@weasel-js/core 1.9.3 → 1.10.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +1106 -0
- package/README.md +7 -5
- package/dist/WeaselProvider.js +5 -7
- package/dist/WeaselProvider.js.map +1 -1
- package/dist/affordances/composeAffordanceLayer.js +91 -93
- package/dist/affordances/composeAffordanceLayer.js.map +1 -1
- package/dist/affordances/cornerResize.js +27 -18
- package/dist/affordances/cornerResize.js.map +1 -1
- package/dist/affordances/hitAffordanceRegions.js +65 -104
- package/dist/affordances/hitAffordanceRegions.js.map +1 -1
- package/dist/affordances/pathAnchors.js.map +1 -1
- package/dist/affordances/rotationHandle.js +22 -21
- package/dist/affordances/rotationHandle.js.map +1 -1
- package/dist/animation/behaviors/coast.js +21 -0
- package/dist/animation/behaviors/coast.js.map +1 -0
- package/dist/animation/behaviors/coastByWrite.js +107 -0
- package/dist/animation/behaviors/coastByWrite.js.map +1 -0
- package/dist/animation/behaviors/coastOnTargets.js +94 -0
- package/dist/animation/behaviors/coastOnTargets.js.map +1 -0
- package/dist/animation/behaviors/momentum.js +38 -88
- package/dist/animation/behaviors/momentum.js.map +1 -1
- package/dist/animation/clipTargets.js +12 -0
- package/dist/animation/clipTargets.js.map +1 -0
- package/dist/animation/index.js +15 -20
- package/dist/animation/poseHelpers.js +112 -33
- package/dist/animation/poseHelpers.js.map +1 -1
- package/dist/animation/poseTarget.js +115 -0
- package/dist/animation/poseTarget.js.map +1 -0
- package/dist/animation/reflow.js +113 -83
- package/dist/animation/reflow.js.map +1 -1
- package/dist/animation/rewind.js +66 -0
- package/dist/animation/rewind.js.map +1 -0
- package/dist/animation/rig/bindRig.js +85 -53
- package/dist/animation/rig/bindRig.js.map +1 -1
- package/dist/animation/rig/rigNode.js +93 -0
- package/dist/animation/rig/rigNode.js.map +1 -0
- package/dist/animation/rig/rigSeat.js +26 -0
- package/dist/animation/rig/rigSeat.js.map +1 -0
- package/dist/animation/rig/skinBinding.js +56 -0
- package/dist/animation/rig/skinBinding.js.map +1 -0
- package/dist/animation/rig/useRig.js +31 -16
- package/dist/animation/rig/useRig.js.map +1 -1
- package/dist/animation/wrappers/animateLifecycle.js +32 -24
- package/dist/animation/wrappers/animateLifecycle.js.map +1 -1
- package/dist/animation/wrappers/animateOnSetPose.js +31 -29
- package/dist/animation/wrappers/animateOnSetPose.js.map +1 -1
- package/dist/animation/wrappers/instantPose.js +13 -0
- package/dist/animation/wrappers/instantPose.js.map +1 -0
- package/dist/animation/writtenPoseTarget.js +33 -0
- package/dist/animation/writtenPoseTarget.js.map +1 -0
- package/dist/{autoPoseDescriptor-vCdt55xm.d.ts → autoPoseDescriptor-DHg5KqaJ.d.ts} +1 -1
- package/dist/barrel/canvas.js +31 -0
- package/dist/barrel/chrome.js +16 -0
- package/dist/barrel/input.js +18 -0
- package/dist/barrel/interactions.js +38 -0
- package/dist/barrel/paint.js +11 -0
- package/dist/barrel/paths.js +12 -0
- package/dist/barrel/renderer.js +14 -0
- package/dist/barrel/routing.js +57 -0
- package/dist/barrel/scene.js +37 -0
- package/dist/barrel/text.js +9 -0
- package/dist/barrel/viewport.js +42 -0
- package/dist/canvas/Canvas.js +280 -559
- package/dist/canvas/Canvas.js.map +1 -1
- package/dist/canvas/CanvasView.js +147 -167
- package/dist/canvas/CanvasView.js.map +1 -1
- package/dist/canvas/CursorCoordsHud.js +53 -49
- package/dist/canvas/CursorCoordsHud.js.map +1 -1
- package/dist/canvas/DrawCanvas.js +40 -51
- package/dist/canvas/DrawCanvas.js.map +1 -1
- package/dist/canvas/ModalityHud.js.map +1 -1
- package/dist/canvas/NodeShape.js +55 -374
- package/dist/canvas/NodeShape.js.map +1 -1
- package/dist/canvas/PickHud.js +50 -47
- package/dist/canvas/PickHud.js.map +1 -1
- package/dist/canvas/SceneCanvas/DevHuds.js +40 -0
- package/dist/canvas/SceneCanvas/DevHuds.js.map +1 -0
- package/dist/canvas/SceneCanvas/GestureDispatcherMounter.js +126 -0
- package/dist/canvas/SceneCanvas/GestureDispatcherMounter.js.map +1 -0
- package/dist/canvas/SceneCanvas/PointerProviderIfRoot.js +27 -31
- package/dist/canvas/SceneCanvas/PointerProviderIfRoot.js.map +1 -1
- package/dist/canvas/SceneCanvas/StandardActionsRegistrar.js +64 -0
- package/dist/canvas/SceneCanvas/StandardActionsRegistrar.js.map +1 -0
- package/dist/canvas/SceneCanvas/ToolKeybindingsMounter.js +16 -0
- package/dist/canvas/SceneCanvas/ToolKeybindingsMounter.js.map +1 -0
- package/dist/canvas/SceneCanvas/coordTrace.js +46 -0
- package/dist/canvas/SceneCanvas/coordTrace.js.map +1 -0
- package/dist/canvas/SceneCanvas/defaultNodeProperties.js +138 -85
- package/dist/canvas/SceneCanvas/defaultNodeProperties.js.map +1 -1
- package/dist/canvas/SceneCanvas/defaultNodeRouting.js +9 -8
- package/dist/canvas/SceneCanvas/defaultNodeRouting.js.map +1 -1
- package/dist/canvas/SceneCanvas/dispatcherGestureBounds.js.map +1 -1
- package/dist/canvas/SceneCanvas/features.js +74 -43
- package/dist/canvas/SceneCanvas/features.js.map +1 -1
- package/dist/canvas/SceneCanvas/isDev.js +12 -0
- package/dist/canvas/SceneCanvas/isDev.js.map +1 -0
- package/dist/canvas/SceneCanvas/poseGeometry.js +31 -34
- package/dist/canvas/SceneCanvas/poseGeometry.js.map +1 -1
- package/dist/canvas/SceneCanvas/poseRegistrars.js +13 -0
- package/dist/canvas/SceneCanvas/poseRegistrars.js.map +1 -0
- package/dist/canvas/SceneCanvas/props.js +39 -0
- package/dist/canvas/SceneCanvas/props.js.map +1 -0
- package/dist/canvas/SceneCanvas/toolRegistry.js +23 -0
- package/dist/canvas/SceneCanvas/toolRegistry.js.map +1 -0
- package/dist/canvas/SceneCanvas/useActionsPropResolver.js +6 -1
- package/dist/canvas/SceneCanvas/useActionsPropResolver.js.map +1 -1
- package/dist/canvas/SceneCanvas/useBuiltinShapeTools.js +21 -62
- package/dist/canvas/SceneCanvas/useBuiltinShapeTools.js.map +1 -1
- package/dist/canvas/SceneCanvas/useBuiltinTools.js +21 -0
- package/dist/canvas/SceneCanvas/useBuiltinTools.js.map +1 -0
- package/dist/canvas/SceneCanvas/useCanvasCamera.js +38 -0
- package/dist/canvas/SceneCanvas/useCanvasCamera.js.map +1 -0
- package/dist/canvas/SceneCanvas/useCanvasDispatcher.js +20 -0
- package/dist/canvas/SceneCanvas/useCanvasDispatcher.js.map +1 -0
- package/dist/canvas/SceneCanvas/useCanvasSelection.js +16 -0
- package/dist/canvas/SceneCanvas/useCanvasSelection.js.map +1 -0
- package/dist/canvas/SceneCanvas/useCanvasTools.js +67 -0
- package/dist/canvas/SceneCanvas/useCanvasTools.js.map +1 -0
- package/dist/canvas/SceneCanvas/useDispatcherOverlayLayer.js +29 -29
- package/dist/canvas/SceneCanvas/useDispatcherOverlayLayer.js.map +1 -1
- package/dist/canvas/SceneCanvas/useHeldModifiers.js +20 -0
- package/dist/canvas/SceneCanvas/useHeldModifiers.js.map +1 -0
- package/dist/canvas/SceneCanvas/useNodeAtPoint.js +26 -0
- package/dist/canvas/SceneCanvas/useNodeAtPoint.js.map +1 -0
- package/dist/canvas/SceneCanvas/useNodeKinds.js +26 -0
- package/dist/canvas/SceneCanvas/useNodeKinds.js.map +1 -0
- package/dist/canvas/SceneCanvas/usePreviewGhostLayer.js +48 -48
- package/dist/canvas/SceneCanvas/usePreviewGhostLayer.js.map +1 -1
- package/dist/canvas/SceneCanvas/useSceneCanvasHandle.js +47 -0
- package/dist/canvas/SceneCanvas/useSceneCanvasHandle.js.map +1 -0
- package/dist/canvas/SceneCanvas/useSceneCanvasLayers.js +66 -0
- package/dist/canvas/SceneCanvas/useSceneCanvasLayers.js.map +1 -0
- package/dist/canvas/SceneCanvas/useSceneChrome.js +59 -0
- package/dist/canvas/SceneCanvas/useSceneChrome.js.map +1 -0
- package/dist/canvas/SceneCanvas/useSceneRedrawSources.js +23 -0
- package/dist/canvas/SceneCanvas/useSceneRedrawSources.js.map +1 -0
- package/dist/canvas/SceneCanvas/useSceneSelectTool.js +74 -78
- package/dist/canvas/SceneCanvas/useSceneSelectTool.js.map +1 -1
- package/dist/canvas/SceneCanvas/useSceneSlotLayers.js +37 -0
- package/dist/canvas/SceneCanvas/useSceneSlotLayers.js.map +1 -0
- package/dist/canvas/SceneCanvas/useSelectionOverlayLayer.js +38 -0
- package/dist/canvas/SceneCanvas/useSelectionOverlayLayer.js.map +1 -0
- package/dist/canvas/SceneCanvas/useViewLayerGate.js +20 -0
- package/dist/canvas/SceneCanvas/useViewLayerGate.js.map +1 -0
- package/dist/canvas/SceneCanvas/useViewportActions.js +9 -1
- package/dist/canvas/SceneCanvas/useViewportActions.js.map +1 -1
- package/dist/canvas/SceneCanvas/worldPointAt.js +9 -0
- package/dist/canvas/SceneCanvas/worldPointAt.js.map +1 -0
- package/dist/canvas/SceneCanvas.js +311 -969
- package/dist/canvas/SceneCanvas.js.map +1 -1
- package/dist/canvas/SceneViewCanvas.js +42 -46
- package/dist/canvas/SceneViewCanvas.js.map +1 -1
- package/dist/canvas/adapterDerivedPath.js +26 -0
- package/dist/canvas/adapterDerivedPath.js.map +1 -0
- package/dist/canvas/affordanceAt.js +11 -1
- package/dist/canvas/affordanceAt.js.map +1 -1
- package/dist/canvas/buildSceneLayer.js +111 -0
- package/dist/canvas/buildSceneLayer.js.map +1 -0
- package/dist/canvas/buildSceneTree.js +16 -19
- package/dist/canvas/buildSceneTree.js.map +1 -1
- package/dist/canvas/canvasRenderer.js +67 -55
- package/dist/canvas/canvasRenderer.js.map +1 -1
- package/dist/canvas/colorOverrides.js.map +1 -1
- package/dist/canvas/defaultDrawOne.js +12 -12
- package/dist/canvas/defaultDrawOne.js.map +1 -1
- package/dist/canvas/deps/areaSelect.js +4 -4
- package/dist/canvas/deps/areaSelect.js.map +1 -1
- package/dist/canvas/deps/changes.js +13 -0
- package/dist/canvas/deps/changes.js.map +1 -0
- package/dist/canvas/deps/debug.js.map +1 -1
- package/dist/canvas/deps/editAnchors.js +38 -57
- package/dist/canvas/deps/editAnchors.js.map +1 -1
- package/dist/canvas/deps/geometryProjection.js.map +1 -1
- package/dist/canvas/deps/hitTestArea.js +31 -26
- package/dist/canvas/deps/hitTestArea.js.map +1 -1
- package/dist/canvas/deps/insert.js +130 -91
- package/dist/canvas/deps/insert.js.map +1 -1
- package/dist/canvas/deps/lassoSelect.js +5 -5
- package/dist/canvas/deps/lassoSelect.js.map +1 -1
- package/dist/canvas/deps/poseDescriptor.js +1 -1
- package/dist/canvas/deps/poseDescriptor.js.map +1 -1
- package/dist/canvas/deps/resizePolicy.js.map +1 -1
- package/dist/canvas/deps/slice.js +26 -26
- package/dist/canvas/deps/slice.js.map +1 -1
- package/dist/canvas/deps/textEdit.js +6 -5
- package/dist/canvas/deps/textEdit.js.map +1 -1
- package/dist/canvas/deps/view.js.map +1 -1
- package/dist/canvas/derivedPath.js +47 -22
- package/dist/canvas/derivedPath.js.map +1 -1
- package/dist/canvas/drawEnvelope.js +8 -4
- package/dist/canvas/drawEnvelope.js.map +1 -1
- package/dist/canvas/getNodeAtPoint.js +4 -8
- package/dist/canvas/getNodeAtPoint.js.map +1 -1
- package/dist/canvas/hud.module.js +1 -1
- package/dist/canvas/hud.module.js.map +1 -1
- package/dist/canvas/insertPreviewExtent.js.map +1 -1
- package/dist/canvas/kitRequirements.js +2 -2
- package/dist/canvas/kitRequirements.js.map +1 -1
- package/dist/canvas/layerOrder.js +13 -6
- package/dist/canvas/layerOrder.js.map +1 -1
- package/dist/canvas/layerSlots.js +6 -1
- package/dist/canvas/layerSlots.js.map +1 -1
- package/dist/canvas/nodeShapes/derivedPainter.js +34 -0
- package/dist/canvas/nodeShapes/derivedPainter.js.map +1 -0
- package/dist/canvas/nodeShapes/imagePainter.js +87 -0
- package/dist/canvas/nodeShapes/imagePainter.js.map +1 -0
- package/dist/canvas/nodeShapes/memo.js +9 -0
- package/dist/canvas/nodeShapes/memo.js.map +1 -0
- package/dist/canvas/nodeShapes/nodePaint.js +68 -0
- package/dist/canvas/nodeShapes/nodePaint.js.map +1 -0
- package/dist/canvas/nodeShapes/pathPainter.js +39 -0
- package/dist/canvas/nodeShapes/pathPainter.js.map +1 -0
- package/dist/canvas/nodeShapes/poseBox.js +20 -0
- package/dist/canvas/nodeShapes/poseBox.js.map +1 -0
- package/dist/canvas/nodeShapes/rectFallbackPainter.js +38 -0
- package/dist/canvas/nodeShapes/rectFallbackPainter.js.map +1 -0
- package/dist/canvas/nodeShapes/shapePainter.js +72 -0
- package/dist/canvas/nodeShapes/shapePainter.js.map +1 -0
- package/dist/canvas/nodeShapes/textPainter.js +55 -0
- package/dist/canvas/nodeShapes/textPainter.js.map +1 -0
- package/dist/canvas/overlayRoleStrokes.js.map +1 -1
- package/dist/canvas/paintCull.js +11 -14
- package/dist/canvas/paintCull.js.map +1 -1
- package/dist/{features/cursor → canvas}/paintedCursorLayer.js +2 -2
- package/dist/canvas/paintedCursorLayer.js.map +1 -0
- package/dist/canvas/pickWalk.js +59 -68
- package/dist/canvas/pickWalk.js.map +1 -1
- package/dist/canvas/planeClips.js +18 -19
- package/dist/canvas/planeClips.js.map +1 -1
- package/dist/canvas/poseCascade.js +41 -0
- package/dist/canvas/poseCascade.js.map +1 -0
- package/dist/canvas/poseRotation.js +9 -23
- package/dist/canvas/poseRotation.js.map +1 -1
- package/dist/canvas/rasterReadback.js +22 -0
- package/dist/canvas/rasterReadback.js.map +1 -0
- package/dist/canvas/renderDebugSnapshot.js +11 -11
- package/dist/canvas/renderDebugSnapshot.js.map +1 -1
- package/dist/canvas/renderNeeds.js +3 -3
- package/dist/canvas/renderNeeds.js.map +1 -1
- package/dist/canvas/renderSceneToPixels.js +64 -81
- package/dist/canvas/renderSceneToPixels.js.map +1 -1
- package/dist/canvas/sceneAdapter.js +68 -214
- package/dist/canvas/sceneAdapter.js.map +1 -1
- package/dist/canvas/sceneClipboard.js +112 -0
- package/dist/canvas/sceneClipboard.js.map +1 -0
- package/dist/canvas/sceneLayerPaint.js +4 -4
- package/dist/canvas/sceneLayerPaint.js.map +1 -1
- package/dist/canvas/sceneSlotWiring.js.map +1 -1
- package/dist/canvas/sceneViewRender.js +39 -39
- package/dist/canvas/sceneViewRender.js.map +1 -1
- package/dist/canvas/slopsDebugLayer.js +4 -4
- package/dist/canvas/slopsDebugLayer.js.map +1 -1
- package/dist/canvas/surface.module.js +6 -0
- package/dist/canvas/surface.module.js.map +1 -0
- package/dist/canvas/surfaceBox.js +16 -0
- package/dist/canvas/surfaceBox.js.map +1 -0
- package/dist/canvas/useCanvasRenderer.js +26 -6
- package/dist/canvas/useCanvasRenderer.js.map +1 -1
- package/dist/canvas/useCanvasSurface.js +31 -0
- package/dist/canvas/useCanvasSurface.js.map +1 -0
- package/dist/canvas/useCanvasView.js +67 -0
- package/dist/canvas/useCanvasView.js.map +1 -0
- package/dist/canvas/useFrameLoop.js +39 -31
- package/dist/canvas/useFrameLoop.js.map +1 -1
- package/dist/canvas/useHostAnchor.js +35 -33
- package/dist/canvas/useHostAnchor.js.map +1 -1
- package/dist/canvas/useLateContentRedraw.js +8 -8
- package/dist/canvas/useLateContentRedraw.js.map +1 -1
- package/dist/canvas/useSceneLayerList.js +11 -0
- package/dist/canvas/useSceneLayerList.js.map +1 -0
- package/dist/canvas/useSurfaceInput.js +42 -0
- package/dist/canvas/useSurfaceInput.js.map +1 -0
- package/dist/canvas/useToolCursor.js +29 -0
- package/dist/canvas/useToolCursor.js.map +1 -0
- package/dist/canvas/useViewHelpers.js +46 -85
- package/dist/canvas/useViewHelpers.js.map +1 -1
- package/dist/canvas/viewInputs.js.map +1 -1
- package/dist/canvas/viewRegistry.js +25 -27
- package/dist/canvas/viewRegistry.js.map +1 -1
- package/dist/canvas/watchElementMove.js +43 -0
- package/dist/canvas/watchElementMove.js.map +1 -0
- package/dist/canvas/wrapNodeOutput.js.map +1 -1
- package/dist/clipboard.d.ts +16 -19
- package/dist/{types-B_9g6hMM.d.ts → clone-2a5hVbBd.d.ts} +123 -74
- package/dist/clone.d.ts +4 -7
- package/dist/clone.js +0 -2
- package/dist/core/device/index.js +5 -4
- package/dist/core/device/targets.js.map +1 -1
- package/dist/core/device/useDeviceProfile.js +38 -44
- package/dist/core/device/useDeviceProfile.js.map +1 -1
- package/dist/core/device/watchDevicePixelRatio.js +17 -0
- package/dist/core/device/watchDevicePixelRatio.js.map +1 -0
- package/dist/{interactions/actions/resize → core/geometry}/autoPoseDescriptor.js +8 -7
- package/dist/core/geometry/autoPoseDescriptor.js.map +1 -0
- package/dist/core/geometry/pathPoseDescriptor.js +88 -0
- package/dist/core/geometry/pathPoseDescriptor.js.map +1 -0
- package/dist/core/geometry/poseDescriptor.js +68 -19
- package/dist/core/geometry/poseDescriptor.js.map +1 -1
- package/dist/core/geometry/regionHit.js +31 -34
- package/dist/core/geometry/regionHit.js.map +1 -1
- package/dist/core/geometry/targetFrame.js +94 -0
- package/dist/core/geometry/targetFrame.js.map +1 -0
- package/dist/core/geometry/unionBounds.js +30 -29
- package/dist/core/geometry/unionBounds.js.map +1 -1
- package/dist/core/isPlainObject.js +2 -11
- package/dist/core/layers/backgroundFill.js +31 -0
- package/dist/core/layers/backgroundFill.js.map +1 -0
- package/dist/{features/groups → core/layers}/children.js +1 -1
- package/dist/core/layers/children.js.map +1 -0
- package/dist/core/layers/gateLayer.js +13 -0
- package/dist/core/layers/gateLayer.js.map +1 -0
- package/dist/core/layers/layerGroup.js +40 -0
- package/dist/core/layers/layerGroup.js.map +1 -0
- package/dist/core/layers/render.js +50 -76
- package/dist/core/layers/render.js.map +1 -1
- package/dist/core/ops/arrange.js +1 -0
- package/dist/core/ops/arrange.js.map +1 -1
- package/dist/core/ops/create.js +10 -5
- package/dist/core/ops/create.js.map +1 -1
- package/dist/core/ops/createHistory.js +9 -9
- package/dist/core/ops/createHistory.js.map +1 -1
- package/dist/core/ops/delete.js +12 -24
- package/dist/core/ops/delete.js.map +1 -1
- package/dist/core/ops/reorder/index.js +43 -40
- package/dist/core/ops/reorder/index.js.map +1 -1
- package/dist/core/ops/reorder/setChildOrder.js +34 -0
- package/dist/core/ops/reorder/setChildOrder.js.map +1 -0
- package/dist/core/paint/meshKind.js +16 -0
- package/dist/core/paint/meshKind.js.map +1 -0
- package/dist/{features/meshPaint/lazyKind.js → core/paint/meshKindLazy.js} +282 -105
- package/dist/core/paint/meshKindLazy.js.map +1 -0
- package/dist/core/paint/paintKindEntry.js +8 -0
- package/dist/core/paint/paintKindEntry.js.map +1 -0
- package/dist/core/paint/paintKinds.js +144 -0
- package/dist/core/paint/paintKinds.js.map +1 -0
- package/dist/core/paint/registerMesh.js +7 -0
- package/dist/core/paint/registerMesh.js.map +1 -0
- package/dist/core/scene/NodeProperties.js.map +1 -1
- package/dist/core/scene/NodeRouting.js.map +1 -1
- package/dist/core/scene/appliedLog.js +37 -0
- package/dist/core/scene/appliedLog.js.map +1 -0
- package/dist/core/scene/arrivalWindow.js +102 -0
- package/dist/core/scene/arrivalWindow.js.map +1 -0
- package/dist/core/scene/boundOps.js +40 -0
- package/dist/core/scene/boundOps.js.map +1 -0
- package/dist/core/scene/composeFrame.js +9 -6
- package/dist/core/scene/composeFrame.js.map +1 -1
- package/dist/{features/groups → core/scene}/composePose.js +18 -18
- package/dist/core/scene/composePose.js.map +1 -0
- package/dist/core/scene/depMemo.js +31 -6
- package/dist/core/scene/depMemo.js.map +1 -1
- package/dist/core/scene/derivedPath.js +19 -20
- package/dist/core/scene/derivedPath.js.map +1 -1
- package/dist/core/scene/editMode.js +26 -0
- package/dist/core/scene/editMode.js.map +1 -0
- package/dist/core/scene/effectivePose.js +38 -39
- package/dist/core/scene/effectivePose.js.map +1 -1
- package/dist/core/scene/fieldEdits.js +98 -0
- package/dist/core/scene/fieldEdits.js.map +1 -0
- package/dist/core/scene/historyFacade.js +130 -0
- package/dist/core/scene/historyFacade.js.map +1 -0
- package/dist/core/scene/historyForm.js +6 -0
- package/dist/core/scene/historyForm.js.map +1 -0
- package/dist/core/scene/kitOps.js +185 -0
- package/dist/core/scene/kitOps.js.map +1 -0
- package/dist/core/scene/kitRegistry.js.map +1 -1
- package/dist/core/scene/layerStack.js +131 -0
- package/dist/core/scene/layerStack.js.map +1 -0
- package/dist/core/scene/layoutPass.js +58 -59
- package/dist/core/scene/layoutPass.js.map +1 -1
- package/dist/core/scene/lockGuard.js +37 -0
- package/dist/core/scene/lockGuard.js.map +1 -0
- package/dist/{features/groups → core/scene}/nestedHit.js +3 -3
- package/dist/core/scene/nestedHit.js.map +1 -0
- package/dist/core/scene/nodeFnFields.js +10 -11
- package/dist/core/scene/nodeFnFields.js.map +1 -1
- package/dist/core/scene/nodeMemo.js +45 -19
- package/dist/core/scene/nodeMemo.js.map +1 -1
- package/dist/core/scene/nodeStore.js +127 -0
- package/dist/core/scene/nodeStore.js.map +1 -0
- package/dist/core/scene/notifier.js +37 -0
- package/dist/core/scene/notifier.js.map +1 -0
- package/dist/core/scene/opTable.js +50 -0
- package/dist/core/scene/opTable.js.map +1 -0
- package/dist/core/scene/outerOps.js +66 -0
- package/dist/core/scene/outerOps.js.map +1 -0
- package/dist/core/scene/poseFeed.js +38 -38
- package/dist/core/scene/poseFeed.js.map +1 -1
- package/dist/core/scene/poseHold.js +39 -0
- package/dist/core/scene/poseHold.js.map +1 -0
- package/dist/core/scene/poseOverrides.js +44 -40
- package/dist/core/scene/poseOverrides.js.map +1 -1
- package/dist/core/scene/poseSnapshot.js.map +1 -1
- package/dist/core/scene/reconcileSpecs.js +3 -2
- package/dist/core/scene/reconcileSpecs.js.map +1 -1
- package/dist/core/scene/recorder.js +86 -0
- package/dist/core/scene/recorder.js.map +1 -0
- package/dist/core/scene/renderOrder.js +84 -0
- package/dist/core/scene/renderOrder.js.map +1 -0
- package/dist/core/scene/scene.js +80 -1266
- package/dist/core/scene/scene.js.map +1 -1
- package/dist/core/scene/sceneEdits.js +58 -0
- package/dist/core/scene/sceneEdits.js.map +1 -0
- package/dist/core/scene/sceneMutators.js +49 -0
- package/dist/core/scene/sceneMutators.js.map +1 -0
- package/dist/core/scene/scenePoseAdapter.js +16 -0
- package/dist/core/scene/scenePoseAdapter.js.map +1 -0
- package/dist/core/scene/sceneRecording.js +90 -0
- package/dist/core/scene/sceneRecording.js.map +1 -0
- package/dist/core/scene/sceneSelection.js +28 -0
- package/dist/core/scene/sceneSelection.js.map +1 -0
- package/dist/core/scene/sceneState.js +49 -0
- package/dist/core/scene/sceneState.js.map +1 -0
- package/dist/core/scene/serialization.js +71 -0
- package/dist/core/scene/serialization.js.map +1 -0
- package/dist/core/scene/staleReplay.js +51 -0
- package/dist/core/scene/staleReplay.js.map +1 -0
- package/dist/core/scene/statedFields.js +9 -0
- package/dist/core/scene/statedFields.js.map +1 -0
- package/dist/core/scene/treeEdits.js +127 -0
- package/dist/core/scene/treeEdits.js.map +1 -0
- package/dist/core/scene/treeOrder.js +13 -0
- package/dist/core/scene/treeOrder.js.map +1 -0
- package/dist/core/scene/treeReads.js +26 -0
- package/dist/core/scene/treeReads.js.map +1 -0
- package/dist/core/scene/types.js.map +1 -1
- package/dist/{features/groups → core/scene}/unionOfChildren.js +3 -3
- package/dist/core/scene/unionOfChildren.js.map +1 -0
- package/dist/core/scene/unitScopes.js +13 -0
- package/dist/core/scene/unitScopes.js.map +1 -0
- package/dist/core/scene/useScene.js.map +1 -1
- package/dist/core/selection/readOnlySelection.js +32 -0
- package/dist/core/selection/readOnlySelection.js.map +1 -0
- package/dist/core/selection/usePublishSceneSelection.js +26 -0
- package/dist/core/selection/usePublishSceneSelection.js.map +1 -0
- package/dist/core/selection/useSelection.js +34 -25
- package/dist/core/selection/useSelection.js.map +1 -1
- package/dist/core/shapeKinds.js.map +1 -1
- package/dist/core/stylus/stylus.js.map +1 -1
- package/dist/core/stylus/usePointerStylus.js.map +1 -1
- package/dist/core/usePaintKinds.js +1 -1
- package/dist/core/usePaintKinds.js.map +1 -1
- package/dist/core/viewport/clientToWorld.js.map +1 -1
- package/dist/core/viewport/fitViewToBounds.js.map +1 -1
- package/dist/core/viewport/parallax.js.map +1 -1
- package/dist/core/viewport/screenSlop.js +11 -11
- package/dist/core/viewport/screenSlop.js.map +1 -1
- package/dist/core/viewport/useCanvasSize.js.map +1 -1
- package/dist/core/viewport/useDecayLoop.js +8 -8
- package/dist/core/viewport/useDecayLoop.js.map +1 -1
- package/dist/core/viewport/useNodeOverlayFrame.js +84 -0
- package/dist/core/viewport/useNodeOverlayFrame.js.map +1 -0
- package/dist/core/viewport/useViewAnimation.js +102 -43
- package/dist/core/viewport/useViewAnimation.js.map +1 -1
- package/dist/core/viewport/view.js +9 -9
- package/dist/core/viewport/view.js.map +1 -1
- package/dist/core/viewport/wheelHandler.js.map +1 -1
- package/dist/core/viewport/zoomBounds.js +10 -8
- package/dist/core/viewport/zoomBounds.js.map +1 -1
- package/dist/{cornerHandles-BCrDp_mH.d.ts → cornerHandles-BEshc4z3.d.ts} +11 -24
- package/dist/debug/createDebugOverlayLayer.js +97 -97
- package/dist/debug/createDebugOverlayLayer.js.map +1 -1
- package/dist/debug/createDebugSink.js.map +1 -1
- package/dist/debug/flag.js +2 -41
- package/dist/debug/frameStats.js.map +1 -1
- package/dist/debug/useDebugSink.js +52 -0
- package/dist/debug/useDebugSink.js.map +1 -0
- package/dist/features/chrome-caps/buildChromeCtx.js.map +1 -1
- package/dist/features/chrome-caps/conditions.js.map +1 -1
- package/dist/features/chrome-caps/defaults.js.map +1 -1
- package/dist/features/chrome-caps/resolve.js.map +1 -1
- package/dist/features/chrome-caps/useChromeCaps.js +54 -0
- package/dist/features/chrome-caps/useChromeCaps.js.map +1 -0
- package/dist/features/chrome-caps/useHoverTracking.js +22 -17
- package/dist/features/chrome-caps/useHoverTracking.js.map +1 -1
- package/dist/features/ingestion/contentHandlers.js +28 -19
- package/dist/features/ingestion/contentHandlers.js.map +1 -1
- package/dist/features/ingestion/imageHandler.js +21 -24
- package/dist/features/ingestion/imageHandler.js.map +1 -1
- package/dist/features/ingestion/openFilePicker.js.map +1 -1
- package/dist/features/ingestion/placement.js +16 -0
- package/dist/features/ingestion/placement.js.map +1 -0
- package/dist/features/ingestion/registerKitHandlers.js +7 -7
- package/dist/features/ingestion/svgHandler.js +5 -0
- package/dist/features/ingestion/svgHandler.js.map +1 -1
- package/dist/features/ingestion/textHandler.js +28 -0
- package/dist/features/ingestion/textHandler.js.map +1 -0
- package/dist/features/ingestion/useCanvasIngestion.js +48 -0
- package/dist/features/ingestion/useCanvasIngestion.js.map +1 -0
- package/dist/features/ingestion/weaselJsonHandler.js +22 -14
- package/dist/features/ingestion/weaselJsonHandler.js.map +1 -1
- package/dist/features/longPress/longPressFeedback.js.map +1 -1
- package/dist/features/modes/modeLayers.js +7 -7
- package/dist/features/modes/modeLayers.js.map +1 -1
- package/dist/features/paths/editablePath.js +47 -0
- package/dist/features/paths/editablePath.js.map +1 -0
- package/dist/features/paths/index.js +9 -14
- package/dist/features/paths/pathEditState.js +41 -0
- package/dist/features/paths/pathEditState.js.map +1 -0
- package/dist/features/paths/pathEditingOverlayLayer.js +36 -38
- package/dist/features/paths/pathEditingOverlayLayer.js.map +1 -1
- package/dist/features/paths/pathLayer.js +3 -2
- package/dist/features/paths/pathLayer.js.map +1 -1
- package/dist/features/paths/penPreviewLayer.js +86 -88
- package/dist/features/paths/penPreviewLayer.js.map +1 -1
- package/dist/features/paths/usePathEdit.js +34 -0
- package/dist/features/paths/usePathEdit.js.map +1 -0
- package/dist/features/poseRun/usePoseRun.js +44 -52
- package/dist/features/poseRun/usePoseRun.js.map +1 -1
- package/dist/features/selection/overlay.js +171 -179
- package/dist/features/selection/overlay.js.map +1 -1
- package/dist/features/text/index.js +6 -0
- package/dist/features/text/textLayer.js +1 -1
- package/dist/features/text/textLayer.js.map +1 -1
- package/dist/features/text/useSceneTextEdit.js +100 -93
- package/dist/features/text/useSceneTextEdit.js.map +1 -1
- package/dist/features/viewports/viewportLayer.js +25 -36
- package/dist/features/viewports/viewportLayer.js.map +1 -1
- package/dist/index.d.ts +8473 -9141
- package/dist/index.js +269 -307
- package/dist/input/keyState.js +38 -39
- package/dist/input/keyState.js.map +1 -1
- package/dist/input/useKeyModifiers.js +11 -0
- package/dist/input/useKeyModifiers.js.map +1 -0
- package/dist/interactions/actions/actionShortcuts.js.map +1 -1
- package/dist/interactions/actions/{defaults/align.js → align/action.js} +18 -20
- package/dist/interactions/actions/align/action.js.map +1 -0
- package/dist/interactions/actions/align/align.js +20 -20
- package/dist/interactions/actions/align/align.js.map +1 -1
- package/dist/interactions/actions/booleans/action.js +65 -0
- package/dist/interactions/actions/booleans/action.js.map +1 -0
- package/dist/interactions/actions/booleans/booleans.js +69 -78
- package/dist/interactions/actions/booleans/booleans.js.map +1 -1
- package/dist/interactions/actions/booleans/operands.js +40 -0
- package/dist/interactions/actions/booleans/operands.js.map +1 -0
- package/dist/interactions/actions/booleans/pieces.js +45 -0
- package/dist/interactions/actions/booleans/pieces.js.map +1 -0
- package/dist/interactions/actions/booleans/placement.js +24 -0
- package/dist/interactions/actions/booleans/placement.js.map +1 -0
- package/dist/interactions/actions/booleans/useBooleans.js +11 -9
- package/dist/interactions/actions/booleans/useBooleans.js.map +1 -1
- package/dist/interactions/actions/booleans/useBooleansAdapter.js.map +1 -1
- package/dist/interactions/actions/{defaults/clipboard.js → clipboard/action.js} +31 -15
- package/dist/interactions/actions/clipboard/action.js.map +1 -0
- package/dist/interactions/actions/clipboard/clipboardOps.js +44 -42
- package/dist/interactions/actions/clipboard/clipboardOps.js.map +1 -1
- package/dist/interactions/actions/clipboard/materializePaste.js +10 -7
- package/dist/interactions/actions/clipboard/materializePaste.js.map +1 -1
- package/dist/interactions/actions/clipboard/wireFormat.js.map +1 -1
- package/dist/interactions/actions/clone/action.js +98 -0
- package/dist/interactions/actions/clone/action.js.map +1 -0
- package/dist/interactions/actions/clone/behaviors.js +52 -0
- package/dist/interactions/actions/clone/behaviors.js.map +1 -0
- package/dist/interactions/actions/defaultCommitAdapter.js +7 -32
- package/dist/interactions/actions/defaultCommitAdapter.js.map +1 -1
- package/dist/interactions/actions/defaults/anchorEditing.js +60 -84
- package/dist/interactions/actions/defaults/anchorEditing.js.map +1 -1
- package/dist/interactions/actions/defaults/areaSelect.js +35 -38
- package/dist/interactions/actions/defaults/areaSelect.js.map +1 -1
- package/dist/interactions/actions/defaults/cancelGesture.js.map +1 -1
- package/dist/interactions/actions/defaults/clearSelection.js.map +1 -1
- package/dist/interactions/actions/defaults/copySubtree.js +40 -0
- package/dist/interactions/actions/defaults/copySubtree.js.map +1 -0
- package/dist/interactions/actions/defaults/createPaintAction.js.map +1 -1
- package/dist/interactions/actions/defaults/delete.js.map +1 -1
- package/dist/interactions/actions/defaults/duplicate.js +13 -53
- package/dist/interactions/actions/defaults/duplicate.js.map +1 -1
- package/dist/interactions/actions/defaults/enterTextEdit.js.map +1 -1
- package/dist/interactions/actions/defaults/group.js +40 -50
- package/dist/interactions/actions/defaults/group.js.map +1 -1
- package/dist/interactions/actions/defaults/icons/booleanIcons.js +24 -1
- package/dist/interactions/actions/defaults/icons/booleanIcons.js.map +1 -1
- package/dist/interactions/actions/defaults/icons/outlineIcons.js +39 -1
- package/dist/interactions/actions/defaults/icons/outlineIcons.js.map +1 -1
- package/dist/interactions/actions/defaults/ingest.js +44 -38
- package/dist/interactions/actions/defaults/ingest.js.map +1 -1
- package/dist/interactions/actions/defaults/insertPathAnchor.js +11 -12
- package/dist/interactions/actions/defaults/insertPathAnchor.js.map +1 -1
- package/dist/interactions/actions/defaults/nudge.js +40 -69
- package/dist/interactions/actions/defaults/nudge.js.map +1 -1
- package/dist/interactions/actions/defaults/nudgeSteps.js +37 -0
- package/dist/interactions/actions/defaults/nudgeSteps.js.map +1 -0
- package/dist/interactions/actions/defaults/pinchZoom.js.map +1 -1
- package/dist/interactions/actions/defaults/reorder.js +2 -0
- package/dist/interactions/actions/defaults/reorder.js.map +1 -1
- package/dist/interactions/actions/defaults/requiresSelection.js.map +1 -1
- package/dist/interactions/actions/defaults/setFill.js +14 -8
- package/dist/interactions/actions/defaults/setFill.js.map +1 -1
- package/dist/interactions/actions/defaults/setFillOpacity.js +7 -4
- package/dist/interactions/actions/defaults/setFillOpacity.js.map +1 -1
- package/dist/interactions/actions/defaults/setStroke.js +12 -12
- package/dist/interactions/actions/defaults/setStroke.js.map +1 -1
- package/dist/interactions/actions/defaults/setStrokeOpacity.js +6 -6
- package/dist/interactions/actions/defaults/sliceOps.js +8 -10
- package/dist/interactions/actions/defaults/sliceOps.js.map +1 -1
- package/dist/interactions/actions/defaults/toolActivate.js.map +1 -1
- package/dist/interactions/actions/defaults/toolResetToDefault.js.map +1 -1
- package/dist/interactions/actions/defaults/viewportDragPan.js +37 -26
- package/dist/interactions/actions/defaults/viewportDragPan.js.map +1 -1
- package/dist/interactions/actions/defaults/viewportWheelPan.js.map +1 -1
- package/dist/interactions/actions/defaults/viewportZoom.js.map +1 -1
- package/dist/interactions/actions/distribute/action.js +66 -0
- package/dist/interactions/actions/distribute/action.js.map +1 -0
- package/dist/interactions/actions/distribute/distribute.js +11 -11
- package/dist/interactions/actions/distribute/distribute.js.map +1 -1
- package/dist/interactions/actions/{defaults/editAnchors.js → edit-anchors/action.js} +7 -9
- package/dist/interactions/actions/edit-anchors/action.js.map +1 -0
- package/dist/interactions/actions/edit-anchors/geometry.js +30 -27
- package/dist/interactions/actions/edit-anchors/geometry.js.map +1 -1
- package/dist/interactions/actions/flip/action.js +124 -0
- package/dist/interactions/actions/flip/action.js.map +1 -0
- package/dist/interactions/actions/flip/helpers.js +30 -17
- package/dist/interactions/actions/flip/helpers.js.map +1 -1
- package/dist/interactions/actions/gestureFrames.js +18 -0
- package/dist/interactions/actions/gestureFrames.js.map +1 -0
- package/dist/interactions/actions/gestureLifecycle.js +47 -20
- package/dist/interactions/actions/gestureLifecycle.js.map +1 -1
- package/dist/interactions/actions/hitSelection.js +8 -0
- package/dist/interactions/actions/hitSelection.js.map +1 -0
- package/dist/interactions/actions/insert/action.js +72 -0
- package/dist/interactions/actions/insert/action.js.map +1 -0
- package/dist/interactions/actions/insert/commit.js +28 -0
- package/dist/interactions/actions/insert/commit.js.map +1 -0
- package/dist/interactions/actions/insert/extras.js +65 -0
- package/dist/interactions/actions/insert/extras.js.map +1 -0
- package/dist/interactions/actions/insert/frame.js +48 -0
- package/dist/interactions/actions/insert/frame.js.map +1 -0
- package/dist/interactions/actions/insert/geometry.js +35 -0
- package/dist/interactions/actions/insert/geometry.js.map +1 -0
- package/dist/interactions/actions/insert/rotateAction.js +21 -0
- package/dist/interactions/actions/insert/rotateAction.js.map +1 -0
- package/dist/interactions/actions/insert/session.js +59 -0
- package/dist/interactions/actions/insert/session.js.map +1 -0
- package/dist/interactions/actions/insert/shape.js +34 -0
- package/dist/interactions/actions/insert/shape.js.map +1 -0
- package/dist/interactions/actions/lasso-select/action.js +143 -0
- package/dist/interactions/actions/lasso-select/action.js.map +1 -0
- package/dist/interactions/actions/lasso-select/behaviors/selectFromLasso.js +14 -18
- package/dist/interactions/actions/lasso-select/behaviors/selectFromLasso.js.map +1 -1
- package/dist/interactions/actions/move/action.js +87 -0
- package/dist/interactions/actions/move/action.js.map +1 -0
- package/dist/interactions/actions/move/behaviors/layoutDrop.js +51 -0
- package/dist/interactions/actions/move/behaviors/layoutDrop.js.map +1 -0
- package/dist/interactions/actions/move/behaviors/reparentOnDrop.js +15 -0
- package/dist/interactions/actions/move/behaviors/reparentOnDrop.js.map +1 -0
- package/dist/interactions/actions/move/behaviors/snapBackOrDelete.js +5 -5
- package/dist/interactions/actions/move/behaviors/snapBackOrDelete.js.map +1 -1
- package/dist/interactions/actions/move/behaviors/snapToContainer.js +39 -27
- package/dist/interactions/actions/move/behaviors/snapToContainer.js.map +1 -1
- package/dist/interactions/actions/move/capture.js +99 -0
- package/dist/interactions/actions/move/capture.js.map +1 -0
- package/dist/interactions/actions/move/commit/index.js +41 -0
- package/dist/interactions/actions/move/commit/index.js.map +1 -0
- package/dist/interactions/actions/move/commit/layoutDrop.js +44 -0
- package/dist/interactions/actions/move/commit/layoutDrop.js.map +1 -0
- package/dist/interactions/actions/move/commit/layoutRelease.js +100 -0
- package/dist/interactions/actions/move/commit/layoutRelease.js.map +1 -0
- package/dist/interactions/actions/move/commit/rebase.js +18 -0
- package/dist/interactions/actions/move/commit/rebase.js.map +1 -0
- package/dist/interactions/actions/move/commit/reparent.js +65 -0
- package/dist/interactions/actions/move/commit/reparent.js.map +1 -0
- package/dist/interactions/actions/move/delta.js +51 -0
- package/dist/interactions/actions/move/delta.js.map +1 -0
- package/dist/interactions/actions/move/frame.js +59 -0
- package/dist/interactions/actions/move/frame.js.map +1 -0
- package/dist/interactions/actions/move/gestureAdapter.js +22 -30
- package/dist/interactions/actions/move/gestureAdapter.js.map +1 -1
- package/dist/interactions/actions/move/landedDescendants.js +33 -0
- package/dist/interactions/actions/move/landedDescendants.js.map +1 -0
- package/dist/interactions/actions/move/layout/container.js +94 -0
- package/dist/interactions/actions/move/layout/container.js.map +1 -0
- package/dist/interactions/actions/move/layout/dragged.js +58 -0
- package/dist/interactions/actions/move/layout/dragged.js.map +1 -0
- package/dist/interactions/actions/move/layout/dropPass.js +122 -0
- package/dist/interactions/actions/move/layout/dropPass.js.map +1 -0
- package/dist/interactions/actions/move/layout/exits.js +38 -0
- package/dist/interactions/actions/move/layout/exits.js.map +1 -0
- package/dist/interactions/actions/move/layout/glide.js +48 -0
- package/dist/interactions/actions/move/layout/glide.js.map +1 -0
- package/dist/interactions/actions/move/session.js +63 -0
- package/dist/interactions/actions/move/session.js.map +1 -0
- package/dist/interactions/actions/move/translate.js +61 -0
- package/dist/interactions/actions/move/translate.js.map +1 -0
- package/dist/interactions/actions/outlines/createOutlines.js +16 -63
- package/dist/interactions/actions/outlines/createOutlines.js.map +1 -1
- package/dist/interactions/actions/outlines/createOutlinesAction.js +51 -0
- package/dist/interactions/actions/outlines/createOutlinesAction.js.map +1 -0
- package/dist/interactions/actions/outlines/outlineStroke.js +72 -0
- package/dist/interactions/actions/outlines/outlineStroke.js.map +1 -0
- package/dist/interactions/actions/outlines/outlineStrokeAction.js +37 -0
- package/dist/interactions/actions/outlines/outlineStrokeAction.js.map +1 -0
- package/dist/interactions/actions/outlines/replaceWithPaths.js +54 -0
- package/dist/interactions/actions/outlines/replaceWithPaths.js.map +1 -0
- package/dist/interactions/actions/outlines/strokeRegion.js +27 -0
- package/dist/interactions/actions/outlines/strokeRegion.js.map +1 -0
- package/dist/interactions/actions/planeInput.js.map +1 -1
- package/dist/interactions/actions/pointerState.js +12 -0
- package/dist/interactions/actions/pointerState.js.map +1 -0
- package/dist/interactions/actions/poseDescriptorDep.js +16 -4
- package/dist/interactions/actions/poseDescriptorDep.js.map +1 -1
- package/dist/interactions/actions/poseFrame.js +25 -20
- package/dist/interactions/actions/poseFrame.js.map +1 -1
- package/dist/interactions/actions/resize/action.js +55 -0
- package/dist/interactions/actions/resize/action.js.map +1 -0
- package/dist/interactions/actions/resize/behaviors/lockAspect.js.map +1 -1
- package/dist/interactions/actions/resize/boxFrame.js +16 -0
- package/dist/interactions/actions/resize/boxFrame.js.map +1 -0
- package/dist/interactions/actions/resize/capture.js +85 -0
- package/dist/interactions/actions/resize/capture.js.map +1 -0
- package/dist/interactions/actions/resize/commit.js +69 -0
- package/dist/interactions/actions/resize/commit.js.map +1 -0
- package/dist/interactions/actions/resize/frame.js +74 -0
- package/dist/interactions/actions/resize/frame.js.map +1 -0
- package/dist/interactions/actions/resize/pointSnap.js +111 -0
- package/dist/interactions/actions/resize/pointSnap.js.map +1 -0
- package/dist/interactions/actions/resize/ruleBounds.js +9 -0
- package/dist/interactions/actions/resize/ruleBounds.js.map +1 -0
- package/dist/interactions/actions/resize/session.js +49 -0
- package/dist/interactions/actions/resize/session.js.map +1 -0
- package/dist/interactions/actions/resolveOverlays.js.map +1 -1
- package/dist/interactions/actions/resolvePreviews.js.map +1 -1
- package/dist/interactions/actions/rotate/action.js +56 -0
- package/dist/interactions/actions/rotate/action.js.map +1 -0
- package/dist/interactions/actions/rotate/behaviors/index.js +7 -0
- package/dist/interactions/actions/rotate/behaviors/index.js.map +1 -0
- package/dist/interactions/actions/rotate/behaviors/snapRotation.js +12 -0
- package/dist/interactions/actions/rotate/behaviors/snapRotation.js.map +1 -0
- package/dist/interactions/actions/rotate/commit.js +40 -0
- package/dist/interactions/actions/rotate/commit.js.map +1 -0
- package/dist/interactions/actions/rotate/frame.js +65 -0
- package/dist/interactions/actions/rotate/frame.js.map +1 -0
- package/dist/interactions/actions/rotate/handle.js +12 -12
- package/dist/interactions/actions/rotate/handle.js.map +1 -1
- package/dist/interactions/actions/rotate/session.js +92 -0
- package/dist/interactions/actions/rotate/session.js.map +1 -0
- package/dist/interactions/actions/selectionSubtree.js +69 -0
- package/dist/interactions/actions/selectionSubtree.js.map +1 -0
- package/dist/interactions/actions/spatialReference.js.map +1 -1
- package/dist/interactions/actions/useStandardActions.js +87 -78
- package/dist/interactions/actions/useStandardActions.js.map +1 -1
- package/dist/interactions/gestures/dragGesture/dragGesture.js +4 -7
- package/dist/interactions/gestures/dragGesture/dragGesture.js.map +1 -1
- package/dist/interactions/gestures/dragGesture/dragPointOf.js +23 -0
- package/dist/interactions/gestures/dragGesture/dragPointOf.js.map +1 -0
- package/dist/interactions/gestures/handleDrag/handleDrag.js +21 -26
- package/dist/interactions/gestures/handleDrag/handleDrag.js.map +1 -1
- package/dist/interactions/gestures/pointerDrag/pointerDrag.js +62 -41
- package/dist/interactions/gestures/pointerDrag/pointerDrag.js.map +1 -1
- package/dist/interactions/gestures/shared/originProjection.js +1 -1
- package/dist/interactions/gestures/shared/originProjection.js.map +1 -1
- package/dist/interactions/gestures/shared/screenTolerance.js +8 -2
- package/dist/interactions/gestures/shared/screenTolerance.js.map +1 -1
- package/dist/interactions/gestures/shared/snap.js.map +1 -1
- package/dist/interactions/gestures/thresholdDrag/thresholdDrag.js +8 -4
- package/dist/interactions/gestures/thresholdDrag/thresholdDrag.js.map +1 -1
- package/dist/layout/arrivals.js +20 -23
- package/dist/layout/arrivals.js.map +1 -1
- package/dist/math-CYUjoyyU.d.ts +33 -0
- package/dist/math.d.ts +5 -3
- package/dist/math.js +6 -6
- package/dist/mesh.d.ts +4 -268
- package/dist/mesh.js +3 -7
- package/dist/move.d.ts +14 -11
- package/dist/{originProjection-DEklpDc_.d.ts → originProjection-PPT88jZv.d.ts} +1 -1
- package/dist/patterns-builtin.d.ts +1 -118
- package/dist/patterns-builtin.js +2 -3
- package/dist/{poseDescriptor-D-OH-tu5.d.ts → poseDescriptor-Bqk-11Rl.d.ts} +26 -36
- package/dist/renderer.d.ts +1 -91
- package/dist/renderer.js +2 -18
- package/dist/resize.d.ts +10 -22
- package/dist/resize.js +6 -6
- package/dist/style.css +1 -1
- package/dist/test-hook/install.js +12 -6
- package/dist/test-hook/install.js.map +1 -1
- package/dist/test-hook/useTestHook.js +22 -0
- package/dist/test-hook/useTestHook.js.map +1 -0
- package/dist/test-seams-D0pyV3pR.d.ts +149 -0
- package/dist/test-seams.d.ts +4 -4
- package/dist/test-seams.js +2 -2
- package/dist/tools/builtin/bone/boneActions.js +130 -0
- package/dist/tools/builtin/bone/boneActions.js.map +1 -0
- package/dist/tools/builtin/bone/boneOverlay.js +58 -0
- package/dist/tools/builtin/bone/boneOverlay.js.map +1 -0
- package/dist/tools/builtin/bone/placedRig.js +24 -0
- package/dist/tools/builtin/bone/placedRig.js.map +1 -0
- package/dist/tools/builtin/bone/rigEditState.js +21 -0
- package/dist/tools/builtin/bone/rigEditState.js.map +1 -0
- package/dist/tools/builtin/bone/useBoneTool.js +98 -0
- package/dist/tools/builtin/bone/useBoneTool.js.map +1 -0
- package/dist/tools/builtin/ellipse/useEllipseTool.js +1 -0
- package/dist/tools/builtin/ellipse/useEllipseTool.js.map +1 -1
- package/dist/tools/builtin/eyedropper/useEyedropperTool.js.map +1 -1
- package/dist/tools/builtin/hand/useHandTool.js +1 -0
- package/dist/tools/builtin/hand/useHandTool.js.map +1 -1
- package/dist/tools/builtin/image/useImageTool.js.map +1 -1
- package/dist/tools/builtin/lasso/useLassoTool.js +11 -11
- package/dist/tools/builtin/lasso/useLassoTool.js.map +1 -1
- package/dist/tools/builtin/line/useLineTool.js +1 -0
- package/dist/tools/builtin/line/useLineTool.js.map +1 -1
- package/dist/tools/builtin/pen/usePenTool.js +198 -150
- package/dist/tools/builtin/pen/usePenTool.js.map +1 -1
- package/dist/tools/builtin/pencil/usePencilTool.js +1 -0
- package/dist/tools/builtin/pencil/usePencilTool.js.map +1 -1
- package/dist/tools/builtin/pickTopMostHit.js.map +1 -1
- package/dist/tools/builtin/polygon/usePolygonTool.js +13 -8
- package/dist/tools/builtin/polygon/usePolygonTool.js.map +1 -1
- package/dist/tools/builtin/rect/useRectTool.js +1 -0
- package/dist/tools/builtin/rect/useRectTool.js.map +1 -1
- package/dist/tools/builtin/select/adapterPointQuery.js +36 -0
- package/dist/tools/builtin/select/adapterPointQuery.js.map +1 -0
- package/dist/tools/builtin/select/selectionContributions.js +25 -24
- package/dist/tools/builtin/select/selectionContributions.js.map +1 -1
- package/dist/tools/builtin/select/useSelectTool.js +42 -67
- package/dist/tools/builtin/select/useSelectTool.js.map +1 -1
- package/dist/tools/builtin/shared/pointerFollower.js +17 -0
- package/dist/tools/builtin/shared/pointerFollower.js.map +1 -0
- package/dist/tools/builtin/slice/useSliceTool.js +72 -82
- package/dist/tools/builtin/slice/useSliceTool.js.map +1 -1
- package/dist/tools/builtin/star/useStarTool.js +22 -16
- package/dist/tools/builtin/star/useStarTool.js.map +1 -1
- package/dist/tools/builtin/text/useTextTool.js +9 -0
- package/dist/tools/builtin/text/useTextTool.js.map +1 -1
- package/dist/tools/builtin/weight/useWeightTool.js +77 -0
- package/dist/tools/builtin/weight/useWeightTool.js.map +1 -0
- package/dist/tools/builtin/weight/weightActions.js +112 -0
- package/dist/tools/builtin/weight/weightActions.js.map +1 -0
- package/dist/tools/builtin/weight/weightOverlay.js +61 -0
- package/dist/tools/builtin/weight/weightOverlay.js.map +1 -0
- package/dist/tools/overlayBinding.js.map +1 -1
- package/dist/tools/useKeybindings.js +12 -22
- package/dist/tools/useKeybindings.js.map +1 -1
- package/dist/{types-A37hYkeR.d.ts → types-CIKDwlsP.d.ts} +113 -169
- package/dist/util/color.js +3 -3
- package/dist/util/color.js.map +1 -1
- package/dist/util/paint.js +1 -1
- package/dist/util/paint.js.map +1 -1
- package/dist/version.js +1 -1
- package/package.json +28 -21
- package/dist/animation/colorHelpers.js +0 -135
- package/dist/animation/colorHelpers.js.map +0 -1
- package/dist/animation/colorRegistry.js +0 -37
- package/dist/animation/colorRegistry.js.map +0 -1
- package/dist/animation/engine/axes.js +0 -36
- package/dist/animation/engine/axes.js.map +0 -1
- package/dist/animation/engine/codec.js +0 -170
- package/dist/animation/engine/codec.js.map +0 -1
- package/dist/animation/engine/integrator.js +0 -12
- package/dist/animation/engine/integrator.js.map +0 -1
- package/dist/animation/loop.js +0 -62
- package/dist/animation/loop.js.map +0 -1
- package/dist/animation/observe.js +0 -23
- package/dist/animation/observe.js.map +0 -1
- package/dist/animation/rig/blendPoses.js +0 -43
- package/dist/animation/rig/blendPoses.js.map +0 -1
- package/dist/animation/rig/mirrorPose.js +0 -19
- package/dist/animation/rig/mirrorPose.js.map +0 -1
- package/dist/animation/rig/resolveSkeleton.js +0 -33
- package/dist/animation/rig/resolveSkeleton.js.map +0 -1
- package/dist/animation/rig/solveIk.js +0 -103
- package/dist/animation/rig/solveIk.js.map +0 -1
- package/dist/animation/rig/types.js +0 -12
- package/dist/animation/rig/types.js.map +0 -1
- package/dist/animation/slew.js +0 -27
- package/dist/animation/slew.js.map +0 -1
- package/dist/animation/stagger.js +0 -138
- package/dist/animation/stagger.js.map +0 -1
- package/dist/animation/timeline/booking.js +0 -106
- package/dist/animation/timeline/booking.js.map +0 -1
- package/dist/animation/timeline/createTimeline.js +0 -116
- package/dist/animation/timeline/createTimeline.js.map +0 -1
- package/dist/animation/timeline/sampleTrack.js +0 -71
- package/dist/animation/timeline/sampleTrack.js.map +0 -1
- package/dist/animation/useAnimator.js +0 -378
- package/dist/animation/useAnimator.js.map +0 -1
- package/dist/builtins-C-VgUlWI.d.ts +0 -4514
- package/dist/canvas/MinimapCanvas.js +0 -139
- package/dist/canvas/MinimapCanvas.js.map +0 -1
- package/dist/canvas/deps/poseComposition.js +0 -11
- package/dist/canvas/deps/poseComposition.js.map +0 -1
- package/dist/canvas/minimapMath.js +0 -80
- package/dist/canvas/minimapMath.js.map +0 -1
- package/dist/canvas/toolPreview.js +0 -39
- package/dist/canvas/toolPreview.js.map +0 -1
- package/dist/core/adapters/arrayAdapter.js +0 -85
- package/dist/core/adapters/arrayAdapter.js.map +0 -1
- package/dist/core/adapters/useArrayAdapter.js +0 -13
- package/dist/core/adapters/useArrayAdapter.js.map +0 -1
- package/dist/core/fillInPoseFrame.js +0 -102
- package/dist/core/fillInPoseFrame.js.map +0 -1
- package/dist/core/geometry/poseRotation.js +0 -58
- package/dist/core/geometry/poseRotation.js.map +0 -1
- package/dist/core/gradient.js +0 -136
- package/dist/core/gradient.js.map +0 -1
- package/dist/core/isPlainObject.js.map +0 -1
- package/dist/core/markerInset.js +0 -24
- package/dist/core/markerInset.js.map +0 -1
- package/dist/core/mixed.js +0 -6
- package/dist/core/mixed.js.map +0 -1
- package/dist/core/paintKinds.js +0 -156
- package/dist/core/paintKinds.js.map +0 -1
- package/dist/core/strokeMarkerShapes.js +0 -139
- package/dist/core/strokeMarkerShapes.js.map +0 -1
- package/dist/core/strokeMarkers.js +0 -28
- package/dist/core/strokeMarkers.js.map +0 -1
- package/dist/core/viewport/meanScale.js +0 -8
- package/dist/core/viewport/meanScale.js.map +0 -1
- package/dist/core/viewport/pxExtent.js +0 -42
- package/dist/core/viewport/pxExtent.js.map +0 -1
- package/dist/debug/flag.js.map +0 -1
- package/dist/features/cursor/paintedCursorLayer.js.map +0 -1
- package/dist/features/focus/gateLayer.js +0 -14
- package/dist/features/focus/gateLayer.js.map +0 -1
- package/dist/features/focus/useCanvasFocus.js +0 -29
- package/dist/features/focus/useCanvasFocus.js.map +0 -1
- package/dist/features/groups/children.js.map +0 -1
- package/dist/features/groups/composePose.js.map +0 -1
- package/dist/features/groups/nestedHit.js.map +0 -1
- package/dist/features/groups/unionOfChildren.js.map +0 -1
- package/dist/features/images/imageCache.js +0 -94
- package/dist/features/images/imageCache.js.map +0 -1
- package/dist/features/ingestion/index.js +0 -8
- package/dist/features/meshPaint/bake.js +0 -79
- package/dist/features/meshPaint/bake.js.map +0 -1
- package/dist/features/meshPaint/bakeCache.js +0 -59
- package/dist/features/meshPaint/bakeCache.js.map +0 -1
- package/dist/features/meshPaint/handles.js +0 -86
- package/dist/features/meshPaint/handles.js.map +0 -1
- package/dist/features/meshPaint/lazyKind.js.map +0 -1
- package/dist/features/meshPaint/meshPaint.js +0 -236
- package/dist/features/meshPaint/meshPaint.js.map +0 -1
- package/dist/features/meshPaint/meshShader.js +0 -6
- package/dist/features/meshPaint/meshShader.js.map +0 -1
- package/dist/features/meshPaint/register.js +0 -7
- package/dist/features/meshPaint/register.js.map +0 -1
- package/dist/features/meshPaint/surface.js +0 -110
- package/dist/features/meshPaint/surface.js.map +0 -1
- package/dist/features/minimap/actions.js +0 -53
- package/dist/features/minimap/actions.js.map +0 -1
- package/dist/features/minimap/createMinimapContribution.js +0 -96
- package/dist/features/minimap/createMinimapContribution.js.map +0 -1
- package/dist/features/minimap/layers.js +0 -103
- package/dist/features/minimap/layers.js.map +0 -1
- package/dist/features/overlays/useNodeOverlayFrame.js +0 -103
- package/dist/features/overlays/useNodeOverlayFrame.js.map +0 -1
- package/dist/features/parallax/createParallaxLayer.js +0 -26
- package/dist/features/parallax/createParallaxLayer.js.map +0 -1
- package/dist/features/parallax/createParallaxPlane.js +0 -26
- package/dist/features/parallax/createParallaxPlane.js.map +0 -1
- package/dist/features/paths/anchorEdits.js +0 -156
- package/dist/features/paths/anchorEdits.js.map +0 -1
- package/dist/features/paths/anchors.js +0 -154
- package/dist/features/paths/anchors.js.map +0 -1
- package/dist/features/paths/booleans.js +0 -2
- package/dist/features/paths/markerCommands.js +0 -148
- package/dist/features/paths/markerCommands.js.map +0 -1
- package/dist/features/paths/markerSites.js +0 -59
- package/dist/features/paths/markerSites.js.map +0 -1
- package/dist/features/paths/markers.js +0 -95
- package/dist/features/paths/markers.js.map +0 -1
- package/dist/features/paths/nearestAnchor.js +0 -36
- package/dist/features/paths/nearestAnchor.js.map +0 -1
- package/dist/features/paths/pathInWorld.js +0 -41
- package/dist/features/paths/pathInWorld.js.map +0 -1
- package/dist/features/paths/poseDescriptor.js +0 -39
- package/dist/features/paths/poseDescriptor.js.map +0 -1
- package/dist/features/paths/tessellate/dash.js +0 -52
- package/dist/features/paths/tessellate/dash.js.map +0 -1
- package/dist/features/paths/tessellate/insets.js +0 -32
- package/dist/features/paths/tessellate/insets.js.map +0 -1
- package/dist/features/paths/tessellate/metric.js +0 -72
- package/dist/features/paths/tessellate/metric.js.map +0 -1
- package/dist/features/paths/tessellate/stroke.js +0 -170
- package/dist/features/paths/tessellate/stroke.js.map +0 -1
- package/dist/features/paths/tessellate/vertexWidths.js +0 -32
- package/dist/features/paths/tessellate/vertexWidths.js.map +0 -1
- package/dist/features/patterns/index.js +0 -23
- package/dist/features/patterns/index.js.map +0 -1
- package/dist/features/patterns/patterns-builtin.js +0 -38
- package/dist/features/patterns/patterns-builtin.js.map +0 -1
- package/dist/features/patterns/resolveSpec.js +0 -57
- package/dist/features/patterns/resolveSpec.js.map +0 -1
- package/dist/features/patterns/tileGeometry.js +0 -158
- package/dist/features/patterns/tileGeometry.js.map +0 -1
- package/dist/features/pointer/PointerContext.js +0 -45
- package/dist/features/pointer/PointerContext.js.map +0 -1
- package/dist/features/selection/SelectionContext.js +0 -46
- package/dist/features/selection/SelectionContext.js.map +0 -1
- package/dist/features/simulation/createSimulation.js +0 -61
- package/dist/features/simulation/createSimulation.js.map +0 -1
- package/dist/features/simulation/types.js +0 -6
- package/dist/features/simulation/types.js.map +0 -1
- package/dist/features/simulation/useSimulation.js +0 -74
- package/dist/features/simulation/useSimulation.js.map +0 -1
- package/dist/features/text/domRuns.js +0 -258
- package/dist/features/text/domRuns.js.map +0 -1
- package/dist/features/text/fitTextPose.js +0 -38
- package/dist/features/text/fitTextPose.js.map +0 -1
- package/dist/features/text/hitTest.js +0 -45
- package/dist/features/text/hitTest.js.map +0 -1
- package/dist/features/text/renderLabel.js +0 -14
- package/dist/features/text/renderLabel.js.map +0 -1
- package/dist/features/text/runs/effectiveRangeStyle.js +0 -66
- package/dist/features/text/runs/effectiveRangeStyle.js.map +0 -1
- package/dist/features/text/runs/flagRange.js +0 -53
- package/dist/features/text/runs/flagRange.js.map +0 -1
- package/dist/features/text/runs/rangeStyle.js +0 -135
- package/dist/features/text/runs/rangeStyle.js.map +0 -1
- package/dist/features/text/textCommand.js +0 -59
- package/dist/features/text/textCommand.js.map +0 -1
- package/dist/features/text/textToPath.js +0 -181
- package/dist/features/text/textToPath.js.map +0 -1
- package/dist/features/text/useTextEdit.js +0 -467
- package/dist/features/text/useTextEdit.js.map +0 -1
- package/dist/features/tiling/createTiledLayer.js +0 -63
- package/dist/features/tiling/createTiledLayer.js.map +0 -1
- package/dist/features/tiling/tiledProject.js +0 -14
- package/dist/features/tiling/tiledProject.js.map +0 -1
- package/dist/interactions/actions/clone/behaviors/cloneByAltDrag.js +0 -26
- package/dist/interactions/actions/clone/behaviors/cloneByAltDrag.js.map +0 -1
- package/dist/interactions/actions/defaults/align.js.map +0 -1
- package/dist/interactions/actions/defaults/booleans.js +0 -52
- package/dist/interactions/actions/defaults/booleans.js.map +0 -1
- package/dist/interactions/actions/defaults/clipboard.js.map +0 -1
- package/dist/interactions/actions/defaults/clone.js +0 -107
- package/dist/interactions/actions/defaults/clone.js.map +0 -1
- package/dist/interactions/actions/defaults/createOutlines.js +0 -47
- package/dist/interactions/actions/defaults/createOutlines.js.map +0 -1
- package/dist/interactions/actions/defaults/distribute.js +0 -66
- package/dist/interactions/actions/defaults/distribute.js.map +0 -1
- package/dist/interactions/actions/defaults/editAnchors.js.map +0 -1
- package/dist/interactions/actions/defaults/flip.js +0 -119
- package/dist/interactions/actions/defaults/flip.js.map +0 -1
- package/dist/interactions/actions/defaults/freshNodeId.js +0 -10
- package/dist/interactions/actions/defaults/freshNodeId.js.map +0 -1
- package/dist/interactions/actions/defaults/insert.js +0 -288
- package/dist/interactions/actions/defaults/insert.js.map +0 -1
- package/dist/interactions/actions/defaults/lassoSelect.js +0 -156
- package/dist/interactions/actions/defaults/lassoSelect.js.map +0 -1
- package/dist/interactions/actions/defaults/move.js +0 -760
- package/dist/interactions/actions/defaults/move.js.map +0 -1
- package/dist/interactions/actions/defaults/resize.js +0 -335
- package/dist/interactions/actions/defaults/resize.js.map +0 -1
- package/dist/interactions/actions/defaults/rotate.js +0 -184
- package/dist/interactions/actions/defaults/rotate.js.map +0 -1
- package/dist/interactions/actions/previewOverrides.js +0 -25
- package/dist/interactions/actions/previewOverrides.js.map +0 -1
- package/dist/interactions/actions/resize/autoPoseDescriptor.js.map +0 -1
- package/dist/math-Drrw4ewZ.d.ts +0 -160
- package/dist/registerProgram-BMZRDgrh.d.ts +0 -197
- package/dist/renderer/DrawCommand.js +0 -6
- package/dist/renderer/DrawCommand.js.map +0 -1
- package/dist/renderer/WeaselRenderer.js +0 -331
- package/dist/renderer/WeaselRenderer.js.map +0 -1
- package/dist/renderer/batchClip.js +0 -46
- package/dist/renderer/batchClip.js.map +0 -1
- package/dist/renderer/cache/GLImageCache.js +0 -64
- package/dist/renderer/cache/GLImageCache.js.map +0 -1
- package/dist/renderer/cache/GLMeshCache.js +0 -102
- package/dist/renderer/cache/GLMeshCache.js.map +0 -1
- package/dist/renderer/cache/GLTextureCache.js +0 -51
- package/dist/renderer/cache/GLTextureCache.js.map +0 -1
- package/dist/renderer/cache/GradientRampAtlas.js +0 -82
- package/dist/renderer/cache/GradientRampAtlas.js.map +0 -1
- package/dist/renderer/cache/cache.js +0 -13
- package/dist/renderer/cache/cache.js.map +0 -1
- package/dist/renderer/cache/markerCommandCache.js +0 -63
- package/dist/renderer/cache/markerCommandCache.js.map +0 -1
- package/dist/renderer/cache/outlineMeshCache.js +0 -15
- package/dist/renderer/cache/outlineMeshCache.js.map +0 -1
- package/dist/renderer/cache/outlineStrokeMeshCache.js +0 -36
- package/dist/renderer/cache/outlineStrokeMeshCache.js.map +0 -1
- package/dist/renderer/cache/strokeMeshCache.js +0 -55
- package/dist/renderer/cache/strokeMeshCache.js.map +0 -1
- package/dist/renderer/cullDrawCommands.js +0 -90
- package/dist/renderer/cullDrawCommands.js.map +0 -1
- package/dist/renderer/draw.js +0 -1135
- package/dist/renderer/draw.js.map +0 -1
- package/dist/renderer/drawBatch.js +0 -198
- package/dist/renderer/drawBatch.js.map +0 -1
- package/dist/renderer/effects/EffectTargets.js +0 -45
- package/dist/renderer/effects/EffectTargets.js.map +0 -1
- package/dist/renderer/effects/builtins.js +0 -31
- package/dist/renderer/effects/builtins.js.map +0 -1
- package/dist/renderer/effects/composite.js +0 -9
- package/dist/renderer/effects/composite.js.map +0 -1
- package/dist/renderer/effects/effectPrelude.js +0 -10
- package/dist/renderer/effects/effectPrelude.js.map +0 -1
- package/dist/renderer/effects/types.js +0 -10
- package/dist/renderer/effects/types.js.map +0 -1
- package/dist/renderer/glyphOutlineMesh.js +0 -67
- package/dist/renderer/glyphOutlineMesh.js.map +0 -1
- package/dist/renderer/index.js +0 -19
- package/dist/renderer/math/color.js +0 -341
- package/dist/renderer/math/color.js.map +0 -1
- package/dist/renderer/math/mat3.js +0 -76
- package/dist/renderer/math/mat3.js.map +0 -1
- package/dist/renderer/math/patternSpace.js +0 -22
- package/dist/renderer/math/patternSpace.js.map +0 -1
- package/dist/renderer/math/viewToMat3.js +0 -19
- package/dist/renderer/math/viewToMat3.js.map +0 -1
- package/dist/renderer/paintResources.js +0 -18
- package/dist/renderer/paintResources.js.map +0 -1
- package/dist/renderer/paintScratch.js +0 -37
- package/dist/renderer/paintScratch.js.map +0 -1
- package/dist/renderer/shaders/ShaderProgram.js +0 -74
- package/dist/renderer/shaders/ShaderProgram.js.map +0 -1
- package/dist/renderer/shaders/batchFill.js +0 -119
- package/dist/renderer/shaders/batchFill.js.map +0 -1
- package/dist/renderer/shaders/customPrelude.js +0 -34
- package/dist/renderer/shaders/customPrelude.js.map +0 -1
- package/dist/renderer/shaders/extractUniformNames.js +0 -184
- package/dist/renderer/shaders/extractUniformNames.js.map +0 -1
- package/dist/renderer/shaders/glyphPaint.js +0 -61
- package/dist/renderer/shaders/glyphPaint.js.map +0 -1
- package/dist/renderer/shaders/gradFill.js +0 -30
- package/dist/renderer/shaders/gradFill.js.map +0 -1
- package/dist/renderer/shaders/imageFill.js +0 -14
- package/dist/renderer/shaders/imageFill.js.map +0 -1
- package/dist/renderer/shaders/pathFill.js +0 -13
- package/dist/renderer/shaders/pathFill.js.map +0 -1
- package/dist/renderer/shaders/patternFill.js +0 -24
- package/dist/renderer/shaders/patternFill.js.map +0 -1
- package/dist/renderer/shaders/registerProgram.js +0 -18
- package/dist/renderer/shaders/registerProgram.js.map +0 -1
- package/dist/renderer/spriteSheet.js +0 -14
- package/dist/renderer/spriteSheet.js.map +0 -1
- package/dist/renderer/state/GroupState.js +0 -77
- package/dist/renderer/state/GroupState.js.map +0 -1
- package/dist/renderer/strokeLengths.js +0 -50
- package/dist/renderer/strokeLengths.js.map +0 -1
- package/dist/renderer/syntheticItalic.js +0 -6
- package/dist/renderer/syntheticItalic.js.map +0 -1
- package/dist/renderer/textures/registerTexture.js +0 -14
- package/dist/renderer/textures/registerTexture.js.map +0 -1
- package/dist/scheduling/useVisibleRaf.js +0 -69
- package/dist/scheduling/useVisibleRaf.js.map +0 -1
- package/dist/test-seams-CuIxe0xY.d.ts +0 -356
- package/dist/tools/prefs.js +0 -62
- package/dist/tools/prefs.js.map +0 -1
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sceneRecording.js","names":["createSceneRecording","env","notifier","ops","createOpTable","mode","replay","step","notify","stale","logApplied","kind","payload","reverted","outer","createOuterOps","name","args","recorder","atomically","config","engine","createHistory","selection","ids","log","createAppliedLog","createRecorder","lifted","engineDriven","refuseUntracked","verb","createSceneHistory","arrivals","handler","op","batch","all","label","adapter","methods"],"sources":["../../../src/core/scene/sceneRecording.ts"],"sourcesContent":["/**\n * How a scene's edits reach its undo stack: the op table, the log that takes\n * back an edit refused partway, the engine, and the recorder between them.\n */\nimport type { Journal } from '@weasel-js/history';\nimport { createHistory } from 'core/ops/createHistory';\nimport { createAppliedLog } from './appliedLog';\nimport type { ArrivalWindow } from './arrivalWindow';\nimport type { EditMode } from './editMode';\nimport { createSceneHistory, type SceneHistoryMethods } from './historyFacade';\nimport type { Notifier } from './notifier';\nimport { createOpTable, type OpTable } from './opTable';\nimport { createOuterOps } from './outerOps';\nimport { createRecorder, type Recorder, type RecorderEnv } from './recorder';\nimport type { SceneSelection } from './sceneSelection';\nimport type { StaleReplay } from './staleReplay';\nimport type { NodeId, RegisteredOp, Scene } from './types';\n\nexport interface SceneRecordingEnv {\n notifier: Notifier;\n mode: EditMode;\n stale: StaleReplay;\n /** Run with the lock guard lifted. */\n lifted<T>(fn: () => T): T;\n selection: Pick<SceneSelection, 'get' | 'set' | 'replace'>;\n arrivals: RecorderEnv['arrivals'] & Pick<ArrivalWindow<unknown>, 'runEdit'>;\n writePose(id: string, pose: unknown): void;\n config: {\n getActiveJournal?: (() => Journal | null) | undefined;\n coalesceWindowMs?: number | undefined;\n historyLimit?: number | undefined;\n };\n}\n\nexport interface SceneRecording {\n ops: Pick<OpTable, 'register' | 'run'>;\n recorder: Recorder;\n clearHistory(): void;\n methods: SceneHistoryMethods & Pick<\n Scene<unknown, string, unknown>,\n | 'registerOp' | 'recordOp' | 'applyBatch' | 'history' | 'batch' | 'untracked'\n | 'setActiveJournalAccessor' | 'setHistoryAdapter'\n >;\n}\n\nexport function createSceneRecording(env: SceneRecordingEnv): SceneRecording {\n const { notifier, mode, stale, lifted, selection, arrivals, config } = env;\n const { notify } = notifier;\n\n const ops = createOpTable({\n driven: mode.open,\n replayAlone: (step) => { replay(step); notify(); },\n skips: stale.skips,\n // Only a replay is logged: a first apply is recorded by the entry it\n // creates, and reverting it would leave that entry describing nothing.\n applied: (kind, payload, reverted) => { if (!mode.records()) logApplied(kind, payload, reverted); },\n });\n\n const outer = createOuterOps({\n own: (name, args) => (ops.handlers.has(name) ? ops.op(name, args) : null),\n recorder: () => recorder,\n // Deferred rather than muted, so a throwing op cannot strand subscribers\n // after earlier ops in the batch already mutated state.\n driving: (step) => notifier.deferred(() => mode.during('engine', () => atomically(step, () => true))),\n getActiveJournal: config.getActiveJournal ?? null,\n });\n\n // The scene's undo/redo engine. Its recorded ops close over their payloads,\n // so the engine's adapter argument is unused.\n const engine = createHistory(undefined, {\n selection: { get: selection.get, set: (ids) => selection.set(ids as readonly NodeId[]) },\n ...(config.coalesceWindowMs !== undefined ? { coalesceWindowMs: config.coalesceWindowMs } : {}),\n ...(config.historyLimit !== undefined ? { historyLimit: config.historyLimit } : {}),\n rebuildOp: outer.rebuild,\n });\n\n const log = createAppliedLog({\n registered: ops.handlers,\n lifted,\n getSelection: selection.get,\n setSelection: selection.replace,\n notify,\n });\n const { atomically, logApplied } = log;\n\n const recorder = createRecorder({\n notifier,\n mode,\n engine,\n runOp: ops.run,\n makeOp: ops.op,\n log,\n arrivals,\n selection: selection.get,\n writePose: env.writePose,\n });\n const { record, engineDriven } = recorder;\n\n /** Run an engine step that replays recorded ops — undo, redo, goto, a\n * journal stepping. The engine inverts whole ops when one throws; this\n * also reverts the scene writes of the op that threw partway. */\n function replay(step: () => void): void {\n atomically(() => lifted(() => stale.during(() => engineDriven(step))), () => true);\n }\n\n function refuseUntracked(verb: string): void {\n if (mode.untracked()) throw new Error(`Scene: cannot ${verb} inside untracked() — it records`);\n }\n\n const { history, methods } = createSceneHistory({\n engine,\n applying: (step) => atomically(() => engineDriven(step), () => true),\n causing: outer.causing,\n replay,\n notify,\n refuseUntracked,\n runArrivalEdit: arrivals.runEdit,\n });\n\n return {\n ops,\n recorder,\n clearHistory: () => engine.clear(),\n methods: {\n registerOp(kind, handler) {\n if (kind.startsWith('kit:')) {\n throw new Error(`Scene: op kind \"${kind}\" is reserved (kit:* prefix)`);\n }\n ops.register(kind, handler as RegisteredOp<unknown>);\n },\n recordOp(op) {\n record(op.kind, op.payload, op.kind);\n },\n applyBatch(batch, label, adapter) {\n refuseUntracked('applyBatch');\n return arrivals.runEdit(batch, (all) => outer.apply(engine, all, label, adapter));\n },\n history,\n ...methods,\n batch: recorder.batch,\n untracked: recorder.untracked,\n setActiveJournalAccessor: outer.setActiveJournalAccessor,\n setHistoryAdapter: outer.setHistoryAdapter,\n },\n };\n}\n"],"mappings":";;;;;;;AA6CA,SAAgBA,EAAqB,GAAwC;CAC3E,IAAM,EAAE,aAAU,SAAM,UAAO,WAAQ,cAAW,aAAU,cAAWC,GACjE,EAAE,cAAWC,GAEbC,IAAMC,EAAc;EACxB,QAAQC,EAAK;EACb,cAAc,MAAS;GAAgB,AAAdC,EAAOC,CAAI,GAAGC,EAAO;EAAG;EACjD,OAAOC,EAAM;EAGb,UAAU,GAAM,GAAS,MAAa;GAAE,AAAKJ,EAAK,QAAQ,KAAGK,EAAWC,GAAMC,GAASC,CAAQ;EAAG;CACpG,CAAC,GAEKC,IAAQC,EAAe;EAC3B,MAAM,GAAM,MAAUZ,EAAI,SAAS,IAAIa,CAAI,IAAIb,EAAI,GAAGa,GAAMC,CAAI,IAAI;EACpE,gBAAgBC;EAGhB,UAAU,MAAShB,EAAS,eAAeG,EAAK,OAAO,gBAAgBc,EAAWZ,SAAY,EAAI,CAAC,CAAC;EACpG,kBAAkBa,EAAO,oBAAoB;CAC/C,CAAC,GAIKC,IAASC,EAAc,KAAA,GAAW;EACtC,WAAW;GAAE,KAAKC,EAAU;GAAK,MAAM,MAAQA,EAAU,IAAIC,CAAwB;EAAE;EACvF,GAAIJ,EAAO,qBAAqB,KAAA,IAA4D,CAAC,IAAjD,EAAE,kBAAkBA,EAAO,iBAAiB;EACxF,GAAIA,EAAO,iBAAiB,KAAA,IAAoD,CAAC,IAAzC,EAAE,cAAcA,EAAO,aAAa;EAC5E,WAAWN,EAAM;CACnB,CAAC,GAEKW,IAAMC,EAAiB;EAC3B,YAAYvB,EAAI;EAChB;EACA,cAAcoB,EAAU;EACxB,cAAcA,EAAU;EACxB;CACF,CAAC,GACK,EAAE,eAAY,kBAAeE,GAE7BP,IAAWS,EAAe;EAC9B;EACA;EACA;EACA,OAAOxB,EAAI;EACX,QAAQA,EAAI;EACZ;EACA;EACA,WAAWoB,EAAU;EACrB,WAAWtB,EAAI;CACjB,CAAC,GACK,EAAE,WAAQ,oBAAiBiB;CAKjC,SAASZ,EAAO,GAAwB;EACtC,QAAiBsB,QAAanB,EAAM,aAAaoB,EAAatB,CAAI,CAAC,CAAC,SAAS,EAAI;CACnF;CAEA,SAASuB,EAAgB,GAAoB;EAC3C,IAAIzB,EAAK,UAAU,GAAG,MAAU,MAAM,iBAAiB0B,EAAK,iCAAiC;CAC/F;CAEA,IAAM,EAAE,YAAS,eAAYC,EAAmB;EAC9C;EACA,WAAW,MAASb,QAAiBU,EAAatB,CAAI,SAAS,EAAI;EACnE,SAASO,EAAM;EACf;EACA;EACA;EACA,gBAAgBmB,EAAS;CAC3B,CAAC;CAED,OAAO;EACL;EACA;EACA,oBAAoBZ,EAAO,MAAM;EACjC,SAAS;GACP,WAAW,GAAM,GAAS;IACxB,IAAIV,EAAK,WAAW,MAAM,GACxB,MAAU,MAAM,mBAAmBA,EAAK,6BAA6B;IAEvE,EAAI,SAASA,GAAMuB,CAAgC;GACrD;GACA,SAAS,GAAI;IACX,EAAOC,EAAG,MAAMA,EAAG,SAASA,EAAG,IAAI;GACrC;GACA,WAAW,GAAO,GAAO,GAAS;IAEhC,OADAL,EAAgB,YAAY,GACrBG,EAAS,QAAQG,IAAQ,MAAQtB,EAAM,MAAMO,GAAQgB,GAAKC,GAAOC,CAAO,CAAC;GAClF;GACA;GACA,GAAGC;GACH,OAAOtB,EAAS;GAChB,WAAWA,EAAS;GACpB,0BAA0BJ,EAAM;GAChC,mBAAmBA,EAAM;EAC3B;CACF;AACF"}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import { createEmitter as e } from "@weasel-js/registry";
|
|
2
|
+
//#region src/core/scene/sceneSelection.ts
|
|
3
|
+
function t(t) {
|
|
4
|
+
let n = [], r = e();
|
|
5
|
+
return {
|
|
6
|
+
get: () => n,
|
|
7
|
+
set(e) {
|
|
8
|
+
n = t(e), r.emit();
|
|
9
|
+
},
|
|
10
|
+
narrow(e) {
|
|
11
|
+
n = t(e !== void 0 && n.some((t) => e.has(t)) ? n.filter((t) => !e.has(t)) : n);
|
|
12
|
+
},
|
|
13
|
+
replace(e) {
|
|
14
|
+
n = e;
|
|
15
|
+
},
|
|
16
|
+
subscribe: r.subscribe
|
|
17
|
+
};
|
|
18
|
+
}
|
|
19
|
+
function n(e) {
|
|
20
|
+
return {
|
|
21
|
+
get: () => e.getSelection(),
|
|
22
|
+
set: (t) => e.setSelection(t)
|
|
23
|
+
};
|
|
24
|
+
}
|
|
25
|
+
//#endregion
|
|
26
|
+
export { t as createSceneSelection, n as sceneSelectionStore };
|
|
27
|
+
|
|
28
|
+
//# sourceMappingURL=sceneSelection.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sceneSelection.js","names":["createSceneSelection","ids","changed","createEmitter","reachable","next","gone","id","sceneSelectionStore","scene"],"sources":["../../../src/core/scene/sceneSelection.ts"],"sourcesContent":["/**\n * The scene's selection: the transient set of active ids. Not document\n * content, so it never reaches `toJSON`; it does ride on history entries.\n */\nimport type { HistorySelection } from '@weasel-js/history';\nimport { createEmitter } from '@weasel-js/registry';\nimport type { NodeId } from './types';\n\nexport interface SceneSelection {\n get(): readonly NodeId[];\n /** Select the ids of `ids` that are in reach, and tell subscribers. */\n set(ids: readonly NodeId[]): void;\n /** Drop the ids in `gone`, and any a lock has put out of reach. Tells no\n * one: the edit that took them is what subscribers hear about. */\n narrow(gone?: ReadonlySet<NodeId>): void;\n /** Put a selection in place exactly as given, telling no one: for a caller\n * returning what it read earlier, or one that has already filtered. */\n replace(ids: readonly NodeId[]): void;\n subscribe(listener: () => void): () => void;\n}\n\nexport function createSceneSelection(\n /** `ids` less those out of reach; the same array when none is. */\n reachable: (ids: readonly NodeId[]) => readonly NodeId[],\n): SceneSelection {\n let ids: readonly NodeId[] = [];\n const changed = createEmitter();\n\n return {\n get: () => ids,\n set(next) {\n ids = reachable(next);\n changed.emit();\n },\n narrow(gone) {\n // A new array only when one is dropped: readers compare the selection by identity.\n const kept = gone !== undefined && ids.some((id) => gone.has(id)) ? ids.filter((id) => !gone.has(id)) : ids;\n ids = reachable(kept);\n },\n replace(next) {\n ids = next;\n },\n subscribe: changed.subscribe,\n };\n}\n\n/** The scene's selection in the shape `createHistory` wants, for a consumer\n * building a second History over the same scene (a modality machine, a\n * journal owner) that should restore selection the way the scene's own\n * history does. */\nexport function sceneSelectionStore(scene: {\n getSelection(): readonly NodeId[];\n setSelection(ids: readonly NodeId[]): void;\n}): HistorySelection {\n return {\n get: () => scene.getSelection(),\n set: (ids) => scene.setSelection(ids as readonly NodeId[]),\n };\n}\n"],"mappings":";;AAqBA,SAAgBA,EAEd,GACgB;CAChB,IAAIC,IAAyB,CAAC,GACxBC,IAAUC,EAAc;CAE9B,OAAO;EACL,WAAWF;EACX,IAAI,GAAM;GAER,AADA,IAAMG,EAAUC,CAAI,GACpBH,EAAQ,KAAK;EACf;EACA,OAAO,GAAM;GAGX,IAAME,EADOE,MAAS,KAAA,KAAaL,EAAI,MAAM,MAAOK,EAAK,IAAIC,CAAE,CAAC,IAAIN,EAAI,QAAQ,MAAO,CAACK,EAAK,IAAIC,CAAE,CAAC,IAAIN,CACpF;EACtB;EACA,QAAQ,GAAM;GACZ,IAAMI;EACR;EACA,WAAWH,EAAQ;CACrB;AACF;AAMA,SAAgBM,EAAoB,GAGf;CACnB,OAAO;EACL,WAAWC,EAAM,aAAa;EAC9B,MAAM,MAAQA,EAAM,aAAaR,CAAwB;CAC3D;AACF"}
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
import { createNodeFnFields as e } from "./nodeFnFields.js";
|
|
2
|
+
import { createLayerStack as t } from "./layerStack.js";
|
|
3
|
+
import { createStaleReplay as n } from "./staleReplay.js";
|
|
4
|
+
import { createLockGuard as r } from "./lockGuard.js";
|
|
5
|
+
import { createNodeStore as i } from "./nodeStore.js";
|
|
6
|
+
import { createRenderOrder as a } from "./renderOrder.js";
|
|
7
|
+
import { serializeScene as o } from "./serialization.js";
|
|
8
|
+
import { createTreeReads as s } from "./treeReads.js";
|
|
9
|
+
//#region src/core/scene/sceneState.ts
|
|
10
|
+
function c(c, l, u) {
|
|
11
|
+
let d = {
|
|
12
|
+
nodes: /* @__PURE__ */ new Map(),
|
|
13
|
+
roots: [],
|
|
14
|
+
layers: [],
|
|
15
|
+
layerIndex: /* @__PURE__ */ new Map()
|
|
16
|
+
}, f = a(d), p = e(c, (e) => {
|
|
17
|
+
e === "layout" && u();
|
|
18
|
+
}), m = i(d, f.invalidate, p), h = t(d, f.invalidate);
|
|
19
|
+
h.reset(l);
|
|
20
|
+
let g = r(d), _ = {
|
|
21
|
+
...s(d.nodes),
|
|
22
|
+
renderOrder: f.ids,
|
|
23
|
+
renderOrderNodes: f.nodes,
|
|
24
|
+
nodesOnLayer: f.nodesOnLayer,
|
|
25
|
+
isLocked: (e) => g.isLocked(e),
|
|
26
|
+
layoutOf(e) {
|
|
27
|
+
let t = d.nodes.get(e);
|
|
28
|
+
return t?.kind === "container" ? t.layout ?? null : null;
|
|
29
|
+
},
|
|
30
|
+
toJSON: () => o(d, p)
|
|
31
|
+
};
|
|
32
|
+
return {
|
|
33
|
+
state: d,
|
|
34
|
+
order: f,
|
|
35
|
+
locks: g,
|
|
36
|
+
stale: n(d.nodes),
|
|
37
|
+
fnFields: p,
|
|
38
|
+
store: m,
|
|
39
|
+
layers: h,
|
|
40
|
+
reads: _,
|
|
41
|
+
reset(e) {
|
|
42
|
+
m.dependents.clear(), m.childDerived.clear(), d.nodes.clear(), d.roots.length = 0, h.reset(e);
|
|
43
|
+
}
|
|
44
|
+
};
|
|
45
|
+
}
|
|
46
|
+
//#endregion
|
|
47
|
+
export { c as createSceneState };
|
|
48
|
+
|
|
49
|
+
//# sourceMappingURL=sceneState.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sceneState.js","names":["createSceneState","state","order","createRenderOrder","fnFields","createNodeFnFields","registry","field","layoutDeclared","store","createNodeStore","layers","createLayerStack","initialLayers","locks","createLockGuard","reads","createTreeReads","id","node","serializeScene","createStaleReplay","records"],"sources":["../../../src/core/scene/sceneState.ts"],"sourcesContent":["/**\n * A scene's document state — its nodes, roots, and layers — with the modules\n * that read and write it directly.\n */\nimport { createLayerStack } from './layerStack';\nimport { createLockGuard } from './lockGuard';\nimport { createNodeFnFields } from './nodeFnFields';\nimport { createNodeStore } from './nodeStore';\nimport { createRenderOrder } from './renderOrder';\nimport { serializeScene } from './serialization';\nimport { createStaleReplay } from './staleReplay';\nimport { createTreeReads } from './treeReads';\nimport type { LayerRecord, Node, NodeId, Scene, SceneRegistry } from './types';\n\nexport function createSceneState<TData, TLayer extends string, TPose>(\n registry: SceneRegistry<TPose, TData, TLayer>,\n initialLayers: readonly LayerRecord<TLayer>[],\n /** Called when a node is given a layout. */\n layoutDeclared: () => void,\n) {\n const state = {\n nodes: new Map<NodeId, Node<TData, TLayer, TPose>>(),\n roots: [] as NodeId[],\n layers: [] as LayerRecord<TLayer>[],\n layerIndex: new Map<TLayer, number>(),\n };\n const order = createRenderOrder(state);\n /** The registry-keyed function fields, each with its key maps. A function\n * cannot travel through a serializable op payload, so an op carries its key. */\n const fnFields = createNodeFnFields<TPose>(registry, (field) => {\n if (field === 'layout') layoutDeclared();\n });\n const store = createNodeStore(state, order.invalidate, fnFields);\n const layers = createLayerStack(state, order.invalidate);\n layers.reset(initialLayers);\n const locks = createLockGuard(state);\n\n const reads: Pick<\n Scene<TData, TLayer, TPose>,\n | 'get' | 'incarnation' | 'childrenOf' | 'ancestorsOf' | 'renderOrder' | 'renderOrderNodes'\n | 'nodesOnLayer' | 'isLocked' | 'layoutOf' | 'toJSON'\n > = {\n ...createTreeReads(state.nodes),\n renderOrder: order.ids,\n renderOrderNodes: order.nodes,\n nodesOnLayer: order.nodesOnLayer,\n isLocked: (id) => locks.isLocked(id),\n layoutOf(id) {\n const node = state.nodes.get(id);\n return node?.kind === 'container' ? (node.layout ?? null) : null;\n },\n toJSON: () => serializeScene(state, fnFields),\n };\n\n return {\n state,\n order,\n locks,\n stale: createStaleReplay(state.nodes),\n fnFields,\n store,\n layers,\n reads,\n\n /** Empty the document and give it `records` as its layers. */\n reset(records: readonly LayerRecord<TLayer>[]): void {\n store.dependents.clear();\n store.childDerived.clear();\n state.nodes.clear();\n state.roots.length = 0;\n layers.reset(records);\n },\n };\n}\n"],"mappings":";;;;;;;;;AAcA,SAAgBA,EACd,GACA,GAEA,GACA;CACA,IAAMC,IAAQ;EACZ,uBAAO,IAAI,IAAwC;EACnD,OAAO,CAAC;EACR,QAAQ,CAAC;EACT,4BAAY,IAAI,IAAoB;CACtC,GACMC,IAAQC,EAAkBF,CAAK,GAG/BG,IAAWC,EAA0BC,IAAW,MAAU;EAC9D,AAAIC,MAAU,YAAUC,EAAe;CACzC,CAAC,GACKC,IAAQC,EAAgBT,GAAOC,EAAM,YAAYE,CAAQ,GACzDO,IAASC,EAAiBX,GAAOC,EAAM,UAAU;CACvD,EAAO,MAAMW,CAAa;CAC1B,IAAMC,IAAQC,EAAgBd,CAAK,GAE7Be,IAIF;EACF,GAAGC,EAAgBhB,EAAM,KAAK;EAC9B,aAAaC,EAAM;EACnB,kBAAkBA,EAAM;EACxB,cAAcA,EAAM;EACpB,WAAW,MAAOY,EAAM,SAASI,CAAE;EACnC,SAAS,GAAI;GACX,IAAMC,IAAOlB,EAAM,MAAM,IAAIiB,CAAE;GAC/B,OAAOC,GAAM,SAAS,cAAeA,EAAK,UAAU,OAAQ;EAC9D;EACA,cAAcC,EAAenB,GAAOG,CAAQ;CAC9C;CAEA,OAAO;EACL;EACA;EACA;EACA,OAAOiB,EAAkBpB,EAAM,KAAK;EACpC;EACA;EACA;EACA;EAGA,MAAM,GAA+C;GAKnD,AAJAQ,EAAM,WAAW,MAAM,GACvBA,EAAM,aAAa,MAAM,GACzBR,EAAM,MAAM,MAAM,GAClB,EAAM,MAAM,SAAS,GACrBU,EAAO,MAAMW,CAAO;EACtB;CACF;AACF"}
|
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
import { NODE_FN_FIELDS as e, fnKeysOf as t } from "./nodeFnFields.js";
|
|
2
|
+
import { treePreorder as n } from "./treeOrder.js";
|
|
3
|
+
//#region src/core/scene/serialization.ts
|
|
4
|
+
function r(e) {
|
|
5
|
+
return typeof e == "object" && !!e && e.version === 1 && Array.isArray(e.nodes);
|
|
6
|
+
}
|
|
7
|
+
function i(e) {
|
|
8
|
+
let t = {
|
|
9
|
+
id: e.id,
|
|
10
|
+
visible: e.visible ?? !0,
|
|
11
|
+
locked: e.locked ?? !1,
|
|
12
|
+
...e.parallax ? { parallax: e.parallax } : {}
|
|
13
|
+
};
|
|
14
|
+
return e.kind === "user" ? {
|
|
15
|
+
...t,
|
|
16
|
+
kind: "user",
|
|
17
|
+
name: e.name ?? e.id
|
|
18
|
+
} : {
|
|
19
|
+
...t,
|
|
20
|
+
kind: "system"
|
|
21
|
+
};
|
|
22
|
+
}
|
|
23
|
+
function a(e, r) {
|
|
24
|
+
let i = [];
|
|
25
|
+
for (let a of n(e.roots, e.nodes)) {
|
|
26
|
+
let e = a.id, n = {
|
|
27
|
+
id: e,
|
|
28
|
+
kind: a.kind,
|
|
29
|
+
layer: a.layer,
|
|
30
|
+
pose: a.pose,
|
|
31
|
+
data: a.data
|
|
32
|
+
};
|
|
33
|
+
a.parent != null && (n.parent = a.parent), a.dependsOn === "children" ? n.dependsOn = "children" : a.dependsOn && a.dependsOn.length > 0 && (n.dependsOn = a.dependsOn), a.pickable === !1 && (n.pickable = !1), a.kind === "container" && a.units !== void 0 && (n.units = a.units), Object.assign(n, t(r, a, "jsonKey", (t) => {
|
|
34
|
+
throw Error(`Scene.toJSON: node '${e}' has ${t.spec.field} but no matching registry key. The function must be registered via createScene's registry option to round-trip.`);
|
|
35
|
+
})), i.push(n);
|
|
36
|
+
}
|
|
37
|
+
return {
|
|
38
|
+
version: 1,
|
|
39
|
+
systemLayers: e.layers.map((e) => {
|
|
40
|
+
let t = { id: e.id };
|
|
41
|
+
return e.visible === !1 && (t.visible = !1), e.locked === !0 && (t.locked = !0), e.parallax && (t.parallax = e.parallax), e.kind === "user" && (t.kind = "user", t.name = e.name), t;
|
|
42
|
+
}),
|
|
43
|
+
nodes: i
|
|
44
|
+
};
|
|
45
|
+
}
|
|
46
|
+
function o(t, n) {
|
|
47
|
+
if (t.version !== 1) throw Error(`Scene: unsupported version ${t.version}; only v1 supported`);
|
|
48
|
+
return t.nodes.map((t) => {
|
|
49
|
+
let r = {
|
|
50
|
+
id: t.id,
|
|
51
|
+
kind: t.kind,
|
|
52
|
+
layer: t.layer,
|
|
53
|
+
pose: t.pose,
|
|
54
|
+
data: t.data
|
|
55
|
+
};
|
|
56
|
+
t.parent !== void 0 && (r.parent = t.parent), t.pickable !== void 0 && (r.pickable = t.pickable), t.units !== void 0 && (r.units = t.units), t.dependsOn !== void 0 && (r.dependsOn = t.dependsOn === "children" ? "children" : t.dependsOn);
|
|
57
|
+
let i = t;
|
|
58
|
+
for (let t of e) {
|
|
59
|
+
let e = i[t.jsonKey];
|
|
60
|
+
if (e === void 0) continue;
|
|
61
|
+
let a = n[t.field]?.[e];
|
|
62
|
+
if (!a) throw Error(`Scene: unknown ${t.field} key '${e}'. Register a function with this key in the registry option.`);
|
|
63
|
+
r[t.field] = a;
|
|
64
|
+
}
|
|
65
|
+
return r;
|
|
66
|
+
});
|
|
67
|
+
}
|
|
68
|
+
//#endregion
|
|
69
|
+
export { r as isSerializedScene, i as layerFromSerialized, a as serializeScene, o as specsFromSerialized };
|
|
70
|
+
|
|
71
|
+
//# sourceMappingURL=serialization.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"serialization.js","names":["isSerializedScene","value","layerFromSerialized","base","spec","serializeScene","nodes","n","treePreorder","state","id","out","fnKeysOf","fnFields","field","layer","l","specsFromSerialized","json","serialized","NODE_FN_FIELDS","key","fn","registry"],"sources":["../../../src/core/scene/serialization.ts"],"sourcesContent":["/**\n * A scene to and from its JSON snapshot: the walk that writes one, and the\n * two readers that turn one back into layer records and node specs.\n */\nimport {\n NODE_FN_FIELDS, fnKeysOf, type FnBearingNode, type NodeFnField,\n} from './nodeFnFields';\nimport { treePreorder } from './treeOrder';\nimport type {\n AddNodeSpec, LayerRecord, Node, NodeId, SceneRegistry, SerializedLayer, SerializedNode, SerializedScene,\n} from './types';\n\n/** Whether `value` is a snapshot `specsFromSerialized` reads, as against a live scene. */\nexport function isSerializedScene<TData, TLayer extends string, TPose>(\n value: unknown,\n): value is SerializedScene<TData, TLayer, TPose> {\n return typeof value === 'object' && value != null\n && (value as { version?: unknown }).version === 1\n && Array.isArray((value as { nodes?: unknown }).nodes);\n}\n\n/** What a snapshot is written from. */\nexport interface SerializableState<TData, TLayer extends string, TPose> {\n nodes: Map<NodeId, Node<TData, TLayer, TPose>>;\n roots: NodeId[];\n layers: LayerRecord<TLayer>[];\n}\n\n/** One layer record from its snapshot form. A snapshot with no `kind` predates\n * user layers, so everything in it was a system layer. */\nexport function layerFromSerialized<TLayer extends string>(\n spec: SerializedLayer<TLayer>,\n): LayerRecord<TLayer> {\n const base = {\n id: spec.id,\n visible: spec.visible ?? true,\n locked: spec.locked ?? false,\n ...(spec.parallax ? { parallax: spec.parallax } : {}),\n };\n return spec.kind === 'user'\n ? { ...base, kind: 'user', name: spec.name ?? spec.id }\n : { ...base, kind: 'system' };\n}\n\n/** The snapshot of `state`: layers in order, nodes in tree preorder. Throws\n * when a node carries a function the registry has no key for. */\nexport function serializeScene<TData, TLayer extends string, TPose>(\n state: SerializableState<TData, TLayer, TPose>,\n fnFields: readonly NodeFnField[],\n): SerializedScene<TData, TLayer, TPose> {\n const nodes: SerializedNode<TData, TLayer, TPose>[] = [];\n for (const n of treePreorder(state.roots, state.nodes)) {\n const id = n.id;\n const out: SerializedNode<TData, TLayer, TPose> = {\n id,\n kind: n.kind,\n layer: n.layer,\n pose: n.pose,\n data: n.data,\n };\n if (n.parent != null) out.parent = n.parent;\n if (n.dependsOn === 'children') out.dependsOn = 'children';\n else if (n.dependsOn && n.dependsOn.length > 0) out.dependsOn = n.dependsOn;\n if (n.pickable === false) out.pickable = false;\n if (n.kind === 'container' && n.units !== undefined) out.units = n.units;\n Object.assign(\n out,\n fnKeysOf(fnFields, n as unknown as FnBearingNode, 'jsonKey', (field) => {\n throw new Error(\n `Scene.toJSON: node '${id}' has ${field.spec.field} but no matching registry key. ` +\n `The function must be registered via createScene's registry option to round-trip.`\n );\n }),\n );\n nodes.push(out);\n }\n const systemLayers = state.layers.map((l) => {\n const layer: SerializedLayer<TLayer> = { id: l.id };\n if (l.visible === false) layer.visible = false;\n if (l.locked === true) layer.locked = true;\n if (l.parallax) layer.parallax = l.parallax;\n if (l.kind === 'user') {\n layer.kind = 'user';\n layer.name = l.name;\n }\n return layer;\n });\n return { version: 1, systemLayers, nodes };\n}\n\n/** Map a `SerializedScene` to construction specs. Shared by `sceneFromJSON`\n * (new instance) and `Scene.loadState` (in-place). Validates version and\n * resolves every `NODE_FN_FIELDS` key → function via the registry;\n * throws on an unsupported version or an unknown registry key. */\nexport function specsFromSerialized<TData, TLayer extends string, TPose>(\n json: SerializedScene<TData, TLayer, TPose>,\n registry: SceneRegistry<TPose, TData, TLayer>,\n): AddNodeSpec<TData, TLayer, TPose>[] {\n if (json.version !== 1) {\n throw new Error(`Scene: unsupported version ${json.version}; only v1 supported`);\n }\n return json.nodes.map((n) => {\n const spec: AddNodeSpec<TData, TLayer, TPose> = {\n id: n.id as NodeId,\n kind: n.kind,\n layer: n.layer,\n pose: n.pose,\n data: n.data,\n };\n if (n.parent !== undefined) spec.parent = n.parent as NodeId;\n if (n.pickable !== undefined) spec.pickable = n.pickable;\n if (n.units !== undefined) spec.units = n.units;\n if (n.dependsOn !== undefined) {\n spec.dependsOn = n.dependsOn === 'children'\n ? 'children'\n : (n.dependsOn as readonly NodeId[]);\n }\n const serialized = n as unknown as Record<string, string | undefined>;\n for (const field of NODE_FN_FIELDS) {\n const key = serialized[field.jsonKey];\n if (key === undefined) continue;\n const fn = (registry[field.field] as Record<string, unknown> | undefined)?.[key];\n if (!fn) {\n throw new Error(\n `Scene: unknown ${field.field} key '${key}'. ` +\n `Register a function with this key in the registry option.`,\n );\n }\n (spec as unknown as Record<string, unknown>)[field.field] = fn;\n }\n return spec;\n });\n}\n"],"mappings":";;;AAaA,SAAgBA,EACd,GACgD;CAChD,OAAO,OAAOC,KAAU,cAAYA,KAC9BA,EAAgC,YAAY,KAC7C,MAAM,QAASA,EAA8B,KAAK;AACzD;AAWA,SAAgBC,EACd,GACqB;CACrB,IAAMC,IAAO;EACX,IAAIC,EAAK;EACT,SAASA,EAAK,WAAW;EACzB,QAAQA,EAAK,UAAU;EACvB,GAAIA,EAAK,WAAW,EAAE,UAAUA,EAAK,SAAS,IAAI,CAAC;CACrD;CACA,OAAOA,EAAK,SAAS,SACjB;EAAE,GAAGD;EAAM,MAAM;EAAQ,MAAMC,EAAK,QAAQA,EAAK;CAAG,IACpD;EAAE,GAAGD;EAAM,MAAM;CAAS;AAChC;AAIA,SAAgBE,EACd,GACA,GACuC;CACvC,IAAMC,IAAgD,CAAC;CACvD,KAAK,IAAMC,KAAKC,EAAaC,EAAM,OAAOA,EAAM,KAAK,GAAG;EACtD,IAAMC,IAAKH,EAAE,IACPI,IAA4C;GAChD;GACA,MAAMJ,EAAE;GACR,OAAOA,EAAE;GACT,MAAMA,EAAE;GACR,MAAMA,EAAE;EACV;EAeA,AAdIA,EAAE,UAAU,SAAM,EAAI,SAASA,EAAE,SACjCA,EAAE,cAAc,aAAY,EAAI,YAAY,aACvCA,EAAE,aAAaA,EAAE,UAAU,SAAS,MAAG,EAAI,YAAYA,EAAE,YAC9DA,EAAE,aAAa,OAAO,EAAI,WAAW,KACrCA,EAAE,SAAS,eAAeA,EAAE,UAAU,KAAA,MAAW,EAAI,QAAQA,EAAE,QACnE,OAAO,OACLI,GACAC,EAASC,GAAUN,GAA+B,YAAY,MAAU;GACtE,MAAU,MACR,uBAAuBG,EAAG,QAAQI,EAAM,KAAK,MAAM,gHAErD;EACF,CAAC,CACH,GACAR,EAAM,KAAKK,CAAG;CAChB;CAYA,OAAO;EAAE,SAAS;EAAG,cAXAF,EAAM,OAAO,KAAK,MAAM;GAC3C,IAAMM,IAAiC,EAAE,IAAIC,EAAE,GAAG;GAQlD,OAPIA,EAAE,YAAY,OAAO,EAAM,UAAU,KACrCA,EAAE,WAAW,OAAM,EAAM,SAAS,KAClCA,EAAE,aAAU,EAAM,WAAWA,EAAE,WAC/BA,EAAE,SAAS,WACb,EAAM,OAAO,QACb,EAAM,OAAOA,EAAE,OAEVD;EACT,CACqB;EAAc;CAAM;AAC3C;AAMA,SAAgBE,EACd,GACA,GACqC;CACrC,IAAIC,EAAK,YAAY,GACnB,MAAU,MAAM,8BAA8BA,EAAK,QAAQ,oBAAoB;CAEjF,OAAOA,EAAK,MAAM,KAAK,MAAM;EAC3B,IAAMd,IAA0C;GAC9C,IAAIG,EAAE;GACN,MAAMA,EAAE;GACR,OAAOA,EAAE;GACT,MAAMA,EAAE;GACR,MAAMA,EAAE;EACV;EAIA,AAHIA,EAAE,WAAW,KAAA,MAAW,EAAK,SAASA,EAAE,SACxCA,EAAE,aAAa,KAAA,MAAW,EAAK,WAAWA,EAAE,WAC5CA,EAAE,UAAU,KAAA,MAAW,EAAK,QAAQA,EAAE,QACtCA,EAAE,cAAc,KAAA,MAClB,EAAK,YAAYA,EAAE,cAAc,aAC7B,aACCA,EAAE;EAET,IAAMY,IAAaZ;EACnB,KAAK,IAAMO,KAASM,GAAgB;GAClC,IAAMC,IAAMF,EAAWL,EAAM;GAC7B,IAAIO,MAAQ,KAAA,GAAW;GACvB,IAAMC,IAAMC,EAAST,EAAM,MAAM,GAA2CO;GAC5E,IAAI,CAACC,GACH,MAAU,MACR,kBAAkBR,EAAM,MAAM,QAAQO,EAAI,6DAE5C;GAEF,EAA6CP,EAAM,SAASQ;EAC9D;EACA,OAAOlB;CACT,CAAC;AACH"}
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
//#region src/core/scene/staleReplay.ts
|
|
2
|
+
var e = class extends Error {};
|
|
3
|
+
function t(e) {
|
|
4
|
+
let t = 0, n = /* @__PURE__ */ new WeakMap(), r = (t) => t === null || e.has(t), i = (t, n) => {
|
|
5
|
+
let r = e.get(t);
|
|
6
|
+
return r?.kind !== "container" || r.children.every((e) => n?.has(e) === !0);
|
|
7
|
+
};
|
|
8
|
+
function a(t, n, a) {
|
|
9
|
+
switch (t) {
|
|
10
|
+
case "kit:add": {
|
|
11
|
+
let t = n;
|
|
12
|
+
return a ? e.has(t.id) || !r(t.parent) : !e.has(t.id) || !i(t.id);
|
|
13
|
+
}
|
|
14
|
+
case "kit:remove": {
|
|
15
|
+
let t = n;
|
|
16
|
+
if (!a) return t.nodes.some((t) => e.has(t.id)) || !t.detached.every((e) => r(e.parent));
|
|
17
|
+
let o = new Set(t.nodes.map((e) => e.id));
|
|
18
|
+
return !t.nodes.every((t) => e.has(t.id) && i(t.id, o));
|
|
19
|
+
}
|
|
20
|
+
case "kit:move": {
|
|
21
|
+
let t = n;
|
|
22
|
+
return !e.has(t.id) || !r(a ? t.toParent : t.fromParent);
|
|
23
|
+
}
|
|
24
|
+
case "kit:setPose":
|
|
25
|
+
case "kit:setData":
|
|
26
|
+
case "kit:setLayer":
|
|
27
|
+
case "kit:setDependsOn":
|
|
28
|
+
case "kit:setLayout":
|
|
29
|
+
case "kit:setUnits": return !e.has(n.id);
|
|
30
|
+
default: return !1;
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
function o(e, r, i) {
|
|
34
|
+
return t === 0 || typeof r != "object" || !r ? !1 : n.get(r) === !i ? n.delete(r) : a(e, r, i) ? (n.set(r, i), !0) : !1;
|
|
35
|
+
}
|
|
36
|
+
return {
|
|
37
|
+
during(e) {
|
|
38
|
+
t++;
|
|
39
|
+
try {
|
|
40
|
+
return e();
|
|
41
|
+
} finally {
|
|
42
|
+
t--;
|
|
43
|
+
}
|
|
44
|
+
},
|
|
45
|
+
skips: o
|
|
46
|
+
};
|
|
47
|
+
}
|
|
48
|
+
//#endregion
|
|
49
|
+
export { e as SceneMembershipError, t as createStaleReplay };
|
|
50
|
+
|
|
51
|
+
//# sourceMappingURL=staleReplay.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"staleReplay.js","names":["SceneMembershipError","createStaleReplay","replaying","skipped","holds","id","nodes","childless","node","within","c","stale","kind","p","payload","forward","n","d","taken","skips","step"],"sources":["../../../src/core/scene/staleReplay.ts"],"sourcesContent":["/**\n * What a replay does with an op whose node is not where its entry left it.\n *\n * An untracked edit changes the tree without the history stack hearing of it,\n * so an entry can name a node that edit removed, or add one it already put\n * back. Replaying such an op is skipped rather than refused: a refusal leaves\n * the entry on top of its stack, and every entry beneath it out of reach. The\n * inverse of a skipped op is skipped too, so undo then redo changes nothing.\n */\nimport type { RemoveSnapshot } from './kitOps';\nimport type { Node, NodeId } from './types';\n\n/** A scene edit named a node the scene does not hold, or one it already does. */\nexport class SceneMembershipError extends Error {}\n\nexport interface StaleReplay {\n /** Run a step that replays recorded ops. */\n during<T>(step: () => T): T;\n /** Whether replaying this kit op would address a node that is gone, or\n * restore one that is already there. Always false outside `during`. */\n skips(kind: string, payload: unknown, forward: boolean): boolean;\n}\n\nexport function createStaleReplay<TData, TLayer extends string, TPose>(\n nodes: ReadonlyMap<NodeId, Node<TData, TLayer, TPose>>,\n): StaleReplay {\n let replaying = 0;\n /** Kit payloads whose last replay was skipped, by the direction it ran in. */\n const skipped = new WeakMap<object, boolean>();\n const holds = (id: NodeId | null): boolean => id === null || nodes.has(id);\n const childless = (id: NodeId, within?: ReadonlySet<NodeId>): boolean => {\n const node = nodes.get(id);\n return node?.kind !== 'container' || node.children.every((c) => within?.has(c) === true);\n };\n\n function stale(kind: string, payload: unknown, forward: boolean): boolean {\n switch (kind) {\n case 'kit:add': {\n const p = payload as { id: NodeId; parent: NodeId | null };\n return forward ? nodes.has(p.id) || !holds(p.parent) : !nodes.has(p.id) || !childless(p.id);\n }\n case 'kit:remove': {\n const p = payload as RemoveSnapshot<TData, TLayer, TPose>;\n if (!forward) return p.nodes.some((n) => nodes.has(n.id)) || !p.detached.every((d) => holds(d.parent));\n const taken = new Set(p.nodes.map((n) => n.id));\n return !p.nodes.every((n) => nodes.has(n.id) && childless(n.id, taken));\n }\n case 'kit:move': {\n const p = payload as { id: NodeId; fromParent: NodeId | null; toParent: NodeId | null };\n return !nodes.has(p.id) || !holds(forward ? p.toParent : p.fromParent);\n }\n case 'kit:setPose':\n case 'kit:setData':\n case 'kit:setLayer':\n case 'kit:setDependsOn':\n case 'kit:setLayout':\n case 'kit:setUnits':\n return !nodes.has((payload as { id: NodeId }).id);\n default:\n return false;\n }\n }\n\n function skips(kind: string, payload: unknown, forward: boolean): boolean {\n if (replaying === 0 || typeof payload !== 'object' || payload === null) return false;\n if (skipped.get(payload) === !forward) return skipped.delete(payload);\n if (!stale(kind, payload, forward)) return false;\n skipped.set(payload, forward);\n return true;\n }\n\n return {\n during(step) {\n replaying++;\n try {\n return step();\n } finally {\n replaying--;\n }\n },\n skips,\n };\n}\n"],"mappings":";AAaA,IAAaA,IAAb,cAA0C,MAAM,CAAC;AAUjD,SAAgBC,EACd,GACa;CACb,IAAIC,IAAY,GAEVC,oBAAU,IAAI,QAAyB,GACvCC,KAAS,MAA+BC,MAAO,QAAQC,EAAM,IAAID,CAAE,GACnEE,KAAa,GAAY,MAA0C;EACvE,IAAMC,IAAOF,EAAM,IAAID,CAAE;EACzB,OAAOG,GAAM,SAAS,eAAeA,EAAK,SAAS,OAAO,MAAMC,GAAQ,IAAIC,CAAC,MAAM,EAAI;CACzF;CAEA,SAASC,EAAM,GAAc,GAAkB,GAA2B;EACxE,QAAQC,GAAR;GACE,KAAK,WAAW;IACd,IAAMC,IAAIC;IACV,OAAOC,IAAUT,EAAM,IAAIO,EAAE,EAAE,KAAK,CAACT,EAAMS,EAAE,MAAM,IAAI,CAACP,EAAM,IAAIO,EAAE,EAAE,KAAK,CAACN,EAAUM,EAAE,EAAE;GAC5F;GACA,KAAK,cAAc;IACjB,IAAMA,IAAIC;IACV,IAAI,CAACC,GAAS,OAAOF,EAAE,MAAM,MAAM,MAAMP,EAAM,IAAIU,EAAE,EAAE,CAAC,KAAK,CAACH,EAAE,SAAS,OAAO,MAAMT,EAAMa,EAAE,MAAM,CAAC;IACrG,IAAMC,IAAQ,IAAI,IAAIL,EAAE,MAAM,KAAK,MAAMG,EAAE,EAAE,CAAC;IAC9C,OAAO,CAACH,EAAE,MAAM,OAAO,MAAMP,EAAM,IAAIU,EAAE,EAAE,KAAKT,EAAUS,EAAE,IAAIE,CAAK,CAAC;GACxE;GACA,KAAK,YAAY;IACf,IAAML,IAAIC;IACV,OAAO,CAACR,EAAM,IAAIO,EAAE,EAAE,KAAK,CAACT,EAAMW,IAAUF,EAAE,WAAWA,EAAE,UAAU;GACvE;GACA,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK,gBACH,OAAO,CAACP,EAAM,IAAKQ,EAA2B,EAAE;GAClD,SACE,OAAO;EACX;CACF;CAEA,SAASK,EAAM,GAAc,GAAkB,GAA2B;EAKxE,OAJIjB,MAAc,KAAK,OAAOY,KAAY,aAAYA,IAAyB,KAC3EX,EAAQ,IAAIW,CAAO,MAAM,CAACC,IAAgBZ,EAAQ,OAAOW,CAAO,IAC/DH,EAAMC,GAAME,GAASC,CAAO,KACjCZ,EAAQ,IAAIW,GAASC,CAAO,GACrB,MAFoC;CAG7C;CAEA,OAAO;EACL,OAAO,GAAM;GACX;GACA,IAAI;IACF,OAAOK,EAAK;GACd,UAAU;IACR;GACF;EACF;EACA;CACF;AACF"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
//#region src/core/scene/statedFields.ts
|
|
2
|
+
var e = (e) => ({
|
|
3
|
+
...e.pickable === void 0 ? {} : { pickable: e.pickable },
|
|
4
|
+
...e.kind === "container" && e.units !== void 0 ? { units: e.units } : {}
|
|
5
|
+
});
|
|
6
|
+
//#endregion
|
|
7
|
+
export { e as statedFields };
|
|
8
|
+
|
|
9
|
+
//# sourceMappingURL=statedFields.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"statedFields.js","names":["statedFields","n"],"sources":["../../../src/core/scene/statedFields.ts"],"sourcesContent":["import type { UnitScope } from '@weasel-js/quantity';\n\ninterface Stated { kind?: 'leaf' | 'container'; pickable?: boolean; units?: UnitScope }\n\n/** The plain optional fields of a node or spec as a spread for `scene.add`:\n * each present only when stated, so an unstated one keeps the scene's\n * default. A leaf states no `units`. */\nexport const statedFields = (n: Stated): { pickable?: boolean; units?: UnitScope } => ({\n ...(n.pickable !== undefined ? { pickable: n.pickable } : {}),\n ...(n.kind === 'container' && n.units !== undefined ? { units: n.units } : {}),\n});\n"],"mappings":";AAOA,IAAaA,KAAgB,OAA0D;CACrF,GAAIC,EAAE,aAAa,KAAA,IAAuC,CAAC,IAA5B,EAAE,UAAUA,EAAE,SAAS;CACtD,GAAIA,EAAE,SAAS,eAAeA,EAAE,UAAU,KAAA,IAAY,EAAE,OAAOA,EAAE,MAAM,IAAI,CAAC;AAC9E"}
|
|
@@ -0,0 +1,127 @@
|
|
|
1
|
+
import { fnKeysOf as e } from "./nodeFnFields.js";
|
|
2
|
+
import { statedFields as t } from "./statedFields.js";
|
|
3
|
+
import { SceneMembershipError as n } from "./staleReplay.js";
|
|
4
|
+
//#region src/core/scene/treeEdits.ts
|
|
5
|
+
function r(t, n, r, i) {
|
|
6
|
+
let a = t.map((e) => {
|
|
7
|
+
let t = r.requireNode(e);
|
|
8
|
+
return t.kind === "container" ? {
|
|
9
|
+
...t,
|
|
10
|
+
children: [...t.children]
|
|
11
|
+
} : { ...t };
|
|
12
|
+
}), o = a.filter((e) => e.parent === null || !n.has(e.parent)).map((e) => ({
|
|
13
|
+
id: e.id,
|
|
14
|
+
parent: e.parent,
|
|
15
|
+
index: r.siblingsOf(e.parent).indexOf(e.id)
|
|
16
|
+
})).sort((e, t) => e.index - t.index), s = a.flatMap((t) => {
|
|
17
|
+
let n = e(i, t, "opKey");
|
|
18
|
+
return Object.keys(n).length === 0 ? [] : [{
|
|
19
|
+
id: t.id,
|
|
20
|
+
...n
|
|
21
|
+
}];
|
|
22
|
+
});
|
|
23
|
+
return {
|
|
24
|
+
nodes: a,
|
|
25
|
+
detached: o,
|
|
26
|
+
...s.length > 0 ? { fnKeys: s } : {}
|
|
27
|
+
};
|
|
28
|
+
}
|
|
29
|
+
function i(i) {
|
|
30
|
+
let { nodes: a, fnFields: o } = i, { requireNode: s, siblingsOf: c, descendants: l, removalClosure: u, patchNodeFunctions: d } = i.store, { refuse: f, refuseLayer: p } = i.locks, { requireLayerIndex: m, assertSubtreeLayer: h } = i.layers, { record: g, edit: _ } = i.recorder, { noteArrival: v, noteDeparture: y, noteChange: b } = i.arrivals;
|
|
31
|
+
function x(r) {
|
|
32
|
+
let l = r.id ?? i.generateId();
|
|
33
|
+
if (a.has(l)) throw new n(`Scene: id collision on "${l}"`);
|
|
34
|
+
m(r.layer), p(r.layer, "add to");
|
|
35
|
+
let u = r.parent ?? null;
|
|
36
|
+
if (u !== null) {
|
|
37
|
+
let e = s(u);
|
|
38
|
+
if (e.kind !== "container") throw Error(`Scene: parent "${u}" is not a container`);
|
|
39
|
+
h(r.id, r.layer, u, e.layer), f(u, "add under");
|
|
40
|
+
}
|
|
41
|
+
return {
|
|
42
|
+
id: l,
|
|
43
|
+
kind: r.kind,
|
|
44
|
+
layer: r.layer,
|
|
45
|
+
pose: r.pose,
|
|
46
|
+
data: r.data,
|
|
47
|
+
parent: u,
|
|
48
|
+
index: r.index ?? c(u).length,
|
|
49
|
+
...r.dependsOn === void 0 ? {} : { dependsOn: r.dependsOn },
|
|
50
|
+
...t(r),
|
|
51
|
+
...e(o, {
|
|
52
|
+
...r,
|
|
53
|
+
id: l,
|
|
54
|
+
kind: r.kind
|
|
55
|
+
}, "opKey")
|
|
56
|
+
};
|
|
57
|
+
}
|
|
58
|
+
function S(e) {
|
|
59
|
+
if (e.length === 0) return;
|
|
60
|
+
let { ids: t, removing: n } = u(e);
|
|
61
|
+
for (let e of t) f(e, "remove");
|
|
62
|
+
let a = r(t, n, i.store, o), { detached: s } = a;
|
|
63
|
+
_("remove", s.some((e) => e.parent !== null), () => {
|
|
64
|
+
for (let e of s) y(e.id, e.parent, null);
|
|
65
|
+
g("kit:remove", a, "remove");
|
|
66
|
+
});
|
|
67
|
+
}
|
|
68
|
+
return {
|
|
69
|
+
construct(e) {
|
|
70
|
+
i.locks.lifted(() => {
|
|
71
|
+
for (let t of e) {
|
|
72
|
+
let e = x(t);
|
|
73
|
+
i.runOp("kit:add", e), d(t, e.id, null);
|
|
74
|
+
}
|
|
75
|
+
});
|
|
76
|
+
},
|
|
77
|
+
add(e) {
|
|
78
|
+
let t = x(e), n = `add ${e.kind}`;
|
|
79
|
+
return _(n, t.parent !== null, () => (v(t.id, t.parent, null), g("kit:add", t, n), d(e, t.id, t), t.id));
|
|
80
|
+
},
|
|
81
|
+
remove: (e) => S([e]),
|
|
82
|
+
removalClosure: (e) => u(e).ids,
|
|
83
|
+
removeMany: S,
|
|
84
|
+
move(e, t, n) {
|
|
85
|
+
let r = s(e);
|
|
86
|
+
if (f(e, "move"), t !== null) {
|
|
87
|
+
f(t, "move nodes into");
|
|
88
|
+
let n = s(t);
|
|
89
|
+
if (n.kind !== "container") throw Error(`Scene: parent "${t}" is not a container`);
|
|
90
|
+
if (h(e, r.layer, t, n.layer), t === e) throw Error("Scene: cannot parent a node to itself");
|
|
91
|
+
let i = [];
|
|
92
|
+
if (l(e, i), i.includes(t)) throw Error("Scene: cannot parent a node to its own descendant");
|
|
93
|
+
}
|
|
94
|
+
let i = r.parent;
|
|
95
|
+
_("move", t !== null || i !== null, () => {
|
|
96
|
+
let r = c(i).indexOf(e), a = n ?? c(t).length;
|
|
97
|
+
v(e, t, i), y(e, i, t), b(i), g("kit:move", {
|
|
98
|
+
id: e,
|
|
99
|
+
fromParent: i,
|
|
100
|
+
fromIndex: r,
|
|
101
|
+
toParent: t,
|
|
102
|
+
toIndex: a
|
|
103
|
+
}, "move");
|
|
104
|
+
});
|
|
105
|
+
},
|
|
106
|
+
reorder(e, t) {
|
|
107
|
+
let n = s(e);
|
|
108
|
+
f(e, "reorder");
|
|
109
|
+
let r = n.parent;
|
|
110
|
+
_("reorder", r !== null, () => {
|
|
111
|
+
b(r);
|
|
112
|
+
let n = c(r).indexOf(e);
|
|
113
|
+
g("kit:move", {
|
|
114
|
+
id: e,
|
|
115
|
+
fromParent: r,
|
|
116
|
+
fromIndex: n,
|
|
117
|
+
toParent: r,
|
|
118
|
+
toIndex: t
|
|
119
|
+
}, "reorder");
|
|
120
|
+
});
|
|
121
|
+
}
|
|
122
|
+
};
|
|
123
|
+
}
|
|
124
|
+
//#endregion
|
|
125
|
+
export { i as createTreeEdits };
|
|
126
|
+
|
|
127
|
+
//# sourceMappingURL=treeEdits.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"treeEdits.js","names":["removeSnapshot","nodes","ids","n","store","nid","detached","removing","l","r","fnKeys","keys","fnKeysOf","fnFields","createTreeEdits","env","addPayload","id","spec","SceneMembershipError","requireLayerIndex","refuseLayer","parent","p","requireNode","assertSubtreeLayer","refuse","siblingsOf","statedFields","removeMany","rootIds","removalClosure","payload","d","specs","patchNodeFunctions","label","edit","noteArrival","record","node","desc","descendants","fromParent","fromIndex","toIndex","index","noteDeparture","noteChange"],"sources":["../../../src/core/scene/treeEdits.ts"],"sourcesContent":["/**\n * The scene's edits to its tree: adding and removing nodes, reparenting, and\n * reordering siblings. Each checks its arguments, then records one kit op.\n */\nimport type { ArrivalWindow } from './arrivalWindow';\nimport type { RemoveSnapshot } from './kitOps';\nimport type { createLayerStack } from './layerStack';\nimport type { LockGuard } from './lockGuard';\nimport { fnKeysOf, type FnBearingNode, type NodeFnField } from './nodeFnFields';\nimport type { createNodeStore } from './nodeStore';\nimport type { Recorder } from './recorder';\nimport { SceneMembershipError } from './staleReplay';\nimport { statedFields } from './statedFields';\nimport type { AddNodeSpec, Node, NodeId, Scene } from './types';\n\nexport interface TreeEditsEnv<TData, TLayer extends string, TPose> {\n nodes: ReadonlyMap<NodeId, Node<TData, TLayer, TPose>>;\n generateId(): NodeId;\n store: Pick<\n ReturnType<typeof createNodeStore<TData, TLayer, TPose>>,\n 'requireNode' | 'siblingsOf' | 'descendants' | 'removalClosure' | 'patchNodeFunctions'\n >;\n locks: Pick<LockGuard<TLayer>, 'refuse' | 'refuseLayer' | 'lifted'>;\n layers: Pick<ReturnType<typeof createLayerStack<TLayer>>, 'requireLayerIndex' | 'assertSubtreeLayer'>;\n fnFields: readonly NodeFnField[];\n /** Run a registered op without recording it. */\n runOp(kind: string, payload: unknown): void;\n recorder: Pick<Recorder, 'record' | 'edit'>;\n arrivals: Pick<ArrivalWindow<TPose>, 'noteArrival' | 'noteDeparture' | 'noteChange'>;\n}\n\nexport interface TreeEdits<TData, TLayer extends string, TPose>\n extends Pick<Scene<TData, TLayer, TPose>, 'add' | 'remove' | 'removalClosure' | 'removeMany' | 'move' | 'reorder'> {\n /** Place nodes as the document a scene starts from, or is loaded with:\n * nothing is recorded, and no lock refuses. Specs list parents before\n * children, the order `toJSON()` emits. */\n construct(specs: readonly AddNodeSpec<TData, TLayer, TPose>[]): void;\n}\n\n/** What `kit:remove` carries for the nodes `ids`, read before any of them\n * goes. Throws on an id that is not in the scene. */\nfunction removeSnapshot<TData, TLayer extends string, TPose>(\n ids: readonly NodeId[],\n removing: ReadonlySet<NodeId>,\n store: Pick<TreeEditsEnv<TData, TLayer, TPose>['store'], 'requireNode' | 'siblingsOf'>,\n fnFields: readonly NodeFnField[],\n): RemoveSnapshot<TData, TLayer, TPose> {\n const nodes: Node<TData, TLayer, TPose>[] = ids.map((nid) => {\n const n = store.requireNode(nid);\n return n.kind === 'container' ? { ...n, children: [...n.children] } : { ...n };\n });\n // The rest is reachable through a snapshotted parent's cloned `children`.\n const detached = nodes\n .filter((n) => n.parent === null || !removing.has(n.parent))\n .map((n) => ({ id: n.id, parent: n.parent, index: store.siblingsOf(n.parent).indexOf(n.id) }))\n .sort((l, r) => l.index - r.index);\n const fnKeys = nodes.flatMap((n) => {\n const keys = fnKeysOf(fnFields, n as unknown as FnBearingNode, 'opKey');\n return Object.keys(keys).length === 0 ? [] : [{ id: n.id, ...keys }];\n });\n return { nodes, detached, ...(fnKeys.length > 0 ? { fnKeys } : {}) };\n}\n\nexport function createTreeEdits<TData, TLayer extends string, TPose>(\n env: TreeEditsEnv<TData, TLayer, TPose>,\n): TreeEdits<TData, TLayer, TPose> {\n const { nodes, fnFields } = env;\n const { requireNode, siblingsOf, descendants, removalClosure, patchNodeFunctions } = env.store;\n const { refuse, refuseLayer } = env.locks;\n const { requireLayerIndex, assertSubtreeLayer } = env.layers;\n const { record, edit } = env.recorder;\n const { noteArrival, noteDeparture, noteChange } = env.arrivals;\n\n /** Check that `spec` can be placed, and answer with the `kit:add` payload\n * that places it. Throws on an id collision, an unknown or locked layer,\n * a parent that is not a container or is locked, and a layer below the\n * parent's. */\n function addPayload(spec: AddNodeSpec<TData, TLayer, TPose>) {\n const id = spec.id ?? env.generateId();\n if (nodes.has(id)) throw new SceneMembershipError(`Scene: id collision on \"${id}\"`);\n requireLayerIndex(spec.layer);\n refuseLayer(spec.layer, 'add to');\n const parent = spec.parent ?? null;\n if (parent !== null) {\n const p = requireNode(parent);\n if (p.kind !== 'container') {\n throw new Error(`Scene: parent \"${parent}\" is not a container`);\n }\n assertSubtreeLayer(spec.id, spec.layer, parent, p.layer);\n refuse(parent, 'add under');\n }\n return {\n id, kind: spec.kind, layer: spec.layer, pose: spec.pose, data: spec.data,\n parent, index: spec.index ?? siblingsOf(parent).length,\n ...(spec.dependsOn !== undefined ? { dependsOn: spec.dependsOn } : {}),\n ...statedFields(spec),\n ...fnKeysOf(fnFields, { ...spec, id, kind: spec.kind } as unknown as FnBearingNode, 'opKey'),\n };\n }\n\n function removeMany(rootIds: readonly NodeId[]): void {\n if (rootIds.length === 0) return;\n // Every id resolves against the pre-removal tree, so an id another one\n // cascades away is absorbed rather than being a second, failing removal.\n const { ids, removing } = removalClosure(rootIds);\n for (const nid of ids) refuse(nid, 'remove');\n const payload = removeSnapshot(ids, removing, env.store, fnFields);\n const { detached } = payload;\n edit('remove', detached.some((d) => d.parent !== null), () => {\n for (const d of detached) noteDeparture(d.id, d.parent, null);\n record('kit:remove', payload, 'remove');\n });\n }\n\n return {\n construct(specs) {\n env.locks.lifted(() => {\n for (const spec of specs) {\n const payload = addPayload(spec);\n env.runOp('kit:add', payload);\n patchNodeFunctions(spec, payload.id, null);\n }\n });\n },\n\n add(spec) {\n const payload = addPayload(spec);\n const label = `add ${spec.kind}`;\n return edit(label, payload.parent !== null, () => {\n noteArrival(payload.id, payload.parent, null);\n record('kit:add', payload, label);\n patchNodeFunctions(spec, payload.id, payload);\n return payload.id;\n });\n },\n\n remove: (id) => removeMany([id]),\n\n removalClosure: (rootIds) => removalClosure(rootIds).ids,\n\n removeMany,\n\n move(id, parent, index) {\n const node = requireNode(id);\n refuse(id, 'move');\n if (parent !== null) {\n refuse(parent, 'move nodes into');\n const p = requireNode(parent);\n if (p.kind !== 'container') {\n throw new Error(`Scene: parent \"${parent}\" is not a container`);\n }\n assertSubtreeLayer(id, node.layer, parent, p.layer);\n if (parent === id) throw new Error('Scene: cannot parent a node to itself');\n const desc: NodeId[] = [];\n descendants(id, desc);\n if (desc.includes(parent)) {\n throw new Error('Scene: cannot parent a node to its own descendant');\n }\n }\n const fromParent = node.parent;\n edit('move', parent !== null || fromParent !== null, () => {\n const fromIndex = siblingsOf(fromParent).indexOf(id);\n const toIndex = index ?? siblingsOf(parent).length;\n noteArrival(id, parent, fromParent);\n noteDeparture(id, fromParent, parent);\n noteChange(fromParent);\n record('kit:move', { id, fromParent, fromIndex, toParent: parent, toIndex }, 'move');\n });\n },\n\n reorder(id, index) {\n const node = requireNode(id);\n refuse(id, 'reorder');\n const parent = node.parent;\n edit('reorder', parent !== null, () => {\n noteChange(parent);\n const fromIndex = siblingsOf(parent).indexOf(id);\n record('kit:move', { id, fromParent: parent, fromIndex, toParent: parent, toIndex: index }, 'reorder');\n });\n },\n };\n}\n"],"mappings":";;;;AAyCA,SAASA,EACP,GACA,GACA,GACA,GACsC;CACtC,IAAMC,IAAsCC,EAAI,KAAK,MAAQ;EAC3D,IAAMC,IAAIC,EAAM,YAAYC,CAAG;EAC/B,OAAOF,EAAE,SAAS,cAAc;GAAE,GAAGA;GAAG,UAAU,CAAC,GAAGA,EAAE,QAAQ;EAAE,IAAI,EAAE,GAAGA,EAAE;CAC/E,CAAC,GAEKG,IAAWL,EACd,QAAQ,MAAME,EAAE,WAAW,QAAQ,CAACI,EAAS,IAAIJ,EAAE,MAAM,CAAC,CAAC,CAC3D,KAAK,OAAO;EAAE,IAAIA,EAAE;EAAI,QAAQA,EAAE;EAAQ,OAAOC,EAAM,WAAWD,EAAE,MAAM,CAAC,CAAC,QAAQA,EAAE,EAAE;CAAE,EAAE,CAAC,CAC7F,MAAM,GAAG,MAAMK,EAAE,QAAQC,EAAE,KAAK,GAC7BC,IAAST,EAAM,SAAS,MAAM;EAClC,IAAMU,IAAOC,EAASC,GAAUV,GAA+B,OAAO;EACtE,OAAO,OAAO,KAAKQ,CAAI,CAAC,CAAC,WAAW,IAAI,CAAC,IAAI,CAAC;GAAE,IAAIR,EAAE;GAAI,GAAGQ;EAAK,CAAC;CACrE,CAAC;CACD,OAAO;EAAE;EAAO;EAAU,GAAID,EAAO,SAAS,IAAI,EAAE,UAAO,IAAI,CAAC;CAAG;AACrE;AAEA,SAAgBI,EACd,GACiC;CACjC,IAAM,EAAE,UAAO,gBAAaC,GACtB,EAAE,gBAAa,eAAY,gBAAa,mBAAgB,0BAAuBA,EAAI,OACnF,EAAE,WAAQ,mBAAgBA,EAAI,OAC9B,EAAE,sBAAmB,0BAAuBA,EAAI,QAChD,EAAE,WAAQ,YAASA,EAAI,UACvB,EAAE,gBAAa,kBAAe,kBAAeA,EAAI;CAMvD,SAASC,EAAW,GAAyC;EAC3D,IAAMC,IAAKC,EAAK,MAAMH,EAAI,WAAW;EACrC,IAAId,EAAM,IAAIgB,CAAE,GAAG,MAAM,IAAIE,EAAqB,2BAA2BF,EAAG,EAAE;EAElF,AADAG,EAAkBF,EAAK,KAAK,GAC5BG,EAAYH,EAAK,OAAO,QAAQ;EAChC,IAAMI,IAASJ,EAAK,UAAU;EAC9B,IAAII,MAAW,MAAM;GACnB,IAAMC,IAAIC,EAAYF,CAAM;GAC5B,IAAIC,EAAE,SAAS,aACb,MAAU,MAAM,kBAAkBD,EAAO,qBAAqB;GAGhE,AADAG,EAAmBP,EAAK,IAAIA,EAAK,OAAOI,GAAQC,EAAE,KAAK,GACvDG,EAAOJ,GAAQ,WAAW;EAC5B;EACA,OAAO;GACL;GAAI,MAAMJ,EAAK;GAAM,OAAOA,EAAK;GAAO,MAAMA,EAAK;GAAM,MAAMA,EAAK;GACpE;GAAQ,OAAOA,EAAK,SAASS,EAAWL,CAAM,CAAC,CAAC;GAChD,GAAIJ,EAAK,cAAc,KAAA,IAA4C,CAAC,IAAjC,EAAE,WAAWA,EAAK,UAAU;GAC/D,GAAGU,EAAaV,CAAI;GACpB,GAAGN,EAASC,GAAU;IAAE,GAAGK;IAAM;IAAI,MAAMA,EAAK;GAAK,GAA+B,OAAO;EAC7F;CACF;CAEA,SAASW,EAAW,GAAkC;EACpD,IAAIC,EAAQ,WAAW,GAAG;EAG1B,IAAM,EAAE,QAAK,gBAAaC,EAAeD,CAAO;EAChD,KAAK,IAAMzB,KAAOH,GAAK,EAAOG,GAAK,QAAQ;EAC3C,IAAM2B,IAAUhC,EAAeE,GAAKK,GAAUQ,EAAI,OAAOF,CAAQ,GAC3D,EAAE,gBAAamB;EACrB,EAAK,UAAU1B,EAAS,MAAM,MAAM2B,EAAE,WAAW,IAAI,SAAS;GAC5D,KAAK,IAAMA,KAAK3B,GAAU,EAAc2B,EAAE,IAAIA,EAAE,QAAQ,IAAI;GAC5D,EAAO,cAAcD,GAAS,QAAQ;EACxC,CAAC;CACH;CAEA,OAAO;EACL,UAAU,GAAO;GACf,EAAI,MAAM,aAAa;IACrB,KAAK,IAAMd,KAAQgB,GAAO;KACxB,IAAMF,IAAUhB,EAAWE,CAAI;KAE/B,AADAH,EAAI,MAAM,WAAWiB,CAAO,GAC5BG,EAAmBjB,GAAMc,EAAQ,IAAI,IAAI;IAC3C;GACF,CAAC;EACH;EAEA,IAAI,GAAM;GACR,IAAMA,IAAUhB,EAAWE,CAAI,GACzBkB,IAAQ,OAAOlB,EAAK;GAC1B,OAAOmB,EAAKD,GAAOJ,EAAQ,WAAW,aACpCM,EAAYN,EAAQ,IAAIA,EAAQ,QAAQ,IAAI,GAC5CO,EAAO,WAAWP,GAASI,CAAK,GAChCD,EAAmBjB,GAAMc,EAAQ,IAAIA,CAAO,GACrCA,EAAQ,GAChB;EACH;EAEA,SAAS,MAAOH,EAAW,CAACZ,CAAE,CAAC;EAE/B,iBAAiB,MAAYc,EAAeD,CAAO,CAAC,CAAC;EAErD;EAEA,KAAK,GAAI,GAAQ,GAAO;GACtB,IAAMU,IAAOhB,EAAYP,CAAE;GAE3B,IADAS,EAAOT,GAAI,MAAM,GACbK,MAAW,MAAM;IACnB,EAAOA,GAAQ,iBAAiB;IAChC,IAAMC,IAAIC,EAAYF,CAAM;IAC5B,IAAIC,EAAE,SAAS,aACb,MAAU,MAAM,kBAAkBD,EAAO,qBAAqB;IAGhE,IADAG,EAAmBR,GAAIuB,EAAK,OAAOlB,GAAQC,EAAE,KAAK,GAC9CD,MAAWL,GAAI,MAAU,MAAM,uCAAuC;IAC1E,IAAMwB,IAAiB,CAAC;IAExB,IADAC,EAAYzB,GAAIwB,CAAI,GAChBA,EAAK,SAASnB,CAAM,GACtB,MAAU,MAAM,mDAAmD;GAEvE;GACA,IAAMqB,IAAaH,EAAK;GACxB,EAAK,QAAQlB,MAAW,QAAQqB,MAAe,YAAY;IACzD,IAAMC,IAAYjB,EAAWgB,CAAU,CAAC,CAAC,QAAQ1B,CAAE,GAC7C4B,IAAUC,KAASnB,EAAWL,CAAM,CAAC,CAAC;IAI5C,AAHAgB,EAAYrB,GAAIK,GAAQqB,CAAU,GAClCI,EAAc9B,GAAI0B,GAAYrB,CAAM,GACpC0B,EAAWL,CAAU,GACrBJ,EAAO,YAAY;KAAE;KAAI;KAAY;KAAW,UAAUjB;KAAQ;IAAQ,GAAG,MAAM;GACrF,CAAC;EACH;EAEA,QAAQ,GAAI,GAAO;GACjB,IAAMkB,IAAOhB,EAAYP,CAAE;GAC3B,EAAOA,GAAI,SAAS;GACpB,IAAMK,IAASkB,EAAK;GACpB,EAAK,WAAWlB,MAAW,YAAY;IACrC,EAAWA,CAAM;IACjB,IAAMsB,IAAYjB,EAAWL,CAAM,CAAC,CAAC,QAAQL,CAAE;IAC/C,EAAO,YAAY;KAAE;KAAI,YAAYK;KAAQ;KAAW,UAAUA;KAAQ,SAASwB;IAAM,GAAG,SAAS;GACvG,CAAC;EACH;CACF;AACF"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
//#region src/core/scene/treeOrder.ts
|
|
2
|
+
function e(e, t) {
|
|
3
|
+
let n = [], r = [...e].reverse();
|
|
4
|
+
for (; r.length > 0;) {
|
|
5
|
+
let e = t.get(r.pop());
|
|
6
|
+
if (e && (n.push(e), e.kind === "container")) for (let t = e.children.length - 1; t >= 0; t--) r.push(e.children[t]);
|
|
7
|
+
}
|
|
8
|
+
return n;
|
|
9
|
+
}
|
|
10
|
+
//#endregion
|
|
11
|
+
export { e as treePreorder };
|
|
12
|
+
|
|
13
|
+
//# sourceMappingURL=treeOrder.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"treeOrder.js","names":["treePreorder","out","stack","roots","node","nodes","i"],"sources":["../../../src/core/scene/treeOrder.ts"],"sourcesContent":["import type { Node, NodeId } from './types';\n\n/** Every node reachable from `roots`, in tree preorder: a parent before its\n * children, siblings in sibling order, whatever layer each sits on. */\nexport function treePreorder<TData, TLayer extends string, TPose>(\n roots: readonly NodeId[],\n nodes: ReadonlyMap<NodeId, Node<TData, TLayer, TPose>>,\n): Node<TData, TLayer, TPose>[] {\n const out: Node<TData, TLayer, TPose>[] = [];\n const stack: NodeId[] = [...roots].reverse();\n while (stack.length > 0) {\n const node = nodes.get(stack.pop()!);\n if (!node) continue;\n out.push(node);\n if (node.kind === 'container') {\n for (let i = node.children.length - 1; i >= 0; i--) stack.push(node.children[i]);\n }\n }\n return out;\n}\n"],"mappings":";AAIA,SAAgBA,EACd,GACA,GAC8B;CAC9B,IAAMC,IAAoC,CAAC,GACrCC,IAAkB,CAAC,GAAGC,CAAK,CAAC,CAAC,QAAQ;CAC3C,OAAOD,EAAM,SAAS,IAAG;EACvB,IAAME,IAAOC,EAAM,IAAIH,EAAM,IAAI,CAAE;EACnC,IAAKE,MACLH,EAAI,KAAKG,CAAI,GACTA,EAAK,SAAS,cAChB,KAAK,IAAIE,IAAIF,EAAK,SAAS,SAAS,GAAGE,KAAK,GAAG,KAAK,EAAM,KAAKF,EAAK,SAASE,EAAE;CAEnF;CACA,OAAOL;AACT"}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
//#region src/core/scene/treeReads.ts
|
|
2
|
+
function e(e) {
|
|
3
|
+
let t = /* @__PURE__ */ new WeakMap(), n = 1;
|
|
4
|
+
return {
|
|
5
|
+
get: (t) => e.get(t),
|
|
6
|
+
incarnation(r) {
|
|
7
|
+
let i = e.get(r);
|
|
8
|
+
if (!i) return;
|
|
9
|
+
let a = t.get(i);
|
|
10
|
+
return a === void 0 && (a = n++, t.set(i, a)), a;
|
|
11
|
+
},
|
|
12
|
+
childrenOf(t) {
|
|
13
|
+
let n = e.get(t);
|
|
14
|
+
return n && n.kind === "container" ? n.children : [];
|
|
15
|
+
},
|
|
16
|
+
ancestorsOf(t) {
|
|
17
|
+
let n = [], r = e.get(t)?.parent ?? null;
|
|
18
|
+
for (; r !== null;) n.push(r), r = e.get(r)?.parent ?? null;
|
|
19
|
+
return n;
|
|
20
|
+
}
|
|
21
|
+
};
|
|
22
|
+
}
|
|
23
|
+
//#endregion
|
|
24
|
+
export { e as createTreeReads };
|
|
25
|
+
|
|
26
|
+
//# sourceMappingURL=treeReads.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"treeReads.js","names":["createTreeReads","incarnations","nextIncarnation","nodes","id","node","token","out","cur"],"sources":["../../../src/core/scene/treeReads.ts"],"sourcesContent":["/** The scene's reads of one node and its place in the tree. */\nimport type { Node, NodeId, Scene } from './types';\n\nexport function createTreeReads<TData, TLayer extends string, TPose>(\n nodes: ReadonlyMap<NodeId, Node<TData, TLayer, TPose>>,\n): Pick<Scene<TData, TLayer, TPose>, 'get' | 'incarnation' | 'childrenOf' | 'ancestorsOf'> {\n // Keyed by node object: every entry into `nodes` is a fresh object and\n // every edit mutates it in place, which is exactly an incarnation's lifetime.\n const incarnations = new WeakMap<object, number>();\n let nextIncarnation = 1;\n\n return {\n get: (id) => nodes.get(id),\n\n incarnation(id) {\n const node = nodes.get(id);\n if (!node) return undefined;\n let token = incarnations.get(node);\n if (token === undefined) {\n token = nextIncarnation++;\n incarnations.set(node, token);\n }\n return token;\n },\n\n childrenOf(id) {\n const n = nodes.get(id);\n return n && n.kind === 'container' ? n.children : [];\n },\n\n ancestorsOf(id) {\n const out: NodeId[] = [];\n let cur = nodes.get(id)?.parent ?? null;\n while (cur !== null) {\n out.push(cur);\n cur = nodes.get(cur)?.parent ?? null;\n }\n return out;\n },\n };\n}\n"],"mappings":";AAGA,SAAgBA,EACd,GACyF;CAGzF,IAAMC,oBAAe,IAAI,QAAwB,GAC7CC,IAAkB;CAEtB,OAAO;EACL,MAAM,MAAOC,EAAM,IAAIC,CAAE;EAEzB,YAAY,GAAI;GACd,IAAMC,IAAOF,EAAM,IAAIC,CAAE;GACzB,IAAI,CAACC,GAAM;GACX,IAAIC,IAAQL,EAAa,IAAII,CAAI;GAKjC,OAJIC,MAAU,KAAA,MACZ,IAAQ,KACRL,EAAa,IAAII,GAAMC,CAAK,IAEvBA;EACT;EAEA,WAAW,GAAI;GACb,IAAM,IAAIH,EAAM,IAAIC,CAAE;GACtB,OAAO,KAAK,EAAE,SAAS,cAAc,EAAE,WAAW,CAAC;EACrD;EAEA,YAAY,GAAI;GACd,IAAMG,IAAgB,CAAC,GACnBC,IAAML,EAAM,IAAIC,CAAE,CAAC,EAAE,UAAU;GACnC,OAAOI,MAAQ,OAEb,AADAD,EAAI,KAAKC,CAAG,GACZ,IAAML,EAAM,IAAIK,CAAG,CAAC,EAAE,UAAU;GAElC,OAAOD;EACT;CACF;AACF"}
|