diff --git a/frontend/src/hooks/useCanvasSetup.ts b/frontend/src/hooks/useCanvasSetup.ts index 8367fec..abeb9fc 100644 --- a/frontend/src/hooks/useCanvasSetup.ts +++ b/frontend/src/hooks/useCanvasSetup.ts @@ -253,7 +253,12 @@ export function useCanvasSetup(deps: CanvasSetupDeps) { // Setup drag/drop and paste if (!isPublicView || user) { - const dropTarget = canvasContainerRef.current; + // Use the ref first, fall back to DOM query for the canvas parent + let dropTarget: HTMLElement | null = canvasContainerRef.current; + if (!dropTarget) { + const canvasEl = document.querySelector('canvas'); + dropTarget = canvasEl?.parentElement ?? null; + } if (dropTarget) { dropCleanupRef.current = setupDragDrop(dropTarget, viewport, scene, resolvedBoardId, onCanvasChange); } diff --git a/frontend/src/pages/Editor.tsx b/frontend/src/pages/Editor.tsx index dacdd9d..65b79d2 100644 --- a/frontend/src/pages/Editor.tsx +++ b/frontend/src/pages/Editor.tsx @@ -474,7 +474,7 @@ export default function Editor({ isPublicView }: EditorProps) { />} {/* Canvas */} -
+
e.preventDefault()} onDrop={(e) => e.preventDefault()}> {/* Dot grid — behind transparent canvas */} {showGrid && (() => { const scale = canvasTransform[0] || 1;