@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,39 @@
|
|
|
1
|
+
//#region src/core/scene/poseHold.ts
|
|
2
|
+
function e(e) {
|
|
3
|
+
let t = /* @__PURE__ */ new Map(), n = /* @__PURE__ */ new Set();
|
|
4
|
+
return {
|
|
5
|
+
set(r) {
|
|
6
|
+
n.clear();
|
|
7
|
+
for (let [i, a] of r) {
|
|
8
|
+
n.add(i);
|
|
9
|
+
let r = t.get(i);
|
|
10
|
+
if (r) {
|
|
11
|
+
r.pose = a;
|
|
12
|
+
continue;
|
|
13
|
+
}
|
|
14
|
+
let o = { pose: a };
|
|
15
|
+
t.set(i, o), e.set(i, o);
|
|
16
|
+
}
|
|
17
|
+
for (let [r, i] of t) n.has(r) || (t.delete(r), e.get(r) === i && e.clear(r));
|
|
18
|
+
e.commit();
|
|
19
|
+
},
|
|
20
|
+
others() {
|
|
21
|
+
let n = /* @__PURE__ */ new Map();
|
|
22
|
+
for (let r of e.ids()) {
|
|
23
|
+
let i = e.get(r);
|
|
24
|
+
i !== void 0 && i !== t.get(r) && i.pose !== void 0 && n.set(r, i.pose);
|
|
25
|
+
}
|
|
26
|
+
return n;
|
|
27
|
+
},
|
|
28
|
+
drop() {
|
|
29
|
+
if (t.size !== 0) {
|
|
30
|
+
for (let [n, r] of t) e.get(n) === r && e.clear(n);
|
|
31
|
+
t.clear(), e.commit();
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
};
|
|
35
|
+
}
|
|
36
|
+
//#endregion
|
|
37
|
+
export { e as createPoseHold };
|
|
38
|
+
|
|
39
|
+
//# sourceMappingURL=poseHold.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"poseHold.js","names":["createPoseHold","held","seen","id","pose","poses","existing","entry","table","out"],"sources":["../../../src/core/scene/poseHold.ts"],"sourcesContent":["import type { NodeId, PoseHold, PoseOverride, PoseOverrides } from './types';\n\n/** The table methods a hold writes through. */\ntype HoldTable<TPose> = Pick<PoseOverrides<TPose>, 'set' | 'get' | 'ids' | 'clear' | 'commit'>;\n\n/** Build the {@link PoseHold} a table hands out from `hold()`. */\nexport function createPoseHold<TPose>(table: HoldTable<TPose>): PoseHold<TPose> {\n /** The entry published per id, held by reference so a frame mutates it in place. */\n const held = new Map<NodeId, PoseOverride<TPose>>();\n const seen = new Set<NodeId>();\n\n return {\n set(poses) {\n seen.clear();\n for (const [id, pose] of poses) {\n seen.add(id);\n const existing = held.get(id);\n if (existing) {\n existing.pose = pose;\n continue;\n }\n const entry: PoseOverride<TPose> = { pose };\n held.set(id, entry);\n // `table.set` notifies per call, so an id is set once and mutated after.\n table.set(id, entry);\n }\n for (const [id, entry] of held) {\n if (seen.has(id)) continue;\n held.delete(id);\n if (table.get(id) === entry) table.clear(id);\n }\n table.commit();\n },\n others() {\n const out = new Map<NodeId, TPose>();\n for (const id of table.ids()) {\n const entry = table.get(id);\n if (entry === undefined || entry === held.get(id) || entry.pose === undefined) continue;\n out.set(id, entry.pose);\n }\n return out;\n },\n drop() {\n if (held.size === 0) return;\n for (const [id, entry] of held) {\n if (table.get(id) === entry) table.clear(id);\n }\n held.clear();\n table.commit();\n },\n };\n}\n"],"mappings":";AAMA,SAAgBA,EAAsB,GAA0C;CAE9E,IAAMC,oBAAO,IAAI,IAAiC,GAC5CC,oBAAO,IAAI,IAAY;CAE7B,OAAO;EACL,IAAI,GAAO;GACT,EAAK,MAAM;GACX,KAAK,IAAM,CAACC,GAAIC,MAASC,GAAO;IAC9B,EAAK,IAAIF,CAAE;IACX,IAAMG,IAAWL,EAAK,IAAIE,CAAE;IAC5B,IAAIG,GAAU;KACZ,EAAS,OAAOF;KAChB;IACF;IACA,IAAMG,IAA6B,EAAE,QAAK;IAG1C,AAFAN,EAAK,IAAIE,GAAII,CAAK,GAElBC,EAAM,IAAIL,GAAII,CAAK;GACrB;GACA,KAAK,IAAM,CAACJ,GAAII,MAAUN,GACxB,AAAIC,EAAK,IAAIC,CAAE,MACfF,EAAK,OAAOE,CAAE,GACVK,EAAM,IAAIL,CAAE,MAAMI,KAAOC,EAAM,MAAML,CAAE;GAE7C,EAAM,OAAO;EACf;EACA,SAAS;GACP,IAAMM,oBAAM,IAAI,IAAmB;GACnC,KAAK,IAAMN,KAAMK,EAAM,IAAI,GAAG;IAC5B,IAAMD,IAAQC,EAAM,IAAIL,CAAE;IAC1B,AAAII,MAAU,KAAA,KAAaA,MAAUN,EAAK,IAAIE,CAAE,KAAKI,EAAM,SAAS,KAAA,KACpEE,EAAI,IAAIN,GAAII,EAAM,IAAI;GACxB;GACA,OAAOE;EACT;EACA,OAAO;GACL,IAAIR,EAAK,SAAS,GAClB;SAAK,IAAM,CAACE,GAAII,MAAUN,GACxB,AAAIO,EAAM,IAAIL,CAAE,MAAMI,KAAOC,EAAM,MAAML,CAAE;IAG7C,AADAF,EAAK,MAAM,GACXO,EAAM,OAAO;GAHgC;EAI/C;CACF;AACF"}
|
|
@@ -1,72 +1,76 @@
|
|
|
1
1
|
import { dropPoseKeyedMemoSlots as e } from "./nodeMemo.js";
|
|
2
|
-
import {
|
|
2
|
+
import { createPoseHold as t } from "./poseHold.js";
|
|
3
|
+
import { createEmitter as n } from "@weasel-js/registry";
|
|
4
|
+
import { kit as r, last as i, mix as a, mul as o, patch as s } from "@msb235/blits";
|
|
3
5
|
//#region src/core/scene/poseOverrides.ts
|
|
4
|
-
var
|
|
5
|
-
function
|
|
6
|
-
let
|
|
7
|
-
pose:
|
|
8
|
-
alpha:
|
|
6
|
+
var c = Object.freeze({});
|
|
7
|
+
function l(l, u) {
|
|
8
|
+
let d = /* @__PURE__ */ new Map(), f = n(), p = 0, m = a(r({
|
|
9
|
+
pose: i(),
|
|
10
|
+
alpha: o(),
|
|
11
|
+
path: i()
|
|
9
12
|
}));
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
13
|
+
m.cue({ patch: s(0, (e, t) => d.get(t) ?? c, { writes: [
|
|
14
|
+
"pose",
|
|
15
|
+
"alpha",
|
|
16
|
+
"path"
|
|
17
|
+
] }) });
|
|
18
|
+
let h = 0;
|
|
19
|
+
m.sync(h);
|
|
20
|
+
let g = /* @__PURE__ */ new Map();
|
|
21
|
+
function _(t) {
|
|
22
|
+
let n = l(t);
|
|
23
|
+
n && e(n), u?.(t);
|
|
17
24
|
}
|
|
18
|
-
function
|
|
19
|
-
|
|
20
|
-
for (let e of u) e();
|
|
25
|
+
function v() {
|
|
26
|
+
p++, m.sync(++h), f.emit();
|
|
21
27
|
}
|
|
22
|
-
function
|
|
23
|
-
|
|
28
|
+
function y(e) {
|
|
29
|
+
g.delete(e), m.drop(e);
|
|
24
30
|
}
|
|
25
|
-
|
|
31
|
+
let b = {
|
|
26
32
|
set(e, t) {
|
|
27
|
-
|
|
33
|
+
d.set(e, t), _(e), v();
|
|
28
34
|
},
|
|
29
35
|
get(e) {
|
|
30
|
-
return
|
|
36
|
+
return d.get(e);
|
|
31
37
|
},
|
|
32
38
|
read(e) {
|
|
33
|
-
if (!
|
|
34
|
-
let t =
|
|
39
|
+
if (!d.has(e)) return;
|
|
40
|
+
let t = g.get(e);
|
|
35
41
|
return t === void 0 && (t = {
|
|
36
42
|
out: {},
|
|
37
43
|
at: -1
|
|
38
|
-
},
|
|
44
|
+
}, g.set(e, t)), t.at !== p && (m.probe(e, t.out), t.at = p), t.out;
|
|
39
45
|
},
|
|
40
46
|
has(e) {
|
|
41
|
-
return
|
|
47
|
+
return d.has(e);
|
|
42
48
|
},
|
|
43
49
|
ids() {
|
|
44
|
-
return [...
|
|
50
|
+
return [...d.keys()];
|
|
45
51
|
},
|
|
46
52
|
clear(e) {
|
|
47
|
-
|
|
53
|
+
d.delete(e) && (y(e), _(e), v());
|
|
48
54
|
},
|
|
49
55
|
clearAll() {
|
|
50
|
-
if (
|
|
51
|
-
for (let e of
|
|
52
|
-
|
|
56
|
+
if (d.size !== 0) {
|
|
57
|
+
for (let e of d.keys()) y(e), _(e);
|
|
58
|
+
d.clear(), v();
|
|
53
59
|
}
|
|
54
60
|
},
|
|
55
61
|
commit() {
|
|
56
|
-
for (let e of
|
|
57
|
-
|
|
58
|
-
},
|
|
59
|
-
subscribe(e) {
|
|
60
|
-
return u.add(e), () => {
|
|
61
|
-
u.delete(e);
|
|
62
|
-
};
|
|
62
|
+
for (let e of d.keys()) _(e);
|
|
63
|
+
v();
|
|
63
64
|
},
|
|
65
|
+
subscribe: f.subscribe,
|
|
64
66
|
getGeneration() {
|
|
65
|
-
return
|
|
66
|
-
}
|
|
67
|
+
return p;
|
|
68
|
+
},
|
|
69
|
+
hold: () => t(b)
|
|
67
70
|
};
|
|
71
|
+
return b;
|
|
68
72
|
}
|
|
69
73
|
//#endregion
|
|
70
|
-
export {
|
|
74
|
+
export { l as createPoseOverrides };
|
|
71
75
|
|
|
72
76
|
//# sourceMappingURL=poseOverrides.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"poseOverrides.js","names":["NOTHING","createPoseOverrides","entries","listeners","generation","folded","mix","kit","last","mul","patch","id","clock","reads","invalidate","node","getNode","dropPoseKeyedMemoSlots","onInvalidate","published","
|
|
1
|
+
{"version":3,"file":"poseOverrides.js","names":["NOTHING","createPoseOverrides","entries","listeners","createEmitter","generation","folded","mix","kit","last","mul","patch","id","clock","reads","invalidate","node","getNode","dropPoseKeyedMemoSlots","onInvalidate","published","forget","table","entry","held","createPoseHold"],"sources":["../../../src/core/scene/poseOverrides.ts"],"sourcesContent":["import type { Path } from '@weasel-js/geom';\nimport { createEmitter } from '@weasel-js/registry';\nimport { kit, last, mix, mul, patch } from '@msb235/blits';\nimport { dropPoseKeyedMemoSlots } from './nodeMemo';\nimport { createPoseHold } from './poseHold';\nimport type { NodeId, PoseOverride, PoseOverrides } from './types';\n\n/** What the table's voice says about a node it holds no entry for. */\nconst NOTHING: PoseOverride<never> = Object.freeze({});\n\n/**\n * Build a {@link PoseOverrides} map.\n *\n * `getNode` resolves an id to the node object the painter memo is keyed on.\n * `onInvalidate` lets the scene invalidate derived nodes from the same\n * chokepoint.\n *\n * What `read` answers is a blits mix folded per node. The entries a writer\n * `set`s are one voice on it, and a node holding no entry is never probed.\n */\nexport function createPoseOverrides<TPose>(\n getNode: (id: NodeId) => { data?: unknown } | undefined,\n onInvalidate?: (id: NodeId) => void,\n): PoseOverrides<TPose> {\n const entries = new Map<NodeId, PoseOverride<TPose>>();\n const listeners = createEmitter();\n let generation = 0;\n\n const folded = mix<NodeId, PoseOverride<TPose>>(\n kit<PoseOverride<TPose>>({ pose: last<NonNullable<TPose>>(), alpha: mul(), path: last<Path>() }),\n );\n folded.cue({\n patch: patch<NodeId, PoseOverride<TPose>>(\n 0,\n (_phase, id) => entries.get(id) ?? (NOTHING as PoseOverride<TPose>),\n { writes: ['pose', 'alpha', 'path'] },\n ),\n });\n // Mix time only has to move between publishes, so a probe after one never\n // hands back the delta a probe before it cached.\n let clock = 0;\n folded.sync(clock);\n\n /** Per node: the object `read` folds into and returns, and the generation\n * it was last folded at. */\n const reads = new Map<NodeId, { out: PoseOverride<TPose>; at: number }>();\n\n function invalidate(id: NodeId): void {\n const node = getNode(id);\n if (node) dropPoseKeyedMemoSlots(node);\n onInvalidate?.(id);\n }\n\n function published(): void {\n generation++;\n folded.sync(++clock);\n listeners.emit();\n }\n\n function forget(id: NodeId): void {\n reads.delete(id);\n folded.drop(id);\n }\n\n const table: PoseOverrides<TPose> = {\n set(id, entry) {\n entries.set(id, entry);\n invalidate(id);\n published();\n },\n get(id) {\n return entries.get(id);\n },\n read(id) {\n if (!entries.has(id)) return undefined;\n let held = reads.get(id);\n if (held === undefined) {\n held = { out: {}, at: -1 };\n reads.set(id, held);\n }\n if (held.at !== generation) {\n folded.probe(id, held.out);\n held.at = generation;\n }\n return held.out;\n },\n has(id) {\n return entries.has(id);\n },\n ids() {\n return [...entries.keys()];\n },\n clear(id) {\n if (!entries.delete(id)) return;\n forget(id);\n invalidate(id);\n published();\n },\n clearAll() {\n if (entries.size === 0) return;\n for (const id of entries.keys()) {\n forget(id);\n invalidate(id);\n }\n entries.clear();\n published();\n },\n commit() {\n for (const id of entries.keys()) invalidate(id);\n published();\n },\n subscribe: listeners.subscribe,\n getGeneration() {\n return generation;\n },\n hold: () => createPoseHold(table),\n };\n return table;\n}\n"],"mappings":";;;;;AAQA,IAAMA,IAA+B,OAAO,OAAO,CAAC,CAAC;AAYrD,SAAgBC,EACd,GACA,GACsB;CACtB,IAAMC,oBAAU,IAAI,IAAiC,GAC/CC,IAAYC,EAAc,GAC5BC,IAAa,GAEXC,IAASC,EACbC,EAAyB;EAAE,MAAMC,EAAyB;EAAG,OAAOC,EAAI;EAAG,MAAMD,EAAW;CAAE,CAAC,CACjG;CACA,EAAO,IAAI,EACT,OAAOE,EACL,IACC,GAAQ,MAAOT,EAAQ,IAAIU,CAAE,KAAMZ,GACpC,EAAE,QAAQ;EAAC;EAAQ;EAAS;CAAM,EAAE,CACtC,EACF,CAAC;CAGD,IAAIa,IAAQ;CACZ,EAAO,KAAKA,CAAK;CAIjB,IAAMC,oBAAQ,IAAI,IAAsD;CAExE,SAASC,EAAW,GAAkB;EACpC,IAAMC,IAAOC,EAAQL,CAAE;EAEvB,AADII,KAAME,EAAuBF,CAAI,GACrCG,IAAeP,CAAE;CACnB;CAEA,SAASQ,IAAkB;EAGzB,AAFA,KACAd,EAAO,KAAK,EAAEO,CAAK,GACnBV,EAAU,KAAK;CACjB;CAEA,SAASkB,EAAO,GAAkB;EAEhC,AADAP,EAAM,OAAOF,CAAE,GACfN,EAAO,KAAKM,CAAE;CAChB;CAEA,IAAMU,IAA8B;EAClC,IAAI,GAAI,GAAO;GAGb,AAFApB,EAAQ,IAAIU,GAAIW,CAAK,GACrBR,EAAWH,CAAE,GACbQ,EAAU;EACZ;EACA,IAAI,GAAI;GACN,OAAOlB,EAAQ,IAAIU,CAAE;EACvB;EACA,KAAK,GAAI;GACP,IAAI,CAACV,EAAQ,IAAIU,CAAE,GAAG;GACtB,IAAIY,IAAOV,EAAM,IAAIF,CAAE;GASvB,OARIY,MAAS,KAAA,MACX,IAAO;IAAE,KAAK,CAAC;IAAG,IAAI;GAAG,GACzBV,EAAM,IAAIF,GAAIY,CAAI,IAEhBA,EAAK,OAAOnB,MACdC,EAAO,MAAMM,GAAIY,EAAK,GAAG,GACzB,EAAK,KAAKnB,IAELmB,EAAK;EACd;EACA,IAAI,GAAI;GACN,OAAOtB,EAAQ,IAAIU,CAAE;EACvB;EACA,MAAM;GACJ,OAAO,CAAC,GAAGV,EAAQ,KAAK,CAAC;EAC3B;EACA,MAAM,GAAI;GACR,AAAKA,EAAQ,OAAOU,CAAE,MACtBS,EAAOT,CAAE,GACTG,EAAWH,CAAE,GACbQ,EAAU;EACZ;EACA,WAAW;GACT,IAAIlB,EAAQ,SAAS,GACrB;SAAK,IAAMU,KAAMV,EAAQ,KAAK,GAE5B,AADAmB,EAAOT,CAAE,GACTG,EAAWH,CAAE;IAGf,AADAV,EAAQ,MAAM,GACdkB,EAAU;GAFV;EAGF;EACA,SAAS;GACP,KAAK,IAAMR,KAAMV,EAAQ,KAAK,GAAG,EAAWU,CAAE;GAC9C,EAAU;EACZ;EACA,WAAWT,EAAU;EACrB,gBAAgB;GACd,OAAOE;EACT;EACA,YAAYoB,EAAeH,CAAK;CAClC;CACA,OAAOA;AACT"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"poseSnapshot.js","names":["DEPTH","isTypedArray","v","snapshotPose","depth","value","isPlainObject","out","key","field","samePoseValue","snapshot","proto","isPlainPrototype","a","b","count","left","right","_key","i"],"sources":["../../../src/core/scene/poseSnapshot.ts"],"sourcesContent":["import { isPlainObject, isPlainPrototype } from '../isPlainObject';\n/**\n * Comparing a pose against what it was, by value.\n *\n * For readers that cannot be told when a pose moved
|
|
1
|
+
{"version":3,"file":"poseSnapshot.js","names":["DEPTH","isTypedArray","v","snapshotPose","depth","value","isPlainObject","out","key","field","samePoseValue","snapshot","proto","isPlainPrototype","a","b","count","left","right","_key","i"],"sources":["../../../src/core/scene/poseSnapshot.ts"],"sourcesContent":["import { isPlainObject, isPlainPrototype } from '../isPlainObject';\n/**\n * Comparing a pose against what it was, by value.\n *\n * For readers that cannot be told when a pose moved: a pose override mutates\n * its buffer in place, so comparing references sees nothing.\n *\n * `TPose` is opaque to the kit, so both sides walk plain objects, arrays, and\n * typed arrays, and fall back to reference identity for anything else (a\n * class instance, a `Map`). A pose of that shape mutated in place still needs\n * the scene's pushed invalidation.\n */\n\n/** How deep the walk goes before it stops copying and keeps the reference.\n * A pose is a handful of numbers; nothing legitimate is nested this far. */\nconst DEPTH = 4;\n\nfunction isTypedArray(v: unknown): v is ArrayLike<number> & { slice(): unknown } {\n return ArrayBuffer.isView(v) && !(v instanceof DataView);\n}\n\n/** A copy of `value` that later mutation of `value` cannot reach. */\nexport function snapshotPose<T>(value: T, depth = DEPTH): T {\n if (depth <= 0) return value;\n if (Array.isArray(value)) {\n return value.map((v) => snapshotPose(v, depth - 1)) as unknown as T;\n }\n if (isTypedArray(value)) return value.slice() as unknown as T;\n if (isPlainObject(value)) {\n // Spread first, then replace only the fields that need a copy of their\n // own: a built-up object lands in a different hidden class than the pose\n // it mirrors, which costs the per-frame compare several times over.\n const out: Record<string, unknown> = { ...value };\n for (const key in out) {\n const field = out[key];\n if (typeof field === 'object' && field !== null) out[key] = snapshotPose(field, depth - 1);\n }\n return out as unknown as T;\n }\n return value;\n}\n\n/** Whether `value` still holds what {@link snapshotPose} recorded. Allocates\n * nothing, and takes the plain-object branch first: this runs per dependency\n * per frame, and a pose is an object of numbers nearly every time. */\nexport function samePoseValue(snapshot: unknown, value: unknown, depth = DEPTH): boolean {\n if (snapshot === value) return true;\n if (typeof snapshot !== 'object' || snapshot === null\n || typeof value !== 'object' || value === null) return Object.is(snapshot, value);\n if (depth <= 0) return false;\n\n const proto = Object.getPrototypeOf(snapshot) as object | null;\n if (isPlainPrototype(proto)) {\n if (!isPlainPrototype(Object.getPrototypeOf(value) as object | null)) return false;\n const a = snapshot as Record<string, unknown>;\n const b = value as Record<string, unknown>;\n let count = 0;\n for (const key in a) {\n count++;\n const left = a[key];\n const right = b[key];\n if (left === right) {\n if (right === undefined && !(key in b)) return false;\n continue;\n }\n if (!samePoseValue(left, right, depth - 1)) return false;\n }\n // A field `value` gained is a change too, and the key counts are what say so.\n for (const _key in b) if (--count < 0) return false;\n return true;\n }\n\n if (Array.isArray(snapshot) || isTypedArray(snapshot)) {\n const a = snapshot as ArrayLike<unknown>;\n if (!(Array.isArray(value) || isTypedArray(value))) return false;\n const b = value as ArrayLike<unknown>;\n if (a.length !== b.length) return false;\n for (let i = 0; i < a.length; i++) {\n if (!samePoseValue(a[i], b[i], depth - 1)) return false;\n }\n return true;\n }\n return false;\n}\n"],"mappings":";;AAeA,IAAMA,IAAQ;AAEd,SAASC,EAAa,GAA2D;CAC/E,OAAO,YAAY,OAAOC,CAAC,KAAK,EAAEA,aAAa;AACjD;AAGA,SAAgBC,EAAgB,GAAU,IAAQH,GAAU;CAC1D,IAAII,KAAS,GAAG,OAAOC;CACvB,IAAI,MAAM,QAAQA,CAAK,GACrB,OAAOA,EAAM,KAAK,MAAMF,EAAaD,GAAGE,IAAQ,CAAC,CAAC;CAEpD,IAAIH,EAAaI,CAAK,GAAG,OAAOA,EAAM,MAAM;CAC5C,IAAIC,EAAcD,CAAK,GAAG;EAIxB,IAAME,IAA+B,EAAE,GAAGF,EAAM;EAChD,KAAK,IAAMG,KAAOD,GAAK;GACrB,IAAME,IAAQF,EAAIC;GAClB,AAAI,OAAOC,KAAU,YAAYA,MAAgB,EAAID,KAAOL,EAAaM,GAAOL,IAAQ,CAAC;EAC3F;EACA,OAAOG;CACT;CACA,OAAOF;AACT;AAKA,SAAgBK,EAAc,GAAmB,GAAgB,IAAQV,GAAgB;CACvF,IAAIW,MAAaN,GAAO,OAAO;CAC/B,IAAI,OAAOM,KAAa,aAAYA,KAC/B,OAAON,KAAU,aAAYA,GAAgB,OAAO,OAAO,GAAGM,GAAUN,CAAK;CAClF,IAAID,KAAS,GAAG,OAAO;CAEvB,IAAMQ,IAAQ,OAAO,eAAeD,CAAQ;CAC5C,IAAIE,EAAiBD,CAAK,GAAG;EAC3B,IAAI,CAACC,EAAiB,OAAO,eAAeR,CAAK,CAAkB,GAAG,OAAO;EAC7E,IAAMS,IAAIH,GACJI,IAAIV,GACNW,IAAQ;EACZ,KAAK,IAAMR,KAAOM,GAAG;GACnB;GACA,IAAMG,IAAOH,EAAEN,IACTU,IAAQH,EAAEP;GAChB,IAAIS,MAASC,GAAO;IAClB,IAAIA,MAAU,KAAA,KAAa,EAAEV,KAAOO,IAAI,OAAO;IAC/C;GACF;GACA,IAAI,CAACL,EAAcO,GAAMC,GAAOd,IAAQ,CAAC,GAAG,OAAO;EACrD;EAEA,KAAK,IAAMe,KAAQJ,GAAG,IAAI,EAAEC,IAAQ,GAAG,OAAO;EAC9C,OAAO;CACT;CAEA,IAAI,MAAM,QAAQL,CAAQ,KAAKV,EAAaU,CAAQ,GAAG;EACrD,IAAMG,IAAIH;EACV,IAAI,EAAE,MAAM,QAAQN,CAAK,KAAKJ,EAAaI,CAAK,IAAI,OAAO;EAC3D,IAAMU,IAAIV;EACV,IAAIS,EAAE,WAAWC,EAAE,QAAQ,OAAO;EAClC,KAAK,IAAIK,IAAI,GAAGA,IAAIN,EAAE,QAAQ,KAC5B,IAAI,CAACJ,EAAcI,EAAEM,IAAIL,EAAEK,IAAIhB,IAAQ,CAAC,GAAG,OAAO;EAEpD,OAAO;CACT;CACA,OAAO;AACT"}
|
|
@@ -6,7 +6,7 @@ function t(e, t, a) {
|
|
|
6
6
|
let n = s.get(e);
|
|
7
7
|
(n === void 0 || r(t, n)) && c.push(e);
|
|
8
8
|
}
|
|
9
|
-
let l = e.removalClosure(c.filter((t) => e.get(t) !== void 0)), u = new Set(l);
|
|
9
|
+
let l = e.removalClosure(c.filter((t) => e.get(t) !== void 0)), u = new Set(l), d = e.getSelection();
|
|
10
10
|
e.untracked(() => {
|
|
11
11
|
e.removeMany(l);
|
|
12
12
|
for (let t of a) {
|
|
@@ -16,8 +16,9 @@ function t(e, t, a) {
|
|
|
16
16
|
continue;
|
|
17
17
|
}
|
|
18
18
|
let a = t.parent ?? null;
|
|
19
|
-
a !== (r.parent ?? null) && e.move(n, a), t.layer !== r.layer && e.setLayer(n, t.layer), i(t.data, r.data) || e.update(n, { data: t.data }), i(t.dependsOn, r.dependsOn) || e.setDependsOn(n, t.dependsOn), i(t.pose, r.pose) || e.setPose(n, t.pose);
|
|
19
|
+
a !== (r.parent ?? null) && e.move(n, a), t.layer !== r.layer && e.setLayer(n, t.layer), i(t.data, r.data) || e.update(n, { data: t.data }), i(t.dependsOn, r.dependsOn) || e.setDependsOn(n, t.dependsOn), t.kind === "container" && !i(t.units, r.units) && e.setUnits(n, t.units ?? null), i(t.pose, r.pose) || e.setPose(n, t.pose);
|
|
20
20
|
}
|
|
21
|
+
d.some((e) => u.has(e)) && e.setSelection(d.filter((t) => e.get(t) !== void 0));
|
|
21
22
|
});
|
|
22
23
|
}
|
|
23
24
|
function n(e) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"reconcileSpecs.js","names":["reconcileSpecs","prevById","byId","prev","nextById","next","gone","id","before","after","needsReplace","removing","scene","removed","spec","parent","same","out","specs","a","b","v","i","isPlainObject","ka","k"],"sources":["../../../src/core/scene/reconcileSpecs.ts"],"sourcesContent":["import { isPlainObject } from '../isPlainObject';\nimport type { AddNodeSpec, NodeId, Scene } from './types';\n\n/**\n * Bring `scene` from `prev` to `next`: add what `next` gained, remove what it\n * lost, and write only the fields that changed between the two.\n *\n * The diff is spec against spec, not spec against scene, so whatever the scene\n * did since `prev` — a node dragged, an edge authored by a gesture — survives\n * unless `next` changes that same field. The writes are untracked: syncing to\n * outside data is not an undo step.\n *\n * Every spec needs an `id`, and `next` must be in an order `createScene` would\n * accept — parents and dependencies before what names them. A node whose\n * `kind` or derive functions change is removed and added again, along with\n * everything its removal takes with it.\n */\nexport function reconcileSpecs<TData, TLayer extends string, TPose>(\n scene: Scene<TData, TLayer, TPose>,\n prev: readonly AddNodeSpec<TData, TLayer, TPose>[],\n next: readonly AddNodeSpec<TData, TLayer, TPose>[],\n): void {\n const prevById = byId(prev);\n const nextById = byId(next);\n const gone: NodeId[] = [];\n for (const [id, before] of prevById) {\n const after = nextById.get(id);\n if (after === undefined || needsReplace(before, after)) gone.push(id);\n }\n const removing = scene.removalClosure(gone.filter((id) => scene.get(id) !== undefined));\n const removed = new Set(removing);\n\n scene.untracked(() => {\n scene.removeMany(removing);\n for (const spec of next) {\n const id = spec.id!;\n const before = prevById.get(id);\n if (scene.get(id) === undefined || before === undefined || removed.has(id)) {\n scene.add(spec);\n continue;\n }\n const parent = spec.parent ?? null;\n if (parent !== (before.parent ?? null)) scene.move(id, parent);\n if (spec.layer !== before.layer) scene.setLayer(id, spec.layer);\n if (!same(spec.data, before.data)) scene.update(id, { data: spec.data });\n if (!same(spec.dependsOn, before.dependsOn)) scene.setDependsOn(id, spec.dependsOn);\n if (!same(spec.pose, before.pose)) scene.setPose(id, spec.pose);\n }\n });\n}\n\nfunction byId<T extends { id?: NodeId }>(specs: readonly T[]): Map<NodeId, T> {\n const out = new Map<NodeId, T>();\n for (const spec of specs) {\n if (spec.id === undefined) throw new Error('reconcileSpecs: every spec needs an id');\n if (out.has(spec.id)) throw new Error(`reconcileSpecs: id \"${spec.id}\" appears more than once`);\n out.set(spec.id, spec);\n }\n return out;\n}\n\nfunction needsReplace<TData, TLayer extends string, TPose>(\n a: AddNodeSpec<TData, TLayer, TPose>,\n b: AddNodeSpec<TData, TLayer, TPose>,\n): boolean {\n return a.kind !== b.kind\n || a.pickable !== b.pickable\n || a.derivePath !== b.derivePath\n || a.derivePose !== b.derivePose\n || a.clipFromPose !== b.clipFromPose\n || a.layout !== b.layout;\n}\n\n/** Structural equality over plain objects and arrays; anything else by identity. */\nfunction same(a: unknown, b: unknown): boolean {\n if (Object.is(a, b)) return true;\n if (Array.isArray(a) && Array.isArray(b)) {\n return a.length === b.length && a.every((v, i) => same(v, b[i]));\n }\n if (isPlainObject(a) && isPlainObject(b)) {\n const ka = Object.keys(a);\n return ka.length === Object.keys(b).length && ka.every((k) => k in b && same(a[k], b[k]));\n }\n return false;\n}\n"],"mappings":";;AAiBA,SAAgBA,EACd,GACA,GACA,GACM;CACN,IAAMC,IAAWC,EAAKC,CAAI,GACpBC,IAAWF,EAAKG,CAAI,GACpBC,IAAiB,CAAC;CACxB,KAAK,IAAM,CAACC,GAAIC,MAAWP,GAAU;EACnC,IAAMQ,IAAQL,EAAS,IAAIG,CAAE;EAC7B,CAAIE,MAAU,KAAA,KAAaC,EAAaF,GAAQC,CAAK,MAAGH,EAAK,KAAKC,CAAE;CACtE;CACA,IAAMI,IAAWC,EAAM,eAAeN,EAAK,QAAQ,MAAOM,EAAM,IAAIL,CAAE,MAAM,KAAA,CAAS,CAAC,GAChFM,IAAU,IAAI,IAAIF,CAAQ;
|
|
1
|
+
{"version":3,"file":"reconcileSpecs.js","names":["reconcileSpecs","prevById","byId","prev","nextById","next","gone","id","before","after","needsReplace","removing","scene","removed","selected","spec","parent","same","out","specs","a","b","v","i","isPlainObject","ka","k"],"sources":["../../../src/core/scene/reconcileSpecs.ts"],"sourcesContent":["import { isPlainObject } from '../isPlainObject';\nimport type { AddNodeSpec, NodeId, Scene } from './types';\n\n/**\n * Bring `scene` from `prev` to `next`: add what `next` gained, remove what it\n * lost, and write only the fields that changed between the two.\n *\n * The diff is spec against spec, not spec against scene, so whatever the scene\n * did since `prev` — a node dragged, an edge authored by a gesture — survives\n * unless `next` changes that same field. The writes are untracked: syncing to\n * outside data is not an undo step.\n *\n * Every spec needs an `id`, and `next` must be in an order `createScene` would\n * accept — parents and dependencies before what names them. A node whose\n * `kind` or derive functions change is removed and added again, along with\n * everything its removal takes with it, and stays selected if it was.\n */\nexport function reconcileSpecs<TData, TLayer extends string, TPose>(\n scene: Scene<TData, TLayer, TPose>,\n prev: readonly AddNodeSpec<TData, TLayer, TPose>[],\n next: readonly AddNodeSpec<TData, TLayer, TPose>[],\n): void {\n const prevById = byId(prev);\n const nextById = byId(next);\n const gone: NodeId[] = [];\n for (const [id, before] of prevById) {\n const after = nextById.get(id);\n if (after === undefined || needsReplace(before, after)) gone.push(id);\n }\n const removing = scene.removalClosure(gone.filter((id) => scene.get(id) !== undefined));\n const removed = new Set(removing);\n\n // A replaced node is the same node to whoever selected it.\n const selected = scene.getSelection();\n\n scene.untracked(() => {\n scene.removeMany(removing);\n for (const spec of next) {\n const id = spec.id!;\n const before = prevById.get(id);\n if (scene.get(id) === undefined || before === undefined || removed.has(id)) {\n scene.add(spec);\n continue;\n }\n const parent = spec.parent ?? null;\n if (parent !== (before.parent ?? null)) scene.move(id, parent);\n if (spec.layer !== before.layer) scene.setLayer(id, spec.layer);\n if (!same(spec.data, before.data)) scene.update(id, { data: spec.data });\n if (!same(spec.dependsOn, before.dependsOn)) scene.setDependsOn(id, spec.dependsOn);\n if (spec.kind === 'container' && !same(spec.units, before.units)) scene.setUnits(id, spec.units ?? null);\n if (!same(spec.pose, before.pose)) scene.setPose(id, spec.pose);\n }\n if (selected.some((id) => removed.has(id))) {\n scene.setSelection(selected.filter((id) => scene.get(id) !== undefined));\n }\n });\n}\n\nfunction byId<T extends { id?: NodeId }>(specs: readonly T[]): Map<NodeId, T> {\n const out = new Map<NodeId, T>();\n for (const spec of specs) {\n if (spec.id === undefined) throw new Error('reconcileSpecs: every spec needs an id');\n if (out.has(spec.id)) throw new Error(`reconcileSpecs: id \"${spec.id}\" appears more than once`);\n out.set(spec.id, spec);\n }\n return out;\n}\n\nfunction needsReplace<TData, TLayer extends string, TPose>(\n a: AddNodeSpec<TData, TLayer, TPose>,\n b: AddNodeSpec<TData, TLayer, TPose>,\n): boolean {\n return a.kind !== b.kind\n || a.pickable !== b.pickable\n || a.derivePath !== b.derivePath\n || a.derivePose !== b.derivePose\n || a.clipFromPose !== b.clipFromPose\n || a.layout !== b.layout;\n}\n\n/** Structural equality over plain objects and arrays; anything else by identity. */\nfunction same(a: unknown, b: unknown): boolean {\n if (Object.is(a, b)) return true;\n if (Array.isArray(a) && Array.isArray(b)) {\n return a.length === b.length && a.every((v, i) => same(v, b[i]));\n }\n if (isPlainObject(a) && isPlainObject(b)) {\n const ka = Object.keys(a);\n return ka.length === Object.keys(b).length && ka.every((k) => k in b && same(a[k], b[k]));\n }\n return false;\n}\n"],"mappings":"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"}
|
|
@@ -0,0 +1,86 @@
|
|
|
1
|
+
import { bindOpToAdapter as e } from "./boundOps.js";
|
|
2
|
+
//#region src/core/scene/recorder.ts
|
|
3
|
+
function t(e) {
|
|
4
|
+
for (let t = e.length - 1; t >= 0; t--) try {
|
|
5
|
+
e[t].invert().apply(void 0);
|
|
6
|
+
} catch {}
|
|
7
|
+
}
|
|
8
|
+
function n(n) {
|
|
9
|
+
let { notifier: r, mode: i, engine: a, log: o, arrivals: s } = n, c = null, l = null;
|
|
10
|
+
function u(e, t) {
|
|
11
|
+
let r = e();
|
|
12
|
+
if (t) for (let e of s.settle()) n.writePose(e.id, e.to);
|
|
13
|
+
return r;
|
|
14
|
+
}
|
|
15
|
+
function d(e, l) {
|
|
16
|
+
let d = !i.open();
|
|
17
|
+
d && (c = {
|
|
18
|
+
label: e,
|
|
19
|
+
ops: [],
|
|
20
|
+
outer: [],
|
|
21
|
+
selectionBefore: n.selection()
|
|
22
|
+
});
|
|
23
|
+
let f = d && s.open(!0);
|
|
24
|
+
return r.deferred(() => i.during("batch", () => {
|
|
25
|
+
if (!d) return l();
|
|
26
|
+
try {
|
|
27
|
+
let e = o.atomically(() => u(l, f), () => (c?.ops.length ?? 0) > 0);
|
|
28
|
+
return f && s.emitReflow(), e;
|
|
29
|
+
} catch (e) {
|
|
30
|
+
throw t(c?.outer ?? []), c = null, e;
|
|
31
|
+
}
|
|
32
|
+
}), () => {
|
|
33
|
+
if (f && s.abandon(), !d || !c) return;
|
|
34
|
+
let e = c;
|
|
35
|
+
c = null, e.ops.length > 0 && a.recordEntry(e.ops, e.label, { selectionBefore: e.selectionBefore });
|
|
36
|
+
});
|
|
37
|
+
}
|
|
38
|
+
return {
|
|
39
|
+
record(e, t, s) {
|
|
40
|
+
i.records() && !c ? i.during("own", () => a.applyOps([n.makeOp(e, t)], s)) : (n.runOp(e, t), o.logApplied(e, t), i.records() ? c.ops.push(n.makeOp(e, t)) : i.untracked() || l?.push(n.makeOp(e, t))), r.notify();
|
|
41
|
+
},
|
|
42
|
+
edit: (e, t, n) => t && s.bareLayoutEdit() ? d(e, n) : n(),
|
|
43
|
+
batch: d,
|
|
44
|
+
untracked(e) {
|
|
45
|
+
let t = r.version(), n = s.open(!0);
|
|
46
|
+
return r.deferred(() => i.during("untracked", () => {
|
|
47
|
+
let t = o.atomically(() => u(e, n), () => !1);
|
|
48
|
+
return n && s.emitReflow(), t;
|
|
49
|
+
}), () => {
|
|
50
|
+
n && s.abandon(), r.version() !== t && a.seal();
|
|
51
|
+
});
|
|
52
|
+
},
|
|
53
|
+
joins: () => i.records() && c !== null,
|
|
54
|
+
join(n, r) {
|
|
55
|
+
let i = c, a = i.ops.length, s = [];
|
|
56
|
+
try {
|
|
57
|
+
o.atomically(() => {
|
|
58
|
+
for (let t of n) {
|
|
59
|
+
let n = i.ops.length, a = t.apply(r);
|
|
60
|
+
i.ops.length > n || a === !1 || a === "noop" || (s.push(e(t, r)), i.ops.push(s[s.length - 1]));
|
|
61
|
+
}
|
|
62
|
+
}, () => !1);
|
|
63
|
+
} catch (e) {
|
|
64
|
+
throw t(s), i.ops.length = a, e;
|
|
65
|
+
}
|
|
66
|
+
i.outer.push(...s);
|
|
67
|
+
},
|
|
68
|
+
capturing(e) {
|
|
69
|
+
let t = l, n = [];
|
|
70
|
+
l = n;
|
|
71
|
+
try {
|
|
72
|
+
return {
|
|
73
|
+
result: e(),
|
|
74
|
+
ops: n
|
|
75
|
+
};
|
|
76
|
+
} finally {
|
|
77
|
+
l = t;
|
|
78
|
+
}
|
|
79
|
+
},
|
|
80
|
+
engineDriven: (e) => i.during("engine", () => r.muted(e))
|
|
81
|
+
};
|
|
82
|
+
}
|
|
83
|
+
//#endregion
|
|
84
|
+
export { n as createRecorder };
|
|
85
|
+
|
|
86
|
+
//# sourceMappingURL=recorder.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"recorder.js","names":["unwind","i","outer","createRecorder","env","collecting","captured","withArrivalsSettled","result","fn","owns","p","arrivals","batch","outermost","mode","ownsArrivals","notifier","log","err","finished","engine","kind","payload","label","touchesLayout","versionBefore","into","mark","op","ops","before","adapter","bindOpToAdapter","enclosing","step"],"sources":["../../../src/core/scene/recorder.ts"],"sourcesContent":["/**\n * How a scene mutation becomes an undo entry: recorded on its own, collected\n * into the batch it runs in, or left to the engine or the untracked run that\n * is driving it.\n */\nimport type { History } from '@weasel-js/history';\nimport type { Op } from 'core/ops/types';\nimport type { AppliedLog } from './appliedLog';\nimport type { ArrivalWindow } from './arrivalWindow';\nimport { bindOpToAdapter } from './boundOps';\nimport type { EditMode } from './editMode';\nimport type { Notifier } from './notifier';\nimport type { NodeId } from './types';\n\n/** What the recorder needs from the scene it records for. */\nexport interface RecorderEnv {\n notifier: Notifier;\n mode: EditMode;\n /** The scene's own undo/redo engine. */\n engine: History;\n /** Apply a registered op's forward half. */\n runOp(kind: string, payload: unknown): void;\n /** A registered op as the engine holds it. */\n makeOp(kind: string, payload: unknown): Op;\n log: AppliedLog;\n arrivals: Pick<ArrivalWindow<unknown>, 'bareLayoutEdit' | 'open' | 'settle' | 'emitReflow' | 'abandon'>;\n selection(): readonly NodeId[];\n /** Write one pose an arrival settle decided. */\n writePose(id: string, pose: unknown): void;\n}\n\nexport interface Recorder {\n /** Apply a registered op as part of whatever edit is running. */\n record(kind: string, payload: unknown, label: string): void;\n /** Run the recording half of a mutation. One that touches a laid-out\n * container, called bare, runs as a batch of its own: that is what puts\n * the arrangement it triggers in the same undo step. */\n edit<T>(label: string, touchesLayout: boolean, fn: () => T): T;\n batch<T>(label: string, fn: () => T): T;\n untracked<T>(fn: () => T): T;\n /** Whether an edit made now would join an open `batch`'s entry. */\n joins(): boolean;\n /** Apply ops built outside the scene as part of the open `batch`, all or\n * none. Its entry holds the kit ops they cause, and beside them, bound to\n * `adapter`, any op that wrote no scene state. */\n join(ops: Op[], adapter: unknown): void;\n /** Run `step`, and answer with the kit ops applied during it. */\n capturing<T>(step: () => T): { result: T; ops: Op[] };\n /** Run `fn` as a history engine's step: the ops it applies may re-enter\n * scene mutation methods, which apply but do not record. The caller\n * notifies once after. */\n engineDriven<T>(fn: () => T): T;\n}\n\n/** Take back ops that wrote outside the scene, newest first. The scene's own\n * writes are reverted by the applied log. */\nfunction unwind(outer: readonly Op[]): void {\n for (let i = outer.length - 1; i >= 0; i--) {\n try {\n outer[i].invert().apply(undefined);\n } catch {\n // The throw being unwound is the one the caller sees.\n }\n }\n}\n\nexport function createRecorder(env: RecorderEnv): Recorder {\n const { notifier, mode, engine, log, arrivals } = env;\n /** The outermost open batch, while it is recording. */\n let collecting: { label: string; ops: Op[]; outer: Op[]; selectionBefore: readonly NodeId[] } | null = null;\n /** The kit ops applied since the innermost `capturing` opened. */\n let captured: Op[] | null = null;\n\n /** `fn`, then the poses its arrivals settle to when this edit owns them. */\n function withArrivalsSettled<T>(fn: () => T, owns: boolean): T {\n const result = fn();\n if (owns) for (const p of arrivals.settle()) env.writePose(p.id, p.to);\n return result;\n }\n\n function batch<T>(label: string, fn: () => T): T {\n const outermost = !mode.open();\n // Captured at open, not at recordEntry: by the time the batch closes\n // the selection has already moved to wherever the batch put it.\n if (outermost) collecting = { label, ops: [], outer: [], selectionBefore: env.selection() };\n const ownsArrivals = outermost && arrivals.open(true);\n return notifier.deferred(() => mode.during('batch', () => {\n if (!outermost) return fn();\n try {\n const result = log.atomically(\n () => withArrivalsSettled(fn, ownsArrivals),\n () => (collecting?.ops.length ?? 0) > 0,\n );\n if (ownsArrivals) arrivals.emitReflow();\n return result;\n } catch (err) {\n // Reverted already; the half-built entry must not reach history.\n unwind(collecting?.outer ?? []);\n collecting = null;\n throw err;\n }\n }), () => {\n if (ownsArrivals) arrivals.abandon();\n if (!outermost || !collecting) return;\n const finished = collecting;\n collecting = null;\n // The ops were applied as they were issued, so the entry is pushed\n // without re-applying.\n if (finished.ops.length > 0) {\n engine.recordEntry(finished.ops, finished.label, { selectionBefore: finished.selectionBefore });\n }\n });\n }\n\n return {\n record(kind, payload, label) {\n if (mode.records() && !collecting) {\n // The engine applies the op itself, which is what lets it coalesce.\n mode.during('own', () => engine.applyOps([env.makeOp(kind, payload)], label));\n } else {\n env.runOp(kind, payload);\n log.logApplied(kind, payload);\n if (mode.records()) collecting!.ops.push(env.makeOp(kind, payload));\n else if (!mode.untracked()) captured?.push(env.makeOp(kind, payload));\n }\n notifier.notify();\n },\n edit: (label, touchesLayout, fn) => (touchesLayout && arrivals.bareLayoutEdit() ? batch(label, fn) : fn()),\n batch,\n untracked(fn) {\n const versionBefore = notifier.version();\n const ownsArrivals = arrivals.open(true);\n return notifier.deferred(() => mode.during('untracked', () => {\n const result = log.atomically(() => withArrivalsSettled(fn, ownsArrivals), () => false);\n if (ownsArrivals) arrivals.emitReflow();\n return result;\n }), () => {\n if (ownsArrivals) arrivals.abandon();\n if (notifier.version() !== versionBefore) engine.seal();\n });\n },\n joins: () => mode.records() && collecting !== null,\n join(ops, adapter) {\n const into = collecting!;\n const mark = into.ops.length;\n const outer: Op[] = [];\n try {\n log.atomically(() => {\n for (const op of ops) {\n const before = into.ops.length;\n const result = op.apply(adapter);\n if (into.ops.length > before || result === false || result === 'noop') continue;\n outer.push(bindOpToAdapter(op, adapter));\n into.ops.push(outer[outer.length - 1]);\n }\n }, () => false);\n } catch (err) {\n unwind(outer);\n into.ops.length = mark;\n throw err;\n }\n into.outer.push(...outer);\n },\n capturing(step) {\n const enclosing = captured;\n const ops: Op[] = [];\n captured = ops;\n try {\n return { result: step(), ops };\n } finally {\n captured = enclosing;\n }\n },\n engineDriven: (fn) => mode.during('engine', () => notifier.muted(fn)),\n };\n}\n"],"mappings":"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"}
|
|
@@ -0,0 +1,84 @@
|
|
|
1
|
+
//#region src/core/scene/renderOrder.ts
|
|
2
|
+
function e(e) {
|
|
3
|
+
function t() {
|
|
4
|
+
return e.layers.length === 1 ? c() : u();
|
|
5
|
+
}
|
|
6
|
+
function n() {
|
|
7
|
+
return e.layers.length === 1 ? l() : d();
|
|
8
|
+
}
|
|
9
|
+
let r = 0, i = { gen: 0 };
|
|
10
|
+
function a() {
|
|
11
|
+
r++;
|
|
12
|
+
}
|
|
13
|
+
let o = [];
|
|
14
|
+
function s() {
|
|
15
|
+
return i.gen !== r && (i = { gen: r }), i;
|
|
16
|
+
}
|
|
17
|
+
function c() {
|
|
18
|
+
let t = e.layers[0].id, n = [], r = [...e.roots].reverse();
|
|
19
|
+
for (; r.length > 0;) {
|
|
20
|
+
let i = r.pop(), a = e.nodes.get(i);
|
|
21
|
+
if (a && (a.layer === t && n.push(i), a.kind === "container")) for (let e = a.children.length - 1; e >= 0; e--) r.push(a.children[e]);
|
|
22
|
+
}
|
|
23
|
+
return n;
|
|
24
|
+
}
|
|
25
|
+
function l() {
|
|
26
|
+
let t = e.layers[0].id, n = [], r = [...e.roots].reverse();
|
|
27
|
+
for (; r.length > 0;) {
|
|
28
|
+
let i = r.pop(), a = e.nodes.get(i);
|
|
29
|
+
if (a && (a.layer === t && n.push(a), a.kind === "container")) for (let e = a.children.length - 1; e >= 0; e--) r.push(a.children[e]);
|
|
30
|
+
}
|
|
31
|
+
return n;
|
|
32
|
+
}
|
|
33
|
+
function u() {
|
|
34
|
+
let t = e.layers.map(() => []), n = [...e.roots].reverse();
|
|
35
|
+
for (; n.length > 0;) {
|
|
36
|
+
let r = n.pop(), i = e.nodes.get(r);
|
|
37
|
+
if (!i) continue;
|
|
38
|
+
let a = t[e.layerIndex.get(i.layer) ?? -1];
|
|
39
|
+
if (a && a.push(r), i.kind === "container") for (let e = i.children.length - 1; e >= 0; e--) n.push(i.children[e]);
|
|
40
|
+
}
|
|
41
|
+
let r = [];
|
|
42
|
+
for (let e of t) for (let t of e) r.push(t);
|
|
43
|
+
return r;
|
|
44
|
+
}
|
|
45
|
+
function d() {
|
|
46
|
+
let t = e.layers.map(() => []), n = [...e.roots].reverse();
|
|
47
|
+
for (; n.length > 0;) {
|
|
48
|
+
let r = n.pop(), i = e.nodes.get(r);
|
|
49
|
+
if (!i) continue;
|
|
50
|
+
let a = t[e.layerIndex.get(i.layer) ?? -1];
|
|
51
|
+
if (a && a.push(i), i.kind === "container") for (let e = i.children.length - 1; e >= 0; e--) n.push(i.children[e]);
|
|
52
|
+
}
|
|
53
|
+
let r = [];
|
|
54
|
+
for (let e of t) for (let t of e) r.push(t);
|
|
55
|
+
return r;
|
|
56
|
+
}
|
|
57
|
+
return {
|
|
58
|
+
ids() {
|
|
59
|
+
let e = s();
|
|
60
|
+
return e.ids ??= t();
|
|
61
|
+
},
|
|
62
|
+
nodes() {
|
|
63
|
+
let e = s();
|
|
64
|
+
return e.nodes ??= n();
|
|
65
|
+
},
|
|
66
|
+
nodesOnLayer(e) {
|
|
67
|
+
let t = s(), r = t.byLayer;
|
|
68
|
+
if (!r) {
|
|
69
|
+
r = /* @__PURE__ */ new Map();
|
|
70
|
+
for (let e of t.nodes ??= n()) {
|
|
71
|
+
let t = r.get(e.layer);
|
|
72
|
+
t || r.set(e.layer, t = []), t.push(e);
|
|
73
|
+
}
|
|
74
|
+
t.byLayer = r;
|
|
75
|
+
}
|
|
76
|
+
return r.get(e) ?? o;
|
|
77
|
+
},
|
|
78
|
+
invalidate: a
|
|
79
|
+
};
|
|
80
|
+
}
|
|
81
|
+
//#endregion
|
|
82
|
+
export { e as createRenderOrder };
|
|
83
|
+
|
|
84
|
+
//# sourceMappingURL=renderOrder.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"renderOrder.js","names":["createRenderOrder","walkIds","state","renderOrderFlat","renderOrderBucketed","walkNodes","renderOrderNodesFlat","renderOrderNodesBucketed","structureGeneration","orderCache","invalidate","EMPTY_NODES","currentOrderCache","only","out","stack","id","node","i","buckets","bucket","c","byLayer","layer"],"sources":["../../../src/core/scene/renderOrder.ts"],"sourcesContent":["/**\n * A scene's render order: its nodes layer-major, each layer in tree preorder,\n * cached until the structure changes.\n */\nimport type { Node, NodeId } from './types';\n\n/** What the walks read of a scene's state. */\nexport interface RenderOrderState<TData, TLayer extends string, TPose> {\n nodes: Map<NodeId, Node<TData, TLayer, TPose>>;\n roots: NodeId[];\n layers: { id: TLayer }[];\n layerIndex: Map<TLayer, number>;\n}\n\nexport interface RenderOrder<TData, TLayer extends string, TPose> {\n ids(): NodeId[];\n nodes(): Node<TData, TLayer, TPose>[];\n nodesOnLayer(layer: TLayer): readonly Node<TData, TLayer, TPose>[];\n /** Call on every structural edit; see the cache note below. */\n invalidate(): void;\n}\n\nexport function createRenderOrder<TData, TLayer extends string, TPose>(\n state: RenderOrderState<TData, TLayer, TPose>,\n): RenderOrder<TData, TLayer, TPose> {\n /**\n * Layer-major DFS-preorder ids, and the same sequence as nodes. Four walks\n * for two sequences, which wants explaining, because collapsing them is the\n * obvious cleanup and each collapse was measured to cost something:\n *\n * - ids vs nodes: projecting one from the other is a whole extra pass, worth\n * 20% of `renderOrder()` on a multi-layer scene.\n * - flat vs bucketed: a single layer needs no buckets and can compare the\n * layer id instead of indexing it, which is 1.4x. Behind a branch in one\n * function it also slows the bucketed path by 20% — the two shapes share\n * one optimized body, and whichever ran first wins it.\n *\n * All four emit the same order and `renderOrder.test.ts` holds them to it.\n */\n function walkIds(): NodeId[] {\n return state.layers.length === 1 ? renderOrderFlat() : renderOrderBucketed();\n }\n\n function walkNodes(): Node<TData, TLayer, TPose>[] {\n return state.layers.length === 1 ? renderOrderNodesFlat() : renderOrderNodesBucketed();\n }\n\n /**\n * Render order survives everything except a structural edit, so both walks\n * are cached against a counter the structural writers bump. Pose and data\n * edits leave order alone and must NOT invalidate — they fire per frame\n * during a drag, which is exactly when the cache pays.\n *\n * A missed bump is a silent wrong answer: nodes painted in the wrong z-order,\n * or unpickable. `renderOrder.test.ts` walks each structural op and asserts\n * the order moved.\n */\n let structureGeneration = 0;\n let orderCache: {\n gen: number;\n ids?: NodeId[];\n nodes?: Node<TData, TLayer, TPose>[];\n byLayer?: Map<TLayer, Node<TData, TLayer, TPose>[]>;\n } = { gen: 0 };\n\n function invalidate(): void {\n structureGeneration++;\n }\n\n const EMPTY_NODES: readonly Node<TData, TLayer, TPose>[] = [];\n\n function currentOrderCache(): typeof orderCache {\n if (orderCache.gen !== structureGeneration) {\n orderCache = { gen: structureGeneration };\n }\n return orderCache;\n }\n\n function renderOrderFlat(): NodeId[] {\n const only = state.layers[0].id;\n const out: NodeId[] = [];\n const stack: NodeId[] = [...state.roots].reverse();\n while (stack.length > 0) {\n const id = stack.pop()!;\n const node = state.nodes.get(id);\n if (!node) continue;\n if (node.layer === only) out.push(id);\n if (node.kind === 'container') {\n for (let i = node.children.length - 1; i >= 0; i--) {\n stack.push(node.children[i]);\n }\n }\n }\n return out;\n }\n\n function renderOrderNodesFlat(): Node<TData, TLayer, TPose>[] {\n const only = state.layers[0].id;\n const out: Node<TData, TLayer, TPose>[] = [];\n const stack: NodeId[] = [...state.roots].reverse();\n while (stack.length > 0) {\n const id = stack.pop()!;\n const node = state.nodes.get(id);\n if (!node) continue;\n if (node.layer === only) out.push(node);\n if (node.kind === 'container') {\n for (let i = node.children.length - 1; i >= 0; i--) {\n stack.push(node.children[i]);\n }\n }\n }\n return out;\n }\n\n /** One DFS of the tree, bucketed by layer: appending in preorder keeps each\n * bucket in preorder, so concatenating them is the layer-major sequence. */\n function renderOrderBucketed(): NodeId[] {\n const buckets: NodeId[][] = state.layers.map(() => []);\n const stack: NodeId[] = [...state.roots].reverse();\n while (stack.length > 0) {\n const id = stack.pop()!;\n const node = state.nodes.get(id);\n if (!node) continue;\n const bucket = buckets[state.layerIndex.get(node.layer) ?? -1];\n if (bucket) bucket.push(id);\n if (node.kind === 'container') {\n for (let i = node.children.length - 1; i >= 0; i--) {\n stack.push(node.children[i]);\n }\n }\n }\n const out: NodeId[] = [];\n for (const bucket of buckets) {\n for (const id of bucket) out.push(id);\n }\n return out;\n }\n\n function renderOrderNodesBucketed(): Node<TData, TLayer, TPose>[] {\n const buckets: Node<TData, TLayer, TPose>[][] = state.layers.map(() => []);\n const stack: NodeId[] = [...state.roots].reverse();\n while (stack.length > 0) {\n const id = stack.pop()!;\n const node = state.nodes.get(id);\n if (!node) continue;\n const bucket = buckets[state.layerIndex.get(node.layer) ?? -1];\n if (bucket) bucket.push(node);\n if (node.kind === 'container') {\n for (let i = node.children.length - 1; i >= 0; i--) {\n stack.push(node.children[i]);\n }\n }\n }\n const out: Node<TData, TLayer, TPose>[] = [];\n for (const bucket of buckets) {\n for (const node of bucket) out.push(node);\n }\n return out;\n }\n\n return {\n ids() {\n const c = currentOrderCache();\n return (c.ids ??= walkIds());\n },\n nodes() {\n const c = currentOrderCache();\n return (c.nodes ??= walkNodes());\n },\n nodesOnLayer(layer) {\n const c = currentOrderCache();\n let byLayer = c.byLayer;\n if (!byLayer) {\n byLayer = new Map();\n for (const node of (c.nodes ??= walkNodes())) {\n let bucket = byLayer.get(node.layer);\n if (!bucket) byLayer.set(node.layer, (bucket = []));\n bucket.push(node);\n }\n c.byLayer = byLayer;\n }\n return byLayer.get(layer) ?? EMPTY_NODES;\n },\n invalidate,\n };\n}\n"],"mappings":"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"}
|