@weasel-js/core 1.7.0 → 1.7.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +794 -0
- package/README.md +14 -8
- package/dist/WeaselProvider.js +15 -0
- package/dist/WeaselProvider.js.map +1 -0
- package/dist/affordances/composeAffordanceLayer.js +224 -0
- package/dist/affordances/composeAffordanceLayer.js.map +1 -0
- package/dist/affordances/cornerResize.js +69 -0
- package/dist/affordances/cornerResize.js.map +1 -0
- package/dist/affordances/hitAffordanceRegions.js +138 -0
- package/dist/affordances/hitAffordanceRegions.js.map +1 -0
- package/dist/affordances/pathAnchors.js +66 -0
- package/dist/affordances/pathAnchors.js.map +1 -0
- package/dist/affordances/rotationHandle.js +103 -0
- package/dist/affordances/rotationHandle.js.map +1 -0
- package/dist/animation/behaviors/momentum.js +118 -0
- package/dist/animation/behaviors/momentum.js.map +1 -0
- package/dist/animation/colorHelpers.js +135 -0
- package/dist/animation/colorHelpers.js.map +1 -0
- package/dist/animation/colorRegistry.js +37 -0
- package/dist/animation/colorRegistry.js.map +1 -0
- package/dist/animation/index.js +20 -0
- package/dist/animation/loop.js +62 -0
- package/dist/animation/loop.js.map +1 -0
- package/dist/animation/observe.js +23 -0
- package/dist/animation/observe.js.map +1 -0
- package/dist/animation/poseHelpers.js +50 -0
- package/dist/animation/poseHelpers.js.map +1 -0
- package/dist/animation/reflow.js +121 -0
- package/dist/animation/reflow.js.map +1 -0
- package/dist/animation/rig/bindRig.js +74 -0
- package/dist/animation/rig/bindRig.js.map +1 -0
- package/dist/animation/rig/blendPoses.js +43 -0
- package/dist/animation/rig/blendPoses.js.map +1 -0
- package/dist/animation/rig/mirrorPose.js +19 -0
- package/dist/animation/rig/mirrorPose.js.map +1 -0
- package/dist/animation/rig/resolveSkeleton.js +33 -0
- package/dist/animation/rig/resolveSkeleton.js.map +1 -0
- package/dist/animation/rig/solveIk.js +103 -0
- package/dist/animation/rig/solveIk.js.map +1 -0
- package/dist/animation/rig/types.js +12 -0
- package/dist/animation/rig/types.js.map +1 -0
- package/dist/animation/rig/useRig.js +23 -0
- package/dist/animation/rig/useRig.js.map +1 -0
- package/dist/animation/slew.js +27 -0
- package/dist/animation/slew.js.map +1 -0
- package/dist/animation/stagger.js +138 -0
- package/dist/animation/stagger.js.map +1 -0
- package/dist/animation/timeline/booking.js +106 -0
- package/dist/animation/timeline/booking.js.map +1 -0
- package/dist/animation/timeline/createTimeline.js +116 -0
- package/dist/animation/timeline/createTimeline.js.map +1 -0
- package/dist/animation/timeline/sampleTrack.js +29 -0
- package/dist/animation/timeline/sampleTrack.js.map +1 -0
- package/dist/animation/useAnimator.js +329 -0
- package/dist/animation/useAnimator.js.map +1 -0
- package/dist/animation/wrappers/animateLifecycle.js +40 -0
- package/dist/animation/wrappers/animateLifecycle.js.map +1 -0
- package/dist/animation/wrappers/animateOnSetPose.js +44 -0
- package/dist/animation/wrappers/animateOnSetPose.js.map +1 -0
- package/dist/{autoPoseDescriptor-_XOyF7t4.d.ts → autoPoseDescriptor-vCdt55xm.d.ts} +2 -2
- package/dist/{builtins-DLn2lCr_.d.ts → builtins-C-gRyVRx.d.ts} +742 -513
- package/dist/canvas/Canvas.js +608 -0
- package/dist/canvas/Canvas.js.map +1 -0
- package/dist/canvas/CanvasView.js +255 -0
- package/dist/canvas/CanvasView.js.map +1 -0
- package/dist/canvas/CursorCoordsHud.js +102 -0
- package/dist/canvas/CursorCoordsHud.js.map +1 -0
- package/dist/canvas/DrawCanvas.js +67 -0
- package/dist/canvas/DrawCanvas.js.map +1 -0
- package/dist/canvas/MinimapCanvas.js +139 -0
- package/dist/canvas/MinimapCanvas.js.map +1 -0
- package/dist/canvas/ModalityHud.js +66 -0
- package/dist/canvas/ModalityHud.js.map +1 -0
- package/dist/canvas/NodeShape.js +391 -0
- package/dist/canvas/NodeShape.js.map +1 -0
- package/dist/canvas/PickHud.js +93 -0
- package/dist/canvas/PickHud.js.map +1 -0
- package/dist/canvas/SceneCanvas/ActionsProviderIfRoot.js +10 -0
- package/dist/canvas/SceneCanvas/ActionsProviderIfRoot.js.map +1 -0
- package/dist/canvas/SceneCanvas/DepRegistryProviderIfRoot.js +10 -0
- package/dist/canvas/SceneCanvas/DepRegistryProviderIfRoot.js.map +1 -0
- package/dist/canvas/SceneCanvas/PointerProviderIfRoot.js +51 -0
- package/dist/canvas/SceneCanvas/PointerProviderIfRoot.js.map +1 -0
- package/dist/canvas/SceneCanvas/contributionFrameHooks.js +42 -0
- package/dist/canvas/SceneCanvas/contributionFrameHooks.js.map +1 -0
- package/dist/canvas/SceneCanvas/defaultNodeProperties.js +549 -0
- package/dist/canvas/SceneCanvas/defaultNodeProperties.js.map +1 -0
- package/dist/canvas/SceneCanvas/defaultNodeRouting.js +26 -0
- package/dist/canvas/SceneCanvas/defaultNodeRouting.js.map +1 -0
- package/dist/canvas/SceneCanvas/dispatcherGestureBounds.js +69 -0
- package/dist/canvas/SceneCanvas/dispatcherGestureBounds.js.map +1 -0
- package/dist/canvas/SceneCanvas/features.js +97 -0
- package/dist/canvas/SceneCanvas/features.js.map +1 -0
- package/dist/canvas/SceneCanvas/poseGeometry.js +46 -0
- package/dist/canvas/SceneCanvas/poseGeometry.js.map +1 -0
- package/dist/canvas/SceneCanvas/useActionsPropResolver.js +48 -0
- package/dist/canvas/SceneCanvas/useActionsPropResolver.js.map +1 -0
- package/dist/canvas/SceneCanvas/useBuiltinShapeTools.js +70 -0
- package/dist/canvas/SceneCanvas/useBuiltinShapeTools.js.map +1 -0
- package/dist/canvas/SceneCanvas/useContributionRoles.js +75 -0
- package/dist/canvas/SceneCanvas/useContributionRoles.js.map +1 -0
- package/dist/canvas/SceneCanvas/useDispatcherOverlayLayer.js +172 -0
- package/dist/canvas/SceneCanvas/useDispatcherOverlayLayer.js.map +1 -0
- package/dist/canvas/SceneCanvas/usePreviewGhostLayer.js +69 -0
- package/dist/canvas/SceneCanvas/usePreviewGhostLayer.js.map +1 -0
- package/dist/canvas/SceneCanvas/useSceneSelectTool.js +127 -0
- package/dist/canvas/SceneCanvas/useSceneSelectTool.js.map +1 -0
- package/dist/canvas/SceneCanvas/useViewportActions.js +30 -0
- package/dist/canvas/SceneCanvas/useViewportActions.js.map +1 -0
- package/dist/canvas/SceneCanvas.js +992 -0
- package/dist/canvas/SceneCanvas.js.map +1 -0
- package/dist/canvas/SceneViewCanvas.js +54 -0
- package/dist/canvas/SceneViewCanvas.js.map +1 -0
- package/dist/canvas/accentColor.js +9 -0
- package/dist/canvas/accentColor.js.map +1 -0
- package/dist/canvas/affordanceAt.js +63 -0
- package/dist/canvas/affordanceAt.js.map +1 -0
- package/dist/canvas/buildSceneTree.js +65 -0
- package/dist/canvas/buildSceneTree.js.map +1 -0
- package/dist/canvas/canvasRenderer.js +89 -0
- package/dist/canvas/canvasRenderer.js.map +1 -0
- package/dist/canvas/colorOverrides.js +16 -0
- package/dist/canvas/colorOverrides.js.map +1 -0
- package/dist/canvas/defaultDrawOne.js +43 -0
- package/dist/canvas/defaultDrawOne.js.map +1 -0
- package/dist/canvas/deps/areaSelect.js +19 -0
- package/dist/canvas/deps/areaSelect.js.map +1 -0
- package/dist/canvas/deps/debug.js +9 -0
- package/dist/canvas/deps/debug.js.map +1 -0
- package/dist/canvas/deps/dispatcher.js +11 -0
- package/dist/canvas/deps/dispatcher.js.map +1 -0
- package/dist/canvas/deps/editAnchors.js +101 -0
- package/dist/canvas/deps/editAnchors.js.map +1 -0
- package/dist/canvas/deps/geometryProjection.js +11 -0
- package/dist/canvas/deps/geometryProjection.js.map +1 -0
- package/dist/canvas/deps/hitTestArea.js +51 -0
- package/dist/canvas/deps/hitTestArea.js.map +1 -0
- package/dist/canvas/deps/ingestion.js +31 -0
- package/dist/canvas/deps/ingestion.js.map +1 -0
- package/dist/canvas/deps/insert.js +116 -0
- package/dist/canvas/deps/insert.js.map +1 -0
- package/dist/canvas/deps/lassoSelect.js +20 -0
- package/dist/canvas/deps/lassoSelect.js.map +1 -0
- package/dist/canvas/deps/layout.js +34 -0
- package/dist/canvas/deps/layout.js.map +1 -0
- package/dist/canvas/deps/nodeAtPoint.js +19 -0
- package/dist/canvas/deps/nodeAtPoint.js.map +1 -0
- package/dist/canvas/deps/poseComposition.js +11 -0
- package/dist/canvas/deps/poseComposition.js.map +1 -0
- package/dist/canvas/deps/poseDescriptor.js +12 -0
- package/dist/canvas/deps/poseDescriptor.js.map +1 -0
- package/dist/canvas/deps/resizePolicy.js +35 -0
- package/dist/canvas/deps/resizePolicy.js.map +1 -0
- package/dist/canvas/deps/slice.js +99 -0
- package/dist/canvas/deps/slice.js.map +1 -0
- package/dist/canvas/deps/snap.js +11 -0
- package/dist/canvas/deps/snap.js.map +1 -0
- package/dist/canvas/deps/textEdit.js +21 -0
- package/dist/canvas/deps/textEdit.js.map +1 -0
- package/dist/canvas/deps/view.js +43 -0
- package/dist/canvas/deps/view.js.map +1 -0
- package/dist/canvas/derivedPath.js +47 -0
- package/dist/canvas/derivedPath.js.map +1 -0
- package/dist/canvas/drawEnvelope.js +22 -0
- package/dist/canvas/drawEnvelope.js.map +1 -0
- package/dist/canvas/getNodeAtPoint.js +18 -0
- package/dist/canvas/getNodeAtPoint.js.map +1 -0
- package/dist/canvas/hostAnchor.js +29 -0
- package/dist/canvas/hostAnchor.js.map +1 -0
- package/dist/canvas/hud.module.js +18 -0
- package/dist/canvas/hud.module.js.map +1 -0
- package/dist/canvas/insertPreviewExtent.js +103 -0
- package/dist/canvas/insertPreviewExtent.js.map +1 -0
- package/dist/canvas/kitRequirements.js +177 -0
- package/dist/canvas/kitRequirements.js.map +1 -0
- package/dist/canvas/layerOrder.js +66 -0
- package/dist/canvas/layerOrder.js.map +1 -0
- package/dist/canvas/layerSlots.js +14 -0
- package/dist/canvas/layerSlots.js.map +1 -0
- package/dist/canvas/minimapMath.js +80 -0
- package/dist/canvas/minimapMath.js.map +1 -0
- package/dist/canvas/mountedCanvases.js +20 -0
- package/dist/canvas/mountedCanvases.js.map +1 -0
- package/dist/canvas/overlayRoleStrokes.js +17 -0
- package/dist/canvas/overlayRoleStrokes.js.map +1 -0
- package/dist/canvas/paintCull.js +20 -0
- package/dist/canvas/paintCull.js.map +1 -0
- package/dist/canvas/pickWalk.js +158 -0
- package/dist/canvas/pickWalk.js.map +1 -0
- package/dist/canvas/planeClips.js +30 -0
- package/dist/canvas/planeClips.js.map +1 -0
- package/dist/canvas/poseRotation.js +35 -0
- package/dist/canvas/poseRotation.js.map +1 -0
- package/dist/canvas/rasterToPng.js +21 -0
- package/dist/canvas/rasterToPng.js.map +1 -0
- package/dist/canvas/renderDebugSnapshot.js +32 -0
- package/dist/canvas/renderDebugSnapshot.js.map +1 -0
- package/dist/canvas/renderNeeds.js +25 -0
- package/dist/canvas/renderNeeds.js.map +1 -0
- package/dist/canvas/renderSceneToPixels.js +143 -0
- package/dist/canvas/renderSceneToPixels.js.map +1 -0
- package/dist/canvas/sceneAdapter.js +270 -0
- package/dist/canvas/sceneAdapter.js.map +1 -0
- package/dist/canvas/sceneLayerPaint.js +37 -0
- package/dist/canvas/sceneLayerPaint.js.map +1 -0
- package/dist/canvas/sceneSlotWiring.js +20 -0
- package/dist/canvas/sceneSlotWiring.js.map +1 -0
- package/dist/canvas/sceneViewRender.js +72 -0
- package/dist/canvas/sceneViewRender.js.map +1 -0
- package/dist/canvas/slopsDebugLayer.js +61 -0
- package/dist/canvas/slopsDebugLayer.js.map +1 -0
- package/dist/canvas/surfaceContribution.js +15 -0
- package/dist/canvas/surfaceContribution.js.map +1 -0
- package/dist/canvas/toolPreview.js +39 -0
- package/dist/canvas/toolPreview.js.map +1 -0
- package/dist/canvas/useCanvasRenderer.js +11 -0
- package/dist/canvas/useCanvasRenderer.js.map +1 -0
- package/dist/canvas/useFrameLoop.js +60 -0
- package/dist/canvas/useFrameLoop.js.map +1 -0
- package/dist/canvas/useHostAnchor.js +71 -0
- package/dist/canvas/useHostAnchor.js.map +1 -0
- package/dist/canvas/useLateContentRedraw.js +21 -0
- package/dist/canvas/useLateContentRedraw.js.map +1 -0
- package/dist/canvas/useRedrawOn.js +21 -0
- package/dist/canvas/useRedrawOn.js.map +1 -0
- package/dist/canvas/useViewHelpers.js +120 -0
- package/dist/canvas/useViewHelpers.js.map +1 -0
- package/dist/canvas/viewInputs.js +17 -0
- package/dist/canvas/viewInputs.js.map +1 -0
- package/dist/canvas/viewRegistry.js +61 -0
- package/dist/canvas/viewRegistry.js.map +1 -0
- package/dist/canvas/wrapNodeOutput.js +14 -0
- package/dist/canvas/wrapNodeOutput.js.map +1 -0
- package/dist/clipboard.d.ts +10 -5
- package/dist/clipboard.js +3 -5
- package/dist/clone.d.ts +3 -3
- package/dist/clone.js +2 -5
- package/dist/core/adapters/arrayAdapter.js +85 -0
- package/dist/core/adapters/arrayAdapter.js.map +1 -0
- package/dist/core/adapters/useArrayAdapter.js +13 -0
- package/dist/core/adapters/useArrayAdapter.js.map +1 -0
- package/dist/core/applyOps.js +12 -0
- package/dist/core/applyOps.js.map +1 -0
- package/dist/core/device/index.js +4 -0
- package/dist/core/device/targets.js +17 -0
- package/dist/core/device/targets.js.map +1 -0
- package/dist/core/device/useDeviceProfile.js +75 -0
- package/dist/core/device/useDeviceProfile.js.map +1 -0
- package/dist/core/fillInPoseFrame.js +102 -0
- package/dist/core/fillInPoseFrame.js.map +1 -0
- package/dist/core/geometry/poseDescriptor.js +93 -0
- package/dist/core/geometry/poseDescriptor.js.map +1 -0
- package/dist/core/geometry/poseRotation.js +58 -0
- package/dist/core/geometry/poseRotation.js.map +1 -0
- package/dist/core/geometry/regionHit.js +102 -0
- package/dist/core/geometry/regionHit.js.map +1 -0
- package/dist/core/geometry/unionBounds.js +60 -0
- package/dist/core/geometry/unionBounds.js.map +1 -0
- package/dist/core/gradient.js +136 -0
- package/dist/core/gradient.js.map +1 -0
- package/dist/core/isPlainObject.js +11 -0
- package/dist/core/isPlainObject.js.map +1 -0
- package/dist/core/layers/render.js +150 -0
- package/dist/core/layers/render.js.map +1 -0
- package/dist/core/markerInset.js +24 -0
- package/dist/core/markerInset.js.map +1 -0
- package/dist/core/mixed.js +6 -0
- package/dist/core/mixed.js.map +1 -0
- package/dist/core/ops/arrange.js +31 -0
- package/dist/core/ops/arrange.js.map +1 -0
- package/dist/core/ops/create.js +32 -0
- package/dist/core/ops/create.js.map +1 -0
- package/dist/core/ops/createHistory.js +20 -0
- package/dist/core/ops/createHistory.js.map +1 -0
- package/dist/core/ops/delete.js +89 -0
- package/dist/core/ops/delete.js.map +1 -0
- package/dist/core/ops/registry.js +17 -0
- package/dist/core/ops/registry.js.map +1 -0
- package/dist/core/ops/reorder/algorithms.js +55 -0
- package/dist/core/ops/reorder/algorithms.js.map +1 -0
- package/dist/core/ops/reorder/index.js +140 -0
- package/dist/core/ops/reorder/index.js.map +1 -0
- package/dist/core/ops/reparent.js +52 -0
- package/dist/core/ops/reparent.js.map +1 -0
- package/dist/core/ops/select.js +34 -0
- package/dist/core/ops/select.js.map +1 -0
- package/dist/core/ops/setData.js +34 -0
- package/dist/core/ops/setData.js.map +1 -0
- package/dist/core/ops/setLayer.js +34 -0
- package/dist/core/ops/setLayer.js.map +1 -0
- package/dist/core/ops/setLayout.js +31 -0
- package/dist/core/ops/setLayout.js.map +1 -0
- package/dist/core/ops/setPath.js +57 -0
- package/dist/core/ops/setPath.js.map +1 -0
- package/dist/core/ops/setText.js +34 -0
- package/dist/core/ops/setText.js.map +1 -0
- package/dist/core/ops/slot.js +37 -0
- package/dist/core/ops/slot.js.map +1 -0
- package/dist/core/ops/transform.js +42 -0
- package/dist/core/ops/transform.js.map +1 -0
- package/dist/core/paintKinds.js +156 -0
- package/dist/core/paintKinds.js.map +1 -0
- package/dist/core/scene/NodeProperties.js +20 -0
- package/dist/core/scene/NodeProperties.js.map +1 -0
- package/dist/core/scene/NodeRouting.js +24 -0
- package/dist/core/scene/NodeRouting.js.map +1 -0
- package/dist/core/scene/arrivals.js +12 -0
- package/dist/core/scene/arrivals.js.map +1 -0
- package/dist/core/scene/composeFrame.js +29 -0
- package/dist/core/scene/composeFrame.js.map +1 -0
- package/dist/core/scene/depMemo.js +18 -0
- package/dist/core/scene/depMemo.js.map +1 -0
- package/dist/core/scene/dependents.js +66 -0
- package/dist/core/scene/dependents.js.map +1 -0
- package/dist/core/scene/derivedPath.js +31 -0
- package/dist/core/scene/derivedPath.js.map +1 -0
- package/dist/core/scene/effectivePose.js +78 -0
- package/dist/core/scene/effectivePose.js.map +1 -0
- package/dist/core/scene/kitRegistry.js +33 -0
- package/dist/core/scene/kitRegistry.js.map +1 -0
- package/dist/core/scene/layoutPass.js +96 -0
- package/dist/core/scene/layoutPass.js.map +1 -0
- package/dist/core/scene/nodeFnFields.js +83 -0
- package/dist/core/scene/nodeFnFields.js.map +1 -0
- package/dist/core/scene/nodeMemo.js +28 -0
- package/dist/core/scene/nodeMemo.js.map +1 -0
- package/dist/core/scene/poseFeed.js +87 -0
- package/dist/core/scene/poseFeed.js.map +1 -0
- package/dist/core/scene/poseOverrides.js +52 -0
- package/dist/core/scene/poseOverrides.js.map +1 -0
- package/dist/core/scene/poseSnapshot.js +54 -0
- package/dist/core/scene/poseSnapshot.js.map +1 -0
- package/dist/core/scene/scene.js +1271 -0
- package/dist/core/scene/scene.js.map +1 -0
- package/dist/core/scene/types.js +6 -0
- package/dist/core/scene/types.js.map +1 -0
- package/dist/core/scene/useScene.js +32 -0
- package/dist/core/scene/useScene.js.map +1 -0
- package/dist/core/selection/chromeState.js +31 -0
- package/dist/core/selection/chromeState.js.map +1 -0
- package/dist/core/selection/selectionTarget.js +6 -0
- package/dist/core/selection/selectionTarget.js.map +1 -0
- package/dist/core/selection/useSelection.js +71 -0
- package/dist/core/selection/useSelection.js.map +1 -0
- package/dist/core/shapeKinds.js +54 -0
- package/dist/core/shapeKinds.js.map +1 -0
- package/dist/core/strokeMarkerShapes.js +139 -0
- package/dist/core/strokeMarkerShapes.js.map +1 -0
- package/dist/core/strokeMarkers.js +28 -0
- package/dist/core/strokeMarkers.js.map +1 -0
- package/dist/core/stylus/stylus.js +39 -0
- package/dist/core/stylus/stylus.js.map +1 -0
- package/dist/core/stylus/usePointerStylus.js +51 -0
- package/dist/core/stylus/usePointerStylus.js.map +1 -0
- package/dist/core/usePaintKinds.js +17 -0
- package/dist/core/usePaintKinds.js.map +1 -0
- package/dist/core/viewport/clampView.js +24 -0
- package/dist/core/viewport/clampView.js.map +1 -0
- package/dist/core/viewport/clientToWorld.js +8 -0
- package/dist/core/viewport/clientToWorld.js.map +1 -0
- package/dist/core/viewport/createVelocityTracker.js +39 -0
- package/dist/core/viewport/createVelocityTracker.js.map +1 -0
- package/dist/core/viewport/fitToBounds.js +18 -0
- package/dist/core/viewport/fitToBounds.js.map +1 -0
- package/dist/core/viewport/fitViewToBounds.js +36 -0
- package/dist/core/viewport/fitViewToBounds.js.map +1 -0
- package/dist/core/viewport/interpolateView.js +34 -0
- package/dist/core/viewport/interpolateView.js.map +1 -0
- package/dist/core/viewport/meanScale.js +8 -0
- package/dist/core/viewport/meanScale.js.map +1 -0
- package/dist/core/viewport/parallax.js +111 -0
- package/dist/core/viewport/parallax.js.map +1 -0
- package/dist/core/viewport/pxExtent.js +42 -0
- package/dist/core/viewport/pxExtent.js.map +1 -0
- package/dist/core/viewport/sceneNodeClientRect.js +18 -0
- package/dist/core/viewport/sceneNodeClientRect.js.map +1 -0
- package/dist/core/viewport/screenSlop.js +27 -0
- package/dist/core/viewport/screenSlop.js.map +1 -0
- package/dist/core/viewport/useAutoCenter.js +32 -0
- package/dist/core/viewport/useAutoCenter.js.map +1 -0
- package/dist/core/viewport/useCanvasSize.js +29 -0
- package/dist/core/viewport/useCanvasSize.js.map +1 -0
- package/dist/core/viewport/useDecayLoop.js +63 -0
- package/dist/core/viewport/useDecayLoop.js.map +1 -0
- package/dist/core/viewport/useVelocityTracker.js +10 -0
- package/dist/core/viewport/useVelocityTracker.js.map +1 -0
- package/dist/core/viewport/useViewAnimation.js +63 -0
- package/dist/core/viewport/useViewAnimation.js.map +1 -0
- package/dist/core/viewport/view.js +37 -0
- package/dist/core/viewport/view.js.map +1 -0
- package/dist/core/viewport/viewTransform.js +11 -0
- package/dist/core/viewport/viewTransform.js.map +1 -0
- package/dist/core/viewport/viewportWorldRect.js +13 -0
- package/dist/core/viewport/viewportWorldRect.js.map +1 -0
- package/dist/core/viewport/wheelHandler.js +30 -0
- package/dist/core/viewport/wheelHandler.js.map +1 -0
- package/dist/core/viewport/zoomAt.js +22 -0
- package/dist/core/viewport/zoomAt.js.map +1 -0
- package/dist/core/viewport/zoomBounds.js +20 -0
- package/dist/core/viewport/zoomBounds.js.map +1 -0
- package/dist/{pointSnapToGrid-Dp2IxLGb.d.ts → cornerHandles-BCrDp_mH.d.ts} +3 -13
- package/dist/debug/createDebugOverlayLayer.js +358 -0
- package/dist/debug/createDebugOverlayLayer.js.map +1 -0
- package/dist/debug/createDebugSink.js +83 -0
- package/dist/debug/createDebugSink.js.map +1 -0
- package/dist/debug/defaultTheme.js +31 -0
- package/dist/debug/defaultTheme.js.map +1 -0
- package/dist/debug/flag.js +41 -0
- package/dist/debug/flag.js.map +1 -0
- package/dist/debug/frameStats.js +16 -0
- package/dist/debug/frameStats.js.map +1 -0
- package/dist/debug/parseDebugFlags.js +32 -0
- package/dist/debug/parseDebugFlags.js.map +1 -0
- package/dist/features/chrome-caps/buildChromeCtx.js +16 -0
- package/dist/features/chrome-caps/buildChromeCtx.js.map +1 -0
- package/dist/features/chrome-caps/conditions.js +36 -0
- package/dist/features/chrome-caps/conditions.js.map +1 -0
- package/dist/features/chrome-caps/defaults.js +26 -0
- package/dist/features/chrome-caps/defaults.js.map +1 -0
- package/dist/features/chrome-caps/index.js +7 -0
- package/dist/features/chrome-caps/resolve.js +23 -0
- package/dist/features/chrome-caps/resolve.js.map +1 -0
- package/dist/features/chrome-caps/useHoverTracking.js +27 -0
- package/dist/features/chrome-caps/useHoverTracking.js.map +1 -0
- package/dist/features/cursor/paintedCursorLayer.js +60 -0
- package/dist/features/cursor/paintedCursorLayer.js.map +1 -0
- package/dist/features/focus/gateLayer.js +14 -0
- package/dist/features/focus/gateLayer.js.map +1 -0
- package/dist/features/focus/useCanvasFocus.js +29 -0
- package/dist/features/focus/useCanvasFocus.js.map +1 -0
- package/dist/features/groups/children.js +23 -0
- package/dist/features/groups/children.js.map +1 -0
- package/dist/features/groups/composePose.js +67 -0
- package/dist/features/groups/composePose.js.map +1 -0
- package/dist/features/groups/nestedHit.js +40 -0
- package/dist/features/groups/nestedHit.js.map +1 -0
- package/dist/features/groups/unionOfChildren.js +15 -0
- package/dist/features/groups/unionOfChildren.js.map +1 -0
- package/dist/features/images/imageCache.js +94 -0
- package/dist/features/images/imageCache.js.map +1 -0
- package/dist/features/ingestion/contentHandlers.js +37 -0
- package/dist/features/ingestion/contentHandlers.js.map +1 -0
- package/dist/features/ingestion/imageHandler.js +45 -0
- package/dist/features/ingestion/imageHandler.js.map +1 -0
- package/dist/features/ingestion/index.js +8 -0
- package/dist/features/ingestion/openFilePicker.js +15 -0
- package/dist/features/ingestion/openFilePicker.js.map +1 -0
- package/dist/features/ingestion/registerKitHandlers.js +26 -0
- package/dist/features/ingestion/registerKitHandlers.js.map +1 -0
- package/dist/features/ingestion/svgHandler.js +58 -0
- package/dist/features/ingestion/svgHandler.js.map +1 -0
- package/dist/features/ingestion/weaselJsonHandler.js +39 -0
- package/dist/features/ingestion/weaselJsonHandler.js.map +1 -0
- package/dist/features/longPress/longPressFeedback.js +96 -0
- package/dist/features/longPress/longPressFeedback.js.map +1 -0
- package/dist/features/meshPaint/bake.js +79 -0
- package/dist/features/meshPaint/bake.js.map +1 -0
- package/dist/features/meshPaint/bakeCache.js +59 -0
- package/dist/features/meshPaint/bakeCache.js.map +1 -0
- package/dist/features/meshPaint/handles.js +86 -0
- package/dist/features/meshPaint/handles.js.map +1 -0
- package/dist/features/meshPaint/lazyKind.js +1298 -0
- package/dist/features/meshPaint/lazyKind.js.map +1 -0
- package/dist/features/meshPaint/meshPaint.js +236 -0
- package/dist/features/meshPaint/meshPaint.js.map +1 -0
- package/dist/features/meshPaint/meshShader.js +6 -0
- package/dist/features/meshPaint/meshShader.js.map +1 -0
- package/dist/features/meshPaint/register.js +7 -0
- package/dist/features/meshPaint/register.js.map +1 -0
- package/dist/features/meshPaint/surface.js +110 -0
- package/dist/features/meshPaint/surface.js.map +1 -0
- package/dist/features/minimap/actions.js +53 -0
- package/dist/features/minimap/actions.js.map +1 -0
- package/dist/features/minimap/createMinimapContribution.js +96 -0
- package/dist/features/minimap/createMinimapContribution.js.map +1 -0
- package/dist/features/minimap/layers.js +103 -0
- package/dist/features/minimap/layers.js.map +1 -0
- package/dist/features/modes/modeLayers.js +113 -0
- package/dist/features/modes/modeLayers.js.map +1 -0
- package/dist/features/overlays/useNodeOverlayFrame.js +103 -0
- package/dist/features/overlays/useNodeOverlayFrame.js.map +1 -0
- package/dist/features/parallax/createParallaxLayer.js +26 -0
- package/dist/features/parallax/createParallaxLayer.js.map +1 -0
- package/dist/features/parallax/createParallaxPlane.js +26 -0
- package/dist/features/parallax/createParallaxPlane.js.map +1 -0
- package/dist/features/paths/anchorEdits.js +156 -0
- package/dist/features/paths/anchorEdits.js.map +1 -0
- package/dist/features/paths/anchors.js +154 -0
- package/dist/features/paths/anchors.js.map +1 -0
- package/dist/features/paths/booleans.js +2 -0
- package/dist/features/paths/index.js +15 -0
- package/dist/features/paths/markerCommands.js +116 -0
- package/dist/features/paths/markerCommands.js.map +1 -0
- package/dist/features/paths/markerSites.js +59 -0
- package/dist/features/paths/markerSites.js.map +1 -0
- package/dist/features/paths/markers.js +95 -0
- package/dist/features/paths/markers.js.map +1 -0
- package/dist/features/paths/nearestAnchor.js +36 -0
- package/dist/features/paths/nearestAnchor.js.map +1 -0
- package/dist/features/paths/originProjection.js +16 -0
- package/dist/features/paths/originProjection.js.map +1 -0
- package/dist/features/paths/pathEditingOverlayLayer.js +137 -0
- package/dist/features/paths/pathEditingOverlayLayer.js.map +1 -0
- package/dist/features/paths/pathInWorld.js +41 -0
- package/dist/features/paths/pathInWorld.js.map +1 -0
- package/dist/features/paths/pathLayer.js +44 -0
- package/dist/features/paths/pathLayer.js.map +1 -0
- package/dist/features/paths/penPreviewLayer.js +220 -0
- package/dist/features/paths/penPreviewLayer.js.map +1 -0
- package/dist/features/paths/poseDescriptor.js +39 -0
- package/dist/features/paths/poseDescriptor.js.map +1 -0
- package/dist/features/paths/tessellate/stroke.js +230 -0
- package/dist/features/paths/tessellate/stroke.js.map +1 -0
- package/dist/features/patterns/index.js +23 -0
- package/dist/features/patterns/index.js.map +1 -0
- package/dist/features/patterns/patterns-builtin.js +38 -0
- package/dist/features/patterns/patterns-builtin.js.map +1 -0
- package/dist/features/patterns/resolveSpec.js +57 -0
- package/dist/features/patterns/resolveSpec.js.map +1 -0
- package/dist/features/patterns/tileGeometry.js +158 -0
- package/dist/features/patterns/tileGeometry.js.map +1 -0
- package/dist/features/pointer/PointerContext.js +45 -0
- package/dist/features/pointer/PointerContext.js.map +1 -0
- package/dist/features/poseRun/usePoseRun.js +70 -0
- package/dist/features/poseRun/usePoseRun.js.map +1 -0
- package/dist/features/selection/SelectionContext.js +46 -0
- package/dist/features/selection/SelectionContext.js.map +1 -0
- package/dist/features/selection/overlay.js +442 -0
- package/dist/features/selection/overlay.js.map +1 -0
- package/dist/features/simulation/createSimulation.js +61 -0
- package/dist/features/simulation/createSimulation.js.map +1 -0
- package/dist/features/simulation/types.js +6 -0
- package/dist/features/simulation/types.js.map +1 -0
- package/dist/features/simulation/useSimulation.js +74 -0
- package/dist/features/simulation/useSimulation.js.map +1 -0
- package/dist/features/text/domRuns.js +258 -0
- package/dist/features/text/domRuns.js.map +1 -0
- package/dist/features/text/fitTextPose.js +38 -0
- package/dist/features/text/fitTextPose.js.map +1 -0
- package/dist/features/text/hitTest.js +45 -0
- package/dist/features/text/hitTest.js.map +1 -0
- package/dist/features/text/renderLabel.js +14 -0
- package/dist/features/text/renderLabel.js.map +1 -0
- package/dist/features/text/runs/effectiveRangeStyle.js +66 -0
- package/dist/features/text/runs/effectiveRangeStyle.js.map +1 -0
- package/dist/features/text/runs/flagRange.js +53 -0
- package/dist/features/text/runs/flagRange.js.map +1 -0
- package/dist/features/text/runs/rangeStyle.js +135 -0
- package/dist/features/text/runs/rangeStyle.js.map +1 -0
- package/dist/features/text/textCommand.js +59 -0
- package/dist/features/text/textCommand.js.map +1 -0
- package/dist/features/text/textLayer.js +35 -0
- package/dist/features/text/textLayer.js.map +1 -0
- package/dist/features/text/textToPath.js +181 -0
- package/dist/features/text/textToPath.js.map +1 -0
- package/dist/features/text/useSceneTextEdit.js +138 -0
- package/dist/features/text/useSceneTextEdit.js.map +1 -0
- package/dist/features/text/useTextEdit.js +465 -0
- package/dist/features/text/useTextEdit.js.map +1 -0
- package/dist/features/tiling/createTiledLayer.js +63 -0
- package/dist/features/tiling/createTiledLayer.js.map +1 -0
- package/dist/features/tiling/tiledProject.js +14 -0
- package/dist/features/tiling/tiledProject.js.map +1 -0
- package/dist/features/viewports/viewResolver.js +59 -0
- package/dist/features/viewports/viewResolver.js.map +1 -0
- package/dist/features/viewports/viewportLayer.js +58 -0
- package/dist/features/viewports/viewportLayer.js.map +1 -0
- package/dist/icons/ArrowIcon.js +23 -0
- package/dist/icons/ArrowIcon.js.map +1 -0
- package/dist/icons/EllipseIcon.js +21 -0
- package/dist/icons/EllipseIcon.js.map +1 -0
- package/dist/icons/EyedropperIcon.js +49 -0
- package/dist/icons/EyedropperIcon.js.map +1 -0
- package/dist/icons/HandIcon.js +59 -0
- package/dist/icons/HandIcon.js.map +1 -0
- package/dist/icons/ImageIcon.js +34 -0
- package/dist/icons/ImageIcon.js.map +1 -0
- package/dist/icons/LassoIcon.js +22 -0
- package/dist/icons/LassoIcon.js.map +1 -0
- package/dist/icons/LineIcon.js +22 -0
- package/dist/icons/LineIcon.js.map +1 -0
- package/dist/icons/PenIcon.js +36 -0
- package/dist/icons/PenIcon.js.map +1 -0
- package/dist/icons/PencilIcon.js +25 -0
- package/dist/icons/PencilIcon.js.map +1 -0
- package/dist/icons/PolygonIcon.js +19 -0
- package/dist/icons/PolygonIcon.js.map +1 -0
- package/dist/icons/RectIcon.js +37 -0
- package/dist/icons/RectIcon.js.map +1 -0
- package/dist/icons/SelectIcon.js +20 -0
- package/dist/icons/SelectIcon.js.map +1 -0
- package/dist/icons/StarIcon.js +19 -0
- package/dist/icons/StarIcon.js.map +1 -0
- package/dist/icons/TextIcon.js +19 -0
- package/dist/icons/TextIcon.js.map +1 -0
- package/dist/icons/UnknownIcon.js +33 -0
- package/dist/icons/UnknownIcon.js.map +1 -0
- package/dist/icons/_base.js +12 -0
- package/dist/icons/_base.js.map +1 -0
- package/dist/index.d.ts +1960 -1891
- package/dist/index.js +312 -13
- package/dist/input/keyState.js +76 -0
- package/dist/input/keyState.js.map +1 -0
- package/dist/input/useKeyState.js +22 -0
- package/dist/input/useKeyState.js.map +1 -0
- package/dist/interactions/actions/actionShortcuts.js +32 -0
- package/dist/interactions/actions/actionShortcuts.js.map +1 -0
- package/dist/interactions/actions/align/align.js +81 -0
- package/dist/interactions/actions/align/align.js.map +1 -0
- package/dist/interactions/actions/booleans/booleans.js +120 -0
- package/dist/interactions/actions/booleans/booleans.js.map +1 -0
- package/dist/interactions/actions/booleans/useBooleans.js +20 -0
- package/dist/interactions/actions/booleans/useBooleans.js.map +1 -0
- package/dist/interactions/actions/booleans/useBooleansAdapter.js +9 -0
- package/dist/interactions/actions/booleans/useBooleansAdapter.js.map +1 -0
- package/dist/interactions/actions/clipboard/clipboardOps.js +94 -0
- package/dist/interactions/actions/clipboard/clipboardOps.js.map +1 -0
- package/dist/interactions/actions/clipboard/materializePaste.js +25 -0
- package/dist/interactions/actions/clipboard/materializePaste.js.map +1 -0
- package/dist/interactions/actions/clipboard/wireFormat.js +43 -0
- package/dist/interactions/actions/clipboard/wireFormat.js.map +1 -0
- package/dist/interactions/actions/clone/behaviors/cloneByAltDrag.js +26 -0
- package/dist/interactions/actions/clone/behaviors/cloneByAltDrag.js.map +1 -0
- package/dist/interactions/actions/defaultCommitAdapter.js +42 -0
- package/dist/interactions/actions/defaultCommitAdapter.js.map +1 -0
- package/dist/interactions/actions/defaults/align.js +71 -0
- package/dist/interactions/actions/defaults/align.js.map +1 -0
- package/dist/interactions/actions/defaults/anchorEditing.js +235 -0
- package/dist/interactions/actions/defaults/anchorEditing.js.map +1 -0
- package/dist/interactions/actions/defaults/areaSelect.js +75 -0
- package/dist/interactions/actions/defaults/areaSelect.js.map +1 -0
- package/dist/interactions/actions/defaults/booleans.js +52 -0
- package/dist/interactions/actions/defaults/booleans.js.map +1 -0
- package/dist/interactions/actions/defaults/cancelGesture.js +24 -0
- package/dist/interactions/actions/defaults/cancelGesture.js.map +1 -0
- package/dist/interactions/actions/defaults/clearSelection.js +19 -0
- package/dist/interactions/actions/defaults/clearSelection.js.map +1 -0
- package/dist/interactions/actions/defaults/clipboard.js +78 -0
- package/dist/interactions/actions/defaults/clipboard.js.map +1 -0
- package/dist/interactions/actions/defaults/clone.js +107 -0
- package/dist/interactions/actions/defaults/clone.js.map +1 -0
- package/dist/interactions/actions/defaults/createOutlines.js +47 -0
- package/dist/interactions/actions/defaults/createOutlines.js.map +1 -0
- package/dist/interactions/actions/defaults/createPaintAction.js +85 -0
- package/dist/interactions/actions/defaults/createPaintAction.js.map +1 -0
- package/dist/interactions/actions/defaults/delete.js +61 -0
- package/dist/interactions/actions/defaults/delete.js.map +1 -0
- package/dist/interactions/actions/defaults/distribute.js +66 -0
- package/dist/interactions/actions/defaults/distribute.js.map +1 -0
- package/dist/interactions/actions/defaults/duplicate.js +83 -0
- package/dist/interactions/actions/defaults/duplicate.js.map +1 -0
- package/dist/interactions/actions/defaults/editAnchors.js +100 -0
- package/dist/interactions/actions/defaults/editAnchors.js.map +1 -0
- package/dist/interactions/actions/defaults/enterPathEdit.js +29 -0
- package/dist/interactions/actions/defaults/enterPathEdit.js.map +1 -0
- package/dist/interactions/actions/defaults/enterTextEdit.js +20 -0
- package/dist/interactions/actions/defaults/enterTextEdit.js.map +1 -0
- package/dist/interactions/actions/defaults/escape.js +26 -0
- package/dist/interactions/actions/defaults/escape.js.map +1 -0
- package/dist/interactions/actions/defaults/exitPathEdit.js +22 -0
- package/dist/interactions/actions/defaults/exitPathEdit.js.map +1 -0
- package/dist/interactions/actions/defaults/flip.js +119 -0
- package/dist/interactions/actions/defaults/flip.js.map +1 -0
- package/dist/interactions/actions/defaults/freshNodeId.js +10 -0
- package/dist/interactions/actions/defaults/freshNodeId.js.map +1 -0
- package/dist/interactions/actions/defaults/group.js +131 -0
- package/dist/interactions/actions/defaults/group.js.map +1 -0
- package/dist/interactions/actions/defaults/icons/actionGlyphIcons.js +40 -0
- package/dist/interactions/actions/defaults/icons/actionGlyphIcons.js.map +1 -0
- package/dist/interactions/actions/defaults/icons/actionGlyphs.js +10 -0
- package/dist/interactions/actions/defaults/icons/actionGlyphs.js.map +1 -0
- package/dist/interactions/actions/defaults/icons/alignIcons.js +173 -0
- package/dist/interactions/actions/defaults/icons/alignIcons.js.map +1 -0
- package/dist/interactions/actions/defaults/icons/booleanIcons.js +171 -0
- package/dist/interactions/actions/defaults/icons/booleanIcons.js.map +1 -0
- package/dist/interactions/actions/defaults/icons/distributeIcons.js +63 -0
- package/dist/interactions/actions/defaults/icons/distributeIcons.js.map +1 -0
- package/dist/interactions/actions/defaults/icons/editIcons.js +280 -0
- package/dist/interactions/actions/defaults/icons/editIcons.js.map +1 -0
- package/dist/interactions/actions/defaults/icons/outlineIcons.js +53 -0
- package/dist/interactions/actions/defaults/icons/outlineIcons.js.map +1 -0
- package/dist/interactions/actions/defaults/ingest.js +58 -0
- package/dist/interactions/actions/defaults/ingest.js.map +1 -0
- package/dist/interactions/actions/defaults/insert.js +288 -0
- package/dist/interactions/actions/defaults/insert.js.map +1 -0
- package/dist/interactions/actions/defaults/insertPathAnchor.js +50 -0
- package/dist/interactions/actions/defaults/insertPathAnchor.js.map +1 -0
- package/dist/interactions/actions/defaults/lassoSelect.js +156 -0
- package/dist/interactions/actions/defaults/lassoSelect.js.map +1 -0
- package/dist/interactions/actions/defaults/move.js +760 -0
- package/dist/interactions/actions/defaults/move.js.map +1 -0
- package/dist/interactions/actions/defaults/nudge.js +110 -0
- package/dist/interactions/actions/defaults/nudge.js.map +1 -0
- package/dist/interactions/actions/defaults/pinchZoom.js +63 -0
- package/dist/interactions/actions/defaults/pinchZoom.js.map +1 -0
- package/dist/interactions/actions/defaults/reorder.js +143 -0
- package/dist/interactions/actions/defaults/reorder.js.map +1 -0
- package/dist/interactions/actions/defaults/requiresSelection.js +10 -0
- package/dist/interactions/actions/defaults/requiresSelection.js.map +1 -0
- package/dist/interactions/actions/defaults/resize.js +335 -0
- package/dist/interactions/actions/defaults/resize.js.map +1 -0
- package/dist/interactions/actions/defaults/rotate.js +184 -0
- package/dist/interactions/actions/defaults/rotate.js.map +1 -0
- package/dist/interactions/actions/defaults/selectAll.js +27 -0
- package/dist/interactions/actions/defaults/selectAll.js.map +1 -0
- package/dist/interactions/actions/defaults/setFill.js +27 -0
- package/dist/interactions/actions/defaults/setFill.js.map +1 -0
- package/dist/interactions/actions/defaults/setFillOpacity.js +15 -0
- package/dist/interactions/actions/defaults/setFillOpacity.js.map +1 -0
- package/dist/interactions/actions/defaults/setStroke.js +36 -0
- package/dist/interactions/actions/defaults/setStroke.js.map +1 -0
- package/dist/interactions/actions/defaults/setStrokeOpacity.js +21 -0
- package/dist/interactions/actions/defaults/setStrokeOpacity.js.map +1 -0
- package/dist/interactions/actions/defaults/slice.js +39 -0
- package/dist/interactions/actions/defaults/slice.js.map +1 -0
- package/dist/interactions/actions/defaults/sliceOps.js +60 -0
- package/dist/interactions/actions/defaults/sliceOps.js.map +1 -0
- package/dist/interactions/actions/defaults/toolActivate.js +35 -0
- package/dist/interactions/actions/defaults/toolActivate.js.map +1 -0
- package/dist/interactions/actions/defaults/toolResetToDefault.js +26 -0
- package/dist/interactions/actions/defaults/toolResetToDefault.js.map +1 -0
- package/dist/interactions/actions/defaults/undoRedo.js +51 -0
- package/dist/interactions/actions/defaults/undoRedo.js.map +1 -0
- package/dist/interactions/actions/defaults/viewportDragPan.js +88 -0
- package/dist/interactions/actions/defaults/viewportDragPan.js.map +1 -0
- package/dist/interactions/actions/defaults/viewportWheelPan.js +57 -0
- package/dist/interactions/actions/defaults/viewportWheelPan.js.map +1 -0
- package/dist/interactions/actions/defaults/viewportZoom.js +143 -0
- package/dist/interactions/actions/defaults/viewportZoom.js.map +1 -0
- package/dist/interactions/actions/distribute/distribute.js +42 -0
- package/dist/interactions/actions/distribute/distribute.js.map +1 -0
- package/dist/interactions/actions/distribute/plan.js +29 -0
- package/dist/interactions/actions/distribute/plan.js.map +1 -0
- package/dist/interactions/actions/edit-anchors/geometry.js +61 -0
- package/dist/interactions/actions/edit-anchors/geometry.js.map +1 -0
- package/dist/interactions/actions/edit-anchors/handles.js +43 -0
- package/dist/interactions/actions/edit-anchors/handles.js.map +1 -0
- package/dist/interactions/actions/flip/helpers.js +35 -0
- package/dist/interactions/actions/flip/helpers.js.map +1 -0
- package/dist/interactions/actions/geometryProjection.js +18 -0
- package/dist/interactions/actions/geometryProjection.js.map +1 -0
- package/dist/interactions/actions/gestureLifecycle.js +44 -0
- package/dist/interactions/actions/gestureLifecycle.js.map +1 -0
- package/dist/interactions/actions/lasso-select/behaviors/selectFromLasso.js +39 -0
- package/dist/interactions/actions/lasso-select/behaviors/selectFromLasso.js.map +1 -0
- package/dist/interactions/actions/move/behaviors/snapBackOrDelete.js +36 -0
- package/dist/interactions/actions/move/behaviors/snapBackOrDelete.js.map +1 -0
- package/dist/interactions/actions/move/behaviors/snapToContainer.js +67 -0
- package/dist/interactions/actions/move/behaviors/snapToContainer.js.map +1 -0
- package/dist/interactions/actions/move/gestureAdapter.js +37 -0
- package/dist/interactions/actions/move/gestureAdapter.js.map +1 -0
- package/dist/interactions/actions/outlines/createOutlines.js +84 -0
- package/dist/interactions/actions/outlines/createOutlines.js.map +1 -0
- package/dist/interactions/actions/outlines/useCreateOutlinesAdapter.js +9 -0
- package/dist/interactions/actions/outlines/useCreateOutlinesAdapter.js.map +1 -0
- package/dist/interactions/actions/planeInput.js +181 -0
- package/dist/interactions/actions/planeInput.js.map +1 -0
- package/dist/interactions/actions/poseDescriptorDep.js +9 -0
- package/dist/interactions/actions/poseDescriptorDep.js.map +1 -0
- package/dist/interactions/actions/poseFrame.js +38 -0
- package/dist/interactions/actions/poseFrame.js.map +1 -0
- package/dist/interactions/actions/previewOverrides.js +25 -0
- package/dist/interactions/actions/previewOverrides.js.map +1 -0
- package/dist/interactions/actions/resize/autoPoseDescriptor.js +31 -0
- package/dist/interactions/actions/resize/autoPoseDescriptor.js.map +1 -0
- package/dist/interactions/actions/resize/behaviors/clampMinSize.js +18 -0
- package/dist/interactions/actions/resize/behaviors/clampMinSize.js.map +1 -0
- package/dist/interactions/actions/resize/behaviors/index.js +8 -0
- package/dist/interactions/actions/resize/behaviors/index.js.map +1 -0
- package/dist/interactions/actions/resize/behaviors/lockAspect.js +24 -0
- package/dist/interactions/actions/resize/behaviors/lockAspect.js.map +1 -0
- package/dist/interactions/actions/resize/cornerHandles.js +72 -0
- package/dist/interactions/actions/resize/cornerHandles.js.map +1 -0
- package/dist/interactions/actions/resolveOverlays.js +60 -0
- package/dist/interactions/actions/resolveOverlays.js.map +1 -0
- package/dist/interactions/actions/resolvePreviews.js +61 -0
- package/dist/interactions/actions/resolvePreviews.js.map +1 -0
- package/dist/interactions/actions/rotate/geometry.js +46 -0
- package/dist/interactions/actions/rotate/geometry.js.map +1 -0
- package/dist/interactions/actions/rotate/handle.js +27 -0
- package/dist/interactions/actions/rotate/handle.js.map +1 -0
- package/dist/interactions/actions/spatialReference.js +42 -0
- package/dist/interactions/actions/spatialReference.js.map +1 -0
- package/dist/interactions/actions/useStandardActions.js +142 -0
- package/dist/interactions/actions/useStandardActions.js.map +1 -0
- package/dist/interactions/gestures/dragGesture/dragGesture.js +111 -0
- package/dist/interactions/gestures/dragGesture/dragGesture.js.map +1 -0
- package/dist/interactions/gestures/dragRadial/dragRadial.js +117 -0
- package/dist/interactions/gestures/dragRadial/dragRadial.js.map +1 -0
- package/dist/interactions/gestures/dragRect/dragRect.js +164 -0
- package/dist/interactions/gestures/dragRect/dragRect.js.map +1 -0
- package/dist/interactions/gestures/handleDrag/handleDrag.js +46 -0
- package/dist/interactions/gestures/handleDrag/handleDrag.js.map +1 -0
- package/dist/interactions/gestures/pointerDrag/pointerDrag.js +118 -0
- package/dist/interactions/gestures/pointerDrag/pointerDrag.js.map +1 -0
- package/dist/interactions/gestures/shared/originProjection.js +42 -0
- package/dist/interactions/gestures/shared/originProjection.js.map +1 -0
- package/dist/interactions/gestures/shared/screenTolerance.js +21 -0
- package/dist/interactions/gestures/shared/screenTolerance.js.map +1 -0
- package/dist/interactions/gestures/shared/snap.js +24 -0
- package/dist/interactions/gestures/shared/snap.js.map +1 -0
- package/dist/interactions/gestures/thresholdDrag/thresholdDrag.js +30 -0
- package/dist/interactions/gestures/thresholdDrag/thresholdDrag.js.map +1 -0
- package/dist/layout/arrivals.js +36 -0
- package/dist/layout/arrivals.js.map +1 -0
- package/dist/{math-MCQcf_gc.d.ts → math-Drrw4ewZ.d.ts} +8 -116
- package/dist/math.d.ts +4 -5
- package/dist/math.js +6 -4
- package/dist/mesh.d.ts +268 -0
- package/dist/mesh.js +7 -0
- package/dist/move.d.ts +7 -49
- package/dist/move.js +3 -142
- package/dist/originProjection-DEklpDc_.d.ts +57 -0
- package/dist/patterns-builtin.js +3 -3
- package/dist/{poseDescriptor-rZa9W5hJ.d.ts → poseDescriptor-D-OH-tu5.d.ts} +0 -4
- package/dist/registerProgram-ateHDGjw.d.ts +193 -0
- package/dist/renderer/DrawCommand.js +6 -0
- package/dist/renderer/DrawCommand.js.map +1 -0
- package/dist/renderer/WeaselRenderer.js +328 -0
- package/dist/renderer/WeaselRenderer.js.map +1 -0
- package/dist/renderer/cache/GLImageCache.js +64 -0
- package/dist/renderer/cache/GLImageCache.js.map +1 -0
- package/dist/renderer/cache/GLMeshCache.js +102 -0
- package/dist/renderer/cache/GLMeshCache.js.map +1 -0
- package/dist/renderer/cache/GLTextureCache.js +51 -0
- package/dist/renderer/cache/GLTextureCache.js.map +1 -0
- package/dist/renderer/cache/GradientRampAtlas.js +82 -0
- package/dist/renderer/cache/GradientRampAtlas.js.map +1 -0
- package/dist/renderer/cache/cache.js +13 -0
- package/dist/renderer/cache/cache.js.map +1 -0
- package/dist/renderer/cache/markerCommandCache.js +59 -0
- package/dist/renderer/cache/markerCommandCache.js.map +1 -0
- package/dist/renderer/cache/outlineMeshCache.js +15 -0
- package/dist/renderer/cache/outlineMeshCache.js.map +1 -0
- package/dist/renderer/cache/outlineStrokeMeshCache.js +31 -0
- package/dist/renderer/cache/outlineStrokeMeshCache.js.map +1 -0
- package/dist/renderer/cache/strokeMeshCache.js +44 -0
- package/dist/renderer/cache/strokeMeshCache.js.map +1 -0
- package/dist/renderer/cullDrawCommands.js +89 -0
- package/dist/renderer/cullDrawCommands.js.map +1 -0
- package/dist/renderer/draw.js +1109 -0
- package/dist/renderer/draw.js.map +1 -0
- package/dist/renderer/drawBatch.js +168 -0
- package/dist/renderer/drawBatch.js.map +1 -0
- package/dist/renderer/effects/EffectTargets.js +45 -0
- package/dist/renderer/effects/EffectTargets.js.map +1 -0
- package/dist/renderer/effects/builtins.js +31 -0
- package/dist/renderer/effects/builtins.js.map +1 -0
- package/dist/renderer/effects/composite.js +9 -0
- package/dist/renderer/effects/composite.js.map +1 -0
- package/dist/renderer/effects/effectPrelude.js +10 -0
- package/dist/renderer/effects/effectPrelude.js.map +1 -0
- package/dist/renderer/effects/types.js +10 -0
- package/dist/renderer/effects/types.js.map +1 -0
- package/dist/renderer/index.js +19 -0
- package/dist/renderer/math/color.js +341 -0
- package/dist/renderer/math/color.js.map +1 -0
- package/dist/renderer/math/mat3.js +71 -0
- package/dist/renderer/math/mat3.js.map +1 -0
- package/dist/renderer/math/patternSpace.js +22 -0
- package/dist/renderer/math/patternSpace.js.map +1 -0
- package/dist/renderer/math/viewToMat3.js +19 -0
- package/dist/renderer/math/viewToMat3.js.map +1 -0
- package/dist/renderer/paintResources.js +18 -0
- package/dist/renderer/paintResources.js.map +1 -0
- package/dist/renderer/paintScratch.js +37 -0
- package/dist/renderer/paintScratch.js.map +1 -0
- package/dist/renderer/shaders/ShaderProgram.js +74 -0
- package/dist/renderer/shaders/ShaderProgram.js.map +1 -0
- package/dist/renderer/shaders/batchFill.js +118 -0
- package/dist/renderer/shaders/batchFill.js.map +1 -0
- package/dist/renderer/shaders/customPrelude.js +34 -0
- package/dist/renderer/shaders/customPrelude.js.map +1 -0
- package/dist/renderer/shaders/extractUniformNames.js +184 -0
- package/dist/renderer/shaders/extractUniformNames.js.map +1 -0
- package/dist/renderer/shaders/glyphPaint.js +61 -0
- package/dist/renderer/shaders/glyphPaint.js.map +1 -0
- package/dist/renderer/shaders/gradFill.js +30 -0
- package/dist/renderer/shaders/gradFill.js.map +1 -0
- package/dist/renderer/shaders/imageFill.js +14 -0
- package/dist/renderer/shaders/imageFill.js.map +1 -0
- package/dist/renderer/shaders/pathFill.js +13 -0
- package/dist/renderer/shaders/pathFill.js.map +1 -0
- package/dist/renderer/shaders/patternFill.js +24 -0
- package/dist/renderer/shaders/patternFill.js.map +1 -0
- package/dist/renderer/shaders/registerProgram.js +18 -0
- package/dist/renderer/shaders/registerProgram.js.map +1 -0
- package/dist/renderer/spriteSheet.js +14 -0
- package/dist/renderer/spriteSheet.js.map +1 -0
- package/dist/renderer/state/GroupState.js +77 -0
- package/dist/renderer/state/GroupState.js.map +1 -0
- package/dist/renderer/syntheticItalic.js +6 -0
- package/dist/renderer/syntheticItalic.js.map +1 -0
- package/dist/renderer/textures/registerTexture.js +14 -0
- package/dist/renderer/textures/registerTexture.js.map +1 -0
- package/dist/renderer.d.ts +11 -21
- package/dist/renderer.js +18 -13
- package/dist/resize.d.ts +10 -46
- package/dist/resize.js +7 -5
- package/dist/routing.js +2 -3
- package/dist/scheduling/useVisibleRaf.js +69 -0
- package/dist/scheduling/useVisibleRaf.js.map +1 -0
- package/dist/style.css +2 -0
- package/dist/test-hook/createTestHook.js +39 -0
- package/dist/test-hook/createTestHook.js.map +1 -0
- package/dist/test-hook/install.js +12 -0
- package/dist/test-hook/install.js.map +1 -0
- package/dist/test-seams-fYf6m5pu.d.ts +356 -0
- package/dist/test-seams.d.ts +6 -0
- package/dist/test-seams.js +3 -0
- package/dist/tools/builtin/ellipse/useEllipseTool.js +33 -0
- package/dist/tools/builtin/ellipse/useEllipseTool.js.map +1 -0
- package/dist/tools/builtin/eyedropper/useEyedropperTool.js +55 -0
- package/dist/tools/builtin/eyedropper/useEyedropperTool.js.map +1 -0
- package/dist/tools/builtin/hand/dragPanContribution.js +17 -0
- package/dist/tools/builtin/hand/dragPanContribution.js.map +1 -0
- package/dist/tools/builtin/hand/useHandTool.js +31 -0
- package/dist/tools/builtin/hand/useHandTool.js.map +1 -0
- package/dist/tools/builtin/image/useImageTool.js +41 -0
- package/dist/tools/builtin/image/useImageTool.js.map +1 -0
- package/dist/tools/builtin/lasso/useLassoTool.js +42 -0
- package/dist/tools/builtin/lasso/useLassoTool.js.map +1 -0
- package/dist/tools/builtin/line/useLineTool.js +33 -0
- package/dist/tools/builtin/line/useLineTool.js.map +1 -0
- package/dist/tools/builtin/pen/usePenTool.js +414 -0
- package/dist/tools/builtin/pen/usePenTool.js.map +1 -0
- package/dist/tools/builtin/pencil/usePencilTool.js +36 -0
- package/dist/tools/builtin/pencil/usePencilTool.js.map +1 -0
- package/dist/tools/builtin/pickTopMostHit.js +45 -0
- package/dist/tools/builtin/pickTopMostHit.js.map +1 -0
- package/dist/tools/builtin/polygon/usePolygonTool.js +81 -0
- package/dist/tools/builtin/polygon/usePolygonTool.js.map +1 -0
- package/dist/tools/builtin/rect/useRectTool.js +32 -0
- package/dist/tools/builtin/rect/useRectTool.js.map +1 -0
- package/dist/tools/builtin/select/selectionContributions.js +109 -0
- package/dist/tools/builtin/select/selectionContributions.js.map +1 -0
- package/dist/tools/builtin/select/useSelectTool.js +162 -0
- package/dist/tools/builtin/select/useSelectTool.js.map +1 -0
- package/dist/tools/builtin/shared/insertToolOptions.js +8 -0
- package/dist/tools/builtin/shared/insertToolOptions.js.map +1 -0
- package/dist/tools/builtin/slice/useSliceTool.js +263 -0
- package/dist/tools/builtin/slice/useSliceTool.js.map +1 -0
- package/dist/tools/builtin/star/useStarTool.js +82 -0
- package/dist/tools/builtin/star/useStarTool.js.map +1 -0
- package/dist/tools/builtin/text/useTextTool.js +177 -0
- package/dist/tools/builtin/text/useTextTool.js.map +1 -0
- package/dist/tools/overlayBinding.js +8 -0
- package/dist/tools/overlayBinding.js.map +1 -0
- package/dist/tools/prefs.js +47 -0
- package/dist/tools/prefs.js.map +1 -0
- package/dist/tools/useKeybindings.js +66 -0
- package/dist/tools/useKeybindings.js.map +1 -0
- package/dist/{types-D-9QWBy5.d.ts → types-A37hYkeR.d.ts} +185 -15
- package/dist/{types-qYpyTAiZ.d.ts → types-B_9g6hMM.d.ts} +32 -6
- package/dist/util/color.js +26 -0
- package/dist/util/color.js.map +1 -0
- package/dist/util/constrainTo45.js +17 -0
- package/dist/util/constrainTo45.js.map +1 -0
- package/dist/util/paint.js +72 -0
- package/dist/util/paint.js.map +1 -0
- package/dist/version.js +6 -0
- package/dist/version.js.map +1 -0
- package/package.json +31 -19
- package/dist/chunk-3TY6FHAF.js +0 -170
- package/dist/chunk-3TY6FHAF.js.map +0 -1
- package/dist/chunk-DGWNNKGD.js +0 -248
- package/dist/chunk-DGWNNKGD.js.map +0 -1
- package/dist/chunk-G4ZGQMY7.js +0 -33372
- package/dist/chunk-G4ZGQMY7.js.map +0 -1
- package/dist/chunk-L5YNZYEG.js +0 -648
- package/dist/chunk-L5YNZYEG.js.map +0 -1
- package/dist/chunk-LU4IJ52W.js +0 -111
- package/dist/chunk-LU4IJ52W.js.map +0 -1
- package/dist/chunk-M24CLARN.js +0 -28
- package/dist/chunk-M24CLARN.js.map +0 -1
- package/dist/chunk-NE27EOLP.js +0 -146
- package/dist/chunk-NE27EOLP.js.map +0 -1
- package/dist/chunk-PNNZSYRD.js +0 -318
- package/dist/chunk-PNNZSYRD.js.map +0 -1
- package/dist/chunk-UPZY4ART.js +0 -29
- package/dist/chunk-UPZY4ART.js.map +0 -1
- package/dist/chunk-WPNA6L5O.js +0 -250
- package/dist/chunk-WPNA6L5O.js.map +0 -1
- package/dist/chunk-XMAWPGTK.js +0 -128
- package/dist/chunk-XMAWPGTK.js.map +0 -1
- package/dist/clipboard.js.map +0 -1
- package/dist/clone.js.map +0 -1
- package/dist/grid-CY5UKlZh.d.ts +0 -98
- package/dist/index.css +0 -62
- package/dist/index.css.map +0 -1
- package/dist/index.js.map +0 -1
- package/dist/insert.d.ts +0 -36
- package/dist/insert.js +0 -81
- package/dist/insert.js.map +0 -1
- package/dist/math.js.map +0 -1
- package/dist/move.js.map +0 -1
- package/dist/path-JEV2c5If.d.ts +0 -48
- package/dist/patterns-builtin.js.map +0 -1
- package/dist/renderer.css +0 -62
- package/dist/renderer.css.map +0 -1
- package/dist/renderer.js.map +0 -1
- package/dist/resize.js.map +0 -1
- package/dist/routing.js.map +0 -1
- package/dist/types-D2tTKEU0.d.ts +0 -18
|
@@ -0,0 +1,329 @@
|
|
|
1
|
+
import { useVisibleRaf as e } from "../scheduling/useVisibleRaf.js";
|
|
2
|
+
import { createLoop as t, createTweenLoop as n } from "./loop.js";
|
|
3
|
+
import { createStagger as r } from "./stagger.js";
|
|
4
|
+
import { createTimeline as i } from "./timeline/createTimeline.js";
|
|
5
|
+
import { ColorOverrideRegistry as a } from "./colorRegistry.js";
|
|
6
|
+
import { AnimatorEventHub as o } from "./observe.js";
|
|
7
|
+
import { SPRING_PRESETS as s, easeOut as c, resolveEasing as l } from "@weasel-js/geom";
|
|
8
|
+
import { useCallback as u, useEffect as d, useInsertionEffect as f, useMemo as p, useRef as m } from "react";
|
|
9
|
+
import { useLatest as h } from "@weasel-js/react";
|
|
10
|
+
//#region src/animation/useAnimator.ts
|
|
11
|
+
var g = (e, t, n) => e + (t - e) * n;
|
|
12
|
+
function _(e) {
|
|
13
|
+
let t = e.preset ? s[e.preset] : null;
|
|
14
|
+
return {
|
|
15
|
+
stiffness: e.stiffness ?? t?.stiffness ?? 170,
|
|
16
|
+
damping: e.damping ?? t?.damping ?? 26,
|
|
17
|
+
mass: e.mass ?? t?.mass ?? 1
|
|
18
|
+
};
|
|
19
|
+
}
|
|
20
|
+
function v(s = {}) {
|
|
21
|
+
let v = h(s), y = m(/* @__PURE__ */ new Map()), b = m(1), x = m(0), S = m(1), C = m(!1), w = m(new a()), T = m(/* @__PURE__ */ new Set()), E = m(null), D = e(u((e) => {
|
|
22
|
+
E.current?.(e);
|
|
23
|
+
}, []), {
|
|
24
|
+
requestFrame: s.requestFrame,
|
|
25
|
+
cancelFrame: s.cancelFrame,
|
|
26
|
+
onResume: () => {
|
|
27
|
+
for (let e of y.current.values()) e.lastRealNow = null;
|
|
28
|
+
}
|
|
29
|
+
}), O = h(D), k = m(!0), A = m(!1), j = () => !k.current && (A.current || (A.current = !0, (typeof process > "u" || process.env.NODE_ENV !== "production") && console.error("weasel useAnimator: animation tick fired after the host component unmounted. This usually means cleanup logic was bypassed — check for refactors that removed the unmount effect or replaced cancelAll with a custom path.")), !0), { api: M, tickAll: N } = p(() => {
|
|
30
|
+
let e = () => (v.current.now ?? (typeof performance < "u" ? performance.now.bind(performance) : Date.now))(), a = {
|
|
31
|
+
setTimer: (e, t) => (v.current.setTimer ?? ((e, t) => setTimeout(e, t)))(e, t),
|
|
32
|
+
clearTimer: (e) => (v.current.clearTimer ?? ((e) => clearTimeout(e)))(e),
|
|
33
|
+
now: e
|
|
34
|
+
}, s = /* @__PURE__ */ new Map(), u = (e) => {
|
|
35
|
+
let t = s.get(e);
|
|
36
|
+
if (t) {
|
|
37
|
+
s.delete(e);
|
|
38
|
+
for (let e of t) e();
|
|
39
|
+
}
|
|
40
|
+
}, d = (e, t) => {
|
|
41
|
+
let n = s.get(e) ?? [];
|
|
42
|
+
return n.push(t), s.set(e, n), () => {
|
|
43
|
+
let n = s.get(e);
|
|
44
|
+
if (!n) return;
|
|
45
|
+
let r = n.indexOf(t);
|
|
46
|
+
r >= 0 && n.splice(r, 1), n.length === 0 && s.delete(e);
|
|
47
|
+
};
|
|
48
|
+
}, f = new o(), p = (e) => {
|
|
49
|
+
if (!e.info) {
|
|
50
|
+
let t = {
|
|
51
|
+
id: e.id,
|
|
52
|
+
kind: e.kind
|
|
53
|
+
};
|
|
54
|
+
e.cancelKey != null && (t.key = e.cancelKey), e.label != null && (t.label = e.label), e.info = t;
|
|
55
|
+
}
|
|
56
|
+
return e.info;
|
|
57
|
+
}, m = (e) => {
|
|
58
|
+
let t = y.current.get(e);
|
|
59
|
+
t && !t.ended && (t.ended = !0, f.watched && f.emit({
|
|
60
|
+
type: "end",
|
|
61
|
+
animation: p(t)
|
|
62
|
+
}));
|
|
63
|
+
}, h = (e, t) => {
|
|
64
|
+
let n = y.current.get(e);
|
|
65
|
+
n && (n.onCancel?.(), y.current.delete(e), u(e), f.watched && !n.ended && f.emit(t ? {
|
|
66
|
+
type: "interrupt",
|
|
67
|
+
animation: p(n),
|
|
68
|
+
by: p(t)
|
|
69
|
+
} : {
|
|
70
|
+
type: "cancel",
|
|
71
|
+
animation: p(n)
|
|
72
|
+
}));
|
|
73
|
+
}, E = (e) => {
|
|
74
|
+
let t = [];
|
|
75
|
+
for (let n of y.current.values()) {
|
|
76
|
+
let r = n.lastRealNow == null ? 0 : Math.max(0, e - n.lastRealNow);
|
|
77
|
+
n.lastRealNow = e;
|
|
78
|
+
let i = C.current ? 0 : S.current * (n.paused ? 0 : n.timeScale);
|
|
79
|
+
n.virtualNow += r * i, x.current += 1;
|
|
80
|
+
try {
|
|
81
|
+
n.tick(n.virtualNow, i) && t.push(n);
|
|
82
|
+
} finally {
|
|
83
|
+
--x.current;
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
for (let e of t) y.current.get(e.id) === e && (m(e.id), y.current.delete(e.id), u(e.id));
|
|
87
|
+
for (let e of T.current) try {
|
|
88
|
+
e();
|
|
89
|
+
} catch (e) {
|
|
90
|
+
console.error("useAnimator: onTick subscriber threw", e);
|
|
91
|
+
}
|
|
92
|
+
y.current.size > 0 && O.current.request();
|
|
93
|
+
}, D = () => {
|
|
94
|
+
y.current.size !== 0 && O.current.request();
|
|
95
|
+
}, k = (e, t) => {
|
|
96
|
+
let n = [];
|
|
97
|
+
for (let t of y.current.values()) t.cancelKey === e && n.push(t.id);
|
|
98
|
+
for (let e of n) h(e, t);
|
|
99
|
+
}, A = (t) => {
|
|
100
|
+
let n = t;
|
|
101
|
+
return t.cancelKey != null && !t.keepExisting && k(t.cancelKey, n), n.paused = !1, n.timeScale = 1, n.virtualNow = 0, n.lastRealNow = e(), y.current.set(n.id, n), f.watched && f.emit({
|
|
102
|
+
type: "start",
|
|
103
|
+
animation: p(n)
|
|
104
|
+
}), D(), {
|
|
105
|
+
id: n.id,
|
|
106
|
+
cancel: () => h(n.id),
|
|
107
|
+
pause: () => {
|
|
108
|
+
let e = y.current.get(n.id);
|
|
109
|
+
e && (e.paused = !0);
|
|
110
|
+
},
|
|
111
|
+
resume: () => {
|
|
112
|
+
let e = y.current.get(n.id);
|
|
113
|
+
e && (e.paused = !1);
|
|
114
|
+
},
|
|
115
|
+
setTimeScale: (e) => {
|
|
116
|
+
let t = y.current.get(n.id);
|
|
117
|
+
t && (t.timeScale = e);
|
|
118
|
+
},
|
|
119
|
+
timeScale: () => y.current.get(n.id)?.timeScale ?? 1,
|
|
120
|
+
isPaused: () => y.current.get(n.id)?.paused ?? !1
|
|
121
|
+
};
|
|
122
|
+
}, M = ({ kind: e, cancelKey: t, label: n }) => {
|
|
123
|
+
let r = b.current++, i, a = A({
|
|
124
|
+
id: r,
|
|
125
|
+
kind: e,
|
|
126
|
+
cancelKey: t,
|
|
127
|
+
label: n,
|
|
128
|
+
tick: () => !1,
|
|
129
|
+
onCancel: () => i?.()
|
|
130
|
+
});
|
|
131
|
+
return {
|
|
132
|
+
id: a.id,
|
|
133
|
+
cancel: a.cancel,
|
|
134
|
+
pause: a.pause,
|
|
135
|
+
resume: a.resume,
|
|
136
|
+
setTimeScale: a.setTimeScale,
|
|
137
|
+
timeScale: a.timeScale,
|
|
138
|
+
isPaused: a.isPaused,
|
|
139
|
+
setOnCancel: (e) => {
|
|
140
|
+
i = e;
|
|
141
|
+
},
|
|
142
|
+
finish: () => {
|
|
143
|
+
y.current.has(r) && (m(r), y.current.delete(r), u(r));
|
|
144
|
+
},
|
|
145
|
+
cancelKey: t
|
|
146
|
+
};
|
|
147
|
+
}, N = (e) => {
|
|
148
|
+
let t = b.current++, n = l(e.easing ?? c), r = e.interpolator ? e.interpolator(e.from, e.to) : null, i = r ? null : e.interpolate ?? ((e, t, n) => {
|
|
149
|
+
if (typeof e == "number" && typeof t == "number") return g(e, t, n);
|
|
150
|
+
throw Error("tween: interpolate or interpolator is required for non-numeric T");
|
|
151
|
+
}), a = !1;
|
|
152
|
+
return A({
|
|
153
|
+
id: t,
|
|
154
|
+
kind: "tween",
|
|
155
|
+
cancelKey: e.cancelKey,
|
|
156
|
+
label: e.label,
|
|
157
|
+
progress: (t) => e.ms <= 0 ? 1 : Math.min(1, t / e.ms),
|
|
158
|
+
tick(o) {
|
|
159
|
+
if (j()) return !0;
|
|
160
|
+
let s = o - 0, c = e.ms <= 0 ? 1 : Math.min(1, Math.max(0, s / e.ms)), l = n(c), u = r ? r(l) : i(e.from, e.to, l);
|
|
161
|
+
return e.onTick(u), c >= 1 && !a && (a = !0, y.current.has(t) && (m(t), e.onDone?.()), !0);
|
|
162
|
+
}
|
|
163
|
+
});
|
|
164
|
+
}, P = (e, t = "physics") => {
|
|
165
|
+
let n = b.current++;
|
|
166
|
+
if (typeof e.from != "number" && (!e.add || !e.subtract || !e.scale || !e.magnitude)) throw Error("physics: add/subtract/scale/magnitude are required for non-numeric T");
|
|
167
|
+
let r = e.add ?? ((e, t) => e + t), i = e.subtract ?? ((e, t) => e - t), a = e.scale ?? ((e, t) => e * t), o = e.magnitude ?? ((e) => Math.abs(e)), { stiffness: s, damping: c, mass: l } = _(e), u = e.restThreshold ?? .01, d = e.to ?? null, f = e.from, p = e.velocity ?? a(e.from, 0), h = null;
|
|
168
|
+
return {
|
|
169
|
+
...A({
|
|
170
|
+
id: n,
|
|
171
|
+
kind: t,
|
|
172
|
+
cancelKey: e.cancelKey,
|
|
173
|
+
label: e.label,
|
|
174
|
+
tick(t) {
|
|
175
|
+
if (j()) return !0;
|
|
176
|
+
if (h == null) return h = t, d == null && o(p) < u ? (m(n), e.onDone?.(), !0) : (e.onTick(f), !1);
|
|
177
|
+
let g = Math.min(.064, (t - h) / 1e3);
|
|
178
|
+
h = t;
|
|
179
|
+
let _ = i(f, d ?? f), v = a(_, d == null ? 0 : -s), y = a(p, -c), b = a(r(v, y), 1 / l);
|
|
180
|
+
p = r(p, a(b, g)), f = r(f, a(p, g)), e.onTick(f);
|
|
181
|
+
let x = o(p) < u, S = d == null || o(i(f, d)) < u;
|
|
182
|
+
return x && S ? (d != null && e.onTick(d), m(n), e.onDone?.(), !0) : !1;
|
|
183
|
+
}
|
|
184
|
+
}),
|
|
185
|
+
setTarget: (e) => {
|
|
186
|
+
d = e;
|
|
187
|
+
},
|
|
188
|
+
setVelocity: (e) => {
|
|
189
|
+
p = e;
|
|
190
|
+
}
|
|
191
|
+
};
|
|
192
|
+
}, F = {
|
|
193
|
+
tween: N,
|
|
194
|
+
spring: (e) => P(e, "spring"),
|
|
195
|
+
decay: (e) => {
|
|
196
|
+
let t = e.friction ?? .95, n = -Math.log(t);
|
|
197
|
+
return P({
|
|
198
|
+
from: e.from,
|
|
199
|
+
to: null,
|
|
200
|
+
velocity: e.velocity,
|
|
201
|
+
stiffness: 0,
|
|
202
|
+
damping: n,
|
|
203
|
+
mass: 1,
|
|
204
|
+
restThreshold: e.threshold ?? .5,
|
|
205
|
+
add: e.add,
|
|
206
|
+
subtract: (t, n) => e.add(t, e.scale(n, -1)),
|
|
207
|
+
scale: e.scale,
|
|
208
|
+
magnitude: e.magnitude,
|
|
209
|
+
onTick: e.onTick,
|
|
210
|
+
onDone: e.onDone,
|
|
211
|
+
cancelKey: e.cancelKey,
|
|
212
|
+
label: e.label
|
|
213
|
+
}, "decay");
|
|
214
|
+
},
|
|
215
|
+
physics: P,
|
|
216
|
+
cancel: (e) => h(e.id),
|
|
217
|
+
cancelKey: (e) => k(e),
|
|
218
|
+
cancelAll: () => {
|
|
219
|
+
let e = [];
|
|
220
|
+
for (let t of y.current.values()) t.onCancel?.(), e.push(t);
|
|
221
|
+
y.current.clear();
|
|
222
|
+
for (let t of e) u(t.id);
|
|
223
|
+
if (f.watched) for (let t of e) f.emit({
|
|
224
|
+
type: "cancel",
|
|
225
|
+
animation: p(t)
|
|
226
|
+
});
|
|
227
|
+
O.current.cancel();
|
|
228
|
+
},
|
|
229
|
+
isActive: (e) => {
|
|
230
|
+
if (e == null) return y.current.size > 0;
|
|
231
|
+
for (let t of y.current.values()) if (t.cancelKey === e) return !0;
|
|
232
|
+
return !1;
|
|
233
|
+
},
|
|
234
|
+
isTicking: () => x.current > 0,
|
|
235
|
+
pause: () => {
|
|
236
|
+
C.current = !0;
|
|
237
|
+
},
|
|
238
|
+
resume: () => {
|
|
239
|
+
C.current = !1;
|
|
240
|
+
},
|
|
241
|
+
isPaused: () => C.current,
|
|
242
|
+
setTimeScale: (e) => {
|
|
243
|
+
S.current = e;
|
|
244
|
+
},
|
|
245
|
+
timeScale: () => S.current,
|
|
246
|
+
pauseKey: (e) => {
|
|
247
|
+
for (let t of y.current.values()) t.cancelKey === e && (t.paused = !0);
|
|
248
|
+
},
|
|
249
|
+
resumeKey: (e) => {
|
|
250
|
+
for (let t of y.current.values()) t.cancelKey === e && (t.paused = !1);
|
|
251
|
+
},
|
|
252
|
+
setTimeScaleByKey: (e, t) => {
|
|
253
|
+
for (let n of y.current.values()) n.cancelKey === e && (n.timeScale = t);
|
|
254
|
+
},
|
|
255
|
+
loop: (e, n) => t(M, e, n),
|
|
256
|
+
tweenLoop: (e) => n(F, M, e),
|
|
257
|
+
stagger: ((e, t, n, i) => r(F, a, M, d, e, t, n, i)),
|
|
258
|
+
timeline: (e) => {
|
|
259
|
+
let t = b.current++, n = () => {
|
|
260
|
+
let e = y.current.get(t);
|
|
261
|
+
return e && p(e);
|
|
262
|
+
};
|
|
263
|
+
return i(A, t, e, {
|
|
264
|
+
get watched() {
|
|
265
|
+
return f.watched;
|
|
266
|
+
},
|
|
267
|
+
fire: (e, t, r, i) => {
|
|
268
|
+
let a = n();
|
|
269
|
+
a && f.emit({
|
|
270
|
+
type: "fire",
|
|
271
|
+
animation: a,
|
|
272
|
+
track: e,
|
|
273
|
+
path: t.slice(),
|
|
274
|
+
event: r,
|
|
275
|
+
lateBy: i
|
|
276
|
+
});
|
|
277
|
+
},
|
|
278
|
+
lap: (e) => {
|
|
279
|
+
let t = n();
|
|
280
|
+
t && f.emit({
|
|
281
|
+
type: "lap",
|
|
282
|
+
animation: t,
|
|
283
|
+
lap: e
|
|
284
|
+
});
|
|
285
|
+
}
|
|
286
|
+
});
|
|
287
|
+
},
|
|
288
|
+
colorOverrides: w.current,
|
|
289
|
+
onTick: (e) => (T.current.add(e), () => {
|
|
290
|
+
T.current.delete(e);
|
|
291
|
+
}),
|
|
292
|
+
keepAlive: () => {
|
|
293
|
+
let e = M({ kind: "keepAlive" });
|
|
294
|
+
return () => e.cancel();
|
|
295
|
+
},
|
|
296
|
+
watch: (e) => f.add(e),
|
|
297
|
+
live: () => {
|
|
298
|
+
let e = [];
|
|
299
|
+
for (let t of y.current.values()) {
|
|
300
|
+
let n = {
|
|
301
|
+
...p(t),
|
|
302
|
+
paused: t.paused,
|
|
303
|
+
timeScale: t.timeScale,
|
|
304
|
+
elapsed: t.virtualNow,
|
|
305
|
+
...t.progress ? { progress: t.progress(t.virtualNow) } : {}
|
|
306
|
+
};
|
|
307
|
+
e.push(n);
|
|
308
|
+
}
|
|
309
|
+
return e;
|
|
310
|
+
}
|
|
311
|
+
};
|
|
312
|
+
return {
|
|
313
|
+
api: F,
|
|
314
|
+
tickAll: E
|
|
315
|
+
};
|
|
316
|
+
}, [O, v]);
|
|
317
|
+
return f(() => {
|
|
318
|
+
E.current = N;
|
|
319
|
+
}, [N]), d(() => {
|
|
320
|
+
let e = w.current;
|
|
321
|
+
return k.current = !0, () => {
|
|
322
|
+
k.current = !1, M.cancelAll(), e.clearAll();
|
|
323
|
+
};
|
|
324
|
+
}, [M]), M;
|
|
325
|
+
}
|
|
326
|
+
//#endregion
|
|
327
|
+
export { v as useAnimator };
|
|
328
|
+
|
|
329
|
+
//# sourceMappingURL=useAnimator.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useAnimator.js","names":["numericLerp","a","b","t","resolveSpringConstants","preset","o","SPRING_PRESETS","useAnimator","optsRef","useLatest","opts","animations","useRef","nextId","tickDepth","globalTimeScale","globalPaused","colorOverrides","ColorOverrideRegistry","tickSubscribers","tickAllRef","frameLoop","useVisibleRaf","useCallback","anim","frameLoopRef","mountedRef","trippedRef","tripwire","useMemo","now","staggerTimers","c","m","cb","ms","x","h","completionListeners","fireCompletion","ls","id","watchCompletion","cur","idx","hub","AnimatorEventHub","infoOf","info","reportEnd","retire","by","tickAll","finished","realDt","scale","sub","err","ensureLoop","cancelByKey","ids","key","register","seed","s","createSupervisor","onCancelCb","base","tween","easing","resolveEasing","easeOut","factoryFn","perTickInterp","lastValueEmitted","virtualNow","elapsed","nowMs","eased","value","physics","add","subtract","v","k","magnitude","kBase","restThreshold","target","velocity","lastTime","dt","displacement","springForce","dampingForce","damping","accel","mass","velRested","posRested","newTo","api","friction","handle","retired","createLoop","factory","loopOpts","createTweenLoop","tweenLoopOpts","createStagger","items","delay","staggerOpts","createTimeline","animation","path","sup","listener","rows","row","useInsertionEffect","useEffect","overrides"],"sources":["../../src/animation/useAnimator.ts"],"sourcesContent":["import { useCallback, useEffect, useInsertionEffect, useMemo, useRef } from 'react';\nimport { useLatest } from '@weasel-js/react';\nimport { useVisibleRaf } from '../scheduling/useVisibleRaf';\nimport { easeOut, SPRING_PRESETS, resolveEasing } from '@weasel-js/geom';\nimport { createLoop, createTweenLoop } from './loop';\nimport { createStagger, type StaggerTimers } from './stagger';\nimport { createTimeline } from './timeline/createTimeline';\nimport { ColorOverrideRegistry } from './colorRegistry';\nimport { AnimatorEventHub } from './observe';\nimport type { Supervisor, SupervisorOptions, WatchCompletion } from './supervisor';\nimport type {\n AnimationHandle,\n AnimationInfo,\n AnimationKind,\n Animator,\n TweenOptions,\n SpringOptions,\n DecayOptions,\n PhysicsOptions,\n PhysicsHandle,\n UseAnimatorOptions,\n LiveAnimation,\n} from './types';\nimport type { TimelineOptions } from './timeline/types';\n\ninterface ActiveAnimation {\n id: number;\n kind: AnimationKind;\n cancelKey?: string;\n label?: string;\n /** Built the first time something reports on this entry, then shared. */\n info?: AnimationInfo;\n /** 0–1 where the animation has an end to measure against. */\n progress?(virtualNow: number): number;\n /** Its `end` is reported, though the entry stays on the table until the\n * frame's ticks are done. */\n ended?: boolean;\n paused: boolean;\n timeScale: number;\n virtualNow: number;\n lastRealNow: number | null;\n /** Returns true when finished. Called once per frame with the current\n * virtual-ms timestamp and the effective scale it advanced at this frame. */\n tick(virtualNow: number, scale: number): boolean;\n /** Called when the animation is cancelled. Skips onDone. */\n onCancel?(): void;\n}\n\nconst numericLerp = (a: number, b: number, t: number): number => a + (b - a) * t;\n\nfunction resolveSpringConstants(o: { preset?: string; stiffness?: number; damping?: number; mass?: number }) {\n const preset = o.preset ? SPRING_PRESETS[o.preset as keyof typeof SPRING_PRESETS] : null;\n return {\n stiffness: o.stiffness ?? preset?.stiffness ?? 170,\n damping: o.damping ?? preset?.damping ?? 26,\n mass: o.mass ?? preset?.mass ?? 1,\n };\n}\n\n/** Create the animator for a canvas. One rAF loop drives every animation it\n * owns, and everything still running is cancelled on unmount. */\nexport function useAnimator(opts: UseAnimatorOptions = {}): Animator {\n const optsRef = useLatest(opts);\n const animations = useRef<Map<number, ActiveAnimation>>(new Map());\n const nextId = useRef(1);\n /**\n * Re-entrancy counter incremented around each animation tick in tickAll.\n * Exposed via `isTicking()`. > 0 ⇒ we're currently inside an animation's\n * onTick; an adapter wrapper (`animateOnSetPose`) seeing this flag should\n * write through to the base adapter rather than schedule a new tween.\n */\n const tickDepth = useRef(0);\n const globalTimeScale = useRef(1);\n const globalPaused = useRef(false);\n const colorOverrides = useRef<ColorOverrideRegistry>(new ColorOverrideRegistry());\n // Per-frame tick subscribers. Notified after each batch of animation\n // ticks (i.e. after `colorOverrides` has settled to its latest values\n // but before the next RAF schedules). Used by `<SceneCanvas animator>`\n // to request a redraw on every active frame.\n const tickSubscribers = useRef<Set<() => void>>(new Set());\n\n // The loop runs behind the visibility gate. `tickAll` is built inside the\n // memo below, so the frame callback reaches it through a ref, published\n // once the memo's render commits.\n const tickAllRef = useRef<((t: number) => void) | null>(null);\n const frameLoop = useVisibleRaf(\n useCallback((t: number) => { tickAllRef.current?.(t); }, []),\n {\n requestFrame: opts.requestFrame,\n cancelFrame: opts.cancelFrame,\n // An hour spent hidden is not an hour the animation ran: dropping each\n // animation's last timestamp makes the resuming frame's `realDt` zero.\n onResume: () => {\n for (const anim of animations.current.values()) anim.lastRealNow = null;\n },\n },\n );\n const frameLoopRef = useLatest(frameLoop);\n\n // Tripwire: dev-only flag that every tween/spring/decay's tick reads to\n // detect \"animation fired after the host component unmounted.\" This is a\n // symptom of cleanup not running (regression) — typically because someone\n // refactored useAnimator and forgot to wire the unmount effect. The flag\n // flips false on cleanup; ticks see it and log a one-time error so the\n // bug is loud rather than just visually-doubled animation.\n const mountedRef = useRef(true);\n const trippedRef = useRef(false);\n const tripwire = (): boolean => {\n if (mountedRef.current) return false;\n if (!trippedRef.current) {\n trippedRef.current = true;\n const isDev = typeof process !== 'undefined' ? process.env.NODE_ENV !== 'production' : true;\n if (isDev) {\n console.error(\n 'weasel useAnimator: animation tick fired after the host component unmounted. ' +\n 'This usually means cleanup logic was bypassed — check for refactors that ' +\n 'removed the unmount effect or replaced cancelAll with a custom path.',\n );\n }\n }\n return true;\n };\n\n const { api, tickAll } = useMemo(() => {\n // Default to performance.now() so the time origin matches the\n // requestAnimationFrame callback's DOMHighResTimeStamp argument.\n // Using Date.now() here would mix epoch-millis with page-relative-millis,\n // producing huge negative `elapsed` values that clamp tween `t` to 0\n // forever (never reaching completion).\n const now = (): number =>\n (optsRef.current.now ?? (typeof performance !== 'undefined' ? performance.now.bind(performance) : Date.now))();\n // Resolved timer pair, snapshotted lazily from optsRef on each call so a\n // test that updates the injection after mount still wins. Kept internal —\n // not exposed on the public Animator surface; passed directly into\n // `createStagger` at bind time below.\n const staggerTimers: StaggerTimers = {\n setTimer: (cb, ms) =>\n (optsRef.current.setTimer ?? ((c, m) => setTimeout(c, m)))(cb, ms),\n clearTimer: (h) =>\n (optsRef.current.clearTimer ??\n ((x) => clearTimeout(x as ReturnType<typeof setTimeout>)))(h),\n now,\n };\n\n // Per-id one-shot completion listeners. Used by stagger to detect when\n // each child has left the registry (natural completion OR cancel) so the\n // supervising composite can retire itself when the last child finishes.\n const completionListeners = new Map<number, (() => void)[]>();\n const fireCompletion = (id: number): void => {\n const ls = completionListeners.get(id);\n if (!ls) return;\n completionListeners.delete(id);\n for (const cb of ls) cb();\n };\n const watchCompletion: WatchCompletion = (id, cb) => {\n const ls = completionListeners.get(id) ?? [];\n ls.push(cb);\n completionListeners.set(id, ls);\n return () => {\n const cur = completionListeners.get(id);\n if (!cur) return;\n const idx = cur.indexOf(cb);\n if (idx >= 0) cur.splice(idx, 1);\n if (cur.length === 0) completionListeners.delete(id);\n };\n };\n\n const hub = new AnimatorEventHub();\n const infoOf = (a: ActiveAnimation): AnimationInfo => {\n if (!a.info) {\n const info: { -readonly [K in keyof AnimationInfo]: AnimationInfo[K] } = { id: a.id, kind: a.kind };\n if (a.cancelKey != null) info.key = a.cancelKey;\n if (a.label != null) info.label = a.label;\n a.info = info;\n }\n return a.info;\n };\n\n /** Report `id` as finished, ahead of its `onDone`, so whatever that\n * handler starts is heard after it. Nothing revives a primitive; a\n * timeline, which can be revived, is reported as it leaves the table. */\n const reportEnd = (id: number): void => {\n const a = animations.current.get(id);\n if (!a || a.ended) return;\n a.ended = true;\n if (hub.watched) hub.emit({ type: 'end', animation: infoOf(a) });\n };\n\n /** Take `id` off the table as canceled — or, given `by`, as interrupted by\n * the animation claiming its key. */\n const retire = (id: number, by?: ActiveAnimation): void => {\n const a = animations.current.get(id);\n if (!a) return;\n a.onCancel?.();\n animations.current.delete(id);\n fireCompletion(id);\n if (!hub.watched || a.ended) return;\n hub.emit(by\n ? { type: 'interrupt', animation: infoOf(a), by: infoOf(by) }\n : { type: 'cancel', animation: infoOf(a) });\n };\n\n const tickAll = (t: number): void => {\n const finished: ActiveAnimation[] = [];\n for (const anim of animations.current.values()) {\n // `t` comes from the frame clock; `lastRealNow` is seeded at register()\n // from `now()`. The two share a time origin in a browser, where the rAF\n // timestamp and `performance.now()` are both page-relative — but not\n // everywhere: jsdom starts them ~600ms apart, which made the first\n // frame's delta hugely negative and left `virtualNow` climbing back\n // toward zero for dozens of frames before a tween advanced at all.\n // Time never runs backwards, so a negative sample is never real.\n const realDt = anim.lastRealNow == null ? 0 : Math.max(0, t - anim.lastRealNow);\n anim.lastRealNow = t;\n const scale = globalPaused.current\n ? 0\n : globalTimeScale.current * (anim.paused ? 0 : anim.timeScale);\n anim.virtualNow += realDt * scale;\n // Increment tick depth around each animation's tick so re-entrant\n // calls (e.g. `decay.onTick` → `adapter.setPose` →\n // `animateOnSetPose` checking `isTicking()`) see the flag and\n // skip scheduling a new wrap-tween that would fight the caller.\n tickDepth.current += 1;\n try {\n if (anim.tick(anim.virtualNow, scale)) finished.push(anim);\n } finally {\n tickDepth.current -= 1;\n }\n }\n for (const anim of finished) {\n // Gone already if its own tick canceled it; replaced if something\n // revived it under the same id since.\n if (animations.current.get(anim.id) !== anim) continue;\n reportEnd(anim.id);\n animations.current.delete(anim.id);\n fireCompletion(anim.id);\n }\n // Notify every onTick subscriber AFTER the tick batch so they\n // see the latest `colorOverrides` / pose values. Errors in one\n // subscriber don't suppress the others.\n for (const sub of tickSubscribers.current) {\n try { sub(); } catch (err) { console.error('useAnimator: onTick subscriber threw', err); }\n }\n if (animations.current.size > 0) frameLoopRef.current.request();\n };\n\n const ensureLoop = (): void => {\n if (animations.current.size === 0) return;\n frameLoopRef.current.request();\n };\n\n const cancelByKey = (key: string, by?: ActiveAnimation): void => {\n const ids: number[] = [];\n for (const anim of animations.current.values()) {\n if (anim.cancelKey === key) ids.push(anim.id);\n }\n for (const id of ids) retire(id, by);\n };\n\n type AnimationSeed =\n Omit<ActiveAnimation, 'paused' | 'timeScale' | 'virtualNow' | 'lastRealNow'>\n & {\n /** Registers under an existing `cancelKey` without cancelling whoever\n * holds it. For an animation re-registering itself — a revived\n * timeline — which is not a new claim on the key. */\n keepExisting?: boolean;\n };\n const register = (seed: AnimationSeed): AnimationHandle => {\n const anim = seed as ActiveAnimation;\n if (seed.cancelKey != null && !seed.keepExisting) cancelByKey(seed.cancelKey, anim);\n anim.paused = false;\n anim.timeScale = 1;\n anim.virtualNow = 0;\n // Seed lastRealNow at registration so the first frame's realDt reflects\n // the gap between register() and the first RAF callback. Preserves prior\n // wall-clock-anchored start behavior for tween and gives spring/decay a\n // non-zero first dt sample matching the pre-virtual-clock code.\n anim.lastRealNow = now();\n animations.current.set(anim.id, anim);\n if (hub.watched) hub.emit({ type: 'start', animation: infoOf(anim) });\n ensureLoop();\n return {\n id: anim.id,\n cancel: () => retire(anim.id),\n pause: () => { const a = animations.current.get(anim.id); if (a) a.paused = true; },\n resume: () => { const a = animations.current.get(anim.id); if (a) a.paused = false; },\n setTimeScale: (s) => { const a = animations.current.get(anim.id); if (a) a.timeScale = s; },\n timeScale: () => animations.current.get(anim.id)?.timeScale ?? 1,\n isPaused: () => animations.current.get(anim.id)?.paused ?? false,\n };\n };\n\n // Supervisor: a registered animation whose tick is a no-op (never\n // finishes naturally) so loop/stagger can sit in the animator's id table\n // and benefit from `cancel`/`cancelKey`/`isActive`. The owning composite\n // (loop/stagger) installs an onCancel to actually tear down its children.\n const createSupervisor = ({ kind, cancelKey, label }: SupervisorOptions): Supervisor => {\n const id = nextId.current++;\n let onCancelCb: (() => void) | undefined;\n const base = register({\n id,\n kind,\n cancelKey,\n label,\n // tick is a no-op: the supervisor only ends when the owner calls\n // `cancel()` (either via animator.cancel, animator.cancelKey, or the\n // composite's natural-completion path which forwards to `cancel`).\n tick: () => false,\n onCancel: () => onCancelCb?.(),\n });\n return {\n id: base.id,\n cancel: base.cancel,\n pause: base.pause,\n resume: base.resume,\n setTimeScale: base.setTimeScale,\n timeScale: base.timeScale,\n isPaused: base.isPaused,\n setOnCancel: (cb) => { onCancelCb = cb; },\n finish: () => {\n if (!animations.current.has(id)) return;\n reportEnd(id);\n animations.current.delete(id);\n fireCompletion(id);\n },\n cancelKey,\n };\n };\n\n const tween = <T,>(o: TweenOptions<T>): AnimationHandle => {\n const id = nextId.current++;\n // start is captured in *virtual* time; since virtualNow begins at 0 on\n // registration, that's our reference. The tween's \"elapsed\" is just\n // virtualNow itself — naturally freezing when paused (virtualNow stops\n // advancing) and decoupled from wall time.\n const start = 0;\n const easing = resolveEasing(o.easing ?? easeOut);\n // Precedence: factory > per-tick > default numeric lerp. Factory is built\n // once at tween start so expensive setup (color space conversion etc.)\n // doesn't repeat per frame.\n const factoryFn = o.interpolator ? o.interpolator(o.from, o.to) : null;\n const perTickInterp =\n factoryFn\n ? null\n : o.interpolate ??\n ((a: T, b: T, t: number) => {\n if (typeof a === 'number' && typeof b === 'number') {\n return numericLerp(a as number, b as number, t) as unknown as T;\n }\n throw new Error('tween: interpolate or interpolator is required for non-numeric T');\n });\n let lastValueEmitted = false;\n return register({\n id,\n kind: 'tween',\n cancelKey: o.cancelKey,\n label: o.label,\n progress: (virtualNow) => (o.ms <= 0 ? 1 : Math.min(1, virtualNow / o.ms)),\n tick(nowMs) {\n if (tripwire()) return true;\n const elapsed = nowMs - start;\n const t = o.ms <= 0 ? 1 : Math.min(1, Math.max(0, elapsed / o.ms));\n const eased = easing(t);\n const value = factoryFn ? factoryFn(eased) : perTickInterp!(o.from, o.to, eased);\n o.onTick(value);\n if (t >= 1 && !lastValueEmitted) {\n lastValueEmitted = true;\n // That last onTick may have cancelled us — deregistering the id.\n // A cancelled tween never completes, whenever the cancel landed.\n if (animations.current.has(id)) {\n reportEnd(id);\n o.onDone?.();\n }\n return true;\n }\n return false;\n },\n });\n };\n\n const physics = <T,>(o: PhysicsOptions<T>, kind: AnimationKind = 'physics'): PhysicsHandle<T> => {\n const id = nextId.current++;\n const isNumeric = typeof o.from === 'number';\n if (!isNumeric && (!o.add || !o.subtract || !o.scale || !o.magnitude)) {\n throw new Error('physics: add/subtract/scale/magnitude are required for non-numeric T');\n }\n const add = o.add ?? ((a: T, b: T) => ((a as unknown as number) + (b as unknown as number)) as unknown as T);\n const subtract = o.subtract ?? ((a: T, b: T) => ((a as unknown as number) - (b as unknown as number)) as unknown as T);\n const scale = o.scale ?? ((v: T, k: number) => ((v as unknown as number) * k) as unknown as T);\n const magnitude = o.magnitude ?? ((v: T) => Math.abs(v as unknown as number));\n const { stiffness: kBase, damping, mass } = resolveSpringConstants(o);\n const restThreshold = o.restThreshold ?? 0.01;\n\n let target: T | null = o.to ?? null;\n let value = o.from;\n // Default to zero velocity: assumes scale(_, 0) returns the zero vector of T. Pass an explicit velocity for unusual T where this isn't true.\n let velocity: T = o.velocity ?? scale(o.from, 0);\n let lastTime: number | null = null;\n\n const baseHandle = register({\n id,\n kind,\n cancelKey: o.cancelKey,\n label: o.label,\n tick(nowMs) {\n if (tripwire()) return true;\n if (lastTime == null) {\n lastTime = nowMs;\n // Already-at-rest short-circuit: decay-mode (target == null)\n // with starting velocity below threshold should complete\n // immediately rather than emit a tick and wait a frame.\n if (target == null && magnitude(velocity) < restThreshold) {\n reportEnd(id);\n o.onDone?.();\n return true;\n }\n o.onTick(value);\n return false;\n }\n const dt = Math.min(0.064, (nowMs - lastTime) / 1000);\n lastTime = nowMs;\n // Semi-implicit Euler. When target == null, stiffness == 0 ⇒\n // no spring force; only damping acts on velocity (exponential decay).\n const ref = target ?? value;\n const displacement = subtract(value, ref);\n const springForce = scale(displacement, target == null ? 0 : -kBase);\n const dampingForce = scale(velocity, -damping);\n const accel = scale(add(springForce, dampingForce), 1 / mass);\n velocity = add(velocity, scale(accel, dt));\n value = add(value, scale(velocity, dt));\n o.onTick(value);\n const velRested = magnitude(velocity) < restThreshold;\n const posRested = target == null\n ? true\n : magnitude(subtract(value, target)) < restThreshold;\n if (velRested && posRested) {\n if (target != null) o.onTick(target);\n reportEnd(id);\n o.onDone?.();\n return true;\n }\n return false;\n },\n });\n\n const handle: PhysicsHandle<T> = {\n ...baseHandle,\n setTarget: (newTo: T | null) => { target = newTo; },\n setVelocity: (v: T) => { velocity = v; },\n };\n return handle;\n };\n\n const spring = <T,>(o: SpringOptions<T>): AnimationHandle => physics<T>(o, 'spring');\n\n const decay = <T,>(o: DecayOptions<T>): AnimationHandle => {\n const friction = o.friction ?? 0.95;\n // Per-second friction v(t) = v0 * friction^t corresponds to\n // m*dv/dt = -c*v with c = -ln(friction), m = 1, k = 0.\n const damping = -Math.log(friction);\n return physics<T>({\n from: o.from,\n to: null,\n velocity: o.velocity,\n stiffness: 0,\n damping,\n mass: 1,\n restThreshold: o.threshold ?? 0.5,\n add: o.add,\n // DecayOptions doesn't carry subtract; derive from add+scale.\n subtract: (a, b) => o.add(a, o.scale(b, -1)),\n scale: o.scale,\n magnitude: o.magnitude,\n onTick: o.onTick,\n onDone: o.onDone,\n cancelKey: o.cancelKey,\n label: o.label,\n }, 'decay');\n };\n\n const cancelAll = (): void => {\n const retired: ActiveAnimation[] = [];\n for (const a of animations.current.values()) {\n a.onCancel?.();\n retired.push(a);\n }\n animations.current.clear();\n for (const a of retired) fireCompletion(a.id);\n if (hub.watched) for (const a of retired) hub.emit({ type: 'cancel', animation: infoOf(a) });\n frameLoopRef.current.cancel();\n };\n const api: Animator = {\n tween,\n spring,\n decay,\n physics,\n cancel: (handle) => retire(handle.id),\n cancelKey: (key) => cancelByKey(key),\n cancelAll,\n isActive: (key) => {\n if (key == null) return animations.current.size > 0;\n for (const a of animations.current.values()) {\n if (a.cancelKey === key) return true;\n }\n return false;\n },\n isTicking: () => tickDepth.current > 0,\n pause: () => { globalPaused.current = true; },\n resume: () => { globalPaused.current = false; },\n isPaused: () => globalPaused.current,\n setTimeScale: (s) => { globalTimeScale.current = s; },\n timeScale: () => globalTimeScale.current,\n pauseKey: (key) => {\n for (const a of animations.current.values()) if (a.cancelKey === key) a.paused = true;\n },\n resumeKey: (key) => {\n for (const a of animations.current.values()) if (a.cancelKey === key) a.paused = false;\n },\n setTimeScaleByKey: (key, s) => {\n for (const a of animations.current.values()) if (a.cancelKey === key) a.timeScale = s;\n },\n loop: (factory, loopOpts) => createLoop(createSupervisor, factory, loopOpts),\n tweenLoop: (tweenLoopOpts) =>\n createTweenLoop(api, createSupervisor, tweenLoopOpts),\n stagger: ((items, delay, factory, staggerOpts) =>\n createStagger(\n api,\n staggerTimers,\n createSupervisor,\n watchCompletion,\n items,\n delay,\n factory as never,\n staggerOpts,\n )) as Animator['stagger'],\n timeline: (o: TimelineOptions) => {\n const id = nextId.current++;\n const info = (): AnimationInfo | undefined => {\n const a = animations.current.get(id);\n return a && infoOf(a);\n };\n return createTimeline(register, id, o, {\n get watched() { return hub.watched; },\n fire: (track, path, event, lateBy) => {\n const animation = info();\n if (animation) hub.emit({ type: 'fire', animation, track, path: path.slice(), event, lateBy });\n },\n lap: (lap) => {\n const animation = info();\n if (animation) hub.emit({ type: 'lap', animation, lap });\n },\n });\n },\n colorOverrides: colorOverrides.current,\n onTick: (cb) => {\n tickSubscribers.current.add(cb);\n return () => { tickSubscribers.current.delete(cb); };\n },\n keepAlive: () => {\n const sup = createSupervisor({ kind: 'keepAlive' });\n return () => sup.cancel();\n },\n watch: (listener) => hub.add(listener),\n live: () => {\n const rows: LiveAnimation[] = [];\n for (const a of animations.current.values()) {\n const row: LiveAnimation = {\n ...infoOf(a),\n paused: a.paused,\n timeScale: a.timeScale,\n elapsed: a.virtualNow,\n ...(a.progress ? { progress: a.progress(a.virtualNow) } : {}),\n };\n rows.push(row);\n }\n return rows;\n },\n };\n return { api, tickAll };\n }, [frameLoopRef, optsRef]);\n\n useInsertionEffect(() => {\n tickAllRef.current = tickAll;\n }, [tickAll]);\n\n // StrictMode-safe cleanup: when the component unmounts (including the\n // dev-mode double-mount that StrictMode performs), cancel every running\n // animation and stop the RAF loop. Without this, the FIRST mount's\n // animator keeps ticking with stale callbacks pointing at the unmounted\n // adapter, while the SECOND mount creates its own animator on top —\n // visible to the user as every animation playing twice.\n useEffect(() => {\n const overrides = colorOverrides.current;\n mountedRef.current = true;\n return () => {\n mountedRef.current = false;\n api.cancelAll();\n overrides.clearAll();\n };\n }, [api]);\n\n return api;\n}\n"],"mappings":"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"}
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
import { tweenPose as e } from "../poseHelpers.js";
|
|
2
|
+
//#region src/animation/wrappers/animateLifecycle.ts
|
|
3
|
+
function t(t, n, r) {
|
|
4
|
+
let i = r.ms ?? 200;
|
|
5
|
+
return {
|
|
6
|
+
...t,
|
|
7
|
+
insertNode(a, o) {
|
|
8
|
+
if (t.insertNode(a, o), !r.enterFrom) return;
|
|
9
|
+
let s = t.getPose(a.id), c = r.enterFrom(s);
|
|
10
|
+
t.setPose(a.id, c), e(n, t, {
|
|
11
|
+
id: a.id,
|
|
12
|
+
to: s,
|
|
13
|
+
ms: i,
|
|
14
|
+
easing: r.easing,
|
|
15
|
+
geometry: r.geometry,
|
|
16
|
+
recordOp: !1
|
|
17
|
+
});
|
|
18
|
+
},
|
|
19
|
+
removeNode(a) {
|
|
20
|
+
if (!r.exitTo) {
|
|
21
|
+
t.removeNode(a);
|
|
22
|
+
return;
|
|
23
|
+
}
|
|
24
|
+
let o = t.getPose(a);
|
|
25
|
+
e(n, t, {
|
|
26
|
+
id: a,
|
|
27
|
+
to: r.exitTo(o),
|
|
28
|
+
ms: i,
|
|
29
|
+
easing: r.easing,
|
|
30
|
+
geometry: r.geometry,
|
|
31
|
+
recordOp: !1,
|
|
32
|
+
onDone: () => t.removeNode(a)
|
|
33
|
+
});
|
|
34
|
+
}
|
|
35
|
+
};
|
|
36
|
+
}
|
|
37
|
+
//#endregion
|
|
38
|
+
export { t as animateLifecycle };
|
|
39
|
+
|
|
40
|
+
//# sourceMappingURL=animateLifecycle.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"animateLifecycle.js","names":["animateLifecycle","ms","opts","adapter","object","index","final","start","tweenPose","animator","id","current"],"sources":["../../../src/animation/wrappers/animateLifecycle.ts"],"sourcesContent":["import { tweenPose } from '../poseHelpers';\nimport type { PoseDescriptor } from 'interactions/actions/resize/geometry';\nimport type { SceneAdapter } from 'core/adapters/types';\nimport type { Animator, EasingSpec } from '../types';\n\n/** How nodes enter and leave. `enterFrom` derives the pose a new node starts\n * at, given where it belongs; `exitTo` derives the pose a departing node\n * animates to before it is actually removed. Omit either to leave that\n * transition instant. */\nexport interface LifecycleAnimation<TPose> {\n /** Pose to animate the new object FROM at insert. */\n enterFrom?: (final: TPose) => TPose;\n /** Pose to animate the existing object TO at remove. */\n exitTo?: (current: TPose) => TPose;\n ms?: number;\n easing?: EasingSpec;\n geometry?: PoseDescriptor<TPose>;\n}\n\n/** Wrap an adapter so inserts and removals animate — the scene-graph\n * equivalent of CSS enter/leave transitions. */\nexport function animateLifecycle<TNode extends { id: string; pose?: TPose }, TPose>(\n adapter: SceneAdapter<TNode, TPose>,\n animator: Animator,\n opts: LifecycleAnimation<TPose>,\n): SceneAdapter<TNode, TPose> {\n const ms = opts.ms ?? 200;\n\n return {\n ...adapter,\n insertNode(object: TNode, index?: number): void {\n adapter.insertNode(object, index);\n if (!opts.enterFrom) return;\n const final = adapter.getPose(object.id);\n const start = opts.enterFrom(final);\n adapter.setPose(object.id, start);\n tweenPose(animator, adapter as never, {\n id: object.id,\n to: final,\n ms,\n easing: opts.easing,\n geometry: opts.geometry,\n recordOp: false,\n });\n },\n removeNode(id: string): void {\n if (!opts.exitTo) {\n adapter.removeNode(id);\n return;\n }\n const current = adapter.getPose(id);\n tweenPose(animator, adapter as never, {\n id,\n to: opts.exitTo(current),\n ms,\n easing: opts.easing,\n geometry: opts.geometry,\n recordOp: false,\n onDone: () => adapter.removeNode(id),\n });\n },\n };\n}\n"],"mappings":";;AAqBA,SAAgBA,EACd,GACA,GACA,GAC4B;CAC5B,IAAMC,IAAKC,EAAK,MAAM;CAEtB,OAAO;EACL,GAAGC;EACH,WAAW,GAAe,GAAsB;GAE9C,IADAA,EAAQ,WAAWC,GAAQC,CAAK,GAC5B,CAACH,EAAK,WAAW;GACrB,IAAMI,IAAQH,EAAQ,QAAQC,EAAO,EAAE,GACjCG,IAAQL,EAAK,UAAUI,CAAK;GAElC,AADAH,EAAQ,QAAQC,EAAO,IAAIG,CAAK,GAChCC,EAAUC,GAAUN,GAAkB;IACpC,IAAIC,EAAO;IACX,IAAIE;IACJ;IACA,QAAQJ,EAAK;IACb,UAAUA,EAAK;IACf,UAAU;GACZ,CAAC;EACH;EACA,WAAW,GAAkB;GAC3B,IAAI,CAACA,EAAK,QAAQ;IAChB,EAAQ,WAAWQ,CAAE;IACrB;GACF;GACA,IAAMC,IAAUR,EAAQ,QAAQO,CAAE;GAClC,EAAUD,GAAUN,GAAkB;IACpC;IACA,IAAID,EAAK,OAAOS,CAAO;IACvB;IACA,QAAQT,EAAK;IACb,UAAUA,EAAK;IACf,UAAU;IACV,cAAcC,EAAQ,WAAWO,CAAE;GACrC,CAAC;EACH;CACF;AACF"}
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
import { springPose as e, tweenPose as t } from "../poseHelpers.js";
|
|
2
|
+
//#region src/animation/wrappers/animateOnSetPose.ts
|
|
3
|
+
function n(n, r, i = {}) {
|
|
4
|
+
let a = i.ms ?? 200, o = (e, t, n) => i.shouldAnimate ? !i.shouldAnimate(e, t, n) : !!(i.skipDuringGesture && i.gestureScope?.has(e));
|
|
5
|
+
return {
|
|
6
|
+
...n,
|
|
7
|
+
setPose(s, c) {
|
|
8
|
+
let l = n.getPose(s);
|
|
9
|
+
if (o(s, l, c)) {
|
|
10
|
+
n.setPose(s, c);
|
|
11
|
+
return;
|
|
12
|
+
}
|
|
13
|
+
if (r.isTicking()) {
|
|
14
|
+
n.setPose(s, c);
|
|
15
|
+
return;
|
|
16
|
+
}
|
|
17
|
+
if (r.isActive("pose:" + s)) {
|
|
18
|
+
n.setPose(s, c);
|
|
19
|
+
return;
|
|
20
|
+
}
|
|
21
|
+
i.spring ? e(r, n, {
|
|
22
|
+
id: s,
|
|
23
|
+
to: c,
|
|
24
|
+
preset: i.spring.preset,
|
|
25
|
+
stiffness: i.spring.stiffness,
|
|
26
|
+
damping: i.spring.damping,
|
|
27
|
+
mass: i.spring.mass,
|
|
28
|
+
geometry: i.geometry,
|
|
29
|
+
opLabel: i.opLabel
|
|
30
|
+
}) : t(r, n, {
|
|
31
|
+
id: s,
|
|
32
|
+
to: c,
|
|
33
|
+
ms: a,
|
|
34
|
+
easing: i.easing,
|
|
35
|
+
geometry: i.geometry,
|
|
36
|
+
opLabel: i.opLabel
|
|
37
|
+
});
|
|
38
|
+
}
|
|
39
|
+
};
|
|
40
|
+
}
|
|
41
|
+
//#endregion
|
|
42
|
+
export { n as animateOnSetPose };
|
|
43
|
+
|
|
44
|
+
//# sourceMappingURL=animateOnSetPose.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"animateOnSetPose.js","names":["animateOnSetPose","ms","opts","skipPredicate","id","from","to","adapter","pose","animator","springPose","tweenPose"],"sources":["../../../src/animation/wrappers/animateOnSetPose.ts"],"sourcesContent":["import { tweenPose, springPose } from '../poseHelpers';\nimport type { PoseDescriptor } from 'interactions/actions/resize/geometry';\nimport type { SceneAdapter } from 'core/adapters/types';\nimport type { Animator, EasingSpec, SpringPresetName } from '../types';\n\n/** Options for `animateOnSetPose`. */\nexport interface AnimateOnSetPoseOptions<TPose> {\n /** Default: 200ms tween with easeOut. */\n ms?: number;\n easing?: EasingSpec;\n /** Use a spring instead of a duration tween. Mutually exclusive with ms/easing. */\n spring?: {\n preset?: SpringPresetName;\n stiffness?: number;\n damping?: number;\n mass?: number;\n };\n geometry?: PoseDescriptor<TPose>;\n /** Predicate: return false to skip animation and write through immediately. */\n shouldAnimate?: (id: string, from: TPose, to: TPose) => boolean;\n /** Convenience: when true, auto-skip animation if the id is currently being\n * manipulated by an active gesture. Implementation: see `gestureScope` —\n * the wrapper consults a shared \"in-flight ids\" Set if one is provided,\n * otherwise this option is a no-op (treat as `shouldAnimate` returning true).\n * Mutually exclusive with `shouldAnimate`. */\n skipDuringGesture?: boolean;\n /** Optional: a Set the kit (or app) populates with ids currently being\n * manipulated by a gesture. When `skipDuringGesture` is true and the id\n * is in this Set, the wrapper writes through immediately. */\n gestureScope?: ReadonlySet<string>;\n /** Op label for the recorded transform op. Default: `'animate'`. */\n opLabel?: string;\n}\n\n/**\n * Wrap an adapter so every `setPose` animates to the new pose instead of\n * jumping to it. Anything that moves a node — a layout strategy, an action, a\n * consumer's own code — is animated without knowing it, since the adapter is\n * the single write path.\n *\n * Poses written from inside another animation's tick, and (optionally) poses\n * written for a node currently under a gesture, are passed straight through:\n * animating those would fight whatever is already driving the node.\n */\nexport function animateOnSetPose<TNode extends { id: string }, TPose>(\n adapter: SceneAdapter<TNode, TPose>,\n animator: Animator,\n opts: AnimateOnSetPoseOptions<TPose> = {},\n): SceneAdapter<TNode, TPose> {\n const ms = opts.ms ?? 200;\n const skipPredicate = (id: string, from: TPose, to: TPose): boolean => {\n if (opts.shouldAnimate) return !opts.shouldAnimate(id, from, to);\n if (opts.skipDuringGesture && opts.gestureScope?.has(id)) return true;\n return false;\n };\n\n return {\n ...adapter,\n setPose(id: string, pose: TPose): void {\n const from = adapter.getPose(id);\n if (skipPredicate(id, from, pose)) {\n adapter.setPose(id, pose);\n return;\n }\n // Re-entrant short-circuit (a): the caller IS another animation's tick\n // (momentum decay, in-flight tween, spring) writing setPose ~60×/sec.\n // Wrapping each call in a fresh 250ms tween fights the caller — the\n // new tween's t=0 sample writes back the previous `from`, undoing\n // this onTick — and when each wrap-tween settles, the very next\n // caller-tick spawns another, looping visibly forever (cards never\n // stop after a flick). Detect via animator.isTicking() and write\n // through.\n if (animator.isTicking()) {\n adapter.setPose(id, pose);\n return;\n }\n // Re-entrant short-circuit (b): a prior wrap-tween for this id is\n // still in flight. Let it finish rather than registering a competing\n // tween. (Earlier guard from 3af4ed8; kept alongside (a) for the case\n // where setPose is called from outside the animator's own tick loop\n // but a pose:<id> tween is still mid-transition.)\n if (animator.isActive('pose:' + id)) {\n adapter.setPose(id, pose);\n return;\n }\n if (opts.spring) {\n springPose(animator, adapter as never, {\n id,\n to: pose,\n preset: opts.spring.preset,\n stiffness: opts.spring.stiffness,\n damping: opts.spring.damping,\n mass: opts.spring.mass,\n geometry: opts.geometry,\n opLabel: opts.opLabel,\n });\n } else {\n tweenPose(animator, adapter as never, {\n id,\n to: pose,\n ms,\n easing: opts.easing,\n geometry: opts.geometry,\n opLabel: opts.opLabel,\n });\n }\n },\n };\n}\n"],"mappings":";;AA4CA,SAAgBA,EACd,GACA,GACA,IAAuC,CAAC,GACZ;CAC5B,IAAMC,IAAKC,EAAK,MAAM,KAChBC,KAAiB,GAAY,GAAa,MAC1CD,EAAK,gBAAsB,CAACA,EAAK,cAAcE,GAAIC,GAAMC,CAAE,IAC/D,GAAIJ,EAAK,qBAAqBA,EAAK,cAAc,IAAIE,CAAE;CAIzD,OAAO;EACL,GAAGG;EACH,QAAQ,GAAY,GAAmB;GACrC,IAAMF,IAAOE,EAAQ,QAAQH,CAAE;GAC/B,IAAID,EAAcC,GAAIC,GAAMG,CAAI,GAAG;IACjC,EAAQ,QAAQJ,GAAII,CAAI;IACxB;GACF;GASA,IAAIC,EAAS,UAAU,GAAG;IACxB,EAAQ,QAAQL,GAAII,CAAI;IACxB;GACF;GAMA,IAAIC,EAAS,SAAS,UAAUL,CAAE,GAAG;IACnC,EAAQ,QAAQA,GAAII,CAAI;IACxB;GACF;GACA,AAAIN,EAAK,SACPQ,EAAWD,GAAUF,GAAkB;IACrC;IACA,IAAIC;IACJ,QAAQN,EAAK,OAAO;IACpB,WAAWA,EAAK,OAAO;IACvB,SAASA,EAAK,OAAO;IACrB,MAAMA,EAAK,OAAO;IAClB,UAAUA,EAAK;IACf,SAASA,EAAK;GAChB,CAAC,IAEDS,EAAUF,GAAUF,GAAkB;IACpC;IACA,IAAIC;IACJ;IACA,QAAQN,EAAK;IACb,UAAUA,EAAK;IACf,SAASA,EAAK;GAChB,CAAC;EAEL;CACF;AACF"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import { P as PoseDescriptor } from './poseDescriptor-
|
|
1
|
+
import { Path } from '@weasel-js/geom';
|
|
2
|
+
import { P as PoseDescriptor } from './poseDescriptor-D-OH-tu5.js';
|
|
3
3
|
|
|
4
4
|
/** True for Path-shaped poses (`{kind: 'polygon' | 'rect'}`). Useful for
|
|
5
5
|
* callers that need to fork between `pathPoseDescriptor` and
|