feat(editor): reference, mention and latex inline extension (#11914)

Closes: BS-3215
Closes: BS-3218
Closes: BS-3217
This commit is contained in:
Saul-Mirone
2025-04-23 09:22:15 +00:00
parent cb2c559c6e
commit 16831e8c0e
47 changed files with 489 additions and 458 deletions

View File

@@ -146,13 +146,18 @@
"./inlines/link": "./src/inlines/link/index.ts", "./inlines/link": "./src/inlines/link/index.ts",
"./inlines/link/store": "./src/inlines/link/store.ts", "./inlines/link/store": "./src/inlines/link/store.ts",
"./inlines/link/view": "./src/inlines/link/view.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/preset": "./src/inlines/preset.ts",
"./inlines/footnote": "./src/inlines/footnote/index.ts", "./inlines/footnote": "./src/inlines/footnote/index.ts",
"./inlines/footnote/view": "./src/inlines/footnote/view.ts", "./inlines/footnote/view": "./src/inlines/footnote/view.ts",
"./inlines/footnote/store": "./src/inlines/footnote/store.ts", "./inlines/footnote/store": "./src/inlines/footnote/store.ts",
"./inlines/latex": "./src/inlines/latex.ts", "./inlines/latex": "./src/inlines/latex/index.ts",
"./inlines/mention": "./src/inlines/mention.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/drag-handle": "./src/widgets/drag-handle.ts",
"./widgets/edgeless-auto-connect": "./src/widgets/edgeless-auto-connect.ts", "./widgets/edgeless-auto-connect": "./src/widgets/edgeless-auto-connect.ts",
"./widgets/edgeless-toolbar": "./src/widgets/edgeless-toolbar.ts", "./widgets/edgeless-toolbar": "./src/widgets/edgeless-toolbar.ts",
@@ -215,7 +220,6 @@
"./schemas": "./src/schemas.ts", "./schemas": "./src/schemas.ts",
"./model": "./src/model/index.ts", "./model": "./src/model/index.ts",
"./sync": "./src/sync/index.ts", "./sync": "./src/sync/index.ts",
"./adapters": "./src/adapters/index.ts",
"./extensions/store": "./src/extensions/store.ts", "./extensions/store": "./src/extensions/store.ts",
"./extensions/view": "./src/extensions/view.ts" "./extensions/view": "./src/extensions/view.ts"
}, },

View File

@@ -125,7 +125,7 @@ describe('snapshot to html', () => {
}; };
const html = template( const html = template(
`<pre class="shiki light-plus" style="background-color:#FFFFFF;color:#000000" tabindex="0"><code><span class="line"><span style="color:#AF00DB">import</span><span style="color:#000000"> this</span></span></code></pre>` `<pre><code class="code-python">import this</code></pre>`
); );
const htmlAdapter = new HtmlAdapter(createJob(), provider); const htmlAdapter = new HtmlAdapter(createJob(), provider);
@@ -191,7 +191,7 @@ describe('snapshot to html', () => {
}; };
const html = template( const html = template(
`<pre class="shiki light-plus" style="background-color:#FFFFFF;color:#000000" tabindex="0"><code><span class="line"><span>import this</span></span></code></pre>` `<pre><code class="code-PYTHON">import this</code></pre>`
); );
const htmlAdapter = new HtmlAdapter(createJob(), provider); const htmlAdapter = new HtmlAdapter(createJob(), provider);
@@ -257,7 +257,7 @@ describe('snapshot to html', () => {
}; };
const html = template( const html = template(
`<pre class="shiki light-plus" style="background-color:#FFFFFF;color:#000000" tabindex="0"><code><span class="line"><span>import this</span></span></code></pre>` `<pre><code class="code-unknown">import this</code></pre>`
); );
const htmlAdapter = new HtmlAdapter(createJob(), provider); const htmlAdapter = new HtmlAdapter(createJob(), provider);

View File

@@ -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 { 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([ const manager = new StoreExtensionManager(getInternalStoreExtensions());
AttachmentStoreExtension,
BookmarkStoreExtension,
CalloutStoreExtension,
CodeStoreExtension,
DataViewStoreExtension,
DatabaseStoreExtension,
DividerStoreExtension,
EdgelessTextStoreExtension,
EmbedStoreExtension,
FrameStoreExtension,
ImageStoreExtension,
LatexStoreExtension,
ListStoreExtension,
NoteStoreExtension,
ParagraphStoreExtension,
SurfaceRefStoreExtension,
TableStoreExtension,
FootnoteStoreExtension,
LinkStoreExtension,
MigratingStoreExtension,
]);
export const testStoreExtensions = manager.get('store'); export const testStoreExtensions = manager.get('store');

View File

@@ -2,7 +2,6 @@ import {
HtmlInlineToDeltaAdapterExtensions, HtmlInlineToDeltaAdapterExtensions,
InlineDeltaToHtmlAdapterExtensions, InlineDeltaToHtmlAdapterExtensions,
InlineDeltaToMarkdownAdapterExtensions, InlineDeltaToMarkdownAdapterExtensions,
InlineDeltaToPlainTextAdapterExtensions,
MarkdownInlineToDeltaAdapterExtensions, MarkdownInlineToDeltaAdapterExtensions,
NotionHtmlInlineToDeltaAdapterExtensions, NotionHtmlInlineToDeltaAdapterExtensions,
} from '@blocksuite/affine-inline-preset'; } from '@blocksuite/affine-inline-preset';
@@ -62,8 +61,5 @@ export function getNotionHtmlAdapterExtensions(): ExtensionType[] {
} }
export function getPlainTextAdapterExtensions(): ExtensionType[] { export function getPlainTextAdapterExtensions(): ExtensionType[] {
return [ return [...defaultBlockPlainTextAdapterMatchers];
...defaultBlockPlainTextAdapterMatchers,
...InlineDeltaToPlainTextAdapterExtensions,
];
} }

