From 676c5d8de6ca925ce1e430ee73eb7420b60edaf0 Mon Sep 17 00:00:00 2001 From: Saul-Mirone Date: Sun, 4 May 2025 13:53:27 +0000 Subject: [PATCH] refactor(editor): remove global gfx tool types (#12119) --- blocksuite/affine/blocks/frame/src/index.ts | 14 ---- blocksuite/affine/blocks/root/src/index.ts | 11 --- .../blocks/surface/src/tool/default-tool.ts | 6 -- blocksuite/affine/gfx/brush/src/brush-tool.ts | 6 -- .../affine/gfx/brush/src/eraser-tool.ts | 6 -- .../affine/gfx/brush/src/highlighter-tool.ts | 6 -- .../gfx/connector/src/connector-tool.ts | 10 --- blocksuite/affine/gfx/note/src/note-tool.ts | 10 --- .../gfx/pointer/src/tools/empty-tool.ts | 6 -- .../affine/gfx/pointer/src/tools/pan-tool.ts | 10 --- blocksuite/affine/gfx/shape/src/shape-tool.ts | 10 --- .../affine/gfx/template/src/template-tool.ts | 6 -- .../affine/gfx/text/src/mount-text-editor.ts | 77 ------------------- blocksuite/affine/gfx/text/src/tool.ts | 8 +- blocksuite/framework/std/src/gfx/index.ts | 4 - .../std/src/gfx/tool/tool-controller.ts | 2 - blocksuite/framework/std/src/gfx/tool/tool.ts | 13 ---- .../blocksuite/ai/actions/edgeless-handler.ts | 3 - .../src/blocksuite/ai/tool/copilot-tool.ts | 6 -- .../e2e/utils/declare-test-window.ts | 7 +- 20 files changed, 2 insertions(+), 219 deletions(-) delete mode 100644 blocksuite/affine/gfx/text/src/mount-text-editor.ts diff --git a/blocksuite/affine/blocks/frame/src/index.ts b/blocksuite/affine/blocks/frame/src/index.ts index 09033ca996..e44916e77f 100644 --- a/blocksuite/affine/blocks/frame/src/index.ts +++ b/blocksuite/affine/blocks/frame/src/index.ts @@ -1,6 +1,3 @@ -import type { FrameTool } from './frame-tool'; -import type { PresentTool, PresentToolOption } from './present-tool'; - export * from './edgeless-clipboard-config'; export * from './edgeless-toolbar'; export * from './frame-block'; @@ -10,14 +7,3 @@ export * from './frame-spec'; export * from './frame-tool'; export * from './frame-toolbar'; export * from './present-tool'; - -declare module '@blocksuite/std/gfx' { - interface GfxToolsMap { - frameNavigator: PresentTool; - frame: FrameTool; - } - - interface GfxToolsOption { - frameNavigator: PresentToolOption; - } -} diff --git a/blocksuite/affine/blocks/root/src/index.ts b/blocksuite/affine/blocks/root/src/index.ts index d1511e879a..17f35d7aaa 100644 --- a/blocksuite/affine/blocks/root/src/index.ts +++ b/blocksuite/affine/blocks/root/src/index.ts @@ -1,8 +1,3 @@ -import type * as BrushEffect from '@blocksuite/affine-gfx-brush'; -import type * as NoteEffect from '@blocksuite/affine-gfx-note'; -import type * as PointerEffect from '@blocksuite/affine-gfx-pointer'; -import type * as ShapeEffect from '@blocksuite/affine-gfx-shape'; - export * from './adapters'; export * from './clipboard/index.js'; export * from './edgeless/edgeless-root-spec.js'; @@ -10,9 +5,3 @@ export * from './edgeless/index.js'; export * from './page/page-root-block.js'; export * from './preview/preview-root-block.js'; export * from './types.js'; - -declare type _GLOBAL_ = - | typeof PointerEffect - | typeof NoteEffect - | typeof BrushEffect - | typeof ShapeEffect; diff --git a/blocksuite/affine/blocks/surface/src/tool/default-tool.ts b/blocksuite/affine/blocks/surface/src/tool/default-tool.ts index 86e711cb51..7bf68572d5 100644 --- a/blocksuite/affine/blocks/surface/src/tool/default-tool.ts +++ b/blocksuite/affine/blocks/surface/src/tool/default-tool.ts @@ -416,9 +416,3 @@ export class DefaultTool extends BaseTool { override unmounted(): void {} } - -declare module '@blocksuite/std/gfx' { - interface GfxToolsMap { - default: DefaultTool; - } -} diff --git a/blocksuite/affine/gfx/brush/src/brush-tool.ts b/blocksuite/affine/gfx/brush/src/brush-tool.ts index 5bc0bd7e2c..3622b779ec 100644 --- a/blocksuite/affine/gfx/brush/src/brush-tool.ts +++ b/blocksuite/affine/gfx/brush/src/brush-tool.ts @@ -177,9 +177,3 @@ export class BrushTool extends BaseTool { }); } } - -declare module '@blocksuite/std/gfx' { - interface GfxToolsMap { - brush: BrushTool; - } -} diff --git a/blocksuite/affine/gfx/brush/src/eraser-tool.ts b/blocksuite/affine/gfx/brush/src/eraser-tool.ts index e7e4d32511..97097309b3 100644 --- a/blocksuite/affine/gfx/brush/src/eraser-tool.ts +++ b/blocksuite/affine/gfx/brush/src/eraser-tool.ts @@ -155,9 +155,3 @@ export class EraserTool extends BaseTool { ); } } - -declare module '@blocksuite/std/gfx' { - interface GfxToolsMap { - eraser: EraserTool; - } -} diff --git a/blocksuite/affine/gfx/brush/src/highlighter-tool.ts b/blocksuite/affine/gfx/brush/src/highlighter-tool.ts index da9a99c594..98e7b03182 100644 --- a/blocksuite/affine/gfx/brush/src/highlighter-tool.ts +++ b/blocksuite/affine/gfx/brush/src/highlighter-tool.ts @@ -177,9 +177,3 @@ export class HighlighterTool extends BaseTool { }); } } - -declare module '@blocksuite/std/gfx' { - interface GfxToolsMap { - highlighter: HighlighterTool; - } -} diff --git a/blocksuite/affine/gfx/connector/src/connector-tool.ts b/blocksuite/affine/gfx/connector/src/connector-tool.ts index 7a8a409f40..e520c139a8 100644 --- a/blocksuite/affine/gfx/connector/src/connector-tool.ts +++ b/blocksuite/affine/gfx/connector/src/connector-tool.ts @@ -224,13 +224,3 @@ export class ConnectorTool extends BaseTool { this.findTargetByPoint(point); } } - -declare module '@blocksuite/std/gfx' { - interface GfxToolsMap { - connector: ConnectorTool; - } - - interface GfxToolsOption { - connector: ConnectorToolOptions; - } -} diff --git a/blocksuite/affine/gfx/note/src/note-tool.ts b/blocksuite/affine/gfx/note/src/note-tool.ts index 0f00ef55c8..2f6cc95395 100644 --- a/blocksuite/affine/gfx/note/src/note-tool.ts +++ b/blocksuite/affine/gfx/note/src/note-tool.ts @@ -218,16 +218,6 @@ export class NoteTool extends BaseTool { } } -declare module '@blocksuite/std/gfx' { - interface GfxToolsMap { - 'affine:note': NoteTool; - } - - interface GfxToolsOption { - 'affine:note': NoteToolOption; - } -} - type NoteOptions = { childFlavour: NoteChildrenFlavour; childType: string | null; diff --git a/blocksuite/affine/gfx/pointer/src/tools/empty-tool.ts b/blocksuite/affine/gfx/pointer/src/tools/empty-tool.ts index 1e2ddfb0ee..0c2ec1705e 100644 --- a/blocksuite/affine/gfx/pointer/src/tools/empty-tool.ts +++ b/blocksuite/affine/gfx/pointer/src/tools/empty-tool.ts @@ -6,9 +6,3 @@ import { BaseTool } from '@blocksuite/std/gfx'; export class EmptyTool extends BaseTool { static override toolName: string = 'empty'; } - -declare module '@blocksuite/std/gfx' { - interface GfxToolsMap { - empty: EmptyTool; - } -} diff --git a/blocksuite/affine/gfx/pointer/src/tools/pan-tool.ts b/blocksuite/affine/gfx/pointer/src/tools/pan-tool.ts index 4b6ad03fb5..500856c814 100644 --- a/blocksuite/affine/gfx/pointer/src/tools/pan-tool.ts +++ b/blocksuite/affine/gfx/pointer/src/tools/pan-tool.ts @@ -78,13 +78,3 @@ export class PanTool extends BaseTool { }); } } - -declare module '@blocksuite/std/gfx' { - interface GfxToolsMap { - pan: PanTool; - } - - interface GfxToolsOption { - pan: PanToolOption; - } -} diff --git a/blocksuite/affine/gfx/shape/src/shape-tool.ts b/blocksuite/affine/gfx/shape/src/shape-tool.ts index b4e3e90d82..beafdefe06 100644 --- a/blocksuite/affine/gfx/shape/src/shape-tool.ts +++ b/blocksuite/affine/gfx/shape/src/shape-tool.ts @@ -336,13 +336,3 @@ export class ShapeTool extends BaseTool { this._disableOverlay = disable; } } - -declare module '@blocksuite/std/gfx' { - interface GfxToolsMap { - shape: ShapeTool; - } - - interface GfxToolsOption { - shape: ShapeToolOption; - } -} diff --git a/blocksuite/affine/gfx/template/src/template-tool.ts b/blocksuite/affine/gfx/template/src/template-tool.ts index fa323dee55..dac702146d 100644 --- a/blocksuite/affine/gfx/template/src/template-tool.ts +++ b/blocksuite/affine/gfx/template/src/template-tool.ts @@ -3,9 +3,3 @@ import { BaseTool } from '@blocksuite/std/gfx'; export class TemplateTool extends BaseTool { static override toolName: string = 'template'; } - -declare module '@blocksuite/std/gfx' { - interface GfxToolsMap { - template: TemplateTool; - } -} diff --git a/blocksuite/affine/gfx/text/src/mount-text-editor.ts b/blocksuite/affine/gfx/text/src/mount-text-editor.ts deleted file mode 100644 index 0a3ce89ee0..0000000000 --- a/blocksuite/affine/gfx/text/src/mount-text-editor.ts +++ /dev/null @@ -1,77 +0,0 @@ -import { - CanvasElementType, - DefaultTool, - EdgelessCRUDIdentifier, - type IModelCoord, -} from '@blocksuite/affine-block-surface'; -import { TextElementModel } from '@blocksuite/affine-model'; -import { Bound } from '@blocksuite/global/gfx'; -import type { BlockComponent, PointerEventState } from '@blocksuite/std'; -import { GfxControllerIdentifier } from '@blocksuite/std/gfx'; -import * as Y from 'yjs'; - -import { EdgelessTextEditor } from './edgeless-text-editor'; -import { getCursorByCoord } from './element-renderer/utils'; - -export function mountTextElementEditor( - textElement: TextElementModel, - edgeless: BlockComponent, - focusCoord?: IModelCoord -) { - let cursorIndex = textElement.text.length; - if (focusCoord) { - cursorIndex = Math.min( - getCursorByCoord(textElement, focusCoord), - cursorIndex - ); - } - - const textEditor = new EdgelessTextEditor(); - textEditor.element = textElement; - - edgeless.append(textEditor); - textEditor.updateComplete - .then(() => { - textEditor.inlineEditor?.focusIndex(cursorIndex); - }) - .catch(console.error); - - const gfx = edgeless.std.get(GfxControllerIdentifier); - - gfx.tool.setTool(DefaultTool); - gfx.selection.set({ - elements: [textElement.id], - editing: true, - }); -} - -/** - * @deprecated - * - * Canvas Text has been deprecated - */ -export function addText(edgeless: BlockComponent, event: PointerEventState) { - const gfx = edgeless.std.get(GfxControllerIdentifier); - const crud = edgeless.std.get(EdgelessCRUDIdentifier); - const [x, y] = gfx.viewport.toModelCoord(event.x, event.y); - const selected = gfx.getElementByPoint(x, y); - - if (!selected) { - const [modelX, modelY] = gfx.viewport.toModelCoord(event.x, event.y); - - const id = edgeless.std - .get(EdgelessCRUDIdentifier) - .addElement(CanvasElementType.TEXT, { - xywh: new Bound(modelX, modelY, 32, 32).serialize(), - text: new Y.Text(), - }); - if (!id) return; - - edgeless.doc.captureSync(); - const textElement = crud.getElementById(id); - if (!textElement) return; - if (textElement instanceof TextElementModel) { - mountTextElementEditor(textElement, edgeless); - } - } -} diff --git a/blocksuite/affine/gfx/text/src/tool.ts b/blocksuite/affine/gfx/text/src/tool.ts index 9e8aacac63..72009b67a9 100644 --- a/blocksuite/affine/gfx/text/src/tool.ts +++ b/blocksuite/affine/gfx/text/src/tool.ts @@ -10,7 +10,7 @@ import { BaseTool, type GfxController } from '@blocksuite/std/gfx'; import * as Y from 'yjs'; import { insertEdgelessTextCommand } from './commands/insert-edgeless-text'; -import { mountTextElementEditor } from './mount-text-editor'; +import { mountTextElementEditor } from './edgeless-text-editor'; function addText(gfx: GfxController, event: PointerEventState) { const [x, y] = gfx.viewport.toModelCoord(event.x, event.y); @@ -64,9 +64,3 @@ export class TextTool extends BaseTool { }); } } - -declare module '@blocksuite/std/gfx' { - interface GfxToolsMap { - text: TextTool; - } -} diff --git a/blocksuite/framework/std/src/gfx/index.ts b/blocksuite/framework/std/src/gfx/index.ts index d0b00d8741..ec821e31a7 100644 --- a/blocksuite/framework/std/src/gfx/index.ts +++ b/blocksuite/framework/std/src/gfx/index.ts @@ -90,10 +90,6 @@ export { } from './surface-middleware.js'; export { BaseTool, - type GfxToolsFullOption, - type GfxToolsFullOptionValue, - type GfxToolsMap, - type GfxToolsOption, type ToolOptions, type ToolOptionWithType, type ToolType, diff --git a/blocksuite/framework/std/src/gfx/tool/tool-controller.ts b/blocksuite/framework/std/src/gfx/tool/tool-controller.ts index f345f338ef..5526ce749e 100644 --- a/blocksuite/framework/std/src/gfx/tool/tool-controller.ts +++ b/blocksuite/framework/std/src/gfx/tool/tool-controller.ts @@ -75,8 +75,6 @@ export interface ToolEventTarget { ): void; } -export const eventTarget = Symbol('eventTarget'); - export class ToolController extends GfxExtension { static override key = 'ToolController'; diff --git a/blocksuite/framework/std/src/gfx/tool/tool.ts b/blocksuite/framework/std/src/gfx/tool/tool.ts index 795c329ef5..8478df225f 100644 --- a/blocksuite/framework/std/src/gfx/tool/tool.ts +++ b/blocksuite/framework/std/src/gfx/tool/tool.ts @@ -123,16 +123,3 @@ export type ToolOptionWithType = { toolType?: ToolType; options?: ToolOptions; }; - -export interface GfxToolsMap {} - -export interface GfxToolsOption {} - -export type GfxToolsFullOption = { - [Key in keyof GfxToolsMap]: Key extends keyof GfxToolsOption - ? { type: Key } & GfxToolsOption[Key] - : { type: Key }; -}; - -export type GfxToolsFullOptionValue = - GfxToolsFullOption[keyof GfxToolsFullOption]; diff --git a/packages/frontend/core/src/blocksuite/ai/actions/edgeless-handler.ts b/packages/frontend/core/src/blocksuite/ai/actions/edgeless-handler.ts index 3abe0f51b6..be22c7bc4e 100644 --- a/packages/frontend/core/src/blocksuite/ai/actions/edgeless-handler.ts +++ b/packages/frontend/core/src/blocksuite/ai/actions/edgeless-handler.ts @@ -1,6 +1,5 @@ import { splitElements } from '@blocksuite/affine/blocks/root'; import { DefaultTool } from '@blocksuite/affine/blocks/surface'; -import type * as PointerEffect from '@blocksuite/affine/gfx/pointer'; import { CodeBlockModel, EdgelessTextBlockModel, @@ -50,8 +49,6 @@ import { getToolbar, } from './edgeless-response'; -declare type _GLOBAL_ = typeof PointerEffect; - async function getContentFromEmbedSyncedDocModel( host: EditorHost, models: EmbedSyncedDocModel[] diff --git a/packages/frontend/core/src/blocksuite/ai/tool/copilot-tool.ts b/packages/frontend/core/src/blocksuite/ai/tool/copilot-tool.ts index 4a0c3c658b..1b2c9a7509 100644 --- a/packages/frontend/core/src/blocksuite/ai/tool/copilot-tool.ts +++ b/packages/frontend/core/src/blocksuite/ai/tool/copilot-tool.ts @@ -172,9 +172,3 @@ export class CopilotTool extends BaseTool { this.draggingAreaUpdated.next(true); } } - -declare module '@blocksuite/std/gfx' { - interface GfxToolsMap { - copilot: CopilotTool; - } -} diff --git a/tests/blocksuite/e2e/utils/declare-test-window.ts b/tests/blocksuite/e2e/utils/declare-test-window.ts index 2a56bc05f9..495eb9e2b7 100644 --- a/tests/blocksuite/e2e/utils/declare-test-window.ts +++ b/tests/blocksuite/e2e/utils/declare-test-window.ts @@ -1,14 +1,9 @@ import type * as Effect from '@blocksuite/affine/effects'; -import type * as ConnectorEffect from '@blocksuite/affine/gfx/connector'; -import type * as ShapeEffect from '@blocksuite/affine/gfx/shape'; import type { EditorHost } from '@blocksuite/affine/std'; import type { Store, Transformer, Workspace } from '@blocksuite/affine/store'; import type { TestAffineEditorContainer } from '@blocksuite/integration-test'; -declare type _GLOBAL_ = - | typeof Effect - | typeof ConnectorEffect - | typeof ShapeEffect; +declare type _GLOBAL_ = typeof Effect; declare global { interface Window {