diff --git a/blocksuite/affine/all/package.json b/blocksuite/affine/all/package.json index 1ffa70a7e5..f900a2903d 100644 --- a/blocksuite/affine/all/package.json +++ b/blocksuite/affine/all/package.json @@ -138,7 +138,9 @@ "./blocks/surface-ref": "./src/blocks/surface-ref/index.ts", "./blocks/surface-ref/store": "./src/blocks/surface-ref/store.ts", "./blocks/surface-ref/view": "./src/blocks/surface-ref/view.ts", - "./blocks/table": "./src/blocks/table.ts", + "./blocks/table": "./src/blocks/table/index.ts", + "./blocks/table/store": "./src/blocks/table/store.ts", + "./blocks/table/view": "./src/blocks/table/view.ts", "./data-view": "./src/data-view/index.ts", "./data-view/effects": "./src/data-view/effects.ts", "./inlines/link": "./src/inlines/link.ts", diff --git a/blocksuite/affine/all/src/__tests__/utils/store.ts b/blocksuite/affine/all/src/__tests__/utils/store.ts index dfe695a9a0..ce218b5b76 100644 --- a/blocksuite/affine/all/src/__tests__/utils/store.ts +++ b/blocksuite/affine/all/src/__tests__/utils/store.ts @@ -14,6 +14,7 @@ import { ListStoreExtension } from '@blocksuite/affine-block-list/store'; import { NoteStoreExtension } from '@blocksuite/affine-block-note/store'; import { ParagraphStoreExtension } from '@blocksuite/affine-block-paragraph/store'; import { SurfaceRefStoreExtension } from '@blocksuite/affine-block-surface-ref/store'; +import { TableStoreExtension } from '@blocksuite/affine-block-table/store'; import { StoreExtensionManager } from '@blocksuite/affine-ext-loader'; import { MigratingStoreExtension } from '../../extensions/store'; @@ -35,6 +36,7 @@ const manager = new StoreExtensionManager([ NoteStoreExtension, ParagraphStoreExtension, SurfaceRefStoreExtension, + TableStoreExtension, MigratingStoreExtension, ]); diff --git a/blocksuite/affine/all/src/blocks/table.ts b/blocksuite/affine/all/src/blocks/table/index.ts similarity index 100% rename from blocksuite/affine/all/src/blocks/table.ts rename to blocksuite/affine/all/src/blocks/table/index.ts diff --git a/blocksuite/affine/all/src/blocks/table/store.ts b/blocksuite/affine/all/src/blocks/table/store.ts new file mode 100644 index 0000000000..53a3e02a9c --- /dev/null +++ b/blocksuite/affine/all/src/blocks/table/store.ts @@ -0,0 +1 @@ +export * from '@blocksuite/affine-block-table/store'; diff --git a/blocksuite/affine/all/src/blocks/table/view.ts b/blocksuite/affine/all/src/blocks/table/view.ts new file mode 100644 index 0000000000..d57f83eb2b --- /dev/null +++ b/blocksuite/affine/all/src/blocks/table/view.ts @@ -0,0 +1 @@ +export * from '@blocksuite/affine-block-table/view'; diff --git a/blocksuite/affine/all/src/extensions/effects.ts b/blocksuite/affine/all/src/extensions/effects.ts index 2c8ac16dc8..f0b4b41a7c 100644 --- a/blocksuite/affine/all/src/extensions/effects.ts +++ b/blocksuite/affine/all/src/extensions/effects.ts @@ -1,6 +1,5 @@ import { effects as blockRootEffects } from '@blocksuite/affine-block-root/effects'; import { effects as blockSurfaceEffects } from '@blocksuite/affine-block-surface/effects'; -import { effects as blockTableEffects } from '@blocksuite/affine-block-table/effects'; import { BlockSelection } from '@blocksuite/affine-components/block-selection'; import { BlockZeroWidth } from '@blocksuite/affine-components/block-zero-width'; import { effects as componentCaptionEffects } from '@blocksuite/affine-components/caption'; @@ -61,7 +60,6 @@ export function effects() { inlineMentionEffects(); blockSurfaceEffects(); - blockTableEffects(); blockRootEffects(); componentCaptionEffects(); diff --git a/blocksuite/affine/all/src/extensions/migrating.ts b/blocksuite/affine/all/src/extensions/migrating.ts index 63905c437e..cb8f1e3ac4 100644 --- a/blocksuite/affine/all/src/extensions/migrating.ts +++ b/blocksuite/affine/all/src/extensions/migrating.ts @@ -11,7 +11,6 @@ import { PageSurfaceBlockSpec, SurfaceBlockAdapterExtensions, } from '@blocksuite/affine-block-surface'; -import { TableBlockSpec } from '@blocksuite/affine-block-table'; import { brushToMarkdownAdapterMatcher, brushToPlainTextAdapterMatcher, @@ -67,7 +66,6 @@ const CommonBlockSpecs: ExtensionType[] = [ inlinePresetExtensions, DocDisplayMetaService, EditPropsStore, - TableBlockSpec, DefaultOpenDocExtension, FontLoaderService, diff --git a/blocksuite/affine/all/src/extensions/store.ts b/blocksuite/affine/all/src/extensions/store.ts index c3e5fe5aa9..1a723dee9e 100644 --- a/blocksuite/affine/all/src/extensions/store.ts +++ b/blocksuite/affine/all/src/extensions/store.ts @@ -9,10 +9,6 @@ import { RootBlockNotionHtmlAdapterExtension, } from '@blocksuite/affine-block-root'; import { SurfaceBlockSchemaExtension } from '@blocksuite/affine-block-surface'; -import { - TableBlockAdapterExtensions, - TableSelectionExtension, -} from '@blocksuite/affine-block-table'; import { type StoreExtensionContext, StoreExtensionProvider, @@ -27,7 +23,6 @@ import { } from '@blocksuite/affine-inline-preset'; import { RootBlockSchemaExtension, - TableBlockSchemaExtension, TranscriptionBlockSchemaExtension, } from '@blocksuite/affine-model'; import { @@ -114,7 +109,6 @@ function getPlainTextAdapterExtensions(): ExtensionType[] { const MigratingStoreExtensions: ExtensionType[] = [ RootBlockSchemaExtension, SurfaceBlockSchemaExtension, - TableBlockSchemaExtension, TranscriptionBlockSchemaExtension, BlockSelectionExtension, @@ -123,9 +117,7 @@ const MigratingStoreExtensions: ExtensionType[] = [ CursorSelectionExtension, HighlightSelectionExtension, DatabaseSelectionExtension, - TableSelectionExtension, - TableBlockAdapterExtensions, getHtmlAdapterExtensions(), getMarkdownAdapterExtensions(), getNotionHtmlAdapterExtensions(), diff --git a/blocksuite/affine/blocks/table/package.json b/blocksuite/affine/blocks/table/package.json index b9e1e1836d..7d611142ba 100644 --- a/blocksuite/affine/blocks/table/package.json +++ b/blocksuite/affine/blocks/table/package.json @@ -12,6 +12,7 @@ "dependencies": { "@atlaskit/pragmatic-drag-and-drop": "^1.4.0", "@blocksuite/affine-components": "workspace:*", + "@blocksuite/affine-ext-loader": "workspace:*", "@blocksuite/affine-inline-preset": "workspace:*", "@blocksuite/affine-model": "workspace:*", "@blocksuite/affine-rich-text": "workspace:*", @@ -32,7 +33,9 @@ }, "exports": { ".": "./src/index.ts", - "./effects": "./src/effects.ts" + "./effects": "./src/effects.ts", + "./view": "./src/view.ts", + "./store": "./src/store.ts" }, "files": [ "src", diff --git a/blocksuite/affine/blocks/table/src/store.ts b/blocksuite/affine/blocks/table/src/store.ts new file mode 100644 index 0000000000..dbb4191cce --- /dev/null +++ b/blocksuite/affine/blocks/table/src/store.ts @@ -0,0 +1,19 @@ +import { + type StoreExtensionContext, + StoreExtensionProvider, +} from '@blocksuite/affine-ext-loader'; +import { TableBlockSchemaExtension } from '@blocksuite/affine-model'; + +import { TableBlockAdapterExtensions } from './adapters/extension'; +import { TableSelectionExtension } from './selection-schema'; + +export class TableStoreExtension extends StoreExtensionProvider { + override name = 'affine-table-block'; + + override setup(context: StoreExtensionContext) { + super.setup(context); + context.register(TableBlockSchemaExtension); + context.register(TableBlockAdapterExtensions); + context.register(TableSelectionExtension); + } +} diff --git a/blocksuite/affine/blocks/table/src/view.ts b/blocksuite/affine/blocks/table/src/view.ts new file mode 100644 index 0000000000..833f20165c --- /dev/null +++ b/blocksuite/affine/blocks/table/src/view.ts @@ -0,0 +1,29 @@ +import { + type ViewExtensionContext, + ViewExtensionProvider, +} from '@blocksuite/affine-ext-loader'; +import { TableModelFlavour } from '@blocksuite/affine-model'; +import { SlashMenuConfigExtension } from '@blocksuite/affine-widget-slash-menu'; +import { BlockViewExtension, FlavourExtension } from '@blocksuite/std'; +import { literal } from 'lit/static-html.js'; + +import { tableSlashMenuConfig } from './configs/slash-menu'; +import { effects } from './effects'; + +export class TableViewExtension extends ViewExtensionProvider { + override name = 'affine-table-block'; + + override effect(): void { + super.effect(); + effects(); + } + + override setup(context: ViewExtensionContext) { + super.setup(context); + context.register([ + FlavourExtension(TableModelFlavour), + BlockViewExtension(TableModelFlavour, literal`affine-table`), + SlashMenuConfigExtension(TableModelFlavour, tableSlashMenuConfig), + ]); + } +} diff --git a/blocksuite/affine/blocks/table/tsconfig.json b/blocksuite/affine/blocks/table/tsconfig.json index 96f5018bab..8533452b9c 100644 --- a/blocksuite/affine/blocks/table/tsconfig.json +++ b/blocksuite/affine/blocks/table/tsconfig.json @@ -9,6 +9,7 @@ "include": ["./src"], "references": [ { "path": "../../components" }, + { "path": "../../ext-loader" }, { "path": "../../inlines/preset" }, { "path": "../../model" }, { "path": "../../rich-text" }, diff --git a/blocksuite/integration-test/src/store.ts b/blocksuite/integration-test/src/store.ts index 2f69bf5bb3..632373e77d 100644 --- a/blocksuite/integration-test/src/store.ts +++ b/blocksuite/integration-test/src/store.ts @@ -14,6 +14,7 @@ import { ListStoreExtension } from '@blocksuite/affine/blocks/list/store'; import { NoteStoreExtension } from '@blocksuite/affine/blocks/note/store'; import { ParagraphStoreExtension } from '@blocksuite/affine/blocks/paragraph/store'; import { SurfaceRefStoreExtension } from '@blocksuite/affine/blocks/surface-ref/store'; +import { TableStoreExtension } from '@blocksuite/affine/blocks/table/store'; import { StoreExtensionManager } from '@blocksuite/affine/ext-loader'; import { MigratingStoreExtension } from '@blocksuite/affine/extensions/store'; @@ -34,6 +35,7 @@ const manager = new StoreExtensionManager([ NoteStoreExtension, ParagraphStoreExtension, SurfaceRefStoreExtension, + TableStoreExtension, MigratingStoreExtension, ]); diff --git a/blocksuite/integration-test/src/view.ts b/blocksuite/integration-test/src/view.ts index 18e9a3cdd2..f85261837f 100644 --- a/blocksuite/integration-test/src/view.ts +++ b/blocksuite/integration-test/src/view.ts @@ -14,6 +14,7 @@ import { ListViewExtension } from '@blocksuite/affine/blocks/list/view'; import { NoteViewExtension } from '@blocksuite/affine/blocks/note/view'; import { ParagraphViewExtension } from '@blocksuite/affine/blocks/paragraph/view'; import { SurfaceRefViewExtension } from '@blocksuite/affine/blocks/surface-ref/view'; +import { TableViewExtension } from '@blocksuite/affine/blocks/table/view'; import { ViewExtensionManager } from '@blocksuite/affine/ext-loader'; import { MigratingViewExtension } from '@blocksuite/affine/extensions/view'; @@ -37,6 +38,7 @@ export function getTestViewManager() { NoteViewExtension, ParagraphViewExtension, SurfaceRefViewExtension, + TableViewExtension, ]); return manager; } diff --git a/packages/frontend/core/src/blocksuite/manager/migrating-store.ts b/packages/frontend/core/src/blocksuite/manager/migrating-store.ts index 930cb1d6a6..71e5974c85 100644 --- a/packages/frontend/core/src/blocksuite/manager/migrating-store.ts +++ b/packages/frontend/core/src/blocksuite/manager/migrating-store.ts @@ -14,6 +14,7 @@ import { ListStoreExtension } from '@blocksuite/affine/blocks/list/store'; import { NoteStoreExtension } from '@blocksuite/affine/blocks/note/store'; import { ParagraphStoreExtension } from '@blocksuite/affine/blocks/paragraph/store'; import { SurfaceRefStoreExtension } from '@blocksuite/affine/blocks/surface-ref/store'; +import { TableStoreExtension } from '@blocksuite/affine/blocks/table/store'; import { type StoreExtensionContext, StoreExtensionManager, @@ -49,6 +50,7 @@ const manager = new StoreExtensionManager([ NoteStoreExtension, ParagraphStoreExtension, SurfaceRefStoreExtension, + TableStoreExtension, MigratingStoreExtension, MigratingAffineStoreExtension, diff --git a/packages/frontend/core/src/blocksuite/manager/migrating-view.ts b/packages/frontend/core/src/blocksuite/manager/migrating-view.ts index 8fdb0f0af5..a62f65065e 100644 --- a/packages/frontend/core/src/blocksuite/manager/migrating-view.ts +++ b/packages/frontend/core/src/blocksuite/manager/migrating-view.ts @@ -16,6 +16,7 @@ import { NoteViewExtension } from '@blocksuite/affine/blocks/note/view'; import { ParagraphBlockConfigExtension } from '@blocksuite/affine/blocks/paragraph'; import { ParagraphViewExtension } from '@blocksuite/affine/blocks/paragraph/view'; import { SurfaceRefViewExtension } from '@blocksuite/affine/blocks/surface-ref/view'; +import { TableViewExtension } from '@blocksuite/affine/blocks/table/view'; import { type ViewExtensionContext, ViewExtensionManager, @@ -162,6 +163,7 @@ const manager = new ViewExtensionManager([ NoteViewExtension, ParagraphViewExtension, SurfaceRefViewExtension, + TableViewExtension, MigratingAffineViewExtension, ]); diff --git a/tools/utils/src/workspace.gen.ts b/tools/utils/src/workspace.gen.ts index 181d43d629..9adfe490de 100644 --- a/tools/utils/src/workspace.gen.ts +++ b/tools/utils/src/workspace.gen.ts @@ -403,6 +403,7 @@ export const PackageList = [ name: '@blocksuite/affine-block-table', workspaceDependencies: [ 'blocksuite/affine/components', + 'blocksuite/affine/ext-loader', 'blocksuite/affine/inlines/preset', 'blocksuite/affine/model', 'blocksuite/affine/rich-text', diff --git a/yarn.lock b/yarn.lock index 57344587a5..c9db47d2a7 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2934,6 +2934,7 @@ __metadata: dependencies: "@atlaskit/pragmatic-drag-and-drop": "npm:^1.4.0" "@blocksuite/affine-components": "workspace:*" + "@blocksuite/affine-ext-loader": "workspace:*" "@blocksuite/affine-inline-preset": "workspace:*" "@blocksuite/affine-model": "workspace:*" "@blocksuite/affine-rich-text": "workspace:*"