diff --git a/blocksuite/affine/all/package.json b/blocksuite/affine/all/package.json
index bf213537e..70c385f9a 100644
--- a/blocksuite/affine/all/package.json
+++ b/blocksuite/affine/all/package.json
@@ -146,13 +146,18 @@
"./inlines/link": "./src/inlines/link/index.ts",
"./inlines/link/store": "./src/inlines/link/store.ts",
"./inlines/link/view": "./src/inlines/link/view.ts",
- "./inlines/reference": "./src/inlines/reference.ts",
+ "./inlines/reference": "./src/inlines/reference/index.ts",
+ "./inlines/reference/store": "./src/inlines/reference/store.ts",
+ "./inlines/reference/view": "./src/inlines/reference/view.ts",
"./inlines/preset": "./src/inlines/preset.ts",
"./inlines/footnote": "./src/inlines/footnote/index.ts",
"./inlines/footnote/view": "./src/inlines/footnote/view.ts",
"./inlines/footnote/store": "./src/inlines/footnote/store.ts",
- "./inlines/latex": "./src/inlines/latex.ts",
- "./inlines/mention": "./src/inlines/mention.ts",
+ "./inlines/latex": "./src/inlines/latex/index.ts",
+ "./inlines/latex/store": "./src/inlines/latex/store.ts",
+ "./inlines/latex/view": "./src/inlines/latex/view.ts",
+ "./inlines/mention": "./src/inlines/mention/index.ts",
+ "./inlines/mention/view": "./src/inlines/mention/view.ts",
"./widgets/drag-handle": "./src/widgets/drag-handle.ts",
"./widgets/edgeless-auto-connect": "./src/widgets/edgeless-auto-connect.ts",
"./widgets/edgeless-toolbar": "./src/widgets/edgeless-toolbar.ts",
@@ -215,7 +220,6 @@
"./schemas": "./src/schemas.ts",
"./model": "./src/model/index.ts",
"./sync": "./src/sync/index.ts",
- "./adapters": "./src/adapters/index.ts",
"./extensions/store": "./src/extensions/store.ts",
"./extensions/view": "./src/extensions/view.ts"
},
diff --git a/blocksuite/affine/all/src/__tests__/adapters/html.unit.spec.ts b/blocksuite/affine/all/src/__tests__/adapters/html.unit.spec.ts
index 3016e8a11..1e97ac503 100644
--- a/blocksuite/affine/all/src/__tests__/adapters/html.unit.spec.ts
+++ b/blocksuite/affine/all/src/__tests__/adapters/html.unit.spec.ts
@@ -125,7 +125,7 @@ describe('snapshot to html', () => {
};
const html = template(
- `
import this
`
+ `import this
`
);
const htmlAdapter = new HtmlAdapter(createJob(), provider);
@@ -191,7 +191,7 @@ describe('snapshot to html', () => {
};
const html = template(
- `import this
`
+ `import this
`
);
const htmlAdapter = new HtmlAdapter(createJob(), provider);
@@ -257,7 +257,7 @@ describe('snapshot to html', () => {
};
const html = template(
- `import this
`
+ `import this
`
);
const htmlAdapter = new HtmlAdapter(createJob(), provider);
diff --git a/blocksuite/affine/all/src/__tests__/utils/store.ts b/blocksuite/affine/all/src/__tests__/utils/store.ts
index 0cd702d00..92e80e8f7 100644
--- a/blocksuite/affine/all/src/__tests__/utils/store.ts
+++ b/blocksuite/affine/all/src/__tests__/utils/store.ts
@@ -1,49 +1,7 @@
-import { AttachmentStoreExtension } from '@blocksuite/affine-block-attachment/store';
-import { BookmarkStoreExtension } from '@blocksuite/affine-block-bookmark/store';
-import { CalloutStoreExtension } from '@blocksuite/affine-block-callout/store';
-import { CodeStoreExtension } from '@blocksuite/affine-block-code/store';
-import { DataViewStoreExtension } from '@blocksuite/affine-block-data-view/store';
-import { DatabaseStoreExtension } from '@blocksuite/affine-block-database/store';
-import { DividerStoreExtension } from '@blocksuite/affine-block-divider/store';
-import { EdgelessTextStoreExtension } from '@blocksuite/affine-block-edgeless-text/store';
-import { EmbedStoreExtension } from '@blocksuite/affine-block-embed/store';
-import { FrameStoreExtension } from '@blocksuite/affine-block-frame/store';
-import { ImageStoreExtension } from '@blocksuite/affine-block-image/store';
-import { LatexStoreExtension } from '@blocksuite/affine-block-latex/store';
-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 { FootnoteStoreExtension } from '@blocksuite/affine-inline-footnote/store';
-import { LinkStoreExtension } from '@blocksuite/affine-inline-link/store';
-import { MigratingStoreExtension } from '../../extensions/store';
+import { getInternalStoreExtensions } from '../../extensions/store';
-const manager = new StoreExtensionManager([
- AttachmentStoreExtension,
- BookmarkStoreExtension,
- CalloutStoreExtension,
- CodeStoreExtension,
- DataViewStoreExtension,
- DatabaseStoreExtension,
- DividerStoreExtension,
- EdgelessTextStoreExtension,
- EmbedStoreExtension,
- FrameStoreExtension,
- ImageStoreExtension,
- LatexStoreExtension,
- ListStoreExtension,
- NoteStoreExtension,
- ParagraphStoreExtension,
- SurfaceRefStoreExtension,
- TableStoreExtension,
-
- FootnoteStoreExtension,
- LinkStoreExtension,
-
- MigratingStoreExtension,
-]);
+const manager = new StoreExtensionManager(getInternalStoreExtensions());
export const testStoreExtensions = manager.get('store');
diff --git a/blocksuite/affine/all/src/adapters/extension.ts b/blocksuite/affine/all/src/adapters/extension.ts
index cd9ba3f99..3e5961c2a 100644
--- a/blocksuite/affine/all/src/adapters/extension.ts
+++ b/blocksuite/affine/all/src/adapters/extension.ts
@@ -2,7 +2,6 @@ import {
HtmlInlineToDeltaAdapterExtensions,
InlineDeltaToHtmlAdapterExtensions,
InlineDeltaToMarkdownAdapterExtensions,
- InlineDeltaToPlainTextAdapterExtensions,
MarkdownInlineToDeltaAdapterExtensions,
NotionHtmlInlineToDeltaAdapterExtensions,
} from '@blocksuite/affine-inline-preset';
@@ -62,8 +61,5 @@ export function getNotionHtmlAdapterExtensions(): ExtensionType[] {
}
export function getPlainTextAdapterExtensions(): ExtensionType[] {
- return [
- ...defaultBlockPlainTextAdapterMatchers,
- ...InlineDeltaToPlainTextAdapterExtensions,
- ];
+ return [...defaultBlockPlainTextAdapterMatchers];
}
diff --git a/blocksuite/affine/all/src/extensions/effects.ts b/blocksuite/affine/all/src/extensions/effects.ts
index 54da702a5..13cb3b7bc 100644
--- a/blocksuite/affine/all/src/extensions/effects.ts
+++ b/blocksuite/affine/all/src/extensions/effects.ts
@@ -29,10 +29,7 @@ import { effects as componentViewDropdownMenuEffects } from '@blocksuite/affine-
import { effects as fragmentDocTitleEffects } from '@blocksuite/affine-fragment-doc-title/effects';
import { effects as fragmentFramePanelEffects } from '@blocksuite/affine-fragment-frame-panel/effects';
import { effects as fragmentOutlineEffects } from '@blocksuite/affine-fragment-outline/effects';
-import { effects as inlineLatexEffects } from '@blocksuite/affine-inline-latex/effects';
-import { effects as inlineMentionEffects } from '@blocksuite/affine-inline-mention';
import { effects as inlinePresetEffects } from '@blocksuite/affine-inline-preset/effects';
-import { effects as inlineReferenceEffects } from '@blocksuite/affine-inline-reference/effects';
import { effects as richTextEffects } from '@blocksuite/affine-rich-text/effects';
import { effects as widgetDragHandleEffects } from '@blocksuite/affine-widget-drag-handle/effects';
import { effects as widgetEdgelessAutoConnectEffects } from '@blocksuite/affine-widget-edgeless-auto-connect/effects';
@@ -50,10 +47,7 @@ export function effects() {
dataViewEffects();
richTextEffects();
- inlineReferenceEffects();
inlinePresetEffects();
- inlineLatexEffects();
- inlineMentionEffects();
blockSurfaceEffects();
blockRootEffects();
diff --git a/blocksuite/affine/all/src/extensions/migrating-store.ts b/blocksuite/affine/all/src/extensions/migrating-store.ts
new file mode 100644
index 000000000..76a332636
--- /dev/null
+++ b/blocksuite/affine/all/src/extensions/migrating-store.ts
@@ -0,0 +1,118 @@
+import { DatabaseSelectionExtension } from '@blocksuite/affine-block-database';
+import {
+ RootBlockHtmlAdapterExtension,
+ RootBlockMarkdownAdapterExtension,
+ RootBlockNotionHtmlAdapterExtension,
+} from '@blocksuite/affine-block-root';
+import { SurfaceBlockSchemaExtension } from '@blocksuite/affine-block-surface';
+import {
+ type StoreExtensionContext,
+ StoreExtensionProvider,
+} from '@blocksuite/affine-ext-loader';
+import {
+ HtmlInlineToDeltaAdapterExtensions,
+ InlineDeltaToHtmlAdapterExtensions,
+ InlineDeltaToMarkdownAdapterExtensions,
+ MarkdownInlineToDeltaAdapterExtensions,
+ NotionHtmlInlineToDeltaAdapterExtensions,
+} from '@blocksuite/affine-inline-preset';
+import {
+ RootBlockSchemaExtension,
+ TranscriptionBlockSchemaExtension,
+} from '@blocksuite/affine-model';
+import {
+ HtmlAdapterFactoryExtension,
+ MarkdownAdapterFactoryExtension,
+ MixTextAdapterFactoryExtension,
+ NotionHtmlAdapterFactoryExtension,
+ NotionTextAdapterFactoryExtension,
+ PlainTextAdapterFactoryExtension,
+} from '@blocksuite/affine-shared/adapters';
+import { HighlightSelectionExtension } from '@blocksuite/affine-shared/selection';
+import {
+ BlockMetaService,
+ FeatureFlagService,
+ FileSizeLimitService,
+ LinkPreviewerService,
+} from '@blocksuite/affine-shared/services';
+import {
+ BlockSelectionExtension,
+ CursorSelectionExtension,
+ SurfaceSelectionExtension,
+ TextSelectionExtension,
+} from '@blocksuite/std';
+import type { ExtensionType } from '@blocksuite/store';
+
+function getAdapterFactoryExtensions(): ExtensionType[] {
+ return [
+ MarkdownAdapterFactoryExtension,
+ PlainTextAdapterFactoryExtension,
+ HtmlAdapterFactoryExtension,
+ NotionTextAdapterFactoryExtension,
+ NotionHtmlAdapterFactoryExtension,
+ MixTextAdapterFactoryExtension,
+ ];
+}
+
+const defaultBlockHtmlAdapterMatchers = [RootBlockHtmlAdapterExtension];
+
+const defaultBlockMarkdownAdapterMatchers = [RootBlockMarkdownAdapterExtension];
+
+const defaultBlockNotionHtmlAdapterMatchers: ExtensionType[] = [
+ RootBlockNotionHtmlAdapterExtension,
+];
+
+function getHtmlAdapterExtensions(): ExtensionType[] {
+ return [
+ ...HtmlInlineToDeltaAdapterExtensions,
+ ...defaultBlockHtmlAdapterMatchers,
+ ...InlineDeltaToHtmlAdapterExtensions,
+ ];
+}
+
+function getMarkdownAdapterExtensions(): ExtensionType[] {
+ return [
+ ...MarkdownInlineToDeltaAdapterExtensions,
+ ...defaultBlockMarkdownAdapterMatchers,
+ ...InlineDeltaToMarkdownAdapterExtensions,
+ ];
+}
+
+function getNotionHtmlAdapterExtensions(): ExtensionType[] {
+ return [
+ ...NotionHtmlInlineToDeltaAdapterExtensions,
+ ...defaultBlockNotionHtmlAdapterMatchers,
+ ];
+}
+
+const MigratingStoreExtensions: ExtensionType[] = [
+ RootBlockSchemaExtension,
+ SurfaceBlockSchemaExtension,
+ TranscriptionBlockSchemaExtension,
+
+ BlockSelectionExtension,
+ TextSelectionExtension,
+ SurfaceSelectionExtension,
+ CursorSelectionExtension,
+ HighlightSelectionExtension,
+ DatabaseSelectionExtension,
+
+ getHtmlAdapterExtensions(),
+ getMarkdownAdapterExtensions(),
+ getNotionHtmlAdapterExtensions(),
+ getAdapterFactoryExtensions(),
+
+ FeatureFlagService,
+ LinkPreviewerService,
+ FileSizeLimitService,
+ BlockMetaService,
+].flat();
+
+export class MigratingStoreExtension extends StoreExtensionProvider {
+ override name = 'migrating';
+
+ override setup(context: StoreExtensionContext) {
+ super.setup(context);
+ context.register(MigratingStoreExtensions);
+ }
+}
diff --git a/blocksuite/affine/all/src/extensions/migrating-view.ts b/blocksuite/affine/all/src/extensions/migrating-view.ts
new file mode 100644
index 000000000..92078eae4
--- /dev/null
+++ b/blocksuite/affine/all/src/extensions/migrating-view.ts
@@ -0,0 +1,42 @@
+import {
+ type ViewExtensionContext,
+ ViewExtensionProvider,
+} from '@blocksuite/affine-ext-loader';
+
+import { effects } from './effects';
+import {
+ MigratingEdgelessEditorBlockSpecs,
+ MigratingPageEditorBlockSpecs,
+ MigratingPreviewEdgelessEditorBlockSpecs,
+ MigratingPreviewPageEditorBlockSpecs,
+} from './migrating';
+
+export class MigratingViewExtension extends ViewExtensionProvider {
+ override name = 'migrating';
+
+ override effect() {
+ super.effect();
+ effects();
+ }
+
+ override setup(context: ViewExtensionContext) {
+ super.setup(context);
+ const scope = context.scope;
+ if (scope === 'preview-page') {
+ context.register(MigratingPreviewPageEditorBlockSpecs);
+ return;
+ }
+ if (scope === 'preview-edgeless') {
+ context.register(MigratingPreviewEdgelessEditorBlockSpecs);
+ return;
+ }
+ if (scope === 'page' || scope === 'mobile-page') {
+ context.register(MigratingPageEditorBlockSpecs);
+ return;
+ }
+ if (scope === 'edgeless' || scope === 'mobile-edgeless') {
+ context.register(MigratingEdgelessEditorBlockSpecs);
+ return;
+ }
+ }
+}
diff --git a/blocksuite/affine/all/src/extensions/store.ts b/blocksuite/affine/all/src/extensions/store.ts
index f1e972dac..b8df7ce44 100644
--- a/blocksuite/affine/all/src/extensions/store.ts
+++ b/blocksuite/affine/all/src/extensions/store.ts
@@ -1,124 +1,52 @@
-import { DatabaseSelectionExtension } from '@blocksuite/affine-block-database';
-import {
- RootBlockHtmlAdapterExtension,
- RootBlockMarkdownAdapterExtension,
- RootBlockNotionHtmlAdapterExtension,
-} from '@blocksuite/affine-block-root';
-import { SurfaceBlockSchemaExtension } from '@blocksuite/affine-block-surface';
-import {
- type StoreExtensionContext,
- StoreExtensionProvider,
-} from '@blocksuite/affine-ext-loader';
-import {
- HtmlInlineToDeltaAdapterExtensions,
- InlineDeltaToHtmlAdapterExtensions,
- InlineDeltaToMarkdownAdapterExtensions,
- InlineDeltaToPlainTextAdapterExtensions,
- MarkdownInlineToDeltaAdapterExtensions,
- NotionHtmlInlineToDeltaAdapterExtensions,
-} from '@blocksuite/affine-inline-preset';
-import {
- RootBlockSchemaExtension,
- TranscriptionBlockSchemaExtension,
-} from '@blocksuite/affine-model';
-import {
- HtmlAdapterFactoryExtension,
- MarkdownAdapterFactoryExtension,
- MixTextAdapterFactoryExtension,
- NotionHtmlAdapterFactoryExtension,
- NotionTextAdapterFactoryExtension,
- PlainTextAdapterFactoryExtension,
-} from '@blocksuite/affine-shared/adapters';
-import { HighlightSelectionExtension } from '@blocksuite/affine-shared/selection';
-import {
- BlockMetaService,
- FeatureFlagService,
- FileSizeLimitService,
- LinkPreviewerService,
-} from '@blocksuite/affine-shared/services';
-import {
- BlockSelectionExtension,
- CursorSelectionExtension,
- SurfaceSelectionExtension,
- TextSelectionExtension,
-} from '@blocksuite/std';
-import type { ExtensionType } from '@blocksuite/store';
+import { AttachmentStoreExtension } from '@blocksuite/affine-block-attachment/store';
+import { BookmarkStoreExtension } from '@blocksuite/affine-block-bookmark/store';
+import { CalloutStoreExtension } from '@blocksuite/affine-block-callout/store';
+import { CodeStoreExtension } from '@blocksuite/affine-block-code/store';
+import { DataViewStoreExtension } from '@blocksuite/affine-block-data-view/store';
+import { DatabaseStoreExtension } from '@blocksuite/affine-block-database/store';
+import { DividerStoreExtension } from '@blocksuite/affine-block-divider/store';
+import { EdgelessTextStoreExtension } from '@blocksuite/affine-block-edgeless-text/store';
+import { EmbedStoreExtension } from '@blocksuite/affine-block-embed/store';
+import { FrameStoreExtension } from '@blocksuite/affine-block-frame/store';
+import { ImageStoreExtension } from '@blocksuite/affine-block-image/store';
+import { LatexStoreExtension } from '@blocksuite/affine-block-latex/store';
+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 { FootnoteStoreExtension } from '@blocksuite/affine-inline-footnote/store';
+import { LatexStoreExtension as InlineLatexStoreExtension } from '@blocksuite/affine-inline-latex/store';
+import { LinkStoreExtension } from '@blocksuite/affine-inline-link/store';
+import { ReferenceStoreExtension } from '@blocksuite/affine-inline-reference/store';
-function getAdapterFactoryExtensions(): ExtensionType[] {
+import { MigratingStoreExtension } from './migrating-store';
+
+export function getInternalStoreExtensions() {
return [
- MarkdownAdapterFactoryExtension,
- PlainTextAdapterFactoryExtension,
- HtmlAdapterFactoryExtension,
- NotionTextAdapterFactoryExtension,
- NotionHtmlAdapterFactoryExtension,
- MixTextAdapterFactoryExtension,
+ AttachmentStoreExtension,
+ BookmarkStoreExtension,
+ CalloutStoreExtension,
+ CodeStoreExtension,
+ DataViewStoreExtension,
+ DatabaseStoreExtension,
+ DividerStoreExtension,
+ EdgelessTextStoreExtension,
+ EmbedStoreExtension,
+ FrameStoreExtension,
+ ImageStoreExtension,
+ LatexStoreExtension,
+ ListStoreExtension,
+ NoteStoreExtension,
+ ParagraphStoreExtension,
+ SurfaceRefStoreExtension,
+ TableStoreExtension,
+
+ FootnoteStoreExtension,
+ LinkStoreExtension,
+ ReferenceStoreExtension,
+ InlineLatexStoreExtension,
+
+ MigratingStoreExtension,
];
}
-
-const defaultBlockHtmlAdapterMatchers = [RootBlockHtmlAdapterExtension];
-
-const defaultBlockMarkdownAdapterMatchers = [RootBlockMarkdownAdapterExtension];
-
-const defaultBlockNotionHtmlAdapterMatchers: ExtensionType[] = [
- RootBlockNotionHtmlAdapterExtension,
-];
-
-function getHtmlAdapterExtensions(): ExtensionType[] {
- return [
- ...HtmlInlineToDeltaAdapterExtensions,
- ...defaultBlockHtmlAdapterMatchers,
- ...InlineDeltaToHtmlAdapterExtensions,
- ];
-}
-
-function getMarkdownAdapterExtensions(): ExtensionType[] {
- return [
- ...MarkdownInlineToDeltaAdapterExtensions,
- ...defaultBlockMarkdownAdapterMatchers,
- ...InlineDeltaToMarkdownAdapterExtensions,
- ];
-}
-
-function getNotionHtmlAdapterExtensions(): ExtensionType[] {
- return [
- ...NotionHtmlInlineToDeltaAdapterExtensions,
- ...defaultBlockNotionHtmlAdapterMatchers,
- ];
-}
-
-function getPlainTextAdapterExtensions(): ExtensionType[] {
- return [...InlineDeltaToPlainTextAdapterExtensions];
-}
-
-const MigratingStoreExtensions: ExtensionType[] = [
- RootBlockSchemaExtension,
- SurfaceBlockSchemaExtension,
- TranscriptionBlockSchemaExtension,
-
- BlockSelectionExtension,
- TextSelectionExtension,
- SurfaceSelectionExtension,
- CursorSelectionExtension,
- HighlightSelectionExtension,
- DatabaseSelectionExtension,
-
- getHtmlAdapterExtensions(),
- getMarkdownAdapterExtensions(),
- getNotionHtmlAdapterExtensions(),
- getPlainTextAdapterExtensions(),
- getAdapterFactoryExtensions(),
-
- FeatureFlagService,
- LinkPreviewerService,
- FileSizeLimitService,
- BlockMetaService,
-].flat();
-
-export class MigratingStoreExtension extends StoreExtensionProvider {
- override name = 'migrating';
-
- override setup(context: StoreExtensionContext) {
- super.setup(context);
- context.register(MigratingStoreExtensions);
- }
-}
diff --git a/blocksuite/affine/all/src/extensions/view.ts b/blocksuite/affine/all/src/extensions/view.ts
index 92078eae4..bb1e0603f 100644
--- a/blocksuite/affine/all/src/extensions/view.ts
+++ b/blocksuite/affine/all/src/extensions/view.ts
@@ -1,42 +1,56 @@
-import {
- type ViewExtensionContext,
- ViewExtensionProvider,
-} from '@blocksuite/affine-ext-loader';
+import { AttachmentViewExtension } from '@blocksuite/affine-block-attachment/view';
+import { BookmarkViewExtension } from '@blocksuite/affine-block-bookmark/view';
+import { CalloutViewExtension } from '@blocksuite/affine-block-callout/view';
+import { CodeBlockViewExtension } from '@blocksuite/affine-block-code/view';
+import { DataViewViewExtension } from '@blocksuite/affine-block-data-view/view';
+import { DatabaseViewExtension } from '@blocksuite/affine-block-database/view';
+import { DividerViewExtension } from '@blocksuite/affine-block-divider/view';
+import { EdgelessTextViewExtension } from '@blocksuite/affine-block-edgeless-text/view';
+import { EmbedViewExtension } from '@blocksuite/affine-block-embed/view';
+import { FrameViewExtension } from '@blocksuite/affine-block-frame/view';
+import { ImageViewExtension } from '@blocksuite/affine-block-image/view';
+import { LatexViewExtension } from '@blocksuite/affine-block-latex/view';
+import { ListViewExtension } from '@blocksuite/affine-block-list/view';
+import { NoteViewExtension } from '@blocksuite/affine-block-note/view';
+import { ParagraphViewExtension } from '@blocksuite/affine-block-paragraph/view';
+import { SurfaceRefViewExtension } from '@blocksuite/affine-block-surface-ref/view';
+import { TableViewExtension } from '@blocksuite/affine-block-table/view';
+import { FootnoteViewExtension } from '@blocksuite/affine-inline-footnote/view';
+import { LatexViewExtension as InlineLatexViewExtension } from '@blocksuite/affine-inline-latex/view';
+import { LinkViewExtension } from '@blocksuite/affine-inline-link/view';
+import { MentionViewExtension } from '@blocksuite/affine-inline-mention/view';
+import { ReferenceViewExtension } from '@blocksuite/affine-inline-reference/view';
-import { effects } from './effects';
-import {
- MigratingEdgelessEditorBlockSpecs,
- MigratingPageEditorBlockSpecs,
- MigratingPreviewEdgelessEditorBlockSpecs,
- MigratingPreviewPageEditorBlockSpecs,
-} from './migrating';
+import { MigratingViewExtension } from './migrating-view';
-export class MigratingViewExtension extends ViewExtensionProvider {
- override name = 'migrating';
+export function getInternalViewExtensions() {
+ return [
+ MigratingViewExtension,
- override effect() {
- super.effect();
- effects();
- }
+ // Block
+ AttachmentViewExtension,
+ BookmarkViewExtension,
+ CalloutViewExtension,
+ CodeBlockViewExtension,
+ DataViewViewExtension,
+ DatabaseViewExtension,
+ DividerViewExtension,
+ EdgelessTextViewExtension,
+ EmbedViewExtension,
+ FrameViewExtension,
+ ImageViewExtension,
+ LatexViewExtension,
+ ListViewExtension,
+ NoteViewExtension,
+ ParagraphViewExtension,
+ SurfaceRefViewExtension,
+ TableViewExtension,
- override setup(context: ViewExtensionContext) {
- super.setup(context);
- const scope = context.scope;
- if (scope === 'preview-page') {
- context.register(MigratingPreviewPageEditorBlockSpecs);
- return;
- }
- if (scope === 'preview-edgeless') {
- context.register(MigratingPreviewEdgelessEditorBlockSpecs);
- return;
- }
- if (scope === 'page' || scope === 'mobile-page') {
- context.register(MigratingPageEditorBlockSpecs);
- return;
- }
- if (scope === 'edgeless' || scope === 'mobile-edgeless') {
- context.register(MigratingEdgelessEditorBlockSpecs);
- return;
- }
- }
+ // Inline
+ FootnoteViewExtension,
+ LinkViewExtension,
+ ReferenceViewExtension,
+ InlineLatexViewExtension,
+ MentionViewExtension,
+ ];
}
diff --git a/blocksuite/affine/all/src/inlines/latex.ts b/blocksuite/affine/all/src/inlines/latex/index.ts
similarity index 100%
rename from blocksuite/affine/all/src/inlines/latex.ts
rename to blocksuite/affine/all/src/inlines/latex/index.ts
diff --git a/blocksuite/affine/all/src/inlines/latex/store.ts b/blocksuite/affine/all/src/inlines/latex/store.ts
new file mode 100644
index 000000000..e3341819b
--- /dev/null
+++ b/blocksuite/affine/all/src/inlines/latex/store.ts
@@ -0,0 +1 @@
+export * from '@blocksuite/affine-inline-latex/store';
diff --git a/blocksuite/affine/all/src/inlines/latex/view.ts b/blocksuite/affine/all/src/inlines/latex/view.ts
new file mode 100644
index 000000000..50eae0e84
--- /dev/null
+++ b/blocksuite/affine/all/src/inlines/latex/view.ts
@@ -0,0 +1 @@
+export * from '@blocksuite/affine-inline-latex/view';
diff --git a/blocksuite/affine/all/src/inlines/mention.ts b/blocksuite/affine/all/src/inlines/mention/index.ts
similarity index 100%
rename from blocksuite/affine/all/src/inlines/mention.ts
rename to blocksuite/affine/all/src/inlines/mention/index.ts
diff --git a/blocksuite/affine/all/src/inlines/mention/view.ts b/blocksuite/affine/all/src/inlines/mention/view.ts
new file mode 100644
index 000000000..38591c509
--- /dev/null
+++ b/blocksuite/affine/all/src/inlines/mention/view.ts
@@ -0,0 +1 @@
+export * from '@blocksuite/affine-inline-mention/view';
diff --git a/blocksuite/affine/all/src/inlines/reference.ts b/blocksuite/affine/all/src/inlines/reference/index.ts
similarity index 100%
rename from blocksuite/affine/all/src/inlines/reference.ts
rename to blocksuite/affine/all/src/inlines/reference/index.ts
diff --git a/blocksuite/affine/all/src/inlines/reference/store.ts b/blocksuite/affine/all/src/inlines/reference/store.ts
new file mode 100644
index 000000000..34ca4d25d
--- /dev/null
+++ b/blocksuite/affine/all/src/inlines/reference/store.ts
@@ -0,0 +1 @@
+export * from '@blocksuite/affine-inline-reference/store';
diff --git a/blocksuite/affine/all/src/inlines/reference/view.ts b/blocksuite/affine/all/src/inlines/reference/view.ts
new file mode 100644
index 000000000..ffab9a0a5
--- /dev/null
+++ b/blocksuite/affine/all/src/inlines/reference/view.ts
@@ -0,0 +1 @@
+export * from '@blocksuite/affine-inline-reference/view';
diff --git a/blocksuite/affine/blocks/code/src/adapters/html.ts b/blocksuite/affine/blocks/code/src/adapters/html.ts
index 5663db387..19b0075bb 100644
--- a/blocksuite/affine/blocks/code/src/adapters/html.ts
+++ b/blocksuite/affine/blocks/code/src/adapters/html.ts
@@ -7,7 +7,6 @@ import {
} from '@blocksuite/affine-shared/adapters';
import type { DeltaInsert } from '@blocksuite/store';
import { nanoid } from '@blocksuite/store';
-import { bundledLanguagesInfo, codeToHast } from 'shiki';
export const codeBlockHtmlAdapterMatcher: BlockHtmlAdapterMatcher = {
flavour: CodeBlockSchema.model.flavour,
@@ -69,24 +68,38 @@ export const codeBlockHtmlAdapterMatcher: BlockHtmlAdapterMatcher = {
enter: async (o, context) => {
const { walkerContext } = context;
const rawLang = o.node.props.language as string | null;
- const matchedLang = rawLang
- ? (bundledLanguagesInfo.find(
- info =>
- info.id === rawLang ||
- info.name === rawLang ||
- info.aliases?.includes(rawLang)
- )?.id ?? 'text')
- : 'text';
-
const text = (o.node.props.text as Record)
.delta as DeltaInsert[];
const code = text.map(delta => delta.insert).join('');
- const hast = await codeToHast(code, {
- lang: matchedLang,
- theme: 'light-plus',
- });
- walkerContext.openNode(hast as never, 'children').closeNode();
+ walkerContext
+ .openNode(
+ {
+ type: 'element',
+ tagName: 'pre',
+ properties: {},
+ children: [],
+ },
+ 'children'
+ )
+ .openNode(
+ {
+ type: 'element',
+ tagName: 'code',
+ properties: {
+ className: [`code-${rawLang ?? 'text'}`],
+ },
+ children: [
+ {
+ type: 'text',
+ value: code,
+ },
+ ],
+ },
+ 'children'
+ )
+ .closeNode()
+ .closeNode();
},
},
};
diff --git a/blocksuite/affine/inlines/latex/package.json b/blocksuite/affine/inlines/latex/package.json
index dd788b6e8..aad4066e4 100644
--- a/blocksuite/affine/inlines/latex/package.json
+++ b/blocksuite/affine/inlines/latex/package.json
@@ -11,6 +11,7 @@
"license": "MIT",
"dependencies": {
"@blocksuite/affine-components": "workspace:*",
+ "@blocksuite/affine-ext-loader": "workspace:*",
"@blocksuite/affine-inline-reference": "workspace:*",
"@blocksuite/affine-model": "workspace:*",
"@blocksuite/affine-rich-text": "workspace:*",
@@ -40,7 +41,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/inlines/latex/src/store.ts b/blocksuite/affine/inlines/latex/src/store.ts
new file mode 100644
index 000000000..9d8338c81
--- /dev/null
+++ b/blocksuite/affine/inlines/latex/src/store.ts
@@ -0,0 +1,21 @@
+import {
+ type StoreExtensionContext,
+ StoreExtensionProvider,
+} from '@blocksuite/affine-ext-loader';
+
+import {
+ latexDeltaMarkdownAdapterMatch,
+ latexDeltaToMarkdownAdapterMatcher,
+ markdownInlineMathToDeltaMatcher,
+} from './adapters';
+
+export class LatexStoreExtension extends StoreExtensionProvider {
+ override name = 'affine-latex-inline';
+
+ override setup(context: StoreExtensionContext) {
+ super.setup(context);
+ context.register(latexDeltaMarkdownAdapterMatch);
+ context.register(latexDeltaToMarkdownAdapterMatcher);
+ context.register(markdownInlineMathToDeltaMatcher);
+ }
+}
diff --git a/blocksuite/affine/inlines/latex/src/view.ts b/blocksuite/affine/inlines/latex/src/view.ts
new file mode 100644
index 000000000..b9b018308
--- /dev/null
+++ b/blocksuite/affine/inlines/latex/src/view.ts
@@ -0,0 +1,29 @@
+import {
+ type ViewExtensionContext,
+ ViewExtensionProvider,
+} from '@blocksuite/affine-ext-loader';
+
+import { effects } from './effects';
+import {
+ LatexEditorUnitSpecExtension,
+ LatexInlineSpecExtension,
+} from './inline-spec';
+import { LatexEditorInlineManagerExtension } from './latex-node/latex-editor-menu';
+
+export class LatexViewExtension extends ViewExtensionProvider {
+ override name = 'affine-latex-inline';
+
+ override effect(): void {
+ super.effect();
+ effects();
+ }
+
+ override setup(context: ViewExtensionContext) {
+ super.setup(context);
+ context.register([
+ LatexInlineSpecExtension,
+ LatexEditorUnitSpecExtension,
+ LatexEditorInlineManagerExtension,
+ ]);
+ }
+}
diff --git a/blocksuite/affine/inlines/latex/tsconfig.json b/blocksuite/affine/inlines/latex/tsconfig.json
index 6ca999e07..0a33c7d79 100644
--- a/blocksuite/affine/inlines/latex/tsconfig.json
+++ b/blocksuite/affine/inlines/latex/tsconfig.json
@@ -8,6 +8,7 @@
"include": ["./src"],
"references": [
{ "path": "../../components" },
+ { "path": "../../ext-loader" },
{ "path": "../reference" },
{ "path": "../../model" },
{ "path": "../../rich-text" },
diff --git a/blocksuite/affine/inlines/mention/package.json b/blocksuite/affine/inlines/mention/package.json
index 7012fec69..333460243 100644
--- a/blocksuite/affine/inlines/mention/package.json
+++ b/blocksuite/affine/inlines/mention/package.json
@@ -11,6 +11,7 @@
"license": "MIT",
"dependencies": {
"@blocksuite/affine-components": "workspace:*",
+ "@blocksuite/affine-ext-loader": "workspace:*",
"@blocksuite/affine-model": "workspace:*",
"@blocksuite/affine-shared": "workspace:*",
"@blocksuite/global": "workspace:*",
@@ -33,7 +34,8 @@
},
"exports": {
".": "./src/index.ts",
- "./effects": "./src/effects.ts"
+ "./effects": "./src/effects.ts",
+ "./view": "./src/view.ts"
},
"files": [
"src",
diff --git a/blocksuite/affine/inlines/mention/src/view.ts b/blocksuite/affine/inlines/mention/src/view.ts
new file mode 100644
index 000000000..ba1bc825d
--- /dev/null
+++ b/blocksuite/affine/inlines/mention/src/view.ts
@@ -0,0 +1,21 @@
+import {
+ type ViewExtensionContext,
+ ViewExtensionProvider,
+} from '@blocksuite/affine-ext-loader';
+
+import { effects } from './effects';
+import { MentionInlineSpecExtension } from './inline-spec';
+
+export class MentionViewExtension extends ViewExtensionProvider {
+ override name = 'affine-mention-inline';
+
+ override effect(): void {
+ super.effect();
+ effects();
+ }
+
+ override setup(context: ViewExtensionContext): void {
+ super.setup(context);
+ context.register(MentionInlineSpecExtension);
+ }
+}
diff --git a/blocksuite/affine/inlines/mention/tsconfig.json b/blocksuite/affine/inlines/mention/tsconfig.json
index 76a74f340..d60ba97d5 100644
--- a/blocksuite/affine/inlines/mention/tsconfig.json
+++ b/blocksuite/affine/inlines/mention/tsconfig.json
@@ -8,6 +8,7 @@
"include": ["./src"],
"references": [
{ "path": "../../components" },
+ { "path": "../../ext-loader" },
{ "path": "../../model" },
{ "path": "../../shared" },
{ "path": "../../../framework/global" },
diff --git a/blocksuite/affine/inlines/preset/src/adapters/extensions.ts b/blocksuite/affine/inlines/preset/src/adapters/extensions.ts
index 75d2ecaa2..e963ac49c 100644
--- a/blocksuite/affine/inlines/preset/src/adapters/extensions.ts
+++ b/blocksuite/affine/inlines/preset/src/adapters/extensions.ts
@@ -5,12 +5,10 @@ import { InlineDeltaToHtmlAdapterExtensions } from './html/inline-delta';
import { InlineDeltaToMarkdownAdapterExtensions } from './markdown/inline-delta';
import { MarkdownInlineToDeltaAdapterExtensions } from './markdown/markdown-inline';
import { NotionHtmlInlineToDeltaAdapterExtensions } from './notion-html/html-inline';
-import { InlineDeltaToPlainTextAdapterExtensions } from './plain-text/inline-delta';
export const InlineAdapterExtensions: ExtensionType[] = [
HtmlInlineToDeltaAdapterExtensions,
InlineDeltaToHtmlAdapterExtensions,
- InlineDeltaToPlainTextAdapterExtensions,
NotionHtmlInlineToDeltaAdapterExtensions,
InlineDeltaToMarkdownAdapterExtensions,
MarkdownInlineToDeltaAdapterExtensions,
@@ -21,4 +19,3 @@ export * from './html/inline-delta';
export * from './markdown/inline-delta';
export * from './markdown/markdown-inline';
export * from './notion-html/html-inline';
-export * from './plain-text/inline-delta';
diff --git a/blocksuite/affine/inlines/preset/src/adapters/html/inline-delta.ts b/blocksuite/affine/inlines/preset/src/adapters/html/inline-delta.ts
index fc9b4e025..f65a09c23 100644
--- a/blocksuite/affine/inlines/preset/src/adapters/html/inline-delta.ts
+++ b/blocksuite/affine/inlines/preset/src/adapters/html/inline-delta.ts
@@ -1,4 +1,3 @@
-import { referenceDeltaToHtmlAdapterMatcher } from '@blocksuite/affine-inline-reference';
import type { InlineHtmlAST } from '@blocksuite/affine-shared/adapters';
import { InlineDeltaToHtmlAdapterExtension } from '@blocksuite/affine-shared/adapters';
import { ThemeProvider } from '@blocksuite/affine-shared/services';
@@ -152,5 +151,4 @@ export const InlineDeltaToHtmlAdapterExtensions = [
highlightBackgroundDeltaToHtmlAdapterMatcher,
highlightColorDeltaToHtmlAdapterMatcher,
inlineCodeDeltaToHtmlAdapterMatcher,
- referenceDeltaToHtmlAdapterMatcher,
];
diff --git a/blocksuite/affine/inlines/preset/src/adapters/markdown/inline-delta.ts b/blocksuite/affine/inlines/preset/src/adapters/markdown/inline-delta.ts
index ea65a42d0..0b672e9d3 100644
--- a/blocksuite/affine/inlines/preset/src/adapters/markdown/inline-delta.ts
+++ b/blocksuite/affine/inlines/preset/src/adapters/markdown/inline-delta.ts
@@ -1,5 +1,3 @@
-import { latexDeltaToMarkdownAdapterMatcher } from '@blocksuite/affine-inline-latex';
-import { referenceDeltaToMarkdownAdapterMatcher } from '@blocksuite/affine-inline-reference';
import { InlineDeltaToMarkdownAdapterExtension } from '@blocksuite/affine-shared/adapters';
export const boldDeltaToMarkdownAdapterMatcher =
@@ -52,10 +50,8 @@ export const inlineCodeDeltaToMarkdownAdapterMatcher =
});
export const InlineDeltaToMarkdownAdapterExtensions = [
- referenceDeltaToMarkdownAdapterMatcher,
inlineCodeDeltaToMarkdownAdapterMatcher,
boldDeltaToMarkdownAdapterMatcher,
italicDeltaToMarkdownAdapterMatcher,
strikeDeltaToMarkdownAdapterMatcher,
- latexDeltaToMarkdownAdapterMatcher,
];
diff --git a/blocksuite/affine/inlines/preset/src/adapters/markdown/markdown-inline.ts b/blocksuite/affine/inlines/preset/src/adapters/markdown/markdown-inline.ts
index e0ec7a7ab..8192dfb79 100644
--- a/blocksuite/affine/inlines/preset/src/adapters/markdown/markdown-inline.ts
+++ b/blocksuite/affine/inlines/preset/src/adapters/markdown/markdown-inline.ts
@@ -1,4 +1,3 @@
-import { markdownInlineMathToDeltaMatcher } from '@blocksuite/affine-inline-latex';
import { MarkdownASTToDeltaExtension } from '@blocksuite/affine-shared/adapters';
export const markdownTextToDeltaMatcher = MarkdownASTToDeltaExtension({
@@ -94,7 +93,6 @@ export const MarkdownInlineToDeltaAdapterExtensions = [
markdownStrongToDeltaMatcher,
markdownEmphasisToDeltaMatcher,
markdownDeleteToDeltaMatcher,
- markdownInlineMathToDeltaMatcher,
markdownListToDeltaMatcher,
markdownHtmlToDeltaMatcher,
];
diff --git a/blocksuite/affine/inlines/preset/src/adapters/plain-text/inline-delta.ts b/blocksuite/affine/inlines/preset/src/adapters/plain-text/inline-delta.ts
deleted file mode 100644
index 93bb0c74a..000000000
--- a/blocksuite/affine/inlines/preset/src/adapters/plain-text/inline-delta.ts
+++ /dev/null
@@ -1,8 +0,0 @@
-import { latexDeltaMarkdownAdapterMatch } from '@blocksuite/affine-inline-latex';
-import { referenceDeltaMarkdownAdapterMatch } from '@blocksuite/affine-inline-reference';
-import type { ExtensionType } from '@blocksuite/store';
-
-export const InlineDeltaToPlainTextAdapterExtensions: ExtensionType[] = [
- referenceDeltaMarkdownAdapterMatch,
- latexDeltaMarkdownAdapterMatch,
-];
diff --git a/blocksuite/affine/inlines/preset/src/inline-spec.ts b/blocksuite/affine/inlines/preset/src/inline-spec.ts
index 88c613af0..d586d4811 100644
--- a/blocksuite/affine/inlines/preset/src/inline-spec.ts
+++ b/blocksuite/affine/inlines/preset/src/inline-spec.ts
@@ -1,6 +1,3 @@
-import { inlineLatexExtensions } from '@blocksuite/affine-inline-latex';
-import { inlineMentionExtensions } from '@blocksuite/affine-inline-mention';
-import { inlineReferenceExtensions } from '@blocksuite/affine-inline-reference';
import type { AffineTextAttributes } from '@blocksuite/affine-shared/types';
import {
type InlineRootElement,
@@ -104,7 +101,4 @@ export const InlineSpecExtensions: ExtensionType[] = [
CodeInlineSpecExtension,
BackgroundInlineSpecExtension,
ColorInlineSpecExtension,
- ...inlineReferenceExtensions,
- ...inlineLatexExtensions,
- ...inlineMentionExtensions,
];
diff --git a/blocksuite/affine/inlines/reference/package.json b/blocksuite/affine/inlines/reference/package.json
index 1dd91ac68..3aedd5054 100644
--- a/blocksuite/affine/inlines/reference/package.json
+++ b/blocksuite/affine/inlines/reference/package.json
@@ -11,6 +11,7 @@
"license": "MIT",
"dependencies": {
"@blocksuite/affine-components": "workspace:*",
+ "@blocksuite/affine-ext-loader": "workspace:*",
"@blocksuite/affine-model": "workspace:*",
"@blocksuite/affine-shared": "workspace:*",
"@blocksuite/global": "workspace:*",
@@ -33,7 +34,9 @@
},
"exports": {
".": "./src/index.ts",
- "./effects": "./src/effects.ts"
+ "./effects": "./src/effects.ts",
+ "./store": "./src/store.ts",
+ "./view": "./src/view.ts"
},
"files": [
"src",
diff --git a/blocksuite/affine/inlines/reference/src/store.ts b/blocksuite/affine/inlines/reference/src/store.ts
new file mode 100644
index 000000000..7b736a91c
--- /dev/null
+++ b/blocksuite/affine/inlines/reference/src/store.ts
@@ -0,0 +1,21 @@
+import {
+ type StoreExtensionContext,
+ StoreExtensionProvider,
+} from '@blocksuite/affine-ext-loader';
+
+import {
+ referenceDeltaMarkdownAdapterMatch,
+ referenceDeltaToHtmlAdapterMatcher,
+ referenceDeltaToMarkdownAdapterMatcher,
+} from './adapters';
+
+export class ReferenceStoreExtension extends StoreExtensionProvider {
+ override name = 'affine-reference-inline';
+
+ override setup(context: StoreExtensionContext) {
+ super.setup(context);
+ context.register(referenceDeltaToHtmlAdapterMatcher);
+ context.register(referenceDeltaToMarkdownAdapterMatcher);
+ context.register(referenceDeltaMarkdownAdapterMatch);
+ }
+}
diff --git a/blocksuite/affine/inlines/reference/src/view.ts b/blocksuite/affine/inlines/reference/src/view.ts
new file mode 100644
index 000000000..5708a65ea
--- /dev/null
+++ b/blocksuite/affine/inlines/reference/src/view.ts
@@ -0,0 +1,25 @@
+import {
+ type ViewExtensionContext,
+ ViewExtensionProvider,
+} from '@blocksuite/affine-ext-loader';
+
+import { effects } from './effects';
+import { ReferenceInlineSpecExtension } from './inline-spec';
+import { RefNodeSlotsExtension } from './reference-node';
+import { referenceNodeToolbar } from './toolbar';
+
+export class ReferenceViewExtension extends ViewExtensionProvider {
+ override name = 'affine-reference-inline';
+
+ override effect(): void {
+ super.effect();
+ effects();
+ }
+
+ override setup(context: ViewExtensionContext) {
+ super.setup(context);
+ context.register(referenceNodeToolbar);
+ context.register(ReferenceInlineSpecExtension);
+ context.register(RefNodeSlotsExtension);
+ }
+}
diff --git a/blocksuite/affine/inlines/reference/tsconfig.json b/blocksuite/affine/inlines/reference/tsconfig.json
index 76a74f340..d60ba97d5 100644
--- a/blocksuite/affine/inlines/reference/tsconfig.json
+++ b/blocksuite/affine/inlines/reference/tsconfig.json
@@ -8,6 +8,7 @@
"include": ["./src"],
"references": [
{ "path": "../../components" },
+ { "path": "../../ext-loader" },
{ "path": "../../model" },
{ "path": "../../shared" },
{ "path": "../../../framework/global" },
diff --git a/blocksuite/integration-test/src/store.ts b/blocksuite/integration-test/src/store.ts
index 8d5ccb8af..cef69c6e7 100644
--- a/blocksuite/integration-test/src/store.ts
+++ b/blocksuite/integration-test/src/store.ts
@@ -1,49 +1,7 @@
-import { AttachmentStoreExtension } from '@blocksuite/affine/blocks/attachment/store';
-import { BookmarkStoreExtension } from '@blocksuite/affine/blocks/bookmark/store';
-import { CalloutStoreExtension } from '@blocksuite/affine/blocks/callout/store';
-import { CodeStoreExtension } from '@blocksuite/affine/blocks/code/store';
-import { DataViewStoreExtension } from '@blocksuite/affine/blocks/data-view/store';
-import { DatabaseStoreExtension } from '@blocksuite/affine/blocks/database/store';
-import { DividerStoreExtension } from '@blocksuite/affine/blocks/divider/store';
-import { EdgelessTextStoreExtension } from '@blocksuite/affine/blocks/edgeless-text/store';
-import { EmbedStoreExtension } from '@blocksuite/affine/blocks/embed/store';
-import { FrameStoreExtension } from '@blocksuite/affine/blocks/frame/store';
-import { ImageStoreExtension } from '@blocksuite/affine/blocks/image/store';
-import { LatexStoreExtension } from '@blocksuite/affine/blocks/latex/store';
-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';
-import { FootnoteStoreExtension } from '@blocksuite/affine/inlines/footnote/store';
-import { LinkStoreExtension } from '@blocksuite/affine/inlines/link/store';
+import { getInternalStoreExtensions } from '@blocksuite/affine/extensions/store';
-const manager = new StoreExtensionManager([
- AttachmentStoreExtension,
- BookmarkStoreExtension,
- CalloutStoreExtension,
- CodeStoreExtension,
- DataViewStoreExtension,
- DatabaseStoreExtension,
- DividerStoreExtension,
- EdgelessTextStoreExtension,
- EmbedStoreExtension,
- FrameStoreExtension,
- ImageStoreExtension,
- LatexStoreExtension,
- ListStoreExtension,
- NoteStoreExtension,
- ParagraphStoreExtension,
- SurfaceRefStoreExtension,
- TableStoreExtension,
-
- FootnoteStoreExtension,
- LinkStoreExtension,
-
- MigratingStoreExtension,
-]);
+const manager = new StoreExtensionManager(getInternalStoreExtensions());
export function getTestStoreManager() {
return manager;
diff --git a/blocksuite/integration-test/src/view.ts b/blocksuite/integration-test/src/view.ts
index ad8fc8d05..395550eea 100644
--- a/blocksuite/integration-test/src/view.ts
+++ b/blocksuite/integration-test/src/view.ts
@@ -1,51 +1,8 @@
-import { AttachmentViewExtension } from '@blocksuite/affine/blocks/attachment/view';
-import { BookmarkViewExtension } from '@blocksuite/affine/blocks/bookmark/view';
-import { CalloutViewExtension } from '@blocksuite/affine/blocks/callout/view';
-import { CodeBlockViewExtension } from '@blocksuite/affine/blocks/code/view';
-import { DataViewViewExtension } from '@blocksuite/affine/blocks/data-view/view';
-import { DatabaseViewExtension } from '@blocksuite/affine/blocks/database/view';
-import { DividerViewExtension } from '@blocksuite/affine/blocks/divider/view';
-import { EdgelessTextViewExtension } from '@blocksuite/affine/blocks/edgeless-text/view';
-import { EmbedViewExtension } from '@blocksuite/affine/blocks/embed/view';
-import { FrameViewExtension } from '@blocksuite/affine/blocks/frame/view';
-import { ImageViewExtension } from '@blocksuite/affine/blocks/image/view';
-import { LatexViewExtension } from '@blocksuite/affine/blocks/latex/view';
-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';
-import { FootnoteViewExtension } from '@blocksuite/affine/inlines/footnote/view';
-import { LinkViewExtension } from '@blocksuite/affine/inlines/link/view';
+import { getInternalViewExtensions } from '@blocksuite/affine/extensions/view';
+
+const manager = new ViewExtensionManager(getInternalViewExtensions());
export function getTestViewManager() {
- const manager = new ViewExtensionManager([
- MigratingViewExtension,
-
- // Block
- AttachmentViewExtension,
- BookmarkViewExtension,
- CalloutViewExtension,
- CodeBlockViewExtension,
- DataViewViewExtension,
- DatabaseViewExtension,
- DividerViewExtension,
- EdgelessTextViewExtension,
- EmbedViewExtension,
- FrameViewExtension,
- ImageViewExtension,
- LatexViewExtension,
- ListViewExtension,
- NoteViewExtension,
- ParagraphViewExtension,
- SurfaceRefViewExtension,
- TableViewExtension,
-
- // Inline
- FootnoteViewExtension,
- LinkViewExtension,
- ]);
return manager;
}
diff --git a/packages/common/nbstore/src/sync/indexer/bs-store.ts b/packages/common/nbstore/src/sync/indexer/bs-store.ts
new file mode 100644
index 000000000..7c11a17c0
--- /dev/null
+++ b/packages/common/nbstore/src/sync/indexer/bs-store.ts
@@ -0,0 +1,8 @@
+import { StoreExtensionManager } from '@blocksuite/affine/ext-loader';
+import { getInternalStoreExtensions } from '@blocksuite/affine/extensions/store';
+
+const manager = new StoreExtensionManager(getInternalStoreExtensions());
+
+export function getStoreManager() {
+ return manager;
+}
diff --git a/packages/common/nbstore/src/sync/indexer/crawler.ts b/packages/common/nbstore/src/sync/indexer/crawler.ts
index 776fca5bb..13c6a4e41 100644
--- a/packages/common/nbstore/src/sync/indexer/crawler.ts
+++ b/packages/common/nbstore/src/sync/indexer/crawler.ts
@@ -1,4 +1,3 @@
-import { getMarkdownAdapterExtensions } from '@blocksuite/affine/adapters';
import { Container } from '@blocksuite/affine/global/di';
import type {
AttachmentBlockModel,
@@ -28,6 +27,7 @@ import {
} from 'yjs';
import { IndexerDocument } from '../../storage';
+import { getStoreManager } from './bs-store';
const blocksuiteSchema = new Schema();
blocksuiteSchema.register([...AffineSchemas]);
@@ -119,9 +119,11 @@ function generateMarkdownPreviewBuilder(
};
const container = new Container();
- getMarkdownAdapterExtensions().forEach(ext => {
- ext.setup(container);
- });
+ getStoreManager()
+ .get('store')
+ .forEach(ext => {
+ ext.setup(container);
+ });
const provider = container.provider();
const markdownAdapter = new MarkdownAdapter(
diff --git a/packages/frontend/apps/android/src/app.tsx b/packages/frontend/apps/android/src/app.tsx
index 39efbd20f..ba58cd274 100644
--- a/packages/frontend/apps/android/src/app.tsx
+++ b/packages/frontend/apps/android/src/app.tsx
@@ -1,3 +1,4 @@
+import { getStoreManager } from '@affine/core/blocksuite/manager/migrating-store';
import { AffineContext } from '@affine/core/components/context';
import { AppFallback } from '@affine/core/mobile/components/app-fallback';
import { configureMobileModules } from '@affine/core/mobile/modules';
@@ -30,7 +31,6 @@ import { configureBrowserWorkspaceFlavours } from '@affine/core/modules/workspac
import { getWorkerUrl } from '@affine/env/worker';
import { I18n } from '@affine/i18n';
import { StoreManagerClient } from '@affine/nbstore/worker/client';
-import { getMarkdownAdapterExtensions } from '@blocksuite/affine/adapters';
import { Container } from '@blocksuite/affine/global/di';
import {
docLinkBaseURLMiddleware,
@@ -251,9 +251,11 @@ framework.scope(ServerScope).override(AuthProvider, resolver => {
const snapshot = transformer.docToSnapshot(blockSuiteDoc);
const container = new Container();
- getMarkdownAdapterExtensions().forEach(ext => {
- ext.setup(container);
- });
+ getStoreManager()
+ .get('store')
+ .forEach(ext => {
+ ext.setup(container);
+ });
const provider = container.provider();
const adapter = new MarkdownAdapter(transformer, provider);
diff --git a/packages/frontend/apps/ios/src/app.tsx b/packages/frontend/apps/ios/src/app.tsx
index f680d1229..85e5388e4 100644
--- a/packages/frontend/apps/ios/src/app.tsx
+++ b/packages/frontend/apps/ios/src/app.tsx
@@ -39,7 +39,6 @@ import { configureBrowserWorkspaceFlavours } from '@affine/core/modules/workspac
import { getWorkerUrl } from '@affine/env/worker';
import { I18n } from '@affine/i18n';
import { StoreManagerClient } from '@affine/nbstore/worker/client';
-import { getMarkdownAdapterExtensions } from '@blocksuite/affine/adapters';
import { Container } from '@blocksuite/affine/global/di';
import {
docLinkBaseURLMiddleware,
@@ -263,9 +262,11 @@ const frameworkProvider = framework.provider();
const snapshot = transformer.docToSnapshot(blockSuiteDoc);
const container = new Container();
- getMarkdownAdapterExtensions().forEach(ext => {
- ext.setup(container);
- });
+ getStoreManager()
+ .get('store')
+ .forEach(ext => {
+ ext.setup(container);
+ });
const provider = container.provider();
const adapter = new MarkdownAdapter(transformer, provider);
diff --git a/packages/frontend/core/src/blocksuite/ai/components/text-renderer.ts b/packages/frontend/core/src/blocksuite/ai/components/text-renderer.ts
index f80e4f334..103c4d4c1 100644
--- a/packages/frontend/core/src/blocksuite/ai/components/text-renderer.ts
+++ b/packages/frontend/core/src/blocksuite/ai/components/text-renderer.ts
@@ -1,5 +1,4 @@
import { createReactComponentFromLit } from '@affine/component';
-import { getMarkdownAdapterExtensions } from '@blocksuite/affine/adapters';
import {
defaultImageProxyMiddleware,
ImageProxyService,
@@ -36,6 +35,7 @@ import { keyed } from 'lit/directives/keyed.js';
import { literal } from 'lit/static-html.js';
import React from 'react';
+import { getStoreManager } from '../../manager/migrating-store';
import { getViewManager } from '../../manager/migrating-view';
import { markDownToDoc } from '../../utils';
import type {
@@ -231,9 +231,11 @@ export class TextRenderer extends WithDisposable(ShadowlessElement) {
provider = this.host.std.store.provider;
} else {
const container = new Container();
- getMarkdownAdapterExtensions().forEach(ext => {
- ext.setup(container);
- });
+ getStoreManager()
+ .get('store')
+ .forEach(ext => {
+ ext.setup(container);
+ });
provider = container.provider();
}
diff --git a/packages/frontend/core/src/blocksuite/ai/mini-mindmap/__tests__/mindmap-preview.unit.spec.ts b/packages/frontend/core/src/blocksuite/ai/mini-mindmap/__tests__/mindmap-preview.unit.spec.ts
index 55b057b96..e609b7349 100644
--- a/packages/frontend/core/src/blocksuite/ai/mini-mindmap/__tests__/mindmap-preview.unit.spec.ts
+++ b/packages/frontend/core/src/blocksuite/ai/mini-mindmap/__tests__/mindmap-preview.unit.spec.ts
@@ -1,4 +1,4 @@
-import { getMarkdownAdapterExtensions } from '@blocksuite/affine/adapters';
+import { getStoreManager } from '@affine/core/blocksuite/manager/migrating-store.js';
import { Container } from '@blocksuite/affine/global/di';
import { TestWorkspace } from '@blocksuite/affine/store/test';
import { describe, expect, test } from 'vitest';
@@ -6,9 +6,11 @@ import { describe, expect, test } from 'vitest';
import { markdownToMindmap } from '../mindmap-preview.js';
const container = new Container();
-getMarkdownAdapterExtensions().forEach(ext => {
- ext.setup(container);
-});
+getStoreManager()
+ .get('store')
+ .forEach(ext => {
+ ext.setup(container);
+ });
const provider = container.provider();
describe('markdownToMindmap: convert markdown list to a mind map tree', () => {
diff --git a/packages/frontend/core/src/blocksuite/manager/migrating-store.ts b/packages/frontend/core/src/blocksuite/manager/migrating-store.ts
index ddaee1366..f193b95db 100644
--- a/packages/frontend/core/src/blocksuite/manager/migrating-store.ts
+++ b/packages/frontend/core/src/blocksuite/manager/migrating-store.ts
@@ -1,28 +1,9 @@
-import { AttachmentStoreExtension } from '@blocksuite/affine/blocks/attachment/store';
-import { BookmarkStoreExtension } from '@blocksuite/affine/blocks/bookmark/store';
-import { CalloutStoreExtension } from '@blocksuite/affine/blocks/callout/store';
-import { CodeStoreExtension } from '@blocksuite/affine/blocks/code/store';
-import { DataViewStoreExtension } from '@blocksuite/affine/blocks/data-view/store';
-import { DatabaseStoreExtension } from '@blocksuite/affine/blocks/database/store';
-import { DividerStoreExtension } from '@blocksuite/affine/blocks/divider/store';
-import { EdgelessTextStoreExtension } from '@blocksuite/affine/blocks/edgeless-text/store';
-import { EmbedStoreExtension } from '@blocksuite/affine/blocks/embed/store';
-import { FrameStoreExtension } from '@blocksuite/affine/blocks/frame/store';
-import { ImageStoreExtension } from '@blocksuite/affine/blocks/image/store';
-import { LatexStoreExtension } from '@blocksuite/affine/blocks/latex/store';
-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,
StoreExtensionProvider,
} from '@blocksuite/affine/ext-loader';
-import { MigratingStoreExtension } from '@blocksuite/affine/extensions/store';
-import { FootnoteStoreExtension } from '@blocksuite/affine/inlines/footnote/store';
-import { LinkStoreExtension } from '@blocksuite/affine/inlines/link/store';
+import { getInternalStoreExtensions } from '@blocksuite/affine/extensions/store';
import { AIChatBlockSchemaExtension } from '../ai/blocks/ai-chat-block/model';
@@ -36,29 +17,7 @@ class MigratingAffineStoreExtension extends StoreExtensionProvider {
}
const manager = new StoreExtensionManager([
- // Block
- AttachmentStoreExtension,
- BookmarkStoreExtension,
- CalloutStoreExtension,
- CodeStoreExtension,
- DataViewStoreExtension,
- DatabaseStoreExtension,
- DividerStoreExtension,
- EdgelessTextStoreExtension,
- EmbedStoreExtension,
- FrameStoreExtension,
- ImageStoreExtension,
- LatexStoreExtension,
- ListStoreExtension,
- NoteStoreExtension,
- ParagraphStoreExtension,
- SurfaceRefStoreExtension,
- TableStoreExtension,
- // Inline
- FootnoteStoreExtension,
- LinkStoreExtension,
-
- MigratingStoreExtension,
+ ...getInternalStoreExtensions(),
MigratingAffineStoreExtension,
]);
diff --git a/packages/frontend/core/src/blocksuite/manager/migrating-view.ts b/packages/frontend/core/src/blocksuite/manager/migrating-view.ts
index d08c5e30a..3b7a0838c 100644
--- a/packages/frontend/core/src/blocksuite/manager/migrating-view.ts
+++ b/packages/frontend/core/src/blocksuite/manager/migrating-view.ts
@@ -1,30 +1,11 @@
import { PeekViewService } from '@affine/core/modules/peek-view';
-import { AttachmentViewExtension } from '@blocksuite/affine/blocks/attachment/view';
-import { BookmarkViewExtension } from '@blocksuite/affine/blocks/bookmark/view';
-import { CalloutViewExtension } from '@blocksuite/affine/blocks/callout/view';
-import { CodeBlockViewExtension } from '@blocksuite/affine/blocks/code/view';
-import { DataViewViewExtension } from '@blocksuite/affine/blocks/data-view/view';
-import { DatabaseViewExtension } from '@blocksuite/affine/blocks/database/view';
-import { DividerViewExtension } from '@blocksuite/affine/blocks/divider/view';
-import { EdgelessTextViewExtension } from '@blocksuite/affine/blocks/edgeless-text/view';
-import { EmbedViewExtension } from '@blocksuite/affine/blocks/embed/view';
-import { FrameViewExtension } from '@blocksuite/affine/blocks/frame/view';
-import { ImageViewExtension } from '@blocksuite/affine/blocks/image/view';
-import { LatexViewExtension } from '@blocksuite/affine/blocks/latex/view';
-import { ListViewExtension } from '@blocksuite/affine/blocks/list/view';
-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,
ViewExtensionProvider,
} from '@blocksuite/affine/ext-loader';
-import { MigratingViewExtension } from '@blocksuite/affine/extensions/view';
-import { FootnoteViewExtension } from '@blocksuite/affine/inlines/footnote/view';
-import { LinkViewExtension } from '@blocksuite/affine/inlines/link/view';
+import { getInternalViewExtensions } from '@blocksuite/affine/extensions/view';
import { ToolbarModuleExtension } from '@blocksuite/affine/shared/services';
import { BlockFlavourIdentifier } from '@blocksuite/affine/std';
import { FrameworkProvider } from '@toeverything/infra';
@@ -147,29 +128,7 @@ class MigratingAffineViewExtension extends ViewExtensionProvider<
}
const manager = new ViewExtensionManager([
- MigratingViewExtension,
-
- // Block
- AttachmentViewExtension,
- BookmarkViewExtension,
- CalloutViewExtension,
- CodeBlockViewExtension,
- DataViewViewExtension,
- DatabaseViewExtension,
- DividerViewExtension,
- EdgelessTextViewExtension,
- EmbedViewExtension,
- FrameViewExtension,
- ImageViewExtension,
- LatexViewExtension,
- ListViewExtension,
- NoteViewExtension,
- ParagraphViewExtension,
- SurfaceRefViewExtension,
- TableViewExtension,
- // Inline
- FootnoteViewExtension,
- LinkViewExtension,
+ ...getInternalViewExtensions(),
MigratingAffineViewExtension,
]);
diff --git a/tools/utils/src/workspace.gen.ts b/tools/utils/src/workspace.gen.ts
index 6da97709b..e957afe87 100644
--- a/tools/utils/src/workspace.gen.ts
+++ b/tools/utils/src/workspace.gen.ts
@@ -652,6 +652,7 @@ export const PackageList = [
name: '@blocksuite/affine-inline-latex',
workspaceDependencies: [
'blocksuite/affine/components',
+ 'blocksuite/affine/ext-loader',
'blocksuite/affine/inlines/reference',
'blocksuite/affine/model',
'blocksuite/affine/rich-text',
@@ -680,6 +681,7 @@ export const PackageList = [
name: '@blocksuite/affine-inline-mention',
workspaceDependencies: [
'blocksuite/affine/components',
+ 'blocksuite/affine/ext-loader',
'blocksuite/affine/model',
'blocksuite/affine/shared',
'blocksuite/framework/global',
@@ -710,6 +712,7 @@ export const PackageList = [
name: '@blocksuite/affine-inline-reference',
workspaceDependencies: [
'blocksuite/affine/components',
+ 'blocksuite/affine/ext-loader',
'blocksuite/affine/model',
'blocksuite/affine/shared',
'blocksuite/framework/global',
diff --git a/yarn.lock b/yarn.lock
index 777b6ba98..d016f774d 100644
--- a/yarn.lock
+++ b/yarn.lock
@@ -3355,6 +3355,7 @@ __metadata:
resolution: "@blocksuite/affine-inline-latex@workspace:blocksuite/affine/inlines/latex"
dependencies:
"@blocksuite/affine-components": "workspace:*"
+ "@blocksuite/affine-ext-loader": "workspace:*"
"@blocksuite/affine-inline-reference": "workspace:*"
"@blocksuite/affine-model": "workspace:*"
"@blocksuite/affine-rich-text": "workspace:*"
@@ -3418,6 +3419,7 @@ __metadata:
resolution: "@blocksuite/affine-inline-mention@workspace:blocksuite/affine/inlines/mention"
dependencies:
"@blocksuite/affine-components": "workspace:*"
+ "@blocksuite/affine-ext-loader": "workspace:*"
"@blocksuite/affine-model": "workspace:*"
"@blocksuite/affine-shared": "workspace:*"
"@blocksuite/global": "workspace:*"
@@ -3484,6 +3486,7 @@ __metadata:
resolution: "@blocksuite/affine-inline-reference@workspace:blocksuite/affine/inlines/reference"
dependencies:
"@blocksuite/affine-components": "workspace:*"
+ "@blocksuite/affine-ext-loader": "workspace:*"
"@blocksuite/affine-model": "workspace:*"
"@blocksuite/affine-shared": "workspace:*"
"@blocksuite/global": "workspace:*"