@pauloricca/spagbol 0.1.0 → 0.1.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (66) hide show
  1. package/README.md +42 -4
  2. package/dist/core/controller.js +4 -4
  3. package/dist/core/controller.js.map +1 -1
  4. package/dist/core/model.d.ts +2 -1
  5. package/dist/core/model.d.ts.map +1 -1
  6. package/dist/core/model.js.map +1 -1
  7. package/dist/editors.css +157 -0
  8. package/dist/react/SpagbolCanvas.d.ts.map +1 -1
  9. package/dist/react/SpagbolCanvas.js +106 -29
  10. package/dist/react/SpagbolCanvas.js.map +1 -1
  11. package/dist/react/SpagbolCanvasControls.d.ts.map +1 -1
  12. package/dist/react/SpagbolCanvasControls.js +5 -5
  13. package/dist/react/SpagbolCanvasControls.js.map +1 -1
  14. package/dist/react/SpagbolControlJoystick.d.ts +9 -0
  15. package/dist/react/SpagbolControlJoystick.d.ts.map +1 -0
  16. package/dist/react/SpagbolControlJoystick.js +111 -0
  17. package/dist/react/SpagbolControlJoystick.js.map +1 -0
  18. package/dist/react/SpagbolControlZoom.d.ts.map +1 -1
  19. package/dist/react/SpagbolControlZoom.js +3 -2
  20. package/dist/react/SpagbolControlZoom.js.map +1 -1
  21. package/dist/react/SpagbolCurveEditor.d.ts +45 -0
  22. package/dist/react/SpagbolCurveEditor.d.ts.map +1 -0
  23. package/dist/react/SpagbolCurveEditor.js +142 -0
  24. package/dist/react/SpagbolCurveEditor.js.map +1 -0
  25. package/dist/react/SpagbolNodeFrame.d.ts.map +1 -1
  26. package/dist/react/SpagbolNodeFrame.js +18 -16
  27. package/dist/react/SpagbolNodeFrame.js.map +1 -1
  28. package/dist/react/SpagbolNodeFrameTypePicker.js +1 -1
  29. package/dist/react/SpagbolNodeFrameTypePicker.js.map +1 -1
  30. package/dist/react/SpagbolSequencer.d.ts +35 -0
  31. package/dist/react/SpagbolSequencer.d.ts.map +1 -0
  32. package/dist/react/SpagbolSequencer.js +166 -0
  33. package/dist/react/SpagbolSequencer.js.map +1 -0
  34. package/dist/react/index.d.ts +3 -0
  35. package/dist/react/index.d.ts.map +1 -1
  36. package/dist/react/index.js +3 -0
  37. package/dist/react/index.js.map +1 -1
  38. package/dist/react/nodeDrag.d.ts +7 -0
  39. package/dist/react/nodeDrag.d.ts.map +1 -0
  40. package/dist/react/nodeDrag.js +27 -0
  41. package/dist/react/nodeDrag.js.map +1 -0
  42. package/dist/react/zoom.d.ts +5 -0
  43. package/dist/react/zoom.d.ts.map +1 -0
  44. package/dist/react/zoom.js +19 -0
  45. package/dist/react/zoom.js.map +1 -0
  46. package/dist/styles.css +112 -41
  47. package/docs/language/standard-node-comparison.md +92 -0
  48. package/docs/language/standard-node-contracts.md +237 -0
  49. package/docs/language/standard-nodes.md +198 -0
  50. package/docs/language/ui-components.md +79 -0
  51. package/package.json +5 -3
  52. package/src/core/controller.ts +4 -4
  53. package/src/core/model.ts +2 -1
  54. package/src/react/SpagbolCanvas.tsx +121 -31
  55. package/src/react/SpagbolCanvasControls.tsx +2 -7
  56. package/src/react/SpagbolControlJoystick.tsx +147 -0
  57. package/src/react/SpagbolControlZoom.tsx +3 -2
  58. package/src/react/SpagbolCurveEditor.tsx +166 -0
  59. package/src/react/SpagbolNodeFrame.tsx +30 -24
  60. package/src/react/SpagbolNodeFrameTypePicker.tsx +1 -1
  61. package/src/react/SpagbolSequencer.tsx +265 -0
  62. package/src/react/editors.css +157 -0
  63. package/src/react/index.ts +4 -0
  64. package/src/react/nodeDrag.ts +33 -0
  65. package/src/react/styles.css +112 -41
  66. package/src/react/zoom.ts +18 -0
