@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
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
import { poseDescriptorForNode as e, translatePoseViaDescriptor as t } from "../../core/geometry/poseDescriptor.js";
|
|
2
|
+
import { asNodeId as n } from "../../core/scene/types.js";
|
|
3
|
+
//#region src/interactions/actions/selectionSubtree.ts
|
|
4
|
+
function r(e, t, n) {
|
|
5
|
+
let r = e.get(t)?.parent ?? null;
|
|
6
|
+
for (; r != null;) {
|
|
7
|
+
if (n.has(r)) return !0;
|
|
8
|
+
r = e.get(r)?.parent ?? null;
|
|
9
|
+
}
|
|
10
|
+
return !1;
|
|
11
|
+
}
|
|
12
|
+
function i(e, t) {
|
|
13
|
+
let i = new Set(t);
|
|
14
|
+
return t.map((e) => n(e)).filter((t) => e.get(t) !== void 0 && !r(e, t, i));
|
|
15
|
+
}
|
|
16
|
+
function a(e, t) {
|
|
17
|
+
let r = /* @__PURE__ */ new Set(), i = /* @__PURE__ */ new Set(), a = (t) => {
|
|
18
|
+
if (i.has(t)) return;
|
|
19
|
+
i.add(t);
|
|
20
|
+
let o = e.get(n(t)), s = o?.derivePose !== void 0 && Array.isArray(o.dependsOn) ? o.dependsOn : [];
|
|
21
|
+
if (s.length === 0) r.add(t);
|
|
22
|
+
else for (let e of s) a(e);
|
|
23
|
+
};
|
|
24
|
+
for (let e of t) a(e);
|
|
25
|
+
return [...r];
|
|
26
|
+
}
|
|
27
|
+
function o(e, t) {
|
|
28
|
+
let r = /* @__PURE__ */ new Set(), i = (t) => {
|
|
29
|
+
let a = e.get(n(t));
|
|
30
|
+
if (a !== void 0 && a.dependsOn === "children" && a.derivePose !== void 0) for (let r of e.childrenOf(n(t))) i(r);
|
|
31
|
+
else r.add(t);
|
|
32
|
+
};
|
|
33
|
+
for (let e of t) i(e);
|
|
34
|
+
return [...r];
|
|
35
|
+
}
|
|
36
|
+
function s(e, t) {
|
|
37
|
+
let n = [], r = (t) => {
|
|
38
|
+
n.push(t);
|
|
39
|
+
for (let n of e.childrenOf(t)) r(n);
|
|
40
|
+
};
|
|
41
|
+
return r(t), n;
|
|
42
|
+
}
|
|
43
|
+
function c(e, t, n) {
|
|
44
|
+
let r = /* @__PURE__ */ new Set();
|
|
45
|
+
for (let t of i(e, n)) for (let n of s(e, t)) r.add(n);
|
|
46
|
+
return t.pc.closure === "identity" ? [...r] : [...r].filter((e) => {
|
|
47
|
+
let n = t.frame(e);
|
|
48
|
+
return n === null || !r.has(n);
|
|
49
|
+
});
|
|
50
|
+
}
|
|
51
|
+
function l(n, r, i, a) {
|
|
52
|
+
let o = [], s = /* @__PURE__ */ new Set();
|
|
53
|
+
for (let { id: l, dx: u, dy: d } of a) if (u !== 0 || d !== 0) for (let a of c(n, r, [l])) {
|
|
54
|
+
if (s.has(a)) continue;
|
|
55
|
+
s.add(a);
|
|
56
|
+
let c = n.get(a);
|
|
57
|
+
if (!c) continue;
|
|
58
|
+
let l = e(i, c);
|
|
59
|
+
o.push({
|
|
60
|
+
id: a,
|
|
61
|
+
to: r.local(a, t(r.world(a), u, d, l))
|
|
62
|
+
});
|
|
63
|
+
}
|
|
64
|
+
for (let { id: e, to: t } of o) n.setPose(e, t);
|
|
65
|
+
}
|
|
66
|
+
//#endregion
|
|
67
|
+
export { r as hasSelectedAncestor, a as moveSources, i as selectedRoots, o as shapeSources, s as subtreeIds, l as translateEach, c as translateTargets };
|
|
68
|
+
|
|
69
|
+
//# sourceMappingURL=selectionSubtree.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"selectionSubtree.js","names":["hasSelectedAncestor","parent","scene","id","set","selectedRoots","ids","asNodeId","moveSources","out","walked","visit","node","deps","dep","shapeSources","child","subtreeIds","walk","at","translateTargets","moving","root","frame","storedIn","translateEach","writes","seen","moves","dx","dy","target","d","poseDescriptorForNode","descriptor","translatePoseViaDescriptor","to"],"sources":["../../../src/interactions/actions/selectionSubtree.ts"],"sourcesContent":["import type { NodeId, Scene } from 'core/scene/types';\nimport { asNodeId } from 'core/scene/types';\nimport type { PoseFrame } from './poseFrame';\nimport { poseDescriptorForNode, translatePoseViaDescriptor, type PoseDescriptor } from 'core/geometry/poseDescriptor';\n\ntype AnyScene = Scene<unknown, string, unknown>;\n\n/** True when any ancestor of `id` is also in `set` — acting on that ancestor\n * already reaches this node, so acting on it again would double it. */\nexport function hasSelectedAncestor(scene: AnyScene, id: NodeId, set: ReadonlySet<string>): boolean {\n let parent = scene.get(id)?.parent ?? null;\n while (parent != null) {\n if (set.has(parent)) return true;\n parent = scene.get(parent)?.parent ?? null;\n }\n return false;\n}\n\n/** The ids in `ids` that are in the scene and have no selected ancestor. */\nexport function selectedRoots(scene: AnyScene, ids: readonly string[]): NodeId[] {\n const set = new Set<string>(ids);\n return ids\n .map((id) => asNodeId(id))\n .filter((id) => scene.get(id) !== undefined && !hasSelectedAncestor(scene, id, set));\n}\n\n/**\n * The nodes a translation of `ids` has to act on. A node whose pose is derived\n * from an id list cannot be moved itself, since a pose written to it is\n * overwritten on the next read, so the nodes it derives from stand in for it,\n * through however many derived nodes that takes. Each id appears once, in the\n * order it was first reached.\n */\nexport function moveSources(scene: AnyScene, ids: readonly string[]): string[] {\n const out = new Set<string>();\n const walked = new Set<string>();\n const visit = (id: string): void => {\n if (walked.has(id)) return;\n walked.add(id);\n const node = scene.get(asNodeId(id));\n const deps = node?.derivePose !== undefined && Array.isArray(node.dependsOn) ? node.dependsOn : [];\n if (deps.length === 0) out.add(id);\n else for (const dep of deps) visit(dep);\n };\n for (const id of ids) visit(id);\n return [...out];\n}\n\n/**\n * The nodes a resize, rotation, flip, or alignment of `ids` has to write. A\n * container whose pose is derived from its children cannot be written itself,\n * so its children stand in for it, through however many such containers\n * nest. Each id appears once, in the order it was first reached.\n */\nexport function shapeSources(scene: AnyScene, ids: readonly string[]): string[] {\n const out = new Set<string>();\n const visit = (id: string): void => {\n const node = scene.get(asNodeId(id));\n if (node !== undefined && node.dependsOn === 'children' && node.derivePose !== undefined) {\n for (const child of scene.childrenOf(asNodeId(id))) visit(child);\n } else {\n out.add(id);\n }\n };\n for (const id of ids) visit(id);\n return [...out];\n}\n\n/** `id` and everything under it, a parent ahead of its children. */\nexport function subtreeIds(scene: AnyScene, id: NodeId): NodeId[] {\n const out: NodeId[] = [];\n const walk = (at: NodeId): void => {\n out.push(at);\n for (const child of scene.childrenOf(at)) walk(child);\n };\n walk(id);\n return out;\n}\n\n/**\n * The nodes whose stored pose has to change for `ids` to move as a unit: each\n * selected node and its descendants, less any stored in the frame of another\n * node in the set, which that frame carries. With the default absolute poses\n * nothing is carried and every descendant is written.\n */\nexport function translateTargets(\n scene: AnyScene,\n frame: PoseFrame<unknown>,\n ids: readonly string[],\n): NodeId[] {\n const moving = new Set<NodeId>();\n for (const root of selectedRoots(scene, ids)) {\n for (const id of subtreeIds(scene, root)) moving.add(id);\n }\n if (frame.pc.closure === 'identity') return [...moving];\n return [...moving].filter((id) => {\n const storedIn = frame.frame(id);\n return storedIn === null || !moving.has(storedIn);\n });\n}\n\n/**\n * Move each of `moves` by its own delta, taking along whatever has to be\n * written for that node to move as a unit ({@link translateTargets}). Every\n * world pose is read before the first write, so one move cannot shift what a\n * later one reads. Call inside a `scene.batch`.\n */\nexport function translateEach(\n scene: AnyScene,\n frame: PoseFrame<unknown>,\n descriptor: PoseDescriptor<unknown>,\n moves: readonly { id: string; dx: number; dy: number }[],\n): void {\n const writes: { id: NodeId; to: unknown }[] = [];\n const seen = new Set<NodeId>();\n for (const { id, dx, dy } of moves) {\n if (dx === 0 && dy === 0) continue;\n for (const target of translateTargets(scene, frame, [id])) {\n if (seen.has(target)) continue;\n seen.add(target);\n const node = scene.get(target);\n if (!node) continue;\n const d = poseDescriptorForNode(descriptor, node);\n writes.push({ id: target, to: frame.local(target, translatePoseViaDescriptor(frame.world(target), dx, dy, d)) });\n }\n }\n for (const { id, to } of writes) scene.setPose(id, to);\n}\n"],"mappings":"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"}
|
|
@@ -10,67 +10,67 @@ import { editAnchorsAction as ne } from "./defaults/editAnchors.js";
|
|
|
10
10
|
import { lassoSelectAction as re } from "./defaults/lassoSelect.js";
|
|
11
11
|
import { pinchZoomAction as s } from "./defaults/pinchZoom.js";
|
|
12
12
|
import { deleteAction as c } from "./defaults/delete.js";
|
|
13
|
-
import {
|
|
14
|
-
import {
|
|
15
|
-
import {
|
|
16
|
-
import {
|
|
17
|
-
import {
|
|
18
|
-
import {
|
|
19
|
-
import {
|
|
20
|
-
import {
|
|
21
|
-
import {
|
|
22
|
-
import {
|
|
23
|
-
import {
|
|
24
|
-
import {
|
|
25
|
-
import {
|
|
26
|
-
import {
|
|
27
|
-
import {
|
|
28
|
-
import {
|
|
29
|
-
import {
|
|
30
|
-
import {
|
|
31
|
-
import {
|
|
32
|
-
import {
|
|
33
|
-
import {
|
|
34
|
-
import {
|
|
35
|
-
import {
|
|
36
|
-
import {
|
|
37
|
-
import { useEffect as
|
|
38
|
-
import { useLatest as
|
|
13
|
+
import { ingestAction as l } from "./defaults/ingest.js";
|
|
14
|
+
import { clipboardCopyAction as u, clipboardCutAction as d, clipboardPasteAction as f, clipboardPasteEventAction as p } from "./defaults/clipboard.js";
|
|
15
|
+
import { enterTextEditAction as m } from "./defaults/enterTextEdit.js";
|
|
16
|
+
import { escapeAction as h } from "./defaults/escape.js";
|
|
17
|
+
import { cancelGestureAction as g } from "./defaults/cancelGesture.js";
|
|
18
|
+
import { selectAllAction as _ } from "./defaults/selectAll.js";
|
|
19
|
+
import { duplicateAction as v } from "./defaults/duplicate.js";
|
|
20
|
+
import { groupAction as y, ungroupAction as b } from "./defaults/group.js";
|
|
21
|
+
import { redoAction as x, undoAction as S } from "./defaults/undoRedo.js";
|
|
22
|
+
import { flipAction as C } from "./defaults/flip.js";
|
|
23
|
+
import { nudgeDownAction as w, nudgeLeftAction as T, nudgeRightAction as E, nudgeUpAction as D } from "./defaults/nudge.js";
|
|
24
|
+
import { reorderBackwardAction as O, reorderForwardAction as k } from "./defaults/reorder.js";
|
|
25
|
+
import { alignBottomAction as A, alignCenterXAction as j, alignCenterYAction as M, alignLeftAction as N, alignRightAction as P, alignTopAction as ie } from "./defaults/align.js";
|
|
26
|
+
import { distributeHorizontalAction as F, distributeVerticalAction as I } from "./defaults/distribute.js";
|
|
27
|
+
import { pathfinderCropAction as L, pathfinderDivideAction as R, pathfinderExcludeAction as z, pathfinderIntersectAction as B, pathfinderSubtractAction as V, pathfinderUnionAction as H } from "./defaults/booleans.js";
|
|
28
|
+
import { createOutlinesAction as U } from "./defaults/createOutlines.js";
|
|
29
|
+
import { enterPathEditAction as W } from "./defaults/enterPathEdit.js";
|
|
30
|
+
import { exitPathEditAction as G } from "./defaults/exitPathEdit.js";
|
|
31
|
+
import { insertPathAnchorAction as K } from "./defaults/insertPathAnchor.js";
|
|
32
|
+
import { cutPathAtAnchorAction as q, deleteAnchorsAction as J, marqueeAnchorsAction as Y, nudgeAnchorsDownAction as ae, nudgeAnchorsLeftAction as oe, nudgeAnchorsRightAction as se, nudgeAnchorsUpAction as ce, selectAnchorAction as le } from "./defaults/anchorEditing.js";
|
|
33
|
+
import { setFillAction as ue } from "./defaults/setFill.js";
|
|
34
|
+
import { setStrokeAction as de } from "./defaults/setStroke.js";
|
|
35
|
+
import { setFillOpacityAction as fe } from "./defaults/setFillOpacity.js";
|
|
36
|
+
import { setStrokeOpacityAction as pe } from "./defaults/setStrokeOpacity.js";
|
|
37
|
+
import { useEffect as X } from "react";
|
|
38
|
+
import { useLatest as Z } from "@weasel-js/react";
|
|
39
39
|
import "@weasel-js/routing";
|
|
40
|
-
import { useActionsRegistry as
|
|
40
|
+
import { useActionsRegistry as me, useOptionalActiveToolContext as Q, useOptionalDepRegistry as he } from "@weasel-js/routing/react";
|
|
41
41
|
//#region src/interactions/actions/useStandardActions.ts
|
|
42
42
|
var $ = [
|
|
43
|
-
p,
|
|
44
|
-
m,
|
|
45
43
|
h,
|
|
46
44
|
g,
|
|
47
|
-
c,
|
|
48
45
|
_,
|
|
49
46
|
v,
|
|
50
|
-
|
|
47
|
+
c,
|
|
51
48
|
y,
|
|
52
|
-
|
|
53
|
-
T,
|
|
49
|
+
b,
|
|
54
50
|
S,
|
|
51
|
+
x,
|
|
55
52
|
C,
|
|
56
|
-
w,
|
|
57
53
|
D,
|
|
54
|
+
w,
|
|
55
|
+
T,
|
|
58
56
|
E,
|
|
59
|
-
j,
|
|
60
57
|
k,
|
|
61
|
-
M,
|
|
62
|
-
N,
|
|
63
|
-
A,
|
|
64
58
|
O,
|
|
59
|
+
N,
|
|
60
|
+
j,
|
|
65
61
|
P,
|
|
66
62
|
ie,
|
|
63
|
+
M,
|
|
64
|
+
A,
|
|
65
|
+
F,
|
|
66
|
+
I,
|
|
67
|
+
H,
|
|
68
|
+
V,
|
|
67
69
|
B,
|
|
68
70
|
z,
|
|
69
71
|
R,
|
|
70
72
|
L,
|
|
71
|
-
|
|
72
|
-
F,
|
|
73
|
-
V,
|
|
73
|
+
U,
|
|
74
74
|
e,
|
|
75
75
|
t,
|
|
76
76
|
n,
|
|
@@ -79,34 +79,35 @@ var $ = [
|
|
|
79
79
|
a,
|
|
80
80
|
ee,
|
|
81
81
|
ne,
|
|
82
|
-
H,
|
|
83
|
-
U,
|
|
84
82
|
W,
|
|
83
|
+
G,
|
|
84
|
+
K,
|
|
85
|
+
ce,
|
|
86
|
+
ae,
|
|
85
87
|
oe,
|
|
88
|
+
se,
|
|
86
89
|
J,
|
|
87
|
-
Y,
|
|
88
|
-
ae,
|
|
89
|
-
K,
|
|
90
|
-
G,
|
|
91
90
|
q,
|
|
92
|
-
|
|
91
|
+
Y,
|
|
92
|
+
le,
|
|
93
93
|
re,
|
|
94
94
|
s,
|
|
95
95
|
te,
|
|
96
96
|
o,
|
|
97
|
-
|
|
98
|
-
ce,
|
|
99
|
-
le,
|
|
100
|
-
X,
|
|
97
|
+
m,
|
|
101
98
|
ue,
|
|
102
99
|
de,
|
|
103
|
-
|
|
100
|
+
fe,
|
|
101
|
+
pe,
|
|
104
102
|
l,
|
|
105
|
-
d
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
103
|
+
d,
|
|
104
|
+
u,
|
|
105
|
+
f,
|
|
106
|
+
p
|
|
107
|
+
], ge = $.map((e) => e.id), _e = { "clipboard.pasteEvent": "ingest" };
|
|
108
|
+
function ve(e) {
|
|
109
|
+
let t = Z(e), n = Q(), r = Z(n), i = he();
|
|
110
|
+
X(() => {
|
|
110
111
|
if (!i) return;
|
|
111
112
|
let e = [];
|
|
112
113
|
for (let n of [
|
|
@@ -123,10 +124,13 @@ function ge(e) {
|
|
|
123
124
|
t,
|
|
124
125
|
r
|
|
125
126
|
]);
|
|
126
|
-
let a =
|
|
127
|
-
|
|
127
|
+
let a = me(), o = e.exclude ? [...e.exclude].join("\0") : "";
|
|
128
|
+
X(() => {
|
|
128
129
|
if (!a || !i) return;
|
|
129
|
-
let e = new Set(o ? o.split("\0") : []), t = $.filter((t) => !e.has(t.id)).
|
|
130
|
+
let e = new Set(o ? o.split("\0") : []), t = $.filter((t) => !e.has(t.id)).filter((t) => {
|
|
131
|
+
let n = _e[t.id];
|
|
132
|
+
return n === void 0 || e.has(n);
|
|
133
|
+
}).map((e) => a.register(e));
|
|
130
134
|
return () => {
|
|
131
135
|
for (let e of t) e();
|
|
132
136
|
};
|
|
@@ -137,6 +141,6 @@ function ge(e) {
|
|
|
137
141
|
]);
|
|
138
142
|
}
|
|
139
143
|
//#endregion
|
|
140
|
-
export {
|
|
144
|
+
export { ge as KIT_STANDARD_ACTION_IDS, ve as useStandardActions };
|
|
141
145
|
|
|
142
146
|
//# sourceMappingURL=useStandardActions.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useStandardActions.js","names":["KIT_STANDARD_DESCRIPTORS","escapeAction","cancelGestureAction","selectAllAction","duplicateAction","deleteAction","groupAction","ungroupAction","undoAction","redoAction","flipAction","nudgeUpAction","nudgeDownAction","nudgeLeftAction","nudgeRightAction","reorderForwardAction","reorderBackwardAction","alignLeftAction","alignCenterXAction","alignRightAction","alignTopAction","alignCenterYAction","alignBottomAction","distributeHorizontalAction","distributeVerticalAction","pathfinderUnionAction","pathfinderSubtractAction","pathfinderIntersectAction","pathfinderExcludeAction","pathfinderDivideAction","pathfinderCropAction","createOutlinesAction","moveAction","resizeAction","rotateAction","areaSelectAction","insertAction","insertRotateAction","cloneAction","editAnchorsAction","enterPathEditAction","exitPathEditAction","insertPathAnchorAction","nudgeAnchorsUpAction","nudgeAnchorsDownAction","nudgeAnchorsLeftAction","nudgeAnchorsRightAction","deleteAnchorsAction","cutPathAtAnchorAction","marqueeAnchorsAction","selectAnchorAction","lassoSelectAction","pinchZoomAction","viewportDragPanAction","clearSelectionAction","enterTextEditAction","setFillAction","setStrokeAction","setFillOpacityAction","setStrokeOpacityAction","ingestAction","clipboardCutAction","clipboardCopyAction","clipboardPasteAction","KIT_STANDARD_ACTION_IDS","a","useStandardActions","optsRef","useLatest","opts","activeToolCtx","useOptionalActiveToolContext","activeToolCtxRef","depReg","useOptionalDepRegistry","unregisters","key","u","reg","useActionsRegistry","excludeKey","excluded"],"sources":["../../../src/interactions/actions/useStandardActions.ts"],"sourcesContent":["/**\n * @experimental\n * `useStandardActions` — register the kit-standard action descriptors into the\n * nearest `<ActionsProvider>` and publish dep sources into the nearest\n * `<DepRegistryProvider>`.\n *\n * Instead of calling closure-style factories, this hook registers each dep as\n * a live source and each kit-standard descriptor's `invoker` directly.\n *\n * Falls back silently to a no-op when no `<ActionsProvider>` or\n * `<DepRegistryProvider>` is in scope.\n */\nimport { useEffect } from 'react';\nimport type { Action } from '@weasel-js/routing';\nimport { useActionsRegistry } from '@weasel-js/routing/react';\nimport { useLatest } from '@weasel-js/react';\nimport { type DepName, type DepSchema } from '@weasel-js/routing';\nimport { useOptionalDepRegistry } from '@weasel-js/routing/react';\n// Reaches depSchema.ts so tsup's per-entry dts compiler resolves `DepSchema['selection']`\n// here; `tsc --noEmit` happens to pick it up via test files, tsup does not. It MUST be\n// `import type` — a bare `import './depSchema'` makes esbuild emit a runtime import that it\n// then drops under the package's `sideEffects: false`, warning on every build.\nimport type {} from './depSchema';\nimport { useOptionalActiveToolContext } from '@weasel-js/routing/react';\n\nimport { escapeAction } from './defaults/escape';\nimport { cancelGestureAction } from './defaults/cancelGesture';\nimport { selectAllAction } from './defaults/selectAll';\nimport { deleteAction } from './defaults/delete';\nimport { duplicateAction } from './defaults/duplicate';\nimport { groupAction, ungroupAction } from './defaults/group';\nimport { undoAction, redoAction } from './defaults/undoRedo';\nimport { flipAction } from './defaults/flip';\nimport {\n nudgeUpAction, nudgeDownAction, nudgeLeftAction, nudgeRightAction,\n} from './defaults/nudge';\nimport { reorderForwardAction, reorderBackwardAction } from './defaults/reorder';\nimport {\n alignLeftAction, alignRightAction, alignTopAction, alignBottomAction,\n alignCenterXAction, alignCenterYAction,\n} from './defaults/align';\nimport {\n distributeHorizontalAction, distributeVerticalAction,\n} from './defaults/distribute';\nimport {\n pathfinderUnionAction, pathfinderSubtractAction, pathfinderIntersectAction,\n pathfinderExcludeAction, pathfinderDivideAction, pathfinderCropAction,\n} from './defaults/booleans';\nimport { createOutlinesAction } from './defaults/createOutlines';\nimport { moveAction } from './defaults/move';\nimport { resizeAction } from './defaults/resize';\nimport { rotateAction } from './defaults/rotate';\nimport { areaSelectAction } from './defaults/areaSelect';\nimport { insertAction, insertRotateAction } from './defaults/insert';\nimport { clearSelectionAction } from './defaults/clearSelection';\nimport { cloneAction } from './defaults/clone';\nimport { editAnchorsAction } from './defaults/editAnchors';\nimport { enterPathEditAction } from './defaults/enterPathEdit';\nimport { exitPathEditAction } from './defaults/exitPathEdit';\nimport { insertPathAnchorAction } from './defaults/insertPathAnchor';\nimport {\n nudgeAnchorsUpAction,\n nudgeAnchorsDownAction,\n nudgeAnchorsLeftAction,\n nudgeAnchorsRightAction,\n deleteAnchorsAction,\n cutPathAtAnchorAction,\n marqueeAnchorsAction,\n selectAnchorAction,\n} from './defaults/anchorEditing';\nimport { lassoSelectAction } from './defaults/lassoSelect';\nimport { pinchZoomAction } from './defaults/pinchZoom';\nimport { viewportDragPanAction } from './defaults/viewportDragPan';\nimport { enterTextEditAction } from './defaults/enterTextEdit';\nimport { setFillAction } from './defaults/setFill';\nimport { setStrokeAction } from './defaults/setStroke';\nimport { setFillOpacityAction } from './defaults/setFillOpacity';\nimport { setStrokeOpacityAction } from './defaults/setStrokeOpacity';\nimport { ingestAction } from './defaults/ingest';\nimport { clipboardCopyAction, clipboardCutAction, clipboardPasteAction } from './defaults/clipboard';\n\n// viewportWheelPanAction / viewportZoomAction are NOT in KIT_STANDARD_DESCRIPTORS.\n// They are wired conditionally by SceneCanvas via `useViewportActions`\n// based on the `viewport.pan` / `viewport.zoom` flags.\n\n/** @experimental */\nexport interface UseStandardActionsOptions {\n /** Kit selection state — ids of currently selected nodes. */\n selection?: DepSchema['selection'];\n /** Current viewport — camera position + scale. */\n view?: DepSchema['view'];\n /** Scene tree — structural reads + undoable mutations. */\n scene?: DepSchema['scene'];\n /** Undo/redo history bound to the current scene. */\n history?: DepSchema['history'];\n /** Currently active tool id + hotkey-hold stack. */\n activeTool?: DepSchema['activeTool'];\n /**\n * Ids of kit-standard actions to leave unregistered, so a consumer can bind\n * its own. Ids that name no kit action are ignored;\n * `KIT_STANDARD_ACTION_IDS` is the full list.\n */\n exclude?: Iterable<string>;\n}\n\n/**\n * The ordered list of all kit-standard action descriptors. Each descriptor\n * carries an `invoker` that reads from the dep registry at dispatch time.\n *\n * `viewport.pan` and `viewport.zoom` are NOT in this list — they're registered\n * conditionally by SceneCanvas's `useViewportActions` based on the\n * `viewport.pan` / `viewport.zoom` flags. See `src/canvas/SceneCanvas/useViewportActions.ts`.\n */\nconst KIT_STANDARD_DESCRIPTORS: Action[] = [\n escapeAction,\n cancelGestureAction,\n selectAllAction,\n duplicateAction,\n deleteAction,\n groupAction,\n ungroupAction,\n undoAction,\n redoAction,\n flipAction,\n nudgeUpAction,\n nudgeDownAction,\n nudgeLeftAction,\n nudgeRightAction,\n reorderForwardAction,\n reorderBackwardAction,\n alignLeftAction,\n alignCenterXAction,\n alignRightAction,\n alignTopAction,\n alignCenterYAction,\n alignBottomAction,\n distributeHorizontalAction,\n distributeVerticalAction,\n pathfinderUnionAction,\n pathfinderSubtractAction,\n pathfinderIntersectAction,\n pathfinderExcludeAction,\n pathfinderDivideAction,\n pathfinderCropAction,\n createOutlinesAction,\n moveAction,\n resizeAction,\n rotateAction,\n areaSelectAction,\n insertAction,\n insertRotateAction,\n cloneAction,\n editAnchorsAction,\n enterPathEditAction,\n exitPathEditAction,\n insertPathAnchorAction,\n nudgeAnchorsUpAction,\n nudgeAnchorsDownAction,\n nudgeAnchorsLeftAction,\n nudgeAnchorsRightAction,\n deleteAnchorsAction,\n cutPathAtAnchorAction,\n marqueeAnchorsAction,\n selectAnchorAction,\n lassoSelectAction,\n pinchZoomAction,\n viewportDragPanAction,\n clearSelectionAction,\n enterTextEditAction,\n setFillAction,\n setStrokeAction,\n setFillOpacityAction,\n setStrokeOpacityAction,\n ingestAction,\n clipboardCutAction,\n clipboardCopyAction,\n clipboardPasteAction,\n];\n\n/** Every id `useStandardActions` registers, in registration order. */\nexport const KIT_STANDARD_ACTION_IDS: readonly string[] =\n KIT_STANDARD_DESCRIPTORS.map((a) => a.id);\n\n/**\n * @experimental\n * Register each kit-standard dep source and action descriptor into the\n * surrounding providers.\n *\n * **Provider requirements:** both `<ActionsProvider>` and\n * `<DepRegistryProvider>` must be in scope (typically provided by\n * `<SceneCanvas>`). The hook falls back silently to a no-op when either\n * provider is absent.\n *\n * **Dep registration:** each non-undefined option is published as a live source\n * in the dep registry under its canonical name (`selection`, `scene`, …). The\n * source thunk reads the latest option value at invocation time via a ref, so\n * consumers don't have to memoize their dep objects.\n */\nexport function useStandardActions(opts: UseStandardActionsOptions): void {\n // --- Stabilize opts via ref ---\n const optsRef = useLatest(opts);\n\n // --- activeTool fallback: read from context when not supplied in opts ---\n // Falls back to null when no <ActiveToolContextProvider> is in scope\n // (preserves silent-no-op contract for consumers that mount without SceneCanvas).\n const activeToolCtx = useOptionalActiveToolContext();\n const activeToolCtxRef = useLatest(activeToolCtx);\n\n // --- Dep source registration ---\n // Must be unconditional (rules of hooks). Each effect only registers when a\n // provider is present (depReg !== null guard is inside the effect body).\n const depReg = useOptionalDepRegistry();\n\n useEffect(() => {\n if (!depReg) return;\n const unregisters: Array<() => void> = [];\n const keys = ['selection', 'view', 'scene', 'history'] as const;\n for (const key of keys) {\n unregisters.push(\n depReg.register(key as DepName, () => optsRef.current[key] as DepSchema[DepName]),\n );\n }\n // activeTool: prefer the explicit opt; fall back to the context value so\n // SceneCanvas doesn't need to thread it through StandardActionsRegistrar.\n unregisters.push(\n depReg.register('activeTool' as DepName, () =>\n (optsRef.current.activeTool ?? activeToolCtxRef.current) as DepSchema[DepName],\n ),\n );\n return () => { for (const u of unregisters) u(); };\n }, [depReg, optsRef, activeToolCtxRef]);\n\n // --- Action descriptor registration with legacy run bridge ---\n const reg = useActionsRegistry();\n\n // Joined so a fresh array of the same ids does not re-register every render.\n const excludeKey = opts.exclude ? [...opts.exclude].join('\\u0000') : '';\n\n useEffect(() => {\n if (!reg || !depReg) return;\n // `withLegacyRunBridge` is gone. Kit-standard descriptors\n // register their `invoker` directly. `registry.trigger(id)` reads from the\n // dep registry to build deps when calling `invoker.run` (so ActionBar /\n // palette callers still work without a per-action `run` thunk).\n const excluded = new Set(excludeKey ? excludeKey.split('\\u0000') : []);\n const unregisters = KIT_STANDARD_DESCRIPTORS\n .filter((a) => !excluded.has(a.id))\n .map((a) => reg.register(a));\n return () => { for (const u of unregisters) u(); };\n }, [reg, depReg, excludeKey]);\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAiHA,IAAMA,IAAqC;CACzCC;CACAC;CACAC;CACAC;CACAC;CACAC;CACAC;CACAC;CACAC;CACAC;CACAC;CACAC;CACAC;CACAC;CACAC;CACAC;CACAC;CACAC;CACAC;CACAC;CACAC;CACAC;CACAC;CACAC;CACAC;CACAC;CACAC;CACAC;CACAC;CACAC;CACAC;CACAC;CACAC;CACAC;CACAC;CACAC;CACAC;CACAC;CACAC;CACAC;CACAC;CACAC;CACAC;CACAC;CACAC;CACAC;CACAC;CACAC;CACAC;CACAC;CACAC;CACAC;CACAC;CACAC;CACAC;CACAC;CACAC;CACAC;CACAC;CACAC;CACAC;CACAC;CACAC;AACF,GAGaC,KACXhE,EAAyB,KAAK,MAAMiE,EAAE,EAAE;AAiB1C,SAAgBC,GAAmB,GAAuC;CAExE,IAAMC,IAAUC,EAAUC,CAAI,GAKxBC,IAAgBC,GAA6B,GAC7CC,IAAmBJ,EAAUE,CAAa,GAK1CG,IAASC,GAAuB;CAEtC,QAAgB;EACd,IAAI,CAACD,GAAQ;EACb,IAAME,IAAiC,CAAC;EAExC,KAAK,IAAMC,KAAO;GADJ;GAAa;GAAQ;GAAS;EAC1B,GAChB,EAAY,KACVH,EAAO,SAASG,SAAsBT,EAAQ,QAAQS,EAA0B,CAClF;EASF,OALAD,EAAY,KACVF,EAAO,SAAS,oBACbN,EAAQ,QAAQ,cAAcK,EAAiB,OAClD,CACF,SACa;GAAE,KAAK,IAAMK,KAAKF,GAAa,EAAE;EAAG;CACnD,GAAG;EAACF;EAAQN;EAASK;CAAgB,CAAC;CAGtC,IAAMM,IAAMC,GAAmB,GAGzBC,IAAaX,EAAK,UAAU,CAAC,GAAGA,EAAK,OAAO,CAAC,CAAC,KAAK,IAAQ,IAAI;CAErE,QAAgB;EACd,IAAI,CAACS,KAAO,CAACL,GAAQ;EAKrB,IAAMQ,IAAW,IAAI,IAAID,IAAaA,EAAW,MAAM,IAAQ,IAAI,CAAC,CAAC,GAC/DL,IAAc3E,EACjB,QAAQ,MAAM,CAACiF,EAAS,IAAIhB,EAAE,EAAE,CAAC,CAAC,CAClC,KAAK,MAAMa,EAAI,SAASb,CAAC,CAAC;EAC7B,aAAa;GAAE,KAAK,IAAMY,KAAKF,GAAa,EAAE;EAAG;CACnD,GAAG;EAACG;EAAKL;EAAQO;CAAU,CAAC;AAC9B"}
|
|
1
|
+
{"version":3,"file":"useStandardActions.js","names":["KIT_STANDARD_DESCRIPTORS","escapeAction","cancelGestureAction","selectAllAction","duplicateAction","deleteAction","groupAction","ungroupAction","undoAction","redoAction","flipAction","nudgeUpAction","nudgeDownAction","nudgeLeftAction","nudgeRightAction","reorderForwardAction","reorderBackwardAction","alignLeftAction","alignCenterXAction","alignRightAction","alignTopAction","alignCenterYAction","alignBottomAction","distributeHorizontalAction","distributeVerticalAction","pathfinderUnionAction","pathfinderSubtractAction","pathfinderIntersectAction","pathfinderExcludeAction","pathfinderDivideAction","pathfinderCropAction","createOutlinesAction","moveAction","resizeAction","rotateAction","areaSelectAction","insertAction","insertRotateAction","cloneAction","editAnchorsAction","enterPathEditAction","exitPathEditAction","insertPathAnchorAction","nudgeAnchorsUpAction","nudgeAnchorsDownAction","nudgeAnchorsLeftAction","nudgeAnchorsRightAction","deleteAnchorsAction","cutPathAtAnchorAction","marqueeAnchorsAction","selectAnchorAction","lassoSelectAction","pinchZoomAction","viewportDragPanAction","clearSelectionAction","enterTextEditAction","setFillAction","setStrokeAction","setFillOpacityAction","setStrokeOpacityAction","ingestAction","clipboardCutAction","clipboardCopyAction","clipboardPasteAction","clipboardPasteEventAction","KIT_STANDARD_ACTION_IDS","a","YIELDS_TO","useStandardActions","optsRef","useLatest","opts","activeToolCtx","useOptionalActiveToolContext","activeToolCtxRef","depReg","useOptionalDepRegistry","unregisters","key","u","reg","useActionsRegistry","excludeKey","excluded","over"],"sources":["../../../src/interactions/actions/useStandardActions.ts"],"sourcesContent":["/**\n * @experimental\n * `useStandardActions` — register the kit-standard action descriptors into the\n * nearest `<ActionsProvider>` and publish dep sources into the nearest\n * `<DepRegistryProvider>`.\n *\n * Instead of calling closure-style factories, this hook registers each dep as\n * a live source and each kit-standard descriptor's `invoker` directly.\n *\n * Falls back silently to a no-op when no `<ActionsProvider>` or\n * `<DepRegistryProvider>` is in scope.\n */\nimport { useEffect } from 'react';\nimport type { Action } from '@weasel-js/routing';\nimport { useActionsRegistry } from '@weasel-js/routing/react';\nimport { useLatest } from '@weasel-js/react';\nimport { type DepName, type DepSchema } from '@weasel-js/routing';\nimport { useOptionalDepRegistry } from '@weasel-js/routing/react';\n// Reaches depSchema.ts so tsup's per-entry dts compiler resolves `DepSchema['selection']`\n// here; `tsc --noEmit` happens to pick it up via test files, tsup does not. It MUST be\n// `import type` — a bare `import './depSchema'` makes esbuild emit a runtime import that it\n// then drops under the package's `sideEffects: false`, warning on every build.\nimport type {} from './depSchema';\nimport { useOptionalActiveToolContext } from '@weasel-js/routing/react';\n\nimport { escapeAction } from './defaults/escape';\nimport { cancelGestureAction } from './defaults/cancelGesture';\nimport { selectAllAction } from './defaults/selectAll';\nimport { deleteAction } from './defaults/delete';\nimport { duplicateAction } from './defaults/duplicate';\nimport { groupAction, ungroupAction } from './defaults/group';\nimport { undoAction, redoAction } from './defaults/undoRedo';\nimport { flipAction } from './defaults/flip';\nimport {\n nudgeUpAction, nudgeDownAction, nudgeLeftAction, nudgeRightAction,\n} from './defaults/nudge';\nimport { reorderForwardAction, reorderBackwardAction } from './defaults/reorder';\nimport {\n alignLeftAction, alignRightAction, alignTopAction, alignBottomAction,\n alignCenterXAction, alignCenterYAction,\n} from './defaults/align';\nimport {\n distributeHorizontalAction, distributeVerticalAction,\n} from './defaults/distribute';\nimport {\n pathfinderUnionAction, pathfinderSubtractAction, pathfinderIntersectAction,\n pathfinderExcludeAction, pathfinderDivideAction, pathfinderCropAction,\n} from './defaults/booleans';\nimport { createOutlinesAction } from './defaults/createOutlines';\nimport { moveAction } from './defaults/move';\nimport { resizeAction } from './defaults/resize';\nimport { rotateAction } from './defaults/rotate';\nimport { areaSelectAction } from './defaults/areaSelect';\nimport { insertAction, insertRotateAction } from './defaults/insert';\nimport { clearSelectionAction } from './defaults/clearSelection';\nimport { cloneAction } from './defaults/clone';\nimport { editAnchorsAction } from './defaults/editAnchors';\nimport { enterPathEditAction } from './defaults/enterPathEdit';\nimport { exitPathEditAction } from './defaults/exitPathEdit';\nimport { insertPathAnchorAction } from './defaults/insertPathAnchor';\nimport {\n nudgeAnchorsUpAction,\n nudgeAnchorsDownAction,\n nudgeAnchorsLeftAction,\n nudgeAnchorsRightAction,\n deleteAnchorsAction,\n cutPathAtAnchorAction,\n marqueeAnchorsAction,\n selectAnchorAction,\n} from './defaults/anchorEditing';\nimport { lassoSelectAction } from './defaults/lassoSelect';\nimport { pinchZoomAction } from './defaults/pinchZoom';\nimport { viewportDragPanAction } from './defaults/viewportDragPan';\nimport { enterTextEditAction } from './defaults/enterTextEdit';\nimport { setFillAction } from './defaults/setFill';\nimport { setStrokeAction } from './defaults/setStroke';\nimport { setFillOpacityAction } from './defaults/setFillOpacity';\nimport { setStrokeOpacityAction } from './defaults/setStrokeOpacity';\nimport { ingestAction } from './defaults/ingest';\nimport {\n clipboardCopyAction, clipboardCutAction, clipboardPasteAction, clipboardPasteEventAction,\n} from './defaults/clipboard';\n\n// viewportWheelPanAction / viewportZoomAction are NOT in KIT_STANDARD_DESCRIPTORS.\n// They are wired conditionally by SceneCanvas via `useViewportActions`\n// based on the `viewport.pan` / `viewport.zoom` flags.\n\n/** @experimental */\nexport interface UseStandardActionsOptions {\n /** Kit selection state — ids of currently selected nodes. */\n selection?: DepSchema['selection'];\n /** Current viewport — camera position + scale. */\n view?: DepSchema['view'];\n /** Scene tree — structural reads + undoable mutations. */\n scene?: DepSchema['scene'];\n /** Undo/redo history bound to the current scene. */\n history?: DepSchema['history'];\n /** Currently active tool id + hotkey-hold stack. */\n activeTool?: DepSchema['activeTool'];\n /**\n * Ids of kit-standard actions to leave unregistered, so a consumer can bind\n * its own. Ids that name no kit action are ignored;\n * `KIT_STANDARD_ACTION_IDS` is the full list.\n */\n exclude?: Iterable<string>;\n}\n\n/**\n * The ordered list of all kit-standard action descriptors. Each descriptor\n * carries an `invoker` that reads from the dep registry at dispatch time.\n *\n * `viewport.pan` and `viewport.zoom` are NOT in this list — they're registered\n * conditionally by SceneCanvas's `useViewportActions` based on the\n * `viewport.pan` / `viewport.zoom` flags. See `src/canvas/SceneCanvas/useViewportActions.ts`.\n */\nconst KIT_STANDARD_DESCRIPTORS: Action[] = [\n escapeAction,\n cancelGestureAction,\n selectAllAction,\n duplicateAction,\n deleteAction,\n groupAction,\n ungroupAction,\n undoAction,\n redoAction,\n flipAction,\n nudgeUpAction,\n nudgeDownAction,\n nudgeLeftAction,\n nudgeRightAction,\n reorderForwardAction,\n reorderBackwardAction,\n alignLeftAction,\n alignCenterXAction,\n alignRightAction,\n alignTopAction,\n alignCenterYAction,\n alignBottomAction,\n distributeHorizontalAction,\n distributeVerticalAction,\n pathfinderUnionAction,\n pathfinderSubtractAction,\n pathfinderIntersectAction,\n pathfinderExcludeAction,\n pathfinderDivideAction,\n pathfinderCropAction,\n createOutlinesAction,\n moveAction,\n resizeAction,\n rotateAction,\n areaSelectAction,\n insertAction,\n insertRotateAction,\n cloneAction,\n editAnchorsAction,\n enterPathEditAction,\n exitPathEditAction,\n insertPathAnchorAction,\n nudgeAnchorsUpAction,\n nudgeAnchorsDownAction,\n nudgeAnchorsLeftAction,\n nudgeAnchorsRightAction,\n deleteAnchorsAction,\n cutPathAtAnchorAction,\n marqueeAnchorsAction,\n selectAnchorAction,\n lassoSelectAction,\n pinchZoomAction,\n viewportDragPanAction,\n clearSelectionAction,\n enterTextEditAction,\n setFillAction,\n setStrokeAction,\n setFillOpacityAction,\n setStrokeOpacityAction,\n ingestAction,\n clipboardCutAction,\n clipboardCopyAction,\n clipboardPasteAction,\n clipboardPasteEventAction,\n];\n\n/** Every id `useStandardActions` can register, in registration order. It\n * holds `clipboard.pasteEvent` back unless `ingest` is excluded. */\nexport const KIT_STANDARD_ACTION_IDS: readonly string[] =\n KIT_STANDARD_DESCRIPTORS.map((a) => a.id);\n\n/**\n * Kit-standard actions that stay unregistered while another one is\n * registered, because that one binds the same gesture and does everything\n * this one does: both answering it would act twice. Keyed by the action that\n * yields.\n */\nconst YIELDS_TO: Readonly<Record<string, string>> = {\n 'clipboard.pasteEvent': 'ingest',\n};\n\n/**\n * @experimental\n * Register each kit-standard dep source and action descriptor into the\n * surrounding providers.\n *\n * **Provider requirements:** both `<ActionsProvider>` and\n * `<DepRegistryProvider>` must be in scope (typically provided by\n * `<SceneCanvas>`). The hook falls back silently to a no-op when either\n * provider is absent.\n *\n * **Dep registration:** each non-undefined option is published as a live source\n * in the dep registry under its canonical name (`selection`, `scene`, …). The\n * source thunk reads the latest option value at invocation time via a ref, so\n * consumers don't have to memoize their dep objects.\n */\nexport function useStandardActions(opts: UseStandardActionsOptions): void {\n // --- Stabilize opts via ref ---\n const optsRef = useLatest(opts);\n\n // --- activeTool fallback: read from context when not supplied in opts ---\n // Falls back to null when no <ActiveToolContextProvider> is in scope\n // (preserves silent-no-op contract for consumers that mount without SceneCanvas).\n const activeToolCtx = useOptionalActiveToolContext();\n const activeToolCtxRef = useLatest(activeToolCtx);\n\n // --- Dep source registration ---\n // Must be unconditional (rules of hooks). Each effect only registers when a\n // provider is present (depReg !== null guard is inside the effect body).\n const depReg = useOptionalDepRegistry();\n\n useEffect(() => {\n if (!depReg) return;\n const unregisters: Array<() => void> = [];\n const keys = ['selection', 'view', 'scene', 'history'] as const;\n for (const key of keys) {\n unregisters.push(\n depReg.register(key as DepName, () => optsRef.current[key] as DepSchema[DepName]),\n );\n }\n // activeTool: prefer the explicit opt; fall back to the context value so\n // SceneCanvas doesn't need to thread it through StandardActionsRegistrar.\n unregisters.push(\n depReg.register('activeTool' as DepName, () =>\n (optsRef.current.activeTool ?? activeToolCtxRef.current) as DepSchema[DepName],\n ),\n );\n return () => { for (const u of unregisters) u(); };\n }, [depReg, optsRef, activeToolCtxRef]);\n\n // --- Action descriptor registration with legacy run bridge ---\n const reg = useActionsRegistry();\n\n // Joined so a fresh array of the same ids does not re-register every render.\n const excludeKey = opts.exclude ? [...opts.exclude].join('\\u0000') : '';\n\n useEffect(() => {\n if (!reg || !depReg) return;\n // `withLegacyRunBridge` is gone. Kit-standard descriptors\n // register their `invoker` directly. `registry.trigger(id)` reads from the\n // dep registry to build deps when calling `invoker.run` (so ActionBar /\n // palette callers still work without a per-action `run` thunk).\n const excluded = new Set(excludeKey ? excludeKey.split('\\u0000') : []);\n const unregisters = KIT_STANDARD_DESCRIPTORS\n .filter((a) => !excluded.has(a.id))\n .filter((a) => {\n const over = YIELDS_TO[a.id];\n return over === undefined || excluded.has(over);\n })\n .map((a) => reg.register(a));\n return () => { for (const u of unregisters) u(); };\n }, [reg, depReg, excludeKey]);\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAmHA,IAAMA,IAAqC;CACzCC;CACAC;CACAC;CACAC;CACAC;CACAC;CACAC;CACAC;CACAC;CACAC;CACAC;CACAC;CACAC;CACAC;CACAC;CACAC;CACAC;CACAC;CACAC;CACAC;CACAC;CACAC;CACAC;CACAC;CACAC;CACAC;CACAC;CACAC;CACAC;CACAC;CACAC;CACAC;CACAC;CACAC;CACAC;CACAC;CACAC;CACAC;CACAC;CACAC;CACAC;CACAC;CACAC;CACAC;CACAC;CACAC;CACAC;CACAC;CACAC;CACAC;CACAC;CACAC;CACAC;CACAC;CACAC;CACAC;CACAC;CACAC;CACAC;CACAC;CACAC;CACAC;CACAC;CACAC;AACF,GAIaC,KACXjE,EAAyB,KAAK,MAAMkE,EAAE,EAAE,GAQpCC,KAA8C,EAClD,wBAAwB,SAC1B;AAiBA,SAAgBC,GAAmB,GAAuC;CAExE,IAAMC,IAAUC,EAAUC,CAAI,GAKxBC,IAAgBC,EAA6B,GAC7CC,IAAmBJ,EAAUE,CAAa,GAK1CG,IAASC,GAAuB;CAEtC,QAAgB;EACd,IAAI,CAACD,GAAQ;EACb,IAAME,IAAiC,CAAC;EAExC,KAAK,IAAMC,KAAO;GADJ;GAAa;GAAQ;GAAS;EAC1B,GAChB,EAAY,KACVH,EAAO,SAASG,SAAsBT,EAAQ,QAAQS,EAA0B,CAClF;EASF,OALAD,EAAY,KACVF,EAAO,SAAS,oBACbN,EAAQ,QAAQ,cAAcK,EAAiB,OAClD,CACF,SACa;GAAE,KAAK,IAAMK,KAAKF,GAAa,EAAE;EAAG;CACnD,GAAG;EAACF;EAAQN;EAASK;CAAgB,CAAC;CAGtC,IAAMM,IAAMC,GAAmB,GAGzBC,IAAaX,EAAK,UAAU,CAAC,GAAGA,EAAK,OAAO,CAAC,CAAC,KAAK,IAAQ,IAAI;CAErE,QAAgB;EACd,IAAI,CAACS,KAAO,CAACL,GAAQ;EAKrB,IAAMQ,IAAW,IAAI,IAAID,IAAaA,EAAW,MAAM,IAAQ,IAAI,CAAC,CAAC,GAC/DL,IAAc7E,EACjB,QAAQ,MAAM,CAACmF,EAAS,IAAIjB,EAAE,EAAE,CAAC,CAAC,CAClC,QAAQ,MAAM;GACb,IAAMkB,IAAOjB,GAAUD,EAAE;GACzB,OAAOkB,MAAS,KAAA,KAAaD,EAAS,IAAIC,CAAI;EAChD,CAAC,CAAC,CACD,KAAK,MAAMJ,EAAI,SAASd,CAAC,CAAC;EAC7B,aAAa;GAAE,KAAK,IAAMa,KAAKF,GAAa,EAAE;EAAG;CACnD,GAAG;EAACG;EAAKL;EAAQO;CAAU,CAAC;AAC9B"}
|
|
@@ -24,14 +24,14 @@ function a(a = {}) {
|
|
|
24
24
|
}
|
|
25
25
|
};
|
|
26
26
|
}, []), f = e((e, t) => {
|
|
27
|
-
let n = o.current, r = n.initScratch ? n.initScratch() : {}, i = n.thresholdReached ? "pending" : "active";
|
|
27
|
+
let n = o.current, r = n.initScratch ? n.initScratch() : {}, i = n.thresholdReached ? "pending" : "active", a = s.current !== null;
|
|
28
28
|
s.current = {
|
|
29
29
|
phase: i,
|
|
30
30
|
start: e,
|
|
31
31
|
current: e,
|
|
32
32
|
modifiers: t,
|
|
33
33
|
scratch: r
|
|
34
|
-
}, u(i), n.onGestureStart?.(), n.onStart?.(d());
|
|
34
|
+
}, u(i), a || n.onGestureStart?.(), n.onStart?.(d());
|
|
35
35
|
}, [
|
|
36
36
|
d,
|
|
37
37
|
u,
|
|
@@ -52,10 +52,7 @@ function a(a = {}) {
|
|
|
52
52
|
o
|
|
53
53
|
]), m = e(() => {
|
|
54
54
|
let e = s.current, t = o.current;
|
|
55
|
-
if (!e)
|
|
56
|
-
t.onGestureEnd?.(!1);
|
|
57
|
-
return;
|
|
58
|
-
}
|
|
55
|
+
if (!e) return;
|
|
59
56
|
let n = {
|
|
60
57
|
get start() {
|
|
61
58
|
return e.start;
|
|
@@ -81,7 +78,7 @@ function a(a = {}) {
|
|
|
81
78
|
}
|
|
82
79
|
}, [u, o]), h = e(() => {
|
|
83
80
|
let e = s.current, t = o.current;
|
|
84
|
-
e && t.onCancel?.(d()), s.current = null, u("idle"), t.onGestureEnd?.(!1);
|
|
81
|
+
e && (t.onCancel?.(d()), s.current = null, u("idle"), t.onGestureEnd?.(!1));
|
|
85
82
|
}, [
|
|
86
83
|
d,
|
|
87
84
|
u,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"dragGesture.js","names":["useDragGesture","optsRef","useLatest","options","stateRef","useRef","setPhaseTick","useState","phaseRef","bumpPhase","useCallback","next","n","buildCtx","s","start","opts","scratch","initialPhase","point","move","modifiers","ctx","end","endCtx","committed","cancel","useMemo"],"sources":["../../../../src/interactions/gestures/dragGesture/dragGesture.ts"],"sourcesContent":["import { useCallback, useMemo, useRef, useState } from 'react';\nimport { useLatest } from '@weasel-js/react';\nimport type { ModifierState } from '../types';\n\n/** Pointer position in both world (gesture-coord) and client (CSS-px) space. */\nexport interface DragGesturePoint {\n worldX: number;\n worldY: number;\n clientX: number;\n clientY: number;\n}\n\n/** Phase exposed on the public controller and inside ctx for callbacks. */\nexport type DragGesturePhase = 'idle' | 'pending' | 'active';\n\n/** Live gesture context handed to lifecycle callbacks. Within callbacks, ctx\n * reflects the moment the callback fires (e.g. ctx.phase is 'active' inside\n * onActivate, even though the move that triggered it was during 'pending'). */\nexport interface DragGestureCtx<TScratch = unknown> {\n start: DragGesturePoint;\n current: DragGesturePoint;\n modifiers: ModifierState;\n scratch: TScratch;\n /** 'pending' or 'active'. Never 'idle' inside a callback. */\n phase: 'pending' | 'active';\n}\n\n/** The context handed to `onEnd`, adding whether the gesture ever passed its\n * activation threshold. */\nexport interface DragGestureEndCtx<TScratch = unknown>\n extends DragGestureCtx<TScratch> {\n /** True if phase never reached 'active'. Wrappers without thresholdReached\n * always see false here (their gesture activates at start()). */\n wasSubThreshold: boolean;\n}\n\n/** Options for `useDragGesture`: when the gesture becomes active, and what to\n * do at each point in its lifecycle. */\nexport interface UseDragGestureOptions<TScratch = unknown> {\n initScratch?: () => TScratch;\n /** Predicate consulted on each move while phase === 'pending'. Return true\n * to transition to 'active'. The transition fires onActivate before the\n * triggering move's onMove. When omitted, gesture activates at start(). */\n thresholdReached?: (ctx: DragGestureCtx<TScratch>) => boolean;\n onStart?: (ctx: DragGestureCtx<TScratch>) => void;\n onActivate?: (ctx: DragGestureCtx<TScratch>) => void;\n onMove?: (ctx: DragGestureCtx<TScratch>) => void;\n onEnd?: (ctx: DragGestureEndCtx<TScratch>) => boolean | void;\n onCancel?: (ctx: DragGestureCtx<TScratch>) => void;\n onGestureStart?: () => void;\n onGestureEnd?: (committed: boolean) => void;\n}\n\n/** Drives a drag gesture. The owner feeds it pointer positions; it decides\n * when the drag has really begun and calls back accordingly. */\nexport interface DragGestureController {\n start(point: DragGesturePoint, modifiers: ModifierState): void;\n move(point: DragGesturePoint, modifiers: ModifierState): boolean;\n end(): void;\n cancel(): void;\n readonly phase: DragGesturePhase;\n readonly isActive: boolean;\n}\n\ninterface InternalState<TScratch> {\n phase: 'pending' | 'active';\n start: DragGesturePoint;\n current: DragGesturePoint;\n modifiers: ModifierState;\n scratch: TScratch;\n}\n\n/**\n * The base drag primitive: tracks a pointer from press to release, with an\n * optional threshold below which the gesture stays pending and commits\n * nothing.\n *\n * It is a gesture and only a gesture — it says where the pointer went, never\n * what that should do. `useDragRect` and `useDragRadial` build on it, and\n * actions decide what to make of the result.\n */\nexport function useDragGesture<TScratch = unknown>(\n options: UseDragGestureOptions<TScratch> = {},\n): DragGestureController {\n const optsRef = useLatest(options);\n const stateRef = useRef<InternalState<TScratch> | null>(null);\n const [, setPhaseTick] = useState(0);\n const phaseRef = useRef<DragGesturePhase>('idle');\n const bumpPhase = useCallback((next: DragGesturePhase) => {\n phaseRef.current = next;\n setPhaseTick((n) => n + 1);\n }, []);\n\n const buildCtx = useCallback((): DragGestureCtx<TScratch> => {\n const s = stateRef.current!;\n return {\n get start() { return s.start; },\n get current() { return s.current; },\n get modifiers() { return s.modifiers; },\n get scratch() { return s.scratch; },\n get phase() { return s.phase; },\n };\n }, []);\n\n const start = useCallback((point: DragGesturePoint, modifiers: ModifierState) => {\n const opts = optsRef.current;\n const scratch = opts.initScratch ? opts.initScratch() : ({} as TScratch);\n const initialPhase: 'pending' | 'active' = opts.thresholdReached ? 'pending' : 'active';\n stateRef.current = {\n phase: initialPhase,\n start: point,\n current: point,\n modifiers,\n scratch,\n };\n bumpPhase(initialPhase);\n opts.onGestureStart?.();\n opts.onStart?.(buildCtx());\n }, [buildCtx, bumpPhase, optsRef]);\n\n const move = useCallback((point: DragGesturePoint, modifiers: ModifierState): boolean => {\n const s = stateRef.current;\n if (!s) return false;\n s.current = point;\n s.modifiers = modifiers;\n const opts = optsRef.current;\n if (s.phase === 'pending' && opts.thresholdReached) {\n const ctx = buildCtx();\n if (opts.thresholdReached(ctx)) {\n s.phase = 'active';\n bumpPhase('active');\n opts.onActivate?.(buildCtx());\n }\n }\n opts.onMove?.(buildCtx());\n return true;\n }, [buildCtx, bumpPhase, optsRef]);\n\n const end = useCallback(() => {\n const s = stateRef.current;\n const opts = optsRef.current;\n if (!s)
|
|
1
|
+
{"version":3,"file":"dragGesture.js","names":["useDragGesture","optsRef","useLatest","options","stateRef","useRef","setPhaseTick","useState","phaseRef","bumpPhase","useCallback","next","n","buildCtx","s","start","opts","scratch","initialPhase","restart","point","move","modifiers","ctx","end","endCtx","committed","cancel","useMemo"],"sources":["../../../../src/interactions/gestures/dragGesture/dragGesture.ts"],"sourcesContent":["import { useCallback, useMemo, useRef, useState } from 'react';\nimport { useLatest } from '@weasel-js/react';\nimport type { ModifierState } from '../types';\n\n/** Pointer position in both world (gesture-coord) and client (CSS-px) space. */\nexport interface DragGesturePoint {\n worldX: number;\n worldY: number;\n clientX: number;\n clientY: number;\n}\n\n/** Phase exposed on the public controller and inside ctx for callbacks. */\nexport type DragGesturePhase = 'idle' | 'pending' | 'active';\n\n/** Live gesture context handed to lifecycle callbacks. Within callbacks, ctx\n * reflects the moment the callback fires (e.g. ctx.phase is 'active' inside\n * onActivate, even though the move that triggered it was during 'pending'). */\nexport interface DragGestureCtx<TScratch = unknown> {\n start: DragGesturePoint;\n current: DragGesturePoint;\n modifiers: ModifierState;\n scratch: TScratch;\n /** 'pending' or 'active'. Never 'idle' inside a callback. */\n phase: 'pending' | 'active';\n}\n\n/** The context handed to `onEnd`, adding whether the gesture ever passed its\n * activation threshold. */\nexport interface DragGestureEndCtx<TScratch = unknown>\n extends DragGestureCtx<TScratch> {\n /** True if phase never reached 'active'. Wrappers without thresholdReached\n * always see false here (their gesture activates at start()). */\n wasSubThreshold: boolean;\n}\n\n/** Options for `useDragGesture`: when the gesture becomes active, and what to\n * do at each point in its lifecycle. */\nexport interface UseDragGestureOptions<TScratch = unknown> {\n initScratch?: () => TScratch;\n /** Predicate consulted on each move while phase === 'pending'. Return true\n * to transition to 'active'. The transition fires onActivate before the\n * triggering move's onMove. When omitted, gesture activates at start(). */\n thresholdReached?: (ctx: DragGestureCtx<TScratch>) => boolean;\n onStart?: (ctx: DragGestureCtx<TScratch>) => void;\n onActivate?: (ctx: DragGestureCtx<TScratch>) => void;\n onMove?: (ctx: DragGestureCtx<TScratch>) => void;\n onEnd?: (ctx: DragGestureEndCtx<TScratch>) => boolean | void;\n onCancel?: (ctx: DragGestureCtx<TScratch>) => void;\n /** Fired when a gesture opens. A `start()` that replaces a live gesture\n * does not fire it again. */\n onGestureStart?: () => void;\n /** Fired once per `onGestureStart`, when that gesture ends or cancels. */\n onGestureEnd?: (committed: boolean) => void;\n}\n\n/** Drives a drag gesture. The owner feeds it pointer positions; it decides\n * when the drag has really begun and calls back accordingly. */\nexport interface DragGestureController {\n start(point: DragGesturePoint, modifiers: ModifierState): void;\n move(point: DragGesturePoint, modifiers: ModifierState): boolean;\n end(): void;\n cancel(): void;\n readonly phase: DragGesturePhase;\n readonly isActive: boolean;\n}\n\ninterface InternalState<TScratch> {\n phase: 'pending' | 'active';\n start: DragGesturePoint;\n current: DragGesturePoint;\n modifiers: ModifierState;\n scratch: TScratch;\n}\n\n/**\n * The base drag primitive: tracks a pointer from press to release, with an\n * optional threshold below which the gesture stays pending and commits\n * nothing.\n *\n * It is a gesture and only a gesture — it says where the pointer went, never\n * what that should do. `useDragRect` and `useDragRadial` build on it, and\n * actions decide what to make of the result.\n */\nexport function useDragGesture<TScratch = unknown>(\n options: UseDragGestureOptions<TScratch> = {},\n): DragGestureController {\n const optsRef = useLatest(options);\n const stateRef = useRef<InternalState<TScratch> | null>(null);\n const [, setPhaseTick] = useState(0);\n const phaseRef = useRef<DragGesturePhase>('idle');\n const bumpPhase = useCallback((next: DragGesturePhase) => {\n phaseRef.current = next;\n setPhaseTick((n) => n + 1);\n }, []);\n\n const buildCtx = useCallback((): DragGestureCtx<TScratch> => {\n const s = stateRef.current!;\n return {\n get start() { return s.start; },\n get current() { return s.current; },\n get modifiers() { return s.modifiers; },\n get scratch() { return s.scratch; },\n get phase() { return s.phase; },\n };\n }, []);\n\n const start = useCallback((point: DragGesturePoint, modifiers: ModifierState) => {\n const opts = optsRef.current;\n const scratch = opts.initScratch ? opts.initScratch() : ({} as TScratch);\n const initialPhase: 'pending' | 'active' = opts.thresholdReached ? 'pending' : 'active';\n const restart = stateRef.current !== null;\n stateRef.current = {\n phase: initialPhase,\n start: point,\n current: point,\n modifiers,\n scratch,\n };\n bumpPhase(initialPhase);\n if (!restart) opts.onGestureStart?.();\n opts.onStart?.(buildCtx());\n }, [buildCtx, bumpPhase, optsRef]);\n\n const move = useCallback((point: DragGesturePoint, modifiers: ModifierState): boolean => {\n const s = stateRef.current;\n if (!s) return false;\n s.current = point;\n s.modifiers = modifiers;\n const opts = optsRef.current;\n if (s.phase === 'pending' && opts.thresholdReached) {\n const ctx = buildCtx();\n if (opts.thresholdReached(ctx)) {\n s.phase = 'active';\n bumpPhase('active');\n opts.onActivate?.(buildCtx());\n }\n }\n opts.onMove?.(buildCtx());\n return true;\n }, [buildCtx, bumpPhase, optsRef]);\n\n const end = useCallback(() => {\n const s = stateRef.current;\n const opts = optsRef.current;\n if (!s) return;\n const wasSubThreshold = s.phase === 'pending';\n const endCtx: DragGestureEndCtx<TScratch> = {\n get start() { return s.start; },\n get current() { return s.current; },\n get modifiers() { return s.modifiers; },\n get scratch() { return s.scratch; },\n get phase() { return s.phase; },\n wasSubThreshold,\n };\n let committed = false;\n try {\n const r = opts.onEnd?.(endCtx);\n committed = r !== false;\n } finally {\n stateRef.current = null;\n bumpPhase('idle');\n opts.onGestureEnd?.(committed);\n }\n }, [bumpPhase, optsRef]);\n\n const cancel = useCallback(() => {\n const s = stateRef.current;\n const opts = optsRef.current;\n if (!s) return;\n opts.onCancel?.(buildCtx());\n stateRef.current = null;\n bumpPhase('idle');\n opts.onGestureEnd?.(false);\n }, [buildCtx, bumpPhase, optsRef]);\n\n return useMemo<DragGestureController>(() => ({\n start, move, end, cancel,\n get phase() { return phaseRef.current; },\n get isActive() { return phaseRef.current !== 'idle'; },\n }), [start, move, end, cancel]);\n}\n"],"mappings":"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"}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import { clientToWorld as e } from "../../../core/viewport/clientToWorld.js";
|
|
2
|
+
//#region src/interactions/gestures/dragGesture/dragPointOf.ts
|
|
3
|
+
var t = {
|
|
4
|
+
x: 0,
|
|
5
|
+
y: 0,
|
|
6
|
+
scale: {
|
|
7
|
+
x: 1,
|
|
8
|
+
y: 1
|
|
9
|
+
}
|
|
10
|
+
};
|
|
11
|
+
function n(n, r, i = t) {
|
|
12
|
+
let [a, o] = e(n.clientX, n.clientY, r.getBoundingClientRect(), i);
|
|
13
|
+
return {
|
|
14
|
+
clientX: n.clientX,
|
|
15
|
+
clientY: n.clientY,
|
|
16
|
+
worldX: a,
|
|
17
|
+
worldY: o
|
|
18
|
+
};
|
|
19
|
+
}
|
|
20
|
+
//#endregion
|
|
21
|
+
export { n as dragPointOf };
|
|
22
|
+
|
|
23
|
+
//# sourceMappingURL=dragPointOf.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"dragPointOf.js","names":["IDENTITY","dragPointOf","worldX","worldY","clientToWorld","event","element","view"],"sources":["../../../../src/interactions/gestures/dragGesture/dragPointOf.ts"],"sourcesContent":["import { clientToWorld, type ViewLike } from 'core/viewport/clientToWorld';\nimport type { DragGesturePoint } from './dragGesture';\n\nconst IDENTITY: ViewLike = { x: 0, y: 0, scale: { x: 1, y: 1 } };\n\n/**\n * The {@link DragGesturePoint} a pointer event stands for, for feeding\n * `useDragGesture`, `useDragRect`, or `useDragRadial` from raw pointer\n * handlers. `element` is the surface the gesture is measured on. With no\n * `view`, world coordinates are the position inside the element in CSS pixels.\n */\nexport function dragPointOf(\n event: { clientX: number; clientY: number },\n element: { getBoundingClientRect(): { left: number; top: number } },\n view: ViewLike = IDENTITY,\n): DragGesturePoint {\n const [worldX, worldY] = clientToWorld(event.clientX, event.clientY, element.getBoundingClientRect(), view);\n return { clientX: event.clientX, clientY: event.clientY, worldX, worldY };\n}\n"],"mappings":";;AAGA,IAAMA,IAAqB;CAAE,GAAG;CAAG,GAAG;CAAG,OAAO;EAAE,GAAG;EAAG,GAAG;CAAE;AAAE;AAQ/D,SAAgBC,EACd,GACA,GACA,IAAiBD,GACC;CAClB,IAAM,CAACE,GAAQC,KAAUC,EAAcC,EAAM,SAASA,EAAM,SAASC,EAAQ,sBAAsB,GAAGC,CAAI;CAC1G,OAAO;EAAE,SAASF,EAAM;EAAS,SAASA,EAAM;EAAS;EAAQ;CAAO;AAC1E"}
|
|
@@ -1,46 +1,41 @@
|
|
|
1
1
|
import { useCallback as e, useEffect as t, useRef as n } from "react";
|
|
2
|
-
import {
|
|
2
|
+
import { useLatest as r } from "@weasel-js/react";
|
|
3
|
+
import { clientToCanvasRect as i, openPointerSession as a } from "@weasel-js/routing";
|
|
3
4
|
//#region src/interactions/gestures/handleDrag/handleDrag.ts
|
|
4
|
-
function
|
|
5
|
+
function o(e) {
|
|
5
6
|
return e instanceof SVGElement && e.ownerSVGElement ? e.ownerSVGElement : e;
|
|
6
7
|
}
|
|
7
|
-
function
|
|
8
|
-
let
|
|
8
|
+
function s(s) {
|
|
9
|
+
let c = r(s), l = n(null);
|
|
9
10
|
return t(() => () => {
|
|
10
|
-
|
|
11
|
+
l.current?.cancel();
|
|
11
12
|
}, []), { onPointerDown: e((e) => {
|
|
12
|
-
e.preventDefault(),
|
|
13
|
-
let t = e.currentTarget, n = (
|
|
14
|
-
let [
|
|
13
|
+
e.preventDefault(), l.current?.cancel();
|
|
14
|
+
let t = e.currentTarget, { getRect: n, onStart: r } = c.current, s = (n ? n(t) : o(t)).getBoundingClientRect(), u = (e, t) => {
|
|
15
|
+
let [n, r] = i(s, e, t);
|
|
15
16
|
return {
|
|
16
|
-
x:
|
|
17
|
-
y:
|
|
17
|
+
x: n,
|
|
18
|
+
y: r
|
|
18
19
|
};
|
|
19
|
-
},
|
|
20
|
-
|
|
20
|
+
}, d = !1;
|
|
21
|
+
l.current = a(t, e, {
|
|
21
22
|
onMove: (e) => {
|
|
22
|
-
|
|
23
|
+
d = !0, c.current.onMove(u(e.clientX, e.clientY), e);
|
|
23
24
|
},
|
|
24
25
|
onEnd: (e) => {
|
|
25
|
-
|
|
26
|
-
point:
|
|
27
|
-
moved:
|
|
26
|
+
l.current = null, c.current.onEnd?.({
|
|
27
|
+
point: u(e.clientX, e.clientY),
|
|
28
|
+
moved: d,
|
|
28
29
|
event: e
|
|
29
30
|
});
|
|
30
31
|
},
|
|
31
32
|
onCancel: (e) => {
|
|
32
|
-
|
|
33
|
+
l.current = null, c.current.onCancel?.(e);
|
|
33
34
|
}
|
|
34
|
-
}),
|
|
35
|
-
}, [
|
|
36
|
-
s,
|
|
37
|
-
c,
|
|
38
|
-
l,
|
|
39
|
-
u,
|
|
40
|
-
d
|
|
41
|
-
]) };
|
|
35
|
+
}), r?.(u(e.clientX, e.clientY), e);
|
|
36
|
+
}, [c]) };
|
|
42
37
|
}
|
|
43
38
|
//#endregion
|
|
44
|
-
export {
|
|
39
|
+
export { s as useHandleDrag };
|
|
45
40
|
|
|
46
41
|
//# sourceMappingURL=handleDrag.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"handleDrag.js","names":["defaultRectEl","target","useHandleDrag","opts","live","useRef","useEffect","useCallback","rect","getRect","localOf","x","y","clientToCanvasRect","clientX","clientY","moved","openPointerSession","
|
|
1
|
+
{"version":3,"file":"handleDrag.js","names":["defaultRectEl","target","useHandleDrag","optsRef","useLatest","opts","live","useRef","useEffect","useCallback","rect","getRect","localOf","x","y","clientToCanvasRect","clientX","clientY","moved","openPointerSession","ev","reason","onStart"],"sources":["../../../../src/interactions/gestures/handleDrag/handleDrag.ts"],"sourcesContent":["import { useCallback, useEffect, useRef } from 'react';\nimport { useLatest } from '@weasel-js/react';\nimport { clientToCanvasRect } from '@weasel-js/routing';\nimport { openPointerSession, type PointerSession, type PointerSessionCancelReason } from '@weasel-js/routing';\n\n/** A 2D point in the rect element's local coordinate space. */\nexport interface HandleDragPoint {\n x: number;\n y: number;\n}\n\n/** What a released drag reports. */\nexport interface HandleDragEnd {\n /** Where the pointer was let go, in the rect element's local space. */\n point: HandleDragPoint;\n /** False when the pointer never moved — a press, not a drag. Commit-on-end\n * consumers use this to tell an edit from a stray click. */\n moved: boolean;\n event: PointerEvent;\n}\n\n/** Options for {@link useHandleDrag}. */\nexport interface UseHandleDragOptions<T extends HTMLElement | SVGElement> {\n /** Called on every `pointermove` with coords local to the rect element (see `getRect`). */\n onMove: (p: HandleDragPoint, e: PointerEvent) => void;\n /** Called on `pointerdown` with the same local coords passed to `onMove`. */\n onStart?: (p: HandleDragPoint, e: React.PointerEvent<T>) => void;\n /** The pointer was released. Not called when the drag is cancelled — a\n * cancelled gesture is not an edit, and conflating the two made every\n * commit-on-end consumer sniff the event type to tell them apart. */\n onEnd?: (end: HandleDragEnd) => void;\n /** The drag ended without a release: the pointer was cancelled, capture was\n * lost, or the component unmounted mid-gesture. */\n onCancel?: (reason: PointerSessionCancelReason) => void;\n /**\n * Element whose `getBoundingClientRect()` defines the local coordinate\n * space. Defaults to the handle target's owning `<svg>` if it has one,\n * otherwise the target itself.\n */\n getRect?: (target: T) => Element;\n}\n\n/** Return shape of {@link useHandleDrag}. */\nexport interface UseHandleDragReturn<T extends HTMLElement | SVGElement> {\n onPointerDown: (e: React.PointerEvent<T>) => void;\n}\n\nfunction defaultRectEl(target: HTMLElement | SVGElement): Element {\n if (target instanceof SVGElement && target.ownerSVGElement) {\n return target.ownerSVGElement;\n }\n return target;\n}\n\n/**\n * Pointer drag for SVG/HTML handles. On `pointerdown` opens a\n * {@link openPointerSession | pointer session} on the handle, then forwards\n * every move to `onMove` with coordinates local to the rect-providing element\n * (defaulting to the handle's owning `<svg>`).\n *\n * The rect is measured once, at the press: a handle that moves under its own\n * drag must not shift the space its coordinates are reported in.\n */\nexport function useHandleDrag<T extends HTMLElement | SVGElement>(\n opts: UseHandleDragOptions<T>,\n): UseHandleDragReturn<T> {\n // A drag outlives the render that saw its press, and its callbacks have to\n // be the current ones: `onEnd` commonly closes over state `onMove` set.\n const optsRef = useLatest(opts);\n const live = useRef<PointerSession | null>(null);\n\n useEffect(() => () => { live.current?.cancel(); }, []);\n\n const onPointerDown = useCallback(\n (e: React.PointerEvent<T>) => {\n e.preventDefault();\n live.current?.cancel();\n\n const target = e.currentTarget;\n const { getRect, onStart } = optsRef.current;\n const rectEl = getRect ? getRect(target) : defaultRectEl(target);\n const rect = rectEl.getBoundingClientRect();\n const localOf = (clientX: number, clientY: number): HandleDragPoint => {\n const [x, y] = clientToCanvasRect(rect, clientX, clientY);\n return { x, y };\n };\n\n let moved = false;\n live.current = openPointerSession(target, e, {\n onMove: (ev) => {\n moved = true;\n optsRef.current.onMove(localOf(ev.clientX, ev.clientY), ev);\n },\n onEnd: (ev) => {\n live.current = null;\n optsRef.current.onEnd?.({ point: localOf(ev.clientX, ev.clientY), moved, event: ev });\n },\n onCancel: (reason) => {\n live.current = null;\n optsRef.current.onCancel?.(reason);\n },\n });\n\n onStart?.(localOf(e.clientX, e.clientY), e);\n },\n [optsRef],\n );\n\n return { onPointerDown };\n}\n"],"mappings":";;;;AA+CA,SAASA,EAAc,GAA2C;CAIhE,OAHIC,aAAkB,cAAcA,EAAO,kBAClCA,EAAO,kBAETA;AACT;AAWA,SAAgBC,EACd,GACwB;CAGxB,IAAMC,IAAUC,EAAUC,CAAI,GACxBC,IAAOC,EAA8B,IAAI;CAuC/C,OArCAC,cAAsB;EAAE,EAAK,SAAS,OAAO;CAAG,GAAG,CAAC,CAAC,GAqC9C,EAAE,eAnCaC,GACnB,MAA6B;EAE5B,AADA,EAAE,eAAe,GACjBH,EAAK,SAAS,OAAO;EAErB,IAAML,IAAS,EAAE,eACX,EAAE,YAAS,eAAYE,EAAQ,SAE/BO,KADSC,IAAUA,EAAQV,CAAM,IAAID,EAAcC,CAAM,EAAA,CAC3C,sBAAsB,GACpCW,KAAW,GAAiB,MAAqC;GACrE,IAAM,CAACC,GAAGC,KAAKC,EAAmBL,GAAMM,GAASC,CAAO;GACxD,OAAO;IAAE;IAAG;GAAE;EAChB,GAEIC,IAAQ;EAgBZ,AAfA,EAAK,UAAUC,EAAmBlB,GAAQ,GAAG;GAC3C,SAAS,MAAO;IAEd,AADA,IAAQ,IACRE,EAAQ,QAAQ,OAAOS,EAAQQ,EAAG,SAASA,EAAG,OAAO,GAAGA,CAAE;GAC5D;GACA,QAAQ,MAAO;IAEb,AADA,EAAK,UAAU,MACfjB,EAAQ,QAAQ,QAAQ;KAAE,OAAOS,EAAQQ,EAAG,SAASA,EAAG,OAAO;KAAG;KAAO,OAAOA;IAAG,CAAC;GACtF;GACA,WAAW,MAAW;IAEpB,AADA,EAAK,UAAU,MACfjB,EAAQ,QAAQ,WAAWkB,CAAM;GACnC;EACF,CAAC,GAEDC,IAAUV,EAAQ,EAAE,SAAS,EAAE,OAAO,GAAG,CAAC;CAC5C,GACA,CAACT,CAAO,CAGD,EAAc;AACzB"}
|
|
@@ -72,7 +72,7 @@ function p(o, s) {
|
|
|
72
72
|
let n = {
|
|
73
73
|
clientX: e.clientX,
|
|
74
74
|
clientY: e.clientY
|
|
75
|
-
}, r = null, s = !1;
|
|
75
|
+
}, r = null, s = !1, d = null;
|
|
76
76
|
l.current = i(t, e, {
|
|
77
77
|
onMove: (e) => {
|
|
78
78
|
if (r) {
|
|
@@ -82,18 +82,20 @@ function p(o, s) {
|
|
|
82
82
|
if (s || !a(n, e)) return;
|
|
83
83
|
s = !0;
|
|
84
84
|
let i = o();
|
|
85
|
-
|
|
85
|
+
if (!i) return;
|
|
86
|
+
let l = (e) => {
|
|
86
87
|
e.stopPropagation(), e.preventDefault();
|
|
87
|
-
}
|
|
88
|
+
};
|
|
89
|
+
t.addEventListener("click", l, {
|
|
88
90
|
capture: !0,
|
|
89
91
|
once: !0
|
|
90
|
-
}), r = f(i, t, e.clientX, e.clientY, c.current?.createGhost ?? u)
|
|
92
|
+
}), d = () => t.removeEventListener("click", l, { capture: !0 }), r = f(i, t, e.clientX, e.clientY, c.current?.createGhost ?? u);
|
|
91
93
|
},
|
|
92
94
|
onEnd: (e) => {
|
|
93
|
-
l.current = null, r?.drop(e);
|
|
95
|
+
l.current = null, r?.drop(e), d && setTimeout(d, 0);
|
|
94
96
|
},
|
|
95
97
|
onCancel: () => {
|
|
96
|
-
l.current = null, r?.cancel();
|
|
98
|
+
l.current = null, r?.cancel(), d?.();
|
|
97
99
|
}
|
|
98
100
|
}, { capture: !1 });
|
|
99
101
|
}, [o, c]),
|