From 2d5396ef09e9101ffd68377849f702e9aac51be6 Mon Sep 17 00:00:00 2001 From: Hiren Kangad Date: Fri, 13 Mar 2026 09:44:38 +0530 Subject: [PATCH] =?UTF-8?q?feat(markdown):=20add=20double-click=20?= =?UTF-8?q?=E2=86=92=20edit=20mode=20via=20SelectionManager=20callback?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- frontend/src/canvas/SelectionManager.ts | 8 ++++++++ frontend/src/hooks/useCanvasSetup.ts | 8 ++++++++ 2 files changed, 16 insertions(+) diff --git a/frontend/src/canvas/SelectionManager.ts b/frontend/src/canvas/SelectionManager.ts index 975b9d8..bba038a 100644 --- a/frontend/src/canvas/SelectionManager.ts +++ b/frontend/src/canvas/SelectionManager.ts @@ -85,6 +85,7 @@ export class SelectionManager { private _onDoubleClickText: ((item: SceneItem) => void) | null = null; private _onDoubleClickImage: ((item: SceneItem) => void) | null = null; + private _onDoubleClickMarkdown: ((item: SceneItem) => void) | null = null; private _enabled = true; @@ -168,6 +169,11 @@ export class SelectionManager { this._onDoubleClickImage = fn; } + /** Called on double-click of a markdown item (for edit mode). */ + set onDoubleClickMarkdown(fn: (item: SceneItem) => void) { + this._onDoubleClickMarkdown = fn; + } + /** Select only this item, deselecting everything else. */ selectOnly(id: string): void { this.selectedIds.clear(); @@ -393,6 +399,8 @@ export class SelectionManager { this._onDoubleClickText?.(item); } else if (item.type === 'image' || item.type === 'drawing') { this._onDoubleClickImage?.(item); + } else if (item.type === 'markdown') { + this._onDoubleClickMarkdown?.(item); } this._lastClickTime = 0; this._lastClickItemId = null; diff --git a/frontend/src/hooks/useCanvasSetup.ts b/frontend/src/hooks/useCanvasSetup.ts index d83fbb0..badfc36 100644 --- a/frontend/src/hooks/useCanvasSetup.ts +++ b/frontend/src/hooks/useCanvasSetup.ts @@ -158,6 +158,14 @@ export function useCanvasSetup(deps: CanvasSetupDeps) { }); }; + // Double-click markdown → enter edit mode + selection.onDoubleClickMarkdown = (item) => { + if (mdOverlayRef.current) { + mdOverlayRef.current.setEditing(item.id); + selection.setEnabled(false); + } + }; + // Refresh transform box when item dimensions change (e.g. video metadata loaded) scene.onItemDimensionsChanged = (itemId: string) => { if (selection.selectedIds.has(itemId)) {