@@ -1 +1 @@
1
- {"version":3,"file":"SpagbolCanvas.js","sourceRoot":"","sources":["../../src/react/SpagbolCanvas.tsx"],"names":[],"mappings":"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","sourcesContent":["import { createPortal } from \"react-dom\";\nimport { SpagbolCanvasLinkControls } from \"./SpagbolCanvasLinkControls.js\";\nimport { SpagbolCanvasFlow } from \"./SpagbolCanvasFlow.js\";\nimport {\n BaseEdge,\n ConnectionLineType,\n EdgeLabelRenderer,\n Handle,\n Position,\n ReactFlow,\n ReactFlowProvider,\n SelectionMode,\n ViewportPortal,\n useReactFlow,\n useStore,\n useStoreApi,\n useUpdateNodeInternals,\n useNodeId,\n useNodesInitialized,\n useViewport,\n type Connection,\n type Edge,\n type EdgeProps,\n type Node,\n type NodeProps,\n type NodeChange,\n type EdgeChange,\n type OnConnectStartParams,\n type Viewport,\n type ReactFlowInstance,\n} from \"@xyflow/react\";\nimport {\n memo,\n useCallback,\n useEffect,\n useId,\n useMemo,\n useRef,\n useState,\n type CSSProperties,\n type KeyboardEvent,\n type PointerEvent,\n type ReactNode,\n} from \"react\";\nimport {\n areaMembers,\n groupPanelLayout,\n spagbolGroupKinds,\n copyFragment,\n createId,\n portsFor,\n readFragment,\n type Diagnostic,\n type GraphArea,\n type GraphEditor,\n type GraphLink,\n type GraphNode,\n type LinkTarget,\n type Point,\n} from \"../core/index.js\";\nimport {\n GraphContext,\n useEditorSnapshot,\n useEditorSelector,\n useSpagbol,\n type SpagbolCanvasSlots,\n type SpagbolCanvasFeatures,\n type SpagbolTheme,\n type SpagbolNodeView,\n} from \"./context.js\";\nimport { SpagbolNodeFrame, SpagbolNodePanel, useNodeViewProps } from \"./SpagbolNodeFrame.js\";\nimport { SpagbolControlNumber } from \"./SpagbolControlNumber.js\";\nimport {\n SpagbolCanvasControls,\n type SpagbolCanvasControlsOptions,\n} from \"./SpagbolCanvasControls.js\";\nimport {\n rememberMeasurements,\n reuseFlowPresentations,\n stationaryReconnectEdge,\n} from \"./flowPresentation.js\";\nimport {\n duplicateDragPresentation,\n type DuplicateDrag,\n} from \"./duplicateDrag.js\";\nimport {\n translateExtentForVisibleContent,\n clampViewportToTranslateExtent,\n infiniteCanvasExtent,\n} from \"./viewport.js\";\nimport {\n anchorFlowId,\n areaFlowId,\n linkPath,\n nodeFlowId,\n parseHandle,\n sourceHandle,\n targetHandle,\n} from \"./geometry.js\";\n\ninterface FlowData extends Record<string, unknown> {\n node?: GraphNode;\n area?: GraphArea;\n linkId?: string;\n projected?: boolean;\n stationaryOriginal?: boolean;\n}\ntype FlowNode = Node<FlowData, \"spagbolNode\" | \"spagbolArea\" | \"spagbolAnchor\">;\ninterface LinkData extends Record<string, unknown> {\n link: GraphLink;\n emphasized?: boolean;\n dimmed?: boolean;\n feedback?: boolean;\n control?: boolean;\n virtual?: boolean;\n disabled?: boolean;\n preview?: boolean;\n}\ntype FlowLink = Edge<LinkData, \"spagbolLink\">;\nexport interface SpagbolLinkPresentation {\n feedback?: boolean;\n control?: boolean;\n virtual?: boolean;\n}\nexport interface SpagbolCanvasProps extends SpagbolCanvasSlots {\n editor: GraphEditor;\n views?: Readonly<Record<string, SpagbolNodeView>>;\n /** Limit creation/type conversion without discarding existing unsupported nodes. */\n nodeKinds?: readonly string[];\n /** Domain conversion, e.g. capturing an asset before replacing a DSP node. */\n onChangeNodeKind?(id: string, kind: string): void | Promise<void>;\n features?: SpagbolCanvasFeatures;\n diagnostics?: readonly Diagnostic[];\n linkPresentation?: Readonly<Record<string, SpagbolLinkPresentation>>;\n /** Read-only domain relationships, never stored, copied or selected. */\n virtualLinks?: readonly GraphLink[];\n className?: string;\n style?: SpagbolTheme;\n defaultViewport?: Viewport;\n onViewportChange?(viewport: Viewport): void;\n onInit?(instance: ReactFlowInstance): void;\n /** Teia-style content bounds by default; optional margin in screen proportions. */\n panBounds?: false | { emptyScreenRatio?: number };\n onRenderTarget?(key: string, element: HTMLElement | null): void;\n toolbar?: boolean | ReactNode;\n controls?: SpagbolCanvasControlsOptions | false;\n ariaLabel?: string;\n}\nconst emptyViews: Readonly<Record<string, SpagbolNodeView>> = Object.freeze({});\nconst emptyPresentations: Readonly<Record<string, SpagbolLinkPresentation>> =\n Object.freeze({});\nconst defaultFeatures: SpagbolCanvasFeatures = { compact: true, nestedGraphs: true, panels: true, areas: true, linkProperties: true };\n\nexport function SpagbolCanvas(props: SpagbolCanvasProps) {\n const margin =\n props.panBounds === false ? undefined : props.panBounds?.emptyScreenRatio;\n if (margin !== undefined && (!Number.isFinite(margin) || margin < 0))\n throw new Error(\n \"Pan margin must be a finite, nonnegative screen proportion.\",\n );\n const features = useMemo(() => ({ ...defaultFeatures, ...props.features }), [props.features]);\n if (features.panels && !features.nestedGraphs)\n throw new Error(\"Projected panels require the nestedGraphs feature.\");\n return (\n <ReactFlowProvider>\n <SpagbolCanvasInner {...props} features={features} />\n </ReactFlowProvider>\n );\n}\nconst SpagbolNodeRenderer = memo(function SpagbolNodeRenderer({ data, selected }: NodeProps<FlowNode>) {\n const node = data.node!;\n const { views, features, editor } = useSpagbol();\n const updateInternals = useUpdateNodeInternals();\n const flowId = useNodeId();\n const portKey = portsFor(node, editor.nodes)\n .map((port) => `${port.direction}:${port.id}`)\n .join(\"|\");\n useEffect(() => {\n if (data.projected || !flowId) return;\n const frame = requestAnimationFrame(() => updateInternals(flowId));\n return () => cancelAnimationFrame(frame);\n }, [flowId, portKey, data.projected, updateInternals]);\n const baseProps = useNodeViewProps(node, selected, data.projected === true);\n const props = {\n ...baseProps,\n readOnly: baseProps.readOnly || data.stationaryOriginal === true,\n };\n const view = views[node.kind];\n const Renderer = data.projected ? view?.projected : view?.render;\n const Body = view?.body;\n const content = Renderer ? (\n <Renderer {...props} />\n ) : (\n <SpagbolNodeFrame {...props}>\n {features.panels && node.graph && groupPanelLayout(node) ? (\n <SpagbolNodePanel group={node} />\n ) : null}\n {Body ? <Body {...props} /> : null}\n </SpagbolNodeFrame>\n );\n return data.stationaryOriginal ? (\n <div className=\"spagbol-canvas-duplicate-origin\" inert>\n {content}\n </div>\n ) : (\n content\n );\n}, (previous, next) => previous.selected === next.selected && previous.data.node === next.data.node && previous.data.projected === next.data.projected && previous.data.stationaryOriginal === next.data.stationaryOriginal);\nconst SpagbolCanvasLinkAnchor = memo(function SpagbolCanvasLinkAnchor({ data }: NodeProps<FlowNode>) {\n const { editor, connecting } = useSpagbol();\n return (\n <div className=\"spagbol-canvas-link-anchor\">\n {(editor.policy.linkProperties ?? []).map((property) => (\n <Handle\n key={property}\n id={`property:${property}`}\n type=\"target\"\n position={Position.Left}\n className=\"spagbol-property-port\"\n isConnectable={editor.editing && connecting}\n style={{ opacity: 0 }}\n aria-label={`Link ${property}`}\n />\n ))}\n </div>\n );\n}, (before, after) => before.data.linkId === after.data.linkId);\nfunction SpagbolCanvasArea({ data, selected }: NodeProps<FlowNode>) {\n const area = data.area!;\n const { editor, zoom, areaDuplicate } = useSpagbol();\n const [titleEditing, setTitleEditing] = useState(false);\n const [titleDraft, setTitleDraft] = useState(area.title);\n const drag = useRef<{\n pointer: number;\n start: Point;\n position: Point;\n size: { width: number; height: number };\n resize: boolean;\n duplicate: boolean;\n offset: Point;\n moved: boolean;\n title: boolean;\n } | null>(null);\n function start(event: PointerEvent<HTMLElement>, resize = false) {\n if (!editor.editing || event.button !== 0) return;\n event.preventDefault();\n event.stopPropagation();\n editor.select({ areaIds: [area.id] });\n editor.beginGesture(resize ? \"Resize area\" : event.altKey ? \"Duplicate area\" : \"Move area\");\n if (!resize && event.altKey) areaDuplicate?.(area.id, \"start\", { x: 0, y: 0 }, event.metaKey || event.ctrlKey || event.shiftKey);\n drag.current = {\n pointer: event.pointerId,\n start: { x: event.clientX, y: event.clientY },\n position: { ...area.position },\n size: { ...area.size },\n resize,\n duplicate: !resize && event.altKey, offset: { x: 0, y: 0 }, moved: false, title: !!(event.target as HTMLElement).closest(\".spagbol-canvas-area-title\"),\n };\n event.currentTarget.setPointerCapture(event.pointerId);\n }\n function move(event: PointerEvent<HTMLElement>) {\n const current = drag.current;\n if (!current || current.pointer !== event.pointerId) return;\n event.stopPropagation();\n const x = (event.clientX - current.start.x) / zoom,\n y = (event.clientY - current.start.y) / zoom;\n current.offset = { x, y };\n current.moved ||= Math.abs(x) + Math.abs(y) > 3 / zoom;\n if (current.duplicate) { areaDuplicate?.(area.id, \"move\", { x, y }); return; }\n if (current.resize) {\n const members = areaMembers(editor.graph, area.id);\n const minWidth = area.locked\n ? Math.max(\n 140,\n ...editor.graph.nodes\n .filter((node) => members.nodeIds.has(node.id))\n .map(\n (node) =>\n node.position.x - area.position.x + (node.size?.width ?? 220),\n ),\n )\n : 140;\n const minHeight = area.locked\n ? Math.max(\n 80,\n ...editor.graph.nodes\n .filter((node) => members.nodeIds.has(node.id))\n .map(\n (node) =>\n node.position.y -\n area.position.y +\n (node.size?.height ?? 120),\n ),\n )\n : 80;\n editor.updateArea(area.id, {\n size: {\n width: Math.max(minWidth, current.size.width + x),\n height: Math.max(minHeight, current.size.height + y),\n },\n });\n } else\n editor.moveArea(area.id, {\n x: current.position.x + x,\n y: current.position.y + y,\n });\n }\n function end(event: PointerEvent<HTMLElement>, cancel = false) {\n const current = drag.current;\n if (current?.pointer !== event.pointerId) return;\n drag.current = null;\n if (event.currentTarget.hasPointerCapture(event.pointerId))\n event.currentTarget.releasePointerCapture(event.pointerId);\n if (current.duplicate) areaDuplicate?.(area.id, cancel || !current.moved ? 'cancel' : 'end', current.offset);\n else {\n if (cancel) editor.cancelGesture(); else editor.commitGesture();\n if (!cancel && !current.moved && current.title) { setTitleDraft(area.title); setTitleEditing(true); }\n }\n }\n const pointerHandlers = {\n onPointerMove: move,\n onPointerUp: (event: PointerEvent<HTMLElement>) => end(event),\n onPointerCancel: (event: PointerEvent<HTMLElement>) => end(event, true),\n onLostPointerCapture: (event: PointerEvent<HTMLElement>) =>\n end(event, true),\n };\n return (\n <div\n inert={data.stationaryOriginal === true}\n className={`spagbol-canvas-area${selected ? \" spagbol-canvas-area-selected\" : \"\"}${area.collapsed ? \" spagbol-canvas-area-collapsed\" : \"\"}`}\n style={{\n width: area.size.width,\n height: area.collapsed\n ? 34 + (area.controlHeight ?? 0)\n : area.size.height,\n }}\n >\n <div\n className=\"spagbol-canvas-area-header nodrag nopan\"\n onPointerDown={(event) => start(event)}\n {...pointerHandlers}\n >\n {titleEditing ? <input autoFocus className=\"spagbol-canvas-area-title-input nodrag nopan\" aria-label=\"Area title\" value={titleDraft} onFocus={event => event.currentTarget.select()} onChange={event => setTitleDraft(event.currentTarget.value)} onPointerDown={event => event.stopPropagation()} onBlur={() => { editor.updateArea(area.id, { title: titleDraft.trim() || 'Area' }); setTitleEditing(false); }} onKeyDown={event => { event.stopPropagation(); if (event.key === 'Enter') event.currentTarget.blur(); if (event.key === 'Escape') { setTitleDraft(area.title); setTitleEditing(false); } }} /> : <span className=\"spagbol-canvas-area-title\" onDoubleClick={event => { event.stopPropagation(); if (editor.editing) { setTitleDraft(area.title); setTitleEditing(true); } }}>{area.title}</span>}\n <div\n className=\"spagbol-canvas-area-actions\"\n onPointerDown={(event) => event.stopPropagation()}\n >\n <button\n title={area.locked ? \"Unlock membership\" : \"Lock membership\"}\n aria-label={area.locked ? \"Unlock membership\" : \"Lock membership\"}\n disabled={!editor.editing}\n onClick={() => editor.lockArea(area.id, !area.locked)}\n >\n {area.locked ? \"●\" : \"○\"}\n </button>\n <button\n title={area.collapsed ? \"Expand area\" : \"Collapse area\"}\n aria-label={area.collapsed ? \"Expand area\" : \"Collapse area\"}\n disabled={!editor.editing}\n onClick={() =>\n editor.updateArea(area.id, { collapsed: !area.collapsed })\n }\n >\n {area.collapsed ? \"+\" : \"−\"}\n </button>\n </div>\n </div>\n {!area.collapsed && area.controlHeight ? (\n <div\n className=\"spagbol-canvas-area-divider\"\n style={{ top: 34 + area.controlHeight }}\n />\n ) : null}\n {!area.collapsed && editor.editing && (\n <button\n className=\"spagbol-canvas-area-resize nodrag nopan\"\n aria-label=\"Resize area\"\n onPointerDown={(event) => start(event, true)}\n {...pointerHandlers}\n />\n )}\n <Handle\n id=\"collapsed:in\"\n type=\"target\"\n position={Position.Left}\n isConnectable={false}\n className=\"spagbol-canvas-area-pin\"\n style={{ top: 17 }}\n />\n <Handle\n id=\"collapsed:out\"\n type=\"source\"\n position={Position.Right}\n isConnectable={false}\n className=\"spagbol-canvas-area-pin\"\n style={{ top: 17 }}\n />\n </div>\n );\n}\n\nconst SpagbolCanvasLink = memo(function SpagbolCanvasLink(props: EdgeProps<FlowLink>) {\n const { editor, diagnostics, linkOverlay, connecting } = useSpagbol();\n const flow = useReactFlow();\n const viewport = useViewport();\n const [controlsVisible, setControlsVisible] = useState(false);\n const selection = useEditorSelector(editor, snapshot => snapshot.selection);\n const showControls = props.selected && selection.linkIds.length === 1 && editor.editing && !connecting && !props.data?.virtual;\n useEffect(() => {\n if (!showControls) { setControlsVisible(false); return; }\n const timer = window.setTimeout(() => setControlsVisible(true), 260);\n return () => window.clearTimeout(timer);\n }, [showControls]);\n const link = props.data!.link;\n const [path, x, y] = linkPath(\n { x: props.sourceX, y: props.sourceY },\n { x: props.targetX, y: props.targetY },\n props.data?.feedback,\n link.target.type === \"port\" && link.source.nodeId === link.target.nodeId,\n );\n const mode = editor.modes.get(link.mode);\n const errors = diagnostics.filter((item) => item.linkId === link.id);\n const selected = props.selected;\n const className = `spagbol-canvas-link${selected || props.data?.emphasized ? \" spagbol-canvas-link-emphasized\" : \"\"}${props.data?.dimmed ? \" spagbol-canvas-link-dimmed\" : \"\"}${props.data?.disabled ? \" spagbol-canvas-link-disabled\" : \"\"}${props.data?.control ? \" spagbol-canvas-link-control\" : \"\"}${props.data?.virtual ? \" spagbol-canvas-link-virtual\" : \"\"}${errors.length ? \" spagbol-canvas-link-error\" : \"\"}`;\n return (\n <>\n <path\n d={path}\n className=\"spagbol-canvas-link-underlay\"\n fill=\"none\"\n style={{ strokeWidth: selected || props.data?.emphasized ? 7 : 5 }}\n />\n <BaseEdge\n id={props.id}\n path={path}\n interactionWidth={\n link.source.nodeId ===\n (link.target.type === \"port\" ? link.target.nodeId : null)\n ? 38\n : 22\n }\n className={`${className}${props.data?.preview ? \" spagbol-canvas-link-preview\" : \"\"}`}\n style={{ stroke: mode?.color ?? \"var(--spagbol-muted)\" }}\n />\n <path\n d={path}\n className=\"spagbol-canvas-link-hit\"\n data-spagbol-link={link.id}\n fill=\"none\"\n pointerEvents=\"none\"\n />\n {showControls && controlsVisible && linkOverlay && createPortal(\n <SpagbolCanvasLinkControls\n style={{ left: flow.flowToScreenPosition({ x, y }).x, top: flow.flowToScreenPosition({ x, y: !(props.data?.feedback || props.source === props.target) && Math.hypot(props.targetX - props.sourceX, props.targetY - props.sourceY) < 144 ? y - 52 : y }).y, transform: `translate(-50%, -50%) scale(${viewport.zoom})` }}\n weight={link.weight} mode={link.mode} enabled={link.enabled !== false}\n modes={editor.modes.list().filter(mode => !editor.policy.modes || editor.policy.modes.includes(mode.id))}\n onWeightChange={weight => editor.updateLink(link.id, { weight })}\n onModeChange={mode => editor.updateLink(link.id, { mode })}\n onEnabledChange={enabled => editor.updateLink(link.id, { enabled })}\n />, linkOverlay)}\n {errors.length > 0 && (\n <EdgeLabelRenderer>\n <div\n className=\"spagbol-canvas-link-diagnostic\"\n role=\"status\"\n style={{\n transform: `translate(-50%, -50%) translate(${x}px,${y + 18}px)`,\n }}\n title={errors.map((error) => error.message).join(\"\\n\")}\n >\n !\n </div>\n </EdgeLabelRenderer>\n )}\n </>\n );\n}, (before, after) => {\n if (before.id !== after.id || before.selected !== after.selected || before.source !== after.source || before.target !== after.target || before.sourceX !== after.sourceX || before.sourceY !== after.sourceY || before.targetX !== after.targetX || before.targetY !== after.targetY) return false;\n const keys = Object.keys(before.data ?? {});\n return keys.length === Object.keys(after.data ?? {}).length && keys.every(key => before.data?.[key] === after.data?.[key]);\n});\nconst nodeTypes = {\n spagbolNode: SpagbolNodeRenderer,\n spagbolArea: SpagbolCanvasArea,\n spagbolAnchor: SpagbolCanvasLinkAnchor,\n};\nconst edgeTypes = { spagbolLink: SpagbolCanvasLink };\n\ninterface Picker {\n point: Point;\n screen: Point;\n linkId?: string;\n origin?: { nodeId: string; portId: string; direction: \"input\" | \"output\" };\n}\nfunction SpagbolCanvasInner({\n editor,\n views = emptyViews,\n features = defaultFeatures,\n linkPresentation = emptyPresentations,\n ...props\n}: SpagbolCanvasProps) {\n const snapshot = useEditorSnapshot(editor);\n const graph = editor.graph;\n const root = useRef<HTMLDivElement>(null);\n const [linkOverlay, setLinkOverlay] = useState<HTMLDivElement | null>(null);\n const instanceId = useId();\n const flow = useReactFlow<FlowNode, FlowLink>();\n const flowStore = useStoreApi();\n const nodesInitialized = useNodesInitialized();\n const flowNodes = useStore((state) => state.nodes);\n // Measurements are canvas state, not saved graph data. Retaining them keeps\n // React Flow from hiding/reinitializing every node on each drag preview frame.\n const measuredSizes = useRef(\n new Map<string, { width: number; height: number }>(),\n );\n const [measurementRevision, setMeasurementRevision] = useState(0);\n const [zoom, setZoom] = useState(props.defaultViewport?.zoom ?? 1);\n const [settledViewport, setSettledViewport] = useState<Viewport>(\n props.defaultViewport ?? { x: 0, y: 0, zoom: 1 },\n );\n const [editorSize, setEditorSize] = useState({ width: 0, height: 0 });\n const viewportMoving = useRef(false);\n useEffect(() => {\n const element = root.current;\n if (!element) return;\n const update = () => {\n const bounds = element.getBoundingClientRect();\n setEditorSize((previous) =>\n previous.width === bounds.width && previous.height === bounds.height\n ? previous\n : { width: bounds.width, height: bounds.height },\n );\n };\n update();\n const observer = new ResizeObserver(update);\n observer.observe(element);\n return () => observer.disconnect();\n }, []);\n const [connecting, setConnecting] = useState(false);\n const [revealedNodeId, setRevealedNodeId] = useState<string | null>(null);\n const [activeMode, setActiveMode] = useState(\n editor.policy.modes?.[0] ?? editor.modes.list()[0]?.id ?? \"set\",\n );\n const [picker, setPicker] = useState<Picker | null>(null);\n const [search, setSearch] = useState(\"\");\n const [error, setError] = useState<string | null>(null);\n const [drawing, setDrawing] = useState<{\n start: Point;\n end: Point;\n pointer: number;\n } | null>(null);\n const connection = useRef<OnConnectStartParams | null>(null);\n const connectionDone = useRef(false);\n const reconnecting = useRef<string | null>(null);\n const reconnectDuplicate = useRef(false);\n const [reconnectOriginal, setReconnectOriginal] = useState<FlowLink | null>(\n null,\n );\n const duplicate = useRef<DuplicateDrag | null>(null);\n const [duplicatePreview, setDuplicatePreview] =\n useState<DuplicateDrag | null>(null);\n const cancelledDuplicate = useRef(false);\n useEffect(() => {\n if (!snapshot.gesture && duplicate.current) {\n cancelledDuplicate.current = true;\n duplicate.current = null;\n setDuplicatePreview(null);\n }\n }, [snapshot.gesture]);\n const duplicatePresentation = useMemo(\n () =>\n duplicatePreview\n ? duplicateDragPresentation(graph, duplicatePreview)\n : null,\n [graph, duplicatePreview],\n );\n const baseRenderGraph = duplicatePresentation?.graph ?? graph;\n const renderGraph = useMemo(() => props.virtualLinks?.length ? { ...baseRenderGraph, links: [...baseRenderGraph.links, ...props.virtualLinks] } : baseRenderGraph, [baseRenderGraph, props.virtualLinks]);\n const targets = useRef(new Map<string, HTMLElement>());\n const coreDiagnostics = useMemo(() => editor.diagnostics(), [editor, snapshot.document]);\n const diagnosticKey = JSON.stringify([coreDiagnostics, props.diagnostics ?? []]);\n const diagnostics = useMemo(\n () =>\n [...coreDiagnostics, ...(props.diagnostics ?? [])].filter(\n (item) =>\n item.path.length === snapshot.path.length &&\n item.path.every((id, index) => id === snapshot.path[index]),\n ),\n [diagnosticKey, snapshot.path],\n );\n const registerTarget = useCallback(\n (key: string, element: HTMLElement | null) => {\n if (element) targets.current.set(key, element);\n else targets.current.delete(key);\n props.onRenderTarget?.(key, element);\n },\n [props.onRenderTarget],\n );\n useEffect(\n () => () => {\n for (const key of targets.current.keys())\n props.onRenderTarget?.(key, null);\n targets.current.clear();\n },\n [props.onRenderTarget],\n );\n useEffect(() => {\n setPicker(null);\n setError(null);\n }, [snapshot.path.join(\"/\")]);\n const areaDuplicate = useCallback((id: string, phase: 'start' | 'move' | 'end' | 'cancel', offset: Point, external = false) => {\n if (phase === 'start') {\n const area = editor.graph.areas.find(area => area.id === id);\n if (!area) return;\n cancelledDuplicate.current = false;\n const fragment = copyFragment(editor.graph, [], [id]);\n duplicate.current = { namespace: createId('preview'), fragment, nodeId: '', origin: area.position, positions: new Map(fragment.nodes.map(node => [node.id, node.position])), areaPositions: new Map(fragment.areas.map(area => [area.id, area.position])), external };\n setDuplicatePreview(duplicate.current);\n return;\n }\n const current = duplicate.current;\n if (!current) return;\n if (phase === 'move') {\n duplicate.current = { ...current,\n positions: new Map(current.fragment.nodes.map(node => [node.id, { x: node.position.x + offset.x, y: node.position.y + offset.y }])),\n areaPositions: new Map(current.fragment.areas.map(area => [area.id, { x: area.position.x + offset.x, y: area.position.y + offset.y }])),\n };\n setDuplicatePreview(duplicate.current);\n return;\n }\n duplicate.current = null; setDuplicatePreview(null);\n if (phase === 'cancel') editor.cancelGesture();\n else { editor.paste(current.fragment, offset, current.external); editor.commitGesture(); }\n }, [editor]);\n const context = useMemo(\n () => ({\n editor,\n views,\n nodeKinds: props.nodeKinds,\n changeNodeKind: props.onChangeNodeKind,\n features,\n diagnostics,\n zoom,\n connecting,\n instanceId,\n areaDuplicate,\n registerTarget,\n linkOverlay,\n }),\n [\n editor,\n views,\n features,\n diagnostics,\n zoom,\n connecting,\n instanceId,\n registerTarget,\n linkOverlay,\n areaDuplicate,\n props.nodeKinds,\n props.onChangeNodeKind,\n ],\n );\n const attempt = useCallback((action: () => void) => {\n try {\n action();\n setError(null);\n } catch (cause) {\n setError(cause instanceof Error ? cause.message : String(cause));\n }\n }, []);\n\n const collapsed = useMemo(() => {\n const nodes = new Map<string, GraphArea>(),\n projected = new Set<string>(),\n hiddenAreas = new Set<string>();\n if (features.areas)\n for (const area of renderGraph.areas.filter((area) => area.collapsed)) {\n const members = areaMembers(renderGraph, area.id);\n for (const id of members.nodeIds) {\n const node = renderGraph.nodes.find((node) => node.id === id);\n if (\n node &&\n (area.controlHeight ?? 0) > 0 &&\n node.position.y >= area.position.y + 34 &&\n node.position.y < area.position.y + 34 + (area.controlHeight ?? 0)\n )\n projected.add(id);\n else nodes.set(id, area);\n }\n for (const id of members.areaIds) hiddenAreas.add(id);\n }\n return { nodes, projected, hiddenAreas };\n }, [renderGraph, features.areas]);\n const modelNodes: FlowNode[] = useMemo(\n () => [\n ...(features.areas\n ? renderGraph.areas.map(\n (area): FlowNode => ({\n id: areaFlowId(area.id),\n type: \"spagbolArea\",\n position: area.position,\n selected: snapshot.selection.areaIds.includes(area.id),\n hidden: collapsed.hiddenAreas.has(area.id),\n draggable: false,\n selectable: false,\n connectable: false,\n deletable: false,\n zIndex: -1,\n data: { area, stationaryOriginal: duplicatePresentation?.originalAreas.has(area.id) },\n measured: measuredSizes.current.get(areaFlowId(area.id)),\n style: {\n width: area.size.width,\n height: area.collapsed\n ? 34 + (area.controlHeight ?? 0)\n : area.size.height,\n },\n }),\n )\n : []),\n ...renderGraph.nodes.map(\n (node): FlowNode => ({\n id: nodeFlowId(node.id),\n type: \"spagbolNode\",\n position: node.position,\n selected: snapshot.selection.nodeIds.includes(node.id),\n hidden: collapsed.nodes.has(node.id),\n draggable:\n editor.editing && views[node.kind]?.draggable !== false &&\n !collapsed.projected.has(node.id) &&\n !duplicatePresentation?.originalNodes.has(node.id),\n selectable:\n editor.editing && views[node.kind]?.selectable !== false &&\n !collapsed.projected.has(node.id) &&\n !duplicatePresentation?.originalNodes.has(node.id),\n connectable:\n editor.editing &&\n !collapsed.projected.has(node.id) &&\n !duplicatePresentation?.originalNodes.has(node.id),\n focusable: !duplicatePresentation?.originalNodes.has(node.id),\n deletable: false,\n dragHandle: \".spagbol-canvas-drag-handle\",\n data: {\n node: duplicatePresentation?.originalNodes.get(node.id) ?? node,\n projected: collapsed.projected.has(node.id),\n stationaryOriginal: duplicatePresentation?.originalNodes.has(\n node.id,\n ),\n },\n measured:\n measuredSizes.current.get(nodeFlowId(node.id)) ??\n (duplicatePresentation?.originalNodes.has(node.id)\n ? measuredSizes.current.get(\n nodeFlowId(\n duplicatePresentation.originalNodes.get(node.id)!.id,\n ),\n )\n : undefined),\n className: duplicatePresentation?.previewNodeIds.has(node.id)\n ? \"spagbol-canvas-duplicate-preview\"\n : undefined,\n style: {\n width: views[node.kind]?.autoWidth && !node.size?.width ? \"max-content\" : (node.size?.width ?? Math.max(220, (groupPanelLayout(node)?.size.width ?? 0) + 2)) * (node.scale ?? 1),\n ...(node.size?.height ? { height: node.size.height * (node.scale ?? 1) } : {}),\n },\n zIndex: connecting && revealedNodeId === node.id ? 5 : snapshot.selection.nodeIds.includes(node.id) ? 3 : 1,\n }),\n ),\n ],\n [\n renderGraph,\n duplicatePresentation,\n snapshot.selection,\n snapshot.mode,\n editor,\n features.areas,\n collapsed,\n measurementRevision,\n connecting,\n revealedNodeId,\n ],\n );\n // React Flow publishes handle measurements. Only measured geometry participates\n // in anchor derivation, so updating invisible anchors cannot form a render loop.\n const measurementKey = flowNodes\n .filter(\n (node) => node.id.startsWith(\"node:\") || node.id.startsWith(\"area:\"),\n )\n .map((node) => {\n const internal = flow.getInternalNode(node.id);\n return JSON.stringify([\n node.id,\n node.position,\n node.measured,\n internal?.internals.handleBounds,\n ]);\n })\n .join(\"|\");\n const panExtent = useMemo(() => {\n if (props.panBounds === false) return infiniteCanvasExtent;\n // Use saved content, not temporary duplication nodes or invisible link anchors.\n const items = graph.nodes.map((node) => {\n const internal = flow.getInternalNode(nodeFlowId(node.id));\n return {\n position: node.position,\n hidden: collapsed.nodes.has(node.id),\n size: {\n width: internal?.measured?.width ?? node.size?.width ?? 220,\n height: internal?.measured?.height ?? node.size?.height ?? 96,\n },\n };\n });\n if (features.areas)\n items.push(\n ...graph.areas.map((area) => ({\n position: area.position,\n hidden: collapsed.hiddenAreas.has(area.id),\n size: {\n width: area.size.width,\n height: area.collapsed\n ? 34 + (area.controlHeight ?? 0)\n : area.size.height,\n },\n })),\n );\n return translateExtentForVisibleContent(\n items,\n settledViewport,\n editorSize,\n props.panBounds?.emptyScreenRatio ?? 0.7,\n );\n }, [\n graph,\n features.areas,\n collapsed,\n flow,\n measurementKey,\n settledViewport.zoom,\n editorSize,\n props.panBounds,\n ]);\n useEffect(() => {\n if (\n props.panBounds === false ||\n !flow.viewportInitialized ||\n !nodesInitialized ||\n viewportMoving.current ||\n snapshot.gesture\n )\n return;\n const current = flow.getViewport();\n const clamped = clampViewportToTranslateExtent(\n current,\n panExtent,\n editorSize,\n );\n if (\n Math.abs(current.x - clamped.x) < 0.0001 &&\n Math.abs(current.y - clamped.y) < 0.0001 &&\n current.zoom === clamped.zoom\n )\n return;\n setSettledViewport((previous) =>\n previous.x === clamped.x &&\n previous.y === clamped.y &&\n previous.zoom === clamped.zoom\n ? previous\n : clamped,\n );\n void flow.setViewport(clamped);\n }, [\n panExtent,\n editorSize,\n flow,\n settledViewport,\n nodesInitialized,\n snapshot.gesture,\n props.panBounds,\n ]);\n const anchors: FlowNode[] = useMemo(() => {\n if (!features.linkProperties || snapshot.mode !== \"edit\") return [];\n function endpoint(\n point: { nodeId: string; portId: string },\n direction: \"input\" | \"output\",\n ): Point {\n const area = collapsed.nodes.get(point.nodeId);\n if (area)\n return {\n x: area.position.x + (direction === \"output\" ? area.size.width : 0),\n y: area.position.y + 17,\n };\n const internal = flow.getInternalNode(nodeFlowId(point.nodeId));\n const handle = internal?.internals.handleBounds?.[\n direction === \"output\" ? \"source\" : \"target\"\n ]?.find(\n (handle) =>\n handle.id ===\n (direction === \"output\"\n ? sourceHandle(point.portId)\n : targetHandle(point.portId)),\n );\n if (internal && handle)\n return {\n x:\n internal.internals.positionAbsolute.x + handle.x + handle.width / 2,\n y:\n internal.internals.positionAbsolute.y +\n handle.y +\n handle.height / 2,\n };\n const node = renderGraph.nodes.find((node) => node.id === point.nodeId);\n return {\n x:\n (node?.position.x ?? 0) +\n (direction === \"output\" ? (node?.size?.width ?? 220) : 0),\n y: (node?.position.y ?? 0) + 56,\n };\n }\n const cache = new Map<string, Point>();\n function midpoint(link: GraphLink, visited = new Set<string>()): Point {\n const cached = cache.get(link.id);\n if (cached) return cached;\n if (visited.has(link.id)) return { x: 0, y: 0 };\n const next = new Set([...visited, link.id]);\n // Keep the target reference narrowed across callback boundaries.\n const reference =\n link.target.type === \"link\" ? link.target.linkId : undefined;\n const parent = reference\n ? renderGraph.links.find((candidate) => candidate.id === reference)\n : undefined;\n const destination =\n link.target.type === \"port\"\n ? endpoint(link.target, \"input\")\n : parent\n ? midpoint(parent, next)\n : { x: 0, y: 0 };\n const [, x, y] = linkPath(\n endpoint(link.source, \"output\"),\n destination,\n linkPresentation[\n duplicatePresentation?.previewLinks.get(link.id) ?? link.id\n ]?.feedback,\n link.target.type === \"port\" &&\n link.source.nodeId === link.target.nodeId,\n );\n const result = { x, y };\n cache.set(link.id, result);\n return result;\n }\n const targeted = new Set(renderGraph.links.flatMap(link => link.target.type === 'link' ? [link.target.linkId] : []));\n return renderGraph.links.filter(link => connecting || targeted.has(link.id)).map((link) => ({\n id: anchorFlowId(link.id),\n type: \"spagbolAnchor\",\n position: midpoint(link),\n data: { linkId: link.id },\n measured: { width: 1, height: 1 },\n draggable: false,\n selectable: false,\n deletable: false,\n focusable: false,\n zIndex: 4,\n style: { width: 1, height: 1 },\n }));\n }, [\n renderGraph,\n duplicatePresentation,\n features.linkProperties,\n connecting,\n snapshot.mode,\n collapsed,\n linkPresentation,\n measurementKey,\n flow,\n ]);\n const nodePresentations = useRef<FlowNode[]>([]);\n const displayNodes = useMemo(\n () => { const result = reuseFlowPresentations(nodePresentations.current, [...modelNodes, ...anchors]); nodePresentations.current = result; return result; },\n [modelNodes, anchors],\n );\n const graphLinks: FlowLink[] = useMemo(\n () =>\n snapshot.mode === \"controls\"\n ? []\n : renderGraph.links.flatMap((link): FlowLink[] => {\n if (link.target.type === \"link\" && !features.linkProperties)\n return [];\n const sourceArea = collapsed.nodes.get(link.source.nodeId);\n const targetArea =\n link.target.type === \"port\"\n ? collapsed.nodes.get(link.target.nodeId)\n : undefined;\n if (sourceArea && sourceArea.id === targetArea?.id) return [];\n const sourceNode = renderGraph.nodes.find(\n (node) => node.id === link.source.nodeId,\n );\n const targetNodeId =\n link.target.type === \"port\" ? link.target.nodeId : undefined;\n const targetNode = renderGraph.nodes.find(\n (node) => node.id === targetNodeId,\n );\n const preview =\n duplicatePresentation?.previewLinks.has(link.id) ?? false;\n const presentation = props.virtualLinks?.some(item => item.id === link.id) ? { virtual: true } :\n linkPresentation[\n duplicatePresentation?.previewLinks.get(link.id) ?? link.id\n ];\n const related =\n snapshot.selection.nodeIds.includes(link.source.nodeId) ||\n (!!targetNodeId &&\n snapshot.selection.nodeIds.includes(targetNodeId));\n const selected =\n !duplicatePreview && snapshot.selection.linkIds.includes(link.id);\n return [\n {\n id: link.id,\n type: \"spagbolLink\",\n source: sourceArea\n ? areaFlowId(sourceArea.id)\n : nodeFlowId(link.source.nodeId),\n sourceHandle: sourceArea\n ? \"collapsed:out\"\n : sourceHandle(link.source.portId),\n target: targetArea\n ? areaFlowId(targetArea.id)\n : link.target.type === \"port\"\n ? nodeFlowId(link.target.nodeId)\n : anchorFlowId(link.target.linkId),\n targetHandle: targetArea\n ? \"collapsed:in\"\n : link.target.type === \"port\"\n ? targetHandle(link.target.portId)\n : `property:${link.target.property}`,\n selected,\n reconnectable:\n selected &&\n editor.editing &&\n !presentation?.virtual &&\n !sourceArea &&\n !targetArea,\n selectable:\n editor.editing && !presentation?.virtual && !duplicatePreview,\n deletable: false,\n zIndex: selected ? 10 : 0,\n data: {\n link,\n preview,\n ...presentation,\n emphasized: related || preview,\n dimmed:\n !duplicatePreview &&\n (snapshot.selection.nodeIds.length > 0 ||\n snapshot.selection.linkIds.length > 0) &&\n !selected &&\n !related,\n disabled:\n link.enabled === false ||\n sourceNode?.enabled === false ||\n targetNode?.enabled === false,\n },\n },\n ];\n }),\n [\n renderGraph,\n duplicatePresentation,\n duplicatePreview,\n snapshot.mode,\n snapshot.selection,\n features.linkProperties,\n collapsed,\n linkPresentation,\n editor,\n ],\n );\n const rawDisplayLinks = useMemo(\n () =>\n reconnectOriginal && snapshot.mode === \"edit\"\n ? [...graphLinks, reconnectOriginal]\n : graphLinks,\n [graphLinks, reconnectOriginal, snapshot.mode],\n );\n\n const linkPresentations = useRef<FlowLink[]>([]);\n const displayLinks = useMemo(() => {\n const result = reuseFlowPresentations(linkPresentations.current, rawDisplayLinks);\n linkPresentations.current = result; return result;\n }, [rawDisplayLinks]);\n\n function modelConnection(\n value: Pick<Connection, \"source\" | \"target\"> & {\n sourceHandle?: string | null;\n targetHandle?: string | null;\n },\n ): { source: GraphLink[\"source\"]; target: LinkTarget } | undefined {\n const source = parseHandle(value.sourceHandle),\n target = parseHandle(value.targetHandle);\n if (\n !source ||\n source.direction !== \"output\" ||\n !value.source.startsWith(\"node:\")\n )\n return;\n if (\n value.target.startsWith(\"anchor:\") &&\n value.targetHandle?.startsWith(\"property:\")\n )\n return {\n source: { nodeId: value.source.slice(5), portId: source.id },\n target: {\n type: \"link\",\n linkId: value.target.slice(7),\n property: value.targetHandle.slice(9),\n },\n };\n if (\n !target ||\n target.direction !== \"input\" ||\n !value.target.startsWith(\"node:\")\n )\n return;\n return {\n source: { nodeId: value.source.slice(5), portId: source.id },\n target: {\n type: \"port\",\n nodeId: value.target.slice(5),\n portId: target.id,\n },\n };\n }\n function onNodesChange(changes: NodeChange<FlowNode>[]) {\n const remeasured = rememberMeasurements(measuredSizes.current, changes);\n if (remeasured) setMeasurementRevision((value) => value + 1);\n const selected = new Set(editor.getSnapshot().selection.nodeIds);\n let selectionChanged = false;\n for (const change of changes)\n if (\n change.type === \"select\" &&\n change.id.startsWith(\"node:\") &&\n graph.nodes.some((node) => nodeFlowId(node.id) === change.id)\n ) {\n const id = change.id.slice(5);\n if (change.selected) selected.add(id);\n else selected.delete(id);\n selectionChanged = true;\n }\n if (selectionChanged)\n editor.select({\n nodeIds: [...selected],\n linkIds: editor.getSnapshot().selection.linkIds,\n });\n const positions = changes.filter(\n (change) =>\n change.type === \"position\" &&\n change.position &&\n change.id.startsWith(\"node:\"),\n );\n if (positions.length && duplicate.current) {\n const next = {\n ...duplicate.current,\n positions: new Map(duplicate.current.positions),\n };\n let changed = false;\n for (const change of positions)\n if (\n change.type === \"position\" &&\n change.position &&\n next.positions.has(change.id.slice(5))\n ) {\n const previous = next.positions.get(change.id.slice(5));\n if (\n previous?.x !== change.position.x ||\n previous?.y !== change.position.y\n ) {\n next.positions.set(change.id.slice(5), { ...change.position });\n changed = true;\n }\n }\n if (!changed) return;\n duplicate.current = next;\n setDuplicatePreview(next);\n return;\n }\n if (cancelledDuplicate.current) return;\n if (positions.length)\n editor.edit(\"Move nodes\", \"layout\", (graph) => {\n for (const change of positions)\n if (change.type === \"position\" && change.position) {\n const node = graph.nodes.find(\n (node) => nodeFlowId(node.id) === change.id,\n );\n if (node) node.position = { ...change.position };\n }\n });\n }\n function onEdgesChange(changes: EdgeChange<FlowLink>[]) {\n const selected = new Set(editor.getSnapshot().selection.linkIds);\n let changed = false;\n for (const change of changes)\n if (change.type === \"select\") {\n if (change.selected) selected.add(change.id);\n else selected.delete(change.id);\n changed = true;\n }\n if (changed)\n editor.select({\n nodeIds: editor.getSnapshot().selection.nodeIds,\n linkIds: [...selected],\n });\n }\n function openPicker(client: Point, extra: Partial<Picker> = {}) {\n if (!editor.editing) return;\n const bounds = root.current?.getBoundingClientRect();\n setSearch(\"\");\n setPicker({\n point: flow.screenToFlowPosition(client),\n screen: {\n x: Math.min(\n client.x - (bounds?.left ?? 0),\n Math.max(8, (bounds?.width ?? 400) - 260),\n ),\n y: Math.min(\n client.y - (bounds?.top ?? 0),\n Math.max(8, (bounds?.height ?? 500) - 320),\n ),\n },\n ...extra,\n });\n }\n function chooseNode(kind: string) {\n if (!picker) return;\n attempt(() => {\n if (kind === 'spagbol.area') { editor.addArea(picker.point); setPicker(null); return; }\n const definition = editor.nodes.get(kind)!;\n if (picker.linkId) {\n const prototype = editor.nodes.create(kind, picker.point);\n const ports = portsFor(prototype, editor.nodes),\n input = ports.find(\n (port) => port.direction === \"input\" && port.connectable !== false,\n ),\n output = ports.find(\n (port) => port.direction === \"output\" && port.connectable !== false,\n );\n if (!input || !output)\n throw new Error(\n \"Choose a node with an input and an output to insert it into a link.\",\n );\n editor.insertNode(\n picker.linkId,\n kind,\n picker.point,\n input.id,\n output.id,\n );\n } else {\n editor.beginGesture(\n picker.origin ? \"Create connected node\" : \"Create node\",\n );\n try {\n const id = editor.addNode(kind, picker.point)!;\n if (picker.origin) {\n const node = editor.graph.nodes.find((node) => node.id === id)!;\n const opposite =\n picker.origin.direction === \"output\" ? \"input\" : \"output\";\n const port = definition\n .ports(node)\n .find(\n (port) =>\n port.direction === opposite && port.connectable !== false,\n );\n if (!port)\n throw new Error(`This node has no connectable ${opposite}.`);\n if (opposite === \"input\")\n editor.connect(\n { nodeId: picker.origin.nodeId, portId: picker.origin.portId },\n { type: \"port\", nodeId: id, portId: port.id },\n activeMode,\n );\n else\n editor.connect(\n { nodeId: id, portId: port.id },\n {\n type: \"port\",\n nodeId: picker.origin.nodeId,\n portId: picker.origin.portId,\n },\n activeMode,\n );\n }\n editor.commitGesture();\n } catch (cause) {\n editor.cancelGesture();\n throw cause;\n }\n }\n setPicker(null);\n });\n }\n function linkAt(\n point: Point,\n source: GraphLink[\"source\"],\n mode: string,\n replacingId?: string,\n ): string | undefined {\n if (\n !features.linkProperties ||\n !(editor.policy.linkProperties ?? []).includes(\"weight\")\n )\n return;\n let best: { id: string; distance: number } | undefined;\n for (const path of root.current?.querySelectorAll<SVGPathElement>(\n \"[data-spagbol-link]\",\n ) ?? []) {\n const id = path.dataset.spagbolLink;\n if (\n !id ||\n editor.canConnect(\n source,\n { type: \"link\", linkId: id, property: \"weight\" },\n mode,\n replacingId,\n )\n )\n continue;\n const matrix = path.getScreenCTM();\n if (!matrix) continue;\n const local = new DOMPoint(point.x, point.y).matrixTransform(\n matrix.inverse(),\n );\n const length = path.getTotalLength();\n let distance = Infinity;\n for (let i = 0; i <= 48; i++) {\n const p = path.getPointAtLength((length * i) / 48);\n distance = Math.min(\n distance,\n Math.hypot(p.x - local.x, p.y - local.y) * zoom,\n );\n }\n if (distance < 14 && (!best || distance < best.distance))\n best = { id, distance };\n }\n return best?.id;\n }\n async function paste() {\n let fragment: ReturnType<typeof readFragment> | undefined;\n try {\n const text = await navigator.clipboard?.readText();\n if (text) fragment = readFragment(text);\n } catch {\n /* Fall back to this controller's clipboard. */\n }\n attempt(() => editor.paste(fragment));\n }\n function keyDown(event: KeyboardEvent<HTMLDivElement>) {\n const target = event.target as HTMLElement;\n if (\n target.closest(\n 'input,textarea,select,[contenteditable=\"true\"],[role=\"spinbutton\"]',\n )\n )\n return;\n const command = event.metaKey || event.ctrlKey,\n key = event.key.toLowerCase();\n if (key === \"escape\") {\n if (duplicate.current) cancelledDuplicate.current = true;\n duplicate.current = null;\n setDuplicatePreview(null);\n editor.cancelGesture();\n flowStore.getState().cancelConnection();\n setPicker(null);\n setDrawing(null);\n setConnecting(false);\n connection.current = null;\n connectionDone.current = true;\n setReconnectOriginal(null);\n return;\n }\n if (command && key === \"z\") {\n event.preventDefault();\n event.shiftKey ? editor.redo() : editor.undo();\n return;\n }\n if (command && key === \"y\") {\n event.preventDefault();\n editor.redo();\n return;\n }\n if (!editor.editing) return;\n if (command && key === \"c\") {\n event.preventDefault();\n const fragment = editor.copy();\n void navigator.clipboard\n ?.writeText(JSON.stringify(fragment))\n .catch(() => undefined);\n return;\n }\n if (command && key === \"v\") {\n event.preventDefault();\n void paste();\n return;\n }\n if (command && key === \"d\") {\n event.preventDefault();\n attempt(() => editor.duplicate());\n return;\n }\n if (command && key === \"a\") {\n event.preventDefault();\n editor.select({ nodeIds: graph.nodes.filter(node => views[node.kind]?.selectable !== false).map((node) => node.id) });\n return;\n }\n if (command && key === \"0\") {\n event.preventDefault();\n void flow.zoomTo(1);\n return;\n }\n if (key === \"delete\" || key === \"backspace\") {\n event.preventDefault();\n editor.deleteSelection(command);\n return;\n }\n if (!command && key === \"x\") {\n editor.edit(\"Toggle enabled\", \"values\", (graph) => {\n const nodes = graph.nodes.filter((node) =>\n snapshot.selection.nodeIds.includes(node.id),\n );\n if (nodes.length) {\n const enabled = nodes.every((node) => node.enabled === false);\n for (const node of nodes) node.enabled = enabled;\n } else {\n const links = graph.links.filter((link) =>\n snapshot.selection.linkIds.includes(link.id),\n );\n const enabled = links.every((link) => link.enabled === false);\n for (const link of links) link.enabled = enabled;\n }\n });\n return;\n }\n const mode = editor.modes\n .list()\n .find(\n (mode) =>\n mode.shortcut === key &&\n (!editor.policy.modes || editor.policy.modes.includes(mode.id)),\n );\n if (mode && !command) {\n setActiveMode(mode.id);\n if (!connecting)\n editor.edit(\"Change link mode\", \"values\", (graph) => {\n for (const link of graph.links)\n if (snapshot.selection.linkIds.includes(link.id))\n link.mode = mode.id;\n });\n }\n }\n function pointFromEvent(event: MouseEvent | TouchEvent): Point | undefined {\n if (\"clientX\" in event) return { x: event.clientX, y: event.clientY };\n const touch = event.changedTouches[0];\n return touch ? { x: touch.clientX, y: touch.clientY } : undefined;\n }\n const availableNodes = [...editor.nodes.list().filter(definition => !props.nodeKinds || props.nodeKinds.includes(definition.kind)), ...(features.areas && !picker?.origin && !picker?.linkId ? [{ kind: 'spagbol.area', label: 'Area', createData: () => ({}), ports: () => [] } as import('../core/index.js').NodeDefinition] : [])]\n .filter(definition => snapshot.path.length > 0 || ![spagbolGroupKinds.inputs, spagbolGroupKinds.outputs].includes(definition.kind as typeof spagbolGroupKinds.inputs))\n .filter((definition) =>\n `${definition.label} ${definition.category ?? \"\"} ${definition.keywords?.join(\" \") ?? \"\"}`\n .toLowerCase()\n .includes(search.toLowerCase()),\n );\n\n return (\n <GraphContext.Provider value={context}>\n <div\n ref={root}\n className={`spagbol-canvas ${props.className ?? \"\"}`}\n style={\n {\n ...props.style,\n \"--spagbol-title-scale\": zoom < 0.3 ? 1.75 : zoom < 0.5 ? 1.3 : 1,\n \"--spagbol-canvas-height\": `${editorSize.height}px`,\n } as CSSProperties\n }\n tabIndex={0}\n aria-label={props.ariaLabel ?? \"Graph editor\"}\n onKeyDown={keyDown}\n onDoubleClick={(event) => {\n if (\n (event.target as HTMLElement).classList.contains(\"react-flow__pane\")\n ) {\n event.preventDefault();\n openPicker({ x: event.clientX, y: event.clientY });\n }\n }}\n onPointerDownCapture={(event) => {\n const pane = (event.target as HTMLElement).classList.contains(\n \"react-flow__pane\",\n );\n if (pane) root.current?.focus({ preventScroll: true });\n if (\n pane &&\n features.areas &&\n editor.editing &&\n (event.metaKey || event.ctrlKey) &&\n event.button === 0\n ) {\n event.preventDefault();\n event.stopPropagation();\n const point = flow.screenToFlowPosition({\n x: event.clientX,\n y: event.clientY,\n });\n setDrawing({ start: point, end: point, pointer: event.pointerId });\n event.currentTarget.setPointerCapture(event.pointerId);\n }\n }}\n onPointerMove={(event) => {\n if (drawing?.pointer === event.pointerId)\n setDrawing({\n ...drawing,\n end: flow.screenToFlowPosition({\n x: event.clientX,\n y: event.clientY,\n }),\n });\n }}\n onPointerUp={(event) => {\n if (drawing?.pointer !== event.pointerId) return;\n const position = {\n x: Math.min(drawing.start.x, drawing.end.x),\n y: Math.min(drawing.start.y, drawing.end.y),\n },\n size = {\n width: Math.abs(drawing.start.x - drawing.end.x),\n height: Math.abs(drawing.start.y - drawing.end.y),\n };\n if (size.width >= 40 && size.height >= 40)\n editor.addArea(position, size);\n setDrawing(null);\n if (event.currentTarget.hasPointerCapture(event.pointerId))\n event.currentTarget.releasePointerCapture(event.pointerId);\n }}\n onPointerCancel={() => {\n if (duplicate.current) cancelledDuplicate.current = true;\n duplicate.current = null;\n setDuplicatePreview(null);\n setDrawing(null);\n editor.cancelGesture();\n }}\n >\n {props.background && (\n <div className=\"spagbol-canvas-background\">{props.background}</div>\n )}\n <SpagbolCanvasFlow<FlowNode, FlowLink>\n nodes={displayNodes}\n onlyRenderVisibleElements\n edges={displayLinks}\n nodeTypes={nodeTypes}\n edgeTypes={edgeTypes}\n onNodesChange={onNodesChange}\n onEdgesChange={onEdgesChange}\n onNodeMouseEnter={(_, node) => { if (connecting && node.data.node?.compact && !node.data.stationaryOriginal) setRevealedNodeId(node.data.node.id); }}\n onNodeMouseLeave={(_, node) => setRevealedNodeId(id => id === node.data.node?.id ? null : id)}\n onNodeDoubleClick={(event, flowNode) => {\n const node = flowNode.data.node;\n if (node?.graph && features.nestedGraphs && !(event.target as HTMLElement).closest('.spagbol-node-frame-header')) { event.preventDefault(); editor.enter(node.id); }\n }}\n onPaneClick={() => {\n editor.select({});\n setPicker(null);\n }}\n onNodeDragStart={(event, node) => {\n if (!node.data.node) return;\n cancelledDuplicate.current = false;\n editor.beginGesture(\n event.altKey ? \"Duplicate nodes\" : \"Move nodes\",\n );\n if (event.altKey) {\n const selection = editor.getSnapshot().selection;\n const ids = selection.nodeIds.includes(node.data.node.id)\n ? selection.nodeIds\n : [node.data.node.id];\n duplicate.current = {\n namespace: createId(\"duplicate-preview\"),\n fragment: copyFragment(graph, ids),\n origin: { ...node.position },\n nodeId: node.data.node.id,\n positions: new Map(\n graph.nodes\n .filter((node) => ids.includes(node.id))\n .map((node) => [node.id, { ...node.position }]),\n ),\n external: event.ctrlKey || event.metaKey || event.shiftKey,\n };\n setDuplicatePreview(duplicate.current);\n }\n }}\n onNodeDragStop={(_event, node) => {\n const current = duplicate.current;\n duplicate.current = null;\n setDuplicatePreview(null);\n if (cancelledDuplicate.current) {\n cancelledDuplicate.current = false;\n editor.cancelGesture();\n editor.select(editor.getSnapshot().selection);\n return;\n }\n if (current) {\n const position =\n current.positions.get(current.nodeId) ?? node.position;\n const delta = {\n x: position.x - current.origin.x,\n y: position.y - current.origin.y,\n };\n try {\n editor.paste(current.fragment, delta, current.external);\n } catch (cause) {\n editor.cancelGesture();\n setError(\n cause instanceof Error ? cause.message : String(cause),\n );\n return;\n }\n }\n editor.commitGesture();\n }}\n onConnectStart={(_event, params) => {\n setRevealedNodeId(params.nodeId?.startsWith(\"node:\") ? params.nodeId.slice(5) : null);\n connection.current = params;\n connectionDone.current = false;\n setConnecting(true);\n }}\n onConnect={(value) => {\n connectionDone.current = true;\n const next = modelConnection(value);\n if (next)\n attempt(() => {\n editor.connect(next.source, next.target, activeMode);\n });\n }}\n onConnectEnd={(event, state) => {\n const origin = connection.current;\n connection.current = null;\n setConnecting(false);\n if (\n connectionDone.current ||\n reconnecting.current ||\n !origin ||\n state.toHandle\n )\n return;\n const point = pointFromEvent(event),\n port = parseHandle(origin.handleId);\n if (!point || !port || !origin.nodeId?.startsWith(\"node:\")) return;\n const source = { nodeId: origin.nodeId.slice(5), portId: port.id };\n const hit =\n port.direction === \"output\"\n ? linkAt(point, source, activeMode)\n : undefined;\n if (hit)\n attempt(() => {\n editor.connect(\n source,\n { type: \"link\", linkId: hit, property: \"weight\" },\n activeMode,\n );\n });\n else if (\"metaKey\" in event && (event.metaKey || event.ctrlKey))\n openPicker(point, {\n origin: { ...source, direction: port.direction },\n });\n }}\n reconnectRadius={12}\n onReconnectStart={(event, edge) => {\n reconnecting.current = edge.id;\n reconnectDuplicate.current =\n event.ctrlKey || event.metaKey || event.altKey;\n setReconnectOriginal(\n reconnectDuplicate.current ? stationaryReconnectEdge(edge) : null,\n );\n connectionDone.current = false;\n setConnecting(true);\n }}\n onReconnect={(edge, value) => {\n connectionDone.current = true;\n const next = modelConnection(value);\n if (next)\n attempt(() => {\n editor.reconnect(\n edge.id,\n next.source,\n next.target,\n reconnectDuplicate.current,\n );\n });\n }}\n onReconnectEnd={(event, edge, handleType, state) => {\n if (\n !connectionDone.current &&\n !state.toHandle &&\n handleType === \"source\"\n ) {\n const point = pointFromEvent(event),\n link = edge.data?.link;\n if (point && link) {\n const hit = linkAt(point, link.source, link.mode, edge.id);\n if (hit)\n attempt(() => {\n editor.reconnect(\n edge.id,\n link.source,\n { type: \"link\", linkId: hit, property: \"weight\" },\n event.ctrlKey || event.metaKey || event.altKey,\n );\n });\n }\n }\n reconnecting.current = null;\n setReconnectOriginal(null);\n setConnecting(false);\n }}\n isValidConnection={(value) => {\n const next = modelConnection(value);\n const old =\n reconnecting.current &&\n graph.links.find((link) => link.id === reconnecting.current);\n return (\n !!next &&\n !editor.canConnect(\n next.source,\n next.target,\n old ? old.mode : activeMode,\n reconnecting.current ?? undefined,\n )\n );\n }}\n onEdgeDoubleClick={(event, edge) => {\n event.preventDefault();\n if (edge.data?.virtual) return;\n openPicker(\n { x: event.clientX, y: event.clientY },\n { linkId: edge.id },\n );\n }}\n connectionLineType={ConnectionLineType.Bezier}\n connectionLineStyle={{\n stroke: editor.modes.get(activeMode)?.color,\n strokeWidth: 2,\n }}\n defaultViewport={props.defaultViewport}\n onInit={instance => props.onInit?.(instance as unknown as ReactFlowInstance)}\n onMoveStart={() => {\n viewportMoving.current = true;\n }}\n onMove={(_, viewport) => setZoom(viewport.zoom)}\n onMoveEnd={(_, viewport) => {\n viewportMoving.current = false;\n setSettledViewport(viewport);\n props.onViewportChange?.(viewport);\n }}\n translateExtent={panExtent}\n fitView={!props.defaultViewport}\n fitViewOptions={{ padding: 0.18 }}\n minZoom={0.05}\n maxZoom={3}\n panOnScroll\n selectionOnDrag\n selectionMode={SelectionMode.Partial}\n panOnDrag={[1, 2]}\n zoomOnScroll={false}\n zoomOnPinch\n zoomOnDoubleClick={false}\n deleteKeyCode={null}\n multiSelectionKeyCode={[\"Meta\", \"Shift\"]}\n nodesDraggable={editor.editing}\n nodesConnectable={editor.editing}\n elementsSelectable={editor.editing}\n autoPanOnConnect\n autoPanOnNodeDrag\n proOptions={{ hideAttribution: true }}\n >\n {drawing && (\n <ViewportPortal>\n <div\n className=\"spagbol-canvas-area-draft\"\n style={{\n transform: `translate(${Math.min(drawing.start.x, drawing.end.x)}px, ${Math.min(drawing.start.y, drawing.end.y)}px)`,\n width: Math.abs(drawing.start.x - drawing.end.x),\n height: Math.abs(drawing.start.y - drawing.end.y),\n }}\n />\n </ViewportPortal>\n )}\n </SpagbolCanvasFlow>\n <div ref={setLinkOverlay} className=\"spagbol-canvas-link-overlay\" />\n {(props.toolbar ?? true) === true ? (\n props.controls === false ? null : (\n <SpagbolCanvasControls {...props.controls} />\n )\n ) : (\n props.toolbar\n )}\n {picker && (\n <div\n className=\"spagbol-canvas-picker nodrag nopan\"\n role=\"dialog\"\n aria-label=\"Add node\"\n style={{ left: picker.screen.x, top: picker.screen.y }}\n onPointerDown={(event) => event.stopPropagation()}\n >\n <div className=\"spagbol-canvas-picker-heading\">\n {picker.linkId ? \"insert a node\" : \"add a node\"}\n <button\n aria-label=\"Cancel node creation\"\n onClick={() => setPicker(null)}\n >\n ×\n </button>\n </div>\n <input\n autoFocus\n aria-label=\"Search node types\"\n placeholder=\"Search nodes…\"\n value={search}\n onChange={(event) => setSearch(event.target.value)}\n onKeyDown={(event) => {\n event.stopPropagation();\n if (event.key === \"Escape\") setPicker(null);\n if (event.key === \"Enter\" && availableNodes[0])\n chooseNode(availableNodes[0].kind);\n }}\n />\n <div className=\"spagbol-canvas-picker-list\">\n {availableNodes.map((definition) => (\n <button\n key={definition.kind}\n onClick={() => chooseNode(definition.kind)}\n >\n <span>{definition.label}</span>\n <small>{definition.category}</small>\n </button>\n ))}\n {!availableNodes.length && <p>No matching nodes.</p>}\n </div>\n </div>\n )}\n {error && (\n <div className=\"spagbol-canvas-error\" role=\"alert\">\n {error}\n <button aria-label=\"Dismiss error\" onClick={() => setError(null)}>\n ×\n </button>\n </div>\n )}\n {props.overlay && (\n <div className=\"spagbol-canvas-overlay\">{props.overlay}</div>\n )}\n </div>\n </GraphContext.Provider>\n );\n}\n"]}
1
+ {"version":3,"file":"SpagbolCanvas.js","sourceRoot":"","sources":["../../src/react/SpagbolCanvas.tsx"],"names":[],"mappings":"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","sourcesContent":["import { SPAGBOL_ZOOM_BASELINE, spagbolHeaderTitleScale } from \"./zoom.js\";\nimport { previewNodePositions, applyNodePositions } from \"./nodeDrag.js\";\nimport { createPortal } from \"react-dom\";\nimport { SpagbolCanvasLinkControls } from \"./SpagbolCanvasLinkControls.js\";\nimport { SpagbolCanvasFlow } from \"./SpagbolCanvasFlow.js\";\nimport {\n applyNodeChanges,\n BaseEdge,\n ConnectionLineType,\n EdgeLabelRenderer,\n Handle,\n Position,\n ReactFlow,\n ReactFlowProvider,\n SelectionMode,\n ViewportPortal,\n useReactFlow,\n useStore,\n useStoreApi,\n useUpdateNodeInternals,\n useNodeId,\n useNodesInitialized,\n useViewport,\n type Connection,\n type Edge,\n type EdgeProps,\n type Node,\n type NodeProps,\n type NodeChange,\n type EdgeChange,\n type OnConnectStartParams,\n type Viewport,\n type ReactFlowInstance,\n} from \"@xyflow/react\";\nimport {\n memo,\n useCallback,\n useEffect,\n useId,\n useMemo,\n useRef,\n useState,\n type CSSProperties,\n type KeyboardEvent,\n type PointerEvent,\n type ReactNode,\n} from \"react\";\nimport {\n areaMembers,\n groupPanelLayout,\n spagbolGroupKinds,\n copyFragment,\n createId,\n portsFor,\n readFragment,\n type Diagnostic,\n type GraphArea,\n type GraphEditor,\n type GraphLink,\n type GraphNode,\n type LinkTarget,\n type Point,\n} from \"../core/index.js\";\nimport {\n GraphContext,\n useEditorSnapshot,\n useEditorSelector,\n useSpagbol,\n type SpagbolCanvasSlots,\n type SpagbolCanvasFeatures,\n type SpagbolTheme,\n type SpagbolNodeView,\n} from \"./context.js\";\nimport { SpagbolNodeFrame, SpagbolNodePanel, useNodeViewProps } from \"./SpagbolNodeFrame.js\";\nimport { SpagbolControlNumber } from \"./SpagbolControlNumber.js\";\nimport {\n SpagbolCanvasControls,\n type SpagbolCanvasControlsOptions,\n} from \"./SpagbolCanvasControls.js\";\nimport {\n rememberMeasurements,\n reuseFlowPresentations,\n stationaryReconnectEdge,\n} from \"./flowPresentation.js\";\nimport {\n duplicateDragPresentation,\n type DuplicateDrag,\n} from \"./duplicateDrag.js\";\nimport {\n translateExtentForVisibleContent,\n clampViewportToTranslateExtent,\n infiniteCanvasExtent,\n} from \"./viewport.js\";\nimport {\n anchorFlowId,\n areaFlowId,\n linkPath,\n nodeFlowId,\n parseHandle,\n sourceHandle,\n targetHandle,\n} from \"./geometry.js\";\n\ninterface FlowData extends Record<string, unknown> {\n node?: GraphNode;\n area?: GraphArea;\n linkId?: string;\n projected?: boolean;\n stationaryOriginal?: boolean;\n}\ntype FlowNode = Node<FlowData, \"spagbolNode\" | \"spagbolArea\" | \"spagbolAnchor\">;\ninterface LinkData extends Record<string, unknown> {\n link: GraphLink;\n emphasized?: boolean;\n dimmed?: boolean;\n feedback?: boolean;\n control?: boolean;\n virtual?: boolean;\n disabled?: boolean;\n preview?: boolean;\n}\ntype FlowLink = Edge<LinkData, \"spagbolLink\">;\nexport interface SpagbolLinkPresentation {\n feedback?: boolean;\n control?: boolean;\n virtual?: boolean;\n}\nexport interface SpagbolCanvasProps extends SpagbolCanvasSlots {\n editor: GraphEditor;\n views?: Readonly<Record<string, SpagbolNodeView>>;\n /** Limit creation/type conversion without discarding existing unsupported nodes. */\n nodeKinds?: readonly string[];\n /** Domain conversion, e.g. capturing an asset before replacing a DSP node. */\n onChangeNodeKind?(id: string, kind: string): void | Promise<void>;\n features?: SpagbolCanvasFeatures;\n diagnostics?: readonly Diagnostic[];\n linkPresentation?: Readonly<Record<string, SpagbolLinkPresentation>>;\n /** Read-only domain relationships, never stored, copied or selected. */\n virtualLinks?: readonly GraphLink[];\n className?: string;\n style?: SpagbolTheme;\n defaultViewport?: Viewport;\n onViewportChange?(viewport: Viewport): void;\n onInit?(instance: ReactFlowInstance): void;\n /** Teia-style content bounds by default; optional margin in screen proportions. */\n panBounds?: false | { emptyScreenRatio?: number };\n onRenderTarget?(key: string, element: HTMLElement | null): void;\n toolbar?: boolean | ReactNode;\n controls?: SpagbolCanvasControlsOptions | false;\n ariaLabel?: string;\n}\nconst defaultGraphViewport = { x: 0, y: 0, zoom: SPAGBOL_ZOOM_BASELINE };\nconst emptyFlowNodes: FlowNode[] = [];\nconst emptyViews: Readonly<Record<string, SpagbolNodeView>> = Object.freeze({});\nconst emptyPresentations: Readonly<Record<string, SpagbolLinkPresentation>> =\n Object.freeze({});\nconst defaultFeatures: SpagbolCanvasFeatures = { compact: true, nestedGraphs: true, panels: true, areas: true, linkProperties: true };\n\nexport function SpagbolCanvas(props: SpagbolCanvasProps) {\n const margin =\n props.panBounds === false ? undefined : props.panBounds?.emptyScreenRatio;\n if (margin !== undefined && (!Number.isFinite(margin) || margin < 0))\n throw new Error(\n \"Pan margin must be a finite, nonnegative screen proportion.\",\n );\n const features = useMemo(() => ({ ...defaultFeatures, ...props.features }), [props.features]);\n if (features.panels && !features.nestedGraphs)\n throw new Error(\"Projected panels require the nestedGraphs feature.\");\n return (\n <ReactFlowProvider>\n <SpagbolCanvasInner {...props} features={features} />\n </ReactFlowProvider>\n );\n}\nconst SpagbolNodeRenderer = memo(function SpagbolNodeRenderer({ data, selected }: NodeProps<FlowNode>) {\n const node = data.node!;\n const { views, features, editor } = useSpagbol();\n const updateInternals = useUpdateNodeInternals();\n const flowId = useNodeId();\n const portKey = portsFor(node, editor.nodes)\n .map((port) => `${port.direction}:${port.id}`)\n .join(\"|\");\n useEffect(() => {\n if (data.projected || !flowId) return;\n const frame = requestAnimationFrame(() => updateInternals(flowId));\n return () => cancelAnimationFrame(frame);\n }, [flowId, portKey, data.projected, updateInternals]);\n const baseProps = useNodeViewProps(node, selected, data.projected === true);\n const props = {\n ...baseProps,\n readOnly: baseProps.readOnly || data.stationaryOriginal === true,\n };\n const view = views[node.kind];\n const Renderer = data.projected ? view?.projected : view?.render;\n const Body = view?.body;\n const content = Renderer ? (\n <Renderer {...props} />\n ) : (\n <SpagbolNodeFrame {...props}>\n {features.panels && node.graph && groupPanelLayout(node) ? (\n <SpagbolNodePanel group={node} />\n ) : null}\n {Body ? <Body {...props} /> : null}\n </SpagbolNodeFrame>\n );\n return data.stationaryOriginal ? (\n <div className=\"spagbol-canvas-duplicate-origin\" inert>\n {content}\n </div>\n ) : (\n content\n );\n}, (previous, next) => previous.selected === next.selected && previous.data.node === next.data.node && previous.data.projected === next.data.projected && previous.data.stationaryOriginal === next.data.stationaryOriginal);\nconst SpagbolCanvasLinkAnchor = memo(function SpagbolCanvasLinkAnchor({ data }: NodeProps<FlowNode>) {\n const { editor, connecting } = useSpagbol();\n return (\n <div className=\"spagbol-canvas-link-anchor\">\n {(editor.policy.linkProperties ?? []).map((property) => (\n <Handle\n key={property}\n id={`property:${property}`}\n type=\"target\"\n position={Position.Left}\n className=\"spagbol-property-port\"\n isConnectable={editor.editing && connecting}\n style={{ opacity: 0 }}\n aria-label={`Link ${property}`}\n />\n ))}\n </div>\n );\n}, (before, after) => before.data.linkId === after.data.linkId);\nfunction SpagbolCanvasArea({ data, selected }: NodeProps<FlowNode>) {\n const area = data.area!;\n const { editor, zoom, areaDuplicate } = useSpagbol();\n const [titleEditing, setTitleEditing] = useState(false);\n const [titleDraft, setTitleDraft] = useState(area.title);\n const drag = useRef<{\n pointer: number;\n start: Point;\n position: Point;\n size: { width: number; height: number };\n resize: boolean;\n duplicate: boolean;\n offset: Point;\n moved: boolean;\n title: boolean;\n } | null>(null);\n function start(event: PointerEvent<HTMLElement>, resize = false) {\n if (!editor.editing || event.button !== 0) return;\n event.preventDefault();\n event.stopPropagation();\n editor.select({ areaIds: [area.id] });\n editor.beginGesture(resize ? \"Resize area\" : event.altKey ? \"Duplicate area\" : \"Move area\");\n if (!resize && event.altKey) areaDuplicate?.(area.id, \"start\", { x: 0, y: 0 }, event.metaKey || event.ctrlKey || event.shiftKey);\n drag.current = {\n pointer: event.pointerId,\n start: { x: event.clientX, y: event.clientY },\n position: { ...area.position },\n size: { ...area.size },\n resize,\n duplicate: !resize && event.altKey, offset: { x: 0, y: 0 }, moved: false, title: !!(event.target as HTMLElement).closest(\".spagbol-canvas-area-title\"),\n };\n event.currentTarget.setPointerCapture(event.pointerId);\n }\n function move(event: PointerEvent<HTMLElement>) {\n const current = drag.current;\n if (!current || current.pointer !== event.pointerId) return;\n event.stopPropagation();\n const x = (event.clientX - current.start.x) / zoom,\n y = (event.clientY - current.start.y) / zoom;\n current.offset = { x, y };\n current.moved ||= Math.abs(x) + Math.abs(y) > 3 / zoom;\n if (current.duplicate) { areaDuplicate?.(area.id, \"move\", { x, y }); return; }\n if (current.resize) {\n const members = areaMembers(editor.graph, area.id);\n const minWidth = area.locked\n ? Math.max(\n 140,\n ...editor.graph.nodes\n .filter((node) => members.nodeIds.has(node.id))\n .map(\n (node) =>\n node.position.x - area.position.x + (node.size?.width ?? 220),\n ),\n )\n : 140;\n const minHeight = area.locked\n ? Math.max(\n 80,\n ...editor.graph.nodes\n .filter((node) => members.nodeIds.has(node.id))\n .map(\n (node) =>\n node.position.y -\n area.position.y +\n (node.size?.height ?? 120),\n ),\n )\n : 80;\n editor.updateArea(area.id, {\n size: {\n width: Math.max(minWidth, current.size.width + x),\n height: Math.max(minHeight, current.size.height + y),\n },\n });\n } else\n editor.moveArea(area.id, {\n x: current.position.x + x,\n y: current.position.y + y,\n });\n }\n function end(event: PointerEvent<HTMLElement>, cancel = false) {\n const current = drag.current;\n if (current?.pointer !== event.pointerId) return;\n drag.current = null;\n if (event.currentTarget.hasPointerCapture(event.pointerId))\n event.currentTarget.releasePointerCapture(event.pointerId);\n if (current.duplicate) areaDuplicate?.(area.id, cancel || !current.moved ? 'cancel' : 'end', current.offset);\n else {\n if (cancel) editor.cancelGesture(); else editor.commitGesture();\n if (!cancel && !current.moved && current.title) { setTitleDraft(area.title); setTitleEditing(true); }\n }\n }\n const pointerHandlers = {\n onPointerMove: move,\n onPointerUp: (event: PointerEvent<HTMLElement>) => end(event),\n onPointerCancel: (event: PointerEvent<HTMLElement>) => end(event, true),\n onLostPointerCapture: (event: PointerEvent<HTMLElement>) =>\n end(event, true),\n };\n return (\n <div\n inert={data.stationaryOriginal === true}\n className={`spagbol-canvas-area${selected ? \" spagbol-canvas-area-selected\" : \"\"}${area.collapsed ? \" spagbol-canvas-area-collapsed\" : \"\"}`}\n style={{\n width: area.size.width,\n height: area.collapsed\n ? 34 + (area.controlHeight ?? 0)\n : area.size.height,\n }}\n >\n <div\n className=\"spagbol-canvas-area-header nodrag nopan\"\n onPointerDown={(event) => start(event)}\n {...pointerHandlers}\n >\n {titleEditing ? <input autoFocus className=\"spagbol-canvas-area-title-input nodrag nopan\" aria-label=\"Area title\" value={titleDraft} onFocus={event => event.currentTarget.select()} onChange={event => setTitleDraft(event.currentTarget.value)} onPointerDown={event => event.stopPropagation()} onBlur={() => { editor.updateArea(area.id, { title: titleDraft.trim() || 'Container' }); setTitleEditing(false); }} onKeyDown={event => { event.stopPropagation(); if (event.key === 'Enter') event.currentTarget.blur(); if (event.key === 'Escape') { setTitleDraft(area.title); setTitleEditing(false); } }} /> : <span className=\"spagbol-canvas-area-title\" onDoubleClick={event => { event.stopPropagation(); if (editor.editing) { setTitleDraft(area.title); setTitleEditing(true); } }}>{area.title}</span>}\n <div\n className=\"spagbol-canvas-area-actions\"\n onPointerDown={(event) => event.stopPropagation()}\n >\n <button\n type=\"button\"\n className=\"spagbol-canvas-area-lock\"\n title={area.locked ? \"Unlock area membership\" : \"Lock area membership\"}\n aria-label={area.locked ? \"Unlock area membership\" : \"Lock area membership\"}\n aria-pressed={area.locked === true}\n disabled={!editor.editing}\n onDoubleClick={event => event.stopPropagation()}\n onClick={event => {\n event.preventDefault();\n event.stopPropagation();\n editor.lockArea(area.id, !area.locked);\n }}\n >\n <span className=\"spagbol-canvas-area-lock-icon\" aria-hidden=\"true\" />\n </button>\n <button\n type=\"button\"\n className=\"spagbol-canvas-area-compact\"\n aria-pressed={area.collapsed === true}\n title={area.collapsed ? \"Expand area\" : \"Collapse area\"}\n aria-label={area.collapsed ? \"Expand area\" : \"Collapse area\"}\n disabled={!editor.editing}\n onClick={() =>\n editor.updateArea(area.id, { collapsed: !area.collapsed })\n }\n >\n {area.collapsed ? \"+\" : \"−\"}\n </button>\n </div>\n </div>\n {!area.collapsed && area.controlHeight ? (\n <div\n className=\"spagbol-canvas-area-divider\"\n style={{ top: 34 + area.controlHeight }}\n />\n ) : null}\n {!area.collapsed && editor.editing && (\n <button\n className=\"spagbol-canvas-area-resize nodrag nopan\"\n aria-label=\"Resize area\"\n onPointerDown={(event) => start(event, true)}\n {...pointerHandlers}\n />\n )}\n <Handle\n id=\"collapsed:in\"\n type=\"target\"\n position={Position.Left}\n isConnectable={false}\n className=\"spagbol-canvas-area-pin\"\n style={{ top: 17 }}\n />\n <Handle\n id=\"collapsed:out\"\n type=\"source\"\n position={Position.Right}\n isConnectable={false}\n className=\"spagbol-canvas-area-pin\"\n style={{ top: 17 }}\n />\n </div>\n );\n}\n\nconst SpagbolCanvasLink = memo(function SpagbolCanvasLink(props: EdgeProps<FlowLink>) {\n const { editor, diagnostics, linkOverlay, connecting } = useSpagbol();\n const flow = useReactFlow();\n const viewport = useViewport();\n const [controlsVisible, setControlsVisible] = useState(false);\n const selectedLinkId = useEditorSelector(editor, snapshot => snapshot.selection.linkIds.length === 1 ? snapshot.selection.linkIds[0] : undefined);\n const showControls = props.selected && selectedLinkId === props.id && editor.editing && !connecting && !props.data?.virtual;\n useEffect(() => {\n if (!showControls) { setControlsVisible(false); return; }\n const timer = window.setTimeout(() => setControlsVisible(true), 260);\n return () => window.clearTimeout(timer);\n }, [showControls]);\n const link = props.data!.link;\n const [path, x, y] = linkPath(\n { x: props.sourceX, y: props.sourceY },\n { x: props.targetX, y: props.targetY },\n props.data?.feedback,\n link.target.type === \"port\" && link.source.nodeId === link.target.nodeId,\n );\n const mode = editor.modes.get(link.mode);\n const errors = diagnostics.filter((item) => item.linkId === link.id);\n const selected = props.selected;\n const className = `spagbol-canvas-link${selected || props.data?.emphasized ? \" spagbol-canvas-link-emphasized\" : \"\"}${props.data?.dimmed ? \" spagbol-canvas-link-dimmed\" : \"\"}${props.data?.disabled ? \" spagbol-canvas-link-disabled\" : \"\"}${props.data?.control ? \" spagbol-canvas-link-control\" : \"\"}${props.data?.virtual ? \" spagbol-canvas-link-virtual\" : \"\"}${errors.length ? \" spagbol-canvas-link-error\" : \"\"}`;\n return (\n <>\n <path\n d={path}\n className=\"spagbol-canvas-link-underlay\"\n fill=\"none\"\n style={{ strokeWidth: selected || props.data?.emphasized ? 7 : 5 }}\n />\n <BaseEdge\n id={props.id}\n path={path}\n interactionWidth={\n link.source.nodeId ===\n (link.target.type === \"port\" ? link.target.nodeId : null)\n ? 38\n : 22\n }\n className={`${className}${props.data?.preview ? \" spagbol-canvas-link-preview\" : \"\"}`}\n style={{ stroke: mode?.color ?? \"var(--spagbol-muted)\" }}\n />\n <path\n d={path}\n className=\"spagbol-canvas-link-hit\"\n data-spagbol-link={link.id}\n fill=\"none\"\n pointerEvents=\"none\"\n />\n {showControls && controlsVisible && linkOverlay && createPortal(\n <SpagbolCanvasLinkControls\n style={{ left: flow.flowToScreenPosition({ x, y }).x, top: flow.flowToScreenPosition({ x, y: !(props.data?.feedback || props.source === props.target) && Math.hypot(props.targetX - props.sourceX, props.targetY - props.sourceY) < 144 ? y - 52 : y }).y, transform: `translate(-50%, -50%) scale(${viewport.zoom})` }}\n weight={link.weight} mode={link.mode} enabled={link.enabled !== false}\n modes={editor.modes.list().filter(mode => !editor.policy.modes || editor.policy.modes.includes(mode.id))}\n onWeightChange={weight => editor.updateLink(link.id, { weight })}\n onModeChange={mode => editor.updateLink(link.id, { mode })}\n onEnabledChange={enabled => editor.updateLink(link.id, { enabled })}\n />, linkOverlay)}\n {errors.length > 0 && (\n <EdgeLabelRenderer>\n <div\n className=\"spagbol-canvas-link-diagnostic\"\n role=\"status\"\n style={{\n transform: `translate(-50%, -50%) translate(${x}px,${y + 18}px)`,\n }}\n title={errors.map((error) => error.message).join(\"\\n\")}\n >\n !\n </div>\n </EdgeLabelRenderer>\n )}\n </>\n );\n}, (before, after) => {\n if (before.id !== after.id || before.selected !== after.selected || before.source !== after.source || before.target !== after.target || before.sourceX !== after.sourceX || before.sourceY !== after.sourceY || before.targetX !== after.targetX || before.targetY !== after.targetY) return false;\n const keys = Object.keys(before.data ?? {});\n return keys.length === Object.keys(after.data ?? {}).length && keys.every(key => before.data?.[key] === after.data?.[key]);\n});\nconst nodeTypes = {\n spagbolNode: SpagbolNodeRenderer,\n spagbolArea: SpagbolCanvasArea,\n spagbolAnchor: SpagbolCanvasLinkAnchor,\n};\nconst edgeTypes = { spagbolLink: SpagbolCanvasLink };\n\ninterface Picker {\n point: Point;\n screen: Point;\n linkId?: string;\n origin?: { nodeId: string; portId: string; direction: \"input\" | \"output\" };\n}\nfunction SpagbolCanvasInner({\n editor,\n views = emptyViews,\n features = defaultFeatures,\n linkPresentation = emptyPresentations,\n ...props\n}: SpagbolCanvasProps) {\n const snapshot = useEditorSnapshot(editor);\n const graph = editor.graph;\n const root = useRef<HTMLDivElement>(null);\n const [linkOverlay, setLinkOverlay] = useState<HTMLDivElement | null>(null);\n const instanceId = useId();\n const flow = useReactFlow<FlowNode, FlowLink>();\n const flowStore = useStoreApi();\n const nodesInitialized = useNodesInitialized();\n // Only cable-property anchors need live native geometry. Subscribing to every\n // position change otherwise causes redundant full-canvas renders during drags.\n const flowNodes = useStore((state) => features.linkProperties ? state.nodes : emptyFlowNodes);\n // Measurements are canvas state, not saved graph data. Retaining them keeps\n // React Flow from hiding/reinitializing every node on each drag preview frame.\n const measuredSizes = useRef(\n new Map<string, { width: number; height: number }>(),\n );\n const [measurementRevision, setMeasurementRevision] = useState(0);\n const [zoom, setZoom] = useState(props.defaultViewport?.zoom ?? SPAGBOL_ZOOM_BASELINE);\n const [settledViewport, setSettledViewport] = useState<Viewport>(\n props.defaultViewport ?? defaultGraphViewport,\n );\n const [editorSize, setEditorSize] = useState({ width: 0, height: 0 });\n const viewportMoving = useRef(false);\n useEffect(() => {\n const element = root.current;\n if (!element) return;\n const update = () => {\n const bounds = element.getBoundingClientRect();\n setEditorSize((previous) =>\n previous.width === bounds.width && previous.height === bounds.height\n ? previous\n : { width: bounds.width, height: bounds.height },\n );\n };\n update();\n const observer = new ResizeObserver(update);\n observer.observe(element);\n return () => observer.disconnect();\n }, []);\n const [connecting, setConnecting] = useState(false);\n const [revealedNodeId, setRevealedNodeId] = useState<string | null>(null);\n const [activeMode, setActiveMode] = useState(\n editor.policy.modes?.[0] ?? editor.modes.list()[0]?.id ?? \"set\",\n );\n const [picker, setPicker] = useState<Picker | null>(null);\n const [search, setSearch] = useState(\"\");\n const [pickerIndex, setPickerIndex] = useState(0);\n const pickerListId = useId();\n const pickerList = useRef<HTMLDivElement>(null);\n const [error, setError] = useState<string | null>(null);\n const [drawing, setDrawing] = useState<{\n start: Point;\n end: Point;\n pointer: number;\n } | null>(null);\n const connection = useRef<OnConnectStartParams | null>(null);\n const connectionDone = useRef(false);\n const reconnecting = useRef<string | null>(null);\n const reconnectDuplicate = useRef(false);\n const [reconnectOriginal, setReconnectOriginal] = useState<FlowLink | null>(\n null,\n );\n const duplicate = useRef<DuplicateDrag | null>(null);\n const [duplicatePreview, setDuplicatePreview] =\n useState<DuplicateDrag | null>(null);\n const cancelledNodeDrag = useRef(false);\n // Position previews belong to the canvas, not the persistent document. A drag\n // commits once, avoiding whole-document edits/validation on every pointer move.\n const nodeDrag = useRef<ReadonlyMap<string, Point> | null>(null);\n const [positionRevision, setPositionRevision] = useState(0);\n const clearNodeDrag = () => {\n nodeDrag.current = null;\n // Force a controlled refresh on cancellation, even though the saved position\n // never changed: React Flow currently holds the transient pointer position.\n setPositionRevision(value => value + 1);\n };\n\n useEffect(() => {\n if (!snapshot.gesture && nodeDrag.current) {\n cancelledNodeDrag.current = true;\n clearNodeDrag();\n }\n if (!snapshot.gesture && duplicate.current) {\n cancelledNodeDrag.current = true;\n duplicate.current = null;\n setDuplicatePreview(null);\n }\n }, [snapshot.gesture]);\n const duplicatePresentation = useMemo(\n () =>\n duplicatePreview\n ? duplicateDragPresentation(graph, duplicatePreview)\n : null,\n [graph, duplicatePreview],\n );\n const baseRenderGraph = duplicatePresentation?.graph ?? graph;\n const renderGraph = useMemo(() => props.virtualLinks?.length ? { ...baseRenderGraph, links: [...baseRenderGraph.links, ...props.virtualLinks] } : baseRenderGraph, [baseRenderGraph, props.virtualLinks]);\n const targets = useRef(new Map<string, HTMLElement>());\n const coreDiagnostics = useMemo(() => editor.diagnostics(), [editor, snapshot.document]);\n const diagnosticKey = JSON.stringify([coreDiagnostics, props.diagnostics ?? []]);\n const diagnostics = useMemo(\n () =>\n [...coreDiagnostics, ...(props.diagnostics ?? [])].filter(\n (item) =>\n item.path.length === snapshot.path.length &&\n item.path.every((id, index) => id === snapshot.path[index]),\n ),\n [diagnosticKey, snapshot.path],\n );\n const registerTarget = useCallback(\n (key: string, element: HTMLElement | null) => {\n if (element) targets.current.set(key, element);\n else targets.current.delete(key);\n props.onRenderTarget?.(key, element);\n },\n [props.onRenderTarget],\n );\n useEffect(\n () => () => {\n for (const key of targets.current.keys())\n props.onRenderTarget?.(key, null);\n targets.current.clear();\n },\n [props.onRenderTarget],\n );\n useEffect(() => {\n setPicker(null);\n setError(null);\n }, [snapshot.path.join(\"/\")]);\n const areaDuplicate = useCallback((id: string, phase: 'start' | 'move' | 'end' | 'cancel', offset: Point, external = false) => {\n if (phase === 'start') {\n const area = editor.graph.areas.find(area => area.id === id);\n if (!area) return;\n cancelledNodeDrag.current = false;\n const fragment = copyFragment(editor.graph, [], [id]);\n duplicate.current = { namespace: createId('preview'), fragment, nodeId: '', origin: area.position, positions: new Map(fragment.nodes.map(node => [node.id, node.position])), areaPositions: new Map(fragment.areas.map(area => [area.id, area.position])), external };\n setDuplicatePreview(duplicate.current);\n return;\n }\n const current = duplicate.current;\n if (!current) return;\n if (phase === 'move') {\n duplicate.current = { ...current,\n positions: new Map(current.fragment.nodes.map(node => [node.id, { x: node.position.x + offset.x, y: node.position.y + offset.y }])),\n areaPositions: new Map(current.fragment.areas.map(area => [area.id, { x: area.position.x + offset.x, y: area.position.y + offset.y }])),\n };\n setDuplicatePreview(duplicate.current);\n return;\n }\n duplicate.current = null; setDuplicatePreview(null);\n if (phase === 'cancel') editor.cancelGesture();\n else { editor.paste(current.fragment, offset, current.external); editor.commitGesture(); }\n }, [editor]);\n const context = useMemo(\n () => ({\n editor,\n views,\n nodeKinds: props.nodeKinds,\n changeNodeKind: props.onChangeNodeKind,\n features,\n diagnostics,\n zoom,\n connecting,\n instanceId,\n areaDuplicate,\n registerTarget,\n linkOverlay,\n }),\n [\n editor,\n views,\n features,\n diagnostics,\n zoom,\n connecting,\n instanceId,\n registerTarget,\n linkOverlay,\n areaDuplicate,\n props.nodeKinds,\n props.onChangeNodeKind,\n ],\n );\n const attempt = useCallback((action: () => void) => {\n try {\n action();\n setError(null);\n } catch (cause) {\n setError(cause instanceof Error ? cause.message : String(cause));\n }\n }, []);\n\n const collapsed = useMemo(() => {\n const nodes = new Map<string, GraphArea>(),\n projected = new Set<string>(),\n hiddenAreas = new Set<string>();\n if (features.areas)\n for (const area of renderGraph.areas.filter((area) => area.collapsed)) {\n const members = areaMembers(renderGraph, area.id);\n for (const id of members.nodeIds) {\n const node = renderGraph.nodes.find((node) => node.id === id);\n if (\n node &&\n (area.controlHeight ?? 0) > 0 &&\n node.position.y >= area.position.y + 34 &&\n node.position.y < area.position.y + 34 + (area.controlHeight ?? 0)\n )\n projected.add(id);\n else nodes.set(id, area);\n }\n for (const id of members.areaIds) hiddenAreas.add(id);\n }\n return { nodes, projected, hiddenAreas };\n }, [renderGraph, features.areas]);\n const modelNodes: FlowNode[] = useMemo(\n () => [\n ...(features.areas\n ? renderGraph.areas.map(\n (area): FlowNode => ({\n id: areaFlowId(area.id),\n type: \"spagbolArea\",\n position: area.position,\n selected: snapshot.selection.areaIds.includes(area.id),\n hidden: collapsed.hiddenAreas.has(area.id),\n draggable: false,\n selectable: false,\n connectable: false,\n deletable: false,\n zIndex: -1,\n data: { area, stationaryOriginal: duplicatePresentation?.originalAreas.has(area.id) },\n measured: measuredSizes.current.get(areaFlowId(area.id)),\n style: {\n width: area.size.width,\n height: area.collapsed\n ? 34 + (area.controlHeight ?? 0)\n : area.size.height,\n },\n }),\n )\n : []),\n ...renderGraph.nodes.map(\n (node): FlowNode => ({\n id: nodeFlowId(node.id),\n type: \"spagbolNode\",\n position: nodeDrag.current?.get(node.id) ?? node.position,\n selected: snapshot.selection.nodeIds.includes(node.id),\n hidden: collapsed.nodes.has(node.id),\n draggable:\n editor.editing && views[node.kind]?.draggable !== false &&\n !collapsed.projected.has(node.id) &&\n !duplicatePresentation?.originalNodes.has(node.id),\n selectable:\n editor.editing && views[node.kind]?.selectable !== false &&\n !collapsed.projected.has(node.id) &&\n !duplicatePresentation?.originalNodes.has(node.id),\n connectable:\n editor.editing &&\n !collapsed.projected.has(node.id) &&\n !duplicatePresentation?.originalNodes.has(node.id),\n focusable: !duplicatePresentation?.originalNodes.has(node.id),\n deletable: false,\n dragHandle: \".spagbol-canvas-drag-handle\",\n data: {\n positionRevision,\n node: duplicatePresentation?.originalNodes.get(node.id) ?? node,\n projected: collapsed.projected.has(node.id),\n stationaryOriginal: duplicatePresentation?.originalNodes.has(\n node.id,\n ),\n },\n measured:\n measuredSizes.current.get(nodeFlowId(node.id)) ??\n (duplicatePresentation?.originalNodes.has(node.id)\n ? measuredSizes.current.get(\n nodeFlowId(\n duplicatePresentation.originalNodes.get(node.id)!.id,\n ),\n )\n : undefined),\n className: duplicatePresentation?.previewNodeIds.has(node.id)\n ? \"spagbol-canvas-duplicate-preview\"\n : undefined,\n style: {\n width: views[node.kind]?.autoWidth && !node.size?.width ? \"max-content\" : (node.size?.width ?? Math.max(220, (groupPanelLayout(node)?.size.width ?? 0) + 2)) * (node.scale ?? 1),\n ...(node.size?.height ? { height: node.size.height * (node.scale ?? 1) } : {}),\n },\n zIndex: connecting && revealedNodeId === node.id ? 5 : snapshot.selection.nodeIds.includes(node.id) ? 3 : 1,\n }),\n ),\n ],\n [\n renderGraph,\n positionRevision,\n duplicatePresentation,\n snapshot.selection,\n snapshot.mode,\n editor,\n features.areas,\n collapsed,\n measurementRevision,\n connecting,\n revealedNodeId,\n ],\n );\n // React Flow publishes handle measurements. Only measured geometry participates\n // in anchor derivation, so updating invisible anchors cannot form a render loop.\n const measurementKey = flowNodes\n .filter(\n (node) => node.id.startsWith(\"node:\") || node.id.startsWith(\"area:\"),\n )\n .map((node) => {\n const internal = flow.getInternalNode(node.id);\n return JSON.stringify([\n node.id,\n node.position,\n node.measured,\n internal?.internals.handleBounds,\n ]);\n })\n .join(\"|\");\n const panExtent = useMemo(() => {\n if (props.panBounds === false) return infiniteCanvasExtent;\n // Use saved content, not temporary duplication nodes or invisible link anchors.\n const items = graph.nodes.map((node) => {\n const internal = flow.getInternalNode(nodeFlowId(node.id));\n return {\n position: node.position,\n hidden: collapsed.nodes.has(node.id),\n size: {\n width: internal?.measured?.width ?? node.size?.width ?? 220,\n height: internal?.measured?.height ?? node.size?.height ?? 96,\n },\n };\n });\n if (features.areas)\n items.push(\n ...graph.areas.map((area) => ({\n position: area.position,\n hidden: collapsed.hiddenAreas.has(area.id),\n size: {\n width: area.size.width,\n height: area.collapsed\n ? 34 + (area.controlHeight ?? 0)\n : area.size.height,\n },\n })),\n );\n return translateExtentForVisibleContent(\n items,\n settledViewport,\n editorSize,\n props.panBounds?.emptyScreenRatio ?? 0.7,\n );\n }, [\n graph,\n features.areas,\n collapsed,\n flow,\n measurementKey,\n measurementRevision,\n settledViewport.zoom,\n editorSize,\n props.panBounds,\n ]);\n useEffect(() => {\n if (\n props.panBounds === false ||\n !flow.viewportInitialized ||\n !nodesInitialized ||\n viewportMoving.current ||\n snapshot.gesture\n )\n return;\n const current = flow.getViewport();\n const clamped = clampViewportToTranslateExtent(\n current,\n panExtent,\n editorSize,\n );\n if (\n Math.abs(current.x - clamped.x) < 0.0001 &&\n Math.abs(current.y - clamped.y) < 0.0001 &&\n current.zoom === clamped.zoom\n )\n return;\n setSettledViewport((previous) =>\n previous.x === clamped.x &&\n previous.y === clamped.y &&\n previous.zoom === clamped.zoom\n ? previous\n : clamped,\n );\n void flow.setViewport(clamped);\n }, [\n panExtent,\n editorSize,\n flow,\n settledViewport,\n nodesInitialized,\n snapshot.gesture,\n props.panBounds,\n ]);\n const anchors: FlowNode[] = useMemo(() => {\n if (!features.linkProperties || snapshot.mode !== \"edit\") return [];\n function endpoint(\n point: { nodeId: string; portId: string },\n direction: \"input\" | \"output\",\n ): Point {\n const area = collapsed.nodes.get(point.nodeId);\n if (area)\n return {\n x: area.position.x + (direction === \"output\" ? area.size.width : 0),\n y: area.position.y + 17,\n };\n const internal = flow.getInternalNode(nodeFlowId(point.nodeId));\n const handle = internal?.internals.handleBounds?.[\n direction === \"output\" ? \"source\" : \"target\"\n ]?.find(\n (handle) =>\n handle.id ===\n (direction === \"output\"\n ? sourceHandle(point.portId)\n : targetHandle(point.portId)),\n );\n if (internal && handle)\n return {\n x:\n internal.internals.positionAbsolute.x + handle.x + handle.width / 2,\n y:\n internal.internals.positionAbsolute.y +\n handle.y +\n handle.height / 2,\n };\n const node = renderGraph.nodes.find((node) => node.id === point.nodeId);\n return {\n x:\n (node?.position.x ?? 0) +\n (direction === \"output\" ? (node?.size?.width ?? 220) : 0),\n y: (node?.position.y ?? 0) + 56,\n };\n }\n const cache = new Map<string, Point>();\n function midpoint(link: GraphLink, visited = new Set<string>()): Point {\n const cached = cache.get(link.id);\n if (cached) return cached;\n if (visited.has(link.id)) return { x: 0, y: 0 };\n const next = new Set([...visited, link.id]);\n // Keep the target reference narrowed across callback boundaries.\n const reference =\n link.target.type === \"link\" ? link.target.linkId : undefined;\n const parent = reference\n ? renderGraph.links.find((candidate) => candidate.id === reference)\n : undefined;\n const destination =\n link.target.type === \"port\"\n ? endpoint(link.target, \"input\")\n : parent\n ? midpoint(parent, next)\n : { x: 0, y: 0 };\n const [, x, y] = linkPath(\n endpoint(link.source, \"output\"),\n destination,\n linkPresentation[\n duplicatePresentation?.previewLinks.get(link.id) ?? link.id\n ]?.feedback,\n link.target.type === \"port\" &&\n link.source.nodeId === link.target.nodeId,\n );\n const result = { x, y };\n cache.set(link.id, result);\n return result;\n }\n const targeted = new Set(renderGraph.links.flatMap(link => link.target.type === 'link' ? [link.target.linkId] : []));\n return renderGraph.links.filter(link => connecting || targeted.has(link.id)).map((link) => ({\n id: anchorFlowId(link.id),\n type: \"spagbolAnchor\",\n position: midpoint(link),\n data: { linkId: link.id },\n measured: { width: 1, height: 1 },\n draggable: false,\n selectable: false,\n deletable: false,\n focusable: false,\n zIndex: 4,\n style: { width: 1, height: 1 },\n }));\n }, [\n renderGraph,\n duplicatePresentation,\n features.linkProperties,\n connecting,\n snapshot.mode,\n collapsed,\n linkPresentation,\n measurementKey,\n flow,\n ]);\n const nodePresentations = useRef<FlowNode[]>([]);\n const displayNodes = useMemo(\n () => { const result = reuseFlowPresentations(nodePresentations.current, [...modelNodes, ...anchors]); nodePresentations.current = result; return result; },\n [modelNodes, anchors],\n );\n const graphLinks: FlowLink[] = useMemo(\n () =>\n snapshot.mode === \"controls\"\n ? []\n : renderGraph.links.flatMap((link): FlowLink[] => {\n if (link.target.type === \"link\" && !features.linkProperties)\n return [];\n const sourceArea = collapsed.nodes.get(link.source.nodeId);\n const targetArea =\n link.target.type === \"port\"\n ? collapsed.nodes.get(link.target.nodeId)\n : undefined;\n if (sourceArea && sourceArea.id === targetArea?.id) return [];\n const sourceNode = renderGraph.nodes.find(\n (node) => node.id === link.source.nodeId,\n );\n const targetNodeId =\n link.target.type === \"port\" ? link.target.nodeId : undefined;\n const targetNode = renderGraph.nodes.find(\n (node) => node.id === targetNodeId,\n );\n const preview =\n duplicatePresentation?.previewLinks.has(link.id) ?? false;\n const presentation = props.virtualLinks?.some(item => item.id === link.id) ? { virtual: true } :\n linkPresentation[\n duplicatePresentation?.previewLinks.get(link.id) ?? link.id\n ];\n const related =\n snapshot.selection.nodeIds.includes(link.source.nodeId) ||\n (!!targetNodeId &&\n snapshot.selection.nodeIds.includes(targetNodeId));\n const selected =\n !duplicatePreview && snapshot.selection.linkIds.includes(link.id);\n return [\n {\n id: link.id,\n type: \"spagbolLink\",\n source: sourceArea\n ? areaFlowId(sourceArea.id)\n : nodeFlowId(link.source.nodeId),\n sourceHandle: sourceArea\n ? \"collapsed:out\"\n : sourceHandle(link.source.portId),\n target: targetArea\n ? areaFlowId(targetArea.id)\n : link.target.type === \"port\"\n ? nodeFlowId(link.target.nodeId)\n : anchorFlowId(link.target.linkId),\n targetHandle: targetArea\n ? \"collapsed:in\"\n : link.target.type === \"port\"\n ? targetHandle(link.target.portId)\n : `property:${link.target.property}`,\n selected,\n reconnectable:\n selected &&\n editor.editing &&\n !presentation?.virtual &&\n !sourceArea &&\n !targetArea,\n selectable:\n editor.editing && !presentation?.virtual && !duplicatePreview,\n deletable: false,\n zIndex: selected ? 10 : 0,\n data: {\n link,\n preview,\n ...presentation,\n emphasized: related || preview,\n dimmed:\n !duplicatePreview &&\n (snapshot.selection.nodeIds.length > 0 ||\n snapshot.selection.linkIds.length > 0) &&\n !selected &&\n !related,\n disabled:\n link.enabled === false ||\n sourceNode?.enabled === false ||\n targetNode?.enabled === false,\n },\n },\n ];\n }),\n [\n renderGraph,\n duplicatePresentation,\n duplicatePreview,\n snapshot.mode,\n snapshot.selection,\n features.linkProperties,\n collapsed,\n linkPresentation,\n editor,\n ],\n );\n const rawDisplayLinks = useMemo(\n () =>\n reconnectOriginal && snapshot.mode === \"edit\"\n ? [...graphLinks, reconnectOriginal]\n : graphLinks,\n [graphLinks, reconnectOriginal, snapshot.mode],\n );\n\n const linkPresentations = useRef<FlowLink[]>([]);\n const displayLinks = useMemo(() => {\n const result = reuseFlowPresentations(linkPresentations.current, rawDisplayLinks);\n linkPresentations.current = result; return result;\n }, [rawDisplayLinks]);\n\n function modelConnection(\n value: Pick<Connection, \"source\" | \"target\"> & {\n sourceHandle?: string | null;\n targetHandle?: string | null;\n },\n ): { source: GraphLink[\"source\"]; target: LinkTarget } | undefined {\n const source = parseHandle(value.sourceHandle),\n target = parseHandle(value.targetHandle);\n if (\n !source ||\n source.direction !== \"output\" ||\n !value.source.startsWith(\"node:\")\n )\n return;\n if (\n value.target.startsWith(\"anchor:\") &&\n value.targetHandle?.startsWith(\"property:\")\n )\n return {\n source: { nodeId: value.source.slice(5), portId: source.id },\n target: {\n type: \"link\",\n linkId: value.target.slice(7),\n property: value.targetHandle.slice(9),\n },\n };\n if (\n !target ||\n target.direction !== \"input\" ||\n !value.target.startsWith(\"node:\")\n )\n return;\n return {\n source: { nodeId: value.source.slice(5), portId: source.id },\n target: {\n type: \"port\",\n nodeId: value.target.slice(5),\n portId: target.id,\n },\n };\n }\n function onNodesChange(changes: NodeChange<FlowNode>[]) {\n const remeasured = rememberMeasurements(measuredSizes.current, changes);\n if (remeasured) setMeasurementRevision((value) => value + 1);\n const selected = new Set(editor.getSnapshot().selection.nodeIds);\n let selectionChanged = false;\n for (const change of changes)\n if (\n change.type === \"select\" &&\n change.id.startsWith(\"node:\") &&\n graph.nodes.some((node) => nodeFlowId(node.id) === change.id)\n ) {\n const id = change.id.slice(5);\n if (change.selected) selected.add(id);\n else selected.delete(id);\n selectionChanged = true;\n }\n if (selectionChanged)\n editor.select({\n nodeIds: [...selected],\n linkIds: editor.getSnapshot().selection.linkIds,\n });\n const positions = changes.filter(\n (change) =>\n change.type === \"position\" &&\n change.position &&\n change.id.startsWith(\"node:\"),\n );\n if (positions.length && duplicate.current) {\n const next = {\n ...duplicate.current,\n positions: new Map(duplicate.current.positions),\n };\n let changed = false;\n for (const change of positions)\n if (\n change.type === \"position\" &&\n change.position &&\n next.positions.has(change.id.slice(5))\n ) {\n const previous = next.positions.get(change.id.slice(5));\n if (\n previous?.x !== change.position.x ||\n previous?.y !== change.position.y\n ) {\n next.positions.set(change.id.slice(5), { ...change.position });\n changed = true;\n }\n }\n if (!changed) return;\n duplicate.current = next;\n setDuplicatePreview(next);\n return;\n }\n if (cancelledNodeDrag.current) return;\n if (positions.length && nodeDrag.current) {\n const next = previewNodePositions(nodeDrag.current, positions);\n if (next !== nodeDrag.current) nodeDrag.current = next;\n // This is a controlled React Flow: recording positions in a ref does not\n // update native geometry. Publish only the transient node presentation;\n // the graph, validation and history still change once, on drop.\n const state = flowStore.getState();\n state.setNodes(applyNodeChanges(positions, state.nodes));\n return;\n }\n if (positions.length)\n editor.edit(\"Move nodes\", \"layout\", (graph) => {\n for (const change of positions)\n if (change.type === \"position\" && change.position) {\n const node = graph.nodes.find(\n (node) => nodeFlowId(node.id) === change.id,\n );\n if (node) node.position = { ...change.position };\n }\n });\n }\n function onEdgesChange(changes: EdgeChange<FlowLink>[]) {\n const selected = new Set(editor.getSnapshot().selection.linkIds);\n let changed = false;\n for (const change of changes)\n if (change.type === \"select\") {\n if (change.selected) selected.add(change.id);\n else selected.delete(change.id);\n changed = true;\n }\n if (changed)\n editor.select({\n nodeIds: editor.getSnapshot().selection.nodeIds,\n linkIds: [...selected],\n });\n }\n function openPicker(client: Point, extra: Partial<Picker> = {}) {\n if (!editor.editing) return;\n const bounds = root.current?.getBoundingClientRect();\n setSearch(\"\");\n setPickerIndex(0);\n setPicker({\n point: flow.screenToFlowPosition(client),\n screen: {\n x: Math.min(\n client.x - (bounds?.left ?? 0),\n Math.max(8, (bounds?.width ?? 400) - 260),\n ),\n y: Math.min(\n client.y - (bounds?.top ?? 0),\n Math.max(8, (bounds?.height ?? 500) - 320),\n ),\n },\n ...extra,\n });\n }\n function chooseNode(kind: string) {\n if (!picker) return;\n attempt(() => {\n if (kind === 'spagbol.area') { editor.addArea(picker.point); setPicker(null); return; }\n const definition = editor.nodes.get(kind)!;\n if (picker.linkId) {\n const prototype = editor.nodes.create(kind, picker.point);\n const ports = portsFor(prototype, editor.nodes),\n input = ports.find(\n (port) => port.direction === \"input\" && port.connectable !== false,\n ),\n output = ports.find(\n (port) => port.direction === \"output\" && port.connectable !== false,\n );\n if (!input || !output)\n throw new Error(\n \"Choose a node with an input and an output to insert it into a link.\",\n );\n editor.insertNode(\n picker.linkId,\n kind,\n picker.point,\n input.id,\n output.id,\n );\n } else {\n editor.beginGesture(\n picker.origin ? \"Create connected node\" : \"Create node\",\n );\n try {\n const id = editor.addNode(kind, picker.point)!;\n if (picker.origin) {\n const node = editor.graph.nodes.find((node) => node.id === id)!;\n const opposite =\n picker.origin.direction === \"output\" ? \"input\" : \"output\";\n const port = definition\n .ports(node)\n .find(\n (port) =>\n port.direction === opposite && port.connectable !== false,\n );\n if (!port)\n throw new Error(`This node has no connectable ${opposite}.`);\n if (opposite === \"input\")\n editor.connect(\n { nodeId: picker.origin.nodeId, portId: picker.origin.portId },\n { type: \"port\", nodeId: id, portId: port.id },\n activeMode,\n );\n else\n editor.connect(\n { nodeId: id, portId: port.id },\n {\n type: \"port\",\n nodeId: picker.origin.nodeId,\n portId: picker.origin.portId,\n },\n activeMode,\n );\n }\n editor.commitGesture();\n } catch (cause) {\n editor.cancelGesture();\n throw cause;\n }\n }\n setPicker(null);\n });\n }\n function linkAt(\n point: Point,\n source: GraphLink[\"source\"],\n mode: string,\n replacingId?: string,\n ): string | undefined {\n if (\n !features.linkProperties ||\n !(editor.policy.linkProperties ?? []).includes(\"weight\")\n )\n return;\n let best: { id: string; distance: number } | undefined;\n for (const path of root.current?.querySelectorAll<SVGPathElement>(\n \"[data-spagbol-link]\",\n ) ?? []) {\n const id = path.dataset.spagbolLink;\n if (\n !id ||\n editor.canConnect(\n source,\n { type: \"link\", linkId: id, property: \"weight\" },\n mode,\n replacingId,\n )\n )\n continue;\n const matrix = path.getScreenCTM();\n if (!matrix) continue;\n const local = new DOMPoint(point.x, point.y).matrixTransform(\n matrix.inverse(),\n );\n const length = path.getTotalLength();\n let distance = Infinity;\n for (let i = 0; i <= 48; i++) {\n const p = path.getPointAtLength((length * i) / 48);\n distance = Math.min(\n distance,\n Math.hypot(p.x - local.x, p.y - local.y) * zoom,\n );\n }\n if (distance < 14 && (!best || distance < best.distance))\n best = { id, distance };\n }\n return best?.id;\n }\n async function paste() {\n let fragment: ReturnType<typeof readFragment> | undefined;\n try {\n const text = await navigator.clipboard?.readText();\n if (text) fragment = readFragment(text);\n } catch {\n /* Fall back to this controller's clipboard. */\n }\n attempt(() => editor.paste(fragment));\n }\n function keyDown(event: KeyboardEvent<HTMLDivElement>) {\n const target = event.target as HTMLElement;\n if (\n target.closest(\n 'input,textarea,select,[contenteditable=\"true\"],[role=\"spinbutton\"]',\n )\n )\n return;\n const command = event.metaKey || event.ctrlKey,\n key = event.key.toLowerCase();\n if (key === \"escape\") {\n if (duplicate.current || nodeDrag.current) cancelledNodeDrag.current = true;\n if (nodeDrag.current) clearNodeDrag();\n duplicate.current = null;\n setDuplicatePreview(null);\n editor.cancelGesture();\n flowStore.getState().cancelConnection();\n setPicker(null);\n setDrawing(null);\n setConnecting(false);\n connection.current = null;\n connectionDone.current = true;\n setReconnectOriginal(null);\n return;\n }\n if (command && key === \"z\") {\n event.preventDefault();\n event.shiftKey ? editor.redo() : editor.undo();\n return;\n }\n if (command && key === \"y\") {\n event.preventDefault();\n editor.redo();\n return;\n }\n if (!editor.editing) return;\n if (command && key === \"c\") {\n event.preventDefault();\n const fragment = editor.copy();\n void navigator.clipboard\n ?.writeText(JSON.stringify(fragment))\n .catch(() => undefined);\n return;\n }\n if (command && key === \"v\") {\n event.preventDefault();\n void paste();\n return;\n }\n if (command && key === \"d\") {\n event.preventDefault();\n attempt(() => editor.duplicate());\n return;\n }\n if (command && key === \"a\") {\n event.preventDefault();\n editor.select({ nodeIds: graph.nodes.filter(node => views[node.kind]?.selectable !== false).map((node) => node.id) });\n return;\n }\n if (command && key === \"0\") {\n event.preventDefault();\n void flow.zoomTo(SPAGBOL_ZOOM_BASELINE);\n return;\n }\n if (key === \"delete\" || key === \"backspace\") {\n event.preventDefault();\n editor.deleteSelection(command);\n return;\n }\n if (!command && key === \"x\") {\n editor.edit(\"Toggle enabled\", \"values\", (graph) => {\n const nodes = graph.nodes.filter((node) =>\n snapshot.selection.nodeIds.includes(node.id),\n );\n if (nodes.length) {\n const enabled = nodes.every((node) => node.enabled === false);\n for (const node of nodes) node.enabled = enabled;\n } else {\n const links = graph.links.filter((link) =>\n snapshot.selection.linkIds.includes(link.id),\n );\n const enabled = links.every((link) => link.enabled === false);\n for (const link of links) link.enabled = enabled;\n }\n });\n return;\n }\n const mode = editor.modes\n .list()\n .find(\n (mode) =>\n mode.shortcut === key &&\n (!editor.policy.modes || editor.policy.modes.includes(mode.id)),\n );\n if (mode && !command) {\n setActiveMode(mode.id);\n if (!connecting)\n editor.edit(\"Change link mode\", \"values\", (graph) => {\n for (const link of graph.links)\n if (snapshot.selection.linkIds.includes(link.id))\n link.mode = mode.id;\n });\n }\n }\n function pointFromEvent(event: MouseEvent | TouchEvent): Point | undefined {\n if (\"clientX\" in event) return { x: event.clientX, y: event.clientY };\n const touch = event.changedTouches[0];\n return touch ? { x: touch.clientX, y: touch.clientY } : undefined;\n }\n const availableNodes = [...editor.nodes.list().filter(definition => !props.nodeKinds || props.nodeKinds.includes(definition.kind)), ...(features.areas && !picker?.origin && !picker?.linkId ? [{ kind: 'spagbol.area', label: 'Container', createData: () => ({}), ports: () => [] } as import('../core/index.js').NodeDefinition] : [])]\n .filter(definition => snapshot.path.length > 0 || ![spagbolGroupKinds.inputs, spagbolGroupKinds.outputs].includes(definition.kind as typeof spagbolGroupKinds.inputs))\n .filter((definition) =>\n `${definition.label} ${definition.category ?? \"\"} ${definition.keywords?.join(\" \") ?? \"\"}`\n .toLowerCase()\n .includes(search.toLowerCase()),\n );\n const selectedPickerIndex = Math.min(pickerIndex, Math.max(0, availableNodes.length - 1));\n const selectedPickerNode = availableNodes[selectedPickerIndex];\n useEffect(() => {\n if (picker) pickerList.current?.querySelector('[aria-selected=\"true\"]')?.scrollIntoView({ block: \"nearest\", inline: \"nearest\" });\n }, [picker, selectedPickerIndex, search]);\n\n return (\n <GraphContext.Provider value={context}>\n <div\n ref={root}\n className={`spagbol-canvas ${props.className ?? \"\"}`}\n style={\n {\n ...props.style,\n \"--spagbol-title-scale\": spagbolHeaderTitleScale(zoom),\n \"--spagbol-canvas-height\": `${editorSize.height}px`,\n } as CSSProperties\n }\n tabIndex={0}\n aria-label={props.ariaLabel ?? \"Graph editor\"}\n onKeyDown={keyDown}\n onDoubleClick={(event) => {\n if (\n (event.target as HTMLElement).classList.contains(\"react-flow__pane\")\n ) {\n event.preventDefault();\n openPicker({ x: event.clientX, y: event.clientY });\n }\n }}\n onPointerDownCapture={(event) => {\n const pane = (event.target as HTMLElement).classList.contains(\n \"react-flow__pane\",\n );\n if (pane) root.current?.focus({ preventScroll: true });\n if (\n pane &&\n features.areas &&\n editor.editing &&\n (event.metaKey || event.ctrlKey) &&\n event.button === 0\n ) {\n event.preventDefault();\n event.stopPropagation();\n const point = flow.screenToFlowPosition({\n x: event.clientX,\n y: event.clientY,\n });\n setDrawing({ start: point, end: point, pointer: event.pointerId });\n event.currentTarget.setPointerCapture(event.pointerId);\n }\n }}\n onPointerMove={(event) => {\n if (drawing?.pointer === event.pointerId)\n setDrawing({\n ...drawing,\n end: flow.screenToFlowPosition({\n x: event.clientX,\n y: event.clientY,\n }),\n });\n }}\n onPointerUp={(event) => {\n if (drawing?.pointer !== event.pointerId) return;\n const position = {\n x: Math.min(drawing.start.x, drawing.end.x),\n y: Math.min(drawing.start.y, drawing.end.y),\n },\n size = {\n width: Math.abs(drawing.start.x - drawing.end.x),\n height: Math.abs(drawing.start.y - drawing.end.y),\n };\n if (size.width >= 40 && size.height >= 40)\n editor.addArea(position, size);\n setDrawing(null);\n if (event.currentTarget.hasPointerCapture(event.pointerId))\n event.currentTarget.releasePointerCapture(event.pointerId);\n }}\n onPointerCancel={() => {\n if (duplicate.current || nodeDrag.current) cancelledNodeDrag.current = true;\n if (nodeDrag.current) clearNodeDrag();\n duplicate.current = null;\n setDuplicatePreview(null);\n setDrawing(null);\n editor.cancelGesture();\n }}\n >\n {props.background && (\n <div className=\"spagbol-canvas-background\">{props.background}</div>\n )}\n <SpagbolCanvasFlow<FlowNode, FlowLink>\n nodes={displayNodes}\n onlyRenderVisibleElements\n edges={displayLinks}\n nodeTypes={nodeTypes}\n edgeTypes={edgeTypes}\n onNodesChange={onNodesChange}\n onEdgesChange={onEdgesChange}\n onNodeMouseEnter={(_, node) => { if (connecting && node.data.node?.compact && !node.data.stationaryOriginal) setRevealedNodeId(node.data.node.id); }}\n onNodeMouseLeave={(_, node) => setRevealedNodeId(id => id === node.data.node?.id ? null : id)}\n onNodeDoubleClick={(event, flowNode) => {\n const node = flowNode.data.node;\n if (node?.graph && features.nestedGraphs && !(event.target as HTMLElement).closest('.spagbol-node-frame-header')) { event.preventDefault(); editor.enter(node.id); }\n }}\n onPaneClick={() => {\n editor.select({});\n setPicker(null);\n }}\n onNodeDragStart={(event, node) => {\n if (!node.data.node) return;\n cancelledNodeDrag.current = false;\n editor.beginGesture(\n event.altKey ? \"Duplicate nodes\" : \"Move nodes\",\n );\n if (!event.altKey) nodeDrag.current = new Map();\n if (event.altKey) {\n const selection = editor.getSnapshot().selection;\n const ids = selection.nodeIds.includes(node.data.node.id)\n ? selection.nodeIds\n : [node.data.node.id];\n duplicate.current = {\n namespace: createId(\"duplicate-preview\"),\n fragment: copyFragment(graph, ids),\n origin: { ...node.position },\n nodeId: node.data.node.id,\n positions: new Map(\n graph.nodes\n .filter((node) => ids.includes(node.id))\n .map((node) => [node.id, { ...node.position }]),\n ),\n external: event.ctrlKey || event.metaKey || event.shiftKey,\n };\n setDuplicatePreview(duplicate.current);\n }\n }}\n onNodeDragStop={(_event, node) => {\n const positions = nodeDrag.current;\n if (positions) clearNodeDrag();\n const current = duplicate.current;\n duplicate.current = null;\n setDuplicatePreview(null);\n if (cancelledNodeDrag.current) {\n cancelledNodeDrag.current = false;\n editor.cancelGesture();\n editor.select(editor.getSnapshot().selection);\n return;\n }\n if (current) {\n const position =\n current.positions.get(current.nodeId) ?? node.position;\n const delta = {\n x: position.x - current.origin.x,\n y: position.y - current.origin.y,\n };\n try {\n editor.paste(current.fragment, delta, current.external);\n } catch (cause) {\n editor.cancelGesture();\n setError(\n cause instanceof Error ? cause.message : String(cause),\n );\n return;\n }\n }\n if (positions?.size)\n editor.edit(\"Move nodes\", \"layout\", graph => applyNodePositions(graph, positions));\n editor.commitGesture();\n }}\n onConnectStart={(_event, params) => {\n setRevealedNodeId(params.nodeId?.startsWith(\"node:\") ? params.nodeId.slice(5) : null);\n connection.current = params;\n connectionDone.current = false;\n setConnecting(true);\n }}\n onConnect={(value) => {\n connectionDone.current = true;\n const next = modelConnection(value);\n if (next)\n attempt(() => {\n editor.connect(next.source, next.target, activeMode);\n });\n }}\n onConnectEnd={(event, state) => {\n const origin = connection.current;\n connection.current = null;\n setConnecting(false);\n if (\n connectionDone.current ||\n reconnecting.current ||\n !origin ||\n state.toHandle\n )\n return;\n const point = pointFromEvent(event),\n port = parseHandle(origin.handleId);\n if (!point || !port || !origin.nodeId?.startsWith(\"node:\")) return;\n const source = { nodeId: origin.nodeId.slice(5), portId: port.id };\n const hit =\n port.direction === \"output\"\n ? linkAt(point, source, activeMode)\n : undefined;\n if (hit)\n attempt(() => {\n editor.connect(\n source,\n { type: \"link\", linkId: hit, property: \"weight\" },\n activeMode,\n );\n });\n else if (\"metaKey\" in event && (event.metaKey || event.ctrlKey))\n openPicker(point, {\n origin: { ...source, direction: port.direction },\n });\n }}\n reconnectRadius={12}\n onReconnectStart={(event, edge) => {\n reconnecting.current = edge.id;\n reconnectDuplicate.current =\n event.ctrlKey || event.metaKey || event.altKey;\n setReconnectOriginal(\n reconnectDuplicate.current ? stationaryReconnectEdge(edge) : null,\n );\n connectionDone.current = false;\n setConnecting(true);\n }}\n onReconnect={(edge, value) => {\n connectionDone.current = true;\n const next = modelConnection(value);\n if (next)\n attempt(() => {\n editor.reconnect(\n edge.id,\n next.source,\n next.target,\n reconnectDuplicate.current,\n );\n });\n }}\n onReconnectEnd={(event, edge, handleType, state) => {\n if (\n !connectionDone.current &&\n !state.toHandle &&\n handleType === \"source\"\n ) {\n const point = pointFromEvent(event),\n link = edge.data?.link;\n if (point && link) {\n const hit = linkAt(point, link.source, link.mode, edge.id);\n if (hit)\n attempt(() => {\n editor.reconnect(\n edge.id,\n link.source,\n { type: \"link\", linkId: hit, property: \"weight\" },\n event.ctrlKey || event.metaKey || event.altKey,\n );\n });\n }\n }\n reconnecting.current = null;\n setReconnectOriginal(null);\n setConnecting(false);\n }}\n isValidConnection={(value) => {\n const next = modelConnection(value);\n const old =\n reconnecting.current &&\n graph.links.find((link) => link.id === reconnecting.current);\n return (\n !!next &&\n !editor.canConnect(\n next.source,\n next.target,\n old ? old.mode : activeMode,\n reconnecting.current ?? undefined,\n )\n );\n }}\n onEdgeDoubleClick={(event, edge) => {\n event.preventDefault();\n if (edge.data?.virtual) return;\n openPicker(\n { x: event.clientX, y: event.clientY },\n { linkId: edge.id },\n );\n }}\n connectionLineType={ConnectionLineType.Bezier}\n connectionLineStyle={{\n stroke: editor.modes.get(activeMode)?.color,\n strokeWidth: 2,\n }}\n defaultViewport={props.defaultViewport ?? defaultGraphViewport}\n onInit={instance => props.onInit?.(instance as unknown as ReactFlowInstance)}\n onMoveStart={() => {\n viewportMoving.current = true;\n }}\n onMove={(_, viewport) => setZoom(viewport.zoom)}\n onMoveEnd={(_, viewport) => {\n viewportMoving.current = false;\n setSettledViewport(viewport);\n props.onViewportChange?.(viewport);\n }}\n translateExtent={panExtent}\n fitView={!props.defaultViewport}\n fitViewOptions={{ padding: 0.18 }}\n minZoom={0.05}\n maxZoom={3}\n panOnScroll\n selectionOnDrag\n selectionMode={SelectionMode.Partial}\n panOnDrag={[1, 2]}\n zoomOnScroll={false}\n zoomOnPinch\n zoomOnDoubleClick={false}\n deleteKeyCode={null}\n multiSelectionKeyCode={[\"Meta\", \"Shift\"]}\n nodesDraggable={editor.editing}\n nodesConnectable={editor.editing}\n elementsSelectable={editor.editing}\n autoPanOnConnect\n autoPanOnNodeDrag\n proOptions={{ hideAttribution: true }}\n >\n {drawing && (\n <ViewportPortal>\n <div\n className=\"spagbol-canvas-area-draft\"\n style={{\n transform: `translate(${Math.min(drawing.start.x, drawing.end.x)}px, ${Math.min(drawing.start.y, drawing.end.y)}px)`,\n width: Math.abs(drawing.start.x - drawing.end.x),\n height: Math.abs(drawing.start.y - drawing.end.y),\n }}\n />\n </ViewportPortal>\n )}\n </SpagbolCanvasFlow>\n <div ref={setLinkOverlay} className=\"spagbol-canvas-link-overlay\" />\n {(props.toolbar ?? true) === true ? (\n props.controls === false ? null : (\n <SpagbolCanvasControls {...props.controls} />\n )\n ) : (\n props.toolbar\n )}\n {picker && (\n <div\n className=\"spagbol-canvas-picker nodrag nopan\"\n role=\"dialog\"\n aria-label=\"Add node\"\n style={{ left: picker.screen.x, top: picker.screen.y }}\n onPointerDown={(event) => event.stopPropagation()}\n >\n <div className=\"spagbol-canvas-picker-heading\">\n <span className=\"spagbol-canvas-picker-title\">\n {picker.linkId ? \"Insert a node\" : \"Add a node\"}\n </span>\n <button\n aria-label=\"Cancel node creation\"\n onClick={() => setPicker(null)}\n >\n ×\n </button>\n </div>\n <input\n autoFocus\n aria-label=\"Search node types\"\n role=\"combobox\"\n aria-expanded=\"true\"\n aria-autocomplete=\"list\"\n aria-controls={pickerListId}\n aria-activedescendant={selectedPickerNode ? `${pickerListId}-${selectedPickerIndex}` : undefined}\n placeholder=\"Search nodes…\"\n value={search}\n onChange={(event) => {\n setSearch(event.target.value);\n setPickerIndex(0);\n }}\n onKeyDown={(event) => {\n event.stopPropagation();\n if (event.nativeEvent.isComposing) return;\n if (event.key === \"ArrowDown\") {\n event.preventDefault();\n setPickerIndex(Math.min(selectedPickerIndex + 1, Math.max(0, availableNodes.length - 1)));\n } else if (event.key === \"ArrowUp\") {\n event.preventDefault();\n setPickerIndex(Math.max(0, selectedPickerIndex - 1));\n } else if (event.key === \"Escape\") {\n event.preventDefault();\n setPicker(null);\n } else if (event.key === \"Enter\") {\n event.preventDefault();\n if (selectedPickerNode) chooseNode(selectedPickerNode.kind);\n }\n }}\n />\n <div ref={pickerList} id={pickerListId} className=\"spagbol-canvas-picker-list nowheel\" role=\"listbox\" aria-label=\"Node types\">\n {availableNodes.map((definition, index) => (\n <button\n key={definition.kind}\n id={`${pickerListId}-${index}`}\n type=\"button\"\n role=\"option\"\n aria-selected={index === selectedPickerIndex}\n tabIndex={-1}\n onPointerMove={() => setPickerIndex(index)}\n onMouseDown={(event) => event.preventDefault()}\n onClick={() => chooseNode(definition.kind)}\n >\n <span>{definition.label}</span>\n <small>{definition.category}</small>\n </button>\n ))}\n {!availableNodes.length && <p>No matching nodes.</p>}\n </div>\n </div>\n )}\n {error && (\n <div className=\"spagbol-canvas-error\" role=\"alert\">\n {error}\n <button aria-label=\"Dismiss error\" onClick={() => setError(null)}>\n ×\n </button>\n </div>\n )}\n {props.overlay && (\n <div className=\"spagbol-canvas-overlay\">{props.overlay}</div>\n )}\n </div>\n </GraphContext.Provider>\n );\n}\n"]}