diff --git a/src/pages/workflows/components/WorkflowCanvas.tsx b/src/pages/workflows/components/WorkflowCanvas.tsx index 571220e..42dd37c 100644 --- a/src/pages/workflows/components/WorkflowCanvas.tsx +++ b/src/pages/workflows/components/WorkflowCanvas.tsx @@ -190,6 +190,14 @@ export function WorkflowCanvas({ // Drag-to-add from palette const handleDragOver = useCallback((event: React.DragEvent) => { if (!event.dataTransfer.types.includes(PALETTE_DRAG_FORMAT)) return + // If the pointer is over an overlay panel (NodePalette, Inspector, etc.), + // suppress the drop cues — drops on panels are blocked and shouldn't show feedback. + const target = event.target as HTMLElement | null + if (target?.closest('.react-flow__panel')) { + setIsDragOver(false) + setDragFlowPos(null) + return + } event.preventDefault() event.dataTransfer.dropEffect = 'move' setIsDragOver(true) @@ -208,21 +216,7 @@ export function WorkflowCanvas({ } }, []) - // Document-level dragover: clear cues whenever cursor moves over a panel overlay. - // Panels use stopPropagation so canvas onDragOver never fires over them — - // without this, isDragOver stays true when hovering panels mid-drag. - useEffect(() => { - const handleDocDragOver = (e: DragEvent) => { - if (!(e.dataTransfer?.types ?? []).includes(PALETTE_DRAG_FORMAT)) return - const target = e.target as HTMLElement | null - if (target?.closest('.react-flow__panel')) { - setIsDragOver(false) - setDragFlowPos(null) - } - } - document.addEventListener('dragover', handleDocDragOver) - return () => document.removeEventListener('dragover', handleDocDragOver) - }, []) + const handleDrop = useCallback((event: React.DragEvent) => { setIsDragOver(false)