@@ -8,6 +8,9 @@ import { ImageNode } from "./nodes/ImageNode";
88import { TextNode } from "./nodes/TextNode" ;
99import FloatingEdge from "./FloatingEdge" ;
1010import { MultiNodePanel } from "./MultiNodePanel" ;
11+ import { EditorPanel } from "./EditorPanel" ;
12+ import { EdgePanel } from "./EdgePanel" ;
13+ import { SettingsPanel } from "./SettingsPanel" ;
1114import { getTranslations } from "./translations" ;
1215import { NodeData } from "./types" ;
1316
@@ -43,6 +46,7 @@ export const EditorCanvas = memo(({ defaultLanguage = "en" }: EditorCanvasProps)
4346 const setSelectedEdge = useEditorStore ( state => state . setSelectedEdge ) ;
4447 const setDrawerOpen = useEditorStore ( state => state . setDrawerOpen ) ;
4548 const setEdgeDrawerOpen = useEditorStore ( state => state . setEdgeDrawerOpen ) ;
49+ const setSettingsDrawerOpen = useEditorStore ( state => state . setSettingsDrawerOpen ) ;
4650 const setHelpOpen = useEditorStore ( state => state . setHelpOpen ) ;
4751 const setLastMousePosition = useEditorStore ( state => state . setLastMousePosition ) ;
4852
@@ -76,21 +80,29 @@ export const EditorCanvas = memo(({ defaultLanguage = "en" }: EditorCanvasProps)
7680 setDrawerOpen ( true ) ;
7781 setSelectedEdge ( null ) ;
7882 setEdgeDrawerOpen ( false ) ;
79- } , [ setSelectedNodeId , setDrawerOpen , setSelectedEdge , setEdgeDrawerOpen ] ) ;
83+ setSettingsDrawerOpen ( false ) ;
84+ } , [ setSelectedNodeId , setDrawerOpen , setSelectedEdge , setEdgeDrawerOpen , setSettingsDrawerOpen ] ) ;
8085
8186 const handleEdgeClick = useCallback ( ( _ : any , edge : Edge ) => {
8287 setSelectedEdge ( edge ) ;
8388 setEdgeDrawerOpen ( true ) ;
8489 setSelectedNodeId ( null ) ;
8590 setDrawerOpen ( false ) ;
86- } , [ setSelectedEdge , setEdgeDrawerOpen , setSelectedNodeId , setDrawerOpen ] ) ;
91+ setSettingsDrawerOpen ( false ) ;
92+ } , [ setSelectedEdge , setEdgeDrawerOpen , setSelectedNodeId , setDrawerOpen , setSettingsDrawerOpen ] ) ;
8793
8894 const handleSelectionChange : OnSelectionChangeFunc = useCallback (
8995 ( { nodes : selectedNodes } ) => {
9096 // Only select nodes, not edges (as per requirement #6)
9197 setSelectedNodeIds ( selectedNodes . map ( n => n . id ) ) ;
98+
99+ // Close the node panel if no nodes are selected and it's currently open
100+ if ( selectedNodes . length === 0 ) {
101+ setDrawerOpen ( false ) ;
102+ setSelectedNodeId ( null ) ;
103+ }
92104 } ,
93- [ setSelectedNodeIds ]
105+ [ setSelectedNodeIds , setDrawerOpen , setSelectedNodeId ]
94106 ) ;
95107
96108 // Track mouse position for keyboard shortcuts
@@ -99,6 +111,15 @@ export const EditorCanvas = memo(({ defaultLanguage = "en" }: EditorCanvasProps)
99111 setLastMousePosition ( position ) ;
100112 } , [ screenToFlowPosition , setLastMousePosition ] ) ;
101113
114+ // Close panels when clicking on empty canvas
115+ const handlePaneClick = useCallback ( ( ) => {
116+ setDrawerOpen ( false ) ;
117+ setSelectedNodeId ( null ) ;
118+ setEdgeDrawerOpen ( false ) ;
119+ setSelectedEdge ( null ) ;
120+ setSettingsDrawerOpen ( false ) ;
121+ } , [ setDrawerOpen , setSelectedNodeId , setEdgeDrawerOpen , setSelectedEdge , setSettingsDrawerOpen ] ) ;
122+
102123 const defaultEdgeOptions = {
103124 animated : false ,
104125 style : {
@@ -121,11 +142,12 @@ export const EditorCanvas = memo(({ defaultLanguage = "en" }: EditorCanvasProps)
121142 nodes = { nodes }
122143 edges = { edges }
123144 onEdgesChange = { onEdgesChange }
124- onNodeDoubleClick = { handleNodeClick }
125- onEdgeDoubleClick = { handleEdgeClick }
145+ onNodeClick = { handleNodeClick }
146+ onEdgeClick = { handleEdgeClick }
126147 onNodesChange = { onNodesChange }
127148 onConnect = { onConnect }
128149 onSelectionChange = { handleSelectionChange }
150+ onPaneClick = { handlePaneClick }
129151 nodeTypes = { nodeTypes }
130152 selectionOnDrag = { false }
131153 edgeTypes = { edgeTypes }
@@ -150,6 +172,9 @@ export const EditorCanvas = memo(({ defaultLanguage = "en" }: EditorCanvasProps)
150172 </ ControlButton >
151173 </ Controls >
152174 { selectedNodeIds . length > 1 && < MultiNodePanel /> }
175+ < EditorPanel defaultLanguage = { defaultLanguage } />
176+ < EdgePanel defaultLanguage = { defaultLanguage } />
177+ < SettingsPanel defaultLanguage = { defaultLanguage } />
153178 </ ReactFlow >
154179 </ div >
155180 ) ;
0 commit comments