@weasel-js/core 1.9.4 → 1.10.1
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 +918 -0
- package/README.md +38 -3
- package/dist/WeaselProvider.js +5 -7
- package/dist/WeaselProvider.js.map +1 -1
- package/dist/affordances/composeAffordanceLayer.js +92 -84
- package/dist/affordances/composeAffordanceLayer.js.map +1 -1
- package/dist/affordances/cornerResize.js +3 -2
- package/dist/affordances/cornerResize.js.map +1 -1
- package/dist/affordances/hitAffordanceRegions.js +71 -101
- package/dist/affordances/hitAffordanceRegions.js.map +1 -1
- package/dist/affordances/pathAnchors.js +50 -28
- package/dist/affordances/pathAnchors.js.map +1 -1
- package/dist/affordances/rotateCursor.js +12 -0
- package/dist/affordances/rotateCursor.js.map +1 -0
- package/dist/affordances/rotationHandle.js +44 -46
- 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 +48 -136
- 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 +99 -0
- package/dist/animation/rig/rigNode.js.map +1 -0
- package/dist/animation/rig/rigSeat.js +59 -0
- package/dist/animation/rig/rigSeat.js.map +1 -0
- package/dist/animation/rig/skinBinding.js +64 -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 +8 -7
- package/dist/animation/wrappers/animateLifecycle.js.map +1 -1
- package/dist/animation/wrappers/animateOnSetPose.js +31 -31
- package/dist/animation/wrappers/animateOnSetPose.js.map +1 -1
- package/dist/animation/wrappers/instantPose.js.map +1 -1
- package/dist/animation/writtenPoseTarget.js +33 -0
- package/dist/animation/writtenPoseTarget.js.map +1 -0
- package/dist/autoPoseDescriptor-DHg5KqaJ.d.ts +27 -0
- package/dist/barrel/canvas.js +32 -0
- package/dist/barrel/chrome.js +10 -10
- package/dist/barrel/input.js +16 -17
- package/dist/barrel/interactions.js +34 -37
- package/dist/barrel/paint.js +11 -18
- package/dist/barrel/paths.js +13 -19
- package/dist/barrel/renderer.js +14 -20
- package/dist/barrel/routing.js +54 -47
- package/dist/barrel/scene.js +37 -0
- package/dist/barrel/text.js +9 -18
- package/dist/barrel/viewport.js +44 -51
- package/dist/canvas/Canvas.js +270 -475
- package/dist/canvas/Canvas.js.map +1 -1
- package/dist/canvas/CanvasView.js +168 -190
- package/dist/canvas/CanvasView.js.map +1 -1
- package/dist/canvas/CursorCoordsHud.js +24 -25
- package/dist/canvas/CursorCoordsHud.js.map +1 -1
- package/dist/canvas/DrawCanvas.js +39 -56
- package/dist/canvas/DrawCanvas.js.map +1 -1
- package/dist/canvas/ModalityHud.js.map +1 -1
- package/dist/canvas/NodeShape.js +28 -29
- package/dist/canvas/NodeShape.js.map +1 -1
- 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 +66 -107
- package/dist/canvas/SceneCanvas/GestureDispatcherMounter.js.map +1 -1
- package/dist/canvas/SceneCanvas/PointerProviderIfRoot.js +33 -36
- package/dist/canvas/SceneCanvas/PointerProviderIfRoot.js.map +1 -1
- package/dist/canvas/SceneCanvas/StandardActionsRegistrar.js +38 -50
- package/dist/canvas/SceneCanvas/StandardActionsRegistrar.js.map +1 -1
- package/dist/canvas/SceneCanvas/ToolKeybindingsMounter.js +3 -3
- package/dist/canvas/SceneCanvas/ToolKeybindingsMounter.js.map +1 -1
- package/dist/canvas/SceneCanvas/coordTrace.js +37 -1
- package/dist/canvas/SceneCanvas/coordTrace.js.map +1 -1
- package/dist/canvas/SceneCanvas/defaultNodeProperties.js +319 -270
- package/dist/canvas/SceneCanvas/defaultNodeProperties.js.map +1 -1
- package/dist/canvas/SceneCanvas/defaultNodeRouting.js +1 -1
- package/dist/canvas/SceneCanvas/defaultNodeRouting.js.map +1 -1
- package/dist/canvas/SceneCanvas/dispatcherGestureBounds.js.map +1 -1
- package/dist/canvas/SceneCanvas/features.js +71 -62
- package/dist/canvas/SceneCanvas/features.js.map +1 -1
- package/dist/canvas/SceneCanvas/insertPreviewCommands.js +97 -0
- package/dist/canvas/SceneCanvas/insertPreviewCommands.js.map +1 -0
- package/dist/canvas/SceneCanvas/isDev.js.map +1 -1
- package/dist/canvas/SceneCanvas/poseGeometry.js +33 -37
- package/dist/canvas/SceneCanvas/poseGeometry.js.map +1 -1
- package/dist/canvas/SceneCanvas/props.js +15 -14
- package/dist/canvas/SceneCanvas/props.js.map +1 -1
- package/dist/canvas/SceneCanvas/scenePointQuery.js +50 -0
- package/dist/canvas/SceneCanvas/scenePointQuery.js.map +1 -0
- package/dist/canvas/SceneCanvas/shapeGeneratorProperties.js +52 -0
- package/dist/canvas/SceneCanvas/shapeGeneratorProperties.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/useActionTunings.js +17 -0
- package/dist/canvas/SceneCanvas/useActionTunings.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.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 +46 -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 +49 -113
- 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 +51 -41
- 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 +65 -101
- 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 +8 -0
- package/dist/canvas/SceneCanvas/worldPointAt.js.map +1 -0
- package/dist/canvas/SceneCanvas.js +301 -708
- package/dist/canvas/SceneCanvas.js.map +1 -1
- package/dist/canvas/SceneViewCanvas.js +41 -47
- package/dist/canvas/SceneViewCanvas.js.map +1 -1
- package/dist/canvas/SurfaceCanvas.js +40 -0
- package/dist/canvas/SurfaceCanvas.js.map +1 -0
- package/dist/canvas/adapterDerivedPath.js +26 -0
- package/dist/canvas/adapterDerivedPath.js.map +1 -0
- package/dist/canvas/adapterPickSource.js +34 -0
- package/dist/canvas/adapterPickSource.js.map +1 -0
- package/dist/canvas/affordanceAt.js +12 -2
- package/dist/canvas/affordanceAt.js.map +1 -1
- package/dist/canvas/buildSceneLayer.js +81 -61
- package/dist/canvas/buildSceneLayer.js.map +1 -1
- package/dist/canvas/buildSceneTree.js +56 -34
- package/dist/canvas/buildSceneTree.js.map +1 -1
- package/dist/canvas/canvasRenderer.js +40 -44
- package/dist/canvas/canvasRenderer.js.map +1 -1
- package/dist/canvas/colorOverrides.js.map +1 -1
- package/dist/canvas/copiesAbove.js +27 -0
- package/dist/canvas/copiesAbove.js.map +1 -0
- package/dist/canvas/defaultDrawOne.js +25 -24
- 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/debug.js.map +1 -1
- package/dist/canvas/deps/editAnchors.js +47 -71
- package/dist/canvas/deps/editAnchors.js.map +1 -1
- package/dist/canvas/deps/geometryProjection.js.map +1 -1
- package/dist/canvas/deps/hitTestArea.js +45 -25
- package/dist/canvas/deps/hitTestArea.js.map +1 -1
- package/dist/canvas/deps/insert.js +149 -104
- 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/layout.js +9 -15
- package/dist/canvas/deps/layout.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 +44 -45
- package/dist/canvas/deps/slice.js.map +1 -1
- package/dist/canvas/deps/textEdit.js +8 -8
- package/dist/canvas/deps/textEdit.js.map +1 -1
- package/dist/canvas/deps/view.js.map +1 -1
- package/dist/canvas/derivedPath.js +69 -43
- 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 +2 -6
- package/dist/canvas/getNodeAtPoint.js.map +1 -1
- package/dist/canvas/hud.module.js.map +1 -1
- package/dist/canvas/insertPreviewExtent.js +33 -31
- package/dist/canvas/insertPreviewExtent.js.map +1 -1
- 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 +12 -12
- package/dist/canvas/nodeShapes/derivedPainter.js.map +1 -1
- package/dist/canvas/nodeShapes/imagePainter.js +10 -10
- package/dist/canvas/nodeShapes/imagePainter.js.map +1 -1
- package/dist/canvas/nodeShapes/memo.js.map +1 -1
- package/dist/canvas/nodeShapes/nodePaint.js +34 -23
- package/dist/canvas/nodeShapes/nodePaint.js.map +1 -1
- package/dist/canvas/nodeShapes/pathPainter.js +23 -22
- package/dist/canvas/nodeShapes/pathPainter.js.map +1 -1
- package/dist/canvas/nodeShapes/poseBox.js +6 -6
- package/dist/canvas/nodeShapes/poseBox.js.map +1 -1
- package/dist/canvas/nodeShapes/rectFallbackPainter.js +8 -8
- package/dist/canvas/nodeShapes/rectFallbackPainter.js.map +1 -1
- package/dist/canvas/nodeShapes/shapePainter.js +16 -16
- package/dist/canvas/nodeShapes/shapePainter.js.map +1 -1
- package/dist/canvas/nodeShapes/textPainter.js +1 -1
- package/dist/canvas/nodeShapes/textPainter.js.map +1 -1
- package/dist/canvas/overChildren.js +29 -0
- package/dist/canvas/overChildren.js.map +1 -0
- package/dist/canvas/overlayRoleStrokes.js.map +1 -1
- package/dist/canvas/paintCull.js +6 -8
- 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/pickReach.js +23 -0
- package/dist/canvas/pickReach.js.map +1 -0
- package/dist/canvas/pickWalk.js +43 -70
- 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 +1 -3
- 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 +12 -12
- 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 -83
- package/dist/canvas/renderSceneToPixels.js.map +1 -1
- package/dist/canvas/sceneAdapter.js +59 -144
- package/dist/canvas/sceneAdapter.js.map +1 -1
- package/dist/canvas/sceneClipboard.js +1 -1
- package/dist/canvas/sceneClipboard.js.map +1 -1
- package/dist/canvas/sceneLayerPaint.js +4 -4
- package/dist/canvas/sceneLayerPaint.js.map +1 -1
- package/dist/canvas/sceneSlotWiring.js +10 -9
- package/dist/canvas/sceneSlotWiring.js.map +1 -1
- package/dist/canvas/sceneViewRender.js +37 -42
- 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/useCanvasRenderer.js +23 -11
- 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 +51 -44
- package/dist/canvas/useCanvasView.js.map +1 -1
- package/dist/canvas/useFrameLoop.js +11 -12
- 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/useSceneAdapter.js +22 -0
- package/dist/canvas/useSceneAdapter.js.map +1 -0
- package/dist/canvas/useSceneLayerList.js +4 -14
- package/dist/canvas/useSceneLayerList.js.map +1 -1
- package/dist/canvas/useSurfaceInput.js +39 -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 +40 -34
- 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 +7 -2
- package/dist/canvas/wrapNodeOutput.js.map +1 -1
- package/dist/clipboard.d.ts +7 -14
- package/dist/{types-B4iJRHC3.d.ts → clone-C0eADtS0.d.ts} +129 -84
- package/dist/clone.d.ts +4 -8
- package/dist/clone.js +0 -2
- package/dist/core/device/targets.js.map +1 -1
- package/dist/core/device/useDeviceProfile.js +13 -13
- package/dist/core/device/useDeviceProfile.js.map +1 -1
- 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 +102 -29
- package/dist/core/geometry/poseDescriptor.js.map +1 -1
- package/dist/core/geometry/regionHit.js +35 -37
- 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 +4 -5
- package/dist/core/geometry/unionBounds.js.map +1 -1
- 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 +2 -4
- package/dist/core/layers/children.js.map +1 -0
- package/dist/{features/focus → core/layers}/gateLayer.js +2 -2
- 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/create.js +2 -2
- 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 +19 -23
- package/dist/core/ops/delete.js.map +1 -1
- package/dist/core/ops/reorder/index.js +3 -7
- package/dist/core/ops/reorder/index.js.map +1 -1
- package/dist/core/ops/reorder/setChildOrder.js +2 -4
- package/dist/core/ops/reorder/setChildOrder.js.map +1 -1
- package/dist/core/ops/reparent.js +0 -1
- package/dist/core/ops/reparent.js.map +1 -1
- package/dist/core/ops/slot.js +3 -6
- package/dist/core/ops/slot.js.map +1 -1
- package/dist/core/pages/fitViewToPage.js +15 -0
- package/dist/core/pages/fitViewToPage.js.map +1 -0
- package/dist/core/pages/pages.js +65 -0
- package/dist/core/pages/pages.js.map +1 -0
- package/dist/core/pages/pagesLayer.js +27 -0
- package/dist/core/pages/pagesLayer.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} +104 -93
- 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/arrivalWindow.js +65 -64
- package/dist/core/scene/arrivalWindow.js.map +1 -1
- 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/core/scene/composePose.js +105 -0
- 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 +42 -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 +122 -70
- package/dist/core/scene/historyFacade.js.map +1 -1
- package/dist/core/scene/historyForm.js +6 -0
- package/dist/core/scene/historyForm.js.map +1 -0
- package/dist/core/scene/kitOps.js +83 -71
- package/dist/core/scene/kitOps.js.map +1 -1
- package/dist/core/scene/kitRegistry.js.map +1 -1
- package/dist/core/scene/layerStack.js +105 -12
- package/dist/core/scene/layerStack.js.map +1 -1
- package/dist/core/scene/layoutPass.js +58 -59
- package/dist/core/scene/layoutPass.js.map +1 -1
- 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 +16 -9
- package/dist/core/scene/nodeFnFields.js.map +1 -1
- package/dist/core/scene/nodeMemo.js.map +1 -1
- package/dist/core/scene/nodeStore.js +72 -71
- package/dist/core/scene/nodeStore.js.map +1 -1
- 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 +67 -0
- package/dist/core/scene/outerOps.js.map +1 -0
- package/dist/core/scene/poseHold.js +39 -0
- package/dist/core/scene/poseHold.js.map +1 -0
- package/dist/core/scene/poseOverrides.js +44 -36
- package/dist/core/scene/poseOverrides.js.map +1 -1
- package/dist/core/scene/poseSnapshot.js.map +1 -1
- package/dist/core/scene/reconcileSpecs.js +4 -3
- 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.map +1 -1
- package/dist/core/scene/scene.js +81 -690
- 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 +91 -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 +8 -5
- package/dist/core/scene/serialization.js.map +1 -1
- 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/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 +31 -33
- 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 +113 -53
- package/dist/core/viewport/useViewAnimation.js.map +1 -1
- package/dist/core/viewport/view.js +14 -11
- package/dist/core/viewport/view.js.map +1 -1
- package/dist/core/viewport/wheelHandler.js.map +1 -1
- package/dist/core/viewport/zoomAt.js +11 -2
- package/dist/core/viewport/zoomAt.js.map +1 -1
- package/dist/{cornerHandles-CtCb8a3G.d.ts → cornerHandles-BSKbyuvQ.d.ts} +11 -24
- package/dist/debug/createDebugOverlayLayer.js +100 -100
- package/dist/debug/createDebugOverlayLayer.js.map +1 -1
- package/dist/debug/createDebugSink.js.map +1 -1
- 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.map +1 -1
- package/dist/features/ingestion/contentHandlers.js +25 -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/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 +5 -0
- 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 +63 -0
- package/dist/features/paths/editablePath.js.map +1 -0
- package/dist/features/paths/index.js +9 -16
- 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/shapeGenerator.js +89 -0
- package/dist/features/paths/shapeGenerator.js.map +1 -0
- package/dist/features/paths/usePathEdit.js +34 -0
- package/dist/features/paths/usePathEdit.js.map +1 -0
- package/dist/features/poseRun/usePoseRun.js +44 -57
- package/dist/features/poseRun/usePoseRun.js.map +1 -1
- package/dist/features/selection/overlay.js +170 -178
- 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 +119 -88
- package/dist/features/text/useSceneTextEdit.js.map +1 -1
- package/dist/features/viewports/viewResolver.js +28 -24
- package/dist/features/viewports/viewResolver.js.map +1 -1
- package/dist/features/viewports/viewportLayer.js +25 -36
- package/dist/features/viewports/viewportLayer.js.map +1 -1
- package/dist/icons/SliceIcon.js +24 -0
- package/dist/icons/SliceIcon.js.map +1 -0
- package/dist/index.d.ts +5200 -8777
- package/dist/index.js +284 -320
- package/dist/input/keyState.js +14 -14
- package/dist/interactions/actions/actionShortcuts.js.map +1 -1
- package/dist/interactions/actions/{defaults/align.js → align/action.js} +15 -16
- package/dist/interactions/actions/align/action.js.map +1 -0
- package/dist/interactions/actions/align/align.js +24 -24
- 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 +74 -83
- 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} +19 -19
- package/dist/interactions/actions/clipboard/action.js.map +1 -0
- package/dist/interactions/actions/clipboard/clipboardOps.js +15 -15
- package/dist/interactions/actions/clipboard/clipboardOps.js.map +1 -1
- package/dist/interactions/actions/clipboard/wireFormat.js.map +1 -1
- package/dist/interactions/actions/clone/action.js +103 -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 +10 -37
- package/dist/interactions/actions/defaultCommitAdapter.js.map +1 -1
- package/dist/interactions/actions/defaults/anchorEditing.js +69 -74
- package/dist/interactions/actions/defaults/anchorEditing.js.map +1 -1
- package/dist/interactions/actions/defaults/anchorHandles.js +42 -0
- package/dist/interactions/actions/defaults/anchorHandles.js.map +1 -0
- package/dist/interactions/actions/defaults/anchorJoin.js +92 -0
- package/dist/interactions/actions/defaults/anchorJoin.js.map +1 -0
- package/dist/interactions/actions/defaults/areaSelect.js.map +1 -1
- package/dist/interactions/actions/defaults/bendSegment.js +46 -0
- package/dist/interactions/actions/defaults/bendSegment.js.map +1 -0
- 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 +1 -1
- package/dist/interactions/actions/defaults/copySubtree.js.map +1 -1
- 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 +36 -21
- package/dist/interactions/actions/defaults/duplicate.js.map +1 -1
- package/dist/interactions/actions/defaults/enterPathEdit.js +19 -7
- package/dist/interactions/actions/defaults/enterPathEdit.js.map +1 -1
- package/dist/interactions/actions/defaults/enterTextEdit.js.map +1 -1
- package/dist/interactions/actions/defaults/group.js +35 -40
- package/dist/interactions/actions/defaults/group.js.map +1 -1
- package/dist/interactions/actions/defaults/icons/anchorIcons.js +75 -0
- package/dist/interactions/actions/defaults/icons/anchorIcons.js.map +1 -0
- 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/editIcons.js +35 -8
- package/dist/interactions/actions/defaults/icons/editIcons.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 +19 -15
- package/dist/interactions/actions/defaults/ingest.js.map +1 -1
- package/dist/interactions/actions/defaults/insertPathAnchor.js +18 -34
- package/dist/interactions/actions/defaults/insertPathAnchor.js.map +1 -1
- package/dist/interactions/actions/defaults/nudge.js +43 -39
- package/dist/interactions/actions/defaults/nudge.js.map +1 -1
- package/dist/interactions/actions/defaults/pinchZoom.js +29 -29
- package/dist/interactions/actions/defaults/pinchZoom.js.map +1 -1
- package/dist/interactions/actions/defaults/requiresSelection.js.map +1 -1
- package/dist/interactions/actions/defaults/segmentUnder.js +22 -0
- package/dist/interactions/actions/defaults/segmentUnder.js.map +1 -0
- package/dist/interactions/actions/defaults/setFill.js +9 -3
- package/dist/interactions/actions/defaults/setFill.js.map +1 -1
- package/dist/interactions/actions/defaults/setFillOpacity.js +4 -1
- package/dist/interactions/actions/defaults/setFillOpacity.js.map +1 -1
- package/dist/interactions/actions/defaults/setStroke.js.map +1 -1
- package/dist/interactions/actions/defaults/sliceOps.js +20 -22
- 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 +1 -1
- 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 +82 -79
- package/dist/interactions/actions/defaults/viewportZoom.js.map +1 -1
- package/dist/interactions/actions/{defaults/distribute.js → distribute/action.js} +18 -19
- package/dist/interactions/actions/distribute/action.js.map +1 -0
- package/dist/interactions/actions/distribute/distribute.js +15 -15
- package/dist/interactions/actions/distribute/distribute.js.map +1 -1
- package/dist/interactions/actions/edit-anchors/action.js +101 -0
- package/dist/interactions/actions/edit-anchors/action.js.map +1 -0
- package/dist/interactions/actions/edit-anchors/geometry.js +2 -4
- package/dist/interactions/actions/edit-anchors/geometry.js.map +1 -1
- package/dist/interactions/actions/edit-anchors/preview.js +26 -0
- package/dist/interactions/actions/edit-anchors/preview.js.map +1 -0
- package/dist/interactions/actions/edit-anchors/symmetry.js +11 -0
- package/dist/interactions/actions/edit-anchors/symmetry.js.map +1 -0
- 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 +1 -1
- package/dist/interactions/actions/flip/helpers.js.map +1 -1
- package/dist/interactions/actions/geometryProjection.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/insert/action.js +79 -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 +55 -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/repositionAction.js +31 -0
- package/dist/interactions/actions/insert/repositionAction.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/move/action.js +91 -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/snapToContainer.js +35 -28
- package/dist/interactions/actions/move/behaviors/snapToContainer.js.map +1 -1
- package/dist/interactions/actions/move/capture.js +108 -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 +47 -0
- package/dist/interactions/actions/move/frame.js.map +1 -0
- package/dist/interactions/actions/move/gestureAdapter.js +15 -40
- package/dist/interactions/actions/move/gestureAdapter.js.map +1 -1
- package/dist/interactions/actions/move/landedDescendants.js +8 -8
- 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 +17 -64
- 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/pathCommands/cutJoin.js +102 -0
- package/dist/interactions/actions/pathCommands/cutJoin.js.map +1 -0
- package/dist/interactions/actions/pathCommands/livePathEdit.js +64 -0
- package/dist/interactions/actions/pathCommands/livePathEdit.js.map +1 -0
- package/dist/interactions/actions/pathCommands/pathNodes.js +99 -0
- package/dist/interactions/actions/pathCommands/pathNodes.js.map +1 -0
- package/dist/interactions/actions/pathCommands/simplifyOffset.js +42 -0
- package/dist/interactions/actions/pathCommands/simplifyOffset.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 +1 -1
- package/dist/interactions/actions/poseDescriptorDep.js.map +1 -1
- package/dist/interactions/actions/poseFrame.js +26 -26
- package/dist/interactions/actions/poseFrame.js.map +1 -1
- package/dist/interactions/actions/resize/action.js +66 -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 +88 -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/replay.js +47 -0
- package/dist/interactions/actions/resize/replay.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 +63 -0
- package/dist/interactions/actions/resize/session.js.map +1 -0
- package/dist/interactions/actions/resolveOverlays.js +2 -1
- 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 +71 -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/replay.js +22 -0
- package/dist/interactions/actions/rotate/replay.js.map +1 -0
- package/dist/interactions/actions/rotate/session.js +102 -0
- package/dist/interactions/actions/rotate/session.js.map +1 -0
- package/dist/interactions/actions/spatialReference.js.map +1 -1
- package/dist/interactions/actions/transform-again/action.js +63 -0
- package/dist/interactions/actions/transform-again/action.js.map +1 -0
- package/dist/interactions/actions/transform-again/memory.js +35 -0
- package/dist/interactions/actions/transform-again/memory.js.map +1 -0
- package/dist/interactions/actions/useStandardActions.js +84 -61
- package/dist/interactions/actions/useStandardActions.js.map +1 -1
- package/dist/interactions/gestures/pointerDrag/pointerDrag.js +61 -42
- 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/math-CYUjoyyU.d.ts +33 -0
- package/dist/math.d.ts +5 -2
- package/dist/math.js +6 -6
- package/dist/mesh.d.ts +4 -268
- package/dist/mesh.js +3 -7
- package/dist/move.d.ts +6 -4
- package/dist/{originProjection-gHnOup4e.d.ts → originProjection-CoNVpITV.d.ts} +1 -1
- package/dist/patterns-builtin.d.ts +1 -118
- package/dist/patterns-builtin.js +2 -3
- package/dist/poseDescriptor-Bqk-11Rl.d.ts +73 -0
- package/dist/renderer.d.ts +1 -92
- package/dist/renderer.js +2 -19
- package/dist/resize.d.ts +11 -22
- package/dist/resize.js +1 -1
- package/dist/style.css +1 -1
- 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 +16 -15
- 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.map +1 -1
- package/dist/tools/builtin/image/useImageTool.js.map +1 -1
- package/dist/tools/builtin/lasso/useLassoTool.js.map +1 -1
- package/dist/tools/builtin/line/useLineTool.js +16 -15
- package/dist/tools/builtin/line/useLineTool.js.map +1 -1
- package/dist/tools/builtin/pen/usePenTool.js +162 -164
- package/dist/tools/builtin/pen/usePenTool.js.map +1 -1
- package/dist/tools/builtin/pencil/usePencilTool.js.map +1 -1
- package/dist/tools/builtin/pickTopMostHit.js +11 -14
- package/dist/tools/builtin/pickTopMostHit.js.map +1 -1
- package/dist/tools/builtin/polygon/usePolygonTool.js +17 -15
- package/dist/tools/builtin/polygon/usePolygonTool.js.map +1 -1
- package/dist/tools/builtin/rect/useRectTool.js +15 -14
- package/dist/tools/builtin/rect/useRectTool.js.map +1 -1
- package/dist/tools/builtin/select/adapterPointQuery.js +40 -0
- package/dist/tools/builtin/select/adapterPointQuery.js.map +1 -0
- package/dist/tools/builtin/select/selectionContributions.js +5 -5
- package/dist/tools/builtin/select/selectionContributions.js.map +1 -1
- package/dist/tools/builtin/select/useSelectTool.js +44 -71
- package/dist/tools/builtin/select/useSelectTool.js.map +1 -1
- package/dist/tools/builtin/shared/pointerFollower.js.map +1 -1
- package/dist/tools/builtin/slice/useSliceTool.js +69 -72
- package/dist/tools/builtin/slice/useSliceTool.js.map +1 -1
- package/dist/tools/builtin/star/useStarTool.js +18 -16
- package/dist/tools/builtin/star/useStarTool.js.map +1 -1
- package/dist/tools/builtin/text/useTextTool.js +10 -2
- 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 +20 -14
- package/dist/tools/useKeybindings.js.map +1 -1
- package/dist/{types-k-5Oqh-U.d.ts → types-DBbbCy0i.d.ts} +103 -176
- package/dist/util/paint.js +1 -1
- package/dist/util/paint.js.map +1 -1
- package/dist/version.js +1 -1
- package/package.json +26 -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 -60
- 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 -146
- package/dist/animation/stagger.js.map +0 -1
- package/dist/animation/timeline/booking.js +0 -114
- package/dist/animation/timeline/booking.js.map +0 -1
- package/dist/animation/timeline/createTimeline.js +0 -125
- package/dist/animation/timeline/createTimeline.js.map +0 -1
- package/dist/animation/timeline/sampleTrack.js +0 -79
- package/dist/animation/timeline/sampleTrack.js.map +0 -1
- package/dist/animation/useAnimator.js +0 -388
- package/dist/animation/useAnimator.js.map +0 -1
- package/dist/autoPoseDescriptor-Ct7yqivU.d.ts +0 -108
- package/dist/builtins-DPcdghtB.d.ts +0 -1223
- package/dist/canvas/MinimapCanvas.js +0 -140
- 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 -82
- 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 -94
- 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/poseFrame.js +0 -44
- package/dist/core/geometry/poseFrame.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/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/scene/pickability.js +0 -6
- package/dist/core/scene/pickability.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/features/cursor/paintedCursorLayer.js.map +0 -1
- 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 +0 -67
- 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 -104
- 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 -239
- 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 -85
- 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 -22
- package/dist/features/parallax/createParallaxPlane.js.map +0 -1
- package/dist/features/paths/anchorEdits.js +0 -167
- package/dist/features/paths/anchorEdits.js.map +0 -1
- package/dist/features/paths/anchors.js +0 -159
- package/dist/features/paths/anchors.js.map +0 -1
- package/dist/features/paths/booleans.js +0 -2
- package/dist/features/paths/markerCommands.js +0 -149
- 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/strokeToPath.js +0 -40
- package/dist/features/paths/strokeToPath.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/commandPaint.js +0 -18
- package/dist/features/patterns/commandPaint.js.map +0 -1
- package/dist/features/patterns/index.js +0 -11
- 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/rasterizeTile.js +0 -17
- package/dist/features/patterns/rasterizeTile.js.map +0 -1
- package/dist/features/patterns/resolveSpec.js +0 -65
- 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 -51
- 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/domOffsets.js +0 -82
- package/dist/features/text/domOffsets.js.map +0 -1
- package/dist/features/text/domRuns.js +0 -230
- 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 -48
- package/dist/features/text/hitTest.js.map +0 -1
- package/dist/features/text/isTextData.js +0 -8
- package/dist/features/text/isTextData.js.map +0 -1
- package/dist/features/text/overlayDirection.js +0 -15
- package/dist/features/text/overlayDirection.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 -133
- package/dist/features/text/runs/rangeStyle.js.map +0 -1
- package/dist/features/text/textCommand.js +0 -60
- 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 -491
- package/dist/features/text/useTextEdit.js.map +0 -1
- package/dist/features/tiling/createTiledLayer.js +0 -65
- 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 -91
- 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.map +0 -1
- package/dist/interactions/actions/defaults/editAnchors.js +0 -100
- package/dist/interactions/actions/defaults/editAnchors.js.map +0 -1
- package/dist/interactions/actions/defaults/flip.js +0 -125
- package/dist/interactions/actions/defaults/flip.js.map +0 -1
- package/dist/interactions/actions/defaults/insert.js +0 -287
- package/dist/interactions/actions/defaults/insert.js.map +0 -1
- package/dist/interactions/actions/defaults/lassoSelect.js +0 -153
- package/dist/interactions/actions/defaults/lassoSelect.js.map +0 -1
- package/dist/interactions/actions/defaults/move.js +0 -778
- package/dist/interactions/actions/defaults/move.js.map +0 -1
- package/dist/interactions/actions/defaults/resize.js +0 -341
- package/dist/interactions/actions/defaults/resize.js.map +0 -1
- package/dist/interactions/actions/defaults/rotate.js +0 -185
- 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/layout/arrivals.js +0 -36
- package/dist/layout/arrivals.js.map +0 -1
- package/dist/math-J-ACHyEg.d.ts +0 -159
- package/dist/registerProgram-T9S_PfAX.d.ts +0 -208
- package/dist/renderer/DrawCommand.js +0 -6
- package/dist/renderer/DrawCommand.js.map +0 -1
- package/dist/renderer/WeaselRenderer.js +0 -333
- 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 -74
- 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 -68
- 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/batch.js +0 -133
- package/dist/renderer/draw/batch.js.map +0 -1
- package/dist/renderer/draw/clip.js +0 -89
- package/dist/renderer/draw/clip.js.map +0 -1
- package/dist/renderer/draw/customShader.js +0 -230
- package/dist/renderer/draw/customShader.js.map +0 -1
- package/dist/renderer/draw/drawTriangles.js +0 -8
- package/dist/renderer/draw/drawTriangles.js.map +0 -1
- package/dist/renderer/draw/effects.js +0 -28
- package/dist/renderer/draw/effects.js.map +0 -1
- package/dist/renderer/draw/flushBatch.js +0 -35
- package/dist/renderer/draw/flushBatch.js.map +0 -1
- package/dist/renderer/draw/gradient.js +0 -90
- package/dist/renderer/draw/gradient.js.map +0 -1
- package/dist/renderer/draw/image.js +0 -38
- package/dist/renderer/draw/image.js.map +0 -1
- package/dist/renderer/draw/mesh.js +0 -16
- package/dist/renderer/draw/mesh.js.map +0 -1
- package/dist/renderer/draw/paintBind.js +0 -70
- package/dist/renderer/draw/paintBind.js.map +0 -1
- package/dist/renderer/draw/pathPaint.js +0 -142
- package/dist/renderer/draw/pathPaint.js.map +0 -1
- package/dist/renderer/draw/scratchPass.js +0 -83
- package/dist/renderer/draw/scratchPass.js.map +0 -1
- package/dist/renderer/draw/stencil.js +0 -28
- package/dist/renderer/draw/stencil.js.map +0 -1
- package/dist/renderer/draw/text.js +0 -167
- package/dist/renderer/draw/text.js.map +0 -1
- package/dist/renderer/draw/uniforms.js +0 -77
- package/dist/renderer/draw/uniforms.js.map +0 -1
- package/dist/renderer/draw.js +0 -79
- 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 -48
- 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 -11
- 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 -20
- package/dist/renderer/math/color.js +0 -321
- package/dist/renderer/math/color.js.map +0 -1
- package/dist/renderer/math/mat3.js +0 -80
- 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 -31
- package/dist/renderer/shaders/gradFill.js.map +0 -1
- package/dist/renderer/shaders/pathFill.js +0 -14
- package/dist/renderer/shaders/pathFill.js.map +0 -1
- package/dist/renderer/shaders/patternFill.js +0 -25
- 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 -34
- 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-DM2B87-g.d.ts +0 -356
|
@@ -1,135 +0,0 @@
|
|
|
1
|
-
import { hslToRgb as e } from "../renderer/math/color.js";
|
|
2
|
-
import { lerpColorArray as t } from "@weasel-js/paint";
|
|
3
|
-
import { linear as n, resolveEasing as r } from "@weasel-js/geom";
|
|
4
|
-
//#region src/animation/colorHelpers.ts
|
|
5
|
-
function i(e, t) {
|
|
6
|
-
if (e.length !== t.length) throw Error(`vertex colors: length mismatch (from=${e.length}, to=${t.length})`);
|
|
7
|
-
if (e.length === 0 || e.length % 4 != 0) throw Error(`vertex colors: length ${e.length} must be a positive multiple of 4`);
|
|
8
|
-
}
|
|
9
|
-
function a(e) {
|
|
10
|
-
if (e.interpolate) return e.interpolate;
|
|
11
|
-
let n = e.interpolation ?? "rgb";
|
|
12
|
-
return (e, r, i) => t(e, r, i, n);
|
|
13
|
-
}
|
|
14
|
-
var o = (e, t) => `colors:${e}:${t}`;
|
|
15
|
-
function s(e, t) {
|
|
16
|
-
i(t.from, t.to);
|
|
17
|
-
let n = a(t), { id: r, channel: s } = t;
|
|
18
|
-
return e.tween({
|
|
19
|
-
from: 0,
|
|
20
|
-
to: 1,
|
|
21
|
-
ms: t.ms,
|
|
22
|
-
easing: t.easing,
|
|
23
|
-
cancelKey: o(r, s),
|
|
24
|
-
interpolate: (e, t, n) => e + (t - e) * n,
|
|
25
|
-
onTick: (i) => {
|
|
26
|
-
e.colorOverrides.set(r, s, n(t.from, t.to, i));
|
|
27
|
-
},
|
|
28
|
-
onDone: () => {
|
|
29
|
-
e.colorOverrides.clear(r, s), t.onDone?.();
|
|
30
|
-
}
|
|
31
|
-
});
|
|
32
|
-
}
|
|
33
|
-
function c(e, t) {
|
|
34
|
-
i(t.from, t.to);
|
|
35
|
-
let n = a(t), { id: r, channel: s } = t;
|
|
36
|
-
return e.spring({
|
|
37
|
-
from: 0,
|
|
38
|
-
to: 1,
|
|
39
|
-
preset: t.preset,
|
|
40
|
-
stiffness: t.stiffness,
|
|
41
|
-
damping: t.damping,
|
|
42
|
-
mass: t.mass,
|
|
43
|
-
cancelKey: o(r, s),
|
|
44
|
-
interpolate: (e, t, n) => e + (t - e) * n,
|
|
45
|
-
onTick: (i) => {
|
|
46
|
-
let a = Math.max(0, Math.min(1, i));
|
|
47
|
-
e.colorOverrides.set(r, s, n(t.from, t.to, a));
|
|
48
|
-
},
|
|
49
|
-
onDone: () => {
|
|
50
|
-
e.colorOverrides.clear(r, s), t.onDone?.();
|
|
51
|
-
}
|
|
52
|
-
});
|
|
53
|
-
}
|
|
54
|
-
function l(e, t) {
|
|
55
|
-
let n = a(t), { id: i, channel: o } = t, s = t.direction ?? 1, c = r(t.easing);
|
|
56
|
-
e.colorOverrides.set(i, o, (e, r) => {
|
|
57
|
-
let i = e.length / 4;
|
|
58
|
-
if (i === 0) return e.slice();
|
|
59
|
-
let a = r / t.msPerCycle * i * s / i, o = a - Math.floor(a), l = c(o), u = ((Math.floor(a) + l) * i % i + i) % i, d = Math.floor(u), f = u - d, p = Array(e.length);
|
|
60
|
-
for (let t = 0; t < i; t++) {
|
|
61
|
-
let r = (t + d) % i * 4, a = (t + d + 1) % i * 4, o = [
|
|
62
|
-
e[r],
|
|
63
|
-
e[r + 1],
|
|
64
|
-
e[r + 2],
|
|
65
|
-
e[r + 3]
|
|
66
|
-
], s = [
|
|
67
|
-
e[a],
|
|
68
|
-
e[a + 1],
|
|
69
|
-
e[a + 2],
|
|
70
|
-
e[a + 3]
|
|
71
|
-
], c = n(o, s, f), l = t * 4;
|
|
72
|
-
p[l] = c[0], p[l + 1] = c[1], p[l + 2] = c[2], p[l + 3] = c[3];
|
|
73
|
-
}
|
|
74
|
-
return p;
|
|
75
|
-
});
|
|
76
|
-
let l = e.keepAlive();
|
|
77
|
-
return { cancel() {
|
|
78
|
-
e.colorOverrides.clear(i, o), l();
|
|
79
|
-
} };
|
|
80
|
-
}
|
|
81
|
-
function u(e, t) {
|
|
82
|
-
i(t.from, t.to);
|
|
83
|
-
let s = a(t), { id: c, channel: l, from: u, to: d, anchorMs: f, perAnchorDelay: p } = t, m = u.length / 4, h = r(t.easing), g = t.origin === "last" ? m - 1 : typeof t.origin == "number" ? Math.max(0, Math.min(m - 1, t.origin)) : 0, _ = Math.max(g, m - 1 - g) * p + f, v = (e) => {
|
|
84
|
-
let t = Array(u.length);
|
|
85
|
-
for (let n = 0; n < m; n++) {
|
|
86
|
-
let r = Math.abs(n - g) * p, i = Math.max(0, Math.min(1, (e - r) / f)), a = h(i), o = n * 4, c = [
|
|
87
|
-
u[o],
|
|
88
|
-
u[o + 1],
|
|
89
|
-
u[o + 2],
|
|
90
|
-
u[o + 3]
|
|
91
|
-
], l = [
|
|
92
|
-
d[o],
|
|
93
|
-
d[o + 1],
|
|
94
|
-
d[o + 2],
|
|
95
|
-
d[o + 3]
|
|
96
|
-
], m = s(c, l, a);
|
|
97
|
-
t[o] = m[0], t[o + 1] = m[1], t[o + 2] = m[2], t[o + 3] = m[3];
|
|
98
|
-
}
|
|
99
|
-
return t;
|
|
100
|
-
};
|
|
101
|
-
return e.colorOverrides.set(c, l, v(0)), e.tween({
|
|
102
|
-
from: 0,
|
|
103
|
-
to: 1,
|
|
104
|
-
ms: _,
|
|
105
|
-
easing: n,
|
|
106
|
-
cancelKey: o(c, l),
|
|
107
|
-
interpolate: (e, t, n) => e + (t - e) * n,
|
|
108
|
-
onTick: (t) => {
|
|
109
|
-
e.colorOverrides.set(c, l, v(t * _));
|
|
110
|
-
},
|
|
111
|
-
onDone: () => {
|
|
112
|
-
e.colorOverrides.clear(c, l), t.onDone?.();
|
|
113
|
-
}
|
|
114
|
-
});
|
|
115
|
-
}
|
|
116
|
-
function d(e, t = {}) {
|
|
117
|
-
let n = t.saturation ?? .8, r = t.lightness ?? .6, i = t.alpha ?? 1, a = [];
|
|
118
|
-
for (let t = 0; t < e; t++) {
|
|
119
|
-
let [o, s, c] = p(t * 360 / Math.max(1, e), n, r);
|
|
120
|
-
a.push(o, s, c, i);
|
|
121
|
-
}
|
|
122
|
-
return a;
|
|
123
|
-
}
|
|
124
|
-
function f(e, t, n, r, i = 1) {
|
|
125
|
-
let a = [];
|
|
126
|
-
for (let o = 0; o < e; o++) a.push(t, n, r, i);
|
|
127
|
-
return a;
|
|
128
|
-
}
|
|
129
|
-
function p(t, n, r) {
|
|
130
|
-
return e(t, n, r);
|
|
131
|
-
}
|
|
132
|
-
//#endregion
|
|
133
|
-
export { l as cycleVertexColors, d as rainbowVertexColors, f as solidVertexColors, c as springVertexColors, u as staggerVertexColors, s as tweenVertexColors };
|
|
134
|
-
|
|
135
|
-
//# sourceMappingURL=colorHelpers.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"colorHelpers.js","names":["validateLengths","from","to","resolveInterpolator","opts","space","lerpColorArray","a","b","t","cancelKeyFor","id","channel","tweenVertexColors","interp","animator","springVertexColors","clamped","cycleVertexColors","direction","easing","resolveEasing","n","base","cycles","tMs","cycleFrac","easedFrac","phase","phaseInt","phaseFrac","out","i","aIdx","bIdx","blended","k","releaseKeepAlive","staggerVertexColors","originIndex","totalMs","perAnchorDelay","anchorMs","colorsAt","startMs","localT","elapsedMs","eased","fSlice","tSlice","linear","rainbowVertexColors","saturation","lightness","alpha","r","g","hslToRgbUnit","solidVertexColors","hslToRgb","h","s","l"],"sources":["../../src/animation/colorHelpers.ts"],"sourcesContent":["import { linear, resolveEasing } from '@weasel-js/geom';\nimport type {\n AnimationHandle,\n Animator,\n EasingSpec,\n SpringPresetName,\n} from './types';\nimport type { VertexColorChannel } from './colorRegistry';\nimport { lerpColorArray, type ColorSpace } from '@weasel-js/paint';\nimport { hslToRgb } from '../renderer/math/color';\n\n/**\n * Color interpolator: receives two flat RGBA float arrays (values in\n * 0..1, the renderer's color space — same shape as\n * `stroke.vertexColors`) and a normalized progress `t` in 0..1.\n * Returns the same-length blended array, also in 0..1 floats. Override\n * the default per-channel lerp via `TweenVertexColorsOptions.interpolate`\n * when a custom color-space or shaping is needed.\n */\nexport type ColorInterpolate = (\n from: readonly number[],\n to: readonly number[],\n t: number,\n) => number[];\n\n/** Options for `tweenVertexColors`. */\nexport interface TweenVertexColorsOptions {\n id: string;\n channel: VertexColorChannel;\n /** Per-anchor RGBA, flat, in 0..1 floats (matches the renderer's\n * `stroke.vertexColors` / `PathDrawCommand.vertexColors` color space).\n * Length must equal `from.length`. */\n to: readonly number[];\n /** Per-anchor RGBA, flat, in 0..1 floats. Length must equal `to.length`\n * and be a positive multiple of 4. */\n from: readonly number[];\n ms: number;\n easing?: EasingSpec;\n interpolation?: ColorSpace;\n interpolate?: ColorInterpolate;\n onDone?: () => void;\n}\n\nfunction validateLengths(from: readonly number[], to: readonly number[]): void {\n if (from.length !== to.length) {\n throw new Error(\n `vertex colors: length mismatch (from=${from.length}, to=${to.length})`,\n );\n }\n if (from.length === 0 || from.length % 4 !== 0) {\n throw new Error(\n `vertex colors: length ${from.length} must be a positive multiple of 4`,\n );\n }\n}\n\nfunction resolveInterpolator(\n opts: { interpolation?: ColorSpace; interpolate?: ColorInterpolate },\n): ColorInterpolate {\n if (opts.interpolate) return opts.interpolate;\n const space: ColorSpace = opts.interpolation ?? 'rgb';\n return (a, b, t) => lerpColorArray(a, b, t, space);\n}\n\nconst cancelKeyFor = (id: string, channel: VertexColorChannel): string =>\n `colors:${id}:${channel}`;\n\n/**\n * Animate one node's per-anchor colors from `from` to `to` over `ms`.\n *\n * The colors are published to the animator's `colorOverrides` registry rather\n * than written into the scene, so nothing is recorded in history and the\n * node's own data is untouched; the override is dropped when the animation\n * finishes. Starting another color animation on the same node and channel\n * cancels this one.\n */\nexport function tweenVertexColors(\n animator: Animator,\n opts: TweenVertexColorsOptions,\n): AnimationHandle {\n validateLengths(opts.from, opts.to);\n const interp = resolveInterpolator(opts);\n const { id, channel } = opts;\n return animator.tween<number>({\n from: 0,\n to: 1,\n ms: opts.ms,\n easing: opts.easing,\n cancelKey: cancelKeyFor(id, channel),\n interpolate: (a, b, t) => a + (b - a) * t,\n onTick: (t) => {\n animator.colorOverrides.set(id, channel, interp(opts.from, opts.to, t));\n },\n onDone: () => {\n animator.colorOverrides.clear(id, channel);\n opts.onDone?.();\n },\n });\n}\n\n/** Options for `springVertexColors`. */\nexport interface SpringVertexColorsOptions {\n id: string;\n channel: VertexColorChannel;\n /** Per-anchor RGBA in 0..1 floats. See `TweenVertexColorsOptions.to`. */\n to: readonly number[];\n /** Per-anchor RGBA in 0..1 floats. See `TweenVertexColorsOptions.from`. */\n from: readonly number[];\n preset?: SpringPresetName;\n stiffness?: number;\n damping?: number;\n mass?: number;\n interpolation?: ColorSpace;\n interpolate?: ColorInterpolate;\n onDone?: () => void;\n}\n\n/** `tweenVertexColors` driven by a spring instead of a duration. Same override\n * semantics. */\nexport function springVertexColors(\n animator: Animator,\n opts: SpringVertexColorsOptions,\n): AnimationHandle {\n validateLengths(opts.from, opts.to);\n const interp = resolveInterpolator(opts);\n const { id, channel } = opts;\n return animator.spring<number>({\n from: 0,\n to: 1,\n preset: opts.preset,\n stiffness: opts.stiffness,\n damping: opts.damping,\n mass: opts.mass,\n cancelKey: cancelKeyFor(id, channel),\n interpolate: (a, b, t) => a + (b - a) * t,\n onTick: (t) => {\n const clamped = Math.max(0, Math.min(1, t));\n animator.colorOverrides.set(id, channel, interp(opts.from, opts.to, clamped));\n },\n onDone: () => {\n animator.colorOverrides.clear(id, channel);\n opts.onDone?.();\n },\n });\n}\n\n/** Options for `cycleVertexColors`. */\nexport interface CycleVertexColorsOptions {\n id: string;\n channel: VertexColorChannel;\n msPerCycle: number;\n direction?: 1 | -1;\n easing?: EasingSpec;\n interpolation?: ColorSpace;\n /** Custom interpolator. Receives two RGBA arrays in 0..1 floats and a\n * progress `t` in 0..1; returns the blended array in 0..1 floats. */\n interpolate?: ColorInterpolate;\n}\n\n/** Removes an installed color cycle. Unlike the other color helpers this is\n * not an `AnimationHandle`, because a cycle has no progress to pause or\n * scale — it only ends. */\nexport interface CycleHandle {\n cancel(): void;\n}\n\n/** Register a function override that phase-rotates the base color array\n * along the path index. Returns a handle whose `cancel()` removes the\n * override.\n *\n * The override computes its value purely from `performance.now()`, so\n * there's no per-frame progress to register with the animator's tick\n * loop. To keep the loop alive (so `<SceneCanvas animator>`'s onTick\n * subscription continues firing redraws while the cycle is installed),\n * cycleVertexColors holds an `animator.keepAlive()` entry for the\n * lifetime of the cycle; `cancel()` releases it. */\nexport function cycleVertexColors(\n animator: Animator,\n opts: CycleVertexColorsOptions,\n): CycleHandle {\n const interp = resolveInterpolator(opts);\n const { id, channel } = opts;\n const direction = opts.direction ?? 1;\n const easing = resolveEasing(opts.easing);\n\n const override = (base: readonly number[], tMs: number): number[] => {\n const n = base.length / 4;\n if (n === 0) return base.slice();\n const raw = (tMs / opts.msPerCycle) * n * direction;\n const cycles = raw / n;\n const cycleFrac = cycles - Math.floor(cycles);\n const easedFrac = easing(cycleFrac);\n const easedRaw = (Math.floor(cycles) + easedFrac) * n;\n const phase = ((easedRaw % n) + n) % n;\n const phaseInt = Math.floor(phase);\n const phaseFrac = phase - phaseInt;\n\n const out = new Array<number>(base.length);\n for (let i = 0; i < n; i++) {\n const aIdx = ((i + phaseInt) % n) * 4;\n const bIdx = ((i + phaseInt + 1) % n) * 4;\n const a = [base[aIdx], base[aIdx + 1], base[aIdx + 2], base[aIdx + 3]];\n const b = [base[bIdx], base[bIdx + 1], base[bIdx + 2], base[bIdx + 3]];\n const blended = interp(a, b, phaseFrac);\n const k = i * 4;\n out[k] = blended[0];\n out[k + 1] = blended[1];\n out[k + 2] = blended[2];\n out[k + 3] = blended[3];\n }\n return out;\n };\n\n animator.colorOverrides.set(id, channel, override);\n // Cycle's \"value\" is a function of wall-clock time, not a tween-style\n // progress. We don't register a per-frame ticking animation, so without\n // an explicit keep-alive entry the animator's RAF loop would idle and\n // SceneCanvas's onTick redraw subscription would never fire. Keep the\n // loop running until cancel().\n const releaseKeepAlive = animator.keepAlive();\n\n return {\n cancel(): void {\n animator.colorOverrides.clear(id, channel);\n releaseKeepAlive();\n },\n };\n}\n\n/** Options for `staggerVertexColors`. `origin` picks which anchor the wave\n * starts from and `perAnchorDelay` how far behind each successive anchor\n * runs. */\nexport interface StaggerVertexColorsOptions {\n id: string;\n channel: VertexColorChannel;\n /** Per-anchor RGBA in 0..1 floats. See `TweenVertexColorsOptions.to`. */\n to: readonly number[];\n /** Per-anchor RGBA in 0..1 floats. See `TweenVertexColorsOptions.from`. */\n from: readonly number[];\n anchorMs: number;\n perAnchorDelay: number;\n origin?: 'first' | 'last' | number;\n easing?: EasingSpec;\n interpolation?: ColorSpace;\n interpolate?: ColorInterpolate;\n onDone?: () => void;\n}\n\n/** Run the same color change across a node's anchors as a wave, each anchor\n * starting later than the one before it. Same override semantics as\n * `tweenVertexColors`. */\nexport function staggerVertexColors(\n animator: Animator,\n opts: StaggerVertexColorsOptions,\n): AnimationHandle {\n validateLengths(opts.from, opts.to);\n const interp = resolveInterpolator(opts);\n const { id, channel, from, to, anchorMs, perAnchorDelay } = opts;\n const n = from.length / 4;\n const easing = resolveEasing(opts.easing);\n\n const originIndex =\n opts.origin === 'last' ? n - 1 :\n typeof opts.origin === 'number' ? Math.max(0, Math.min(n - 1, opts.origin)) :\n 0;\n\n const maxDistance = Math.max(originIndex, n - 1 - originIndex);\n const totalMs = maxDistance * perAnchorDelay + anchorMs;\n\n const colorsAt = (elapsedMs: number): number[] => {\n const out = new Array<number>(from.length);\n for (let i = 0; i < n; i++) {\n const distance = Math.abs(i - originIndex);\n const startMs = distance * perAnchorDelay;\n const localT = Math.max(0, Math.min(1, (elapsedMs - startMs) / anchorMs));\n const eased = easing(localT);\n const k = i * 4;\n const fSlice = [from[k], from[k + 1], from[k + 2], from[k + 3]];\n const tSlice = [to[k], to[k + 1], to[k + 2], to[k + 3]];\n const blended = interp(fSlice, tSlice, eased);\n out[k] = blended[0];\n out[k + 1] = blended[1];\n out[k + 2] = blended[2];\n out[k + 3] = blended[3];\n }\n return out;\n };\n\n // A plain array, not a function override: painters call those with their\n // own clock (`performance.now()`), not time since this stagger began.\n animator.colorOverrides.set(id, channel, colorsAt(0));\n\n return animator.tween<number>({\n from: 0,\n to: 1,\n ms: totalMs,\n easing: linear,\n cancelKey: cancelKeyFor(id, channel),\n interpolate: (a, b, t) => a + (b - a) * t,\n onTick: (t) => {\n animator.colorOverrides.set(id, channel, colorsAt(t * totalMs));\n },\n onDone: () => {\n animator.colorOverrides.clear(id, channel);\n opts.onDone?.();\n },\n });\n}\n\n// ─── Color-array constructors ───────────────────────────────────────\n//\n// Helpers that build the per-anchor RGBA arrays the tween/cycle/stagger\n// helpers above (and `stroke.vertexColors` on draw commands) consume.\n// Values are in the 0..1 range the renderer expects — emitting bytes\n// (0..255) clamps every channel to 1.0 on the GPU and renders white.\n\n/** Build an n-anchor rainbow RGBA array sweeping the hue wheel. The\n * output is suitable to pass directly into `stroke.vertexColors`,\n * `tweenVertexColors({ from: rainbowVertexColors(n) })`, or any\n * other API that wants per-anchor color floats. */\nexport function rainbowVertexColors(\n n: number,\n opts: { saturation?: number; lightness?: number; alpha?: number } = {},\n): number[] {\n const saturation = opts.saturation ?? 0.8;\n const lightness = opts.lightness ?? 0.6;\n const alpha = opts.alpha ?? 1;\n const out: number[] = [];\n for (let i = 0; i < n; i++) {\n const h = (i * 360) / Math.max(1, n);\n const [r, g, b] = hslToRgbUnit(h, saturation, lightness);\n out.push(r, g, b, alpha);\n }\n return out;\n}\n\n/** Build an n-anchor solid RGBA array. Shorthand for\n * `[r, g, b, a, r, g, b, a, …]` — the array a `tweenVertexColors`\n * `to`-target typically needs. */\nexport function solidVertexColors(\n n: number,\n r: number,\n g: number,\n b: number,\n a = 1,\n): number[] {\n const out: number[] = [];\n for (let i = 0; i < n; i++) out.push(r, g, b, a);\n return out;\n}\n\n/** HSL → RGB in 0..1 (hue in degrees). Delegates to the single internal\n * implementation in `renderer/math/color.ts` so there's only one HSL→RGB\n * formula in the package. Kept local so consumers building hue-cycled\n * color arrays via `huesweepVertexColors` don't have to roll their own. */\nfunction hslToRgbUnit(h: number, s: number, l: number): [number, number, number] {\n return hslToRgb(h, s, l);\n}\n"],"mappings":"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"}
|
|
@@ -1,37 +0,0 @@
|
|
|
1
|
-
//#region src/animation/colorRegistry.ts
|
|
2
|
-
var e = class {
|
|
3
|
-
map = /* @__PURE__ */ new Map();
|
|
4
|
-
_version = 0;
|
|
5
|
-
set(e, t, n) {
|
|
6
|
-
let r = this.map.get(e);
|
|
7
|
-
r || (r = {}, this.map.set(e, r)), r[t] = n, this._version++;
|
|
8
|
-
}
|
|
9
|
-
clear(e, t) {
|
|
10
|
-
let n = this.map.get(e);
|
|
11
|
-
n && t in n && (delete n[t], !n.fill && !n.stroke && this.map.delete(e), this._version++);
|
|
12
|
-
}
|
|
13
|
-
clearAll() {
|
|
14
|
-
this.map.size !== 0 && (this.map.clear(), this._version++);
|
|
15
|
-
}
|
|
16
|
-
get(e, t) {
|
|
17
|
-
return this.map.get(e)?.[t];
|
|
18
|
-
}
|
|
19
|
-
has(e) {
|
|
20
|
-
return this.map.has(e);
|
|
21
|
-
}
|
|
22
|
-
resolve(e, t, n, r) {
|
|
23
|
-
let i = this.get(e, t);
|
|
24
|
-
if (i === void 0) return n;
|
|
25
|
-
if (typeof i != "function") return i;
|
|
26
|
-
if (n === void 0) return;
|
|
27
|
-
let a = i(n, r);
|
|
28
|
-
return a.length === n.length ? a : n;
|
|
29
|
-
}
|
|
30
|
-
version() {
|
|
31
|
-
return this._version;
|
|
32
|
-
}
|
|
33
|
-
};
|
|
34
|
-
//#endregion
|
|
35
|
-
export { e as ColorOverrideRegistry };
|
|
36
|
-
|
|
37
|
-
//# sourceMappingURL=colorRegistry.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"colorRegistry.js","names":["ColorOverrideRegistry","entry","id","channel","override","base","result","tMs"],"sources":["../../src/animation/colorRegistry.ts"],"sourcesContent":["/** Which of a node's two per-anchor color arrays an override applies to. */\nexport type VertexColorChannel = 'fill' | 'stroke';\n\n/** Function-form override: receives the consumer-supplied base color\n * array and the current animation timestamp (ms, from the animator's\n * clock). Returns a flat RGBA float array (values in 0..1, matching\n * the renderer's `stroke.vertexColors` / `PathDrawCommand.vertexColors`\n * color space) of the same length as `base`. */\nexport type ColorOverrideFn = (base: readonly number[], tMs: number) => number[];\n\n/** Either a static per-anchor RGBA float array (0..1) or a function-form\n * override (see {@link ColorOverrideFn}). */\nexport type ColorOverride = readonly number[] | ColorOverrideFn;\n\ninterface NodeOverrides {\n fill?: ColorOverride;\n stroke?: ColorOverride;\n}\n\n/** Per-node, per-channel store of color overrides. Attached to `useAnimator` as\n * `animator.colorOverrides`; painted onto scene nodes by `<SceneCanvas animator>`\n * and onto a `createPathLayer`'s nodes by its `colorOverrides` option. */\nexport class ColorOverrideRegistry {\n private readonly map = new Map<string, NodeOverrides>();\n private _version = 0;\n\n set(id: string, channel: VertexColorChannel, override: ColorOverride): void {\n let entry = this.map.get(id);\n if (!entry) {\n entry = {};\n this.map.set(id, entry);\n }\n entry[channel] = override;\n this._version++;\n }\n\n clear(id: string, channel: VertexColorChannel): void {\n const entry = this.map.get(id);\n if (!entry) return;\n if (!(channel in entry)) return;\n delete entry[channel];\n if (!entry.fill && !entry.stroke) this.map.delete(id);\n this._version++;\n }\n\n clearAll(): void {\n if (this.map.size === 0) return;\n this.map.clear();\n this._version++;\n }\n\n get(id: string, channel: VertexColorChannel): ColorOverride | undefined {\n return this.map.get(id)?.[channel];\n }\n\n /** Whether anything overrides `id`, on either channel. */\n has(id: string): boolean {\n return this.map.has(id);\n }\n\n /**\n * The colors to paint on `id`'s `channel`, given the colors the painter would\n * otherwise paint and the frame's timestamp. A function override needs that\n * `base` and must return an array of its length; failing either, `base`\n * stands.\n */\n resolve(\n id: string,\n channel: VertexColorChannel,\n base: readonly number[] | undefined,\n tMs: number,\n ): readonly number[] | undefined {\n const override = this.get(id, channel);\n if (override === undefined) return base;\n if (typeof override !== 'function') return override;\n if (base === undefined) return undefined;\n const result = override(base, tMs);\n return result.length === base.length ? result : base;\n }\n\n version(): number {\n return this._version;\n }\n}\n"],"mappings":";AAsBA,IAAaA,IAAb,MAAmC;CACjC,sBAAuB,IAAI,IAA2B;CACtD,WAAmB;CAEnB,IAAI,GAAY,GAA6B,GAA+B;EAC1E,IAAIC,IAAQ,KAAK,IAAI,IAAIC,CAAE;EAM3B,AALKD,MACH,IAAQ,CAAC,GACT,KAAK,IAAI,IAAIC,GAAID,CAAK,IAExB,EAAME,KAAWC,GACjB,KAAK;CACP;CAEA,MAAM,GAAY,GAAmC;EACnD,IAAMH,IAAQ,KAAK,IAAI,IAAIC,CAAE;EAC7B,AAAKD,KACCE,KAAWF,MACjB,OAAOA,EAAME,IACT,CAACF,EAAM,QAAQ,CAACA,EAAM,UAAQ,KAAK,IAAI,OAAOC,CAAE,GACpD,KAAK;CACP;CAEA,WAAiB;EACf,AAAI,KAAK,IAAI,SAAS,MACtB,KAAK,IAAI,MAAM,GACf,KAAK;CACP;CAEA,IAAI,GAAY,GAAwD;EACtE,OAAO,KAAK,IAAI,IAAIA,CAAE,CAAC,GAAGC;CAC5B;CAGA,IAAI,GAAqB;EACvB,OAAO,KAAK,IAAI,IAAID,CAAE;CACxB;CAQA,QACE,GACA,GACA,GACA,GAC+B;EAC/B,IAAME,IAAW,KAAK,IAAIF,GAAIC,CAAO;EACrC,IAAIC,MAAa,KAAA,GAAW,OAAOC;EACnC,IAAI,OAAOD,KAAa,YAAY,OAAOA;EAC3C,IAAIC,MAAS,KAAA,GAAW;EACxB,IAAMC,IAASF,EAASC,GAAME,CAAG;EACjC,OAAOD,EAAO,WAAWD,EAAK,SAASC,IAASD;CAClD;CAEA,UAAkB;EAChB,OAAO,KAAK;CACd;AACF"}
|
|
@@ -1,36 +0,0 @@
|
|
|
1
|
-
import { isPlainObject as e } from "../../core/isPlainObject.js";
|
|
2
|
-
//#region src/animation/engine/axes.ts
|
|
3
|
-
function t(t) {
|
|
4
|
-
if (typeof t == "number") return {
|
|
5
|
-
count: 1,
|
|
6
|
-
shape: "number",
|
|
7
|
-
to: (e) => [e],
|
|
8
|
-
from: (e, t = 0) => e[t]
|
|
9
|
-
};
|
|
10
|
-
if (Array.isArray(t)) return t.every((e) => typeof e == "number") ? {
|
|
11
|
-
count: t.length,
|
|
12
|
-
shape: `array:${t.length}`,
|
|
13
|
-
to: (e) => e.slice(),
|
|
14
|
-
from: (e, n = 0) => {
|
|
15
|
-
let r = Array(t.length);
|
|
16
|
-
for (let t = 0; t < r.length; t++) r[t] = e[n + t];
|
|
17
|
-
return r;
|
|
18
|
-
}
|
|
19
|
-
} : null;
|
|
20
|
-
if (!e(t)) return null;
|
|
21
|
-
let n = Object.keys(t).sort();
|
|
22
|
-
return n.length === 0 || !n.every((e) => typeof t[e] == "number") ? null : {
|
|
23
|
-
count: n.length,
|
|
24
|
-
shape: `object:${JSON.stringify(n)}`,
|
|
25
|
-
to: (e) => n.map((t) => e[t]),
|
|
26
|
-
from: (e, t = 0) => {
|
|
27
|
-
let r = {};
|
|
28
|
-
for (let i = 0; i < n.length; i++) r[n[i]] = e[t + i];
|
|
29
|
-
return r;
|
|
30
|
-
}
|
|
31
|
-
};
|
|
32
|
-
}
|
|
33
|
-
//#endregion
|
|
34
|
-
export { t as axesOf };
|
|
35
|
-
|
|
36
|
-
//# sourceMappingURL=axes.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"axes.js","names":["axesOf","sample","v","a","at","x","out","i","isPlainObject","keys","k"],"sources":["../../../src/animation/engine/axes.ts"],"sourcesContent":["import { isPlainObject } from '../../core/isPlainObject';\n\n/** How a value maps to the flat numbers blits moves, and back. */\nexport interface Axes<T> {\n count: number;\n /** Equal for two values exactly when their axes line up one for one. */\n shape: string;\n to(v: T): number[];\n /** The value whose `count` axes start at `at` in `a`. */\n from(a: ArrayLike<number>, at?: number): T;\n}\n\n/** The axes of `sample`'s shape: a number, a plain array of numbers, or a plain object whose\n * fields are all numbers. Null for any other shape, which blits cannot move. */\nexport function axesOf<T>(sample: T): Axes<T> | null {\n if (typeof sample === 'number') {\n return { count: 1, shape: 'number', to: (v) => [v as number], from: (a, at = 0) => a[at] as T };\n }\n if (Array.isArray(sample)) {\n if (!sample.every((x) => typeof x === 'number')) return null;\n return {\n count: sample.length,\n shape: `array:${sample.length}`,\n to: (v) => (v as number[]).slice(),\n from: (a, at = 0) => {\n const out = new Array<number>(sample.length);\n for (let i = 0; i < out.length; i++) out[i] = a[at + i]!;\n return out as T;\n },\n };\n }\n if (!isPlainObject(sample)) return null;\n const keys = Object.keys(sample).sort();\n if (keys.length === 0 || !keys.every((k) => typeof sample[k] === 'number')) return null;\n return {\n count: keys.length,\n shape: `object:${JSON.stringify(keys)}`,\n to: (v) => keys.map((k) => (v as Record<string, number>)[k]!),\n from: (a, at = 0) => {\n const out: Record<string, number> = {};\n for (let i = 0; i < keys.length; i++) out[keys[i]!] = a[at + i]!;\n return out as T;\n },\n };\n}\n"],"mappings":";;AAcA,SAAgBA,EAAU,GAA2B;CACnD,IAAI,OAAOC,KAAW,UACpB,OAAO;EAAE,OAAO;EAAG,OAAO;EAAU,KAAK,MAAM,CAACC,CAAW;EAAG,OAAO,GAAG,IAAK,MAAMC,EAAEC;CAAS;CAEhG,IAAI,MAAM,QAAQH,CAAM,GAEtB,OADKA,EAAO,OAAO,MAAM,OAAOI,KAAM,QAAQ,IACvC;EACL,OAAOJ,EAAO;EACd,OAAO,SAASA,EAAO;EACvB,KAAK,MAAOC,EAAe,MAAM;EACjC,OAAO,GAAG,IAAK,MAAM;GACnB,IAAMI,IAAU,MAAcL,EAAO,MAAM;GAC3C,KAAK,IAAIM,IAAI,GAAGA,IAAID,EAAI,QAAQ,KAAK,EAAIC,KAAKJ,EAAEC,IAAKG;GACrD,OAAOD;EACT;CACF,IAVwD;CAY1D,IAAI,CAACE,EAAcP,CAAM,GAAG,OAAO;CACnC,IAAMQ,IAAO,OAAO,KAAKR,CAAM,CAAC,CAAC,KAAK;CAEtC,OADIQ,EAAK,WAAW,KAAK,CAACA,EAAK,OAAO,MAAM,OAAOR,EAAOS,MAAO,QAAQ,IAAU,OAC5E;EACL,OAAOD,EAAK;EACZ,OAAO,UAAU,KAAK,UAAUA,CAAI;EACpC,KAAK,MAAMA,EAAK,KAAK,MAAOP,EAA6BQ,EAAG;EAC5D,OAAO,GAAG,IAAK,MAAM;GACnB,IAAMJ,IAA8B,CAAC;GACrC,KAAK,IAAI,IAAI,GAAG,IAAIG,EAAK,QAAQ,KAAK,EAAIA,EAAK,MAAON,EAAEC,IAAK;GAC7D,OAAOE;EACT;CACF;AACF"}
|
|
@@ -1,170 +0,0 @@
|
|
|
1
|
-
import { glide as e, kit as t, mix as n, spring as r, sum as i, tween as a, vec as o } from "@msb235/blits";
|
|
2
|
-
//#region src/animation/engine/codec.ts
|
|
3
|
-
function s() {
|
|
4
|
-
let s = /* @__PURE__ */ new Map(), c = /* @__PURE__ */ new Map(), l = [], u = 0, d = (e) => {
|
|
5
|
-
let r = s.get(e);
|
|
6
|
-
if (!r) {
|
|
7
|
-
let a = n(t({ v: o(e, i()) }));
|
|
8
|
-
a.sync(u), r = {
|
|
9
|
-
axes: e,
|
|
10
|
-
mix: a,
|
|
11
|
-
ids: [],
|
|
12
|
-
subs: [],
|
|
13
|
-
pending: /* @__PURE__ */ new Set(),
|
|
14
|
-
dirty: !1,
|
|
15
|
-
idle: 0,
|
|
16
|
-
cols: { v: /* @__PURE__ */ new Float64Array() }
|
|
17
|
-
}, s.set(e, r);
|
|
18
|
-
}
|
|
19
|
-
return r;
|
|
20
|
-
}, f = (e, t) => {
|
|
21
|
-
e.slot = -1, e.cols = e.held, e.at = 0, e.lane.pending.add(t), e.lane.dirty = !0;
|
|
22
|
-
}, p = (e, t) => {
|
|
23
|
-
let n = e.lane;
|
|
24
|
-
if (n.dirty = !0, e.slot < 0) {
|
|
25
|
-
n.pending.delete(t);
|
|
26
|
-
return;
|
|
27
|
-
}
|
|
28
|
-
let r = n.ids.pop(), i = n.subs.pop();
|
|
29
|
-
if (r === t) return;
|
|
30
|
-
let a = n.axes, o = n.ids.length * a;
|
|
31
|
-
n.cols.v.copyWithin(e.slot * a, o, o + a), n.ids[e.slot] = r, n.subs[e.slot] = i, i.slot = e.slot, i.at = e.slot * a;
|
|
32
|
-
}, m = (e) => {
|
|
33
|
-
let t = e.ids.slice(), n = e.subs;
|
|
34
|
-
for (let r of e.pending) {
|
|
35
|
-
let i = c.get(r);
|
|
36
|
-
i.slot = t.length, i.at = i.slot * e.axes, i.cols = e.cols.v, t.push(r), n.push(i);
|
|
37
|
-
}
|
|
38
|
-
if (e.pending.clear(), e.ids = t, e.cols.v.length !== t.length * e.axes) {
|
|
39
|
-
e.cols = { v: new Float64Array(t.length * e.axes) };
|
|
40
|
-
for (let t of n) t.cols = e.cols.v;
|
|
41
|
-
}
|
|
42
|
-
e.dirty = !1;
|
|
43
|
-
}, h = (t, n, i) => {
|
|
44
|
-
let a = i.to == null ? e("v", {
|
|
45
|
-
from: i.from,
|
|
46
|
-
ms: 1e3 * i.mass / i.damping
|
|
47
|
-
}) : r("v", {
|
|
48
|
-
from: i.from,
|
|
49
|
-
to: i.from,
|
|
50
|
-
stiffness: i.stiffness,
|
|
51
|
-
damping: i.damping,
|
|
52
|
-
mass: i.mass
|
|
53
|
-
}), o = t.mix.cue({
|
|
54
|
-
patch: a,
|
|
55
|
-
subjects: [n]
|
|
56
|
-
});
|
|
57
|
-
return i.to && a.to(n, i.to, 0), a.push(n, i.velocity, 0), {
|
|
58
|
-
handle: o,
|
|
59
|
-
patch: a
|
|
60
|
-
};
|
|
61
|
-
}, g = (e) => {
|
|
62
|
-
let t = c.get(e);
|
|
63
|
-
if (!t) throw Error(`codec: no subject ${e}`);
|
|
64
|
-
return t;
|
|
65
|
-
}, _ = (e, t) => e.patch.read(t) ?? {
|
|
66
|
-
value: e.spring.from.slice(),
|
|
67
|
-
velocity: e.spring.velocity.slice()
|
|
68
|
-
};
|
|
69
|
-
function v(e) {
|
|
70
|
-
let t = c.get(e);
|
|
71
|
-
t && (t.queued ? t.queued = void 0 : (t.handle.fade({ over: 0 }), t.lane.mix.drop(e)), p(t, e), c.delete(e));
|
|
72
|
-
}
|
|
73
|
-
return {
|
|
74
|
-
frame(e) {
|
|
75
|
-
for (let e of l) {
|
|
76
|
-
let t = e.queued;
|
|
77
|
-
if (!t) continue;
|
|
78
|
-
e.queued = void 0;
|
|
79
|
-
let n = a("v", {
|
|
80
|
-
from: t.from.slice(),
|
|
81
|
-
to: t.from.slice(),
|
|
82
|
-
ms: t.ms,
|
|
83
|
-
ease: t.ease
|
|
84
|
-
});
|
|
85
|
-
e.handle = e.lane.mix.cue({
|
|
86
|
-
patch: n,
|
|
87
|
-
subjects: [t.id]
|
|
88
|
-
}), e.patch = n, n.to(t.id, t.to.slice(), 0), e.queuedRate !== void 0 && (e.handle.rate = e.queuedRate);
|
|
89
|
-
}
|
|
90
|
-
l.length = 0, u += e;
|
|
91
|
-
for (let e of s.values()) {
|
|
92
|
-
if (e.dirty && m(e), e.ids.length === 0 && ++e.idle >= 2) {
|
|
93
|
-
s.delete(e.axes);
|
|
94
|
-
continue;
|
|
95
|
-
}
|
|
96
|
-
e.mix.sync(u), e.ids.length !== 0 && (e.idle = 0, e.mix.pull(e.ids, e.cols));
|
|
97
|
-
}
|
|
98
|
-
},
|
|
99
|
-
tween(e) {
|
|
100
|
-
if (e.to.length !== e.from.length) throw Error(`codec: tween ${e.id} goes from ${e.from.length} axes to ${e.to.length}`);
|
|
101
|
-
let t = d(e.from.length), n = Float64Array.from(e.from), r = {
|
|
102
|
-
kind: "tween",
|
|
103
|
-
lane: t,
|
|
104
|
-
slot: -1,
|
|
105
|
-
held: n,
|
|
106
|
-
cols: n,
|
|
107
|
-
at: 0,
|
|
108
|
-
queued: e
|
|
109
|
-
};
|
|
110
|
-
return c.set(e.id, r), f(r, e.id), l.push(r), r;
|
|
111
|
-
},
|
|
112
|
-
spring(e) {
|
|
113
|
-
let t = {
|
|
114
|
-
...e,
|
|
115
|
-
from: e.from.slice(),
|
|
116
|
-
to: e.to && e.to.slice(),
|
|
117
|
-
velocity: e.velocity.slice()
|
|
118
|
-
}, n = d(t.axes), { handle: r, patch: i } = h(n, e.id, t), a = Float64Array.from(t.from), o = {
|
|
119
|
-
kind: "spring",
|
|
120
|
-
lane: n,
|
|
121
|
-
handle: r,
|
|
122
|
-
patch: i,
|
|
123
|
-
spring: t,
|
|
124
|
-
slot: -1,
|
|
125
|
-
held: a,
|
|
126
|
-
cols: a,
|
|
127
|
-
at: 0
|
|
128
|
-
};
|
|
129
|
-
c.set(e.id, o), f(o, e.id);
|
|
130
|
-
let s = e.id;
|
|
131
|
-
return o.motion = () => _(o, s), o;
|
|
132
|
-
},
|
|
133
|
-
retarget(e, t) {
|
|
134
|
-
let n = g(e);
|
|
135
|
-
if (n.kind === "tween") throw Error(`codec: subject ${e} is a tween; tweens are not retargeted`);
|
|
136
|
-
let r = n.spring;
|
|
137
|
-
if (t == null == (r.to == null)) {
|
|
138
|
-
if (!t) return;
|
|
139
|
-
r.to = t.slice(), n.patch.to(e, r.to);
|
|
140
|
-
return;
|
|
141
|
-
}
|
|
142
|
-
let i = _(n, e), a = n.handle.rate, o = {
|
|
143
|
-
...r,
|
|
144
|
-
to: t && t.slice(),
|
|
145
|
-
from: i.value,
|
|
146
|
-
velocity: i.velocity
|
|
147
|
-
};
|
|
148
|
-
n.handle.fade({ over: 0 });
|
|
149
|
-
let { handle: s, patch: c } = h(n.lane, e, o);
|
|
150
|
-
s.rate = a, n.handle = s, n.patch = c, n.spring = o;
|
|
151
|
-
},
|
|
152
|
-
push(e, t) {
|
|
153
|
-
let n = g(e);
|
|
154
|
-
n.spring && !n.patch.read(e) && (n.spring.velocity = t.slice()), n.patch.push?.(e, t);
|
|
155
|
-
},
|
|
156
|
-
rate(e, t) {
|
|
157
|
-
let n = g(e);
|
|
158
|
-
n.queued ? n.queuedRate = t : n.handle.rate = t;
|
|
159
|
-
},
|
|
160
|
-
stop: v,
|
|
161
|
-
has: (e) => c.has(e),
|
|
162
|
-
voiceCount() {
|
|
163
|
-
return c.size;
|
|
164
|
-
}
|
|
165
|
-
};
|
|
166
|
-
}
|
|
167
|
-
//#endregion
|
|
168
|
-
export { s as createCodec };
|
|
169
|
-
|
|
170
|
-
//# sourceMappingURL=codec.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"codec.js","names":["springPatch","tweenPatch","createCodec","lanes","subjects","queue","time","laneOf","l","axes","m","mix","kit","vec","sum","join","s","id","depart","last","moved","n","from","rebuild","ids","subs","springVoice","patch","sp","glide","spring","handle","get","current","stop","sub","q","tween","dtMs","held","to","now","rate","next","velocity"],"sources":["../../../src/animation/engine/codec.ts"],"sourcesContent":["import {\n glide, kit, mix, spring as springPatch, sum, tween as tweenPatch, vec,\n type Handle, type Mix, type Motion, type Patch,\n} from '@msb235/blits';\n\nexport interface TweenStart {\n id: number; ms: number; ease: (u: number) => number;\n /** Endpoints as axes. A tween whose caller blends its own values passes [0] and [1]. */\n from: number[]; to: number[];\n}\nexport interface SpringStart {\n id: number; axes: number;\n from: number[]; to: number[] | null; velocity: number[];\n stiffness: number; damping: number; mass: number;\n}\n/** One subject's value, kept current in place by the codec. Valid until the subject stops. */\nexport interface Reader {\n /** The array holding the subject's axes as the last `frame` read them, from `at` on. It is the\n * codec's own, shared with other subjects and valid until the next `frame`. */\n readonly cols: Float64Array;\n /** Where the subject's axes start in `cols`. */\n readonly at: number;\n}\nexport interface SpringReader extends Reader {\n /** Position and velocity at the last `frame`. */\n motion(): { value: number[]; velocity: number[] };\n}\nexport interface Codec {\n /** Advances the codec's clock by `dtMs` of animator time, then reads every subject. */\n frame(dtMs: number): void;\n tween(s: TweenStart): Reader;\n spring(s: SpringStart): SpringReader;\n retarget(id: number, to: number[] | null): void;\n push(id: number, velocity: number[]): void;\n /** Plays `id` at rate `rate` from where it is, without a jump. */\n rate(id: number, rate: number): void;\n stop(id: number): void;\n /** Whether `id` is one of the codec's subjects. */\n has(id: number): boolean;\n /** How many voices the codec is running, one per subject; for tests and diagnostics. */\n voiceCount(): number;\n}\n\ntype Out = { v: number[] };\n\n/** What the codec calls on a motion patch: a tween has no `push`, a glide no `to`. */\ninterface Moves {\n to?(id: number, target: number[], at?: number): void;\n read(id: number, at?: number): Motion<number[]> | undefined;\n push?(id: number, velocity: number[], at?: number): void;\n}\n\n/** One mix per axis count, since a kit's channel width is fixed. */\ninterface Lane {\n axes: number;\n mix: Mix<number, Out>;\n /** The subjects `pull` reads, by slot. Joins wait in `pending` until the next `frame`. */\n ids: number[];\n /** Each slot's subject, beside `ids`. */\n subs: Subject[];\n pending: Set<number>;\n dirty: boolean;\n /** Frames in a row it has had no subjects at; it retires at the second. */\n idle: number;\n cols: { v: Float64Array };\n}\n\ninterface Subject extends Reader {\n cols: Float64Array;\n at: number;\n kind: 'tween' | 'spring';\n lane: Lane;\n handle: Handle<number>;\n patch: Moves;\n /** The codec's own copy, kept at the subject's motion as of its last re-cue. */\n spring?: SpringStart;\n /** Index into the lane's `ids`; -1 while no frame has read it. */\n slot: number;\n /** What `cols` points at while `slot` is -1. */\n held: Float64Array;\n /** A tween's start, until the next `frame` cues its voice; `handle` and `patch` exist only after. */\n queued?: TweenStart;\n /** A rate asked for while queued. */\n queuedRate?: number;\n motion?(): { value: number[]; velocity: number[] };\n}\n\nexport function createCodec(): Codec {\n const lanes = new Map<number, Lane>();\n const subjects = new Map<number, Subject>();\n // Tweens are cued together at the next frame, not one by one as they start: a burst of starts then\n // keeps the caller's objects together rather than each a voice apart, which the frame loop reads.\n const queue: Subject[] = [];\n let time = 0;\n\n const laneOf = (axes: number): Lane => {\n let l = lanes.get(axes);\n if (!l) {\n const m = mix<number, Out>(kit<Out>({ v: vec(axes, sum()) }));\n m.sync(time);\n l = { axes, mix: m, ids: [], subs: [], pending: new Set(), dirty: false, idle: 0, cols: { v: new Float64Array(0) } };\n lanes.set(axes, l);\n }\n return l;\n };\n const join = (s: Subject, id: number): void => {\n s.slot = -1;\n s.cols = s.held;\n s.at = 0;\n s.lane.pending.add(id);\n s.lane.dirty = true;\n };\n const depart = (s: Subject, id: number): void => {\n const l = s.lane;\n l.dirty = true;\n if (s.slot < 0) { l.pending.delete(id); return; }\n const last = l.ids.pop()!;\n const moved = l.subs.pop()!;\n if (last === id) return;\n const n = l.axes;\n const from = l.ids.length * n;\n l.cols.v.copyWithin(s.slot * n, from, from + n);\n l.ids[s.slot] = last;\n l.subs[s.slot] = moved;\n moved.slot = s.slot;\n moved.at = s.slot * n;\n };\n const rebuild = (l: Lane): void => {\n const ids = l.ids.slice();\n const subs = l.subs;\n for (const id of l.pending) {\n const s = subjects.get(id)!;\n s.slot = ids.length;\n s.at = s.slot * l.axes;\n s.cols = l.cols.v;\n ids.push(id);\n subs.push(s);\n }\n l.pending.clear();\n l.ids = ids;\n if (l.cols.v.length !== ids.length * l.axes) {\n l.cols = { v: new Float64Array(ids.length * l.axes) };\n for (const s of subs) s.cols = l.cols.v;\n }\n l.dirty = false;\n };\n\n // A voice cued now reads voice time 0 at codec time `time`. Each patch holds its subject at rest\n // at `from`, and the codec releases it with a `to` or `push` timed at 0.\n const springVoice = (l: Lane, id: number, sp: SpringStart): { handle: Handle<number>; patch: Moves } => {\n // With no target the spring force is zero whatever the stiffness, leaving damping alone:\n // velocity falls as exp(-t * damping / mass), a glide whose time constant is mass / damping.\n const patch: Moves & Patch<number, Out, void> = sp.to == null\n ? glide<number, Out, number[]>('v', { from: sp.from, ms: (1000 * sp.mass) / sp.damping })\n : springPatch<number, Out, number[]>('v', {\n from: sp.from, to: sp.from, stiffness: sp.stiffness, damping: sp.damping, mass: sp.mass,\n });\n const handle = l.mix.cue({ patch, subjects: [id] });\n if (sp.to) patch.to!(id, sp.to, 0);\n patch.push!(id, sp.velocity, 0);\n return { handle, patch };\n };\n\n const get = (id: number): Subject => {\n const s = subjects.get(id);\n if (!s) throw new Error(`codec: no subject ${id}`);\n return s;\n };\n /** A spring subject's motion now: as its voice last read it, else where it was last placed. */\n const current = (s: Subject, id: number): { value: number[]; velocity: number[] } =>\n s.patch.read(id) ?? { value: s.spring!.from.slice(), velocity: s.spring!.velocity.slice() };\n\n function stop(id: number): void {\n const s = subjects.get(id);\n if (!s) return;\n if (s.queued) s.queued = undefined;\n else {\n s.handle.fade({ over: 0 });\n s.lane.mix.drop(id);\n }\n depart(s, id);\n subjects.delete(id);\n }\n\n return {\n frame(dtMs) {\n for (const sub of queue) {\n const q = sub.queued;\n if (!q) continue;\n sub.queued = undefined;\n const patch = tweenPatch<number, Out, number[]>('v', { from: q.from.slice(), to: q.from.slice(), ms: q.ms, ease: q.ease });\n sub.handle = sub.lane.mix.cue({ patch, subjects: [q.id] });\n sub.patch = patch;\n patch.to(q.id, q.to.slice(), 0);\n if (sub.queuedRate !== undefined) sub.handle.rate = sub.queuedRate;\n }\n queue.length = 0;\n time += dtMs;\n for (const l of lanes.values()) {\n if (l.dirty) rebuild(l);\n if (l.ids.length === 0 && ++l.idle >= 2) {\n lanes.delete(l.axes);\n continue;\n }\n l.mix.sync(time);\n if (l.ids.length === 0) continue;\n l.idle = 0;\n l.mix.pull(l.ids, l.cols);\n }\n },\n tween(s) {\n if (s.to.length !== s.from.length) {\n throw new Error(`codec: tween ${s.id} goes from ${s.from.length} axes to ${s.to.length}`);\n }\n const l = laneOf(s.from.length);\n const held = Float64Array.from(s.from);\n const sub = { kind: 'tween', lane: l, slot: -1, held, cols: held, at: 0, queued: s } as Subject;\n subjects.set(s.id, sub);\n join(sub, s.id);\n queue.push(sub);\n return sub;\n },\n spring(s) {\n const sp = { ...s, from: s.from.slice(), to: s.to && s.to.slice(), velocity: s.velocity.slice() };\n const l = laneOf(sp.axes);\n const { handle, patch } = springVoice(l, s.id, sp);\n const held = Float64Array.from(sp.from);\n const sub: Subject = { kind: 'spring', lane: l, handle, patch, spring: sp, slot: -1, held, cols: held, at: 0 };\n subjects.set(s.id, sub);\n join(sub, s.id);\n const id = s.id;\n sub.motion = () => current(sub, id);\n return sub as Subject & SpringReader;\n },\n retarget(id, to) {\n const s = get(id);\n if (s.kind === 'tween') throw new Error(`codec: subject ${id} is a tween; tweens are not retargeted`);\n const sp = s.spring!;\n if ((to == null) === (sp.to == null)) {\n if (!to) return;\n sp.to = to.slice();\n s.patch.to!(id, sp.to);\n return;\n }\n // Held and free run different patches, so the subject is re-cued from where it is.\n const now = current(s, id);\n const rate = s.handle.rate;\n const next = { ...sp, to: to && to.slice(), from: now.value, velocity: now.velocity };\n s.handle.fade({ over: 0 });\n const { handle, patch } = springVoice(s.lane, id, next);\n handle.rate = rate;\n s.handle = handle;\n s.patch = patch;\n s.spring = next;\n },\n push(id, velocity) {\n const s = get(id);\n if (s.spring && !s.patch.read(id)) s.spring.velocity = velocity.slice();\n s.patch.push?.(id, velocity);\n },\n rate(id, rate) {\n const s = get(id);\n if (s.queued) s.queuedRate = rate;\n else s.handle.rate = rate;\n },\n stop,\n has: (id) => subjects.has(id),\n voiceCount() {\n return subjects.size;\n },\n };\n}\n"],"mappings":";;AAuFA,SAAgBE,IAAqB;CACnC,IAAMC,oBAAQ,IAAI,IAAkB,GAC9BC,oBAAW,IAAI,IAAqB,GAGpCC,IAAmB,CAAC,GACtBC,IAAO,GAELC,KAAU,MAAuB;EACrC,IAAIC,IAAIL,EAAM,IAAIM,CAAI;EACtB,IAAI,CAACD,GAAG;GACN,IAAME,IAAIC,EAAiBC,EAAS,EAAE,GAAGC,EAAIJ,GAAMK,EAAI,CAAC,EAAE,CAAC,CAAC;GAG5D,AAFAJ,EAAE,KAAKJ,CAAI,GACX,IAAI;IAAE;IAAM,KAAKI;IAAG,KAAK,CAAC;IAAG,MAAM,CAAC;IAAG,yBAAS,IAAI,IAAI;IAAG,OAAO;IAAO,MAAM;IAAG,MAAM,EAAE,mBAAG,IAAI,aAAc,EAAE;GAAE,GACnHP,EAAM,IAAIM,GAAMD,CAAC;EACnB;EACA,OAAOA;CACT,GACMO,KAAQ,GAAY,MAAqB;EAK7C,AAJA,EAAE,OAAO,IACT,EAAE,OAAOC,EAAE,MACX,EAAE,KAAK,GACPA,EAAE,KAAK,QAAQ,IAAIC,CAAE,GACrB,EAAE,KAAK,QAAQ;CACjB,GACMC,KAAU,GAAY,MAAqB;EAC/C,IAAMV,IAAIQ,EAAE;EAEZ,IADA,EAAE,QAAQ,IACNA,EAAE,OAAO,GAAG;GAAE,EAAE,QAAQ,OAAOC,CAAE;GAAG;EAAQ;EAChD,IAAME,IAAOX,EAAE,IAAI,IAAI,GACjBY,IAAQZ,EAAE,KAAK,IAAI;EACzB,IAAIW,MAASF,GAAI;EACjB,IAAMI,IAAIb,EAAE,MACNc,IAAOd,EAAE,IAAI,SAASa;EAK5B,AAJAb,EAAE,KAAK,EAAE,WAAWQ,EAAE,OAAOK,GAAGC,GAAMA,IAAOD,CAAC,GAC9C,EAAE,IAAIL,EAAE,QAAQG,GAChB,EAAE,KAAKH,EAAE,QAAQI,GACjB,EAAM,OAAOJ,EAAE,MACf,EAAM,KAAKA,EAAE,OAAOK;CACtB,GACME,KAAW,MAAkB;EACjC,IAAMC,IAAMhB,EAAE,IAAI,MAAM,GAClBiB,IAAOjB,EAAE;EACf,KAAK,IAAMS,KAAMT,EAAE,SAAS;GAC1B,IAAMQ,IAAIZ,EAAS,IAAIa,CAAE;GAKzB,AAJA,EAAE,OAAOO,EAAI,QACb,EAAE,KAAKR,EAAE,OAAOR,EAAE,MAClB,EAAE,OAAOA,EAAE,KAAK,GAChBgB,EAAI,KAAKP,CAAE,GACXQ,EAAK,KAAKT,CAAC;EACb;EAGA,IAFAR,EAAE,QAAQ,MAAM,GAChB,EAAE,MAAMgB,GACJhB,EAAE,KAAK,EAAE,WAAWgB,EAAI,SAAShB,EAAE,MAAM;GAC3C,EAAE,OAAO,EAAE,GAAG,IAAI,aAAagB,EAAI,SAAShB,EAAE,IAAI,EAAE;GACpD,KAAK,IAAMQ,KAAKS,GAAM,EAAE,OAAOjB,EAAE,KAAK;EACxC;EACA,EAAE,QAAQ;CACZ,GAIMkB,KAAe,GAAS,GAAY,MAA8D;EAGtG,IAAMC,IAA0CC,EAAG,MAAM,OACrDC,EAA6B,KAAK;GAAE,MAAMD,EAAG;GAAM,IAAK,MAAOA,EAAG,OAAQA,EAAG;EAAQ,CAAC,IACtF5B,EAAmC,KAAK;GACxC,MAAM4B,EAAG;GAAM,IAAIA,EAAG;GAAM,WAAWA,EAAG;GAAW,SAASA,EAAG;GAAS,MAAMA,EAAG;EACrF,CAAC,GACGG,IAASvB,EAAE,IAAI,IAAI;GAAE;GAAO,UAAU,CAACS,CAAE;EAAE,CAAC;EAGlD,OAFIW,EAAG,MAAID,EAAM,GAAIV,GAAIW,EAAG,IAAI,CAAC,GACjCD,EAAM,KAAMV,GAAIW,EAAG,UAAU,CAAC,GACvB;GAAE;GAAQ;EAAM;CACzB,GAEMI,KAAO,MAAwB;EACnC,IAAMhB,IAAIZ,EAAS,IAAIa,CAAE;EACzB,IAAI,CAACD,GAAG,MAAU,MAAM,qBAAqBC,GAAI;EACjD,OAAOD;CACT,GAEMiB,KAAW,GAAY,MAC3BjB,EAAE,MAAM,KAAKC,CAAE,KAAK;EAAE,OAAOD,EAAE,OAAQ,KAAK,MAAM;EAAG,UAAUA,EAAE,OAAQ,SAAS,MAAM;CAAE;CAE5F,SAASkB,EAAK,GAAkB;EAC9B,IAAMlB,IAAIZ,EAAS,IAAIa,CAAE;EACzB,AAAKD,MACDA,EAAE,SAAQ,EAAE,SAAS,KAAA,KAEvBA,EAAE,OAAO,KAAK,EAAE,MAAM,EAAE,CAAC,GACzBA,EAAE,KAAK,IAAI,KAAKC,CAAE,IAEpBC,EAAOF,GAAGC,CAAE,GACZb,EAAS,OAAOa,CAAE;CACpB;CAEA,OAAO;EACL,MAAM,GAAM;GACV,KAAK,IAAMkB,KAAO9B,GAAO;IACvB,IAAM+B,IAAID,EAAI;IACd,IAAI,CAACC,GAAG;IACR,EAAI,SAAS,KAAA;IACb,IAAMT,IAAQ1B,EAAkC,KAAK;KAAE,MAAMmC,EAAE,KAAK,MAAM;KAAG,IAAIA,EAAE,KAAK,MAAM;KAAG,IAAIA,EAAE;KAAI,MAAMA,EAAE;IAAK,CAAC;IAIzH,AAHA,EAAI,SAASD,EAAI,KAAK,IAAI,IAAI;KAAE;KAAO,UAAU,CAACC,EAAE,EAAE;IAAE,CAAC,GACzD,EAAI,QAAQT,GACZA,EAAM,GAAGS,EAAE,IAAIA,EAAE,GAAG,MAAM,GAAG,CAAC,GAC1BD,EAAI,eAAe,KAAA,MAAW,EAAI,OAAO,OAAOA,EAAI;GAC1D;GAEA,AADA,EAAM,SAAS,GACf,KAAQG;GACR,KAAK,IAAM9B,KAAKL,EAAM,OAAO,GAAG;IAE9B,IADIK,EAAE,SAAOe,EAAQf,CAAC,GAClBA,EAAE,IAAI,WAAW,KAAK,EAAEA,EAAE,QAAQ,GAAG;KACvC,EAAM,OAAOA,EAAE,IAAI;KACnB;IACF;IAEA,AADAA,EAAE,IAAI,KAAKF,CAAI,GACXE,EAAE,IAAI,WAAW,MACrB,EAAE,OAAO,GACTA,EAAE,IAAI,KAAKA,EAAE,KAAKA,EAAE,IAAI;GAC1B;EACF;EACA,MAAM,GAAG;GACP,IAAIQ,EAAE,GAAG,WAAWA,EAAE,KAAK,QACzB,MAAU,MAAM,gBAAgBA,EAAE,GAAG,aAAaA,EAAE,KAAK,OAAO,WAAWA,EAAE,GAAG,QAAQ;GAE1F,IAAMR,IAAID,EAAOS,EAAE,KAAK,MAAM,GACxBuB,IAAO,aAAa,KAAKvB,EAAE,IAAI,GAC/BmB,IAAM;IAAE,MAAM;IAAS,MAAM3B;IAAG,MAAM;IAAI;IAAM,MAAM+B;IAAM,IAAI;IAAG,QAAQvB;GAAE;GAInF,OAHAZ,EAAS,IAAIY,EAAE,IAAImB,CAAG,GACtBpB,EAAKoB,GAAKnB,EAAE,EAAE,GACdX,EAAM,KAAK8B,CAAG,GACPA;EACT;EACA,OAAO,GAAG;GACR,IAAMP,IAAK;IAAE,GAAGZ;IAAG,MAAMA,EAAE,KAAK,MAAM;IAAG,IAAIA,EAAE,MAAMA,EAAE,GAAG,MAAM;IAAG,UAAUA,EAAE,SAAS,MAAM;GAAE,GAC1FR,IAAID,EAAOqB,EAAG,IAAI,GAClB,EAAE,WAAQ,aAAUF,EAAYlB,GAAGQ,EAAE,IAAIY,CAAE,GAC3CW,IAAO,aAAa,KAAKX,EAAG,IAAI,GAChCO,IAAe;IAAE,MAAM;IAAU,MAAM3B;IAAG;IAAQ;IAAO,QAAQoB;IAAI,MAAM;IAAI;IAAM,MAAMW;IAAM,IAAI;GAAE;GAE7G,AADAnC,EAAS,IAAIY,EAAE,IAAImB,CAAG,GACtBpB,EAAKoB,GAAKnB,EAAE,EAAE;GACd,IAAMC,IAAKD,EAAE;GAEb,OADA,EAAI,eAAeiB,EAAQE,GAAKlB,CAAE,GAC3BkB;EACT;EACA,SAAS,GAAI,GAAI;GACf,IAAMnB,IAAIgB,EAAIf,CAAE;GAChB,IAAID,EAAE,SAAS,SAAS,MAAU,MAAM,kBAAkBC,EAAG,uCAAuC;GACpG,IAAMW,IAAKZ,EAAE;GACb,IAAKwB,KAAM,SAAWZ,EAAG,MAAM,OAAO;IACpC,IAAI,CAACY,GAAI;IAET,AADA,EAAG,KAAKA,EAAG,MAAM,GACjBxB,EAAE,MAAM,GAAIC,GAAIW,EAAG,EAAE;IACrB;GACF;GAEA,IAAMa,IAAMR,EAAQjB,GAAGC,CAAE,GACnByB,IAAO1B,EAAE,OAAO,MAChB2B,IAAO;IAAE,GAAGf;IAAI,IAAIY,KAAMA,EAAG,MAAM;IAAG,MAAMC,EAAI;IAAO,UAAUA,EAAI;GAAS;GACpF,EAAE,OAAO,KAAK,EAAE,MAAM,EAAE,CAAC;GACzB,IAAM,EAAE,WAAQ,aAAUf,EAAYV,EAAE,MAAMC,GAAI0B,CAAI;GAItD,AAHA,EAAO,OAAOD,GACd,EAAE,SAASX,GACX,EAAE,QAAQJ,GACV,EAAE,SAASgB;EACb;EACA,KAAK,GAAI,GAAU;GACjB,IAAM3B,IAAIgB,EAAIf,CAAE;GAEhB,AADID,EAAE,UAAU,CAACA,EAAE,MAAM,KAAKC,CAAE,MAAG,EAAE,OAAO,WAAW2B,EAAS,MAAM,IACtE5B,EAAE,MAAM,OAAOC,GAAI2B,CAAQ;EAC7B;EACA,KAAK,GAAI,GAAM;GACb,IAAM5B,IAAIgB,EAAIf,CAAE;GAChB,AAAID,EAAE,SAAQ,EAAE,aAAa0B,IACxB,EAAE,OAAO,OAAOA;EACvB;EACA;EACA,MAAM,MAAOtC,EAAS,IAAIa,CAAE;EAC5B,aAAa;GACX,OAAOb,EAAS;EAClB;CACF;AACF"}
|
|
@@ -1,12 +0,0 @@
|
|
|
1
|
-
//#region src/animation/engine/integrator.ts
|
|
2
|
-
function e(e, t, n, r, i, a, o, s) {
|
|
3
|
-
let c = r ?? t, l = e.subtract(t, c), u = e.scale(l, r == null ? 0 : -i), d = e.scale(n, -a), f = e.scale(e.add(u, d), 1 / o), p = e.add(n, e.scale(f, s));
|
|
4
|
-
return {
|
|
5
|
-
value: e.add(t, e.scale(p, s)),
|
|
6
|
-
velocity: p
|
|
7
|
-
};
|
|
8
|
-
}
|
|
9
|
-
//#endregion
|
|
10
|
-
export { e as stepSpring };
|
|
11
|
-
|
|
12
|
-
//# sourceMappingURL=integrator.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"integrator.js","names":["stepSpring","ref","target","value","displacement","ops","springForce","k","dampingForce","velocity","damping","accel","mass","v","dt"],"sources":["../../../src/animation/engine/integrator.ts"],"sourcesContent":["export interface VectorOps<T> {\n add(a: T, b: T): T;\n subtract(a: T, b: T): T;\n scale(v: T, k: number): T;\n}\n\n/** One semi-implicit Euler step of a damped spring toward `target`, or of pure damping when\n * `target` is null. Returns the new value and velocity. */\nexport function stepSpring<T>(\n ops: VectorOps<T>,\n value: T, velocity: T, target: T | null,\n k: number, damping: number, mass: number, dt: number,\n): { value: T; velocity: T } {\n const ref = target ?? value;\n const displacement = ops.subtract(value, ref);\n const springForce = ops.scale(displacement, target == null ? 0 : -k);\n const dampingForce = ops.scale(velocity, -damping);\n const accel = ops.scale(ops.add(springForce, dampingForce), 1 / mass);\n const v = ops.add(velocity, ops.scale(accel, dt));\n return { value: ops.add(value, ops.scale(v, dt)), velocity: v };\n}\n"],"mappings":";AAQA,SAAgBA,EACd,GACA,GAAU,GAAa,GACvB,GAAW,GAAiB,GAAc,GACf;CAC3B,IAAMC,IAAMC,KAAUC,GAChBC,IAAeC,EAAI,SAASF,GAAOF,CAAG,GACtCK,IAAcD,EAAI,MAAMD,GAAcF,KAAU,OAAO,IAAI,CAACK,CAAC,GAC7DC,IAAeH,EAAI,MAAMI,GAAU,CAACC,CAAO,GAC3CC,IAAQN,EAAI,MAAMA,EAAI,IAAIC,GAAaE,CAAY,GAAG,IAAII,CAAI,GAC9DC,IAAIR,EAAI,IAAII,GAAUJ,EAAI,MAAMM,GAAOG,CAAE,CAAC;CAChD,OAAO;EAAE,OAAOT,EAAI,IAAIF,GAAOE,EAAI,MAAMQ,GAAGC,CAAE,CAAC;EAAG,UAAUD;CAAE;AAChE"}
|
package/dist/animation/loop.js
DELETED
|
@@ -1,60 +0,0 @@
|
|
|
1
|
-
//#region src/animation/loop.ts
|
|
2
|
-
function e(e, t, n = {}) {
|
|
3
|
-
let r = n.count ?? Infinity, i = 0, a = !1, o = null, s = e({
|
|
4
|
-
kind: "loop",
|
|
5
|
-
cancelKey: n.cancelKey,
|
|
6
|
-
label: n.label
|
|
7
|
-
});
|
|
8
|
-
s.setOnCancel(() => {
|
|
9
|
-
a = !0, o?.cancel(), o = null;
|
|
10
|
-
});
|
|
11
|
-
let c = (e, t) => {
|
|
12
|
-
o && (e ? o.pause() : o.resume(), o.setTimeScale(t));
|
|
13
|
-
};
|
|
14
|
-
s.setOnRate(c);
|
|
15
|
-
let l = () => {
|
|
16
|
-
if (!a) {
|
|
17
|
-
if (i >= r) {
|
|
18
|
-
o = null, a = !0, s.finish(), n.onDone?.();
|
|
19
|
-
return;
|
|
20
|
-
}
|
|
21
|
-
o = t(i++, l), (s.isPaused() || s.timeScale() !== 1) && c(s.isPaused(), s.timeScale());
|
|
22
|
-
}
|
|
23
|
-
};
|
|
24
|
-
return l(), {
|
|
25
|
-
id: s.id,
|
|
26
|
-
cancel: () => s.cancel(),
|
|
27
|
-
pause: () => s.pause(),
|
|
28
|
-
resume: () => s.resume(),
|
|
29
|
-
setTimeScale: (e) => s.setTimeScale(e),
|
|
30
|
-
timeScale: () => s.timeScale(),
|
|
31
|
-
isPaused: () => s.isPaused()
|
|
32
|
-
};
|
|
33
|
-
}
|
|
34
|
-
function t(t, n, r) {
|
|
35
|
-
let i = r.direction ?? "restart";
|
|
36
|
-
return e((e) => n({
|
|
37
|
-
...e,
|
|
38
|
-
kind: "tweenLoop"
|
|
39
|
-
}), (e, n) => {
|
|
40
|
-
let a = i === "reverse" || i === "alternate" && e % 2 == 1, o = a ? r.to : r.from, s = a ? r.from : r.to;
|
|
41
|
-
return t.tween({
|
|
42
|
-
from: o,
|
|
43
|
-
to: s,
|
|
44
|
-
ms: r.ms,
|
|
45
|
-
easing: r.easing,
|
|
46
|
-
interpolate: r.interpolate,
|
|
47
|
-
onTick: r.onTick,
|
|
48
|
-
onDone: n
|
|
49
|
-
});
|
|
50
|
-
}, {
|
|
51
|
-
count: r.count,
|
|
52
|
-
onDone: r.onDone,
|
|
53
|
-
cancelKey: r.cancelKey,
|
|
54
|
-
label: r.label
|
|
55
|
-
});
|
|
56
|
-
}
|
|
57
|
-
//#endregion
|
|
58
|
-
export { e as createLoop, t as createTweenLoop };
|
|
59
|
-
|
|
60
|
-
//# sourceMappingURL=loop.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"loop.js","names":["createLoop","max","opts","iteration","cancelled","current","supervisor","createSupervisor","applyRate","paused","timeScale","next","factory","s","createTweenLoop","direction","o","flipped","i","from","to","animator"],"sources":["../../src/animation/loop.ts"],"sourcesContent":["import type { SupervisorFactory } from './supervisor';\nimport type {\n AnimationHandle,\n Animator,\n LoopFactory,\n LoopOptions,\n TweenLoopOptions,\n} from './types';\n\n/**\n * Loop primitive. Repeatedly invokes `factory(i, next)` to produce a child\n * animation. The factory is responsible for wiring its returned handle's\n * `onDone` to call `next` — that's how the loop advances. Pause/resume/\n * setTimeScale reach the current child and each later one; cancel stops the\n * in-flight child and prevents future iterations.\n *\n * The loop is registered with the animator under a supervisor entry, so\n * `animator.cancel(handle)`, `animator.cancelKey(key)`, and\n * `animator.isActive(key)` all work for it.\n */\nexport function createLoop(\n createSupervisor: SupervisorFactory,\n factory: LoopFactory,\n opts: LoopOptions = {},\n): AnimationHandle {\n const max = opts.count ?? Infinity;\n let iteration = 0;\n let cancelled = false;\n let current: AnimationHandle | null = null;\n\n const supervisor = createSupervisor({ kind: 'loop', cancelKey: opts.cancelKey, label: opts.label });\n supervisor.setOnCancel(() => {\n // External cancel path (animator.cancel/cancelKey or handle.cancel).\n // Mark cancelled so `next` short-circuits; tear down the current child.\n cancelled = true;\n current?.cancel();\n current = null;\n });\n\n const applyRate = (paused: boolean, timeScale: number): void => {\n if (!current) return;\n if (paused) current.pause();\n else current.resume();\n current.setTimeScale(timeScale);\n };\n supervisor.setOnRate(applyRate);\n\n const next = (): void => {\n if (cancelled) return;\n if (iteration >= max) {\n current = null;\n // Natural completion: deregister the supervisor so isActive() goes\n // false. `cancelled` makes a late `next` a no-op.\n cancelled = true;\n supervisor.finish();\n opts.onDone?.();\n return;\n }\n const i = iteration++;\n current = factory(i, next);\n if (supervisor.isPaused() || supervisor.timeScale() !== 1) {\n applyRate(supervisor.isPaused(), supervisor.timeScale());\n }\n };\n\n next();\n\n return {\n id: supervisor.id,\n cancel: () => supervisor.cancel(),\n pause: () => supervisor.pause(),\n resume: () => supervisor.resume(),\n setTimeScale: (s) => supervisor.setTimeScale(s),\n timeScale: () => supervisor.timeScale(),\n isPaused: () => supervisor.isPaused(),\n };\n}\n\n/**\n * Sugar over `createLoop` for the common case of looping a tween between two\n * values. `direction` controls per-iteration from/to:\n * - `restart` (default): from→to every iteration\n * - `reverse`: to→from every iteration\n * - `alternate`: even iterations from→to, odd iterations to→from\n */\nexport function createTweenLoop<T>(\n animator: Animator,\n createSupervisor: SupervisorFactory,\n opts: TweenLoopOptions<T>,\n): AnimationHandle {\n const direction = opts.direction ?? 'restart';\n return createLoop(\n (o) => createSupervisor({ ...o, kind: 'tweenLoop' }),\n (i, next) => {\n const flipped = direction === 'reverse' || (direction === 'alternate' && i % 2 === 1);\n const from = flipped ? opts.to : opts.from;\n const to = flipped ? opts.from : opts.to;\n return animator.tween({\n from,\n to,\n ms: opts.ms,\n easing: opts.easing,\n interpolate: opts.interpolate,\n onTick: opts.onTick,\n onDone: next,\n });\n },\n { count: opts.count, onDone: opts.onDone, cancelKey: opts.cancelKey, label: opts.label },\n );\n}\n"],"mappings":";AAoBA,SAAgBA,EACd,GACA,GACA,IAAoB,CAAC,GACJ;CACjB,IAAMC,IAAMC,EAAK,SAAS,UACtBC,IAAY,GACZC,IAAY,IACZC,IAAkC,MAEhCC,IAAaC,EAAiB;EAAE,MAAM;EAAQ,WAAWL,EAAK;EAAW,OAAOA,EAAK;CAAM,CAAC;CAClG,EAAW,kBAAkB;EAK3B,AAFA,IAAY,IACZG,GAAS,OAAO,GAChB,IAAU;CACZ,CAAC;CAED,IAAMG,KAAa,GAAiB,MAA4B;EAC9D,AAAKH,MACDI,IAAQJ,EAAQ,MAAM,IACrBA,EAAQ,OAAO,GACpBA,EAAQ,aAAaK,CAAS;CAChC;CACA,EAAW,UAAUF,CAAS;CAE9B,IAAMG,UAAmB;EACvB,IAAI,IACJ;OAAIR,KAAaF,GAAK;IAMpB,AALA,IAAU,MAGV,IAAY,IACZK,EAAW,OAAO,GAClBJ,EAAK,SAAS;IACd;GACF;GAGA,AADA,IAAUU,EAAQ,KAAGD,CAAI,IACrBL,EAAW,SAAS,KAAKA,EAAW,UAAU,MAAM,MACtDE,EAAUF,EAAW,SAAS,GAAGA,EAAW,UAAU,CAAC;EAJzD;CAMF;CAIA,OAFAK,EAAK,GAEE;EACL,IAAIL,EAAW;EACf,cAAcA,EAAW,OAAO;EAChC,aAAaA,EAAW,MAAM;EAC9B,cAAcA,EAAW,OAAO;EAChC,eAAe,MAAMA,EAAW,aAAaO,CAAC;EAC9C,iBAAiBP,EAAW,UAAU;EACtC,gBAAgBA,EAAW,SAAS;CACtC;AACF;AASA,SAAgBQ,EACd,GACA,GACA,GACiB;CACjB,IAAMC,IAAYb,EAAK,aAAa;CACpC,OAAOF,GACJ,MAAMO,EAAiB;EAAE,GAAGS;EAAG,MAAM;CAAY,CAAC,IAClD,GAAG,MAAS;EACX,IAAMC,IAAUF,MAAc,aAAcA,MAAc,eAAeG,IAAI,KAAM,GAC7EC,IAAOF,IAAUf,EAAK,KAAKA,EAAK,MAChCkB,IAAKH,IAAUf,EAAK,OAAOA,EAAK;EACtC,OAAOmB,EAAS,MAAM;GACpB;GACA;GACA,IAAInB,EAAK;GACT,QAAQA,EAAK;GACb,aAAaA,EAAK;GAClB,QAAQA,EAAK;GACb,QAAQS;EACV,CAAC;CACH,GACA;EAAE,OAAOT,EAAK;EAAO,QAAQA,EAAK;EAAQ,WAAWA,EAAK;EAAW,OAAOA,EAAK;CAAM,CACzF;AACF"}
|
|
@@ -1,23 +0,0 @@
|
|
|
1
|
-
//#region src/animation/observe.ts
|
|
2
|
-
var e = class {
|
|
3
|
-
listeners = /* @__PURE__ */ new Set();
|
|
4
|
-
get watched() {
|
|
5
|
-
return this.listeners.size > 0;
|
|
6
|
-
}
|
|
7
|
-
add(e) {
|
|
8
|
-
return this.listeners.add(e), () => {
|
|
9
|
-
this.listeners.delete(e);
|
|
10
|
-
};
|
|
11
|
-
}
|
|
12
|
-
emit(e) {
|
|
13
|
-
for (let t of this.listeners) try {
|
|
14
|
-
t(e);
|
|
15
|
-
} catch (e) {
|
|
16
|
-
console.error("useAnimator: watch listener threw", e);
|
|
17
|
-
}
|
|
18
|
-
}
|
|
19
|
-
};
|
|
20
|
-
//#endregion
|
|
21
|
-
export { e as AnimatorEventHub };
|
|
22
|
-
|
|
23
|
-
//# sourceMappingURL=observe.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"observe.js","names":["AnimatorEventHub","listener","event","err"],"sources":["../../src/animation/observe.ts"],"sourcesContent":["import type { AnimatorEvent, AnimatorListener } from './types';\n\n/** The listener set behind `animator.watch`. Every emit site checks `watched`\n * first and builds its event only then, so an unwatched animator allocates\n * nothing for observability. */\nexport class AnimatorEventHub {\n private readonly listeners = new Set<AnimatorListener>();\n\n get watched(): boolean {\n return this.listeners.size > 0;\n }\n\n add(listener: AnimatorListener): () => void {\n this.listeners.add(listener);\n return () => { this.listeners.delete(listener); };\n }\n\n emit(event: AnimatorEvent): void {\n for (const listener of this.listeners) {\n try { listener(event); } catch (err) { console.error('useAnimator: watch listener threw', err); }\n }\n }\n}\n"],"mappings":";AAKA,IAAaA,IAAb,MAA8B;CAC5B,4BAA6B,IAAI,IAAsB;CAEvD,IAAI,UAAmB;EACrB,OAAO,KAAK,UAAU,OAAO;CAC/B;CAEA,IAAI,GAAwC;EAE1C,OADA,KAAK,UAAU,IAAIC,CAAQ,SACd;GAAE,KAAK,UAAU,OAAOA,CAAQ;EAAG;CAClD;CAEA,KAAK,GAA4B;EAC/B,KAAK,IAAMA,KAAY,KAAK,WAC1B,IAAI;GAAE,EAASC,CAAK;EAAG,SAASC,GAAK;GAAE,QAAQ,MAAM,qCAAqCA,CAAG;EAAG;CAEpG;AACF"}
|
|
@@ -1,43 +0,0 @@
|
|
|
1
|
-
import { IDENTITY_JOINT as e } from "./types.js";
|
|
2
|
-
//#region src/animation/rig/blendPoses.ts
|
|
3
|
-
var t = Math.PI * 2;
|
|
4
|
-
function n(e, n) {
|
|
5
|
-
let r = (n - e) % t;
|
|
6
|
-
return r > Math.PI && (r -= t), r < -Math.PI && (r += t), r;
|
|
7
|
-
}
|
|
8
|
-
var r = [
|
|
9
|
-
"x",
|
|
10
|
-
"y",
|
|
11
|
-
"scaleX",
|
|
12
|
-
"scaleY"
|
|
13
|
-
];
|
|
14
|
-
function i(t, i) {
|
|
15
|
-
if (t.length !== i.length) throw Error("blendPoses: poses and weights must have the same length");
|
|
16
|
-
let a = i.reduce((e, t) => e + t, 0);
|
|
17
|
-
if (a === 0) return {};
|
|
18
|
-
let o = i.map((e) => e / a), s = /* @__PURE__ */ new Set();
|
|
19
|
-
for (let e of t) for (let t of Object.keys(e)) s.add(t);
|
|
20
|
-
let c = {};
|
|
21
|
-
for (let i of s) {
|
|
22
|
-
let a = {};
|
|
23
|
-
for (let n of r) {
|
|
24
|
-
let r = 0;
|
|
25
|
-
for (let a = 0; a < t.length; a += 1) {
|
|
26
|
-
let s = t[a][i]?.[n];
|
|
27
|
-
r += (s ?? e[n]) * o[a];
|
|
28
|
-
}
|
|
29
|
-
a[n] = r;
|
|
30
|
-
}
|
|
31
|
-
let s = t[0][i]?.rotation ?? 0, l = 0;
|
|
32
|
-
for (let e = 0; e < t.length; e += 1) {
|
|
33
|
-
let r = t[e][i]?.rotation ?? 0;
|
|
34
|
-
l += n(s, r) * o[e];
|
|
35
|
-
}
|
|
36
|
-
a.rotation = s + l, c[i] = a;
|
|
37
|
-
}
|
|
38
|
-
return c;
|
|
39
|
-
}
|
|
40
|
-
//#endregion
|
|
41
|
-
export { i as blendPoses };
|
|
42
|
-
|
|
43
|
-
//# sourceMappingURL=blendPoses.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"blendPoses.js","names":["TAU","shortestDelta","d","b","a","FIELDS","blendPoses","poses","weights","total","s","w","norm","names","p","k","out","name","joint","field","acc","i","v","IDENTITY_JOINT","base","rot"],"sources":["../../../src/animation/rig/blendPoses.ts"],"sourcesContent":["import { IDENTITY_JOINT, type JointTransform, type Pose } from './types';\n\nconst TAU = Math.PI * 2;\n\n/** Shortest signed angular delta from `a` to `b`, in (-PI, PI]. */\nfunction shortestDelta(a: number, b: number): number {\n let d = (b - a) % TAU;\n if (d > Math.PI) d -= TAU;\n if (d < -Math.PI) d += TAU;\n return d;\n}\n\nconst FIELDS: (keyof JointTransform)[] = ['x', 'y', 'scaleX', 'scaleY'];\n\n/**\n * Weighted blend of poses. Weights are normalized, so `[1, 1]` means an even\n * mix. A joint absent from a pose contributes its identity delta, and a field\n * absent from a joint contributes that field's identity — 0 for translation and\n * rotation, 1 for scale. Blending scale toward 0 for an absent field would\n * collapse the joint, which is the bug this avoids.\n *\n * Rotation blends the short way around the circle, so 0.1 and TAU-0.1 average\n * to 0 rather than to PI.\n *\n * This doubles as the interpolator for a `SampledTrack<Pose>`: interpolating\n * between two poses at `u` is `blendPoses([a, b], [1 - u, u])`.\n */\nexport function blendPoses(poses: Pose[], weights: number[]): Pose {\n if (poses.length !== weights.length) {\n throw new Error('blendPoses: poses and weights must have the same length');\n }\n const total = weights.reduce((s, w) => s + w, 0);\n if (total === 0) return {};\n const norm = weights.map((w) => w / total);\n\n const names = new Set<string>();\n for (const p of poses) for (const k of Object.keys(p)) names.add(k);\n\n const out: Pose = {};\n for (const name of names) {\n const joint: Partial<JointTransform> = {};\n\n for (const field of FIELDS) {\n let acc = 0;\n for (let i = 0; i < poses.length; i += 1) {\n const v = poses[i][name]?.[field];\n acc += (v ?? IDENTITY_JOINT[field]) * norm[i];\n }\n joint[field] = acc;\n }\n\n // Rotation accumulates as a delta from the first pose's value so wrapping\n // is handled once, against a fixed reference.\n const base = poses[0][name]?.rotation ?? 0;\n let rot = 0;\n for (let i = 0; i < poses.length; i += 1) {\n const v = poses[i][name]?.rotation ?? 0;\n rot += shortestDelta(base, v) * norm[i];\n }\n joint.rotation = base + rot;\n\n out[name] = joint;\n }\n return out;\n}\n"],"mappings":";;AAEA,IAAMA,IAAM,KAAK,KAAK;AAGtB,SAASC,EAAc,GAAW,GAAmB;CACnD,IAAIC,KAAKC,IAAIC,KAAKJ;CAGlB,OAFIE,IAAI,KAAK,OAAI,KAAKF,IAClBE,IAAI,CAAC,KAAK,OAAI,KAAKF,IAChBE;AACT;AAEA,IAAMG,IAAmC;CAAC;CAAK;CAAK;CAAU;AAAQ;AAetE,SAAgBC,EAAW,GAAe,GAAyB;CACjE,IAAIC,EAAM,WAAWC,EAAQ,QAC3B,MAAU,MAAM,yDAAyD;CAE3E,IAAMC,IAAQD,EAAQ,QAAQ,GAAG,MAAME,IAAIC,GAAG,CAAC;CAC/C,IAAIF,MAAU,GAAG,OAAO,CAAC;CACzB,IAAMG,IAAOJ,EAAQ,KAAK,MAAMG,IAAIF,CAAK,GAEnCI,oBAAQ,IAAI,IAAY;CAC9B,KAAK,IAAMC,KAAKP,GAAO,KAAK,IAAMQ,KAAK,OAAO,KAAKD,CAAC,GAAG,EAAM,IAAIC,CAAC;CAElE,IAAMC,IAAY,CAAC;CACnB,KAAK,IAAMC,KAAQJ,GAAO;EACxB,IAAMK,IAAiC,CAAC;EAExC,KAAK,IAAMC,KAASd,GAAQ;GAC1B,IAAIe,IAAM;GACV,KAAK,IAAIC,IAAI,GAAGA,IAAId,EAAM,QAAQ,KAAK,GAAG;IACxC,IAAMe,IAAIf,EAAMc,EAAE,CAACJ,EAAK,GAAGE;IAC3B,MAAQG,KAAKC,EAAeJ,MAAUP,EAAKS;GAC7C;GACA,EAAMF,KAASC;EACjB;EAIA,IAAMI,IAAOjB,EAAM,EAAE,CAACU,EAAK,EAAE,YAAY,GACrCQ,IAAM;EACV,KAAK,IAAIJ,IAAI,GAAGA,IAAId,EAAM,QAAQ,KAAK,GAAG;GACxC,IAAMe,IAAIf,EAAMc,EAAE,CAACJ,EAAK,EAAE,YAAY;GACtC,KAAOhB,EAAcuB,GAAMF,CAAC,IAAIV,EAAKS;EACvC;EAGA,AAFA,EAAM,WAAWG,IAAOC,GAExB,EAAIR,KAAQC;CACd;CACA,OAAOF;AACT"}
|