View File

@@ -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 fragmentDocTitleEffects } from '@blocksuite/affine-fragment-doc-title/effects';
import { effects as fragmentFramePanelEffects } from '@blocksuite/affine-fragment-frame-panel/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 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 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 richTextEffects } from '@blocksuite/affine-rich-text/effects';
import { effects as widgetDragHandleEffects } from '@blocksuite/affine-widget-drag-handle/effects'; import { effects as widgetDragHandleEffects } from '@blocksuite/affine-widget-drag-handle/effects';
import { effects as widgetEdgelessAutoConnectEffects } from '@blocksuite/affine-widget-edgeless-auto-connect/effects'; import { effects as widgetEdgelessAutoConnectEffects } from '@blocksuite/affine-widget-edgeless-auto-connect/effects';
@@ -50,10 +47,7 @@ export function effects() {
dataViewEffects(); dataViewEffects();
richTextEffects(); richTextEffects();
inlineReferenceEffects();
inlinePresetEffects(); inlinePresetEffects();
inlineLatexEffects();
inlineMentionEffects();
blockSurfaceEffects(); blockSurfaceEffects();
blockRootEffects(); blockRootEffects();

View File

@@ -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);
}
}

View File

@@ -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;
}
}
}

View File

@@ -1,124 +1,52 @@
import { DatabaseSelectionExtension } from '@blocksuite/affine-block-database'; import { AttachmentStoreExtension } from '@blocksuite/affine-block-attachment/store';
import { import { BookmarkStoreExtension } from '@blocksuite/affine-block-bookmark/store';
RootBlockHtmlAdapterExtension, import { CalloutStoreExtension } from '@blocksuite/affine-block-callout/store';
RootBlockMarkdownAdapterExtension, import { CodeStoreExtension } from '@blocksuite/affine-block-code/store';
RootBlockNotionHtmlAdapterExtension, import { DataViewStoreExtension } from '@blocksuite/affine-block-data-view/store';
} from '@blocksuite/affine-block-root'; import { DatabaseStoreExtension } from '@blocksuite/affine-block-database/store';
import { SurfaceBlockSchemaExtension } from '@blocksuite/affine-block-surface'; import { DividerStoreExtension } from '@blocksuite/affine-block-divider/store';
import { import { EdgelessTextStoreExtension } from '@blocksuite/affine-block-edgeless-text/store';
type StoreExtensionContext, import { EmbedStoreExtension } from '@blocksuite/affine-block-embed/store';
StoreExtensionProvider, import { FrameStoreExtension } from '@blocksuite/affine-block-frame/store';
} from '@blocksuite/affine-ext-loader'; import { ImageStoreExtension } from '@blocksuite/affine-block-image/store';
import { import { LatexStoreExtension } from '@blocksuite/affine-block-latex/store';
HtmlInlineToDeltaAdapterExtensions, import { ListStoreExtension } from '@blocksuite/affine-block-list/store';
InlineDeltaToHtmlAdapterExtensions, import { NoteStoreExtension } from '@blocksuite/affine-block-note/store';
InlineDeltaToMarkdownAdapterExtensions, import { ParagraphStoreExtension } from '@blocksuite/affine-block-paragraph/store';
InlineDeltaToPlainTextAdapterExtensions, import { SurfaceRefStoreExtension } from '@blocksuite/affine-block-surface-ref/store';
MarkdownInlineToDeltaAdapterExtensions, import { TableStoreExtension } from '@blocksuite/affine-block-table/store';
NotionHtmlInlineToDeltaAdapterExtensions, import { FootnoteStoreExtension } from '@blocksuite/affine-inline-footnote/store';
} from '@blocksuite/affine-inline-preset'; import { LatexStoreExtension as InlineLatexStoreExtension } from '@blocksuite/affine-inline-latex/store';
import { import { LinkStoreExtension } from '@blocksuite/affine-inline-link/store';
RootBlockSchemaExtension, import { ReferenceStoreExtension } from '@blocksuite/affine-inline-reference/store';
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[] { import { MigratingStoreExtension } from './migrating-store';
export function getInternalStoreExtensions() {
return [ return [
MarkdownAdapterFactoryExtension, AttachmentStoreExtension,
PlainTextAdapterFactoryExtension, BookmarkStoreExtension,
HtmlAdapterFactoryExtension, CalloutStoreExtension,
NotionTextAdapterFactoryExtension, CodeStoreExtension,
NotionHtmlAdapterFactoryExtension, DataViewStoreExtension,
MixTextAdapterFactoryExtension, 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);
}
}

View File

@@ -1,42 +1,56 @@
import { import { AttachmentViewExtension } from '@blocksuite/affine-block-attachment/view';
type ViewExtensionContext, import { BookmarkViewExtension } from '@blocksuite/affine-block-bookmark/view';
ViewExtensionProvider, import { CalloutViewExtension } from '@blocksuite/affine-block-callout/view';
} from '@blocksuite/affine-ext-loader'; 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 { MigratingViewExtension } from './migrating-view';
import {
MigratingEdgelessEditorBlockSpecs,
MigratingPageEditorBlockSpecs,
MigratingPreviewEdgelessEditorBlockSpecs,
MigratingPreviewPageEditorBlockSpecs,
} from './migrating';
export class MigratingViewExtension extends ViewExtensionProvider { export function getInternalViewExtensions() {
override name = 'migrating'; return [
MigratingViewExtension,
override effect() { // Block
super.effect(); AttachmentViewExtension,
effects(); BookmarkViewExtension,
} CalloutViewExtension,
CodeBlockViewExtension,
DataViewViewExtension,
DatabaseViewExtension,
DividerViewExtension,
EdgelessTextViewExtension,
EmbedViewExtension,
FrameViewExtension,
ImageViewExtension,
LatexViewExtension,
ListViewExtension,
NoteViewExtension,
ParagraphViewExtension,
SurfaceRefViewExtension,
TableViewExtension,
override setup(context: ViewExtensionContext) { // Inline
super.setup(context); FootnoteViewExtension,
const scope = context.scope; LinkViewExtension,
if (scope === 'preview-page') { ReferenceViewExtension,
context.register(MigratingPreviewPageEditorBlockSpecs); InlineLatexViewExtension,
return; MentionViewExtension,
} ];
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;
}
}
} }

View File

@@ -0,0 +1 @@
export * from '@blocksuite/affine-inline-latex/store';

View File

@@ -0,0 +1 @@
export * from '@blocksuite/affine-inline-latex/view';

View File

@@ -0,0 +1 @@
export * from '@blocksuite/affine-inline-mention/view';

View File

@@ -0,0 +1 @@
export * from '@blocksuite/affine-inline-reference/store';

View File

@@ -0,0 +1 @@
export * from '@blocksuite/affine-inline-reference/view';

View File

@@ -7,7 +7,6 @@ import {
} from '@blocksuite/affine-shared/adapters'; } from '@blocksuite/affine-shared/adapters';
import type { DeltaInsert } from '@blocksuite/store'; import type { DeltaInsert } from '@blocksuite/store';
import { nanoid } from '@blocksuite/store'; import { nanoid } from '@blocksuite/store';
import { bundledLanguagesInfo, codeToHast } from 'shiki';
export const codeBlockHtmlAdapterMatcher: BlockHtmlAdapterMatcher = { export const codeBlockHtmlAdapterMatcher: BlockHtmlAdapterMatcher = {
flavour: CodeBlockSchema.model.flavour, flavour: CodeBlockSchema.model.flavour,
@@ -69,24 +68,38 @@ export const codeBlockHtmlAdapterMatcher: BlockHtmlAdapterMatcher = {
enter: async (o, context) => { enter: async (o, context) => {
const { walkerContext } = context; const { walkerContext } = context;
const rawLang = o.node.props.language as string | null; 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<string, unknown>) const text = (o.node.props.text as Record<string, unknown>)
.delta as DeltaInsert[]; .delta as DeltaInsert[];
const code = text.map(delta => delta.insert).join(''); 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();
}, },
}, },
}; };

