{"version":3,"sources":["../src/core/types.ts","../src/core/graph-store.ts","../src/utils/debug.ts","../src/utils/mutation-queue.ts","../src/core/perf.ts","../src/core/graph-position.ts","../src/core/selection-store.ts","../src/utils/layout.ts","../src/core/viewport-store.ts","../src/core/history-actions.ts","../src/core/history-store.ts","../src/core/group-store.ts","../src/core/graph-derived.ts","../src/core/reduced-motion-store.ts","../src/core/graph-mutations-edges.ts","../src/core/graph-mutations-advanced.ts","../src/core/graph-mutations.ts","../src/core/sync-store.ts","../src/core/interaction-store.ts","../src/core/locked-node-store.ts","../src/core/node-type-registry.tsx","../src/core/toast-store.ts","../src/core/snap-store.ts","../src/core/event-types.ts","../src/core/action-types.ts","../src/core/settings-state-types.ts","../src/core/settings-types.ts","../src/core/actions-node.ts","../src/core/actions-viewport.ts","../src/core/built-in-actions.ts","../src/core/action-registry.ts","../src/core/action-executor.ts","../src/core/settings-presets.ts","../src/core/settings-store.ts","../src/core/canvas-serializer.ts","../src/core/clipboard-store.ts","../src/core/spatial-index.ts","../src/core/virtualization-store.ts","../src/core/canvas-api.ts","../src/core/port-types.ts","../src/core/input-classifier.ts","../src/core/input-store.ts","../src/core/selection-path-store.ts","../src/core/search-store.ts","../src/core/gesture-resolver.ts","../src/core/gesture-rules-defaults.ts","../src/core/gesture-rules.ts","../src/core/gesture-rule-store.ts","../src/core/external-keyboard-store.ts","../src/core/plugin-types.ts","../src/gestures/types.ts","../src/gestures/dispatcher.ts","../src/commands/registry.ts","../src/utils/edge-path-calculators.ts","../src/utils/edge-path-registry.ts","../src/core/plugin-registry.ts","../src/core/index.ts","../src/index.ts","../src/hooks/useNodeSelection.ts","../src/hooks/useNodeDrag.ts","../src/utils/gesture-configs.ts","../src/utils/hit-test.ts","../src/hooks/useDragStateMachine.ts","../src/hooks/useNodeResize.ts","../src/hooks/useCanvasHistory.ts","../src/hooks/useCanvasSelection.ts","../src/hooks/useCanvasViewport.ts","../src/hooks/useCanvasDrag.ts","../src/hooks/useLayout.ts","../src/hooks/useForceLayout.ts","../src/hooks/useCanvasSettings.ts","../src/hooks/useActionExecutor.ts","../src/hooks/useGestureResolver.ts","../src/hooks/useCommandLine.ts","../src/commands/store.ts","../src/commands/store-atoms.ts","../src/hooks/useVirtualization.ts","../src/hooks/useTapGesture.ts","../src/hooks/useArrowKeyNavigation.ts","../src/hooks/useCanvasGraph.ts","../src/hooks/useZoomTransition.ts","../src/hooks/useSplitGesture.ts","../src/hooks/useAnimatedLayout.ts","../src/hooks/useTreeLayout.ts","../src/hooks/useGridLayout.ts","../src/hooks/usePlugin.ts","../src/utils/index.ts","../src/utils/component-registry.tsx","../src/db/adapter.ts","../src/db/supabase-adapter.ts","../src/db/provider.tsx","../src/db/queries/nodes.ts","../src/db/queries/edges.ts","../src/db/hooks/keys.ts","../src/db/hooks/useGraphNodes.ts","../src/db/hooks/useGraphEdges.ts","../src/db/hooks/useUpdateNode.ts","../src/db/hooks/useCreateNode.ts","../src/db/hooks/useDeleteNode.ts","../src/db/hooks/useUpdateEdge.ts","../src/db/hooks/useCreateEdge.ts","../src/db/hooks/useDeleteEdge.ts","../src/styles/canvas-styles.ts","../src/providers/CanvasProvider.tsx","../src/providers/CanvasStyleProvider.tsx","../src/components/Canvas.tsx","../src/components/Viewport.tsx","../src/gestures/useCanvasGestures.ts","../src/gestures/normalize.ts","../src/gestures/timed-state.ts","../src/gestures/timed-state-runner.ts","../src/gestures/specificity.ts","../src/gestures/mapper.ts","../src/gestures/keyboard-contexts.ts","../src/gestures/pointer-bindings.ts","../src/gestures/keyboard-bindings.ts","../src/gestures/pointer-contexts.ts","../src/gestures/contexts.ts","../src/gestures/useGuardContext.ts","../src/gestures/useInertia.ts","../src/gestures/inertia.ts","../src/gestures/useWheelZoom.ts","../src/gestures/usePinchZoom.ts","../src/gestures/GestureProvider.tsx","../src/gestures/useInputModeGestureContext.ts","../src/gestures/useRegisterInputActions.ts","../src/gestures/input-action-helpers.ts","../src/gestures/modifier-helpers.ts","../src/gestures/gesture-classification.ts","../src/gestures/useGestureSystem.ts","../src/gestures/gesture-provider-utils.ts","../src/components/Grid.tsx","../src/components/NodeRenderer.tsx","../src/components/Node.tsx","../src/components/ResizeHandle.tsx","../src/gestures/useNodeGestures.ts","../src/components/NodeErrorBoundary.tsx","../src/components/EdgeRenderer.tsx","../src/components/EdgeLabelEditor.tsx","../src/components/EdgePreviewLine.tsx","../src/hooks/useSelectionChangeEffect.ts","../src/hooks/useViewportChangeEffect.ts","../src/hooks/useDragLifecycleEffect.ts","../src/components/ConnectedNode.tsx","../src/components/ConnectedNodeRenderer.tsx","../src/components/NodeContextMenu.tsx","../src/components/ContextMenuAction.tsx","../src/components/ContextMenuDivider.tsx","../src/components/LockedNodeOverlay.tsx","../src/components/EdgeOverlay.tsx","../src/components/EdgePath.tsx","../src/components/EdgeLabel.tsx","../src/components/NodeTypeCombobox.tsx","../src/components/ComboboxSearch.tsx","../src/components/ComboboxOption.tsx","../src/components/SettingsPanel.tsx","../src/components/SettingsPresets.tsx","../src/components/SettingsEventMap.tsx","../src/components/CommandLine/CommandLine.tsx","../src/components/CommandLine/CommandSearch.tsx","../src/components/CommandLine/CommandInputCollector.tsx","../src/components/CommandLine/CollectorInputPhase.tsx","../src/components/CommandLine/CollectorSelectInput.tsx","../src/components/CommandFeedbackOverlay.tsx","../src/components/NodePorts.tsx","../src/components/PortBar.tsx","../src/components/PortHandle.tsx","../src/components/ViewportControls.tsx","../src/components/SelectionOverlay.tsx","../src/components/Minimap.tsx","../src/components/minimap-utils.ts","../src/components/GroupNode.tsx","../src/components/CanvasAnimations.tsx","../src/components/TouchActionButton/index.tsx","../src/components/TouchActionButton/icons.tsx","../src/components/TouchActionButton/RadialMenu.tsx","../src/components/CanvasToast.tsx","../src/components/AlignmentGuides.tsx","../src/nodes/NoteNode/NoteNode.tsx","../src/commands/index.ts","../src/commands/keyboard.ts","../src/commands/executor.ts","../src/commands/CommandProvider.tsx","../src/commands/builtins/viewport-commands.ts","../src/commands/builtins/selection-commands.ts","../src/commands/builtins/history-commands.ts","../src/commands/builtins/layout-commands.ts","../src/commands/builtins/clipboard-commands.ts","../src/commands/builtins/group-commands.ts","../src/commands/builtins/search-commands.ts","../src/commands/builtins/merge-commands.ts","../src/commands/builtins/serialization-commands.ts","../src/commands/builtins/index.ts","../src/gestures/index.ts"],"sourcesContent":["export {};","/**\n * Graph state management — core atoms\n *\n * Foundation atoms for the Graphology + Jotai graph system.\n * Position, derived, and mutation atoms live in their own modules.\n *\n * @see ./graph-position.ts — position atoms\n * @see ./graph-derived.ts — read-only UI derivation atoms\n * @see ./graph-mutations.ts — write atoms (CRUD, split/merge, DB sync)\n */\n\nimport { atom } from 'jotai';\nimport Graph from 'graphology';\n// --- Graph Configuration ---\n\nexport const graphOptions = {\n type: 'directed',\n multi: true,\n allowSelfLoops: true\n};\n\n// --- Core Graph Atoms ---\n\n/**\n * Currently active graph ID\n */\nexport const currentGraphIdAtom = atom(null);\n\n/**\n * Main graph instance\n */\nexport const graphAtom = atom(new Graph(graphOptions));\n\n/**\n * Version counter to trigger re-renders\n */\nexport const graphUpdateVersionAtom = atom(0);\n\n// --- Edge Creation State ---\n\nexport const edgeCreationAtom = atom({\n isCreating: false,\n sourceNodeId: null,\n sourceNodePosition: null,\n targetPosition: null,\n hoveredTargetNodeId: null,\n sourceHandle: null,\n targetHandle: null,\n sourcePort: null,\n targetPort: null,\n snappedTargetPosition: null\n});\n\n// --- Drag State ---\n\nexport const draggingNodeIdAtom = atom(null);\nexport const preDragNodeAttributesAtom = atom(null);","/**\n * Debug utility for @blinksgg/canvas\n *\n * Uses the `debug` package with `canvas:*` namespaces.\n * Enable in browser: `localStorage.debug = 'canvas:*'`\n * Enable in Node: `DEBUG=canvas:* node ...`\n *\n * Log levels:\n * debug('message') — verbose trace (blue)\n * debug.warn('message') — warnings (yellow, always stderr)\n * debug.error('message') — errors (red, always stderr)\n */\n\nimport debugFactory from 'debug';\nconst NAMESPACE = 'canvas';\n/**\n * Create a debug logger for a specific module.\n *\n * @example\n * ```ts\n * const debug = createDebug('graph');\n * debug('loaded %d nodes', count); // canvas:graph\n * debug.warn('node %s not found', id); // canvas:graph:warn\n * debug.error('sync failed: %O', err); // canvas:graph:error\n * ```\n */\nexport function createDebug(module) {\n const base = debugFactory(`${NAMESPACE}:${module}`);\n const warn = debugFactory(`${NAMESPACE}:${module}:warn`);\n const error = debugFactory(`${NAMESPACE}:${module}:error`);\n\n // Warnings and errors always log (even without DEBUG=canvas:*)\n warn.enabled = true;\n error.enabled = true;\n\n // Color hints: warn = yellow, error = red\n warn.log = console.warn.bind(console);\n error.log = console.error.bind(console);\n\n // Build the debugger with warn/error sub-loggers\n const debugFn = Object.assign(base, {\n warn,\n error\n });\n return debugFn;\n}\n\n// Pre-configured debug loggers\nexport const debug = {\n graph: {\n node: createDebug('graph:node'),\n edge: createDebug('graph:edge'),\n sync: createDebug('graph:sync')\n },\n ui: {\n selection: createDebug('ui:selection'),\n drag: createDebug('ui:drag'),\n resize: createDebug('ui:resize')\n },\n sync: {\n status: createDebug('sync:status'),\n mutations: createDebug('sync:mutations'),\n queue: createDebug('sync:queue')\n },\n viewport: createDebug('viewport')\n};","/**\n * Mutation queue for tracking pending node updates\n *\n * Prevents race conditions during rapid drag operations.\n */\n\n/**\n * Global map to track pending mutations per node\n */\nexport const pendingNodeMutations = new Map();\n\n/**\n * Get or create pending mutation state for a node\n */\nexport function getPendingState(nodeId) {\n let state = pendingNodeMutations.get(nodeId);\n if (!state) {\n state = {\n inFlight: false,\n queuedPosition: null,\n queuedUiProperties: null,\n graphId: null\n };\n pendingNodeMutations.set(nodeId, state);\n }\n return state;\n}\n\n/**\n * Clear pending state for a node\n */\nexport function clearPendingState(nodeId) {\n pendingNodeMutations.delete(nodeId);\n}\n\n/**\n * Clear all pending mutation state (used on graph switch)\n */\nexport function clearAllPendingMutations() {\n pendingNodeMutations.clear();\n}\n\n/**\n * Check if any node has pending mutations\n */\nexport function hasPendingMutations() {\n for (const state of pendingNodeMutations.values()) {\n if (state.inFlight || state.queuedPosition !== null || state.queuedUiProperties !== null) {\n return true;\n }\n }\n return false;\n}","/**\n * Performance Instrumentation\n *\n * Opt-in performance.mark / performance.measure wrappers for DevTools profiling.\n * All marks are prefixed with \"canvas:\" for easy filtering.\n *\n * Usage:\n * const end = canvasMark('drag-frame');\n * // ... work ...\n * end(); // calls performance.measure automatically\n */\n\nimport { atom } from 'jotai';\n\n/**\n * Whether performance instrumentation is enabled.\n * Off by default — set to true to see marks in DevTools Performance tab.\n */\nexport const perfEnabledAtom = atom(false);\n\n// Module-level flag mirrored from atom for zero-overhead checks in hot paths.\n// Updated by `setPerfEnabled`.\nlet _enabled = false;\n\n/**\n * Imperatively set perf instrumentation on/off.\n * Useful from devtools console: `window.__canvasPerf?.(true)`.\n */\nexport function setPerfEnabled(enabled) {\n _enabled = enabled;\n}\n\n// Expose on window for easy devtools access\nif (typeof window !== 'undefined') {\n window.__canvasPerf = setPerfEnabled;\n}\n\n/**\n * Start a performance mark. Returns a function that, when called,\n * creates a measure from the mark to the current time.\n *\n * When instrumentation is disabled, returns a no-op (zero overhead).\n */\nexport function canvasMark(name) {\n if (!_enabled) return _noop;\n const markName = `canvas:${name}`;\n try {\n performance.mark(markName);\n } catch {\n return _noop;\n }\n return () => {\n try {\n performance.measure(`canvas:${name}`, markName);\n } catch {\n // mark may have been cleared\n }\n };\n}\nfunction _noop() {}\n\n/**\n * Measure a synchronous function call.\n */\nexport function canvasWrap(name, fn) {\n const end = canvasMark(name);\n try {\n return fn();\n } finally {\n end();\n }\n}","/**\n * Graph position management\n *\n * Per-node position atoms derived from Graphology.\n * Structural equality caching prevents unnecessary re-renders.\n */\n\nimport { atom } from 'jotai';\nimport { atomFamily } from 'jotai-family';\nimport Graph from 'graphology';\nimport { graphAtom, graphUpdateVersionAtom, graphOptions } from './graph-store';\nimport { createDebug } from '../utils/debug';\nimport { clearAllPendingMutations } from '../utils/mutation-queue';\nimport { canvasMark } from './perf';\nconst debug = createDebug('graph:position');\n\n// --- Position Cache ---\n\n/**\n * Cache for the previous position values, scoped per Graph instance via WeakMap.\n * Enables structural equality — only notify dependents when x/y actually changed.\n */\nconst _positionCacheByGraph = new WeakMap();\nfunction getPositionCache(graph) {\n let cache = _positionCacheByGraph.get(graph);\n if (!cache) {\n cache = new Map();\n _positionCacheByGraph.set(graph, cache);\n }\n return cache;\n}\n\n// --- Position Atoms ---\n\n/**\n * Counter to trigger edge re-renders when positions change\n */\nexport const nodePositionUpdateCounterAtom = atom(0);\n\n/**\n * Per-node position atoms - derived from Graphology (single source of truth)\n * These are read-only atoms that derive position from the graph.\n */\nexport const nodePositionAtomFamily = atomFamily(nodeId => atom(get => {\n get(nodePositionUpdateCounterAtom); // Invalidation trigger for fine-grained updates\n const graph = get(graphAtom);\n if (!graph.hasNode(nodeId)) {\n return {\n x: 0,\n y: 0\n };\n }\n const x = graph.getNodeAttribute(nodeId, 'x');\n const y = graph.getNodeAttribute(nodeId, 'y');\n\n // Structural equality: return the same reference if position unchanged\n const cache = getPositionCache(graph);\n const prev = cache.get(nodeId);\n if (prev && prev.x === x && prev.y === y) {\n return prev;\n }\n const pos = {\n x,\n y\n };\n cache.set(nodeId, pos);\n return pos;\n}));\n\n/**\n * Update a node's position\n */\nexport const updateNodePositionAtom = atom(null, (get, set, {\n nodeId,\n position\n}) => {\n const end = canvasMark('drag-frame');\n const graph = get(graphAtom);\n if (graph.hasNode(nodeId)) {\n debug('Updating node %s position to %o', nodeId, position);\n graph.setNodeAttribute(nodeId, 'x', position.x);\n graph.setNodeAttribute(nodeId, 'y', position.y);\n // Position atom is derived - no need to set it, just trigger re-read\n set(nodePositionUpdateCounterAtom, c => c + 1);\n }\n end();\n});\n\n/**\n * Cleanup position atom for a deleted node\n * Note: Position atoms are now derived, so cleanup is optional but helps memory\n */\nexport const cleanupNodePositionAtom = atom(null, (get, _set, nodeId) => {\n nodePositionAtomFamily.remove(nodeId);\n const graph = get(graphAtom);\n getPositionCache(graph).delete(nodeId);\n debug('Removed position atom for node: %s', nodeId);\n});\n\n/**\n * Cleanup all position atoms (used when switching graphs)\n * Note: Position atoms are now derived, so cleanup is optional but helps memory\n */\nexport const cleanupAllNodePositionsAtom = atom(null, (get, _set) => {\n const graph = get(graphAtom);\n const nodeIds = graph.nodes();\n nodeIds.forEach(nodeId => {\n nodePositionAtomFamily.remove(nodeId);\n });\n _positionCacheByGraph.delete(graph);\n debug('Removed %d position atoms', nodeIds.length);\n});\n\n/**\n * Clear graph when switching to a new graph\n */\nexport const clearGraphOnSwitchAtom = atom(null, (get, set) => {\n debug('Clearing graph for switch');\n set(cleanupAllNodePositionsAtom);\n clearAllPendingMutations();\n const emptyGraph = new Graph(graphOptions);\n set(graphAtom, emptyGraph);\n set(graphUpdateVersionAtom, v => v + 1);\n});","/**\n * Selection state management\n *\n * Manages node and edge selection state.\n */\n\nimport { atom } from 'jotai';\nimport { createDebug } from '../utils/debug';\nconst debug = createDebug('selection');\n\n// --- Core Selection Atoms ---\n\n/**\n * Set of currently selected node IDs\n */\nexport const selectedNodeIdsAtom = atom(new Set());\n\n/**\n * Currently selected edge ID (only one edge can be selected at a time)\n */\nexport const selectedEdgeIdAtom = atom(null);\n\n// --- Selection Actions ---\n\n/**\n * Handle node pointer down with shift-click support for multi-select\n */\n\nexport const handleNodePointerDownSelectionAtom = atom(null, (get, set, {\n nodeId,\n isShiftPressed\n}) => {\n const currentSelection = get(selectedNodeIdsAtom);\n debug('handleNodePointerDownSelection: nodeId=%s, shift=%s, current=%o', nodeId, isShiftPressed, Array.from(currentSelection));\n\n // Clear edge selection when selecting a node\n set(selectedEdgeIdAtom, null);\n if (isShiftPressed) {\n const newSelection = new Set(currentSelection);\n if (newSelection.has(nodeId)) {\n newSelection.delete(nodeId);\n } else {\n newSelection.add(nodeId);\n }\n debug('Shift-click, setting selection to: %o', Array.from(newSelection));\n set(selectedNodeIdsAtom, newSelection);\n } else {\n // Only change selection if node is NOT already selected\n // This allows multi-node drag to work\n if (!currentSelection.has(nodeId)) {\n debug('Node not in selection, selecting: %s', nodeId);\n set(selectedNodeIdsAtom, new Set([nodeId]));\n } else {\n debug('Node already selected, preserving multi-select');\n }\n }\n});\n\n/**\n * Select a single node, clearing any previous selection\n */\nexport const selectSingleNodeAtom = atom(null, (get, set, nodeId) => {\n debug('selectSingleNode: %s', nodeId);\n set(selectedEdgeIdAtom, null);\n if (nodeId === null || nodeId === undefined) {\n debug('Clearing selection');\n set(selectedNodeIdsAtom, new Set());\n } else {\n const currentSelection = get(selectedNodeIdsAtom);\n if (currentSelection.has(nodeId) && currentSelection.size === 1) {\n return; // Already the only selection\n }\n set(selectedNodeIdsAtom, new Set([nodeId]));\n }\n});\n\n/**\n * Toggle a node in/out of selection\n */\nexport const toggleNodeInSelectionAtom = atom(null, (get, set, nodeId) => {\n const currentSelection = get(selectedNodeIdsAtom);\n const newSelection = new Set(currentSelection);\n if (newSelection.has(nodeId)) {\n newSelection.delete(nodeId);\n } else {\n newSelection.add(nodeId);\n }\n set(selectedNodeIdsAtom, newSelection);\n});\n\n/**\n * Clear all node selection\n */\nexport const clearSelectionAtom = atom(null, (_get, set) => {\n debug('clearSelection');\n set(selectedNodeIdsAtom, new Set());\n});\n\n/**\n * Add multiple nodes to selection\n */\nexport const addNodesToSelectionAtom = atom(null, (get, set, nodeIds) => {\n const currentSelection = get(selectedNodeIdsAtom);\n const newSelection = new Set(currentSelection);\n for (const nodeId of nodeIds) {\n newSelection.add(nodeId);\n }\n set(selectedNodeIdsAtom, newSelection);\n});\n\n/**\n * Remove multiple nodes from selection\n */\nexport const removeNodesFromSelectionAtom = atom(null, (get, set, nodeIds) => {\n const currentSelection = get(selectedNodeIdsAtom);\n const newSelection = new Set(currentSelection);\n for (const nodeId of nodeIds) {\n newSelection.delete(nodeId);\n }\n set(selectedNodeIdsAtom, newSelection);\n});\n\n/**\n * Select an edge (clears node selection)\n */\nexport const selectEdgeAtom = atom(null, (get, set, edgeId) => {\n set(selectedEdgeIdAtom, edgeId);\n if (edgeId !== null) {\n set(selectedNodeIdsAtom, new Set());\n }\n});\n\n/**\n * Clear edge selection\n */\nexport const clearEdgeSelectionAtom = atom(null, (_get, set) => {\n set(selectedEdgeIdAtom, null);\n});\n\n// --- Keyboard Focus ---\n\n/**\n * The node that has keyboard focus (distinct from selection).\n * Used for arrow key navigation between nodes.\n * null means no node has keyboard focus.\n */\nexport const focusedNodeIdAtom = atom(null);\n\n/**\n * Set keyboard focus to a node, or clear focus with null\n */\nexport const setFocusedNodeAtom = atom(null, (_get, set, nodeId) => {\n set(focusedNodeIdAtom, nodeId);\n});\n\n/**\n * Whether a node currently has keyboard focus\n */\nexport const hasFocusedNodeAtom = atom(get => get(focusedNodeIdAtom) !== null);\n\n// --- Derived Atoms ---\n\n/**\n * Count of selected nodes\n */\nexport const selectedNodesCountAtom = atom(get => get(selectedNodeIdsAtom).size);\n\n/**\n * Whether any node is selected\n */\nexport const hasSelectionAtom = atom(get => get(selectedNodeIdsAtom).size > 0);","/**\n * Layout utilities for canvas operations.\n *\n * Provides geometry calculations, bounds computation, and node overlap detection.\n */\n\n// ============================================================\n// Types\n// ============================================================\n\n/**\n * Rectangle with position and dimensions\n */\n\n/**\n * Node with position and dimensions (alias for geometry functions)\n */\n\n/**\n * Extended bounds with computed edges\n */\n\n/**\n * Mode for fitToBounds operation\n */\nexport let FitToBoundsMode = /*#__PURE__*/function (FitToBoundsMode) {\n /** Fit all nodes in the graph */\n FitToBoundsMode[\"Graph\"] = \"graph\";\n /** Fit only selected nodes */\n FitToBoundsMode[\"Selection\"] = \"selection\";\n return FitToBoundsMode;\n}({});\n\n// ============================================================\n// Bounds Calculation\n// ============================================================\n\n/**\n * Calculate the bounding rectangle that contains all nodes.\n *\n * @param nodes - Array of rectangles (nodes with x, y, width, height)\n * @returns Bounding rectangle containing all nodes\n *\n * @example\n * const bounds = calculateBounds([\n * { x: 0, y: 0, width: 100, height: 100 },\n * { x: 200, y: 150, width: 100, height: 100 },\n * ]);\n * // bounds = { x: 0, y: 0, width: 300, height: 250 }\n */\nexport const calculateBounds = nodes => {\n if (nodes.length === 0) {\n return {\n x: 0,\n y: 0,\n width: 0,\n height: 0\n };\n }\n const minX = Math.min(...nodes.map(node => node.x));\n const minY = Math.min(...nodes.map(node => node.y));\n const maxX = Math.max(...nodes.map(node => node.x + node.width));\n const maxY = Math.max(...nodes.map(node => node.y + node.height));\n return {\n x: minX,\n y: minY,\n width: maxX - minX,\n height: maxY - minY\n };\n};\n\n// ============================================================\n// Node Geometry\n// ============================================================\n\n/**\n * Get the center point of a node.\n */\nexport function getNodeCenter(node) {\n return {\n x: node.x + node.width / 2,\n y: node.y + node.height / 2\n };\n}\n\n/**\n * Set a node's position based on center coordinates.\n * Returns a new node object with updated position.\n */\nexport function setNodeCenter(node, centerX, centerY) {\n return {\n ...node,\n x: centerX - node.width / 2,\n y: centerY - node.height / 2\n };\n}\n\n/**\n * Check if two nodes overlap.\n */\nexport function checkNodesOverlap(node1, node2) {\n const center1 = getNodeCenter(node1);\n const center2 = getNodeCenter(node2);\n const dx = Math.abs(center1.x - center2.x);\n const dy = Math.abs(center1.y - center2.y);\n const minDistanceX = (node1.width + node2.width) / 2;\n const minDistanceY = (node1.height + node2.height) / 2;\n return dx < minDistanceX && dy < minDistanceY;\n}\n\n/**\n * Get the bounding box of a node.\n */\nexport function getNodeBounds(node) {\n return {\n x: node.x,\n y: node.y,\n width: node.width,\n height: node.height,\n left: node.x,\n right: node.x + node.width,\n top: node.y,\n bottom: node.y + node.height\n };\n}\n\n/**\n * Check if two nodes are within a certain distance of each other.\n */\nexport function areNodesClose(node1, node2, threshold = 200) {\n const center1 = getNodeCenter(node1);\n const center2 = getNodeCenter(node2);\n const distance = Math.sqrt(Math.pow(center1.x - center2.x, 2) + Math.pow(center1.y - center2.y, 2));\n return distance <= threshold;\n}","/**\n * Viewport state management\n *\n * Manages pan, zoom, and viewport rect for the canvas.\n */\n\nimport { atom } from 'jotai';\n// --- Core Viewport Atoms ---\n\n/**\n * Current zoom level (1 = 100%)\n */\nexport const zoomAtom = atom(1);\n\n/**\n * Current pan offset in pixels\n */\nexport const panAtom = atom({\n x: 0,\n y: 0\n});\n\n/**\n * Viewport DOM rect (set by the Viewport component)\n */\nexport const viewportRectAtom = atom(null);\n\n// --- Coordinate Conversion ---\n\n/**\n * Convert screen coordinates to world coordinates\n */\nexport const screenToWorldAtom = atom(get => {\n return (screenX, screenY) => {\n const pan = get(panAtom);\n const zoom = get(zoomAtom);\n const rect = get(viewportRectAtom);\n if (!rect) {\n return {\n x: screenX,\n y: screenY\n };\n }\n const relativeX = screenX - rect.left;\n const relativeY = screenY - rect.top;\n return {\n x: (relativeX - pan.x) / zoom,\n y: (relativeY - pan.y) / zoom\n };\n };\n});\n\n/**\n * Convert world coordinates to screen coordinates\n */\nexport const worldToScreenAtom = atom(get => {\n return (worldX, worldY) => {\n const pan = get(panAtom);\n const zoom = get(zoomAtom);\n const rect = get(viewportRectAtom);\n if (!rect) {\n return {\n x: worldX,\n y: worldY\n };\n }\n return {\n x: worldX * zoom + pan.x + rect.left,\n y: worldY * zoom + pan.y + rect.top\n };\n };\n});\n\n// --- Viewport Actions ---\n\n/**\n * Set zoom level with optional center point\n */\nexport const setZoomAtom = atom(null, (get, set, {\n zoom,\n centerX,\n centerY\n}) => {\n const currentZoom = get(zoomAtom);\n const pan = get(panAtom);\n const rect = get(viewportRectAtom);\n\n // Clamp zoom\n const newZoom = Math.max(0.1, Math.min(5, zoom));\n if (centerX !== undefined && centerY !== undefined && rect) {\n // Zoom towards the center point\n const relativeX = centerX - rect.left;\n const relativeY = centerY - rect.top;\n const worldX = (relativeX - pan.x) / currentZoom;\n const worldY = (relativeY - pan.y) / currentZoom;\n const newPanX = relativeX - worldX * newZoom;\n const newPanY = relativeY - worldY * newZoom;\n set(panAtom, {\n x: newPanX,\n y: newPanY\n });\n }\n set(zoomAtom, newZoom);\n});\n\n/**\n * Reset viewport to default state\n */\nexport const resetViewportAtom = atom(null, (_get, set) => {\n set(zoomAtom, 1);\n set(panAtom, {\n x: 0,\n y: 0\n });\n});\n\n// =============================================================================\n// Headless Layout Atoms\n// Fit-to-bounds and center-on-node without React hooks\n// =============================================================================\n\nimport { graphAtom } from './graph-store';\nimport { nodePositionUpdateCounterAtom } from './graph-position';\nimport { uiNodesAtom } from './graph-derived';\nimport { selectedNodeIdsAtom } from './selection-store';\nimport { calculateBounds, FitToBoundsMode } from '../utils/layout';\n\n/**\n * Write atom: fit viewport to show all nodes or selection.\n * Pure Jotai — no React required.\n */\nexport const fitToBoundsAtom = atom(null, (get, set, {\n mode,\n padding = 20\n}) => {\n const normalizedMode = typeof mode === 'string' ? mode === 'graph' ? FitToBoundsMode.Graph : FitToBoundsMode.Selection : mode;\n const viewportSize = get(viewportRectAtom);\n if (!viewportSize || viewportSize.width <= 0 || viewportSize.height <= 0) return;\n\n // Force position counter read so bounds are fresh\n get(nodePositionUpdateCounterAtom);\n let bounds;\n if (normalizedMode === FitToBoundsMode.Graph) {\n const graph = get(graphAtom);\n const nodes = graph.nodes().map(node => {\n const attrs = graph.getNodeAttributes(node);\n return {\n x: attrs.x,\n y: attrs.y,\n width: attrs.width || 500,\n height: attrs.height || 500\n };\n });\n bounds = calculateBounds(nodes);\n } else {\n const selectedIds = get(selectedNodeIdsAtom);\n const allNodes = get(uiNodesAtom);\n const selectedNodes = allNodes.filter(n => selectedIds.has(n.id)).map(n => ({\n x: n.position.x,\n y: n.position.y,\n width: n.width ?? 500,\n height: n.height ?? 500\n }));\n bounds = calculateBounds(selectedNodes);\n }\n if (bounds.width <= 0 || bounds.height <= 0) return;\n const maxHPad = Math.max(0, viewportSize.width / 2 - 1);\n const maxVPad = Math.max(0, viewportSize.height / 2 - 1);\n const safePadding = Math.max(0, Math.min(padding, maxHPad, maxVPad));\n const effW = Math.max(1, viewportSize.width - 2 * safePadding);\n const effH = Math.max(1, viewportSize.height - 2 * safePadding);\n const scale = Math.min(effW / bounds.width, effH / bounds.height);\n if (scale <= 0 || !isFinite(scale)) return;\n set(zoomAtom, scale);\n const scaledW = bounds.width * scale;\n const scaledH = bounds.height * scale;\n const startX = safePadding + (effW - scaledW) / 2;\n const startY = safePadding + (effH - scaledH) / 2;\n set(panAtom, {\n x: startX - bounds.x * scale,\n y: startY - bounds.y * scale\n });\n});\n\n/**\n * Write atom: center viewport on a specific node.\n */\nexport const centerOnNodeAtom = atom(null, (get, set, nodeId) => {\n const nodes = get(uiNodesAtom);\n const node = nodes.find(n => n.id === nodeId);\n if (!node) return;\n const {\n x,\n y,\n width = 200,\n height = 100\n } = node;\n const zoom = get(zoomAtom);\n const centerX = x + width / 2;\n const centerY = y + height / 2;\n const rect = get(viewportRectAtom);\n const halfWidth = rect ? rect.width / 2 : 400;\n const halfHeight = rect ? rect.height / 2 : 300;\n set(panAtom, {\n x: halfWidth - centerX * zoom,\n y: halfHeight - centerY * zoom\n });\n});\n\n// =============================================================================\n// Zoom Transition State\n// When zooming in on a node past a threshold, trigger a fade transition\n// =============================================================================\n\n/** The zoom level at which we start the transition (zoom in) */\nexport const ZOOM_TRANSITION_THRESHOLD = 3.5;\n\n/** The zoom level at which we exit transition mode (zoom out) */\nexport const ZOOM_EXIT_THRESHOLD = 2.0;\n\n/** The node ID that's currently being zoomed into (center of viewport) */\nexport const zoomFocusNodeIdAtom = atom(null);\n\n/** Transition progress: 0 = normal view, 1 = fully transitioned to locked view */\nexport const zoomTransitionProgressAtom = atom(0);\n\n/** Computed: whether we're in a zoom transition */\nexport const isZoomTransitioningAtom = atom(get => {\n const progress = get(zoomTransitionProgressAtom);\n return progress > 0 && progress < 1;\n});\n\n// --- Zoom Animation Target ---\n\n/** Current zoom animation target, or null when idle */\nexport const zoomAnimationTargetAtom = atom(null);\n\n/**\n * Write atom: start an animated zoom-to-node transition.\n * Sets the animation target; the actual animation loop runs in useZoomTransition hook.\n */\nexport const animateZoomToNodeAtom = atom(null, (get, set, {\n nodeId,\n targetZoom,\n duration = 300\n}) => {\n const nodes = get(uiNodesAtom);\n const node = nodes.find(n => n.id === nodeId);\n if (!node) return;\n const {\n x,\n y,\n width = 200,\n height = 100\n } = node;\n const centerX = x + width / 2;\n const centerY = y + height / 2;\n const rect = get(viewportRectAtom);\n const halfWidth = rect ? rect.width / 2 : 400;\n const halfHeight = rect ? rect.height / 2 : 300;\n const finalZoom = targetZoom ?? get(zoomAtom);\n const targetPan = {\n x: halfWidth - centerX * finalZoom,\n y: halfHeight - centerY * finalZoom\n };\n set(zoomFocusNodeIdAtom, nodeId);\n set(zoomAnimationTargetAtom, {\n targetZoom: finalZoom,\n targetPan,\n startZoom: get(zoomAtom),\n startPan: {\n ...get(panAtom)\n },\n duration,\n startTime: performance.now()\n });\n});\n\n/**\n * Write atom: start an animated fit-to-bounds transition.\n * Computes the target viewport, then animates to it.\n */\nexport const animateFitToBoundsAtom = atom(null, (get, set, {\n mode,\n padding = 20,\n duration = 300\n}) => {\n const viewportSize = get(viewportRectAtom);\n if (!viewportSize || viewportSize.width <= 0 || viewportSize.height <= 0) return;\n get(nodePositionUpdateCounterAtom);\n let bounds;\n if (mode === 'graph') {\n const graph = get(graphAtom);\n const nodes = graph.nodes().map(node => {\n const attrs = graph.getNodeAttributes(node);\n return {\n x: attrs.x,\n y: attrs.y,\n width: attrs.width || 500,\n height: attrs.height || 500\n };\n });\n bounds = calculateBounds(nodes);\n } else {\n const selectedIds = get(selectedNodeIdsAtom);\n const allNodes = get(uiNodesAtom);\n const selectedNodes = allNodes.filter(n => selectedIds.has(n.id)).map(n => ({\n x: n.position.x,\n y: n.position.y,\n width: n.width ?? 500,\n height: n.height ?? 500\n }));\n bounds = calculateBounds(selectedNodes);\n }\n if (bounds.width <= 0 || bounds.height <= 0) return;\n const safePadding = Math.max(0, Math.min(padding, viewportSize.width / 2 - 1, viewportSize.height / 2 - 1));\n const effW = Math.max(1, viewportSize.width - 2 * safePadding);\n const effH = Math.max(1, viewportSize.height - 2 * safePadding);\n const scale = Math.min(effW / bounds.width, effH / bounds.height);\n if (scale <= 0 || !isFinite(scale)) return;\n const scaledW = bounds.width * scale;\n const scaledH = bounds.height * scale;\n const startX = safePadding + (effW - scaledW) / 2;\n const startY = safePadding + (effH - scaledH) / 2;\n const targetPan = {\n x: startX - bounds.x * scale,\n y: startY - bounds.y * scale\n };\n set(zoomAnimationTargetAtom, {\n targetZoom: scale,\n targetPan,\n startZoom: get(zoomAtom),\n startPan: {\n ...get(panAtom)\n },\n duration,\n startTime: performance.now()\n });\n});","/**\n * History Actions — Pure delta functions\n *\n * applyDelta, invertDelta, createSnapshot extracted from history-store.ts.\n * These are pure functions operating on Graphology graphs and delta objects.\n */\n\n// =============================================================================\n// Delta Application\n// =============================================================================\n\n/**\n * Apply a delta to the graph in-place.\n * Returns true if graph structure changed (needs version bump).\n */\nexport function applyDelta(graph, delta) {\n switch (delta.type) {\n case 'move-node':\n {\n if (!graph.hasNode(delta.nodeId)) return false;\n graph.setNodeAttribute(delta.nodeId, 'x', delta.to.x);\n graph.setNodeAttribute(delta.nodeId, 'y', delta.to.y);\n return false; // Position change, not structural\n }\n case 'resize-node':\n {\n if (!graph.hasNode(delta.nodeId)) return false;\n graph.setNodeAttribute(delta.nodeId, 'width', delta.to.width);\n graph.setNodeAttribute(delta.nodeId, 'height', delta.to.height);\n return false;\n }\n case 'add-node':\n {\n if (graph.hasNode(delta.nodeId)) return false;\n graph.addNode(delta.nodeId, delta.attributes);\n return true;\n }\n case 'remove-node':\n {\n if (!graph.hasNode(delta.nodeId)) return false;\n graph.dropNode(delta.nodeId); // Also removes connected edges\n return true;\n }\n case 'add-edge':\n {\n if (graph.hasEdge(delta.edgeId)) return false;\n if (!graph.hasNode(delta.source) || !graph.hasNode(delta.target)) return false;\n graph.addEdgeWithKey(delta.edgeId, delta.source, delta.target, delta.attributes);\n return true;\n }\n case 'remove-edge':\n {\n if (!graph.hasEdge(delta.edgeId)) return false;\n graph.dropEdge(delta.edgeId);\n return true;\n }\n case 'update-node-attr':\n {\n if (!graph.hasNode(delta.nodeId)) return false;\n graph.setNodeAttribute(delta.nodeId, delta.key, delta.to);\n return false;\n }\n case 'batch':\n {\n let structuralChange = false;\n for (const d of delta.deltas) {\n if (applyDelta(graph, d)) structuralChange = true;\n }\n return structuralChange;\n }\n case 'full-snapshot':\n {\n // Full graph restore — clear and rebuild\n graph.clear();\n for (const node of delta.nodes) {\n graph.addNode(node.id, node.attributes);\n }\n for (const edge of delta.edges) {\n if (graph.hasNode(edge.source) && graph.hasNode(edge.target)) {\n graph.addEdgeWithKey(edge.id, edge.source, edge.target, edge.attributes);\n }\n }\n return true;\n }\n }\n}\n\n/**\n * Invert a delta (for creating reverse operations).\n */\nexport function invertDelta(delta) {\n switch (delta.type) {\n case 'move-node':\n return {\n ...delta,\n from: delta.to,\n to: delta.from\n };\n case 'resize-node':\n return {\n ...delta,\n from: delta.to,\n to: delta.from\n };\n case 'add-node':\n return {\n type: 'remove-node',\n nodeId: delta.nodeId,\n attributes: delta.attributes,\n connectedEdges: []\n };\n case 'remove-node':\n {\n // Restore node AND its connected edges\n const batch = [{\n type: 'add-node',\n nodeId: delta.nodeId,\n attributes: delta.attributes\n }, ...delta.connectedEdges.map(e => ({\n type: 'add-edge',\n edgeId: e.id,\n source: e.source,\n target: e.target,\n attributes: e.attributes\n }))];\n return batch.length === 1 ? batch[0] : {\n type: 'batch',\n deltas: batch\n };\n }\n case 'add-edge':\n return {\n type: 'remove-edge',\n edgeId: delta.edgeId,\n source: delta.source,\n target: delta.target,\n attributes: delta.attributes\n };\n case 'remove-edge':\n return {\n type: 'add-edge',\n edgeId: delta.edgeId,\n source: delta.source,\n target: delta.target,\n attributes: delta.attributes\n };\n case 'update-node-attr':\n return {\n ...delta,\n from: delta.to,\n to: delta.from\n };\n case 'batch':\n return {\n type: 'batch',\n deltas: delta.deltas.map(invertDelta).reverse()\n };\n case 'full-snapshot':\n // Can't invert a full snapshot — caller handles this\n return delta;\n }\n}\n\n// =============================================================================\n// Helper: Create full snapshot (for complex operations)\n// =============================================================================\n\nexport function createSnapshot(graph, label) {\n const nodes = [];\n const edges = [];\n graph.forEachNode((nodeId, attributes) => {\n nodes.push({\n id: nodeId,\n attributes: {\n ...attributes\n }\n });\n });\n graph.forEachEdge((edgeId, attributes, source, target) => {\n edges.push({\n id: edgeId,\n source,\n target,\n attributes: {\n ...attributes\n }\n });\n });\n return {\n timestamp: Date.now(),\n label,\n nodes,\n edges\n };\n}","/**\n * Canvas History Store — v2\n *\n * Delta-based undo/redo — replaces full-graph JSON.stringify snapshots.\n *\n * Performance improvement:\n * - Before: O(N) per operation (deep-clone all nodes + edges)\n * - After: O(1) for moves, O(K) for batch operations\n *\n * Each history entry stores forward + reverse deltas, not full snapshots.\n * Falls back to full snapshot for complex operations (graph import).\n *\n * Pure delta functions are in ./history-actions.ts\n */\n\nimport { atom } from 'jotai';\nimport { graphAtom, graphUpdateVersionAtom } from './graph-store';\nimport { nodePositionUpdateCounterAtom } from './graph-position';\nimport { createDebug } from '../utils/debug';\n\n// Re-export types for backward compat\n\n// Re-export pure functions for backward compat\nexport { applyDelta, invertDelta, createSnapshot } from './history-actions';\nimport { applyDelta, invertDelta, createSnapshot } from './history-actions';\nconst debug = createDebug('history');\n\n// =============================================================================\n// Configuration\n// =============================================================================\n\n/** Maximum number of history entries to keep */\nconst MAX_HISTORY_SIZE = 50;\n\n// =============================================================================\n// Atoms\n// =============================================================================\n\nexport const historyStateAtom = atom({\n past: [],\n future: [],\n isApplying: false\n});\nexport const canUndoAtom = atom(get => {\n const history = get(historyStateAtom);\n return history.past.length > 0 && !history.isApplying;\n});\nexport const canRedoAtom = atom(get => {\n const history = get(historyStateAtom);\n return history.future.length > 0 && !history.isApplying;\n});\nexport const undoCountAtom = atom(get => get(historyStateAtom).past.length);\nexport const redoCountAtom = atom(get => get(historyStateAtom).future.length);\n\n// =============================================================================\n// Push Delta (replaces pushHistoryAtom's full-snapshot approach)\n// =============================================================================\n\n/**\n * Push a delta to history. Call AFTER making the change.\n * The delta describes what changed; the reverse is auto-computed.\n */\nexport const pushDeltaAtom = atom(null, (get, set, delta) => {\n const history = get(historyStateAtom);\n if (history.isApplying) return;\n const {\n label,\n ...cleanDelta\n } = delta;\n const entry = {\n forward: cleanDelta,\n reverse: invertDelta(cleanDelta),\n timestamp: Date.now(),\n label\n };\n const newPast = [...history.past, entry];\n if (newPast.length > MAX_HISTORY_SIZE) newPast.shift();\n set(historyStateAtom, {\n past: newPast,\n future: [],\n // Clear redo stack\n isApplying: false\n });\n debug('Pushed delta: %s (past: %d)', label || delta.type, newPast.length);\n});\n\n/**\n * Legacy: Push a full-graph snapshot to history.\n * Use for complex operations where computing deltas is impractical.\n * Call BEFORE making changes.\n */\nexport const pushHistoryAtom = atom(null, (get, set, label) => {\n const history = get(historyStateAtom);\n if (history.isApplying) return;\n const graph = get(graphAtom);\n const snapshot = createSnapshot(graph, label);\n\n // Store as a full-snapshot delta\n const forward = {\n type: 'full-snapshot',\n nodes: snapshot.nodes,\n edges: snapshot.edges\n };\n const entry = {\n forward,\n reverse: forward,\n // For full snapshots, reverse IS the current state\n timestamp: Date.now(),\n label\n };\n const newPast = [...history.past, entry];\n if (newPast.length > MAX_HISTORY_SIZE) newPast.shift();\n set(historyStateAtom, {\n past: newPast,\n future: [],\n isApplying: false\n });\n debug('Pushed snapshot: %s (past: %d)', label || 'unnamed', newPast.length);\n});\n\n// =============================================================================\n// Undo / Redo\n// =============================================================================\n\nexport const undoAtom = atom(null, (get, set) => {\n const history = get(historyStateAtom);\n if (history.past.length === 0 || history.isApplying) return false;\n set(historyStateAtom, {\n ...history,\n isApplying: true\n });\n try {\n const graph = get(graphAtom);\n const newPast = [...history.past];\n const entry = newPast.pop();\n\n // For full-snapshot entries, save current state before restoring\n let forwardForRedo = entry.forward;\n if (entry.reverse.type === 'full-snapshot') {\n const currentSnapshot = createSnapshot(graph, 'current');\n forwardForRedo = {\n type: 'full-snapshot',\n nodes: currentSnapshot.nodes,\n edges: currentSnapshot.edges\n };\n }\n const structuralChange = applyDelta(graph, entry.reverse);\n if (structuralChange) {\n set(graphAtom, graph);\n set(graphUpdateVersionAtom, v => v + 1);\n }\n set(nodePositionUpdateCounterAtom, c => c + 1);\n const redoEntry = {\n forward: forwardForRedo,\n reverse: entry.reverse,\n timestamp: entry.timestamp,\n label: entry.label\n };\n set(historyStateAtom, {\n past: newPast,\n future: [redoEntry, ...history.future],\n isApplying: false\n });\n debug('Undo: %s (past: %d, future: %d)', entry.label, newPast.length, history.future.length + 1);\n return true;\n } catch (error) {\n debug.error('Undo failed: %O', error);\n set(historyStateAtom, {\n ...history,\n isApplying: false\n });\n return false;\n }\n});\nexport const redoAtom = atom(null, (get, set) => {\n const history = get(historyStateAtom);\n if (history.future.length === 0 || history.isApplying) return false;\n set(historyStateAtom, {\n ...history,\n isApplying: true\n });\n try {\n const graph = get(graphAtom);\n const newFuture = [...history.future];\n const entry = newFuture.shift();\n\n // For full-snapshot entries, save current state before restoring\n let reverseForUndo = entry.reverse;\n if (entry.forward.type === 'full-snapshot') {\n const currentSnapshot = createSnapshot(graph, 'current');\n reverseForUndo = {\n type: 'full-snapshot',\n nodes: currentSnapshot.nodes,\n edges: currentSnapshot.edges\n };\n }\n const structuralChange = applyDelta(graph, entry.forward);\n if (structuralChange) {\n set(graphAtom, graph);\n set(graphUpdateVersionAtom, v => v + 1);\n }\n set(nodePositionUpdateCounterAtom, c => c + 1);\n const undoEntry = {\n forward: entry.forward,\n reverse: reverseForUndo,\n timestamp: entry.timestamp,\n label: entry.label\n };\n set(historyStateAtom, {\n past: [...history.past, undoEntry],\n future: newFuture,\n isApplying: false\n });\n debug('Redo: %s (past: %d, future: %d)', entry.label, history.past.length + 1, newFuture.length);\n return true;\n } catch (error) {\n debug.error('Redo failed: %O', error);\n set(historyStateAtom, {\n ...history,\n isApplying: false\n });\n return false;\n }\n});\nexport const clearHistoryAtom = atom(null, (_get, set) => {\n set(historyStateAtom, {\n past: [],\n future: [],\n isApplying: false\n });\n debug('History cleared');\n});\nexport const historyLabelsAtom = atom(get => {\n const history = get(historyStateAtom);\n return {\n past: history.past.map(e => e.label || 'Unnamed'),\n future: history.future.map(e => e.label || 'Unnamed')\n };\n});","/**\n * Group Store\n *\n * Manages node grouping/nesting: parent-child relationships,\n * collapse/expand state, and group membership operations.\n */\n\nimport { atom } from 'jotai';\nimport { graphAtom, graphUpdateVersionAtom } from './graph-store';\nimport { nodePositionUpdateCounterAtom } from './graph-position';\nimport { pushHistoryAtom } from './history-store';\n// =============================================================================\n// Collapse State\n// =============================================================================\n\n/**\n * Set of group node IDs that are currently collapsed.\n * Collapsed groups hide their children from uiNodesAtom.\n */\nexport const collapsedGroupsAtom = atom(new Set());\n\n/**\n * Toggle a group's collapsed state\n */\nexport const toggleGroupCollapseAtom = atom(null, (get, set, groupId) => {\n const current = get(collapsedGroupsAtom);\n const next = new Set(current);\n if (next.has(groupId)) {\n next.delete(groupId);\n } else {\n next.add(groupId);\n }\n set(collapsedGroupsAtom, next);\n});\n\n/**\n * Collapse a group\n */\nexport const collapseGroupAtom = atom(null, (get, set, groupId) => {\n const current = get(collapsedGroupsAtom);\n if (!current.has(groupId)) {\n const next = new Set(current);\n next.add(groupId);\n set(collapsedGroupsAtom, next);\n }\n});\n\n/**\n * Expand a group\n */\nexport const expandGroupAtom = atom(null, (get, set, groupId) => {\n const current = get(collapsedGroupsAtom);\n if (current.has(groupId)) {\n const next = new Set(current);\n next.delete(groupId);\n set(collapsedGroupsAtom, next);\n }\n});\n\n// =============================================================================\n// Parent/Child Queries\n// =============================================================================\n\n/**\n * Get children of a group node (reads from graph attributes)\n */\nexport const nodeChildrenAtom = atom(get => {\n get(graphUpdateVersionAtom);\n const graph = get(graphAtom);\n return parentId => {\n const children = [];\n graph.forEachNode((nodeId, attrs) => {\n if (attrs.parentId === parentId) {\n children.push(nodeId);\n }\n });\n return children;\n };\n});\n\n/**\n * Get the parent ID of a node\n */\nexport const nodeParentAtom = atom(get => {\n get(graphUpdateVersionAtom);\n const graph = get(graphAtom);\n return nodeId => {\n if (!graph.hasNode(nodeId)) return undefined;\n return graph.getNodeAttribute(nodeId, 'parentId');\n };\n});\n\n/**\n * Check if a node is a group (has any children)\n */\nexport const isGroupNodeAtom = atom(get => {\n const getChildren = get(nodeChildrenAtom);\n return nodeId => getChildren(nodeId).length > 0;\n});\n\n/**\n * Get count of children for a group node\n */\nexport const groupChildCountAtom = atom(get => {\n const getChildren = get(nodeChildrenAtom);\n return groupId => getChildren(groupId).length;\n});\n\n// =============================================================================\n// Group Membership Operations\n// =============================================================================\n\n/**\n * Set a node's parent (move into a group)\n */\nexport const setNodeParentAtom = atom(null, (get, set, {\n nodeId,\n parentId\n}) => {\n const graph = get(graphAtom);\n if (!graph.hasNode(nodeId)) return;\n\n // Prevent circular grouping\n if (parentId) {\n if (parentId === nodeId) return;\n // Check if parentId is a descendant of nodeId\n let current = parentId;\n while (current) {\n if (current === nodeId) return; // Circular!\n if (!graph.hasNode(current)) break;\n current = graph.getNodeAttribute(current, 'parentId');\n }\n }\n graph.setNodeAttribute(nodeId, 'parentId', parentId);\n set(graphUpdateVersionAtom, v => v + 1);\n});\n\n/**\n * Move multiple nodes into a group\n */\nexport const moveNodesToGroupAtom = atom(null, (get, set, {\n nodeIds,\n groupId\n}) => {\n for (const nodeId of nodeIds) {\n set(setNodeParentAtom, {\n nodeId,\n parentId: groupId\n });\n }\n});\n\n/**\n * Remove a node from its group (set parentId to undefined)\n */\nexport const removeFromGroupAtom = atom(null, (get, set, nodeId) => {\n set(setNodeParentAtom, {\n nodeId,\n parentId: undefined\n });\n});\n\n/**\n * Create a group from selected nodes:\n * 1. Create a new \"group\" type node at the bounding box center\n * 2. Set all selected nodes as children\n * Returns the new group node ID (set via callback since node creation is async)\n */\nexport const groupSelectedNodesAtom = atom(null, (get, set, {\n nodeIds,\n groupNodeId\n}) => {\n set(pushHistoryAtom, `Group ${nodeIds.length} nodes`);\n const graph = get(graphAtom);\n\n // Compute bounding box of selected nodes\n let minX = Infinity,\n minY = Infinity,\n maxX = -Infinity,\n maxY = -Infinity;\n for (const nodeId of nodeIds) {\n if (!graph.hasNode(nodeId)) continue;\n const attrs = graph.getNodeAttributes(nodeId);\n minX = Math.min(minX, attrs.x);\n minY = Math.min(minY, attrs.y);\n maxX = Math.max(maxX, attrs.x + (attrs.width || 200));\n maxY = Math.max(maxY, attrs.y + (attrs.height || 100));\n }\n\n // Position group node at bounding box origin with padding\n const padding = 20;\n if (graph.hasNode(groupNodeId)) {\n graph.setNodeAttribute(groupNodeId, 'x', minX - padding);\n graph.setNodeAttribute(groupNodeId, 'y', minY - padding - 30); // extra for header\n graph.setNodeAttribute(groupNodeId, 'width', maxX - minX + 2 * padding);\n graph.setNodeAttribute(groupNodeId, 'height', maxY - minY + 2 * padding + 30);\n }\n\n // Set parent for all nodes\n for (const nodeId of nodeIds) {\n if (nodeId !== groupNodeId && graph.hasNode(nodeId)) {\n graph.setNodeAttribute(nodeId, 'parentId', groupNodeId);\n }\n }\n set(graphUpdateVersionAtom, v => v + 1);\n set(nodePositionUpdateCounterAtom, c => c + 1);\n});\n\n/**\n * Ungroup: remove parent from all children of a group node\n */\nexport const ungroupNodesAtom = atom(null, (get, set, groupId) => {\n set(pushHistoryAtom, 'Ungroup nodes');\n const graph = get(graphAtom);\n graph.forEachNode((nodeId, attrs) => {\n if (attrs.parentId === groupId) {\n graph.setNodeAttribute(nodeId, 'parentId', undefined);\n }\n });\n set(graphUpdateVersionAtom, v => v + 1);\n});\n\n// =============================================================================\n// Drag-to-Nest\n// =============================================================================\n\n/**\n * Nest dragged nodes into a target group node.\n * Sets parentId for each dragged node, then auto-resizes the target.\n */\nexport const nestNodesOnDropAtom = atom(null, (get, set, {\n nodeIds,\n targetId\n}) => {\n set(pushHistoryAtom, 'Nest nodes');\n for (const nodeId of nodeIds) {\n if (nodeId === targetId) continue;\n set(setNodeParentAtom, {\n nodeId,\n parentId: targetId\n });\n }\n set(autoResizeGroupAtom, targetId);\n});\n\n// =============================================================================\n// Descendants Helper\n// =============================================================================\n\n/**\n * Recursively collects all descendant node IDs of a group node.\n * Used by useNodeDrag to move all children when dragging a group.\n */\nexport function getNodeDescendants(graph, groupId) {\n const descendants = [];\n const stack = [groupId];\n while (stack.length > 0) {\n const current = stack.pop();\n graph.forEachNode((nodeId, attrs) => {\n if (attrs.parentId === current) {\n descendants.push(nodeId);\n stack.push(nodeId);\n }\n });\n }\n return descendants;\n}\n\n// =============================================================================\n// Edge Re-routing for Collapsed Groups\n// =============================================================================\n\n/**\n * Derived: maps each collapsed node to its outermost collapsed ancestor.\n * Used by visibleEdgeKeysAtom and edgeFamilyAtom to re-route edges\n * from hidden children to their visible group node.\n *\n * Only nodes that are inside a collapsed group appear in this map.\n * The value is always a visible group node (the outermost collapsed ancestor).\n */\nexport const collapsedEdgeRemapAtom = atom(get => {\n const collapsed = get(collapsedGroupsAtom);\n if (collapsed.size === 0) return new Map();\n get(graphUpdateVersionAtom);\n const graph = get(graphAtom);\n const remap = new Map();\n for (const nodeId of graph.nodes()) {\n let current = nodeId;\n let outermost = null;\n while (true) {\n if (!graph.hasNode(current)) break;\n const parent = graph.getNodeAttribute(current, 'parentId');\n if (!parent) break;\n if (collapsed.has(parent)) outermost = parent;\n current = parent;\n }\n if (outermost) remap.set(nodeId, outermost);\n }\n return remap;\n});\n\n// =============================================================================\n// Group Auto-resize\n// =============================================================================\n\n/**\n * Write atom: recomputes a group node's position and dimensions\n * to contain all its direct children with padding.\n */\nexport const autoResizeGroupAtom = atom(null, (get, set, groupId) => {\n const graph = get(graphAtom);\n if (!graph.hasNode(groupId)) return;\n const children = [];\n graph.forEachNode((nodeId, attrs) => {\n if (attrs.parentId === groupId) {\n children.push(nodeId);\n }\n });\n if (children.length === 0) return;\n const padding = 20;\n const headerHeight = 30;\n let minX = Infinity,\n minY = Infinity,\n maxX = -Infinity,\n maxY = -Infinity;\n for (const childId of children) {\n const attrs = graph.getNodeAttributes(childId);\n minX = Math.min(minX, attrs.x);\n minY = Math.min(minY, attrs.y);\n maxX = Math.max(maxX, attrs.x + (attrs.width || 200));\n maxY = Math.max(maxY, attrs.y + (attrs.height || 100));\n }\n graph.setNodeAttribute(groupId, 'x', minX - padding);\n graph.setNodeAttribute(groupId, 'y', minY - padding - headerHeight);\n graph.setNodeAttribute(groupId, 'width', maxX - minX + 2 * padding);\n graph.setNodeAttribute(groupId, 'height', maxY - minY + 2 * padding + headerHeight);\n set(nodePositionUpdateCounterAtom, c => c + 1);\n});\n\n// =============================================================================\n// Visibility Helper\n// =============================================================================\n\n/**\n * Check if a node should be hidden because it's inside a collapsed group.\n * Walks up the parent chain — if ANY ancestor is collapsed, the node is hidden.\n */\nexport function isNodeCollapsed(nodeId, getParentId, collapsed) {\n let current = nodeId;\n while (true) {\n const parentId = getParentId(current);\n if (!parentId) return false;\n if (collapsed.has(parentId)) return true;\n current = parentId;\n }\n}","/**\n * Graph derived atoms\n *\n * Read-only UI atoms derived from the Graphology graph.\n * Provides node/edge state for rendering with structural equality caching.\n */\n\nimport { atom } from 'jotai';\nimport { atomFamily } from 'jotai-family';\nimport { graphAtom, graphUpdateVersionAtom, currentGraphIdAtom, edgeCreationAtom, draggingNodeIdAtom } from './graph-store';\nimport { nodePositionAtomFamily } from './graph-position';\nimport { panAtom, zoomAtom, viewportRectAtom } from './viewport-store';\nimport { collapsedGroupsAtom, collapsedEdgeRemapAtom } from './group-store';\n\n// --- Derived Node Atoms ---\n\n/**\n * Highest z-index among nodes\n */\nexport const highestZIndexAtom = atom(get => {\n get(graphUpdateVersionAtom);\n const graph = get(graphAtom);\n let maxZ = 0;\n graph.forEachNode((_node, attributes) => {\n if (attributes.zIndex > maxZ) {\n maxZ = attributes.zIndex;\n }\n });\n return maxZ;\n});\n\n/**\n * All UI nodes with current positions\n *\n * Uses structural equality: if every entry is reference-equal to the\n * previous result, the same array is returned to avoid downstream re-renders.\n */\nconst _prevUiNodesByGraph = new WeakMap();\nexport const uiNodesAtom = atom(get => {\n get(graphUpdateVersionAtom);\n const graph = get(graphAtom);\n const currentDraggingId = get(draggingNodeIdAtom);\n const collapsed = get(collapsedGroupsAtom);\n const nodes = [];\n graph.forEachNode((nodeId, attributes) => {\n // Skip nodes whose parent (or ancestor) is collapsed\n if (collapsed.size > 0) {\n let current = nodeId;\n let hidden = false;\n while (true) {\n if (!graph.hasNode(current)) break;\n const pid = graph.getNodeAttributes(current).parentId;\n if (!pid) break;\n if (collapsed.has(pid)) {\n hidden = true;\n break;\n }\n current = pid;\n }\n if (hidden) return;\n }\n const position = get(nodePositionAtomFamily(nodeId));\n nodes.push({\n ...attributes,\n id: nodeId,\n position,\n isDragging: nodeId === currentDraggingId\n });\n });\n\n // Structural equality: return previous array if length and entries match\n const prev = _prevUiNodesByGraph.get(graph) ?? [];\n if (nodes.length === prev.length && nodes.every((n, i) => n.id === prev[i].id && n.position === prev[i].position && n.isDragging === prev[i].isDragging)) {\n return prev;\n }\n _prevUiNodesByGraph.set(graph, nodes);\n return nodes;\n});\n\n/**\n * All node keys\n */\nexport const nodeKeysAtom = atom(get => {\n get(graphUpdateVersionAtom);\n const graph = get(graphAtom);\n return graph.nodes();\n});\n\n/**\n * Per-node UI state\n */\nexport const nodeFamilyAtom = atomFamily(nodeId => atom(get => {\n get(graphUpdateVersionAtom);\n const graph = get(graphAtom);\n if (!graph.hasNode(nodeId)) {\n return null;\n }\n const attributes = graph.getNodeAttributes(nodeId);\n const position = get(nodePositionAtomFamily(nodeId));\n const currentDraggingId = get(draggingNodeIdAtom);\n return {\n ...attributes,\n id: nodeId,\n position,\n isDragging: nodeId === currentDraggingId\n };\n}), (a, b) => a === b);\n\n// --- Derived Edge Atoms ---\n\n/**\n * All edge keys\n */\nexport const edgeKeysAtom = atom(get => {\n get(graphUpdateVersionAtom);\n const graph = get(graphAtom);\n return graph.edges();\n});\n\n/**\n * Edge keys including temp edge during creation\n */\nexport const edgeKeysWithTempEdgeAtom = atom(get => {\n const keys = get(edgeKeysAtom);\n const edgeCreation = get(edgeCreationAtom);\n if (edgeCreation.isCreating) {\n return [...keys, 'temp-creating-edge'];\n }\n return keys;\n});\n\n/**\n * Per-edge UI state\n *\n * Structural equality cache: stores previous result per edge key.\n * Returns previous object when all fields match — prevents downstream re-renders.\n */\nconst _edgeCacheByGraph = new WeakMap();\nfunction getEdgeCache(graph) {\n let cache = _edgeCacheByGraph.get(graph);\n if (!cache) {\n cache = new Map();\n _edgeCacheByGraph.set(graph, cache);\n }\n return cache;\n}\nexport const edgeFamilyAtom = atomFamily(key => atom(get => {\n // Position reactivity flows through nodePositionAtomFamily(sourceId/targetId)\n // with structural equality caching — only connected edges re-render on drag.\n // graphUpdateVersionAtom handles non-position attribute changes (label, color)\n // and is NOT bumped during drag, so it won't cause O(E) re-renders.\n get(graphUpdateVersionAtom);\n if (key === 'temp-creating-edge') {\n const edgeCreationState = get(edgeCreationAtom);\n const graph = get(graphAtom);\n if (edgeCreationState.isCreating && edgeCreationState.sourceNodeId && edgeCreationState.targetPosition) {\n const sourceNodeAttrs = graph.getNodeAttributes(edgeCreationState.sourceNodeId);\n const sourceNodePosition = get(nodePositionAtomFamily(edgeCreationState.sourceNodeId));\n const pan = get(panAtom);\n const zoom = get(zoomAtom);\n const viewportRect = get(viewportRectAtom);\n if (sourceNodeAttrs && viewportRect) {\n const mouseX = edgeCreationState.targetPosition.x - viewportRect.left;\n const mouseY = edgeCreationState.targetPosition.y - viewportRect.top;\n const worldTargetX = (mouseX - pan.x) / zoom;\n const worldTargetY = (mouseY - pan.y) / zoom;\n const tempEdge = {\n key: 'temp-creating-edge',\n sourceId: edgeCreationState.sourceNodeId,\n targetId: 'temp-cursor',\n sourcePosition: sourceNodePosition,\n targetPosition: {\n x: worldTargetX,\n y: worldTargetY\n },\n sourceNodeSize: sourceNodeAttrs.size,\n sourceNodeWidth: sourceNodeAttrs.width,\n sourceNodeHeight: sourceNodeAttrs.height,\n targetNodeSize: 0,\n targetNodeWidth: 0,\n targetNodeHeight: 0,\n type: 'dashed',\n color: '#FF9800',\n weight: 2,\n label: undefined,\n dbData: {\n id: 'temp-creating-edge',\n graph_id: get(currentGraphIdAtom) || '',\n source_node_id: edgeCreationState.sourceNodeId,\n target_node_id: 'temp-cursor',\n edge_type: 'temp',\n filter_condition: null,\n ui_properties: null,\n data: null,\n created_at: new Date().toISOString(),\n updated_at: new Date().toISOString()\n }\n };\n return tempEdge;\n }\n }\n return null;\n }\n const graph = get(graphAtom);\n if (!graph.hasEdge(key)) {\n getEdgeCache(graph).delete(key);\n return null;\n }\n const sourceId = graph.source(key);\n const targetId = graph.target(key);\n const attributes = graph.getEdgeAttributes(key);\n\n // Re-route edges through collapsed groups: if a source/target is inside\n // a collapsed group, use the group node's position and dimensions instead\n const remap = get(collapsedEdgeRemapAtom);\n const effectiveSourceId = remap.get(sourceId) ?? sourceId;\n const effectiveTargetId = remap.get(targetId) ?? targetId;\n if (!graph.hasNode(effectiveSourceId) || !graph.hasNode(effectiveTargetId)) {\n getEdgeCache(graph).delete(key);\n return null;\n }\n const sourceAttributes = graph.getNodeAttributes(effectiveSourceId);\n const targetAttributes = graph.getNodeAttributes(effectiveTargetId);\n const sourcePosition = get(nodePositionAtomFamily(effectiveSourceId));\n const targetPosition = get(nodePositionAtomFamily(effectiveTargetId));\n if (sourceAttributes && targetAttributes) {\n const next = {\n ...attributes,\n key,\n sourceId: effectiveSourceId,\n targetId: effectiveTargetId,\n sourcePosition,\n targetPosition,\n sourceNodeSize: sourceAttributes.size,\n targetNodeSize: targetAttributes.size,\n sourceNodeWidth: sourceAttributes.width ?? sourceAttributes.size,\n sourceNodeHeight: sourceAttributes.height ?? sourceAttributes.size,\n targetNodeWidth: targetAttributes.width ?? targetAttributes.size,\n targetNodeHeight: targetAttributes.height ?? targetAttributes.size\n };\n\n // Structural equality: return cached object if all fields match\n const edgeCache = getEdgeCache(graph);\n const prev = edgeCache.get(key);\n if (prev && prev.sourcePosition === next.sourcePosition && prev.targetPosition === next.targetPosition && prev.sourceId === next.sourceId && prev.targetId === next.targetId && prev.type === next.type && prev.color === next.color && prev.weight === next.weight && prev.label === next.label && prev.sourceNodeSize === next.sourceNodeSize && prev.targetNodeSize === next.targetNodeSize && prev.sourceNodeWidth === next.sourceNodeWidth && prev.sourceNodeHeight === next.sourceNodeHeight && prev.targetNodeWidth === next.targetNodeWidth && prev.targetNodeHeight === next.targetNodeHeight) {\n return prev;\n }\n edgeCache.set(key, next);\n return next;\n }\n getEdgeCache(graph).delete(key);\n return null;\n}), (a, b) => a === b);","/**\n * Reduced Motion Store\n *\n * Tracks the user's `prefers-reduced-motion` OS setting.\n * When enabled, animations (inertia, layout transitions, edge fades)\n * should be skipped or set to instant.\n */\n\nimport { atom } from 'jotai';\n\n/**\n * Whether the user prefers reduced motion.\n * Initialized from `matchMedia` and updated on changes.\n *\n * Components/hooks should read this atom to skip animations:\n * - Pan/zoom inertia → stop immediately\n * - Layout transitions → apply positions instantly\n * - Edge fade animations → duration = 0\n */\nexport const prefersReducedMotionAtom = atom(typeof window !== 'undefined' && typeof window.matchMedia === 'function' ? window.matchMedia('(prefers-reduced-motion: reduce)').matches : false);\n\n/**\n * Effect atom: subscribes to matchMedia changes.\n * Mount this once in CanvasProvider via useAtom.\n */\nexport const watchReducedMotionAtom = atom(null, (_get, set) => {\n if (typeof window === 'undefined' || typeof window.matchMedia !== 'function') return;\n const mql = window.matchMedia('(prefers-reduced-motion: reduce)');\n const handler = e => {\n set(prefersReducedMotionAtom, e.matches);\n };\n\n // Sync initial state\n set(prefersReducedMotionAtom, mql.matches);\n mql.addEventListener('change', handler);\n return () => mql.removeEventListener('change', handler);\n});","/**\n * Graph Mutations — Edge Operations\n *\n * Edge CRUD, atomic swap, animation, and label editing atoms.\n * Split from graph-mutations.ts for modularity.\n */\n\nimport { atom } from 'jotai';\nimport { graphAtom, graphUpdateVersionAtom } from './graph-store';\nimport { nodePositionUpdateCounterAtom } from './graph-position';\nimport { edgeFamilyAtom } from './graph-derived';\nimport { createDebug } from '../utils/debug';\nimport { prefersReducedMotionAtom } from './reduced-motion-store';\nconst debug = createDebug('graph:mutations:edges');\n\n// --- Edge CRUD ---\n\n/**\n * Add an edge directly to local graph\n */\nexport const addEdgeToLocalGraphAtom = atom(null, (get, set, newEdge) => {\n const graph = get(graphAtom);\n if (graph.hasNode(newEdge.source_node_id) && graph.hasNode(newEdge.target_node_id)) {\n const uiProps = newEdge.ui_properties || {};\n const attributes = {\n type: typeof uiProps.style === 'string' ? uiProps.style : 'solid',\n color: typeof uiProps.color === 'string' ? uiProps.color : '#999',\n label: newEdge.edge_type ?? undefined,\n weight: typeof uiProps.weight === 'number' ? uiProps.weight : 1,\n dbData: newEdge\n };\n if (!graph.hasEdge(newEdge.id)) {\n try {\n debug('Adding edge %s to local graph', newEdge.id);\n graph.addEdgeWithKey(newEdge.id, newEdge.source_node_id, newEdge.target_node_id, attributes);\n set(graphAtom, graph.copy());\n set(graphUpdateVersionAtom, v => v + 1);\n } catch (e) {\n debug('Failed to add edge %s: %o', newEdge.id, e);\n }\n }\n }\n});\n\n/**\n * Remove an edge from local graph\n */\nexport const removeEdgeFromLocalGraphAtom = atom(null, (get, set, edgeId) => {\n const graph = get(graphAtom);\n if (graph.hasEdge(edgeId)) {\n graph.dropEdge(edgeId);\n set(graphAtom, graph.copy());\n set(graphUpdateVersionAtom, v => v + 1);\n }\n});\n\n/**\n * Atomic swap of temp edge with real edge (prevents render flash)\n */\nexport const swapEdgeAtomicAtom = atom(null, (get, set, {\n tempEdgeId,\n newEdge\n}) => {\n const graph = get(graphAtom);\n if (graph.hasEdge(tempEdgeId)) {\n graph.dropEdge(tempEdgeId);\n }\n if (graph.hasNode(newEdge.source_node_id) && graph.hasNode(newEdge.target_node_id)) {\n const uiProps = newEdge.ui_properties || {};\n const attributes = {\n type: typeof uiProps.style === 'string' ? uiProps.style : 'solid',\n color: typeof uiProps.color === 'string' ? uiProps.color : '#999',\n label: newEdge.edge_type ?? undefined,\n weight: typeof uiProps.weight === 'number' ? uiProps.weight : 1,\n dbData: newEdge\n };\n if (!graph.hasEdge(newEdge.id)) {\n try {\n debug('Atomically swapping temp edge %s with real edge %s', tempEdgeId, newEdge.id);\n graph.addEdgeWithKey(newEdge.id, newEdge.source_node_id, newEdge.target_node_id, attributes);\n } catch (e) {\n debug('Failed to add edge %s: %o', newEdge.id, e);\n }\n }\n }\n set(graphAtom, graph.copy());\n set(graphUpdateVersionAtom, v => v + 1);\n});\n\n// --- Edge Animation State ---\n\n/**\n * Departing edges: snapshots of edges that have been removed from the graph\n * but are still being rendered with an exit animation.\n */\nexport const departingEdgesAtom = atom(new Map());\n\n/**\n * Edge animation duration in milliseconds\n */\nexport const EDGE_ANIMATION_DURATION = 300;\n\n/**\n * Remove an edge with a fade-out animation.\n * Snapshots the edge state, removes it from the graph, then cleans up\n * the departing entry after the animation duration.\n */\nexport const removeEdgeWithAnimationAtom = atom(null, (get, set, edgeKey) => {\n const edgeState = get(edgeFamilyAtom(edgeKey));\n if (edgeState) {\n const departing = new Map(get(departingEdgesAtom));\n departing.set(edgeKey, edgeState);\n set(departingEdgesAtom, departing);\n set(removeEdgeFromLocalGraphAtom, edgeKey);\n const duration = get(prefersReducedMotionAtom) ? 0 : EDGE_ANIMATION_DURATION;\n setTimeout(() => {\n const current = new Map(get(departingEdgesAtom));\n current.delete(edgeKey);\n set(departingEdgesAtom, current);\n }, duration);\n }\n});\n\n// --- Edge Label Editing ---\n\n/**\n * Edge key currently being edited (label inline editing).\n * null when no edge label is being edited.\n */\nexport const editingEdgeLabelAtom = atom(null);\n\n/**\n * Update an edge's label attribute\n */\nexport const updateEdgeLabelAtom = atom(null, (get, set, {\n edgeKey,\n label\n}) => {\n const graph = get(graphAtom);\n if (graph.hasEdge(edgeKey)) {\n graph.setEdgeAttribute(edgeKey, 'label', label || undefined);\n set(graphUpdateVersionAtom, v => v + 1);\n set(nodePositionUpdateCounterAtom, c => c + 1);\n }\n});","/**\n * Graph Mutations — Advanced Operations\n *\n * Split/merge node atoms and drop-target state.\n * Split from graph-mutations.ts for modularity.\n */\n\nimport { atom } from 'jotai';\nimport { graphAtom, graphUpdateVersionAtom, currentGraphIdAtom } from './graph-store';\nimport { nodePositionUpdateCounterAtom } from './graph-position';\nimport { pushHistoryAtom } from './history-store';\nimport { createDebug } from '../utils/debug';\nimport { addEdgeToLocalGraphAtom } from './graph-mutations-edges';\nimport { addNodeToLocalGraphAtom, optimisticDeleteNodeAtom } from './graph-mutations';\nconst debug = createDebug('graph:mutations:advanced');\n\n// --- Drop Target ---\n\n/**\n * ID of the node currently being hovered over as a drop target during drag.\n * Used by drag-to-nest: when a dragged node is released over a target,\n * the dragged node becomes a child of the target.\n */\nexport const dropTargetNodeIdAtom = atom(null);\n\n// --- Split Node ---\n\n/**\n * Split a node into two copies: original stays at position1, clone at position2.\n * All incident edges are duplicated so both copies have the same connections.\n */\nexport const splitNodeAtom = atom(null, (get, set, {\n nodeId,\n position1,\n position2\n}) => {\n const graph = get(graphAtom);\n if (!graph.hasNode(nodeId)) return;\n const attrs = graph.getNodeAttributes(nodeId);\n const graphId = get(currentGraphIdAtom) || attrs.dbData.graph_id;\n\n // Snapshot for undo (must be before any mutations)\n set(pushHistoryAtom, 'Split node');\n\n // Move original to position1 (before addNodeToLocalGraphAtom which calls graph.copy())\n graph.setNodeAttribute(nodeId, 'x', position1.x);\n graph.setNodeAttribute(nodeId, 'y', position1.y);\n\n // Collect edges before addNodeToLocalGraphAtom replaces graph ref\n const edges = [];\n graph.forEachEdge(nodeId, (_key, eAttrs, source, target) => {\n edges.push({\n source,\n target,\n attrs: eAttrs\n });\n });\n\n // Create clone\n const cloneId = `split-${Date.now()}-${Math.random().toString(36).slice(2, 8)}`;\n const cloneDbNode = {\n ...attrs.dbData,\n id: cloneId,\n graph_id: graphId,\n ui_properties: {\n ...(attrs.dbData.ui_properties || {}),\n x: position2.x,\n y: position2.y\n },\n created_at: new Date().toISOString(),\n updated_at: new Date().toISOString()\n };\n set(addNodeToLocalGraphAtom, cloneDbNode);\n\n // Duplicate all edges to clone\n for (const edge of edges) {\n const newSource = edge.source === nodeId ? cloneId : edge.source;\n const newTarget = edge.target === nodeId ? cloneId : edge.target;\n set(addEdgeToLocalGraphAtom, {\n ...edge.attrs.dbData,\n id: `split-e-${Date.now()}-${Math.random().toString(36).slice(2, 8)}`,\n source_node_id: newSource,\n target_node_id: newTarget\n });\n }\n set(graphUpdateVersionAtom, v => v + 1);\n set(nodePositionUpdateCounterAtom, c => c + 1);\n debug('Split node %s → clone %s', nodeId, cloneId);\n});\n\n// --- Merge Nodes ---\n\n/**\n * Merge multiple nodes into one. The first node in the array survives.\n * Edges from doomed nodes are re-routed to the survivor.\n * Edges between merged nodes are discarded (would be self-loops).\n */\nexport const mergeNodesAtom = atom(null, (get, set, {\n nodeIds\n}) => {\n if (nodeIds.length < 2) return;\n const graph = get(graphAtom);\n const [survivorId, ...doomed] = nodeIds;\n if (!graph.hasNode(survivorId)) return;\n\n // Snapshot for undo (must be before any mutations)\n set(pushHistoryAtom, `Merge ${nodeIds.length} nodes`);\n const doomedSet = new Set(doomed);\n for (const doomedId of doomed) {\n if (!graph.hasNode(doomedId)) continue;\n\n // Collect edges before deletion (dropNode removes them)\n const edges = [];\n graph.forEachEdge(doomedId, (_key, eAttrs, source, target) => {\n edges.push({\n source,\n target,\n attrs: eAttrs\n });\n });\n for (const edge of edges) {\n const newSource = doomedSet.has(edge.source) ? survivorId : edge.source;\n const newTarget = doomedSet.has(edge.target) ? survivorId : edge.target;\n // Skip self-loops (edges between merged nodes)\n if (newSource === newTarget) continue;\n set(addEdgeToLocalGraphAtom, {\n ...edge.attrs.dbData,\n id: `merge-e-${Date.now()}-${Math.random().toString(36).slice(2, 8)}`,\n source_node_id: newSource,\n target_node_id: newTarget\n });\n }\n\n // Delete doomed node (auto-removes its original edges)\n set(optimisticDeleteNodeAtom, {\n nodeId: doomedId\n });\n }\n set(graphUpdateVersionAtom, v => v + 1);\n debug('Merged nodes %o → survivor %s', nodeIds, survivorId);\n});","/**\n * Graph mutations\n *\n * Write atoms for graph CRUD operations, drag lifecycle,\n * edge animations, split/merge, and DB sync.\n */\n\nimport { atom } from 'jotai';\nimport Graph from 'graphology';\nimport { graphAtom, graphUpdateVersionAtom, graphOptions, currentGraphIdAtom, draggingNodeIdAtom, preDragNodeAttributesAtom } from './graph-store';\nimport { nodePositionAtomFamily, nodePositionUpdateCounterAtom, cleanupNodePositionAtom } from './graph-position';\nimport { highestZIndexAtom } from './graph-derived';\nimport { autoResizeGroupAtom } from './group-store';\nimport { createDebug } from '../utils/debug';\nconst debug = createDebug('graph:mutations');\n\n// --- Node Action Atoms ---\n\n/**\n * Start dragging a node\n */\nexport const startNodeDragAtom = atom(null, (get, set, {\n nodeId\n}) => {\n const graph = get(graphAtom);\n if (!graph.hasNode(nodeId)) return;\n const currentAttributes = graph.getNodeAttributes(nodeId);\n set(preDragNodeAttributesAtom, JSON.parse(JSON.stringify(currentAttributes)));\n const currentHighestZIndex = get(highestZIndexAtom);\n const newZIndex = currentHighestZIndex + 1;\n graph.setNodeAttribute(nodeId, 'zIndex', newZIndex);\n set(draggingNodeIdAtom, nodeId);\n});\n\n/**\n * End dragging a node\n */\nexport const endNodeDragAtom = atom(null, (get, set, _payload) => {\n const currentDraggingId = get(draggingNodeIdAtom);\n if (currentDraggingId) {\n debug('Node %s drag ended', currentDraggingId);\n\n // Auto-resize parent group if the dragged node belongs to one\n const graph = get(graphAtom);\n if (graph.hasNode(currentDraggingId)) {\n const parentId = graph.getNodeAttribute(currentDraggingId, 'parentId');\n if (parentId) {\n set(autoResizeGroupAtom, parentId);\n }\n }\n }\n set(draggingNodeIdAtom, null);\n set(preDragNodeAttributesAtom, null);\n});\n\n/**\n * Optimistically delete a node from local graph\n */\nexport const optimisticDeleteNodeAtom = atom(null, (get, set, {\n nodeId\n}) => {\n const graph = get(graphAtom);\n if (graph.hasNode(nodeId)) {\n graph.dropNode(nodeId);\n set(cleanupNodePositionAtom, nodeId);\n set(graphAtom, graph.copy());\n debug('Optimistically deleted node %s', nodeId);\n }\n});\n\n/**\n * Optimistically delete an edge from local graph\n */\nexport const optimisticDeleteEdgeAtom = atom(null, (get, set, {\n edgeKey\n}) => {\n const graph = get(graphAtom);\n if (graph.hasEdge(edgeKey)) {\n graph.dropEdge(edgeKey);\n set(graphAtom, graph.copy());\n debug('Optimistically deleted edge %s', edgeKey);\n }\n});\n\n// --- Local Graph Mutations ---\n\n/**\n * Add a node directly to local graph\n */\nexport const addNodeToLocalGraphAtom = atom(null, (get, set, newNode) => {\n const graph = get(graphAtom);\n if (graph.hasNode(newNode.id)) {\n debug('Node %s already exists, skipping', newNode.id);\n return;\n }\n const uiProps = newNode.ui_properties || {};\n const attributes = {\n x: typeof uiProps.x === 'number' ? uiProps.x : Math.random() * 800,\n y: typeof uiProps.y === 'number' ? uiProps.y : Math.random() * 600,\n size: typeof uiProps.size === 'number' ? uiProps.size : 15,\n width: typeof uiProps.width === 'number' ? uiProps.width : 500,\n height: typeof uiProps.height === 'number' ? uiProps.height : 500,\n color: typeof uiProps.color === 'string' ? uiProps.color : '#ccc',\n label: newNode.label || newNode.node_type || newNode.id,\n zIndex: typeof uiProps.zIndex === 'number' ? uiProps.zIndex : 0,\n dbData: newNode\n };\n debug('Adding node %s to local graph at (%d, %d)', newNode.id, attributes.x, attributes.y);\n graph.addNode(newNode.id, attributes);\n // Position is derived from graph - just update graph and trigger re-render\n set(graphAtom, graph.copy());\n set(graphUpdateVersionAtom, v => v + 1);\n set(nodePositionUpdateCounterAtom, c => c + 1);\n});\n\n// Re-export all edge and advanced atoms for backward compat\nexport { swapEdgeAtomicAtom, departingEdgesAtom, EDGE_ANIMATION_DURATION, removeEdgeWithAnimationAtom, editingEdgeLabelAtom, updateEdgeLabelAtom } from './graph-mutations-edges';\nexport { dropTargetNodeIdAtom, splitNodeAtom, mergeNodesAtom } from './graph-mutations-advanced';\n\n// --- DB Sync Atom ---\n\n/**\n * Load/sync graph data from database\n * Merges DB data with local state, preserving positions during drag\n */\nexport const loadGraphFromDbAtom = atom(null, (get, set, fetchedNodes, fetchedEdges) => {\n debug('========== START SYNC ==========');\n debug('Fetched nodes: %d, edges: %d', fetchedNodes.length, fetchedEdges.length);\n const currentGraphId = get(currentGraphIdAtom);\n\n // Validate data belongs to current graph\n if (fetchedNodes.length > 0 && fetchedNodes[0].graph_id !== currentGraphId) {\n debug('Skipping sync - data belongs to different graph');\n return;\n }\n const existingGraph = get(graphAtom);\n const isDragging = get(draggingNodeIdAtom) !== null;\n if (isDragging) {\n debug('Skipping sync - drag in progress');\n return;\n }\n\n // Detect graph switch\n const existingNodeIds = new Set(existingGraph.nodes());\n const fetchedNodeIds = new Set(fetchedNodes.map(n => n.id));\n const hasAnyCommonNodes = Array.from(existingNodeIds).some(id => fetchedNodeIds.has(id));\n let graph;\n if (hasAnyCommonNodes && existingNodeIds.size > 0) {\n debug('Merging DB data into existing graph');\n graph = existingGraph.copy();\n } else {\n debug('Creating fresh graph (graph switch detected)');\n graph = new Graph(graphOptions);\n }\n const fetchedEdgeIds = new Set(fetchedEdges.map(e => e.id));\n\n // Remove deleted nodes\n if (hasAnyCommonNodes && existingNodeIds.size > 0) {\n graph.forEachNode(nodeId => {\n if (!fetchedNodeIds.has(nodeId)) {\n debug('Removing deleted node: %s', nodeId);\n graph.dropNode(nodeId);\n nodePositionAtomFamily.remove(nodeId);\n }\n });\n }\n\n // Merge/add nodes\n fetchedNodes.forEach(node => {\n const uiProps = node.ui_properties || {};\n const newX = typeof uiProps.x === 'number' ? uiProps.x : Math.random() * 800;\n const newY = typeof uiProps.y === 'number' ? uiProps.y : Math.random() * 600;\n if (graph.hasNode(node.id)) {\n const currentAttrs = graph.getNodeAttributes(node.id);\n const attributes = {\n x: newX,\n y: newY,\n size: typeof uiProps.size === 'number' ? uiProps.size : currentAttrs.size,\n width: typeof uiProps.width === 'number' ? uiProps.width : currentAttrs.width ?? 500,\n height: typeof uiProps.height === 'number' ? uiProps.height : currentAttrs.height ?? 500,\n color: typeof uiProps.color === 'string' ? uiProps.color : currentAttrs.color,\n label: node.label || node.node_type || node.id,\n zIndex: typeof uiProps.zIndex === 'number' ? uiProps.zIndex : currentAttrs.zIndex,\n dbData: node\n };\n graph.replaceNodeAttributes(node.id, attributes);\n } else {\n const attributes = {\n x: newX,\n y: newY,\n size: typeof uiProps.size === 'number' ? uiProps.size : 15,\n width: typeof uiProps.width === 'number' ? uiProps.width : 500,\n height: typeof uiProps.height === 'number' ? uiProps.height : 500,\n color: typeof uiProps.color === 'string' ? uiProps.color : '#ccc',\n label: node.label || node.node_type || node.id,\n zIndex: typeof uiProps.zIndex === 'number' ? uiProps.zIndex : 0,\n dbData: node\n };\n graph.addNode(node.id, attributes);\n }\n });\n\n // Remove deleted edges\n graph.forEachEdge(edgeId => {\n if (!fetchedEdgeIds.has(edgeId)) {\n debug('Removing deleted edge: %s', edgeId);\n graph.dropEdge(edgeId);\n }\n });\n\n // Merge/add edges\n fetchedEdges.forEach(edge => {\n if (graph.hasNode(edge.source_node_id) && graph.hasNode(edge.target_node_id)) {\n const uiProps = edge.ui_properties || {};\n const attributes = {\n type: typeof uiProps.style === 'string' ? uiProps.style : 'solid',\n color: typeof uiProps.color === 'string' ? uiProps.color : '#999',\n label: edge.edge_type ?? undefined,\n weight: typeof uiProps.weight === 'number' ? uiProps.weight : 1,\n dbData: edge\n };\n if (graph.hasEdge(edge.id)) {\n graph.replaceEdgeAttributes(edge.id, attributes);\n } else {\n try {\n graph.addEdgeWithKey(edge.id, edge.source_node_id, edge.target_node_id, attributes);\n } catch (e) {\n debug('Failed to add edge %s: %o', edge.id, e);\n }\n }\n }\n });\n set(graphAtom, graph);\n set(graphUpdateVersionAtom, v => v + 1);\n debug('========== SYNC COMPLETE ==========');\n debug('Final graph: %d nodes, %d edges', graph.order, graph.size);\n});","/**\n * Sync state management\n *\n * Tracks sync status, pending mutations, and mutation queue for retry.\n */\n\nimport { atom } from 'jotai';\nimport { createDebug } from '../utils/debug';\nconst debug = createDebug('sync');\n\n// --- Core State Atoms ---\n\n/**\n * Current sync status\n */\nexport const syncStatusAtom = atom('synced');\n\n/**\n * Number of pending (in-flight) mutations\n */\nexport const pendingMutationsCountAtom = atom(0);\n\n/**\n * Network online status\n */\nexport const isOnlineAtom = atom(typeof navigator !== 'undefined' ? navigator.onLine : true);\n\n/**\n * Last sync error message\n */\nexport const lastSyncErrorAtom = atom(null);\n\n/**\n * Last successful sync timestamp\n */\nexport const lastSyncTimeAtom = atom(Date.now());\n\n/**\n * Queued mutations for retry\n */\nexport const mutationQueueAtom = atom([]);\n\n// --- Derived State ---\n\n/**\n * Combined sync state for easy consumption\n */\nexport const syncStateAtom = atom(get => ({\n status: get(syncStatusAtom),\n pendingMutations: get(pendingMutationsCountAtom),\n lastError: get(lastSyncErrorAtom),\n lastSyncTime: get(lastSyncTimeAtom),\n isOnline: get(isOnlineAtom),\n queuedMutations: get(mutationQueueAtom).length\n}));\n\n// --- Mutation Tracking Actions ---\n\n/**\n * Start tracking a mutation (increment counter)\n */\nexport const startMutationAtom = atom(null, (get, set) => {\n const currentCount = get(pendingMutationsCountAtom);\n const newCount = currentCount + 1;\n set(pendingMutationsCountAtom, newCount);\n debug('Mutation started. Pending count: %d -> %d', currentCount, newCount);\n if (newCount > 0 && get(syncStatusAtom) !== 'syncing') {\n set(syncStatusAtom, 'syncing');\n debug('Status -> syncing');\n }\n});\n\n/**\n * Complete a mutation (decrement counter)\n */\nexport const completeMutationAtom = atom(null, (get, set, success = true) => {\n const currentCount = get(pendingMutationsCountAtom);\n const newCount = Math.max(0, currentCount - 1);\n set(pendingMutationsCountAtom, newCount);\n debug('Mutation completed (success: %s). Pending count: %d -> %d', success, currentCount, newCount);\n if (success) {\n set(lastSyncTimeAtom, Date.now());\n if (newCount === 0) {\n set(lastSyncErrorAtom, null);\n }\n }\n\n // Update status if no more pending mutations\n if (newCount === 0) {\n const isOnline = get(isOnlineAtom);\n const hasError = get(lastSyncErrorAtom) !== null;\n if (hasError) {\n set(syncStatusAtom, 'error');\n debug('Status -> error');\n } else if (!isOnline) {\n set(syncStatusAtom, 'offline');\n debug('Status -> offline');\n } else {\n set(syncStatusAtom, 'synced');\n debug('Status -> synced');\n }\n }\n});\n\n/**\n * Track a mutation error\n */\nexport const trackMutationErrorAtom = atom(null, (_get, set, error) => {\n set(lastSyncErrorAtom, error);\n debug('Mutation failed: %s', error);\n});\n\n// --- Network Status ---\n\n/**\n * Set online/offline status\n */\nexport const setOnlineStatusAtom = atom(null, (get, set, isOnline) => {\n set(isOnlineAtom, isOnline);\n const pendingCount = get(pendingMutationsCountAtom);\n const hasError = get(lastSyncErrorAtom) !== null;\n const queueLength = get(mutationQueueAtom).length;\n if (pendingCount === 0) {\n if (hasError || queueLength > 0) {\n set(syncStatusAtom, 'error');\n } else {\n set(syncStatusAtom, isOnline ? 'synced' : 'offline');\n }\n }\n});\n\n// --- Mutation Queue ---\n\n/**\n * Add a mutation to the retry queue\n */\nexport const queueMutationAtom = atom(null, (get, set, mutation) => {\n const queue = get(mutationQueueAtom);\n const newMutation = {\n ...mutation,\n id: crypto.randomUUID(),\n timestamp: Date.now(),\n retryCount: 0,\n maxRetries: mutation.maxRetries ?? 3\n };\n const newQueue = [...queue, newMutation];\n set(mutationQueueAtom, newQueue);\n debug('Queued mutation: %s. Queue size: %d', mutation.type, newQueue.length);\n if (get(pendingMutationsCountAtom) === 0) {\n set(syncStatusAtom, 'error');\n }\n return newMutation.id;\n});\n\n/**\n * Remove a mutation from the queue\n */\nexport const dequeueMutationAtom = atom(null, (get, set, mutationId) => {\n const queue = get(mutationQueueAtom);\n const newQueue = queue.filter(m => m.id !== mutationId);\n set(mutationQueueAtom, newQueue);\n debug('Dequeued mutation: %s. Queue size: %d', mutationId, newQueue.length);\n if (newQueue.length === 0 && get(pendingMutationsCountAtom) === 0 && get(lastSyncErrorAtom) === null) {\n set(syncStatusAtom, get(isOnlineAtom) ? 'synced' : 'offline');\n }\n});\n\n/**\n * Increment retry count for a mutation\n */\nexport const incrementRetryCountAtom = atom(null, (get, set, mutationId) => {\n const queue = get(mutationQueueAtom);\n const newQueue = queue.map(m => m.id === mutationId ? {\n ...m,\n retryCount: m.retryCount + 1\n } : m);\n set(mutationQueueAtom, newQueue);\n});\n\n/**\n * Get the next mutation to retry\n */\nexport const getNextQueuedMutationAtom = atom(get => {\n const queue = get(mutationQueueAtom);\n return queue.find(m => m.retryCount < m.maxRetries) ?? null;\n});\n\n/**\n * Clear all queued mutations\n */\nexport const clearMutationQueueAtom = atom(null, (get, set) => {\n set(mutationQueueAtom, []);\n debug('Cleared mutation queue');\n if (get(pendingMutationsCountAtom) === 0 && get(lastSyncErrorAtom) === null) {\n set(syncStatusAtom, get(isOnlineAtom) ? 'synced' : 'offline');\n }\n});","/**\n * Interaction Store\n *\n * Manages canvas interaction modes (picking nodes, points, etc.)\n * and visual feedback during interactions.\n */\n\nimport { atom } from 'jotai';\n\n// =============================================================================\n// Input Mode Types\n// =============================================================================\n\n/**\n * A selectable option for 'select' type inputs.\n */\n\n/**\n * Input mode - controls how canvas interactions are routed.\n * When not 'normal', canvas clicks are intercepted for special handling.\n */\n\n// =============================================================================\n// Feedback Types\n// =============================================================================\n\n/**\n * Visual feedback state for the canvas overlay.\n */\n\n// =============================================================================\n// Input Mode Atoms\n// =============================================================================\n\n/**\n * Current input mode - controls how canvas interactions are routed.\n */\nexport const inputModeAtom = atom({\n type: 'normal'\n});\n\n/**\n * Keyboard interaction mode for arrow/space/enter behavior.\n */\nexport const keyboardInteractionModeAtom = atom('navigate');\n\n/**\n * Visual feedback state for overlays during interaction.\n */\nexport const interactionFeedbackAtom = atom(null);\n\n/**\n * Resolver for pending input values (used by command systems).\n */\nexport const pendingInputResolverAtom = atom(null);\n\n// =============================================================================\n// Action Atoms\n// =============================================================================\n\n/**\n * Reset input mode to normal.\n */\nexport const resetInputModeAtom = atom(null, (_get, set) => {\n set(inputModeAtom, {\n type: 'normal'\n });\n set(interactionFeedbackAtom, null);\n set(pendingInputResolverAtom, null);\n});\n\n/**\n * Reset keyboard interaction mode back to navigation.\n */\nexport const resetKeyboardInteractionModeAtom = atom(null, (_get, set) => {\n set(keyboardInteractionModeAtom, 'navigate');\n});\n\n/**\n * Set keyboard interaction mode explicitly.\n */\nexport const setKeyboardInteractionModeAtom = atom(null, (_get, set, mode) => {\n set(keyboardInteractionModeAtom, mode);\n});\n\n/**\n * Set input mode for picking a node.\n */\nexport const startPickNodeAtom = atom(null, (_get, set, options) => {\n set(inputModeAtom, {\n type: 'pickNode',\n ...options\n });\n});\n\n/**\n * Set input mode for picking multiple nodes.\n */\nexport const startPickNodesAtom = atom(null, (_get, set, options) => {\n set(inputModeAtom, {\n type: 'pickNodes',\n ...options\n });\n});\n\n/**\n * Set input mode for picking a point on the canvas.\n */\nexport const startPickPointAtom = atom(null, (_get, set, options) => {\n set(inputModeAtom, {\n type: 'pickPoint',\n ...options\n });\n});\n\n/**\n * Provide input value (called when user picks a node/point).\n */\nexport const provideInputAtom = atom(null, (get, set, value) => {\n set(pendingInputResolverAtom, value);\n // Input mode is typically reset by the consumer after receiving the value\n});\n\n/**\n * Update feedback during interaction.\n */\nexport const updateInteractionFeedbackAtom = atom(null, (get, set, feedback) => {\n const current = get(interactionFeedbackAtom);\n set(interactionFeedbackAtom, {\n ...current,\n ...feedback\n });\n});\n\n// =============================================================================\n// Derived Atoms\n// =============================================================================\n\n/**\n * Whether canvas is in a picking mode (not normal).\n */\nexport const isPickingModeAtom = atom(get => {\n const mode = get(inputModeAtom);\n return mode.type !== 'normal';\n});\n\n/**\n * Whether currently picking a node.\n */\nexport const isPickNodeModeAtom = atom(get => {\n const mode = get(inputModeAtom);\n return mode.type === 'pickNode' || mode.type === 'pickNodes';\n});","/**\n * Locked Node Store\n *\n * Manages \"locking\" onto a node for detailed viewing/editing.\n * Triple-click on a node locks it, showing additional panels/pages.\n */\n\nimport { atom } from 'jotai';\nimport { uiNodesAtom } from './graph-derived';\n\n// =============================================================================\n// Locked Node Atoms\n// =============================================================================\n\n/**\n * Currently locked node ID (null = no node locked).\n */\nexport const lockedNodeIdAtom = atom(null);\n\n/**\n * Full node data for the locked node.\n */\nexport const lockedNodeDataAtom = atom(get => {\n const id = get(lockedNodeIdAtom);\n if (!id) return null;\n const nodes = get(uiNodesAtom);\n return nodes.find(n => n.id === id) || null;\n});\n\n/**\n * Current page index for locked node (0-based).\n */\nexport const lockedNodePageIndexAtom = atom(0);\n\n/**\n * Total number of pages available (set by app).\n */\nexport const lockedNodePageCountAtom = atom(1);\n\n// =============================================================================\n// Action Atoms\n// =============================================================================\n\n/**\n * Lock onto a node (typically triggered by triple-click).\n * @param nodeId - The node ID to lock onto\n * @param nodeData - Optional node data (for app compatibility, not used internally)\n */\nexport const lockNodeAtom = atom(null, (_get, set, payload) => {\n set(lockedNodeIdAtom, payload.nodeId);\n set(lockedNodePageIndexAtom, 0); // Reset to first page\n});\n\n/**\n * Unlock the currently locked node.\n */\nexport const unlockNodeAtom = atom(null, (_get, set) => {\n set(lockedNodeIdAtom, null);\n});\n\n/**\n * Navigate to next page in locked node view.\n */\nexport const nextLockedPageAtom = atom(null, (get, set) => {\n const current = get(lockedNodePageIndexAtom);\n const pageCount = get(lockedNodePageCountAtom);\n set(lockedNodePageIndexAtom, (current + 1) % pageCount);\n});\n\n/**\n * Navigate to previous page in locked node view.\n */\nexport const prevLockedPageAtom = atom(null, (get, set) => {\n const current = get(lockedNodePageIndexAtom);\n const pageCount = get(lockedNodePageCountAtom);\n set(lockedNodePageIndexAtom, (current - 1 + pageCount) % pageCount);\n});\n\n/**\n * Go to specific page by index.\n */\nexport const goToLockedPageAtom = atom(null, (get, set, index) => {\n const pageCount = get(lockedNodePageCountAtom);\n if (index >= 0 && index < pageCount) {\n set(lockedNodePageIndexAtom, index);\n }\n});\n\n// =============================================================================\n// Derived Atoms\n// =============================================================================\n\n/**\n * Whether a node is currently locked.\n */\nexport const hasLockedNodeAtom = atom(get => get(lockedNodeIdAtom) !== null);","import { c as _c } from \"react/compiler-runtime\";\n/**\n * Node Type Registry\n *\n * Maps node types to their UI components.\n * Apps register their custom node components here.\n */\n\nimport React from 'react';\n\n// =============================================================================\n// Types\n// =============================================================================\n\n/**\n * Props passed to node type components.\n */\n\n/**\n * A component that renders a specific node type.\n */\nimport { jsxs as _jsxs, jsx as _jsx } from \"react/jsx-runtime\";\n// =============================================================================\n// Registry\n// =============================================================================\n\nconst nodeTypeRegistry = new Map();\n\n/**\n * Register a component for a node type.\n *\n * @example\n * ```tsx\n * registerNodeType('widget', WidgetNodeComponent);\n * registerNodeType('data-source', DataSourceNodeComponent);\n * ```\n */\nexport function registerNodeType(nodeType, component) {\n nodeTypeRegistry.set(nodeType, component);\n}\n\n/**\n * Register multiple node types at once.\n *\n * @example\n * ```tsx\n * registerNodeTypes({\n * 'widget': WidgetNodeComponent,\n * 'data-source': DataSourceNodeComponent,\n * 'puck': PuckNodeComponent,\n * });\n * ```\n */\nexport function registerNodeTypes(types) {\n for (const [nodeType, component] of Object.entries(types)) {\n nodeTypeRegistry.set(nodeType, component);\n }\n}\n\n/**\n * Unregister a node type component.\n * Returns true if the type was registered and removed.\n */\nexport function unregisterNodeType(nodeType) {\n return nodeTypeRegistry.delete(nodeType);\n}\n\n/**\n * Get the component for a node type.\n * Returns undefined if no component is registered.\n */\nexport function getNodeTypeComponent(nodeType) {\n if (!nodeType) return undefined;\n return nodeTypeRegistry.get(nodeType);\n}\n\n/**\n * Check if a node type has a registered component.\n */\nexport function hasNodeTypeComponent(nodeType) {\n if (!nodeType) return false;\n return nodeTypeRegistry.has(nodeType);\n}\n\n/**\n * Get all registered node types.\n */\nexport function getRegisteredNodeTypes() {\n return Array.from(nodeTypeRegistry.keys());\n}\n\n/**\n * Clear all registered node types.\n * Useful for testing.\n */\nexport function clearNodeTypeRegistry() {\n nodeTypeRegistry.clear();\n}\n\n// =============================================================================\n// Default Fallback Component\n// =============================================================================\n\n/**\n * Default fallback component for unknown node types.\n */\nexport const FallbackNodeTypeComponent = t0 => {\n const $ = _c(11);\n const {\n nodeData\n } = t0;\n let t1;\n if ($[0] === Symbol.for(\"react.memo_cache_sentinel\")) {\n t1 = {\n padding: \"12px\",\n display: \"flex\",\n flexDirection: \"column\",\n alignItems: \"center\",\n justifyContent: \"center\",\n height: \"100%\",\n color: \"#666\",\n fontSize: \"12px\"\n };\n $[0] = t1;\n } else {\n t1 = $[0];\n }\n const t2 = nodeData.dbData.node_type || \"none\";\n let t3;\n if ($[1] !== t2) {\n t3 = /*#__PURE__*/_jsxs(\"div\", {\n children: [\"Unknown type: \", t2]\n });\n $[1] = t2;\n $[2] = t3;\n } else {\n t3 = $[2];\n }\n let t4;\n if ($[3] === Symbol.for(\"react.memo_cache_sentinel\")) {\n t4 = {\n marginTop: \"4px\",\n opacity: 0.7\n };\n $[3] = t4;\n } else {\n t4 = $[3];\n }\n let t5;\n if ($[4] !== nodeData.id) {\n t5 = nodeData.id.substring(0, 8);\n $[4] = nodeData.id;\n $[5] = t5;\n } else {\n t5 = $[5];\n }\n let t6;\n if ($[6] !== t5) {\n t6 = /*#__PURE__*/_jsx(\"div\", {\n style: t4,\n children: t5\n });\n $[6] = t5;\n $[7] = t6;\n } else {\n t6 = $[7];\n }\n let t7;\n if ($[8] !== t3 || $[9] !== t6) {\n t7 = /*#__PURE__*/_jsxs(\"div\", {\n style: t1,\n children: [t3, t6]\n });\n $[8] = t3;\n $[9] = t6;\n $[10] = t7;\n } else {\n t7 = $[10];\n }\n return t7;\n};","/**\n * Toast Store\n *\n * Lightweight toast notification system for canvas operations.\n * Shows brief, non-interactive messages (e.g., \"Undo: Split node\").\n */\n\nimport { atom } from 'jotai';\n/** Current visible toast, or null */\nexport const canvasToastAtom = atom(null);\n\n/** Show a toast message that auto-clears after 2 seconds */\nexport const showToastAtom = atom(null, (_get, set, message) => {\n const id = `toast-${Date.now()}`;\n set(canvasToastAtom, {\n id,\n message,\n timestamp: Date.now()\n });\n setTimeout(() => {\n set(canvasToastAtom, current => current?.id === id ? null : current);\n }, 2000);\n});","/**\n * Snap-to-Grid Store\n *\n * Optional grid snapping for node positioning.\n * When enabled, nodes snap to the nearest grid point during drag.\n */\n\nimport { atom } from 'jotai';\n// =============================================================================\n// Configuration\n// =============================================================================\n\n/** Whether grid snapping is enabled */\nexport const snapEnabledAtom = atom(false);\n\n/** Grid size in pixels (default: 20) */\nexport const snapGridSizeAtom = atom(20);\n\n/** Whether snap is temporarily disabled (e.g. holding modifier key) */\nexport const snapTemporaryDisableAtom = atom(false);\n\n// =============================================================================\n// Derived\n// =============================================================================\n\n/** Whether snapping is currently active (enabled AND not temporarily disabled) */\nexport const isSnappingActiveAtom = atom(get => {\n return get(snapEnabledAtom) && !get(snapTemporaryDisableAtom);\n});\n\n// =============================================================================\n// Snap Functions (pure — no atoms, usable anywhere)\n// =============================================================================\n\n/**\n * Snap a position to the nearest grid point.\n */\nexport function snapToGrid(pos, gridSize) {\n return {\n x: Math.round(pos.x / gridSize) * gridSize,\n y: Math.round(pos.y / gridSize) * gridSize\n };\n}\n\n/**\n * Snap a position if snapping is active, otherwise return as-is.\n */\nexport function conditionalSnap(pos, gridSize, isActive) {\n return isActive ? snapToGrid(pos, gridSize) : pos;\n}\n\n/**\n * Get snap guide lines for the current position.\n * Returns the X and Y grid lines closest to the position.\n */\nexport function getSnapGuides(pos, gridSize, tolerance = 5) {\n const snappedX = Math.round(pos.x / gridSize) * gridSize;\n const snappedY = Math.round(pos.y / gridSize) * gridSize;\n return {\n x: Math.abs(pos.x - snappedX) < tolerance ? snappedX : null,\n y: Math.abs(pos.y - snappedY) < tolerance ? snappedY : null\n };\n}\n\n// =============================================================================\n// Action Atoms\n// =============================================================================\n\n/** Toggle snap on/off */\nexport const toggleSnapAtom = atom(null, (get, set) => {\n set(snapEnabledAtom, !get(snapEnabledAtom));\n});\n\n/** Set grid size */\nexport const setGridSizeAtom = atom(null, (_get, set, size) => {\n set(snapGridSizeAtom, Math.max(5, Math.min(200, size)));\n});\n\n// =============================================================================\n// Alignment Guides (node-to-node snapping)\n// =============================================================================\n\n/** Whether node alignment guides are enabled */\nexport const snapAlignmentEnabledAtom = atom(true);\n\n/** Toggle alignment guides on/off */\nexport const toggleAlignmentGuidesAtom = atom(null, (get, set) => {\n set(snapAlignmentEnabledAtom, !get(snapAlignmentEnabledAtom));\n});\n\n/** Active alignment guides during drag — written by useNodeDrag, read by AlignmentGuides */\n\nexport const alignmentGuidesAtom = atom({\n verticalGuides: [],\n horizontalGuides: []\n});\n\n/** Clear alignment guides (call on drag end) */\nexport const clearAlignmentGuidesAtom = atom(null, (_get, set) => {\n set(alignmentGuidesAtom, {\n verticalGuides: [],\n horizontalGuides: []\n });\n});\n\n// =============================================================================\n// Alignment Functions (pure — no atoms, usable anywhere)\n// =============================================================================\n\n/**\n * Find alignment guides for a dragged node against a set of other nodes.\n * Checks center-X, left-edge, right-edge, center-Y, top-edge, bottom-edge.\n *\n * Returns arrays of X and Y world coordinates where guides should be drawn.\n *\n * @param dragged - The node being dragged (current position)\n * @param others - Other nodes to check alignment against\n * @param tolerance - Max distance in px to trigger a guide (default: 5)\n */\nexport function findAlignmentGuides(dragged, others, tolerance = 5) {\n const verticals = new Set();\n const horizontals = new Set();\n const dragCX = dragged.x + dragged.width / 2;\n const dragCY = dragged.y + dragged.height / 2;\n const dragRight = dragged.x + dragged.width;\n const dragBottom = dragged.y + dragged.height;\n for (const other of others) {\n const otherCX = other.x + other.width / 2;\n const otherCY = other.y + other.height / 2;\n const otherRight = other.x + other.width;\n const otherBottom = other.y + other.height;\n\n // Vertical guides (X alignment)\n if (Math.abs(dragCX - otherCX) < tolerance) verticals.add(otherCX); // center-center\n if (Math.abs(dragged.x - other.x) < tolerance) verticals.add(other.x); // left-left\n if (Math.abs(dragRight - otherRight) < tolerance) verticals.add(otherRight); // right-right\n if (Math.abs(dragged.x - otherRight) < tolerance) verticals.add(otherRight); // left-right\n if (Math.abs(dragRight - other.x) < tolerance) verticals.add(other.x); // right-left\n if (Math.abs(dragCX - other.x) < tolerance) verticals.add(other.x); // center-left\n if (Math.abs(dragCX - otherRight) < tolerance) verticals.add(otherRight); // center-right\n\n // Horizontal guides (Y alignment)\n if (Math.abs(dragCY - otherCY) < tolerance) horizontals.add(otherCY); // center-center\n if (Math.abs(dragged.y - other.y) < tolerance) horizontals.add(other.y); // top-top\n if (Math.abs(dragBottom - otherBottom) < tolerance) horizontals.add(otherBottom); // bottom-bottom\n if (Math.abs(dragged.y - otherBottom) < tolerance) horizontals.add(otherBottom); // top-bottom\n if (Math.abs(dragBottom - other.y) < tolerance) horizontals.add(other.y); // bottom-top\n if (Math.abs(dragCY - other.y) < tolerance) horizontals.add(other.y); // center-top\n if (Math.abs(dragCY - otherBottom) < tolerance) horizontals.add(otherBottom); // center-bottom\n }\n return {\n verticalGuides: Array.from(verticals),\n horizontalGuides: Array.from(horizontals)\n };\n}","/**\n * Canvas Event Types\n *\n * Type definitions for configurable canvas events.\n *\n * Extracted from settings-types.ts in v1.9.0.\n *\n * @since 1.9.0\n */\n\n// =============================================================================\n// Canvas Events\n// =============================================================================\n\n/**\n * All configurable canvas events that can trigger actions.\n */\nexport let CanvasEventType = /*#__PURE__*/function (CanvasEventType) {\n // Node events\n CanvasEventType[\"NodeClick\"] = \"node:click\";\n CanvasEventType[\"NodeDoubleClick\"] = \"node:double-click\";\n CanvasEventType[\"NodeTripleClick\"] = \"node:triple-click\";\n CanvasEventType[\"NodeRightClick\"] = \"node:right-click\";\n CanvasEventType[\"NodeLongPress\"] = \"node:long-press\";\n // Edge events\n CanvasEventType[\"EdgeClick\"] = \"edge:click\";\n CanvasEventType[\"EdgeDoubleClick\"] = \"edge:double-click\";\n CanvasEventType[\"EdgeRightClick\"] = \"edge:right-click\";\n // Background events\n CanvasEventType[\"BackgroundClick\"] = \"background:click\";\n CanvasEventType[\"BackgroundDoubleClick\"] = \"background:double-click\";\n CanvasEventType[\"BackgroundRightClick\"] = \"background:right-click\";\n CanvasEventType[\"BackgroundLongPress\"] = \"background:long-press\";\n return CanvasEventType;\n}({});\n\n/**\n * Metadata for each event type (for UI display).\n */\n\n/**\n * Registry of all event type metadata.\n */\nexport const EVENT_TYPE_INFO = {\n [CanvasEventType.NodeClick]: {\n type: CanvasEventType.NodeClick,\n label: 'Click Node',\n description: 'Triggered when clicking on a node',\n category: 'node'\n },\n [CanvasEventType.NodeDoubleClick]: {\n type: CanvasEventType.NodeDoubleClick,\n label: 'Double-click Node',\n description: 'Triggered when double-clicking on a node',\n category: 'node'\n },\n [CanvasEventType.NodeTripleClick]: {\n type: CanvasEventType.NodeTripleClick,\n label: 'Triple-click Node',\n description: 'Triggered when triple-clicking on a node',\n category: 'node'\n },\n [CanvasEventType.NodeRightClick]: {\n type: CanvasEventType.NodeRightClick,\n label: 'Right-click Node',\n description: 'Triggered when right-clicking on a node',\n category: 'node'\n },\n [CanvasEventType.NodeLongPress]: {\n type: CanvasEventType.NodeLongPress,\n label: 'Long-press Node',\n description: 'Triggered when long-pressing on a node (mobile/touch)',\n category: 'node'\n },\n [CanvasEventType.EdgeClick]: {\n type: CanvasEventType.EdgeClick,\n label: 'Click Edge',\n description: 'Triggered when clicking on an edge',\n category: 'edge'\n },\n [CanvasEventType.EdgeDoubleClick]: {\n type: CanvasEventType.EdgeDoubleClick,\n label: 'Double-click Edge',\n description: 'Triggered when double-clicking on an edge',\n category: 'edge'\n },\n [CanvasEventType.EdgeRightClick]: {\n type: CanvasEventType.EdgeRightClick,\n label: 'Right-click Edge',\n description: 'Triggered when right-clicking on an edge',\n category: 'edge'\n },\n [CanvasEventType.BackgroundClick]: {\n type: CanvasEventType.BackgroundClick,\n label: 'Click Background',\n description: 'Triggered when clicking on the canvas background',\n category: 'background'\n },\n [CanvasEventType.BackgroundDoubleClick]: {\n type: CanvasEventType.BackgroundDoubleClick,\n label: 'Double-click Background',\n description: 'Triggered when double-clicking on the canvas background',\n category: 'background'\n },\n [CanvasEventType.BackgroundRightClick]: {\n type: CanvasEventType.BackgroundRightClick,\n label: 'Right-click Background',\n description: 'Triggered when right-clicking on the canvas background',\n category: 'background'\n },\n [CanvasEventType.BackgroundLongPress]: {\n type: CanvasEventType.BackgroundLongPress,\n label: 'Long-press Background',\n description: 'Triggered when long-pressing on the canvas background (mobile/touch)',\n category: 'background'\n }\n};","/**\n * Canvas Action Types\n *\n * Action category enum, built-in action IDs, and action definition interfaces.\n *\n * Extracted from settings-types.ts in v1.9.0.\n *\n * @since 1.9.0\n */\n\n// =============================================================================\n// Action Categories\n// =============================================================================\n\n/**\n * Categories for grouping actions in the UI.\n */\nexport let ActionCategory = /*#__PURE__*/function (ActionCategory) {\n /** No action / disabled */\n ActionCategory[\"None\"] = \"none\";\n /** Selection-related actions */\n ActionCategory[\"Selection\"] = \"selection\";\n /** Viewport/navigation actions */\n ActionCategory[\"Viewport\"] = \"viewport\";\n /** Node manipulation actions */\n ActionCategory[\"Node\"] = \"node\";\n /** Layout and arrangement actions */\n ActionCategory[\"Layout\"] = \"layout\";\n /** History actions (undo/redo) */\n ActionCategory[\"History\"] = \"history\";\n /** User-defined custom actions */\n ActionCategory[\"Custom\"] = \"custom\";\n return ActionCategory;\n}({});\n\n// =============================================================================\n// Built-in Action IDs\n// =============================================================================\n\n/**\n * IDs for all built-in actions.\n * Using const assertion for type safety while allowing string comparison.\n */\nexport const BuiltInActionId = {\n // None\n None: 'none',\n // Selection\n SelectNode: 'select-node',\n SelectEdge: 'select-edge',\n AddToSelection: 'add-to-selection',\n ClearSelection: 'clear-selection',\n DeleteSelected: 'delete-selected',\n // Viewport\n FitToView: 'fit-to-view',\n FitAllToView: 'fit-all-to-view',\n CenterOnNode: 'center-on-node',\n ResetViewport: 'reset-viewport',\n // Node\n LockNode: 'lock-node',\n UnlockNode: 'unlock-node',\n ToggleLock: 'toggle-lock',\n OpenContextMenu: 'open-context-menu',\n SplitNode: 'split-node',\n GroupNodes: 'group-nodes',\n MergeNodes: 'merge-nodes',\n // Layout\n ApplyForceLayout: 'apply-force-layout',\n // History\n Undo: 'undo',\n Redo: 'redo',\n // Creation\n CreateNode: 'create-node'\n};\n\n// =============================================================================\n// Action Context\n// =============================================================================\n\n/**\n * Context passed to action handlers when executing.\n */\n\n/**\n * Options for creating an ActionContext via the context builder helpers.\n */\n\n// =============================================================================\n// Action Helpers\n// =============================================================================\n\n/**\n * Helper functions provided to action handlers.\n */\n\n// =============================================================================\n// Action Definition\n// =============================================================================\n\n/**\n * Full definition of an action that can be triggered by events.\n */","/**\n * Canvas Settings State Types\n *\n * Event-action mappings, presets, persisted state, and default mappings.\n *\n * Extracted from settings-types.ts in v1.9.0.\n *\n * @since 1.9.0\n */\n\nimport { CanvasEventType } from './event-types';\nimport { BuiltInActionId } from './action-types';\n\n// =============================================================================\n// Event-Action Mappings\n// =============================================================================\n\n/**\n * Mapping of events to action IDs.\n */\n\n// =============================================================================\n// Presets\n// =============================================================================\n\n/**\n * A settings preset with a name and full event-action mappings.\n */\n\n// =============================================================================\n// Persisted State\n// =============================================================================\n\n/**\n * The full settings state that gets persisted to localStorage.\n */\n\n// =============================================================================\n// Default Mappings\n// =============================================================================\n\n/**\n * Default event-action mappings (the \"Default\" preset).\n */\nexport const DEFAULT_MAPPINGS = {\n [CanvasEventType.NodeClick]: BuiltInActionId.None,\n [CanvasEventType.NodeDoubleClick]: BuiltInActionId.FitToView,\n [CanvasEventType.NodeTripleClick]: BuiltInActionId.ToggleLock,\n [CanvasEventType.NodeRightClick]: BuiltInActionId.OpenContextMenu,\n [CanvasEventType.NodeLongPress]: BuiltInActionId.OpenContextMenu,\n [CanvasEventType.EdgeClick]: BuiltInActionId.SelectEdge,\n [CanvasEventType.EdgeDoubleClick]: BuiltInActionId.None,\n [CanvasEventType.EdgeRightClick]: BuiltInActionId.OpenContextMenu,\n [CanvasEventType.BackgroundClick]: BuiltInActionId.ClearSelection,\n [CanvasEventType.BackgroundDoubleClick]: BuiltInActionId.FitAllToView,\n [CanvasEventType.BackgroundRightClick]: BuiltInActionId.None,\n [CanvasEventType.BackgroundLongPress]: BuiltInActionId.CreateNode\n};","/**\n * Canvas Settings Types — Re-export Barrel\n *\n * All types split into focused modules in v1.9.0:\n * - event-types.ts: CanvasEventType, EventTypeInfo, EVENT_TYPE_INFO\n * - action-types.ts: ActionCategory, BuiltInActionId, ActionContext, etc.\n * - settings-state-types.ts: EventActionMapping, SettingsPreset, CanvasSettingsState, DEFAULT_MAPPINGS\n *\n * This file re-exports everything for backward compatibility.\n *\n * @since 1.9.0\n */\n\n// Event types\nexport { CanvasEventType, EVENT_TYPE_INFO } from './event-types';\n\n// Action types\nexport { ActionCategory, BuiltInActionId } from './action-types';\n\n// Settings state types\nexport { DEFAULT_MAPPINGS } from './settings-state-types';","/**\n * Node & Selection Actions\n *\n * Registration functions for node-related and selection-related built-in actions.\n */\n\nimport { ActionCategory, BuiltInActionId } from './settings-types';\nimport { registerAction } from './action-registry';\nexport function registerSelectionActions() {\n registerAction({\n id: BuiltInActionId.SelectNode,\n label: 'Select Node',\n description: 'Select this node (replacing current selection)',\n category: ActionCategory.Selection,\n icon: 'pointer',\n requiresNode: true,\n isBuiltIn: true,\n handler: (context, helpers) => {\n if (context.nodeId) {\n helpers.selectNode(context.nodeId);\n }\n }\n });\n registerAction({\n id: BuiltInActionId.SelectEdge,\n label: 'Select Edge',\n description: 'Select this edge',\n category: ActionCategory.Selection,\n icon: 'git-commit',\n isBuiltIn: true,\n handler: (context, helpers) => {\n if (context.edgeId) {\n helpers.selectEdge(context.edgeId);\n }\n }\n });\n registerAction({\n id: BuiltInActionId.AddToSelection,\n label: 'Add to Selection',\n description: 'Add this node to the current selection',\n category: ActionCategory.Selection,\n icon: 'plus-square',\n requiresNode: true,\n isBuiltIn: true,\n handler: (context, helpers) => {\n if (context.nodeId) {\n helpers.addToSelection(context.nodeId);\n }\n }\n });\n registerAction({\n id: BuiltInActionId.ClearSelection,\n label: 'Clear Selection',\n description: 'Deselect all nodes',\n category: ActionCategory.Selection,\n icon: 'x-square',\n isBuiltIn: true,\n handler: (_context, helpers) => {\n helpers.clearSelection();\n }\n });\n registerAction({\n id: BuiltInActionId.DeleteSelected,\n label: 'Delete Selected',\n description: 'Delete all selected nodes',\n category: ActionCategory.Selection,\n icon: 'trash-2',\n isBuiltIn: true,\n handler: async (_context, helpers) => {\n const selectedIds = helpers.getSelectedNodeIds();\n for (const nodeId of selectedIds) {\n await helpers.deleteNode(nodeId);\n }\n }\n });\n}\nexport function registerNodeActions() {\n registerAction({\n id: BuiltInActionId.LockNode,\n label: 'Lock Node',\n description: 'Prevent this node from being moved',\n category: ActionCategory.Node,\n icon: 'lock',\n requiresNode: true,\n isBuiltIn: true,\n handler: (context, helpers) => {\n if (context.nodeId) {\n helpers.lockNode(context.nodeId);\n }\n }\n });\n registerAction({\n id: BuiltInActionId.UnlockNode,\n label: 'Unlock Node',\n description: 'Allow this node to be moved',\n category: ActionCategory.Node,\n icon: 'unlock',\n requiresNode: true,\n isBuiltIn: true,\n handler: (context, helpers) => {\n if (context.nodeId) {\n helpers.unlockNode(context.nodeId);\n }\n }\n });\n registerAction({\n id: BuiltInActionId.ToggleLock,\n label: 'Toggle Lock',\n description: 'Toggle whether this node can be moved',\n category: ActionCategory.Node,\n icon: 'lock',\n requiresNode: true,\n isBuiltIn: true,\n handler: (context, helpers) => {\n if (context.nodeId) {\n helpers.toggleLock(context.nodeId);\n }\n }\n });\n registerAction({\n id: BuiltInActionId.OpenContextMenu,\n label: 'Open Context Menu',\n description: 'Show the context menu for this node',\n category: ActionCategory.Node,\n icon: 'more-vertical',\n isBuiltIn: true,\n handler: (context, helpers) => {\n if (helpers.openContextMenu) {\n helpers.openContextMenu(context.screenPosition, context.nodeId);\n }\n }\n });\n registerAction({\n id: BuiltInActionId.CreateNode,\n label: 'Create Node',\n description: 'Create a new node at this position',\n category: ActionCategory.Node,\n icon: 'plus',\n isBuiltIn: true,\n handler: async (context, helpers) => {\n if (helpers.createNode) {\n await helpers.createNode(context.worldPosition);\n }\n }\n });\n registerAction({\n id: BuiltInActionId.SplitNode,\n label: 'Split Node',\n description: 'Split a node into two separate nodes',\n category: ActionCategory.Node,\n icon: 'split',\n isBuiltIn: true,\n handler: async (context, helpers) => {\n if (helpers.splitNode && context.nodeId) {\n await helpers.splitNode(context.nodeId);\n }\n }\n });\n registerAction({\n id: BuiltInActionId.GroupNodes,\n label: 'Group Nodes',\n description: 'Group selected nodes into a parent container',\n category: ActionCategory.Node,\n icon: 'group',\n isBuiltIn: true,\n handler: async (context, helpers) => {\n if (helpers.groupNodes) {\n await helpers.groupNodes(context.selectedNodeIds ?? helpers.getSelectedNodeIds());\n }\n }\n });\n registerAction({\n id: BuiltInActionId.MergeNodes,\n label: 'Merge Nodes',\n description: 'Merge selected nodes into one',\n category: ActionCategory.Node,\n icon: 'merge',\n isBuiltIn: true,\n handler: async (context, helpers) => {\n if (helpers.mergeNodes) {\n await helpers.mergeNodes(context.selectedNodeIds ?? helpers.getSelectedNodeIds());\n }\n }\n });\n}","/**\n * Viewport Actions\n *\n * Registration functions for viewport-related built-in actions.\n */\n\nimport { ActionCategory, BuiltInActionId } from './settings-types';\nimport { registerAction } from './action-registry';\nexport function registerViewportActions() {\n registerAction({\n id: BuiltInActionId.FitToView,\n label: 'Fit to View',\n description: 'Zoom and pan to fit this node in view',\n category: ActionCategory.Viewport,\n icon: 'maximize-2',\n requiresNode: true,\n isBuiltIn: true,\n handler: (context, helpers) => {\n if (context.nodeId) {\n helpers.centerOnNode(context.nodeId);\n }\n }\n });\n registerAction({\n id: BuiltInActionId.FitAllToView,\n label: 'Fit All to View',\n description: 'Zoom and pan to fit all nodes in view',\n category: ActionCategory.Viewport,\n icon: 'maximize',\n isBuiltIn: true,\n handler: (_context, helpers) => {\n helpers.fitToBounds('graph');\n }\n });\n registerAction({\n id: BuiltInActionId.CenterOnNode,\n label: 'Center on Node',\n description: 'Center the viewport on this node',\n category: ActionCategory.Viewport,\n icon: 'crosshair',\n requiresNode: true,\n isBuiltIn: true,\n handler: (context, helpers) => {\n if (context.nodeId) {\n helpers.centerOnNode(context.nodeId);\n }\n }\n });\n registerAction({\n id: BuiltInActionId.ResetViewport,\n label: 'Reset Viewport',\n description: 'Reset zoom to 100% and center on origin',\n category: ActionCategory.Viewport,\n icon: 'home',\n isBuiltIn: true,\n handler: (_context, helpers) => {\n helpers.resetViewport();\n }\n });\n}\nexport function registerHistoryActions() {\n registerAction({\n id: BuiltInActionId.Undo,\n label: 'Undo',\n description: 'Undo the last action',\n category: ActionCategory.History,\n icon: 'undo-2',\n isBuiltIn: true,\n handler: (_context, helpers) => {\n if (helpers.canUndo()) {\n helpers.undo();\n }\n }\n });\n registerAction({\n id: BuiltInActionId.Redo,\n label: 'Redo',\n description: 'Redo the last undone action',\n category: ActionCategory.History,\n icon: 'redo-2',\n isBuiltIn: true,\n handler: (_context, helpers) => {\n if (helpers.canRedo()) {\n helpers.redo();\n }\n }\n });\n registerAction({\n id: BuiltInActionId.ApplyForceLayout,\n label: 'Apply Force Layout',\n description: 'Automatically arrange nodes using force-directed layout',\n category: ActionCategory.Layout,\n icon: 'layout-grid',\n isBuiltIn: true,\n handler: async (_context, helpers) => {\n await helpers.applyForceLayout();\n }\n });\n}","/**\n * Built-in Actions\n *\n * All default action definitions. Registered automatically when\n * action-registry.ts is imported.\n *\n * Actions are split into separate modules:\n * - actions-node.ts — Selection and Node actions\n * - actions-viewport.ts — Viewport, History, and Layout actions\n */\n\nimport { BuiltInActionId, ActionCategory } from './settings-types';\nimport { registerAction } from './action-registry';\nimport { registerSelectionActions, registerNodeActions } from './actions-node';\nimport { registerViewportActions, registerHistoryActions } from './actions-viewport';\n\n/**\n * Register all built-in actions.\n * Called automatically when action-registry is imported.\n */\nexport function registerBuiltInActions() {\n // None - do nothing\n registerAction({\n id: BuiltInActionId.None,\n label: 'None',\n description: 'Do nothing',\n category: ActionCategory.None,\n icon: 'ban',\n isBuiltIn: true,\n handler: () => {\n // Intentionally empty\n }\n });\n registerSelectionActions();\n registerNodeActions();\n registerViewportActions();\n registerHistoryActions();\n}","/**\n * Action Registry\n *\n * Extensible registry for actions that can be triggered by canvas events.\n * Similar pattern to node-type-registry.ts - apps can register custom actions.\n */\n\nimport { ActionCategory } from './settings-types';\n\n// =============================================================================\n// Registry Storage\n// =============================================================================\n\nconst actionRegistry = new Map();\n\n// =============================================================================\n// Registry Functions\n// =============================================================================\n\n/**\n * Register a new action.\n * If an action with the same ID exists, it will be overwritten.\n */\nexport function registerAction(action) {\n actionRegistry.set(action.id, action);\n}\n\n/**\n * Get an action by ID.\n */\nexport function getAction(id) {\n return actionRegistry.get(id);\n}\n\n/**\n * Check if an action exists.\n */\nexport function hasAction(id) {\n return actionRegistry.has(id);\n}\n\n/**\n * Get all registered actions.\n */\nexport function getAllActions() {\n return Array.from(actionRegistry.values());\n}\n\n/**\n * Get actions by category.\n */\nexport function getActionsByCategory(category) {\n return getAllActions().filter(action => action.category === category);\n}\n\n/**\n * Unregister an action (mainly for custom actions).\n */\nexport function unregisterAction(id) {\n return actionRegistry.delete(id);\n}\n\n/**\n * Clear all actions (mainly for testing).\n */\nexport function clearActions() {\n actionRegistry.clear();\n}\n\n// =============================================================================\n// Built-in Actions — registered on first import\n// =============================================================================\n\nimport { registerBuiltInActions } from './built-in-actions';\nregisterBuiltInActions();\n\n// =============================================================================\n// Export Action Utilities\n// =============================================================================\n\n/**\n * Get all action categories with their actions, for UI rendering.\n */\nexport function getActionsByCategories() {\n const categoryLabels = {\n [ActionCategory.None]: 'None',\n [ActionCategory.Selection]: 'Selection',\n [ActionCategory.Viewport]: 'Viewport',\n [ActionCategory.Node]: 'Node',\n [ActionCategory.Layout]: 'Layout',\n [ActionCategory.History]: 'History',\n [ActionCategory.Custom]: 'Custom'\n };\n const categoryOrder = [ActionCategory.None, ActionCategory.Selection, ActionCategory.Viewport, ActionCategory.Node, ActionCategory.Layout, ActionCategory.History, ActionCategory.Custom];\n return categoryOrder.map(category => ({\n category,\n label: categoryLabels[category],\n actions: getActionsByCategory(category)\n })).filter(group => group.actions.length > 0);\n}","/**\n * Action Executor\n *\n * Executes actions by ID with the provided context and helpers.\n * This is the core execution logic, separate from React hooks.\n */\n\nimport { getAction } from './action-registry';\nimport { BuiltInActionId } from './settings-types';\nimport { selectedNodeIdsAtom, selectSingleNodeAtom, addNodesToSelectionAtom, clearSelectionAtom, selectEdgeAtom, clearEdgeSelectionAtom } from './selection-store';\nimport { resetViewportAtom, fitToBoundsAtom, centerOnNodeAtom } from './viewport-store';\nimport { lockedNodeIdAtom, lockNodeAtom, unlockNodeAtom } from './locked-node-store';\nimport { canUndoAtom, canRedoAtom, undoAtom, redoAtom } from './history-store';\nimport { FitToBoundsMode } from '../utils/layout';\nimport { createDebug } from '../utils/debug';\nconst debug = createDebug('actions');\n\n// =============================================================================\n// Execution Result\n// =============================================================================\n\n// =============================================================================\n// Execute Action\n// =============================================================================\n\n/**\n * Execute an action by its ID.\n *\n * @param actionId - The ID of the action to execute\n * @param context - The context of the triggering event\n * @param helpers - Helper functions for manipulating canvas state\n * @returns Promise resolving to the execution result\n */\nexport async function executeAction(actionId, context, helpers) {\n // None action is a no-op\n if (actionId === BuiltInActionId.None) {\n return {\n success: true,\n actionId\n };\n }\n const action = getAction(actionId);\n if (!action) {\n debug.warn('Action not found: %s', actionId);\n return {\n success: false,\n actionId,\n error: new Error(`Action not found: ${actionId}`)\n };\n }\n\n // Check if action requires a node but none was provided\n if (action.requiresNode && !context.nodeId) {\n debug.warn('Action %s requires a node context', actionId);\n return {\n success: false,\n actionId,\n error: new Error(`Action ${actionId} requires a node context`)\n };\n }\n try {\n const result = action.handler(context, helpers);\n\n // Handle both sync and async handlers\n if (result instanceof Promise) {\n await result;\n }\n return {\n success: true,\n actionId\n };\n } catch (error) {\n debug.error('Error executing action %s: %O', actionId, error);\n return {\n success: false,\n actionId,\n error: error instanceof Error ? error : new Error(String(error))\n };\n }\n}\n\n// =============================================================================\n// Context Builder Helpers\n// =============================================================================\n\n/**\n * Create an ActionContext from a mouse event.\n */\nexport function createActionContext(eventType, screenEvent, worldPosition, options) {\n return {\n eventType,\n nodeId: options?.nodeId,\n nodeData: options?.nodeData,\n edgeId: options?.edgeId,\n edgeData: options?.edgeData,\n worldPosition,\n screenPosition: {\n x: screenEvent.clientX,\n y: screenEvent.clientY\n },\n modifiers: {\n shift: false,\n ctrl: false,\n alt: false,\n meta: false\n }\n };\n}\n\n/**\n * Create an ActionContext from a React mouse event.\n */\nexport function createActionContextFromReactEvent(eventType, event, worldPosition, options) {\n return {\n eventType,\n nodeId: options?.nodeId,\n nodeData: options?.nodeData,\n edgeId: options?.edgeId,\n edgeData: options?.edgeData,\n worldPosition,\n screenPosition: {\n x: event.clientX,\n y: event.clientY\n },\n modifiers: {\n shift: event.shiftKey,\n ctrl: event.ctrlKey,\n alt: event.altKey,\n meta: event.metaKey\n }\n };\n}\n\n/**\n * Create an ActionContext from a touch event (for long-press).\n */\nexport function createActionContextFromTouchEvent(eventType, touch, worldPosition, options) {\n return {\n eventType,\n nodeId: options?.nodeId,\n nodeData: options?.nodeData,\n edgeId: options?.edgeId,\n edgeData: options?.edgeData,\n worldPosition,\n screenPosition: {\n x: touch.clientX,\n y: touch.clientY\n },\n modifiers: {\n shift: false,\n ctrl: false,\n alt: false,\n meta: false\n }\n };\n}\n\n// =============================================================================\n// Headless Action Helpers Builder\n// =============================================================================\n\n/**\n * Build ActionHelpers from a raw Jotai store.\n * No React required — works in tests, CLI tools, and non-React integrations.\n */\nexport function buildActionHelpers(store, options = {}) {\n return {\n selectNode: nodeId => store.set(selectSingleNodeAtom, nodeId),\n addToSelection: nodeId => store.set(addNodesToSelectionAtom, [nodeId]),\n clearSelection: () => store.set(clearSelectionAtom),\n getSelectedNodeIds: () => Array.from(store.get(selectedNodeIdsAtom)),\n fitToBounds: (mode, padding) => {\n const fitMode = mode === 'graph' ? FitToBoundsMode.Graph : FitToBoundsMode.Selection;\n store.set(fitToBoundsAtom, {\n mode: fitMode,\n padding\n });\n },\n centerOnNode: nodeId => store.set(centerOnNodeAtom, nodeId),\n resetViewport: () => store.set(resetViewportAtom),\n lockNode: nodeId => store.set(lockNodeAtom, {\n nodeId\n }),\n unlockNode: _nodeId => store.set(unlockNodeAtom),\n toggleLock: nodeId => {\n const currentLockedId = store.get(lockedNodeIdAtom);\n if (currentLockedId === nodeId) {\n store.set(unlockNodeAtom);\n } else {\n store.set(lockNodeAtom, {\n nodeId\n });\n }\n },\n deleteNode: async nodeId => {\n if (options.onDeleteNode) {\n await options.onDeleteNode(nodeId);\n } else {\n debug.warn('deleteNode called but onDeleteNode callback not provided');\n }\n },\n isNodeLocked: nodeId => store.get(lockedNodeIdAtom) === nodeId,\n applyForceLayout: async () => {\n if (options.onApplyForceLayout) {\n await options.onApplyForceLayout();\n } else {\n debug.warn('applyForceLayout called but onApplyForceLayout callback not provided');\n }\n },\n undo: () => store.set(undoAtom),\n redo: () => store.set(redoAtom),\n canUndo: () => store.get(canUndoAtom),\n canRedo: () => store.get(canRedoAtom),\n selectEdge: edgeId => store.set(selectEdgeAtom, edgeId),\n clearEdgeSelection: () => store.set(clearEdgeSelectionAtom),\n openContextMenu: options.onOpenContextMenu,\n createNode: options.onCreateNode\n };\n}","/**\n * Settings Presets & Utilities\n *\n * Built-in presets and utility functions extracted from settings-store.ts.\n */\n\nimport { CanvasEventType, DEFAULT_MAPPINGS, BuiltInActionId } from './settings-types';\n\n// =============================================================================\n// Built-in Presets\n// =============================================================================\n\nexport const BUILT_IN_PRESETS = [{\n id: 'default',\n name: 'Default',\n description: 'Standard canvas interactions',\n isBuiltIn: true,\n mappings: DEFAULT_MAPPINGS\n}, {\n id: 'minimal',\n name: 'Minimal',\n description: 'Only essential selection and context menu actions',\n isBuiltIn: true,\n mappings: {\n [CanvasEventType.NodeClick]: BuiltInActionId.None,\n [CanvasEventType.NodeDoubleClick]: BuiltInActionId.None,\n [CanvasEventType.NodeTripleClick]: BuiltInActionId.None,\n [CanvasEventType.NodeRightClick]: BuiltInActionId.OpenContextMenu,\n [CanvasEventType.NodeLongPress]: BuiltInActionId.OpenContextMenu,\n [CanvasEventType.EdgeClick]: BuiltInActionId.SelectEdge,\n [CanvasEventType.EdgeDoubleClick]: BuiltInActionId.None,\n [CanvasEventType.EdgeRightClick]: BuiltInActionId.None,\n [CanvasEventType.BackgroundClick]: BuiltInActionId.ClearSelection,\n [CanvasEventType.BackgroundDoubleClick]: BuiltInActionId.None,\n [CanvasEventType.BackgroundRightClick]: BuiltInActionId.None,\n [CanvasEventType.BackgroundLongPress]: BuiltInActionId.None\n }\n}, {\n id: 'power-user',\n name: 'Power User',\n description: 'Quick actions for experienced users',\n isBuiltIn: true,\n mappings: {\n [CanvasEventType.NodeClick]: BuiltInActionId.None,\n [CanvasEventType.NodeDoubleClick]: BuiltInActionId.ToggleLock,\n [CanvasEventType.NodeTripleClick]: BuiltInActionId.DeleteSelected,\n [CanvasEventType.NodeRightClick]: BuiltInActionId.OpenContextMenu,\n [CanvasEventType.NodeLongPress]: BuiltInActionId.AddToSelection,\n [CanvasEventType.EdgeClick]: BuiltInActionId.SelectEdge,\n [CanvasEventType.EdgeDoubleClick]: BuiltInActionId.None,\n [CanvasEventType.EdgeRightClick]: BuiltInActionId.OpenContextMenu,\n [CanvasEventType.BackgroundClick]: BuiltInActionId.ClearSelection,\n [CanvasEventType.BackgroundDoubleClick]: BuiltInActionId.CreateNode,\n [CanvasEventType.BackgroundRightClick]: BuiltInActionId.OpenContextMenu,\n [CanvasEventType.BackgroundLongPress]: BuiltInActionId.ApplyForceLayout\n }\n}];\n\n// =============================================================================\n// Utility Functions\n// =============================================================================\n\n/**\n * Get the action ID for a specific event from mappings.\n */\nexport function getActionForEvent(mappings, event) {\n return mappings[event] || BuiltInActionId.None;\n}","/**\n * Canvas Settings Store\n *\n * Jotai atoms for managing canvas settings with localStorage persistence.\n * Uses atomWithStorage for automatic sync across tabs.\n *\n * Built-in presets and utility functions are in ./settings-presets.ts\n */\n\nimport { atom } from 'jotai';\nimport { atomWithStorage } from 'jotai/utils';\nimport { CanvasEventType, DEFAULT_MAPPINGS } from './settings-types';\nimport { createDebug } from '../utils/debug';\n\n// Re-export presets and utility for backward compat\nexport { BUILT_IN_PRESETS, getActionForEvent } from './settings-presets';\nimport { BUILT_IN_PRESETS } from './settings-presets';\nconst debug = createDebug('settings');\n\n// =============================================================================\n// Default State\n// =============================================================================\n\nconst DEFAULT_STATE = {\n mappings: DEFAULT_MAPPINGS,\n activePresetId: 'default',\n customPresets: [],\n isPanelOpen: false,\n virtualizationEnabled: true\n};\n\n// =============================================================================\n// Main Settings Atom (persisted)\n// =============================================================================\n\n/**\n * The main settings atom, persisted to localStorage.\n * All settings state is stored in a single atom for atomic updates.\n */\nexport const canvasSettingsAtom = atomWithStorage('@blinksgg/canvas/settings', DEFAULT_STATE);\n\n// =============================================================================\n// Derived Read-Only Atoms\n// =============================================================================\n\n/**\n * Current event-action mappings.\n */\nexport const eventMappingsAtom = atom(get => get(canvasSettingsAtom).mappings);\n\n/**\n * Currently active preset ID (null if mappings have been modified).\n */\nexport const activePresetIdAtom = atom(get => get(canvasSettingsAtom).activePresetId);\n\n/**\n * All presets (built-in + custom).\n */\nexport const allPresetsAtom = atom(get => {\n const state = get(canvasSettingsAtom);\n return [...BUILT_IN_PRESETS, ...state.customPresets];\n});\n\n/**\n * The currently active preset (if any).\n */\nexport const activePresetAtom = atom(get => {\n const presetId = get(activePresetIdAtom);\n if (!presetId) return null;\n const allPresets = get(allPresetsAtom);\n return allPresets.find(p => p.id === presetId) || null;\n});\n\n/**\n * Whether the settings panel is open.\n */\nexport const isPanelOpenAtom = atom(get => get(canvasSettingsAtom).isPanelOpen);\n\n/**\n * Whether viewport virtualization is enabled.\n * When true, only visible nodes/edges are rendered (better performance for large graphs).\n */\nexport const virtualizationEnabledAtom = atom(get => get(canvasSettingsAtom).virtualizationEnabled ?? true);\n\n/**\n * Whether current mappings differ from the active preset.\n */\nexport const hasUnsavedChangesAtom = atom(get => {\n const state = get(canvasSettingsAtom);\n const activePreset = get(activePresetAtom);\n if (!activePreset) return true;\n\n // Compare mappings\n const events = Object.values(CanvasEventType);\n return events.some(event => state.mappings[event] !== activePreset.mappings[event]);\n});\n\n// =============================================================================\n// Action Atoms (write-only)\n// =============================================================================\n\n/**\n * Set a single event-action mapping.\n */\nexport const setEventMappingAtom = atom(null, (get, set, {\n event,\n actionId\n}) => {\n const current = get(canvasSettingsAtom);\n set(canvasSettingsAtom, {\n ...current,\n mappings: {\n ...current.mappings,\n [event]: actionId\n },\n // Clear active preset since mappings have changed\n activePresetId: null\n });\n});\n\n/**\n * Apply a preset (copies its mappings to current).\n */\nexport const applyPresetAtom = atom(null, (get, set, presetId) => {\n const allPresets = get(allPresetsAtom);\n const preset = allPresets.find(p => p.id === presetId);\n if (!preset) {\n debug.warn('Preset not found: %s', presetId);\n return;\n }\n const current = get(canvasSettingsAtom);\n set(canvasSettingsAtom, {\n ...current,\n mappings: {\n ...preset.mappings\n },\n activePresetId: presetId\n });\n});\n\n/**\n * Save current mappings as a new custom preset.\n */\nexport const saveAsPresetAtom = atom(null, (get, set, {\n name,\n description\n}) => {\n const current = get(canvasSettingsAtom);\n\n // Generate unique ID\n const id = `custom-${Date.now()}`;\n const newPreset = {\n id,\n name,\n description,\n mappings: {\n ...current.mappings\n },\n isBuiltIn: false\n };\n set(canvasSettingsAtom, {\n ...current,\n customPresets: [...current.customPresets, newPreset],\n activePresetId: id\n });\n return id;\n});\n\n/**\n * Update an existing custom preset with current mappings.\n */\nexport const updatePresetAtom = atom(null, (get, set, presetId) => {\n const current = get(canvasSettingsAtom);\n\n // Can only update custom presets\n const presetIndex = current.customPresets.findIndex(p => p.id === presetId);\n if (presetIndex === -1) {\n debug.warn('Cannot update preset: %s (not found or built-in)', presetId);\n return;\n }\n const updatedPresets = [...current.customPresets];\n updatedPresets[presetIndex] = {\n ...updatedPresets[presetIndex],\n mappings: {\n ...current.mappings\n }\n };\n set(canvasSettingsAtom, {\n ...current,\n customPresets: updatedPresets,\n activePresetId: presetId\n });\n});\n\n/**\n * Delete a custom preset.\n */\nexport const deletePresetAtom = atom(null, (get, set, presetId) => {\n const current = get(canvasSettingsAtom);\n\n // Can only delete custom presets\n const newCustomPresets = current.customPresets.filter(p => p.id !== presetId);\n if (newCustomPresets.length === current.customPresets.length) {\n debug.warn('Cannot delete preset: %s (not found or built-in)', presetId);\n return;\n }\n\n // If we deleted the active preset, switch to default\n const newActiveId = current.activePresetId === presetId ? 'default' : current.activePresetId;\n\n // If switching to default, also reset mappings\n const newMappings = newActiveId === 'default' ? DEFAULT_MAPPINGS : current.mappings;\n set(canvasSettingsAtom, {\n ...current,\n customPresets: newCustomPresets,\n activePresetId: newActiveId,\n mappings: newMappings\n });\n});\n\n/**\n * Reset to default settings.\n */\nexport const resetSettingsAtom = atom(null, (get, set) => {\n const current = get(canvasSettingsAtom);\n set(canvasSettingsAtom, {\n ...current,\n mappings: DEFAULT_MAPPINGS,\n activePresetId: 'default'\n });\n});\n\n/**\n * Toggle the settings panel open/closed.\n */\nexport const togglePanelAtom = atom(null, (get, set) => {\n const current = get(canvasSettingsAtom);\n set(canvasSettingsAtom, {\n ...current,\n isPanelOpen: !current.isPanelOpen\n });\n});\n\n/**\n * Set the panel open state directly.\n */\nexport const setPanelOpenAtom = atom(null, (get, set, isOpen) => {\n const current = get(canvasSettingsAtom);\n set(canvasSettingsAtom, {\n ...current,\n isPanelOpen: isOpen\n });\n});\n\n/**\n * Set virtualization enabled/disabled.\n */\nexport const setVirtualizationEnabledAtom = atom(null, (get, set, enabled) => {\n const current = get(canvasSettingsAtom);\n set(canvasSettingsAtom, {\n ...current,\n virtualizationEnabled: enabled\n });\n});\n\n/**\n * Toggle virtualization on/off.\n */\nexport const toggleVirtualizationAtom = atom(null, (get, set) => {\n const current = get(canvasSettingsAtom);\n set(canvasSettingsAtom, {\n ...current,\n virtualizationEnabled: !(current.virtualizationEnabled ?? true)\n });\n});","/**\n * Canvas Serializer\n *\n * JSON export/import of the full canvas state: nodes, edges, positions,\n * groups, and viewport. Enables copy-paste between canvases, file-based\n * backup, and template workflows.\n *\n * All functions are pure and operate on a Jotai store — no React required.\n *\n * @since 1.3.0\n */\n\nimport Graph from 'graphology';\nimport { graphAtom, graphUpdateVersionAtom, graphOptions } from './graph-store';\nimport { nodePositionUpdateCounterAtom } from './graph-position';\nimport { zoomAtom, panAtom } from './viewport-store';\nimport { collapsedGroupsAtom } from './group-store';\n// =============================================================================\n// Snapshot Schema\n// =============================================================================\n\n/** Version of the snapshot schema. Bump on breaking format changes. */\nexport const SNAPSHOT_VERSION = 1;\n\n/**\n * Serialized node — portable representation of a single canvas node.\n */\n\n/**\n * Serialized edge — portable representation of a single canvas edge.\n */\n\n/**\n * Serialized group relationship.\n */\n\n/**\n * Complete canvas snapshot — portable JSON schema.\n */\n\n/**\n * Options for importing a snapshot.\n */\n\n/**\n * Result of snapshot validation.\n */\n\n// =============================================================================\n// Export\n// =============================================================================\n\n/**\n * Export the current canvas state to a portable JSON snapshot.\n *\n * Reads the Graphology graph, all node positions, group state, and viewport\n * from the given Jotai store.\n */\nexport function exportGraph(store, metadata) {\n const graph = store.get(graphAtom);\n const zoom = store.get(zoomAtom);\n const pan = store.get(panAtom);\n const collapsed = store.get(collapsedGroupsAtom);\n const nodes = [];\n const groups = [];\n const seenGroupParents = new Set();\n graph.forEachNode((nodeId, attrs) => {\n const a = attrs;\n nodes.push({\n id: nodeId,\n position: {\n x: a.x,\n y: a.y\n },\n dimensions: {\n width: a.width,\n height: a.height\n },\n size: a.size,\n color: a.color,\n zIndex: a.zIndex,\n label: a.label,\n parentId: a.parentId,\n dbData: a.dbData\n });\n if (a.parentId) {\n const key = `${nodeId}:${a.parentId}`;\n if (!seenGroupParents.has(key)) {\n seenGroupParents.add(key);\n groups.push({\n nodeId,\n parentId: a.parentId,\n isCollapsed: collapsed.has(a.parentId)\n });\n }\n }\n });\n const edges = [];\n graph.forEachEdge((key, attrs, source, target) => {\n const a = attrs;\n edges.push({\n key,\n sourceId: source,\n targetId: target,\n attributes: {\n weight: a.weight,\n type: a.type,\n color: a.color,\n label: a.label\n },\n dbData: a.dbData\n });\n });\n return {\n version: SNAPSHOT_VERSION,\n exportedAt: new Date().toISOString(),\n nodes,\n edges,\n groups,\n viewport: {\n zoom,\n pan: {\n ...pan\n }\n },\n metadata\n };\n}\n\n// =============================================================================\n// Import\n// =============================================================================\n\n/**\n * Import a snapshot into the Jotai store, rebuilding the full graph state.\n */\nexport function importGraph(store, snapshot, options = {}) {\n const {\n clearExisting = true,\n offsetPosition,\n remapIds = false\n } = options;\n\n // Build ID remap table if needed\n const idMap = new Map();\n if (remapIds) {\n for (const node of snapshot.nodes) {\n idMap.set(node.id, crypto.randomUUID());\n }\n for (const edge of snapshot.edges) {\n idMap.set(edge.key, crypto.randomUUID());\n }\n }\n const remap = id => idMap.get(id) ?? id;\n\n // Clear or reuse graph\n let graph;\n if (clearExisting) {\n graph = new Graph(graphOptions);\n } else {\n graph = store.get(graphAtom);\n }\n\n // Offset helper\n const ox = offsetPosition?.x ?? 0;\n const oy = offsetPosition?.y ?? 0;\n\n // Add nodes\n for (const node of snapshot.nodes) {\n const nodeId = remap(node.id);\n const parentId = node.parentId ? remap(node.parentId) : undefined;\n const dbData = remapIds ? {\n ...node.dbData,\n id: nodeId\n } : node.dbData;\n const attrs = {\n x: node.position.x + ox,\n y: node.position.y + oy,\n width: node.dimensions.width,\n height: node.dimensions.height,\n size: node.size,\n color: node.color,\n zIndex: node.zIndex,\n label: node.label,\n parentId,\n dbData\n };\n graph.addNode(nodeId, attrs);\n }\n\n // Add edges\n for (const edge of snapshot.edges) {\n const edgeKey = remap(edge.key);\n const sourceId = remap(edge.sourceId);\n const targetId = remap(edge.targetId);\n\n // Skip edges whose endpoints don't exist\n if (!graph.hasNode(sourceId) || !graph.hasNode(targetId)) continue;\n const dbData = remapIds ? {\n ...edge.dbData,\n id: edgeKey,\n source_node_id: sourceId,\n target_node_id: targetId\n } : edge.dbData;\n const attrs = {\n weight: edge.attributes.weight,\n type: edge.attributes.type,\n color: edge.attributes.color,\n label: edge.attributes.label,\n dbData\n };\n graph.addEdgeWithKey(edgeKey, sourceId, targetId, attrs);\n }\n\n // Apply graph to store\n store.set(graphAtom, graph);\n store.set(graphUpdateVersionAtom, v => v + 1);\n store.set(nodePositionUpdateCounterAtom, c => c + 1);\n\n // Restore collapsed groups\n const collapsedSet = new Set();\n for (const group of snapshot.groups) {\n if (group.isCollapsed) {\n collapsedSet.add(remap(group.parentId));\n }\n }\n store.set(collapsedGroupsAtom, collapsedSet);\n\n // Restore viewport\n store.set(zoomAtom, snapshot.viewport.zoom);\n store.set(panAtom, {\n ...snapshot.viewport.pan\n });\n}\n\n// =============================================================================\n// Validation\n// =============================================================================\n\n/**\n * Validate that an unknown value conforms to the CanvasSnapshot schema.\n * Performs runtime type checks on all required fields.\n */\nexport function validateSnapshot(data) {\n const errors = [];\n if (!data || typeof data !== 'object') {\n return {\n valid: false,\n errors: ['Snapshot must be a non-null object']\n };\n }\n const obj = data;\n\n // Version\n if (obj.version !== SNAPSHOT_VERSION) {\n errors.push(`Expected version ${SNAPSHOT_VERSION}, got ${String(obj.version)}`);\n }\n\n // exportedAt\n if (typeof obj.exportedAt !== 'string') {\n errors.push('Missing or invalid \"exportedAt\" (expected ISO string)');\n }\n\n // nodes\n if (!Array.isArray(obj.nodes)) {\n errors.push('Missing or invalid \"nodes\" (expected array)');\n } else {\n for (let i = 0; i < obj.nodes.length; i++) {\n const node = obj.nodes[i];\n if (!node || typeof node !== 'object') {\n errors.push(`nodes[${i}]: expected object`);\n continue;\n }\n if (typeof node.id !== 'string') errors.push(`nodes[${i}]: missing \"id\"`);\n if (!node.position || typeof node.position !== 'object') errors.push(`nodes[${i}]: missing \"position\"`);\n if (!node.dimensions || typeof node.dimensions !== 'object') errors.push(`nodes[${i}]: missing \"dimensions\"`);\n if (!node.dbData || typeof node.dbData !== 'object') errors.push(`nodes[${i}]: missing \"dbData\"`);\n }\n }\n\n // edges\n if (!Array.isArray(obj.edges)) {\n errors.push('Missing or invalid \"edges\" (expected array)');\n } else {\n for (let i = 0; i < obj.edges.length; i++) {\n const edge = obj.edges[i];\n if (!edge || typeof edge !== 'object') {\n errors.push(`edges[${i}]: expected object`);\n continue;\n }\n if (typeof edge.key !== 'string') errors.push(`edges[${i}]: missing \"key\"`);\n if (typeof edge.sourceId !== 'string') errors.push(`edges[${i}]: missing \"sourceId\"`);\n if (typeof edge.targetId !== 'string') errors.push(`edges[${i}]: missing \"targetId\"`);\n if (!edge.dbData || typeof edge.dbData !== 'object') errors.push(`edges[${i}]: missing \"dbData\"`);\n }\n }\n\n // groups\n if (!Array.isArray(obj.groups)) {\n errors.push('Missing or invalid \"groups\" (expected array)');\n }\n\n // viewport\n if (!obj.viewport || typeof obj.viewport !== 'object') {\n errors.push('Missing or invalid \"viewport\" (expected object)');\n } else {\n const vp = obj.viewport;\n if (typeof vp.zoom !== 'number') errors.push('viewport: missing \"zoom\"');\n if (!vp.pan || typeof vp.pan !== 'object') errors.push('viewport: missing \"pan\"');\n }\n return {\n valid: errors.length === 0,\n errors\n };\n}","/**\n * Clipboard state management\n *\n * Provides copy/cut/paste operations for nodes and edges.\n * Uses local-first approach - pasted nodes exist only in local graph until saved.\n */\n\nimport { atom } from 'jotai';\nimport { graphAtom } from './graph-store';\nimport { addNodeToLocalGraphAtom, optimisticDeleteNodeAtom } from './graph-mutations';\nimport { addEdgeToLocalGraphAtom } from './graph-mutations-edges';\nimport { selectedNodeIdsAtom, addNodesToSelectionAtom, clearSelectionAtom } from './selection-store';\nimport { pushHistoryAtom } from './history-store';\nimport { createDebug } from '../utils/debug';\nconst debug = createDebug('clipboard');\n\n// --- Types ---\n\n// --- Constants ---\n\n/** Default offset when pasting (diagonal from original) */\nexport const PASTE_OFFSET = {\n x: 50,\n y: 50\n};\n\n// --- Core Atoms ---\n\n/**\n * Clipboard data storage\n */\nexport const clipboardAtom = atom(null);\n\n/**\n * Whether clipboard has content\n */\nexport const hasClipboardContentAtom = atom(get => get(clipboardAtom) !== null);\n\n/**\n * Number of nodes in clipboard\n */\nexport const clipboardNodeCountAtom = atom(get => {\n const clipboard = get(clipboardAtom);\n return clipboard?.nodes.length ?? 0;\n});\n\n// --- Helper Functions ---\n\n/**\n * Calculate bounding box of nodes\n */\nfunction calculateBounds(nodes) {\n if (nodes.length === 0) {\n return {\n minX: 0,\n minY: 0,\n maxX: 0,\n maxY: 0\n };\n }\n let minX = Infinity;\n let minY = Infinity;\n let maxX = -Infinity;\n let maxY = -Infinity;\n for (const node of nodes) {\n minX = Math.min(minX, node.attrs.x);\n minY = Math.min(minY, node.attrs.y);\n maxX = Math.max(maxX, node.attrs.x + node.attrs.width);\n maxY = Math.max(maxY, node.attrs.y + node.attrs.height);\n }\n return {\n minX,\n minY,\n maxX,\n maxY\n };\n}\n\n/**\n * Generate a new unique ID for pasted nodes\n */\nfunction generatePasteId(index) {\n return `paste-${Date.now()}-${index}-${Math.random().toString(36).slice(2, 8)}`;\n}\n\n// --- Action Atoms ---\n\n/**\n * Copy selected nodes and their internal edges to clipboard\n */\nexport const copyToClipboardAtom = atom(null, (get, set, nodeIds) => {\n const selectedIds = nodeIds ?? Array.from(get(selectedNodeIdsAtom));\n if (selectedIds.length === 0) {\n debug('Nothing to copy - no nodes selected');\n return;\n }\n const graph = get(graphAtom);\n const selectedSet = new Set(selectedIds);\n const nodes = [];\n const edges = [];\n\n // Collect node data\n for (const nodeId of selectedIds) {\n if (!graph.hasNode(nodeId)) {\n debug('Node %s not found in graph, skipping', nodeId);\n continue;\n }\n const attrs = graph.getNodeAttributes(nodeId);\n nodes.push({\n attrs: {\n ...attrs\n },\n dbData: {\n ...attrs.dbData\n }\n });\n }\n\n // Collect edges where BOTH source and target are in selection\n graph.forEachEdge((edgeKey, attrs, source, target) => {\n if (selectedSet.has(source) && selectedSet.has(target)) {\n edges.push({\n source,\n target,\n attrs: {\n ...attrs\n },\n dbData: {\n ...attrs.dbData\n }\n });\n }\n });\n const bounds = calculateBounds(nodes);\n const clipboardData = {\n nodes,\n edges,\n bounds,\n timestamp: Date.now()\n };\n set(clipboardAtom, clipboardData);\n debug('Copied %d nodes and %d edges to clipboard', nodes.length, edges.length);\n});\n\n/**\n * Cut selected nodes (copy + delete from graph)\n * Pushes history for undo support.\n */\nexport const cutToClipboardAtom = atom(null, (get, set, nodeIds) => {\n const selectedIds = nodeIds ?? Array.from(get(selectedNodeIdsAtom));\n if (selectedIds.length === 0) return;\n\n // First copy to clipboard\n set(copyToClipboardAtom, selectedIds);\n\n // Push history so entire cut is undoable\n set(pushHistoryAtom, 'Cut nodes');\n\n // Delete each selected node (also removes connected edges)\n for (const nodeId of selectedIds) {\n set(optimisticDeleteNodeAtom, {\n nodeId\n });\n }\n set(clearSelectionAtom);\n debug('Cut %d nodes — copied to clipboard and deleted from graph', selectedIds.length);\n});\n\n/**\n * Paste clipboard content at an offset from original position\n */\nexport const pasteFromClipboardAtom = atom(null, (get, set, offset) => {\n const clipboard = get(clipboardAtom);\n if (!clipboard || clipboard.nodes.length === 0) {\n debug('Nothing to paste - clipboard empty');\n return [];\n }\n const pasteOffset = offset ?? PASTE_OFFSET;\n const graph = get(graphAtom);\n\n // Push history for undo support\n set(pushHistoryAtom, 'Paste nodes');\n\n // Map old IDs to new IDs\n const idMap = new Map();\n const newNodeIds = [];\n\n // Create new nodes\n for (let i = 0; i < clipboard.nodes.length; i++) {\n const nodeData = clipboard.nodes[i];\n const newId = generatePasteId(i);\n idMap.set(nodeData.dbData.id, newId);\n newNodeIds.push(newId);\n\n // Create new DBGraphNode with offset position\n const newDbNode = {\n ...nodeData.dbData,\n id: newId,\n created_at: new Date().toISOString(),\n updated_at: new Date().toISOString(),\n ui_properties: {\n ...(nodeData.dbData.ui_properties || {}),\n x: nodeData.attrs.x + pasteOffset.x,\n y: nodeData.attrs.y + pasteOffset.y\n }\n };\n debug('Pasting node %s -> %s at (%d, %d)', nodeData.dbData.id, newId, nodeData.attrs.x + pasteOffset.x, nodeData.attrs.y + pasteOffset.y);\n set(addNodeToLocalGraphAtom, newDbNode);\n }\n\n // Create new edges with remapped IDs\n for (const edgeData of clipboard.edges) {\n const newSourceId = idMap.get(edgeData.source);\n const newTargetId = idMap.get(edgeData.target);\n if (!newSourceId || !newTargetId) {\n debug('Edge %s: source or target not found in id map, skipping', edgeData.dbData.id);\n continue;\n }\n const newEdgeId = generatePasteId(clipboard.edges.indexOf(edgeData) + clipboard.nodes.length);\n const newDbEdge = {\n ...edgeData.dbData,\n id: newEdgeId,\n source_node_id: newSourceId,\n target_node_id: newTargetId,\n created_at: new Date().toISOString(),\n updated_at: new Date().toISOString()\n };\n debug('Pasting edge %s -> %s (from %s to %s)', edgeData.dbData.id, newEdgeId, newSourceId, newTargetId);\n set(addEdgeToLocalGraphAtom, newDbEdge);\n }\n\n // Select the newly pasted nodes\n set(clearSelectionAtom);\n set(addNodesToSelectionAtom, newNodeIds);\n debug('Pasted %d nodes and %d edges', newNodeIds.length, clipboard.edges.length);\n return newNodeIds;\n});\n\n/**\n * Duplicate selected nodes in place with offset\n * Shorthand for copy + paste\n */\nexport const duplicateSelectionAtom = atom(null, (get, set) => {\n set(copyToClipboardAtom);\n return set(pasteFromClipboardAtom);\n});\n\n/**\n * Clear clipboard content\n */\nexport const clearClipboardAtom = atom(null, (_get, set) => {\n set(clipboardAtom, null);\n debug('Clipboard cleared');\n});","/**\n * Spatial Grid Index\n *\n * Fixed-cell grid for O(visible + bucket) viewport culling.\n * Replaces the O(N) linear scan in visibleNodeKeysAtom.\n *\n * Default cell size is 500 world-space pixels — chosen to balance\n * bucket count vs. false positives for typical node sizes (200–500px).\n */\n\nexport class SpatialGrid {\n /** cell key → set of node IDs in that cell */\n cells = new Map();\n /** node ID → entry data (for update/remove) */\n entries = new Map();\n constructor(cellSize = 500) {\n this.cellSize = cellSize;\n }\n\n /** Number of tracked entries */\n get size() {\n return this.entries.size;\n }\n cellKey(cx, cy) {\n return `${cx},${cy}`;\n }\n getCellRange(x, y, w, h) {\n const cs = this.cellSize;\n return {\n minCX: Math.floor(x / cs),\n minCY: Math.floor(y / cs),\n maxCX: Math.floor((x + w) / cs),\n maxCY: Math.floor((y + h) / cs)\n };\n }\n\n /**\n * Insert a node into the index.\n * If the node already exists, it is updated.\n */\n insert(id, x, y, width, height) {\n if (this.entries.has(id)) {\n this.update(id, x, y, width, height);\n return;\n }\n const entry = {\n id,\n x,\n y,\n width,\n height\n };\n this.entries.set(id, entry);\n const {\n minCX,\n minCY,\n maxCX,\n maxCY\n } = this.getCellRange(x, y, width, height);\n for (let cx = minCX; cx <= maxCX; cx++) {\n for (let cy = minCY; cy <= maxCY; cy++) {\n const key = this.cellKey(cx, cy);\n let cell = this.cells.get(key);\n if (!cell) {\n cell = new Set();\n this.cells.set(key, cell);\n }\n cell.add(id);\n }\n }\n }\n\n /**\n * Update a node's position/dimensions.\n */\n update(id, x, y, width, height) {\n const prev = this.entries.get(id);\n if (!prev) {\n this.insert(id, x, y, width, height);\n return;\n }\n\n // Quick check: if cell range didn't change, just update entry\n const prevRange = this.getCellRange(prev.x, prev.y, prev.width, prev.height);\n const newRange = this.getCellRange(x, y, width, height);\n prev.x = x;\n prev.y = y;\n prev.width = width;\n prev.height = height;\n if (prevRange.minCX === newRange.minCX && prevRange.minCY === newRange.minCY && prevRange.maxCX === newRange.maxCX && prevRange.maxCY === newRange.maxCY) {\n return; // Same cells, no grid update needed\n }\n\n // Remove from old cells\n for (let cx = prevRange.minCX; cx <= prevRange.maxCX; cx++) {\n for (let cy = prevRange.minCY; cy <= prevRange.maxCY; cy++) {\n const key = this.cellKey(cx, cy);\n const cell = this.cells.get(key);\n if (cell) {\n cell.delete(id);\n if (cell.size === 0) this.cells.delete(key);\n }\n }\n }\n\n // Add to new cells\n for (let cx = newRange.minCX; cx <= newRange.maxCX; cx++) {\n for (let cy = newRange.minCY; cy <= newRange.maxCY; cy++) {\n const key = this.cellKey(cx, cy);\n let cell = this.cells.get(key);\n if (!cell) {\n cell = new Set();\n this.cells.set(key, cell);\n }\n cell.add(id);\n }\n }\n }\n\n /**\n * Remove a node from the index.\n */\n remove(id) {\n const entry = this.entries.get(id);\n if (!entry) return;\n const {\n minCX,\n minCY,\n maxCX,\n maxCY\n } = this.getCellRange(entry.x, entry.y, entry.width, entry.height);\n for (let cx = minCX; cx <= maxCX; cx++) {\n for (let cy = minCY; cy <= maxCY; cy++) {\n const key = this.cellKey(cx, cy);\n const cell = this.cells.get(key);\n if (cell) {\n cell.delete(id);\n if (cell.size === 0) this.cells.delete(key);\n }\n }\n }\n this.entries.delete(id);\n }\n\n /**\n * Query all node IDs whose bounding box overlaps the given bounds.\n * Returns a Set for O(1) membership checks.\n */\n query(bounds) {\n const result = new Set();\n const {\n minCX,\n minCY,\n maxCX,\n maxCY\n } = this.getCellRange(bounds.minX, bounds.minY, bounds.maxX - bounds.minX, bounds.maxY - bounds.minY);\n for (let cx = minCX; cx <= maxCX; cx++) {\n for (let cy = minCY; cy <= maxCY; cy++) {\n const cell = this.cells.get(this.cellKey(cx, cy));\n if (!cell) continue;\n for (const id of cell) {\n if (result.has(id)) continue;\n\n // AABB intersection test against actual entry bounds\n const entry = this.entries.get(id);\n const entryRight = entry.x + entry.width;\n const entryBottom = entry.y + entry.height;\n if (entry.x <= bounds.maxX && entryRight >= bounds.minX && entry.y <= bounds.maxY && entryBottom >= bounds.minY) {\n result.add(id);\n }\n }\n }\n }\n return result;\n }\n\n /**\n * Clear all entries.\n */\n clear() {\n this.cells.clear();\n this.entries.clear();\n }\n\n /**\n * Check if a node is tracked.\n */\n has(id) {\n return this.entries.has(id);\n }\n}","/**\n * Virtualization state management\n *\n * Provides viewport-based culling to only render visible nodes and edges.\n * Uses a SpatialGrid index for O(visible) node lookups instead of O(N) scans.\n * Improves performance for large graphs (100+ nodes).\n */\n\nimport { atom } from 'jotai';\nimport { graphAtom, graphUpdateVersionAtom, edgeCreationAtom } from './graph-store';\nimport { nodePositionUpdateCounterAtom } from './graph-position';\nimport { nodeKeysAtom, edgeKeysAtom } from './graph-derived';\nimport { panAtom, zoomAtom, viewportRectAtom } from './viewport-store';\nimport { virtualizationEnabledAtom } from './settings-store';\nimport { collapsedEdgeRemapAtom } from './group-store';\nimport { SpatialGrid } from './spatial-index';\nimport { canvasMark } from './perf';\n\n// --- Configuration ---\n\n/**\n * Buffer in world-space pixels beyond viewport edges.\n * Nodes within this buffer are still rendered for smooth panning.\n */\nexport const VIRTUALIZATION_BUFFER = 200;\n\n// Re-export for backwards compatibility\nexport { virtualizationEnabledAtom } from './settings-store';\n\n// --- Spatial Index ---\n\n/**\n * Spatial grid index rebuilt on graph structure changes.\n * Incrementally updated on position changes via the update path.\n */\nexport const spatialIndexAtom = atom(get => {\n get(graphUpdateVersionAtom);\n get(nodePositionUpdateCounterAtom);\n const graph = get(graphAtom);\n const grid = new SpatialGrid(500);\n graph.forEachNode((nodeId, attrs) => {\n const a = attrs;\n grid.insert(nodeId, a.x, a.y, a.width || 200, a.height || 100);\n });\n return grid;\n});\n\n// --- Visible Bounds ---\n\n/**\n * Calculate visible bounds in world coordinates.\n * Includes buffer for smooth panning.\n */\nexport const visibleBoundsAtom = atom(get => {\n const viewport = get(viewportRectAtom);\n const pan = get(panAtom);\n const zoom = get(zoomAtom);\n if (!viewport || zoom === 0) {\n return null;\n }\n const buffer = VIRTUALIZATION_BUFFER;\n return {\n minX: (-buffer - pan.x) / zoom,\n minY: (-buffer - pan.y) / zoom,\n maxX: (viewport.width + buffer - pan.x) / zoom,\n maxY: (viewport.height + buffer - pan.y) / zoom\n };\n});\n\n// --- Node Visibility ---\n\n/**\n * Node keys filtered to only those visible in viewport.\n * Uses SpatialGrid.query() for O(visible) performance when enabled.\n * Falls back to all nodes when virtualization disabled or bounds unavailable.\n */\nexport const visibleNodeKeysAtom = atom(get => {\n const end = canvasMark('virtualization-cull');\n const enabled = get(virtualizationEnabledAtom);\n const allKeys = get(nodeKeysAtom);\n if (!enabled) {\n end();\n return allKeys;\n }\n const bounds = get(visibleBoundsAtom);\n if (!bounds) {\n end();\n return allKeys;\n }\n const grid = get(spatialIndexAtom);\n const visibleSet = grid.query(bounds);\n\n // Return keys in original order (preserves rendering order)\n const result = allKeys.filter(k => visibleSet.has(k));\n end();\n return result;\n});\n\n// --- Edge Visibility ---\n\n/**\n * Edge keys filtered to only those where both endpoints are visible.\n * Temp edge during creation is always included.\n *\n * When groups are collapsed, edges to/from collapsed children are re-routed\n * to the group node. Internal edges (both endpoints in the same collapsed group)\n * are hidden.\n */\nexport const visibleEdgeKeysAtom = atom(get => {\n const enabled = get(virtualizationEnabledAtom);\n const allEdgeKeys = get(edgeKeysAtom);\n const edgeCreation = get(edgeCreationAtom);\n const remap = get(collapsedEdgeRemapAtom);\n\n // Always include temp edge if creating\n const tempEdgeKey = edgeCreation.isCreating ? 'temp-creating-edge' : null;\n\n // Depend on graph changes\n get(graphUpdateVersionAtom);\n const graph = get(graphAtom);\n\n // Filter edges: resolve effective endpoints through remap\n const filteredEdges = allEdgeKeys.filter(edgeKey => {\n const source = graph.source(edgeKey);\n const target = graph.target(edgeKey);\n const effectiveSource = remap.get(source) ?? source;\n const effectiveTarget = remap.get(target) ?? target;\n\n // Hide internal edges (both endpoints map to the same collapsed group)\n if (effectiveSource === effectiveTarget) return false;\n return true;\n });\n if (!enabled) {\n return tempEdgeKey ? [...filteredEdges, tempEdgeKey] : filteredEdges;\n }\n\n // Get visible node set for O(1) lookup\n const visibleNodeKeys = get(visibleNodeKeysAtom);\n const visibleNodeSet = new Set(visibleNodeKeys);\n const visibleEdges = filteredEdges.filter(edgeKey => {\n const source = graph.source(edgeKey);\n const target = graph.target(edgeKey);\n const effectiveSource = remap.get(source) ?? source;\n const effectiveTarget = remap.get(target) ?? target;\n\n // Edge visible if both effective endpoints are visible\n return visibleNodeSet.has(effectiveSource) && visibleNodeSet.has(effectiveTarget);\n });\n return tempEdgeKey ? [...visibleEdges, tempEdgeKey] : visibleEdges;\n});\n\n// --- Metrics ---\n\n/**\n * Virtualization metrics for debugging/monitoring.\n */\nexport const virtualizationMetricsAtom = atom(get => {\n const enabled = get(virtualizationEnabledAtom);\n const totalNodes = get(nodeKeysAtom).length;\n const totalEdges = get(edgeKeysAtom).length;\n const visibleNodes = get(visibleNodeKeysAtom).length;\n const visibleEdges = get(visibleEdgeKeysAtom).length;\n const bounds = get(visibleBoundsAtom);\n return {\n enabled,\n totalNodes,\n totalEdges,\n visibleNodes,\n visibleEdges,\n culledNodes: totalNodes - visibleNodes,\n culledEdges: totalEdges - visibleEdges,\n bounds\n };\n});","/**\n * Headless Canvas API\n *\n * A pure Jotai store-based API for controlling the canvas without React.\n * Satisfies Principle 6: \"Fully controllable headless API\".\n *\n * @example\n * ```ts\n * import { createStore } from 'jotai';\n * import { createCanvasAPI } from '@blinksgg/canvas/core';\n *\n * const store = createStore();\n * const api = createCanvasAPI(store);\n *\n * api.selectNode('node-1');\n * api.fitToBounds('graph', 20);\n * api.undo();\n * ```\n */\n\nimport { executeAction, buildActionHelpers } from './action-executor';\nimport { exportGraph, importGraph, validateSnapshot } from './canvas-serializer';\nimport { eventMappingsAtom, getActionForEvent } from './settings-store';\nimport { selectedNodeIdsAtom, selectSingleNodeAtom, addNodesToSelectionAtom, clearSelectionAtom, selectEdgeAtom, clearEdgeSelectionAtom, selectedEdgeIdAtom } from './selection-store';\nimport { zoomAtom, panAtom, resetViewportAtom, fitToBoundsAtom, centerOnNodeAtom } from './viewport-store';\nimport { graphAtom } from './graph-store';\nimport { nodeKeysAtom, edgeKeysAtom } from './graph-derived';\nimport { addNodeToLocalGraphAtom, optimisticDeleteNodeAtom, optimisticDeleteEdgeAtom } from './graph-mutations';\nimport { addEdgeToLocalGraphAtom } from './graph-mutations-edges';\nimport { undoAtom, redoAtom, canUndoAtom, canRedoAtom, pushHistoryAtom, clearHistoryAtom } from './history-store';\nimport { copyToClipboardAtom, cutToClipboardAtom, pasteFromClipboardAtom, duplicateSelectionAtom, clipboardAtom } from './clipboard-store';\nimport { snapEnabledAtom, snapGridSizeAtom, toggleSnapAtom } from './snap-store';\nimport { virtualizationEnabledAtom, visibleNodeKeysAtom, visibleEdgeKeysAtom } from './virtualization-store';\nimport { FitToBoundsMode } from '../utils/layout';\n/**\n * Create a headless canvas API from a Jotai store.\n * All canvas operations available without React.\n */\nexport function createCanvasAPI(store, options = {}) {\n const helpers = buildActionHelpers(store, options);\n const api = {\n // Selection\n selectNode: id => store.set(selectSingleNodeAtom, id),\n addToSelection: ids => store.set(addNodesToSelectionAtom, ids),\n clearSelection: () => store.set(clearSelectionAtom),\n getSelectedNodeIds: () => Array.from(store.get(selectedNodeIdsAtom)),\n selectEdge: edgeId => store.set(selectEdgeAtom, edgeId),\n clearEdgeSelection: () => store.set(clearEdgeSelectionAtom),\n getSelectedEdgeId: () => store.get(selectedEdgeIdAtom),\n // Viewport\n getZoom: () => store.get(zoomAtom),\n setZoom: zoom => store.set(zoomAtom, zoom),\n getPan: () => store.get(panAtom),\n setPan: pan => store.set(panAtom, pan),\n resetViewport: () => store.set(resetViewportAtom),\n fitToBounds: (mode, padding) => {\n const fitMode = mode === 'graph' ? FitToBoundsMode.Graph : FitToBoundsMode.Selection;\n store.set(fitToBoundsAtom, {\n mode: fitMode,\n padding\n });\n },\n centerOnNode: nodeId => store.set(centerOnNodeAtom, nodeId),\n // Graph\n addNode: node => store.set(addNodeToLocalGraphAtom, node),\n removeNode: nodeId => store.set(optimisticDeleteNodeAtom, {\n nodeId\n }),\n addEdge: edge => store.set(addEdgeToLocalGraphAtom, edge),\n removeEdge: edgeKey => store.set(optimisticDeleteEdgeAtom, {\n edgeKey\n }),\n getNodeKeys: () => store.get(nodeKeysAtom),\n getEdgeKeys: () => store.get(edgeKeysAtom),\n getNodeAttributes: id => {\n const graph = store.get(graphAtom);\n return graph.hasNode(id) ? graph.getNodeAttributes(id) : undefined;\n },\n // History\n undo: () => store.set(undoAtom),\n redo: () => store.set(redoAtom),\n canUndo: () => store.get(canUndoAtom),\n canRedo: () => store.get(canRedoAtom),\n recordSnapshot: label => store.set(pushHistoryAtom, label),\n clearHistory: () => store.set(clearHistoryAtom),\n // Clipboard\n copy: () => store.set(copyToClipboardAtom),\n cut: () => store.set(cutToClipboardAtom),\n paste: () => store.set(pasteFromClipboardAtom),\n duplicate: () => store.set(duplicateSelectionAtom),\n hasClipboardContent: () => store.get(clipboardAtom) !== null,\n // Snap\n isSnapEnabled: () => store.get(snapEnabledAtom),\n toggleSnap: () => store.set(toggleSnapAtom),\n getSnapGridSize: () => store.get(snapGridSizeAtom),\n // Virtualization\n isVirtualizationEnabled: () => store.get(virtualizationEnabledAtom),\n getVisibleNodeKeys: () => store.get(visibleNodeKeysAtom),\n getVisibleEdgeKeys: () => store.get(visibleEdgeKeysAtom),\n // Actions\n executeAction: (actionId, context) => executeAction(actionId, context, helpers),\n executeEventAction: (event, context) => {\n const mappings = store.get(eventMappingsAtom);\n const actionId = getActionForEvent(mappings, event);\n return executeAction(actionId, context, helpers);\n },\n // Serialization\n exportSnapshot: metadata => exportGraph(store, metadata),\n importSnapshot: (snapshot, options) => importGraph(store, snapshot, options),\n validateSnapshot: data => validateSnapshot(data)\n };\n return api;\n}","/**\n * Port Types\n *\n * Defines types for node connection ports/handles.\n * Ports are per-node-instance configurable connection points.\n */\n\n// --- Port Position Types ---\n\n/**\n * Side of a node where a port can be placed.\n */\n\n/**\n * Type of port connection behavior.\n * - 'input': Can only receive connections\n * - 'output': Can only send connections\n * - 'bidirectional': Can both send and receive connections\n */\n\n// --- Port Definition ---\n\n/**\n * Definition of a single port on a node.\n * Stored in node's ui_properties.ports array.\n */\n\n// --- Node Ports Configuration ---\n\n/**\n * Configuration for all ports on a node.\n * Stored in node's ui_properties.ports.\n */\n\n// --- Port Connection State ---\n\n/**\n * Represents a connection to a specific port.\n * Used in edge attributes to specify which ports are connected.\n */\n\n/**\n * Extended edge attributes with port information.\n * These are stored alongside existing edge attributes.\n */\n\n// --- Port Position Calculation ---\n\n/**\n * Calculated world-space position of a port.\n */\n\n/**\n * Calculate the world-space position of a port on a node.\n *\n * @param nodeX Node's x position\n * @param nodeY Node's y position\n * @param nodeWidth Node's width\n * @param nodeHeight Node's height\n * @param port The port definition\n * @returns World-space coordinates of the port\n */\nexport function calculatePortPosition(nodeX, nodeY, nodeWidth, nodeHeight, port) {\n switch (port.side) {\n case 'left':\n return {\n x: nodeX,\n y: nodeY + nodeHeight * port.position\n };\n case 'right':\n return {\n x: nodeX + nodeWidth,\n y: nodeY + nodeHeight * port.position\n };\n case 'top':\n return {\n x: nodeX + nodeWidth * port.position,\n y: nodeY\n };\n case 'bottom':\n return {\n x: nodeX + nodeWidth * port.position,\n y: nodeY + nodeHeight\n };\n }\n}\n\n// --- Default Port Configuration ---\n\n/**\n * Default port for nodes without explicit port configuration.\n * A single bidirectional port centered on the right side.\n */\nexport const DEFAULT_PORT = {\n id: 'default',\n type: 'bidirectional',\n side: 'right',\n position: 0.5\n};\n\n/**\n * Get the ports configuration for a node.\n * Returns default port if no explicit configuration exists.\n *\n * @param ports Optional ports array from node's ui_properties\n * @returns Array of port definitions\n */\nexport function getNodePorts(ports) {\n if (ports && ports.length > 0) {\n return ports;\n }\n return [DEFAULT_PORT];\n}\n\n// --- Port Validation ---\n\n/**\n * Check if a port can accept a new connection.\n *\n * @param port The port definition\n * @param currentConnections Number of existing connections to this port\n * @param isSource Whether this port would be the source of the connection\n * @returns true if the connection is allowed\n */\nexport function canPortAcceptConnection(port, currentConnections, isSource) {\n // Check type compatibility\n if (isSource && port.type === 'input') {\n return false; // Input ports can't be sources\n }\n if (!isSource && port.type === 'output') {\n return false; // Output ports can't be targets\n }\n\n // Check connection limit\n if (port.maxConnections !== undefined && currentConnections >= port.maxConnections) {\n return false;\n }\n return true;\n}\n\n/**\n * Check if two ports can be connected.\n *\n * @param sourcePort The source port\n * @param targetPort The target port\n * @returns true if the connection is valid\n */\nexport function arePortsCompatible(sourcePort, targetPort) {\n // Source must allow outgoing connections\n if (sourcePort.type === 'input') {\n return false;\n }\n\n // Target must allow incoming connections\n if (targetPort.type === 'output') {\n return false;\n }\n return true;\n}","/**\n * Input Classifier\n *\n * Classifies pointer events into input sources (finger, pencil, mouse)\n * and extracts stylus-specific data (pressure, tilt).\n *\n * This is the foundation of the touch-first input architecture:\n * - Pencil draws/selects\n * - Fingers navigate (pan/zoom)\n * - Mouse does both\n */\n\n// =============================================================================\n// Types\n// =============================================================================\n\n/** Input device type */\n\n/** Classified pointer with source-specific metadata */\n\n/** Capabilities detected for the current device */\n\n// =============================================================================\n// Classification\n// =============================================================================\n\n/**\n * Classify a PointerEvent into an InputSource with metadata.\n *\n * Uses `PointerEvent.pointerType` as the primary signal:\n * - 'pen' → pencil (Apple Pencil, Surface Pen, Wacom, etc.)\n * - 'touch' → finger\n * - 'mouse' → mouse\n *\n * Falls back to 'mouse' for unknown pointer types.\n */\nexport function classifyPointer(e) {\n const source = pointerTypeToSource(e.pointerType);\n return {\n source,\n pointerId: e.pointerId,\n pressure: e.pressure,\n tiltX: e.tiltX,\n tiltY: e.tiltY,\n isPrimary: e.isPrimary,\n rawPointerType: e.pointerType\n };\n}\n\n/**\n * Map PointerEvent.pointerType string to InputSource.\n */\nfunction pointerTypeToSource(pointerType) {\n switch (pointerType) {\n case 'pen':\n return 'pencil';\n case 'touch':\n return 'finger';\n case 'mouse':\n return 'mouse';\n default:\n // Unknown pointer types (e.g. future devices) default to mouse behavior\n return 'mouse';\n }\n}\n\n// =============================================================================\n// Device Capability Detection\n// =============================================================================\n\n/**\n * Detect input capabilities of the current device.\n *\n * Uses media queries and navigator APIs for initial detection.\n * Note: `hasStylus` starts as false and is set to true on first pen event\n * (there's no reliable way to detect stylus support without an event).\n */\nexport function detectInputCapabilities() {\n if (typeof window === 'undefined') {\n // SSR: assume desktop defaults\n return {\n hasTouch: false,\n hasStylus: false,\n hasMouse: true,\n hasCoarsePointer: false\n };\n }\n const hasTouch = 'ontouchstart' in window || navigator.maxTouchPoints > 0;\n\n // matchMedia for pointer capabilities\n const supportsMatchMedia = typeof window.matchMedia === 'function';\n const hasCoarsePointer = supportsMatchMedia ? window.matchMedia('(pointer: coarse)').matches : false;\n const hasFinePointer = supportsMatchMedia ? window.matchMedia('(pointer: fine)').matches : true;\n\n // Heuristic: if we have both coarse and fine, likely a tablet with stylus support\n // But we won't confirm stylus until we see a pen event\n const hasMouse = hasFinePointer || !hasTouch;\n return {\n hasTouch,\n hasStylus: false,\n // Set to true on first pen event\n hasMouse,\n hasCoarsePointer\n };\n}\n\n// =============================================================================\n// Gesture Threshold Helpers\n// =============================================================================\n\n/** Threshold values per input source */\n\n/**\n * Get gesture thresholds appropriate for the given input source.\n *\n * Fingers need larger thresholds (imprecise, large contact area).\n * Stylus is the most precise.\n * Mouse is in between.\n */\nexport function getGestureThresholds(source) {\n switch (source) {\n case 'finger':\n return {\n dragThreshold: 10,\n tapThreshold: 10,\n longPressDuration: 600,\n longPressMoveLimit: 10\n };\n case 'pencil':\n return {\n dragThreshold: 2,\n tapThreshold: 3,\n longPressDuration: 500,\n longPressMoveLimit: 5\n };\n case 'mouse':\n return {\n dragThreshold: 3,\n tapThreshold: 5,\n longPressDuration: 0,\n // Mouse uses right-click instead\n longPressMoveLimit: 0\n };\n }\n}\n\n// =============================================================================\n// Hit Target Helpers\n// =============================================================================\n\n/** Minimum interactive target sizes per Apple HIG / Material Design */\nexport const HIT_TARGET_SIZES = {\n /** Minimum touch target (Apple HIG: 44pt) */\n finger: 44,\n /** Stylus target (precise, can use smaller targets) */\n pencil: 24,\n /** Mouse target (hover-discoverable, smallest) */\n mouse: 16\n};\n\n/**\n * Get the appropriate hit target size for the current input source.\n * Used to size invisible padding around small visual elements\n * (resize handles, ports, edge connection handles).\n */\nexport function getHitTargetSize(source) {\n return HIT_TARGET_SIZES[source];\n}","/**\n * Input Store\n *\n * Jotai atoms tracking active pointers, input sources, and device capabilities.\n * Components read these atoms to adapt behavior per input source.\n *\n * Key derived atoms:\n * - `primaryInputSourceAtom` — the last-used input source ('finger' | 'pencil' | 'mouse')\n * - `isStylusActiveAtom` — true when a pen pointer is currently down\n * - `isMultiTouchAtom` — true when 2+ fingers are touching\n */\n\nimport { atom } from 'jotai';\nimport { detectInputCapabilities } from './input-classifier';\n\n// =============================================================================\n// Core Atoms\n// =============================================================================\n\n/**\n * Map of all currently active (down) pointers.\n * Updated on pointer down/up/cancel events.\n */\nexport const activePointersAtom = atom(new Map());\n\n/**\n * The primary/last-used input source.\n * Updated whenever a pointer goes down — the most recent source wins.\n * Defaults to 'mouse' on desktop, 'finger' on mobile.\n */\nexport const primaryInputSourceAtom = atom('mouse');\n\n/**\n * Device input capabilities.\n * Initialized once on mount, updated when stylus is first detected.\n */\nexport const inputCapabilitiesAtom = atom(detectInputCapabilities());\n\n// =============================================================================\n// Derived Atoms\n// =============================================================================\n\n/**\n * Whether a stylus/pen is currently touching the screen.\n * When true, finger touches should be routed to pan/zoom only (palm rejection).\n */\nexport const isStylusActiveAtom = atom(get => {\n const pointers = get(activePointersAtom);\n for (const [, pointer] of pointers) {\n if (pointer.source === 'pencil') return true;\n }\n return false;\n});\n\n/**\n * Whether multiple fingers are currently touching.\n * When true, the gesture is likely a pinch or two-finger pan.\n */\nexport const isMultiTouchAtom = atom(get => {\n const pointers = get(activePointersAtom);\n let fingerCount = 0;\n for (const [, pointer] of pointers) {\n if (pointer.source === 'finger') fingerCount++;\n }\n return fingerCount > 1;\n});\n\n/**\n * Count of active finger pointers.\n */\nexport const fingerCountAtom = atom(get => {\n const pointers = get(activePointersAtom);\n let count = 0;\n for (const [, pointer] of pointers) {\n if (pointer.source === 'finger') count++;\n }\n return count;\n});\n\n/**\n * Whether the device primarily uses touch (tablet/phone).\n * Used for showing/hiding touch-specific UI (e.g., ViewportControls).\n */\nexport const isTouchDeviceAtom = atom(get => {\n const caps = get(inputCapabilitiesAtom);\n return caps.hasTouch;\n});\n\n// =============================================================================\n// Action Atoms\n// =============================================================================\n\n/**\n * Register a pointer down event.\n * Updates active pointers and primary input source.\n */\nexport const pointerDownAtom = atom(null, (get, set, pointer) => {\n const pointers = new Map(get(activePointersAtom));\n pointers.set(pointer.pointerId, pointer);\n set(activePointersAtom, pointers);\n set(primaryInputSourceAtom, pointer.source);\n\n // Auto-detect stylus capability on first pen event\n if (pointer.source === 'pencil') {\n const caps = get(inputCapabilitiesAtom);\n if (!caps.hasStylus) {\n set(inputCapabilitiesAtom, {\n ...caps,\n hasStylus: true\n });\n }\n }\n});\n\n/**\n * Unregister a pointer up/cancel event.\n */\nexport const pointerUpAtom = atom(null, (get, set, pointerId) => {\n const pointers = new Map(get(activePointersAtom));\n pointers.delete(pointerId);\n set(activePointersAtom, pointers);\n});\n\n/**\n * Clear all active pointers.\n * Call on blur or visibility change to prevent stuck pointers.\n */\nexport const clearPointersAtom = atom(null, (_get, set) => {\n set(activePointersAtom, new Map());\n});","/**\n * Selection Path Store\n *\n * Manages the active lasso/rect selection path during drag operations.\n * The gesture resolver already returns 'lasso-select' and 'rect-select' intents;\n * this store tracks the drawn path and resolves which nodes fall inside it.\n */\n\nimport { atom } from 'jotai';\nimport { uiNodesAtom } from './graph-derived';\nimport { selectedNodeIdsAtom } from './selection-store';\n\n// --- Types ---\n\n// --- Core Atoms ---\n\n/** The active selection path, or null when not selecting */\nexport const selectionPathAtom = atom(null);\n\n/** Whether a selection drag is currently in progress */\nexport const isSelectingAtom = atom(get => get(selectionPathAtom) !== null);\n\n// --- Actions ---\n\n/** Start a new selection path */\nexport const startSelectionAtom = atom(null, (_get, set, {\n type,\n point\n}) => {\n set(selectionPathAtom, {\n type,\n points: [point]\n });\n});\n\n/** Add a point to the current selection path */\nexport const updateSelectionAtom = atom(null, (get, set, point) => {\n const current = get(selectionPathAtom);\n if (!current) return;\n if (current.type === 'rect') {\n // For rect, keep only start point + current point\n set(selectionPathAtom, {\n ...current,\n points: [current.points[0], point]\n });\n } else {\n // For lasso, append the point\n set(selectionPathAtom, {\n ...current,\n points: [...current.points, point]\n });\n }\n});\n\n/** Cancel the active selection drag without changing selection. */\nexport const cancelSelectionAtom = atom(null, (_get, set) => {\n set(selectionPathAtom, null);\n});\n\n/** End selection: compute intersecting nodes, update selection, clear path */\nexport const endSelectionAtom = atom(null, (get, set) => {\n const path = get(selectionPathAtom);\n if (!path || path.points.length < 2) {\n set(selectionPathAtom, null);\n return;\n }\n const nodes = get(uiNodesAtom);\n const selectedIds = [];\n if (path.type === 'rect') {\n const [p1, p2] = [path.points[0], path.points[path.points.length - 1]];\n const minX = Math.min(p1.x, p2.x);\n const maxX = Math.max(p1.x, p2.x);\n const minY = Math.min(p1.y, p2.y);\n const maxY = Math.max(p1.y, p2.y);\n for (const node of nodes) {\n // AABB intersection: node overlaps selection rect\n const nodeRight = node.position.x + (node.width ?? 200);\n const nodeBottom = node.position.y + (node.height ?? 100);\n if (node.position.x < maxX && nodeRight > minX && node.position.y < maxY && nodeBottom > minY) {\n selectedIds.push(node.id);\n }\n }\n } else {\n // Lasso: point-in-polygon test on node center\n const polygon = path.points;\n for (const node of nodes) {\n const cx = node.position.x + (node.width ?? 200) / 2;\n const cy = node.position.y + (node.height ?? 100) / 2;\n if (pointInPolygon(cx, cy, polygon)) {\n selectedIds.push(node.id);\n }\n }\n }\n\n // Set selection to the intersecting nodes\n set(selectedNodeIdsAtom, new Set(selectedIds));\n set(selectionPathAtom, null);\n});\n\n// --- Derived: selection rect bounds (for rendering) ---\n\n/** For rect mode, compute the bounding box */\nexport const selectionRectAtom = atom(get => {\n const path = get(selectionPathAtom);\n if (!path || path.type !== 'rect' || path.points.length < 2) return null;\n const [p1, p2] = [path.points[0], path.points[path.points.length - 1]];\n return {\n x: Math.min(p1.x, p2.x),\n y: Math.min(p1.y, p2.y),\n width: Math.abs(p2.x - p1.x),\n height: Math.abs(p2.y - p1.y)\n };\n});\n\n// --- Utilities ---\n\n/**\n * Ray-casting point-in-polygon test.\n * Returns true if (px, py) is inside the polygon defined by points.\n */\nexport function pointInPolygon(px, py, polygon) {\n let inside = false;\n const n = polygon.length;\n for (let i = 0, j = n - 1; i < n; j = i++) {\n const xi = polygon[i].x;\n const yi = polygon[i].y;\n const xj = polygon[j].x;\n const yj = polygon[j].y;\n if (yi > py !== yj > py && px < (xj - xi) * (py - yi) / (yj - yi) + xi) {\n inside = !inside;\n }\n }\n return inside;\n}","/**\n * Search Store\n *\n * Node and edge search with fuzzy multi-token matching.\n * Provides text search across node labels/types/IDs and edge labels/types\n * with result navigation and visual filter mode.\n */\n\nimport { atom } from 'jotai';\nimport { uiNodesAtom } from './graph-derived';\nimport { graphAtom, graphUpdateVersionAtom } from './graph-store';\nimport { centerOnNodeAtom } from './viewport-store';\nimport { selectSingleNodeAtom } from './selection-store';\n\n// =============================================================================\n// Search Query\n// =============================================================================\n\n/**\n * Current search query string.\n * Empty string = no active search.\n */\nexport const searchQueryAtom = atom('');\n\n/**\n * Set search query\n */\nexport const setSearchQueryAtom = atom(null, (_get, set, query) => {\n set(searchQueryAtom, query);\n set(highlightedSearchIndexAtom, 0);\n});\n\n/**\n * Clear search\n */\nexport const clearSearchAtom = atom(null, (_get, set) => {\n set(searchQueryAtom, '');\n set(highlightedSearchIndexAtom, 0);\n});\n\n// =============================================================================\n// Fuzzy Matching\n// =============================================================================\n\n/**\n * Check if ALL tokens in the query appear (in any order) within the haystack.\n * Tokens are split by whitespace. Each token must match as a substring.\n *\n * @example\n * fuzzyMatch(\"inp typ\", \"Input Type Node\") → true\n * fuzzyMatch(\"xyz\", \"Input Type Node\") → false\n */\nexport function fuzzyMatch(query, ...haystacks) {\n const tokens = query.toLowerCase().split(/\\s+/).filter(Boolean);\n if (tokens.length === 0) return false;\n const combined = haystacks.join(' ').toLowerCase();\n return tokens.every(token => combined.includes(token));\n}\n\n// =============================================================================\n// Node Search Results\n// =============================================================================\n\n/**\n * Derived: set of node IDs matching the current search query.\n * Uses fuzzy multi-token matching on label, node_type, and id.\n */\nexport const searchResultsAtom = atom(get => {\n const query = get(searchQueryAtom).trim();\n if (!query) return new Set();\n const nodes = get(uiNodesAtom);\n const matches = new Set();\n for (const node of nodes) {\n if (fuzzyMatch(query, node.label || '', node.dbData.node_type || '', node.id)) {\n matches.add(node.id);\n }\n }\n return matches;\n});\n\n/**\n * Derived: ordered array of matching node IDs (for navigation)\n */\nexport const searchResultsArrayAtom = atom(get => {\n return Array.from(get(searchResultsAtom));\n});\n\n/**\n * Derived: count of search results\n */\nexport const searchResultCountAtom = atom(get => {\n return get(searchResultsAtom).size;\n});\n\n// =============================================================================\n// Edge Search Results\n// =============================================================================\n\n/**\n * Derived: set of edge keys matching the current search query.\n * Matches on edge label, edge_type, and edge id.\n */\nexport const searchEdgeResultsAtom = atom(get => {\n const query = get(searchQueryAtom).trim();\n if (!query) return new Set();\n\n // Depend on graph version for reactivity\n get(graphUpdateVersionAtom);\n const graph = get(graphAtom);\n const matches = new Set();\n graph.forEachEdge((edgeKey, attrs) => {\n const label = attrs.label || '';\n const edgeType = attrs.dbData?.edge_type || '';\n if (fuzzyMatch(query, label, edgeType, edgeKey)) {\n matches.add(edgeKey);\n }\n });\n return matches;\n});\n\n/**\n * Derived: count of matching edges\n */\nexport const searchEdgeResultCountAtom = atom(get => {\n return get(searchEdgeResultsAtom).size;\n});\n\n// =============================================================================\n// Combined\n// =============================================================================\n\n/**\n * Whether a search filter is currently active\n */\nexport const isFilterActiveAtom = atom(get => {\n return get(searchQueryAtom).trim().length > 0;\n});\n\n/**\n * Total count of matching nodes + edges\n */\nexport const searchTotalResultCountAtom = atom(get => {\n return get(searchResultCountAtom) + get(searchEdgeResultCountAtom);\n});\n\n// =============================================================================\n// Result Navigation\n// =============================================================================\n\n/**\n * Index of the currently highlighted search result\n */\nexport const highlightedSearchIndexAtom = atom(0);\n\n/**\n * Navigate to the next search result\n */\nexport const nextSearchResultAtom = atom(null, (get, set) => {\n const results = get(searchResultsArrayAtom);\n if (results.length === 0) return;\n const currentIndex = get(highlightedSearchIndexAtom);\n const nextIndex = (currentIndex + 1) % results.length;\n set(highlightedSearchIndexAtom, nextIndex);\n const nodeId = results[nextIndex];\n set(centerOnNodeAtom, nodeId);\n set(selectSingleNodeAtom, nodeId);\n});\n\n/**\n * Navigate to the previous search result\n */\nexport const prevSearchResultAtom = atom(null, (get, set) => {\n const results = get(searchResultsArrayAtom);\n if (results.length === 0) return;\n const currentIndex = get(highlightedSearchIndexAtom);\n const prevIndex = (currentIndex - 1 + results.length) % results.length;\n set(highlightedSearchIndexAtom, prevIndex);\n const nodeId = results[prevIndex];\n set(centerOnNodeAtom, nodeId);\n set(selectSingleNodeAtom, nodeId);\n});\n\n/**\n * Get the currently highlighted node ID\n */\nexport const highlightedSearchNodeIdAtom = atom(get => {\n const results = get(searchResultsArrayAtom);\n if (results.length === 0) return null;\n const index = get(highlightedSearchIndexAtom);\n return results[index] ?? null;\n});","export {};","/**\n * Gesture Rules — Defaults, Labels & Merge\n *\n * Default gesture rule definitions and merge utilities.\n * Split from gesture-rules.ts for modularity.\n */\n\n// =============================================================================\n// Label Generation\n// =============================================================================\n\nconst MODIFIER_KEYS = ['shift', 'ctrl', 'alt', 'meta'];\nconst SOURCE_LABELS = {\n mouse: 'Mouse',\n pencil: 'Pencil',\n finger: 'Touch'\n};\nconst GESTURE_LABELS = {\n tap: 'Tap',\n 'double-tap': 'Double-tap',\n 'triple-tap': 'Triple-tap',\n drag: 'Drag',\n 'long-press': 'Long-press',\n 'right-click': 'Right-click',\n pinch: 'Pinch',\n scroll: 'Scroll'\n};\nconst TARGET_LABELS = {\n node: 'node',\n edge: 'edge',\n port: 'port',\n 'resize-handle': 'resize handle',\n background: 'background'\n};\nconst BUTTON_LABELS = {\n 0: 'Left',\n 1: 'Middle',\n 2: 'Right'\n};\n\n/**\n * Generate a human-readable label from a gesture pattern.\n */\nexport function formatRuleLabel(pattern) {\n const parts = [];\n\n // Modifiers first\n if (pattern.modifiers) {\n const mods = MODIFIER_KEYS.filter(k => pattern.modifiers[k]).map(k => k.charAt(0).toUpperCase() + k.slice(1));\n if (mods.length) parts.push(mods.join('+'));\n }\n\n // Button (only for non-left)\n if (pattern.button !== undefined && pattern.button !== 0) {\n parts.push(BUTTON_LABELS[pattern.button]);\n }\n\n // Source\n if (pattern.source) {\n parts.push(SOURCE_LABELS[pattern.source]);\n }\n\n // Gesture\n if (pattern.gesture) {\n parts.push(GESTURE_LABELS[pattern.gesture] ?? pattern.gesture);\n }\n\n // Target\n if (pattern.target) {\n parts.push('on ' + (TARGET_LABELS[pattern.target] ?? pattern.target));\n }\n if (parts.length === 0) return 'Any gesture';\n\n // Join with spaces, but use \" + \" before gesture if modifiers present\n if (pattern.modifiers) {\n const modCount = MODIFIER_KEYS.filter(k => pattern.modifiers[k]).length;\n if (modCount > 0 && parts.length > modCount) {\n const modPart = parts.slice(0, 1).join('');\n const rest = parts.slice(1).join(' ').toLowerCase();\n return `${modPart} + ${rest}`;\n }\n }\n return parts.join(' ');\n}\n\n// =============================================================================\n// Merge Utilities\n// =============================================================================\n\n/**\n * Merge consumer-provided rules with defaults.\n * Consumer rules override defaults with the same ID.\n * Consumer rules without matching IDs are appended.\n */\nexport function mergeRules(defaults, overrides) {\n const overrideMap = new Map(overrides.map(r => [r.id, r]));\n const result = [];\n\n // Apply overrides to matching defaults\n for (const rule of defaults) {\n const override = overrideMap.get(rule.id);\n if (override) {\n result.push(override);\n overrideMap.delete(rule.id);\n } else {\n result.push(rule);\n }\n }\n\n // Append remaining overrides (new rules)\n for (const rule of overrideMap.values()) {\n result.push(rule);\n }\n return result;\n}\n\n// =============================================================================\n// Default Rules\n// =============================================================================\n\n/**\n * Default gesture rules that replicate the current canvas behavior.\n */\nexport const DEFAULT_GESTURE_RULES = [\n// ── Tap gestures ──────────────────────────────────────────────\n{\n id: 'tap-node',\n pattern: {\n gesture: 'tap',\n target: 'node'\n },\n actionId: 'select-node'\n}, {\n id: 'tap-edge',\n pattern: {\n gesture: 'tap',\n target: 'edge'\n },\n actionId: 'select-edge'\n}, {\n id: 'tap-port',\n pattern: {\n gesture: 'tap',\n target: 'port'\n },\n actionId: 'select-node'\n}, {\n id: 'tap-bg',\n pattern: {\n gesture: 'tap',\n target: 'background'\n },\n actionId: 'clear-selection'\n},\n// ── Double-tap ────────────────────────────────────────────────\n{\n id: 'dtap-node',\n pattern: {\n gesture: 'double-tap',\n target: 'node'\n },\n actionId: 'fit-to-view'\n}, {\n id: 'dtap-bg',\n pattern: {\n gesture: 'double-tap',\n target: 'background'\n },\n actionId: 'fit-all-to-view'\n},\n// ── Triple-tap ────────────────────────────────────────────────\n{\n id: 'ttap-node',\n pattern: {\n gesture: 'triple-tap',\n target: 'node'\n },\n actionId: 'toggle-lock'\n},\n// ── Left-button drag ──────────────────────────────────────────\n{\n id: 'drag-node',\n pattern: {\n gesture: 'drag',\n target: 'node'\n },\n actionId: 'move-node'\n}, {\n id: 'drag-port',\n pattern: {\n gesture: 'drag',\n target: 'port'\n },\n actionId: 'create-edge'\n}, {\n id: 'drag-bg-finger',\n pattern: {\n gesture: 'drag',\n target: 'background',\n source: 'finger'\n },\n actionId: 'pan'\n}, {\n id: 'drag-bg-mouse',\n pattern: {\n gesture: 'drag',\n target: 'background',\n source: 'mouse'\n },\n actionId: 'pan'\n}, {\n id: 'drag-bg-pencil',\n pattern: {\n gesture: 'drag',\n target: 'background',\n source: 'pencil'\n },\n actionId: 'lasso-select'\n},\n// ── Shift+drag overrides ──────────────────────────────────────\n{\n id: 'shift-drag-bg',\n pattern: {\n gesture: 'drag',\n target: 'background',\n modifiers: {\n shift: true\n }\n },\n actionId: 'rect-select'\n},\n// ── Right-click tap (context menu) ────────────────────────────\n{\n id: 'rc-node',\n pattern: {\n gesture: 'tap',\n target: 'node',\n button: 2\n },\n actionId: 'open-context-menu'\n}, {\n id: 'rc-edge',\n pattern: {\n gesture: 'tap',\n target: 'edge',\n button: 2\n },\n actionId: 'open-context-menu'\n}, {\n id: 'rc-bg',\n pattern: {\n gesture: 'tap',\n target: 'background',\n button: 2\n },\n actionId: 'open-context-menu'\n},\n// ── Long-press ────────────────────────────────────────────────\n{\n id: 'lp-node',\n pattern: {\n gesture: 'long-press',\n target: 'node'\n },\n actionId: 'open-context-menu'\n}, {\n id: 'lp-bg-finger',\n pattern: {\n gesture: 'long-press',\n target: 'background',\n source: 'finger'\n },\n actionId: 'create-node'\n},\n// ── Right-button drag (defaults to none — consumers override) ─\n{\n id: 'rdrag-node',\n pattern: {\n gesture: 'drag',\n target: 'node',\n button: 2\n },\n actionId: 'none'\n}, {\n id: 'rdrag-bg',\n pattern: {\n gesture: 'drag',\n target: 'background',\n button: 2\n },\n actionId: 'none'\n},\n// ── Middle-button drag (defaults to none) ─────────────────────\n{\n id: 'mdrag-node',\n pattern: {\n gesture: 'drag',\n target: 'node',\n button: 1\n },\n actionId: 'none'\n}, {\n id: 'mdrag-bg',\n pattern: {\n gesture: 'drag',\n target: 'background',\n button: 1\n },\n actionId: 'none'\n},\n// ── Zoom ──────────────────────────────────────────────────────\n{\n id: 'pinch-bg',\n pattern: {\n gesture: 'pinch',\n target: 'background'\n },\n actionId: 'zoom'\n}, {\n id: 'scroll-any',\n pattern: {\n gesture: 'scroll'\n },\n actionId: 'zoom'\n},\n// ── Split ─────────────────────────────────────────────────────\n{\n id: 'pinch-node',\n pattern: {\n gesture: 'pinch',\n target: 'node'\n },\n actionId: 'split-node'\n}];","/**\n * Gesture Rules — Composable Event System\n *\n * A rule-based gesture resolution engine where ANY combination of\n * (button x modifier x source x gesture x target) can be mapped to any action.\n *\n * Resolution works by scoring each rule's pattern against the current gesture\n * descriptor. The most specific match wins, with automatic fallback to\n * less-specific rules.\n *\n * Types are in ./gesture-rules-types.ts\n * Defaults + labels + merge are in ./gesture-rules-defaults.ts\n */\n\n// Re-export all types for backward compat\n\n// Re-export defaults, labels, merge for backward compat\nexport { DEFAULT_GESTURE_RULES, mergeRules, formatRuleLabel } from './gesture-rules-defaults';\n\n// Re-export the index type\n\n// =============================================================================\n// Specificity Scoring\n// =============================================================================\n\nconst MODIFIER_KEYS = ['shift', 'ctrl', 'alt', 'meta'];\n\n/**\n * Calculate how specifically a pattern matches a descriptor.\n *\n * Returns -1 if the pattern does NOT match.\n * Returns 0+ for a match, where higher = more specific.\n *\n * Scoring:\n * gesture: +32 (most important dimension)\n * target: +16\n * modifiers: +8 per matching modifier flag\n * source: +4\n * button: +2\n */\nexport function matchSpecificity(pattern, desc) {\n let score = 0;\n if (pattern.gesture !== undefined) {\n if (pattern.gesture !== desc.gesture) return -1;\n score += 32;\n }\n if (pattern.target !== undefined) {\n if (pattern.target !== desc.target) return -1;\n score += 16;\n }\n if (pattern.source !== undefined) {\n if (pattern.source !== desc.source) return -1;\n score += 4;\n }\n if (pattern.button !== undefined) {\n if (pattern.button !== (desc.button ?? 0)) return -1;\n score += 2;\n }\n if (pattern.modifiers !== undefined) {\n const dm = desc.modifiers ?? {};\n for (const key of MODIFIER_KEYS) {\n const required = pattern.modifiers[key];\n if (required === undefined) continue;\n const actual = dm[key] ?? false;\n if (required !== actual) return -1;\n score += 8;\n }\n }\n return score;\n}\n\n// =============================================================================\n// Resolver\n// =============================================================================\n\n/** Sentinel rule for palm-rejected gestures */\nconst PALM_REJECTION_RULE = {\n id: '__palm-rejection__',\n pattern: {},\n actionId: 'none',\n label: 'Palm rejection'\n};\n\n/**\n * Resolve a gesture descriptor against a rule set.\n *\n * 1. Apply palm rejection (finger + stylus active → remap)\n * 2. Score every rule against the (possibly transformed) descriptor\n * 3. Pick highest specificity; break ties with rule.priority\n * 4. Return resolved action or null if no match\n */\nexport function resolveGesture(desc, rules, options) {\n const palmRejection = options?.palmRejection !== false;\n\n // Palm rejection: when stylus is active, finger touches become\n // navigation-only (taps → none, drags on nodes → pan)\n if (palmRejection && desc.isStylusActive && desc.source === 'finger') {\n if (desc.gesture === 'tap' || desc.gesture === 'long-press' || desc.gesture === 'double-tap' || desc.gesture === 'triple-tap') {\n return {\n actionId: 'none',\n rule: PALM_REJECTION_RULE,\n score: Infinity\n };\n }\n if (desc.gesture === 'drag' && desc.target !== 'background') {\n // Re-resolve as background pan\n return resolveGesture({\n ...desc,\n target: 'background',\n isStylusActive: false\n }, rules, {\n palmRejection: false\n });\n }\n }\n let best = null;\n for (const rule of rules) {\n const specificity = matchSpecificity(rule.pattern, desc);\n if (specificity < 0) continue;\n\n // Combine specificity with priority for final score\n const effectiveScore = specificity * 1000 + (rule.priority ?? 0);\n if (!best || effectiveScore > best.score) {\n best = {\n actionId: rule.actionId,\n rule,\n score: effectiveScore\n };\n }\n }\n return best;\n}\n\n// =============================================================================\n// Rule Index (for fast lookup)\n// =============================================================================\n\nexport function buildRuleIndex(rules) {\n const buckets = new Map();\n const wildcardRules = [];\n for (const rule of rules) {\n const key = rule.pattern.gesture;\n if (key === undefined) {\n wildcardRules.push(rule);\n } else {\n const bucket = buckets.get(key);\n if (bucket) {\n bucket.push(rule);\n } else {\n buckets.set(key, [rule]);\n }\n }\n }\n\n // Pre-concatenate wildcard rules into each gesture bucket\n const index = new Map();\n if (wildcardRules.length > 0) {\n for (const [key, bucket] of buckets) {\n index.set(key, bucket.concat(wildcardRules));\n }\n index.set('__wildcard__', wildcardRules);\n } else {\n for (const [key, bucket] of buckets) {\n index.set(key, bucket);\n }\n }\n return index;\n}\n\n/**\n * Resolve using an indexed rule set (faster for large rule sets).\n */\nexport function resolveGestureIndexed(desc, index, options) {\n const rules = index.get(desc.gesture) ?? index.get('__wildcard__') ?? [];\n return resolveGesture(desc, rules, options);\n}","/**\n * Gesture Rule Store\n *\n * Jotai atoms for managing gesture rules with localStorage persistence.\n * Provides CRUD operations and an indexed lookup for fast resolution.\n */\n\nimport { atom } from 'jotai';\nimport { atomWithStorage } from 'jotai/utils';\nimport { DEFAULT_GESTURE_RULES, buildRuleIndex, mergeRules } from './gesture-rules';\n\n// =============================================================================\n// Persisted State\n// =============================================================================\n\nconst DEFAULT_RULE_STATE = {\n customRules: [],\n palmRejection: true\n};\n\n/**\n * Persisted gesture rule settings.\n * Only stores user customizations — defaults are applied at runtime.\n */\nexport const gestureRuleSettingsAtom = atomWithStorage('canvas-gesture-rules', DEFAULT_RULE_STATE);\n\n// =============================================================================\n// Runtime Rules (merged defaults + custom)\n// =============================================================================\n\n/**\n * Consumer-provided rule overrides (set via Canvas props).\n * These are NOT persisted — they come from the component tree.\n */\nexport const consumerGestureRulesAtom = atom([]);\n\n/**\n * The effective rule set: defaults + persisted custom + consumer overrides.\n * Consumer rules take highest priority (applied last).\n */\nexport const gestureRulesAtom = atom(get => {\n const settings = get(gestureRuleSettingsAtom);\n const consumerRules = get(consumerGestureRulesAtom);\n\n // Layer 1: Start with defaults\n // Layer 2: Apply persisted user customizations\n let rules = mergeRules(DEFAULT_GESTURE_RULES, settings.customRules);\n // Layer 3: Apply consumer-provided overrides\n if (consumerRules.length > 0) {\n rules = mergeRules(rules, consumerRules);\n }\n return rules;\n});\n\n/**\n * Indexed rule set for fast resolution.\n * Recomputes only when rules change.\n */\nexport const gestureRuleIndexAtom = atom(get => {\n return buildRuleIndex(get(gestureRulesAtom));\n});\n\n/**\n * Palm rejection toggle.\n */\nexport const palmRejectionEnabledAtom = atom(get => get(gestureRuleSettingsAtom).palmRejection, (get, set, enabled) => {\n const current = get(gestureRuleSettingsAtom);\n set(gestureRuleSettingsAtom, {\n ...current,\n palmRejection: enabled\n });\n});\n\n// =============================================================================\n// CRUD Atoms\n// =============================================================================\n\n/**\n * Add or replace a custom gesture rule.\n * If a rule with the same ID exists, it's replaced.\n */\nexport const addGestureRuleAtom = atom(null, (get, set, rule) => {\n const current = get(gestureRuleSettingsAtom);\n const existing = current.customRules.findIndex(r => r.id === rule.id);\n const newRules = [...current.customRules];\n if (existing >= 0) {\n newRules[existing] = rule;\n } else {\n newRules.push(rule);\n }\n set(gestureRuleSettingsAtom, {\n ...current,\n customRules: newRules\n });\n});\n\n/**\n * Remove a custom gesture rule by ID.\n */\nexport const removeGestureRuleAtom = atom(null, (get, set, ruleId) => {\n const current = get(gestureRuleSettingsAtom);\n set(gestureRuleSettingsAtom, {\n ...current,\n customRules: current.customRules.filter(r => r.id !== ruleId)\n });\n});\n\n/**\n * Update an existing custom gesture rule.\n */\nexport const updateGestureRuleAtom = atom(null, (get, set, {\n id,\n updates\n}) => {\n const current = get(gestureRuleSettingsAtom);\n const index = current.customRules.findIndex(r => r.id === id);\n if (index < 0) return;\n const newRules = [...current.customRules];\n newRules[index] = {\n ...newRules[index],\n ...updates\n };\n set(gestureRuleSettingsAtom, {\n ...current,\n customRules: newRules\n });\n});\n\n/**\n * Reset all custom rules (revert to defaults).\n */\nexport const resetGestureRulesAtom = atom(null, (get, set) => {\n const current = get(gestureRuleSettingsAtom);\n set(gestureRuleSettingsAtom, {\n ...current,\n customRules: []\n });\n});","/**\n * External Keyboard Store\n *\n * Detects whether an external keyboard is connected to a touch device.\n * When detected, modifier-key actions become available via keyboard\n * shortcuts, so the TouchActionButton can be hidden.\n *\n * Detection: On touch devices, the first physical key event (not\n * on-screen keyboard) sets `hasExternalKeyboardAtom` to true.\n * Only meaningful when `isTouchDeviceAtom` is true — on desktop,\n * keyboard is always assumed.\n */\n\nimport { atom } from 'jotai';\n\n/**\n * Whether an external keyboard has been detected on a touch device.\n * Set to true on first `keydown` event on a touch-capable device.\n */\nexport const hasExternalKeyboardAtom = atom(false);\n\n/**\n * Effect atom: listens for keydown events on touch devices.\n * Once detected, stops listening (permanent for the session).\n */\nexport const watchExternalKeyboardAtom = atom(null, (get, set) => {\n if (typeof window === 'undefined') return;\n const handler = e => {\n // Ignore virtual keyboard keys (typically modifier-only events)\n // A real keyboard sends identifiable key values\n if (e.key && e.key.length === 1 || ['Tab', 'Escape', 'Enter', 'ArrowUp', 'ArrowDown', 'ArrowLeft', 'ArrowRight'].includes(e.key)) {\n set(hasExternalKeyboardAtom, true);\n window.removeEventListener('keydown', handler);\n }\n };\n window.addEventListener('keydown', handler);\n return () => window.removeEventListener('keydown', handler);\n});","/**\n * Plugin Types\n *\n * Type definitions for the canvas plugin system.\n * A plugin is a declarative manifest that bundles registrations\n * across all canvas subsystems (node types, commands, actions,\n * gesture contexts, edge calculators).\n */\n\n// =============================================================================\n// Plugin Definition\n// =============================================================================\n\n/**\n * A canvas plugin bundles registrations across all subsystems.\n *\n * @example\n * ```ts\n * const myPlugin: CanvasPlugin = {\n * id: 'my-plugin',\n * name: 'My Plugin',\n * nodeTypes: { 'custom-node': CustomNodeComponent },\n * commands: [myCommand],\n * gestureContexts: [myGestureContext],\n * };\n * ```\n */\n\n// =============================================================================\n// Plugin Context\n// =============================================================================\n\n/**\n * Context passed to plugin lifecycle hooks.\n */\n\n// =============================================================================\n// Plugin State\n// =============================================================================\n\n/** Internal state for a registered plugin */\n\n// =============================================================================\n// Errors\n// =============================================================================\n\nexport class PluginError extends Error {\n constructor(message, pluginId, code) {\n super(`[Plugin \"${pluginId}\"] ${message}`);\n this.pluginId = pluginId;\n this.code = code;\n this.name = 'PluginError';\n }\n}","/**\n * Gesture System v2 — Core Types\n *\n * Single source of truth for every type in the gesture pipeline.\n * No runtime code — pure type definitions.\n */\n\n// =============================================================================\n// Layer 1: Normalize\n// =============================================================================\n\nexport const NO_MODIFIERS = Object.freeze({\n shift: false,\n ctrl: false,\n alt: false,\n meta: false\n});\nexport const NO_HELD_KEYS = Object.freeze({\n byKey: Object.freeze({}),\n byCode: Object.freeze({})\n});\n\n// =============================================================================\n// Layer 2: Recognize\n// =============================================================================\n\n// =============================================================================\n// Layer 2: Timed State\n// =============================================================================\n\n// =============================================================================\n// Layer 3: Resolve\n// =============================================================================\n\n// =============================================================================\n// Layer 4: Dispatch\n// =============================================================================\n\n/**\n * Action handler. Simple function form fires only on 'start' and 'instant'.\n * Object form routes each phase to a dedicated method.\n */\n\nexport function isKeyInputEvent(event) {\n return event.kind === 'key';\n}\nexport function isPointerGestureEvent(event) {\n return event.kind !== 'key';\n}\n\n// =============================================================================\n// Re-exports for convenience\n// =============================================================================","/**\n * Layer 4: Gesture Dispatcher\n *\n * Routes resolved actions to registered handlers, respecting input phase.\n * Simple function handlers fire only on pointer 'start'/'instant' and key 'down'.\n * Object handlers route each phase to a dedicated method.\n */\n\nimport { isKeyInputEvent } from './types';\n\n// =============================================================================\n// Action Registry\n// =============================================================================\n\nconst handlers = new Map();\n\n/**\n * Register an action handler. Overwrites any existing handler for the same ID.\n */\nexport function registerAction(actionId, handler) {\n handlers.set(actionId, handler);\n}\n\n/**\n * Remove a registered action handler.\n */\nexport function unregisterAction(actionId) {\n handlers.delete(actionId);\n}\n\n/**\n * Get a registered handler (for testing/introspection).\n */\nexport function getHandler(actionId) {\n return handlers.get(actionId);\n}\n\n/**\n * Clear all registered handlers (for testing).\n */\nexport function clearHandlers() {\n handlers.clear();\n}\n\n// =============================================================================\n// Dispatch\n// =============================================================================\n\n/**\n * Dispatch a resolved gesture event to its action handler.\n *\n * Returns true if a handler was found and invoked, false otherwise.\n * The 'none' action ID is always a no-op — it means the binding\n * intentionally blocks the gesture without executing anything.\n */\nexport function dispatch(event, resolution) {\n if (resolution.actionId === 'none') return true;\n const handler = handlers.get(resolution.actionId);\n if (!handler) return false;\n if (typeof handler === 'function') {\n // Simple handler: fire on pointer start/instant and key down.\n if (isKeyInputEvent(event) && event.phase === 'down' || !isKeyInputEvent(event) && (event.phase === 'start' || event.phase === 'instant')) {\n handler(event);\n }\n return true;\n }\n\n // Phase-aware handler\n routePhase(handler, event.phase, event);\n return true;\n}\nfunction routePhase(handler, phase, event) {\n if (isKeyInputEvent(event)) {\n routeKeyPhase(handler, phase, event);\n return;\n }\n switch (phase) {\n case 'start':\n handler.onStart?.(event);\n break;\n case 'move':\n handler.onMove?.(event);\n break;\n case 'end':\n handler.onEnd?.(event);\n break;\n case 'instant':\n handler.onInstant?.(event);\n break;\n case 'cancel':\n handler.onCancel?.(event);\n break;\n }\n}\nfunction routeKeyPhase(handler, phase, event) {\n switch (phase) {\n case 'down':\n handler.onDown?.(event);\n break;\n case 'up':\n handler.onUp?.(event);\n break;\n }\n}","/**\n * Command Registry\n *\n * Singleton class for managing all available commands.\n * Commands can be registered by the canvas package (built-ins)\n * or by consuming apps (custom commands).\n */\n\n/**\n * Command Registry - Singleton class for managing all available commands.\n *\n * Usage:\n * ```typescript\n * import { commandRegistry } from '@blinksgg/canvas';\n *\n * // Register a command\n * commandRegistry.register(myCommand);\n *\n * // Get a command by name or alias\n * const cmd = commandRegistry.get('createNode'); // or 'cn'\n *\n * // Search commands\n * const results = commandRegistry.search('node');\n * ```\n */\nclass CommandRegistry {\n commands = new Map();\n aliases = new Map(); // alias -> command name\n\n /**\n * Register a command with the registry.\n * @param command The command definition to register\n * @throws Error if command name or alias already exists\n */\n register(command) {\n if (this.commands.has(command.name)) {\n throw new Error(`Command \"${command.name}\" is already registered`);\n }\n this.commands.set(command.name, command);\n\n // Register aliases\n if (command.aliases) {\n for (const alias of command.aliases) {\n if (this.aliases.has(alias)) {\n throw new Error(`Alias \"${alias}\" is already registered for command \"${this.aliases.get(alias)}\"`);\n }\n if (this.commands.has(alias)) {\n throw new Error(`Alias \"${alias}\" conflicts with existing command name`);\n }\n this.aliases.set(alias, command.name);\n }\n }\n }\n\n /**\n * Unregister a command by name.\n * @param name The command name to remove\n */\n unregister(name) {\n const command = this.commands.get(name);\n if (command) {\n // Remove aliases\n if (command.aliases) {\n for (const alias of command.aliases) {\n this.aliases.delete(alias);\n }\n }\n this.commands.delete(name);\n }\n }\n\n /**\n * Get a command by name or alias.\n * @param nameOrAlias Command name or alias\n * @returns The command definition or undefined if not found\n */\n get(nameOrAlias) {\n // Check if it's a direct command name\n const direct = this.commands.get(nameOrAlias);\n if (direct) return direct;\n\n // Check if it's an alias\n const commandName = this.aliases.get(nameOrAlias);\n if (commandName) {\n return this.commands.get(commandName);\n }\n return undefined;\n }\n\n /**\n * Check if a command exists by name or alias.\n * @param nameOrAlias Command name or alias\n */\n has(nameOrAlias) {\n return this.commands.has(nameOrAlias) || this.aliases.has(nameOrAlias);\n }\n\n /**\n * Search for commands matching a query.\n * Searches command names, aliases, and descriptions.\n * @param query Search query (case-insensitive)\n * @returns Array of matching commands, sorted by relevance\n */\n search(query) {\n if (!query.trim()) {\n return this.all();\n }\n const lowerQuery = query.toLowerCase().trim();\n const results = [];\n const commands = Array.from(this.commands.values());\n for (const command of commands) {\n let score = 0;\n\n // Exact name match (highest priority)\n if (command.name.toLowerCase() === lowerQuery) {\n score = 100;\n }\n // Name starts with query\n else if (command.name.toLowerCase().startsWith(lowerQuery)) {\n score = 80;\n }\n // Name contains query\n else if (command.name.toLowerCase().includes(lowerQuery)) {\n score = 60;\n }\n // Alias exact match\n else if (command.aliases?.some(a => a.toLowerCase() === lowerQuery)) {\n score = 90;\n }\n // Alias starts with query\n else if (command.aliases?.some(a => a.toLowerCase().startsWith(lowerQuery))) {\n score = 70;\n }\n // Alias contains query\n else if (command.aliases?.some(a => a.toLowerCase().includes(lowerQuery))) {\n score = 50;\n }\n // Description contains query\n else if (command.description.toLowerCase().includes(lowerQuery)) {\n score = 30;\n }\n if (score > 0) {\n results.push({\n command,\n score\n });\n }\n }\n\n // Sort by score (descending), then alphabetically\n return results.sort((a, b) => b.score - a.score || a.command.name.localeCompare(b.command.name)).map(r => r.command);\n }\n\n /**\n * Get all registered commands.\n * @returns Array of all commands, sorted alphabetically by name\n */\n all() {\n return Array.from(this.commands.values()).sort((a, b) => a.name.localeCompare(b.name));\n }\n\n /**\n * Get commands by category.\n * @param category The category to filter by\n * @returns Array of commands in the category\n */\n byCategory(category) {\n return this.all().filter(cmd => cmd.category === category);\n }\n\n /**\n * Get all available categories.\n * @returns Array of unique categories\n */\n categories() {\n const categories = new Set();\n const commands = Array.from(this.commands.values());\n for (const command of commands) {\n categories.add(command.category);\n }\n return Array.from(categories).sort();\n }\n\n /**\n * Get the count of registered commands.\n */\n get size() {\n return this.commands.size;\n }\n\n /**\n * Clear all registered commands.\n * Useful for testing.\n */\n clear() {\n this.commands.clear();\n this.aliases.clear();\n }\n\n /**\n * Get a serializable list of commands for API responses.\n */\n toJSON() {\n return this.all().map(cmd => ({\n name: cmd.name,\n aliases: cmd.aliases || [],\n description: cmd.description,\n category: cmd.category,\n inputs: cmd.inputs.map(input => ({\n name: input.name,\n type: input.type,\n prompt: input.prompt,\n required: input.required !== false\n }))\n }));\n }\n}\n\n// Singleton instance\nexport const commandRegistry = new CommandRegistry();\n\n// Default export for convenience\nexport default commandRegistry;\n\n// Helper function for registering commands\nexport function registerCommand(command) {\n commandRegistry.register(command);\n}","/**\n * Edge Path Calculators\n *\n * Configurable edge path calculation strategies.\n * Allows customization of how edges are drawn between nodes.\n */\n\n/**\n * Edge path calculator function type\n */\n\n/**\n * Horizontal Bezier curve (default)\n * Control points extend horizontally from source/target\n */\nexport const bezierHorizontal = ({\n x1,\n y1,\n x2,\n y2\n}) => {\n const dist = Math.abs(x2 - x1);\n const offset = Math.max(dist * 0.5, 50);\n const cp1x = x1 + offset;\n const cp1y = y1;\n const cp2x = x2 - offset;\n const cp2y = y2;\n const path = `M ${x1} ${y1} C ${cp1x} ${cp1y}, ${cp2x} ${cp2y}, ${x2} ${y2}`;\n\n // Midpoint along bezier curve (approximation)\n const labelX = (x1 + x2) / 2;\n const labelY = (y1 + y2) / 2;\n return {\n path,\n labelX,\n labelY\n };\n};\n\n/**\n * Vertical Bezier curve\n * Control points extend vertically from source/target\n */\nexport const bezierVertical = ({\n x1,\n y1,\n x2,\n y2\n}) => {\n const dist = Math.abs(y2 - y1);\n const offset = Math.max(dist * 0.5, 50);\n const cp1x = x1;\n const cp1y = y1 + offset;\n const cp2x = x2;\n const cp2y = y2 - offset;\n const path = `M ${x1} ${y1} C ${cp1x} ${cp1y}, ${cp2x} ${cp2y}, ${x2} ${y2}`;\n const labelX = (x1 + x2) / 2;\n const labelY = (y1 + y2) / 2;\n return {\n path,\n labelX,\n labelY\n };\n};\n\n/**\n * Smart Bezier curve\n * Chooses horizontal or vertical based on relative positions\n */\nexport const bezierSmart = input => {\n const {\n x1,\n y1,\n x2,\n y2\n } = input;\n const dx = Math.abs(x2 - x1);\n const dy = Math.abs(y2 - y1);\n\n // Use horizontal if nodes are more side-by-side, vertical if more stacked\n return dx > dy ? bezierHorizontal(input) : bezierVertical(input);\n};\n\n/**\n * Straight line edge\n */\nexport const straight = ({\n x1,\n y1,\n x2,\n y2\n}) => {\n const path = `M ${x1} ${y1} L ${x2} ${y2}`;\n const labelX = (x1 + x2) / 2;\n const labelY = (y1 + y2) / 2;\n return {\n path,\n labelX,\n labelY\n };\n};\n\n/**\n * Step edge (orthogonal) - horizontal first, then vertical\n */\nexport const stepHorizontal = ({\n x1,\n y1,\n x2,\n y2\n}) => {\n const midX = (x1 + x2) / 2;\n const path = `M ${x1} ${y1} L ${midX} ${y1} L ${midX} ${y2} L ${x2} ${y2}`;\n const labelX = midX;\n const labelY = (y1 + y2) / 2;\n return {\n path,\n labelX,\n labelY\n };\n};\n\n/**\n * Step edge (orthogonal) - vertical first, then horizontal\n */\nexport const stepVertical = ({\n x1,\n y1,\n x2,\n y2\n}) => {\n const midY = (y1 + y2) / 2;\n const path = `M ${x1} ${y1} L ${x1} ${midY} L ${x2} ${midY} L ${x2} ${y2}`;\n const labelX = (x1 + x2) / 2;\n const labelY = midY;\n return {\n path,\n labelX,\n labelY\n };\n};\n\n/**\n * Smart step edge\n * Chooses horizontal-first or vertical-first based on relative positions\n */\nexport const stepSmart = input => {\n const {\n x1,\n y1,\n x2,\n y2\n } = input;\n const dx = Math.abs(x2 - x1);\n const dy = Math.abs(y2 - y1);\n return dx > dy ? stepHorizontal(input) : stepVertical(input);\n};\n\n/**\n * Smooth step edge - orthogonal with rounded corners\n */\nexport const smoothStep = ({\n x1,\n y1,\n x2,\n y2\n}) => {\n const midX = (x1 + x2) / 2;\n const radius = Math.min(20, Math.abs(x2 - x1) / 4, Math.abs(y2 - y1) / 2);\n\n // Handle cases where radius would cause issues\n if (radius < 5 || Math.abs(y2 - y1) < radius * 2) {\n return stepHorizontal({\n x1,\n y1,\n x2,\n y2,\n sourceWidth: 0,\n sourceHeight: 0,\n targetWidth: 0,\n targetHeight: 0\n });\n }\n const yDir = y2 > y1 ? 1 : -1;\n const path = `\n M ${x1} ${y1}\n L ${midX - radius} ${y1}\n Q ${midX} ${y1}, ${midX} ${y1 + radius * yDir}\n L ${midX} ${y2 - radius * yDir}\n Q ${midX} ${y2}, ${midX + radius} ${y2}\n L ${x2} ${y2}\n `.replace(/\\s+/g, ' ').trim();\n const labelX = midX;\n const labelY = (y1 + y2) / 2;\n return {\n path,\n labelX,\n labelY\n };\n};\n\n/**\n * Available edge path types\n */\n\n/**\n * Get calculator by type name\n */\nexport function getEdgePathCalculator(type) {\n switch (type) {\n case 'bezier':\n return bezierHorizontal;\n case 'bezier-vertical':\n return bezierVertical;\n case 'bezier-smart':\n return bezierSmart;\n case 'straight':\n return straight;\n case 'step':\n return stepHorizontal;\n case 'step-vertical':\n return stepVertical;\n case 'step-smart':\n return stepSmart;\n case 'smooth-step':\n return smoothStep;\n default:\n return bezierHorizontal;\n }\n}\n\n/**\n * Default edge path calculator\n */\nexport const defaultEdgePathCalculator = bezierHorizontal;","/**\n * Edge Path Registry\n *\n * Extensible registry for custom edge path calculators.\n * Built-in calculators are resolved first, then custom ones.\n * Used by the plugin system to allow plugins to add new edge path types.\n */\n\nimport { getEdgePathCalculator as getBuiltInCalculator } from './edge-path-calculators';\nconst customCalculators = new Map();\n\n/**\n * Register a custom edge path calculator.\n * Custom calculators take precedence over built-in ones with the same name.\n */\nexport function registerEdgePathCalculator(name, calculator) {\n customCalculators.set(name, calculator);\n}\n\n/**\n * Unregister a custom edge path calculator.\n */\nexport function unregisterEdgePathCalculator(name) {\n return customCalculators.delete(name);\n}\n\n/**\n * Get an edge path calculator by name.\n * Checks custom calculators first, then falls back to built-in ones.\n */\nexport function resolveEdgePathCalculator(name) {\n return customCalculators.get(name) ?? getBuiltInCalculator(name);\n}\n\n/**\n * Check if a custom calculator is registered.\n */\nexport function hasCustomEdgePathCalculator(name) {\n return customCalculators.has(name);\n}\n\n/**\n * Get all registered custom calculator names.\n */\nexport function getCustomEdgePathCalculatorNames() {\n return Array.from(customCalculators.keys());\n}\n\n/**\n * Clear all custom calculators. Mainly for testing.\n */\nexport function clearCustomEdgePathCalculators() {\n customCalculators.clear();\n}","/**\n * Plugin Registry\n *\n * Central registry for canvas plugins. Handles:\n * - Registration with dependency resolution\n * - Conflict detection across all subsystems\n * - Atomic registration (all-or-nothing)\n * - Cleanup on unregister\n */\n\nimport { PluginError } from './plugin-types';\nimport { registerNodeTypes, unregisterNodeType } from './node-type-registry';\nimport { registerAction as registerEventAction, unregisterAction as unregisterEventAction } from './action-registry';\nimport { registerAction as registerGestureAction, unregisterAction as unregisterGestureAction } from '../gestures/dispatcher';\nimport { commandRegistry } from '../commands/registry';\nimport { registerEdgePathCalculator, unregisterEdgePathCalculator } from '../utils/edge-path-registry';\nimport { createDebug } from '../utils/debug';\nconst debug = createDebug('plugins');\n\n// =============================================================================\n// Registry\n// =============================================================================\n\nconst plugins = new Map();\n\n/**\n * Register a plugin. All capabilities are registered atomically.\n *\n * @throws {PluginError} ALREADY_REGISTERED — plugin ID already in use\n * @throws {PluginError} MISSING_DEPENDENCY — required plugin not registered\n * @throws {PluginError} CONFLICT — duplicate node type, action, command, or calculator\n *\n * @example\n * ```ts\n * registerPlugin({\n * id: 'my-plugin',\n * name: 'My Plugin',\n * nodeTypes: { 'custom': CustomNode },\n * commands: [myCommand],\n * });\n * ```\n */\nexport function registerPlugin(plugin) {\n debug('Registering plugin: %s', plugin.id);\n\n // 1. Check not already registered\n if (plugins.has(plugin.id)) {\n throw new PluginError('Plugin is already registered', plugin.id, 'ALREADY_REGISTERED');\n }\n\n // 2. Check dependencies\n if (plugin.dependencies) {\n for (const depId of plugin.dependencies) {\n if (!plugins.has(depId)) {\n throw new PluginError(`Missing dependency: \"${depId}\"`, plugin.id, 'MISSING_DEPENDENCY');\n }\n }\n }\n\n // 3. Check for conflicts before registering anything\n detectConflicts(plugin);\n\n // 4. Register all capabilities\n const cleanups = [];\n try {\n // Node types\n if (plugin.nodeTypes) {\n const nodeTypeNames = Object.keys(plugin.nodeTypes);\n registerNodeTypes(plugin.nodeTypes);\n cleanups.push(() => {\n for (const name of nodeTypeNames) {\n unregisterNodeType(name);\n }\n });\n }\n\n // Edge path calculators\n if (plugin.edgePathCalculators) {\n for (const [name, calc] of Object.entries(plugin.edgePathCalculators)) {\n registerEdgePathCalculator(name, calc);\n cleanups.push(() => unregisterEdgePathCalculator(name));\n }\n }\n\n // Gesture action handlers\n if (plugin.actionHandlers) {\n for (const [actionId, handler] of Object.entries(plugin.actionHandlers)) {\n registerGestureAction(actionId, handler);\n cleanups.push(() => unregisterGestureAction(actionId));\n }\n }\n\n // Gesture contexts are stored on the plugin — consumers read them\n // via getPluginGestureContexts() and merge them into the mapping index.\n\n // Commands\n if (plugin.commands) {\n for (const cmd of plugin.commands) {\n commandRegistry.register(cmd);\n cleanups.push(() => commandRegistry.unregister(cmd.name));\n }\n }\n\n // Event-action definitions\n if (plugin.actions) {\n for (const action of plugin.actions) {\n registerEventAction(action);\n cleanups.push(() => unregisterEventAction(action.id));\n }\n }\n\n // 5. Lifecycle hook\n let lifecycleCleanup = null;\n if (plugin.onRegister) {\n const ctx = makePluginContext(plugin.id);\n try {\n const result = plugin.onRegister(ctx);\n if (typeof result === 'function') {\n lifecycleCleanup = result;\n }\n } catch (err) {\n // Rollback all registrations on lifecycle error\n for (const cleanup of cleanups.reverse()) {\n try {\n cleanup();\n } catch {/* swallow cleanup errors */}\n }\n throw new PluginError(`onRegister failed: ${err instanceof Error ? err.message : String(err)}`, plugin.id, 'LIFECYCLE_ERROR');\n }\n }\n\n // 6. Store registration\n plugins.set(plugin.id, {\n plugin,\n cleanup: () => {\n for (const cleanup of cleanups.reverse()) {\n try {\n cleanup();\n } catch {/* swallow cleanup errors */}\n }\n if (lifecycleCleanup) {\n try {\n lifecycleCleanup();\n } catch {/* swallow */}\n }\n },\n registeredAt: Date.now()\n });\n debug('Plugin registered: %s (%d node types, %d commands, %d actions)', plugin.id, Object.keys(plugin.nodeTypes ?? {}).length, plugin.commands?.length ?? 0, plugin.actions?.length ?? 0);\n } catch (err) {\n if (err instanceof PluginError) throw err;\n // Rollback on unexpected error\n for (const cleanup of cleanups.reverse()) {\n try {\n cleanup();\n } catch {/* swallow */}\n }\n throw err;\n }\n}\n\n/**\n * Unregister a plugin and clean up all its registrations.\n *\n * @throws {PluginError} NOT_FOUND — plugin not registered\n * @throws {PluginError} CONFLICT — other plugins depend on this one\n */\nexport function unregisterPlugin(pluginId) {\n const registration = plugins.get(pluginId);\n if (!registration) {\n throw new PluginError('Plugin is not registered', pluginId, 'NOT_FOUND');\n }\n\n // Check no other plugin depends on this one\n for (const [otherId, other] of plugins) {\n if (other.plugin.dependencies?.includes(pluginId)) {\n throw new PluginError(`Cannot unregister: plugin \"${otherId}\" depends on it`, pluginId, 'CONFLICT');\n }\n }\n\n // Run cleanup\n if (registration.cleanup) {\n registration.cleanup();\n }\n plugins.delete(pluginId);\n debug('Plugin unregistered: %s', pluginId);\n}\n\n// =============================================================================\n// Queries\n// =============================================================================\n\n/** Get a registered plugin by ID */\nexport function getPlugin(id) {\n return plugins.get(id)?.plugin;\n}\n\n/** Check if a plugin is registered */\nexport function hasPlugin(id) {\n return plugins.has(id);\n}\n\n/** Get all registered plugins */\nexport function getAllPlugins() {\n return Array.from(plugins.values()).map(r => r.plugin);\n}\n\n/** Get all registered plugin IDs */\nexport function getPluginIds() {\n return Array.from(plugins.keys());\n}\n\n/**\n * Get all gesture contexts contributed by plugins.\n * Used by GestureProvider to merge plugin contexts into the mapping index.\n */\nexport function getPluginGestureContexts() {\n const contexts = [];\n for (const registration of plugins.values()) {\n if (registration.plugin.gestureContexts) {\n contexts.push(...registration.plugin.gestureContexts);\n }\n }\n return contexts;\n}\n\n/** Clear all plugins. Mainly for testing. */\nexport function clearPlugins() {\n // Unregister in reverse order (respect dependencies)\n const ids = Array.from(plugins.keys()).reverse();\n for (const id of ids) {\n const reg = plugins.get(id);\n if (reg?.cleanup) {\n try {\n reg.cleanup();\n } catch {/* swallow */}\n }\n plugins.delete(id);\n }\n debug('All plugins cleared');\n}\n\n// =============================================================================\n// Conflict Detection\n// =============================================================================\n\nfunction detectConflicts(plugin) {\n // Check command name conflicts\n if (plugin.commands) {\n for (const cmd of plugin.commands) {\n if (commandRegistry.has(cmd.name)) {\n throw new PluginError(`Command \"${cmd.name}\" is already registered`, plugin.id, 'CONFLICT');\n }\n }\n }\n\n // Check edge path calculator conflicts\n if (plugin.edgePathCalculators) {\n for (const name of Object.keys(plugin.edgePathCalculators)) {\n // Built-in types are fine to shadow (plugin overrides)\n // Only conflict with other plugins\n for (const [otherId, other] of plugins) {\n if (other.plugin.edgePathCalculators?.[name]) {\n throw new PluginError(`Edge path calculator \"${name}\" already registered by plugin \"${otherId}\"`, plugin.id, 'CONFLICT');\n }\n }\n }\n }\n\n // Check node type conflicts between plugins\n if (plugin.nodeTypes) {\n for (const nodeType of Object.keys(plugin.nodeTypes)) {\n for (const [otherId, other] of plugins) {\n if (other.plugin.nodeTypes?.[nodeType]) {\n throw new PluginError(`Node type \"${nodeType}\" already registered by plugin \"${otherId}\"`, plugin.id, 'CONFLICT');\n }\n }\n }\n }\n\n // Check action handler conflicts between plugins\n if (plugin.actionHandlers) {\n for (const actionId of Object.keys(plugin.actionHandlers)) {\n for (const [otherId, other] of plugins) {\n if (other.plugin.actionHandlers?.[actionId]) {\n throw new PluginError(`Action handler \"${actionId}\" already registered by plugin \"${otherId}\"`, plugin.id, 'CONFLICT');\n }\n }\n }\n }\n}\n\n// =============================================================================\n// Internal Helpers\n// =============================================================================\n\nfunction makePluginContext(pluginId) {\n return {\n pluginId,\n getPlugin,\n hasPlugin\n };\n}","/**\n * Core state management exports\n *\n * All headless state atoms and types for the canvas.\n * Each store module uses `export *` — no manual symbol listing needed.\n */\n\n// Types\nexport * from './types';\n\n// Graph system (split into 4 modules in v0.22)\nexport * from './graph-store';\nexport * from './graph-position';\nexport * from './graph-derived';\nexport * from './graph-mutations';\n\n// Viewport (pan, zoom, transitions, animations)\nexport * from './viewport-store';\n\n// Selection (nodes, edges, focus)\nexport * from './selection-store';\n\n// Sync (mutation queue, online status)\nexport * from './sync-store';\n\n// Interaction (input modes, picking, feedback)\nexport * from './interaction-store';\n\n// Locked node (detail view)\nexport * from './locked-node-store';\n\n// Node type registry\nexport * from './node-type-registry';\n\n// History (undo/redo — delta-based)\nexport * from './history-store';\n\n// Toast\nexport * from './toast-store';\n\n// Snap-to-grid\nexport * from './snap-store';\n\n// Settings types + store\nexport * from './settings-types';\nexport * from './action-registry';\nexport * from './action-executor';\nexport * from './settings-store';\n\n// Canvas API (headless)\nexport * from './canvas-api';\n\n// Virtualization\nexport * from './virtualization-store';\n\n// Port types\nexport * from './port-types';\n\n// Clipboard\nexport * from './clipboard-store';\n\n// Input classifier + store\nexport * from './input-classifier';\nexport * from './input-store';\n\n// Selection path (lasso / rect-select)\nexport * from './selection-path-store';\n\n// Group store (node grouping/nesting)\nexport * from './group-store';\n\n// Search store (node search & filter)\nexport * from './search-store';\n\n// Gesture resolver (types only)\nexport * from './gesture-resolver';\n\n// Gesture rules (composable gesture system)\nexport * from './gesture-rules';\nexport * from './gesture-rule-store';\n\n// Reduced motion\nexport * from './reduced-motion-store';\n\n// External keyboard detection (iPad)\nexport * from './external-keyboard-store';\n\n// Performance instrumentation\nexport * from './perf';\n\n// Spatial index\nexport * from './spatial-index';\n\n// Plugin system (v1.2)\nexport * from './plugin-types';\nexport * from './plugin-registry';\n\n// Canvas serialization (v1.3)\nexport * from './canvas-serializer';","/**\n * @blinksgg/canvas\n *\n * A batteries-included canvas library for node-based editors\n * with drag, resize, pan/zoom, and Supabase sync.\n */\n\n// Package version - update in package.json and here when releasing\nexport const CANVAS_VERSION = '2.0.0';\n\n/**\n * Version info for debugging and compatibility checks\n */\nexport const canvasVersion = {\n version: CANVAS_VERSION,\n major: 2,\n minor: 0,\n patch: 0,\n /** Check if current version is at least the specified version */\n isAtLeast: (major, minor = 0, patch = 0) => {\n if (canvasVersion.major > major) return true;\n if (canvasVersion.major < major) return false;\n if (canvasVersion.minor > minor) return true;\n if (canvasVersion.minor < minor) return false;\n return canvasVersion.patch >= patch;\n }\n};\n\n// Core state management (headless)\nexport * from './core';\n\n// Hooks\nexport * from './hooks';\n\n// Utilities\nexport * from './utils';\n\n// Database layer (Supabase integration)\nexport * from './db';\n\n// Styles\nexport * from './styles';\n\n// Providers\nexport * from './providers';\n\n// Components\nexport * from './components';\n\n// Bundled Nodes (pre-built node types)\nexport * from './nodes';\n\n// Commands system (command palette)\nexport * from './commands';\n\n// Gesture system\nexport * as gestures from './gestures';","import { c as _c } from \"react/compiler-runtime\";\n/**\n * Hook for managing node selection state\n */\n\nimport { useAtom, useSetAtom } from 'jotai';\nimport { selectedNodeIdsAtom, selectSingleNodeAtom, toggleNodeInSelectionAtom } from '../core/selection-store';\n\n/**\n * Hook to manage selection for a specific node\n *\n * @param nodeId - The ID of the node\n * @returns Selection state and actions for the node\n */\nexport function useNodeSelection(nodeId) {\n const $ = _c(13);\n const [selectedIds] = useAtom(selectedNodeIdsAtom);\n const selectSingle = useSetAtom(selectSingleNodeAtom);\n const toggleNode = useSetAtom(toggleNodeInSelectionAtom);\n let t0;\n if ($[0] !== nodeId || $[1] !== selectedIds) {\n t0 = selectedIds.has(nodeId);\n $[0] = nodeId;\n $[1] = selectedIds;\n $[2] = t0;\n } else {\n t0 = $[2];\n }\n let t1;\n if ($[3] !== nodeId || $[4] !== selectSingle) {\n t1 = () => selectSingle(nodeId);\n $[3] = nodeId;\n $[4] = selectSingle;\n $[5] = t1;\n } else {\n t1 = $[5];\n }\n let t2;\n if ($[6] !== nodeId || $[7] !== toggleNode) {\n t2 = () => toggleNode(nodeId);\n $[6] = nodeId;\n $[7] = toggleNode;\n $[8] = t2;\n } else {\n t2 = $[8];\n }\n let t3;\n if ($[9] !== t0 || $[10] !== t1 || $[11] !== t2) {\n t3 = {\n isSelected: t0,\n selectNode: t1,\n toggleNode: t2\n };\n $[9] = t0;\n $[10] = t1;\n $[11] = t2;\n $[12] = t3;\n } else {\n t3 = $[12];\n }\n return t3;\n}","import { c as _c } from \"react/compiler-runtime\";\n/**\n * Hook for managing node drag behavior\n *\n * Pure drag mechanics — always moves nodes. Gesture resolution\n * (which button/source/modifier maps to which action) is handled\n * by the v2 gesture pipeline in useNodeGestures / useCanvasGestures.\n *\n * Type definitions are in ./drag-types.ts\n */\n\nimport { useAtom, useAtomValue, useSetAtom, atom } from 'jotai';\nimport { useGesture } from '@use-gesture/react';\nimport { useRef } from 'react';\nimport { graphAtom, preDragNodeAttributesAtom, edgeCreationAtom, currentGraphIdAtom } from '../core/graph-store';\nimport { nodePositionUpdateCounterAtom } from '../core/graph-position';\nimport { startNodeDragAtom, endNodeDragAtom, dropTargetNodeIdAtom } from '../core/graph-mutations';\nimport { panAtom, zoomAtom } from '../core/viewport-store';\nimport { selectedNodeIdsAtom } from '../core/selection-store';\nimport { startMutationAtom, completeMutationAtom } from '../core/sync-store';\nimport { pushHistoryAtom } from '../core/history-store';\nimport { nestNodesOnDropAtom } from '../core/group-store';\nimport { getNodeGestureConfig } from '../utils/gesture-configs';\nimport { primaryInputSourceAtom } from '../core/input-store';\nimport { getPendingState } from '../utils/mutation-queue';\nimport { createDebug } from '../utils/debug';\nimport { hitTestNode } from '../utils/hit-test';\nimport { buildDragPositions, computeDragUpdates, isDragPrevented } from './useDragStateMachine';\n\n// Re-export extracted modules\nexport { buildDragPositions, computeDragUpdates, isDragPrevented } from './useDragStateMachine';\nexport { snapToGrid, clampToBounds, applyDragConstraints } from './useDragConstraints';\n\n// Re-export types for backward compat\n\nconst debug = createDebug('drag');\n\n/**\n * Hook for node drag behavior with multi-select support.\n * Always treats drag as move-node — no gesture resolution.\n */\nexport function useNodeDrag(id, t0) {\n const $ = _c(49);\n let t1;\n if ($[0] !== t0) {\n t1 = t0 === undefined ? {} : t0;\n $[0] = t0;\n $[1] = t1;\n } else {\n t1 = $[1];\n }\n const options = t1;\n const {\n onPersist,\n onPersistError,\n heldKeys\n } = options;\n const graph = useAtomValue(graphAtom);\n const [pan, setPan] = useAtom(panAtom);\n const startMutation = useSetAtom(startMutationAtom);\n const completeMutation = useSetAtom(completeMutationAtom);\n const setStartDrag = useSetAtom(startNodeDragAtom);\n const setEndDrag = useSetAtom(endNodeDragAtom);\n const getPreDragAttributes = useAtomValue(preDragNodeAttributesAtom);\n const currentZoom = useAtomValue(zoomAtom);\n const getSelectedNodeIds = useAtomValue(selectedNodeIdsAtom);\n const currentGraphId = useAtomValue(currentGraphIdAtom);\n const edgeCreation = useAtomValue(edgeCreationAtom);\n const setGraph = useSetAtom(graphAtom);\n useSetAtom(nodePositionUpdateCounterAtom);\n const pushHistory = useSetAtom(pushHistoryAtom);\n const setDropTarget = useSetAtom(dropTargetNodeIdAtom);\n const nestNodesOnDrop = useSetAtom(nestNodesOnDropAtom);\n const inputSource = useAtomValue(primaryInputSourceAtom);\n let t2;\n if ($[2] === Symbol.for(\"react.memo_cache_sentinel\")) {\n t2 = atom(null, _temp2);\n $[2] = t2;\n } else {\n t2 = $[2];\n }\n const batchUpdatePositions = useSetAtom(t2);\n let t3;\n if ($[3] !== batchUpdatePositions) {\n t3 = updates_0 => {\n batchUpdatePositions(updates_0);\n };\n $[3] = batchUpdatePositions;\n $[4] = t3;\n } else {\n t3 = $[4];\n }\n const updateNodePositions = t3;\n const gestureInstanceRef = useRef(0);\n let t4;\n if ($[5] === Symbol.for(\"react.memo_cache_sentinel\")) {\n t4 = {\n x: 0,\n y: 0\n };\n $[5] = t4;\n } else {\n t4 = $[5];\n }\n const panStartRef = useRef(t4);\n const isSpaceHeld = Boolean(heldKeys?.byCode.Space || heldKeys?.byKey[\" \"] || heldKeys?.byKey.Spacebar);\n let t5;\n if ($[6] !== isSpaceHeld || $[7] !== pan) {\n t5 = state => {\n if (isDragPrevented(state.event.target)) {\n return;\n }\n gestureInstanceRef.current = gestureInstanceRef.current + 1;\n if (isSpaceHeld) {\n panStartRef.current = pan;\n }\n };\n $[6] = isSpaceHeld;\n $[7] = pan;\n $[8] = t5;\n } else {\n t5 = $[8];\n }\n let t6;\n if ($[9] !== currentZoom || $[10] !== edgeCreation || $[11] !== getSelectedNodeIds || $[12] !== graph || $[13] !== id || $[14] !== isSpaceHeld || $[15] !== pushHistory || $[16] !== setDropTarget || $[17] !== setPan || $[18] !== setStartDrag || $[19] !== startMutation || $[20] !== updateNodePositions) {\n t6 = state_0 => {\n if (isDragPrevented(state_0.event.target)) {\n return;\n }\n if (edgeCreation.isCreating) {\n return;\n }\n state_0.event.stopPropagation();\n if (isSpaceHeld) {\n if (!state_0.tap && state_0.active) {\n const [mx, my] = state_0.movement;\n setPan({\n x: panStartRef.current.x + mx,\n y: panStartRef.current.y + my\n });\n }\n return state_0.memo;\n }\n const {\n movement: t7,\n first,\n active,\n down,\n pinching,\n cancel,\n tap\n } = state_0;\n const [mx_0, my_0] = t7;\n let currentMemo = state_0.memo;\n if (tap || !active) {\n return currentMemo;\n }\n const currentGestureInstance = gestureInstanceRef.current;\n if (first) {\n const selectionSize = getSelectedNodeIds.size;\n const label = selectionSize > 1 ? `Move ${selectionSize} nodes` : \"Move node\";\n pushHistory(label);\n setStartDrag({\n nodeId: id\n });\n const initialPositions = buildDragPositions(graph, getSelectedNodeIds);\n initialPositions.forEach(() => startMutation());\n currentMemo = {\n initialPositions,\n gestureInstance: currentGestureInstance\n };\n }\n if (!currentMemo || currentMemo.gestureInstance !== currentGestureInstance || !currentMemo.initialPositions) {\n if (cancel && !pinching && !down && !tap && !active) {\n cancel();\n }\n return currentMemo;\n }\n const updates_1 = computeDragUpdates(currentMemo.initialPositions, mx_0, my_0, currentZoom, graph);\n if (updates_1.length > 0) {\n updateNodePositions(updates_1);\n }\n if (state_0.event && \"clientX\" in state_0.event) {\n const {\n nodeId: hoveredId\n } = hitTestNode(state_0.event.clientX, state_0.event.clientY);\n const validTarget = hoveredId && !currentMemo.initialPositions.has(hoveredId) ? hoveredId : null;\n setDropTarget(validTarget);\n }\n return currentMemo;\n };\n $[9] = currentZoom;\n $[10] = edgeCreation;\n $[11] = getSelectedNodeIds;\n $[12] = graph;\n $[13] = id;\n $[14] = isSpaceHeld;\n $[15] = pushHistory;\n $[16] = setDropTarget;\n $[17] = setPan;\n $[18] = setStartDrag;\n $[19] = startMutation;\n $[20] = updateNodePositions;\n $[21] = t6;\n } else {\n t6 = $[21];\n }\n let t7;\n if ($[22] !== completeMutation || $[23] !== currentGraphId || $[24] !== currentZoom || $[25] !== edgeCreation || $[26] !== getPreDragAttributes || $[27] !== getSelectedNodeIds || $[28] !== graph || $[29] !== id || $[30] !== isSpaceHeld || $[31] !== nestNodesOnDrop || $[32] !== onPersist || $[33] !== onPersistError || $[34] !== setDropTarget || $[35] !== setEndDrag || $[36] !== setGraph || $[37] !== startMutation || $[38] !== updateNodePositions) {\n t7 = state_1 => {\n if (isDragPrevented(state_1.event.target)) {\n return;\n }\n if (edgeCreation.isCreating) {\n setEndDrag({\n nodeId: id\n });\n return;\n }\n if (isSpaceHeld) {\n return;\n }\n state_1.event.stopPropagation();\n const memo = state_1.memo;\n setDropTarget(null);\n if (state_1.event && \"clientX\" in state_1.event && memo?.initialPositions) {\n const {\n nodeId: hoveredId_0\n } = hitTestNode(state_1.event.clientX, state_1.event.clientY);\n if (hoveredId_0 && !memo.initialPositions.has(hoveredId_0)) {\n const draggedNodeIds = Array.from(memo.initialPositions.keys()).filter(nid => getSelectedNodeIds.has(nid));\n if (draggedNodeIds.length > 0) {\n nestNodesOnDrop({\n nodeIds: draggedNodeIds,\n targetId: hoveredId_0\n });\n }\n }\n }\n if (!currentGraphId) {\n debug(\"Cannot update node position: currentGraphId is not set\");\n setEndDrag({\n nodeId: id\n });\n return;\n }\n const nodesToUpdate = memo?.initialPositions ? Array.from(memo.initialPositions.keys()) : [id];\n nodesToUpdate.forEach(draggedNodeId => {\n if (!graph.hasNode(draggedNodeId)) {\n completeMutation(false);\n return;\n }\n const finalAttrs = graph.getNodeAttributes(draggedNodeId);\n const initialPos = memo?.initialPositions.get(draggedNodeId);\n if (!initialPos) {\n completeMutation(false);\n return;\n }\n const [mx_1, my_1] = state_1.movement;\n const deltaX = mx_1 / currentZoom;\n const deltaY = my_1 / currentZoom;\n const finalPosition = {\n x: initialPos.x + deltaX,\n y: initialPos.y + deltaY\n };\n updateNodePositions([{\n id: draggedNodeId,\n pos: finalPosition\n }]);\n if (!onPersist) {\n completeMutation(true);\n setEndDrag({\n nodeId: draggedNodeId\n });\n return;\n }\n const existingDbUiProps = typeof finalAttrs.dbData.ui_properties === \"object\" && finalAttrs.dbData.ui_properties !== null && !Array.isArray(finalAttrs.dbData.ui_properties) ? finalAttrs.dbData.ui_properties : {};\n const newUiProperties = {\n ...existingDbUiProps,\n x: finalPosition.x,\n y: finalPosition.y,\n zIndex: finalAttrs.zIndex\n };\n const pendingState = getPendingState(draggedNodeId);\n if (pendingState.inFlight) {\n pendingState.queuedPosition = finalPosition;\n pendingState.queuedUiProperties = newUiProperties;\n pendingState.graphId = currentGraphId;\n return;\n }\n pendingState.inFlight = true;\n pendingState.graphId = currentGraphId;\n const processQueuedUpdate = async nodeId => {\n const state_2 = getPendingState(nodeId);\n if (state_2 && state_2.queuedPosition && state_2.queuedUiProperties && state_2.graphId) {\n const queuedProps = state_2.queuedUiProperties;\n const queuedGraphId = state_2.graphId;\n state_2.queuedPosition = null;\n state_2.queuedUiProperties = null;\n startMutation();\n ;\n try {\n await onPersist(nodeId, queuedGraphId, queuedProps);\n completeMutation(true);\n } catch (t8) {\n const error = t8;\n completeMutation(false);\n onPersistError?.(nodeId, error);\n }\n state_2.inFlight = false;\n processQueuedUpdate(nodeId);\n } else {\n if (state_2) {\n state_2.inFlight = false;\n }\n }\n };\n onPersist(draggedNodeId, currentGraphId, newUiProperties).then(() => {\n completeMutation(true);\n processQueuedUpdate(draggedNodeId);\n }).catch(error_0 => {\n completeMutation(false);\n const state_3 = getPendingState(draggedNodeId);\n if (state_3) {\n state_3.inFlight = false;\n }\n const preDragAttrsForNode = getPreDragAttributes;\n if (preDragAttrsForNode && preDragAttrsForNode.dbData.id === draggedNodeId && graph.hasNode(draggedNodeId)) {\n graph.replaceNodeAttributes(draggedNodeId, preDragAttrsForNode);\n setGraph(graph);\n }\n onPersistError?.(draggedNodeId, error_0);\n processQueuedUpdate(draggedNodeId);\n }).finally(() => {\n setEndDrag({\n nodeId: draggedNodeId\n });\n });\n });\n };\n $[22] = completeMutation;\n $[23] = currentGraphId;\n $[24] = currentZoom;\n $[25] = edgeCreation;\n $[26] = getPreDragAttributes;\n $[27] = getSelectedNodeIds;\n $[28] = graph;\n $[29] = id;\n $[30] = isSpaceHeld;\n $[31] = nestNodesOnDrop;\n $[32] = onPersist;\n $[33] = onPersistError;\n $[34] = setDropTarget;\n $[35] = setEndDrag;\n $[36] = setGraph;\n $[37] = startMutation;\n $[38] = updateNodePositions;\n $[39] = t7;\n } else {\n t7 = $[39];\n }\n let t8;\n if ($[40] !== t5 || $[41] !== t6 || $[42] !== t7) {\n t8 = {\n onPointerDown: t5,\n onDrag: t6,\n onDragEnd: t7\n };\n $[40] = t5;\n $[41] = t6;\n $[42] = t7;\n $[43] = t8;\n } else {\n t8 = $[43];\n }\n let t9;\n if ($[44] !== inputSource) {\n t9 = getNodeGestureConfig(inputSource);\n $[44] = inputSource;\n $[45] = t9;\n } else {\n t9 = $[45];\n }\n const bind = useGesture(t8, t9);\n let t10;\n if ($[46] !== bind || $[47] !== updateNodePositions) {\n t10 = {\n bind,\n updateNodePositions\n };\n $[46] = bind;\n $[47] = updateNodePositions;\n $[48] = t10;\n } else {\n t10 = $[48];\n }\n return t10;\n}\nfunction _temp2(get, set, updates) {\n const graph_0 = get(graphAtom);\n updates.forEach(u => {\n if (graph_0.hasNode(u.id)) {\n graph_0.setNodeAttribute(u.id, \"x\", u.pos.x);\n graph_0.setNodeAttribute(u.id, \"y\", u.pos.y);\n }\n });\n set(nodePositionUpdateCounterAtom, _temp);\n}\nfunction _temp(c) {\n return c + 1;\n}","/**\n * Gesture configuration for @use-gesture/react\n *\n * Input-source-aware configurations.\n * Components should select the appropriate config based on `primaryInputSourceAtom`.\n */\n\n// =============================================================================\n// Source-Specific Configs\n// =============================================================================\n\n/** Gesture config for finger input (larger thresholds for imprecise touch) */\nconst fingerGestureConfig = {\n eventOptions: {\n passive: false,\n capture: false\n },\n drag: {\n pointer: {\n touch: true,\n keys: false,\n capture: false,\n buttons: -1\n },\n filterTaps: true,\n tapsThreshold: 10,\n // Was 3 — too strict for fingers\n threshold: 10 // Was 3 — needs larger dead zone\n }\n};\n\n/** Gesture config for pencil/stylus input (precise, tight thresholds) */\nconst pencilGestureConfig = {\n eventOptions: {\n passive: false,\n capture: false\n },\n drag: {\n pointer: {\n touch: true,\n keys: false,\n capture: false,\n buttons: -1\n },\n filterTaps: true,\n tapsThreshold: 3,\n threshold: 2 // Very precise — small dead zone\n }\n};\n\n/** Gesture config for mouse input */\nconst mouseGestureConfig = {\n eventOptions: {\n passive: false,\n capture: false\n },\n drag: {\n pointer: {\n touch: true,\n keys: false,\n capture: false,\n buttons: -1\n },\n filterTaps: true,\n tapsThreshold: 5,\n // Was 3\n threshold: 3\n }\n};\n\n// =============================================================================\n// Config Selectors\n// =============================================================================\n\n/**\n * Get the appropriate node gesture config for the given input source.\n */\nexport function getNodeGestureConfig(source) {\n switch (source) {\n case 'finger':\n return fingerGestureConfig;\n case 'pencil':\n return pencilGestureConfig;\n case 'mouse':\n return mouseGestureConfig;\n }\n}\n\n/**\n * Get the appropriate viewport gesture config for the given input source.\n */\nexport function getViewportGestureConfig(source) {\n const base = getNodeGestureConfig(source);\n return {\n ...base,\n eventOptions: {\n passive: false\n },\n pinch: {\n pointer: {\n touch: true\n }\n },\n wheel: {\n eventOptions: {\n passive: false\n }\n }\n };\n}","/**\n * Hit-testing utilities for canvas elements.\n *\n * Abstracts `document.elementFromPoint` / `document.elementsFromPoint`\n * behind testable functions. In tests or SSR, consumers can provide\n * a mock implementation via `setHitTestProvider`.\n */\n\n// --- Types ---\n\n// --- Default provider (real DOM) ---\n\nconst defaultProvider = {\n elementFromPoint: (x, y) => document.elementFromPoint(x, y),\n elementsFromPoint: (x, y) => document.elementsFromPoint(x, y)\n};\nlet _provider = defaultProvider;\n\n/**\n * Override the hit-test provider (for testing or SSR).\n * Pass `null` to restore the default DOM provider.\n */\nexport function setHitTestProvider(provider) {\n _provider = provider ?? defaultProvider;\n}\n\n// --- Hit-test functions ---\n\n/**\n * Find the canvas node at a screen position.\n * Looks for the nearest ancestor with `[data-node-id]`.\n */\nexport function hitTestNode(screenX, screenY) {\n const element = _provider.elementFromPoint(screenX, screenY);\n const nodeElement = element?.closest('[data-node-id]') ?? null;\n const nodeId = nodeElement?.getAttribute('data-node-id') ?? null;\n return {\n nodeId,\n element: nodeElement\n };\n}\n\n/**\n * Find a port at a screen position.\n * Scans through all elements at the position for `[data-drag-port-id]`.\n */\nexport function hitTestPort(screenX, screenY) {\n const elements = _provider.elementsFromPoint(screenX, screenY);\n for (const el of elements) {\n const portElement = el.closest('[data-drag-port-id]');\n if (portElement) {\n const portId = portElement.dataset.dragPortId;\n const portBar = portElement.closest('[data-port-bar]');\n const nodeId = portBar?.dataset.nodeId;\n if (portId && nodeId) {\n return {\n nodeId,\n portId\n };\n }\n }\n }\n return null;\n}","/**\n * useDragStateMachine\n *\n * Pure drag state helpers extracted from useNodeDrag.\n * Handles: memo initialization, multi-select expansion,\n * and gesture instance tracking.\n *\n * @since 1.6.0\n */\n\nimport { getNodeDescendants } from '../core/group-store';\n/**\n * Build the initial positions map for a drag operation.\n * Includes all selected nodes + their group descendants.\n */\nexport function buildDragPositions(graph, selectedNodeIds) {\n const positions = new Map();\n\n // Collect selected nodes\n for (const nodeId of selectedNodeIds) {\n if (graph.hasNode(nodeId)) {\n const attrs = graph.getNodeAttributes(nodeId);\n positions.set(nodeId, {\n x: attrs.x,\n y: attrs.y\n });\n }\n }\n\n // Expand to include descendants of any group nodes\n const currentKeys = Array.from(positions.keys());\n for (const nodeId of currentKeys) {\n const descendants = getNodeDescendants(graph, nodeId);\n for (const descId of descendants) {\n if (!positions.has(descId) && graph.hasNode(descId)) {\n const attrs = graph.getNodeAttributes(descId);\n positions.set(descId, {\n x: attrs.x,\n y: attrs.y\n });\n }\n }\n }\n return positions;\n}\n\n/**\n * Compute the position updates for all dragged nodes given\n * pixel movement and zoom level.\n */\nexport function computeDragUpdates(initialPositions, movementX, movementY, zoom, graph) {\n const deltaX = movementX / zoom;\n const deltaY = movementY / zoom;\n const updates = [];\n initialPositions.forEach((initialPos, nodeId) => {\n if (graph.hasNode(nodeId)) {\n updates.push({\n id: nodeId,\n pos: {\n x: initialPos.x + deltaX,\n y: initialPos.y + deltaY\n }\n });\n }\n });\n return updates;\n}\n\n/**\n * Check whether a pointer target should prevent drag.\n */\nexport function isDragPrevented(target) {\n return !!target.closest('[data-no-drag=\"true\"]') || target.tagName === 'INPUT' || target.tagName === 'TEXTAREA' || target.tagName === 'SELECT';\n}","import { c as _c } from \"react/compiler-runtime\";\n/**\n * Hook for managing node resize behavior\n */\n\nimport { useAtomValue, useSetAtom } from 'jotai';\nimport { useRef, useState, useEffect } from 'react';\nimport { flushSync } from 'react-dom';\nimport { graphAtom, currentGraphIdAtom, graphUpdateVersionAtom } from '../core/graph-store';\nimport { nodePositionUpdateCounterAtom } from '../core/graph-position';\nimport { zoomAtom } from '../core/viewport-store';\nimport { startMutationAtom, completeMutationAtom } from '../core/sync-store';\nimport { createDebug } from '../utils/debug';\nconst debug = createDebug('resize');\n/**\n * Hook for node resize behavior\n */\nexport function useNodeResize(t0) {\n const $ = _c(38);\n const {\n id,\n nodeData,\n updateNodePositions,\n options: t1\n } = t0;\n let t2;\n if ($[0] !== t1) {\n t2 = t1 === undefined ? {} : t1;\n $[0] = t1;\n $[1] = t2;\n } else {\n t2 = $[1];\n }\n const options = t2;\n const {\n onPersist,\n onPersistError,\n minWidth: t3,\n minHeight: t4\n } = options;\n const minWidth = t3 === undefined ? 200 : t3;\n const minHeight = t4 === undefined ? 150 : t4;\n const [localWidth, setLocalWidth] = useState(nodeData.width || 500);\n const [localHeight, setLocalHeight] = useState(nodeData.height || 500);\n const [isResizing, setIsResizing] = useState(false);\n const resizeStartRef = useRef(null);\n const graph = useAtomValue(graphAtom);\n const currentZoom = useAtomValue(zoomAtom);\n const currentGraphId = useAtomValue(currentGraphIdAtom);\n const startMutation = useSetAtom(startMutationAtom);\n const completeMutation = useSetAtom(completeMutationAtom);\n const setGraphUpdateVersion = useSetAtom(graphUpdateVersionAtom);\n const setNodePositionUpdateCounter = useSetAtom(nodePositionUpdateCounterAtom);\n let t5;\n let t6;\n if ($[2] !== isResizing || $[3] !== nodeData.height || $[4] !== nodeData.width) {\n t5 = () => {\n if (!isResizing) {\n setLocalWidth(nodeData.width || 500);\n setLocalHeight(nodeData.height || 500);\n }\n };\n t6 = [nodeData.width, nodeData.height, isResizing];\n $[2] = isResizing;\n $[3] = nodeData.height;\n $[4] = nodeData.width;\n $[5] = t5;\n $[6] = t6;\n } else {\n t5 = $[5];\n t6 = $[6];\n }\n useEffect(t5, t6);\n let t7;\n if ($[7] !== graph || $[8] !== id || $[9] !== localHeight || $[10] !== localWidth) {\n t7 = direction => e => {\n e.stopPropagation();\n e.preventDefault();\n setIsResizing(true);\n const nodeAttrs = graph.hasNode(id) ? graph.getNodeAttributes(id) : {\n x: 0,\n y: 0\n };\n resizeStartRef.current = {\n width: localWidth,\n height: localHeight,\n startX: e.clientX,\n startY: e.clientY,\n startNodeX: nodeAttrs.x,\n startNodeY: nodeAttrs.y,\n direction\n };\n e.target.setPointerCapture(e.pointerId);\n };\n $[7] = graph;\n $[8] = id;\n $[9] = localHeight;\n $[10] = localWidth;\n $[11] = t7;\n } else {\n t7 = $[11];\n }\n const createResizeStart = t7;\n let t8;\n if ($[12] !== currentZoom || $[13] !== graph || $[14] !== id || $[15] !== minHeight || $[16] !== minWidth || $[17] !== setGraphUpdateVersion || $[18] !== setNodePositionUpdateCounter || $[19] !== updateNodePositions) {\n t8 = e_0 => {\n if (!resizeStartRef.current) {\n return;\n }\n e_0.stopPropagation();\n e_0.preventDefault();\n const deltaX = (e_0.clientX - resizeStartRef.current.startX) / currentZoom;\n const deltaY = (e_0.clientY - resizeStartRef.current.startY) / currentZoom;\n const {\n direction: direction_0,\n width: startWidth,\n height: startHeight,\n startNodeX,\n startNodeY\n } = resizeStartRef.current;\n let newWidth = startWidth;\n let newHeight = startHeight;\n let newX = startNodeX;\n let newY = startNodeY;\n if (direction_0.includes(\"e\")) {\n newWidth = Math.max(minWidth, startWidth + deltaX);\n }\n if (direction_0.includes(\"w\")) {\n newWidth = Math.max(minWidth, startWidth - deltaX);\n newX = startNodeX + (startWidth - newWidth);\n }\n if (direction_0.includes(\"s\")) {\n newHeight = Math.max(minHeight, startHeight + deltaY);\n }\n if (direction_0.includes(\"n\")) {\n newHeight = Math.max(minHeight, startHeight - deltaY);\n newY = startNodeY + (startHeight - newHeight);\n }\n if (graph.hasNode(id)) {\n graph.setNodeAttribute(id, \"width\", newWidth);\n graph.setNodeAttribute(id, \"height\", newHeight);\n graph.setNodeAttribute(id, \"x\", newX);\n graph.setNodeAttribute(id, \"y\", newY);\n }\n flushSync(() => {\n setLocalWidth(newWidth);\n setLocalHeight(newHeight);\n setGraphUpdateVersion(_temp);\n });\n if (direction_0.includes(\"n\") || direction_0.includes(\"w\")) {\n updateNodePositions([{\n id,\n pos: {\n x: newX,\n y: newY\n }\n }]);\n } else {\n setNodePositionUpdateCounter(_temp2);\n }\n };\n $[12] = currentZoom;\n $[13] = graph;\n $[14] = id;\n $[15] = minHeight;\n $[16] = minWidth;\n $[17] = setGraphUpdateVersion;\n $[18] = setNodePositionUpdateCounter;\n $[19] = updateNodePositions;\n $[20] = t8;\n } else {\n t8 = $[20];\n }\n const handleResizeMove = t8;\n let t9;\n if ($[21] !== completeMutation || $[22] !== currentGraphId || $[23] !== graph || $[24] !== id || $[25] !== localHeight || $[26] !== localWidth || $[27] !== onPersist || $[28] !== onPersistError || $[29] !== startMutation) {\n t9 = e_1 => {\n if (!resizeStartRef.current) {\n return;\n }\n e_1.stopPropagation();\n e_1.target.releasePointerCapture(e_1.pointerId);\n setIsResizing(false);\n if (!currentGraphId || !resizeStartRef.current) {\n resizeStartRef.current = null;\n return;\n }\n const finalAttrs = graph.hasNode(id) ? graph.getNodeAttributes(id) : null;\n if (!finalAttrs) {\n resizeStartRef.current = null;\n return;\n }\n const finalWidth = finalAttrs.width || localWidth;\n const finalHeight = finalAttrs.height || localHeight;\n const finalX = finalAttrs.x;\n const finalY = finalAttrs.y;\n setLocalWidth(finalWidth);\n setLocalHeight(finalHeight);\n if (!onPersist) {\n resizeStartRef.current = null;\n return;\n }\n const existingDbUiProps = typeof finalAttrs.dbData.ui_properties === \"object\" && finalAttrs.dbData.ui_properties !== null && !Array.isArray(finalAttrs.dbData.ui_properties) ? finalAttrs.dbData.ui_properties : {};\n const newUiProperties = {\n ...existingDbUiProps,\n width: finalWidth,\n height: finalHeight,\n x: finalX,\n y: finalY\n };\n startMutation();\n onPersist(id, currentGraphId, newUiProperties).then(() => {\n completeMutation(true);\n }).catch(error => {\n completeMutation(false);\n if (resizeStartRef.current) {\n setLocalWidth(resizeStartRef.current.width);\n setLocalHeight(resizeStartRef.current.height);\n }\n onPersistError?.(id, error);\n }).finally(() => {\n resizeStartRef.current = null;\n });\n };\n $[21] = completeMutation;\n $[22] = currentGraphId;\n $[23] = graph;\n $[24] = id;\n $[25] = localHeight;\n $[26] = localWidth;\n $[27] = onPersist;\n $[28] = onPersistError;\n $[29] = startMutation;\n $[30] = t9;\n } else {\n t9 = $[30];\n }\n const handleResizeEnd = t9;\n let t10;\n if ($[31] !== createResizeStart || $[32] !== handleResizeEnd || $[33] !== handleResizeMove || $[34] !== isResizing || $[35] !== localHeight || $[36] !== localWidth) {\n t10 = {\n localWidth,\n localHeight,\n isResizing,\n createResizeStart,\n handleResizeMove,\n handleResizeEnd\n };\n $[31] = createResizeStart;\n $[32] = handleResizeEnd;\n $[33] = handleResizeMove;\n $[34] = isResizing;\n $[35] = localHeight;\n $[36] = localWidth;\n $[37] = t10;\n } else {\n t10 = $[37];\n }\n return t10;\n}\nfunction _temp2(c) {\n return c + 1;\n}\nfunction _temp(v) {\n return v + 1;\n}","import { c as _c } from \"react/compiler-runtime\";\n/**\n * useCanvasHistory Hook\n *\n * Provides undo/redo functionality for canvas operations.\n */\n\nimport { useAtomValue, useSetAtom, useStore } from 'jotai';\nimport { canUndoAtom, canRedoAtom, undoAtom, redoAtom, pushHistoryAtom, clearHistoryAtom, undoCountAtom, redoCountAtom, historyLabelsAtom, historyStateAtom } from '../core/history-store';\nimport { showToastAtom } from '../core/toast-store';\n/**\n * Hook for undo/redo functionality.\n *\n * @example\n * ```tsx\n * function CanvasToolbar() {\n * const { undo, redo, canUndo, canRedo, recordSnapshot } = useCanvasHistory();\n *\n * // Before making changes, record a snapshot:\n * const handleAddNode = () => {\n * recordSnapshot('Add node');\n * addNode({ ... });\n * };\n *\n * return (\n * <>\n * \n * \n * \n * );\n * }\n * ```\n */\nexport function useCanvasHistory(t0) {\n const $ = _c(22);\n const options = t0 === undefined ? {} : t0;\n const {\n enableKeyboardShortcuts: t1\n } = options;\n t1 === undefined ? false : t1;\n const canUndo = useAtomValue(canUndoAtom);\n const canRedo = useAtomValue(canRedoAtom);\n const undoCount = useAtomValue(undoCountAtom);\n const redoCount = useAtomValue(redoCountAtom);\n const historyLabels = useAtomValue(historyLabelsAtom);\n const undoAction = useSetAtom(undoAtom);\n const redoAction = useSetAtom(redoAtom);\n const pushHistory = useSetAtom(pushHistoryAtom);\n const clearHistory = useSetAtom(clearHistoryAtom);\n const showToast = useSetAtom(showToastAtom);\n const store = useStore();\n let t2;\n if ($[0] !== showToast || $[1] !== store || $[2] !== undoAction) {\n t2 = () => {\n const state = store.get(historyStateAtom);\n const label = state.past[state.past.length - 1]?.label;\n const result = undoAction();\n if (result && label) {\n showToast(`Undo: ${label}`);\n }\n return result;\n };\n $[0] = showToast;\n $[1] = store;\n $[2] = undoAction;\n $[3] = t2;\n } else {\n t2 = $[3];\n }\n const undo = t2;\n let t3;\n if ($[4] !== redoAction || $[5] !== showToast || $[6] !== store) {\n t3 = () => {\n const state_0 = store.get(historyStateAtom);\n const label_0 = state_0.future[0]?.label;\n const result_0 = redoAction();\n if (result_0 && label_0) {\n showToast(`Redo: ${label_0}`);\n }\n return result_0;\n };\n $[4] = redoAction;\n $[5] = showToast;\n $[6] = store;\n $[7] = t3;\n } else {\n t3 = $[7];\n }\n const redo = t3;\n let t4;\n if ($[8] !== pushHistory) {\n t4 = label_1 => {\n pushHistory(label_1);\n };\n $[8] = pushHistory;\n $[9] = t4;\n } else {\n t4 = $[9];\n }\n const recordSnapshot = t4;\n let t5;\n if ($[10] !== clearHistory) {\n t5 = () => {\n clearHistory();\n };\n $[10] = clearHistory;\n $[11] = t5;\n } else {\n t5 = $[11];\n }\n const clear = t5;\n let t6;\n if ($[12] !== canRedo || $[13] !== canUndo || $[14] !== clear || $[15] !== historyLabels || $[16] !== recordSnapshot || $[17] !== redo || $[18] !== redoCount || $[19] !== undo || $[20] !== undoCount) {\n t6 = {\n undo,\n redo,\n canUndo,\n canRedo,\n undoCount,\n redoCount,\n historyLabels,\n recordSnapshot,\n clear\n };\n $[12] = canRedo;\n $[13] = canUndo;\n $[14] = clear;\n $[15] = historyLabels;\n $[16] = recordSnapshot;\n $[17] = redo;\n $[18] = redoCount;\n $[19] = undo;\n $[20] = undoCount;\n $[21] = t6;\n } else {\n t6 = $[21];\n }\n return t6;\n}","import { c as _c } from \"react/compiler-runtime\";\n/**\n * Canvas Selection Subscription Hook\n *\n * Provides reactive access to canvas selection state.\n * Use this to respond to selection changes in your components.\n *\n * @since 0.2.0\n * @example\n * ```tsx\n * function SelectionInfo() {\n * const { selectedNodeIds, selectedEdgeId, hasSelection } = useCanvasSelection();\n * return
Selected: {selectedNodeIds.size} nodes
;\n * }\n * ```\n */\n\nimport { useAtomValue } from 'jotai';\nimport { selectedNodeIdsAtom, selectedEdgeIdAtom, selectedNodesCountAtom, hasSelectionAtom } from '../core/selection-store';\n/**\n * Subscribe to canvas selection state.\n *\n * This hook provides a convenient way to access selection state\n * without needing to know which atoms to import. All returned values\n * are reactive and will trigger re-renders when selection changes.\n */\nexport function useCanvasSelection() {\n const $ = _c(6);\n const selectedNodeIds = useAtomValue(selectedNodeIdsAtom);\n const selectedEdgeId = useAtomValue(selectedEdgeIdAtom);\n const count = useAtomValue(selectedNodesCountAtom);\n const hasSelection = useAtomValue(hasSelectionAtom);\n const t0 = selectedEdgeId !== null;\n let t1;\n if ($[0] !== count || $[1] !== hasSelection || $[2] !== selectedEdgeId || $[3] !== selectedNodeIds || $[4] !== t0) {\n t1 = {\n selectedNodeIds,\n selectedEdgeId,\n count,\n hasSelection,\n hasEdgeSelection: t0\n };\n $[0] = count;\n $[1] = hasSelection;\n $[2] = selectedEdgeId;\n $[3] = selectedNodeIds;\n $[4] = t0;\n $[5] = t1;\n } else {\n t1 = $[5];\n }\n return t1;\n}","import { c as _c } from \"react/compiler-runtime\";\n/**\n * Canvas Viewport Subscription Hook\n *\n * Provides reactive access to canvas viewport state (pan, zoom).\n * Use this to respond to viewport changes in your components.\n *\n * @example\n * ```tsx\n * function ZoomIndicator() {\n * const { zoom, pan } = useCanvasViewport();\n * return
Zoom: {Math.round(zoom * 100)}%
;\n * }\n * ```\n */\n\nimport { useAtomValue } from 'jotai';\nimport { zoomAtom, panAtom, viewportRectAtom, screenToWorldAtom, worldToScreenAtom, zoomFocusNodeIdAtom, zoomTransitionProgressAtom, isZoomTransitioningAtom, ZOOM_TRANSITION_THRESHOLD, ZOOM_EXIT_THRESHOLD } from '../core/viewport-store';\n/**\n * Subscribe to canvas viewport state.\n *\n * This hook provides a convenient way to access viewport state\n * without needing to know which atoms to import.\n */\nexport function useCanvasViewport() {\n const $ = _c(9);\n const zoom = useAtomValue(zoomAtom);\n const pan = useAtomValue(panAtom);\n const viewportRect = useAtomValue(viewportRectAtom);\n const screenToWorld = useAtomValue(screenToWorldAtom);\n const worldToScreen = useAtomValue(worldToScreenAtom);\n const zoomFocusNodeId = useAtomValue(zoomFocusNodeIdAtom);\n const zoomTransitionProgress = useAtomValue(zoomTransitionProgressAtom);\n const isZoomTransitioning = useAtomValue(isZoomTransitioningAtom);\n let t0;\n if ($[0] !== isZoomTransitioning || $[1] !== pan || $[2] !== screenToWorld || $[3] !== viewportRect || $[4] !== worldToScreen || $[5] !== zoom || $[6] !== zoomFocusNodeId || $[7] !== zoomTransitionProgress) {\n t0 = {\n zoom,\n pan,\n viewportRect,\n screenToWorld,\n worldToScreen,\n zoomFocusNodeId,\n zoomTransitionProgress,\n isZoomTransitioning,\n zoomTransitionThreshold: ZOOM_TRANSITION_THRESHOLD,\n zoomExitThreshold: ZOOM_EXIT_THRESHOLD\n };\n $[0] = isZoomTransitioning;\n $[1] = pan;\n $[2] = screenToWorld;\n $[3] = viewportRect;\n $[4] = worldToScreen;\n $[5] = zoom;\n $[6] = zoomFocusNodeId;\n $[7] = zoomTransitionProgress;\n $[8] = t0;\n } else {\n t0 = $[8];\n }\n return t0;\n}","import { c as _c } from \"react/compiler-runtime\";\n/**\n * Canvas Drag Subscription Hook\n *\n * Provides reactive access to canvas drag state.\n * Use this to respond to drag operations in your components.\n *\n * @example\n * ```tsx\n * function DragIndicator() {\n * const { isDragging, draggingNodeId } = useCanvasDrag();\n * if (!isDragging) return null;\n * return
Dragging: {draggingNodeId}
;\n * }\n * ```\n */\n\nimport { useAtomValue } from 'jotai';\nimport { draggingNodeIdAtom } from '../core/graph-store';\n/**\n * Subscribe to canvas drag state.\n *\n * This hook provides a convenient way to access drag state\n * without needing to know which atoms to import.\n */\nexport function useCanvasDrag() {\n const $ = _c(3);\n const draggingNodeId = useAtomValue(draggingNodeIdAtom);\n const t0 = draggingNodeId !== null;\n let t1;\n if ($[0] !== draggingNodeId || $[1] !== t0) {\n t1 = {\n draggingNodeId,\n isDragging: t0\n };\n $[0] = draggingNodeId;\n $[1] = t0;\n $[2] = t1;\n } else {\n t1 = $[2];\n }\n return t1;\n}","import { c as _c } from \"react/compiler-runtime\";\n/**\n * Layout hooks for viewport manipulation.\n *\n * Provides fit-to-bounds, graph bounds calculation, and layout utilities.\n * The core fitToBounds logic lives in viewport-store.ts (headless atom).\n */\n\nimport { useAtomValue, useSetAtom } from 'jotai';\nimport { graphAtom } from '../core/graph-store';\nimport { nodePositionUpdateCounterAtom } from '../core/graph-position';\nimport { uiNodesAtom } from '../core/graph-derived';\nimport { fitToBoundsAtom } from '../core/viewport-store';\nimport { selectedNodeIdsAtom } from '../core/selection-store';\nimport { calculateBounds } from '../utils/layout';\n\n// Re-export for convenience\nexport { FitToBoundsMode } from '../utils/layout';\nexport const useGetGraphBounds = () => {\n const $ = _c(6);\n const graph = useAtomValue(graphAtom);\n useAtomValue(nodePositionUpdateCounterAtom);\n let nodes;\n let t0;\n if ($[0] !== graph) {\n nodes = graph.nodes().map(node => {\n const nodeAttributes = graph.getNodeAttributes(node);\n return {\n x: nodeAttributes.x,\n y: nodeAttributes.y,\n width: nodeAttributes.width || 500,\n height: nodeAttributes.height || 500\n };\n });\n t0 = calculateBounds(nodes);\n $[0] = graph;\n $[1] = nodes;\n $[2] = t0;\n } else {\n nodes = $[1];\n t0 = $[2];\n }\n const bounds = t0;\n let t1;\n if ($[3] !== bounds || $[4] !== nodes) {\n t1 = {\n bounds,\n nodes\n };\n $[3] = bounds;\n $[4] = nodes;\n $[5] = t1;\n } else {\n t1 = $[5];\n }\n return t1;\n};\nexport const useSelectionBounds = () => {\n const $ = _c(5);\n const selectedNodeIds = useAtomValue(selectedNodeIdsAtom);\n const nodes = useAtomValue(uiNodesAtom);\n let t0;\n if ($[0] !== nodes || $[1] !== selectedNodeIds) {\n let t1;\n if ($[3] !== selectedNodeIds) {\n t1 = node => selectedNodeIds.has(node.id);\n $[3] = selectedNodeIds;\n $[4] = t1;\n } else {\n t1 = $[4];\n }\n const selectedNodes = nodes.filter(t1).map(_temp);\n t0 = calculateBounds(selectedNodes);\n $[0] = nodes;\n $[1] = selectedNodeIds;\n $[2] = t0;\n } else {\n t0 = $[2];\n }\n return t0;\n};\n\n/**\n * Hook to fit the viewport to show specific bounds.\n * Delegates to fitToBoundsAtom (headless, no React required).\n */\nexport const useFitToBounds = () => {\n const $ = _c(2);\n const setFitToBounds = useSetAtom(fitToBoundsAtom);\n let t0;\n if ($[0] !== setFitToBounds) {\n const fitToBounds = (mode, t1) => {\n const padding = t1 === undefined ? 20 : t1;\n setFitToBounds({\n mode,\n padding\n });\n };\n t0 = {\n fitToBounds\n };\n $[0] = setFitToBounds;\n $[1] = t0;\n } else {\n t0 = $[1];\n }\n return t0;\n};\n\n/**\n * Combined layout hook providing all layout utilities.\n *\n * @returns Object with fitToBounds and graph bounds utilities\n *\n * @example\n * const { fitToBounds, graphBounds, selectionBounds } = useLayout();\n *\n * // After modifying nodes:\n * fitToBounds(FitToBoundsMode.Graph, 50);\n */\nexport const useLayout = () => {\n const $ = _c(5);\n const {\n fitToBounds\n } = useFitToBounds();\n const {\n bounds: graphBounds,\n nodes: graphNodes\n } = useGetGraphBounds();\n const selectionBounds = useSelectionBounds();\n let t0;\n if ($[0] !== fitToBounds || $[1] !== graphBounds || $[2] !== graphNodes || $[3] !== selectionBounds) {\n t0 = {\n fitToBounds,\n graphBounds,\n graphNodes,\n selectionBounds\n };\n $[0] = fitToBounds;\n $[1] = graphBounds;\n $[2] = graphNodes;\n $[3] = selectionBounds;\n $[4] = t0;\n } else {\n t0 = $[4];\n }\n return t0;\n};\nfunction _temp(node_0) {\n return {\n x: node_0.position.x,\n y: node_0.position.y,\n width: node_0.width ?? 500,\n height: node_0.height ?? 500\n };\n}","/**\n * Force-directed layout hook.\n *\n * Uses D3 force simulation to arrange nodes without overlap.\n * Storage-agnostic: accepts optional persistence callback.\n */\n\nimport * as d3 from 'd3-force';\nimport { useAtomValue, useSetAtom } from 'jotai';\nimport { useRef } from 'react';\nimport { graphAtom } from '../core/graph-store';\nimport { updateNodePositionAtom } from '../core/graph-position';\nimport { uiNodesAtom } from '../core/graph-derived';\nimport { checkNodesOverlap } from '../utils/layout';\nimport { createDebug } from '../utils/debug';\nconst debug = createDebug('force-layout');\n\n/**\n * Position update for a single node (used in persistence callback)\n */\n\n/**\n * Options for the force layout\n */\n\n/**\n * Hook to apply force-directed layout to canvas nodes.\n *\n * @param options - Configuration options including persistence callback\n * @returns Object with applyForceLayout function and isRunning state\n *\n * @example\n * // Basic usage (no persistence)\n * const { applyForceLayout } = useForceLayout();\n * await applyForceLayout();\n *\n * @example\n * // With database persistence\n * const { applyForceLayout } = useForceLayout({\n * onPositionsChanged: async (updates) => {\n * for (const { nodeId, position } of updates) {\n * await saveNodePosition(nodeId, position);\n * }\n * }\n * });\n */\nexport const useForceLayout = (options = {}) => {\n const {\n onPositionsChanged,\n maxIterations = 1000,\n chargeStrength = -6000,\n linkStrength = 0.03\n } = options;\n const nodes = useAtomValue(uiNodesAtom);\n const graph = useAtomValue(graphAtom);\n const updateNodePosition = useSetAtom(updateNodePositionAtom);\n const isRunningRef = useRef(false);\n\n // Create virtual links in a mesh pattern for better spreading\n const createVirtualLinks = () => {\n const links = [];\n for (let i = 0; i < nodes.length; i++) {\n // Connect to next few nodes (wrapping around)\n for (let j = 1; j <= 3; j++) {\n const targetIndex = (i + j) % nodes.length;\n links.push({\n source: nodes[i].id,\n target: nodes[targetIndex].id,\n strength: 0.05 // Very weak connection\n });\n }\n }\n return links;\n };\n const applyForceLayout = async () => {\n if (isRunningRef.current) {\n debug.warn('Layout already running, ignoring request.');\n return;\n }\n if (nodes.length === 0) {\n debug.warn('No nodes to layout.');\n return;\n }\n isRunningRef.current = true;\n\n // Create simulation nodes with size information\n const simulationNodes = nodes.map(node => {\n const width = node.width || 80;\n const height = node.height || 80;\n return {\n id: node.id,\n x: node.position?.x || 0,\n y: node.position?.y || 0,\n width,\n height,\n radius: Math.max(width, height) + 80\n };\n });\n\n // Create force simulation\n const simulation = d3.forceSimulation(simulationNodes).force('charge', d3.forceManyBody().strength(chargeStrength).distanceMax(900)).force('collide', d3.forceCollide().radius(d => d.radius).strength(2).iterations(8)).force('link', d3.forceLink(createVirtualLinks()).id(d_0 => d_0.id).strength(linkStrength)).force('center', d3.forceCenter(0, 0)).stop(); // Stop initially, tick manually\n\n debug('Starting simulation...');\n return new Promise(resolve => {\n let iterations = 0;\n function runSimulationStep() {\n if (iterations >= maxIterations) {\n debug('Reached max iterations (%d), finalizing.', maxIterations);\n finalizeLayout();\n return;\n }\n simulation.tick();\n iterations++;\n\n // Check for overlaps\n let hasOverlaps = false;\n for (let i_0 = 0; i_0 < simulationNodes.length; i_0++) {\n for (let j_0 = i_0 + 1; j_0 < simulationNodes.length; j_0++) {\n if (checkNodesOverlap(simulationNodes[i_0], simulationNodes[j_0])) {\n hasOverlaps = true;\n break;\n }\n }\n if (hasOverlaps) break;\n }\n if (!hasOverlaps) {\n debug('No overlaps after %d iterations.', iterations);\n finalizeLayout();\n return;\n }\n\n // Schedule next step\n requestAnimationFrame(runSimulationStep);\n }\n function finalizeLayout() {\n // Collect all position updates\n const positionUpdates = [];\n simulationNodes.forEach(simNode => {\n if (graph.hasNode(simNode.id)) {\n const newPosition = {\n x: Math.round(simNode.x),\n y: Math.round(simNode.y)\n };\n\n // Update local position immediately\n updateNodePosition({\n nodeId: simNode.id,\n position: newPosition\n });\n positionUpdates.push({\n nodeId: simNode.id,\n position: newPosition\n });\n }\n });\n\n // Call persistence callback if provided\n if (onPositionsChanged && positionUpdates.length > 0) {\n debug('Saving %d positions via callback...', positionUpdates.length);\n Promise.resolve(onPositionsChanged(positionUpdates)).then(() => debug('Positions saved successfully.')).catch(err => debug.error('Error saving positions: %O', err));\n }\n debug('Layout complete.');\n isRunningRef.current = false;\n resolve();\n }\n\n // Start the simulation\n requestAnimationFrame(runSimulationStep);\n });\n };\n return {\n applyForceLayout,\n isRunning: isRunningRef.current\n };\n};","import { c as _c } from \"react/compiler-runtime\";\n/**\n * useCanvasSettings Hook\n *\n * Main hook for managing canvas settings (event-action mappings and presets).\n * Provides both read access to settings and methods to modify them.\n */\n\nimport { useAtomValue, useSetAtom } from 'jotai';\nimport { eventMappingsAtom, activePresetIdAtom, activePresetAtom, allPresetsAtom, hasUnsavedChangesAtom, isPanelOpenAtom, setEventMappingAtom, applyPresetAtom, saveAsPresetAtom, updatePresetAtom, deletePresetAtom, resetSettingsAtom, togglePanelAtom, setPanelOpenAtom, getActionForEvent } from '../core/settings-store';\n\n// =============================================================================\n// Hook Return Type\n// =============================================================================\n\n// =============================================================================\n// Hook Implementation\n// =============================================================================\n\n/**\n * Hook for managing canvas event-action settings.\n *\n * @example\n * ```tsx\n * function CanvasSettingsButton() {\n * const {\n * isPanelOpen,\n * togglePanel,\n * activePreset,\n * hasUnsavedChanges,\n * } = useCanvasSettings();\n *\n * return (\n * \n * );\n * }\n * ```\n *\n * @example\n * ```tsx\n * function PresetSelector() {\n * const { allPresets, activePresetId, applyPreset } = useCanvasSettings();\n *\n * return (\n * applyPreset(e.target.value)}\n * >\n * {allPresets.map((preset) => (\n * \n * ))}\n * \n * );\n * }\n * ```\n */\nexport function useCanvasSettings() {\n const $ = _c(34);\n const mappings = useAtomValue(eventMappingsAtom);\n const activePresetId = useAtomValue(activePresetIdAtom);\n const activePreset = useAtomValue(activePresetAtom);\n const allPresets = useAtomValue(allPresetsAtom);\n const hasUnsavedChanges = useAtomValue(hasUnsavedChangesAtom);\n const isPanelOpen = useAtomValue(isPanelOpenAtom);\n const setEventMappingAction = useSetAtom(setEventMappingAtom);\n const applyPresetAction = useSetAtom(applyPresetAtom);\n const saveAsPresetAction = useSetAtom(saveAsPresetAtom);\n const updatePresetAction = useSetAtom(updatePresetAtom);\n const deletePresetAction = useSetAtom(deletePresetAtom);\n const resetSettingsAction = useSetAtom(resetSettingsAtom);\n const togglePanelAction = useSetAtom(togglePanelAtom);\n const setPanelOpenAction = useSetAtom(setPanelOpenAtom);\n let t0;\n if ($[0] !== setEventMappingAction) {\n t0 = (event, actionId) => {\n setEventMappingAction({\n event,\n actionId\n });\n };\n $[0] = setEventMappingAction;\n $[1] = t0;\n } else {\n t0 = $[1];\n }\n const setEventMapping = t0;\n let t1;\n if ($[2] !== applyPresetAction) {\n t1 = presetId => {\n applyPresetAction(presetId);\n };\n $[2] = applyPresetAction;\n $[3] = t1;\n } else {\n t1 = $[3];\n }\n const applyPreset = t1;\n let t2;\n if ($[4] !== saveAsPresetAction) {\n t2 = (name, description) => saveAsPresetAction({\n name,\n description\n });\n $[4] = saveAsPresetAction;\n $[5] = t2;\n } else {\n t2 = $[5];\n }\n const saveAsPreset = t2;\n let t3;\n if ($[6] !== updatePresetAction) {\n t3 = presetId_0 => {\n updatePresetAction(presetId_0);\n };\n $[6] = updatePresetAction;\n $[7] = t3;\n } else {\n t3 = $[7];\n }\n const updatePreset = t3;\n let t4;\n if ($[8] !== deletePresetAction) {\n t4 = presetId_1 => {\n deletePresetAction(presetId_1);\n };\n $[8] = deletePresetAction;\n $[9] = t4;\n } else {\n t4 = $[9];\n }\n const deletePreset = t4;\n let t5;\n if ($[10] !== resetSettingsAction) {\n t5 = () => {\n resetSettingsAction();\n };\n $[10] = resetSettingsAction;\n $[11] = t5;\n } else {\n t5 = $[11];\n }\n const resetSettings = t5;\n let t6;\n if ($[12] !== togglePanelAction) {\n t6 = () => {\n togglePanelAction();\n };\n $[12] = togglePanelAction;\n $[13] = t6;\n } else {\n t6 = $[13];\n }\n const togglePanel = t6;\n let t7;\n if ($[14] !== setPanelOpenAction) {\n t7 = isOpen => {\n setPanelOpenAction(isOpen);\n };\n $[14] = setPanelOpenAction;\n $[15] = t7;\n } else {\n t7 = $[15];\n }\n const setPanelOpen = t7;\n let t8;\n if ($[16] !== mappings) {\n t8 = event_0 => getActionForEvent(mappings, event_0);\n $[16] = mappings;\n $[17] = t8;\n } else {\n t8 = $[17];\n }\n const getActionForEventFn = t8;\n let t9;\n if ($[18] !== activePreset || $[19] !== activePresetId || $[20] !== allPresets || $[21] !== applyPreset || $[22] !== deletePreset || $[23] !== getActionForEventFn || $[24] !== hasUnsavedChanges || $[25] !== isPanelOpen || $[26] !== mappings || $[27] !== resetSettings || $[28] !== saveAsPreset || $[29] !== setEventMapping || $[30] !== setPanelOpen || $[31] !== togglePanel || $[32] !== updatePreset) {\n t9 = {\n mappings,\n activePresetId,\n activePreset,\n allPresets,\n hasUnsavedChanges,\n isPanelOpen,\n setEventMapping,\n applyPreset,\n saveAsPreset,\n updatePreset,\n deletePreset,\n resetSettings,\n togglePanel,\n setPanelOpen,\n getActionForEvent: getActionForEventFn\n };\n $[18] = activePreset;\n $[19] = activePresetId;\n $[20] = allPresets;\n $[21] = applyPreset;\n $[22] = deletePreset;\n $[23] = getActionForEventFn;\n $[24] = hasUnsavedChanges;\n $[25] = isPanelOpen;\n $[26] = mappings;\n $[27] = resetSettings;\n $[28] = saveAsPreset;\n $[29] = setEventMapping;\n $[30] = setPanelOpen;\n $[31] = togglePanel;\n $[32] = updatePreset;\n $[33] = t9;\n } else {\n t9 = $[33];\n }\n return t9;\n}","import { c as _c } from \"react/compiler-runtime\";\n/**\n * useActionExecutor Hook\n *\n * React wrapper around buildActionHelpers for convenient hook-based usage.\n * The core logic lives in action-executor.ts (headless, no React).\n */\n\nimport { useAtomValue, useStore } from 'jotai';\n\n// Types\n\nimport { executeAction, buildActionHelpers } from '../core/action-executor';\nimport { eventMappingsAtom, getActionForEvent } from '../core/settings-store';\n\n// =============================================================================\n// Hook Options\n// =============================================================================\n\n// =============================================================================\n// Hook Return Type\n// =============================================================================\n\n// =============================================================================\n// Hook Implementation\n// =============================================================================\n\nexport function useActionExecutor(t0) {\n const $ = _c(13);\n const options = t0 === undefined ? {} : t0;\n const store = useStore();\n const mappings = useAtomValue(eventMappingsAtom);\n const helpers = buildActionHelpers(store, {\n onDeleteNode: options.onDeleteNode,\n onOpenContextMenu: options.onOpenContextMenu,\n onCreateNode: options.onCreateNode,\n onApplyForceLayout: options.onApplyForceLayout\n });\n let t1;\n if ($[0] !== helpers) {\n t1 = async (actionId, context) => executeAction(actionId, context, helpers);\n $[0] = helpers;\n $[1] = t1;\n } else {\n t1 = $[1];\n }\n const executeActionById = t1;\n let t2;\n if ($[2] !== helpers || $[3] !== mappings) {\n t2 = async (event, context_0) => {\n const actionId_0 = getActionForEvent(mappings, event);\n return executeAction(actionId_0, context_0, helpers);\n };\n $[2] = helpers;\n $[3] = mappings;\n $[4] = t2;\n } else {\n t2 = $[4];\n }\n const executeEventAction = t2;\n let t3;\n if ($[5] !== mappings) {\n t3 = event_0 => getActionForEvent(mappings, event_0);\n $[5] = mappings;\n $[6] = t3;\n } else {\n t3 = $[6];\n }\n const getActionForEventFn = t3;\n let t4;\n if ($[7] !== executeActionById || $[8] !== executeEventAction || $[9] !== getActionForEventFn || $[10] !== helpers || $[11] !== mappings) {\n t4 = {\n executeActionById,\n executeEventAction,\n getActionForEvent: getActionForEventFn,\n mappings,\n helpers\n };\n $[7] = executeActionById;\n $[8] = executeEventAction;\n $[9] = getActionForEventFn;\n $[10] = helpers;\n $[11] = mappings;\n $[12] = t4;\n } else {\n t4 = $[12];\n }\n return t4;\n}","import { c as _c } from \"react/compiler-runtime\";\n/**\n * useGestureResolver Hook\n *\n * Convenience hook that provides a bound `resolve(descriptor)` function\n * using the gesture rules and palm rejection settings from the store.\n */\n\nimport { useAtomValue } from 'jotai';\nimport { resolveGestureIndexed } from '../core/gesture-rules';\nimport { gestureRuleIndexAtom, palmRejectionEnabledAtom } from '../core/gesture-rule-store';\nimport { isStylusActiveAtom } from '../core/input-store';\n\n/**\n * Returns a `resolve` function that resolves gesture descriptors against\n * the current rule set, with palm rejection and stylus awareness built in.\n *\n * Usage:\n * ```tsx\n * const resolve = useGestureResolver();\n * const result = resolve({ gesture: 'drag', target: 'node', source: 'mouse' });\n * if (result?.actionId === 'move-node') { ... }\n * ```\n */\nexport function useGestureResolver() {\n const $ = _c(4);\n const index = useAtomValue(gestureRuleIndexAtom);\n const palmRejection = useAtomValue(palmRejectionEnabledAtom);\n const isStylusActive = useAtomValue(isStylusActiveAtom);\n let t0;\n if ($[0] !== index || $[1] !== isStylusActive || $[2] !== palmRejection) {\n t0 = desc => resolveGestureIndexed({\n ...desc,\n isStylusActive: desc.isStylusActive ?? isStylusActive\n }, index, {\n palmRejection\n });\n $[0] = index;\n $[1] = isStylusActive;\n $[2] = palmRejection;\n $[3] = t0;\n } else {\n t0 = $[3];\n }\n return t0;\n}","/**\n * useCommandLine Hook\n *\n * Main hook for managing command line state and actions.\n * Provides access to visibility, state, history, and actions.\n */\n\n'use client';\n\nimport { c as _c } from \"react/compiler-runtime\";\nimport { useAtomValue, useSetAtom } from 'jotai';\nimport { commandLineVisibleAtom, commandLineStateAtom, openCommandLineAtom, closeCommandLineAtom, updateSearchQueryAtom, selectCommandAtom, commandHistoryAtom, currentInputAtom, commandProgressAtom } from '../commands/store';\nimport { commandRegistry } from '../commands/registry';\n\n/**\n * Hook to manage command line state and actions.\n *\n * @example\n * ```tsx\n * function CommandLineToggle() {\n * const { visible, open, close } = useCommandLine();\n *\n * return (\n * \n * );\n * }\n * ```\n */\nexport function useCommandLine() {\n const $ = _c(16);\n const visible = useAtomValue(commandLineVisibleAtom);\n const state = useAtomValue(commandLineStateAtom);\n const history = useAtomValue(commandHistoryAtom);\n const currentInput = useAtomValue(currentInputAtom);\n const progress = useAtomValue(commandProgressAtom);\n const open = useSetAtom(openCommandLineAtom);\n const close = useSetAtom(closeCommandLineAtom);\n const updateQuery = useSetAtom(updateSearchQueryAtom);\n const selectCommand = useSetAtom(selectCommandAtom);\n const t0 = state.phase === \"searching\";\n const t1 = state.phase === \"collecting\";\n const t2 = state.phase === \"executing\";\n const t3 = state.phase === \"error\";\n const t4 = state.phase === \"error\" ? state.message : null;\n let t5;\n if ($[0] === Symbol.for(\"react.memo_cache_sentinel\")) {\n t5 = commandRegistry.all();\n $[0] = t5;\n } else {\n t5 = $[0];\n }\n let t6;\n if ($[1] !== close || $[2] !== currentInput || $[3] !== history || $[4] !== open || $[5] !== progress || $[6] !== selectCommand || $[7] !== state || $[8] !== t0 || $[9] !== t1 || $[10] !== t2 || $[11] !== t3 || $[12] !== t4 || $[13] !== updateQuery || $[14] !== visible) {\n t6 = {\n visible,\n state,\n history,\n currentInput,\n progress,\n open,\n close,\n updateQuery,\n selectCommand,\n isSearching: t0,\n isCollecting: t1,\n isExecuting: t2,\n hasError: t3,\n errorMessage: t4,\n allCommands: t5,\n searchCommands: _temp\n };\n $[1] = close;\n $[2] = currentInput;\n $[3] = history;\n $[4] = open;\n $[5] = progress;\n $[6] = selectCommand;\n $[7] = state;\n $[8] = t0;\n $[9] = t1;\n $[10] = t2;\n $[11] = t3;\n $[12] = t4;\n $[13] = updateQuery;\n $[14] = visible;\n $[15] = t6;\n } else {\n t6 = $[15];\n }\n return t6;\n}\nfunction _temp(query) {\n return commandRegistry.search(query);\n}","/**\n * Command Store — Action Atoms\n *\n * Action atoms and helper functions for managing the command line.\n * Core state atoms are in ./store-atoms.ts.\n */\n\nimport { atom } from 'jotai';\nimport { commandRegistry } from './registry';\n\n// Re-export all state atoms for backward compat\nexport { inputModeAtom, commandLineVisibleAtom, commandLineStateAtom, commandFeedbackAtom, commandHistoryAtom, selectedSuggestionIndexAtom, pendingInputResolverAtom, isCommandActiveAtom, currentInputAtom, commandProgressAtom } from './store-atoms';\n\n// Import for internal use\nimport { inputModeAtom, commandLineVisibleAtom, commandLineStateAtom, commandFeedbackAtom, commandHistoryAtom, selectedSuggestionIndexAtom, pendingInputResolverAtom } from './store-atoms';\n\n// =============================================================================\n// Action Atoms\n// =============================================================================\n\n/**\n * Open the command line and enter search mode.\n */\nexport const openCommandLineAtom = atom(null, (get, set) => {\n set(commandLineVisibleAtom, true);\n set(commandLineStateAtom, {\n phase: 'searching',\n query: '',\n suggestions: commandRegistry.all()\n });\n set(selectedSuggestionIndexAtom, 0);\n});\n\n/**\n * Close the command line and reset state.\n */\nexport const closeCommandLineAtom = atom(null, (get, set) => {\n set(commandLineVisibleAtom, false);\n set(commandLineStateAtom, {\n phase: 'idle'\n });\n set(inputModeAtom, {\n type: 'normal'\n });\n set(commandFeedbackAtom, null);\n set(pendingInputResolverAtom, null);\n});\n\n/**\n * Update search query and suggestions.\n */\nexport const updateSearchQueryAtom = atom(null, (get, set, query) => {\n const suggestions = commandRegistry.search(query);\n set(commandLineStateAtom, {\n phase: 'searching',\n query,\n suggestions\n });\n set(selectedSuggestionIndexAtom, 0); // Reset selection on query change\n});\n\n/**\n * Select a command and start collecting inputs.\n */\nexport const selectCommandAtom = atom(null, (get, set, command) => {\n // Add to history\n const history = get(commandHistoryAtom);\n const newHistory = [command.name, ...history.filter(h => h !== command.name)].slice(0, 50);\n set(commandHistoryAtom, newHistory);\n\n // If command has no inputs, execute immediately\n if (command.inputs.length === 0) {\n set(commandLineStateAtom, {\n phase: 'executing',\n command\n });\n return;\n }\n\n // Start collecting inputs\n set(commandLineStateAtom, {\n phase: 'collecting',\n command,\n inputIndex: 0,\n collected: {}\n });\n\n // Set input mode for first input\n const firstInput = command.inputs[0];\n set(inputModeAtom, inputDefToMode(firstInput));\n});\n\n/**\n * Provide a value for the current input and advance to next.\n */\nexport const provideInputAtom = atom(null, (get, set, value) => {\n const state = get(commandLineStateAtom);\n if (state.phase !== 'collecting') return;\n const {\n command,\n inputIndex,\n collected\n } = state;\n const currentInput = command.inputs[inputIndex];\n\n // Validate if validator exists\n if (currentInput.validate) {\n const result = currentInput.validate(value, collected);\n if (result !== true) {\n set(commandLineStateAtom, {\n phase: 'error',\n message: typeof result === 'string' ? result : `Invalid value for ${currentInput.name}`\n });\n return;\n }\n }\n\n // Add to collected inputs\n const newCollected = {\n ...collected,\n [currentInput.name]: value\n };\n\n // Check if there are more inputs\n if (inputIndex < command.inputs.length - 1) {\n const nextInputIndex = inputIndex + 1;\n const nextInput = command.inputs[nextInputIndex];\n set(commandLineStateAtom, {\n phase: 'collecting',\n command,\n inputIndex: nextInputIndex,\n collected: newCollected\n });\n\n // Set input mode for next input\n set(inputModeAtom, inputDefToMode(nextInput, newCollected));\n\n // Update feedback\n if (command.feedback) {\n const feedback = command.feedback(newCollected, nextInput);\n if (feedback) {\n // Convert CommandFeedback to FeedbackState\n const feedbackState = {\n hoveredNodeId: feedback.highlightNodeId,\n ghostNode: feedback.ghostNode,\n crosshair: feedback.crosshair,\n // Handle previewEdge conversion - toCursor variant needs cursorWorldPos\n previewEdge: feedback.previewEdge && 'to' in feedback.previewEdge ? {\n from: feedback.previewEdge.from,\n to: feedback.previewEdge.to\n } : undefined\n };\n set(commandFeedbackAtom, feedbackState);\n } else {\n set(commandFeedbackAtom, null);\n }\n }\n } else {\n // All inputs collected, ready to execute\n set(commandLineStateAtom, {\n phase: 'collecting',\n command,\n inputIndex: inputIndex,\n collected: newCollected\n });\n\n // Signal that we're ready to execute (the executor will handle this)\n set(inputModeAtom, {\n type: 'normal'\n });\n }\n});\n\n/**\n * Skip the current optional input and use default value.\n */\nexport const skipInputAtom = atom(null, (get, set) => {\n const state = get(commandLineStateAtom);\n if (state.phase !== 'collecting') return;\n const {\n command,\n inputIndex\n } = state;\n const currentInput = command.inputs[inputIndex];\n\n // Can only skip optional inputs\n if (currentInput.required !== false) {\n return;\n }\n\n // Use default value\n const value = currentInput.default;\n set(provideInputAtom, value);\n});\n\n/**\n * Go back to the previous input.\n */\nexport const goBackInputAtom = atom(null, (get, set) => {\n const state = get(commandLineStateAtom);\n if (state.phase !== 'collecting') return;\n const {\n command,\n inputIndex,\n collected\n } = state;\n if (inputIndex === 0) {\n // Go back to search\n set(commandLineStateAtom, {\n phase: 'searching',\n query: command.name,\n suggestions: [command]\n });\n set(inputModeAtom, {\n type: 'normal'\n });\n return;\n }\n\n // Go to previous input\n const prevInputIndex = inputIndex - 1;\n const prevInput = command.inputs[prevInputIndex];\n\n // Remove the previous value from collected\n const newCollected = {\n ...collected\n };\n delete newCollected[prevInput.name];\n set(commandLineStateAtom, {\n phase: 'collecting',\n command,\n inputIndex: prevInputIndex,\n collected: newCollected\n });\n set(inputModeAtom, inputDefToMode(prevInput, newCollected));\n});\n\n/**\n * Set error state.\n */\nexport const setCommandErrorAtom = atom(null, (get, set, message) => {\n set(commandLineStateAtom, {\n phase: 'error',\n message\n });\n set(inputModeAtom, {\n type: 'normal'\n });\n});\n\n/**\n * Clear error and go back to idle.\n */\nexport const clearCommandErrorAtom = atom(null, (get, set) => {\n set(commandLineStateAtom, {\n phase: 'idle'\n });\n});\n\n// =============================================================================\n// Helper Functions\n// =============================================================================\n\n/**\n * Convert an InputDefinition to an InputMode.\n */\nfunction inputDefToMode(input, collected) {\n switch (input.type) {\n case 'point':\n return {\n type: 'pickPoint',\n prompt: input.prompt,\n snapToGrid: input.snapToGrid\n };\n case 'node':\n return {\n type: 'pickNode',\n prompt: input.prompt,\n filter: input.filter ? node => input.filter(node, collected || {}) : undefined\n };\n case 'nodes':\n return {\n type: 'pickNodes',\n prompt: input.prompt,\n filter: input.filter ? node => input.filter(node, collected || {}) : undefined\n };\n case 'select':\n return {\n type: 'select',\n prompt: input.prompt,\n options: input.options || []\n };\n case 'text':\n case 'number':\n case 'color':\n case 'boolean':\n default:\n return {\n type: 'text',\n prompt: input.prompt\n };\n }\n}","/**\n * Command Store — State Atoms\n *\n * Core state and derived atoms for the command line system.\n * Action atoms live in ./store.ts.\n */\n\nimport { atom } from 'jotai';\nimport { atomWithStorage } from 'jotai/utils';\n// =============================================================================\n// Core State Atoms\n// =============================================================================\n\n/**\n * Input mode - controls how canvas interactions are routed.\n * When type is not 'normal', canvas clicks are intercepted by the command system.\n */\nexport const inputModeAtom = atom({\n type: 'normal'\n});\n\n/**\n * Whether the command line UI is visible.\n */\nexport const commandLineVisibleAtom = atom(false);\n\n/**\n * Command line state machine.\n */\nexport const commandLineStateAtom = atom({\n phase: 'idle'\n});\n\n/**\n * Visual feedback state for the canvas overlay.\n */\nexport const commandFeedbackAtom = atom(null);\n\n/**\n * Command history (persisted to localStorage).\n */\nexport const commandHistoryAtom = atomWithStorage('canvas-command-history', []);\n\n/**\n * Currently selected suggestion index for keyboard navigation.\n */\nexport const selectedSuggestionIndexAtom = atom(0);\n\n// =============================================================================\n// Input Resolution\n// =============================================================================\n\n/**\n * Resolver for pending input. Used to communicate between canvas and command system.\n */\nexport const pendingInputResolverAtom = atom(null);\n\n// =============================================================================\n// Derived Atoms\n// =============================================================================\n\n/**\n * Whether a command is currently being executed or inputs collected.\n */\nexport const isCommandActiveAtom = atom(get => {\n const state = get(commandLineStateAtom);\n return state.phase === 'collecting' || state.phase === 'executing';\n});\n\n/**\n * Current input definition (if collecting).\n */\nexport const currentInputAtom = atom(get => {\n const state = get(commandLineStateAtom);\n if (state.phase !== 'collecting') return null;\n return state.command.inputs[state.inputIndex];\n});\n\n/**\n * Progress through current command (e.g., \"2/3\").\n */\nexport const commandProgressAtom = atom(get => {\n const state = get(commandLineStateAtom);\n if (state.phase !== 'collecting') return null;\n return {\n current: state.inputIndex + 1,\n total: state.command.inputs.length\n };\n});","import { c as _c } from \"react/compiler-runtime\";\n/**\n * useVirtualization Hook\n *\n * Provides virtualization metrics and controls for debugging and monitoring.\n * Useful for performance tuning and understanding what's being rendered.\n */\n\nimport { useAtomValue, useSetAtom } from 'jotai';\nimport { virtualizationMetricsAtom } from '../core/virtualization-store';\nimport { setVirtualizationEnabledAtom, toggleVirtualizationAtom } from '../core/settings-store';\n/**\n * Hook for accessing virtualization state and controls.\n *\n * @example\n * ```tsx\n * function PerformanceMonitor() {\n * const {\n * enabled,\n * visibleNodes,\n * totalNodes,\n * culledNodes,\n * toggle\n * } = useVirtualization();\n *\n * return (\n *
\n *

Rendering {visibleNodes}/{totalNodes} nodes ({culledNodes} culled)

\n * \n *
\n * );\n * }\n * ```\n */\nexport function useVirtualization() {\n const $ = _c(8);\n const metrics = useAtomValue(virtualizationMetricsAtom);\n const setEnabled = useSetAtom(setVirtualizationEnabledAtom);\n const toggle = useSetAtom(toggleVirtualizationAtom);\n let t0;\n let t1;\n if ($[0] !== setEnabled) {\n t0 = () => setEnabled(true);\n t1 = () => setEnabled(false);\n $[0] = setEnabled;\n $[1] = t0;\n $[2] = t1;\n } else {\n t0 = $[1];\n t1 = $[2];\n }\n let t2;\n if ($[3] !== metrics || $[4] !== t0 || $[5] !== t1 || $[6] !== toggle) {\n t2 = {\n ...metrics,\n enable: t0,\n disable: t1,\n toggle\n };\n $[3] = metrics;\n $[4] = t0;\n $[5] = t1;\n $[6] = toggle;\n $[7] = t2;\n } else {\n t2 = $[7];\n }\n return t2;\n}","import { c as _c } from \"react/compiler-runtime\";\n/**\n * Multi-tap Gesture Hook\n *\n * Cross-input multi-tap detection (works with touch, pencil, and mouse).\n * Replaces the mouse-only onDoubleClick/onTripleClick handlers.\n *\n * Usage:\n * const handleTap = useTapGesture({\n * onSingleTap: () => selectNode(id),\n * onDoubleTap: () => lockNode(id),\n * onTripleTap: () => expandNode(id),\n * });\n *\n * // In your gesture handler:\n * onPointerUp = (e) => handleTap(e);\n */\n\nimport { useRef } from 'react';\n/**\n * Hook for detecting single, double, and triple taps across all input types.\n *\n * Returns a function to call from onPointerUp (or tap handler).\n * Uses a timer to disambiguate between single and multi-taps.\n */\nexport function useTapGesture(t0) {\n const $ = _c(12);\n let t1;\n if ($[0] !== t0) {\n t1 = t0 === undefined ? {} : t0;\n $[0] = t0;\n $[1] = t1;\n } else {\n t1 = $[1];\n }\n const options = t1;\n const {\n onSingleTap,\n onDoubleTap,\n onTripleTap,\n tapDelay: t2,\n tapDistance: t3\n } = options;\n const tapDelay = t2 === undefined ? 300 : t2;\n const tapDistance = t3 === undefined ? 25 : t3;\n let t4;\n if ($[2] === Symbol.for(\"react.memo_cache_sentinel\")) {\n t4 = {\n count: 0,\n timer: null,\n lastX: 0,\n lastY: 0,\n lastEvent: null\n };\n $[2] = t4;\n } else {\n t4 = $[2];\n }\n const stateRef = useRef(t4);\n let t5;\n if ($[3] !== onDoubleTap || $[4] !== onSingleTap || $[5] !== onTripleTap || $[6] !== tapDelay || $[7] !== tapDistance) {\n t5 = event => {\n const state = stateRef.current;\n const dx = Math.abs(event.clientX - state.lastX);\n const dy = Math.abs(event.clientY - state.lastY);\n const isSameSpot = state.count === 0 || dx < tapDistance && dy < tapDistance;\n if (!isSameSpot) {\n if (state.timer) {\n clearTimeout(state.timer);\n }\n state.count = 0;\n }\n state.count = state.count + 1;\n state.lastX = event.clientX;\n state.lastY = event.clientY;\n state.lastEvent = event;\n if (state.timer) {\n clearTimeout(state.timer);\n }\n if (state.count >= 3) {\n onTripleTap?.(event);\n state.count = 0;\n state.timer = null;\n return;\n }\n if (state.count === 2) {\n onDoubleTap?.(event);\n state.timer = setTimeout(() => {\n state.count = 0;\n state.timer = null;\n }, tapDelay);\n return;\n }\n state.timer = setTimeout(() => {\n if (state.count === 1 && state.lastEvent) {\n onSingleTap?.(state.lastEvent);\n }\n state.count = 0;\n state.timer = null;\n }, tapDelay);\n };\n $[3] = onDoubleTap;\n $[4] = onSingleTap;\n $[5] = onTripleTap;\n $[6] = tapDelay;\n $[7] = tapDistance;\n $[8] = t5;\n } else {\n t5 = $[8];\n }\n const handleTap = t5;\n let t6;\n if ($[9] === Symbol.for(\"react.memo_cache_sentinel\")) {\n t6 = () => {\n const state_0 = stateRef.current;\n if (state_0.timer) {\n clearTimeout(state_0.timer);\n state_0.timer = null;\n }\n state_0.count = 0;\n };\n $[9] = t6;\n } else {\n t6 = $[9];\n }\n const cleanup = t6;\n let t7;\n if ($[10] !== handleTap) {\n t7 = {\n handleTap,\n cleanup\n };\n $[10] = handleTap;\n $[11] = t7;\n } else {\n t7 = $[11];\n }\n return t7;\n}","/**\n * Legacy hook surface.\n *\n * Arrow-key navigation now lives in the shared input runtime under\n * `InputProvider`. This hook remains as a read-only helper so callers\n * can still observe focused node state without mounting another listener.\n */\n\n'use client';\n\nimport { c as _c } from \"react/compiler-runtime\";\nimport { useAtomValue } from 'jotai';\nimport { focusedNodeIdAtom } from '../core/selection-store';\nexport function useArrowKeyNavigation() {\n const $ = _c(2);\n const focusedNodeId = useAtomValue(focusedNodeIdAtom);\n let t0;\n if ($[0] !== focusedNodeId) {\n t0 = {\n focusedNodeId\n };\n $[0] = focusedNodeId;\n $[1] = t0;\n } else {\n t0 = $[1];\n }\n return t0;\n}","/**\n * Canvas Graph Hook\n *\n * Convenience hook for reading graph structure (node/edge counts and keys).\n */\n\n'use client';\n\nimport { c as _c } from \"react/compiler-runtime\";\nimport { useAtomValue } from 'jotai';\nimport { graphAtom } from '../core/graph-store';\nimport { nodeKeysAtom, edgeKeysAtom } from '../core/graph-derived';\n/**\n * Hook to access graph structure information.\n *\n * @example\n * ```tsx\n * function GraphInfo() {\n * const { nodeCount, edgeCount, getNode } = useCanvasGraph();\n * return
{nodeCount} nodes, {edgeCount} edges
;\n * }\n * ```\n */\nexport function useCanvasGraph() {\n const $ = _c(9);\n const graph = useAtomValue(graphAtom);\n const nodeKeys = useAtomValue(nodeKeysAtom);\n const edgeKeys = useAtomValue(edgeKeysAtom);\n let t0;\n if ($[0] !== graph) {\n t0 = id => graph.hasNode(id) ? graph.getNodeAttributes(id) : undefined;\n $[0] = graph;\n $[1] = t0;\n } else {\n t0 = $[1];\n }\n const getNode = t0;\n let t1;\n if ($[2] !== graph) {\n t1 = id_0 => graph.hasEdge(id_0) ? graph.getEdgeAttributes(id_0) : undefined;\n $[2] = graph;\n $[3] = t1;\n } else {\n t1 = $[3];\n }\n const getEdge = t1;\n let t2;\n if ($[4] !== edgeKeys || $[5] !== getEdge || $[6] !== getNode || $[7] !== nodeKeys) {\n t2 = {\n nodeCount: nodeKeys.length,\n edgeCount: edgeKeys.length,\n nodeKeys,\n edgeKeys,\n getNode,\n getEdge\n };\n $[4] = edgeKeys;\n $[5] = getEdge;\n $[6] = getNode;\n $[7] = nodeKeys;\n $[8] = t2;\n } else {\n t2 = $[8];\n }\n return t2;\n}","/**\n * Zoom Transition Hook\n *\n * Drives the requestAnimationFrame loop for smooth zoom/pan animations.\n * Reads the animation target from zoomAnimationTargetAtom and interpolates\n * zoom/pan values with cubic ease-in-out.\n */\n\n'use client';\n\nimport { c as _c } from \"react/compiler-runtime\";\nimport { useEffect, useRef } from 'react';\nimport { useAtomValue, useSetAtom } from 'jotai';\nimport { zoomAtom, panAtom, zoomAnimationTargetAtom, zoomTransitionProgressAtom, zoomFocusNodeIdAtom } from '../core/viewport-store';\n/** Cubic ease-in-out */\nfunction easeInOutCubic(t) {\n return t < 0.5 ? 4 * t * t * t : 1 - Math.pow(-2 * t + 2, 3) / 2;\n}\n\n/**\n * Hook that drives zoom/pan animations via requestAnimationFrame.\n *\n * @example\n * ```tsx\n * function Canvas() {\n * const { isAnimating, progress } = useZoomTransition();\n * return
...
;\n * }\n * ```\n */\nexport function useZoomTransition() {\n const $ = _c(15);\n const target = useAtomValue(zoomAnimationTargetAtom);\n const setZoom = useSetAtom(zoomAtom);\n const setPan = useSetAtom(panAtom);\n const setTarget = useSetAtom(zoomAnimationTargetAtom);\n const setProgress = useSetAtom(zoomTransitionProgressAtom);\n const setFocusNode = useSetAtom(zoomFocusNodeIdAtom);\n const progress = useAtomValue(zoomTransitionProgressAtom);\n const rafRef = useRef(null);\n let t0;\n if ($[0] !== setFocusNode || $[1] !== setProgress || $[2] !== setTarget) {\n t0 = () => {\n if (rafRef.current !== null) {\n cancelAnimationFrame(rafRef.current);\n rafRef.current = null;\n }\n setTarget(null);\n setProgress(0);\n setFocusNode(null);\n };\n $[0] = setFocusNode;\n $[1] = setProgress;\n $[2] = setTarget;\n $[3] = t0;\n } else {\n t0 = $[3];\n }\n const cancel = t0;\n let t1;\n let t2;\n if ($[4] !== setPan || $[5] !== setProgress || $[6] !== setTarget || $[7] !== setZoom || $[8] !== target) {\n t1 = () => {\n if (!target) {\n return;\n }\n const animate = () => {\n const elapsed = performance.now() - target.startTime;\n const rawT = Math.min(1, elapsed / target.duration);\n const t = easeInOutCubic(rawT);\n const currentZoom = target.startZoom + (target.targetZoom - target.startZoom) * t;\n const currentPanX = target.startPan.x + (target.targetPan.x - target.startPan.x) * t;\n const currentPanY = target.startPan.y + (target.targetPan.y - target.startPan.y) * t;\n setZoom(currentZoom);\n setPan({\n x: currentPanX,\n y: currentPanY\n });\n setProgress(t);\n if (rawT < 1) {\n rafRef.current = requestAnimationFrame(animate);\n } else {\n rafRef.current = null;\n setTarget(null);\n }\n };\n rafRef.current = requestAnimationFrame(animate);\n return () => {\n if (rafRef.current !== null) {\n cancelAnimationFrame(rafRef.current);\n rafRef.current = null;\n }\n };\n };\n t2 = [target, setZoom, setPan, setTarget, setProgress];\n $[4] = setPan;\n $[5] = setProgress;\n $[6] = setTarget;\n $[7] = setZoom;\n $[8] = target;\n $[9] = t1;\n $[10] = t2;\n } else {\n t1 = $[9];\n t2 = $[10];\n }\n useEffect(t1, t2);\n const t3 = target !== null;\n let t4;\n if ($[11] !== cancel || $[12] !== progress || $[13] !== t3) {\n t4 = {\n isAnimating: t3,\n progress,\n cancel\n };\n $[11] = cancel;\n $[12] = progress;\n $[13] = t3;\n $[14] = t4;\n } else {\n t4 = $[14];\n }\n return t4;\n}","import { c as _c } from \"react/compiler-runtime\";\n/**\n * Hook for detecting two-finger split gesture on a node.\n *\n * Tracks 2 finger pointers on the node element. When they diverge\n * past SPLIT_THRESHOLD (80px screen distance increase), the node is\n * split into two copies with all edges duplicated.\n *\n * Uses raw PointerEvents (not @use-gesture pinch) so it doesn't\n * conflict with the Viewport's pinch-to-zoom.\n */\n\nimport { useRef } from 'react';\nimport { useAtomValue, useSetAtom } from 'jotai';\nimport { splitNodeAtom } from '../core/graph-mutations';\nimport { screenToWorldAtom } from '../core/viewport-store';\nconst SPLIT_THRESHOLD = 80; // px screen distance increase to trigger split\n\nexport function useSplitGesture(nodeId) {\n const $ = _c(9);\n const splitNode = useSetAtom(splitNodeAtom);\n const screenToWorld = useAtomValue(screenToWorldAtom);\n let t0;\n if ($[0] === Symbol.for(\"react.memo_cache_sentinel\")) {\n t0 = new Map();\n $[0] = t0;\n } else {\n t0 = $[0];\n }\n const pointersRef = useRef(t0);\n const initialDistanceRef = useRef(null);\n const splitFiredRef = useRef(false);\n const getDistance = _temp;\n let t1;\n if ($[1] === Symbol.for(\"react.memo_cache_sentinel\")) {\n t1 = e => {\n if (e.pointerType !== \"touch\") {\n return;\n }\n pointersRef.current.set(e.pointerId, {\n pointerId: e.pointerId,\n x: e.clientX,\n y: e.clientY\n });\n if (pointersRef.current.size === 2) {\n const [p1, p2] = Array.from(pointersRef.current.values());\n initialDistanceRef.current = getDistance(p1, p2);\n splitFiredRef.current = false;\n }\n };\n $[1] = t1;\n } else {\n t1 = $[1];\n }\n const onPointerDown = t1;\n let t2;\n if ($[2] !== nodeId || $[3] !== screenToWorld || $[4] !== splitNode) {\n t2 = e_0 => {\n if (e_0.pointerType !== \"touch\") {\n return;\n }\n if (!pointersRef.current.has(e_0.pointerId)) {\n return;\n }\n pointersRef.current.set(e_0.pointerId, {\n pointerId: e_0.pointerId,\n x: e_0.clientX,\n y: e_0.clientY\n });\n if (pointersRef.current.size === 2 && initialDistanceRef.current !== null && !splitFiredRef.current) {\n const [p1_0, p2_0] = Array.from(pointersRef.current.values());\n const currentDistance = getDistance(p1_0, p2_0);\n const delta = currentDistance - initialDistanceRef.current;\n if (delta > SPLIT_THRESHOLD) {\n splitFiredRef.current = true;\n e_0.stopPropagation();\n const world1 = screenToWorld(p1_0.x, p1_0.y);\n const world2 = screenToWorld(p2_0.x, p2_0.y);\n splitNode({\n nodeId,\n position1: world1,\n position2: world2\n });\n }\n }\n };\n $[2] = nodeId;\n $[3] = screenToWorld;\n $[4] = splitNode;\n $[5] = t2;\n } else {\n t2 = $[5];\n }\n const onPointerMove = t2;\n let t3;\n if ($[6] === Symbol.for(\"react.memo_cache_sentinel\")) {\n t3 = e_1 => {\n pointersRef.current.delete(e_1.pointerId);\n if (pointersRef.current.size < 2) {\n initialDistanceRef.current = null;\n splitFiredRef.current = false;\n }\n };\n $[6] = t3;\n } else {\n t3 = $[6];\n }\n const onPointerUp = t3;\n let t4;\n if ($[7] !== onPointerMove) {\n t4 = {\n onPointerDown,\n onPointerMove,\n onPointerUp\n };\n $[7] = onPointerMove;\n $[8] = t4;\n } else {\n t4 = $[8];\n }\n return t4;\n}\nfunction _temp(a, b) {\n return Math.sqrt((a.x - b.x) ** 2 + (a.y - b.y) ** 2);\n}","/**\n * Animated Layout Transition Hook\n *\n * Shared hook that smoothly interpolates nodes from current positions\n * to target positions using requestAnimationFrame with cubic easing.\n * Used by tree/grid layout hooks.\n */\n\nimport { useAtomValue, useSetAtom } from 'jotai';\nimport { useRef } from 'react';\nimport { graphAtom } from '../core/graph-store';\nimport { updateNodePositionAtom, nodePositionUpdateCounterAtom } from '../core/graph-position';\nimport { pushHistoryAtom } from '../core/history-store';\nimport { createDebug } from '../utils/debug';\nimport { prefersReducedMotionAtom } from '../core/reduced-motion-store';\nconst debug = createDebug('animated-layout');\nexport function easeInOutCubic(t) {\n return t < 0.5 ? 4 * t * t * t : 1 - Math.pow(-2 * t + 2, 3) / 2;\n}\nexport function useAnimatedLayout(options = {}) {\n const {\n onPositionsChanged,\n duration = 400\n } = options;\n const graph = useAtomValue(graphAtom);\n const updateNodePosition = useSetAtom(updateNodePositionAtom);\n const pushHistory = useSetAtom(pushHistoryAtom);\n const setPositionCounter = useSetAtom(nodePositionUpdateCounterAtom);\n const reducedMotion = useAtomValue(prefersReducedMotionAtom);\n const isAnimatingRef = useRef(false);\n const animate = async (targets, label) => {\n if (isAnimatingRef.current) return;\n if (targets.size === 0) return;\n\n // Snapshot for undo before animating\n if (label) pushHistory(label);\n isAnimatingRef.current = true;\n\n // Reduced motion: apply positions instantly (no animation)\n if (reducedMotion) {\n for (const [nodeId, target] of targets) {\n updateNodePosition({\n nodeId,\n position: target\n });\n }\n isAnimatingRef.current = false;\n setPositionCounter(c => c + 1);\n if (onPositionsChanged) {\n const updates = [];\n for (const [nodeId_0, target_0] of targets) {\n updates.push({\n nodeId: nodeId_0,\n position: target_0\n });\n }\n Promise.resolve(onPositionsChanged(updates)).catch(err => debug.error('Position change callback failed: %O', err));\n }\n return;\n }\n\n // Record start positions\n const starts = new Map();\n for (const [nodeId_1] of targets) {\n if (graph.hasNode(nodeId_1)) {\n const attrs = graph.getNodeAttributes(nodeId_1);\n starts.set(nodeId_1, {\n x: attrs.x,\n y: attrs.y\n });\n }\n }\n return new Promise(resolve => {\n const startTime = performance.now();\n function tick() {\n const elapsed = performance.now() - startTime;\n const t = Math.min(elapsed / duration, 1);\n const eased = easeInOutCubic(t);\n for (const [nodeId_2, target_1] of targets) {\n const start = starts.get(nodeId_2);\n if (!start) continue;\n const x = Math.round(start.x + (target_1.x - start.x) * eased);\n const y = Math.round(start.y + (target_1.y - start.y) * eased);\n updateNodePosition({\n nodeId: nodeId_2,\n position: {\n x,\n y\n }\n });\n }\n if (t < 1) {\n requestAnimationFrame(tick);\n } else {\n isAnimatingRef.current = false;\n setPositionCounter(c_0 => c_0 + 1);\n\n // Persistence callback\n if (onPositionsChanged) {\n const updates_0 = [];\n for (const [nodeId_3, target_2] of targets) {\n updates_0.push({\n nodeId: nodeId_3,\n position: target_2\n });\n }\n Promise.resolve(onPositionsChanged(updates_0)).catch(err_0 => debug.error('Position change callback failed: %O', err_0));\n }\n resolve();\n }\n }\n requestAnimationFrame(tick);\n });\n };\n return {\n animate,\n isAnimating: isAnimatingRef.current\n };\n}","/**\n * Tree Layout Hook\n *\n * Arranges nodes in a hierarchical tree (top-down or left-to-right).\n * Roots are nodes with no incoming edges. Uses BFS for depth assignment\n * and distributes children horizontally at each level.\n */\n\nimport { useAtomValue } from 'jotai';\nimport { useRef } from 'react';\nimport { graphAtom } from '../core/graph-store';\nimport { uiNodesAtom } from '../core/graph-derived';\nimport { useAnimatedLayout } from './useAnimatedLayout';\nexport function useTreeLayout(options = {}) {\n const {\n direction = 'top-down',\n levelGap = 200,\n nodeGap = 100,\n ...animateOptions\n } = options;\n const graph = useAtomValue(graphAtom);\n const nodes = useAtomValue(uiNodesAtom);\n const {\n animate,\n isAnimating\n } = useAnimatedLayout(animateOptions);\n const isRunningRef = useRef(false);\n const applyLayout = async () => {\n if (isRunningRef.current || isAnimating) return;\n if (nodes.length === 0) return;\n isRunningRef.current = true;\n\n // Build adjacency: find roots (nodes with no incoming edges)\n const nodeIds = new Set(nodes.map(n => n.id));\n const children = new Map();\n const hasIncoming = new Set();\n for (const nodeId of nodeIds) {\n children.set(nodeId, []);\n }\n graph.forEachEdge((_key, _attrs, source, target) => {\n if (nodeIds.has(source) && nodeIds.has(target) && source !== target) {\n children.get(source)?.push(target);\n hasIncoming.add(target);\n }\n });\n\n // Roots = no incoming edges\n const roots = [...nodeIds].filter(id => !hasIncoming.has(id));\n if (roots.length === 0) {\n // If no roots (cycle), pick the first node\n roots.push(nodes[0].id);\n }\n\n // BFS to assign levels\n const levels = new Map();\n const queue = [...roots];\n for (const r of roots) levels.set(r, 0);\n while (queue.length > 0) {\n const current = queue.shift();\n const level = levels.get(current);\n for (const child of children.get(current) || []) {\n if (!levels.has(child)) {\n levels.set(child, level + 1);\n queue.push(child);\n }\n }\n }\n\n // Assign any unvisited nodes (disconnected) to level 0\n for (const nodeId_0 of nodeIds) {\n if (!levels.has(nodeId_0)) levels.set(nodeId_0, 0);\n }\n\n // Group nodes by level\n const byLevel = new Map();\n for (const [nodeId_1, level_0] of levels) {\n if (!byLevel.has(level_0)) byLevel.set(level_0, []);\n byLevel.get(level_0).push(nodeId_1);\n }\n\n // Compute positions\n const targets = new Map();\n const maxLevel = Math.max(...byLevel.keys());\n for (const [level_1, nodeIdsAtLevel] of byLevel) {\n const count = nodeIdsAtLevel.length;\n // Get max node width at this level for spacing\n let maxNodeSize = 200;\n for (const nid of nodeIdsAtLevel) {\n if (graph.hasNode(nid)) {\n const attrs = graph.getNodeAttributes(nid);\n maxNodeSize = Math.max(maxNodeSize, attrs.width || 200);\n }\n }\n const totalWidth = (count - 1) * (maxNodeSize + nodeGap);\n const startX = -totalWidth / 2;\n for (let i = 0; i < count; i++) {\n const primary = level_1 * levelGap;\n const secondary = startX + i * (maxNodeSize + nodeGap);\n if (direction === 'top-down') {\n targets.set(nodeIdsAtLevel[i], {\n x: secondary,\n y: primary\n });\n } else {\n targets.set(nodeIdsAtLevel[i], {\n x: primary,\n y: secondary\n });\n }\n }\n }\n await animate(targets, direction === 'top-down' ? 'Tree layout' : 'Horizontal layout');\n isRunningRef.current = false;\n };\n return {\n applyLayout,\n isRunning: isRunningRef.current || isAnimating\n };\n}","/**\n * Grid Layout Hook\n *\n * Arranges nodes in a uniform grid. Sorts by existing position\n * (top-left to bottom-right) to preserve rough spatial order.\n */\n\nimport { useAtomValue } from 'jotai';\nimport { useRef } from 'react';\nimport { graphAtom } from '../core/graph-store';\nimport { uiNodesAtom } from '../core/graph-derived';\nimport { useAnimatedLayout } from './useAnimatedLayout';\nexport function useGridLayout(options = {}) {\n const {\n columns,\n gap = 80,\n ...animateOptions\n } = options;\n const graph = useAtomValue(graphAtom);\n const nodes = useAtomValue(uiNodesAtom);\n const {\n animate,\n isAnimating\n } = useAnimatedLayout(animateOptions);\n const isRunningRef = useRef(false);\n const applyLayout = async () => {\n if (isRunningRef.current || isAnimating) return;\n if (nodes.length === 0) return;\n isRunningRef.current = true;\n\n // Sort nodes by position: top-to-bottom, then left-to-right\n const sorted = [...nodes].sort((a, b) => {\n const ay = a.position?.y ?? 0;\n const by = b.position?.y ?? 0;\n if (Math.abs(ay - by) > 50) return ay - by;\n return (a.position?.x ?? 0) - (b.position?.x ?? 0);\n });\n const cols = columns ?? Math.ceil(Math.sqrt(sorted.length));\n\n // Compute cell size from max node dimensions\n let maxW = 200;\n let maxH = 100;\n for (const node of sorted) {\n if (graph.hasNode(node.id)) {\n const attrs = graph.getNodeAttributes(node.id);\n maxW = Math.max(maxW, attrs.width || 200);\n maxH = Math.max(maxH, attrs.height || 100);\n }\n }\n const cellW = maxW + gap;\n const cellH = maxH + gap;\n const rows = Math.ceil(sorted.length / cols);\n\n // Center grid around (0,0)\n const totalW = (cols - 1) * cellW;\n const totalH = (rows - 1) * cellH;\n const offsetX = -totalW / 2;\n const offsetY = -totalH / 2;\n const targets = new Map();\n for (let i = 0; i < sorted.length; i++) {\n const col = i % cols;\n const row = Math.floor(i / cols);\n targets.set(sorted[i].id, {\n x: Math.round(offsetX + col * cellW),\n y: Math.round(offsetY + row * cellH)\n });\n }\n await animate(targets, 'Grid layout');\n isRunningRef.current = false;\n };\n return {\n applyLayout,\n isRunning: isRunningRef.current || isAnimating\n };\n}","import { c as _c } from \"react/compiler-runtime\";\n/**\n * usePlugin — React hook for plugin registration\n *\n * Registers a plugin on mount and unregisters on unmount.\n * Safe to call with the same plugin across re-renders — it\n * only registers once (keyed by plugin.id).\n */\n\nimport { useEffect, useRef } from 'react';\nimport { registerPlugin, unregisterPlugin, hasPlugin } from '../core/plugin-registry';\n\n/**\n * Register a canvas plugin for the lifetime of the component.\n *\n * @example\n * ```tsx\n * const myPlugin: CanvasPlugin = {\n * id: 'my-plugin',\n * name: 'My Plugin',\n * nodeTypes: { 'custom': CustomNode },\n * };\n *\n * function App() {\n * usePlugin(myPlugin);\n * return ;\n * }\n * ```\n */\nexport function usePlugin(plugin) {\n const $ = _c(4);\n const registeredRef = useRef(false);\n let t0;\n if ($[0] !== plugin) {\n t0 = () => {\n if (!hasPlugin(plugin.id)) {\n registerPlugin(plugin);\n registeredRef.current = true;\n }\n return () => {\n if (registeredRef.current && hasPlugin(plugin.id)) {\n try {\n unregisterPlugin(plugin.id);\n } catch {}\n registeredRef.current = false;\n }\n };\n };\n $[0] = plugin;\n $[1] = t0;\n } else {\n t0 = $[1];\n }\n let t1;\n if ($[2] !== plugin.id) {\n t1 = [plugin.id];\n $[2] = plugin.id;\n $[3] = t1;\n } else {\n t1 = $[3];\n }\n useEffect(t0, t1);\n}\n\n/**\n * Register multiple plugins at once.\n * Plugins are registered in order, so dependencies should come first.\n *\n * @example\n * ```tsx\n * usePlugins([basePlugin, extensionPlugin]);\n * ```\n */\nexport function usePlugins(plugins) {\n const $ = _c(6);\n let t0;\n if ($[0] === Symbol.for(\"react.memo_cache_sentinel\")) {\n t0 = [];\n $[0] = t0;\n } else {\n t0 = $[0];\n }\n const registeredRef = useRef(t0);\n let t1;\n let t2;\n if ($[1] !== plugins) {\n t1 = () => {\n const registered = [];\n for (const plugin of plugins) {\n if (!hasPlugin(plugin.id)) {\n registerPlugin(plugin);\n registered.push(plugin.id);\n }\n }\n registeredRef.current = registered;\n return () => {\n for (const id of registeredRef.current.reverse()) {\n if (hasPlugin(id)) {\n try {\n unregisterPlugin(id);\n } catch {}\n }\n }\n registeredRef.current = [];\n };\n };\n t2 = plugins.map(_temp).join(\",\");\n $[1] = plugins;\n $[2] = t1;\n $[3] = t2;\n } else {\n t1 = $[2];\n t2 = $[3];\n }\n let t3;\n if ($[4] !== t2) {\n t3 = [t2];\n $[4] = t2;\n $[5] = t3;\n } else {\n t3 = $[5];\n }\n useEffect(t1, t3);\n}\nfunction _temp(p) {\n return p.id;\n}","/**\n * Utility exports\n */\n\nexport { createDebug, debug } from './debug';\nexport { getNodeGestureConfig, getViewportGestureConfig } from './gesture-configs';\nexport { pendingNodeMutations, getPendingState, clearPendingState, hasPendingMutations } from './mutation-queue';\nexport { createComponentRegistry, createFallbackComponent } from './component-registry';\nexport { bezierHorizontal, bezierVertical, bezierSmart, straight, stepHorizontal, stepVertical, stepSmart, smoothStep, getEdgePathCalculator, defaultEdgePathCalculator } from './edge-path-calculators';\nexport {\n// Types\n\nFitToBoundsMode,\n// Bounds calculation\ncalculateBounds,\n// Node geometry\ngetNodeCenter, setNodeCenter, checkNodesOverlap, getNodeBounds, areNodesClose } from './layout';\nexport { hitTestNode, hitTestPort, setHitTestProvider } from './hit-test';\nexport { registerEdgePathCalculator, unregisterEdgePathCalculator, resolveEdgePathCalculator, hasCustomEdgePathCalculator, getCustomEdgePathCalculatorNames, clearCustomEdgePathCalculators } from './edge-path-registry';","import { c as _c } from \"react/compiler-runtime\";\n/**\n * Component Registry Utility\n *\n * Creates a memoized component registry for mapping node types to React components.\n * Handles lazy loading, memoization caching, and fallback rendering.\n */\n\nimport React from 'react';\n\n/**\n * A map of type strings to lazy-loaded React components\n */\n\n/**\n * Options for creating a component registry\n */\n\n/**\n * Result of createComponentRegistry\n */\nimport { jsx as _jsx } from \"react/jsx-runtime\";\n/**\n * Creates a component registry with automatic memoization and caching.\n *\n * @example\n * ```tsx\n * const { getComponent, Fallback } = createComponentRegistry({\n * registry: {\n * notes: React.lazy(() => import('./notes/mod')),\n * player: React.lazy(() => import('./player/mod')),\n * },\n * fallback: ({ nodeData }) =>
Unknown: {nodeData.type}
,\n * });\n *\n * // Usage\n * const Component = getComponent(node.type) || Fallback;\n * return ;\n * ```\n */\nexport function createComponentRegistry({\n registry,\n fallback,\n getDisplayName = type => `Memoized${type}Component`\n}) {\n // Cache for memoized component wrappers - one per type\n const memoizedCache = new Map();\n const getComponent = type => {\n // Check cache first\n if (memoizedCache.has(type)) {\n return memoizedCache.get(type);\n }\n const LazyComponent = registry[type];\n if (!LazyComponent) {\n return fallback || null;\n }\n\n // Create a stable wrapper component for this type\n function RegistryComponent(props) {\n const $ = _c(2);\n let t0;\n if ($[0] !== props) {\n t0 = /*#__PURE__*/_jsx(LazyComponent, {\n ...props\n });\n $[0] = props;\n $[1] = t0;\n } else {\n t0 = $[1];\n }\n return t0;\n }\n RegistryComponent.displayName = getDisplayName(type);\n\n // Cache it for future calls\n memoizedCache.set(type, RegistryComponent);\n return RegistryComponent;\n };\n const getTypes = () => Object.keys(registry);\n const hasType = type => type in registry;\n return {\n getComponent,\n getTypes,\n hasType,\n Fallback: fallback || null\n };\n}\n\n/**\n * Creates a simple fallback component that displays the unknown type\n */\nexport function createFallbackComponent(getMessage) {\n return function FallbackComponent(props) {\n const message = getMessage ? getMessage(props) : `Unsupported type: \"${props.nodeData?.dbData?.node_type || 'Unknown'}\"`;\n return /*#__PURE__*/_jsx(\"div\", {\n style: {\n padding: '10px',\n color: 'orange'\n },\n children: /*#__PURE__*/_jsx(\"p\", {\n children: message\n })\n });\n };\n}","/**\n * Canvas Storage Adapter\n *\n * Backend-agnostic interface for persisting canvas data.\n * The default Supabase implementation lives in `./supabase-adapter.ts`.\n * Users can implement this interface for any backend (REST, GraphQL, localStorage, etc.).\n *\n * Note: The core canvas works WITHOUT any adapter —\n * use `onNodePersist` / `onEdgeCreate` callback props for simple cases.\n * The adapter is for users who want the full `CanvasDbProvider` experience\n * with a non-Supabase backend.\n */\n\nimport { atom } from 'jotai';\n\n// =============================================================================\n// Adapter Types\n// =============================================================================\n\n/** Type aliases for backend-agnostic naming */\n\n/** Change event for realtime subscriptions */\n\n// =============================================================================\n// Adapter Interface\n// =============================================================================\n\n/**\n * Storage adapter for canvas persistence.\n *\n * Implement this interface to use any backend with `CanvasDbProvider`.\n * All methods return Promises for async-first design.\n */\n\n// =============================================================================\n// In-Memory Adapter (for testing / local-only use)\n// =============================================================================\n\n/**\n * Simple in-memory adapter for testing and local-only canvases.\n * Data is lost on page reload.\n */\nexport class InMemoryStorageAdapter {\n nodes = new Map();\n edges = new Map();\n async fetchNodes(graphId) {\n return Array.from(this.nodes.values()).filter(n => n.graph_id === graphId);\n }\n async createNode(graphId, node) {\n const now = new Date().toISOString();\n const fullNode = {\n id: node.id ?? crypto.randomUUID(),\n graph_id: graphId,\n label: node.label ?? null,\n node_type: node.node_type ?? null,\n configuration: node.configuration ?? null,\n ui_properties: node.ui_properties ?? null,\n data: node.data ?? null,\n created_at: now,\n updated_at: now\n };\n this.nodes.set(fullNode.id, fullNode);\n return fullNode;\n }\n async updateNode(nodeId, updates) {\n const existing = this.nodes.get(nodeId);\n if (!existing) throw new Error(`Node ${nodeId} not found`);\n const updated = {\n ...existing,\n ...updates,\n updated_at: new Date().toISOString()\n };\n this.nodes.set(nodeId, updated);\n return updated;\n }\n async deleteNode(nodeId) {\n this.nodes.delete(nodeId);\n // Also delete connected edges\n for (const [edgeId, edge] of this.edges) {\n if (edge.source_node_id === nodeId || edge.target_node_id === nodeId) {\n this.edges.delete(edgeId);\n }\n }\n }\n async fetchEdges(graphId) {\n return Array.from(this.edges.values()).filter(e => e.graph_id === graphId);\n }\n async createEdge(graphId, edge) {\n const now = new Date().toISOString();\n const fullEdge = {\n id: edge.id ?? crypto.randomUUID(),\n graph_id: graphId,\n source_node_id: edge.source_node_id ?? '',\n target_node_id: edge.target_node_id ?? '',\n edge_type: edge.edge_type ?? null,\n filter_condition: edge.filter_condition ?? null,\n ui_properties: edge.ui_properties ?? null,\n data: edge.data ?? null,\n created_at: now,\n updated_at: now\n };\n this.edges.set(fullEdge.id, fullEdge);\n return fullEdge;\n }\n async updateEdge(edgeId, updates) {\n const existing = this.edges.get(edgeId);\n if (!existing) throw new Error(`Edge ${edgeId} not found`);\n const updated = {\n ...existing,\n ...updates,\n updated_at: new Date().toISOString()\n };\n this.edges.set(edgeId, updated);\n return updated;\n }\n async deleteEdge(edgeId) {\n this.edges.delete(edgeId);\n }\n\n // --- Batch Operations ---\n\n async createNodes(graphId, nodes) {\n return Promise.all(nodes.map(n => this.createNode(graphId, n)));\n }\n async deleteNodes(nodeIds) {\n for (const id of nodeIds) {\n await this.deleteNode(id);\n }\n }\n async createEdges(graphId, edges) {\n return Promise.all(edges.map(e => this.createEdge(graphId, e)));\n }\n async deleteEdges(edgeIds) {\n for (const id of edgeIds) {\n await this.deleteEdge(id);\n }\n }\n}\n\n// =============================================================================\n// Global Adapter Atom\n// =============================================================================\n\n/**\n * Global storage adapter atom.\n * Set by `CanvasDbProvider` so that any store/hook can access the adapter.\n */\nexport const storageAdapterAtom = atom(null);","/**\n * Supabase Storage Adapter\n *\n * Implements CanvasStorageAdapter using Supabase as the backend.\n * Wraps the existing query functions into the adapter interface.\n */\n\nexport class SupabaseStorageAdapter {\n constructor(client) {\n this.client = client;\n }\n\n /** Get the underlying Supabase client (for advanced use or backward compat) */\n getClient() {\n return this.client;\n }\n\n // --- Node Operations ---\n\n async fetchNodes(graphId) {\n const {\n data,\n error\n } = await this.client.from('nodes').select('*').eq('graph_id', graphId).order('created_at', {\n ascending: true\n });\n if (error) throw error;\n return data || [];\n }\n async createNode(graphId, node) {\n const {\n data,\n error\n } = await this.client.from('nodes').insert({\n graph_id: graphId,\n label: node.label ?? null,\n node_type: node.node_type ?? null,\n configuration: node.configuration ?? null,\n ui_properties: node.ui_properties ?? null,\n data: node.data ?? null\n }).select().single();\n if (error) throw error;\n return data;\n }\n async updateNode(nodeId, updates) {\n const {\n data,\n error\n } = await this.client.from('nodes').update({\n ...updates,\n updated_at: new Date().toISOString()\n }).eq('id', nodeId).select().single();\n if (error) throw error;\n return data;\n }\n async deleteNode(nodeId) {\n const {\n error\n } = await this.client.from('nodes').delete().eq('id', nodeId);\n if (error) throw error;\n }\n\n // --- Edge Operations ---\n\n async fetchEdges(graphId) {\n const {\n data,\n error\n } = await this.client.from('edges').select('*').eq('graph_id', graphId).order('created_at', {\n ascending: true\n });\n if (error) throw error;\n return data || [];\n }\n async createEdge(graphId, edge) {\n const {\n data,\n error\n } = await this.client.from('edges').insert({\n graph_id: graphId,\n source_node_id: edge.source_node_id ?? '',\n target_node_id: edge.target_node_id ?? '',\n edge_type: edge.edge_type ?? null,\n filter_condition: edge.filter_condition ?? null,\n ui_properties: edge.ui_properties ?? null,\n data: edge.data ?? null\n }).select().single();\n if (error) throw error;\n return data;\n }\n async updateEdge(edgeId, updates) {\n const {\n data,\n error\n } = await this.client.from('edges').update({\n ...updates,\n updated_at: new Date().toISOString()\n }).eq('id', edgeId).select().single();\n if (error) throw error;\n return data;\n }\n async deleteEdge(edgeId) {\n const {\n error\n } = await this.client.from('edges').delete().eq('id', edgeId);\n if (error) throw error;\n }\n\n // --- Realtime (optional) ---\n\n subscribe(graphId, onChange) {\n const channel = this.client.channel(`canvas-${graphId}`).on('postgres_changes', {\n event: '*',\n schema: 'public',\n table: 'nodes',\n filter: `graph_id=eq.${graphId}`\n }, payload => {\n onChange({\n type: payload.eventType,\n table: 'nodes',\n new: payload.new,\n old: payload.old\n });\n }).on('postgres_changes', {\n event: '*',\n schema: 'public',\n table: 'edges',\n filter: `graph_id=eq.${graphId}`\n }, payload => {\n onChange({\n type: payload.eventType,\n table: 'edges',\n new: payload.new,\n old: payload.old\n });\n }).subscribe();\n return () => {\n channel.unsubscribe();\n };\n }\n}","/**\n * Canvas DB Provider\n *\n * Provides a storage adapter to the canvas components.\n */\n\nimport React, { createContext, useContext, useEffect, useRef } from 'react';\nimport { useSetAtom, useAtomValue } from 'jotai';\nimport { storageAdapterAtom } from './adapter';\nconst AdapterContext = /*#__PURE__*/createContext(null);\n\n/**\n * Provider that makes a storage adapter available to canvas hooks and components.\n *\n * @example\n * ```tsx\n * \n * \n * \n * ```\n */\nexport function CanvasDbProvider({\n adapter,\n children\n}) {\n const setAdapter = useSetAtom(storageAdapterAtom);\n const prevAdapterRef = useRef(null);\n const resolved = adapter === prevAdapterRef.current ? prevAdapterRef.current : adapter;\n prevAdapterRef.current = resolved;\n useEffect(() => {\n setAdapter(resolved);\n return () => setAdapter(null);\n }, [resolved, setAdapter]);\n return /*#__PURE__*/_jsx(AdapterContext, {\n value: resolved,\n children: children\n });\n}\n\n/**\n * Hook to access the current storage adapter\n */\nexport function useStorageAdapter() {\n const contextAdapter = useContext(AdapterContext);\n const atomAdapter = useAtomValue(storageAdapterAtom);\n const adapter = contextAdapter || atomAdapter;\n if (!adapter) {\n throw new Error(\"useStorageAdapter must be used within CanvasDbProvider\");\n }\n return adapter;\n}\n\n// =============================================================================\n// Internal Supabase helpers (used by db/hooks/* — NOT exported from db/index.ts)\n// =============================================================================\n\n/**\n * Raw Supabase client atom — used internally by Supabase-specific query hooks.\n * Not part of the public API. Use `useStorageAdapter()` for public consumption.\n */\nimport { atom, useAtomValue as useAtomVal } from 'jotai';\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nexport const supabaseClientAtom = atom(null);\n\n/**\n * Internal hook for db hooks that need the raw Supabase client.\n * Not part of the public API.\n */\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport function useSupabaseClient() {\n const client = useAtomVal(supabaseClientAtom);\n if (!client) {\n throw new Error(\"useSupabaseClient: no Supabase client available. Use CanvasDbProvider with a SupabaseStorageAdapter.\");\n }\n return client;\n}","/**\n * Node query functions\n */\n\nimport { createDebug } from '../../utils/debug';\nconst debug = createDebug('db:nodes');\n\n/**\n * Fetch all nodes for a graph\n */\nexport async function fetchGraphNodes(supabase, graphId) {\n if (!graphId) {\n throw new Error('graphId is required to fetch nodes');\n }\n const {\n data,\n error\n } = await supabase.from('nodes').select('*').eq('graph_id', graphId).order('created_at', {\n ascending: true\n });\n if (error) {\n debug.error('Error fetching nodes for graph %s: %O', graphId, error);\n throw error;\n }\n return data || [];\n}\n\n/**\n * Fetch a single node by ID\n */\nexport async function fetchGraphNode(supabase, nodeId) {\n if (!nodeId) {\n throw new Error('nodeId is required to fetch node');\n }\n const {\n data,\n error\n } = await supabase.from('nodes').select('*').eq('id', nodeId).single();\n if (error) {\n if (error.code === 'PGRST116') {\n return null; // Not found\n }\n debug.error('Error fetching node %s: %O', nodeId, error);\n throw error;\n }\n return data;\n}\n\n/**\n * Create a new node\n */\nexport async function createGraphNode(supabase, node) {\n const {\n data,\n error\n } = await supabase.from('nodes').insert(node).select().single();\n if (error) {\n debug.error('Error creating node: %O', error);\n throw error;\n }\n return data;\n}\n\n/**\n * Update a node\n */\nexport async function updateGraphNode(supabase, nodeId, updates) {\n const {\n data,\n error\n } = await supabase.from('nodes').update({\n ...updates,\n updated_at: new Date().toISOString()\n }).eq('id', nodeId).select().single();\n if (error) {\n debug.error('Error updating node %s: %O', nodeId, error);\n throw error;\n }\n return data;\n}\n\n/**\n * Delete a node\n */\nexport async function deleteGraphNode(supabase, nodeId) {\n const {\n error\n } = await supabase.from('nodes').delete().eq('id', nodeId);\n if (error) {\n debug.error('Error deleting node %s: %O', nodeId, error);\n throw error;\n }\n}","/**\n * Edge query functions\n */\n\nimport { createDebug } from '../../utils/debug';\nconst debug = createDebug('db:edges');\n\n/**\n * Fetch all edges for a graph\n */\nexport async function fetchGraphEdges(supabase, graphId) {\n if (!graphId) {\n throw new Error('graphId is required to fetch edges');\n }\n const {\n data,\n error\n } = await supabase.from('edges').select('*').eq('graph_id', graphId).order('created_at', {\n ascending: true\n });\n if (error) {\n debug.error('Error fetching edges for graph %s: %O', graphId, error);\n throw error;\n }\n return data || [];\n}\n\n/**\n * Create a new edge\n */\nexport async function createGraphEdge(supabase, edge) {\n const {\n data,\n error\n } = await supabase.from('edges').insert(edge).select().single();\n if (error) {\n debug.error('Error creating edge: %O', error);\n throw error;\n }\n return data;\n}\n\n/**\n * Update an edge\n */\nexport async function updateGraphEdge(supabase, edgeId, updates) {\n const {\n data,\n error\n } = await supabase.from('edges').update({\n ...updates,\n updated_at: new Date().toISOString()\n }).eq('id', edgeId).select().single();\n if (error) {\n debug.error('Error updating edge %s: %O', edgeId, error);\n throw error;\n }\n return data;\n}\n\n/**\n * Delete an edge\n */\nexport async function deleteGraphEdge(supabase, edgeId) {\n const {\n error\n } = await supabase.from('edges').delete().eq('id', edgeId);\n if (error) {\n debug.error('Error deleting edge %s: %O', edgeId, error);\n throw error;\n }\n}","/**\n * Query key factories for canvas queries\n */\n\nexport const canvasKeys = {\n all: ['canvas'],\n graphs: () => [...canvasKeys.all, 'graphs'],\n graph: graphId => [...canvasKeys.graphs(), graphId],\n nodes: graphId => [...canvasKeys.graph(graphId), 'nodes'],\n node: (graphId, nodeId) => [...canvasKeys.nodes(graphId), nodeId],\n edges: graphId => [...canvasKeys.graph(graphId), 'edges'],\n edge: (graphId, edgeId) => [...canvasKeys.edges(graphId), edgeId]\n};","import { c as _c } from \"react/compiler-runtime\";\n/**\n * Hook for fetching graph nodes\n */\n\nimport { useQuery } from '@tanstack/react-query';\nimport { useSupabaseClient } from '../provider';\nimport { fetchGraphNodes } from '../queries/nodes';\nimport { canvasKeys } from './keys';\n/**\n * Hook to fetch all nodes for a graph\n */\nexport function useGraphNodes(graphId, t0) {\n const $ = _c(11);\n let t1;\n if ($[0] !== t0) {\n t1 = t0 === undefined ? {} : t0;\n $[0] = t0;\n $[1] = t1;\n } else {\n t1 = $[1];\n }\n const options = t1;\n const {\n enabled: t2\n } = options;\n const enabled = t2 === undefined ? true : t2;\n const supabase = useSupabaseClient();\n let t3;\n if ($[2] !== graphId) {\n t3 = canvasKeys.nodes(graphId || \"\");\n $[2] = graphId;\n $[3] = t3;\n } else {\n t3 = $[3];\n }\n let t4;\n if ($[4] !== graphId || $[5] !== supabase) {\n t4 = () => fetchGraphNodes(supabase, graphId);\n $[4] = graphId;\n $[5] = supabase;\n $[6] = t4;\n } else {\n t4 = $[6];\n }\n const t5 = enabled && !!graphId;\n let t6;\n if ($[7] !== t3 || $[8] !== t4 || $[9] !== t5) {\n t6 = {\n queryKey: t3,\n queryFn: t4,\n enabled: t5\n };\n $[7] = t3;\n $[8] = t4;\n $[9] = t5;\n $[10] = t6;\n } else {\n t6 = $[10];\n }\n return useQuery(t6);\n}","import { c as _c } from \"react/compiler-runtime\";\n/**\n * Hook for fetching graph edges\n */\n\nimport { useQuery } from '@tanstack/react-query';\nimport { useSupabaseClient } from '../provider';\nimport { fetchGraphEdges } from '../queries/edges';\nimport { canvasKeys } from './keys';\n/**\n * Hook to fetch all edges for a graph\n */\nexport function useGraphEdges(graphId, t0) {\n const $ = _c(11);\n let t1;\n if ($[0] !== t0) {\n t1 = t0 === undefined ? {} : t0;\n $[0] = t0;\n $[1] = t1;\n } else {\n t1 = $[1];\n }\n const options = t1;\n const {\n enabled: t2\n } = options;\n const enabled = t2 === undefined ? true : t2;\n const supabase = useSupabaseClient();\n let t3;\n if ($[2] !== graphId) {\n t3 = canvasKeys.edges(graphId || \"\");\n $[2] = graphId;\n $[3] = t3;\n } else {\n t3 = $[3];\n }\n let t4;\n if ($[4] !== graphId || $[5] !== supabase) {\n t4 = () => fetchGraphEdges(supabase, graphId);\n $[4] = graphId;\n $[5] = supabase;\n $[6] = t4;\n } else {\n t4 = $[6];\n }\n const t5 = enabled && !!graphId;\n let t6;\n if ($[7] !== t3 || $[8] !== t4 || $[9] !== t5) {\n t6 = {\n queryKey: t3,\n queryFn: t4,\n enabled: t5\n };\n $[7] = t3;\n $[8] = t4;\n $[9] = t5;\n $[10] = t6;\n } else {\n t6 = $[10];\n }\n return useQuery(t6);\n}","import { c as _c } from \"react/compiler-runtime\";\n/**\n * Hook for updating a node with optimistic updates\n */\n\nimport { useMutation, useQueryClient } from '@tanstack/react-query';\nimport { useSetAtom } from 'jotai';\nimport { startMutationAtom, completeMutationAtom } from '../../core/sync-store';\nimport { useSupabaseClient } from '../provider';\nimport { updateGraphNode } from '../queries/nodes';\nimport { canvasKeys } from './keys';\n/**\n * Hook to update a node with optimistic updates\n */\nexport function useUpdateNode() {\n const $ = _c(18);\n const queryClient = useQueryClient();\n const supabase = useSupabaseClient();\n const startMutation = useSetAtom(startMutationAtom);\n const completeMutation = useSetAtom(completeMutationAtom);\n let t0;\n if ($[0] !== supabase) {\n t0 = async t1 => {\n const {\n nodeId,\n updates\n } = t1;\n return updateGraphNode(supabase, nodeId, updates);\n };\n $[0] = supabase;\n $[1] = t0;\n } else {\n t0 = $[1];\n }\n let t1;\n if ($[2] !== queryClient || $[3] !== startMutation) {\n t1 = async t2 => {\n const {\n nodeId: nodeId_0,\n graphId,\n updates: updates_0\n } = t2;\n startMutation();\n await queryClient.cancelQueries({\n queryKey: canvasKeys.nodes(graphId)\n });\n const previousNodes = queryClient.getQueryData(canvasKeys.nodes(graphId));\n if (previousNodes) {\n queryClient.setQueryData(canvasKeys.nodes(graphId), old => old?.map(node => node.id === nodeId_0 ? {\n ...node,\n ...updates_0,\n updated_at: new Date().toISOString()\n } : node));\n }\n return {\n previousNodes,\n graphId\n };\n };\n $[2] = queryClient;\n $[3] = startMutation;\n $[4] = t1;\n } else {\n t1 = $[4];\n }\n let t2;\n if ($[5] !== completeMutation || $[6] !== queryClient) {\n t2 = (_err, _variables, context) => {\n if (context?.previousNodes) {\n queryClient.setQueryData(canvasKeys.nodes(context.graphId), context.previousNodes);\n }\n completeMutation(false);\n };\n $[5] = completeMutation;\n $[6] = queryClient;\n $[7] = t2;\n } else {\n t2 = $[7];\n }\n let t3;\n if ($[8] !== completeMutation) {\n t3 = () => {\n completeMutation(true);\n };\n $[8] = completeMutation;\n $[9] = t3;\n } else {\n t3 = $[9];\n }\n let t4;\n if ($[10] !== queryClient) {\n t4 = (_data, _error, variables) => {\n queryClient.invalidateQueries({\n queryKey: canvasKeys.nodes(variables.graphId)\n });\n };\n $[10] = queryClient;\n $[11] = t4;\n } else {\n t4 = $[11];\n }\n let t5;\n if ($[12] !== t0 || $[13] !== t1 || $[14] !== t2 || $[15] !== t3 || $[16] !== t4) {\n t5 = {\n mutationFn: t0,\n onMutate: t1,\n onError: t2,\n onSuccess: t3,\n onSettled: t4\n };\n $[12] = t0;\n $[13] = t1;\n $[14] = t2;\n $[15] = t3;\n $[16] = t4;\n $[17] = t5;\n } else {\n t5 = $[17];\n }\n return useMutation(t5);\n}","import { c as _c } from \"react/compiler-runtime\";\n/**\n * Hook for creating a new node\n */\n\nimport { useMutation, useQueryClient } from '@tanstack/react-query';\nimport { useSetAtom } from 'jotai';\nimport { startMutationAtom, completeMutationAtom } from '../../core/sync-store';\nimport { useSupabaseClient } from '../provider';\nimport { createGraphNode } from '../queries/nodes';\nimport { canvasKeys } from './keys';\n/**\n * Hook to create a new node\n */\nexport function useCreateNode() {\n const $ = _c(17);\n const queryClient = useQueryClient();\n const supabase = useSupabaseClient();\n const startMutation = useSetAtom(startMutationAtom);\n const completeMutation = useSetAtom(completeMutationAtom);\n let t0;\n if ($[0] !== supabase) {\n t0 = async node => createGraphNode(supabase, node);\n $[0] = supabase;\n $[1] = t0;\n } else {\n t0 = $[1];\n }\n let t1;\n if ($[2] !== queryClient || $[3] !== startMutation) {\n t1 = async node_0 => {\n startMutation();\n await queryClient.cancelQueries({\n queryKey: canvasKeys.nodes(node_0.graph_id)\n });\n const previousNodes = queryClient.getQueryData(canvasKeys.nodes(node_0.graph_id));\n const optimisticNode = {\n ...node_0,\n id: `temp-${Date.now()}`,\n created_at: new Date().toISOString(),\n updated_at: new Date().toISOString()\n };\n queryClient.setQueryData(canvasKeys.nodes(node_0.graph_id), old => [...(old || []), optimisticNode]);\n return {\n previousNodes,\n graphId: node_0.graph_id,\n optimisticId: optimisticNode.id\n };\n };\n $[2] = queryClient;\n $[3] = startMutation;\n $[4] = t1;\n } else {\n t1 = $[4];\n }\n let t2;\n let t3;\n if ($[5] !== completeMutation || $[6] !== queryClient) {\n t2 = (_err, _variables, context) => {\n if (context?.previousNodes) {\n queryClient.setQueryData(canvasKeys.nodes(context.graphId), context.previousNodes);\n }\n completeMutation(false);\n };\n t3 = (newNode, _variables_0, context_0) => {\n if (context_0) {\n queryClient.setQueryData(canvasKeys.nodes(context_0.graphId), old_0 => old_0?.map(node_1 => node_1.id === context_0.optimisticId ? newNode : node_1));\n }\n completeMutation(true);\n };\n $[5] = completeMutation;\n $[6] = queryClient;\n $[7] = t2;\n $[8] = t3;\n } else {\n t2 = $[7];\n t3 = $[8];\n }\n let t4;\n if ($[9] !== queryClient) {\n t4 = (_data, _error, variables) => {\n queryClient.invalidateQueries({\n queryKey: canvasKeys.nodes(variables.graph_id)\n });\n };\n $[9] = queryClient;\n $[10] = t4;\n } else {\n t4 = $[10];\n }\n let t5;\n if ($[11] !== t0 || $[12] !== t1 || $[13] !== t2 || $[14] !== t3 || $[15] !== t4) {\n t5 = {\n mutationFn: t0,\n onMutate: t1,\n onError: t2,\n onSuccess: t3,\n onSettled: t4\n };\n $[11] = t0;\n $[12] = t1;\n $[13] = t2;\n $[14] = t3;\n $[15] = t4;\n $[16] = t5;\n } else {\n t5 = $[16];\n }\n return useMutation(t5);\n}","import { c as _c } from \"react/compiler-runtime\";\n/**\n * Hook for deleting a node\n */\n\nimport { useMutation, useQueryClient } from '@tanstack/react-query';\nimport { useSetAtom } from 'jotai';\nimport { startMutationAtom, completeMutationAtom } from '../../core/sync-store';\nimport { useSupabaseClient } from '../provider';\nimport { deleteGraphNode } from '../queries/nodes';\nimport { canvasKeys } from './keys';\n/**\n * Hook to delete a node with optimistic updates\n */\nexport function useDeleteNode() {\n const $ = _c(18);\n const queryClient = useQueryClient();\n const supabase = useSupabaseClient();\n const startMutation = useSetAtom(startMutationAtom);\n const completeMutation = useSetAtom(completeMutationAtom);\n let t0;\n if ($[0] !== supabase) {\n t0 = async t1 => {\n const {\n nodeId\n } = t1;\n return deleteGraphNode(supabase, nodeId);\n };\n $[0] = supabase;\n $[1] = t0;\n } else {\n t0 = $[1];\n }\n let t1;\n if ($[2] !== queryClient || $[3] !== startMutation) {\n t1 = async t2 => {\n const {\n nodeId: nodeId_0,\n graphId\n } = t2;\n startMutation();\n await queryClient.cancelQueries({\n queryKey: canvasKeys.nodes(graphId)\n });\n const previousNodes = queryClient.getQueryData(canvasKeys.nodes(graphId));\n if (previousNodes) {\n queryClient.setQueryData(canvasKeys.nodes(graphId), old => old?.filter(node => node.id !== nodeId_0));\n }\n return {\n previousNodes,\n graphId\n };\n };\n $[2] = queryClient;\n $[3] = startMutation;\n $[4] = t1;\n } else {\n t1 = $[4];\n }\n let t2;\n if ($[5] !== completeMutation || $[6] !== queryClient) {\n t2 = (_err, _variables, context) => {\n if (context?.previousNodes) {\n queryClient.setQueryData(canvasKeys.nodes(context.graphId), context.previousNodes);\n }\n completeMutation(false);\n };\n $[5] = completeMutation;\n $[6] = queryClient;\n $[7] = t2;\n } else {\n t2 = $[7];\n }\n let t3;\n if ($[8] !== completeMutation) {\n t3 = () => {\n completeMutation(true);\n };\n $[8] = completeMutation;\n $[9] = t3;\n } else {\n t3 = $[9];\n }\n let t4;\n if ($[10] !== queryClient) {\n t4 = (_data, _error, variables) => {\n queryClient.invalidateQueries({\n queryKey: canvasKeys.nodes(variables.graphId)\n });\n };\n $[10] = queryClient;\n $[11] = t4;\n } else {\n t4 = $[11];\n }\n let t5;\n if ($[12] !== t0 || $[13] !== t1 || $[14] !== t2 || $[15] !== t3 || $[16] !== t4) {\n t5 = {\n mutationFn: t0,\n onMutate: t1,\n onError: t2,\n onSuccess: t3,\n onSettled: t4\n };\n $[12] = t0;\n $[13] = t1;\n $[14] = t2;\n $[15] = t3;\n $[16] = t4;\n $[17] = t5;\n } else {\n t5 = $[17];\n }\n return useMutation(t5);\n}","import { c as _c } from \"react/compiler-runtime\";\n/**\n * Hook for updating an edge with optimistic updates\n */\n\nimport { useMutation, useQueryClient } from '@tanstack/react-query';\nimport { useSetAtom } from 'jotai';\nimport { startMutationAtom, completeMutationAtom } from '../../core/sync-store';\nimport { useSupabaseClient } from '../provider';\nimport { updateGraphEdge } from '../queries/edges';\nimport { canvasKeys } from './keys';\n/**\n * Hook to update an edge with optimistic updates\n */\nexport function useUpdateEdge() {\n const $ = _c(18);\n const queryClient = useQueryClient();\n const supabase = useSupabaseClient();\n const startMutation = useSetAtom(startMutationAtom);\n const completeMutation = useSetAtom(completeMutationAtom);\n let t0;\n if ($[0] !== supabase) {\n t0 = async t1 => {\n const {\n edgeId,\n updates\n } = t1;\n return updateGraphEdge(supabase, edgeId, updates);\n };\n $[0] = supabase;\n $[1] = t0;\n } else {\n t0 = $[1];\n }\n let t1;\n if ($[2] !== queryClient || $[3] !== startMutation) {\n t1 = async t2 => {\n const {\n edgeId: edgeId_0,\n graphId,\n updates: updates_0\n } = t2;\n startMutation();\n await queryClient.cancelQueries({\n queryKey: canvasKeys.edges(graphId)\n });\n const previousEdges = queryClient.getQueryData(canvasKeys.edges(graphId));\n if (previousEdges) {\n queryClient.setQueryData(canvasKeys.edges(graphId), old => old?.map(edge => edge.id === edgeId_0 ? {\n ...edge,\n ...updates_0,\n updated_at: new Date().toISOString()\n } : edge));\n }\n return {\n previousEdges,\n graphId\n };\n };\n $[2] = queryClient;\n $[3] = startMutation;\n $[4] = t1;\n } else {\n t1 = $[4];\n }\n let t2;\n if ($[5] !== completeMutation || $[6] !== queryClient) {\n t2 = (_err, _variables, context) => {\n if (context?.previousEdges) {\n queryClient.setQueryData(canvasKeys.edges(context.graphId), context.previousEdges);\n }\n completeMutation(false);\n };\n $[5] = completeMutation;\n $[6] = queryClient;\n $[7] = t2;\n } else {\n t2 = $[7];\n }\n let t3;\n if ($[8] !== completeMutation) {\n t3 = () => {\n completeMutation(true);\n };\n $[8] = completeMutation;\n $[9] = t3;\n } else {\n t3 = $[9];\n }\n let t4;\n if ($[10] !== queryClient) {\n t4 = (_data, _error, variables) => {\n queryClient.invalidateQueries({\n queryKey: canvasKeys.edges(variables.graphId)\n });\n };\n $[10] = queryClient;\n $[11] = t4;\n } else {\n t4 = $[11];\n }\n let t5;\n if ($[12] !== t0 || $[13] !== t1 || $[14] !== t2 || $[15] !== t3 || $[16] !== t4) {\n t5 = {\n mutationFn: t0,\n onMutate: t1,\n onError: t2,\n onSuccess: t3,\n onSettled: t4\n };\n $[12] = t0;\n $[13] = t1;\n $[14] = t2;\n $[15] = t3;\n $[16] = t4;\n $[17] = t5;\n } else {\n t5 = $[17];\n }\n return useMutation(t5);\n}","import { c as _c } from \"react/compiler-runtime\";\n/**\n * Hook for creating a new edge\n */\n\nimport { useMutation, useQueryClient } from '@tanstack/react-query';\nimport { useSetAtom } from 'jotai';\nimport { startMutationAtom, completeMutationAtom } from '../../core/sync-store';\nimport { useSupabaseClient } from '../provider';\nimport { createGraphEdge } from '../queries/edges';\nimport { canvasKeys } from './keys';\n/**\n * Hook to create a new edge\n */\nexport function useCreateEdge() {\n const $ = _c(17);\n const queryClient = useQueryClient();\n const supabase = useSupabaseClient();\n const startMutation = useSetAtom(startMutationAtom);\n const completeMutation = useSetAtom(completeMutationAtom);\n let t0;\n if ($[0] !== supabase) {\n t0 = async edge => createGraphEdge(supabase, edge);\n $[0] = supabase;\n $[1] = t0;\n } else {\n t0 = $[1];\n }\n let t1;\n if ($[2] !== queryClient || $[3] !== startMutation) {\n t1 = async edge_0 => {\n startMutation();\n await queryClient.cancelQueries({\n queryKey: canvasKeys.edges(edge_0.graph_id)\n });\n const previousEdges = queryClient.getQueryData(canvasKeys.edges(edge_0.graph_id));\n const optimisticEdge = {\n ...edge_0,\n id: `temp-${Date.now()}`,\n created_at: new Date().toISOString(),\n updated_at: new Date().toISOString()\n };\n queryClient.setQueryData(canvasKeys.edges(edge_0.graph_id), old => [...(old || []), optimisticEdge]);\n return {\n previousEdges,\n graphId: edge_0.graph_id,\n optimisticId: optimisticEdge.id\n };\n };\n $[2] = queryClient;\n $[3] = startMutation;\n $[4] = t1;\n } else {\n t1 = $[4];\n }\n let t2;\n let t3;\n if ($[5] !== completeMutation || $[6] !== queryClient) {\n t2 = (_err, _variables, context) => {\n if (context?.previousEdges) {\n queryClient.setQueryData(canvasKeys.edges(context.graphId), context.previousEdges);\n }\n completeMutation(false);\n };\n t3 = (newEdge, _variables_0, context_0) => {\n if (context_0) {\n queryClient.setQueryData(canvasKeys.edges(context_0.graphId), old_0 => old_0?.map(edge_1 => edge_1.id === context_0.optimisticId ? newEdge : edge_1));\n }\n completeMutation(true);\n };\n $[5] = completeMutation;\n $[6] = queryClient;\n $[7] = t2;\n $[8] = t3;\n } else {\n t2 = $[7];\n t3 = $[8];\n }\n let t4;\n if ($[9] !== queryClient) {\n t4 = (_data, _error, variables) => {\n queryClient.invalidateQueries({\n queryKey: canvasKeys.edges(variables.graph_id)\n });\n };\n $[9] = queryClient;\n $[10] = t4;\n } else {\n t4 = $[10];\n }\n let t5;\n if ($[11] !== t0 || $[12] !== t1 || $[13] !== t2 || $[14] !== t3 || $[15] !== t4) {\n t5 = {\n mutationFn: t0,\n onMutate: t1,\n onError: t2,\n onSuccess: t3,\n onSettled: t4\n };\n $[11] = t0;\n $[12] = t1;\n $[13] = t2;\n $[14] = t3;\n $[15] = t4;\n $[16] = t5;\n } else {\n t5 = $[16];\n }\n return useMutation(t5);\n}","import { c as _c } from \"react/compiler-runtime\";\n/**\n * Hook for deleting an edge\n */\n\nimport { useMutation, useQueryClient } from '@tanstack/react-query';\nimport { useSetAtom } from 'jotai';\nimport { startMutationAtom, completeMutationAtom } from '../../core/sync-store';\nimport { useSupabaseClient } from '../provider';\nimport { deleteGraphEdge } from '../queries/edges';\nimport { canvasKeys } from './keys';\n/**\n * Hook to delete an edge with optimistic updates\n */\nexport function useDeleteEdge() {\n const $ = _c(18);\n const queryClient = useQueryClient();\n const supabase = useSupabaseClient();\n const startMutation = useSetAtom(startMutationAtom);\n const completeMutation = useSetAtom(completeMutationAtom);\n let t0;\n if ($[0] !== supabase) {\n t0 = async t1 => {\n const {\n edgeId\n } = t1;\n return deleteGraphEdge(supabase, edgeId);\n };\n $[0] = supabase;\n $[1] = t0;\n } else {\n t0 = $[1];\n }\n let t1;\n if ($[2] !== queryClient || $[3] !== startMutation) {\n t1 = async t2 => {\n const {\n edgeId: edgeId_0,\n graphId\n } = t2;\n startMutation();\n await queryClient.cancelQueries({\n queryKey: canvasKeys.edges(graphId)\n });\n const previousEdges = queryClient.getQueryData(canvasKeys.edges(graphId));\n if (previousEdges) {\n queryClient.setQueryData(canvasKeys.edges(graphId), old => old?.filter(edge => edge.id !== edgeId_0));\n }\n return {\n previousEdges,\n graphId\n };\n };\n $[2] = queryClient;\n $[3] = startMutation;\n $[4] = t1;\n } else {\n t1 = $[4];\n }\n let t2;\n if ($[5] !== completeMutation || $[6] !== queryClient) {\n t2 = (_err, _variables, context) => {\n if (context?.previousEdges) {\n queryClient.setQueryData(canvasKeys.edges(context.graphId), context.previousEdges);\n }\n completeMutation(false);\n };\n $[5] = completeMutation;\n $[6] = queryClient;\n $[7] = t2;\n } else {\n t2 = $[7];\n }\n let t3;\n if ($[8] !== completeMutation) {\n t3 = () => {\n completeMutation(true);\n };\n $[8] = completeMutation;\n $[9] = t3;\n } else {\n t3 = $[9];\n }\n let t4;\n if ($[10] !== queryClient) {\n t4 = (_data, _error, variables) => {\n queryClient.invalidateQueries({\n queryKey: canvasKeys.edges(variables.graphId)\n });\n };\n $[10] = queryClient;\n $[11] = t4;\n } else {\n t4 = $[11];\n }\n let t5;\n if ($[12] !== t0 || $[13] !== t1 || $[14] !== t2 || $[15] !== t3 || $[16] !== t4) {\n t5 = {\n mutationFn: t0,\n onMutate: t1,\n onError: t2,\n onSuccess: t3,\n onSettled: t4\n };\n $[12] = t0;\n $[13] = t1;\n $[14] = t2;\n $[15] = t3;\n $[16] = t4;\n $[17] = t5;\n } else {\n t5 = $[17];\n }\n return useMutation(t5);\n}","/**\n * Canvas Style Types\n *\n * Simplified style system for the canvas package.\n * Only includes canvas-relevant styles (background, grid, axes, nodes, edges).\n */\n\n/**\n * Canvas style guide - only canvas-relevant styles\n */\n\n/**\n * Required canvas style guide with all properties defined\n */\n\n/**\n * Default light theme styles\n */\nexport const defaultLightStyles = {\n background: {\n color: '#f0f0f0',\n gradient: {\n from: '#f0f0f0',\n to: '#e0e0e0',\n angle: 180\n },\n pattern: 'none'\n },\n grid: {\n visible: true,\n minorLineColor: 'rgba(0, 0, 0, 0.05)',\n majorLineColor: 'rgba(0, 0, 0, 0.1)',\n opacity: 1\n },\n axes: {\n visible: true,\n color: 'rgba(0, 0, 0, 0.3)',\n labelColor: 'rgba(0, 0, 0, 0.7)',\n tickColor: 'rgba(0, 0, 0, 0.3)'\n },\n nodes: {\n defaultBackground: '#FAFAFA',\n defaultBorderColor: 'rgba(0, 0, 0, 0.06)',\n defaultBorderRadius: 12,\n selectedBorderColor: '#FF9800',\n selectedGlowColor: 'rgba(255, 152, 0, 0.5)',\n shadowColor: 'rgba(0, 0, 0, 0.1)',\n shadowOpacity: 1,\n draggingBackgroundColor: '#FAFAFAd9',\n draggingBorderColor: '#CCCCCC',\n resizeHandleColor: 'rgba(0, 0, 0, 0.2)',\n resizeHandleActiveColor: 'rgba(59, 130, 246, 0.8)'\n },\n edges: {\n defaultColor: '#cccccc',\n defaultWeight: 1.5,\n labelColor: '#FFFFFF',\n labelStrokeColor: '#000000',\n pathType: 'bezier'\n }\n};\n\n/**\n * Default dark theme styles\n */\nexport const defaultDarkStyles = {\n background: {\n color: '#0f172a',\n gradient: {\n from: '#0f172a',\n to: '#1e293b',\n angle: 180\n },\n pattern: 'none'\n },\n grid: {\n visible: true,\n minorLineColor: 'rgba(255, 255, 255, 0.06)',\n majorLineColor: 'rgba(255, 255, 255, 0.12)',\n opacity: 1\n },\n axes: {\n visible: true,\n color: 'rgba(255, 255, 255, 0.35)',\n labelColor: 'rgba(255, 255, 255, 0.7)',\n tickColor: 'rgba(255, 255, 255, 0.35)'\n },\n nodes: {\n defaultBackground: '#FAFAFA',\n defaultBorderColor: 'rgba(0, 0, 0, 0.06)',\n defaultBorderRadius: 12,\n selectedBorderColor: '#FF9800',\n selectedGlowColor: 'rgba(255, 152, 0, 0.5)',\n shadowColor: 'rgba(0, 0, 0, 0.1)',\n shadowOpacity: 1,\n draggingBackgroundColor: '#FAFAFAd9',\n draggingBorderColor: '#666666',\n resizeHandleColor: 'rgba(255, 255, 255, 0.2)',\n resizeHandleActiveColor: 'rgba(96, 165, 250, 0.8)'\n },\n edges: {\n defaultColor: '#cccccc',\n defaultWeight: 1.5,\n labelColor: '#FFFFFF',\n labelStrokeColor: '#000000',\n pathType: 'bezier'\n }\n};\n\n/**\n * Merge user styles with default styles\n */\nexport function mergeWithDefaults(userStyles, isDark) {\n const defaults = isDark ? defaultDarkStyles : defaultLightStyles;\n if (!userStyles) return defaults;\n return {\n background: {\n ...defaults.background,\n ...userStyles.background\n },\n grid: {\n ...defaults.grid,\n ...userStyles.grid\n },\n axes: {\n ...defaults.axes,\n ...userStyles.axes\n },\n nodes: {\n ...defaults.nodes,\n ...userStyles.nodes\n },\n edges: {\n ...defaults.edges,\n ...userStyles.edges\n }\n };\n}","import { c as _c } from \"react/compiler-runtime\";\n/**\n * Canvas Provider\n *\n * Main orchestrating provider that sets up all canvas context.\n * Combines storage adapter, styles, and graph loading.\n */\n\nimport React, { useEffect } from 'react';\nimport { Provider as JotaiProvider, useSetAtom } from 'jotai';\nimport { QueryClient, QueryClientProvider } from '@tanstack/react-query';\nimport { CanvasDbProvider } from '../db/provider';\nimport { CanvasStyleProvider } from './CanvasStyleProvider';\nimport { currentGraphIdAtom } from '../core/graph-store';\nimport { loadGraphFromDbAtom } from '../core/graph-mutations';\nimport { useGraphNodes } from '../db/hooks/useGraphNodes';\nimport { useGraphEdges } from '../db/hooks/useGraphEdges';\n\n// Default query client if not provided\nimport { Fragment as _Fragment, jsx as _jsx } from \"react/jsx-runtime\";\nconst defaultQueryClient = new QueryClient({\n defaultOptions: {\n queries: {\n staleTime: 1000 * 60,\n // 1 minute\n refetchOnWindowFocus: false\n }\n }\n});\n/**\n * Internal component that handles graph loading\n */\nfunction GraphLoader(t0) {\n const $ = _c(19);\n const {\n graphId,\n onGraphLoad,\n onGraphError,\n children\n } = t0;\n const setCurrentGraphId = useSetAtom(currentGraphIdAtom);\n const loadGraphFromDb = useSetAtom(loadGraphFromDbAtom);\n const {\n data: nodes,\n error: nodesError,\n isLoading: nodesLoading\n } = useGraphNodes(graphId);\n const {\n data: edges,\n error: edgesError,\n isLoading: edgesLoading\n } = useGraphEdges(graphId);\n let t1;\n let t2;\n if ($[0] !== graphId || $[1] !== setCurrentGraphId) {\n t1 = () => {\n setCurrentGraphId(graphId);\n };\n t2 = [graphId, setCurrentGraphId];\n $[0] = graphId;\n $[1] = setCurrentGraphId;\n $[2] = t1;\n $[3] = t2;\n } else {\n t1 = $[2];\n t2 = $[3];\n }\n useEffect(t1, t2);\n let t3;\n let t4;\n if ($[4] !== edges || $[5] !== edgesLoading || $[6] !== loadGraphFromDb || $[7] !== nodes || $[8] !== nodesLoading || $[9] !== onGraphLoad) {\n t3 = () => {\n if (nodes && edges && !nodesLoading && !edgesLoading) {\n loadGraphFromDb(nodes, edges);\n onGraphLoad?.(nodes, edges);\n }\n };\n t4 = [nodes, edges, nodesLoading, edgesLoading, loadGraphFromDb, onGraphLoad];\n $[4] = edges;\n $[5] = edgesLoading;\n $[6] = loadGraphFromDb;\n $[7] = nodes;\n $[8] = nodesLoading;\n $[9] = onGraphLoad;\n $[10] = t3;\n $[11] = t4;\n } else {\n t3 = $[10];\n t4 = $[11];\n }\n useEffect(t3, t4);\n let t5;\n let t6;\n if ($[12] !== edgesError || $[13] !== nodesError || $[14] !== onGraphError) {\n t5 = () => {\n const error = nodesError || edgesError;\n if (error) {\n onGraphError?.(error);\n }\n };\n t6 = [nodesError, edgesError, onGraphError];\n $[12] = edgesError;\n $[13] = nodesError;\n $[14] = onGraphError;\n $[15] = t5;\n $[16] = t6;\n } else {\n t5 = $[15];\n t6 = $[16];\n }\n useEffect(t5, t6);\n let t7;\n if ($[17] !== children) {\n t7 = /*#__PURE__*/_jsx(_Fragment, {\n children: children\n });\n $[17] = children;\n $[18] = t7;\n } else {\n t7 = $[18];\n }\n return t7;\n}\n\n/**\n * Main Canvas Provider\n *\n * Sets up all necessary context for the canvas:\n * - Jotai store\n * - React Query client\n * - Storage adapter\n * - Canvas styles\n * - Graph loading\n *\n * @example\n * ```tsx\n * \n * } />\n * \n * ```\n */\nexport function CanvasProvider(t0) {\n const $ = _c(15);\n const {\n adapter,\n graphId,\n styles,\n isDark: t1,\n queryClient: t2,\n children,\n onGraphLoad,\n onGraphError\n } = t0;\n const isDark = t1 === undefined ? false : t1;\n const queryClient = t2 === undefined ? defaultQueryClient : t2;\n let t3;\n if ($[0] !== children || $[1] !== graphId || $[2] !== onGraphError || $[3] !== onGraphLoad) {\n t3 = /*#__PURE__*/_jsx(GraphLoader, {\n graphId: graphId,\n onGraphLoad: onGraphLoad,\n onGraphError: onGraphError,\n children: children\n });\n $[0] = children;\n $[1] = graphId;\n $[2] = onGraphError;\n $[3] = onGraphLoad;\n $[4] = t3;\n } else {\n t3 = $[4];\n }\n let t4;\n if ($[5] !== isDark || $[6] !== styles || $[7] !== t3) {\n t4 = /*#__PURE__*/_jsx(CanvasStyleProvider, {\n styles: styles,\n isDark: isDark,\n children: t3\n });\n $[5] = isDark;\n $[6] = styles;\n $[7] = t3;\n $[8] = t4;\n } else {\n t4 = $[8];\n }\n let t5;\n if ($[9] !== adapter || $[10] !== t4) {\n t5 = /*#__PURE__*/_jsx(CanvasDbProvider, {\n adapter: adapter,\n children: t4\n });\n $[9] = adapter;\n $[10] = t4;\n $[11] = t5;\n } else {\n t5 = $[11];\n }\n let t6;\n if ($[12] !== queryClient || $[13] !== t5) {\n t6 = /*#__PURE__*/_jsx(JotaiProvider, {\n children: /*#__PURE__*/_jsx(QueryClientProvider, {\n client: queryClient,\n children: t5\n })\n });\n $[12] = queryClient;\n $[13] = t5;\n $[14] = t6;\n } else {\n t6 = $[14];\n }\n return t6;\n}","import { c as _c } from \"react/compiler-runtime\";\n/**\n * Canvas Style Provider\n *\n * Provides canvas style context to all child components.\n * Injects CSS variables scoped to the canvas container (not global).\n */\n\nimport React, { createContext, useContext, useRef, useLayoutEffect } from 'react';\nimport { atom, useAtom, useSetAtom } from 'jotai';\nimport { mergeWithDefaults, defaultLightStyles } from '../styles';\n\n// --- Atoms for programmatic theme control ---\n\n/**\n * Atom holding the current canvas styles\n */\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nexport const canvasStylesAtom = atom(defaultLightStyles);\n\n/**\n * Atom for dark mode preference\n */\nexport const canvasIsDarkAtom = atom(false);\n\n/**\n * Atom for custom style overrides\n */\nexport const canvasStyleOverridesAtom = atom(undefined);\n\n// --- Context for container ref ---\n\nconst CanvasStyleContext = /*#__PURE__*/createContext(null);\n\n// --- CSS Variable names ---\n\nconst CSS_VARIABLE_NAMES = ['--canvas-bg', '--node-bg', '--node-border', '--node-radius', '--node-selected-border', '--node-selected-glow', '--node-shadow', '--node-shadow-opacity', '--node-dragging-bg', '--node-dragging-border', '--node-resize-handle', '--node-resize-handle-active', '--edge-color', '--edge-weight', '--edge-label-color', '--edge-label-stroke'];\n\n// --- Helper to apply styles to an element ---\n\nfunction applyStylesToElement(element, styles) {\n const {\n nodes,\n edges,\n background\n } = styles;\n\n // Background\n element.style.setProperty('--canvas-bg', background.color || '');\n\n // Node Styles\n element.style.setProperty('--node-bg', nodes.defaultBackground || '');\n element.style.setProperty('--node-border', nodes.defaultBorderColor || '');\n element.style.setProperty('--node-radius', nodes.defaultBorderRadius ? `${nodes.defaultBorderRadius}px` : '8px');\n element.style.setProperty('--node-selected-border', nodes.selectedBorderColor || '');\n element.style.setProperty('--node-selected-glow', nodes.selectedGlowColor || '');\n element.style.setProperty('--node-shadow', nodes.shadowColor || '');\n element.style.setProperty('--node-shadow-opacity', nodes.shadowOpacity?.toString() || '0.2');\n element.style.setProperty('--node-dragging-bg', nodes.draggingBackgroundColor || '');\n element.style.setProperty('--node-dragging-border', nodes.draggingBorderColor || '');\n element.style.setProperty('--node-resize-handle', nodes.resizeHandleColor || '');\n element.style.setProperty('--node-resize-handle-active', nodes.resizeHandleActiveColor || '');\n\n // Edge Styles\n element.style.setProperty('--edge-color', edges.defaultColor || '');\n element.style.setProperty('--edge-weight', edges.defaultWeight?.toString() || '1.5');\n element.style.setProperty('--edge-label-color', edges.labelColor || '');\n element.style.setProperty('--edge-label-stroke', edges.labelStrokeColor || '');\n}\nfunction removeStylesFromElement(element) {\n CSS_VARIABLE_NAMES.forEach(name => {\n element.style.removeProperty(name);\n });\n}\n\n// --- Provider Props ---\n\n/**\n * Provides canvas style context to all child components.\n * CSS variables are scoped to the canvas container, not the document root.\n *\n * @example\n * ```tsx\n * \n * \n * \n * ```\n */\nexport function CanvasStyleProvider(t0) {\n const $ = _c(24);\n const {\n children,\n styles: propStyles,\n isDark: t1\n } = t0;\n const propIsDark = t1 === undefined ? false : t1;\n const containerRef = useRef(null);\n const [styleOverrides, setStyleOverrides] = useAtom(canvasStyleOverridesAtom);\n const [isDarkAtom, setIsDarkAtom] = useAtom(canvasIsDarkAtom);\n const setCanvasStyles = useSetAtom(canvasStylesAtom);\n const effectiveStyles = styleOverrides ?? propStyles;\n const effectiveIsDark = isDarkAtom || propIsDark;\n let t2;\n if ($[0] !== effectiveIsDark || $[1] !== effectiveStyles) {\n t2 = mergeWithDefaults(effectiveStyles, effectiveIsDark);\n $[0] = effectiveIsDark;\n $[1] = effectiveStyles;\n $[2] = t2;\n } else {\n t2 = $[2];\n }\n const mergedStyles = t2;\n let t3;\n let t4;\n if ($[3] !== mergedStyles || $[4] !== setCanvasStyles) {\n t3 = () => {\n setCanvasStyles(mergedStyles);\n };\n t4 = [mergedStyles, setCanvasStyles];\n $[3] = mergedStyles;\n $[4] = setCanvasStyles;\n $[5] = t3;\n $[6] = t4;\n } else {\n t3 = $[5];\n t4 = $[6];\n }\n useLayoutEffect(t3, t4);\n let t5;\n if ($[7] !== mergedStyles) {\n t5 = node => {\n containerRef.current = node;\n if (!node) {\n return;\n }\n applyStylesToElement(node, mergedStyles);\n return () => removeStylesFromElement(node);\n };\n $[7] = mergedStyles;\n $[8] = t5;\n } else {\n t5 = $[8];\n }\n const containerRefCallback = t5;\n let t6;\n if ($[9] !== setStyleOverrides) {\n t6 = newStyles => {\n setStyleOverrides(newStyles);\n };\n $[9] = setStyleOverrides;\n $[10] = t6;\n } else {\n t6 = $[10];\n }\n const setStyles = t6;\n let t7;\n if ($[11] !== setIsDarkAtom) {\n t7 = isDark => {\n setIsDarkAtom(isDark);\n };\n $[11] = setIsDarkAtom;\n $[12] = t7;\n } else {\n t7 = $[12];\n }\n const setDarkMode = t7;\n let t8;\n if ($[13] !== mergedStyles || $[14] !== setDarkMode || $[15] !== setStyles) {\n t8 = {\n styles: mergedStyles,\n containerRef,\n setStyles,\n setDarkMode\n };\n $[13] = mergedStyles;\n $[14] = setDarkMode;\n $[15] = setStyles;\n $[16] = t8;\n } else {\n t8 = $[16];\n }\n const contextValue = t8;\n let t9;\n if ($[17] === Symbol.for(\"react.memo_cache_sentinel\")) {\n t9 = {\n display: \"contents\"\n };\n $[17] = t9;\n } else {\n t9 = $[17];\n }\n let t10;\n if ($[18] !== children || $[19] !== containerRefCallback) {\n t10 = /*#__PURE__*/_jsx(\"div\", {\n ref: containerRefCallback,\n className: \"canvas-style-scope\",\n style: t9,\n children: children\n });\n $[18] = children;\n $[19] = containerRefCallback;\n $[20] = t10;\n } else {\n t10 = $[20];\n }\n let t11;\n if ($[21] !== contextValue || $[22] !== t10) {\n t11 = /*#__PURE__*/_jsx(CanvasStyleContext, {\n value: contextValue,\n children: t10\n });\n $[21] = contextValue;\n $[22] = t10;\n $[23] = t11;\n } else {\n t11 = $[23];\n }\n return t11;\n}\n\n/**\n * Hook to access the current canvas style configuration.\n * Returns fully resolved styles (merged with defaults) and control functions.\n */\nexport function useCanvasStyle() {\n const context = useContext(CanvasStyleContext);\n if (!context) {\n throw new Error(\"useCanvasStyle must be used within a CanvasStyleProvider\");\n }\n return context.styles;\n}\n\n/**\n * Hook for programmatic theme control.\n * Allows changing styles and dark mode at runtime.\n *\n * @example\n * ```tsx\n * function ThemeToggle() {\n * const { setDarkMode, setStyles, isDark, styles } = useCanvasTheme();\n *\n * return (\n * \n * );\n * }\n * ```\n */\nexport function useCanvasTheme() {\n const $ = _c(10);\n const context = useContext(CanvasStyleContext);\n const [isDark, setIsDarkAtom] = useAtom(canvasIsDarkAtom);\n const [styleOverrides, setStyleOverrides] = useAtom(canvasStyleOverridesAtom);\n if (!context) {\n throw new Error(\"useCanvasTheme must be used within a CanvasStyleProvider\");\n }\n let t0;\n if ($[0] !== setIsDarkAtom || $[1] !== setStyleOverrides) {\n t0 = () => {\n setStyleOverrides(undefined);\n setIsDarkAtom(false);\n };\n $[0] = setIsDarkAtom;\n $[1] = setStyleOverrides;\n $[2] = t0;\n } else {\n t0 = $[2];\n }\n let t1;\n if ($[3] !== context.setDarkMode || $[4] !== context.setStyles || $[5] !== context.styles || $[6] !== isDark || $[7] !== styleOverrides || $[8] !== t0) {\n t1 = {\n styles: context.styles,\n isDark,\n styleOverrides,\n setDarkMode: context.setDarkMode,\n setStyles: context.setStyles,\n resetStyles: t0\n };\n $[3] = context.setDarkMode;\n $[4] = context.setStyles;\n $[5] = context.styles;\n $[6] = isDark;\n $[7] = styleOverrides;\n $[8] = t0;\n $[9] = t1;\n } else {\n t1 = $[9];\n }\n return t1;\n}","import { c as _c } from \"react/compiler-runtime\";\n/**\n * Canvas Component\n *\n * Main orchestrating component that combines Viewport, Nodes, and Edges.\n * Uses the v2 gesture pipeline — all gesture routing flows through\n * InputProvider → useCanvasGestures / useNodeGestures.\n */\n\nimport React from 'react';\nimport { Viewport } from './Viewport';\nimport { NodeRenderer } from './NodeRenderer';\nimport { EdgeRenderer } from './EdgeRenderer';\nimport { EdgeLabelEditor } from './EdgeLabelEditor';\nimport { EdgePreviewLine } from './EdgePreviewLine';\nimport { useSelectionChangeEffect } from '../hooks/useSelectionChangeEffect';\nimport { useViewportChangeEffect } from '../hooks/useViewportChangeEffect';\nimport { useDragLifecycleEffect } from '../hooks/useDragLifecycleEffect';\nimport { InputProvider } from '../gestures/GestureProvider';\nimport { jsx as _jsx, jsxs as _jsxs } from \"react/jsx-runtime\";\nexport function Canvas(t0) {\n const $ = _c(44);\n let children;\n let gestureConfig;\n let nodeWrapper;\n let onAction;\n let onDragEnd;\n let onDragStart;\n let onEdgeClick;\n let onEdgeDoubleClick;\n let onEdgeHover;\n let onEdgeLeave;\n let onEdgeRightClick;\n let onNodePersist;\n let onNodePersistError;\n let onNodeRenderError;\n let onSelectionChange;\n let onViewportChange;\n let renderErrorFallback;\n let renderNode;\n let viewportProps;\n if ($[0] !== t0) {\n ({\n renderNode,\n onEdgeClick,\n onEdgeDoubleClick,\n onEdgeRightClick,\n onEdgeHover,\n onEdgeLeave,\n onSelectionChange,\n onViewportChange,\n onDragStart,\n onDragEnd,\n onNodePersist,\n onNodePersistError,\n onNodeRenderError,\n renderErrorFallback,\n gestureConfig,\n onAction,\n nodeWrapper,\n children,\n ...viewportProps\n } = t0);\n $[0] = t0;\n $[1] = children;\n $[2] = gestureConfig;\n $[3] = nodeWrapper;\n $[4] = onAction;\n $[5] = onDragEnd;\n $[6] = onDragStart;\n $[7] = onEdgeClick;\n $[8] = onEdgeDoubleClick;\n $[9] = onEdgeHover;\n $[10] = onEdgeLeave;\n $[11] = onEdgeRightClick;\n $[12] = onNodePersist;\n $[13] = onNodePersistError;\n $[14] = onNodeRenderError;\n $[15] = onSelectionChange;\n $[16] = onViewportChange;\n $[17] = renderErrorFallback;\n $[18] = renderNode;\n $[19] = viewportProps;\n } else {\n children = $[1];\n gestureConfig = $[2];\n nodeWrapper = $[3];\n onAction = $[4];\n onDragEnd = $[5];\n onDragStart = $[6];\n onEdgeClick = $[7];\n onEdgeDoubleClick = $[8];\n onEdgeHover = $[9];\n onEdgeLeave = $[10];\n onEdgeRightClick = $[11];\n onNodePersist = $[12];\n onNodePersistError = $[13];\n onNodeRenderError = $[14];\n onSelectionChange = $[15];\n onViewportChange = $[16];\n renderErrorFallback = $[17];\n renderNode = $[18];\n viewportProps = $[19];\n }\n useSelectionChangeEffect(onSelectionChange);\n useViewportChangeEffect(onViewportChange);\n useDragLifecycleEffect(onDragStart, onDragEnd);\n let t1;\n if ($[20] !== onEdgeClick || $[21] !== onEdgeDoubleClick || $[22] !== onEdgeHover || $[23] !== onEdgeLeave || $[24] !== onEdgeRightClick) {\n t1 = /*#__PURE__*/_jsx(EdgeRenderer, {\n onEdgeClick: onEdgeClick,\n onEdgeDoubleClick: onEdgeDoubleClick,\n onEdgeRightClick: onEdgeRightClick,\n onEdgeHover: onEdgeHover,\n onEdgeLeave: onEdgeLeave\n });\n $[20] = onEdgeClick;\n $[21] = onEdgeDoubleClick;\n $[22] = onEdgeHover;\n $[23] = onEdgeLeave;\n $[24] = onEdgeRightClick;\n $[25] = t1;\n } else {\n t1 = $[25];\n }\n let t2;\n if ($[26] === Symbol.for(\"react.memo_cache_sentinel\")) {\n t2 = /*#__PURE__*/_jsx(EdgePreviewLine, {});\n $[26] = t2;\n } else {\n t2 = $[26];\n }\n let t3;\n if ($[27] !== nodeWrapper || $[28] !== onNodePersist || $[29] !== onNodePersistError || $[30] !== onNodeRenderError || $[31] !== renderErrorFallback || $[32] !== renderNode) {\n t3 = /*#__PURE__*/_jsx(NodeRenderer, {\n renderNode: renderNode,\n onNodePersist: onNodePersist,\n onNodePersistError: onNodePersistError,\n onNodeRenderError: onNodeRenderError,\n renderErrorFallback: renderErrorFallback,\n nodeWrapper: nodeWrapper\n });\n $[27] = nodeWrapper;\n $[28] = onNodePersist;\n $[29] = onNodePersistError;\n $[30] = onNodeRenderError;\n $[31] = renderErrorFallback;\n $[32] = renderNode;\n $[33] = t3;\n } else {\n t3 = $[33];\n }\n let t4;\n if ($[34] === Symbol.for(\"react.memo_cache_sentinel\")) {\n t4 = /*#__PURE__*/_jsx(EdgeLabelEditor, {});\n $[34] = t4;\n } else {\n t4 = $[34];\n }\n let t5;\n if ($[35] !== children || $[36] !== t1 || $[37] !== t3 || $[38] !== viewportProps) {\n t5 = /*#__PURE__*/_jsxs(Viewport, {\n ...viewportProps,\n children: [t1, t2, t3, t4, children]\n });\n $[35] = children;\n $[36] = t1;\n $[37] = t3;\n $[38] = viewportProps;\n $[39] = t5;\n } else {\n t5 = $[39];\n }\n let t6;\n if ($[40] !== gestureConfig || $[41] !== onAction || $[42] !== t5) {\n t6 = /*#__PURE__*/_jsx(InputProvider, {\n gestureConfig: gestureConfig,\n onAction: onAction,\n children: t5\n });\n $[40] = gestureConfig;\n $[41] = onAction;\n $[42] = t5;\n $[43] = t6;\n } else {\n t6 = $[43];\n }\n return t6;\n}","import { c as _c } from \"react/compiler-runtime\";\n/**\n * Viewport Component — v3 (Gesture System v2 integration)\n *\n * Thin rendering shell. All gesture handling is delegated to\n * useCanvasGestures via the GestureProvider context.\n */\n\nimport React, { useEffect, useRef } from 'react';\nimport { useAtomValue } from 'jotai';\nimport { zoomAtom, panAtom, viewportRectAtom } from '../core/viewport-store';\nimport { useCanvasGestures } from '../gestures/useCanvasGestures';\nimport { useInputContext } from '../gestures/GestureProvider';\nimport { Grid, Crosshairs } from './Grid';\nimport { jsx as _jsx, Fragment as _Fragment, jsxs as _jsxs } from \"react/jsx-runtime\";\n/**\n * Canvas viewport with pan/zoom support.\n * Touch-first: works natively with finger, Apple Pencil, and mouse.\n */\nexport function Viewport(t0) {\n const $ = _c(28);\n const {\n children,\n minZoom: t1,\n maxZoom: t2,\n zoomSensitivity: t3,\n className,\n style,\n enablePan: t4,\n enableZoom: t5\n } = t0;\n const minZoom = t1 === undefined ? 0.1 : t1;\n const maxZoom = t2 === undefined ? 5 : t2;\n const zoomSensitivity = t3 === undefined ? 0.0015 : t3;\n const enablePan = t4 === undefined ? true : t4;\n const enableZoom = t5 === undefined ? true : t5;\n const panVals = useAtomValue(panAtom);\n const zoomVal = useAtomValue(zoomAtom);\n const viewportRect = useAtomValue(viewportRectAtom);\n const viewportRef = useRef(null);\n const {\n system,\n onAction,\n registerCanvasRoot\n } = useInputContext();\n let t6;\n let t7;\n if ($[0] !== registerCanvasRoot) {\n t6 = () => {\n registerCanvasRoot(viewportRef.current);\n return () => registerCanvasRoot(null);\n };\n t7 = [registerCanvasRoot];\n $[0] = registerCanvasRoot;\n $[1] = t6;\n $[2] = t7;\n } else {\n t6 = $[1];\n t7 = $[2];\n }\n useEffect(t6, t7);\n let t8;\n if ($[3] !== enablePan || $[4] !== enableZoom || $[5] !== maxZoom || $[6] !== minZoom || $[7] !== onAction || $[8] !== system.heldKeys || $[9] !== system.mappingIndex || $[10] !== zoomSensitivity) {\n t8 = {\n ref: viewportRef,\n minZoom,\n maxZoom,\n zoomSensitivity,\n enablePan,\n enableZoom,\n mappingIndex: system.mappingIndex,\n onAction,\n heldKeys: system.heldKeys\n };\n $[3] = enablePan;\n $[4] = enableZoom;\n $[5] = maxZoom;\n $[6] = minZoom;\n $[7] = onAction;\n $[8] = system.heldKeys;\n $[9] = system.mappingIndex;\n $[10] = zoomSensitivity;\n $[11] = t8;\n } else {\n t8 = $[11];\n }\n useCanvasGestures(t8);\n let t9;\n if ($[12] !== style) {\n t9 = {\n width: \"100%\",\n height: \"100%\",\n overflow: \"hidden\",\n position: \"relative\",\n touchAction: \"none\",\n userSelect: \"none\",\n WebkitUserSelect: \"none\",\n WebkitTouchCallout: \"none\",\n background: \"var(--canvas-bg, #23272a)\",\n ...style\n };\n $[12] = style;\n $[13] = t9;\n } else {\n t9 = $[13];\n }\n const t10 = `translate(${panVals.x}px, ${panVals.y}px) scale(${zoomVal})`;\n let t11;\n if ($[14] !== t10) {\n t11 = {\n transform: t10,\n transformOrigin: \"0 0\",\n width: \"100%\",\n height: \"100%\"\n };\n $[14] = t10;\n $[15] = t11;\n } else {\n t11 = $[15];\n }\n let t12;\n if ($[16] !== panVals || $[17] !== viewportRect || $[18] !== zoomVal) {\n t12 = viewportRect && viewportRect.width > 0 && viewportRect.height > 0 && /*#__PURE__*/_jsxs(_Fragment, {\n children: [/*#__PURE__*/_jsx(Grid, {\n pan: panVals,\n zoom: zoomVal,\n viewportWidth: viewportRect.width,\n viewportHeight: viewportRect.height\n }), /*#__PURE__*/_jsx(Crosshairs, {\n pan: panVals,\n zoom: zoomVal,\n viewportWidth: viewportRect.width,\n viewportHeight: viewportRect.height\n })]\n });\n $[16] = panVals;\n $[17] = viewportRect;\n $[18] = zoomVal;\n $[19] = t12;\n } else {\n t12 = $[19];\n }\n let t13;\n if ($[20] !== children || $[21] !== t11 || $[22] !== t12) {\n t13 = /*#__PURE__*/_jsxs(\"div\", {\n style: t11,\n children: [t12, children]\n });\n $[20] = children;\n $[21] = t11;\n $[22] = t12;\n $[23] = t13;\n } else {\n t13 = $[23];\n }\n let t14;\n if ($[24] !== className || $[25] !== t13 || $[26] !== t9) {\n t14 = /*#__PURE__*/_jsx(\"div\", {\n ref: viewportRef,\n id: \"viewport-canvas\",\n className: className,\n \"data-viewport\": \"true\",\n \"data-canvas-root\": \"true\",\n tabIndex: -1,\n style: t9,\n children: t13\n });\n $[24] = className;\n $[25] = t13;\n $[26] = t9;\n $[27] = t14;\n } else {\n t14 = $[27];\n }\n return t14;\n}","/**\n * useCanvasGestures — Main viewport gesture hook\n *\n * Wires @use-gesture/react → recognize → resolve → dispatch.\n *\n * Responsibilities:\n * - Pointer tracking (down/up/cancel) via input-store\n * - Tap/double-tap/long-press via TimedStateRunner\n * - Drag intent resolution via mapper\n * - Pan with inertia (delegated to useInertia)\n * - Pinch zoom with inertia + snap-to-100%\n * - Wheel zoom\n * - Lasso / rect-select routing\n * - pointercancel + visibilitychange cleanup\n *\n * Guard context is built by useGuardContext.\n * Inertia is managed by useInertia.\n */\n\nimport { useRef, useEffect, useMemo } from 'react';\nimport { useAtom, useSetAtom, useAtomValue } from 'jotai';\nimport { useGesture } from '@use-gesture/react';\nimport { zoomAtom, panAtom, viewportRectAtom, screenToWorldAtom } from '../core/viewport-store';\nimport { clearSelectionAtom, selectedNodeIdsAtom } from '../core/selection-store';\nimport { classifyPointer } from '../core/input-classifier';\nimport { pointerDownAtom, pointerUpAtom, primaryInputSourceAtom, clearPointersAtom } from '../core/input-store';\nimport { prefersReducedMotionAtom } from '../core/reduced-motion-store';\nimport { startSelectionAtom, updateSelectionAtom, endSelectionAtom } from '../core/selection-path-store';\nimport { extractModifiers } from './normalize';\nimport { TimedStateRunner } from './timed-state-runner';\nimport { buildMappingIndex, resolve } from './mapper';\nimport { dispatch } from './dispatcher';\nimport { PALM_REJECTION_CONTEXT, DEFAULT_CONTEXT } from './contexts';\nimport { useGuardContext } from './useGuardContext';\nimport { useInertia, INERTIA_MIN_SPEED } from './useInertia';\nimport { createWheelHandler } from './useWheelZoom';\nimport { createPinchHandlers } from './usePinchZoom';\nimport { NO_HELD_KEYS, NO_MODIFIERS } from './types';\n\n// =============================================================================\n// Config\n// =============================================================================\n\n// =============================================================================\n// Hook\n// =============================================================================\n\nexport function useCanvasGestures({\n ref,\n minZoom = 0.1,\n maxZoom = 5,\n zoomSensitivity = 0.0015,\n enablePan = true,\n enableZoom = true,\n mappingIndex: externalIndex,\n contexts: extraContexts,\n palmRejection = true,\n onAction,\n heldKeys = NO_HELD_KEYS\n}) {\n // --- Jotai atoms ---\n const [panVals, setPan] = useAtom(panAtom);\n const [zoomVal, setZoom] = useAtom(zoomAtom);\n const setViewportRect = useSetAtom(viewportRectAtom);\n const selectedNodeIds = useAtomValue(selectedNodeIdsAtom);\n const clearSelection = useSetAtom(clearSelectionAtom);\n const screenToWorld = useAtomValue(screenToWorldAtom);\n\n // Input tracking\n const setPointerDown = useSetAtom(pointerDownAtom);\n const setPointerUp = useSetAtom(pointerUpAtom);\n const clearPointers = useSetAtom(clearPointersAtom);\n const primaryInputSource = useAtomValue(primaryInputSourceAtom);\n const reducedMotion = useAtomValue(prefersReducedMotionAtom);\n\n // Selection path (lasso / rect-select)\n const startSelection = useSetAtom(startSelectionAtom);\n const updateSelection = useSetAtom(updateSelectionAtom);\n const endSelection = useSetAtom(endSelectionAtom);\n\n // --- Extracted hooks ---\n const guardRef = useGuardContext(heldKeys);\n const inertia = useInertia();\n\n // --- Refs (mutable, no re-renders) ---\n const panStartRef = useRef({\n x: 0,\n y: 0\n });\n const dragOriginatedOnBg = useRef(false);\n const dragSourceRef = useRef('mouse');\n const buttonRef = useRef(0);\n const dragIntentRef = useRef('none');\n\n // Timed state (tap counting / long-press)\n const timedRunner = useRef(new TimedStateRunner());\n\n // --- Build mapping index (use external if provided) ---\n const internalIndex = useMemo(() => {\n const ctxList = [];\n if (palmRejection) ctxList.push(PALM_REJECTION_CONTEXT);\n if (extraContexts) ctxList.push(...extraContexts);\n ctxList.push(DEFAULT_CONTEXT);\n return buildMappingIndex(ctxList);\n }, [palmRejection, extraContexts]);\n const mappingIndex = externalIndex ?? internalIndex;\n\n // --- Helpers ---\n\n const isBackgroundTarget = target => {\n if (!ref.current || !target) return false;\n const child = ref.current.firstChild;\n return target === ref.current || target === child;\n };\n const makeGestureEvent = (type, phase, subject, screenX, screenY, extra) => {\n const worldPos = screenToWorld(screenX, screenY);\n return {\n kind: 'pointer',\n type,\n phase,\n subject,\n source: dragSourceRef.current,\n button: buttonRef.current,\n modifiers: NO_MODIFIERS,\n heldKeys,\n screenPosition: {\n x: screenX,\n y: screenY\n },\n worldPosition: worldPos,\n ...extra\n };\n };\n const resolveAndDispatch = event => {\n const resolution = resolve(event, mappingIndex, guardRef.current);\n if (resolution) {\n dispatch(event, resolution);\n onAction?.(event, resolution);\n }\n return resolution;\n };\n\n // --- Timed state emit handler (for async timer-based gestures like long-press) ---\n useEffect(() => {\n const runner = timedRunner.current;\n runner.onEmit = _gestureType => {\n // Long-press fires asynchronously from the timer.\n // Position is captured at pointer-down time via the onPointerDown handler.\n };\n return () => {\n runner.destroy();\n };\n }, []);\n\n // --- Viewport resize observer ---\n useEffect(() => {\n const el = ref.current;\n if (!el) {\n setViewportRect(null);\n return;\n }\n setViewportRect(el.getBoundingClientRect());\n const observer = new ResizeObserver(entries => {\n for (const entry of entries) {\n setViewportRect(entry.contentRect);\n }\n });\n observer.observe(el);\n return () => {\n observer.unobserve(el);\n observer.disconnect();\n };\n }, [setViewportRect]);\n\n // --- Cleanup on unmount ---\n useEffect(() => {\n return () => {\n inertia.cancelAll();\n timedRunner.current.destroy();\n };\n }, []);\n\n // --- Visibility change: clear pointers + cancel inertia ---\n useEffect(() => {\n const handleVisChange = () => {\n if (document.hidden) {\n inertia.cancelAll();\n clearPointers();\n timedRunner.current.feed('cancel');\n }\n };\n document.addEventListener('visibilitychange', handleVisChange);\n return () => document.removeEventListener('visibilitychange', handleVisChange);\n }, [clearPointers]);\n\n // ==========================================================================\n // @use-gesture binding\n // ==========================================================================\n\n useGesture({\n onPointerDown: state => {\n if (!ref.current) {\n dragOriginatedOnBg.current = false;\n return;\n }\n const pe = state.event;\n const classified = classifyPointer(pe);\n setPointerDown(classified);\n dragSourceRef.current = classified.source;\n buttonRef.current = pe.button ?? 0;\n\n // Cancel inertia on new touch\n inertia.cancelAll();\n if (isBackgroundTarget(state.event.target)) {\n dragOriginatedOnBg.current = true;\n\n // Feed timed state machine for tap/long-press tracking\n timedRunner.current.feed('down');\n\n // Wire the long-press timer emit\n const startX = pe.clientX;\n const startY = pe.clientY;\n timedRunner.current.onEmit = gestureType => {\n if (gestureType === 'long-press') {\n const worldPos_0 = screenToWorld(startX, startY);\n const event_0 = makeGestureEvent('long-press', 'instant', {\n kind: 'background'\n }, startX, startY, {\n modifiers: extractModifiers(pe),\n worldPosition: worldPos_0\n });\n resolveAndDispatch(event_0);\n }\n };\n } else {\n dragOriginatedOnBg.current = false;\n }\n },\n onPointerUp: state_0 => {\n const pe_0 = state_0.event;\n setPointerUp(pe_0.pointerId);\n },\n onDragStart: ({\n event: event_1\n }) => {\n if (!dragOriginatedOnBg.current) return;\n const pe_1 = event_1;\n const modifiers = pe_1 ? extractModifiers(pe_1) : NO_MODIFIERS;\n\n // Resolve drag intent once at start\n const gestureEvent = makeGestureEvent('drag', 'start', {\n kind: 'background'\n }, pe_1?.clientX ?? 0, pe_1?.clientY ?? 0, {\n modifiers\n });\n const resolution_0 = resolve(gestureEvent, mappingIndex, guardRef.current);\n dragIntentRef.current = resolution_0?.actionId ?? 'none';\n if (dragIntentRef.current === 'pan' && enablePan) {\n panStartRef.current = {\n ...panVals\n };\n inertia.panSampler.reset();\n } else if (dragIntentRef.current === 'lasso-select' || dragIntentRef.current === 'rect-select') {\n const worldPos_1 = screenToWorld(pe_1?.clientX ?? 0, pe_1?.clientY ?? 0);\n startSelection({\n type: dragIntentRef.current === 'lasso-select' ? 'lasso' : 'rect',\n point: worldPos_1\n });\n }\n\n // Dispatch the start phase\n if (resolution_0) {\n dispatch(gestureEvent, resolution_0);\n onAction?.(gestureEvent, resolution_0);\n }\n },\n onDrag: ({\n movement: [mx, my],\n tap,\n active,\n pinching,\n event: event_2,\n velocity: [vx, vy],\n direction: [dx, dy]\n }) => {\n if (tap && dragOriginatedOnBg.current) {\n // Tap on background — the timed runner tracks tap counting.\n const emitted = timedRunner.current.feed('up');\n const pe_2 = event_2;\n const modifiers_0 = extractModifiers(pe_2);\n const tapType = emitted ?? 'tap';\n const gestureEvent_0 = makeGestureEvent(tapType, 'instant', {\n kind: 'background'\n }, pe_2.clientX, pe_2.clientY, {\n modifiers: modifiers_0\n });\n const resolution_1 = resolve(gestureEvent_0, mappingIndex, guardRef.current);\n if (resolution_1) {\n dispatch(gestureEvent_0, resolution_1);\n onAction?.(gestureEvent_0, resolution_1);\n } else {\n clearSelection();\n }\n return;\n }\n if (!tap && active && !pinching && dragOriginatedOnBg.current) {\n // Cancel long-press on drag movement\n timedRunner.current.feed('move-beyond-threshold');\n const intent = dragIntentRef.current;\n if (intent === 'pan' && enablePan) {\n setPan({\n x: panStartRef.current.x + mx,\n y: panStartRef.current.y + my\n });\n const now = performance.now();\n inertia.panSampler.sample(vx * dx, vy * dy, now);\n } else if (intent === 'lasso-select' || intent === 'rect-select') {\n const pe_3 = event_2;\n const worldPos_2 = screenToWorld(pe_3.clientX, pe_3.clientY);\n updateSelection(worldPos_2);\n }\n }\n },\n onDragEnd: () => {\n timedRunner.current.feed('up');\n const intent_0 = dragIntentRef.current;\n if (intent_0 === 'lasso-select' || intent_0 === 'rect-select') {\n endSelection();\n }\n\n // Pan inertia for finger drags (skip if reduced motion)\n if (!reducedMotion && dragOriginatedOnBg.current && dragSourceRef.current === 'finger' && intent_0 === 'pan') {\n const avg = inertia.panSampler.average();\n const speed = Math.sqrt(avg.x ** 2 + avg.y ** 2);\n if (speed > INERTIA_MIN_SPEED) {\n inertia.startPanInertia(avg, setPan);\n }\n }\n dragOriginatedOnBg.current = false;\n dragIntentRef.current = 'none';\n inertia.panSampler.reset();\n },\n onWheel: createWheelHandler({\n ref,\n minZoom,\n maxZoom,\n zoomSensitivity,\n enableZoom,\n zoom: zoomVal,\n pan: panVals,\n selectedNodeIds,\n setZoom,\n setPan\n }),\n ...createPinchHandlers({\n ref,\n minZoom,\n maxZoom,\n enableZoom,\n reducedMotion,\n zoom: zoomVal,\n pan: panVals,\n setZoom,\n setPan,\n inertia\n })\n }, {\n target: ref,\n eventOptions: {\n passive: false,\n capture: true\n },\n drag: {\n filterTaps: true,\n tapsThreshold: primaryInputSource === 'finger' ? 10 : 5,\n pointer: {\n touch: true,\n keys: false,\n capture: false,\n buttons: -1\n }\n },\n wheel: {},\n pinch: {\n scaleBounds: () => ({\n min: minZoom,\n max: maxZoom\n }),\n from: () => [zoomVal, 0]\n }\n });\n}","/**\n * Layer 1: Normalize\n *\n * Converts raw DOM PointerEvents into NormalizedPointer structs.\n * Pure functions — no side effects, no DOM listeners.\n */\n\nimport { classifyPointer } from '../core/input-classifier';\nimport { NO_MODIFIERS } from './types';\n\n/**\n * Extract modifiers from any DOM event with modifier flags.\n */\nexport function extractModifiers(e) {\n if (!e.shiftKey && !e.ctrlKey && !e.altKey && !e.metaKey) {\n return NO_MODIFIERS;\n }\n return {\n shift: e.shiftKey,\n ctrl: e.ctrlKey,\n alt: e.altKey,\n meta: e.metaKey\n };\n}\n\n/**\n * Clamp a raw button value to 0 | 1 | 2.\n */\nfunction clampButton(raw) {\n if (raw === 1) return 1;\n if (raw === 2) return 2;\n return 0;\n}\n\n/**\n * Determine pointer lifecycle from event type.\n */\nfunction lifecycleFromEventType(type) {\n switch (type) {\n case 'pointerdown':\n return 'down';\n case 'pointerup':\n return 'up';\n case 'pointercancel':\n return 'cancel';\n default:\n return 'move';\n }\n}\n\n/**\n * Normalize a raw PointerEvent into a NormalizedPointer.\n */\nexport function normalizePointer(e) {\n const classified = classifyPointer(e);\n return {\n pointerId: e.pointerId,\n lifecycle: lifecycleFromEventType(e.type),\n source: classified.source,\n button: clampButton(e.button),\n modifiers: extractModifiers(e),\n screenX: e.clientX,\n screenY: e.clientY,\n pressure: e.pressure,\n timestamp: e.timeStamp\n };\n}","/**\n * Layer 2: Timed State Machine\n *\n * Per-pointer state machine for recognizing taps, double-taps,\n * triple-taps, and long-press. Pure functions — no timers inside.\n * The caller manages setTimeout via the returned timer commands.\n *\n * State diagram:\n * idle → pressed (on down)\n * pressed → released (on up, emit tap/double-tap/triple-tap)\n * pressed → idle (on move-beyond-threshold, becomes drag)\n * pressed → long-pressed (on long-press-timer)\n * released → pressed (on down within multi-tap window)\n * released → idle (on settle-timer)\n * long-pressed → idle (on up)\n * any → idle (on cancel)\n */\n\n// Timer IDs\nexport const LONG_PRESS_TIMER = 'long-press';\nexport const SETTLE_TIMER = 'settle';\n\n// Defaults (overridable via config)\nexport const DEFAULT_LONG_PRESS_MS = 600;\nexport const DEFAULT_MULTI_TAP_WINDOW_MS = 300;\nexport const IDLE = {\n tag: 'idle',\n tapCount: 0\n};\nconst DEFAULT_CONFIG = {\n longPressMs: DEFAULT_LONG_PRESS_MS,\n multiTapWindowMs: DEFAULT_MULTI_TAP_WINDOW_MS\n};\n\n/**\n * Pure state transition. Returns new state + optional side effects\n * (emit gesture, schedule/cancel timer).\n */\nexport function transition(state, event, config = DEFAULT_CONFIG) {\n switch (event) {\n case 'down':\n return onDown(state, config);\n case 'up':\n return onUp(state, config);\n case 'move-beyond-threshold':\n return onMoveBeyond(state);\n case 'cancel':\n return onCancel();\n case 'timer:long-press':\n return onLongPressTimer(state);\n case 'timer:settle':\n return onSettleTimer();\n default:\n return {\n state\n };\n }\n}\nfunction onDown(state, config) {\n switch (state.tag) {\n case 'idle':\n return {\n state: {\n tag: 'pressed',\n tapCount: 0\n },\n cancelTimer: SETTLE_TIMER,\n scheduleTimer: {\n id: LONG_PRESS_TIMER,\n delayMs: config.longPressMs\n }\n };\n case 'released':\n // Continue multi-tap sequence\n return {\n state: {\n tag: 'pressed',\n tapCount: state.tapCount\n },\n cancelTimer: SETTLE_TIMER,\n scheduleTimer: {\n id: LONG_PRESS_TIMER,\n delayMs: config.longPressMs\n }\n };\n default:\n return {\n state\n };\n }\n}\nfunction onUp(state, config) {\n if (state.tag !== 'pressed') {\n // long-pressed → idle on up\n if (state.tag === 'long-pressed') {\n return {\n state: IDLE,\n cancelTimer: LONG_PRESS_TIMER\n };\n }\n return {\n state\n };\n }\n const newCount = state.tapCount + 1;\n const emit = tapTypeForCount(newCount);\n return {\n state: {\n tag: 'released',\n tapCount: newCount\n },\n emit,\n cancelTimer: LONG_PRESS_TIMER,\n scheduleTimer: {\n id: SETTLE_TIMER,\n delayMs: config.multiTapWindowMs\n }\n };\n}\nfunction onMoveBeyond(state) {\n if (state.tag === 'pressed') {\n return {\n state: IDLE,\n cancelTimer: LONG_PRESS_TIMER\n };\n }\n return {\n state\n };\n}\nfunction onCancel() {\n return {\n state: IDLE,\n cancelTimer: LONG_PRESS_TIMER\n };\n}\nfunction onLongPressTimer(state) {\n if (state.tag === 'pressed') {\n return {\n state: {\n tag: 'long-pressed',\n tapCount: 0\n },\n emit: 'long-press'\n };\n }\n return {\n state\n };\n}\nfunction onSettleTimer() {\n return {\n state: IDLE\n };\n}\nfunction tapTypeForCount(count) {\n switch (count) {\n case 2:\n return 'double-tap';\n case 3:\n return 'triple-tap';\n default:\n return 'tap';\n }\n}","/**\n * Timed State Runner\n *\n * Timer bridge that wraps the pure TimedState transitions with actual\n * setTimeout/clearTimeout. Each pointer gets its own runner.\n *\n * The runner is imperative on purpose — it's managed by refs in hooks,\n * not by React state. This avoids re-renders on timer state changes.\n */\n\nimport { transition, IDLE, DEFAULT_LONG_PRESS_MS, DEFAULT_MULTI_TAP_WINDOW_MS } from './timed-state';\nexport class TimedStateRunner {\n state = IDLE;\n timers = new Map();\n /** Called when the state machine emits a gesture (tap, double-tap, long-press, etc.) */\n onEmit = null;\n constructor(config) {\n this.config = {\n longPressMs: config?.longPressMs ?? DEFAULT_LONG_PRESS_MS,\n multiTapWindowMs: config?.multiTapWindowMs ?? DEFAULT_MULTI_TAP_WINDOW_MS\n };\n }\n\n /**\n * Feed a lifecycle event into the state machine.\n * Returns the emitted gesture type if any (synchronous emit only).\n * Timer-based emits are delivered asynchronously via `onEmit`.\n */\n feed(event) {\n return this.apply(event);\n }\n\n /** Current state tag (for debugging/testing). */\n get tag() {\n return this.state.tag;\n }\n\n /** Destroy: cancel all pending timers. */\n destroy() {\n for (const timer of this.timers.values()) {\n clearTimeout(timer);\n }\n this.timers.clear();\n this.state = IDLE;\n this.onEmit = null;\n }\n apply(event) {\n const result = transition(this.state, event, this.config);\n this.state = result.state;\n if (result.cancelTimer) {\n const timer = this.timers.get(result.cancelTimer);\n if (timer !== undefined) {\n clearTimeout(timer);\n this.timers.delete(result.cancelTimer);\n }\n }\n if (result.scheduleTimer) {\n const {\n id,\n delayMs\n } = result.scheduleTimer;\n // Clear any existing timer with this id\n const existing = this.timers.get(id);\n if (existing !== undefined) {\n clearTimeout(existing);\n }\n this.timers.set(id, setTimeout(() => {\n this.timers.delete(id);\n const timerEvent = `timer:${id}`;\n const timerResult = transition(this.state, timerEvent, this.config);\n this.state = timerResult.state;\n if (timerResult.emit) {\n this.onEmit?.(timerResult.emit);\n }\n }, delayMs));\n }\n return result.emit;\n }\n}","/**\n * Layer 3: Specificity Scoring\n *\n * Scores how well an InputPattern matches an InputEvent.\n * Higher score = more specific match. Returns -1 on mismatch.\n *\n * Score weights:\n * type 128 (must outweigh all others combined)\n * subjectKind 32\n * modifier+ 16 (per positive flag)\n * modifier- 8 (per negative flag)\n * source 4\n * button 2\n */\n\nimport { isKeyInputEvent, isPointerGestureEvent } from './types';\nconst SCORE_TYPE = 128;\nconst SCORE_KEY = 64;\nconst SCORE_CODE = 64;\nconst SCORE_SUBJECT = 32;\nconst SCORE_MODIFIER_POSITIVE = 16;\nconst SCORE_MODIFIER_NEGATIVE = 8;\nconst SCORE_HELD_KEY_POSITIVE = 16;\nconst SCORE_HELD_KEY_NEGATIVE = 8;\nconst SCORE_SOURCE = 4;\nconst SCORE_BUTTON = 2;\n\n/**\n * Compute the specificity score of a pattern against an event.\n * Returns -1 if the pattern does not match.\n */\nexport function specificity(pattern, event) {\n let score = 0;\n\n // kind\n if (pattern.kind !== undefined) {\n const actualKind = isKeyInputEvent(event) ? 'key' : 'pointer';\n if (pattern.kind !== actualKind) return -1;\n }\n\n // type\n if (pattern.type !== undefined) {\n if (!isPointerGestureEvent(event) || pattern.type !== event.type) return -1;\n score += SCORE_TYPE;\n }\n\n // subjectKind\n if (pattern.subjectKind !== undefined) {\n if (event.subject === undefined || pattern.subjectKind !== event.subject.kind) return -1;\n score += SCORE_SUBJECT;\n }\n\n // phase\n if (pattern.phase !== undefined && pattern.phase !== event.phase) {\n return -1;\n }\n\n // source\n if (pattern.source !== undefined) {\n if (!isPointerGestureEvent(event)) return -1;\n if (pattern.source !== event.source) return -1;\n score += SCORE_SOURCE;\n }\n\n // button\n if (pattern.button !== undefined) {\n if (!isPointerGestureEvent(event)) return -1;\n if (pattern.button !== event.button) return -1;\n score += SCORE_BUTTON;\n }\n\n // key / code\n if (pattern.key !== undefined) {\n if (!isKeyInputEvent(event) || pattern.key !== event.key) return -1;\n score += SCORE_KEY;\n }\n if (pattern.code !== undefined) {\n if (!isKeyInputEvent(event) || pattern.code !== event.code) return -1;\n score += SCORE_CODE;\n }\n\n // modifiers\n if (pattern.modifiers !== undefined) {\n const ms = modifierScore(pattern.modifiers, event.modifiers);\n if (ms === -1) return -1;\n score += ms;\n }\n\n // held keys\n if (pattern.heldKeys !== undefined) {\n const hs = heldKeyScore(pattern.heldKeys, event.heldKeys);\n if (hs === -1) return -1;\n score += hs;\n }\n return score;\n}\n\n/**\n * Score modifier pattern against actual modifier state.\n * Each explicit true flag adds SCORE_MODIFIER_POSITIVE.\n * Each explicit false flag adds SCORE_MODIFIER_NEGATIVE.\n * Returns -1 if any constraint is violated.\n */\nfunction modifierScore(pattern, actual) {\n let score = 0;\n const keys = ['shift', 'ctrl', 'alt', 'meta'];\n for (const key of keys) {\n const required = pattern[key];\n if (required === undefined) continue;\n if (required !== actual[key]) return -1;\n score += required ? SCORE_MODIFIER_POSITIVE : SCORE_MODIFIER_NEGATIVE;\n }\n if (pattern.custom) {\n const actualCustom = actual.custom ?? {};\n for (const [key, required] of Object.entries(pattern.custom)) {\n const actualVal = actualCustom[key] ?? false;\n if (required !== actualVal) return -1;\n score += required ? SCORE_MODIFIER_POSITIVE : SCORE_MODIFIER_NEGATIVE;\n }\n }\n return score;\n}\nfunction heldKeyScore(pattern, actual) {\n let score = 0;\n for (const [key, required] of Object.entries(pattern.byKey ?? {})) {\n const actualVal = actual.byKey[key] ?? false;\n if (required !== actualVal) return -1;\n score += required ? SCORE_HELD_KEY_POSITIVE : SCORE_HELD_KEY_NEGATIVE;\n }\n for (const [code, required] of Object.entries(pattern.byCode ?? {})) {\n const actualVal = actual.byCode[code] ?? false;\n if (required !== actualVal) return -1;\n score += required ? SCORE_HELD_KEY_POSITIVE : SCORE_HELD_KEY_NEGATIVE;\n }\n return score;\n}","/**\n * Layer 3: Gesture Mapper\n *\n * Resolves an InputEvent against a priority-sorted stack of MappingContexts.\n * Each context is bucketed by pointer gesture type or keyboard phase for O(1) lookup.\n */\n\nimport { specificity } from './specificity';\nimport { isKeyInputEvent } from './types';\n\n// =============================================================================\n// Index\n// =============================================================================\n\n/** Pre-indexed bindings for a single MappingContext. */\n\nconst WILDCARD = '__wildcard__';\nfunction getPatternBucketKey(binding) {\n const {\n pattern\n } = binding;\n if (pattern.type !== undefined) {\n return `pointer:${pattern.type}`;\n }\n if (pattern.kind === 'key' || pattern.key !== undefined || pattern.code !== undefined) {\n return pattern.phase === 'down' || pattern.phase === 'up' ? `key:${pattern.phase}` : null;\n }\n return null;\n}\nfunction getEventBucketKey(event) {\n return isKeyInputEvent(event) ? `key:${event.phase}` : `pointer:${event.type}`;\n}\n\n/**\n * Build a lookup index from a MappingContext.\n * Wildcard bindings (no `type` in pattern) are concatenated into every bucket.\n */\nexport function indexContext(ctx) {\n const typed = new Map();\n const wildcards = [];\n for (const binding of ctx.bindings) {\n const key = getPatternBucketKey(binding);\n if (key === null) {\n wildcards.push(binding);\n } else {\n let bucket = typed.get(key);\n if (!bucket) {\n bucket = [];\n typed.set(key, bucket);\n }\n bucket.push(binding);\n }\n }\n const buckets = new Map();\n for (const [key, bucket] of typed) {\n buckets.set(key, bucket);\n }\n if (wildcards.length > 0) {\n buckets.set(WILDCARD, wildcards);\n }\n return {\n contextId: ctx.id,\n priority: ctx.priority,\n enabled: ctx.enabled,\n buckets\n };\n}\n\n// =============================================================================\n// Stack Index\n// =============================================================================\n\n/** The full indexed context stack, sorted by priority ascending. */\n\n/**\n * Build the full mapping index from a list of contexts.\n * Sorts by priority ascending (lower number = higher priority).\n */\nexport function buildMappingIndex(contexts) {\n return contexts.map(indexContext).sort((a, b) => a.priority - b.priority);\n}\n\n// =============================================================================\n// Resolution\n// =============================================================================\n\n/**\n * Resolve a gesture event against the indexed context stack.\n *\n * Algorithm:\n * 1. Walk contexts in priority order (ascending = highest priority first).\n * 2. For each enabled context, look up the bucket for event.type.\n * 3. For each binding in the bucket, compute specificity score.\n * 4. If binding has a `when` guard, evaluate it.\n * 5. Track best match per context.\n * 6. If best match has `consumeInput`, return immediately.\n * 7. Otherwise, continue to lower-priority contexts.\n * 8. Return the highest-priority best match across all contexts.\n */\nexport function resolve(event, index, guard) {\n let winner = null;\n for (const ctx of index) {\n if (!ctx.enabled) continue;\n const bucket = ctx.buckets.get(getEventBucketKey(event));\n const wildcardBucket = ctx.buckets.get(WILDCARD);\n if (!bucket && !wildcardBucket) continue;\n let bestScore = -1;\n let bestBinding = null;\n for (const binding of [...(bucket ?? []), ...(wildcardBucket ?? [])]) {\n const score = specificity(binding.pattern, event);\n if (score === -1) continue;\n if (binding.when && !binding.when(guard)) continue;\n if (score > bestScore) {\n bestScore = score;\n bestBinding = binding;\n }\n }\n if (bestBinding !== null) {\n const action = {\n actionId: bestBinding.actionId,\n binding: bestBinding,\n contextId: ctx.contextId,\n score: bestScore,\n consumed: bestBinding.consumeInput === true\n };\n if (action.consumed) {\n return action;\n }\n\n // First (highest-priority) match wins\n if (winner === null) {\n winner = action;\n }\n }\n }\n return winner;\n}","/**\n * Keyboard Mapping Contexts\n *\n * Search, manipulate, and navigate keyboard contexts extracted from contexts.ts.\n */\n\n// =============================================================================\n// Search Context (priority 25)\n// =============================================================================\n\nexport const SEARCH_CONTEXT = {\n id: 'search-active',\n priority: 25,\n enabled: true,\n bindings: [{\n id: 'search-next-enter',\n pattern: {\n kind: 'key',\n phase: 'down',\n key: 'Enter',\n modifiers: {\n shift: false\n }\n },\n actionId: 'search-next-result',\n when: ctx => ctx.isSearchActive && !ctx.commandLineVisible,\n consumeInput: true\n }, {\n id: 'search-prev-enter',\n pattern: {\n kind: 'key',\n phase: 'down',\n key: 'Enter',\n modifiers: {\n shift: true\n }\n },\n actionId: 'search-prev-result',\n when: ctx => ctx.isSearchActive && !ctx.commandLineVisible,\n consumeInput: true\n }, {\n id: 'search-next-ctrl-g',\n pattern: {\n kind: 'key',\n phase: 'down',\n key: 'g',\n modifiers: {\n ctrl: true,\n shift: false\n }\n },\n actionId: 'search-next-result',\n when: ctx => ctx.isSearchActive,\n consumeInput: true\n }, {\n id: 'search-prev-ctrl-g',\n pattern: {\n kind: 'key',\n phase: 'down',\n key: 'g',\n modifiers: {\n ctrl: true,\n shift: true\n }\n },\n actionId: 'search-prev-result',\n when: ctx => ctx.isSearchActive,\n consumeInput: true\n }, {\n id: 'search-next-meta-g',\n pattern: {\n kind: 'key',\n phase: 'down',\n key: 'g',\n modifiers: {\n meta: true,\n shift: false\n }\n },\n actionId: 'search-next-result',\n when: ctx => ctx.isSearchActive,\n consumeInput: true\n }, {\n id: 'search-prev-meta-g',\n pattern: {\n kind: 'key',\n phase: 'down',\n key: 'g',\n modifiers: {\n meta: true,\n shift: true\n }\n },\n actionId: 'search-prev-result',\n when: ctx => ctx.isSearchActive,\n consumeInput: true\n }]\n};\n\n// =============================================================================\n// Keyboard Interaction Contexts (priority 30 / 40)\n// =============================================================================\n\nexport const KEYBOARD_MANIPULATE_CONTEXT = {\n id: 'keyboard:manipulate',\n priority: 30,\n enabled: true,\n bindings: [{\n id: 'manipulate-arrow-up',\n pattern: {\n kind: 'key',\n phase: 'down',\n key: 'ArrowUp',\n modifiers: {\n shift: false\n }\n },\n actionId: 'nudge-selection-up',\n when: ctx => ctx.keyboardInteractionMode === 'manipulate',\n consumeInput: true\n }, {\n id: 'manipulate-arrow-down',\n pattern: {\n kind: 'key',\n phase: 'down',\n key: 'ArrowDown',\n modifiers: {\n shift: false\n }\n },\n actionId: 'nudge-selection-down',\n when: ctx => ctx.keyboardInteractionMode === 'manipulate',\n consumeInput: true\n }, {\n id: 'manipulate-arrow-left',\n pattern: {\n kind: 'key',\n phase: 'down',\n key: 'ArrowLeft',\n modifiers: {\n shift: false\n }\n },\n actionId: 'nudge-selection-left',\n when: ctx => ctx.keyboardInteractionMode === 'manipulate',\n consumeInput: true\n }, {\n id: 'manipulate-arrow-right',\n pattern: {\n kind: 'key',\n phase: 'down',\n key: 'ArrowRight',\n modifiers: {\n shift: false\n }\n },\n actionId: 'nudge-selection-right',\n when: ctx => ctx.keyboardInteractionMode === 'manipulate',\n consumeInput: true\n }, {\n id: 'manipulate-shift-arrow-up',\n pattern: {\n kind: 'key',\n phase: 'down',\n key: 'ArrowUp',\n modifiers: {\n shift: true\n }\n },\n actionId: 'nudge-selection-up-large',\n when: ctx => ctx.keyboardInteractionMode === 'manipulate',\n consumeInput: true\n }, {\n id: 'manipulate-shift-arrow-down',\n pattern: {\n kind: 'key',\n phase: 'down',\n key: 'ArrowDown',\n modifiers: {\n shift: true\n }\n },\n actionId: 'nudge-selection-down-large',\n when: ctx => ctx.keyboardInteractionMode === 'manipulate',\n consumeInput: true\n }, {\n id: 'manipulate-shift-arrow-left',\n pattern: {\n kind: 'key',\n phase: 'down',\n key: 'ArrowLeft',\n modifiers: {\n shift: true\n }\n },\n actionId: 'nudge-selection-left-large',\n when: ctx => ctx.keyboardInteractionMode === 'manipulate',\n consumeInput: true\n }, {\n id: 'manipulate-shift-arrow-right',\n pattern: {\n kind: 'key',\n phase: 'down',\n key: 'ArrowRight',\n modifiers: {\n shift: true\n }\n },\n actionId: 'nudge-selection-right-large',\n when: ctx => ctx.keyboardInteractionMode === 'manipulate',\n consumeInput: true\n }, {\n id: 'manipulate-escape',\n pattern: {\n kind: 'key',\n phase: 'down',\n key: 'Escape'\n },\n actionId: 'exit-keyboard-manipulate-mode',\n when: ctx => ctx.keyboardInteractionMode === 'manipulate',\n consumeInput: true\n }]\n};\nexport const KEYBOARD_NAVIGATE_CONTEXT = {\n id: 'keyboard:navigate',\n priority: 40,\n enabled: true,\n bindings: [{\n id: 'navigate-arrow-up',\n pattern: {\n kind: 'key',\n phase: 'down',\n key: 'ArrowUp'\n },\n actionId: 'navigate-focus-up',\n when: ctx => ctx.keyboardInteractionMode === 'navigate',\n consumeInput: true\n }, {\n id: 'navigate-arrow-down',\n pattern: {\n kind: 'key',\n phase: 'down',\n key: 'ArrowDown'\n },\n actionId: 'navigate-focus-down',\n when: ctx => ctx.keyboardInteractionMode === 'navigate',\n consumeInput: true\n }, {\n id: 'navigate-arrow-left',\n pattern: {\n kind: 'key',\n phase: 'down',\n key: 'ArrowLeft'\n },\n actionId: 'navigate-focus-left',\n when: ctx => ctx.keyboardInteractionMode === 'navigate',\n consumeInput: true\n }, {\n id: 'navigate-arrow-right',\n pattern: {\n kind: 'key',\n phase: 'down',\n key: 'ArrowRight'\n },\n actionId: 'navigate-focus-right',\n when: ctx => ctx.keyboardInteractionMode === 'navigate',\n consumeInput: true\n }, {\n id: 'navigate-enter',\n pattern: {\n kind: 'key',\n phase: 'down',\n key: 'Enter'\n },\n actionId: 'enter-keyboard-manipulate-mode',\n when: ctx => ctx.keyboardInteractionMode === 'navigate',\n consumeInput: true\n }, {\n id: 'navigate-space',\n pattern: {\n kind: 'key',\n phase: 'down',\n code: 'Space'\n },\n actionId: 'activate-focused-node',\n when: ctx => ctx.keyboardInteractionMode === 'navigate',\n consumeInput: true\n }, {\n id: 'navigate-tab',\n pattern: {\n kind: 'key',\n phase: 'down',\n key: 'Tab',\n modifiers: {\n shift: false\n }\n },\n actionId: 'cycle-focus-forward',\n when: ctx => ctx.keyboardInteractionMode === 'navigate',\n consumeInput: true\n }, {\n id: 'navigate-shift-tab',\n pattern: {\n kind: 'key',\n phase: 'down',\n key: 'Tab',\n modifiers: {\n shift: true\n }\n },\n actionId: 'cycle-focus-backward',\n when: ctx => ctx.keyboardInteractionMode === 'navigate',\n consumeInput: true\n }]\n};","/**\n * Pointer Bindings\n *\n * All pointer/touch gesture bindings for the DEFAULT_CONTEXT.\n * Separated from keyboard bindings for readability.\n *\n * Extracted from pointer-contexts.ts in v1.7.0.\n *\n * @since 1.7.0\n */\n\n/**\n * All pointer gesture bindings (tap, drag, long-press, pinch, scroll).\n */\nexport const POINTER_BINDINGS = [\n// --- Pointer taps ---\n{\n id: 'tap-node',\n pattern: {\n type: 'tap',\n subjectKind: 'node'\n },\n actionId: 'select-node'\n}, {\n id: 'tap-edge',\n pattern: {\n type: 'tap',\n subjectKind: 'edge'\n },\n actionId: 'select-edge'\n}, {\n id: 'tap-bg',\n pattern: {\n type: 'tap',\n subjectKind: 'background'\n },\n actionId: 'clear-selection'\n}, {\n id: 'shift-tap-node',\n pattern: {\n type: 'tap',\n subjectKind: 'node',\n modifiers: {\n shift: true\n }\n },\n actionId: 'toggle-selection'\n},\n// --- Right-click ---\n{\n id: 'rc-node',\n pattern: {\n type: 'tap',\n subjectKind: 'node',\n button: 2\n },\n actionId: 'context-menu',\n consumeInput: true\n}, {\n id: 'rc-bg',\n pattern: {\n type: 'tap',\n subjectKind: 'background',\n button: 2\n },\n actionId: 'context-menu',\n consumeInput: true\n},\n// --- Double/triple tap ---\n{\n id: 'dtap-node',\n pattern: {\n type: 'double-tap',\n subjectKind: 'node'\n },\n actionId: 'fit-to-view'\n}, {\n id: 'ttap-node',\n pattern: {\n type: 'triple-tap',\n subjectKind: 'node'\n },\n actionId: 'toggle-lock'\n},\n// --- Drags ---\n{\n id: 'drag-node',\n pattern: {\n type: 'drag',\n subjectKind: 'node'\n },\n actionId: 'move-node'\n}, {\n id: 'drag-bg-finger',\n pattern: {\n type: 'drag',\n subjectKind: 'background',\n source: 'finger'\n },\n actionId: 'pan'\n}, {\n id: 'drag-bg-mouse',\n pattern: {\n type: 'drag',\n subjectKind: 'background',\n source: 'mouse'\n },\n actionId: 'pan'\n}, {\n id: 'drag-bg-pencil',\n pattern: {\n type: 'drag',\n subjectKind: 'background',\n source: 'pencil'\n },\n actionId: 'lasso-select'\n}, {\n id: 'space-drag-pan',\n pattern: {\n type: 'drag',\n heldKeys: {\n byCode: {\n Space: true\n }\n }\n },\n actionId: 'pan'\n}, {\n id: 'shift-drag-bg',\n pattern: {\n type: 'drag',\n subjectKind: 'background',\n modifiers: {\n shift: true\n }\n },\n actionId: 'rect-select'\n},\n// Right/middle drag — no-ops by default\n{\n id: 'rdrag-node',\n pattern: {\n type: 'drag',\n subjectKind: 'node',\n button: 2\n },\n actionId: 'none'\n}, {\n id: 'rdrag-bg',\n pattern: {\n type: 'drag',\n subjectKind: 'background',\n button: 2\n },\n actionId: 'none'\n},\n// --- Long-press ---\n{\n id: 'lp-node',\n pattern: {\n type: 'long-press',\n subjectKind: 'node'\n },\n actionId: 'context-menu'\n}, {\n id: 'lp-bg-finger',\n pattern: {\n type: 'long-press',\n subjectKind: 'background',\n source: 'finger'\n },\n actionId: 'create-node'\n},\n// --- Pinch / scroll ---\n{\n id: 'pinch-bg',\n pattern: {\n type: 'pinch',\n subjectKind: 'background'\n },\n actionId: 'zoom'\n}, {\n id: 'scroll-any',\n pattern: {\n type: 'scroll'\n },\n actionId: 'zoom'\n}, {\n id: 'pinch-node',\n pattern: {\n type: 'pinch',\n subjectKind: 'node'\n },\n actionId: 'split-node'\n}];","/**\n * Keyboard Bindings\n *\n * All keyboard shortcut bindings for the DEFAULT_CONTEXT.\n * Separated from pointer bindings for readability.\n *\n * Extracted from pointer-contexts.ts in v1.7.0.\n *\n * @since 1.7.0\n */\n\nconst isCommandShortcut = ctx => !ctx.commandLineVisible;\n\n/**\n * All keyboard shortcut gesture bindings.\n * Each binding maps a key pattern to an action ID.\n */\nexport const KEYBOARD_BINDINGS = [{\n id: 'slash-open-command-line',\n pattern: {\n kind: 'key',\n phase: 'down',\n code: 'Slash',\n modifiers: {\n ctrl: false,\n meta: false,\n shift: false\n }\n },\n actionId: 'open-command-line',\n when: isCommandShortcut,\n consumeInput: true\n}, {\n id: 'escape-fallback',\n pattern: {\n kind: 'key',\n phase: 'down',\n key: 'Escape'\n },\n actionId: 'escape-input',\n when: isCommandShortcut,\n consumeInput: true\n}, {\n id: 'delete-selection',\n pattern: {\n kind: 'key',\n phase: 'down',\n key: 'Delete'\n },\n actionId: 'delete-selection',\n when: isCommandShortcut,\n consumeInput: true\n}, {\n id: 'backspace-delete-selection',\n pattern: {\n kind: 'key',\n phase: 'down',\n key: 'Backspace',\n modifiers: {\n ctrl: false,\n meta: false\n }\n },\n actionId: 'delete-selection',\n when: isCommandShortcut,\n consumeInput: true\n},\n// Search\n{\n id: 'open-search-ctrl-f',\n pattern: {\n kind: 'key',\n phase: 'down',\n key: 'f',\n modifiers: {\n ctrl: true,\n shift: false\n }\n },\n actionId: 'open-search',\n consumeInput: true\n}, {\n id: 'open-search-meta-f',\n pattern: {\n kind: 'key',\n phase: 'down',\n key: 'f',\n modifiers: {\n meta: true,\n shift: false\n }\n },\n actionId: 'open-search',\n consumeInput: true\n},\n// Copy / Cut / Paste\n{\n id: 'copy-selection-ctrl-c',\n pattern: {\n kind: 'key',\n phase: 'down',\n key: 'c',\n modifiers: {\n ctrl: true,\n shift: false\n }\n },\n actionId: 'copy-selection',\n when: isCommandShortcut,\n consumeInput: true\n}, {\n id: 'copy-selection-meta-c',\n pattern: {\n kind: 'key',\n phase: 'down',\n key: 'c',\n modifiers: {\n meta: true,\n shift: false\n }\n },\n actionId: 'copy-selection',\n when: isCommandShortcut,\n consumeInput: true\n}, {\n id: 'cut-selection-ctrl-x',\n pattern: {\n kind: 'key',\n phase: 'down',\n key: 'x',\n modifiers: {\n ctrl: true,\n shift: false\n }\n },\n actionId: 'cut-selection',\n when: isCommandShortcut,\n consumeInput: true\n}, {\n id: 'cut-selection-meta-x',\n pattern: {\n kind: 'key',\n phase: 'down',\n key: 'x',\n modifiers: {\n meta: true,\n shift: false\n }\n },\n actionId: 'cut-selection',\n when: isCommandShortcut,\n consumeInput: true\n}, {\n id: 'paste-selection-ctrl-v',\n pattern: {\n kind: 'key',\n phase: 'down',\n key: 'v',\n modifiers: {\n ctrl: true,\n shift: false\n }\n },\n actionId: 'paste-selection',\n when: isCommandShortcut,\n consumeInput: true\n}, {\n id: 'paste-selection-meta-v',\n pattern: {\n kind: 'key',\n phase: 'down',\n key: 'v',\n modifiers: {\n meta: true,\n shift: false\n }\n },\n actionId: 'paste-selection',\n when: isCommandShortcut,\n consumeInput: true\n},\n// Duplicate\n{\n id: 'duplicate-selection-ctrl-d',\n pattern: {\n kind: 'key',\n phase: 'down',\n key: 'd',\n modifiers: {\n ctrl: true,\n shift: false\n }\n },\n actionId: 'duplicate-selection',\n when: isCommandShortcut,\n consumeInput: true\n}, {\n id: 'duplicate-selection-meta-d',\n pattern: {\n kind: 'key',\n phase: 'down',\n key: 'd',\n modifiers: {\n meta: true,\n shift: false\n }\n },\n actionId: 'duplicate-selection',\n when: isCommandShortcut,\n consumeInput: true\n},\n// Select All\n{\n id: 'select-all-ctrl-a',\n pattern: {\n kind: 'key',\n phase: 'down',\n key: 'a',\n modifiers: {\n ctrl: true,\n shift: false\n }\n },\n actionId: 'select-all',\n when: isCommandShortcut,\n consumeInput: true\n}, {\n id: 'select-all-meta-a',\n pattern: {\n kind: 'key',\n phase: 'down',\n key: 'a',\n modifiers: {\n meta: true,\n shift: false\n }\n },\n actionId: 'select-all',\n when: isCommandShortcut,\n consumeInput: true\n},\n// Merge\n{\n id: 'merge-selection-ctrl-m',\n pattern: {\n kind: 'key',\n phase: 'down',\n key: 'm',\n modifiers: {\n ctrl: true,\n shift: false\n }\n },\n actionId: 'merge-selection',\n when: isCommandShortcut,\n consumeInput: true\n}, {\n id: 'merge-selection-meta-m',\n pattern: {\n kind: 'key',\n phase: 'down',\n key: 'm',\n modifiers: {\n meta: true,\n shift: false\n }\n },\n actionId: 'merge-selection',\n when: isCommandShortcut,\n consumeInput: true\n},\n// Undo / Redo\n{\n id: 'undo-ctrl-z',\n pattern: {\n kind: 'key',\n phase: 'down',\n key: 'z',\n modifiers: {\n ctrl: true,\n shift: false\n }\n },\n actionId: 'undo',\n when: isCommandShortcut,\n consumeInput: true\n}, {\n id: 'undo-meta-z',\n pattern: {\n kind: 'key',\n phase: 'down',\n key: 'z',\n modifiers: {\n meta: true,\n shift: false\n }\n },\n actionId: 'undo',\n when: isCommandShortcut,\n consumeInput: true\n}, {\n id: 'redo-ctrl-shift-z',\n pattern: {\n kind: 'key',\n phase: 'down',\n key: 'z',\n modifiers: {\n ctrl: true,\n shift: true\n }\n },\n actionId: 'redo',\n when: isCommandShortcut,\n consumeInput: true\n}, {\n id: 'redo-meta-shift-z',\n pattern: {\n kind: 'key',\n phase: 'down',\n key: 'z',\n modifiers: {\n meta: true,\n shift: true\n }\n },\n actionId: 'redo',\n when: isCommandShortcut,\n consumeInput: true\n}, {\n id: 'redo-ctrl-y',\n pattern: {\n kind: 'key',\n phase: 'down',\n key: 'y',\n modifiers: {\n ctrl: true\n }\n },\n actionId: 'redo',\n when: isCommandShortcut,\n consumeInput: true\n}, {\n id: 'redo-meta-y',\n pattern: {\n kind: 'key',\n phase: 'down',\n key: 'y',\n modifiers: {\n meta: true\n }\n },\n actionId: 'redo',\n when: isCommandShortcut,\n consumeInput: true\n}];","/**\n * Pointer & Default Mapping Contexts\n *\n * DEFAULT_CONTEXT assembled from pointer-bindings + keyboard-bindings.\n * Input mode contexts for pick operations.\n *\n * @since 1.7.0 — bindings extracted into keyboard-bindings.ts and pointer-bindings.ts\n */\n\nimport { POINTER_BINDINGS } from './pointer-bindings';\nimport { KEYBOARD_BINDINGS } from './keyboard-bindings';\n\n// Re-export for consumers\nexport { POINTER_BINDINGS } from './pointer-bindings';\nexport { KEYBOARD_BINDINGS } from './keyboard-bindings';\n\n// =============================================================================\n// Default Context (priority 100 — lowest built-in)\n// =============================================================================\n\nexport const DEFAULT_CONTEXT = {\n id: 'default',\n priority: 100,\n enabled: true,\n bindings: [...POINTER_BINDINGS, ...KEYBOARD_BINDINGS]\n};\n\n// =============================================================================\n// Input Mode Contexts (priority 5 — override most things)\n// =============================================================================\n\nexport const PICK_NODE_CONTEXT = {\n id: 'input-mode:pickNode',\n priority: 5,\n enabled: true,\n bindings: [{\n id: 'pick-tap-node',\n pattern: {\n type: 'tap',\n subjectKind: 'node'\n },\n actionId: 'resolve-pick-node',\n consumeInput: true\n }, {\n id: 'pick-cancel-bg',\n pattern: {\n type: 'tap',\n subjectKind: 'background'\n },\n actionId: 'cancel-pick',\n consumeInput: true\n }, {\n id: 'pick-cancel-key',\n pattern: {\n kind: 'key',\n phase: 'down',\n key: 'Escape'\n },\n actionId: 'cancel-pick',\n consumeInput: true\n }]\n};\nexport const PICK_NODES_CONTEXT = {\n id: 'input-mode:pickNodes',\n priority: 5,\n enabled: true,\n bindings: [{\n id: 'pick-tap-node',\n pattern: {\n type: 'tap',\n subjectKind: 'node'\n },\n actionId: 'resolve-pick-node',\n consumeInput: true\n }, {\n id: 'pick-done',\n pattern: {\n type: 'double-tap',\n subjectKind: 'background'\n },\n actionId: 'finish-pick-nodes',\n consumeInput: true\n }, {\n id: 'pick-cancel-bg',\n pattern: {\n type: 'tap',\n subjectKind: 'background',\n button: 2\n },\n actionId: 'cancel-pick',\n consumeInput: true\n }, {\n id: 'pick-cancel-key',\n pattern: {\n kind: 'key',\n phase: 'down',\n key: 'Escape'\n },\n actionId: 'cancel-pick',\n consumeInput: true\n }]\n};\nexport const PICK_POINT_CONTEXT = {\n id: 'input-mode:pickPoint',\n priority: 5,\n enabled: true,\n bindings: [{\n id: 'pick-tap',\n pattern: {\n type: 'tap'\n },\n actionId: 'resolve-pick-point',\n consumeInput: true\n }, {\n id: 'pick-cancel-key',\n pattern: {\n kind: 'key',\n phase: 'down',\n key: 'Escape'\n },\n actionId: 'cancel-pick',\n consumeInput: true\n }]\n};\n\n/**\n * Lookup table: input mode type → MappingContext to push.\n * 'normal' maps to null (no extra context).\n */\nexport const INPUT_MODE_CONTEXTS = {\n normal: null,\n pickNode: PICK_NODE_CONTEXT,\n pickNodes: PICK_NODES_CONTEXT,\n pickPoint: PICK_POINT_CONTEXT,\n text: null,\n select: null\n};","/**\n * Built-in Mapping Contexts\n *\n * Default bindings, palm rejection, and input-mode contexts.\n * All are plain data with runtime conditions expressed via guard predicates.\n *\n * Keyboard contexts are in ./keyboard-contexts.ts\n * Default + input mode contexts are in ./pointer-contexts.ts\n */\n\n// Re-export all contexts for backward compat\nexport { SEARCH_CONTEXT, KEYBOARD_MANIPULATE_CONTEXT, KEYBOARD_NAVIGATE_CONTEXT } from './keyboard-contexts';\nexport { DEFAULT_CONTEXT, PICK_NODE_CONTEXT, PICK_NODES_CONTEXT, PICK_POINT_CONTEXT, INPUT_MODE_CONTEXTS } from './pointer-contexts';\n\n// =============================================================================\n// Palm Rejection Context (priority 0 — highest)\n// =============================================================================\n\n/**\n * When a stylus is active, block finger taps and remap finger-on-node\n * drags to pan. Pinch and scroll are intentionally NOT blocked.\n */\nexport const PALM_REJECTION_CONTEXT = {\n id: 'palm-rejection',\n priority: 0,\n enabled: true,\n bindings: [{\n id: 'pr-finger-tap',\n pattern: {\n type: 'tap',\n source: 'finger'\n },\n actionId: 'none',\n when: ctx => ctx.isStylusActive,\n consumeInput: true\n }, {\n id: 'pr-finger-dtap',\n pattern: {\n type: 'double-tap',\n source: 'finger'\n },\n actionId: 'none',\n when: ctx => ctx.isStylusActive,\n consumeInput: true\n }, {\n id: 'pr-finger-ttap',\n pattern: {\n type: 'triple-tap',\n source: 'finger'\n },\n actionId: 'none',\n when: ctx => ctx.isStylusActive,\n consumeInput: true\n }, {\n id: 'pr-finger-lp',\n pattern: {\n type: 'long-press',\n source: 'finger'\n },\n actionId: 'none',\n when: ctx => ctx.isStylusActive,\n consumeInput: true\n }, {\n id: 'pr-finger-drag-node',\n pattern: {\n type: 'drag',\n subjectKind: 'node',\n source: 'finger'\n },\n actionId: 'pan',\n when: ctx => ctx.isStylusActive,\n consumeInput: true\n }]\n};\n\n// =============================================================================\n// Active Interaction Context (priority 15)\n// =============================================================================\n\nexport const ACTIVE_INTERACTION_CONTEXT = {\n id: 'active-interaction',\n priority: 15,\n enabled: true,\n bindings: [{\n id: 'escape-cancel-active-interaction',\n pattern: {\n kind: 'key',\n phase: 'down',\n key: 'Escape'\n },\n actionId: 'cancel-active-input',\n when: ctx => ctx.isDragging || ctx.isSplitting || Boolean(ctx.custom.isSelecting) || Boolean(ctx.custom.isCreatingEdge),\n consumeInput: true\n }]\n};","/**\n * useGuardContext — Guard context hook\n *\n * Reads all atoms needed for the gesture guard context and returns\n * a ref that is updated every render. The ref is stable and safe\n * to read inside useGesture callbacks without stale closure issues.\n */\n\nimport { useRef } from 'react';\nimport { useAtomValue } from 'jotai';\nimport { selectedNodeIdsAtom, focusedNodeIdAtom } from '../core/selection-store';\nimport { draggingNodeIdAtom, edgeCreationAtom } from '../core/graph-store';\nimport { isStylusActiveAtom, fingerCountAtom } from '../core/input-store';\nimport { inputModeAtom, keyboardInteractionModeAtom } from '../core/interaction-store';\nimport { selectionPathAtom } from '../core/selection-path-store';\nimport { isFilterActiveAtom } from '../core/search-store';\nimport { commandLineVisibleAtom } from '../commands/store';\nimport { NO_HELD_KEYS } from './types';\nexport function useGuardContext(heldKeys = NO_HELD_KEYS) {\n const isStylusActive = useAtomValue(isStylusActiveAtom);\n const fingerCount = useAtomValue(fingerCountAtom);\n const draggingNodeId = useAtomValue(draggingNodeIdAtom);\n const focusedNodeId = useAtomValue(focusedNodeIdAtom);\n const selectedNodeIds = useAtomValue(selectedNodeIdsAtom);\n const inputMode = useAtomValue(inputModeAtom);\n const keyboardInteractionMode = useAtomValue(keyboardInteractionModeAtom);\n const selectionPath = useAtomValue(selectionPathAtom);\n const edgeCreation = useAtomValue(edgeCreationAtom);\n const isSearchActive = useAtomValue(isFilterActiveAtom);\n const commandLineVisible = useAtomValue(commandLineVisibleAtom);\n const guardRef = useRef({\n isStylusActive: false,\n fingerCount: 0,\n isDragging: false,\n isResizing: false,\n isSplitting: false,\n inputMode: {\n type: 'normal'\n },\n keyboardInteractionMode: 'navigate',\n selectedNodeIds: new Set(),\n focusedNodeId: null,\n isSearchActive: false,\n commandLineVisible: false,\n heldKeys: NO_HELD_KEYS,\n custom: {}\n });\n guardRef.current = {\n isStylusActive,\n fingerCount,\n isDragging: draggingNodeId !== null,\n isResizing: false,\n isSplitting: false,\n inputMode,\n keyboardInteractionMode,\n selectedNodeIds,\n focusedNodeId,\n isSearchActive,\n commandLineVisible,\n heldKeys,\n custom: {\n isSelecting: selectionPath !== null,\n isCreatingEdge: edgeCreation.isCreating\n }\n };\n return guardRef;\n}","/**\n * useInertia — Pan & zoom inertia management\n *\n * Encapsulates the rAF animation loops, VelocitySamplers, and\n * pinch tracking refs used by useCanvasGestures. Returns stable\n * functions for starting/cancelling inertia and recording samples.\n */\n\nimport { useRef, useEffect } from 'react';\nimport { PanInertia, ZoomInertia, VelocitySampler } from './inertia';\n// =============================================================================\n// Constants\n// =============================================================================\n\nexport const ZOOM_SNAP_THRESHOLD = 0.03;\nexport const INERTIA_MIN_SPEED = 2;\nconst VELOCITY_SAMPLE_COUNT = 5;\n\n// =============================================================================\n// Types\n// =============================================================================\n\n// =============================================================================\n// Helpers\n// =============================================================================\n\nexport function snapZoom(z) {\n return Math.abs(z - 1.0) < ZOOM_SNAP_THRESHOLD ? 1.0 : z;\n}\n\n// =============================================================================\n// Hook\n// =============================================================================\n\nexport function useInertia() {\n const panInertiaRef = useRef(null);\n const zoomInertiaRef = useRef(null);\n const panSamplerRef = useRef(new VelocitySampler(VELOCITY_SAMPLE_COUNT));\n const zoomSamplerRef = useRef(new VelocitySampler(VELOCITY_SAMPLE_COUNT));\n const pinchPrevOrigin = useRef(null);\n const lastPinchZoom = useRef(null);\n const cancelPan = () => {\n if (panInertiaRef.current) {\n cancelAnimationFrame(panInertiaRef.current.anim);\n panInertiaRef.current = null;\n }\n };\n const cancelZoom = () => {\n if (zoomInertiaRef.current) {\n cancelAnimationFrame(zoomInertiaRef.current.anim);\n zoomInertiaRef.current = null;\n }\n };\n const cancelAll = () => {\n cancelPan();\n cancelZoom();\n };\n const startPanInertia = (velocity, setPan) => {\n cancelPan();\n const engine = new PanInertia(velocity);\n const animate = () => {\n const tick = engine.tick();\n if (!tick) {\n panInertiaRef.current = null;\n return;\n }\n setPan(prev => ({\n x: prev.x + tick.x,\n y: prev.y + tick.y\n }));\n panInertiaRef.current.anim = requestAnimationFrame(animate);\n };\n panInertiaRef.current = {\n anim: requestAnimationFrame(animate),\n engine\n };\n };\n const startZoomInertia = (velocity_0, origin, currentZoom, minZoom, maxZoom, setZoom, setPan_0) => {\n cancelZoom();\n const engine_0 = new ZoomInertia(velocity_0, origin);\n const animate_0 = () => {\n const tick_0 = engine_0.tick(currentZoom);\n if (!tick_0) {\n zoomInertiaRef.current = null;\n return;\n }\n setZoom(prevZoom => {\n const newZoom = Math.max(minZoom, Math.min(maxZoom, prevZoom + tick_0.delta));\n setPan_0(prevPan => {\n const worldX = (tick_0.origin.x - prevPan.x) / prevZoom;\n const worldY = (tick_0.origin.y - prevPan.y) / prevZoom;\n return {\n x: tick_0.origin.x - worldX * newZoom,\n y: tick_0.origin.y - worldY * newZoom\n };\n });\n return snapZoom(newZoom);\n });\n zoomInertiaRef.current.anim = requestAnimationFrame(animate_0);\n };\n zoomInertiaRef.current = {\n anim: requestAnimationFrame(animate_0),\n engine: engine_0\n };\n };\n\n // Cleanup on unmount\n useEffect(() => cancelAll, []);\n return {\n startPanInertia,\n startZoomInertia,\n cancelAll,\n cancelPan,\n cancelZoom,\n panSampler: panSamplerRef.current,\n zoomSampler: zoomSamplerRef.current,\n pinchPrevOrigin,\n lastPinchZoom\n };\n}","/**\n * Inertia Engine\n *\n * Pure momentum simulation with friction decay.\n * No requestAnimationFrame — the caller drives ticks.\n * Fully testable without any DOM or timer dependency.\n */\n\n// =============================================================================\n// Constants (from current Viewport.tsx)\n// =============================================================================\n\nexport const PAN_FRICTION = 0.92;\nexport const ZOOM_FRICTION = 0.88;\nexport const MIN_VELOCITY = 0.5;\nexport const ZOOM_SNAP_THRESHOLD = 0.03;\nexport const VELOCITY_SAMPLE_COUNT = 5;\n\n// =============================================================================\n// Velocity Sampler\n// =============================================================================\n\n/**\n * Ring buffer that tracks recent velocity samples.\n * Call `sample()` on each move, then `average()` on end.\n */\nexport class VelocitySampler {\n samples = [];\n constructor(maxSamples = VELOCITY_SAMPLE_COUNT) {\n this.maxSamples = maxSamples;\n }\n sample(vx, vy, t) {\n if (this.samples.length >= this.maxSamples) {\n this.samples.shift();\n }\n this.samples.push({\n vx,\n vy,\n t\n });\n }\n average() {\n const n = this.samples.length;\n if (n === 0) return {\n x: 0,\n y: 0\n };\n let sx = 0;\n let sy = 0;\n for (const s of this.samples) {\n sx += s.vx;\n sy += s.vy;\n }\n return {\n x: sx / n,\n y: sy / n\n };\n }\n reset() {\n this.samples.length = 0;\n }\n}\n\n// =============================================================================\n// Pan Inertia\n// =============================================================================\n\nexport class PanInertia {\n constructor(velocity, friction = PAN_FRICTION, minVelocity = MIN_VELOCITY) {\n this.friction = friction;\n this.minVelocity = minVelocity;\n this.vx = velocity.x;\n this.vy = velocity.y;\n }\n\n /**\n * Advance one frame. Returns the velocity delta to apply,\n * or null if below threshold (animation complete).\n */\n tick() {\n this.vx *= this.friction;\n this.vy *= this.friction;\n if (Math.abs(this.vx) < this.minVelocity && Math.abs(this.vy) < this.minVelocity) {\n return null;\n }\n return {\n x: this.vx,\n y: this.vy\n };\n }\n}\n\n// =============================================================================\n// Zoom Inertia\n// =============================================================================\n\nexport class ZoomInertia {\n constructor(velocity, origin, friction = ZOOM_FRICTION, minVelocity = MIN_VELOCITY, snapThreshold = ZOOM_SNAP_THRESHOLD) {\n this.origin = origin;\n this.friction = friction;\n this.minVelocity = minVelocity;\n this.snapThreshold = snapThreshold;\n this.v = velocity;\n }\n\n /**\n * Advance one frame. Returns zoom delta + origin,\n * or null if below threshold.\n */\n tick(currentZoom) {\n this.v *= this.friction;\n if (Math.abs(this.v) < this.minVelocity) {\n // Snap to 100% if close\n if (Math.abs(currentZoom - 1) < this.snapThreshold) {\n const snapDelta = 1 - currentZoom;\n return Math.abs(snapDelta) > 0.001 ? {\n delta: snapDelta,\n origin: this.origin\n } : null;\n }\n return null;\n }\n return {\n delta: this.v,\n origin: this.origin\n };\n }\n}","/**\n * useWheelZoom — Wheel zoom handler extracted from useCanvasGestures\n *\n * Pure function returning an `onWheel` callback for @use-gesture/react.\n * Handles:\n * - Zoom calculation with configurable sensitivity\n * - Snap-to-100% via snapZoom\n * - Min/max bounds clamping\n * - Scroll passthrough for scrollable content inside selected nodes\n *\n * @since 1.3.0\n */\n\nimport { snapZoom } from './useInertia';\n\n// =============================================================================\n// Config\n// =============================================================================\n\n// =============================================================================\n// Factory\n// =============================================================================\n\n/**\n * Creates an onWheel handler for use with @use-gesture/react.\n *\n * Extracted from useCanvasGestures to enable independent testing\n * and reuse in custom gesture compositions.\n */\nexport function createWheelHandler(config) {\n return ({\n event,\n pinching,\n delta: [, dy],\n memo\n }) => {\n if (memo === true || pinching || !config.enableZoom || !config.ref.current) return;\n\n // Check scrollable element inside selected node\n const target = event.target;\n const noDrag = target.closest('[data-no-drag=\"true\"]');\n if (noDrag) {\n const draggableNode = target.closest('[data-draggable-node=\"true\"]');\n if (draggableNode) {\n const nodeId = draggableNode.getAttribute('data-node-id');\n if (nodeId && config.selectedNodeIds.has(nodeId)) {\n let el = target;\n while (el && noDrag.contains(el)) {\n if (el.scrollHeight > el.clientHeight) {\n const atBottom = el.scrollTop + el.clientHeight >= el.scrollHeight - 1;\n const atTop = el.scrollTop <= 1;\n if (!atBottom && dy > 0 || !atTop && dy < 0 || atBottom && dy < 0 || atTop && dy > 0) {\n return;\n }\n }\n el = el.parentElement;\n }\n }\n }\n }\n event.preventDefault();\n const rect = config.ref.current.getBoundingClientRect();\n const mouseX = event.clientX - rect.left;\n const mouseY = event.clientY - rect.top;\n const worldX = (mouseX - config.pan.x) / config.zoom;\n const worldY = (mouseY - config.pan.y) / config.zoom;\n const zoomDelta = -dy * config.zoomSensitivity * config.zoom;\n const newZoom = snapZoom(Math.max(config.minZoom, Math.min(config.maxZoom, config.zoom + zoomDelta)));\n config.setZoom(newZoom);\n config.setPan({\n x: mouseX - worldX * newZoom,\n y: mouseY - worldY * newZoom\n });\n };\n}","/**\n * usePinchZoom — Pinch zoom handlers extracted from useCanvasGestures\n *\n * Pure function returning `onPinchStart`, `onPinch`, `onPinchEnd` callbacks\n * for @use-gesture/react. Handles:\n * - Simultaneous pan during pinch (finger midpoint tracking)\n * - Zoom velocity sampling for inertia\n * - Snap-to-100% via snapZoom\n * - Inertia trigger on pinch end\n *\n * @since 1.3.0\n */\n\nimport { snapZoom } from './useInertia';\n\n// =============================================================================\n// Config\n// =============================================================================\n\n// =============================================================================\n// Factory\n// =============================================================================\n\n/**\n * Creates onPinchStart, onPinch, onPinchEnd handlers for use with @use-gesture/react.\n *\n * Extracted from useCanvasGestures to enable independent testing\n * and reuse in custom gesture compositions.\n */\nexport function createPinchHandlers(config) {\n const onPinchStart = ({\n origin: [ox, oy]\n }) => {\n if (!config.enableZoom || !config.ref.current) return true;\n config.inertia.cancelAll();\n config.inertia.pinchPrevOrigin.current = {\n x: ox,\n y: oy\n };\n config.inertia.zoomSampler.reset();\n config.inertia.lastPinchZoom.current = {\n zoom: config.zoom,\n t: performance.now()\n };\n return false;\n };\n const onPinch = ({\n offset: [d],\n origin: [ox, oy],\n event,\n memo\n }) => {\n if (memo === true || !config.enableZoom || !config.ref.current) return;\n event.preventDefault();\n const rect = config.ref.current.getBoundingClientRect();\n const pinchX = ox - rect.left;\n const pinchY = oy - rect.top;\n\n // Simultaneous pan\n let pdx = 0;\n let pdy = 0;\n if (config.inertia.pinchPrevOrigin.current) {\n pdx = ox - config.inertia.pinchPrevOrigin.current.x;\n pdy = oy - config.inertia.pinchPrevOrigin.current.y;\n }\n config.inertia.pinchPrevOrigin.current = {\n x: ox,\n y: oy\n };\n const worldX = (pinchX - config.pan.x) / config.zoom;\n const worldY = (pinchY - config.pan.y) / config.zoom;\n const newZoom = snapZoom(Math.max(config.minZoom, Math.min(config.maxZoom, d)));\n\n // Track zoom velocity\n const now = performance.now();\n if (config.inertia.lastPinchZoom.current) {\n const dt = (now - config.inertia.lastPinchZoom.current.t) / 1000;\n if (dt > 0) {\n const v = (newZoom - config.inertia.lastPinchZoom.current.zoom) / dt;\n config.inertia.zoomSampler.sample(v, 0, now);\n }\n }\n config.inertia.lastPinchZoom.current = {\n zoom: newZoom,\n t: now\n };\n config.setZoom(newZoom);\n config.setPan({\n x: pinchX - worldX * newZoom + pdx,\n y: pinchY - worldY * newZoom + pdy\n });\n };\n const onPinchEnd = () => {\n const avg = config.inertia.zoomSampler.average();\n const perFrameV = avg.x / 60;\n if (!config.reducedMotion && Math.abs(perFrameV) > 0.001 && config.ref.current) {\n const rect = config.ref.current.getBoundingClientRect();\n const origin = config.inertia.pinchPrevOrigin.current ?? {\n x: rect.width / 2,\n y: rect.height / 2\n };\n config.inertia.startZoomInertia(perFrameV, {\n x: origin.x - rect.left,\n y: origin.y - rect.top\n }, config.zoom, config.minZoom, config.maxZoom, config.setZoom, config.setPan);\n }\n config.inertia.pinchPrevOrigin.current = null;\n config.inertia.zoomSampler.reset();\n config.inertia.lastPinchZoom.current = null;\n };\n return {\n onPinchStart,\n onPinch,\n onPinchEnd\n };\n}","/**\n * InputProvider — React context for the shared input system\n *\n * Holds the shared mapping index, action callback, and the single\n * keyboard listener for the active canvas instance.\n */\n\nimport React, { createContext, useContext, useEffect, useRef, useState } from 'react';\nimport { useStore } from 'jotai';\nimport { dispatch } from './dispatcher';\nimport { resolve } from './mapper';\nimport { useInputModeGestureContext } from './useInputModeGestureContext';\nimport { useRegisterInputActions } from './useRegisterInputActions';\nimport { useInputSystem } from './useGestureSystem';\nimport { isEditableTarget, applyHeldKeyDelta, getCurrentSubject, getSubjectPosition, buildGuardContext } from './gesture-provider-utils';\n\n// Re-export utilities for consumers\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nexport { isEditableTarget, setHeldKeyValue, applyHeldKeyDelta, getCurrentSubject, getSubjectPosition, buildGuardContext } from './gesture-provider-utils';\n// Singleton: keyboard focus routing uses \"last focused wins\" across all\n// InputProvider instances in the page. This is intentional — only one\n// canvas should handle keyboard events at a time.\nlet nextOwnerId = 1;\nlet activeOwnerId = null;\nconst InputContext = /*#__PURE__*/createContext(null);\n// Pure utility functions moved to gesture-provider-utils.ts in v1.8.0\n\nexport function InputProvider({\n children,\n gestureConfig,\n onAction\n}) {\n const store = useStore();\n const system = useInputSystem({\n contexts: gestureConfig?.contexts,\n palmRejection: gestureConfig?.palmRejection ?? true\n });\n useInputModeGestureContext(system);\n useRegisterInputActions();\n const [ownerId] = useState(() => nextOwnerId++);\n const [canvasRoot, setCanvasRoot] = useState(null);\n const rootRef = useRef(null);\n const systemRef = useRef(system);\n systemRef.current = system;\n const registerCanvasRoot = node => {\n rootRef.current = node;\n setCanvasRoot(node);\n };\n useEffect(() => {\n const root = canvasRoot;\n if (!root) {\n return;\n }\n const activate = event => {\n activeOwnerId = ownerId;\n if (!isEditableTarget(event.target)) {\n root.focus({\n preventScroll: true\n });\n }\n };\n root.addEventListener('pointerdown', activate, true);\n root.addEventListener('focusin', activate, true);\n return () => {\n root.removeEventListener('pointerdown', activate, true);\n root.removeEventListener('focusin', activate, true);\n if (activeOwnerId === ownerId) {\n activeOwnerId = null;\n }\n };\n }, [canvasRoot, ownerId]);\n useEffect(() => {\n const handleKeyboard = nativeEvent => {\n if (activeOwnerId !== ownerId) {\n return;\n }\n const root_0 = rootRef.current;\n if (!root_0 || !root_0.isConnected) {\n return;\n }\n const currentSystem = systemRef.current;\n const editableTarget = isEditableTarget(nativeEvent.target);\n const shouldTrackHeldKey = nativeEvent.type === 'keyup' || !nativeEvent.isComposing && !editableTarget;\n const nextHeldKeys = shouldTrackHeldKey ? applyHeldKeyDelta(nativeEvent, currentSystem.heldKeys) : currentSystem.heldKeys;\n if (nextHeldKeys !== currentSystem.heldKeys) {\n currentSystem.setHeldKeys(nextHeldKeys);\n }\n if (nativeEvent.isComposing || editableTarget) {\n return;\n }\n const subject = getCurrentSubject(store);\n const {\n screenPosition,\n worldPosition\n } = getSubjectPosition(store, root_0, subject);\n const inputEvent = {\n kind: 'key',\n phase: nativeEvent.type === 'keydown' ? 'down' : 'up',\n key: nativeEvent.key,\n code: nativeEvent.code,\n repeat: nativeEvent.repeat,\n modifiers: {\n shift: nativeEvent.shiftKey,\n ctrl: nativeEvent.ctrlKey,\n alt: nativeEvent.altKey,\n meta: nativeEvent.metaKey\n },\n heldKeys: nextHeldKeys,\n subject,\n screenPosition,\n worldPosition,\n originalEvent: nativeEvent\n };\n const resolution = resolve(inputEvent, currentSystem.mappingIndex, buildGuardContext(store, {\n heldKeys: nextHeldKeys\n }));\n if (!resolution) {\n return;\n }\n nativeEvent.preventDefault();\n dispatch(inputEvent, resolution);\n onAction?.(inputEvent, resolution);\n };\n const clearHeldKeys = () => {\n systemRef.current.clearHeldKeys();\n };\n window.addEventListener('keydown', handleKeyboard, true);\n window.addEventListener('keyup', handleKeyboard, true);\n window.addEventListener('blur', clearHeldKeys);\n document.addEventListener('visibilitychange', clearHeldKeys);\n return () => {\n window.removeEventListener('keydown', handleKeyboard, true);\n window.removeEventListener('keyup', handleKeyboard, true);\n window.removeEventListener('blur', clearHeldKeys);\n document.removeEventListener('visibilitychange', clearHeldKeys);\n };\n }, [onAction, ownerId, store]);\n return /*#__PURE__*/_jsx(InputContext.Provider, {\n value: {\n system,\n onAction,\n registerCanvasRoot\n },\n children: children\n });\n}\nexport function useInputContext() {\n const ctx = useContext(InputContext);\n if (!ctx) {\n throw new Error(\"useInputContext must be used within an InputProvider\");\n }\n return ctx;\n}\nexport const GestureProvider = InputProvider;\nexport const useGestureContext = useInputContext;","import { c as _c } from \"react/compiler-runtime\";\n/**\n * useInputModeGestureContext — Syncs input mode → mapping context\n *\n * When the interaction store's inputModeAtom changes, this hook\n * pushes/removes the corresponding MappingContext from the gesture system.\n *\n * This follows Design Decision 5: context sync belongs in hooks.\n */\n\nimport { useEffect } from 'react';\nimport { useAtomValue } from 'jotai';\nimport { inputModeAtom } from '../core/interaction-store';\nimport { INPUT_MODE_CONTEXTS } from './contexts';\nconst INPUT_MODE_CONTEXT_PREFIX = 'input-mode:';\n\n/**\n * Sync the current input mode to a gesture mapping context.\n * Call this once at the Canvas level, passing the gesture system API.\n */\nexport function useInputModeGestureContext(inputSystem) {\n const $ = _c(4);\n const inputMode = useAtomValue(inputModeAtom);\n let t0;\n let t1;\n if ($[0] !== inputMode.type || $[1] !== inputSystem) {\n t0 = () => {\n const modeType = inputMode.type;\n const ctx = INPUT_MODE_CONTEXTS[modeType] ?? null;\n if (ctx) {\n inputSystem.pushContext(ctx);\n } else {\n for (const key of Object.keys(INPUT_MODE_CONTEXTS)) {\n const existing = INPUT_MODE_CONTEXTS[key];\n if (existing) {\n inputSystem.removeContext(existing.id);\n }\n }\n }\n return () => {\n if (ctx) {\n inputSystem.removeContext(ctx.id);\n }\n };\n };\n t1 = [inputMode.type, inputSystem];\n $[0] = inputMode.type;\n $[1] = inputSystem;\n $[2] = t0;\n $[3] = t1;\n } else {\n t0 = $[2];\n t1 = $[3];\n }\n useEffect(t0, t1);\n}","import { c as _c } from \"react/compiler-runtime\";\n/**\n * useRegisterInputActions — Action registration hook\n *\n * Registers all built-in input actions (selection, clipboard, navigation,\n * commands, etc.) into the gesture dispatcher. Business logic lives in\n * ./input-action-helpers.ts for testability.\n */\n\nimport { useEffect } from 'react';\nimport { useStore } from 'jotai';\nimport { copyToClipboardAtom, duplicateSelectionAtom, fitToBoundsAtom, lockedNodeIdAtom, lockNodeAtom, mergeNodesAtom, pasteFromClipboardAtom, selectEdgeAtom, selectSingleNodeAtom, setFocusedNodeAtom, toggleNodeInSelectionAtom, unlockNodeAtom, undoAtom, redoAtom, centerOnNodeAtom, resetKeyboardInteractionModeAtom, resetInputModeAtom } from '../core';\nimport { openCommandLineAtom } from '../commands/store';\nimport { nextSearchResultAtom, prevSearchResultAtom } from '../core/search-store';\nimport { registerAction, unregisterAction } from './dispatcher';\nimport { isRepeatBlocked, getSelectedNodeIds, clearSelectionState, updateKeySubject, navigateFocus, cycleFocus, activateFocusedNode, nudgeSelection, deleteSelection, cutSelection, cancelActiveInteraction, escapeInput, resolvePickNode, finishPickNodes, resolvePickPoint, selectAll } from './input-action-helpers';\nfunction register(actionId, handler) {\n registerAction(actionId, handler);\n return () => unregisterAction(actionId);\n}\nexport function useRegisterInputActions() {\n const $ = _c(3);\n const store = useStore();\n let t0;\n let t1;\n if ($[0] !== store) {\n t0 = () => {\n const unregister = [register(\"select-node\", event => {\n updateKeySubject(event, store);\n if (event.subject?.kind !== \"node\") {\n return;\n }\n store.set(setFocusedNodeAtom, event.subject.nodeId);\n if (event.kind === \"key\") {\n store.set(selectSingleNodeAtom, event.subject.nodeId);\n }\n }), register(\"select-edge\", event_0 => {\n updateKeySubject(event_0, store);\n if (event_0.subject?.kind !== \"edge\") {\n return;\n }\n store.set(selectEdgeAtom, event_0.subject.edgeId);\n }), register(\"toggle-selection\", event_1 => {\n updateKeySubject(event_1, store);\n if (event_1.subject?.kind !== \"node\") {\n return;\n }\n store.set(setFocusedNodeAtom, event_1.subject.nodeId);\n if (event_1.kind === \"key\") {\n store.set(toggleNodeInSelectionAtom, event_1.subject.nodeId);\n }\n }), register(\"clear-selection\", () => {\n clearSelectionState(store);\n }), register(\"select-all\", event_2 => {\n if (isRepeatBlocked(event_2)) {\n return;\n }\n selectAll(store);\n }), register(\"fit-to-view\", event_3 => {\n updateKeySubject(event_3, store);\n if (event_3.subject?.kind === \"node\") {\n store.set(centerOnNodeAtom, event_3.subject.nodeId);\n }\n }), register(\"fit-all-to-view\", () => {\n store.set(fitToBoundsAtom, {\n mode: \"graph\"\n });\n }), register(\"toggle-lock\", event_4 => {\n updateKeySubject(event_4, store);\n if (event_4.subject?.kind !== \"node\") {\n return;\n }\n if (store.get(lockedNodeIdAtom) === event_4.subject.nodeId) {\n store.set(unlockNodeAtom);\n } else {\n store.set(lockNodeAtom, {\n nodeId: event_4.subject.nodeId\n });\n }\n }), register(\"open-command-line\", event_5 => {\n if (isRepeatBlocked(event_5)) {\n return;\n }\n store.set(openCommandLineAtom);\n }), register(\"open-search\", event_6 => {\n if (isRepeatBlocked(event_6)) {\n return;\n }\n store.set(openCommandLineAtom);\n }), register(\"search-next-result\", () => {\n store.set(nextSearchResultAtom);\n }), register(\"search-prev-result\", () => {\n store.set(prevSearchResultAtom);\n }), register(\"copy-selection\", event_7 => {\n if (isRepeatBlocked(event_7)) {\n return;\n }\n const selectedNodeIds = getSelectedNodeIds(store);\n if (selectedNodeIds.length > 0) {\n store.set(copyToClipboardAtom, selectedNodeIds);\n }\n }), register(\"cut-selection\", event_8 => {\n if (isRepeatBlocked(event_8)) {\n return;\n }\n cutSelection(store);\n }), register(\"paste-selection\", event_9 => {\n if (isRepeatBlocked(event_9)) {\n return;\n }\n store.set(pasteFromClipboardAtom);\n }), register(\"duplicate-selection\", event_10 => {\n if (isRepeatBlocked(event_10)) {\n return;\n }\n store.set(duplicateSelectionAtom);\n }), register(\"merge-selection\", event_11 => {\n if (isRepeatBlocked(event_11)) {\n return;\n }\n const nodeIds = getSelectedNodeIds(store);\n if (nodeIds.length >= 2) {\n store.set(mergeNodesAtom, {\n nodeIds\n });\n }\n }), register(\"delete-selection\", event_12 => {\n if (isRepeatBlocked(event_12)) {\n return;\n }\n deleteSelection(store);\n }), register(\"undo\", event_13 => {\n if (isRepeatBlocked(event_13)) {\n return;\n }\n store.set(undoAtom);\n }), register(\"redo\", event_14 => {\n if (isRepeatBlocked(event_14)) {\n return;\n }\n store.set(redoAtom);\n }), register(\"cancel-active-input\", () => {\n cancelActiveInteraction(store);\n }), register(\"escape-input\", () => {\n escapeInput(store);\n }), register(\"navigate-focus-up\", () => {\n navigateFocus(store, \"up\");\n }), register(\"navigate-focus-down\", () => {\n navigateFocus(store, \"down\");\n }), register(\"navigate-focus-left\", () => {\n navigateFocus(store, \"left\");\n }), register(\"navigate-focus-right\", () => {\n navigateFocus(store, \"right\");\n }), register(\"cycle-focus-forward\", event_15 => {\n if (isRepeatBlocked(event_15)) {\n return;\n }\n cycleFocus(store, 1);\n }), register(\"cycle-focus-backward\", event_16 => {\n if (isRepeatBlocked(event_16)) {\n return;\n }\n cycleFocus(store, -1);\n }), register(\"activate-focused-node\", event_17 => {\n if (isRepeatBlocked(event_17)) {\n return;\n }\n activateFocusedNode(store, false);\n }), register(\"enter-keyboard-manipulate-mode\", event_18 => {\n if (isRepeatBlocked(event_18)) {\n return;\n }\n activateFocusedNode(store, true);\n }), register(\"exit-keyboard-manipulate-mode\", () => {\n store.set(resetKeyboardInteractionModeAtom);\n }), register(\"nudge-selection-up\", () => {\n nudgeSelection(store, 0, -10, \"Nudge selection\");\n }), register(\"nudge-selection-down\", () => {\n nudgeSelection(store, 0, 10, \"Nudge selection\");\n }), register(\"nudge-selection-left\", () => {\n nudgeSelection(store, -10, 0, \"Nudge selection\");\n }), register(\"nudge-selection-right\", () => {\n nudgeSelection(store, 10, 0, \"Nudge selection\");\n }), register(\"nudge-selection-up-large\", () => {\n nudgeSelection(store, 0, -50, \"Nudge selection\");\n }), register(\"nudge-selection-down-large\", () => {\n nudgeSelection(store, 0, 50, \"Nudge selection\");\n }), register(\"nudge-selection-left-large\", () => {\n nudgeSelection(store, -50, 0, \"Nudge selection\");\n }), register(\"nudge-selection-right-large\", () => {\n nudgeSelection(store, 50, 0, \"Nudge selection\");\n }), register(\"resolve-pick-node\", event_19 => {\n resolvePickNode(event_19, store);\n }), register(\"finish-pick-nodes\", () => {\n finishPickNodes(store);\n }), register(\"resolve-pick-point\", event_20 => {\n resolvePickPoint(event_20, store);\n }), register(\"cancel-pick\", () => {\n store.set(resetInputModeAtom);\n })];\n return () => {\n for (const cleanup of unregister) {\n cleanup();\n }\n };\n };\n t1 = [store];\n $[0] = store;\n $[1] = t0;\n $[2] = t1;\n } else {\n t0 = $[1];\n t1 = $[2];\n }\n useEffect(t0, t1);\n}","/**\n * Input Action Helpers\n *\n * Pure store-based helper functions used by useRegisterInputActions.\n * These are extracted for testability — each function operates on a\n * Jotai store without React dependencies.\n */\n\nimport { addNodesToSelectionAtom, cancelSelectionAtom, clearEdgeSelectionAtom, clearSelectionAtom, copyToClipboardAtom, draggingNodeIdAtom, edgeCreationAtom, endNodeDragAtom, focusedNodeIdAtom, graphAtom, nodeKeysAtom, nodePositionUpdateCounterAtom, optimisticDeleteEdgeAtom, optimisticDeleteNodeAtom, provideInputAtom, pushHistoryAtom, resetInputModeAtom, selectSingleNodeAtom, selectedEdgeIdAtom, selectedNodeIdsAtom, setFocusedNodeAtom, resetKeyboardInteractionModeAtom, toggleNodeInSelectionAtom } from '../core';\nimport { isFilterActiveAtom, clearSearchAtom } from '../core/search-store';\nimport { inputModeAtom, keyboardInteractionModeAtom } from '../core/interaction-store';\nimport { selectionPathAtom } from '../core/selection-path-store';\nimport { commandLineVisibleAtom, closeCommandLineAtom } from '../commands/store';\n// Re-export extracted modules for backward compat\nexport { isRepeatBlocked, getSelectedNodeIds, clearSelectionState, resolveFocusableNodeId, getCurrentSubject, updateKeySubject } from './modifier-helpers';\nimport { getSelectedNodeIds, clearSelectionState, updateKeySubject } from './modifier-helpers';\nexport { findNearestNode, cycleFocus, navigateFocus, activateFocusedNode } from './gesture-classification';\n\n// =============================================================================\n// Constants\n// =============================================================================\n\nexport const EMPTY_EDGE_CREATION = {\n isCreating: false,\n sourceNodeId: null,\n sourceNodePosition: null,\n targetPosition: null,\n hoveredTargetNodeId: null,\n sourceHandle: null,\n targetHandle: null,\n sourcePort: null,\n targetPort: null,\n snappedTargetPosition: null\n};\n\n// =============================================================================\n// Mutations\n// =============================================================================\n\nexport function nudgeSelection(store, dx, dy, label) {\n const selected = getSelectedNodeIds(store);\n if (selected.length === 0) {\n const focused = store.get(focusedNodeIdAtom);\n if (focused) {\n store.set(selectSingleNodeAtom, focused);\n }\n }\n const nodeIds = getSelectedNodeIds(store);\n if (nodeIds.length === 0) return;\n const graph = store.get(graphAtom).copy();\n store.set(pushHistoryAtom, label);\n for (const nodeId of nodeIds) {\n if (!graph.hasNode(nodeId)) continue;\n const x = graph.getNodeAttribute(nodeId, 'x');\n const y = graph.getNodeAttribute(nodeId, 'y');\n graph.setNodeAttribute(nodeId, 'x', x + dx);\n graph.setNodeAttribute(nodeId, 'y', y + dy);\n }\n store.set(graphAtom, graph);\n store.set(nodePositionUpdateCounterAtom, count => count + 1);\n}\nexport function deleteSelection(store) {\n const selectedEdgeId = store.get(selectedEdgeIdAtom);\n if (selectedEdgeId) {\n store.set(optimisticDeleteEdgeAtom, {\n edgeKey: selectedEdgeId\n });\n store.set(clearEdgeSelectionAtom);\n }\n const selectedNodeIds = getSelectedNodeIds(store);\n if (selectedNodeIds.length === 0) return;\n store.set(pushHistoryAtom, selectedNodeIds.length > 1 ? `Delete ${selectedNodeIds.length} nodes` : 'Delete node');\n const focusedNodeId = store.get(focusedNodeIdAtom);\n for (const nodeId of selectedNodeIds) {\n store.set(optimisticDeleteNodeAtom, {\n nodeId\n });\n }\n if (focusedNodeId && selectedNodeIds.includes(focusedNodeId)) {\n store.set(setFocusedNodeAtom, null);\n }\n store.set(clearSelectionAtom);\n}\nexport function cutSelection(store) {\n const selectedNodeIds = getSelectedNodeIds(store);\n if (selectedNodeIds.length === 0) return;\n store.set(copyToClipboardAtom, selectedNodeIds);\n deleteSelection(store);\n}\n\n// =============================================================================\n// Interaction State\n// =============================================================================\n\nexport function cancelActiveInteraction(store) {\n let didCancel = false;\n if (store.get(draggingNodeIdAtom) !== null) {\n store.set(endNodeDragAtom);\n didCancel = true;\n }\n if (store.get(edgeCreationAtom).isCreating) {\n store.set(edgeCreationAtom, EMPTY_EDGE_CREATION);\n didCancel = true;\n }\n if (store.get(inputModeAtom).type === 'pickPoint' || store.get(inputModeAtom).type === 'pickNode' || store.get(inputModeAtom).type === 'pickNodes') {\n store.set(resetInputModeAtom);\n didCancel = true;\n }\n const selectionPath = store.get(selectionPathAtom);\n if (selectionPath !== null) {\n store.set(cancelSelectionAtom);\n didCancel = true;\n }\n return didCancel;\n}\nexport function escapeInput(store) {\n if (cancelActiveInteraction(store)) return;\n if (store.get(keyboardInteractionModeAtom) === 'manipulate') {\n store.set(resetKeyboardInteractionModeAtom);\n return;\n }\n if (store.get(isFilterActiveAtom)) {\n store.set(clearSearchAtom);\n return;\n }\n if (store.get(commandLineVisibleAtom)) {\n store.set(closeCommandLineAtom);\n return;\n }\n if (store.get(selectedNodeIdsAtom).size > 0 || store.get(selectedEdgeIdAtom) !== null) {\n clearSelectionState(store);\n }\n}\n\n// =============================================================================\n// Pick Mode\n// =============================================================================\n\nexport function resolvePickNode(event, store) {\n updateKeySubject(event, store);\n if (event.subject?.kind !== 'node') return;\n if (store.get(inputModeAtom).type === 'pickNodes') {\n store.set(toggleNodeInSelectionAtom, event.subject.nodeId);\n store.set(setFocusedNodeAtom, event.subject.nodeId);\n return;\n }\n store.set(provideInputAtom, event.subject.nodeId);\n store.set(resetInputModeAtom);\n}\nexport function finishPickNodes(store) {\n store.set(provideInputAtom, getSelectedNodeIds(store));\n store.set(resetInputModeAtom);\n}\nexport function resolvePickPoint(event, store) {\n if (event.kind !== 'pointer') return;\n store.set(provideInputAtom, event.worldPosition);\n store.set(resetInputModeAtom);\n}\nexport function selectAll(store) {\n clearSelectionState(store);\n store.set(addNodesToSelectionAtom, store.get(nodeKeysAtom));\n}","/**\n * Modifier Helpers\n *\n * Pure utility functions for gesture state queries — repeat detection,\n * selection lookup, subject resolution.\n *\n * Extracted from input-action-helpers.ts in v1.6.0.\n *\n * @since 1.6.0\n */\n\nimport { draggingNodeIdAtom, edgeCreationAtom, focusedNodeIdAtom, selectedEdgeIdAtom, selectedNodeIdsAtom, clearSelectionAtom, clearEdgeSelectionAtom } from '../core';\nimport { isKeyInputEvent } from './types';\n\n/**\n * Whether the keyboard event is a held-down repeat.\n */\nexport function isRepeatBlocked(event) {\n return isKeyInputEvent(event) && event.repeat;\n}\n\n/**\n * Get array of currently selected node IDs.\n */\nexport function getSelectedNodeIds(store) {\n return Array.from(store.get(selectedNodeIdsAtom));\n}\n\n/**\n * Clear both node and edge selection.\n */\nexport function clearSelectionState(store) {\n store.set(clearSelectionAtom);\n store.set(clearEdgeSelectionAtom);\n}\n\n/**\n * Resolve the best node ID to use for focus-based operations.\n */\nexport function resolveFocusableNodeId(store) {\n const focusedNodeId = store.get(focusedNodeIdAtom);\n if (focusedNodeId) return focusedNodeId;\n const selected = getSelectedNodeIds(store);\n return selected[0] ?? null;\n}\n\n/**\n * Determine what entity the current gesture targets.\n */\nexport function getCurrentSubject(store) {\n const draggingNodeId = store.get(draggingNodeIdAtom);\n if (draggingNodeId) return {\n kind: 'node',\n nodeId: draggingNodeId\n };\n const edgeCreation = store.get(edgeCreationAtom);\n if (edgeCreation.isCreating && edgeCreation.sourceNodeId) {\n return {\n kind: 'node',\n nodeId: edgeCreation.sourceNodeId\n };\n }\n const focusedNodeId = resolveFocusableNodeId(store);\n if (focusedNodeId) return {\n kind: 'node',\n nodeId: focusedNodeId\n };\n const selectedEdgeId = store.get(selectedEdgeIdAtom);\n if (selectedEdgeId) return {\n kind: 'edge',\n edgeId: selectedEdgeId\n };\n return {\n kind: 'background'\n };\n}\n\n/**\n * Fill in the subject on key InputEvents if not already set.\n */\nexport function updateKeySubject(event, store) {\n if (event.kind === 'key' && event.subject === undefined) {\n event.subject = getCurrentSubject(store);\n }\n}","/**\n * Gesture Classification — Navigation\n *\n * Pure navigation functions for keyboard-based node traversal:\n * findNearestNode, cycleFocus, navigateFocus, activateFocusedNode.\n *\n * Extracted from input-action-helpers.ts in v1.6.0.\n *\n * @since 1.6.0\n */\n\nimport { focusedNodeIdAtom, selectSingleNodeAtom, setFocusedNodeAtom, setKeyboardInteractionModeAtom, uiNodesAtom } from '../core';\nimport { resolveFocusableNodeId } from './modifier-helpers';\n/**\n * Find the nearest node in a given direction from the current focus.\n */\nexport function findNearestNode(currentNodeId, store, direction) {\n const nodes = store.get(uiNodesAtom);\n if (nodes.length === 0) return null;\n if (!currentNodeId) {\n const sorted = [...nodes].sort((a, b) => a.position.y - b.position.y || a.position.x - b.position.x);\n return sorted[0]?.id ?? null;\n }\n const currentNode = nodes.find(node => node.id === currentNodeId);\n if (!currentNode) return nodes[0]?.id ?? null;\n const cx = currentNode.position.x + (currentNode.width ?? 200) / 2;\n const cy = currentNode.position.y + (currentNode.height ?? 100) / 2;\n let bestId = null;\n let bestScore = Number.POSITIVE_INFINITY;\n for (const candidate of nodes) {\n if (candidate.id === currentNode.id) continue;\n const nx = candidate.position.x + (candidate.width ?? 200) / 2;\n const ny = candidate.position.y + (candidate.height ?? 100) / 2;\n const dx = nx - cx;\n const dy = ny - cy;\n let isValid = false;\n switch (direction) {\n case 'right':\n isValid = dx > 0;\n break;\n case 'left':\n isValid = dx < 0;\n break;\n case 'down':\n isValid = dy > 0;\n break;\n case 'up':\n isValid = dy < 0;\n break;\n }\n if (!isValid) continue;\n const dist = Math.sqrt(dx * dx + dy * dy);\n const isHorizontal = direction === 'left' || direction === 'right';\n const perpendicularDistance = isHorizontal ? Math.abs(dy) : Math.abs(dx);\n const score = dist + perpendicularDistance * 0.5;\n if (score < bestScore) {\n bestScore = score;\n bestId = candidate.id;\n }\n }\n return bestId;\n}\n\n/**\n * Cycle focus to the next/previous node by z-index order.\n */\nexport function cycleFocus(store, direction) {\n const nodes = store.get(uiNodesAtom);\n if (nodes.length === 0) return;\n const focusedNodeId = store.get(focusedNodeIdAtom);\n const sorted = [...nodes].sort((a, b) => a.zIndex - b.zIndex);\n const currentIdx = focusedNodeId ? sorted.findIndex(node => node.id === focusedNodeId) : -1;\n const nextIdx = direction === -1 ? currentIdx <= 0 ? sorted.length - 1 : currentIdx - 1 : (currentIdx + 1) % sorted.length;\n store.set(setFocusedNodeAtom, sorted[nextIdx].id);\n}\n\n/**\n * Navigate focus to the nearest node in a direction.\n */\nexport function navigateFocus(store, direction) {\n const nextId = findNearestNode(resolveFocusableNodeId(store), store, direction);\n if (nextId) {\n store.set(setFocusedNodeAtom, nextId);\n }\n}\n\n/**\n * Activate the focused node — select it and optionally enter manipulate mode.\n */\nexport function activateFocusedNode(store, enterManipulate) {\n const focusedNodeId = resolveFocusableNodeId(store);\n if (!focusedNodeId) return;\n store.set(setFocusedNodeAtom, focusedNodeId);\n store.set(selectSingleNodeAtom, focusedNodeId);\n if (enterManipulate) {\n store.set(setKeyboardInteractionModeAtom, 'manipulate');\n }\n}","import { c as _c } from \"react/compiler-runtime\";\n/**\n * useInputSystem — Consumer hook for the shared input pipeline\n *\n * Provides a stable API for:\n * - Pushing / removing MappingContexts at runtime\n * - Reading the current mapping index\n * - Configuring palm rejection\n *\n * All context state is managed via useState.\n * Context sync belongs in hooks (Design Decision 5), not effectful atoms.\n */\n\nimport { useState } from 'react';\nimport { buildMappingIndex } from './mapper';\nimport { ACTIVE_INTERACTION_CONTEXT, DEFAULT_CONTEXT, KEYBOARD_MANIPULATE_CONTEXT, KEYBOARD_NAVIGATE_CONTEXT, PALM_REJECTION_CONTEXT, SEARCH_CONTEXT } from './contexts';\nimport { NO_HELD_KEYS } from './types';\nexport function useInputSystem(t0) {\n const $ = _c(19);\n const config = t0 === undefined ? {} : t0;\n const {\n contexts: staticContexts,\n palmRejection: t1\n } = config;\n const initialPR = t1 === undefined ? true : t1;\n let t2;\n if ($[0] === Symbol.for(\"react.memo_cache_sentinel\")) {\n t2 = [];\n $[0] = t2;\n } else {\n t2 = $[0];\n }\n const [dynamicContexts, setDynamicContexts] = useState(t2);\n const [palmRejection, setPalmRejection] = useState(initialPR);\n const [heldKeys, setHeldKeys] = useState(NO_HELD_KEYS);\n const all = [];\n if (palmRejection) {\n all.push(PALM_REJECTION_CONTEXT);\n }\n all.push(ACTIVE_INTERACTION_CONTEXT, SEARCH_CONTEXT, KEYBOARD_MANIPULATE_CONTEXT, KEYBOARD_NAVIGATE_CONTEXT);\n if (staticContexts) {\n all.push(...staticContexts);\n }\n all.push(...dynamicContexts);\n all.push(DEFAULT_CONTEXT);\n const mappingIndex = buildMappingIndex(all);\n let t3;\n if ($[1] !== setDynamicContexts) {\n t3 = ctx => {\n setDynamicContexts(prev => {\n const filtered = prev.filter(c => c.id !== ctx.id);\n return [...filtered, ctx];\n });\n };\n $[1] = setDynamicContexts;\n $[2] = t3;\n } else {\n t3 = $[2];\n }\n const pushContext = t3;\n let t4;\n if ($[3] !== setDynamicContexts) {\n t4 = id => {\n setDynamicContexts(prev_0 => prev_0.filter(c_0 => c_0.id !== id));\n };\n $[3] = setDynamicContexts;\n $[4] = t4;\n } else {\n t4 = $[4];\n }\n const removeContext = t4;\n let t5;\n if ($[5] !== setDynamicContexts) {\n t5 = (id_0, enabled) => {\n setDynamicContexts(prev_1 => prev_1.map(c_1 => c_1.id === id_0 ? {\n ...c_1,\n enabled\n } : c_1));\n };\n $[5] = setDynamicContexts;\n $[6] = t5;\n } else {\n t5 = $[6];\n }\n const setContextEnabled = t5;\n let t6;\n if ($[7] !== setHeldKeys) {\n t6 = () => {\n setHeldKeys(NO_HELD_KEYS);\n };\n $[7] = setHeldKeys;\n $[8] = t6;\n } else {\n t6 = $[8];\n }\n const clearHeldKeys = t6;\n let t7;\n if ($[9] !== clearHeldKeys || $[10] !== heldKeys || $[11] !== mappingIndex || $[12] !== palmRejection || $[13] !== pushContext || $[14] !== removeContext || $[15] !== setContextEnabled || $[16] !== setHeldKeys || $[17] !== setPalmRejection) {\n t7 = {\n mappingIndex,\n pushContext,\n removeContext,\n setContextEnabled,\n palmRejection,\n setPalmRejection,\n heldKeys,\n setHeldKeys,\n clearHeldKeys\n };\n $[9] = clearHeldKeys;\n $[10] = heldKeys;\n $[11] = mappingIndex;\n $[12] = palmRejection;\n $[13] = pushContext;\n $[14] = removeContext;\n $[15] = setContextEnabled;\n $[16] = setHeldKeys;\n $[17] = setPalmRejection;\n $[18] = t7;\n } else {\n t7 = $[18];\n }\n return t7;\n}\nexport const useGestureSystem = useInputSystem;","/**\n * GestureProvider Utilities\n *\n * Pure functions extracted from GestureProvider.tsx for testability.\n * No React dependencies — all functions operate on plain objects or DOM elements.\n *\n * @since 1.8.0\n */\n\nimport { draggingNodeIdAtom, edgeCreationAtom, fingerCountAtom, focusedNodeIdAtom, inputModeAtom, isStylusActiveAtom, keyboardInteractionModeAtom, screenToWorldAtom, selectedNodeIdsAtom, uiNodesAtom, worldToScreenAtom } from '../core';\nimport { isFilterActiveAtom } from '../core/search-store';\nimport { selectionPathAtom } from '../core/selection-path-store';\nimport { commandLineVisibleAtom } from '../commands/store';\n\n// =============================================================================\n// Editable Target Detection\n// =============================================================================\n\n/**\n * Check whether a DOM target is an editable element (input, textarea,\n * contenteditable, or marked with data-no-canvas-keyboard).\n */\nexport function isEditableTarget(target) {\n if (!(target instanceof HTMLElement)) {\n return false;\n }\n if (target.isContentEditable) {\n return true;\n }\n const editable = target.closest('input, textarea, [contenteditable=\"true\"], [data-no-canvas-keyboard=\"true\"]');\n return editable !== null;\n}\n\n// =============================================================================\n// Held Keys State Management\n// =============================================================================\n\n/**\n * Immutably set a single key's held state. Returns the same object\n * reference if nothing changed (for React bailout).\n */\nexport function setHeldKeyValue(current, key, isHeld) {\n const previous = current[key] ?? false;\n if (previous === isHeld) {\n return current;\n }\n const next = {\n ...current\n };\n if (isHeld) {\n next[key] = true;\n } else {\n delete next[key];\n }\n return next;\n}\n\n/**\n * Apply a keyboard event to the held-keys state.\n * Returns same reference if nothing changed.\n */\nexport function applyHeldKeyDelta(event, current) {\n const isHeld = event.type === 'keydown';\n const nextByKey = setHeldKeyValue(current.byKey, event.key, isHeld);\n const nextByCode = setHeldKeyValue(current.byCode, event.code, isHeld);\n if (nextByKey === current.byKey && nextByCode === current.byCode) {\n return current;\n }\n return {\n byKey: nextByKey,\n byCode: nextByCode\n };\n}\n\n// =============================================================================\n// Subject Resolution\n// =============================================================================\n\n/**\n * Determine the current gesture subject from store state.\n */\nexport function getCurrentSubject(store) {\n const draggingNodeId = store.get(draggingNodeIdAtom);\n if (draggingNodeId) {\n return {\n kind: 'node',\n nodeId: draggingNodeId\n };\n }\n const edgeCreation = store.get(edgeCreationAtom);\n if (edgeCreation.isCreating && edgeCreation.sourceNodeId) {\n return {\n kind: 'node',\n nodeId: edgeCreation.sourceNodeId\n };\n }\n const focusedNodeId = store.get(focusedNodeIdAtom);\n if (focusedNodeId) {\n return {\n kind: 'node',\n nodeId: focusedNodeId\n };\n }\n return {\n kind: 'background'\n };\n}\n\n/**\n * Get screen and world positions for a gesture subject.\n */\nexport function getSubjectPosition(store, root, subject) {\n const worldToScreen = store.get(worldToScreenAtom);\n if (subject.kind === 'node') {\n const node = store.get(uiNodesAtom).find(entry => entry.id === subject.nodeId);\n if (!node) {\n return {};\n }\n const worldPosition = {\n x: node.position.x + (node.width ?? 200) / 2,\n y: node.position.y + (node.height ?? 100) / 2\n };\n return {\n worldPosition,\n screenPosition: worldToScreen(worldPosition.x, worldPosition.y)\n };\n }\n if (subject.kind === 'background' && root) {\n const rect = root.getBoundingClientRect();\n const screenPosition = {\n x: rect.left + rect.width / 2,\n y: rect.top + rect.height / 2\n };\n return {\n screenPosition,\n worldPosition: store.get(screenToWorldAtom)(screenPosition.x, screenPosition.y)\n };\n }\n return {};\n}\n\n// =============================================================================\n// Guard Context\n// =============================================================================\n\n/**\n * Build the guard context object used for gesture resolution.\n */\nexport function buildGuardContext(store, system) {\n const heldKeys = 'heldKeys' in system ? system.heldKeys : system;\n const edgeCreation = store.get(edgeCreationAtom);\n return {\n isStylusActive: store.get(isStylusActiveAtom),\n fingerCount: store.get(fingerCountAtom),\n isDragging: store.get(draggingNodeIdAtom) !== null,\n isResizing: false,\n isSplitting: false,\n inputMode: store.get(inputModeAtom),\n keyboardInteractionMode: store.get(keyboardInteractionModeAtom),\n selectedNodeIds: store.get(selectedNodeIdsAtom),\n focusedNodeId: store.get(focusedNodeIdAtom),\n isSearchActive: store.get(isFilterActiveAtom),\n commandLineVisible: store.get(commandLineVisibleAtom),\n heldKeys,\n custom: {\n isSelecting: store.get(selectionPathAtom) !== null,\n isCreatingEdge: edgeCreation.isCreating\n }\n };\n}","import { c as _c } from \"react/compiler-runtime\";\n/**\n * Grid Component\n *\n * Renders the canvas grid background with minor and major lines.\n */\n\nimport React from 'react';\nimport { useCanvasStyle } from '../providers/CanvasStyleProvider';\nimport { jsx as _jsx } from \"react/jsx-runtime\";\n/**\n * Canvas grid background\n */\nexport function Grid(t0) {\n const $ = _c(19);\n const {\n pan,\n zoom,\n viewportWidth,\n viewportHeight,\n gridSize: t1,\n majorGridSize: t2\n } = t0;\n const gridSize = t1 === undefined ? 50 : t1;\n const majorGridSize = t2 === undefined ? 250 : t2;\n const styles = useCanvasStyle();\n if (!styles.grid.visible || !viewportWidth || !viewportHeight || zoom <= 0) {\n return null;\n }\n let gridOpacity;\n let lines;\n if ($[0] !== gridSize || $[1] !== majorGridSize || $[2] !== pan.x || $[3] !== pan.y || $[4] !== styles.grid.majorLineColor || $[5] !== styles.grid.minorLineColor || $[6] !== styles.grid.opacity || $[7] !== viewportHeight || $[8] !== viewportWidth || $[9] !== zoom) {\n lines = [];\n const minorLineColor = styles.grid.minorLineColor;\n const majorLineColor = styles.grid.majorLineColor;\n gridOpacity = styles.grid.opacity;\n const worldLeft = -pan.x / zoom;\n const worldTop = -pan.y / zoom;\n const worldRight = (-pan.x + viewportWidth) / zoom;\n const worldBottom = (-pan.y + viewportHeight) / zoom;\n const firstVerticalLine = Math.ceil(worldLeft / gridSize) * gridSize;\n for (let x = firstVerticalLine; x <= worldRight; x = x + gridSize, x) {\n if (x % majorGridSize !== 0) {\n lines.push(/*#__PURE__*/_jsx(\"line\", {\n x1: x,\n y1: worldTop,\n x2: x,\n y2: worldBottom,\n stroke: minorLineColor,\n strokeWidth: 1 / zoom\n }, `v-${x}`));\n }\n }\n const firstHorizontalLine = Math.ceil(worldTop / gridSize) * gridSize;\n for (let y = firstHorizontalLine; y <= worldBottom; y = y + gridSize, y) {\n if (y % majorGridSize !== 0) {\n lines.push(/*#__PURE__*/_jsx(\"line\", {\n x1: worldLeft,\n y1: y,\n x2: worldRight,\n y2: y,\n stroke: minorLineColor,\n strokeWidth: 1 / zoom\n }, `h-${y}`));\n }\n }\n const firstMajorVerticalLine = Math.ceil(worldLeft / majorGridSize) * majorGridSize;\n for (let x_0 = firstMajorVerticalLine; x_0 <= worldRight; x_0 = x_0 + majorGridSize, x_0) {\n lines.push(/*#__PURE__*/_jsx(\"line\", {\n x1: x_0,\n y1: worldTop,\n x2: x_0,\n y2: worldBottom,\n stroke: majorLineColor,\n strokeWidth: 1.5 / zoom\n }, `major-v-${x_0}`));\n }\n const firstMajorHorizontalLine = Math.ceil(worldTop / majorGridSize) * majorGridSize;\n for (let y_0 = firstMajorHorizontalLine; y_0 <= worldBottom; y_0 = y_0 + majorGridSize, y_0) {\n lines.push(/*#__PURE__*/_jsx(\"line\", {\n x1: worldLeft,\n y1: y_0,\n x2: worldRight,\n y2: y_0,\n stroke: majorLineColor,\n strokeWidth: 1.5 / zoom\n }, `major-h-${y_0}`));\n }\n $[0] = gridSize;\n $[1] = majorGridSize;\n $[2] = pan.x;\n $[3] = pan.y;\n $[4] = styles.grid.majorLineColor;\n $[5] = styles.grid.minorLineColor;\n $[6] = styles.grid.opacity;\n $[7] = viewportHeight;\n $[8] = viewportWidth;\n $[9] = zoom;\n $[10] = gridOpacity;\n $[11] = lines;\n } else {\n gridOpacity = $[10];\n lines = $[11];\n }\n let t3;\n if ($[12] !== gridOpacity) {\n t3 = {\n position: \"absolute\",\n top: 0,\n left: 0,\n overflow: \"visible\",\n pointerEvents: \"none\",\n opacity: gridOpacity\n };\n $[12] = gridOpacity;\n $[13] = t3;\n } else {\n t3 = $[13];\n }\n let t4;\n if ($[14] !== lines) {\n t4 = /*#__PURE__*/_jsx(\"g\", {\n children: lines\n });\n $[14] = lines;\n $[15] = t4;\n } else {\n t4 = $[15];\n }\n let t5;\n if ($[16] !== t3 || $[17] !== t4) {\n t5 = /*#__PURE__*/_jsx(\"svg\", {\n width: \"100%\",\n height: \"100%\",\n style: t3,\n children: t4\n });\n $[16] = t3;\n $[17] = t4;\n $[18] = t5;\n } else {\n t5 = $[18];\n }\n return t5;\n}\n/**\n * Coordinate axes with tick marks and labels\n */\nexport function Crosshairs(t0) {\n const $ = _c(31);\n const {\n pan,\n zoom,\n viewportWidth,\n viewportHeight,\n tickSize: t1,\n labelSize: t2\n } = t0;\n const tickSize = t1 === undefined ? 100 : t1;\n const labelSize = t2 === undefined ? 12 : t2;\n const styles = useCanvasStyle();\n if (!styles.axes.visible || !viewportWidth || !viewportHeight || zoom <= 0) {\n return null;\n }\n let t3;\n if ($[0] !== tickSize || $[1] !== zoom) {\n t3 = () => {\n const minWorldSpacing = 80 / zoom;\n const niceNumbers = [50, 100, 250, 500, 1000, 2500, 5000, 10000];\n for (const n of niceNumbers) {\n if (n >= minWorldSpacing) {\n return Math.max(n, tickSize);\n }\n }\n return 10000;\n };\n $[0] = tickSize;\n $[1] = zoom;\n $[2] = t3;\n } else {\n t3 = $[2];\n }\n const getAdjustedTickSize = t3;\n const adjustedTickSize = getAdjustedTickSize();\n let elements;\n if ($[3] !== adjustedTickSize || $[4] !== labelSize || $[5] !== pan.x || $[6] !== pan.y || $[7] !== styles.axes.color || $[8] !== styles.axes.labelColor || $[9] !== viewportHeight || $[10] !== viewportWidth || $[11] !== zoom) {\n elements = [];\n const strokeWidth = 1.5 / zoom;\n const tickLength = 5 / zoom;\n const labelOffset = 8 / zoom;\n const finalLabelSize = labelSize / zoom;\n const axisColor = styles.axes.color;\n const labelColor = styles.axes.labelColor;\n const worldLeft = -pan.x / zoom;\n const worldTop = -pan.y / zoom;\n const worldRight = (-pan.x + viewportWidth) / zoom;\n const worldBottom = (-pan.y + viewportHeight) / zoom;\n if (worldTop <= 0 && worldBottom >= 0) {\n let t4;\n if ($[13] !== axisColor || $[14] !== strokeWidth || $[15] !== worldLeft || $[16] !== worldRight) {\n t4 = /*#__PURE__*/_jsx(\"line\", {\n x1: worldLeft,\n y1: 0,\n x2: worldRight,\n y2: 0,\n stroke: axisColor,\n strokeWidth: strokeWidth\n }, \"x-axis\");\n $[13] = axisColor;\n $[14] = strokeWidth;\n $[15] = worldLeft;\n $[16] = worldRight;\n $[17] = t4;\n } else {\n t4 = $[17];\n }\n elements.push(t4);\n const firstXTick = Math.ceil(worldLeft / adjustedTickSize) * adjustedTickSize;\n for (let x = firstXTick; x <= worldRight; x = x + adjustedTickSize, x) {\n if (x === 0 && worldLeft <= 0 && worldRight >= 0) {\n continue;\n }\n elements.push(/*#__PURE__*/_jsx(\"line\", {\n x1: x,\n y1: -tickLength,\n x2: x,\n y2: tickLength,\n stroke: axisColor,\n strokeWidth: strokeWidth / 1.5\n }, `x-tick-${x}`));\n elements.push(/*#__PURE__*/_jsx(\"text\", {\n x: x,\n y: tickLength + labelOffset,\n fill: labelColor,\n fontSize: finalLabelSize,\n textAnchor: \"middle\",\n dominantBaseline: \"hanging\",\n children: x\n }, `x-label-${x}`));\n }\n }\n if (worldLeft <= 0 && worldRight >= 0) {\n let t4;\n if ($[18] !== axisColor || $[19] !== strokeWidth || $[20] !== worldBottom || $[21] !== worldTop) {\n t4 = /*#__PURE__*/_jsx(\"line\", {\n x1: 0,\n y1: worldTop,\n x2: 0,\n y2: worldBottom,\n stroke: axisColor,\n strokeWidth: strokeWidth\n }, \"y-axis\");\n $[18] = axisColor;\n $[19] = strokeWidth;\n $[20] = worldBottom;\n $[21] = worldTop;\n $[22] = t4;\n } else {\n t4 = $[22];\n }\n elements.push(t4);\n const firstYTick = Math.ceil(worldTop / adjustedTickSize) * adjustedTickSize;\n for (let y = firstYTick; y <= worldBottom; y = y + adjustedTickSize, y) {\n if (y === 0 && worldTop <= 0 && worldBottom >= 0) {\n continue;\n }\n elements.push(/*#__PURE__*/_jsx(\"line\", {\n x1: -tickLength,\n y1: y,\n x2: tickLength,\n y2: y,\n stroke: axisColor,\n strokeWidth: strokeWidth / 1.5\n }, `y-tick-${y}`));\n elements.push(/*#__PURE__*/_jsx(\"text\", {\n x: tickLength + labelOffset,\n y: y,\n fill: labelColor,\n fontSize: finalLabelSize,\n textAnchor: \"start\",\n dominantBaseline: \"middle\",\n children: y\n }, `y-label-${y}`));\n }\n }\n if (worldLeft <= 0 && worldRight >= 0 && worldTop <= 0 && worldBottom >= 0) {\n const t4 = -labelOffset;\n const t5 = finalLabelSize * 1.1;\n let t6;\n if ($[23] !== labelColor || $[24] !== labelOffset || $[25] !== t4 || $[26] !== t5) {\n t6 = /*#__PURE__*/_jsx(\"text\", {\n x: labelOffset,\n y: t4,\n fill: labelColor,\n fontSize: t5,\n textAnchor: \"start\",\n dominantBaseline: \"alphabetic\",\n children: \"(0,0)\"\n }, \"origin-label\");\n $[23] = labelColor;\n $[24] = labelOffset;\n $[25] = t4;\n $[26] = t5;\n $[27] = t6;\n } else {\n t6 = $[27];\n }\n elements.push(t6);\n }\n $[3] = adjustedTickSize;\n $[4] = labelSize;\n $[5] = pan.x;\n $[6] = pan.y;\n $[7] = styles.axes.color;\n $[8] = styles.axes.labelColor;\n $[9] = viewportHeight;\n $[10] = viewportWidth;\n $[11] = zoom;\n $[12] = elements;\n } else {\n elements = $[12];\n }\n let t4;\n if ($[28] === Symbol.for(\"react.memo_cache_sentinel\")) {\n t4 = {\n position: \"absolute\",\n top: 0,\n left: 0,\n overflow: \"visible\",\n pointerEvents: \"none\"\n };\n $[28] = t4;\n } else {\n t4 = $[28];\n }\n let t5;\n if ($[29] !== elements) {\n t5 = /*#__PURE__*/_jsx(\"svg\", {\n width: \"100%\",\n height: \"100%\",\n style: t4,\n children: /*#__PURE__*/_jsx(\"g\", {\n children: elements\n })\n });\n $[29] = elements;\n $[30] = t5;\n } else {\n t5 = $[30];\n }\n return t5;\n}","import { c as _c } from \"react/compiler-runtime\";\n/**\n * Node Renderer Component\n *\n * Renders visible nodes from the graph, positioned absolutely.\n * Uses viewport virtualization - only nodes within visible bounds are rendered.\n */\n\nimport React from 'react';\nimport { useAtomValue } from 'jotai';\nimport { nodePositionAtomFamily } from '../core/graph-position';\nimport { nodeFamilyAtom } from '../core/graph-derived';\nimport { visibleNodeKeysAtom } from '../core/virtualization-store';\nimport { getNodeTypeComponent, FallbackNodeTypeComponent } from '../core/node-type-registry';\nimport { Node } from './Node';\nimport { NodeErrorBoundary } from './NodeErrorBoundary';\nimport { jsx as _jsx, Fragment as _Fragment } from \"react/jsx-runtime\";\n/**\n * Renders visible nodes from the graph (virtualized).\n * Only nodes within the viewport bounds are rendered for performance.\n */\nexport function NodeRenderer(t0) {\n const $ = _c(17);\n const {\n renderNode,\n onNodePersist,\n onNodePersistError,\n onNodeRenderError,\n renderErrorFallback,\n nodeWrapper\n } = t0;\n const nodeKeys = useAtomValue(visibleNodeKeysAtom);\n let t1;\n if ($[0] !== nodeKeys || $[1] !== nodeWrapper || $[2] !== onNodePersist || $[3] !== onNodePersistError || $[4] !== onNodeRenderError || $[5] !== renderErrorFallback || $[6] !== renderNode) {\n let t2;\n if ($[8] !== nodeWrapper || $[9] !== onNodePersist || $[10] !== onNodePersistError || $[11] !== onNodeRenderError || $[12] !== renderErrorFallback || $[13] !== renderNode) {\n t2 = key => /*#__PURE__*/_jsx(NodeItem, {\n nodeKey: key,\n renderNode: renderNode,\n onNodePersist: onNodePersist,\n onNodePersistError: onNodePersistError,\n onNodeRenderError: onNodeRenderError,\n renderErrorFallback: renderErrorFallback,\n nodeWrapper: nodeWrapper\n }, key);\n $[8] = nodeWrapper;\n $[9] = onNodePersist;\n $[10] = onNodePersistError;\n $[11] = onNodeRenderError;\n $[12] = renderErrorFallback;\n $[13] = renderNode;\n $[14] = t2;\n } else {\n t2 = $[14];\n }\n t1 = nodeKeys.map(t2);\n $[0] = nodeKeys;\n $[1] = nodeWrapper;\n $[2] = onNodePersist;\n $[3] = onNodePersistError;\n $[4] = onNodeRenderError;\n $[5] = renderErrorFallback;\n $[6] = renderNode;\n $[7] = t1;\n } else {\n t1 = $[7];\n }\n let t2;\n if ($[15] !== t1) {\n t2 = /*#__PURE__*/_jsx(_Fragment, {\n children: t1\n });\n $[15] = t1;\n $[16] = t2;\n } else {\n t2 = $[16];\n }\n return t2;\n}\n/**\n * Create a render function that bridges NodeRenderProps → NodeTypeComponent.\n * Looks up the component from the node type registry, falling back to FallbackNodeTypeComponent.\n */\nfunction resolveRenderNode(nodeData) {\n const Component = getNodeTypeComponent(nodeData.dbData.node_type) ?? FallbackNodeTypeComponent;\n return props => /*#__PURE__*/_jsx(Component, {\n nodeData: props.node,\n isResizing: props.isResizing\n });\n}\nfunction NodeItem(t0) {\n const $ = _c(24);\n const {\n nodeKey,\n renderNode,\n onNodePersist,\n onNodePersistError,\n onNodeRenderError,\n renderErrorFallback,\n nodeWrapper\n } = t0;\n let t1;\n if ($[0] !== nodeKey) {\n t1 = nodeFamilyAtom(nodeKey);\n $[0] = nodeKey;\n $[1] = t1;\n } else {\n t1 = $[1];\n }\n const nodeData = useAtomValue(t1);\n let t2;\n if ($[2] !== nodeKey) {\n t2 = nodePositionAtomFamily(nodeKey);\n $[2] = nodeKey;\n $[3] = t2;\n } else {\n t2 = $[3];\n }\n const position = useAtomValue(t2);\n if (!nodeData) {\n return null;\n }\n let t3;\n if ($[4] !== nodeData || $[5] !== renderNode) {\n t3 = renderNode ?? resolveRenderNode(nodeData);\n $[4] = nodeData;\n $[5] = renderNode;\n $[6] = t3;\n } else {\n t3 = $[6];\n }\n const effectiveRenderNode = t3;\n let t4;\n if ($[7] !== position.x || $[8] !== position.y) {\n t4 = {\n position: \"absolute\",\n left: position.x,\n top: position.y,\n transform: \"translate(0, 0)\"\n };\n $[7] = position.x;\n $[8] = position.y;\n $[9] = t4;\n } else {\n t4 = $[9];\n }\n let t5;\n if ($[10] !== effectiveRenderNode || $[11] !== nodeData || $[12] !== nodeWrapper || $[13] !== onNodePersist || $[14] !== onNodePersistError) {\n t5 = /*#__PURE__*/_jsx(Node, {\n nodeData: nodeData,\n renderContent: effectiveRenderNode,\n onPersist: onNodePersist,\n onPersistError: onNodePersistError,\n wrapper: nodeWrapper\n });\n $[10] = effectiveRenderNode;\n $[11] = nodeData;\n $[12] = nodeWrapper;\n $[13] = onNodePersist;\n $[14] = onNodePersistError;\n $[15] = t5;\n } else {\n t5 = $[15];\n }\n let t6;\n if ($[16] !== nodeKey || $[17] !== onNodeRenderError || $[18] !== renderErrorFallback || $[19] !== t5) {\n t6 = /*#__PURE__*/_jsx(NodeErrorBoundary, {\n nodeId: nodeKey,\n onError: onNodeRenderError,\n renderFallback: renderErrorFallback,\n children: t5\n });\n $[16] = nodeKey;\n $[17] = onNodeRenderError;\n $[18] = renderErrorFallback;\n $[19] = t5;\n $[20] = t6;\n } else {\n t6 = $[20];\n }\n let t7;\n if ($[21] !== t4 || $[22] !== t6) {\n t7 = /*#__PURE__*/_jsx(\"div\", {\n style: t4,\n children: t6\n });\n $[21] = t4;\n $[22] = t6;\n $[23] = t7;\n } else {\n t7 = $[23];\n }\n return t7;\n}","/**\n * Node Component\n *\n * Generic draggable/resizable node with render prop for custom content.\n * Uses gesture system v2: tap/double-tap/long-press/context-menu\n * route through useNodeGestures; drag mechanics via useNodeDrag.\n */\n\nimport React from 'react';\nimport { useAtomValue, useSetAtom } from 'jotai';\nimport { graphAtom, draggingNodeIdAtom } from '../core/graph-store';\nimport { nodePositionAtomFamily } from '../core/graph-position';\nimport { dropTargetNodeIdAtom } from '../core/graph-mutations';\nimport { handleNodePointerDownSelectionAtom, selectedNodeIdsAtom, focusedNodeIdAtom } from '../core/selection-store';\nimport { isFilterActiveAtom, searchResultsAtom, highlightedSearchNodeIdAtom } from '../core/search-store';\nimport { useNodeSelection } from '../hooks/useNodeSelection';\nimport { useNodeDrag } from '../hooks/useNodeDrag';\nimport { useNodeResize } from '../hooks/useNodeResize';\nimport { useSplitGesture } from '../hooks/useSplitGesture';\nimport { ResizeHandle } from './ResizeHandle';\nimport { useCanvasStyle } from '../providers/CanvasStyleProvider';\nimport { useInputContext } from '../gestures/GestureProvider';\nimport { useNodeGestures } from '../gestures/useNodeGestures';\n\n// Re-export for convenience\nimport { jsx as _jsx, jsxs as _jsxs } from \"react/jsx-runtime\";\n/**\n * Generic draggable/resizable node component\n */\nexport function Node({\n nodeData,\n renderContent,\n onPersist,\n onPersistError,\n wrapper: Wrapper\n}) {\n const {\n id,\n zIndex\n } = nodeData;\n const graph = useAtomValue(graphAtom);\n const setHandleNodePointerDown = useSetAtom(handleNodePointerDownSelectionAtom);\n const {\n isSelected\n } = useNodeSelection(id);\n const selectedNodeIds = useAtomValue(selectedNodeIdsAtom);\n const activeDraggingNodeId = useAtomValue(draggingNodeIdAtom);\n const focusedNodeId = useAtomValue(focusedNodeIdAtom);\n const isFocused = focusedNodeId === id && !isSelected;\n const position = useAtomValue(nodePositionAtomFamily(id));\n const canvasStyles = useCanvasStyle();\n const isFilterActive = useAtomValue(isFilterActiveAtom);\n const searchResults = useAtomValue(searchResultsAtom);\n const highlightedSearchNodeId = useAtomValue(highlightedSearchNodeIdAtom);\n const isDimmedByFilter = isFilterActive && !searchResults.has(id);\n const isSearchHighlighted = highlightedSearchNodeId === id;\n const dropTargetId = useAtomValue(dropTargetNodeIdAtom);\n const isDropTarget = dropTargetId === id;\n\n // Gesture system v2: shared context\n const {\n system,\n onAction\n } = useInputContext();\n\n // Node-level gesture recognition (tap, double-tap, long-press, right-click)\n const gestureHandlers = useNodeGestures({\n nodeId: id,\n mappingIndex: system.mappingIndex,\n onAction,\n heldKeys: system.heldKeys\n });\n\n // Drag mechanics (always move-node — gesture resolution removed)\n const {\n bind,\n updateNodePositions\n } = useNodeDrag(id, {\n heldKeys: system.heldKeys,\n onPersist,\n onPersistError\n });\n const resizeOptions = {\n onPersist,\n onPersistError\n };\n const {\n localWidth,\n localHeight,\n isResizing,\n createResizeStart,\n handleResizeMove,\n handleResizeEnd\n } = useNodeResize({\n id,\n nodeData,\n updateNodePositions,\n options: resizeOptions\n });\n const nodeWidth = localWidth;\n const nodeHeight = localHeight;\n\n // Two-finger split gesture\n const splitGesture = useSplitGesture(id);\n const isVisuallyDragging = activeDraggingNodeId !== null && selectedNodeIds.has(id);\n const bindGestures = bind();\n\n // Intercept pointer down to handle selection + feed gestures\n const handlePointerDown = e => {\n const target = e.target;\n if (target.closest('[data-no-drag=\"true\"]') || target.tagName === 'INPUT' || target.tagName === 'TEXTAREA' || target.tagName === 'SELECT') {\n return;\n }\n\n // Feed the v2 gesture recognizer\n gestureHandlers.onPointerDown(e);\n\n // Forward to @use-gesture drag handler\n if (bindGestures.onPointerDown) {\n bindGestures.onPointerDown(e);\n }\n e.stopPropagation();\n setHandleNodePointerDown({\n nodeId: id,\n isShiftPressed: e.shiftKey\n });\n };\n const handlePointerUp = e_0 => {\n gestureHandlers.onPointerUp(e_0);\n };\n const currentZIndex = graph.hasNode(id) ? graph.getNodeAttribute(id, 'zIndex') : zIndex;\n\n // Node styling from context\n const borderColor = isSelected ? canvasStyles.nodes.selectedBorderColor : isFocused ? canvasStyles.nodes.selectedBorderColor : isVisuallyDragging ? canvasStyles.nodes.draggingBorderColor : canvasStyles.nodes.defaultBorderColor;\n const borderWidth = isSelected || isVisuallyDragging ? '1.5px' : isFocused ? '2px' : '1px';\n const borderRadius = `${canvasStyles.nodes.defaultBorderRadius}px`;\n const defaultBoxShadow = `0px 8px 24px ${canvasStyles.nodes.shadowColor}`;\n const draggingBoxShadow = `0px 12px 32px ${canvasStyles.nodes.shadowColor}`;\n const selectedNodeBoxShadow = `0 0 10px 2px ${canvasStyles.nodes.selectedGlowColor}, ${defaultBoxShadow}`;\n const focusedBoxShadow = `0 0 0 2px ${canvasStyles.nodes.selectedBorderColor}, ${defaultBoxShadow}`;\n const currentBoxShadow = isSelected ? selectedNodeBoxShadow : isFocused ? focusedBoxShadow : isVisuallyDragging ? draggingBoxShadow : defaultBoxShadow;\n const nodeContent = /*#__PURE__*/_jsxs(\"div\", {\n \"data-draggable-node\": \"true\",\n \"data-node-id\": id,\n \"data-focused\": isFocused || undefined,\n className: [isSearchHighlighted && 'canvas-search-highlight', isDropTarget && 'canvas-drop-target'].filter(Boolean).join(' ') || undefined,\n ...bindGestures,\n onPointerDown: e_1 => {\n splitGesture.onPointerDown(e_1);\n handlePointerDown(e_1);\n },\n onPointerMove: splitGesture.onPointerMove,\n onPointerUp: e_2 => {\n splitGesture.onPointerUp(e_2);\n handlePointerUp(e_2);\n },\n onPointerCancel: gestureHandlers.onPointerCancel,\n onContextMenu: gestureHandlers.onContextMenu,\n style: {\n width: `${nodeWidth}px`,\n height: `${nodeHeight}px`,\n backgroundColor: isVisuallyDragging ? canvasStyles.nodes.draggingBackgroundColor : canvasStyles.nodes.defaultBackground,\n border: `${borderWidth} solid ${borderColor}`,\n borderRadius,\n boxShadow: currentBoxShadow,\n cursor: isVisuallyDragging ? 'grabbing' : 'grab',\n opacity: isDimmedByFilter ? 0.2 : isVisuallyDragging ? 0.9 : 1,\n pointerEvents: isDimmedByFilter ? 'none' : 'auto',\n transition: isVisuallyDragging ? 'opacity 0.1s, transform 0.05s, background-color 0.1s, box-shadow 0.1s, border-color 0.1s' : 'opacity 0.4s, border-color 0.4s, box-shadow 0.4s, background-color 0.4s, transform 0.4s ease-in-out',\n transform: isVisuallyDragging ? 'scale(1.005)' : 'scale(1)',\n zIndex: currentZIndex,\n touchAction: 'manipulation',\n userSelect: 'auto',\n position: 'relative',\n overflow: 'hidden'\n },\n children: [renderContent({\n node: nodeData,\n isSelected,\n isResizing,\n isDragging: isVisuallyDragging\n }), /*#__PURE__*/_jsx(ResizeHandle, {\n direction: \"nw\",\n createResizeStart: createResizeStart,\n handleResizeMove: handleResizeMove,\n handleResizeEnd: handleResizeEnd,\n isResizing: isResizing\n }), /*#__PURE__*/_jsx(ResizeHandle, {\n direction: \"ne\",\n createResizeStart: createResizeStart,\n handleResizeMove: handleResizeMove,\n handleResizeEnd: handleResizeEnd,\n isResizing: isResizing\n }), /*#__PURE__*/_jsx(ResizeHandle, {\n direction: \"sw\",\n createResizeStart: createResizeStart,\n handleResizeMove: handleResizeMove,\n handleResizeEnd: handleResizeEnd,\n isResizing: isResizing\n }), /*#__PURE__*/_jsx(ResizeHandle, {\n direction: \"se\",\n createResizeStart: createResizeStart,\n handleResizeMove: handleResizeMove,\n handleResizeEnd: handleResizeEnd,\n isResizing: isResizing,\n alwaysVisible: true\n }), /*#__PURE__*/_jsx(ResizeHandle, {\n direction: \"n\",\n createResizeStart: createResizeStart,\n handleResizeMove: handleResizeMove,\n handleResizeEnd: handleResizeEnd,\n isResizing: isResizing\n }), /*#__PURE__*/_jsx(ResizeHandle, {\n direction: \"s\",\n createResizeStart: createResizeStart,\n handleResizeMove: handleResizeMove,\n handleResizeEnd: handleResizeEnd,\n isResizing: isResizing\n }), /*#__PURE__*/_jsx(ResizeHandle, {\n direction: \"w\",\n createResizeStart: createResizeStart,\n handleResizeMove: handleResizeMove,\n handleResizeEnd: handleResizeEnd,\n isResizing: isResizing\n })]\n });\n\n // Apply wrapper if provided\n if (Wrapper) {\n return /*#__PURE__*/_jsx(Wrapper, {\n nodeData: nodeData,\n children: nodeContent\n });\n }\n return nodeContent;\n}","import { c as _c } from \"react/compiler-runtime\";\n/**\n * Resize Handle Component\n *\n * Touch-friendly handles for resizing nodes in 8 directions.\n * Uses a 44px invisible hit area with a smaller visual indicator.\n * The hit area meets Apple HIG minimum touch target (44pt).\n */\n\nimport React from 'react';\nimport { jsx as _jsx } from \"react/jsx-runtime\";\n/** Invisible touch hit area — meets Apple HIG 44pt minimum */\nconst HIT_AREA_SIZE = 44;\n/** Visual indicator size (the visible part the user sees) */\nconst VISUAL_SIZE = 12;\nconst VISUAL_OFFSET = -1;\nconst VISUAL_RADIUS = '8px';\nfunction getHitAreaStyles(direction) {\n const base = {\n position: 'absolute',\n width: `${HIT_AREA_SIZE}px`,\n height: `${HIT_AREA_SIZE}px`,\n zIndex: 10,\n touchAction: 'none',\n // Prevent iOS callout/magnifier on long-press\n WebkitTouchCallout: 'none',\n WebkitUserSelect: 'none',\n userSelect: 'none'\n };\n\n // Position the hit area centered on the corner/edge\n const halfHit = HIT_AREA_SIZE / 2;\n switch (direction) {\n case 'nw':\n return {\n ...base,\n top: -halfHit,\n left: -halfHit,\n cursor: 'nwse-resize'\n };\n case 'ne':\n return {\n ...base,\n top: -halfHit,\n right: -halfHit,\n cursor: 'nesw-resize'\n };\n case 'sw':\n return {\n ...base,\n bottom: -halfHit,\n left: -halfHit,\n cursor: 'nesw-resize'\n };\n case 'se':\n return {\n ...base,\n bottom: -halfHit,\n right: -halfHit,\n cursor: 'nwse-resize'\n };\n case 'n':\n return {\n ...base,\n top: -halfHit,\n left: '50%',\n transform: 'translateX(-50%)',\n cursor: 'ns-resize'\n };\n case 's':\n return {\n ...base,\n bottom: -halfHit,\n left: '50%',\n transform: 'translateX(-50%)',\n cursor: 'ns-resize'\n };\n case 'e':\n return {\n ...base,\n right: -halfHit,\n top: '50%',\n transform: 'translateY(-50%)',\n cursor: 'ew-resize'\n };\n case 'w':\n return {\n ...base,\n left: -halfHit,\n top: '50%',\n transform: 'translateY(-50%)',\n cursor: 'ew-resize'\n };\n }\n}\nfunction getVisualStyles(direction, isResizing) {\n const activeColor = 'var(--node-resize-handle-active, rgba(59, 130, 246, 0.8))';\n const inactiveColor = 'var(--node-resize-handle, rgba(0, 0, 0, 0.2))';\n const borderWidth = isResizing ? '4px' : '3px';\n const borderColor = isResizing ? activeColor : inactiveColor;\n const borderStyle = `${borderWidth} solid ${borderColor}`;\n const base = {\n position: 'absolute',\n pointerEvents: 'none',\n // Center the visual indicator within the hit area\n top: '50%',\n left: '50%',\n transform: 'translate(-50%, -50%)',\n width: `${VISUAL_SIZE}px`,\n height: `${VISUAL_SIZE}px`\n };\n\n // For corner handles, show corner borders on the visual indicator\n switch (direction) {\n case 'nw':\n return {\n ...base,\n borderTop: borderStyle,\n borderLeft: borderStyle,\n borderTopLeftRadius: VISUAL_RADIUS\n };\n case 'ne':\n return {\n ...base,\n borderTop: borderStyle,\n borderRight: borderStyle,\n borderTopRightRadius: VISUAL_RADIUS\n };\n case 'sw':\n return {\n ...base,\n borderBottom: borderStyle,\n borderLeft: borderStyle,\n borderBottomLeftRadius: VISUAL_RADIUS\n };\n case 'se':\n return {\n ...base,\n borderBottom: borderStyle,\n borderRight: borderStyle,\n borderBottomRightRadius: VISUAL_RADIUS\n };\n case 'n':\n return {\n ...base,\n borderTop: borderStyle,\n width: `${VISUAL_SIZE * 2}px`\n };\n case 's':\n return {\n ...base,\n borderBottom: borderStyle,\n width: `${VISUAL_SIZE * 2}px`\n };\n case 'e':\n return {\n ...base,\n borderRight: borderStyle,\n height: `${VISUAL_SIZE * 2}px`\n };\n case 'w':\n return {\n ...base,\n borderLeft: borderStyle,\n height: `${VISUAL_SIZE * 2}px`\n };\n }\n}\n\n/**\n * Touch-friendly resize handle.\n *\n * The invisible hit area is 44x44px (Apple HIG minimum).\n * The visual indicator is 12px and centered within the hit area.\n * Uses PointerEvent handlers (works with touch, stylus, and mouse).\n */\nexport function ResizeHandle(t0) {\n const $ = _c(26);\n const {\n direction,\n createResizeStart,\n handleResizeMove,\n handleResizeEnd,\n isResizing,\n alwaysVisible: t1\n } = t0;\n const alwaysVisible = t1 === undefined ? false : t1;\n let t2;\n if ($[0] !== createResizeStart || $[1] !== direction) {\n t2 = createResizeStart(direction);\n $[0] = createResizeStart;\n $[1] = direction;\n $[2] = t2;\n } else {\n t2 = $[2];\n }\n let t3;\n if ($[3] !== direction) {\n t3 = getHitAreaStyles(direction);\n $[3] = direction;\n $[4] = t3;\n } else {\n t3 = $[4];\n }\n const t4 = alwaysVisible || isResizing ? 1 : 0;\n let t5;\n if ($[5] !== t3 || $[6] !== t4) {\n t5 = {\n ...t3,\n opacity: t4,\n transition: \"opacity 200ms\"\n };\n $[5] = t3;\n $[6] = t4;\n $[7] = t5;\n } else {\n t5 = $[7];\n }\n let t6;\n if ($[8] !== alwaysVisible) {\n t6 = e => {\n if (!alwaysVisible) {\n e.currentTarget.style.opacity = \"1\";\n }\n };\n $[8] = alwaysVisible;\n $[9] = t6;\n } else {\n t6 = $[9];\n }\n let t7;\n if ($[10] !== alwaysVisible || $[11] !== isResizing) {\n t7 = e_0 => {\n if (!alwaysVisible && !isResizing) {\n e_0.currentTarget.style.opacity = \"0\";\n }\n };\n $[10] = alwaysVisible;\n $[11] = isResizing;\n $[12] = t7;\n } else {\n t7 = $[12];\n }\n let t8;\n if ($[13] !== direction || $[14] !== isResizing) {\n t8 = getVisualStyles(direction, isResizing);\n $[13] = direction;\n $[14] = isResizing;\n $[15] = t8;\n } else {\n t8 = $[15];\n }\n let t9;\n if ($[16] !== t8) {\n t9 = /*#__PURE__*/_jsx(\"div\", {\n style: t8\n });\n $[16] = t8;\n $[17] = t9;\n } else {\n t9 = $[17];\n }\n let t10;\n if ($[18] !== handleResizeEnd || $[19] !== handleResizeMove || $[20] !== t2 || $[21] !== t5 || $[22] !== t6 || $[23] !== t7 || $[24] !== t9) {\n t10 = /*#__PURE__*/_jsx(\"div\", {\n \"data-no-drag\": \"true\",\n onPointerDown: t2,\n onPointerMove: handleResizeMove,\n onPointerUp: handleResizeEnd,\n onPointerCancel: handleResizeEnd,\n style: t5,\n onPointerEnter: t6,\n onPointerLeave: t7,\n children: t9\n });\n $[18] = handleResizeEnd;\n $[19] = handleResizeMove;\n $[20] = t2;\n $[21] = t5;\n $[22] = t6;\n $[23] = t7;\n $[24] = t9;\n $[25] = t10;\n } else {\n t10 = $[25];\n }\n return t10;\n}","/**\n * useNodeGestures — Node-level gesture recognition hook\n *\n * Replaces the inline click counting, touch long-press timers, and\n * context menu handling in Node.tsx. Produces gesture events that\n * route through the v2 pipeline (resolve → dispatch).\n *\n * Drag mechanics stay in useNodeDrag — this hook handles:\n * - tap / double-tap / triple-tap (via TimedStateRunner)\n * - right-click (tap with button=2)\n * - long-press (finger/pencil only)\n * - hover enter/leave\n *\n * Returns event handler props to spread on the node DOM element.\n */\n\nimport { useRef, useEffect } from 'react';\nimport { useAtomValue } from 'jotai';\nimport { screenToWorldAtom } from '../core/viewport-store';\nimport { isStylusActiveAtom, fingerCountAtom } from '../core/input-store';\nimport { inputModeAtom, keyboardInteractionModeAtom } from '../core/interaction-store';\nimport { focusedNodeIdAtom, selectedNodeIdsAtom } from '../core/selection-store';\nimport { draggingNodeIdAtom, edgeCreationAtom } from '../core/graph-store';\nimport { isFilterActiveAtom } from '../core/search-store';\nimport { selectionPathAtom } from '../core/selection-path-store';\nimport { commandLineVisibleAtom } from '../commands/store';\nimport { classifyPointer } from '../core/input-classifier';\nimport { TimedStateRunner } from './timed-state-runner';\nimport { extractModifiers } from './normalize';\nimport { resolve } from './mapper';\nimport { dispatch } from './dispatcher';\nimport { NO_HELD_KEYS, NO_MODIFIERS } from './types';\nexport function useNodeGestures({\n nodeId,\n mappingIndex,\n onAction,\n heldKeys = NO_HELD_KEYS\n}) {\n const screenToWorld = useAtomValue(screenToWorldAtom);\n const isStylusActive = useAtomValue(isStylusActiveAtom);\n const fingerCount = useAtomValue(fingerCountAtom);\n const inputMode = useAtomValue(inputModeAtom);\n const keyboardInteractionMode = useAtomValue(keyboardInteractionModeAtom);\n const selectedNodeIds = useAtomValue(selectedNodeIdsAtom);\n const focusedNodeId = useAtomValue(focusedNodeIdAtom);\n const draggingNodeId = useAtomValue(draggingNodeIdAtom);\n const edgeCreation = useAtomValue(edgeCreationAtom);\n const selectionPath = useAtomValue(selectionPathAtom);\n const isSearchActive = useAtomValue(isFilterActiveAtom);\n const commandLineVisible = useAtomValue(commandLineVisibleAtom);\n const runner = useRef(new TimedStateRunner());\n const sourceRef = useRef('mouse');\n const buttonRef = useRef(0);\n const posRef = useRef({\n x: 0,\n y: 0\n });\n const modifiersRef = useRef(NO_MODIFIERS);\n // Track whether a right-button drag happened (suppress context menu)\n const rightDragSeen = useRef(false);\n\n // Guard context ref — kept fresh each render\n const guardRef = useRef({\n isStylusActive: false,\n fingerCount: 0,\n isDragging: false,\n isResizing: false,\n isSplitting: false,\n inputMode: {\n type: 'normal'\n },\n keyboardInteractionMode: 'navigate',\n selectedNodeIds: new Set(),\n focusedNodeId: null,\n isSearchActive: false,\n commandLineVisible: false,\n heldKeys: NO_HELD_KEYS,\n custom: {}\n });\n guardRef.current = {\n isStylusActive,\n fingerCount,\n isDragging: draggingNodeId !== null,\n isResizing: false,\n isSplitting: false,\n inputMode,\n keyboardInteractionMode,\n selectedNodeIds,\n focusedNodeId,\n isSearchActive,\n commandLineVisible,\n heldKeys,\n custom: {}\n };\n guardRef.current.custom = {\n isSelecting: selectionPath !== null,\n isCreatingEdge: edgeCreation.isCreating\n };\n\n // Cleanup\n useEffect(() => {\n return () => runner.current.destroy();\n }, []);\n const resolveAndDispatch = event => {\n const resolution = resolve(event, mappingIndex, guardRef.current);\n if (resolution) {\n dispatch(event, resolution);\n onAction?.(event, resolution);\n }\n return resolution;\n };\n const makeEvent = (type, phase, screenX, screenY) => {\n const worldPos = screenToWorld(screenX, screenY);\n return {\n kind: 'pointer',\n type,\n phase,\n subject: {\n kind: 'node',\n nodeId\n },\n source: sourceRef.current,\n button: buttonRef.current,\n modifiers: modifiersRef.current,\n heldKeys,\n screenPosition: {\n x: screenX,\n y: screenY\n },\n worldPosition: worldPos\n };\n };\n\n // Wire timer-based emits (long-press)\n useEffect(() => {\n runner.current.onEmit = gestureType => {\n if (gestureType === 'long-press') {\n const event_0 = makeEvent('long-press', 'instant', posRef.current.x, posRef.current.y);\n resolveAndDispatch(event_0);\n }\n };\n });\n const onPointerDown = e => {\n const classified = classifyPointer(e.nativeEvent);\n sourceRef.current = classified.source;\n buttonRef.current = e.button ?? 0;\n posRef.current = {\n x: e.clientX,\n y: e.clientY\n };\n modifiersRef.current = extractModifiers(e);\n rightDragSeen.current = false;\n runner.current.feed('down');\n };\n const onPointerUp = e_0 => {\n const emitted = runner.current.feed('up');\n if (emitted) {\n // Synchronous tap emit — build and resolve\n const event_1 = makeEvent(emitted, 'instant', e_0.clientX, e_0.clientY);\n resolveAndDispatch(event_1);\n }\n };\n const onPointerCancel = _e => {\n runner.current.feed('cancel');\n };\n const onContextMenu = e_1 => {\n // Always prevent default — we handle right-click through the pipeline\n e_1.preventDefault();\n e_1.stopPropagation();\n\n // If a right-drag was in progress, suppress the context menu\n if (rightDragSeen.current) {\n rightDragSeen.current = false;\n return;\n }\n\n // Right-click is handled as tap with button=2 via the timed state\n // machine's 'up' event. If the runner already emitted a tap,\n // it was dispatched in onPointerUp. If not (e.g., contextmenu\n // fires without paired pointer events on some browsers), we\n // fire a synthetic tap here as a fallback.\n const event_2 = makeEvent('tap', 'instant', e_1.clientX, e_1.clientY);\n event_2.button = 2;\n event_2.modifiers = extractModifiers(e_1);\n resolveAndDispatch(event_2);\n };\n return {\n onPointerDown,\n onPointerUp,\n onPointerCancel,\n onContextMenu\n };\n}","import { c as _c } from \"react/compiler-runtime\";\n/**\n * Node Error Boundary\n *\n * Catches errors in individual nodes to prevent the entire canvas from crashing.\n */\n\nimport React, { Component } from 'react';\nimport { createDebug } from '../utils/debug';\nimport { jsx as _jsx, jsxs as _jsxs } from \"react/jsx-runtime\";\nconst debug = createDebug('error-boundary');\n/**\n * Default fallback UI for errored nodes\n */\nfunction DefaultFallback(t0) {\n const $ = _c(11);\n const {\n error,\n reset\n } = t0;\n let t1;\n let t2;\n let t3;\n if ($[0] === Symbol.for(\"react.memo_cache_sentinel\")) {\n t1 = {\n padding: \"16px\",\n backgroundColor: \"rgba(239, 68, 68, 0.1)\",\n border: \"1px solid rgba(239, 68, 68, 0.3)\",\n borderRadius: \"8px\",\n color: \"#ef4444\",\n fontSize: \"12px\",\n minWidth: \"150px\"\n };\n t2 = /*#__PURE__*/_jsx(\"div\", {\n style: {\n fontWeight: 600,\n marginBottom: \"8px\"\n },\n children: \"\\u26A0\\uFE0F Node Error\"\n });\n t3 = {\n color: \"#888\",\n marginBottom: \"8px\",\n wordBreak: \"break-word\"\n };\n $[0] = t1;\n $[1] = t2;\n $[2] = t3;\n } else {\n t1 = $[0];\n t2 = $[1];\n t3 = $[2];\n }\n const t4 = error.message || \"Unknown error\";\n let t5;\n if ($[3] !== t4) {\n t5 = /*#__PURE__*/_jsx(\"div\", {\n style: t3,\n children: t4\n });\n $[3] = t4;\n $[4] = t5;\n } else {\n t5 = $[4];\n }\n let t6;\n if ($[5] === Symbol.for(\"react.memo_cache_sentinel\")) {\n t6 = {\n padding: \"4px 8px\",\n fontSize: \"11px\",\n backgroundColor: \"rgba(239, 68, 68, 0.2)\",\n border: \"1px solid rgba(239, 68, 68, 0.3)\",\n borderRadius: \"4px\",\n color: \"#ef4444\",\n cursor: \"pointer\"\n };\n $[5] = t6;\n } else {\n t6 = $[5];\n }\n let t7;\n if ($[6] !== reset) {\n t7 = /*#__PURE__*/_jsx(\"button\", {\n onClick: reset,\n style: t6,\n children: \"Retry\"\n });\n $[6] = reset;\n $[7] = t7;\n } else {\n t7 = $[7];\n }\n let t8;\n if ($[8] !== t5 || $[9] !== t7) {\n t8 = /*#__PURE__*/_jsxs(\"div\", {\n style: t1,\n children: [t2, t5, t7]\n });\n $[8] = t5;\n $[9] = t7;\n $[10] = t8;\n } else {\n t8 = $[10];\n }\n return t8;\n}\n\n/**\n * Error boundary component for individual nodes.\n * Catches rendering errors and displays a fallback UI.\n */\nexport class NodeErrorBoundary extends Component {\n constructor(props) {\n super(props);\n this.state = {\n hasError: false,\n error: null\n };\n }\n static getDerivedStateFromError(error) {\n return {\n hasError: true,\n error\n };\n }\n componentDidCatch(error, errorInfo) {\n const {\n nodeId,\n onError\n } = this.props;\n debug.error('Error in node %s: %O %O', nodeId, error, errorInfo);\n onError?.(nodeId, error, errorInfo);\n }\n reset = () => {\n this.setState({\n hasError: false,\n error: null\n });\n };\n render() {\n const {\n hasError,\n error\n } = this.state;\n const {\n nodeId,\n children,\n renderFallback\n } = this.props;\n if (hasError && error) {\n if (renderFallback) {\n return renderFallback({\n nodeId,\n error,\n reset: this.reset\n });\n }\n return /*#__PURE__*/_jsx(DefaultFallback, {\n nodeId: nodeId,\n error: error,\n reset: this.reset\n });\n }\n return children;\n }\n}","import { c as _c } from \"react/compiler-runtime\";\n/**\n * Edge Renderer Component\n *\n * Renders visible edges in the graph using configurable path styles.\n * Uses viewport virtualization - only edges with visible endpoints are rendered.\n * Supports bezier (horizontal/vertical/smart), straight, step, and smooth-step paths.\n */\n\nimport React from 'react';\nimport { useAtomValue, useSetAtom } from 'jotai';\nimport { edgeFamilyAtom } from '../core/graph-derived';\nimport { departingEdgesAtom, editingEdgeLabelAtom } from '../core/graph-mutations';\nimport { visibleEdgeKeysAtom } from '../core/virtualization-store';\nimport { selectedEdgeIdAtom, selectEdgeAtom } from '../core/selection-store';\nimport { zoomAtom } from '../core/viewport-store';\nimport { isFilterActiveAtom, searchResultsAtom, searchEdgeResultsAtom } from '../core/search-store';\nimport { useCanvasStyle } from '../providers/CanvasStyleProvider';\nimport { getEdgePathCalculator } from '../utils/edge-path-calculators';\nimport { jsx as _jsx, jsxs as _jsxs } from \"react/jsx-runtime\";\n// Selected edge highlight color\nconst SELECTED_EDGE_COLOR = '#3b82f6';\n/**\n * Renders visible edges in the graph (virtualized).\n * Only edges where both source and target nodes are visible are rendered.\n */\nexport function EdgeRenderer(t0) {\n const $ = _c(19);\n const {\n onEdgeClick,\n onEdgeDoubleClick,\n onEdgeRightClick,\n onEdgeHover,\n onEdgeLeave\n } = t0;\n const edgeKeys = useAtomValue(visibleEdgeKeysAtom);\n const departingEdges = useAtomValue(departingEdgesAtom);\n let t1;\n if ($[0] === Symbol.for(\"react.memo_cache_sentinel\")) {\n t1 = {\n position: \"absolute\",\n top: 0,\n left: 0,\n width: \"100%\",\n height: \"100%\",\n pointerEvents: \"none\",\n zIndex: 0,\n overflow: \"visible\"\n };\n $[0] = t1;\n } else {\n t1 = $[0];\n }\n let t2;\n if ($[1] !== edgeKeys || $[2] !== onEdgeClick || $[3] !== onEdgeDoubleClick || $[4] !== onEdgeHover || $[5] !== onEdgeLeave || $[6] !== onEdgeRightClick) {\n let t3;\n if ($[8] !== onEdgeClick || $[9] !== onEdgeDoubleClick || $[10] !== onEdgeHover || $[11] !== onEdgeLeave || $[12] !== onEdgeRightClick) {\n t3 = key => /*#__PURE__*/_jsx(EdgeItem, {\n edgeKey: key,\n onEdgeClick: onEdgeClick,\n onEdgeDoubleClick: onEdgeDoubleClick,\n onEdgeRightClick: onEdgeRightClick,\n onEdgeHover: onEdgeHover,\n onEdgeLeave: onEdgeLeave\n }, key);\n $[8] = onEdgeClick;\n $[9] = onEdgeDoubleClick;\n $[10] = onEdgeHover;\n $[11] = onEdgeLeave;\n $[12] = onEdgeRightClick;\n $[13] = t3;\n } else {\n t3 = $[13];\n }\n t2 = edgeKeys.map(t3);\n $[1] = edgeKeys;\n $[2] = onEdgeClick;\n $[3] = onEdgeDoubleClick;\n $[4] = onEdgeHover;\n $[5] = onEdgeLeave;\n $[6] = onEdgeRightClick;\n $[7] = t2;\n } else {\n t2 = $[7];\n }\n let t3;\n if ($[14] !== departingEdges) {\n t3 = Array.from(departingEdges.entries()).map(_temp);\n $[14] = departingEdges;\n $[15] = t3;\n } else {\n t3 = $[15];\n }\n let t4;\n if ($[16] !== t2 || $[17] !== t3) {\n t4 = /*#__PURE__*/_jsxs(\"svg\", {\n style: t1,\n children: [t2, t3]\n });\n $[16] = t2;\n $[17] = t3;\n $[18] = t4;\n } else {\n t4 = $[18];\n }\n return t4;\n}\nfunction _temp(t0) {\n const [key_0, edgeData] = t0;\n return /*#__PURE__*/_jsx(DepartingEdgeItem, {\n edgeData: edgeData\n }, `departing-${key_0}`);\n}\nfunction EdgeItem(t0) {\n const $ = _c(77);\n const {\n edgeKey,\n onEdgeClick,\n onEdgeDoubleClick,\n onEdgeRightClick,\n onEdgeHover,\n onEdgeLeave\n } = t0;\n let t1;\n if ($[0] !== edgeKey) {\n t1 = edgeFamilyAtom(edgeKey);\n $[0] = edgeKey;\n $[1] = t1;\n } else {\n t1 = $[1];\n }\n const edgeData = useAtomValue(t1);\n const styles = useCanvasStyle();\n const selectedEdgeId = useAtomValue(selectedEdgeIdAtom);\n const selectEdge = useSetAtom(selectEdgeAtom);\n const zoom = useAtomValue(zoomAtom);\n const setEditingEdgeLabel = useSetAtom(editingEdgeLabelAtom);\n const isFilterActive = useAtomValue(isFilterActiveAtom);\n const searchResults = useAtomValue(searchResultsAtom);\n const searchEdgeResults = useAtomValue(searchEdgeResultsAtom);\n const isSelected = selectedEdgeId === edgeKey;\n let color;\n let handleClick;\n let handleContextMenu;\n let handleDoubleClick;\n let handlePointerEnter;\n let handlePointerLeave;\n let label;\n let t2;\n let t3;\n let type;\n let weight;\n if ($[2] !== edgeData || $[3] !== edgeKey || $[4] !== onEdgeClick || $[5] !== onEdgeDoubleClick || $[6] !== onEdgeHover || $[7] !== onEdgeLeave || $[8] !== onEdgeRightClick || $[9] !== selectEdge || $[10] !== styles.edges.pathType || $[11] !== zoom) {\n t3 = Symbol.for(\"react.early_return_sentinel\");\n bb0: {\n const pathCalculator = getEdgePathCalculator(styles.edges.pathType || \"bezier\");\n let t4;\n if ($[23] !== edgeData || $[24] !== edgeKey || $[25] !== onEdgeClick || $[26] !== selectEdge) {\n t4 = e => {\n e.stopPropagation();\n if (onEdgeClick && edgeData) {\n onEdgeClick(edgeKey, edgeData, e);\n } else {\n selectEdge(edgeKey);\n }\n };\n $[23] = edgeData;\n $[24] = edgeKey;\n $[25] = onEdgeClick;\n $[26] = selectEdge;\n $[27] = t4;\n } else {\n t4 = $[27];\n }\n handleClick = t4;\n let t5;\n if ($[28] !== edgeData || $[29] !== edgeKey || $[30] !== onEdgeDoubleClick) {\n t5 = e_0 => {\n if (onEdgeDoubleClick && edgeData) {\n e_0.stopPropagation();\n e_0.preventDefault();\n onEdgeDoubleClick(edgeKey, edgeData, e_0);\n }\n };\n $[28] = edgeData;\n $[29] = edgeKey;\n $[30] = onEdgeDoubleClick;\n $[31] = t5;\n } else {\n t5 = $[31];\n }\n handleDoubleClick = t5;\n let t6;\n if ($[32] !== edgeData || $[33] !== edgeKey || $[34] !== onEdgeRightClick) {\n t6 = e_1 => {\n if (onEdgeRightClick && edgeData) {\n e_1.preventDefault();\n e_1.stopPropagation();\n onEdgeRightClick(edgeKey, edgeData, e_1);\n }\n };\n $[32] = edgeData;\n $[33] = edgeKey;\n $[34] = onEdgeRightClick;\n $[35] = t6;\n } else {\n t6 = $[35];\n }\n handleContextMenu = t6;\n let t7;\n if ($[36] !== edgeData || $[37] !== edgeKey || $[38] !== onEdgeHover) {\n t7 = () => {\n if (onEdgeHover && edgeData) {\n onEdgeHover(edgeKey, edgeData);\n }\n };\n $[36] = edgeData;\n $[37] = edgeKey;\n $[38] = onEdgeHover;\n $[39] = t7;\n } else {\n t7 = $[39];\n }\n handlePointerEnter = t7;\n let t8;\n if ($[40] !== edgeKey || $[41] !== onEdgeLeave) {\n t8 = () => {\n if (onEdgeLeave) {\n onEdgeLeave(edgeKey);\n }\n };\n $[40] = edgeKey;\n $[41] = onEdgeLeave;\n $[42] = t8;\n } else {\n t8 = $[42];\n }\n handlePointerLeave = t8;\n if (!edgeData) {\n t3 = null;\n break bb0;\n }\n const {\n sourcePosition,\n targetPosition,\n color: t9,\n weight: t10,\n type: t11,\n label: t12,\n sourceEndpoint,\n targetEndpoint\n } = edgeData;\n color = t9;\n weight = t10;\n type = t11;\n label = t12;\n const x1 = sourceEndpoint?.x ?? sourcePosition.x + edgeData.sourceNodeWidth / 2;\n const y1 = sourceEndpoint?.y ?? sourcePosition.y + edgeData.sourceNodeHeight / 2;\n const x2 = targetEndpoint?.x ?? targetPosition.x + edgeData.targetNodeWidth / 2;\n const y2 = targetEndpoint?.y ?? targetPosition.y + edgeData.targetNodeHeight / 2;\n if (isNaN(x1) || isNaN(y1) || isNaN(x2) || isNaN(y2) || zoom === 0) {\n t3 = null;\n break bb0;\n }\n t2 = pathCalculator({\n x1,\n y1,\n x2,\n y2,\n sourceWidth: edgeData.sourceNodeWidth,\n sourceHeight: edgeData.sourceNodeHeight,\n targetWidth: edgeData.targetNodeWidth,\n targetHeight: edgeData.targetNodeHeight\n });\n }\n $[2] = edgeData;\n $[3] = edgeKey;\n $[4] = onEdgeClick;\n $[5] = onEdgeDoubleClick;\n $[6] = onEdgeHover;\n $[7] = onEdgeLeave;\n $[8] = onEdgeRightClick;\n $[9] = selectEdge;\n $[10] = styles.edges.pathType;\n $[11] = zoom;\n $[12] = color;\n $[13] = handleClick;\n $[14] = handleContextMenu;\n $[15] = handleDoubleClick;\n $[16] = handlePointerEnter;\n $[17] = handlePointerLeave;\n $[18] = label;\n $[19] = t2;\n $[20] = t3;\n $[21] = type;\n $[22] = weight;\n } else {\n color = $[12];\n handleClick = $[13];\n handleContextMenu = $[14];\n handleDoubleClick = $[15];\n handlePointerEnter = $[16];\n handlePointerLeave = $[17];\n label = $[18];\n t2 = $[19];\n t3 = $[20];\n type = $[21];\n weight = $[22];\n }\n if (t3 !== Symbol.for(\"react.early_return_sentinel\")) {\n return t3;\n }\n const {\n path: pathD,\n labelX,\n labelY\n } = t2;\n const edgeColor = isSelected ? SELECTED_EDGE_COLOR : color || styles.edges.defaultColor;\n const baseStrokeWidth = weight || styles.edges.defaultWeight;\n const effectiveStrokeWidth = (isSelected ? baseStrokeWidth * 1.5 : baseStrokeWidth) / zoom;\n const effectiveFontSize = 10 / zoom;\n const hitboxStrokeWidth = Math.max(10, baseStrokeWidth * 3) / zoom;\n const isDimmedByFilter = isFilterActive && !searchResults.has(edgeData.sourceId) && !searchResults.has(edgeData.targetId) && !searchEdgeResults.has(edgeKey);\n const edgeOpacity = isDimmedByFilter ? 0.2 : 1;\n let t4;\n if ($[43] !== edgeOpacity) {\n t4 = {\n cursor: \"pointer\",\n opacity: edgeOpacity,\n transition: \"opacity 150ms ease\"\n };\n $[43] = edgeOpacity;\n $[44] = t4;\n } else {\n t4 = $[44];\n }\n const t5 = isDimmedByFilter ? \"none\" : \"stroke\";\n let t6;\n if ($[45] !== t5) {\n t6 = {\n pointerEvents: t5\n };\n $[45] = t5;\n $[46] = t6;\n } else {\n t6 = $[46];\n }\n let t7;\n if ($[47] !== handleClick || $[48] !== handleContextMenu || $[49] !== handleDoubleClick || $[50] !== handlePointerEnter || $[51] !== handlePointerLeave || $[52] !== hitboxStrokeWidth || $[53] !== pathD || $[54] !== t6) {\n t7 = /*#__PURE__*/_jsx(\"path\", {\n d: pathD,\n stroke: \"transparent\",\n strokeWidth: hitboxStrokeWidth,\n fill: \"none\",\n style: t6,\n onClick: handleClick,\n onDoubleClick: handleDoubleClick,\n onContextMenu: handleContextMenu,\n onPointerEnter: handlePointerEnter,\n onPointerLeave: handlePointerLeave\n });\n $[47] = handleClick;\n $[48] = handleContextMenu;\n $[49] = handleDoubleClick;\n $[50] = handlePointerEnter;\n $[51] = handlePointerLeave;\n $[52] = hitboxStrokeWidth;\n $[53] = pathD;\n $[54] = t6;\n $[55] = t7;\n } else {\n t7 = $[55];\n }\n const t8 = type === \"dashed\" ? `calc(5px / ${zoom}) calc(5px / ${zoom})` : undefined;\n let t9;\n if ($[56] === Symbol.for(\"react.memo_cache_sentinel\")) {\n t9 = {\n pointerEvents: \"none\"\n };\n $[56] = t9;\n } else {\n t9 = $[56];\n }\n let t10;\n if ($[57] !== edgeColor || $[58] !== effectiveStrokeWidth || $[59] !== pathD || $[60] !== t8) {\n t10 = /*#__PURE__*/_jsx(\"path\", {\n d: pathD,\n stroke: edgeColor,\n strokeWidth: effectiveStrokeWidth,\n fill: \"none\",\n strokeDasharray: t8,\n style: t9\n });\n $[57] = edgeColor;\n $[58] = effectiveStrokeWidth;\n $[59] = pathD;\n $[60] = t8;\n $[61] = t10;\n } else {\n t10 = $[61];\n }\n let t11;\n if ($[62] !== edgeKey || $[63] !== effectiveFontSize || $[64] !== label || $[65] !== labelX || $[66] !== labelY || $[67] !== setEditingEdgeLabel || $[68] !== styles.edges.labelColor || $[69] !== styles.edges.labelStrokeColor || $[70] !== zoom) {\n t11 = label && /*#__PURE__*/_jsx(\"text\", {\n x: labelX,\n y: labelY,\n fontSize: `${effectiveFontSize}px`,\n fill: styles.edges.labelColor,\n stroke: styles.edges.labelStrokeColor,\n strokeWidth: `${0.2 / zoom}px`,\n textAnchor: \"middle\",\n dy: `${-5 / zoom}px`,\n style: {\n pointerEvents: \"visiblePainted\",\n cursor: \"text\"\n },\n onDoubleClick: e_2 => {\n e_2.stopPropagation();\n e_2.preventDefault();\n setEditingEdgeLabel(edgeKey);\n },\n children: label\n });\n $[62] = edgeKey;\n $[63] = effectiveFontSize;\n $[64] = label;\n $[65] = labelX;\n $[66] = labelY;\n $[67] = setEditingEdgeLabel;\n $[68] = styles.edges.labelColor;\n $[69] = styles.edges.labelStrokeColor;\n $[70] = zoom;\n $[71] = t11;\n } else {\n t11 = $[71];\n }\n let t12;\n if ($[72] !== t10 || $[73] !== t11 || $[74] !== t4 || $[75] !== t7) {\n t12 = /*#__PURE__*/_jsxs(\"g\", {\n style: t4,\n children: [t7, t10, t11]\n });\n $[72] = t10;\n $[73] = t11;\n $[74] = t4;\n $[75] = t7;\n $[76] = t12;\n } else {\n t12 = $[76];\n }\n return t12;\n}\n\n/**\n * Renders a departing (exiting) edge with fade-out animation.\n * Uses a static snapshot — no atom subscriptions needed.\n */\nfunction DepartingEdgeItem(t0) {\n const $ = _c(14);\n const {\n edgeData\n } = t0;\n const styles = useCanvasStyle();\n const zoom = useAtomValue(zoomAtom);\n let color;\n let t1;\n let t2;\n let type;\n let weight;\n if ($[0] !== edgeData || $[1] !== styles.edges.pathType || $[2] !== zoom) {\n t2 = Symbol.for(\"react.early_return_sentinel\");\n bb0: {\n const pathCalculator = getEdgePathCalculator(styles.edges.pathType || \"bezier\");\n const {\n sourcePosition,\n targetPosition,\n color: t3,\n weight: t4,\n type: t5,\n sourceEndpoint,\n targetEndpoint\n } = edgeData;\n color = t3;\n weight = t4;\n type = t5;\n const x1 = sourceEndpoint?.x ?? sourcePosition.x + edgeData.sourceNodeWidth / 2;\n const y1 = sourceEndpoint?.y ?? sourcePosition.y + edgeData.sourceNodeHeight / 2;\n const x2 = targetEndpoint?.x ?? targetPosition.x + edgeData.targetNodeWidth / 2;\n const y2 = targetEndpoint?.y ?? targetPosition.y + edgeData.targetNodeHeight / 2;\n if (isNaN(x1) || isNaN(y1) || isNaN(x2) || isNaN(y2) || zoom === 0) {\n t2 = null;\n break bb0;\n }\n t1 = pathCalculator({\n x1,\n y1,\n x2,\n y2,\n sourceWidth: edgeData.sourceNodeWidth,\n sourceHeight: edgeData.sourceNodeHeight,\n targetWidth: edgeData.targetNodeWidth,\n targetHeight: edgeData.targetNodeHeight\n });\n }\n $[0] = edgeData;\n $[1] = styles.edges.pathType;\n $[2] = zoom;\n $[3] = color;\n $[4] = t1;\n $[5] = t2;\n $[6] = type;\n $[7] = weight;\n } else {\n color = $[3];\n t1 = $[4];\n t2 = $[5];\n type = $[6];\n weight = $[7];\n }\n if (t2 !== Symbol.for(\"react.early_return_sentinel\")) {\n return t2;\n }\n const {\n path: pathD\n } = t1;\n const edgeColor = color || styles.edges.defaultColor;\n const baseStrokeWidth = weight || styles.edges.defaultWeight;\n const effectiveStrokeWidth = baseStrokeWidth / zoom;\n const t3 = type === \"dashed\" ? `calc(5px / ${zoom}) calc(5px / ${zoom})` : undefined;\n let t4;\n if ($[8] === Symbol.for(\"react.memo_cache_sentinel\")) {\n t4 = {\n pointerEvents: \"none\"\n };\n $[8] = t4;\n } else {\n t4 = $[8];\n }\n let t5;\n if ($[9] !== edgeColor || $[10] !== effectiveStrokeWidth || $[11] !== pathD || $[12] !== t3) {\n t5 = /*#__PURE__*/_jsx(\"g\", {\n className: \"canvas-edge-exit\",\n children: /*#__PURE__*/_jsx(\"path\", {\n d: pathD,\n stroke: edgeColor,\n strokeWidth: effectiveStrokeWidth,\n fill: \"none\",\n strokeDasharray: t3,\n style: t4\n })\n });\n $[9] = edgeColor;\n $[10] = effectiveStrokeWidth;\n $[11] = pathD;\n $[12] = t3;\n $[13] = t5;\n } else {\n t5 = $[13];\n }\n return t5;\n}","import { c as _c } from \"react/compiler-runtime\";\n/**\n * Edge Label Editor\n *\n * Renders an HTML input overlay positioned at the edge label's world coordinates.\n * Activated by double-clicking an edge label. Commits on blur/Enter, cancels on Escape.\n */\n\nimport React, { useRef, useEffect } from 'react';\nimport { useAtomValue, useSetAtom } from 'jotai';\nimport { edgeFamilyAtom } from '../core/graph-derived';\nimport { editingEdgeLabelAtom, updateEdgeLabelAtom } from '../core/graph-mutations';\nimport { panAtom, zoomAtom } from '../core/viewport-store';\nimport { getEdgePathCalculator } from '../utils/edge-path-calculators';\nimport { useCanvasStyle } from '../providers/CanvasStyleProvider';\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nexport function EdgeLabelEditor(t0) {\n const $ = _c(3);\n const {\n className\n } = t0;\n const editingEdgeKey = useAtomValue(editingEdgeLabelAtom);\n if (!editingEdgeKey) {\n return null;\n }\n let t1;\n if ($[0] !== className || $[1] !== editingEdgeKey) {\n t1 = /*#__PURE__*/_jsx(EdgeLabelInput, {\n edgeKey: editingEdgeKey,\n className: className\n });\n $[0] = className;\n $[1] = editingEdgeKey;\n $[2] = t1;\n } else {\n t1 = $[2];\n }\n return t1;\n}\nfunction EdgeLabelInput(t0) {\n const $ = _c(29);\n const {\n edgeKey,\n className\n } = t0;\n let t1;\n if ($[0] !== edgeKey) {\n t1 = edgeFamilyAtom(edgeKey);\n $[0] = edgeKey;\n $[1] = t1;\n } else {\n t1 = $[1];\n }\n const edgeData = useAtomValue(t1);\n const setEditingEdge = useSetAtom(editingEdgeLabelAtom);\n const updateLabel = useSetAtom(updateEdgeLabelAtom);\n const pan = useAtomValue(panAtom);\n const zoom = useAtomValue(zoomAtom);\n const styles = useCanvasStyle();\n const inputRef = useRef(null);\n let t2;\n let t3;\n if ($[2] === Symbol.for(\"react.memo_cache_sentinel\")) {\n t2 = () => {\n if (inputRef.current) {\n inputRef.current.focus();\n inputRef.current.select();\n }\n };\n t3 = [];\n $[2] = t2;\n $[3] = t3;\n } else {\n t2 = $[2];\n t3 = $[3];\n }\n useEffect(t2, t3);\n if (!edgeData) {\n setEditingEdge(null);\n return null;\n }\n const {\n sourcePosition,\n targetPosition,\n sourceEndpoint,\n targetEndpoint\n } = edgeData;\n const x1 = sourceEndpoint?.x ?? sourcePosition.x + edgeData.sourceNodeWidth / 2;\n const y1 = sourceEndpoint?.y ?? sourcePosition.y + edgeData.sourceNodeHeight / 2;\n const x2 = targetEndpoint?.x ?? targetPosition.x + edgeData.targetNodeWidth / 2;\n const y2 = targetEndpoint?.y ?? targetPosition.y + edgeData.targetNodeHeight / 2;\n let t4;\n if ($[4] !== edgeData.sourceNodeHeight || $[5] !== edgeData.sourceNodeWidth || $[6] !== edgeData.targetNodeHeight || $[7] !== edgeData.targetNodeWidth || $[8] !== styles.edges.pathType || $[9] !== x1 || $[10] !== x2 || $[11] !== y1 || $[12] !== y2) {\n const pathCalculator = getEdgePathCalculator(styles.edges.pathType || \"bezier\");\n t4 = pathCalculator({\n x1,\n y1,\n x2,\n y2,\n sourceWidth: edgeData.sourceNodeWidth,\n sourceHeight: edgeData.sourceNodeHeight,\n targetWidth: edgeData.targetNodeWidth,\n targetHeight: edgeData.targetNodeHeight\n });\n $[4] = edgeData.sourceNodeHeight;\n $[5] = edgeData.sourceNodeWidth;\n $[6] = edgeData.targetNodeHeight;\n $[7] = edgeData.targetNodeWidth;\n $[8] = styles.edges.pathType;\n $[9] = x1;\n $[10] = x2;\n $[11] = y1;\n $[12] = y2;\n $[13] = t4;\n } else {\n t4 = $[13];\n }\n const {\n labelX,\n labelY\n } = t4;\n const screenX = labelX * zoom + pan.x;\n const screenY = labelY * zoom + pan.y;\n let t5;\n if ($[14] !== edgeKey || $[15] !== setEditingEdge || $[16] !== updateLabel) {\n t5 = e => {\n updateLabel({\n edgeKey,\n label: e.target.value\n });\n setEditingEdge(null);\n };\n $[14] = edgeKey;\n $[15] = setEditingEdge;\n $[16] = updateLabel;\n $[17] = t5;\n } else {\n t5 = $[17];\n }\n const handleBlur = t5;\n let t6;\n if ($[18] !== setEditingEdge) {\n t6 = e_0 => {\n if (e_0.key === \"Enter\") {\n e_0.currentTarget.blur();\n } else {\n if (e_0.key === \"Escape\") {\n setEditingEdge(null);\n }\n }\n };\n $[18] = setEditingEdge;\n $[19] = t6;\n } else {\n t6 = $[19];\n }\n const handleKeyDown = t6;\n const t7 = edgeData.label || \"\";\n let t8;\n if ($[20] !== screenX || $[21] !== screenY) {\n t8 = {\n position: \"absolute\",\n left: screenX,\n top: screenY,\n transform: \"translate(-50%, -50%)\",\n zIndex: 10000,\n fontSize: \"10px\",\n padding: \"2px 6px\",\n border: \"1px solid #3b82f6\",\n borderRadius: \"3px\",\n outline: \"none\",\n background: \"white\",\n textAlign: \"center\",\n minWidth: \"60px\"\n };\n $[20] = screenX;\n $[21] = screenY;\n $[22] = t8;\n } else {\n t8 = $[22];\n }\n let t9;\n if ($[23] !== className || $[24] !== handleBlur || $[25] !== handleKeyDown || $[26] !== t7 || $[27] !== t8) {\n t9 = /*#__PURE__*/_jsx(\"input\", {\n ref: inputRef,\n \"data-no-drag\": \"true\",\n className: className,\n defaultValue: t7,\n onBlur: handleBlur,\n onKeyDown: handleKeyDown,\n style: t8\n });\n $[23] = className;\n $[24] = handleBlur;\n $[25] = handleKeyDown;\n $[26] = t7;\n $[27] = t8;\n $[28] = t9;\n } else {\n t9 = $[28];\n }\n return t9;\n}","import { c as _c } from \"react/compiler-runtime\";\n/**\n * EdgePreviewLine Component\n *\n * Renders an animated SVG preview line during edge creation.\n * Reads from `edgeCreationAtom` and draws a bezier-smart path\n * from the source port/position to the cursor (or snapped port).\n */\n\nimport React from 'react';\nimport { useAtomValue } from 'jotai';\nimport { edgeCreationAtom } from '../core/graph-store';\nimport { bezierSmart } from '../utils/edge-path-calculators';\n\n// Dash pattern for the preview line\nimport { jsx as _jsx, jsxs as _jsxs } from \"react/jsx-runtime\";\nconst DASH_ARRAY = '8 4';\nconst DASH_OFFSET_ANIMATION = 'canvas-edge-preview-dash';\n\n// Colors\nconst IDLE_COLOR = 'rgba(150, 150, 150, 0.6)';\nconst VALID_TARGET_COLOR = 'var(--canvas-edge-preview-valid, #4ade80)';\nconst SNAP_COLOR = 'var(--canvas-edge-preview-snap, #60a5fa)';\n\n/**\n * SVG preview line rendered above edges and below nodes during edge creation.\n * Shows an animated dashed line from the source port to the cursor position.\n */\nexport function EdgePreviewLine() {\n const $ = _c(28);\n const edgeCreation = useAtomValue(edgeCreationAtom);\n if (!edgeCreation.isCreating || !edgeCreation.sourceNodePosition) {\n return null;\n }\n const source = edgeCreation.sourceNodePosition;\n const target = edgeCreation.snappedTargetPosition ?? edgeCreation.targetPosition;\n if (!target) {\n return null;\n }\n const hasValidTarget = edgeCreation.hoveredTargetNodeId !== null;\n const isSnapped = edgeCreation.snappedTargetPosition !== null;\n let strokeColor = IDLE_COLOR;\n if (isSnapped) {\n strokeColor = SNAP_COLOR;\n } else {\n if (hasValidTarget) {\n strokeColor = VALID_TARGET_COLOR;\n }\n }\n let t0;\n if ($[0] !== source.x || $[1] !== source.y || $[2] !== target.x || $[3] !== target.y) {\n const pathInput = {\n x1: source.x,\n y1: source.y,\n x2: target.x,\n y2: target.y,\n sourceWidth: 0,\n sourceHeight: 0,\n targetWidth: 0,\n targetHeight: 0\n };\n t0 = bezierSmart(pathInput);\n $[0] = source.x;\n $[1] = source.y;\n $[2] = target.x;\n $[3] = target.y;\n $[4] = t0;\n } else {\n t0 = $[4];\n }\n const {\n path\n } = t0;\n const dotRadius = isSnapped ? 6 : 4;\n let t1;\n if ($[5] === Symbol.for(\"react.memo_cache_sentinel\")) {\n t1 = {\n position: \"absolute\",\n top: 0,\n left: 0,\n width: \"100%\",\n height: \"100%\",\n pointerEvents: \"none\",\n overflow: \"visible\",\n zIndex: 5\n };\n $[5] = t1;\n } else {\n t1 = $[5];\n }\n const t2 = isSnapped ? 2.5 : 2;\n let t3;\n let t4;\n if ($[6] === Symbol.for(\"react.memo_cache_sentinel\")) {\n t3 = {\n transition: \"stroke 150ms, stroke-width 150ms\"\n };\n t4 = /*#__PURE__*/_jsx(\"animate\", {\n attributeName: \"stroke-dashoffset\",\n from: \"24\",\n to: \"0\",\n dur: \"0.8s\",\n repeatCount: \"indefinite\"\n });\n $[6] = t3;\n $[7] = t4;\n } else {\n t3 = $[6];\n t4 = $[7];\n }\n let t5;\n if ($[8] !== path || $[9] !== strokeColor || $[10] !== t2) {\n t5 = /*#__PURE__*/_jsx(\"path\", {\n d: path,\n fill: \"none\",\n stroke: strokeColor,\n strokeWidth: t2,\n strokeDasharray: DASH_ARRAY,\n strokeLinecap: \"round\",\n style: t3,\n children: t4\n });\n $[8] = path;\n $[9] = strokeColor;\n $[10] = t2;\n $[11] = t5;\n } else {\n t5 = $[11];\n }\n let t6;\n if ($[12] === Symbol.for(\"react.memo_cache_sentinel\")) {\n t6 = {\n transition: \"fill 150ms\"\n };\n $[12] = t6;\n } else {\n t6 = $[12];\n }\n let t7;\n if ($[13] !== source.x || $[14] !== source.y || $[15] !== strokeColor) {\n t7 = /*#__PURE__*/_jsx(\"circle\", {\n cx: source.x,\n cy: source.y,\n r: 4,\n fill: strokeColor,\n style: t6\n });\n $[13] = source.x;\n $[14] = source.y;\n $[15] = strokeColor;\n $[16] = t7;\n } else {\n t7 = $[16];\n }\n const t8 = isSnapped ? SNAP_COLOR : \"transparent\";\n let t9;\n if ($[17] === Symbol.for(\"react.memo_cache_sentinel\")) {\n t9 = {\n transition: \"r 150ms, fill 150ms\"\n };\n $[17] = t9;\n } else {\n t9 = $[17];\n }\n let t10;\n if ($[18] !== dotRadius || $[19] !== strokeColor || $[20] !== t8 || $[21] !== target.x || $[22] !== target.y) {\n t10 = /*#__PURE__*/_jsx(\"circle\", {\n cx: target.x,\n cy: target.y,\n r: dotRadius,\n fill: t8,\n stroke: strokeColor,\n strokeWidth: 1.5,\n style: t9\n });\n $[18] = dotRadius;\n $[19] = strokeColor;\n $[20] = t8;\n $[21] = target.x;\n $[22] = target.y;\n $[23] = t10;\n } else {\n t10 = $[23];\n }\n let t11;\n if ($[24] !== t10 || $[25] !== t5 || $[26] !== t7) {\n t11 = /*#__PURE__*/_jsxs(\"svg\", {\n style: t1,\n children: [t5, t7, t10]\n });\n $[24] = t10;\n $[25] = t5;\n $[26] = t7;\n $[27] = t11;\n } else {\n t11 = $[27];\n }\n return t11;\n}","import { c as _c } from \"react/compiler-runtime\";\n/**\n * useSelectionChangeEffect\n *\n * Fires a callback whenever node or edge selection changes.\n */\n\nimport { useEffect, useRef } from 'react';\nimport { useAtomValue } from 'jotai';\nimport { selectedNodeIdsAtom, selectedEdgeIdAtom } from '../core/selection-store';\nexport function useSelectionChangeEffect(onSelectionChange) {\n const $ = _c(5);\n const selectedNodeIds = useAtomValue(selectedNodeIdsAtom);\n const selectedEdgeId = useAtomValue(selectedEdgeIdAtom);\n const isFirstRender = useRef(true);\n let t0;\n let t1;\n if ($[0] !== onSelectionChange || $[1] !== selectedEdgeId || $[2] !== selectedNodeIds) {\n t0 = () => {\n if (isFirstRender.current) {\n isFirstRender.current = false;\n return;\n }\n onSelectionChange?.(selectedNodeIds, selectedEdgeId);\n };\n t1 = [selectedNodeIds, selectedEdgeId, onSelectionChange];\n $[0] = onSelectionChange;\n $[1] = selectedEdgeId;\n $[2] = selectedNodeIds;\n $[3] = t0;\n $[4] = t1;\n } else {\n t0 = $[3];\n t1 = $[4];\n }\n useEffect(t0, t1);\n}","import { c as _c } from \"react/compiler-runtime\";\n/**\n * useViewportChangeEffect\n *\n * Fires a callback when zoom or pan changes, debounced via rAF\n * to avoid per-frame spam during pinch/scroll gestures.\n */\n\nimport { useEffect, useRef } from 'react';\nimport { useAtomValue } from 'jotai';\nimport { zoomAtom, panAtom } from '../core/viewport-store';\nexport function useViewportChangeEffect(onViewportChange) {\n const $ = _c(5);\n const zoom = useAtomValue(zoomAtom);\n const pan = useAtomValue(panAtom);\n const rafRef = useRef(null);\n const isFirstRender = useRef(true);\n let t0;\n let t1;\n if ($[0] !== onViewportChange || $[1] !== pan || $[2] !== zoom) {\n t0 = () => {\n if (isFirstRender.current) {\n isFirstRender.current = false;\n return;\n }\n if (!onViewportChange) {\n return;\n }\n if (rafRef.current !== null) {\n cancelAnimationFrame(rafRef.current);\n }\n rafRef.current = requestAnimationFrame(() => {\n onViewportChange({\n zoom,\n pan\n });\n rafRef.current = null;\n });\n return () => {\n if (rafRef.current !== null) {\n cancelAnimationFrame(rafRef.current);\n }\n };\n };\n t1 = [zoom, pan, onViewportChange];\n $[0] = onViewportChange;\n $[1] = pan;\n $[2] = zoom;\n $[3] = t0;\n $[4] = t1;\n } else {\n t0 = $[3];\n t1 = $[4];\n }\n useEffect(t0, t1);\n}","import { c as _c } from \"react/compiler-runtime\";\n/**\n * useDragLifecycleEffect\n *\n * Fires onDragStart/onDragEnd callbacks by watching the draggingNodeIdAtom.\n * When it transitions null → id, fires onDragStart with all selected node IDs.\n * When it transitions id → null, fires onDragEnd with final positions.\n */\n\nimport { useEffect, useRef } from 'react';\nimport { useAtomValue, useStore } from 'jotai';\nimport { draggingNodeIdAtom, graphAtom } from '../core/graph-store';\nimport { selectedNodeIdsAtom } from '../core/selection-store';\nexport function useDragLifecycleEffect(onDragStart, onDragEnd) {\n const $ = _c(7);\n const draggingNodeId = useAtomValue(draggingNodeIdAtom);\n const store = useStore();\n const prevDraggingRef = useRef(null);\n let t0;\n if ($[0] === Symbol.for(\"react.memo_cache_sentinel\")) {\n t0 = [];\n $[0] = t0;\n } else {\n t0 = $[0];\n }\n const draggedNodeIdsRef = useRef(t0);\n let t1;\n let t2;\n if ($[1] !== draggingNodeId || $[2] !== onDragEnd || $[3] !== onDragStart || $[4] !== store) {\n t1 = () => {\n const prev = prevDraggingRef.current;\n prevDraggingRef.current = draggingNodeId;\n if (prev === null && draggingNodeId !== null) {\n const selectedIds = Array.from(store.get(selectedNodeIdsAtom));\n draggedNodeIdsRef.current = selectedIds;\n onDragStart?.(selectedIds);\n } else {\n if (prev !== null && draggingNodeId === null) {\n const nodeIds = draggedNodeIdsRef.current;\n if (onDragEnd && nodeIds.length > 0) {\n const graph = store.get(graphAtom);\n const positions = new Map();\n for (const id of nodeIds) {\n if (graph.hasNode(id)) {\n const attrs = graph.getNodeAttributes(id);\n positions.set(id, {\n x: attrs.x,\n y: attrs.y\n });\n }\n }\n onDragEnd(nodeIds, positions);\n }\n draggedNodeIdsRef.current = [];\n }\n }\n };\n t2 = [draggingNodeId, store, onDragStart, onDragEnd];\n $[1] = draggingNodeId;\n $[2] = onDragEnd;\n $[3] = onDragStart;\n $[4] = store;\n $[5] = t1;\n $[6] = t2;\n } else {\n t1 = $[5];\n t2 = $[6];\n }\n useEffect(t1, t2);\n}","import { c as _c } from \"react/compiler-runtime\";\n/**\n * Connected Node Component\n *\n * A batteries-included node that automatically persists changes to Supabase.\n * Apps only need to provide the Supabase URL and run migrations.\n */\n\nimport React from 'react';\nimport { Node } from './Node';\nimport { useUpdateNode } from '../db/hooks/useUpdateNode';\nimport { createDebug } from '../utils/debug';\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nconst debug = createDebug('connected-node');\n\n// Re-export types for convenience\n\n/**\n * Node component with automatic Supabase persistence.\n *\n * Wraps the base Node component and auto-wires the `useUpdateNode`\n * hook for database persistence.\n */\nexport function ConnectedNode(t0) {\n const $ = _c(10);\n const {\n nodeData,\n renderContent,\n onPersistError: customErrorHandler,\n wrapper\n } = t0;\n const {\n mutateAsync: updateNode\n } = useUpdateNode();\n let t1;\n if ($[0] !== updateNode) {\n t1 = async (nodeId, graphId, uiProperties) => {\n debug(\"Persisting node %s to graph %s\", nodeId, graphId);\n await updateNode({\n nodeId,\n graphId,\n updates: {\n ui_properties: uiProperties\n }\n });\n };\n $[0] = updateNode;\n $[1] = t1;\n } else {\n t1 = $[1];\n }\n const handlePersist = t1;\n let t2;\n if ($[2] !== customErrorHandler) {\n t2 = (nodeId_0, error) => {\n debug(\"Failed to persist node %s: %o\", nodeId_0, error);\n customErrorHandler?.(nodeId_0, error);\n };\n $[2] = customErrorHandler;\n $[3] = t2;\n } else {\n t2 = $[3];\n }\n const handlePersistError = t2;\n let t3;\n if ($[4] !== handlePersist || $[5] !== handlePersistError || $[6] !== nodeData || $[7] !== renderContent || $[8] !== wrapper) {\n t3 = /*#__PURE__*/_jsx(Node, {\n nodeData: nodeData,\n renderContent: renderContent,\n onPersist: handlePersist,\n onPersistError: handlePersistError,\n wrapper: wrapper\n });\n $[4] = handlePersist;\n $[5] = handlePersistError;\n $[6] = nodeData;\n $[7] = renderContent;\n $[8] = wrapper;\n $[9] = t3;\n } else {\n t3 = $[9];\n }\n return t3;\n}","import { c as _c } from \"react/compiler-runtime\";\n/**\n * Connected Node Renderer Component\n *\n * Renders all nodes with automatic Supabase persistence.\n * Apps only need to provide renderNode - persistence is handled automatically.\n */\n\nimport React from 'react';\nimport { useAtomValue } from 'jotai';\nimport { nodePositionAtomFamily } from '../core/graph-position';\nimport { nodeFamilyAtom } from '../core/graph-derived';\nimport { visibleNodeKeysAtom } from '../core/virtualization-store';\nimport { ConnectedNode } from './ConnectedNode';\nimport { jsx as _jsx, Fragment as _Fragment } from \"react/jsx-runtime\";\n/**\n * Renders all nodes from the graph with automatic DB persistence.\n *\n * This is the batteries-included version of NodeRenderer.\n * No need to pass persistence callbacks - changes are automatically\n * synced to Supabase.\n */\nexport function ConnectedNodeRenderer(t0) {\n const $ = _c(11);\n const {\n renderNode,\n onNodePersistError,\n nodeWrapper\n } = t0;\n const nodeKeys = useAtomValue(visibleNodeKeysAtom);\n let t1;\n if ($[0] !== nodeKeys || $[1] !== nodeWrapper || $[2] !== onNodePersistError || $[3] !== renderNode) {\n let t2;\n if ($[5] !== nodeWrapper || $[6] !== onNodePersistError || $[7] !== renderNode) {\n t2 = key => /*#__PURE__*/_jsx(ConnectedNodeItem, {\n nodeKey: key,\n renderNode: renderNode,\n onNodePersistError: onNodePersistError,\n nodeWrapper: nodeWrapper\n }, key);\n $[5] = nodeWrapper;\n $[6] = onNodePersistError;\n $[7] = renderNode;\n $[8] = t2;\n } else {\n t2 = $[8];\n }\n t1 = nodeKeys.map(t2);\n $[0] = nodeKeys;\n $[1] = nodeWrapper;\n $[2] = onNodePersistError;\n $[3] = renderNode;\n $[4] = t1;\n } else {\n t1 = $[4];\n }\n let t2;\n if ($[9] !== t1) {\n t2 = /*#__PURE__*/_jsx(_Fragment, {\n children: t1\n });\n $[9] = t1;\n $[10] = t2;\n } else {\n t2 = $[10];\n }\n return t2;\n}\nfunction ConnectedNodeItem(t0) {\n const $ = _c(15);\n const {\n nodeKey,\n renderNode,\n onNodePersistError,\n nodeWrapper\n } = t0;\n let t1;\n if ($[0] !== nodeKey) {\n t1 = nodeFamilyAtom(nodeKey);\n $[0] = nodeKey;\n $[1] = t1;\n } else {\n t1 = $[1];\n }\n const nodeData = useAtomValue(t1);\n let t2;\n if ($[2] !== nodeKey) {\n t2 = nodePositionAtomFamily(nodeKey);\n $[2] = nodeKey;\n $[3] = t2;\n } else {\n t2 = $[3];\n }\n const position = useAtomValue(t2);\n if (!nodeData) {\n return null;\n }\n let t3;\n if ($[4] !== position.x || $[5] !== position.y) {\n t3 = {\n position: \"absolute\",\n left: position.x,\n top: position.y,\n transform: \"translate(0, 0)\"\n };\n $[4] = position.x;\n $[5] = position.y;\n $[6] = t3;\n } else {\n t3 = $[6];\n }\n let t4;\n if ($[7] !== nodeData || $[8] !== nodeWrapper || $[9] !== onNodePersistError || $[10] !== renderNode) {\n t4 = /*#__PURE__*/_jsx(ConnectedNode, {\n nodeData: nodeData,\n renderContent: renderNode,\n onPersistError: onNodePersistError,\n wrapper: nodeWrapper\n });\n $[7] = nodeData;\n $[8] = nodeWrapper;\n $[9] = onNodePersistError;\n $[10] = renderNode;\n $[11] = t4;\n } else {\n t4 = $[11];\n }\n let t5;\n if ($[12] !== t3 || $[13] !== t4) {\n t5 = /*#__PURE__*/_jsx(\"div\", {\n style: t3,\n children: t4\n });\n $[12] = t3;\n $[13] = t4;\n $[14] = t5;\n } else {\n t5 = $[14];\n }\n return t5;\n}","import { c as _c } from \"react/compiler-runtime\";\n/**\n * Node Context Menu Component — v2\n *\n * Touch-first context menu:\n * - Bottom sheet on touch devices (slides up from bottom)\n * - Centered dialog on mouse devices (right-click)\n * - 48px minimum touch targets for menu items\n * - Pointer events instead of mouse events\n * - Swipe-down-to-dismiss gesture area (drag handle)\n */\n\nimport React, { useRef } from 'react';\nimport { useAtomValue, useSetAtom } from 'jotai';\nimport { currentGraphIdAtom } from '../core/graph-store';\nimport { clearSelectionAtom } from '../core/selection-store';\nimport { primaryInputSourceAtom } from '../core/input-store';\nimport { ContextMenuAction } from './ContextMenuAction';\nimport { ContextMenuDivider } from './ContextMenuDivider';\n\n// Re-export sub-components\nimport { jsx as _jsx, jsxs as _jsxs } from \"react/jsx-runtime\";\nexport { ContextMenuAction } from './ContextMenuAction';\nexport { ContextMenuDivider } from './ContextMenuDivider';\n\n// =============================================================================\n// Types\n// =============================================================================\n\n/**\n * Context passed to action handlers.\n */\n\n/**\n * A single action in the context menu.\n */\n\n// =============================================================================\n// Default Dialog — Adaptive (Bottom Sheet on touch, Centered on mouse)\n// =============================================================================\n\nconst DefaultDialog = t0 => {\n const $ = _c(14);\n const {\n open,\n onOpenChange,\n children\n } = t0;\n const inputSource = useAtomValue(primaryInputSourceAtom);\n const isTouchInput = inputSource === \"finger\" || inputSource === \"pencil\";\n if (!open) {\n return null;\n }\n if (isTouchInput) {\n let t1;\n if ($[0] !== onOpenChange) {\n t1 = () => onOpenChange(false);\n $[0] = onOpenChange;\n $[1] = t1;\n } else {\n t1 = $[1];\n }\n let t2;\n if ($[2] !== children || $[3] !== t1) {\n t2 = /*#__PURE__*/_jsx(BottomSheet, {\n onClose: t1,\n children: children\n });\n $[2] = children;\n $[3] = t1;\n $[4] = t2;\n } else {\n t2 = $[4];\n }\n return t2;\n }\n let t1;\n if ($[5] === Symbol.for(\"react.memo_cache_sentinel\")) {\n t1 = {\n position: \"fixed\",\n inset: 0,\n zIndex: 9999,\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"center\",\n backgroundColor: \"rgba(0, 0, 0, 0.5)\"\n };\n $[5] = t1;\n } else {\n t1 = $[5];\n }\n let t2;\n if ($[6] !== onOpenChange) {\n t2 = () => onOpenChange(false);\n $[6] = onOpenChange;\n $[7] = t2;\n } else {\n t2 = $[7];\n }\n let t3;\n if ($[8] === Symbol.for(\"react.memo_cache_sentinel\")) {\n t3 = {\n backgroundColor: \"var(--canvas-bg, #1a1a1a)\",\n border: \"1px solid var(--canvas-border, #333)\",\n borderRadius: \"8px\",\n padding: \"8px 0\",\n minWidth: \"200px\",\n maxWidth: \"280px\",\n boxShadow: \"0 4px 20px rgba(0, 0, 0, 0.3)\"\n };\n $[8] = t3;\n } else {\n t3 = $[8];\n }\n let t4;\n if ($[9] !== children) {\n t4 = /*#__PURE__*/_jsx(\"div\", {\n style: t3,\n onClick: _temp,\n onPointerDown: _temp2,\n children: children\n });\n $[9] = children;\n $[10] = t4;\n } else {\n t4 = $[10];\n }\n let t5;\n if ($[11] !== t2 || $[12] !== t4) {\n t5 = /*#__PURE__*/_jsx(\"div\", {\n style: t1,\n onClick: t2,\n children: t4\n });\n $[11] = t2;\n $[12] = t4;\n $[13] = t5;\n } else {\n t5 = $[13];\n }\n return t5;\n};\n\n// =============================================================================\n// Bottom Sheet (for touch devices)\n// =============================================================================\n\nfunction BottomSheet(t0) {\n const $ = _c(17);\n const {\n onClose,\n children\n } = t0;\n const sheetRef = useRef(null);\n const startYRef = useRef(null);\n let t1;\n if ($[0] !== onClose) {\n t1 = () => {\n onClose();\n };\n $[0] = onClose;\n $[1] = t1;\n } else {\n t1 = $[1];\n }\n const handleBackdropClick = t1;\n let t2;\n if ($[2] === Symbol.for(\"react.memo_cache_sentinel\")) {\n t2 = e => {\n startYRef.current = e.clientY;\n };\n $[2] = t2;\n } else {\n t2 = $[2];\n }\n const handlePointerDown = t2;\n let t3;\n if ($[3] === Symbol.for(\"react.memo_cache_sentinel\")) {\n t3 = e_0 => {\n if (startYRef.current === null || !sheetRef.current) {\n return;\n }\n const dy = e_0.clientY - startYRef.current;\n if (dy > 0) {\n sheetRef.current.style.transform = `translateY(${dy}px)`;\n }\n };\n $[3] = t3;\n } else {\n t3 = $[3];\n }\n const handlePointerMove = t3;\n let t4;\n if ($[4] !== onClose) {\n t4 = e_1 => {\n if (startYRef.current === null) {\n return;\n }\n const dy_0 = e_1.clientY - startYRef.current;\n startYRef.current = null;\n if (dy_0 > 60) {\n onClose();\n } else {\n if (sheetRef.current) {\n sheetRef.current.style.transform = \"translateY(0)\";\n }\n }\n };\n $[4] = onClose;\n $[5] = t4;\n } else {\n t4 = $[5];\n }\n const handlePointerUp = t4;\n let t5;\n if ($[6] === Symbol.for(\"react.memo_cache_sentinel\")) {\n t5 = {\n position: \"fixed\",\n inset: 0,\n zIndex: 9999,\n display: \"flex\",\n flexDirection: \"column\",\n justifyContent: \"flex-end\",\n backgroundColor: \"rgba(0, 0, 0, 0.4)\"\n };\n $[6] = t5;\n } else {\n t5 = $[6];\n }\n let t6;\n if ($[7] === Symbol.for(\"react.memo_cache_sentinel\")) {\n t6 = {\n backgroundColor: \"var(--canvas-bg, #1a1a1a)\",\n borderTop: \"1px solid var(--canvas-border, #333)\",\n borderRadius: \"16px 16px 0 0\",\n padding: \"0 0 env(safe-area-inset-bottom, 16px)\",\n maxHeight: \"60vh\",\n overflowY: \"auto\",\n transition: \"transform 200ms ease-out\",\n WebkitOverflowScrolling: \"touch\"\n };\n $[7] = t6;\n } else {\n t6 = $[7];\n }\n let t7;\n if ($[8] === Symbol.for(\"react.memo_cache_sentinel\")) {\n t7 = e_3 => {\n e_3.stopPropagation();\n handlePointerDown(e_3);\n };\n $[8] = t7;\n } else {\n t7 = $[8];\n }\n let t8;\n let t9;\n if ($[9] === Symbol.for(\"react.memo_cache_sentinel\")) {\n t8 = e_4 => {\n startYRef.current = null;\n if (sheetRef.current) {\n sheetRef.current.style.transform = \"translateY(0)\";\n }\n };\n t9 = /*#__PURE__*/_jsx(\"div\", {\n style: {\n display: \"flex\",\n justifyContent: \"center\",\n padding: \"8px 0 4px\",\n touchAction: \"none\"\n },\n children: /*#__PURE__*/_jsx(\"div\", {\n style: {\n width: \"36px\",\n height: \"4px\",\n borderRadius: \"2px\",\n backgroundColor: \"var(--canvas-border, #666)\"\n }\n })\n });\n $[9] = t8;\n $[10] = t9;\n } else {\n t8 = $[9];\n t9 = $[10];\n }\n let t10;\n if ($[11] !== children || $[12] !== handlePointerUp) {\n t10 = /*#__PURE__*/_jsxs(\"div\", {\n ref: sheetRef,\n style: t6,\n onClick: _temp3,\n onPointerDown: t7,\n onPointerMove: handlePointerMove,\n onPointerUp: handlePointerUp,\n onPointerCancel: t8,\n children: [t9, children]\n });\n $[11] = children;\n $[12] = handlePointerUp;\n $[13] = t10;\n } else {\n t10 = $[13];\n }\n let t11;\n if ($[14] !== handleBackdropClick || $[15] !== t10) {\n t11 = /*#__PURE__*/_jsx(\"div\", {\n style: t5,\n onClick: handleBackdropClick,\n children: t10\n });\n $[14] = handleBackdropClick;\n $[15] = t10;\n $[16] = t11;\n } else {\n t11 = $[16];\n }\n return t11;\n}\n\n// =============================================================================\n// Component\n// =============================================================================\n\n/**\n * Context menu for nodes.\n *\n * Adapts to input source:\n * - Touch/pencil → slides up as a bottom sheet (iOS-style)\n * - Mouse → centered dialog (right-click style)\n *\n * @example\n * ```tsx\n * \n * ```\n */\nfunction _temp3(e_2) {\n return e_2.stopPropagation();\n}\nexport function NodeContextMenu(t0) {\n const $ = _c(13);\n const {\n open,\n onOpenChange,\n nodeId,\n actions: t1,\n renderContent,\n DialogComponent: t2\n } = t0;\n const actions = t1 === undefined ? [] : t1;\n const DialogComponent = t2 === undefined ? DefaultDialog : t2;\n const currentGraphId = useAtomValue(currentGraphIdAtom);\n useSetAtom(clearSelectionAtom);\n let t3;\n if ($[0] !== onOpenChange) {\n t3 = () => {\n onOpenChange(false);\n };\n $[0] = onOpenChange;\n $[1] = t3;\n } else {\n t3 = $[1];\n }\n const closeMenu = t3;\n const ctx = {\n nodeId,\n graphId: currentGraphId,\n closeMenu\n };\n if (renderContent) {\n return /*#__PURE__*/_jsx(DialogComponent, {\n open: open,\n onOpenChange: onOpenChange,\n children: renderContent(ctx)\n });\n }\n let t4;\n let t5;\n if ($[2] === Symbol.for(\"react.memo_cache_sentinel\")) {\n t4 = /*#__PURE__*/_jsx(ContextMenuDivider, {\n label: \"Node Options\"\n });\n t5 = {\n padding: \"0 4px\"\n };\n $[2] = t4;\n $[3] = t5;\n } else {\n t4 = $[2];\n t5 = $[3];\n }\n const t6 = actions.map(action => /*#__PURE__*/_jsx(ContextMenuAction, {\n label: action.label,\n icon: action.icon,\n onClick: () => action.onClick(ctx),\n destructive: action.destructive,\n disabled: action.disabled\n }, action.key));\n let t7;\n if ($[4] !== t5 || $[5] !== t6) {\n t7 = /*#__PURE__*/_jsx(\"div\", {\n style: t5,\n children: t6\n });\n $[4] = t5;\n $[5] = t6;\n $[6] = t7;\n } else {\n t7 = $[6];\n }\n let t8;\n if ($[7] !== DialogComponent || $[8] !== onOpenChange || $[9] !== open || $[10] !== t4 || $[11] !== t7) {\n t8 = /*#__PURE__*/_jsxs(DialogComponent, {\n open: open,\n onOpenChange: onOpenChange,\n children: [t4, t7]\n });\n $[7] = DialogComponent;\n $[8] = onOpenChange;\n $[9] = open;\n $[10] = t4;\n $[11] = t7;\n $[12] = t8;\n } else {\n t8 = $[12];\n }\n return t8;\n}\n\n// =============================================================================\n// Default Actions\n// =============================================================================\n\n/**\n * Icon for delete action.\n */\nexport const DeleteIcon = () => {\n const $ = _c(1);\n let t0;\n if ($[0] === Symbol.for(\"react.memo_cache_sentinel\")) {\n t0 = /*#__PURE__*/_jsx(\"svg\", {\n width: \"20\",\n height: \"20\",\n viewBox: \"0 0 24 24\",\n fill: \"none\",\n stroke: \"currentColor\",\n strokeWidth: \"2\",\n children: /*#__PURE__*/_jsx(\"path\", {\n strokeLinecap: \"round\",\n strokeLinejoin: \"round\",\n d: \"M19 7l-.867 12.142A2 2 0 0116.138 21H7.862a2 2 0 01-1.995-1.858L5 7m5 4v6m4-6v6m1-10V4a1 1 0 00-1-1h-4a1 1 0 00-1 1v3M4 7h16\"\n })\n });\n $[0] = t0;\n } else {\n t0 = $[0];\n }\n return t0;\n};\n\n/**\n * Icon for zoom/fit action.\n */\nexport const FitToViewIcon = () => {\n const $ = _c(1);\n let t0;\n if ($[0] === Symbol.for(\"react.memo_cache_sentinel\")) {\n t0 = /*#__PURE__*/_jsx(\"svg\", {\n width: \"20\",\n height: \"20\",\n viewBox: \"0 0 24 24\",\n fill: \"none\",\n stroke: \"currentColor\",\n strokeWidth: \"2\",\n children: /*#__PURE__*/_jsx(\"path\", {\n strokeLinecap: \"round\",\n strokeLinejoin: \"round\",\n d: \"M21 21l-6-6m2-5a7 7 0 11-14 0 7 7 0 0114 0zM10 7v3m0 0v3m0-3h3m-3 0H7\"\n })\n });\n $[0] = t0;\n } else {\n t0 = $[0];\n }\n return t0;\n};\nfunction _temp(e) {\n return e.stopPropagation();\n}\nfunction _temp2(e_0) {\n return e_0.stopPropagation();\n}","import { c as _c } from \"react/compiler-runtime\";\n/**\n * ContextMenuAction\n *\n * Renders a single action row inside a context menu.\n * 48px minimum touch target (Apple HIG), icon + label, destructive styling.\n *\n * Extracted from NodeContextMenu.tsx in v1.5.0.\n *\n * @since 1.5.0\n */\n\nimport React from 'react';\n\n// --- Types ---\nimport { jsx as _jsx, jsxs as _jsxs } from \"react/jsx-runtime\";\n// --- Component ---\n\nexport function ContextMenuAction(t0) {\n const $ = _c(18);\n const {\n label,\n icon,\n onClick,\n destructive: t1,\n disabled: t2\n } = t0;\n const destructive = t1 === undefined ? false : t1;\n const disabled = t2 === undefined ? false : t2;\n const t3 = disabled ? \"not-allowed\" : \"pointer\";\n const t4 = disabled ? 0.5 : 1;\n const t5 = destructive ? \"#ef4444\" : \"var(--canvas-text, #fff)\";\n let t6;\n if ($[0] !== t3 || $[1] !== t4 || $[2] !== t5) {\n t6 = {\n width: \"100%\",\n minHeight: \"48px\",\n padding: \"12px 16px\",\n display: \"flex\",\n alignItems: \"center\",\n gap: \"12px\",\n background: \"none\",\n border: \"none\",\n borderRadius: \"8px\",\n cursor: t3,\n opacity: t4,\n color: t5,\n fontSize: \"16px\",\n textAlign: \"left\",\n touchAction: \"manipulation\",\n WebkitTapHighlightColor: \"transparent\"\n };\n $[0] = t3;\n $[1] = t4;\n $[2] = t5;\n $[3] = t6;\n } else {\n t6 = $[3];\n }\n let t7;\n if ($[4] !== destructive || $[5] !== disabled) {\n t7 = e => {\n if (!disabled) {\n e.currentTarget.style.backgroundColor = destructive ? \"rgba(239, 68, 68, 0.1)\" : \"rgba(255, 255, 255, 0.1)\";\n }\n };\n $[4] = destructive;\n $[5] = disabled;\n $[6] = t7;\n } else {\n t7 = $[6];\n }\n let t8;\n if ($[7] !== icon) {\n t8 = icon && /*#__PURE__*/_jsx(\"span\", {\n style: {\n display: \"flex\"\n },\n children: icon\n });\n $[7] = icon;\n $[8] = t8;\n } else {\n t8 = $[8];\n }\n let t9;\n if ($[9] !== label) {\n t9 = /*#__PURE__*/_jsx(\"span\", {\n children: label\n });\n $[9] = label;\n $[10] = t9;\n } else {\n t9 = $[10];\n }\n let t10;\n if ($[11] !== disabled || $[12] !== onClick || $[13] !== t6 || $[14] !== t7 || $[15] !== t8 || $[16] !== t9) {\n t10 = /*#__PURE__*/_jsxs(\"button\", {\n onClick: onClick,\n disabled: disabled,\n style: t6,\n onPointerEnter: t7,\n onPointerLeave: _temp,\n children: [t8, t9]\n });\n $[11] = disabled;\n $[12] = onClick;\n $[13] = t6;\n $[14] = t7;\n $[15] = t8;\n $[16] = t9;\n $[17] = t10;\n } else {\n t10 = $[17];\n }\n return t10;\n}\nfunction _temp(e_0) {\n e_0.currentTarget.style.backgroundColor = \"transparent\";\n}","import { c as _c } from \"react/compiler-runtime\";\n/**\n * ContextMenuDivider\n *\n * Section header / divider for context menus.\n * Renders a bordered header with a label.\n *\n * Extracted from NodeContextMenu.tsx in v1.5.0.\n *\n * @since 1.5.0\n */\n\nimport React from 'react';\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nexport function ContextMenuDivider(t0) {\n const $ = _c(7);\n const {\n label\n } = t0;\n const t1 = label ? \"8px 12px\" : \"0\";\n let t2;\n if ($[0] !== t1) {\n t2 = {\n padding: t1,\n borderBottom: \"1px solid var(--canvas-border, #333)\",\n marginBottom: \"4px\"\n };\n $[0] = t1;\n $[1] = t2;\n } else {\n t2 = $[1];\n }\n let t3;\n if ($[2] !== label) {\n t3 = label && /*#__PURE__*/_jsx(\"div\", {\n style: {\n fontSize: \"14px\",\n fontWeight: 500,\n color: \"var(--canvas-text, #fff)\"\n },\n children: label\n });\n $[2] = label;\n $[3] = t3;\n } else {\n t3 = $[3];\n }\n let t4;\n if ($[4] !== t2 || $[5] !== t3) {\n t4 = /*#__PURE__*/_jsx(\"div\", {\n style: t2,\n children: t3\n });\n $[4] = t2;\n $[5] = t3;\n $[6] = t4;\n } else {\n t4 = $[6];\n }\n return t4;\n}","import { c as _c } from \"react/compiler-runtime\";\n/**\n * Locked Node Overlay\n *\n * Full-screen overlay for viewing a locked node as a \"book\" with pages.\n * Uses render props for app-specific content rendering.\n */\n\nimport React, { useEffect } from 'react';\nimport { useAtomValue, useSetAtom } from 'jotai';\nimport { lockedNodeIdAtom, lockedNodeDataAtom, lockedNodePageIndexAtom, lockedNodePageCountAtom, unlockNodeAtom } from '../core/locked-node-store';\n\n// =============================================================================\n// Types\n// =============================================================================\nimport { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from \"react/jsx-runtime\";\n// =============================================================================\n// Default Components\n// =============================================================================\n\nconst DefaultCloseButton = t0 => {\n const $ = _c(4);\n const {\n onClick\n } = t0;\n let t1;\n if ($[0] === Symbol.for(\"react.memo_cache_sentinel\")) {\n t1 = {\n color: \"var(--hud-text, #fff)\",\n opacity: 0.6\n };\n $[0] = t1;\n } else {\n t1 = $[0];\n }\n let t2;\n if ($[1] === Symbol.for(\"react.memo_cache_sentinel\")) {\n t2 = /*#__PURE__*/_jsxs(\"svg\", {\n width: \"20\",\n height: \"20\",\n viewBox: \"0 0 24 24\",\n fill: \"none\",\n stroke: \"currentColor\",\n strokeWidth: \"2\",\n children: [/*#__PURE__*/_jsx(\"line\", {\n x1: \"18\",\n y1: \"6\",\n x2: \"6\",\n y2: \"18\"\n }), /*#__PURE__*/_jsx(\"line\", {\n x1: \"6\",\n y1: \"6\",\n x2: \"18\",\n y2: \"18\"\n })]\n });\n $[1] = t2;\n } else {\n t2 = $[1];\n }\n let t3;\n if ($[2] !== onClick) {\n t3 = /*#__PURE__*/_jsx(\"button\", {\n onClick: onClick,\n className: \"absolute top-4 right-4 z-10 p-2 rounded hover:bg-white/10 transition-colors\",\n style: t1,\n \"aria-label\": \"Close\",\n children: t2\n });\n $[2] = onClick;\n $[3] = t3;\n } else {\n t3 = $[3];\n }\n return t3;\n};\nconst DefaultFooter = t0 => {\n const $ = _c(13);\n const {\n pages,\n currentIndex,\n onPageSelect\n } = t0;\n let t1;\n if ($[0] === Symbol.for(\"react.memo_cache_sentinel\")) {\n t1 = {\n backgroundColor: \"var(--hud-header-bg, rgba(20, 20, 30, 0.9))\",\n borderColor: \"var(--hud-border, rgba(255, 255, 255, 0.1))\"\n };\n $[0] = t1;\n } else {\n t1 = $[0];\n }\n let t2;\n if ($[1] !== currentIndex || $[2] !== onPageSelect || $[3] !== pages) {\n let t3;\n if ($[5] !== currentIndex || $[6] !== onPageSelect) {\n t3 = (page, idx) => /*#__PURE__*/_jsx(\"button\", {\n onClick: () => onPageSelect(idx),\n className: \"w-2.5 h-2.5 rounded-full transition-all hover:scale-110\",\n style: {\n backgroundColor: idx === currentIndex ? \"var(--hud-accent, #3b82f6)\" : \"var(--hud-border, rgba(255, 255, 255, 0.3))\",\n transform: idx === currentIndex ? \"scale(1.3)\" : \"scale(1)\"\n },\n title: page.label\n }, page.key);\n $[5] = currentIndex;\n $[6] = onPageSelect;\n $[7] = t3;\n } else {\n t3 = $[7];\n }\n t2 = pages.map(t3);\n $[1] = currentIndex;\n $[2] = onPageSelect;\n $[3] = pages;\n $[4] = t2;\n } else {\n t2 = $[4];\n }\n let t3;\n if ($[8] !== t2) {\n t3 = /*#__PURE__*/_jsx(\"div\", {\n className: \"flex items-center gap-2\",\n children: t2\n });\n $[8] = t2;\n $[9] = t3;\n } else {\n t3 = $[9];\n }\n let t4;\n if ($[10] === Symbol.for(\"react.memo_cache_sentinel\")) {\n t4 = /*#__PURE__*/_jsxs(\"div\", {\n className: \"flex items-center gap-4 text-xs\",\n style: {\n color: \"var(--hud-text, #fff)\",\n opacity: 0.5\n },\n children: [/*#__PURE__*/_jsx(\"span\", {\n children: \"\\u2190 \\u2192 Navigate\"\n }), /*#__PURE__*/_jsx(\"span\", {\n children: \"ESC Exit\"\n })]\n });\n $[10] = t4;\n } else {\n t4 = $[10];\n }\n let t5;\n if ($[11] !== t3) {\n t5 = /*#__PURE__*/_jsxs(\"footer\", {\n className: \"flex items-center justify-center gap-8 py-4 border-t\",\n style: t1,\n children: [t3, t4]\n });\n $[11] = t3;\n $[12] = t5;\n } else {\n t5 = $[12];\n }\n return t5;\n};\nconst DefaultWrapper = t0 => {\n const $ = _c(2);\n const {\n children\n } = t0;\n let t1;\n if ($[0] !== children) {\n t1 = /*#__PURE__*/_jsx(_Fragment, {\n children: children\n });\n $[0] = children;\n $[1] = t1;\n } else {\n t1 = $[1];\n }\n return t1;\n};\n\n// =============================================================================\n// Main Component\n// =============================================================================\n\nexport function LockedNodeOverlay(t0) {\n const $ = _c(50);\n const {\n pages,\n renderContent,\n renderCloseButton,\n renderFooter,\n WrapperComponent: t1,\n className: t2,\n style\n } = t0;\n const WrapperComponent = t1 === undefined ? DefaultWrapper : t1;\n const className = t2 === undefined ? \"\" : t2;\n const lockedNodeId = useAtomValue(lockedNodeIdAtom);\n const nodeData = useAtomValue(lockedNodeDataAtom);\n const pageIndex = useAtomValue(lockedNodePageIndexAtom);\n const setPageCount = useSetAtom(lockedNodePageCountAtom);\n const unlock = useSetAtom(unlockNodeAtom);\n let t3;\n let t4;\n if ($[0] !== pages.length || $[1] !== setPageCount) {\n t3 = () => {\n setPageCount(pages.length);\n };\n t4 = [pages.length, setPageCount];\n $[0] = pages.length;\n $[1] = setPageCount;\n $[2] = t3;\n $[3] = t4;\n } else {\n t3 = $[2];\n t4 = $[3];\n }\n useEffect(t3, t4);\n const pageIndexSetter = useSetAtom(lockedNodePageIndexAtom);\n let t5;\n if ($[4] !== pageIndexSetter || $[5] !== pages.length) {\n t5 = () => {\n pageIndexSetter(current => (current + 1) % pages.length);\n };\n $[4] = pageIndexSetter;\n $[5] = pages.length;\n $[6] = t5;\n } else {\n t5 = $[6];\n }\n const nextPage = t5;\n let t6;\n if ($[7] !== pageIndexSetter || $[8] !== pages.length) {\n t6 = () => {\n pageIndexSetter(current_0 => (current_0 - 1 + pages.length) % pages.length);\n };\n $[7] = pageIndexSetter;\n $[8] = pages.length;\n $[9] = t6;\n } else {\n t6 = $[9];\n }\n const prevPage = t6;\n let t7;\n if ($[10] !== pageIndexSetter || $[11] !== pages.length) {\n t7 = index_0 => {\n if (index_0 >= 0 && index_0 < pages.length) {\n pageIndexSetter(index_0);\n }\n };\n $[10] = pageIndexSetter;\n $[11] = pages.length;\n $[12] = t7;\n } else {\n t7 = $[12];\n }\n const handleGoToPage = t7;\n let t8;\n let t9;\n if ($[13] !== lockedNodeId || $[14] !== nextPage || $[15] !== prevPage || $[16] !== unlock) {\n t8 = () => {\n if (!lockedNodeId) {\n return;\n }\n const handleKeyDown = e => {\n const target = e.target;\n if (target.tagName === \"INPUT\" || target.tagName === \"TEXTAREA\" || target.isContentEditable) {\n return;\n }\n bb46: switch (e.key) {\n case \"Escape\":\n {\n e.preventDefault();\n unlock();\n break bb46;\n }\n case \"ArrowRight\":\n case \"ArrowDown\":\n {\n e.preventDefault();\n nextPage();\n break bb46;\n }\n case \"ArrowLeft\":\n case \"ArrowUp\":\n {\n e.preventDefault();\n prevPage();\n }\n }\n };\n window.addEventListener(\"keydown\", handleKeyDown);\n return () => window.removeEventListener(\"keydown\", handleKeyDown);\n };\n t9 = [lockedNodeId, unlock, nextPage, prevPage];\n $[13] = lockedNodeId;\n $[14] = nextPage;\n $[15] = prevPage;\n $[16] = unlock;\n $[17] = t8;\n $[18] = t9;\n } else {\n t8 = $[17];\n t9 = $[18];\n }\n useEffect(t8, t9);\n if (!lockedNodeId || !nodeData) {\n return null;\n }\n const currentPage = pages[pageIndex]?.key || pages[0]?.key;\n const totalPages = pages.length;\n let T0;\n let t10;\n let t11;\n let t12;\n let t13;\n if ($[19] !== WrapperComponent || $[20] !== className || $[21] !== currentPage || $[22] !== handleGoToPage || $[23] !== lockedNodeId || $[24] !== nextPage || $[25] !== nodeData || $[26] !== pageIndex || $[27] !== pages || $[28] !== prevPage || $[29] !== renderCloseButton || $[30] !== renderContent || $[31] !== renderFooter || $[32] !== style || $[33] !== totalPages || $[34] !== unlock) {\n const ctx = {\n nodeId: lockedNodeId,\n nodeData,\n currentPage,\n pageIndex,\n totalPages,\n close: unlock,\n nextPage,\n prevPage,\n goToPage: handleGoToPage\n };\n T0 = WrapperComponent;\n t10 = `fixed inset-0 z-[9999] flex flex-col ${className}`;\n if ($[40] !== style) {\n t11 = {\n backgroundColor: \"#0f0f14\",\n isolation: \"isolate\",\n ...style\n };\n $[40] = style;\n $[41] = t11;\n } else {\n t11 = $[41];\n }\n t12 = /*#__PURE__*/_jsxs(\"div\", {\n className: \"flex-1 overflow-hidden relative\",\n children: [renderCloseButton ? renderCloseButton(ctx) : /*#__PURE__*/_jsx(DefaultCloseButton, {\n onClick: unlock\n }), renderContent(ctx)]\n });\n t13 = renderFooter ? renderFooter(ctx) : /*#__PURE__*/_jsx(DefaultFooter, {\n pages: pages,\n currentIndex: pageIndex,\n onPageSelect: handleGoToPage\n });\n $[19] = WrapperComponent;\n $[20] = className;\n $[21] = currentPage;\n $[22] = handleGoToPage;\n $[23] = lockedNodeId;\n $[24] = nextPage;\n $[25] = nodeData;\n $[26] = pageIndex;\n $[27] = pages;\n $[28] = prevPage;\n $[29] = renderCloseButton;\n $[30] = renderContent;\n $[31] = renderFooter;\n $[32] = style;\n $[33] = totalPages;\n $[34] = unlock;\n $[35] = T0;\n $[36] = t10;\n $[37] = t11;\n $[38] = t12;\n $[39] = t13;\n } else {\n T0 = $[35];\n t10 = $[36];\n t11 = $[37];\n t12 = $[38];\n t13 = $[39];\n }\n let t14;\n if ($[42] !== t10 || $[43] !== t11 || $[44] !== t12 || $[45] !== t13) {\n t14 = /*#__PURE__*/_jsxs(\"div\", {\n className: t10,\n style: t11,\n children: [t12, t13]\n });\n $[42] = t10;\n $[43] = t11;\n $[44] = t12;\n $[45] = t13;\n $[46] = t14;\n } else {\n t14 = $[46];\n }\n let t15;\n if ($[47] !== T0 || $[48] !== t14) {\n t15 = /*#__PURE__*/_jsx(T0, {\n children: t14\n });\n $[47] = T0;\n $[48] = t14;\n $[49] = t15;\n } else {\n t15 = $[49];\n }\n return t15;\n}","/**\n * Edge Overlay Component\n *\n * Wraps a node and provides an edge creation handle.\n * Drag from the handle to another node to create an edge.\n */\n\nimport React, { useRef } from 'react';\nimport { useSetAtom, useAtomValue } from 'jotai';\nimport { useGesture } from '@use-gesture/react';\nimport { graphAtom, edgeCreationAtom, currentGraphIdAtom } from '../core/graph-store';\nimport { nodePositionAtomFamily } from '../core/graph-position';\nimport { swapEdgeAtomicAtom } from '../core/graph-mutations';\nimport { addEdgeToLocalGraphAtom, removeEdgeFromLocalGraphAtom } from '../core/graph-mutations-edges';\nimport { addNodesToSelectionAtom, removeNodesFromSelectionAtom } from '../core/selection-store';\nimport { hitTestNode, hitTestPort } from '../utils/hit-test';\nimport { EdgePath } from './EdgePath';\n\n// Re-export sub-components\nimport { jsx as _jsx, jsxs as _jsxs } from \"react/jsx-runtime\";\nexport { EdgePath } from './EdgePath';\nexport { EdgeLabel } from './EdgeLabel';\n/**\n * Default handle format functions\n */\nconst defaultGetSourceHandle = nodeId => `widget:${nodeId}:output:data`;\nconst defaultGetTargetHandle = targetNodeId => `widget:${targetNodeId}:input:default`;\n\n/**\n * Edge overlay component that enables edge creation via drag\n */\nexport function EdgeOverlay({\n nodeId,\n children,\n getSourceHandle = defaultGetSourceHandle,\n getTargetHandle = defaultGetTargetHandle,\n onEdgeCreate,\n onEdgeCreateError,\n onEdgeCreated,\n handleStyle,\n handleClassName,\n canConnect\n}) {\n const setEdgeCreationState = useSetAtom(edgeCreationAtom);\n const graph = useAtomValue(graphAtom);\n const addEdgeToLocalGraph = useSetAtom(addEdgeToLocalGraphAtom);\n const removeEdgeFromLocalGraph = useSetAtom(removeEdgeFromLocalGraphAtom);\n const swapEdgeAtomic = useSetAtom(swapEdgeAtomicAtom);\n const addNodeToSelection = useSetAtom(addNodesToSelectionAtom);\n const removeNodeFromSelection = useSetAtom(removeNodesFromSelectionAtom);\n const currentGraphId = useAtomValue(currentGraphIdAtom);\n const handleRef = useRef(null);\n const wrapperRef = useRef(null);\n const position = useAtomValue(nodePositionAtomFamily(nodeId));\n const nodeAttributes = graph.hasNode(nodeId) ? graph.getNodeAttributes(nodeId) : undefined;\n const width = nodeAttributes?.width ?? 500;\n const height = nodeAttributes?.height ?? 500;\n const handleDragStart = (x, y) => {\n if (!graph.hasNode(nodeId)) return;\n const sourceNodeAttributes = graph.getNodeAttributes(nodeId);\n if (!sourceNodeAttributes) return;\n const nodeRect = wrapperRef.current?.querySelector('[data-draggable-node=\"true\"]')?.getBoundingClientRect();\n if (!nodeRect) return;\n const sourceNodePosition = {\n x: sourceNodeAttributes.x + nodeRect.width / 2,\n y: sourceNodeAttributes.y + nodeRect.height / 2\n };\n const sourceHandle = getSourceHandle(nodeId);\n setEdgeCreationState({\n isCreating: true,\n sourceNodeId: nodeId,\n sourceNodePosition,\n targetPosition: {\n x,\n y\n },\n hoveredTargetNodeId: null,\n sourceHandle,\n targetHandle: null,\n sourcePort: null,\n targetPort: null,\n snappedTargetPosition: null\n });\n };\n const handleDrag = (x_0, y_0) => {\n setEdgeCreationState(prev => {\n if (!prev.isCreating) return prev;\n const {\n nodeId: hitNodeId\n } = hitTestNode(x_0, y_0);\n let hoveredNodeId = null;\n let targetPort = null;\n\n // Check for port under cursor first\n const portInfo = hitTestPort(x_0, y_0);\n if (portInfo && portInfo.nodeId !== nodeId) {\n hoveredNodeId = portInfo.nodeId;\n targetPort = portInfo.portId;\n } else if (hitNodeId) {\n hoveredNodeId = hitNodeId;\n }\n\n // Update selection highlighting\n if (hoveredNodeId && hoveredNodeId !== nodeId && hoveredNodeId !== prev.hoveredTargetNodeId) {\n if (prev.hoveredTargetNodeId) {\n removeNodeFromSelection([prev.hoveredTargetNodeId]);\n }\n addNodeToSelection([hoveredNodeId]);\n }\n return {\n ...prev,\n targetPosition: {\n x: x_0,\n y: y_0\n },\n hoveredTargetNodeId: hoveredNodeId && hoveredNodeId !== nodeId ? hoveredNodeId : null,\n targetPort\n };\n });\n };\n const handleDragEnd = async (x_1, y_1) => {\n let targetNodeId = null;\n const {\n nodeId: hitNodeId_0\n } = hitTestNode(x_1, y_1);\n if (hitNodeId_0) {\n targetNodeId = hitNodeId_0;\n }\n\n // Clear edge creation state\n setEdgeCreationState(prev_0 => {\n if (prev_0.hoveredTargetNodeId) {\n removeNodeFromSelection([prev_0.hoveredTargetNodeId]);\n }\n return {\n isCreating: false,\n sourceNodeId: null,\n sourceNodePosition: null,\n targetPosition: null,\n hoveredTargetNodeId: null,\n sourceHandle: null,\n targetHandle: null,\n sourcePort: null,\n targetPort: null,\n snappedTargetPosition: null\n };\n });\n\n // Create edge if valid target\n if (targetNodeId && targetNodeId !== nodeId && currentGraphId) {\n // Check canConnect validation\n if (canConnect) {\n const allowed = canConnect({\n nodeId,\n portId: null\n }, {\n nodeId: targetNodeId,\n portId: null\n });\n if (!allowed) return;\n }\n const sourceHandle_0 = getSourceHandle(nodeId);\n const targetHandle = getTargetHandle(targetNodeId);\n const tempEdgeId = crypto.randomUUID();\n const tempEdge = {\n id: tempEdgeId,\n graph_id: currentGraphId,\n source_node_id: nodeId,\n target_node_id: targetNodeId,\n edge_type: 'data_connection',\n filter_condition: null,\n ui_properties: {\n style: 'solid',\n color: '#999',\n sourceHandle: sourceHandle_0,\n targetHandle\n },\n created_at: new Date().toISOString(),\n updated_at: new Date().toISOString()\n };\n\n // Add temp edge to local graph\n addEdgeToLocalGraph(tempEdge);\n\n // If no persistence callback, just keep the local edge\n if (!onEdgeCreate) {\n return;\n }\n try {\n const newEdge = await onEdgeCreate({\n graphId: currentGraphId,\n sourceNodeId: nodeId,\n targetNodeId,\n sourceHandle: sourceHandle_0,\n targetHandle,\n tempEdge\n });\n\n // Swap temp edge with real edge\n swapEdgeAtomic({\n tempEdgeId,\n newEdge\n });\n\n // Notify app of successful creation\n onEdgeCreated?.({\n edge: newEdge,\n sourceNodeId: nodeId,\n targetNodeId,\n sourceHandle: sourceHandle_0,\n targetHandle\n });\n } catch (error) {\n // Remove temp edge on error\n removeEdgeFromLocalGraph(tempEdgeId);\n onEdgeCreateError?.(error, tempEdgeId);\n }\n }\n };\n useGesture({\n onDragStart: ({\n event,\n xy: [x_2, y_2]\n }) => {\n event.stopPropagation();\n handleDragStart(x_2, y_2);\n },\n onDrag: ({\n xy: [x_3, y_3]\n }) => {\n handleDrag(x_3, y_3);\n },\n onDragEnd: ({\n xy: [x_4, y_4]\n }) => {\n handleDragEnd(x_4, y_4);\n }\n }, {\n target: handleRef,\n eventOptions: {\n passive: false\n }\n });\n if (!position || !nodeAttributes) {\n return null;\n }\n return /*#__PURE__*/_jsxs(\"div\", {\n ref: wrapperRef,\n style: {\n position: 'absolute',\n top: position.y,\n left: position.x,\n width: `${width}px`,\n height: `${height}px`\n },\n children: [children, /*#__PURE__*/_jsx(EdgePath, {\n handleRef: handleRef,\n className: handleClassName,\n style: handleStyle\n })]\n });\n}","import { c as _c } from \"react/compiler-runtime\";\n/**\n * EdgePath\n *\n * Renders the visual drag handle indicator on a node for edge creation.\n * Provides a 44×44px touch target with a smaller visual indicator inside.\n *\n * Extracted from EdgeOverlay.tsx in v1.5.0.\n *\n * @since 1.5.0\n */\n\nimport React from 'react';\n\n// --- Types ---\nimport { jsx as _jsx } from \"react/jsx-runtime\";\n// --- Component ---\n\nexport function EdgePath(t0) {\n const $ = _c(7);\n const {\n handleRef,\n className,\n style\n } = t0;\n let t1;\n if ($[0] !== style) {\n t1 = {\n position: \"absolute\",\n top: \"50%\",\n right: \"-22px\",\n height: \"44px\",\n width: \"44px\",\n transform: \"translateY(-50%)\",\n cursor: \"crosshair\",\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"center\",\n touchAction: \"none\",\n ...style\n };\n $[0] = style;\n $[1] = t1;\n } else {\n t1 = $[1];\n }\n let t2;\n if ($[2] === Symbol.for(\"react.memo_cache_sentinel\")) {\n t2 = /*#__PURE__*/_jsx(\"div\", {\n style: {\n height: \"32px\",\n width: \"12px\",\n borderRadius: \"3px\",\n backgroundColor: \"var(--list-item-border, #666)\",\n transition: \"background-color 0.2s\",\n pointerEvents: \"none\"\n }\n });\n $[2] = t2;\n } else {\n t2 = $[2];\n }\n let t3;\n if ($[3] !== className || $[4] !== handleRef || $[5] !== t1) {\n t3 = /*#__PURE__*/_jsx(\"div\", {\n ref: handleRef,\n className: className,\n style: t1,\n onPointerEnter: _temp,\n onPointerLeave: _temp2,\n children: t2\n });\n $[3] = className;\n $[4] = handleRef;\n $[5] = t1;\n $[6] = t3;\n } else {\n t3 = $[6];\n }\n return t3;\n}\nfunction _temp2(e_0) {\n const visual_0 = e_0.currentTarget.firstChild;\n if (visual_0) {\n visual_0.style.backgroundColor = \"var(--list-item-border, #666)\";\n }\n}\nfunction _temp(e) {\n const visual = e.currentTarget.firstChild;\n if (visual) {\n visual.style.backgroundColor = \"var(--list-item-border-active, #888)\";\n }\n}","import { c as _c } from \"react/compiler-runtime\";\n/**\n * EdgeLabel\n *\n * Renders an inline label on an edge, positioned at the midpoint.\n * Presentational component — all positioning is controlled via props.\n *\n * Extracted from EdgeOverlay.tsx in v1.5.0.\n *\n * @since 1.5.0\n */\n\nimport React from 'react';\n\n// --- Types ---\nimport { jsx as _jsx } from \"react/jsx-runtime\";\n// --- Component ---\n\nexport function EdgeLabel(t0) {\n const $ = _c(13);\n const {\n label,\n x,\n y,\n onClick,\n className,\n style\n } = t0;\n if (!label) {\n return null;\n }\n let t1;\n if ($[0] !== onClick) {\n t1 = e => {\n e.stopPropagation();\n onClick?.();\n };\n $[0] = onClick;\n $[1] = t1;\n } else {\n t1 = $[1];\n }\n const t2 = onClick ? \"pointer\" : \"default\";\n const t3 = onClick ? \"auto\" : \"none\";\n let t4;\n if ($[2] !== style || $[3] !== t2 || $[4] !== t3 || $[5] !== x || $[6] !== y) {\n t4 = {\n position: \"absolute\",\n left: x,\n top: y,\n transform: \"translate(-50%, -50%)\",\n padding: \"2px 8px\",\n fontSize: \"12px\",\n fontWeight: 500,\n color: \"var(--canvas-text, #fff)\",\n backgroundColor: \"var(--canvas-bg, #1a1a1a)\",\n border: \"1px solid var(--canvas-border, #333)\",\n borderRadius: \"4px\",\n whiteSpace: \"nowrap\",\n cursor: t2,\n userSelect: \"none\",\n pointerEvents: t3,\n ...style\n };\n $[2] = style;\n $[3] = t2;\n $[4] = t3;\n $[5] = x;\n $[6] = y;\n $[7] = t4;\n } else {\n t4 = $[7];\n }\n let t5;\n if ($[8] !== className || $[9] !== label || $[10] !== t1 || $[11] !== t4) {\n t5 = /*#__PURE__*/_jsx(\"div\", {\n className: className,\n onClick: t1,\n style: t4,\n children: label\n });\n $[8] = className;\n $[9] = label;\n $[10] = t1;\n $[11] = t4;\n $[12] = t5;\n } else {\n t5 = $[12];\n }\n return t5;\n}","/**\n * NodeTypeCombobox\n *\n * A combobox component for selecting and adding node types to the canvas.\n * Lists all registered node types and creates a new node on selection.\n */\n\n'use client';\n\nimport { c as _c } from \"react/compiler-runtime\";\nimport React, { useState, useRef, useEffect } from 'react';\nimport { useAtomValue } from 'jotai';\nimport { getRegisteredNodeTypes } from '../core/node-type-registry';\nimport { useCreateNode } from '../db/hooks/useCreateNode';\nimport { currentGraphIdAtom, viewportRectAtom, panAtom, zoomAtom } from '../core';\nimport { createDebug } from '../utils/debug';\nimport { ComboboxSearch } from './ComboboxSearch';\nimport { ComboboxOption } from './ComboboxOption';\n\n// Re-export sub-components\nimport { jsx as _jsx, jsxs as _jsxs } from \"react/jsx-runtime\";\nexport { ComboboxOption } from './ComboboxOption';\nexport { ComboboxSearch } from './ComboboxSearch';\nconst debug = createDebug('node-type-combobox');\n/**\n * A combobox for selecting node types and adding them to the canvas.\n *\n * @example\n * ```tsx\n * // Basic usage - uses all registered node types\n * console.log('Created:', id)} />\n *\n * // With custom node types\n * \n * ```\n */\nexport function NodeTypeCombobox(t0) {\n const $ = _c(53);\n const {\n nodeTypes: customNodeTypes,\n onNodeCreated,\n createPosition: t1,\n placeholder: t2,\n clearOnCreate: t3,\n className,\n style,\n disabled: t4\n } = t0;\n const createPosition = t1 === undefined ? \"center\" : t1;\n const placeholder = t2 === undefined ? \"Add node...\" : t2;\n const clearOnCreate = t3 === undefined ? true : t3;\n const disabled = t4 === undefined ? false : t4;\n const [isOpen, setIsOpen] = useState(false);\n const [searchQuery, setSearchQuery] = useState(\"\");\n const [highlightedIndex, setHighlightedIndex] = useState(0);\n const inputRef = useRef(null);\n const listRef = useRef(null);\n const createNode = useCreateNode();\n const graphId = useAtomValue(currentGraphIdAtom);\n const viewportRect = useAtomValue(viewportRectAtom);\n const pan = useAtomValue(panAtom);\n const zoom = useAtomValue(zoomAtom);\n let t5;\n if ($[0] !== customNodeTypes || $[1] !== searchQuery) {\n const nodeTypes = customNodeTypes ?? getRegisteredNodeTypes().map(_temp);\n bb0: {\n if (!searchQuery.trim()) {\n t5 = nodeTypes;\n break bb0;\n }\n const query = searchQuery.toLowerCase();\n t5 = nodeTypes.filter(opt => opt.type.toLowerCase().includes(query) || opt.label?.toLowerCase().includes(query) || opt.description?.toLowerCase().includes(query));\n }\n $[0] = customNodeTypes;\n $[1] = searchQuery;\n $[2] = t5;\n } else {\n t5 = $[2];\n }\n const filteredTypes = t5;\n let t6;\n if ($[3] !== createPosition || $[4] !== pan || $[5] !== viewportRect?.height || $[6] !== viewportRect?.width || $[7] !== zoom) {\n t6 = () => {\n if (typeof createPosition === \"object\") {\n return createPosition;\n }\n const vpWidth = viewportRect?.width ?? 800;\n const vpHeight = viewportRect?.height ?? 600;\n if (createPosition === \"random\") {\n const centerX = (vpWidth / 2 - pan.x) / zoom;\n const centerY = (vpHeight / 2 - pan.y) / zoom;\n const offsetX = (Math.random() - 0.5) * 400;\n const offsetY = (Math.random() - 0.5) * 400;\n return {\n x: centerX + offsetX,\n y: centerY + offsetY\n };\n }\n const centerX_0 = (vpWidth / 2 - pan.x) / zoom;\n const centerY_0 = (vpHeight / 2 - pan.y) / zoom;\n return {\n x: centerX_0,\n y: centerY_0\n };\n };\n $[3] = createPosition;\n $[4] = pan;\n $[5] = viewportRect?.height;\n $[6] = viewportRect?.width;\n $[7] = zoom;\n $[8] = t6;\n } else {\n t6 = $[8];\n }\n const getCreatePosition = t6;\n let t7;\n if ($[9] !== clearOnCreate || $[10] !== createNode || $[11] !== getCreatePosition || $[12] !== graphId || $[13] !== onNodeCreated) {\n t7 = option => {\n if (!graphId) {\n debug.warn(\"No graphId available\");\n return;\n }\n const position = getCreatePosition();\n const width = option.defaultWidth ?? 200;\n const height = option.defaultHeight ?? 150;\n createNode.mutate({\n graph_id: graphId,\n label: option.label || option.type,\n node_type: option.type,\n configuration: null,\n ui_properties: {\n x: position.x - width / 2,\n y: position.y - height / 2,\n width,\n height\n }\n }, {\n onSuccess: data => {\n onNodeCreated?.(data.id, option.type);\n }\n });\n if (clearOnCreate) {\n setSearchQuery(\"\");\n }\n setIsOpen(false);\n };\n $[9] = clearOnCreate;\n $[10] = createNode;\n $[11] = getCreatePosition;\n $[12] = graphId;\n $[13] = onNodeCreated;\n $[14] = t7;\n } else {\n t7 = $[14];\n }\n const handleSelect = t7;\n let t8;\n if ($[15] !== filteredTypes || $[16] !== handleSelect || $[17] !== highlightedIndex || $[18] !== isOpen) {\n t8 = e => {\n if (!isOpen) {\n if (e.key === \"ArrowDown\" || e.key === \"Enter\") {\n setIsOpen(true);\n e.preventDefault();\n }\n return;\n }\n bb121: switch (e.key) {\n case \"ArrowDown\":\n {\n e.preventDefault();\n setHighlightedIndex(prev_0 => Math.min(prev_0 + 1, filteredTypes.length - 1));\n break bb121;\n }\n case \"ArrowUp\":\n {\n e.preventDefault();\n setHighlightedIndex(_temp2);\n break bb121;\n }\n case \"Enter\":\n {\n e.preventDefault();\n if (filteredTypes[highlightedIndex]) {\n handleSelect(filteredTypes[highlightedIndex]);\n }\n break bb121;\n }\n case \"Escape\":\n {\n e.preventDefault();\n setIsOpen(false);\n }\n }\n };\n $[15] = filteredTypes;\n $[16] = handleSelect;\n $[17] = highlightedIndex;\n $[18] = isOpen;\n $[19] = t8;\n } else {\n t8 = $[19];\n }\n const handleKeyDown = t8;\n let t9;\n if ($[20] === Symbol.for(\"react.memo_cache_sentinel\")) {\n t9 = () => {\n setHighlightedIndex(0);\n };\n $[20] = t9;\n } else {\n t9 = $[20];\n }\n let t10;\n if ($[21] !== filteredTypes.length) {\n t10 = [filteredTypes.length];\n $[21] = filteredTypes.length;\n $[22] = t10;\n } else {\n t10 = $[22];\n }\n useEffect(t9, t10);\n let t11;\n let t12;\n if ($[23] !== highlightedIndex || $[24] !== isOpen) {\n t11 = () => {\n if (isOpen && listRef.current) {\n const highlightedElement = listRef.current.children[highlightedIndex];\n highlightedElement?.scrollIntoView({\n block: \"nearest\"\n });\n }\n };\n t12 = [highlightedIndex, isOpen];\n $[23] = highlightedIndex;\n $[24] = isOpen;\n $[25] = t11;\n $[26] = t12;\n } else {\n t11 = $[25];\n t12 = $[26];\n }\n useEffect(t11, t12);\n let t13;\n let t14;\n if ($[27] === Symbol.for(\"react.memo_cache_sentinel\")) {\n t13 = () => {\n const handleClickOutside = e_0 => {\n if (inputRef.current && !inputRef.current.parentElement?.contains(e_0.target)) {\n setIsOpen(false);\n }\n };\n document.addEventListener(\"mousedown\", handleClickOutside);\n return () => document.removeEventListener(\"mousedown\", handleClickOutside);\n };\n t14 = [];\n $[27] = t13;\n $[28] = t14;\n } else {\n t13 = $[27];\n t14 = $[28];\n }\n useEffect(t13, t14);\n let t15;\n if ($[29] !== style) {\n t15 = {\n ...styles.container,\n ...style\n };\n $[29] = style;\n $[30] = t15;\n } else {\n t15 = $[30];\n }\n let t16;\n let t17;\n if ($[31] === Symbol.for(\"react.memo_cache_sentinel\")) {\n t16 = v => {\n setSearchQuery(v);\n setIsOpen(true);\n };\n t17 = () => setIsOpen(true);\n $[31] = t16;\n $[32] = t17;\n } else {\n t16 = $[31];\n t17 = $[32];\n }\n let t18;\n if ($[33] !== disabled || $[34] !== handleKeyDown || $[35] !== isOpen || $[36] !== placeholder || $[37] !== searchQuery) {\n t18 = /*#__PURE__*/_jsx(ComboboxSearch, {\n inputRef: inputRef,\n value: searchQuery,\n onChange: t16,\n onFocus: t17,\n onKeyDown: handleKeyDown,\n placeholder: placeholder,\n disabled: disabled,\n isOpen: isOpen\n });\n $[33] = disabled;\n $[34] = handleKeyDown;\n $[35] = isOpen;\n $[36] = placeholder;\n $[37] = searchQuery;\n $[38] = t18;\n } else {\n t18 = $[38];\n }\n let t19;\n if ($[39] !== filteredTypes || $[40] !== handleSelect || $[41] !== highlightedIndex || $[42] !== isOpen) {\n t19 = isOpen && filteredTypes.length > 0 && /*#__PURE__*/_jsx(\"ul\", {\n ref: listRef,\n style: styles.dropdown,\n role: \"listbox\",\n children: filteredTypes.map((option_0, index) => /*#__PURE__*/_jsx(ComboboxOption, {\n type: option_0.type,\n label: option_0.label || option_0.type,\n icon: option_0.icon,\n description: option_0.description,\n highlighted: index === highlightedIndex,\n onClick: () => handleSelect(option_0),\n onMouseEnter: () => setHighlightedIndex(index)\n }, option_0.type))\n });\n $[39] = filteredTypes;\n $[40] = handleSelect;\n $[41] = highlightedIndex;\n $[42] = isOpen;\n $[43] = t19;\n } else {\n t19 = $[43];\n }\n let t20;\n if ($[44] !== filteredTypes.length || $[45] !== isOpen) {\n t20 = isOpen && filteredTypes.length === 0 && /*#__PURE__*/_jsx(\"div\", {\n style: styles.emptyState,\n children: \"No node types found\"\n });\n $[44] = filteredTypes.length;\n $[45] = isOpen;\n $[46] = t20;\n } else {\n t20 = $[46];\n }\n let t21;\n if ($[47] !== className || $[48] !== t15 || $[49] !== t18 || $[50] !== t19 || $[51] !== t20) {\n t21 = /*#__PURE__*/_jsxs(\"div\", {\n className: className,\n style: t15,\n children: [t18, t19, t20]\n });\n $[47] = className;\n $[48] = t15;\n $[49] = t18;\n $[50] = t19;\n $[51] = t20;\n $[52] = t21;\n } else {\n t21 = $[52];\n }\n return t21;\n}\n\n// Helper to format type names into labels\nfunction _temp2(prev) {\n return Math.max(prev - 1, 0);\n}\nfunction _temp(type) {\n return {\n type,\n label: formatTypeLabel(type)\n };\n}\nfunction formatTypeLabel(type) {\n return type.split(/[-_]/).map(word => word.charAt(0).toUpperCase() + word.slice(1)).join(' ');\n}\nconst styles = {\n container: {\n position: 'relative',\n width: '200px'\n },\n input: {\n width: '100%',\n padding: '8px 12px',\n fontSize: '14px',\n border: '1px solid #ddd',\n borderRadius: '6px',\n outline: 'none',\n backgroundColor: '#fff'\n },\n dropdown: {\n position: 'absolute',\n top: '100%',\n left: 0,\n right: 0,\n marginTop: '4px',\n padding: '4px 0',\n backgroundColor: '#fff',\n border: '1px solid #ddd',\n borderRadius: '6px',\n boxShadow: '0 4px 12px rgba(0,0,0,0.15)',\n maxHeight: '240px',\n overflowY: 'auto',\n zIndex: 1000,\n listStyle: 'none'\n },\n option: {\n display: 'flex',\n alignItems: 'center',\n gap: '8px',\n padding: '8px 12px',\n cursor: 'pointer',\n transition: 'background-color 0.1s'\n },\n optionHighlighted: {\n backgroundColor: '#f0f0f0'\n },\n icon: {\n fontSize: '16px',\n width: '20px',\n textAlign: 'center'\n },\n optionContent: {\n display: 'flex',\n flexDirection: 'column',\n gap: '2px'\n },\n optionLabel: {\n fontSize: '14px',\n fontWeight: 500\n },\n optionDescription: {\n fontSize: '12px',\n color: '#666'\n },\n emptyState: {\n position: 'absolute',\n top: '100%',\n left: 0,\n right: 0,\n marginTop: '4px',\n padding: '12px',\n backgroundColor: '#fff',\n border: '1px solid #ddd',\n borderRadius: '6px',\n boxShadow: '0 4px 12px rgba(0,0,0,0.15)',\n color: '#666',\n fontSize: '14px',\n textAlign: 'center'\n }\n};\nexport default NodeTypeCombobox;","import { c as _c } from \"react/compiler-runtime\";\n/**\n * ComboboxSearch\n *\n * Search input for the NodeTypeCombobox: text input with combobox\n * ARIA role, opens dropdown on focus and typing.\n *\n * Extracted from NodeTypeCombobox.tsx in v1.5.0.\n *\n * @since 1.5.0\n */\n\nimport React from 'react';\n\n// --- Types ---\nimport { jsx as _jsx } from \"react/jsx-runtime\";\n// --- Default style ---\n\nconst defaultInputStyle = {\n width: '100%',\n padding: '8px 12px',\n fontSize: '14px',\n border: '1px solid #ddd',\n borderRadius: '6px',\n outline: 'none',\n backgroundColor: '#fff'\n};\n\n// --- Component ---\n\nexport function ComboboxSearch(t0) {\n const $ = _c(14);\n const {\n inputRef,\n value,\n onChange,\n onKeyDown,\n onFocus,\n placeholder: t1,\n disabled: t2,\n isOpen,\n style\n } = t0;\n const placeholder = t1 === undefined ? \"Search...\" : t1;\n const disabled = t2 === undefined ? false : t2;\n let t3;\n if ($[0] !== onChange) {\n t3 = e => onChange(e.target.value);\n $[0] = onChange;\n $[1] = t3;\n } else {\n t3 = $[1];\n }\n let t4;\n if ($[2] !== style) {\n t4 = {\n ...defaultInputStyle,\n ...style\n };\n $[2] = style;\n $[3] = t4;\n } else {\n t4 = $[3];\n }\n let t5;\n if ($[4] !== disabled || $[5] !== inputRef || $[6] !== isOpen || $[7] !== onFocus || $[8] !== onKeyDown || $[9] !== placeholder || $[10] !== t3 || $[11] !== t4 || $[12] !== value) {\n t5 = /*#__PURE__*/_jsx(\"input\", {\n ref: inputRef,\n type: \"text\",\n value: value,\n onChange: t3,\n onFocus: onFocus,\n onKeyDown: onKeyDown,\n placeholder: placeholder,\n disabled: disabled,\n style: t4,\n \"aria-expanded\": isOpen,\n \"aria-haspopup\": \"listbox\",\n \"aria-autocomplete\": \"list\",\n role: \"combobox\"\n });\n $[4] = disabled;\n $[5] = inputRef;\n $[6] = isOpen;\n $[7] = onFocus;\n $[8] = onKeyDown;\n $[9] = placeholder;\n $[10] = t3;\n $[11] = t4;\n $[12] = value;\n $[13] = t5;\n } else {\n t5 = $[13];\n }\n return t5;\n}","import { c as _c } from \"react/compiler-runtime\";\n/**\n * ComboboxOption\n *\n * Individual option row for the NodeTypeCombobox dropdown.\n * Renders icon, label, description with highlight state.\n *\n * Extracted from NodeTypeCombobox.tsx in v1.5.0.\n *\n * @since 1.5.0\n */\n\nimport React from 'react';\n\n// --- Types ---\nimport { jsx as _jsx, jsxs as _jsxs } from \"react/jsx-runtime\";\n// --- Styles ---\n\nconst styles = {\n option: {\n display: 'flex',\n alignItems: 'center',\n gap: '8px',\n padding: '8px 12px',\n cursor: 'pointer',\n transition: 'background-color 0.1s'\n },\n optionHighlighted: {\n backgroundColor: '#f0f0f0'\n },\n icon: {\n fontSize: '16px',\n width: '20px',\n textAlign: 'center'\n },\n content: {\n display: 'flex',\n flexDirection: 'column',\n gap: '2px'\n },\n label: {\n fontSize: '14px',\n fontWeight: 500\n },\n description: {\n fontSize: '12px',\n color: '#666'\n }\n};\n\n// --- Component ---\n\nexport function ComboboxOption(t0) {\n const $ = _c(20);\n const {\n label,\n icon,\n description,\n highlighted: t1,\n onClick,\n onMouseEnter\n } = t0;\n const highlighted = t1 === undefined ? false : t1;\n let t2;\n if ($[0] !== highlighted) {\n t2 = highlighted ? styles.optionHighlighted : {};\n $[0] = highlighted;\n $[1] = t2;\n } else {\n t2 = $[1];\n }\n let t3;\n if ($[2] !== t2) {\n t3 = {\n ...styles.option,\n ...t2\n };\n $[2] = t2;\n $[3] = t3;\n } else {\n t3 = $[3];\n }\n let t4;\n if ($[4] !== icon) {\n t4 = icon && /*#__PURE__*/_jsx(\"span\", {\n style: styles.icon,\n children: icon\n });\n $[4] = icon;\n $[5] = t4;\n } else {\n t4 = $[5];\n }\n let t5;\n if ($[6] !== label) {\n t5 = /*#__PURE__*/_jsx(\"span\", {\n style: styles.label,\n children: label\n });\n $[6] = label;\n $[7] = t5;\n } else {\n t5 = $[7];\n }\n let t6;\n if ($[8] !== description) {\n t6 = description && /*#__PURE__*/_jsx(\"span\", {\n style: styles.description,\n children: description\n });\n $[8] = description;\n $[9] = t6;\n } else {\n t6 = $[9];\n }\n let t7;\n if ($[10] !== t5 || $[11] !== t6) {\n t7 = /*#__PURE__*/_jsxs(\"div\", {\n style: styles.content,\n children: [t5, t6]\n });\n $[10] = t5;\n $[11] = t6;\n $[12] = t7;\n } else {\n t7 = $[12];\n }\n let t8;\n if ($[13] !== highlighted || $[14] !== onClick || $[15] !== onMouseEnter || $[16] !== t3 || $[17] !== t4 || $[18] !== t7) {\n t8 = /*#__PURE__*/_jsxs(\"li\", {\n onClick: onClick,\n onMouseEnter: onMouseEnter,\n style: t3,\n role: \"option\",\n \"aria-selected\": highlighted,\n children: [t4, t7]\n });\n $[13] = highlighted;\n $[14] = onClick;\n $[15] = onMouseEnter;\n $[16] = t3;\n $[17] = t4;\n $[18] = t7;\n $[19] = t8;\n } else {\n t8 = $[19];\n }\n return t8;\n}","import { c as _c } from \"react/compiler-runtime\";\n/**\n * SettingsPanel Component\n *\n * A headless settings panel for configuring canvas event-action mappings.\n * This component is intentionally unstyled — all layout is controlled via\n * className props so consumers can use any CSS framework (Tailwind, etc.).\n *\n * @refactored 1.4.0 — Extracted SettingsPresets, SettingsEventMap, EventMappingRow\n */\n\nimport React from 'react';\nimport { useCanvasSettings } from '../hooks/useCanvasSettings';\nimport { useVirtualization } from '../hooks/useVirtualization';\nimport { SettingsPresets } from './SettingsPresets';\nimport { SettingsEventMap } from './SettingsEventMap';\n\n// Re-export sub-components\nimport { jsx as _jsx, jsxs as _jsxs } from \"react/jsx-runtime\";\nexport { SettingsPresets } from './SettingsPresets';\nexport { SettingsEventMap, EventMappingRow } from './SettingsEventMap';\n\n// =============================================================================\n// Types\n// =============================================================================\n\n// =============================================================================\n// QuickActions (kept inline — small)\n// =============================================================================\n\nfunction QuickActions(t0) {\n const $ = _c(17);\n const {\n className,\n checkboxClassName,\n virtualizationClassName,\n virtualizationStatsClassName\n } = t0;\n const {\n enabled,\n toggle,\n visibleNodes,\n totalNodes,\n culledNodes\n } = useVirtualization();\n let t1;\n if ($[0] !== checkboxClassName || $[1] !== enabled || $[2] !== toggle) {\n t1 = /*#__PURE__*/_jsx(\"input\", {\n type: \"checkbox\",\n className: checkboxClassName,\n checked: enabled,\n onChange: toggle\n });\n $[0] = checkboxClassName;\n $[1] = enabled;\n $[2] = toggle;\n $[3] = t1;\n } else {\n t1 = $[3];\n }\n let t2;\n if ($[4] === Symbol.for(\"react.memo_cache_sentinel\")) {\n t2 = /*#__PURE__*/_jsx(\"span\", {\n children: \"Virtualization\"\n });\n $[4] = t2;\n } else {\n t2 = $[4];\n }\n let t3;\n if ($[5] !== t1) {\n t3 = /*#__PURE__*/_jsxs(\"label\", {\n children: [t1, t2]\n });\n $[5] = t1;\n $[6] = t3;\n } else {\n t3 = $[6];\n }\n const t4 = enabled ? `${visibleNodes}/${totalNodes} (${culledNodes} culled)` : \"Off\";\n let t5;\n if ($[7] !== t4 || $[8] !== virtualizationStatsClassName) {\n t5 = /*#__PURE__*/_jsx(\"span\", {\n className: virtualizationStatsClassName,\n children: t4\n });\n $[7] = t4;\n $[8] = virtualizationStatsClassName;\n $[9] = t5;\n } else {\n t5 = $[9];\n }\n let t6;\n if ($[10] !== t3 || $[11] !== t5 || $[12] !== virtualizationClassName) {\n t6 = /*#__PURE__*/_jsxs(\"div\", {\n className: virtualizationClassName,\n children: [t3, t5]\n });\n $[10] = t3;\n $[11] = t5;\n $[12] = virtualizationClassName;\n $[13] = t6;\n } else {\n t6 = $[13];\n }\n let t7;\n if ($[14] !== className || $[15] !== t6) {\n t7 = /*#__PURE__*/_jsx(\"div\", {\n className: className,\n children: t6\n });\n $[14] = className;\n $[15] = t6;\n $[16] = t7;\n } else {\n t7 = $[16];\n }\n return t7;\n}\n\n// =============================================================================\n// Main Component\n// =============================================================================\n\nexport function SettingsPanel(t0) {\n const $ = _c(35);\n const {\n className,\n headerClassName,\n contentClassName,\n footerClassName,\n rowClassName,\n labelClassName,\n selectClassName,\n buttonClassName,\n presetClassName,\n presetSelectClassName,\n presetButtonsClassName,\n checkboxClassName,\n groupClassName,\n groupHeadingClassName,\n quickActionsClassName,\n virtualizationClassName,\n virtualizationStatsClassName,\n inputClassName,\n renderHeader,\n renderFooter,\n onClose\n } = t0;\n const {\n mappings,\n setEventMapping\n } = useCanvasSettings();\n let t1;\n if ($[0] !== buttonClassName || $[1] !== headerClassName || $[2] !== onClose || $[3] !== renderHeader) {\n t1 = renderHeader ? renderHeader() : /*#__PURE__*/_jsxs(\"div\", {\n className: headerClassName,\n children: [/*#__PURE__*/_jsx(\"h2\", {\n children: \"Canvas Settings\"\n }), onClose && /*#__PURE__*/_jsx(\"button\", {\n className: buttonClassName,\n onClick: onClose,\n children: \"\\xD7\"\n })]\n });\n $[0] = buttonClassName;\n $[1] = headerClassName;\n $[2] = onClose;\n $[3] = renderHeader;\n $[4] = t1;\n } else {\n t1 = $[4];\n }\n const t2 = presetSelectClassName || selectClassName;\n let t3;\n if ($[5] !== buttonClassName || $[6] !== inputClassName || $[7] !== presetButtonsClassName || $[8] !== presetClassName || $[9] !== t2) {\n t3 = /*#__PURE__*/_jsx(SettingsPresets, {\n className: presetClassName,\n selectClassName: t2,\n buttonClassName: buttonClassName,\n buttonsClassName: presetButtonsClassName,\n inputClassName: inputClassName\n });\n $[5] = buttonClassName;\n $[6] = inputClassName;\n $[7] = presetButtonsClassName;\n $[8] = presetClassName;\n $[9] = t2;\n $[10] = t3;\n } else {\n t3 = $[10];\n }\n let t4;\n if ($[11] !== checkboxClassName || $[12] !== quickActionsClassName || $[13] !== virtualizationClassName || $[14] !== virtualizationStatsClassName) {\n t4 = /*#__PURE__*/_jsx(QuickActions, {\n className: quickActionsClassName,\n checkboxClassName: checkboxClassName,\n virtualizationClassName: virtualizationClassName,\n virtualizationStatsClassName: virtualizationStatsClassName\n });\n $[11] = checkboxClassName;\n $[12] = quickActionsClassName;\n $[13] = virtualizationClassName;\n $[14] = virtualizationStatsClassName;\n $[15] = t4;\n } else {\n t4 = $[15];\n }\n let t5;\n if ($[16] !== contentClassName || $[17] !== groupClassName || $[18] !== groupHeadingClassName || $[19] !== labelClassName || $[20] !== mappings || $[21] !== rowClassName || $[22] !== selectClassName || $[23] !== setEventMapping) {\n t5 = /*#__PURE__*/_jsx(SettingsEventMap, {\n mappings: mappings,\n onActionChange: setEventMapping,\n contentClassName: contentClassName,\n groupClassName: groupClassName,\n groupHeadingClassName: groupHeadingClassName,\n rowClassName: rowClassName,\n labelClassName: labelClassName,\n selectClassName: selectClassName\n });\n $[16] = contentClassName;\n $[17] = groupClassName;\n $[18] = groupHeadingClassName;\n $[19] = labelClassName;\n $[20] = mappings;\n $[21] = rowClassName;\n $[22] = selectClassName;\n $[23] = setEventMapping;\n $[24] = t5;\n } else {\n t5 = $[24];\n }\n let t6;\n if ($[25] !== footerClassName || $[26] !== renderFooter) {\n t6 = renderFooter ? renderFooter() : /*#__PURE__*/_jsx(\"div\", {\n className: footerClassName,\n children: \"Changes auto-saved to localStorage.\"\n });\n $[25] = footerClassName;\n $[26] = renderFooter;\n $[27] = t6;\n } else {\n t6 = $[27];\n }\n let t7;\n if ($[28] !== className || $[29] !== t1 || $[30] !== t3 || $[31] !== t4 || $[32] !== t5 || $[33] !== t6) {\n t7 = /*#__PURE__*/_jsxs(\"div\", {\n className: className,\n children: [t1, t3, t4, t5, t6]\n });\n $[28] = className;\n $[29] = t1;\n $[30] = t3;\n $[31] = t4;\n $[32] = t5;\n $[33] = t6;\n $[34] = t7;\n } else {\n t7 = $[34];\n }\n return t7;\n}","import { c as _c } from \"react/compiler-runtime\";\n/**\n * SettingsPresets\n *\n * Preset selector and management UI: apply, save-as, delete, reset.\n *\n * Extracted from SettingsPanel.tsx in v1.4.0.\n *\n * @since 1.4.0\n */\n\nimport React, { useState } from 'react';\nimport { useCanvasSettings } from '../hooks/useCanvasSettings';\n\n// --- Types ---\nimport { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from \"react/jsx-runtime\";\n// --- Component ---\n\nexport function SettingsPresets(t0) {\n const $ = _c(36);\n const {\n className,\n selectClassName,\n buttonClassName,\n buttonsClassName,\n inputClassName\n } = t0;\n const {\n allPresets,\n activePresetId,\n hasUnsavedChanges,\n applyPreset,\n saveAsPreset,\n deletePreset,\n resetSettings\n } = useCanvasSettings();\n const [showSaveDialog, setShowSaveDialog] = useState(false);\n const [newPresetName, setNewPresetName] = useState(\"\");\n let t1;\n if ($[0] !== newPresetName || $[1] !== saveAsPreset) {\n t1 = () => {\n if (newPresetName.trim()) {\n saveAsPreset(newPresetName.trim());\n setNewPresetName(\"\");\n setShowSaveDialog(false);\n }\n };\n $[0] = newPresetName;\n $[1] = saveAsPreset;\n $[2] = t1;\n } else {\n t1 = $[2];\n }\n const handleSave = t1;\n let t2;\n if ($[3] !== activePresetId || $[4] !== allPresets || $[5] !== deletePreset) {\n t2 = () => {\n if (activePresetId && !allPresets.find(p => p.id === activePresetId)?.isBuiltIn) {\n deletePreset(activePresetId);\n }\n };\n $[3] = activePresetId;\n $[4] = allPresets;\n $[5] = deletePreset;\n $[6] = t2;\n } else {\n t2 = $[6];\n }\n const handleDelete = t2;\n const t3 = activePresetId || \"\";\n let t4;\n if ($[7] !== applyPreset) {\n t4 = e => e.target.value && applyPreset(e.target.value);\n $[7] = applyPreset;\n $[8] = t4;\n } else {\n t4 = $[8];\n }\n const t5 = hasUnsavedChanges ? \"Custom (modified)\" : \"Select preset...\";\n let t6;\n if ($[9] !== t5) {\n t6 = /*#__PURE__*/_jsx(\"option\", {\n value: \"\",\n disabled: true,\n children: t5\n });\n $[9] = t5;\n $[10] = t6;\n } else {\n t6 = $[10];\n }\n let t7;\n if ($[11] !== allPresets) {\n t7 = allPresets.map(_temp);\n $[11] = allPresets;\n $[12] = t7;\n } else {\n t7 = $[12];\n }\n let t8;\n if ($[13] !== selectClassName || $[14] !== t3 || $[15] !== t4 || $[16] !== t6 || $[17] !== t7) {\n t8 = /*#__PURE__*/_jsxs(\"select\", {\n className: selectClassName,\n value: t3,\n onChange: t4,\n children: [t6, t7]\n });\n $[13] = selectClassName;\n $[14] = t3;\n $[15] = t4;\n $[16] = t6;\n $[17] = t7;\n $[18] = t8;\n } else {\n t8 = $[18];\n }\n let t9;\n if ($[19] !== activePresetId || $[20] !== allPresets || $[21] !== buttonClassName || $[22] !== handleDelete || $[23] !== handleSave || $[24] !== inputClassName || $[25] !== newPresetName || $[26] !== resetSettings || $[27] !== showSaveDialog) {\n t9 = showSaveDialog ? /*#__PURE__*/_jsxs(_Fragment, {\n children: [/*#__PURE__*/_jsx(\"input\", {\n type: \"text\",\n className: inputClassName,\n placeholder: \"Preset name\",\n value: newPresetName,\n onChange: e_0 => setNewPresetName(e_0.target.value),\n onKeyDown: e_1 => e_1.key === \"Enter\" && handleSave(),\n autoFocus: true\n }), /*#__PURE__*/_jsx(\"button\", {\n className: buttonClassName,\n onClick: handleSave,\n children: \"Save\"\n }), /*#__PURE__*/_jsx(\"button\", {\n className: buttonClassName,\n onClick: () => setShowSaveDialog(false),\n children: \"Cancel\"\n })]\n }) : /*#__PURE__*/_jsxs(_Fragment, {\n children: [/*#__PURE__*/_jsx(\"button\", {\n className: buttonClassName,\n onClick: () => setShowSaveDialog(true),\n children: \"Save as...\"\n }), activePresetId && !allPresets.find(p_0 => p_0.id === activePresetId)?.isBuiltIn && /*#__PURE__*/_jsx(\"button\", {\n className: buttonClassName,\n onClick: handleDelete,\n children: \"Delete\"\n }), /*#__PURE__*/_jsx(\"button\", {\n className: buttonClassName,\n onClick: resetSettings,\n children: \"Reset\"\n })]\n });\n $[19] = activePresetId;\n $[20] = allPresets;\n $[21] = buttonClassName;\n $[22] = handleDelete;\n $[23] = handleSave;\n $[24] = inputClassName;\n $[25] = newPresetName;\n $[26] = resetSettings;\n $[27] = showSaveDialog;\n $[28] = t9;\n } else {\n t9 = $[28];\n }\n let t10;\n if ($[29] !== buttonsClassName || $[30] !== t9) {\n t10 = /*#__PURE__*/_jsx(\"div\", {\n className: buttonsClassName,\n children: t9\n });\n $[29] = buttonsClassName;\n $[30] = t9;\n $[31] = t10;\n } else {\n t10 = $[31];\n }\n let t11;\n if ($[32] !== className || $[33] !== t10 || $[34] !== t8) {\n t11 = /*#__PURE__*/_jsxs(\"div\", {\n className: className,\n children: [t8, t10]\n });\n $[32] = className;\n $[33] = t10;\n $[34] = t8;\n $[35] = t11;\n } else {\n t11 = $[35];\n }\n return t11;\n}\nfunction _temp(preset) {\n return /*#__PURE__*/_jsxs(\"option\", {\n value: preset.id,\n children: [preset.name, preset.isBuiltIn ? \"\" : \" (custom)\"]\n }, preset.id);\n}","import { c as _c } from \"react/compiler-runtime\";\n/**\n * SettingsEventMap\n *\n * Event-to-action mapping table: renders rows of event→action\n * selects grouped by category (Node, Edge, Background).\n *\n * Extracted from SettingsPanel.tsx in v1.4.0.\n *\n * @since 1.4.0\n */\n\nimport React from 'react';\nimport { CanvasEventType, EVENT_TYPE_INFO } from '../core/settings-types';\nimport { getActionsByCategories } from '../core/action-registry';\n\n// --- Types ---\nimport { jsx as _jsx, jsxs as _jsxs } from \"react/jsx-runtime\";\n// --- Sub-component ---\n\nexport function EventMappingRow(t0) {\n const $ = _c(28);\n const {\n event,\n currentActionId,\n onActionChange,\n rowClassName,\n labelClassName,\n selectClassName\n } = t0;\n let t1;\n let t2;\n let t3;\n let t4;\n let t5;\n let t6;\n if ($[0] !== currentActionId || $[1] !== event.label || $[2] !== event.type || $[3] !== labelClassName || $[4] !== onActionChange || $[5] !== rowClassName || $[6] !== selectClassName) {\n const categories = getActionsByCategories();\n t5 = rowClassName;\n if ($[13] !== event.label || $[14] !== labelClassName) {\n t6 = /*#__PURE__*/_jsx(\"span\", {\n className: labelClassName,\n children: event.label\n });\n $[13] = event.label;\n $[14] = labelClassName;\n $[15] = t6;\n } else {\n t6 = $[15];\n }\n t1 = selectClassName;\n t2 = currentActionId;\n if ($[16] !== event.type || $[17] !== onActionChange) {\n t3 = e => onActionChange(event.type, e.target.value);\n $[16] = event.type;\n $[17] = onActionChange;\n $[18] = t3;\n } else {\n t3 = $[18];\n }\n t4 = categories.map(_temp2);\n $[0] = currentActionId;\n $[1] = event.label;\n $[2] = event.type;\n $[3] = labelClassName;\n $[4] = onActionChange;\n $[5] = rowClassName;\n $[6] = selectClassName;\n $[7] = t1;\n $[8] = t2;\n $[9] = t3;\n $[10] = t4;\n $[11] = t5;\n $[12] = t6;\n } else {\n t1 = $[7];\n t2 = $[8];\n t3 = $[9];\n t4 = $[10];\n t5 = $[11];\n t6 = $[12];\n }\n let t7;\n if ($[19] !== t1 || $[20] !== t2 || $[21] !== t3 || $[22] !== t4) {\n t7 = /*#__PURE__*/_jsx(\"select\", {\n className: t1,\n value: t2,\n onChange: t3,\n children: t4\n });\n $[19] = t1;\n $[20] = t2;\n $[21] = t3;\n $[22] = t4;\n $[23] = t7;\n } else {\n t7 = $[23];\n }\n let t8;\n if ($[24] !== t5 || $[25] !== t6 || $[26] !== t7) {\n t8 = /*#__PURE__*/_jsxs(\"div\", {\n className: t5,\n children: [t6, t7]\n });\n $[24] = t5;\n $[25] = t6;\n $[26] = t7;\n $[27] = t8;\n } else {\n t8 = $[27];\n }\n return t8;\n}\n\n// --- Component ---\nfunction _temp2(category) {\n return /*#__PURE__*/_jsx(\"optgroup\", {\n label: category.label,\n children: category.actions.map(_temp)\n }, category.category);\n}\nfunction _temp(action) {\n return /*#__PURE__*/_jsx(\"option\", {\n value: action.id,\n children: action.label\n }, action.id);\n}\nexport function SettingsEventMap(t0) {\n const $ = _c(17);\n const {\n mappings,\n onActionChange,\n contentClassName,\n groupClassName,\n groupHeadingClassName,\n rowClassName,\n labelClassName,\n selectClassName\n } = t0;\n let t1;\n if ($[0] !== contentClassName || $[1] !== groupClassName || $[2] !== groupHeadingClassName || $[3] !== labelClassName || $[4] !== mappings || $[5] !== onActionChange || $[6] !== rowClassName || $[7] !== selectClassName) {\n const nodeEvents = Object.values(CanvasEventType).filter(_temp3);\n const edgeEvents = Object.values(CanvasEventType).filter(_temp4);\n const backgroundEvents = Object.values(CanvasEventType).filter(_temp5);\n let t2;\n if ($[9] !== groupClassName || $[10] !== groupHeadingClassName || $[11] !== labelClassName || $[12] !== mappings || $[13] !== onActionChange || $[14] !== rowClassName || $[15] !== selectClassName) {\n t2 = (heading, events) => /*#__PURE__*/_jsxs(\"div\", {\n className: groupClassName,\n children: [/*#__PURE__*/_jsx(\"h3\", {\n className: groupHeadingClassName,\n children: heading\n }), events.map(event_2 => /*#__PURE__*/_jsx(EventMappingRow, {\n event: EVENT_TYPE_INFO[event_2],\n currentActionId: mappings[event_2],\n onActionChange: onActionChange,\n rowClassName: rowClassName,\n labelClassName: labelClassName,\n selectClassName: selectClassName\n }, event_2))]\n });\n $[9] = groupClassName;\n $[10] = groupHeadingClassName;\n $[11] = labelClassName;\n $[12] = mappings;\n $[13] = onActionChange;\n $[14] = rowClassName;\n $[15] = selectClassName;\n $[16] = t2;\n } else {\n t2 = $[16];\n }\n const renderGroup = t2;\n t1 = /*#__PURE__*/_jsxs(\"div\", {\n className: contentClassName,\n children: [renderGroup(\"Node Events\", nodeEvents), renderGroup(\"Edge Events\", edgeEvents), renderGroup(\"Background Events\", backgroundEvents)]\n });\n $[0] = contentClassName;\n $[1] = groupClassName;\n $[2] = groupHeadingClassName;\n $[3] = labelClassName;\n $[4] = mappings;\n $[5] = onActionChange;\n $[6] = rowClassName;\n $[7] = selectClassName;\n $[8] = t1;\n } else {\n t1 = $[8];\n }\n return t1;\n}\nfunction _temp5(event_1) {\n return EVENT_TYPE_INFO[event_1].category === \"background\";\n}\nfunction _temp4(event_0) {\n return EVENT_TYPE_INFO[event_0].category === \"edge\";\n}\nfunction _temp3(event) {\n return EVENT_TYPE_INFO[event].category === \"node\";\n}","'use client';\n\nimport { c as _c } from \"react/compiler-runtime\";\nimport React, { useEffect, useRef, useState } from 'react';\nimport { useAtom, useAtomValue, useSetAtom } from 'jotai';\nimport { commandLineVisibleAtom, commandLineStateAtom, closeCommandLineAtom, commandProgressAtom, selectedSuggestionIndexAtom, inputModeAtom, selectCommandAtom } from '../../commands/store';\nimport { commandRegistry } from '../../commands/registry';\nimport { CommandSearch } from './CommandSearch';\nimport { CommandInputCollector } from './CommandInputCollector';\nimport { jsx as _jsx, jsxs as _jsxs } from \"react/jsx-runtime\";\nconst MIN_HEIGHT = 60;\nconst MAX_HEIGHT = 400;\nconst DEFAULT_HEIGHT = 200;\n\n/**\n * Props for the CommandLine component\n */\n\n/**\n * CommandLine\n *\n * The main command line UI bar that appears at the bottom of the screen.\n * Hidden by default, shown when user presses `/` or Cmd+K.\n *\n * States:\n * - idle: Shows search input\n * - searching: Shows autocomplete suggestions\n * - collecting: Shows sequential input prompts\n * - executing: Shows loading spinner\n * - error: Shows error message\n */\nexport function CommandLine(t0) {\n const $ = _c(58);\n const {\n isModalOpen\n } = t0;\n const visible = useAtomValue(commandLineVisibleAtom);\n const [state, setState] = useAtom(commandLineStateAtom);\n useSetAtom(closeCommandLineAtom);\n const progress = useAtomValue(commandProgressAtom);\n const selectedIndex = useAtomValue(selectedSuggestionIndexAtom);\n const setInputMode = useSetAtom(inputModeAtom);\n const containerRef = useRef(null);\n const [height, setHeight] = useState(DEFAULT_HEIGHT);\n const [isDragging, setIsDragging] = useState(false);\n const dragStartY = useRef(0);\n const dragStartHeight = useRef(DEFAULT_HEIGHT);\n let t1;\n let t2;\n if ($[0] !== isModalOpen || $[1] !== setInputMode || $[2] !== setState || $[3] !== state.phase || $[4] !== visible) {\n t1 = () => {\n if (!visible) {\n return;\n }\n const handleKeyDown = e => {\n if (e.key === \"Escape\") {\n if (isModalOpen?.()) {\n return;\n }\n e.preventDefault();\n e.stopPropagation();\n if (state.phase === \"collecting\" || state.phase === \"executing\" || state.phase === \"error\") {\n setState({\n phase: \"searching\",\n query: \"\",\n suggestions: commandRegistry.all()\n });\n setInputMode({\n type: \"normal\"\n });\n }\n }\n };\n window.addEventListener(\"keydown\", handleKeyDown, {\n capture: true\n });\n return () => window.removeEventListener(\"keydown\", handleKeyDown, {\n capture: true\n });\n };\n t2 = [visible, state.phase, setState, setInputMode, isModalOpen];\n $[0] = isModalOpen;\n $[1] = setInputMode;\n $[2] = setState;\n $[3] = state.phase;\n $[4] = visible;\n $[5] = t1;\n $[6] = t2;\n } else {\n t1 = $[5];\n t2 = $[6];\n }\n useEffect(t1, t2);\n let t3;\n if ($[7] !== height) {\n t3 = e_0 => {\n e_0.preventDefault();\n setIsDragging(true);\n dragStartY.current = e_0.clientY;\n dragStartHeight.current = height;\n };\n $[7] = height;\n $[8] = t3;\n } else {\n t3 = $[8];\n }\n const handleDragStart = t3;\n let t4;\n let t5;\n if ($[9] !== isDragging) {\n t4 = () => {\n if (!isDragging) {\n return;\n }\n const handleMouseMove = e_1 => {\n const deltaY = dragStartY.current - e_1.clientY;\n const newHeight = Math.min(MAX_HEIGHT, Math.max(MIN_HEIGHT, dragStartHeight.current + deltaY));\n setHeight(newHeight);\n };\n const handleMouseUp = () => {\n setIsDragging(false);\n };\n window.addEventListener(\"mousemove\", handleMouseMove);\n window.addEventListener(\"mouseup\", handleMouseUp);\n return () => {\n window.removeEventListener(\"mousemove\", handleMouseMove);\n window.removeEventListener(\"mouseup\", handleMouseUp);\n };\n };\n t5 = [isDragging];\n $[9] = isDragging;\n $[10] = t4;\n $[11] = t5;\n } else {\n t4 = $[10];\n t5 = $[11];\n }\n useEffect(t4, t5);\n if (!visible) {\n return null;\n }\n typeof window !== \"undefined\" ? Math.min(400, window.innerHeight * 0.5) : 300;\n const t6 = `${height}px`;\n let t7;\n if ($[12] !== t6) {\n t7 = {\n height: t6,\n maxHeight: \"50vh\",\n backgroundColor: \"var(--cmd-bg)\"\n };\n $[12] = t6;\n $[13] = t7;\n } else {\n t7 = $[13];\n }\n const t8 = isDragging ? \"var(--cmd-resize-hover)\" : \"var(--cmd-resize-bg)\";\n let t9;\n if ($[14] !== t8) {\n t9 = {\n borderColor: \"var(--cmd-border)\",\n backgroundColor: t8\n };\n $[14] = t8;\n $[15] = t9;\n } else {\n t9 = $[15];\n }\n let t10;\n let t11;\n if ($[16] !== isDragging) {\n t10 = e_2 => !isDragging && (e_2.currentTarget.style.backgroundColor = \"var(--cmd-resize-hover)\");\n t11 = e_3 => !isDragging && (e_3.currentTarget.style.backgroundColor = \"var(--cmd-resize-bg)\");\n $[16] = isDragging;\n $[17] = t10;\n $[18] = t11;\n } else {\n t10 = $[17];\n t11 = $[18];\n }\n let t12;\n if ($[19] === Symbol.for(\"react.memo_cache_sentinel\")) {\n t12 = /*#__PURE__*/_jsx(\"div\", {\n className: \"h-1 w-12 rounded-full opacity-50\",\n style: {\n backgroundColor: \"var(--hud-icon)\"\n }\n });\n $[19] = t12;\n } else {\n t12 = $[19];\n }\n let t13;\n if ($[20] !== handleDragStart || $[21] !== t10 || $[22] !== t11 || $[23] !== t9) {\n t13 = /*#__PURE__*/_jsx(\"div\", {\n onMouseDown: handleDragStart,\n className: \"flex h-3 w-full shrink-0 cursor-ns-resize items-center justify-center border-t transition-colors\",\n style: t9,\n onMouseEnter: t10,\n onMouseLeave: t11,\n children: t12\n });\n $[20] = handleDragStart;\n $[21] = t10;\n $[22] = t11;\n $[23] = t9;\n $[24] = t13;\n } else {\n t13 = $[24];\n }\n let t14;\n if ($[25] === Symbol.for(\"react.memo_cache_sentinel\")) {\n t14 = /*#__PURE__*/_jsx(\"span\", {\n className: \"mr-2 text-lg font-bold select-none\",\n style: {\n color: \"var(--badge-info-text)\"\n },\n children: \">\"\n });\n $[25] = t14;\n } else {\n t14 = $[25];\n }\n let t15;\n if ($[26] !== state.phase) {\n t15 = (state.phase === \"idle\" || state.phase === \"searching\") && /*#__PURE__*/_jsx(CommandSearch, {});\n $[26] = state.phase;\n $[27] = t15;\n } else {\n t15 = $[27];\n }\n let t16;\n if ($[28] !== state.phase) {\n t16 = state.phase === \"collecting\" && /*#__PURE__*/_jsx(CommandInputCollector, {});\n $[28] = state.phase;\n $[29] = t16;\n } else {\n t16 = $[29];\n }\n let t17;\n if ($[30] !== state.command || $[31] !== state.phase) {\n t17 = state.phase === \"executing\" && /*#__PURE__*/_jsxs(\"div\", {\n className: \"flex items-center gap-2\",\n style: {\n color: \"var(--badge-warning-text)\"\n },\n children: [/*#__PURE__*/_jsxs(\"svg\", {\n className: \"h-5 w-5 animate-spin\",\n viewBox: \"0 0 24 24\",\n children: [/*#__PURE__*/_jsx(\"circle\", {\n className: \"opacity-25\",\n cx: \"12\",\n cy: \"12\",\n r: \"10\",\n stroke: \"currentColor\",\n strokeWidth: \"4\",\n fill: \"none\"\n }), /*#__PURE__*/_jsx(\"path\", {\n className: \"opacity-75\",\n fill: \"currentColor\",\n d: \"M4 12a8 8 0 018-8V0C5.373 0 0 5.373 0 12h4zm2 5.291A7.962 7.962 0 014 12H0c0 3.042 1.135 5.824 3 7.938l3-2.647z\"\n })]\n }), /*#__PURE__*/_jsxs(\"span\", {\n className: \"text-base\",\n children: [\"Executing \", state.command.name, \"...\"]\n })]\n });\n $[30] = state.command;\n $[31] = state.phase;\n $[32] = t17;\n } else {\n t17 = $[32];\n }\n let t18;\n if ($[33] !== setState || $[34] !== state.message || $[35] !== state.phase) {\n t18 = state.phase === \"error\" && /*#__PURE__*/_jsxs(\"div\", {\n className: \"flex items-center gap-2\",\n style: {\n color: \"var(--badge-error-text)\"\n },\n children: [/*#__PURE__*/_jsxs(\"svg\", {\n className: \"h-5 w-5\",\n viewBox: \"0 0 24 24\",\n fill: \"none\",\n stroke: \"currentColor\",\n strokeWidth: \"2\",\n children: [/*#__PURE__*/_jsx(\"circle\", {\n cx: \"12\",\n cy: \"12\",\n r: \"10\"\n }), /*#__PURE__*/_jsx(\"line\", {\n x1: \"15\",\n y1: \"9\",\n x2: \"9\",\n y2: \"15\"\n }), /*#__PURE__*/_jsx(\"line\", {\n x1: \"9\",\n y1: \"9\",\n x2: \"15\",\n y2: \"15\"\n })]\n }), /*#__PURE__*/_jsx(\"span\", {\n className: \"text-base\",\n children: state.message\n }), /*#__PURE__*/_jsx(\"button\", {\n onClick: () => setState({\n phase: \"idle\"\n }),\n className: \"ml-2 rounded px-2 py-1 text-sm transition-colors\",\n style: {\n backgroundColor: \"var(--list-item-bg-hover)\",\n color: \"var(--hud-text-secondary)\"\n },\n onMouseEnter: _temp,\n onMouseLeave: _temp2,\n children: \"Try again\"\n })]\n });\n $[33] = setState;\n $[34] = state.message;\n $[35] = state.phase;\n $[36] = t18;\n } else {\n t18 = $[36];\n }\n let t19;\n if ($[37] === Symbol.for(\"react.memo_cache_sentinel\")) {\n t19 = /*#__PURE__*/_jsx(\"div\", {\n className: \"flex-1\"\n });\n $[37] = t19;\n } else {\n t19 = $[37];\n }\n let t20;\n if ($[38] !== progress) {\n t20 = progress && /*#__PURE__*/_jsxs(\"span\", {\n className: \"mr-4 rounded px-2 py-1 text-sm\",\n style: {\n backgroundColor: \"var(--list-item-bg-hover)\",\n color: \"var(--hud-text-secondary)\"\n },\n children: [\"Step \", progress.current, \"/\", progress.total]\n });\n $[38] = progress;\n $[39] = t20;\n } else {\n t20 = $[39];\n }\n let t21;\n if ($[40] === Symbol.for(\"react.memo_cache_sentinel\")) {\n t21 = /*#__PURE__*/_jsx(\"span\", {\n className: \"text-sm select-none\",\n style: {\n color: \"var(--hud-text-secondary)\",\n opacity: 0.6\n },\n children: \"/ to close \\u2022 ESC to cancel\"\n });\n $[40] = t21;\n } else {\n t21 = $[40];\n }\n let t22;\n if ($[41] !== t15 || $[42] !== t16 || $[43] !== t17 || $[44] !== t18 || $[45] !== t20) {\n t22 = /*#__PURE__*/_jsxs(\"div\", {\n className: \"flex items-center px-4 py-3 font-mono text-sm\",\n children: [t14, t15, t16, t17, t18, t19, t20, t21]\n });\n $[41] = t15;\n $[42] = t16;\n $[43] = t17;\n $[44] = t18;\n $[45] = t20;\n $[46] = t22;\n } else {\n t22 = $[46];\n }\n let t23;\n if ($[47] !== selectedIndex || $[48] !== state.phase || $[49] !== state.suggestions) {\n t23 = state.phase === \"searching\" && state.suggestions.length > 0 && /*#__PURE__*/_jsx(\"div\", {\n className: \"min-h-0 shrink overflow-y-auto border-t\",\n style: {\n maxHeight: \"40vh\",\n borderColor: \"var(--cmd-border)\"\n },\n children: state.suggestions.map((cmd, index) => /*#__PURE__*/_jsx(CommandSuggestionItem, {\n command: cmd,\n isHighlighted: index === selectedIndex\n }, cmd.name))\n });\n $[47] = selectedIndex;\n $[48] = state.phase;\n $[49] = state.suggestions;\n $[50] = t23;\n } else {\n t23 = $[50];\n }\n let t24;\n if ($[51] !== t22 || $[52] !== t23) {\n t24 = /*#__PURE__*/_jsxs(\"div\", {\n className: \"flex min-h-0 flex-1 flex-col overflow-hidden\",\n children: [t22, t23]\n });\n $[51] = t22;\n $[52] = t23;\n $[53] = t24;\n } else {\n t24 = $[53];\n }\n let t25;\n if ($[54] !== t13 || $[55] !== t24 || $[56] !== t7) {\n t25 = /*#__PURE__*/_jsxs(\"div\", {\n ref: containerRef,\n className: \"fixed right-0 bottom-0 left-0 z-50 flex flex-col shadow-2xl\",\n style: t7,\n children: [t13, t24]\n });\n $[54] = t13;\n $[55] = t24;\n $[56] = t7;\n $[57] = t25;\n } else {\n t25 = $[57];\n }\n return t25;\n}\n\n/**\n * Individual command suggestion item\n */\nfunction _temp2(e_5) {\n return e_5.currentTarget.style.color = \"var(--hud-text-secondary)\";\n}\nfunction _temp(e_4) {\n return e_4.currentTarget.style.color = \"var(--hud-text)\";\n}\nfunction CommandSuggestionItem(t0) {\n const $ = _c(24);\n const {\n command,\n isHighlighted\n } = t0;\n const selectCommand = useSetAtom(selectCommandAtom);\n let t1;\n if ($[0] !== command || $[1] !== selectCommand) {\n t1 = () => selectCommand(command);\n $[0] = command;\n $[1] = selectCommand;\n $[2] = t1;\n } else {\n t1 = $[2];\n }\n const t2 = isHighlighted ? \"var(--list-item-bg-hover)\" : \"transparent\";\n let t3;\n if ($[3] !== t2) {\n t3 = {\n backgroundColor: t2\n };\n $[3] = t2;\n $[4] = t3;\n } else {\n t3 = $[4];\n }\n let t4;\n let t5;\n if ($[5] !== isHighlighted) {\n t4 = e => !isHighlighted && (e.currentTarget.style.backgroundColor = \"var(--list-item-bg-hover)\");\n t5 = e_0 => !isHighlighted && (e_0.currentTarget.style.backgroundColor = \"transparent\");\n $[5] = isHighlighted;\n $[6] = t4;\n $[7] = t5;\n } else {\n t4 = $[6];\n t5 = $[7];\n }\n let t6;\n if ($[8] === Symbol.for(\"react.memo_cache_sentinel\")) {\n t6 = {\n color: \"var(--hud-text)\"\n };\n $[8] = t6;\n } else {\n t6 = $[8];\n }\n let t7;\n if ($[9] !== command.name) {\n t7 = /*#__PURE__*/_jsx(\"span\", {\n className: \"font-mono\",\n style: t6,\n children: command.name\n });\n $[9] = command.name;\n $[10] = t7;\n } else {\n t7 = $[10];\n }\n let t8;\n if ($[11] !== command.aliases) {\n t8 = command.aliases && command.aliases.length > 0 && /*#__PURE__*/_jsxs(\"span\", {\n className: \"text-xs\",\n style: {\n color: \"var(--hud-text-secondary)\",\n opacity: 0.5\n },\n children: [\"(\", command.aliases.join(\", \"), \")\"]\n });\n $[11] = command.aliases;\n $[12] = t8;\n } else {\n t8 = $[12];\n }\n let t9;\n if ($[13] === Symbol.for(\"react.memo_cache_sentinel\")) {\n t9 = {\n color: \"var(--hud-text-secondary)\"\n };\n $[13] = t9;\n } else {\n t9 = $[13];\n }\n let t10;\n if ($[14] !== command.description) {\n t10 = /*#__PURE__*/_jsx(\"span\", {\n className: \"text-sm\",\n style: t9,\n children: command.description\n });\n $[14] = command.description;\n $[15] = t10;\n } else {\n t10 = $[15];\n }\n let t11;\n if ($[16] !== t1 || $[17] !== t10 || $[18] !== t3 || $[19] !== t4 || $[20] !== t5 || $[21] !== t7 || $[22] !== t8) {\n t11 = /*#__PURE__*/_jsxs(\"button\", {\n onClick: t1,\n className: \"flex w-full items-center gap-3 px-4 py-2 text-left transition-colors\",\n style: t3,\n onMouseEnter: t4,\n onMouseLeave: t5,\n children: [t7, t8, t10]\n });\n $[16] = t1;\n $[17] = t10;\n $[18] = t3;\n $[19] = t4;\n $[20] = t5;\n $[21] = t7;\n $[22] = t8;\n $[23] = t11;\n } else {\n t11 = $[23];\n }\n return t11;\n}\nexport default CommandLine;","'use client';\n\nimport { c as _c } from \"react/compiler-runtime\";\nimport React, { useRef, useEffect, useState } from 'react';\nimport { useAtom, useSetAtom, useAtomValue } from 'jotai';\nimport { commandLineStateAtom, updateSearchQueryAtom, selectCommandAtom, commandHistoryAtom, selectedSuggestionIndexAtom } from '../../commands/store';\nimport { commandRegistry } from '../../commands/registry';\n\n/**\n * CommandSearch\n *\n * Autocomplete search input for finding commands.\n * Shows suggestions as user types.\n */\nimport { jsx as _jsx, jsxs as _jsxs } from \"react/jsx-runtime\";\nexport function CommandSearch() {\n const $ = _c(24);\n const [state] = useAtom(commandLineStateAtom);\n const updateSearchQuery = useSetAtom(updateSearchQueryAtom);\n const selectCommand = useSetAtom(selectCommandAtom);\n useAtomValue(commandHistoryAtom);\n const [selectedIndex, setSelectedIndex] = useAtom(selectedSuggestionIndexAtom);\n const inputRef = useRef(null);\n const [inputValue, setInputValue] = useState(\"\");\n let t0;\n let t1;\n if ($[0] === Symbol.for(\"react.memo_cache_sentinel\")) {\n t0 = () => {\n inputRef.current?.focus();\n };\n t1 = [];\n $[0] = t0;\n $[1] = t1;\n } else {\n t0 = $[0];\n t1 = $[1];\n }\n useEffect(t0, t1);\n let t2;\n if ($[2] !== state.phase || $[3] !== state.suggestions) {\n t2 = state.phase === \"searching\" ? state.suggestions : commandRegistry.all();\n $[2] = state.phase;\n $[3] = state.suggestions;\n $[4] = t2;\n } else {\n t2 = $[4];\n }\n const suggestions = t2;\n let t3;\n if ($[5] !== updateSearchQuery) {\n t3 = e => {\n const value = e.target.value;\n setInputValue(value);\n updateSearchQuery(value);\n };\n $[5] = updateSearchQuery;\n $[6] = t3;\n } else {\n t3 = $[6];\n }\n const handleChange = t3;\n let t4;\n if ($[7] !== selectCommand || $[8] !== selectedIndex || $[9] !== setSelectedIndex || $[10] !== suggestions || $[11] !== updateSearchQuery) {\n t4 = e_0 => {\n bb15: switch (e_0.key) {\n case \"ArrowDown\":\n {\n e_0.preventDefault();\n setSelectedIndex(prev_0 => Math.min(prev_0 + 1, suggestions.length - 1));\n break bb15;\n }\n case \"ArrowUp\":\n {\n e_0.preventDefault();\n setSelectedIndex(_temp);\n break bb15;\n }\n case \"Enter\":\n {\n e_0.preventDefault();\n if (suggestions[selectedIndex]) {\n selectCommand(suggestions[selectedIndex]);\n }\n break bb15;\n }\n case \"Tab\":\n {\n e_0.preventDefault();\n if (suggestions[selectedIndex]) {\n setInputValue(suggestions[selectedIndex].name);\n updateSearchQuery(suggestions[selectedIndex].name);\n }\n }\n }\n };\n $[7] = selectCommand;\n $[8] = selectedIndex;\n $[9] = setSelectedIndex;\n $[10] = suggestions;\n $[11] = updateSearchQuery;\n $[12] = t4;\n } else {\n t4 = $[12];\n }\n const handleKeyDown = t4;\n let t5;\n if ($[13] === Symbol.for(\"react.memo_cache_sentinel\")) {\n t5 = {\n color: \"var(--cmd-input-text)\"\n };\n $[13] = t5;\n } else {\n t5 = $[13];\n }\n let t6;\n if ($[14] !== handleChange || $[15] !== handleKeyDown || $[16] !== inputValue) {\n t6 = /*#__PURE__*/_jsx(\"input\", {\n ref: inputRef,\n type: \"text\",\n value: inputValue,\n onChange: handleChange,\n onKeyDown: handleKeyDown,\n placeholder: \"Type command name...\",\n className: \"flex-1 bg-transparent outline-none\",\n style: t5,\n autoComplete: \"off\",\n autoCorrect: \"off\",\n autoCapitalize: \"off\",\n spellCheck: \"false\"\n });\n $[14] = handleChange;\n $[15] = handleKeyDown;\n $[16] = inputValue;\n $[17] = t6;\n } else {\n t6 = $[17];\n }\n let t7;\n if ($[18] !== inputValue || $[19] !== suggestions) {\n t7 = inputValue && /*#__PURE__*/_jsxs(\"span\", {\n className: \"ml-2 text-xs\",\n style: {\n color: \"var(--hud-text-secondary)\",\n opacity: 0.6\n },\n children: [suggestions.length, \" matches\"]\n });\n $[18] = inputValue;\n $[19] = suggestions;\n $[20] = t7;\n } else {\n t7 = $[20];\n }\n let t8;\n if ($[21] !== t6 || $[22] !== t7) {\n t8 = /*#__PURE__*/_jsxs(\"div\", {\n className: \"flex flex-1 items-center\",\n children: [t6, t7]\n });\n $[21] = t6;\n $[22] = t7;\n $[23] = t8;\n } else {\n t8 = $[23];\n }\n return t8;\n}\nfunction _temp(prev) {\n return Math.max(prev - 1, 0);\n}\nexport default CommandSearch;","'use client';\n\nimport { c as _c } from \"react/compiler-runtime\";\nimport React, { useRef, useEffect, useState } from 'react';\nimport { useAtom, useSetAtom, useAtomValue } from 'jotai';\nimport { commandLineStateAtom, provideInputAtom, skipInputAtom, goBackInputAtom, inputModeAtom, currentInputAtom, commandProgressAtom } from '../../commands/store';\nimport { zoomAtom, panAtom, viewportRectAtom } from '../../core/viewport-store';\nimport { CollectorInputPhase } from './CollectorInputPhase';\nimport { CollectorSelectInput, CollectorBooleanInput } from './CollectorSelectInput';\n\n// Re-export sub-components\nimport { jsx as _jsx, jsxs as _jsxs } from \"react/jsx-runtime\";\nexport { CollectorInputPhase } from './CollectorInputPhase';\nexport { CollectorSelectInput, CollectorBooleanInput } from './CollectorSelectInput';\n/**\n * CommandInputCollector\n *\n * Displays the current input prompt and collects user input.\n * Handles different input types: text, number, select, point, node, etc.\n *\n * @refactored 1.4.0 — Extracted CollectorInputPhase, CollectorSelectInput, CollectorBooleanInput\n */\nexport function CommandInputCollector() {\n const $ = _c(71);\n const [state] = useAtom(commandLineStateAtom);\n const currentInput = useAtomValue(currentInputAtom);\n const progress = useAtomValue(commandProgressAtom);\n const inputMode = useAtomValue(inputModeAtom);\n const provideInput = useSetAtom(provideInputAtom);\n const skipInput = useSetAtom(skipInputAtom);\n const goBack = useSetAtom(goBackInputAtom);\n const inputRef = useRef(null);\n const [textValue, setTextValue] = useState(\"\");\n const zoom = useAtomValue(zoomAtom);\n const pan = useAtomValue(panAtom);\n const viewportRect = useAtomValue(viewportRectAtom);\n let t0;\n let t1;\n if ($[0] !== currentInput) {\n t0 = () => {\n if (currentInput && (currentInput.type === \"text\" || currentInput.type === \"number\" || currentInput.type === \"point\")) {\n inputRef.current?.focus();\n }\n };\n t1 = [currentInput];\n $[0] = currentInput;\n $[1] = t0;\n $[2] = t1;\n } else {\n t0 = $[1];\n t1 = $[2];\n }\n useEffect(t0, t1);\n let t2;\n if ($[3] === Symbol.for(\"react.memo_cache_sentinel\")) {\n t2 = () => {\n setTextValue(\"\");\n };\n $[3] = t2;\n } else {\n t2 = $[3];\n }\n const t3 = currentInput?.name;\n let t4;\n if ($[4] !== t3) {\n t4 = [t3];\n $[4] = t3;\n $[5] = t4;\n } else {\n t4 = $[5];\n }\n useEffect(t2, t4);\n let t5;\n if ($[6] !== pan.x || $[7] !== pan.y || $[8] !== viewportRect || $[9] !== zoom) {\n t5 = () => {\n const screenCenterX = viewportRect ? viewportRect.width / 2 : window.innerWidth / 2;\n const screenCenterY = viewportRect ? viewportRect.height / 2 : window.innerHeight / 2;\n return {\n x: Math.round((screenCenterX - pan.x) / zoom),\n y: Math.round((screenCenterY - pan.y) / zoom)\n };\n };\n $[6] = pan.x;\n $[7] = pan.y;\n $[8] = viewportRect;\n $[9] = zoom;\n $[10] = t5;\n } else {\n t5 = $[10];\n }\n const getWorldCenter = t5;\n let t6;\n let t7;\n if ($[11] !== currentInput || $[12] !== getWorldCenter || $[13] !== provideInput) {\n t6 = () => {\n if (!currentInput) {\n return;\n }\n const handleGlobalKeyDown = e => {\n const target = e.target;\n const isInputField = target.tagName === \"INPUT\" || target.tagName === \"TEXTAREA\" || target.isContentEditable;\n if (e.key === \"Enter\" && !isInputField) {\n if (currentInput.type === \"point\") {\n e.preventDefault();\n provideInput(getWorldCenter());\n return;\n }\n if (currentInput.default !== undefined) {\n e.preventDefault();\n provideInput(currentInput.default);\n return;\n }\n }\n if (currentInput.type === \"select\" && currentInput.options) {\n const option = currentInput.options.find(opt => opt.shortcut.toLowerCase() === e.key.toLowerCase());\n if (option) {\n e.preventDefault();\n provideInput(option.value);\n }\n }\n if (currentInput.type === \"boolean\") {\n if (e.key.toLowerCase() === \"y\") {\n e.preventDefault();\n provideInput(true);\n }\n if (e.key.toLowerCase() === \"n\") {\n e.preventDefault();\n provideInput(false);\n }\n }\n };\n window.addEventListener(\"keydown\", handleGlobalKeyDown);\n return () => window.removeEventListener(\"keydown\", handleGlobalKeyDown);\n };\n t7 = [currentInput, provideInput, getWorldCenter];\n $[11] = currentInput;\n $[12] = getWorldCenter;\n $[13] = provideInput;\n $[14] = t6;\n $[15] = t7;\n } else {\n t6 = $[14];\n t7 = $[15];\n }\n useEffect(t6, t7);\n let t8;\n if ($[16] !== currentInput || $[17] !== provideInput || $[18] !== textValue) {\n t8 = e_0 => {\n e_0.preventDefault();\n if (!currentInput) {\n return;\n }\n if (textValue === \"\" && currentInput.default !== undefined) {\n provideInput(currentInput.default);\n setTextValue(\"\");\n return;\n }\n if (currentInput.type === \"number\") {\n const num = parseFloat(textValue);\n if (!isNaN(num)) {\n provideInput(num);\n }\n } else {\n provideInput(textValue);\n }\n setTextValue(\"\");\n };\n $[16] = currentInput;\n $[17] = provideInput;\n $[18] = textValue;\n $[19] = t8;\n } else {\n t8 = $[19];\n }\n const handleSubmit = t8;\n let t9;\n if ($[20] !== currentInput || $[21] !== goBack || $[22] !== progress || $[23] !== provideInput || $[24] !== skipInput || $[25] !== textValue) {\n t9 = e_1 => {\n if (e_1.key === \"Escape\") {\n e_1.preventDefault();\n if (currentInput?.required === false) {\n skipInput();\n } else {\n if (progress && progress.current > 1) {\n goBack();\n }\n }\n return;\n }\n if (e_1.key === \"Backspace\" && textValue === \"\" && progress && progress.current > 1) {\n e_1.preventDefault();\n goBack();\n return;\n }\n if (currentInput?.type === \"select\" && currentInput.options) {\n const option_0 = currentInput.options.find(opt_0 => opt_0.shortcut.toLowerCase() === e_1.key.toLowerCase());\n if (option_0) {\n e_1.preventDefault();\n provideInput(option_0.value);\n }\n }\n };\n $[20] = currentInput;\n $[21] = goBack;\n $[22] = progress;\n $[23] = provideInput;\n $[24] = skipInput;\n $[25] = textValue;\n $[26] = t9;\n } else {\n t9 = $[26];\n }\n const handleKeyDown = t9;\n if (state.phase !== \"collecting\" || !currentInput) {\n return null;\n }\n const isSelectMode = currentInput.type === \"select\";\n let t10;\n if ($[27] !== currentInput || $[28] !== inputMode.type || $[29] !== progress || $[30] !== state.command) {\n t10 = /*#__PURE__*/_jsx(CollectorInputPhase, {\n command: state.command,\n currentInput: currentInput,\n progress: progress,\n inputModeType: inputMode.type\n });\n $[27] = currentInput;\n $[28] = inputMode.type;\n $[29] = progress;\n $[30] = state.command;\n $[31] = t10;\n } else {\n t10 = $[31];\n }\n let t11;\n if ($[32] === Symbol.for(\"react.memo_cache_sentinel\")) {\n t11 = {\n color: \"var(--hud-text-secondary)\"\n };\n $[32] = t11;\n } else {\n t11 = $[32];\n }\n let t12;\n if ($[33] !== currentInput.prompt) {\n t12 = /*#__PURE__*/_jsxs(\"span\", {\n style: t11,\n children: [currentInput.prompt, \":\"]\n });\n $[33] = currentInput.prompt;\n $[34] = t12;\n } else {\n t12 = $[34];\n }\n let t13;\n if ($[35] !== currentInput.options || $[36] !== isSelectMode || $[37] !== provideInput) {\n t13 = isSelectMode && currentInput.options && /*#__PURE__*/_jsx(CollectorSelectInput, {\n options: currentInput.options,\n onSelect: v => provideInput(v)\n });\n $[35] = currentInput.options;\n $[36] = isSelectMode;\n $[37] = provideInput;\n $[38] = t13;\n } else {\n t13 = $[38];\n }\n let t14;\n if ($[39] !== currentInput.default || $[40] !== currentInput.type || $[41] !== handleKeyDown || $[42] !== handleSubmit || $[43] !== textValue) {\n t14 = (currentInput.type === \"text\" || currentInput.type === \"number\") && /*#__PURE__*/_jsx(\"form\", {\n onSubmit: handleSubmit,\n className: \"flex flex-1 items-center\",\n children: /*#__PURE__*/_jsx(\"input\", {\n ref: inputRef,\n type: currentInput.type === \"number\" ? \"number\" : \"text\",\n value: textValue,\n onChange: e_2 => setTextValue(e_2.target.value),\n onKeyDown: handleKeyDown,\n placeholder: currentInput.default !== undefined ? `Default: ${currentInput.default}` : undefined,\n className: \"flex-1 bg-transparent outline-none\",\n style: {\n color: \"var(--cmd-input-text)\"\n },\n autoComplete: \"off\",\n autoCorrect: \"off\",\n autoCapitalize: \"off\",\n spellCheck: \"false\"\n })\n });\n $[39] = currentInput.default;\n $[40] = currentInput.type;\n $[41] = handleKeyDown;\n $[42] = handleSubmit;\n $[43] = textValue;\n $[44] = t14;\n } else {\n t14 = $[44];\n }\n let t15;\n if ($[45] !== currentInput.type || $[46] !== getWorldCenter || $[47] !== handleKeyDown || $[48] !== provideInput || $[49] !== textValue) {\n t15 = currentInput.type === \"point\" && /*#__PURE__*/_jsx(\"form\", {\n onSubmit: e_3 => {\n e_3.preventDefault();\n if (textValue.trim() === \"\") {\n provideInput(getWorldCenter());\n setTextValue(\"\");\n return;\n }\n const match = textValue.match(/^\\s*(-?\\d+(?:\\.\\d+)?)\\s*,\\s*(-?\\d+(?:\\.\\d+)?)\\s*$/);\n if (match) {\n provideInput({\n x: parseFloat(match[1]),\n y: parseFloat(match[2])\n });\n setTextValue(\"\");\n }\n },\n className: \"flex flex-1 items-center\",\n children: /*#__PURE__*/_jsx(\"input\", {\n ref: inputRef,\n type: \"text\",\n value: textValue,\n onChange: e_4 => setTextValue(e_4.target.value),\n onKeyDown: handleKeyDown,\n placeholder: \"x, y or click on canvas (Enter for center)\",\n className: \"flex-1 bg-transparent outline-none\",\n style: {\n color: \"var(--cmd-input-text)\"\n },\n autoComplete: \"off\"\n })\n });\n $[45] = currentInput.type;\n $[46] = getWorldCenter;\n $[47] = handleKeyDown;\n $[48] = provideInput;\n $[49] = textValue;\n $[50] = t15;\n } else {\n t15 = $[50];\n }\n let t16;\n if ($[51] !== currentInput.type || $[52] !== provideInput) {\n t16 = currentInput.type === \"boolean\" && /*#__PURE__*/_jsx(CollectorBooleanInput, {\n onSelect: v_0 => provideInput(v_0)\n });\n $[51] = currentInput.type;\n $[52] = provideInput;\n $[53] = t16;\n } else {\n t16 = $[53];\n }\n let t17;\n if ($[54] !== currentInput.required || $[55] !== skipInput) {\n t17 = currentInput.required === false && /*#__PURE__*/_jsx(\"button\", {\n onClick: () => skipInput(),\n className: \"rounded px-2 py-0.5 text-xs transition-colors\",\n style: {\n color: \"var(--hud-text-secondary)\",\n opacity: 0.8\n },\n onMouseEnter: _temp,\n onMouseLeave: _temp2,\n children: \"Skip (Esc)\"\n });\n $[54] = currentInput.required;\n $[55] = skipInput;\n $[56] = t17;\n } else {\n t17 = $[56];\n }\n let t18;\n if ($[57] !== goBack || $[58] !== progress) {\n t18 = progress && progress.current > 1 && /*#__PURE__*/_jsx(\"button\", {\n onClick: () => goBack(),\n className: \"rounded px-2 py-0.5 text-xs transition-colors\",\n style: {\n color: \"var(--hud-text-secondary)\",\n opacity: 0.8\n },\n onMouseEnter: _temp3,\n onMouseLeave: _temp4,\n children: \"Back\"\n });\n $[57] = goBack;\n $[58] = progress;\n $[59] = t18;\n } else {\n t18 = $[59];\n }\n let t19;\n if ($[60] !== t12 || $[61] !== t13 || $[62] !== t14 || $[63] !== t15 || $[64] !== t16 || $[65] !== t17 || $[66] !== t18) {\n t19 = /*#__PURE__*/_jsxs(\"div\", {\n className: \"flex items-center gap-2\",\n children: [t12, t13, t14, t15, t16, t17, t18]\n });\n $[60] = t12;\n $[61] = t13;\n $[62] = t14;\n $[63] = t15;\n $[64] = t16;\n $[65] = t17;\n $[66] = t18;\n $[67] = t19;\n } else {\n t19 = $[67];\n }\n let t20;\n if ($[68] !== t10 || $[69] !== t19) {\n t20 = /*#__PURE__*/_jsxs(\"div\", {\n className: \"flex flex-1 flex-col gap-1\",\n children: [t10, t19]\n });\n $[68] = t10;\n $[69] = t19;\n $[70] = t20;\n } else {\n t20 = $[70];\n }\n return t20;\n}\nfunction _temp4(e_8) {\n e_8.currentTarget.style.backgroundColor = \"transparent\";\n e_8.currentTarget.style.color = \"var(--hud-text-secondary)\";\n}\nfunction _temp3(e_7) {\n e_7.currentTarget.style.backgroundColor = \"var(--list-item-bg-hover)\";\n e_7.currentTarget.style.color = \"var(--hud-text)\";\n}\nfunction _temp2(e_6) {\n e_6.currentTarget.style.backgroundColor = \"transparent\";\n e_6.currentTarget.style.color = \"var(--hud-text-secondary)\";\n}\nfunction _temp(e_5) {\n e_5.currentTarget.style.backgroundColor = \"var(--list-item-bg-hover)\";\n e_5.currentTarget.style.color = \"var(--hud-text)\";\n}\nexport default CommandInputCollector;","/**\n * CollectorInputPhase\n *\n * Renders the progress indicator and prompt label for the\n * current command input collection phase.\n *\n * Extracted from CommandInputCollector.tsx in v1.4.0.\n *\n * @since 1.4.0\n */\n\n'use client';\n\nimport { c as _c } from \"react/compiler-runtime\";\nimport React from 'react';\n\n// --- Types ---\nimport { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from \"react/jsx-runtime\";\n// --- Component ---\n\nexport function CollectorInputPhase(t0) {\n const $ = _c(15);\n const {\n command,\n currentInput,\n progress,\n inputModeType\n } = t0;\n const isPickMode = inputModeType === \"pickPoint\" || inputModeType === \"pickNode\" || inputModeType === \"pickNodes\";\n let t1;\n if ($[0] !== command || $[1] !== progress) {\n t1 = progress && /*#__PURE__*/_jsxs(\"div\", {\n className: \"flex items-center gap-2 text-xs\",\n style: {\n color: \"var(--hud-text-secondary)\"\n },\n children: [/*#__PURE__*/_jsx(\"span\", {\n className: \"font-medium\",\n style: {\n color: \"var(--hud-text)\"\n },\n children: command.name\n }), /*#__PURE__*/_jsx(\"span\", {\n children: \"\\u2022\"\n }), /*#__PURE__*/_jsxs(\"span\", {\n children: [\"Step \", progress.current, \"/\", progress.total]\n })]\n });\n $[0] = command;\n $[1] = progress;\n $[2] = t1;\n } else {\n t1 = $[2];\n }\n let t2;\n if ($[3] === Symbol.for(\"react.memo_cache_sentinel\")) {\n t2 = {\n color: \"var(--hud-text-secondary)\"\n };\n $[3] = t2;\n } else {\n t2 = $[3];\n }\n let t3;\n if ($[4] !== currentInput.prompt) {\n t3 = /*#__PURE__*/_jsxs(\"span\", {\n style: t2,\n children: [currentInput.prompt, \":\"]\n });\n $[4] = currentInput.prompt;\n $[5] = t3;\n } else {\n t3 = $[5];\n }\n let t4;\n if ($[6] !== inputModeType || $[7] !== isPickMode) {\n t4 = isPickMode && /*#__PURE__*/_jsxs(\"span\", {\n className: \"animate-pulse text-sm\",\n style: {\n color: \"var(--badge-info-text)\"\n },\n children: [inputModeType === \"pickPoint\" && \"Click on canvas or enter x,y\", inputModeType === \"pickNode\" && \"Click on a node\", inputModeType === \"pickNodes\" && \"Click nodes (Enter when done)\"]\n });\n $[6] = inputModeType;\n $[7] = isPickMode;\n $[8] = t4;\n } else {\n t4 = $[8];\n }\n let t5;\n if ($[9] !== t3 || $[10] !== t4) {\n t5 = /*#__PURE__*/_jsxs(\"div\", {\n className: \"flex items-center gap-2\",\n children: [t3, t4]\n });\n $[9] = t3;\n $[10] = t4;\n $[11] = t5;\n } else {\n t5 = $[11];\n }\n let t6;\n if ($[12] !== t1 || $[13] !== t5) {\n t6 = /*#__PURE__*/_jsxs(_Fragment, {\n children: [t1, t5]\n });\n $[12] = t1;\n $[13] = t5;\n $[14] = t6;\n } else {\n t6 = $[14];\n }\n return t6;\n}","/**\n * CollectorSelectInput\n *\n * Renders select option buttons with keyboard shortcuts for the\n * command input collection phase. Also handles boolean Y/N inputs.\n *\n * Extracted from CommandInputCollector.tsx in v1.4.0.\n *\n * @since 1.4.0\n */\n\n'use client';\n\nimport { c as _c } from \"react/compiler-runtime\";\nimport React from 'react';\n\n// --- Types ---\nimport { jsx as _jsx, jsxs as _jsxs } from \"react/jsx-runtime\";\n// --- Shared Button ---\n\nfunction ShortcutButton(t0) {\n const $ = _c(13);\n const {\n shortcut,\n label,\n description,\n onClick\n } = t0;\n let t1;\n if ($[0] === Symbol.for(\"react.memo_cache_sentinel\")) {\n t1 = {\n backgroundColor: \"var(--list-item-bg-hover)\",\n color: \"var(--hud-text)\"\n };\n $[0] = t1;\n } else {\n t1 = $[0];\n }\n let t2;\n if ($[1] === Symbol.for(\"react.memo_cache_sentinel\")) {\n t2 = {\n backgroundColor: \"var(--cmd-bg)\",\n color: \"var(--badge-info-text)\"\n };\n $[1] = t2;\n } else {\n t2 = $[1];\n }\n let t3;\n if ($[2] !== shortcut) {\n t3 = shortcut.toUpperCase();\n $[2] = shortcut;\n $[3] = t3;\n } else {\n t3 = $[3];\n }\n let t4;\n if ($[4] !== t3) {\n t4 = /*#__PURE__*/_jsx(\"kbd\", {\n className: \"rounded px-1 py-0.5 font-mono text-xs\",\n style: t2,\n children: t3\n });\n $[4] = t3;\n $[5] = t4;\n } else {\n t4 = $[5];\n }\n let t5;\n if ($[6] !== label) {\n t5 = /*#__PURE__*/_jsx(\"span\", {\n children: label\n });\n $[6] = label;\n $[7] = t5;\n } else {\n t5 = $[7];\n }\n let t6;\n if ($[8] !== description || $[9] !== onClick || $[10] !== t4 || $[11] !== t5) {\n t6 = /*#__PURE__*/_jsxs(\"button\", {\n onClick: onClick,\n className: \"flex items-center gap-1 rounded px-2 py-0.5 text-sm transition-colors\",\n style: t1,\n onMouseEnter: _temp,\n onMouseLeave: _temp2,\n title: description,\n children: [t4, t5]\n });\n $[8] = description;\n $[9] = onClick;\n $[10] = t4;\n $[11] = t5;\n $[12] = t6;\n } else {\n t6 = $[12];\n }\n return t6;\n}\n\n// --- Components ---\nfunction _temp2(e_0) {\n return e_0.currentTarget.style.backgroundColor = \"var(--list-item-bg-hover)\";\n}\nfunction _temp(e) {\n return e.currentTarget.style.backgroundColor = \"var(--list-item-border)\";\n}\nexport function CollectorSelectInput(t0) {\n const $ = _c(7);\n const {\n options,\n onSelect\n } = t0;\n let t1;\n if ($[0] !== onSelect || $[1] !== options) {\n let t2;\n if ($[3] !== onSelect) {\n t2 = option => /*#__PURE__*/_jsx(ShortcutButton, {\n shortcut: option.shortcut,\n label: option.label,\n description: option.description,\n onClick: () => onSelect(option.value)\n }, option.value);\n $[3] = onSelect;\n $[4] = t2;\n } else {\n t2 = $[4];\n }\n t1 = options.map(t2);\n $[0] = onSelect;\n $[1] = options;\n $[2] = t1;\n } else {\n t1 = $[2];\n }\n let t2;\n if ($[5] !== t1) {\n t2 = /*#__PURE__*/_jsx(\"div\", {\n className: \"flex items-center gap-2\",\n children: t1\n });\n $[5] = t1;\n $[6] = t2;\n } else {\n t2 = $[6];\n }\n return t2;\n}\nexport function CollectorBooleanInput(t0) {\n const $ = _c(7);\n const {\n onSelect\n } = t0;\n let t1;\n if ($[0] !== onSelect) {\n t1 = /*#__PURE__*/_jsx(ShortcutButton, {\n shortcut: \"Y\",\n label: \"Yes\",\n onClick: () => onSelect(true)\n });\n $[0] = onSelect;\n $[1] = t1;\n } else {\n t1 = $[1];\n }\n let t2;\n if ($[2] !== onSelect) {\n t2 = /*#__PURE__*/_jsx(ShortcutButton, {\n shortcut: \"N\",\n label: \"No\",\n onClick: () => onSelect(false)\n });\n $[2] = onSelect;\n $[3] = t2;\n } else {\n t2 = $[3];\n }\n let t3;\n if ($[4] !== t1 || $[5] !== t2) {\n t3 = /*#__PURE__*/_jsxs(\"div\", {\n className: \"flex items-center gap-2\",\n children: [t1, t2]\n });\n $[4] = t1;\n $[5] = t2;\n $[6] = t3;\n } else {\n t3 = $[6];\n }\n return t3;\n}","'use client';\n\nimport { c as _c } from \"react/compiler-runtime\";\nimport { useAtomValue } from 'jotai';\nimport { inputModeAtom, commandFeedbackAtom, currentInputAtom } from '../commands/store';\nimport { zoomAtom, panAtom } from '../core/viewport-store';\n\n/**\n * CommandFeedbackOverlay\n *\n * Renders visual feedback on the canvas during command input collection:\n * - Crosshair at cursor position when picking points\n * - Highlight ring around hovered nodes when picking nodes\n * - Preview edge when connecting nodes\n * - Ghost node when moving\n * - Cursor-attached prompt text\n */\nimport { jsx as _jsx, jsxs as _jsxs } from \"react/jsx-runtime\";\nexport function CommandFeedbackOverlay() {\n const $ = _c(27);\n const inputMode = useAtomValue(inputModeAtom);\n const feedback = useAtomValue(commandFeedbackAtom);\n const currentInput = useAtomValue(currentInputAtom);\n const zoom = useAtomValue(zoomAtom);\n const pan = useAtomValue(panAtom);\n if (inputMode.type === \"normal\") {\n return null;\n }\n let t0;\n if ($[0] === Symbol.for(\"react.memo_cache_sentinel\")) {\n t0 = {};\n $[0] = t0;\n } else {\n t0 = $[0];\n }\n let t1;\n if ($[1] !== feedback || $[2] !== inputMode.type || $[3] !== pan || $[4] !== zoom) {\n t1 = (inputMode.type === \"pickPoint\" || feedback?.crosshair) && feedback?.cursorWorldPos && /*#__PURE__*/_jsx(Crosshair, {\n position: feedback.cursorWorldPos,\n zoom: zoom,\n pan: pan\n });\n $[1] = feedback;\n $[2] = inputMode.type;\n $[3] = pan;\n $[4] = zoom;\n $[5] = t1;\n } else {\n t1 = $[5];\n }\n let t2;\n if ($[6] !== feedback || $[7] !== pan || $[8] !== zoom) {\n t2 = feedback?.hoveredNodeId && /*#__PURE__*/_jsx(NodeHighlight, {\n nodeId: feedback.hoveredNodeId,\n zoom: zoom,\n pan: pan\n });\n $[6] = feedback;\n $[7] = pan;\n $[8] = zoom;\n $[9] = t2;\n } else {\n t2 = $[9];\n }\n let t3;\n if ($[10] !== feedback || $[11] !== pan || $[12] !== zoom) {\n t3 = feedback?.previewEdge && /*#__PURE__*/_jsx(PreviewEdge, {\n edge: feedback.previewEdge,\n zoom: zoom,\n pan: pan\n });\n $[10] = feedback;\n $[11] = pan;\n $[12] = zoom;\n $[13] = t3;\n } else {\n t3 = $[13];\n }\n let t4;\n if ($[14] !== feedback || $[15] !== pan || $[16] !== zoom) {\n t4 = feedback?.ghostNode && /*#__PURE__*/_jsx(GhostNode, {\n ghost: feedback.ghostNode,\n zoom: zoom,\n pan: pan\n });\n $[14] = feedback;\n $[15] = pan;\n $[16] = zoom;\n $[17] = t4;\n } else {\n t4 = $[17];\n }\n const t5 = currentInput?.prompt;\n let t6;\n if ($[18] !== inputMode || $[19] !== t5) {\n t6 = /*#__PURE__*/_jsx(ModeIndicator, {\n inputMode: inputMode,\n prompt: t5\n });\n $[18] = inputMode;\n $[19] = t5;\n $[20] = t6;\n } else {\n t6 = $[20];\n }\n let t7;\n if ($[21] !== t1 || $[22] !== t2 || $[23] !== t3 || $[24] !== t4 || $[25] !== t6) {\n t7 = /*#__PURE__*/_jsxs(\"div\", {\n className: \"pointer-events-none fixed inset-0 z-50\",\n style: t0,\n children: [t1, t2, t3, t4, t6]\n });\n $[21] = t1;\n $[22] = t2;\n $[23] = t3;\n $[24] = t4;\n $[25] = t6;\n $[26] = t7;\n } else {\n t7 = $[26];\n }\n return t7;\n}\n\n/**\n * Crosshair component for point picking\n */\nfunction Crosshair(t0) {\n const $ = _c(10);\n const {\n position,\n zoom,\n pan\n } = t0;\n const screenX = position.x * zoom + pan.x;\n const screenY = position.y * zoom + pan.y;\n const t1 = screenX - 20;\n const t2 = screenY - 20;\n let t3;\n if ($[0] !== t1 || $[1] !== t2) {\n t3 = {\n left: t1,\n top: t2,\n width: 40,\n height: 40\n };\n $[0] = t1;\n $[1] = t2;\n $[2] = t3;\n } else {\n t3 = $[2];\n }\n let t4;\n let t5;\n let t6;\n let t7;\n let t8;\n if ($[3] === Symbol.for(\"react.memo_cache_sentinel\")) {\n t4 = /*#__PURE__*/_jsx(\"line\", {\n x1: \"0\",\n y1: \"20\",\n x2: \"15\",\n y2: \"20\",\n stroke: \"var(--list-item-border-active)\",\n strokeWidth: \"2\"\n });\n t5 = /*#__PURE__*/_jsx(\"line\", {\n x1: \"25\",\n y1: \"20\",\n x2: \"40\",\n y2: \"20\",\n stroke: \"var(--list-item-border-active)\",\n strokeWidth: \"2\"\n });\n t6 = /*#__PURE__*/_jsx(\"line\", {\n x1: \"20\",\n y1: \"0\",\n x2: \"20\",\n y2: \"15\",\n stroke: \"var(--list-item-border-active)\",\n strokeWidth: \"2\"\n });\n t7 = /*#__PURE__*/_jsx(\"line\", {\n x1: \"20\",\n y1: \"25\",\n x2: \"20\",\n y2: \"40\",\n stroke: \"var(--list-item-border-active)\",\n strokeWidth: \"2\"\n });\n t8 = /*#__PURE__*/_jsx(\"circle\", {\n cx: \"20\",\n cy: \"20\",\n r: \"3\",\n fill: \"var(--list-item-border-active)\"\n });\n $[3] = t4;\n $[4] = t5;\n $[5] = t6;\n $[6] = t7;\n $[7] = t8;\n } else {\n t4 = $[3];\n t5 = $[4];\n t6 = $[5];\n t7 = $[6];\n t8 = $[7];\n }\n let t9;\n if ($[8] !== t3) {\n t9 = /*#__PURE__*/_jsxs(\"svg\", {\n className: \"pointer-events-none absolute\",\n style: t3,\n children: [t4, t5, t6, t7, t8]\n });\n $[8] = t3;\n $[9] = t9;\n } else {\n t9 = $[9];\n }\n return t9;\n}\n\n/**\n * Node highlight ring for node picking\n */\nfunction NodeHighlight({\n nodeId,\n zoom,\n pan\n}) {\n // This would need to look up the node position from the graph\n // For now, we'll render nothing - the actual highlighting is done\n // via CSS classes on the node element itself\n return null;\n}\n\n/**\n * Preview edge during edge creation\n */\nfunction PreviewEdge(t0) {\n const $ = _c(15);\n const {\n edge,\n zoom,\n pan\n } = t0;\n const t1 = edge.from.x * zoom + pan.x;\n const t2 = edge.from.y * zoom + pan.y;\n let t3;\n if ($[0] !== t1 || $[1] !== t2) {\n t3 = {\n x: t1,\n y: t2\n };\n $[0] = t1;\n $[1] = t2;\n $[2] = t3;\n } else {\n t3 = $[2];\n }\n const fromScreen = t3;\n const t4 = edge.to.x * zoom + pan.x;\n const t5 = edge.to.y * zoom + pan.y;\n let t6;\n if ($[3] !== t4 || $[4] !== t5) {\n t6 = {\n x: t4,\n y: t5\n };\n $[3] = t4;\n $[4] = t5;\n $[5] = t6;\n } else {\n t6 = $[5];\n }\n const toScreen = t6;\n let t7;\n if ($[6] === Symbol.for(\"react.memo_cache_sentinel\")) {\n t7 = {\n width: \"100%\",\n height: \"100%\"\n };\n $[6] = t7;\n } else {\n t7 = $[6];\n }\n let t8;\n if ($[7] !== fromScreen.x || $[8] !== fromScreen.y || $[9] !== toScreen.x || $[10] !== toScreen.y) {\n t8 = /*#__PURE__*/_jsx(\"line\", {\n x1: fromScreen.x,\n y1: fromScreen.y,\n x2: toScreen.x,\n y2: toScreen.y,\n stroke: \"var(--list-item-border-active)\",\n strokeWidth: \"2\",\n strokeDasharray: \"5,5\",\n markerEnd: \"url(#arrowhead)\"\n });\n $[7] = fromScreen.x;\n $[8] = fromScreen.y;\n $[9] = toScreen.x;\n $[10] = toScreen.y;\n $[11] = t8;\n } else {\n t8 = $[11];\n }\n let t9;\n if ($[12] === Symbol.for(\"react.memo_cache_sentinel\")) {\n t9 = /*#__PURE__*/_jsx(\"defs\", {\n children: /*#__PURE__*/_jsx(\"marker\", {\n id: \"arrowhead\",\n markerWidth: \"10\",\n markerHeight: \"7\",\n refX: \"9\",\n refY: \"3.5\",\n orient: \"auto\",\n children: /*#__PURE__*/_jsx(\"polygon\", {\n points: \"0 0, 10 3.5, 0 7\",\n fill: \"var(--list-item-border-active)\"\n })\n })\n });\n $[12] = t9;\n } else {\n t9 = $[12];\n }\n let t10;\n if ($[13] !== t8) {\n t10 = /*#__PURE__*/_jsxs(\"svg\", {\n className: \"pointer-events-none absolute inset-0\",\n style: t7,\n children: [t8, t9]\n });\n $[13] = t8;\n $[14] = t10;\n } else {\n t10 = $[14];\n }\n return t10;\n}\n\n/**\n * Ghost node for move operations\n */\nfunction GhostNode(t0) {\n const $ = _c(7);\n const {\n ghost,\n zoom,\n pan\n } = t0;\n const t1 = ghost.position.x * zoom + pan.x;\n const t2 = ghost.position.y * zoom + pan.y;\n let t3;\n if ($[0] !== t1 || $[1] !== t2) {\n t3 = {\n x: t1,\n y: t2\n };\n $[0] = t1;\n $[1] = t2;\n $[2] = t3;\n } else {\n t3 = $[2];\n }\n const screenPos = t3;\n const t4 = screenPos.x - 50;\n const t5 = screenPos.y - 50;\n let t6;\n if ($[3] !== ghost.opacity || $[4] !== t4 || $[5] !== t5) {\n t6 = /*#__PURE__*/_jsx(\"div\", {\n className: \"absolute rounded-lg border-2 border-dashed\",\n style: {\n left: t4,\n top: t5,\n width: 100,\n height: 100,\n opacity: ghost.opacity,\n borderColor: \"var(--badge-info-border)\",\n backgroundColor: \"var(--badge-info-bg)\"\n }\n });\n $[3] = ghost.opacity;\n $[4] = t4;\n $[5] = t5;\n $[6] = t6;\n } else {\n t6 = $[6];\n }\n return t6;\n}\n\n/**\n * Mode indicator at bottom of screen\n */\nfunction ModeIndicator(t0) {\n const $ = _c(7);\n const {\n inputMode,\n prompt\n } = t0;\n const displayPrompt = prompt || inputMode.prompt || \"Waiting for input...\";\n let modeLabel;\n bb0: switch (inputMode.type) {\n case \"pickPoint\":\n {\n modeLabel = \"Click to pick point\";\n break bb0;\n }\n case \"pickNode\":\n {\n modeLabel = \"Click a node to select\";\n break bb0;\n }\n case \"pickNodes\":\n {\n modeLabel = \"Click nodes to select (Shift+click for multiple)\";\n break bb0;\n }\n case \"select\":\n {\n modeLabel = \"Choose an option\";\n break bb0;\n }\n case \"text\":\n {\n modeLabel = \"Type your input\";\n break bb0;\n }\n default:\n {\n modeLabel = inputMode.type;\n }\n }\n let t1;\n let t2;\n if ($[0] === Symbol.for(\"react.memo_cache_sentinel\")) {\n t1 = {\n backgroundColor: \"var(--modal-bg)\",\n borderColor: \"var(--modal-border)\",\n color: \"var(--modal-text-primary)\",\n opacity: 0.9\n };\n t2 = {\n color: \"var(--badge-info-text)\"\n };\n $[0] = t1;\n $[1] = t2;\n } else {\n t1 = $[0];\n t2 = $[1];\n }\n let t3;\n if ($[2] !== modeLabel) {\n t3 = /*#__PURE__*/_jsxs(\"span\", {\n style: t2,\n children: [modeLabel, \":\"]\n });\n $[2] = modeLabel;\n $[3] = t3;\n } else {\n t3 = $[3];\n }\n let t4;\n if ($[4] !== displayPrompt || $[5] !== t3) {\n t4 = /*#__PURE__*/_jsxs(\"div\", {\n className: \"fixed bottom-16 left-1/2 -translate-x-1/2 rounded-lg border px-4 py-2 font-mono text-sm shadow-lg\",\n style: t1,\n children: [t3, \" \", displayPrompt]\n });\n $[4] = displayPrompt;\n $[5] = t3;\n $[6] = t4;\n } else {\n t4 = $[6];\n }\n return t4;\n}\nexport default CommandFeedbackOverlay;","/**\n * NodePorts Component\n *\n * Renders expandable port bars on nodes for connection points.\n * Orchestrates port grouping by side and delegates rendering\n * to PortBar (bar layout) and PortHandle (individual ports).\n *\n * @since 1.0.0\n * @refactored 1.4.0 — Extracted PortBar and PortHandle into separate files\n */\n\n'use client';\n\nimport { c as _c } from \"react/compiler-runtime\";\nimport React from 'react';\nimport { calculatePortPosition, getNodePorts } from '../core/port-types';\nimport { PortBar } from './PortBar';\n\n// Re-export sub-components for barrel consumers\nimport { jsx as _jsx, Fragment as _Fragment } from \"react/jsx-runtime\";\nexport { PortBar } from './PortBar';\nexport { PortHandle } from './PortHandle';\n\n// --- Types ---\n\n// --- Component ---\n\n/**\n * Renders all port bars for a node.\n */\nexport function NodePorts(t0) {\n const $ = _c(25);\n const {\n nodeId,\n nodeWidth,\n nodeHeight,\n ports: portsProp,\n sides,\n onStartConnection,\n onPortHover,\n isDragTarget: t1,\n dragSourcePort\n } = t0;\n const isDragTarget = t1 === undefined ? false : t1;\n let portsBySide;\n if ($[0] !== portsProp) {\n const ports = getNodePorts(portsProp);\n portsBySide = {\n top: [],\n right: [],\n bottom: [],\n left: []\n };\n for (const port of ports) {\n portsBySide[port.side].push(port);\n }\n $[0] = portsProp;\n $[1] = portsBySide;\n } else {\n portsBySide = $[1];\n }\n let t2;\n if ($[2] !== sides) {\n t2 = sides || [\"left\", \"right\", \"top\", \"bottom\"];\n $[2] = sides;\n $[3] = t2;\n } else {\n t2 = $[3];\n }\n const sidesToRender = t2;\n let t3;\n if ($[4] !== dragSourcePort || $[5] !== isDragTarget || $[6] !== nodeHeight || $[7] !== nodeId || $[8] !== nodeWidth || $[9] !== onPortHover || $[10] !== onStartConnection || $[11] !== portsBySide || $[12] !== sidesToRender) {\n let t4;\n if ($[14] !== dragSourcePort || $[15] !== isDragTarget || $[16] !== nodeHeight || $[17] !== nodeId || $[18] !== nodeWidth || $[19] !== onPortHover || $[20] !== onStartConnection || $[21] !== portsBySide) {\n t4 = side => {\n const sidePorts = portsBySide[side];\n if (sidePorts.length === 0) {\n return null;\n }\n return /*#__PURE__*/_jsx(PortBar, {\n nodeId: nodeId,\n side: side,\n ports: sidePorts,\n nodeWidth: nodeWidth,\n nodeHeight: nodeHeight,\n onPortClick: (portId, port_0) => onStartConnection?.(nodeId, portId, port_0),\n onPortHover: (portId_0, port_1) => onPortHover?.(nodeId, portId_0, port_1),\n isDragTarget: isDragTarget,\n dragSourcePort: dragSourcePort\n }, side);\n };\n $[14] = dragSourcePort;\n $[15] = isDragTarget;\n $[16] = nodeHeight;\n $[17] = nodeId;\n $[18] = nodeWidth;\n $[19] = onPortHover;\n $[20] = onStartConnection;\n $[21] = portsBySide;\n $[22] = t4;\n } else {\n t4 = $[22];\n }\n t3 = sidesToRender.map(t4);\n $[4] = dragSourcePort;\n $[5] = isDragTarget;\n $[6] = nodeHeight;\n $[7] = nodeId;\n $[8] = nodeWidth;\n $[9] = onPortHover;\n $[10] = onStartConnection;\n $[11] = portsBySide;\n $[12] = sidesToRender;\n $[13] = t3;\n } else {\n t3 = $[13];\n }\n let t4;\n if ($[23] !== t3) {\n t4 = /*#__PURE__*/_jsx(_Fragment, {\n children: t3\n });\n $[23] = t3;\n $[24] = t4;\n } else {\n t4 = $[24];\n }\n return t4;\n}\n\n// --- Port Position Helpers ---\n\n/**\n * Get the world-space position of a specific port on a node.\n */\nexport function getPortWorldPosition(nodeX, nodeY, nodeWidth, nodeHeight, port) {\n return calculatePortPosition(nodeX, nodeY, nodeWidth, nodeHeight, port);\n}","/**\n * PortBar Component\n *\n * A single expandable port bar on one side of a node.\n * Contains the expand/collapse state, positioning logic,\n * compatibility checking, and edge creation initiation.\n *\n * Extracted from NodePorts.tsx in v1.4.0.\n *\n * @since 1.4.0\n */\n\n'use client';\n\nimport { c as _c } from \"react/compiler-runtime\";\nimport React, { useState } from 'react';\nimport { useSetAtom } from 'jotai';\nimport { calculatePortPosition, arePortsCompatible } from '../core/port-types';\nimport { edgeCreationAtom } from '../core/graph-store';\nimport { useCanvasStyle } from '../providers/CanvasStyleProvider';\nimport { PortHandle, PORT_ROW_HEIGHT } from './PortHandle';\n\n// --- Types ---\nimport { jsx as _jsx } from \"react/jsx-runtime\";\n// --- Constants ---\n\nconst COLLAPSED_WIDTH = 8;\nconst EXPANDED_WIDTH = 80;\nconst TRANSITION_DURATION = '150ms';\n\n// --- Component ---\n\nexport function PortBar(t0) {\n const $ = _c(66);\n const {\n nodeId,\n side,\n ports,\n nodeWidth,\n nodeHeight,\n forceExpanded: t1,\n onPortClick,\n onPortHover,\n isDragTarget: t2,\n dragSourcePort\n } = t0;\n const forceExpanded = t1 === undefined ? false : t1;\n const isDragTarget = t2 === undefined ? false : t2;\n const [isExpanded, setIsExpanded] = useState(false);\n const [hoveredPortId, setHoveredPortId] = useState(null);\n const canvasStyles = useCanvasStyle();\n const setEdgeCreation = useSetAtom(edgeCreationAtom);\n const showExpanded = isExpanded || forceExpanded || isDragTarget;\n let t3;\n bb0: {\n const t4 = side === \"top\" || side === \"bottom\" ? \"row\" : \"column\";\n let t5;\n if ($[0] !== canvasStyles.nodes.defaultBackground || $[1] !== t4) {\n t5 = {\n position: \"absolute\",\n display: \"flex\",\n flexDirection: t4,\n alignItems: \"stretch\",\n transition: `all ${TRANSITION_DURATION} ease-out`,\n backgroundColor: canvasStyles.nodes.defaultBackground,\n borderRadius: \"4px\",\n overflow: \"hidden\",\n zIndex: 10\n };\n $[0] = canvasStyles.nodes.defaultBackground;\n $[1] = t4;\n $[2] = t5;\n } else {\n t5 = $[2];\n }\n const base = t5;\n const barSize = showExpanded ? EXPANDED_WIDTH : COLLAPSED_WIDTH;\n const barLength = side === \"left\" || side === \"right\" ? Math.max(ports.length * PORT_ROW_HEIGHT, nodeHeight * 0.6) : Math.max(ports.length * PORT_ROW_HEIGHT, nodeWidth * 0.6);\n switch (side) {\n case \"left\":\n {\n const t6 = -barSize;\n const t7 = `${barSize}px`;\n const t8 = `${barLength}px`;\n const t9 = `1px solid ${canvasStyles.nodes.defaultBorderColor}`;\n let t10;\n if ($[3] !== base || $[4] !== t6 || $[5] !== t7 || $[6] !== t8 || $[7] !== t9) {\n t10 = {\n ...base,\n left: t6,\n top: \"50%\",\n transform: \"translateY(-50%)\",\n width: t7,\n height: t8,\n borderRight: t9,\n borderTopRightRadius: 0,\n borderBottomRightRadius: 0\n };\n $[3] = base;\n $[4] = t6;\n $[5] = t7;\n $[6] = t8;\n $[7] = t9;\n $[8] = t10;\n } else {\n t10 = $[8];\n }\n t3 = t10;\n break bb0;\n }\n case \"right\":\n {\n const t6 = -barSize;\n const t7 = `${barSize}px`;\n const t8 = `${barLength}px`;\n const t9 = `1px solid ${canvasStyles.nodes.defaultBorderColor}`;\n let t10;\n if ($[9] !== base || $[10] !== t6 || $[11] !== t7 || $[12] !== t8 || $[13] !== t9) {\n t10 = {\n ...base,\n right: t6,\n top: \"50%\",\n transform: \"translateY(-50%)\",\n width: t7,\n height: t8,\n borderLeft: t9,\n borderTopLeftRadius: 0,\n borderBottomLeftRadius: 0\n };\n $[9] = base;\n $[10] = t6;\n $[11] = t7;\n $[12] = t8;\n $[13] = t9;\n $[14] = t10;\n } else {\n t10 = $[14];\n }\n t3 = t10;\n break bb0;\n }\n case \"top\":\n {\n const t6 = -barSize;\n const t7 = `${barSize}px`;\n const t8 = `${barLength}px`;\n const t9 = `1px solid ${canvasStyles.nodes.defaultBorderColor}`;\n let t10;\n if ($[15] !== base || $[16] !== t6 || $[17] !== t7 || $[18] !== t8 || $[19] !== t9) {\n t10 = {\n ...base,\n top: t6,\n left: \"50%\",\n transform: \"translateX(-50%)\",\n height: t7,\n width: t8,\n borderBottom: t9,\n borderBottomLeftRadius: 0,\n borderBottomRightRadius: 0\n };\n $[15] = base;\n $[16] = t6;\n $[17] = t7;\n $[18] = t8;\n $[19] = t9;\n $[20] = t10;\n } else {\n t10 = $[20];\n }\n t3 = t10;\n break bb0;\n }\n case \"bottom\":\n {\n const t6 = -barSize;\n const t7 = `${barSize}px`;\n const t8 = `${barLength}px`;\n const t9 = `1px solid ${canvasStyles.nodes.defaultBorderColor}`;\n let t10;\n if ($[21] !== base || $[22] !== t6 || $[23] !== t7 || $[24] !== t8 || $[25] !== t9) {\n t10 = {\n ...base,\n bottom: t6,\n left: \"50%\",\n transform: \"translateX(-50%)\",\n height: t7,\n width: t8,\n borderTop: t9,\n borderTopLeftRadius: 0,\n borderTopRightRadius: 0\n };\n $[21] = base;\n $[22] = t6;\n $[23] = t7;\n $[24] = t8;\n $[25] = t9;\n $[26] = t10;\n } else {\n t10 = $[26];\n }\n t3 = t10;\n break bb0;\n }\n }\n t3 = undefined;\n }\n const barStyle = t3;\n let t4;\n if ($[27] !== dragSourcePort || $[28] !== isDragTarget) {\n t4 = port => {\n if (!isDragTarget || !dragSourcePort) {\n return true;\n }\n return arePortsCompatible(dragSourcePort, port);\n };\n $[27] = dragSourcePort;\n $[28] = isDragTarget;\n $[29] = t4;\n } else {\n t4 = $[29];\n }\n const isPortCompatible = t4;\n let t5;\n if ($[30] !== isDragTarget) {\n t5 = () => {\n if (!isDragTarget) {\n setIsExpanded(true);\n }\n };\n $[30] = isDragTarget;\n $[31] = t5;\n } else {\n t5 = $[31];\n }\n const handleMouseEnter = t5;\n let t6;\n if ($[32] !== forceExpanded || $[33] !== onPortHover) {\n t6 = () => {\n if (!forceExpanded) {\n setIsExpanded(false);\n setHoveredPortId(null);\n onPortHover?.(null, null);\n }\n };\n $[32] = forceExpanded;\n $[33] = onPortHover;\n $[34] = t6;\n } else {\n t6 = $[34];\n }\n const handleMouseLeave = t6;\n let t7;\n if ($[35] !== nodeHeight || $[36] !== nodeId || $[37] !== nodeWidth || $[38] !== setEdgeCreation) {\n t7 = (portId, port_0, e) => {\n if (e.button !== 0) {\n return;\n }\n e.stopPropagation();\n e.preventDefault();\n const portPos = calculatePortPosition(0, 0, nodeWidth, nodeHeight, port_0);\n setEdgeCreation({\n isCreating: true,\n sourceNodeId: nodeId,\n sourceNodePosition: {\n x: portPos.x,\n y: portPos.y\n },\n targetPosition: {\n x: portPos.x,\n y: portPos.y\n },\n hoveredTargetNodeId: null,\n sourceHandle: `widget:${nodeId}:${port_0.type === \"input\" ? \"input\" : \"output\"}:${port_0.id}`,\n targetHandle: null,\n sourcePort: portId,\n targetPort: null,\n snappedTargetPosition: null\n });\n };\n $[35] = nodeHeight;\n $[36] = nodeId;\n $[37] = nodeWidth;\n $[38] = setEdgeCreation;\n $[39] = t7;\n } else {\n t7 = $[39];\n }\n const handlePortPointerDown = t7;\n let t8;\n if ($[40] !== handlePortPointerDown || $[41] !== hoveredPortId || $[42] !== isDragTarget || $[43] !== isPortCompatible || $[44] !== onPortClick || $[45] !== onPortHover || $[46] !== ports || $[47] !== showExpanded || $[48] !== side) {\n let t9;\n if ($[50] !== handlePortPointerDown || $[51] !== hoveredPortId || $[52] !== isDragTarget || $[53] !== isPortCompatible || $[54] !== onPortClick || $[55] !== onPortHover || $[56] !== showExpanded || $[57] !== side) {\n t9 = port_1 => /*#__PURE__*/_jsx(PortHandle, {\n port: port_1,\n side: side,\n isHovered: hoveredPortId === port_1.id,\n showExpanded: showExpanded,\n isCompatible: isPortCompatible(port_1),\n isDragTarget: isDragTarget,\n onClick: (id, p) => onPortClick?.(id, p),\n onPointerDown: handlePortPointerDown,\n onMouseEnter: (id_0, p_0) => {\n setHoveredPortId(id_0);\n onPortHover?.(id_0, p_0);\n },\n onMouseLeave: () => {\n setHoveredPortId(null);\n onPortHover?.(null, null);\n }\n }, port_1.id);\n $[50] = handlePortPointerDown;\n $[51] = hoveredPortId;\n $[52] = isDragTarget;\n $[53] = isPortCompatible;\n $[54] = onPortClick;\n $[55] = onPortHover;\n $[56] = showExpanded;\n $[57] = side;\n $[58] = t9;\n } else {\n t9 = $[58];\n }\n t8 = ports.map(t9);\n $[40] = handlePortPointerDown;\n $[41] = hoveredPortId;\n $[42] = isDragTarget;\n $[43] = isPortCompatible;\n $[44] = onPortClick;\n $[45] = onPortHover;\n $[46] = ports;\n $[47] = showExpanded;\n $[48] = side;\n $[49] = t8;\n } else {\n t8 = $[49];\n }\n let t9;\n if ($[59] !== barStyle || $[60] !== handleMouseEnter || $[61] !== handleMouseLeave || $[62] !== nodeId || $[63] !== side || $[64] !== t8) {\n t9 = /*#__PURE__*/_jsx(\"div\", {\n style: barStyle,\n onMouseEnter: handleMouseEnter,\n onMouseLeave: handleMouseLeave,\n \"data-port-bar\": side,\n \"data-node-id\": nodeId,\n children: t8\n });\n $[59] = barStyle;\n $[60] = handleMouseEnter;\n $[61] = handleMouseLeave;\n $[62] = nodeId;\n $[63] = side;\n $[64] = t8;\n $[65] = t9;\n } else {\n t9 = $[65];\n }\n return t9;\n}","/**\n * PortHandle Component\n *\n * Individual port handle with drag initiation, hover feedback,\n * and compatibility highlighting.\n *\n * Extracted from NodePorts.tsx in v1.4.0.\n *\n * @since 1.4.0\n */\n\n'use client';\n\nimport { c as _c } from \"react/compiler-runtime\";\nimport React from 'react';\nimport { useCanvasStyle } from '../providers/CanvasStyleProvider';\n\n// --- Constants ---\nimport { jsx as _jsx, jsxs as _jsxs } from \"react/jsx-runtime\";\nexport const PORT_ROW_HEIGHT = 24;\nconst TRANSITION_DURATION = '150ms';\n\n// --- Types ---\n\n// --- Component ---\n\nexport function PortHandle(t0) {\n const $ = _c(38);\n const {\n port,\n side,\n isHovered,\n showExpanded,\n isCompatible,\n isDragTarget,\n onClick,\n onPointerDown,\n onMouseEnter,\n onMouseLeave\n } = t0;\n const canvasStyles = useCanvasStyle();\n const t1 = isDragTarget && isCompatible ? port.id : undefined;\n let t2;\n if ($[0] !== onClick || $[1] !== port) {\n t2 = () => onClick(port.id, port);\n $[0] = onClick;\n $[1] = port;\n $[2] = t2;\n } else {\n t2 = $[2];\n }\n let t3;\n if ($[3] !== onPointerDown || $[4] !== port) {\n t3 = e => onPointerDown(port.id, port, e);\n $[3] = onPointerDown;\n $[4] = port;\n $[5] = t3;\n } else {\n t3 = $[5];\n }\n let t4;\n if ($[6] !== onMouseEnter || $[7] !== port) {\n t4 = () => onMouseEnter(port.id, port);\n $[6] = onMouseEnter;\n $[7] = port;\n $[8] = t4;\n } else {\n t4 = $[8];\n }\n const t5 = side === \"top\" || side === \"bottom\" ? `${PORT_ROW_HEIGHT}px` : undefined;\n const t6 = isCompatible ? \"pointer\" : \"not-allowed\";\n const t7 = isHovered && isCompatible ? canvasStyles.nodes.selectedBorderColor : isDragTarget && !isCompatible ? \"rgba(255, 0, 0, 0.1)\" : \"transparent\";\n const t8 = isDragTarget && !isCompatible ? 0.5 : 1;\n let t9;\n if ($[9] !== t5 || $[10] !== t6 || $[11] !== t7 || $[12] !== t8) {\n t9 = {\n flex: 1,\n minHeight: `${PORT_ROW_HEIGHT}px`,\n minWidth: t5,\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"center\",\n cursor: t6,\n backgroundColor: t7,\n transition: `background-color ${TRANSITION_DURATION}`,\n opacity: t8\n };\n $[9] = t5;\n $[10] = t6;\n $[11] = t7;\n $[12] = t8;\n $[13] = t9;\n } else {\n t9 = $[13];\n }\n const t10 = port.color || canvasStyles.nodes.selectedBorderColor;\n const t11 = isHovered ? \"scale(1.5)\" : isDragTarget && isCompatible ? \"scale(1.3)\" : \"scale(1)\";\n const t12 = isHovered && isDragTarget && isCompatible ? `0 0 8px ${port.color || canvasStyles.nodes.selectedBorderColor}` : \"none\";\n let t13;\n if ($[14] !== t10 || $[15] !== t11 || $[16] !== t12) {\n t13 = /*#__PURE__*/_jsx(\"div\", {\n style: {\n width: \"6px\",\n height: \"6px\",\n borderRadius: \"50%\",\n backgroundColor: t10,\n transition: `transform ${TRANSITION_DURATION}, box-shadow ${TRANSITION_DURATION}`,\n transform: t11,\n boxShadow: t12\n }\n });\n $[14] = t10;\n $[15] = t11;\n $[16] = t12;\n $[17] = t13;\n } else {\n t13 = $[17];\n }\n let t14;\n if ($[18] !== canvasStyles || $[19] !== isCompatible || $[20] !== isDragTarget || $[21] !== isHovered || $[22] !== port.id || $[23] !== port.label || $[24] !== showExpanded || $[25] !== side) {\n t14 = showExpanded && /*#__PURE__*/_jsx(\"span\", {\n style: {\n marginLeft: side === \"left\" || side === \"right\" ? \"4px\" : 0,\n marginTop: side === \"top\" || side === \"bottom\" ? \"4px\" : 0,\n fontSize: \"10px\",\n color: isHovered ? \"#fff\" : isCompatible ? canvasStyles.nodes.defaultBorderColor : \"rgba(128, 128, 128, 0.5)\",\n whiteSpace: \"nowrap\",\n overflow: \"hidden\",\n textOverflow: \"ellipsis\",\n textDecoration: isDragTarget && !isCompatible ? \"line-through\" : \"none\",\n transition: `opacity ${TRANSITION_DURATION}`,\n opacity: showExpanded ? 1 : 0\n },\n children: port.label || port.id\n });\n $[18] = canvasStyles;\n $[19] = isCompatible;\n $[20] = isDragTarget;\n $[21] = isHovered;\n $[22] = port.id;\n $[23] = port.label;\n $[24] = showExpanded;\n $[25] = side;\n $[26] = t14;\n } else {\n t14 = $[26];\n }\n let t15;\n if ($[27] !== onMouseLeave || $[28] !== port.id || $[29] !== port.type || $[30] !== t1 || $[31] !== t13 || $[32] !== t14 || $[33] !== t2 || $[34] !== t3 || $[35] !== t4 || $[36] !== t9) {\n t15 = /*#__PURE__*/_jsxs(\"div\", {\n \"data-port-id\": port.id,\n \"data-port-type\": port.type,\n \"data-drag-port-id\": t1,\n onClick: t2,\n onPointerDown: t3,\n onMouseEnter: t4,\n onMouseLeave: onMouseLeave,\n style: t9,\n children: [t13, t14]\n });\n $[27] = onMouseLeave;\n $[28] = port.id;\n $[29] = port.type;\n $[30] = t1;\n $[31] = t13;\n $[32] = t14;\n $[33] = t2;\n $[34] = t3;\n $[35] = t4;\n $[36] = t9;\n $[37] = t15;\n } else {\n t15 = $[37];\n }\n return t15;\n}","import { c as _c } from \"react/compiler-runtime\";\n/**\n * Viewport Controls Component\n *\n * Floating +/- zoom buttons and fit-to-view for touch devices.\n * Positioned bottom-right by default (mobile convention).\n * Auto-shown on touch devices, hidden on mouse-primary.\n */\n\nimport React, { useState } from 'react';\nimport { useAtom, useAtomValue, useSetAtom } from 'jotai';\nimport { zoomAtom, panAtom, resetViewportAtom } from '../core/viewport-store';\nimport { isTouchDeviceAtom } from '../core/input-store';\nimport { jsx as _jsx, jsxs as _jsxs } from \"react/jsx-runtime\";\n/**\n * Floating viewport controls (zoom in/out, reset).\n * Shown by default only on touch devices.\n */\nexport function ViewportControls(t0) {\n const $ = _c(39);\n const {\n minZoom: t1,\n maxZoom: t2,\n zoomStep: t3,\n position: t4,\n alwaysVisible: t5,\n className,\n style\n } = t0;\n const minZoom = t1 === undefined ? 0.1 : t1;\n const maxZoom = t2 === undefined ? 5 : t2;\n const zoomStep = t3 === undefined ? 0.25 : t3;\n const position = t4 === undefined ? \"bottom-right\" : t4;\n const alwaysVisible = t5 === undefined ? false : t5;\n const [zoom, setZoom] = useAtom(zoomAtom);\n useAtom(panAtom);\n const isTouchDevice = useAtomValue(isTouchDeviceAtom);\n const resetViewport = useSetAtom(resetViewportAtom);\n let t6;\n if ($[0] !== maxZoom || $[1] !== setZoom || $[2] !== zoom || $[3] !== zoomStep) {\n t6 = () => {\n setZoom(Math.min(maxZoom, zoom + zoomStep));\n };\n $[0] = maxZoom;\n $[1] = setZoom;\n $[2] = zoom;\n $[3] = zoomStep;\n $[4] = t6;\n } else {\n t6 = $[4];\n }\n const handleZoomIn = t6;\n let t7;\n if ($[5] !== minZoom || $[6] !== setZoom || $[7] !== zoom || $[8] !== zoomStep) {\n t7 = () => {\n setZoom(Math.max(minZoom, zoom - zoomStep));\n };\n $[5] = minZoom;\n $[6] = setZoom;\n $[7] = zoom;\n $[8] = zoomStep;\n $[9] = t7;\n } else {\n t7 = $[9];\n }\n const handleZoomOut = t7;\n let t8;\n if ($[10] !== resetViewport) {\n t8 = () => {\n resetViewport();\n };\n $[10] = resetViewport;\n $[11] = t8;\n } else {\n t8 = $[11];\n }\n const handleReset = t8;\n if (!alwaysVisible && !isTouchDevice) {\n return null;\n }\n let t9;\n if ($[12] !== position) {\n t9 = getPositionStyles(position);\n $[12] = position;\n $[13] = t9;\n } else {\n t9 = $[13];\n }\n const positionStyles = t9;\n let t10;\n if ($[14] !== zoom) {\n t10 = Math.round(zoom * 100);\n $[14] = zoom;\n $[15] = t10;\n } else {\n t10 = $[15];\n }\n const zoomPercent = t10;\n let t11;\n if ($[16] !== positionStyles || $[17] !== style) {\n t11 = {\n position: \"absolute\",\n ...positionStyles,\n display: \"flex\",\n flexDirection: \"column\",\n gap: \"4px\",\n zIndex: 100,\n pointerEvents: \"auto\",\n ...style\n };\n $[16] = positionStyles;\n $[17] = style;\n $[18] = t11;\n } else {\n t11 = $[18];\n }\n const t12 = zoom >= maxZoom;\n let t13;\n if ($[19] === Symbol.for(\"react.memo_cache_sentinel\")) {\n t13 = /*#__PURE__*/_jsx(PlusIcon, {});\n $[19] = t13;\n } else {\n t13 = $[19];\n }\n let t14;\n if ($[20] !== handleZoomIn || $[21] !== t12) {\n t14 = /*#__PURE__*/_jsx(ControlButton, {\n onClick: handleZoomIn,\n disabled: t12,\n \"aria-label\": \"Zoom in\",\n children: t13\n });\n $[20] = handleZoomIn;\n $[21] = t12;\n $[22] = t14;\n } else {\n t14 = $[22];\n }\n const t15 = `Reset zoom (${zoomPercent}%)`;\n const t16 = `${zoomPercent}%`;\n let t17;\n if ($[23] === Symbol.for(\"react.memo_cache_sentinel\")) {\n t17 = {\n fontSize: \"10px\",\n fontWeight: 600\n };\n $[23] = t17;\n } else {\n t17 = $[23];\n }\n let t18;\n if ($[24] !== handleReset || $[25] !== t15 || $[26] !== t16 || $[27] !== zoomPercent) {\n t18 = /*#__PURE__*/_jsxs(ControlButton, {\n onClick: handleReset,\n \"aria-label\": t15,\n title: t16,\n style: t17,\n children: [zoomPercent, \"%\"]\n });\n $[24] = handleReset;\n $[25] = t15;\n $[26] = t16;\n $[27] = zoomPercent;\n $[28] = t18;\n } else {\n t18 = $[28];\n }\n const t19 = zoom <= minZoom;\n let t20;\n if ($[29] === Symbol.for(\"react.memo_cache_sentinel\")) {\n t20 = /*#__PURE__*/_jsx(MinusIcon, {});\n $[29] = t20;\n } else {\n t20 = $[29];\n }\n let t21;\n if ($[30] !== handleZoomOut || $[31] !== t19) {\n t21 = /*#__PURE__*/_jsx(ControlButton, {\n onClick: handleZoomOut,\n disabled: t19,\n \"aria-label\": \"Zoom out\",\n children: t20\n });\n $[30] = handleZoomOut;\n $[31] = t19;\n $[32] = t21;\n } else {\n t21 = $[32];\n }\n let t22;\n if ($[33] !== className || $[34] !== t11 || $[35] !== t14 || $[36] !== t18 || $[37] !== t21) {\n t22 = /*#__PURE__*/_jsxs(\"div\", {\n className: className,\n style: t11,\n children: [t14, t18, t21]\n });\n $[33] = className;\n $[34] = t11;\n $[35] = t14;\n $[36] = t18;\n $[37] = t21;\n $[38] = t22;\n } else {\n t22 = $[38];\n }\n return t22;\n}\n\n// =============================================================================\n// Internal Components\n// =============================================================================\n\nfunction ControlButton(t0) {\n const $ = _c(21);\n let children;\n let disabled;\n let onClick;\n let props;\n let style;\n if ($[0] !== t0) {\n ({\n children,\n style,\n disabled,\n onClick,\n ...props\n } = t0);\n $[0] = t0;\n $[1] = children;\n $[2] = disabled;\n $[3] = onClick;\n $[4] = props;\n $[5] = style;\n } else {\n children = $[1];\n disabled = $[2];\n onClick = $[3];\n props = $[4];\n style = $[5];\n }\n const [pulsing, setPulsing] = useState(false);\n let t1;\n if ($[6] !== disabled || $[7] !== onClick) {\n t1 = e => {\n if (!disabled) {\n setPulsing(true);\n }\n onClick?.(e);\n };\n $[6] = disabled;\n $[7] = onClick;\n $[8] = t1;\n } else {\n t1 = $[8];\n }\n const handleClick = t1;\n const t2 = pulsing ? \"canvas-tap-pulse\" : undefined;\n let t3;\n if ($[9] === Symbol.for(\"react.memo_cache_sentinel\")) {\n t3 = () => setPulsing(false);\n $[9] = t3;\n } else {\n t3 = $[9];\n }\n const t4 = disabled ? \"default\" : \"pointer\";\n const t5 = disabled ? 0.4 : 1;\n let t6;\n if ($[10] !== style || $[11] !== t4 || $[12] !== t5) {\n t6 = {\n width: \"44px\",\n height: \"44px\",\n borderRadius: \"12px\",\n border: \"1px solid var(--canvas-control-border, rgba(255,255,255,0.1))\",\n backgroundColor: \"var(--canvas-control-bg, rgba(30,30,30,0.85))\",\n color: \"var(--canvas-control-fg, rgba(255,255,255,0.9))\",\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"center\",\n cursor: t4,\n opacity: t5,\n touchAction: \"manipulation\",\n WebkitTapHighlightColor: \"transparent\",\n userSelect: \"none\",\n transition: \"background-color 150ms, opacity 150ms\",\n backdropFilter: \"blur(12px)\",\n WebkitBackdropFilter: \"blur(12px)\",\n padding: 0,\n ...style\n };\n $[10] = style;\n $[11] = t4;\n $[12] = t5;\n $[13] = t6;\n } else {\n t6 = $[13];\n }\n let t7;\n if ($[14] !== children || $[15] !== disabled || $[16] !== handleClick || $[17] !== props || $[18] !== t2 || $[19] !== t6) {\n t7 = /*#__PURE__*/_jsx(\"button\", {\n ...props,\n disabled: disabled,\n className: t2,\n onAnimationEnd: t3,\n onClick: handleClick,\n style: t6,\n \"data-no-drag\": \"true\",\n children: children\n });\n $[14] = children;\n $[15] = disabled;\n $[16] = handleClick;\n $[17] = props;\n $[18] = t2;\n $[19] = t6;\n $[20] = t7;\n } else {\n t7 = $[20];\n }\n return t7;\n}\nfunction PlusIcon() {\n const $ = _c(1);\n let t0;\n if ($[0] === Symbol.for(\"react.memo_cache_sentinel\")) {\n t0 = /*#__PURE__*/_jsxs(\"svg\", {\n width: \"18\",\n height: \"18\",\n viewBox: \"0 0 18 18\",\n fill: \"none\",\n stroke: \"currentColor\",\n strokeWidth: \"2\",\n strokeLinecap: \"round\",\n children: [/*#__PURE__*/_jsx(\"line\", {\n x1: \"9\",\n y1: \"4\",\n x2: \"9\",\n y2: \"14\"\n }), /*#__PURE__*/_jsx(\"line\", {\n x1: \"4\",\n y1: \"9\",\n x2: \"14\",\n y2: \"9\"\n })]\n });\n $[0] = t0;\n } else {\n t0 = $[0];\n }\n return t0;\n}\nfunction MinusIcon() {\n const $ = _c(1);\n let t0;\n if ($[0] === Symbol.for(\"react.memo_cache_sentinel\")) {\n t0 = /*#__PURE__*/_jsx(\"svg\", {\n width: \"18\",\n height: \"18\",\n viewBox: \"0 0 18 18\",\n fill: \"none\",\n stroke: \"currentColor\",\n strokeWidth: \"2\",\n strokeLinecap: \"round\",\n children: /*#__PURE__*/_jsx(\"line\", {\n x1: \"4\",\n y1: \"9\",\n x2: \"14\",\n y2: \"9\"\n })\n });\n $[0] = t0;\n } else {\n t0 = $[0];\n }\n return t0;\n}\nfunction getPositionStyles(position) {\n switch (position) {\n case 'bottom-right':\n return {\n bottom: 'max(16px, env(safe-area-inset-bottom, 16px))',\n right: 'max(16px, env(safe-area-inset-right, 16px))'\n };\n case 'bottom-left':\n return {\n bottom: 'max(16px, env(safe-area-inset-bottom, 16px))',\n left: 'max(16px, env(safe-area-inset-left, 16px))'\n };\n case 'top-right':\n return {\n top: 'max(16px, env(safe-area-inset-top, 16px))',\n right: 'max(16px, env(safe-area-inset-right, 16px))'\n };\n case 'top-left':\n return {\n top: 'max(16px, env(safe-area-inset-top, 16px))',\n left: 'max(16px, env(safe-area-inset-left, 16px))'\n };\n default:\n return {\n bottom: 'max(16px, env(safe-area-inset-bottom, 16px))',\n right: 'max(16px, env(safe-area-inset-right, 16px))'\n };\n }\n}","/**\n * Selection Overlay Component\n *\n * Renders the visual lasso or rectangle selection path during drag operations.\n * Sits as an SVG layer above the canvas content, below UI overlays.\n */\n\n'use client';\n\nimport { c as _c } from \"react/compiler-runtime\";\nimport React from 'react';\nimport { useAtomValue } from 'jotai';\nimport { selectionPathAtom, selectionRectAtom } from '../core/selection-path-store';\nimport { panAtom, zoomAtom } from '../core/viewport-store';\nimport { jsx as _jsx, jsxs as _jsxs } from \"react/jsx-runtime\";\n/**\n * Renders the active selection path (lasso or rectangle).\n *\n * Place inside the Viewport's transform container so coordinates\n * align with world space. The component reads atoms directly.\n *\n * @example\n * ```tsx\n * \n * \n * \n * ```\n */\nexport function SelectionOverlay(t0) {\n const $ = _c(18);\n const {\n fillColor: t1,\n strokeColor: t2,\n strokeWidth: t3\n } = t0;\n const fillColor = t1 === undefined ? \"rgba(99, 102, 241, 0.15)\" : t1;\n const strokeColor = t2 === undefined ? \"rgba(99, 102, 241, 0.6)\" : t2;\n const strokeWidth = t3 === undefined ? 1.5 : t3;\n const path = useAtomValue(selectionPathAtom);\n const selectionRect = useAtomValue(selectionRectAtom);\n useAtomValue(panAtom);\n const zoom = useAtomValue(zoomAtom);\n if (!path) {\n return null;\n }\n let t4;\n if ($[0] === Symbol.for(\"react.memo_cache_sentinel\")) {\n t4 = {\n position: \"absolute\",\n top: 0,\n left: 0,\n width: \"100%\",\n height: \"100%\",\n pointerEvents: \"none\",\n overflow: \"visible\",\n zIndex: 9998\n };\n $[0] = t4;\n } else {\n t4 = $[0];\n }\n let t5;\n if ($[1] !== fillColor || $[2] !== path.type || $[3] !== selectionRect || $[4] !== strokeColor || $[5] !== strokeWidth || $[6] !== zoom) {\n t5 = path.type === \"rect\" && selectionRect && /*#__PURE__*/_jsx(\"rect\", {\n x: selectionRect.x,\n y: selectionRect.y,\n width: selectionRect.width,\n height: selectionRect.height,\n fill: fillColor,\n stroke: strokeColor,\n strokeWidth: strokeWidth / zoom,\n strokeDasharray: `${4 / zoom} ${4 / zoom}`\n });\n $[1] = fillColor;\n $[2] = path.type;\n $[3] = selectionRect;\n $[4] = strokeColor;\n $[5] = strokeWidth;\n $[6] = zoom;\n $[7] = t5;\n } else {\n t5 = $[7];\n }\n let t6;\n if ($[8] !== fillColor || $[9] !== path.points || $[10] !== path.type || $[11] !== strokeColor || $[12] !== strokeWidth || $[13] !== zoom) {\n t6 = path.type === \"lasso\" && path.points.length >= 2 && /*#__PURE__*/_jsx(\"polygon\", {\n points: path.points.map(_temp).join(\" \"),\n fill: fillColor,\n stroke: strokeColor,\n strokeWidth: strokeWidth / zoom,\n strokeLinejoin: \"round\"\n });\n $[8] = fillColor;\n $[9] = path.points;\n $[10] = path.type;\n $[11] = strokeColor;\n $[12] = strokeWidth;\n $[13] = zoom;\n $[14] = t6;\n } else {\n t6 = $[14];\n }\n let t7;\n if ($[15] !== t5 || $[16] !== t6) {\n t7 = /*#__PURE__*/_jsxs(\"svg\", {\n style: t4,\n children: [t5, t6]\n });\n $[15] = t5;\n $[16] = t6;\n $[17] = t7;\n } else {\n t7 = $[17];\n }\n return t7;\n}\nfunction _temp(p) {\n return `${p.x},${p.y}`;\n}","/**\n * Minimap Component\n *\n * A small overview panel showing all nodes with a draggable viewport rectangle.\n * Uses element for performance with large graphs (1000+ nodes).\n */\n\n'use client';\n\nimport { c as _c } from \"react/compiler-runtime\";\nimport React, { useRef, useEffect } from 'react';\nimport { useAtomValue, useSetAtom } from 'jotai';\nimport { uiNodesAtom } from '../core/graph-derived';\nimport { graphAtom } from '../core/graph-store';\nimport { panAtom, zoomAtom, viewportRectAtom } from '../core/viewport-store';\nimport { selectedNodeIdsAtom } from '../core/selection-store';\nimport { computeGraphBounds, getMinimapTransform, minimapToWorld } from './minimap-utils';\n\n// Re-export utilities\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nexport { computeGraphBounds, getMinimapTransform, minimapToWorld } from './minimap-utils';\n/**\n * Minimap overview of the entire graph.\n *\n * Shows all nodes as small rectangles with a viewport rectangle overlay.\n * Click or drag on the minimap to pan the viewport.\n *\n * @example\n * ```tsx\n * \n * \n * \n * ```\n */\nexport function Minimap(t0) {\n const $ = _c(60);\n const {\n width: t1,\n height: t2,\n backgroundColor: t3,\n nodeColor: t4,\n selectedNodeColor: t5,\n viewportColor: t6,\n borderColor: t7,\n edgeColor: t8,\n position: t9,\n offset: t10,\n className\n } = t0;\n const width = t1 === undefined ? 200 : t1;\n const height = t2 === undefined ? 150 : t2;\n const backgroundColor = t3 === undefined ? \"rgba(0, 0, 0, 0.7)\" : t3;\n const nodeColor = t4 === undefined ? \"rgba(148, 163, 184, 0.6)\" : t4;\n const selectedNodeColor = t5 === undefined ? \"rgba(99, 102, 241, 0.8)\" : t5;\n const viewportColor = t6 === undefined ? \"rgba(255, 255, 255, 0.3)\" : t6;\n const borderColor = t7 === undefined ? \"rgba(255, 255, 255, 0.2)\" : t7;\n const edgeColor = t8 === undefined ? \"rgba(148, 163, 184, 0.3)\" : t8;\n const position = t9 === undefined ? \"bottom-right\" : t9;\n const offset = t10 === undefined ? 12 : t10;\n const canvasRef = useRef(null);\n const nodes = useAtomValue(uiNodesAtom);\n const graph = useAtomValue(graphAtom);\n const pan = useAtomValue(panAtom);\n const zoom = useAtomValue(zoomAtom);\n const viewportRect = useAtomValue(viewportRectAtom);\n const selectedNodeIds = useAtomValue(selectedNodeIdsAtom);\n const setPan = useSetAtom(panAtom);\n const isDragging = useRef(false);\n let t11;\n if ($[0] !== nodes) {\n t11 = computeGraphBounds(nodes);\n $[0] = nodes;\n $[1] = t11;\n } else {\n t11 = $[1];\n }\n const graphBounds = t11;\n let t12;\n if ($[2] !== graphBounds || $[3] !== height || $[4] !== width) {\n t12 = (mx, my) => {\n if (!graphBounds) {\n return null;\n }\n const t = getMinimapTransform(graphBounds, width, height);\n if (!t) {\n return null;\n }\n return minimapToWorld(mx, my, t);\n };\n $[2] = graphBounds;\n $[3] = height;\n $[4] = width;\n $[5] = t12;\n } else {\n t12 = $[5];\n }\n const minimapToWorldCoords = t12;\n let t13;\n if ($[6] !== setPan || $[7] !== viewportRect || $[8] !== zoom) {\n t13 = (worldX, worldY) => {\n if (!viewportRect) {\n return;\n }\n const newPanX = -worldX * zoom + viewportRect.width / 2;\n const newPanY = -worldY * zoom + viewportRect.height / 2;\n setPan({\n x: newPanX,\n y: newPanY\n });\n };\n $[6] = setPan;\n $[7] = viewportRect;\n $[8] = zoom;\n $[9] = t13;\n } else {\n t13 = $[9];\n }\n const panToWorld = t13;\n let t14;\n if ($[10] !== backgroundColor || $[11] !== borderColor || $[12] !== edgeColor || $[13] !== graph || $[14] !== graphBounds || $[15] !== height || $[16] !== nodeColor || $[17] !== nodes || $[18] !== pan || $[19] !== selectedNodeColor || $[20] !== selectedNodeIds || $[21] !== viewportColor || $[22] !== viewportRect || $[23] !== width || $[24] !== zoom) {\n t14 = () => {\n const canvas = canvasRef.current;\n if (!canvas) {\n return;\n }\n const ctx = canvas.getContext(\"2d\");\n if (!ctx) {\n return;\n }\n const dpr = window.devicePixelRatio || 1;\n canvas.width = width * dpr;\n canvas.height = height * dpr;\n ctx.scale(dpr, dpr);\n ctx.fillStyle = backgroundColor;\n ctx.fillRect(0, 0, width, height);\n const t_0 = graphBounds ? getMinimapTransform(graphBounds, width, height) : null;\n if (!t_0) {\n return;\n }\n const nodePositions = new Map();\n for (const node of nodes) {\n const x = (node.position.x - t_0.minX) * t_0.scale + t_0.offsetX;\n const y = (node.position.y - t_0.minY) * t_0.scale + t_0.offsetY;\n const w = Math.max((node.width ?? 200) * t_0.scale, 2);\n const h = Math.max((node.height ?? 100) * t_0.scale, 2);\n nodePositions.set(node.id, {\n cx: x + w / 2,\n cy: y + h / 2\n });\n }\n ctx.strokeStyle = edgeColor;\n ctx.lineWidth = 1;\n graph.forEachEdge((_key, _attrs, source, target) => {\n const from = nodePositions.get(source);\n const to = nodePositions.get(target);\n if (!from || !to) {\n return;\n }\n ctx.beginPath();\n ctx.moveTo(from.cx, from.cy);\n ctx.lineTo(to.cx, to.cy);\n ctx.stroke();\n });\n for (const node_0 of nodes) {\n const pos = nodePositions.get(node_0.id);\n if (!pos) {\n continue;\n }\n const w_0 = Math.max((node_0.width ?? 200) * t_0.scale, 2);\n const h_0 = Math.max((node_0.height ?? 100) * t_0.scale, 2);\n ctx.fillStyle = selectedNodeIds.has(node_0.id) ? selectedNodeColor : nodeColor;\n ctx.fillRect(pos.cx - w_0 / 2, pos.cy - h_0 / 2, w_0, h_0);\n }\n if (viewportRect && viewportRect.width > 0) {\n const vpWorldMinX = -pan.x / zoom;\n const vpWorldMinY = -pan.y / zoom;\n const vpWorldW = viewportRect.width / zoom;\n const vpWorldH = viewportRect.height / zoom;\n const vpX = (vpWorldMinX - t_0.minX) * t_0.scale + t_0.offsetX;\n const vpY = (vpWorldMinY - t_0.minY) * t_0.scale + t_0.offsetY;\n const vpW = vpWorldW * t_0.scale;\n const vpH = vpWorldH * t_0.scale;\n ctx.strokeStyle = viewportColor;\n ctx.lineWidth = 1.5;\n ctx.strokeRect(vpX, vpY, vpW, vpH);\n ctx.fillStyle = viewportColor.replace(/[\\d.]+\\)$/, \"0.1)\");\n ctx.fillRect(vpX, vpY, vpW, vpH);\n }\n ctx.strokeStyle = borderColor;\n ctx.lineWidth = 1;\n ctx.strokeRect(0, 0, width, height);\n };\n $[10] = backgroundColor;\n $[11] = borderColor;\n $[12] = edgeColor;\n $[13] = graph;\n $[14] = graphBounds;\n $[15] = height;\n $[16] = nodeColor;\n $[17] = nodes;\n $[18] = pan;\n $[19] = selectedNodeColor;\n $[20] = selectedNodeIds;\n $[21] = viewportColor;\n $[22] = viewportRect;\n $[23] = width;\n $[24] = zoom;\n $[25] = t14;\n } else {\n t14 = $[25];\n }\n let t15;\n if ($[26] !== backgroundColor || $[27] !== borderColor || $[28] !== edgeColor || $[29] !== graph || $[30] !== height || $[31] !== nodeColor || $[32] !== nodes || $[33] !== pan || $[34] !== selectedNodeColor || $[35] !== selectedNodeIds || $[36] !== viewportColor || $[37] !== viewportRect || $[38] !== width || $[39] !== zoom) {\n t15 = [nodes, graph, pan, zoom, viewportRect, selectedNodeIds, width, height, backgroundColor, nodeColor, selectedNodeColor, viewportColor, borderColor, edgeColor, getMinimapTransform];\n $[26] = backgroundColor;\n $[27] = borderColor;\n $[28] = edgeColor;\n $[29] = graph;\n $[30] = height;\n $[31] = nodeColor;\n $[32] = nodes;\n $[33] = pan;\n $[34] = selectedNodeColor;\n $[35] = selectedNodeIds;\n $[36] = viewportColor;\n $[37] = viewportRect;\n $[38] = width;\n $[39] = zoom;\n $[40] = t15;\n } else {\n t15 = $[40];\n }\n useEffect(t14, t15);\n let t16;\n if ($[41] !== minimapToWorldCoords || $[42] !== panToWorld) {\n t16 = e => {\n e.stopPropagation();\n e.preventDefault();\n isDragging.current = true;\n e.target.setPointerCapture(e.pointerId);\n const rect = canvasRef.current?.getBoundingClientRect();\n if (!rect) {\n return;\n }\n const mx_0 = e.clientX - rect.left;\n const my_0 = e.clientY - rect.top;\n const worldPos = minimapToWorldCoords(mx_0, my_0);\n if (worldPos) {\n panToWorld(worldPos.x, worldPos.y);\n }\n };\n $[41] = minimapToWorldCoords;\n $[42] = panToWorld;\n $[43] = t16;\n } else {\n t16 = $[43];\n }\n const handlePointerDown = t16;\n let t17;\n if ($[44] !== minimapToWorldCoords || $[45] !== panToWorld) {\n t17 = e_0 => {\n if (!isDragging.current) {\n return;\n }\n e_0.stopPropagation();\n const rect_0 = canvasRef.current?.getBoundingClientRect();\n if (!rect_0) {\n return;\n }\n const mx_1 = e_0.clientX - rect_0.left;\n const my_1 = e_0.clientY - rect_0.top;\n const worldPos_0 = minimapToWorldCoords(mx_1, my_1);\n if (worldPos_0) {\n panToWorld(worldPos_0.x, worldPos_0.y);\n }\n };\n $[44] = minimapToWorldCoords;\n $[45] = panToWorld;\n $[46] = t17;\n } else {\n t17 = $[46];\n }\n const handlePointerMove = t17;\n let t18;\n if ($[47] === Symbol.for(\"react.memo_cache_sentinel\")) {\n t18 = e_1 => {\n isDragging.current = false;\n e_1.target.releasePointerCapture(e_1.pointerId);\n };\n $[47] = t18;\n } else {\n t18 = $[47];\n }\n const handlePointerUp = t18;\n let t19;\n if ($[48] !== offset || $[49] !== position) {\n t19 = {\n position: \"absolute\",\n zIndex: 9999,\n ...(position.includes(\"top\") ? {\n top: offset\n } : {\n bottom: offset\n }),\n ...(position.includes(\"left\") ? {\n left: offset\n } : {\n right: offset\n })\n };\n $[48] = offset;\n $[49] = position;\n $[50] = t19;\n } else {\n t19 = $[50];\n }\n const positionStyles = t19;\n let t20;\n if ($[51] !== height || $[52] !== positionStyles || $[53] !== width) {\n t20 = {\n ...positionStyles,\n width,\n height,\n borderRadius: 6,\n cursor: \"pointer\",\n touchAction: \"none\"\n };\n $[51] = height;\n $[52] = positionStyles;\n $[53] = width;\n $[54] = t20;\n } else {\n t20 = $[54];\n }\n let t21;\n if ($[55] !== className || $[56] !== handlePointerDown || $[57] !== handlePointerMove || $[58] !== t20) {\n t21 = /*#__PURE__*/_jsx(\"canvas\", {\n ref: canvasRef,\n className: className,\n style: t20,\n onPointerDown: handlePointerDown,\n onPointerMove: handlePointerMove,\n onPointerUp: handlePointerUp\n });\n $[55] = className;\n $[56] = handlePointerDown;\n $[57] = handlePointerMove;\n $[58] = t20;\n $[59] = t21;\n } else {\n t21 = $[59];\n }\n return t21;\n}","/**\n * Minimap Utilities\n *\n * Pure computation functions for the Minimap component:\n * graph bounds, coordinate transforms, world conversion.\n *\n * Extracted from Minimap.tsx in v1.7.0.\n *\n * @since 1.7.0\n */\n\n// --- Types ---\n\n// --- Functions ---\n\n/**\n * Compute the bounding box of all nodes.\n * Returns null for empty node arrays.\n */\nexport function computeGraphBounds(nodes) {\n if (nodes.length === 0) return null;\n let minX = Infinity;\n let minY = Infinity;\n let maxX = -Infinity;\n let maxY = -Infinity;\n for (const node of nodes) {\n const x = node.position.x;\n const y = node.position.y;\n const w = node.width ?? 200;\n const h = node.height ?? 100;\n if (x < minX) minX = x;\n if (y < minY) minY = y;\n if (x + w > maxX) maxX = x + w;\n if (y + h > maxY) maxY = y + h;\n }\n return {\n minX,\n minY,\n maxX,\n maxY\n };\n}\n\n/**\n * Compute the transform from graph world coordinates to minimap pixel coordinates.\n */\nexport function getMinimapTransform(bounds, minimapWidth, minimapHeight, padding = 20) {\n const graphW = bounds.maxX - bounds.minX;\n const graphH = bounds.maxY - bounds.minY;\n if (graphW <= 0 || graphH <= 0) return null;\n const scaleX = (minimapWidth - padding * 2) / graphW;\n const scaleY = (minimapHeight - padding * 2) / graphH;\n const scale = Math.min(scaleX, scaleY);\n const offsetX = padding + (minimapWidth - padding * 2 - graphW * scale) / 2;\n const offsetY = padding + (minimapHeight - padding * 2 - graphH * scale) / 2;\n return {\n scale,\n offsetX,\n offsetY,\n minX: bounds.minX,\n minY: bounds.minY\n };\n}\n\n/**\n * Convert minimap pixel coordinates to world coordinates.\n */\nexport function minimapToWorld(mx, my, transform) {\n return {\n x: (mx - transform.offsetX) / transform.scale + transform.minX,\n y: (my - transform.offsetY) / transform.scale + transform.minY\n };\n}","/**\n * Group Node Component\n *\n * Container node that renders a header bar with collapse/expand toggle.\n * Children are rendered by the normal NodeRenderer when expanded.\n */\n\n'use client';\n\nimport { c as _c } from \"react/compiler-runtime\";\nimport React from 'react';\nimport { useAtomValue, useSetAtom } from 'jotai';\nimport { collapsedGroupsAtom, toggleGroupCollapseAtom, groupChildCountAtom } from '../core/group-store';\nimport { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from \"react/jsx-runtime\";\n/**\n * Group node with collapsible header.\n *\n * @example\n * ```tsx\n * registerNodeType('group', ({ nodeData }) => (\n * \n * ));\n * ```\n */\nexport function GroupNode(t0) {\n const $ = _c(42);\n const {\n node,\n isSelected,\n renderHeader,\n className,\n style\n } = t0;\n const collapsed = useAtomValue(collapsedGroupsAtom);\n const toggleCollapse = useSetAtom(toggleGroupCollapseAtom);\n const getChildCount = useAtomValue(groupChildCountAtom);\n let childCount;\n let isCollapsed;\n let t1;\n let t2;\n let t3;\n let t4;\n let t5;\n let t6;\n let t7;\n if ($[0] !== className || $[1] !== collapsed || $[2] !== getChildCount || $[3] !== isSelected || $[4] !== node || $[5] !== renderHeader || $[6] !== style || $[7] !== toggleCollapse) {\n isCollapsed = collapsed.has(node.id);\n childCount = getChildCount(node.id);\n let t8;\n if ($[17] !== node.id || $[18] !== toggleCollapse) {\n t8 = e => {\n e.stopPropagation();\n toggleCollapse(node.id);\n };\n $[17] = node.id;\n $[18] = toggleCollapse;\n $[19] = t8;\n } else {\n t8 = $[19];\n }\n const handleToggle = t8;\n t6 = className;\n const t9 = `2px ${isSelected ? \"solid\" : \"dashed\"} ${isSelected ? \"#4A90D9\" : \"#666\"}`;\n const t10 = isCollapsed ? \"rgba(100, 100, 100, 0.15)\" : \"rgba(100, 100, 100, 0.05)\";\n if ($[20] !== style || $[21] !== t10 || $[22] !== t9) {\n t7 = {\n width: \"100%\",\n height: \"100%\",\n border: t9,\n borderRadius: \"8px\",\n background: t10,\n display: \"flex\",\n flexDirection: \"column\",\n overflow: \"hidden\",\n ...style\n };\n $[20] = style;\n $[21] = t10;\n $[22] = t9;\n $[23] = t7;\n } else {\n t7 = $[23];\n }\n if ($[24] === Symbol.for(\"react.memo_cache_sentinel\")) {\n t1 = {\n display: \"flex\",\n alignItems: \"center\",\n gap: \"6px\",\n padding: \"6px 10px\",\n background: \"rgba(100, 100, 100, 0.2)\",\n borderBottom: \"1px solid rgba(100, 100, 100, 0.2)\",\n cursor: \"pointer\",\n userSelect: \"none\",\n fontSize: \"13px\",\n color: \"#ccc\"\n };\n $[24] = t1;\n } else {\n t1 = $[24];\n }\n t2 = handleToggle;\n t3 = \"true\";\n let t11;\n if ($[25] === Symbol.for(\"react.memo_cache_sentinel\")) {\n t11 = {\n fontSize: \"10px\",\n width: \"14px\",\n textAlign: \"center\"\n };\n $[25] = t11;\n } else {\n t11 = $[25];\n }\n const t12 = isCollapsed ? \"\\u25B6\" : \"\\u25BC\";\n if ($[26] !== t12) {\n t4 = /*#__PURE__*/_jsx(\"span\", {\n style: t11,\n children: t12\n });\n $[26] = t12;\n $[27] = t4;\n } else {\n t4 = $[27];\n }\n t5 = renderHeader ? renderHeader({\n node,\n isCollapsed,\n childCount\n }) : /*#__PURE__*/_jsxs(_Fragment, {\n children: [/*#__PURE__*/_jsx(\"span\", {\n style: {\n fontWeight: 500\n },\n children: node.label || \"Group\"\n }), /*#__PURE__*/_jsxs(\"span\", {\n style: {\n opacity: 0.6,\n marginLeft: \"auto\"\n },\n children: [childCount, \" node\", childCount !== 1 ? \"s\" : \"\"]\n })]\n });\n $[0] = className;\n $[1] = collapsed;\n $[2] = getChildCount;\n $[3] = isSelected;\n $[4] = node;\n $[5] = renderHeader;\n $[6] = style;\n $[7] = toggleCollapse;\n $[8] = childCount;\n $[9] = isCollapsed;\n $[10] = t1;\n $[11] = t2;\n $[12] = t3;\n $[13] = t4;\n $[14] = t5;\n $[15] = t6;\n $[16] = t7;\n } else {\n childCount = $[8];\n isCollapsed = $[9];\n t1 = $[10];\n t2 = $[11];\n t3 = $[12];\n t4 = $[13];\n t5 = $[14];\n t6 = $[15];\n t7 = $[16];\n }\n let t8;\n if ($[28] !== t1 || $[29] !== t2 || $[30] !== t3 || $[31] !== t4 || $[32] !== t5) {\n t8 = /*#__PURE__*/_jsxs(\"div\", {\n style: t1,\n onClick: t2,\n \"data-no-drag\": t3,\n children: [t4, t5]\n });\n $[28] = t1;\n $[29] = t2;\n $[30] = t3;\n $[31] = t4;\n $[32] = t5;\n $[33] = t8;\n } else {\n t8 = $[33];\n }\n let t9;\n if ($[34] !== childCount || $[35] !== isCollapsed) {\n t9 = isCollapsed && /*#__PURE__*/_jsxs(\"div\", {\n style: {\n flex: 1,\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"center\",\n color: \"#888\",\n fontSize: \"12px\",\n fontStyle: \"italic\"\n },\n children: [childCount, \" collapsed node\", childCount !== 1 ? \"s\" : \"\"]\n });\n $[34] = childCount;\n $[35] = isCollapsed;\n $[36] = t9;\n } else {\n t9 = $[36];\n }\n let t10;\n if ($[37] !== t6 || $[38] !== t7 || $[39] !== t8 || $[40] !== t9) {\n t10 = /*#__PURE__*/_jsxs(\"div\", {\n className: t6,\n style: t7,\n children: [t8, t9]\n });\n $[37] = t6;\n $[38] = t7;\n $[39] = t8;\n $[40] = t9;\n $[41] = t10;\n } else {\n t10 = $[41];\n }\n return t10;\n}","import { c as _c } from \"react/compiler-runtime\";\n/**\n * Canvas Animations\n *\n * Injects CSS keyframes and transition rules for canvas visual effects.\n * Include once in your canvas tree (e.g., inside CanvasProvider).\n */\n\nimport React from 'react';\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nconst CANVAS_ANIMATION_STYLES = `\n@keyframes canvas-search-pulse {\n\t0%, 100% { box-shadow: 0 0 0 0 rgba(245, 158, 11, 0.5); }\n\t50% { box-shadow: 0 0 0 4px rgba(245, 158, 11, 0.3); }\n}\n.canvas-search-highlight {\n\tanimation: canvas-search-pulse 1.5s ease-in-out infinite;\n}\n@keyframes canvas-edge-fade-in {\n\tfrom { opacity: 0; }\n\tto { opacity: 1; }\n}\n@keyframes canvas-edge-fade-out {\n\tfrom { opacity: 1; }\n\tto { opacity: 0; }\n}\n.canvas-edge-enter {\n\tanimation: canvas-edge-fade-in 300ms ease-out forwards;\n}\n.canvas-edge-exit {\n\tanimation: canvas-edge-fade-out 300ms ease-out forwards;\n\tpointer-events: none;\n}\n@keyframes canvas-drop-target-pulse {\n\t0%, 100% { box-shadow: 0 0 0 0 rgba(59, 130, 246, 0.5); }\n\t50% { box-shadow: 0 0 0 6px rgba(59, 130, 246, 0.3); }\n}\n.canvas-drop-target {\n\tanimation: canvas-drop-target-pulse 1s ease-in-out infinite;\n\toutline: 2px dashed #3b82f6;\n\toutline-offset: 2px;\n}\n@keyframes canvas-tap-pulse {\n\t0%, 100% { transform: scale(1); }\n\t50% { transform: scale(1.08); }\n}\n.canvas-tap-pulse {\n\tanimation: canvas-tap-pulse 250ms ease-out;\n}\n/* iPad / touch: hide cursor indicators that aren't useful on coarse pointers */\n@media (pointer: coarse) {\n\t[data-canvas-root],\n\t[data-canvas-root] * {\n\t\tcursor: default !important;\n\t}\n}\n/* Respect prefers-reduced-motion: disable canvas CSS animations */\n@media (prefers-reduced-motion: reduce) {\n\t.canvas-search-highlight,\n\t.canvas-drop-target,\n\t.canvas-tap-pulse {\n\t\tanimation: none !important;\n\t}\n\t.canvas-edge-enter {\n\t\tanimation: none !important;\n\t\topacity: 1;\n\t}\n\t.canvas-edge-exit {\n\t\tanimation: none !important;\n\t\topacity: 0;\n\t}\n}\n`;\nexport function CanvasAnimations() {\n const $ = _c(1);\n let t0;\n if ($[0] === Symbol.for(\"react.memo_cache_sentinel\")) {\n t0 = /*#__PURE__*/_jsx(\"style\", {\n dangerouslySetInnerHTML: {\n __html: CANVAS_ANIMATION_STYLES\n }\n });\n $[0] = t0;\n } else {\n t0 = $[0];\n }\n return t0;\n}","/**\n * Touch Action Button\n *\n * Floating round button for iPad/tablet that provides access to\n * modifier-key actions (Ctrl+M, Ctrl+D, etc.) that aren't available\n * on touch-only devices.\n *\n * Interaction: press and hold to reveal a radial menu around the button.\n * Drag finger to an item and release to activate it.\n * Auto-shown on touch devices only.\n *\n * Smooth animations:\n * - Items stay mounted and animate between (0,0,scale=0) → (dx,dy,scale=1)\n * via CSS transitions with staggered delays\n * - Labels crossfade with opacity transition\n * - FAB pulses subtly while menu is open\n * - Highlight uses smooth background/scale/shadow transitions\n */\n\n'use client';\n\nimport { c as _c } from \"react/compiler-runtime\";\nimport React, { useState, useRef } from 'react';\nimport { useAtomValue, useSetAtom } from 'jotai';\nimport { isTouchDeviceAtom } from '../../core/input-store';\nimport { hasExternalKeyboardAtom } from '../../core/external-keyboard-store';\nimport { selectedNodeIdsAtom, clearSelectionAtom, addNodesToSelectionAtom } from '../../core/selection-store';\nimport { nodeKeysAtom } from '../../core/graph-derived';\nimport { mergeNodesAtom } from '../../core/graph-mutations';\nimport { duplicateSelectionAtom } from '../../core/clipboard-store';\nimport { undoAtom, redoAtom, canUndoAtom, canRedoAtom } from '../../core/history-store';\nimport { openCommandLineAtom } from '../../commands/store';\nimport { PlusIcon, MergeIcon, DuplicateIcon, SelectAllIcon, SearchIcon, UndoIcon, RedoIcon } from './icons';\nimport { FAB_SIZE, ITEM_SIZE, getRadialPositions, getPositionStyles, RadialMenuItem } from './RadialMenu';\nimport { jsx as _jsx, jsxs as _jsxs } from \"react/jsx-runtime\";\n/**\n * Floating action button with press-and-hold radial menu.\n * Hold to reveal actions in a circle, drag to select, release to activate.\n */\nexport function TouchActionButton(t0) {\n const $ = _c(95);\n const {\n position: t1,\n alwaysVisible: t2,\n className,\n style,\n holdDelay: t3,\n radius: t4\n } = t0;\n const position = t1 === undefined ? \"bottom-left\" : t1;\n const alwaysVisible = t2 === undefined ? false : t2;\n const holdDelay = t3 === undefined ? 250 : t3;\n const radius = t4 === undefined ? 80 : t4;\n const isTouchDevice = useAtomValue(isTouchDeviceAtom);\n const hasExternalKeyboard = useAtomValue(hasExternalKeyboardAtom);\n const [isOpen, setIsOpen] = useState(false);\n const [highlightedId, setHighlightedId] = useState(null);\n const selectedNodeIds = useAtomValue(selectedNodeIdsAtom);\n const nodeKeys = useAtomValue(nodeKeysAtom);\n const mergeNodes = useSetAtom(mergeNodesAtom);\n const duplicateSelection = useSetAtom(duplicateSelectionAtom);\n const clearSelection = useSetAtom(clearSelectionAtom);\n const addNodesToSelection = useSetAtom(addNodesToSelectionAtom);\n const openCommandLine = useSetAtom(openCommandLineAtom);\n const undo = useSetAtom(undoAtom);\n const redo = useSetAtom(redoAtom);\n const canUndo = useAtomValue(canUndoAtom);\n const canRedo = useAtomValue(canRedoAtom);\n const holdTimerRef = useRef(null);\n const containerRef = useRef(null);\n const fabCenterRef = useRef(null);\n const didOpenRef = useRef(false);\n if (!alwaysVisible && (!isTouchDevice || hasExternalKeyboard)) {\n return null;\n }\n const hasSelection = selectedNodeIds.size > 0;\n const canMerge = selectedNodeIds.size >= 2;\n let t5;\n if ($[0] === Symbol.for(\"react.memo_cache_sentinel\")) {\n t5 = /*#__PURE__*/_jsx(UndoIcon, {});\n $[0] = t5;\n } else {\n t5 = $[0];\n }\n const t6 = !canUndo;\n let t7;\n if ($[1] !== undo) {\n t7 = () => undo();\n $[1] = undo;\n $[2] = t7;\n } else {\n t7 = $[2];\n }\n let t8;\n if ($[3] !== t6 || $[4] !== t7) {\n t8 = {\n id: \"undo\",\n label: \"Undo\",\n icon: t5,\n disabled: t6,\n action: t7\n };\n $[3] = t6;\n $[4] = t7;\n $[5] = t8;\n } else {\n t8 = $[5];\n }\n let t9;\n if ($[6] === Symbol.for(\"react.memo_cache_sentinel\")) {\n t9 = /*#__PURE__*/_jsx(RedoIcon, {});\n $[6] = t9;\n } else {\n t9 = $[6];\n }\n const t10 = !canRedo;\n let t11;\n if ($[7] !== redo) {\n t11 = () => redo();\n $[7] = redo;\n $[8] = t11;\n } else {\n t11 = $[8];\n }\n let t12;\n if ($[9] !== t10 || $[10] !== t11) {\n t12 = {\n id: \"redo\",\n label: \"Redo\",\n icon: t9,\n disabled: t10,\n action: t11\n };\n $[9] = t10;\n $[10] = t11;\n $[11] = t12;\n } else {\n t12 = $[11];\n }\n let t13;\n if ($[12] === Symbol.for(\"react.memo_cache_sentinel\")) {\n t13 = /*#__PURE__*/_jsx(MergeIcon, {});\n $[12] = t13;\n } else {\n t13 = $[12];\n }\n const t14 = !canMerge;\n let t15;\n if ($[13] !== canMerge || $[14] !== mergeNodes || $[15] !== selectedNodeIds) {\n t15 = () => {\n if (canMerge) {\n mergeNodes({\n nodeIds: Array.from(selectedNodeIds)\n });\n }\n };\n $[13] = canMerge;\n $[14] = mergeNodes;\n $[15] = selectedNodeIds;\n $[16] = t15;\n } else {\n t15 = $[16];\n }\n let t16;\n if ($[17] !== t14 || $[18] !== t15) {\n t16 = {\n id: \"merge\",\n label: \"Merge\",\n icon: t13,\n disabled: t14,\n action: t15\n };\n $[17] = t14;\n $[18] = t15;\n $[19] = t16;\n } else {\n t16 = $[19];\n }\n let t17;\n if ($[20] === Symbol.for(\"react.memo_cache_sentinel\")) {\n t17 = /*#__PURE__*/_jsx(DuplicateIcon, {});\n $[20] = t17;\n } else {\n t17 = $[20];\n }\n const t18 = !hasSelection;\n let t19;\n if ($[21] !== duplicateSelection || $[22] !== hasSelection) {\n t19 = () => {\n if (hasSelection) {\n duplicateSelection();\n }\n };\n $[21] = duplicateSelection;\n $[22] = hasSelection;\n $[23] = t19;\n } else {\n t19 = $[23];\n }\n let t20;\n if ($[24] !== t18 || $[25] !== t19) {\n t20 = {\n id: \"duplicate\",\n label: \"Duplicate\",\n icon: t17,\n disabled: t18,\n action: t19\n };\n $[24] = t18;\n $[25] = t19;\n $[26] = t20;\n } else {\n t20 = $[26];\n }\n let t21;\n if ($[27] === Symbol.for(\"react.memo_cache_sentinel\")) {\n t21 = /*#__PURE__*/_jsx(SelectAllIcon, {});\n $[27] = t21;\n } else {\n t21 = $[27];\n }\n let t22;\n if ($[28] !== addNodesToSelection || $[29] !== clearSelection || $[30] !== nodeKeys) {\n t22 = {\n id: \"select-all\",\n label: \"Select All\",\n icon: t21,\n action: () => {\n clearSelection();\n addNodesToSelection(nodeKeys);\n }\n };\n $[28] = addNodesToSelection;\n $[29] = clearSelection;\n $[30] = nodeKeys;\n $[31] = t22;\n } else {\n t22 = $[31];\n }\n let t23;\n if ($[32] === Symbol.for(\"react.memo_cache_sentinel\")) {\n t23 = /*#__PURE__*/_jsx(SearchIcon, {});\n $[32] = t23;\n } else {\n t23 = $[32];\n }\n let t24;\n if ($[33] !== openCommandLine) {\n t24 = {\n id: \"search\",\n label: \"Search\",\n icon: t23,\n action: () => openCommandLine()\n };\n $[33] = openCommandLine;\n $[34] = t24;\n } else {\n t24 = $[34];\n }\n let t25;\n if ($[35] !== t12 || $[36] !== t16 || $[37] !== t20 || $[38] !== t22 || $[39] !== t24 || $[40] !== t8) {\n t25 = [t8, t12, t16, t20, t22, t24];\n $[35] = t12;\n $[36] = t16;\n $[37] = t20;\n $[38] = t22;\n $[39] = t24;\n $[40] = t8;\n $[41] = t25;\n } else {\n t25 = $[41];\n }\n const actions = t25;\n let t26;\n if ($[42] !== actions.length || $[43] !== position || $[44] !== radius) {\n t26 = getRadialPositions(actions.length, radius, position);\n $[42] = actions.length;\n $[43] = position;\n $[44] = radius;\n $[45] = t26;\n } else {\n t26 = $[45];\n }\n const itemPositions = t26;\n let t27;\n if ($[46] === Symbol.for(\"react.memo_cache_sentinel\")) {\n t27 = () => {\n if (holdTimerRef.current) {\n clearTimeout(holdTimerRef.current);\n holdTimerRef.current = null;\n }\n };\n $[46] = t27;\n } else {\n t27 = $[46];\n }\n const clearHoldTimer = t27;\n let t28;\n if ($[47] === Symbol.for(\"react.memo_cache_sentinel\")) {\n t28 = () => {\n const container = containerRef.current;\n if (!container) {\n return null;\n }\n const fab = container.querySelector(\"[data-fab-button]\");\n if (!fab) {\n return null;\n }\n const rect = fab.getBoundingClientRect();\n return {\n x: rect.left + rect.width / 2,\n y: rect.top + rect.height / 2\n };\n };\n $[47] = t28;\n } else {\n t28 = $[47];\n }\n const getFabCenter = t28;\n let t29;\n if ($[48] !== actions || $[49] !== itemPositions) {\n t29 = (clientX, clientY) => {\n const center = fabCenterRef.current;\n if (!center) {\n return null;\n }\n let closest = null;\n let closestDist = Infinity;\n const hitRadius = ITEM_SIZE * 0.75;\n for (let i = 0; i < actions.length; i++) {\n const pos = itemPositions[i];\n const itemX = center.x + pos.dx;\n const itemY = center.y + pos.dy;\n const dist = Math.hypot(clientX - itemX, clientY - itemY);\n if (dist < hitRadius && dist < closestDist && !actions[i].disabled) {\n closest = actions[i].id;\n closestDist = dist;\n }\n }\n return closest;\n };\n $[48] = actions;\n $[49] = itemPositions;\n $[50] = t29;\n } else {\n t29 = $[50];\n }\n const findClosestItem = t29;\n let t30;\n if ($[51] !== holdDelay) {\n t30 = e => {\n e.target.setPointerCapture(e.pointerId);\n fabCenterRef.current = getFabCenter();\n didOpenRef.current = false;\n holdTimerRef.current = setTimeout(() => {\n setIsOpen(true);\n didOpenRef.current = true;\n holdTimerRef.current = null;\n }, holdDelay);\n };\n $[51] = holdDelay;\n $[52] = t30;\n } else {\n t30 = $[52];\n }\n const handlePointerDown = t30;\n let t31;\n if ($[53] !== findClosestItem) {\n t31 = e_0 => {\n if (!didOpenRef.current) {\n return;\n }\n setHighlightedId(findClosestItem(e_0.clientX, e_0.clientY));\n };\n $[53] = findClosestItem;\n $[54] = t31;\n } else {\n t31 = $[54];\n }\n const handlePointerMove = t31;\n let t32;\n if ($[55] !== actions || $[56] !== findClosestItem) {\n t32 = e_1 => {\n clearHoldTimer();\n if (didOpenRef.current) {\n const id = findClosestItem(e_1.clientX, e_1.clientY);\n if (id) {\n const item = actions.find(a => a.id === id);\n if (item && !item.disabled) {\n item.action();\n }\n }\n setIsOpen(false);\n setHighlightedId(null);\n didOpenRef.current = false;\n } else {\n clearHoldTimer();\n setIsOpen(o => {\n if (o) {\n setHighlightedId(null);\n return false;\n }\n didOpenRef.current = true;\n fabCenterRef.current = getFabCenter();\n return true;\n });\n }\n };\n $[55] = actions;\n $[56] = findClosestItem;\n $[57] = t32;\n } else {\n t32 = $[57];\n }\n const handlePointerUp = t32;\n let t33;\n if ($[58] === Symbol.for(\"react.memo_cache_sentinel\")) {\n t33 = () => {\n clearHoldTimer();\n setIsOpen(false);\n setHighlightedId(null);\n didOpenRef.current = false;\n };\n $[58] = t33;\n } else {\n t33 = $[58];\n }\n const handlePointerCancel = t33;\n let t34;\n if ($[59] === Symbol.for(\"react.memo_cache_sentinel\")) {\n t34 = item_0 => {\n if (item_0.disabled) {\n return;\n }\n item_0.action();\n setIsOpen(false);\n setHighlightedId(null);\n didOpenRef.current = false;\n };\n $[59] = t34;\n } else {\n t34 = $[59];\n }\n const handleItemTap = t34;\n let t35;\n if ($[60] !== position) {\n t35 = getPositionStyles(position);\n $[60] = position;\n $[61] = t35;\n } else {\n t35 = $[61];\n }\n const positionStyles = t35;\n let t36;\n if ($[62] !== positionStyles || $[63] !== style) {\n t36 = {\n position: \"absolute\",\n ...positionStyles,\n zIndex: 100,\n pointerEvents: \"auto\",\n ...style\n };\n $[62] = positionStyles;\n $[63] = style;\n $[64] = t36;\n } else {\n t36 = $[64];\n }\n let t37;\n if ($[65] !== actions || $[66] !== highlightedId || $[67] !== isOpen || $[68] !== itemPositions) {\n t37 = actions.map((item_1, i_0) => /*#__PURE__*/_jsx(RadialMenuItem, {\n item: item_1,\n position: itemPositions[i_0],\n index: i_0,\n totalItems: actions.length,\n isOpen: isOpen,\n isHighlighted: highlightedId === item_1.id,\n onTap: handleItemTap\n }, item_1.id));\n $[65] = actions;\n $[66] = highlightedId;\n $[67] = isOpen;\n $[68] = itemPositions;\n $[69] = t37;\n } else {\n t37 = $[69];\n }\n const t38 = radius * 2 + ITEM_SIZE;\n const t39 = radius * 2 + ITEM_SIZE;\n const t40 = isOpen ? \"translate(-50%, -50%) scale(1)\" : \"translate(-50%, -50%) scale(0)\";\n const t41 = isOpen ? \"transform 400ms cubic-bezier(0.34, 1.3, 0.64, 1), opacity 300ms ease\" : \"transform 250ms ease, opacity 150ms ease\";\n const t42 = isOpen ? 1 : 0;\n let t43;\n if ($[70] !== t38 || $[71] !== t39 || $[72] !== t40 || $[73] !== t41 || $[74] !== t42) {\n t43 = /*#__PURE__*/_jsx(\"div\", {\n style: {\n position: \"absolute\",\n left: FAB_SIZE / 2,\n top: FAB_SIZE / 2,\n width: t38,\n height: t39,\n borderRadius: \"50%\",\n transform: t40,\n background: \"radial-gradient(circle, rgba(255,255,255,0.03) 0%, transparent 70%)\",\n transition: t41,\n opacity: t42,\n pointerEvents: \"none\"\n }\n });\n $[70] = t38;\n $[71] = t39;\n $[72] = t40;\n $[73] = t41;\n $[74] = t42;\n $[75] = t43;\n } else {\n t43 = $[75];\n }\n const t44 = isOpen ? \"Close actions\" : \"Hold for actions\";\n const t45 = `1.5px solid ${isOpen ? \"rgba(99,160,255,0.4)\" : \"var(--canvas-control-border, rgba(255,255,255,0.15))\"}`;\n const t46 = isOpen ? \"var(--canvas-control-active-bg, rgba(59,130,246,0.9))\" : \"var(--canvas-control-bg, rgba(30,30,30,0.88))\";\n const t47 = isOpen ? \"rotate(45deg) scale(1.05)\" : \"rotate(0deg) scale(1)\";\n const t48 = isOpen ? \"0 0 0 4px rgba(59,130,246,0.15), 0 6px 20px rgba(0,0,0,0.35)\" : \"0 4px 12px rgba(0,0,0,0.3)\";\n let t49;\n if ($[76] !== t45 || $[77] !== t46 || $[78] !== t47 || $[79] !== t48) {\n t49 = {\n position: \"relative\",\n width: FAB_SIZE,\n height: FAB_SIZE,\n borderRadius: \"50%\",\n border: t45,\n backgroundColor: t46,\n color: \"var(--canvas-control-fg, rgba(255,255,255,0.95))\",\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"center\",\n cursor: \"pointer\",\n touchAction: \"none\",\n WebkitTapHighlightColor: \"transparent\",\n userSelect: \"none\",\n backdropFilter: \"blur(16px) saturate(1.5)\",\n WebkitBackdropFilter: \"blur(16px) saturate(1.5)\",\n padding: 0,\n transition: \"background-color 250ms ease, border-color 250ms ease, transform 350ms cubic-bezier(0.34, 1.3, 0.64, 1), box-shadow 300ms ease\",\n transform: t47,\n boxShadow: t48\n };\n $[76] = t45;\n $[77] = t46;\n $[78] = t47;\n $[79] = t48;\n $[80] = t49;\n } else {\n t49 = $[80];\n }\n let t50;\n if ($[81] === Symbol.for(\"react.memo_cache_sentinel\")) {\n t50 = /*#__PURE__*/_jsx(PlusIcon, {});\n $[81] = t50;\n } else {\n t50 = $[81];\n }\n let t51;\n if ($[82] !== handlePointerDown || $[83] !== handlePointerMove || $[84] !== handlePointerUp || $[85] !== isOpen || $[86] !== t44 || $[87] !== t49) {\n t51 = /*#__PURE__*/_jsx(\"button\", {\n \"data-fab-button\": \"true\",\n onPointerDown: handlePointerDown,\n onPointerMove: handlePointerMove,\n onPointerUp: handlePointerUp,\n onPointerCancel: handlePointerCancel,\n \"aria-label\": t44,\n \"aria-expanded\": isOpen,\n \"data-no-drag\": \"true\",\n style: t49,\n children: t50\n });\n $[82] = handlePointerDown;\n $[83] = handlePointerMove;\n $[84] = handlePointerUp;\n $[85] = isOpen;\n $[86] = t44;\n $[87] = t49;\n $[88] = t51;\n } else {\n t51 = $[88];\n }\n let t52;\n if ($[89] !== className || $[90] !== t36 || $[91] !== t37 || $[92] !== t43 || $[93] !== t51) {\n t52 = /*#__PURE__*/_jsxs(\"div\", {\n ref: containerRef,\n className: className,\n \"data-no-drag\": \"true\",\n style: t36,\n children: [t37, t43, t51]\n });\n $[89] = className;\n $[90] = t36;\n $[91] = t37;\n $[92] = t43;\n $[93] = t51;\n $[94] = t52;\n } else {\n t52 = $[94];\n }\n return t52;\n}","import { c as _c } from \"react/compiler-runtime\";\n/**\n * TouchActionButton Icons\n *\n * SVG icons used by the floating action button and its radial menu.\n */\n\nimport React from 'react';\nimport { jsx as _jsx, jsxs as _jsxs } from \"react/jsx-runtime\";\nexport function PlusIcon() {\n const $ = _c(1);\n let t0;\n if ($[0] === Symbol.for(\"react.memo_cache_sentinel\")) {\n t0 = /*#__PURE__*/_jsxs(\"svg\", {\n width: \"24\",\n height: \"24\",\n viewBox: \"0 0 24 24\",\n fill: \"none\",\n stroke: \"currentColor\",\n strokeWidth: \"2.5\",\n strokeLinecap: \"round\",\n children: [/*#__PURE__*/_jsx(\"line\", {\n x1: \"12\",\n y1: \"6\",\n x2: \"12\",\n y2: \"18\"\n }), /*#__PURE__*/_jsx(\"line\", {\n x1: \"6\",\n y1: \"12\",\n x2: \"18\",\n y2: \"12\"\n })]\n });\n $[0] = t0;\n } else {\n t0 = $[0];\n }\n return t0;\n}\nexport function MergeIcon() {\n const $ = _c(1);\n let t0;\n if ($[0] === Symbol.for(\"react.memo_cache_sentinel\")) {\n t0 = /*#__PURE__*/_jsxs(\"svg\", {\n width: \"20\",\n height: \"20\",\n viewBox: \"0 0 20 20\",\n fill: \"none\",\n stroke: \"currentColor\",\n strokeWidth: \"1.5\",\n strokeLinecap: \"round\",\n strokeLinejoin: \"round\",\n children: [/*#__PURE__*/_jsx(\"path\", {\n d: \"M6 4 L10 10 L6 16\"\n }), /*#__PURE__*/_jsx(\"path\", {\n d: \"M14 4 L10 10 L14 16\"\n })]\n });\n $[0] = t0;\n } else {\n t0 = $[0];\n }\n return t0;\n}\nexport function DuplicateIcon() {\n const $ = _c(1);\n let t0;\n if ($[0] === Symbol.for(\"react.memo_cache_sentinel\")) {\n t0 = /*#__PURE__*/_jsxs(\"svg\", {\n width: \"20\",\n height: \"20\",\n viewBox: \"0 0 20 20\",\n fill: \"none\",\n stroke: \"currentColor\",\n strokeWidth: \"1.5\",\n strokeLinecap: \"round\",\n strokeLinejoin: \"round\",\n children: [/*#__PURE__*/_jsx(\"rect\", {\n x: \"3\",\n y: \"5\",\n width: \"10\",\n height: \"10\",\n rx: \"2\"\n }), /*#__PURE__*/_jsx(\"rect\", {\n x: \"7\",\n y: \"5\",\n width: \"10\",\n height: \"10\",\n rx: \"2\"\n })]\n });\n $[0] = t0;\n } else {\n t0 = $[0];\n }\n return t0;\n}\nexport function SelectAllIcon() {\n const $ = _c(1);\n let t0;\n if ($[0] === Symbol.for(\"react.memo_cache_sentinel\")) {\n t0 = /*#__PURE__*/_jsxs(\"svg\", {\n width: \"20\",\n height: \"20\",\n viewBox: \"0 0 20 20\",\n fill: \"none\",\n stroke: \"currentColor\",\n strokeWidth: \"1.5\",\n strokeLinecap: \"round\",\n strokeLinejoin: \"round\",\n children: [/*#__PURE__*/_jsx(\"rect\", {\n x: \"3\",\n y: \"3\",\n width: \"14\",\n height: \"14\",\n rx: \"2\",\n strokeDasharray: \"3 2\"\n }), /*#__PURE__*/_jsx(\"polyline\", {\n points: \"7 10 9 12 13 8\"\n })]\n });\n $[0] = t0;\n } else {\n t0 = $[0];\n }\n return t0;\n}\nexport function SearchIcon() {\n const $ = _c(1);\n let t0;\n if ($[0] === Symbol.for(\"react.memo_cache_sentinel\")) {\n t0 = /*#__PURE__*/_jsxs(\"svg\", {\n width: \"20\",\n height: \"20\",\n viewBox: \"0 0 20 20\",\n fill: \"none\",\n stroke: \"currentColor\",\n strokeWidth: \"1.5\",\n strokeLinecap: \"round\",\n children: [/*#__PURE__*/_jsx(\"circle\", {\n cx: \"9\",\n cy: \"9\",\n r: \"5\"\n }), /*#__PURE__*/_jsx(\"line\", {\n x1: \"13\",\n y1: \"13\",\n x2: \"17\",\n y2: \"17\"\n })]\n });\n $[0] = t0;\n } else {\n t0 = $[0];\n }\n return t0;\n}\nexport function UndoIcon() {\n const $ = _c(1);\n let t0;\n if ($[0] === Symbol.for(\"react.memo_cache_sentinel\")) {\n t0 = /*#__PURE__*/_jsxs(\"svg\", {\n width: \"20\",\n height: \"20\",\n viewBox: \"0 0 20 20\",\n fill: \"none\",\n stroke: \"currentColor\",\n strokeWidth: \"1.5\",\n strokeLinecap: \"round\",\n strokeLinejoin: \"round\",\n children: [/*#__PURE__*/_jsx(\"polyline\", {\n points: \"5 9 2 6 5 3\"\n }), /*#__PURE__*/_jsx(\"path\", {\n d: \"M2 6h10a5 5 0 0 1 0 10H8\"\n })]\n });\n $[0] = t0;\n } else {\n t0 = $[0];\n }\n return t0;\n}\nexport function RedoIcon() {\n const $ = _c(1);\n let t0;\n if ($[0] === Symbol.for(\"react.memo_cache_sentinel\")) {\n t0 = /*#__PURE__*/_jsxs(\"svg\", {\n width: \"20\",\n height: \"20\",\n viewBox: \"0 0 20 20\",\n fill: \"none\",\n stroke: \"currentColor\",\n strokeWidth: \"1.5\",\n strokeLinecap: \"round\",\n strokeLinejoin: \"round\",\n children: [/*#__PURE__*/_jsx(\"polyline\", {\n points: \"15 9 18 6 15 3\"\n }), /*#__PURE__*/_jsx(\"path\", {\n d: \"M18 6H8a5 5 0 0 0 0 10h4\"\n })]\n });\n $[0] = t0;\n } else {\n t0 = $[0];\n }\n return t0;\n}","import { c as _c } from \"react/compiler-runtime\";\n/**\n * Radial Menu\n *\n * Layout computation and rendering for the radial menu items\n * around the floating action button.\n */\n\nimport React from 'react';\n\n// =============================================================================\n// Types\n// =============================================================================\nimport { jsx as _jsx, jsxs as _jsxs } from \"react/jsx-runtime\";\n// =============================================================================\n// Constants\n// =============================================================================\n\nexport const FAB_SIZE = 56;\nexport const ITEM_SIZE = 48;\nconst STAGGER_MS = 35;\n\n// =============================================================================\n// Layout\n// =============================================================================\n\nexport function getRadialPositions(count, radius, position) {\n let startAngle;\n let endAngle;\n switch (position) {\n case 'bottom-left':\n startAngle = -20;\n endAngle = -160;\n break;\n case 'bottom-right':\n startAngle = -160;\n endAngle = -20;\n break;\n case 'top-left':\n startAngle = 20;\n endAngle = 160;\n break;\n case 'top-right':\n startAngle = 160;\n endAngle = 20;\n break;\n default:\n startAngle = -20;\n endAngle = -160;\n }\n const positions = [];\n for (let i = 0; i < count; i++) {\n const t = count === 1 ? 0.5 : i / (count - 1);\n const angleDeg = startAngle + (endAngle - startAngle) * t;\n const angleRad = angleDeg * Math.PI / 180;\n positions.push({\n dx: Math.cos(angleRad) * radius,\n dy: Math.sin(angleRad) * radius,\n angle: angleDeg\n });\n }\n return positions;\n}\n\n// =============================================================================\n// Position Styles\n// =============================================================================\n\nexport function getPositionStyles(position) {\n switch (position) {\n case 'bottom-left':\n return {\n bottom: 'max(16px, env(safe-area-inset-bottom, 16px))',\n left: 'max(16px, env(safe-area-inset-left, 16px))'\n };\n case 'bottom-right':\n return {\n bottom: 'max(16px, env(safe-area-inset-bottom, 16px))',\n right: 'max(16px, env(safe-area-inset-right, 16px))'\n };\n case 'top-left':\n return {\n top: 'max(16px, env(safe-area-inset-top, 16px))',\n left: 'max(16px, env(safe-area-inset-left, 16px))'\n };\n case 'top-right':\n return {\n top: 'max(16px, env(safe-area-inset-top, 16px))',\n right: 'max(16px, env(safe-area-inset-right, 16px))'\n };\n default:\n return {\n bottom: 'max(16px, env(safe-area-inset-bottom, 16px))',\n left: 'max(16px, env(safe-area-inset-left, 16px))'\n };\n }\n}\n\n// =============================================================================\n// RadialMenuItem\n// =============================================================================\n\nexport function RadialMenuItem(t0) {\n const $ = _c(31);\n const {\n item,\n position: pos,\n index: i,\n totalItems,\n isOpen,\n isHighlighted,\n onTap\n } = t0;\n const deployed = isOpen;\n const t1 = deployed ? `translate(${pos.dx}px, ${pos.dy}px) scale(1)` : \"translate(0, 0) scale(0)\";\n const t2 = deployed ? item.disabled ? 0.35 : 1 : 0;\n const t3 = deployed ? `transform 320ms cubic-bezier(0.34, 1.56, 0.64, 1) ${i * STAGGER_MS}ms, opacity 200ms ease ${i * STAGGER_MS}ms` : `transform 200ms cubic-bezier(0.55, 0, 1, 0.45) ${(totalItems - 1 - i) * 20}ms, opacity 150ms ease ${(totalItems - 1 - i) * 20}ms`;\n const t4 = deployed ? \"auto\" : \"none\";\n let t5;\n if ($[0] !== t1 || $[1] !== t2 || $[2] !== t3 || $[3] !== t4) {\n t5 = {\n position: \"absolute\",\n left: FAB_SIZE / 2 - ITEM_SIZE / 2,\n top: FAB_SIZE / 2 - ITEM_SIZE / 2,\n transform: t1,\n opacity: t2,\n transition: t3,\n pointerEvents: t4,\n willChange: \"transform, opacity\"\n };\n $[0] = t1;\n $[1] = t2;\n $[2] = t3;\n $[3] = t4;\n $[4] = t5;\n } else {\n t5 = $[4];\n }\n let t6;\n if ($[5] !== item || $[6] !== onTap) {\n t6 = () => onTap(item);\n $[5] = item;\n $[6] = onTap;\n $[7] = t6;\n } else {\n t6 = $[7];\n }\n const t7 = `1.5px solid ${isHighlighted ? \"rgba(99,160,255,0.5)\" : \"var(--canvas-control-border, rgba(255,255,255,0.12))\"}`;\n const t8 = isHighlighted ? \"var(--canvas-control-active-bg, rgba(59,130,246,0.9))\" : \"var(--canvas-control-bg, rgba(30,30,30,0.88))\";\n const t9 = item.disabled ? \"default\" : \"pointer\";\n const t10 = isHighlighted ? \"scale(1.18)\" : \"scale(1)\";\n const t11 = isHighlighted ? \"0 0 0 3px rgba(59,130,246,0.25), 0 4px 16px rgba(59,130,246,0.35)\" : \"0 2px 8px rgba(0,0,0,0.35)\";\n let t12;\n if ($[8] !== t10 || $[9] !== t11 || $[10] !== t7 || $[11] !== t8 || $[12] !== t9) {\n t12 = {\n width: ITEM_SIZE,\n height: ITEM_SIZE,\n borderRadius: \"50%\",\n border: t7,\n backgroundColor: t8,\n color: \"var(--canvas-control-fg, rgba(255,255,255,0.9))\",\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"center\",\n cursor: t9,\n touchAction: \"manipulation\",\n WebkitTapHighlightColor: \"transparent\",\n userSelect: \"none\",\n backdropFilter: \"blur(16px) saturate(1.5)\",\n WebkitBackdropFilter: \"blur(16px) saturate(1.5)\",\n padding: 0,\n transition: \"background-color 180ms ease, border-color 180ms ease, transform 180ms cubic-bezier(0.34, 1.2, 0.64, 1), box-shadow 250ms ease\",\n transform: t10,\n boxShadow: t11\n };\n $[8] = t10;\n $[9] = t11;\n $[10] = t7;\n $[11] = t8;\n $[12] = t9;\n $[13] = t12;\n } else {\n t12 = $[13];\n }\n let t13;\n if ($[14] !== item.disabled || $[15] !== item.icon || $[16] !== item.label || $[17] !== t12 || $[18] !== t6) {\n t13 = /*#__PURE__*/_jsx(\"button\", {\n onPointerUp: t6,\n disabled: item.disabled,\n \"aria-label\": item.label,\n \"data-no-drag\": \"true\",\n style: t12,\n children: item.icon\n });\n $[14] = item.disabled;\n $[15] = item.icon;\n $[16] = item.label;\n $[17] = t12;\n $[18] = t6;\n $[19] = t13;\n } else {\n t13 = $[19];\n }\n const t14 = isHighlighted ? 1 : 0;\n const t15 = isHighlighted ? \"translateX(-50%) translateY(0)\" : \"translateX(-50%) translateY(4px)\";\n let t16;\n if ($[20] !== t14 || $[21] !== t15) {\n t16 = {\n position: \"absolute\",\n top: -24,\n left: \"50%\",\n fontSize: \"11px\",\n fontWeight: 600,\n letterSpacing: \"0.02em\",\n color: \"var(--canvas-control-fg, rgba(255,255,255,0.95))\",\n backgroundColor: \"var(--canvas-control-bg, rgba(20,20,20,0.92))\",\n backdropFilter: \"blur(12px)\",\n WebkitBackdropFilter: \"blur(12px)\",\n padding: \"3px 9px\",\n borderRadius: \"7px\",\n whiteSpace: \"nowrap\",\n pointerEvents: \"none\",\n opacity: t14,\n transform: t15,\n transition: \"opacity 150ms ease, transform 150ms ease\"\n };\n $[20] = t14;\n $[21] = t15;\n $[22] = t16;\n } else {\n t16 = $[22];\n }\n let t17;\n if ($[23] !== item.label || $[24] !== t16) {\n t17 = /*#__PURE__*/_jsx(\"span\", {\n style: t16,\n children: item.label\n });\n $[23] = item.label;\n $[24] = t16;\n $[25] = t17;\n } else {\n t17 = $[25];\n }\n let t18;\n if ($[26] !== item.id || $[27] !== t13 || $[28] !== t17 || $[29] !== t5) {\n t18 = /*#__PURE__*/_jsxs(\"div\", {\n style: t5,\n children: [t13, t17]\n }, item.id);\n $[26] = item.id;\n $[27] = t13;\n $[28] = t17;\n $[29] = t5;\n $[30] = t18;\n } else {\n t18 = $[30];\n }\n return t18;\n}","/**\n * Canvas Toast\n *\n * Non-interactive overlay that shows brief feedback messages\n * (e.g., \"Undo: Split node\"). Positioned at bottom-center.\n * Fades in/out with CSS transitions.\n */\n\n'use client';\n\nimport { c as _c } from \"react/compiler-runtime\";\nimport React from 'react';\nimport { useAtomValue } from 'jotai';\nimport { canvasToastAtom } from '../core/toast-store';\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nexport function CanvasToast(t0) {\n const $ = _c(12);\n const {\n className,\n style\n } = t0;\n const toast = useAtomValue(canvasToastAtom);\n let t1;\n if ($[0] !== style) {\n t1 = {\n position: \"absolute\",\n bottom: \"24px\",\n left: \"50%\",\n transform: \"translateX(-50%)\",\n zIndex: 200,\n pointerEvents: \"none\",\n ...style\n };\n $[0] = style;\n $[1] = t1;\n } else {\n t1 = $[1];\n }\n const t2 = toast ? 1 : 0;\n const t3 = toast ? \"translateY(0)\" : \"translateY(8px)\";\n let t4;\n if ($[2] !== t2 || $[3] !== t3) {\n t4 = {\n fontSize: \"13px\",\n fontWeight: 500,\n color: \"var(--canvas-control-fg, rgba(255,255,255,0.95))\",\n backgroundColor: \"var(--canvas-control-bg, rgba(30,30,30,0.92))\",\n backdropFilter: \"blur(12px)\",\n WebkitBackdropFilter: \"blur(12px)\",\n border: \"1px solid var(--canvas-control-border, rgba(255,255,255,0.1))\",\n padding: \"6px 16px\",\n borderRadius: \"8px\",\n whiteSpace: \"nowrap\",\n opacity: t2,\n transform: t3,\n transition: \"opacity 200ms ease, transform 200ms ease\"\n };\n $[2] = t2;\n $[3] = t3;\n $[4] = t4;\n } else {\n t4 = $[4];\n }\n const t5 = toast?.message ?? \"\";\n let t6;\n if ($[5] !== t4 || $[6] !== t5) {\n t6 = /*#__PURE__*/_jsx(\"div\", {\n style: t4,\n children: t5\n });\n $[5] = t4;\n $[6] = t5;\n $[7] = t6;\n } else {\n t6 = $[7];\n }\n let t7;\n if ($[8] !== className || $[9] !== t1 || $[10] !== t6) {\n t7 = /*#__PURE__*/_jsx(\"div\", {\n className: className,\n style: t1,\n children: t6\n });\n $[8] = className;\n $[9] = t1;\n $[10] = t6;\n $[11] = t7;\n } else {\n t7 = $[11];\n }\n return t7;\n}","/**\n * Alignment Guides\n *\n * Renders thin colored lines across the viewport when the dragged node\n * aligns with edges/centers of other nodes. Only visible during drag.\n */\n\n'use client';\n\nimport { c as _c } from \"react/compiler-runtime\";\nimport React from 'react';\nimport { useAtomValue } from 'jotai';\nimport { alignmentGuidesAtom } from '../core/snap-store';\nimport { panAtom, zoomAtom, viewportRectAtom } from '../core/viewport-store';\nimport { jsx as _jsx, jsxs as _jsxs } from \"react/jsx-runtime\";\nconst GUIDE_COLOR = 'rgba(99, 160, 255, 0.6)';\n\n/**\n * Renders alignment guide lines in canvas world space.\n * Mount inside the Viewport transform container.\n */\nexport function AlignmentGuides() {\n const $ = _c(22);\n const guides = useAtomValue(alignmentGuidesAtom);\n const pan = useAtomValue(panAtom);\n const zoom = useAtomValue(zoomAtom);\n const viewportRect = useAtomValue(viewportRectAtom);\n const hasGuides = guides.verticalGuides.length > 0 || guides.horizontalGuides.length > 0;\n if (!hasGuides || !viewportRect) {\n return null;\n }\n const worldMinX = -pan.x / zoom;\n const worldMinY = -pan.y / zoom;\n const worldMaxX = worldMinX + viewportRect.width / zoom;\n const worldMaxY = worldMinY + viewportRect.height / zoom;\n let t0;\n if ($[0] === Symbol.for(\"react.memo_cache_sentinel\")) {\n t0 = {\n position: \"absolute\",\n left: 0,\n top: 0,\n width: \"100%\",\n height: \"100%\",\n pointerEvents: \"none\",\n overflow: \"visible\",\n zIndex: 999\n };\n $[0] = t0;\n } else {\n t0 = $[0];\n }\n let t1;\n if ($[1] !== guides.verticalGuides || $[2] !== worldMaxY || $[3] !== worldMinY || $[4] !== zoom) {\n let t2;\n if ($[6] !== worldMaxY || $[7] !== worldMinY || $[8] !== zoom) {\n t2 = (x, i) => /*#__PURE__*/_jsx(\"line\", {\n x1: x,\n y1: worldMinY,\n x2: x,\n y2: worldMaxY,\n stroke: GUIDE_COLOR,\n strokeWidth: 1 / zoom,\n strokeDasharray: `${4 / zoom} ${4 / zoom}`\n }, `v-${i}`);\n $[6] = worldMaxY;\n $[7] = worldMinY;\n $[8] = zoom;\n $[9] = t2;\n } else {\n t2 = $[9];\n }\n t1 = guides.verticalGuides.map(t2);\n $[1] = guides.verticalGuides;\n $[2] = worldMaxY;\n $[3] = worldMinY;\n $[4] = zoom;\n $[5] = t1;\n } else {\n t1 = $[5];\n }\n let t2;\n if ($[10] !== guides.horizontalGuides || $[11] !== worldMaxX || $[12] !== worldMinX || $[13] !== zoom) {\n let t3;\n if ($[15] !== worldMaxX || $[16] !== worldMinX || $[17] !== zoom) {\n t3 = (y, i_0) => /*#__PURE__*/_jsx(\"line\", {\n x1: worldMinX,\n y1: y,\n x2: worldMaxX,\n y2: y,\n stroke: GUIDE_COLOR,\n strokeWidth: 1 / zoom,\n strokeDasharray: `${4 / zoom} ${4 / zoom}`\n }, `h-${i_0}`);\n $[15] = worldMaxX;\n $[16] = worldMinX;\n $[17] = zoom;\n $[18] = t3;\n } else {\n t3 = $[18];\n }\n t2 = guides.horizontalGuides.map(t3);\n $[10] = guides.horizontalGuides;\n $[11] = worldMaxX;\n $[12] = worldMinX;\n $[13] = zoom;\n $[14] = t2;\n } else {\n t2 = $[14];\n }\n let t3;\n if ($[19] !== t1 || $[20] !== t2) {\n t3 = /*#__PURE__*/_jsxs(\"svg\", {\n style: t0,\n children: [t1, t2]\n });\n $[19] = t1;\n $[20] = t2;\n $[21] = t3;\n } else {\n t3 = $[21];\n }\n return t3;\n}","/**\n * NoteNode Component\n *\n * A rich text note editor node using BlockNote.\n * Storage-agnostic - accepts a storage adapter for any backend.\n */\n\n'use client';\n\nimport React, { useEffect, useRef } from 'react';\nimport { useCreateBlockNote, useEditorChange } from '@blocknote/react';\nimport { BlockNoteView } from '@blocknote/shadcn';\nimport { en } from '@blocknote/core/locales';\nimport { createDebug } from '../../utils/debug';\nconst debug = createDebug('note-node');\n\n// CSS imports - consumers must ensure these are available\nimport '@blocknote/core/fonts/inter.css';\nimport '@blocknote/shadcn/style.css';\n\n/**\n * NoteNode - A rich text editor node for canvas.\n *\n * Uses BlockNote for the editor and accepts a storage adapter\n * for persistence. This allows it to work with any backend:\n * Jazz, Supabase, local state, etc.\n *\n * @example\n * ```tsx\n * // With Jazz storage\n * \n *\n * // With local state\n * const [content, setContent] = useState('');\n * \n * ```\n */\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nexport function NoteNode({\n nodeData,\n storage,\n theme = 'light',\n placeholder = 'Start typing...',\n isResizing\n}) {\n // Refs to prevent sync loops between editor and storage\n const isSyncingFromStorage = useRef(false);\n const isSyncingToStorage = useRef(false);\n const lastStorageContent = useRef('');\n\n // Create BlockNote editor\n const editor = useCreateBlockNote({\n initialContent: [{\n id: crypto.randomUUID(),\n type: 'paragraph',\n content: ''\n }],\n dictionary: {\n ...en,\n placeholders: {\n ...en.placeholders,\n emptyDocument: placeholder,\n default: placeholder,\n heading: 'Enter a heading'\n }\n }\n }, []);\n\n // Sync editor changes → storage\n useEditorChange(() => {\n if (isSyncingFromStorage.current) {\n return;\n }\n try {\n isSyncingToStorage.current = true;\n const html = editor.blocksToFullHTML(editor.document);\n if (html !== lastStorageContent.current) {\n lastStorageContent.current = html;\n storage.onChange(html);\n }\n } catch (err) {\n debug.error('Failed to sync to storage: %O', err);\n } finally {\n isSyncingToStorage.current = false;\n }\n }, editor);\n\n // Sync storage changes → editor (for real-time sync)\n useEffect(() => {\n if (!editor) return;\n const handleStorageChange = newContent => {\n if (isSyncingToStorage.current) {\n return;\n }\n\n // Throttle to next microtask to avoid invalid intermediate states\n queueMicrotask(() => {\n if (newContent === lastStorageContent.current) return;\n lastStorageContent.current = newContent;\n if (newContent && newContent.trim()) {\n try {\n isSyncingFromStorage.current = true;\n const blocks = editor.tryParseHTMLToBlocks(newContent);\n editor.replaceBlocks(editor.document, blocks);\n } catch (err_0) {\n debug.error('Failed to parse HTML from storage: %O', err_0);\n } finally {\n isSyncingFromStorage.current = false;\n }\n }\n });\n };\n\n // Subscribe to external changes if available\n const unsubscribe = storage.subscribe?.(handleStorageChange);\n\n // Initial sync from storage\n if (storage.content && storage.content !== lastStorageContent.current) {\n handleStorageChange(storage.content);\n }\n return () => {\n unsubscribe?.();\n };\n }, [editor, storage]);\n\n // Show loading state if storage is loading\n if (storage.isLoading) {\n return /*#__PURE__*/_jsx(\"div\", {\n className: \"note-node note-node--loading\",\n style: styles.loading,\n children: \"Loading...\"\n });\n }\n return /*#__PURE__*/_jsx(\"div\", {\n className: \"note-node\",\n style: styles.container,\n \"data-no-drag\": \"true\",\n onClick: e => {\n e.stopPropagation();\n },\n children: /*#__PURE__*/_jsx(BlockNoteView, {\n editor: editor,\n theme: theme\n })\n });\n}\nconst styles = {\n container: {\n height: '100%',\n width: '100%',\n overflow: 'auto',\n touchAction: 'auto'\n },\n loading: {\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n height: '100%',\n color: '#666'\n }\n};\nexport default NoteNode;","/**\n * Commands Module\n *\n * Provides a command palette system with:\n * - Sequential input collection\n * - Visual feedback during input\n * - Keyboard shortcuts\n * - Extensible command registry\n */\n\n// Types (only export command-specific types; InputMode, Point, SelectOption, FeedbackState come from core)\n\n// Registry\nexport { commandRegistry, registerCommand } from './registry';\n\n// Store atoms (inputModeAtom, pendingInputResolverAtom, provideInputAtom come from core)\nexport {\n// Core state (command-specific)\ncommandLineVisibleAtom, commandLineStateAtom, commandFeedbackAtom, commandHistoryAtom, selectedSuggestionIndexAtom,\n// Action atoms\nopenCommandLineAtom, closeCommandLineAtom, updateSearchQueryAtom, selectCommandAtom, skipInputAtom, goBackInputAtom, setCommandErrorAtom, clearCommandErrorAtom,\n// Derived atoms\nisCommandActiveAtom, currentInputAtom, commandProgressAtom } from './store';\n\n// Keyboard\nexport { useGlobalKeyboard, useKeyState, DEFAULT_SHORTCUTS } from './keyboard';\n\n// Executor\nexport { collectInput, executeCommandInteractive, handlePickedPoint, handlePickedNode, cancelCommand } from './executor';\n\n// Provider\nexport { CommandProvider, useCommandContext, useExecuteCommand } from './CommandProvider';\n\n// Built-in commands\nexport {\n// Viewport commands\nfitToViewCommand, fitSelectionCommand, resetViewportCommand, zoomInCommand, zoomOutCommand, registerViewportCommands,\n// Selection commands\nselectAllCommand, clearSelectionCommand, invertSelectionCommand, registerSelectionCommands,\n// History commands\nundoCommand, redoCommand, registerHistoryCommands,\n// Layout commands\nforceLayoutCommand, registerLayoutCommands,\n// Clipboard commands\ncopyCommand, cutCommand, pasteCommand, duplicateCommand, deleteSelectedCommand, registerClipboardCommands,\n// Register all at once\nregisterBuiltinCommands } from './builtins';","/**\n * Legacy keyboard hook surface.\n *\n * Keyboard ownership now lives in the shared input runtime under\n * `InputProvider`. These exports remain as no-op compatibility shims\n * for callers that still mount them.\n */\n\n'use client';\n\nexport const DEFAULT_SHORTCUTS = {\n openCommandLine: '/',\n closeCommandLine: 'Escape',\n clearSelection: 'Escape',\n copy: 'ctrl+c',\n cut: 'ctrl+x',\n paste: 'ctrl+v',\n duplicate: 'ctrl+d',\n selectAll: 'ctrl+a',\n delete: 'Delete',\n search: 'ctrl+f',\n nextSearchResult: 'Enter',\n prevSearchResult: 'shift+Enter',\n nextSearchResultAlt: 'ctrl+g',\n prevSearchResultAlt: 'ctrl+shift+g',\n mergeNodes: 'ctrl+m'\n};\nexport function useGlobalKeyboard(_options) {\n // Shared input owns all canvas keyboard listeners now.\n}\nexport function useKeyState(_key) {\n return false;\n}","/**\n * Command Executor\n *\n * Helper functions for executing commands and handling input collection.\n */\n\nimport { commandLineStateAtom, provideInputAtom, closeCommandLineAtom } from './store';\n\n/**\n * Collects a single input from the user.\n * Currently rejects immediately — interactive input collection\n * is not yet implemented. Pre-fill all inputs via `initialInputs`.\n */\nexport function collectInput(_get, _set, _inputDef, _collected) {\n return Promise.reject(new Error('Interactive input collection is not yet implemented. Pre-fill all inputs via initialInputs.'));\n}\n\n/**\n * Execute a command with interactive input collection.\n * This is the main entry point for running commands from the UI.\n */\nexport async function executeCommandInteractive(get, set, command, initialInputs) {\n const collected = {\n ...initialInputs\n };\n\n // Collect each required input\n for (let i = 0; i < command.inputs.length; i++) {\n const inputDef = command.inputs[i];\n\n // Skip if already provided\n if (collected[inputDef.name] !== undefined) {\n continue;\n }\n\n // Use default if optional and no input needed\n if (inputDef.required === false && inputDef.default !== undefined) {\n collected[inputDef.name] = inputDef.default;\n continue;\n }\n\n // Update state to collecting this input\n set(commandLineStateAtom, {\n phase: 'collecting',\n command,\n inputIndex: i,\n collected\n });\n\n // Wait for user to provide input\n const value = await collectInput(get, set, inputDef, collected);\n collected[inputDef.name] = value;\n }\n\n // All inputs collected, execute\n set(commandLineStateAtom, {\n phase: 'executing',\n command\n });\n\n // The actual execution will be handled by the context provider\n // which has access to the mutations\n}\n\n/**\n * Handle a picked point from the canvas.\n * Called by Viewport when user clicks while in pickPoint mode.\n */\nexport function handlePickedPoint(set, point) {\n set(provideInputAtom, point);\n}\n\n/**\n * Handle a picked node from the canvas.\n * Called by Node component when user clicks while in pickNode mode.\n */\nexport function handlePickedNode(set, node) {\n set(provideInputAtom, node);\n}\n\n/**\n * Cancel the current command.\n */\nexport function cancelCommand(set) {\n set(closeCommandLineAtom);\n}","/**\n * CommandProvider Component\n *\n * Provides command execution context with callback-based mutations.\n * Apps provide their own mutation callbacks (e.g., from React Query)\n * instead of the canvas package hardcoding them.\n */\n\n'use client';\n\nimport { c as _c } from \"react/compiler-runtime\";\nimport React, { createContext, useContext, useEffect, useRef } from 'react';\nimport { useAtomValue, useSetAtom, useAtom } from 'jotai';\nimport { useStore } from 'jotai';\n\n// Canvas core state\nimport { currentGraphIdAtom } from '../core/graph-store';\nimport { selectedNodeIdsAtom } from '../core/selection-store';\nimport { zoomAtom, panAtom } from '../core/viewport-store';\nimport { undoAtom, redoAtom } from '../core/history-store';\n\n// Command system\n\nimport { commandLineStateAtom, inputModeAtom, commandFeedbackAtom, closeCommandLineAtom, setCommandErrorAtom } from './store';\nimport { commandRegistry } from './registry';\n\n// Layout hooks\nimport { useFitToBounds, FitToBoundsMode } from '../hooks/useLayout';\nimport { useForceLayout } from '../hooks/useForceLayout';\nimport { useTreeLayout } from '../hooks/useTreeLayout';\nimport { useGridLayout } from '../hooks/useGridLayout';\n\n// =============================================================================\n// Props Types\n// =============================================================================\n\n// =============================================================================\n// Context Type\n// =============================================================================\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nconst CommandContextContext = /*#__PURE__*/createContext(null);\n\n// =============================================================================\n// Provider Component\n// =============================================================================\n\nexport function CommandProvider(t0) {\n const $ = _c(52);\n const {\n children,\n onCreateNode,\n onUpdateNode,\n onDeleteNode,\n onCreateEdge,\n onDeleteEdge,\n onForceLayoutPersist\n } = t0;\n const store = useStore();\n const currentGraphId = useAtomValue(currentGraphIdAtom);\n const selectedNodeIds = useAtomValue(selectedNodeIdsAtom);\n const zoom = useAtomValue(zoomAtom);\n const pan = useAtomValue(panAtom);\n const undo = useSetAtom(undoAtom);\n const redo = useSetAtom(redoAtom);\n const {\n fitToBounds\n } = useFitToBounds();\n let t1;\n if ($[0] !== onForceLayoutPersist) {\n t1 = onForceLayoutPersist ? async updates => {\n await onForceLayoutPersist(updates.map(_temp));\n } : undefined;\n $[0] = onForceLayoutPersist;\n $[1] = t1;\n } else {\n t1 = $[1];\n }\n const persistCallback = t1;\n let t2;\n if ($[2] !== persistCallback) {\n t2 = {\n onPositionsChanged: persistCallback\n };\n $[2] = persistCallback;\n $[3] = t2;\n } else {\n t2 = $[3];\n }\n const {\n applyForceLayout\n } = useForceLayout(t2);\n let t3;\n if ($[4] !== persistCallback) {\n t3 = {\n onPositionsChanged: persistCallback\n };\n $[4] = persistCallback;\n $[5] = t3;\n } else {\n t3 = $[5];\n }\n const {\n applyLayout: applyTreeLayoutTopDown\n } = useTreeLayout(t3);\n let t4;\n if ($[6] !== persistCallback) {\n t4 = {\n direction: \"left-right\",\n onPositionsChanged: persistCallback\n };\n $[6] = persistCallback;\n $[7] = t4;\n } else {\n t4 = $[7];\n }\n const {\n applyLayout: applyTreeLayoutLeftRight\n } = useTreeLayout(t4);\n let t5;\n if ($[8] !== persistCallback) {\n t5 = {\n onPositionsChanged: persistCallback\n };\n $[8] = persistCallback;\n $[9] = t5;\n } else {\n t5 = $[9];\n }\n const {\n applyLayout: applyGridLayoutDefault\n } = useGridLayout(t5);\n const closeCommandLine = useSetAtom(closeCommandLineAtom);\n const setCommandError = useSetAtom(setCommandErrorAtom);\n let t6;\n if ($[10] !== applyForceLayout || $[11] !== applyGridLayoutDefault || $[12] !== applyTreeLayoutLeftRight || $[13] !== applyTreeLayoutTopDown || $[14] !== currentGraphId || $[15] !== fitToBounds || $[16] !== onCreateEdge || $[17] !== onCreateNode || $[18] !== onDeleteEdge || $[19] !== onDeleteNode || $[20] !== onUpdateNode || $[21] !== pan || $[22] !== redo || $[23] !== selectedNodeIds || $[24] !== store.get || $[25] !== store.set || $[26] !== undo || $[27] !== zoom) {\n t6 = () => ({\n get: store.get,\n set: store.set,\n currentGraphId,\n selectedNodeIds,\n viewport: {\n zoom,\n pan\n },\n mutations: {\n createNode: async payload => {\n if (!onCreateNode) {\n throw new Error(\"onCreateNode callback not provided to CommandProvider\");\n }\n return onCreateNode(payload);\n },\n updateNode: async (nodeId, updates_0) => {\n if (!onUpdateNode) {\n throw new Error(\"onUpdateNode callback not provided to CommandProvider\");\n }\n return onUpdateNode(nodeId, updates_0);\n },\n deleteNode: async nodeId_0 => {\n if (!onDeleteNode) {\n throw new Error(\"onDeleteNode callback not provided to CommandProvider\");\n }\n return onDeleteNode(nodeId_0);\n },\n createEdge: async payload_0 => {\n if (!onCreateEdge) {\n throw new Error(\"onCreateEdge callback not provided to CommandProvider\");\n }\n return onCreateEdge(payload_0);\n },\n deleteEdge: async edgeId => {\n if (!onDeleteEdge) {\n throw new Error(\"onDeleteEdge callback not provided to CommandProvider\");\n }\n return onDeleteEdge(edgeId);\n }\n },\n layout: {\n fitToBounds: (mode, padding) => {\n const fitMode = mode === \"graph\" ? FitToBoundsMode.Graph : FitToBoundsMode.Selection;\n fitToBounds(fitMode, padding);\n },\n applyForceLayout,\n applyTreeLayout: async opts => {\n if (opts?.direction === \"left-right\") {\n await applyTreeLayoutLeftRight();\n } else {\n await applyTreeLayoutTopDown();\n }\n },\n applyGridLayout: async () => {\n await applyGridLayoutDefault();\n }\n },\n history: {\n undo,\n redo\n }\n });\n $[10] = applyForceLayout;\n $[11] = applyGridLayoutDefault;\n $[12] = applyTreeLayoutLeftRight;\n $[13] = applyTreeLayoutTopDown;\n $[14] = currentGraphId;\n $[15] = fitToBounds;\n $[16] = onCreateEdge;\n $[17] = onCreateNode;\n $[18] = onDeleteEdge;\n $[19] = onDeleteNode;\n $[20] = onUpdateNode;\n $[21] = pan;\n $[22] = redo;\n $[23] = selectedNodeIds;\n $[24] = store.get;\n $[25] = store.set;\n $[26] = undo;\n $[27] = zoom;\n $[28] = t6;\n } else {\n t6 = $[28];\n }\n const getContext = t6;\n let t7;\n if ($[29] !== closeCommandLine || $[30] !== getContext || $[31] !== setCommandError) {\n t7 = async (commandName, inputs) => {\n const command = commandRegistry.get(commandName);\n if (!command) {\n throw new Error(`Unknown command: ${commandName}`);\n }\n for (const inputDef of command.inputs) {\n if (inputDef.required !== false && inputs[inputDef.name] === undefined) {\n throw new Error(`Missing required input: ${inputDef.name}`);\n }\n }\n const ctx = getContext();\n ;\n try {\n await command.execute(inputs, ctx);\n closeCommandLine();\n } catch (t8) {\n const error = t8;\n const message = error instanceof Error ? error.message : \"Command execution failed\";\n setCommandError(message);\n throw error;\n }\n };\n $[29] = closeCommandLine;\n $[30] = getContext;\n $[31] = setCommandError;\n $[32] = t7;\n } else {\n t7 = $[32];\n }\n const executeCommand = t7;\n const hasCommand = _temp2;\n const [commandState, setCommandState] = useAtom(commandLineStateAtom);\n const isExecutingRef = useRef(false);\n let t8;\n if ($[33] !== commandState || $[34] !== getContext || $[35] !== setCommandError || $[36] !== setCommandState || $[37] !== store) {\n t8 = () => {\n if (commandState.phase === \"executing\" && !isExecutingRef.current) {\n const {\n command: command_0\n } = commandState;\n if (command_0.inputs.length === 0) {\n isExecutingRef.current = true;\n const ctx_0 = getContext();\n command_0.execute({}, ctx_0).then(() => {\n setCommandState({\n phase: \"searching\",\n query: \"\",\n suggestions: commandRegistry.all()\n });\n }).catch(error_0 => {\n const message_0 = error_0 instanceof Error ? error_0.message : \"Command execution failed\";\n setCommandError(message_0);\n }).finally(() => {\n isExecutingRef.current = false;\n });\n }\n return;\n }\n if (commandState.phase !== \"collecting\") {\n isExecutingRef.current = false;\n return;\n }\n const {\n command: command_1,\n inputIndex,\n collected\n } = commandState;\n const lastInputIndex = command_1.inputs.length - 1;\n const lastInput = command_1.inputs[lastInputIndex];\n if (inputIndex === lastInputIndex && collected[lastInput.name] !== undefined && !isExecutingRef.current) {\n isExecutingRef.current = true;\n setCommandState({\n phase: \"executing\",\n command: command_1\n });\n const ctx_1 = getContext();\n command_1.execute(collected, ctx_1).then(() => {\n setCommandState({\n phase: \"searching\",\n query: \"\",\n suggestions: commandRegistry.all()\n });\n store.set(inputModeAtom, {\n type: \"normal\"\n });\n store.set(commandFeedbackAtom, null);\n }).catch(error_1 => {\n const message_1 = error_1 instanceof Error ? error_1.message : \"Command execution failed\";\n setCommandError(message_1);\n }).finally(() => {\n isExecutingRef.current = false;\n });\n }\n };\n $[33] = commandState;\n $[34] = getContext;\n $[35] = setCommandError;\n $[36] = setCommandState;\n $[37] = store;\n $[38] = t8;\n } else {\n t8 = $[38];\n }\n let t9;\n if ($[39] !== closeCommandLine || $[40] !== commandState || $[41] !== getContext || $[42] !== setCommandError || $[43] !== setCommandState || $[44] !== store) {\n t9 = [commandState, getContext, closeCommandLine, setCommandError, setCommandState, store];\n $[39] = closeCommandLine;\n $[40] = commandState;\n $[41] = getContext;\n $[42] = setCommandError;\n $[43] = setCommandState;\n $[44] = store;\n $[45] = t9;\n } else {\n t9 = $[45];\n }\n useEffect(t8, t9);\n let t10;\n if ($[46] !== executeCommand || $[47] !== getContext) {\n t10 = {\n executeCommand,\n getContext,\n hasCommand\n };\n $[46] = executeCommand;\n $[47] = getContext;\n $[48] = t10;\n } else {\n t10 = $[48];\n }\n const value = t10;\n let t11;\n if ($[49] !== children || $[50] !== value) {\n t11 = /*#__PURE__*/_jsx(CommandContextContext, {\n value: value,\n children: children\n });\n $[49] = children;\n $[50] = value;\n $[51] = t11;\n } else {\n t11 = $[51];\n }\n return t11;\n}\n\n// =============================================================================\n// Hooks\n// =============================================================================\n\n/**\n * Hook to access the command context.\n * Must be used within a CommandProvider.\n */\nfunction _temp2(name) {\n return commandRegistry.has(name);\n}\nfunction _temp(u) {\n return {\n nodeId: u.nodeId,\n x: u.position.x,\n y: u.position.y\n };\n}\nexport function useCommandContext() {\n const context = useContext(CommandContextContext);\n if (!context) {\n throw new Error(\"useCommandContext must be used within a CommandProvider\");\n }\n return context;\n}\n\n/**\n * Hook to execute commands.\n * Returns a function that can be called with command name and inputs.\n */\nexport function useExecuteCommand() {\n const {\n executeCommand\n } = useCommandContext();\n return executeCommand;\n}","/**\n * Built-in Viewport Commands\n *\n * Commands for viewport manipulation:\n * - fitToView: Fit all nodes in view\n * - fitSelection: Fit selected nodes in view\n * - resetViewport: Reset zoom and pan\n * - zoomIn: Zoom in\n * - zoomOut: Zoom out\n */\n\nimport { registerCommand } from '../registry';\n\n/**\n * Fit all nodes in view\n */\nexport const fitToViewCommand = {\n name: 'fitToView',\n description: 'Fit all nodes in the viewport',\n aliases: ['fit', 'fitAll'],\n category: 'viewport',\n inputs: [],\n execute: async (_inputs, ctx) => {\n ctx.layout.fitToBounds('graph');\n }\n};\n\n/**\n * Fit selected nodes in view\n */\nexport const fitSelectionCommand = {\n name: 'fitSelection',\n description: 'Fit selected nodes in the viewport',\n aliases: ['fitSel'],\n category: 'viewport',\n inputs: [],\n execute: async (_inputs, ctx) => {\n if (ctx.selectedNodeIds.size === 0) {\n throw new Error('No nodes selected');\n }\n ctx.layout.fitToBounds('selection');\n }\n};\n\n/**\n * Reset viewport to default\n */\nexport const resetViewportCommand = {\n name: 'resetViewport',\n description: 'Reset zoom and pan to default',\n aliases: ['reset', 'home'],\n category: 'viewport',\n inputs: [],\n execute: async (_inputs, ctx) => {\n const {\n resetViewportAtom\n } = await import('../../core/viewport-store');\n ctx.set(resetViewportAtom);\n }\n};\n\n/**\n * Zoom in\n */\nexport const zoomInCommand = {\n name: 'zoomIn',\n description: 'Zoom in on the canvas',\n aliases: ['+', 'in'],\n category: 'viewport',\n inputs: [],\n execute: async (_inputs, ctx) => {\n const {\n zoomAtom,\n setZoomAtom\n } = await import('../../core/viewport-store');\n const currentZoom = ctx.get(zoomAtom);\n ctx.set(setZoomAtom, {\n zoom: Math.min(5, currentZoom * 1.25)\n });\n }\n};\n\n/**\n * Zoom out\n */\nexport const zoomOutCommand = {\n name: 'zoomOut',\n description: 'Zoom out on the canvas',\n aliases: ['-', 'out'],\n category: 'viewport',\n inputs: [],\n execute: async (_inputs, ctx) => {\n const {\n zoomAtom,\n setZoomAtom\n } = await import('../../core/viewport-store');\n const currentZoom = ctx.get(zoomAtom);\n ctx.set(setZoomAtom, {\n zoom: Math.max(0.1, currentZoom / 1.25)\n });\n }\n};\n\n/**\n * Register all viewport commands\n */\nexport function registerViewportCommands() {\n registerCommand(fitToViewCommand);\n registerCommand(fitSelectionCommand);\n registerCommand(resetViewportCommand);\n registerCommand(zoomInCommand);\n registerCommand(zoomOutCommand);\n}","/**\n * Built-in Selection Commands\n *\n * Commands for selection manipulation:\n * - selectAll: Select all nodes\n * - clearSelection: Clear selection\n * - invertSelection: Invert selection\n */\n\nimport { registerCommand } from '../registry';\n\n/**\n * Select all nodes\n */\nexport const selectAllCommand = {\n name: 'selectAll',\n description: 'Select all nodes in the graph',\n aliases: ['all'],\n category: 'selection',\n inputs: [],\n execute: async (_inputs, ctx) => {\n const {\n nodeKeysAtom,\n selectedNodeIdsAtom\n } = await import('../../core');\n const nodeKeys = ctx.get(nodeKeysAtom);\n ctx.set(selectedNodeIdsAtom, new Set(nodeKeys));\n }\n};\n\n/**\n * Clear selection\n */\nexport const clearSelectionCommand = {\n name: 'clearSelection',\n description: 'Clear all selection',\n aliases: ['deselect', 'clear'],\n category: 'selection',\n inputs: [],\n execute: async (_inputs, ctx) => {\n const {\n clearSelectionAtom\n } = await import('../../core');\n ctx.set(clearSelectionAtom);\n }\n};\n\n/**\n * Invert selection\n */\nexport const invertSelectionCommand = {\n name: 'invertSelection',\n description: 'Invert the current selection',\n aliases: ['invert'],\n category: 'selection',\n inputs: [],\n execute: async (_inputs, ctx) => {\n const {\n nodeKeysAtom,\n selectedNodeIdsAtom\n } = await import('../../core');\n const allNodeKeys = ctx.get(nodeKeysAtom);\n const currentSelection = ctx.selectedNodeIds;\n const invertedSelection = allNodeKeys.filter(id => !currentSelection.has(id));\n ctx.set(selectedNodeIdsAtom, new Set(invertedSelection));\n }\n};\n\n/**\n * Register all selection commands\n */\nexport function registerSelectionCommands() {\n registerCommand(selectAllCommand);\n registerCommand(clearSelectionCommand);\n registerCommand(invertSelectionCommand);\n}","/**\n * Built-in History Commands\n *\n * Commands for history manipulation:\n * - undo: Undo last action\n * - redo: Redo last undone action\n */\n\nimport { registerCommand } from '../registry';\n\n/**\n * Undo last action\n */\nexport const undoCommand = {\n name: 'undo',\n description: 'Undo the last action',\n aliases: ['z'],\n category: 'history',\n inputs: [],\n execute: async (_inputs, ctx) => {\n ctx.history.undo();\n }\n};\n\n/**\n * Redo last undone action\n */\nexport const redoCommand = {\n name: 'redo',\n description: 'Redo the last undone action',\n aliases: ['y'],\n category: 'history',\n inputs: [],\n execute: async (_inputs, ctx) => {\n ctx.history.redo();\n }\n};\n\n/**\n * Register all history commands\n */\nexport function registerHistoryCommands() {\n registerCommand(undoCommand);\n registerCommand(redoCommand);\n}","/**\n * Built-in Layout Commands\n *\n * Commands for layout operations:\n * - forceLayout: Apply force-directed layout\n * - treeLayout: Hierarchical tree (top-down)\n * - gridLayout: Uniform grid\n * - horizontalLayout: Tree (left-to-right)\n */\n\nimport { registerCommand } from '../registry';\nexport const forceLayoutCommand = {\n name: 'forceLayout',\n description: 'Apply force-directed layout to all nodes',\n aliases: ['force', 'autoLayout'],\n category: 'layout',\n inputs: [],\n execute: async (_inputs, ctx) => {\n await ctx.layout.applyForceLayout();\n }\n};\nexport const treeLayoutCommand = {\n name: 'treeLayout',\n description: 'Arrange nodes in a hierarchical tree (top-down)',\n aliases: ['tree'],\n category: 'layout',\n inputs: [],\n execute: async (_inputs, ctx) => {\n await ctx.layout.applyTreeLayout();\n }\n};\nexport const gridLayoutCommand = {\n name: 'gridLayout',\n description: 'Arrange nodes in a uniform grid',\n aliases: ['grid'],\n category: 'layout',\n inputs: [],\n execute: async (_inputs, ctx) => {\n await ctx.layout.applyGridLayout();\n }\n};\nexport const horizontalLayoutCommand = {\n name: 'horizontalLayout',\n description: 'Arrange nodes in a horizontal tree (left-to-right)',\n aliases: ['horizontal', 'hLayout'],\n category: 'layout',\n inputs: [],\n execute: async (_inputs, ctx) => {\n await ctx.layout.applyTreeLayout({\n direction: 'left-right'\n });\n }\n};\nexport function registerLayoutCommands() {\n registerCommand(forceLayoutCommand);\n registerCommand(treeLayoutCommand);\n registerCommand(gridLayoutCommand);\n registerCommand(horizontalLayoutCommand);\n}","/**\n * Built-in Clipboard Commands\n *\n * Commands for copy/cut/paste operations:\n * - copy: Copy selected nodes to clipboard\n * - cut: Cut selected nodes (copy + prepare for delete)\n * - paste: Paste clipboard content at position\n * - duplicate: Duplicate selected nodes with offset\n */\n\nimport { registerCommand } from '../registry';\n\n/**\n * Copy selected nodes to clipboard\n */\nexport const copyCommand = {\n name: 'copy',\n description: 'Copy selected nodes to clipboard',\n aliases: ['cp'],\n category: 'selection',\n inputs: [],\n execute: async (_inputs, ctx) => {\n const {\n copyToClipboardAtom,\n hasClipboardContentAtom\n } = await import('../../core/clipboard-store');\n if (ctx.selectedNodeIds.size === 0) {\n throw new Error('No nodes selected to copy');\n }\n ctx.set(copyToClipboardAtom, Array.from(ctx.selectedNodeIds));\n const hasContent = ctx.get(hasClipboardContentAtom);\n if (!hasContent) {\n throw new Error('Failed to copy nodes');\n }\n }\n};\n\n/**\n * Cut selected nodes (copy to clipboard)\n * Note: Actual deletion is handled by the app via onDeleteNode\n */\nexport const cutCommand = {\n name: 'cut',\n description: 'Cut selected nodes (copy to clipboard)',\n aliases: ['x'],\n category: 'selection',\n inputs: [],\n execute: async (_inputs, ctx) => {\n const {\n copyToClipboardAtom,\n hasClipboardContentAtom\n } = await import('../../core/clipboard-store');\n if (ctx.selectedNodeIds.size === 0) {\n throw new Error('No nodes selected to cut');\n }\n\n // Copy to clipboard\n ctx.set(copyToClipboardAtom, Array.from(ctx.selectedNodeIds));\n const hasContent = ctx.get(hasClipboardContentAtom);\n if (!hasContent) {\n throw new Error('Failed to cut nodes');\n }\n\n // Delete selected nodes via app mutation\n for (const nodeId of ctx.selectedNodeIds) {\n await ctx.mutations.deleteNode(nodeId);\n }\n }\n};\n\n/**\n * Paste clipboard content\n */\nexport const pasteCommand = {\n name: 'paste',\n description: 'Paste nodes from clipboard',\n aliases: ['v'],\n category: 'selection',\n inputs: [{\n name: 'position',\n type: 'point',\n prompt: 'Click to paste at position (or Enter for default offset)',\n required: false\n }],\n execute: async (inputs, ctx) => {\n const {\n pasteFromClipboardAtom,\n clipboardAtom,\n PASTE_OFFSET\n } = await import('../../core/clipboard-store');\n const clipboard = ctx.get(clipboardAtom);\n if (!clipboard || clipboard.nodes.length === 0) {\n throw new Error('Clipboard is empty');\n }\n\n // Calculate offset from clipboard bounds to paste position\n let offset = PASTE_OFFSET;\n if (inputs.position) {\n const pos = inputs.position;\n // Offset from top-left of original bounds to click position\n offset = {\n x: pos.x - clipboard.bounds.minX,\n y: pos.y - clipboard.bounds.minY\n };\n }\n const newNodeIds = ctx.set(pasteFromClipboardAtom, offset);\n if (!newNodeIds || newNodeIds.length === 0) {\n throw new Error('Failed to paste nodes');\n }\n },\n feedback: (collected, currentInput) => {\n if (currentInput.name === 'position') {\n return {\n crosshair: true\n };\n }\n return null;\n }\n};\n\n/**\n * Duplicate selected nodes with offset\n */\nexport const duplicateCommand = {\n name: 'duplicate',\n description: 'Duplicate selected nodes',\n aliases: ['d', 'dup'],\n category: 'selection',\n inputs: [],\n execute: async (_inputs, ctx) => {\n const {\n duplicateSelectionAtom\n } = await import('../../core/clipboard-store');\n if (ctx.selectedNodeIds.size === 0) {\n throw new Error('No nodes selected to duplicate');\n }\n const newNodeIds = ctx.set(duplicateSelectionAtom);\n if (!newNodeIds || newNodeIds.length === 0) {\n throw new Error('Failed to duplicate nodes');\n }\n }\n};\n\n/**\n * Delete selected nodes\n */\nexport const deleteSelectedCommand = {\n name: 'deleteSelected',\n description: 'Delete selected nodes',\n aliases: ['del', 'delete', 'remove'],\n category: 'selection',\n inputs: [],\n execute: async (_inputs, ctx) => {\n if (ctx.selectedNodeIds.size === 0) {\n throw new Error('No nodes selected to delete');\n }\n\n // Push history for undo\n const {\n pushHistoryAtom\n } = await import('../../core');\n ctx.set(pushHistoryAtom, 'Delete nodes');\n\n // Delete each selected node\n for (const nodeId of ctx.selectedNodeIds) {\n await ctx.mutations.deleteNode(nodeId);\n }\n }\n};\n\n/**\n * Register all clipboard commands\n */\nexport function registerClipboardCommands() {\n registerCommand(copyCommand);\n registerCommand(cutCommand);\n registerCommand(pasteCommand);\n registerCommand(duplicateCommand);\n registerCommand(deleteSelectedCommand);\n}","/**\n * Built-in Group Commands\n *\n * Commands for node grouping:\n * - groupNodes: Group selected nodes into a container\n * - ungroupNodes: Remove grouping from a group node\n * - collapseGroup: Collapse a group\n * - expandGroup: Expand a group\n */\n\nimport { registerCommand } from '../registry';\n\n/**\n * Group selected nodes\n */\nexport const groupNodesCommand = {\n name: 'groupNodes',\n description: 'Group selected nodes into a container',\n aliases: ['group'],\n category: 'nodes',\n inputs: [{\n name: 'label',\n type: 'text',\n prompt: 'Group label:',\n required: false,\n default: 'Group'\n }],\n execute: async (inputs, ctx) => {\n if (ctx.selectedNodeIds.size < 2) return;\n const {\n addNodeToLocalGraphAtom\n } = await import('../../core/graph-mutations');\n const {\n groupSelectedNodesAtom\n } = await import('../../core/group-store');\n const label = inputs.label || 'Group';\n const groupNodeId = crypto.randomUUID();\n\n // Create the group node in the graph\n ctx.set(addNodeToLocalGraphAtom, {\n id: groupNodeId,\n graph_id: ctx.currentGraphId || '',\n label,\n node_type: 'group',\n configuration: null,\n ui_properties: {\n x: 0,\n y: 0,\n width: 500,\n height: 500,\n size: 15,\n zIndex: 0\n },\n data: null,\n created_at: new Date().toISOString(),\n updated_at: new Date().toISOString()\n });\n\n // Set parent relationships and auto-size\n ctx.set(groupSelectedNodesAtom, {\n nodeIds: Array.from(ctx.selectedNodeIds),\n groupNodeId\n });\n }\n};\n\n/**\n * Ungroup nodes from a group\n */\nexport const ungroupNodesCommand = {\n name: 'ungroupNodes',\n description: 'Remove grouping from a group node',\n aliases: ['ungroup'],\n category: 'nodes',\n inputs: [{\n name: 'groupNode',\n type: 'node',\n prompt: 'Pick a group node to ungroup:'\n }],\n execute: async (inputs, ctx) => {\n const groupId = inputs.groupNode;\n if (!groupId) return;\n const {\n ungroupNodesAtom\n } = await import('../../core/group-store');\n ctx.set(ungroupNodesAtom, groupId);\n }\n};\n\n/**\n * Collapse a group\n */\nexport const collapseGroupCommand = {\n name: 'collapseGroup',\n description: 'Collapse a group node to hide its children',\n aliases: ['collapse'],\n category: 'nodes',\n inputs: [{\n name: 'groupNode',\n type: 'node',\n prompt: 'Pick a group node to collapse:'\n }],\n execute: async (inputs, ctx) => {\n const groupId = inputs.groupNode;\n if (!groupId) return;\n const {\n collapseGroupAtom\n } = await import('../../core/group-store');\n ctx.set(collapseGroupAtom, groupId);\n }\n};\n\n/**\n * Expand a group\n */\nexport const expandGroupCommand = {\n name: 'expandGroup',\n description: 'Expand a collapsed group node',\n aliases: ['expand'],\n category: 'nodes',\n inputs: [{\n name: 'groupNode',\n type: 'node',\n prompt: 'Pick a group node to expand:'\n }],\n execute: async (inputs, ctx) => {\n const groupId = inputs.groupNode;\n if (!groupId) return;\n const {\n expandGroupAtom\n } = await import('../../core/group-store');\n ctx.set(expandGroupAtom, groupId);\n }\n};\n\n/**\n * Register all group commands\n */\nexport function registerGroupCommands() {\n registerCommand(groupNodesCommand);\n registerCommand(ungroupNodesCommand);\n registerCommand(collapseGroupCommand);\n registerCommand(expandGroupCommand);\n}","/**\n * Built-in Search Commands\n *\n * Commands for searching and filtering nodes:\n * - searchNodes: Search nodes by label/type\n * - clearSearch: Clear active search filter\n */\n\nimport { registerCommand } from '../registry';\n\n/**\n * Search nodes by label or type\n */\nexport const searchNodesCommand = {\n name: 'searchNodes',\n description: 'Search nodes by label, type, or ID',\n aliases: ['find', 'search'],\n category: 'selection',\n inputs: [{\n name: 'query',\n type: 'text',\n prompt: 'Search:',\n required: true\n }],\n execute: async (inputs, ctx) => {\n const query = inputs.query;\n if (!query) return;\n const {\n setSearchQueryAtom\n } = await import('../../core/search-store');\n ctx.set(setSearchQueryAtom, query);\n }\n};\n\n/**\n * Clear active search\n */\nexport const clearSearchCommand = {\n name: 'clearSearch',\n description: 'Clear the active search filter',\n aliases: ['clearsearch'],\n category: 'selection',\n inputs: [],\n execute: async (_inputs, ctx) => {\n const {\n clearSearchAtom\n } = await import('../../core/search-store');\n ctx.set(clearSearchAtom);\n }\n};\n\n/**\n * Register all search commands\n */\nexport function registerSearchCommands() {\n registerCommand(searchNodesCommand);\n registerCommand(clearSearchCommand);\n}","/**\n * Built-in Merge Commands\n *\n * Commands for merging multiple nodes into one.\n * Edges from doomed nodes are re-routed to the survivor.\n */\n\nimport { registerCommand } from '../registry';\n\n/**\n * Merge selected nodes into one (first selected survives)\n */\nexport const mergeNodesCommand = {\n name: 'mergeNodes',\n description: 'Merge selected nodes into one (first selected survives)',\n aliases: ['merge'],\n category: 'nodes',\n inputs: [],\n execute: async (_inputs, ctx) => {\n if (ctx.selectedNodeIds.size < 2) return;\n const {\n mergeNodesAtom\n } = await import('../../core/graph-mutations');\n const {\n clearSelectionAtom,\n addNodesToSelectionAtom\n } = await import('../../core/selection-store');\n const nodeIds = Array.from(ctx.selectedNodeIds);\n ctx.set(mergeNodesAtom, {\n nodeIds\n });\n ctx.set(clearSelectionAtom);\n ctx.set(addNodesToSelectionAtom, [nodeIds[0]]);\n }\n};\n\n/**\n * Register all merge commands\n */\nexport function registerMergeCommands() {\n registerCommand(mergeNodesCommand);\n}","/**\n * Built-in Serialization Commands\n *\n * Commands for canvas export/import:\n * - exportCanvas: Export graph to JSON snapshot (copies to clipboard)\n * - importCanvas: Import graph from JSON snapshot (reads from clipboard)\n *\n * @since 1.3.0\n */\n\nimport { registerCommand } from '../registry';\n\n/**\n * Export canvas to JSON snapshot\n */\nexport const exportCanvasCommand = {\n name: 'exportCanvas',\n description: 'Export the current canvas to a JSON snapshot (copies to clipboard)',\n aliases: ['export'],\n category: 'custom',\n inputs: [],\n execute: async (_inputs, ctx) => {\n const {\n exportGraph\n } = await import('../../core/canvas-serializer');\n const {\n showToastAtom\n } = await import('../../core/toast-store');\n const {\n graphAtom\n } = await import('../../core/graph-store');\n const graph = ctx.get(graphAtom);\n const nodeCount = graph.order;\n const edgeCount = graph.size;\n if (nodeCount === 0) {\n throw new Error('Canvas is empty — nothing to export');\n }\n\n // Build a Jotai-compatible store façade from the CommandContext\n const store = {\n get: ctx.get,\n set: ctx.set\n };\n const snapshot = exportGraph(store);\n\n // Copy JSON to system clipboard\n const json = JSON.stringify(snapshot, null, 2);\n await navigator.clipboard.writeText(json);\n ctx.set(showToastAtom, `Exported ${nodeCount} nodes, ${edgeCount} edges to clipboard`);\n }\n};\n\n/**\n * Import canvas from JSON snapshot\n */\nexport const importCanvasCommand = {\n name: 'importCanvas',\n description: 'Import a canvas from a JSON snapshot (reads from clipboard)',\n aliases: ['import'],\n category: 'custom',\n inputs: [],\n execute: async (_inputs, ctx) => {\n const {\n importGraph,\n validateSnapshot\n } = await import('../../core/canvas-serializer');\n const {\n showToastAtom\n } = await import('../../core/toast-store');\n const {\n pushHistoryAtom\n } = await import('../../core/history-store');\n let json;\n try {\n json = await navigator.clipboard.readText();\n } catch {\n throw new Error('Could not read clipboard — paste the snapshot JSON manually');\n }\n let data;\n try {\n data = JSON.parse(json);\n } catch {\n throw new Error('Clipboard does not contain valid JSON');\n }\n const result = validateSnapshot(data);\n if (!result.valid) {\n throw new Error(`Invalid snapshot: ${result.errors[0]}`);\n }\n\n // Record history before import\n ctx.set(pushHistoryAtom, 'Import canvas');\n const store = {\n get: ctx.get,\n set: ctx.set\n };\n const snapshot = data;\n importGraph(store, snapshot);\n ctx.set(showToastAtom, `Imported ${snapshot.nodes.length} nodes, ${snapshot.edges.length} edges`);\n }\n};\n\n/**\n * Register all serialization commands\n */\nexport function registerSerializationCommands() {\n registerCommand(exportCanvasCommand);\n registerCommand(importCanvasCommand);\n}","/**\n * Built-in Commands Index\n *\n * Export all built-in command definitions and registration functions.\n */\n\n// Import register functions for use in registerBuiltinCommands\nimport { registerViewportCommands as _registerViewportCommands } from './viewport-commands';\nimport { registerSelectionCommands as _registerSelectionCommands } from './selection-commands';\nimport { registerHistoryCommands as _registerHistoryCommands } from './history-commands';\nimport { registerLayoutCommands as _registerLayoutCommands } from './layout-commands';\nimport { registerClipboardCommands as _registerClipboardCommands } from './clipboard-commands';\nimport { registerGroupCommands as _registerGroupCommands } from './group-commands';\nimport { registerSearchCommands as _registerSearchCommands } from './search-commands';\nimport { registerMergeCommands as _registerMergeCommands } from './merge-commands';\nimport { registerSerializationCommands as _registerSerializationCommands } from './serialization-commands';\n\n// Viewport commands\nexport { fitToViewCommand, fitSelectionCommand, resetViewportCommand, zoomInCommand, zoomOutCommand, registerViewportCommands } from './viewport-commands';\n\n// Selection commands\nexport { selectAllCommand, clearSelectionCommand, invertSelectionCommand, registerSelectionCommands } from './selection-commands';\n\n// History commands\nexport { undoCommand, redoCommand, registerHistoryCommands } from './history-commands';\n\n// Layout commands\nexport { forceLayoutCommand, treeLayoutCommand, gridLayoutCommand, horizontalLayoutCommand, registerLayoutCommands } from './layout-commands';\n\n// Clipboard commands\nexport { copyCommand, cutCommand, pasteCommand, duplicateCommand, deleteSelectedCommand, registerClipboardCommands } from './clipboard-commands';\n\n// Group commands\nexport { groupNodesCommand, ungroupNodesCommand, collapseGroupCommand, expandGroupCommand, registerGroupCommands } from './group-commands';\n\n// Search commands\nexport { searchNodesCommand, clearSearchCommand, registerSearchCommands } from './search-commands';\n\n// Merge commands\nexport { mergeNodesCommand, registerMergeCommands } from './merge-commands';\n\n// Serialization commands (v1.3)\nexport { exportCanvasCommand, importCanvasCommand, registerSerializationCommands } from './serialization-commands';\n\n/**\n * Register all built-in commands.\n * Call this once during app initialization to make built-in commands available.\n */\nexport function registerBuiltinCommands() {\n _registerViewportCommands();\n _registerSelectionCommands();\n _registerHistoryCommands();\n _registerLayoutCommands();\n _registerClipboardCommands();\n _registerGroupCommands();\n _registerSearchCommands();\n _registerMergeCommands();\n _registerSerializationCommands();\n}","/**\n * Shared Input System v2 — Public API\n *\n * Single entry point for the shared pointer + keyboard input pipeline.\n */\n\n// --- Types ---\n\nexport { NO_HELD_KEYS, NO_MODIFIERS, isKeyInputEvent, isPointerGestureEvent } from './types';\n\n// --- Layer 1: Normalize ---\nexport { normalizePointer, extractModifiers } from './normalize';\n\n// --- Layer 2: Recognize ---\nexport { transition, IDLE, LONG_PRESS_TIMER, SETTLE_TIMER } from './timed-state';\nexport { TimedStateRunner } from './timed-state-runner';\n\n// --- Layer 3: Resolve ---\nexport { specificity } from './specificity';\nexport { buildMappingIndex, resolve, indexContext } from './mapper';\n// --- Layer 3: Built-in Contexts ---\nexport { PALM_REJECTION_CONTEXT, ACTIVE_INTERACTION_CONTEXT, SEARCH_CONTEXT, KEYBOARD_MANIPULATE_CONTEXT, KEYBOARD_NAVIGATE_CONTEXT, DEFAULT_CONTEXT, PICK_NODE_CONTEXT, PICK_NODES_CONTEXT, PICK_POINT_CONTEXT, INPUT_MODE_CONTEXTS } from './contexts';\n\n// --- Layer 4: Dispatch ---\nexport { registerAction, unregisterAction, getHandler, clearHandlers, dispatch } from './dispatcher';\n\n// --- Layer 4: Inertia ---\nexport { PanInertia, ZoomInertia, VelocitySampler } from './inertia';\n\n// --- Input Action Helpers (pure store functions) ---\nexport { findNearestNode, cycleFocus, navigateFocus, activateFocusedNode, nudgeSelection, deleteSelection, cutSelection, cancelActiveInteraction, escapeInput, getCurrentSubject } from './input-action-helpers';\n// --- React Hooks ---\nexport { useCanvasGestures } from './useCanvasGestures';\nexport { useNodeGestures } from './useNodeGestures';\nexport { useInputSystem, useGestureSystem } from './useGestureSystem';\nexport { useGuardContext } from './useGuardContext';\nexport { useInertia, snapZoom } from './useInertia';\nexport { createWheelHandler } from './useWheelZoom';\nexport { createPinchHandlers } from './usePinchZoom';\nexport { useInputModeGestureContext } from './useInputModeGestureContext';\nexport { useRegisterInputActions } from './useRegisterInputActions';\n\n// --- React Provider ---\nexport { InputProvider, useInputContext, GestureProvider, useGestureContext } from './GestureProvider';"],"mappings":"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A;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAA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","names":["atom","atom","Graph","debug","atom","debug","FitToBoundsMode","atom","atom","debug","atom","atom","atomFamily","graph","atom","atom","debug","atom","debug","atom","Graph","debug","atom","debug","atom","atom","atom","atom","CanvasEventType","ActionCategory","debug","atom","debug","Graph","atom","calculateBounds","debug","atom","options","atom","atom","atom","MODIFIER_KEYS","specificity","atom","atomWithStorage","atom","init_types","registerAction","unregisterAction","init_types","debug","registerAction","unregisterAction","_c","_c","useAtom","useSetAtom","atom","debug","_c","useAtom","useSetAtom","getSelectedNodeIds","atom","t7","t8","_c","useAtomValue","useSetAtom","useRef","debug","_temp","_temp2","_c","useAtomValue","useSetAtom","_c","useAtomValue","_c","useAtomValue","_c","useAtomValue","_c","useAtomValue","useSetAtom","_temp","useAtomValue","useSetAtom","useRef","debug","resolve","_c","useAtomValue","useSetAtom","_c","useAtomValue","useStore","_c","useAtomValue","_c","useAtomValue","useSetAtom","atom","atom","atomWithStorage","inputModeAtom","pendingInputResolverAtom","atom","inputModeAtom","pendingInputResolverAtom","provideInputAtom","_c","useAtomValue","useSetAtom","_temp","_c","useAtomValue","useSetAtom","_c","useRef","_c","useAtomValue","_c","useAtomValue","_c","useEffect","useRef","useAtomValue","useSetAtom","_c","useRef","useAtomValue","useSetAtom","_temp","useAtomValue","useSetAtom","useRef","debug","easeInOutCubic","resolve","useAtomValue","useRef","useAtomValue","useRef","useAtomValue","useRef","useAtomValue","useRef","_c","useEffect","useRef","plugins","_temp","_c","React","_jsx","atom","atom","React","useEffect","useRef","useSetAtom","useAtomValue","atom","_jsx","useSetAtom","useRef","useEffect","useAtomValue","debug","debug","_c","_c","_c","useQuery","_c","useQuery","_c","useSetAtom","_c","useSetAtom","t1","t2","_c","useMutation","useQueryClient","useSetAtom","_c","useQueryClient","useSetAtom","useMutation","_c","useMutation","useQueryClient","useSetAtom","_c","useQueryClient","useSetAtom","t1","t2","useMutation","_c","useMutation","useQueryClient","useSetAtom","_c","useQueryClient","useSetAtom","t1","t2","useMutation","_c","useMutation","useQueryClient","useSetAtom","_c","useQueryClient","useSetAtom","useMutation","_c","useMutation","useQueryClient","useSetAtom","_c","useQueryClient","useSetAtom","t1","t2","useMutation","_c","React","useEffect","useSetAtom","_c","React","createContext","useContext","useRef","atom","useAtom","useSetAtom","_jsx","atom","createContext","styles","_c","useRef","useAtom","useSetAtom","useContext","_jsx","_c","useSetAtom","useEffect","styles","_c","React","_c","React","useEffect","useRef","useAtomValue","useRef","useEffect","useAtom","useSetAtom","useAtomValue","useGesture","init_types","init_types","init_types","useRef","useAtomValue","init_types","useAtomValue","useRef","useRef","useEffect","ZOOM_SNAP_THRESHOLD","VELOCITY_SAMPLE_COUNT","useRef","useEffect","init_types","useAtom","useSetAtom","useAtomValue","useRef","useEffect","useGesture","React","createContext","useContext","useEffect","useRef","useState","useStore","_c","useEffect","useAtomValue","_c","useAtomValue","useEffect","_c","useEffect","useStore","init_types","registerAction","unregisterAction","_c","useStore","useEffect","_c","useState","init_types","_c","useState","getCurrentSubject","_jsx","createContext","useStore","useState","useRef","useEffect","getCurrentSubject","useContext","_c","React","_jsx","_c","styles","t4","t5","_jsx","_Fragment","_jsxs","_c","useAtomValue","useRef","useEffect","_c","React","useAtomValue","React","useAtomValue","useSetAtom","_c","React","_jsx","_c","_jsx","useRef","useEffect","useAtomValue","init_types","useAtomValue","useRef","useEffect","_jsx","_jsxs","useAtomValue","useSetAtom","_c","React","_jsx","_jsxs","debug","_c","_jsx","_jsxs","_jsx","_Fragment","_c","useAtomValue","t2","Component","_c","React","useAtomValue","useSetAtom","_jsx","_jsxs","_c","useAtomValue","t3","_temp","styles","useSetAtom","t4","t5","t6","t7","t8","t9","t10","t11","t12","_c","React","useRef","useEffect","useAtomValue","useSetAtom","_jsx","_c","useAtomValue","useSetAtom","styles","useRef","useEffect","_c","React","useAtomValue","_jsx","_jsxs","_c","useAtomValue","_jsx","_jsxs","_c","useEffect","useRef","useAtomValue","_c","useEffect","useRef","useAtomValue","_c","useEffect","useRef","useAtomValue","useStore","_jsx","_jsxs","_c","_c","React","_jsx","debug","_c","_c","React","useAtomValue","_jsx","_Fragment","_c","useAtomValue","t2","_c","React","useRef","useAtomValue","useSetAtom","_c","React","_jsx","_jsxs","_temp","_c","React","_jsx","_jsx","_jsxs","_c","useAtomValue","t1","t2","_temp","_temp2","useRef","_temp3","useSetAtom","_c","React","useEffect","useAtomValue","useSetAtom","_jsx","_jsxs","_Fragment","t3","React","useRef","useSetAtom","useAtomValue","useGesture","_c","React","_jsx","_temp","_temp2","_jsx","_jsxs","_c","React","_jsx","useSetAtom","useAtomValue","useRef","useGesture","_jsxs","_jsx","_c","React","useState","useRef","useEffect","useAtomValue","_c","React","_jsx","_c","React","_jsx","_jsxs","_jsx","_jsxs","debug","_c","useState","useRef","useAtomValue","_temp","_temp2","useEffect","styles","_c","React","_c","React","useState","_jsx","_jsxs","_Fragment","_c","useState","_temp","_c","React","_jsx","_jsxs","_temp2","_temp","_temp3","_temp4","_temp5","_jsx","_jsxs","_c","_c","React","useEffect","useRef","useState","useAtom","useAtomValue","useSetAtom","_c","React","useRef","useEffect","useState","useAtom","useSetAtom","useAtomValue","_jsx","_jsxs","_c","useAtom","useSetAtom","useAtomValue","useRef","useState","useEffect","_temp","_c","React","useRef","useEffect","useState","useAtom","useSetAtom","useAtomValue","_c","React","_jsx","_jsxs","_Fragment","_c","React","_jsx","_jsxs","_temp","_temp2","t2","_jsx","_jsxs","_c","useAtom","useAtomValue","inputModeAtom","useSetAtom","provideInputAtom","useRef","useState","useEffect","_temp","_temp2","_temp3","_temp4","_jsx","_jsxs","_c","useAtomValue","useAtom","useSetAtom","inputModeAtom","useRef","useState","useEffect","_temp","_temp2","_c","useAtomValue","_jsx","_jsxs","_c","useAtomValue","inputModeAtom","_c","React","_c","React","useState","useSetAtom","_c","React","_jsx","_jsxs","_c","_jsx","TRANSITION_DURATION","_c","useState","useSetAtom","t4","t5","t6","t7","t8","t9","_jsx","_Fragment","_c","t4","_c","React","useState","useAtom","useAtomValue","useSetAtom","_jsx","_jsxs","_c","React","useAtomValue","_jsx","_jsxs","_temp","_c","React","useRef","useEffect","useAtomValue","useSetAtom","_jsx","_c","useRef","useAtomValue","useSetAtom","useEffect","_c","React","useAtomValue","useSetAtom","_jsx","_jsxs","_Fragment","t8","t9","t10","_c","React","_jsx","_c","React","useState","useRef","useAtomValue","useSetAtom","_c","React","_jsx","_jsxs","PlusIcon","_c","React","_jsx","_jsxs","getPositionStyles","_jsx","_jsxs","_c","useAtomValue","useState","useSetAtom","useRef","getPositionStyles","PlusIcon","_c","React","useAtomValue","_jsx","_c","React","useAtomValue","_jsx","_jsxs","t2","t3","React","useEffect","useRef","_jsx","debug","styles","provideInputAtom","_c","React","createContext","useContext","useEffect","useRef","useAtomValue","useSetAtom","useAtom","useStore","_jsx","createContext","_c","useStore","useAtomValue","useSetAtom","_temp","t8","_temp2","useAtom","useRef","inputModeAtom","useEffect","useContext","resetViewportAtom","zoomAtom","setZoomAtom","nodeKeysAtom","selectedNodeIdsAtom","clearSelectionAtom","copyToClipboardAtom","hasClipboardContentAtom","pasteFromClipboardAtom","clipboardAtom","PASTE_OFFSET","duplicateSelectionAtom","pushHistoryAtom","addNodeToLocalGraphAtom","groupSelectedNodesAtom","ungroupNodesAtom","collapseGroupAtom","expandGroupAtom","setSearchQueryAtom","clearSearchAtom","mergeNodesAtom","clearSelectionAtom","addNodesToSelectionAtom","exportGraph","showToastAtom","graphAtom","importGraph","validateSnapshot","pushHistoryAtom","registerAction","unregisterAction","init_types"]}