From b8df65a2b035320422681e9164022f712a08571a Mon Sep 17 00:00:00 2001 From: Saul-Mirone Date: Mon, 24 Mar 2025 05:19:30 +0000 Subject: [PATCH] refactor(editor): move mindmap transform to its package (#11115) --- .../rects/edgeless-selected-rect.ts | 2 +- .../src/edgeless/edgeless-builtin-spec.ts | 12 ++++++--- .../src/edgeless/edgeless-keyboard.ts | 10 +++---- .../src/edgeless/edgeless-root-block.ts | 2 +- .../block-root/src/edgeless/utils/query.ts | 6 ----- .../element-transform/connector-filter.ts | 0 .../connector/src/element-transform/index.ts | 1 + blocksuite/affine/gfx/connector/src/index.ts | 1 + .../src/element-transform}/drag-utils.ts | 6 ++--- .../mindmap/src/element-transform/index.ts | 1 + .../src}/element-transform/mind-map-drag.ts | 26 +++++++++---------- blocksuite/affine/gfx/mindmap/src/index.ts | 2 ++ .../mindmap/src/utils/index.ts} | 10 ++++++- 13 files changed, 43 insertions(+), 36 deletions(-) rename blocksuite/affine/{blocks/block-root/src/edgeless => gfx/connector/src}/element-transform/connector-filter.ts (100%) create mode 100644 blocksuite/affine/gfx/connector/src/element-transform/index.ts rename blocksuite/affine/{blocks/block-root/src/edgeless/element-transform/utils => gfx/mindmap/src/element-transform}/drag-utils.ts (98%) create mode 100644 blocksuite/affine/gfx/mindmap/src/element-transform/index.ts rename blocksuite/affine/{blocks/block-root/src/edgeless => gfx/mindmap/src}/element-transform/mind-map-drag.ts (97%) rename blocksuite/affine/{blocks/block-root/src/edgeless/utils/mindmap.ts => gfx/mindmap/src/utils/index.ts} (86%) diff --git a/blocksuite/affine/blocks/block-root/src/edgeless/components/rects/edgeless-selected-rect.ts b/blocksuite/affine/blocks/block-root/src/edgeless/components/rects/edgeless-selected-rect.ts index 1d6407673..d98d89d2c 100644 --- a/blocksuite/affine/blocks/block-root/src/edgeless/components/rects/edgeless-selected-rect.ts +++ b/blocksuite/affine/blocks/block-root/src/edgeless/components/rects/edgeless-selected-rect.ts @@ -18,6 +18,7 @@ import { OverlayIdentifier, TextUtils, } from '@blocksuite/affine-block-surface'; +import { isMindmapNode } from '@blocksuite/affine-gfx-mindmap'; import { type BookmarkBlockModel, ConnectorElementModel, @@ -85,7 +86,6 @@ import { isEmbedSyncedDocBlock, isEmbedYoutubeBlock, isImageBlock, - isMindmapNode, } from '../../utils/query.js'; import { HandleDirection, diff --git a/blocksuite/affine/blocks/block-root/src/edgeless/edgeless-builtin-spec.ts b/blocksuite/affine/blocks/block-root/src/edgeless/edgeless-builtin-spec.ts index 83a87ac12..de2be600c 100644 --- a/blocksuite/affine/blocks/block-root/src/edgeless/edgeless-builtin-spec.ts +++ b/blocksuite/affine/blocks/block-root/src/edgeless/edgeless-builtin-spec.ts @@ -4,8 +4,14 @@ import { PresentTool, } from '@blocksuite/affine-block-frame'; import { ConnectionOverlay } from '@blocksuite/affine-block-surface'; -import { ConnectorTool } from '@blocksuite/affine-gfx-connector'; -import { MindMapIndicatorOverlay } from '@blocksuite/affine-gfx-mindmap'; +import { + ConnectorFilter, + ConnectorTool, +} from '@blocksuite/affine-gfx-connector'; +import { + MindMapDragExtension, + MindMapIndicatorOverlay, +} from '@blocksuite/affine-gfx-mindmap'; import { NoteTool } from '@blocksuite/affine-gfx-note'; import { ShapeTool } from '@blocksuite/affine-gfx-shape'; import { TextTool } from '@blocksuite/affine-gfx-text'; @@ -17,8 +23,6 @@ import type { ExtensionType } from '@blocksuite/store'; import { EdgelessElementToolbarExtension } from './configs/toolbar'; import { EdgelessRootBlockSpec } from './edgeless-root-spec.js'; -import { ConnectorFilter } from './element-transform/connector-filter.js'; -import { MindMapDragExtension } from './element-transform/mind-map-drag.js'; import { SnapExtension } from './element-transform/snap-manager.js'; import { BrushTool } from './gfx-tool/brush-tool.js'; import { DefaultTool } from './gfx-tool/default-tool.js'; diff --git a/blocksuite/affine/blocks/block-root/src/edgeless/edgeless-keyboard.ts b/blocksuite/affine/blocks/block-root/src/edgeless/edgeless-keyboard.ts index e352988b1..102a220dd 100644 --- a/blocksuite/affine/blocks/block-root/src/edgeless/edgeless-keyboard.ts +++ b/blocksuite/affine/blocks/block-root/src/edgeless/edgeless-keyboard.ts @@ -3,6 +3,11 @@ import { EdgelessTextBlockComponent } from '@blocksuite/affine-block-edgeless-te import { isNoteBlock } from '@blocksuite/affine-block-surface'; import { toast } from '@blocksuite/affine-components/toast'; import { mountConnectorLabelEditor } from '@blocksuite/affine-gfx-connector'; +import { + getNearestTranslation, + isElementOutsideViewport, + isSingleMindMapNode, +} from '@blocksuite/affine-gfx-mindmap'; import { mountShapeTextEditor, ShapeTool } from '@blocksuite/affine-gfx-shape'; import { ConnectorElementModel, @@ -43,11 +48,6 @@ import { } from './utils/consts.js'; import { deleteElements } from './utils/crud.js'; import { getNextShapeType } from './utils/hotkey-utils.js'; -import { - getNearestTranslation, - isElementOutsideViewport, - isSingleMindMapNode, -} from './utils/mindmap.js'; import { isCanvasElement } from './utils/query.js'; export class EdgelessPageKeyboardManager extends PageKeyboardManager { diff --git a/blocksuite/affine/blocks/block-root/src/edgeless/edgeless-root-block.ts b/blocksuite/affine/blocks/block-root/src/edgeless/edgeless-root-block.ts index 2dd4b4815..6731c4441 100644 --- a/blocksuite/affine/blocks/block-root/src/edgeless/edgeless-root-block.ts +++ b/blocksuite/affine/blocks/block-root/src/edgeless/edgeless-root-block.ts @@ -7,6 +7,7 @@ import { getBgGridGap, normalizeWheelDeltaY, } from '@blocksuite/affine-block-surface'; +import { isSingleMindMapNode } from '@blocksuite/affine-gfx-mindmap'; import { mountShapeTextEditor } from '@blocksuite/affine-gfx-shape'; import { NoteBlockModel, @@ -51,7 +52,6 @@ import { EdgelessClipboardController } from './clipboard/clipboard.js'; import type { EdgelessSelectedRectWidget } from './components/rects/edgeless-selected-rect.js'; import { EdgelessPageKeyboardManager } from './edgeless-keyboard.js'; import type { EdgelessRootService } from './edgeless-root-service.js'; -import { isSingleMindMapNode } from './utils/mindmap.js'; import { isCanvasElement } from './utils/query.js'; export class EdgelessRootBlockComponent extends BlockComponent< diff --git a/blocksuite/affine/blocks/block-root/src/edgeless/utils/query.ts b/blocksuite/affine/blocks/block-root/src/edgeless/utils/query.ts index 346c6c2d5..cd09176eb 100644 --- a/blocksuite/affine/blocks/block-root/src/edgeless/utils/query.ts +++ b/blocksuite/affine/blocks/block-root/src/edgeless/utils/query.ts @@ -14,7 +14,6 @@ import { type EmbedSyncedDocModel, type EmbedYoutubeModel, type ImageBlockModel, - MindmapElementModel, ShapeElementModel, TextElementModel, } from '@blocksuite/affine-model'; @@ -23,7 +22,6 @@ import { isTopLevelBlock, } from '@blocksuite/affine-shared/utils'; import type { - GfxBlockElementModel, GfxModel, GfxPrimitiveElementModel, GfxToolsFullOptionValue, @@ -33,10 +31,6 @@ import type { PointLocation } from '@blocksuite/global/gfx'; import { Bound } from '@blocksuite/global/gfx'; import type { BlockModel } from '@blocksuite/store'; -export function isMindmapNode(element: GfxBlockElementModel | GfxModel | null) { - return element?.group instanceof MindmapElementModel; -} - export function isEdgelessTextBlock( element: BlockModel | GfxModel | null ): element is EdgelessTextBlockModel { diff --git a/blocksuite/affine/blocks/block-root/src/edgeless/element-transform/connector-filter.ts b/blocksuite/affine/gfx/connector/src/element-transform/connector-filter.ts similarity index 100% rename from blocksuite/affine/blocks/block-root/src/edgeless/element-transform/connector-filter.ts rename to blocksuite/affine/gfx/connector/src/element-transform/connector-filter.ts diff --git a/blocksuite/affine/gfx/connector/src/element-transform/index.ts b/blocksuite/affine/gfx/connector/src/element-transform/index.ts new file mode 100644 index 000000000..0e63fb445 --- /dev/null +++ b/blocksuite/affine/gfx/connector/src/element-transform/index.ts @@ -0,0 +1 @@ +export * from './connector-filter'; diff --git a/blocksuite/affine/gfx/connector/src/index.ts b/blocksuite/affine/gfx/connector/src/index.ts index e3b29ea2b..a654539df 100644 --- a/blocksuite/affine/gfx/connector/src/index.ts +++ b/blocksuite/affine/gfx/connector/src/index.ts @@ -1,4 +1,5 @@ export * from './connector-tool'; +export * from './element-transform'; export * from './text'; export * from './toolbar/config'; export * from './toolbar/quick-tool'; diff --git a/blocksuite/affine/blocks/block-root/src/edgeless/element-transform/utils/drag-utils.ts b/blocksuite/affine/gfx/mindmap/src/element-transform/drag-utils.ts similarity index 98% rename from blocksuite/affine/blocks/block-root/src/edgeless/element-transform/utils/drag-utils.ts rename to blocksuite/affine/gfx/mindmap/src/element-transform/drag-utils.ts index bafa58f31..5815f74d9 100644 --- a/blocksuite/affine/blocks/block-root/src/edgeless/element-transform/utils/drag-utils.ts +++ b/blocksuite/affine/gfx/mindmap/src/element-transform/drag-utils.ts @@ -1,7 +1,3 @@ -import { - NODE_HORIZONTAL_SPACING, - NODE_VERTICAL_SPACING, -} from '@blocksuite/affine-gfx-mindmap'; import { LayoutType, type MindmapElementModel, @@ -11,6 +7,8 @@ import { import { Bound } from '@blocksuite/global/gfx'; import last from 'lodash-es/last'; +import { NODE_HORIZONTAL_SPACING, NODE_VERTICAL_SPACING } from '../view/layout'; + const isOnEdge = (node: MindmapNode, direction: 'tail' | 'head') => { let current = node; diff --git a/blocksuite/affine/gfx/mindmap/src/element-transform/index.ts b/blocksuite/affine/gfx/mindmap/src/element-transform/index.ts new file mode 100644 index 000000000..9e8d17a58 --- /dev/null +++ b/blocksuite/affine/gfx/mindmap/src/element-transform/index.ts @@ -0,0 +1 @@ +export * from './mind-map-drag'; diff --git a/blocksuite/affine/blocks/block-root/src/edgeless/element-transform/mind-map-drag.ts b/blocksuite/affine/gfx/mindmap/src/element-transform/mind-map-drag.ts similarity index 97% rename from blocksuite/affine/blocks/block-root/src/edgeless/element-transform/mind-map-drag.ts rename to blocksuite/affine/gfx/mindmap/src/element-transform/mind-map-drag.ts index 33eb6339e..9d662ad53 100644 --- a/blocksuite/affine/blocks/block-root/src/edgeless/element-transform/mind-map-drag.ts +++ b/blocksuite/affine/gfx/mindmap/src/element-transform/mind-map-drag.ts @@ -2,17 +2,6 @@ import { OverlayIdentifier, type SurfaceBlockComponent, } from '@blocksuite/affine-block-surface'; -import { - containsNode, - createFromTree, - detachMindmap, - findTargetNode, - hideNodeConnector, - type MindMapIndicatorOverlay, - NODE_HORIZONTAL_SPACING, - NODE_VERTICAL_SPACING, - tryMoveNode, -} from '@blocksuite/affine-gfx-mindmap'; import { type LayoutType, type LocalConnectorElementModel, @@ -31,9 +20,18 @@ import { } from '@blocksuite/block-std/gfx'; import type { Bound, IVec } from '@blocksuite/global/gfx'; -import { isSingleMindMapNode } from '../utils/mindmap'; -import { isMindmapNode } from '../utils/query'; -import { calculateResponseArea } from './utils/drag-utils'; +import type { MindMapIndicatorOverlay } from '../indicator-overlay'; +import { isMindmapNode, isSingleMindMapNode } from '../utils'; +import { NODE_HORIZONTAL_SPACING, NODE_VERTICAL_SPACING } from '../view/layout'; +import { + containsNode, + createFromTree, + detachMindmap, + findTargetNode, + hideNodeConnector, + tryMoveNode, +} from '../view/utils'; +import { calculateResponseArea } from './drag-utils'; type DragMindMapCtx = { mindmap: MindmapElementModel; diff --git a/blocksuite/affine/gfx/mindmap/src/index.ts b/blocksuite/affine/gfx/mindmap/src/index.ts index 8e618c03c..a8a2e2242 100644 --- a/blocksuite/affine/gfx/mindmap/src/index.ts +++ b/blocksuite/affine/gfx/mindmap/src/index.ts @@ -1,3 +1,5 @@ +export * from './element-transform'; export * from './indicator-overlay'; export * from './toolbar/config'; +export * from './utils'; export * from './view'; diff --git a/blocksuite/affine/blocks/block-root/src/edgeless/utils/mindmap.ts b/blocksuite/affine/gfx/mindmap/src/utils/index.ts similarity index 86% rename from blocksuite/affine/blocks/block-root/src/edgeless/utils/mindmap.ts rename to blocksuite/affine/gfx/mindmap/src/utils/index.ts index 4960cfd89..20b59a0c6 100644 --- a/blocksuite/affine/blocks/block-root/src/edgeless/utils/mindmap.ts +++ b/blocksuite/affine/gfx/mindmap/src/utils/index.ts @@ -1,5 +1,13 @@ import { MindmapElementModel } from '@blocksuite/affine-model'; -import type { GfxModel, Viewport } from '@blocksuite/block-std/gfx'; +import type { + GfxBlockElementModel, + GfxModel, + Viewport, +} from '@blocksuite/block-std/gfx'; + +export function isMindmapNode(element: GfxBlockElementModel | GfxModel | null) { + return element?.group instanceof MindmapElementModel; +} export function isSingleMindMapNode(els: GfxModel[]) { return els.length === 1 && els[0].group instanceof MindmapElementModel;