From 6ebefbbf2b414ab5ace41749c776133c51bd1fca Mon Sep 17 00:00:00 2001 From: Saul-Mirone Date: Fri, 27 Dec 2024 14:45:11 +0000 Subject: [PATCH] refactor(editor): extract code block (#9397) --- blocksuite/affine/block-code/package.json | 43 +++++++++++++++++++ .../block-code/src}/adapters/extension.ts | 0 .../block-code/src}/adapters/html.ts | 0 .../block-code/src}/adapters/index.ts | 0 .../block-code/src}/adapters/markdown.ts | 0 .../block-code/src}/adapters/notion-html.ts | 0 .../block-code/src}/adapters/plain-text.ts | 0 .../block-code/src}/clipboard/index.ts | 10 ++--- .../block-code/src}/code-block-config.ts | 0 .../block-code/src}/code-block-inline.ts | 0 .../block-code/src}/code-block-service.ts | 0 .../block-code/src}/code-block-spec.ts | 2 +- .../block-code/src}/code-block.ts | 0 .../code-toolbar/components/code-toolbar.ts | 0 .../code-toolbar/components/lang-button.ts | 2 +- .../block-code/src}/code-toolbar/config.ts | 0 .../block-code/src}/code-toolbar/context.ts | 2 +- .../block-code/src}/code-toolbar/index.ts | 2 +- .../block-code/src}/code-toolbar/utils.ts | 0 blocksuite/affine/block-code/src/effects.ts | 35 +++++++++++++++ .../src}/highlight/affine-code-unit.ts | 0 .../block-code/src}/highlight/const.ts | 0 blocksuite/affine/block-code/src/index.ts | 5 +++ .../block-code/src}/styles.ts | 0 blocksuite/affine/block-code/tsconfig.json | 32 ++++++++++++++ blocksuite/blocks/package.json | 1 + .../_common/adapters/html/block-matcher.ts | 2 +- .../adapters/markdown/block-matcher.ts | 2 +- .../adapters/notion-html/block-matcher.ts | 2 +- .../adapters/plain-text/block-matcher.ts | 2 +- blocksuite/blocks/src/_specs/common.ts | 2 +- blocksuite/blocks/src/_specs/group/common.ts | 2 +- .../blocks/src/_specs/preset/mobile-patch.ts | 2 +- blocksuite/blocks/src/code-block/index.ts | 3 -- blocksuite/blocks/src/effects.ts | 12 +----- blocksuite/blocks/src/index.ts | 2 +- .../widgets/code-toolbar/effects.ts | 20 --------- .../blocks/src/root-block/widgets/index.ts | 1 - blocksuite/blocks/tsconfig.json | 3 ++ tools/utils/src/workspace.gen.ts | 15 +++++++ tsconfig.project.json | 1 + yarn.lock | 24 +++++++++++ 42 files changed, 177 insertions(+), 52 deletions(-) create mode 100644 blocksuite/affine/block-code/package.json rename blocksuite/{blocks/src/code-block => affine/block-code/src}/adapters/extension.ts (100%) rename blocksuite/{blocks/src/code-block => affine/block-code/src}/adapters/html.ts (100%) rename blocksuite/{blocks/src/code-block => affine/block-code/src}/adapters/index.ts (100%) rename blocksuite/{blocks/src/code-block => affine/block-code/src}/adapters/markdown.ts (100%) rename blocksuite/{blocks/src/code-block => affine/block-code/src}/adapters/notion-html.ts (100%) rename blocksuite/{blocks/src/code-block => affine/block-code/src}/adapters/plain-text.ts (100%) rename blocksuite/{blocks/src/code-block => affine/block-code/src}/clipboard/index.ts (91%) rename blocksuite/{blocks/src/code-block => affine/block-code/src}/code-block-config.ts (100%) rename blocksuite/{blocks/src/code-block => affine/block-code/src}/code-block-inline.ts (100%) rename blocksuite/{blocks/src/code-block => affine/block-code/src}/code-block-service.ts (100%) rename blocksuite/{blocks/src/code-block => affine/block-code/src}/code-block-spec.ts (90%) rename blocksuite/{blocks/src/code-block => affine/block-code/src}/code-block.ts (100%) rename blocksuite/{blocks/src/root-block/widgets => affine/block-code/src}/code-toolbar/components/code-toolbar.ts (100%) rename blocksuite/{blocks/src/root-block/widgets => affine/block-code/src}/code-toolbar/components/lang-button.ts (98%) rename blocksuite/{blocks/src/root-block/widgets => affine/block-code/src}/code-toolbar/config.ts (100%) rename blocksuite/{blocks/src/root-block/widgets => affine/block-code/src}/code-toolbar/context.ts (91%) rename blocksuite/{blocks/src/root-block/widgets => affine/block-code/src}/code-toolbar/index.ts (98%) rename blocksuite/{blocks/src/root-block/widgets => affine/block-code/src}/code-toolbar/utils.ts (100%) create mode 100644 blocksuite/affine/block-code/src/effects.ts rename blocksuite/{blocks/src/code-block => affine/block-code/src}/highlight/affine-code-unit.ts (100%) rename blocksuite/{blocks/src/code-block => affine/block-code/src}/highlight/const.ts (100%) create mode 100644 blocksuite/affine/block-code/src/index.ts rename blocksuite/{blocks/src/code-block => affine/block-code/src}/styles.ts (100%) create mode 100644 blocksuite/affine/block-code/tsconfig.json delete mode 100644 blocksuite/blocks/src/code-block/index.ts delete mode 100644 blocksuite/blocks/src/root-block/widgets/code-toolbar/effects.ts diff --git a/blocksuite/affine/block-code/package.json b/blocksuite/affine/block-code/package.json new file mode 100644 index 0000000000..b2e5f4d8ae --- /dev/null +++ b/blocksuite/affine/block-code/package.json @@ -0,0 +1,43 @@ +{ + "name": "@blocksuite/affine-block-code", + "description": "Code block for BlockSuite.", + "type": "module", + "scripts": { + "build": "tsc", + "test:unit": "nx vite:test --run --passWithNoTests", + "test:unit:coverage": "nx vite:test --run --coverage", + "test:e2e": "playwright test" + }, + "sideEffects": false, + "keywords": [], + "author": "toeverything", + "license": "MIT", + "dependencies": { + "@blocksuite/affine-components": "workspace:*", + "@blocksuite/affine-model": "workspace:*", + "@blocksuite/affine-shared": "workspace:*", + "@blocksuite/block-std": "workspace:*", + "@blocksuite/global": "workspace:*", + "@blocksuite/inline": "workspace:*", + "@blocksuite/store": "workspace:*", + "@floating-ui/dom": "^1.6.10", + "@lit/context": "^1.1.2", + "@preact/signals-core": "^1.8.0", + "@toeverything/theme": "^1.1.1", + "@types/mdast": "^4.0.4", + "lit": "^3.2.0", + "minimatch": "^10.0.1", + "shiki": "^1.14.1", + "zod": "^3.23.8" + }, + "exports": { + ".": "./src/index.ts", + "./effects": "./src/effects.ts" + }, + "files": [ + "src", + "dist", + "!src/__tests__", + "!dist/__tests__" + ] +} diff --git a/blocksuite/blocks/src/code-block/adapters/extension.ts b/blocksuite/affine/block-code/src/adapters/extension.ts similarity index 100% rename from blocksuite/blocks/src/code-block/adapters/extension.ts rename to blocksuite/affine/block-code/src/adapters/extension.ts diff --git a/blocksuite/blocks/src/code-block/adapters/html.ts b/blocksuite/affine/block-code/src/adapters/html.ts similarity index 100% rename from blocksuite/blocks/src/code-block/adapters/html.ts rename to blocksuite/affine/block-code/src/adapters/html.ts diff --git a/blocksuite/blocks/src/code-block/adapters/index.ts b/blocksuite/affine/block-code/src/adapters/index.ts similarity index 100% rename from blocksuite/blocks/src/code-block/adapters/index.ts rename to blocksuite/affine/block-code/src/adapters/index.ts diff --git a/blocksuite/blocks/src/code-block/adapters/markdown.ts b/blocksuite/affine/block-code/src/adapters/markdown.ts similarity index 100% rename from blocksuite/blocks/src/code-block/adapters/markdown.ts rename to blocksuite/affine/block-code/src/adapters/markdown.ts diff --git a/blocksuite/blocks/src/code-block/adapters/notion-html.ts b/blocksuite/affine/block-code/src/adapters/notion-html.ts similarity index 100% rename from blocksuite/blocks/src/code-block/adapters/notion-html.ts rename to blocksuite/affine/block-code/src/adapters/notion-html.ts diff --git a/blocksuite/blocks/src/code-block/adapters/plain-text.ts b/blocksuite/affine/block-code/src/adapters/plain-text.ts similarity index 100% rename from blocksuite/blocks/src/code-block/adapters/plain-text.ts rename to blocksuite/affine/block-code/src/adapters/plain-text.ts diff --git a/blocksuite/blocks/src/code-block/clipboard/index.ts b/blocksuite/affine/block-code/src/clipboard/index.ts similarity index 91% rename from blocksuite/blocks/src/code-block/clipboard/index.ts rename to blocksuite/affine/block-code/src/clipboard/index.ts index 8fc1ef4c57..3257ec4929 100644 --- a/blocksuite/blocks/src/code-block/clipboard/index.ts +++ b/blocksuite/affine/block-code/src/clipboard/index.ts @@ -8,7 +8,7 @@ import { Clipboard, type UIEventHandler, } from '@blocksuite/block-std'; -import { assertExists, DisposableGroup } from '@blocksuite/global/utils'; +import { DisposableGroup } from '@blocksuite/global/utils'; export class CodeClipboardController { private _clipboard!: Clipboard; @@ -42,17 +42,15 @@ export class CodeClipboardController { .try(cmd => [ cmd.getTextSelection().inline<'currentSelectionPath'>((ctx, next) => { const textSelection = ctx.currentTextSelection; - assertExists(textSelection); + if (!textSelection) return; const end = textSelection.to ?? textSelection.from; next({ currentSelectionPath: end.blockId }); }), cmd.getBlockSelections().inline<'currentSelectionPath'>((ctx, next) => { const currentBlockSelections = ctx.currentBlockSelections; - assertExists(currentBlockSelections); + if (!currentBlockSelections) return; const blockSelection = currentBlockSelections.at(-1); - if (!blockSelection) { - return; - } + if (!blockSelection) return; next({ currentSelectionPath: blockSelection.blockId }); }), ]) diff --git a/blocksuite/blocks/src/code-block/code-block-config.ts b/blocksuite/affine/block-code/src/code-block-config.ts similarity index 100% rename from blocksuite/blocks/src/code-block/code-block-config.ts rename to blocksuite/affine/block-code/src/code-block-config.ts diff --git a/blocksuite/blocks/src/code-block/code-block-inline.ts b/blocksuite/affine/block-code/src/code-block-inline.ts similarity index 100% rename from blocksuite/blocks/src/code-block/code-block-inline.ts rename to blocksuite/affine/block-code/src/code-block-inline.ts diff --git a/blocksuite/blocks/src/code-block/code-block-service.ts b/blocksuite/affine/block-code/src/code-block-service.ts similarity index 100% rename from blocksuite/blocks/src/code-block/code-block-service.ts rename to blocksuite/affine/block-code/src/code-block-service.ts diff --git a/blocksuite/blocks/src/code-block/code-block-spec.ts b/blocksuite/affine/block-code/src/code-block-spec.ts similarity index 90% rename from blocksuite/blocks/src/code-block/code-block-spec.ts rename to blocksuite/affine/block-code/src/code-block-spec.ts index eca27aab85..ea1dcc0aec 100644 --- a/blocksuite/blocks/src/code-block/code-block-spec.ts +++ b/blocksuite/affine/block-code/src/code-block-spec.ts @@ -6,13 +6,13 @@ import { } from '@blocksuite/block-std'; import { literal, unsafeStatic } from 'lit/static-html.js'; -import { AFFINE_CODE_TOOLBAR_WIDGET } from '../root-block/widgets/code-toolbar/index.js'; import { CodeBlockAdapterExtensions } from './adapters/extension.js'; import { CodeBlockInlineManagerExtension, CodeBlockUnitSpecExtension, } from './code-block-inline.js'; import { CodeBlockService } from './code-block-service.js'; +import { AFFINE_CODE_TOOLBAR_WIDGET } from './code-toolbar/index.js'; export const CodeBlockSpec: ExtensionType[] = [ FlavourExtension('affine:code'), diff --git a/blocksuite/blocks/src/code-block/code-block.ts b/blocksuite/affine/block-code/src/code-block.ts similarity index 100% rename from blocksuite/blocks/src/code-block/code-block.ts rename to blocksuite/affine/block-code/src/code-block.ts diff --git a/blocksuite/blocks/src/root-block/widgets/code-toolbar/components/code-toolbar.ts b/blocksuite/affine/block-code/src/code-toolbar/components/code-toolbar.ts similarity index 100% rename from blocksuite/blocks/src/root-block/widgets/code-toolbar/components/code-toolbar.ts rename to blocksuite/affine/block-code/src/code-toolbar/components/code-toolbar.ts diff --git a/blocksuite/blocks/src/root-block/widgets/code-toolbar/components/lang-button.ts b/blocksuite/affine/block-code/src/code-toolbar/components/lang-button.ts similarity index 98% rename from blocksuite/blocks/src/root-block/widgets/code-toolbar/components/lang-button.ts rename to blocksuite/affine/block-code/src/code-toolbar/components/lang-button.ts index 222d7c3cc2..eb2c1841c8 100644 --- a/blocksuite/blocks/src/root-block/widgets/code-toolbar/components/lang-button.ts +++ b/blocksuite/affine/block-code/src/code-toolbar/components/lang-button.ts @@ -11,7 +11,7 @@ import { property, query } from 'lit/decorators.js'; import { styleMap } from 'lit/directives/style-map.js'; import { html } from 'lit/static-html.js'; -import type { CodeBlockComponent } from '../../../../code-block/code-block.js'; +import type { CodeBlockComponent } from '../..'; export class LanguageListButton extends WithDisposable( SignalWatcher(LitElement) diff --git a/blocksuite/blocks/src/root-block/widgets/code-toolbar/config.ts b/blocksuite/affine/block-code/src/code-toolbar/config.ts similarity index 100% rename from blocksuite/blocks/src/root-block/widgets/code-toolbar/config.ts rename to blocksuite/affine/block-code/src/code-toolbar/config.ts diff --git a/blocksuite/blocks/src/root-block/widgets/code-toolbar/context.ts b/blocksuite/affine/block-code/src/code-toolbar/context.ts similarity index 91% rename from blocksuite/blocks/src/root-block/widgets/code-toolbar/context.ts rename to blocksuite/affine/block-code/src/code-toolbar/context.ts index 58bf6abd6d..49dcccb5cd 100644 --- a/blocksuite/blocks/src/root-block/widgets/code-toolbar/context.ts +++ b/blocksuite/affine/block-code/src/code-toolbar/context.ts @@ -1,6 +1,6 @@ import { MenuContext } from '@blocksuite/affine-components/toolbar'; -import type { CodeBlockComponent } from '../../../code-block/code-block.js'; +import type { CodeBlockComponent } from '../code-block'; export class CodeBlockToolbarContext extends MenuContext { override close = () => { diff --git a/blocksuite/blocks/src/root-block/widgets/code-toolbar/index.ts b/blocksuite/affine/block-code/src/code-toolbar/index.ts similarity index 98% rename from blocksuite/blocks/src/root-block/widgets/code-toolbar/index.ts rename to blocksuite/affine/block-code/src/code-toolbar/index.ts index b776ef004b..e0413bde2d 100644 --- a/blocksuite/blocks/src/root-block/widgets/code-toolbar/index.ts +++ b/blocksuite/affine/block-code/src/code-toolbar/index.ts @@ -13,7 +13,7 @@ import { WidgetComponent } from '@blocksuite/block-std'; import { limitShift, shift } from '@floating-ui/dom'; import { html } from 'lit'; -import type { CodeBlockComponent } from '../../../code-block/code-block.js'; +import type { CodeBlockComponent } from '../code-block.js'; import { MORE_GROUPS, PRIMARY_GROUPS } from './config.js'; import { CodeBlockToolbarContext } from './context.js'; diff --git a/blocksuite/blocks/src/root-block/widgets/code-toolbar/utils.ts b/blocksuite/affine/block-code/src/code-toolbar/utils.ts similarity index 100% rename from blocksuite/blocks/src/root-block/widgets/code-toolbar/utils.ts rename to blocksuite/affine/block-code/src/code-toolbar/utils.ts diff --git a/blocksuite/affine/block-code/src/effects.ts b/blocksuite/affine/block-code/src/effects.ts new file mode 100644 index 0000000000..875201b09c --- /dev/null +++ b/blocksuite/affine/block-code/src/effects.ts @@ -0,0 +1,35 @@ +import type * as CommandsType from '@blocksuite/affine-shared/commands'; + +import { CodeBlockComponent } from './code-block'; +import type { CodeBlockConfig } from './code-block-config'; +import { + AFFINE_CODE_TOOLBAR_WIDGET, + AffineCodeToolbarWidget, +} from './code-toolbar'; +import { AffineCodeToolbar } from './code-toolbar/components/code-toolbar'; +import { LanguageListButton } from './code-toolbar/components/lang-button'; +import { AffineCodeUnit } from './highlight/affine-code-unit'; + +export function effects() { + customElements.define('language-list-button', LanguageListButton); + customElements.define('affine-code-toolbar', AffineCodeToolbar); + customElements.define(AFFINE_CODE_TOOLBAR_WIDGET, AffineCodeToolbarWidget); + customElements.define('affine-code-unit', AffineCodeUnit); + customElements.define('affine-code', CodeBlockComponent); +} + +declare type _GLOBAL_ = typeof CommandsType; + +declare global { + namespace BlockSuite { + interface BlockConfigs { + 'affine:code': CodeBlockConfig; + } + } + + interface HTMLElementTagNameMap { + 'language-list-button': LanguageListButton; + 'affine-code-toolbar': AffineCodeToolbar; + [AFFINE_CODE_TOOLBAR_WIDGET]: AffineCodeToolbarWidget; + } +} diff --git a/blocksuite/blocks/src/code-block/highlight/affine-code-unit.ts b/blocksuite/affine/block-code/src/highlight/affine-code-unit.ts similarity index 100% rename from blocksuite/blocks/src/code-block/highlight/affine-code-unit.ts rename to blocksuite/affine/block-code/src/highlight/affine-code-unit.ts diff --git a/blocksuite/blocks/src/code-block/highlight/const.ts b/blocksuite/affine/block-code/src/highlight/const.ts similarity index 100% rename from blocksuite/blocks/src/code-block/highlight/const.ts rename to blocksuite/affine/block-code/src/highlight/const.ts diff --git a/blocksuite/affine/block-code/src/index.ts b/blocksuite/affine/block-code/src/index.ts new file mode 100644 index 0000000000..dc06c61a67 --- /dev/null +++ b/blocksuite/affine/block-code/src/index.ts @@ -0,0 +1,5 @@ +export * from './adapters'; +export * from './code-block'; +export * from './code-block-config'; +export * from './code-block-spec'; +export * from './code-toolbar'; diff --git a/blocksuite/blocks/src/code-block/styles.ts b/blocksuite/affine/block-code/src/styles.ts similarity index 100% rename from blocksuite/blocks/src/code-block/styles.ts rename to blocksuite/affine/block-code/src/styles.ts diff --git a/blocksuite/affine/block-code/tsconfig.json b/blocksuite/affine/block-code/tsconfig.json new file mode 100644 index 0000000000..c1a5453aa5 --- /dev/null +++ b/blocksuite/affine/block-code/tsconfig.json @@ -0,0 +1,32 @@ +{ + "extends": "../../tsconfig.json", + "compilerOptions": { + "rootDir": "./src/", + "outDir": "./dist/", + "noEmit": false + }, + "include": ["./src"], + "references": [ + { + "path": "../../framework/global" + }, + { + "path": "../../framework/store" + }, + { + "path": "../../framework/block-std" + }, + { + "path": "../../framework/inline" + }, + { + "path": "../model" + }, + { + "path": "../components" + }, + { + "path": "../shared" + } + ] +} diff --git a/blocksuite/blocks/package.json b/blocksuite/blocks/package.json index 3576fc23e4..3a7010c929 100644 --- a/blocksuite/blocks/package.json +++ b/blocksuite/blocks/package.json @@ -16,6 +16,7 @@ "dependencies": { "@blocksuite/affine-block-attachment": "workspace:*", "@blocksuite/affine-block-bookmark": "workspace:*", + "@blocksuite/affine-block-code": "workspace:*", "@blocksuite/affine-block-divider": "workspace:*", "@blocksuite/affine-block-edgeless-text": "workspace:*", "@blocksuite/affine-block-embed": "workspace:*", diff --git a/blocksuite/blocks/src/_common/adapters/html/block-matcher.ts b/blocksuite/blocks/src/_common/adapters/html/block-matcher.ts index cdd6c8b58d..e70849ced5 100644 --- a/blocksuite/blocks/src/_common/adapters/html/block-matcher.ts +++ b/blocksuite/blocks/src/_common/adapters/html/block-matcher.ts @@ -1,4 +1,5 @@ import { BookmarkBlockHtmlAdapterExtension } from '@blocksuite/affine-block-bookmark'; +import { CodeBlockHtmlAdapterExtension } from '@blocksuite/affine-block-code'; import { DividerBlockHtmlAdapterExtension } from '@blocksuite/affine-block-divider'; import { EmbedFigmaBlockHtmlAdapterExtension, @@ -12,7 +13,6 @@ import { ImageBlockHtmlAdapterExtension } from '@blocksuite/affine-block-image'; import { ListBlockHtmlAdapterExtension } from '@blocksuite/affine-block-list'; import { ParagraphBlockHtmlAdapterExtension } from '@blocksuite/affine-block-paragraph'; -import { CodeBlockHtmlAdapterExtension } from '../../../code-block/adapters/html.js'; import { DatabaseBlockHtmlAdapterExtension } from '../../../database-block/adapters/html.js'; import { RootBlockHtmlAdapterExtension } from '../../../root-block/adapters/html.js'; diff --git a/blocksuite/blocks/src/_common/adapters/markdown/block-matcher.ts b/blocksuite/blocks/src/_common/adapters/markdown/block-matcher.ts index 7ea99794e4..c88b1a81ad 100644 --- a/blocksuite/blocks/src/_common/adapters/markdown/block-matcher.ts +++ b/blocksuite/blocks/src/_common/adapters/markdown/block-matcher.ts @@ -1,4 +1,5 @@ import { bookmarkBlockMarkdownAdapterMatcher } from '@blocksuite/affine-block-bookmark'; +import { codeBlockMarkdownAdapterMatcher } from '@blocksuite/affine-block-code'; import { dividerBlockMarkdownAdapterMatcher } from '@blocksuite/affine-block-divider'; import { embedFigmaBlockMarkdownAdapterMatcher, @@ -13,7 +14,6 @@ import { latexBlockMarkdownAdapterMatcher } from '@blocksuite/affine-block-latex import { listBlockMarkdownAdapterMatcher } from '@blocksuite/affine-block-list'; import { paragraphBlockMarkdownAdapterMatcher } from '@blocksuite/affine-block-paragraph'; -import { codeBlockMarkdownAdapterMatcher } from '../../../code-block/adapters/markdown.js'; import { databaseBlockMarkdownAdapterMatcher } from '../../../database-block/adapters/markdown.js'; import { rootBlockMarkdownAdapterMatcher } from '../../../root-block/adapters/markdown.js'; diff --git a/blocksuite/blocks/src/_common/adapters/notion-html/block-matcher.ts b/blocksuite/blocks/src/_common/adapters/notion-html/block-matcher.ts index 6647fc4d50..2d67370330 100644 --- a/blocksuite/blocks/src/_common/adapters/notion-html/block-matcher.ts +++ b/blocksuite/blocks/src/_common/adapters/notion-html/block-matcher.ts @@ -1,5 +1,6 @@ import { AttachmentBlockNotionHtmlAdapterExtension } from '@blocksuite/affine-block-attachment'; import { BookmarkBlockNotionHtmlAdapterExtension } from '@blocksuite/affine-block-bookmark'; +import { CodeBlockNotionHtmlAdapterExtension } from '@blocksuite/affine-block-code'; import { DividerBlockNotionHtmlAdapterExtension } from '@blocksuite/affine-block-divider'; import { EmbedFigmaBlockNotionHtmlAdapterExtension, @@ -13,7 +14,6 @@ import { ListBlockNotionHtmlAdapterExtension } from '@blocksuite/affine-block-li import { ParagraphBlockNotionHtmlAdapterExtension } from '@blocksuite/affine-block-paragraph'; import type { ExtensionType } from '@blocksuite/block-std'; -import { CodeBlockNotionHtmlAdapterExtension } from '../../../code-block/adapters/notion-html.js'; import { DatabaseBlockNotionHtmlAdapterExtension } from '../../../database-block/adapters/notion-html.js'; import { RootBlockNotionHtmlAdapterExtension } from '../../../root-block/adapters/notion-html.js'; diff --git a/blocksuite/blocks/src/_common/adapters/plain-text/block-matcher.ts b/blocksuite/blocks/src/_common/adapters/plain-text/block-matcher.ts index 5a1f5ea407..ec188d1b79 100644 --- a/blocksuite/blocks/src/_common/adapters/plain-text/block-matcher.ts +++ b/blocksuite/blocks/src/_common/adapters/plain-text/block-matcher.ts @@ -1,4 +1,5 @@ import { BookmarkBlockPlainTextAdapterExtension } from '@blocksuite/affine-block-bookmark'; +import { CodeBlockPlainTextAdapterExtension } from '@blocksuite/affine-block-code'; import { DividerBlockPlainTextAdapterExtension } from '@blocksuite/affine-block-divider'; import { EmbedFigmaBlockPlainTextAdapterExtension, @@ -13,7 +14,6 @@ import { ListBlockPlainTextAdapterExtension } from '@blocksuite/affine-block-lis import { ParagraphBlockPlainTextAdapterExtension } from '@blocksuite/affine-block-paragraph'; import type { ExtensionType } from '@blocksuite/block-std'; -import { CodeBlockPlainTextAdapterExtension } from '../../../code-block/adapters/plain-text.js'; import { DatabaseBlockPlainTextAdapterExtension } from '../../../database-block/adapters/plain-text.js'; export const defaultBlockPlainTextAdapterMatchers: ExtensionType[] = [ diff --git a/blocksuite/blocks/src/_specs/common.ts b/blocksuite/blocks/src/_specs/common.ts index 817b8d986f..ef01f78fe3 100644 --- a/blocksuite/blocks/src/_specs/common.ts +++ b/blocksuite/blocks/src/_specs/common.ts @@ -1,5 +1,6 @@ import { AttachmentBlockSpec } from '@blocksuite/affine-block-attachment'; import { BookmarkBlockSpec } from '@blocksuite/affine-block-bookmark'; +import { CodeBlockSpec } from '@blocksuite/affine-block-code'; import { DividerBlockSpec } from '@blocksuite/affine-block-divider'; import { EmbedExtensions } from '@blocksuite/affine-block-embed'; import { ImageBlockSpec } from '@blocksuite/affine-block-image'; @@ -14,7 +15,6 @@ import { EditPropsStore } from '@blocksuite/affine-shared/services'; import type { ExtensionType } from '@blocksuite/block-std'; import { AdapterFactoryExtensions } from '../_common/adapters/extension.js'; -import { CodeBlockSpec } from '../code-block/code-block-spec.js'; import { DataViewBlockSpec } from '../data-view-block/data-view-spec.js'; import { DatabaseBlockSpec } from '../database-block/database-spec.js'; diff --git a/blocksuite/blocks/src/_specs/group/common.ts b/blocksuite/blocks/src/_specs/group/common.ts index 32d32aa240..bdcbd8fe9f 100644 --- a/blocksuite/blocks/src/_specs/group/common.ts +++ b/blocksuite/blocks/src/_specs/group/common.ts @@ -1,5 +1,6 @@ import { AttachmentBlockSpec } from '@blocksuite/affine-block-attachment'; import { BookmarkBlockSpec } from '@blocksuite/affine-block-bookmark'; +import { CodeBlockSpec } from '@blocksuite/affine-block-code'; import { DividerBlockSpec } from '@blocksuite/affine-block-divider'; import { EmbedFigmaBlockSpec, @@ -18,7 +19,6 @@ import { } from '@blocksuite/affine-block-note'; import { ParagraphBlockSpec } from '@blocksuite/affine-block-paragraph'; -import { CodeBlockSpec } from '../../code-block/code-block-spec.js'; import { DataViewBlockSpec } from '../../data-view-block/data-view-spec.js'; import { DatabaseBlockSpec } from '../../database-block/database-spec.js'; diff --git a/blocksuite/blocks/src/_specs/preset/mobile-patch.ts b/blocksuite/blocks/src/_specs/preset/mobile-patch.ts index 9b26e38d43..985e792ede 100644 --- a/blocksuite/blocks/src/_specs/preset/mobile-patch.ts +++ b/blocksuite/blocks/src/_specs/preset/mobile-patch.ts @@ -1,3 +1,4 @@ +import type { CodeBlockConfig } from '@blocksuite/affine-block-code'; import { type ReferenceNodeConfig, ReferenceNodeConfigIdentifier, @@ -11,7 +12,6 @@ import { } from '@blocksuite/block-std'; import type { Container } from '@blocksuite/global/di'; -import type { CodeBlockConfig } from '../../code-block/code-block-config.js'; import { AFFINE_EMBED_CARD_TOOLBAR_WIDGET } from '../../root-block/widgets/embed-card-toolbar/embed-card-toolbar.js'; import { AFFINE_FORMAT_BAR_WIDGET } from '../../root-block/widgets/format-bar/format-bar.js'; import { AFFINE_SLASH_MENU_WIDGET } from '../../root-block/widgets/slash-menu/index.js'; diff --git a/blocksuite/blocks/src/code-block/index.ts b/blocksuite/blocks/src/code-block/index.ts deleted file mode 100644 index d8c83b62f8..0000000000 --- a/blocksuite/blocks/src/code-block/index.ts +++ /dev/null @@ -1,3 +0,0 @@ -export * from './adapters/markdown.js'; -export * from './code-block.js'; -export * from './code-block-config.js'; diff --git a/blocksuite/blocks/src/effects.ts b/blocksuite/blocks/src/effects.ts index ce0f221566..52990613a7 100644 --- a/blocksuite/blocks/src/effects.ts +++ b/blocksuite/blocks/src/effects.ts @@ -1,5 +1,6 @@ import { effects as blockAttachmentEffects } from '@blocksuite/affine-block-attachment/effects'; import { effects as blockBookmarkEffects } from '@blocksuite/affine-block-bookmark/effects'; +import { effects as blockCodeEffects } from '@blocksuite/affine-block-code/effects'; import { effects as blockDividerEffects } from '@blocksuite/affine-block-divider/effects'; import { effects as blockEdgelessTextEffects } from '@blocksuite/affine-block-edgeless-text/effects'; import { effects as blockEmbedEffects } from '@blocksuite/affine-block-embed/effects'; @@ -36,11 +37,6 @@ import { EmbedCardEditCaptionEditModal } from './_common/components/embed-card/m import { EmbedCardCreateModal } from './_common/components/embed-card/modal/embed-card-create-modal.js'; import { EmbedCardEditModal } from './_common/components/embed-card/modal/embed-card-edit-modal.js'; import { registerSpecs } from './_specs/register-specs.js'; -import { AffineCodeUnit } from './code-block/highlight/affine-code-unit.js'; -import { - CodeBlockComponent, - type CodeBlockConfig, -} from './code-block/index.js'; import { DataViewBlockComponent } from './data-view-block/index.js'; import { CenterPeek } from './database-block/components/layout.js'; import { DatabaseTitle } from './database-block/components/title/index.js'; @@ -184,7 +180,6 @@ import { AIPanelGenerating, AIPanelInput, } from './root-block/widgets/ai-panel/components/index.js'; -import { effects as widgetCodeToolbarEffects } from './root-block/widgets/code-toolbar/effects.js'; import { AFFINE_DOC_REMOTE_SELECTION_WIDGET } from './root-block/widgets/doc-remote-selection/index.js'; import { DragPreview } from './root-block/widgets/drag-handle/components/drag-preview.js'; import { DropIndicator } from './root-block/widgets/drag-handle/components/drop-indicator.js'; @@ -252,6 +247,7 @@ export function effects() { blockLatexEffects(); blockEdgelessTextEffects(); blockDividerEffects(); + blockCodeEffects(); componentCaptionEffects(); componentContextMenuEffects(); @@ -268,7 +264,6 @@ export function effects() { widgetLinkedDocEffects(); widgetFrameTitleEffects(); widgetEdgelessElementToolbarEffects(); - widgetCodeToolbarEffects(); dataViewEffects(); @@ -281,7 +276,6 @@ export function effects() { 'data-view-header-area-text-editing', HeaderAreaTextCellEditing ); - customElements.define('affine-code-unit', AffineCodeUnit); customElements.define('affine-database-rich-text-cell', RichTextCell); customElements.define( 'affine-database-rich-text-cell-editing', @@ -292,7 +286,6 @@ export function effects() { customElements.define('database-datasource-block-renderer', BlockRenderer); customElements.define('affine-page-root', PageRootBlockComponent); customElements.define('affine-preview-root', PreviewRootBlockComponent); - customElements.define('affine-code', CodeBlockComponent); customElements.define('mini-mindmap-preview', MiniMindmapPreview); customElements.define('mini-mindmap-surface-block', MindmapSurfaceBlock); customElements.define('affine-data-view', DataViewBlockComponent); @@ -519,7 +512,6 @@ declare global { updatedBlocks?: BlockModel[]; } interface BlockConfigs { - 'affine:code': CodeBlockConfig; 'affine:page': RootBlockConfig; } interface BlockServices { diff --git a/blocksuite/blocks/src/index.ts b/blocksuite/blocks/src/index.ts index cfd77d2555..8ec27a3680 100644 --- a/blocksuite/blocks/src/index.ts +++ b/blocksuite/blocks/src/index.ts @@ -16,7 +16,6 @@ export * from './_common/test-utils/test-utils.js'; export * from './_common/transformers/index.js'; export { type AbstractEditor } from './_common/types.js'; export * from './_specs/index.js'; -export * from './code-block/index.js'; export * from './data-view-block/index.js'; export * from './database-block/index.js'; export { EdgelessTemplatePanel } from './root-block/edgeless/components/toolbar/template/template-panel.js'; @@ -44,6 +43,7 @@ export { export * from './surface-ref-block/index.js'; export * from '@blocksuite/affine-block-attachment'; export * from '@blocksuite/affine-block-bookmark'; +export * from '@blocksuite/affine-block-code'; export * from '@blocksuite/affine-block-divider'; export * from '@blocksuite/affine-block-edgeless-text'; export * from '@blocksuite/affine-block-embed'; diff --git a/blocksuite/blocks/src/root-block/widgets/code-toolbar/effects.ts b/blocksuite/blocks/src/root-block/widgets/code-toolbar/effects.ts deleted file mode 100644 index aaa381830f..0000000000 --- a/blocksuite/blocks/src/root-block/widgets/code-toolbar/effects.ts +++ /dev/null @@ -1,20 +0,0 @@ -import { AffineCodeToolbar } from './components/code-toolbar.js'; -import { LanguageListButton } from './components/lang-button.js'; -import { - AFFINE_CODE_TOOLBAR_WIDGET, - AffineCodeToolbarWidget, -} from './index.js'; - -export function effects() { - customElements.define('language-list-button', LanguageListButton); - customElements.define('affine-code-toolbar', AffineCodeToolbar); - customElements.define(AFFINE_CODE_TOOLBAR_WIDGET, AffineCodeToolbarWidget); -} - -declare global { - interface HTMLElementTagNameMap { - 'language-list-button': LanguageListButton; - 'affine-code-toolbar': AffineCodeToolbar; - [AFFINE_CODE_TOOLBAR_WIDGET]: AffineCodeToolbarWidget; - } -} diff --git a/blocksuite/blocks/src/root-block/widgets/index.ts b/blocksuite/blocks/src/root-block/widgets/index.ts index 3227b96c60..36a553ed6e 100644 --- a/blocksuite/blocks/src/root-block/widgets/index.ts +++ b/blocksuite/blocks/src/root-block/widgets/index.ts @@ -6,7 +6,6 @@ export { type AffineAIPanelState, type AffineAIPanelWidgetConfig, } from './ai-panel/type.js'; -export { AffineCodeToolbarWidget } from './code-toolbar/index.js'; export { AffineDocRemoteSelectionWidget } from './doc-remote-selection/doc-remote-selection.js'; export { AffineDragHandleWidget } from './drag-handle/drag-handle.js'; export { diff --git a/blocksuite/blocks/tsconfig.json b/blocksuite/blocks/tsconfig.json index 9815d55d82..835b47b828 100644 --- a/blocksuite/blocks/tsconfig.json +++ b/blocksuite/blocks/tsconfig.json @@ -37,6 +37,9 @@ { "path": "../affine/block-list" }, + { + "path": "../affine/block-code" + }, { "path": "../affine/block-embed" }, diff --git a/tools/utils/src/workspace.gen.ts b/tools/utils/src/workspace.gen.ts index 78ecce3429..cdd7fb4f15 100644 --- a/tools/utils/src/workspace.gen.ts +++ b/tools/utils/src/workspace.gen.ts @@ -42,6 +42,19 @@ export const PackageList = [ 'blocksuite/framework/store', ], }, + { + location: 'blocksuite/affine/block-code', + name: '@blocksuite/affine-block-code', + workspaceDependencies: [ + 'blocksuite/affine/components', + 'blocksuite/affine/model', + 'blocksuite/affine/shared', + 'blocksuite/framework/block-std', + 'blocksuite/framework/global', + 'blocksuite/framework/inline', + 'blocksuite/framework/store', + ], + }, { location: 'blocksuite/affine/block-divider', name: '@blocksuite/affine-block-divider', @@ -237,6 +250,7 @@ export const PackageList = [ workspaceDependencies: [ 'blocksuite/affine/block-attachment', 'blocksuite/affine/block-bookmark', + 'blocksuite/affine/block-code', 'blocksuite/affine/block-divider', 'blocksuite/affine/block-edgeless-text', 'blocksuite/affine/block-embed', @@ -584,6 +598,7 @@ export type PackageName = | '@blocksuite/affine' | '@blocksuite/affine-block-attachment' | '@blocksuite/affine-block-bookmark' + | '@blocksuite/affine-block-code' | '@blocksuite/affine-block-divider' | '@blocksuite/affine-block-edgeless-text' | '@blocksuite/affine-block-embed' diff --git a/tsconfig.project.json b/tsconfig.project.json index eb35c54163..670ccf597e 100644 --- a/tsconfig.project.json +++ b/tsconfig.project.json @@ -9,6 +9,7 @@ { "path": "./blocksuite/affine/all" }, { "path": "./blocksuite/affine/block-attachment" }, { "path": "./blocksuite/affine/block-bookmark" }, + { "path": "./blocksuite/affine/block-code" }, { "path": "./blocksuite/affine/block-divider" }, { "path": "./blocksuite/affine/block-edgeless-text" }, { "path": "./blocksuite/affine/block-embed" }, diff --git a/yarn.lock b/yarn.lock index 123827e086..3d6a670eb4 100644 --- a/yarn.lock +++ b/yarn.lock @@ -3289,6 +3289,29 @@ __metadata: languageName: unknown linkType: soft +"@blocksuite/affine-block-code@workspace:*, @blocksuite/affine-block-code@workspace:blocksuite/affine/block-code": + version: 0.0.0-use.local + resolution: "@blocksuite/affine-block-code@workspace:blocksuite/affine/block-code" + dependencies: + "@blocksuite/affine-components": "workspace:*" + "@blocksuite/affine-model": "workspace:*" + "@blocksuite/affine-shared": "workspace:*" + "@blocksuite/block-std": "workspace:*" + "@blocksuite/global": "workspace:*" + "@blocksuite/inline": "workspace:*" + "@blocksuite/store": "workspace:*" + "@floating-ui/dom": "npm:^1.6.10" + "@lit/context": "npm:^1.1.2" + "@preact/signals-core": "npm:^1.8.0" + "@toeverything/theme": "npm:^1.1.1" + "@types/mdast": "npm:^4.0.4" + lit: "npm:^3.2.0" + minimatch: "npm:^10.0.1" + shiki: "npm:^1.14.1" + zod: "npm:^3.23.8" + languageName: unknown + linkType: soft + "@blocksuite/affine-block-divider@workspace:*, @blocksuite/affine-block-divider@workspace:blocksuite/affine/block-divider": version: 0.0.0-use.local resolution: "@blocksuite/affine-block-divider@workspace:blocksuite/affine/block-divider" @@ -3645,6 +3668,7 @@ __metadata: dependencies: "@blocksuite/affine-block-attachment": "workspace:*" "@blocksuite/affine-block-bookmark": "workspace:*" + "@blocksuite/affine-block-code": "workspace:*" "@blocksuite/affine-block-divider": "workspace:*" "@blocksuite/affine-block-edgeless-text": "workspace:*" "@blocksuite/affine-block-embed": "workspace:*"