View File

@@ -11,6 +11,7 @@
"license": "MIT", "license": "MIT",
"dependencies": { "dependencies": {
"@blocksuite/affine-components": "workspace:*", "@blocksuite/affine-components": "workspace:*",
"@blocksuite/affine-ext-loader": "workspace:*",
"@blocksuite/affine-inline-reference": "workspace:*", "@blocksuite/affine-inline-reference": "workspace:*",
"@blocksuite/affine-model": "workspace:*", "@blocksuite/affine-model": "workspace:*",
"@blocksuite/affine-rich-text": "workspace:*", "@blocksuite/affine-rich-text": "workspace:*",
@@ -40,7 +41,9 @@
}, },
"exports": { "exports": {
".": "./src/index.ts", ".": "./src/index.ts",
"./effects": "./src/effects.ts" "./effects": "./src/effects.ts",
"./view": "./src/view.ts",
"./store": "./src/store.ts"
}, },
"files": [ "files": [
"src", "src",

View File

@@ -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);
}
}

View File

@@ -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,
]);
}
}

View File

@@ -8,6 +8,7 @@
"include": ["./src"], "include": ["./src"],
"references": [ "references": [
{ "path": "../../components" }, { "path": "../../components" },
{ "path": "../../ext-loader" },
{ "path": "../reference" }, { "path": "../reference" },
{ "path": "../../model" }, { "path": "../../model" },
{ "path": "../../rich-text" }, { "path": "../../rich-text" },

View File

@@ -11,6 +11,7 @@
"license": "MIT", "license": "MIT",
"dependencies": { "dependencies": {
"@blocksuite/affine-components": "workspace:*", "@blocksuite/affine-components": "workspace:*",
"@blocksuite/affine-ext-loader": "workspace:*",
"@blocksuite/affine-model": "workspace:*", "@blocksuite/affine-model": "workspace:*",
"@blocksuite/affine-shared": "workspace:*", "@blocksuite/affine-shared": "workspace:*",
"@blocksuite/global": "workspace:*", "@blocksuite/global": "workspace:*",
@@ -33,7 +34,8 @@
}, },
"exports": { "exports": {
".": "./src/index.ts", ".": "./src/index.ts",
"./effects": "./src/effects.ts" "./effects": "./src/effects.ts",
"./view": "./src/view.ts"
}, },
"files": [ "files": [
"src", "src",

View File

@@ -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);
}
}

View File

@@ -8,6 +8,7 @@
"include": ["./src"], "include": ["./src"],
"references": [ "references": [
{ "path": "../../components" }, { "path": "../../components" },
{ "path": "../../ext-loader" },
{ "path": "../../model" }, { "path": "../../model" },
{ "path": "../../shared" }, { "path": "../../shared" },
{ "path": "../../../framework/global" }, { "path": "../../../framework/global" },

View File

@@ -5,12 +5,10 @@ import { InlineDeltaToHtmlAdapterExtensions } from './html/inline-delta';
import { InlineDeltaToMarkdownAdapterExtensions } from './markdown/inline-delta'; import { InlineDeltaToMarkdownAdapterExtensions } from './markdown/inline-delta';
import { MarkdownInlineToDeltaAdapterExtensions } from './markdown/markdown-inline'; import { MarkdownInlineToDeltaAdapterExtensions } from './markdown/markdown-inline';
import { NotionHtmlInlineToDeltaAdapterExtensions } from './notion-html/html-inline'; import { NotionHtmlInlineToDeltaAdapterExtensions } from './notion-html/html-inline';
import { InlineDeltaToPlainTextAdapterExtensions } from './plain-text/inline-delta';
export const InlineAdapterExtensions: ExtensionType[] = [ export const InlineAdapterExtensions: ExtensionType[] = [
HtmlInlineToDeltaAdapterExtensions, HtmlInlineToDeltaAdapterExtensions,
InlineDeltaToHtmlAdapterExtensions, InlineDeltaToHtmlAdapterExtensions,
InlineDeltaToPlainTextAdapterExtensions,
NotionHtmlInlineToDeltaAdapterExtensions, NotionHtmlInlineToDeltaAdapterExtensions,
InlineDeltaToMarkdownAdapterExtensions, InlineDeltaToMarkdownAdapterExtensions,
MarkdownInlineToDeltaAdapterExtensions, MarkdownInlineToDeltaAdapterExtensions,
@@ -21,4 +19,3 @@ export * from './html/inline-delta';
export * from './markdown/inline-delta'; export * from './markdown/inline-delta';
export * from './markdown/markdown-inline'; export * from './markdown/markdown-inline';
export * from './notion-html/html-inline'; export * from './notion-html/html-inline';
export * from './plain-text/inline-delta';

View File

@@ -1,4 +1,3 @@
import { referenceDeltaToHtmlAdapterMatcher } from '@blocksuite/affine-inline-reference';
import type { InlineHtmlAST } from '@blocksuite/affine-shared/adapters'; import type { InlineHtmlAST } from '@blocksuite/affine-shared/adapters';
import { InlineDeltaToHtmlAdapterExtension } from '@blocksuite/affine-shared/adapters'; import { InlineDeltaToHtmlAdapterExtension } from '@blocksuite/affine-shared/adapters';
import { ThemeProvider } from '@blocksuite/affine-shared/services'; import { ThemeProvider } from '@blocksuite/affine-shared/services';
@@ -152,5 +151,4 @@ export const InlineDeltaToHtmlAdapterExtensions = [
highlightBackgroundDeltaToHtmlAdapterMatcher, highlightBackgroundDeltaToHtmlAdapterMatcher,
highlightColorDeltaToHtmlAdapterMatcher, highlightColorDeltaToHtmlAdapterMatcher,
inlineCodeDeltaToHtmlAdapterMatcher, inlineCodeDeltaToHtmlAdapterMatcher,
referenceDeltaToHtmlAdapterMatcher,
]; ];

View File

@@ -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'; import { InlineDeltaToMarkdownAdapterExtension } from '@blocksuite/affine-shared/adapters';
export const boldDeltaToMarkdownAdapterMatcher = export const boldDeltaToMarkdownAdapterMatcher =
@@ -52,10 +50,8 @@ export const inlineCodeDeltaToMarkdownAdapterMatcher =
}); });
export const InlineDeltaToMarkdownAdapterExtensions = [ export const InlineDeltaToMarkdownAdapterExtensions = [
referenceDeltaToMarkdownAdapterMatcher,
inlineCodeDeltaToMarkdownAdapterMatcher, inlineCodeDeltaToMarkdownAdapterMatcher,
boldDeltaToMarkdownAdapterMatcher, boldDeltaToMarkdownAdapterMatcher,
italicDeltaToMarkdownAdapterMatcher, italicDeltaToMarkdownAdapterMatcher,
strikeDeltaToMarkdownAdapterMatcher, strikeDeltaToMarkdownAdapterMatcher,
latexDeltaToMarkdownAdapterMatcher,
]; ];

