From 638f0b466f5cade1940fcf9544a6e43460007815 Mon Sep 17 00:00:00 2001 From: Saul-Mirone Date: Tue, 29 Apr 2025 11:21:57 +0000 Subject: [PATCH] feat(editor): fragment extensions (#12066) Closes: BS-3382 Closes: BS-3381 Closes: BS-3380 ## Summary by CodeRabbit - **New Features** - Introduced new view extensions for document title, frame panel, and outline fragments, enhancing modularity and extensibility. - **Refactor** - Updated export structure for fragments to support directory-based modules and added dedicated view module exports. - Replaced a centralized view extension with individual fragment-based view extensions for improved clarity. - **Chores** - Updated dependencies and TypeScript project references to ensure compatibility and maintainability. --- blocksuite/affine/all/package.json | 9 ++++++--- .../affine/all/src/extensions/effects.ts | 9 --------- .../all/src/extensions/migrating-view.ts | 19 ------------------- blocksuite/affine/all/src/extensions/view.ts | 11 ++++++++--- .../{doc-title.ts => doc-title/index.ts} | 0 .../all/src/fragments/doc-title/view.ts | 1 + .../{frame-panel.ts => frame-panel/index.ts} | 0 .../all/src/fragments/frame-panel/view.ts | 1 + .../{outline.ts => outline/index.ts} | 0 .../affine/all/src/fragments/outline/view.ts | 1 + .../affine/fragments/doc-title/package.json | 4 +++- .../affine/fragments/doc-title/src/view.ts | 12 ++++++++++++ .../affine/fragments/doc-title/tsconfig.json | 1 + .../affine/fragments/frame-panel/package.json | 3 ++- .../affine/fragments/frame-panel/src/view.ts | 12 ++++++++++++ .../affine/fragments/outline/package.json | 4 +++- .../affine/fragments/outline/src/view.ts | 12 ++++++++++++ .../affine/fragments/outline/tsconfig.json | 1 + tools/utils/src/workspace.gen.ts | 2 ++ yarn.lock | 2 ++ 20 files changed, 67 insertions(+), 37 deletions(-) delete mode 100644 blocksuite/affine/all/src/extensions/effects.ts delete mode 100644 blocksuite/affine/all/src/extensions/migrating-view.ts rename blocksuite/affine/all/src/fragments/{doc-title.ts => doc-title/index.ts} (100%) create mode 100644 blocksuite/affine/all/src/fragments/doc-title/view.ts rename blocksuite/affine/all/src/fragments/{frame-panel.ts => frame-panel/index.ts} (100%) create mode 100644 blocksuite/affine/all/src/fragments/frame-panel/view.ts rename blocksuite/affine/all/src/fragments/{outline.ts => outline/index.ts} (100%) create mode 100644 blocksuite/affine/all/src/fragments/outline/view.ts create mode 100644 blocksuite/affine/fragments/doc-title/src/view.ts create mode 100644 blocksuite/affine/fragments/frame-panel/src/view.ts create mode 100644 blocksuite/affine/fragments/outline/src/view.ts diff --git a/blocksuite/affine/all/package.json b/blocksuite/affine/all/package.json index 1bc83f0eff..e911755e9c 100644 --- a/blocksuite/affine/all/package.json +++ b/blocksuite/affine/all/package.json @@ -194,9 +194,12 @@ "./widgets/viewport-overlay/view": "./src/widgets/viewport-overlay/view.ts", "./widgets/page-dragging-area": "./src/widgets/page-dragging-area/index.ts", "./widgets/page-dragging-area/view": "./src/widgets/page-dragging-area/view.ts", - "./fragments/doc-title": "./src/fragments/doc-title.ts", - "./fragments/frame-panel": "./src/fragments/frame-panel.ts", - "./fragments/outline": "./src/fragments/outline.ts", + "./fragments/doc-title": "./src/fragments/doc-title/index.ts", + "./fragments/doc-title/view": "./src/fragments/doc-title/view.ts", + "./fragments/frame-panel": "./src/fragments/frame-panel/index.ts", + "./fragments/frame-panel/view": "./src/fragments/frame-panel/view.ts", + "./fragments/outline": "./src/fragments/outline/index.ts", + "./fragments/outline/view": "./src/fragments/outline/view.ts", "./gfx/text": "./src/gfx/text/index.ts", "./gfx/text/store": "./src/gfx/text/store.ts", "./gfx/text/view": "./src/gfx/text/view.ts", diff --git a/blocksuite/affine/all/src/extensions/effects.ts b/blocksuite/affine/all/src/extensions/effects.ts deleted file mode 100644 index 95bca746a6..0000000000 --- a/blocksuite/affine/all/src/extensions/effects.ts +++ /dev/null @@ -1,9 +0,0 @@ -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'; - -export function effects() { - fragmentDocTitleEffects(); - fragmentFramePanelEffects(); - fragmentOutlineEffects(); -} diff --git a/blocksuite/affine/all/src/extensions/migrating-view.ts b/blocksuite/affine/all/src/extensions/migrating-view.ts deleted file mode 100644 index 909a1c61f3..0000000000 --- a/blocksuite/affine/all/src/extensions/migrating-view.ts +++ /dev/null @@ -1,19 +0,0 @@ -import { - type ViewExtensionContext, - ViewExtensionProvider, -} from '@blocksuite/affine-ext-loader'; - -import { effects } from './effects'; - -export class MigratingViewExtension extends ViewExtensionProvider { - override name = 'migrating'; - - override effect() { - super.effect(); - effects(); - } - - override setup(context: ViewExtensionContext) { - super.setup(context); - } -} diff --git a/blocksuite/affine/all/src/extensions/view.ts b/blocksuite/affine/all/src/extensions/view.ts index 9c444be443..54dfa652b8 100644 --- a/blocksuite/affine/all/src/extensions/view.ts +++ b/blocksuite/affine/all/src/extensions/view.ts @@ -18,6 +18,9 @@ import { SurfaceViewExtension } from '@blocksuite/affine-block-surface/view'; import { SurfaceRefViewExtension } from '@blocksuite/affine-block-surface-ref/view'; import { TableViewExtension } from '@blocksuite/affine-block-table/view'; import { FoundationViewExtension } from '@blocksuite/affine-foundation/view'; +import { DocTitleViewExtension } from '@blocksuite/affine-fragment-doc-title/view'; +import { FramePanelViewExtension } from '@blocksuite/affine-fragment-frame-panel/view'; +import { OutlineViewExtension } from '@blocksuite/affine-fragment-outline/view'; import { BrushViewExtension } from '@blocksuite/affine-gfx-brush/view'; import { ConnectorViewExtension } from '@blocksuite/affine-gfx-connector/view'; import { GroupViewExtension } from '@blocksuite/affine-gfx-group/view'; @@ -48,8 +51,6 @@ import { SlashMenuViewExtension } from '@blocksuite/affine-widget-slash-menu/vie import { ToolbarViewExtension } from '@blocksuite/affine-widget-toolbar/view'; import { ViewportOverlayViewExtension } from '@blocksuite/affine-widget-viewport-overlay/view'; -import { MigratingViewExtension } from './migrating-view'; - export function getInternalViewExtensions() { return [ FoundationViewExtension, @@ -99,7 +100,6 @@ export function getInternalViewExtensions() { DragHandleViewExtension, EdgelessAutoConnectViewExtension, EdgelessToolbarViewExtension, - MigratingViewExtension, FrameTitleViewExtension, KeyboardToolbarViewExtension, LinkedDocViewExtension, @@ -110,5 +110,10 @@ export function getInternalViewExtensions() { ViewportOverlayViewExtension, EdgelessZoomToolbarViewExtension, PageDraggingAreaViewExtension, + + // Fragment + DocTitleViewExtension, + FramePanelViewExtension, + OutlineViewExtension, ]; } diff --git a/blocksuite/affine/all/src/fragments/doc-title.ts b/blocksuite/affine/all/src/fragments/doc-title/index.ts similarity index 100% rename from blocksuite/affine/all/src/fragments/doc-title.ts rename to blocksuite/affine/all/src/fragments/doc-title/index.ts diff --git a/blocksuite/affine/all/src/fragments/doc-title/view.ts b/blocksuite/affine/all/src/fragments/doc-title/view.ts new file mode 100644 index 0000000000..8d78fc7080 --- /dev/null +++ b/blocksuite/affine/all/src/fragments/doc-title/view.ts @@ -0,0 +1 @@ +export * from '@blocksuite/affine-fragment-doc-title/view'; diff --git a/blocksuite/affine/all/src/fragments/frame-panel.ts b/blocksuite/affine/all/src/fragments/frame-panel/index.ts similarity index 100% rename from blocksuite/affine/all/src/fragments/frame-panel.ts rename to blocksuite/affine/all/src/fragments/frame-panel/index.ts diff --git a/blocksuite/affine/all/src/fragments/frame-panel/view.ts b/blocksuite/affine/all/src/fragments/frame-panel/view.ts new file mode 100644 index 0000000000..2d603691d5 --- /dev/null +++ b/blocksuite/affine/all/src/fragments/frame-panel/view.ts @@ -0,0 +1 @@ +export * from '@blocksuite/affine-fragment-frame-panel/view'; diff --git a/blocksuite/affine/all/src/fragments/outline.ts b/blocksuite/affine/all/src/fragments/outline/index.ts similarity index 100% rename from blocksuite/affine/all/src/fragments/outline.ts rename to blocksuite/affine/all/src/fragments/outline/index.ts diff --git a/blocksuite/affine/all/src/fragments/outline/view.ts b/blocksuite/affine/all/src/fragments/outline/view.ts new file mode 100644 index 0000000000..09936a731d --- /dev/null +++ b/blocksuite/affine/all/src/fragments/outline/view.ts @@ -0,0 +1 @@ +export * from '@blocksuite/affine-fragment-outline/view'; diff --git a/blocksuite/affine/fragments/doc-title/package.json b/blocksuite/affine/fragments/doc-title/package.json index c4d2f03a15..af2cc5a702 100644 --- a/blocksuite/affine/fragments/doc-title/package.json +++ b/blocksuite/affine/fragments/doc-title/package.json @@ -13,6 +13,7 @@ "@blocksuite/affine-block-frame": "workspace:*", "@blocksuite/affine-block-surface": "workspace:*", "@blocksuite/affine-components": "workspace:*", + "@blocksuite/affine-ext-loader": "workspace:*", "@blocksuite/affine-model": "workspace:*", "@blocksuite/affine-rich-text": "workspace:*", "@blocksuite/affine-shared": "workspace:*", @@ -31,7 +32,8 @@ }, "exports": { ".": "./src/index.ts", - "./effects": "./src/effects.ts" + "./effects": "./src/effects.ts", + "./view": "./src/view.ts" }, "files": [ "src", diff --git a/blocksuite/affine/fragments/doc-title/src/view.ts b/blocksuite/affine/fragments/doc-title/src/view.ts new file mode 100644 index 0000000000..594848dcd0 --- /dev/null +++ b/blocksuite/affine/fragments/doc-title/src/view.ts @@ -0,0 +1,12 @@ +import { ViewExtensionProvider } from '@blocksuite/affine-ext-loader'; + +import { effects } from './effects'; + +export class DocTitleViewExtension extends ViewExtensionProvider { + override name = 'affine-doc-title-fragment'; + + override effect() { + super.effect(); + effects(); + } +} diff --git a/blocksuite/affine/fragments/doc-title/tsconfig.json b/blocksuite/affine/fragments/doc-title/tsconfig.json index 3116812f2d..b82c1a4135 100644 --- a/blocksuite/affine/fragments/doc-title/tsconfig.json +++ b/blocksuite/affine/fragments/doc-title/tsconfig.json @@ -10,6 +10,7 @@ { "path": "../../blocks/frame" }, { "path": "../../blocks/surface" }, { "path": "../../components" }, + { "path": "../../ext-loader" }, { "path": "../../model" }, { "path": "../../rich-text" }, { "path": "../../shared" }, diff --git a/blocksuite/affine/fragments/frame-panel/package.json b/blocksuite/affine/fragments/frame-panel/package.json index 051485adc0..67d7b4ddc4 100644 --- a/blocksuite/affine/fragments/frame-panel/package.json +++ b/blocksuite/affine/fragments/frame-panel/package.json @@ -34,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/fragments/frame-panel/src/view.ts b/blocksuite/affine/fragments/frame-panel/src/view.ts new file mode 100644 index 0000000000..264186be99 --- /dev/null +++ b/blocksuite/affine/fragments/frame-panel/src/view.ts @@ -0,0 +1,12 @@ +import { ViewExtensionProvider } from '@blocksuite/affine-ext-loader'; + +import { effects } from './effects'; + +export class FramePanelViewExtension extends ViewExtensionProvider { + override name = 'affine-frame-panel-fragment'; + + override effect() { + super.effect(); + effects(); + } +} diff --git a/blocksuite/affine/fragments/outline/package.json b/blocksuite/affine/fragments/outline/package.json index 1c8da9f91b..3ded34e7ea 100644 --- a/blocksuite/affine/fragments/outline/package.json +++ b/blocksuite/affine/fragments/outline/package.json @@ -12,6 +12,7 @@ "dependencies": { "@blocksuite/affine-block-note": "workspace:*", "@blocksuite/affine-components": "workspace:*", + "@blocksuite/affine-ext-loader": "workspace:*", "@blocksuite/affine-fragment-doc-title": "workspace:*", "@blocksuite/affine-model": "workspace:*", "@blocksuite/affine-rich-text": "workspace:*", @@ -32,7 +33,8 @@ }, "exports": { ".": "./src/index.ts", - "./effects": "./src/effects.ts" + "./effects": "./src/effects.ts", + "./view": "./src/view.ts" }, "files": [ "src", diff --git a/blocksuite/affine/fragments/outline/src/view.ts b/blocksuite/affine/fragments/outline/src/view.ts new file mode 100644 index 0000000000..1eb3ef420e --- /dev/null +++ b/blocksuite/affine/fragments/outline/src/view.ts @@ -0,0 +1,12 @@ +import { ViewExtensionProvider } from '@blocksuite/affine-ext-loader'; + +import { effects } from './effects'; + +export class OutlineViewExtension extends ViewExtensionProvider { + override name = 'affine-outline-fragment'; + + override effect() { + super.effect(); + effects(); + } +} diff --git a/blocksuite/affine/fragments/outline/tsconfig.json b/blocksuite/affine/fragments/outline/tsconfig.json index e2ecab3748..8efff0db6d 100644 --- a/blocksuite/affine/fragments/outline/tsconfig.json +++ b/blocksuite/affine/fragments/outline/tsconfig.json @@ -9,6 +9,7 @@ "references": [ { "path": "../../blocks/note" }, { "path": "../../components" }, + { "path": "../../ext-loader" }, { "path": "../doc-title" }, { "path": "../../model" }, { "path": "../../rich-text" }, diff --git a/tools/utils/src/workspace.gen.ts b/tools/utils/src/workspace.gen.ts index 28d4eb8f7a..d505de76e5 100644 --- a/tools/utils/src/workspace.gen.ts +++ b/tools/utils/src/workspace.gen.ts @@ -456,6 +456,7 @@ export const PackageList = [ 'blocksuite/affine/blocks/frame', 'blocksuite/affine/blocks/surface', 'blocksuite/affine/components', + 'blocksuite/affine/ext-loader', 'blocksuite/affine/model', 'blocksuite/affine/rich-text', 'blocksuite/affine/shared', @@ -486,6 +487,7 @@ export const PackageList = [ workspaceDependencies: [ 'blocksuite/affine/blocks/note', 'blocksuite/affine/components', + 'blocksuite/affine/ext-loader', 'blocksuite/affine/fragments/doc-title', 'blocksuite/affine/model', 'blocksuite/affine/rich-text', diff --git a/yarn.lock b/yarn.lock index 3e5aa460c3..91349d1d4d 100644 --- a/yarn.lock +++ b/yarn.lock @@ -3045,6 +3045,7 @@ __metadata: "@blocksuite/affine-block-frame": "workspace:*" "@blocksuite/affine-block-surface": "workspace:*" "@blocksuite/affine-components": "workspace:*" + "@blocksuite/affine-ext-loader": "workspace:*" "@blocksuite/affine-model": "workspace:*" "@blocksuite/affine-rich-text": "workspace:*" "@blocksuite/affine-shared": "workspace:*" @@ -3097,6 +3098,7 @@ __metadata: dependencies: "@blocksuite/affine-block-note": "workspace:*" "@blocksuite/affine-components": "workspace:*" + "@blocksuite/affine-ext-loader": "workspace:*" "@blocksuite/affine-fragment-doc-title": "workspace:*" "@blocksuite/affine-model": "workspace:*" "@blocksuite/affine-rich-text": "workspace:*"