@weasel-js/core 1.9.3 → 1.10.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +1106 -0
- package/README.md +7 -5
- package/dist/WeaselProvider.js +5 -7
- package/dist/WeaselProvider.js.map +1 -1
- package/dist/affordances/composeAffordanceLayer.js +91 -93
- package/dist/affordances/composeAffordanceLayer.js.map +1 -1
- package/dist/affordances/cornerResize.js +27 -18
- package/dist/affordances/cornerResize.js.map +1 -1
- package/dist/affordances/hitAffordanceRegions.js +65 -104
- package/dist/affordances/hitAffordanceRegions.js.map +1 -1
- package/dist/affordances/pathAnchors.js.map +1 -1
- package/dist/affordances/rotationHandle.js +22 -21
- package/dist/affordances/rotationHandle.js.map +1 -1
- package/dist/animation/behaviors/coast.js +21 -0
- package/dist/animation/behaviors/coast.js.map +1 -0
- package/dist/animation/behaviors/coastByWrite.js +107 -0
- package/dist/animation/behaviors/coastByWrite.js.map +1 -0
- package/dist/animation/behaviors/coastOnTargets.js +94 -0
- package/dist/animation/behaviors/coastOnTargets.js.map +1 -0
- package/dist/animation/behaviors/momentum.js +38 -88
- package/dist/animation/behaviors/momentum.js.map +1 -1
- package/dist/animation/clipTargets.js +12 -0
- package/dist/animation/clipTargets.js.map +1 -0
- package/dist/animation/index.js +15 -20
- package/dist/animation/poseHelpers.js +112 -33
- package/dist/animation/poseHelpers.js.map +1 -1
- package/dist/animation/poseTarget.js +115 -0
- package/dist/animation/poseTarget.js.map +1 -0
- package/dist/animation/reflow.js +113 -83
- package/dist/animation/reflow.js.map +1 -1
- package/dist/animation/rewind.js +66 -0
- package/dist/animation/rewind.js.map +1 -0
- package/dist/animation/rig/bindRig.js +85 -53
- package/dist/animation/rig/bindRig.js.map +1 -1
- package/dist/animation/rig/rigNode.js +93 -0
- package/dist/animation/rig/rigNode.js.map +1 -0
- package/dist/animation/rig/rigSeat.js +26 -0
- package/dist/animation/rig/rigSeat.js.map +1 -0
- package/dist/animation/rig/skinBinding.js +56 -0
- package/dist/animation/rig/skinBinding.js.map +1 -0
- package/dist/animation/rig/useRig.js +31 -16
- package/dist/animation/rig/useRig.js.map +1 -1
- package/dist/animation/wrappers/animateLifecycle.js +32 -24
- package/dist/animation/wrappers/animateLifecycle.js.map +1 -1
- package/dist/animation/wrappers/animateOnSetPose.js +31 -29
- package/dist/animation/wrappers/animateOnSetPose.js.map +1 -1
- package/dist/animation/wrappers/instantPose.js +13 -0
- package/dist/animation/wrappers/instantPose.js.map +1 -0
- package/dist/animation/writtenPoseTarget.js +33 -0
- package/dist/animation/writtenPoseTarget.js.map +1 -0
- package/dist/{autoPoseDescriptor-vCdt55xm.d.ts → autoPoseDescriptor-DHg5KqaJ.d.ts} +1 -1
- package/dist/barrel/canvas.js +31 -0
- package/dist/barrel/chrome.js +16 -0
- package/dist/barrel/input.js +18 -0
- package/dist/barrel/interactions.js +38 -0
- package/dist/barrel/paint.js +11 -0
- package/dist/barrel/paths.js +12 -0
- package/dist/barrel/renderer.js +14 -0
- package/dist/barrel/routing.js +57 -0
- package/dist/barrel/scene.js +37 -0
- package/dist/barrel/text.js +9 -0
- package/dist/barrel/viewport.js +42 -0
- package/dist/canvas/Canvas.js +280 -559
- package/dist/canvas/Canvas.js.map +1 -1
- package/dist/canvas/CanvasView.js +147 -167
- package/dist/canvas/CanvasView.js.map +1 -1
- package/dist/canvas/CursorCoordsHud.js +53 -49
- package/dist/canvas/CursorCoordsHud.js.map +1 -1
- package/dist/canvas/DrawCanvas.js +40 -51
- package/dist/canvas/DrawCanvas.js.map +1 -1
- package/dist/canvas/ModalityHud.js.map +1 -1
- package/dist/canvas/NodeShape.js +55 -374
- package/dist/canvas/NodeShape.js.map +1 -1
- package/dist/canvas/PickHud.js +50 -47
- package/dist/canvas/PickHud.js.map +1 -1
- package/dist/canvas/SceneCanvas/DevHuds.js +40 -0
- package/dist/canvas/SceneCanvas/DevHuds.js.map +1 -0
- package/dist/canvas/SceneCanvas/GestureDispatcherMounter.js +126 -0
- package/dist/canvas/SceneCanvas/GestureDispatcherMounter.js.map +1 -0
- package/dist/canvas/SceneCanvas/PointerProviderIfRoot.js +27 -31
- package/dist/canvas/SceneCanvas/PointerProviderIfRoot.js.map +1 -1
- package/dist/canvas/SceneCanvas/StandardActionsRegistrar.js +64 -0
- package/dist/canvas/SceneCanvas/StandardActionsRegistrar.js.map +1 -0
- package/dist/canvas/SceneCanvas/ToolKeybindingsMounter.js +16 -0
- package/dist/canvas/SceneCanvas/ToolKeybindingsMounter.js.map +1 -0
- package/dist/canvas/SceneCanvas/coordTrace.js +46 -0
- package/dist/canvas/SceneCanvas/coordTrace.js.map +1 -0
- package/dist/canvas/SceneCanvas/defaultNodeProperties.js +138 -85
- package/dist/canvas/SceneCanvas/defaultNodeProperties.js.map +1 -1
- package/dist/canvas/SceneCanvas/defaultNodeRouting.js +9 -8
- package/dist/canvas/SceneCanvas/defaultNodeRouting.js.map +1 -1
- package/dist/canvas/SceneCanvas/dispatcherGestureBounds.js.map +1 -1
- package/dist/canvas/SceneCanvas/features.js +74 -43
- package/dist/canvas/SceneCanvas/features.js.map +1 -1
- package/dist/canvas/SceneCanvas/isDev.js +12 -0
- package/dist/canvas/SceneCanvas/isDev.js.map +1 -0
- package/dist/canvas/SceneCanvas/poseGeometry.js +31 -34
- package/dist/canvas/SceneCanvas/poseGeometry.js.map +1 -1
- package/dist/canvas/SceneCanvas/poseRegistrars.js +13 -0
- package/dist/canvas/SceneCanvas/poseRegistrars.js.map +1 -0
- package/dist/canvas/SceneCanvas/props.js +39 -0
- package/dist/canvas/SceneCanvas/props.js.map +1 -0
- package/dist/canvas/SceneCanvas/toolRegistry.js +23 -0
- package/dist/canvas/SceneCanvas/toolRegistry.js.map +1 -0
- package/dist/canvas/SceneCanvas/useActionsPropResolver.js +6 -1
- package/dist/canvas/SceneCanvas/useActionsPropResolver.js.map +1 -1
- package/dist/canvas/SceneCanvas/useBuiltinShapeTools.js +21 -62
- package/dist/canvas/SceneCanvas/useBuiltinShapeTools.js.map +1 -1
- package/dist/canvas/SceneCanvas/useBuiltinTools.js +21 -0
- package/dist/canvas/SceneCanvas/useBuiltinTools.js.map +1 -0
- package/dist/canvas/SceneCanvas/useCanvasCamera.js +38 -0
- package/dist/canvas/SceneCanvas/useCanvasCamera.js.map +1 -0
- package/dist/canvas/SceneCanvas/useCanvasDispatcher.js +20 -0
- package/dist/canvas/SceneCanvas/useCanvasDispatcher.js.map +1 -0
- package/dist/canvas/SceneCanvas/useCanvasSelection.js +16 -0
- package/dist/canvas/SceneCanvas/useCanvasSelection.js.map +1 -0
- package/dist/canvas/SceneCanvas/useCanvasTools.js +67 -0
- package/dist/canvas/SceneCanvas/useCanvasTools.js.map +1 -0
- package/dist/canvas/SceneCanvas/useDispatcherOverlayLayer.js +29 -29
- package/dist/canvas/SceneCanvas/useDispatcherOverlayLayer.js.map +1 -1
- package/dist/canvas/SceneCanvas/useHeldModifiers.js +20 -0
- package/dist/canvas/SceneCanvas/useHeldModifiers.js.map +1 -0
- package/dist/canvas/SceneCanvas/useNodeAtPoint.js +26 -0
- package/dist/canvas/SceneCanvas/useNodeAtPoint.js.map +1 -0
- package/dist/canvas/SceneCanvas/useNodeKinds.js +26 -0
- package/dist/canvas/SceneCanvas/useNodeKinds.js.map +1 -0
- package/dist/canvas/SceneCanvas/usePreviewGhostLayer.js +48 -48
- package/dist/canvas/SceneCanvas/usePreviewGhostLayer.js.map +1 -1
- package/dist/canvas/SceneCanvas/useSceneCanvasHandle.js +47 -0
- package/dist/canvas/SceneCanvas/useSceneCanvasHandle.js.map +1 -0
- package/dist/canvas/SceneCanvas/useSceneCanvasLayers.js +66 -0
- package/dist/canvas/SceneCanvas/useSceneCanvasLayers.js.map +1 -0
- package/dist/canvas/SceneCanvas/useSceneChrome.js +59 -0
- package/dist/canvas/SceneCanvas/useSceneChrome.js.map +1 -0
- package/dist/canvas/SceneCanvas/useSceneRedrawSources.js +23 -0
- package/dist/canvas/SceneCanvas/useSceneRedrawSources.js.map +1 -0
- package/dist/canvas/SceneCanvas/useSceneSelectTool.js +74 -78
- package/dist/canvas/SceneCanvas/useSceneSelectTool.js.map +1 -1
- package/dist/canvas/SceneCanvas/useSceneSlotLayers.js +37 -0
- package/dist/canvas/SceneCanvas/useSceneSlotLayers.js.map +1 -0
- package/dist/canvas/SceneCanvas/useSelectionOverlayLayer.js +38 -0
- package/dist/canvas/SceneCanvas/useSelectionOverlayLayer.js.map +1 -0
- package/dist/canvas/SceneCanvas/useViewLayerGate.js +20 -0
- package/dist/canvas/SceneCanvas/useViewLayerGate.js.map +1 -0
- package/dist/canvas/SceneCanvas/useViewportActions.js +9 -1
- package/dist/canvas/SceneCanvas/useViewportActions.js.map +1 -1
- package/dist/canvas/SceneCanvas/worldPointAt.js +9 -0
- package/dist/canvas/SceneCanvas/worldPointAt.js.map +1 -0
- package/dist/canvas/SceneCanvas.js +311 -969
- package/dist/canvas/SceneCanvas.js.map +1 -1
- package/dist/canvas/SceneViewCanvas.js +42 -46
- package/dist/canvas/SceneViewCanvas.js.map +1 -1
- package/dist/canvas/adapterDerivedPath.js +26 -0
- package/dist/canvas/adapterDerivedPath.js.map +1 -0
- package/dist/canvas/affordanceAt.js +11 -1
- package/dist/canvas/affordanceAt.js.map +1 -1
- package/dist/canvas/buildSceneLayer.js +111 -0
- package/dist/canvas/buildSceneLayer.js.map +1 -0
- package/dist/canvas/buildSceneTree.js +16 -19
- package/dist/canvas/buildSceneTree.js.map +1 -1
- package/dist/canvas/canvasRenderer.js +67 -55
- package/dist/canvas/canvasRenderer.js.map +1 -1
- package/dist/canvas/colorOverrides.js.map +1 -1
- package/dist/canvas/defaultDrawOne.js +12 -12
- package/dist/canvas/defaultDrawOne.js.map +1 -1
- package/dist/canvas/deps/areaSelect.js +4 -4
- package/dist/canvas/deps/areaSelect.js.map +1 -1
- package/dist/canvas/deps/changes.js +13 -0
- package/dist/canvas/deps/changes.js.map +1 -0
- package/dist/canvas/deps/debug.js.map +1 -1
- package/dist/canvas/deps/editAnchors.js +38 -57
- package/dist/canvas/deps/editAnchors.js.map +1 -1
- package/dist/canvas/deps/geometryProjection.js.map +1 -1
- package/dist/canvas/deps/hitTestArea.js +31 -26
- package/dist/canvas/deps/hitTestArea.js.map +1 -1
- package/dist/canvas/deps/insert.js +130 -91
- package/dist/canvas/deps/insert.js.map +1 -1
- package/dist/canvas/deps/lassoSelect.js +5 -5
- package/dist/canvas/deps/lassoSelect.js.map +1 -1
- package/dist/canvas/deps/poseDescriptor.js +1 -1
- package/dist/canvas/deps/poseDescriptor.js.map +1 -1
- package/dist/canvas/deps/resizePolicy.js.map +1 -1
- package/dist/canvas/deps/slice.js +26 -26
- package/dist/canvas/deps/slice.js.map +1 -1
- package/dist/canvas/deps/textEdit.js +6 -5
- package/dist/canvas/deps/textEdit.js.map +1 -1
- package/dist/canvas/deps/view.js.map +1 -1
- package/dist/canvas/derivedPath.js +47 -22
- package/dist/canvas/derivedPath.js.map +1 -1
- package/dist/canvas/drawEnvelope.js +8 -4
- package/dist/canvas/drawEnvelope.js.map +1 -1
- package/dist/canvas/getNodeAtPoint.js +4 -8
- package/dist/canvas/getNodeAtPoint.js.map +1 -1
- package/dist/canvas/hud.module.js +1 -1
- package/dist/canvas/hud.module.js.map +1 -1
- package/dist/canvas/insertPreviewExtent.js.map +1 -1
- package/dist/canvas/kitRequirements.js +2 -2
- package/dist/canvas/kitRequirements.js.map +1 -1
- package/dist/canvas/layerOrder.js +13 -6
- package/dist/canvas/layerOrder.js.map +1 -1
- package/dist/canvas/layerSlots.js +6 -1
- package/dist/canvas/layerSlots.js.map +1 -1
- package/dist/canvas/nodeShapes/derivedPainter.js +34 -0
- package/dist/canvas/nodeShapes/derivedPainter.js.map +1 -0
- package/dist/canvas/nodeShapes/imagePainter.js +87 -0
- package/dist/canvas/nodeShapes/imagePainter.js.map +1 -0
- package/dist/canvas/nodeShapes/memo.js +9 -0
- package/dist/canvas/nodeShapes/memo.js.map +1 -0
- package/dist/canvas/nodeShapes/nodePaint.js +68 -0
- package/dist/canvas/nodeShapes/nodePaint.js.map +1 -0
- package/dist/canvas/nodeShapes/pathPainter.js +39 -0
- package/dist/canvas/nodeShapes/pathPainter.js.map +1 -0
- package/dist/canvas/nodeShapes/poseBox.js +20 -0
- package/dist/canvas/nodeShapes/poseBox.js.map +1 -0
- package/dist/canvas/nodeShapes/rectFallbackPainter.js +38 -0
- package/dist/canvas/nodeShapes/rectFallbackPainter.js.map +1 -0
- package/dist/canvas/nodeShapes/shapePainter.js +72 -0
- package/dist/canvas/nodeShapes/shapePainter.js.map +1 -0
- package/dist/canvas/nodeShapes/textPainter.js +55 -0
- package/dist/canvas/nodeShapes/textPainter.js.map +1 -0
- package/dist/canvas/overlayRoleStrokes.js.map +1 -1
- package/dist/canvas/paintCull.js +11 -14
- package/dist/canvas/paintCull.js.map +1 -1
- package/dist/{features/cursor → canvas}/paintedCursorLayer.js +2 -2
- package/dist/canvas/paintedCursorLayer.js.map +1 -0
- package/dist/canvas/pickWalk.js +59 -68
- package/dist/canvas/pickWalk.js.map +1 -1
- package/dist/canvas/planeClips.js +18 -19
- package/dist/canvas/planeClips.js.map +1 -1
- package/dist/canvas/poseCascade.js +41 -0
- package/dist/canvas/poseCascade.js.map +1 -0
- package/dist/canvas/poseRotation.js +9 -23
- package/dist/canvas/poseRotation.js.map +1 -1
- package/dist/canvas/rasterReadback.js +22 -0
- package/dist/canvas/rasterReadback.js.map +1 -0
- package/dist/canvas/renderDebugSnapshot.js +11 -11
- package/dist/canvas/renderDebugSnapshot.js.map +1 -1
- package/dist/canvas/renderNeeds.js +3 -3
- package/dist/canvas/renderNeeds.js.map +1 -1
- package/dist/canvas/renderSceneToPixels.js +64 -81
- package/dist/canvas/renderSceneToPixels.js.map +1 -1
- package/dist/canvas/sceneAdapter.js +68 -214
- package/dist/canvas/sceneAdapter.js.map +1 -1
- package/dist/canvas/sceneClipboard.js +112 -0
- package/dist/canvas/sceneClipboard.js.map +1 -0
- package/dist/canvas/sceneLayerPaint.js +4 -4
- package/dist/canvas/sceneLayerPaint.js.map +1 -1
- package/dist/canvas/sceneSlotWiring.js.map +1 -1
- package/dist/canvas/sceneViewRender.js +39 -39
- package/dist/canvas/sceneViewRender.js.map +1 -1
- package/dist/canvas/slopsDebugLayer.js +4 -4
- package/dist/canvas/slopsDebugLayer.js.map +1 -1
- package/dist/canvas/surface.module.js +6 -0
- package/dist/canvas/surface.module.js.map +1 -0
- package/dist/canvas/surfaceBox.js +16 -0
- package/dist/canvas/surfaceBox.js.map +1 -0
- package/dist/canvas/useCanvasRenderer.js +26 -6
- package/dist/canvas/useCanvasRenderer.js.map +1 -1
- package/dist/canvas/useCanvasSurface.js +31 -0
- package/dist/canvas/useCanvasSurface.js.map +1 -0
- package/dist/canvas/useCanvasView.js +67 -0
- package/dist/canvas/useCanvasView.js.map +1 -0
- package/dist/canvas/useFrameLoop.js +39 -31
- package/dist/canvas/useFrameLoop.js.map +1 -1
- package/dist/canvas/useHostAnchor.js +35 -33
- package/dist/canvas/useHostAnchor.js.map +1 -1
- package/dist/canvas/useLateContentRedraw.js +8 -8
- package/dist/canvas/useLateContentRedraw.js.map +1 -1
- package/dist/canvas/useSceneLayerList.js +11 -0
- package/dist/canvas/useSceneLayerList.js.map +1 -0
- package/dist/canvas/useSurfaceInput.js +42 -0
- package/dist/canvas/useSurfaceInput.js.map +1 -0
- package/dist/canvas/useToolCursor.js +29 -0
- package/dist/canvas/useToolCursor.js.map +1 -0
- package/dist/canvas/useViewHelpers.js +46 -85
- package/dist/canvas/useViewHelpers.js.map +1 -1
- package/dist/canvas/viewInputs.js.map +1 -1
- package/dist/canvas/viewRegistry.js +25 -27
- package/dist/canvas/viewRegistry.js.map +1 -1
- package/dist/canvas/watchElementMove.js +43 -0
- package/dist/canvas/watchElementMove.js.map +1 -0
- package/dist/canvas/wrapNodeOutput.js.map +1 -1
- package/dist/clipboard.d.ts +16 -19
- package/dist/{types-B_9g6hMM.d.ts → clone-2a5hVbBd.d.ts} +123 -74
- package/dist/clone.d.ts +4 -7
- package/dist/clone.js +0 -2
- package/dist/core/device/index.js +5 -4
- package/dist/core/device/targets.js.map +1 -1
- package/dist/core/device/useDeviceProfile.js +38 -44
- package/dist/core/device/useDeviceProfile.js.map +1 -1
- package/dist/core/device/watchDevicePixelRatio.js +17 -0
- package/dist/core/device/watchDevicePixelRatio.js.map +1 -0
- package/dist/{interactions/actions/resize → core/geometry}/autoPoseDescriptor.js +8 -7
- package/dist/core/geometry/autoPoseDescriptor.js.map +1 -0
- package/dist/core/geometry/pathPoseDescriptor.js +88 -0
- package/dist/core/geometry/pathPoseDescriptor.js.map +1 -0
- package/dist/core/geometry/poseDescriptor.js +68 -19
- package/dist/core/geometry/poseDescriptor.js.map +1 -1
- package/dist/core/geometry/regionHit.js +31 -34
- package/dist/core/geometry/regionHit.js.map +1 -1
- package/dist/core/geometry/targetFrame.js +94 -0
- package/dist/core/geometry/targetFrame.js.map +1 -0
- package/dist/core/geometry/unionBounds.js +30 -29
- package/dist/core/geometry/unionBounds.js.map +1 -1
- package/dist/core/isPlainObject.js +2 -11
- package/dist/core/layers/backgroundFill.js +31 -0
- package/dist/core/layers/backgroundFill.js.map +1 -0
- package/dist/{features/groups → core/layers}/children.js +1 -1
- package/dist/core/layers/children.js.map +1 -0
- package/dist/core/layers/gateLayer.js +13 -0
- package/dist/core/layers/gateLayer.js.map +1 -0
- package/dist/core/layers/layerGroup.js +40 -0
- package/dist/core/layers/layerGroup.js.map +1 -0
- package/dist/core/layers/render.js +50 -76
- package/dist/core/layers/render.js.map +1 -1
- package/dist/core/ops/arrange.js +1 -0
- package/dist/core/ops/arrange.js.map +1 -1
- package/dist/core/ops/create.js +10 -5
- package/dist/core/ops/create.js.map +1 -1
- package/dist/core/ops/createHistory.js +9 -9
- package/dist/core/ops/createHistory.js.map +1 -1
- package/dist/core/ops/delete.js +12 -24
- package/dist/core/ops/delete.js.map +1 -1
- package/dist/core/ops/reorder/index.js +43 -40
- package/dist/core/ops/reorder/index.js.map +1 -1
- package/dist/core/ops/reorder/setChildOrder.js +34 -0
- package/dist/core/ops/reorder/setChildOrder.js.map +1 -0
- package/dist/core/paint/meshKind.js +16 -0
- package/dist/core/paint/meshKind.js.map +1 -0
- package/dist/{features/meshPaint/lazyKind.js → core/paint/meshKindLazy.js} +282 -105
- package/dist/core/paint/meshKindLazy.js.map +1 -0
- package/dist/core/paint/paintKindEntry.js +8 -0
- package/dist/core/paint/paintKindEntry.js.map +1 -0
- package/dist/core/paint/paintKinds.js +144 -0
- package/dist/core/paint/paintKinds.js.map +1 -0
- package/dist/core/paint/registerMesh.js +7 -0
- package/dist/core/paint/registerMesh.js.map +1 -0
- package/dist/core/scene/NodeProperties.js.map +1 -1
- package/dist/core/scene/NodeRouting.js.map +1 -1
- package/dist/core/scene/appliedLog.js +37 -0
- package/dist/core/scene/appliedLog.js.map +1 -0
- package/dist/core/scene/arrivalWindow.js +102 -0
- package/dist/core/scene/arrivalWindow.js.map +1 -0
- package/dist/core/scene/boundOps.js +40 -0
- package/dist/core/scene/boundOps.js.map +1 -0
- package/dist/core/scene/composeFrame.js +9 -6
- package/dist/core/scene/composeFrame.js.map +1 -1
- package/dist/{features/groups → core/scene}/composePose.js +18 -18
- package/dist/core/scene/composePose.js.map +1 -0
- package/dist/core/scene/depMemo.js +31 -6
- package/dist/core/scene/depMemo.js.map +1 -1
- package/dist/core/scene/derivedPath.js +19 -20
- package/dist/core/scene/derivedPath.js.map +1 -1
- package/dist/core/scene/editMode.js +26 -0
- package/dist/core/scene/editMode.js.map +1 -0
- package/dist/core/scene/effectivePose.js +38 -39
- package/dist/core/scene/effectivePose.js.map +1 -1
- package/dist/core/scene/fieldEdits.js +98 -0
- package/dist/core/scene/fieldEdits.js.map +1 -0
- package/dist/core/scene/historyFacade.js +130 -0
- package/dist/core/scene/historyFacade.js.map +1 -0
- package/dist/core/scene/historyForm.js +6 -0
- package/dist/core/scene/historyForm.js.map +1 -0
- package/dist/core/scene/kitOps.js +185 -0
- package/dist/core/scene/kitOps.js.map +1 -0
- package/dist/core/scene/kitRegistry.js.map +1 -1
- package/dist/core/scene/layerStack.js +131 -0
- package/dist/core/scene/layerStack.js.map +1 -0
- package/dist/core/scene/layoutPass.js +58 -59
- package/dist/core/scene/layoutPass.js.map +1 -1
- package/dist/core/scene/lockGuard.js +37 -0
- package/dist/core/scene/lockGuard.js.map +1 -0
- package/dist/{features/groups → core/scene}/nestedHit.js +3 -3
- package/dist/core/scene/nestedHit.js.map +1 -0
- package/dist/core/scene/nodeFnFields.js +10 -11
- package/dist/core/scene/nodeFnFields.js.map +1 -1
- package/dist/core/scene/nodeMemo.js +45 -19
- package/dist/core/scene/nodeMemo.js.map +1 -1
- package/dist/core/scene/nodeStore.js +127 -0
- package/dist/core/scene/nodeStore.js.map +1 -0
- package/dist/core/scene/notifier.js +37 -0
- package/dist/core/scene/notifier.js.map +1 -0
- package/dist/core/scene/opTable.js +50 -0
- package/dist/core/scene/opTable.js.map +1 -0
- package/dist/core/scene/outerOps.js +66 -0
- package/dist/core/scene/outerOps.js.map +1 -0
- package/dist/core/scene/poseFeed.js +38 -38
- package/dist/core/scene/poseFeed.js.map +1 -1
- package/dist/core/scene/poseHold.js +39 -0
- package/dist/core/scene/poseHold.js.map +1 -0
- package/dist/core/scene/poseOverrides.js +44 -40
- package/dist/core/scene/poseOverrides.js.map +1 -1
- package/dist/core/scene/poseSnapshot.js.map +1 -1
- package/dist/core/scene/reconcileSpecs.js +3 -2
- package/dist/core/scene/reconcileSpecs.js.map +1 -1
- package/dist/core/scene/recorder.js +86 -0
- package/dist/core/scene/recorder.js.map +1 -0
- package/dist/core/scene/renderOrder.js +84 -0
- package/dist/core/scene/renderOrder.js.map +1 -0
- package/dist/core/scene/scene.js +80 -1266
- package/dist/core/scene/scene.js.map +1 -1
- package/dist/core/scene/sceneEdits.js +58 -0
- package/dist/core/scene/sceneEdits.js.map +1 -0
- package/dist/core/scene/sceneMutators.js +49 -0
- package/dist/core/scene/sceneMutators.js.map +1 -0
- package/dist/core/scene/scenePoseAdapter.js +16 -0
- package/dist/core/scene/scenePoseAdapter.js.map +1 -0
- package/dist/core/scene/sceneRecording.js +90 -0
- package/dist/core/scene/sceneRecording.js.map +1 -0
- package/dist/core/scene/sceneSelection.js +28 -0
- package/dist/core/scene/sceneSelection.js.map +1 -0
- package/dist/core/scene/sceneState.js +49 -0
- package/dist/core/scene/sceneState.js.map +1 -0
- package/dist/core/scene/serialization.js +71 -0
- package/dist/core/scene/serialization.js.map +1 -0
- package/dist/core/scene/staleReplay.js +51 -0
- package/dist/core/scene/staleReplay.js.map +1 -0
- package/dist/core/scene/statedFields.js +9 -0
- package/dist/core/scene/statedFields.js.map +1 -0
- package/dist/core/scene/treeEdits.js +127 -0
- package/dist/core/scene/treeEdits.js.map +1 -0
- package/dist/core/scene/treeOrder.js +13 -0
- package/dist/core/scene/treeOrder.js.map +1 -0
- package/dist/core/scene/treeReads.js +26 -0
- package/dist/core/scene/treeReads.js.map +1 -0
- package/dist/core/scene/types.js.map +1 -1
- package/dist/{features/groups → core/scene}/unionOfChildren.js +3 -3
- package/dist/core/scene/unionOfChildren.js.map +1 -0
- package/dist/core/scene/unitScopes.js +13 -0
- package/dist/core/scene/unitScopes.js.map +1 -0
- package/dist/core/scene/useScene.js.map +1 -1
- package/dist/core/selection/readOnlySelection.js +32 -0
- package/dist/core/selection/readOnlySelection.js.map +1 -0
- package/dist/core/selection/usePublishSceneSelection.js +26 -0
- package/dist/core/selection/usePublishSceneSelection.js.map +1 -0
- package/dist/core/selection/useSelection.js +34 -25
- package/dist/core/selection/useSelection.js.map +1 -1
- package/dist/core/shapeKinds.js.map +1 -1
- package/dist/core/stylus/stylus.js.map +1 -1
- package/dist/core/stylus/usePointerStylus.js.map +1 -1
- package/dist/core/usePaintKinds.js +1 -1
- package/dist/core/usePaintKinds.js.map +1 -1
- package/dist/core/viewport/clientToWorld.js.map +1 -1
- package/dist/core/viewport/fitViewToBounds.js.map +1 -1
- package/dist/core/viewport/parallax.js.map +1 -1
- package/dist/core/viewport/screenSlop.js +11 -11
- package/dist/core/viewport/screenSlop.js.map +1 -1
- package/dist/core/viewport/useCanvasSize.js.map +1 -1
- package/dist/core/viewport/useDecayLoop.js +8 -8
- package/dist/core/viewport/useDecayLoop.js.map +1 -1
- package/dist/core/viewport/useNodeOverlayFrame.js +84 -0
- package/dist/core/viewport/useNodeOverlayFrame.js.map +1 -0
- package/dist/core/viewport/useViewAnimation.js +102 -43
- package/dist/core/viewport/useViewAnimation.js.map +1 -1
- package/dist/core/viewport/view.js +9 -9
- package/dist/core/viewport/view.js.map +1 -1
- package/dist/core/viewport/wheelHandler.js.map +1 -1
- package/dist/core/viewport/zoomBounds.js +10 -8
- package/dist/core/viewport/zoomBounds.js.map +1 -1
- package/dist/{cornerHandles-BCrDp_mH.d.ts → cornerHandles-BEshc4z3.d.ts} +11 -24
- package/dist/debug/createDebugOverlayLayer.js +97 -97
- package/dist/debug/createDebugOverlayLayer.js.map +1 -1
- package/dist/debug/createDebugSink.js.map +1 -1
- package/dist/debug/flag.js +2 -41
- package/dist/debug/frameStats.js.map +1 -1
- package/dist/debug/useDebugSink.js +52 -0
- package/dist/debug/useDebugSink.js.map +1 -0
- package/dist/features/chrome-caps/buildChromeCtx.js.map +1 -1
- package/dist/features/chrome-caps/conditions.js.map +1 -1
- package/dist/features/chrome-caps/defaults.js.map +1 -1
- package/dist/features/chrome-caps/resolve.js.map +1 -1
- package/dist/features/chrome-caps/useChromeCaps.js +54 -0
- package/dist/features/chrome-caps/useChromeCaps.js.map +1 -0
- package/dist/features/chrome-caps/useHoverTracking.js +22 -17
- package/dist/features/chrome-caps/useHoverTracking.js.map +1 -1
- package/dist/features/ingestion/contentHandlers.js +28 -19
- package/dist/features/ingestion/contentHandlers.js.map +1 -1
- package/dist/features/ingestion/imageHandler.js +21 -24
- package/dist/features/ingestion/imageHandler.js.map +1 -1
- package/dist/features/ingestion/openFilePicker.js.map +1 -1
- package/dist/features/ingestion/placement.js +16 -0
- package/dist/features/ingestion/placement.js.map +1 -0
- package/dist/features/ingestion/registerKitHandlers.js +7 -7
- package/dist/features/ingestion/svgHandler.js +5 -0
- package/dist/features/ingestion/svgHandler.js.map +1 -1
- package/dist/features/ingestion/textHandler.js +28 -0
- package/dist/features/ingestion/textHandler.js.map +1 -0
- package/dist/features/ingestion/useCanvasIngestion.js +48 -0
- package/dist/features/ingestion/useCanvasIngestion.js.map +1 -0
- package/dist/features/ingestion/weaselJsonHandler.js +22 -14
- package/dist/features/ingestion/weaselJsonHandler.js.map +1 -1
- package/dist/features/longPress/longPressFeedback.js.map +1 -1
- package/dist/features/modes/modeLayers.js +7 -7
- package/dist/features/modes/modeLayers.js.map +1 -1
- package/dist/features/paths/editablePath.js +47 -0
- package/dist/features/paths/editablePath.js.map +1 -0
- package/dist/features/paths/index.js +9 -14
- package/dist/features/paths/pathEditState.js +41 -0
- package/dist/features/paths/pathEditState.js.map +1 -0
- package/dist/features/paths/pathEditingOverlayLayer.js +36 -38
- package/dist/features/paths/pathEditingOverlayLayer.js.map +1 -1
- package/dist/features/paths/pathLayer.js +3 -2
- package/dist/features/paths/pathLayer.js.map +1 -1
- package/dist/features/paths/penPreviewLayer.js +86 -88
- package/dist/features/paths/penPreviewLayer.js.map +1 -1
- package/dist/features/paths/usePathEdit.js +34 -0
- package/dist/features/paths/usePathEdit.js.map +1 -0
- package/dist/features/poseRun/usePoseRun.js +44 -52
- package/dist/features/poseRun/usePoseRun.js.map +1 -1
- package/dist/features/selection/overlay.js +171 -179
- package/dist/features/selection/overlay.js.map +1 -1
- package/dist/features/text/index.js +6 -0
- package/dist/features/text/textLayer.js +1 -1
- package/dist/features/text/textLayer.js.map +1 -1
- package/dist/features/text/useSceneTextEdit.js +100 -93
- package/dist/features/text/useSceneTextEdit.js.map +1 -1
- package/dist/features/viewports/viewportLayer.js +25 -36
- package/dist/features/viewports/viewportLayer.js.map +1 -1
- package/dist/index.d.ts +8473 -9141
- package/dist/index.js +269 -307
- package/dist/input/keyState.js +38 -39
- package/dist/input/keyState.js.map +1 -1
- package/dist/input/useKeyModifiers.js +11 -0
- package/dist/input/useKeyModifiers.js.map +1 -0
- package/dist/interactions/actions/actionShortcuts.js.map +1 -1
- package/dist/interactions/actions/{defaults/align.js → align/action.js} +18 -20
- package/dist/interactions/actions/align/action.js.map +1 -0
- package/dist/interactions/actions/align/align.js +20 -20
- package/dist/interactions/actions/align/align.js.map +1 -1
- package/dist/interactions/actions/booleans/action.js +65 -0
- package/dist/interactions/actions/booleans/action.js.map +1 -0
- package/dist/interactions/actions/booleans/booleans.js +69 -78
- package/dist/interactions/actions/booleans/booleans.js.map +1 -1
- package/dist/interactions/actions/booleans/operands.js +40 -0
- package/dist/interactions/actions/booleans/operands.js.map +1 -0
- package/dist/interactions/actions/booleans/pieces.js +45 -0
- package/dist/interactions/actions/booleans/pieces.js.map +1 -0
- package/dist/interactions/actions/booleans/placement.js +24 -0
- package/dist/interactions/actions/booleans/placement.js.map +1 -0
- package/dist/interactions/actions/booleans/useBooleans.js +11 -9
- package/dist/interactions/actions/booleans/useBooleans.js.map +1 -1
- package/dist/interactions/actions/booleans/useBooleansAdapter.js.map +1 -1
- package/dist/interactions/actions/{defaults/clipboard.js → clipboard/action.js} +31 -15
- package/dist/interactions/actions/clipboard/action.js.map +1 -0
- package/dist/interactions/actions/clipboard/clipboardOps.js +44 -42
- package/dist/interactions/actions/clipboard/clipboardOps.js.map +1 -1
- package/dist/interactions/actions/clipboard/materializePaste.js +10 -7
- package/dist/interactions/actions/clipboard/materializePaste.js.map +1 -1
- package/dist/interactions/actions/clipboard/wireFormat.js.map +1 -1
- package/dist/interactions/actions/clone/action.js +98 -0
- package/dist/interactions/actions/clone/action.js.map +1 -0
- package/dist/interactions/actions/clone/behaviors.js +52 -0
- package/dist/interactions/actions/clone/behaviors.js.map +1 -0
- package/dist/interactions/actions/defaultCommitAdapter.js +7 -32
- package/dist/interactions/actions/defaultCommitAdapter.js.map +1 -1
- package/dist/interactions/actions/defaults/anchorEditing.js +60 -84
- package/dist/interactions/actions/defaults/anchorEditing.js.map +1 -1
- package/dist/interactions/actions/defaults/areaSelect.js +35 -38
- package/dist/interactions/actions/defaults/areaSelect.js.map +1 -1
- package/dist/interactions/actions/defaults/cancelGesture.js.map +1 -1
- package/dist/interactions/actions/defaults/clearSelection.js.map +1 -1
- package/dist/interactions/actions/defaults/copySubtree.js +40 -0
- package/dist/interactions/actions/defaults/copySubtree.js.map +1 -0
- package/dist/interactions/actions/defaults/createPaintAction.js.map +1 -1
- package/dist/interactions/actions/defaults/delete.js.map +1 -1
- package/dist/interactions/actions/defaults/duplicate.js +13 -53
- package/dist/interactions/actions/defaults/duplicate.js.map +1 -1
- package/dist/interactions/actions/defaults/enterTextEdit.js.map +1 -1
- package/dist/interactions/actions/defaults/group.js +40 -50
- package/dist/interactions/actions/defaults/group.js.map +1 -1
- package/dist/interactions/actions/defaults/icons/booleanIcons.js +24 -1
- package/dist/interactions/actions/defaults/icons/booleanIcons.js.map +1 -1
- package/dist/interactions/actions/defaults/icons/outlineIcons.js +39 -1
- package/dist/interactions/actions/defaults/icons/outlineIcons.js.map +1 -1
- package/dist/interactions/actions/defaults/ingest.js +44 -38
- package/dist/interactions/actions/defaults/ingest.js.map +1 -1
- package/dist/interactions/actions/defaults/insertPathAnchor.js +11 -12
- package/dist/interactions/actions/defaults/insertPathAnchor.js.map +1 -1
- package/dist/interactions/actions/defaults/nudge.js +40 -69
- package/dist/interactions/actions/defaults/nudge.js.map +1 -1
- package/dist/interactions/actions/defaults/nudgeSteps.js +37 -0
- package/dist/interactions/actions/defaults/nudgeSteps.js.map +1 -0
- package/dist/interactions/actions/defaults/pinchZoom.js.map +1 -1
- package/dist/interactions/actions/defaults/reorder.js +2 -0
- package/dist/interactions/actions/defaults/reorder.js.map +1 -1
- package/dist/interactions/actions/defaults/requiresSelection.js.map +1 -1
- package/dist/interactions/actions/defaults/setFill.js +14 -8
- package/dist/interactions/actions/defaults/setFill.js.map +1 -1
- package/dist/interactions/actions/defaults/setFillOpacity.js +7 -4
- package/dist/interactions/actions/defaults/setFillOpacity.js.map +1 -1
- package/dist/interactions/actions/defaults/setStroke.js +12 -12
- package/dist/interactions/actions/defaults/setStroke.js.map +1 -1
- package/dist/interactions/actions/defaults/setStrokeOpacity.js +6 -6
- package/dist/interactions/actions/defaults/sliceOps.js +8 -10
- package/dist/interactions/actions/defaults/sliceOps.js.map +1 -1
- package/dist/interactions/actions/defaults/toolActivate.js.map +1 -1
- package/dist/interactions/actions/defaults/toolResetToDefault.js.map +1 -1
- package/dist/interactions/actions/defaults/viewportDragPan.js +37 -26
- package/dist/interactions/actions/defaults/viewportDragPan.js.map +1 -1
- package/dist/interactions/actions/defaults/viewportWheelPan.js.map +1 -1
- package/dist/interactions/actions/defaults/viewportZoom.js.map +1 -1
- package/dist/interactions/actions/distribute/action.js +66 -0
- package/dist/interactions/actions/distribute/action.js.map +1 -0
- package/dist/interactions/actions/distribute/distribute.js +11 -11
- package/dist/interactions/actions/distribute/distribute.js.map +1 -1
- package/dist/interactions/actions/{defaults/editAnchors.js → edit-anchors/action.js} +7 -9
- package/dist/interactions/actions/edit-anchors/action.js.map +1 -0
- package/dist/interactions/actions/edit-anchors/geometry.js +30 -27
- package/dist/interactions/actions/edit-anchors/geometry.js.map +1 -1
- package/dist/interactions/actions/flip/action.js +124 -0
- package/dist/interactions/actions/flip/action.js.map +1 -0
- package/dist/interactions/actions/flip/helpers.js +30 -17
- package/dist/interactions/actions/flip/helpers.js.map +1 -1
- package/dist/interactions/actions/gestureFrames.js +18 -0
- package/dist/interactions/actions/gestureFrames.js.map +1 -0
- package/dist/interactions/actions/gestureLifecycle.js +47 -20
- package/dist/interactions/actions/gestureLifecycle.js.map +1 -1
- package/dist/interactions/actions/hitSelection.js +8 -0
- package/dist/interactions/actions/hitSelection.js.map +1 -0
- package/dist/interactions/actions/insert/action.js +72 -0
- package/dist/interactions/actions/insert/action.js.map +1 -0
- package/dist/interactions/actions/insert/commit.js +28 -0
- package/dist/interactions/actions/insert/commit.js.map +1 -0
- package/dist/interactions/actions/insert/extras.js +65 -0
- package/dist/interactions/actions/insert/extras.js.map +1 -0
- package/dist/interactions/actions/insert/frame.js +48 -0
- package/dist/interactions/actions/insert/frame.js.map +1 -0
- package/dist/interactions/actions/insert/geometry.js +35 -0
- package/dist/interactions/actions/insert/geometry.js.map +1 -0
- package/dist/interactions/actions/insert/rotateAction.js +21 -0
- package/dist/interactions/actions/insert/rotateAction.js.map +1 -0
- package/dist/interactions/actions/insert/session.js +59 -0
- package/dist/interactions/actions/insert/session.js.map +1 -0
- package/dist/interactions/actions/insert/shape.js +34 -0
- package/dist/interactions/actions/insert/shape.js.map +1 -0
- package/dist/interactions/actions/lasso-select/action.js +143 -0
- package/dist/interactions/actions/lasso-select/action.js.map +1 -0
- package/dist/interactions/actions/lasso-select/behaviors/selectFromLasso.js +14 -18
- package/dist/interactions/actions/lasso-select/behaviors/selectFromLasso.js.map +1 -1
- package/dist/interactions/actions/move/action.js +87 -0
- package/dist/interactions/actions/move/action.js.map +1 -0
- package/dist/interactions/actions/move/behaviors/layoutDrop.js +51 -0
- package/dist/interactions/actions/move/behaviors/layoutDrop.js.map +1 -0
- package/dist/interactions/actions/move/behaviors/reparentOnDrop.js +15 -0
- package/dist/interactions/actions/move/behaviors/reparentOnDrop.js.map +1 -0
- package/dist/interactions/actions/move/behaviors/snapBackOrDelete.js +5 -5
- package/dist/interactions/actions/move/behaviors/snapBackOrDelete.js.map +1 -1
- package/dist/interactions/actions/move/behaviors/snapToContainer.js +39 -27
- package/dist/interactions/actions/move/behaviors/snapToContainer.js.map +1 -1
- package/dist/interactions/actions/move/capture.js +99 -0
- package/dist/interactions/actions/move/capture.js.map +1 -0
- package/dist/interactions/actions/move/commit/index.js +41 -0
- package/dist/interactions/actions/move/commit/index.js.map +1 -0
- package/dist/interactions/actions/move/commit/layoutDrop.js +44 -0
- package/dist/interactions/actions/move/commit/layoutDrop.js.map +1 -0
- package/dist/interactions/actions/move/commit/layoutRelease.js +100 -0
- package/dist/interactions/actions/move/commit/layoutRelease.js.map +1 -0
- package/dist/interactions/actions/move/commit/rebase.js +18 -0
- package/dist/interactions/actions/move/commit/rebase.js.map +1 -0
- package/dist/interactions/actions/move/commit/reparent.js +65 -0
- package/dist/interactions/actions/move/commit/reparent.js.map +1 -0
- package/dist/interactions/actions/move/delta.js +51 -0
- package/dist/interactions/actions/move/delta.js.map +1 -0
- package/dist/interactions/actions/move/frame.js +59 -0
- package/dist/interactions/actions/move/frame.js.map +1 -0
- package/dist/interactions/actions/move/gestureAdapter.js +22 -30
- package/dist/interactions/actions/move/gestureAdapter.js.map +1 -1
- package/dist/interactions/actions/move/landedDescendants.js +33 -0
- package/dist/interactions/actions/move/landedDescendants.js.map +1 -0
- package/dist/interactions/actions/move/layout/container.js +94 -0
- package/dist/interactions/actions/move/layout/container.js.map +1 -0
- package/dist/interactions/actions/move/layout/dragged.js +58 -0
- package/dist/interactions/actions/move/layout/dragged.js.map +1 -0
- package/dist/interactions/actions/move/layout/dropPass.js +122 -0
- package/dist/interactions/actions/move/layout/dropPass.js.map +1 -0
- package/dist/interactions/actions/move/layout/exits.js +38 -0
- package/dist/interactions/actions/move/layout/exits.js.map +1 -0
- package/dist/interactions/actions/move/layout/glide.js +48 -0
- package/dist/interactions/actions/move/layout/glide.js.map +1 -0
- package/dist/interactions/actions/move/session.js +63 -0
- package/dist/interactions/actions/move/session.js.map +1 -0
- package/dist/interactions/actions/move/translate.js +61 -0
- package/dist/interactions/actions/move/translate.js.map +1 -0
- package/dist/interactions/actions/outlines/createOutlines.js +16 -63
- package/dist/interactions/actions/outlines/createOutlines.js.map +1 -1
- package/dist/interactions/actions/outlines/createOutlinesAction.js +51 -0
- package/dist/interactions/actions/outlines/createOutlinesAction.js.map +1 -0
- package/dist/interactions/actions/outlines/outlineStroke.js +72 -0
- package/dist/interactions/actions/outlines/outlineStroke.js.map +1 -0
- package/dist/interactions/actions/outlines/outlineStrokeAction.js +37 -0
- package/dist/interactions/actions/outlines/outlineStrokeAction.js.map +1 -0
- package/dist/interactions/actions/outlines/replaceWithPaths.js +54 -0
- package/dist/interactions/actions/outlines/replaceWithPaths.js.map +1 -0
- package/dist/interactions/actions/outlines/strokeRegion.js +27 -0
- package/dist/interactions/actions/outlines/strokeRegion.js.map +1 -0
- package/dist/interactions/actions/planeInput.js.map +1 -1
- package/dist/interactions/actions/pointerState.js +12 -0
- package/dist/interactions/actions/pointerState.js.map +1 -0
- package/dist/interactions/actions/poseDescriptorDep.js +16 -4
- package/dist/interactions/actions/poseDescriptorDep.js.map +1 -1
- package/dist/interactions/actions/poseFrame.js +25 -20
- package/dist/interactions/actions/poseFrame.js.map +1 -1
- package/dist/interactions/actions/resize/action.js +55 -0
- package/dist/interactions/actions/resize/action.js.map +1 -0
- package/dist/interactions/actions/resize/behaviors/lockAspect.js.map +1 -1
- package/dist/interactions/actions/resize/boxFrame.js +16 -0
- package/dist/interactions/actions/resize/boxFrame.js.map +1 -0
- package/dist/interactions/actions/resize/capture.js +85 -0
- package/dist/interactions/actions/resize/capture.js.map +1 -0
- package/dist/interactions/actions/resize/commit.js +69 -0
- package/dist/interactions/actions/resize/commit.js.map +1 -0
- package/dist/interactions/actions/resize/frame.js +74 -0
- package/dist/interactions/actions/resize/frame.js.map +1 -0
- package/dist/interactions/actions/resize/pointSnap.js +111 -0
- package/dist/interactions/actions/resize/pointSnap.js.map +1 -0
- package/dist/interactions/actions/resize/ruleBounds.js +9 -0
- package/dist/interactions/actions/resize/ruleBounds.js.map +1 -0
- package/dist/interactions/actions/resize/session.js +49 -0
- package/dist/interactions/actions/resize/session.js.map +1 -0
- package/dist/interactions/actions/resolveOverlays.js.map +1 -1
- package/dist/interactions/actions/resolvePreviews.js.map +1 -1
- package/dist/interactions/actions/rotate/action.js +56 -0
- package/dist/interactions/actions/rotate/action.js.map +1 -0
- package/dist/interactions/actions/rotate/behaviors/index.js +7 -0
- package/dist/interactions/actions/rotate/behaviors/index.js.map +1 -0
- package/dist/interactions/actions/rotate/behaviors/snapRotation.js +12 -0
- package/dist/interactions/actions/rotate/behaviors/snapRotation.js.map +1 -0
- package/dist/interactions/actions/rotate/commit.js +40 -0
- package/dist/interactions/actions/rotate/commit.js.map +1 -0
- package/dist/interactions/actions/rotate/frame.js +65 -0
- package/dist/interactions/actions/rotate/frame.js.map +1 -0
- package/dist/interactions/actions/rotate/handle.js +12 -12
- package/dist/interactions/actions/rotate/handle.js.map +1 -1
- package/dist/interactions/actions/rotate/session.js +92 -0
- package/dist/interactions/actions/rotate/session.js.map +1 -0
- package/dist/interactions/actions/selectionSubtree.js +69 -0
- package/dist/interactions/actions/selectionSubtree.js.map +1 -0
- package/dist/interactions/actions/spatialReference.js.map +1 -1
- package/dist/interactions/actions/useStandardActions.js +87 -78
- package/dist/interactions/actions/useStandardActions.js.map +1 -1
- package/dist/interactions/gestures/dragGesture/dragGesture.js +4 -7
- package/dist/interactions/gestures/dragGesture/dragGesture.js.map +1 -1
- package/dist/interactions/gestures/dragGesture/dragPointOf.js +23 -0
- package/dist/interactions/gestures/dragGesture/dragPointOf.js.map +1 -0
- package/dist/interactions/gestures/handleDrag/handleDrag.js +21 -26
- package/dist/interactions/gestures/handleDrag/handleDrag.js.map +1 -1
- package/dist/interactions/gestures/pointerDrag/pointerDrag.js +62 -41
- package/dist/interactions/gestures/pointerDrag/pointerDrag.js.map +1 -1
- package/dist/interactions/gestures/shared/originProjection.js +1 -1
- package/dist/interactions/gestures/shared/originProjection.js.map +1 -1
- package/dist/interactions/gestures/shared/screenTolerance.js +8 -2
- package/dist/interactions/gestures/shared/screenTolerance.js.map +1 -1
- package/dist/interactions/gestures/shared/snap.js.map +1 -1
- package/dist/interactions/gestures/thresholdDrag/thresholdDrag.js +8 -4
- package/dist/interactions/gestures/thresholdDrag/thresholdDrag.js.map +1 -1
- package/dist/layout/arrivals.js +20 -23
- package/dist/layout/arrivals.js.map +1 -1
- package/dist/math-CYUjoyyU.d.ts +33 -0
- package/dist/math.d.ts +5 -3
- package/dist/math.js +6 -6
- package/dist/mesh.d.ts +4 -268
- package/dist/mesh.js +3 -7
- package/dist/move.d.ts +14 -11
- package/dist/{originProjection-DEklpDc_.d.ts → originProjection-PPT88jZv.d.ts} +1 -1
- package/dist/patterns-builtin.d.ts +1 -118
- package/dist/patterns-builtin.js +2 -3
- package/dist/{poseDescriptor-D-OH-tu5.d.ts → poseDescriptor-Bqk-11Rl.d.ts} +26 -36
- package/dist/renderer.d.ts +1 -91
- package/dist/renderer.js +2 -18
- package/dist/resize.d.ts +10 -22
- package/dist/resize.js +6 -6
- package/dist/style.css +1 -1
- package/dist/test-hook/install.js +12 -6
- package/dist/test-hook/install.js.map +1 -1
- package/dist/test-hook/useTestHook.js +22 -0
- package/dist/test-hook/useTestHook.js.map +1 -0
- package/dist/test-seams-D0pyV3pR.d.ts +149 -0
- package/dist/test-seams.d.ts +4 -4
- package/dist/test-seams.js +2 -2
- package/dist/tools/builtin/bone/boneActions.js +130 -0
- package/dist/tools/builtin/bone/boneActions.js.map +1 -0
- package/dist/tools/builtin/bone/boneOverlay.js +58 -0
- package/dist/tools/builtin/bone/boneOverlay.js.map +1 -0
- package/dist/tools/builtin/bone/placedRig.js +24 -0
- package/dist/tools/builtin/bone/placedRig.js.map +1 -0
- package/dist/tools/builtin/bone/rigEditState.js +21 -0
- package/dist/tools/builtin/bone/rigEditState.js.map +1 -0
- package/dist/tools/builtin/bone/useBoneTool.js +98 -0
- package/dist/tools/builtin/bone/useBoneTool.js.map +1 -0
- package/dist/tools/builtin/ellipse/useEllipseTool.js +1 -0
- package/dist/tools/builtin/ellipse/useEllipseTool.js.map +1 -1
- package/dist/tools/builtin/eyedropper/useEyedropperTool.js.map +1 -1
- package/dist/tools/builtin/hand/useHandTool.js +1 -0
- package/dist/tools/builtin/hand/useHandTool.js.map +1 -1
- package/dist/tools/builtin/image/useImageTool.js.map +1 -1
- package/dist/tools/builtin/lasso/useLassoTool.js +11 -11
- package/dist/tools/builtin/lasso/useLassoTool.js.map +1 -1
- package/dist/tools/builtin/line/useLineTool.js +1 -0
- package/dist/tools/builtin/line/useLineTool.js.map +1 -1
- package/dist/tools/builtin/pen/usePenTool.js +198 -150
- package/dist/tools/builtin/pen/usePenTool.js.map +1 -1
- package/dist/tools/builtin/pencil/usePencilTool.js +1 -0
- package/dist/tools/builtin/pencil/usePencilTool.js.map +1 -1
- package/dist/tools/builtin/pickTopMostHit.js.map +1 -1
- package/dist/tools/builtin/polygon/usePolygonTool.js +13 -8
- package/dist/tools/builtin/polygon/usePolygonTool.js.map +1 -1
- package/dist/tools/builtin/rect/useRectTool.js +1 -0
- package/dist/tools/builtin/rect/useRectTool.js.map +1 -1
- package/dist/tools/builtin/select/adapterPointQuery.js +36 -0
- package/dist/tools/builtin/select/adapterPointQuery.js.map +1 -0
- package/dist/tools/builtin/select/selectionContributions.js +25 -24
- package/dist/tools/builtin/select/selectionContributions.js.map +1 -1
- package/dist/tools/builtin/select/useSelectTool.js +42 -67
- package/dist/tools/builtin/select/useSelectTool.js.map +1 -1
- package/dist/tools/builtin/shared/pointerFollower.js +17 -0
- package/dist/tools/builtin/shared/pointerFollower.js.map +1 -0
- package/dist/tools/builtin/slice/useSliceTool.js +72 -82
- package/dist/tools/builtin/slice/useSliceTool.js.map +1 -1
- package/dist/tools/builtin/star/useStarTool.js +22 -16
- package/dist/tools/builtin/star/useStarTool.js.map +1 -1
- package/dist/tools/builtin/text/useTextTool.js +9 -0
- package/dist/tools/builtin/text/useTextTool.js.map +1 -1
- package/dist/tools/builtin/weight/useWeightTool.js +77 -0
- package/dist/tools/builtin/weight/useWeightTool.js.map +1 -0
- package/dist/tools/builtin/weight/weightActions.js +112 -0
- package/dist/tools/builtin/weight/weightActions.js.map +1 -0
- package/dist/tools/builtin/weight/weightOverlay.js +61 -0
- package/dist/tools/builtin/weight/weightOverlay.js.map +1 -0
- package/dist/tools/overlayBinding.js.map +1 -1
- package/dist/tools/useKeybindings.js +12 -22
- package/dist/tools/useKeybindings.js.map +1 -1
- package/dist/{types-A37hYkeR.d.ts → types-CIKDwlsP.d.ts} +113 -169
- package/dist/util/color.js +3 -3
- package/dist/util/color.js.map +1 -1
- package/dist/util/paint.js +1 -1
- package/dist/util/paint.js.map +1 -1
- package/dist/version.js +1 -1
- package/package.json +28 -21
- package/dist/animation/colorHelpers.js +0 -135
- package/dist/animation/colorHelpers.js.map +0 -1
- package/dist/animation/colorRegistry.js +0 -37
- package/dist/animation/colorRegistry.js.map +0 -1
- package/dist/animation/engine/axes.js +0 -36
- package/dist/animation/engine/axes.js.map +0 -1
- package/dist/animation/engine/codec.js +0 -170
- package/dist/animation/engine/codec.js.map +0 -1
- package/dist/animation/engine/integrator.js +0 -12
- package/dist/animation/engine/integrator.js.map +0 -1
- package/dist/animation/loop.js +0 -62
- package/dist/animation/loop.js.map +0 -1
- package/dist/animation/observe.js +0 -23
- package/dist/animation/observe.js.map +0 -1
- package/dist/animation/rig/blendPoses.js +0 -43
- package/dist/animation/rig/blendPoses.js.map +0 -1
- package/dist/animation/rig/mirrorPose.js +0 -19
- package/dist/animation/rig/mirrorPose.js.map +0 -1
- package/dist/animation/rig/resolveSkeleton.js +0 -33
- package/dist/animation/rig/resolveSkeleton.js.map +0 -1
- package/dist/animation/rig/solveIk.js +0 -103
- package/dist/animation/rig/solveIk.js.map +0 -1
- package/dist/animation/rig/types.js +0 -12
- package/dist/animation/rig/types.js.map +0 -1
- package/dist/animation/slew.js +0 -27
- package/dist/animation/slew.js.map +0 -1
- package/dist/animation/stagger.js +0 -138
- package/dist/animation/stagger.js.map +0 -1
- package/dist/animation/timeline/booking.js +0 -106
- package/dist/animation/timeline/booking.js.map +0 -1
- package/dist/animation/timeline/createTimeline.js +0 -116
- package/dist/animation/timeline/createTimeline.js.map +0 -1
- package/dist/animation/timeline/sampleTrack.js +0 -71
- package/dist/animation/timeline/sampleTrack.js.map +0 -1
- package/dist/animation/useAnimator.js +0 -378
- package/dist/animation/useAnimator.js.map +0 -1
- package/dist/builtins-C-VgUlWI.d.ts +0 -4514
- package/dist/canvas/MinimapCanvas.js +0 -139
- package/dist/canvas/MinimapCanvas.js.map +0 -1
- package/dist/canvas/deps/poseComposition.js +0 -11
- package/dist/canvas/deps/poseComposition.js.map +0 -1
- package/dist/canvas/minimapMath.js +0 -80
- package/dist/canvas/minimapMath.js.map +0 -1
- package/dist/canvas/toolPreview.js +0 -39
- package/dist/canvas/toolPreview.js.map +0 -1
- package/dist/core/adapters/arrayAdapter.js +0 -85
- package/dist/core/adapters/arrayAdapter.js.map +0 -1
- package/dist/core/adapters/useArrayAdapter.js +0 -13
- package/dist/core/adapters/useArrayAdapter.js.map +0 -1
- package/dist/core/fillInPoseFrame.js +0 -102
- package/dist/core/fillInPoseFrame.js.map +0 -1
- package/dist/core/geometry/poseRotation.js +0 -58
- package/dist/core/geometry/poseRotation.js.map +0 -1
- package/dist/core/gradient.js +0 -136
- package/dist/core/gradient.js.map +0 -1
- package/dist/core/isPlainObject.js.map +0 -1
- package/dist/core/markerInset.js +0 -24
- package/dist/core/markerInset.js.map +0 -1
- package/dist/core/mixed.js +0 -6
- package/dist/core/mixed.js.map +0 -1
- package/dist/core/paintKinds.js +0 -156
- package/dist/core/paintKinds.js.map +0 -1
- package/dist/core/strokeMarkerShapes.js +0 -139
- package/dist/core/strokeMarkerShapes.js.map +0 -1
- package/dist/core/strokeMarkers.js +0 -28
- package/dist/core/strokeMarkers.js.map +0 -1
- package/dist/core/viewport/meanScale.js +0 -8
- package/dist/core/viewport/meanScale.js.map +0 -1
- package/dist/core/viewport/pxExtent.js +0 -42
- package/dist/core/viewport/pxExtent.js.map +0 -1
- package/dist/debug/flag.js.map +0 -1
- package/dist/features/cursor/paintedCursorLayer.js.map +0 -1
- package/dist/features/focus/gateLayer.js +0 -14
- package/dist/features/focus/gateLayer.js.map +0 -1
- package/dist/features/focus/useCanvasFocus.js +0 -29
- package/dist/features/focus/useCanvasFocus.js.map +0 -1
- package/dist/features/groups/children.js.map +0 -1
- package/dist/features/groups/composePose.js.map +0 -1
- package/dist/features/groups/nestedHit.js.map +0 -1
- package/dist/features/groups/unionOfChildren.js.map +0 -1
- package/dist/features/images/imageCache.js +0 -94
- package/dist/features/images/imageCache.js.map +0 -1
- package/dist/features/ingestion/index.js +0 -8
- package/dist/features/meshPaint/bake.js +0 -79
- package/dist/features/meshPaint/bake.js.map +0 -1
- package/dist/features/meshPaint/bakeCache.js +0 -59
- package/dist/features/meshPaint/bakeCache.js.map +0 -1
- package/dist/features/meshPaint/handles.js +0 -86
- package/dist/features/meshPaint/handles.js.map +0 -1
- package/dist/features/meshPaint/lazyKind.js.map +0 -1
- package/dist/features/meshPaint/meshPaint.js +0 -236
- package/dist/features/meshPaint/meshPaint.js.map +0 -1
- package/dist/features/meshPaint/meshShader.js +0 -6
- package/dist/features/meshPaint/meshShader.js.map +0 -1
- package/dist/features/meshPaint/register.js +0 -7
- package/dist/features/meshPaint/register.js.map +0 -1
- package/dist/features/meshPaint/surface.js +0 -110
- package/dist/features/meshPaint/surface.js.map +0 -1
- package/dist/features/minimap/actions.js +0 -53
- package/dist/features/minimap/actions.js.map +0 -1
- package/dist/features/minimap/createMinimapContribution.js +0 -96
- package/dist/features/minimap/createMinimapContribution.js.map +0 -1
- package/dist/features/minimap/layers.js +0 -103
- package/dist/features/minimap/layers.js.map +0 -1
- package/dist/features/overlays/useNodeOverlayFrame.js +0 -103
- package/dist/features/overlays/useNodeOverlayFrame.js.map +0 -1
- package/dist/features/parallax/createParallaxLayer.js +0 -26
- package/dist/features/parallax/createParallaxLayer.js.map +0 -1
- package/dist/features/parallax/createParallaxPlane.js +0 -26
- package/dist/features/parallax/createParallaxPlane.js.map +0 -1
- package/dist/features/paths/anchorEdits.js +0 -156
- package/dist/features/paths/anchorEdits.js.map +0 -1
- package/dist/features/paths/anchors.js +0 -154
- package/dist/features/paths/anchors.js.map +0 -1
- package/dist/features/paths/booleans.js +0 -2
- package/dist/features/paths/markerCommands.js +0 -148
- package/dist/features/paths/markerCommands.js.map +0 -1
- package/dist/features/paths/markerSites.js +0 -59
- package/dist/features/paths/markerSites.js.map +0 -1
- package/dist/features/paths/markers.js +0 -95
- package/dist/features/paths/markers.js.map +0 -1
- package/dist/features/paths/nearestAnchor.js +0 -36
- package/dist/features/paths/nearestAnchor.js.map +0 -1
- package/dist/features/paths/pathInWorld.js +0 -41
- package/dist/features/paths/pathInWorld.js.map +0 -1
- package/dist/features/paths/poseDescriptor.js +0 -39
- package/dist/features/paths/poseDescriptor.js.map +0 -1
- package/dist/features/paths/tessellate/dash.js +0 -52
- package/dist/features/paths/tessellate/dash.js.map +0 -1
- package/dist/features/paths/tessellate/insets.js +0 -32
- package/dist/features/paths/tessellate/insets.js.map +0 -1
- package/dist/features/paths/tessellate/metric.js +0 -72
- package/dist/features/paths/tessellate/metric.js.map +0 -1
- package/dist/features/paths/tessellate/stroke.js +0 -170
- package/dist/features/paths/tessellate/stroke.js.map +0 -1
- package/dist/features/paths/tessellate/vertexWidths.js +0 -32
- package/dist/features/paths/tessellate/vertexWidths.js.map +0 -1
- package/dist/features/patterns/index.js +0 -23
- package/dist/features/patterns/index.js.map +0 -1
- package/dist/features/patterns/patterns-builtin.js +0 -38
- package/dist/features/patterns/patterns-builtin.js.map +0 -1
- package/dist/features/patterns/resolveSpec.js +0 -57
- package/dist/features/patterns/resolveSpec.js.map +0 -1
- package/dist/features/patterns/tileGeometry.js +0 -158
- package/dist/features/patterns/tileGeometry.js.map +0 -1
- package/dist/features/pointer/PointerContext.js +0 -45
- package/dist/features/pointer/PointerContext.js.map +0 -1
- package/dist/features/selection/SelectionContext.js +0 -46
- package/dist/features/selection/SelectionContext.js.map +0 -1
- package/dist/features/simulation/createSimulation.js +0 -61
- package/dist/features/simulation/createSimulation.js.map +0 -1
- package/dist/features/simulation/types.js +0 -6
- package/dist/features/simulation/types.js.map +0 -1
- package/dist/features/simulation/useSimulation.js +0 -74
- package/dist/features/simulation/useSimulation.js.map +0 -1
- package/dist/features/text/domRuns.js +0 -258
- package/dist/features/text/domRuns.js.map +0 -1
- package/dist/features/text/fitTextPose.js +0 -38
- package/dist/features/text/fitTextPose.js.map +0 -1
- package/dist/features/text/hitTest.js +0 -45
- package/dist/features/text/hitTest.js.map +0 -1
- package/dist/features/text/renderLabel.js +0 -14
- package/dist/features/text/renderLabel.js.map +0 -1
- package/dist/features/text/runs/effectiveRangeStyle.js +0 -66
- package/dist/features/text/runs/effectiveRangeStyle.js.map +0 -1
- package/dist/features/text/runs/flagRange.js +0 -53
- package/dist/features/text/runs/flagRange.js.map +0 -1
- package/dist/features/text/runs/rangeStyle.js +0 -135
- package/dist/features/text/runs/rangeStyle.js.map +0 -1
- package/dist/features/text/textCommand.js +0 -59
- package/dist/features/text/textCommand.js.map +0 -1
- package/dist/features/text/textToPath.js +0 -181
- package/dist/features/text/textToPath.js.map +0 -1
- package/dist/features/text/useTextEdit.js +0 -467
- package/dist/features/text/useTextEdit.js.map +0 -1
- package/dist/features/tiling/createTiledLayer.js +0 -63
- package/dist/features/tiling/createTiledLayer.js.map +0 -1
- package/dist/features/tiling/tiledProject.js +0 -14
- package/dist/features/tiling/tiledProject.js.map +0 -1
- package/dist/interactions/actions/clone/behaviors/cloneByAltDrag.js +0 -26
- package/dist/interactions/actions/clone/behaviors/cloneByAltDrag.js.map +0 -1
- package/dist/interactions/actions/defaults/align.js.map +0 -1
- package/dist/interactions/actions/defaults/booleans.js +0 -52
- package/dist/interactions/actions/defaults/booleans.js.map +0 -1
- package/dist/interactions/actions/defaults/clipboard.js.map +0 -1
- package/dist/interactions/actions/defaults/clone.js +0 -107
- package/dist/interactions/actions/defaults/clone.js.map +0 -1
- package/dist/interactions/actions/defaults/createOutlines.js +0 -47
- package/dist/interactions/actions/defaults/createOutlines.js.map +0 -1
- package/dist/interactions/actions/defaults/distribute.js +0 -66
- package/dist/interactions/actions/defaults/distribute.js.map +0 -1
- package/dist/interactions/actions/defaults/editAnchors.js.map +0 -1
- package/dist/interactions/actions/defaults/flip.js +0 -119
- package/dist/interactions/actions/defaults/flip.js.map +0 -1
- package/dist/interactions/actions/defaults/freshNodeId.js +0 -10
- package/dist/interactions/actions/defaults/freshNodeId.js.map +0 -1
- package/dist/interactions/actions/defaults/insert.js +0 -288
- package/dist/interactions/actions/defaults/insert.js.map +0 -1
- package/dist/interactions/actions/defaults/lassoSelect.js +0 -156
- package/dist/interactions/actions/defaults/lassoSelect.js.map +0 -1
- package/dist/interactions/actions/defaults/move.js +0 -760
- package/dist/interactions/actions/defaults/move.js.map +0 -1
- package/dist/interactions/actions/defaults/resize.js +0 -335
- package/dist/interactions/actions/defaults/resize.js.map +0 -1
- package/dist/interactions/actions/defaults/rotate.js +0 -184
- package/dist/interactions/actions/defaults/rotate.js.map +0 -1
- package/dist/interactions/actions/previewOverrides.js +0 -25
- package/dist/interactions/actions/previewOverrides.js.map +0 -1
- package/dist/interactions/actions/resize/autoPoseDescriptor.js.map +0 -1
- package/dist/math-Drrw4ewZ.d.ts +0 -160
- package/dist/registerProgram-BMZRDgrh.d.ts +0 -197
- package/dist/renderer/DrawCommand.js +0 -6
- package/dist/renderer/DrawCommand.js.map +0 -1
- package/dist/renderer/WeaselRenderer.js +0 -331
- package/dist/renderer/WeaselRenderer.js.map +0 -1
- package/dist/renderer/batchClip.js +0 -46
- package/dist/renderer/batchClip.js.map +0 -1
- package/dist/renderer/cache/GLImageCache.js +0 -64
- package/dist/renderer/cache/GLImageCache.js.map +0 -1
- package/dist/renderer/cache/GLMeshCache.js +0 -102
- package/dist/renderer/cache/GLMeshCache.js.map +0 -1
- package/dist/renderer/cache/GLTextureCache.js +0 -51
- package/dist/renderer/cache/GLTextureCache.js.map +0 -1
- package/dist/renderer/cache/GradientRampAtlas.js +0 -82
- package/dist/renderer/cache/GradientRampAtlas.js.map +0 -1
- package/dist/renderer/cache/cache.js +0 -13
- package/dist/renderer/cache/cache.js.map +0 -1
- package/dist/renderer/cache/markerCommandCache.js +0 -63
- package/dist/renderer/cache/markerCommandCache.js.map +0 -1
- package/dist/renderer/cache/outlineMeshCache.js +0 -15
- package/dist/renderer/cache/outlineMeshCache.js.map +0 -1
- package/dist/renderer/cache/outlineStrokeMeshCache.js +0 -36
- package/dist/renderer/cache/outlineStrokeMeshCache.js.map +0 -1
- package/dist/renderer/cache/strokeMeshCache.js +0 -55
- package/dist/renderer/cache/strokeMeshCache.js.map +0 -1
- package/dist/renderer/cullDrawCommands.js +0 -90
- package/dist/renderer/cullDrawCommands.js.map +0 -1
- package/dist/renderer/draw.js +0 -1135
- package/dist/renderer/draw.js.map +0 -1
- package/dist/renderer/drawBatch.js +0 -198
- package/dist/renderer/drawBatch.js.map +0 -1
- package/dist/renderer/effects/EffectTargets.js +0 -45
- package/dist/renderer/effects/EffectTargets.js.map +0 -1
- package/dist/renderer/effects/builtins.js +0 -31
- package/dist/renderer/effects/builtins.js.map +0 -1
- package/dist/renderer/effects/composite.js +0 -9
- package/dist/renderer/effects/composite.js.map +0 -1
- package/dist/renderer/effects/effectPrelude.js +0 -10
- package/dist/renderer/effects/effectPrelude.js.map +0 -1
- package/dist/renderer/effects/types.js +0 -10
- package/dist/renderer/effects/types.js.map +0 -1
- package/dist/renderer/glyphOutlineMesh.js +0 -67
- package/dist/renderer/glyphOutlineMesh.js.map +0 -1
- package/dist/renderer/index.js +0 -19
- package/dist/renderer/math/color.js +0 -341
- package/dist/renderer/math/color.js.map +0 -1
- package/dist/renderer/math/mat3.js +0 -76
- package/dist/renderer/math/mat3.js.map +0 -1
- package/dist/renderer/math/patternSpace.js +0 -22
- package/dist/renderer/math/patternSpace.js.map +0 -1
- package/dist/renderer/math/viewToMat3.js +0 -19
- package/dist/renderer/math/viewToMat3.js.map +0 -1
- package/dist/renderer/paintResources.js +0 -18
- package/dist/renderer/paintResources.js.map +0 -1
- package/dist/renderer/paintScratch.js +0 -37
- package/dist/renderer/paintScratch.js.map +0 -1
- package/dist/renderer/shaders/ShaderProgram.js +0 -74
- package/dist/renderer/shaders/ShaderProgram.js.map +0 -1
- package/dist/renderer/shaders/batchFill.js +0 -119
- package/dist/renderer/shaders/batchFill.js.map +0 -1
- package/dist/renderer/shaders/customPrelude.js +0 -34
- package/dist/renderer/shaders/customPrelude.js.map +0 -1
- package/dist/renderer/shaders/extractUniformNames.js +0 -184
- package/dist/renderer/shaders/extractUniformNames.js.map +0 -1
- package/dist/renderer/shaders/glyphPaint.js +0 -61
- package/dist/renderer/shaders/glyphPaint.js.map +0 -1
- package/dist/renderer/shaders/gradFill.js +0 -30
- package/dist/renderer/shaders/gradFill.js.map +0 -1
- package/dist/renderer/shaders/imageFill.js +0 -14
- package/dist/renderer/shaders/imageFill.js.map +0 -1
- package/dist/renderer/shaders/pathFill.js +0 -13
- package/dist/renderer/shaders/pathFill.js.map +0 -1
- package/dist/renderer/shaders/patternFill.js +0 -24
- package/dist/renderer/shaders/patternFill.js.map +0 -1
- package/dist/renderer/shaders/registerProgram.js +0 -18
- package/dist/renderer/shaders/registerProgram.js.map +0 -1
- package/dist/renderer/spriteSheet.js +0 -14
- package/dist/renderer/spriteSheet.js.map +0 -1
- package/dist/renderer/state/GroupState.js +0 -77
- package/dist/renderer/state/GroupState.js.map +0 -1
- package/dist/renderer/strokeLengths.js +0 -50
- package/dist/renderer/strokeLengths.js.map +0 -1
- package/dist/renderer/syntheticItalic.js +0 -6
- package/dist/renderer/syntheticItalic.js.map +0 -1
- package/dist/renderer/textures/registerTexture.js +0 -14
- package/dist/renderer/textures/registerTexture.js.map +0 -1
- package/dist/scheduling/useVisibleRaf.js +0 -69
- package/dist/scheduling/useVisibleRaf.js.map +0 -1
- package/dist/test-seams-CuIxe0xY.d.ts +0 -356
- package/dist/tools/prefs.js +0 -62
- package/dist/tools/prefs.js.map +0 -1
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { IDENTITY_POSE_COMPOSITION as e } from "../../../core/scene/composeFrame.js";
|
|
2
|
-
import {
|
|
3
|
-
import {
|
|
2
|
+
import { RECT_POSE_DESCRIPTOR as t, translatePoseViaDescriptor as n, visualBoundsViaDescriptor as r } from "../../../core/geometry/poseDescriptor.js";
|
|
3
|
+
import { createTransformOp as i } from "../../../core/ops/transform.js";
|
|
4
4
|
import { poseFrame as a } from "../poseFrame.js";
|
|
5
5
|
import { dispatchApplyBatch as o } from "../../../core/applyOps.js";
|
|
6
6
|
import { planDistribute as s } from "./plan.js";
|
|
@@ -12,7 +12,7 @@ function u(u, d = {}) {
|
|
|
12
12
|
return { distribute: c((c, l) => {
|
|
13
13
|
let u = f.current, d = p.current, m = u.getSelection();
|
|
14
14
|
if (m.length < 3) return;
|
|
15
|
-
let h = d.geometry ??
|
|
15
|
+
let h = d.geometry ?? t, g = l ?? d.defaultMode ?? "centers", _ = a({
|
|
16
16
|
getPose: (e) => u.getPose(e),
|
|
17
17
|
getParent: (e) => u.getParent?.(e) ?? null
|
|
18
18
|
}, d.composition ?? e), v = m.map((e) => {
|
|
@@ -20,17 +20,17 @@ function u(u, d = {}) {
|
|
|
20
20
|
return {
|
|
21
21
|
id: e,
|
|
22
22
|
pose: t,
|
|
23
|
-
b:
|
|
23
|
+
b: r(t, h)
|
|
24
24
|
};
|
|
25
25
|
}), y = s(v.map((e) => e.b), c, g), b = [];
|
|
26
26
|
for (let e = 0; e < v.length; e++) {
|
|
27
|
-
let
|
|
28
|
-
if (
|
|
29
|
-
let a = c === "x" ?
|
|
30
|
-
b.push(
|
|
31
|
-
id:
|
|
32
|
-
from: u.getPose(
|
|
33
|
-
to: _.local(
|
|
27
|
+
let t = v[e], r = y[e] - (c === "x" ? t.b.x : t.b.y);
|
|
28
|
+
if (r === 0) continue;
|
|
29
|
+
let a = c === "x" ? r : 0, o = c === "y" ? r : 0, s = n(t.pose, a, o, h);
|
|
30
|
+
b.push(i({
|
|
31
|
+
id: t.id,
|
|
32
|
+
from: u.getPose(t.id),
|
|
33
|
+
to: _.local(t.id, s)
|
|
34
34
|
}));
|
|
35
35
|
}
|
|
36
36
|
b.length !== 0 && o(u, b, d.label ?? "Distribute");
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"distribute.js","names":["useDistribute","adapterRef","useLatest","adapter","optsRef","options","useCallback","a","o","sel","geom","RECT_POSE_DESCRIPTOR","m","mode","frame","poseFrame","id","IDENTITY_POSE_COMPOSITION","items","pose","visualBoundsViaDescriptor","targets","planDistribute","it","axis","ops","i","delta","dx","dy","to","translatePoseViaDescriptor","createTransformOp","dispatchApplyBatch"],"sources":["../../../../src/interactions/actions/distribute/distribute.ts"],"sourcesContent":["import { useCallback } from 'react';\nimport { useLatest } from '@weasel-js/react';\nimport { createTransformOp } from 'core/ops/transform';\nimport type { Op } from 'core/ops/types';\nimport { dispatchApplyBatch } from 'core/applyOps';\nimport type { NodeId } from 'core/scene/types';\nimport { RECT_POSE_DESCRIPTOR, type PoseDescriptor } from '../resize/geometry';\nimport { translatePoseViaDescriptor, visualBoundsViaDescriptor } from '../align/align';\nimport { planDistribute } from './plan';\nimport { poseFrame } from '../poseFrame';\nimport { IDENTITY_POSE_COMPOSITION, type PoseComposition } from '
|
|
1
|
+
{"version":3,"file":"distribute.js","names":["useDistribute","adapterRef","useLatest","adapter","optsRef","options","useCallback","a","o","sel","geom","RECT_POSE_DESCRIPTOR","m","mode","frame","poseFrame","id","IDENTITY_POSE_COMPOSITION","items","pose","visualBoundsViaDescriptor","targets","planDistribute","it","axis","ops","i","delta","dx","dy","to","translatePoseViaDescriptor","createTransformOp","dispatchApplyBatch"],"sources":["../../../../src/interactions/actions/distribute/distribute.ts"],"sourcesContent":["import { useCallback } from 'react';\nimport { useLatest } from '@weasel-js/react';\nimport { createTransformOp } from 'core/ops/transform';\nimport type { Op } from 'core/ops/types';\nimport { dispatchApplyBatch } from 'core/applyOps';\nimport type { NodeId } from 'core/scene/types';\nimport { RECT_POSE_DESCRIPTOR, type PoseDescriptor } from '../resize/geometry';\nimport { translatePoseViaDescriptor, visualBoundsViaDescriptor } from '../align/align';\nimport { planDistribute } from './plan';\nimport { poseFrame } from '../poseFrame';\nimport { IDENTITY_POSE_COMPOSITION, type PoseComposition } from 'core/scene/composePose';\n\n/** Axis along which selection is distributed. `'x'` spreads horizontally. */\nexport type DistributeAxis = 'x' | 'y';\n\n/** `'centers'` spaces centers equally; `'gaps'` makes the gap between\n * consecutive items equal. Both measure a rotated item by its ink extent.\n * Endpoints stay put in both modes. */\nexport type DistributeMode = 'centers' | 'gaps';\n\n/** Adapter for `useDistribute`. */\nexport interface DistributeAdapter<TPose> {\n getSelection(): NodeId[];\n /** The pose as stored — local to the node's parent. */\n getPose(id: NodeId): TPose;\n /** The parent chain, for a scene whose container poses define a frame.\n * Omit it (or leave `composition` unset) for an absolute-pose scene. */\n getParent?(id: NodeId): NodeId | null;\n applyOps?(ops: Op[], label?: string): void;\n}\n\n/** Options for `useDistribute`. */\nexport interface UseDistributeOptions<TPose> {\n /** Projection between `TPose` and bounds. Defaults to `RECT_POSE_DESCRIPTOR`\n * for `{x,y,width,height}` poses. */\n geometry?: PoseDescriptor<TPose>;\n /** Default mode when `distribute(axis)` is called without one. Default 'centers'. */\n defaultMode?: DistributeMode;\n /** Label passed to applyOps. Default 'Distribute'. */\n label?: string;\n /** How local poses fold up to world. Default IDENTITY, where the two are\n * the same value and the spread runs entirely in stored coordinates. */\n composition?: PoseComposition<TPose>;\n}\n\n/** Return shape of `useDistribute`. */\nexport interface UseDistributeReturn {\n /** Imperative trigger. No-op when fewer than 3 items selected. */\n distribute(axis: DistributeAxis, mode?: DistributeMode): void;\n}\n\n/** Distribute the current multi-selection along `axis`. Requires ≥3 items;\n * no-op otherwise. Endpoints (min and max along the axis) stay put; the\n * remaining items are repositioned. Single batch — one undo step.\n *\n * The span being divided is a world span: bounds are measured and translated\n * in world, and each result is stored back in its own parent's frame. */\nexport function useDistribute<TPose>(\n adapter: DistributeAdapter<TPose>,\n options: UseDistributeOptions<TPose> = {},\n): UseDistributeReturn {\n const adapterRef = useLatest(adapter);\n const optsRef = useLatest(options);\n\n const distribute = useCallback((axis: DistributeAxis, mode?: DistributeMode): void => {\n const a = adapterRef.current;\n const o = optsRef.current;\n const sel = a.getSelection();\n if (sel.length < 3) return;\n const geom =\n o.geometry ??\n (RECT_POSE_DESCRIPTOR as unknown as PoseDescriptor<TPose>);\n const m = mode ?? o.defaultMode ?? 'centers';\n\n const frame = poseFrame<TPose>(\n {\n getPose: (id) => a.getPose(id as NodeId),\n getParent: (id) => (a.getParent?.(id as NodeId) ?? null) as string | null,\n },\n o.composition ?? (IDENTITY_POSE_COMPOSITION as PoseComposition<TPose>),\n );\n const items = sel.map((id) => {\n const pose = frame.world(id);\n return { id, pose, b: visualBoundsViaDescriptor(pose, geom) };\n });\n const targets = planDistribute(items.map((it) => it.b), axis, m);\n\n const ops: Op[] = [];\n for (let i = 0; i < items.length; i++) {\n const it = items[i];\n const delta = targets[i] - (axis === 'x' ? it.b.x : it.b.y);\n if (delta === 0) continue;\n const dx = axis === 'x' ? delta : 0;\n const dy = axis === 'y' ? delta : 0;\n const to = translatePoseViaDescriptor(it.pose, dx, dy, geom);\n ops.push(createTransformOp<TPose>({\n id: it.id,\n from: a.getPose(it.id),\n to: frame.local(it.id, to),\n }));\n }\n if (ops.length === 0) return;\n dispatchApplyBatch(a, ops, o.label ?? 'Distribute');\n }, [adapterRef, optsRef]);\n\n return { distribute };\n}\n"],"mappings":";;;;;;;;;AAyDA,SAAgBA,EACd,GACA,IAAuC,CAAC,GACnB;CACrB,IAAMC,IAAaC,EAAUC,CAAO,GAC9BC,IAAUF,EAAUG,CAAO;CA2CjC,OAAO,EAAE,YAzCUC,GAAa,GAAsB,MAAgC;EACpF,IAAMC,IAAIN,EAAW,SACfO,IAAIJ,EAAQ,SACZK,IAAMF,EAAE,aAAa;EAC3B,IAAIE,EAAI,SAAS,GAAG;EACpB,IAAMC,IACJF,EAAE,YACDG,GACGC,IAAIC,KAAQL,EAAE,eAAe,WAE7BM,IAAQC,EACZ;GACE,UAAU,MAAOR,EAAE,QAAQS,CAAY;GACvC,YAAY,MAAQT,EAAE,YAAYS,CAAY,KAAK;EACrD,GACAR,EAAE,eAAgBS,CACpB,GACMC,IAAQT,EAAI,KAAK,MAAO;GAC5B,IAAMU,IAAOL,EAAM,MAAME,CAAE;GAC3B,OAAO;IAAE;IAAI;IAAM,GAAGI,EAA0BD,GAAMT,CAAI;GAAE;EAC9D,CAAC,GACKW,IAAUC,EAAeJ,EAAM,KAAK,MAAOK,EAAG,CAAC,GAAGC,GAAMZ,CAAC,GAEzDa,IAAY,CAAC;EACnB,KAAK,IAAIC,IAAI,GAAGA,IAAIR,EAAM,QAAQ,KAAK;GACrC,IAAMK,IAAKL,EAAMQ,IACXC,IAAQN,EAAQK,MAAMF,MAAS,MAAMD,EAAG,EAAE,IAAIA,EAAG,EAAE;GACzD,IAAII,MAAU,GAAG;GACjB,IAAMC,IAAKJ,MAAS,MAAMG,IAAQ,GAC5BE,IAAKL,MAAS,MAAMG,IAAQ,GAC5BG,IAAKC,EAA2BR,EAAG,MAAMK,GAAIC,GAAInB,CAAI;GAC3D,EAAI,KAAKsB,EAAyB;IAChC,IAAIT,EAAG;IACP,MAAMhB,EAAE,QAAQgB,EAAG,EAAE;IACrB,IAAIT,EAAM,MAAMS,EAAG,IAAIO,CAAE;GAC3B,CAAC,CAAC;EACJ;EACA,AAAIL,EAAI,WAAW,KACnBQ,EAAmB1B,GAAGkB,GAAKjB,EAAE,SAAS,YAAY;CACpD,GAAG,CAACP,GAAYG,CAAO,CAEd,EAAW;AACtB"}
|
|
@@ -1,9 +1,7 @@
|
|
|
1
1
|
import { editingLayer as e, inPlane as t } from "../planeInput.js";
|
|
2
|
-
import {
|
|
3
|
-
import { anchorAt as r, editAnchorSet as i, moveHandleTo as a, translateAnchorBy as o } from "../../../features/paths/anchorEdits.js";
|
|
4
|
-
import { worldEditToStorage as s } from "../../../features/paths/pathInWorld.js";
|
|
2
|
+
import { anchorAt as n, editAnchorSet as r, moveHandleTo as i, pathToAnchors as a, translateAnchorBy as o, worldEditToStorage as s } from "@weasel-js/geom";
|
|
5
3
|
import { isAnchorOrControl as c } from "@weasel-js/routing";
|
|
6
|
-
//#region src/interactions/actions/
|
|
4
|
+
//#region src/interactions/actions/edit-anchors/action.ts
|
|
7
5
|
function l(e) {
|
|
8
6
|
let t = e.match(/^(anchor|controlIn|controlOut):(\d+)$/);
|
|
9
7
|
return t ? {
|
|
@@ -40,7 +38,7 @@ var d = t({
|
|
|
40
38
|
if (!m || m.kind !== "polygon") return {};
|
|
41
39
|
let h = c.getStorageKind(p);
|
|
42
40
|
if (h !== "pose" && h !== "data") return {};
|
|
43
|
-
let g =
|
|
41
|
+
let g = a(m), _ = n(g, f.anchorIndex);
|
|
44
42
|
if (!_ || f.part === "controlIn" && !_.inHandle || f.part === "controlOut" && !_.outHandle) return {};
|
|
45
43
|
let v = [f.anchorIndex];
|
|
46
44
|
if (f.part === "anchor") {
|
|
@@ -66,12 +64,12 @@ var d = t({
|
|
|
66
64
|
onMove(e) {
|
|
67
65
|
if (S.part === "anchor") {
|
|
68
66
|
if (S.dragging.length === 0) return;
|
|
69
|
-
let t = e.world.x - S.anchorOrigin.x, n = e.world.y - S.anchorOrigin.y,
|
|
67
|
+
let t = e.world.x - S.anchorOrigin.x, n = e.world.y - S.anchorOrigin.y, i = r(S.originPose, (e) => {
|
|
70
68
|
for (let r of S.dragging) o(e, r, t, n);
|
|
71
69
|
});
|
|
72
|
-
|
|
70
|
+
i && (S.currentPose = i);
|
|
73
71
|
} else {
|
|
74
|
-
let t = S.part === "controlIn" ? "in" : "out", n =
|
|
72
|
+
let t = S.part === "controlIn" ? "in" : "out", n = r(S.originPose, (n) => i(n, S.anchorIndex, t, e.world.x, e.world.y, e.modifiers.alt));
|
|
75
73
|
n && (S.currentPose = n);
|
|
76
74
|
}
|
|
77
75
|
C = !0;
|
|
@@ -97,4 +95,4 @@ var d = t({
|
|
|
97
95
|
//#endregion
|
|
98
96
|
export { d as editAnchorsAction, u as selectionAfterAnchorPress };
|
|
99
97
|
|
|
100
|
-
//# sourceMappingURL=
|
|
98
|
+
//# sourceMappingURL=action.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"action.js","names":["parseAnchorAffordance","m","kind","selectionAfterAnchorPress","additive","next","current","anchorIndex","editAnchorsAction","inPlane","isAnchorOrControl","dep","ctx","affordance","anchorInfo","worldPath","editingId","storageKind","decoded","pathToAnchors","origin","anchorAt","dragging","nodeShape","originRectPose","originData","scratch","active","dx","moveCtx","dy","editAnchorSet","flat","set","side","moveHandleTo","reason","id","worldEditToStorage","editingLayer"],"sources":["../../../../src/interactions/actions/edit-anchors/action.ts"],"sourcesContent":["/**\n * `editAnchorsAction` — ongoing Action descriptor for editing polygon anchors.\n *\n * - **Press** selects. Bare press replaces the anchor selection; Shift\n * toggles the pressed anchor in or out of it. Pressing an anchor that\n * is already part of a multi-anchor selection leaves the selection\n * alone, so you can grab a set and move it.\n * - **Drag** then moves whatever the press left selected — one anchor,\n * or every selected anchor together.\n * - **Dragging a control handle** moves just that handle, mirroring the\n * opposite one while the anchor is smooth. Alt breaks the mirror.\n *\n * Selection lives on the `editAnchors` dep (flat anchor indices) rather\n * than in this handle's scratch, because the keyboard actions\n * (`nudgeAnchors`, `deleteAnchors`) and the overlay all need to read it\n * between gestures.\n *\n * Operational when the consumer wires the `editAnchors` dep, and\n * `buildAffordanceAt` with a `getAnchorState` thunk so the dispatcher\n * classifies anchor/control-handle hits as `anchor:N`, `controlIn:N`, or\n * `controlOut:N` affordances on pointerdown. On any other affordance `start`\n * returns `{}` so other bindings can handle the drag.\n */\n\nimport type { Action } from '@weasel-js/routing';\nimport type { InvocationCtx, OngoingHandle } from '@weasel-js/routing';\nimport type { EditAnchorsDep } from '../depSchema';\nimport { isAnchorOrControl } from '@weasel-js/routing';\nimport {\n anchorAt,\n editAnchorSet,\n moveHandleTo,\n translateAnchorBy,\n type AnchorSet,\n} from '@weasel-js/geom';\nimport { pathToAnchors, type PolygonPath } from '@weasel-js/geom';\nimport { worldEditToStorage } from '@weasel-js/geom';\nimport { inPlane, editingLayer } from '../planeInput';\n\n/**\n * Parse an anchor affordance kind — `'anchor:N'` | `'controlIn:N'` |\n * `'controlOut:N'`, where N is the flat anchor index — or `null` when the\n * affordance is not an anchor kind.\n */\nfunction parseAnchorAffordance(\n kind: string,\n): { anchorIndex: number; part: 'anchor' | 'controlIn' | 'controlOut' } | null {\n const m = kind.match(/^(anchor|controlIn|controlOut):(\\d+)$/);\n if (!m) return null;\n return {\n anchorIndex: parseInt(m[2], 10),\n part: m[1] as 'anchor' | 'controlIn' | 'controlOut',\n };\n}\n\n/**\n * Resolve what a press on `anchorIndex` should leave selected.\n *\n * Shift toggles. A bare press on an anchor that's already part of the\n * selection keeps the selection intact (so the drag moves the whole set);\n * a bare press anywhere else collapses to just that anchor.\n */\nexport function selectionAfterAnchorPress(\n current: ReadonlySet<number>,\n anchorIndex: number,\n additive: boolean,\n): Set<number> {\n if (additive) {\n const next = new Set(current);\n if (next.has(anchorIndex)) next.delete(anchorIndex);\n else next.add(anchorIndex);\n return next;\n }\n if (current.has(anchorIndex) && current.size > 1) return new Set(current);\n return new Set([anchorIndex]);\n}\n\ninterface EditAnchorsScratch {\n dep: EditAnchorsDep;\n id: string;\n anchorIndex: number;\n /** `'anchor'` drags on-curve points (and their handles) by a delta.\n * `'controlIn'` / `'controlOut'` drag one control point to an absolute\n * world coord. */\n part: 'anchor' | 'controlIn' | 'controlOut';\n /** Anchors this drag moves — the pressed one, or the whole anchor\n * selection when the press landed inside it. Flat indices. */\n dragging: readonly number[];\n /** World position of the pressed anchor at drag start; the drag delta is\n * measured from here rather than accumulated per move, so the geometry\n * is always derived from `originPose` in one step. */\n anchorOrigin: { x: number; y: number };\n originPose: PolygonPath;\n currentPose: PolygonPath;\n /** Where the polygon lives on the node — drives which preview-ghost\n * axes the handle populates (`previewPose` only for pose-as-polygon,\n * `previewPose` + `previewData` for data.path). */\n storageKind: 'pose' | 'data';\n}\n\n/** Static descriptor for the `editAnchors` Action. */\nexport const editAnchorsAction: Action & { requires: string[] } = inPlane({\n id: 'editAnchors',\n label: 'Edit Anchors',\n defaultBinding: {\n kind: 'drag',\n // Only matches drags whose pointerdown hit an anchor or control handle.\n // Ties moveAction's `selected-body` on specificity and registers after\n // it, so move declines these presses in `start`.\n target: { kindOf: isAnchorOrControl },\n },\n eligible: { capability: 'edits-anchors' },\n requires: ['selection', 'editAnchors'],\n invoker: {\n timing: 'ongoing',\n start(ctx: InvocationCtx, _opts): OngoingHandle {\n const dep = ctx.deps.editAnchors;\n if (!dep) return {};\n\n const affordance = ctx.drag?.affordance;\n if (!affordance) {\n // No affordance hit → this drag doesn't target an anchor handle.\n // Let other bindings handle it (the handle returns {}, dispatcher moves on).\n return {};\n }\n\n const anchorInfo = parseAnchorAffordance(affordance.kind);\n if (!anchorInfo) {\n // Affordance is a non-anchor kind (e.g. resize handle, rotate handle).\n return {};\n }\n\n const { editingId } = dep;\n // World-coord polygon. For pose-as-polygon nodes this equals\n // node.pose; for data.path nodes it's pathInWorld-projected (translate +\n // rotation) so the anchor world coords match what the user clicked.\n const worldPath = dep.getEditablePath(editingId) as PolygonPath | undefined;\n if (!worldPath || worldPath.kind !== 'polygon') return {};\n const storageKind = dep.getStorageKind(editingId);\n if (storageKind !== 'pose' && storageKind !== 'data') return {};\n\n // Decode once to validate the affordance index against the actual\n // geometry and to read the press origin. A stale affordance (the\n // path changed between pointerdown and now) fails here rather than\n // silently editing whichever anchor now holds that index.\n const decoded = pathToAnchors(worldPath) as AnchorSet;\n const origin = anchorAt(decoded, anchorInfo.anchorIndex);\n if (!origin) return {};\n if (anchorInfo.part === 'controlIn' && !origin.inHandle) return {};\n if (anchorInfo.part === 'controlOut' && !origin.outHandle) return {};\n\n // --- Press semantics: selection updates immediately, before any move.\n let dragging: readonly number[] = [anchorInfo.anchorIndex];\n if (anchorInfo.part === 'anchor') {\n const next = selectionAfterAnchorPress(\n dep.selectedAnchors,\n anchorInfo.anchorIndex,\n ctx.modifiers.shift,\n );\n dep.setSelectedAnchors(next);\n // Shift-pressing an anchor OUT of the selection must not then drag\n // it; drag whatever the press left selected, intersected with the\n // pressed anchor's membership.\n dragging = next.has(anchorInfo.anchorIndex)\n ? [...next]\n : [];\n }\n\n // For data.path nodes, the original rect pose + data that previewPose /\n // previewData derive from, captured at start.\n const nodeShape = storageKind === 'data' ? dep.getNodeShape(editingId) : null;\n const originRectPose =\n nodeShape ? (nodeShape.pose as { x: number; y: number; width: number; height: number }) : undefined;\n const originData = nodeShape ? (nodeShape.data as object) : undefined;\n\n const scratch: EditAnchorsScratch = {\n dep,\n id: editingId,\n anchorIndex: anchorInfo.anchorIndex,\n part: anchorInfo.part,\n dragging,\n anchorOrigin: { x: origin.x, y: origin.y },\n originPose: worldPath,\n currentPose: worldPath,\n storageKind,\n };\n\n let active = false;\n\n return {\n kind: 'edit-anchors',\n onMove(moveCtx: InvocationCtx): void {\n if (scratch.part === 'anchor') {\n if (scratch.dragging.length === 0) return;\n const dx = moveCtx.world.x - scratch.anchorOrigin.x;\n const dy = moveCtx.world.y - scratch.anchorOrigin.y;\n const next = editAnchorSet(scratch.originPose, (set) => {\n for (const flat of scratch.dragging) translateAnchorBy(set, flat, dx, dy);\n });\n if (next) scratch.currentPose = next;\n } else {\n const side = scratch.part === 'controlIn' ? 'in' : 'out';\n const next = editAnchorSet(scratch.originPose, (set) =>\n moveHandleTo(\n set,\n scratch.anchorIndex,\n side,\n moveCtx.world.x,\n moveCtx.world.y,\n // Alt breaks the smooth mirror for this drag — read live so\n // the user can press or release Alt mid-drag.\n moveCtx.modifiers.alt,\n ),\n );\n if (next) scratch.currentPose = next;\n }\n active = true;\n },\n onEnd(_endCtx: InvocationCtx, reason: 'commit' | 'cancel'): void {\n active = false;\n if (reason === 'cancel') return;\n if (scratch.originPose === scratch.currentPose) return;\n scratch.dep.applyEdit(scratch.id, scratch.currentPose, 'Edit anchors');\n },\n previewIds: () => (active ? [scratch.id] : null),\n previewPose: (id: string): unknown | null => {\n if (!active || id !== scratch.id) return null;\n if (scratch.storageKind === 'pose') {\n // Pose IS the polygon — preview pose is the polygon itself.\n return scratch.currentPose;\n }\n // data.path: invert the world edit the same way the commit does, so\n // the preview ghost (which re-applies pose.rotation via the render\n // wrap) matches the committed result — no double-rotation.\n if (!originRectPose) return null;\n return worldEditToStorage(originRectPose, scratch.currentPose).pose;\n },\n previewData: (id: string): unknown | null => {\n if (!active || id !== scratch.id) return null;\n if (scratch.storageKind !== 'data') return null;\n if (!originData) return null;\n // Stored path is the unrotated, origin-aligned contour; the render\n // invariant `pathInWorld(stored, pose) === world` holds.\n const { path } = worldEditToStorage(originRectPose!, scratch.currentPose);\n return { ...originData, path };\n },\n };\n },\n },\n enabled: () => true,\n}, editingLayer);\n"],"mappings":"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"}
|
|
@@ -1,61 +1,64 @@
|
|
|
1
1
|
import { PATH_C as e, PATH_L as t, PATH_M as n, PATH_Q as r, PATH_Z as i, forEachSegment as a } from "@weasel-js/geom";
|
|
2
2
|
//#region src/interactions/actions/edit-anchors/geometry.ts
|
|
3
3
|
function o(o) {
|
|
4
|
-
let { commands:
|
|
4
|
+
let { commands: c, coords: l } = o, u = [], d = null, f = null, p = (e, t) => {
|
|
5
5
|
let n = {
|
|
6
|
-
anchorIndex:
|
|
7
|
-
x:
|
|
8
|
-
y:
|
|
6
|
+
anchorIndex: u.length,
|
|
7
|
+
x: l[e],
|
|
8
|
+
y: l[e + 1],
|
|
9
9
|
coordIndex: e,
|
|
10
10
|
...t ? { controlIn: t } : {}
|
|
11
11
|
};
|
|
12
|
-
|
|
12
|
+
u.push(n), d = n;
|
|
13
13
|
};
|
|
14
|
-
return a(
|
|
14
|
+
return a(c, l, (a, o) => {
|
|
15
15
|
switch (a) {
|
|
16
16
|
case n:
|
|
17
|
+
p(o), f = d;
|
|
18
|
+
break;
|
|
17
19
|
case t:
|
|
18
|
-
|
|
20
|
+
p(o);
|
|
19
21
|
break;
|
|
20
22
|
case e:
|
|
21
|
-
|
|
22
|
-
x:
|
|
23
|
-
y:
|
|
23
|
+
d && (d.controlOut = {
|
|
24
|
+
x: l[o],
|
|
25
|
+
y: l[o + 1],
|
|
24
26
|
coordIndex: o
|
|
25
|
-
}),
|
|
26
|
-
x:
|
|
27
|
-
y:
|
|
27
|
+
}), p(o + 4, {
|
|
28
|
+
x: l[o + 2],
|
|
29
|
+
y: l[o + 3],
|
|
28
30
|
coordIndex: o + 2
|
|
29
31
|
});
|
|
30
32
|
break;
|
|
31
33
|
case r:
|
|
32
|
-
|
|
33
|
-
x:
|
|
34
|
-
y:
|
|
34
|
+
d && (d.controlOut = {
|
|
35
|
+
x: l[o],
|
|
36
|
+
y: l[o + 1],
|
|
35
37
|
coordIndex: o
|
|
36
|
-
}),
|
|
37
|
-
x:
|
|
38
|
-
y:
|
|
38
|
+
}), p(o + 2, {
|
|
39
|
+
x: l[o],
|
|
40
|
+
y: l[o + 1],
|
|
39
41
|
coordIndex: o
|
|
40
42
|
});
|
|
41
43
|
break;
|
|
42
44
|
case i:
|
|
43
|
-
u = null;
|
|
45
|
+
s(u, f, d), d = null, f = null;
|
|
44
46
|
break;
|
|
45
47
|
default: throw Error(`enumerateAnchors: unknown command ${a}`);
|
|
46
48
|
}
|
|
47
|
-
}),
|
|
49
|
+
}), u;
|
|
50
|
+
}
|
|
51
|
+
function s(e, t, n) {
|
|
52
|
+
t && n && t !== n && n.controlIn && n.x === t.x && n.y === t.y && (e.pop(), t.closeCoordIndex = n.coordIndex, t.controlIn = n.controlIn);
|
|
48
53
|
}
|
|
49
|
-
function
|
|
54
|
+
function c(e, t, n, r) {
|
|
50
55
|
let i = new Float32Array(e.coords);
|
|
51
56
|
return i[t] = n, i[t + 1] = r, {
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
coords: i,
|
|
55
|
-
fillRule: e.fillRule
|
|
57
|
+
...e,
|
|
58
|
+
coords: i
|
|
56
59
|
};
|
|
57
60
|
}
|
|
58
61
|
//#endregion
|
|
59
|
-
export { o as enumerateAnchors,
|
|
62
|
+
export { o as enumerateAnchors, c as withCoord };
|
|
60
63
|
|
|
61
64
|
//# sourceMappingURL=geometry.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"geometry.js","names":["enumerateAnchors","path","anchors","lastAnchor","push","a","coords","coordIndex","controlIn","forEachSegment","commands","cmd","PATH_M","
|
|
1
|
+
{"version":3,"file":"geometry.js","names":["enumerateAnchors","path","anchors","lastAnchor","firstInSubpath","push","a","coords","coordIndex","controlIn","forEachSegment","commands","cmd","PATH_M","ci","PATH_L","PATH_C","PATH_Q","PATH_Z","foldClosingCurve","first","last","withCoord","next","x","y"],"sources":["../../../../src/interactions/actions/edit-anchors/geometry.ts"],"sourcesContent":["import { forEachSegment, PATH_C, PATH_L, PATH_M, PATH_Q, PATH_Z, type PolygonPath } from '@weasel-js/geom';\n\n/** A single anchor on a `PolygonPath`, with its incoming/outgoing bezier\n * control points (when present). `coordIndex` points at the anchor's own\n * on-curve x in the `coords` array. `inCoordIndex` / `outCoordIndex` point\n * at the corresponding control x. */\nexport interface PathAnchor {\n /** Sequential anchor index in walk order (0-based). */\n anchorIndex: number;\n /** On-curve point. */\n x: number;\n y: number;\n /** Incoming control (from the previous segment, when it was C/Q). */\n controlIn?: { x: number; y: number; coordIndex: number };\n /** Outgoing control (from the next segment, when it is C/Q). */\n controlOut?: { x: number; y: number; coordIndex: number };\n /** Index of the anchor's on-curve x in `coords`. */\n coordIndex: number;\n /** Set on the first anchor of a closed subpath whose last curve ends\n * exactly on it: the index of that curve's end x, the same point again. */\n closeCoordIndex?: number;\n}\n\n/** Walk a PolygonPath's command stream and yield one `PathAnchor` per\n * on-curve point. Adjacent C/Q control points are attached as\n * `controlIn`/`controlOut`. Subpath boundaries (M after a previous M or Z)\n * start fresh — the new M's anchor has no `controlIn` from a Z. A closing\n * curve that ends exactly on the subpath's first point is not a second\n * anchor: its control becomes the first anchor's `controlIn`, the way\n * `pathToAnchors` reads it, so the two walkers count alike. */\nexport function enumerateAnchors(path: PolygonPath): PathAnchor[] {\n const { commands, coords } = path;\n const anchors: PathAnchor[] = [];\n let lastAnchor: PathAnchor | null = null;\n let firstInSubpath: PathAnchor | null = null;\n\n const push = (coordIndex: number, controlIn?: PathAnchor['controlIn']): void => {\n const a: PathAnchor = {\n anchorIndex: anchors.length,\n x: coords[coordIndex],\n y: coords[coordIndex + 1],\n coordIndex,\n ...(controlIn ? { controlIn } : {}),\n };\n anchors.push(a);\n lastAnchor = a;\n };\n\n forEachSegment(commands, coords, (cmd, ci) => {\n switch (cmd) {\n case PATH_M:\n push(ci);\n firstInSubpath = lastAnchor;\n break;\n case PATH_L:\n push(ci);\n break;\n case PATH_C:\n if (lastAnchor) {\n lastAnchor.controlOut = { x: coords[ci], y: coords[ci + 1], coordIndex: ci };\n }\n push(ci + 4, { x: coords[ci + 2], y: coords[ci + 3], coordIndex: ci + 2 });\n break;\n case PATH_Q:\n if (lastAnchor) {\n lastAnchor.controlOut = { x: coords[ci], y: coords[ci + 1], coordIndex: ci };\n }\n push(ci + 2, { x: coords[ci], y: coords[ci + 1], coordIndex: ci });\n break;\n case PATH_Z:\n foldClosingCurve(anchors, firstInSubpath, lastAnchor);\n lastAnchor = null;\n firstInSubpath = null;\n break;\n default:\n throw new Error(`enumerateAnchors: unknown command ${cmd}`);\n }\n });\n return anchors;\n}\n\nfunction foldClosingCurve(anchors: PathAnchor[], first: PathAnchor | null, last: PathAnchor | null): void {\n if (!first || !last || first === last) return;\n if (!last.controlIn || last.x !== first.x || last.y !== first.y) return;\n anchors.pop();\n first.closeCoordIndex = last.coordIndex;\n first.controlIn = last.controlIn;\n}\n\n/** Mutate `coords` in-place: write `(x, y)` at `coordIndex`, return a new\n * PolygonPath sharing the same commands but with a fresh coords buffer. */\nexport function withCoord(path: PolygonPath, coordIndex: number, x: number, y: number): PolygonPath {\n const next = new Float32Array(path.coords);\n next[coordIndex] = x;\n next[coordIndex + 1] = y;\n return { ...path, coords: next };\n}\n\n/** Translate anchor `anchorIndex` AND its attached control handles\n * (`controlIn` / `controlOut`) by `(dx, dy)`. Used by `editAnchorsAction`\n * when the dragged affordance is the anchor itself — moving the anchor\n * without its handles would shear the surrounding bezier segments. */\nexport function translateAnchor(\n path: PolygonPath,\n anchorIndex: number,\n dx: number,\n dy: number,\n): PolygonPath {\n const anchors = enumerateAnchors(path);\n const a = anchors[anchorIndex];\n if (!a) return path;\n const next = new Float32Array(path.coords);\n // Anchor itself.\n next[a.coordIndex] += dx;\n next[a.coordIndex + 1] += dy;\n if (a.closeCoordIndex !== undefined) {\n next[a.closeCoordIndex] += dx;\n next[a.closeCoordIndex + 1] += dy;\n }\n // In-handle of THIS anchor — the trailing pair of the incoming C/Q.\n if (a.controlIn) {\n next[a.controlIn.coordIndex] += dx;\n next[a.controlIn.coordIndex + 1] += dy;\n }\n // Out-handle: the leading pair of the OUTGOING C/Q. Owned by this\n // anchor's segment.\n if (a.controlOut) {\n next[a.controlOut.coordIndex] += dx;\n next[a.controlOut.coordIndex + 1] += dy;\n }\n return { ...path, coords: next };\n}\n"],"mappings":";;AA8BA,SAAgBA,EAAiB,GAAiC;CAChE,IAAM,EAAE,aAAU,cAAWC,GACvBC,IAAwB,CAAC,GAC3BC,IAAgC,MAChCC,IAAoC,MAElCC,KAAQ,GAAoB,MAA8C;EAC9E,IAAMC,IAAgB;GACpB,aAAaJ,EAAQ;GACrB,GAAGK,EAAOC;GACV,GAAGD,EAAOC,IAAa;GACvB;GACA,GAAIC,IAAY,EAAE,aAAU,IAAI,CAAC;EACnC;EAEA,AADAP,EAAQ,KAAKI,CAAC,GACd,IAAaA;CACf;CAgCA,OA9BAI,EAAeC,GAAUJ,IAAS,GAAK,MAAO;EAC5C,QAAQK,GAAR;GACE,KAAKC;IAEH,AADAR,EAAKS,CAAE,GACP,IAAiBX;IACjB;GACF,KAAKY;IACH,EAAKD,CAAE;IACP;GACF,KAAKE;IAIH,AAHIb,MACF,EAAW,aAAa;KAAE,GAAGI,EAAOO;KAAK,GAAGP,EAAOO,IAAK;KAAI,YAAYA;IAAG,IAE7ET,EAAKS,IAAK,GAAG;KAAE,GAAGP,EAAOO,IAAK;KAAI,GAAGP,EAAOO,IAAK;KAAI,YAAYA,IAAK;IAAE,CAAC;IACzE;GACF,KAAKG;IAIH,AAHId,MACF,EAAW,aAAa;KAAE,GAAGI,EAAOO;KAAK,GAAGP,EAAOO,IAAK;KAAI,YAAYA;IAAG,IAE7ET,EAAKS,IAAK,GAAG;KAAE,GAAGP,EAAOO;KAAK,GAAGP,EAAOO,IAAK;KAAI,YAAYA;IAAG,CAAC;IACjE;GACF,KAAKI;IAGH,AAFAC,EAAiBjB,GAASE,GAAgBD,CAAU,GACpD,IAAa,MACb,IAAiB;IACjB;GACF,SACE,MAAU,MAAM,qCAAqCS,GAAK;EAC9D;CACF,CAAC,GACMV;AACT;AAEA,SAASiB,EAAiB,GAAuB,GAA0B,GAA+B;CACxG,AAAKC,KAAUC,KAAQD,MAAUC,KAC5BA,EAAK,aAAaA,EAAK,MAAMD,EAAM,KAAKC,EAAK,MAAMD,EAAM,MAC9DlB,EAAQ,IAAI,GACZ,EAAM,kBAAkBmB,EAAK,YAC7B,EAAM,YAAYA,EAAK;AACzB;AAIA,SAAgBC,EAAU,GAAmB,GAAoB,GAAW,GAAwB;CAClG,IAAMC,IAAO,IAAI,aAAatB,EAAK,MAAM;CAGzC,OAFA,EAAKO,KAAcgB,GACnB,EAAKhB,IAAa,KAAKiB,GAChB;EAAE,GAAGxB;EAAM,QAAQsB;CAAK;AACjC"}
|
|
@@ -0,0 +1,124 @@
|
|
|
1
|
+
import { unionAABB as e } from "../../../core/geometry/unionBounds.js";
|
|
2
|
+
import { visualBoundsViaDescriptor as t } from "../../../core/geometry/poseDescriptor.js";
|
|
3
|
+
import { poseDescriptorOf as n } from "../poseDescriptorDep.js";
|
|
4
|
+
import { shapeSources as r } from "../selectionSubtree.js";
|
|
5
|
+
import { createTransformOp as i } from "../../../core/ops/transform.js";
|
|
6
|
+
import { geometryDataOp as a } from "../geometryProjection.js";
|
|
7
|
+
import { scenePoseFrame as o } from "../poseFrame.js";
|
|
8
|
+
import { defaultCommitAdapter as s } from "../defaultCommitAdapter.js";
|
|
9
|
+
import { FlipXIcon as c, FlipYIcon as l } from "../defaults/icons/editIcons.js";
|
|
10
|
+
import { requiresSelection as u } from "../defaults/requiresSelection.js";
|
|
11
|
+
import { flipPoseAboutBounds as d, flipPoseViaDescriptor as f } from "./helpers.js";
|
|
12
|
+
import { actionReferenceSources as p, resolveSpatialReference as m } from "../spatialReference.js";
|
|
13
|
+
import { multiply as h, rotate as g, translate as _ } from "@weasel-js/geom";
|
|
14
|
+
import { createElement as v } from "react";
|
|
15
|
+
//#region src/interactions/actions/flip/action.ts
|
|
16
|
+
function y(e, t, n, r) {
|
|
17
|
+
let i = t.local(n, {
|
|
18
|
+
x: r.x + r.width / 2,
|
|
19
|
+
y: r.y + r.height / 2,
|
|
20
|
+
width: 0,
|
|
21
|
+
height: 0,
|
|
22
|
+
rotation: 0
|
|
23
|
+
}), a = i.rotation ?? 0, o = e === "x" ? [
|
|
24
|
+
-1,
|
|
25
|
+
0,
|
|
26
|
+
0,
|
|
27
|
+
1,
|
|
28
|
+
0,
|
|
29
|
+
0
|
|
30
|
+
] : [
|
|
31
|
+
1,
|
|
32
|
+
0,
|
|
33
|
+
0,
|
|
34
|
+
-1,
|
|
35
|
+
0,
|
|
36
|
+
0
|
|
37
|
+
], s = h(h(g(a), o), g(-a));
|
|
38
|
+
return h(_(i.x, i.y), h(s, _(-i.x, -i.y)));
|
|
39
|
+
}
|
|
40
|
+
function b(n, c, l, u, h, g, _, v, b) {
|
|
41
|
+
let x = n.get();
|
|
42
|
+
if (x.length === 0) return;
|
|
43
|
+
let S = o(c), C = [], w = /* @__PURE__ */ new Map();
|
|
44
|
+
for (let e of x) {
|
|
45
|
+
let n = r(c, [e]), i = n.length !== 1 || n[0] !== e ? t(S.world(e), _) : null;
|
|
46
|
+
for (let e of n) C.includes(e) || (C.push(e), i && w.set(e, i));
|
|
47
|
+
}
|
|
48
|
+
let T = /* @__PURE__ */ new Map();
|
|
49
|
+
for (let e of C) c.get(e) !== void 0 && T.set(e, S.world(e));
|
|
50
|
+
let E = null;
|
|
51
|
+
if (u === "union") E = e([...T.values()].map((e) => t(e, _)));
|
|
52
|
+
else if (u !== "each" && (E = m(u, p(v, b, c, S, _)), E === null)) return;
|
|
53
|
+
let D = [];
|
|
54
|
+
for (let e of C) {
|
|
55
|
+
let t = c.get(e);
|
|
56
|
+
if (!t) continue;
|
|
57
|
+
let n = T.get(e), r = E ?? w.get(e) ?? null, o = r ? d(n, l, _, r) : f(n, l, _);
|
|
58
|
+
D.push(i({
|
|
59
|
+
id: e,
|
|
60
|
+
from: t.pose,
|
|
61
|
+
to: S.local(e, o),
|
|
62
|
+
label: "Flip"
|
|
63
|
+
}));
|
|
64
|
+
let s = r ?? _.getBounds(n), u = a(g, {
|
|
65
|
+
id: e,
|
|
66
|
+
data: t.data,
|
|
67
|
+
pose: t.pose
|
|
68
|
+
}, y(l, S, e, s), "Flip");
|
|
69
|
+
u && D.push(u);
|
|
70
|
+
}
|
|
71
|
+
D.length !== 0 && (h ? h(D, "Flip") : c.applyBatch(D, "Flip", s(c, n.adapterMethods)));
|
|
72
|
+
}
|
|
73
|
+
var x = {
|
|
74
|
+
id: "flip",
|
|
75
|
+
label: "Flip",
|
|
76
|
+
group: "flip",
|
|
77
|
+
variants: [{
|
|
78
|
+
key: "x",
|
|
79
|
+
label: "Flip Horizontal",
|
|
80
|
+
icon: v(c),
|
|
81
|
+
params: { axis: "x" }
|
|
82
|
+
}, {
|
|
83
|
+
key: "y",
|
|
84
|
+
label: "Flip Vertical",
|
|
85
|
+
icon: v(l),
|
|
86
|
+
params: { axis: "y" }
|
|
87
|
+
}],
|
|
88
|
+
defaultBinding: [{
|
|
89
|
+
spec: {
|
|
90
|
+
kind: "key",
|
|
91
|
+
key: ["h", "H"],
|
|
92
|
+
mods: { shift: !0 }
|
|
93
|
+
},
|
|
94
|
+
opts: { params: { axis: "x" } }
|
|
95
|
+
}, {
|
|
96
|
+
spec: {
|
|
97
|
+
kind: "key",
|
|
98
|
+
key: ["v", "V"],
|
|
99
|
+
mods: { shift: !0 }
|
|
100
|
+
},
|
|
101
|
+
opts: { params: { axis: "y" } }
|
|
102
|
+
}],
|
|
103
|
+
eligible: { capability: "transforms-selection" },
|
|
104
|
+
requires: [
|
|
105
|
+
"selection",
|
|
106
|
+
"scene",
|
|
107
|
+
"applyOps",
|
|
108
|
+
"geometryProjection",
|
|
109
|
+
"poseDescriptor",
|
|
110
|
+
"pointer"
|
|
111
|
+
],
|
|
112
|
+
invoker: {
|
|
113
|
+
timing: "immediate",
|
|
114
|
+
run: (e, t) => {
|
|
115
|
+
let r = t?.axis ?? "x", i = t?.pivot ?? "each", a = e.selection, o = e.scene, s = e.applyOps, c = e.geometryProjection;
|
|
116
|
+
a && o && b(a, o, r, i, s, c, n(e.poseDescriptor), t, e.pointer);
|
|
117
|
+
}
|
|
118
|
+
},
|
|
119
|
+
enabled: u
|
|
120
|
+
};
|
|
121
|
+
//#endregion
|
|
122
|
+
export { x as flipAction };
|
|
123
|
+
|
|
124
|
+
//# sourceMappingURL=action.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"action.js","names":["localMirror","at","frame","id","pivotWorld","theta","mirror","axis","turned","multiply","rotate","translate","flipSelection","selected","selection","scenePoseFrame","scene","ids","ownPivot","members","shapeSources","box","visualBoundsViaDescriptor","geom","member","worlds","sharedPivot","pivot","unionAABB","p","resolveSpatialReference","actionReferenceSources","params","pointer","ops","node","world","about","flipped","flipPoseAboutBounds","flipPoseViaDescriptor","createTransformOp","g","dataOp","geometryDataOp","geometryProjection","applyOps","defaultCommitAdapter","flipAction","createElement","FlipXIcon","FlipYIcon","deps","poseDescriptorOf","requiresSelection"],"sources":["../../../../src/interactions/actions/flip/action.ts"],"sourcesContent":["import type { NodeId, Scene } from 'core/scene/types';\nimport type { Bounds } from 'core/viewport/fitViewToBounds';\nimport { shapeSources } from '../selectionSubtree';\nimport { createElement } from 'react';\nimport { FlipXIcon, FlipYIcon } from '../defaults/icons/editIcons';\nimport type { Op } from 'core/ops/types';\nimport { multiply, rotate, translate, type Mat3 } from '@weasel-js/geom';\nimport { createTransformOp } from 'core/ops/transform';\nimport type { PoseDescriptor } from '../resize/geometry';\nimport { poseDescriptorOf } from '../poseDescriptorDep';\nimport {\n flipPoseAboutBounds,\n flipPoseViaDescriptor,\n type FlipAxis,\n type FlipPivot,\n} from './helpers';\nimport { unionAABB } from 'core/geometry/unionBounds';\nimport { visualBoundsViaDescriptor } from '../align/align';\nimport { scenePoseFrame, type PoseFrame } from '../poseFrame';\nimport { actionReferenceSources, resolveSpatialReference } from '../spatialReference';\nimport type { PointerContextValue } from '@weasel-js/routing/react';\nimport type { RectPose } from 'core/scene/types';\nimport type { Action } from '@weasel-js/routing';\nimport { defaultCommitAdapter } from '../defaultCommitAdapter';\nimport { requiresSelection } from '../defaults/requiresSelection';\nimport type { SelectionApi } from 'core/selection/useSelection';\nimport { geometryDataOp, type GeometryProjection } from '../geometryProjection';\n\n/**\n * The world mirror about `axis` through the center of `pivotWorld`, written in\n * the frame `id` stores its data in. `geometryProjection.transform` is given\n * the affine the node's own pose underwent, and data-held geometry is local —\n * so a world mirror has to be conjugated by the frame or an asymmetric shape\n * reflects across the wrong line while its pose lands correctly.\n *\n * The frame's turn comes back as the rotation on a rebased zero-size pose at\n * the pivot point, so no composition strategy has to expose one.\n */\nfunction localMirror(\n axis: FlipAxis,\n frame: PoseFrame<unknown>,\n id: Parameters<PoseFrame<unknown>['local']>[0],\n pivotWorld: { x: number; y: number; width: number; height: number },\n): Mat3 {\n const at = frame.local(id, {\n x: pivotWorld.x + pivotWorld.width / 2,\n y: pivotWorld.y + pivotWorld.height / 2,\n width: 0,\n height: 0,\n rotation: 0,\n }) as RectPose;\n const theta = at.rotation ?? 0;\n const mirror: Mat3 = axis === 'x' ? [-1, 0, 0, 1, 0, 0] : [1, 0, 0, -1, 0, 0];\n const turned = multiply(multiply(rotate(theta), mirror), rotate(-theta));\n return multiply(translate(at.x, at.y), multiply(turned, translate(-at.x, -at.y)));\n}\n\n/**\n * Flip the current selection in `scene` along `axis`, as one undo entry.\n *\n * Pivot: `'each'` (per-item own AABB) unless the caller passes `'union'`,\n * which mirrors every pose about the selection's *visual* union AABB — the\n * rotated ink extents — so items swap sides as well as reflect, or a\n * `SpatialReference`, which mirrors about the center of what it names. A rotated\n * member's own mirrored position needs no expansion: `axisAlignedBounds`\n * keeps the stored box's center, so mirroring either box lands the same place.\n */\nfunction flipSelection(\n selection: SelectionApi,\n scene: Scene<unknown, string, unknown>,\n axis: FlipAxis,\n pivot: FlipPivot,\n applyOps: ((ops: Op[], label: string) => void) | undefined,\n geometryProjection: GeometryProjection | undefined,\n geom: PoseDescriptor<unknown>,\n params: Record<string, unknown> | undefined,\n pointer: PointerContextValue | undefined,\n): void {\n const selected = selection.get();\n if (selected.length === 0) return;\n const frame = scenePoseFrame(scene);\n\n // A group whose pose derives from its children mirrors by mirroring them,\n // about the group's own box where each selected node flips in place.\n const ids: NodeId[] = [];\n const ownPivot = new Map<string, Bounds>();\n for (const id of selected) {\n const members = shapeSources(scene, [id]) as NodeId[];\n const stoodIn = members.length !== 1 || members[0] !== id;\n const box = stoodIn ? visualBoundsViaDescriptor(frame.world(id), geom) : null;\n for (const member of members) {\n if (ids.includes(member)) continue;\n ids.push(member);\n if (box) ownPivot.set(member, box);\n }\n }\n\n const worlds = new Map<string, unknown>();\n for (const id of ids) {\n if (scene.get(id) !== undefined) worlds.set(id as string, frame.world(id));\n }\n let sharedPivot: ReturnType<typeof unionAABB> = null;\n if (pivot === 'union') {\n sharedPivot = unionAABB([...worlds.values()].map((p) => visualBoundsViaDescriptor(p, geom)));\n } else if (pivot !== 'each') {\n sharedPivot = resolveSpatialReference(pivot, actionReferenceSources(params, pointer, scene, frame, geom));\n if (sharedPivot === null) return;\n }\n\n const ops: Op[] = [];\n for (const id of ids) {\n const node = scene.get(id);\n if (!node) continue;\n const world = worlds.get(id as string)!;\n const about = sharedPivot ?? ownPivot.get(id as string) ?? null;\n const flipped = about\n ? flipPoseAboutBounds(world, axis, geom, about)\n : flipPoseViaDescriptor(world, axis, geom);\n ops.push(createTransformOp<unknown>({\n id: id as string,\n from: node.pose,\n to: frame.local(id, flipped),\n label: 'Flip',\n }));\n // Mirror the data-held geometry about the SAME pivot the pose flip uses.\n // A pose-only flip of a bare-AABB pose is identity, so this data op is\n // the only way an asymmetric shape actually mirrors.\n const g = about ?? geom.getBounds(world);\n const dataOp = geometryDataOp(\n geometryProjection,\n { id: id as string, data: node.data, pose: node.pose },\n localMirror(axis, frame, id, g),\n 'Flip',\n );\n if (dataOp) ops.push(dataOp);\n }\n if (ops.length === 0) return;\n\n if (applyOps) applyOps(ops, 'Flip');\n else scene.applyBatch(ops, 'Flip', defaultCommitAdapter(scene, selection.adapterMethods));\n}\n\n/**\n * @experimental\n * Flips the selection. `params.axis` (`'x'` | `'y'`, default `'x'`) picks the\n * direction, and the optional `params.pivot` (a `FlipPivot`, default `'each'`)\n * picks what it mirrors about.\n */\nexport const flipAction: Action & { requires: string[] } = {\n id: 'flip',\n label: 'Flip',\n group: 'flip',\n variants: [\n { key: 'x', label: 'Flip Horizontal', icon: createElement(FlipXIcon), params: { axis: 'x' } },\n { key: 'y', label: 'Flip Vertical', icon: createElement(FlipYIcon), params: { axis: 'y' } },\n ],\n defaultBinding: [\n { spec: { kind: 'key', key: ['h', 'H'], mods: { shift: true } }, opts: { params: { axis: 'x' } } },\n { spec: { kind: 'key', key: ['v', 'V'], mods: { shift: true } }, opts: { params: { axis: 'y' } } },\n ],\n eligible: { capability: 'transforms-selection' },\n requires: ['selection', 'scene', 'applyOps', 'geometryProjection', 'poseDescriptor', 'pointer'],\n invoker: {\n timing: 'immediate',\n run: (deps, params) => {\n const axis = (params?.axis as FlipAxis | undefined) ?? 'x';\n const pivot = (params?.pivot as FlipPivot | undefined) ?? 'each';\n const selection = deps.selection;\n const scene = deps.scene;\n const applyOps = deps.applyOps;\n const geometryProjection = deps.geometryProjection;\n if (!selection || !scene) return;\n flipSelection(\n selection, scene, axis, pivot, applyOps, geometryProjection,\n poseDescriptorOf(deps.poseDescriptor),\n params, deps.pointer,\n );\n },\n },\n enabled: requiresSelection,\n};\n"],"mappings":"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"}
|
|
@@ -1,25 +1,26 @@
|
|
|
1
|
+
import { poseLinearOf as e } from "@weasel-js/geom";
|
|
1
2
|
//#region src/interactions/actions/flip/helpers.ts
|
|
2
|
-
function
|
|
3
|
-
let
|
|
4
|
-
x: 2 *
|
|
5
|
-
y:
|
|
6
|
-
width: -
|
|
7
|
-
height:
|
|
3
|
+
function t(e, t, n, o) {
|
|
4
|
+
let s = n.getBounds(e), c = o.x + o.width / 2, l = o.y + o.height / 2, u = t === "x" ? {
|
|
5
|
+
x: 2 * c - s.x,
|
|
6
|
+
y: s.y,
|
|
7
|
+
width: -s.width,
|
|
8
|
+
height: s.height
|
|
8
9
|
} : {
|
|
9
|
-
x:
|
|
10
|
-
y: 2 *
|
|
11
|
-
width:
|
|
12
|
-
height: -
|
|
13
|
-
},
|
|
14
|
-
return
|
|
10
|
+
x: s.x,
|
|
11
|
+
y: 2 * l - s.y,
|
|
12
|
+
width: s.width,
|
|
13
|
+
height: -s.height
|
|
14
|
+
}, d = n.remapBounds(e, s, u), f = n.getRotation?.(e) ?? s.rotation ?? 0;
|
|
15
|
+
return a(r(i(d), f, n));
|
|
15
16
|
}
|
|
16
|
-
function
|
|
17
|
-
return e
|
|
17
|
+
function n(e, n, r) {
|
|
18
|
+
return t(e, n, r, r.getBounds(e));
|
|
18
19
|
}
|
|
19
|
-
function
|
|
20
|
+
function r(e, t, n) {
|
|
20
21
|
return t === 0 ? e : n.withRotation ? n.withRotation(e, -t) : e;
|
|
21
22
|
}
|
|
22
|
-
function
|
|
23
|
+
function i(e) {
|
|
23
24
|
let t = e, n = !1, r = t.x, i = t.y, a = t.width, o = t.height;
|
|
24
25
|
return typeof a == "number" && a < 0 && typeof r == "number" && (r += a, a = -a, n = !0), typeof o == "number" && o < 0 && typeof i == "number" && (i += o, o = -o, n = !0), n ? {
|
|
25
26
|
...e,
|
|
@@ -29,7 +30,19 @@ function r(e) {
|
|
|
29
30
|
height: o
|
|
30
31
|
} : e;
|
|
31
32
|
}
|
|
33
|
+
function a(t) {
|
|
34
|
+
let n = e(t);
|
|
35
|
+
return !n || n[1] === 0 && n[2] === 0 ? t : {
|
|
36
|
+
...t,
|
|
37
|
+
transform: [
|
|
38
|
+
n[0],
|
|
39
|
+
-n[1],
|
|
40
|
+
-n[2],
|
|
41
|
+
n[3]
|
|
42
|
+
]
|
|
43
|
+
};
|
|
44
|
+
}
|
|
32
45
|
//#endregion
|
|
33
|
-
export {
|
|
46
|
+
export { t as flipPoseAboutBounds, n as flipPoseViaDescriptor };
|
|
34
47
|
|
|
35
48
|
//# sourceMappingURL=helpers.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"helpers.js","names":["flipPoseAboutBounds","src","geometry","pose","cxPivot","pivotBounds","cyPivot","dst","axis","next","rotation","negateRotation","normalizeNegativeExtent","flipPoseViaDescriptor","p","mutated","nx","ny","nw","nh"],"sources":["../../../../src/interactions/actions/flip/helpers.ts"],"sourcesContent":["/**\n * Pose-flip helpers used by `flipAction` (via `defaults/flip.ts`).\n *\n * These were extracted from the legacy `useFlip` hook when it was removed —\n * they remain because the descriptor-style `flipAction` still needs to reflect\n * arbitrary `TPose` values through a `PoseDescriptor`.\n */\nimport type { PoseDescriptor } from '../resize/geometry';\nimport type { SpatialReference } from '../spatialReference';\n\n/** Axis for flip. `'x'` mirrors horizontally (left↔right); `'y'` mirrors vertically (top↔bottom). */\nexport type FlipAxis = 'x' | 'y';\n\n/** How a multi-selection flip chooses its pivot.\n *\n * - `'each'` — every pose mirrors about its own AABB; spatial layout of the\n * selection is unchanged, individual items are reflected in place.\n * - `'union'` — every pose mirrors about the selection's union AABB; items\n * swap sides as well as reflect, matching Illustrator/Figma defaults.\n * - a {@link SpatialReference} — every pose mirrors about the center of the\n * bounds it names: the pointer, a world point or rect, or a key node. */\nexport type FlipPivot = 'each' | 'union' | SpatialReference;\n\n/** Reflect `pose` across the centerline of `pivotBounds` along `axis`, using\n * `geometry` to read bounds and remap. The pose's own AABB is read once to\n * compute the reflected destination rect; coords inside the pose are then\n * remapped through the affine that takes its own bounds → reflected dst.\n * A rotation the pose carries is negated: a mirror reverses the sense of the\n * turn, and `remapBounds` carries the original angle through untouched. */\nexport function flipPoseAboutBounds<TPose>(\n pose: TPose,\n axis: FlipAxis,\n geometry: PoseDescriptor<TPose>,\n pivotBounds: { x: number; y: number; width: number; height: number },\n): TPose {\n const src = geometry.getBounds(pose);\n const cxPivot = pivotBounds.x + pivotBounds.width / 2;\n const cyPivot = pivotBounds.y + pivotBounds.height / 2;\n const dst = axis === 'x'\n ? { x: 2 * cxPivot - src.x, y: src.y, width: -src.width, height: src.height }\n : { x: src.x, y: 2 * cyPivot - src.y, width: src.width, height: -src.height };\n const next = geometry.remapBounds(pose, src, dst);\n const rotation = geometry.getRotation?.(pose) ?? (src as { rotation?: number }).rotation ?? 0;\n return negateRotation(normalizeNegativeExtent(next), rotation, geometry);\n}\n\n/** Reflect `pose` across the centerline of its own AABB along `axis`. */\nexport function flipPoseViaDescriptor<TPose>(\n pose: TPose,\n axis: FlipAxis,\n geometry: PoseDescriptor<TPose>,\n): TPose {\n return flipPoseAboutBounds(pose, axis, geometry, geometry.getBounds(pose));\n}\n\nfunction negateRotation<TPose>(pose: TPose, rotation: number, geometry: PoseDescriptor<TPose>): TPose {\n if (rotation === 0) return pose;\n return geometry.withRotation ? geometry.withRotation(pose, -rotation) : pose;\n}\n\nfunction normalizeNegativeExtent<TPose>(pose: TPose): TPose {\n const p = pose as unknown as { x?: number; y?: number; width?: number; height?: number };\n let mutated = false;\n let nx = p.x;\n let ny = p.y;\n let nw = p.width;\n let nh = p.height;\n if (typeof nw === 'number' && nw < 0 && typeof nx === 'number') {\n nx = nx + nw;\n nw = -nw;\n mutated = true;\n }\n if (typeof nh === 'number' && nh < 0 && typeof ny === 'number') {\n ny = ny + nh;\n nh = -nh;\n mutated = true;\n }\n if (!mutated) return pose;\n return { ...(pose as object), x: nx, y: ny, width: nw, height: nh } as TPose;\n}\n"],"mappings":"
|
|
1
|
+
{"version":3,"file":"helpers.js","names":["flipPoseAboutBounds","src","geometry","pose","cxPivot","pivotBounds","cyPivot","dst","axis","next","rotation","mirrorLinear","negateRotation","normalizeNegativeExtent","flipPoseViaDescriptor","p","mutated","nx","ny","nw","nh","l","poseLinearOf"],"sources":["../../../../src/interactions/actions/flip/helpers.ts"],"sourcesContent":["/**\n * Pose-flip helpers used by `flipAction` (via `defaults/flip.ts`).\n *\n * These were extracted from the legacy `useFlip` hook when it was removed —\n * they remain because the descriptor-style `flipAction` still needs to reflect\n * arbitrary `TPose` values through a `PoseDescriptor`.\n */\nimport type { PoseDescriptor } from '../resize/geometry';\nimport type { SpatialReference } from '../spatialReference';\nimport { poseLinearOf } from '@weasel-js/geom';\n\n/** Axis for flip. `'x'` mirrors horizontally (left↔right); `'y'` mirrors vertically (top↔bottom). */\nexport type FlipAxis = 'x' | 'y';\n\n/** How a multi-selection flip chooses its pivot.\n *\n * - `'each'` — every pose mirrors about its own AABB; spatial layout of the\n * selection is unchanged, individual items are reflected in place.\n * - `'union'` — every pose mirrors about the selection's union AABB; items\n * swap sides as well as reflect, matching Illustrator/Figma defaults.\n * - a {@link SpatialReference} — every pose mirrors about the center of the\n * bounds it names: the pointer, a world point or rect, or a key node. */\nexport type FlipPivot = 'each' | 'union' | SpatialReference;\n\n/** Reflect `pose` across the centerline of `pivotBounds` along `axis`, using\n * `geometry` to read bounds and remap. The pose's own AABB is read once to\n * compute the reflected destination rect; coords inside the pose are then\n * remapped through the affine that takes its own bounds → reflected dst.\n * A rotation the pose carries is negated: a mirror reverses the sense of the\n * turn, and `remapBounds` carries the original angle through untouched. A\n * `transform` it carries is mirrored the same way, on either axis. */\nexport function flipPoseAboutBounds<TPose>(\n pose: TPose,\n axis: FlipAxis,\n geometry: PoseDescriptor<TPose>,\n pivotBounds: { x: number; y: number; width: number; height: number },\n): TPose {\n const src = geometry.getBounds(pose);\n const cxPivot = pivotBounds.x + pivotBounds.width / 2;\n const cyPivot = pivotBounds.y + pivotBounds.height / 2;\n const dst = axis === 'x'\n ? { x: 2 * cxPivot - src.x, y: src.y, width: -src.width, height: src.height }\n : { x: src.x, y: 2 * cyPivot - src.y, width: src.width, height: -src.height };\n const next = geometry.remapBounds(pose, src, dst);\n const rotation = geometry.getRotation?.(pose) ?? (src as { rotation?: number }).rotation ?? 0;\n return mirrorLinear(negateRotation(normalizeNegativeExtent(next), rotation, geometry));\n}\n\n/** Reflect `pose` across the centerline of its own AABB along `axis`. */\nexport function flipPoseViaDescriptor<TPose>(\n pose: TPose,\n axis: FlipAxis,\n geometry: PoseDescriptor<TPose>,\n): TPose {\n return flipPoseAboutBounds(pose, axis, geometry, geometry.getBounds(pose));\n}\n\nfunction negateRotation<TPose>(pose: TPose, rotation: number, geometry: PoseDescriptor<TPose>): TPose {\n if (rotation === 0) return pose;\n return geometry.withRotation ? geometry.withRotation(pose, -rotation) : pose;\n}\n\nfunction normalizeNegativeExtent<TPose>(pose: TPose): TPose {\n const p = pose as unknown as { x?: number; y?: number; width?: number; height?: number };\n let mutated = false;\n let nx = p.x;\n let ny = p.y;\n let nw = p.width;\n let nh = p.height;\n if (typeof nw === 'number' && nw < 0 && typeof nx === 'number') {\n nx = nx + nw;\n nw = -nw;\n mutated = true;\n }\n if (typeof nh === 'number' && nh < 0 && typeof ny === 'number') {\n ny = ny + nh;\n nh = -nh;\n mutated = true;\n }\n if (!mutated) return pose;\n return { ...(pose as object), x: nx, y: ny, width: nw, height: nh } as TPose;\n}\n\n/** `M · L · M` for a mirror `M` on either axis: the off-diagonal terms change sign. */\nfunction mirrorLinear<TPose>(pose: TPose): TPose {\n const l = poseLinearOf(pose);\n if (!l || (l[1] === 0 && l[2] === 0)) return pose;\n return { ...(pose as object), transform: [l[0], -l[1], -l[2], l[3]] } as TPose;\n}\n"],"mappings":";;AA+BA,SAAgBA,EACd,GACA,GACA,GACA,GACO;CACP,IAAMC,IAAMC,EAAS,UAAUC,CAAI,GAC7BC,IAAUC,EAAY,IAAIA,EAAY,QAAQ,GAC9CC,IAAUD,EAAY,IAAIA,EAAY,SAAS,GAC/CE,IAAMC,MAAS,MACjB;EAAE,GAAG,IAAIJ,IAAUH,EAAI;EAAG,GAAGA,EAAI;EAAG,OAAO,CAACA,EAAI;EAAO,QAAQA,EAAI;CAAO,IAC1E;EAAE,GAAGA,EAAI;EAAG,GAAG,IAAIK,IAAUL,EAAI;EAAG,OAAOA,EAAI;EAAO,QAAQ,CAACA,EAAI;CAAO,GACxEQ,IAAOP,EAAS,YAAYC,GAAMF,GAAKM,CAAG,GAC1CG,IAAWR,EAAS,cAAcC,CAAI,KAAMF,EAA8B,YAAY;CAC5F,OAAOU,EAAaC,EAAeC,EAAwBJ,CAAI,GAAGC,GAAUR,CAAQ,CAAC;AACvF;AAGA,SAAgBY,EACd,GACA,GACA,GACO;CACP,OAAOd,EAAoBG,GAAMK,GAAMN,GAAUA,EAAS,UAAUC,CAAI,CAAC;AAC3E;AAEA,SAASS,EAAsB,GAAa,GAAkB,GAAwC;CAEpG,OADIF,MAAa,IAAUP,IACpBD,EAAS,eAAeA,EAAS,aAAaC,GAAM,CAACO,CAAQ,IAAIP;AAC1E;AAEA,SAASU,EAA+B,GAAoB;CAC1D,IAAME,IAAIZ,GACNa,IAAU,IACVC,IAAKF,EAAE,GACPG,IAAKH,EAAE,GACPI,IAAKJ,EAAE,OACPK,IAAKL,EAAE;CAYX,OAXI,OAAOI,KAAO,YAAYA,IAAK,KAAK,OAAOF,KAAO,aACpD,KAAUE,GACV,IAAK,CAACA,GACN,IAAU,KAER,OAAOC,KAAO,YAAYA,IAAK,KAAK,OAAOF,KAAO,aACpD,KAAUE,GACV,IAAK,CAACA,GACN,IAAU,KAEPJ,IACE;EAAE,GAAIb;EAAiB,GAAGc;EAAI,GAAGC;EAAI,OAAOC;EAAI,QAAQC;CAAG,IAD7CjB;AAEvB;AAGA,SAASQ,EAAoB,GAAoB;CAC/C,IAAMU,IAAIC,EAAanB,CAAI;CAE3B,OADI,CAACkB,KAAMA,EAAE,OAAO,KAAKA,EAAE,OAAO,IAAWlB,IACtC;EAAE,GAAIA;EAAiB,WAAW;GAACkB,EAAE;GAAI,CAACA,EAAE;GAAI,CAACA,EAAE;GAAIA,EAAE;EAAE;CAAE;AACtE"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import { planeOf as e } from "./planeInput.js";
|
|
2
|
+
import { scenePoseFrame as t } from "./poseFrame.js";
|
|
3
|
+
//#region src/interactions/actions/gestureFrames.ts
|
|
4
|
+
function n(n, r, i = t(n)) {
|
|
5
|
+
return {
|
|
6
|
+
world: (e) => i.world(e),
|
|
7
|
+
toWorld: (e, t) => {
|
|
8
|
+
let n = i.parentWorld(e);
|
|
9
|
+
return n === null ? t : i.pc.compose(n, t);
|
|
10
|
+
},
|
|
11
|
+
toLocal: (e, t) => i.local(e, t),
|
|
12
|
+
planeOf: (t) => e(r, t)
|
|
13
|
+
};
|
|
14
|
+
}
|
|
15
|
+
//#endregion
|
|
16
|
+
export { n as sceneGestureFrames };
|
|
17
|
+
|
|
18
|
+
//# sourceMappingURL=gestureFrames.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"gestureFrames.js","names":["sceneGestureFrames","scenePoseFrame","scene","frame","id","parent","pose","worldPose","planeOf","view","layer"],"sources":["../../../src/interactions/actions/gestureFrames.ts"],"sourcesContent":["import type { NodeId, Scene } from 'core/scene/types';\nimport type { GestureFrames } from '../gestures/types';\nimport { planeOf } from './planeInput';\nimport { scenePoseFrame, type PoseFrame } from './poseFrame';\n\n/** A scene-backed gesture's {@link GestureFrames}. `view` is the `view` dep. */\nexport function sceneGestureFrames(\n scene: Scene<unknown, string, unknown>,\n view: unknown,\n frame: PoseFrame<unknown> = scenePoseFrame(scene),\n): GestureFrames<unknown> {\n return {\n world: (id) => frame.world(id as NodeId),\n toWorld: (id, pose) => {\n const parent = frame.parentWorld(id as NodeId);\n return parent === null ? pose : frame.pc.compose(parent, pose);\n },\n toLocal: (id, worldPose) => frame.local(id as NodeId, worldPose),\n planeOf: (layer) => planeOf(view, layer),\n };\n}\n"],"mappings":";;;AAMA,SAAgBA,EACd,GACA,GACA,IAA4BC,EAAeC,CAAK,GACxB;CACxB,OAAO;EACL,QAAQ,MAAOC,EAAM,MAAMC,CAAY;EACvC,UAAU,GAAI,MAAS;GACrB,IAAMC,IAASF,EAAM,YAAYC,CAAY;GAC7C,OAAOC,MAAW,OAAOC,IAAOH,EAAM,GAAG,QAAQE,GAAQC,CAAI;EAC/D;EACA,UAAU,GAAI,MAAcH,EAAM,MAAMC,GAAcG,CAAS;EAC/D,UAAU,MAAUC,EAAQC,GAAMC,CAAK;CACzC;AACF"}
|