View File

@@ -1,4 +1,3 @@
import { markdownInlineMathToDeltaMatcher } from '@blocksuite/affine-inline-latex';
import { MarkdownASTToDeltaExtension } from '@blocksuite/affine-shared/adapters'; import { MarkdownASTToDeltaExtension } from '@blocksuite/affine-shared/adapters';
export const markdownTextToDeltaMatcher = MarkdownASTToDeltaExtension({ export const markdownTextToDeltaMatcher = MarkdownASTToDeltaExtension({
@@ -94,7 +93,6 @@ export const MarkdownInlineToDeltaAdapterExtensions = [
markdownStrongToDeltaMatcher, markdownStrongToDeltaMatcher,
markdownEmphasisToDeltaMatcher, markdownEmphasisToDeltaMatcher,
markdownDeleteToDeltaMatcher, markdownDeleteToDeltaMatcher,
markdownInlineMathToDeltaMatcher,
markdownListToDeltaMatcher, markdownListToDeltaMatcher,
markdownHtmlToDeltaMatcher, markdownHtmlToDeltaMatcher,
]; ];

View File

@@ -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,
];

View File

@@ -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 { AffineTextAttributes } from '@blocksuite/affine-shared/types';
import { import {
type InlineRootElement, type InlineRootElement,
@@ -104,7 +101,4 @@ export const InlineSpecExtensions: ExtensionType[] = [
CodeInlineSpecExtension, CodeInlineSpecExtension,
BackgroundInlineSpecExtension, BackgroundInlineSpecExtension,
ColorInlineSpecExtension, ColorInlineSpecExtension,
...inlineReferenceExtensions,
...inlineLatexExtensions,
...inlineMentionExtensions,
]; ];

View File

@@ -11,6 +11,7 @@
"license": "MIT", "license": "MIT",
"dependencies": { "dependencies": {
"@blocksuite/affine-components": "workspace:*", "@blocksuite/affine-components": "workspace:*",
"@blocksuite/affine-ext-loader": "workspace:*",
"@blocksuite/affine-model": "workspace:*", "@blocksuite/affine-model": "workspace:*",
"@blocksuite/affine-shared": "workspace:*", "@blocksuite/affine-shared": "workspace:*",
"@blocksuite/global": "workspace:*", "@blocksuite/global": "workspace:*",
@@ -33,7 +34,9 @@
}, },
"exports": { "exports": {
".": "./src/index.ts", ".": "./src/index.ts",
"./effects": "./src/effects.ts" "./effects": "./src/effects.ts",
"./store": "./src/store.ts",
"./view": "./src/view.ts"
}, },
"files": [ "files": [
"src", "src",

View File

@@ -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);
}
}

View File

@@ -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);
}
}

