@multiplatform.one/node-graph 7.7.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (1121) hide show
  1. package/LICENSE +201 -0
  2. package/README.md +80 -0
  3. package/css/graph.css +171 -0
  4. package/demo.ts +14 -0
  5. package/dist/cjs/NodeGraph.cjs +34 -0
  6. package/dist/cjs/NodeGraph.native.js +37 -0
  7. package/dist/cjs/NodeGraph.native.js.map +1 -0
  8. package/dist/cjs/bench/frameSampler.cjs +290 -0
  9. package/dist/cjs/bench/frameSampler.native.js +409 -0
  10. package/dist/cjs/bench/frameSampler.native.js.map +1 -0
  11. package/dist/cjs/bench/generateGraph.cjs +125 -0
  12. package/dist/cjs/bench/generateGraph.native.js +128 -0
  13. package/dist/cjs/bench/generateGraph.native.js.map +1 -0
  14. package/dist/cjs/diagnostics/GraphDiagnostics.cjs +154 -0
  15. package/dist/cjs/diagnostics/GraphDiagnostics.native.js +166 -0
  16. package/dist/cjs/diagnostics/GraphDiagnostics.native.js.map +1 -0
  17. package/dist/cjs/diagnostics/LiveGraphDiagnostics.cjs +101 -0
  18. package/dist/cjs/diagnostics/LiveGraphDiagnostics.native.js +106 -0
  19. package/dist/cjs/diagnostics/LiveGraphDiagnostics.native.js.map +1 -0
  20. package/dist/cjs/diagnostics/fromWire.cjs +48 -0
  21. package/dist/cjs/diagnostics/fromWire.native.js +51 -0
  22. package/dist/cjs/diagnostics/fromWire.native.js.map +1 -0
  23. package/dist/cjs/diagnostics/lastError.cjs +67 -0
  24. package/dist/cjs/diagnostics/lastError.native.js +75 -0
  25. package/dist/cjs/diagnostics/lastError.native.js.map +1 -0
  26. package/dist/cjs/diagnostics/types.cjs +18 -0
  27. package/dist/cjs/diagnostics/types.native.js +21 -0
  28. package/dist/cjs/diagnostics/types.native.js.map +1 -0
  29. package/dist/cjs/diagnostics/useGraphDiagnostics.cjs +69 -0
  30. package/dist/cjs/diagnostics/useGraphDiagnostics.native.js +75 -0
  31. package/dist/cjs/diagnostics/useGraphDiagnostics.native.js.map +1 -0
  32. package/dist/cjs/dom/GraphDomLayout.cjs +37 -0
  33. package/dist/cjs/dom/GraphDomLayout.native.js +40 -0
  34. package/dist/cjs/dom/GraphDomLayout.native.js.map +1 -0
  35. package/dist/cjs/dom/boot.cjs +100 -0
  36. package/dist/cjs/dom/boot.native.js +111 -0
  37. package/dist/cjs/dom/boot.native.js.map +1 -0
  38. package/dist/cjs/dom/wire.cjs +215 -0
  39. package/dist/cjs/dom/wire.native.js +274 -0
  40. package/dist/cjs/dom/wire.native.js.map +1 -0
  41. package/dist/cjs/edges/GraphEdge.cjs +169 -0
  42. package/dist/cjs/edges/GraphEdge.native.js +178 -0
  43. package/dist/cjs/edges/GraphEdge.native.js.map +1 -0
  44. package/dist/cjs/edges/edgeKinds.cjs +51 -0
  45. package/dist/cjs/edges/edgeKinds.native.js +54 -0
  46. package/dist/cjs/edges/edgeKinds.native.js.map +1 -0
  47. package/dist/cjs/edges/edgeStyle.cjs +94 -0
  48. package/dist/cjs/edges/edgeStyle.native.js +99 -0
  49. package/dist/cjs/edges/edgeStyle.native.js.map +1 -0
  50. package/dist/cjs/index.cjs +197 -0
  51. package/dist/cjs/index.native.js +200 -0
  52. package/dist/cjs/index.native.js.map +1 -0
  53. package/dist/cjs/interaction/lassoIntercept.cjs +54 -0
  54. package/dist/cjs/interaction/lassoIntercept.native.js +57 -0
  55. package/dist/cjs/interaction/lassoIntercept.native.js.map +1 -0
  56. package/dist/cjs/interaction/legalTargets.cjs +75 -0
  57. package/dist/cjs/interaction/legalTargets.native.js +118 -0
  58. package/dist/cjs/interaction/legalTargets.native.js.map +1 -0
  59. package/dist/cjs/interaction/snapAlignment.cjs +165 -0
  60. package/dist/cjs/interaction/snapAlignment.native.js +245 -0
  61. package/dist/cjs/interaction/snapAlignment.native.js.map +1 -0
  62. package/dist/cjs/interaction/snapChanges.cjs +214 -0
  63. package/dist/cjs/interaction/snapChanges.native.js +269 -0
  64. package/dist/cjs/interaction/snapChanges.native.js.map +1 -0
  65. package/dist/cjs/interaction/spatialHash.cjs +97 -0
  66. package/dist/cjs/interaction/spatialHash.native.js +165 -0
  67. package/dist/cjs/interaction/spatialHash.native.js.map +1 -0
  68. package/dist/cjs/interaction/useLassoSelect.cjs +259 -0
  69. package/dist/cjs/interaction/useLassoSelect.native.js +287 -0
  70. package/dist/cjs/interaction/useLassoSelect.native.js.map +1 -0
  71. package/dist/cjs/knobs/KnobEnvelopeProvider.cjs +77 -0
  72. package/dist/cjs/knobs/KnobEnvelopeProvider.native.js +85 -0
  73. package/dist/cjs/knobs/KnobEnvelopeProvider.native.js.map +1 -0
  74. package/dist/cjs/knobs/envelope.cjs +59 -0
  75. package/dist/cjs/knobs/envelope.native.js +78 -0
  76. package/dist/cjs/knobs/envelope.native.js.map +1 -0
  77. package/dist/cjs/knobs/graphKnobs.cjs +39 -0
  78. package/dist/cjs/knobs/graphKnobs.native.js +43 -0
  79. package/dist/cjs/knobs/graphKnobs.native.js.map +1 -0
  80. package/dist/cjs/knobs/useKnobEnvelope.cjs +108 -0
  81. package/dist/cjs/knobs/useKnobEnvelope.native.js +140 -0
  82. package/dist/cjs/knobs/useKnobEnvelope.native.js.map +1 -0
  83. package/dist/cjs/layout/dagre.cjs +125 -0
  84. package/dist/cjs/layout/dagre.native.js +259 -0
  85. package/dist/cjs/layout/dagre.native.js.map +1 -0
  86. package/dist/cjs/layout/layout.cjs +84 -0
  87. package/dist/cjs/layout/layout.native.js +112 -0
  88. package/dist/cjs/layout/layout.native.js.map +1 -0
  89. package/dist/cjs/layout/runner.cjs +194 -0
  90. package/dist/cjs/layout/runner.native.js +247 -0
  91. package/dist/cjs/layout/runner.native.js.map +1 -0
  92. package/dist/cjs/layout/structuredCloneShim.cjs +80 -0
  93. package/dist/cjs/layout/structuredCloneShim.native.js +160 -0
  94. package/dist/cjs/layout/structuredCloneShim.native.js.map +1 -0
  95. package/dist/cjs/layout/types.cjs +18 -0
  96. package/dist/cjs/layout/types.native.js +21 -0
  97. package/dist/cjs/layout/types.native.js.map +1 -0
  98. package/dist/cjs/layout/worker.entry.cjs +58 -0
  99. package/dist/cjs/layout/worker.entry.native.js +75 -0
  100. package/dist/cjs/layout/worker.entry.native.js.map +1 -0
  101. package/dist/cjs/layout/worker.generated.cjs +32 -0
  102. package/dist/cjs/layout/worker.generated.native.js +35 -0
  103. package/dist/cjs/layout/worker.generated.native.js.map +1 -0
  104. package/dist/cjs/model/commands.cjs +235 -0
  105. package/dist/cjs/model/commands.native.js +317 -0
  106. package/dist/cjs/model/commands.native.js.map +1 -0
  107. package/dist/cjs/model/connect.cjs +159 -0
  108. package/dist/cjs/model/connect.native.js +239 -0
  109. package/dist/cjs/model/connect.native.js.map +1 -0
  110. package/dist/cjs/model/document.cjs +18 -0
  111. package/dist/cjs/model/document.native.js +21 -0
  112. package/dist/cjs/model/document.native.js.map +1 -0
  113. package/dist/cjs/model/history.cjs +121 -0
  114. package/dist/cjs/model/history.native.js +178 -0
  115. package/dist/cjs/model/history.native.js.map +1 -0
  116. package/dist/cjs/model/index.cjs +60 -0
  117. package/dist/cjs/model/index.native.js +63 -0
  118. package/dist/cjs/model/index.native.js.map +1 -0
  119. package/dist/cjs/model/schema.cjs +63 -0
  120. package/dist/cjs/model/schema.native.js +68 -0
  121. package/dist/cjs/model/schema.native.js.map +1 -0
  122. package/dist/cjs/model/select.cjs +78 -0
  123. package/dist/cjs/model/select.native.js +107 -0
  124. package/dist/cjs/model/select.native.js.map +1 -0
  125. package/dist/cjs/model/serialize.cjs +332 -0
  126. package/dist/cjs/model/serialize.native.js +374 -0
  127. package/dist/cjs/model/serialize.native.js.map +1 -0
  128. package/dist/cjs/native/DomOnlyStory.cjs +60 -0
  129. package/dist/cjs/native/DomOnlyStory.native.js +66 -0
  130. package/dist/cjs/native/DomOnlyStory.native.js.map +1 -0
  131. package/dist/cjs/native/GraphToolbar.cjs +101 -0
  132. package/dist/cjs/native/GraphToolbar.native.js +107 -0
  133. package/dist/cjs/native/GraphToolbar.native.js.map +1 -0
  134. package/dist/cjs/native/domEntryRegistry.cjs +39 -0
  135. package/dist/cjs/native/domEntryRegistry.native.js +42 -0
  136. package/dist/cjs/native/domEntryRegistry.native.js.map +1 -0
  137. package/dist/cjs/native/graphChildren.cjs +45 -0
  138. package/dist/cjs/native/graphChildren.native.js +50 -0
  139. package/dist/cjs/native/graphChildren.native.js.map +1 -0
  140. package/dist/cjs/nodes/GraphNode.cjs +161 -0
  141. package/dist/cjs/nodes/GraphNode.native.js +206 -0
  142. package/dist/cjs/nodes/GraphNode.native.js.map +1 -0
  143. package/dist/cjs/nodes/GraphPort.cjs +104 -0
  144. package/dist/cjs/nodes/GraphPort.native.js +108 -0
  145. package/dist/cjs/nodes/GraphPort.native.js.map +1 -0
  146. package/dist/cjs/nodes/handleGeometry.cjs +98 -0
  147. package/dist/cjs/nodes/handleGeometry.native.js +104 -0
  148. package/dist/cjs/nodes/handleGeometry.native.js.map +1 -0
  149. package/dist/cjs/nodes/lod.cjs +41 -0
  150. package/dist/cjs/nodes/lod.native.js +45 -0
  151. package/dist/cjs/nodes/lod.native.js.map +1 -0
  152. package/dist/cjs/nodes/nodeMeasure.cjs +108 -0
  153. package/dist/cjs/nodes/nodeMeasure.native.js +134 -0
  154. package/dist/cjs/nodes/nodeMeasure.native.js.map +1 -0
  155. package/dist/cjs/nodes/overviewNode.cjs +74 -0
  156. package/dist/cjs/nodes/overviewNode.native.js +81 -0
  157. package/dist/cjs/nodes/overviewNode.native.js.map +1 -0
  158. package/dist/cjs/react-flow/ConnectionPuck.cjs +122 -0
  159. package/dist/cjs/react-flow/ConnectionPuck.native.js +143 -0
  160. package/dist/cjs/react-flow/ConnectionPuck.native.js.map +1 -0
  161. package/dist/cjs/react-flow/GraphActions.cjs +47 -0
  162. package/dist/cjs/react-flow/GraphActions.native.js +51 -0
  163. package/dist/cjs/react-flow/GraphActions.native.js.map +1 -0
  164. package/dist/cjs/react-flow/GraphCommandBridge.cjs +238 -0
  165. package/dist/cjs/react-flow/GraphCommandBridge.native.js +272 -0
  166. package/dist/cjs/react-flow/GraphCommandBridge.native.js.map +1 -0
  167. package/dist/cjs/react-flow/GraphNodeHost.cjs +77 -0
  168. package/dist/cjs/react-flow/GraphNodeHost.native.js +89 -0
  169. package/dist/cjs/react-flow/GraphNodeHost.native.js.map +1 -0
  170. package/dist/cjs/react-flow/GraphPaintProbe.cjs +60 -0
  171. package/dist/cjs/react-flow/GraphPaintProbe.native.js +65 -0
  172. package/dist/cjs/react-flow/GraphPaintProbe.native.js.map +1 -0
  173. package/dist/cjs/react-flow/GraphZoomVar.cjs +42 -0
  174. package/dist/cjs/react-flow/GraphZoomVar.native.js +48 -0
  175. package/dist/cjs/react-flow/GraphZoomVar.native.js.map +1 -0
  176. package/dist/cjs/react-flow/LassoOverlay.cjs +47 -0
  177. package/dist/cjs/react-flow/LassoOverlay.native.js +51 -0
  178. package/dist/cjs/react-flow/LassoOverlay.native.js.map +1 -0
  179. package/dist/cjs/react-flow/NodeGraphWeb.cjs +386 -0
  180. package/dist/cjs/react-flow/NodeGraphWeb.native.js +515 -0
  181. package/dist/cjs/react-flow/NodeGraphWeb.native.js.map +1 -0
  182. package/dist/cjs/react-flow/SnapGuides.cjs +89 -0
  183. package/dist/cjs/react-flow/SnapGuides.native.js +114 -0
  184. package/dist/cjs/react-flow/SnapGuides.native.js.map +1 -0
  185. package/dist/cjs/react-flow/demoControlBody.cjs +93 -0
  186. package/dist/cjs/react-flow/demoControlBody.native.js +104 -0
  187. package/dist/cjs/react-flow/demoControlBody.native.js.map +1 -0
  188. package/dist/cjs/react-flow/demoNodeBody.cjs +121 -0
  189. package/dist/cjs/react-flow/demoNodeBody.native.js +131 -0
  190. package/dist/cjs/react-flow/demoNodeBody.native.js.map +1 -0
  191. package/dist/cjs/react-flow/fixtures.cjs +215 -0
  192. package/dist/cjs/react-flow/fixtures.native.js +225 -0
  193. package/dist/cjs/react-flow/fixtures.native.js.map +1 -0
  194. package/dist/cjs/react-flow/flowAdapter.cjs +121 -0
  195. package/dist/cjs/react-flow/flowAdapter.native.js +133 -0
  196. package/dist/cjs/react-flow/flowAdapter.native.js.map +1 -0
  197. package/dist/cjs/react-flow/graphHandle.cjs +28 -0
  198. package/dist/cjs/react-flow/graphHandle.native.js +31 -0
  199. package/dist/cjs/react-flow/graphHandle.native.js.map +1 -0
  200. package/dist/cjs/react-flow/nodeCensus.cjs +56 -0
  201. package/dist/cjs/react-flow/nodeCensus.native.js +80 -0
  202. package/dist/cjs/react-flow/nodeCensus.native.js.map +1 -0
  203. package/dist/cjs/react-flow/useGraphController.cjs +297 -0
  204. package/dist/cjs/react-flow/useGraphController.native.js +393 -0
  205. package/dist/cjs/react-flow/useGraphController.native.js.map +1 -0
  206. package/dist/cjs/react-flow/xy.cjs +60 -0
  207. package/dist/cjs/react-flow/xy.native.js +63 -0
  208. package/dist/cjs/react-flow/xy.native.js.map +1 -0
  209. package/dist/cjs/theme/GraphFaces.cjs +114 -0
  210. package/dist/cjs/theme/GraphFaces.native.js +181 -0
  211. package/dist/cjs/theme/GraphFaces.native.js.map +1 -0
  212. package/dist/cjs/theme/GraphVarsStyle.cjs +88 -0
  213. package/dist/cjs/theme/GraphVarsStyle.native.js +100 -0
  214. package/dist/cjs/theme/GraphVarsStyle.native.js.map +1 -0
  215. package/dist/cjs/theme/faces.cjs +121 -0
  216. package/dist/cjs/theme/faces.generated.cjs +48 -0
  217. package/dist/cjs/theme/faces.generated.native.js +51 -0
  218. package/dist/cjs/theme/faces.generated.native.js.map +1 -0
  219. package/dist/cjs/theme/faces.native.js +133 -0
  220. package/dist/cjs/theme/faces.native.js.map +1 -0
  221. package/dist/cjs/theme/graphVars.cjs +318 -0
  222. package/dist/cjs/theme/graphVars.native.js +351 -0
  223. package/dist/cjs/theme/graphVars.native.js.map +1 -0
  224. package/dist/esm/NodeGraph.mjs +9 -0
  225. package/dist/esm/NodeGraph.mjs.map +1 -0
  226. package/dist/esm/NodeGraph.native.js +9 -0
  227. package/dist/esm/NodeGraph.native.js.map +1 -0
  228. package/dist/esm/bench/frameSampler.mjs +255 -0
  229. package/dist/esm/bench/frameSampler.mjs.map +1 -0
  230. package/dist/esm/bench/frameSampler.native.js +371 -0
  231. package/dist/esm/bench/frameSampler.native.js.map +1 -0
  232. package/dist/esm/bench/generateGraph.mjs +99 -0
  233. package/dist/esm/bench/generateGraph.mjs.map +1 -0
  234. package/dist/esm/bench/generateGraph.native.js +99 -0
  235. package/dist/esm/bench/generateGraph.native.js.map +1 -0
  236. package/dist/esm/diagnostics/GraphDiagnostics.mjs +128 -0
  237. package/dist/esm/diagnostics/GraphDiagnostics.mjs.map +1 -0
  238. package/dist/esm/diagnostics/GraphDiagnostics.native.js +137 -0
  239. package/dist/esm/diagnostics/GraphDiagnostics.native.js.map +1 -0
  240. package/dist/esm/diagnostics/LiveGraphDiagnostics.mjs +76 -0
  241. package/dist/esm/diagnostics/LiveGraphDiagnostics.mjs.map +1 -0
  242. package/dist/esm/diagnostics/LiveGraphDiagnostics.native.js +78 -0
  243. package/dist/esm/diagnostics/LiveGraphDiagnostics.native.js.map +1 -0
  244. package/dist/esm/diagnostics/fromWire.mjs +23 -0
  245. package/dist/esm/diagnostics/fromWire.mjs.map +1 -0
  246. package/dist/esm/diagnostics/fromWire.native.js +23 -0
  247. package/dist/esm/diagnostics/fromWire.native.js.map +1 -0
  248. package/dist/esm/diagnostics/lastError.mjs +39 -0
  249. package/dist/esm/diagnostics/lastError.mjs.map +1 -0
  250. package/dist/esm/diagnostics/lastError.native.js +44 -0
  251. package/dist/esm/diagnostics/lastError.native.js.map +1 -0
  252. package/dist/esm/diagnostics/types.mjs +2 -0
  253. package/dist/esm/diagnostics/types.mjs.map +1 -0
  254. package/dist/esm/diagnostics/types.native.js +2 -0
  255. package/dist/esm/diagnostics/types.native.js.map +1 -0
  256. package/dist/esm/diagnostics/useGraphDiagnostics.mjs +44 -0
  257. package/dist/esm/diagnostics/useGraphDiagnostics.mjs.map +1 -0
  258. package/dist/esm/diagnostics/useGraphDiagnostics.native.js +47 -0
  259. package/dist/esm/diagnostics/useGraphDiagnostics.native.js.map +1 -0
  260. package/dist/esm/dom/GraphDomLayout.mjs +11 -0
  261. package/dist/esm/dom/GraphDomLayout.mjs.map +1 -0
  262. package/dist/esm/dom/GraphDomLayout.native.js +11 -0
  263. package/dist/esm/dom/GraphDomLayout.native.js.map +1 -0
  264. package/dist/esm/dom/boot.mjs +67 -0
  265. package/dist/esm/dom/boot.mjs.map +1 -0
  266. package/dist/esm/dom/boot.native.js +75 -0
  267. package/dist/esm/dom/boot.native.js.map +1 -0
  268. package/dist/esm/dom/wire.mjs +183 -0
  269. package/dist/esm/dom/wire.mjs.map +1 -0
  270. package/dist/esm/dom/wire.native.js +239 -0
  271. package/dist/esm/dom/wire.native.js.map +1 -0
  272. package/dist/esm/edges/GraphEdge.mjs +139 -0
  273. package/dist/esm/edges/GraphEdge.mjs.map +1 -0
  274. package/dist/esm/edges/GraphEdge.native.js +145 -0
  275. package/dist/esm/edges/GraphEdge.native.js.map +1 -0
  276. package/dist/esm/edges/edgeKinds.mjs +25 -0
  277. package/dist/esm/edges/edgeKinds.mjs.map +1 -0
  278. package/dist/esm/edges/edgeKinds.native.js +25 -0
  279. package/dist/esm/edges/edgeKinds.native.js.map +1 -0
  280. package/dist/esm/edges/edgeStyle.mjs +63 -0
  281. package/dist/esm/edges/edgeStyle.mjs.map +1 -0
  282. package/dist/esm/edges/edgeStyle.native.js +65 -0
  283. package/dist/esm/edges/edgeStyle.native.js.map +1 -0
  284. package/dist/esm/index.mjs +50 -0
  285. package/dist/esm/index.mjs.map +1 -0
  286. package/dist/esm/index.native.js +50 -0
  287. package/dist/esm/index.native.js.map +1 -0
  288. package/dist/esm/interaction/lassoIntercept.mjs +29 -0
  289. package/dist/esm/interaction/lassoIntercept.mjs.map +1 -0
  290. package/dist/esm/interaction/lassoIntercept.native.js +29 -0
  291. package/dist/esm/interaction/lassoIntercept.native.js.map +1 -0
  292. package/dist/esm/interaction/legalTargets.mjs +48 -0
  293. package/dist/esm/interaction/legalTargets.mjs.map +1 -0
  294. package/dist/esm/interaction/legalTargets.native.js +88 -0
  295. package/dist/esm/interaction/legalTargets.native.js.map +1 -0
  296. package/dist/esm/interaction/snapAlignment.mjs +137 -0
  297. package/dist/esm/interaction/snapAlignment.mjs.map +1 -0
  298. package/dist/esm/interaction/snapAlignment.native.js +214 -0
  299. package/dist/esm/interaction/snapAlignment.native.js.map +1 -0
  300. package/dist/esm/interaction/snapChanges.mjs +184 -0
  301. package/dist/esm/interaction/snapChanges.mjs.map +1 -0
  302. package/dist/esm/interaction/snapChanges.native.js +236 -0
  303. package/dist/esm/interaction/snapChanges.native.js.map +1 -0
  304. package/dist/esm/interaction/spatialHash.mjs +71 -0
  305. package/dist/esm/interaction/spatialHash.mjs.map +1 -0
  306. package/dist/esm/interaction/spatialHash.native.js +136 -0
  307. package/dist/esm/interaction/spatialHash.native.js.map +1 -0
  308. package/dist/esm/interaction/useLassoSelect.mjs +231 -0
  309. package/dist/esm/interaction/useLassoSelect.mjs.map +1 -0
  310. package/dist/esm/interaction/useLassoSelect.native.js +256 -0
  311. package/dist/esm/interaction/useLassoSelect.native.js.map +1 -0
  312. package/dist/esm/knobs/KnobEnvelopeProvider.mjs +51 -0
  313. package/dist/esm/knobs/KnobEnvelopeProvider.mjs.map +1 -0
  314. package/dist/esm/knobs/KnobEnvelopeProvider.native.js +56 -0
  315. package/dist/esm/knobs/KnobEnvelopeProvider.native.js.map +1 -0
  316. package/dist/esm/knobs/envelope.mjs +29 -0
  317. package/dist/esm/knobs/envelope.mjs.map +1 -0
  318. package/dist/esm/knobs/envelope.native.js +45 -0
  319. package/dist/esm/knobs/envelope.native.js.map +1 -0
  320. package/dist/esm/knobs/graphKnobs.mjs +14 -0
  321. package/dist/esm/knobs/graphKnobs.mjs.map +1 -0
  322. package/dist/esm/knobs/graphKnobs.native.js +15 -0
  323. package/dist/esm/knobs/graphKnobs.native.js.map +1 -0
  324. package/dist/esm/knobs/useKnobEnvelope.mjs +83 -0
  325. package/dist/esm/knobs/useKnobEnvelope.mjs.map +1 -0
  326. package/dist/esm/knobs/useKnobEnvelope.native.js +112 -0
  327. package/dist/esm/knobs/useKnobEnvelope.native.js.map +1 -0
  328. package/dist/esm/layout/dagre.mjs +99 -0
  329. package/dist/esm/layout/dagre.mjs.map +1 -0
  330. package/dist/esm/layout/dagre.native.js +230 -0
  331. package/dist/esm/layout/dagre.native.js.map +1 -0
  332. package/dist/esm/layout/layout.mjs +57 -0
  333. package/dist/esm/layout/layout.mjs.map +1 -0
  334. package/dist/esm/layout/layout.native.js +82 -0
  335. package/dist/esm/layout/layout.native.js.map +1 -0
  336. package/dist/esm/layout/runner.mjs +164 -0
  337. package/dist/esm/layout/runner.mjs.map +1 -0
  338. package/dist/esm/layout/runner.native.js +214 -0
  339. package/dist/esm/layout/runner.native.js.map +1 -0
  340. package/dist/esm/layout/structuredCloneShim.mjs +54 -0
  341. package/dist/esm/layout/structuredCloneShim.mjs.map +1 -0
  342. package/dist/esm/layout/structuredCloneShim.native.js +131 -0
  343. package/dist/esm/layout/structuredCloneShim.native.js.map +1 -0
  344. package/dist/esm/layout/types.mjs +2 -0
  345. package/dist/esm/layout/types.mjs.map +1 -0
  346. package/dist/esm/layout/types.native.js +2 -0
  347. package/dist/esm/layout/types.native.js.map +1 -0
  348. package/dist/esm/layout/worker.entry.mjs +33 -0
  349. package/dist/esm/layout/worker.entry.mjs.map +1 -0
  350. package/dist/esm/layout/worker.entry.native.js +47 -0
  351. package/dist/esm/layout/worker.entry.native.js.map +1 -0
  352. package/dist/esm/layout/worker.generated.mjs +5 -0
  353. package/dist/esm/layout/worker.generated.mjs.map +1 -0
  354. package/dist/esm/layout/worker.generated.native.js +5 -0
  355. package/dist/esm/layout/worker.generated.native.js.map +1 -0
  356. package/dist/esm/model/commands.mjs +209 -0
  357. package/dist/esm/model/commands.mjs.map +1 -0
  358. package/dist/esm/model/commands.native.js +288 -0
  359. package/dist/esm/model/commands.native.js.map +1 -0
  360. package/dist/esm/model/connect.mjs +124 -0
  361. package/dist/esm/model/connect.mjs.map +1 -0
  362. package/dist/esm/model/connect.native.js +201 -0
  363. package/dist/esm/model/connect.native.js.map +1 -0
  364. package/dist/esm/model/document.mjs +2 -0
  365. package/dist/esm/model/document.mjs.map +1 -0
  366. package/dist/esm/model/document.native.js +2 -0
  367. package/dist/esm/model/document.native.js.map +1 -0
  368. package/dist/esm/model/history.mjs +96 -0
  369. package/dist/esm/model/history.mjs.map +1 -0
  370. package/dist/esm/model/history.native.js +150 -0
  371. package/dist/esm/model/history.native.js.map +1 -0
  372. package/dist/esm/model/index.mjs +8 -0
  373. package/dist/esm/model/index.mjs.map +1 -0
  374. package/dist/esm/model/index.native.js +8 -0
  375. package/dist/esm/model/index.native.js.map +1 -0
  376. package/dist/esm/model/schema.mjs +32 -0
  377. package/dist/esm/model/schema.mjs.map +1 -0
  378. package/dist/esm/model/schema.native.js +34 -0
  379. package/dist/esm/model/schema.native.js.map +1 -0
  380. package/dist/esm/model/select.mjs +49 -0
  381. package/dist/esm/model/select.mjs.map +1 -0
  382. package/dist/esm/model/select.native.js +75 -0
  383. package/dist/esm/model/select.native.js.map +1 -0
  384. package/dist/esm/model/serialize.mjs +306 -0
  385. package/dist/esm/model/serialize.mjs.map +1 -0
  386. package/dist/esm/model/serialize.native.js +345 -0
  387. package/dist/esm/model/serialize.native.js.map +1 -0
  388. package/dist/esm/native/DomOnlyStory.mjs +33 -0
  389. package/dist/esm/native/DomOnlyStory.mjs.map +1 -0
  390. package/dist/esm/native/DomOnlyStory.native.js +36 -0
  391. package/dist/esm/native/DomOnlyStory.native.js.map +1 -0
  392. package/dist/esm/native/GraphToolbar.mjs +76 -0
  393. package/dist/esm/native/GraphToolbar.mjs.map +1 -0
  394. package/dist/esm/native/GraphToolbar.native.js +79 -0
  395. package/dist/esm/native/GraphToolbar.native.js.map +1 -0
  396. package/dist/esm/native/domEntryRegistry.mjs +12 -0
  397. package/dist/esm/native/domEntryRegistry.mjs.map +1 -0
  398. package/dist/esm/native/domEntryRegistry.native.js +12 -0
  399. package/dist/esm/native/domEntryRegistry.native.js.map +1 -0
  400. package/dist/esm/native/graphChildren.mjs +18 -0
  401. package/dist/esm/native/graphChildren.mjs.map +1 -0
  402. package/dist/esm/native/graphChildren.native.js +20 -0
  403. package/dist/esm/native/graphChildren.native.js.map +1 -0
  404. package/dist/esm/nodes/GraphNode.mjs +136 -0
  405. package/dist/esm/nodes/GraphNode.mjs.map +1 -0
  406. package/dist/esm/nodes/GraphNode.native.js +178 -0
  407. package/dist/esm/nodes/GraphNode.native.js.map +1 -0
  408. package/dist/esm/nodes/GraphPort.mjs +79 -0
  409. package/dist/esm/nodes/GraphPort.mjs.map +1 -0
  410. package/dist/esm/nodes/GraphPort.native.js +80 -0
  411. package/dist/esm/nodes/GraphPort.native.js.map +1 -0
  412. package/dist/esm/nodes/handleGeometry.mjs +65 -0
  413. package/dist/esm/nodes/handleGeometry.mjs.map +1 -0
  414. package/dist/esm/nodes/handleGeometry.native.js +68 -0
  415. package/dist/esm/nodes/handleGeometry.native.js.map +1 -0
  416. package/dist/esm/nodes/lod.mjs +13 -0
  417. package/dist/esm/nodes/lod.mjs.map +1 -0
  418. package/dist/esm/nodes/lod.native.js +14 -0
  419. package/dist/esm/nodes/lod.native.js.map +1 -0
  420. package/dist/esm/nodes/nodeMeasure.mjs +72 -0
  421. package/dist/esm/nodes/nodeMeasure.mjs.map +1 -0
  422. package/dist/esm/nodes/nodeMeasure.native.js +95 -0
  423. package/dist/esm/nodes/nodeMeasure.native.js.map +1 -0
  424. package/dist/esm/nodes/overviewNode.mjs +49 -0
  425. package/dist/esm/nodes/overviewNode.mjs.map +1 -0
  426. package/dist/esm/nodes/overviewNode.native.js +53 -0
  427. package/dist/esm/nodes/overviewNode.native.js.map +1 -0
  428. package/dist/esm/react-flow/ConnectionPuck.mjs +96 -0
  429. package/dist/esm/react-flow/ConnectionPuck.mjs.map +1 -0
  430. package/dist/esm/react-flow/ConnectionPuck.native.js +114 -0
  431. package/dist/esm/react-flow/ConnectionPuck.native.js.map +1 -0
  432. package/dist/esm/react-flow/GraphActions.mjs +21 -0
  433. package/dist/esm/react-flow/GraphActions.mjs.map +1 -0
  434. package/dist/esm/react-flow/GraphActions.native.js +22 -0
  435. package/dist/esm/react-flow/GraphActions.native.js.map +1 -0
  436. package/dist/esm/react-flow/GraphCommandBridge.mjs +213 -0
  437. package/dist/esm/react-flow/GraphCommandBridge.mjs.map +1 -0
  438. package/dist/esm/react-flow/GraphCommandBridge.native.js +244 -0
  439. package/dist/esm/react-flow/GraphCommandBridge.native.js.map +1 -0
  440. package/dist/esm/react-flow/GraphNodeHost.mjs +50 -0
  441. package/dist/esm/react-flow/GraphNodeHost.mjs.map +1 -0
  442. package/dist/esm/react-flow/GraphNodeHost.native.js +59 -0
  443. package/dist/esm/react-flow/GraphNodeHost.native.js.map +1 -0
  444. package/dist/esm/react-flow/GraphPaintProbe.mjs +35 -0
  445. package/dist/esm/react-flow/GraphPaintProbe.mjs.map +1 -0
  446. package/dist/esm/react-flow/GraphPaintProbe.native.js +37 -0
  447. package/dist/esm/react-flow/GraphPaintProbe.native.js.map +1 -0
  448. package/dist/esm/react-flow/GraphZoomVar.mjs +16 -0
  449. package/dist/esm/react-flow/GraphZoomVar.mjs.map +1 -0
  450. package/dist/esm/react-flow/GraphZoomVar.native.js +19 -0
  451. package/dist/esm/react-flow/GraphZoomVar.native.js.map +1 -0
  452. package/dist/esm/react-flow/LassoOverlay.mjs +22 -0
  453. package/dist/esm/react-flow/LassoOverlay.mjs.map +1 -0
  454. package/dist/esm/react-flow/LassoOverlay.native.js +23 -0
  455. package/dist/esm/react-flow/LassoOverlay.native.js.map +1 -0
  456. package/dist/esm/react-flow/NodeGraphWeb.mjs +359 -0
  457. package/dist/esm/react-flow/NodeGraphWeb.mjs.map +1 -0
  458. package/dist/esm/react-flow/NodeGraphWeb.native.js +485 -0
  459. package/dist/esm/react-flow/NodeGraphWeb.native.js.map +1 -0
  460. package/dist/esm/react-flow/SnapGuides.mjs +60 -0
  461. package/dist/esm/react-flow/SnapGuides.mjs.map +1 -0
  462. package/dist/esm/react-flow/SnapGuides.native.js +82 -0
  463. package/dist/esm/react-flow/SnapGuides.native.js.map +1 -0
  464. package/dist/esm/react-flow/demoControlBody.mjs +67 -0
  465. package/dist/esm/react-flow/demoControlBody.mjs.map +1 -0
  466. package/dist/esm/react-flow/demoControlBody.native.js +75 -0
  467. package/dist/esm/react-flow/demoControlBody.native.js.map +1 -0
  468. package/dist/esm/react-flow/demoNodeBody.mjs +91 -0
  469. package/dist/esm/react-flow/demoNodeBody.mjs.map +1 -0
  470. package/dist/esm/react-flow/demoNodeBody.native.js +98 -0
  471. package/dist/esm/react-flow/demoNodeBody.native.js.map +1 -0
  472. package/dist/esm/react-flow/fixtures.mjs +185 -0
  473. package/dist/esm/react-flow/fixtures.mjs.map +1 -0
  474. package/dist/esm/react-flow/fixtures.native.js +192 -0
  475. package/dist/esm/react-flow/fixtures.native.js.map +1 -0
  476. package/dist/esm/react-flow/flowAdapter.mjs +94 -0
  477. package/dist/esm/react-flow/flowAdapter.mjs.map +1 -0
  478. package/dist/esm/react-flow/flowAdapter.native.js +103 -0
  479. package/dist/esm/react-flow/flowAdapter.native.js.map +1 -0
  480. package/dist/esm/react-flow/graphHandle.mjs +3 -0
  481. package/dist/esm/react-flow/graphHandle.mjs.map +1 -0
  482. package/dist/esm/react-flow/graphHandle.native.js +3 -0
  483. package/dist/esm/react-flow/graphHandle.native.js.map +1 -0
  484. package/dist/esm/react-flow/nodeCensus.mjs +28 -0
  485. package/dist/esm/react-flow/nodeCensus.mjs.map +1 -0
  486. package/dist/esm/react-flow/nodeCensus.native.js +49 -0
  487. package/dist/esm/react-flow/nodeCensus.native.js.map +1 -0
  488. package/dist/esm/react-flow/useGraphController.mjs +269 -0
  489. package/dist/esm/react-flow/useGraphController.mjs.map +1 -0
  490. package/dist/esm/react-flow/useGraphController.native.js +362 -0
  491. package/dist/esm/react-flow/useGraphController.native.js.map +1 -0
  492. package/dist/esm/react-flow/xy.mjs +8 -0
  493. package/dist/esm/react-flow/xy.mjs.map +1 -0
  494. package/dist/esm/react-flow/xy.native.js +8 -0
  495. package/dist/esm/react-flow/xy.native.js.map +1 -0
  496. package/dist/esm/theme/GraphFaces.mjs +88 -0
  497. package/dist/esm/theme/GraphFaces.mjs.map +1 -0
  498. package/dist/esm/theme/GraphFaces.native.js +152 -0
  499. package/dist/esm/theme/GraphFaces.native.js.map +1 -0
  500. package/dist/esm/theme/GraphVarsStyle.mjs +59 -0
  501. package/dist/esm/theme/GraphVarsStyle.mjs.map +1 -0
  502. package/dist/esm/theme/GraphVarsStyle.native.js +68 -0
  503. package/dist/esm/theme/GraphVarsStyle.native.js.map +1 -0
  504. package/dist/esm/theme/faces.generated.mjs +23 -0
  505. package/dist/esm/theme/faces.generated.mjs.map +1 -0
  506. package/dist/esm/theme/faces.generated.native.js +23 -0
  507. package/dist/esm/theme/faces.generated.native.js.map +1 -0
  508. package/dist/esm/theme/faces.mjs +89 -0
  509. package/dist/esm/theme/faces.mjs.map +1 -0
  510. package/dist/esm/theme/faces.native.js +98 -0
  511. package/dist/esm/theme/faces.native.js.map +1 -0
  512. package/dist/esm/theme/graphVars.mjs +284 -0
  513. package/dist/esm/theme/graphVars.mjs.map +1 -0
  514. package/dist/esm/theme/graphVars.native.js +314 -0
  515. package/dist/esm/theme/graphVars.native.js.map +1 -0
  516. package/dist/jsx/NodeGraph.mjs +9 -0
  517. package/dist/jsx/NodeGraph.mjs.map +1 -0
  518. package/dist/jsx/NodeGraph.native.js +37 -0
  519. package/dist/jsx/NodeGraph.native.js.map +1 -0
  520. package/dist/jsx/bench/frameSampler.mjs +255 -0
  521. package/dist/jsx/bench/frameSampler.mjs.map +1 -0
  522. package/dist/jsx/bench/frameSampler.native.js +409 -0
  523. package/dist/jsx/bench/frameSampler.native.js.map +1 -0
  524. package/dist/jsx/bench/generateGraph.mjs +99 -0
  525. package/dist/jsx/bench/generateGraph.mjs.map +1 -0
  526. package/dist/jsx/bench/generateGraph.native.js +128 -0
  527. package/dist/jsx/bench/generateGraph.native.js.map +1 -0
  528. package/dist/jsx/diagnostics/GraphDiagnostics.mjs +128 -0
  529. package/dist/jsx/diagnostics/GraphDiagnostics.mjs.map +1 -0
  530. package/dist/jsx/diagnostics/GraphDiagnostics.native.js +166 -0
  531. package/dist/jsx/diagnostics/GraphDiagnostics.native.js.map +1 -0
  532. package/dist/jsx/diagnostics/LiveGraphDiagnostics.mjs +76 -0
  533. package/dist/jsx/diagnostics/LiveGraphDiagnostics.mjs.map +1 -0
  534. package/dist/jsx/diagnostics/LiveGraphDiagnostics.native.js +106 -0
  535. package/dist/jsx/diagnostics/LiveGraphDiagnostics.native.js.map +1 -0
  536. package/dist/jsx/diagnostics/fromWire.mjs +23 -0
  537. package/dist/jsx/diagnostics/fromWire.mjs.map +1 -0
  538. package/dist/jsx/diagnostics/fromWire.native.js +51 -0
  539. package/dist/jsx/diagnostics/fromWire.native.js.map +1 -0
  540. package/dist/jsx/diagnostics/lastError.mjs +39 -0
  541. package/dist/jsx/diagnostics/lastError.mjs.map +1 -0
  542. package/dist/jsx/diagnostics/lastError.native.js +75 -0
  543. package/dist/jsx/diagnostics/lastError.native.js.map +1 -0
  544. package/dist/jsx/diagnostics/types.mjs +2 -0
  545. package/dist/jsx/diagnostics/types.mjs.map +1 -0
  546. package/dist/jsx/diagnostics/types.native.js +21 -0
  547. package/dist/jsx/diagnostics/types.native.js.map +1 -0
  548. package/dist/jsx/diagnostics/useGraphDiagnostics.mjs +44 -0
  549. package/dist/jsx/diagnostics/useGraphDiagnostics.mjs.map +1 -0
  550. package/dist/jsx/diagnostics/useGraphDiagnostics.native.js +75 -0
  551. package/dist/jsx/diagnostics/useGraphDiagnostics.native.js.map +1 -0
  552. package/dist/jsx/dom/GraphDomLayout.mjs +11 -0
  553. package/dist/jsx/dom/GraphDomLayout.mjs.map +1 -0
  554. package/dist/jsx/dom/GraphDomLayout.native.js +40 -0
  555. package/dist/jsx/dom/GraphDomLayout.native.js.map +1 -0
  556. package/dist/jsx/dom/boot.mjs +67 -0
  557. package/dist/jsx/dom/boot.mjs.map +1 -0
  558. package/dist/jsx/dom/boot.native.js +111 -0
  559. package/dist/jsx/dom/boot.native.js.map +1 -0
  560. package/dist/jsx/dom/wire.mjs +183 -0
  561. package/dist/jsx/dom/wire.mjs.map +1 -0
  562. package/dist/jsx/dom/wire.native.js +274 -0
  563. package/dist/jsx/dom/wire.native.js.map +1 -0
  564. package/dist/jsx/edges/GraphEdge.mjs +139 -0
  565. package/dist/jsx/edges/GraphEdge.mjs.map +1 -0
  566. package/dist/jsx/edges/GraphEdge.native.js +178 -0
  567. package/dist/jsx/edges/GraphEdge.native.js.map +1 -0
  568. package/dist/jsx/edges/edgeKinds.mjs +25 -0
  569. package/dist/jsx/edges/edgeKinds.mjs.map +1 -0
  570. package/dist/jsx/edges/edgeKinds.native.js +54 -0
  571. package/dist/jsx/edges/edgeKinds.native.js.map +1 -0
  572. package/dist/jsx/edges/edgeStyle.mjs +63 -0
  573. package/dist/jsx/edges/edgeStyle.mjs.map +1 -0
  574. package/dist/jsx/edges/edgeStyle.native.js +99 -0
  575. package/dist/jsx/edges/edgeStyle.native.js.map +1 -0
  576. package/dist/jsx/index.js +50 -0
  577. package/dist/jsx/index.js.map +1 -0
  578. package/dist/jsx/index.mjs +50 -0
  579. package/dist/jsx/index.mjs.map +1 -0
  580. package/dist/jsx/index.native.js +200 -0
  581. package/dist/jsx/index.native.js.map +1 -0
  582. package/dist/jsx/interaction/lassoIntercept.mjs +29 -0
  583. package/dist/jsx/interaction/lassoIntercept.mjs.map +1 -0
  584. package/dist/jsx/interaction/lassoIntercept.native.js +57 -0
  585. package/dist/jsx/interaction/lassoIntercept.native.js.map +1 -0
  586. package/dist/jsx/interaction/legalTargets.mjs +48 -0
  587. package/dist/jsx/interaction/legalTargets.mjs.map +1 -0
  588. package/dist/jsx/interaction/legalTargets.native.js +118 -0
  589. package/dist/jsx/interaction/legalTargets.native.js.map +1 -0
  590. package/dist/jsx/interaction/snapAlignment.mjs +137 -0
  591. package/dist/jsx/interaction/snapAlignment.mjs.map +1 -0
  592. package/dist/jsx/interaction/snapAlignment.native.js +245 -0
  593. package/dist/jsx/interaction/snapAlignment.native.js.map +1 -0
  594. package/dist/jsx/interaction/snapChanges.mjs +184 -0
  595. package/dist/jsx/interaction/snapChanges.mjs.map +1 -0
  596. package/dist/jsx/interaction/snapChanges.native.js +269 -0
  597. package/dist/jsx/interaction/snapChanges.native.js.map +1 -0
  598. package/dist/jsx/interaction/spatialHash.mjs +71 -0
  599. package/dist/jsx/interaction/spatialHash.mjs.map +1 -0
  600. package/dist/jsx/interaction/spatialHash.native.js +165 -0
  601. package/dist/jsx/interaction/spatialHash.native.js.map +1 -0
  602. package/dist/jsx/interaction/useLassoSelect.mjs +231 -0
  603. package/dist/jsx/interaction/useLassoSelect.mjs.map +1 -0
  604. package/dist/jsx/interaction/useLassoSelect.native.js +287 -0
  605. package/dist/jsx/interaction/useLassoSelect.native.js.map +1 -0
  606. package/dist/jsx/knobs/KnobEnvelopeProvider.mjs +51 -0
  607. package/dist/jsx/knobs/KnobEnvelopeProvider.mjs.map +1 -0
  608. package/dist/jsx/knobs/KnobEnvelopeProvider.native.js +85 -0
  609. package/dist/jsx/knobs/KnobEnvelopeProvider.native.js.map +1 -0
  610. package/dist/jsx/knobs/envelope.mjs +29 -0
  611. package/dist/jsx/knobs/envelope.mjs.map +1 -0
  612. package/dist/jsx/knobs/envelope.native.js +78 -0
  613. package/dist/jsx/knobs/envelope.native.js.map +1 -0
  614. package/dist/jsx/knobs/graphKnobs.mjs +14 -0
  615. package/dist/jsx/knobs/graphKnobs.mjs.map +1 -0
  616. package/dist/jsx/knobs/graphKnobs.native.js +43 -0
  617. package/dist/jsx/knobs/graphKnobs.native.js.map +1 -0
  618. package/dist/jsx/knobs/useKnobEnvelope.mjs +83 -0
  619. package/dist/jsx/knobs/useKnobEnvelope.mjs.map +1 -0
  620. package/dist/jsx/knobs/useKnobEnvelope.native.js +140 -0
  621. package/dist/jsx/knobs/useKnobEnvelope.native.js.map +1 -0
  622. package/dist/jsx/layout/dagre.mjs +99 -0
  623. package/dist/jsx/layout/dagre.mjs.map +1 -0
  624. package/dist/jsx/layout/dagre.native.js +259 -0
  625. package/dist/jsx/layout/dagre.native.js.map +1 -0
  626. package/dist/jsx/layout/layout.mjs +57 -0
  627. package/dist/jsx/layout/layout.mjs.map +1 -0
  628. package/dist/jsx/layout/layout.native.js +112 -0
  629. package/dist/jsx/layout/layout.native.js.map +1 -0
  630. package/dist/jsx/layout/runner.mjs +164 -0
  631. package/dist/jsx/layout/runner.mjs.map +1 -0
  632. package/dist/jsx/layout/runner.native.js +247 -0
  633. package/dist/jsx/layout/runner.native.js.map +1 -0
  634. package/dist/jsx/layout/structuredCloneShim.mjs +54 -0
  635. package/dist/jsx/layout/structuredCloneShim.mjs.map +1 -0
  636. package/dist/jsx/layout/structuredCloneShim.native.js +160 -0
  637. package/dist/jsx/layout/structuredCloneShim.native.js.map +1 -0
  638. package/dist/jsx/layout/types.mjs +2 -0
  639. package/dist/jsx/layout/types.mjs.map +1 -0
  640. package/dist/jsx/layout/types.native.js +21 -0
  641. package/dist/jsx/layout/types.native.js.map +1 -0
  642. package/dist/jsx/layout/worker.entry.mjs +33 -0
  643. package/dist/jsx/layout/worker.entry.mjs.map +1 -0
  644. package/dist/jsx/layout/worker.entry.native.js +75 -0
  645. package/dist/jsx/layout/worker.entry.native.js.map +1 -0
  646. package/dist/jsx/layout/worker.generated.mjs +5 -0
  647. package/dist/jsx/layout/worker.generated.mjs.map +1 -0
  648. package/dist/jsx/layout/worker.generated.native.js +35 -0
  649. package/dist/jsx/layout/worker.generated.native.js.map +1 -0
  650. package/dist/jsx/model/commands.mjs +209 -0
  651. package/dist/jsx/model/commands.mjs.map +1 -0
  652. package/dist/jsx/model/commands.native.js +317 -0
  653. package/dist/jsx/model/commands.native.js.map +1 -0
  654. package/dist/jsx/model/connect.mjs +124 -0
  655. package/dist/jsx/model/connect.mjs.map +1 -0
  656. package/dist/jsx/model/connect.native.js +239 -0
  657. package/dist/jsx/model/connect.native.js.map +1 -0
  658. package/dist/jsx/model/document.mjs +2 -0
  659. package/dist/jsx/model/document.mjs.map +1 -0
  660. package/dist/jsx/model/document.native.js +21 -0
  661. package/dist/jsx/model/document.native.js.map +1 -0
  662. package/dist/jsx/model/history.mjs +96 -0
  663. package/dist/jsx/model/history.mjs.map +1 -0
  664. package/dist/jsx/model/history.native.js +178 -0
  665. package/dist/jsx/model/history.native.js.map +1 -0
  666. package/dist/jsx/model/index.mjs +8 -0
  667. package/dist/jsx/model/index.mjs.map +1 -0
  668. package/dist/jsx/model/index.native.js +63 -0
  669. package/dist/jsx/model/index.native.js.map +1 -0
  670. package/dist/jsx/model/schema.mjs +32 -0
  671. package/dist/jsx/model/schema.mjs.map +1 -0
  672. package/dist/jsx/model/schema.native.js +68 -0
  673. package/dist/jsx/model/schema.native.js.map +1 -0
  674. package/dist/jsx/model/select.mjs +49 -0
  675. package/dist/jsx/model/select.mjs.map +1 -0
  676. package/dist/jsx/model/select.native.js +107 -0
  677. package/dist/jsx/model/select.native.js.map +1 -0
  678. package/dist/jsx/model/serialize.mjs +306 -0
  679. package/dist/jsx/model/serialize.mjs.map +1 -0
  680. package/dist/jsx/model/serialize.native.js +374 -0
  681. package/dist/jsx/model/serialize.native.js.map +1 -0
  682. package/dist/jsx/native/DomOnlyStory.mjs +33 -0
  683. package/dist/jsx/native/DomOnlyStory.mjs.map +1 -0
  684. package/dist/jsx/native/DomOnlyStory.native.js +66 -0
  685. package/dist/jsx/native/DomOnlyStory.native.js.map +1 -0
  686. package/dist/jsx/native/GraphToolbar.mjs +76 -0
  687. package/dist/jsx/native/GraphToolbar.mjs.map +1 -0
  688. package/dist/jsx/native/GraphToolbar.native.js +107 -0
  689. package/dist/jsx/native/GraphToolbar.native.js.map +1 -0
  690. package/dist/jsx/native/domEntryRegistry.mjs +12 -0
  691. package/dist/jsx/native/domEntryRegistry.mjs.map +1 -0
  692. package/dist/jsx/native/domEntryRegistry.native.js +42 -0
  693. package/dist/jsx/native/domEntryRegistry.native.js.map +1 -0
  694. package/dist/jsx/native/graphChildren.mjs +18 -0
  695. package/dist/jsx/native/graphChildren.mjs.map +1 -0
  696. package/dist/jsx/native/graphChildren.native.js +50 -0
  697. package/dist/jsx/native/graphChildren.native.js.map +1 -0
  698. package/dist/jsx/nodes/GraphNode.mjs +136 -0
  699. package/dist/jsx/nodes/GraphNode.mjs.map +1 -0
  700. package/dist/jsx/nodes/GraphNode.native.js +206 -0
  701. package/dist/jsx/nodes/GraphNode.native.js.map +1 -0
  702. package/dist/jsx/nodes/GraphPort.mjs +79 -0
  703. package/dist/jsx/nodes/GraphPort.mjs.map +1 -0
  704. package/dist/jsx/nodes/GraphPort.native.js +108 -0
  705. package/dist/jsx/nodes/GraphPort.native.js.map +1 -0
  706. package/dist/jsx/nodes/handleGeometry.mjs +65 -0
  707. package/dist/jsx/nodes/handleGeometry.mjs.map +1 -0
  708. package/dist/jsx/nodes/handleGeometry.native.js +104 -0
  709. package/dist/jsx/nodes/handleGeometry.native.js.map +1 -0
  710. package/dist/jsx/nodes/lod.mjs +13 -0
  711. package/dist/jsx/nodes/lod.mjs.map +1 -0
  712. package/dist/jsx/nodes/lod.native.js +45 -0
  713. package/dist/jsx/nodes/lod.native.js.map +1 -0
  714. package/dist/jsx/nodes/nodeMeasure.mjs +72 -0
  715. package/dist/jsx/nodes/nodeMeasure.mjs.map +1 -0
  716. package/dist/jsx/nodes/nodeMeasure.native.js +134 -0
  717. package/dist/jsx/nodes/nodeMeasure.native.js.map +1 -0
  718. package/dist/jsx/nodes/overviewNode.mjs +49 -0
  719. package/dist/jsx/nodes/overviewNode.mjs.map +1 -0
  720. package/dist/jsx/nodes/overviewNode.native.js +81 -0
  721. package/dist/jsx/nodes/overviewNode.native.js.map +1 -0
  722. package/dist/jsx/react-flow/ConnectionPuck.mjs +96 -0
  723. package/dist/jsx/react-flow/ConnectionPuck.mjs.map +1 -0
  724. package/dist/jsx/react-flow/ConnectionPuck.native.js +143 -0
  725. package/dist/jsx/react-flow/ConnectionPuck.native.js.map +1 -0
  726. package/dist/jsx/react-flow/GraphActions.mjs +21 -0
  727. package/dist/jsx/react-flow/GraphActions.mjs.map +1 -0
  728. package/dist/jsx/react-flow/GraphActions.native.js +51 -0
  729. package/dist/jsx/react-flow/GraphActions.native.js.map +1 -0
  730. package/dist/jsx/react-flow/GraphCommandBridge.mjs +213 -0
  731. package/dist/jsx/react-flow/GraphCommandBridge.mjs.map +1 -0
  732. package/dist/jsx/react-flow/GraphCommandBridge.native.js +272 -0
  733. package/dist/jsx/react-flow/GraphCommandBridge.native.js.map +1 -0
  734. package/dist/jsx/react-flow/GraphNodeHost.mjs +50 -0
  735. package/dist/jsx/react-flow/GraphNodeHost.mjs.map +1 -0
  736. package/dist/jsx/react-flow/GraphNodeHost.native.js +89 -0
  737. package/dist/jsx/react-flow/GraphNodeHost.native.js.map +1 -0
  738. package/dist/jsx/react-flow/GraphPaintProbe.mjs +35 -0
  739. package/dist/jsx/react-flow/GraphPaintProbe.mjs.map +1 -0
  740. package/dist/jsx/react-flow/GraphPaintProbe.native.js +65 -0
  741. package/dist/jsx/react-flow/GraphPaintProbe.native.js.map +1 -0
  742. package/dist/jsx/react-flow/GraphZoomVar.mjs +16 -0
  743. package/dist/jsx/react-flow/GraphZoomVar.mjs.map +1 -0
  744. package/dist/jsx/react-flow/GraphZoomVar.native.js +48 -0
  745. package/dist/jsx/react-flow/GraphZoomVar.native.js.map +1 -0
  746. package/dist/jsx/react-flow/LassoOverlay.mjs +22 -0
  747. package/dist/jsx/react-flow/LassoOverlay.mjs.map +1 -0
  748. package/dist/jsx/react-flow/LassoOverlay.native.js +51 -0
  749. package/dist/jsx/react-flow/LassoOverlay.native.js.map +1 -0
  750. package/dist/jsx/react-flow/NodeGraphWeb.mjs +359 -0
  751. package/dist/jsx/react-flow/NodeGraphWeb.mjs.map +1 -0
  752. package/dist/jsx/react-flow/NodeGraphWeb.native.js +515 -0
  753. package/dist/jsx/react-flow/NodeGraphWeb.native.js.map +1 -0
  754. package/dist/jsx/react-flow/SnapGuides.mjs +60 -0
  755. package/dist/jsx/react-flow/SnapGuides.mjs.map +1 -0
  756. package/dist/jsx/react-flow/SnapGuides.native.js +114 -0
  757. package/dist/jsx/react-flow/SnapGuides.native.js.map +1 -0
  758. package/dist/jsx/react-flow/demoControlBody.mjs +67 -0
  759. package/dist/jsx/react-flow/demoControlBody.mjs.map +1 -0
  760. package/dist/jsx/react-flow/demoControlBody.native.js +104 -0
  761. package/dist/jsx/react-flow/demoControlBody.native.js.map +1 -0
  762. package/dist/jsx/react-flow/demoNodeBody.mjs +91 -0
  763. package/dist/jsx/react-flow/demoNodeBody.mjs.map +1 -0
  764. package/dist/jsx/react-flow/demoNodeBody.native.js +131 -0
  765. package/dist/jsx/react-flow/demoNodeBody.native.js.map +1 -0
  766. package/dist/jsx/react-flow/fixtures.mjs +185 -0
  767. package/dist/jsx/react-flow/fixtures.mjs.map +1 -0
  768. package/dist/jsx/react-flow/fixtures.native.js +225 -0
  769. package/dist/jsx/react-flow/fixtures.native.js.map +1 -0
  770. package/dist/jsx/react-flow/flowAdapter.mjs +94 -0
  771. package/dist/jsx/react-flow/flowAdapter.mjs.map +1 -0
  772. package/dist/jsx/react-flow/flowAdapter.native.js +133 -0
  773. package/dist/jsx/react-flow/flowAdapter.native.js.map +1 -0
  774. package/dist/jsx/react-flow/graphHandle.mjs +3 -0
  775. package/dist/jsx/react-flow/graphHandle.mjs.map +1 -0
  776. package/dist/jsx/react-flow/graphHandle.native.js +31 -0
  777. package/dist/jsx/react-flow/graphHandle.native.js.map +1 -0
  778. package/dist/jsx/react-flow/nodeCensus.mjs +28 -0
  779. package/dist/jsx/react-flow/nodeCensus.mjs.map +1 -0
  780. package/dist/jsx/react-flow/nodeCensus.native.js +80 -0
  781. package/dist/jsx/react-flow/nodeCensus.native.js.map +1 -0
  782. package/dist/jsx/react-flow/useGraphController.mjs +269 -0
  783. package/dist/jsx/react-flow/useGraphController.mjs.map +1 -0
  784. package/dist/jsx/react-flow/useGraphController.native.js +393 -0
  785. package/dist/jsx/react-flow/useGraphController.native.js.map +1 -0
  786. package/dist/jsx/react-flow/xy.mjs +8 -0
  787. package/dist/jsx/react-flow/xy.mjs.map +1 -0
  788. package/dist/jsx/react-flow/xy.native.js +63 -0
  789. package/dist/jsx/react-flow/xy.native.js.map +1 -0
  790. package/dist/jsx/theme/GraphFaces.mjs +88 -0
  791. package/dist/jsx/theme/GraphFaces.mjs.map +1 -0
  792. package/dist/jsx/theme/GraphFaces.native.js +181 -0
  793. package/dist/jsx/theme/GraphFaces.native.js.map +1 -0
  794. package/dist/jsx/theme/GraphVarsStyle.mjs +59 -0
  795. package/dist/jsx/theme/GraphVarsStyle.mjs.map +1 -0
  796. package/dist/jsx/theme/GraphVarsStyle.native.js +100 -0
  797. package/dist/jsx/theme/GraphVarsStyle.native.js.map +1 -0
  798. package/dist/jsx/theme/faces.generated.mjs +23 -0
  799. package/dist/jsx/theme/faces.generated.mjs.map +1 -0
  800. package/dist/jsx/theme/faces.generated.native.js +51 -0
  801. package/dist/jsx/theme/faces.generated.native.js.map +1 -0
  802. package/dist/jsx/theme/faces.mjs +89 -0
  803. package/dist/jsx/theme/faces.mjs.map +1 -0
  804. package/dist/jsx/theme/faces.native.js +133 -0
  805. package/dist/jsx/theme/faces.native.js.map +1 -0
  806. package/dist/jsx/theme/graphVars.mjs +284 -0
  807. package/dist/jsx/theme/graphVars.mjs.map +1 -0
  808. package/dist/jsx/theme/graphVars.native.js +351 -0
  809. package/dist/jsx/theme/graphVars.native.js.map +1 -0
  810. package/dom-inner.ts +21 -0
  811. package/metro/index.js +174 -0
  812. package/metro/index.spec.mjs +235 -0
  813. package/model.ts +9 -0
  814. package/package.json +137 -0
  815. package/src/NodeGraph.native.spec.ts +164 -0
  816. package/src/NodeGraph.native.tsx +278 -0
  817. package/src/NodeGraph.tsx +27 -0
  818. package/src/bench/Perf200.stories.tsx +351 -0
  819. package/src/bench/frameSampler.spec.ts +467 -0
  820. package/src/bench/frameSampler.ts +516 -0
  821. package/src/bench/generateGraph.ts +138 -0
  822. package/src/diagnostics/GraphDiagnostics.spec.tsx +206 -0
  823. package/src/diagnostics/GraphDiagnostics.stories.tsx +194 -0
  824. package/src/diagnostics/GraphDiagnostics.tsx +140 -0
  825. package/src/diagnostics/LiveGraphDiagnostics.native.tsx +61 -0
  826. package/src/diagnostics/LiveGraphDiagnostics.tsx +121 -0
  827. package/src/diagnostics/deliberateBreak.ts +35 -0
  828. package/src/diagnostics/fromWire.spec.ts +74 -0
  829. package/src/diagnostics/fromWire.ts +48 -0
  830. package/src/diagnostics/lastError.ts +91 -0
  831. package/src/diagnostics/types.ts +103 -0
  832. package/src/diagnostics/useGraphDiagnostics.spec.tsx +199 -0
  833. package/src/diagnostics/useGraphDiagnostics.ts +85 -0
  834. package/src/dom/GraphDomLayout.spec.tsx +56 -0
  835. package/src/dom/GraphDomLayout.tsx +49 -0
  836. package/src/dom/NodeGraphDom.ts +43 -0
  837. package/src/dom/NodeGraphDomInner.tsx +524 -0
  838. package/src/dom/NodeGraphDomShell.ts +402 -0
  839. package/src/dom/boot.spec.ts +90 -0
  840. package/src/dom/boot.ts +153 -0
  841. package/src/dom/domEntry.spec.ts +481 -0
  842. package/src/dom/importGraph.spec.ts +287 -0
  843. package/src/dom/schemaRegistry.spec.tsx +182 -0
  844. package/src/dom/wire.spec.ts +486 -0
  845. package/src/dom/wire.ts +493 -0
  846. package/src/edges/Edges.stories.tsx +271 -0
  847. package/src/edges/GraphEdge.tsx +198 -0
  848. package/src/edges/edgeKinds.ts +51 -0
  849. package/src/edges/edgeStyle.spec.ts +295 -0
  850. package/src/edges/edgeStyle.ts +124 -0
  851. package/src/index.native.ts +147 -0
  852. package/src/index.ts +243 -0
  853. package/src/interaction/Lasso.stories.tsx +198 -0
  854. package/src/interaction/Snapping.stories.tsx +189 -0
  855. package/src/interaction/lassoIntercept.spec.ts +166 -0
  856. package/src/interaction/lassoIntercept.ts +81 -0
  857. package/src/interaction/legalTargets.spec.ts +304 -0
  858. package/src/interaction/legalTargets.ts +91 -0
  859. package/src/interaction/snapAlignment.spec.ts +412 -0
  860. package/src/interaction/snapAlignment.ts +209 -0
  861. package/src/interaction/snapChanges.spec.ts +273 -0
  862. package/src/interaction/snapChanges.ts +292 -0
  863. package/src/interaction/spatialHash.spec.ts +168 -0
  864. package/src/interaction/spatialHash.ts +128 -0
  865. package/src/interaction/useLassoSelect.spec.tsx +487 -0
  866. package/src/interaction/useLassoSelect.ts +489 -0
  867. package/src/knobs/KnobEnvelopeProvider.tsx +110 -0
  868. package/src/knobs/envelope.spec.tsx +371 -0
  869. package/src/knobs/envelope.ts +130 -0
  870. package/src/knobs/envelopeTheme.spec.ts +58 -0
  871. package/src/knobs/graphKnobs.ts +36 -0
  872. package/src/knobs/useKnobEnvelope.ts +152 -0
  873. package/src/layout/AutoLayout.stories.tsx +338 -0
  874. package/src/layout/dagre.ts +149 -0
  875. package/src/layout/layout.spec.ts +244 -0
  876. package/src/layout/layout.ts +121 -0
  877. package/src/layout/runner.spec.ts +365 -0
  878. package/src/layout/runner.ts +256 -0
  879. package/src/layout/structuredCloneShim.spec.ts +103 -0
  880. package/src/layout/structuredCloneShim.ts +106 -0
  881. package/src/layout/types.ts +112 -0
  882. package/src/layout/worker.entry.ts +74 -0
  883. package/src/layout/worker.generated.spec.ts +157 -0
  884. package/src/layout/worker.generated.ts +32 -0
  885. package/src/model/commands.spec.ts +214 -0
  886. package/src/model/commands.ts +209 -0
  887. package/src/model/connect.spec.ts +444 -0
  888. package/src/model/connect.ts +281 -0
  889. package/src/model/document.ts +121 -0
  890. package/src/model/history.spec.ts +278 -0
  891. package/src/model/history.ts +153 -0
  892. package/src/model/index.ts +74 -0
  893. package/src/model/schema.ts +177 -0
  894. package/src/model/select.spec.ts +220 -0
  895. package/src/model/select.ts +88 -0
  896. package/src/model/serialize.spec.ts +393 -0
  897. package/src/model/serialize.ts +395 -0
  898. package/src/native/DomOnlyStory.tsx +72 -0
  899. package/src/native/GraphFallback.native.tsx +123 -0
  900. package/src/native/GraphToolbar.tsx +171 -0
  901. package/src/native/NodeGraph.native.tsx +505 -0
  902. package/src/native/domEntryRegistry.spec.ts +66 -0
  903. package/src/native/domEntryRegistry.ts +45 -0
  904. package/src/native/graphChildren.spec.ts +67 -0
  905. package/src/native/graphChildren.ts +62 -0
  906. package/src/native/graphFallback.spec.ts +49 -0
  907. package/src/native/graphHandleRemount.spec.tsx +189 -0
  908. package/src/nodes/GraphNode.spec.tsx +270 -0
  909. package/src/nodes/GraphNode.stories.tsx +451 -0
  910. package/src/nodes/GraphNode.tsx +240 -0
  911. package/src/nodes/GraphPort.spec.tsx +442 -0
  912. package/src/nodes/GraphPort.stories.tsx +407 -0
  913. package/src/nodes/GraphPort.tsx +117 -0
  914. package/src/nodes/Overview.stories.tsx +237 -0
  915. package/src/nodes/handleGeometry.spec.ts +161 -0
  916. package/src/nodes/handleGeometry.ts +232 -0
  917. package/src/nodes/lod.spec.tsx +300 -0
  918. package/src/nodes/lod.ts +69 -0
  919. package/src/nodes/nodeMeasure.spec.ts +245 -0
  920. package/src/nodes/nodeMeasure.ts +216 -0
  921. package/src/nodes/overviewNode.tsx +71 -0
  922. package/src/packageShape.spec.ts +145 -0
  923. package/src/react-flow/ConnectionPuck.spec.tsx +242 -0
  924. package/src/react-flow/ConnectionPuck.tsx +175 -0
  925. package/src/react-flow/GraphActions.tsx +64 -0
  926. package/src/react-flow/GraphCommandBridge.spec.tsx +130 -0
  927. package/src/react-flow/GraphCommandBridge.tsx +288 -0
  928. package/src/react-flow/GraphNodeHost.tsx +101 -0
  929. package/src/react-flow/GraphPaintProbe.spec.tsx +116 -0
  930. package/src/react-flow/GraphPaintProbe.tsx +65 -0
  931. package/src/react-flow/GraphZoomVar.tsx +48 -0
  932. package/src/react-flow/LassoOverlay.tsx +59 -0
  933. package/src/react-flow/NodeGraphWeb.spec.tsx +441 -0
  934. package/src/react-flow/NodeGraphWeb.stories.tsx +260 -0
  935. package/src/react-flow/NodeGraphWeb.tsx +645 -0
  936. package/src/react-flow/SnapGuides.spec.tsx +161 -0
  937. package/src/react-flow/SnapGuides.tsx +113 -0
  938. package/src/react-flow/demoControlBody.tsx +96 -0
  939. package/src/react-flow/demoNodeBody.tsx +121 -0
  940. package/src/react-flow/fixtures.ts +185 -0
  941. package/src/react-flow/flowAdapter.ts +170 -0
  942. package/src/react-flow/graphHandle.ts +112 -0
  943. package/src/react-flow/nodeCensus.spec.ts +66 -0
  944. package/src/react-flow/nodeCensus.ts +69 -0
  945. package/src/react-flow/useGraphController.spec.tsx +849 -0
  946. package/src/react-flow/useGraphController.ts +473 -0
  947. package/src/react-flow/xy.spec.ts +182 -0
  948. package/src/react-flow/xy.ts +131 -0
  949. package/src/theme/GraphFaces.spec.tsx +101 -0
  950. package/src/theme/GraphFaces.tsx +218 -0
  951. package/src/theme/GraphVarsStyle.tsx +113 -0
  952. package/src/theme/faces.generated.ts +53 -0
  953. package/src/theme/faces.spec.ts +228 -0
  954. package/src/theme/faces.ts +275 -0
  955. package/src/theme/graphCss.spec.ts +111 -0
  956. package/src/theme/graphVars.spec.ts +322 -0
  957. package/src/theme/graphVars.ts +441 -0
  958. package/types/NodeGraph.d.ts +17 -0
  959. package/types/NodeGraph.d.ts.map +1 -0
  960. package/types/NodeGraph.native.d.ts +142 -0
  961. package/types/NodeGraph.native.d.ts.map +1 -0
  962. package/types/bench/frameSampler.d.ts +235 -0
  963. package/types/bench/frameSampler.d.ts.map +1 -0
  964. package/types/bench/generateGraph.d.ts +43 -0
  965. package/types/bench/generateGraph.d.ts.map +1 -0
  966. package/types/diagnostics/GraphDiagnostics.d.ts +30 -0
  967. package/types/diagnostics/GraphDiagnostics.d.ts.map +1 -0
  968. package/types/diagnostics/LiveGraphDiagnostics.d.ts +27 -0
  969. package/types/diagnostics/LiveGraphDiagnostics.d.ts.map +1 -0
  970. package/types/diagnostics/LiveGraphDiagnostics.native.d.ts +25 -0
  971. package/types/diagnostics/LiveGraphDiagnostics.native.d.ts.map +1 -0
  972. package/types/diagnostics/deliberateBreak.d.ts +28 -0
  973. package/types/diagnostics/deliberateBreak.d.ts.map +1 -0
  974. package/types/diagnostics/fromWire.d.ts +17 -0
  975. package/types/diagnostics/fromWire.d.ts.map +1 -0
  976. package/types/diagnostics/lastError.d.ts +50 -0
  977. package/types/diagnostics/lastError.d.ts.map +1 -0
  978. package/types/diagnostics/types.d.ts +101 -0
  979. package/types/diagnostics/types.d.ts.map +1 -0
  980. package/types/diagnostics/useGraphDiagnostics.d.ts +23 -0
  981. package/types/diagnostics/useGraphDiagnostics.d.ts.map +1 -0
  982. package/types/dom/GraphDomLayout.d.ts +40 -0
  983. package/types/dom/GraphDomLayout.d.ts.map +1 -0
  984. package/types/dom/NodeGraphDom.d.ts +4 -0
  985. package/types/dom/NodeGraphDom.d.ts.map +1 -0
  986. package/types/dom/NodeGraphDomInner.d.ts +26 -0
  987. package/types/dom/NodeGraphDomInner.d.ts.map +1 -0
  988. package/types/dom/NodeGraphDomShell.d.ts +221 -0
  989. package/types/dom/NodeGraphDomShell.d.ts.map +1 -0
  990. package/types/dom/boot.d.ts +90 -0
  991. package/types/dom/boot.d.ts.map +1 -0
  992. package/types/dom/wire.d.ts +355 -0
  993. package/types/dom/wire.d.ts.map +1 -0
  994. package/types/edges/GraphEdge.d.ts +59 -0
  995. package/types/edges/GraphEdge.d.ts.map +1 -0
  996. package/types/edges/edgeKinds.d.ts +43 -0
  997. package/types/edges/edgeKinds.d.ts.map +1 -0
  998. package/types/edges/edgeStyle.d.ts +79 -0
  999. package/types/edges/edgeStyle.d.ts.map +1 -0
  1000. package/types/index.d.ts +123 -0
  1001. package/types/index.d.ts.map +1 -0
  1002. package/types/index.native.d.ts +86 -0
  1003. package/types/index.native.d.ts.map +1 -0
  1004. package/types/interaction/lassoIntercept.d.ts +58 -0
  1005. package/types/interaction/lassoIntercept.d.ts.map +1 -0
  1006. package/types/interaction/legalTargets.d.ts +59 -0
  1007. package/types/interaction/legalTargets.d.ts.map +1 -0
  1008. package/types/interaction/snapAlignment.d.ts +85 -0
  1009. package/types/interaction/snapAlignment.d.ts.map +1 -0
  1010. package/types/interaction/snapChanges.d.ts +133 -0
  1011. package/types/interaction/snapChanges.d.ts.map +1 -0
  1012. package/types/interaction/spatialHash.d.ts +37 -0
  1013. package/types/interaction/spatialHash.d.ts.map +1 -0
  1014. package/types/interaction/useLassoSelect.d.ts +151 -0
  1015. package/types/interaction/useLassoSelect.d.ts.map +1 -0
  1016. package/types/knobs/KnobEnvelopeProvider.d.ts +45 -0
  1017. package/types/knobs/KnobEnvelopeProvider.d.ts.map +1 -0
  1018. package/types/knobs/envelope.d.ts +99 -0
  1019. package/types/knobs/envelope.d.ts.map +1 -0
  1020. package/types/knobs/graphKnobs.d.ts +26 -0
  1021. package/types/knobs/graphKnobs.d.ts.map +1 -0
  1022. package/types/knobs/useKnobEnvelope.d.ts +43 -0
  1023. package/types/knobs/useKnobEnvelope.d.ts.map +1 -0
  1024. package/types/layout/dagre.d.ts +39 -0
  1025. package/types/layout/dagre.d.ts.map +1 -0
  1026. package/types/layout/layout.d.ts +58 -0
  1027. package/types/layout/layout.d.ts.map +1 -0
  1028. package/types/layout/runner.d.ts +60 -0
  1029. package/types/layout/runner.d.ts.map +1 -0
  1030. package/types/layout/structuredCloneShim.d.ts +44 -0
  1031. package/types/layout/structuredCloneShim.d.ts.map +1 -0
  1032. package/types/layout/types.d.ts +113 -0
  1033. package/types/layout/types.d.ts.map +1 -0
  1034. package/types/layout/worker.entry.d.ts +34 -0
  1035. package/types/layout/worker.entry.d.ts.map +1 -0
  1036. package/types/layout/worker.generated.d.ts +26 -0
  1037. package/types/layout/worker.generated.d.ts.map +1 -0
  1038. package/types/model/commands.d.ts +49 -0
  1039. package/types/model/commands.d.ts.map +1 -0
  1040. package/types/model/connect.d.ts +83 -0
  1041. package/types/model/connect.d.ts.map +1 -0
  1042. package/types/model/document.d.ts +111 -0
  1043. package/types/model/document.d.ts.map +1 -0
  1044. package/types/model/history.d.ts +40 -0
  1045. package/types/model/history.d.ts.map +1 -0
  1046. package/types/model/index.d.ts +20 -0
  1047. package/types/model/index.d.ts.map +1 -0
  1048. package/types/model/schema.d.ts +136 -0
  1049. package/types/model/schema.d.ts.map +1 -0
  1050. package/types/model/select.d.ts +41 -0
  1051. package/types/model/select.d.ts.map +1 -0
  1052. package/types/model/serialize.d.ts +33 -0
  1053. package/types/model/serialize.d.ts.map +1 -0
  1054. package/types/native/DomOnlyStory.d.ts +49 -0
  1055. package/types/native/DomOnlyStory.d.ts.map +1 -0
  1056. package/types/native/GraphFallback.native.d.ts +41 -0
  1057. package/types/native/GraphFallback.native.d.ts.map +1 -0
  1058. package/types/native/GraphToolbar.d.ts +75 -0
  1059. package/types/native/GraphToolbar.d.ts.map +1 -0
  1060. package/types/native/NodeGraph.native.d.ts +128 -0
  1061. package/types/native/NodeGraph.native.d.ts.map +1 -0
  1062. package/types/native/domEntryRegistry.d.ts +33 -0
  1063. package/types/native/domEntryRegistry.d.ts.map +1 -0
  1064. package/types/native/graphChildren.d.ts +36 -0
  1065. package/types/native/graphChildren.d.ts.map +1 -0
  1066. package/types/nodes/GraphNode.d.ts +48 -0
  1067. package/types/nodes/GraphNode.d.ts.map +1 -0
  1068. package/types/nodes/GraphPort.d.ts +41 -0
  1069. package/types/nodes/GraphPort.d.ts.map +1 -0
  1070. package/types/nodes/handleGeometry.d.ts +183 -0
  1071. package/types/nodes/handleGeometry.d.ts.map +1 -0
  1072. package/types/nodes/lod.d.ts +55 -0
  1073. package/types/nodes/lod.d.ts.map +1 -0
  1074. package/types/nodes/nodeMeasure.d.ts +146 -0
  1075. package/types/nodes/nodeMeasure.d.ts.map +1 -0
  1076. package/types/nodes/overviewNode.d.ts +34 -0
  1077. package/types/nodes/overviewNode.d.ts.map +1 -0
  1078. package/types/react-flow/ConnectionPuck.d.ts +62 -0
  1079. package/types/react-flow/ConnectionPuck.d.ts.map +1 -0
  1080. package/types/react-flow/GraphActions.d.ts +45 -0
  1081. package/types/react-flow/GraphActions.d.ts.map +1 -0
  1082. package/types/react-flow/GraphCommandBridge.d.ts +45 -0
  1083. package/types/react-flow/GraphCommandBridge.d.ts.map +1 -0
  1084. package/types/react-flow/GraphNodeHost.d.ts +32 -0
  1085. package/types/react-flow/GraphNodeHost.d.ts.map +1 -0
  1086. package/types/react-flow/GraphPaintProbe.d.ts +26 -0
  1087. package/types/react-flow/GraphPaintProbe.d.ts.map +1 -0
  1088. package/types/react-flow/GraphZoomVar.d.ts +31 -0
  1089. package/types/react-flow/GraphZoomVar.d.ts.map +1 -0
  1090. package/types/react-flow/LassoOverlay.d.ts +39 -0
  1091. package/types/react-flow/LassoOverlay.d.ts.map +1 -0
  1092. package/types/react-flow/NodeGraphWeb.d.ts +195 -0
  1093. package/types/react-flow/NodeGraphWeb.d.ts.map +1 -0
  1094. package/types/react-flow/SnapGuides.d.ts +49 -0
  1095. package/types/react-flow/SnapGuides.d.ts.map +1 -0
  1096. package/types/react-flow/demoControlBody.d.ts +47 -0
  1097. package/types/react-flow/demoControlBody.d.ts.map +1 -0
  1098. package/types/react-flow/demoNodeBody.d.ts +37 -0
  1099. package/types/react-flow/demoNodeBody.d.ts.map +1 -0
  1100. package/types/react-flow/fixtures.d.ts +107 -0
  1101. package/types/react-flow/fixtures.d.ts.map +1 -0
  1102. package/types/react-flow/flowAdapter.d.ts +56 -0
  1103. package/types/react-flow/flowAdapter.d.ts.map +1 -0
  1104. package/types/react-flow/graphHandle.d.ts +90 -0
  1105. package/types/react-flow/graphHandle.d.ts.map +1 -0
  1106. package/types/react-flow/nodeCensus.d.ts +42 -0
  1107. package/types/react-flow/nodeCensus.d.ts.map +1 -0
  1108. package/types/react-flow/useGraphController.d.ts +93 -0
  1109. package/types/react-flow/useGraphController.d.ts.map +1 -0
  1110. package/types/react-flow/xy.d.ts +84 -0
  1111. package/types/react-flow/xy.d.ts.map +1 -0
  1112. package/types/theme/GraphFaces.d.ts +82 -0
  1113. package/types/theme/GraphFaces.d.ts.map +1 -0
  1114. package/types/theme/GraphVarsStyle.d.ts +56 -0
  1115. package/types/theme/GraphVarsStyle.d.ts.map +1 -0
  1116. package/types/theme/faces.d.ts +152 -0
  1117. package/types/theme/faces.d.ts.map +1 -0
  1118. package/types/theme/faces.generated.d.ts +27 -0
  1119. package/types/theme/faces.generated.d.ts.map +1 -0
  1120. package/types/theme/graphVars.d.ts +155 -0
  1121. package/types/theme/graphVars.d.ts.map +1 -0
