1- import { useCallback , memo , useEffect } from "react" ;
1+ import { useCallback , memo , useEffect , useRef } from "react" ;
22import { ReactFlow , Controls , Background , ControlButton , OnSelectionChangeFunc , Node , Edge , useReactFlow } from "@xyflow/react" ;
33import { Info , Redo , Undo } from "lucide-react" ;
44import { useEditorStore , useTemporalStore } from "./editorStore" ;
@@ -44,8 +44,10 @@ export const EditorCanvas = memo(({ defaultLanguage = "en" }: EditorCanvasProps)
4444 const setDrawerOpen = useEditorStore ( state => state . setDrawerOpen ) ;
4545 const setEdgeDrawerOpen = useEditorStore ( state => state . setEdgeDrawerOpen ) ;
4646 const setHelpOpen = useEditorStore ( state => state . setHelpOpen ) ;
47+ const setLastMousePosition = useEditorStore ( state => state . setLastMousePosition ) ;
4748
48- const { setViewport } = useReactFlow ( ) ;
49+ const { setViewport, screenToFlowPosition } = useReactFlow ( ) ;
50+ const canvasRef = useRef < HTMLDivElement > ( null ) ;
4951
5052 const language = settings ?. language || defaultLanguage ;
5153 const t = getTranslations ( language ) ;
@@ -90,6 +92,12 @@ export const EditorCanvas = memo(({ defaultLanguage = "en" }: EditorCanvasProps)
9092 [ setSelectedNodeIds ]
9193 ) ;
9294
95+ // Track mouse position for keyboard shortcuts
96+ const handleMouseMove = useCallback ( ( event : React . MouseEvent ) => {
97+ const position = screenToFlowPosition ( { x : event . clientX , y : event . clientY } ) ;
98+ setLastMousePosition ( position ) ;
99+ } , [ screenToFlowPosition , setLastMousePosition ] ) ;
100+
93101 const defaultEdgeOptions = {
94102 animated : false ,
95103 style : {
@@ -101,10 +109,12 @@ export const EditorCanvas = memo(({ defaultLanguage = "en" }: EditorCanvasProps)
101109
102110 return (
103111 < div
112+ ref = { canvasRef }
104113 className = "editor-canvas"
105114 style = { {
106115 backgroundColor : settings ?. background ?. color || "#ffffff" ,
107116 } }
117+ onMouseMove = { handleMouseMove }
108118 >
109119 < ReactFlow
110120 nodes = { nodes }
0 commit comments