import { useCallback } from 'react' import { ReactFlow, Background, Controls, BackgroundVariant, ConnectionMode, type Node, type Edge, type Connection, } from '@xyflow/react' import '@xyflow/react/dist/style.css' import { useCanvasStore } from '@/stores/canvasStore' import { useThemeStore } from '@/stores/themeStore' import { THEMES } from '@/utils/themes' import { nodeTypes } from './nodes/nodeTypes' import { edgeTypes } from './edges/edgeTypes' import type { NodeData, EdgeData } from '@/types' interface CanvasContainerProps { onConnect?: (connection: Connection) => void onEdgeDoubleClick?: (edge: Edge) => void onNodeDragStart?: () => void } export function CanvasContainer({ onConnect: onConnectProp, onEdgeDoubleClick, onNodeDragStart }: CanvasContainerProps) { const { nodes, edges, onNodesChange, onEdgesChange, setSelectedNode, } = useCanvasStore() const activeTheme = useThemeStore((s) => s.activeTheme) const theme = THEMES[activeTheme] const onNodeClick = useCallback((_: React.MouseEvent, node: Node) => { setSelectedNode(node.id) }, [setSelectedNode]) const onPaneClick = useCallback(() => { setSelectedNode(null) }, [setSelectedNode]) const handleEdgeDoubleClick = useCallback((_: React.MouseEvent, edge: Edge) => { onEdgeDoubleClick?.(edge) }, [onEdgeDoubleClick]) return (
connection.source !== connection.target} >
) }