import { useCallback } from 'react' import { ReactFlow, Background, Controls, MiniMap, BackgroundVariant, type OnConnect, type OnNodesChange, type OnEdgesChange, type Node, type Edge, } from '@xyflow/react' import { nodeTypes } from './nodes/nodeTypes' import { edgeTypes } from './edges/edgeTypes' interface NetworkCanvasProps { nodes: Node[] edges: Edge[] onNodesChange: OnNodesChange onEdgesChange: OnEdgesChange onConnect: OnConnect onNodeSelect: (nodeId: string | null) => void onEdgeSelect: (edgeId: string | null) => void onDrop: (event: React.DragEvent) => void onDragOver: (event: React.DragEvent) => void } export function NetworkCanvas({ nodes, edges, onNodesChange, onEdgesChange, onConnect, onNodeSelect, onEdgeSelect, onDrop, onDragOver, }: NetworkCanvasProps) { const handleSelectionChange = useCallback(({ nodes: selectedNodes, edges: selectedEdges }: { nodes: Node[]; edges: Edge[] }) => { if (selectedNodes.length === 1) { onNodeSelect(selectedNodes[0].id) onEdgeSelect(null) } else if (selectedEdges.length === 1) { onEdgeSelect(selectedEdges[0].id) onNodeSelect(null) } else { onNodeSelect(null) onEdgeSelect(null) } }, [onNodeSelect, onEdgeSelect]) const handlePaneClick = useCallback(() => { onNodeSelect(null) onEdgeSelect(null) }, [onNodeSelect, onEdgeSelect]) return ( ) }