@weasel-js/core 1.9.4 → 1.10.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +918 -0
- package/README.md +38 -3
- package/dist/WeaselProvider.js +5 -7
- package/dist/WeaselProvider.js.map +1 -1
- package/dist/affordances/composeAffordanceLayer.js +92 -84
- package/dist/affordances/composeAffordanceLayer.js.map +1 -1
- package/dist/affordances/cornerResize.js +3 -2
- package/dist/affordances/cornerResize.js.map +1 -1
- package/dist/affordances/hitAffordanceRegions.js +71 -101
- package/dist/affordances/hitAffordanceRegions.js.map +1 -1
- package/dist/affordances/pathAnchors.js +50 -28
- package/dist/affordances/pathAnchors.js.map +1 -1
- package/dist/affordances/rotateCursor.js +12 -0
- package/dist/affordances/rotateCursor.js.map +1 -0
- package/dist/affordances/rotationHandle.js +44 -46
- package/dist/affordances/rotationHandle.js.map +1 -1
- package/dist/animation/behaviors/coast.js +21 -0
- package/dist/animation/behaviors/coast.js.map +1 -0
- package/dist/animation/behaviors/coastByWrite.js +107 -0
- package/dist/animation/behaviors/coastByWrite.js.map +1 -0
- package/dist/animation/behaviors/coastOnTargets.js +94 -0
- package/dist/animation/behaviors/coastOnTargets.js.map +1 -0
- package/dist/animation/behaviors/momentum.js +48 -136
- package/dist/animation/behaviors/momentum.js.map +1 -1
- package/dist/animation/clipTargets.js +12 -0
- package/dist/animation/clipTargets.js.map +1 -0
- package/dist/animation/index.js +15 -20
- package/dist/animation/poseHelpers.js +112 -33
- package/dist/animation/poseHelpers.js.map +1 -1
- package/dist/animation/poseTarget.js +115 -0
- package/dist/animation/poseTarget.js.map +1 -0
- package/dist/animation/reflow.js +113 -83
- package/dist/animation/reflow.js.map +1 -1
- package/dist/animation/rewind.js +66 -0
- package/dist/animation/rewind.js.map +1 -0
- package/dist/animation/rig/bindRig.js +85 -53
- package/dist/animation/rig/bindRig.js.map +1 -1
- package/dist/animation/rig/rigNode.js +99 -0
- package/dist/animation/rig/rigNode.js.map +1 -0
- package/dist/animation/rig/rigSeat.js +59 -0
- package/dist/animation/rig/rigSeat.js.map +1 -0
- package/dist/animation/rig/skinBinding.js +64 -0
- package/dist/animation/rig/skinBinding.js.map +1 -0
- package/dist/animation/rig/useRig.js +31 -16
- package/dist/animation/rig/useRig.js.map +1 -1
- package/dist/animation/wrappers/animateLifecycle.js +8 -7
- package/dist/animation/wrappers/animateLifecycle.js.map +1 -1
- package/dist/animation/wrappers/animateOnSetPose.js +31 -31
- package/dist/animation/wrappers/animateOnSetPose.js.map +1 -1
- package/dist/animation/wrappers/instantPose.js.map +1 -1
- package/dist/animation/writtenPoseTarget.js +33 -0
- package/dist/animation/writtenPoseTarget.js.map +1 -0
- package/dist/autoPoseDescriptor-DHg5KqaJ.d.ts +27 -0
- package/dist/barrel/canvas.js +32 -0
- package/dist/barrel/chrome.js +10 -10
- package/dist/barrel/input.js +16 -17
- package/dist/barrel/interactions.js +34 -37
- package/dist/barrel/paint.js +11 -18
- package/dist/barrel/paths.js +13 -19
- package/dist/barrel/renderer.js +14 -20
- package/dist/barrel/routing.js +54 -47
- package/dist/barrel/scene.js +37 -0
- package/dist/barrel/text.js +9 -18
- package/dist/barrel/viewport.js +44 -51
- package/dist/canvas/Canvas.js +270 -475
- package/dist/canvas/Canvas.js.map +1 -1
- package/dist/canvas/CanvasView.js +168 -190
- package/dist/canvas/CanvasView.js.map +1 -1
- package/dist/canvas/CursorCoordsHud.js +24 -25
- package/dist/canvas/CursorCoordsHud.js.map +1 -1
- package/dist/canvas/DrawCanvas.js +39 -56
- package/dist/canvas/DrawCanvas.js.map +1 -1
- package/dist/canvas/ModalityHud.js.map +1 -1
- package/dist/canvas/NodeShape.js +28 -29
- package/dist/canvas/NodeShape.js.map +1 -1
- package/dist/canvas/PickHud.js.map +1 -1
- package/dist/canvas/SceneCanvas/DevHuds.js +40 -0
- package/dist/canvas/SceneCanvas/DevHuds.js.map +1 -0
- package/dist/canvas/SceneCanvas/GestureDispatcherMounter.js +66 -107
- package/dist/canvas/SceneCanvas/GestureDispatcherMounter.js.map +1 -1
- package/dist/canvas/SceneCanvas/PointerProviderIfRoot.js +33 -36
- package/dist/canvas/SceneCanvas/PointerProviderIfRoot.js.map +1 -1
- package/dist/canvas/SceneCanvas/StandardActionsRegistrar.js +38 -50
- package/dist/canvas/SceneCanvas/StandardActionsRegistrar.js.map +1 -1
- package/dist/canvas/SceneCanvas/ToolKeybindingsMounter.js +3 -3
- package/dist/canvas/SceneCanvas/ToolKeybindingsMounter.js.map +1 -1
- package/dist/canvas/SceneCanvas/coordTrace.js +37 -1
- package/dist/canvas/SceneCanvas/coordTrace.js.map +1 -1
- package/dist/canvas/SceneCanvas/defaultNodeProperties.js +319 -270
- package/dist/canvas/SceneCanvas/defaultNodeProperties.js.map +1 -1
- package/dist/canvas/SceneCanvas/defaultNodeRouting.js +1 -1
- package/dist/canvas/SceneCanvas/defaultNodeRouting.js.map +1 -1
- package/dist/canvas/SceneCanvas/dispatcherGestureBounds.js.map +1 -1
- package/dist/canvas/SceneCanvas/features.js +71 -62
- package/dist/canvas/SceneCanvas/features.js.map +1 -1
- package/dist/canvas/SceneCanvas/insertPreviewCommands.js +97 -0
- package/dist/canvas/SceneCanvas/insertPreviewCommands.js.map +1 -0
- package/dist/canvas/SceneCanvas/isDev.js.map +1 -1
- package/dist/canvas/SceneCanvas/poseGeometry.js +33 -37
- package/dist/canvas/SceneCanvas/poseGeometry.js.map +1 -1
- package/dist/canvas/SceneCanvas/props.js +15 -14
- package/dist/canvas/SceneCanvas/props.js.map +1 -1
- package/dist/canvas/SceneCanvas/scenePointQuery.js +50 -0
- package/dist/canvas/SceneCanvas/scenePointQuery.js.map +1 -0
- package/dist/canvas/SceneCanvas/shapeGeneratorProperties.js +52 -0
- package/dist/canvas/SceneCanvas/shapeGeneratorProperties.js.map +1 -0
- package/dist/canvas/SceneCanvas/toolRegistry.js +23 -0
- package/dist/canvas/SceneCanvas/toolRegistry.js.map +1 -0
- package/dist/canvas/SceneCanvas/useActionTunings.js +17 -0
- package/dist/canvas/SceneCanvas/useActionTunings.js.map +1 -0
- package/dist/canvas/SceneCanvas/useActionsPropResolver.js +6 -1
- package/dist/canvas/SceneCanvas/useActionsPropResolver.js.map +1 -1
- package/dist/canvas/SceneCanvas/useBuiltinShapeTools.js.map +1 -1
- package/dist/canvas/SceneCanvas/useBuiltinTools.js +21 -0
- package/dist/canvas/SceneCanvas/useBuiltinTools.js.map +1 -0
- package/dist/canvas/SceneCanvas/useCanvasCamera.js +46 -0
- package/dist/canvas/SceneCanvas/useCanvasCamera.js.map +1 -0
- package/dist/canvas/SceneCanvas/useCanvasDispatcher.js +20 -0
- package/dist/canvas/SceneCanvas/useCanvasDispatcher.js.map +1 -0
- package/dist/canvas/SceneCanvas/useCanvasSelection.js +16 -0
- package/dist/canvas/SceneCanvas/useCanvasSelection.js.map +1 -0
- package/dist/canvas/SceneCanvas/useCanvasTools.js +67 -0
- package/dist/canvas/SceneCanvas/useCanvasTools.js.map +1 -0
- package/dist/canvas/SceneCanvas/useDispatcherOverlayLayer.js +49 -113
- package/dist/canvas/SceneCanvas/useDispatcherOverlayLayer.js.map +1 -1
- package/dist/canvas/SceneCanvas/useHeldModifiers.js +20 -0
- package/dist/canvas/SceneCanvas/useHeldModifiers.js.map +1 -0
- package/dist/canvas/SceneCanvas/useNodeAtPoint.js +26 -0
- package/dist/canvas/SceneCanvas/useNodeAtPoint.js.map +1 -0
- package/dist/canvas/SceneCanvas/useNodeKinds.js +26 -0
- package/dist/canvas/SceneCanvas/useNodeKinds.js.map +1 -0
- package/dist/canvas/SceneCanvas/usePreviewGhostLayer.js +51 -41
- package/dist/canvas/SceneCanvas/usePreviewGhostLayer.js.map +1 -1
- package/dist/canvas/SceneCanvas/useSceneCanvasHandle.js +47 -0
- package/dist/canvas/SceneCanvas/useSceneCanvasHandle.js.map +1 -0
- package/dist/canvas/SceneCanvas/useSceneCanvasLayers.js +66 -0
- package/dist/canvas/SceneCanvas/useSceneCanvasLayers.js.map +1 -0
- package/dist/canvas/SceneCanvas/useSceneChrome.js +59 -0
- package/dist/canvas/SceneCanvas/useSceneChrome.js.map +1 -0
- package/dist/canvas/SceneCanvas/useSceneRedrawSources.js +23 -0
- package/dist/canvas/SceneCanvas/useSceneRedrawSources.js.map +1 -0
- package/dist/canvas/SceneCanvas/useSceneSelectTool.js +65 -101
- package/dist/canvas/SceneCanvas/useSceneSelectTool.js.map +1 -1
- package/dist/canvas/SceneCanvas/useSceneSlotLayers.js +37 -0
- package/dist/canvas/SceneCanvas/useSceneSlotLayers.js.map +1 -0
- package/dist/canvas/SceneCanvas/useSelectionOverlayLayer.js +38 -0
- package/dist/canvas/SceneCanvas/useSelectionOverlayLayer.js.map +1 -0
- package/dist/canvas/SceneCanvas/useViewLayerGate.js +20 -0
- package/dist/canvas/SceneCanvas/useViewLayerGate.js.map +1 -0
- package/dist/canvas/SceneCanvas/useViewportActions.js +9 -1
- package/dist/canvas/SceneCanvas/useViewportActions.js.map +1 -1
- package/dist/canvas/SceneCanvas/worldPointAt.js +8 -0
- package/dist/canvas/SceneCanvas/worldPointAt.js.map +1 -0
- package/dist/canvas/SceneCanvas.js +301 -708
- package/dist/canvas/SceneCanvas.js.map +1 -1
- package/dist/canvas/SceneViewCanvas.js +41 -47
- package/dist/canvas/SceneViewCanvas.js.map +1 -1
- package/dist/canvas/SurfaceCanvas.js +40 -0
- package/dist/canvas/SurfaceCanvas.js.map +1 -0
- package/dist/canvas/adapterDerivedPath.js +26 -0
- package/dist/canvas/adapterDerivedPath.js.map +1 -0
- package/dist/canvas/adapterPickSource.js +34 -0
- package/dist/canvas/adapterPickSource.js.map +1 -0
- package/dist/canvas/affordanceAt.js +12 -2
- package/dist/canvas/affordanceAt.js.map +1 -1
- package/dist/canvas/buildSceneLayer.js +81 -61
- package/dist/canvas/buildSceneLayer.js.map +1 -1
- package/dist/canvas/buildSceneTree.js +56 -34
- package/dist/canvas/buildSceneTree.js.map +1 -1
- package/dist/canvas/canvasRenderer.js +40 -44
- package/dist/canvas/canvasRenderer.js.map +1 -1
- package/dist/canvas/colorOverrides.js.map +1 -1
- package/dist/canvas/copiesAbove.js +27 -0
- package/dist/canvas/copiesAbove.js.map +1 -0
- package/dist/canvas/defaultDrawOne.js +25 -24
- package/dist/canvas/defaultDrawOne.js.map +1 -1
- package/dist/canvas/deps/areaSelect.js +4 -4
- package/dist/canvas/deps/areaSelect.js.map +1 -1
- package/dist/canvas/deps/debug.js.map +1 -1
- package/dist/canvas/deps/editAnchors.js +47 -71
- package/dist/canvas/deps/editAnchors.js.map +1 -1
- package/dist/canvas/deps/geometryProjection.js.map +1 -1
- package/dist/canvas/deps/hitTestArea.js +45 -25
- package/dist/canvas/deps/hitTestArea.js.map +1 -1
- package/dist/canvas/deps/insert.js +149 -104
- package/dist/canvas/deps/insert.js.map +1 -1
- package/dist/canvas/deps/lassoSelect.js +5 -5
- package/dist/canvas/deps/lassoSelect.js.map +1 -1
- package/dist/canvas/deps/layout.js +9 -15
- package/dist/canvas/deps/layout.js.map +1 -1
- package/dist/canvas/deps/poseDescriptor.js +1 -1
- package/dist/canvas/deps/poseDescriptor.js.map +1 -1
- package/dist/canvas/deps/resizePolicy.js.map +1 -1
- package/dist/canvas/deps/slice.js +44 -45
- package/dist/canvas/deps/slice.js.map +1 -1
- package/dist/canvas/deps/textEdit.js +8 -8
- package/dist/canvas/deps/textEdit.js.map +1 -1
- package/dist/canvas/deps/view.js.map +1 -1
- package/dist/canvas/derivedPath.js +69 -43
- package/dist/canvas/derivedPath.js.map +1 -1
- package/dist/canvas/drawEnvelope.js +8 -4
- package/dist/canvas/drawEnvelope.js.map +1 -1
- package/dist/canvas/getNodeAtPoint.js +2 -6
- package/dist/canvas/getNodeAtPoint.js.map +1 -1
- package/dist/canvas/hud.module.js.map +1 -1
- package/dist/canvas/insertPreviewExtent.js +33 -31
- package/dist/canvas/insertPreviewExtent.js.map +1 -1
- package/dist/canvas/layerOrder.js.map +1 -1
- package/dist/canvas/layerSlots.js +6 -1
- package/dist/canvas/layerSlots.js.map +1 -1
- package/dist/canvas/nodeShapes/derivedPainter.js +12 -12
- package/dist/canvas/nodeShapes/derivedPainter.js.map +1 -1
- package/dist/canvas/nodeShapes/imagePainter.js +10 -10
- package/dist/canvas/nodeShapes/imagePainter.js.map +1 -1
- package/dist/canvas/nodeShapes/memo.js.map +1 -1
- package/dist/canvas/nodeShapes/nodePaint.js +34 -23
- package/dist/canvas/nodeShapes/nodePaint.js.map +1 -1
- package/dist/canvas/nodeShapes/pathPainter.js +23 -22
- package/dist/canvas/nodeShapes/pathPainter.js.map +1 -1
- package/dist/canvas/nodeShapes/poseBox.js +6 -6
- package/dist/canvas/nodeShapes/poseBox.js.map +1 -1
- package/dist/canvas/nodeShapes/rectFallbackPainter.js +8 -8
- package/dist/canvas/nodeShapes/rectFallbackPainter.js.map +1 -1
- package/dist/canvas/nodeShapes/shapePainter.js +16 -16
- package/dist/canvas/nodeShapes/shapePainter.js.map +1 -1
- package/dist/canvas/nodeShapes/textPainter.js +1 -1
- package/dist/canvas/nodeShapes/textPainter.js.map +1 -1
- package/dist/canvas/overChildren.js +29 -0
- package/dist/canvas/overChildren.js.map +1 -0
- package/dist/canvas/overlayRoleStrokes.js.map +1 -1
- package/dist/canvas/paintCull.js +6 -8
- package/dist/canvas/paintCull.js.map +1 -1
- package/dist/{features/cursor → canvas}/paintedCursorLayer.js +2 -2
- package/dist/canvas/paintedCursorLayer.js.map +1 -0
- package/dist/canvas/pickReach.js +23 -0
- package/dist/canvas/pickReach.js.map +1 -0
- package/dist/canvas/pickWalk.js +43 -70
- package/dist/canvas/pickWalk.js.map +1 -1
- package/dist/canvas/planeClips.js +18 -19
- package/dist/canvas/planeClips.js.map +1 -1
- package/dist/canvas/poseCascade.js +41 -0
- package/dist/canvas/poseCascade.js.map +1 -0
- package/dist/canvas/poseRotation.js +1 -3
- package/dist/canvas/poseRotation.js.map +1 -1
- package/dist/canvas/rasterReadback.js +22 -0
- package/dist/canvas/rasterReadback.js.map +1 -0
- package/dist/canvas/renderDebugSnapshot.js +12 -12
- package/dist/canvas/renderDebugSnapshot.js.map +1 -1
- package/dist/canvas/renderNeeds.js +3 -3
- package/dist/canvas/renderNeeds.js.map +1 -1
- package/dist/canvas/renderSceneToPixels.js +64 -83
- package/dist/canvas/renderSceneToPixels.js.map +1 -1
- package/dist/canvas/sceneAdapter.js +59 -144
- package/dist/canvas/sceneAdapter.js.map +1 -1
- package/dist/canvas/sceneClipboard.js +1 -1
- package/dist/canvas/sceneClipboard.js.map +1 -1
- package/dist/canvas/sceneLayerPaint.js +4 -4
- package/dist/canvas/sceneLayerPaint.js.map +1 -1
- package/dist/canvas/sceneSlotWiring.js +10 -9
- package/dist/canvas/sceneSlotWiring.js.map +1 -1
- package/dist/canvas/sceneViewRender.js +37 -42
- package/dist/canvas/sceneViewRender.js.map +1 -1
- package/dist/canvas/slopsDebugLayer.js +4 -4
- package/dist/canvas/slopsDebugLayer.js.map +1 -1
- package/dist/canvas/useCanvasRenderer.js +23 -11
- package/dist/canvas/useCanvasRenderer.js.map +1 -1
- package/dist/canvas/useCanvasSurface.js +31 -0
- package/dist/canvas/useCanvasSurface.js.map +1 -0
- package/dist/canvas/useCanvasView.js +51 -44
- package/dist/canvas/useCanvasView.js.map +1 -1
- package/dist/canvas/useFrameLoop.js +11 -12
- package/dist/canvas/useFrameLoop.js.map +1 -1
- package/dist/canvas/useHostAnchor.js +35 -33
- package/dist/canvas/useHostAnchor.js.map +1 -1
- package/dist/canvas/useLateContentRedraw.js +8 -8
- package/dist/canvas/useLateContentRedraw.js.map +1 -1
- package/dist/canvas/useSceneAdapter.js +22 -0
- package/dist/canvas/useSceneAdapter.js.map +1 -0
- package/dist/canvas/useSceneLayerList.js +4 -14
- package/dist/canvas/useSceneLayerList.js.map +1 -1
- package/dist/canvas/useSurfaceInput.js +39 -0
- package/dist/canvas/useSurfaceInput.js.map +1 -0
- package/dist/canvas/useToolCursor.js +29 -0
- package/dist/canvas/useToolCursor.js.map +1 -0
- package/dist/canvas/useViewHelpers.js +46 -85
- package/dist/canvas/useViewHelpers.js.map +1 -1
- package/dist/canvas/viewInputs.js.map +1 -1
- package/dist/canvas/viewRegistry.js +40 -34
- package/dist/canvas/viewRegistry.js.map +1 -1
- package/dist/canvas/watchElementMove.js +43 -0
- package/dist/canvas/watchElementMove.js.map +1 -0
- package/dist/canvas/wrapNodeOutput.js +7 -2
- package/dist/canvas/wrapNodeOutput.js.map +1 -1
- package/dist/clipboard.d.ts +7 -14
- package/dist/{types-B4iJRHC3.d.ts → clone-C0eADtS0.d.ts} +129 -84
- package/dist/clone.d.ts +4 -8
- package/dist/clone.js +0 -2
- package/dist/core/device/targets.js.map +1 -1
- package/dist/core/device/useDeviceProfile.js +13 -13
- package/dist/core/device/useDeviceProfile.js.map +1 -1
- package/dist/{interactions/actions/resize → core/geometry}/autoPoseDescriptor.js +8 -7
- package/dist/core/geometry/autoPoseDescriptor.js.map +1 -0
- package/dist/core/geometry/pathPoseDescriptor.js +88 -0
- package/dist/core/geometry/pathPoseDescriptor.js.map +1 -0
- package/dist/core/geometry/poseDescriptor.js +102 -29
- package/dist/core/geometry/poseDescriptor.js.map +1 -1
- package/dist/core/geometry/regionHit.js +35 -37
- package/dist/core/geometry/regionHit.js.map +1 -1
- package/dist/core/geometry/targetFrame.js +94 -0
- package/dist/core/geometry/targetFrame.js.map +1 -0
- package/dist/core/geometry/unionBounds.js +4 -5
- package/dist/core/geometry/unionBounds.js.map +1 -1
- package/dist/core/layers/backgroundFill.js +31 -0
- package/dist/core/layers/backgroundFill.js.map +1 -0
- package/dist/{features/groups → core/layers}/children.js +2 -4
- package/dist/core/layers/children.js.map +1 -0
- package/dist/{features/focus → core/layers}/gateLayer.js +2 -2
- package/dist/core/layers/gateLayer.js.map +1 -0
- package/dist/core/layers/layerGroup.js +40 -0
- package/dist/core/layers/layerGroup.js.map +1 -0
- package/dist/core/layers/render.js +50 -76
- package/dist/core/layers/render.js.map +1 -1
- package/dist/core/ops/create.js +2 -2
- package/dist/core/ops/create.js.map +1 -1
- package/dist/core/ops/createHistory.js +9 -9
- package/dist/core/ops/createHistory.js.map +1 -1
- package/dist/core/ops/delete.js +19 -23
- package/dist/core/ops/delete.js.map +1 -1
- package/dist/core/ops/reorder/index.js +3 -7
- package/dist/core/ops/reorder/index.js.map +1 -1
- package/dist/core/ops/reorder/setChildOrder.js +2 -4
- package/dist/core/ops/reorder/setChildOrder.js.map +1 -1
- package/dist/core/ops/reparent.js +0 -1
- package/dist/core/ops/reparent.js.map +1 -1
- package/dist/core/ops/slot.js +3 -6
- package/dist/core/ops/slot.js.map +1 -1
- package/dist/core/pages/fitViewToPage.js +15 -0
- package/dist/core/pages/fitViewToPage.js.map +1 -0
- package/dist/core/pages/pages.js +65 -0
- package/dist/core/pages/pages.js.map +1 -0
- package/dist/core/pages/pagesLayer.js +27 -0
- package/dist/core/pages/pagesLayer.js.map +1 -0
- package/dist/core/paint/meshKind.js +16 -0
- package/dist/core/paint/meshKind.js.map +1 -0
- package/dist/{features/meshPaint/lazyKind.js → core/paint/meshKindLazy.js} +104 -93
- package/dist/core/paint/meshKindLazy.js.map +1 -0
- package/dist/core/paint/paintKindEntry.js +8 -0
- package/dist/core/paint/paintKindEntry.js.map +1 -0
- package/dist/core/paint/paintKinds.js +144 -0
- package/dist/core/paint/paintKinds.js.map +1 -0
- package/dist/core/paint/registerMesh.js +7 -0
- package/dist/core/paint/registerMesh.js.map +1 -0
- package/dist/core/scene/NodeProperties.js.map +1 -1
- package/dist/core/scene/NodeRouting.js.map +1 -1
- package/dist/core/scene/arrivalWindow.js +65 -64
- package/dist/core/scene/arrivalWindow.js.map +1 -1
- package/dist/core/scene/boundOps.js +40 -0
- package/dist/core/scene/boundOps.js.map +1 -0
- package/dist/core/scene/composeFrame.js +9 -6
- package/dist/core/scene/composeFrame.js.map +1 -1
- package/dist/core/scene/composePose.js +105 -0
- package/dist/core/scene/composePose.js.map +1 -0
- package/dist/core/scene/depMemo.js +31 -6
- package/dist/core/scene/depMemo.js.map +1 -1
- package/dist/core/scene/derivedPath.js +19 -20
- package/dist/core/scene/derivedPath.js.map +1 -1
- package/dist/core/scene/editMode.js +26 -0
- package/dist/core/scene/editMode.js.map +1 -0
- package/dist/core/scene/effectivePose.js +42 -39
- package/dist/core/scene/effectivePose.js.map +1 -1
- package/dist/core/scene/fieldEdits.js +98 -0
- package/dist/core/scene/fieldEdits.js.map +1 -0
- package/dist/core/scene/historyFacade.js +122 -70
- package/dist/core/scene/historyFacade.js.map +1 -1
- package/dist/core/scene/historyForm.js +6 -0
- package/dist/core/scene/historyForm.js.map +1 -0
- package/dist/core/scene/kitOps.js +83 -71
- package/dist/core/scene/kitOps.js.map +1 -1
- package/dist/core/scene/kitRegistry.js.map +1 -1
- package/dist/core/scene/layerStack.js +105 -12
- package/dist/core/scene/layerStack.js.map +1 -1
- package/dist/core/scene/layoutPass.js +58 -59
- package/dist/core/scene/layoutPass.js.map +1 -1
- package/dist/{features/groups → core/scene}/nestedHit.js +3 -3
- package/dist/core/scene/nestedHit.js.map +1 -0
- package/dist/core/scene/nodeFnFields.js +16 -9
- package/dist/core/scene/nodeFnFields.js.map +1 -1
- package/dist/core/scene/nodeMemo.js.map +1 -1
- package/dist/core/scene/nodeStore.js +72 -71
- package/dist/core/scene/nodeStore.js.map +1 -1
- package/dist/core/scene/notifier.js +37 -0
- package/dist/core/scene/notifier.js.map +1 -0
- package/dist/core/scene/opTable.js +50 -0
- package/dist/core/scene/opTable.js.map +1 -0
- package/dist/core/scene/outerOps.js +67 -0
- package/dist/core/scene/outerOps.js.map +1 -0
- package/dist/core/scene/poseHold.js +39 -0
- package/dist/core/scene/poseHold.js.map +1 -0
- package/dist/core/scene/poseOverrides.js +44 -36
- package/dist/core/scene/poseOverrides.js.map +1 -1
- package/dist/core/scene/poseSnapshot.js.map +1 -1
- package/dist/core/scene/reconcileSpecs.js +4 -3
- package/dist/core/scene/reconcileSpecs.js.map +1 -1
- package/dist/core/scene/recorder.js +86 -0
- package/dist/core/scene/recorder.js.map +1 -0
- package/dist/core/scene/renderOrder.js.map +1 -1
- package/dist/core/scene/scene.js +81 -690
- package/dist/core/scene/scene.js.map +1 -1
- package/dist/core/scene/sceneEdits.js +58 -0
- package/dist/core/scene/sceneEdits.js.map +1 -0
- package/dist/core/scene/sceneMutators.js +49 -0
- package/dist/core/scene/sceneMutators.js.map +1 -0
- package/dist/core/scene/scenePoseAdapter.js +16 -0
- package/dist/core/scene/scenePoseAdapter.js.map +1 -0
- package/dist/core/scene/sceneRecording.js +91 -0
- package/dist/core/scene/sceneRecording.js.map +1 -0
- package/dist/core/scene/sceneSelection.js +28 -0
- package/dist/core/scene/sceneSelection.js.map +1 -0
- package/dist/core/scene/sceneState.js +49 -0
- package/dist/core/scene/sceneState.js.map +1 -0
- package/dist/core/scene/serialization.js +8 -5
- package/dist/core/scene/serialization.js.map +1 -1
- package/dist/core/scene/staleReplay.js +51 -0
- package/dist/core/scene/staleReplay.js.map +1 -0
- package/dist/core/scene/statedFields.js +9 -0
- package/dist/core/scene/statedFields.js.map +1 -0
- package/dist/core/scene/treeEdits.js +127 -0
- package/dist/core/scene/treeEdits.js.map +1 -0
- package/dist/core/scene/treeReads.js +26 -0
- package/dist/core/scene/treeReads.js.map +1 -0
- package/dist/core/scene/types.js.map +1 -1
- package/dist/{features/groups → core/scene}/unionOfChildren.js +3 -3
- package/dist/core/scene/unionOfChildren.js.map +1 -0
- package/dist/core/scene/unitScopes.js +13 -0
- package/dist/core/scene/unitScopes.js.map +1 -0
- package/dist/core/scene/useScene.js.map +1 -1
- package/dist/core/selection/readOnlySelection.js +32 -0
- package/dist/core/selection/readOnlySelection.js.map +1 -0
- package/dist/core/selection/usePublishSceneSelection.js +26 -0
- package/dist/core/selection/usePublishSceneSelection.js.map +1 -0
- package/dist/core/selection/useSelection.js +34 -25
- package/dist/core/selection/useSelection.js.map +1 -1
- package/dist/core/shapeKinds.js.map +1 -1
- package/dist/core/stylus/stylus.js.map +1 -1
- package/dist/core/stylus/usePointerStylus.js.map +1 -1
- package/dist/core/usePaintKinds.js +1 -1
- package/dist/core/usePaintKinds.js.map +1 -1
- package/dist/core/viewport/clientToWorld.js.map +1 -1
- package/dist/core/viewport/fitViewToBounds.js.map +1 -1
- package/dist/core/viewport/parallax.js.map +1 -1
- package/dist/core/viewport/screenSlop.js +11 -11
- package/dist/core/viewport/screenSlop.js.map +1 -1
- package/dist/core/viewport/useCanvasSize.js.map +1 -1
- package/dist/core/viewport/useDecayLoop.js +31 -33
- package/dist/core/viewport/useDecayLoop.js.map +1 -1
- package/dist/core/viewport/useNodeOverlayFrame.js +84 -0
- package/dist/core/viewport/useNodeOverlayFrame.js.map +1 -0
- package/dist/core/viewport/useViewAnimation.js +113 -53
- package/dist/core/viewport/useViewAnimation.js.map +1 -1
- package/dist/core/viewport/view.js +14 -11
- package/dist/core/viewport/view.js.map +1 -1
- package/dist/core/viewport/wheelHandler.js.map +1 -1
- package/dist/core/viewport/zoomAt.js +11 -2
- package/dist/core/viewport/zoomAt.js.map +1 -1
- package/dist/{cornerHandles-CtCb8a3G.d.ts → cornerHandles-BSKbyuvQ.d.ts} +11 -24
- package/dist/debug/createDebugOverlayLayer.js +100 -100
- package/dist/debug/createDebugOverlayLayer.js.map +1 -1
- package/dist/debug/createDebugSink.js.map +1 -1
- package/dist/debug/frameStats.js.map +1 -1
- package/dist/debug/useDebugSink.js +52 -0
- package/dist/debug/useDebugSink.js.map +1 -0
- package/dist/features/chrome-caps/buildChromeCtx.js.map +1 -1
- package/dist/features/chrome-caps/conditions.js.map +1 -1
- package/dist/features/chrome-caps/defaults.js.map +1 -1
- package/dist/features/chrome-caps/resolve.js.map +1 -1
- package/dist/features/chrome-caps/useChromeCaps.js +54 -0
- package/dist/features/chrome-caps/useChromeCaps.js.map +1 -0
- package/dist/features/chrome-caps/useHoverTracking.js.map +1 -1
- package/dist/features/ingestion/contentHandlers.js +25 -19
- package/dist/features/ingestion/contentHandlers.js.map +1 -1
- package/dist/features/ingestion/imageHandler.js +21 -24
- package/dist/features/ingestion/imageHandler.js.map +1 -1
- package/dist/features/ingestion/openFilePicker.js.map +1 -1
- package/dist/features/ingestion/placement.js +16 -0
- package/dist/features/ingestion/placement.js.map +1 -0
- package/dist/features/ingestion/svgHandler.js +5 -0
- package/dist/features/ingestion/svgHandler.js.map +1 -1
- package/dist/features/ingestion/textHandler.js +28 -0
- package/dist/features/ingestion/textHandler.js.map +1 -0
- package/dist/features/ingestion/useCanvasIngestion.js +48 -0
- package/dist/features/ingestion/useCanvasIngestion.js.map +1 -0
- package/dist/features/ingestion/weaselJsonHandler.js +5 -0
- package/dist/features/ingestion/weaselJsonHandler.js.map +1 -1
- package/dist/features/longPress/longPressFeedback.js.map +1 -1
- package/dist/features/modes/modeLayers.js +7 -7
- package/dist/features/modes/modeLayers.js.map +1 -1
- package/dist/features/paths/editablePath.js +63 -0
- package/dist/features/paths/editablePath.js.map +1 -0
- package/dist/features/paths/index.js +9 -16
- package/dist/features/paths/pathEditState.js +41 -0
- package/dist/features/paths/pathEditState.js.map +1 -0
- package/dist/features/paths/pathEditingOverlayLayer.js +36 -38
- package/dist/features/paths/pathEditingOverlayLayer.js.map +1 -1
- package/dist/features/paths/pathLayer.js +3 -2
- package/dist/features/paths/pathLayer.js.map +1 -1
- package/dist/features/paths/penPreviewLayer.js +86 -88
- package/dist/features/paths/penPreviewLayer.js.map +1 -1
- package/dist/features/paths/shapeGenerator.js +89 -0
- package/dist/features/paths/shapeGenerator.js.map +1 -0
- package/dist/features/paths/usePathEdit.js +34 -0
- package/dist/features/paths/usePathEdit.js.map +1 -0
- package/dist/features/poseRun/usePoseRun.js +44 -57
- package/dist/features/poseRun/usePoseRun.js.map +1 -1
- package/dist/features/selection/overlay.js +170 -178
- package/dist/features/selection/overlay.js.map +1 -1
- package/dist/features/text/index.js +6 -0
- package/dist/features/text/textLayer.js +1 -1
- package/dist/features/text/textLayer.js.map +1 -1
- package/dist/features/text/useSceneTextEdit.js +119 -88
- package/dist/features/text/useSceneTextEdit.js.map +1 -1
- package/dist/features/viewports/viewResolver.js +28 -24
- package/dist/features/viewports/viewResolver.js.map +1 -1
- package/dist/features/viewports/viewportLayer.js +25 -36
- package/dist/features/viewports/viewportLayer.js.map +1 -1
- package/dist/icons/SliceIcon.js +24 -0
- package/dist/icons/SliceIcon.js.map +1 -0
- package/dist/index.d.ts +5200 -8777
- package/dist/index.js +284 -320
- package/dist/input/keyState.js +14 -14
- package/dist/interactions/actions/actionShortcuts.js.map +1 -1
- package/dist/interactions/actions/{defaults/align.js → align/action.js} +15 -16
- package/dist/interactions/actions/align/action.js.map +1 -0
- package/dist/interactions/actions/align/align.js +24 -24
- package/dist/interactions/actions/align/align.js.map +1 -1
- package/dist/interactions/actions/booleans/action.js +65 -0
- package/dist/interactions/actions/booleans/action.js.map +1 -0
- package/dist/interactions/actions/booleans/booleans.js +74 -83
- package/dist/interactions/actions/booleans/booleans.js.map +1 -1
- package/dist/interactions/actions/booleans/operands.js +40 -0
- package/dist/interactions/actions/booleans/operands.js.map +1 -0
- package/dist/interactions/actions/booleans/pieces.js +45 -0
- package/dist/interactions/actions/booleans/pieces.js.map +1 -0
- package/dist/interactions/actions/booleans/placement.js +24 -0
- package/dist/interactions/actions/booleans/placement.js.map +1 -0
- package/dist/interactions/actions/booleans/useBooleans.js +11 -9
- package/dist/interactions/actions/booleans/useBooleans.js.map +1 -1
- package/dist/interactions/actions/booleans/useBooleansAdapter.js.map +1 -1
- package/dist/interactions/actions/{defaults/clipboard.js → clipboard/action.js} +19 -19
- package/dist/interactions/actions/clipboard/action.js.map +1 -0
- package/dist/interactions/actions/clipboard/clipboardOps.js +15 -15
- package/dist/interactions/actions/clipboard/clipboardOps.js.map +1 -1
- package/dist/interactions/actions/clipboard/wireFormat.js.map +1 -1
- package/dist/interactions/actions/clone/action.js +103 -0
- package/dist/interactions/actions/clone/action.js.map +1 -0
- package/dist/interactions/actions/clone/behaviors.js +52 -0
- package/dist/interactions/actions/clone/behaviors.js.map +1 -0
- package/dist/interactions/actions/defaultCommitAdapter.js +10 -37
- package/dist/interactions/actions/defaultCommitAdapter.js.map +1 -1
- package/dist/interactions/actions/defaults/anchorEditing.js +69 -74
- package/dist/interactions/actions/defaults/anchorEditing.js.map +1 -1
- package/dist/interactions/actions/defaults/anchorHandles.js +42 -0
- package/dist/interactions/actions/defaults/anchorHandles.js.map +1 -0
- package/dist/interactions/actions/defaults/anchorJoin.js +92 -0
- package/dist/interactions/actions/defaults/anchorJoin.js.map +1 -0
- package/dist/interactions/actions/defaults/areaSelect.js.map +1 -1
- package/dist/interactions/actions/defaults/bendSegment.js +46 -0
- package/dist/interactions/actions/defaults/bendSegment.js.map +1 -0
- package/dist/interactions/actions/defaults/cancelGesture.js.map +1 -1
- package/dist/interactions/actions/defaults/clearSelection.js.map +1 -1
- package/dist/interactions/actions/defaults/copySubtree.js +1 -1
- package/dist/interactions/actions/defaults/copySubtree.js.map +1 -1
- package/dist/interactions/actions/defaults/createPaintAction.js.map +1 -1
- package/dist/interactions/actions/defaults/delete.js.map +1 -1
- package/dist/interactions/actions/defaults/duplicate.js +36 -21
- package/dist/interactions/actions/defaults/duplicate.js.map +1 -1
- package/dist/interactions/actions/defaults/enterPathEdit.js +19 -7
- package/dist/interactions/actions/defaults/enterPathEdit.js.map +1 -1
- package/dist/interactions/actions/defaults/enterTextEdit.js.map +1 -1
- package/dist/interactions/actions/defaults/group.js +35 -40
- package/dist/interactions/actions/defaults/group.js.map +1 -1
- package/dist/interactions/actions/defaults/icons/anchorIcons.js +75 -0
- package/dist/interactions/actions/defaults/icons/anchorIcons.js.map +1 -0
- package/dist/interactions/actions/defaults/icons/booleanIcons.js +24 -1
- package/dist/interactions/actions/defaults/icons/booleanIcons.js.map +1 -1
- package/dist/interactions/actions/defaults/icons/editIcons.js +35 -8
- package/dist/interactions/actions/defaults/icons/editIcons.js.map +1 -1
- package/dist/interactions/actions/defaults/icons/outlineIcons.js +39 -1
- package/dist/interactions/actions/defaults/icons/outlineIcons.js.map +1 -1
- package/dist/interactions/actions/defaults/ingest.js +19 -15
- package/dist/interactions/actions/defaults/ingest.js.map +1 -1
- package/dist/interactions/actions/defaults/insertPathAnchor.js +18 -34
- package/dist/interactions/actions/defaults/insertPathAnchor.js.map +1 -1
- package/dist/interactions/actions/defaults/nudge.js +43 -39
- package/dist/interactions/actions/defaults/nudge.js.map +1 -1
- package/dist/interactions/actions/defaults/pinchZoom.js +29 -29
- package/dist/interactions/actions/defaults/pinchZoom.js.map +1 -1
- package/dist/interactions/actions/defaults/requiresSelection.js.map +1 -1
- package/dist/interactions/actions/defaults/segmentUnder.js +22 -0
- package/dist/interactions/actions/defaults/segmentUnder.js.map +1 -0
- package/dist/interactions/actions/defaults/setFill.js +9 -3
- package/dist/interactions/actions/defaults/setFill.js.map +1 -1
- package/dist/interactions/actions/defaults/setFillOpacity.js +4 -1
- package/dist/interactions/actions/defaults/setFillOpacity.js.map +1 -1
- package/dist/interactions/actions/defaults/setStroke.js.map +1 -1
- package/dist/interactions/actions/defaults/sliceOps.js +20 -22
- package/dist/interactions/actions/defaults/sliceOps.js.map +1 -1
- package/dist/interactions/actions/defaults/toolActivate.js.map +1 -1
- package/dist/interactions/actions/defaults/toolResetToDefault.js.map +1 -1
- package/dist/interactions/actions/defaults/viewportDragPan.js +1 -1
- package/dist/interactions/actions/defaults/viewportDragPan.js.map +1 -1
- package/dist/interactions/actions/defaults/viewportWheelPan.js.map +1 -1
- package/dist/interactions/actions/defaults/viewportZoom.js +82 -79
- package/dist/interactions/actions/defaults/viewportZoom.js.map +1 -1
- package/dist/interactions/actions/{defaults/distribute.js → distribute/action.js} +18 -19
- package/dist/interactions/actions/distribute/action.js.map +1 -0
- package/dist/interactions/actions/distribute/distribute.js +15 -15
- package/dist/interactions/actions/distribute/distribute.js.map +1 -1
- package/dist/interactions/actions/edit-anchors/action.js +101 -0
- package/dist/interactions/actions/edit-anchors/action.js.map +1 -0
- package/dist/interactions/actions/edit-anchors/geometry.js +2 -4
- package/dist/interactions/actions/edit-anchors/geometry.js.map +1 -1
- package/dist/interactions/actions/edit-anchors/preview.js +26 -0
- package/dist/interactions/actions/edit-anchors/preview.js.map +1 -0
- package/dist/interactions/actions/edit-anchors/symmetry.js +11 -0
- package/dist/interactions/actions/edit-anchors/symmetry.js.map +1 -0
- package/dist/interactions/actions/flip/action.js +124 -0
- package/dist/interactions/actions/flip/action.js.map +1 -0
- package/dist/interactions/actions/flip/helpers.js +1 -1
- package/dist/interactions/actions/flip/helpers.js.map +1 -1
- package/dist/interactions/actions/geometryProjection.js.map +1 -1
- package/dist/interactions/actions/gestureFrames.js +18 -0
- package/dist/interactions/actions/gestureFrames.js.map +1 -0
- package/dist/interactions/actions/gestureLifecycle.js +47 -20
- package/dist/interactions/actions/gestureLifecycle.js.map +1 -1
- package/dist/interactions/actions/insert/action.js +79 -0
- package/dist/interactions/actions/insert/action.js.map +1 -0
- package/dist/interactions/actions/insert/commit.js +28 -0
- package/dist/interactions/actions/insert/commit.js.map +1 -0
- package/dist/interactions/actions/insert/extras.js +65 -0
- package/dist/interactions/actions/insert/extras.js.map +1 -0
- package/dist/interactions/actions/insert/frame.js +55 -0
- package/dist/interactions/actions/insert/frame.js.map +1 -0
- package/dist/interactions/actions/insert/geometry.js +35 -0
- package/dist/interactions/actions/insert/geometry.js.map +1 -0
- package/dist/interactions/actions/insert/repositionAction.js +31 -0
- package/dist/interactions/actions/insert/repositionAction.js.map +1 -0
- package/dist/interactions/actions/insert/rotateAction.js +21 -0
- package/dist/interactions/actions/insert/rotateAction.js.map +1 -0
- package/dist/interactions/actions/insert/session.js +59 -0
- package/dist/interactions/actions/insert/session.js.map +1 -0
- package/dist/interactions/actions/insert/shape.js +34 -0
- package/dist/interactions/actions/insert/shape.js.map +1 -0
- package/dist/interactions/actions/lasso-select/action.js +143 -0
- package/dist/interactions/actions/lasso-select/action.js.map +1 -0
- package/dist/interactions/actions/move/action.js +91 -0
- package/dist/interactions/actions/move/action.js.map +1 -0
- package/dist/interactions/actions/move/behaviors/layoutDrop.js +51 -0
- package/dist/interactions/actions/move/behaviors/layoutDrop.js.map +1 -0
- package/dist/interactions/actions/move/behaviors/reparentOnDrop.js +15 -0
- package/dist/interactions/actions/move/behaviors/reparentOnDrop.js.map +1 -0
- package/dist/interactions/actions/move/behaviors/snapToContainer.js +35 -28
- package/dist/interactions/actions/move/behaviors/snapToContainer.js.map +1 -1
- package/dist/interactions/actions/move/capture.js +108 -0
- package/dist/interactions/actions/move/capture.js.map +1 -0
- package/dist/interactions/actions/move/commit/index.js +41 -0
- package/dist/interactions/actions/move/commit/index.js.map +1 -0
- package/dist/interactions/actions/move/commit/layoutDrop.js +44 -0
- package/dist/interactions/actions/move/commit/layoutDrop.js.map +1 -0
- package/dist/interactions/actions/move/commit/layoutRelease.js +100 -0
- package/dist/interactions/actions/move/commit/layoutRelease.js.map +1 -0
- package/dist/interactions/actions/move/commit/rebase.js +18 -0
- package/dist/interactions/actions/move/commit/rebase.js.map +1 -0
- package/dist/interactions/actions/move/commit/reparent.js +65 -0
- package/dist/interactions/actions/move/commit/reparent.js.map +1 -0
- package/dist/interactions/actions/move/delta.js +51 -0
- package/dist/interactions/actions/move/delta.js.map +1 -0
- package/dist/interactions/actions/move/frame.js +47 -0
- package/dist/interactions/actions/move/frame.js.map +1 -0
- package/dist/interactions/actions/move/gestureAdapter.js +15 -40
- package/dist/interactions/actions/move/gestureAdapter.js.map +1 -1
- package/dist/interactions/actions/move/landedDescendants.js +8 -8
- package/dist/interactions/actions/move/layout/container.js +94 -0
- package/dist/interactions/actions/move/layout/container.js.map +1 -0
- package/dist/interactions/actions/move/layout/dragged.js +58 -0
- package/dist/interactions/actions/move/layout/dragged.js.map +1 -0
- package/dist/interactions/actions/move/layout/dropPass.js +122 -0
- package/dist/interactions/actions/move/layout/dropPass.js.map +1 -0
- package/dist/interactions/actions/move/layout/exits.js +38 -0
- package/dist/interactions/actions/move/layout/exits.js.map +1 -0
- package/dist/interactions/actions/move/layout/glide.js +48 -0
- package/dist/interactions/actions/move/layout/glide.js.map +1 -0
- package/dist/interactions/actions/move/session.js +63 -0
- package/dist/interactions/actions/move/session.js.map +1 -0
- package/dist/interactions/actions/move/translate.js +61 -0
- package/dist/interactions/actions/move/translate.js.map +1 -0
- package/dist/interactions/actions/outlines/createOutlines.js +17 -64
- package/dist/interactions/actions/outlines/createOutlines.js.map +1 -1
- package/dist/interactions/actions/outlines/createOutlinesAction.js +51 -0
- package/dist/interactions/actions/outlines/createOutlinesAction.js.map +1 -0
- package/dist/interactions/actions/outlines/outlineStroke.js +72 -0
- package/dist/interactions/actions/outlines/outlineStroke.js.map +1 -0
- package/dist/interactions/actions/outlines/outlineStrokeAction.js +37 -0
- package/dist/interactions/actions/outlines/outlineStrokeAction.js.map +1 -0
- package/dist/interactions/actions/outlines/replaceWithPaths.js +54 -0
- package/dist/interactions/actions/outlines/replaceWithPaths.js.map +1 -0
- package/dist/interactions/actions/outlines/strokeRegion.js +27 -0
- package/dist/interactions/actions/outlines/strokeRegion.js.map +1 -0
- package/dist/interactions/actions/pathCommands/cutJoin.js +102 -0
- package/dist/interactions/actions/pathCommands/cutJoin.js.map +1 -0
- package/dist/interactions/actions/pathCommands/livePathEdit.js +64 -0
- package/dist/interactions/actions/pathCommands/livePathEdit.js.map +1 -0
- package/dist/interactions/actions/pathCommands/pathNodes.js +99 -0
- package/dist/interactions/actions/pathCommands/pathNodes.js.map +1 -0
- package/dist/interactions/actions/pathCommands/simplifyOffset.js +42 -0
- package/dist/interactions/actions/pathCommands/simplifyOffset.js.map +1 -0
- package/dist/interactions/actions/planeInput.js.map +1 -1
- package/dist/interactions/actions/pointerState.js +12 -0
- package/dist/interactions/actions/pointerState.js.map +1 -0
- package/dist/interactions/actions/poseDescriptorDep.js +1 -1
- package/dist/interactions/actions/poseDescriptorDep.js.map +1 -1
- package/dist/interactions/actions/poseFrame.js +26 -26
- package/dist/interactions/actions/poseFrame.js.map +1 -1
- package/dist/interactions/actions/resize/action.js +66 -0
- package/dist/interactions/actions/resize/action.js.map +1 -0
- package/dist/interactions/actions/resize/behaviors/lockAspect.js.map +1 -1
- package/dist/interactions/actions/resize/boxFrame.js +16 -0
- package/dist/interactions/actions/resize/boxFrame.js.map +1 -0
- package/dist/interactions/actions/resize/capture.js +85 -0
- package/dist/interactions/actions/resize/capture.js.map +1 -0
- package/dist/interactions/actions/resize/commit.js +69 -0
- package/dist/interactions/actions/resize/commit.js.map +1 -0
- package/dist/interactions/actions/resize/frame.js +88 -0
- package/dist/interactions/actions/resize/frame.js.map +1 -0
- package/dist/interactions/actions/resize/pointSnap.js +111 -0
- package/dist/interactions/actions/resize/pointSnap.js.map +1 -0
- package/dist/interactions/actions/resize/replay.js +47 -0
- package/dist/interactions/actions/resize/replay.js.map +1 -0
- package/dist/interactions/actions/resize/ruleBounds.js +9 -0
- package/dist/interactions/actions/resize/ruleBounds.js.map +1 -0
- package/dist/interactions/actions/resize/session.js +63 -0
- package/dist/interactions/actions/resize/session.js.map +1 -0
- package/dist/interactions/actions/resolveOverlays.js +2 -1
- package/dist/interactions/actions/resolveOverlays.js.map +1 -1
- package/dist/interactions/actions/resolvePreviews.js.map +1 -1
- package/dist/interactions/actions/rotate/action.js +71 -0
- package/dist/interactions/actions/rotate/action.js.map +1 -0
- package/dist/interactions/actions/rotate/behaviors/index.js +7 -0
- package/dist/interactions/actions/rotate/behaviors/index.js.map +1 -0
- package/dist/interactions/actions/rotate/behaviors/snapRotation.js +12 -0
- package/dist/interactions/actions/rotate/behaviors/snapRotation.js.map +1 -0
- package/dist/interactions/actions/rotate/commit.js +40 -0
- package/dist/interactions/actions/rotate/commit.js.map +1 -0
- package/dist/interactions/actions/rotate/frame.js +65 -0
- package/dist/interactions/actions/rotate/frame.js.map +1 -0
- package/dist/interactions/actions/rotate/handle.js +12 -12
- package/dist/interactions/actions/rotate/handle.js.map +1 -1
- package/dist/interactions/actions/rotate/replay.js +22 -0
- package/dist/interactions/actions/rotate/replay.js.map +1 -0
- package/dist/interactions/actions/rotate/session.js +102 -0
- package/dist/interactions/actions/rotate/session.js.map +1 -0
- package/dist/interactions/actions/spatialReference.js.map +1 -1
- package/dist/interactions/actions/transform-again/action.js +63 -0
- package/dist/interactions/actions/transform-again/action.js.map +1 -0
- package/dist/interactions/actions/transform-again/memory.js +35 -0
- package/dist/interactions/actions/transform-again/memory.js.map +1 -0
- package/dist/interactions/actions/useStandardActions.js +84 -61
- package/dist/interactions/actions/useStandardActions.js.map +1 -1
- package/dist/interactions/gestures/pointerDrag/pointerDrag.js +61 -42
- package/dist/interactions/gestures/pointerDrag/pointerDrag.js.map +1 -1
- package/dist/interactions/gestures/shared/originProjection.js +1 -1
- package/dist/interactions/gestures/shared/originProjection.js.map +1 -1
- package/dist/interactions/gestures/shared/screenTolerance.js +8 -2
- package/dist/interactions/gestures/shared/screenTolerance.js.map +1 -1
- package/dist/interactions/gestures/shared/snap.js.map +1 -1
- package/dist/math-CYUjoyyU.d.ts +33 -0
- package/dist/math.d.ts +5 -2
- package/dist/math.js +6 -6
- package/dist/mesh.d.ts +4 -268
- package/dist/mesh.js +3 -7
- package/dist/move.d.ts +6 -4
- package/dist/{originProjection-gHnOup4e.d.ts → originProjection-CoNVpITV.d.ts} +1 -1
- package/dist/patterns-builtin.d.ts +1 -118
- package/dist/patterns-builtin.js +2 -3
- package/dist/poseDescriptor-Bqk-11Rl.d.ts +73 -0
- package/dist/renderer.d.ts +1 -92
- package/dist/renderer.js +2 -19
- package/dist/resize.d.ts +11 -22
- package/dist/resize.js +1 -1
- package/dist/style.css +1 -1
- package/dist/test-hook/install.js.map +1 -1
- package/dist/test-hook/useTestHook.js +22 -0
- package/dist/test-hook/useTestHook.js.map +1 -0
- package/dist/test-seams-D0pyV3pR.d.ts +149 -0
- package/dist/test-seams.d.ts +4 -4
- package/dist/test-seams.js +2 -2
- package/dist/tools/builtin/bone/boneActions.js +130 -0
- package/dist/tools/builtin/bone/boneActions.js.map +1 -0
- package/dist/tools/builtin/bone/boneOverlay.js +58 -0
- package/dist/tools/builtin/bone/boneOverlay.js.map +1 -0
- package/dist/tools/builtin/bone/placedRig.js +24 -0
- package/dist/tools/builtin/bone/placedRig.js.map +1 -0
- package/dist/tools/builtin/bone/rigEditState.js +21 -0
- package/dist/tools/builtin/bone/rigEditState.js.map +1 -0
- package/dist/tools/builtin/bone/useBoneTool.js +98 -0
- package/dist/tools/builtin/bone/useBoneTool.js.map +1 -0
- package/dist/tools/builtin/ellipse/useEllipseTool.js +16 -15
- package/dist/tools/builtin/ellipse/useEllipseTool.js.map +1 -1
- package/dist/tools/builtin/eyedropper/useEyedropperTool.js.map +1 -1
- package/dist/tools/builtin/hand/useHandTool.js.map +1 -1
- package/dist/tools/builtin/image/useImageTool.js.map +1 -1
- package/dist/tools/builtin/lasso/useLassoTool.js.map +1 -1
- package/dist/tools/builtin/line/useLineTool.js +16 -15
- package/dist/tools/builtin/line/useLineTool.js.map +1 -1
- package/dist/tools/builtin/pen/usePenTool.js +162 -164
- package/dist/tools/builtin/pen/usePenTool.js.map +1 -1
- package/dist/tools/builtin/pencil/usePencilTool.js.map +1 -1
- package/dist/tools/builtin/pickTopMostHit.js +11 -14
- package/dist/tools/builtin/pickTopMostHit.js.map +1 -1
- package/dist/tools/builtin/polygon/usePolygonTool.js +17 -15
- package/dist/tools/builtin/polygon/usePolygonTool.js.map +1 -1
- package/dist/tools/builtin/rect/useRectTool.js +15 -14
- package/dist/tools/builtin/rect/useRectTool.js.map +1 -1
- package/dist/tools/builtin/select/adapterPointQuery.js +40 -0
- package/dist/tools/builtin/select/adapterPointQuery.js.map +1 -0
- package/dist/tools/builtin/select/selectionContributions.js +5 -5
- package/dist/tools/builtin/select/selectionContributions.js.map +1 -1
- package/dist/tools/builtin/select/useSelectTool.js +44 -71
- package/dist/tools/builtin/select/useSelectTool.js.map +1 -1
- package/dist/tools/builtin/shared/pointerFollower.js.map +1 -1
- package/dist/tools/builtin/slice/useSliceTool.js +69 -72
- package/dist/tools/builtin/slice/useSliceTool.js.map +1 -1
- package/dist/tools/builtin/star/useStarTool.js +18 -16
- package/dist/tools/builtin/star/useStarTool.js.map +1 -1
- package/dist/tools/builtin/text/useTextTool.js +10 -2
- package/dist/tools/builtin/text/useTextTool.js.map +1 -1
- package/dist/tools/builtin/weight/useWeightTool.js +77 -0
- package/dist/tools/builtin/weight/useWeightTool.js.map +1 -0
- package/dist/tools/builtin/weight/weightActions.js +112 -0
- package/dist/tools/builtin/weight/weightActions.js.map +1 -0
- package/dist/tools/builtin/weight/weightOverlay.js +61 -0
- package/dist/tools/builtin/weight/weightOverlay.js.map +1 -0
- package/dist/tools/overlayBinding.js.map +1 -1
- package/dist/tools/useKeybindings.js +20 -14
- package/dist/tools/useKeybindings.js.map +1 -1
- package/dist/{types-k-5Oqh-U.d.ts → types-DBbbCy0i.d.ts} +103 -176
- package/dist/util/paint.js +1 -1
- package/dist/util/paint.js.map +1 -1
- package/dist/version.js +1 -1
- package/package.json +26 -21
- package/dist/animation/colorHelpers.js +0 -135
- package/dist/animation/colorHelpers.js.map +0 -1
- package/dist/animation/colorRegistry.js +0 -37
- package/dist/animation/colorRegistry.js.map +0 -1
- package/dist/animation/engine/axes.js +0 -36
- package/dist/animation/engine/axes.js.map +0 -1
- package/dist/animation/engine/codec.js +0 -170
- package/dist/animation/engine/codec.js.map +0 -1
- package/dist/animation/engine/integrator.js +0 -12
- package/dist/animation/engine/integrator.js.map +0 -1
- package/dist/animation/loop.js +0 -60
- package/dist/animation/loop.js.map +0 -1
- package/dist/animation/observe.js +0 -23
- package/dist/animation/observe.js.map +0 -1
- package/dist/animation/rig/blendPoses.js +0 -43
- package/dist/animation/rig/blendPoses.js.map +0 -1
- package/dist/animation/rig/mirrorPose.js +0 -19
- package/dist/animation/rig/mirrorPose.js.map +0 -1
- package/dist/animation/rig/resolveSkeleton.js +0 -33
- package/dist/animation/rig/resolveSkeleton.js.map +0 -1
- package/dist/animation/rig/solveIk.js +0 -103
- package/dist/animation/rig/solveIk.js.map +0 -1
- package/dist/animation/rig/types.js +0 -12
- package/dist/animation/rig/types.js.map +0 -1
- package/dist/animation/slew.js +0 -27
- package/dist/animation/slew.js.map +0 -1
- package/dist/animation/stagger.js +0 -146
- package/dist/animation/stagger.js.map +0 -1
- package/dist/animation/timeline/booking.js +0 -114
- package/dist/animation/timeline/booking.js.map +0 -1
- package/dist/animation/timeline/createTimeline.js +0 -125
- package/dist/animation/timeline/createTimeline.js.map +0 -1
- package/dist/animation/timeline/sampleTrack.js +0 -79
- package/dist/animation/timeline/sampleTrack.js.map +0 -1
- package/dist/animation/useAnimator.js +0 -388
- package/dist/animation/useAnimator.js.map +0 -1
- package/dist/autoPoseDescriptor-Ct7yqivU.d.ts +0 -108
- package/dist/builtins-DPcdghtB.d.ts +0 -1223
- package/dist/canvas/MinimapCanvas.js +0 -140
- package/dist/canvas/MinimapCanvas.js.map +0 -1
- package/dist/canvas/deps/poseComposition.js +0 -11
- package/dist/canvas/deps/poseComposition.js.map +0 -1
- package/dist/canvas/minimapMath.js +0 -82
- package/dist/canvas/minimapMath.js.map +0 -1
- package/dist/canvas/toolPreview.js +0 -39
- package/dist/canvas/toolPreview.js.map +0 -1
- package/dist/core/adapters/arrayAdapter.js +0 -94
- package/dist/core/adapters/arrayAdapter.js.map +0 -1
- package/dist/core/adapters/useArrayAdapter.js +0 -13
- package/dist/core/adapters/useArrayAdapter.js.map +0 -1
- package/dist/core/fillInPoseFrame.js +0 -102
- package/dist/core/fillInPoseFrame.js.map +0 -1
- package/dist/core/geometry/poseFrame.js +0 -44
- package/dist/core/geometry/poseFrame.js.map +0 -1
- package/dist/core/geometry/poseRotation.js +0 -58
- package/dist/core/geometry/poseRotation.js.map +0 -1
- package/dist/core/gradient.js +0 -136
- package/dist/core/gradient.js.map +0 -1
- package/dist/core/markerInset.js +0 -24
- package/dist/core/markerInset.js.map +0 -1
- package/dist/core/mixed.js +0 -6
- package/dist/core/mixed.js.map +0 -1
- package/dist/core/paintKinds.js +0 -156
- package/dist/core/paintKinds.js.map +0 -1
- package/dist/core/scene/pickability.js +0 -6
- package/dist/core/scene/pickability.js.map +0 -1
- package/dist/core/strokeMarkerShapes.js +0 -139
- package/dist/core/strokeMarkerShapes.js.map +0 -1
- package/dist/core/strokeMarkers.js +0 -28
- package/dist/core/strokeMarkers.js.map +0 -1
- package/dist/core/viewport/meanScale.js +0 -8
- package/dist/core/viewport/meanScale.js.map +0 -1
- package/dist/core/viewport/pxExtent.js +0 -42
- package/dist/core/viewport/pxExtent.js.map +0 -1
- package/dist/features/cursor/paintedCursorLayer.js.map +0 -1
- package/dist/features/focus/gateLayer.js.map +0 -1
- package/dist/features/focus/useCanvasFocus.js +0 -29
- package/dist/features/focus/useCanvasFocus.js.map +0 -1
- package/dist/features/groups/children.js.map +0 -1
- package/dist/features/groups/composePose.js +0 -67
- package/dist/features/groups/composePose.js.map +0 -1
- package/dist/features/groups/nestedHit.js.map +0 -1
- package/dist/features/groups/unionOfChildren.js.map +0 -1
- package/dist/features/images/imageCache.js +0 -104
- package/dist/features/images/imageCache.js.map +0 -1
- package/dist/features/ingestion/index.js +0 -8
- package/dist/features/meshPaint/bake.js +0 -79
- package/dist/features/meshPaint/bake.js.map +0 -1
- package/dist/features/meshPaint/bakeCache.js +0 -59
- package/dist/features/meshPaint/bakeCache.js.map +0 -1
- package/dist/features/meshPaint/handles.js +0 -86
- package/dist/features/meshPaint/handles.js.map +0 -1
- package/dist/features/meshPaint/lazyKind.js.map +0 -1
- package/dist/features/meshPaint/meshPaint.js +0 -239
- package/dist/features/meshPaint/meshPaint.js.map +0 -1
- package/dist/features/meshPaint/meshShader.js +0 -6
- package/dist/features/meshPaint/meshShader.js.map +0 -1
- package/dist/features/meshPaint/register.js +0 -7
- package/dist/features/meshPaint/register.js.map +0 -1
- package/dist/features/meshPaint/surface.js +0 -110
- package/dist/features/meshPaint/surface.js.map +0 -1
- package/dist/features/minimap/actions.js +0 -53
- package/dist/features/minimap/actions.js.map +0 -1
- package/dist/features/minimap/createMinimapContribution.js +0 -96
- package/dist/features/minimap/createMinimapContribution.js.map +0 -1
- package/dist/features/minimap/layers.js +0 -85
- package/dist/features/minimap/layers.js.map +0 -1
- package/dist/features/overlays/useNodeOverlayFrame.js +0 -103
- package/dist/features/overlays/useNodeOverlayFrame.js.map +0 -1
- package/dist/features/parallax/createParallaxLayer.js +0 -26
- package/dist/features/parallax/createParallaxLayer.js.map +0 -1
- package/dist/features/parallax/createParallaxPlane.js +0 -22
- package/dist/features/parallax/createParallaxPlane.js.map +0 -1
- package/dist/features/paths/anchorEdits.js +0 -167
- package/dist/features/paths/anchorEdits.js.map +0 -1
- package/dist/features/paths/anchors.js +0 -159
- package/dist/features/paths/anchors.js.map +0 -1
- package/dist/features/paths/booleans.js +0 -2
- package/dist/features/paths/markerCommands.js +0 -149
- package/dist/features/paths/markerCommands.js.map +0 -1
- package/dist/features/paths/markerSites.js +0 -59
- package/dist/features/paths/markerSites.js.map +0 -1
- package/dist/features/paths/markers.js +0 -95
- package/dist/features/paths/markers.js.map +0 -1
- package/dist/features/paths/nearestAnchor.js +0 -36
- package/dist/features/paths/nearestAnchor.js.map +0 -1
- package/dist/features/paths/pathInWorld.js +0 -41
- package/dist/features/paths/pathInWorld.js.map +0 -1
- package/dist/features/paths/poseDescriptor.js +0 -39
- package/dist/features/paths/poseDescriptor.js.map +0 -1
- package/dist/features/paths/strokeToPath.js +0 -40
- package/dist/features/paths/strokeToPath.js.map +0 -1
- package/dist/features/paths/tessellate/dash.js +0 -52
- package/dist/features/paths/tessellate/dash.js.map +0 -1
- package/dist/features/paths/tessellate/insets.js +0 -32
- package/dist/features/paths/tessellate/insets.js.map +0 -1
- package/dist/features/paths/tessellate/metric.js +0 -72
- package/dist/features/paths/tessellate/metric.js.map +0 -1
- package/dist/features/paths/tessellate/stroke.js +0 -170
- package/dist/features/paths/tessellate/stroke.js.map +0 -1
- package/dist/features/paths/tessellate/vertexWidths.js +0 -32
- package/dist/features/paths/tessellate/vertexWidths.js.map +0 -1
- package/dist/features/patterns/commandPaint.js +0 -18
- package/dist/features/patterns/commandPaint.js.map +0 -1
- package/dist/features/patterns/index.js +0 -11
- package/dist/features/patterns/index.js.map +0 -1
- package/dist/features/patterns/patterns-builtin.js +0 -38
- package/dist/features/patterns/patterns-builtin.js.map +0 -1
- package/dist/features/patterns/rasterizeTile.js +0 -17
- package/dist/features/patterns/rasterizeTile.js.map +0 -1
- package/dist/features/patterns/resolveSpec.js +0 -65
- package/dist/features/patterns/resolveSpec.js.map +0 -1
- package/dist/features/patterns/tileGeometry.js +0 -158
- package/dist/features/patterns/tileGeometry.js.map +0 -1
- package/dist/features/pointer/PointerContext.js +0 -45
- package/dist/features/pointer/PointerContext.js.map +0 -1
- package/dist/features/selection/SelectionContext.js +0 -51
- package/dist/features/selection/SelectionContext.js.map +0 -1
- package/dist/features/simulation/createSimulation.js +0 -61
- package/dist/features/simulation/createSimulation.js.map +0 -1
- package/dist/features/simulation/types.js +0 -6
- package/dist/features/simulation/types.js.map +0 -1
- package/dist/features/simulation/useSimulation.js +0 -74
- package/dist/features/simulation/useSimulation.js.map +0 -1
- package/dist/features/text/domOffsets.js +0 -82
- package/dist/features/text/domOffsets.js.map +0 -1
- package/dist/features/text/domRuns.js +0 -230
- package/dist/features/text/domRuns.js.map +0 -1
- package/dist/features/text/fitTextPose.js +0 -38
- package/dist/features/text/fitTextPose.js.map +0 -1
- package/dist/features/text/hitTest.js +0 -48
- package/dist/features/text/hitTest.js.map +0 -1
- package/dist/features/text/isTextData.js +0 -8
- package/dist/features/text/isTextData.js.map +0 -1
- package/dist/features/text/overlayDirection.js +0 -15
- package/dist/features/text/overlayDirection.js.map +0 -1
- package/dist/features/text/renderLabel.js +0 -14
- package/dist/features/text/renderLabel.js.map +0 -1
- package/dist/features/text/runs/effectiveRangeStyle.js +0 -66
- package/dist/features/text/runs/effectiveRangeStyle.js.map +0 -1
- package/dist/features/text/runs/flagRange.js +0 -53
- package/dist/features/text/runs/flagRange.js.map +0 -1
- package/dist/features/text/runs/rangeStyle.js +0 -133
- package/dist/features/text/runs/rangeStyle.js.map +0 -1
- package/dist/features/text/textCommand.js +0 -60
- package/dist/features/text/textCommand.js.map +0 -1
- package/dist/features/text/textToPath.js +0 -181
- package/dist/features/text/textToPath.js.map +0 -1
- package/dist/features/text/useTextEdit.js +0 -491
- package/dist/features/text/useTextEdit.js.map +0 -1
- package/dist/features/tiling/createTiledLayer.js +0 -65
- package/dist/features/tiling/createTiledLayer.js.map +0 -1
- package/dist/features/tiling/tiledProject.js +0 -14
- package/dist/features/tiling/tiledProject.js.map +0 -1
- package/dist/interactions/actions/clone/behaviors/cloneByAltDrag.js +0 -26
- package/dist/interactions/actions/clone/behaviors/cloneByAltDrag.js.map +0 -1
- package/dist/interactions/actions/defaults/align.js.map +0 -1
- package/dist/interactions/actions/defaults/booleans.js +0 -52
- package/dist/interactions/actions/defaults/booleans.js.map +0 -1
- package/dist/interactions/actions/defaults/clipboard.js.map +0 -1
- package/dist/interactions/actions/defaults/clone.js +0 -91
- package/dist/interactions/actions/defaults/clone.js.map +0 -1
- package/dist/interactions/actions/defaults/createOutlines.js +0 -47
- package/dist/interactions/actions/defaults/createOutlines.js.map +0 -1
- package/dist/interactions/actions/defaults/distribute.js.map +0 -1
- package/dist/interactions/actions/defaults/editAnchors.js +0 -100
- package/dist/interactions/actions/defaults/editAnchors.js.map +0 -1
- package/dist/interactions/actions/defaults/flip.js +0 -125
- package/dist/interactions/actions/defaults/flip.js.map +0 -1
- package/dist/interactions/actions/defaults/insert.js +0 -287
- package/dist/interactions/actions/defaults/insert.js.map +0 -1
- package/dist/interactions/actions/defaults/lassoSelect.js +0 -153
- package/dist/interactions/actions/defaults/lassoSelect.js.map +0 -1
- package/dist/interactions/actions/defaults/move.js +0 -778
- package/dist/interactions/actions/defaults/move.js.map +0 -1
- package/dist/interactions/actions/defaults/resize.js +0 -341
- package/dist/interactions/actions/defaults/resize.js.map +0 -1
- package/dist/interactions/actions/defaults/rotate.js +0 -185
- package/dist/interactions/actions/defaults/rotate.js.map +0 -1
- package/dist/interactions/actions/previewOverrides.js +0 -25
- package/dist/interactions/actions/previewOverrides.js.map +0 -1
- package/dist/interactions/actions/resize/autoPoseDescriptor.js.map +0 -1
- package/dist/layout/arrivals.js +0 -36
- package/dist/layout/arrivals.js.map +0 -1
- package/dist/math-J-ACHyEg.d.ts +0 -159
- package/dist/registerProgram-T9S_PfAX.d.ts +0 -208
- package/dist/renderer/DrawCommand.js +0 -6
- package/dist/renderer/DrawCommand.js.map +0 -1
- package/dist/renderer/WeaselRenderer.js +0 -333
- package/dist/renderer/WeaselRenderer.js.map +0 -1
- package/dist/renderer/batchClip.js +0 -46
- package/dist/renderer/batchClip.js.map +0 -1
- package/dist/renderer/cache/GLImageCache.js +0 -74
- package/dist/renderer/cache/GLImageCache.js.map +0 -1
- package/dist/renderer/cache/GLMeshCache.js +0 -102
- package/dist/renderer/cache/GLMeshCache.js.map +0 -1
- package/dist/renderer/cache/GLTextureCache.js +0 -68
- package/dist/renderer/cache/GLTextureCache.js.map +0 -1
- package/dist/renderer/cache/GradientRampAtlas.js +0 -82
- package/dist/renderer/cache/GradientRampAtlas.js.map +0 -1
- package/dist/renderer/cache/cache.js +0 -13
- package/dist/renderer/cache/cache.js.map +0 -1
- package/dist/renderer/cache/markerCommandCache.js +0 -63
- package/dist/renderer/cache/markerCommandCache.js.map +0 -1
- package/dist/renderer/cache/outlineMeshCache.js +0 -15
- package/dist/renderer/cache/outlineMeshCache.js.map +0 -1
- package/dist/renderer/cache/outlineStrokeMeshCache.js +0 -36
- package/dist/renderer/cache/outlineStrokeMeshCache.js.map +0 -1
- package/dist/renderer/cache/strokeMeshCache.js +0 -55
- package/dist/renderer/cache/strokeMeshCache.js.map +0 -1
- package/dist/renderer/cullDrawCommands.js +0 -90
- package/dist/renderer/cullDrawCommands.js.map +0 -1
- package/dist/renderer/draw/batch.js +0 -133
- package/dist/renderer/draw/batch.js.map +0 -1
- package/dist/renderer/draw/clip.js +0 -89
- package/dist/renderer/draw/clip.js.map +0 -1
- package/dist/renderer/draw/customShader.js +0 -230
- package/dist/renderer/draw/customShader.js.map +0 -1
- package/dist/renderer/draw/drawTriangles.js +0 -8
- package/dist/renderer/draw/drawTriangles.js.map +0 -1
- package/dist/renderer/draw/effects.js +0 -28
- package/dist/renderer/draw/effects.js.map +0 -1
- package/dist/renderer/draw/flushBatch.js +0 -35
- package/dist/renderer/draw/flushBatch.js.map +0 -1
- package/dist/renderer/draw/gradient.js +0 -90
- package/dist/renderer/draw/gradient.js.map +0 -1
- package/dist/renderer/draw/image.js +0 -38
- package/dist/renderer/draw/image.js.map +0 -1
- package/dist/renderer/draw/mesh.js +0 -16
- package/dist/renderer/draw/mesh.js.map +0 -1
- package/dist/renderer/draw/paintBind.js +0 -70
- package/dist/renderer/draw/paintBind.js.map +0 -1
- package/dist/renderer/draw/pathPaint.js +0 -142
- package/dist/renderer/draw/pathPaint.js.map +0 -1
- package/dist/renderer/draw/scratchPass.js +0 -83
- package/dist/renderer/draw/scratchPass.js.map +0 -1
- package/dist/renderer/draw/stencil.js +0 -28
- package/dist/renderer/draw/stencil.js.map +0 -1
- package/dist/renderer/draw/text.js +0 -167
- package/dist/renderer/draw/text.js.map +0 -1
- package/dist/renderer/draw/uniforms.js +0 -77
- package/dist/renderer/draw/uniforms.js.map +0 -1
- package/dist/renderer/draw.js +0 -79
- package/dist/renderer/draw.js.map +0 -1
- package/dist/renderer/drawBatch.js +0 -198
- package/dist/renderer/drawBatch.js.map +0 -1
- package/dist/renderer/effects/EffectTargets.js +0 -48
- package/dist/renderer/effects/EffectTargets.js.map +0 -1
- package/dist/renderer/effects/builtins.js +0 -31
- package/dist/renderer/effects/builtins.js.map +0 -1
- package/dist/renderer/effects/composite.js +0 -11
- package/dist/renderer/effects/composite.js.map +0 -1
- package/dist/renderer/effects/effectPrelude.js +0 -10
- package/dist/renderer/effects/effectPrelude.js.map +0 -1
- package/dist/renderer/effects/types.js +0 -10
- package/dist/renderer/effects/types.js.map +0 -1
- package/dist/renderer/glyphOutlineMesh.js +0 -67
- package/dist/renderer/glyphOutlineMesh.js.map +0 -1
- package/dist/renderer/index.js +0 -20
- package/dist/renderer/math/color.js +0 -321
- package/dist/renderer/math/color.js.map +0 -1
- package/dist/renderer/math/mat3.js +0 -80
- package/dist/renderer/math/mat3.js.map +0 -1
- package/dist/renderer/math/patternSpace.js +0 -22
- package/dist/renderer/math/patternSpace.js.map +0 -1
- package/dist/renderer/math/viewToMat3.js +0 -19
- package/dist/renderer/math/viewToMat3.js.map +0 -1
- package/dist/renderer/paintResources.js +0 -18
- package/dist/renderer/paintResources.js.map +0 -1
- package/dist/renderer/paintScratch.js +0 -37
- package/dist/renderer/paintScratch.js.map +0 -1
- package/dist/renderer/shaders/ShaderProgram.js +0 -74
- package/dist/renderer/shaders/ShaderProgram.js.map +0 -1
- package/dist/renderer/shaders/batchFill.js +0 -119
- package/dist/renderer/shaders/batchFill.js.map +0 -1
- package/dist/renderer/shaders/customPrelude.js +0 -34
- package/dist/renderer/shaders/customPrelude.js.map +0 -1
- package/dist/renderer/shaders/extractUniformNames.js +0 -184
- package/dist/renderer/shaders/extractUniformNames.js.map +0 -1
- package/dist/renderer/shaders/glyphPaint.js +0 -61
- package/dist/renderer/shaders/glyphPaint.js.map +0 -1
- package/dist/renderer/shaders/gradFill.js +0 -31
- package/dist/renderer/shaders/gradFill.js.map +0 -1
- package/dist/renderer/shaders/pathFill.js +0 -14
- package/dist/renderer/shaders/pathFill.js.map +0 -1
- package/dist/renderer/shaders/patternFill.js +0 -25
- package/dist/renderer/shaders/patternFill.js.map +0 -1
- package/dist/renderer/shaders/registerProgram.js +0 -18
- package/dist/renderer/shaders/registerProgram.js.map +0 -1
- package/dist/renderer/spriteSheet.js +0 -14
- package/dist/renderer/spriteSheet.js.map +0 -1
- package/dist/renderer/state/GroupState.js +0 -77
- package/dist/renderer/state/GroupState.js.map +0 -1
- package/dist/renderer/strokeLengths.js +0 -50
- package/dist/renderer/strokeLengths.js.map +0 -1
- package/dist/renderer/syntheticItalic.js +0 -6
- package/dist/renderer/syntheticItalic.js.map +0 -1
- package/dist/renderer/textures/registerTexture.js +0 -34
- package/dist/renderer/textures/registerTexture.js.map +0 -1
- package/dist/scheduling/useVisibleRaf.js +0 -69
- package/dist/scheduling/useVisibleRaf.js.map +0 -1
- package/dist/test-seams-DM2B87-g.d.ts +0 -356
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"session.js","names":["GESTURE_KEY","beginInsert","dep","ctx","selection","priorSelection","snapDep","snap","p","behaviors","opts","readers","gestureReaders","origin","gestureCtx","pointerStateOf","b","startPoint"],"sources":["../../../../src/interactions/actions/insert/session.ts"],"sourcesContent":["import type { BindingOpts, DragSample, InvocationCtx } from '@weasel-js/routing';\nimport { pointerStateOf } from '../pointerState';\nimport type { Op } from 'core/ops/types';\nimport type { NodeId, Scene } from 'core/scene/types';\nimport type { SelectionApi } from 'core/selection/useSelection';\nimport { gestureReaders, type GestureReaders } from '../../gestures/shared/screenTolerance';\nimport type { GestureContext, InsertBehavior, InsertPoint } from '../../gestures/types';\nimport type { InsertDep, TextEditDep } from '../depSchema';\n\n/** The key an insert's single gesture point rides under in the behaviors'\n * `draggedIds` / `origin` / `current` — insert has no node id yet. */\nexport const GESTURE_KEY = 'gesture';\n\n/** What an insert captured at press. Nothing here changes during the drag.\n * The deps are captured because the dispatcher builds the deps bag once, on\n * `start`: every later pump event carries `deps: {}`. */\nexport interface InsertSession {\n readonly dep: InsertDep;\n /** For the text kind's drop-into-the-caret step. */\n readonly textEdit: TextEditDep | undefined;\n /** World-space point snapper from the `snap` dep, or identity when the\n * dep isn't registered. Applied to the drag's start and current point so\n * the live preview and the committed geometry agree. Freehand pencil\n * samples are deliberately NOT snapped — a grid-quantized freehand trail\n * is a staircase, not a stroke. */\n readonly snap: (p: { x: number; y: number }) => { x: number; y: number };\n /** The active binding's opts — re-resolved on every read so thunked\n * params see the latest tool state (e.g. polygon `sides` after ArrowUp). */\n readonly opts: BindingOpts | undefined;\n /** What was selected before the draw cleared it, to put back on cancel. */\n readonly priorSelection: readonly NodeId[];\n /** Behaviors from `opts.behaviors`; empty when none were bound. */\n readonly behaviors: readonly InsertBehavior<unknown>[];\n /** Reused gesture context handed to behaviors. Its `origin` holds the\n * start point under {@link GESTURE_KEY}, after `onStart` shaped it. */\n readonly gestureCtx: GestureContext<unknown>;\n /** For committing a behavior's `Op[]`. */\n readonly scene: Scene<unknown, string, unknown> | undefined;\n readonly applyOps: ((ops: Op[], label: string) => void) | undefined;\n readonly selection: SelectionApi | undefined;\n}\n\n/** What the latest pump event left. Replaced, not mutated, by the next. */\nexport interface InsertFrame {\n /** The raw (unsnapped) pointer in world space. */\n readonly pointer: InsertPoint;\n /** Pointer trail accumulated by the dispatcher in world space; pencil-kind\n * commits read it. */\n readonly points: ReadonlyArray<DragSample> | null;\n /** Alt inverts the binding's nominal `originMode` (corner ⇄ center), so\n * pressing or releasing it mid-drag flips the preview and the commit\n * without the dispatcher re-routing to another binding. */\n readonly altHeld: boolean;\n /** Shift constrains the `line` kind to 15° increments. */\n readonly shiftHeld: boolean;\n /** The endpoints after Shift-constrain, the `snap` dep, and the behaviors. */\n readonly shaped: { start: InsertPoint; current: InsertPoint };\n}\n\n/** Capture an insert at press. Null with no `insert` dep. Clears the\n * selection and runs each behavior's `onStart`. */\nexport function beginInsert(\n ctx: InvocationCtx,\n opts: BindingOpts | undefined,\n): { session: InsertSession; readers: GestureReaders; frame: InsertFrame } | null {\n const dep = ctx.deps.insert;\n if (!dep) return null;\n\n // Starting a draw retires any prior selection — the lingering halo\n // around an unrelated node while the user is drawing a new shape is\n // just visual noise, and it primes the UX bug where a drag that\n // continues over the selected node would otherwise drive the move\n // action via fall-through. The clear is unconditional: the user has\n // committed to \"I'm making a new thing\" by engaging a creation tool.\n const selection = ctx.deps.selection;\n const priorSelection = selection ? [...selection.get()] : [];\n if (selection && priorSelection.length > 0) {\n selection.clear();\n }\n\n const snapDep = ctx.deps.snap;\n const snap = snapDep\n ? (p: { x: number; y: number }) => snapDep.point(p)\n : (p: { x: number; y: number }) => p;\n const behaviors = (opts?.behaviors ?? []) as InsertBehavior<unknown>[];\n const readers = gestureReaders(ctx.deps);\n const origin = snap({ x: ctx.world.x, y: ctx.world.y });\n const gestureCtx: GestureContext<unknown> = {\n draggedIds: [GESTURE_KEY],\n origin: new Map<string, unknown>([[GESTURE_KEY, origin]]),\n current: new Map<string, unknown>([[GESTURE_KEY, origin]]),\n snap: null,\n modifiers: { ...ctx.modifiers },\n pointer: pointerStateOf(ctx.world, ctx),\n view: readers.view(),\n plane: readers.plane(),\n // No node exists to adapt until commit; insert behaviors read points.\n adapter: undefined as unknown as GestureContext<unknown>['adapter'],\n scratch: {},\n };\n for (const b of behaviors) b.onStart?.(gestureCtx);\n const startPoint = gestureCtx.origin.get(GESTURE_KEY) as InsertPoint;\n\n const session: InsertSession = {\n dep,\n textEdit: ctx.deps.textEdit,\n snap,\n opts,\n priorSelection,\n behaviors,\n gestureCtx,\n scene: ctx.deps.scene,\n applyOps: ctx.deps.applyOps,\n selection,\n };\n const frame: InsertFrame = {\n pointer: { x: ctx.world.x, y: ctx.world.y },\n points: ctx.drag?.points ?? null,\n altHeld: ctx.modifiers.alt,\n shiftHeld: ctx.modifiers.shift,\n shaped: { start: startPoint, current: startPoint },\n };\n return { session, readers, frame };\n}\n"],"mappings":";;;AAWA,IAAaA,IAAc;AAkD3B,SAAgBC,EACd,GACA,GACgF;CAChF,IAAMC,IAAMC,EAAI,KAAK;CACrB,IAAI,CAACD,GAAK,OAAO;CAQjB,IAAME,IAAYD,EAAI,KAAK,WACrBE,IAAiBD,IAAY,CAAC,GAAGA,EAAU,IAAI,CAAC,IAAI,CAAC;CAC3D,AAAIA,KAAaC,EAAe,SAAS,KACvCD,EAAU,MAAM;CAGlB,IAAME,IAAUH,EAAI,KAAK,MACnBI,IAAOD,KACR,MAAgCA,EAAQ,MAAME,CAAC,KAC/C,MAAgCA,GAC/BC,IAAaC,GAAM,aAAa,CAAC,GACjCC,IAAUC,EAAeT,EAAI,IAAI,GACjCU,IAASN,EAAK;EAAE,GAAGJ,EAAI,MAAM;EAAG,GAAGA,EAAI,MAAM;CAAE,CAAC,GAChDW,IAAsC;EAC1C,YAAY,CAACd,CAAW;EACxB,wBAAQ,IAAI,IAAqB,CAAC,CAACA,GAAaa,CAAM,CAAC,CAAC;EACxD,yBAAS,IAAI,IAAqB,CAAC,CAACb,GAAaa,CAAM,CAAC,CAAC;EACzD,MAAM;EACN,WAAW,EAAE,GAAGV,EAAI,UAAU;EAC9B,SAASY,EAAeZ,EAAI,OAAOA,CAAG;EACtC,MAAMQ,EAAQ,KAAK;EACnB,OAAOA,EAAQ,MAAM;EAErB,SAAS,KAAA;EACT,SAAS,CAAC;CACZ;CACA,KAAK,IAAMK,KAAKP,GAAW,EAAE,UAAUK,CAAU;CACjD,IAAMG,IAAaH,EAAW,OAAO,IAAId,CAAW;CAqBpD,OAAO;EAAE,SAAA;GAlBP;GACA,UAAUG,EAAI,KAAK;GACnB;GACA;GACA;GACA;GACA;GACA,OAAOA,EAAI,KAAK;GAChB,UAAUA,EAAI,KAAK;GACnB;EASO;EAAS;EAAS,OAAA;GANzB,SAAS;IAAE,GAAGA,EAAI,MAAM;IAAG,GAAGA,EAAI,MAAM;GAAE;GAC1C,QAAQA,EAAI,MAAM,UAAU;GAC5B,SAASA,EAAI,UAAU;GACvB,WAAWA,EAAI,UAAU;GACzB,QAAQ;IAAE,OAAOc;IAAY,SAASA;GAAW;EAExB;CAAM;AACnC"}
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
import { applyUserRotation as e, buildExtras as t } from "./extras.js";
|
|
2
|
+
import { computeBounds as n, effectiveOriginMode as r } from "./geometry.js";
|
|
3
|
+
//#region src/interactions/actions/insert/shape.ts
|
|
4
|
+
function i(e) {
|
|
5
|
+
return e?.kind ?? "rect";
|
|
6
|
+
}
|
|
7
|
+
function a(e, t, n) {
|
|
8
|
+
let { start: r } = e, { current: i } = e;
|
|
9
|
+
return t === "line" && n === "center" && (r = {
|
|
10
|
+
x: r.x - (i.x - r.x),
|
|
11
|
+
y: r.y - (i.y - r.y)
|
|
12
|
+
}), {
|
|
13
|
+
start: r,
|
|
14
|
+
current: i
|
|
15
|
+
};
|
|
16
|
+
}
|
|
17
|
+
function o(o, s, c, l) {
|
|
18
|
+
let u = r(o?.originMode, s.altHeld), { start: d, current: f } = a(s.shaped, i(o), u), p = n(d.x, d.y, f.x, f.y, u), m = t({
|
|
19
|
+
...o ?? {},
|
|
20
|
+
originMode: u
|
|
21
|
+
}, d.x, d.y, f.x, f.y, c);
|
|
22
|
+
return e(m, l), {
|
|
23
|
+
bounds: p,
|
|
24
|
+
extras: m,
|
|
25
|
+
start: d
|
|
26
|
+
};
|
|
27
|
+
}
|
|
28
|
+
function s(e, t) {
|
|
29
|
+
return t === "pencil" ? !0 : t === "line" ? e.width !== 0 || e.height !== 0 : e.width !== 0 && e.height !== 0;
|
|
30
|
+
}
|
|
31
|
+
//#endregion
|
|
32
|
+
export { i as insertKind, o as insertShape, s as isCommittableExtent };
|
|
33
|
+
|
|
34
|
+
//# sourceMappingURL=shape.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"shape.js","names":["insertKind","resolved","\"kind\"","resolveEndpoints","shaped","kind","mode","start","current","insertShape","effectiveOriginMode","\"originMode\"","frame","bounds","computeBounds","extras","buildExtras","points","applyUserRotation","userRotation","isCommittableExtent"],"sources":["../../../../src/interactions/actions/insert/shape.ts"],"sourcesContent":["import type { DragSample } from '@weasel-js/routing';\nimport type { InsertPoint } from '../../gestures/types';\nimport type { InsertExtras } from '../depSchema';\nimport { applyUserRotation, buildExtras } from './extras';\nimport { computeBounds, effectiveOriginMode } from './geometry';\nimport type { InsertFrame } from './session';\n\n/** The node kind a binding's resolved params ask for. */\nexport function insertKind(resolved: Record<string, unknown> | undefined): string {\n return (resolved?.['kind'] as string | undefined) ?? 'rect';\n}\n\n/** The effective endpoints: `shaped`, plus — for the `line` kind only — the\n * alt/center reading as \"mirror the start around the pointer\" rather than\n * \"grow a symmetric AABB\". */\nfunction resolveEndpoints(\n shaped: InsertFrame['shaped'],\n kind: string,\n mode: 'corner' | 'center',\n): { start: InsertPoint; current: InsertPoint } {\n let { start } = shaped;\n const { current } = shaped;\n\n // A line has no area, so \"from center\" means the drag is a half-line:\n // mirror the start to the far side of the pointer.\n if (kind === 'line' && mode === 'center') {\n start = { x: start.x - (current.x - start.x), y: start.y - (current.y - start.y) };\n }\n return { start, current };\n}\n\nexport interface InsertShape {\n bounds: { x: number; y: number; width: number; height: number };\n extras: InsertExtras;\n /** Where the drag started, after the endpoints were resolved. */\n start: InsertPoint;\n}\n\n/** The shape an insert has at `frame`. The live overlay and the commit both\n * read it from here, so they can't disagree. Extras are derived with the\n * effective origin mode, so polygon/star center+radius follow the live Alt\n * toggle and not the binding's nominal `originMode`. */\nexport function insertShape(\n resolved: Record<string, unknown> | undefined,\n frame: Pick<InsertFrame, 'shaped' | 'altHeld'>,\n points: ReadonlyArray<DragSample> | null,\n userRotation: number,\n): InsertShape {\n const mode = effectiveOriginMode(resolved?.['originMode'], frame.altHeld);\n const { start, current } = resolveEndpoints(frame.shaped, insertKind(resolved), mode);\n const bounds = computeBounds(start.x, start.y, current.x, current.y, mode);\n const extras = buildExtras(\n { ...(resolved ?? {}), originMode: mode },\n start.x, start.y, current.x, current.y,\n points,\n );\n applyUserRotation(extras, userRotation);\n return { bounds, extras, start };\n}\n\n/** Whether a drag produced enough extent to be worth committing. The test\n * is kind-aware because \"zero size\" isn't one shape:\n * - pencil: a sample trail can be meaningful even when start ≈ end\n * (a closed loop), so no guard at all.\n * - line: has no area by construction. An axis-aligned line has a\n * zero-height (or zero-width) AABB and is perfectly valid — only\n * a zero-LENGTH drag is degenerate. (Shift-constrain makes\n * axis-aligned the common case, which is how this surfaced.)\n * - everything else: a zero extent in either axis is degenerate. */\nexport function isCommittableExtent(\n bounds: { width: number; height: number },\n kind: string,\n): boolean {\n if (kind === 'pencil') return true;\n if (kind === 'line') return bounds.width !== 0 || bounds.height !== 0;\n return bounds.width !== 0 && bounds.height !== 0;\n}\n"],"mappings":";;;AAQA,SAAgBA,EAAW,GAAuD;CAChF,OAAQC,GAAWC,QAAkC;AACvD;AAKA,SAASC,EACP,GACA,GACA,GAC8C;CAC9C,IAAI,EAAE,aAAUC,GACV,EAAE,eAAYA;CAOpB,OAHIC,MAAS,UAAUC,MAAS,aAC9B,IAAQ;EAAE,GAAGC,EAAM,KAAKC,EAAQ,IAAID,EAAM;EAAI,GAAGA,EAAM,KAAKC,EAAQ,IAAID,EAAM;CAAG,IAE5E;EAAE;EAAO;CAAQ;AAC1B;AAaA,SAAgBE,EACd,GACA,GACA,GACA,GACa;CACb,IAAMH,IAAOI,EAAoBT,GAAWU,YAAeC,EAAM,OAAO,GAClE,EAAE,UAAO,eAAYT,EAAiBS,EAAM,QAAQZ,EAAWC,CAAQ,GAAGK,CAAI,GAC9EO,IAASC,EAAcP,EAAM,GAAGA,EAAM,GAAGC,EAAQ,GAAGA,EAAQ,GAAGF,CAAI,GACnES,IAASC,EACb;EAAE,GAAIf,KAAY,CAAC;EAAI,YAAYK;CAAK,GACxCC,EAAM,GAAGA,EAAM,GAAGC,EAAQ,GAAGA,EAAQ,GACrCS,CACF;CAEA,OADAC,EAAkBH,GAAQI,CAAY,GAC/B;EAAE;EAAQ;EAAQ;CAAM;AACjC;AAWA,SAAgBC,EACd,GACA,GACS;CAGT,OAFIf,MAAS,WAAiB,KAC1BA,MAAS,SAAeQ,EAAO,UAAU,KAAKA,EAAO,WAAW,IAC7DA,EAAO,UAAU,KAAKA,EAAO,WAAW;AACjD"}
|
|
@@ -0,0 +1,143 @@
|
|
|
1
|
+
import { applyOpsTo as e } from "../../../core/applyOps.js";
|
|
2
|
+
import { reduceBehaviorEnd as t, runBehaviorCancel as n, runBehaviorSettled as r } from "../gestureLifecycle.js";
|
|
3
|
+
import { gestureViewReader as i } from "../../gestures/shared/screenTolerance.js";
|
|
4
|
+
import { pointerStateOf as a } from "../pointerState.js";
|
|
5
|
+
import { selectionFromHits as o } from "../hitSelection.js";
|
|
6
|
+
import { LASSO_VERTICES as s } from "./behaviors/selectFromLasso.js";
|
|
7
|
+
import { resolveParams as c, setScratch as l } from "@weasel-js/routing";
|
|
8
|
+
//#region src/interactions/actions/lasso-select/action.ts
|
|
9
|
+
function u(e) {
|
|
10
|
+
if (e.length === 0) return null;
|
|
11
|
+
let t = e[0].x, n = e[0].y, r = e[0].x, i = e[0].y;
|
|
12
|
+
for (let a of e) a.x < t && (t = a.x), a.y < n && (n = a.y), a.x > r && (r = a.x), a.y > i && (i = a.y);
|
|
13
|
+
return {
|
|
14
|
+
x: t,
|
|
15
|
+
y: n,
|
|
16
|
+
width: r - t,
|
|
17
|
+
height: i - n
|
|
18
|
+
};
|
|
19
|
+
}
|
|
20
|
+
function d(e, t, n, r) {
|
|
21
|
+
if (e.hitTestLasso) return e.hitTestLasso(t, n, r);
|
|
22
|
+
let i = u(t);
|
|
23
|
+
return i ? e.hitTestArea(i, r) : [];
|
|
24
|
+
}
|
|
25
|
+
function f(t, n) {
|
|
26
|
+
let r = {
|
|
27
|
+
getSelection: () => t.getSelection(),
|
|
28
|
+
setSelection: (e) => t.setSelection(e),
|
|
29
|
+
hitTestArea: (e) => t.hitTestArea(e, n),
|
|
30
|
+
hitTestLasso: (e, r) => d(t, e, r, n),
|
|
31
|
+
applyOps: (t) => e(r, t)
|
|
32
|
+
};
|
|
33
|
+
return r;
|
|
34
|
+
}
|
|
35
|
+
var p = 2, m = {
|
|
36
|
+
id: "lassoSelect",
|
|
37
|
+
label: "Lasso Select",
|
|
38
|
+
eligible: { capability: "creates-selection" },
|
|
39
|
+
requires: ["lassoSelect", "view"],
|
|
40
|
+
invoker: {
|
|
41
|
+
timing: "ongoing",
|
|
42
|
+
start(e, t) {
|
|
43
|
+
let n = e.deps.lassoSelect;
|
|
44
|
+
if (!n) return {};
|
|
45
|
+
let o = c(t?.params), u = e.deps.view, d = [{
|
|
46
|
+
x: e.world.x,
|
|
47
|
+
y: e.world.y
|
|
48
|
+
}], m = t?.behaviors ?? [], g = null, _ = i(e.deps);
|
|
49
|
+
if (m.length > 0) {
|
|
50
|
+
let t = {
|
|
51
|
+
worldX: e.world.x,
|
|
52
|
+
worldY: e.world.y,
|
|
53
|
+
shiftHeld: e.modifiers.shift
|
|
54
|
+
};
|
|
55
|
+
g = {
|
|
56
|
+
draggedIds: ["gesture"],
|
|
57
|
+
origin: /* @__PURE__ */ new Map([["gesture", t]]),
|
|
58
|
+
current: /* @__PURE__ */ new Map([["gesture", { ...t }]]),
|
|
59
|
+
snap: null,
|
|
60
|
+
modifiers: { ...e.modifiers },
|
|
61
|
+
pointer: a(e.world, e),
|
|
62
|
+
view: _(),
|
|
63
|
+
adapter: f(n, u),
|
|
64
|
+
scratch: {}
|
|
65
|
+
}, l(g.scratch, s, d);
|
|
66
|
+
for (let e of m) e.onStart?.(g);
|
|
67
|
+
}
|
|
68
|
+
let v = {
|
|
69
|
+
dep: n,
|
|
70
|
+
mode: o?.mode ?? "intersect",
|
|
71
|
+
minVertexSpacing: o?.minVertexSpacing ?? p,
|
|
72
|
+
view: u,
|
|
73
|
+
vertices: d,
|
|
74
|
+
shiftHeld: e.modifiers.shift,
|
|
75
|
+
currentX: e.world.x,
|
|
76
|
+
currentY: e.world.y,
|
|
77
|
+
open: !0,
|
|
78
|
+
behaviors: m,
|
|
79
|
+
gesture: g
|
|
80
|
+
};
|
|
81
|
+
return {
|
|
82
|
+
kind: "lasso",
|
|
83
|
+
onMove(e) {
|
|
84
|
+
let { x: t, y: n } = e.world;
|
|
85
|
+
v.currentX = t, v.currentY = n;
|
|
86
|
+
let r = v.vertices[v.vertices.length - 1], i = t - r.x, o = n - r.y, s = v.minVertexSpacing;
|
|
87
|
+
i * i + o * o >= s * s && v.vertices.push({
|
|
88
|
+
x: t,
|
|
89
|
+
y: n
|
|
90
|
+
});
|
|
91
|
+
let c = v.gesture;
|
|
92
|
+
if (c) {
|
|
93
|
+
c.modifiers = { ...e.modifiers }, c.pointer = a(e.world, e), c.view = _(), c.current.set("gesture", {
|
|
94
|
+
worldX: t,
|
|
95
|
+
worldY: n,
|
|
96
|
+
shiftHeld: v.shiftHeld
|
|
97
|
+
});
|
|
98
|
+
let r = {
|
|
99
|
+
vertices: v.vertices,
|
|
100
|
+
shiftHeld: v.shiftHeld
|
|
101
|
+
};
|
|
102
|
+
for (let e of v.behaviors) e.onMove?.(c, r);
|
|
103
|
+
}
|
|
104
|
+
},
|
|
105
|
+
overlay() {
|
|
106
|
+
return v.open ? {
|
|
107
|
+
kind: "lasso",
|
|
108
|
+
vertices: v.vertices,
|
|
109
|
+
current: {
|
|
110
|
+
x: v.currentX,
|
|
111
|
+
y: v.currentY
|
|
112
|
+
},
|
|
113
|
+
shiftHeld: v.shiftHeld
|
|
114
|
+
} : null;
|
|
115
|
+
},
|
|
116
|
+
onEnd(e, t) {
|
|
117
|
+
let n = !1;
|
|
118
|
+
try {
|
|
119
|
+
n = h(v, t);
|
|
120
|
+
} finally {
|
|
121
|
+
v.gesture && r(v.behaviors, v.gesture, n);
|
|
122
|
+
}
|
|
123
|
+
}
|
|
124
|
+
};
|
|
125
|
+
}
|
|
126
|
+
},
|
|
127
|
+
enabled: () => !0
|
|
128
|
+
};
|
|
129
|
+
function h(e, r) {
|
|
130
|
+
if (e.open = !1, r === "cancel") return e.gesture && n(e.behaviors, e.gesture), !1;
|
|
131
|
+
let { dep: i, mode: a, view: s, vertices: c, shiftHeld: l, gesture: u } = e;
|
|
132
|
+
if (u) {
|
|
133
|
+
let n = t(e.behaviors, u);
|
|
134
|
+
if (n !== void 0) return n !== null && u.adapter.applyOps(n), n !== null;
|
|
135
|
+
}
|
|
136
|
+
if (c.length < 3) return l || i.setSelection([]), !l;
|
|
137
|
+
let f = d(i, c, a, s);
|
|
138
|
+
return i.setSelection(o(i.getSelection(), f, l)), !0;
|
|
139
|
+
}
|
|
140
|
+
//#endregion
|
|
141
|
+
export { m as lassoSelectAction };
|
|
142
|
+
|
|
143
|
+
//# sourceMappingURL=action.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"action.js","names":["polygonAABB","pts","minX","minY","maxX","maxY","p","hitTestPolygon","dep","vertices","mode","view","aabb","behaviorAdapter","adapter","ids","rect","polygon","applyOpsTo","ops","DEFAULT_MIN_VERTEX_SPACING","lassoSelectAction","ctx","params","resolveParams","opts","behaviors","gesture","readView","gestureViewReader","pose","pointerStateOf","setScratch","LASSO_VERTICES","b","scratch","moveCtx","x","y","last","dx","dy","min","g","proposed","committed","endLasso","reason","runBehaviorSettled","runBehaviorCancel","d","r","reduceBehaviorEnd","shiftHeld","hits","selectionFromHits"],"sources":["../../../../src/interactions/actions/lasso-select/action.ts"],"sourcesContent":["/**\n * `lassoSelectAction` — ongoing Action descriptor for polygon lasso selection.\n *\n * A move adds a vertex unless it is closer than the binding's\n * `params.minVertexSpacing` (default 2 world-px) to the last one. The commit\n * hit-tests the polygon with `dep.hitTestLasso(polygon, mode)` — `mode` from\n * the binding's `params.mode`, default `'intersect'` — falling back to the\n * polygon's AABB via `dep.hitTestArea(bounds)`. Shift extends the selection.\n * Always transient: no undo entry.\n *\n * `opts.behaviors` (`LassoSelectBehavior[]`) run over a `GestureContext`\n * whose `origin.get('gesture')` is the start pose, whose scratch holds the\n * vertices under `LASSO_VERTICES`, and whose adapter answers selection and\n * hit-testing from the `lassoSelect` dep. `onEnd` is first-non-undefined-wins:\n * `Op[]` is applied in place of the default selection, `null` aborts, and\n * all-`undefined` falls through to it. A behavior's ops are applied\n * transiently too.\n */\n\nimport { gestureViewReader } from '../../gestures/shared/screenTolerance';\nimport { resolveParams, setScratch, type Action } from '@weasel-js/routing';\nimport type { InvocationCtx, OngoingHandle, OngoingOverlay, Point2 } from '@weasel-js/routing';\nimport { pointerStateOf } from '../pointerState';\nimport type { LassoSelectDep, ViewApi } from '../depSchema';\nimport type { LassoHitMode, LassoSelectAdapter } from 'core/adapters/types';\nimport type { Op } from 'core/ops/types';\nimport { applyOpsTo } from 'core/applyOps';\nimport type { GestureContext, LassoSelectBehavior, LassoSelectPose } from '../../gestures/types';\nimport { LASSO_VERTICES } from './behaviors/selectFromLasso';\nimport { reduceBehaviorEnd, runBehaviorCancel, runBehaviorSettled } from '../gestureLifecycle';\nimport { selectionFromHits } from '../hitSelection';\n\n/** Compute AABB of a polygon (for fallback hit-test when hitTestLasso is absent). */\nfunction polygonAABB(\n pts: Point2[],\n): { x: number; y: number; width: number; height: number } | null {\n if (pts.length === 0) return null;\n let minX = pts[0].x, minY = pts[0].y, maxX = pts[0].x, maxY = pts[0].y;\n for (const p of pts) {\n if (p.x < minX) minX = p.x;\n if (p.y < minY) minY = p.y;\n if (p.x > maxX) maxX = p.x;\n if (p.y > maxY) maxY = p.y;\n }\n return { x: minX, y: minY, width: maxX - minX, height: maxY - minY };\n}\n\n/** The dep's polygon test, or its rect test over the polygon's AABB when it\n * has none. What both the default commit and a behavior's adapter ask. */\nfunction hitTestPolygon(\n dep: LassoSelectDep,\n vertices: ReadonlyArray<Point2>,\n mode: LassoHitMode,\n view: ViewApi | undefined,\n): string[] {\n if (dep.hitTestLasso) return dep.hitTestLasso(vertices, mode, view);\n const aabb = polygonAABB(vertices as Point2[]);\n return aabb ? dep.hitTestArea(aabb, view) : [];\n}\n\n/** The adapter a behavior sees: selection and hit-testing from the dep,\n * scoped to the view the lasso started in. */\nfunction behaviorAdapter(dep: LassoSelectDep, view: ViewApi | undefined): LassoSelectAdapter {\n const adapter: LassoSelectAdapter = {\n getSelection: () => dep.getSelection(),\n setSelection: (ids) => dep.setSelection(ids),\n hitTestArea: (rect) => dep.hitTestArea(rect, view),\n hitTestLasso: (polygon, mode) => hitTestPolygon(dep, polygon, mode, view),\n applyOps: (ops: Op[]) => applyOpsTo(adapter, ops),\n };\n return adapter;\n}\n\nconst DEFAULT_MIN_VERTEX_SPACING = 2; // world-px\n\ninterface LassoScratch {\n dep: LassoSelectDep;\n mode: LassoHitMode;\n minVertexSpacing: number;\n /** The view the lasso started in: what it does not paint is not taken. */\n view: ViewApi | undefined;\n vertices: Point2[];\n shiftHeld: boolean;\n /** Current pointer position — paint the live \"close-line\" from the last\n * vertex back to the start while the gesture is open. Tracked separately\n * from `vertices` because we throttle vertex insertion. */\n currentX: number;\n currentY: number;\n /** Cleared by `onEnd` so post-commit `overlay()` returns null. */\n open: boolean;\n behaviors: LassoSelectBehavior[];\n /** Built only when there are behaviors to hand it to. */\n gesture: GestureContext<LassoSelectPose> | null;\n}\n\n/**\n * @experimental\n * Static descriptor for the `lassoSelect` Action.\n */\nexport const lassoSelectAction: Action & { requires: string[] } = {\n id: 'lassoSelect',\n label: 'Lasso Select',\n eligible: { capability: 'creates-selection' },\n requires: ['lassoSelect', 'view'],\n invoker: {\n timing: 'ongoing',\n start(ctx: InvocationCtx, opts): OngoingHandle {\n const dep = ctx.deps.lassoSelect;\n if (!dep) return {};\n\n const params = resolveParams(opts?.params) as\n { mode?: LassoHitMode; minVertexSpacing?: number } | undefined;\n const view = ctx.deps.view;\n const vertices: Point2[] = [{ x: ctx.world.x, y: ctx.world.y }];\n const behaviors = (opts?.behaviors ?? []) as LassoSelectBehavior[];\n let gesture: GestureContext<LassoSelectPose> | null = null;\n const readView = gestureViewReader(ctx.deps);\n if (behaviors.length > 0) {\n const pose: LassoSelectPose = {\n worldX: ctx.world.x, worldY: ctx.world.y, shiftHeld: ctx.modifiers.shift,\n };\n gesture = {\n draggedIds: ['gesture'],\n origin: new Map([['gesture', pose]]),\n current: new Map([['gesture', { ...pose }]]),\n snap: null,\n modifiers: { ...ctx.modifiers },\n pointer: pointerStateOf(ctx.world, ctx),\n view: readView(),\n adapter: behaviorAdapter(dep, view) as unknown as GestureContext<LassoSelectPose>['adapter'],\n scratch: {},\n };\n // The live array, so a behavior reads every vertex added since.\n setScratch(gesture.scratch, LASSO_VERTICES, vertices);\n for (const b of behaviors) b.onStart?.(gesture);\n }\n const scratch: LassoScratch = {\n dep,\n mode: params?.mode ?? 'intersect',\n minVertexSpacing: params?.minVertexSpacing ?? DEFAULT_MIN_VERTEX_SPACING,\n view,\n vertices,\n shiftHeld: ctx.modifiers.shift,\n currentX: ctx.world.x,\n currentY: ctx.world.y,\n open: true,\n behaviors,\n gesture,\n };\n\n return {\n kind: 'lasso',\n onMove(moveCtx: InvocationCtx): void {\n const { x, y } = moveCtx.world;\n scratch.currentX = x;\n scratch.currentY = y;\n const last = scratch.vertices[scratch.vertices.length - 1];\n const dx = x - last.x;\n const dy = y - last.y;\n const min = scratch.minVertexSpacing;\n if (dx * dx + dy * dy >= min * min) {\n scratch.vertices.push({ x, y });\n }\n const g = scratch.gesture;\n if (g) {\n g.modifiers = { ...moveCtx.modifiers };\n g.pointer = pointerStateOf(moveCtx.world, moveCtx);\n g.view = readView();\n g.current.set('gesture', { worldX: x, worldY: y, shiftHeld: scratch.shiftHeld });\n const proposed = { vertices: scratch.vertices, shiftHeld: scratch.shiftHeld };\n for (const b of scratch.behaviors) b.onMove?.(g, proposed);\n }\n },\n overlay(): OngoingOverlay | null {\n if (!scratch.open) return null;\n return {\n kind: 'lasso',\n vertices: scratch.vertices,\n current: { x: scratch.currentX, y: scratch.currentY },\n shiftHeld: scratch.shiftHeld,\n };\n },\n onEnd(_endCtx: InvocationCtx, reason: 'commit' | 'cancel'): void {\n let committed = false;\n try {\n committed = endLasso(scratch, reason);\n } finally {\n if (scratch.gesture) runBehaviorSettled(scratch.behaviors, scratch.gesture, committed);\n }\n },\n };\n },\n },\n enabled: () => true,\n};\n\n/** Close the lasso. Returns whether it committed: a behavior's ops were\n * applied, or the lasso set the selection. */\nfunction endLasso(scratch: LassoScratch, reason: 'commit' | 'cancel'): boolean {\n scratch.open = false;\n if (reason === 'cancel') {\n if (scratch.gesture) runBehaviorCancel(scratch.behaviors, scratch.gesture);\n return false;\n }\n\n const { dep: d, mode, view, vertices, shiftHeld, gesture: g } = scratch;\n\n if (g) {\n const r = reduceBehaviorEnd(scratch.behaviors, g);\n if (r !== undefined) {\n if (r !== null) (g.adapter as unknown as LassoSelectAdapter).applyOps!(r);\n return r !== null;\n }\n }\n\n // Need at least 3 vertices for a meaningful polygon; otherwise no-op.\n if (vertices.length < 3) {\n if (!shiftHeld) d.setSelection([]);\n return !shiftHeld;\n }\n\n const hits = hitTestPolygon(d, vertices, mode, view);\n\n d.setSelection(selectionFromHits(d.getSelection(), hits, shiftHeld));\n return true;\n}\n"],"mappings":"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"}
|
|
@@ -0,0 +1,91 @@
|
|
|
1
|
+
import { closeGesture as e, runBehaviorCancel as t } from "../gestureLifecycle.js";
|
|
2
|
+
import { inPlane as n, selectionLayer as r } from "../planeInput.js";
|
|
3
|
+
import { beginMove as i } from "./session.js";
|
|
4
|
+
import { nextFrame as a } from "./frame.js";
|
|
5
|
+
import { commitMove as o } from "./commit/index.js";
|
|
6
|
+
import { recordTransform as s } from "../transform-again/memory.js";
|
|
7
|
+
import { pastDragThreshold as c } from "@weasel-js/routing";
|
|
8
|
+
//#region src/interactions/actions/move/action.ts
|
|
9
|
+
var l = n({
|
|
10
|
+
id: "move",
|
|
11
|
+
label: "Move",
|
|
12
|
+
activeCursor: "move",
|
|
13
|
+
defaultBinding: {
|
|
14
|
+
kind: "drag",
|
|
15
|
+
target: "selected-body"
|
|
16
|
+
},
|
|
17
|
+
eligible: { capability: "transforms-selection" },
|
|
18
|
+
requires: [
|
|
19
|
+
"selection",
|
|
20
|
+
"scene",
|
|
21
|
+
"poseDescriptor",
|
|
22
|
+
"layout",
|
|
23
|
+
"applyOps",
|
|
24
|
+
"geometryProjection",
|
|
25
|
+
"nodeAtPoint",
|
|
26
|
+
"view"
|
|
27
|
+
],
|
|
28
|
+
invoker: {
|
|
29
|
+
timing: "ongoing",
|
|
30
|
+
start(n, r) {
|
|
31
|
+
let l = {
|
|
32
|
+
delta: {
|
|
33
|
+
dx: 0,
|
|
34
|
+
dy: 0
|
|
35
|
+
},
|
|
36
|
+
previews: /* @__PURE__ */ new Map(),
|
|
37
|
+
opaque: /* @__PURE__ */ new Set()
|
|
38
|
+
}, u = i(n, r, () => l);
|
|
39
|
+
if (!u) return {};
|
|
40
|
+
let { session: d, readers: f } = u, p = [...n.deps.selection?.get() ?? []], m = d.scene.overrides.hold(), h = null;
|
|
41
|
+
return {
|
|
42
|
+
kind: "move",
|
|
43
|
+
onMove(e) {
|
|
44
|
+
if (e.drag) {
|
|
45
|
+
if (!h) {
|
|
46
|
+
let t = e.drag.screenDelta;
|
|
47
|
+
if (t && !c({
|
|
48
|
+
clientX: 0,
|
|
49
|
+
clientY: 0
|
|
50
|
+
}, {
|
|
51
|
+
clientX: t.x,
|
|
52
|
+
clientY: t.y
|
|
53
|
+
}, d.dragThresholdPx)) return;
|
|
54
|
+
d.lifecycle.start(d.ids);
|
|
55
|
+
}
|
|
56
|
+
h = e.world, l = a(d, f, e), m.set(l.previews);
|
|
57
|
+
}
|
|
58
|
+
},
|
|
59
|
+
onEnd(n, r) {
|
|
60
|
+
let i = !1;
|
|
61
|
+
try {
|
|
62
|
+
r === "commit" && h ? (i = o({
|
|
63
|
+
session: d,
|
|
64
|
+
delta: l.delta,
|
|
65
|
+
at: n.drag ? n.world : h
|
|
66
|
+
}), i && s(d.scene, {
|
|
67
|
+
kind: "translate",
|
|
68
|
+
...l.delta
|
|
69
|
+
}, p)) : t(d.behaviors, d.gestureCtx);
|
|
70
|
+
} finally {
|
|
71
|
+
e({
|
|
72
|
+
hold: m,
|
|
73
|
+
previews: l.previews,
|
|
74
|
+
behaviors: d.behaviors,
|
|
75
|
+
ctx: d.gestureCtx,
|
|
76
|
+
lifecycle: d.lifecycle
|
|
77
|
+
}, i);
|
|
78
|
+
}
|
|
79
|
+
},
|
|
80
|
+
previewIds: () => l.previews.keys(),
|
|
81
|
+
previewPose: (e) => l.previews.get(e) ?? null,
|
|
82
|
+
previewOpaqueIds: () => l.opaque.size === 0 ? null : l.opaque
|
|
83
|
+
};
|
|
84
|
+
}
|
|
85
|
+
},
|
|
86
|
+
enabled: () => !0
|
|
87
|
+
}, r);
|
|
88
|
+
//#endregion
|
|
89
|
+
export { l as moveAction };
|
|
90
|
+
|
|
91
|
+
//# sourceMappingURL=action.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"action.js","names":["moveAction","inPlane","frame","begun","beginMove","ctx","opts","subject","hold","session","engaged","moveCtx","s","pastDragThreshold","nextFrame","readers","committed","reason","commitMove","endCtx","recordTransform","runBehaviorCancel","id","selectionLayer"],"sources":["../../../../src/interactions/actions/move/action.ts"],"sourcesContent":["import type { Action } from '@weasel-js/routing';\nimport type { InvocationCtx, OngoingHandle, BindingOpts } from '@weasel-js/routing';\nimport { pastDragThreshold } from '@weasel-js/routing';\nimport type { NodeId } from 'core/scene/types';\nimport { closeGesture, runBehaviorCancel } from '../gestureLifecycle';\nimport { inPlane, selectionLayer } from '../planeInput';\nimport { beginMove, type MoveFrame, type ReparentOnDrop } from './session';\nimport { nextFrame } from './frame';\nimport { commitMove } from './commit';\nimport { recordTransform } from '../transform-again/memory';\nexport type { ReparentOnDrop };\n\n/**\n * @experimental\n * Drag-translates the selection.\n *\n * Each frame's poses go to the scene's ephemeral override table, not the\n * document: `Scene.setPose` records an undo entry per call, and the overrides\n * are what let a node deriving its geometry from a dragged one follow the\n * drag. Release commits one batch — at most one undo entry, none when the\n * binding's params make it transient — and cancel drops the overrides.\n *\n * Behaviors from the binding's `opts.behaviors` fold into each frame; on\n * release the first non-`undefined` answer wins (`Op[]` commits, `null`\n * aborts). `beginMove` appends the action's own two: a layout drop and\n * reparent-on-drop.\n */\nexport const moveAction: Action & { requires: string[] } = inPlane({\n id: 'move',\n label: 'Move',\n // No hover `cursor`: pointing at a node shouldn't preemptively promise a move.\n activeCursor: 'move',\n // Ambient default targets `selected-body`, not a bare `{ kind: 'drag' }`,\n // which catches every drag in ambient scope and bleeds the move into\n // drawing-tool gestures wherever the higher-priority active match falls\n // through.\n defaultBinding: { kind: 'drag', target: 'selected-body' },\n eligible: { capability: 'transforms-selection' },\n requires: ['selection', 'scene', 'poseDescriptor', 'layout', 'applyOps', 'geometryProjection', 'nodeAtPoint', 'view'],\n invoker: {\n timing: 'ongoing',\n start(ctx: InvocationCtx, opts?: BindingOpts): OngoingHandle {\n let frame: MoveFrame = { delta: { dx: 0, dy: 0 }, previews: new Map(), opaque: new Set() };\n const begun = beginMove(ctx, opts, () => frame);\n if (!begun) return {};\n const { session, readers } = begun;\n const subject = [...(ctx.deps.selection?.get() ?? [])] as string[];\n const hold = session.scene.overrides.hold();\n // Where the last move put the pointer, once the drag has passed its\n // threshold; null until then.\n let engaged: { x: number; y: number } | null = null;\n return {\n kind: 'move',\n onMove(moveCtx: InvocationCtx): void {\n if (!moveCtx.drag) return;\n if (!engaged) {\n const s = moveCtx.drag.screenDelta;\n if (s && !pastDragThreshold({ clientX: 0, clientY: 0 }, { clientX: s.x, clientY: s.y }, session.dragThresholdPx)) return;\n session.lifecycle.start(session.ids as unknown as string[]);\n }\n engaged = moveCtx.world;\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 // A press that never traveled `dragThresholdPx` was never a move:\n // its behaviors started, so they are canceled, not asked to commit.\n if (reason === 'commit' && engaged) {\n committed = commitMove({\n session,\n delta: frame.delta,\n at: endCtx.drag ? endCtx.world : engaged,\n });\n if (committed) recordTransform(session.scene, { kind: 'translate', ...frame.delta }, subject);\n } else runBehaviorCancel(session.behaviors, session.gestureCtx);\n } finally {\n // After the commit, so no frame can paint the pre-drag pose between\n // the override going away and the document catching up.\n closeGesture({ hold, previews: frame.previews, behaviors: session.behaviors, 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 previewOpaqueIds: () => (frame.opaque.size === 0 ? null : frame.opaque),\n };\n },\n },\n /**\n * Always enabled: the dispatcher treats anything `!== true` as \"fall\n * through to the next-best match\", so a disabled reason here loses every\n * drag-on-selected-body to a lower-specificity binding (a shape tool's\n * insert drag).\n */\n enabled: () => true,\n}, selectionLayer);\n"],"mappings":";;;;;;;;AA2BA,IAAaA,IAA8CC,EAAQ;CACjE,IAAI;CACJ,OAAO;CAEP,cAAc;CAKd,gBAAgB;EAAE,MAAM;EAAQ,QAAQ;CAAgB;CACxD,UAAU,EAAE,YAAY,uBAAuB;CAC/C,UAAU;EAAC;EAAa;EAAS;EAAkB;EAAU;EAAY;EAAsB;EAAe;CAAM;CACpH,SAAS;EACP,QAAQ;EACR,MAAM,GAAoB,GAAmC;GAC3D,IAAIC,IAAmB;IAAE,OAAO;KAAE,IAAI;KAAG,IAAI;IAAE;IAAG,0BAAU,IAAI,IAAI;IAAG,wBAAQ,IAAI,IAAI;GAAE,GACnFC,IAAQC,EAAUC,GAAKC,SAAYJ,CAAK;GAC9C,IAAI,CAACC,GAAO,OAAO,CAAC;GACpB,IAAM,EAAE,YAAS,eAAYA,GACvBI,IAAU,CAAC,GAAIF,EAAI,KAAK,WAAW,IAAI,KAAK,CAAC,CAAE,GAC/CG,IAAOC,EAAQ,MAAM,UAAU,KAAK,GAGtCC,IAA2C;GAC/C,OAAO;IACL,MAAM;IACN,OAAO,GAA8B;KACnC,IAAKC,EAAQ,MACb;UAAI,CAACD,GAAS;OACZ,IAAME,IAAID,EAAQ,KAAK;OACvB,IAAIC,KAAK,CAACC,EAAkB;QAAE,SAAS;QAAG,SAAS;OAAE,GAAG;QAAE,SAASD,EAAE;QAAG,SAASA,EAAE;OAAE,GAAGH,EAAQ,eAAe,GAAG;OAClH,EAAQ,UAAU,MAAMA,EAAQ,GAA0B;MAC5D;MAGA,AAFA,IAAUE,EAAQ,OAClB,IAAQG,EAAUL,GAASM,GAASJ,CAAO,GAC3CH,EAAK,IAAIN,EAAM,QAAQ;KAHvB;IAIF;IACA,MAAM,GAAuB,GAAmC;KAC9D,IAAIc,IAAY;KAChB,IAAI;MAGF,AAAIC,MAAW,YAAYP,KACzB,IAAYQ,EAAW;OACrB;OACA,OAAOhB,EAAM;OACb,IAAIiB,EAAO,OAAOA,EAAO,QAAQT;MACnC,CAAC,GACGM,KAAWI,EAAgBX,EAAQ,OAAO;OAAE,MAAM;OAAa,GAAGP,EAAM;MAAM,GAAGK,CAAO,KACvFc,EAAkBZ,EAAQ,WAAWA,EAAQ,UAAU;KAChE,UAAU;MAGR,EAAa;OAAE;OAAM,UAAUP,EAAM;OAAU,WAAWO,EAAQ;OAAW,KAAKA,EAAQ;OAAY,WAAWA,EAAQ;MAAU,GAAGO,CAAS;KACjJ;IACF;IACA,kBAAkBd,EAAM,SAAS,KAAK;IACtC,cAAc,MAAeA,EAAM,SAAS,IAAIoB,CAAY,KAAK;IACjE,wBAAyBpB,EAAM,OAAO,SAAS,IAAI,OAAOA,EAAM;GAClE;EACF;CACF;CAOA,eAAe;AACjB,GAAGqB,CAAc"}
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
import { layoutDropOps as e } from "../commit/layoutDrop.js";
|
|
2
|
+
import { runDropPass as t } from "../layout/dropPass.js";
|
|
3
|
+
import { layoutReleaseOps as n } from "../commit/layoutRelease.js";
|
|
4
|
+
import { landReleased as r, releasedPoses as i, stepGlide as a } from "../layout/glide.js";
|
|
5
|
+
//#region src/interactions/actions/move/behaviors/layoutDrop.ts
|
|
6
|
+
function o(o) {
|
|
7
|
+
let s = null, c = /* @__PURE__ */ new Set(), l = null, u = () => {
|
|
8
|
+
let e = o.session();
|
|
9
|
+
e.layout?.reflow && (l = i(e, o.frame().previews));
|
|
10
|
+
};
|
|
11
|
+
return {
|
|
12
|
+
onMove(e, n) {
|
|
13
|
+
if (s = null, n.kind !== "translate") return;
|
|
14
|
+
let r = o.session();
|
|
15
|
+
s = t(r, {
|
|
16
|
+
dx: n.dx,
|
|
17
|
+
dy: n.dy
|
|
18
|
+
}, {
|
|
19
|
+
x: e.pointer.worldX,
|
|
20
|
+
y: e.pointer.worldY
|
|
21
|
+
});
|
|
22
|
+
let i = s?.pass?.reflowIds, l = r.layout?.reflow;
|
|
23
|
+
return l ? (a(l, c, s?.reflow ?? /* @__PURE__ */ new Map()), { opaque: i }) : {
|
|
24
|
+
poses: s?.reflow,
|
|
25
|
+
opaque: i
|
|
26
|
+
};
|
|
27
|
+
},
|
|
28
|
+
onEnd(t, r) {
|
|
29
|
+
if (u(), r.answered) return;
|
|
30
|
+
let i = o.session(), { delta: a } = o.frame();
|
|
31
|
+
if (a.dx === 0 && a.dy === 0) return;
|
|
32
|
+
let c = (e) => e.length > 0 ? e : null;
|
|
33
|
+
if (s?.pass) return c(e(i, s.pass));
|
|
34
|
+
let l = n(i, a, s?.dropCenter ?? null);
|
|
35
|
+
return l === void 0 ? void 0 : c(l);
|
|
36
|
+
},
|
|
37
|
+
onCancel: u,
|
|
38
|
+
onSettled() {
|
|
39
|
+
let e = o.session(), t = e.layout?.reflow;
|
|
40
|
+
if (t) {
|
|
41
|
+
for (let e of c) t.settle(e);
|
|
42
|
+
r(e, t, l ?? /* @__PURE__ */ new Map());
|
|
43
|
+
}
|
|
44
|
+
c.clear();
|
|
45
|
+
}
|
|
46
|
+
};
|
|
47
|
+
}
|
|
48
|
+
//#endregion
|
|
49
|
+
export { o as layoutDrop };
|
|
50
|
+
|
|
51
|
+
//# sourceMappingURL=layoutDrop.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"layoutDrop.js","names":["layoutDrop","drop","gliding","released","noteReleased","session","move","releasedPoses","proposed","runDropPass","ctx","opaque","reflow","stepGlide","end","delta","orAbort","ops","layoutDropOps","release","layoutReleaseOps","id"],"sources":["../../../../../src/interactions/actions/move/behaviors/layoutDrop.ts"],"sourcesContent":["import type { Op } from 'core/ops/types';\nimport type { NodeId } from 'core/scene/types';\nimport type { BehaviorResult, MoveBehavior } from '../../../gestures/types';\nimport { layoutDropOps } from '../commit/layoutDrop';\nimport { layoutReleaseOps } from '../commit/layoutRelease';\nimport { runDropPass } from '../layout/dropPass';\nimport { landReleased, releasedPoses, stepGlide, type Released } from '../layout/glide';\nimport type { DropPass } from '../layout/types';\nimport type { MoveGesture } from '../session';\n\n/**\n * The move behavior that drops the selection into the layout container under\n * it. Each move it resolves the drop and shows the siblings making room; on\n * release it answers with the container's `commitDrop`, or, outside every\n * container, with what the source layouts' `releaseDrop` and the exits decide.\n *\n * Built by the move action for one drag, after the binding's own behaviors, and\n * only when the `layout` dep is present.\n */\nexport function layoutDrop(move: MoveGesture): MoveBehavior<unknown> {\n // This frame's pass; reset by every move, a throwing one included.\n let drop: DropPass | null = null;\n const gliding = new Set<NodeId>();\n let released: Map<NodeId, Released> | null = null;\n // Before the commit: where each dragged id is shown as the gesture closes.\n const noteReleased = (): void => {\n const session = move.session();\n if (session.layout?.reflow) released = releasedPoses(session, move.frame().previews);\n };\n\n return {\n onMove(ctx, proposed): BehaviorResult<unknown> | void {\n drop = null;\n if (proposed.kind !== 'translate') return;\n const session = move.session();\n drop = runDropPass(\n session,\n { dx: proposed.dx, dy: proposed.dy },\n { x: ctx.pointer.worldX, y: ctx.pointer.worldY },\n );\n const opaque = drop?.pass?.reflowIds;\n const reflow = session.layout?.reflow;\n if (!reflow) return { poses: drop?.reflow, opaque };\n stepGlide(reflow, gliding, drop?.reflow ?? new Map());\n return { opaque };\n },\n\n onEnd(_ctx, end): Op[] | null | void {\n noteReleased();\n if (end.answered) return;\n const session = move.session();\n const { delta } = move.frame();\n // No-op if no movement (sub-threshold drag or zero delta).\n if (delta.dx === 0 && delta.dy === 0) return;\n // A drop or a release that claims the selection and writes nothing\n // commits nothing: the translate must not run in its place.\n const orAbort = (ops: Op[]): Op[] | null => (ops.length > 0 ? ops : null);\n // Layout drop commit — takes precedence over reparent-on-drop when a\n // layout container accepted the drag this gesture. One placement per\n // dragged child, replayed in the order the preview resolved them.\n // TODO: geometryProjection for drop-reflow — left pose-only because the\n // reflow distributes per-child poses with no single global delta; not\n // exercised by the geometry contract gate.\n if (drop?.pass) return orAbort(layoutDropOps(session, drop.pass));\n const release = layoutReleaseOps(session, delta, drop?.dropCenter ?? null);\n return release === undefined ? undefined : orAbort(release);\n },\n\n onCancel: noteReleased,\n\n onSettled(): void {\n const session = move.session();\n const reflow = session.layout?.reflow;\n // After the commit: each glide settles onto the pose the document now\n // holds, or back home on a cancel — the dragged ids from where they\n // were let go.\n if (reflow) {\n for (const id of gliding) reflow.settle(id as string);\n landReleased(session, reflow, released ?? new Map());\n }\n gliding.clear();\n },\n };\n}\n"],"mappings":";;;;;AAmBA,SAAgBA,EAAW,GAA0C;CAEnE,IAAIC,IAAwB,MACtBC,oBAAU,IAAI,IAAY,GAC5BC,IAAyC,MAEvCC,UAA2B;EAC/B,IAAMC,IAAUC,EAAK,QAAQ;EAC7B,AAAID,EAAQ,QAAQ,WAAQ,IAAWE,EAAcF,GAASC,EAAK,MAAM,CAAC,CAAC,QAAQ;CACrF;CAEA,OAAO;EACL,OAAO,GAAK,GAA0C;GAEpD,IADA,IAAO,MACHE,EAAS,SAAS,aAAa;GACnC,IAAMH,IAAUC,EAAK,QAAQ;GAC7B,IAAOG,EACLJ,GACA;IAAE,IAAIG,EAAS;IAAI,IAAIA,EAAS;GAAG,GACnC;IAAE,GAAGE,EAAI,QAAQ;IAAQ,GAAGA,EAAI,QAAQ;GAAO,CACjD;GACA,IAAMC,IAASV,GAAM,MAAM,WACrBW,IAASP,EAAQ,QAAQ;GAG/B,OAFKO,KACLC,EAAUD,GAAQV,GAASD,GAAM,0BAAU,IAAI,IAAI,CAAC,GAC7C,EAAE,UAAO,KAFI;IAAE,OAAOA,GAAM;IAAQ;GAAO;EAGpD;EAEA,MAAM,GAAM,GAAyB;GAEnC,IADAG,EAAa,GACTU,EAAI,UAAU;GAClB,IAAMT,IAAUC,EAAK,QAAQ,GACvB,EAAE,aAAUA,EAAK,MAAM;GAE7B,IAAIS,EAAM,OAAO,KAAKA,EAAM,OAAO,GAAG;GAGtC,IAAMC,KAAW,MAA4BC,EAAI,SAAS,IAAIA,IAAM;GAOpE,IAAIhB,GAAM,MAAM,OAAOe,EAAQE,EAAcb,GAASJ,EAAK,IAAI,CAAC;GAChE,IAAMkB,IAAUC,EAAiBf,GAASU,GAAOd,GAAM,cAAc,IAAI;GACzE,OAAOkB,MAAY,KAAA,IAAY,KAAA,IAAYH,EAAQG,CAAO;EAC5D;EAEA,UAAUf;EAEV,YAAkB;GAChB,IAAMC,IAAUC,EAAK,QAAQ,GACvBM,IAASP,EAAQ,QAAQ;GAI/B,IAAIO,GAAQ;IACV,KAAK,IAAMS,KAAMnB,GAAS,EAAO,OAAOmB,CAAY;IACpD,EAAahB,GAASO,GAAQT,qBAAY,IAAI,IAAI,CAAC;GACrD;GACA,EAAQ,MAAM;EAChB;CACF;AACF"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import { reparentOps as e, resolveDropTarget as t } from "../commit/reparent.js";
|
|
2
|
+
//#region src/interactions/actions/move/behaviors/reparentOnDrop.ts
|
|
3
|
+
function n(n) {
|
|
4
|
+
return { onEnd(r, i) {
|
|
5
|
+
if (i.answered) return;
|
|
6
|
+
let a = n.session(), { delta: o } = n.frame();
|
|
7
|
+
if (o.dx === 0 && o.dy === 0) return;
|
|
8
|
+
let s = a.reparentOnDrop(), c = s === "off" ? null : t(a, i.pointer);
|
|
9
|
+
return c ? e(a, c, s, o) : void 0;
|
|
10
|
+
} };
|
|
11
|
+
}
|
|
12
|
+
//#endregion
|
|
13
|
+
export { n as reparentOnDrop };
|
|
14
|
+
|
|
15
|
+
//# sourceMappingURL=reparentOnDrop.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"reparentOnDrop.js","names":["reparentOnDrop","end","session","move","delta","mode","target","resolveDropTarget","reparentOps"],"sources":["../../../../../src/interactions/actions/move/behaviors/reparentOnDrop.ts"],"sourcesContent":["import type { MoveBehavior } from '../../../gestures/types';\nimport { reparentOps, resolveDropTarget } from '../commit/reparent';\nimport type { MoveGesture } from '../session';\n\n/**\n * The move behavior that reparents the selection under the node the pointer is\n * released over, when the binding's `reparentOnDrop` param asks for it.\n *\n * Built by the move action for one drag and run last, so a binding's behavior\n * or a layout drop that claims the commit preempts it.\n */\nexport function reparentOnDrop(move: MoveGesture): MoveBehavior<unknown> {\n return {\n onEnd(_ctx, end) {\n if (end.answered) return;\n const session = move.session();\n const { delta } = move.frame();\n // No-op if no movement (sub-threshold drag or zero delta).\n if (delta.dx === 0 && delta.dy === 0) return;\n // Reparent-on-drop, when opted in via `opts.params.reparentOnDrop`.\n // Resolves the drop target via the `nodeAtPoint` dep (sourced by\n // `<SceneCanvas>`) and reparents each moved root under it, then\n // writes the translated pose in the new parent's frame so the\n // visual position is preserved across the parent swap.\n // An end with no drag carries no pointer: the dispatcher's `cancelAll`\n // reports the world origin.\n const mode = session.reparentOnDrop();\n const target = mode !== 'off' ? resolveDropTarget(session, end.pointer) : null;\n return target ? reparentOps(session, target, mode, delta) : undefined;\n },\n };\n}\n"],"mappings":";;AAWA,SAAgBA,EAAe,GAA0C;CACvE,OAAO,EACL,MAAM,GAAM,GAAK;EACf,IAAIC,EAAI,UAAU;EAClB,IAAMC,IAAUC,EAAK,QAAQ,GACvB,EAAE,aAAUA,EAAK,MAAM;EAE7B,IAAIC,EAAM,OAAO,KAAKA,EAAM,OAAO,GAAG;EAQtC,IAAMC,IAAOH,EAAQ,eAAe,GAC9BI,IAASD,MAAS,QAAkD,OAA1CE,EAAkBL,GAASD,EAAI,OAAO;EACtE,OAAOK,IAASE,EAAYN,GAASI,GAAQD,GAAMD,CAAK,IAAI,KAAA;CAC9D,EACF;AACF"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import {
|
|
1
|
+
import { createReparentOp as e } from "../../../../core/ops/reparent.js";
|
|
2
|
+
import { createTransformOp as t } from "../../../../core/ops/transform.js";
|
|
3
3
|
import { getScratch as n, scratchKey as r, setScratch as i } from "@weasel-js/routing";
|
|
4
4
|
//#region src/interactions/actions/move/behaviors/snapToContainer.ts
|
|
5
5
|
var a = r("snapToContainer");
|
|
@@ -22,11 +22,17 @@ function c(n) {
|
|
|
22
22
|
r?.parentId === t.parentId && a.set(n, r.slotPose);
|
|
23
23
|
}
|
|
24
24
|
return a;
|
|
25
|
-
}, d = (e, t) =>
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
25
|
+
}, d = (e, t) => {
|
|
26
|
+
let n = e.origin.get(e.draggedIds[0]), r = n === void 0 ? void 0 : e.offset?.(n, t.slotPose);
|
|
27
|
+
return {
|
|
28
|
+
...r ? { transform: {
|
|
29
|
+
kind: "translate",
|
|
30
|
+
...r
|
|
31
|
+
} } : {},
|
|
32
|
+
poses: u(e, t),
|
|
33
|
+
snap: t
|
|
34
|
+
};
|
|
35
|
+
};
|
|
30
36
|
return {
|
|
31
37
|
onMove(e, t) {
|
|
32
38
|
let n = o(e), c = i(e.draggedIds[0], e.pointer.worldX, e.pointer.worldY);
|
|
@@ -46,29 +52,30 @@ function c(n) {
|
|
|
46
52
|
onCancel(e) {
|
|
47
53
|
s(o(e));
|
|
48
54
|
},
|
|
49
|
-
onEnd(n) {
|
|
50
|
-
let
|
|
51
|
-
s(
|
|
52
|
-
let
|
|
53
|
-
if (!
|
|
54
|
-
let
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
to: o,
|
|
61
|
-
label: c
|
|
62
|
-
}));
|
|
63
|
-
let s = n.adapter.getParent?.(r) ?? null;
|
|
64
|
-
s !== i.parentId && a.push(t({
|
|
65
|
-
id: r,
|
|
66
|
-
fromParentId: s,
|
|
67
|
-
toParentId: i.parentId,
|
|
55
|
+
onEnd(n, r) {
|
|
56
|
+
let i = o(n);
|
|
57
|
+
s(i);
|
|
58
|
+
let a = i.committedSnap ?? n.snap;
|
|
59
|
+
if (!a) return;
|
|
60
|
+
let d = [], f = (t) => {
|
|
61
|
+
let r = n.adapter.getParent(t);
|
|
62
|
+
r !== a.parentId && d.push(e({
|
|
63
|
+
id: t,
|
|
64
|
+
fromParentId: r,
|
|
65
|
+
toParentId: a.parentId,
|
|
68
66
|
label: l
|
|
69
67
|
}));
|
|
70
|
-
}
|
|
71
|
-
|
|
68
|
+
}, p = u(n, a);
|
|
69
|
+
for (let [e, r] of p) d.push(t({
|
|
70
|
+
id: e,
|
|
71
|
+
from: n.origin.get(e),
|
|
72
|
+
to: r,
|
|
73
|
+
label: c
|
|
74
|
+
})), f(e);
|
|
75
|
+
let m = n.draggedIds.filter((e) => !p.has(e));
|
|
76
|
+
d.push(...r.translateOps(m));
|
|
77
|
+
for (let e of m) f(e);
|
|
78
|
+
return d;
|
|
72
79
|
}
|
|
73
80
|
};
|
|
74
81
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"snapToContainer.js","names":["STATE","scratchKey","getState","s","getScratch","ctx","setScratch","clearTimer","snapToContainer","args","slotsFor","primary","rest","slots","snap","id","own","findTarget","snapped","target","isInstant","dwellMs","ops","
|
|
1
|
+
{"version":3,"file":"snapToContainer.js","names":["STATE","scratchKey","getState","s","getScratch","ctx","setScratch","clearTimer","snapToContainer","args","slotsFor","primary","rest","slots","snap","id","own","findTarget","snapped","start","toSlot","target","isInstant","dwellMs","ops","reparent","oldParent","createReparentOp","reparentLabel","to","createTransformOp","moveLabel","end"],"sources":["../../../../../src/interactions/actions/move/behaviors/snapToContainer.ts"],"sourcesContent":["import { createTransformOp } from 'core/ops/transform';\nimport { createReparentOp } from 'core/ops/reparent';\nimport type { Op } from 'core/ops/types';\nimport type { SnapTarget } from 'core/adapters/types';\nimport type { BehaviorResult, MoveBehavior, GestureContext } from '../../../gestures/types';\nimport { scratchKey, getScratch, setScratch } from '@weasel-js/routing';\n\ninterface SnapState<TPose> {\n pendingTargetId: string | null;\n pendingTimer: ReturnType<typeof setTimeout> | null;\n committedSnap: SnapTarget<TPose> | null;\n}\n\n// The slot is generic over TPose; we keep the unknown-pose key at module\n// scope and project it through `as` at the read site (each consumer call\n// of `snapToContainer<TPose>` is the only writer of its own SnapState\n// instance, so the cast is safe at runtime).\nconst STATE = scratchKey<SnapState<unknown>>('snapToContainer');\n\nfunction getState<TPose>(ctx: GestureContext<TPose>): SnapState<TPose> {\n let s = getScratch(ctx.scratch, STATE) as SnapState<TPose> | undefined;\n if (!s) {\n s = { pendingTargetId: null, pendingTimer: null, committedSnap: null };\n setScratch(ctx.scratch, STATE, s as SnapState<unknown>);\n }\n return s;\n}\n\nfunction clearTimer<TPose>(s: SnapState<TPose>) {\n if (s.pendingTimer !== null) {\n clearTimeout(s.pendingTimer);\n s.pendingTimer = null;\n }\n s.pendingTargetId = null;\n}\n\n/**\n * Move behavior that drops the dragged nodes into a container the pointer\n * hovers over for `dwellMs`, reparenting each and giving it the slot\n * `findTarget` answers for its id. A node `findTarget` has no slot for in\n * that container rides along with the first, at its offset from it.\n *\n * The dwell is what keeps a drag that merely passes over a container from\n * being captured by it.\n */\nexport function snapToContainer<TPose>(args: {\n dwellMs: number;\n findTarget: (\n draggedId: string,\n worldX: number,\n worldY: number,\n ) => SnapTarget<TPose> | null;\n isInstant?: (target: SnapTarget<TPose>) => boolean;\n moveLabel?: string;\n reparentLabel?: string;\n}): MoveBehavior<TPose> {\n const { dwellMs, findTarget, isInstant, moveLabel = 'Move', reparentLabel = 'Move and reparent' } = args;\n\n /** Each dragged node's slot in the snapped container: the snapped slot for\n * the first, and for each other node the one `findTarget` answers for it. */\n const slotsFor = (ctx: GestureContext<TPose>, snap: SnapTarget<TPose>): Map<string, TPose> => {\n const [primary, ...rest] = ctx.draggedIds;\n const slots = new Map<string, TPose>([[primary, snap.slotPose]]);\n for (const id of rest) {\n const own = findTarget(id, ctx.pointer.worldX, ctx.pointer.worldY);\n if (own?.parentId === snap.parentId) slots.set(id, own.slotPose);\n }\n return slots;\n };\n const snapped = (ctx: GestureContext<TPose>, snap: SnapTarget<TPose>): BehaviorResult<TPose> => {\n const start = ctx.origin.get(ctx.draggedIds[0]);\n const toSlot = start !== undefined ? ctx.offset?.(start, snap.slotPose) : undefined;\n return {\n ...(toSlot ? { transform: { kind: 'translate' as const, ...toSlot } } : {}),\n poses: slotsFor(ctx, snap),\n snap,\n };\n };\n\n return {\n onMove(ctx, _proposed) {\n const s = getState<TPose>(ctx);\n const target = findTarget(ctx.draggedIds[0], ctx.pointer.worldX, ctx.pointer.worldY);\n\n if (s.committedSnap) {\n if (target && target.parentId === s.committedSnap.parentId) {\n return snapped(ctx, s.committedSnap);\n }\n s.committedSnap = null;\n }\n\n if (!target) {\n clearTimer(s);\n return;\n }\n\n if (isInstant?.(target)) {\n clearTimer(s);\n s.committedSnap = target;\n return snapped(ctx, target);\n }\n\n if (s.pendingTargetId === target.parentId) {\n return;\n }\n clearTimer(s);\n s.pendingTargetId = target.parentId;\n s.pendingTimer = setTimeout(() => {\n s.committedSnap = target;\n s.pendingTimer = null;\n }, dwellMs);\n return;\n },\n\n onCancel(ctx) { clearTimer(getState<TPose>(ctx)); },\n\n onEnd(ctx, end) {\n const s = getState<TPose>(ctx);\n clearTimer(s);\n const snap = s.committedSnap ?? ctx.snap;\n if (!snap) return;\n const ops: Op[] = [];\n const reparent = (id: string): void => {\n const oldParent = ctx.adapter.getParent(id);\n if (oldParent !== snap.parentId) {\n ops.push(createReparentOp({\n id,\n fromParentId: oldParent,\n toParentId: snap.parentId,\n label: reparentLabel,\n }));\n }\n };\n const slots = slotsFor(ctx, snap);\n for (const [id, to] of slots) {\n ops.push(createTransformOp<TPose>({ id, from: ctx.origin.get(id)!, to, label: moveLabel }));\n reparent(id);\n }\n // A node with no slot of its own lands where the preview drew it.\n const rest = ctx.draggedIds.filter((id) => !slots.has(id));\n ops.push(...end.translateOps(rest));\n for (const id of rest) reparent(id);\n return ops;\n },\n };\n}\n"],"mappings":"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"}
|