@@ -0,0 +1,32 @@
1
+ /**
2
+ * GENERATED by scripts/build-layout-worker.mjs. Do not edit.
3
+ *
4
+ * The layout worker — `src/layout/worker.entry.ts` plus @dagrejs/dagre —
5
+ * bundled to a CLASSIC IIFE and committed as a string, design §8.
6
+ *
7
+ * Run `node scripts/build-layout-worker.mjs` to rebuild and
8
+ * `node scripts/build-layout-worker.mjs --check` to prove it is current. The
9
+ * package's own `build` script runs the check as its prefix and
10
+ * `worker.generated.spec.ts` re-runs the bundler in process, so a stale
11
+ * string cannot ship.
12
+ *
13
+ * Measured at generation time:
14
+ *
15
+ * 50,854 bytes, esbuild 0.28.2
16
+ * sha256 d8f40e8264dee88e361017837607069470eea6f61591cef70bb4b29c0e3a09dd
17
+ *
18
+ * It is instantiated as `new Worker(URL.createObjectURL(new Blob([source])))`
19
+ * — no module type, no origin, no bundler cooperation — because the WebView an
20
+ * Expo DOM component runs has none of those things. `import.meta` and
21
+ * `elkjs` are both asserted absent from this string by the spec.
22
+ */
23
+
24
+ // A 50 KB literal. The formatter would rewrap the assignment and switch the
25
+ // quote style, and `--check` compares this file byte for byte.
26
+ // oxfmt-ignore
27
+ export const layoutWorkerSource: string = "\"use strict\";(()=>{var je=Object.defineProperty,ot=(e,t,r)=>t in e?je(e,t,{enumerable:!0,configurable:!0,writable:!0,value:r}):e[t]=r,it=(e,t)=>{for(var r in t)je(e,r,{get:t[r],enumerable:!0})},st=(e,t,r)=>ot(e,typeof t!=\"symbol\"?t+\"\":t,r),dt={};it(dt,{Graph:()=>T,alg:()=>ne});var lt=Object.defineProperty,Ce=(e,t)=>{for(var r in t)lt(e,r,{get:t[r],enumerable:!0})},re=class{constructor(e){this._isDirected=!0,this._isMultigraph=!1,this._isCompound=!1,this._nodes={},this._in={},this._preds={},this._out={},this._sucs={},this._edgeObjs={},this._edgeLabels={},this._nodeCount=0,this._edgeCount=0,this._defaultNodeLabelFn=()=>{},this._defaultEdgeLabelFn=()=>{},e&&(this._isDirected=\"directed\"in e?e.directed:!0,this._isMultigraph=\"multigraph\"in e?e.multigraph:!1,this._isCompound=\"compound\"in e?e.compound:!1),this._isCompound&&(this._parent={},this._children={},this._children[\"\\0\"]={})}isDirected(){return this._isDirected}isMultigraph(){return this._isMultigraph}isCompound(){return this._isCompound}setGraph(e){return this._label=e,this}graph(){return this._label}setDefaultNodeLabel(e){return typeof e!=\"function\"?this._defaultNodeLabelFn=()=>e:this._defaultNodeLabelFn=e,this}nodeCount(){return this._nodeCount}nodes(){return Object.keys(this._nodes)}sources(){return this.nodes().filter(e=>Object.keys(this._in[e]).length===0)}sinks(){return this.nodes().filter(e=>Object.keys(this._out[e]).length===0)}setNodes(e,t){return e.forEach(r=>{t!==void 0?this.setNode(r,t):this.setNode(r)}),this}setNode(e,t){return e in this._nodes?(arguments.length>1&&(this._nodes[e]=t),this):(this._nodes[e]=arguments.length>1?t:this._defaultNodeLabelFn(e),this._isCompound&&(this._parent[e]=\"\\0\",this._children[e]={},this._children[\"\\0\"][e]=!0),this._in[e]={},this._preds[e]={},this._out[e]={},this._sucs[e]={},++this._nodeCount,this)}node(e){return this._nodes[e]}hasNode(e){return e in this._nodes}removeNode(e){if(e in this._nodes){let t=r=>this.removeEdge(this._edgeObjs[r]);delete this._nodes[e],this._isCompound&&(this._removeFromParentsChildList(e),delete this._parent[e],this.children(e).forEach(r=>{this.setParent(r)}),delete this._children[e]),Object.keys(this._in[e]).forEach(t),delete this._in[e],delete this._preds[e],Object.keys(this._out[e]).forEach(t),delete this._out[e],delete this._sucs[e],--this._nodeCount}return this}setParent(e,t){if(!this._isCompound)throw new Error(\"Cannot set parent in a non-compound graph\");if(t===void 0)t=\"\\0\";else{t+=\"\";for(let r=t;r!==void 0;r=this.parent(r))if(r===e)throw new Error(\"Setting \"+t+\" as parent of \"+e+\" would create a cycle\");this.setNode(t)}return this.setNode(e),this._removeFromParentsChildList(e),this._parent[e]=t,this._children[t][e]=!0,this}parent(e){if(this._isCompound){let t=this._parent[e];if(t!==\"\\0\")return t}}children(e=\"\\0\"){if(this._isCompound){let t=this._children[e];if(t)return Object.keys(t)}else{if(e===\"\\0\")return this.nodes();if(this.hasNode(e))return[]}return[]}predecessors(e){let t=this._preds[e];if(t)return Object.keys(t)}successors(e){let t=this._sucs[e];if(t)return Object.keys(t)}neighbors(e){let t=this.predecessors(e);if(t){let r=new Set(t),n=this.successors(e);if(n)for(let o of n)r.add(o);return Array.from(r.values())}}isLeaf(e){var t;let r;return this.isDirected()?r=this.successors(e):r=this.neighbors(e),((t=r==null?void 0:r.length)!=null?t:0)===0}filterNodes(e){let t=new this.constructor({directed:this._isDirected,multigraph:this._isMultigraph,compound:this._isCompound});t.setGraph(this.graph()),Object.entries(this._nodes).forEach(([o,i])=>{e(o)&&t.setNode(o,i)}),Object.values(this._edgeObjs).forEach(o=>{t.hasNode(o.v)&&t.hasNode(o.w)&&t.setEdge(o,this.edge(o))});let r={},n=o=>{let i=this.parent(o);return!i||t.hasNode(i)?(r[o]=i,i):i in r?r[i]:n(i)};return this._isCompound&&t.nodes().forEach(o=>t.setParent(o,n(o))),t}setDefaultEdgeLabel(e){return typeof e!=\"function\"?this._defaultEdgeLabelFn=()=>e:this._defaultEdgeLabelFn=e,this}edgeCount(){return this._edgeCount}edges(){return Object.values(this._edgeObjs)}setPath(e,t){return e.reduce((r,n)=>(t!==void 0?this.setEdge(r,n,t):this.setEdge(r,n),n)),this}setEdge(e,t,r,n){let o,i,s,d,a=!1;typeof e==\"object\"&&e!==null&&\"v\"in e?(o=e.v,i=e.w,s=e.name,arguments.length===2&&(d=t,a=!0)):(o=e,i=t,s=n,arguments.length>2&&(d=r,a=!0)),o=\"\"+o,i=\"\"+i,s!==void 0&&(s=\"\"+s);let l=A(this._isDirected,o,i,s);if(l in this._edgeLabels)return a&&(this._edgeLabels[l]=d),this;if(s!==void 0&&!this._isMultigraph)throw new Error(\"Cannot set a named edge when isMultigraph = false\");this.setNode(o),this.setNode(i),this._edgeLabels[l]=a?d:this._defaultEdgeLabelFn(o,i,s);let u=at(this._isDirected,o,i,s);return o=u.v,i=u.w,Object.freeze(u),this._edgeObjs[l]=u,ae(this._preds[i],o),ae(this._sucs[o],i),this._in[i][l]=u,this._out[o][l]=u,this._edgeCount++,this}edge(e,t,r){let n=arguments.length===1?K(this._isDirected,e):A(this._isDirected,e,t,r);return this._edgeLabels[n]}edgeAsObj(e,t,r){let n=arguments.length===1?this.edge(e):this.edge(e,t,r);return typeof n!=\"object\"||n===null?{label:n}:n}hasEdge(e,t,r){return(arguments.length===1?K(this._isDirected,e):A(this._isDirected,e,t,r))in this._edgeLabels}removeEdge(e,t,r){let n=arguments.length===1?K(this._isDirected,e):A(this._isDirected,e,t,r),o=this._edgeObjs[n];if(o){let i=o.v,s=o.w;delete this._edgeLabels[n],delete this._edgeObjs[n],ue(this._preds[s],i),ue(this._sucs[i],s),delete this._in[s][n],delete this._out[i][n],this._edgeCount--}return this}inEdges(e,t){return this.isDirected()?this.filterEdges(this._in[e],e,t):this.nodeEdges(e,t)}outEdges(e,t){return this.isDirected()?this.filterEdges(this._out[e],e,t):this.nodeEdges(e,t)}nodeEdges(e,t){if(e in this._nodes)return this.filterEdges({...this._in[e],...this._out[e]},e,t)}_removeFromParentsChildList(e){delete this._children[this._parent[e]][e]}filterEdges(e,t,r){if(!e)return;let n=Object.values(e);return r?n.filter(o=>o.v===t&&o.w===r||o.v===r&&o.w===t):n}};function ae(e,t){e[t]?e[t]++:e[t]=1}function ue(e,t){e[t]!==void 0&&!--e[t]&&delete e[t]}function A(e,t,r,n){let o=\"\"+t,i=\"\"+r;if(!e&&o>i){let s=o;o=i,i=s}return o+\"\u0001\"+i+\"\u0001\"+(n===void 0?\"\\0\":n)}function at(e,t,r,n){let o=\"\"+t,i=\"\"+r;if(!e&&o>i){let d=o;o=i,i=d}let s={v:o,w:i};return n&&(s.name=n),s}function K(e,t){return A(e,t.v,t.w,t.name)}var ut={};Ce(ut,{read:()=>gt,write:()=>ht});function ht(e){let t={options:{directed:e.isDirected(),multigraph:e.isMultigraph(),compound:e.isCompound()},nodes:ct(e),edges:ft(e)},r=e.graph();return r!==void 0&&(t.value=structuredClone(r)),t}function ct(e){return e.nodes().map(t=>{let r=e.node(t),n=e.parent(t),o={v:t};return r!==void 0&&(o.value=r),n!==void 0&&(o.parent=n),o})}function ft(e){return e.edges().map(t=>{let r=e.edge(t),n={v:t.v,w:t.w};return t.name!==void 0&&(n.name=t.name),r!==void 0&&(n.value=r),n})}function gt(e){let t=new re(e.options);return e.value!==void 0&&t.setGraph(e.value),e.nodes.forEach(r=>{t.setNode(r.v,r.value),r.parent&&t.setParent(r.v,r.parent)}),e.edges.forEach(r=>{t.setEdge({v:r.v,w:r.w,name:r.name},r.value)}),t}var ne={};Ce(ne,{CycleException:()=>W,bellmanFord:()=>Le,components:()=>wt,dijkstra:()=>B,dijkstraAll:()=>Et,findCycles:()=>yt,floydWarshall:()=>kt,isAcyclic:()=>Nt,postorder:()=>It,preorder:()=>jt,prim:()=>Ct,shortestPaths:()=>Lt,tarjan:()=>Me,topsort:()=>Te});var pt=()=>1;function Le(e,t,r,n){return mt(e,String(t),r||pt,n||function(o){var i;return(i=e.outEdges(o))!=null?i:[]})}function mt(e,t,r,n){let o={},i,s=0,d=e.nodes(),a=function(h){let c=o[h.v],g=o[h.w];if(!c||!g)return;let w=r(h);c.distance+w<g.distance&&(o[h.w]={distance:c.distance+w,predecessor:h.v},i=!0)},l=function(){d.forEach(function(h){n(h).forEach(function(c){let g=c.v===h?c.v:c.w,w=g===c.v?c.w:c.v;a({v:g,w})})})};d.forEach(function(h){let c=h===t?0:Number.POSITIVE_INFINITY;o[h]={distance:c,predecessor:\"\"}});let u=d.length;for(let h=1;h<u&&(i=!1,s++,l(),!!i);h++);if(s===u-1&&(i=!1,l(),i))throw new Error(\"The graph contains a negative weight cycle\");return o}function wt(e){let t={},r=[],n;function o(i){var s,d;i in t||(t[i]=!0,n.push(i),(s=e.successors(i))==null||s.forEach(o),(d=e.predecessors(i))==null||d.forEach(o))}return e.nodes().forEach(function(i){n=[],o(i),n.length&&r.push(n)}),r}var Se=class{constructor(){this._arr=[],this._keyIndices={}}size(){return this._arr.length}keys(){return this._arr.map(e=>e.key)}has(e){return e in this._keyIndices}priority(e){let t=this._keyIndices[e];if(t!==void 0)return this._arr[t].priority}min(){if(this.size()===0)throw new Error(\"Queue underflow\");return this._arr[0].key}add(e,t){let r=this._keyIndices,n=String(e);if(!(n in r)){let o=this._arr,i=o.length;return r[n]=i,o.push({key:n,priority:t}),this._decrease(i),!0}return!1}removeMin(){if(this.size()===0)throw new Error(\"Queue underflow\");this._swap(0,this._arr.length-1);let e=this._arr.pop();return delete this._keyIndices[e.key],this._heapify(0),e.key}decrease(e,t){let r=this._keyIndices[e];if(r===void 0)throw new Error(`Key not found: ${e}`);let n=this._arr[r].priority;if(t>n)throw new Error(`New priority is greater than current priority. Key: ${e} Old: ${n} New: ${t}`);this._arr[r].priority=t,this._decrease(r)}_heapify(e){let t=this._arr,r=2*e,n=r+1,o=e;r<t.length&&(o=t[r].priority<t[o].priority?r:o,n<t.length&&(o=t[n].priority<t[o].priority?n:o),o!==e&&(this._swap(e,o),this._heapify(o)))}_decrease(e){let t=this._arr,r=t[e].priority,n;for(;e!==0&&(n=e>>1,!(t[n].priority<r));)this._swap(e,n),e=n}_swap(e,t){let r=this._arr,n=this._keyIndices,o=r[e],i=r[t];r[e]=i,r[t]=o,n[i.key]=e,n[o.key]=t}},vt=()=>1;function B(e,t,r,n){let o=function(i){var s;return(s=e.outEdges(i))!=null?s:[]};return bt(e,String(t),r||vt,n||o)}function bt(e,t,r,n){let o={},i=new Se,s,d,a=function(l){let u=l.v!==s?l.v:l.w,h=o[u];if(!h)return;let c=r(l),g=d.distance+c;if(c<0)throw new Error(\"dijkstra does not allow negative edge weights. Bad edge: \"+l+\" Weight: \"+c);g<h.distance&&(h.distance=g,h.predecessor=s,i.decrease(u,g))};for(e.nodes().forEach(function(l){let u=l===t?0:Number.POSITIVE_INFINITY;o[l]={distance:u,predecessor:\"\"},i.add(l,u)});i.size()>0;){s=i.removeMin();let l=o[s];if(!l||l.distance===Number.POSITIVE_INFINITY)break;d=l,n(s).forEach(a)}return o}function Et(e,t,r){return e.nodes().reduce(function(n,o){return n[o]=B(e,o,t,r),n},{})}function Me(e){let t=0,r=[],n={},o=[];function i(s){var d;let a=n[s]={onStack:!0,lowlink:t,index:t++};if(r.push(s),(d=e.successors(s))==null||d.forEach(function(l){if(l in n){let u=n[l];u!=null&&u.onStack&&(a.lowlink=Math.min(a.lowlink,u.index))}else{i(l);let u=n[l];u&&(a.lowlink=Math.min(a.lowlink,u.lowlink))}}),a.lowlink===a.index){let l=[],u;do{u=r.pop();let h=n[u];h&&(h.onStack=!1),l.push(u)}while(s!==u);o.push(l)}}return e.nodes().forEach(function(s){s in n||i(s)}),o}function yt(e){return Me(e).filter(function(t){var r;let n=t[0];return n?t.length>1||t.length===1&&((r=e.outEdges(n,n))!=null?r:[]).length>0:!1})}var _t=()=>1;function kt(e,t,r){return xt(e,t||_t,r||function(n){var o;return(o=e.outEdges(n))!=null?o:[]})}function xt(e,t,r){let n={},o=e.nodes();return o.forEach(function(i){let s={};n[i]=s,s[i]={distance:0,predecessor:\"\"},o.forEach(function(d){i!==d&&(s[d]={distance:Number.POSITIVE_INFINITY,predecessor:\"\"})}),r(i).forEach(function(d){let a=d.v===i?d.w:d.v,l=t(d);s[a]={distance:l,predecessor:i}})}),o.forEach(function(i){let s=n[i];s&&o.forEach(function(d){let a=n[d];a&&o.forEach(function(l){let u=a[i],h=s[l],c=a[l];if(u&&h&&c){let g=u.distance+h.distance;g<c.distance&&(c.distance=g,c.predecessor=h.predecessor)}})})}),n}var W=class extends Error{constructor(e){super(e),this.name=\"CycleException\"}};function Te(e){let t={},r={},n=[];function o(i){var s;if(i in r)throw new W;i in t||(r[i]=!0,t[i]=!0,(s=e.predecessors(i))==null||s.forEach(o),delete r[i],n.push(i))}if(e.sinks().forEach(o),Object.keys(t).length!==e.nodeCount())throw new W;return n}function Nt(e){try{Te(e)}catch(t){if(t instanceof W)return!1;throw t}return!0}function Ot(e,t,r,n,o){Array.isArray(t)||(t=[t]);let i=(d=>{var a;return(a=e.isDirected()?e.successors(d):e.neighbors(d))!=null?a:[]}),s={};return t.forEach(function(d){if(!e.hasNode(d))throw new Error(\"Graph does not have node: \"+d);o=Re(e,d,r===\"post\",s,i,n,o)}),o}function Re(e,t,r,n,o,i,s){return t in n||(n[t]=!0,r||(s=i(s,t)),o(t).forEach(function(d){s=Re(e,d,r,n,o,i,s)}),r&&(s=i(s,t))),s}function Pe(e,t,r){return Ot(e,t,r,function(n,o){return n.push(o),n},[])}function It(e,t){return Pe(e,t,\"post\")}function jt(e,t){return Pe(e,t,\"pre\")}function Ct(e,t){var r;let n=new re,o={},i=new Se,s;function d(u){let h=u.v===s?u.w:u.v,c=i.priority(h);if(c!==void 0){let g=t(u);g<c&&(o[h]=s,i.decrease(h,g))}}if(e.nodeCount()===0)return n;e.nodes().forEach(function(u){i.add(u,Number.POSITIVE_INFINITY),n.setNode(u)});let a=e.nodes()[0];a!==void 0&&i.decrease(a,0);let l=!1;for(;i.size()>0;){if(s=i.removeMin(),s in o)n.setEdge(s,o[s]);else{if(l)throw new Error(\"Input graph is not connected: \"+e);l=!0}(r=e.nodeEdges(s))==null||r.forEach(d)}return n}function Lt(e,t,r,n){return St(e,t,r,n!=null?n:(o=>{var i;return(i=e.outEdges(o))!=null?i:[]}))}function St(e,t,r,n){if(r===void 0)return B(e,t,r,n);let o=!1,i=e.nodes();for(let s=0;s<i.length;s++){let d=i[s];if(d===void 0)continue;let a=n(d);for(let l=0;l<a.length;l++){let u=a[l];if(!u)continue;let h=u.v===d?u.v:u.w,c=h===u.v?u.w:u.v;r({v:h,w:c})<0&&(o=!0)}if(o)return Le(e,t,r,n)}return B(e,t,r,n)}var T=re;function D(e,t,r,n){let o=n;for(;e.hasNode(o);)o=oe(n);return r.dummy=t,e.setNode(o,r),o}function Mt(e){let t=new T().setGraph(e.graph());return e.nodes().forEach(r=>t.setNode(r,e.node(r))),e.edges().forEach(r=>{let n=t.edge(r.v,r.w)||{weight:0,minlen:1},o=e.edge(r);t.setEdge(r.v,r.w,{weight:n.weight+o.weight,minlen:Math.max(n.minlen,o.minlen)})}),t}function Fe(e){let t=new T({multigraph:e.isMultigraph()}).setGraph(e.graph());return e.nodes().forEach(r=>{e.children(r).length||t.setNode(r,e.node(r))}),e.edges().forEach(r=>{t.setEdge(r,e.edge(r))}),t}function he(e,t){let r=e.x,n=e.y,o=t.x-r,i=t.y-n,s=e.width/2,d=e.height/2;if(!o&&!i)throw new Error(\"Not possible to find intersection inside of the rectangle\");let a,l;return Math.abs(i)*s>Math.abs(o)*d?(i<0&&(d=-d),a=d*o/i,l=d):(o<0&&(s=-s),a=s,l=s*i/o),{x:r+a,y:n+l}}function q(e){let t=G(De(e)+1).map(()=>[]);return e.nodes().forEach(r=>{let n=e.node(r),o=n.rank;o!==void 0&&(t[o]||(t[o]=[]),t[o][n.order]=r)}),t}function Tt(e){let t=e.nodes().map(n=>{let o=e.node(n).rank;return o===void 0?Number.MAX_VALUE:o}),r=R(Math.min,t);e.nodes().forEach(n=>{let o=e.node(n);Object.hasOwn(o,\"rank\")&&(o.rank-=r)})}function Rt(e){let t=e.nodes().map(s=>e.node(s).rank).filter(s=>s!==void 0),r=R(Math.min,t),n=[];e.nodes().forEach(s=>{let d=e.node(s).rank-r;n[d]||(n[d]=[]),n[d].push(s)});let o=0,i=e.graph().nodeRankFactor;Array.from(n).forEach((s,d)=>{s===void 0&&d%i!==0?--o:s!==void 0&&o&&s.forEach(a=>e.node(a).rank+=o)})}function ce(e,t,r,n){let o={width:0,height:0};return arguments.length>=4&&(o.rank=r,o.order=n),D(e,\"border\",o,t)}function Pt(e,t=Ye){let r=[];for(let n=0;n<e.length;n+=t){let o=e.slice(n,n+t);r.push(o)}return r}var Ye=65535;function R(e,t){if(t.length>Ye){let r=Pt(t);return e(...r.map(n=>e(...n)))}else return e(...t)}function De(e){let t=e.nodes().map(r=>{let n=e.node(r).rank;return n===void 0?Number.MIN_VALUE:n});return R(Math.max,t)}function Ft(e,t){let r={lhs:[],rhs:[]};return e.forEach(n=>{t(n)?r.lhs.push(n):r.rhs.push(n)}),r}function Yt(e,t){return t()}var Dt=0;function oe(e){let t=++Dt;return e+(\"\"+t)}function G(e,t,r=1){t==null&&(t=e,e=0);let n=i=>i<t;r<0&&(n=i=>t<i);let o=[];for(let i=e;n(i);i+=r)o.push(i);return o}function X(e,t){let r={};for(let n of t)e[n]!==void 0&&(r[n]=e[n]);return r}function z(e,t){let r;return typeof t==\"string\"?r=n=>n[t]:r=t,Object.entries(e).reduce((n,[o,i])=>(n[o]=r(i,o),n),{})}function Vt(e,t){return e.reduce((r,n,o)=>(r[n]=t[o],r),{})}var $=\"\\0\";function Ve(e,t,r){var n,o,i,s,d,a;if(!(e&&t&&r&&t.dummy===\"edge\"&&r.dummy===\"edge\"&&t.edgeObj&&r.edgeObj&&e[t.edgeObj.v]&&e[r.edgeObj.v]&&e[t.edgeObj.w]&&e[r.edgeObj.w]))return 0;let l=!0;t.edgeObj.w===r.edgeObj.w&&(l=!1);let u=l?(o=(n=e[t.edgeObj.v])==null?void 0:n.rank)!=null?o:NaN+1:(s=(i=e[t.edgeObj.w])==null?void 0:i.rank)!=null?s:NaN-1,h=Object.entries(e).find(b=>{var y,v;return((y=b[1].edgeObj)==null?void 0:y.v)===t.edgeObj.v&&((v=b[1].edgeObj)==null?void 0:v.w)===t.edgeObj.w&&b[1].rank===u}),c=Object.entries(e).find(b=>{var y,v;return((y=b[1].edgeObj)==null?void 0:y.v)===r.edgeObj.v&&((v=b[1].edgeObj)==null?void 0:v.w)===r.edgeObj.w&&b[1].rank===u});if(!h||!c)return 0;let g=(d=h[1].order)!=null?d:NaN,w=(a=c[1].order)!=null?a:NaN;return isNaN(g-w)?0:g-w}var At=class{constructor(){st(this,\"_sentinel\");let e={};e._next=e._prev=e,this._sentinel=e}dequeue(){let e=this._sentinel,t=e._prev;if(t!==e)return fe(t),t}enqueue(e){let t=this._sentinel;e._prev&&e._next&&fe(e),e._next=t._next,t._next._prev=e,t._next=e,e._prev=t}toString(){let e=[],t=this._sentinel,r=t._prev;for(;r!==t;)e.push(JSON.stringify(r,Gt)),r=r._prev;return\"[\"+e.join(\", \")+\"]\"}};function fe(e){e._prev._next=e._next,e._next._prev=e._prev,delete e._next,delete e._prev}function Gt(e,t){if(e!==\"_next\"&&e!==\"_prev\")return t}var Bt=At,Wt=()=>1;function Xt(e,t){if(e.nodeCount()<=1)return[];let r=zt(e,t||Wt);return qt(r.graph,r.buckets,r.zeroIdx).flatMap(n=>e.outEdges(n.v,n.w)||[])}function qt(e,t,r){var n;let o=[],i=t[t.length-1],s=t[0],d;for(;e.nodeCount();){for(;d=s.dequeue();)Q(e,t,r,d);for(;d=i.dequeue();)Q(e,t,r,d);if(e.nodeCount()){for(let a=t.length-2;a>0;--a)if(d=(n=t[a])==null?void 0:n.dequeue(),d){o=o.concat(Q(e,t,r,d,!0)||[]);break}}}return o}function Q(e,t,r,n,o){let i=[],s=o?i:void 0;return(e.inEdges(n.v)||[]).forEach(d=>{let a=e.edge(d),l=e.node(d.v);o&&i.push({v:d.v,w:d.w}),l.out-=a,te(t,r,l)}),(e.outEdges(n.v)||[]).forEach(d=>{let a=e.edge(d),l=d.w,u=e.node(l);u.in-=a,te(t,r,u)}),e.removeNode(n.v),s}function zt(e,t){let r=new T,n=0,o=0;e.nodes().forEach(d=>{r.setNode(d,{v:d,in:0,out:0})}),e.edges().forEach(d=>{let a=r.edge(d.v,d.w)||0,l=t(d),u=a+l;r.setEdge(d.v,d.w,u);let h=r.node(d.v),c=r.node(d.w);o=Math.max(o,h.out+=l),n=Math.max(n,c.in+=l)});let i=$t(o+n+3).map(()=>new Bt),s=n+1;return r.nodes().forEach(d=>{te(i,s,r.node(d))}),{graph:r,buckets:i,zeroIdx:s}}function te(e,t,r){var n,o,i;r.out?r.in?(i=e[r.out-r.in+t])==null||i.enqueue(r):(o=e[e.length-1])==null||o.enqueue(r):(n=e[0])==null||n.enqueue(r)}function $t(e){let t=[];for(let r=0;r<e;r++)t.push(r);return t}function Jt(e,t){(e.graph().acyclicer===\"greedy\"?Xt(e,r(e)):Kt(e,t!=null?t:null)).forEach(n=>{let o=e.edge(n);e.removeEdge(n),o.forwardName=n.name,o.reversed=!0,e.setEdge(n.w,n.v,o,oe(\"rev\"))});function r(n){return o=>n.edge(o).weight}}function Kt(e,t){let r=[],n={},o={};function i(a){Object.hasOwn(o,a)||(o[a]=!0,n[a]=!0,e.outEdges(a).forEach(l=>{Object.hasOwn(n,l.w)?r.push(l):i(l.w)}),delete n[a])}function s(a){var l;Object.hasOwn(o,a)||(o[a]=!0,n[a]=!0,(l=e.outEdges(a))==null||l.forEach(u=>{var h,c;Object.hasOwn(n,u.w)||((h=t.node(a))==null?void 0:h.rank)>((c=t.node(u.w))==null?void 0:c.rank)&&Ut(e,u.w,u)?r.push(u):s(u.w)}),delete n[a])}let d=i;return t&&typeof t.node==\"function\"&&(d=s),e.sources().forEach(d),e.nodes().forEach(d),r}function Qt(e){e.edges().forEach(t=>{let r=e.edge(t);if(r.reversed){e.removeEdge(t);let n=r.forwardName;delete r.reversed,delete r.forwardName,e.setEdge(t.w,t.v,r,n)}})}function Ut(e,t,r){let n=new Set;function o(i){var s;if(e.sources().includes(i))return!0;n.add(i);for(let d of(s=e.inEdges(i))!=null?s:[])if(!(d.v===r.v&&d.w===r.w)&&!n.has(d.v)&&o(d.v))return!0;return!1}return o(t)}function Ht(e){e.graph().dummyChains=[],e.edges().forEach(t=>Zt(e,t))}function Zt(e,t){let r=t.v,n=e.node(r).rank,o=t.w,i=e.node(o).rank,s=t.name,d=e.edge(t),a=d.labelRank;if(i===n+1)return;e.removeEdge(t);let l,u,h;for(h=0,++n;n<i;++h,++n)d.points=[],u={width:0,height:0,edgeLabel:d,edgeObj:t,rank:n},l=D(e,\"edge\",u,\"_d\"),n===a&&(u.width=d.width,u.height=d.height,u.dummy=\"edge-label\",u.labelpos=d.labelpos),e.setEdge(r,l,{weight:d.weight},s),h===0&&e.graph().dummyChains.push(l),r=l;e.setEdge(r,o,{weight:d.weight},s)}function er(e){e.graph().dummyChains.forEach(t=>{let r=e.node(t),n=r.edgeLabel,o;for(e.setEdge(r.edgeObj,n);r.dummy;)o=e.successors(t)[0],e.removeNode(t),n.points.push({x:r.x,y:r.y}),r.dummy===\"edge-label\"&&(n.x=r.x,n.y=r.y,n.width=r.width,n.height=r.height),t=o,r=e.node(t)})}function ie(e){let t={};function r(n){let o=e.node(n);if(Object.hasOwn(t,n))return o.rank;t[n]=!0;let i=e.outEdges(n),s=i?i.map(a=>a==null?Number.POSITIVE_INFINITY:r(a.w)-e.edge(a).minlen):[],d=R(Math.min,s);return d===Number.POSITIVE_INFINITY&&(d=0),o.rank=d}e.sources().forEach(r)}function Y(e,t){return e.node(t.w).rank-e.node(t.v).rank-e.edge(t).minlen}var Ae=tr;function tr(e){let t=new T({directed:!1}),r=e.nodes();if(r.length===0)throw new Error(\"Graph must have at least one node\");let n=r[0],o=e.nodeCount();t.setNode(n,{});let i,s;for(;rr(t,e)<o&&(i=nr(t,e),!!i);)s=t.hasNode(i.v)?Y(e,i):-Y(e,i),or(t,e,s);return t}function rr(e,t){function r(n){let o=t.nodeEdges(n);o&&o.forEach(i=>{let s=i.v,d=n===s?i.w:s;!e.hasNode(d)&&!Y(t,i)&&(e.setNode(d,{}),e.setEdge(n,d,{}),r(d))})}return e.nodes().forEach(r),e.nodeCount()}function nr(e,t){return t.edges().reduce((r,n)=>{let o=Number.POSITIVE_INFINITY;return e.hasNode(n.v)!==e.hasNode(n.w)&&(o=Y(t,n)),o<r[0]?[o,n]:r},[Number.POSITIVE_INFINITY,null])[1]}function or(e,t,r){e.nodes().forEach(n=>t.node(n).rank+=r)}var{preorder:ir,postorder:sr}=ne,dr=P;P.initLowLimValues=de;P.initCutValues=se;P.calcCutValue=Ge;P.leaveEdge=We;P.enterEdge=Xe;P.exchangeEdges=qe;function P(e){e=Mt(e),ie(e);let t=Ae(e);de(t),se(t,e);let r,n;for(;r=We(t);)n=Xe(t,e,r),qe(t,e,r,n)}function se(e,t){let r=sr(e,e.nodes());r=r.slice(0,r.length-1),r.forEach(n=>lr(e,t,n))}function lr(e,t,r){let n=e.node(r).parent,o=e.edge(r,n);o.cutvalue=Ge(e,t,r)}function Ge(e,t,r){let n=e.node(r).parent,o=!0,i=t.edge(r,n),s=0;i||(o=!1,i=t.edge(n,r)),s=i.weight;let d=t.nodeEdges(r);return d&&d.forEach(a=>{let l=a.v===r,u=l?a.w:a.v;if(u!==n){let h=l===o,c=t.edge(a).weight;if(s+=h?c:-c,ur(e,r,u)){let g=e.edge(r,u).cutvalue;s+=h?-g:g}}}),s}function de(e,t){arguments.length<2&&(t=e.nodes()[0]),Be(e,{},1,t)}function Be(e,t,r,n,o){let i=r,s=e.node(n);t[n]=!0;let d=e.neighbors(n);return d&&d.forEach(a=>{Object.hasOwn(t,a)||(r=Be(e,t,r,a,n))}),s.low=i,s.lim=r++,o?s.parent=o:delete s.parent,r}function We(e){return e.edges().find(t=>e.edge(t).cutvalue<0)}function Xe(e,t,r){let n=r.v,o=r.w;t.hasEdge(n,o)||(n=r.w,o=r.v);let i=e.node(n),s=e.node(o),d=i,a=!1;return i.lim>s.lim&&(d=s,a=!0),t.edges().filter(l=>a===ge(e,e.node(l.v),d)&&a!==ge(e,e.node(l.w),d)).reduce((l,u)=>Y(t,u)<Y(t,l)?u:l)}function qe(e,t,r,n){let o=r.v,i=r.w;e.removeEdge(o,i),e.setEdge(n.v,n.w,{}),de(e),se(e,t),ar(e,t)}function ar(e,t){let r=e.nodes().find(o=>!e.node(o).parent);if(!r)return;let n=ir(e,[r]);n=n.slice(1),n.forEach(o=>{let i=e.node(o).parent,s=t.edge(o,i),d=!1;s||(s=t.edge(i,o),d=!0),t.node(o).rank=t.node(i).rank+(d?s.minlen:-s.minlen)})}function ur(e,t,r){return e.hasEdge(t,r)}function ge(e,t,r){return r.low<=t.lim&&t.lim<=r.lim}var hr=cr;function cr(e){let t=e.graph().ranker;if(typeof t==\"function\")return t(e);switch(t){case\"network-simplex\":pe(e);break;case\"tight-tree\":gr(e);break;case\"longest-path\":fr(e);break;case\"none\":break;default:pe(e)}}var fr=ie;function gr(e){ie(e),Ae(e)}function pe(e){dr(e)}var pr=mr;function mr(e){let t=vr(e),r=e.graph();Array.isArray(r.dummyChains)&&r.dummyChains.forEach(n=>{let o=e.node(n),i=o.edgeObj,s=wr(e,t,i.v,i.w),d=s.path,a=s.lca,l=0,u=d[l],h=!0;for(;n!==i.w;){if(o=e.node(n),h){for(;(u=d[l])!==a&&e.node(u).maxRank<o.rank;)l++;u===a&&(h=!1)}if(!h){for(;l<d.length-1&&e.node(d[l+1]).minRank<=o.rank;)l++;u=d[l]}u!==void 0&&e.setParent(n,u),n=e.successors(n)[0]}})}function wr(e,t,r,n){let o=[],i=[],s=Math.min(t[r].low,t[n].low),d=Math.max(t[r].lim,t[n].lim),a;a=r;do a=e.parent(a),o.push(a);while(a&&(t[a].low>s||d>t[a].lim));let l=a,u=n;for(;(u=e.parent(u))!==l;)i.push(u);return{path:o.concat(i.reverse()),lca:l}}function vr(e){let t={},r=0;function n(o){let i=r;e.children(o).forEach(n),t[o]={low:i,lim:r++}}return e.children($).forEach(n),t}function br(e){let t=D(e,\"root\",{},\"_root\"),r=Er(e),n=Object.values(r),o=R(Math.max,n)-1,i=2*o+1;e.graph().nestingRoot=t,e.edges().forEach(d=>e.edge(d).minlen*=i);let s=yr(e)+1;e.children($).forEach(d=>{ze(e,t,i,s,o,r,d)}),e.graph().nodeRankFactor=i}function ze(e,t,r,n,o,i,s){var d;let a=e.children(s);if(!a.length){s!==t&&e.setEdge(t,s,{weight:0,minlen:r});return}let l=ce(e,\"_bt\"),u=ce(e,\"_bb\"),h=e.node(s);e.setParent(l,s),h.borderTop=l,e.setParent(u,s),h.borderBottom=u,a.forEach(c=>{var g;ze(e,t,r,n,o,i,c);let w=e.node(c),b=w.borderTop?w.borderTop:c,y=w.borderBottom?w.borderBottom:c,v=w.borderTop?n:2*n,p=b!==y?1:o-((g=i[s])!=null?g:0)+1;e.setEdge(l,b,{weight:v,minlen:p,nestingEdge:!0}),e.setEdge(y,u,{weight:v,minlen:p,nestingEdge:!0})}),e.parent(s)||e.setEdge(t,l,{weight:0,minlen:o+((d=i[s])!=null?d:0)})}function Er(e){let t={};function r(n,o){let i=e.children(n);i&&i.length&&i.forEach(s=>r(s,o+1)),t[n]=o}return e.children($).forEach(n=>r(n,1)),t}function yr(e){return e.edges().reduce((t,r)=>t+e.edge(r).weight,0)}function _r(e){let t=e.graph();e.removeNode(t.nestingRoot),delete t.nestingRoot,e.edges().forEach(r=>{e.edge(r).nestingEdge&&e.removeEdge(r)})}var kr=xr;function xr(e){function t(r){let n=e.children(r),o=e.node(r);if(n.length&&n.forEach(t),o&&Object.hasOwn(o,\"minRank\")){o.borderLeft=[],o.borderRight=[];for(let i=o.minRank,s=o.maxRank+1;i<s;++i)me(e,\"borderLeft\",\"_bl\",r,o,i),me(e,\"borderRight\",\"_br\",r,o,i)}}e.children($).forEach(t)}function me(e,t,r,n,o,i){let s={width:0,height:0,rank:i,borderType:t},d=o[t][i-1],a=D(e,\"border\",s,r);o[t][i]=a,e.setParent(a,n),d&&e.setEdge(d,a,{weight:1})}function Nr(e){var t;let r=(t=e.graph().rankdir)==null?void 0:t.toLowerCase();(r===\"lr\"||r===\"rl\")&&$e(e)}function Or(e){var t;let r=(t=e.graph().rankdir)==null?void 0:t.toLowerCase();(r===\"bt\"||r===\"rl\")&&Ir(e),(r===\"lr\"||r===\"rl\")&&(jr(e),$e(e))}function $e(e){e.nodes().forEach(t=>we(e.node(t))),e.edges().forEach(t=>we(e.edge(t)))}function we(e){let t=e.width;e.width=e.height,e.height=t}function Ir(e){e.nodes().forEach(t=>U(e.node(t))),e.edges().forEach(t=>{var r;let n=e.edge(t);(r=n.points)==null||r.forEach(U),Object.hasOwn(n,\"y\")&&U(n)})}function U(e){e.y=-e.y}function jr(e){e.nodes().forEach(t=>H(e.node(t))),e.edges().forEach(t=>{var r;let n=e.edge(t);(r=n.points)==null||r.forEach(H),Object.hasOwn(n,\"x\")&&H(n)})}function H(e){let t=e.x;e.x=e.y,e.y=t}function Cr(e,t=null){let r={},n=e.nodes().filter(l=>!e.children(l).length),o=n.map(l=>e.node(l).rank),i=R(Math.max,o),s=G(i+1).map(()=>[]);function d(l){if(r[l])return;r[l]=!0;let u=e.node(l);s[u.rank].push(l);let h=e.successors(l);h&&[...h].sort((c,g)=>a(c,g)).forEach(d)}n.sort((l,u)=>e.node(l).rank-e.node(u).rank).forEach(d);function a(l,u){let h=e.node(l),c=e.node(u);return Ve(t,h,c)}return s}function Lr(e,t){let r=0;for(let n=1;n<t.length;++n)r+=Sr(e,t[n-1],t[n]);return r}function Sr(e,t,r){let n=Vt(r,r.map((l,u)=>u)),o=t.flatMap(l=>{let u=e.outEdges(l);return u?u.map(h=>({pos:n[h.w],weight:e.edge(h).weight})).sort((h,c)=>h.pos-c.pos):[]}),i=1;for(;i<r.length;)i<<=1;let s=2*i-1;i-=1;let d=new Array(s).fill(0),a=0;return o.forEach(l=>{let u=l.pos+i;d[u]+=l.weight;let h=0;for(;u>0;)u%2&&(h+=d[u+1]),u=u-1>>1,d[u]+=l.weight;a+=l.weight*h}),a}function Mr(e,t=[]){return t.map(r=>{let n=e.inEdges(r);if(!n||!n.length)return{v:r};{let o=n.reduce((i,s)=>{let d=e.edge(s),a=e.node(s.v);return{sum:i.sum+d.weight*a.order,weight:i.weight+d.weight}},{sum:0,weight:0});return{v:r,barycenter:o.sum/o.weight,weight:o.weight}}})}function Tr(e,t){let r={};e.forEach((o,i)=>{let s={indegree:0,in:[],out:[],vs:[o.v],i};o.barycenter!==void 0&&(s.barycenter=o.barycenter,s.weight=o.weight),r[o.v]=s}),t.edges().forEach(o=>{let i=r[o.v],s=r[o.w];i!==void 0&&s!==void 0&&(s.indegree++,i.out.push(s))});let n=Object.values(r).filter(o=>!o.indegree);return Rr(n)}function Rr(e){let t=[];function r(o){return i=>{i.merged||(i.barycenter===void 0||o.barycenter===void 0||i.barycenter>=o.barycenter)&&Pr(o,i)}}function n(o){return i=>{i.in.push(o),--i.indegree===0&&e.push(i)}}for(;e.length;){let o=e.pop();t.push(o),o.in.reverse().forEach(r(o)),o.out.forEach(n(o))}return t.filter(o=>!o.merged).map(o=>X(o,[\"vs\",\"i\",\"barycenter\",\"weight\"]))}function Pr(e,t){let r=0,n=0;e.weight&&(r+=e.barycenter*e.weight,n+=e.weight),t.weight&&(r+=t.barycenter*t.weight,n+=t.weight),e.vs=t.vs.concat(e.vs),e.barycenter=r/n,e.weight=n,e.i=Math.min(t.i,e.i),t.merged=!0}function Fr(e,t,r,n,o){let i={},s=null,d=null,a=o;typeof t==\"boolean\"?(a=t,i={}):t&&(i=t,s=r!=null?r:null,d=n!=null?n:null);let l=Ft(e,v=>Object.hasOwn(v,\"barycenter\")),u=l.lhs,h=l.rhs.sort((v,p)=>p.i-v.i),c=[],g=0,w=0,b=0;u.sort(Yr(d,s,!!a));for(let[v,p]of Object.entries(i)){let f=u.findIndex(m=>m.vs[0]===v);u.splice(f+1,0,p)}b=ve(c,h,b),u.forEach(v=>{b+=v.vs.length,c.push(v.vs),g+=v.barycenter*v.weight,w+=v.weight,b=ve(c,h,b)});let y={vs:c.flat(1)};return w&&(y.barycenter=g/w,y.weight=w),y}function ve(e,t,r){let n;for(;t.length&&(n=t[t.length-1]).i<=r;)t.pop(),e.push(n.vs),r++;return r}function Yr(e,t,r){return(n,o)=>{if(n.barycenter<o.barycenter)return-1;if(n.barycenter>o.barycenter)return 1;if(e&&(typeof n.vs[0]==\"string\"||typeof o.vs[0]==\"string\")){let i=e.node(n.vs[0]),s=e.node(o.vs[0]),d=Ve(t,i,s);if(d!==0)return d}return r?o.i-n.i:n.i-o.i}}function Je(e,t,r,n,o){var i,s,d,a,l,u,h,c,g,w,b;let y=null,v=o;typeof n==\"boolean\"?(v=n,y=null):n!==void 0&&(y=n);let p=e.children(t),f=e.node(t),m=f?f.borderLeft:void 0,E=f?f.borderRight:void 0,N={};m&&(p=p.filter(x=>x!==m&&x!==E));let S=Mr(e,p);S.forEach(x=>{if(e.children(x.v).length){let{result:j}=Je(e,x.v,r,y,v);N[x.v]=j,Object.hasOwn(j,\"barycenter\")&&Vr(x,j)}});let _=Tr(S,r);Dr(_,N);let L={},M=!1;for(let x=0;x<_.length;x++)for(let j=x+1;j<_.length;j++)if(!(!_[x]||!_[j]||!((i=_[x])!=null&&i.barycenter)||!((s=_[j])!=null&&s.barycenter))&&((d=_[x])==null?void 0:d.barycenter)===_[j].barycenter){let O=(l=(a=_[x])==null?void 0:a.vs[0])!=null?l:\"\",k=(h=(u=_[j])==null?void 0:u.vs[0])!=null?h:\"\",C=e.node(O),F=e.node(k);if(C.dummy===\"edge\"&&F.dummy===\"edge\"&&((c=C.edgeObj)==null?void 0:c.v)===((g=F.edgeObj)==null?void 0:g.v)&&((w=C.edgeObj)==null?void 0:w.w)===((b=F.edgeObj)==null?void 0:b.w))if(C.edgeLabel.reversed){L[k]=_[x],_.splice(x,1),x--;break}else L[O]=_[j],_.splice(j,1),j--;else M=!0}let I=Fr(_,L,y,e,v);if(m&&E){I.vs=[m,I.vs,E].flat(1);let x=e.predecessors(m);if(x&&x.length){let j=e.node(x[0]),O=e.predecessors(E),k=e.node(O[0]);Object.hasOwn(I,\"barycenter\")||(I.barycenter=0,I.weight=0),I.barycenter=(I.barycenter*I.weight+j.order+k.order)/(I.weight+2),I.weight+=2}}return Object.defineProperty(I,\"result\",{value:I,enumerable:!1,configurable:!0,writable:!0}),Object.defineProperty(I,\"usedBias\",{value:M,enumerable:!1,configurable:!0,writable:!0}),I}function Dr(e,t){e.forEach(r=>{r.vs=r.vs.flatMap(n=>t[n]?t[n].vs:n)})}function Vr(e,t){e.barycenter!==void 0?(e.barycenter=(e.barycenter*e.weight+t.barycenter*t.weight)/(e.weight+t.weight),e.weight+=t.weight):(e.barycenter=t.barycenter,e.weight=t.weight)}function Ar(e,t,r,n){n||(n=e.nodes());let o=Gr(e),i=new T({compound:!0}).setGraph({root:o}).setDefaultNodeLabel(s=>e.node(s));return n.forEach(s=>{let d=e.node(s),a=e.parent(s);if(d.rank===t||d.minRank<=t&&t<=d.maxRank){i.setNode(s),i.setParent(s,a||o);let l=e[r](s);l&&l.forEach(u=>{let h=u.v===s?u.w:u.v,c=i.edge(h,s),g=c!==void 0?c.weight:0;i.setEdge(h,s,{weight:e.edge(u).weight+g})}),Object.hasOwn(d,\"minRank\")&&i.setNode(s,{borderLeft:d.borderLeft[t],borderRight:d.borderRight[t]})}}),i}function Gr(e){let t;for(;e.hasNode(t=oe(\"_root\")););return t}function Br(e,t,r){let n={},o;r.forEach(i=>{let s=e.parent(i),d,a;for(;s;){if(d=e.parent(s),d?(a=n[d],n[d]=s):(a=o,o=s),a&&a!==s){t.setEdge(a,s);return}s=d}})}function Ke(e,t={},r=null){if(typeof t.customOrder==\"function\"){t.customOrder(e,Ke);return}let n=De(e),o=be(e,G(1,n+1),\"inEdges\"),i=be(e,G(n-1,-1,-1),\"outEdges\"),s=Cr(e,r);if(Ee(e,s),t.disableOptimalOrderHeuristic)return;let d=Number.POSITIVE_INFINITY,a,l=t.constraints||[];for(let u=0,h=0;h<4;++u,++h){Wr(u%2?o:i,u%4>=2,l,r),s=q(e);let c=Lr(e,s);c<d?(h=0,a=Object.assign({},s),d=c):c===d&&(a=structuredClone(s))}Ee(e,a)}function be(e,t,r){let n=new Map,o=(i,s)=>{n.has(i)||n.set(i,[]),n.get(i).push(s)};for(let i of e.nodes()){let s=e.node(i);if(typeof s.rank==\"number\"&&o(s.rank,i),typeof s.minRank==\"number\"&&typeof s.maxRank==\"number\")for(let d=s.minRank;d<=s.maxRank;d++)d!==s.rank&&o(d,i)}return t.map(function(i){return Ar(e,i,r,n.get(i)||[])})}function Wr(e,t,r,n){let o=!0,i=new T;e.forEach(function(s){r.forEach(u=>i.setEdge(u.left,u.right));let d=s.graph().root,{result:a,usedBias:l}=Je(s,d,i,n,o);t&&l&&(o=!o),a.vs.forEach((u,h)=>s.node(u).order=h),Br(s,i,a.vs)})}function Ee(e,t){Object.values(t).forEach(r=>r.forEach((n,o)=>e.node(n).order=o))}function Xr(e,t){let r={};function n(o,i){let s=0,d=0,a=o.length,l=i[i.length-1];return i.forEach((u,h)=>{let c=zr(e,u),g=c?e.node(c).order:a;(c||u===l)&&(i.slice(d,h+1).forEach(w=>{let b=e.predecessors(w);b&&b.forEach(y=>{let v=e.node(y),p=v.order;(p<s||g<p)&&!(v.dummy&&e.node(w).dummy)&&Qe(r,y,w)})}),d=h+1,s=g)}),i}return t.length&&t.reduce(n),r}function qr(e,t){let r={};function n(i,s,d,a,l){G(s,d).forEach(u=>{let h=i[u];if(h!==void 0&&e.node(h).dummy){let c=e.predecessors(h);c&&c.forEach(g=>{if(g===void 0)return;let w=e.node(g);w.dummy&&(w.order<a||w.order>l)&&Qe(r,g,h)})}})}function o(i,s){let d=-1,a=-1,l=0;return s.forEach((u,h)=>{if(e.node(u).dummy===\"border\"){let c=e.predecessors(u);if(c&&c.length){let g=c[0];if(g===void 0)return;a=e.node(g).order,n(s,l,h,d,a),l=h,d=a}}n(s,l,s.length,a,i.length)}),s}return t.length&&t.reduce(o),r}function zr(e,t){if(e.node(t).dummy){let r=e.predecessors(t);if(r)return r.find(n=>e.node(n).dummy)}}function Qe(e,t,r){if(t>r){let o=t;t=r,r=o}let n=e[t];n||(e[t]=n={}),n[r]=!0}function $r(e,t,r){if(t>r){let o=t;t=r,r=o}let n=e[t];return n!==void 0&&Object.hasOwn(n,r)}function Jr(e,t,r,n,o){let i={},s={},d={};return t.forEach(a=>{a.forEach((l,u)=>{i[l]=l,s[l]=l,d[l]=u})}),t.forEach(a=>{let l=-1,u=-1,h=!1,c=a,g=a.findIndex(w=>(o==null?void 0:o.includes(w))||ye(w,e,o));g>0&&(c=[a[g],...a.slice(0,g),...a.slice(g+1)],h=!0),c.forEach(w=>{var b;let y=n(w);if(y&&y.length){o!=null&&o.includes(w)&&(y=y.filter(f=>ye(f,e,o)));let v=y.sort((f,m)=>{let E=d[f],N=d[m];return(E!==void 0?E:0)-(N!==void 0?N:0)}),p=(v.length-1)/2;for(let f=Math.floor(p),m=Math.ceil(p);f<=m;++f){let E=v[f];if(E===void 0)continue;let N=d[E];if(N!==void 0&&s[w]===w&&l<N&&d[E]!==u&&!$r(r,w,E)){let S=i[E];S!==void 0&&(s[E]=w,s[w]=i[w]=S,l=N,h&&(l=-1,u=(b=d[E])!=null?b:-1,h=!1))}}}})}),{root:i,align:s}}function Kr(e,t,r,n,o=!1){let i={},s=Qr(e,t,r,o),d=o?\"borderLeft\":\"borderRight\";function a(g,w){let b=s.nodes().slice(),y={},v=b.pop();for(;v;){if(y[v])g(v);else{y[v]=!0,b.push(v);for(let p of w(v))b.push(p)}v=b.pop()}}function l(g){let w=s.inEdges(g);w?i[g]=w.reduce((b,y)=>{var v;let p=(v=i[y.v])!=null?v:0,f=s.edge(y);return Math.max(b,p+(f!==void 0?f:0))},0):i[g]=0}function u(g){let w=s.outEdges(g),b=Number.POSITIVE_INFINITY;w&&(b=w.reduce((v,p)=>{let f=i[p.w],m=s.edge(p);return Math.min(v,(f!==void 0?f:0)-(m!==void 0?m:0))},Number.POSITIVE_INFINITY));let y=e.node(g);b!==Number.POSITIVE_INFINITY&&y.borderType!==d&&(i[g]=Math.max(i[g]!==void 0?i[g]:0,b))}function h(g){return s.predecessors(g)||[]}function c(g){return s.successors(g)||[]}return a(l,h),a(u,c),Object.keys(n).forEach(g=>{var w;let b=r[g];b!==void 0&&(i[g]=(w=i[b])!=null?w:0)}),i}function Qr(e,t,r,n){let o=new T,i=e.graph(),s=tn(i.nodesep,i.edgesep,n);return t.forEach(d=>{let a;d.forEach(l=>{let u=r[l];if(u!==void 0){if(o.setNode(u),a!==void 0){let h=r[a];if(h!==void 0){let c=o.edge(h,u);o.setEdge(h,u,Math.max(s(e,l,a),c||0))}}a=l}})}),o}function Ur(e,t){return Object.values(t).reduce((r,n)=>{let o=Number.NEGATIVE_INFINITY,i=Number.POSITIVE_INFINITY;Object.entries(n).forEach(([d,a])=>{let l=rn(e,d)/2;o=Math.max(a+l,o),i=Math.min(a-l,i)});let s=o-i;return s<r[0]&&(r=[s,n]),r},[Number.POSITIVE_INFINITY,null])[1]}function Hr(e,t){let r=Object.values(t),n=R(Math.min,r),o=R(Math.max,r);[\"u\",\"d\"].forEach(i=>{[\"l\",\"r\"].forEach(s=>{let d=i+s,a=e[d];if(!a||a===t)return;let l=Object.values(a),u=n-R(Math.min,l);s!==\"l\"&&(u=o-R(Math.max,l)),u&&(e[d]=z(a,h=>h+u))})})}function Zr(e,t=void 0){let r=e.ul;return r?z(r,(n,o)=>{var i,s;if(t){let a=t.toLowerCase(),l=e[a];if(l&&l[o]!==void 0)return l[o]}let d=Object.values(e).map(a=>{let l=a[o];return l!==void 0?l:0}).sort((a,l)=>a-l);return(((i=d[1])!=null?i:0)+((s=d[2])!=null?s:0))/2}):{}}function en(e,t){let r=q(e),n=Object.assign(Xr(e,r),qr(e,r)),o={},i;[\"u\",\"d\"].forEach(d=>{i=d===\"u\"?r:Object.values(r).reverse(),[\"l\",\"r\"].forEach(a=>{a===\"r\"&&(i=i.map(h=>Object.values(h).reverse()));let l=Jr(e,i,n,h=>(d===\"u\"?e.predecessors(h):e.successors(h))||[],t),u=Kr(e,i,l.root,l.align,a===\"r\");a===\"r\"&&(u=z(u,h=>-h)),o[d+a]=u})});let s=Ur(e,o);return Hr(o,s),Zr(o,e.graph().align)}function tn(e,t,r){return(n,o,i)=>{let s=n.node(o),d=n.node(i),a=0,l;if(a+=s.width/2,Object.hasOwn(s,\"labelpos\"))switch(s.labelpos.toLowerCase()){case\"l\":l=-s.width/2;break;case\"r\":l=s.width/2;break}if(l&&(a+=r?l:-l),l=void 0,a+=(s.dummy?t:e)/2,a+=(d.dummy?t:e)/2,a+=d.width/2,Object.hasOwn(d,\"labelpos\"))switch(d.labelpos.toLowerCase()){case\"l\":l=d.width/2;break;case\"r\":l=-d.width/2;break}return l&&(a+=r?l:-l),a}}function rn(e,t){return e.node(t).width}function ye(e,t,r){var n;if(!r)return!1;let o=(n=t.node(e))==null?void 0:n.edgeObj;if(!o||t.node(e).edgeLabel.reversed)return!1;let i=r.indexOf(o==null?void 0:o.v),s=r.indexOf(o==null?void 0:o.w);return i!==-1&&s!==-1&&i===(s+1)%r.length||i===(s-1)%r.length}function nn(e,t){e=Fe(e),on(e),Object.entries(en(e,t)).forEach(([r,n])=>e.node(r).x=n)}function on(e){let t=q(e),r=e.graph(),n=r.ranksep,o=r.rankalign,i=0;t.forEach(s=>{let d=s.reduce((a,l)=>{var u;let h=(u=e.node(l).height)!=null?u:0;return a>h?a:h},0);s.forEach(a=>{let l=e.node(a);o===\"top\"?l.y=i+l.height/2:o===\"bottom\"?l.y=i+d-l.height/2:l.y=i+d/2}),i+=d+n})}var _e=new WeakMap;function Ue(e,t={}){return He(e,Yt,t),e}function ke(e,t,r){let n=t;for(;n!==void 0;){let o=e.parent(n);if(o===r)return n;n=o}}function He(e,t,r){var n;let o=e.nodes().filter(p=>e.children(p).length),i={};o.forEach(p=>{let f=e.node(p);if(f&&f.rankdir){let m=new T({multigraph:!0,compound:!0});m.setGraph({rankdir:f.rankdir});let E=e.children(p);E.forEach(O=>{let k={...e.node(O)};m.setNode(O,k);let C=e.parent(O);C&&C!==p&&E.includes(C)&&m.setParent(O,C)});let N=new Set;e.edges().forEach(O=>{let k=ke(e,O.v,p),C=ke(e,O.w,p);if(k&&C&&k!==C){let F=`${k}\\0${C}`;N.has(F)||(N.add(F),m.setEdge(k,C,{...e.edge(O)}))}}),He(m,t,r);let S=Ie(m);xe(S,t,r,null),Ne(m,S);let _=1/0,L=1/0,M=-1/0,I=-1/0;m.nodes().forEach(O=>{if(O===p)return;let k=m.node(O);k&&typeof k.x==\"number\"&&typeof k.y==\"number\"&&typeof k.width==\"number\"&&typeof k.height==\"number\"&&(_=Math.min(_,k.x-k.width/2),M=Math.max(M,k.x+k.width/2),L=Math.min(L,k.y-k.height/2),I=Math.max(I,k.y+k.height/2))}),(!isFinite(_)||!isFinite(L)||!isFinite(M)||!isFinite(I))&&(_=L=0,M=I=0);let x=M-_,j=I-L;i[p]={minX:_,minY:L,maxX:M,maxY:I,width:x,height:j,offsetX:_,offsetY:L},f._dagreClusterSubgraph=m}});let s=[],d=p=>{let f=[],m=(e.children(p)||[]).filter(E=>E!==p);for(;m.length>0;){let E=m.shift();f.push(E),(e.children(E)||[]).filter(N=>N!==E).forEach(N=>m.push(N))}return f},a=new Map;o.forEach(p=>{let f=e.node(p);f&&f.rankdir&&i[p]&&a.set(p,(e.children(p)||[]).filter(m=>m!==p))});let l=new Set([...a.values()].flat()),u=new Map;a.forEach((p,f)=>{l.has(f)||u.set(f,d(f))});let h=new Set([...u.values()].flat()),c=p=>{for(let[f,m]of u)if(m.includes(p))return f;return p},g=[];e.edges().forEach(p=>{(h.has(p.v)||h.has(p.w))&&g.push({edge:p,label:e.edge(p)})});let w=new Map;h.forEach(p=>{let f=e.parent(p);w.set(p,typeof f==\"string\"?f:void 0)}),u.forEach((p,f)=>{let m=e.node(f),E=[];p.forEach(_=>{let L=e.node(_);L&&(E.push({id:_,node:L,parent:w.get(_)}),e.removeNode(_))});let N=g.filter(({edge:_})=>p.includes(_.v)||p.includes(_.w)),S=i[f];m&&(s.push({clusterId:f,subgraph:m._dagreClusterSubgraph,bounds:S,children:p,removedNodes:E,removedEdges:N}),m.width=S.width,m.height=S.height)});let b=new Set;g.forEach(({edge:p,label:f})=>{let m=c(p.v),E=c(p.w);if(m!==E&&e.hasNode(m)&&e.hasNode(E)){let N=`${m}\\0${E}`;b.has(N)||(b.add(N),e.setEdge(m,E,{...f,width:0,height:0}))}});let y=Ie(e),v=xe(y,t,r,(n=_e.get(e))!=null?n:null);_e.set(e,v),Ne(e,y),b.forEach(p=>{let f=p.indexOf(\"\\0\"),m=p.slice(0,f),E=p.slice(f+1);e.hasEdge(m,E)&&e.removeEdge(m,E)}),s.forEach(({clusterId:p,subgraph:f,bounds:m,removedNodes:E,removedEdges:N})=>{var S,_;let L=e.node(p),M=(S=L==null?void 0:L.x)!=null?S:0,I=(_=L==null?void 0:L.y)!=null?_:0,x=(m.minX+m.maxX)/2,j=(m.minY+m.maxY)/2;E.forEach(({id:O,node:k,parent:C})=>{e.setNode(O,k),C!==void 0&&e.setParent(O,C)}),N.forEach(({edge:O,label:k})=>{e.setEdge(O,k)}),f.nodes().forEach(O=>{if(O===p)return;let k=f.node(O),C=e.node(O);C&&k&&typeof k.x==\"number\"&&typeof k.y==\"number\"&&(C.x=M+(k.x-x),C.y=I+(k.y-j))}),delete L._dagreClusterSubgraph}),o.forEach(p=>{var f,m;let E=e.node(p),N=i[p];if(E&&E.rankdir&&E._dagreClusterSubgraph&&N){let S=E._dagreClusterSubgraph,_=(f=E.x)!=null?f:0,L=(m=E.y)!=null?m:0,M=(N.minX+N.maxX)/2,I=(N.minY+N.maxY)/2;S.nodes().forEach(x=>{if(x===p)return;let j=S.node(x),O=e.node(x);if(O&&j&&typeof j.x==\"number\"&&typeof j.y==\"number\"){let k=j.x-M,C=j.y-I;O.x=_+k,O.y=L+C}}),delete E._dagreClusterSubgraph}})}function xe(e,t,r,n=null){var o,i;let s=(r==null?void 0:r.useDynamic)!==!1,d=s&&(o=n==null?void 0:n.graph)!=null?o:null,a=s&&(i=n==null?void 0:n.rawNodes)!=null?i:null;t(\" makeSpaceForEdgeLabels\",()=>fn(e)),t(\" removeSelfEdges\",()=>_n(e)),t(\" acyclic\",()=>Jt(e,d)),t(\" nestingGraph.run\",()=>br(e)),t(\" rank\",()=>hr(Fe(e))),t(\" injectEdgeLabelProxies\",()=>gn(e)),t(\" removeEmptyRanks\",()=>Rt(e)),t(\" nestingGraph.cleanup\",()=>_r(e)),t(\" normalizeRanks\",()=>Tt(e)),t(\" assignRankMinMax\",()=>pn(e)),t(\" removeEdgeLabelProxies\",()=>mn(e)),t(\" normalize.run\",()=>Ht(e)),t(\" parentDummyChains\",()=>pr(e)),t(\" addBorderSegments\",()=>kr(e)),t(\" order\",()=>Ke(e,r,a)),t(\" insertSelfEdges\",()=>kn(e)),t(\" adjustCoordinateSystem\",()=>Nr(e)),t(\" position\",()=>nn(e,r.corePath)),t(\" positionSelfEdges\",()=>xn(e));let l=JSON.parse(JSON.stringify(e._nodes));return t(\" removeBorderNodes\",()=>yn(e)),t(\" normalize.undo\",()=>er(e)),t(\" fixupEdgeLabelCoords\",()=>bn(e)),t(\" undoCoordinateSystem\",()=>Or(e)),t(\" translateGraph\",()=>wn(e)),t(\" assignNodeIntersects\",()=>vn(e)),t(\" reversePoints\",()=>En(e)),t(\" acyclic.undo\",()=>Qt(e)),{graph:e,rawNodes:l}}function Ne(e,t){e.nodes().forEach(r=>{let n=e.node(r),o=t.node(r);n&&(n.x=o.x,n.y=o.y,n.order=o.order,n.rank=o.rank,t.children(r).length&&(n.width=o.width,n.height=o.height))}),e.edges().forEach(r=>{let n=e.edge(r),o=t.edge(r);n.points=o.points,Object.hasOwn(o,\"x\")&&(n.x=o.x,n.y=o.y)}),e.graph().width=t.graph().width,e.graph().height=t.graph().height}var sn=[\"nodesep\",\"edgesep\",\"ranksep\",\"marginx\",\"marginy\"],dn={ranksep:50,edgesep:20,nodesep:50,rankdir:\"TB\",rankalign:\"center\"},ln=[\"acyclicer\",\"ranker\",\"rankdir\",\"align\",\"rankalign\"],an=[\"width\",\"height\",\"rank\"],Oe={width:0,height:0},un=[\"minlen\",\"weight\",\"width\",\"height\",\"labeloffset\"],hn={minlen:1,weight:1,width:0,height:0,labeloffset:10,labelpos:\"r\"},cn=[\"labelpos\"];function Ie(e){let t=new T({multigraph:!0,compound:!0}),r=ee(e.graph());return t.setGraph(Object.assign({},dn,Z(r,sn),X(r,ln))),e.nodes().forEach(n=>{let o=ee(e.node(n)),i=Z(o,an);Object.keys(Oe).forEach(d=>{i[d]===void 0&&(i[d]=Oe[d])}),t.setNode(n,i);let s=e.parent(n);s!==void 0&&t.setParent(n,s)}),e.edges().forEach(n=>{let o=ee(e.edge(n));t.setEdge(n,Object.assign({},hn,Z(o,un),X(o,cn)))}),t}function fn(e){let t=e.graph();t.ranksep/=2,e.edges().forEach(r=>{var n;let o=e.edge(r);o.minlen*=2,((n=o.labelpos)!=null?n:\"r\").toLowerCase()!==\"c\"&&(t.rankdir===\"TB\"||t.rankdir===\"BT\"?o.width+=o.labeloffset:o.height+=o.labeloffset)})}function gn(e){e.edges().forEach(t=>{let r=e.edge(t);if(r.width&&r.height){let n=e.node(t.v),o={rank:(e.node(t.w).rank-n.rank)/2+n.rank,e:t};D(e,\"edge-proxy\",o,\"_ep\")}})}function pn(e){let t=0;e.nodes().forEach(r=>{let n=e.node(r);n.borderTop&&(n.minRank=e.node(n.borderTop).rank,n.maxRank=e.node(n.borderBottom).rank,t=Math.max(t,n.maxRank))}),e.graph().maxRank=t}function mn(e){e.nodes().forEach(t=>{let r=e.node(t);if(r.dummy===\"edge-proxy\"){let n=r;e.edge(n.e).labelRank=r.rank,e.removeNode(t)}})}function wn(e){let t=Number.POSITIVE_INFINITY,r=0,n=Number.POSITIVE_INFINITY,o=0,i=e.graph(),s=i.marginx||0,d=i.marginy||0;function a(l){let u=l.x,h=l.y,c=l.width,g=l.height;t=Math.min(t,u-c/2),r=Math.max(r,u+c/2),n=Math.min(n,h-g/2),o=Math.max(o,h+g/2)}e.nodes().forEach(l=>a(e.node(l))),e.edges().forEach(l=>{let u=e.edge(l);Object.hasOwn(u,\"x\")&&a(u)}),t-=s,n-=d,e.nodes().forEach(l=>{let u=e.node(l);u.x-=t,u.y-=n}),e.edges().forEach(l=>{let u=e.edge(l);u.points.forEach(h=>{h.x-=t,h.y-=n}),Object.hasOwn(u,\"x\")&&(u.x-=t),Object.hasOwn(u,\"y\")&&(u.y-=n)}),i.width=r-t+s,i.height=o-n+d}function vn(e){e.edges().forEach(t=>{if(t.v===t.w)return;let r=e.edge(t),n=e.node(t.v),o=e.node(t.w),i,s;r.points?(i=r.points[0],s=r.points[r.points.length-1]):(r.points=[],i=o,s=n),r.points.unshift(he(n,i)),r.points.push(he(o,s))})}function bn(e){e.edges().forEach(t=>{let r=e.edge(t);if(Object.hasOwn(r,\"x\"))switch((r.labelpos===\"l\"||r.labelpos===\"r\")&&(r.width-=r.labeloffset),r.labelpos){case\"l\":r.x-=r.width/2+r.labeloffset;break;case\"r\":r.x+=r.width/2+r.labeloffset;break}})}function En(e){e.edges().forEach(t=>{let r=e.edge(t);r.reversed&&r.points.reverse()})}function yn(e){e.nodes().forEach(t=>{if(e.children(t).length){let r=e.node(t),n=e.node(r.borderTop),o=e.node(r.borderBottom),i=e.node(r.borderLeft[r.borderLeft.length-1]),s=e.node(r.borderRight[r.borderRight.length-1]);r.width=Math.abs(s.x-i.x),r.height=Math.abs(o.y-n.y),r.x=i.x+r.width/2,r.y=n.y+r.height/2}}),e.nodes().forEach(t=>{e.node(t).dummy===\"border\"&&e.removeNode(t)})}function _n(e){e.edges().forEach(t=>{if(t.v===t.w){let r=e.node(t.v);r.selfEdges||(r.selfEdges=[]),r.selfEdges.push({e:t,label:e.edge(t)}),e.removeEdge(t)}})}function kn(e){q(e).forEach(t=>{let r=0;t.forEach((n,o)=>{let i=e.node(n);typeof i.rank!=\"number\"&&(i.rank=0),i.order=o+r,(i.selfEdges||[]).forEach(s=>{D(e,\"selfedge\",{width:s.label.width,height:s.label.height,rank:i.rank,order:o+ ++r,e:s.e,edgeLabel:s.label},\"_se\"),(!Array.isArray(s.label.points)||s.label.points.length!==7)&&(s.label.points=[{x:0,y:-10},{x:0,y:-10},{x:0,y:0},{x:0,y:10},{x:0,y:10},{x:0,y:0},{x:0,y:0}])}),delete i.selfEdges})})}function xn(e){e.nodes().forEach(t=>{let r=e.node(t),n=o=>typeof o==\"number\"&&isFinite(o);if(r.dummy===\"selfedge\"){let o=r,i=e.node(o.e.v),s=n(i==null?void 0:i.x)?i.x:0,d=n(i==null?void 0:i.y)?i.y:0,a=n(i==null?void 0:i.width)?i.width:0,l=n(i==null?void 0:i.height)?i.height:0,u=n(r.x)?r.x:s,h=n(r.y)?r.y:d,c=a/2,g=l/2;o.edgeLabel.points=[{x:u+c,y:h-g},{x:u+c,y:h-g},{x:u,y:h},{x:u-c,y:h+g},{x:u-c,y:h+g},{x:u,y:h},{x:u,y:h}],o.edgeLabel.x=u,o.edgeLabel.y=h,e.setEdge(o.e,o.edgeLabel),e.removeNode(t)}else r&&Array.isArray(r.selfEdges)&&r.selfEdges.forEach(o=>{if(!Array.isArray(o.label.points)||o.label.points.length!==7){let i=n(r.x)?r.x:0,s=n(r.y)?r.y:0,d=n(r.width)?r.width:0,a=n(r.height)?r.height:0,l=d/2,u=a/2;o.label.points=[{x:i+l,y:s-u},{x:i+l,y:s-u},{x:i,y:s},{x:i-l,y:s+u},{x:i-l,y:s+u},{x:i,y:s},{x:i,y:s}]}})})}function Z(e,t){return z(X(e,t),Number)}function ee(e){let t={};return e&&Object.entries(e).forEach(([r,n])=>{typeof r==\"string\"&&(r=r.toLowerCase()),t[r]=n}),t}/*! For license information please see dagre.esm.js.LEGAL.txt */function V(e,t){var i,s;if(e===null||typeof e!=\"object\"){if(typeof e==\"function\")throw new TypeError(\"structuredClone: a function could not be cloned.\");return e}let r=t.get(e);if(r!==void 0)return r;if(e instanceof Date)return new Date(e.getTime());if(e instanceof RegExp)return new RegExp(e.source,e.flags);if(Array.isArray(e)){let d=Array.from({length:e.length});t.set(e,d);for(let a=0;a<e.length;a+=1)d[a]=V(e[a],t);return d}if(e instanceof Map){let d=new Map;t.set(e,d);for(let[a,l]of e)d.set(V(a,t),V(l,t));return d}if(e instanceof Set){let d=new Set;t.set(e,d);for(let a of e)d.add(V(a,t));return d}let n=Object.getPrototypeOf(e);if(n!==Object.prototype&&n!==null)throw new TypeError(`structuredClone: ${(s=(i=n==null?void 0:n.constructor)==null?void 0:i.name)!=null?s:\"object\"} could not be cloned.`);let o={};t.set(e,o);for(let[d,a]of Object.entries(e))o[d]=V(a,t);return o}function Nn(e){return V(e,new Map)}function Ze(){let e=globalThis;typeof e.structuredClone!=\"function\"&&(e.structuredClone=Nn)}var J={direction:\"TB\",nodeSpacing:60,rankSpacing:90,edgeSpacing:20};function le(){return typeof performance!=\"undefined\"&&typeof performance.now==\"function\"?performance.now():Date.now()}function et(e){return Math.round(e*100)/100}function tt(e,t){return e.id<t.id?-1:e.id>t.id?1:0}function rt(e){let t=Number.POSITIVE_INFINITY,r=Number.POSITIVE_INFINITY;for(let n of e)n.x<t&&(t=n.x),n.y<r&&(r=n.y);return{x:t,y:r}}function nt(e){var w,b,y,v,p;Ze();let t=le(),r=(w=e.options)!=null?w:{},n=[...e.nodes].sort(tt),o=r.subset?new Set(r.subset):void 0,i=o?n.filter(f=>o.has(f.id)):n,s=new Set(i.map(f=>f.id)),d={};for(let f of n)d[f.id]=f.position;if(i.length===0)return{positions:d,moved:[],engine:\"dagre\",ms:le()-t};let a=new T({multigraph:!0,compound:!1,directed:!0});a.setGraph({rankdir:(b=r.direction)!=null?b:J.direction,nodesep:(y=r.nodeSpacing)!=null?y:J.nodeSpacing,ranksep:(v=r.rankSpacing)!=null?v:J.rankSpacing,edgesep:(p=r.edgeSpacing)!=null?p:J.edgeSpacing,marginx:0,marginy:0}),a.setDefaultEdgeLabel(()=>({}));for(let f of i)a.setNode(f.id,{width:f.width,height:f.height});for(let f of[...e.edges].sort(tt))!s.has(f.source)||!s.has(f.target)||a.setEdge(f.source,f.target,{},f.id);Ue(a);let l={};for(let f of i){let m=a.node(f.id);l[f.id]=m&&Number.isFinite(m.x)&&Number.isFinite(m.y)?{x:m.x-f.width/2,y:m.y-f.height/2}:f.position}let u=rt(i.map(f=>f.position)),h=rt(i.map(f=>l[f.id])),c=u.x-h.x,g=u.y-h.y;for(let f of i)d[f.id]={x:et(l[f.id].x+c),y:et(l[f.id].y+g)};return{positions:d,moved:i.map(f=>f.id),engine:\"dagre\",ms:le()-t}}function On(e){let t=e;if(!(!t||typeof t!=\"object\")){if(t.t===\"ping\")return{t:\"pong\"};if(t.t===\"layout\")try{return{t:\"result\",id:t.id,result:nt(t.request)}}catch(r){return{t:\"error\",id:t.id,message:r instanceof Error?r.message:String(r)}}}}function In(){return typeof WorkerGlobalScope!=\"undefined\"&&typeof self!=\"undefined\"&&self instanceof WorkerGlobalScope}In()&&self.addEventListener(\"message\",e=>{let t=On(e.data);t&&self.postMessage(t)});})();\n";
28
+
29
+ // oxfmt-ignore
30
+ export const layoutWorkerSha256 = "d8f40e8264dee88e361017837607069470eea6f61591cef70bb4b29c0e3a09dd";
31
+
32
+ export const layoutWorkerBytes = 50854;
@@ -0,0 +1,214 @@
1
+ /**
2
+ * Commands and their inverses, design §4.5.
3
+ *
4
+ * The journal stores inverse COMMANDS, not snapshots: at 200 nodes a snapshot
5
+ * is ~70 KB and a hundred of them is 7 MB of retained JSON for nothing. That
6
+ * only works if every inverse is exact, so the property below is checked for
7
+ * every variant of the union — including array ORDER, because React Flow
8
+ * paints later nodes on top and a restore that reorders them is a visible
9
+ * change the user did not ask for.
10
+ */
11
+
12
+ import { describe, expect, it } from "vitest";
13
+ import { applyCommand, invertCommand } from "./commands";
14
+ import type { GraphCommand } from "./commands";
15
+ import type { GraphDocument } from "./document";
16
+
17
+ type Nodes = { readonly task: { readonly title: string } };
18
+ type Edges = { readonly flow: { readonly weight: number } };
19
+ type Doc = GraphDocument<Nodes, Edges>;
20
+
21
+ function node(id: string, x: number, title = id) {
22
+ return { id, kind: "task", position: { x, y: 0 }, data: { title } } as const;
23
+ }
24
+
25
+ function edge(id: string, from: string, to: string, weight = 1) {
26
+ return {
27
+ id,
28
+ kind: "flow",
29
+ source: { node: from, port: "out" },
30
+ target: { node: to, port: "in" },
31
+ data: { weight },
32
+ } as const;
33
+ }
34
+
35
+ const doc: Doc = {
36
+ version: 1,
37
+ nodes: [node("a", 0), node("b", 100), node("c", 200)],
38
+ edges: [edge("ab", "a", "b"), edge("bc", "b", "c")],
39
+ viewport: { x: 0, y: 0, zoom: 1 },
40
+ meta: { schemaId: "demo" },
41
+ };
42
+
43
+ /** One of every variant of the union, so the round trip covers all nine. */
44
+ const variants: Readonly<Record<string, GraphCommand<Nodes, Edges>>> = {
45
+ addNodes: { t: "addNodes", nodes: [node("d", 300)] },
46
+ addNodesAt: { t: "addNodes", nodes: [node("d", 300)], at: 1 },
47
+ removeNodes: { t: "removeNodes", ids: ["b"] },
48
+ removeFirstAndLastNode: { t: "removeNodes", ids: ["a", "c"] },
49
+ moveNodes: { t: "moveNodes", deltas: { a: { x: 5, y: -5 }, c: { x: 1, y: 1 } } },
50
+ setPositions: { t: "setPositions", positions: { a: { x: 42, y: 42 } } },
51
+ setNodeData: { t: "setNodeData", id: "b", data: { title: "renamed" } },
52
+ addEdges: { t: "addEdges", edges: [edge("ac", "a", "c")] },
53
+ addEdgesAt: { t: "addEdges", edges: [edge("ac", "a", "c")], at: 0 },
54
+ removeEdges: { t: "removeEdges", ids: ["ab"] },
55
+ setEdgeData: { t: "setEdgeData", id: "ab", data: { weight: 9 } },
56
+ batch: {
57
+ t: "batch",
58
+ commands: [
59
+ { t: "removeNodes", ids: ["a"] },
60
+ { t: "moveNodes", deltas: { b: { x: 10, y: 10 } } },
61
+ { t: "addNodes", nodes: [node("z", 999)] },
62
+ { t: "setEdgeData", id: "bc", data: { weight: 3 } },
63
+ ],
64
+ },
65
+ emptyBatch: { t: "batch", commands: [] },
66
+ // A batch whose second step depends on what the first one did. Inverting
67
+ // every step against the ORIGINAL document passes every other variant here,
68
+ // so without this one that bug ships.
69
+ orderSensitiveBatch: {
70
+ t: "batch",
71
+ commands: [
72
+ { t: "moveNodes", deltas: { a: { x: 5, y: 0 } } },
73
+ { t: "setPositions", positions: { a: { x: 99, y: 99 } } },
74
+ ],
75
+ },
76
+ };
77
+
78
+ describe("applyCommand(doc, invertCommand(doc, c)) restores doc", () => {
79
+ for (const [name, command] of Object.entries(variants)) {
80
+ it(name, () => {
81
+ const changed = applyCommand(doc, command);
82
+ const restored = applyCommand(changed, invertCommand(doc, command));
83
+ expect(restored).toEqual(doc);
84
+ // Order, not just membership. `toEqual` on an array is ordered, so this
85
+ // is really asserting the ids line up index by index.
86
+ expect(restored.nodes.map((n) => n.id)).toEqual(["a", "b", "c"]);
87
+ expect(restored.edges.map((e) => e.id)).toEqual(["ab", "bc"]);
88
+ });
89
+ }
90
+
91
+ it("actually changed something first, so the round trip is not vacuous", () => {
92
+ for (const [name, command] of Object.entries(variants)) {
93
+ if (name === "emptyBatch") continue;
94
+ expect(applyCommand(doc, command), name).not.toEqual(doc);
95
+ }
96
+ });
97
+ });
98
+
99
+ describe("removeNodes", () => {
100
+ it("takes the attached edges with it, rather than leaving them dangling", () => {
101
+ const after = applyCommand(doc, { t: "removeNodes", ids: ["b"] });
102
+ expect(after.nodes.map((n) => n.id)).toEqual(["a", "c"]);
103
+ expect(after.edges).toEqual([]);
104
+ });
105
+
106
+ it("restores those edges, in their original places", () => {
107
+ const command: GraphCommand<Nodes, Edges> = { t: "removeNodes", ids: ["b"] };
108
+ const restored = applyCommand(applyCommand(doc, command), invertCommand(doc, command));
109
+ expect(restored.edges.map((e) => e.id)).toEqual(["ab", "bc"]);
110
+ });
111
+ });
112
+
113
+ describe("moveNodes", () => {
114
+ it("carries deltas, so two moves compose by addition", () => {
115
+ const once = applyCommand(doc, { t: "moveNodes", deltas: { a: { x: 5, y: 3 } } });
116
+ const twice = applyCommand(once, { t: "moveNodes", deltas: { a: { x: 2, y: -1 } } });
117
+ expect(twice.nodes[0].position).toEqual({ x: 7, y: 2 });
118
+ });
119
+
120
+ it("inverts to the negated deltas", () => {
121
+ expect(invertCommand(doc, { t: "moveNodes", deltas: { a: { x: 5, y: 3 } } })).toEqual({
122
+ t: "moveNodes",
123
+ deltas: { a: { x: -5, y: -3 } },
124
+ });
125
+ });
126
+
127
+ it("negates a zero component to 0, not -0", () => {
128
+ // `-0` is what `-v` gives, and `Object.is(-0, 0)` is false, so the inverse
129
+ // of a purely horizontal drag would not compare equal to the same command
130
+ // written by hand. Found by `toEqual`, which does see the sign.
131
+ const inverse = invertCommand(doc, { t: "moveNodes", deltas: { a: { x: 5, y: 0 } } });
132
+ expect(inverse).toEqual({ t: "moveNodes", deltas: { a: { x: -5, y: 0 } } });
133
+ if (inverse.t !== "moveNodes") return;
134
+ expect(Object.is(inverse.deltas.a.y, 0)).toBe(true);
135
+ });
136
+
137
+ it("ignores an id the document does not have", () => {
138
+ expect(applyCommand(doc, { t: "moveNodes", deltas: { ghost: { x: 1, y: 1 } } })).toEqual(doc);
139
+ });
140
+ });
141
+
142
+ describe("setPositions", () => {
143
+ it("carries absolutes, and inverts to the PRIOR absolutes", () => {
144
+ // That is what makes one undo restore a whole pre-layout arrangement.
145
+ expect(invertCommand(doc, { t: "setPositions", positions: { a: { x: 42, y: 42 } } })).toEqual({
146
+ t: "setPositions",
147
+ positions: { a: { x: 0, y: 0 } },
148
+ });
149
+ });
150
+ });
151
+
152
+ describe("batch", () => {
153
+ it("inverts in reverse order, each step against the document it will meet", () => {
154
+ // Removing `a` and then moving `b` cannot be undone by moving `b` and then
155
+ // re-adding `a` in the same order — the inverse list runs backwards.
156
+ const command = variants.batch;
157
+ const inverse = invertCommand(doc, command);
158
+ expect(inverse.t).toBe("batch");
159
+ if (inverse.t !== "batch") return;
160
+ expect(inverse.commands.map((c) => c.t)).toEqual([
161
+ "setEdgeData",
162
+ "removeNodes",
163
+ "moveNodes",
164
+ "batch",
165
+ ]);
166
+ });
167
+
168
+ it("is not defeated by a nested batch", () => {
169
+ const nested: GraphCommand<Nodes, Edges> = {
170
+ t: "batch",
171
+ commands: [
172
+ { t: "batch", commands: [{ t: "removeNodes", ids: ["a"] }] },
173
+ { t: "moveNodes", deltas: { c: { x: 1, y: 1 } } },
174
+ ],
175
+ };
176
+ expect(applyCommand(applyCommand(doc, nested), invertCommand(doc, nested))).toEqual(doc);
177
+ });
178
+ });
179
+
180
+ describe("data commands", () => {
181
+ it("replaces node data rather than merging it", () => {
182
+ const after = applyCommand(doc, { t: "setNodeData", id: "b", data: { title: "x" } });
183
+ expect(after.nodes[1].data).toEqual({ title: "x" });
184
+ });
185
+
186
+ it("inverts a missing id to a no-op, instead of inventing prior data", () => {
187
+ expect(invertCommand(doc, { t: "setNodeData", id: "ghost", data: {} })).toEqual({
188
+ t: "batch",
189
+ commands: [],
190
+ });
191
+ expect(invertCommand(doc, { t: "setEdgeData", id: "ghost", data: {} })).toEqual({
192
+ t: "batch",
193
+ commands: [],
194
+ });
195
+ });
196
+ });
197
+
198
+ describe("applyCommand leaves the input alone", () => {
199
+ it("does not mutate the document it was given", () => {
200
+ const before = JSON.stringify(doc);
201
+ applyCommand(doc, variants.batch);
202
+ applyCommand(doc, variants.removeNodes);
203
+ applyCommand(doc, variants.moveNodes);
204
+ expect(JSON.stringify(doc)).toBe(before);
205
+ });
206
+
207
+ it("keeps viewport and meta across every variant", () => {
208
+ for (const [name, command] of Object.entries(variants)) {
209
+ const after = applyCommand(doc, command);
210
+ expect(after.viewport, name).toEqual(doc.viewport);
211
+ expect(after.meta, name).toEqual(doc.meta);
212
+ }
213
+ });
214
+ });
@@ -0,0 +1,209 @@
1
+ /**
2
+ * Commands and their inverses, design §4.5.
3
+ *
4
+ * An inverse-command journal, not snapshots. At 200 nodes a snapshot is ~70 KB
5
+ * and a hundred of them is 7 MB of retained JSON for nothing.
6
+ *
7
+ * Two shapes carry the interesting properties. `moveNodes` carries DELTAS, so
8
+ * coalescing two consecutive moves on the same ids is exact addition.
9
+ * `setPositions` carries ABSOLUTES and is what auto-layout emits; its inverse
10
+ * holds the prior absolutes, so one undo restores the whole pre-layout
11
+ * arrangement — the property Clay reaches for the first time a tidy scrambles a
12
+ * graph he liked.
13
+ */
14
+
15
+ import type {
16
+ EdgeId,
17
+ EdgeKindDefs,
18
+ GraphDocument,
19
+ GraphEdgeOf,
20
+ GraphNodeOf,
21
+ NodeId,
22
+ NodeKindDefs,
23
+ XY,
24
+ } from "./document";
25
+
26
+ export type GraphCommand<N extends NodeKindDefs, E extends EdgeKindDefs> =
27
+ | { readonly t: "addNodes"; readonly nodes: readonly GraphNodeOf<N>[]; readonly at?: number }
28
+ | { readonly t: "removeNodes"; readonly ids: readonly NodeId[] }
29
+ | { readonly t: "moveNodes"; readonly deltas: Readonly<Record<NodeId, XY>> }
30
+ | { readonly t: "setPositions"; readonly positions: Readonly<Record<NodeId, XY>> }
31
+ | { readonly t: "setNodeData"; readonly id: NodeId; readonly data: unknown }
32
+ | { readonly t: "addEdges"; readonly edges: readonly GraphEdgeOf<E>[]; readonly at?: number }
33
+ | { readonly t: "removeEdges"; readonly ids: readonly EdgeId[] }
34
+ | { readonly t: "setEdgeData"; readonly id: EdgeId; readonly data: unknown }
35
+ | { readonly t: "batch"; readonly commands: readonly GraphCommand<N, E>[] };
36
+
37
+ const noop = <N extends NodeKindDefs, E extends EdgeKindDefs>(): GraphCommand<N, E> => ({
38
+ t: "batch",
39
+ commands: [],
40
+ });
41
+
42
+ function insert<T>(list: readonly T[], items: readonly T[], at: number | undefined): T[] {
43
+ if (at === undefined || at >= list.length) return [...list, ...items];
44
+ const copy = [...list];
45
+ copy.splice(Math.max(0, at), 0, ...items);
46
+ return copy;
47
+ }
48
+
49
+ export function applyCommand<N extends NodeKindDefs, E extends EdgeKindDefs>(
50
+ doc: GraphDocument<N, E>,
51
+ command: GraphCommand<N, E>,
52
+ ): GraphDocument<N, E> {
53
+ switch (command.t) {
54
+ case "addNodes":
55
+ return { ...doc, nodes: insert(doc.nodes, command.nodes, command.at) };
56
+
57
+ case "removeNodes": {
58
+ const gone = new Set(command.ids);
59
+ return {
60
+ ...doc,
61
+ nodes: doc.nodes.filter((node) => !gone.has(node.id)),
62
+ // An edge whose end has been deleted is not a partial graph, it is a
63
+ // broken one, so a node takes its edges with it. `invertCommand`
64
+ // restores both, in their original places.
65
+ edges: doc.edges.filter(
66
+ (edge) => !gone.has(edge.source.node) && !gone.has(edge.target.node),
67
+ ),
68
+ };
69
+ }
70
+
71
+ case "moveNodes": {
72
+ const { deltas } = command;
73
+ return {
74
+ ...doc,
75
+ nodes: doc.nodes.map((node) => {
76
+ const delta = deltas[node.id];
77
+ return delta
78
+ ? { ...node, position: { x: node.position.x + delta.x, y: node.position.y + delta.y } }
79
+ : node;
80
+ }),
81
+ };
82
+ }
83
+
84
+ case "setPositions": {
85
+ const { positions } = command;
86
+ return {
87
+ ...doc,
88
+ nodes: doc.nodes.map((node) => {
89
+ const position = positions[node.id];
90
+ return position ? { ...node, position } : node;
91
+ }),
92
+ };
93
+ }
94
+
95
+ case "setNodeData":
96
+ return {
97
+ ...doc,
98
+ nodes: doc.nodes.map((node) =>
99
+ node.id === command.id ? ({ ...node, data: command.data } as GraphNodeOf<N>) : node,
100
+ ),
101
+ };
102
+
103
+ case "addEdges":
104
+ return { ...doc, edges: insert(doc.edges, command.edges, command.at) };
105
+
106
+ case "removeEdges": {
107
+ const gone = new Set(command.ids);
108
+ return { ...doc, edges: doc.edges.filter((edge) => !gone.has(edge.id)) };
109
+ }
110
+
111
+ case "setEdgeData":
112
+ return {
113
+ ...doc,
114
+ edges: doc.edges.map((edge) =>
115
+ edge.id === command.id ? ({ ...edge, data: command.data } as GraphEdgeOf<E>) : edge,
116
+ ),
117
+ };
118
+
119
+ case "batch":
120
+ return command.commands.reduce<GraphDocument<N, E>>(applyCommand, doc);
121
+ }
122
+ }
123
+
124
+ /**
125
+ * `0 - v`, not `-v`. Negating a zero component gives -0, and `Object.is(-0, 0)`
126
+ * is false — so an inverse of a purely horizontal drag would not compare equal
127
+ * to the same command written by hand, and two structurally identical journal
128
+ * entries would diff. `0 - 0` is 0 and every other value negates as usual.
129
+ */
130
+ function negate(deltas: Readonly<Record<NodeId, XY>>): Record<NodeId, XY> {
131
+ const out: Record<NodeId, XY> = {};
132
+ for (const [id, delta] of Object.entries(deltas)) out[id] = { x: 0 - delta.x, y: 0 - delta.y };
133
+ return out;
134
+ }
135
+
136
+ export function invertCommand<N extends NodeKindDefs, E extends EdgeKindDefs>(
137
+ doc: GraphDocument<N, E>,
138
+ command: GraphCommand<N, E>,
139
+ ): GraphCommand<N, E> {
140
+ switch (command.t) {
141
+ case "addNodes":
142
+ return { t: "removeNodes", ids: command.nodes.map((node) => node.id) };
143
+
144
+ case "removeNodes": {
145
+ const gone = new Set(command.ids);
146
+ // One insert per item, at its ORIGINAL index, ascending. Applied in that
147
+ // order each insert shifts the ones after it into place, so the arrays
148
+ // come back identical — not merely with the same members. React Flow
149
+ // paints later nodes on top, so order is a visible property.
150
+ const restores: GraphCommand<N, E>[] = [];
151
+ doc.nodes.forEach((node, at) => {
152
+ if (gone.has(node.id)) restores.push({ t: "addNodes", nodes: [node], at });
153
+ });
154
+ doc.edges.forEach((edge, at) => {
155
+ if (gone.has(edge.source.node) || gone.has(edge.target.node)) {
156
+ restores.push({ t: "addEdges", edges: [edge], at });
157
+ }
158
+ });
159
+ return { t: "batch", commands: restores };
160
+ }
161
+
162
+ case "moveNodes":
163
+ return { t: "moveNodes", deltas: negate(command.deltas) };
164
+
165
+ case "setPositions": {
166
+ const before: Record<NodeId, XY> = {};
167
+ for (const node of doc.nodes) {
168
+ if (node.id in command.positions) before[node.id] = node.position;
169
+ }
170
+ return { t: "setPositions", positions: before };
171
+ }
172
+
173
+ case "setNodeData": {
174
+ const node = doc.nodes.find((candidate) => candidate.id === command.id);
175
+ // No prior data to restore, so no-op rather than inventing one.
176
+ return node ? { t: "setNodeData", id: command.id, data: node.data } : noop<N, E>();
177
+ }
178
+
179
+ case "addEdges":
180
+ return { t: "removeEdges", ids: command.edges.map((edge) => edge.id) };
181
+
182
+ case "removeEdges": {
183
+ const gone = new Set(command.ids);
184
+ const restores: GraphCommand<N, E>[] = [];
185
+ doc.edges.forEach((edge, at) => {
186
+ if (gone.has(edge.id)) restores.push({ t: "addEdges", edges: [edge], at });
187
+ });
188
+ return { t: "batch", commands: restores };
189
+ }
190
+
191
+ case "setEdgeData": {
192
+ const edge = doc.edges.find((candidate) => candidate.id === command.id);
193
+ return edge ? { t: "setEdgeData", id: command.id, data: edge.data } : noop<N, E>();
194
+ }
195
+
196
+ case "batch": {
197
+ // Each step is inverted against the document it will actually meet, and
198
+ // the list runs backwards. Inverting them all against `doc` would be
199
+ // wrong the moment two steps touch the same node.
200
+ const inverses: GraphCommand<N, E>[] = [];
201
+ let current = doc;
202
+ for (const step of command.commands) {
203
+ inverses.push(invertCommand(current, step));
204
+ current = applyCommand(current, step);
205
+ }
206
+ return { t: "batch", commands: inverses.reverse() };
207
+ }
208
+ }
209
+ }