@weasel-js/core 1.9.3 → 1.9.4
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 +356 -0
- package/README.md +2 -2
- package/dist/WeaselProvider.js +5 -5
- package/dist/affordances/composeAffordanceLayer.js +10 -20
- package/dist/affordances/composeAffordanceLayer.js.map +1 -1
- package/dist/affordances/cornerResize.js +25 -17
- package/dist/affordances/cornerResize.js.map +1 -1
- package/dist/affordances/hitAffordanceRegions.js +27 -20
- package/dist/affordances/hitAffordanceRegions.js.map +1 -1
- package/dist/affordances/rotationHandle.js +18 -18
- package/dist/affordances/rotationHandle.js.map +1 -1
- package/dist/animation/behaviors/momentum.js +93 -55
- package/dist/animation/behaviors/momentum.js.map +1 -1
- package/dist/animation/loop.js +10 -12
- package/dist/animation/loop.js.map +1 -1
- package/dist/animation/reflow.js +8 -8
- package/dist/animation/reflow.js.map +1 -1
- package/dist/animation/stagger.js +64 -56
- package/dist/animation/stagger.js.map +1 -1
- package/dist/animation/timeline/booking.js +62 -54
- package/dist/animation/timeline/booking.js.map +1 -1
- package/dist/animation/timeline/createTimeline.js +85 -76
- package/dist/animation/timeline/createTimeline.js.map +1 -1
- package/dist/animation/timeline/sampleTrack.js +13 -5
- package/dist/animation/timeline/sampleTrack.js.map +1 -1
- package/dist/animation/useAnimator.js +45 -35
- package/dist/animation/useAnimator.js.map +1 -1
- package/dist/animation/wrappers/animateLifecycle.js +31 -24
- package/dist/animation/wrappers/animateLifecycle.js.map +1 -1
- package/dist/animation/wrappers/animateOnSetPose.js +28 -26
- package/dist/animation/wrappers/animateOnSetPose.js.map +1 -1
- package/dist/animation/wrappers/instantPose.js +13 -0
- package/dist/animation/wrappers/instantPose.js.map +1 -0
- package/dist/{poseDescriptor-D-OH-tu5.d.ts → autoPoseDescriptor-Ct7yqivU.d.ts} +28 -3
- package/dist/barrel/chrome.js +16 -0
- package/dist/barrel/input.js +19 -0
- package/dist/barrel/interactions.js +42 -0
- package/dist/barrel/paint.js +18 -0
- package/dist/barrel/paths.js +19 -0
- package/dist/barrel/renderer.js +20 -0
- package/dist/barrel/routing.js +51 -0
- package/dist/barrel/text.js +18 -0
- package/dist/barrel/viewport.js +52 -0
- package/dist/builtins-DPcdghtB.d.ts +1223 -0
- package/dist/canvas/Canvas.js +363 -448
- package/dist/canvas/Canvas.js.map +1 -1
- package/dist/canvas/CanvasView.js +164 -165
- package/dist/canvas/CanvasView.js.map +1 -1
- package/dist/canvas/CursorCoordsHud.js +37 -32
- package/dist/canvas/CursorCoordsHud.js.map +1 -1
- package/dist/canvas/DrawCanvas.js +49 -43
- package/dist/canvas/DrawCanvas.js.map +1 -1
- package/dist/canvas/MinimapCanvas.js +26 -25
- package/dist/canvas/MinimapCanvas.js.map +1 -1
- package/dist/canvas/NodeShape.js +59 -377
- package/dist/canvas/NodeShape.js.map +1 -1
- package/dist/canvas/PickHud.js +50 -47
- package/dist/canvas/PickHud.js.map +1 -1
- package/dist/canvas/SceneCanvas/GestureDispatcherMounter.js +167 -0
- package/dist/canvas/SceneCanvas/GestureDispatcherMounter.js.map +1 -0
- package/dist/canvas/SceneCanvas/PointerProviderIfRoot.js +13 -13
- package/dist/canvas/SceneCanvas/StandardActionsRegistrar.js +67 -0
- package/dist/canvas/SceneCanvas/StandardActionsRegistrar.js.map +1 -0
- package/dist/canvas/SceneCanvas/ToolKeybindingsMounter.js +16 -0
- package/dist/canvas/SceneCanvas/ToolKeybindingsMounter.js.map +1 -0
- package/dist/canvas/SceneCanvas/coordTrace.js +10 -0
- package/dist/canvas/SceneCanvas/coordTrace.js.map +1 -0
- package/dist/canvas/SceneCanvas/defaultNodeProperties.js +112 -70
- package/dist/canvas/SceneCanvas/defaultNodeProperties.js.map +1 -1
- package/dist/canvas/SceneCanvas/defaultNodeRouting.js +9 -8
- package/dist/canvas/SceneCanvas/defaultNodeRouting.js.map +1 -1
- package/dist/canvas/SceneCanvas/features.js +1 -0
- package/dist/canvas/SceneCanvas/features.js.map +1 -1
- package/dist/canvas/SceneCanvas/isDev.js +12 -0
- package/dist/canvas/SceneCanvas/isDev.js.map +1 -0
- package/dist/canvas/SceneCanvas/poseGeometry.js +29 -28
- package/dist/canvas/SceneCanvas/poseGeometry.js.map +1 -1
- package/dist/canvas/SceneCanvas/poseRegistrars.js +13 -0
- package/dist/canvas/SceneCanvas/poseRegistrars.js.map +1 -0
- package/dist/canvas/SceneCanvas/props.js +38 -0
- package/dist/canvas/SceneCanvas/props.js.map +1 -0
- package/dist/canvas/SceneCanvas/useBuiltinShapeTools.js +21 -62
- package/dist/canvas/SceneCanvas/useBuiltinShapeTools.js.map +1 -1
- package/dist/canvas/SceneCanvas/useDispatcherOverlayLayer.js.map +1 -1
- package/dist/canvas/SceneCanvas/usePreviewGhostLayer.js +46 -48
- package/dist/canvas/SceneCanvas/usePreviewGhostLayer.js.map +1 -1
- package/dist/canvas/SceneCanvas/useSceneSelectTool.js +33 -33
- package/dist/canvas/SceneCanvas/useSceneSelectTool.js.map +1 -1
- package/dist/canvas/SceneCanvas.js +534 -788
- package/dist/canvas/SceneCanvas.js.map +1 -1
- package/dist/canvas/SceneViewCanvas.js +45 -43
- package/dist/canvas/SceneViewCanvas.js.map +1 -1
- package/dist/canvas/buildSceneLayer.js +91 -0
- package/dist/canvas/buildSceneLayer.js.map +1 -0
- package/dist/canvas/buildSceneTree.js +16 -19
- package/dist/canvas/buildSceneTree.js.map +1 -1
- package/dist/canvas/canvasRenderer.js +68 -52
- package/dist/canvas/canvasRenderer.js.map +1 -1
- package/dist/canvas/deps/changes.js +13 -0
- package/dist/canvas/deps/changes.js.map +1 -0
- package/dist/canvas/deps/editAnchors.js +28 -28
- package/dist/canvas/deps/insert.js +119 -91
- package/dist/canvas/deps/insert.js.map +1 -1
- package/dist/canvas/deps/slice.js +46 -45
- package/dist/canvas/deps/slice.js.map +1 -1
- package/dist/canvas/deps/textEdit.js +10 -9
- package/dist/canvas/deps/textEdit.js.map +1 -1
- package/dist/canvas/derivedPath.js +46 -23
- package/dist/canvas/derivedPath.js.map +1 -1
- package/dist/canvas/getNodeAtPoint.js +7 -7
- package/dist/canvas/getNodeAtPoint.js.map +1 -1
- package/dist/canvas/hud.module.js +1 -1
- package/dist/canvas/hud.module.js.map +1 -1
- package/dist/canvas/kitRequirements.js +2 -2
- package/dist/canvas/kitRequirements.js.map +1 -1
- package/dist/canvas/layerOrder.js +13 -6
- package/dist/canvas/layerOrder.js.map +1 -1
- package/dist/canvas/minimapMath.js +12 -10
- package/dist/canvas/minimapMath.js.map +1 -1
- package/dist/canvas/nodeShapes/derivedPainter.js +34 -0
- package/dist/canvas/nodeShapes/derivedPainter.js.map +1 -0
- package/dist/canvas/nodeShapes/imagePainter.js +87 -0
- package/dist/canvas/nodeShapes/imagePainter.js.map +1 -0
- package/dist/canvas/nodeShapes/memo.js +9 -0
- package/dist/canvas/nodeShapes/memo.js.map +1 -0
- package/dist/canvas/nodeShapes/nodePaint.js +57 -0
- package/dist/canvas/nodeShapes/nodePaint.js.map +1 -0
- package/dist/canvas/nodeShapes/pathPainter.js +38 -0
- package/dist/canvas/nodeShapes/pathPainter.js.map +1 -0
- package/dist/canvas/nodeShapes/poseBox.js +20 -0
- package/dist/canvas/nodeShapes/poseBox.js.map +1 -0
- package/dist/canvas/nodeShapes/rectFallbackPainter.js +38 -0
- package/dist/canvas/nodeShapes/rectFallbackPainter.js.map +1 -0
- package/dist/canvas/nodeShapes/shapePainter.js +72 -0
- package/dist/canvas/nodeShapes/shapePainter.js.map +1 -0
- package/dist/canvas/nodeShapes/textPainter.js +55 -0
- package/dist/canvas/nodeShapes/textPainter.js.map +1 -0
- package/dist/canvas/overlayRoleStrokes.js.map +1 -1
- package/dist/canvas/paintCull.js +10 -11
- package/dist/canvas/paintCull.js.map +1 -1
- package/dist/canvas/pickWalk.js +52 -63
- package/dist/canvas/pickWalk.js.map +1 -1
- package/dist/canvas/poseRotation.js +11 -23
- package/dist/canvas/poseRotation.js.map +1 -1
- package/dist/canvas/renderDebugSnapshot.js +5 -5
- package/dist/canvas/renderSceneToPixels.js +3 -1
- package/dist/canvas/renderSceneToPixels.js.map +1 -1
- package/dist/canvas/sceneAdapter.js +66 -148
- package/dist/canvas/sceneAdapter.js.map +1 -1
- package/dist/canvas/sceneClipboard.js +112 -0
- package/dist/canvas/sceneClipboard.js.map +1 -0
- package/dist/canvas/sceneSlotWiring.js +4 -4
- package/dist/canvas/sceneSlotWiring.js.map +1 -1
- package/dist/canvas/sceneViewRender.js +39 -40
- package/dist/canvas/sceneViewRender.js.map +1 -1
- package/dist/canvas/useCanvasRenderer.js +14 -6
- package/dist/canvas/useCanvasRenderer.js.map +1 -1
- package/dist/canvas/useCanvasView.js +58 -0
- package/dist/canvas/useCanvasView.js.map +1 -0
- package/dist/canvas/useFrameLoop.js +35 -26
- package/dist/canvas/useFrameLoop.js.map +1 -1
- package/dist/canvas/useSceneLayerList.js +21 -0
- package/dist/canvas/useSceneLayerList.js.map +1 -0
- package/dist/clipboard.d.ts +10 -6
- package/dist/clone.d.ts +4 -3
- package/dist/core/adapters/arrayAdapter.js +48 -39
- package/dist/core/adapters/arrayAdapter.js.map +1 -1
- package/dist/core/device/index.js +5 -4
- package/dist/core/device/useDeviceProfile.js +38 -44
- package/dist/core/device/useDeviceProfile.js.map +1 -1
- package/dist/core/device/watchDevicePixelRatio.js +17 -0
- package/dist/core/device/watchDevicePixelRatio.js.map +1 -0
- package/dist/core/fillInPoseFrame.js.map +1 -1
- package/dist/core/geometry/poseDescriptor.js +21 -19
- package/dist/core/geometry/poseDescriptor.js.map +1 -1
- package/dist/core/geometry/poseFrame.js +44 -0
- package/dist/core/geometry/poseFrame.js.map +1 -0
- package/dist/core/geometry/poseRotation.js.map +1 -1
- package/dist/core/geometry/regionHit.js +9 -10
- package/dist/core/geometry/regionHit.js.map +1 -1
- package/dist/core/geometry/unionBounds.js +31 -29
- package/dist/core/geometry/unionBounds.js.map +1 -1
- package/dist/core/isPlainObject.js +2 -11
- package/dist/core/ops/arrange.js +1 -0
- package/dist/core/ops/arrange.js.map +1 -1
- package/dist/core/ops/create.js +10 -5
- package/dist/core/ops/create.js.map +1 -1
- package/dist/core/ops/delete.js +12 -24
- package/dist/core/ops/delete.js.map +1 -1
- package/dist/core/ops/reorder/index.js +43 -40
- package/dist/core/ops/reorder/index.js.map +1 -1
- package/dist/core/ops/reorder/setChildOrder.js +34 -0
- package/dist/core/ops/reorder/setChildOrder.js.map +1 -0
- package/dist/core/paintKinds.js +5 -5
- package/dist/core/paintKinds.js.map +1 -1
- package/dist/core/scene/NodeProperties.js.map +1 -1
- package/dist/core/scene/appliedLog.js +37 -0
- package/dist/core/scene/appliedLog.js.map +1 -0
- package/dist/core/scene/arrivalWindow.js +101 -0
- package/dist/core/scene/arrivalWindow.js.map +1 -0
- package/dist/core/scene/derivedPath.js.map +1 -1
- package/dist/core/scene/historyFacade.js +84 -0
- package/dist/core/scene/historyFacade.js.map +1 -0
- package/dist/core/scene/kitOps.js +173 -0
- package/dist/core/scene/kitOps.js.map +1 -0
- package/dist/core/scene/layerStack.js +38 -0
- package/dist/core/scene/layerStack.js.map +1 -0
- package/dist/core/scene/lockGuard.js +37 -0
- package/dist/core/scene/lockGuard.js.map +1 -0
- package/dist/core/scene/nodeFnFields.js +5 -6
- package/dist/core/scene/nodeFnFields.js.map +1 -1
- package/dist/core/scene/nodeMemo.js +45 -19
- package/dist/core/scene/nodeMemo.js.map +1 -1
- package/dist/core/scene/nodeStore.js +126 -0
- package/dist/core/scene/nodeStore.js.map +1 -0
- package/dist/core/scene/pickability.js +6 -0
- package/dist/core/scene/pickability.js.map +1 -0
- package/dist/core/scene/poseFeed.js +38 -38
- package/dist/core/scene/poseFeed.js.map +1 -1
- package/dist/core/scene/poseOverrides.js +34 -38
- package/dist/core/scene/poseOverrides.js.map +1 -1
- package/dist/core/scene/renderOrder.js +84 -0
- package/dist/core/scene/renderOrder.js.map +1 -0
- package/dist/core/scene/scene.js +289 -866
- package/dist/core/scene/scene.js.map +1 -1
- package/dist/core/scene/serialization.js +68 -0
- package/dist/core/scene/serialization.js.map +1 -0
- package/dist/core/scene/treeOrder.js +13 -0
- package/dist/core/scene/treeOrder.js.map +1 -0
- package/dist/core/scene/types.js.map +1 -1
- package/dist/core/viewport/meanScale.js +1 -1
- package/dist/core/viewport/meanScale.js.map +1 -1
- package/dist/core/viewport/view.js +12 -12
- package/dist/core/viewport/view.js.map +1 -1
- package/dist/core/viewport/zoomBounds.js +10 -8
- package/dist/core/viewport/zoomBounds.js.map +1 -1
- package/dist/{cornerHandles-BCrDp_mH.d.ts → cornerHandles-CtCb8a3G.d.ts} +1 -1
- package/dist/debug/createDebugOverlayLayer.js +14 -14
- package/dist/debug/createDebugOverlayLayer.js.map +1 -1
- package/dist/debug/flag.js +2 -41
- package/dist/features/chrome-caps/useHoverTracking.js +22 -17
- package/dist/features/chrome-caps/useHoverTracking.js.map +1 -1
- package/dist/features/focus/gateLayer.js +3 -4
- package/dist/features/focus/gateLayer.js.map +1 -1
- package/dist/features/images/imageCache.js +19 -9
- package/dist/features/images/imageCache.js.map +1 -1
- package/dist/features/ingestion/contentHandlers.js +14 -11
- package/dist/features/ingestion/contentHandlers.js.map +1 -1
- package/dist/features/ingestion/index.js +1 -1
- package/dist/features/ingestion/registerKitHandlers.js +7 -7
- package/dist/features/ingestion/weaselJsonHandler.js +17 -14
- package/dist/features/ingestion/weaselJsonHandler.js.map +1 -1
- package/dist/features/meshPaint/lazyKind.js +201 -35
- package/dist/features/meshPaint/lazyKind.js.map +1 -1
- package/dist/features/meshPaint/meshPaint.js +82 -79
- package/dist/features/meshPaint/meshPaint.js.map +1 -1
- package/dist/features/minimap/createMinimapContribution.js +42 -42
- package/dist/features/minimap/layers.js +44 -62
- package/dist/features/minimap/layers.js.map +1 -1
- package/dist/features/parallax/createParallaxPlane.js +10 -14
- package/dist/features/parallax/createParallaxPlane.js.map +1 -1
- package/dist/features/paths/anchorEdits.js +19 -8
- package/dist/features/paths/anchorEdits.js.map +1 -1
- package/dist/features/paths/anchors.js +31 -26
- package/dist/features/paths/anchors.js.map +1 -1
- package/dist/features/paths/booleans.js +2 -2
- package/dist/features/paths/index.js +13 -11
- package/dist/features/paths/markerCommands.js +37 -36
- package/dist/features/paths/markerCommands.js.map +1 -1
- package/dist/features/paths/pathInWorld.js +19 -19
- package/dist/features/paths/pathInWorld.js.map +1 -1
- package/dist/features/paths/pathLayer.js.map +1 -1
- package/dist/features/paths/strokeToPath.js +40 -0
- package/dist/features/paths/strokeToPath.js.map +1 -0
- package/dist/features/paths/tessellate/stroke.js.map +1 -1
- package/dist/features/patterns/commandPaint.js +18 -0
- package/dist/features/patterns/commandPaint.js.map +1 -0
- package/dist/features/patterns/index.js +5 -17
- package/dist/features/patterns/index.js.map +1 -1
- package/dist/features/patterns/rasterizeTile.js +17 -0
- package/dist/features/patterns/rasterizeTile.js.map +1 -0
- package/dist/features/patterns/resolveSpec.js +52 -44
- package/dist/features/patterns/resolveSpec.js.map +1 -1
- package/dist/features/poseRun/usePoseRun.js +8 -3
- package/dist/features/poseRun/usePoseRun.js.map +1 -1
- package/dist/features/selection/SelectionContext.js +5 -0
- package/dist/features/selection/SelectionContext.js.map +1 -1
- package/dist/features/selection/overlay.js +18 -18
- package/dist/features/selection/overlay.js.map +1 -1
- package/dist/features/text/domOffsets.js +82 -0
- package/dist/features/text/domOffsets.js.map +1 -0
- package/dist/features/text/domRuns.js +103 -131
- package/dist/features/text/domRuns.js.map +1 -1
- package/dist/features/text/hitTest.js +5 -2
- package/dist/features/text/hitTest.js.map +1 -1
- package/dist/features/text/isTextData.js +8 -0
- package/dist/features/text/isTextData.js.map +1 -0
- package/dist/features/text/overlayDirection.js +15 -0
- package/dist/features/text/overlayDirection.js.map +1 -0
- package/dist/features/text/runs/rangeStyle.js +32 -34
- package/dist/features/text/runs/rangeStyle.js.map +1 -1
- package/dist/features/text/textCommand.js +34 -33
- package/dist/features/text/textCommand.js.map +1 -1
- package/dist/features/text/textToPath.js +40 -40
- package/dist/features/text/textToPath.js.map +1 -1
- package/dist/features/text/useSceneTextEdit.js +76 -82
- package/dist/features/text/useSceneTextEdit.js.map +1 -1
- package/dist/features/text/useTextEdit.js +184 -160
- package/dist/features/text/useTextEdit.js.map +1 -1
- package/dist/features/tiling/createTiledLayer.js +24 -22
- package/dist/features/tiling/createTiledLayer.js.map +1 -1
- package/dist/index.d.ts +11033 -7749
- package/dist/index.js +316 -309
- package/dist/input/keyState.js +42 -43
- package/dist/input/keyState.js.map +1 -1
- package/dist/input/useKeyModifiers.js +11 -0
- package/dist/input/useKeyModifiers.js.map +1 -0
- package/dist/interactions/actions/align/align.js +8 -8
- package/dist/interactions/actions/clipboard/clipboardOps.js +34 -32
- package/dist/interactions/actions/clipboard/clipboardOps.js.map +1 -1
- package/dist/interactions/actions/clipboard/materializePaste.js +10 -7
- package/dist/interactions/actions/clipboard/materializePaste.js.map +1 -1
- package/dist/interactions/actions/clipboard/wireFormat.js.map +1 -1
- package/dist/interactions/actions/clone/behaviors/cloneByAltDrag.js.map +1 -1
- package/dist/interactions/actions/defaultCommitAdapter.js +20 -18
- package/dist/interactions/actions/defaultCommitAdapter.js.map +1 -1
- package/dist/interactions/actions/defaults/align.js +9 -10
- package/dist/interactions/actions/defaults/align.js.map +1 -1
- package/dist/interactions/actions/defaults/anchorEditing.js +59 -81
- package/dist/interactions/actions/defaults/anchorEditing.js.map +1 -1
- package/dist/interactions/actions/defaults/areaSelect.js +35 -38
- package/dist/interactions/actions/defaults/areaSelect.js.map +1 -1
- package/dist/interactions/actions/defaults/clipboard.js +26 -10
- package/dist/interactions/actions/defaults/clipboard.js.map +1 -1
- package/dist/interactions/actions/defaults/clone.js +44 -60
- package/dist/interactions/actions/defaults/clone.js.map +1 -1
- package/dist/interactions/actions/defaults/copySubtree.js +40 -0
- package/dist/interactions/actions/defaults/copySubtree.js.map +1 -0
- package/dist/interactions/actions/defaults/distribute.js +14 -13
- package/dist/interactions/actions/defaults/distribute.js.map +1 -1
- package/dist/interactions/actions/defaults/duplicate.js +17 -57
- package/dist/interactions/actions/defaults/duplicate.js.map +1 -1
- package/dist/interactions/actions/defaults/editAnchors.js +18 -18
- package/dist/interactions/actions/defaults/enterTextEdit.js.map +1 -1
- package/dist/interactions/actions/defaults/flip.js +52 -46
- package/dist/interactions/actions/defaults/flip.js.map +1 -1
- package/dist/interactions/actions/defaults/group.js +43 -48
- package/dist/interactions/actions/defaults/group.js.map +1 -1
- package/dist/interactions/actions/defaults/ingest.js +35 -33
- package/dist/interactions/actions/defaults/ingest.js.map +1 -1
- package/dist/interactions/actions/defaults/insert.js +50 -51
- package/dist/interactions/actions/defaults/insert.js.map +1 -1
- package/dist/interactions/actions/defaults/insertPathAnchor.js +7 -7
- package/dist/interactions/actions/defaults/lassoSelect.js +67 -70
- package/dist/interactions/actions/defaults/lassoSelect.js.map +1 -1
- package/dist/interactions/actions/defaults/move.js +267 -249
- package/dist/interactions/actions/defaults/move.js.map +1 -1
- package/dist/interactions/actions/defaults/nudge.js +40 -68
- package/dist/interactions/actions/defaults/nudge.js.map +1 -1
- package/dist/interactions/actions/defaults/nudgeSteps.js +37 -0
- package/dist/interactions/actions/defaults/nudgeSteps.js.map +1 -0
- package/dist/interactions/actions/defaults/reorder.js +2 -0
- package/dist/interactions/actions/defaults/reorder.js.map +1 -1
- package/dist/interactions/actions/defaults/resize.js +104 -98
- package/dist/interactions/actions/defaults/resize.js.map +1 -1
- package/dist/interactions/actions/defaults/rotate.js +111 -110
- package/dist/interactions/actions/defaults/rotate.js.map +1 -1
- package/dist/interactions/actions/defaults/setFill.js +7 -7
- package/dist/interactions/actions/defaults/setFillOpacity.js +4 -4
- package/dist/interactions/actions/defaults/setStroke.js +12 -12
- package/dist/interactions/actions/defaults/setStrokeOpacity.js +6 -6
- package/dist/interactions/actions/defaults/sliceOps.js +19 -19
- package/dist/interactions/actions/defaults/viewportDragPan.js +37 -26
- package/dist/interactions/actions/defaults/viewportDragPan.js.map +1 -1
- package/dist/interactions/actions/edit-anchors/geometry.js +28 -23
- package/dist/interactions/actions/edit-anchors/geometry.js.map +1 -1
- package/dist/interactions/actions/flip/helpers.js +30 -17
- package/dist/interactions/actions/flip/helpers.js.map +1 -1
- package/dist/interactions/actions/hitSelection.js +8 -0
- package/dist/interactions/actions/hitSelection.js.map +1 -0
- package/dist/interactions/actions/lasso-select/behaviors/selectFromLasso.js +14 -18
- package/dist/interactions/actions/lasso-select/behaviors/selectFromLasso.js.map +1 -1
- package/dist/interactions/actions/move/behaviors/snapBackOrDelete.js +5 -5
- package/dist/interactions/actions/move/behaviors/snapBackOrDelete.js.map +1 -1
- package/dist/interactions/actions/move/behaviors/snapToContainer.js +32 -21
- package/dist/interactions/actions/move/behaviors/snapToContainer.js.map +1 -1
- package/dist/interactions/actions/move/gestureAdapter.js +32 -15
- package/dist/interactions/actions/move/gestureAdapter.js.map +1 -1
- package/dist/interactions/actions/move/landedDescendants.js +33 -0
- package/dist/interactions/actions/move/landedDescendants.js.map +1 -0
- package/dist/interactions/actions/outlines/createOutlines.js +18 -18
- package/dist/interactions/actions/poseDescriptorDep.js +16 -4
- package/dist/interactions/actions/poseDescriptorDep.js.map +1 -1
- package/dist/interactions/actions/poseFrame.js +11 -6
- package/dist/interactions/actions/poseFrame.js.map +1 -1
- package/dist/interactions/actions/previewOverrides.js +5 -5
- package/dist/interactions/actions/previewOverrides.js.map +1 -1
- package/dist/interactions/actions/selectionSubtree.js +69 -0
- package/dist/interactions/actions/selectionSubtree.js.map +1 -0
- package/dist/interactions/actions/useStandardActions.js +66 -62
- package/dist/interactions/actions/useStandardActions.js.map +1 -1
- package/dist/interactions/gestures/dragGesture/dragGesture.js +4 -7
- package/dist/interactions/gestures/dragGesture/dragGesture.js.map +1 -1
- package/dist/interactions/gestures/dragGesture/dragPointOf.js +23 -0
- package/dist/interactions/gestures/dragGesture/dragPointOf.js.map +1 -0
- package/dist/interactions/gestures/handleDrag/handleDrag.js +21 -26
- package/dist/interactions/gestures/handleDrag/handleDrag.js.map +1 -1
- package/dist/interactions/gestures/pointerDrag/pointerDrag.js +8 -6
- package/dist/interactions/gestures/pointerDrag/pointerDrag.js.map +1 -1
- package/dist/interactions/gestures/thresholdDrag/thresholdDrag.js +8 -4
- package/dist/interactions/gestures/thresholdDrag/thresholdDrag.js.map +1 -1
- package/dist/{math-Drrw4ewZ.d.ts → math-J-ACHyEg.d.ts} +1 -2
- package/dist/math.d.ts +2 -3
- package/dist/move.d.ts +12 -11
- package/dist/{originProjection-DEklpDc_.d.ts → originProjection-gHnOup4e.d.ts} +1 -1
- package/dist/{registerProgram-BMZRDgrh.d.ts → registerProgram-T9S_PfAX.d.ts} +18 -7
- package/dist/renderer/DrawCommand.js.map +1 -1
- package/dist/renderer/WeaselRenderer.js +75 -73
- package/dist/renderer/WeaselRenderer.js.map +1 -1
- package/dist/renderer/cache/GLImageCache.js +15 -5
- package/dist/renderer/cache/GLImageCache.js.map +1 -1
- package/dist/renderer/cache/GLMeshCache.js +23 -23
- package/dist/renderer/cache/GLMeshCache.js.map +1 -1
- package/dist/renderer/cache/GLTextureCache.js +18 -1
- package/dist/renderer/cache/GLTextureCache.js.map +1 -1
- package/dist/renderer/cache/cache.js.map +1 -1
- package/dist/renderer/cache/markerCommandCache.js.map +1 -1
- package/dist/renderer/cache/strokeMeshCache.js.map +1 -1
- package/dist/renderer/cullDrawCommands.js +11 -11
- package/dist/renderer/draw/batch.js +133 -0
- package/dist/renderer/draw/batch.js.map +1 -0
- package/dist/renderer/draw/clip.js +89 -0
- package/dist/renderer/draw/clip.js.map +1 -0
- package/dist/renderer/draw/customShader.js +230 -0
- package/dist/renderer/draw/customShader.js.map +1 -0
- package/dist/renderer/draw/drawTriangles.js +8 -0
- package/dist/renderer/draw/drawTriangles.js.map +1 -0
- package/dist/renderer/draw/effects.js +28 -0
- package/dist/renderer/draw/effects.js.map +1 -0
- package/dist/renderer/draw/flushBatch.js +35 -0
- package/dist/renderer/draw/flushBatch.js.map +1 -0
- package/dist/renderer/draw/gradient.js +90 -0
- package/dist/renderer/draw/gradient.js.map +1 -0
- package/dist/renderer/draw/image.js +38 -0
- package/dist/renderer/draw/image.js.map +1 -0
- package/dist/renderer/draw/mesh.js +16 -0
- package/dist/renderer/draw/mesh.js.map +1 -0
- package/dist/renderer/draw/paintBind.js +70 -0
- package/dist/renderer/draw/paintBind.js.map +1 -0
- package/dist/renderer/draw/pathPaint.js +142 -0
- package/dist/renderer/draw/pathPaint.js.map +1 -0
- package/dist/renderer/draw/scratchPass.js +83 -0
- package/dist/renderer/draw/scratchPass.js.map +1 -0
- package/dist/renderer/draw/stencil.js +28 -0
- package/dist/renderer/draw/stencil.js.map +1 -0
- package/dist/renderer/draw/text.js +167 -0
- package/dist/renderer/draw/text.js.map +1 -0
- package/dist/renderer/draw/uniforms.js +77 -0
- package/dist/renderer/draw/uniforms.js.map +1 -0
- package/dist/renderer/draw.js +60 -1116
- package/dist/renderer/draw.js.map +1 -1
- package/dist/renderer/effects/EffectTargets.js +3 -0
- package/dist/renderer/effects/EffectTargets.js.map +1 -1
- package/dist/renderer/effects/composite.js +7 -5
- package/dist/renderer/effects/composite.js.map +1 -1
- package/dist/renderer/index.js +18 -17
- package/dist/renderer/math/color.js +63 -83
- package/dist/renderer/math/color.js.map +1 -1
- package/dist/renderer/math/mat3.js +15 -11
- package/dist/renderer/math/mat3.js.map +1 -1
- package/dist/renderer/math/viewToMat3.js +1 -1
- package/dist/renderer/math/viewToMat3.js.map +1 -1
- package/dist/renderer/shaders/ShaderProgram.js +13 -13
- package/dist/renderer/shaders/ShaderProgram.js.map +1 -1
- package/dist/renderer/shaders/glyphPaint.js +3 -3
- package/dist/renderer/shaders/glyphPaint.js.map +1 -1
- package/dist/renderer/shaders/gradFill.js +2 -1
- package/dist/renderer/shaders/gradFill.js.map +1 -1
- package/dist/renderer/shaders/pathFill.js +2 -1
- package/dist/renderer/shaders/pathFill.js.map +1 -1
- package/dist/renderer/shaders/patternFill.js +2 -1
- package/dist/renderer/shaders/patternFill.js.map +1 -1
- package/dist/renderer/shaders/registerProgram.js.map +1 -1
- package/dist/renderer/strokeLengths.js.map +1 -1
- package/dist/renderer/textures/registerTexture.js +25 -5
- package/dist/renderer/textures/registerTexture.js.map +1 -1
- package/dist/renderer.d.ts +16 -15
- package/dist/renderer.js +17 -16
- package/dist/resize.d.ts +5 -6
- package/dist/resize.js +5 -5
- package/dist/style.css +1 -1
- package/dist/test-hook/install.js +12 -6
- package/dist/test-hook/install.js.map +1 -1
- package/dist/{test-seams-CuIxe0xY.d.ts → test-seams-DM2B87-g.d.ts} +4 -4
- package/dist/test-seams.d.ts +2 -2
- package/dist/tools/builtin/ellipse/useEllipseTool.js +1 -0
- package/dist/tools/builtin/ellipse/useEllipseTool.js.map +1 -1
- package/dist/tools/builtin/hand/useHandTool.js +1 -0
- package/dist/tools/builtin/hand/useHandTool.js.map +1 -1
- package/dist/tools/builtin/lasso/useLassoTool.js +11 -11
- package/dist/tools/builtin/lasso/useLassoTool.js.map +1 -1
- package/dist/tools/builtin/line/useLineTool.js +1 -0
- package/dist/tools/builtin/line/useLineTool.js.map +1 -1
- package/dist/tools/builtin/pen/usePenTool.js +153 -103
- package/dist/tools/builtin/pen/usePenTool.js.map +1 -1
- package/dist/tools/builtin/pencil/usePencilTool.js +1 -0
- package/dist/tools/builtin/pencil/usePencilTool.js.map +1 -1
- package/dist/tools/builtin/polygon/usePolygonTool.js +13 -8
- package/dist/tools/builtin/polygon/usePolygonTool.js.map +1 -1
- package/dist/tools/builtin/rect/useRectTool.js +1 -0
- package/dist/tools/builtin/rect/useRectTool.js.map +1 -1
- package/dist/tools/builtin/select/selectionContributions.js +24 -23
- package/dist/tools/builtin/select/selectionContributions.js.map +1 -1
- package/dist/tools/builtin/select/useSelectTool.js +51 -48
- package/dist/tools/builtin/select/useSelectTool.js.map +1 -1
- package/dist/tools/builtin/shared/pointerFollower.js +17 -0
- package/dist/tools/builtin/shared/pointerFollower.js.map +1 -0
- package/dist/tools/builtin/slice/useSliceTool.js +49 -54
- package/dist/tools/builtin/slice/useSliceTool.js.map +1 -1
- package/dist/tools/builtin/star/useStarTool.js +22 -16
- package/dist/tools/builtin/star/useStarTool.js.map +1 -1
- package/dist/tools/builtin/text/useTextTool.js +1 -0
- package/dist/tools/builtin/text/useTextTool.js.map +1 -1
- package/dist/tools/useKeybindings.js +14 -30
- package/dist/tools/useKeybindings.js.map +1 -1
- package/dist/{types-B_9g6hMM.d.ts → types-B4iJRHC3.d.ts} +5 -1
- package/dist/{types-A37hYkeR.d.ts → types-k-5Oqh-U.d.ts} +31 -7
- package/dist/util/color.js +3 -3
- package/dist/util/color.js.map +1 -1
- package/dist/util/paint.js.map +1 -1
- package/dist/version.js +1 -1
- package/package.json +20 -18
- package/dist/autoPoseDescriptor-vCdt55xm.d.ts +0 -27
- package/dist/builtins-C-VgUlWI.d.ts +0 -4514
- package/dist/core/isPlainObject.js.map +0 -1
- package/dist/debug/flag.js.map +0 -1
- package/dist/interactions/actions/defaults/freshNodeId.js +0 -10
- package/dist/interactions/actions/defaults/freshNodeId.js.map +0 -1
- package/dist/renderer/shaders/imageFill.js +0 -14
- package/dist/renderer/shaders/imageFill.js.map +0 -1
- package/dist/tools/prefs.js +0 -62
- package/dist/tools/prefs.js.map +0 -1
|
@@ -1,10 +1,11 @@
|
|
|
1
1
|
import { gestureViewReader as e } from "../../gestures/shared/screenTolerance.js";
|
|
2
2
|
import { reduceBehaviorEnd as t, runBehaviorCancel as n } from "../gestureLifecycle.js";
|
|
3
|
-
import {
|
|
4
|
-
import {
|
|
5
|
-
import {
|
|
3
|
+
import { selectionFromHits as r } from "../hitSelection.js";
|
|
4
|
+
import { applyOpsTo as i } from "../../../core/applyOps.js";
|
|
5
|
+
import { LASSO_VERTICES as a } from "../lasso-select/behaviors/selectFromLasso.js";
|
|
6
|
+
import { resolveParams as o, setScratch as s } from "@weasel-js/routing";
|
|
6
7
|
//#region src/interactions/actions/defaults/lassoSelect.ts
|
|
7
|
-
function
|
|
8
|
+
function c(e) {
|
|
8
9
|
if (e.length === 0) return null;
|
|
9
10
|
let t = e[0].x, n = e[0].y, r = e[0].x, i = e[0].y;
|
|
10
11
|
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);
|
|
@@ -15,135 +16,131 @@ function s(e) {
|
|
|
15
16
|
height: i - n
|
|
16
17
|
};
|
|
17
18
|
}
|
|
18
|
-
function
|
|
19
|
+
function l(e, t, n, r) {
|
|
19
20
|
if (e.hitTestLasso) return e.hitTestLasso(t, n, r);
|
|
20
|
-
let i =
|
|
21
|
+
let i = c(t);
|
|
21
22
|
return i ? e.hitTestArea(i, r) : [];
|
|
22
23
|
}
|
|
23
|
-
function
|
|
24
|
+
function u(e, t) {
|
|
24
25
|
let n = {
|
|
25
26
|
getSelection: () => e.getSelection(),
|
|
26
27
|
setSelection: (t) => e.setSelection(t),
|
|
27
28
|
hitTestArea: (n) => e.hitTestArea(n, t),
|
|
28
|
-
hitTestLasso: (n, r) =>
|
|
29
|
-
applyOps: (e) =>
|
|
29
|
+
hitTestLasso: (n, r) => l(e, n, r, t),
|
|
30
|
+
applyOps: (e) => i(n, e)
|
|
30
31
|
};
|
|
31
32
|
return n;
|
|
32
33
|
}
|
|
33
|
-
var
|
|
34
|
+
var d = 2, f = {
|
|
34
35
|
id: "lassoSelect",
|
|
35
36
|
label: "Lasso Select",
|
|
36
37
|
eligible: { capability: "creates-selection" },
|
|
37
38
|
requires: ["lassoSelect", "view"],
|
|
38
39
|
invoker: {
|
|
39
40
|
timing: "ongoing",
|
|
40
|
-
start(
|
|
41
|
-
let
|
|
42
|
-
if (!
|
|
43
|
-
let
|
|
44
|
-
x:
|
|
45
|
-
y:
|
|
46
|
-
}],
|
|
47
|
-
if (
|
|
41
|
+
start(i, c) {
|
|
42
|
+
let f = i.deps.lassoSelect;
|
|
43
|
+
if (!f) return {};
|
|
44
|
+
let p = o(c?.params), m = i.deps.view, h = [{
|
|
45
|
+
x: i.world.x,
|
|
46
|
+
y: i.world.y
|
|
47
|
+
}], g = c?.behaviors ?? [], _ = null, v = e(i.deps);
|
|
48
|
+
if (g.length > 0) {
|
|
48
49
|
let e = {
|
|
49
|
-
worldX:
|
|
50
|
-
worldY:
|
|
51
|
-
shiftHeld:
|
|
50
|
+
worldX: i.world.x,
|
|
51
|
+
worldY: i.world.y,
|
|
52
|
+
shiftHeld: i.modifiers.shift
|
|
52
53
|
};
|
|
53
|
-
|
|
54
|
+
_ = {
|
|
54
55
|
draggedIds: ["gesture"],
|
|
55
56
|
origin: /* @__PURE__ */ new Map([["gesture", e]]),
|
|
56
57
|
current: /* @__PURE__ */ new Map([["gesture", { ...e }]]),
|
|
57
58
|
snap: null,
|
|
58
|
-
modifiers: { ...
|
|
59
|
+
modifiers: { ...i.modifiers },
|
|
59
60
|
pointer: {
|
|
60
|
-
worldX:
|
|
61
|
-
worldY:
|
|
61
|
+
worldX: i.world.x,
|
|
62
|
+
worldY: i.world.y,
|
|
62
63
|
clientX: 0,
|
|
63
64
|
clientY: 0
|
|
64
65
|
},
|
|
65
|
-
view:
|
|
66
|
-
adapter:
|
|
66
|
+
view: v(),
|
|
67
|
+
adapter: u(f, m),
|
|
67
68
|
scratch: {}
|
|
68
|
-
},
|
|
69
|
-
for (let e of
|
|
69
|
+
}, s(_.scratch, a, h);
|
|
70
|
+
for (let e of g) e.onStart?.(_);
|
|
70
71
|
}
|
|
71
|
-
let
|
|
72
|
-
dep:
|
|
73
|
-
mode:
|
|
74
|
-
minVertexSpacing:
|
|
75
|
-
view:
|
|
76
|
-
vertices:
|
|
77
|
-
shiftHeld:
|
|
78
|
-
currentX:
|
|
79
|
-
currentY:
|
|
72
|
+
let y = {
|
|
73
|
+
dep: f,
|
|
74
|
+
mode: p?.mode ?? "intersect",
|
|
75
|
+
minVertexSpacing: p?.minVertexSpacing ?? d,
|
|
76
|
+
view: m,
|
|
77
|
+
vertices: h,
|
|
78
|
+
shiftHeld: i.modifiers.shift,
|
|
79
|
+
currentX: i.world.x,
|
|
80
|
+
currentY: i.world.y,
|
|
80
81
|
open: !0,
|
|
81
|
-
behaviors:
|
|
82
|
-
gesture:
|
|
82
|
+
behaviors: g,
|
|
83
|
+
gesture: _
|
|
83
84
|
};
|
|
84
85
|
return {
|
|
85
86
|
kind: "lasso",
|
|
86
87
|
onMove(e) {
|
|
87
88
|
let { x: t, y: n } = e.world;
|
|
88
|
-
|
|
89
|
-
let r =
|
|
90
|
-
i * i + a * a >= o * o &&
|
|
89
|
+
y.currentX = t, y.currentY = n;
|
|
90
|
+
let r = y.vertices[y.vertices.length - 1], i = t - r.x, a = n - r.y, o = y.minVertexSpacing;
|
|
91
|
+
i * i + a * a >= o * o && y.vertices.push({
|
|
91
92
|
x: t,
|
|
92
93
|
y: n
|
|
93
94
|
});
|
|
94
|
-
let s =
|
|
95
|
+
let s = y.gesture;
|
|
95
96
|
if (s) {
|
|
96
97
|
s.modifiers = { ...e.modifiers }, s.pointer = {
|
|
97
98
|
worldX: t,
|
|
98
99
|
worldY: n,
|
|
99
100
|
clientX: 0,
|
|
100
101
|
clientY: 0
|
|
101
|
-
}, s.view =
|
|
102
|
+
}, s.view = v(), s.current.set("gesture", {
|
|
102
103
|
worldX: t,
|
|
103
104
|
worldY: n,
|
|
104
|
-
shiftHeld:
|
|
105
|
+
shiftHeld: y.shiftHeld
|
|
105
106
|
});
|
|
106
107
|
let r = {
|
|
107
|
-
vertices:
|
|
108
|
-
shiftHeld:
|
|
108
|
+
vertices: y.vertices,
|
|
109
|
+
shiftHeld: y.shiftHeld
|
|
109
110
|
};
|
|
110
|
-
for (let e of
|
|
111
|
+
for (let e of y.behaviors) e.onMove?.(s, r);
|
|
111
112
|
}
|
|
112
113
|
},
|
|
113
114
|
overlay() {
|
|
114
|
-
return
|
|
115
|
+
return y.open ? {
|
|
115
116
|
kind: "lasso",
|
|
116
|
-
vertices:
|
|
117
|
+
vertices: y.vertices,
|
|
117
118
|
current: {
|
|
118
|
-
x:
|
|
119
|
-
y:
|
|
119
|
+
x: y.currentX,
|
|
120
|
+
y: y.currentY
|
|
120
121
|
},
|
|
121
|
-
shiftHeld:
|
|
122
|
+
shiftHeld: y.shiftHeld
|
|
122
123
|
} : null;
|
|
123
124
|
},
|
|
124
|
-
onEnd(e,
|
|
125
|
-
if (
|
|
126
|
-
|
|
125
|
+
onEnd(e, i) {
|
|
126
|
+
if (y.open = !1, i === "cancel") {
|
|
127
|
+
y.gesture && n(y.behaviors, y.gesture);
|
|
127
128
|
return;
|
|
128
129
|
}
|
|
129
|
-
let { dep:
|
|
130
|
-
if (
|
|
131
|
-
let e = t(
|
|
130
|
+
let { dep: a, mode: o, view: s, vertices: c, shiftHeld: u, gesture: d } = y;
|
|
131
|
+
if (d) {
|
|
132
|
+
let e = t(y.behaviors, d);
|
|
132
133
|
if (e !== void 0) {
|
|
133
|
-
e !== null &&
|
|
134
|
+
e !== null && d.adapter.applyOps(e);
|
|
134
135
|
return;
|
|
135
136
|
}
|
|
136
137
|
}
|
|
137
|
-
if (
|
|
138
|
-
|
|
138
|
+
if (c.length < 3) {
|
|
139
|
+
u || a.setSelection([]);
|
|
139
140
|
return;
|
|
140
141
|
}
|
|
141
|
-
let
|
|
142
|
-
|
|
143
|
-
let e = [...i.getSelection()];
|
|
144
|
-
for (let t of d) e.includes(t) || e.push(t);
|
|
145
|
-
i.setSelection(e);
|
|
146
|
-
} else i.setSelection(d);
|
|
142
|
+
let f = l(a, c, o, s);
|
|
143
|
+
a.setSelection(r(a.getSelection(), f, u));
|
|
147
144
|
}
|
|
148
145
|
};
|
|
149
146
|
}
|
|
@@ -151,6 +148,6 @@ var u = 2, d = {
|
|
|
151
148
|
enabled: () => !0
|
|
152
149
|
};
|
|
153
150
|
//#endregion
|
|
154
|
-
export {
|
|
151
|
+
export { f as lassoSelectAction };
|
|
155
152
|
|
|
156
153
|
//# sourceMappingURL=lassoSelect.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"lassoSelect.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","setScratch","LASSO_VERTICES","b","scratch","moveCtx","x","y","last","dx","dy","min","g","proposed","reason","runBehaviorCancel","d","r","reduceBehaviorEnd","shiftHeld","hits","merged","id"],"sources":["../../../../src/interactions/actions/defaults/lassoSelect.ts"],"sourcesContent":["/**\n * `lassoSelectAction` — ongoing Action descriptor for polygon lasso selection.\n *\n * ## Status: REAL\n *\n * Implements lasso-select via the full pointermove stream (accumulated in\n * `InvocationCtx.drag.points` by the dispatcher extension):\n * - `start`: initializes vertex list from the drag-start world point.\n * - `onMove`: appends the current world point, skipping one closer than\n * the binding's `params.minVertexSpacing` (default 2 world-px) to the\n * last vertex.\n * - `onEnd('commit')`: performs hit-testing against the accumulated polygon.\n * Uses `dep.hitTestLasso(polygon, mode)` when available — `mode` from the\n * binding's `params.mode`, default `'intersect'` — otherwise falls back to\n * the polygon's AABB via `dep.hitTestArea(bounds)`.\n * Extends selection with shift, replaces otherwise.\n * - `onEnd('cancel')`: no-op.\n *\n * ## Behaviors\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.\n *\n * ## Dep\n *\n * Requires `lassoSelect` dep from DepSchema:\n * `{ hitTestLasso?(...), hitTestArea(...), getSelection(), setSelection(ids) }`\n *\n * ## What this does NOT wire\n *\n * - Committed history — always transient (no undo entry); a behavior's ops\n * are applied the same way.\n * - Debug sink recording.\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 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 '../lasso-select/behaviors/selectFromLasso';\nimport { reduceBehaviorEnd, runBehaviorCancel } from '../gestureLifecycle';\n\n// ---------------------------------------------------------------------------\n// Internal helpers\n// ---------------------------------------------------------------------------\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\n// ---------------------------------------------------------------------------\n// Internal scratch\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// Descriptor\n// ---------------------------------------------------------------------------\n\n/**\n * @experimental\n * Static descriptor for the `lassoSelect` Action.\n *\n * Requires dep-schema entry: `lassoSelect`.\n *\n * The invoker accumulates pointermove vertices via `InvocationCtx.drag.points`\n * (dispatcher extension) and commits a polygon hit-test at drag end.\n *\n * @see useLassoSelect — the React hook this descriptor mirrors for the default case.\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: { worldX: ctx.world.x, worldY: ctx.world.y, clientX: 0, clientY: 0 },\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 = { worldX: x, worldY: y, clientX: 0, clientY: 0 };\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 scratch.open = false;\n if (reason === 'cancel') {\n if (scratch.gesture) runBehaviorCancel(scratch.behaviors, scratch.gesture);\n return;\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;\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;\n }\n\n const hits = hitTestPolygon(d, vertices, mode, view);\n\n if (shiftHeld) {\n // Extend: merge current + hits (deduplicated).\n const current = d.getSelection();\n const merged = [...current];\n for (const id of hits) {\n if (!merged.includes(id)) merged.push(id);\n }\n d.setSelection(merged);\n } else {\n d.setSelection(hits);\n }\n },\n };\n },\n },\n enabled: () => true,\n};\n"],"mappings":";;;;;;AAuDA,SAASA,EACP,GACgE;CAChE,IAAIC,EAAI,WAAW,GAAG,OAAO;CAC7B,IAAIC,IAAOD,EAAI,EAAE,CAAC,GAAGE,IAAOF,EAAI,EAAE,CAAC,GAAGG,IAAOH,EAAI,EAAE,CAAC,GAAGI,IAAOJ,EAAI,EAAE,CAAC;CACrE,KAAK,IAAMK,KAAKL,GAId,AAHIK,EAAE,IAAIJ,MAAM,IAAOI,EAAE,IACrBA,EAAE,IAAIH,MAAM,IAAOG,EAAE,IACrBA,EAAE,IAAIF,MAAM,IAAOE,EAAE,IACrBA,EAAE,IAAID,MAAM,IAAOC,EAAE;CAE3B,OAAO;EAAE,GAAGJ;EAAM,GAAGC;EAAM,OAAOC,IAAOF;EAAM,QAAQG,IAAOF;CAAK;AACrE;AAIA,SAASI,EACP,GACA,GACA,GACA,GACU;CACV,IAAIC,EAAI,cAAc,OAAOA,EAAI,aAAaC,GAAUC,GAAMC,CAAI;CAClE,IAAMC,IAAOZ,EAAYS,CAAoB;CAC7C,OAAOG,IAAOJ,EAAI,YAAYI,GAAMD,CAAI,IAAI,CAAC;AAC/C;AAIA,SAASE,EAAgB,GAAqB,GAA+C;CAC3F,IAAMC,IAA8B;EAClC,oBAAoBN,EAAI,aAAa;EACrC,eAAe,MAAQA,EAAI,aAAaO,CAAG;EAC3C,cAAc,MAASP,EAAI,YAAYQ,GAAML,CAAI;EACjD,eAAe,GAAS,MAASJ,EAAeC,GAAKS,GAASP,GAAMC,CAAI;EACxE,WAAW,MAAcO,EAAWJ,GAASK,CAAG;CAClD;CACA,OAAOL;AACT;AAMA,IAAMM,IAA6B,GAqCtBC,IAAqD;CAChE,IAAI;CACJ,OAAO;CACP,UAAU,EAAE,YAAY,oBAAoB;CAC5C,UAAU,CAAC,eAAe,MAAM;CAChC,SAAS;EACP,QAAQ;EACR,MAAM,GAAoB,GAAqB;GAC7C,IAAMb,IAAMc,EAAI,KAAK;GACrB,IAAI,CAACd,GAAK,OAAO,CAAC;GAElB,IAAMe,IAASC,EAAcC,GAAM,MAAM,GAEnCd,IAAOW,EAAI,KAAK,MAChBb,IAAqB,CAAC;IAAE,GAAGa,EAAI,MAAM;IAAG,GAAGA,EAAI,MAAM;GAAE,CAAC,GACxDI,IAAaD,GAAM,aAAa,CAAC,GACnCE,IAAkD,MAChDC,IAAWC,EAAkBP,EAAI,IAAI;GAC3C,IAAII,EAAU,SAAS,GAAG;IACxB,IAAMI,IAAwB;KAC5B,QAAQR,EAAI,MAAM;KAAG,QAAQA,EAAI,MAAM;KAAG,WAAWA,EAAI,UAAU;IACrE;IAaA,AAZA,IAAU;KACR,YAAY,CAAC,SAAS;KACtB,wBAAQ,IAAI,IAAI,CAAC,CAAC,WAAWQ,CAAI,CAAC,CAAC;KACnC,yBAAS,IAAI,IAAI,CAAC,CAAC,WAAW,EAAE,GAAGA,EAAK,CAAC,CAAC,CAAC;KAC3C,MAAM;KACN,WAAW,EAAE,GAAGR,EAAI,UAAU;KAC9B,SAAS;MAAE,QAAQA,EAAI,MAAM;MAAG,QAAQA,EAAI,MAAM;MAAG,SAAS;MAAG,SAAS;KAAE;KAC5E,MAAMM,EAAS;KACf,SAASf,EAAgBL,GAAKG,CAAI;KAClC,SAAS,CAAC;IACZ,GAEAoB,EAAWJ,EAAQ,SAASK,GAAgBvB,CAAQ;IACpD,KAAK,IAAMwB,KAAKP,GAAW,EAAE,UAAUC,CAAO;GAChD;GACA,IAAMO,IAAwB;IAC5B;IACA,MAAMX,GAAQ,QAAQ;IACtB,kBAAkBA,GAAQ,oBAAoBH;IAC9C;IACA;IACA,WAAWE,EAAI,UAAU;IACzB,UAAUA,EAAI,MAAM;IACpB,UAAUA,EAAI,MAAM;IACpB,MAAM;IACN;IACA;GACF;GAEA,OAAO;IACL,MAAM;IACN,OAAO,GAA8B;KACnC,IAAM,EAAE,MAAG,SAAMa,EAAQ;KAEzB,AADA,EAAQ,WAAWC,GACnB,EAAQ,WAAWC;KACnB,IAAMC,IAAOJ,EAAQ,SAASA,EAAQ,SAAS,SAAS,IAClDK,IAAKH,IAAIE,EAAK,GACdE,IAAKH,IAAIC,EAAK,GACdG,IAAMP,EAAQ;KACpB,AAAIK,IAAKA,IAAKC,IAAKA,KAAMC,IAAMA,KAC7BP,EAAQ,SAAS,KAAK;MAAE;MAAG;KAAE,CAAC;KAEhC,IAAMQ,IAAIR,EAAQ;KAClB,IAAIQ,GAAG;MAIL,AAHA,EAAE,YAAY,EAAE,GAAGP,EAAQ,UAAU,GACrC,EAAE,UAAU;OAAE,QAAQC;OAAG,QAAQC;OAAG,SAAS;OAAG,SAAS;MAAE,GAC3D,EAAE,OAAOT,EAAS,GAClBc,EAAE,QAAQ,IAAI,WAAW;OAAE,QAAQN;OAAG,QAAQC;OAAG,WAAWH,EAAQ;MAAU,CAAC;MAC/E,IAAMS,IAAW;OAAE,UAAUT,EAAQ;OAAU,WAAWA,EAAQ;MAAU;MAC5E,KAAK,IAAMD,KAAKC,EAAQ,WAAW,EAAE,SAASQ,GAAGC,CAAQ;KAC3D;IACF;IACA,UAAiC;KAE/B,OADKT,EAAQ,OACN;MACL,MAAM;MACN,UAAUA,EAAQ;MAClB,SAAS;OAAE,GAAGA,EAAQ;OAAU,GAAGA,EAAQ;MAAS;MACpD,WAAWA,EAAQ;KACrB,IAN0B;IAO5B;IACA,MAAM,GAAwB,GAAmC;KAE/D,IADA,EAAQ,OAAO,IACXU,MAAW,UAAU;MACvB,AAAIV,EAAQ,WAASW,EAAkBX,EAAQ,WAAWA,EAAQ,OAAO;MACzE;KACF;KAEA,IAAM,EAAE,KAAKY,GAAG,SAAM,SAAM,aAAU,cAAW,SAASJ,MAAMR;KAEhE,IAAIQ,GAAG;MACL,IAAMK,IAAIC,EAAkBd,EAAQ,WAAWQ,CAAC;MAChD,IAAIK,MAAM,KAAA,GAAW;OACnB,AAAIA,MAAM,QAAML,EAAG,QAA0C,SAAUK,CAAC;OACxE;MACF;KACF;KAGA,IAAItC,EAAS,SAAS,GAAG;MACvB,AAAKwC,KAAWH,EAAE,aAAa,CAAC,CAAC;MACjC;KACF;KAEA,IAAMI,IAAO3C,EAAeuC,GAAGrC,GAAUC,GAAMC,CAAI;KAEnD,IAAIsC,GAAW;MAGb,IAAME,IAAS,CAAC,GADAL,EAAE,aACC,CAAO;MAC1B,KAAK,IAAMM,KAAMF,GACf,AAAKC,EAAO,SAASC,CAAE,KAAGD,EAAO,KAAKC,CAAE;MAE1C,EAAE,aAAaD,CAAM;KACvB,OACE,EAAE,aAAaD,CAAI;IAEvB;GACF;EACF;CACF;CACA,eAAe;AACjB"}
|
|
1
|
+
{"version":3,"file":"lassoSelect.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","setScratch","LASSO_VERTICES","b","scratch","moveCtx","x","y","last","dx","dy","min","g","proposed","reason","runBehaviorCancel","d","r","reduceBehaviorEnd","shiftHeld","hits","selectionFromHits"],"sources":["../../../../src/interactions/actions/defaults/lassoSelect.ts"],"sourcesContent":["/**\n * `lassoSelectAction` — ongoing Action descriptor for polygon lasso selection.\n *\n * ## Status: REAL\n *\n * Implements lasso-select via the full pointermove stream (accumulated in\n * `InvocationCtx.drag.points` by the dispatcher extension):\n * - `start`: initializes vertex list from the drag-start world point.\n * - `onMove`: appends the current world point, skipping one closer than\n * the binding's `params.minVertexSpacing` (default 2 world-px) to the\n * last vertex.\n * - `onEnd('commit')`: performs hit-testing against the accumulated polygon.\n * Uses `dep.hitTestLasso(polygon, mode)` when available — `mode` from the\n * binding's `params.mode`, default `'intersect'` — otherwise falls back to\n * the polygon's AABB via `dep.hitTestArea(bounds)`.\n * Extends selection with shift, replaces otherwise.\n * - `onEnd('cancel')`: no-op.\n *\n * ## Behaviors\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.\n *\n * ## Dep\n *\n * Requires `lassoSelect` dep from DepSchema:\n * `{ hitTestLasso?(...), hitTestArea(...), getSelection(), setSelection(ids) }`\n *\n * ## What this does NOT wire\n *\n * - Committed history — always transient (no undo entry); a behavior's ops\n * are applied the same way.\n * - Debug sink recording.\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 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 '../lasso-select/behaviors/selectFromLasso';\nimport { reduceBehaviorEnd, runBehaviorCancel } from '../gestureLifecycle';\nimport { selectionFromHits } from '../hitSelection';\n\n// ---------------------------------------------------------------------------\n// Internal helpers\n// ---------------------------------------------------------------------------\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\n// ---------------------------------------------------------------------------\n// Internal scratch\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// Descriptor\n// ---------------------------------------------------------------------------\n\n/**\n * @experimental\n * Static descriptor for the `lassoSelect` Action.\n *\n * Requires dep-schema entry: `lassoSelect`.\n *\n * The invoker accumulates pointermove vertices via `InvocationCtx.drag.points`\n * (dispatcher extension) and commits a polygon hit-test at drag end.\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: { worldX: ctx.world.x, worldY: ctx.world.y, clientX: 0, clientY: 0 },\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 = { worldX: x, worldY: y, clientX: 0, clientY: 0 };\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 scratch.open = false;\n if (reason === 'cancel') {\n if (scratch.gesture) runBehaviorCancel(scratch.behaviors, scratch.gesture);\n return;\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;\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;\n }\n\n const hits = hitTestPolygon(d, vertices, mode, view);\n\n d.setSelection(selectionFromHits(d.getSelection(), hits, shiftHeld));\n },\n };\n },\n },\n enabled: () => true,\n};\n"],"mappings":"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"}
|