feat(editor): inline footnote extension (#11908)

Closes: BS-3219
This commit is contained in:
Saul-Mirone
2025-04-23 01:40:49 +00:00
parent 6fbbfc80e5
commit 2510e7a9a4
20 changed files with 73 additions and 10 deletions
+3 -1
View File
@@ -146,7 +146,9 @@
"./inlines/link": "./src/inlines/link.ts",
"./inlines/reference": "./src/inlines/reference.ts",
"./inlines/preset": "./src/inlines/preset.ts",
"./inlines/footnote": "./src/inlines/footnote.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",
"./widgets/drag-handle": "./src/widgets/drag-handle.ts",
@@ -16,6 +16,7 @@ import { ParagraphStoreExtension } from '@blocksuite/affine-block-paragraph/stor
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 { MigratingStoreExtension } from '../../extensions/store';
@@ -38,6 +39,8 @@ const manager = new StoreExtensionManager([
SurfaceRefStoreExtension,
TableStoreExtension,
FootnoteStoreExtension,
MigratingStoreExtension,
]);
@@ -51,6 +51,7 @@ import {
textToMarkdownAdapterMatcher,
textToPlainTextAdapterMatcher,
} from '@blocksuite/affine-gfx-text';
import { FootNoteInlineSpecExtension } from '@blocksuite/affine-inline-footnote';
import { inlinePresetExtensions } from '@blocksuite/affine-inline-preset';
import {
DefaultOpenDocExtension,
@@ -79,6 +80,7 @@ const elementToMarkdownAdapterMatchers = [
];
export const CommonBlockSpecs: ExtensionType[] = [
FootNoteInlineSpecExtension,
inlinePresetExtensions,
DocDisplayMetaService,
EditPropsStore,
@@ -29,7 +29,6 @@ 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 inlineFootnoteEffects } from '@blocksuite/affine-inline-footnote/effects';
import { effects as inlineLatexEffects } from '@blocksuite/affine-inline-latex/effects';
import { effects as inlineLinkEffects } from '@blocksuite/affine-inline-link/effects';
import { effects as inlineMentionEffects } from '@blocksuite/affine-inline-mention';
@@ -55,7 +54,6 @@ export function effects() {
inlineReferenceEffects();
inlinePresetEffects();
inlineLinkEffects();
inlineFootnoteEffects();
inlineLatexEffects();
inlineMentionEffects();
@@ -0,0 +1 @@
export * from '@blocksuite/affine-inline-footnote/store';
@@ -0,0 +1 @@
export * from '@blocksuite/affine-inline-footnote/view';
@@ -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-shared": "workspace:*",
@@ -34,7 +35,9 @@
},
"exports": {
".": "./src/index.ts",
"./effects": "./src/effects.ts"
"./effects": "./src/effects.ts",
"./view": "./src/view.ts",
"./store": "./src/store.ts"
},
"files": [
"src",
@@ -0,0 +1,19 @@
import {
type StoreExtensionContext,
StoreExtensionProvider,
} from '@blocksuite/affine-ext-loader';
import {
footnoteReferenceDeltaToMarkdownAdapterMatcher,
markdownFootnoteReferenceToDeltaMatcher,
} from './adapters';
export class FootnoteStoreExtension extends StoreExtensionProvider {
override name = 'affine-footnote-inline';
override setup(context: StoreExtensionContext) {
super.setup(context);
context.register(markdownFootnoteReferenceToDeltaMatcher);
context.register(footnoteReferenceDeltaToMarkdownAdapterMatcher);
}
}
@@ -0,0 +1,21 @@
import {
type ViewExtensionContext,
ViewExtensionProvider,
} from '@blocksuite/affine-ext-loader';
import { effects } from './effects';
import { FootNoteInlineSpecExtension } from './inline-spec';
export class FootnoteViewExtension extends ViewExtensionProvider {
override name = 'affine-footnote-inline';
override effect(): void {
super.effect();
effects();
}
override setup(context: ViewExtensionContext) {
super.setup(context);
context.register(FootNoteInlineSpecExtension);
}
}
@@ -8,6 +8,7 @@
"include": ["./src"],
"references": [
{ "path": "../../components" },
{ "path": "../../ext-loader" },
{ "path": "../reference" },
{ "path": "../../model" },
{ "path": "../../shared" },
@@ -1,4 +1,3 @@
import { footnoteReferenceDeltaToMarkdownAdapterMatcher } from '@blocksuite/affine-inline-footnote';
import { latexDeltaToMarkdownAdapterMatcher } from '@blocksuite/affine-inline-latex';
import { linkDeltaToMarkdownAdapterMatcher } from '@blocksuite/affine-inline-link';
import { referenceDeltaToMarkdownAdapterMatcher } from '@blocksuite/affine-inline-reference';
@@ -61,5 +60,4 @@ export const InlineDeltaToMarkdownAdapterExtensions = [
italicDeltaToMarkdownAdapterMatcher,
strikeDeltaToMarkdownAdapterMatcher,
latexDeltaToMarkdownAdapterMatcher,
footnoteReferenceDeltaToMarkdownAdapterMatcher,
];
@@ -1,4 +1,3 @@
import { markdownFootnoteReferenceToDeltaMatcher } from '@blocksuite/affine-inline-footnote';
import { markdownInlineMathToDeltaMatcher } from '@blocksuite/affine-inline-latex';
import { markdownLinkToDeltaMatcher } from '@blocksuite/affine-inline-link';
import { MarkdownASTToDeltaExtension } from '@blocksuite/affine-shared/adapters';
@@ -99,6 +98,5 @@ export const MarkdownInlineToDeltaAdapterExtensions = [
markdownLinkToDeltaMatcher,
markdownInlineMathToDeltaMatcher,
markdownListToDeltaMatcher,
markdownFootnoteReferenceToDeltaMatcher,
markdownHtmlToDeltaMatcher,
];
@@ -1,4 +1,3 @@
import { inlineFootnoteExtensions } from '@blocksuite/affine-inline-footnote';
import { inlineLatexExtensions } from '@blocksuite/affine-inline-latex';
import { inlineLinkExtensions } from '@blocksuite/affine-inline-link';
import { inlineMentionExtensions } from '@blocksuite/affine-inline-mention';
@@ -109,6 +108,5 @@ export const InlineSpecExtensions: ExtensionType[] = [
...inlineLinkExtensions,
...inlineReferenceExtensions,
...inlineLatexExtensions,
...inlineFootnoteExtensions,
...inlineMentionExtensions,
];
+3
View File
@@ -17,6 +17,7 @@ import { SurfaceRefStoreExtension } from '@blocksuite/affine/blocks/surface-ref/
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';
const manager = new StoreExtensionManager([
AttachmentStoreExtension,
@@ -37,6 +38,8 @@ const manager = new StoreExtensionManager([
SurfaceRefStoreExtension,
TableStoreExtension,
FootnoteStoreExtension,
MigratingStoreExtension,
]);
+5
View File
@@ -17,11 +17,13 @@ import { SurfaceRefViewExtension } from '@blocksuite/affine/blocks/surface-ref/v
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';
export function getTestViewManager() {
const manager = new ViewExtensionManager([
MigratingViewExtension,
// Block
AttachmentViewExtension,
BookmarkViewExtension,
CalloutViewExtension,
@@ -39,6 +41,9 @@ export function getTestViewManager() {
ParagraphViewExtension,
SurfaceRefViewExtension,
TableViewExtension,
// Inline
FootnoteViewExtension,
]);
return manager;
}
@@ -21,6 +21,7 @@ import {
StoreExtensionProvider,
} from '@blocksuite/affine/ext-loader';
import { MigratingStoreExtension } from '@blocksuite/affine/extensions/store';
import { FootnoteStoreExtension } from '@blocksuite/affine/inlines/footnote/store';
import { AIChatBlockSchemaExtension } from '../ai/blocks/ai-chat-block/model';
@@ -34,6 +35,7 @@ class MigratingAffineStoreExtension extends StoreExtensionProvider {
}
const manager = new StoreExtensionManager([
// Block
AttachmentStoreExtension,
BookmarkStoreExtension,
CalloutStoreExtension,
@@ -51,6 +53,8 @@ const manager = new StoreExtensionManager([
ParagraphStoreExtension,
SurfaceRefStoreExtension,
TableStoreExtension,
// Inline
FootnoteStoreExtension,
MigratingStoreExtension,
MigratingAffineStoreExtension,
@@ -23,6 +23,7 @@ import {
ViewExtensionProvider,
} from '@blocksuite/affine/ext-loader';
import { MigratingViewExtension } from '@blocksuite/affine/extensions/view';
import { FootnoteViewExtension } from '@blocksuite/affine/inlines/footnote/view';
import { ToolbarModuleExtension } from '@blocksuite/affine/shared/services';
import { BlockFlavourIdentifier } from '@blocksuite/affine/std';
import { FrameworkProvider } from '@toeverything/infra';
@@ -147,6 +148,7 @@ class MigratingAffineViewExtension extends ViewExtensionProvider<
const manager = new ViewExtensionManager([
MigratingViewExtension,
// Block
AttachmentViewExtension,
BookmarkViewExtension,
CalloutViewExtension,
@@ -164,6 +166,8 @@ const manager = new ViewExtensionManager([
ParagraphViewExtension,
SurfaceRefViewExtension,
TableViewExtension,
// Inline
FootnoteViewExtension,
MigratingAffineViewExtension,
]);
+1
View File
@@ -638,6 +638,7 @@ export const PackageList = [
name: '@blocksuite/affine-inline-footnote',
workspaceDependencies: [
'blocksuite/affine/components',
'blocksuite/affine/ext-loader',
'blocksuite/affine/inlines/reference',
'blocksuite/affine/model',
'blocksuite/affine/shared',
+1
View File
@@ -3325,6 +3325,7 @@ __metadata:
resolution: "@blocksuite/affine-inline-footnote@workspace:blocksuite/affine/inlines/footnote"
dependencies:
"@blocksuite/affine-components": "workspace:*"
"@blocksuite/affine-ext-loader": "workspace:*"
"@blocksuite/affine-inline-reference": "workspace:*"
"@blocksuite/affine-model": "workspace:*"
"@blocksuite/affine-shared": "workspace:*"