@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 +1 @@
|
|
|
1
|
-
{"version":3,"file":"planeInput.js","names":["layerOfNode","id","deps","asNodeId","selectionLayer","selection","affordance","layer","insertLayer","editingLayer","planeOf","view","invertPlane","m","planeToPlane","carryPose","pose","b","d","rectToPlane","inPlane","inner","action","declared","requires","plane","livePlane","layerOf","params","wx","\"worldX\"","wy","\"worldY\"","at","toPlane","ctx","opts","planeHandle","scene","bag","viewApi","l","parallaxOf","parallax","IDENTITY","map","p","planeMap","planeView","camera","deriveParallaxView","edited","own","override","name","nodeAtPoint","fromPlane","exclude","snap","start0","pressedAt","trail","trailCarrier","out","c","start","current","aff","src","lastMap","same","points","i","handle","reason","ov","overlayFromPlane","pt","rectFromPlane","insertExtrasFromPlane","extras","e","r","v","\"a\"","\"b\"","\"center\"","\"radius\"","\"outerRadius\"","\"samples\"","s"],"sources":["../../../src/interactions/actions/planeInput.ts"],"sourcesContent":["/**\n * Editing a node on a parallax plane.\n *\n * The dispatcher hands every action the camera's world. A node on a layer\n * carrying `parallax` stores its pose in its plane's world, which the camera's\n * reaches through a `PlaneMap` that changes with the camera. An editing action\n * pairs the pointer with the pose it edits, so the two have to be in one world.\n *\n * `inPlane` is that one place: it wraps an action so its input is carried into\n * the plane of the layer it edits before the action reads it — pointer, drag,\n * trail, affordance pivot, and the camera it converts screen pixels through —\n * and so the chrome it publishes back comes out in the camera's world. A dep\n * that answers in world points (`nodeAtPoint`, `snap`) is the surface's, so it\n * keeps speaking the camera's world and the seam converts at its boundary.\n * The action sees the plane only as `view.plane()`, which it hands its snap\n * behaviors so they can bring the camera's guides and grid into the plane.\n *\n * A selection can span planes. The edit is measured in one of them, and a\n * node on another is carried into it as the gesture starts\n * (`planeOf` at press, inverted) and back out through `planeOf` as it is now,\n * so each node ends where it was drawn relative to the pointer.\n *\n * The map is read afresh on every call: a camera panning under a held drag, or\n * a plane whose factors are being animated, moves the node with the pointer.\n */\nimport type {\n Action, ActionDeps, AffordanceHit, BindingOpts, DragSample, InvocationCtx, OngoingHandle,\n OngoingOverlay,\n} from '@weasel-js/routing';\nimport type { Scene } from 'core/scene/types';\nimport { asNodeId } from 'core/scene/types';\nimport {\n deriveParallaxView, fromPlane, planeMap, planeToPlane, rectFromPlane, rectToPlane, toPlane,\n type ParallaxOpts, type PlaneMap,\n} from 'core/viewport/parallax';\nimport type { View } from 'core/viewport/view';\nimport type { PoseDescriptor } from 'core/geometry/poseDescriptor';\nimport type { NodeAtPointDep, SnapDep, ViewApi } from './depSchema';\n\ntype Point = { x: number; y: number };\n\n/** Which scene layer an invocation edits, read once as it starts, from its\n * deps and — for a drag — the affordance it grabbed. `undefined` means none:\n * the action runs in the camera's world. */\nexport type EditedLayerOf = (deps: ActionDeps, affordance?: AffordanceHit) => string | undefined;\n\nconst layerOfNode = (deps: ActionDeps, id: string | null | undefined): string | undefined =>\n (id ? deps.scene?.get(asNodeId(id))?.layer : undefined);\n\n/** The layer of the node a selection edit acts on: the affordance's target\n * when the drag grabbed one, the first selected node otherwise. A selection\n * spanning planes is edited in that one node's plane. */\nexport const selectionLayer: EditedLayerOf = (deps, affordance) => {\n const selection = deps.selection;\n for (const id of [...(affordance?.targetIds ?? []), ...(selection?.get() ?? [])]) {\n const layer = layerOfNode(deps, id);\n if (layer !== undefined) return layer;\n }\n return undefined;\n};\n\n/** The layer the `insert` dep will put a new node on. */\nexport const insertLayer: EditedLayerOf = (deps) =>\n deps.insert?.layer?.();\n\n/** The layer of the path in anchor-edit mode. */\nexport const editingLayer: EditedLayerOf = (deps) =>\n layerOfNode(deps, deps.editAnchors?.editingId);\n\n/** How the world an invocation edits in maps into the world `layer`'s nodes\n * are stored in, read now. Null when they are the same world. */\nexport function planeOf(view: unknown, layer: string): PlaneMap | null {\n return (view as ViewApi | undefined)?.planeOf?.(layer) ?? null;\n}\n\n/** `m` run backwards; null stays null. */\nexport function invertPlane(m: PlaneMap | null): PlaneMap | null {\n return m && planeToPlane(m, null);\n}\n\n/** `pose` carried through `m`. The map is axis-aligned, so remapping the\n * pose's bounds carries it exactly when the map scales both axes alike. */\nexport function carryPose<P>(d: PoseDescriptor<P>, pose: P, m: PlaneMap | null): P {\n if (m === null) return pose;\n const b = d.getBounds(pose);\n return d.remapBounds(pose, b, rectToPlane(m, b));\n}\n\n/** `action`, with its input carried into the plane of the layer `layerOf`\n * names. An action in a scene with no `parallax` layer, or invoked with no\n * scene or view to read a plane from, runs exactly as it would unwrapped.\n *\n * An ongoing action's drag is carried as a whole. An immediate one's world\n * point is `params.worldX` / `params.worldY`, the dispatcher's convention for\n * a click; it is carried when present. */\nexport function inPlane<A extends Action>(action: A, layerOf: EditedLayerOf): A {\n const inner = action.invoker;\n if (!inner) return action;\n const declared = action.requires ?? [];\n const requires = [...new Set([...declared, 'scene', 'selection', 'view'])];\n if (inner.timing === 'immediate') {\n return {\n ...action,\n requires,\n invoker: {\n timing: 'immediate',\n run(deps: ActionDeps, params?: Record<string, unknown>): void {\n const plane = livePlane(deps, layerOf(deps), declared, null);\n if (plane === null) return inner.run(deps, params);\n const wx = params?.['worldX'];\n const wy = params?.['worldY'];\n const at = typeof wx === 'number' && typeof wy === 'number'\n ? toPlane(plane.map(), { x: wx, y: wy })\n : null;\n inner.run(plane.deps, at ? { ...params, worldX: at.x, worldY: at.y } : params);\n },\n },\n } as A;\n }\n return {\n ...action,\n requires,\n invoker: {\n timing: 'ongoing',\n start(ctx: InvocationCtx, opts?: BindingOpts): OngoingHandle {\n const plane = livePlane(\n ctx.deps, layerOf(ctx.deps, ctx.drag?.affordance), declared, ctx.drag?.start ?? null,\n );\n if (plane === null) return inner.start(ctx, opts);\n return planeHandle(inner.start(plane.carry(ctx), opts), plane);\n },\n },\n } as A;\n}\n\ninterface LivePlane {\n map(): PlaneMap;\n /** The invocation's deps, speaking the plane's world. */\n deps: ActionDeps;\n /** `ctx` in the plane's world. */\n carry(ctx: InvocationCtx): InvocationCtx;\n}\n\nfunction livePlane(\n bag: ActionDeps,\n layer: string | undefined,\n /** What the wrapped action declared. The dispatcher's dev deps bag throws\n * on any other read, so the seam converts only the deps it can see. */\n declared: readonly string[],\n /** The drag's press point in the camera's world, when there is a drag. */\n pressedAt: Point | null,\n): LivePlane | null {\n const scene = bag.scene as Scene<unknown, string, unknown> | undefined;\n const viewApi = bag.view as ViewApi | undefined;\n if (layer === undefined || !scene || !viewApi) return null;\n if (!scene.layers.some((l) => l.parallax !== undefined)) return null;\n const parallaxOf = (id: string): ParallaxOpts | undefined => scene.layers.find((l) => l.id === id)?.parallax;\n const parallax = (): ParallaxOpts | undefined => parallaxOf(layer);\n\n const IDENTITY: PlaneMap = { scale: { x: 1, y: 1 }, offset: { x: 0, y: 0 } };\n const map = (): PlaneMap => {\n const p = parallax();\n return p ? planeMap(viewApi.get(), p) : IDENTITY;\n };\n\n // A screen-pixel tolerance, and anything else an action reads off the\n // camera, has to be read at the plane's scale.\n const planeView = Object.defineProperties(Object.create(viewApi), {\n get: {\n value: (): View => {\n const p = parallax();\n const camera = viewApi.get();\n return p ? deriveParallaxView(camera, p) : camera;\n },\n },\n plane: { value: map },\n planeOf: {\n value: (id: string): PlaneMap | null => {\n const edited = parallax();\n const own = parallaxOf(id);\n const camera = viewApi.get();\n return planeToPlane(edited ? planeMap(camera, edited) : null, own ? planeMap(camera, own) : null);\n },\n },\n }) as ViewApi;\n\n // Over the dispatcher's bag rather than a copy of it, so every other read\n // still goes through whatever checks the bag makes.\n const deps = Object.create(bag) as typeof bag;\n const override = (name: string, value: unknown) =>\n Object.defineProperty(deps, name, { value, enumerable: true });\n override('view', planeView);\n const nodeAtPoint = declared.includes('nodeAtPoint')\n ? bag.nodeAtPoint as NodeAtPointDep | undefined\n : undefined;\n if (nodeAtPoint) {\n override('nodeAtPoint', ((p, exclude) => nodeAtPoint(fromPlane(map(), p), exclude)) as NodeAtPointDep);\n }\n const snap = declared.includes('snap') ? bag.snap as SnapDep | undefined : undefined;\n if (snap) {\n override('snap', { point: (p: Point) => toPlane(map(), snap.point(fromPlane(map(), p))) } as SnapDep);\n }\n\n // The drag's origin, fixed in the plane at the moment it was pressed: where\n // the pointer went down on the node is where the node was grabbed, whatever\n // the camera does after.\n const start0 = pressedAt ? toPlane(map(), pressedAt) : null;\n const trail = trailCarrier();\n\n return {\n map,\n deps,\n carry(c) {\n const m = map();\n const out: InvocationCtx = { ...c, world: toPlane(m, c.world) };\n if (c.drag) {\n const start = start0 ?? toPlane(m, c.drag.start);\n const current = toPlane(m, c.drag.current);\n const aff = c.drag.affordance;\n out.drag = {\n ...c.drag,\n start,\n current,\n delta: { x: current.x - start.x, y: current.y - start.y },\n ...(c.drag.points ? { points: trail(c.drag.points, m) } : {}),\n ...(aff?.fixedPoint ? { affordance: { ...aff, fixedPoint: toPlane(m, aff.fixedPoint) } } : {}),\n };\n }\n // The dispatcher hands `onMove` no deps; only `start` has any to carry.\n if (c.deps) out.deps = deps;\n return out;\n },\n };\n}\n\n/** The drag trail in the plane. The dispatcher grows its trail in place, so\n * only the samples added since the last call are mapped — unless the map\n * moved, when every sample is. */\nfunction trailCarrier(): (points: DragSample[], m: PlaneMap) => DragSample[] {\n let src: DragSample[] | null = null;\n let lastMap: PlaneMap | null = null;\n let out: DragSample[] = [];\n return (points, m) => {\n const same = lastMap !== null\n && lastMap.scale.x === m.scale.x && lastMap.scale.y === m.scale.y\n && lastMap.offset.x === m.offset.x && lastMap.offset.y === m.offset.y;\n if (points !== src || !same || points.length < out.length) {\n src = points;\n out = [];\n }\n lastMap = m;\n for (let i = out.length; i < points.length; i++) {\n out.push({ ...points[i], ...toPlane(m, points[i]) });\n }\n // A copy, so a snapshot taken on `onEnd` is not the live accumulator.\n return out.slice();\n };\n}\n\nfunction planeHandle(handle: OngoingHandle, plane: LivePlane): OngoingHandle {\n const out: OngoingHandle = { ...handle };\n if (handle.onMove) out.onMove = (c) => handle.onMove!(plane.carry(c));\n if (handle.onEnd) out.onEnd = (c, reason) => handle.onEnd!(plane.carry(c), reason);\n if (handle.overlay) {\n out.overlay = () => {\n const ov = handle.overlay!();\n return ov ? overlayFromPlane(ov, plane.map()) : ov;\n };\n }\n return out;\n}\n\n/** An overlay drawn in the plane, in the camera's world: what every painter\n * reads an overlay as. */\nfunction overlayFromPlane(ov: OngoingOverlay, m: PlaneMap): OngoingOverlay {\n const pt = (p: Point) => fromPlane(m, p);\n switch (ov.kind) {\n case 'marquee':\n return { ...ov, start: pt(ov.start), current: pt(ov.current) };\n case 'lasso':\n return { ...ov, vertices: ov.vertices.map(pt), current: pt(ov.current) };\n case 'polyline':\n return { ...ov, points: ov.points.map(pt) };\n case 'insertPreview':\n return {\n ...ov,\n bounds: rectFromPlane(m, ov.bounds),\n extras: insertExtrasFromPlane(ov.extras, m),\n ...(ov.anchorPoint ? { anchorPoint: pt(ov.anchorPoint) } : {}),\n };\n }\n}\n\n/** The geometry the kit's insert kinds carry in `extras`, in the camera's\n * world. A consumer kind's extras are opaque, and pass through. */\nfunction insertExtrasFromPlane(extras: unknown, m: PlaneMap): unknown {\n if (extras === null || typeof extras !== 'object') return extras;\n const e = extras as Record<string, unknown>;\n const pt = (p: unknown) => fromPlane(m, p as Point);\n // Radial kinds inscribe in a square, so one scale carries a radius.\n const r = (v: unknown) => (typeof v === 'number' ? v / ((m.scale.x + m.scale.y) / 2) : v);\n const out: Record<string, unknown> = { ...e };\n if (e['a'] && e['b']) { out['a'] = pt(e['a']); out['b'] = pt(e['b']); }\n if (e['center']) out['center'] = pt(e['center']);\n if ('radius' in e) out['radius'] = r(e['radius']);\n if ('outerRadius' in e) out['outerRadius'] = r(e['outerRadius']);\n if (Array.isArray(e['samples'])) {\n out['samples'] = (e['samples'] as DragSample[]).map((s) => ({ ...s, ...pt(s) }));\n }\n return out;\n}\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"planeInput.js","names":["layerOfNode","id","deps","asNodeId","selectionLayer","selection","affordance","layer","insertLayer","editingLayer","planeOf","view","invertPlane","m","planeToPlane","carryPose","pose","b","d","rectToPlane","inPlane","inner","action","declared","requires","plane","livePlane","layerOf","params","wx","\"worldX\"","wy","\"worldY\"","at","toPlane","ctx","opts","planeHandle","scene","bag","viewApi","l","parallaxOf","parallax","IDENTITY","map","p","planeMap","planeView","camera","deriveParallaxView","edited","own","override","name","nodeAtPoint","fromPlane","exclude","snap","start0","pressedAt","trail","trailCarrier","out","c","start","current","aff","src","lastMap","same","points","i","handle","reason","ov","overlayFromPlane","pt","rectFromPlane","insertExtrasFromPlane","extras","e","r","v","\"a\"","\"b\"","\"center\"","\"radius\"","\"outerRadius\"","\"samples\"","s"],"sources":["../../../src/interactions/actions/planeInput.ts"],"sourcesContent":["/**\n * Editing a node on a parallax plane.\n *\n * The dispatcher hands every action the camera's world. A node on a layer\n * carrying `parallax` stores its pose in its plane's world, which the camera's\n * reaches through a `PlaneMap` that changes with the camera. An editing action\n * pairs the pointer with the pose it edits, so the two have to be in one world.\n *\n * `inPlane` wraps an action so its input is carried into the plane of the\n * layer it edits before the action reads it, and the chrome it publishes back\n * comes out in the camera's world. A dep that answers in world points\n * (`nodeAtPoint`, `snap`) keeps speaking the camera's world, and the seam\n * converts at its boundary.\n *\n * A selection can span planes. The edit is measured in one of them, and a\n * node on another is carried into it as the gesture starts and back out\n * through `planeOf` as it is now.\n *\n * The map is read afresh on every call: a camera panning under a held drag, or\n * a plane whose factors are being animated, moves the node with the pointer.\n */\nimport type {\n Action, ActionDeps, AffordanceHit, BindingOpts, DragSample, InvocationCtx, OngoingHandle,\n OngoingOverlay,\n} from '@weasel-js/routing';\nimport type { Scene } from 'core/scene/types';\nimport { asNodeId } from 'core/scene/types';\nimport {\n deriveParallaxView, fromPlane, planeMap, planeToPlane, rectFromPlane, rectToPlane, toPlane,\n type ParallaxOpts, type PlaneMap,\n} from 'core/viewport/parallax';\nimport type { View } from 'core/viewport/view';\nimport type { PoseDescriptor } from 'core/geometry/poseDescriptor';\nimport type { NodeAtPointDep, SnapDep, ViewApi } from './depSchema';\n\ntype Point = { x: number; y: number };\n\n/** Which scene layer an invocation edits, read once as it starts. `undefined`\n * means none: the action runs in the camera's world. */\nexport type EditedLayerOf = (deps: ActionDeps, affordance?: AffordanceHit) => string | undefined;\n\nconst layerOfNode = (deps: ActionDeps, id: string | null | undefined): string | undefined =>\n (id ? deps.scene?.get(asNodeId(id))?.layer : undefined);\n\n/** The layer of the node a selection edit acts on: the affordance's target\n * when the drag grabbed one, the first selected node otherwise. A selection\n * spanning planes is edited in that one node's plane. */\nexport const selectionLayer: EditedLayerOf = (deps, affordance) => {\n const selection = deps.selection;\n for (const id of [...(affordance?.targetIds ?? []), ...(selection?.get() ?? [])]) {\n const layer = layerOfNode(deps, id);\n if (layer !== undefined) return layer;\n }\n return undefined;\n};\n\n/** The layer the `insert` dep will put a new node on. */\nexport const insertLayer: EditedLayerOf = (deps) =>\n deps.insert?.layer?.();\n\n/** The layer of the path in anchor-edit mode. */\nexport const editingLayer: EditedLayerOf = (deps) =>\n layerOfNode(deps, deps.editAnchors?.editingId);\n\n/** How the world an invocation edits in maps into the world `layer`'s nodes\n * are stored in, read now. Null when they are the same world. */\nexport function planeOf(view: unknown, layer: string): PlaneMap | null {\n return (view as ViewApi | undefined)?.planeOf?.(layer) ?? null;\n}\n\n/** `m` run backwards; null stays null. */\nexport function invertPlane(m: PlaneMap | null): PlaneMap | null {\n return m && planeToPlane(m, null);\n}\n\n/** `pose` carried through `m`. The map is axis-aligned, so remapping the\n * pose's bounds carries it exactly when the map scales both axes alike. */\nexport function carryPose<P>(d: PoseDescriptor<P>, pose: P, m: PlaneMap | null): P {\n if (m === null) return pose;\n const b = d.getBounds(pose);\n return d.remapBounds(pose, b, rectToPlane(m, b));\n}\n\n/** `action`, with its input carried into the plane of the layer `layerOf`\n * names. An action in a scene with no `parallax` layer, or invoked with no\n * scene or view to read a plane from, runs exactly as it would unwrapped.\n *\n * An immediate action's world point is `params.worldX` / `params.worldY`,\n * the dispatcher's convention for a click; it is carried when present. */\nexport function inPlane<A extends Action>(action: A, layerOf: EditedLayerOf): A {\n const inner = action.invoker;\n if (!inner) return action;\n const declared = action.requires ?? [];\n const requires = [...new Set([...declared, 'scene', 'selection', 'view'])];\n if (inner.timing === 'immediate') {\n return {\n ...action,\n requires,\n invoker: {\n timing: 'immediate',\n run(deps: ActionDeps, params?: Record<string, unknown>): void {\n const plane = livePlane(deps, layerOf(deps), declared, null);\n if (plane === null) return inner.run(deps, params);\n const wx = params?.['worldX'];\n const wy = params?.['worldY'];\n const at = typeof wx === 'number' && typeof wy === 'number'\n ? toPlane(plane.map(), { x: wx, y: wy })\n : null;\n inner.run(plane.deps, at ? { ...params, worldX: at.x, worldY: at.y } : params);\n },\n },\n } as A;\n }\n return {\n ...action,\n requires,\n invoker: {\n timing: 'ongoing',\n start(ctx: InvocationCtx, opts?: BindingOpts): OngoingHandle {\n const plane = livePlane(\n ctx.deps, layerOf(ctx.deps, ctx.drag?.affordance), declared, ctx.drag?.start ?? null,\n );\n if (plane === null) return inner.start(ctx, opts);\n return planeHandle(inner.start(plane.carry(ctx), opts), plane);\n },\n },\n } as A;\n}\n\ninterface LivePlane {\n map(): PlaneMap;\n /** The invocation's deps, speaking the plane's world. */\n deps: ActionDeps;\n /** `ctx` in the plane's world. */\n carry(ctx: InvocationCtx): InvocationCtx;\n}\n\nfunction livePlane(\n bag: ActionDeps,\n layer: string | undefined,\n /** What the wrapped action declared. The dispatcher's dev deps bag throws\n * on any other read, so the seam converts only the deps it can see. */\n declared: readonly string[],\n /** The drag's press point in the camera's world, when there is a drag. */\n pressedAt: Point | null,\n): LivePlane | null {\n const scene = bag.scene as Scene<unknown, string, unknown> | undefined;\n const viewApi = bag.view as ViewApi | undefined;\n if (layer === undefined || !scene || !viewApi) return null;\n if (!scene.layers.some((l) => l.parallax !== undefined)) return null;\n const parallaxOf = (id: string): ParallaxOpts | undefined => scene.layers.find((l) => l.id === id)?.parallax;\n const parallax = (): ParallaxOpts | undefined => parallaxOf(layer);\n\n const IDENTITY: PlaneMap = { scale: { x: 1, y: 1 }, offset: { x: 0, y: 0 } };\n const map = (): PlaneMap => {\n const p = parallax();\n return p ? planeMap(viewApi.get(), p) : IDENTITY;\n };\n\n // A screen-pixel tolerance, and anything else an action reads off the\n // camera, has to be read at the plane's scale.\n const planeView = Object.defineProperties(Object.create(viewApi), {\n get: {\n value: (): View => {\n const p = parallax();\n const camera = viewApi.get();\n return p ? deriveParallaxView(camera, p) : camera;\n },\n },\n plane: { value: map },\n planeOf: {\n value: (id: string): PlaneMap | null => {\n const edited = parallax();\n const own = parallaxOf(id);\n const camera = viewApi.get();\n return planeToPlane(edited ? planeMap(camera, edited) : null, own ? planeMap(camera, own) : null);\n },\n },\n }) as ViewApi;\n\n // Over the dispatcher's bag rather than a copy of it, so every other read\n // still goes through whatever checks the bag makes.\n const deps = Object.create(bag) as typeof bag;\n const override = (name: string, value: unknown) =>\n Object.defineProperty(deps, name, { value, enumerable: true });\n override('view', planeView);\n const nodeAtPoint = declared.includes('nodeAtPoint')\n ? bag.nodeAtPoint as NodeAtPointDep | undefined\n : undefined;\n if (nodeAtPoint) {\n override('nodeAtPoint', ((p, exclude) => nodeAtPoint(fromPlane(map(), p), exclude)) as NodeAtPointDep);\n }\n const snap = declared.includes('snap') ? bag.snap as SnapDep | undefined : undefined;\n if (snap) {\n override('snap', { point: (p: Point) => toPlane(map(), snap.point(fromPlane(map(), p))) } as SnapDep);\n }\n\n // The drag's origin, fixed in the plane at the moment it was pressed,\n // whatever the camera does after.\n const start0 = pressedAt ? toPlane(map(), pressedAt) : null;\n const trail = trailCarrier();\n\n return {\n map,\n deps,\n carry(c) {\n const m = map();\n const out: InvocationCtx = { ...c, world: toPlane(m, c.world) };\n if (c.drag) {\n const start = start0 ?? toPlane(m, c.drag.start);\n const current = toPlane(m, c.drag.current);\n const aff = c.drag.affordance;\n out.drag = {\n ...c.drag,\n start,\n current,\n delta: { x: current.x - start.x, y: current.y - start.y },\n ...(c.drag.points ? { points: trail(c.drag.points, m) } : {}),\n ...(aff?.fixedPoint ? { affordance: { ...aff, fixedPoint: toPlane(m, aff.fixedPoint) } } : {}),\n };\n }\n // The dispatcher hands `onMove` no deps; only `start` has any to carry.\n if (c.deps) out.deps = deps;\n return out;\n },\n };\n}\n\n/** The drag trail in the plane. The dispatcher grows its trail in place, so\n * only the samples added since the last call are mapped — unless the map\n * moved, when every sample is. */\nfunction trailCarrier(): (points: DragSample[], m: PlaneMap) => DragSample[] {\n let src: DragSample[] | null = null;\n let lastMap: PlaneMap | null = null;\n let out: DragSample[] = [];\n return (points, m) => {\n const same = lastMap !== null\n && lastMap.scale.x === m.scale.x && lastMap.scale.y === m.scale.y\n && lastMap.offset.x === m.offset.x && lastMap.offset.y === m.offset.y;\n if (points !== src || !same || points.length < out.length) {\n src = points;\n out = [];\n }\n lastMap = m;\n for (let i = out.length; i < points.length; i++) {\n out.push({ ...points[i], ...toPlane(m, points[i]) });\n }\n // A copy, so a snapshot taken on `onEnd` is not the live accumulator.\n return out.slice();\n };\n}\n\nfunction planeHandle(handle: OngoingHandle, plane: LivePlane): OngoingHandle {\n const out: OngoingHandle = { ...handle };\n if (handle.onMove) out.onMove = (c) => handle.onMove!(plane.carry(c));\n if (handle.onEnd) out.onEnd = (c, reason) => handle.onEnd!(plane.carry(c), reason);\n if (handle.overlay) {\n out.overlay = () => {\n const ov = handle.overlay!();\n return ov ? overlayFromPlane(ov, plane.map()) : ov;\n };\n }\n return out;\n}\n\n/** An overlay drawn in the plane, in the camera's world: what every painter\n * reads an overlay as. */\nfunction overlayFromPlane(ov: OngoingOverlay, m: PlaneMap): OngoingOverlay {\n const pt = (p: Point) => fromPlane(m, p);\n switch (ov.kind) {\n case 'marquee':\n return { ...ov, start: pt(ov.start), current: pt(ov.current) };\n case 'lasso':\n return { ...ov, vertices: ov.vertices.map(pt), current: pt(ov.current) };\n case 'polyline':\n return { ...ov, points: ov.points.map(pt) };\n case 'insertPreview':\n return {\n ...ov,\n bounds: rectFromPlane(m, ov.bounds),\n extras: insertExtrasFromPlane(ov.extras, m),\n ...(ov.anchorPoint ? { anchorPoint: pt(ov.anchorPoint) } : {}),\n };\n }\n}\n\n/** The geometry the kit's insert kinds carry in `extras`, in the camera's\n * world. A consumer kind's extras are opaque, and pass through. */\nfunction insertExtrasFromPlane(extras: unknown, m: PlaneMap): unknown {\n if (extras === null || typeof extras !== 'object') return extras;\n const e = extras as Record<string, unknown>;\n const pt = (p: unknown) => fromPlane(m, p as Point);\n // Radial kinds inscribe in a square, so one scale carries a radius.\n const r = (v: unknown) => (typeof v === 'number' ? v / ((m.scale.x + m.scale.y) / 2) : v);\n const out: Record<string, unknown> = { ...e };\n if (e['a'] && e['b']) { out['a'] = pt(e['a']); out['b'] = pt(e['b']); }\n if (e['center']) out['center'] = pt(e['center']);\n if ('radius' in e) out['radius'] = r(e['radius']);\n if ('outerRadius' in e) out['outerRadius'] = r(e['outerRadius']);\n if (Array.isArray(e['samples'])) {\n out['samples'] = (e['samples'] as DragSample[]).map((s) => ({ ...s, ...pt(s) }));\n }\n return out;\n}\n"],"mappings":"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"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
//#region src/interactions/actions/pointerState.ts
|
|
2
|
+
function e(e, t) {
|
|
3
|
+
let n = {
|
|
4
|
+
worldX: e.x,
|
|
5
|
+
worldY: e.y
|
|
6
|
+
};
|
|
7
|
+
return t.screen && (n.clientX = t.screen.x, n.clientY = t.screen.y), n;
|
|
8
|
+
}
|
|
9
|
+
//#endregion
|
|
10
|
+
export { e as pointerStateOf };
|
|
11
|
+
|
|
12
|
+
//# sourceMappingURL=pointerState.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"pointerState.js","names":["pointerStateOf","pointer","world","ctx"],"sources":["../../../src/interactions/actions/pointerState.ts"],"sourcesContent":["import type { InvocationCtx, Point2 } from '@weasel-js/routing';\nimport type { PointerState } from '../gestures/types';\n\n/** The pointer a behavior is told: `world`, and the client point `ctx` carries, if any. */\nexport function pointerStateOf(world: Point2, ctx: Pick<InvocationCtx, 'screen'>): PointerState {\n const pointer: PointerState = { worldX: world.x, worldY: world.y };\n if (ctx.screen) {\n pointer.clientX = ctx.screen.x;\n pointer.clientY = ctx.screen.y;\n }\n return pointer;\n}\n"],"mappings":";AAIA,SAAgBA,EAAe,GAAe,GAAkD;CAC9F,IAAMC,IAAwB;EAAE,QAAQC,EAAM;EAAG,QAAQA,EAAM;CAAE;CAKjE,OAJIC,EAAI,WACN,EAAQ,UAAUA,EAAI,OAAO,GAC7B,EAAQ,UAAUA,EAAI,OAAO,IAExBF;AACT"}
|
|
@@ -1,9 +1,21 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { poseDescriptorForNode as e } from "../../core/geometry/poseDescriptor.js";
|
|
2
|
+
import { AUTO_POSE_DESCRIPTOR as t } from "../../core/geometry/autoPoseDescriptor.js";
|
|
2
3
|
//#region src/interactions/actions/poseDescriptorDep.ts
|
|
3
|
-
function
|
|
4
|
-
return
|
|
4
|
+
function n(e) {
|
|
5
|
+
return e ?? t;
|
|
6
|
+
}
|
|
7
|
+
function r(t, n) {
|
|
8
|
+
let r = /* @__PURE__ */ new Map();
|
|
9
|
+
return (i) => {
|
|
10
|
+
let a = r.get(i);
|
|
11
|
+
if (a === void 0) {
|
|
12
|
+
let o = t.get(i);
|
|
13
|
+
a = o === void 0 ? n : e(n, o), r.set(i, a);
|
|
14
|
+
}
|
|
15
|
+
return a;
|
|
16
|
+
};
|
|
5
17
|
}
|
|
6
18
|
//#endregion
|
|
7
|
-
export {
|
|
19
|
+
export { r as nodeDescriptors, n as poseDescriptorOf };
|
|
8
20
|
|
|
9
21
|
//# sourceMappingURL=poseDescriptorDep.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"poseDescriptorDep.js","names":["poseDescriptorOf","dep","AUTO_POSE_DESCRIPTOR"],"sources":["../../../src/interactions/actions/poseDescriptorDep.ts"],"sourcesContent":["import type { PoseDescriptor } from './resize/geometry';\nimport { AUTO_POSE_DESCRIPTOR } from '
|
|
1
|
+
{"version":3,"file":"poseDescriptorDep.js","names":["poseDescriptorOf","dep","AUTO_POSE_DESCRIPTOR","nodeDescriptors","resolved","d","id","node","scene","descriptor","poseDescriptorForNode"],"sources":["../../../src/interactions/actions/poseDescriptorDep.ts"],"sourcesContent":["import type { NodeId, Scene } from 'core/scene/types';\nimport { poseDescriptorForNode, type PoseDescriptor } from './resize/geometry';\nimport { AUTO_POSE_DESCRIPTOR } from 'core/geometry/autoPoseDescriptor';\n\n/** The `poseDescriptor` dep's value, or the auto descriptor when unsourced. */\nexport function poseDescriptorOf(dep: unknown): PoseDescriptor<unknown> {\n return (dep as PoseDescriptor<unknown> | undefined) ?? AUTO_POSE_DESCRIPTOR;\n}\n\n/**\n * A reader of each node's own descriptor (`PoseDescriptor.forNode`), resolved\n * once per id. An action builds one where it captures its start poses and\n * reads and writes every pose through it, so a node measured as its own shape\n * is written as that shape too. An id that is not a scene node, such as a\n * multi-selection's stand-in target, reads through `descriptor` itself.\n */\nexport function nodeDescriptors(\n scene: Scene<unknown, string, unknown>,\n descriptor: PoseDescriptor<unknown>,\n): (id: NodeId | string) => PoseDescriptor<unknown> {\n const resolved = new Map<string, PoseDescriptor<unknown>>();\n return (id) => {\n let d = resolved.get(id);\n if (d === undefined) {\n const node = scene.get(id as NodeId);\n d = node === undefined ? descriptor : poseDescriptorForNode(descriptor, node);\n resolved.set(id, d);\n }\n return d;\n };\n}\n"],"mappings":";;;AAKA,SAAgBA,EAAiB,GAAuC;CACtE,OAAQC,KAA+CC;AACzD;AASA,SAAgBC,EACd,GACA,GACkD;CAClD,IAAMC,oBAAW,IAAI,IAAqC;CAC1D,QAAQ,MAAO;EACb,IAAIC,IAAID,EAAS,IAAIE,CAAE;EACvB,IAAID,MAAM,KAAA,GAAW;GACnB,IAAME,IAAOC,EAAM,IAAIF,CAAY;GAEnC,AADA,IAAIC,MAAS,KAAA,IAAYE,IAAaC,EAAsBD,GAAYF,CAAI,GAC5EH,EAAS,IAAIE,GAAID,CAAC;EACpB;EACA,OAAOA;CACT;AACF"}
|
|
@@ -1,36 +1,41 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import { definesFrame as
|
|
1
|
+
import { composeWorldPose as e, frameAtOrAbove as t, rebaseLocalPose as n } from "../../core/scene/composeFrame.js";
|
|
2
|
+
import { definesFrame as r, effectivePose as i } from "../../core/scene/effectivePose.js";
|
|
3
|
+
import { asNodeId as a } from "../../core/scene/types.js";
|
|
3
4
|
//#region src/interactions/actions/poseFrame.ts
|
|
4
|
-
function o(
|
|
5
|
+
function o(r, i) {
|
|
5
6
|
return {
|
|
6
7
|
pc: i,
|
|
7
|
-
world: (
|
|
8
|
-
|
|
9
|
-
let
|
|
10
|
-
return
|
|
8
|
+
world: (t) => e(r, t, i.compose),
|
|
9
|
+
frame: (e) => {
|
|
10
|
+
let n = t(r, r.getParent(e));
|
|
11
|
+
return n === null ? null : a(n);
|
|
11
12
|
},
|
|
12
|
-
|
|
13
|
-
|
|
13
|
+
parentWorld: (n) => {
|
|
14
|
+
let a = t(r, r.getParent(n));
|
|
15
|
+
return a === null ? null : e(r, a, i.compose);
|
|
16
|
+
},
|
|
17
|
+
local: (e, t) => n(r, t, r.getParent(e), i.compose, i.decompose),
|
|
18
|
+
localUnder: (e, t) => n(r, t, e, i.compose, i.decompose)
|
|
14
19
|
};
|
|
15
20
|
}
|
|
16
|
-
function s(
|
|
17
|
-
let
|
|
21
|
+
function s(e) {
|
|
22
|
+
let t = e.composition, n = e;
|
|
18
23
|
return o({
|
|
19
|
-
getPose: (
|
|
20
|
-
let
|
|
21
|
-
return
|
|
24
|
+
getPose: (t) => {
|
|
25
|
+
let r = e.get(t);
|
|
26
|
+
return r === void 0 ? {
|
|
22
27
|
x: 0,
|
|
23
28
|
y: 0,
|
|
24
29
|
width: 0,
|
|
25
30
|
height: 0
|
|
26
|
-
} :
|
|
31
|
+
} : i(n, r);
|
|
27
32
|
},
|
|
28
|
-
getParent: (
|
|
29
|
-
definesFrame: (
|
|
30
|
-
let n =
|
|
31
|
-
return n === void 0 ||
|
|
33
|
+
getParent: (t) => e.get(t)?.parent ?? null,
|
|
34
|
+
definesFrame: (t) => {
|
|
35
|
+
let n = e.get(t);
|
|
36
|
+
return n === void 0 || r(n);
|
|
32
37
|
}
|
|
33
|
-
},
|
|
38
|
+
}, t);
|
|
34
39
|
}
|
|
35
40
|
//#endregion
|
|
36
41
|
export { o as poseFrame, s as scenePoseFrame };
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"poseFrame.js","names":["poseFrame","composeWorldPose","adapter","id","pc","frame","frameAtOrAbove","rebaseLocalPose","worldPose","parentId","scenePoseFrame","
|
|
1
|
+
{"version":3,"file":"poseFrame.js","names":["poseFrame","composeWorldPose","adapter","id","pc","frame","frameAtOrAbove","asNodeId","rebaseLocalPose","worldPose","parentId","scenePoseFrame","scene","source","node","effectivePose","definesFrame"],"sources":["../../../src/interactions/actions/poseFrame.ts"],"sourcesContent":["/**\n * World reads and local writes, paired, for the default actions.\n *\n * A container's pose defines a frame, so a node's stored pose is expressed in\n * its parent's. The geometry an action reasons about is world; every pose it\n * writes back through `setPose` or a pose op is local. An action that reads\n * world and writes world looks right for one gesture and drifts on the next,\n * because the stored pose is then read in the parent's frame again.\n *\n * Under `IDENTITY_POSE_COMPOSITION`, the default, local and world are the same\n * value. `core/scene/frameFixture.ts` is the scene where they differ.\n */\nimport { definesFrame, effectivePose, type PoseSource } from 'core/scene/effectivePose';\nimport { asNodeId, type NodeId, type Scene } from 'core/scene/types';\nimport {\n composeWorldPose,\n frameAtOrAbove,\n rebaseLocalPose,\n type PoseAdapter,\n type PoseComposition,\n} from 'core/scene/composePose';\n\n/** The two directions an action needs, over one composition strategy. */\nexport interface PoseFrame<TPose> {\n /** The strategy in force. `closure` says what it can express exactly. */\n readonly pc: PoseComposition<TPose>;\n /** `id`'s pose in world coordinates, honoring an in-flight gesture override. */\n world(id: NodeId): TPose;\n /** The node whose frame `id` is stored in, or `null` for the root frame. */\n frame(id: NodeId): NodeId | null;\n /** World pose of the frame `id` is stored in, or `null` for the root frame. */\n parentWorld(id: NodeId): TPose | null;\n /** `worldPose` expressed in `id`'s own parent frame — what `setPose` stores. */\n local(id: NodeId, worldPose: TPose): TPose;\n /** `worldPose` expressed under `parentId`'s frame. For a node about to be\n * reparented, whose current parent is not the frame it will be stored in. */\n localUnder(parentId: NodeId | null, worldPose: TPose): TPose;\n}\n\n/** Pair the two directions over an arbitrary pose adapter. */\nexport function poseFrame<TPose>(\n adapter: PoseAdapter<TPose>,\n pc: PoseComposition<TPose>,\n): PoseFrame<TPose> {\n return {\n pc,\n world: (id) => composeWorldPose(adapter, id as string, pc.compose),\n frame: (id) => {\n const frame = frameAtOrAbove(adapter, adapter.getParent(id as string));\n return frame === null ? null : asNodeId(frame);\n },\n parentWorld: (id) => {\n const frame = frameAtOrAbove(adapter, adapter.getParent(id as string));\n return frame === null ? null : composeWorldPose(adapter, frame, pc.compose);\n },\n local: (id, worldPose) =>\n rebaseLocalPose(adapter, worldPose, adapter.getParent(id as string), pc.compose, pc.decompose),\n localUnder: (parentId, worldPose) =>\n rebaseLocalPose(adapter, worldPose, parentId as string | null, pc.compose, pc.decompose),\n };\n}\n\n/** The `poseFrame` a scene-backed action works in, over the scene's own\n * composition. Under IDENTITY every method is a no-op. */\nexport function scenePoseFrame(scene: Scene<unknown, string, unknown>): PoseFrame<unknown> {\n const pc = scene.composition;\n const source = scene as unknown as PoseSource<unknown>;\n const adapter: PoseAdapter<unknown> = {\n getPose: (id) => {\n const node = scene.get(id as NodeId);\n return node === undefined ? { x: 0, y: 0, width: 0, height: 0 } : effectivePose(source, node);\n },\n getParent: (id) => scene.get(id as NodeId)?.parent ?? null,\n definesFrame: (id) => {\n const node = scene.get(id as NodeId);\n return node === undefined || definesFrame(node);\n },\n };\n return poseFrame(adapter, pc);\n}\n"],"mappings":";;;;AAwCA,SAAgBA,EACd,GACA,GACkB;CAClB,OAAO;EACL;EACA,QAAQ,MAAOC,EAAiBC,GAASC,GAAcC,EAAG,OAAO;EACjE,QAAQ,MAAO;GACb,IAAMC,IAAQC,EAAeJ,GAASA,EAAQ,UAAUC,CAAY,CAAC;GACrE,OAAOE,MAAU,OAAO,OAAOE,EAASF,CAAK;EAC/C;EACA,cAAc,MAAO;GACnB,IAAMA,IAAQC,EAAeJ,GAASA,EAAQ,UAAUC,CAAY,CAAC;GACrE,OAAOE,MAAU,OAAO,OAAOJ,EAAiBC,GAASG,GAAOD,EAAG,OAAO;EAC5E;EACA,QAAQ,GAAI,MACVI,EAAgBN,GAASO,GAAWP,EAAQ,UAAUC,CAAY,GAAGC,EAAG,SAASA,EAAG,SAAS;EAC/F,aAAa,GAAU,MACrBI,EAAgBN,GAASO,GAAWC,GAA2BN,EAAG,SAASA,EAAG,SAAS;CAC3F;AACF;AAIA,SAAgBO,EAAe,GAA4D;CACzF,IAAMP,IAAKQ,EAAM,aACXC,IAASD;CAYf,OAAOZ,EAAU;EAVf,UAAU,MAAO;GACf,IAAMc,IAAOF,EAAM,IAAIT,CAAY;GACnC,OAAOW,MAAS,KAAA,IAAY;IAAE,GAAG;IAAG,GAAG;IAAG,OAAO;IAAG,QAAQ;GAAE,IAAIC,EAAcF,GAAQC,CAAI;EAC9F;EACA,YAAY,MAAOF,EAAM,IAAIT,CAAY,CAAC,EAAE,UAAU;EACtD,eAAe,MAAO;GACpB,IAAMW,IAAOF,EAAM,IAAIT,CAAY;GACnC,OAAOW,MAAS,KAAA,KAAaE,EAAaF,CAAI;EAChD;CAEe,GAASV,CAAE;AAC9B"}
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
import { closeGesture as e, runBehaviorCancel as t } from "../gestureLifecycle.js";
|
|
2
|
+
import { inPlane as n, selectionLayer as r } from "../planeInput.js";
|
|
3
|
+
import { commitResize as i } from "./commit.js";
|
|
4
|
+
import { nextFrame as a } from "./frame.js";
|
|
5
|
+
import { beginResize as o } from "./session.js";
|
|
6
|
+
//#region src/interactions/actions/resize/action.ts
|
|
7
|
+
var s = n({
|
|
8
|
+
id: "resize",
|
|
9
|
+
label: "Resize",
|
|
10
|
+
eligible: { capability: "transforms-selection" },
|
|
11
|
+
requires: [
|
|
12
|
+
"selection",
|
|
13
|
+
"scene",
|
|
14
|
+
"resizePolicy",
|
|
15
|
+
"poseDescriptor",
|
|
16
|
+
"applyOps",
|
|
17
|
+
"geometryProjection",
|
|
18
|
+
"view"
|
|
19
|
+
],
|
|
20
|
+
invoker: {
|
|
21
|
+
timing: "ongoing",
|
|
22
|
+
start(n, r) {
|
|
23
|
+
let s = o(n);
|
|
24
|
+
if (!s) return {};
|
|
25
|
+
let { session: c, readers: l } = s, u = c.scene.overrides.hold(), d = { previews: /* @__PURE__ */ new Map() };
|
|
26
|
+
return c.lifecycle.start(c.writeIds), {
|
|
27
|
+
kind: "resize",
|
|
28
|
+
onMove(e) {
|
|
29
|
+
e.drag && (d = a(c, l, e), u.set(d.previews));
|
|
30
|
+
},
|
|
31
|
+
onEnd(n, r) {
|
|
32
|
+
let a = !1;
|
|
33
|
+
try {
|
|
34
|
+
r === "commit" ? a = i(c, d) : t(c.constraints, c.gestureCtx);
|
|
35
|
+
} finally {
|
|
36
|
+
e({
|
|
37
|
+
hold: u,
|
|
38
|
+
previews: d.previews,
|
|
39
|
+
behaviors: c.constraints,
|
|
40
|
+
ctx: c.gestureCtx,
|
|
41
|
+
lifecycle: c.lifecycle
|
|
42
|
+
}, a);
|
|
43
|
+
}
|
|
44
|
+
},
|
|
45
|
+
previewIds: () => d.previews.keys(),
|
|
46
|
+
previewPose: (e) => d.previews.get(e) ?? null
|
|
47
|
+
};
|
|
48
|
+
}
|
|
49
|
+
},
|
|
50
|
+
enabled: () => !0
|
|
51
|
+
}, r);
|
|
52
|
+
//#endregion
|
|
53
|
+
export { s as resizeAction };
|
|
54
|
+
|
|
55
|
+
//# sourceMappingURL=action.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"action.js","names":["resizeAction","inPlane","begun","beginResize","ctx","hold","session","frame","moveCtx","nextFrame","readers","committed","reason","commitResize","runBehaviorCancel","id","selectionLayer"],"sources":["../../../../src/interactions/actions/resize/action.ts"],"sourcesContent":["import type { Action } from '@weasel-js/routing';\nimport type { InvocationCtx, OngoingHandle } from '@weasel-js/routing';\nimport type { NodeId } from 'core/scene/types';\nimport { closeGesture, runBehaviorCancel } from '../gestureLifecycle';\nimport { inPlane, selectionLayer } from '../planeInput';\nimport { commitResize } from './commit';\nimport { nextFrame } from './frame';\nimport { beginResize, type ResizeFrame } from './session';\n\n/**\n * @experimental\n * Anchor-relative drag resize, committed as one batch on release. It needs\n * `InvocationCtx.drag.affordance` with a `handle:*` kind.\n *\n * The optional `resizePolicy` dep carries the constraints, point snaps, and\n * `expandIds`; absent, the invoker falls back to the kit's default\n * constraints, no snap, and `ids => ids` expansion.\n */\nexport const resizeAction: Action & { requires: string[] } = inPlane({\n id: 'resize',\n label: 'Resize',\n // No default binding: a bare `{ kind: 'drag' }` claims every drag at ambient\n // scope. The resize handles bind it (`selectionResizeBindings`).\n eligible: { capability: 'transforms-selection' },\n requires: ['selection', 'scene', 'resizePolicy', 'poseDescriptor', 'applyOps', 'geometryProjection', 'view'],\n invoker: {\n timing: 'ongoing',\n start(ctx: InvocationCtx, _opts): OngoingHandle {\n const begun = beginResize(ctx);\n if (!begun) return {};\n const { session, readers } = begun;\n const hold = session.scene.overrides.hold();\n let frame: ResizeFrame = { previews: new Map() };\n session.lifecycle.start(session.writeIds as readonly string[]);\n return {\n kind: 'resize',\n onMove(moveCtx: InvocationCtx): void {\n if (!moveCtx.drag) return;\n frame = nextFrame(session, readers, moveCtx);\n hold.set(frame.previews);\n },\n onEnd(_endCtx: InvocationCtx, reason: 'commit' | 'cancel'): void {\n let committed = false;\n try {\n if (reason === 'commit') committed = commitResize(session, frame);\n else runBehaviorCancel(session.constraints, session.gestureCtx);\n } finally {\n closeGesture({ hold, previews: frame.previews, behaviors: session.constraints, ctx: session.gestureCtx, lifecycle: session.lifecycle }, committed);\n }\n },\n previewIds: () => frame.previews.keys(),\n previewPose: (id: string) => frame.previews.get(id as NodeId) ?? null,\n };\n },\n },\n /**\n * Always enabled: the dispatcher treats anything `!== true` as \"skip and\n * try the next match\", so a disabled reason here makes the resize binding\n * silently lose to lower-specificity matches (e.g. ambient `insertAction`).\n */\n enabled: () => true,\n}, selectionLayer);\n"],"mappings":";;;;;;AAkBA,IAAaA,IAAgDC,EAAQ;CACnE,IAAI;CACJ,OAAO;CAGP,UAAU,EAAE,YAAY,uBAAuB;CAC/C,UAAU;EAAC;EAAa;EAAS;EAAgB;EAAkB;EAAY;EAAsB;CAAM;CAC3G,SAAS;EACP,QAAQ;EACR,MAAM,GAAoB,GAAsB;GAC9C,IAAMC,IAAQC,EAAYC,CAAG;GAC7B,IAAI,CAACF,GAAO,OAAO,CAAC;GACpB,IAAM,EAAE,YAAS,eAAYA,GACvBG,IAAOC,EAAQ,MAAM,UAAU,KAAK,GACtCC,IAAqB,EAAE,0BAAU,IAAI,IAAI,EAAE;GAE/C,OADAD,EAAQ,UAAU,MAAMA,EAAQ,QAA6B,GACtD;IACL,MAAM;IACN,OAAO,GAA8B;KACnC,AAAKE,EAAQ,SACb,IAAQC,EAAUH,GAASI,GAASF,CAAO,GAC3CH,EAAK,IAAIE,EAAM,QAAQ;IACzB;IACA,MAAM,GAAwB,GAAmC;KAC/D,IAAII,IAAY;KAChB,IAAI;MACF,AAAIC,MAAW,WAAU,IAAYC,EAAaP,GAASC,CAAK,IAC3DO,EAAkBR,EAAQ,aAAaA,EAAQ,UAAU;KAChE,UAAU;MACR,EAAa;OAAE;OAAM,UAAUC,EAAM;OAAU,WAAWD,EAAQ;OAAa,KAAKA,EAAQ;OAAY,WAAWA,EAAQ;MAAU,GAAGK,CAAS;KACnJ;IACF;IACA,kBAAkBJ,EAAM,SAAS,KAAK;IACtC,cAAc,MAAeA,EAAM,SAAS,IAAIQ,CAAY,KAAK;GACnE;EACF;CACF;CAMA,eAAe;AACjB,GAAGC,CAAc"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"lockAspect.js","names":["lockAspectWithModifier","opts","ctx","key","origin","ratio","dw","pose","dh","nw","nh","anchor","nx","ny"],"sources":["../../../../../src/interactions/actions/resize/behaviors/lockAspect.ts"],"sourcesContent":["import type {\n ModifierState,\n BoundsConstraint,\n} from '../../../gestures/types';\nimport type { Bounds } from 'core/viewport/fitViewToBounds';\n\ntype ModKey = keyof ModifierState;\n\n/** Aspect-ratio lock: drag a corner/edge with `key` (default `'shift'`) held\n * to keep the resized bounds at the start-pose's `width / height` ratio.\n *\n *
|
|
1
|
+
{"version":3,"file":"lockAspect.js","names":["lockAspectWithModifier","opts","ctx","key","origin","ratio","dw","pose","dh","nw","nh","anchor","nx","ny"],"sources":["../../../../../src/interactions/actions/resize/behaviors/lockAspect.ts"],"sourcesContent":["import type {\n ModifierState,\n BoundsConstraint,\n} from '../../../gestures/types';\nimport type { Bounds } from 'core/viewport/fitViewToBounds';\n\ntype ModKey = keyof ModifierState;\n\n/** Aspect-ratio lock: drag a corner/edge with `key` (default `'shift'`) held\n * to keep the resized bounds at the start-pose's `width / height` ratio.\n *\n * On a corner handle the axis with the larger absolute delta wins and the\n * other follows from the ratio, with the opposite corner anchored. On an\n * edge handle the driven axis sets the other, which stays centered on the\n * origin. No-op when the origin has zero width or height.\n */\nexport function lockAspectWithModifier<TPose extends Bounds>(opts: {\n key?: ModKey;\n} = {}): BoundsConstraint<TPose> {\n const { key = 'shift' } = opts;\n\n return {\n onMove(ctx, { pose, anchor }) {\n if (!ctx.modifiers[key]) return;\n const origin = ctx.origin.get(ctx.draggedIds[0]) as Bounds | undefined;\n if (!origin) return;\n if (origin.width === 0 || origin.height === 0) return;\n const ratio = origin.width / origin.height; // w / h\n\n const dw = pose.width - origin.width;\n const dh = pose.height - origin.height;\n\n let nw: number;\n let nh: number;\n\n if (anchor.x === 'free' && anchor.y === 'free') {\n // No driven axis — nothing to lock against.\n return;\n } else if (anchor.x === 'free') {\n // Edge handle: n or s. height is driven; width follows.\n nh = pose.height;\n nw = nh * ratio;\n if (nw < 0) nw = -nw;\n } else if (anchor.y === 'free') {\n // Edge handle: e or w. width is driven; height follows.\n nw = pose.width;\n nh = nw / ratio;\n if (nh < 0) nh = -nh;\n } else {\n // Corner handle. Pick the dominant axis by absolute delta.\n if (Math.abs(dw) >= Math.abs(dh)) {\n nw = pose.width;\n // Match height sign to width sign so the rect stays in the same\n // quadrant the pointer chose.\n nh = (Math.abs(nw) / ratio) * Math.sign(pose.height || 1);\n } else {\n nh = pose.height;\n nw = (Math.abs(nh) * ratio) * Math.sign(pose.width || 1);\n }\n }\n\n // Recompute x/y from the anchor (the un-dragged edge stays pinned).\n let nx = pose.x;\n let ny = pose.y;\n if (anchor.x === 'min') {\n // West edge anchored at origin.x.\n nx = origin.x;\n } else if (anchor.x === 'max') {\n // East edge anchored at origin.x + origin.width.\n nx = origin.x + origin.width - nw;\n } else {\n // Edge handle (n/s): center horizontally about the origin's center.\n nx = origin.x + origin.width / 2 - nw / 2;\n }\n if (anchor.y === 'min') {\n ny = origin.y;\n } else if (anchor.y === 'max') {\n ny = origin.y + origin.height - nh;\n } else {\n ny = origin.y + origin.height / 2 - nh / 2;\n }\n\n return {\n pose: { ...pose, x: nx, y: ny, width: nw, height: nh },\n };\n },\n };\n}\n"],"mappings":";AAgBA,SAAgBA,EAA6C,IAEzD,CAAC,GAA4B;CAC/B,IAAM,EAAE,SAAM,YAAYC;CAE1B,OAAO,EACL,OAAO,GAAK,EAAE,SAAM,aAAU;EAC5B,IAAI,CAACC,EAAI,UAAUC,IAAM;EACzB,IAAMC,IAASF,EAAI,OAAO,IAAIA,EAAI,WAAW,EAAE;EAE/C,IADI,CAACE,KACDA,EAAO,UAAU,KAAKA,EAAO,WAAW,GAAG;EAC/C,IAAMC,IAAQD,EAAO,QAAQA,EAAO,QAE9BE,IAAKC,EAAK,QAAQH,EAAO,OACzBI,IAAKD,EAAK,SAASH,EAAO,QAE5BK,GACAC;EAEJ,IAAIC,EAAO,MAAM,UAAUA,EAAO,MAAM,QAEtC;EACK,AAAIA,EAAO,MAAM,UAEtB,IAAKJ,EAAK,QACV,IAAKG,IAAKL,GACNI,IAAK,MAAG,IAAK,CAACA,MACTE,EAAO,MAAM,UAEtB,IAAKJ,EAAK,OACV,IAAKE,IAAKJ,GACNK,IAAK,MAAG,IAAK,CAACA,MAGd,KAAK,IAAIJ,CAAE,KAAK,KAAK,IAAIE,CAAE,KAC7B,IAAKD,EAAK,OAGV,IAAM,KAAK,IAAIE,CAAE,IAAIJ,IAAS,KAAK,KAAKE,EAAK,UAAU,CAAC,MAExD,IAAKA,EAAK,QACV,IAAM,KAAK,IAAIG,CAAE,IAAIL,IAAS,KAAK,KAAKE,EAAK,SAAS,CAAC;EAK3D,IAAIK,IAAKL,EAAK,GACVM,IAAKN,EAAK;EAmBd,OAlBA,AAQEK,IARED,EAAO,MAAM,QAEVP,EAAO,IACHO,EAAO,MAAM,QAEjBP,EAAO,IAAIA,EAAO,QAAQK,IAG1BL,EAAO,IAAIA,EAAO,QAAQ,IAAIK,IAAK,GAE1C,AAKEI,IALEF,EAAO,MAAM,QACVP,EAAO,IACHO,EAAO,MAAM,QACjBP,EAAO,IAAIA,EAAO,SAASM,IAE3BN,EAAO,IAAIA,EAAO,SAAS,IAAIM,IAAK,GAGpC,EACL,MAAM;GAAE,GAAGH;GAAM,GAAGK;GAAI,GAAGC;GAAI,OAAOJ;GAAI,QAAQC;EAAG,EACvD;CACF,EACF;AACF"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import { targetTransformOf as e } from "../../../core/geometry/targetFrame.js";
|
|
2
|
+
//#region src/interactions/actions/resize/boxFrame.ts
|
|
3
|
+
function t(t, n) {
|
|
4
|
+
return e({
|
|
5
|
+
x: n.x,
|
|
6
|
+
y: n.y,
|
|
7
|
+
width: n.width,
|
|
8
|
+
height: n.height,
|
|
9
|
+
rotation: t.rotation,
|
|
10
|
+
transform: t.transform
|
|
11
|
+
});
|
|
12
|
+
}
|
|
13
|
+
//#endregion
|
|
14
|
+
export { t as boxFrame };
|
|
15
|
+
|
|
16
|
+
//# sourceMappingURL=boxFrame.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"boxFrame.js","names":["boxFrame","targetTransformOf","bounds","box"],"sources":["../../../../src/interactions/actions/resize/boxFrame.ts"],"sourcesContent":["import type { PoseLinear } from '@weasel-js/geom';\nimport { targetTransformOf, type TargetTransform } from 'core/geometry/targetFrame';\nimport type { Bounds } from 'core/viewport/fitViewToBounds';\n\n/** The frame `bounds` is drawn in while a box with this rotation and\n * `transform` is resized: both about `bounds`' own center, which moves as\n * the box does. */\nexport function boxFrame(\n box: { readonly rotation: number; readonly transform?: PoseLinear },\n bounds: Bounds,\n): TargetTransform {\n return targetTransformOf({\n x: bounds.x, y: bounds.y, width: bounds.width, height: bounds.height,\n rotation: box.rotation, transform: box.transform,\n });\n}\n"],"mappings":";;AAOA,SAAgBA,EACd,GACA,GACiB;CACjB,OAAOC,EAAkB;EACvB,GAAGC,EAAO;EAAG,GAAGA,EAAO;EAAG,OAAOA,EAAO;EAAO,QAAQA,EAAO;EAC9D,UAAUC,EAAI;EAAU,WAAWA,EAAI;CACzC,CAAC;AACH"}
|
|
@@ -0,0 +1,85 @@
|
|
|
1
|
+
import { unionAABB as e, unionBounds as t } from "../../../core/geometry/unionBounds.js";
|
|
2
|
+
import { visualBoundsViaDescriptor as n } from "../../../core/geometry/poseDescriptor.js";
|
|
3
|
+
import { localToWorld as r } from "../../../core/geometry/targetFrame.js";
|
|
4
|
+
import { fixedCornerOf as i } from "./cornerHandles.js";
|
|
5
|
+
import { carryPose as a, invertPlane as o, planeOf as s } from "../planeInput.js";
|
|
6
|
+
import { shapeSources as c } from "../selectionSubtree.js";
|
|
7
|
+
import { pointerStateOf as l } from "../pointerState.js";
|
|
8
|
+
import { sceneGestureFrames as u } from "../gestureFrames.js";
|
|
9
|
+
import { boxFrame as d } from "./boxFrame.js";
|
|
10
|
+
import { boundsForRules as f } from "./ruleBounds.js";
|
|
11
|
+
import { DEFAULT_RESIZE_BEHAVIORS as p } from "./behaviors/index.js";
|
|
12
|
+
import { poseLinearOf as m } from "@weasel-js/geom";
|
|
13
|
+
//#region src/interactions/actions/resize/capture.ts
|
|
14
|
+
var h = (e) => e, g = [];
|
|
15
|
+
function _(e) {
|
|
16
|
+
return e ? {
|
|
17
|
+
constraints: e.constraints,
|
|
18
|
+
pointSnap: e.pointSnap,
|
|
19
|
+
expandIds: e.expandIds
|
|
20
|
+
} : {
|
|
21
|
+
constraints: p,
|
|
22
|
+
pointSnap: g,
|
|
23
|
+
expandIds: h
|
|
24
|
+
};
|
|
25
|
+
}
|
|
26
|
+
function v(e, t, n) {
|
|
27
|
+
let r = c(e, n(t));
|
|
28
|
+
if (r.length === 0) return null;
|
|
29
|
+
let i = t.length === 1 && (r.length !== 1 || r[0] !== t[0]);
|
|
30
|
+
return {
|
|
31
|
+
writeIds: i || t.length > 1 ? r : t,
|
|
32
|
+
isGroupPath: i
|
|
33
|
+
};
|
|
34
|
+
}
|
|
35
|
+
function y(e, t, r, i, c) {
|
|
36
|
+
let l = /* @__PURE__ */ new Map(), u = /* @__PURE__ */ new Map(), d = [], f = [];
|
|
37
|
+
for (let p of t) {
|
|
38
|
+
let t = e.get(p);
|
|
39
|
+
if (!t) continue;
|
|
40
|
+
l.set(p, t.pose);
|
|
41
|
+
let m = r(p), h = a(m, i.world(p), o(s(c, t.layer)));
|
|
42
|
+
u.set(p, h), d.push(m.getBounds(h)), f.push(n(h, m));
|
|
43
|
+
}
|
|
44
|
+
return {
|
|
45
|
+
startPoses: l,
|
|
46
|
+
startWorlds: u,
|
|
47
|
+
leafBounds: d,
|
|
48
|
+
drawnBounds: f
|
|
49
|
+
};
|
|
50
|
+
}
|
|
51
|
+
function b(n, a, o, s, c, l) {
|
|
52
|
+
let { leafBounds: u, drawnBounds: p } = n, h = u.length === 1 ? u[0] : o ? t(u) : e(p), g = !o && a.length === 1, _ = g ? n.startWorlds.get(a[0]) : h, v = g ? l(a[0]) : c, y = o ? 0 : v.getRotation?.(_) ?? 0, b = g && m(_) || void 0, x = i(h, s);
|
|
53
|
+
return {
|
|
54
|
+
box: {
|
|
55
|
+
bounds: h,
|
|
56
|
+
anchor: s,
|
|
57
|
+
rotation: y,
|
|
58
|
+
transform: b,
|
|
59
|
+
fixedWorld: r(d({
|
|
60
|
+
rotation: y,
|
|
61
|
+
transform: b
|
|
62
|
+
}, h), x.x, x.y)
|
|
63
|
+
},
|
|
64
|
+
ruleOrigin: f(v, _)
|
|
65
|
+
};
|
|
66
|
+
}
|
|
67
|
+
function x(e, t, n, r, i) {
|
|
68
|
+
return {
|
|
69
|
+
draggedIds: t,
|
|
70
|
+
origin: /* @__PURE__ */ new Map([[t[0], n]]),
|
|
71
|
+
current: /* @__PURE__ */ new Map([[t[0], n]]),
|
|
72
|
+
snap: null,
|
|
73
|
+
modifiers: { ...e.modifiers },
|
|
74
|
+
pointer: l(r, e),
|
|
75
|
+
view: i.view(),
|
|
76
|
+
plane: i.plane(),
|
|
77
|
+
...e.deps.scene ? { frames: u(e.deps.scene, e.deps.view) } : {},
|
|
78
|
+
adapter: void 0,
|
|
79
|
+
scratch: {}
|
|
80
|
+
};
|
|
81
|
+
}
|
|
82
|
+
//#endregion
|
|
83
|
+
export { x as buildGestureContext, b as captureBox, y as captureStarts, v as captureTargets, _ as resolvePolicy };
|
|
84
|
+
|
|
85
|
+
//# sourceMappingURL=capture.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"capture.js","names":["IDENTITY_EXPAND","ids","EMPTY_POINT_SNAP","resolvePolicy","dep","DEFAULT_RESIZE_BEHAVIORS","captureTargets","expanded","shapeSources","scene","expandIds","isGroupPath","captureStarts","startPoses","startWorlds","leafBounds","drawnBounds","id","writeIds","node","g","geometryOf","world","carryPose","poseFrame","invertPlane","planeOf","view","visualBoundsViaDescriptor","captureBox","starts","bounds","unionBounds","unionAABB","lone","originPose","originGeometry","geometry","rotation","transform","poseLinearOf","fixedLocal","fixedCornerOf","anchor","localToWorld","boxFrame","boundsForRules","buildGestureContext","ruleOrigin","ctx","pointerStateOf","startWorld","readers","sceneGestureFrames"],"sources":["../../../../src/interactions/actions/resize/capture.ts"],"sourcesContent":["import { poseLinearOf } from '@weasel-js/geom';\nimport type { InvocationCtx } from '@weasel-js/routing';\nimport { localToWorld } from 'core/geometry/targetFrame';\nimport { pointerStateOf } from '../pointerState';\nimport { sceneGestureFrames } from '../gestureFrames';\nimport { unionAABB, unionBounds } from 'core/geometry/unionBounds';\nimport type { NodeId, Scene } from 'core/scene/types';\nimport type { Bounds } from 'core/viewport/fitViewToBounds';\nimport type { GestureReaders } from '../../gestures/shared/screenTolerance';\nimport type { BoundsConstraint, GestureContext, PointSnapBehavior, ResizeAnchor } from '../../gestures/types';\nimport type { ResizePolicy } from '../depSchema';\nimport { carryPose, invertPlane, planeOf } from '../planeInput';\nimport type { PoseFrame } from '../poseFrame';\nimport { shapeSources } from '../selectionSubtree';\nimport { DEFAULT_RESIZE_BEHAVIORS } from './behaviors';\nimport { fixedCornerOf } from './cornerHandles';\nimport { visualBoundsViaDescriptor, type PoseDescriptor } from './geometry';\nimport { boundsForRules } from './ruleBounds';\nimport { boxFrame } from './boxFrame';\nimport type { ResizeBox } from './session';\n\nconst IDENTITY_EXPAND = (ids: string[]) => ids;\nconst EMPTY_POINT_SNAP: PointSnapBehavior<Bounds>[] = [];\n\n/** The `resizePolicy` dep's rules, or the defaults when it is unsourced. */\nexport function resolvePolicy(dep: ResizePolicy<unknown> | undefined): {\n constraints: BoundsConstraint<Bounds>[];\n pointSnap: PointSnapBehavior<Bounds>[];\n expandIds: (ids: string[]) => string[];\n} {\n if (!dep) {\n return {\n // Standard kit behaviors (shift = aspect lock) apply even with no\n // policy wired; consumers opt out via an explicit `constraints: []`.\n constraints: DEFAULT_RESIZE_BEHAVIORS as BoundsConstraint<Bounds>[],\n pointSnap: EMPTY_POINT_SNAP,\n expandIds: IDENTITY_EXPAND,\n };\n }\n return {\n constraints: dep.constraints as unknown as BoundsConstraint<Bounds>[],\n pointSnap: dep.pointSnap as unknown as PointSnapBehavior<Bounds>[],\n expandIds: dep.expandIds,\n };\n}\n\n/** The ids the gesture writes, and whether one selected id stands for them.\n * A lone id the policy expands into a different set is the group path:\n * every leaf is written, against the union of their bounds. Otherwise the\n * selected ids are written directly. A group whose pose derives from its\n * children is resized by resizing them, whatever the policy expanded to.\n * Null when there is nothing to write. */\nexport function captureTargets(\n scene: Scene<unknown, string, unknown>,\n ids: readonly NodeId[],\n expandIds: (ids: string[]) => string[],\n): { writeIds: NodeId[]; isGroupPath: boolean } | null {\n const expanded = shapeSources(scene, expandIds(ids as unknown as string[]));\n if (expanded.length === 0) return null;\n const isGroupPath =\n ids.length === 1 && (expanded.length !== 1 || expanded[0] !== (ids[0] as string));\n const writeIds = (isGroupPath || ids.length > 1 ? expanded : (ids as unknown as string[])) as NodeId[];\n return { writeIds, isGroupPath };\n}\n\nexport interface ResizeStarts {\n /** As stored. */\n startPoses: Map<NodeId, unknown>;\n /** In world, carried into the plane the edit is measured in. */\n startWorlds: Map<NodeId, unknown>;\n leafBounds: Bounds[];\n drawnBounds: Bounds[];\n}\n\nexport function captureStarts(\n scene: Scene<unknown, string, unknown>,\n writeIds: readonly NodeId[],\n geometryOf: (id: NodeId) => PoseDescriptor<unknown>,\n poseFrame: PoseFrame<unknown>,\n view: unknown,\n): ResizeStarts {\n const startPoses = new Map<NodeId, unknown>();\n const startWorlds = new Map<NodeId, unknown>();\n const leafBounds: Bounds[] = [];\n const drawnBounds: Bounds[] = [];\n for (const id of writeIds) {\n const node = scene.get(id);\n if (!node) continue;\n startPoses.set(id, node.pose);\n const g = geometryOf(id);\n const world = carryPose(g, poseFrame.world(id), invertPlane(planeOf(view, node.layer)));\n startWorlds.set(id, world);\n leafBounds.push(g.getBounds(world));\n drawnBounds.push(visualBoundsViaDescriptor(world, g));\n }\n return { startPoses, startWorlds, leafBounds, drawnBounds };\n}\n\n/** The box the drag resizes, and that box as the constraints read it.\n * `starts` must hold at least one pose. */\nexport function captureBox(\n starts: Pick<ResizeStarts, 'startWorlds' | 'leafBounds' | 'drawnBounds'>,\n writeIds: readonly NodeId[],\n isGroupPath: boolean,\n anchor: ResizeAnchor,\n geometry: PoseDescriptor<unknown>,\n geometryOf: (id: NodeId) => PoseDescriptor<unknown>,\n): { box: ResizeBox; ruleOrigin: Bounds } {\n const { leafBounds, drawnBounds } = starts;\n // A multi-selection's handles sit on the union of what is drawn, so that\n // is the box its drag resizes.\n const bounds = leafBounds.length === 1\n ? leafBounds[0]\n : isGroupPath ? unionBounds(leafBounds)! : unionAABB(drawnBounds)!;\n\n // Rotation captured only for the single-write-id path; group-resize\n // takes the AABB-frame (unrotated) path even if leaves have rotation.\n const lone = !isGroupPath && writeIds.length === 1;\n const originPose = lone ? starts.startWorlds.get(writeIds[0]) : (bounds as unknown);\n // A lone target is read as its own shape; a shared box is a plain rect.\n const originGeometry = lone ? geometryOf(writeIds[0]) : geometry;\n const rotation = !isGroupPath ? (originGeometry.getRotation?.(originPose) ?? 0) : 0;\n const transform = (lone && poseLinearOf(originPose)) || undefined;\n\n const fixedLocal = fixedCornerOf(bounds, anchor);\n const fixedWorld = localToWorld(boxFrame({ rotation, transform }, bounds), fixedLocal.x, fixedLocal.y);\n return {\n box: { bounds, anchor, rotation, transform, fixedWorld },\n ruleOrigin: boundsForRules(originGeometry, originPose),\n };\n}\n\n/** The context the constraints read. `draggedIds` is the selection, not the\n * ids written, and the one pose it tracks is keyed by the first selected id. */\nexport function buildGestureContext(\n ctx: InvocationCtx,\n ids: readonly NodeId[],\n ruleOrigin: Bounds,\n startWorld: { x: number; y: number },\n readers: GestureReaders,\n): GestureContext<Bounds> {\n return {\n draggedIds: ids as unknown as string[],\n origin: new Map<string, Bounds>([[ids[0] as string, ruleOrigin]]),\n current: new Map<string, Bounds>([[ids[0] as string, ruleOrigin]]),\n snap: null,\n modifiers: { ...ctx.modifiers },\n pointer: pointerStateOf(startWorld, ctx),\n view: readers.view(),\n plane: readers.plane(),\n ...(ctx.deps.scene\n ? { frames: sceneGestureFrames(ctx.deps.scene, ctx.deps.view) as GestureContext<Bounds>['frames'] }\n : {}),\n // `adapter` is unused by the kit's behaviors; cast to satisfy the type.\n adapter: undefined as unknown as GestureContext<Bounds>['adapter'],\n scratch: {},\n };\n}\n"],"mappings":";;;;;;;;;;;;;AAqBA,IAAMA,KAAmB,MAAkBC,GACrCC,IAAgD,CAAC;AAGvD,SAAgBC,EAAc,GAI5B;CAUA,OATKC,IASE;EACL,aAAaA,EAAI;EACjB,WAAWA,EAAI;EACf,WAAWA,EAAI;CACjB,IAZS;EAGL,aAAaC;EACb,WAAWH;EACX,WAAWF;CACb;AAOJ;AAQA,SAAgBM,EACd,GACA,GACA,GACqD;CACrD,IAAMC,IAAWC,EAAaC,GAAOC,EAAUT,CAA0B,CAAC;CAC1E,IAAIM,EAAS,WAAW,GAAG,OAAO;CAClC,IAAMI,IACJV,EAAI,WAAW,MAAMM,EAAS,WAAW,KAAKA,EAAS,OAAQN,EAAI;CAErE,OAAO;EAAE,UADSU,KAAeV,EAAI,SAAS,IAAIM,IAAYN;EAC3C;CAAY;AACjC;AAWA,SAAgBW,EACd,GACA,GACA,GACA,GACA,GACc;CACd,IAAMC,oBAAa,IAAI,IAAqB,GACtCC,oBAAc,IAAI,IAAqB,GACvCC,IAAuB,CAAC,GACxBC,IAAwB,CAAC;CAC/B,KAAK,IAAMC,KAAMC,GAAU;EACzB,IAAMC,IAAOV,EAAM,IAAIQ,CAAE;EACzB,IAAI,CAACE,GAAM;EACX,EAAW,IAAIF,GAAIE,EAAK,IAAI;EAC5B,IAAMC,IAAIC,EAAWJ,CAAE,GACjBK,IAAQC,EAAUH,GAAGI,EAAU,MAAMP,CAAE,GAAGQ,EAAYC,EAAQC,GAAMR,EAAK,KAAK,CAAC,CAAC;EAGtF,AAFAL,EAAY,IAAIG,GAAIK,CAAK,GACzBP,EAAW,KAAKK,EAAE,UAAUE,CAAK,CAAC,GAClCN,EAAY,KAAKY,EAA0BN,GAAOF,CAAC,CAAC;CACtD;CACA,OAAO;EAAE;EAAY;EAAa;EAAY;CAAY;AAC5D;AAIA,SAAgBS,EACd,GACA,GACA,GACA,GACA,GACA,GACwC;CACxC,IAAM,EAAE,eAAY,mBAAgBC,GAG9BC,IAAShB,EAAW,WAAW,IACjCA,EAAW,KACXJ,IAAcqB,EAAYjB,CAAU,IAAKkB,EAAUjB,CAAW,GAI5DkB,IAAO,CAACvB,KAAeO,EAAS,WAAW,GAC3CiB,IAAaD,IAAOJ,EAAO,YAAY,IAAIZ,EAAS,EAAE,IAAKa,GAE3DK,IAAiBF,IAAOb,EAAWH,EAAS,EAAE,IAAImB,GAClDC,IAAY3B,IAAgE,IAAjDyB,EAAe,cAAcD,CAAU,KAAK,GACvEI,IAAaL,KAAQM,EAAaL,CAAU,KAAM,KAAA,GAElDM,IAAaC,EAAcX,GAAQY,CAAM;CAE/C,OAAO;EACL,KAAK;GAAE;GAAQ;GAAQ;GAAU;GAAW,YAF3BC,EAAaC,EAAS;IAAE;IAAU;GAAU,GAAGd,CAAM,GAAGU,EAAW,GAAGA,EAAW,CAEtD;EAAW;EACvD,YAAYK,EAAeV,GAAgBD,CAAU;CACvD;AACF;AAIA,SAAgBY,EACd,GACA,GACA,GACA,GACA,GACwB;CACxB,OAAO;EACL,YAAY9C;EACZ,wBAAQ,IAAI,IAAoB,CAAC,CAACA,EAAI,IAAc+C,CAAU,CAAC,CAAC;EAChE,yBAAS,IAAI,IAAoB,CAAC,CAAC/C,EAAI,IAAc+C,CAAU,CAAC,CAAC;EACjE,MAAM;EACN,WAAW,EAAE,GAAGC,EAAI,UAAU;EAC9B,SAASC,EAAeC,GAAYF,CAAG;EACvC,MAAMG,EAAQ,KAAK;EACnB,OAAOA,EAAQ,MAAM;EACrB,GAAIH,EAAI,KAAK,QACT,EAAE,QAAQI,EAAmBJ,EAAI,KAAK,OAAOA,EAAI,KAAK,IAAI,EAAsC,IAChG,CAAC;EAEL,SAAS,KAAA;EACT,SAAS,CAAC;CACZ;AACF"}
|
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
import { commitGestureOps as e, reduceBehaviorEnd as t } from "../gestureLifecycle.js";
|
|
2
|
+
import { createTransformOp as n } from "../../../core/ops/transform.js";
|
|
3
|
+
import { geometryDataOp as r } from "../geometryProjection.js";
|
|
4
|
+
import { defaultCommitAdapter as i } from "../defaultCommitAdapter.js";
|
|
5
|
+
import { boxToBox as a } from "@weasel-js/geom";
|
|
6
|
+
//#region src/interactions/actions/resize/commit.ts
|
|
7
|
+
function o(e, t, n, i, o, s) {
|
|
8
|
+
let c = t.getBounds(i), l = t.getBounds(o), u = a(c.x, c.y, c.width, c.height, l.x, l.y, l.width, l.height), d = r(e, {
|
|
9
|
+
id: n.id,
|
|
10
|
+
data: n.data,
|
|
11
|
+
pose: i
|
|
12
|
+
}, u, s);
|
|
13
|
+
if (!d) return null;
|
|
14
|
+
if (!(l.width < 0 || l.height < 0)) return {
|
|
15
|
+
dataOp: d,
|
|
16
|
+
pose: o
|
|
17
|
+
};
|
|
18
|
+
let f = {
|
|
19
|
+
...l,
|
|
20
|
+
x: l.width < 0 ? l.x + l.width : l.x,
|
|
21
|
+
y: l.height < 0 ? l.y + l.height : l.y,
|
|
22
|
+
width: Math.abs(l.width),
|
|
23
|
+
height: Math.abs(l.height)
|
|
24
|
+
};
|
|
25
|
+
return {
|
|
26
|
+
dataOp: d,
|
|
27
|
+
pose: t.remapBounds(o, l, f)
|
|
28
|
+
};
|
|
29
|
+
}
|
|
30
|
+
function s(e, t, r) {
|
|
31
|
+
let i = [];
|
|
32
|
+
for (let a of e.writeIds) {
|
|
33
|
+
let s = t.get(a);
|
|
34
|
+
if (s === void 0) continue;
|
|
35
|
+
let c = e.startPoses.get(a);
|
|
36
|
+
if (c === void 0) continue;
|
|
37
|
+
let l = s, u = e.geometryProjection ? e.scene.get(a) : void 0;
|
|
38
|
+
if (e.geometryProjection && u) {
|
|
39
|
+
let t = o(e.geometryProjection, e.geometryOf(a), {
|
|
40
|
+
id: a,
|
|
41
|
+
data: u.data
|
|
42
|
+
}, c, s, r);
|
|
43
|
+
t && (i.push(t.dataOp), l = t.pose);
|
|
44
|
+
}
|
|
45
|
+
i.push(n({
|
|
46
|
+
id: a,
|
|
47
|
+
from: c,
|
|
48
|
+
to: l,
|
|
49
|
+
label: r
|
|
50
|
+
}));
|
|
51
|
+
}
|
|
52
|
+
return i;
|
|
53
|
+
}
|
|
54
|
+
function c(n, r) {
|
|
55
|
+
let { lifecycle: a } = n, o = {
|
|
56
|
+
scene: n.scene,
|
|
57
|
+
applyOps: n.applyOps,
|
|
58
|
+
adapter: i(n.scene, n.selectionMethods)
|
|
59
|
+
}, c = t(n.constraints, n.gestureCtx);
|
|
60
|
+
if (c === null) return !1;
|
|
61
|
+
if (c !== void 0) return e(o, a, c);
|
|
62
|
+
if (r.previews.size === 0) return !1;
|
|
63
|
+
let l = s(n, r.previews, a.label);
|
|
64
|
+
return l.length !== 0 && e(o, a, l);
|
|
65
|
+
}
|
|
66
|
+
//#endregion
|
|
67
|
+
export { c as commitResize, s as resizeOps };
|
|
68
|
+
|
|
69
|
+
//# sourceMappingURL=commit.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"commit.js","names":["projectedGeometry","sb","g","from","db","next","m","boxToBox","dataOp","geometryDataOp","projection","node","label","nb","resizeOps","ops","id","leaves","previews","to","projected","createTransformOp","commitResize","session","target","defaultCommitAdapter","r","reduceBehaviorEnd","commitGestureOps","lifecycle","frame"],"sources":["../../../../src/interactions/actions/resize/commit.ts"],"sourcesContent":["import { boxToBox, type Mat3 } from '@weasel-js/geom';\nimport type { Op } from 'core/ops/types';\nimport { createTransformOp } from 'core/ops/transform';\nimport type { NodeId } from 'core/scene/types';\nimport { defaultCommitAdapter } from '../defaultCommitAdapter';\nimport { geometryDataOp, type GeometryProjection } from '../geometryProjection';\nimport { commitGestureOps, reduceBehaviorEnd } from '../gestureLifecycle';\nimport type { PoseDescriptor } from './geometry';\nimport type { ResizeFrame, ResizeSession } from './session';\n\n/** The op mapping a leaf's data-held geometry by the box→box affine its pose\n * underwent, and the pose to commit beside it. Null when the projection\n * leaves this node's data alone. */\nfunction projectedGeometry(\n projection: GeometryProjection,\n g: PoseDescriptor<unknown>,\n node: { id: string; data: unknown },\n from: unknown,\n next: unknown,\n label: string,\n): { dataOp: Op; pose: unknown } | null {\n const sb = g.getBounds(from);\n const db = g.getBounds(next);\n const m: Mat3 = boxToBox(\n sb.x, sb.y, sb.width, sb.height,\n db.x, db.y, db.width, db.height,\n );\n const dataOp = geometryDataOp(projection, { id: node.id, data: node.data, pose: from }, m, label);\n if (!dataOp) return null;\n // The data absorbed the affine — including any mirror from a\n // drag past the opposite edge — so the pose must commit as a\n // normalized AABB. Leaving signed extents on the pose makes\n // the node unhittable (hit-testing assumes normalized boxes).\n // Without the seam the signed pose is kept: a bare-AABB pose\n // is the only carrier of the flip there.\n if (!(db.width < 0 || db.height < 0)) return { dataOp, pose: next };\n const nb = {\n ...db,\n x: db.width < 0 ? db.x + db.width : db.x,\n y: db.height < 0 ? db.y + db.height : db.y,\n width: Math.abs(db.width),\n height: Math.abs(db.height),\n };\n return { dataOp, pose: g.remapBounds(next, db, nb) };\n}\n\n/** One transform op per write id, `from` the pose stored at press and `to`\n * its preview, each preceded by its data op when the geometry projection\n * answers for the node. */\nexport function resizeOps(\n leaves: Pick<ResizeSession, 'scene' | 'writeIds' | 'startPoses' | 'geometryOf' | 'geometryProjection'>,\n previews: ReadonlyMap<NodeId, unknown>,\n label: string,\n): Op[] {\n const ops: Op[] = [];\n for (const id of leaves.writeIds) {\n const next = previews.get(id);\n if (next === undefined) continue;\n const from = leaves.startPoses.get(id);\n if (from === undefined) continue;\n let to: unknown = next;\n const node = leaves.geometryProjection ? leaves.scene.get(id) : undefined;\n if (leaves.geometryProjection && node) {\n const projected = projectedGeometry(\n leaves.geometryProjection, leaves.geometryOf(id), { id: id as string, data: node.data }, from, next, label,\n );\n if (projected) {\n ops.push(projected.dataOp);\n to = projected.pose;\n }\n }\n ops.push(createTransformOp<unknown>({ id: id as string, from, to, label }));\n }\n return ops;\n}\n\n/** Commit the drag as one batch, so one undo entry. Returns whether anything\n * reached the document. */\nexport function commitResize(session: ResizeSession, frame: ResizeFrame): boolean {\n const { lifecycle } = session;\n const target = {\n scene: session.scene,\n applyOps: session.applyOps,\n adapter: defaultCommitAdapter(session.scene, session.selectionMethods),\n };\n const r = reduceBehaviorEnd(session.constraints, session.gestureCtx);\n if (r === null) return false;\n if (r !== undefined) return commitGestureOps(target, lifecycle, r);\n\n if (frame.previews.size === 0) return false;\n const ops = resizeOps(session, frame.previews, lifecycle.label);\n if (ops.length === 0) return false;\n return commitGestureOps(target, lifecycle, ops);\n}\n"],"mappings":";;;;;;AAaA,SAASA,EACP,GACA,GACA,GACA,GACA,GACA,GACsC;CACtC,IAAMC,IAAKC,EAAE,UAAUC,CAAI,GACrBC,IAAKF,EAAE,UAAUG,CAAI,GACrBC,IAAUC,EACdN,EAAG,GAAGA,EAAG,GAAGA,EAAG,OAAOA,EAAG,QACzBG,EAAG,GAAGA,EAAG,GAAGA,EAAG,OAAOA,EAAG,MAC3B,GACMI,IAASC,EAAeC,GAAY;EAAE,IAAIC,EAAK;EAAI,MAAMA,EAAK;EAAM,MAAMR;CAAK,GAAGG,GAAGM,CAAK;CAChG,IAAI,CAACJ,GAAQ,OAAO;CAOpB,IAAI,EAAEJ,EAAG,QAAQ,KAAKA,EAAG,SAAS,IAAI,OAAO;EAAE;EAAQ,MAAMC;CAAK;CAClE,IAAMQ,IAAK;EACT,GAAGT;EACH,GAAGA,EAAG,QAAQ,IAAIA,EAAG,IAAIA,EAAG,QAAQA,EAAG;EACvC,GAAGA,EAAG,SAAS,IAAIA,EAAG,IAAIA,EAAG,SAASA,EAAG;EACzC,OAAO,KAAK,IAAIA,EAAG,KAAK;EACxB,QAAQ,KAAK,IAAIA,EAAG,MAAM;CAC5B;CACA,OAAO;EAAE;EAAQ,MAAMF,EAAE,YAAYG,GAAMD,GAAIS,CAAE;CAAE;AACrD;AAKA,SAAgBC,EACd,GACA,GACA,GACM;CACN,IAAMC,IAAY,CAAC;CACnB,KAAK,IAAMC,KAAMC,EAAO,UAAU;EAChC,IAAMZ,IAAOa,EAAS,IAAIF,CAAE;EAC5B,IAAIX,MAAS,KAAA,GAAW;EACxB,IAAMF,IAAOc,EAAO,WAAW,IAAID,CAAE;EACrC,IAAIb,MAAS,KAAA,GAAW;EACxB,IAAIgB,IAAcd,GACZM,IAAOM,EAAO,qBAAqBA,EAAO,MAAM,IAAID,CAAE,IAAI,KAAA;EAChE,IAAIC,EAAO,sBAAsBN,GAAM;GACrC,IAAMS,IAAYpB,EAChBiB,EAAO,oBAAoBA,EAAO,WAAWD,CAAE,GAAG;IAAM;IAAc,MAAML,EAAK;GAAK,GAAGR,GAAME,GAAMO,CACvG;GACA,AAAIQ,MACFL,EAAI,KAAKK,EAAU,MAAM,GACzB,IAAKA,EAAU;EAEnB;EACA,EAAI,KAAKC,EAA2B;GAAM;GAAc;GAAM;GAAI;EAAM,CAAC,CAAC;CAC5E;CACA,OAAON;AACT;AAIA,SAAgBO,EAAa,GAAwB,GAA6B;CAChF,IAAM,EAAE,iBAAcC,GAChBC,IAAS;EACb,OAAOD,EAAQ;EACf,UAAUA,EAAQ;EAClB,SAASE,EAAqBF,EAAQ,OAAOA,EAAQ,gBAAgB;CACvE,GACMG,IAAIC,EAAkBJ,EAAQ,aAAaA,EAAQ,UAAU;CACnE,IAAIG,MAAM,MAAM,OAAO;CACvB,IAAIA,MAAM,KAAA,GAAW,OAAOE,EAAiBJ,GAAQK,GAAWH,CAAC;CAEjE,IAAII,EAAM,SAAS,SAAS,GAAG,OAAO;CACtC,IAAMf,IAAMD,EAAUS,GAASO,EAAM,UAAUD,EAAU,KAAK;CAE9D,OADId,EAAI,WAAW,KACZa,EAAiBJ,GAAQK,GAAWd,CAAG;AAChD"}
|