View File

@@ -8,6 +8,7 @@
"include": ["./src"], "include": ["./src"],
"references": [ "references": [
{ "path": "../../components" }, { "path": "../../components" },
{ "path": "../../ext-loader" },
{ "path": "../../model" }, { "path": "../../model" },
{ "path": "../../shared" }, { "path": "../../shared" },
{ "path": "../../../framework/global" }, { "path": "../../../framework/global" },

View File

@@ -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 { StoreExtensionManager } from '@blocksuite/affine/ext-loader';
import { MigratingStoreExtension } from '@blocksuite/affine/extensions/store'; import { getInternalStoreExtensions } from '@blocksuite/affine/extensions/store';
import { FootnoteStoreExtension } from '@blocksuite/affine/inlines/footnote/store';
import { LinkStoreExtension } from '@blocksuite/affine/inlines/link/store';
const manager = new StoreExtensionManager([ const manager = new StoreExtensionManager(getInternalStoreExtensions());
AttachmentStoreExtension,
BookmarkStoreExtension,
CalloutStoreExtension,
CodeStoreExtension,
DataViewStoreExtension,
DatabaseStoreExtension,
DividerStoreExtension,
EdgelessTextStoreExtension,
EmbedStoreExtension,
FrameStoreExtension,
ImageStoreExtension,
LatexStoreExtension,
ListStoreExtension,
NoteStoreExtension,
ParagraphStoreExtension,
SurfaceRefStoreExtension,
TableStoreExtension,
FootnoteStoreExtension,
LinkStoreExtension,
MigratingStoreExtension,
]);
export function getTestStoreManager() { export function getTestStoreManager() {
return manager; return manager;

View File

@@ -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 { ViewExtensionManager } from '@blocksuite/affine/ext-loader';
import { MigratingViewExtension } from '@blocksuite/affine/extensions/view'; import { getInternalViewExtensions } from '@blocksuite/affine/extensions/view';
import { FootnoteViewExtension } from '@blocksuite/affine/inlines/footnote/view';
import { LinkViewExtension } from '@blocksuite/affine/inlines/link/view'; const manager = new ViewExtensionManager(getInternalViewExtensions());
export function getTestViewManager() { 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; return manager;
} }

View File

@@ -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;
}

View File

@@ -1,4 +1,3 @@
import { getMarkdownAdapterExtensions } from '@blocksuite/affine/adapters';
import { Container } from '@blocksuite/affine/global/di'; import { Container } from '@blocksuite/affine/global/di';
import type { import type {
AttachmentBlockModel, AttachmentBlockModel,
@@ -28,6 +27,7 @@ import {
} from 'yjs'; } from 'yjs';
import { IndexerDocument } from '../../storage'; import { IndexerDocument } from '../../storage';
import { getStoreManager } from './bs-store';
const blocksuiteSchema = new Schema(); const blocksuiteSchema = new Schema();
blocksuiteSchema.register([...AffineSchemas]); blocksuiteSchema.register([...AffineSchemas]);
@@ -119,9 +119,11 @@ function generateMarkdownPreviewBuilder(
}; };
const container = new Container(); const container = new Container();
getMarkdownAdapterExtensions().forEach(ext => { getStoreManager()
ext.setup(container); .get('store')
}); .forEach(ext => {
ext.setup(container);
});
const provider = container.provider(); const provider = container.provider();
const markdownAdapter = new MarkdownAdapter( const markdownAdapter = new MarkdownAdapter(

View File

@@ -1,3 +1,4 @@
import { getStoreManager } from '@affine/core/blocksuite/manager/migrating-store';
import { AffineContext } from '@affine/core/components/context'; import { AffineContext } from '@affine/core/components/context';
import { AppFallback } from '@affine/core/mobile/components/app-fallback'; import { AppFallback } from '@affine/core/mobile/components/app-fallback';
import { configureMobileModules } from '@affine/core/mobile/modules'; 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 { getWorkerUrl } from '@affine/env/worker';
import { I18n } from '@affine/i18n'; import { I18n } from '@affine/i18n';
import { StoreManagerClient } from '@affine/nbstore/worker/client'; import { StoreManagerClient } from '@affine/nbstore/worker/client';
import { getMarkdownAdapterExtensions } from '@blocksuite/affine/adapters';
import { Container } from '@blocksuite/affine/global/di'; import { Container } from '@blocksuite/affine/global/di';
import { import {
docLinkBaseURLMiddleware, docLinkBaseURLMiddleware,
@@ -251,9 +251,11 @@ framework.scope(ServerScope).override(AuthProvider, resolver => {
const snapshot = transformer.docToSnapshot(blockSuiteDoc); const snapshot = transformer.docToSnapshot(blockSuiteDoc);
const container = new Container(); const container = new Container();
getMarkdownAdapterExtensions().forEach(ext => { getStoreManager()
ext.setup(container); .get('store')
}); .forEach(ext => {
ext.setup(container);
});
const provider = container.provider(); const provider = container.provider();
const adapter = new MarkdownAdapter(transformer, provider); const adapter = new MarkdownAdapter(transformer, provider);

View File

@@ -39,7 +39,6 @@ import { configureBrowserWorkspaceFlavours } from '@affine/core/modules/workspac
import { getWorkerUrl } from '@affine/env/worker'; import { getWorkerUrl } from '@affine/env/worker';
import { I18n } from '@affine/i18n'; import { I18n } from '@affine/i18n';
import { StoreManagerClient } from '@affine/nbstore/worker/client'; import { StoreManagerClient } from '@affine/nbstore/worker/client';
import { getMarkdownAdapterExtensions } from '@blocksuite/affine/adapters';
import { Container } from '@blocksuite/affine/global/di'; import { Container } from '@blocksuite/affine/global/di';
import { import {
docLinkBaseURLMiddleware, docLinkBaseURLMiddleware,
@@ -263,9 +262,11 @@ const frameworkProvider = framework.provider();
const snapshot = transformer.docToSnapshot(blockSuiteDoc); const snapshot = transformer.docToSnapshot(blockSuiteDoc);
const container = new Container(); const container = new Container();
getMarkdownAdapterExtensions().forEach(ext => { getStoreManager()
ext.setup(container); .get('store')
}); .forEach(ext => {
ext.setup(container);
});
const provider = container.provider(); const provider = container.provider();
const adapter = new MarkdownAdapter(transformer, provider); const adapter = new MarkdownAdapter(transformer, provider);

View File

@@ -1,5 +1,4 @@
import { createReactComponentFromLit } from '@affine/component'; import { createReactComponentFromLit } from '@affine/component';
import { getMarkdownAdapterExtensions } from '@blocksuite/affine/adapters';
import { import {
defaultImageProxyMiddleware, defaultImageProxyMiddleware,
ImageProxyService, ImageProxyService,
@@ -36,6 +35,7 @@ import { keyed } from 'lit/directives/keyed.js';
import { literal } from 'lit/static-html.js'; import { literal } from 'lit/static-html.js';
import React from 'react'; import React from 'react';
import { getStoreManager } from '../../manager/migrating-store';
import { getViewManager } from '../../manager/migrating-view'; import { getViewManager } from '../../manager/migrating-view';
import { markDownToDoc } from '../../utils'; import { markDownToDoc } from '../../utils';
import type { import type {
@@ -231,9 +231,11 @@ export class TextRenderer extends WithDisposable(ShadowlessElement) {
provider = this.host.std.store.provider; provider = this.host.std.store.provider;
} else { } else {
const container = new Container(); const container = new Container();
getMarkdownAdapterExtensions().forEach(ext => { getStoreManager()
ext.setup(container); .get('store')
}); .forEach(ext => {
ext.setup(container);
});
provider = container.provider(); provider = container.provider();
} }

View File

@@ -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 { Container } from '@blocksuite/affine/global/di';
import { TestWorkspace } from '@blocksuite/affine/store/test'; import { TestWorkspace } from '@blocksuite/affine/store/test';
import { describe, expect, test } from 'vitest'; import { describe, expect, test } from 'vitest';
@@ -6,9 +6,11 @@ import { describe, expect, test } from 'vitest';
import { markdownToMindmap } from '../mindmap-preview.js'; import { markdownToMindmap } from '../mindmap-preview.js';
const container = new Container(); const container = new Container();
getMarkdownAdapterExtensions().forEach(ext => { getStoreManager()
ext.setup(container); .get('store')
}); .forEach(ext => {
ext.setup(container);
});
const provider = container.provider(); const provider = container.provider();
describe('markdownToMindmap: convert markdown list to a mind map tree', () => { describe('markdownToMindmap: convert markdown list to a mind map tree', () => {

View File

@@ -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 { import {
type StoreExtensionContext, type StoreExtensionContext,
StoreExtensionManager, StoreExtensionManager,
StoreExtensionProvider, StoreExtensionProvider,
} from '@blocksuite/affine/ext-loader'; } from '@blocksuite/affine/ext-loader';
import { MigratingStoreExtension } from '@blocksuite/affine/extensions/store'; import { getInternalStoreExtensions } from '@blocksuite/affine/extensions/store';
import { FootnoteStoreExtension } from '@blocksuite/affine/inlines/footnote/store';
import { LinkStoreExtension } from '@blocksuite/affine/inlines/link/store';
import { AIChatBlockSchemaExtension } from '../ai/blocks/ai-chat-block/model'; import { AIChatBlockSchemaExtension } from '../ai/blocks/ai-chat-block/model';
@@ -36,29 +17,7 @@ class MigratingAffineStoreExtension extends StoreExtensionProvider {
} }
const manager = new StoreExtensionManager([ const manager = new StoreExtensionManager([
// Block ...getInternalStoreExtensions(),
AttachmentStoreExtension,
BookmarkStoreExtension,
CalloutStoreExtension,
CodeStoreExtension,
DataViewStoreExtension,
DatabaseStoreExtension,
DividerStoreExtension,
EdgelessTextStoreExtension,
EmbedStoreExtension,
FrameStoreExtension,
ImageStoreExtension,
LatexStoreExtension,
ListStoreExtension,
NoteStoreExtension,
ParagraphStoreExtension,
SurfaceRefStoreExtension,
TableStoreExtension,
// Inline
FootnoteStoreExtension,
LinkStoreExtension,
MigratingStoreExtension,
MigratingAffineStoreExtension, MigratingAffineStoreExtension,
]); ]);

View File

@@ -1,30 +1,11 @@
import { PeekViewService } from '@affine/core/modules/peek-view'; 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 { 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 { import {
type ViewExtensionContext, type ViewExtensionContext,
ViewExtensionManager, ViewExtensionManager,
ViewExtensionProvider, ViewExtensionProvider,
} from '@blocksuite/affine/ext-loader'; } from '@blocksuite/affine/ext-loader';
import { MigratingViewExtension } from '@blocksuite/affine/extensions/view'; import { getInternalViewExtensions } from '@blocksuite/affine/extensions/view';
import { FootnoteViewExtension } from '@blocksuite/affine/inlines/footnote/view';
import { LinkViewExtension } from '@blocksuite/affine/inlines/link/view';
import { ToolbarModuleExtension } from '@blocksuite/affine/shared/services'; import { ToolbarModuleExtension } from '@blocksuite/affine/shared/services';
import { BlockFlavourIdentifier } from '@blocksuite/affine/std'; import { BlockFlavourIdentifier } from '@blocksuite/affine/std';
import { FrameworkProvider } from '@toeverything/infra'; import { FrameworkProvider } from '@toeverything/infra';
@@ -147,29 +128,7 @@ class MigratingAffineViewExtension extends ViewExtensionProvider<
} }
const manager = new ViewExtensionManager([ const manager = new ViewExtensionManager([
MigratingViewExtension, ...getInternalViewExtensions(),
// Block
AttachmentViewExtension,
BookmarkViewExtension,
CalloutViewExtension,
CodeBlockViewExtension,
DataViewViewExtension,
DatabaseViewExtension,
DividerViewExtension,
EdgelessTextViewExtension,
EmbedViewExtension,
FrameViewExtension,
ImageViewExtension,
LatexViewExtension,
ListViewExtension,
NoteViewExtension,
ParagraphViewExtension,
SurfaceRefViewExtension,
TableViewExtension,
// Inline
FootnoteViewExtension,
LinkViewExtension,
MigratingAffineViewExtension, MigratingAffineViewExtension,
]); ]);

View File

@@ -652,6 +652,7 @@ export const PackageList = [
name: '@blocksuite/affine-inline-latex', name: '@blocksuite/affine-inline-latex',
workspaceDependencies: [ workspaceDependencies: [
'blocksuite/affine/components', 'blocksuite/affine/components',
'blocksuite/affine/ext-loader',
'blocksuite/affine/inlines/reference', 'blocksuite/affine/inlines/reference',
'blocksuite/affine/model', 'blocksuite/affine/model',
'blocksuite/affine/rich-text', 'blocksuite/affine/rich-text',
@@ -680,6 +681,7 @@ export const PackageList = [
name: '@blocksuite/affine-inline-mention', name: '@blocksuite/affine-inline-mention',
workspaceDependencies: [ workspaceDependencies: [
'blocksuite/affine/components', 'blocksuite/affine/components',
'blocksuite/affine/ext-loader',
'blocksuite/affine/model', 'blocksuite/affine/model',
'blocksuite/affine/shared', 'blocksuite/affine/shared',
'blocksuite/framework/global', 'blocksuite/framework/global',
@@ -710,6 +712,7 @@ export const PackageList = [
name: '@blocksuite/affine-inline-reference', name: '@blocksuite/affine-inline-reference',
workspaceDependencies: [ workspaceDependencies: [
'blocksuite/affine/components', 'blocksuite/affine/components',
'blocksuite/affine/ext-loader',
'blocksuite/affine/model', 'blocksuite/affine/model',
'blocksuite/affine/shared', 'blocksuite/affine/shared',
'blocksuite/framework/global', 'blocksuite/framework/global',

View File

@@ -3355,6 +3355,7 @@ __metadata:
resolution: "@blocksuite/affine-inline-latex@workspace:blocksuite/affine/inlines/latex" resolution: "@blocksuite/affine-inline-latex@workspace:blocksuite/affine/inlines/latex"
dependencies: dependencies:
"@blocksuite/affine-components": "workspace:*" "@blocksuite/affine-components": "workspace:*"
"@blocksuite/affine-ext-loader": "workspace:*"
"@blocksuite/affine-inline-reference": "workspace:*" "@blocksuite/affine-inline-reference": "workspace:*"
"@blocksuite/affine-model": "workspace:*" "@blocksuite/affine-model": "workspace:*"
"@blocksuite/affine-rich-text": "workspace:*" "@blocksuite/affine-rich-text": "workspace:*"
@@ -3418,6 +3419,7 @@ __metadata:
resolution: "@blocksuite/affine-inline-mention@workspace:blocksuite/affine/inlines/mention" resolution: "@blocksuite/affine-inline-mention@workspace:blocksuite/affine/inlines/mention"
dependencies: dependencies:
"@blocksuite/affine-components": "workspace:*" "@blocksuite/affine-components": "workspace:*"
"@blocksuite/affine-ext-loader": "workspace:*"
"@blocksuite/affine-model": "workspace:*" "@blocksuite/affine-model": "workspace:*"
"@blocksuite/affine-shared": "workspace:*" "@blocksuite/affine-shared": "workspace:*"
"@blocksuite/global": "workspace:*" "@blocksuite/global": "workspace:*"
@@ -3484,6 +3486,7 @@ __metadata:
resolution: "@blocksuite/affine-inline-reference@workspace:blocksuite/affine/inlines/reference" resolution: "@blocksuite/affine-inline-reference@workspace:blocksuite/affine/inlines/reference"
dependencies: dependencies:
"@blocksuite/affine-components": "workspace:*" "@blocksuite/affine-components": "workspace:*"
"@blocksuite/affine-ext-loader": "workspace:*"
"@blocksuite/affine-model": "workspace:*" "@blocksuite/affine-model": "workspace:*"
"@blocksuite/affine-shared": "workspace:*" "@blocksuite/affine-shared": "workspace:*"
"@blocksuite/global": "workspace:*" "@blocksuite/global": "workspace:*"