From 9211fbf68c365e3457ede141a2e225008f2ef8f1 Mon Sep 17 00:00:00 2001 From: L-Sun Date: Wed, 19 Mar 2025 10:54:22 +0000 Subject: [PATCH] refactor(editor): move surface-ref toolbar to its block folder (#10938) --- .../affine/blocks/block-root/src/effects.ts | 5 ---- .../blocks/block-root/src/widgets/index.ts | 1 - .../blocks/block-surface-ref/package.json | 1 + .../blocks/block-surface-ref/src/effects.ts | 5 ++++ .../src/widgets}/config.ts | 29 +++++++++++++------ .../src/widgets}/context.ts | 0 .../src/widgets}/surface-ref-toolbar.ts | 0 .../src/widgets}/utils.ts | 0 yarn.lock | 1 + 9 files changed, 27 insertions(+), 15 deletions(-) rename blocksuite/affine/blocks/{block-root/src/widgets/surface-ref-toolbar => block-surface-ref/src/widgets}/config.ts (76%) rename blocksuite/affine/blocks/{block-root/src/widgets/surface-ref-toolbar => block-surface-ref/src/widgets}/context.ts (100%) rename blocksuite/affine/blocks/{block-root/src/widgets/surface-ref-toolbar => block-surface-ref/src/widgets}/surface-ref-toolbar.ts (100%) rename blocksuite/affine/blocks/{block-root/src/widgets/surface-ref-toolbar => block-surface-ref/src/widgets}/utils.ts (100%) diff --git a/blocksuite/affine/blocks/block-root/src/effects.ts b/blocksuite/affine/blocks/block-root/src/effects.ts index 8b7f6d9ba6..4b772efbae 100644 --- a/blocksuite/affine/blocks/block-root/src/effects.ts +++ b/blocksuite/affine/blocks/block-root/src/effects.ts @@ -101,10 +101,6 @@ import { AFFINE_PAGE_DRAGGING_AREA_WIDGET, AffinePageDraggingAreaWidget, } from './widgets/page-dragging-area/page-dragging-area.js'; -import { - AFFINE_SURFACE_REF_TOOLBAR, - AffineSurfaceRefToolbar, -} from './widgets/surface-ref-toolbar/surface-ref-toolbar.js'; import { AFFINE_VIEWPORT_OVERLAY_WIDGET, AffineViewportOverlayWidget, @@ -156,7 +152,6 @@ function registerWidgets() { AFFINE_EDGELESS_ZOOM_TOOLBAR_WIDGET, AffineEdgelessZoomToolbarWidget ); - customElements.define(AFFINE_SURFACE_REF_TOOLBAR, AffineSurfaceRefToolbar); } function registerEdgelessToolbarComponents() { diff --git a/blocksuite/affine/blocks/block-root/src/widgets/index.ts b/blocksuite/affine/blocks/block-root/src/widgets/index.ts index 3685632df6..606658f78c 100644 --- a/blocksuite/affine/blocks/block-root/src/widgets/index.ts +++ b/blocksuite/affine/blocks/block-root/src/widgets/index.ts @@ -21,6 +21,5 @@ export { export { AffineLinkedDocWidget } from './linked-doc/index.js'; export { AffineModalWidget } from './modal/modal.js'; export { AffinePageDraggingAreaWidget } from './page-dragging-area/page-dragging-area.js'; -export { AffineSurfaceRefToolbar } from './surface-ref-toolbar/surface-ref-toolbar.js'; export * from './viewport-overlay/viewport-overlay.js'; export { AffineFrameTitleWidget } from '@blocksuite/affine-widget-frame-title'; diff --git a/blocksuite/affine/blocks/block-surface-ref/package.json b/blocksuite/affine/blocks/block-surface-ref/package.json index 9e5c2a1907..bd9bffbf9c 100644 --- a/blocksuite/affine/blocks/block-surface-ref/package.json +++ b/blocksuite/affine/blocks/block-surface-ref/package.json @@ -21,6 +21,7 @@ "@blocksuite/icons": "^2.2.6", "@blocksuite/inline": "workspace:*", "@blocksuite/store": "workspace:*", + "@floating-ui/dom": "^1.6.13", "@lit/context": "^1.1.2", "@preact/signals-core": "^1.8.0", "@toeverything/theme": "^1.1.12", diff --git a/blocksuite/affine/blocks/block-surface-ref/src/effects.ts b/blocksuite/affine/blocks/block-surface-ref/src/effects.ts index 2982e4c54e..5b4de41f76 100644 --- a/blocksuite/affine/blocks/block-surface-ref/src/effects.ts +++ b/blocksuite/affine/blocks/block-surface-ref/src/effects.ts @@ -2,6 +2,10 @@ import { SurfaceRefGenericBlockPortal } from './portal/generic-block.js'; import { SurfaceRefNotePortal } from './portal/note.js'; import { SurfaceRefBlockComponent } from './surface-ref-block.js'; import { EdgelessSurfaceRefBlockComponent } from './surface-ref-block-edgeless.js'; +import { + AFFINE_SURFACE_REF_TOOLBAR, + AffineSurfaceRefToolbar, +} from './widgets/surface-ref-toolbar.js'; export function effects() { customElements.define( @@ -14,4 +18,5 @@ export function effects() { EdgelessSurfaceRefBlockComponent ); customElements.define('surface-ref-note-portal', SurfaceRefNotePortal); + customElements.define(AFFINE_SURFACE_REF_TOOLBAR, AffineSurfaceRefToolbar); } diff --git a/blocksuite/affine/blocks/block-root/src/widgets/surface-ref-toolbar/config.ts b/blocksuite/affine/blocks/block-surface-ref/src/widgets/config.ts similarity index 76% rename from blocksuite/affine/blocks/block-root/src/widgets/surface-ref-toolbar/config.ts rename to blocksuite/affine/blocks/block-surface-ref/src/widgets/config.ts index 5067bdaa03..3cd19762bd 100644 --- a/blocksuite/affine/blocks/block-root/src/widgets/surface-ref-toolbar/config.ts +++ b/blocksuite/affine/blocks/block-surface-ref/src/widgets/config.ts @@ -1,3 +1,4 @@ +import type { SurfaceBlockComponent } from '@blocksuite/affine-block-surface'; import { CopyIcon, DeleteIcon, @@ -6,8 +7,8 @@ import { import { toast } from '@blocksuite/affine-components/toast'; import type { MenuItemGroup } from '@blocksuite/affine-components/toolbar'; import { downloadBlob } from '@blocksuite/affine-shared/utils'; +import { GfxControllerIdentifier } from '@blocksuite/block-std/gfx'; -import type { EdgelessRootPreviewBlockComponent } from '../../edgeless/edgeless-root-preview-block.js'; import type { SurfaceRefToolbarContext } from './context.js'; import { edgelessToBlob, writeImageBlobToClipboard } from './utils.js'; @@ -28,10 +29,15 @@ export const BUILT_IN_GROUPS: MenuItemGroup[] = [ const referencedModel = ctx.blockComponent.referenceModel; const editor = ctx.blockComponent.previewEditor; - const edgelessRootElement = editor?.view.getBlock(ctx.doc.root.id); - const surfaceRenderer = ( - edgelessRootElement as EdgelessRootPreviewBlockComponent - )?.surface?.renderer; + const surfaceModel = editor?.std.get(GfxControllerIdentifier).surface; + if (!surfaceModel) { + ctx.close(); + return; + } + const surfaceBlock = editor?.std.view.getBlock( + surfaceModel.id + ) as SurfaceBlockComponent; + const surfaceRenderer = surfaceBlock.renderer; if (!surfaceRenderer) { ctx.close(); @@ -62,10 +68,15 @@ export const BUILT_IN_GROUPS: MenuItemGroup[] = [ const referencedModel = ctx.blockComponent.referenceModel; const editor = ctx.blockComponent.previewEditor; - const edgelessRootElement = editor?.view.getBlock(ctx.doc.root.id); - const surfaceRenderer = ( - edgelessRootElement as EdgelessRootPreviewBlockComponent - )?.surface?.renderer; + const surfaceModel = editor?.std.get(GfxControllerIdentifier).surface; + if (!surfaceModel) { + ctx.close(); + return; + } + const surfaceBlock = editor?.std.view.getBlock( + surfaceModel.id + ) as SurfaceBlockComponent; + const surfaceRenderer = surfaceBlock.renderer; if (!surfaceRenderer) { ctx.close(); diff --git a/blocksuite/affine/blocks/block-root/src/widgets/surface-ref-toolbar/context.ts b/blocksuite/affine/blocks/block-surface-ref/src/widgets/context.ts similarity index 100% rename from blocksuite/affine/blocks/block-root/src/widgets/surface-ref-toolbar/context.ts rename to blocksuite/affine/blocks/block-surface-ref/src/widgets/context.ts diff --git a/blocksuite/affine/blocks/block-root/src/widgets/surface-ref-toolbar/surface-ref-toolbar.ts b/blocksuite/affine/blocks/block-surface-ref/src/widgets/surface-ref-toolbar.ts similarity index 100% rename from blocksuite/affine/blocks/block-root/src/widgets/surface-ref-toolbar/surface-ref-toolbar.ts rename to blocksuite/affine/blocks/block-surface-ref/src/widgets/surface-ref-toolbar.ts diff --git a/blocksuite/affine/blocks/block-root/src/widgets/surface-ref-toolbar/utils.ts b/blocksuite/affine/blocks/block-surface-ref/src/widgets/utils.ts similarity index 100% rename from blocksuite/affine/blocks/block-root/src/widgets/surface-ref-toolbar/utils.ts rename to blocksuite/affine/blocks/block-surface-ref/src/widgets/utils.ts diff --git a/yarn.lock b/yarn.lock index 900abe7a59..52adb771a7 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2785,6 +2785,7 @@ __metadata: "@blocksuite/icons": "npm:^2.2.6" "@blocksuite/inline": "workspace:*" "@blocksuite/store": "workspace:*" + "@floating-ui/dom": "npm:^1.6.13" "@lit/context": "npm:^1.1.2" "@preact/signals-core": "npm:^1.8.0" "@toeverything/theme": "npm:^1.1.12"