@pixerate/editor-svelte 0.12.0 → 0.13.0

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.
@@ -1673,22 +1673,23 @@ function FloatingHorizontalScrollbar($$anchor, $$props) {
1673
1673
  import "svelte/internal/disclose-version";
1674
1674
  import * as $10 from "svelte/internal/client";
1675
1675
  var root2 = $10.from_html(`<span class="opacity-80 text-[10px]"> </span>`);
1676
- var root_1 = $10.from_html(`<div class="absolute transition-transform duration-75 ease-out"><svg class="h-5 w-5 drop-shadow-md" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg"><path d="M5.65376 12.3673H5.46026L5.31717 12.4976L0.500002 16.8829L0.500002 1.19841L11.7841 12.3673H5.65376Z" stroke="white" stroke-width="1"></path></svg> <div class="mt-1 flex items-center gap-1 rounded-full px-2 py-0.5 text-xs font-medium text-white shadow-md whitespace-nowrap"><span> </span> <!></div></div>`);
1677
- var root_2 = $10.from_html(`<div aria-hidden="true"></div>`);
1676
+ var root_1 = $10.from_html(`<div class="mt-1 max-w-xs rounded-lg bg-white/95 backdrop-blur-sm border border-slate-200 px-2.5 py-1.5 text-xs text-slate-800 shadow-lg dark:bg-slate-900/95 dark:border-slate-700 dark:text-slate-100"> </div>`);
1677
+ var root_2 = $10.from_html(`<div class="absolute transition-transform duration-75 ease-out"><svg class="h-5 w-5 drop-shadow-md" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg"><path d="M5.65376 12.3673H5.46026L5.31717 12.4976L0.500002 16.8829L0.500002 1.19841L11.7841 12.3673H5.65376Z" stroke="white" stroke-width="1"></path></svg> <div class="mt-1 flex items-center gap-1 rounded-full px-2 py-0.5 text-xs font-medium text-white shadow-md whitespace-nowrap"><span> </span> <!></div> <!></div>`);
1678
+ var root_3 = $10.from_html(`<div aria-hidden="true"></div>`);
1678
1679
  function AgentPresenceLayer($$anchor, $$props) {
1679
1680
  $10.push($$props, true);
1680
1681
  let presences = $10.prop($$props, "presences", 19, () => []), className = $10.prop($$props, "class", 3, "");
1681
1682
  var fragment = $10.comment();
1682
1683
  var node = $10.first_child(fragment);
1683
1684
  {
1684
- var consequent_2 = ($$anchor2) => {
1685
- var div = root_2();
1685
+ var consequent_3 = ($$anchor2) => {
1686
+ var div = root_3();
1686
1687
  $10.each(div, 21, presences, (agent) => agent.agentId, ($$anchor3, agent) => {
1687
1688
  var fragment_1 = $10.comment();
1688
1689
  var node_1 = $10.first_child(fragment_1);
1689
1690
  {
1690
- var consequent_1 = ($$anchor4) => {
1691
- var div_1 = root_1();
1691
+ var consequent_2 = ($$anchor4) => {
1692
+ var div_1 = root_2();
1692
1693
  var svg = $10.child(div_1);
1693
1694
  var path = $10.only_child(svg);
1694
1695
  var div_2 = $10.sibling(svg, 2);
@@ -1707,6 +1708,18 @@ function AgentPresenceLayer($$anchor, $$props) {
1707
1708
  });
1708
1709
  }
1709
1710
  $10.reset(div_2);
1711
+ var node_3 = $10.sibling(div_2, 2);
1712
+ {
1713
+ var consequent_1 = ($$anchor5) => {
1714
+ var div_3 = root_1();
1715
+ var text_2 = $10.only_child(div_3, true);
1716
+ $10.template_effect(() => $10.set_text(text_2, $10.get(agent).note));
1717
+ $10.append($$anchor5, div_3);
1718
+ };
1719
+ $10.if(node_3, ($$render) => {
1720
+ if ($10.get(agent).note) $$render(consequent_1);
1721
+ });
1722
+ }
1710
1723
  $10.reset(div_1);
1711
1724
  $10.template_effect(() => {
1712
1725
  $10.set_style(div_1, `transform: translate3d(${$10.get(agent).cursorPosition.x ?? ""}px, ${$10.get(agent).cursorPosition.y ?? ""}px, 0);`);
@@ -1717,17 +1730,17 @@ function AgentPresenceLayer($$anchor, $$props) {
1717
1730
  $10.append($$anchor4, div_1);
1718
1731
  };
1719
1732
  $10.if(node_1, ($$render) => {
1720
- if ($10.get(agent).cursorPosition) $$render(consequent_1);
1733
+ if ($10.get(agent).cursorPosition) $$render(consequent_2);
1721
1734
  });
1722
1735
  }
1723
1736
  $10.append($$anchor3, fragment_1);
1724
1737
  });
1725
1738
  $10.reset(div);
1726
- $10.template_effect(() => $10.set_class(div, 1, `pixerate-agent-presence-layer pointer-events-none absolute inset-0 z-50 overflow-hidden ${className() ?? ""}`));
1739
+ $10.template_effect(() => $10.set_class(div, 1, `pixerate-presence agent-presence pixerate-agent-presence-layer pointer-events-none absolute inset-0 z-50 overflow-hidden ${className() ?? ""}`));
1727
1740
  $10.append($$anchor2, div);
1728
1741
  };
1729
1742
  $10.if(node, ($$render) => {
1730
- if (presences().length > 0) $$render(consequent_2);
1743
+ if (presences().length > 0) $$render(consequent_3);
1731
1744
  });
1732
1745
  }
1733
1746
  $10.append($$anchor, fragment);
@@ -1742,6 +1755,8 @@ function createStreamingCanvas(options = {}) {
1742
1755
  const manager = new StreamingLayoutManager({
1743
1756
  throttleMs: options.throttleMs,
1744
1757
  glideDurationMs: options.glideDurationMs,
1758
+ connectedOnly: options.connectedOnly,
1759
+ clock: options.clock,
1745
1760
  layoutOptions: options.layoutOptions,
1746
1761
  onLayoutUpdated: (updated) => {
1747
1762
  $11.set(positions, updated, true);
@@ -1763,14 +1778,29 @@ function createStreamingCanvas(options = {}) {
1763
1778
  }
1764
1779
  };
1765
1780
  }
1781
+
1782
+ // src/canvas/index.ts
1783
+ import {
1784
+ realClock,
1785
+ ManualClock,
1786
+ layoutBounds,
1787
+ canvasHeight,
1788
+ estimateCanvasHeight,
1789
+ blendLayout,
1790
+ connectedOnly
1791
+ } from "@pixerate/editor/canvas";
1766
1792
  export {
1767
1793
  AgentPresenceLayer,
1768
1794
  FloatingHorizontalScrollbar,
1795
+ ManualClock,
1796
+ blendLayout,
1769
1797
  calculateDirectionalDisplacement,
1770
1798
  calculateGraphDifferences,
1771
1799
  calculateReflowDisplacement,
1800
+ canvasHeight,
1772
1801
  centerNodes,
1773
1802
  computeNodesBoundingBox,
1803
+ connectedOnly,
1774
1804
  createBezierTrajectory,
1775
1805
  createCanvasClipboard,
1776
1806
  createCanvasDocking,
@@ -1784,6 +1814,7 @@ export {
1784
1814
  createStreamingCanvas,
1785
1815
  defaultSvelteFlowPreset,
1786
1816
  ensureLayout,
1817
+ estimateCanvasHeight,
1787
1818
  estimateNodeSize,
1788
1819
  flowSide,
1789
1820
  getCenteredNodePosition,
@@ -1793,12 +1824,14 @@ export {
1793
1824
  isEventFromTextInput,
1794
1825
  isValidCanvasNode,
1795
1826
  isValidUrl,
1827
+ layoutBounds,
1796
1828
  linearPositionTrajectory,
1797
1829
  linearTrajectory,
1798
1830
  miroCompatiblePreset,
1799
1831
  normalizeNodeHandles,
1800
1832
  placeBeside,
1801
1833
  preserveNodeMeasurements,
1834
+ realClock,
1802
1835
  replaceNodeInGraph,
1803
1836
  restorePanelPointerEvents,
1804
1837
  runMultiNodeTransition
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/canvas/createCanvasGraph.svelte.ts","../../src/canvas/createCanvasLayout.ts","../../src/canvas/createCanvasClipboard.svelte.ts","../../src/canvas/createCanvasDocking.svelte.ts","../../src/canvas/createCanvasShortcuts.ts","../../src/canvas/createCanvasInteractions.svelte.ts","../../src/canvas/createCanvasTrajectory.ts","../../src/canvas/createCanvasDisplacement.ts","../../src/canvas/createCanvasExplosion.svelte.ts","../../src/canvas/createCanvasNodeSync.svelte.ts","../../src/canvas/createCanvasMultiDrag.svelte.ts","../../src/canvas/createCanvasSelection.svelte.ts","../../src/canvas/FloatingHorizontalScrollbar.svelte","../../src/canvas/AgentPresenceLayer.svelte","../../src/canvas/createStreamingCanvas.svelte.ts"],"sourcesContent":["import { cubicOut } from \"svelte/easing\";\nexport function calculateGraphDifferences(currentState, baselineState) {\n const currentNodes = currentState.nodes ?? [];\n const currentEdges = currentState.edges ?? [];\n const baselineNodes = baselineState.nodes ?? [];\n const baselineEdges = baselineState.edges ?? [];\n const baselineNodeMap = new Map(baselineNodes.map((n) => [n.id, n]));\n const baselineEdgeMap = new Map(baselineEdges.map((e) => [e.id, e]));\n const currentNodeMap = new Map(currentNodes.map((n) => [n.id, n]));\n const currentEdgeMap = new Map(currentEdges.map((e) => [e.id, e]));\n const removedNodes = baselineNodes.filter((oldNode) => !currentNodeMap.has(oldNode.id));\n const removedEdges = baselineEdges.filter((oldEdge) => !currentEdgeMap.has(oldEdge.id));\n const changedNodes = currentNodes.filter((newNode) => {\n const oldNode = baselineNodeMap.get(newNode.id);\n if (!oldNode) return true;\n return JSON.stringify(newNode) !== JSON.stringify(oldNode);\n });\n const changedEdges = currentEdges.filter((newEdge) => {\n const oldEdge = baselineEdgeMap.get(newEdge.id);\n if (!oldEdge) return true;\n return JSON.stringify(newEdge) !== JSON.stringify(oldEdge);\n });\n return { changedNodes, changedEdges, removedNodes, removedEdges };\n}\nexport function replaceNodeInGraph(nodes, edges, oldNode, newNode, keepEdges = false) {\n const updatedNodes = nodes.map((n) => n.id === oldNode.id ? newNode : n);\n if (!keepEdges) {\n return { nodes: updatedNodes, edges };\n }\n const updatedEdges = edges.map((edge) => {\n if (edge.source === oldNode.id || edge.target === oldNode.id) {\n return {\n ...edge,\n id: crypto.randomUUID(),\n source: edge.source === oldNode.id ? newNode.id : edge.source,\n target: edge.target === oldNode.id ? newNode.id : edge.target\n };\n }\n return edge;\n });\n return {\n nodes: updatedNodes,\n edges: updatedEdges\n };\n}\nexport function createCanvasGraph(options = {}) {\n let nodes = $state.raw(options.initialNodes ?? []);\n let edges = $state.raw(options.initialEdges ?? []);\n function setNodes(newNodes, triggerCallback = true) {\n nodes = newNodes;\n if (triggerCallback) {\n options.onNodesChange?.(nodes);\n }\n }\n function setEdges(newEdges, triggerCallback = true) {\n edges = newEdges;\n if (triggerCallback) {\n options.onEdgesChange?.(edges);\n }\n }\n function animateNodePosition(node, targetPosition, duration = 400, easing = cubicOut) {\n const delay = node.data?.animationDelay ?? 0;\n const startPosition = { ...node.position };\n const startTime = Date.now() + delay;\n function step() {\n const currentTime = Date.now();\n if (currentTime < startTime) {\n if (typeof requestAnimationFrame !== \"undefined\") {\n requestAnimationFrame(step);\n }\n return;\n }\n const progress = Math.min((currentTime - startTime) / duration, 1);\n const eased = easing(progress);\n const currentPos = {\n x: startPosition.x + (targetPosition.x - startPosition.x) * eased,\n y: startPosition.y + (targetPosition.y - startPosition.y) * eased\n };\n const targetNode = nodes.find((n) => n.id === node.id);\n if (targetNode) {\n targetNode.position = currentPos;\n }\n if (progress < 1) {\n if (typeof requestAnimationFrame !== \"undefined\") {\n requestAnimationFrame(step);\n }\n } else {\n setNodes([...nodes]);\n }\n }\n step();\n }\n function addNodeOrNodes(nodeOrNodesToAdd, animateFromPosition, save = true) {\n const toAdd = Array.isArray(nodeOrNodesToAdd) ? nodeOrNodesToAdd : [nodeOrNodesToAdd];\n const existingMap = new Map(nodes.map((n) => [n.id, n]));\n toAdd.forEach((node) => {\n if (!existingMap.has(node.id)) {\n existingMap.set(node.id, node);\n }\n });\n setNodes(Array.from(existingMap.values()));\n if (animateFromPosition) {\n toAdd.forEach((node) => {\n const target = { ...node.position };\n node.position = { ...animateFromPosition };\n animateNodePosition(node, target);\n });\n }\n if (save) options.onSave?.();\n }\n function addEdge(edgeToAdd, save = true) {\n setEdges([...edges, edgeToAdd]);\n if (save) options.onSave?.();\n }\n function addEdges(edgesToAdd, save = true) {\n setEdges([...edges, ...edgesToAdd]);\n if (save) options.onSave?.();\n }\n function removeNodes(nodesToRemove, save = true) {\n const idsToRemove = new Set(nodesToRemove.map((n) => n.id));\n setNodes(nodes.filter((n) => !idsToRemove.has(n.id)));\n if (save) options.onSave?.();\n }\n function removeEdges(edgesToRemove, save = true) {\n const idsToRemove = new Set(edgesToRemove.map((e) => e.id));\n setEdges(edges.filter((e) => !idsToRemove.has(e.id)));\n if (save) options.onSave?.();\n }\n function replaceNode(oldNode, newNode, save = true, keepEdges = false) {\n const result = replaceNodeInGraph(nodes, edges, oldNode, newNode, keepEdges);\n setNodes(result.nodes);\n if (result.edges !== edges) {\n setEdges(result.edges);\n }\n if (save) options.onSave?.();\n }\n function addConnectedNodes(params) {\n const {\n nodesToAdd,\n inboundNodes = [],\n outboundNodes = [],\n animatedEdges = false,\n animateFromPosition,\n inboundEdgeData = {},\n outboundEdgeData = {},\n getEdgeLabel\n } = params;\n const defaultCreateEdge = (sourceId, targetId, opt) => {\n if (options.createEdge) {\n return options.createEdge(sourceId, targetId, opt);\n }\n return {\n id: crypto.randomUUID(),\n type: \"default\",\n source: sourceId,\n target: targetId,\n label: opt?.label ?? \"\",\n animated: opt?.animated ?? false,\n data: opt?.data ?? {}\n };\n };\n nodesToAdd.forEach((addedNode) => {\n addNodeOrNodes(addedNode, animateFromPosition, false);\n inboundNodes.forEach((sourceNode) => {\n const label = getEdgeLabel ? getEdgeLabel(sourceNode, addedNode) : \"\";\n addEdge(\n defaultCreateEdge(sourceNode.id, addedNode.id, {\n label,\n animated: animatedEdges,\n data: inboundEdgeData\n }),\n false\n );\n });\n outboundNodes.forEach((targetNode) => {\n const label = getEdgeLabel ? getEdgeLabel(addedNode, targetNode) : \"\";\n addEdge(\n defaultCreateEdge(addedNode.id, targetNode.id, {\n label,\n animated: animatedEdges,\n data: outboundEdgeData\n }),\n false\n );\n });\n });\n options.onSave?.();\n }\n function getDifferences(baseline) {\n return calculateGraphDifferences({ nodes, edges }, baseline);\n }\n return {\n get nodes() {\n return nodes;\n },\n set nodes(val) {\n setNodes(val);\n },\n get edges() {\n return edges;\n },\n set edges(val) {\n setEdges(val);\n },\n setNodes,\n setEdges,\n addNodeOrNodes,\n addEdge,\n addEdges,\n removeNodes,\n removeEdges,\n replaceNode,\n addConnectedNodes,\n animateNodePosition,\n getDifferences\n };\n}\n","import dagre from '@dagrejs/dagre';\nimport { Position, type XYPosition, type Rect } from '@xyflow/svelte';\nimport type { CanvasNode, CanvasEdge, CanvasLayoutOptions } from './types.js';\n\n/**\n * Calculates upper-left flow coordinate for an element to be centered in the viewport.\n */\nexport function getCenteredNodePosition(\n\twidth = 0,\n\theight = 0,\n\tscreenToFlowPosition: (position: XYPosition) => XYPosition,\n\tscreenDimensions?: { width: number; height: number }\n): XYPosition {\n\tconst rect = screenDimensions ?? (typeof document !== 'undefined'\n\t\t? { width: document.documentElement.clientWidth, height: document.documentElement.clientHeight }\n\t\t: { width: 1920, height: 1080 });\n\n\tconst flowPos = screenToFlowPosition({ x: rect.width / 2, y: rect.height / 2 });\n\treturn {\n\t\tx: flowPos.x - width / 2,\n\t\ty: flowPos.y - height / 2\n\t};\n}\n\n/**\n * Updates positions of nodes so their collective bounding box is centered in the current viewport.\n */\nexport function centerNodes<TNode extends CanvasNode = CanvasNode>(\n\tnodes: TNode[],\n\tscreenToFlowPosition: (position: XYPosition) => XYPosition,\n\tgetNodesBounds: (nodes: TNode[]) => Rect,\n\tscreenDimensions?: { width: number; height: number }\n): TNode[] {\n\tif (nodes.length === 0) {\n\t\treturn [];\n\t}\n\n\tconst bounds = getNodesBounds(nodes);\n\tconst boundingBoxOrigin = { x: bounds.x, y: bounds.y };\n\n\tconst centeredPosition = getCenteredNodePosition(\n\t\tbounds.width,\n\t\tbounds.height,\n\t\tscreenToFlowPosition,\n\t\tscreenDimensions\n\t);\n\n\tconst deltaX = centeredPosition.x - boundingBoxOrigin.x;\n\tconst deltaY = centeredPosition.y - boundingBoxOrigin.y;\n\n\treturn nodes.map((node) => ({\n\t\t...node,\n\t\tposition: {\n\t\t\tx: node.position.x + deltaX,\n\t\t\ty: node.position.y + deltaY\n\t\t}\n\t}));\n}\n\n/**\n * Automatically calculates directed hierarchical layout of nodes and edges using Dagre.\n */\nexport function getLayoutedNodes<\n\tTNode extends CanvasNode = CanvasNode,\n\tTEdge extends CanvasEdge = CanvasEdge\n>(\n\tnodes: TNode[],\n\tedges: TEdge[],\n\tgetNodesBounds: (nodes: TNode[]) => Rect,\n\toptions: CanvasLayoutOptions = {}\n): TNode[] {\n\tif (nodes.length === 0) return [];\n\n\tconst {\n\t\tdirection = 'LR',\n\t\tranksep = 100,\n\t\tnodesep = 25,\n\t\tdefaultNodeWidth = 200,\n\t\tdefaultNodeHeight = 200\n\t} = options;\n\n\tconst isHorizontal = direction === 'LR' || direction === 'RL';\n\tconst bounds = getNodesBounds(nodes);\n\n\tconst dagreGraph = new dagre.graphlib.Graph();\n\tdagreGraph.setDefaultEdgeLabel(() => ({}));\n\tdagreGraph.setGraph({ rankdir: direction, ranksep, nodesep });\n\n\tconst nodeIds = new Set(nodes.map((node) => node.id));\n\n\tnodes.forEach((node) => {\n\t\tconst nodeWidth = node.measured?.width ?? (node as any).width ?? defaultNodeWidth;\n\t\tconst nodeHeight = node.measured?.height ?? (node as any).height ?? defaultNodeHeight;\n\t\tdagreGraph.setNode(node.id, { width: nodeWidth, height: nodeHeight });\n\t});\n\n\tedges.forEach((edge) => {\n\t\tif (nodeIds.has(edge.source) && nodeIds.has(edge.target)) {\n\t\t\tdagreGraph.setEdge(edge.source, edge.target);\n\t\t}\n\t});\n\n\tdagre.layout(dagreGraph);\n\n\treturn nodes.map((node) => {\n\t\tconst nodeWithPosition = dagreGraph.node(node.id);\n\t\tconst nodeWidth = node.measured?.width ?? (node as any).width ?? defaultNodeWidth;\n\t\tconst nodeHeight = node.measured?.height ?? (node as any).height ?? defaultNodeHeight;\n\n\t\treturn {\n\t\t\t...node,\n\t\t\ttargetPosition: isHorizontal ? Position.Left : Position.Top,\n\t\t\tsourcePosition: isHorizontal ? Position.Right : Position.Bottom,\n\t\t\tposition: {\n\t\t\t\tx: bounds.x + (nodeWithPosition?.x ?? 0) - nodeWidth / 2,\n\t\t\t\ty: bounds.y + (nodeWithPosition?.y ?? 0) - nodeHeight / 2\n\t\t\t}\n\t\t};\n\t});\n}\n\n// Re-export incremental layout and collision-aware placement from core\nexport {\n\tensureLayout,\n\tplaceBeside,\n\testimateNodeSize,\n\tflowSide\n} from '@pixerate/editor/canvas';\n\n","import { tick } from \"svelte\";\nexport function isEventFromTextInput(event) {\n const target = event.target;\n if (!target) return false;\n if (target.tagName === \"INPUT\" || target.tagName === \"TEXTAREA\" || target.tagName === \"SELECT\" || target.isContentEditable || target.closest?.('[contenteditable=\"true\"]') || target.closest?.(\".ProseMirror\")) {\n return true;\n }\n return false;\n}\nexport function isValidCanvasNode(obj) {\n return typeof obj === \"object\" && obj !== null && \"id\" in obj && typeof obj.id === \"string\" && \"position\" in obj && typeof obj.position === \"object\" && obj.position !== null && \"x\" in obj.position && \"y\" in obj.position;\n}\nexport function isValidUrl(url) {\n try {\n const parsed = new URL(url);\n return parsed.protocol === \"http:\" || parsed.protocol === \"https:\";\n } catch {\n return false;\n }\n}\nexport function createCanvasClipboard(options = {}) {\n function copySelectedNodes(selectedNodes, connectedEdges, event) {\n if (event && isEventFromTextInput(event)) {\n return false;\n }\n if (selectedNodes.length === 0) return false;\n const payload = {\n version: 1,\n nodes: selectedNodes,\n edges: connectedEdges\n };\n const serialized = JSON.stringify(payload);\n if (event?.clipboardData) {\n event.clipboardData.setData(\"application/json\", serialized);\n event.clipboardData.setData(\"text/plain\", serialized);\n event.preventDefault();\n } else if (typeof navigator !== \"undefined\" && navigator.clipboard) {\n navigator.clipboard.writeText(serialized).catch(() => {\n });\n }\n return true;\n }\n function cutSelectedNodes(selectedNodes, connectedEdges, onRemove, event) {\n if (event && isEventFromTextInput(event)) {\n return false;\n }\n const copied = copySelectedNodes(selectedNodes, connectedEdges, event);\n if (copied && onRemove) {\n onRemove(selectedNodes);\n }\n return copied;\n }\n async function handlePasteEvent(event) {\n if (isEventFromTextInput(event)) {\n return false;\n }\n const clipboardData = event.clipboardData;\n if (!clipboardData) return false;\n const files = clipboardData.files;\n if (files && files.length > 0) {\n const imageFile = Array.from(files).find((f) => f.type.startsWith(\"image/\"));\n if (imageFile && options.onPasteImage) {\n event.preventDefault();\n await options.onPasteImage(imageFile);\n return true;\n }\n }\n const rawJson = clipboardData.getData(\"application/json\") || clipboardData.getData(\"text/plain\");\n if (rawJson) {\n try {\n const parsed = JSON.parse(rawJson);\n let rawNodes;\n let rawEdges;\n if (Array.isArray(parsed) && parsed.every(isValidCanvasNode)) {\n rawNodes = parsed;\n } else if (typeof parsed === \"object\" && parsed !== null && Array.isArray(parsed.nodes) && parsed.nodes.every(isValidCanvasNode)) {\n rawNodes = parsed.nodes;\n rawEdges = parsed.edges;\n }\n if (rawNodes && rawNodes.length > 0) {\n event.preventDefault();\n const idMap = /* @__PURE__ */ new Map();\n const newNodes = rawNodes.map((node) => {\n const newId = crypto.randomUUID();\n idMap.set(node.id, newId);\n return {\n ...node,\n id: newId,\n selected: true,\n position: {\n x: node.position.x + 40,\n y: node.position.y + 40\n }\n };\n });\n const newEdges = rawEdges?.map((edge) => ({\n ...edge,\n id: crypto.randomUUID(),\n source: idMap.get(edge.source) ?? edge.source,\n target: idMap.get(edge.target) ?? edge.target\n }));\n if (options.onPasteNodes) {\n await options.onPasteNodes(newNodes, newEdges);\n await tick();\n }\n return true;\n }\n } catch {\n }\n }\n const text = clipboardData.getData(\"text/plain\")?.trim();\n if (text) {\n if (isValidUrl(text) && options.onPasteUrl) {\n event.preventDefault();\n options.onPasteUrl(text);\n return true;\n } else if (options.onPasteText) {\n event.preventDefault();\n options.onPasteText(text);\n return true;\n }\n }\n return false;\n }\n return {\n copySelectedNodes,\n cutSelectedNodes,\n handlePasteEvent\n };\n}\n","function getNodeRect(node) {\n const x = node.position?.x ?? 0;\n const y = node.position?.y ?? 0;\n const width = node.measured?.width ?? node.width ?? node.initialWidth ?? 0;\n const height = node.measured?.height ?? node.height ?? node.initialHeight ?? 0;\n return { x, y, width, height };\n}\nfunction getNodeCenter(node) {\n const rect = getNodeRect(node);\n return {\n x: rect.x + rect.width / 2,\n y: rect.y + rect.height / 2\n };\n}\nfunction getDistanceSq(p1, p2) {\n const dx = p1.x - p2.x;\n const dy = p1.y - p2.y;\n return dx * dx + dy * dy;\n}\nfunction getOverlapArea(rectA, rectB) {\n const xOverlap = Math.max(\n 0,\n Math.min(rectA.x + rectA.width, rectB.x + rectB.width) - Math.max(rectA.x, rectB.x)\n );\n const yOverlap = Math.max(\n 0,\n Math.min(rectA.y + rectA.height, rectB.y + rectB.height) - Math.max(rectA.y, rectB.y)\n );\n return xOverlap * yOverlap;\n}\nfunction resolvePrimaryTarget(targets, draggedNode, strategy, customResolver, event) {\n if (targets.length === 0) return null;\n if (targets.length === 1) return targets[0];\n if (customResolver) {\n const resolved = customResolver(targets, draggedNode, event);\n if (resolved !== void 0) return resolved;\n }\n if (strategy === \"first\") {\n return targets[0];\n }\n if (strategy === \"pointer\" && event) {\n const clientX = \"clientX\" in event ? event.clientX : event.touches?.[0]?.clientX;\n const clientY = \"clientY\" in event ? event.clientY : event.touches?.[0]?.clientY;\n if (typeof clientX === \"number\" && typeof clientY === \"number\") {\n const pointerInside = targets.filter((target) => {\n const r = getNodeRect(target);\n return r.width > 0 && r.height > 0 && clientX >= r.x && clientX <= r.x + r.width && clientY >= r.y && clientY <= r.y + r.height;\n });\n if (pointerInside.length === 1) return pointerInside[0];\n if (pointerInside.length > 1) {\n return pointerInside.reduce((best, cur) => {\n const bestDist = getDistanceSq(getNodeCenter(best), { x: clientX, y: clientY });\n const curDist = getDistanceSq(getNodeCenter(cur), { x: clientX, y: clientY });\n return curDist < bestDist ? cur : best;\n });\n }\n }\n }\n if (strategy === \"max-overlap\") {\n const draggedRect = getNodeRect(draggedNode);\n let maxArea = -1;\n let bestTarget = targets[0];\n for (const target of targets) {\n const targetRect = getNodeRect(target);\n const area = getOverlapArea(draggedRect, targetRect);\n if (area > maxArea) {\n maxArea = area;\n bestTarget = target;\n }\n }\n return bestTarget;\n }\n const draggedCenter = getNodeCenter(draggedNode);\n const containing = targets.filter((target) => {\n const r = getNodeRect(target);\n if (r.width > 0 && r.height > 0) {\n return draggedCenter.x >= r.x && draggedCenter.x <= r.x + r.width && draggedCenter.y >= r.y && draggedCenter.y <= r.y + r.height;\n }\n return false;\n });\n if (containing.length === 1) return containing[0];\n if (containing.length > 1) {\n return containing.reduce((best, cur) => {\n const bestDist = getDistanceSq(getNodeCenter(best), draggedCenter);\n const curDist = getDistanceSq(getNodeCenter(cur), draggedCenter);\n return curDist < bestDist ? cur : best;\n });\n }\n return targets.reduce((best, cur) => {\n const bestDist = getDistanceSq(getNodeCenter(best), draggedCenter);\n const curDist = getDistanceSq(getNodeCenter(cur), draggedCenter);\n return curDist < bestDist ? cur : best;\n });\n}\nexport function createCanvasDocking(options = {}) {\n let draggedNode = $state.raw(null);\n let draggedInitialPosition = $state.raw(null);\n let connectingHandle = $state.raw(\"\");\n let connectingNode = $state.raw(null);\n let currentHoverTargets = $state.raw(/* @__PURE__ */ new Set());\n const isDockTarget = options.isDockTarget ?? ((target) => target.type === \"boardNode\");\n const dockStrategy = options.dockStrategy ?? \"center-point\";\n const exclusiveHover = options.exclusiveHover ?? true;\n function handleNodeDragStart(params) {\n draggedNode = params.targetNode;\n draggedInitialPosition = params.targetNode?.position ? { ...params.targetNode.position } : null;\n currentHoverTargets = /* @__PURE__ */ new Set();\n }\n function handleNodeDrag(params, getIntersectingNodes) {\n draggedNode = params.targetNode;\n if (!draggedNode) return;\n const intersecting = getIntersectingNodes(draggedNode);\n const currentDockTargets = intersecting.filter(isDockTarget);\n if (exclusiveHover) {\n const primaryTarget = currentDockTargets.length > 0 ? resolvePrimaryTarget(\n currentDockTargets,\n draggedNode,\n dockStrategy,\n options.resolvePrimaryDockTarget,\n params.event\n ) : null;\n const primaryTargetId = primaryTarget ? primaryTarget.id : null;\n currentHoverTargets.forEach((targetId) => {\n if (targetId !== primaryTargetId) {\n const leftNode = intersecting.find((n) => n.id === targetId) ?? { id: targetId };\n options.onDockLeave?.(leftNode, draggedNode);\n }\n });\n if (primaryTarget && !currentHoverTargets.has(primaryTarget.id)) {\n options.onDockHover?.(primaryTarget, draggedNode);\n }\n currentHoverTargets = primaryTargetId ? /* @__PURE__ */ new Set([primaryTargetId]) : /* @__PURE__ */ new Set();\n } else {\n const newHoverSet = new Set(currentDockTargets.map((t) => t.id));\n currentHoverTargets.forEach((targetId) => {\n if (!newHoverSet.has(targetId)) {\n const leftNode = intersecting.find((n) => n.id === targetId) ?? { id: targetId };\n options.onDockLeave?.(leftNode, draggedNode);\n }\n });\n currentDockTargets.forEach((target) => {\n if (!currentHoverTargets.has(target.id)) {\n options.onDockHover?.(target, draggedNode);\n }\n });\n currentHoverTargets = newHoverSet;\n }\n }\n function handleNodeDragStop(params, getIntersectingNodes, updateNodePosition) {\n draggedNode = params.targetNode;\n if (draggedNode) {\n const intersecting = getIntersectingNodes(draggedNode);\n const dockTargets = intersecting.filter(isDockTarget);\n const dockTarget = dockTargets.length > 0 ? resolvePrimaryTarget(\n dockTargets,\n draggedNode,\n dockStrategy,\n options.resolvePrimaryDockTarget,\n params.event\n ) : null;\n if (dockTarget) {\n options.onDockDrop?.(dockTarget, draggedNode);\n if (options.restorePositionOnDock !== false && draggedInitialPosition && updateNodePosition) {\n updateNodePosition(draggedNode.id, draggedInitialPosition);\n }\n }\n }\n draggedNode = null;\n draggedInitialPosition = null;\n currentHoverTargets = /* @__PURE__ */ new Set();\n options.onSave?.();\n }\n function handleConnectStart(params, getNode) {\n connectingHandle = params.handleType ?? \"\";\n connectingNode = params.nodeId ? getNode(params.nodeId) ?? null : null;\n }\n function handleConnectEnd() {\n connectingHandle = \"\";\n connectingNode = null;\n }\n function reset() {\n draggedNode = null;\n draggedInitialPosition = null;\n connectingHandle = \"\";\n connectingNode = null;\n currentHoverTargets = /* @__PURE__ */ new Set();\n }\n return {\n get draggedNode() {\n return draggedNode;\n },\n get draggedInitialPosition() {\n return draggedInitialPosition;\n },\n get connectingHandle() {\n return connectingHandle;\n },\n get connectingNode() {\n return connectingNode;\n },\n get isDragging() {\n return draggedNode !== null;\n },\n handleNodeDragStart,\n handleNodeDrag,\n handleNodeDragStop,\n handleConnectStart,\n handleConnectEnd,\n reset\n };\n}\n","import { isEventFromTextInput } from './createCanvasClipboard.svelte.js';\nimport type { CanvasNode, CanvasShortcutsOptions } from './types.js';\n\n/**\n * Attaches keyboard shortcut handlers for canvas interaction.\n * Automatically ignores shortcuts when the user is typing into text inputs, textareas, or rich editors.\n *\n * @returns A cleanup function to remove event listeners.\n */\nexport function createCanvasShortcuts<TNode extends CanvasNode = CanvasNode>(\n\toptions: CanvasShortcutsOptions<TNode>\n): () => void {\n\tconst target = options.targetElement ?? (typeof window !== 'undefined' ? window : null);\n\tif (!target) return () => {};\n\n\tfunction handleKeyDown(event: Event) {\n\t\tconst keyboardEvent = event as KeyboardEvent;\n\t\tif (isEventFromTextInput(keyboardEvent)) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst isMod = keyboardEvent.metaKey || keyboardEvent.ctrlKey;\n\t\tconst isShift = keyboardEvent.shiftKey;\n\t\tconst key = keyboardEvent.key;\n\n\t\tconst selectedNodes = options.getSelectedNodes ? options.getSelectedNodes() : [];\n\n\t\tif (key === 'Backspace' || key === 'Delete') {\n\t\t\tif (options.onDelete && selectedNodes.length > 0) {\n\t\t\t\tkeyboardEvent.preventDefault();\n\t\t\t\toptions.onDelete(selectedNodes);\n\t\t\t}\n\t\t\treturn;\n\t\t}\n\n\t\tif (isMod) {\n\t\t\tconst lowerKey = key.toLowerCase();\n\n\t\t\tif (lowerKey === 'c' && !isShift) {\n\t\t\t\tif (options.onCopy) {\n\t\t\t\t\t// We let the native copy event fire or call onCopy\n\t\t\t\t\toptions.onCopy();\n\t\t\t\t}\n\t\t\t} else if (lowerKey === 'x' && !isShift) {\n\t\t\t\tif (options.onCut) {\n\t\t\t\t\toptions.onCut();\n\t\t\t\t}\n\t\t\t} else if (lowerKey === 'd' && !isShift) {\n\t\t\t\tif (options.onDuplicate && selectedNodes.length > 0) {\n\t\t\t\t\tkeyboardEvent.preventDefault();\n\t\t\t\t\toptions.onDuplicate(selectedNodes);\n\t\t\t\t}\n\t\t\t} else if (lowerKey === 'a' && !isShift) {\n\t\t\t\tif (options.onSelectAll) {\n\t\t\t\t\tkeyboardEvent.preventDefault();\n\t\t\t\t\toptions.onSelectAll();\n\t\t\t\t}\n\t\t\t} else if (lowerKey === 'g') {\n\t\t\t\tif (isShift) {\n\t\t\t\t\tif (options.onUngroup && selectedNodes.length > 0) {\n\t\t\t\t\t\tkeyboardEvent.preventDefault();\n\t\t\t\t\t\toptions.onUngroup(selectedNodes);\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\tif (options.onGroup && selectedNodes.length > 0) {\n\t\t\t\t\t\tkeyboardEvent.preventDefault();\n\t\t\t\t\t\toptions.onGroup(selectedNodes);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} else if (key === '=' || key === '+') {\n\t\t\t\tif (options.onZoomIn) {\n\t\t\t\t\tkeyboardEvent.preventDefault();\n\t\t\t\t\toptions.onZoomIn();\n\t\t\t\t}\n\t\t\t} else if (key === '-') {\n\t\t\t\tif (options.onZoomOut) {\n\t\t\t\t\tkeyboardEvent.preventDefault();\n\t\t\t\t\toptions.onZoomOut();\n\t\t\t\t}\n\t\t\t} else if (key === '0') {\n\t\t\t\tif (options.onFitView) {\n\t\t\t\t\tkeyboardEvent.preventDefault();\n\t\t\t\t\toptions.onFitView();\n\t\t\t\t}\n\t\t\t} else if (lowerKey === 'f') {\n\t\t\t\tif (options.onSearch) {\n\t\t\t\t\tkeyboardEvent.preventDefault();\n\t\t\t\t\toptions.onSearch();\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\ttarget.addEventListener('keydown', handleKeyDown as EventListener);\n\n\treturn () => {\n\t\ttarget.removeEventListener('keydown', handleKeyDown as EventListener);\n\t};\n}\n","import { isEventFromTextInput } from \"./createCanvasClipboard.svelte.js\";\nexport function createCanvasInteractions(options = {}) {\n let isSpacebarPanning = $state.raw(false);\n let trackpadDetected = $state.raw(false);\n let toggledPanMode = false;\n function handleKeyDown(event) {\n if (event.key === \" \" || event.code === \"Space\") {\n if (isSpacebarPanning || isEventFromTextInput(event)) return;\n isSpacebarPanning = true;\n toggledPanMode = true;\n options.onPanModeChange?.(true);\n if (typeof document !== \"undefined\") {\n document.body.classList.add(\"cursor-grab\");\n }\n }\n }\n function handleKeyUp(event) {\n if (event.key === \" \" || event.code === \"Space\") {\n if (!isSpacebarPanning && !toggledPanMode) return;\n isSpacebarPanning = false;\n toggledPanMode = false;\n options.onPanModeChange?.(false);\n if (typeof document !== \"undefined\") {\n document.body.classList.remove(\"cursor-grab\");\n }\n }\n }\n function handleWheel(event) {\n if (event.ctrlKey && !trackpadDetected) {\n trackpadDetected = true;\n options.onTrackpadDetected?.();\n }\n }\n function attachListeners(target) {\n const el = target ?? options.targetElement ?? (typeof window !== \"undefined\" ? window : null);\n if (!el) return () => {\n };\n el.addEventListener(\"keydown\", handleKeyDown);\n el.addEventListener(\"keyup\", handleKeyUp);\n el.addEventListener(\"wheel\", handleWheel, { passive: true });\n return () => {\n el.removeEventListener(\"keydown\", handleKeyDown);\n el.removeEventListener(\"keyup\", handleKeyUp);\n el.removeEventListener(\"wheel\", handleWheel);\n if (typeof document !== \"undefined\") {\n document.body.classList.remove(\"cursor-grab\");\n }\n };\n }\n return {\n get isSpacebarPanning() {\n return isSpacebarPanning;\n },\n get trackpadDetected() {\n return trackpadDetected;\n },\n attachListeners,\n destroy: attachListeners()\n };\n}\nexport const defaultSvelteFlowPreset = {\n snapGrid: [25, 25],\n panOnDrag: [0, 1, 2, 3, 4],\n panOnScroll: false,\n selectionOnDrag: false,\n colorMode: \"system\",\n multiSelectionKey: [\"Shift\", \"Meta\"]\n};\nexport const miroCompatiblePreset = {\n ...defaultSvelteFlowPreset,\n panOnDrag: [1, 2],\n selectionOnDrag: true\n};\nexport function restorePanelPointerEvents(panelSelector = \".svelte-flow__panel\") {\n if (typeof document === \"undefined\") return;\n const panels = document.querySelectorAll(panelSelector);\n panels.forEach((panel) => {\n panel.style.pointerEvents = \"auto\";\n });\n}\n","import { cubicOut } from 'svelte/easing';\nimport type { XYPosition } from '@xyflow/svelte';\nimport type {\n\tCanvasNode,\n\tFanOutTrajectoryOptions,\n\tNodeTransition,\n\tTrajectoryFunction,\n\tTrajectoryPoint\n} from './types.js';\n\n/**\n * Standard linear trajectory: straight line interpolation with linear scale & opacity progression.\n */\nexport const linearTrajectory: TrajectoryFunction = (\n\torigin: XYPosition,\n\ttarget: XYPosition,\n\tprogress: number\n): TrajectoryPoint => {\n\treturn {\n\t\tposition: {\n\t\t\tx: origin.x + (target.x - origin.x) * progress,\n\t\t\ty: origin.y + (target.y - origin.y) * progress\n\t\t},\n\t\tscale: progress,\n\t\topacity: Math.min(1, progress * 1.5)\n\t};\n};\n\n/**\n * Linear position trajectory: pure position interpolation without altering scale or opacity.\n * Used for displaced sibling nodes to ensure their visibility remains unaltered.\n */\nexport const linearPositionTrajectory: TrajectoryFunction = (\n\torigin: XYPosition,\n\ttarget: XYPosition,\n\tprogress: number\n): TrajectoryPoint => {\n\treturn {\n\t\tposition: {\n\t\t\tx: origin.x + (target.x - origin.x) * progress,\n\t\t\ty: origin.y + (target.y - origin.y) * progress\n\t\t}\n\t};\n};\n\n/**\n * Creates a fan-out trajectory where nodes arc outward from origin to target.\n * Matches the curved distribution shown in multi-node branching diagrams.\n */\nexport function createFanOutTrajectory(options: FanOutTrajectoryOptions = {}): TrajectoryFunction {\n\tconst {\n\t\tcurvature = 0.4,\n\t\tstartScale = 0,\n\t\tendScale = 1,\n\t\tstartOpacity = 0,\n\t\tendOpacity = 1\n\t} = options;\n\n\treturn (\n\t\torigin: XYPosition,\n\t\ttarget: XYPosition,\n\t\tprogress: number,\n\t\tindex: number,\n\t\ttotal: number\n\t): TrajectoryPoint => {\n\t\tconst dx = target.x - origin.x;\n\t\tconst dy = target.y - origin.y;\n\n\t\t// Normalized index from -1 (top) to +1 (bottom)\n\t\tconst normIndex = total > 1 ? (index - (total - 1) / 2) / ((total - 1) / 2) : 0;\n\n\t\t// Perpendicular control point offset to create smooth fan arc\n\t\tconst midX = origin.x + dx * 0.4;\n\t\tconst midY = origin.y + dy * 0.1 - normIndex * Math.abs(dx) * 0.15 * curvature;\n\n\t\t// Quadratic Bezier interpolation: B(t) = (1-t)^2 * P0 + 2(1-t)t * P1 + t^2 * P2\n\t\tconst t = progress;\n\t\tconst oneMinusT = 1 - t;\n\n\t\tconst x = oneMinusT * oneMinusT * origin.x + 2 * oneMinusT * t * midX + t * t * target.x;\n\t\tconst y = oneMinusT * oneMinusT * origin.y + 2 * oneMinusT * t * midY + t * t * target.y;\n\n\t\tconst scale = startScale + (endScale - startScale) * progress;\n\t\tconst opacity = startOpacity + (endOpacity - startOpacity) * progress;\n\n\t\treturn {\n\t\t\tposition: { x, y },\n\t\t\tscale,\n\t\t\topacity\n\t\t};\n\t};\n}\n\n/**\n * Creates a custom quadratic Bezier trajectory with a specified or dynamically calculated control point.\n */\nexport function createBezierTrajectory(\n\tgetControlPoint: (origin: XYPosition, target: XYPosition) => XYPosition\n): TrajectoryFunction {\n\treturn (origin: XYPosition, target: XYPosition, progress: number): TrajectoryPoint => {\n\t\tconst cp = getControlPoint(origin, target);\n\t\tconst t = progress;\n\t\tconst oneMinusT = 1 - t;\n\n\t\tconst x = oneMinusT * oneMinusT * origin.x + 2 * oneMinusT * t * cp.x + t * t * target.x;\n\t\tconst y = oneMinusT * oneMinusT * origin.y + 2 * oneMinusT * t * cp.y + t * t * target.y;\n\n\t\treturn {\n\t\t\tposition: { x, y },\n\t\t\tscale: progress,\n\t\t\topacity: progress\n\t\t};\n\t};\n}\n\n/**\n * Coordinates and animates multiple node transitions simultaneously with zero per-frame array allocations.\n * Directly mutates node positions and data (scale, opacity) in-place during the animation loop.\n */\nexport function runMultiNodeTransition<TNode extends CanvasNode = CanvasNode>(\n\ttransitions: NodeTransition<TNode>[],\n\toptions: {\n\t\tdefaultDuration?: number;\n\t\tdefaultEasing?: (t: number) => number;\n\t\tonUpdate?: () => void;\n\t\tonComplete?: () => void;\n\t} = {}\n): () => void {\n\tif (transitions.length === 0) {\n\t\toptions.onComplete?.();\n\t\treturn () => {};\n\t}\n\n\tconst { defaultDuration = 400, defaultEasing = cubicOut, onUpdate, onComplete } = options;\n\n\tlet isCancelled = false;\n\tconst startTime = Date.now();\n\n\tconst items = transitions.map((tr, i) => ({\n\t\t...tr,\n\t\tindex: tr.index ?? i,\n\t\ttotal: tr.total ?? transitions.length,\n\t\tduration: tr.duration ?? defaultDuration,\n\t\teasing: tr.easing ?? defaultEasing,\n\t\tdelay: tr.delay ?? 0,\n\t\ttrajectory: tr.trajectory ?? linearTrajectory\n\t}));\n\n\tfunction frame() {\n\t\tif (isCancelled) return;\n\n\t\tconst now = Date.now();\n\t\tlet allCompleted = true;\n\n\t\tfor (let i = 0; i < items.length; i++) {\n\t\t\tconst item = items[i];\n\t\t\tconst elapsed = now - (startTime + item.delay);\n\n\t\t\tif (elapsed < 0) {\n\t\t\t\tallCompleted = false;\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tconst rawProgress = item.duration <= 0 ? 1 : Math.min(elapsed / item.duration, 1);\n\t\t\tconst progress = item.duration <= 0 ? 1 : item.easing(rawProgress);\n\n\t\t\tconst point = item.trajectory(item.from, item.to, progress, item.index, item.total);\n\n\t\t\t// Direct in-place mutation avoids array reconstruction during RAF\n\t\t\titem.node.position = { ...point.position };\n\n\t\t\tif (point.scale !== undefined || point.opacity !== undefined) {\n\t\t\t\tif (!item.node.data) {\n\t\t\t\t\titem.node.data = {} as any;\n\t\t\t\t}\n\t\t\t\tif (point.scale !== undefined) {\n\t\t\t\t\t(item.node.data as any).scale = point.scale;\n\t\t\t\t}\n\t\t\t\tif (point.opacity !== undefined) {\n\t\t\t\t\t(item.node.data as any).opacity = point.opacity;\n\t\t\t\t\tconst currentStyle = (item.node.style || '').replace(/opacity:\\s*[^;]+;?/g, '').trim();\n\t\t\t\t\titem.node.style = `${currentStyle ? currentStyle + '; ' : ''}opacity: ${point.opacity};`;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (rawProgress < 1) {\n\t\t\t\tallCompleted = false;\n\t\t\t}\n\t\t}\n\n\t\tonUpdate?.();\n\n\t\tif (!allCompleted) {\n\t\t\tif (typeof requestAnimationFrame !== 'undefined') {\n\t\t\t\trequestAnimationFrame(frame);\n\t\t\t}\n\t\t} else {\n\t\t\tonComplete?.();\n\t\t}\n\t}\n\n\tframe();\n\n\treturn () => {\n\t\tisCancelled = true;\n\t};\n}\n","import dagre from '@dagrejs/dagre';\nimport type { Rect, XYPosition } from '@xyflow/svelte';\nimport type {\n\tCanvasEdge,\n\tCanvasLayoutOptions,\n\tCanvasNode,\n\tDirectionalDisplacementOptions\n} from './types.js';\n\n/**\n * Calculates a bounding rectangle for a set of nodes if not provided by getNodesBounds.\n */\nexport function computeNodesBoundingBox<TNode extends CanvasNode = CanvasNode>(\n\tnodes: TNode[],\n\tdefaultWidth = 200,\n\tdefaultHeight = 60\n): Rect {\n\tif (nodes.length === 0) {\n\t\treturn { x: 0, y: 0, width: 0, height: 0 };\n\t}\n\n\tlet minX = Infinity;\n\tlet minY = Infinity;\n\tlet maxX = -Infinity;\n\tlet maxY = -Infinity;\n\n\tfor (const node of nodes) {\n\t\tconst width = node.measured?.width ?? (node as any).width ?? defaultWidth;\n\t\tconst height = node.measured?.height ?? (node as any).height ?? defaultHeight;\n\n\t\tminX = Math.min(minX, node.position.x);\n\t\tminY = Math.min(minY, node.position.y);\n\t\tmaxX = Math.max(maxX, node.position.x + width);\n\t\tmaxY = Math.max(maxY, node.position.y + height);\n\t}\n\n\treturn {\n\t\tx: minX,\n\t\ty: minY,\n\t\twidth: maxX - minX,\n\t\theight: maxY - minY\n\t};\n}\n\n/**\n * Pure directional displacement calculation.\n * Shifts downstream or surrounding nodes along an axis to clear space for newly inserted child nodes.\n */\nexport function calculateDirectionalDisplacement<TNode extends CanvasNode = CanvasNode>(params: {\n\texistingNodes: TNode[];\n\toriginNode: TNode;\n\tchildNodes: TNode[];\n\tgetNodesBounds?: (nodes: TNode[]) => Rect;\n\toptions?: DirectionalDisplacementOptions;\n}): Map<string, XYPosition> {\n\tconst {\n\t\texistingNodes,\n\t\toriginNode,\n\t\tchildNodes,\n\t\tgetNodesBounds,\n\t\toptions = {}\n\t} = params;\n\n\tconst {\n\t\tdirection = 'right',\n\t\tgap = 40,\n\t\tspreadSiblingLanes = false,\n\t\tsiblingTolerance = 50,\n\t\tminY\n\t} = options;\n\n\tconst displacedMap = new Map<string, XYPosition>();\n\tif (childNodes.length === 0 || existingNodes.length === 0) {\n\t\treturn displacedMap;\n\t}\n\n\tconst childBounds = getNodesBounds\n\t\t? getNodesBounds(childNodes)\n\t\t: computeNodesBoundingBox(childNodes);\n\n\tconst originWidth = originNode.measured?.width ?? (originNode as any).width ?? 200;\n\tconst originHeight = originNode.measured?.height ?? (originNode as any).height ?? 60;\n\n\t// The delta space required along primary axis\n\tconst deltaPrimary = (direction === 'right' || direction === 'left')\n\t\t? childBounds.width + gap\n\t\t: childBounds.height + gap;\n\n\t// Vertical displacement parameters: upward and downward row clearance\n\tconst deltaUp = Math.max(0, originNode.position.y - childBounds.y + gap);\n\tconst deltaDown = Math.max(\n\t\t0,\n\t\tchildBounds.y + childBounds.height - (originNode.position.y + originHeight) + gap\n\t);\n\n\t// Both above and below displace equally so the row expands symmetrically\n\tconst equalDelta = Math.max(deltaUp, deltaDown);\n\n\tfor (const node of existingNodes) {\n\t\tif (node.id === originNode.id) continue;\n\n\t\tlet newX = node.position.x;\n\t\tlet newY = node.position.y;\n\t\tlet moved = false;\n\n\t\tif (direction === 'right') {\n\t\t\t// Downstream nodes strictly to the right of the origin\n\t\t\tif (node.position.x >= originNode.position.x + originWidth * 0.5) {\n\t\t\t\tnewX += deltaPrimary;\n\t\t\t\tmoved = true;\n\t\t\t} else if (spreadSiblingLanes) {\n\t\t\t\t// Sibling nodes occupying the same vertical space as the exploded cluster\n\t\t\t\tconst isVerticallyOverlapping =\n\t\t\t\t\tnode.position.y + ((node as any).height ?? 60) >= childBounds.y - gap &&\n\t\t\t\t\tnode.position.y <= childBounds.y + childBounds.height + gap;\n\n\t\t\t\tif (isVerticallyOverlapping && Math.abs(node.position.x - originNode.position.x) <= siblingTolerance) {\n\t\t\t\t\tconst pushDirection = node.position.y >= originNode.position.y ? 1 : -1;\n\t\t\t\t\tnewY += pushDirection * (childBounds.height * 0.5 + gap);\n\t\t\t\t\tmoved = true;\n\t\t\t\t}\n\t\t\t}\n\t\t} else if (direction === 'left') {\n\t\t\tif (node.position.x <= originNode.position.x) {\n\t\t\t\tnewX -= deltaPrimary;\n\t\t\t\tmoved = true;\n\t\t\t}\n\t\t} else if (direction === 'down') {\n\t\t\tif (node.position.y >= originNode.position.y + originHeight * 0.5) {\n\t\t\t\tnewY += deltaPrimary;\n\t\t\t\tmoved = true;\n\t\t\t}\n\t\t} else if (direction === 'up') {\n\t\t\tif (node.position.y <= originNode.position.y) {\n\t\t\t\tnewY -= deltaPrimary;\n\t\t\t\tmoved = true;\n\t\t\t}\n\t\t} else if (direction === 'vertical') {\n\t\t\t// Row grows vertically:\n\t\t\t// Nodes strictly above the origin node move up by equalDelta\n\t\t\t// Nodes strictly below the origin node move down by equalDelta\n\t\t\t// Both above and below displace equally; horizontal position (x) is strictly preserved\n\t\t\tif (node.position.y < originNode.position.y) {\n\t\t\t\tif (equalDelta > 0) {\n\t\t\t\t\tnewY -= equalDelta;\n\t\t\t\t\tmoved = true;\n\t\t\t\t}\n\t\t\t} else if (node.position.y >= originNode.position.y + originHeight * 0.5) {\n\t\t\t\tif (equalDelta > 0) {\n\t\t\t\t\tnewY += equalDelta;\n\t\t\t\t\tmoved = true;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tif (moved) {\n\t\t\tdisplacedMap.set(node.id, { x: newX, y: newY });\n\t\t}\n\t}\n\n\treturn displacedMap;\n}\n\n/**\n * Pure hierarchical Dagre reflow displacement calculation.\n * Calculates new coordinates for surrounding nodes using Dagre hierarchical layout,\n * anchoring the origin node at its current position to eliminate layout jumping.\n */\nexport function calculateReflowDisplacement<\n\tTNode extends CanvasNode = CanvasNode,\n\tTEdge extends CanvasEdge = CanvasEdge\n>(params: {\n\texistingNodes: TNode[];\n\texistingEdges: TEdge[];\n\toriginNode: TNode;\n\tchildNodes: TNode[];\n\tchildEdges?: TEdge[];\n\tgetNodesBounds?: (nodes: TNode[]) => Rect;\n\toptions?: CanvasLayoutOptions;\n}): Map<string, XYPosition> {\n\tconst {\n\t\texistingNodes,\n\t\texistingEdges,\n\t\toriginNode,\n\t\tchildNodes,\n\t\tchildEdges = [],\n\t\toptions = {}\n\t} = params;\n\n\tconst {\n\t\tdirection = 'LR',\n\t\tranksep = 80,\n\t\tnodesep = 30,\n\t\tdefaultNodeWidth = 200,\n\t\tdefaultNodeHeight = 60\n\t} = options;\n\n\tconst displacedMap = new Map<string, XYPosition>();\n\tif (existingNodes.length === 0) return displacedMap;\n\n\tconst allNodes = [...existingNodes, ...childNodes];\n\tconst allEdges = [...existingEdges, ...childEdges];\n\n\tconst dagreGraph = new dagre.graphlib.Graph();\n\tdagreGraph.setDefaultEdgeLabel(() => ({}));\n\tdagreGraph.setGraph({ rankdir: direction, ranksep, nodesep });\n\n\tconst allNodeIds = new Set(allNodes.map((n) => n.id));\n\n\tallNodes.forEach((node) => {\n\t\tconst nodeWidth = node.measured?.width ?? (node as any).width ?? defaultNodeWidth;\n\t\tconst nodeHeight = node.measured?.height ?? (node as any).height ?? defaultNodeHeight;\n\t\tdagreGraph.setNode(node.id, { width: nodeWidth, height: nodeHeight });\n\t});\n\n\tallEdges.forEach((edge) => {\n\t\tif (allNodeIds.has(edge.source) && allNodeIds.has(edge.target)) {\n\t\t\tdagreGraph.setEdge(edge.source, edge.target);\n\t\t}\n\t});\n\n\tdagre.layout(dagreGraph);\n\n\tconst dagreOrigin = dagreGraph.node(originNode.id);\n\tif (!dagreOrigin) return displacedMap;\n\n\tconst originWidth = originNode.measured?.width ?? (originNode as any).width ?? defaultNodeWidth;\n\tconst originHeight = originNode.measured?.height ?? (originNode as any).height ?? defaultNodeHeight;\n\n\t// Calculate offset so origin node remains anchored at its exact initial coordinates\n\tconst anchorOffsetX = originNode.position.x - (dagreOrigin.x - originWidth / 2);\n\tconst anchorOffsetY = originNode.position.y - (dagreOrigin.y - originHeight / 2);\n\n\texistingNodes.forEach((node) => {\n\t\tif (node.id === originNode.id) return;\n\n\t\tconst dagreNode = dagreGraph.node(node.id);\n\t\tif (!dagreNode) return;\n\n\t\tconst nodeWidth = node.measured?.width ?? (node as any).width ?? defaultNodeWidth;\n\t\tconst nodeHeight = node.measured?.height ?? (node as any).height ?? defaultNodeHeight;\n\n\t\tconst targetX = dagreNode.x - nodeWidth / 2 + anchorOffsetX;\n\t\tconst targetY = dagreNode.y - nodeHeight / 2 + anchorOffsetY;\n\n\t\t// Only include if position actually shifted\n\t\tif (Math.abs(targetX - node.position.x) > 0.5 || Math.abs(targetY - node.position.y) > 0.5) {\n\t\t\tdisplacedMap.set(node.id, { x: targetX, y: targetY });\n\t\t}\n\t});\n\n\treturn displacedMap;\n}\n","import { cubicOut } from \"svelte/easing\";\nimport {\n calculateDirectionalDisplacement,\n calculateReflowDisplacement\n} from \"./createCanvasDisplacement.js\";\nimport {\n createFanOutTrajectory,\n linearPositionTrajectory,\n runMultiNodeTransition\n} from \"./createCanvasTrajectory.js\";\nexport function createCanvasExplosion(graph, options = {}) {\n let explodedNodeIds = $state([]);\n const snapshots = /* @__PURE__ */ new Map();\n let activeAnimationCancel = null;\n function isExploded(nodeId) {\n return explodedNodeIds.includes(nodeId);\n }\n function explodeNode(parentId, explodeOptions) {\n if (isExploded(parentId)) {\n return false;\n }\n const parentNode = graph.nodes.find((n) => n.id === parentId);\n if (!parentNode) {\n return false;\n }\n const {\n childNodes,\n childEdges = [],\n connectParentToChildren = \"all\",\n displacementStrategy = \"directional\",\n directionalOptions = {},\n reflowOptions = {},\n trajectory,\n duration = 500,\n staggerDelay = 20,\n easing = cubicOut,\n onComplete\n } = explodeOptions;\n if (childNodes.length === 0) {\n return false;\n }\n let displacementMap;\n if (displacementStrategy === \"dagre\") {\n displacementMap = calculateReflowDisplacement({\n existingNodes: graph.nodes,\n existingEdges: graph.edges,\n originNode: parentNode,\n childNodes,\n childEdges,\n getNodesBounds: options.getNodesBounds,\n options: {\n ...reflowOptions,\n direction: reflowOptions.direction ?? \"LR\"\n }\n });\n } else if (displacementStrategy === \"none\") {\n displacementMap = /* @__PURE__ */ new Map();\n } else {\n displacementMap = calculateDirectionalDisplacement({\n existingNodes: graph.nodes,\n originNode: parentNode,\n childNodes,\n getNodesBounds: options.getNodesBounds,\n options: directionalOptions\n });\n }\n const displacedNodesSnapshot = Array.from(displacementMap.entries()).map(([id]) => {\n const node = graph.nodes.find((n) => n.id === id);\n return {\n id,\n originalPosition: { ...node?.position ?? { x: 0, y: 0 } }\n };\n });\n const edgesToAdd = [...childEdges];\n const defaultCreateEdge = (sourceId, targetId) => {\n if (graph.createEdge) {\n return graph.createEdge(sourceId, targetId);\n }\n return {\n id: crypto.randomUUID(),\n type: \"default\",\n source: sourceId,\n target: targetId\n };\n };\n if (connectParentToChildren === \"all\" || connectParentToChildren === true) {\n childNodes.forEach((child) => {\n const exists = edgesToAdd.some((e) => e.source === parentId && e.target === child.id);\n if (!exists) {\n edgesToAdd.push(defaultCreateEdge(parentId, child.id));\n }\n });\n } else if (connectParentToChildren === \"first\" && childNodes.length > 0) {\n const firstChild = childNodes[0];\n const exists = edgesToAdd.some((e) => e.source === parentId && e.target === firstChild.id);\n if (!exists) {\n edgesToAdd.push(defaultCreateEdge(parentId, firstChild.id));\n }\n }\n const snapshot = {\n parentId,\n childNodeIds: childNodes.map((n) => n.id),\n childEdgeIds: edgesToAdd.map((e) => e.id),\n displacedNodes: displacedNodesSnapshot,\n timestamp: Date.now()\n };\n snapshots.set(parentId, snapshot);\n const originPos = { ...parentNode.position };\n const targetPositions = childNodes.map((child) => ({ ...child.position }));\n childNodes.forEach((child) => {\n child.position = { ...originPos };\n if (!child.data) child.data = {};\n child.data.scale = 0;\n child.data.opacity = 0;\n const currentStyle = (child.style || \"\").replace(/opacity:\\s*[^;]+;?/g, \"\").trim();\n child.style = `${currentStyle ? currentStyle + \"; \" : \"\"}opacity: 0;`;\n });\n edgesToAdd.forEach((edge) => {\n const currentStyle = (edge.style || \"\").replace(/opacity:\\s*[^;]+;?/g, \"\").trim();\n edge.style = `${currentStyle ? currentStyle + \"; \" : \"\"}opacity: 0;`;\n });\n graph.addNodeOrNodes(childNodes, void 0, false);\n if (edgesToAdd.length > 0) {\n graph.addEdges(edgesToAdd, false);\n }\n const chosenTrajectory = trajectory ?? createFanOutTrajectory({ curvature: 0.35 });\n const transitions = [];\n const effectiveStagger = duration === 0 ? 0 : staggerDelay;\n childNodes.forEach((child, i) => {\n transitions.push({\n node: child,\n from: originPos,\n to: targetPositions[i],\n trajectory: chosenTrajectory,\n delay: i * effectiveStagger,\n duration,\n easing,\n index: i,\n total: childNodes.length\n });\n });\n displacementMap.forEach((targetPos, nodeId) => {\n const node = graph.nodes.find((n) => n.id === nodeId);\n if (node) {\n transitions.push({\n node,\n from: { ...node.position },\n to: targetPos,\n trajectory: linearPositionTrajectory,\n duration,\n easing\n });\n }\n });\n if (activeAnimationCancel) {\n activeAnimationCancel();\n }\n activeAnimationCancel = runMultiNodeTransition(transitions, {\n defaultDuration: duration,\n defaultEasing: easing,\n onUpdate: () => {\n if (edgesToAdd.length > 0) {\n const childIdSet = new Set(childNodes.map((c) => c.id));\n const childEdgesInGraph = graph.edges.filter((e) => childIdSet.has(e.target));\n if (childEdgesInGraph.length > 0) {\n childEdgesInGraph.forEach((edge) => {\n const child = childNodes.find((c) => c.id === edge.target);\n const childOpacity = child?.data?.opacity ?? 1;\n const currentStyle = (edge.style || \"\").replace(/opacity:\\s*[^;]+;?/g, \"\").trim();\n edge.style = `${currentStyle ? currentStyle + \"; \" : \"\"}opacity: ${childOpacity};`;\n });\n graph.setEdges([...graph.edges]);\n }\n }\n transitions.forEach((t) => {\n const graphNode = graph.nodes.find((n) => n.id === t.node.id);\n if (graphNode && graphNode !== t.node) {\n graphNode.position = { ...t.node.position };\n graphNode.style = t.node.style;\n if (t.node.data) {\n graphNode.data = { ...graphNode.data, ...t.node.data };\n }\n }\n });\n graph.setNodes([...graph.nodes]);\n },\n onComplete: () => {\n childNodes.forEach((child, i) => {\n const node = graph.nodes.find((n) => n.id === child.id);\n if (node) {\n node.position = { ...targetPositions[i] };\n node.style = (node.style || \"\").replace(/opacity:\\s*[^;]+;?/g, \"\").trim() || void 0;\n if (node.data) {\n node.data.opacity = 1;\n }\n }\n });\n displacementMap.forEach((targetPos, nodeId) => {\n const graphNode = graph.nodes.find((n) => n.id === nodeId);\n if (graphNode) {\n graphNode.position = { ...targetPos };\n }\n });\n edgesToAdd.forEach((edge) => {\n const graphEdge = graph.edges.find((e) => e.id === edge.id);\n if (graphEdge) {\n graphEdge.style = (graphEdge.style || \"\").replace(/opacity:\\s*[^;]+;?/g, \"\").trim() || void 0;\n }\n });\n graph.setNodes([...graph.nodes]);\n graph.setEdges([...graph.edges]);\n explodedNodeIds = [...explodedNodeIds, parentId];\n activeAnimationCancel = null;\n options.onSave?.();\n graph.onSave?.();\n onComplete?.();\n }\n });\n return true;\n }\n function collapseNode(parentId, collapseOptions = {}) {\n const snapshot = snapshots.get(parentId);\n if (!snapshot) {\n return false;\n }\n const parentNode = graph.nodes.find((n) => n.id === parentId);\n if (!parentNode) {\n return false;\n }\n const {\n duration = 400,\n staggerDelay = 15,\n easing = cubicOut,\n trajectory,\n onComplete\n } = collapseOptions;\n const childIdSet = new Set(snapshot.childNodeIds);\n const activeChildNodes = graph.nodes.filter((n) => childIdSet.has(n.id));\n const originPos = { ...parentNode.position };\n const reverseTrajectory = trajectory ?? createFanOutTrajectory({\n curvature: 0.2,\n startScale: 1,\n endScale: 0,\n startOpacity: 1,\n endOpacity: 0\n });\n const transitions = [];\n const effectiveStagger = duration === 0 ? 0 : staggerDelay;\n activeChildNodes.forEach((child, i) => {\n transitions.push({\n node: child,\n from: { ...child.position },\n to: originPos,\n trajectory: reverseTrajectory,\n delay: (activeChildNodes.length - 1 - i) * effectiveStagger,\n duration,\n easing,\n index: i,\n total: activeChildNodes.length\n });\n });\n snapshot.displacedNodes.forEach(({ id, originalPosition }) => {\n const node = graph.nodes.find((n) => n.id === id);\n if (node) {\n transitions.push({\n node,\n from: { ...node.position },\n to: originalPosition,\n trajectory: linearPositionTrajectory,\n duration,\n easing\n });\n }\n });\n if (activeAnimationCancel) {\n activeAnimationCancel();\n }\n activeAnimationCancel = runMultiNodeTransition(transitions, {\n defaultDuration: duration,\n defaultEasing: easing,\n onUpdate: () => {\n const edgeIdSet = new Set(snapshot.childEdgeIds);\n const childEdgesInGraph = graph.edges.filter((e) => edgeIdSet.has(e.id));\n if (childEdgesInGraph.length > 0) {\n childEdgesInGraph.forEach((edge) => {\n const child = activeChildNodes.find((c) => c.id === edge.target);\n const childOpacity = child?.data?.opacity ?? 0;\n const currentStyle = (edge.style || \"\").replace(/opacity:\\s*[^;]+;?/g, \"\").trim();\n edge.style = `${currentStyle ? currentStyle + \"; \" : \"\"}opacity: ${childOpacity};`;\n });\n graph.setEdges([...graph.edges]);\n }\n transitions.forEach((t) => {\n const graphNode = graph.nodes.find((n) => n.id === t.node.id);\n if (graphNode && graphNode !== t.node) {\n graphNode.position = { ...t.node.position };\n graphNode.style = t.node.style;\n if (t.node.data) {\n graphNode.data = { ...graphNode.data, ...t.node.data };\n }\n }\n });\n graph.setNodes([...graph.nodes]);\n },\n onComplete: () => {\n graph.removeNodes(activeChildNodes, false);\n const edgeIdSet = new Set(snapshot.childEdgeIds);\n const edgesToRemove = graph.edges.filter((e) => edgeIdSet.has(e.id));\n if (edgesToRemove.length > 0) {\n graph.removeEdges(edgesToRemove, false);\n }\n snapshot.displacedNodes.forEach(({ id, originalPosition }) => {\n const graphNode = graph.nodes.find((n) => n.id === id);\n if (graphNode) {\n graphNode.position = { ...originalPosition };\n }\n });\n graph.setNodes([...graph.nodes]);\n snapshots.delete(parentId);\n explodedNodeIds = explodedNodeIds.filter((id) => id !== parentId);\n activeAnimationCancel = null;\n options.onSave?.();\n graph.onSave?.();\n onComplete?.();\n }\n });\n return true;\n }\n function toggleExplode(parentId, explodeOptions, collapseOptions) {\n if (isExploded(parentId)) {\n return collapseNode(parentId, collapseOptions);\n }\n return explodeNode(parentId, explodeOptions);\n }\n function getSnapshot(parentId) {\n return snapshots.get(parentId);\n }\n return {\n get explodedNodeIds() {\n return explodedNodeIds;\n },\n isExploded,\n explodeNode,\n collapseNode,\n toggleExplode,\n getSnapshot\n };\n}\n","import { untrack } from \"svelte\";\nexport function preserveNodeMeasurements(newNodes, existingNodes) {\n const map = existingNodes instanceof Map ? existingNodes : new Map(existingNodes.map((n) => [n.id, n]));\n for (const node of newNodes) {\n const prev = map.get(node.id);\n if (prev && prev.measured) {\n node.measured = { ...prev.measured };\n }\n }\n return newNodes;\n}\nexport function normalizeNodeHandles(node, handles = []) {\n node.handles = handles;\n return node;\n}\nexport function createCanvasNodeSync(options) {\n let nodes = $state([]);\n let edges = $state([]);\n $effect.pre(() => {\n const rawItems = options.items();\n const existingNodesMap = untrack(() => new Map(nodes.map((n) => [n.id, n])));\n const newNodes = rawItems.map((item, index) => {\n const existing = existingNodesMap.get(item?.id);\n const node = options.toNode(item, index, {\n existingNode: existing,\n prevNodesMap: existingNodesMap\n });\n if (existing && existing.measured && !node.measured) {\n node.measured = { ...existing.measured };\n }\n if (options.defaultHandles && !node.handles) {\n const handles = options.defaultHandles(node);\n if (handles) {\n node.handles = handles;\n }\n }\n return node;\n });\n const newEdges = options.toEdges ? options.toEdges(rawItems, newNodes) : [];\n nodes = newNodes;\n edges = newEdges;\n });\n return {\n get nodes() {\n return nodes;\n },\n set nodes(value) {\n nodes = value;\n },\n get edges() {\n return edges;\n },\n set edges(value) {\n edges = value;\n },\n updateNodeMeasurements(id, width, height) {\n const node = nodes.find((n) => n.id === id);\n if (node) {\n node.measured = { width, height };\n }\n }\n };\n}\n","export function createCanvasMultiDrag(options = {}) {\n const stepX = options.stackOffsetStepX ?? 4;\n const stepY = options.stackOffsetStepY ?? 4;\n const angles = options.rotationAngles ?? [-2, 2.5, -3, 3];\n const baseZIndex = options.baseZIndex ?? 50;\n let dragState = $state(null);\n function startMultiDrag(leadNodeId, selectedNodeIds, nodes) {\n const selectedSet = selectedNodeIds instanceof Set ? selectedNodeIds : new Set(selectedNodeIds);\n if (selectedSet.size <= 1 || !selectedSet.has(leadNodeId)) {\n dragState = null;\n return null;\n }\n const nodeMap = nodes instanceof Map ? nodes : new Map(nodes.map((n) => [n.id, n]));\n const leadNode = nodeMap.get(leadNodeId);\n if (!leadNode) {\n dragState = null;\n return null;\n }\n const leadPos = leadNode.position ?? { x: 0, y: 0 };\n const offsets = {};\n let followerIndex = 0;\n for (const id of selectedSet) {\n if (id === leadNodeId) continue;\n const follower = nodeMap.get(id);\n const fPos = follower?.position ?? { x: 0, y: 0 };\n const angle = angles[followerIndex % angles.length];\n offsets[id] = {\n deltaX: fPos.x - leadPos.x,\n deltaY: fPos.y - leadPos.y,\n originalPosition: { ...fPos },\n stackOffsetX: (followerIndex + 1) * stepX,\n stackOffsetY: (followerIndex + 1) * stepY,\n rotationDeg: angle\n };\n followerIndex++;\n }\n const state = {\n leadId: leadNodeId,\n offsets,\n count: selectedSet.size\n };\n dragState = state;\n return state;\n }\n function getFollowerTransform(nodeId) {\n if (!dragState || !(nodeId in dragState.offsets)) {\n return {\n isFollower: false,\n stackOffsetX: 0,\n stackOffsetY: 0,\n rotationDeg: 0,\n zIndex: 0\n };\n }\n const offset = dragState.offsets[nodeId];\n const followerKeys = Object.keys(dragState.offsets);\n const index = followerKeys.indexOf(nodeId);\n return {\n isFollower: true,\n stackOffsetX: offset.stackOffsetX,\n stackOffsetY: offset.stackOffsetY,\n rotationDeg: offset.rotationDeg,\n zIndex: baseZIndex - (index + 1)\n };\n }\n function cancelMultiDrag(applyRestore) {\n if (!dragState) return [];\n const restores = Object.entries(dragState.offsets).map(([id, offset]) => ({\n id,\n originalPosition: { ...offset.originalPosition }\n }));\n if (applyRestore) {\n applyRestore(restores);\n }\n dragState = null;\n return restores;\n }\n function commitMultiDrag() {\n dragState = null;\n }\n return {\n get dragState() {\n return dragState;\n },\n get isMultiDrag() {\n return Boolean(dragState && dragState.count > 1);\n },\n get count() {\n return dragState ? dragState.count : 0;\n },\n get leadId() {\n return dragState?.leadId ?? null;\n },\n startMultiDrag,\n getFollowerTransform,\n cancelMultiDrag,\n commitMultiDrag\n };\n}\n","export function getMarqueeSelectionPreset(options = {}) {\n const isSpacebarPanning = options.isSpacebarPanning ?? false;\n return {\n snapGrid: [25, 25],\n panOnDrag: isSpacebarPanning ? [0, 1, 2] : [1, 2],\n panOnScroll: false,\n selectionOnDrag: !isSpacebarPanning,\n colorMode: \"system\",\n multiSelectionKey: options.multiSelectionKey ?? [\"Shift\", \"Meta\"],\n selectionMode: options.selectionMode ?? \"partial\"\n };\n}\nexport function handleDeselectOnEscape(event, onDeselect) {\n if (event.key === \"Escape\" || event.code === \"Escape\") {\n onDeselect();\n return true;\n }\n return false;\n}\n","import 'svelte/internal/disclose-version';\nimport * as $ from 'svelte/internal/client';\nimport { onMount } from 'svelte';\n\nvar root = $.from_html(`<div class=\"fixed bottom-0 z-50 overflow-x-auto overflow-y-hidden border-t border-border/40 bg-background/80 shadow-md backdrop-blur-sm transition-opacity duration-150\" role=\"scrollbar\" aria-orientation=\"horizontal\"><div></div></div>`);\n\nexport default function FloatingHorizontalScrollbar($$anchor, $$props) {\n\t$.push($$props, true);\n\n\tlet targetElement = $.prop($$props, 'targetElement', 7, null),\n\t\ttotalWidth = $.prop($$props, 'totalWidth', 3, 1000),\n\t\tminHeightAboveFold = $.prop($$props, 'minHeightAboveFold', 3, 80);\n\n\tlet scrollbarRef = $.state(null);\n\tlet isVisible = $.state(false);\n\tlet barLeft = $.state(0);\n\tlet barWidth = $.state(0);\n\tlet isSyncing = false;\n\n\tfunction updateMetrics() {\n\t\tif (!targetElement()) {\n\t\t\t$.set(isVisible, false);\n\n\t\t\treturn;\n\t\t}\n\n\t\tconst rect = targetElement().getBoundingClientRect();\n\t\tconst hasHorizontalOverflow = targetElement().scrollWidth > targetElement().clientWidth;\n\t\tconst isTopInView = rect.top < window.innerHeight;\n\t\tconst isBottomBelowViewport = rect.bottom > window.innerHeight;\n\t\tconst isBottomAboveTop = rect.bottom > minHeightAboveFold();\n\n\t\t// Visible only when canvas is in viewport and its natural bottom scrollbar is off-screen\n\t\tconst shouldShow = hasHorizontalOverflow && isTopInView && isBottomBelowViewport && isBottomAboveTop;\n\n\t\t$.set(isVisible, shouldShow, true);\n\n\t\tif (shouldShow) {\n\t\t\tconst left = Math.max(0, rect.left);\n\t\t\tconst right = Math.min(window.innerWidth, rect.right);\n\n\t\t\t$.set(barLeft, left, true);\n\t\t\t$.set(barWidth, Math.max(0, right - left), true);\n\n\t\t\tif ($.get(scrollbarRef) && Math.abs($.get(scrollbarRef).scrollLeft - targetElement().scrollLeft) > 1) {\n\t\t\t\tisSyncing = true;\n\t\t\t\t$.get(scrollbarRef).scrollLeft = targetElement().scrollLeft;\n\n\t\t\t\trequestAnimationFrame(() => {\n\t\t\t\t\tisSyncing = false;\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\t}\n\n\tfunction handleFloatingScroll() {\n\t\tif (!$.get(scrollbarRef) || !targetElement() || isSyncing) return;\n\n\t\tisSyncing = true;\n\t\ttargetElement().scrollLeft = $.get(scrollbarRef).scrollLeft;\n\n\t\trequestAnimationFrame(() => {\n\t\t\tisSyncing = false;\n\t\t});\n\t}\n\n\tonMount(() => {\n\t\tupdateMetrics();\n\n\t\tconst onScrollOrResize = () => {\n\t\t\tupdateMetrics();\n\t\t};\n\n\t\twindow.addEventListener('scroll', onScrollOrResize, { passive: true });\n\t\twindow.addEventListener('resize', onScrollOrResize, { passive: true });\n\n\t\tconst target = targetElement();\n\n\t\tif (target) {\n\t\t\ttarget.addEventListener('scroll', onScrollOrResize, { passive: true });\n\t\t}\n\n\t\treturn () => {\n\t\t\twindow.removeEventListener('scroll', onScrollOrResize);\n\t\t\twindow.removeEventListener('resize', onScrollOrResize);\n\n\t\t\tif (target) {\n\t\t\t\ttarget.removeEventListener('scroll', onScrollOrResize);\n\t\t\t}\n\t\t};\n\t});\n\n\t$.user_effect(() => {\n\t\t// Re-evaluate whenever targetElement or totalWidth changes\n\t\tif (targetElement()) {\n\t\t\tupdateMetrics();\n\t\t}\n\t});\n\n\tvar fragment = $.comment();\n\tvar node = $.first_child(fragment);\n\n\t{\n\t\tvar consequent = ($$anchor) => {\n\t\t\tvar div = root();\n\n\t\t\t$.set_attribute(div, 'aria-valuemin', 0);\n\n\t\t\tvar div_1 = $.only_child(div);\n\n\t\t\t$.bind_this(div, ($$value) => $.set(scrollbarRef, $$value), () => $.get(scrollbarRef));\n\n\t\t\t$.template_effect(\n\t\t\t\t($0) => {\n\t\t\t\t\t$.set_style(div, `left: ${$.get(barLeft) ?? ''}px; width: ${$.get(barWidth) ?? ''}px; height: 14px;`);\n\t\t\t\t\t$.set_attribute(div, 'aria-controls', targetElement()?.id);\n\t\t\t\t\t$.set_attribute(div, 'aria-valuenow', targetElement()?.scrollLeft ?? 0);\n\t\t\t\t\t$.set_attribute(div, 'aria-valuemax', (targetElement()?.scrollWidth ?? totalWidth()) - (targetElement()?.clientWidth ?? 0));\n\t\t\t\t\t$.set_style(div_1, `width: ${$0 ?? ''}px; height: 1px;`);\n\t\t\t\t},\n\t\t\t\t[\n\t\t\t\t\t() => Math.max(totalWidth(), targetElement()?.scrollWidth ?? 0)\n\t\t\t\t]\n\t\t\t);\n\n\t\t\t$.event('scroll', div, handleFloatingScroll);\n\t\t\t$.append($$anchor, div);\n\t\t};\n\n\t\t$.if(node, ($$render) => {\n\t\t\tif ($.get(isVisible)) $$render(consequent);\n\t\t});\n\t}\n\n\t$.append($$anchor, fragment);\n\t$.pop();\n}","import 'svelte/internal/disclose-version';\nimport * as $ from 'svelte/internal/client';\n\nvar root = $.from_html(`<span class=\"opacity-80 text-[10px]\"> </span>`);\nvar root_1 = $.from_html(`<div class=\"absolute transition-transform duration-75 ease-out\"><svg class=\"h-5 w-5 drop-shadow-md\" viewBox=\"0 0 24 24\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\"><path d=\"M5.65376 12.3673H5.46026L5.31717 12.4976L0.500002 16.8829L0.500002 1.19841L11.7841 12.3673H5.65376Z\" stroke=\"white\" stroke-width=\"1\"></path></svg> <div class=\"mt-1 flex items-center gap-1 rounded-full px-2 py-0.5 text-xs font-medium text-white shadow-md whitespace-nowrap\"><span> </span> <!></div></div>`);\nvar root_2 = $.from_html(`<div aria-hidden=\"true\"></div>`);\n\nexport default function AgentPresenceLayer($$anchor, $$props) {\n\t$.push($$props, true);\n\n\tlet presences = $.prop($$props, 'presences', 19, () => []),\n\t\tclassName = $.prop($$props, 'class', 3, '');\n\n\tvar fragment = $.comment();\n\tvar node = $.first_child(fragment);\n\n\t{\n\t\tvar consequent_2 = ($$anchor) => {\n\t\t\tvar div = root_2();\n\n\t\t\t$.each(div, 21, presences, (agent) => agent.agentId, ($$anchor, agent) => {\n\t\t\t\tvar fragment_1 = $.comment();\n\t\t\t\tvar node_1 = $.first_child(fragment_1);\n\n\t\t\t\t{\n\t\t\t\t\tvar consequent_1 = ($$anchor) => {\n\t\t\t\t\t\tvar div_1 = root_1();\n\t\t\t\t\t\tvar svg = $.child(div_1);\n\t\t\t\t\t\tvar path = $.only_child(svg);\n\t\t\t\t\t\tvar div_2 = $.sibling(svg, 2);\n\t\t\t\t\t\tvar span = $.child(div_2);\n\t\t\t\t\t\tvar text = $.only_child(span, true);\n\t\t\t\t\t\tvar node_2 = $.sibling(span, 2);\n\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tvar consequent = ($$anchor) => {\n\t\t\t\t\t\t\t\tvar span_1 = root();\n\t\t\t\t\t\t\t\tvar text_1 = $.only_child(span_1);\n\n\t\t\t\t\t\t\t\t$.template_effect(() => $.set_text(text_1, `(${$.get(agent).statusMessage ?? ''})`));\n\t\t\t\t\t\t\t\t$.append($$anchor, span_1);\n\t\t\t\t\t\t\t};\n\n\t\t\t\t\t\t\t$.if(node_2, ($$render) => {\n\t\t\t\t\t\t\t\tif ($.get(agent).statusMessage) $$render(consequent);\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t$.reset(div_2);\n\t\t\t\t\t\t$.reset(div_1);\n\n\t\t\t\t\t\t$.template_effect(() => {\n\t\t\t\t\t\t\t$.set_style(div_1, `transform: translate3d(${$.get(agent).cursorPosition.x ?? ''}px, ${$.get(agent).cursorPosition.y ?? ''}px, 0);`);\n\t\t\t\t\t\t\t$.set_attribute(path, 'fill', $.get(agent).color || '#3b82f6');\n\t\t\t\t\t\t\t$.set_style(div_2, `background-color: ${($.get(agent).color || '#3b82f6') ?? ''};`);\n\t\t\t\t\t\t\t$.set_text(text, $.get(agent).name);\n\t\t\t\t\t\t});\n\n\t\t\t\t\t\t$.append($$anchor, div_1);\n\t\t\t\t\t};\n\n\t\t\t\t\t$.if(node_1, ($$render) => {\n\t\t\t\t\t\tif ($.get(agent).cursorPosition) $$render(consequent_1);\n\t\t\t\t\t});\n\t\t\t\t}\n\n\t\t\t\t$.append($$anchor, fragment_1);\n\t\t\t});\n\n\t\t\t$.reset(div);\n\t\t\t$.template_effect(() => $.set_class(div, 1, `pixerate-agent-presence-layer pointer-events-none absolute inset-0 z-50 overflow-hidden ${className() ?? ''}`));\n\t\t\t$.append($$anchor, div);\n\t\t};\n\n\t\t$.if(node, ($$render) => {\n\t\t\tif (presences().length > 0) $$render(consequent_2);\n\t\t});\n\t}\n\n\t$.append($$anchor, fragment);\n\t$.pop();\n}","import {\n StreamingLayoutManager\n} from \"@pixerate/editor/canvas\";\nexport function createStreamingCanvas(options = {}) {\n let positions = $state(/* @__PURE__ */ new Map());\n const manager = new StreamingLayoutManager({\n throttleMs: options.throttleMs,\n glideDurationMs: options.glideDurationMs,\n layoutOptions: options.layoutOptions,\n onLayoutUpdated: (updated) => {\n positions = updated;\n options.onPositionsChange?.(updated);\n }\n });\n return {\n get positions() {\n return positions;\n },\n pushStreamUpdate(nodes, edges, currentPositions) {\n manager.pushStreamUpdate(nodes, edges, currentPositions);\n },\n flush(nodes, edges, currentPositions) {\n manager.flush(nodes, edges, currentPositions);\n },\n destroy() {\n manager.destroy();\n }\n };\n}\n"],"mappings":"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","names":["event","event","reset","event","event","cubicOut","dagre","cubicOut","cubicOut","child","state","event","$","$$anchor","$","root","$$anchor"]}
1
+ {"version":3,"sources":["../../src/canvas/createCanvasGraph.svelte.ts","../../src/canvas/createCanvasLayout.ts","../../src/canvas/createCanvasClipboard.svelte.ts","../../src/canvas/createCanvasDocking.svelte.ts","../../src/canvas/createCanvasShortcuts.ts","../../src/canvas/createCanvasInteractions.svelte.ts","../../src/canvas/createCanvasTrajectory.ts","../../src/canvas/createCanvasDisplacement.ts","../../src/canvas/createCanvasExplosion.svelte.ts","../../src/canvas/createCanvasNodeSync.svelte.ts","../../src/canvas/createCanvasMultiDrag.svelte.ts","../../src/canvas/createCanvasSelection.svelte.ts","../../src/canvas/FloatingHorizontalScrollbar.svelte","../../src/canvas/AgentPresenceLayer.svelte","../../src/canvas/createStreamingCanvas.svelte.ts","../../src/canvas/index.ts"],"sourcesContent":["import { cubicOut } from \"svelte/easing\";\nexport function calculateGraphDifferences(currentState, baselineState) {\n const currentNodes = currentState.nodes ?? [];\n const currentEdges = currentState.edges ?? [];\n const baselineNodes = baselineState.nodes ?? [];\n const baselineEdges = baselineState.edges ?? [];\n const baselineNodeMap = new Map(baselineNodes.map((n) => [n.id, n]));\n const baselineEdgeMap = new Map(baselineEdges.map((e) => [e.id, e]));\n const currentNodeMap = new Map(currentNodes.map((n) => [n.id, n]));\n const currentEdgeMap = new Map(currentEdges.map((e) => [e.id, e]));\n const removedNodes = baselineNodes.filter((oldNode) => !currentNodeMap.has(oldNode.id));\n const removedEdges = baselineEdges.filter((oldEdge) => !currentEdgeMap.has(oldEdge.id));\n const changedNodes = currentNodes.filter((newNode) => {\n const oldNode = baselineNodeMap.get(newNode.id);\n if (!oldNode) return true;\n return JSON.stringify(newNode) !== JSON.stringify(oldNode);\n });\n const changedEdges = currentEdges.filter((newEdge) => {\n const oldEdge = baselineEdgeMap.get(newEdge.id);\n if (!oldEdge) return true;\n return JSON.stringify(newEdge) !== JSON.stringify(oldEdge);\n });\n return { changedNodes, changedEdges, removedNodes, removedEdges };\n}\nexport function replaceNodeInGraph(nodes, edges, oldNode, newNode, keepEdges = false) {\n const updatedNodes = nodes.map((n) => n.id === oldNode.id ? newNode : n);\n if (!keepEdges) {\n return { nodes: updatedNodes, edges };\n }\n const updatedEdges = edges.map((edge) => {\n if (edge.source === oldNode.id || edge.target === oldNode.id) {\n return {\n ...edge,\n id: crypto.randomUUID(),\n source: edge.source === oldNode.id ? newNode.id : edge.source,\n target: edge.target === oldNode.id ? newNode.id : edge.target\n };\n }\n return edge;\n });\n return {\n nodes: updatedNodes,\n edges: updatedEdges\n };\n}\nexport function createCanvasGraph(options = {}) {\n let nodes = $state.raw(options.initialNodes ?? []);\n let edges = $state.raw(options.initialEdges ?? []);\n function setNodes(newNodes, triggerCallback = true) {\n nodes = newNodes;\n if (triggerCallback) {\n options.onNodesChange?.(nodes);\n }\n }\n function setEdges(newEdges, triggerCallback = true) {\n edges = newEdges;\n if (triggerCallback) {\n options.onEdgesChange?.(edges);\n }\n }\n function animateNodePosition(node, targetPosition, duration = 400, easing = cubicOut) {\n const delay = node.data?.animationDelay ?? 0;\n const startPosition = { ...node.position };\n const startTime = Date.now() + delay;\n function step() {\n const currentTime = Date.now();\n if (currentTime < startTime) {\n if (typeof requestAnimationFrame !== \"undefined\") {\n requestAnimationFrame(step);\n }\n return;\n }\n const progress = Math.min((currentTime - startTime) / duration, 1);\n const eased = easing(progress);\n const currentPos = {\n x: startPosition.x + (targetPosition.x - startPosition.x) * eased,\n y: startPosition.y + (targetPosition.y - startPosition.y) * eased\n };\n const targetNode = nodes.find((n) => n.id === node.id);\n if (targetNode) {\n targetNode.position = currentPos;\n }\n if (progress < 1) {\n if (typeof requestAnimationFrame !== \"undefined\") {\n requestAnimationFrame(step);\n }\n } else {\n setNodes([...nodes]);\n }\n }\n step();\n }\n function addNodeOrNodes(nodeOrNodesToAdd, animateFromPosition, save = true) {\n const toAdd = Array.isArray(nodeOrNodesToAdd) ? nodeOrNodesToAdd : [nodeOrNodesToAdd];\n const existingMap = new Map(nodes.map((n) => [n.id, n]));\n toAdd.forEach((node) => {\n if (!existingMap.has(node.id)) {\n existingMap.set(node.id, node);\n }\n });\n setNodes(Array.from(existingMap.values()));\n if (animateFromPosition) {\n toAdd.forEach((node) => {\n const target = { ...node.position };\n node.position = { ...animateFromPosition };\n animateNodePosition(node, target);\n });\n }\n if (save) options.onSave?.();\n }\n function addEdge(edgeToAdd, save = true) {\n setEdges([...edges, edgeToAdd]);\n if (save) options.onSave?.();\n }\n function addEdges(edgesToAdd, save = true) {\n setEdges([...edges, ...edgesToAdd]);\n if (save) options.onSave?.();\n }\n function removeNodes(nodesToRemove, save = true) {\n const idsToRemove = new Set(nodesToRemove.map((n) => n.id));\n setNodes(nodes.filter((n) => !idsToRemove.has(n.id)));\n if (save) options.onSave?.();\n }\n function removeEdges(edgesToRemove, save = true) {\n const idsToRemove = new Set(edgesToRemove.map((e) => e.id));\n setEdges(edges.filter((e) => !idsToRemove.has(e.id)));\n if (save) options.onSave?.();\n }\n function replaceNode(oldNode, newNode, save = true, keepEdges = false) {\n const result = replaceNodeInGraph(nodes, edges, oldNode, newNode, keepEdges);\n setNodes(result.nodes);\n if (result.edges !== edges) {\n setEdges(result.edges);\n }\n if (save) options.onSave?.();\n }\n function addConnectedNodes(params) {\n const {\n nodesToAdd,\n inboundNodes = [],\n outboundNodes = [],\n animatedEdges = false,\n animateFromPosition,\n inboundEdgeData = {},\n outboundEdgeData = {},\n getEdgeLabel\n } = params;\n const defaultCreateEdge = (sourceId, targetId, opt) => {\n if (options.createEdge) {\n return options.createEdge(sourceId, targetId, opt);\n }\n return {\n id: crypto.randomUUID(),\n type: \"default\",\n source: sourceId,\n target: targetId,\n label: opt?.label ?? \"\",\n animated: opt?.animated ?? false,\n data: opt?.data ?? {}\n };\n };\n nodesToAdd.forEach((addedNode) => {\n addNodeOrNodes(addedNode, animateFromPosition, false);\n inboundNodes.forEach((sourceNode) => {\n const label = getEdgeLabel ? getEdgeLabel(sourceNode, addedNode) : \"\";\n addEdge(\n defaultCreateEdge(sourceNode.id, addedNode.id, {\n label,\n animated: animatedEdges,\n data: inboundEdgeData\n }),\n false\n );\n });\n outboundNodes.forEach((targetNode) => {\n const label = getEdgeLabel ? getEdgeLabel(addedNode, targetNode) : \"\";\n addEdge(\n defaultCreateEdge(addedNode.id, targetNode.id, {\n label,\n animated: animatedEdges,\n data: outboundEdgeData\n }),\n false\n );\n });\n });\n options.onSave?.();\n }\n function getDifferences(baseline) {\n return calculateGraphDifferences({ nodes, edges }, baseline);\n }\n return {\n get nodes() {\n return nodes;\n },\n set nodes(val) {\n setNodes(val);\n },\n get edges() {\n return edges;\n },\n set edges(val) {\n setEdges(val);\n },\n setNodes,\n setEdges,\n addNodeOrNodes,\n addEdge,\n addEdges,\n removeNodes,\n removeEdges,\n replaceNode,\n addConnectedNodes,\n animateNodePosition,\n getDifferences\n };\n}\n","import dagre from '@dagrejs/dagre';\nimport { Position, type XYPosition, type Rect } from '@xyflow/svelte';\nimport type { CanvasNode, CanvasEdge, CanvasLayoutOptions } from './types.js';\n\n/**\n * Calculates upper-left flow coordinate for an element to be centered in the viewport.\n */\nexport function getCenteredNodePosition(\n\twidth = 0,\n\theight = 0,\n\tscreenToFlowPosition: (position: XYPosition) => XYPosition,\n\tscreenDimensions?: { width: number; height: number }\n): XYPosition {\n\tconst rect = screenDimensions ?? (typeof document !== 'undefined'\n\t\t? { width: document.documentElement.clientWidth, height: document.documentElement.clientHeight }\n\t\t: { width: 1920, height: 1080 });\n\n\tconst flowPos = screenToFlowPosition({ x: rect.width / 2, y: rect.height / 2 });\n\treturn {\n\t\tx: flowPos.x - width / 2,\n\t\ty: flowPos.y - height / 2\n\t};\n}\n\n/**\n * Updates positions of nodes so their collective bounding box is centered in the current viewport.\n */\nexport function centerNodes<TNode extends CanvasNode = CanvasNode>(\n\tnodes: TNode[],\n\tscreenToFlowPosition: (position: XYPosition) => XYPosition,\n\tgetNodesBounds: (nodes: TNode[]) => Rect,\n\tscreenDimensions?: { width: number; height: number }\n): TNode[] {\n\tif (nodes.length === 0) {\n\t\treturn [];\n\t}\n\n\tconst bounds = getNodesBounds(nodes);\n\tconst boundingBoxOrigin = { x: bounds.x, y: bounds.y };\n\n\tconst centeredPosition = getCenteredNodePosition(\n\t\tbounds.width,\n\t\tbounds.height,\n\t\tscreenToFlowPosition,\n\t\tscreenDimensions\n\t);\n\n\tconst deltaX = centeredPosition.x - boundingBoxOrigin.x;\n\tconst deltaY = centeredPosition.y - boundingBoxOrigin.y;\n\n\treturn nodes.map((node) => ({\n\t\t...node,\n\t\tposition: {\n\t\t\tx: node.position.x + deltaX,\n\t\t\ty: node.position.y + deltaY\n\t\t}\n\t}));\n}\n\n/**\n * Automatically calculates directed hierarchical layout of nodes and edges using Dagre.\n */\nexport function getLayoutedNodes<\n\tTNode extends CanvasNode = CanvasNode,\n\tTEdge extends CanvasEdge = CanvasEdge\n>(\n\tnodes: TNode[],\n\tedges: TEdge[],\n\tgetNodesBounds: (nodes: TNode[]) => Rect,\n\toptions: CanvasLayoutOptions = {}\n): TNode[] {\n\tif (nodes.length === 0) return [];\n\n\tconst {\n\t\tdirection = 'LR',\n\t\tranksep = 100,\n\t\tnodesep = 25,\n\t\tdefaultNodeWidth = 200,\n\t\tdefaultNodeHeight = 200\n\t} = options;\n\n\tconst isHorizontal = direction === 'LR' || direction === 'RL';\n\tconst bounds = getNodesBounds(nodes);\n\n\tconst dagreGraph = new dagre.graphlib.Graph();\n\tdagreGraph.setDefaultEdgeLabel(() => ({}));\n\tdagreGraph.setGraph({ rankdir: direction, ranksep, nodesep });\n\n\tconst nodeIds = new Set(nodes.map((node) => node.id));\n\n\tnodes.forEach((node) => {\n\t\tconst nodeWidth = node.measured?.width ?? (node as any).width ?? defaultNodeWidth;\n\t\tconst nodeHeight = node.measured?.height ?? (node as any).height ?? defaultNodeHeight;\n\t\tdagreGraph.setNode(node.id, { width: nodeWidth, height: nodeHeight });\n\t});\n\n\tedges.forEach((edge) => {\n\t\tif (nodeIds.has(edge.source) && nodeIds.has(edge.target)) {\n\t\t\tdagreGraph.setEdge(edge.source, edge.target);\n\t\t}\n\t});\n\n\tdagre.layout(dagreGraph);\n\n\treturn nodes.map((node) => {\n\t\tconst nodeWithPosition = dagreGraph.node(node.id);\n\t\tconst nodeWidth = node.measured?.width ?? (node as any).width ?? defaultNodeWidth;\n\t\tconst nodeHeight = node.measured?.height ?? (node as any).height ?? defaultNodeHeight;\n\n\t\treturn {\n\t\t\t...node,\n\t\t\ttargetPosition: isHorizontal ? Position.Left : Position.Top,\n\t\t\tsourcePosition: isHorizontal ? Position.Right : Position.Bottom,\n\t\t\tposition: {\n\t\t\t\tx: bounds.x + (nodeWithPosition?.x ?? 0) - nodeWidth / 2,\n\t\t\t\ty: bounds.y + (nodeWithPosition?.y ?? 0) - nodeHeight / 2\n\t\t\t}\n\t\t};\n\t});\n}\n\n// Re-export incremental layout and collision-aware placement from core\nexport {\n\tensureLayout,\n\tplaceBeside,\n\testimateNodeSize,\n\tflowSide\n} from '@pixerate/editor/canvas';\n\n","import { tick } from \"svelte\";\nexport function isEventFromTextInput(event) {\n const target = event.target;\n if (!target) return false;\n if (target.tagName === \"INPUT\" || target.tagName === \"TEXTAREA\" || target.tagName === \"SELECT\" || target.isContentEditable || target.closest?.('[contenteditable=\"true\"]') || target.closest?.(\".ProseMirror\")) {\n return true;\n }\n return false;\n}\nexport function isValidCanvasNode(obj) {\n return typeof obj === \"object\" && obj !== null && \"id\" in obj && typeof obj.id === \"string\" && \"position\" in obj && typeof obj.position === \"object\" && obj.position !== null && \"x\" in obj.position && \"y\" in obj.position;\n}\nexport function isValidUrl(url) {\n try {\n const parsed = new URL(url);\n return parsed.protocol === \"http:\" || parsed.protocol === \"https:\";\n } catch {\n return false;\n }\n}\nexport function createCanvasClipboard(options = {}) {\n function copySelectedNodes(selectedNodes, connectedEdges, event) {\n if (event && isEventFromTextInput(event)) {\n return false;\n }\n if (selectedNodes.length === 0) return false;\n const payload = {\n version: 1,\n nodes: selectedNodes,\n edges: connectedEdges\n };\n const serialized = JSON.stringify(payload);\n if (event?.clipboardData) {\n event.clipboardData.setData(\"application/json\", serialized);\n event.clipboardData.setData(\"text/plain\", serialized);\n event.preventDefault();\n } else if (typeof navigator !== \"undefined\" && navigator.clipboard) {\n navigator.clipboard.writeText(serialized).catch(() => {\n });\n }\n return true;\n }\n function cutSelectedNodes(selectedNodes, connectedEdges, onRemove, event) {\n if (event && isEventFromTextInput(event)) {\n return false;\n }\n const copied = copySelectedNodes(selectedNodes, connectedEdges, event);\n if (copied && onRemove) {\n onRemove(selectedNodes);\n }\n return copied;\n }\n async function handlePasteEvent(event) {\n if (isEventFromTextInput(event)) {\n return false;\n }\n const clipboardData = event.clipboardData;\n if (!clipboardData) return false;\n const files = clipboardData.files;\n if (files && files.length > 0) {\n const imageFile = Array.from(files).find((f) => f.type.startsWith(\"image/\"));\n if (imageFile && options.onPasteImage) {\n event.preventDefault();\n await options.onPasteImage(imageFile);\n return true;\n }\n }\n const rawJson = clipboardData.getData(\"application/json\") || clipboardData.getData(\"text/plain\");\n if (rawJson) {\n try {\n const parsed = JSON.parse(rawJson);\n let rawNodes;\n let rawEdges;\n if (Array.isArray(parsed) && parsed.every(isValidCanvasNode)) {\n rawNodes = parsed;\n } else if (typeof parsed === \"object\" && parsed !== null && Array.isArray(parsed.nodes) && parsed.nodes.every(isValidCanvasNode)) {\n rawNodes = parsed.nodes;\n rawEdges = parsed.edges;\n }\n if (rawNodes && rawNodes.length > 0) {\n event.preventDefault();\n const idMap = /* @__PURE__ */ new Map();\n const newNodes = rawNodes.map((node) => {\n const newId = crypto.randomUUID();\n idMap.set(node.id, newId);\n return {\n ...node,\n id: newId,\n selected: true,\n position: {\n x: node.position.x + 40,\n y: node.position.y + 40\n }\n };\n });\n const newEdges = rawEdges?.map((edge) => ({\n ...edge,\n id: crypto.randomUUID(),\n source: idMap.get(edge.source) ?? edge.source,\n target: idMap.get(edge.target) ?? edge.target\n }));\n if (options.onPasteNodes) {\n await options.onPasteNodes(newNodes, newEdges);\n await tick();\n }\n return true;\n }\n } catch {\n }\n }\n const text = clipboardData.getData(\"text/plain\")?.trim();\n if (text) {\n if (isValidUrl(text) && options.onPasteUrl) {\n event.preventDefault();\n options.onPasteUrl(text);\n return true;\n } else if (options.onPasteText) {\n event.preventDefault();\n options.onPasteText(text);\n return true;\n }\n }\n return false;\n }\n return {\n copySelectedNodes,\n cutSelectedNodes,\n handlePasteEvent\n };\n}\n","function getNodeRect(node) {\n const x = node.position?.x ?? 0;\n const y = node.position?.y ?? 0;\n const width = node.measured?.width ?? node.width ?? node.initialWidth ?? 0;\n const height = node.measured?.height ?? node.height ?? node.initialHeight ?? 0;\n return { x, y, width, height };\n}\nfunction getNodeCenter(node) {\n const rect = getNodeRect(node);\n return {\n x: rect.x + rect.width / 2,\n y: rect.y + rect.height / 2\n };\n}\nfunction getDistanceSq(p1, p2) {\n const dx = p1.x - p2.x;\n const dy = p1.y - p2.y;\n return dx * dx + dy * dy;\n}\nfunction getOverlapArea(rectA, rectB) {\n const xOverlap = Math.max(\n 0,\n Math.min(rectA.x + rectA.width, rectB.x + rectB.width) - Math.max(rectA.x, rectB.x)\n );\n const yOverlap = Math.max(\n 0,\n Math.min(rectA.y + rectA.height, rectB.y + rectB.height) - Math.max(rectA.y, rectB.y)\n );\n return xOverlap * yOverlap;\n}\nfunction resolvePrimaryTarget(targets, draggedNode, strategy, customResolver, event) {\n if (targets.length === 0) return null;\n if (targets.length === 1) return targets[0];\n if (customResolver) {\n const resolved = customResolver(targets, draggedNode, event);\n if (resolved !== void 0) return resolved;\n }\n if (strategy === \"first\") {\n return targets[0];\n }\n if (strategy === \"pointer\" && event) {\n const clientX = \"clientX\" in event ? event.clientX : event.touches?.[0]?.clientX;\n const clientY = \"clientY\" in event ? event.clientY : event.touches?.[0]?.clientY;\n if (typeof clientX === \"number\" && typeof clientY === \"number\") {\n const pointerInside = targets.filter((target) => {\n const r = getNodeRect(target);\n return r.width > 0 && r.height > 0 && clientX >= r.x && clientX <= r.x + r.width && clientY >= r.y && clientY <= r.y + r.height;\n });\n if (pointerInside.length === 1) return pointerInside[0];\n if (pointerInside.length > 1) {\n return pointerInside.reduce((best, cur) => {\n const bestDist = getDistanceSq(getNodeCenter(best), { x: clientX, y: clientY });\n const curDist = getDistanceSq(getNodeCenter(cur), { x: clientX, y: clientY });\n return curDist < bestDist ? cur : best;\n });\n }\n }\n }\n if (strategy === \"max-overlap\") {\n const draggedRect = getNodeRect(draggedNode);\n let maxArea = -1;\n let bestTarget = targets[0];\n for (const target of targets) {\n const targetRect = getNodeRect(target);\n const area = getOverlapArea(draggedRect, targetRect);\n if (area > maxArea) {\n maxArea = area;\n bestTarget = target;\n }\n }\n return bestTarget;\n }\n const draggedCenter = getNodeCenter(draggedNode);\n const containing = targets.filter((target) => {\n const r = getNodeRect(target);\n if (r.width > 0 && r.height > 0) {\n return draggedCenter.x >= r.x && draggedCenter.x <= r.x + r.width && draggedCenter.y >= r.y && draggedCenter.y <= r.y + r.height;\n }\n return false;\n });\n if (containing.length === 1) return containing[0];\n if (containing.length > 1) {\n return containing.reduce((best, cur) => {\n const bestDist = getDistanceSq(getNodeCenter(best), draggedCenter);\n const curDist = getDistanceSq(getNodeCenter(cur), draggedCenter);\n return curDist < bestDist ? cur : best;\n });\n }\n return targets.reduce((best, cur) => {\n const bestDist = getDistanceSq(getNodeCenter(best), draggedCenter);\n const curDist = getDistanceSq(getNodeCenter(cur), draggedCenter);\n return curDist < bestDist ? cur : best;\n });\n}\nexport function createCanvasDocking(options = {}) {\n let draggedNode = $state.raw(null);\n let draggedInitialPosition = $state.raw(null);\n let connectingHandle = $state.raw(\"\");\n let connectingNode = $state.raw(null);\n let currentHoverTargets = $state.raw(/* @__PURE__ */ new Set());\n const isDockTarget = options.isDockTarget ?? ((target) => target.type === \"boardNode\");\n const dockStrategy = options.dockStrategy ?? \"center-point\";\n const exclusiveHover = options.exclusiveHover ?? true;\n function handleNodeDragStart(params) {\n draggedNode = params.targetNode;\n draggedInitialPosition = params.targetNode?.position ? { ...params.targetNode.position } : null;\n currentHoverTargets = /* @__PURE__ */ new Set();\n }\n function handleNodeDrag(params, getIntersectingNodes) {\n draggedNode = params.targetNode;\n if (!draggedNode) return;\n const intersecting = getIntersectingNodes(draggedNode);\n const currentDockTargets = intersecting.filter(isDockTarget);\n if (exclusiveHover) {\n const primaryTarget = currentDockTargets.length > 0 ? resolvePrimaryTarget(\n currentDockTargets,\n draggedNode,\n dockStrategy,\n options.resolvePrimaryDockTarget,\n params.event\n ) : null;\n const primaryTargetId = primaryTarget ? primaryTarget.id : null;\n currentHoverTargets.forEach((targetId) => {\n if (targetId !== primaryTargetId) {\n const leftNode = intersecting.find((n) => n.id === targetId) ?? { id: targetId };\n options.onDockLeave?.(leftNode, draggedNode);\n }\n });\n if (primaryTarget && !currentHoverTargets.has(primaryTarget.id)) {\n options.onDockHover?.(primaryTarget, draggedNode);\n }\n currentHoverTargets = primaryTargetId ? /* @__PURE__ */ new Set([primaryTargetId]) : /* @__PURE__ */ new Set();\n } else {\n const newHoverSet = new Set(currentDockTargets.map((t) => t.id));\n currentHoverTargets.forEach((targetId) => {\n if (!newHoverSet.has(targetId)) {\n const leftNode = intersecting.find((n) => n.id === targetId) ?? { id: targetId };\n options.onDockLeave?.(leftNode, draggedNode);\n }\n });\n currentDockTargets.forEach((target) => {\n if (!currentHoverTargets.has(target.id)) {\n options.onDockHover?.(target, draggedNode);\n }\n });\n currentHoverTargets = newHoverSet;\n }\n }\n function handleNodeDragStop(params, getIntersectingNodes, updateNodePosition) {\n draggedNode = params.targetNode;\n if (draggedNode) {\n const intersecting = getIntersectingNodes(draggedNode);\n const dockTargets = intersecting.filter(isDockTarget);\n const dockTarget = dockTargets.length > 0 ? resolvePrimaryTarget(\n dockTargets,\n draggedNode,\n dockStrategy,\n options.resolvePrimaryDockTarget,\n params.event\n ) : null;\n if (dockTarget) {\n options.onDockDrop?.(dockTarget, draggedNode);\n if (options.restorePositionOnDock !== false && draggedInitialPosition && updateNodePosition) {\n updateNodePosition(draggedNode.id, draggedInitialPosition);\n }\n }\n }\n draggedNode = null;\n draggedInitialPosition = null;\n currentHoverTargets = /* @__PURE__ */ new Set();\n options.onSave?.();\n }\n function handleConnectStart(params, getNode) {\n connectingHandle = params.handleType ?? \"\";\n connectingNode = params.nodeId ? getNode(params.nodeId) ?? null : null;\n }\n function handleConnectEnd() {\n connectingHandle = \"\";\n connectingNode = null;\n }\n function reset() {\n draggedNode = null;\n draggedInitialPosition = null;\n connectingHandle = \"\";\n connectingNode = null;\n currentHoverTargets = /* @__PURE__ */ new Set();\n }\n return {\n get draggedNode() {\n return draggedNode;\n },\n get draggedInitialPosition() {\n return draggedInitialPosition;\n },\n get connectingHandle() {\n return connectingHandle;\n },\n get connectingNode() {\n return connectingNode;\n },\n get isDragging() {\n return draggedNode !== null;\n },\n handleNodeDragStart,\n handleNodeDrag,\n handleNodeDragStop,\n handleConnectStart,\n handleConnectEnd,\n reset\n };\n}\n","import { isEventFromTextInput } from './createCanvasClipboard.svelte.js';\nimport type { CanvasNode, CanvasShortcutsOptions } from './types.js';\n\n/**\n * Attaches keyboard shortcut handlers for canvas interaction.\n * Automatically ignores shortcuts when the user is typing into text inputs, textareas, or rich editors.\n *\n * @returns A cleanup function to remove event listeners.\n */\nexport function createCanvasShortcuts<TNode extends CanvasNode = CanvasNode>(\n\toptions: CanvasShortcutsOptions<TNode>\n): () => void {\n\tconst target = options.targetElement ?? (typeof window !== 'undefined' ? window : null);\n\tif (!target) return () => {};\n\n\tfunction handleKeyDown(event: Event) {\n\t\tconst keyboardEvent = event as KeyboardEvent;\n\t\tif (isEventFromTextInput(keyboardEvent)) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst isMod = keyboardEvent.metaKey || keyboardEvent.ctrlKey;\n\t\tconst isShift = keyboardEvent.shiftKey;\n\t\tconst key = keyboardEvent.key;\n\n\t\tconst selectedNodes = options.getSelectedNodes ? options.getSelectedNodes() : [];\n\n\t\tif (key === 'Backspace' || key === 'Delete') {\n\t\t\tif (options.onDelete && selectedNodes.length > 0) {\n\t\t\t\tkeyboardEvent.preventDefault();\n\t\t\t\toptions.onDelete(selectedNodes);\n\t\t\t}\n\t\t\treturn;\n\t\t}\n\n\t\tif (isMod) {\n\t\t\tconst lowerKey = key.toLowerCase();\n\n\t\t\tif (lowerKey === 'c' && !isShift) {\n\t\t\t\tif (options.onCopy) {\n\t\t\t\t\t// We let the native copy event fire or call onCopy\n\t\t\t\t\toptions.onCopy();\n\t\t\t\t}\n\t\t\t} else if (lowerKey === 'x' && !isShift) {\n\t\t\t\tif (options.onCut) {\n\t\t\t\t\toptions.onCut();\n\t\t\t\t}\n\t\t\t} else if (lowerKey === 'd' && !isShift) {\n\t\t\t\tif (options.onDuplicate && selectedNodes.length > 0) {\n\t\t\t\t\tkeyboardEvent.preventDefault();\n\t\t\t\t\toptions.onDuplicate(selectedNodes);\n\t\t\t\t}\n\t\t\t} else if (lowerKey === 'a' && !isShift) {\n\t\t\t\tif (options.onSelectAll) {\n\t\t\t\t\tkeyboardEvent.preventDefault();\n\t\t\t\t\toptions.onSelectAll();\n\t\t\t\t}\n\t\t\t} else if (lowerKey === 'g') {\n\t\t\t\tif (isShift) {\n\t\t\t\t\tif (options.onUngroup && selectedNodes.length > 0) {\n\t\t\t\t\t\tkeyboardEvent.preventDefault();\n\t\t\t\t\t\toptions.onUngroup(selectedNodes);\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\tif (options.onGroup && selectedNodes.length > 0) {\n\t\t\t\t\t\tkeyboardEvent.preventDefault();\n\t\t\t\t\t\toptions.onGroup(selectedNodes);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} else if (key === '=' || key === '+') {\n\t\t\t\tif (options.onZoomIn) {\n\t\t\t\t\tkeyboardEvent.preventDefault();\n\t\t\t\t\toptions.onZoomIn();\n\t\t\t\t}\n\t\t\t} else if (key === '-') {\n\t\t\t\tif (options.onZoomOut) {\n\t\t\t\t\tkeyboardEvent.preventDefault();\n\t\t\t\t\toptions.onZoomOut();\n\t\t\t\t}\n\t\t\t} else if (key === '0') {\n\t\t\t\tif (options.onFitView) {\n\t\t\t\t\tkeyboardEvent.preventDefault();\n\t\t\t\t\toptions.onFitView();\n\t\t\t\t}\n\t\t\t} else if (lowerKey === 'f') {\n\t\t\t\tif (options.onSearch) {\n\t\t\t\t\tkeyboardEvent.preventDefault();\n\t\t\t\t\toptions.onSearch();\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\ttarget.addEventListener('keydown', handleKeyDown as EventListener);\n\n\treturn () => {\n\t\ttarget.removeEventListener('keydown', handleKeyDown as EventListener);\n\t};\n}\n","import { isEventFromTextInput } from \"./createCanvasClipboard.svelte.js\";\nexport function createCanvasInteractions(options = {}) {\n let isSpacebarPanning = $state.raw(false);\n let trackpadDetected = $state.raw(false);\n let toggledPanMode = false;\n function handleKeyDown(event) {\n if (event.key === \" \" || event.code === \"Space\") {\n if (isSpacebarPanning || isEventFromTextInput(event)) return;\n isSpacebarPanning = true;\n toggledPanMode = true;\n options.onPanModeChange?.(true);\n if (typeof document !== \"undefined\") {\n document.body.classList.add(\"cursor-grab\");\n }\n }\n }\n function handleKeyUp(event) {\n if (event.key === \" \" || event.code === \"Space\") {\n if (!isSpacebarPanning && !toggledPanMode) return;\n isSpacebarPanning = false;\n toggledPanMode = false;\n options.onPanModeChange?.(false);\n if (typeof document !== \"undefined\") {\n document.body.classList.remove(\"cursor-grab\");\n }\n }\n }\n function handleWheel(event) {\n if (event.ctrlKey && !trackpadDetected) {\n trackpadDetected = true;\n options.onTrackpadDetected?.();\n }\n }\n function attachListeners(target) {\n const el = target ?? options.targetElement ?? (typeof window !== \"undefined\" ? window : null);\n if (!el) return () => {\n };\n el.addEventListener(\"keydown\", handleKeyDown);\n el.addEventListener(\"keyup\", handleKeyUp);\n el.addEventListener(\"wheel\", handleWheel, { passive: true });\n return () => {\n el.removeEventListener(\"keydown\", handleKeyDown);\n el.removeEventListener(\"keyup\", handleKeyUp);\n el.removeEventListener(\"wheel\", handleWheel);\n if (typeof document !== \"undefined\") {\n document.body.classList.remove(\"cursor-grab\");\n }\n };\n }\n return {\n get isSpacebarPanning() {\n return isSpacebarPanning;\n },\n get trackpadDetected() {\n return trackpadDetected;\n },\n attachListeners,\n destroy: attachListeners()\n };\n}\nexport const defaultSvelteFlowPreset = {\n snapGrid: [25, 25],\n panOnDrag: [0, 1, 2, 3, 4],\n panOnScroll: false,\n selectionOnDrag: false,\n colorMode: \"system\",\n multiSelectionKey: [\"Shift\", \"Meta\"]\n};\nexport const miroCompatiblePreset = {\n ...defaultSvelteFlowPreset,\n panOnDrag: [1, 2],\n selectionOnDrag: true\n};\nexport function restorePanelPointerEvents(panelSelector = \".svelte-flow__panel\") {\n if (typeof document === \"undefined\") return;\n const panels = document.querySelectorAll(panelSelector);\n panels.forEach((panel) => {\n panel.style.pointerEvents = \"auto\";\n });\n}\n","import { cubicOut } from 'svelte/easing';\nimport type { XYPosition } from '@xyflow/svelte';\nimport type {\n\tCanvasNode,\n\tFanOutTrajectoryOptions,\n\tNodeTransition,\n\tTrajectoryFunction,\n\tTrajectoryPoint\n} from './types.js';\n\n/**\n * Standard linear trajectory: straight line interpolation with linear scale & opacity progression.\n */\nexport const linearTrajectory: TrajectoryFunction = (\n\torigin: XYPosition,\n\ttarget: XYPosition,\n\tprogress: number\n): TrajectoryPoint => {\n\treturn {\n\t\tposition: {\n\t\t\tx: origin.x + (target.x - origin.x) * progress,\n\t\t\ty: origin.y + (target.y - origin.y) * progress\n\t\t},\n\t\tscale: progress,\n\t\topacity: Math.min(1, progress * 1.5)\n\t};\n};\n\n/**\n * Linear position trajectory: pure position interpolation without altering scale or opacity.\n * Used for displaced sibling nodes to ensure their visibility remains unaltered.\n */\nexport const linearPositionTrajectory: TrajectoryFunction = (\n\torigin: XYPosition,\n\ttarget: XYPosition,\n\tprogress: number\n): TrajectoryPoint => {\n\treturn {\n\t\tposition: {\n\t\t\tx: origin.x + (target.x - origin.x) * progress,\n\t\t\ty: origin.y + (target.y - origin.y) * progress\n\t\t}\n\t};\n};\n\n/**\n * Creates a fan-out trajectory where nodes arc outward from origin to target.\n * Matches the curved distribution shown in multi-node branching diagrams.\n */\nexport function createFanOutTrajectory(options: FanOutTrajectoryOptions = {}): TrajectoryFunction {\n\tconst {\n\t\tcurvature = 0.4,\n\t\tstartScale = 0,\n\t\tendScale = 1,\n\t\tstartOpacity = 0,\n\t\tendOpacity = 1\n\t} = options;\n\n\treturn (\n\t\torigin: XYPosition,\n\t\ttarget: XYPosition,\n\t\tprogress: number,\n\t\tindex: number,\n\t\ttotal: number\n\t): TrajectoryPoint => {\n\t\tconst dx = target.x - origin.x;\n\t\tconst dy = target.y - origin.y;\n\n\t\t// Normalized index from -1 (top) to +1 (bottom)\n\t\tconst normIndex = total > 1 ? (index - (total - 1) / 2) / ((total - 1) / 2) : 0;\n\n\t\t// Perpendicular control point offset to create smooth fan arc\n\t\tconst midX = origin.x + dx * 0.4;\n\t\tconst midY = origin.y + dy * 0.1 - normIndex * Math.abs(dx) * 0.15 * curvature;\n\n\t\t// Quadratic Bezier interpolation: B(t) = (1-t)^2 * P0 + 2(1-t)t * P1 + t^2 * P2\n\t\tconst t = progress;\n\t\tconst oneMinusT = 1 - t;\n\n\t\tconst x = oneMinusT * oneMinusT * origin.x + 2 * oneMinusT * t * midX + t * t * target.x;\n\t\tconst y = oneMinusT * oneMinusT * origin.y + 2 * oneMinusT * t * midY + t * t * target.y;\n\n\t\tconst scale = startScale + (endScale - startScale) * progress;\n\t\tconst opacity = startOpacity + (endOpacity - startOpacity) * progress;\n\n\t\treturn {\n\t\t\tposition: { x, y },\n\t\t\tscale,\n\t\t\topacity\n\t\t};\n\t};\n}\n\n/**\n * Creates a custom quadratic Bezier trajectory with a specified or dynamically calculated control point.\n */\nexport function createBezierTrajectory(\n\tgetControlPoint: (origin: XYPosition, target: XYPosition) => XYPosition\n): TrajectoryFunction {\n\treturn (origin: XYPosition, target: XYPosition, progress: number): TrajectoryPoint => {\n\t\tconst cp = getControlPoint(origin, target);\n\t\tconst t = progress;\n\t\tconst oneMinusT = 1 - t;\n\n\t\tconst x = oneMinusT * oneMinusT * origin.x + 2 * oneMinusT * t * cp.x + t * t * target.x;\n\t\tconst y = oneMinusT * oneMinusT * origin.y + 2 * oneMinusT * t * cp.y + t * t * target.y;\n\n\t\treturn {\n\t\t\tposition: { x, y },\n\t\t\tscale: progress,\n\t\t\topacity: progress\n\t\t};\n\t};\n}\n\n/**\n * Coordinates and animates multiple node transitions simultaneously with zero per-frame array allocations.\n * Directly mutates node positions and data (scale, opacity) in-place during the animation loop.\n */\nexport function runMultiNodeTransition<TNode extends CanvasNode = CanvasNode>(\n\ttransitions: NodeTransition<TNode>[],\n\toptions: {\n\t\tdefaultDuration?: number;\n\t\tdefaultEasing?: (t: number) => number;\n\t\tonUpdate?: () => void;\n\t\tonComplete?: () => void;\n\t} = {}\n): () => void {\n\tif (transitions.length === 0) {\n\t\toptions.onComplete?.();\n\t\treturn () => {};\n\t}\n\n\tconst { defaultDuration = 400, defaultEasing = cubicOut, onUpdate, onComplete } = options;\n\n\tlet isCancelled = false;\n\tconst startTime = Date.now();\n\n\tconst items = transitions.map((tr, i) => ({\n\t\t...tr,\n\t\tindex: tr.index ?? i,\n\t\ttotal: tr.total ?? transitions.length,\n\t\tduration: tr.duration ?? defaultDuration,\n\t\teasing: tr.easing ?? defaultEasing,\n\t\tdelay: tr.delay ?? 0,\n\t\ttrajectory: tr.trajectory ?? linearTrajectory\n\t}));\n\n\tfunction frame() {\n\t\tif (isCancelled) return;\n\n\t\tconst now = Date.now();\n\t\tlet allCompleted = true;\n\n\t\tfor (let i = 0; i < items.length; i++) {\n\t\t\tconst item = items[i];\n\t\t\tconst elapsed = now - (startTime + item.delay);\n\n\t\t\tif (elapsed < 0) {\n\t\t\t\tallCompleted = false;\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tconst rawProgress = item.duration <= 0 ? 1 : Math.min(elapsed / item.duration, 1);\n\t\t\tconst progress = item.duration <= 0 ? 1 : item.easing(rawProgress);\n\n\t\t\tconst point = item.trajectory(item.from, item.to, progress, item.index, item.total);\n\n\t\t\t// Direct in-place mutation avoids array reconstruction during RAF\n\t\t\titem.node.position = { ...point.position };\n\n\t\t\tif (point.scale !== undefined || point.opacity !== undefined) {\n\t\t\t\tif (!item.node.data) {\n\t\t\t\t\titem.node.data = {} as any;\n\t\t\t\t}\n\t\t\t\tif (point.scale !== undefined) {\n\t\t\t\t\t(item.node.data as any).scale = point.scale;\n\t\t\t\t}\n\t\t\t\tif (point.opacity !== undefined) {\n\t\t\t\t\t(item.node.data as any).opacity = point.opacity;\n\t\t\t\t\tconst currentStyle = (item.node.style || '').replace(/opacity:\\s*[^;]+;?/g, '').trim();\n\t\t\t\t\titem.node.style = `${currentStyle ? currentStyle + '; ' : ''}opacity: ${point.opacity};`;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (rawProgress < 1) {\n\t\t\t\tallCompleted = false;\n\t\t\t}\n\t\t}\n\n\t\tonUpdate?.();\n\n\t\tif (!allCompleted) {\n\t\t\tif (typeof requestAnimationFrame !== 'undefined') {\n\t\t\t\trequestAnimationFrame(frame);\n\t\t\t}\n\t\t} else {\n\t\t\tonComplete?.();\n\t\t}\n\t}\n\n\tframe();\n\n\treturn () => {\n\t\tisCancelled = true;\n\t};\n}\n","import dagre from '@dagrejs/dagre';\nimport type { Rect, XYPosition } from '@xyflow/svelte';\nimport type {\n\tCanvasEdge,\n\tCanvasLayoutOptions,\n\tCanvasNode,\n\tDirectionalDisplacementOptions\n} from './types.js';\n\n/**\n * Calculates a bounding rectangle for a set of nodes if not provided by getNodesBounds.\n */\nexport function computeNodesBoundingBox<TNode extends CanvasNode = CanvasNode>(\n\tnodes: TNode[],\n\tdefaultWidth = 200,\n\tdefaultHeight = 60\n): Rect {\n\tif (nodes.length === 0) {\n\t\treturn { x: 0, y: 0, width: 0, height: 0 };\n\t}\n\n\tlet minX = Infinity;\n\tlet minY = Infinity;\n\tlet maxX = -Infinity;\n\tlet maxY = -Infinity;\n\n\tfor (const node of nodes) {\n\t\tconst width = node.measured?.width ?? (node as any).width ?? defaultWidth;\n\t\tconst height = node.measured?.height ?? (node as any).height ?? defaultHeight;\n\n\t\tminX = Math.min(minX, node.position.x);\n\t\tminY = Math.min(minY, node.position.y);\n\t\tmaxX = Math.max(maxX, node.position.x + width);\n\t\tmaxY = Math.max(maxY, node.position.y + height);\n\t}\n\n\treturn {\n\t\tx: minX,\n\t\ty: minY,\n\t\twidth: maxX - minX,\n\t\theight: maxY - minY\n\t};\n}\n\n/**\n * Pure directional displacement calculation.\n * Shifts downstream or surrounding nodes along an axis to clear space for newly inserted child nodes.\n */\nexport function calculateDirectionalDisplacement<TNode extends CanvasNode = CanvasNode>(params: {\n\texistingNodes: TNode[];\n\toriginNode: TNode;\n\tchildNodes: TNode[];\n\tgetNodesBounds?: (nodes: TNode[]) => Rect;\n\toptions?: DirectionalDisplacementOptions;\n}): Map<string, XYPosition> {\n\tconst {\n\t\texistingNodes,\n\t\toriginNode,\n\t\tchildNodes,\n\t\tgetNodesBounds,\n\t\toptions = {}\n\t} = params;\n\n\tconst {\n\t\tdirection = 'right',\n\t\tgap = 40,\n\t\tspreadSiblingLanes = false,\n\t\tsiblingTolerance = 50,\n\t\tminY\n\t} = options;\n\n\tconst displacedMap = new Map<string, XYPosition>();\n\tif (childNodes.length === 0 || existingNodes.length === 0) {\n\t\treturn displacedMap;\n\t}\n\n\tconst childBounds = getNodesBounds\n\t\t? getNodesBounds(childNodes)\n\t\t: computeNodesBoundingBox(childNodes);\n\n\tconst originWidth = originNode.measured?.width ?? (originNode as any).width ?? 200;\n\tconst originHeight = originNode.measured?.height ?? (originNode as any).height ?? 60;\n\n\t// The delta space required along primary axis\n\tconst deltaPrimary = (direction === 'right' || direction === 'left')\n\t\t? childBounds.width + gap\n\t\t: childBounds.height + gap;\n\n\t// Vertical displacement parameters: upward and downward row clearance\n\tconst deltaUp = Math.max(0, originNode.position.y - childBounds.y + gap);\n\tconst deltaDown = Math.max(\n\t\t0,\n\t\tchildBounds.y + childBounds.height - (originNode.position.y + originHeight) + gap\n\t);\n\n\t// Both above and below displace equally so the row expands symmetrically\n\tconst equalDelta = Math.max(deltaUp, deltaDown);\n\n\tfor (const node of existingNodes) {\n\t\tif (node.id === originNode.id) continue;\n\n\t\tlet newX = node.position.x;\n\t\tlet newY = node.position.y;\n\t\tlet moved = false;\n\n\t\tif (direction === 'right') {\n\t\t\t// Downstream nodes strictly to the right of the origin\n\t\t\tif (node.position.x >= originNode.position.x + originWidth * 0.5) {\n\t\t\t\tnewX += deltaPrimary;\n\t\t\t\tmoved = true;\n\t\t\t} else if (spreadSiblingLanes) {\n\t\t\t\t// Sibling nodes occupying the same vertical space as the exploded cluster\n\t\t\t\tconst isVerticallyOverlapping =\n\t\t\t\t\tnode.position.y + ((node as any).height ?? 60) >= childBounds.y - gap &&\n\t\t\t\t\tnode.position.y <= childBounds.y + childBounds.height + gap;\n\n\t\t\t\tif (isVerticallyOverlapping && Math.abs(node.position.x - originNode.position.x) <= siblingTolerance) {\n\t\t\t\t\tconst pushDirection = node.position.y >= originNode.position.y ? 1 : -1;\n\t\t\t\t\tnewY += pushDirection * (childBounds.height * 0.5 + gap);\n\t\t\t\t\tmoved = true;\n\t\t\t\t}\n\t\t\t}\n\t\t} else if (direction === 'left') {\n\t\t\tif (node.position.x <= originNode.position.x) {\n\t\t\t\tnewX -= deltaPrimary;\n\t\t\t\tmoved = true;\n\t\t\t}\n\t\t} else if (direction === 'down') {\n\t\t\tif (node.position.y >= originNode.position.y + originHeight * 0.5) {\n\t\t\t\tnewY += deltaPrimary;\n\t\t\t\tmoved = true;\n\t\t\t}\n\t\t} else if (direction === 'up') {\n\t\t\tif (node.position.y <= originNode.position.y) {\n\t\t\t\tnewY -= deltaPrimary;\n\t\t\t\tmoved = true;\n\t\t\t}\n\t\t} else if (direction === 'vertical') {\n\t\t\t// Row grows vertically:\n\t\t\t// Nodes strictly above the origin node move up by equalDelta\n\t\t\t// Nodes strictly below the origin node move down by equalDelta\n\t\t\t// Both above and below displace equally; horizontal position (x) is strictly preserved\n\t\t\tif (node.position.y < originNode.position.y) {\n\t\t\t\tif (equalDelta > 0) {\n\t\t\t\t\tnewY -= equalDelta;\n\t\t\t\t\tmoved = true;\n\t\t\t\t}\n\t\t\t} else if (node.position.y >= originNode.position.y + originHeight * 0.5) {\n\t\t\t\tif (equalDelta > 0) {\n\t\t\t\t\tnewY += equalDelta;\n\t\t\t\t\tmoved = true;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tif (moved) {\n\t\t\tdisplacedMap.set(node.id, { x: newX, y: newY });\n\t\t}\n\t}\n\n\treturn displacedMap;\n}\n\n/**\n * Pure hierarchical Dagre reflow displacement calculation.\n * Calculates new coordinates for surrounding nodes using Dagre hierarchical layout,\n * anchoring the origin node at its current position to eliminate layout jumping.\n */\nexport function calculateReflowDisplacement<\n\tTNode extends CanvasNode = CanvasNode,\n\tTEdge extends CanvasEdge = CanvasEdge\n>(params: {\n\texistingNodes: TNode[];\n\texistingEdges: TEdge[];\n\toriginNode: TNode;\n\tchildNodes: TNode[];\n\tchildEdges?: TEdge[];\n\tgetNodesBounds?: (nodes: TNode[]) => Rect;\n\toptions?: CanvasLayoutOptions;\n}): Map<string, XYPosition> {\n\tconst {\n\t\texistingNodes,\n\t\texistingEdges,\n\t\toriginNode,\n\t\tchildNodes,\n\t\tchildEdges = [],\n\t\toptions = {}\n\t} = params;\n\n\tconst {\n\t\tdirection = 'LR',\n\t\tranksep = 80,\n\t\tnodesep = 30,\n\t\tdefaultNodeWidth = 200,\n\t\tdefaultNodeHeight = 60\n\t} = options;\n\n\tconst displacedMap = new Map<string, XYPosition>();\n\tif (existingNodes.length === 0) return displacedMap;\n\n\tconst allNodes = [...existingNodes, ...childNodes];\n\tconst allEdges = [...existingEdges, ...childEdges];\n\n\tconst dagreGraph = new dagre.graphlib.Graph();\n\tdagreGraph.setDefaultEdgeLabel(() => ({}));\n\tdagreGraph.setGraph({ rankdir: direction, ranksep, nodesep });\n\n\tconst allNodeIds = new Set(allNodes.map((n) => n.id));\n\n\tallNodes.forEach((node) => {\n\t\tconst nodeWidth = node.measured?.width ?? (node as any).width ?? defaultNodeWidth;\n\t\tconst nodeHeight = node.measured?.height ?? (node as any).height ?? defaultNodeHeight;\n\t\tdagreGraph.setNode(node.id, { width: nodeWidth, height: nodeHeight });\n\t});\n\n\tallEdges.forEach((edge) => {\n\t\tif (allNodeIds.has(edge.source) && allNodeIds.has(edge.target)) {\n\t\t\tdagreGraph.setEdge(edge.source, edge.target);\n\t\t}\n\t});\n\n\tdagre.layout(dagreGraph);\n\n\tconst dagreOrigin = dagreGraph.node(originNode.id);\n\tif (!dagreOrigin) return displacedMap;\n\n\tconst originWidth = originNode.measured?.width ?? (originNode as any).width ?? defaultNodeWidth;\n\tconst originHeight = originNode.measured?.height ?? (originNode as any).height ?? defaultNodeHeight;\n\n\t// Calculate offset so origin node remains anchored at its exact initial coordinates\n\tconst anchorOffsetX = originNode.position.x - (dagreOrigin.x - originWidth / 2);\n\tconst anchorOffsetY = originNode.position.y - (dagreOrigin.y - originHeight / 2);\n\n\texistingNodes.forEach((node) => {\n\t\tif (node.id === originNode.id) return;\n\n\t\tconst dagreNode = dagreGraph.node(node.id);\n\t\tif (!dagreNode) return;\n\n\t\tconst nodeWidth = node.measured?.width ?? (node as any).width ?? defaultNodeWidth;\n\t\tconst nodeHeight = node.measured?.height ?? (node as any).height ?? defaultNodeHeight;\n\n\t\tconst targetX = dagreNode.x - nodeWidth / 2 + anchorOffsetX;\n\t\tconst targetY = dagreNode.y - nodeHeight / 2 + anchorOffsetY;\n\n\t\t// Only include if position actually shifted\n\t\tif (Math.abs(targetX - node.position.x) > 0.5 || Math.abs(targetY - node.position.y) > 0.5) {\n\t\t\tdisplacedMap.set(node.id, { x: targetX, y: targetY });\n\t\t}\n\t});\n\n\treturn displacedMap;\n}\n","import { cubicOut } from \"svelte/easing\";\nimport {\n calculateDirectionalDisplacement,\n calculateReflowDisplacement\n} from \"./createCanvasDisplacement.js\";\nimport {\n createFanOutTrajectory,\n linearPositionTrajectory,\n runMultiNodeTransition\n} from \"./createCanvasTrajectory.js\";\nexport function createCanvasExplosion(graph, options = {}) {\n let explodedNodeIds = $state([]);\n const snapshots = /* @__PURE__ */ new Map();\n let activeAnimationCancel = null;\n function isExploded(nodeId) {\n return explodedNodeIds.includes(nodeId);\n }\n function explodeNode(parentId, explodeOptions) {\n if (isExploded(parentId)) {\n return false;\n }\n const parentNode = graph.nodes.find((n) => n.id === parentId);\n if (!parentNode) {\n return false;\n }\n const {\n childNodes,\n childEdges = [],\n connectParentToChildren = \"all\",\n displacementStrategy = \"directional\",\n directionalOptions = {},\n reflowOptions = {},\n trajectory,\n duration = 500,\n staggerDelay = 20,\n easing = cubicOut,\n onComplete\n } = explodeOptions;\n if (childNodes.length === 0) {\n return false;\n }\n let displacementMap;\n if (displacementStrategy === \"dagre\") {\n displacementMap = calculateReflowDisplacement({\n existingNodes: graph.nodes,\n existingEdges: graph.edges,\n originNode: parentNode,\n childNodes,\n childEdges,\n getNodesBounds: options.getNodesBounds,\n options: {\n ...reflowOptions,\n direction: reflowOptions.direction ?? \"LR\"\n }\n });\n } else if (displacementStrategy === \"none\") {\n displacementMap = /* @__PURE__ */ new Map();\n } else {\n displacementMap = calculateDirectionalDisplacement({\n existingNodes: graph.nodes,\n originNode: parentNode,\n childNodes,\n getNodesBounds: options.getNodesBounds,\n options: directionalOptions\n });\n }\n const displacedNodesSnapshot = Array.from(displacementMap.entries()).map(([id]) => {\n const node = graph.nodes.find((n) => n.id === id);\n return {\n id,\n originalPosition: { ...node?.position ?? { x: 0, y: 0 } }\n };\n });\n const edgesToAdd = [...childEdges];\n const defaultCreateEdge = (sourceId, targetId) => {\n if (graph.createEdge) {\n return graph.createEdge(sourceId, targetId);\n }\n return {\n id: crypto.randomUUID(),\n type: \"default\",\n source: sourceId,\n target: targetId\n };\n };\n if (connectParentToChildren === \"all\" || connectParentToChildren === true) {\n childNodes.forEach((child) => {\n const exists = edgesToAdd.some((e) => e.source === parentId && e.target === child.id);\n if (!exists) {\n edgesToAdd.push(defaultCreateEdge(parentId, child.id));\n }\n });\n } else if (connectParentToChildren === \"first\" && childNodes.length > 0) {\n const firstChild = childNodes[0];\n const exists = edgesToAdd.some((e) => e.source === parentId && e.target === firstChild.id);\n if (!exists) {\n edgesToAdd.push(defaultCreateEdge(parentId, firstChild.id));\n }\n }\n const snapshot = {\n parentId,\n childNodeIds: childNodes.map((n) => n.id),\n childEdgeIds: edgesToAdd.map((e) => e.id),\n displacedNodes: displacedNodesSnapshot,\n timestamp: Date.now()\n };\n snapshots.set(parentId, snapshot);\n const originPos = { ...parentNode.position };\n const targetPositions = childNodes.map((child) => ({ ...child.position }));\n childNodes.forEach((child) => {\n child.position = { ...originPos };\n if (!child.data) child.data = {};\n child.data.scale = 0;\n child.data.opacity = 0;\n const currentStyle = (child.style || \"\").replace(/opacity:\\s*[^;]+;?/g, \"\").trim();\n child.style = `${currentStyle ? currentStyle + \"; \" : \"\"}opacity: 0;`;\n });\n edgesToAdd.forEach((edge) => {\n const currentStyle = (edge.style || \"\").replace(/opacity:\\s*[^;]+;?/g, \"\").trim();\n edge.style = `${currentStyle ? currentStyle + \"; \" : \"\"}opacity: 0;`;\n });\n graph.addNodeOrNodes(childNodes, void 0, false);\n if (edgesToAdd.length > 0) {\n graph.addEdges(edgesToAdd, false);\n }\n const chosenTrajectory = trajectory ?? createFanOutTrajectory({ curvature: 0.35 });\n const transitions = [];\n const effectiveStagger = duration === 0 ? 0 : staggerDelay;\n childNodes.forEach((child, i) => {\n transitions.push({\n node: child,\n from: originPos,\n to: targetPositions[i],\n trajectory: chosenTrajectory,\n delay: i * effectiveStagger,\n duration,\n easing,\n index: i,\n total: childNodes.length\n });\n });\n displacementMap.forEach((targetPos, nodeId) => {\n const node = graph.nodes.find((n) => n.id === nodeId);\n if (node) {\n transitions.push({\n node,\n from: { ...node.position },\n to: targetPos,\n trajectory: linearPositionTrajectory,\n duration,\n easing\n });\n }\n });\n if (activeAnimationCancel) {\n activeAnimationCancel();\n }\n activeAnimationCancel = runMultiNodeTransition(transitions, {\n defaultDuration: duration,\n defaultEasing: easing,\n onUpdate: () => {\n if (edgesToAdd.length > 0) {\n const childIdSet = new Set(childNodes.map((c) => c.id));\n const childEdgesInGraph = graph.edges.filter((e) => childIdSet.has(e.target));\n if (childEdgesInGraph.length > 0) {\n childEdgesInGraph.forEach((edge) => {\n const child = childNodes.find((c) => c.id === edge.target);\n const childOpacity = child?.data?.opacity ?? 1;\n const currentStyle = (edge.style || \"\").replace(/opacity:\\s*[^;]+;?/g, \"\").trim();\n edge.style = `${currentStyle ? currentStyle + \"; \" : \"\"}opacity: ${childOpacity};`;\n });\n graph.setEdges([...graph.edges]);\n }\n }\n transitions.forEach((t) => {\n const graphNode = graph.nodes.find((n) => n.id === t.node.id);\n if (graphNode && graphNode !== t.node) {\n graphNode.position = { ...t.node.position };\n graphNode.style = t.node.style;\n if (t.node.data) {\n graphNode.data = { ...graphNode.data, ...t.node.data };\n }\n }\n });\n graph.setNodes([...graph.nodes]);\n },\n onComplete: () => {\n childNodes.forEach((child, i) => {\n const node = graph.nodes.find((n) => n.id === child.id);\n if (node) {\n node.position = { ...targetPositions[i] };\n node.style = (node.style || \"\").replace(/opacity:\\s*[^;]+;?/g, \"\").trim() || void 0;\n if (node.data) {\n node.data.opacity = 1;\n }\n }\n });\n displacementMap.forEach((targetPos, nodeId) => {\n const graphNode = graph.nodes.find((n) => n.id === nodeId);\n if (graphNode) {\n graphNode.position = { ...targetPos };\n }\n });\n edgesToAdd.forEach((edge) => {\n const graphEdge = graph.edges.find((e) => e.id === edge.id);\n if (graphEdge) {\n graphEdge.style = (graphEdge.style || \"\").replace(/opacity:\\s*[^;]+;?/g, \"\").trim() || void 0;\n }\n });\n graph.setNodes([...graph.nodes]);\n graph.setEdges([...graph.edges]);\n explodedNodeIds = [...explodedNodeIds, parentId];\n activeAnimationCancel = null;\n options.onSave?.();\n graph.onSave?.();\n onComplete?.();\n }\n });\n return true;\n }\n function collapseNode(parentId, collapseOptions = {}) {\n const snapshot = snapshots.get(parentId);\n if (!snapshot) {\n return false;\n }\n const parentNode = graph.nodes.find((n) => n.id === parentId);\n if (!parentNode) {\n return false;\n }\n const {\n duration = 400,\n staggerDelay = 15,\n easing = cubicOut,\n trajectory,\n onComplete\n } = collapseOptions;\n const childIdSet = new Set(snapshot.childNodeIds);\n const activeChildNodes = graph.nodes.filter((n) => childIdSet.has(n.id));\n const originPos = { ...parentNode.position };\n const reverseTrajectory = trajectory ?? createFanOutTrajectory({\n curvature: 0.2,\n startScale: 1,\n endScale: 0,\n startOpacity: 1,\n endOpacity: 0\n });\n const transitions = [];\n const effectiveStagger = duration === 0 ? 0 : staggerDelay;\n activeChildNodes.forEach((child, i) => {\n transitions.push({\n node: child,\n from: { ...child.position },\n to: originPos,\n trajectory: reverseTrajectory,\n delay: (activeChildNodes.length - 1 - i) * effectiveStagger,\n duration,\n easing,\n index: i,\n total: activeChildNodes.length\n });\n });\n snapshot.displacedNodes.forEach(({ id, originalPosition }) => {\n const node = graph.nodes.find((n) => n.id === id);\n if (node) {\n transitions.push({\n node,\n from: { ...node.position },\n to: originalPosition,\n trajectory: linearPositionTrajectory,\n duration,\n easing\n });\n }\n });\n if (activeAnimationCancel) {\n activeAnimationCancel();\n }\n activeAnimationCancel = runMultiNodeTransition(transitions, {\n defaultDuration: duration,\n defaultEasing: easing,\n onUpdate: () => {\n const edgeIdSet = new Set(snapshot.childEdgeIds);\n const childEdgesInGraph = graph.edges.filter((e) => edgeIdSet.has(e.id));\n if (childEdgesInGraph.length > 0) {\n childEdgesInGraph.forEach((edge) => {\n const child = activeChildNodes.find((c) => c.id === edge.target);\n const childOpacity = child?.data?.opacity ?? 0;\n const currentStyle = (edge.style || \"\").replace(/opacity:\\s*[^;]+;?/g, \"\").trim();\n edge.style = `${currentStyle ? currentStyle + \"; \" : \"\"}opacity: ${childOpacity};`;\n });\n graph.setEdges([...graph.edges]);\n }\n transitions.forEach((t) => {\n const graphNode = graph.nodes.find((n) => n.id === t.node.id);\n if (graphNode && graphNode !== t.node) {\n graphNode.position = { ...t.node.position };\n graphNode.style = t.node.style;\n if (t.node.data) {\n graphNode.data = { ...graphNode.data, ...t.node.data };\n }\n }\n });\n graph.setNodes([...graph.nodes]);\n },\n onComplete: () => {\n graph.removeNodes(activeChildNodes, false);\n const edgeIdSet = new Set(snapshot.childEdgeIds);\n const edgesToRemove = graph.edges.filter((e) => edgeIdSet.has(e.id));\n if (edgesToRemove.length > 0) {\n graph.removeEdges(edgesToRemove, false);\n }\n snapshot.displacedNodes.forEach(({ id, originalPosition }) => {\n const graphNode = graph.nodes.find((n) => n.id === id);\n if (graphNode) {\n graphNode.position = { ...originalPosition };\n }\n });\n graph.setNodes([...graph.nodes]);\n snapshots.delete(parentId);\n explodedNodeIds = explodedNodeIds.filter((id) => id !== parentId);\n activeAnimationCancel = null;\n options.onSave?.();\n graph.onSave?.();\n onComplete?.();\n }\n });\n return true;\n }\n function toggleExplode(parentId, explodeOptions, collapseOptions) {\n if (isExploded(parentId)) {\n return collapseNode(parentId, collapseOptions);\n }\n return explodeNode(parentId, explodeOptions);\n }\n function getSnapshot(parentId) {\n return snapshots.get(parentId);\n }\n return {\n get explodedNodeIds() {\n return explodedNodeIds;\n },\n isExploded,\n explodeNode,\n collapseNode,\n toggleExplode,\n getSnapshot\n };\n}\n","import { untrack } from \"svelte\";\nexport function preserveNodeMeasurements(newNodes, existingNodes) {\n const map = existingNodes instanceof Map ? existingNodes : new Map(existingNodes.map((n) => [n.id, n]));\n for (const node of newNodes) {\n const prev = map.get(node.id);\n if (prev && prev.measured) {\n node.measured = { ...prev.measured };\n }\n }\n return newNodes;\n}\nexport function normalizeNodeHandles(node, handles = []) {\n node.handles = handles;\n return node;\n}\nexport function createCanvasNodeSync(options) {\n let nodes = $state([]);\n let edges = $state([]);\n $effect.pre(() => {\n const rawItems = options.items();\n const existingNodesMap = untrack(() => new Map(nodes.map((n) => [n.id, n])));\n const newNodes = rawItems.map((item, index) => {\n const existing = existingNodesMap.get(item?.id);\n const node = options.toNode(item, index, {\n existingNode: existing,\n prevNodesMap: existingNodesMap\n });\n if (existing && existing.measured && !node.measured) {\n node.measured = { ...existing.measured };\n }\n if (options.defaultHandles && !node.handles) {\n const handles = options.defaultHandles(node);\n if (handles) {\n node.handles = handles;\n }\n }\n return node;\n });\n const newEdges = options.toEdges ? options.toEdges(rawItems, newNodes) : [];\n nodes = newNodes;\n edges = newEdges;\n });\n return {\n get nodes() {\n return nodes;\n },\n set nodes(value) {\n nodes = value;\n },\n get edges() {\n return edges;\n },\n set edges(value) {\n edges = value;\n },\n updateNodeMeasurements(id, width, height) {\n const node = nodes.find((n) => n.id === id);\n if (node) {\n node.measured = { width, height };\n }\n }\n };\n}\n","export function createCanvasMultiDrag(options = {}) {\n const stepX = options.stackOffsetStepX ?? 4;\n const stepY = options.stackOffsetStepY ?? 4;\n const angles = options.rotationAngles ?? [-2, 2.5, -3, 3];\n const baseZIndex = options.baseZIndex ?? 50;\n let dragState = $state(null);\n function startMultiDrag(leadNodeId, selectedNodeIds, nodes) {\n const selectedSet = selectedNodeIds instanceof Set ? selectedNodeIds : new Set(selectedNodeIds);\n if (selectedSet.size <= 1 || !selectedSet.has(leadNodeId)) {\n dragState = null;\n return null;\n }\n const nodeMap = nodes instanceof Map ? nodes : new Map(nodes.map((n) => [n.id, n]));\n const leadNode = nodeMap.get(leadNodeId);\n if (!leadNode) {\n dragState = null;\n return null;\n }\n const leadPos = leadNode.position ?? { x: 0, y: 0 };\n const offsets = {};\n let followerIndex = 0;\n for (const id of selectedSet) {\n if (id === leadNodeId) continue;\n const follower = nodeMap.get(id);\n const fPos = follower?.position ?? { x: 0, y: 0 };\n const angle = angles[followerIndex % angles.length];\n offsets[id] = {\n deltaX: fPos.x - leadPos.x,\n deltaY: fPos.y - leadPos.y,\n originalPosition: { ...fPos },\n stackOffsetX: (followerIndex + 1) * stepX,\n stackOffsetY: (followerIndex + 1) * stepY,\n rotationDeg: angle\n };\n followerIndex++;\n }\n const state = {\n leadId: leadNodeId,\n offsets,\n count: selectedSet.size\n };\n dragState = state;\n return state;\n }\n function getFollowerTransform(nodeId) {\n if (!dragState || !(nodeId in dragState.offsets)) {\n return {\n isFollower: false,\n stackOffsetX: 0,\n stackOffsetY: 0,\n rotationDeg: 0,\n zIndex: 0\n };\n }\n const offset = dragState.offsets[nodeId];\n const followerKeys = Object.keys(dragState.offsets);\n const index = followerKeys.indexOf(nodeId);\n return {\n isFollower: true,\n stackOffsetX: offset.stackOffsetX,\n stackOffsetY: offset.stackOffsetY,\n rotationDeg: offset.rotationDeg,\n zIndex: baseZIndex - (index + 1)\n };\n }\n function cancelMultiDrag(applyRestore) {\n if (!dragState) return [];\n const restores = Object.entries(dragState.offsets).map(([id, offset]) => ({\n id,\n originalPosition: { ...offset.originalPosition }\n }));\n if (applyRestore) {\n applyRestore(restores);\n }\n dragState = null;\n return restores;\n }\n function commitMultiDrag() {\n dragState = null;\n }\n return {\n get dragState() {\n return dragState;\n },\n get isMultiDrag() {\n return Boolean(dragState && dragState.count > 1);\n },\n get count() {\n return dragState ? dragState.count : 0;\n },\n get leadId() {\n return dragState?.leadId ?? null;\n },\n startMultiDrag,\n getFollowerTransform,\n cancelMultiDrag,\n commitMultiDrag\n };\n}\n","export function getMarqueeSelectionPreset(options = {}) {\n const isSpacebarPanning = options.isSpacebarPanning ?? false;\n return {\n snapGrid: [25, 25],\n panOnDrag: isSpacebarPanning ? [0, 1, 2] : [1, 2],\n panOnScroll: false,\n selectionOnDrag: !isSpacebarPanning,\n colorMode: \"system\",\n multiSelectionKey: options.multiSelectionKey ?? [\"Shift\", \"Meta\"],\n selectionMode: options.selectionMode ?? \"partial\"\n };\n}\nexport function handleDeselectOnEscape(event, onDeselect) {\n if (event.key === \"Escape\" || event.code === \"Escape\") {\n onDeselect();\n return true;\n }\n return false;\n}\n","import 'svelte/internal/disclose-version';\nimport * as $ from 'svelte/internal/client';\nimport { onMount } from 'svelte';\n\nvar root = $.from_html(`<div class=\"fixed bottom-0 z-50 overflow-x-auto overflow-y-hidden border-t border-border/40 bg-background/80 shadow-md backdrop-blur-sm transition-opacity duration-150\" role=\"scrollbar\" aria-orientation=\"horizontal\"><div></div></div>`);\n\nexport default function FloatingHorizontalScrollbar($$anchor, $$props) {\n\t$.push($$props, true);\n\n\tlet targetElement = $.prop($$props, 'targetElement', 7, null),\n\t\ttotalWidth = $.prop($$props, 'totalWidth', 3, 1000),\n\t\tminHeightAboveFold = $.prop($$props, 'minHeightAboveFold', 3, 80);\n\n\tlet scrollbarRef = $.state(null);\n\tlet isVisible = $.state(false);\n\tlet barLeft = $.state(0);\n\tlet barWidth = $.state(0);\n\tlet isSyncing = false;\n\n\tfunction updateMetrics() {\n\t\tif (!targetElement()) {\n\t\t\t$.set(isVisible, false);\n\n\t\t\treturn;\n\t\t}\n\n\t\tconst rect = targetElement().getBoundingClientRect();\n\t\tconst hasHorizontalOverflow = targetElement().scrollWidth > targetElement().clientWidth;\n\t\tconst isTopInView = rect.top < window.innerHeight;\n\t\tconst isBottomBelowViewport = rect.bottom > window.innerHeight;\n\t\tconst isBottomAboveTop = rect.bottom > minHeightAboveFold();\n\n\t\t// Visible only when canvas is in viewport and its natural bottom scrollbar is off-screen\n\t\tconst shouldShow = hasHorizontalOverflow && isTopInView && isBottomBelowViewport && isBottomAboveTop;\n\n\t\t$.set(isVisible, shouldShow, true);\n\n\t\tif (shouldShow) {\n\t\t\tconst left = Math.max(0, rect.left);\n\t\t\tconst right = Math.min(window.innerWidth, rect.right);\n\n\t\t\t$.set(barLeft, left, true);\n\t\t\t$.set(barWidth, Math.max(0, right - left), true);\n\n\t\t\tif ($.get(scrollbarRef) && Math.abs($.get(scrollbarRef).scrollLeft - targetElement().scrollLeft) > 1) {\n\t\t\t\tisSyncing = true;\n\t\t\t\t$.get(scrollbarRef).scrollLeft = targetElement().scrollLeft;\n\n\t\t\t\trequestAnimationFrame(() => {\n\t\t\t\t\tisSyncing = false;\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\t}\n\n\tfunction handleFloatingScroll() {\n\t\tif (!$.get(scrollbarRef) || !targetElement() || isSyncing) return;\n\n\t\tisSyncing = true;\n\t\ttargetElement().scrollLeft = $.get(scrollbarRef).scrollLeft;\n\n\t\trequestAnimationFrame(() => {\n\t\t\tisSyncing = false;\n\t\t});\n\t}\n\n\tonMount(() => {\n\t\tupdateMetrics();\n\n\t\tconst onScrollOrResize = () => {\n\t\t\tupdateMetrics();\n\t\t};\n\n\t\twindow.addEventListener('scroll', onScrollOrResize, { passive: true });\n\t\twindow.addEventListener('resize', onScrollOrResize, { passive: true });\n\n\t\tconst target = targetElement();\n\n\t\tif (target) {\n\t\t\ttarget.addEventListener('scroll', onScrollOrResize, { passive: true });\n\t\t}\n\n\t\treturn () => {\n\t\t\twindow.removeEventListener('scroll', onScrollOrResize);\n\t\t\twindow.removeEventListener('resize', onScrollOrResize);\n\n\t\t\tif (target) {\n\t\t\t\ttarget.removeEventListener('scroll', onScrollOrResize);\n\t\t\t}\n\t\t};\n\t});\n\n\t$.user_effect(() => {\n\t\t// Re-evaluate whenever targetElement or totalWidth changes\n\t\tif (targetElement()) {\n\t\t\tupdateMetrics();\n\t\t}\n\t});\n\n\tvar fragment = $.comment();\n\tvar node = $.first_child(fragment);\n\n\t{\n\t\tvar consequent = ($$anchor) => {\n\t\t\tvar div = root();\n\n\t\t\t$.set_attribute(div, 'aria-valuemin', 0);\n\n\t\t\tvar div_1 = $.only_child(div);\n\n\t\t\t$.bind_this(div, ($$value) => $.set(scrollbarRef, $$value), () => $.get(scrollbarRef));\n\n\t\t\t$.template_effect(\n\t\t\t\t($0) => {\n\t\t\t\t\t$.set_style(div, `left: ${$.get(barLeft) ?? ''}px; width: ${$.get(barWidth) ?? ''}px; height: 14px;`);\n\t\t\t\t\t$.set_attribute(div, 'aria-controls', targetElement()?.id);\n\t\t\t\t\t$.set_attribute(div, 'aria-valuenow', targetElement()?.scrollLeft ?? 0);\n\t\t\t\t\t$.set_attribute(div, 'aria-valuemax', (targetElement()?.scrollWidth ?? totalWidth()) - (targetElement()?.clientWidth ?? 0));\n\t\t\t\t\t$.set_style(div_1, `width: ${$0 ?? ''}px; height: 1px;`);\n\t\t\t\t},\n\t\t\t\t[\n\t\t\t\t\t() => Math.max(totalWidth(), targetElement()?.scrollWidth ?? 0)\n\t\t\t\t]\n\t\t\t);\n\n\t\t\t$.event('scroll', div, handleFloatingScroll);\n\t\t\t$.append($$anchor, div);\n\t\t};\n\n\t\t$.if(node, ($$render) => {\n\t\t\tif ($.get(isVisible)) $$render(consequent);\n\t\t});\n\t}\n\n\t$.append($$anchor, fragment);\n\t$.pop();\n}","import 'svelte/internal/disclose-version';\nimport * as $ from 'svelte/internal/client';\n\nvar root = $.from_html(`<span class=\"opacity-80 text-[10px]\"> </span>`);\nvar root_1 = $.from_html(`<div class=\"mt-1 max-w-xs rounded-lg bg-white/95 backdrop-blur-sm border border-slate-200 px-2.5 py-1.5 text-xs text-slate-800 shadow-lg dark:bg-slate-900/95 dark:border-slate-700 dark:text-slate-100\"> </div>`);\nvar root_2 = $.from_html(`<div class=\"absolute transition-transform duration-75 ease-out\"><svg class=\"h-5 w-5 drop-shadow-md\" viewBox=\"0 0 24 24\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\"><path d=\"M5.65376 12.3673H5.46026L5.31717 12.4976L0.500002 16.8829L0.500002 1.19841L11.7841 12.3673H5.65376Z\" stroke=\"white\" stroke-width=\"1\"></path></svg> <div class=\"mt-1 flex items-center gap-1 rounded-full px-2 py-0.5 text-xs font-medium text-white shadow-md whitespace-nowrap\"><span> </span> <!></div> <!></div>`);\nvar root_3 = $.from_html(`<div aria-hidden=\"true\"></div>`);\n\nexport default function AgentPresenceLayer($$anchor, $$props) {\n\t$.push($$props, true);\n\n\tlet presences = $.prop($$props, 'presences', 19, () => []),\n\t\tclassName = $.prop($$props, 'class', 3, '');\n\n\tvar fragment = $.comment();\n\tvar node = $.first_child(fragment);\n\n\t{\n\t\tvar consequent_3 = ($$anchor) => {\n\t\t\tvar div = root_3();\n\n\t\t\t$.each(div, 21, presences, (agent) => agent.agentId, ($$anchor, agent) => {\n\t\t\t\tvar fragment_1 = $.comment();\n\t\t\t\tvar node_1 = $.first_child(fragment_1);\n\n\t\t\t\t{\n\t\t\t\t\tvar consequent_2 = ($$anchor) => {\n\t\t\t\t\t\tvar div_1 = root_2();\n\t\t\t\t\t\tvar svg = $.child(div_1);\n\t\t\t\t\t\tvar path = $.only_child(svg);\n\t\t\t\t\t\tvar div_2 = $.sibling(svg, 2);\n\t\t\t\t\t\tvar span = $.child(div_2);\n\t\t\t\t\t\tvar text = $.only_child(span, true);\n\t\t\t\t\t\tvar node_2 = $.sibling(span, 2);\n\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tvar consequent = ($$anchor) => {\n\t\t\t\t\t\t\t\tvar span_1 = root();\n\t\t\t\t\t\t\t\tvar text_1 = $.only_child(span_1);\n\n\t\t\t\t\t\t\t\t$.template_effect(() => $.set_text(text_1, `(${$.get(agent).statusMessage ?? ''})`));\n\t\t\t\t\t\t\t\t$.append($$anchor, span_1);\n\t\t\t\t\t\t\t};\n\n\t\t\t\t\t\t\t$.if(node_2, ($$render) => {\n\t\t\t\t\t\t\t\tif ($.get(agent).statusMessage) $$render(consequent);\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t$.reset(div_2);\n\n\t\t\t\t\t\tvar node_3 = $.sibling(div_2, 2);\n\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tvar consequent_1 = ($$anchor) => {\n\t\t\t\t\t\t\t\tvar div_3 = root_1();\n\t\t\t\t\t\t\t\tvar text_2 = $.only_child(div_3, true);\n\n\t\t\t\t\t\t\t\t$.template_effect(() => $.set_text(text_2, $.get(agent).note));\n\t\t\t\t\t\t\t\t$.append($$anchor, div_3);\n\t\t\t\t\t\t\t};\n\n\t\t\t\t\t\t\t$.if(node_3, ($$render) => {\n\t\t\t\t\t\t\t\tif ($.get(agent).note) $$render(consequent_1);\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t$.reset(div_1);\n\n\t\t\t\t\t\t$.template_effect(() => {\n\t\t\t\t\t\t\t$.set_style(div_1, `transform: translate3d(${$.get(agent).cursorPosition.x ?? ''}px, ${$.get(agent).cursorPosition.y ?? ''}px, 0);`);\n\t\t\t\t\t\t\t$.set_attribute(path, 'fill', $.get(agent).color || '#3b82f6');\n\t\t\t\t\t\t\t$.set_style(div_2, `background-color: ${($.get(agent).color || '#3b82f6') ?? ''};`);\n\t\t\t\t\t\t\t$.set_text(text, $.get(agent).name);\n\t\t\t\t\t\t});\n\n\t\t\t\t\t\t$.append($$anchor, div_1);\n\t\t\t\t\t};\n\n\t\t\t\t\t$.if(node_1, ($$render) => {\n\t\t\t\t\t\tif ($.get(agent).cursorPosition) $$render(consequent_2);\n\t\t\t\t\t});\n\t\t\t\t}\n\n\t\t\t\t$.append($$anchor, fragment_1);\n\t\t\t});\n\n\t\t\t$.reset(div);\n\t\t\t$.template_effect(() => $.set_class(div, 1, `pixerate-presence agent-presence pixerate-agent-presence-layer pointer-events-none absolute inset-0 z-50 overflow-hidden ${className() ?? ''}`));\n\t\t\t$.append($$anchor, div);\n\t\t};\n\n\t\t$.if(node, ($$render) => {\n\t\t\tif (presences().length > 0) $$render(consequent_3);\n\t\t});\n\t}\n\n\t$.append($$anchor, fragment);\n\t$.pop();\n}","import {\n StreamingLayoutManager\n} from \"@pixerate/editor/canvas\";\nexport function createStreamingCanvas(options = {}) {\n let positions = $state(/* @__PURE__ */ new Map());\n const manager = new StreamingLayoutManager({\n throttleMs: options.throttleMs,\n glideDurationMs: options.glideDurationMs,\n connectedOnly: options.connectedOnly,\n clock: options.clock,\n layoutOptions: options.layoutOptions,\n onLayoutUpdated: (updated) => {\n positions = updated;\n options.onPositionsChange?.(updated);\n }\n });\n return {\n get positions() {\n return positions;\n },\n pushStreamUpdate(nodes, edges, currentPositions) {\n manager.pushStreamUpdate(nodes, edges, currentPositions);\n },\n flush(nodes, edges, currentPositions) {\n manager.flush(nodes, edges, currentPositions);\n },\n destroy() {\n manager.destroy();\n }\n };\n}\n","// Types\nexport * from './types.js';\n\n// Graph management rune & pure functions\nexport {\n\tcreateCanvasGraph,\n\tcalculateGraphDifferences,\n\treplaceNodeInGraph,\n\ttype CreateCanvasGraphOptions\n} from './createCanvasGraph.svelte.js';\n\n// Layout calculations\nexport {\n\tgetLayoutedNodes,\n\tgetCenteredNodePosition,\n\tcenterNodes,\n\tensureLayout,\n\tplaceBeside,\n\testimateNodeSize,\n\tflowSide\n} from './createCanvasLayout.js';\n\n// Clipboard rune & helpers\nexport {\n\tcreateCanvasClipboard,\n\tisEventFromTextInput,\n\tisValidCanvasNode,\n\tisValidUrl,\n\ttype CreateCanvasClipboardOptions\n} from './createCanvasClipboard.svelte.js';\n\n// Docking & drag interactions rune\nexport {\n\tcreateCanvasDocking,\n\ttype CreateCanvasDockingOptions,\n\ttype DockStrategy\n} from './createCanvasDocking.svelte.js';\n\n// Shortcuts manager\nexport {\n\tcreateCanvasShortcuts\n} from './createCanvasShortcuts.js';\n\n// Interaction modes & presets\nexport {\n\tcreateCanvasInteractions,\n\tdefaultSvelteFlowPreset,\n\tmiroCompatiblePreset,\n\trestorePanelPointerEvents,\n\ttype CreateCanvasInteractionsOptions\n} from './createCanvasInteractions.svelte.js';\n\n// Trajectory calculation & multi-node transitions\nexport {\n\tlinearTrajectory,\n\tlinearPositionTrajectory,\n\tcreateFanOutTrajectory,\n\tcreateBezierTrajectory,\n\trunMultiNodeTransition\n} from './createCanvasTrajectory.js';\n\n// Spatial layout displacement\nexport {\n\tcomputeNodesBoundingBox,\n\tcalculateDirectionalDisplacement,\n\tcalculateReflowDisplacement\n} from './createCanvasDisplacement.js';\n\n// Node explosion & collapse rune\nexport {\n\tcreateCanvasExplosion,\n\ttype CanvasGraphTarget,\n\ttype CreateCanvasExplosionOptions\n} from './createCanvasExplosion.svelte.js';\n\n// Node synchronization & handle normalization\nexport {\n\tcreateCanvasNodeSync,\n\tpreserveNodeMeasurements,\n\tnormalizeNodeHandles,\n\ttype HandleConfig,\n\ttype NodeMeasurement,\n\ttype CreateCanvasNodeSyncOptions\n} from './createCanvasNodeSync.svelte.js';\n\n// Multi-node drag coordination rune\nexport {\n\tcreateCanvasMultiDrag,\n\ttype MultiDragState,\n\ttype MultiDragFollowerOffset,\n\ttype CreateCanvasMultiDragOptions,\n\ttype FollowerTransform\n} from './createCanvasMultiDrag.svelte.js';\n\n// Drag selection helpers & presets\nexport {\n\tgetMarqueeSelectionPreset,\n\thandleDeselectOnEscape,\n\ttype CanvasSelectionOptions\n} from './createCanvasSelection.svelte.js';\n\n// Viewport floating scrollbar component\nexport { default as FloatingHorizontalScrollbar } from './FloatingHorizontalScrollbar.svelte';\n\n// Agent presence visual layer\nexport { default as AgentPresenceLayer } from './AgentPresenceLayer.svelte';\n\n// Streaming canvas rune\nexport {\n\tcreateStreamingCanvas,\n\ttype CreateStreamingCanvasOptions\n} from './createStreamingCanvas.svelte.js';\n\n// Clock and view helpers from core\nexport {\n\trealClock,\n\tManualClock,\n\tlayoutBounds,\n\tcanvasHeight,\n\testimateCanvasHeight,\n\tblendLayout,\n\tconnectedOnly,\n\ttype Clock,\n\ttype CanvasHeightOptions\n} from '@pixerate/editor/canvas';\n\n"],"mappings":"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","names":["event","event","reset","event","event","cubicOut","dagre","cubicOut","cubicOut","child","state","event","$","$$anchor","$","root","$$anchor"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@pixerate/editor-svelte",
3
- "version": "0.12.0",
3
+ "version": "0.13.0",
4
4
  "description": "Svelte bindings and prompt/rich-text components for @pixerate/editor",
5
5
  "author": "Pixerate",
6
6
  "license": "MIT",
@@ -46,7 +46,7 @@
46
46
  "@tiptap/extension-placeholder": "^2.11.5",
47
47
  "@tiptap/pm": "^2.11.5",
48
48
  "@tiptap/starter-kit": "^2.11.5",
49
- "@pixerate/editor": "0.10.0"
49
+ "@pixerate/editor": "0.11.0"
50
50
  },
51
51
  "peerDependencies": {
52
52
  "@xyflow/svelte": "^1.6.0",
@@ -11,7 +11,7 @@
11
11
 
12
12
  {#if presences.length > 0}
13
13
  <div
14
- class="pixerate-agent-presence-layer pointer-events-none absolute inset-0 z-50 overflow-hidden {className}"
14
+ class="pixerate-presence agent-presence pixerate-agent-presence-layer pointer-events-none absolute inset-0 z-50 overflow-hidden {className}"
15
15
  aria-hidden="true"
16
16
  >
17
17
  {#each presences as agent (agent.agentId)}
@@ -45,6 +45,13 @@
45
45
  <span class="opacity-80 text-[10px]">({agent.statusMessage})</span>
46
46
  {/if}
47
47
  </div>
48
+
49
+ <!-- Narration Bubble (say / note) -->
50
+ {#if agent.note}
51
+ <div class="mt-1 max-w-xs rounded-lg bg-white/95 backdrop-blur-sm border border-slate-200 px-2.5 py-1.5 text-xs text-slate-800 shadow-lg dark:bg-slate-900/95 dark:border-slate-700 dark:text-slate-100">
52
+ {agent.note}
53
+ </div>
54
+ {/if}
48
55
  </div>
49
56
  {/if}
50
57
  {/each}
@@ -12,6 +12,8 @@ export interface CreateStreamingCanvasOptions<
12
12
  > {
13
13
  throttleMs?: number;
14
14
  glideDurationMs?: number;
15
+ connectedOnly?: boolean;
16
+ clock?: any;
15
17
  layoutOptions?: IncrementalLayoutOptions;
16
18
  onPositionsChange?: (positions: Map<string, XYPosition>) => void;
17
19
  }
@@ -28,6 +30,8 @@ export function createStreamingCanvas<
28
30
  const manager = new StreamingLayoutManager<TNode, TEdge>({
29
31
  throttleMs: options.throttleMs,
30
32
  glideDurationMs: options.glideDurationMs,
33
+ connectedOnly: options.connectedOnly,
34
+ clock: options.clock,
31
35
  layoutOptions: options.layoutOptions,
32
36
  onLayoutUpdated: (updated) => {
33
37
  positions = updated;
@@ -111,3 +111,16 @@ export {
111
111
  type CreateStreamingCanvasOptions
112
112
  } from './createStreamingCanvas.svelte.js';
113
113
 
114
+ // Clock and view helpers from core
115
+ export {
116
+ realClock,
117
+ ManualClock,
118
+ layoutBounds,
119
+ canvasHeight,
120
+ estimateCanvasHeight,
121
+ blendLayout,
122
+ connectedOnly,
123
+ type Clock,
124
+ type CanvasHeightOptions
125
+ } from '@pixerate/editor/canvas';
126
+