@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,273 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The wiring, design §7.2: S1, S3, S5, S6 and S11. S10 is the guide layer's and
|
|
3
|
+
* lives in `react-flow/SnapGuides.spec.tsx`, because the component that renders
|
|
4
|
+
* it is the only thing that can be asked how many `<line>` elements it made.
|
|
5
|
+
*
|
|
6
|
+
* S2, S4, S7, S8 and S9 belong to the snapper itself and are in
|
|
7
|
+
* `snapAlignment.spec.ts`. This file is about everything the snapper is not
|
|
8
|
+
* allowed to know: which changes are a drag, when the index may be built, and
|
|
9
|
+
* how grid and alignment share the two axes.
|
|
10
|
+
*/
|
|
11
|
+
|
|
12
|
+
import { describe, expect, it, vi } from "vitest";
|
|
13
|
+
import {
|
|
14
|
+
applySnapToChanges,
|
|
15
|
+
createSnapSession,
|
|
16
|
+
graphSnappingDefaults,
|
|
17
|
+
snapContextOptions,
|
|
18
|
+
} from "./snapChanges";
|
|
19
|
+
import type { SnapChange, SnapChangeNode, SnapContext } from "./snapChanges";
|
|
20
|
+
import { buildSpatialHash } from "./spatialHash";
|
|
21
|
+
import type { SpatialItem } from "./spatialHash";
|
|
22
|
+
|
|
23
|
+
const node = (id: string, x: number, y: number, width = 100, height = 50): SnapChangeNode => ({
|
|
24
|
+
id,
|
|
25
|
+
position: { x, y },
|
|
26
|
+
initialWidth: width,
|
|
27
|
+
initialHeight: height,
|
|
28
|
+
});
|
|
29
|
+
|
|
30
|
+
const drag = (id: string, x: number, y: number): SnapChange => ({
|
|
31
|
+
type: "position",
|
|
32
|
+
id,
|
|
33
|
+
position: { x, y },
|
|
34
|
+
dragging: true,
|
|
35
|
+
});
|
|
36
|
+
|
|
37
|
+
/** Every change these tests read back is a drag, so a missing position is a bug. */
|
|
38
|
+
function positionOf(change: SnapChange): { readonly x: number; readonly y: number } {
|
|
39
|
+
if (!change.position) throw new Error(`change ${change.id} lost its position`);
|
|
40
|
+
return change.position;
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
function context(overrides: Partial<SnapContext> & { nodes: readonly SnapChangeNode[] }) {
|
|
44
|
+
return {
|
|
45
|
+
zoom: 1,
|
|
46
|
+
session: createSnapSession(),
|
|
47
|
+
...overrides,
|
|
48
|
+
} satisfies SnapContext;
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
describe("snapContextOptions: S11, motion settings do not disable snapping", () => {
|
|
52
|
+
it('leaves alignment on under animation: "none"', () => {
|
|
53
|
+
const options = snapContextOptions({ animation: "none" });
|
|
54
|
+
expect(options.alignment).toBe(true);
|
|
55
|
+
expect(options.animateGuides).toBe(false);
|
|
56
|
+
});
|
|
57
|
+
|
|
58
|
+
it("leaves alignment on under OS reduced motion", () => {
|
|
59
|
+
const options = snapContextOptions({ reducedMotion: true });
|
|
60
|
+
expect(options.alignment).toBe(true);
|
|
61
|
+
expect(options.animateGuides).toBe(false);
|
|
62
|
+
});
|
|
63
|
+
|
|
64
|
+
it("animates the guides when motion is allowed", () => {
|
|
65
|
+
expect(snapContextOptions({ animation: "quick" }).animateGuides).toBe(true);
|
|
66
|
+
});
|
|
67
|
+
|
|
68
|
+
it("still snaps end to end with motion off", () => {
|
|
69
|
+
const options = snapContextOptions({ animation: "none" });
|
|
70
|
+
const nodes = [node("a", 302, 0), node("c", 300, 400)];
|
|
71
|
+
const result = applySnapToChanges(
|
|
72
|
+
[drag("a", 302, 0)],
|
|
73
|
+
context({ nodes, alignment: options.alignment, grid: options.grid }),
|
|
74
|
+
);
|
|
75
|
+
expect(result.guides).toHaveLength(1);
|
|
76
|
+
expect(positionOf(result.changes[0])).toEqual({ x: 300, y: 0 });
|
|
77
|
+
});
|
|
78
|
+
|
|
79
|
+
it("takes the coarse threshold under a finger and the fine one otherwise", () => {
|
|
80
|
+
expect(snapContextOptions({ coarsePointer: true }).thresholdScreenPx).toBe(12);
|
|
81
|
+
expect(snapContextOptions({}).thresholdScreenPx).toBe(8);
|
|
82
|
+
});
|
|
83
|
+
|
|
84
|
+
it("ships with alignment on and the grid off", () => {
|
|
85
|
+
expect(graphSnappingDefaults.alignment).toBe(true);
|
|
86
|
+
expect(graphSnappingDefaults.grid).toBeNull();
|
|
87
|
+
});
|
|
88
|
+
});
|
|
89
|
+
|
|
90
|
+
describe("applySnapToChanges: S1, only a live drag is snapped", () => {
|
|
91
|
+
const nodes = [node("a", 302, 0), node("c", 300, 400)];
|
|
92
|
+
|
|
93
|
+
it("snaps a position change marked dragging", () => {
|
|
94
|
+
const result = applySnapToChanges([drag("a", 302, 0)], context({ nodes }));
|
|
95
|
+
expect(positionOf(result.changes[0])).toEqual({ x: 300, y: 0 });
|
|
96
|
+
});
|
|
97
|
+
|
|
98
|
+
it("carries the snap into the closing frame, so the node lands on the line", () => {
|
|
99
|
+
// React Flow's last change of a drag carries `dragging: false` AND the raw
|
|
100
|
+
// pointer position (`XYDrag` end -> `updateNodePositions(dragItems, false)`,
|
|
101
|
+
// system:2311). Leaving it alone puts the node back off the line the guide
|
|
102
|
+
// just promised, which is measured in Chrome and is why this is snapped.
|
|
103
|
+
const ctx = context({ nodes });
|
|
104
|
+
applySnapToChanges([drag("a", 302, 0)], ctx);
|
|
105
|
+
const result = applySnapToChanges(
|
|
106
|
+
[{ type: "position", id: "a", position: { x: 302, y: 0 }, dragging: false }],
|
|
107
|
+
ctx,
|
|
108
|
+
);
|
|
109
|
+
expect(positionOf(result.changes[0])).toEqual({ x: 300, y: 0 });
|
|
110
|
+
// The guides go with the drag, even though the position moved (S10).
|
|
111
|
+
expect(result.guides).toEqual([]);
|
|
112
|
+
});
|
|
113
|
+
|
|
114
|
+
it("leaves a dragging:false change alone when no drag was being snapped", () => {
|
|
115
|
+
// Not a release — someone else writing a position. A fresh session is the
|
|
116
|
+
// whole test for which of the two it is.
|
|
117
|
+
const changes: SnapChange[] = [
|
|
118
|
+
{ type: "position", id: "a", position: { x: 302, y: 0 }, dragging: false },
|
|
119
|
+
];
|
|
120
|
+
const result = applySnapToChanges(changes, context({ nodes }));
|
|
121
|
+
expect(result.changes).toBe(changes);
|
|
122
|
+
expect(result.guides).toEqual([]);
|
|
123
|
+
});
|
|
124
|
+
|
|
125
|
+
it("forgets the drag once it closes, so the next one indexes a fresh world", () => {
|
|
126
|
+
const ctx = context({ nodes });
|
|
127
|
+
applySnapToChanges([drag("a", 302, 0)], ctx);
|
|
128
|
+
applySnapToChanges(
|
|
129
|
+
[{ type: "position", id: "a", position: { x: 302, y: 0 }, dragging: false }],
|
|
130
|
+
ctx,
|
|
131
|
+
);
|
|
132
|
+
expect(ctx.session.key).toBeNull();
|
|
133
|
+
expect(ctx.session.index).toBeNull();
|
|
134
|
+
});
|
|
135
|
+
|
|
136
|
+
it("leaves a programmatic move alone — layout, undo and paste are not drags", () => {
|
|
137
|
+
const changes: SnapChange[] = [{ type: "position", id: "a", position: { x: 302, y: 0 } }];
|
|
138
|
+
expect(applySnapToChanges(changes, context({ nodes })).changes).toBe(changes);
|
|
139
|
+
});
|
|
140
|
+
|
|
141
|
+
it("passes select, dimensions and remove changes through untouched", () => {
|
|
142
|
+
const changes = [
|
|
143
|
+
{ type: "select", id: "a", selected: true },
|
|
144
|
+
{ type: "dimensions", id: "a", dimensions: { width: 100, height: 50 } },
|
|
145
|
+
{ type: "remove", id: "a" },
|
|
146
|
+
] as unknown as SnapChange[];
|
|
147
|
+
expect(applySnapToChanges(changes, context({ nodes })).changes).toBe(changes);
|
|
148
|
+
});
|
|
149
|
+
|
|
150
|
+
it("does nothing at all when both grid and alignment are off", () => {
|
|
151
|
+
const changes = [drag("a", 302, 0)];
|
|
152
|
+
const result = applySnapToChanges(changes, context({ nodes, alignment: false, grid: null }));
|
|
153
|
+
expect(result.changes).toBe(changes);
|
|
154
|
+
expect(result.guides).toEqual([]);
|
|
155
|
+
});
|
|
156
|
+
});
|
|
157
|
+
|
|
158
|
+
describe("applySnapToChanges: S3, the index is built once per drag", () => {
|
|
159
|
+
const nodes = [node("a", 0, 0), node("b", 300, 0), node("c", 600, 0), node("d", 900, 0)];
|
|
160
|
+
|
|
161
|
+
it("builds once across a 30-change drag", () => {
|
|
162
|
+
const buildIndex = vi.fn((items: readonly SpatialItem[]) => buildSpatialHash(items));
|
|
163
|
+
const ctx = context({ nodes, buildIndex });
|
|
164
|
+
for (let frame = 0; frame < 30; frame += 1) {
|
|
165
|
+
applySnapToChanges([drag("a", 100 + frame, 0)], ctx);
|
|
166
|
+
}
|
|
167
|
+
expect(buildIndex).toHaveBeenCalledTimes(1);
|
|
168
|
+
});
|
|
169
|
+
|
|
170
|
+
it("leaves the dragged node out of its own index", () => {
|
|
171
|
+
const buildIndex = vi.fn((items: readonly SpatialItem[]) => buildSpatialHash(items));
|
|
172
|
+
applySnapToChanges([drag("a", 100, 0)], context({ nodes, buildIndex }));
|
|
173
|
+
expect(buildIndex.mock.calls[0][0].map((item) => item.id)).toEqual(["b", "c", "d"]);
|
|
174
|
+
});
|
|
175
|
+
|
|
176
|
+
it("rebuilds for the NEXT drag, because the world moved in between", () => {
|
|
177
|
+
const buildIndex = vi.fn((items: readonly SpatialItem[]) => buildSpatialHash(items));
|
|
178
|
+
const ctx = context({ nodes, buildIndex });
|
|
179
|
+
applySnapToChanges([drag("a", 100, 0)], ctx);
|
|
180
|
+
applySnapToChanges(
|
|
181
|
+
[{ type: "position", id: "a", position: { x: 120, y: 0 }, dragging: false }],
|
|
182
|
+
ctx,
|
|
183
|
+
);
|
|
184
|
+
applySnapToChanges([drag("a", 130, 0)], ctx);
|
|
185
|
+
expect(buildIndex).toHaveBeenCalledTimes(2);
|
|
186
|
+
});
|
|
187
|
+
|
|
188
|
+
it("rebuilds when the dragged SET changes, or the new member snaps to itself", () => {
|
|
189
|
+
const buildIndex = vi.fn((items: readonly SpatialItem[]) => buildSpatialHash(items));
|
|
190
|
+
const ctx = context({ nodes, buildIndex });
|
|
191
|
+
applySnapToChanges([drag("a", 100, 0)], ctx);
|
|
192
|
+
applySnapToChanges([drag("a", 100, 0), drag("b", 400, 0)], ctx);
|
|
193
|
+
expect(buildIndex).toHaveBeenCalledTimes(2);
|
|
194
|
+
expect(buildIndex.mock.calls[1][0].map((item) => item.id)).toEqual(["c", "d"]);
|
|
195
|
+
});
|
|
196
|
+
});
|
|
197
|
+
|
|
198
|
+
describe("applySnapToChanges: S5, grid and alignment compose per axis", () => {
|
|
199
|
+
it("puts the node on the grid when no neighbour is in range", () => {
|
|
200
|
+
const nodes = [node("a", 309, 205)];
|
|
201
|
+
const result = applySnapToChanges([drag("a", 309, 205)], context({ nodes, grid: 16 }));
|
|
202
|
+
expect(positionOf(result.changes[0])).toEqual({ x: 304, y: 208 });
|
|
203
|
+
expect(result.guides).toEqual([]);
|
|
204
|
+
});
|
|
205
|
+
|
|
206
|
+
it("lets alignment override the axis a guide fired on, and only that one", () => {
|
|
207
|
+
const nodes = [node("a", 309, 205), node("c", 300, 600)];
|
|
208
|
+
const result = applySnapToChanges([drag("a", 309, 205)], context({ nodes, grid: 16 }));
|
|
209
|
+
// x aligned to the neighbour's left edge; y still on the grid.
|
|
210
|
+
expect(positionOf(result.changes[0])).toEqual({ x: 300, y: 208 });
|
|
211
|
+
expect(result.guides).toHaveLength(1);
|
|
212
|
+
expect(result.guides[0].axis).toBe("x");
|
|
213
|
+
});
|
|
214
|
+
|
|
215
|
+
it("keeps the raw position on an unsnapped axis when the grid is off", () => {
|
|
216
|
+
const nodes = [node("a", 305, 205), node("c", 300, 600)];
|
|
217
|
+
const result = applySnapToChanges([drag("a", 305, 205)], context({ nodes, grid: null }));
|
|
218
|
+
expect(positionOf(result.changes[0])).toEqual({ x: 300, y: 205 });
|
|
219
|
+
});
|
|
220
|
+
|
|
221
|
+
it("runs the grid FIRST, so a node the grid carried into range still aligns", () => {
|
|
222
|
+
// 309 is 9 from the neighbour's edge and outside an 8 px pull. The grid
|
|
223
|
+
// moves it to 304, which is 4 away, and alignment then takes it.
|
|
224
|
+
const nodes = [node("a", 309, 0), node("c", 300, 400)];
|
|
225
|
+
const loose = applySnapToChanges([drag("a", 309, 0)], context({ nodes, grid: null }));
|
|
226
|
+
expect(positionOf(loose.changes[0]).x).toBe(309);
|
|
227
|
+
const gridded = applySnapToChanges([drag("a", 309, 0)], context({ nodes, grid: 16 }));
|
|
228
|
+
expect(positionOf(gridded.changes[0]).x).toBe(300);
|
|
229
|
+
});
|
|
230
|
+
});
|
|
231
|
+
|
|
232
|
+
describe("applySnapToChanges: S6, a multi-select drag keeps its shape", () => {
|
|
233
|
+
const nodes = [
|
|
234
|
+
node("a", 100, 100),
|
|
235
|
+
node("b", 300, 100),
|
|
236
|
+
node("c", 500, 100),
|
|
237
|
+
node("anchor", 100, 400),
|
|
238
|
+
];
|
|
239
|
+
|
|
240
|
+
it("moves every selected node by ONE delta", () => {
|
|
241
|
+
const changes = [drag("a", 102, 100), drag("b", 302, 100), drag("c", 502, 100)];
|
|
242
|
+
const result = applySnapToChanges(changes, context({ nodes }));
|
|
243
|
+
const positions = result.changes.map(positionOf);
|
|
244
|
+
expect(positions).toEqual([
|
|
245
|
+
{ x: 100, y: 100 },
|
|
246
|
+
{ x: 300, y: 100 },
|
|
247
|
+
{ x: 500, y: 100 },
|
|
248
|
+
]);
|
|
249
|
+
});
|
|
250
|
+
|
|
251
|
+
it("preserves the relative geometry whatever the delta is", () => {
|
|
252
|
+
const changes = [drag("a", 102, 100), drag("b", 302, 100), drag("c", 502, 100)];
|
|
253
|
+
const before = changes.map(positionOf);
|
|
254
|
+
const after = applySnapToChanges(changes, context({ nodes })).changes.map(positionOf);
|
|
255
|
+
for (let index = 1; index < before.length; index += 1) {
|
|
256
|
+
expect(after[index].x - after[0].x).toBe(before[index].x - before[0].x);
|
|
257
|
+
expect(after[index].y - after[0].y).toBe(before[index].y - before[0].y);
|
|
258
|
+
}
|
|
259
|
+
});
|
|
260
|
+
|
|
261
|
+
it("snaps the selection's BOUNDING BOX, not each node on its own", () => {
|
|
262
|
+
// `c`'s own left edge is 2 from the anchor's; the union's is 402 from it.
|
|
263
|
+
// A per-node snapper would move `c` and deform the selection.
|
|
264
|
+
// A NARROW anchor, so none of the union's three x lines lands near one of
|
|
265
|
+
// its three: a wide one puts its right edge under the union's, and the test
|
|
266
|
+
// would pass for the wrong reason.
|
|
267
|
+
const spread = [node("a", 100, 100), node("c", 502, 100), node("anchor", 500, 400, 20)];
|
|
268
|
+
const changes = [drag("a", 100, 100), drag("c", 502, 100)];
|
|
269
|
+
const result = applySnapToChanges(changes, context({ nodes: spread }));
|
|
270
|
+
expect(result.changes).toBe(changes);
|
|
271
|
+
expect(result.guides).toEqual([]);
|
|
272
|
+
});
|
|
273
|
+
});
|
|
@@ -0,0 +1,292 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Snapping wired into `onNodesChange`, design §7.2 rules S1, S3, S5, S6 and S11.
|
|
3
|
+
*
|
|
4
|
+
* Pure, and deliberately structural about its inputs: it names no `@xyflow`
|
|
5
|
+
* type, so it runs under Node and the boundary in `react-flow/xy.ts` stays the
|
|
6
|
+
* only import site. `SnapChange` and `SnapChangeNode` are the shape React Flow
|
|
7
|
+
* happens to hand us, written down rather than imported.
|
|
8
|
+
*
|
|
9
|
+
* The three decisions worth reading before changing anything here:
|
|
10
|
+
*
|
|
11
|
+
* - **A live drag only (S1).** A programmatic move — layout, undo, paste — is
|
|
12
|
+
* never snapped, or a relayout fights itself.
|
|
13
|
+
*
|
|
14
|
+
* S1's wording says `dragging === true` and nothing else. Taken literally
|
|
15
|
+
* that undoes every snap at the moment of release, and it was MEASURED
|
|
16
|
+
* doing so in Chrome on `NodeGraph/Snapping → ZoomThreshold`: mid-drag the
|
|
17
|
+
* node sat at the aligned 370 with a guide painted, and on mouseup it
|
|
18
|
+
* jumped back off the line. The mechanism is `XYDrag`'s `end` handler
|
|
19
|
+
* (`@xyflow/system/dist/esm/index.js:2311-2316`) calling
|
|
20
|
+
* `updateNodePositions(dragItems, false)`, which re-emits the position
|
|
21
|
+
* XYDrag derived from the raw pointer (`:2154`, `x - dragItem.distance.x`).
|
|
22
|
+
* Those drag items never saw our rewrite, so the closing frame is the
|
|
23
|
+
* unsnapped one and it is also the frame the document commits.
|
|
24
|
+
*
|
|
25
|
+
* So the rule as built is: a position change is snapped when it belongs to
|
|
26
|
+
* a LIVE drag — `dragging: true`, or the `dragging: false` frame that
|
|
27
|
+
* closes a drag this session was already snapping. A change with `dragging`
|
|
28
|
+
* undefined is still never snapped, and neither is a `dragging: false`
|
|
29
|
+
* change with no live session, which is what a stray programmatic set looks
|
|
30
|
+
* like. That keeps S1's intent and makes the snap survive the mouse button
|
|
31
|
+
* coming up.
|
|
32
|
+
* - **The index is a drag, not a frame (S3).** It is built once, on the first
|
|
33
|
+
* dragging change, from every node NOT in the dragged set, and lives in a
|
|
34
|
+
* `SnapSession` the caller owns. Rebuilding it per frame is the difference
|
|
35
|
+
* between a query and a re-scan of the whole graph 120 times a second.
|
|
36
|
+
* - **Grid first, alignment per axis (S5).** The grid runs on the union rect,
|
|
37
|
+
* then alignment runs from THERE, and an axis keeps its grid value unless a
|
|
38
|
+
* guide fired on it. Running alignment from the raw pointer instead would
|
|
39
|
+
* make a node the grid carried into range fail to align, which reads as the
|
|
40
|
+
* snap being flaky rather than as two rules composing.
|
|
41
|
+
*/
|
|
42
|
+
|
|
43
|
+
import type { NodeId, Rect, XY } from "../model/document";
|
|
44
|
+
import { unionBounds } from "../model/select";
|
|
45
|
+
import {
|
|
46
|
+
alignmentThreshold,
|
|
47
|
+
defaultCandidateRadius,
|
|
48
|
+
defaultSnapThresholdPx,
|
|
49
|
+
snapToAlignment,
|
|
50
|
+
} from "./snapAlignment";
|
|
51
|
+
import type { PositionedNode, SnapGuide } from "./snapAlignment";
|
|
52
|
+
import { buildSpatialHash } from "./spatialHash";
|
|
53
|
+
import type { SpatialHash, SpatialItem } from "./spatialHash";
|
|
54
|
+
|
|
55
|
+
/** Alignment on, grid off — React Flow's own `snapToGrid` defaults off too. */
|
|
56
|
+
export const graphSnappingDefaults = {
|
|
57
|
+
alignment: true,
|
|
58
|
+
grid: null,
|
|
59
|
+
} as const;
|
|
60
|
+
|
|
61
|
+
export interface GraphSnappingOptions {
|
|
62
|
+
/**
|
|
63
|
+
* Design §7.2. Off per node via `node.locked`, which React Flow enforces
|
|
64
|
+
* upstream by refusing to drag a locked node at all.
|
|
65
|
+
*/
|
|
66
|
+
readonly alignment?: boolean;
|
|
67
|
+
/** Flow units, or `null` for no grid. */
|
|
68
|
+
readonly grid?: number | null;
|
|
69
|
+
/** SCREEN px. Divided by the zoom before use (S2). */
|
|
70
|
+
readonly thresholdScreenPx?: number;
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
/** The subset of a React Flow node change this reads. */
|
|
74
|
+
export interface SnapChange {
|
|
75
|
+
readonly type: string;
|
|
76
|
+
readonly id?: NodeId;
|
|
77
|
+
readonly position?: XY;
|
|
78
|
+
readonly dragging?: boolean;
|
|
79
|
+
}
|
|
80
|
+
|
|
81
|
+
/** The subset of a React Flow node this reads, seeded or measured. */
|
|
82
|
+
export interface SnapChangeNode {
|
|
83
|
+
readonly id: NodeId;
|
|
84
|
+
readonly position: XY;
|
|
85
|
+
readonly measured?: { readonly width?: number | null; readonly height?: number | null };
|
|
86
|
+
readonly width?: number | null;
|
|
87
|
+
readonly height?: number | null;
|
|
88
|
+
readonly initialWidth?: number | null;
|
|
89
|
+
readonly initialHeight?: number | null;
|
|
90
|
+
}
|
|
91
|
+
|
|
92
|
+
/**
|
|
93
|
+
* The drag's memory. The caller holds one (a ref) and hands it back every
|
|
94
|
+
* frame; nothing here is global, so two canvases on one page cannot share an
|
|
95
|
+
* index built from the other's nodes.
|
|
96
|
+
*/
|
|
97
|
+
export interface SnapSession {
|
|
98
|
+
index: SpatialHash | null;
|
|
99
|
+
nodes: ReadonlyMap<NodeId, PositionedNode> | null;
|
|
100
|
+
/** The dragged id set this index was built against. */
|
|
101
|
+
key: string | null;
|
|
102
|
+
/** Diagnostic: how many times the index was built. One per drag. */
|
|
103
|
+
builds: number;
|
|
104
|
+
}
|
|
105
|
+
|
|
106
|
+
export interface SnapContext {
|
|
107
|
+
readonly nodes: readonly SnapChangeNode[];
|
|
108
|
+
readonly zoom: number;
|
|
109
|
+
readonly session: SnapSession;
|
|
110
|
+
readonly alignment?: boolean;
|
|
111
|
+
readonly grid?: number | null;
|
|
112
|
+
readonly thresholdScreenPx?: number;
|
|
113
|
+
readonly radius?: number;
|
|
114
|
+
/** Test seam. The spy that proves S3, and nothing else uses it. */
|
|
115
|
+
readonly buildIndex?: (items: readonly SpatialItem[]) => SpatialHash;
|
|
116
|
+
}
|
|
117
|
+
|
|
118
|
+
export interface SnapChangesResult<C> {
|
|
119
|
+
/** The input array itself when nothing moved, so React sees no new work. */
|
|
120
|
+
readonly changes: readonly C[];
|
|
121
|
+
readonly guides: readonly SnapGuide[];
|
|
122
|
+
}
|
|
123
|
+
|
|
124
|
+
export function createSnapSession(): SnapSession {
|
|
125
|
+
return { index: null, nodes: null, key: null, builds: 0 };
|
|
126
|
+
}
|
|
127
|
+
|
|
128
|
+
export function resetSnapSession(session: SnapSession): void {
|
|
129
|
+
session.index = null;
|
|
130
|
+
session.nodes = null;
|
|
131
|
+
session.key = null;
|
|
132
|
+
}
|
|
133
|
+
|
|
134
|
+
/**
|
|
135
|
+
* S11, stated as code: motion settings reach `animateGuides` and nothing else.
|
|
136
|
+
*
|
|
137
|
+
* Snapping is not motion. `animation: "none"` and OS reduced-motion turn off
|
|
138
|
+
* the guide's fade; a canvas where the node stops aligning because someone
|
|
139
|
+
* turned animations off is a different, worse editor.
|
|
140
|
+
*/
|
|
141
|
+
export function snapContextOptions(input: {
|
|
142
|
+
readonly snapping?: GraphSnappingOptions;
|
|
143
|
+
readonly animation?: string | null;
|
|
144
|
+
readonly reducedMotion?: boolean;
|
|
145
|
+
readonly coarsePointer?: boolean;
|
|
146
|
+
}): {
|
|
147
|
+
readonly alignment: boolean;
|
|
148
|
+
readonly grid: number | null;
|
|
149
|
+
readonly thresholdScreenPx: number;
|
|
150
|
+
readonly animateGuides: boolean;
|
|
151
|
+
} {
|
|
152
|
+
const { snapping, animation, reducedMotion, coarsePointer } = input;
|
|
153
|
+
return {
|
|
154
|
+
alignment: snapping?.alignment ?? graphSnappingDefaults.alignment,
|
|
155
|
+
grid: snapping?.grid ?? graphSnappingDefaults.grid,
|
|
156
|
+
thresholdScreenPx:
|
|
157
|
+
snapping?.thresholdScreenPx ??
|
|
158
|
+
(coarsePointer ? defaultSnapThresholdPx.coarse : defaultSnapThresholdPx.fine),
|
|
159
|
+
animateGuides: animation !== "none" && !reducedMotion,
|
|
160
|
+
};
|
|
161
|
+
}
|
|
162
|
+
|
|
163
|
+
/** Measured wins, then a document-set size, then the pre-paint seed (design §5). */
|
|
164
|
+
export function snapNodeRect(node: SnapChangeNode): Rect {
|
|
165
|
+
const width = node.measured?.width ?? node.width ?? node.initialWidth ?? 0;
|
|
166
|
+
const height = node.measured?.height ?? node.height ?? node.initialHeight ?? 0;
|
|
167
|
+
return { x: node.position.x, y: node.position.y, width, height };
|
|
168
|
+
}
|
|
169
|
+
|
|
170
|
+
function isDragFrame(change: SnapChange): boolean {
|
|
171
|
+
return change.type === "position" && change.dragging === true && change.position !== undefined;
|
|
172
|
+
}
|
|
173
|
+
|
|
174
|
+
/** The closing frame of a drag we were already snapping. See the note above. */
|
|
175
|
+
function isDragEnd(change: SnapChange): boolean {
|
|
176
|
+
return change.type === "position" && change.dragging === false && change.position !== undefined;
|
|
177
|
+
}
|
|
178
|
+
|
|
179
|
+
function snapToGrid(value: number, grid: number | null): number {
|
|
180
|
+
if (grid === null || !Number.isFinite(grid) || grid <= 0) return value;
|
|
181
|
+
return Math.round(value / grid) * grid;
|
|
182
|
+
}
|
|
183
|
+
|
|
184
|
+
export function applySnapToChanges<C extends SnapChange>(
|
|
185
|
+
changes: readonly C[],
|
|
186
|
+
context: SnapContext,
|
|
187
|
+
): SnapChangesResult<C> {
|
|
188
|
+
const alignment = context.alignment ?? graphSnappingDefaults.alignment;
|
|
189
|
+
const grid = context.grid ?? graphSnappingDefaults.grid;
|
|
190
|
+
const session = context.session;
|
|
191
|
+
|
|
192
|
+
// A drag that ended takes its index with it: by the next one the world has
|
|
193
|
+
// moved, and a stale index aligns to where a node used to be. The reset is
|
|
194
|
+
// at the BOTTOM, because the closing frame is snapped with that same index.
|
|
195
|
+
const ending = changes.some(isDragEnd);
|
|
196
|
+
// `key !== null` is the whole test for "we were snapping this drag". A
|
|
197
|
+
// `dragging: false` change arriving without one is not a release, it is
|
|
198
|
+
// someone else's position write.
|
|
199
|
+
const closable = ending && session.key !== null;
|
|
200
|
+
const isSnappable = (change: SnapChange) =>
|
|
201
|
+
isDragFrame(change) || (closable && isDragEnd(change));
|
|
202
|
+
|
|
203
|
+
const dragging = changes.filter(isSnappable);
|
|
204
|
+
if (dragging.length === 0) {
|
|
205
|
+
if (ending) resetSnapSession(session);
|
|
206
|
+
return { changes, guides: [] };
|
|
207
|
+
}
|
|
208
|
+
if (!alignment && grid === null) {
|
|
209
|
+
if (ending) resetSnapSession(session);
|
|
210
|
+
return { changes, guides: [] };
|
|
211
|
+
}
|
|
212
|
+
|
|
213
|
+
const sizes = new Map(context.nodes.map((node) => [node.id, node]));
|
|
214
|
+
const draggedIds: NodeId[] = [];
|
|
215
|
+
const rects: Rect[] = [];
|
|
216
|
+
for (const change of dragging) {
|
|
217
|
+
const id = change.id;
|
|
218
|
+
if (id === undefined) continue;
|
|
219
|
+
draggedIds.push(id);
|
|
220
|
+
const known = sizes.get(id);
|
|
221
|
+
const size = known ? snapNodeRect(known) : { width: 0, height: 0 };
|
|
222
|
+
// The proposed position, not the node's last committed one: the union has
|
|
223
|
+
// to be where the pointer is putting the selection this frame.
|
|
224
|
+
const proposed = change.position as XY;
|
|
225
|
+
rects.push({ x: proposed.x, y: proposed.y, width: size.width, height: size.height });
|
|
226
|
+
}
|
|
227
|
+
const union = unionBounds(rects);
|
|
228
|
+
if (!union) {
|
|
229
|
+
if (ending) resetSnapSession(session);
|
|
230
|
+
return { changes, guides: [] };
|
|
231
|
+
}
|
|
232
|
+
|
|
233
|
+
const gridded: Rect = { ...union, x: snapToGrid(union.x, grid), y: snapToGrid(union.y, grid) };
|
|
234
|
+
|
|
235
|
+
let position: XY = { x: gridded.x, y: gridded.y };
|
|
236
|
+
let guides: readonly SnapGuide[] = [];
|
|
237
|
+
|
|
238
|
+
if (alignment) {
|
|
239
|
+
const key = [...draggedIds].sort().join(" ");
|
|
240
|
+
if (session.index === null || session.nodes === null || session.key !== key) {
|
|
241
|
+
const dragged = new Set(draggedIds);
|
|
242
|
+
const items: SpatialItem[] = [];
|
|
243
|
+
const live = new Map<NodeId, PositionedNode>();
|
|
244
|
+
for (const node of context.nodes) {
|
|
245
|
+
if (dragged.has(node.id)) continue;
|
|
246
|
+
const item = { id: node.id, rect: snapNodeRect(node) };
|
|
247
|
+
items.push(item);
|
|
248
|
+
live.set(node.id, item);
|
|
249
|
+
}
|
|
250
|
+
session.index = (context.buildIndex ?? buildSpatialHash)(items);
|
|
251
|
+
session.nodes = live;
|
|
252
|
+
session.key = key;
|
|
253
|
+
session.builds += 1;
|
|
254
|
+
}
|
|
255
|
+
const result = snapToAlignment({
|
|
256
|
+
ids: draggedIds,
|
|
257
|
+
rect: gridded,
|
|
258
|
+
nodes: session.nodes,
|
|
259
|
+
index: session.index,
|
|
260
|
+
thresholdFlowUnits: alignmentThreshold({
|
|
261
|
+
thresholdScreenPx: context.thresholdScreenPx ?? defaultSnapThresholdPx.fine,
|
|
262
|
+
zoom: context.zoom,
|
|
263
|
+
}),
|
|
264
|
+
radius: context.radius ?? defaultCandidateRadius,
|
|
265
|
+
});
|
|
266
|
+
guides = result.guides;
|
|
267
|
+
// Per axis, and only where a guide fired (S5).
|
|
268
|
+
if (guides.some((guide) => guide.axis === "x"))
|
|
269
|
+
position = { ...position, x: result.position.x };
|
|
270
|
+
if (guides.some((guide) => guide.axis === "y"))
|
|
271
|
+
position = { ...position, y: result.position.y };
|
|
272
|
+
}
|
|
273
|
+
|
|
274
|
+
// The guides go the moment the drag does (S10). The POSITION still moves, or
|
|
275
|
+
// the node would jump off the line the guide just promised it.
|
|
276
|
+
const visible = ending ? [] : guides;
|
|
277
|
+
const dx = position.x - union.x;
|
|
278
|
+
const dy = position.y - union.y;
|
|
279
|
+
if (dx === 0 && dy === 0) {
|
|
280
|
+
if (ending) resetSnapSession(session);
|
|
281
|
+
return { changes, guides: visible };
|
|
282
|
+
}
|
|
283
|
+
|
|
284
|
+
// ONE delta, applied to every member, so the selection cannot deform (S6).
|
|
285
|
+
const next = changes.map((change) => {
|
|
286
|
+
if (!isSnappable(change)) return change;
|
|
287
|
+
const from = change.position as XY;
|
|
288
|
+
return { ...change, position: { x: from.x + dx, y: from.y + dy } };
|
|
289
|
+
});
|
|
290
|
+
if (ending) resetSnapSession(session);
|
|
291
|
+
return { changes: next, guides: visible };
|
|
292
|
+
}
|