@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.
- package/LICENSE +201 -0
- package/README.md +80 -0
- package/css/graph.css +171 -0
- package/demo.ts +14 -0
- package/dist/cjs/NodeGraph.cjs +34 -0
- package/dist/cjs/NodeGraph.native.js +37 -0
- package/dist/cjs/NodeGraph.native.js.map +1 -0
- package/dist/cjs/bench/frameSampler.cjs +290 -0
- package/dist/cjs/bench/frameSampler.native.js +409 -0
- package/dist/cjs/bench/frameSampler.native.js.map +1 -0
- package/dist/cjs/bench/generateGraph.cjs +125 -0
- package/dist/cjs/bench/generateGraph.native.js +128 -0
- package/dist/cjs/bench/generateGraph.native.js.map +1 -0
- package/dist/cjs/diagnostics/GraphDiagnostics.cjs +154 -0
- package/dist/cjs/diagnostics/GraphDiagnostics.native.js +166 -0
- package/dist/cjs/diagnostics/GraphDiagnostics.native.js.map +1 -0
- package/dist/cjs/diagnostics/LiveGraphDiagnostics.cjs +101 -0
- package/dist/cjs/diagnostics/LiveGraphDiagnostics.native.js +106 -0
- package/dist/cjs/diagnostics/LiveGraphDiagnostics.native.js.map +1 -0
- package/dist/cjs/diagnostics/fromWire.cjs +48 -0
- package/dist/cjs/diagnostics/fromWire.native.js +51 -0
- package/dist/cjs/diagnostics/fromWire.native.js.map +1 -0
- package/dist/cjs/diagnostics/lastError.cjs +67 -0
- package/dist/cjs/diagnostics/lastError.native.js +75 -0
- package/dist/cjs/diagnostics/lastError.native.js.map +1 -0
- package/dist/cjs/diagnostics/types.cjs +18 -0
- package/dist/cjs/diagnostics/types.native.js +21 -0
- package/dist/cjs/diagnostics/types.native.js.map +1 -0
- package/dist/cjs/diagnostics/useGraphDiagnostics.cjs +69 -0
- package/dist/cjs/diagnostics/useGraphDiagnostics.native.js +75 -0
- package/dist/cjs/diagnostics/useGraphDiagnostics.native.js.map +1 -0
- package/dist/cjs/dom/GraphDomLayout.cjs +37 -0
- package/dist/cjs/dom/GraphDomLayout.native.js +40 -0
- package/dist/cjs/dom/GraphDomLayout.native.js.map +1 -0
- package/dist/cjs/dom/boot.cjs +100 -0
- package/dist/cjs/dom/boot.native.js +111 -0
- package/dist/cjs/dom/boot.native.js.map +1 -0
- package/dist/cjs/dom/wire.cjs +215 -0
- package/dist/cjs/dom/wire.native.js +274 -0
- package/dist/cjs/dom/wire.native.js.map +1 -0
- package/dist/cjs/edges/GraphEdge.cjs +169 -0
- package/dist/cjs/edges/GraphEdge.native.js +178 -0
- package/dist/cjs/edges/GraphEdge.native.js.map +1 -0
- package/dist/cjs/edges/edgeKinds.cjs +51 -0
- package/dist/cjs/edges/edgeKinds.native.js +54 -0
- package/dist/cjs/edges/edgeKinds.native.js.map +1 -0
- package/dist/cjs/edges/edgeStyle.cjs +94 -0
- package/dist/cjs/edges/edgeStyle.native.js +99 -0
- package/dist/cjs/edges/edgeStyle.native.js.map +1 -0
- package/dist/cjs/index.cjs +197 -0
- package/dist/cjs/index.native.js +200 -0
- package/dist/cjs/index.native.js.map +1 -0
- package/dist/cjs/interaction/lassoIntercept.cjs +54 -0
- package/dist/cjs/interaction/lassoIntercept.native.js +57 -0
- package/dist/cjs/interaction/lassoIntercept.native.js.map +1 -0
- package/dist/cjs/interaction/legalTargets.cjs +75 -0
- package/dist/cjs/interaction/legalTargets.native.js +118 -0
- package/dist/cjs/interaction/legalTargets.native.js.map +1 -0
- package/dist/cjs/interaction/snapAlignment.cjs +165 -0
- package/dist/cjs/interaction/snapAlignment.native.js +245 -0
- package/dist/cjs/interaction/snapAlignment.native.js.map +1 -0
- package/dist/cjs/interaction/snapChanges.cjs +214 -0
- package/dist/cjs/interaction/snapChanges.native.js +269 -0
- package/dist/cjs/interaction/snapChanges.native.js.map +1 -0
- package/dist/cjs/interaction/spatialHash.cjs +97 -0
- package/dist/cjs/interaction/spatialHash.native.js +165 -0
- package/dist/cjs/interaction/spatialHash.native.js.map +1 -0
- package/dist/cjs/interaction/useLassoSelect.cjs +259 -0
- package/dist/cjs/interaction/useLassoSelect.native.js +287 -0
- package/dist/cjs/interaction/useLassoSelect.native.js.map +1 -0
- package/dist/cjs/knobs/KnobEnvelopeProvider.cjs +77 -0
- package/dist/cjs/knobs/KnobEnvelopeProvider.native.js +85 -0
- package/dist/cjs/knobs/KnobEnvelopeProvider.native.js.map +1 -0
- package/dist/cjs/knobs/envelope.cjs +59 -0
- package/dist/cjs/knobs/envelope.native.js +78 -0
- package/dist/cjs/knobs/envelope.native.js.map +1 -0
- package/dist/cjs/knobs/graphKnobs.cjs +39 -0
- package/dist/cjs/knobs/graphKnobs.native.js +43 -0
- package/dist/cjs/knobs/graphKnobs.native.js.map +1 -0
- package/dist/cjs/knobs/useKnobEnvelope.cjs +108 -0
- package/dist/cjs/knobs/useKnobEnvelope.native.js +140 -0
- package/dist/cjs/knobs/useKnobEnvelope.native.js.map +1 -0
- package/dist/cjs/layout/dagre.cjs +125 -0
- package/dist/cjs/layout/dagre.native.js +259 -0
- package/dist/cjs/layout/dagre.native.js.map +1 -0
- package/dist/cjs/layout/layout.cjs +84 -0
- package/dist/cjs/layout/layout.native.js +112 -0
- package/dist/cjs/layout/layout.native.js.map +1 -0
- package/dist/cjs/layout/runner.cjs +194 -0
- package/dist/cjs/layout/runner.native.js +247 -0
- package/dist/cjs/layout/runner.native.js.map +1 -0
- package/dist/cjs/layout/structuredCloneShim.cjs +80 -0
- package/dist/cjs/layout/structuredCloneShim.native.js +160 -0
- package/dist/cjs/layout/structuredCloneShim.native.js.map +1 -0
- package/dist/cjs/layout/types.cjs +18 -0
- package/dist/cjs/layout/types.native.js +21 -0
- package/dist/cjs/layout/types.native.js.map +1 -0
- package/dist/cjs/layout/worker.entry.cjs +58 -0
- package/dist/cjs/layout/worker.entry.native.js +75 -0
- package/dist/cjs/layout/worker.entry.native.js.map +1 -0
- package/dist/cjs/layout/worker.generated.cjs +32 -0
- package/dist/cjs/layout/worker.generated.native.js +35 -0
- package/dist/cjs/layout/worker.generated.native.js.map +1 -0
- package/dist/cjs/model/commands.cjs +235 -0
- package/dist/cjs/model/commands.native.js +317 -0
- package/dist/cjs/model/commands.native.js.map +1 -0
- package/dist/cjs/model/connect.cjs +159 -0
- package/dist/cjs/model/connect.native.js +239 -0
- package/dist/cjs/model/connect.native.js.map +1 -0
- package/dist/cjs/model/document.cjs +18 -0
- package/dist/cjs/model/document.native.js +21 -0
- package/dist/cjs/model/document.native.js.map +1 -0
- package/dist/cjs/model/history.cjs +121 -0
- package/dist/cjs/model/history.native.js +178 -0
- package/dist/cjs/model/history.native.js.map +1 -0
- package/dist/cjs/model/index.cjs +60 -0
- package/dist/cjs/model/index.native.js +63 -0
- package/dist/cjs/model/index.native.js.map +1 -0
- package/dist/cjs/model/schema.cjs +63 -0
- package/dist/cjs/model/schema.native.js +68 -0
- package/dist/cjs/model/schema.native.js.map +1 -0
- package/dist/cjs/model/select.cjs +78 -0
- package/dist/cjs/model/select.native.js +107 -0
- package/dist/cjs/model/select.native.js.map +1 -0
- package/dist/cjs/model/serialize.cjs +332 -0
- package/dist/cjs/model/serialize.native.js +374 -0
- package/dist/cjs/model/serialize.native.js.map +1 -0
- package/dist/cjs/native/DomOnlyStory.cjs +60 -0
- package/dist/cjs/native/DomOnlyStory.native.js +66 -0
- package/dist/cjs/native/DomOnlyStory.native.js.map +1 -0
- package/dist/cjs/native/GraphToolbar.cjs +101 -0
- package/dist/cjs/native/GraphToolbar.native.js +107 -0
- package/dist/cjs/native/GraphToolbar.native.js.map +1 -0
- package/dist/cjs/native/domEntryRegistry.cjs +39 -0
- package/dist/cjs/native/domEntryRegistry.native.js +42 -0
- package/dist/cjs/native/domEntryRegistry.native.js.map +1 -0
- package/dist/cjs/native/graphChildren.cjs +45 -0
- package/dist/cjs/native/graphChildren.native.js +50 -0
- package/dist/cjs/native/graphChildren.native.js.map +1 -0
- package/dist/cjs/nodes/GraphNode.cjs +161 -0
- package/dist/cjs/nodes/GraphNode.native.js +206 -0
- package/dist/cjs/nodes/GraphNode.native.js.map +1 -0
- package/dist/cjs/nodes/GraphPort.cjs +104 -0
- package/dist/cjs/nodes/GraphPort.native.js +108 -0
- package/dist/cjs/nodes/GraphPort.native.js.map +1 -0
- package/dist/cjs/nodes/handleGeometry.cjs +98 -0
- package/dist/cjs/nodes/handleGeometry.native.js +104 -0
- package/dist/cjs/nodes/handleGeometry.native.js.map +1 -0
- package/dist/cjs/nodes/lod.cjs +41 -0
- package/dist/cjs/nodes/lod.native.js +45 -0
- package/dist/cjs/nodes/lod.native.js.map +1 -0
- package/dist/cjs/nodes/nodeMeasure.cjs +108 -0
- package/dist/cjs/nodes/nodeMeasure.native.js +134 -0
- package/dist/cjs/nodes/nodeMeasure.native.js.map +1 -0
- package/dist/cjs/nodes/overviewNode.cjs +74 -0
- package/dist/cjs/nodes/overviewNode.native.js +81 -0
- package/dist/cjs/nodes/overviewNode.native.js.map +1 -0
- package/dist/cjs/react-flow/ConnectionPuck.cjs +122 -0
- package/dist/cjs/react-flow/ConnectionPuck.native.js +143 -0
- package/dist/cjs/react-flow/ConnectionPuck.native.js.map +1 -0
- package/dist/cjs/react-flow/GraphActions.cjs +47 -0
- package/dist/cjs/react-flow/GraphActions.native.js +51 -0
- package/dist/cjs/react-flow/GraphActions.native.js.map +1 -0
- package/dist/cjs/react-flow/GraphCommandBridge.cjs +238 -0
- package/dist/cjs/react-flow/GraphCommandBridge.native.js +272 -0
- package/dist/cjs/react-flow/GraphCommandBridge.native.js.map +1 -0
- package/dist/cjs/react-flow/GraphNodeHost.cjs +77 -0
- package/dist/cjs/react-flow/GraphNodeHost.native.js +89 -0
- package/dist/cjs/react-flow/GraphNodeHost.native.js.map +1 -0
- package/dist/cjs/react-flow/GraphPaintProbe.cjs +60 -0
- package/dist/cjs/react-flow/GraphPaintProbe.native.js +65 -0
- package/dist/cjs/react-flow/GraphPaintProbe.native.js.map +1 -0
- package/dist/cjs/react-flow/GraphZoomVar.cjs +42 -0
- package/dist/cjs/react-flow/GraphZoomVar.native.js +48 -0
- package/dist/cjs/react-flow/GraphZoomVar.native.js.map +1 -0
- package/dist/cjs/react-flow/LassoOverlay.cjs +47 -0
- package/dist/cjs/react-flow/LassoOverlay.native.js +51 -0
- package/dist/cjs/react-flow/LassoOverlay.native.js.map +1 -0
- package/dist/cjs/react-flow/NodeGraphWeb.cjs +386 -0
- package/dist/cjs/react-flow/NodeGraphWeb.native.js +515 -0
- package/dist/cjs/react-flow/NodeGraphWeb.native.js.map +1 -0
- package/dist/cjs/react-flow/SnapGuides.cjs +89 -0
- package/dist/cjs/react-flow/SnapGuides.native.js +114 -0
- package/dist/cjs/react-flow/SnapGuides.native.js.map +1 -0
- package/dist/cjs/react-flow/demoControlBody.cjs +93 -0
- package/dist/cjs/react-flow/demoControlBody.native.js +104 -0
- package/dist/cjs/react-flow/demoControlBody.native.js.map +1 -0
- package/dist/cjs/react-flow/demoNodeBody.cjs +121 -0
- package/dist/cjs/react-flow/demoNodeBody.native.js +131 -0
- package/dist/cjs/react-flow/demoNodeBody.native.js.map +1 -0
- package/dist/cjs/react-flow/fixtures.cjs +215 -0
- package/dist/cjs/react-flow/fixtures.native.js +225 -0
- package/dist/cjs/react-flow/fixtures.native.js.map +1 -0
- package/dist/cjs/react-flow/flowAdapter.cjs +121 -0
- package/dist/cjs/react-flow/flowAdapter.native.js +133 -0
- package/dist/cjs/react-flow/flowAdapter.native.js.map +1 -0
- package/dist/cjs/react-flow/graphHandle.cjs +28 -0
- package/dist/cjs/react-flow/graphHandle.native.js +31 -0
- package/dist/cjs/react-flow/graphHandle.native.js.map +1 -0
- package/dist/cjs/react-flow/nodeCensus.cjs +56 -0
- package/dist/cjs/react-flow/nodeCensus.native.js +80 -0
- package/dist/cjs/react-flow/nodeCensus.native.js.map +1 -0
- package/dist/cjs/react-flow/useGraphController.cjs +297 -0
- package/dist/cjs/react-flow/useGraphController.native.js +393 -0
- package/dist/cjs/react-flow/useGraphController.native.js.map +1 -0
- package/dist/cjs/react-flow/xy.cjs +60 -0
- package/dist/cjs/react-flow/xy.native.js +63 -0
- package/dist/cjs/react-flow/xy.native.js.map +1 -0
- package/dist/cjs/theme/GraphFaces.cjs +114 -0
- package/dist/cjs/theme/GraphFaces.native.js +181 -0
- package/dist/cjs/theme/GraphFaces.native.js.map +1 -0
- package/dist/cjs/theme/GraphVarsStyle.cjs +88 -0
- package/dist/cjs/theme/GraphVarsStyle.native.js +100 -0
- package/dist/cjs/theme/GraphVarsStyle.native.js.map +1 -0
- package/dist/cjs/theme/faces.cjs +121 -0
- package/dist/cjs/theme/faces.generated.cjs +48 -0
- package/dist/cjs/theme/faces.generated.native.js +51 -0
- package/dist/cjs/theme/faces.generated.native.js.map +1 -0
- package/dist/cjs/theme/faces.native.js +133 -0
- package/dist/cjs/theme/faces.native.js.map +1 -0
- package/dist/cjs/theme/graphVars.cjs +318 -0
- package/dist/cjs/theme/graphVars.native.js +351 -0
- package/dist/cjs/theme/graphVars.native.js.map +1 -0
- package/dist/esm/NodeGraph.mjs +9 -0
- package/dist/esm/NodeGraph.mjs.map +1 -0
- package/dist/esm/NodeGraph.native.js +9 -0
- package/dist/esm/NodeGraph.native.js.map +1 -0
- package/dist/esm/bench/frameSampler.mjs +255 -0
- package/dist/esm/bench/frameSampler.mjs.map +1 -0
- package/dist/esm/bench/frameSampler.native.js +371 -0
- package/dist/esm/bench/frameSampler.native.js.map +1 -0
- package/dist/esm/bench/generateGraph.mjs +99 -0
- package/dist/esm/bench/generateGraph.mjs.map +1 -0
- package/dist/esm/bench/generateGraph.native.js +99 -0
- package/dist/esm/bench/generateGraph.native.js.map +1 -0
- package/dist/esm/diagnostics/GraphDiagnostics.mjs +128 -0
- package/dist/esm/diagnostics/GraphDiagnostics.mjs.map +1 -0
- package/dist/esm/diagnostics/GraphDiagnostics.native.js +137 -0
- package/dist/esm/diagnostics/GraphDiagnostics.native.js.map +1 -0
- package/dist/esm/diagnostics/LiveGraphDiagnostics.mjs +76 -0
- package/dist/esm/diagnostics/LiveGraphDiagnostics.mjs.map +1 -0
- package/dist/esm/diagnostics/LiveGraphDiagnostics.native.js +78 -0
- package/dist/esm/diagnostics/LiveGraphDiagnostics.native.js.map +1 -0
- package/dist/esm/diagnostics/fromWire.mjs +23 -0
- package/dist/esm/diagnostics/fromWire.mjs.map +1 -0
- package/dist/esm/diagnostics/fromWire.native.js +23 -0
- package/dist/esm/diagnostics/fromWire.native.js.map +1 -0
- package/dist/esm/diagnostics/lastError.mjs +39 -0
- package/dist/esm/diagnostics/lastError.mjs.map +1 -0
- package/dist/esm/diagnostics/lastError.native.js +44 -0
- package/dist/esm/diagnostics/lastError.native.js.map +1 -0
- package/dist/esm/diagnostics/types.mjs +2 -0
- package/dist/esm/diagnostics/types.mjs.map +1 -0
- package/dist/esm/diagnostics/types.native.js +2 -0
- package/dist/esm/diagnostics/types.native.js.map +1 -0
- package/dist/esm/diagnostics/useGraphDiagnostics.mjs +44 -0
- package/dist/esm/diagnostics/useGraphDiagnostics.mjs.map +1 -0
- package/dist/esm/diagnostics/useGraphDiagnostics.native.js +47 -0
- package/dist/esm/diagnostics/useGraphDiagnostics.native.js.map +1 -0
- package/dist/esm/dom/GraphDomLayout.mjs +11 -0
- package/dist/esm/dom/GraphDomLayout.mjs.map +1 -0
- package/dist/esm/dom/GraphDomLayout.native.js +11 -0
- package/dist/esm/dom/GraphDomLayout.native.js.map +1 -0
- package/dist/esm/dom/boot.mjs +67 -0
- package/dist/esm/dom/boot.mjs.map +1 -0
- package/dist/esm/dom/boot.native.js +75 -0
- package/dist/esm/dom/boot.native.js.map +1 -0
- package/dist/esm/dom/wire.mjs +183 -0
- package/dist/esm/dom/wire.mjs.map +1 -0
- package/dist/esm/dom/wire.native.js +239 -0
- package/dist/esm/dom/wire.native.js.map +1 -0
- package/dist/esm/edges/GraphEdge.mjs +139 -0
- package/dist/esm/edges/GraphEdge.mjs.map +1 -0
- package/dist/esm/edges/GraphEdge.native.js +145 -0
- package/dist/esm/edges/GraphEdge.native.js.map +1 -0
- package/dist/esm/edges/edgeKinds.mjs +25 -0
- package/dist/esm/edges/edgeKinds.mjs.map +1 -0
- package/dist/esm/edges/edgeKinds.native.js +25 -0
- package/dist/esm/edges/edgeKinds.native.js.map +1 -0
- package/dist/esm/edges/edgeStyle.mjs +63 -0
- package/dist/esm/edges/edgeStyle.mjs.map +1 -0
- package/dist/esm/edges/edgeStyle.native.js +65 -0
- package/dist/esm/edges/edgeStyle.native.js.map +1 -0
- package/dist/esm/index.mjs +50 -0
- package/dist/esm/index.mjs.map +1 -0
- package/dist/esm/index.native.js +50 -0
- package/dist/esm/index.native.js.map +1 -0
- package/dist/esm/interaction/lassoIntercept.mjs +29 -0
- package/dist/esm/interaction/lassoIntercept.mjs.map +1 -0
- package/dist/esm/interaction/lassoIntercept.native.js +29 -0
- package/dist/esm/interaction/lassoIntercept.native.js.map +1 -0
- package/dist/esm/interaction/legalTargets.mjs +48 -0
- package/dist/esm/interaction/legalTargets.mjs.map +1 -0
- package/dist/esm/interaction/legalTargets.native.js +88 -0
- package/dist/esm/interaction/legalTargets.native.js.map +1 -0
- package/dist/esm/interaction/snapAlignment.mjs +137 -0
- package/dist/esm/interaction/snapAlignment.mjs.map +1 -0
- package/dist/esm/interaction/snapAlignment.native.js +214 -0
- package/dist/esm/interaction/snapAlignment.native.js.map +1 -0
- package/dist/esm/interaction/snapChanges.mjs +184 -0
- package/dist/esm/interaction/snapChanges.mjs.map +1 -0
- package/dist/esm/interaction/snapChanges.native.js +236 -0
- package/dist/esm/interaction/snapChanges.native.js.map +1 -0
- package/dist/esm/interaction/spatialHash.mjs +71 -0
- package/dist/esm/interaction/spatialHash.mjs.map +1 -0
- package/dist/esm/interaction/spatialHash.native.js +136 -0
- package/dist/esm/interaction/spatialHash.native.js.map +1 -0
- package/dist/esm/interaction/useLassoSelect.mjs +231 -0
- package/dist/esm/interaction/useLassoSelect.mjs.map +1 -0
- package/dist/esm/interaction/useLassoSelect.native.js +256 -0
- package/dist/esm/interaction/useLassoSelect.native.js.map +1 -0
- package/dist/esm/knobs/KnobEnvelopeProvider.mjs +51 -0
- package/dist/esm/knobs/KnobEnvelopeProvider.mjs.map +1 -0
- package/dist/esm/knobs/KnobEnvelopeProvider.native.js +56 -0
- package/dist/esm/knobs/KnobEnvelopeProvider.native.js.map +1 -0
- package/dist/esm/knobs/envelope.mjs +29 -0
- package/dist/esm/knobs/envelope.mjs.map +1 -0
- package/dist/esm/knobs/envelope.native.js +45 -0
- package/dist/esm/knobs/envelope.native.js.map +1 -0
- package/dist/esm/knobs/graphKnobs.mjs +14 -0
- package/dist/esm/knobs/graphKnobs.mjs.map +1 -0
- package/dist/esm/knobs/graphKnobs.native.js +15 -0
- package/dist/esm/knobs/graphKnobs.native.js.map +1 -0
- package/dist/esm/knobs/useKnobEnvelope.mjs +83 -0
- package/dist/esm/knobs/useKnobEnvelope.mjs.map +1 -0
- package/dist/esm/knobs/useKnobEnvelope.native.js +112 -0
- package/dist/esm/knobs/useKnobEnvelope.native.js.map +1 -0
- package/dist/esm/layout/dagre.mjs +99 -0
- package/dist/esm/layout/dagre.mjs.map +1 -0
- package/dist/esm/layout/dagre.native.js +230 -0
- package/dist/esm/layout/dagre.native.js.map +1 -0
- package/dist/esm/layout/layout.mjs +57 -0
- package/dist/esm/layout/layout.mjs.map +1 -0
- package/dist/esm/layout/layout.native.js +82 -0
- package/dist/esm/layout/layout.native.js.map +1 -0
- package/dist/esm/layout/runner.mjs +164 -0
- package/dist/esm/layout/runner.mjs.map +1 -0
- package/dist/esm/layout/runner.native.js +214 -0
- package/dist/esm/layout/runner.native.js.map +1 -0
- package/dist/esm/layout/structuredCloneShim.mjs +54 -0
- package/dist/esm/layout/structuredCloneShim.mjs.map +1 -0
- package/dist/esm/layout/structuredCloneShim.native.js +131 -0
- package/dist/esm/layout/structuredCloneShim.native.js.map +1 -0
- package/dist/esm/layout/types.mjs +2 -0
- package/dist/esm/layout/types.mjs.map +1 -0
- package/dist/esm/layout/types.native.js +2 -0
- package/dist/esm/layout/types.native.js.map +1 -0
- package/dist/esm/layout/worker.entry.mjs +33 -0
- package/dist/esm/layout/worker.entry.mjs.map +1 -0
- package/dist/esm/layout/worker.entry.native.js +47 -0
- package/dist/esm/layout/worker.entry.native.js.map +1 -0
- package/dist/esm/layout/worker.generated.mjs +5 -0
- package/dist/esm/layout/worker.generated.mjs.map +1 -0
- package/dist/esm/layout/worker.generated.native.js +5 -0
- package/dist/esm/layout/worker.generated.native.js.map +1 -0
- package/dist/esm/model/commands.mjs +209 -0
- package/dist/esm/model/commands.mjs.map +1 -0
- package/dist/esm/model/commands.native.js +288 -0
- package/dist/esm/model/commands.native.js.map +1 -0
- package/dist/esm/model/connect.mjs +124 -0
- package/dist/esm/model/connect.mjs.map +1 -0
- package/dist/esm/model/connect.native.js +201 -0
- package/dist/esm/model/connect.native.js.map +1 -0
- package/dist/esm/model/document.mjs +2 -0
- package/dist/esm/model/document.mjs.map +1 -0
- package/dist/esm/model/document.native.js +2 -0
- package/dist/esm/model/document.native.js.map +1 -0
- package/dist/esm/model/history.mjs +96 -0
- package/dist/esm/model/history.mjs.map +1 -0
- package/dist/esm/model/history.native.js +150 -0
- package/dist/esm/model/history.native.js.map +1 -0
- package/dist/esm/model/index.mjs +8 -0
- package/dist/esm/model/index.mjs.map +1 -0
- package/dist/esm/model/index.native.js +8 -0
- package/dist/esm/model/index.native.js.map +1 -0
- package/dist/esm/model/schema.mjs +32 -0
- package/dist/esm/model/schema.mjs.map +1 -0
- package/dist/esm/model/schema.native.js +34 -0
- package/dist/esm/model/schema.native.js.map +1 -0
- package/dist/esm/model/select.mjs +49 -0
- package/dist/esm/model/select.mjs.map +1 -0
- package/dist/esm/model/select.native.js +75 -0
- package/dist/esm/model/select.native.js.map +1 -0
- package/dist/esm/model/serialize.mjs +306 -0
- package/dist/esm/model/serialize.mjs.map +1 -0
- package/dist/esm/model/serialize.native.js +345 -0
- package/dist/esm/model/serialize.native.js.map +1 -0
- package/dist/esm/native/DomOnlyStory.mjs +33 -0
- package/dist/esm/native/DomOnlyStory.mjs.map +1 -0
- package/dist/esm/native/DomOnlyStory.native.js +36 -0
- package/dist/esm/native/DomOnlyStory.native.js.map +1 -0
- package/dist/esm/native/GraphToolbar.mjs +76 -0
- package/dist/esm/native/GraphToolbar.mjs.map +1 -0
- package/dist/esm/native/GraphToolbar.native.js +79 -0
- package/dist/esm/native/GraphToolbar.native.js.map +1 -0
- package/dist/esm/native/domEntryRegistry.mjs +12 -0
- package/dist/esm/native/domEntryRegistry.mjs.map +1 -0
- package/dist/esm/native/domEntryRegistry.native.js +12 -0
- package/dist/esm/native/domEntryRegistry.native.js.map +1 -0
- package/dist/esm/native/graphChildren.mjs +18 -0
- package/dist/esm/native/graphChildren.mjs.map +1 -0
- package/dist/esm/native/graphChildren.native.js +20 -0
- package/dist/esm/native/graphChildren.native.js.map +1 -0
- package/dist/esm/nodes/GraphNode.mjs +136 -0
- package/dist/esm/nodes/GraphNode.mjs.map +1 -0
- package/dist/esm/nodes/GraphNode.native.js +178 -0
- package/dist/esm/nodes/GraphNode.native.js.map +1 -0
- package/dist/esm/nodes/GraphPort.mjs +79 -0
- package/dist/esm/nodes/GraphPort.mjs.map +1 -0
- package/dist/esm/nodes/GraphPort.native.js +80 -0
- package/dist/esm/nodes/GraphPort.native.js.map +1 -0
- package/dist/esm/nodes/handleGeometry.mjs +65 -0
- package/dist/esm/nodes/handleGeometry.mjs.map +1 -0
- package/dist/esm/nodes/handleGeometry.native.js +68 -0
- package/dist/esm/nodes/handleGeometry.native.js.map +1 -0
- package/dist/esm/nodes/lod.mjs +13 -0
- package/dist/esm/nodes/lod.mjs.map +1 -0
- package/dist/esm/nodes/lod.native.js +14 -0
- package/dist/esm/nodes/lod.native.js.map +1 -0
- package/dist/esm/nodes/nodeMeasure.mjs +72 -0
- package/dist/esm/nodes/nodeMeasure.mjs.map +1 -0
- package/dist/esm/nodes/nodeMeasure.native.js +95 -0
- package/dist/esm/nodes/nodeMeasure.native.js.map +1 -0
- package/dist/esm/nodes/overviewNode.mjs +49 -0
- package/dist/esm/nodes/overviewNode.mjs.map +1 -0
- package/dist/esm/nodes/overviewNode.native.js +53 -0
- package/dist/esm/nodes/overviewNode.native.js.map +1 -0
- package/dist/esm/react-flow/ConnectionPuck.mjs +96 -0
- package/dist/esm/react-flow/ConnectionPuck.mjs.map +1 -0
- package/dist/esm/react-flow/ConnectionPuck.native.js +114 -0
- package/dist/esm/react-flow/ConnectionPuck.native.js.map +1 -0
- package/dist/esm/react-flow/GraphActions.mjs +21 -0
- package/dist/esm/react-flow/GraphActions.mjs.map +1 -0
- package/dist/esm/react-flow/GraphActions.native.js +22 -0
- package/dist/esm/react-flow/GraphActions.native.js.map +1 -0
- package/dist/esm/react-flow/GraphCommandBridge.mjs +213 -0
- package/dist/esm/react-flow/GraphCommandBridge.mjs.map +1 -0
- package/dist/esm/react-flow/GraphCommandBridge.native.js +244 -0
- package/dist/esm/react-flow/GraphCommandBridge.native.js.map +1 -0
- package/dist/esm/react-flow/GraphNodeHost.mjs +50 -0
- package/dist/esm/react-flow/GraphNodeHost.mjs.map +1 -0
- package/dist/esm/react-flow/GraphNodeHost.native.js +59 -0
- package/dist/esm/react-flow/GraphNodeHost.native.js.map +1 -0
- package/dist/esm/react-flow/GraphPaintProbe.mjs +35 -0
- package/dist/esm/react-flow/GraphPaintProbe.mjs.map +1 -0
- package/dist/esm/react-flow/GraphPaintProbe.native.js +37 -0
- package/dist/esm/react-flow/GraphPaintProbe.native.js.map +1 -0
- package/dist/esm/react-flow/GraphZoomVar.mjs +16 -0
- package/dist/esm/react-flow/GraphZoomVar.mjs.map +1 -0
- package/dist/esm/react-flow/GraphZoomVar.native.js +19 -0
- package/dist/esm/react-flow/GraphZoomVar.native.js.map +1 -0
- package/dist/esm/react-flow/LassoOverlay.mjs +22 -0
- package/dist/esm/react-flow/LassoOverlay.mjs.map +1 -0
- package/dist/esm/react-flow/LassoOverlay.native.js +23 -0
- package/dist/esm/react-flow/LassoOverlay.native.js.map +1 -0
- package/dist/esm/react-flow/NodeGraphWeb.mjs +359 -0
- package/dist/esm/react-flow/NodeGraphWeb.mjs.map +1 -0
- package/dist/esm/react-flow/NodeGraphWeb.native.js +485 -0
- package/dist/esm/react-flow/NodeGraphWeb.native.js.map +1 -0
- package/dist/esm/react-flow/SnapGuides.mjs +60 -0
- package/dist/esm/react-flow/SnapGuides.mjs.map +1 -0
- package/dist/esm/react-flow/SnapGuides.native.js +82 -0
- package/dist/esm/react-flow/SnapGuides.native.js.map +1 -0
- package/dist/esm/react-flow/demoControlBody.mjs +67 -0
- package/dist/esm/react-flow/demoControlBody.mjs.map +1 -0
- package/dist/esm/react-flow/demoControlBody.native.js +75 -0
- package/dist/esm/react-flow/demoControlBody.native.js.map +1 -0
- package/dist/esm/react-flow/demoNodeBody.mjs +91 -0
- package/dist/esm/react-flow/demoNodeBody.mjs.map +1 -0
- package/dist/esm/react-flow/demoNodeBody.native.js +98 -0
- package/dist/esm/react-flow/demoNodeBody.native.js.map +1 -0
- package/dist/esm/react-flow/fixtures.mjs +185 -0
- package/dist/esm/react-flow/fixtures.mjs.map +1 -0
- package/dist/esm/react-flow/fixtures.native.js +192 -0
- package/dist/esm/react-flow/fixtures.native.js.map +1 -0
- package/dist/esm/react-flow/flowAdapter.mjs +94 -0
- package/dist/esm/react-flow/flowAdapter.mjs.map +1 -0
- package/dist/esm/react-flow/flowAdapter.native.js +103 -0
- package/dist/esm/react-flow/flowAdapter.native.js.map +1 -0
- package/dist/esm/react-flow/graphHandle.mjs +3 -0
- package/dist/esm/react-flow/graphHandle.mjs.map +1 -0
- package/dist/esm/react-flow/graphHandle.native.js +3 -0
- package/dist/esm/react-flow/graphHandle.native.js.map +1 -0
- package/dist/esm/react-flow/nodeCensus.mjs +28 -0
- package/dist/esm/react-flow/nodeCensus.mjs.map +1 -0
- package/dist/esm/react-flow/nodeCensus.native.js +49 -0
- package/dist/esm/react-flow/nodeCensus.native.js.map +1 -0
- package/dist/esm/react-flow/useGraphController.mjs +269 -0
- package/dist/esm/react-flow/useGraphController.mjs.map +1 -0
- package/dist/esm/react-flow/useGraphController.native.js +362 -0
- package/dist/esm/react-flow/useGraphController.native.js.map +1 -0
- package/dist/esm/react-flow/xy.mjs +8 -0
- package/dist/esm/react-flow/xy.mjs.map +1 -0
- package/dist/esm/react-flow/xy.native.js +8 -0
- package/dist/esm/react-flow/xy.native.js.map +1 -0
- package/dist/esm/theme/GraphFaces.mjs +88 -0
- package/dist/esm/theme/GraphFaces.mjs.map +1 -0
- package/dist/esm/theme/GraphFaces.native.js +152 -0
- package/dist/esm/theme/GraphFaces.native.js.map +1 -0
- package/dist/esm/theme/GraphVarsStyle.mjs +59 -0
- package/dist/esm/theme/GraphVarsStyle.mjs.map +1 -0
- package/dist/esm/theme/GraphVarsStyle.native.js +68 -0
- package/dist/esm/theme/GraphVarsStyle.native.js.map +1 -0
- package/dist/esm/theme/faces.generated.mjs +23 -0
- package/dist/esm/theme/faces.generated.mjs.map +1 -0
- package/dist/esm/theme/faces.generated.native.js +23 -0
- package/dist/esm/theme/faces.generated.native.js.map +1 -0
- package/dist/esm/theme/faces.mjs +89 -0
- package/dist/esm/theme/faces.mjs.map +1 -0
- package/dist/esm/theme/faces.native.js +98 -0
- package/dist/esm/theme/faces.native.js.map +1 -0
- package/dist/esm/theme/graphVars.mjs +284 -0
- package/dist/esm/theme/graphVars.mjs.map +1 -0
- package/dist/esm/theme/graphVars.native.js +314 -0
- package/dist/esm/theme/graphVars.native.js.map +1 -0
- package/dist/jsx/NodeGraph.mjs +9 -0
- package/dist/jsx/NodeGraph.mjs.map +1 -0
- package/dist/jsx/NodeGraph.native.js +37 -0
- package/dist/jsx/NodeGraph.native.js.map +1 -0
- package/dist/jsx/bench/frameSampler.mjs +255 -0
- package/dist/jsx/bench/frameSampler.mjs.map +1 -0
- package/dist/jsx/bench/frameSampler.native.js +409 -0
- package/dist/jsx/bench/frameSampler.native.js.map +1 -0
- package/dist/jsx/bench/generateGraph.mjs +99 -0
- package/dist/jsx/bench/generateGraph.mjs.map +1 -0
- package/dist/jsx/bench/generateGraph.native.js +128 -0
- package/dist/jsx/bench/generateGraph.native.js.map +1 -0
- package/dist/jsx/diagnostics/GraphDiagnostics.mjs +128 -0
- package/dist/jsx/diagnostics/GraphDiagnostics.mjs.map +1 -0
- package/dist/jsx/diagnostics/GraphDiagnostics.native.js +166 -0
- package/dist/jsx/diagnostics/GraphDiagnostics.native.js.map +1 -0
- package/dist/jsx/diagnostics/LiveGraphDiagnostics.mjs +76 -0
- package/dist/jsx/diagnostics/LiveGraphDiagnostics.mjs.map +1 -0
- package/dist/jsx/diagnostics/LiveGraphDiagnostics.native.js +106 -0
- package/dist/jsx/diagnostics/LiveGraphDiagnostics.native.js.map +1 -0
- package/dist/jsx/diagnostics/fromWire.mjs +23 -0
- package/dist/jsx/diagnostics/fromWire.mjs.map +1 -0
- package/dist/jsx/diagnostics/fromWire.native.js +51 -0
- package/dist/jsx/diagnostics/fromWire.native.js.map +1 -0
- package/dist/jsx/diagnostics/lastError.mjs +39 -0
- package/dist/jsx/diagnostics/lastError.mjs.map +1 -0
- package/dist/jsx/diagnostics/lastError.native.js +75 -0
- package/dist/jsx/diagnostics/lastError.native.js.map +1 -0
- package/dist/jsx/diagnostics/types.mjs +2 -0
- package/dist/jsx/diagnostics/types.mjs.map +1 -0
- package/dist/jsx/diagnostics/types.native.js +21 -0
- package/dist/jsx/diagnostics/types.native.js.map +1 -0
- package/dist/jsx/diagnostics/useGraphDiagnostics.mjs +44 -0
- package/dist/jsx/diagnostics/useGraphDiagnostics.mjs.map +1 -0
- package/dist/jsx/diagnostics/useGraphDiagnostics.native.js +75 -0
- package/dist/jsx/diagnostics/useGraphDiagnostics.native.js.map +1 -0
- package/dist/jsx/dom/GraphDomLayout.mjs +11 -0
- package/dist/jsx/dom/GraphDomLayout.mjs.map +1 -0
- package/dist/jsx/dom/GraphDomLayout.native.js +40 -0
- package/dist/jsx/dom/GraphDomLayout.native.js.map +1 -0
- package/dist/jsx/dom/boot.mjs +67 -0
- package/dist/jsx/dom/boot.mjs.map +1 -0
- package/dist/jsx/dom/boot.native.js +111 -0
- package/dist/jsx/dom/boot.native.js.map +1 -0
- package/dist/jsx/dom/wire.mjs +183 -0
- package/dist/jsx/dom/wire.mjs.map +1 -0
- package/dist/jsx/dom/wire.native.js +274 -0
- package/dist/jsx/dom/wire.native.js.map +1 -0
- package/dist/jsx/edges/GraphEdge.mjs +139 -0
- package/dist/jsx/edges/GraphEdge.mjs.map +1 -0
- package/dist/jsx/edges/GraphEdge.native.js +178 -0
- package/dist/jsx/edges/GraphEdge.native.js.map +1 -0
- package/dist/jsx/edges/edgeKinds.mjs +25 -0
- package/dist/jsx/edges/edgeKinds.mjs.map +1 -0
- package/dist/jsx/edges/edgeKinds.native.js +54 -0
- package/dist/jsx/edges/edgeKinds.native.js.map +1 -0
- package/dist/jsx/edges/edgeStyle.mjs +63 -0
- package/dist/jsx/edges/edgeStyle.mjs.map +1 -0
- package/dist/jsx/edges/edgeStyle.native.js +99 -0
- package/dist/jsx/edges/edgeStyle.native.js.map +1 -0
- package/dist/jsx/index.js +50 -0
- package/dist/jsx/index.js.map +1 -0
- package/dist/jsx/index.mjs +50 -0
- package/dist/jsx/index.mjs.map +1 -0
- package/dist/jsx/index.native.js +200 -0
- package/dist/jsx/index.native.js.map +1 -0
- package/dist/jsx/interaction/lassoIntercept.mjs +29 -0
- package/dist/jsx/interaction/lassoIntercept.mjs.map +1 -0
- package/dist/jsx/interaction/lassoIntercept.native.js +57 -0
- package/dist/jsx/interaction/lassoIntercept.native.js.map +1 -0
- package/dist/jsx/interaction/legalTargets.mjs +48 -0
- package/dist/jsx/interaction/legalTargets.mjs.map +1 -0
- package/dist/jsx/interaction/legalTargets.native.js +118 -0
- package/dist/jsx/interaction/legalTargets.native.js.map +1 -0
- package/dist/jsx/interaction/snapAlignment.mjs +137 -0
- package/dist/jsx/interaction/snapAlignment.mjs.map +1 -0
- package/dist/jsx/interaction/snapAlignment.native.js +245 -0
- package/dist/jsx/interaction/snapAlignment.native.js.map +1 -0
- package/dist/jsx/interaction/snapChanges.mjs +184 -0
- package/dist/jsx/interaction/snapChanges.mjs.map +1 -0
- package/dist/jsx/interaction/snapChanges.native.js +269 -0
- package/dist/jsx/interaction/snapChanges.native.js.map +1 -0
- package/dist/jsx/interaction/spatialHash.mjs +71 -0
- package/dist/jsx/interaction/spatialHash.mjs.map +1 -0
- package/dist/jsx/interaction/spatialHash.native.js +165 -0
- package/dist/jsx/interaction/spatialHash.native.js.map +1 -0
- package/dist/jsx/interaction/useLassoSelect.mjs +231 -0
- package/dist/jsx/interaction/useLassoSelect.mjs.map +1 -0
- package/dist/jsx/interaction/useLassoSelect.native.js +287 -0
- package/dist/jsx/interaction/useLassoSelect.native.js.map +1 -0
- package/dist/jsx/knobs/KnobEnvelopeProvider.mjs +51 -0
- package/dist/jsx/knobs/KnobEnvelopeProvider.mjs.map +1 -0
- package/dist/jsx/knobs/KnobEnvelopeProvider.native.js +85 -0
- package/dist/jsx/knobs/KnobEnvelopeProvider.native.js.map +1 -0
- package/dist/jsx/knobs/envelope.mjs +29 -0
- package/dist/jsx/knobs/envelope.mjs.map +1 -0
- package/dist/jsx/knobs/envelope.native.js +78 -0
- package/dist/jsx/knobs/envelope.native.js.map +1 -0
- package/dist/jsx/knobs/graphKnobs.mjs +14 -0
- package/dist/jsx/knobs/graphKnobs.mjs.map +1 -0
- package/dist/jsx/knobs/graphKnobs.native.js +43 -0
- package/dist/jsx/knobs/graphKnobs.native.js.map +1 -0
- package/dist/jsx/knobs/useKnobEnvelope.mjs +83 -0
- package/dist/jsx/knobs/useKnobEnvelope.mjs.map +1 -0
- package/dist/jsx/knobs/useKnobEnvelope.native.js +140 -0
- package/dist/jsx/knobs/useKnobEnvelope.native.js.map +1 -0
- package/dist/jsx/layout/dagre.mjs +99 -0
- package/dist/jsx/layout/dagre.mjs.map +1 -0
- package/dist/jsx/layout/dagre.native.js +259 -0
- package/dist/jsx/layout/dagre.native.js.map +1 -0
- package/dist/jsx/layout/layout.mjs +57 -0
- package/dist/jsx/layout/layout.mjs.map +1 -0
- package/dist/jsx/layout/layout.native.js +112 -0
- package/dist/jsx/layout/layout.native.js.map +1 -0
- package/dist/jsx/layout/runner.mjs +164 -0
- package/dist/jsx/layout/runner.mjs.map +1 -0
- package/dist/jsx/layout/runner.native.js +247 -0
- package/dist/jsx/layout/runner.native.js.map +1 -0
- package/dist/jsx/layout/structuredCloneShim.mjs +54 -0
- package/dist/jsx/layout/structuredCloneShim.mjs.map +1 -0
- package/dist/jsx/layout/structuredCloneShim.native.js +160 -0
- package/dist/jsx/layout/structuredCloneShim.native.js.map +1 -0
- package/dist/jsx/layout/types.mjs +2 -0
- package/dist/jsx/layout/types.mjs.map +1 -0
- package/dist/jsx/layout/types.native.js +21 -0
- package/dist/jsx/layout/types.native.js.map +1 -0
- package/dist/jsx/layout/worker.entry.mjs +33 -0
- package/dist/jsx/layout/worker.entry.mjs.map +1 -0
- package/dist/jsx/layout/worker.entry.native.js +75 -0
- package/dist/jsx/layout/worker.entry.native.js.map +1 -0
- package/dist/jsx/layout/worker.generated.mjs +5 -0
- package/dist/jsx/layout/worker.generated.mjs.map +1 -0
- package/dist/jsx/layout/worker.generated.native.js +35 -0
- package/dist/jsx/layout/worker.generated.native.js.map +1 -0
- package/dist/jsx/model/commands.mjs +209 -0
- package/dist/jsx/model/commands.mjs.map +1 -0
- package/dist/jsx/model/commands.native.js +317 -0
- package/dist/jsx/model/commands.native.js.map +1 -0
- package/dist/jsx/model/connect.mjs +124 -0
- package/dist/jsx/model/connect.mjs.map +1 -0
- package/dist/jsx/model/connect.native.js +239 -0
- package/dist/jsx/model/connect.native.js.map +1 -0
- package/dist/jsx/model/document.mjs +2 -0
- package/dist/jsx/model/document.mjs.map +1 -0
- package/dist/jsx/model/document.native.js +21 -0
- package/dist/jsx/model/document.native.js.map +1 -0
- package/dist/jsx/model/history.mjs +96 -0
- package/dist/jsx/model/history.mjs.map +1 -0
- package/dist/jsx/model/history.native.js +178 -0
- package/dist/jsx/model/history.native.js.map +1 -0
- package/dist/jsx/model/index.mjs +8 -0
- package/dist/jsx/model/index.mjs.map +1 -0
- package/dist/jsx/model/index.native.js +63 -0
- package/dist/jsx/model/index.native.js.map +1 -0
- package/dist/jsx/model/schema.mjs +32 -0
- package/dist/jsx/model/schema.mjs.map +1 -0
- package/dist/jsx/model/schema.native.js +68 -0
- package/dist/jsx/model/schema.native.js.map +1 -0
- package/dist/jsx/model/select.mjs +49 -0
- package/dist/jsx/model/select.mjs.map +1 -0
- package/dist/jsx/model/select.native.js +107 -0
- package/dist/jsx/model/select.native.js.map +1 -0
- package/dist/jsx/model/serialize.mjs +306 -0
- package/dist/jsx/model/serialize.mjs.map +1 -0
- package/dist/jsx/model/serialize.native.js +374 -0
- package/dist/jsx/model/serialize.native.js.map +1 -0
- package/dist/jsx/native/DomOnlyStory.mjs +33 -0
- package/dist/jsx/native/DomOnlyStory.mjs.map +1 -0
- package/dist/jsx/native/DomOnlyStory.native.js +66 -0
- package/dist/jsx/native/DomOnlyStory.native.js.map +1 -0
- package/dist/jsx/native/GraphToolbar.mjs +76 -0
- package/dist/jsx/native/GraphToolbar.mjs.map +1 -0
- package/dist/jsx/native/GraphToolbar.native.js +107 -0
- package/dist/jsx/native/GraphToolbar.native.js.map +1 -0
- package/dist/jsx/native/domEntryRegistry.mjs +12 -0
- package/dist/jsx/native/domEntryRegistry.mjs.map +1 -0
- package/dist/jsx/native/domEntryRegistry.native.js +42 -0
- package/dist/jsx/native/domEntryRegistry.native.js.map +1 -0
- package/dist/jsx/native/graphChildren.mjs +18 -0
- package/dist/jsx/native/graphChildren.mjs.map +1 -0
- package/dist/jsx/native/graphChildren.native.js +50 -0
- package/dist/jsx/native/graphChildren.native.js.map +1 -0
- package/dist/jsx/nodes/GraphNode.mjs +136 -0
- package/dist/jsx/nodes/GraphNode.mjs.map +1 -0
- package/dist/jsx/nodes/GraphNode.native.js +206 -0
- package/dist/jsx/nodes/GraphNode.native.js.map +1 -0
- package/dist/jsx/nodes/GraphPort.mjs +79 -0
- package/dist/jsx/nodes/GraphPort.mjs.map +1 -0
- package/dist/jsx/nodes/GraphPort.native.js +108 -0
- package/dist/jsx/nodes/GraphPort.native.js.map +1 -0
- package/dist/jsx/nodes/handleGeometry.mjs +65 -0
- package/dist/jsx/nodes/handleGeometry.mjs.map +1 -0
- package/dist/jsx/nodes/handleGeometry.native.js +104 -0
- package/dist/jsx/nodes/handleGeometry.native.js.map +1 -0
- package/dist/jsx/nodes/lod.mjs +13 -0
- package/dist/jsx/nodes/lod.mjs.map +1 -0
- package/dist/jsx/nodes/lod.native.js +45 -0
- package/dist/jsx/nodes/lod.native.js.map +1 -0
- package/dist/jsx/nodes/nodeMeasure.mjs +72 -0
- package/dist/jsx/nodes/nodeMeasure.mjs.map +1 -0
- package/dist/jsx/nodes/nodeMeasure.native.js +134 -0
- package/dist/jsx/nodes/nodeMeasure.native.js.map +1 -0
- package/dist/jsx/nodes/overviewNode.mjs +49 -0
- package/dist/jsx/nodes/overviewNode.mjs.map +1 -0
- package/dist/jsx/nodes/overviewNode.native.js +81 -0
- package/dist/jsx/nodes/overviewNode.native.js.map +1 -0
- package/dist/jsx/react-flow/ConnectionPuck.mjs +96 -0
- package/dist/jsx/react-flow/ConnectionPuck.mjs.map +1 -0
- package/dist/jsx/react-flow/ConnectionPuck.native.js +143 -0
- package/dist/jsx/react-flow/ConnectionPuck.native.js.map +1 -0
- package/dist/jsx/react-flow/GraphActions.mjs +21 -0
- package/dist/jsx/react-flow/GraphActions.mjs.map +1 -0
- package/dist/jsx/react-flow/GraphActions.native.js +51 -0
- package/dist/jsx/react-flow/GraphActions.native.js.map +1 -0
- package/dist/jsx/react-flow/GraphCommandBridge.mjs +213 -0
- package/dist/jsx/react-flow/GraphCommandBridge.mjs.map +1 -0
- package/dist/jsx/react-flow/GraphCommandBridge.native.js +272 -0
- package/dist/jsx/react-flow/GraphCommandBridge.native.js.map +1 -0
- package/dist/jsx/react-flow/GraphNodeHost.mjs +50 -0
- package/dist/jsx/react-flow/GraphNodeHost.mjs.map +1 -0
- package/dist/jsx/react-flow/GraphNodeHost.native.js +89 -0
- package/dist/jsx/react-flow/GraphNodeHost.native.js.map +1 -0
- package/dist/jsx/react-flow/GraphPaintProbe.mjs +35 -0
- package/dist/jsx/react-flow/GraphPaintProbe.mjs.map +1 -0
- package/dist/jsx/react-flow/GraphPaintProbe.native.js +65 -0
- package/dist/jsx/react-flow/GraphPaintProbe.native.js.map +1 -0
- package/dist/jsx/react-flow/GraphZoomVar.mjs +16 -0
- package/dist/jsx/react-flow/GraphZoomVar.mjs.map +1 -0
- package/dist/jsx/react-flow/GraphZoomVar.native.js +48 -0
- package/dist/jsx/react-flow/GraphZoomVar.native.js.map +1 -0
- package/dist/jsx/react-flow/LassoOverlay.mjs +22 -0
- package/dist/jsx/react-flow/LassoOverlay.mjs.map +1 -0
- package/dist/jsx/react-flow/LassoOverlay.native.js +51 -0
- package/dist/jsx/react-flow/LassoOverlay.native.js.map +1 -0
- package/dist/jsx/react-flow/NodeGraphWeb.mjs +359 -0
- package/dist/jsx/react-flow/NodeGraphWeb.mjs.map +1 -0
- package/dist/jsx/react-flow/NodeGraphWeb.native.js +515 -0
- package/dist/jsx/react-flow/NodeGraphWeb.native.js.map +1 -0
- package/dist/jsx/react-flow/SnapGuides.mjs +60 -0
- package/dist/jsx/react-flow/SnapGuides.mjs.map +1 -0
- package/dist/jsx/react-flow/SnapGuides.native.js +114 -0
- package/dist/jsx/react-flow/SnapGuides.native.js.map +1 -0
- package/dist/jsx/react-flow/demoControlBody.mjs +67 -0
- package/dist/jsx/react-flow/demoControlBody.mjs.map +1 -0
- package/dist/jsx/react-flow/demoControlBody.native.js +104 -0
- package/dist/jsx/react-flow/demoControlBody.native.js.map +1 -0
- package/dist/jsx/react-flow/demoNodeBody.mjs +91 -0
- package/dist/jsx/react-flow/demoNodeBody.mjs.map +1 -0
- package/dist/jsx/react-flow/demoNodeBody.native.js +131 -0
- package/dist/jsx/react-flow/demoNodeBody.native.js.map +1 -0
- package/dist/jsx/react-flow/fixtures.mjs +185 -0
- package/dist/jsx/react-flow/fixtures.mjs.map +1 -0
- package/dist/jsx/react-flow/fixtures.native.js +225 -0
- package/dist/jsx/react-flow/fixtures.native.js.map +1 -0
- package/dist/jsx/react-flow/flowAdapter.mjs +94 -0
- package/dist/jsx/react-flow/flowAdapter.mjs.map +1 -0
- package/dist/jsx/react-flow/flowAdapter.native.js +133 -0
- package/dist/jsx/react-flow/flowAdapter.native.js.map +1 -0
- package/dist/jsx/react-flow/graphHandle.mjs +3 -0
- package/dist/jsx/react-flow/graphHandle.mjs.map +1 -0
- package/dist/jsx/react-flow/graphHandle.native.js +31 -0
- package/dist/jsx/react-flow/graphHandle.native.js.map +1 -0
- package/dist/jsx/react-flow/nodeCensus.mjs +28 -0
- package/dist/jsx/react-flow/nodeCensus.mjs.map +1 -0
- package/dist/jsx/react-flow/nodeCensus.native.js +80 -0
- package/dist/jsx/react-flow/nodeCensus.native.js.map +1 -0
- package/dist/jsx/react-flow/useGraphController.mjs +269 -0
- package/dist/jsx/react-flow/useGraphController.mjs.map +1 -0
- package/dist/jsx/react-flow/useGraphController.native.js +393 -0
- package/dist/jsx/react-flow/useGraphController.native.js.map +1 -0
- package/dist/jsx/react-flow/xy.mjs +8 -0
- package/dist/jsx/react-flow/xy.mjs.map +1 -0
- package/dist/jsx/react-flow/xy.native.js +63 -0
- package/dist/jsx/react-flow/xy.native.js.map +1 -0
- package/dist/jsx/theme/GraphFaces.mjs +88 -0
- package/dist/jsx/theme/GraphFaces.mjs.map +1 -0
- package/dist/jsx/theme/GraphFaces.native.js +181 -0
- package/dist/jsx/theme/GraphFaces.native.js.map +1 -0
- package/dist/jsx/theme/GraphVarsStyle.mjs +59 -0
- package/dist/jsx/theme/GraphVarsStyle.mjs.map +1 -0
- package/dist/jsx/theme/GraphVarsStyle.native.js +100 -0
- package/dist/jsx/theme/GraphVarsStyle.native.js.map +1 -0
- package/dist/jsx/theme/faces.generated.mjs +23 -0
- package/dist/jsx/theme/faces.generated.mjs.map +1 -0
- package/dist/jsx/theme/faces.generated.native.js +51 -0
- package/dist/jsx/theme/faces.generated.native.js.map +1 -0
- package/dist/jsx/theme/faces.mjs +89 -0
- package/dist/jsx/theme/faces.mjs.map +1 -0
- package/dist/jsx/theme/faces.native.js +133 -0
- package/dist/jsx/theme/faces.native.js.map +1 -0
- package/dist/jsx/theme/graphVars.mjs +284 -0
- package/dist/jsx/theme/graphVars.mjs.map +1 -0
- package/dist/jsx/theme/graphVars.native.js +351 -0
- package/dist/jsx/theme/graphVars.native.js.map +1 -0
- package/dom-inner.ts +21 -0
- package/metro/index.js +174 -0
- package/metro/index.spec.mjs +235 -0
- package/model.ts +9 -0
- package/package.json +137 -0
- package/src/NodeGraph.native.spec.ts +164 -0
- package/src/NodeGraph.native.tsx +278 -0
- package/src/NodeGraph.tsx +27 -0
- package/src/bench/Perf200.stories.tsx +351 -0
- package/src/bench/frameSampler.spec.ts +467 -0
- package/src/bench/frameSampler.ts +516 -0
- package/src/bench/generateGraph.ts +138 -0
- package/src/diagnostics/GraphDiagnostics.spec.tsx +206 -0
- package/src/diagnostics/GraphDiagnostics.stories.tsx +194 -0
- package/src/diagnostics/GraphDiagnostics.tsx +140 -0
- package/src/diagnostics/LiveGraphDiagnostics.native.tsx +61 -0
- package/src/diagnostics/LiveGraphDiagnostics.tsx +121 -0
- package/src/diagnostics/deliberateBreak.ts +35 -0
- package/src/diagnostics/fromWire.spec.ts +74 -0
- package/src/diagnostics/fromWire.ts +48 -0
- package/src/diagnostics/lastError.ts +91 -0
- package/src/diagnostics/types.ts +103 -0
- package/src/diagnostics/useGraphDiagnostics.spec.tsx +199 -0
- package/src/diagnostics/useGraphDiagnostics.ts +85 -0
- package/src/dom/GraphDomLayout.spec.tsx +56 -0
- package/src/dom/GraphDomLayout.tsx +49 -0
- package/src/dom/NodeGraphDom.ts +43 -0
- package/src/dom/NodeGraphDomInner.tsx +524 -0
- package/src/dom/NodeGraphDomShell.ts +402 -0
- package/src/dom/boot.spec.ts +90 -0
- package/src/dom/boot.ts +153 -0
- package/src/dom/domEntry.spec.ts +481 -0
- package/src/dom/importGraph.spec.ts +287 -0
- package/src/dom/schemaRegistry.spec.tsx +182 -0
- package/src/dom/wire.spec.ts +486 -0
- package/src/dom/wire.ts +493 -0
- package/src/edges/Edges.stories.tsx +271 -0
- package/src/edges/GraphEdge.tsx +198 -0
- package/src/edges/edgeKinds.ts +51 -0
- package/src/edges/edgeStyle.spec.ts +295 -0
- package/src/edges/edgeStyle.ts +124 -0
- package/src/index.native.ts +147 -0
- package/src/index.ts +243 -0
- package/src/interaction/Lasso.stories.tsx +198 -0
- package/src/interaction/Snapping.stories.tsx +189 -0
- package/src/interaction/lassoIntercept.spec.ts +166 -0
- package/src/interaction/lassoIntercept.ts +81 -0
- package/src/interaction/legalTargets.spec.ts +304 -0
- package/src/interaction/legalTargets.ts +91 -0
- package/src/interaction/snapAlignment.spec.ts +412 -0
- package/src/interaction/snapAlignment.ts +209 -0
- package/src/interaction/snapChanges.spec.ts +273 -0
- package/src/interaction/snapChanges.ts +292 -0
- package/src/interaction/spatialHash.spec.ts +168 -0
- package/src/interaction/spatialHash.ts +128 -0
- package/src/interaction/useLassoSelect.spec.tsx +487 -0
- package/src/interaction/useLassoSelect.ts +489 -0
- package/src/knobs/KnobEnvelopeProvider.tsx +110 -0
- package/src/knobs/envelope.spec.tsx +371 -0
- package/src/knobs/envelope.ts +130 -0
- package/src/knobs/envelopeTheme.spec.ts +58 -0
- package/src/knobs/graphKnobs.ts +36 -0
- package/src/knobs/useKnobEnvelope.ts +152 -0
- package/src/layout/AutoLayout.stories.tsx +338 -0
- package/src/layout/dagre.ts +149 -0
- package/src/layout/layout.spec.ts +244 -0
- package/src/layout/layout.ts +121 -0
- package/src/layout/runner.spec.ts +365 -0
- package/src/layout/runner.ts +256 -0
- package/src/layout/structuredCloneShim.spec.ts +103 -0
- package/src/layout/structuredCloneShim.ts +106 -0
- package/src/layout/types.ts +112 -0
- package/src/layout/worker.entry.ts +74 -0
- package/src/layout/worker.generated.spec.ts +157 -0
- package/src/layout/worker.generated.ts +32 -0
- package/src/model/commands.spec.ts +214 -0
- package/src/model/commands.ts +209 -0
- package/src/model/connect.spec.ts +444 -0
- package/src/model/connect.ts +281 -0
- package/src/model/document.ts +121 -0
- package/src/model/history.spec.ts +278 -0
- package/src/model/history.ts +153 -0
- package/src/model/index.ts +74 -0
- package/src/model/schema.ts +177 -0
- package/src/model/select.spec.ts +220 -0
- package/src/model/select.ts +88 -0
- package/src/model/serialize.spec.ts +393 -0
- package/src/model/serialize.ts +395 -0
- package/src/native/DomOnlyStory.tsx +72 -0
- package/src/native/GraphFallback.native.tsx +123 -0
- package/src/native/GraphToolbar.tsx +171 -0
- package/src/native/NodeGraph.native.tsx +505 -0
- package/src/native/domEntryRegistry.spec.ts +66 -0
- package/src/native/domEntryRegistry.ts +45 -0
- package/src/native/graphChildren.spec.ts +67 -0
- package/src/native/graphChildren.ts +62 -0
- package/src/native/graphFallback.spec.ts +49 -0
- package/src/native/graphHandleRemount.spec.tsx +189 -0
- package/src/nodes/GraphNode.spec.tsx +270 -0
- package/src/nodes/GraphNode.stories.tsx +451 -0
- package/src/nodes/GraphNode.tsx +240 -0
- package/src/nodes/GraphPort.spec.tsx +442 -0
- package/src/nodes/GraphPort.stories.tsx +407 -0
- package/src/nodes/GraphPort.tsx +117 -0
- package/src/nodes/Overview.stories.tsx +237 -0
- package/src/nodes/handleGeometry.spec.ts +161 -0
- package/src/nodes/handleGeometry.ts +232 -0
- package/src/nodes/lod.spec.tsx +300 -0
- package/src/nodes/lod.ts +69 -0
- package/src/nodes/nodeMeasure.spec.ts +245 -0
- package/src/nodes/nodeMeasure.ts +216 -0
- package/src/nodes/overviewNode.tsx +71 -0
- package/src/packageShape.spec.ts +145 -0
- package/src/react-flow/ConnectionPuck.spec.tsx +242 -0
- package/src/react-flow/ConnectionPuck.tsx +175 -0
- package/src/react-flow/GraphActions.tsx +64 -0
- package/src/react-flow/GraphCommandBridge.spec.tsx +130 -0
- package/src/react-flow/GraphCommandBridge.tsx +288 -0
- package/src/react-flow/GraphNodeHost.tsx +101 -0
- package/src/react-flow/GraphPaintProbe.spec.tsx +116 -0
- package/src/react-flow/GraphPaintProbe.tsx +65 -0
- package/src/react-flow/GraphZoomVar.tsx +48 -0
- package/src/react-flow/LassoOverlay.tsx +59 -0
- package/src/react-flow/NodeGraphWeb.spec.tsx +441 -0
- package/src/react-flow/NodeGraphWeb.stories.tsx +260 -0
- package/src/react-flow/NodeGraphWeb.tsx +645 -0
- package/src/react-flow/SnapGuides.spec.tsx +161 -0
- package/src/react-flow/SnapGuides.tsx +113 -0
- package/src/react-flow/demoControlBody.tsx +96 -0
- package/src/react-flow/demoNodeBody.tsx +121 -0
- package/src/react-flow/fixtures.ts +185 -0
- package/src/react-flow/flowAdapter.ts +170 -0
- package/src/react-flow/graphHandle.ts +112 -0
- package/src/react-flow/nodeCensus.spec.ts +66 -0
- package/src/react-flow/nodeCensus.ts +69 -0
- package/src/react-flow/useGraphController.spec.tsx +849 -0
- package/src/react-flow/useGraphController.ts +473 -0
- package/src/react-flow/xy.spec.ts +182 -0
- package/src/react-flow/xy.ts +131 -0
- package/src/theme/GraphFaces.spec.tsx +101 -0
- package/src/theme/GraphFaces.tsx +218 -0
- package/src/theme/GraphVarsStyle.tsx +113 -0
- package/src/theme/faces.generated.ts +53 -0
- package/src/theme/faces.spec.ts +228 -0
- package/src/theme/faces.ts +275 -0
- package/src/theme/graphCss.spec.ts +111 -0
- package/src/theme/graphVars.spec.ts +322 -0
- package/src/theme/graphVars.ts +441 -0
- package/types/NodeGraph.d.ts +17 -0
- package/types/NodeGraph.d.ts.map +1 -0
- package/types/NodeGraph.native.d.ts +142 -0
- package/types/NodeGraph.native.d.ts.map +1 -0
- package/types/bench/frameSampler.d.ts +235 -0
- package/types/bench/frameSampler.d.ts.map +1 -0
- package/types/bench/generateGraph.d.ts +43 -0
- package/types/bench/generateGraph.d.ts.map +1 -0
- package/types/diagnostics/GraphDiagnostics.d.ts +30 -0
- package/types/diagnostics/GraphDiagnostics.d.ts.map +1 -0
- package/types/diagnostics/LiveGraphDiagnostics.d.ts +27 -0
- package/types/diagnostics/LiveGraphDiagnostics.d.ts.map +1 -0
- package/types/diagnostics/LiveGraphDiagnostics.native.d.ts +25 -0
- package/types/diagnostics/LiveGraphDiagnostics.native.d.ts.map +1 -0
- package/types/diagnostics/deliberateBreak.d.ts +28 -0
- package/types/diagnostics/deliberateBreak.d.ts.map +1 -0
- package/types/diagnostics/fromWire.d.ts +17 -0
- package/types/diagnostics/fromWire.d.ts.map +1 -0
- package/types/diagnostics/lastError.d.ts +50 -0
- package/types/diagnostics/lastError.d.ts.map +1 -0
- package/types/diagnostics/types.d.ts +101 -0
- package/types/diagnostics/types.d.ts.map +1 -0
- package/types/diagnostics/useGraphDiagnostics.d.ts +23 -0
- package/types/diagnostics/useGraphDiagnostics.d.ts.map +1 -0
- package/types/dom/GraphDomLayout.d.ts +40 -0
- package/types/dom/GraphDomLayout.d.ts.map +1 -0
- package/types/dom/NodeGraphDom.d.ts +4 -0
- package/types/dom/NodeGraphDom.d.ts.map +1 -0
- package/types/dom/NodeGraphDomInner.d.ts +26 -0
- package/types/dom/NodeGraphDomInner.d.ts.map +1 -0
- package/types/dom/NodeGraphDomShell.d.ts +221 -0
- package/types/dom/NodeGraphDomShell.d.ts.map +1 -0
- package/types/dom/boot.d.ts +90 -0
- package/types/dom/boot.d.ts.map +1 -0
- package/types/dom/wire.d.ts +355 -0
- package/types/dom/wire.d.ts.map +1 -0
- package/types/edges/GraphEdge.d.ts +59 -0
- package/types/edges/GraphEdge.d.ts.map +1 -0
- package/types/edges/edgeKinds.d.ts +43 -0
- package/types/edges/edgeKinds.d.ts.map +1 -0
- package/types/edges/edgeStyle.d.ts +79 -0
- package/types/edges/edgeStyle.d.ts.map +1 -0
- package/types/index.d.ts +123 -0
- package/types/index.d.ts.map +1 -0
- package/types/index.native.d.ts +86 -0
- package/types/index.native.d.ts.map +1 -0
- package/types/interaction/lassoIntercept.d.ts +58 -0
- package/types/interaction/lassoIntercept.d.ts.map +1 -0
- package/types/interaction/legalTargets.d.ts +59 -0
- package/types/interaction/legalTargets.d.ts.map +1 -0
- package/types/interaction/snapAlignment.d.ts +85 -0
- package/types/interaction/snapAlignment.d.ts.map +1 -0
- package/types/interaction/snapChanges.d.ts +133 -0
- package/types/interaction/snapChanges.d.ts.map +1 -0
- package/types/interaction/spatialHash.d.ts +37 -0
- package/types/interaction/spatialHash.d.ts.map +1 -0
- package/types/interaction/useLassoSelect.d.ts +151 -0
- package/types/interaction/useLassoSelect.d.ts.map +1 -0
- package/types/knobs/KnobEnvelopeProvider.d.ts +45 -0
- package/types/knobs/KnobEnvelopeProvider.d.ts.map +1 -0
- package/types/knobs/envelope.d.ts +99 -0
- package/types/knobs/envelope.d.ts.map +1 -0
- package/types/knobs/graphKnobs.d.ts +26 -0
- package/types/knobs/graphKnobs.d.ts.map +1 -0
- package/types/knobs/useKnobEnvelope.d.ts +43 -0
- package/types/knobs/useKnobEnvelope.d.ts.map +1 -0
- package/types/layout/dagre.d.ts +39 -0
- package/types/layout/dagre.d.ts.map +1 -0
- package/types/layout/layout.d.ts +58 -0
- package/types/layout/layout.d.ts.map +1 -0
- package/types/layout/runner.d.ts +60 -0
- package/types/layout/runner.d.ts.map +1 -0
- package/types/layout/structuredCloneShim.d.ts +44 -0
- package/types/layout/structuredCloneShim.d.ts.map +1 -0
- package/types/layout/types.d.ts +113 -0
- package/types/layout/types.d.ts.map +1 -0
- package/types/layout/worker.entry.d.ts +34 -0
- package/types/layout/worker.entry.d.ts.map +1 -0
- package/types/layout/worker.generated.d.ts +26 -0
- package/types/layout/worker.generated.d.ts.map +1 -0
- package/types/model/commands.d.ts +49 -0
- package/types/model/commands.d.ts.map +1 -0
- package/types/model/connect.d.ts +83 -0
- package/types/model/connect.d.ts.map +1 -0
- package/types/model/document.d.ts +111 -0
- package/types/model/document.d.ts.map +1 -0
- package/types/model/history.d.ts +40 -0
- package/types/model/history.d.ts.map +1 -0
- package/types/model/index.d.ts +20 -0
- package/types/model/index.d.ts.map +1 -0
- package/types/model/schema.d.ts +136 -0
- package/types/model/schema.d.ts.map +1 -0
- package/types/model/select.d.ts +41 -0
- package/types/model/select.d.ts.map +1 -0
- package/types/model/serialize.d.ts +33 -0
- package/types/model/serialize.d.ts.map +1 -0
- package/types/native/DomOnlyStory.d.ts +49 -0
- package/types/native/DomOnlyStory.d.ts.map +1 -0
- package/types/native/GraphFallback.native.d.ts +41 -0
- package/types/native/GraphFallback.native.d.ts.map +1 -0
- package/types/native/GraphToolbar.d.ts +75 -0
- package/types/native/GraphToolbar.d.ts.map +1 -0
- package/types/native/NodeGraph.native.d.ts +128 -0
- package/types/native/NodeGraph.native.d.ts.map +1 -0
- package/types/native/domEntryRegistry.d.ts +33 -0
- package/types/native/domEntryRegistry.d.ts.map +1 -0
- package/types/native/graphChildren.d.ts +36 -0
- package/types/native/graphChildren.d.ts.map +1 -0
- package/types/nodes/GraphNode.d.ts +48 -0
- package/types/nodes/GraphNode.d.ts.map +1 -0
- package/types/nodes/GraphPort.d.ts +41 -0
- package/types/nodes/GraphPort.d.ts.map +1 -0
- package/types/nodes/handleGeometry.d.ts +183 -0
- package/types/nodes/handleGeometry.d.ts.map +1 -0
- package/types/nodes/lod.d.ts +55 -0
- package/types/nodes/lod.d.ts.map +1 -0
- package/types/nodes/nodeMeasure.d.ts +146 -0
- package/types/nodes/nodeMeasure.d.ts.map +1 -0
- package/types/nodes/overviewNode.d.ts +34 -0
- package/types/nodes/overviewNode.d.ts.map +1 -0
- package/types/react-flow/ConnectionPuck.d.ts +62 -0
- package/types/react-flow/ConnectionPuck.d.ts.map +1 -0
- package/types/react-flow/GraphActions.d.ts +45 -0
- package/types/react-flow/GraphActions.d.ts.map +1 -0
- package/types/react-flow/GraphCommandBridge.d.ts +45 -0
- package/types/react-flow/GraphCommandBridge.d.ts.map +1 -0
- package/types/react-flow/GraphNodeHost.d.ts +32 -0
- package/types/react-flow/GraphNodeHost.d.ts.map +1 -0
- package/types/react-flow/GraphPaintProbe.d.ts +26 -0
- package/types/react-flow/GraphPaintProbe.d.ts.map +1 -0
- package/types/react-flow/GraphZoomVar.d.ts +31 -0
- package/types/react-flow/GraphZoomVar.d.ts.map +1 -0
- package/types/react-flow/LassoOverlay.d.ts +39 -0
- package/types/react-flow/LassoOverlay.d.ts.map +1 -0
- package/types/react-flow/NodeGraphWeb.d.ts +195 -0
- package/types/react-flow/NodeGraphWeb.d.ts.map +1 -0
- package/types/react-flow/SnapGuides.d.ts +49 -0
- package/types/react-flow/SnapGuides.d.ts.map +1 -0
- package/types/react-flow/demoControlBody.d.ts +47 -0
- package/types/react-flow/demoControlBody.d.ts.map +1 -0
- package/types/react-flow/demoNodeBody.d.ts +37 -0
- package/types/react-flow/demoNodeBody.d.ts.map +1 -0
- package/types/react-flow/fixtures.d.ts +107 -0
- package/types/react-flow/fixtures.d.ts.map +1 -0
- package/types/react-flow/flowAdapter.d.ts +56 -0
- package/types/react-flow/flowAdapter.d.ts.map +1 -0
- package/types/react-flow/graphHandle.d.ts +90 -0
- package/types/react-flow/graphHandle.d.ts.map +1 -0
- package/types/react-flow/nodeCensus.d.ts +42 -0
- package/types/react-flow/nodeCensus.d.ts.map +1 -0
- package/types/react-flow/useGraphController.d.ts +93 -0
- package/types/react-flow/useGraphController.d.ts.map +1 -0
- package/types/react-flow/xy.d.ts +84 -0
- package/types/react-flow/xy.d.ts.map +1 -0
- package/types/theme/GraphFaces.d.ts +82 -0
- package/types/theme/GraphFaces.d.ts.map +1 -0
- package/types/theme/GraphVarsStyle.d.ts +56 -0
- package/types/theme/GraphVarsStyle.d.ts.map +1 -0
- package/types/theme/faces.d.ts +152 -0
- package/types/theme/faces.d.ts.map +1 -0
- package/types/theme/faces.generated.d.ts +27 -0
- package/types/theme/faces.generated.d.ts.map +1 -0
- package/types/theme/graphVars.d.ts +155 -0
- package/types/theme/graphVars.d.ts.map +1 -0
|
@@ -0,0 +1,281 @@
|
|
|
1
|
+
/* oxlint-disable typescript/no-explicit-any -- the built-in rules are schema
|
|
2
|
+
agnostic by design (§4.4 writes them `ConnectionRule<any, any>`). A generic
|
|
3
|
+
parameter here would make them invariant in N and E, so `defaultRules` could
|
|
4
|
+
not be dropped into any consumer's schema — which is the one thing they are
|
|
5
|
+
for. The brand still bites: `DropOnlyRule<any, any>` is refused by
|
|
6
|
+
`validateConnection` because it lacks `tickSafe`, not because of variance. */
|
|
7
|
+
|
|
8
|
+
/**
|
|
9
|
+
* Connection rules, design §4.4. Cheap and expensive kept apart, as a TYPE.
|
|
10
|
+
*
|
|
11
|
+
* React Flow calls `isValidConnection` on every pointer tick of a connection
|
|
12
|
+
* drag, so anything on that path is paid per mouse move. Every rule here is
|
|
13
|
+
* O(1) or O(edges of one port) and carries the `tickSafe` marker.
|
|
14
|
+
* `refuseCycle` is O(V+E) and does NOT carry it, so `validateConnection` will
|
|
15
|
+
* not take it — the compiler refuses, rather than a comment asking nicely.
|
|
16
|
+
* `connect.spec.ts` pins that with a `@ts-expect-error` that fails if the two
|
|
17
|
+
* types ever collapse.
|
|
18
|
+
*/
|
|
19
|
+
|
|
20
|
+
import type { EdgeKindDefs, GraphDocument, NodeKindDefs, PortRef } from "./document";
|
|
21
|
+
import type { GraphSchema, PortSpec } from "./schema";
|
|
22
|
+
import { portArity, resolvePorts } from "./schema";
|
|
23
|
+
|
|
24
|
+
export type ConnectionVerdict =
|
|
25
|
+
| { readonly ok: true }
|
|
26
|
+
| { readonly ok: false; readonly code: string; readonly message: string };
|
|
27
|
+
|
|
28
|
+
export interface ConnectionContext<N extends NodeKindDefs, E extends EdgeKindDefs> {
|
|
29
|
+
readonly document: GraphDocument<N, E>;
|
|
30
|
+
readonly schema: GraphSchema<N, E>;
|
|
31
|
+
/** The candidate. Not yet in `document.edges`. */
|
|
32
|
+
readonly source: PortRef;
|
|
33
|
+
readonly target: PortRef;
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
export type ConnectionCheck<N extends NodeKindDefs, E extends EdgeKindDefs> = (
|
|
37
|
+
ctx: ConnectionContext<N, E>,
|
|
38
|
+
) => ConnectionVerdict;
|
|
39
|
+
|
|
40
|
+
/**
|
|
41
|
+
* A rule cheap enough for the pointer-tick path.
|
|
42
|
+
*
|
|
43
|
+
* The marker is real at runtime, not a phantom, so a rule array can be checked
|
|
44
|
+
* as well as typed — and so `defineConnectionRule` is the only way to claim it
|
|
45
|
+
* without reaching for a cast, which makes the claim a deliberate act.
|
|
46
|
+
*/
|
|
47
|
+
export type ConnectionRule<N extends NodeKindDefs, E extends EdgeKindDefs> = ConnectionCheck<
|
|
48
|
+
N,
|
|
49
|
+
E
|
|
50
|
+
> & { readonly tickSafe: true };
|
|
51
|
+
|
|
52
|
+
/**
|
|
53
|
+
* A rule that runs once, on drop. Every `ConnectionRule` is also one of these;
|
|
54
|
+
* the reverse is what the type refuses.
|
|
55
|
+
*/
|
|
56
|
+
export type DropOnlyRule<N extends NodeKindDefs, E extends EdgeKindDefs> = ConnectionCheck<N, E>;
|
|
57
|
+
|
|
58
|
+
export function defineConnectionRule<N extends NodeKindDefs, E extends EdgeKindDefs>(
|
|
59
|
+
check: ConnectionCheck<N, E>,
|
|
60
|
+
): ConnectionRule<N, E> {
|
|
61
|
+
return Object.assign(check, { tickSafe: true } as const);
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
const pass: ConnectionVerdict = { ok: true };
|
|
65
|
+
|
|
66
|
+
function refuse(code: string, message: string): ConnectionVerdict {
|
|
67
|
+
return { ok: false, code, message };
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
interface Resolved {
|
|
71
|
+
readonly port: PortSpec;
|
|
72
|
+
}
|
|
73
|
+
|
|
74
|
+
type Lookup = Resolved | { readonly problem: ConnectionVerdict };
|
|
75
|
+
|
|
76
|
+
function lookup<N extends NodeKindDefs, E extends EdgeKindDefs>(
|
|
77
|
+
ctx: ConnectionContext<N, E>,
|
|
78
|
+
ref: PortRef,
|
|
79
|
+
end: "source" | "target",
|
|
80
|
+
): Lookup {
|
|
81
|
+
const node = ctx.document.nodes.find((candidate) => candidate.id === ref.node);
|
|
82
|
+
if (!node) {
|
|
83
|
+
return {
|
|
84
|
+
problem: refuse(
|
|
85
|
+
"unknown-node",
|
|
86
|
+
`the ${end} names node ${JSON.stringify(ref.node)}, which is not in this document`,
|
|
87
|
+
),
|
|
88
|
+
};
|
|
89
|
+
}
|
|
90
|
+
const port = resolvePorts(ctx.schema, node).find((candidate) => candidate.id === ref.port);
|
|
91
|
+
if (!port) {
|
|
92
|
+
return {
|
|
93
|
+
problem: refuse(
|
|
94
|
+
"unknown-port",
|
|
95
|
+
`node ${JSON.stringify(ref.node)} has no port ${JSON.stringify(ref.port)}`,
|
|
96
|
+
),
|
|
97
|
+
};
|
|
98
|
+
}
|
|
99
|
+
return { port };
|
|
100
|
+
}
|
|
101
|
+
|
|
102
|
+
function isResolved(value: Lookup): value is Resolved {
|
|
103
|
+
return "port" in value;
|
|
104
|
+
}
|
|
105
|
+
|
|
106
|
+
/**
|
|
107
|
+
* Out to in, and nothing else.
|
|
108
|
+
*
|
|
109
|
+
* This rule is FIRST in `defaultRules`, which is also why it owns the two
|
|
110
|
+
* lookup failures. Every other rule treats an unresolvable end as none of its
|
|
111
|
+
* business and passes, so each rule refuses exactly its own case and the
|
|
112
|
+
* "refuses its own, passes the other four" matrix in the spec stays honest.
|
|
113
|
+
*/
|
|
114
|
+
export const refuseDirection: ConnectionRule<any, any> = defineConnectionRule((ctx) => {
|
|
115
|
+
const source = lookup(ctx, ctx.source, "source");
|
|
116
|
+
if (!isResolved(source)) return source.problem;
|
|
117
|
+
const target = lookup(ctx, ctx.target, "target");
|
|
118
|
+
if (!isResolved(target)) return target.problem;
|
|
119
|
+
if (source.port.direction !== "out") {
|
|
120
|
+
return refuse(
|
|
121
|
+
"wrong-direction",
|
|
122
|
+
`${ctx.source.port} is an input; a connection starts at an output`,
|
|
123
|
+
);
|
|
124
|
+
}
|
|
125
|
+
if (target.port.direction !== "in") {
|
|
126
|
+
return refuse(
|
|
127
|
+
"wrong-direction",
|
|
128
|
+
`${ctx.target.port} is an output; a connection ends at an input`,
|
|
129
|
+
);
|
|
130
|
+
}
|
|
131
|
+
return pass;
|
|
132
|
+
});
|
|
133
|
+
|
|
134
|
+
export const refuseSelfLoop: ConnectionRule<any, any> = defineConnectionRule((ctx) =>
|
|
135
|
+
ctx.source.node === ctx.target.node
|
|
136
|
+
? refuse("self-loop", `node ${JSON.stringify(ctx.source.node)} cannot connect to itself`)
|
|
137
|
+
: pass,
|
|
138
|
+
);
|
|
139
|
+
|
|
140
|
+
/** "one" means one edge on that port, in that direction. */
|
|
141
|
+
export const refusePortArity: ConnectionRule<any, any> = defineConnectionRule((ctx) => {
|
|
142
|
+
const source = lookup(ctx, ctx.source, "source");
|
|
143
|
+
const target = lookup(ctx, ctx.target, "target");
|
|
144
|
+
if (isResolved(source) && portArity(source.port) === "one") {
|
|
145
|
+
const taken = ctx.document.edges.some(
|
|
146
|
+
(edge) => edge.source.node === ctx.source.node && edge.source.port === ctx.source.port,
|
|
147
|
+
);
|
|
148
|
+
if (taken) {
|
|
149
|
+
return refuse(
|
|
150
|
+
"port-arity",
|
|
151
|
+
`port ${JSON.stringify(ctx.source.port)} takes one connection and already has it`,
|
|
152
|
+
);
|
|
153
|
+
}
|
|
154
|
+
}
|
|
155
|
+
if (isResolved(target) && portArity(target.port) === "one") {
|
|
156
|
+
const taken = ctx.document.edges.some(
|
|
157
|
+
(edge) => edge.target.node === ctx.target.node && edge.target.port === ctx.target.port,
|
|
158
|
+
);
|
|
159
|
+
if (taken) {
|
|
160
|
+
return refuse(
|
|
161
|
+
"port-arity",
|
|
162
|
+
`port ${JSON.stringify(ctx.target.port)} takes one connection and already has it`,
|
|
163
|
+
);
|
|
164
|
+
}
|
|
165
|
+
}
|
|
166
|
+
return pass;
|
|
167
|
+
});
|
|
168
|
+
|
|
169
|
+
export const refuseDuplicate: ConnectionRule<any, any> = defineConnectionRule((ctx) =>
|
|
170
|
+
ctx.document.edges.some(
|
|
171
|
+
(edge) =>
|
|
172
|
+
edge.source.node === ctx.source.node &&
|
|
173
|
+
edge.source.port === ctx.source.port &&
|
|
174
|
+
edge.target.node === ctx.target.node &&
|
|
175
|
+
edge.target.port === ctx.target.port,
|
|
176
|
+
)
|
|
177
|
+
? refuse("duplicate-edge", "these two ports are already connected")
|
|
178
|
+
: pass,
|
|
179
|
+
);
|
|
180
|
+
|
|
181
|
+
/**
|
|
182
|
+
* An untyped port connects to anything, so `dataType` stays opt-in: a schema
|
|
183
|
+
* that never sets it never trips this rule.
|
|
184
|
+
*/
|
|
185
|
+
export function refuseDataTypeMismatch(
|
|
186
|
+
compatible: (from: string, to: string) => boolean = (from, to) => from === to,
|
|
187
|
+
): ConnectionRule<any, any> {
|
|
188
|
+
return defineConnectionRule((ctx) => {
|
|
189
|
+
const source = lookup(ctx, ctx.source, "source");
|
|
190
|
+
const target = lookup(ctx, ctx.target, "target");
|
|
191
|
+
if (!isResolved(source) || !isResolved(target)) return pass;
|
|
192
|
+
const from = source.port.dataType;
|
|
193
|
+
const to = target.port.dataType;
|
|
194
|
+
if (from === undefined || to === undefined) return pass;
|
|
195
|
+
return compatible(from, to)
|
|
196
|
+
? pass
|
|
197
|
+
: refuse("data-type-mismatch", `a ${from} output does not fit a ${to} input`);
|
|
198
|
+
});
|
|
199
|
+
}
|
|
200
|
+
|
|
201
|
+
/**
|
|
202
|
+
* O(V+E) DFS from the candidate's target back to its source. NOT a
|
|
203
|
+
* `ConnectionRule` — see the type above. Its cost at 200 nodes / 400 edges is
|
|
204
|
+
* unmeasured, and it is a bench line before it is ever recommended.
|
|
205
|
+
*/
|
|
206
|
+
export function refuseCycle(): DropOnlyRule<any, any> {
|
|
207
|
+
return (ctx) => {
|
|
208
|
+
if (ctx.source.node === ctx.target.node) {
|
|
209
|
+
return refuse("cycle", "a node cannot feed itself");
|
|
210
|
+
}
|
|
211
|
+
const out = new Map<string, string[]>();
|
|
212
|
+
for (const edge of ctx.document.edges) {
|
|
213
|
+
const list = out.get(edge.source.node);
|
|
214
|
+
if (list) list.push(edge.target.node);
|
|
215
|
+
else out.set(edge.source.node, [edge.target.node]);
|
|
216
|
+
}
|
|
217
|
+
// Walk forward from where the candidate LANDS. Reaching where it starts
|
|
218
|
+
// means the candidate closes a loop.
|
|
219
|
+
const seen = new Set<string>();
|
|
220
|
+
const stack = [ctx.target.node];
|
|
221
|
+
while (stack.length > 0) {
|
|
222
|
+
const current = stack.pop() as string;
|
|
223
|
+
if (current === ctx.source.node) {
|
|
224
|
+
return refuse(
|
|
225
|
+
"cycle",
|
|
226
|
+
`connecting these would make ${JSON.stringify(ctx.source.node)} reachable from itself`,
|
|
227
|
+
);
|
|
228
|
+
}
|
|
229
|
+
if (seen.has(current)) continue;
|
|
230
|
+
seen.add(current);
|
|
231
|
+
const next = out.get(current);
|
|
232
|
+
if (next) stack.push(...next);
|
|
233
|
+
}
|
|
234
|
+
return pass;
|
|
235
|
+
};
|
|
236
|
+
}
|
|
237
|
+
|
|
238
|
+
/**
|
|
239
|
+
* Order matters: first refusal wins, and `refuseDirection` is first so an
|
|
240
|
+
* impossible pair reports the reason a user can act on rather than whichever
|
|
241
|
+
* rule happened to be checked first.
|
|
242
|
+
*/
|
|
243
|
+
export const defaultRules: readonly ConnectionRule<any, any>[] = [
|
|
244
|
+
refuseDirection,
|
|
245
|
+
refuseSelfLoop,
|
|
246
|
+
refusePortArity,
|
|
247
|
+
refuseDuplicate,
|
|
248
|
+
refuseDataTypeMismatch(),
|
|
249
|
+
];
|
|
250
|
+
|
|
251
|
+
export const defaultDropRules: readonly DropOnlyRule<any, any>[] = [refuseCycle()];
|
|
252
|
+
|
|
253
|
+
/**
|
|
254
|
+
* The pointer-tick path. Takes `ConnectionRule`s only; a `DropOnlyRule` is a
|
|
255
|
+
* compile error, which is the whole point of the split.
|
|
256
|
+
*/
|
|
257
|
+
export function validateConnection<N extends NodeKindDefs, E extends EdgeKindDefs>(
|
|
258
|
+
ctx: ConnectionContext<N, E>,
|
|
259
|
+
rules: readonly ConnectionRule<N, E>[] = ctx.schema.rules,
|
|
260
|
+
): ConnectionVerdict {
|
|
261
|
+
for (const rule of rules) {
|
|
262
|
+
const verdict = rule(ctx);
|
|
263
|
+
if (!verdict.ok) return verdict;
|
|
264
|
+
}
|
|
265
|
+
return pass;
|
|
266
|
+
}
|
|
267
|
+
|
|
268
|
+
/** The drop path. Takes both, tick-safe rules first. */
|
|
269
|
+
export function validateDrop<N extends NodeKindDefs, E extends EdgeKindDefs>(
|
|
270
|
+
ctx: ConnectionContext<N, E>,
|
|
271
|
+
rules: readonly ConnectionRule<N, E>[] = ctx.schema.rules,
|
|
272
|
+
dropRules: readonly DropOnlyRule<N, E>[] = ctx.schema.dropRules,
|
|
273
|
+
): ConnectionVerdict {
|
|
274
|
+
const cheap = validateConnection(ctx, rules);
|
|
275
|
+
if (!cheap.ok) return cheap;
|
|
276
|
+
for (const rule of dropRules) {
|
|
277
|
+
const verdict = rule(ctx);
|
|
278
|
+
if (!verdict.ok) return verdict;
|
|
279
|
+
}
|
|
280
|
+
return pass;
|
|
281
|
+
}
|
|
@@ -0,0 +1,121 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The document. Types only — no React, no DOM, no `@xyflow`, no runtime.
|
|
3
|
+
*
|
|
4
|
+
* Design §4.1 and §4.2. This is what a server, a CLI, a Frappe hook or the CI
|
|
5
|
+
* bench imports when it wants the shape of a graph and nothing else.
|
|
6
|
+
*/
|
|
7
|
+
|
|
8
|
+
/**
|
|
9
|
+
* Ids are deliberately unbranded. They cross a JSON bridge, become React keys
|
|
10
|
+
* and CSS selectors, and a cast at every wire boundary would be noise.
|
|
11
|
+
* `PortRef` already removes the bug branding would have caught.
|
|
12
|
+
*/
|
|
13
|
+
export type NodeId = string;
|
|
14
|
+
export type EdgeId = string;
|
|
15
|
+
export type PortId = string;
|
|
16
|
+
|
|
17
|
+
export interface XY {
|
|
18
|
+
readonly x: number;
|
|
19
|
+
readonly y: number;
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
export interface Size {
|
|
23
|
+
readonly width: number;
|
|
24
|
+
readonly height: number;
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
export interface Rect extends XY, Size {}
|
|
28
|
+
|
|
29
|
+
export interface Viewport extends XY {
|
|
30
|
+
readonly zoom: number;
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
/** The struct is what prevents id confusion, so ids stay plain strings. */
|
|
34
|
+
export interface PortRef {
|
|
35
|
+
readonly node: NodeId;
|
|
36
|
+
readonly port: PortId;
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
export type JsonPrimitive = string | number | boolean | null;
|
|
40
|
+
export type JsonValue =
|
|
41
|
+
| JsonPrimitive
|
|
42
|
+
| readonly JsonValue[]
|
|
43
|
+
| { readonly [key: string]: JsonValue };
|
|
44
|
+
|
|
45
|
+
/**
|
|
46
|
+
* A literal, on purpose. Bumping it to `2` is a compile error at every
|
|
47
|
+
* construction site in the repo, which is the review moment a schema change
|
|
48
|
+
* deserves. There is no migration chain in v1 because there is nothing to
|
|
49
|
+
* migrate from, and a speculative one is the kind of generality that rots.
|
|
50
|
+
*/
|
|
51
|
+
export type GraphDocumentVersion = 1;
|
|
52
|
+
|
|
53
|
+
export type NodeKindDefs = Record<string, unknown>;
|
|
54
|
+
export type EdgeKindDefs = Record<string, unknown>;
|
|
55
|
+
|
|
56
|
+
export type GraphNodeOf<N extends NodeKindDefs> = {
|
|
57
|
+
[K in keyof N & string]: {
|
|
58
|
+
readonly id: NodeId;
|
|
59
|
+
readonly kind: K;
|
|
60
|
+
readonly position: XY;
|
|
61
|
+
readonly data: N[K];
|
|
62
|
+
/** Seeded from `NodeKindSpec.measure` + resolved knobs BEFORE first paint. */
|
|
63
|
+
readonly size?: Size;
|
|
64
|
+
readonly parent?: NodeId;
|
|
65
|
+
readonly locked?: boolean;
|
|
66
|
+
};
|
|
67
|
+
}[keyof N & string];
|
|
68
|
+
|
|
69
|
+
export type GraphEdgeOf<E extends EdgeKindDefs> = {
|
|
70
|
+
[K in keyof E & string]: {
|
|
71
|
+
readonly id: EdgeId;
|
|
72
|
+
readonly kind: K;
|
|
73
|
+
readonly source: PortRef;
|
|
74
|
+
readonly target: PortRef;
|
|
75
|
+
readonly data: E[K];
|
|
76
|
+
readonly label?: string;
|
|
77
|
+
};
|
|
78
|
+
}[keyof E & string];
|
|
79
|
+
|
|
80
|
+
export interface GraphDocument<N extends NodeKindDefs, E extends EdgeKindDefs> {
|
|
81
|
+
readonly version: GraphDocumentVersion;
|
|
82
|
+
readonly nodes: readonly GraphNodeOf<N>[];
|
|
83
|
+
readonly edges: readonly GraphEdgeOf<E>[];
|
|
84
|
+
readonly viewport?: Viewport;
|
|
85
|
+
readonly meta?: Readonly<Record<string, JsonValue>>;
|
|
86
|
+
}
|
|
87
|
+
|
|
88
|
+
/**
|
|
89
|
+
* The slice of a schema `parseDocument` actually reads: which kinds exist.
|
|
90
|
+
*
|
|
91
|
+
* Design §4.6 writes `parseDocument(raw, schema: GraphSchema<N, E>)`, and that
|
|
92
|
+
* call shape is unchanged — task 1.3's `GraphSchema` extends this. The split
|
|
93
|
+
* exists because parsing needs kind NAMES and nothing else: no `render`, no
|
|
94
|
+
* `measure`, no rules. So `serialize.ts` does not have to import a module full
|
|
95
|
+
* of React component types to check that `"wormhole"` is not a node kind, and
|
|
96
|
+
* the model's serialization half stays importable on its own.
|
|
97
|
+
*
|
|
98
|
+
* `__types` is phantom. It is never read at runtime; it exists so `N` and `E`
|
|
99
|
+
* flow from the schema into the parsed document's type.
|
|
100
|
+
*/
|
|
101
|
+
export interface DocumentSchema<
|
|
102
|
+
N extends NodeKindDefs = NodeKindDefs,
|
|
103
|
+
E extends EdgeKindDefs = EdgeKindDefs,
|
|
104
|
+
> {
|
|
105
|
+
readonly nodes: Readonly<Record<string, unknown>>;
|
|
106
|
+
readonly edges: Readonly<Record<string, unknown>>;
|
|
107
|
+
readonly __types?: { readonly nodes: N; readonly edges: E };
|
|
108
|
+
}
|
|
109
|
+
|
|
110
|
+
/** One thing wrong with a document, and where. */
|
|
111
|
+
export interface DocumentProblem {
|
|
112
|
+
/** A JSON-ish path into the input, e.g. `nodes[1].position.x`. */
|
|
113
|
+
readonly path: string;
|
|
114
|
+
/** Stable, machine-readable. Messages are for humans and may be reworded. */
|
|
115
|
+
readonly code: string;
|
|
116
|
+
readonly message: string;
|
|
117
|
+
}
|
|
118
|
+
|
|
119
|
+
export type Result<T, E> =
|
|
120
|
+
| { readonly ok: true; readonly value: T }
|
|
121
|
+
| { readonly ok: false; readonly error: E };
|
|
@@ -0,0 +1,278 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The undo journal, design §4.5.
|
|
3
|
+
*
|
|
4
|
+
* "A drag is one undo. A relayout is one undo, and it never coalesces with a
|
|
5
|
+
* drag." Both halves are here, and so is the reason the second half is not
|
|
6
|
+
* automatic: a pointer drag emits a `moveNodes` per frame, so without
|
|
7
|
+
* coalescing a two-second drag buries the stack under 120 entries and undo
|
|
8
|
+
* becomes useless. Coalescing too eagerly is the opposite failure — a tidy
|
|
9
|
+
* swallowed into the drag before it, and one undo that cannot get the old
|
|
10
|
+
* arrangement back.
|
|
11
|
+
*
|
|
12
|
+
* Time is injected rather than faked globally: the module is pure, so a `now`
|
|
13
|
+
* function is a smaller seam than `vi.useFakeTimers` and it cannot leak.
|
|
14
|
+
*/
|
|
15
|
+
|
|
16
|
+
import { describe, expect, it } from "vitest";
|
|
17
|
+
import { applyCommand } from "./commands";
|
|
18
|
+
import type { GraphCommand } from "./commands";
|
|
19
|
+
import type { GraphDocument } from "./document";
|
|
20
|
+
import { createHistory } from "./history";
|
|
21
|
+
|
|
22
|
+
type Nodes = { readonly task: { readonly title: string } };
|
|
23
|
+
type Edges = { readonly flow: Record<string, never> };
|
|
24
|
+
type Doc = GraphDocument<Nodes, Edges>;
|
|
25
|
+
|
|
26
|
+
const doc: Doc = {
|
|
27
|
+
version: 1,
|
|
28
|
+
nodes: [
|
|
29
|
+
{ id: "a", kind: "task", position: { x: 0, y: 0 }, data: { title: "a" } },
|
|
30
|
+
{ id: "b", kind: "task", position: { x: 100, y: 0 }, data: { title: "b" } },
|
|
31
|
+
],
|
|
32
|
+
edges: [],
|
|
33
|
+
};
|
|
34
|
+
|
|
35
|
+
function clock(start = 1_000) {
|
|
36
|
+
let t = start;
|
|
37
|
+
return { now: () => t, tick: (ms: number) => (t += ms) };
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
const drag = (dx: number): GraphCommand<Nodes, Edges> => ({
|
|
41
|
+
t: "moveNodes",
|
|
42
|
+
deltas: { a: { x: dx, y: 0 }, b: { x: dx, y: 0 } },
|
|
43
|
+
});
|
|
44
|
+
|
|
45
|
+
const relayout: GraphCommand<Nodes, Edges> = {
|
|
46
|
+
t: "setPositions",
|
|
47
|
+
positions: { a: { x: 0, y: 0 }, b: { x: 0, y: 60 } },
|
|
48
|
+
};
|
|
49
|
+
|
|
50
|
+
describe("a 30-step drag", () => {
|
|
51
|
+
// 20 ms a step, so the gesture runs 580 ms — LONGER than the 400 ms default.
|
|
52
|
+
// That is deliberate: the window measures the gap since the last movement,
|
|
53
|
+
// not since the gesture began, and a fixed window would break this drag into
|
|
54
|
+
// 21 entries while a 290 ms one would pass either way.
|
|
55
|
+
it("coalesces to one entry", () => {
|
|
56
|
+
const time = clock();
|
|
57
|
+
const history = createHistory<Nodes, Edges>({ now: time.now });
|
|
58
|
+
let current = doc;
|
|
59
|
+
for (let i = 0; i < 30; i++) {
|
|
60
|
+
current = history.commit(current, drag(1));
|
|
61
|
+
time.tick(20);
|
|
62
|
+
}
|
|
63
|
+
expect(history.depth()).toBe(1);
|
|
64
|
+
});
|
|
65
|
+
|
|
66
|
+
it("composes the deltas by addition", () => {
|
|
67
|
+
const time = clock();
|
|
68
|
+
const history = createHistory<Nodes, Edges>({ now: time.now });
|
|
69
|
+
let current = doc;
|
|
70
|
+
for (let i = 0; i < 30; i++) {
|
|
71
|
+
current = history.commit(current, drag(1));
|
|
72
|
+
time.tick(20);
|
|
73
|
+
}
|
|
74
|
+
expect(current.nodes.map((n) => n.position.x)).toEqual([30, 130]);
|
|
75
|
+
const entry = history.entries()[0];
|
|
76
|
+
expect(entry.redo).toEqual({
|
|
77
|
+
t: "moveNodes",
|
|
78
|
+
deltas: { a: { x: 30, y: 0 }, b: { x: 30, y: 0 } },
|
|
79
|
+
});
|
|
80
|
+
expect(entry.undo).toEqual({
|
|
81
|
+
t: "moveNodes",
|
|
82
|
+
deltas: { a: { x: -30, y: 0 }, b: { x: -30, y: 0 } },
|
|
83
|
+
});
|
|
84
|
+
});
|
|
85
|
+
|
|
86
|
+
it("is one undo, all the way back", () => {
|
|
87
|
+
const time = clock();
|
|
88
|
+
const history = createHistory<Nodes, Edges>({ now: time.now });
|
|
89
|
+
let current = doc;
|
|
90
|
+
for (let i = 0; i < 30; i++) {
|
|
91
|
+
current = history.commit(current, drag(1));
|
|
92
|
+
time.tick(20);
|
|
93
|
+
}
|
|
94
|
+
expect(history.undo(current)).toEqual(doc);
|
|
95
|
+
});
|
|
96
|
+
|
|
97
|
+
it("starts a new entry once the pointer has been still longer than coalesceMs", () => {
|
|
98
|
+
const time = clock();
|
|
99
|
+
const history = createHistory<Nodes, Edges>({ now: time.now, coalesceMs: 400 });
|
|
100
|
+
let current = history.commit(doc, drag(1));
|
|
101
|
+
time.tick(401);
|
|
102
|
+
current = history.commit(current, drag(1));
|
|
103
|
+
expect(history.depth()).toBe(2);
|
|
104
|
+
});
|
|
105
|
+
|
|
106
|
+
it("does not coalesce two drags of DIFFERENT node sets", () => {
|
|
107
|
+
// Two nodes dragged one after the other is two undos, not one.
|
|
108
|
+
const time = clock();
|
|
109
|
+
const history = createHistory<Nodes, Edges>({ now: time.now });
|
|
110
|
+
let current = history.commit(doc, { t: "moveNodes", deltas: { a: { x: 1, y: 0 } } });
|
|
111
|
+
time.tick(10);
|
|
112
|
+
current = history.commit(current, { t: "moveNodes", deltas: { b: { x: 1, y: 0 } } });
|
|
113
|
+
expect(history.depth()).toBe(2);
|
|
114
|
+
});
|
|
115
|
+
});
|
|
116
|
+
|
|
117
|
+
describe("a relayout", () => {
|
|
118
|
+
it("is one entry", () => {
|
|
119
|
+
const history = createHistory<Nodes, Edges>({ now: clock().now });
|
|
120
|
+
history.commit(doc, relayout);
|
|
121
|
+
expect(history.depth()).toBe(1);
|
|
122
|
+
});
|
|
123
|
+
|
|
124
|
+
it("never coalesces with the drag before it, even inside coalesceMs", () => {
|
|
125
|
+
const time = clock();
|
|
126
|
+
const history = createHistory<Nodes, Edges>({ now: time.now, coalesceMs: 400 });
|
|
127
|
+
let current = history.commit(doc, drag(5));
|
|
128
|
+
time.tick(1);
|
|
129
|
+
current = history.commit(current, relayout);
|
|
130
|
+
expect(history.depth()).toBe(2);
|
|
131
|
+
});
|
|
132
|
+
|
|
133
|
+
it("never coalesces with the drag after it either", () => {
|
|
134
|
+
const time = clock();
|
|
135
|
+
const history = createHistory<Nodes, Edges>({ now: time.now, coalesceMs: 400 });
|
|
136
|
+
let current = history.commit(doc, relayout);
|
|
137
|
+
time.tick(1);
|
|
138
|
+
current = history.commit(current, drag(5));
|
|
139
|
+
expect(history.depth()).toBe(2);
|
|
140
|
+
});
|
|
141
|
+
|
|
142
|
+
it("never coalesces with another relayout", () => {
|
|
143
|
+
const time = clock();
|
|
144
|
+
const history = createHistory<Nodes, Edges>({ now: time.now, coalesceMs: 400 });
|
|
145
|
+
let current = history.commit(doc, relayout);
|
|
146
|
+
time.tick(1);
|
|
147
|
+
current = history.commit(current, relayout);
|
|
148
|
+
expect(history.depth()).toBe(2);
|
|
149
|
+
});
|
|
150
|
+
|
|
151
|
+
it("restores the whole pre-layout arrangement in one undo", () => {
|
|
152
|
+
const time = clock();
|
|
153
|
+
const history = createHistory<Nodes, Edges>({ now: time.now });
|
|
154
|
+
const scattered = applyCommand(doc, {
|
|
155
|
+
t: "setPositions",
|
|
156
|
+
positions: { a: { x: 7, y: 7 }, b: { x: 9, y: 9 } },
|
|
157
|
+
});
|
|
158
|
+
const tidied = history.commit(scattered, relayout);
|
|
159
|
+
expect(tidied.nodes.map((n) => n.position)).toEqual([
|
|
160
|
+
{ x: 0, y: 0 },
|
|
161
|
+
{ x: 0, y: 60 },
|
|
162
|
+
]);
|
|
163
|
+
expect(history.undo(tidied)).toEqual(scattered);
|
|
164
|
+
});
|
|
165
|
+
});
|
|
166
|
+
|
|
167
|
+
describe("the limit", () => {
|
|
168
|
+
it("evicts the oldest entry", () => {
|
|
169
|
+
const time = clock();
|
|
170
|
+
const history = createHistory<Nodes, Edges>({ now: time.now, limit: 3 });
|
|
171
|
+
let current = doc;
|
|
172
|
+
for (let i = 0; i < 5; i++) {
|
|
173
|
+
current = history.commit(current, drag(1));
|
|
174
|
+
time.tick(1_000);
|
|
175
|
+
}
|
|
176
|
+
expect(history.depth()).toBe(3);
|
|
177
|
+
});
|
|
178
|
+
|
|
179
|
+
it("cannot undo past what it evicted", () => {
|
|
180
|
+
// Powers of two, not five identical steps: with 1,1,1,1,1 the sum of the
|
|
181
|
+
// last three equals the sum of the first three, so evicting the WRONG end
|
|
182
|
+
// lands on the same number and the test proves nothing.
|
|
183
|
+
const time = clock();
|
|
184
|
+
const history = createHistory<Nodes, Edges>({ now: time.now, limit: 3 });
|
|
185
|
+
let current = doc;
|
|
186
|
+
for (const step of [1, 2, 4, 8, 16]) {
|
|
187
|
+
current = history.commit(current, drag(step));
|
|
188
|
+
time.tick(1_000);
|
|
189
|
+
}
|
|
190
|
+
expect(current.nodes[0].position.x).toBe(31);
|
|
191
|
+
for (let i = 0; i < 3; i++) current = history.undo(current);
|
|
192
|
+
expect(history.canUndo()).toBe(false);
|
|
193
|
+
// 4, 8 and 16 are undoable; 1 and 2 were evicted and are gone for good.
|
|
194
|
+
expect(current.nodes[0].position.x).toBe(3);
|
|
195
|
+
});
|
|
196
|
+
});
|
|
197
|
+
|
|
198
|
+
describe("redo", () => {
|
|
199
|
+
it("comes back to where undo left", () => {
|
|
200
|
+
const time = clock();
|
|
201
|
+
const history = createHistory<Nodes, Edges>({ now: time.now });
|
|
202
|
+
const moved = history.commit(doc, drag(5));
|
|
203
|
+
const undone = history.undo(moved);
|
|
204
|
+
expect(undone).toEqual(doc);
|
|
205
|
+
expect(history.canRedo()).toBe(true);
|
|
206
|
+
expect(history.redo(undone)).toEqual(moved);
|
|
207
|
+
});
|
|
208
|
+
|
|
209
|
+
it("clears on a new command", () => {
|
|
210
|
+
const time = clock();
|
|
211
|
+
const history = createHistory<Nodes, Edges>({ now: time.now });
|
|
212
|
+
const moved = history.commit(doc, drag(5));
|
|
213
|
+
const undone = history.undo(moved);
|
|
214
|
+
expect(history.canRedo()).toBe(true);
|
|
215
|
+
time.tick(1_000);
|
|
216
|
+
history.commit(undone, drag(2));
|
|
217
|
+
expect(history.canRedo()).toBe(false);
|
|
218
|
+
});
|
|
219
|
+
|
|
220
|
+
it("does not coalesce into an earlier entry when a redo is pending", () => {
|
|
221
|
+
// The guard only matters when the past is non-empty TOO. A drag on `a`, a
|
|
222
|
+
// drag on `b`, one undo, then another drag on `a` inside coalesceMs of the
|
|
223
|
+
// first: without the guard that folds into entry A while B still sits on
|
|
224
|
+
// the redo stack, and redo would then replay B onto a document that never
|
|
225
|
+
// had it.
|
|
226
|
+
const time = clock();
|
|
227
|
+
const history = createHistory<Nodes, Edges>({ now: time.now, coalesceMs: 400 });
|
|
228
|
+
const onlyA = (dx: number): GraphCommand<Nodes, Edges> => ({
|
|
229
|
+
t: "moveNodes",
|
|
230
|
+
deltas: { a: { x: dx, y: 0 } },
|
|
231
|
+
});
|
|
232
|
+
let current = history.commit(doc, onlyA(5));
|
|
233
|
+
time.tick(1);
|
|
234
|
+
current = history.commit(current, { t: "moveNodes", deltas: { b: { x: 5, y: 0 } } });
|
|
235
|
+
expect(history.depth()).toBe(2);
|
|
236
|
+
current = history.undo(current);
|
|
237
|
+
expect(history.canRedo()).toBe(true);
|
|
238
|
+
time.tick(1);
|
|
239
|
+
current = history.commit(current, onlyA(2));
|
|
240
|
+
expect(history.depth()).toBe(2);
|
|
241
|
+
expect(history.canRedo()).toBe(false);
|
|
242
|
+
current = history.undo(current);
|
|
243
|
+
current = history.undo(current);
|
|
244
|
+
expect(current).toEqual(doc);
|
|
245
|
+
});
|
|
246
|
+
|
|
247
|
+
it("does not coalesce a new command into an entry the user has undone past", () => {
|
|
248
|
+
// Otherwise a drag, an undo, and another drag inside coalesceMs would fold
|
|
249
|
+
// into the entry that is no longer applied and the document would drift.
|
|
250
|
+
const time = clock();
|
|
251
|
+
const history = createHistory<Nodes, Edges>({ now: time.now, coalesceMs: 400 });
|
|
252
|
+
const moved = history.commit(doc, drag(5));
|
|
253
|
+
const undone = history.undo(moved);
|
|
254
|
+
time.tick(1);
|
|
255
|
+
const again = history.commit(undone, drag(2));
|
|
256
|
+
expect(history.depth()).toBe(1);
|
|
257
|
+
expect(again.nodes[0].position.x).toBe(2);
|
|
258
|
+
expect(history.undo(again)).toEqual(doc);
|
|
259
|
+
});
|
|
260
|
+
});
|
|
261
|
+
|
|
262
|
+
describe("nothing to do", () => {
|
|
263
|
+
it("returns the same document when there is nothing to undo or redo", () => {
|
|
264
|
+
const history = createHistory<Nodes, Edges>({ now: clock().now });
|
|
265
|
+
expect(history.canUndo()).toBe(false);
|
|
266
|
+
expect(history.undo(doc)).toBe(doc);
|
|
267
|
+
expect(history.redo(doc)).toBe(doc);
|
|
268
|
+
});
|
|
269
|
+
|
|
270
|
+
it("clear() empties both stacks", () => {
|
|
271
|
+
const history = createHistory<Nodes, Edges>({ now: clock().now });
|
|
272
|
+
const moved = history.commit(doc, drag(5));
|
|
273
|
+
history.undo(moved);
|
|
274
|
+
history.clear();
|
|
275
|
+
expect(history.canUndo()).toBe(false);
|
|
276
|
+
expect(history.canRedo()).toBe(false);
|
|
277
|
+
});
|
|
278
|
+
});
|