@quantumwake/kgraph 0.1.2 → 0.2.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/KGraphProvider.tsx","../src/NodeRenderer.tsx","../src/bezier.ts","../src/EdgeRenderer.tsx","../src/ConnectionLine.tsx","../src/DotGrid.tsx","../src/MiniMap.tsx","../src/KGraphCanvas.tsx","../src/useKGraph.ts","../src/Handle.tsx","../src/EdgeLabel.tsx","../src/applyChanges.ts"],"names":["createContext","useContext","useState","useRef","useCallback","useMemo","jsx","useEffect","React","Fragment","jsxs"],"mappings":"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","file":"index.cjs","sourcesContent":["import React, { createContext, useContext, useState, useCallback, useRef, useMemo } from 'react';\nimport { KGraphContextValue, KGraphViewport, HandleInfo, KGraphNode, KGraphEdge } from './types';\n\nconst KGraphContext = createContext<KGraphContextValue | null>(null);\n\nexport function useKGraphContext(): KGraphContextValue {\n const ctx = useContext(KGraphContext);\n if (!ctx) {\n throw new Error('useKGraphContext must be used within a KGraphProvider');\n }\n return ctx;\n}\n\ninterface KGraphProviderProps {\n children: React.ReactNode;\n nodes: KGraphNode[];\n edges: KGraphEdge[];\n initialViewport?: KGraphViewport;\n minZoom?: number;\n maxZoom?: number;\n}\n\nexport const KGraphProvider: React.FC<KGraphProviderProps> = ({\n children,\n nodes,\n edges,\n initialViewport = { x: 0, y: 0, zoom: 1 },\n minZoom = 0.1,\n maxZoom = 4,\n}) => {\n const [viewport, setViewport] = useState<KGraphViewport>(initialViewport);\n const containerRef = useRef<HTMLDivElement>(null);\n const handlesRef = useRef<Map<string, HandleInfo>>(new Map());\n\n const screenToCanvasPosition = useCallback((screenX: number, screenY: number) => {\n const rect = containerRef.current?.getBoundingClientRect();\n if (!rect) return { x: screenX, y: screenY };\n const x = (screenX - rect.left - viewport.x) / viewport.zoom;\n const y = (screenY - rect.top - viewport.y) / viewport.zoom;\n return { x, y };\n }, [viewport]);\n\n const canvasToScreenPosition = useCallback((canvasX: number, canvasY: number) => {\n const rect = containerRef.current?.getBoundingClientRect();\n if (!rect) return { x: canvasX, y: canvasY };\n const x = canvasX * viewport.zoom + viewport.x + rect.left;\n const y = canvasY * viewport.zoom + viewport.y + rect.top;\n return { x, y };\n }, [viewport]);\n\n const fitView = useCallback((options?: { padding?: number }) => {\n if (nodes.length === 0) return;\n const rect = containerRef.current?.getBoundingClientRect();\n if (!rect) return;\n\n const padding = options?.padding ?? 0.2;\n\n let minX = Infinity, minY = Infinity, maxX = -Infinity, maxY = -Infinity;\n for (const node of nodes) {\n const w = node.width || 200;\n const h = node.height || 100;\n minX = Math.min(minX, node.position.x);\n minY = Math.min(minY, node.position.y);\n maxX = Math.max(maxX, node.position.x + w);\n maxY = Math.max(maxY, node.position.y + h);\n }\n\n const graphWidth = maxX - minX;\n const graphHeight = maxY - minY;\n\n if (graphWidth <= 0 || graphHeight <= 0) return;\n\n const availW = rect.width * (1 - padding * 2);\n const availH = rect.height * (1 - padding * 2);\n const zoom = Math.min(\n Math.max(availW / graphWidth, minZoom),\n Math.max(availH / graphHeight, minZoom),\n maxZoom,\n );\n const clampedZoom = Math.min(Math.max(zoom, minZoom), maxZoom);\n\n const centerX = (minX + maxX) / 2;\n const centerY = (minY + maxY) / 2;\n\n setViewport({\n x: rect.width / 2 - centerX * clampedZoom,\n y: rect.height / 2 - centerY * clampedZoom,\n zoom: clampedZoom,\n });\n }, [nodes, minZoom, maxZoom]);\n\n const zoomIn = useCallback(() => {\n setViewport(v => {\n const rect = containerRef.current?.getBoundingClientRect();\n const newZoom = Math.min(v.zoom * 1.2, maxZoom);\n if (!rect) return { ...v, zoom: newZoom };\n const cx = rect.width / 2;\n const cy = rect.height / 2;\n return {\n x: cx - (cx - v.x) * (newZoom / v.zoom),\n y: cy - (cy - v.y) * (newZoom / v.zoom),\n zoom: newZoom,\n };\n });\n }, [maxZoom]);\n\n const zoomOut = useCallback(() => {\n setViewport(v => {\n const rect = containerRef.current?.getBoundingClientRect();\n const newZoom = Math.max(v.zoom / 1.2, minZoom);\n if (!rect) return { ...v, zoom: newZoom };\n const cx = rect.width / 2;\n const cy = rect.height / 2;\n return {\n x: cx - (cx - v.x) * (newZoom / v.zoom),\n y: cy - (cy - v.y) * (newZoom / v.zoom),\n zoom: newZoom,\n };\n });\n }, [minZoom]);\n\n const zoomTo = useCallback((level: number) => {\n setViewport(v => {\n const rect = containerRef.current?.getBoundingClientRect();\n const newZoom = Math.min(Math.max(level, minZoom), maxZoom);\n if (!rect) return { ...v, zoom: newZoom };\n const cx = rect.width / 2;\n const cy = rect.height / 2;\n return {\n x: cx - (cx - v.x) * (newZoom / v.zoom),\n y: cy - (cy - v.y) * (newZoom / v.zoom),\n zoom: newZoom,\n };\n });\n }, [minZoom, maxZoom]);\n\n const registerHandle = useCallback((info: HandleInfo) => {\n handlesRef.current.set(`${info.nodeId}:${info.handleId}`, info);\n }, []);\n\n const unregisterHandle = useCallback((nodeId: string, handleId: string) => {\n handlesRef.current.delete(`${nodeId}:${handleId}`);\n }, []);\n\n const getHandlePosition = useCallback((nodeId: string, handleId: string) => {\n return handlesRef.current.get(`${nodeId}:${handleId}`);\n }, []);\n\n const getAllHandles = useCallback(() => {\n return handlesRef.current;\n }, []);\n\n const value = useMemo<KGraphContextValue>(() => ({\n viewport,\n setViewport,\n screenToCanvasPosition,\n canvasToScreenPosition,\n fitView,\n zoomIn,\n zoomOut,\n zoomTo,\n registerHandle,\n unregisterHandle,\n getHandlePosition,\n getAllHandles,\n containerRef,\n nodes,\n edges,\n }), [viewport, screenToCanvasPosition, canvasToScreenPosition, fitView, zoomIn, zoomOut, zoomTo, registerHandle, unregisterHandle, getHandlePosition, getAllHandles, nodes, edges]);\n\n return (\n <KGraphContext.Provider value={value}>\n {children}\n </KGraphContext.Provider>\n );\n};\n\nexport default KGraphProvider;\n","import React, { useCallback, useRef, useEffect } from 'react';\nimport { KGraphNode, NodeComponentProps, NodeChange, HandlePosition } from './types';\nimport { useKGraphContext } from './KGraphProvider';\n\ninterface NodeWrapperProps {\n node: KGraphNode;\n nodeComponent: React.ComponentType<NodeComponentProps>;\n onNodesChange?: (changes: NodeChange[]) => void;\n snapToGrid: boolean;\n snapGrid: [number, number];\n draggable: boolean;\n selectable: boolean;\n onNodeClick?: (event: React.MouseEvent, node: KGraphNode) => void;\n onConnectionStart?: (nodeId: string, handleId: string, type: 'source' | 'target', e: React.MouseEvent) => void;\n zoom: number;\n}\n\nconst NodeWrapper: React.FC<NodeWrapperProps> = ({\n node,\n nodeComponent: NodeComponent,\n onNodesChange,\n snapToGrid,\n snapGrid,\n draggable,\n selectable,\n onNodeClick,\n onConnectionStart,\n zoom,\n}) => {\n const wrapperRef = useRef<HTMLDivElement>(null);\n const dragRef = useRef<{\n startX: number;\n startY: number;\n startNodeX: number;\n startNodeY: number;\n isDragging: boolean;\n lastPosition: { x: number; y: number };\n } | null>(null);\n\n // Use refs for values accessed inside drag event handlers to avoid stale closures\n const onNodesChangeRef = useRef(onNodesChange);\n onNodesChangeRef.current = onNodesChange;\n const zoomRef = useRef(zoom);\n zoomRef.current = zoom;\n const snapRef = useRef({ snapToGrid, snapGrid });\n snapRef.current = { snapToGrid, snapGrid };\n\n const { registerHandle, unregisterHandle } = useKGraphContext();\n\n // Measure and register handle positions\n const updateHandlePositions = useCallback(() => {\n if (!wrapperRef.current) return;\n\n const handles = wrapperRef.current.querySelectorAll('[data-handleid]');\n handles.forEach((el) => {\n const handleId = el.getAttribute('data-handleid');\n const handleType = el.getAttribute('data-handletype') as 'source' | 'target';\n const handlePosition = el.getAttribute('data-handleposition') as HandlePosition;\n if (!handleId || !handleType || !handlePosition) return;\n\n const nodeW = wrapperRef.current!.offsetWidth;\n const nodeH = wrapperRef.current!.offsetHeight;\n\n let hx = node.position.x;\n let hy = node.position.y;\n\n switch (handlePosition) {\n case 'top':\n hx += nodeW / 2;\n break;\n case 'bottom':\n hx += nodeW / 2;\n hy += nodeH;\n break;\n case 'left':\n hy += nodeH / 2;\n break;\n case 'right':\n hx += nodeW;\n hy += nodeH / 2;\n break;\n }\n\n registerHandle({\n nodeId: node.id,\n handleId,\n type: handleType,\n position: handlePosition,\n x: hx,\n y: hy,\n });\n });\n }, [node.id, node.position.x, node.position.y, registerHandle]);\n\n // Observe size changes\n useEffect(() => {\n if (!wrapperRef.current) return;\n\n const ro = new ResizeObserver((entries) => {\n for (const entry of entries) {\n const { width, height } = entry.contentRect;\n if (width > 0 && height > 0 && (width !== node.width || height !== node.height)) {\n onNodesChangeRef.current?.([{\n type: 'dimensions',\n id: node.id,\n dimensions: { width, height },\n }]);\n }\n }\n updateHandlePositions();\n });\n\n ro.observe(wrapperRef.current);\n return () => ro.disconnect();\n }, [node.id, node.width, node.height, updateHandlePositions]);\n\n // Update handles when position changes\n useEffect(() => {\n updateHandlePositions();\n }, [updateHandlePositions]);\n\n // Cleanup handles on unmount\n useEffect(() => {\n return () => {\n if (!wrapperRef.current) return;\n const handles = wrapperRef.current.querySelectorAll('[data-handleid]');\n handles.forEach((el) => {\n const handleId = el.getAttribute('data-handleid');\n if (handleId) unregisterHandle(node.id, handleId);\n });\n };\n }, [node.id, unregisterHandle]);\n\n // Drag handling — uses refs to avoid stale closures in window event listeners\n const handleMouseDown = useCallback((e: React.MouseEvent) => {\n // Don't start drag from handles\n const target = e.target as HTMLElement;\n if (target.closest('[data-handleid]')) return;\n\n // Don't interfere with interactions inside dialogs (e.g. HeadlessUI)\n if (target.closest('[role=\"dialog\"]')) return;\n\n if (selectable) {\n onNodeClick?.(e, node);\n }\n\n if (!draggable) return;\n\n e.stopPropagation();\n e.preventDefault();\n\n dragRef.current = {\n startX: e.clientX,\n startY: e.clientY,\n startNodeX: node.position.x,\n startNodeY: node.position.y,\n isDragging: false,\n lastPosition: { x: node.position.x, y: node.position.y },\n };\n\n const nodeId = node.id;\n\n const handleMouseMove = (ev: MouseEvent) => {\n if (!dragRef.current) return;\n\n const currentZoom = zoomRef.current;\n const dx = (ev.clientX - dragRef.current.startX) / currentZoom;\n const dy = (ev.clientY - dragRef.current.startY) / currentZoom;\n\n // Threshold to distinguish click from drag\n if (!dragRef.current.isDragging && (Math.abs(dx) > 2 || Math.abs(dy) > 2)) {\n dragRef.current.isDragging = true;\n }\n\n if (!dragRef.current.isDragging) return;\n\n let newX = dragRef.current.startNodeX + dx;\n let newY = dragRef.current.startNodeY + dy;\n\n const { snapToGrid: snap, snapGrid: grid } = snapRef.current;\n if (snap) {\n newX = Math.round(newX / grid[0]) * grid[0];\n newY = Math.round(newY / grid[1]) * grid[1];\n }\n\n // Track the last position so mouseup can include it\n dragRef.current.lastPosition = { x: newX, y: newY };\n\n onNodesChangeRef.current?.([{\n type: 'position',\n id: nodeId,\n position: { x: newX, y: newY },\n dragging: true,\n }]);\n };\n\n const handleMouseUp = () => {\n if (dragRef.current?.isDragging) {\n // Always include the final position to avoid stale closure issues\n onNodesChangeRef.current?.([{\n type: 'position',\n id: nodeId,\n position: dragRef.current.lastPosition,\n dragging: false,\n }]);\n }\n dragRef.current = null;\n window.removeEventListener('mousemove', handleMouseMove);\n window.removeEventListener('mouseup', handleMouseUp);\n };\n\n window.addEventListener('mousemove', handleMouseMove);\n window.addEventListener('mouseup', handleMouseUp);\n }, [node.id, node.position.x, node.position.y, draggable, selectable, onNodeClick]);\n\n return (\n <div\n ref={wrapperRef}\n className=\"kgraph-node-wrapper\"\n style={{\n position: 'absolute',\n left: node.position.x,\n top: node.position.y,\n cursor: draggable ? 'grab' : 'default',\n userSelect: 'none',\n }}\n onMouseDown={handleMouseDown}\n >\n <HandleContext.Provider value={{ nodeId: node.id, onConnectionStart }}>\n <NodeComponent\n id={node.id}\n data={node.data}\n selected={node.selected || false}\n type={node.type}\n />\n </HandleContext.Provider>\n </div>\n );\n};\n\n// Context for passing nodeId to Handle components nested inside node components\ninterface HandleContextValue {\n nodeId: string;\n onConnectionStart?: (nodeId: string, handleId: string, type: 'source' | 'target', e: React.MouseEvent) => void;\n}\n\nconst HandleContext = React.createContext<HandleContextValue>({ nodeId: '' });\nexport const useHandleContext = () => React.useContext(HandleContext);\n\n// ============================================================================\n// NodeRenderer - renders all visible nodes\n// ============================================================================\n\ninterface NodeRendererProps {\n nodes: KGraphNode[];\n nodeTypes: Record<string, React.ComponentType<NodeComponentProps>>;\n defaultNodeType?: React.ComponentType<NodeComponentProps>;\n onNodesChange?: (changes: NodeChange[]) => void;\n snapToGrid: boolean;\n snapGrid: [number, number];\n draggable: boolean;\n selectable: boolean;\n onNodeClick?: (event: React.MouseEvent, node: KGraphNode) => void;\n onConnectionStart?: (nodeId: string, handleId: string, type: 'source' | 'target', e: React.MouseEvent) => void;\n zoom: number;\n}\n\nconst NodeRenderer: React.FC<NodeRendererProps> = ({\n nodes,\n nodeTypes,\n defaultNodeType,\n onNodesChange,\n snapToGrid,\n snapGrid,\n draggable,\n selectable,\n onNodeClick,\n onConnectionStart,\n zoom,\n}) => {\n const DefaultNode: React.ComponentType<NodeComponentProps> = defaultNodeType || (({ data }) => (\n <div style={{\n padding: '10px 20px',\n border: '2px solid #8b5cf6',\n borderRadius: 4,\n background: '#1a1a2e',\n color: '#fff',\n fontSize: 14,\n }}>\n {data.label || 'Node'}\n </div>\n ));\n\n return (\n <>\n {nodes.filter(n => !n.hidden).map(node => {\n const Component = nodeTypes[node.type] || DefaultNode;\n return (\n <NodeWrapper\n key={node.id}\n node={node}\n nodeComponent={Component}\n onNodesChange={onNodesChange}\n snapToGrid={snapToGrid}\n snapGrid={snapGrid}\n draggable={draggable}\n selectable={selectable}\n onNodeClick={onNodeClick}\n onConnectionStart={onConnectionStart}\n zoom={zoom}\n />\n );\n })}\n </>\n );\n};\n\nexport default NodeRenderer;\n","import { HandlePosition } from './types';\n\n/**\n * Compute a cubic bezier path between two points with directional control points.\n * Drop-in replacement for ReactFlow's getBezierPath — uses the same control point\n * algorithm so curves look identical.\n *\n * Returns [pathString, labelX, labelY, offsetX, offsetY]\n */\nexport function getBezierPath({\n sourceX,\n sourceY,\n sourcePosition = 'bottom',\n targetX,\n targetY,\n targetPosition = 'top',\n curvature = 0.25,\n}: {\n sourceX: number;\n sourceY: number;\n sourcePosition?: HandlePosition;\n targetX: number;\n targetY: number;\n targetPosition?: HandlePosition;\n curvature?: number;\n}): [string, number, number, number, number] {\n const [sourceControlX, sourceControlY] = getControlWithCurvature(\n sourcePosition, sourceX, sourceY, targetX, targetY, curvature,\n );\n const [targetControlX, targetControlY] = getControlWithCurvature(\n targetPosition, targetX, targetY, sourceX, sourceY, curvature,\n );\n\n const path = `M${sourceX},${sourceY} C${sourceControlX},${sourceControlY} ${targetControlX},${targetControlY} ${targetX},${targetY}`;\n\n // Label center using cubic bezier at t=0.5 (matching ReactFlow's getBezierEdgeCenter)\n const labelX = sourceX * 0.125 + sourceControlX * 0.375 + targetControlX * 0.375 + targetX * 0.125;\n const labelY = sourceY * 0.125 + sourceControlY * 0.375 + targetControlY * 0.375 + targetY * 0.125;\n\n const offsetX = Math.abs(labelX - sourceX);\n const offsetY = Math.abs(labelY - sourceY);\n\n return [path, labelX, labelY, offsetX, offsetY];\n}\n\n/**\n * ReactFlow-compatible control offset:\n * - When target is in the natural direction from the handle: offset = 0.5 * distance\n * - When target is in the opposite direction: offset = curvature * 25 * sqrt(-distance)\n */\nfunction calculateControlOffset(distance: number, curvature: number): number {\n if (distance >= 0) {\n return 0.5 * distance;\n }\n return curvature * 25 * Math.sqrt(-distance);\n}\n\nfunction getControlWithCurvature(\n pos: HandlePosition,\n x1: number,\n y1: number,\n x2: number,\n y2: number,\n c: number,\n): [number, number] {\n switch (pos) {\n case 'left':\n return [x1 - calculateControlOffset(x1 - x2, c), y1];\n case 'right':\n return [x1 + calculateControlOffset(x2 - x1, c), y1];\n case 'top':\n return [x1, y1 - calculateControlOffset(y1 - y2, c)];\n case 'bottom':\n return [x1, y1 + calculateControlOffset(y2 - y1, c)];\n default:\n return [x1, y1 + calculateControlOffset(y2 - y1, c)];\n }\n}\n","import React from 'react';\nimport { KGraphEdge, EdgeComponentProps, HandlePosition } from './types';\nimport { getBezierPath } from './bezier';\nimport { useKGraphContext } from './KGraphProvider';\n\n// ============================================================================\n// Default Edge Component\n// ============================================================================\n\nconst DefaultEdge: React.FC<EdgeComponentProps> = ({\n sourceX,\n sourceY,\n targetX,\n targetY,\n sourcePosition,\n targetPosition,\n selected,\n}) => {\n const [edgePath] = getBezierPath({\n sourceX,\n sourceY,\n sourcePosition,\n targetX,\n targetY,\n targetPosition,\n });\n\n return (\n <g>\n <path\n d={edgePath}\n fill=\"none\"\n stroke=\"transparent\"\n strokeWidth={20}\n style={{ cursor: 'pointer' }}\n />\n <path\n d={edgePath}\n fill=\"none\"\n stroke={selected ? '#a78bfa' : '#8b5cf6'}\n strokeWidth={selected ? 2.5 : 1.5}\n markerEnd={selected ? 'url(#kgraph-arrow-selected)' : 'url(#kgraph-arrow)'}\n style={{ cursor: 'pointer' }}\n />\n </g>\n );\n};\n\n// ============================================================================\n// EdgeRenderer\n// ============================================================================\n\n// Map handle IDs to positions (matches the convention from CustomStudio.jsx)\nfunction handleIdToPosition(handleId?: string): HandlePosition {\n if (!handleId) return 'bottom';\n // target-1/source-1 = top, target-2/source-2 = left,\n // target-3/source-3 = right, target-4/source-4 = bottom\n const num = handleId.split('-')[1];\n switch (num) {\n case '1': return 'top';\n case '2': return 'left';\n case '3': return 'right';\n case '4': return 'bottom';\n default: return 'bottom';\n }\n}\n\ninterface EdgeRendererProps {\n edges: KGraphEdge[];\n edgeTypes: Record<string, React.ComponentType<EdgeComponentProps>>;\n onEdgeClick?: (event: React.MouseEvent, edge: KGraphEdge) => void;\n selectedEdgeId?: string | null;\n}\n\nconst EdgeRenderer: React.FC<EdgeRendererProps> = ({\n edges,\n edgeTypes,\n onEdgeClick,\n selectedEdgeId,\n}) => {\n const { getHandlePosition, nodes } = useKGraphContext();\n\n return (\n <g className=\"kgraph-edges\">\n {edges.map(edge => {\n // Look up handle positions\n const sourceHandle = getHandlePosition(edge.source, edge.sourceHandle || 'source-4');\n const targetHandle = getHandlePosition(edge.target, edge.targetHandle || 'target-1');\n\n // Fallback: use node positions if handles aren't registered yet\n const sourceNode = nodes.find(n => n.id === edge.source);\n const targetNode = nodes.find(n => n.id === edge.target);\n\n if (!sourceNode && !sourceHandle) return null;\n if (!targetNode && !targetHandle) return null;\n\n const sourceX = sourceHandle?.x ?? (sourceNode!.position.x + (sourceNode!.width || 200) / 2);\n const sourceY = sourceHandle?.y ?? (sourceNode!.position.y + (sourceNode!.height || 100));\n const targetX = targetHandle?.x ?? (targetNode!.position.x + (targetNode!.width || 200) / 2);\n const targetY = targetHandle?.y ?? targetNode!.position.y;\n\n const sourcePosition = sourceHandle?.position ?? handleIdToPosition(edge.sourceHandle);\n const targetPosition = targetHandle?.position ?? handleIdToPosition(edge.targetHandle);\n\n const isSelected = edge.selected || edge.id === selectedEdgeId;\n const EdgeComponent = edgeTypes[edge.type || 'default'] || edgeTypes['default'] || DefaultEdge;\n\n return (\n <g\n key={edge.id}\n className=\"kgraph-edge\"\n onClick={(e) => onEdgeClick?.(e, edge)}\n >\n <EdgeComponent\n id={edge.id}\n sourceX={sourceX}\n sourceY={sourceY}\n targetX={targetX}\n targetY={targetY}\n sourcePosition={sourcePosition}\n targetPosition={targetPosition}\n selected={isSelected}\n data={edge.data}\n animated={edge.animated}\n />\n </g>\n );\n })}\n </g>\n );\n};\n\nexport default EdgeRenderer;\n","import React from 'react';\nimport { getBezierPath } from './bezier';\nimport { HandlePosition } from './types';\n\ninterface ConnectionLineProps {\n sourceX: number;\n sourceY: number;\n sourcePosition: HandlePosition;\n targetX: number;\n targetY: number;\n}\n\nconst ConnectionLine: React.FC<ConnectionLineProps> = ({\n sourceX,\n sourceY,\n sourcePosition,\n targetX,\n targetY,\n}) => {\n // Pick a reasonable target position based on relative location\n let targetPosition: HandlePosition = 'top';\n const dx = targetX - sourceX;\n const dy = targetY - sourceY;\n if (Math.abs(dx) > Math.abs(dy)) {\n targetPosition = dx > 0 ? 'left' : 'right';\n } else {\n targetPosition = dy > 0 ? 'top' : 'bottom';\n }\n\n const [path] = getBezierPath({\n sourceX,\n sourceY,\n sourcePosition,\n targetX,\n targetY,\n targetPosition,\n });\n\n return (\n <g className=\"kgraph-connection-line\">\n <path\n d={path}\n fill=\"none\"\n stroke=\"#8b5cf6\"\n strokeWidth={2}\n strokeDasharray=\"6 3\"\n opacity={0.8}\n />\n <circle\n cx={targetX}\n cy={targetY}\n r={6}\n fill=\"#8b5cf6\"\n opacity={0.6}\n />\n </g>\n );\n};\n\nexport default ConnectionLine;\n","import React from 'react';\nimport { KGraphViewport } from './types';\n\ninterface DotGridProps {\n viewport: KGraphViewport;\n gap?: number;\n color?: string;\n size?: number;\n}\n\nconst DotGrid: React.FC<DotGridProps> = ({\n viewport,\n gap = 32,\n color = 'rgba(255, 255, 255, 0.15)',\n size = 1.5,\n}) => {\n const scaledGap = gap * viewport.zoom;\n const scaledSize = size * viewport.zoom;\n const patternId = 'kgraph-dot-pattern';\n\n // Offset pattern to follow viewport\n const offsetX = viewport.x % scaledGap;\n const offsetY = viewport.y % scaledGap;\n\n return (\n <svg\n className=\"kgraph-background\"\n style={{\n position: 'absolute',\n inset: 0,\n width: '100%',\n height: '100%',\n pointerEvents: 'none',\n }}\n >\n <defs>\n <pattern\n id={patternId}\n x={offsetX}\n y={offsetY}\n width={scaledGap}\n height={scaledGap}\n patternUnits=\"userSpaceOnUse\"\n >\n <circle\n cx={scaledSize}\n cy={scaledSize}\n r={scaledSize}\n fill={color}\n />\n </pattern>\n </defs>\n <rect\n width=\"100%\"\n height=\"100%\"\n fill={`url(#${patternId})`}\n />\n </svg>\n );\n};\n\nexport default DotGrid;\n","import React, { useRef, useCallback, useMemo } from 'react';\nimport { KGraphNode, KGraphViewport } from './types';\n\ninterface MiniMapProps {\n nodes: KGraphNode[];\n viewport: KGraphViewport;\n width?: number;\n height?: number;\n nodeColor?: string | ((node: KGraphNode) => string);\n maskColor?: string;\n backgroundColor?: string;\n borderColor?: string;\n onViewportChange?: (viewport: KGraphViewport) => void;\n containerWidth: number;\n containerHeight: number;\n}\n\nconst MiniMap: React.FC<MiniMapProps> = ({\n nodes,\n viewport,\n width = 200,\n height = 150,\n nodeColor = '#60a5fa',\n maskColor = 'rgba(14, 14, 16, 0.9)',\n backgroundColor = '#161618',\n borderColor = '#333338',\n onViewportChange,\n containerWidth,\n containerHeight,\n}) => {\n const miniMapRef = useRef<SVGSVGElement>(null);\n\n // Compute graph bounds\n const bounds = useMemo(() => {\n if (nodes.length === 0) return { minX: 0, minY: 0, maxX: 1000, maxY: 1000 };\n\n let minX = Infinity, minY = Infinity, maxX = -Infinity, maxY = -Infinity;\n for (const node of nodes) {\n const w = node.width || 200;\n const h = node.height || 100;\n minX = Math.min(minX, node.position.x);\n minY = Math.min(minY, node.position.y);\n maxX = Math.max(maxX, node.position.x + w);\n maxY = Math.max(maxY, node.position.y + h);\n }\n\n // Add padding\n const padX = (maxX - minX) * 0.2;\n const padY = (maxY - minY) * 0.2;\n return {\n minX: minX - padX,\n minY: minY - padY,\n maxX: maxX + padX,\n maxY: maxY + padY,\n };\n }, [nodes]);\n\n const graphW = bounds.maxX - bounds.minX;\n const graphH = bounds.maxY - bounds.minY;\n const scale = Math.min(width / graphW, height / graphH);\n\n // Viewport rectangle in minimap space\n const viewRect = useMemo(() => {\n const vx = (-viewport.x / viewport.zoom - bounds.minX) * scale;\n const vy = (-viewport.y / viewport.zoom - bounds.minY) * scale;\n const vw = (containerWidth / viewport.zoom) * scale;\n const vh = (containerHeight / viewport.zoom) * scale;\n return { x: vx, y: vy, width: vw, height: vh };\n }, [viewport, bounds, scale, containerWidth, containerHeight]);\n\n const getColor = useCallback((node: KGraphNode) => {\n if (typeof nodeColor === 'function') return nodeColor(node);\n return nodeColor;\n }, [nodeColor]);\n\n // Click on minimap to pan\n const handleClick = useCallback((e: React.MouseEvent<SVGSVGElement>) => {\n if (!miniMapRef.current || !onViewportChange) return;\n const rect = miniMapRef.current.getBoundingClientRect();\n const clickX = e.clientX - rect.left;\n const clickY = e.clientY - rect.top;\n\n // Convert minimap click to canvas coordinates\n const canvasX = clickX / scale + bounds.minX;\n const canvasY = clickY / scale + bounds.minY;\n\n // Center viewport on clicked point\n onViewportChange({\n x: -(canvasX * viewport.zoom - containerWidth / 2),\n y: -(canvasY * viewport.zoom - containerHeight / 2),\n zoom: viewport.zoom,\n });\n }, [bounds, scale, viewport.zoom, containerWidth, containerHeight, onViewportChange]);\n\n return (\n <div\n className=\"kgraph-minimap\"\n style={{\n position: 'absolute',\n bottom: 10,\n right: 10,\n zIndex: 20,\n borderRadius: 2,\n overflow: 'hidden',\n border: `1px solid ${borderColor}`,\n }}\n >\n <svg\n ref={miniMapRef}\n width={width}\n height={height}\n style={{ backgroundColor, display: 'block', cursor: 'pointer' }}\n onClick={handleClick}\n >\n {/* Nodes */}\n {nodes.filter(n => !n.hidden).map(node => {\n const nx = (node.position.x - bounds.minX) * scale;\n const ny = (node.position.y - bounds.minY) * scale;\n const nw = (node.width || 200) * scale;\n const nh = (node.height || 100) * scale;\n return (\n <rect\n key={node.id}\n x={nx}\n y={ny}\n width={Math.max(nw, 4)}\n height={Math.max(nh, 3)}\n fill={getColor(node)}\n rx={1}\n />\n );\n })}\n\n {/* Mask everything outside viewport */}\n <rect\n x={0} y={0}\n width={width} height={viewRect.y}\n fill={maskColor}\n />\n <rect\n x={0} y={viewRect.y + viewRect.height}\n width={width} height={height - viewRect.y - viewRect.height}\n fill={maskColor}\n />\n <rect\n x={0} y={viewRect.y}\n width={viewRect.x} height={viewRect.height}\n fill={maskColor}\n />\n <rect\n x={viewRect.x + viewRect.width} y={viewRect.y}\n width={width - viewRect.x - viewRect.width} height={viewRect.height}\n fill={maskColor}\n />\n\n {/* Viewport indicator */}\n <rect\n x={viewRect.x}\n y={viewRect.y}\n width={viewRect.width}\n height={viewRect.height}\n fill=\"none\"\n stroke=\"rgba(96, 165, 250, 0.5)\"\n strokeWidth={1.5}\n />\n </svg>\n </div>\n );\n};\n\nexport default MiniMap;\n","import React, { useCallback, useRef, useState, useEffect } from 'react';\nimport {\n KGraphCanvasProps,\n KGraphViewport,\n NodeChange,\n EdgeChange,\n HandlePosition,\n KGraphNode,\n KGraphEdge,\n} from './types';\nimport { KGraphProvider, useKGraphContext } from './KGraphProvider';\nimport NodeRenderer from './NodeRenderer';\nimport EdgeRenderer from './EdgeRenderer';\nimport ConnectionLine from './ConnectionLine';\nimport DotGrid from './DotGrid';\nimport MiniMap from './MiniMap';\n\n// ============================================================================\n// Inner Canvas (requires KGraphProvider context)\n// ============================================================================\n\ninterface InnerCanvasProps extends KGraphCanvasProps {}\n\nconst InnerCanvas: React.FC<InnerCanvasProps> = ({\n nodes,\n edges,\n onNodesChange,\n onEdgesChange,\n onConnect,\n onNodeClick,\n onEdgeClick,\n onPaneClick,\n onDrop,\n onDragOver,\n nodeTypes = {},\n edgeTypes = {},\n snapToGrid = true,\n snapGrid = [16, 16],\n panOnDrag = true,\n zoomOnScroll = true,\n nodesDraggable = true,\n nodesConnectable = true,\n elementsSelectable = true,\n fitView: fitViewOnMount = false,\n showMiniMap = true,\n showBackground = true,\n backgroundGap = 32,\n minZoom = 0.1,\n maxZoom = 4,\n className = '',\n style = {},\n children,\n}) => {\n const ctx = useKGraphContext();\n const { viewport, setViewport, containerRef, screenToCanvasPosition } = ctx;\n\n const panRef = useRef<{\n startX: number;\n startY: number;\n startVX: number;\n startVY: number;\n isPanning: boolean;\n } | null>(null);\n\n const [connectionDrag, setConnectionDrag] = useState<{\n sourceNodeId: string;\n sourceHandleId: string;\n sourcePosition: HandlePosition;\n sourceX: number;\n sourceY: number;\n mouseX: number;\n mouseY: number;\n } | null>(null);\n\n const [containerSize, setContainerSize] = useState({ width: 0, height: 0 });\n\n // Refs for stable access in pane-click closures (avoids stale nodes/edges)\n const nodesRef = useRef(nodes);\n nodesRef.current = nodes;\n const edgesRef = useRef(edges);\n edgesRef.current = edges;\n const onNodesChangeRef = useRef(onNodesChange);\n onNodesChangeRef.current = onNodesChange;\n const onEdgesChangeRef = useRef(onEdgesChange);\n onEdgesChangeRef.current = onEdgesChange;\n\n // Deselect all nodes and edges (uses refs so it's closure-safe)\n const deselectAll = useCallback(() => {\n const nodeDeselects: NodeChange[] = nodesRef.current\n .filter(n => n.selected)\n .map(n => ({ type: 'select' as const, id: n.id, selected: false }));\n const edgeDeselects: EdgeChange[] = edgesRef.current\n .filter(e => e.selected)\n .map(e => ({ type: 'select' as const, id: e.id, selected: false }));\n if (nodeDeselects.length) onNodesChangeRef.current?.(nodeDeselects);\n if (edgeDeselects.length) onEdgesChangeRef.current?.(edgeDeselects);\n }, []);\n\n // Track container size\n useEffect(() => {\n if (!containerRef.current) return;\n const ro = new ResizeObserver(entries => {\n for (const entry of entries) {\n setContainerSize({\n width: entry.contentRect.width,\n height: entry.contentRect.height,\n });\n }\n });\n ro.observe(containerRef.current);\n return () => ro.disconnect();\n }, [containerRef]);\n\n // Fit view on mount\n useEffect(() => {\n if (fitViewOnMount && nodes.length > 0) {\n // Small delay to allow handle registration\n const t = setTimeout(() => ctx.fitView({ padding: 0.2 }), 100);\n return () => clearTimeout(t);\n }\n }, [fitViewOnMount, nodes.length > 0]); // eslint-disable-line react-hooks/exhaustive-deps\n\n // ==================== Pan ====================\n const handlePaneMouseDown = useCallback((e: React.MouseEvent) => {\n // Only start pan from the canvas itself (not nodes/edges)\n if ((e.target as HTMLElement).closest('.kgraph-node-wrapper')) return;\n if ((e.target as HTMLElement).closest('.kgraph-edge-label')) return;\n\n if (!panOnDrag) {\n // Still handle pane click for deselection\n deselectAll();\n onPaneClick?.(e);\n return;\n }\n\n // Left button only\n if (e.button !== 0) return;\n\n panRef.current = {\n startX: e.clientX,\n startY: e.clientY,\n startVX: viewport.x,\n startVY: viewport.y,\n isPanning: false,\n };\n\n const handleMouseMove = (ev: MouseEvent) => {\n const pan = panRef.current;\n if (!pan) return;\n const dx = ev.clientX - pan.startX;\n const dy = ev.clientY - pan.startY;\n\n if (!pan.isPanning && (Math.abs(dx) > 3 || Math.abs(dy) > 3)) {\n pan.isPanning = true;\n }\n\n if (!pan.isPanning) return;\n\n setViewport(v => ({\n ...v,\n x: pan.startVX + dx,\n y: pan.startVY + dy,\n }));\n };\n\n const handleMouseUp = (ev: MouseEvent) => {\n if (panRef.current && !panRef.current.isPanning) {\n // It was a click, not a drag — deselect all nodes/edges\n deselectAll();\n onPaneClick?.(ev as unknown as React.MouseEvent);\n }\n panRef.current = null;\n window.removeEventListener('mousemove', handleMouseMove);\n window.removeEventListener('mouseup', handleMouseUp);\n };\n\n window.addEventListener('mousemove', handleMouseMove);\n window.addEventListener('mouseup', handleMouseUp);\n }, [panOnDrag, viewport, setViewport, onPaneClick]);\n\n // ==================== Zoom (wheel + trackpad pinch) ====================\n // Use a native event listener so we can preventDefault on non-passive wheel events.\n // Trackpad pinch-to-zoom fires wheel events with ctrlKey=true and smaller deltaY.\n useEffect(() => {\n const el = containerRef.current;\n if (!el) return;\n\n const handleWheel = (e: WheelEvent) => {\n if (!zoomOnScroll) return;\n e.preventDefault();\n\n const rect = el.getBoundingClientRect();\n const mouseX = e.clientX - rect.left;\n const mouseY = e.clientY - rect.top;\n\n setViewport(v => {\n // ctrlKey = trackpad pinch gesture — use larger multiplier\n const sensitivity = e.ctrlKey ? 0.01 : 0.001;\n const zoomDelta = -e.deltaY * sensitivity;\n const newZoom = Math.min(Math.max(v.zoom * (1 + zoomDelta), minZoom), maxZoom);\n\n // Zoom toward mouse/finger position\n return {\n x: mouseX - (mouseX - v.x) * (newZoom / v.zoom),\n y: mouseY - (mouseY - v.y) * (newZoom / v.zoom),\n zoom: newZoom,\n };\n });\n };\n\n el.addEventListener('wheel', handleWheel, { passive: false });\n return () => el.removeEventListener('wheel', handleWheel);\n }, [zoomOnScroll, setViewport, containerRef, minZoom, maxZoom]);\n\n // ==================== Connection Drawing ====================\n const handleConnectionStart = useCallback((nodeId: string, handleId: string, type: 'source' | 'target', e: React.MouseEvent) => {\n if (!nodesConnectable) return;\n\n const handle = ctx.getHandlePosition(nodeId, handleId);\n if (!handle) return;\n\n setConnectionDrag({\n sourceNodeId: nodeId,\n sourceHandleId: handleId,\n sourcePosition: handle.position,\n sourceX: handle.x,\n sourceY: handle.y,\n mouseX: handle.x,\n mouseY: handle.y,\n });\n\n const handleMouseMove = (ev: MouseEvent) => {\n const pos = screenToCanvasPosition(ev.clientX, ev.clientY);\n setConnectionDrag(prev => prev ? { ...prev, mouseX: pos.x, mouseY: pos.y } : null);\n };\n\n const handleMouseUp = (ev: MouseEvent) => {\n // Check if mouse is over a handle\n const target = document.elementFromPoint(ev.clientX, ev.clientY);\n const handleEl = target?.closest?.('[data-handleid]');\n\n if (handleEl) {\n const targetNodeId = handleEl.getAttribute('data-nodeid');\n let targetHandleId = handleEl.getAttribute('data-handleid');\n const targetHandleType = handleEl.getAttribute('data-handletype');\n\n // If we landed on a source handle (invisible, stacked on top),\n // use the corresponding target handle ID instead\n if (targetHandleType === 'source' && targetHandleId) {\n targetHandleId = targetHandleId.replace('source-', 'target-');\n }\n\n if (targetNodeId && targetHandleId && targetNodeId !== nodeId) {\n onConnect?.({\n source: nodeId,\n target: targetNodeId,\n sourceHandle: handleId,\n targetHandle: targetHandleId,\n });\n }\n }\n\n setConnectionDrag(null);\n window.removeEventListener('mousemove', handleMouseMove);\n window.removeEventListener('mouseup', handleMouseUp);\n };\n\n window.addEventListener('mousemove', handleMouseMove);\n window.addEventListener('mouseup', handleMouseUp);\n }, [nodesConnectable, ctx, screenToCanvasPosition, onConnect]);\n\n // ==================== Drag & Drop ====================\n const handleDragOver = useCallback((e: React.DragEvent) => {\n e.preventDefault();\n e.dataTransfer.dropEffect = 'move';\n onDragOver?.(e);\n }, [onDragOver]);\n\n const handleDrop = useCallback((e: React.DragEvent) => {\n e.preventDefault();\n const position = screenToCanvasPosition(e.clientX, e.clientY);\n onDrop?.(e, position);\n }, [screenToCanvasPosition, onDrop]);\n\n // ==================== Node Click ====================\n const handleNodeClick = useCallback((e: React.MouseEvent, node: KGraphNode) => {\n if (!elementsSelectable) return;\n\n const isMultiSelect = e.shiftKey || e.metaKey;\n\n const nodeChanges: NodeChange[] = [];\n if (isMultiSelect) {\n // Toggle clicked node's selection without affecting others\n nodeChanges.push({ type: 'select', id: node.id, selected: !node.selected });\n } else {\n // Select clicked node, deselect all others\n for (const n of nodes) {\n if (n.id === node.id && !n.selected) {\n nodeChanges.push({ type: 'select', id: n.id, selected: true });\n } else if (n.id !== node.id && n.selected) {\n nodeChanges.push({ type: 'select', id: n.id, selected: false });\n }\n }\n }\n if (nodeChanges.length) onNodesChange?.(nodeChanges);\n\n // Deselect all edges (unless multi-select)\n if (!isMultiSelect) {\n const edgeDeselects: EdgeChange[] = edges\n .filter(ed => ed.selected)\n .map(ed => ({ type: 'select' as const, id: ed.id, selected: false }));\n if (edgeDeselects.length) onEdgesChange?.(edgeDeselects);\n }\n\n onNodeClick?.(e, node);\n }, [elementsSelectable, nodes, edges, onNodesChange, onEdgesChange, onNodeClick]);\n\n // ==================== Edge Click ====================\n const handleEdgeClick = useCallback((e: React.MouseEvent, edge: KGraphEdge) => {\n if (!elementsSelectable) return;\n e.stopPropagation();\n\n // Select clicked edge, deselect all others\n const edgeChanges: EdgeChange[] = [];\n for (const ed of edges) {\n if (ed.id === edge.id && !ed.selected) {\n edgeChanges.push({ type: 'select', id: ed.id, selected: true });\n } else if (ed.id !== edge.id && ed.selected) {\n edgeChanges.push({ type: 'select', id: ed.id, selected: false });\n }\n }\n if (edgeChanges.length) onEdgesChange?.(edgeChanges);\n\n // Deselect all nodes\n const nodeDeselects: NodeChange[] = nodes\n .filter(n => n.selected)\n .map(n => ({ type: 'select' as const, id: n.id, selected: false }));\n if (nodeDeselects.length) onNodesChange?.(nodeDeselects);\n\n onEdgeClick?.(e, edge);\n }, [elementsSelectable, nodes, edges, onNodesChange, onEdgesChange, onEdgeClick]);\n\n // ==================== Keyboard ====================\n useEffect(() => {\n const handleKeyDown = (e: KeyboardEvent) => {\n if (e.key === 'Backspace' || e.key === 'Delete') {\n const target = e.target as HTMLElement;\n\n // Skip if focus is in any interactive element or inside a dialog\n if (\n target.tagName === 'INPUT' ||\n target.tagName === 'TEXTAREA' ||\n target.tagName === 'SELECT' ||\n target.isContentEditable ||\n target.closest('[role=\"dialog\"]') ||\n target.closest('[role=\"combobox\"]') ||\n target.closest('[role=\"listbox\"]')\n ) return;\n\n const selectedNodes = nodes.filter(n => n.selected);\n const selectedEdges = edges.filter(ed => ed.selected);\n\n if (selectedNodes.length) {\n onNodesChange?.(selectedNodes.map(n => ({ type: 'remove' as const, id: n.id })));\n }\n if (selectedEdges.length) {\n onEdgesChange?.(selectedEdges.map(ed => ({ type: 'remove' as const, id: ed.id })));\n }\n }\n };\n\n window.addEventListener('keydown', handleKeyDown);\n return () => window.removeEventListener('keydown', handleKeyDown);\n }, [nodes, edges, onNodesChange, onEdgesChange]);\n\n const transformStr = `translate(${viewport.x}px, ${viewport.y}px) scale(${viewport.zoom})`;\n\n return (\n <div\n ref={containerRef as React.RefObject<HTMLDivElement>}\n className={`kgraph-canvas ${className}`}\n style={{\n width: '100%',\n height: '100%',\n position: 'relative',\n overflow: 'hidden',\n backgroundColor: '#0e0e10',\n ...style,\n }}\n onMouseDown={handlePaneMouseDown}\n onDragOver={handleDragOver}\n onDrop={handleDrop}\n >\n {/* Background layer */}\n {showBackground && (\n <DotGrid viewport={viewport} gap={backgroundGap} />\n )}\n\n {/* SVG layer for edges */}\n <svg\n className=\"kgraph-svg-layer\"\n style={{\n position: 'absolute',\n inset: 0,\n width: '100%',\n height: '100%',\n pointerEvents: 'none',\n overflow: 'visible',\n }}\n >\n <defs>\n <marker id=\"kgraph-arrow\" viewBox=\"0 0 12 12\" refX=\"12\" refY=\"6\" markerWidth=\"6\" markerHeight=\"6\" orient=\"auto-start-reverse\">\n <path d=\"M 0 1 L 12 6 L 0 11 z\" fill=\"#8b5cf6\" />\n </marker>\n <marker id=\"kgraph-arrow-selected\" viewBox=\"0 0 12 12\" refX=\"12\" refY=\"6\" markerWidth=\"6\" markerHeight=\"6\" orient=\"auto-start-reverse\">\n <path d=\"M 0 1 L 12 6 L 0 11 z\" fill=\"#a78bfa\" />\n </marker>\n </defs>\n <g\n transform={`translate(${viewport.x}, ${viewport.y}) scale(${viewport.zoom})`}\n style={{ pointerEvents: 'all' }}\n >\n <EdgeRenderer\n edges={edges}\n edgeTypes={edgeTypes}\n onEdgeClick={handleEdgeClick}\n />\n\n {/* Connection line while drawing */}\n {connectionDrag && (\n <ConnectionLine\n sourceX={connectionDrag.sourceX}\n sourceY={connectionDrag.sourceY}\n sourcePosition={connectionDrag.sourcePosition}\n targetX={connectionDrag.mouseX}\n targetY={connectionDrag.mouseY}\n />\n )}\n </g>\n </svg>\n\n {/* HTML layer for nodes */}\n <div\n className=\"kgraph-node-layer\"\n style={{\n position: 'absolute',\n inset: 0,\n transformOrigin: '0 0',\n transform: transformStr,\n pointerEvents: 'none',\n }}\n >\n <div style={{ pointerEvents: 'all' }}>\n <NodeRenderer\n nodes={nodes}\n nodeTypes={nodeTypes}\n onNodesChange={onNodesChange}\n snapToGrid={snapToGrid}\n snapGrid={snapGrid}\n draggable={nodesDraggable}\n selectable={elementsSelectable}\n onNodeClick={handleNodeClick}\n onConnectionStart={handleConnectionStart}\n zoom={viewport.zoom}\n />\n </div>\n </div>\n\n {/* Edge label overlay layer (HTML, inside viewport transform) */}\n <div\n className=\"kgraph-edge-label-layer\"\n style={{\n position: 'absolute',\n inset: 0,\n transformOrigin: '0 0',\n transform: transformStr,\n pointerEvents: 'none',\n zIndex: 10,\n }}\n >\n {/* Edge labels are rendered by custom edge components via EdgeLabel */}\n </div>\n\n {/* MiniMap */}\n {showMiniMap && containerSize.width > 0 && (\n <MiniMap\n nodes={nodes}\n viewport={viewport}\n onViewportChange={setViewport}\n containerWidth={containerSize.width}\n containerHeight={containerSize.height}\n />\n )}\n\n {/* Toolbar / overlays via children */}\n {children}\n </div>\n );\n};\n\n// ============================================================================\n// KGraphCanvas - Public component with provider\n// ============================================================================\n\nconst KGraphCanvas: React.FC<KGraphCanvasProps> = (props) => {\n return (\n <KGraphProvider\n nodes={props.nodes}\n edges={props.edges}\n minZoom={props.minZoom}\n maxZoom={props.maxZoom}\n >\n <InnerCanvas {...props} />\n </KGraphProvider>\n );\n};\n\nexport default KGraphCanvas;\n","import { useKGraphContext } from './KGraphProvider';\n\n/**\n * Public hook for accessing KGraph viewport controls.\n * Drop-in replacement for ReactFlow's useReactFlow().\n */\nexport function useKGraph() {\n const ctx = useKGraphContext();\n\n return {\n screenToCanvasPosition: ctx.screenToCanvasPosition,\n fitView: ctx.fitView,\n zoomIn: ctx.zoomIn,\n zoomOut: ctx.zoomOut,\n zoomTo: ctx.zoomTo,\n getViewport: () => ctx.viewport,\n setViewport: ctx.setViewport,\n getNodes: () => ctx.nodes,\n getEdges: () => ctx.edges,\n };\n}\n\nexport default useKGraph;\n","import React, { useCallback, useState } from 'react';\nimport { HandleProps, HandlePosition } from './types';\nimport { useHandleContext } from './NodeRenderer';\n\n// Map position to CSS placement\nfunction getPositionStyle(position: HandlePosition): React.CSSProperties {\n const base: React.CSSProperties = {\n position: 'absolute',\n zIndex: 20,\n };\n\n switch (position) {\n case 'top':\n return { ...base, top: 0, left: '50%', transform: 'translate(-50%, -50%)' };\n case 'bottom':\n return { ...base, bottom: 0, left: '50%', transform: 'translate(-50%, 50%)' };\n case 'left':\n return { ...base, left: 0, top: '50%', transform: 'translate(-50%, -50%)' };\n case 'right':\n return { ...base, right: 0, top: '50%', transform: 'translate(50%, -50%)' };\n }\n}\n\ninterface KGraphHandleProps extends HandleProps {\n nodeId?: string;\n onConnectionStart?: (nodeId: string, handleId: string, type: 'source' | 'target', e: React.MouseEvent) => void;\n}\n\nconst Handle: React.FC<KGraphHandleProps> = ({\n id,\n type,\n position,\n style,\n className = '',\n nodeId: nodeIdProp,\n onConnectionStart: onConnectionStartProp,\n}) => {\n const [hovered, setHovered] = useState(false);\n\n // Get nodeId and onConnectionStart from HandleContext if not provided as props\n const handleCtx = useHandleContext();\n const nodeId = nodeIdProp ?? handleCtx.nodeId;\n const onConnectionStart = onConnectionStartProp ?? handleCtx.onConnectionStart;\n\n const handleMouseDown = useCallback((e: React.MouseEvent) => {\n if (type === 'source' && nodeId && onConnectionStart) {\n e.stopPropagation();\n e.preventDefault();\n onConnectionStart(nodeId, id, type, e);\n }\n }, [type, nodeId, id, onConnectionStart]);\n\n const posStyle = getPositionStyle(position);\n\n // Default colors — source handles are slightly brighter to signal \"drag from here\"\n const defaultBg = type === 'source' ? '#8b5cf6' : '#6d28d9';\n const hoverBg = type === 'source' ? '#a78bfa' : '#8b5cf6';\n const borderColor = type === 'source' ? '#a78bfa' : '#7c3aed';\n\n return (\n <div\n className={`kgraph-handle kgraph-handle-${type} kgraph-handle-${position} ${className}`}\n style={{\n width: hovered ? 12 : 8,\n height: hovered ? 12 : 8,\n borderRadius: '50%',\n background: style?.background as string || (hovered ? hoverBg : defaultBg),\n border: `2px solid ${style?.borderColor as string || borderColor}`,\n cursor: type === 'source' ? 'crosshair' : 'default',\n transition: 'width 0.15s, height 0.15s, background 0.15s, box-shadow 0.15s',\n boxShadow: hovered ? `0 0 6px ${borderColor}88` : 'none',\n ...posStyle,\n ...style,\n }}\n data-handleid={id}\n data-handletype={type}\n data-handleposition={position}\n data-nodeid={nodeId}\n onMouseDown={handleMouseDown}\n onMouseEnter={() => setHovered(true)}\n onMouseLeave={() => setHovered(false)}\n />\n );\n};\n\nexport default Handle;\n","import React from 'react';\n\ninterface EdgeLabelProps {\n x: number;\n y: number;\n zoom: number;\n children: React.ReactNode;\n}\n\n/**\n * EdgeLabel renders children as an HTML overlay at the given canvas coordinates.\n * Replaces ReactFlow's EdgeLabelRenderer.\n * The content is scaled inversely to the zoom level so it stays a consistent screen size.\n */\nconst EdgeLabel: React.FC<EdgeLabelProps> = ({ x, y, zoom, children }) => {\n return (\n <div\n className=\"kgraph-edge-label\"\n style={{\n position: 'absolute',\n left: x,\n top: y,\n transform: `translate(-50%, -50%) scale(${1 / zoom})`,\n transformOrigin: 'center center',\n pointerEvents: 'all',\n zIndex: 10,\n }}\n >\n {children}\n </div>\n );\n};\n\nexport default EdgeLabel;\n","import { KGraphNode, KGraphEdge, NodeChange, EdgeChange } from './types';\n\n/**\n * Apply an array of node changes immutably.\n * Drop-in replacement for ReactFlow's applyNodeChanges.\n */\nexport function applyNodeChanges(changes: NodeChange[], nodes: KGraphNode[]): KGraphNode[] {\n let result = nodes;\n\n for (const change of changes) {\n switch (change.type) {\n case 'position':\n result = result.map(n =>\n n.id === change.id\n ? {\n ...n,\n position: change.position ?? n.position,\n dragging: change.dragging,\n }\n : n\n );\n break;\n\n case 'select':\n result = result.map(n =>\n n.id === change.id\n ? { ...n, selected: change.selected }\n : n\n );\n break;\n\n case 'remove':\n result = result.filter(n => n.id !== change.id);\n break;\n\n case 'add':\n result = [...result, change.item];\n break;\n\n case 'dimensions':\n result = result.map(n =>\n n.id === change.id\n ? {\n ...n,\n width: change.dimensions.width,\n height: change.dimensions.height,\n }\n : n\n );\n break;\n }\n }\n\n return result;\n}\n\n/**\n * Apply an array of edge changes immutably.\n * Drop-in replacement for ReactFlow's applyEdgeChanges.\n */\nexport function applyEdgeChanges(changes: EdgeChange[], edges: KGraphEdge[]): KGraphEdge[] {\n let result = edges;\n\n for (const change of changes) {\n switch (change.type) {\n case 'select':\n result = result.map(e =>\n e.id === change.id\n ? { ...e, selected: change.selected }\n : e\n );\n break;\n\n case 'remove':\n result = result.filter(e => e.id !== change.id);\n break;\n\n case 'add':\n result = [...result, change.item];\n break;\n }\n }\n\n return result;\n}\n"]}
1
+ {"version":3,"sources":[],"names":[],"mappings":"","file":"index.cjs"}
package/dist/index.d.cts CHANGED
@@ -1,174 +1,7 @@
1
1
  import * as React from 'react';
2
2
  import React__default from 'react';
3
-
4
- interface KGraphNode {
5
- id: string;
6
- type: string;
7
- position: {
8
- x: number;
9
- y: number;
10
- };
11
- data: Record<string, any>;
12
- selected?: boolean;
13
- dragging?: boolean;
14
- hidden?: boolean;
15
- width?: number;
16
- height?: number;
17
- group?: string;
18
- }
19
- interface KGraphEdge {
20
- id: string;
21
- source: string;
22
- target: string;
23
- sourceHandle?: string;
24
- targetHandle?: string;
25
- type?: string;
26
- data?: Record<string, any>;
27
- selected?: boolean;
28
- animated?: boolean;
29
- }
30
- interface KGraphConnection {
31
- source: string;
32
- target: string;
33
- sourceHandle?: string;
34
- targetHandle?: string;
35
- }
36
- type HandlePosition = 'top' | 'right' | 'bottom' | 'left';
37
- type HandleType = 'source' | 'target';
38
- interface HandleInfo {
39
- nodeId: string;
40
- handleId: string;
41
- type: HandleType;
42
- position: HandlePosition;
43
- x: number;
44
- y: number;
45
- }
46
- type NodeChange = {
47
- type: 'position';
48
- id: string;
49
- position?: {
50
- x: number;
51
- y: number;
52
- };
53
- dragging: boolean;
54
- } | {
55
- type: 'select';
56
- id: string;
57
- selected: boolean;
58
- } | {
59
- type: 'remove';
60
- id: string;
61
- } | {
62
- type: 'add';
63
- item: KGraphNode;
64
- } | {
65
- type: 'dimensions';
66
- id: string;
67
- dimensions: {
68
- width: number;
69
- height: number;
70
- };
71
- };
72
- type EdgeChange = {
73
- type: 'select';
74
- id: string;
75
- selected: boolean;
76
- } | {
77
- type: 'remove';
78
- id: string;
79
- } | {
80
- type: 'add';
81
- item: KGraphEdge;
82
- };
83
- interface KGraphViewport {
84
- x: number;
85
- y: number;
86
- zoom: number;
87
- }
88
- interface NodeComponentProps {
89
- id: string;
90
- data: Record<string, any>;
91
- selected: boolean;
92
- type: string;
93
- }
94
- interface EdgeComponentProps {
95
- id: string;
96
- sourceX: number;
97
- sourceY: number;
98
- targetX: number;
99
- targetY: number;
100
- sourcePosition: HandlePosition;
101
- targetPosition: HandlePosition;
102
- selected: boolean;
103
- data?: Record<string, any>;
104
- animated?: boolean;
105
- style?: React__default.CSSProperties;
106
- }
107
- interface HandleProps {
108
- id: string;
109
- type: HandleType;
110
- position: HandlePosition;
111
- style?: React__default.CSSProperties;
112
- className?: string;
113
- }
114
- interface KGraphCanvasProps {
115
- nodes: KGraphNode[];
116
- edges: KGraphEdge[];
117
- onNodesChange?: (changes: NodeChange[]) => void;
118
- onEdgesChange?: (changes: EdgeChange[]) => void;
119
- onConnect?: (connection: KGraphConnection) => void;
120
- onNodeClick?: (event: React__default.MouseEvent, node: KGraphNode) => void;
121
- onEdgeClick?: (event: React__default.MouseEvent, edge: KGraphEdge) => void;
122
- onPaneClick?: (event: React__default.MouseEvent) => void;
123
- onDrop?: (event: React__default.DragEvent, position: {
124
- x: number;
125
- y: number;
126
- }) => void;
127
- onDragOver?: (event: React__default.DragEvent) => void;
128
- nodeTypes?: Record<string, React__default.ComponentType<NodeComponentProps>>;
129
- edgeTypes?: Record<string, React__default.ComponentType<EdgeComponentProps>>;
130
- snapToGrid?: boolean;
131
- snapGrid?: [number, number];
132
- panOnDrag?: boolean;
133
- zoomOnScroll?: boolean;
134
- nodesDraggable?: boolean;
135
- nodesConnectable?: boolean;
136
- elementsSelectable?: boolean;
137
- fitView?: boolean;
138
- showMiniMap?: boolean;
139
- showBackground?: boolean;
140
- backgroundGap?: number;
141
- minZoom?: number;
142
- maxZoom?: number;
143
- className?: string;
144
- style?: React__default.CSSProperties;
145
- children?: React__default.ReactNode;
146
- }
147
- interface KGraphContextValue {
148
- viewport: KGraphViewport;
149
- setViewport: React__default.Dispatch<React__default.SetStateAction<KGraphViewport>>;
150
- screenToCanvasPosition: (screenX: number, screenY: number) => {
151
- x: number;
152
- y: number;
153
- };
154
- canvasToScreenPosition: (canvasX: number, canvasY: number) => {
155
- x: number;
156
- y: number;
157
- };
158
- fitView: (options?: {
159
- padding?: number;
160
- }) => void;
161
- zoomIn: () => void;
162
- zoomOut: () => void;
163
- zoomTo: (level: number) => void;
164
- registerHandle: (info: HandleInfo) => void;
165
- unregisterHandle: (nodeId: string, handleId: string) => void;
166
- getHandlePosition: (nodeId: string, handleId: string) => HandleInfo | undefined;
167
- getAllHandles: () => Map<string, HandleInfo>;
168
- containerRef: React__default.RefObject<HTMLDivElement | null>;
169
- nodes: KGraphNode[];
170
- edges: KGraphEdge[];
171
- }
3
+ import { K as KGraphCanvasProps, a as KGraphNode, b as KGraphEdge, c as KGraphViewport, d as KGraphContextValue, H as HandleProps, N as NodeComponentProps, e as NodeChange, E as EdgeComponentProps, f as HandlePosition, g as EdgeChange } from './types-C9DQLToO.cjs';
4
+ export { h as HandleInfo, i as HandleType, j as KGraphConnection } from './types-C9DQLToO.cjs';
172
5
 
173
6
  declare const KGraphCanvas: React__default.FC<KGraphCanvasProps>;
174
7
 
@@ -306,4 +139,4 @@ declare function applyNodeChanges(changes: NodeChange[], nodes: KGraphNode[]): K
306
139
  */
307
140
  declare function applyEdgeChanges(changes: EdgeChange[], edges: KGraphEdge[]): KGraphEdge[];
308
141
 
309
- export { ConnectionLine, DotGrid, type EdgeChange, type EdgeComponentProps, EdgeLabel, EdgeRenderer, Handle, type HandleInfo, type HandlePosition, type HandleProps, type HandleType, KGraphCanvas, type KGraphCanvasProps, type KGraphConnection, type KGraphContextValue, type KGraphEdge, type KGraphNode, KGraphProvider, type KGraphViewport, MiniMap, type NodeChange, type NodeComponentProps, NodeRenderer, applyEdgeChanges, applyNodeChanges, getBezierPath, useKGraph, useKGraphContext };
142
+ export { ConnectionLine, DotGrid, EdgeChange, EdgeComponentProps, EdgeLabel, EdgeRenderer, Handle, HandlePosition, HandleProps, KGraphCanvas, KGraphCanvasProps, KGraphContextValue, KGraphEdge, KGraphNode, KGraphProvider, KGraphViewport, MiniMap, NodeChange, NodeComponentProps, NodeRenderer, applyEdgeChanges, applyNodeChanges, getBezierPath, useKGraph, useKGraphContext };
package/dist/index.d.ts CHANGED
@@ -1,174 +1,7 @@
1
1
  import * as React from 'react';
2
2
  import React__default from 'react';
3
-
4
- interface KGraphNode {
5
- id: string;
6
- type: string;
7
- position: {
8
- x: number;
9
- y: number;
10
- };
11
- data: Record<string, any>;
12
- selected?: boolean;
13
- dragging?: boolean;
14
- hidden?: boolean;
15
- width?: number;
16
- height?: number;
17
- group?: string;
18
- }
19
- interface KGraphEdge {
20
- id: string;
21
- source: string;
22
- target: string;
23
- sourceHandle?: string;
24
- targetHandle?: string;
25
- type?: string;
26
- data?: Record<string, any>;
27
- selected?: boolean;
28
- animated?: boolean;
29
- }
30
- interface KGraphConnection {
31
- source: string;
32
- target: string;
33
- sourceHandle?: string;
34
- targetHandle?: string;
35
- }
36
- type HandlePosition = 'top' | 'right' | 'bottom' | 'left';
37
- type HandleType = 'source' | 'target';
38
- interface HandleInfo {
39
- nodeId: string;
40
- handleId: string;
41
- type: HandleType;
42
- position: HandlePosition;
43
- x: number;
44
- y: number;
45
- }
46
- type NodeChange = {
47
- type: 'position';
48
- id: string;
49
- position?: {
50
- x: number;
51
- y: number;
52
- };
53
- dragging: boolean;
54
- } | {
55
- type: 'select';
56
- id: string;
57
- selected: boolean;
58
- } | {
59
- type: 'remove';
60
- id: string;
61
- } | {
62
- type: 'add';
63
- item: KGraphNode;
64
- } | {
65
- type: 'dimensions';
66
- id: string;
67
- dimensions: {
68
- width: number;
69
- height: number;
70
- };
71
- };
72
- type EdgeChange = {
73
- type: 'select';
74
- id: string;
75
- selected: boolean;
76
- } | {
77
- type: 'remove';
78
- id: string;
79
- } | {
80
- type: 'add';
81
- item: KGraphEdge;
82
- };
83
- interface KGraphViewport {
84
- x: number;
85
- y: number;
86
- zoom: number;
87
- }
88
- interface NodeComponentProps {
89
- id: string;
90
- data: Record<string, any>;
91
- selected: boolean;
92
- type: string;
93
- }
94
- interface EdgeComponentProps {
95
- id: string;
96
- sourceX: number;
97
- sourceY: number;
98
- targetX: number;
99
- targetY: number;
100
- sourcePosition: HandlePosition;
101
- targetPosition: HandlePosition;
102
- selected: boolean;
103
- data?: Record<string, any>;
104
- animated?: boolean;
105
- style?: React__default.CSSProperties;
106
- }
107
- interface HandleProps {
108
- id: string;
109
- type: HandleType;
110
- position: HandlePosition;
111
- style?: React__default.CSSProperties;
112
- className?: string;
113
- }
114
- interface KGraphCanvasProps {
115
- nodes: KGraphNode[];
116
- edges: KGraphEdge[];
117
- onNodesChange?: (changes: NodeChange[]) => void;
118
- onEdgesChange?: (changes: EdgeChange[]) => void;
119
- onConnect?: (connection: KGraphConnection) => void;
120
- onNodeClick?: (event: React__default.MouseEvent, node: KGraphNode) => void;
121
- onEdgeClick?: (event: React__default.MouseEvent, edge: KGraphEdge) => void;
122
- onPaneClick?: (event: React__default.MouseEvent) => void;
123
- onDrop?: (event: React__default.DragEvent, position: {
124
- x: number;
125
- y: number;
126
- }) => void;
127
- onDragOver?: (event: React__default.DragEvent) => void;
128
- nodeTypes?: Record<string, React__default.ComponentType<NodeComponentProps>>;
129
- edgeTypes?: Record<string, React__default.ComponentType<EdgeComponentProps>>;
130
- snapToGrid?: boolean;
131
- snapGrid?: [number, number];
132
- panOnDrag?: boolean;
133
- zoomOnScroll?: boolean;
134
- nodesDraggable?: boolean;
135
- nodesConnectable?: boolean;
136
- elementsSelectable?: boolean;
137
- fitView?: boolean;
138
- showMiniMap?: boolean;
139
- showBackground?: boolean;
140
- backgroundGap?: number;
141
- minZoom?: number;
142
- maxZoom?: number;
143
- className?: string;
144
- style?: React__default.CSSProperties;
145
- children?: React__default.ReactNode;
146
- }
147
- interface KGraphContextValue {
148
- viewport: KGraphViewport;
149
- setViewport: React__default.Dispatch<React__default.SetStateAction<KGraphViewport>>;
150
- screenToCanvasPosition: (screenX: number, screenY: number) => {
151
- x: number;
152
- y: number;
153
- };
154
- canvasToScreenPosition: (canvasX: number, canvasY: number) => {
155
- x: number;
156
- y: number;
157
- };
158
- fitView: (options?: {
159
- padding?: number;
160
- }) => void;
161
- zoomIn: () => void;
162
- zoomOut: () => void;
163
- zoomTo: (level: number) => void;
164
- registerHandle: (info: HandleInfo) => void;
165
- unregisterHandle: (nodeId: string, handleId: string) => void;
166
- getHandlePosition: (nodeId: string, handleId: string) => HandleInfo | undefined;
167
- getAllHandles: () => Map<string, HandleInfo>;
168
- containerRef: React__default.RefObject<HTMLDivElement | null>;
169
- nodes: KGraphNode[];
170
- edges: KGraphEdge[];
171
- }
3
+ import { K as KGraphCanvasProps, a as KGraphNode, b as KGraphEdge, c as KGraphViewport, d as KGraphContextValue, H as HandleProps, N as NodeComponentProps, e as NodeChange, E as EdgeComponentProps, f as HandlePosition, g as EdgeChange } from './types-C9DQLToO.js';
4
+ export { h as HandleInfo, i as HandleType, j as KGraphConnection } from './types-C9DQLToO.js';
172
5
 
173
6
  declare const KGraphCanvas: React__default.FC<KGraphCanvasProps>;
174
7
 
@@ -306,4 +139,4 @@ declare function applyNodeChanges(changes: NodeChange[], nodes: KGraphNode[]): K
306
139
  */
307
140
  declare function applyEdgeChanges(changes: EdgeChange[], edges: KGraphEdge[]): KGraphEdge[];
308
141
 
309
- export { ConnectionLine, DotGrid, type EdgeChange, type EdgeComponentProps, EdgeLabel, EdgeRenderer, Handle, type HandleInfo, type HandlePosition, type HandleProps, type HandleType, KGraphCanvas, type KGraphCanvasProps, type KGraphConnection, type KGraphContextValue, type KGraphEdge, type KGraphNode, KGraphProvider, type KGraphViewport, MiniMap, type NodeChange, type NodeComponentProps, NodeRenderer, applyEdgeChanges, applyNodeChanges, getBezierPath, useKGraph, useKGraphContext };
142
+ export { ConnectionLine, DotGrid, EdgeChange, EdgeComponentProps, EdgeLabel, EdgeRenderer, Handle, HandlePosition, HandleProps, KGraphCanvas, KGraphCanvasProps, KGraphContextValue, KGraphEdge, KGraphNode, KGraphProvider, KGraphViewport, MiniMap, NodeChange, NodeComponentProps, NodeRenderer, applyEdgeChanges, applyNodeChanges, getBezierPath, useKGraph, useKGraphContext };