@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,516 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The frame sampler, design §13.2 and plan task 5.1.
|
|
3
|
+
*
|
|
4
|
+
* It samples `requestAnimationFrame` deltas from INSIDE the canvas, because
|
|
5
|
+
* that is the clock that measures the frames a user sees. The host RN view's
|
|
6
|
+
* FPS is a different and less useful quantity: it keeps ticking while the
|
|
7
|
+
* WebView is stalled.
|
|
8
|
+
*
|
|
9
|
+
* Three things it refuses to do, each one a way a perf number lies:
|
|
10
|
+
*
|
|
11
|
+
* - **Report an idle page.** `didMove` compares a transform signature taken at
|
|
12
|
+
* the first sample against one taken at the last, and `reportRun` REJECTS a
|
|
13
|
+
* run where they match rather than handing back plausible-looking numbers.
|
|
14
|
+
* The reactflow spike lost a whole round of measurements to exactly this
|
|
15
|
+
* when touch emulation silently reset, which is why design §13.2 makes it
|
|
16
|
+
* mandatory rather than advisory.
|
|
17
|
+
* - **Report an empty run.** Zero frames is not a fast run.
|
|
18
|
+
* - **Guess a window.** `relayoutGate` throws on a mark that was never set
|
|
19
|
+
* instead of measuring from t = 0 and calling it a pre-window.
|
|
20
|
+
*
|
|
21
|
+
* No React, no `@xyflow`, no DOM in the core: everything the sampler needs from
|
|
22
|
+
* the page arrives as the `probeTransform` and `countNodes` callbacks, so the
|
|
23
|
+
* whole module runs in vitest under a fake clock. `createDomTransformProbe`
|
|
24
|
+
* builds the real probe from SELECTORS the caller passes, which keeps the one
|
|
25
|
+
* `@xyflow` import site in `react-flow/xy.ts` where the lint rule wants it.
|
|
26
|
+
*/
|
|
27
|
+
|
|
28
|
+
import type { Result } from "../model/index";
|
|
29
|
+
|
|
30
|
+
/** 60 Hz. A frame longer than this dropped one. */
|
|
31
|
+
export const frameBudgetMs = 16.7;
|
|
32
|
+
/** Two frames. Design §13.2's "no frame over 33 ms" gate reads this. */
|
|
33
|
+
export const doubleFrameBudgetMs = 33.3;
|
|
34
|
+
|
|
35
|
+
export interface FrameStats {
|
|
36
|
+
readonly samples: number;
|
|
37
|
+
readonly mean: number;
|
|
38
|
+
readonly p50: number;
|
|
39
|
+
readonly p95: number;
|
|
40
|
+
readonly worst: number;
|
|
41
|
+
/** Frames STRICTLY over 16.7 ms. A frame exactly on budget did not drop one. */
|
|
42
|
+
readonly over16_7: number;
|
|
43
|
+
readonly over33_3: number;
|
|
44
|
+
/** Derived from the mean, so it is the average frame rate and not a peak. */
|
|
45
|
+
readonly fps: number;
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
/**
|
|
49
|
+
* Nearest rank, `sorted[ceil(q * n) - 1]`.
|
|
50
|
+
*
|
|
51
|
+
* Written out rather than interpolated because an interpolated p95 over 120
|
|
52
|
+
* samples invents a number that no frame took, and the thing being asserted
|
|
53
|
+
* ("no frame over 33 ms") is about frames that happened.
|
|
54
|
+
*/
|
|
55
|
+
function percentile(sorted: readonly number[], q: number): number {
|
|
56
|
+
if (sorted.length === 0) return 0;
|
|
57
|
+
const rank = Math.max(1, Math.ceil(q * sorted.length));
|
|
58
|
+
return sorted[Math.min(rank, sorted.length) - 1];
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
export function summarizeFrames(deltas: readonly number[]): FrameStats {
|
|
62
|
+
if (deltas.length === 0) {
|
|
63
|
+
return { samples: 0, mean: 0, p50: 0, p95: 0, worst: 0, over16_7: 0, over33_3: 0, fps: 0 };
|
|
64
|
+
}
|
|
65
|
+
const sorted = [...deltas].sort((a, b) => a - b);
|
|
66
|
+
let total = 0;
|
|
67
|
+
let over16 = 0;
|
|
68
|
+
let over33 = 0;
|
|
69
|
+
for (const delta of deltas) {
|
|
70
|
+
total += delta;
|
|
71
|
+
if (delta > frameBudgetMs) over16 += 1;
|
|
72
|
+
if (delta > doubleFrameBudgetMs) over33 += 1;
|
|
73
|
+
}
|
|
74
|
+
const mean = total / deltas.length;
|
|
75
|
+
return {
|
|
76
|
+
samples: deltas.length,
|
|
77
|
+
mean,
|
|
78
|
+
p50: percentile(sorted, 0.5),
|
|
79
|
+
p95: percentile(sorted, 0.95),
|
|
80
|
+
worst: sorted[sorted.length - 1],
|
|
81
|
+
over16_7: over16,
|
|
82
|
+
over33_3: over33,
|
|
83
|
+
fps: mean > 0 ? 1000 / mean : 0,
|
|
84
|
+
};
|
|
85
|
+
}
|
|
86
|
+
|
|
87
|
+
export interface FrameSample {
|
|
88
|
+
/** The rAF timestamp this frame ENDED at. */
|
|
89
|
+
readonly t: number;
|
|
90
|
+
readonly d: number;
|
|
91
|
+
}
|
|
92
|
+
|
|
93
|
+
export interface FrameMark {
|
|
94
|
+
readonly t: number;
|
|
95
|
+
/** The transform signature at the instant of the mark, so a post-window `didMove` is checkable. */
|
|
96
|
+
readonly signature: string;
|
|
97
|
+
/** Which mark this is. Carried on the ordered list, where the key is gone. */
|
|
98
|
+
readonly label: string;
|
|
99
|
+
}
|
|
100
|
+
|
|
101
|
+
export interface FrameRun {
|
|
102
|
+
readonly deltas: readonly number[];
|
|
103
|
+
readonly samples: readonly FrameSample[];
|
|
104
|
+
readonly stats: FrameStats;
|
|
105
|
+
readonly didMove: boolean;
|
|
106
|
+
readonly nodeCount: number;
|
|
107
|
+
readonly marks: Readonly<Record<string, FrameMark>>;
|
|
108
|
+
/**
|
|
109
|
+
* Every mark IN ORDER, including repeats of the same label.
|
|
110
|
+
*
|
|
111
|
+
* `marks` is keyed, so `mark("start")` six times keeps the sixth and loses
|
|
112
|
+
* five — which is fine for `relayoutGate`, whose whole subject is a single
|
|
113
|
+
* relayout, and useless for six scripted pans. Both are kept rather than one
|
|
114
|
+
* derived from the other: the keyed record is a different question ("when did
|
|
115
|
+
* the relayout fire") from the ordered list ("which windows were gestures").
|
|
116
|
+
*/
|
|
117
|
+
readonly markList: readonly FrameMark[];
|
|
118
|
+
readonly startedAt: number;
|
|
119
|
+
readonly stoppedAt: number;
|
|
120
|
+
readonly startSignature: string;
|
|
121
|
+
readonly stopSignature: string;
|
|
122
|
+
/**
|
|
123
|
+
* `start()` had been called and this `stop()` is the one closing it.
|
|
124
|
+
*
|
|
125
|
+
* The device instrument. On a phone there is no console, so "the Stop never
|
|
126
|
+
* reached the canvas" and "the Stop arrived with no run in flight" are the
|
|
127
|
+
* same picture: a readout stuck on `sampling…`. They are different bugs — the
|
|
128
|
+
* first is a dead bridge, the second is a lost Start — and only the canvas
|
|
129
|
+
* knows which. `reportRun` turns this into a named rejection so a screenshot
|
|
130
|
+
* can say.
|
|
131
|
+
*/
|
|
132
|
+
readonly started: boolean;
|
|
133
|
+
}
|
|
134
|
+
|
|
135
|
+
export interface FrameSamplerOptions {
|
|
136
|
+
readonly now?: () => number;
|
|
137
|
+
readonly requestFrame?: (cb: (t: number) => void) => number;
|
|
138
|
+
readonly cancelFrame?: (handle: number) => void;
|
|
139
|
+
/**
|
|
140
|
+
* A short string that changes when anything on the canvas moved. Design
|
|
141
|
+
* §13.2's `didMove` is exactly "this changed between the first and last
|
|
142
|
+
* sample"; nothing is compared per frame, so the probe can afford to walk
|
|
143
|
+
* every node.
|
|
144
|
+
*/
|
|
145
|
+
readonly probeTransform?: () => string;
|
|
146
|
+
readonly countNodes?: () => number;
|
|
147
|
+
/** Ring buffer bound. 3600 frames is a minute at 60 Hz. */
|
|
148
|
+
readonly maxSamples?: number;
|
|
149
|
+
}
|
|
150
|
+
|
|
151
|
+
export interface FrameSampler {
|
|
152
|
+
start: () => void;
|
|
153
|
+
stop: () => FrameRun;
|
|
154
|
+
/** Stamps an instant AND the transform signature at it. Returns the timestamp. */
|
|
155
|
+
mark: (label: string) => number;
|
|
156
|
+
readonly running: boolean;
|
|
157
|
+
}
|
|
158
|
+
|
|
159
|
+
const defaultNow = () => (typeof performance === "undefined" ? Date.now() : performance.now());
|
|
160
|
+
|
|
161
|
+
export function createFrameSampler(options: FrameSamplerOptions = {}): FrameSampler {
|
|
162
|
+
const {
|
|
163
|
+
now = defaultNow,
|
|
164
|
+
requestFrame = (cb: (t: number) => void) => globalThis.requestAnimationFrame(cb),
|
|
165
|
+
cancelFrame = (handle: number) => globalThis.cancelAnimationFrame(handle),
|
|
166
|
+
probeTransform = () => "",
|
|
167
|
+
countNodes = () => 0,
|
|
168
|
+
maxSamples = 3600,
|
|
169
|
+
} = options;
|
|
170
|
+
|
|
171
|
+
let samples: FrameSample[] = [];
|
|
172
|
+
let marks: Record<string, FrameMark> = {};
|
|
173
|
+
let markList: FrameMark[] = [];
|
|
174
|
+
let handle: number | null = null;
|
|
175
|
+
let lastT = 0;
|
|
176
|
+
let startedAt = 0;
|
|
177
|
+
let startSignature = "";
|
|
178
|
+
let running = false;
|
|
179
|
+
let started = false;
|
|
180
|
+
|
|
181
|
+
const step = (t: number) => {
|
|
182
|
+
const delta = t - lastT;
|
|
183
|
+
lastT = t;
|
|
184
|
+
// A NEGATIVE first delta is real and was measured in Chrome: `start()`
|
|
185
|
+
// reads `performance.now()`, but a frame can already be in flight, and its
|
|
186
|
+
// rAF timestamp is the moment that frame BEGAN — which is before the call.
|
|
187
|
+
// The interval it describes is not a frame the page rendered, so it is
|
|
188
|
+
// dropped rather than reported as a -12 ms frame. Only the first sample
|
|
189
|
+
// can be affected; the origin is corrected and sampling continues.
|
|
190
|
+
if (delta < 0) {
|
|
191
|
+
handle = requestFrame(step);
|
|
192
|
+
return;
|
|
193
|
+
}
|
|
194
|
+
samples.push({ t, d: delta });
|
|
195
|
+
if (samples.length > maxSamples) samples.shift();
|
|
196
|
+
handle = requestFrame(step);
|
|
197
|
+
};
|
|
198
|
+
|
|
199
|
+
return {
|
|
200
|
+
get running() {
|
|
201
|
+
return running;
|
|
202
|
+
},
|
|
203
|
+
start() {
|
|
204
|
+
samples = [];
|
|
205
|
+
marks = {};
|
|
206
|
+
markList = [];
|
|
207
|
+
startedAt = now();
|
|
208
|
+
lastT = startedAt;
|
|
209
|
+
startSignature = probeTransform();
|
|
210
|
+
running = true;
|
|
211
|
+
started = true;
|
|
212
|
+
handle = requestFrame(step);
|
|
213
|
+
},
|
|
214
|
+
mark(label: string) {
|
|
215
|
+
const t = now();
|
|
216
|
+
const stamp: FrameMark = { t, signature: probeTransform(), label };
|
|
217
|
+
marks[label] = stamp;
|
|
218
|
+
markList.push(stamp);
|
|
219
|
+
return t;
|
|
220
|
+
},
|
|
221
|
+
stop() {
|
|
222
|
+
if (handle !== null) cancelFrame(handle);
|
|
223
|
+
handle = null;
|
|
224
|
+
running = false;
|
|
225
|
+
// Consumed by this stop. A second Stop with no Start between them is a
|
|
226
|
+
// second `notStarted`, which is the truthful answer both times.
|
|
227
|
+
const wasStarted = started;
|
|
228
|
+
started = false;
|
|
229
|
+
const stoppedAt = now();
|
|
230
|
+
const stopSignature = probeTransform();
|
|
231
|
+
const deltas = samples.map((sample) => sample.d);
|
|
232
|
+
return {
|
|
233
|
+
deltas,
|
|
234
|
+
samples: [...samples],
|
|
235
|
+
stats: summarizeFrames(deltas),
|
|
236
|
+
didMove: startSignature !== stopSignature,
|
|
237
|
+
nodeCount: countNodes(),
|
|
238
|
+
marks: { ...marks },
|
|
239
|
+
markList: [...markList],
|
|
240
|
+
startedAt,
|
|
241
|
+
stoppedAt,
|
|
242
|
+
startSignature,
|
|
243
|
+
stopSignature,
|
|
244
|
+
started: wasStarted,
|
|
245
|
+
};
|
|
246
|
+
},
|
|
247
|
+
};
|
|
248
|
+
}
|
|
249
|
+
|
|
250
|
+
/**
|
|
251
|
+
* The real probe, built from selectors the caller supplies.
|
|
252
|
+
*
|
|
253
|
+
* React Flow places both the viewport and every node with a CSS TRANSFORM and
|
|
254
|
+
* never with a layout offset, so `offsetLeft` / `offsetTop` are 0 at every
|
|
255
|
+
* arrangement — milestone 4 shipped a position stamp built on them that was a
|
|
256
|
+
* constant, and caught it in Chrome rather than in a spec. This reads
|
|
257
|
+
* `style.transform`, which is the thing that actually moves.
|
|
258
|
+
*
|
|
259
|
+
* A pan moves the viewport; a node drag moves one node while the viewport
|
|
260
|
+
* stands still. Both are in the signature, because both are runs design §13.2
|
|
261
|
+
* asks for.
|
|
262
|
+
*/
|
|
263
|
+
export function createDomTransformProbe(selectors: {
|
|
264
|
+
readonly viewport: string;
|
|
265
|
+
readonly node: string;
|
|
266
|
+
readonly root?: ParentNode;
|
|
267
|
+
}): () => string {
|
|
268
|
+
return () => {
|
|
269
|
+
const root = selectors.root ?? globalThis.document;
|
|
270
|
+
const viewport = root.querySelector<HTMLElement>(selectors.viewport);
|
|
271
|
+
const nodes = root.querySelectorAll<HTMLElement>(selectors.node);
|
|
272
|
+
let total = 0;
|
|
273
|
+
for (const node of nodes) {
|
|
274
|
+
const match = /translate\(([-\d.]+)px,\s*([-\d.]+)px\)/.exec(node.style.transform ?? "");
|
|
275
|
+
if (!match) continue;
|
|
276
|
+
total += Number(match[1]) + Number(match[2]) * 3;
|
|
277
|
+
}
|
|
278
|
+
return `${viewport?.style.transform ?? "none"}|${nodes.length}|${Math.round(total)}`;
|
|
279
|
+
};
|
|
280
|
+
}
|
|
281
|
+
|
|
282
|
+
/** The default bracket labels. A pair, so a story cannot spell one of them. */
|
|
283
|
+
export const gestureStartMark = "start";
|
|
284
|
+
export const gestureEndMark = "end";
|
|
285
|
+
|
|
286
|
+
export interface GestureWindow {
|
|
287
|
+
/** Frames inside a `start` → `end` pair, and only those. */
|
|
288
|
+
readonly stats: FrameStats;
|
|
289
|
+
/** How many pairs the run recorded. Design §13.2's six scripted pans is six. */
|
|
290
|
+
readonly segments: number;
|
|
291
|
+
/** Frames that fell in no segment: the harness sitting still between pans. */
|
|
292
|
+
readonly idleFrames: number;
|
|
293
|
+
/**
|
|
294
|
+
* A `start` still open when the Stop came, closed at the Stop.
|
|
295
|
+
*
|
|
296
|
+
* Reported rather than silently dropped or silently included. Dropping loses
|
|
297
|
+
* a whole gesture; including it without saying so folds the idle tail into a
|
|
298
|
+
* number that claims to be gesture-only. 0 or 1, since the marks are read in
|
|
299
|
+
* order.
|
|
300
|
+
*/
|
|
301
|
+
readonly unclosed: number;
|
|
302
|
+
}
|
|
303
|
+
|
|
304
|
+
/**
|
|
305
|
+
* Design §13.2's cell, bounded to the GESTURES instead of to the session.
|
|
306
|
+
*
|
|
307
|
+
* The m6 iOS number — `952 frames · p95 18.8 · mean 16.7` over six scripted
|
|
308
|
+
* pans — was reported with its own caveat attached: the window ran from Start
|
|
309
|
+
* to Stop, so it held every idle frame between one pan and the next. Idle
|
|
310
|
+
* frames are cheap and plentiful, so they drag the mean down and leave the p95
|
|
311
|
+
* roughly alone: the cell was pessimistic about the tail and optimistic about
|
|
312
|
+
* the average, and there was no way to say by how much.
|
|
313
|
+
*
|
|
314
|
+
* A `start` mark opens a segment and the next `end` closes it. Repeats are read
|
|
315
|
+
* in ORDER off `markList`, because the keyed `marks` record keeps only the last
|
|
316
|
+
* of each label — six pans marked `start`/`end` are one entry there.
|
|
317
|
+
*
|
|
318
|
+
* `null` when nothing was marked at all. "No gesture was bracketed" and "a
|
|
319
|
+
* bracketed gesture produced no frames" are different findings, and a zeroed
|
|
320
|
+
* `FrameStats` cannot tell them apart.
|
|
321
|
+
*/
|
|
322
|
+
export function gestureWindow(
|
|
323
|
+
run: FrameRun,
|
|
324
|
+
labels: { readonly start: string; readonly end: string } = {
|
|
325
|
+
start: gestureStartMark,
|
|
326
|
+
end: gestureEndMark,
|
|
327
|
+
},
|
|
328
|
+
): GestureWindow | null {
|
|
329
|
+
const spans: { from: number; to: number }[] = [];
|
|
330
|
+
let open: number | null = null;
|
|
331
|
+
let unclosed = 0;
|
|
332
|
+
for (const mark of run.markList) {
|
|
333
|
+
if (mark.label === labels.start) {
|
|
334
|
+
// A second `start` with no `end` between them replaces the first: the
|
|
335
|
+
// operator missed a tap, and the later bracket is the one they meant.
|
|
336
|
+
open = mark.t;
|
|
337
|
+
continue;
|
|
338
|
+
}
|
|
339
|
+
if (mark.label !== labels.end || open === null) continue;
|
|
340
|
+
spans.push({ from: open, to: mark.t });
|
|
341
|
+
open = null;
|
|
342
|
+
}
|
|
343
|
+
if (open !== null) {
|
|
344
|
+
spans.push({ from: open, to: run.stoppedAt });
|
|
345
|
+
unclosed = 1;
|
|
346
|
+
}
|
|
347
|
+
if (spans.length === 0) return null;
|
|
348
|
+
const deltas: number[] = [];
|
|
349
|
+
for (const span of spans) deltas.push(...sliceWindow(run, span.from, span.to));
|
|
350
|
+
return {
|
|
351
|
+
stats: summarizeFrames(deltas),
|
|
352
|
+
segments: spans.length,
|
|
353
|
+
idleFrames: run.deltas.length - deltas.length,
|
|
354
|
+
unclosed,
|
|
355
|
+
};
|
|
356
|
+
}
|
|
357
|
+
|
|
358
|
+
export interface FrameRunContext {
|
|
359
|
+
readonly label: string;
|
|
360
|
+
readonly host: string;
|
|
361
|
+
readonly nodeCount: number;
|
|
362
|
+
readonly culling: boolean;
|
|
363
|
+
readonly layoutRunner?: string;
|
|
364
|
+
readonly note?: string;
|
|
365
|
+
}
|
|
366
|
+
|
|
367
|
+
export interface FrameReport extends FrameRunContext {
|
|
368
|
+
readonly didMove: true;
|
|
369
|
+
readonly stats: FrameStats;
|
|
370
|
+
/** The gesture-only cell, or `null` when the run bracketed nothing. */
|
|
371
|
+
readonly gesture: GestureWindow | null;
|
|
372
|
+
readonly deltas: readonly number[];
|
|
373
|
+
readonly durationMs: number;
|
|
374
|
+
readonly marks: Readonly<Record<string, FrameMark>>;
|
|
375
|
+
}
|
|
376
|
+
|
|
377
|
+
export interface FrameReportRejection {
|
|
378
|
+
readonly reason: "empty" | "didMove" | "notStarted";
|
|
379
|
+
readonly message: string;
|
|
380
|
+
}
|
|
381
|
+
|
|
382
|
+
/**
|
|
383
|
+
* The gate on the way OUT of a run.
|
|
384
|
+
*
|
|
385
|
+
* A `didMove: false` run is discarded, not reported — design §13.2, verbatim.
|
|
386
|
+
* Returning a `Result` rather than throwing is the package's house shape
|
|
387
|
+
* (`parseDocument`), and it means a five-run cell can drop a bad run and say
|
|
388
|
+
* how many it dropped instead of dying halfway through a session.
|
|
389
|
+
*/
|
|
390
|
+
export function reportRun(
|
|
391
|
+
run: FrameRun,
|
|
392
|
+
context: FrameRunContext,
|
|
393
|
+
): Result<FrameReport, FrameReportRejection> {
|
|
394
|
+
/**
|
|
395
|
+
* FIRST, because it is the only rejection that says something about the WIRE
|
|
396
|
+
* rather than about the run.
|
|
397
|
+
*
|
|
398
|
+
* A Stop that arrives with no run in flight and a Stop that never arrives at
|
|
399
|
+
* all look identical on a phone — the readout sits on `sampling…` either way,
|
|
400
|
+
* because that state belongs to the story and not to the canvas. Naming this
|
|
401
|
+
* one splits the difference: `notStarted` means the canvas heard the Stop and
|
|
402
|
+
* had nothing to stop, so the Start is what went missing; silence still means
|
|
403
|
+
* the Stop itself never crossed.
|
|
404
|
+
*/
|
|
405
|
+
if (!run.started) {
|
|
406
|
+
return {
|
|
407
|
+
ok: false,
|
|
408
|
+
error: {
|
|
409
|
+
reason: "notStarted",
|
|
410
|
+
message:
|
|
411
|
+
"the canvas received a Stop with no run in flight — the Start either never " +
|
|
412
|
+
"reached this canvas or a remount discarded the sampler between them",
|
|
413
|
+
},
|
|
414
|
+
};
|
|
415
|
+
}
|
|
416
|
+
if (run.deltas.length === 0) {
|
|
417
|
+
return {
|
|
418
|
+
ok: false,
|
|
419
|
+
error: { reason: "empty", message: "no frames were sampled; this is not a fast run" },
|
|
420
|
+
};
|
|
421
|
+
}
|
|
422
|
+
if (!run.didMove) {
|
|
423
|
+
return {
|
|
424
|
+
ok: false,
|
|
425
|
+
error: {
|
|
426
|
+
reason: "didMove",
|
|
427
|
+
message:
|
|
428
|
+
"nothing moved between the first and last sample — the run measured an idle page and is discarded, not reported",
|
|
429
|
+
},
|
|
430
|
+
};
|
|
431
|
+
}
|
|
432
|
+
return {
|
|
433
|
+
ok: true,
|
|
434
|
+
value: {
|
|
435
|
+
...context,
|
|
436
|
+
nodeCount: run.nodeCount || context.nodeCount,
|
|
437
|
+
didMove: true,
|
|
438
|
+
stats: run.stats,
|
|
439
|
+
gesture: gestureWindow(run),
|
|
440
|
+
deltas: run.deltas,
|
|
441
|
+
durationMs: run.stoppedAt - run.startedAt,
|
|
442
|
+
marks: run.marks,
|
|
443
|
+
},
|
|
444
|
+
};
|
|
445
|
+
}
|
|
446
|
+
|
|
447
|
+
/**
|
|
448
|
+
* Frames whose timestamp falls in `(from, to]`.
|
|
449
|
+
*
|
|
450
|
+
* Half-open on the NEAR edge on purpose: the frame that ended exactly at the
|
|
451
|
+
* mark is a frame that happened before the relayout fired, so it belongs to
|
|
452
|
+
* the pre-window.
|
|
453
|
+
*/
|
|
454
|
+
export function sliceWindow(run: FrameRun, from: number, to: number): number[] {
|
|
455
|
+
const out: number[] = [];
|
|
456
|
+
for (const sample of run.samples) {
|
|
457
|
+
if (sample.t > from && sample.t <= to) out.push(sample.d);
|
|
458
|
+
}
|
|
459
|
+
return out;
|
|
460
|
+
}
|
|
461
|
+
|
|
462
|
+
export interface RelayoutGateVerdict {
|
|
463
|
+
readonly pass: boolean;
|
|
464
|
+
readonly pre: FrameStats;
|
|
465
|
+
readonly post: FrameStats;
|
|
466
|
+
readonly p95Ratio: number;
|
|
467
|
+
readonly postDidMove: boolean;
|
|
468
|
+
readonly windowMs: number;
|
|
469
|
+
readonly markT: number;
|
|
470
|
+
/** `p95` | `newHeavyFrames` | `didMove`. Empty on a pass. */
|
|
471
|
+
readonly reasons: readonly string[];
|
|
472
|
+
}
|
|
473
|
+
|
|
474
|
+
/**
|
|
475
|
+
* Design §13.2's first absolute gate, as a function rather than a paragraph.
|
|
476
|
+
*
|
|
477
|
+
* PASS is all three of:
|
|
478
|
+
*
|
|
479
|
+
* - the post window's p95 is within 20% of the pre window's,
|
|
480
|
+
* - the post window holds no more frames over 33.3 ms than the pre window did
|
|
481
|
+
* (the design's "no frame over 33 ms appears in the post window that is
|
|
482
|
+
* absent from the pre window", read as a count so it is falsifiable),
|
|
483
|
+
* - `didMove` holds across the post window ALONE — a relayout that froze the
|
|
484
|
+
* canvas produces a beautiful histogram.
|
|
485
|
+
*/
|
|
486
|
+
export function relayoutGate(
|
|
487
|
+
run: FrameRun,
|
|
488
|
+
markLabel: string,
|
|
489
|
+
windowMs = 500,
|
|
490
|
+
): RelayoutGateVerdict {
|
|
491
|
+
const mark = run.marks[markLabel];
|
|
492
|
+
if (!mark) {
|
|
493
|
+
throw new Error(
|
|
494
|
+
`relayoutGate: no mark named "${markLabel}" — refusing to invent a window from t = 0`,
|
|
495
|
+
);
|
|
496
|
+
}
|
|
497
|
+
const pre = summarizeFrames(sliceWindow(run, mark.t - windowMs, mark.t));
|
|
498
|
+
const post = summarizeFrames(sliceWindow(run, mark.t, mark.t + windowMs));
|
|
499
|
+
const p95Ratio =
|
|
500
|
+
pre.p95 === 0 ? (post.p95 === 0 ? 1 : Number.POSITIVE_INFINITY) : post.p95 / pre.p95;
|
|
501
|
+
const postDidMove = mark.signature !== run.stopSignature;
|
|
502
|
+
const reasons: string[] = [];
|
|
503
|
+
if (!(p95Ratio <= 1.2)) reasons.push("p95");
|
|
504
|
+
if (post.over33_3 > pre.over33_3) reasons.push("newHeavyFrames");
|
|
505
|
+
if (!postDidMove) reasons.push("didMove");
|
|
506
|
+
return {
|
|
507
|
+
pass: reasons.length === 0,
|
|
508
|
+
pre,
|
|
509
|
+
post,
|
|
510
|
+
p95Ratio,
|
|
511
|
+
postDidMove,
|
|
512
|
+
windowMs,
|
|
513
|
+
markT: mark.t,
|
|
514
|
+
reasons,
|
|
515
|
+
};
|
|
516
|
+
}
|
|
@@ -0,0 +1,138 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The bench graph: 200 nodes, ~400 edges, and the same document every time.
|
|
3
|
+
*
|
|
4
|
+
* Determinism is the point. Design §13.2 asks for five runs per cell and the
|
|
5
|
+
* median of the per-run p95, which only means anything if the five runs are
|
|
6
|
+
* looking at the same graph — and a `Math.random` scatter makes a regression
|
|
7
|
+
* indistinguishable from a luckier layout. `mulberry32` is named in plan task
|
|
8
|
+
* 5.1 for that reason: 32 bits of state, one multiply and two shifts, no
|
|
9
|
+
* dependency, and identical output on Hermes and in V8.
|
|
10
|
+
*
|
|
11
|
+
* Edges only ever run FORWARD (`target index > source index`), so the graph is
|
|
12
|
+
* acyclic by construction. That is not decoration: dagre ranks a cyclic graph
|
|
13
|
+
* by breaking edges it picks itself, which would make the layout bench's
|
|
14
|
+
* numbers depend on which edge it happened to break.
|
|
15
|
+
*
|
|
16
|
+
* No React and no `@xyflow` here — the model half of the package has to stay
|
|
17
|
+
* importable from a CLI and from the CI bench (design §3.1), and this module is
|
|
18
|
+
* imported by both the bench script and the story.
|
|
19
|
+
*/
|
|
20
|
+
|
|
21
|
+
import type { BuiltinEdgeData } from "../edges/edgeKinds";
|
|
22
|
+
import type { GraphDocument } from "../model/index";
|
|
23
|
+
import type { DemoNodeData } from "../react-flow/fixtures";
|
|
24
|
+
|
|
25
|
+
/** Mulberry32. Named in plan task 5.1; 32-bit state, seeded, repeatable. */
|
|
26
|
+
export function mulberry32(seed: number): () => number {
|
|
27
|
+
let state = seed >>> 0;
|
|
28
|
+
return () => {
|
|
29
|
+
state = (state + 0x6d2b79f5) >>> 0;
|
|
30
|
+
let t = state;
|
|
31
|
+
t = Math.imul(t ^ (t >>> 15), t | 1);
|
|
32
|
+
t ^= t + Math.imul(t ^ (t >>> 7), t | 61);
|
|
33
|
+
return ((t ^ (t >>> 14)) >>> 0) / 4294967296;
|
|
34
|
+
};
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
export interface BenchGraphOptions {
|
|
38
|
+
readonly count: number;
|
|
39
|
+
readonly seed?: number;
|
|
40
|
+
/** Extra forward edges attempted per node that HAS an out port. 3 gives ~400 at 200. */
|
|
41
|
+
readonly fanOut?: number;
|
|
42
|
+
/** Flow units between grid columns and rows. Wide on purpose: culling is the thing under test. */
|
|
43
|
+
readonly columns?: number;
|
|
44
|
+
readonly columnGap?: number;
|
|
45
|
+
readonly rowGap?: number;
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
type Doc = GraphDocument<DemoNodeData, BuiltinEdgeData>;
|
|
49
|
+
|
|
50
|
+
const kinds = ["source", "transform", "sink"] as const;
|
|
51
|
+
const edgeKinds = ["flow", "data", "error", "conditional"] as const;
|
|
52
|
+
|
|
53
|
+
/** Which port a node of this kind sends from, or null when it only receives. */
|
|
54
|
+
function outPort(kind: (typeof kinds)[number], pick: number): string | null {
|
|
55
|
+
if (kind === "source") return "rows";
|
|
56
|
+
if (kind === "transform") return pick < 0.75 ? "ok" : "err";
|
|
57
|
+
return null;
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
function hasInPort(kind: (typeof kinds)[number]): boolean {
|
|
61
|
+
return kind !== "source";
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
/**
|
|
65
|
+
* A graph big enough that culling matters and laid out so it does NOT all fit
|
|
66
|
+
* on one screen — design §13.2's runs are taken "not at `fitView`", which only
|
|
67
|
+
* has meaning if the graph overflows the viewport.
|
|
68
|
+
*/
|
|
69
|
+
export function generateBenchGraph(options: BenchGraphOptions): Doc {
|
|
70
|
+
const { count, seed = 1, fanOut = 3, columns = 14, columnGap = 320, rowGap = 220 } = options;
|
|
71
|
+
const random = mulberry32(seed);
|
|
72
|
+
|
|
73
|
+
const nodes = Array.from({ length: count }, (_, index) => {
|
|
74
|
+
const kind = kinds[index % kinds.length];
|
|
75
|
+
const jitterX = Math.round((random() - 0.5) * 80);
|
|
76
|
+
const jitterY = Math.round((random() - 0.5) * 80);
|
|
77
|
+
const data =
|
|
78
|
+
kind === "source"
|
|
79
|
+
? { table: `orders_${index}` }
|
|
80
|
+
: kind === "transform"
|
|
81
|
+
? { expression: `row => row.f${index}` }
|
|
82
|
+
: { target: `warehouse_${index}` };
|
|
83
|
+
return {
|
|
84
|
+
id: `n${index}`,
|
|
85
|
+
kind,
|
|
86
|
+
position: {
|
|
87
|
+
x: (index % columns) * columnGap + jitterX,
|
|
88
|
+
y: Math.floor(index / columns) * rowGap + jitterY,
|
|
89
|
+
},
|
|
90
|
+
data,
|
|
91
|
+
};
|
|
92
|
+
}) as Doc["nodes"];
|
|
93
|
+
|
|
94
|
+
const edges: Doc["edges"][number][] = [];
|
|
95
|
+
const seen = new Set<string>();
|
|
96
|
+
for (let index = 0; index < count; index += 1) {
|
|
97
|
+
const from = nodes[index];
|
|
98
|
+
const port = outPort(from.kind as (typeof kinds)[number], random());
|
|
99
|
+
if (!port) continue;
|
|
100
|
+
for (let attempt = 0; attempt < fanOut; attempt += 1) {
|
|
101
|
+
const forward = count - index - 1;
|
|
102
|
+
if (forward <= 0) break;
|
|
103
|
+
// Bias toward nearby targets: a graph where every edge spans the whole
|
|
104
|
+
// canvas is not the graph a user builds, and it is also the pathological
|
|
105
|
+
// case for edge culling, which would flatter the numbers here.
|
|
106
|
+
let span = Math.max(1, Math.min(forward, 1 + Math.floor(random() * 24)));
|
|
107
|
+
// Walk forward to the next node that can RECEIVE rather than dropping
|
|
108
|
+
// the edge: a third of the kinds have no in port, and skipping those
|
|
109
|
+
// attempts outright cost 40% of the edges — 242 against the ~400 design
|
|
110
|
+
// §13.2 asks for, which is a different graph, not a slightly sparser one.
|
|
111
|
+
while (span <= forward && !hasInPort(nodes[index + span].kind as (typeof kinds)[number])) {
|
|
112
|
+
span += 1;
|
|
113
|
+
}
|
|
114
|
+
// Same walk past a duplicate. Dropping the attempt instead cost another
|
|
115
|
+
// forty edges, which is the difference between ~2.0 and ~1.8 edges per
|
|
116
|
+
// node — a materially sparser graph to lay out and to cull.
|
|
117
|
+
while (span <= forward && seen.has(`${from.id}->${nodes[index + span].id}`)) {
|
|
118
|
+
span += 1;
|
|
119
|
+
while (span <= forward && !hasInPort(nodes[index + span].kind as (typeof kinds)[number])) {
|
|
120
|
+
span += 1;
|
|
121
|
+
}
|
|
122
|
+
}
|
|
123
|
+
if (span > forward) break;
|
|
124
|
+
const target = nodes[index + span];
|
|
125
|
+
const id = `${from.id}->${target.id}`;
|
|
126
|
+
seen.add(id);
|
|
127
|
+
edges.push({
|
|
128
|
+
id,
|
|
129
|
+
kind: edgeKinds[edges.length % edgeKinds.length],
|
|
130
|
+
source: { node: from.id, port },
|
|
131
|
+
target: { node: target.id, port: "in" },
|
|
132
|
+
data: {},
|
|
133
|
+
} as Doc["edges"][number]);
|
|
134
|
+
}
|
|
135
|
+
}
|
|
136
|
+
|
|
137
|
+
return { version: 1, nodes, edges };
|
|
138
|
+
}
|