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
@@ -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;
}
@@ -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(
+6 -4
View File
@@ -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);
+5 -4
View File
@@ -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);
@@ -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();
}
@@ -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', () => {
@@ -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,
]);
@@ -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,
]);