@weasel-js/core 1.10.0 → 1.10.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +168 -0
- package/README.md +33 -0
- package/dist/affordances/composeAffordanceLayer.js +21 -21
- package/dist/affordances/composeAffordanceLayer.js.map +1 -1
- package/dist/affordances/hitAffordanceRegions.js +48 -32
- package/dist/affordances/hitAffordanceRegions.js.map +1 -1
- package/dist/affordances/pathAnchors.js +50 -28
- package/dist/affordances/pathAnchors.js.map +1 -1
- package/dist/affordances/rotateCursor.js +12 -0
- package/dist/affordances/rotateCursor.js.map +1 -0
- package/dist/affordances/rotationHandle.js +40 -43
- package/dist/affordances/rotationHandle.js.map +1 -1
- package/dist/animation/rig/rigNode.js +9 -3
- package/dist/animation/rig/rigNode.js.map +1 -1
- package/dist/animation/rig/rigSeat.js +46 -13
- package/dist/animation/rig/rigSeat.js.map +1 -1
- package/dist/animation/rig/skinBinding.js +22 -14
- package/dist/animation/rig/skinBinding.js.map +1 -1
- package/dist/barrel/canvas.js +29 -28
- package/dist/barrel/interactions.js +33 -32
- package/dist/barrel/paths.js +11 -10
- package/dist/barrel/routing.js +49 -48
- package/dist/barrel/scene.js +10 -10
- package/dist/barrel/viewport.js +24 -21
- package/dist/canvas/Canvas.js +6 -17
- package/dist/canvas/Canvas.js.map +1 -1
- package/dist/canvas/CanvasView.js +34 -37
- package/dist/canvas/CanvasView.js.map +1 -1
- package/dist/canvas/CursorCoordsHud.js +3 -3
- package/dist/canvas/CursorCoordsHud.js.map +1 -1
- package/dist/canvas/DrawCanvas.js +3 -3
- package/dist/canvas/DrawCanvas.js.map +1 -1
- package/dist/canvas/SceneCanvas/PointerProviderIfRoot.js +24 -23
- package/dist/canvas/SceneCanvas/PointerProviderIfRoot.js.map +1 -1
- package/dist/canvas/SceneCanvas/StandardActionsRegistrar.js +40 -49
- package/dist/canvas/SceneCanvas/StandardActionsRegistrar.js.map +1 -1
- package/dist/canvas/SceneCanvas/defaultNodeProperties.js +297 -259
- package/dist/canvas/SceneCanvas/defaultNodeProperties.js.map +1 -1
- package/dist/canvas/SceneCanvas/features.js +3 -24
- package/dist/canvas/SceneCanvas/features.js.map +1 -1
- package/dist/canvas/SceneCanvas/insertPreviewCommands.js +97 -0
- package/dist/canvas/SceneCanvas/insertPreviewCommands.js.map +1 -0
- package/dist/canvas/SceneCanvas/poseGeometry.js.map +1 -1
- package/dist/canvas/SceneCanvas/props.js.map +1 -1
- package/dist/canvas/SceneCanvas/scenePointQuery.js +50 -0
- package/dist/canvas/SceneCanvas/scenePointQuery.js.map +1 -0
- package/dist/canvas/SceneCanvas/shapeGeneratorProperties.js +52 -0
- package/dist/canvas/SceneCanvas/shapeGeneratorProperties.js.map +1 -0
- package/dist/canvas/SceneCanvas/useActionTunings.js +17 -0
- package/dist/canvas/SceneCanvas/useActionTunings.js.map +1 -0
- package/dist/canvas/SceneCanvas/useCanvasCamera.js +37 -29
- package/dist/canvas/SceneCanvas/useCanvasCamera.js.map +1 -1
- package/dist/canvas/SceneCanvas/useCanvasDispatcher.js +11 -11
- package/dist/canvas/SceneCanvas/useCanvasDispatcher.js.map +1 -1
- package/dist/canvas/SceneCanvas/useDispatcherOverlayLayer.js +45 -109
- package/dist/canvas/SceneCanvas/useDispatcherOverlayLayer.js.map +1 -1
- package/dist/canvas/SceneCanvas/usePreviewGhostLayer.js +49 -41
- package/dist/canvas/SceneCanvas/usePreviewGhostLayer.js.map +1 -1
- package/dist/canvas/SceneCanvas/useSceneSelectTool.js +64 -96
- package/dist/canvas/SceneCanvas/useSceneSelectTool.js.map +1 -1
- package/dist/canvas/SceneCanvas/worldPointAt.js +3 -4
- package/dist/canvas/SceneCanvas/worldPointAt.js.map +1 -1
- package/dist/canvas/SceneCanvas.js +77 -80
- package/dist/canvas/SceneCanvas.js.map +1 -1
- package/dist/canvas/SceneViewCanvas.js +3 -3
- package/dist/canvas/SceneViewCanvas.js.map +1 -1
- package/dist/canvas/SurfaceCanvas.js +40 -0
- package/dist/canvas/SurfaceCanvas.js.map +1 -0
- package/dist/canvas/adapterDerivedPath.js +13 -13
- package/dist/canvas/adapterDerivedPath.js.map +1 -1
- package/dist/canvas/adapterPickSource.js +34 -0
- package/dist/canvas/adapterPickSource.js.map +1 -0
- package/dist/canvas/affordanceAt.js +1 -1
- package/dist/canvas/affordanceAt.js.map +1 -1
- package/dist/canvas/buildSceneLayer.js.map +1 -1
- package/dist/canvas/buildSceneTree.js +56 -34
- package/dist/canvas/buildSceneTree.js.map +1 -1
- package/dist/canvas/copiesAbove.js +27 -0
- package/dist/canvas/copiesAbove.js.map +1 -0
- package/dist/canvas/defaultDrawOne.js +24 -23
- package/dist/canvas/defaultDrawOne.js.map +1 -1
- package/dist/canvas/deps/editAnchors.js +45 -50
- package/dist/canvas/deps/editAnchors.js.map +1 -1
- package/dist/canvas/deps/hitTestArea.js +30 -15
- package/dist/canvas/deps/hitTestArea.js.map +1 -1
- package/dist/canvas/deps/insert.js +134 -100
- package/dist/canvas/deps/insert.js.map +1 -1
- package/dist/canvas/deps/layout.js +9 -15
- package/dist/canvas/deps/layout.js.map +1 -1
- package/dist/canvas/derivedPath.js +53 -29
- package/dist/canvas/derivedPath.js.map +1 -1
- package/dist/canvas/insertPreviewExtent.js +33 -31
- package/dist/canvas/insertPreviewExtent.js.map +1 -1
- package/dist/canvas/overChildren.js +29 -0
- package/dist/canvas/overChildren.js.map +1 -0
- package/dist/canvas/paintedCursorLayer.js.map +1 -1
- package/dist/canvas/pickReach.js +23 -0
- package/dist/canvas/pickReach.js.map +1 -0
- package/dist/canvas/pickWalk.js +51 -80
- package/dist/canvas/pickWalk.js.map +1 -1
- package/dist/canvas/sceneAdapter.js +14 -35
- package/dist/canvas/sceneAdapter.js.map +1 -1
- package/dist/canvas/sceneSlotWiring.js +11 -10
- package/dist/canvas/sceneSlotWiring.js.map +1 -1
- package/dist/canvas/sceneViewRender.js +38 -44
- package/dist/canvas/sceneViewRender.js.map +1 -1
- package/dist/canvas/useCanvasView.js +42 -44
- package/dist/canvas/useCanvasView.js.map +1 -1
- package/dist/canvas/useSceneAdapter.js +22 -0
- package/dist/canvas/useSceneAdapter.js.map +1 -0
- package/dist/canvas/useSurfaceInput.js +13 -16
- package/dist/canvas/useSurfaceInput.js.map +1 -1
- package/dist/canvas/viewRegistry.js +31 -23
- package/dist/canvas/viewRegistry.js.map +1 -1
- package/dist/canvas/wrapNodeOutput.js +7 -2
- package/dist/canvas/wrapNodeOutput.js.map +1 -1
- package/dist/clipboard.d.ts +1 -1
- package/dist/{clone-2a5hVbBd.d.ts → clone-C0eADtS0.d.ts} +13 -13
- package/dist/clone.d.ts +2 -2
- package/dist/core/geometry/poseDescriptor.js +49 -23
- package/dist/core/geometry/poseDescriptor.js.map +1 -1
- package/dist/core/geometry/regionHit.js +2 -2
- package/dist/core/geometry/regionHit.js.map +1 -1
- package/dist/core/geometry/targetFrame.js.map +1 -1
- package/dist/core/layers/children.js +1 -3
- package/dist/core/layers/children.js.map +1 -1
- package/dist/core/ops/create.js +2 -2
- package/dist/core/ops/create.js.map +1 -1
- package/dist/core/ops/delete.js +19 -23
- package/dist/core/ops/delete.js.map +1 -1
- package/dist/core/ops/reorder/index.js +3 -7
- package/dist/core/ops/reorder/index.js.map +1 -1
- package/dist/core/ops/reorder/setChildOrder.js +2 -4
- package/dist/core/ops/reorder/setChildOrder.js.map +1 -1
- package/dist/core/ops/reparent.js +0 -1
- package/dist/core/ops/reparent.js.map +1 -1
- package/dist/core/ops/slot.js +3 -6
- package/dist/core/ops/slot.js.map +1 -1
- package/dist/core/pages/fitViewToPage.js +15 -0
- package/dist/core/pages/fitViewToPage.js.map +1 -0
- package/dist/core/pages/pages.js +65 -0
- package/dist/core/pages/pages.js.map +1 -0
- package/dist/core/pages/pagesLayer.js +27 -0
- package/dist/core/pages/pagesLayer.js.map +1 -0
- package/dist/core/paint/meshKindLazy.js +2 -2
- package/dist/core/paint/meshKindLazy.js.map +1 -1
- package/dist/core/scene/NodeProperties.js.map +1 -1
- package/dist/core/scene/composeFrame.js.map +1 -1
- package/dist/core/scene/composePose.js +58 -20
- package/dist/core/scene/composePose.js.map +1 -1
- package/dist/core/scene/effectivePose.js +5 -1
- package/dist/core/scene/effectivePose.js.map +1 -1
- package/dist/core/scene/historyFacade.js +19 -13
- package/dist/core/scene/historyFacade.js.map +1 -1
- package/dist/core/scene/nodeFnFields.js +7 -0
- package/dist/core/scene/nodeFnFields.js.map +1 -1
- package/dist/core/scene/outerOps.js +2 -1
- package/dist/core/scene/outerOps.js.map +1 -1
- package/dist/core/scene/reconcileSpecs.js +1 -1
- package/dist/core/scene/reconcileSpecs.js.map +1 -1
- package/dist/core/scene/sceneRecording.js +2 -1
- package/dist/core/scene/sceneRecording.js.map +1 -1
- package/dist/core/scene/types.js.map +1 -1
- package/dist/core/viewport/screenSlop.js.map +1 -1
- package/dist/core/viewport/useDecayLoop.js +28 -30
- package/dist/core/viewport/useDecayLoop.js.map +1 -1
- package/dist/core/viewport/useNodeOverlayFrame.js.map +1 -1
- package/dist/core/viewport/useViewAnimation.js +70 -69
- package/dist/core/viewport/useViewAnimation.js.map +1 -1
- package/dist/core/viewport/view.js +8 -5
- package/dist/core/viewport/view.js.map +1 -1
- package/dist/core/viewport/zoomAt.js +11 -2
- package/dist/core/viewport/zoomAt.js.map +1 -1
- package/dist/{cornerHandles-BEshc4z3.d.ts → cornerHandles-BSKbyuvQ.d.ts} +1 -1
- package/dist/features/paths/editablePath.js +24 -8
- package/dist/features/paths/editablePath.js.map +1 -1
- package/dist/features/paths/index.js +4 -4
- package/dist/features/paths/shapeGenerator.js +89 -0
- package/dist/features/paths/shapeGenerator.js.map +1 -0
- package/dist/features/paths/usePathEdit.js +13 -13
- package/dist/features/poseRun/usePoseRun.js +25 -25
- package/dist/features/poseRun/usePoseRun.js.map +1 -1
- package/dist/features/text/useSceneTextEdit.js +82 -64
- package/dist/features/text/useSceneTextEdit.js.map +1 -1
- package/dist/features/viewports/viewResolver.js +28 -24
- package/dist/features/viewports/viewResolver.js.map +1 -1
- package/dist/icons/SliceIcon.js +24 -0
- package/dist/icons/SliceIcon.js.map +1 -0
- package/dist/index.d.ts +956 -581
- package/dist/index.js +260 -251
- package/dist/interactions/actions/align/align.js +9 -9
- package/dist/interactions/actions/align/align.js.map +1 -1
- package/dist/interactions/actions/booleans/booleans.js +18 -18
- package/dist/interactions/actions/booleans/booleans.js.map +1 -1
- package/dist/interactions/actions/booleans/operands.js.map +1 -1
- package/dist/interactions/actions/clone/action.js +35 -30
- package/dist/interactions/actions/clone/action.js.map +1 -1
- package/dist/interactions/actions/defaults/anchorEditing.js +56 -59
- package/dist/interactions/actions/defaults/anchorEditing.js.map +1 -1
- package/dist/interactions/actions/defaults/anchorHandles.js +42 -0
- package/dist/interactions/actions/defaults/anchorHandles.js.map +1 -0
- package/dist/interactions/actions/defaults/anchorJoin.js +92 -0
- package/dist/interactions/actions/defaults/anchorJoin.js.map +1 -0
- package/dist/interactions/actions/defaults/bendSegment.js +46 -0
- package/dist/interactions/actions/defaults/bendSegment.js.map +1 -0
- package/dist/interactions/actions/defaults/copySubtree.js +1 -1
- package/dist/interactions/actions/defaults/copySubtree.js.map +1 -1
- package/dist/interactions/actions/defaults/duplicate.js +32 -17
- package/dist/interactions/actions/defaults/duplicate.js.map +1 -1
- package/dist/interactions/actions/defaults/enterPathEdit.js +19 -7
- package/dist/interactions/actions/defaults/enterPathEdit.js.map +1 -1
- package/dist/interactions/actions/defaults/icons/anchorIcons.js +75 -0
- package/dist/interactions/actions/defaults/icons/anchorIcons.js.map +1 -0
- package/dist/interactions/actions/defaults/icons/editIcons.js +35 -8
- package/dist/interactions/actions/defaults/icons/editIcons.js.map +1 -1
- package/dist/interactions/actions/defaults/insertPathAnchor.js +16 -31
- package/dist/interactions/actions/defaults/insertPathAnchor.js.map +1 -1
- package/dist/interactions/actions/defaults/nudge.js +28 -23
- package/dist/interactions/actions/defaults/nudge.js.map +1 -1
- package/dist/interactions/actions/defaults/pinchZoom.js +29 -29
- package/dist/interactions/actions/defaults/pinchZoom.js.map +1 -1
- package/dist/interactions/actions/defaults/segmentUnder.js +22 -0
- package/dist/interactions/actions/defaults/segmentUnder.js.map +1 -0
- package/dist/interactions/actions/defaults/viewportZoom.js +82 -79
- package/dist/interactions/actions/defaults/viewportZoom.js.map +1 -1
- package/dist/interactions/actions/distribute/distribute.js +8 -8
- package/dist/interactions/actions/distribute/distribute.js.map +1 -1
- package/dist/interactions/actions/edit-anchors/action.js +58 -55
- package/dist/interactions/actions/edit-anchors/action.js.map +1 -1
- package/dist/interactions/actions/edit-anchors/preview.js +26 -0
- package/dist/interactions/actions/edit-anchors/preview.js.map +1 -0
- package/dist/interactions/actions/edit-anchors/symmetry.js +11 -0
- package/dist/interactions/actions/edit-anchors/symmetry.js.map +1 -0
- package/dist/interactions/actions/flip/action.js.map +1 -1
- package/dist/interactions/actions/geometryProjection.js.map +1 -1
- package/dist/interactions/actions/insert/action.js +37 -30
- package/dist/interactions/actions/insert/action.js.map +1 -1
- package/dist/interactions/actions/insert/frame.js +9 -2
- package/dist/interactions/actions/insert/frame.js.map +1 -1
- package/dist/interactions/actions/insert/repositionAction.js +31 -0
- package/dist/interactions/actions/insert/repositionAction.js.map +1 -0
- package/dist/interactions/actions/lasso-select/action.js +32 -32
- package/dist/interactions/actions/move/action.js +29 -25
- package/dist/interactions/actions/move/action.js.map +1 -1
- package/dist/interactions/actions/move/behaviors/snapToContainer.js +12 -6
- package/dist/interactions/actions/move/behaviors/snapToContainer.js.map +1 -1
- package/dist/interactions/actions/move/capture.js +32 -23
- package/dist/interactions/actions/move/capture.js.map +1 -1
- package/dist/interactions/actions/move/frame.js +2 -14
- package/dist/interactions/actions/move/frame.js.map +1 -1
- package/dist/interactions/actions/move/session.js +1 -1
- package/dist/interactions/actions/move/session.js.map +1 -1
- package/dist/interactions/actions/move/translate.js.map +1 -1
- package/dist/interactions/actions/outlines/createOutlines.js.map +1 -1
- package/dist/interactions/actions/outlines/replaceWithPaths.js +13 -13
- package/dist/interactions/actions/outlines/replaceWithPaths.js.map +1 -1
- package/dist/interactions/actions/outlines/strokeRegion.js.map +1 -1
- package/dist/interactions/actions/pathCommands/cutJoin.js +102 -0
- package/dist/interactions/actions/pathCommands/cutJoin.js.map +1 -0
- package/dist/interactions/actions/pathCommands/livePathEdit.js +64 -0
- package/dist/interactions/actions/pathCommands/livePathEdit.js.map +1 -0
- package/dist/interactions/actions/pathCommands/pathNodes.js +99 -0
- package/dist/interactions/actions/pathCommands/pathNodes.js.map +1 -0
- package/dist/interactions/actions/pathCommands/simplifyOffset.js +42 -0
- package/dist/interactions/actions/pathCommands/simplifyOffset.js.map +1 -0
- package/dist/interactions/actions/resize/action.js +31 -20
- package/dist/interactions/actions/resize/action.js.map +1 -1
- package/dist/interactions/actions/resize/commit.js.map +1 -1
- package/dist/interactions/actions/resize/frame.js +29 -15
- package/dist/interactions/actions/resize/frame.js.map +1 -1
- package/dist/interactions/actions/resize/replay.js +47 -0
- package/dist/interactions/actions/resize/replay.js.map +1 -0
- package/dist/interactions/actions/resize/session.js +49 -35
- package/dist/interactions/actions/resize/session.js.map +1 -1
- package/dist/interactions/actions/resolveOverlays.js +2 -1
- package/dist/interactions/actions/resolveOverlays.js.map +1 -1
- package/dist/interactions/actions/rotate/action.js +40 -25
- package/dist/interactions/actions/rotate/action.js.map +1 -1
- package/dist/interactions/actions/rotate/frame.js +1 -1
- package/dist/interactions/actions/rotate/frame.js.map +1 -1
- package/dist/interactions/actions/rotate/replay.js +22 -0
- package/dist/interactions/actions/rotate/replay.js.map +1 -0
- package/dist/interactions/actions/rotate/session.js +42 -32
- package/dist/interactions/actions/rotate/session.js.map +1 -1
- package/dist/interactions/actions/transform-again/action.js +63 -0
- package/dist/interactions/actions/transform-again/action.js.map +1 -0
- package/dist/interactions/actions/transform-again/memory.js +35 -0
- package/dist/interactions/actions/transform-again/memory.js.map +1 -0
- package/dist/interactions/actions/useStandardActions.js +101 -83
- package/dist/interactions/actions/useStandardActions.js.map +1 -1
- package/dist/move.d.ts +4 -4
- package/dist/{originProjection-PPT88jZv.d.ts → originProjection-CoNVpITV.d.ts} +1 -1
- package/dist/resize.d.ts +3 -3
- package/dist/style.css +1 -1
- package/dist/tools/builtin/ellipse/useEllipseTool.js +16 -15
- package/dist/tools/builtin/ellipse/useEllipseTool.js.map +1 -1
- package/dist/tools/builtin/line/useLineTool.js +16 -15
- package/dist/tools/builtin/line/useLineTool.js.map +1 -1
- package/dist/tools/builtin/pen/usePenTool.js +111 -111
- package/dist/tools/builtin/pen/usePenTool.js.map +1 -1
- package/dist/tools/builtin/pickTopMostHit.js +11 -14
- package/dist/tools/builtin/pickTopMostHit.js.map +1 -1
- package/dist/tools/builtin/polygon/usePolygonTool.js +17 -15
- package/dist/tools/builtin/polygon/usePolygonTool.js.map +1 -1
- package/dist/tools/builtin/rect/useRectTool.js +15 -14
- package/dist/tools/builtin/rect/useRectTool.js.map +1 -1
- package/dist/tools/builtin/select/adapterPointQuery.js +22 -18
- package/dist/tools/builtin/select/adapterPointQuery.js.map +1 -1
- package/dist/tools/builtin/select/selectionContributions.js +1 -1
- package/dist/tools/builtin/select/selectionContributions.js.map +1 -1
- package/dist/tools/builtin/select/useSelectTool.js +2 -1
- package/dist/tools/builtin/select/useSelectTool.js.map +1 -1
- package/dist/tools/builtin/slice/useSliceTool.js +42 -40
- package/dist/tools/builtin/slice/useSliceTool.js.map +1 -1
- package/dist/tools/builtin/star/useStarTool.js +18 -16
- package/dist/tools/builtin/star/useStarTool.js.map +1 -1
- package/dist/tools/builtin/text/useTextTool.js +2 -2
- package/dist/tools/builtin/text/useTextTool.js.map +1 -1
- package/dist/{types-CIKDwlsP.d.ts → types-DBbbCy0i.d.ts} +22 -15
- package/dist/version.js +1 -1
- package/package.json +22 -22
- package/dist/canvas/surface.module.js +0 -6
- package/dist/canvas/surface.module.js.map +0 -1
- package/dist/canvas/surfaceBox.js +0 -16
- package/dist/canvas/surfaceBox.js.map +0 -1
- package/dist/layout/arrivals.js +0 -33
- package/dist/layout/arrivals.js.map +0 -1
|
@@ -2,20 +2,33 @@ import { composesFrames as e } from "../../../core/scene/composeFrame.js";
|
|
|
2
2
|
import { translatePoseViaDescriptor as t } from "../../../core/geometry/poseDescriptor.js";
|
|
3
3
|
import { nodeDescriptors as n, poseDescriptorOf as r } from "../poseDescriptorDep.js";
|
|
4
4
|
import { defaultCommitAdapter as i } from "../defaultCommitAdapter.js";
|
|
5
|
-
import {
|
|
6
|
-
import {
|
|
7
|
-
import {
|
|
8
|
-
import {
|
|
5
|
+
import { recordTransform as a } from "../transform-again/memory.js";
|
|
6
|
+
import { copySelection as o } from "./copySubtree.js";
|
|
7
|
+
import { DuplicateIcon as s } from "./icons/editIcons.js";
|
|
8
|
+
import { requiresSelection as c } from "./requiresSelection.js";
|
|
9
|
+
import { createElement as l } from "react";
|
|
9
10
|
//#region src/interactions/actions/defaults/duplicate.ts
|
|
10
|
-
var
|
|
11
|
+
var u = 12;
|
|
12
|
+
function d(a, s, c, l = "Duplicate") {
|
|
13
|
+
let u = a.selection, d = a.scene, f = a.applyOps;
|
|
14
|
+
if (!u || !d) return null;
|
|
15
|
+
let p = u.get();
|
|
16
|
+
if (p.length === 0) return null;
|
|
17
|
+
let m = n(d, r(a.poseDescriptor)), h = !e(d.composition), { ops: g, copies: _ } = o(d, p, (e, n, r) => r || h ? t(n.pose, s, c, m(e)) : n.pose, l);
|
|
18
|
+
return g.length === 0 ? null : (f ? f(g, l) : d.applyBatch(g, l, i(d, u.adapterMethods)), u.set(_), _);
|
|
19
|
+
}
|
|
20
|
+
var f = {
|
|
11
21
|
id: "duplicate",
|
|
12
22
|
label: "Duplicate",
|
|
13
|
-
icon:
|
|
23
|
+
icon: l(s),
|
|
14
24
|
group: "edit",
|
|
15
25
|
defaultBinding: {
|
|
16
26
|
kind: "key",
|
|
17
|
-
key: "d",
|
|
18
|
-
mods: {
|
|
27
|
+
key: ["d", "D"],
|
|
28
|
+
mods: {
|
|
29
|
+
mod: !0,
|
|
30
|
+
shift: !0
|
|
31
|
+
}
|
|
19
32
|
},
|
|
20
33
|
eligible: { capability: ["edits-page", "creates-selection"] },
|
|
21
34
|
requires: [
|
|
@@ -26,18 +39,20 @@ var l = 12, u = {
|
|
|
26
39
|
],
|
|
27
40
|
invoker: {
|
|
28
41
|
timing: "immediate",
|
|
29
|
-
run: (
|
|
30
|
-
let
|
|
31
|
-
if (!
|
|
32
|
-
let
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
42
|
+
run: (e) => {
|
|
43
|
+
let t = e.scene, n = e.selection;
|
|
44
|
+
if (!t || !n) return;
|
|
45
|
+
let r = d(e, u, u);
|
|
46
|
+
r && a(t, {
|
|
47
|
+
kind: "duplicate",
|
|
48
|
+
dx: u,
|
|
49
|
+
dy: u
|
|
50
|
+
}, r);
|
|
36
51
|
}
|
|
37
52
|
},
|
|
38
|
-
enabled:
|
|
53
|
+
enabled: c
|
|
39
54
|
};
|
|
40
55
|
//#endregion
|
|
41
|
-
export { u as duplicateAction };
|
|
56
|
+
export { u as DUPLICATE_OFFSET, f as duplicateAction, d as duplicateSelection };
|
|
42
57
|
|
|
43
58
|
//# sourceMappingURL=duplicate.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"duplicate.js","names":["DUPLICATE_OFFSET","
|
|
1
|
+
{"version":3,"file":"duplicate.js","names":["DUPLICATE_OFFSET","duplicateSelection","selection","deps","scene","applyOps","ids","descriptorOf","nodeDescriptors","poseDescriptorOf","offsetDescendants","composesFrames","copySelection","isRoot","translatePoseViaDescriptor","node","dx","dy","id","label","ops","defaultCommitAdapter","copies","duplicateAction","createElement","DuplicateIcon","recordTransform","requiresSelection"],"sources":["../../../../src/interactions/actions/defaults/duplicate.ts"],"sourcesContent":["import type { Action, ActionDeps } from '@weasel-js/routing';\nimport { composesFrames } from 'core/scene/composePose';\nimport { createElement } from 'react';\nimport { DuplicateIcon } from './icons/editIcons';\nimport { defaultCommitAdapter } from '../defaultCommitAdapter';\nimport { copySelection } from './copySubtree';\nimport { requiresSelection } from './requiresSelection';\nimport { nodeDescriptors, poseDescriptorOf } from '../poseDescriptorDep';\nimport { translatePoseViaDescriptor } from '../resize/geometry';\nimport { recordTransform } from '../transform-again/memory';\n\n/** Same nudge `sceneToAdapter.getPasteOffset` gives a paste, so duplicate and\n * paste land in the same place rather than disagreeing by a few units. */\nexport const DUPLICATE_OFFSET = 12;\n\n/**\n * Copy each selected node, with its subtree, offset by `(dx, dy)`, as one\n * undoable batch labeled `label`, and select the copies. Returns the copies'\n * ids, or null when nothing was copied.\n */\nexport function duplicateSelection(\n deps: ActionDeps,\n dx: number,\n dy: number,\n label = 'Duplicate',\n): string[] | null {\n const selection = deps.selection;\n const scene = deps.scene;\n const applyOps = deps.applyOps;\n if (!selection || !scene) return null;\n const ids = selection.get();\n if (ids.length === 0) return null;\n\n const descriptorOf = nodeDescriptors(scene, poseDescriptorOf(deps.poseDescriptor));\n // Under a frame a child's pose is relative, so offsetting the root\n // carries the subtree and offsetting a child again would double it.\n const offsetDescendants = !composesFrames(scene.composition);\n const { ops, copies } = copySelection(\n scene,\n ids,\n (id, node, isRoot) => (isRoot || offsetDescendants\n ? translatePoseViaDescriptor(node.pose, dx, dy, descriptorOf(id))\n : node.pose),\n label,\n );\n\n if (ops.length === 0) return null;\n if (applyOps) applyOps(ops, label);\n else scene.applyBatch(ops, label, defaultCommitAdapter(scene, selection.adapterMethods));\n selection.set(copies);\n return copies as string[];\n}\n\n/**\n * @experimental\n * Static descriptor for the `duplicate` Action. Copies each selected node —\n * with its subtree, so duplicating a group produces a populated group — offset\n * by a small nudge, as one undoable batch, then selects the copies.\n */\nexport const duplicateAction: Action & { requires: string[] } = {\n id: 'duplicate',\n label: 'Duplicate',\n icon: createElement(DuplicateIcon),\n group: 'edit',\n // Cmd/Ctrl+D is `transformAgain`, which duplicates when nothing else is\n // there to repeat.\n defaultBinding: { kind: 'key', key: ['d', 'D'], mods: { mod: true, shift: true } },\n eligible: { capability: ['edits-page', 'creates-selection'] },\n // `selection` is read by the `enabled` gate as well as the invoker. An\n // undeclared read throws inside the dev-build deps Proxy before the gate can\n // answer, which is how this action spent a while doing nothing at all.\n requires: ['scene', 'selection', 'applyOps', 'poseDescriptor'],\n invoker: {\n timing: 'immediate',\n run: (deps) => {\n const scene = deps.scene;\n const selection = deps.selection;\n if (!scene || !selection) return;\n const copies = duplicateSelection(deps, DUPLICATE_OFFSET, DUPLICATE_OFFSET);\n if (copies) recordTransform(scene, { kind: 'duplicate', dx: DUPLICATE_OFFSET, dy: DUPLICATE_OFFSET }, copies);\n },\n },\n enabled: requiresSelection,\n};\n"],"mappings":";;;;;;;;;;AAaA,IAAaA,IAAmB;AAOhC,SAAgBC,EACd,GACA,GACA,GACA,IAAQ,aACS;CACjB,IAAMC,IAAYC,EAAK,WACjBC,IAAQD,EAAK,OACbE,IAAWF,EAAK;CACtB,IAAI,CAACD,KAAa,CAACE,GAAO,OAAO;CACjC,IAAME,IAAMJ,EAAU,IAAI;CAC1B,IAAII,EAAI,WAAW,GAAG,OAAO;CAE7B,IAAMC,IAAeC,EAAgBJ,GAAOK,EAAiBN,EAAK,cAAc,CAAC,GAG3EO,IAAoB,CAACC,EAAeP,EAAM,WAAW,GACrD,EAAE,QAAK,cAAWQ,EACtBR,GACAE,IACC,GAAI,GAAM,MAAYO,KAAUH,IAC7BI,EAA2BC,EAAK,MAAMC,GAAIC,GAAIV,EAAaW,CAAE,CAAC,IAC9DH,EAAK,MACTI,CACF;CAMA,OAJIC,EAAI,WAAW,IAAU,QACzBf,IAAUA,EAASe,GAAKD,CAAK,IAC5Bf,EAAM,WAAWgB,GAAKD,GAAOE,EAAqBjB,GAAOF,EAAU,cAAc,CAAC,GACvFA,EAAU,IAAIoB,CAAM,GACbA;AACT;AAQA,IAAaC,IAAmD;CAC9D,IAAI;CACJ,OAAO;CACP,MAAMC,EAAcC,CAAa;CACjC,OAAO;CAGP,gBAAgB;EAAE,MAAM;EAAO,KAAK,CAAC,KAAK,GAAG;EAAG,MAAM;GAAE,KAAK;GAAM,OAAO;EAAK;CAAE;CACjF,UAAU,EAAE,YAAY,CAAC,cAAc,mBAAmB,EAAE;CAI5D,UAAU;EAAC;EAAS;EAAa;EAAY;CAAgB;CAC7D,SAAS;EACP,QAAQ;EACR,MAAM,MAAS;GACb,IAAMrB,IAAQD,EAAK,OACbD,IAAYC,EAAK;GACvB,IAAI,CAACC,KAAS,CAACF,GAAW;GAC1B,IAAMoB,IAASrB,EAAmBE,GAAMH,GAAkBA,CAAgB;GAC1E,AAAIsB,KAAQI,EAAgBtB,GAAO;IAAE,MAAM;IAAa,IAAIJ;IAAkB,IAAIA;GAAiB,GAAGsB,CAAM;EAC9G;CACF;CACA,SAASK;AACX"}
|
|
@@ -8,15 +8,27 @@ var t = {
|
|
|
8
8
|
target: { kindOf: e }
|
|
9
9
|
},
|
|
10
10
|
eligible: { mode: { in: ["normal", "isolation"] } },
|
|
11
|
-
requires: [
|
|
11
|
+
requires: [
|
|
12
|
+
"editAnchors",
|
|
13
|
+
"selection",
|
|
14
|
+
"nodeAtPoint"
|
|
15
|
+
],
|
|
12
16
|
invoker: {
|
|
13
17
|
timing: "immediate",
|
|
14
|
-
run(e) {
|
|
15
|
-
let
|
|
16
|
-
if (!
|
|
17
|
-
let
|
|
18
|
-
|
|
19
|
-
|
|
18
|
+
run(e, t) {
|
|
19
|
+
let n = e.editAnchors, r = e.selection;
|
|
20
|
+
if (!n || !r) return;
|
|
21
|
+
let i = t?.worldX, a = t?.worldY, o = typeof i == "number" && typeof a == "number" ? e.nodeAtPoint?.({
|
|
22
|
+
x: i,
|
|
23
|
+
y: a
|
|
24
|
+
}) : null;
|
|
25
|
+
if (o && n.getEditablePath(o)) {
|
|
26
|
+
n.setEditingId(o);
|
|
27
|
+
return;
|
|
28
|
+
}
|
|
29
|
+
let s = r.get();
|
|
30
|
+
for (let e of s) if (n.getEditablePath(e)) {
|
|
31
|
+
n.setEditingId(e);
|
|
20
32
|
return;
|
|
21
33
|
}
|
|
22
34
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"enterPathEdit.js","names":["enterPathEditAction","isBody","editAnchors","deps","selection","ids","id"],"sources":["../../../../src/interactions/actions/defaults/enterPathEdit.ts"],"sourcesContent":["/**\n * `enterPathEditAction` — immediate Action that enters path-anchor edit\n * mode on a double-click against a selected polygon. Sets\n * `editAnchors.editingId` to the first selected polygon's id; the\n * gesture-side hit-test (via `buildAffordanceAt`) and the\n * `pathEditingOverlayLayer` chrome both gate on that id.\n *\n * No-op when the selection contains no polygon. The companion\n * `exitPathEditAction` (Escape) clears edit mode.\n */\n\nimport type { Action } from '@weasel-js/routing';\nimport type { ImmediateInvoker } from '@weasel-js/routing';\nimport type { NodeId } from 'core/scene/types';\nimport { isBody } from '@weasel-js/routing';\n\nexport const enterPathEditAction: Action & { requires: string[] } = {\n id: 'enterPathEdit',\n label: 'Edit path anchors',\n // Double-click on a polygon body (selected OR unselected) — matches the\n // Figma/Illustrator convention where double-clicking a path enters edit\n // mode regardless of prior selection state. The `kindOf` predicate fires\n // on either body class but not on empty space, so a double-click on\n // empty canvas doesn't accidentally enter edit mode.\n defaultBinding: {\n kind: 'doubleClick',\n target: { kindOf: isBody },\n },\n eligible: { mode: { in: ['normal', 'isolation'] } },\n requires: ['editAnchors', 'selection'],\n invoker: {\n timing: 'immediate',\n run(deps) {\n const editAnchors = deps.editAnchors;\n const selection = deps.selection;\n if (!editAnchors || !selection) return;\n const ids = selection.get() as NodeId[];\n // Use the dep's editability check rather than poking at node.pose\n // directly — the dep knows whether a node has an editable polygon\n // (pose-as-polygon OR data.path) so this picks up both shapes.\n for (const id of ids) {\n if (editAnchors.getEditablePath(id)) {\n editAnchors.setEditingId(id);\n return;\n }\n }\n },\n } as ImmediateInvoker,\n enabled: () => true,\n};\n"],"mappings":";;AAgBA,IAAaA,IAAuD;CAClE,IAAI;CACJ,OAAO;CAMP,gBAAgB;EACd,MAAM;EACN,QAAQ,EAAE,QAAQC,EAAO;CAC3B;CACA,UAAU,EAAE,MAAM,EAAE,IAAI,CAAC,UAAU,WAAW,EAAE,EAAE;CAClD,UAAU
|
|
1
|
+
{"version":3,"file":"enterPathEdit.js","names":["enterPathEditAction","isBody","editAnchors","deps","selection","x","params","y","under","ids","id"],"sources":["../../../../src/interactions/actions/defaults/enterPathEdit.ts"],"sourcesContent":["/**\n * `enterPathEditAction` — immediate Action that enters path-anchor edit\n * mode on a double-click against a selected polygon. Sets\n * `editAnchors.editingId` to the first selected polygon's id; the\n * gesture-side hit-test (via `buildAffordanceAt`) and the\n * `pathEditingOverlayLayer` chrome both gate on that id.\n *\n * No-op when the selection contains no polygon. The companion\n * `exitPathEditAction` (Escape) clears edit mode.\n */\n\nimport type { Action } from '@weasel-js/routing';\nimport type { ImmediateInvoker } from '@weasel-js/routing';\nimport type { NodeId } from 'core/scene/types';\nimport { isBody } from '@weasel-js/routing';\n\nexport const enterPathEditAction: Action & { requires: string[] } = {\n id: 'enterPathEdit',\n label: 'Edit path anchors',\n // Double-click on a polygon body (selected OR unselected) — matches the\n // Figma/Illustrator convention where double-clicking a path enters edit\n // mode regardless of prior selection state. The `kindOf` predicate fires\n // on either body class but not on empty space, so a double-click on\n // empty canvas doesn't accidentally enter edit mode.\n defaultBinding: {\n kind: 'doubleClick',\n target: { kindOf: isBody },\n },\n eligible: { mode: { in: ['normal', 'isolation'] } },\n requires: ['editAnchors', 'selection', 'nodeAtPoint'],\n invoker: {\n timing: 'immediate',\n run(deps, params) {\n const editAnchors = deps.editAnchors;\n const selection = deps.selection;\n if (!editAnchors || !selection) return;\n // The path under the pointer wins: with several selected, the first may not be the one\n // double-clicked.\n const x = params?.worldX, y = params?.worldY;\n const under = typeof x === 'number' && typeof y === 'number' ? deps.nodeAtPoint?.({ x, y }) : null;\n if (under && editAnchors.getEditablePath(under)) {\n editAnchors.setEditingId(under);\n return;\n }\n const ids = selection.get() as NodeId[];\n // Use the dep's editability check rather than poking at node.pose\n // directly — the dep knows whether a node has an editable polygon\n // (pose-as-polygon OR data.path) so this picks up both shapes.\n for (const id of ids) {\n if (editAnchors.getEditablePath(id)) {\n editAnchors.setEditingId(id);\n return;\n }\n }\n },\n } as ImmediateInvoker,\n enabled: () => true,\n};\n"],"mappings":";;AAgBA,IAAaA,IAAuD;CAClE,IAAI;CACJ,OAAO;CAMP,gBAAgB;EACd,MAAM;EACN,QAAQ,EAAE,QAAQC,EAAO;CAC3B;CACA,UAAU,EAAE,MAAM,EAAE,IAAI,CAAC,UAAU,WAAW,EAAE,EAAE;CAClD,UAAU;EAAC;EAAe;EAAa;CAAa;CACpD,SAAS;EACP,QAAQ;EACR,IAAI,GAAM,GAAQ;GAChB,IAAMC,IAAcC,EAAK,aACnBC,IAAYD,EAAK;GACvB,IAAI,CAACD,KAAe,CAACE,GAAW;GAGhC,IAAMC,IAAIC,GAAQ,QAAQC,IAAID,GAAQ,QAChCE,IAAQ,OAAOH,KAAM,YAAY,OAAOE,KAAM,WAAWJ,EAAK,cAAc;IAAE;IAAG;GAAE,CAAC,IAAI;GAC9F,IAAIK,KAASN,EAAY,gBAAgBM,CAAK,GAAG;IAC/C,EAAY,aAAaA,CAAK;IAC9B;GACF;GACA,IAAMC,IAAML,EAAU,IAAI;GAI1B,KAAK,IAAMM,KAAMD,GACf,IAAIP,EAAY,gBAAgBQ,CAAE,GAAG;IACnC,EAAY,aAAaA,CAAE;IAC3B;GACF;EAEJ;CACF;CACA,eAAe;AACjB"}
|
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
import { jsx as e, jsxs as t } from "react/jsx-runtime";
|
|
2
|
+
//#region src/interactions/actions/defaults/icons/anchorIcons.tsx
|
|
3
|
+
var n = {
|
|
4
|
+
viewBox: "0 0 20 20",
|
|
5
|
+
width: 20,
|
|
6
|
+
height: 20,
|
|
7
|
+
fill: "none",
|
|
8
|
+
stroke: "currentColor",
|
|
9
|
+
strokeWidth: 1.5,
|
|
10
|
+
strokeLinecap: "round",
|
|
11
|
+
strokeLinejoin: "round",
|
|
12
|
+
"aria-hidden": !0
|
|
13
|
+
};
|
|
14
|
+
function r() {
|
|
15
|
+
return /* @__PURE__ */ t("svg", {
|
|
16
|
+
...n,
|
|
17
|
+
children: [
|
|
18
|
+
/* @__PURE__ */ e("path", { d: "M3 17 L10 7 L17 17" }),
|
|
19
|
+
/* @__PURE__ */ e("path", {
|
|
20
|
+
d: "M2.5 5 H6.5 M5 3.5 L6.5 5 L5 6.5",
|
|
21
|
+
strokeWidth: 1
|
|
22
|
+
}),
|
|
23
|
+
/* @__PURE__ */ e("path", {
|
|
24
|
+
d: "M17.5 5 H13.5 M15 3.5 L13.5 5 L15 6.5",
|
|
25
|
+
strokeWidth: 1
|
|
26
|
+
}),
|
|
27
|
+
/* @__PURE__ */ e("rect", {
|
|
28
|
+
x: "8.5",
|
|
29
|
+
y: "5.5",
|
|
30
|
+
width: "3",
|
|
31
|
+
height: "3",
|
|
32
|
+
fill: "currentColor",
|
|
33
|
+
stroke: "none"
|
|
34
|
+
})
|
|
35
|
+
]
|
|
36
|
+
});
|
|
37
|
+
}
|
|
38
|
+
function i() {
|
|
39
|
+
return /* @__PURE__ */ t("svg", {
|
|
40
|
+
...n,
|
|
41
|
+
children: [
|
|
42
|
+
/* @__PURE__ */ e("path", { d: "M3 17 C3 10 6 8 10 8 S17 10 17 17" }),
|
|
43
|
+
/* @__PURE__ */ e("path", {
|
|
44
|
+
d: "M3.5 8 H16.5",
|
|
45
|
+
strokeWidth: 1
|
|
46
|
+
}),
|
|
47
|
+
/* @__PURE__ */ e("circle", {
|
|
48
|
+
cx: "3.5",
|
|
49
|
+
cy: "8",
|
|
50
|
+
r: "1.5",
|
|
51
|
+
fill: "currentColor",
|
|
52
|
+
stroke: "none"
|
|
53
|
+
}),
|
|
54
|
+
/* @__PURE__ */ e("circle", {
|
|
55
|
+
cx: "16.5",
|
|
56
|
+
cy: "8",
|
|
57
|
+
r: "1.5",
|
|
58
|
+
fill: "currentColor",
|
|
59
|
+
stroke: "none"
|
|
60
|
+
}),
|
|
61
|
+
/* @__PURE__ */ e("rect", {
|
|
62
|
+
x: "8.5",
|
|
63
|
+
y: "6.5",
|
|
64
|
+
width: "3",
|
|
65
|
+
height: "3",
|
|
66
|
+
fill: "currentColor",
|
|
67
|
+
stroke: "none"
|
|
68
|
+
})
|
|
69
|
+
]
|
|
70
|
+
});
|
|
71
|
+
}
|
|
72
|
+
//#endregion
|
|
73
|
+
export { r as RetractHandlesIcon, i as SymmetricHandlesIcon };
|
|
74
|
+
|
|
75
|
+
//# sourceMappingURL=anchorIcons.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"anchorIcons.js","names":["SVG_BASE","RetractHandlesIcon","SymmetricHandlesIcon"],"sources":["../../../../../src/interactions/actions/defaults/icons/anchorIcons.tsx"],"sourcesContent":["/**\n * Icons for the anchor-handle commands, in the register of the other action\n * glyphs: 20x20 viewBox, stroked in `currentColor`.\n */\nconst SVG_BASE = {\n viewBox: '0 0 20 20',\n width: 20,\n height: 20,\n fill: 'none',\n stroke: 'currentColor',\n strokeWidth: 1.5,\n strokeLinecap: 'round' as const,\n strokeLinejoin: 'round' as const,\n 'aria-hidden': true,\n};\n\n/**\n * Retract handles: a sharp corner on its anchor, with the handle stubs\n * either side pointing in toward it.\n *\n * @experimental\n */\nexport function RetractHandlesIcon() {\n return (\n <svg {...SVG_BASE}>\n <path d=\"M3 17 L10 7 L17 17\" />\n <path d=\"M2.5 5 H6.5 M5 3.5 L6.5 5 L5 6.5\" strokeWidth={1} />\n <path d=\"M17.5 5 H13.5 M15 3.5 L13.5 5 L15 6.5\" strokeWidth={1} />\n <rect x=\"8.5\" y=\"5.5\" width=\"3\" height=\"3\" fill=\"currentColor\" stroke=\"none\" />\n </svg>\n );\n}\n\n/**\n * Make handles symmetric: a smooth curve through its anchor, with one handle\n * line across it ending in two equal knobs.\n *\n * @experimental\n */\nexport function SymmetricHandlesIcon() {\n return (\n <svg {...SVG_BASE}>\n <path d=\"M3 17 C3 10 6 8 10 8 S17 10 17 17\" />\n <path d=\"M3.5 8 H16.5\" strokeWidth={1} />\n <circle cx=\"3.5\" cy=\"8\" r=\"1.5\" fill=\"currentColor\" stroke=\"none\" />\n <circle cx=\"16.5\" cy=\"8\" r=\"1.5\" fill=\"currentColor\" stroke=\"none\" />\n <rect x=\"8.5\" y=\"6.5\" width=\"3\" height=\"3\" fill=\"currentColor\" stroke=\"none\" />\n </svg>\n );\n}\n"],"mappings":";;AAIA,IAAMA,IAAW;CACf,SAAS;CACT,OAAO;CACP,QAAQ;CACR,MAAM;CACN,QAAQ;CACR,aAAa;CACb,eAAe;CACf,gBAAgB;CAChB,eAAe;AACjB;AAQA,SAAgBC,IAAqB;CACnC,OACE,kBAAC,OAAD;EAAK,GAAID;EAAT,UAAA;GACE,kBAAC,QAAD,EAAM,GAAE,qBAAsB,CAAA;GAC9B,kBAAC,QAAD;IAAM,GAAE;IAAmC,aAAa;GAAI,CAAA;GAC5D,kBAAC,QAAD;IAAM,GAAE;IAAwC,aAAa;GAAI,CAAA;GACjE,kBAAC,QAAD;IAAM,GAAE;IAAM,GAAE;IAAM,OAAM;IAAI,QAAO;IAAI,MAAK;IAAe,QAAO;GAAQ,CAAA;EAC3E;;AAET;AAQA,SAAgBE,IAAuB;CACrC,OACE,kBAAC,OAAD;EAAK,GAAIF;EAAT,UAAA;GACE,kBAAC,QAAD,EAAM,GAAE,oCAAqC,CAAA;GAC7C,kBAAC,QAAD;IAAM,GAAE;IAAe,aAAa;GAAI,CAAA;GACxC,kBAAC,UAAD;IAAQ,IAAG;IAAM,IAAG;IAAI,GAAE;IAAM,MAAK;IAAe,QAAO;GAAQ,CAAA;GACnE,kBAAC,UAAD;IAAQ,IAAG;IAAO,IAAG;IAAI,GAAE;IAAM,MAAK;IAAe,QAAO;GAAQ,CAAA;GACpE,kBAAC,QAAD;IAAM,GAAE;IAAM,GAAE;IAAM,OAAM;IAAI,QAAO;IAAI,MAAK;IAAe,QAAO;GAAQ,CAAA;EAC3E;;AAET"}
|
|
@@ -87,6 +87,33 @@ function o() {
|
|
|
87
87
|
});
|
|
88
88
|
}
|
|
89
89
|
function s() {
|
|
90
|
+
return /* @__PURE__ */ t("svg", {
|
|
91
|
+
...n,
|
|
92
|
+
children: [
|
|
93
|
+
/* @__PURE__ */ e("rect", {
|
|
94
|
+
x: "2",
|
|
95
|
+
y: "2",
|
|
96
|
+
width: "8",
|
|
97
|
+
height: "8"
|
|
98
|
+
}),
|
|
99
|
+
/* @__PURE__ */ e("rect", {
|
|
100
|
+
x: "6",
|
|
101
|
+
y: "6",
|
|
102
|
+
width: "8",
|
|
103
|
+
height: "8"
|
|
104
|
+
}),
|
|
105
|
+
/* @__PURE__ */ e("rect", {
|
|
106
|
+
x: "10",
|
|
107
|
+
y: "10",
|
|
108
|
+
width: "8",
|
|
109
|
+
height: "8",
|
|
110
|
+
fill: "currentColor",
|
|
111
|
+
stroke: "none"
|
|
112
|
+
})
|
|
113
|
+
]
|
|
114
|
+
});
|
|
115
|
+
}
|
|
116
|
+
function c() {
|
|
90
117
|
return /* @__PURE__ */ t("svg", {
|
|
91
118
|
...n,
|
|
92
119
|
children: [
|
|
@@ -113,7 +140,7 @@ function s() {
|
|
|
113
140
|
]
|
|
114
141
|
});
|
|
115
142
|
}
|
|
116
|
-
function
|
|
143
|
+
function l() {
|
|
117
144
|
return /* @__PURE__ */ t("svg", {
|
|
118
145
|
...n,
|
|
119
146
|
children: [
|
|
@@ -144,7 +171,7 @@ function c() {
|
|
|
144
171
|
]
|
|
145
172
|
});
|
|
146
173
|
}
|
|
147
|
-
function
|
|
174
|
+
function u() {
|
|
148
175
|
return /* @__PURE__ */ t("svg", {
|
|
149
176
|
...n,
|
|
150
177
|
children: [/* @__PURE__ */ e("rect", {
|
|
@@ -162,7 +189,7 @@ function l() {
|
|
|
162
189
|
})]
|
|
163
190
|
});
|
|
164
191
|
}
|
|
165
|
-
function
|
|
192
|
+
function d() {
|
|
166
193
|
return /* @__PURE__ */ t("svg", {
|
|
167
194
|
...n,
|
|
168
195
|
children: [
|
|
@@ -189,7 +216,7 @@ function u() {
|
|
|
189
216
|
]
|
|
190
217
|
});
|
|
191
218
|
}
|
|
192
|
-
function
|
|
219
|
+
function f() {
|
|
193
220
|
return /* @__PURE__ */ t("svg", {
|
|
194
221
|
...n,
|
|
195
222
|
children: [/* @__PURE__ */ e("rect", {
|
|
@@ -207,7 +234,7 @@ function d() {
|
|
|
207
234
|
})]
|
|
208
235
|
});
|
|
209
236
|
}
|
|
210
|
-
function
|
|
237
|
+
function p() {
|
|
211
238
|
return /* @__PURE__ */ t("svg", {
|
|
212
239
|
...n,
|
|
213
240
|
children: [
|
|
@@ -234,7 +261,7 @@ function f() {
|
|
|
234
261
|
]
|
|
235
262
|
});
|
|
236
263
|
}
|
|
237
|
-
function
|
|
264
|
+
function m() {
|
|
238
265
|
return /* @__PURE__ */ t("svg", {
|
|
239
266
|
...n,
|
|
240
267
|
children: [
|
|
@@ -254,7 +281,7 @@ function p() {
|
|
|
254
281
|
]
|
|
255
282
|
});
|
|
256
283
|
}
|
|
257
|
-
function
|
|
284
|
+
function h() {
|
|
258
285
|
return /* @__PURE__ */ t("svg", {
|
|
259
286
|
...n,
|
|
260
287
|
children: [
|
|
@@ -275,6 +302,6 @@ function m() {
|
|
|
275
302
|
});
|
|
276
303
|
}
|
|
277
304
|
//#endregion
|
|
278
|
-
export {
|
|
305
|
+
export { u as BringForwardIcon, d as BringToFrontIcon, i as CopyIcon, r as CutIcon, o as DuplicateIcon, m as FlipXIcon, h as FlipYIcon, c as GroupIcon, a as PasteIcon, f as SendBackwardIcon, p as SendToBackIcon, s as TransformAgainIcon, l as UngroupIcon };
|
|
279
306
|
|
|
280
307
|
//# sourceMappingURL=editIcons.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"editIcons.js","names":["SVG_BASE","CutIcon","CopyIcon","PasteIcon","DuplicateIcon","GroupIcon","UngroupIcon","BringForwardIcon","BringToFrontIcon","SendBackwardIcon","SendToBackIcon","FlipXIcon","FlipYIcon"],"sources":["../../../../../src/interactions/actions/defaults/icons/editIcons.tsx"],"sourcesContent":["/**\n * Default icons for the clipboard, duplicate, group, reorder and flip actions.\n * Lifted verbatim from `apps/draw`'s action bar, in the register of the\n * Pathfinder icons beside them: 20x20 viewBox, stroked outlines in\n * `currentColor`, and a filled region for the shape the op moves or produces.\n */\nconst SVG_BASE = {\n viewBox: '0 0 20 20',\n width: 20,\n height: 20,\n fill: 'none',\n stroke: 'currentColor',\n strokeWidth: 1.5,\n 'aria-hidden': true,\n};\n\n/**\n * Cut: scissors.\n *\n * @experimental\n */\nexport function CutIcon() {\n return (\n <svg {...SVG_BASE}>\n <circle cx=\"6\" cy=\"14\" r=\"2.5\" />\n <circle cx=\"14\" cy=\"14\" r=\"2.5\" />\n <path d=\"M8 12 L16 4\" strokeLinecap=\"round\" />\n <path d=\"M12 12 L4 4\" strokeLinecap=\"round\" />\n </svg>\n );\n}\n\n/**\n * Copy: a document peeking out behind another.\n *\n * @experimental\n */\nexport function CopyIcon() {\n return (\n <svg {...SVG_BASE}>\n <path d=\"M6 14 H3 V3 H14 V6\" strokeLinejoin=\"round\" />\n <rect x=\"6\" y=\"6\" width=\"11\" height=\"11\" />\n </svg>\n );\n}\n\n/**\n * Paste: a clipboard with a filled clip.\n *\n * @experimental\n */\nexport function PasteIcon() {\n return (\n <svg {...SVG_BASE}>\n <rect x=\"4\" y=\"5\" width=\"12\" height=\"13\" rx=\"1\" />\n <rect x=\"7.5\" y=\"2.5\" width=\"5\" height=\"4\" rx=\"0.5\" fill=\"currentColor\" stroke=\"none\" />\n </svg>\n );\n}\n\n/**\n * Duplicate: the source outlined, the copy filled.\n *\n * @experimental\n */\nexport function DuplicateIcon() {\n return (\n <svg {...SVG_BASE}>\n <rect x=\"3\" y=\"3\" width=\"10\" height=\"10\" />\n <rect x=\"7\" y=\"7\" width=\"10\" height=\"10\" fill=\"currentColor\" stroke=\"none\" />\n </svg>\n );\n}\n\n/**\n * Group: corner brackets framing two filled rects.\n *\n * @experimental\n */\nexport function GroupIcon() {\n return (\n <svg {...SVG_BASE}>\n <path d=\"M 2 5 L 2 2 L 5 2\" />\n <path d=\"M 18 5 L 18 2 L 15 2\" />\n <path d=\"M 2 15 L 2 18 L 5 18\" />\n <path d=\"M 18 15 L 18 18 L 15 18\" />\n <rect x=\"5\" y=\"6\" width=\"4.5\" height=\"8\" fill=\"currentColor\" stroke=\"none\" />\n <rect x=\"11\" y=\"6\" width=\"4\" height=\"8\" fill=\"currentColor\" stroke=\"none\" />\n </svg>\n );\n}\n\n/**\n * Ungroup: two filled rects escaping a frame broken to two dashed corners.\n *\n * @experimental\n */\nexport function UngroupIcon() {\n return (\n <svg {...SVG_BASE}>\n <path d=\"M 2 5 L 2 2 L 5 2\" strokeDasharray=\"1.5 1.5\" />\n <path d=\"M 18 15 L 18 18 L 15 18\" strokeDasharray=\"1.5 1.5\" />\n <rect x=\"3\" y=\"5\" width=\"4.5\" height=\"8\" fill=\"currentColor\" stroke=\"none\" />\n <rect x=\"13\" y=\"7\" width=\"4\" height=\"8\" fill=\"currentColor\" stroke=\"none\" />\n </svg>\n );\n}\n\n/**\n * Bring forward: two stacked rects, the front one filled.\n *\n * @experimental\n */\nexport function BringForwardIcon() {\n return (\n <svg {...SVG_BASE}>\n <rect x=\"3\" y=\"3\" width=\"11\" height=\"11\" />\n <rect x=\"6\" y=\"6\" width=\"11\" height=\"11\" fill=\"currentColor\" stroke=\"none\" />\n </svg>\n );\n}\n\n/**\n * Bring to front: three stacked rects, the frontmost filled.\n *\n * @experimental\n */\nexport function BringToFrontIcon() {\n return (\n <svg {...SVG_BASE}>\n <rect x=\"2\" y=\"2\" width=\"9\" height=\"9\" />\n <rect x=\"6\" y=\"6\" width=\"9\" height=\"9\" />\n <rect x=\"9\" y=\"9\" width=\"9\" height=\"9\" fill=\"currentColor\" stroke=\"none\" />\n </svg>\n );\n}\n\n/**\n * Send backward: two stacked rects, the rear one filled.\n *\n * @experimental\n */\nexport function SendBackwardIcon() {\n return (\n <svg {...SVG_BASE}>\n <rect x=\"3\" y=\"3\" width=\"11\" height=\"11\" fill=\"currentColor\" stroke=\"none\" />\n <rect x=\"6\" y=\"6\" width=\"11\" height=\"11\" />\n </svg>\n );\n}\n\n/**\n * Send to back: three stacked rects, the rearmost filled.\n *\n * @experimental\n */\nexport function SendToBackIcon() {\n return (\n <svg {...SVG_BASE}>\n <rect x=\"2\" y=\"2\" width=\"9\" height=\"9\" fill=\"currentColor\" stroke=\"none\" />\n <rect x=\"6\" y=\"6\" width=\"9\" height=\"9\" />\n <rect x=\"9\" y=\"9\" width=\"9\" height=\"9\" />\n </svg>\n );\n}\n\n/**\n * Flip horizontal: an outlined and a filled chevron either side of a dashed vertical axis.\n *\n * @experimental\n */\nexport function FlipXIcon() {\n return (\n <svg {...SVG_BASE}>\n <line x1=\"10\" y1=\"2\" x2=\"10\" y2=\"18\" strokeDasharray=\"2 1.5\" />\n <path d=\"M 8 4 L 3 10 L 8 16 Z\" />\n <path d=\"M 12 4 L 17 10 L 12 16 Z\" fill=\"currentColor\" stroke=\"none\" />\n </svg>\n );\n}\n\n/**\n * Flip vertical: an outlined and a filled chevron either side of a dashed horizontal axis.\n *\n * @experimental\n */\nexport function FlipYIcon() {\n return (\n <svg {...SVG_BASE}>\n <line x1=\"2\" y1=\"10\" x2=\"18\" y2=\"10\" strokeDasharray=\"2 1.5\" />\n <path d=\"M 4 8 L 10 3 L 16 8 Z\" />\n <path d=\"M 4 12 L 10 17 L 16 12 Z\" fill=\"currentColor\" stroke=\"none\" />\n </svg>\n );\n}\n"],"mappings":";;AAMA,IAAMA,IAAW;CACf,SAAS;CACT,OAAO;CACP,QAAQ;CACR,MAAM;CACN,QAAQ;CACR,aAAa;CACb,eAAe;AACjB;AAOA,SAAgBC,IAAU;CACxB,OACE,kBAAC,OAAD;EAAK,GAAID;EAAT,UAAA;GACE,kBAAC,UAAD;IAAQ,IAAG;IAAI,IAAG;IAAK,GAAE;GAAO,CAAA;GAChC,kBAAC,UAAD;IAAQ,IAAG;IAAK,IAAG;IAAK,GAAE;GAAO,CAAA;GACjC,kBAAC,QAAD;IAAM,GAAE;IAAc,eAAc;GAAS,CAAA;GAC7C,kBAAC,QAAD;IAAM,GAAE;IAAc,eAAc;GAAS,CAAA;EAC1C;;AAET;AAOA,SAAgBE,IAAW;CACzB,OACE,kBAAC,OAAD;EAAK,GAAIF;EAAT,UAAA,CACE,kBAAC,QAAD;GAAM,GAAE;GAAqB,gBAAe;EAAS,CAAA,GACrD,kBAAC,QAAD;GAAM,GAAE;GAAI,GAAE;GAAI,OAAM;GAAK,QAAO;EAAM,CAAA,CACvC;;AAET;AAOA,SAAgBG,IAAY;CAC1B,OACE,kBAAC,OAAD;EAAK,GAAIH;EAAT,UAAA,CACE,kBAAC,QAAD;GAAM,GAAE;GAAI,GAAE;GAAI,OAAM;GAAK,QAAO;GAAK,IAAG;EAAK,CAAA,GACjD,kBAAC,QAAD;GAAM,GAAE;GAAM,GAAE;GAAM,OAAM;GAAI,QAAO;GAAI,IAAG;GAAM,MAAK;GAAe,QAAO;EAAQ,CAAA,CACpF;;AAET;AAOA,SAAgBI,IAAgB;CAC9B,OACE,kBAAC,OAAD;EAAK,GAAIJ;EAAT,UAAA,CACE,kBAAC,QAAD;GAAM,GAAE;GAAI,GAAE;GAAI,OAAM;GAAK,QAAO;EAAM,CAAA,GAC1C,kBAAC,QAAD;GAAM,GAAE;GAAI,GAAE;GAAI,OAAM;GAAK,QAAO;GAAK,MAAK;GAAe,QAAO;EAAQ,CAAA,CACzE;;AAET;AAOA,SAAgBK,IAAY;CAC1B,OACE,kBAAC,OAAD;EAAK,
|
|
1
|
+
{"version":3,"file":"editIcons.js","names":["SVG_BASE","CutIcon","CopyIcon","PasteIcon","DuplicateIcon","TransformAgainIcon","GroupIcon","UngroupIcon","BringForwardIcon","BringToFrontIcon","SendBackwardIcon","SendToBackIcon","FlipXIcon","FlipYIcon"],"sources":["../../../../../src/interactions/actions/defaults/icons/editIcons.tsx"],"sourcesContent":["/**\n * Default icons for the clipboard, duplicate, group, reorder and flip actions.\n * Lifted verbatim from `apps/draw`'s action bar, in the register of the\n * Pathfinder icons beside them: 20x20 viewBox, stroked outlines in\n * `currentColor`, and a filled region for the shape the op moves or produces.\n */\nconst SVG_BASE = {\n viewBox: '0 0 20 20',\n width: 20,\n height: 20,\n fill: 'none',\n stroke: 'currentColor',\n strokeWidth: 1.5,\n 'aria-hidden': true,\n};\n\n/**\n * Cut: scissors.\n *\n * @experimental\n */\nexport function CutIcon() {\n return (\n <svg {...SVG_BASE}>\n <circle cx=\"6\" cy=\"14\" r=\"2.5\" />\n <circle cx=\"14\" cy=\"14\" r=\"2.5\" />\n <path d=\"M8 12 L16 4\" strokeLinecap=\"round\" />\n <path d=\"M12 12 L4 4\" strokeLinecap=\"round\" />\n </svg>\n );\n}\n\n/**\n * Copy: a document peeking out behind another.\n *\n * @experimental\n */\nexport function CopyIcon() {\n return (\n <svg {...SVG_BASE}>\n <path d=\"M6 14 H3 V3 H14 V6\" strokeLinejoin=\"round\" />\n <rect x=\"6\" y=\"6\" width=\"11\" height=\"11\" />\n </svg>\n );\n}\n\n/**\n * Paste: a clipboard with a filled clip.\n *\n * @experimental\n */\nexport function PasteIcon() {\n return (\n <svg {...SVG_BASE}>\n <rect x=\"4\" y=\"5\" width=\"12\" height=\"13\" rx=\"1\" />\n <rect x=\"7.5\" y=\"2.5\" width=\"5\" height=\"4\" rx=\"0.5\" fill=\"currentColor\" stroke=\"none\" />\n </svg>\n );\n}\n\n/**\n * Duplicate: the source outlined, the copy filled.\n *\n * @experimental\n */\nexport function DuplicateIcon() {\n return (\n <svg {...SVG_BASE}>\n <rect x=\"3\" y=\"3\" width=\"10\" height=\"10\" />\n <rect x=\"7\" y=\"7\" width=\"10\" height=\"10\" fill=\"currentColor\" stroke=\"none\" />\n </svg>\n );\n}\n\n/**\n * Transform again: a step-and-repeat run of three squares, the last filled.\n *\n * @experimental\n */\nexport function TransformAgainIcon() {\n return (\n <svg {...SVG_BASE}>\n <rect x=\"2\" y=\"2\" width=\"8\" height=\"8\" />\n <rect x=\"6\" y=\"6\" width=\"8\" height=\"8\" />\n <rect x=\"10\" y=\"10\" width=\"8\" height=\"8\" fill=\"currentColor\" stroke=\"none\" />\n </svg>\n );\n}\n\n/**\n * Group: corner brackets framing two filled rects.\n *\n * @experimental\n */\nexport function GroupIcon() {\n return (\n <svg {...SVG_BASE}>\n <path d=\"M 2 5 L 2 2 L 5 2\" />\n <path d=\"M 18 5 L 18 2 L 15 2\" />\n <path d=\"M 2 15 L 2 18 L 5 18\" />\n <path d=\"M 18 15 L 18 18 L 15 18\" />\n <rect x=\"5\" y=\"6\" width=\"4.5\" height=\"8\" fill=\"currentColor\" stroke=\"none\" />\n <rect x=\"11\" y=\"6\" width=\"4\" height=\"8\" fill=\"currentColor\" stroke=\"none\" />\n </svg>\n );\n}\n\n/**\n * Ungroup: two filled rects escaping a frame broken to two dashed corners.\n *\n * @experimental\n */\nexport function UngroupIcon() {\n return (\n <svg {...SVG_BASE}>\n <path d=\"M 2 5 L 2 2 L 5 2\" strokeDasharray=\"1.5 1.5\" />\n <path d=\"M 18 15 L 18 18 L 15 18\" strokeDasharray=\"1.5 1.5\" />\n <rect x=\"3\" y=\"5\" width=\"4.5\" height=\"8\" fill=\"currentColor\" stroke=\"none\" />\n <rect x=\"13\" y=\"7\" width=\"4\" height=\"8\" fill=\"currentColor\" stroke=\"none\" />\n </svg>\n );\n}\n\n/**\n * Bring forward: two stacked rects, the front one filled.\n *\n * @experimental\n */\nexport function BringForwardIcon() {\n return (\n <svg {...SVG_BASE}>\n <rect x=\"3\" y=\"3\" width=\"11\" height=\"11\" />\n <rect x=\"6\" y=\"6\" width=\"11\" height=\"11\" fill=\"currentColor\" stroke=\"none\" />\n </svg>\n );\n}\n\n/**\n * Bring to front: three stacked rects, the frontmost filled.\n *\n * @experimental\n */\nexport function BringToFrontIcon() {\n return (\n <svg {...SVG_BASE}>\n <rect x=\"2\" y=\"2\" width=\"9\" height=\"9\" />\n <rect x=\"6\" y=\"6\" width=\"9\" height=\"9\" />\n <rect x=\"9\" y=\"9\" width=\"9\" height=\"9\" fill=\"currentColor\" stroke=\"none\" />\n </svg>\n );\n}\n\n/**\n * Send backward: two stacked rects, the rear one filled.\n *\n * @experimental\n */\nexport function SendBackwardIcon() {\n return (\n <svg {...SVG_BASE}>\n <rect x=\"3\" y=\"3\" width=\"11\" height=\"11\" fill=\"currentColor\" stroke=\"none\" />\n <rect x=\"6\" y=\"6\" width=\"11\" height=\"11\" />\n </svg>\n );\n}\n\n/**\n * Send to back: three stacked rects, the rearmost filled.\n *\n * @experimental\n */\nexport function SendToBackIcon() {\n return (\n <svg {...SVG_BASE}>\n <rect x=\"2\" y=\"2\" width=\"9\" height=\"9\" fill=\"currentColor\" stroke=\"none\" />\n <rect x=\"6\" y=\"6\" width=\"9\" height=\"9\" />\n <rect x=\"9\" y=\"9\" width=\"9\" height=\"9\" />\n </svg>\n );\n}\n\n/**\n * Flip horizontal: an outlined and a filled chevron either side of a dashed vertical axis.\n *\n * @experimental\n */\nexport function FlipXIcon() {\n return (\n <svg {...SVG_BASE}>\n <line x1=\"10\" y1=\"2\" x2=\"10\" y2=\"18\" strokeDasharray=\"2 1.5\" />\n <path d=\"M 8 4 L 3 10 L 8 16 Z\" />\n <path d=\"M 12 4 L 17 10 L 12 16 Z\" fill=\"currentColor\" stroke=\"none\" />\n </svg>\n );\n}\n\n/**\n * Flip vertical: an outlined and a filled chevron either side of a dashed horizontal axis.\n *\n * @experimental\n */\nexport function FlipYIcon() {\n return (\n <svg {...SVG_BASE}>\n <line x1=\"2\" y1=\"10\" x2=\"18\" y2=\"10\" strokeDasharray=\"2 1.5\" />\n <path d=\"M 4 8 L 10 3 L 16 8 Z\" />\n <path d=\"M 4 12 L 10 17 L 16 12 Z\" fill=\"currentColor\" stroke=\"none\" />\n </svg>\n );\n}\n"],"mappings":"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"}
|
|
@@ -1,49 +1,34 @@
|
|
|
1
1
|
import { editingLayer as e, inPlane as t } from "../planeInput.js";
|
|
2
|
-
import {
|
|
3
|
-
import {
|
|
4
|
-
|
|
5
|
-
var
|
|
6
|
-
glyph: "penPlus",
|
|
7
|
-
fallback: "crosshair"
|
|
8
|
-
};
|
|
9
|
-
function l(e, t, n) {
|
|
10
|
-
let r = e?.editAnchors;
|
|
11
|
-
if (!r?.editingId) return null;
|
|
12
|
-
let o = r.getEditablePath(r.editingId);
|
|
13
|
-
if (!o || o.kind !== "polygon") return null;
|
|
14
|
-
let c = e?.view?.get().scale, l = a(i(o), t, n, {
|
|
15
|
-
tolerancePx: s,
|
|
16
|
-
...c ? { scale: c } : {}
|
|
17
|
-
});
|
|
18
|
-
return l ? {
|
|
19
|
-
dep: r,
|
|
20
|
-
hit: l
|
|
21
|
-
} : null;
|
|
22
|
-
}
|
|
23
|
-
var u = t({
|
|
2
|
+
import { segmentUnder as n } from "./segmentUnder.js";
|
|
3
|
+
import { editAnchorSetTracked as r, insertAnchorOnSegment as i } from "@weasel-js/geom";
|
|
4
|
+
import { ActionDisabledReason as a } from "@weasel-js/routing";
|
|
5
|
+
var o = t({
|
|
24
6
|
id: "insertPathAnchor",
|
|
25
7
|
label: "Insert anchor",
|
|
26
8
|
defaultBinding: {
|
|
27
9
|
kind: "click",
|
|
28
10
|
mods: { alt: !0 }
|
|
29
11
|
},
|
|
30
|
-
cursor:
|
|
12
|
+
cursor: {
|
|
13
|
+
glyph: "penPlus",
|
|
14
|
+
fallback: "crosshair"
|
|
15
|
+
},
|
|
31
16
|
eligible: { capability: "edits-anchors" },
|
|
32
17
|
requires: ["editAnchors", "view"],
|
|
33
18
|
invoker: {
|
|
34
19
|
timing: "immediate",
|
|
35
20
|
run(e, t) {
|
|
36
|
-
let
|
|
37
|
-
if (typeof
|
|
38
|
-
let
|
|
39
|
-
if (!
|
|
40
|
-
let { dep:
|
|
41
|
-
f && (
|
|
21
|
+
let a = t?.worldX, o = t?.worldY;
|
|
22
|
+
if (typeof a != "number" || typeof o != "number") return;
|
|
23
|
+
let s = n(e, a, o);
|
|
24
|
+
if (!s) return;
|
|
25
|
+
let { dep: c, path: l, hit: u } = s, d = -1, f = r(l, (e) => (d = i(e, u), d !== -1));
|
|
26
|
+
f && (c.applyEdit(c.editingId, f.path, "Insert anchor", f.origins), c.setSelectedAnchors([d]));
|
|
42
27
|
}
|
|
43
28
|
},
|
|
44
|
-
enabled: (e, t) => !e?.editAnchors?.editingId || t && !
|
|
29
|
+
enabled: (e, t) => !e?.editAnchors?.editingId || t && !n(e, t.x, t.y) ? a.NotApplicable : !0
|
|
45
30
|
}, e);
|
|
46
31
|
//#endregion
|
|
47
|
-
export {
|
|
32
|
+
export { o as insertPathAnchorAction };
|
|
48
33
|
|
|
49
34
|
//# sourceMappingURL=insertPathAnchor.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"insertPathAnchor.js","names":["
|
|
1
|
+
{"version":3,"file":"insertPathAnchor.js","names":["insertPathAnchorAction","inPlane","wx","params","wy","under","segmentUnder","deps","inserted","next","editAnchorSetTracked","path","insertAnchorOnSegment","set","hit","dep","at","ActionDisabledReason","editingLayer"],"sources":["../../../../src/interactions/actions/defaults/insertPathAnchor.ts"],"sourcesContent":["/**\n * `insertPathAnchorAction` — Alt+click on a segment of the path being\n * edited inserts a new anchor there, without changing the path's shape.\n *\n * Alt+click because plain click already belongs to `selectAnchorAction`\n * (select an anchor, or clear the anchor selection on a miss), and\n * Alt+Shift+click to `cutPathAtAnchorAction`.\n *\n * The segment test lives in `enabled`, which the dispatcher hands the\n * event's world point: a click off every segment (or on an anchor) reports\n * not-applicable, so the dispatcher falls through to whatever else the\n * click could mean, and the hover pump shows `cursor` only where a click\n * would insert.\n */\n\nimport type { Action, ImmediateInvoker } from '@weasel-js/routing';\nimport { ActionDisabledReason } from '@weasel-js/routing';\nimport type { CursorSpec } from '@weasel-js/cursor';\nimport { editAnchorSetTracked, insertAnchorOnSegment } from '@weasel-js/geom';\nimport { inPlane, editingLayer } from '../planeInput';\nimport { segmentUnder } from './segmentUnder';\n\nconst INSERT_CURSOR: CursorSpec = { glyph: 'penPlus', fallback: 'crosshair' };\n\nexport const insertPathAnchorAction: Action & { requires: string[] } = inPlane({\n id: 'insertPathAnchor',\n label: 'Insert anchor',\n defaultBinding: { kind: 'click', mods: { alt: true } },\n cursor: INSERT_CURSOR,\n eligible: { capability: 'edits-anchors' },\n requires: ['editAnchors', 'view'],\n invoker: {\n timing: 'immediate',\n run(deps, params) {\n const wx = params?.worldX as number | undefined;\n const wy = params?.worldY as number | undefined;\n if (typeof wx !== 'number' || typeof wy !== 'number') return;\n const under = segmentUnder(deps, wx, wy);\n if (!under) return;\n const { dep, path, hit } = under;\n let inserted = -1;\n const next = editAnchorSetTracked(path, (set) => {\n inserted = insertAnchorOnSegment(set, hit);\n return inserted !== -1;\n });\n if (!next) return;\n dep.applyEdit(dep.editingId, next.path, 'Insert anchor', next.origins);\n dep.setSelectedAnchors([inserted]);\n },\n } as ImmediateInvoker,\n enabled: (deps, at) => {\n const dep = deps?.editAnchors;\n if (!dep?.editingId) return ActionDisabledReason.NotApplicable;\n if (at && !segmentUnder(deps, at.x, at.y)) return ActionDisabledReason.NotApplicable;\n return true;\n },\n}, editingLayer);\n"],"mappings":";;;;AAwBA,IAAaA,IAA0DC,EAAQ;CAC7E,IAAI;CACJ,OAAO;CACP,gBAAgB;EAAE,MAAM;EAAS,MAAM,EAAE,KAAK,GAAK;CAAE;CACrD,QAAQ;EAN0B,OAAO;EAAW,UAAU;CAMtD;CACR,UAAU,EAAE,YAAY,gBAAgB;CACxC,UAAU,CAAC,eAAe,MAAM;CAChC,SAAS;EACP,QAAQ;EACR,IAAI,GAAM,GAAQ;GAChB,IAAMC,IAAKC,GAAQ,QACbC,IAAKD,GAAQ;GACnB,IAAI,OAAOD,KAAO,YAAY,OAAOE,KAAO,UAAU;GACtD,IAAMC,IAAQC,EAAaC,GAAML,GAAIE,CAAE;GACvC,IAAI,CAACC,GAAO;GACZ,IAAM,EAAE,QAAK,SAAM,WAAQA,GACvBG,IAAW,IACTC,IAAOC,EAAqBC,IAAO,OACvC,IAAWC,EAAsBC,GAAKC,CAAG,GAClCN,MAAa,GACrB;GACD,AAAKC,MACLM,EAAI,UAAUA,EAAI,WAAWN,EAAK,MAAM,iBAAiBA,EAAK,OAAO,GACrEM,EAAI,mBAAmB,CAACP,CAAQ,CAAC;EACnC;CACF;CACA,UAAU,GAAM,MAEV,CADQD,GAAM,aACR,aACNS,KAAM,CAACV,EAAaC,GAAMS,EAAG,GAAGA,EAAG,CAAC,IAAUC,EAAqB,gBAChE;AAEX,GAAGC,CAAY"}
|
|
@@ -5,53 +5,54 @@ import { createTransformOp as a } from "../../../core/ops/transform.js";
|
|
|
5
5
|
import { geometryDataOp as o } from "../geometryProjection.js";
|
|
6
6
|
import { scenePoseFrame as s } from "../poseFrame.js";
|
|
7
7
|
import { defaultCommitAdapter as c } from "../defaultCommitAdapter.js";
|
|
8
|
-
import {
|
|
9
|
-
import {
|
|
8
|
+
import { recordTransform as l } from "../transform-again/memory.js";
|
|
9
|
+
import { requiresSelection as u } from "./requiresSelection.js";
|
|
10
|
+
import { NUDGE_KEY as d, NUDGE_LABEL as f, nudgeDelta as p } from "./nudgeSteps.js";
|
|
10
11
|
//#region src/interactions/actions/defaults/nudge.ts
|
|
11
|
-
function
|
|
12
|
-
let
|
|
13
|
-
if (
|
|
14
|
-
let
|
|
12
|
+
function m(n, l, u, d, f, p, m, h = "Nudge") {
|
|
13
|
+
let g = t(l, m), _ = i(l, s(l), r(l, n.get()));
|
|
14
|
+
if (_.length === 0) return !1;
|
|
15
|
+
let v = [
|
|
15
16
|
1,
|
|
16
17
|
0,
|
|
17
18
|
0,
|
|
18
19
|
1,
|
|
19
20
|
u,
|
|
20
21
|
d
|
|
21
|
-
],
|
|
22
|
-
for (let t of
|
|
22
|
+
], y = [];
|
|
23
|
+
for (let t of _) {
|
|
23
24
|
let n = l.get(t);
|
|
24
25
|
if (!n) continue;
|
|
25
|
-
|
|
26
|
+
y.push(a({
|
|
26
27
|
id: t,
|
|
27
28
|
from: n.pose,
|
|
28
|
-
to: e(n.pose, u, d,
|
|
29
|
-
label:
|
|
29
|
+
to: e(n.pose, u, d, g(t)),
|
|
30
|
+
label: h
|
|
30
31
|
}));
|
|
31
32
|
let r = o(p, {
|
|
32
33
|
id: t,
|
|
33
34
|
data: n.data,
|
|
34
35
|
pose: n.pose
|
|
35
|
-
},
|
|
36
|
-
r &&
|
|
36
|
+
}, v, h);
|
|
37
|
+
r && y.push(r);
|
|
37
38
|
}
|
|
38
|
-
|
|
39
|
+
return y.length !== 0 && (f ? f(y, h) : l.applyBatch(y, h, c(l, n.adapterMethods)), !0);
|
|
39
40
|
}
|
|
40
|
-
function
|
|
41
|
+
function h(e) {
|
|
41
42
|
return {
|
|
42
43
|
id: `nudge.${e}`,
|
|
43
|
-
label: `Nudge ${
|
|
44
|
+
label: `Nudge ${f[e]}`,
|
|
44
45
|
group: "nudge",
|
|
45
46
|
defaultBinding: [{
|
|
46
47
|
spec: {
|
|
47
48
|
kind: "key",
|
|
48
|
-
key:
|
|
49
|
+
key: d[e]
|
|
49
50
|
},
|
|
50
51
|
opts: { params: { magnitude: "small" } }
|
|
51
52
|
}, {
|
|
52
53
|
spec: {
|
|
53
54
|
kind: "key",
|
|
54
|
-
key:
|
|
55
|
+
key: d[e],
|
|
55
56
|
mods: { shift: !0 }
|
|
56
57
|
},
|
|
57
58
|
opts: { params: { magnitude: "big" } }
|
|
@@ -67,15 +68,19 @@ function m(e) {
|
|
|
67
68
|
invoker: {
|
|
68
69
|
timing: "immediate",
|
|
69
70
|
run: (t, r) => {
|
|
70
|
-
let { dx: i, dy: a } =
|
|
71
|
-
o && s &&
|
|
71
|
+
let { dx: i, dy: a } = p(e, r?.magnitude), o = t.selection, s = t.scene, c = t.applyOps, u = t.geometryProjection;
|
|
72
|
+
o && s && m(o, s, i, a, c, u, n(t.poseDescriptor)) && l(s, {
|
|
73
|
+
kind: "translate",
|
|
74
|
+
dx: i,
|
|
75
|
+
dy: a
|
|
76
|
+
}, o.get());
|
|
72
77
|
}
|
|
73
78
|
},
|
|
74
|
-
enabled:
|
|
79
|
+
enabled: u
|
|
75
80
|
};
|
|
76
81
|
}
|
|
77
|
-
var
|
|
82
|
+
var g = h("up"), _ = h("down"), v = h("left"), y = h("right");
|
|
78
83
|
//#endregion
|
|
79
|
-
export {
|
|
84
|
+
export { _ as nudgeDownAction, v as nudgeLeftAction, y as nudgeRightAction, g as nudgeUpAction, m as translateSelection };
|
|
80
85
|
|
|
81
86
|
//# sourceMappingURL=nudge.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"nudge.js","names":["
|
|
1
|
+
{"version":3,"file":"nudge.js","names":["translateSelection","descriptorOf","nodeDescriptors","scene","d","ids","translateTargets","scenePoseFrame","moveSources","selection","m","dx","dy","ops","id","node","createTransformOp","translatePoseViaDescriptor","dataOp","geometryDataOp","geometryProjection","label","applyOps","defaultCommitAdapter","makeNudgeAction","dir","NUDGE_LABEL","NUDGE_KEY","nudgeDelta","params","deps","poseDescriptorOf","recordTransform","requiresSelection","nudgeUpAction","nudgeDownAction","nudgeLeftAction","nudgeRightAction"],"sources":["../../../../src/interactions/actions/defaults/nudge.ts"],"sourcesContent":["import type { Scene } from 'core/scene/types';\nimport type { SelectionApi } from 'core/selection/useSelection';\nimport type { Op } from 'core/ops/types';\nimport type { Affine } from '@weasel-js/geom';\nimport { createTransformOp } from 'core/ops/transform';\nimport type { PoseDescriptor } from '../resize/geometry';\nimport { translatePoseViaDescriptor } from '../resize/geometry';\nimport { nodeDescriptors, poseDescriptorOf } from '../poseDescriptorDep';\nimport type { Action } from '@weasel-js/routing';\nimport { defaultCommitAdapter } from '../defaultCommitAdapter';\nimport { requiresSelection } from './requiresSelection';\nimport { geometryDataOp, type GeometryProjection } from '../geometryProjection';\nimport { scenePoseFrame } from '../poseFrame';\nimport { moveSources, translateTargets } from '../selectionSubtree';\nimport { NUDGE_KEY, NUDGE_LABEL, nudgeDelta, type NudgeDirection } from './nudgeSteps';\nimport { recordTransform } from '../transform-again/memory';\n\n/**\n * Apply a translation of (dx, dy) to the selected nodes and the descendants\n * that do not ride on one of them, as one undo entry labeled `label`.\n * Translates through the `poseDescriptor` dep, so any pose shape moves.\n * Returns whether anything moved.\n */\nexport function translateSelection(\n selection: Pick<SelectionApi, 'get' | 'adapterMethods'>,\n scene: Scene<unknown, string, unknown>,\n dx: number,\n dy: number,\n applyOps: ((ops: Op[], label: string) => void) | undefined,\n geometryProjection: GeometryProjection | undefined,\n d: PoseDescriptor<unknown>,\n label = 'Nudge',\n): boolean {\n const descriptorOf = nodeDescriptors(scene, d);\n const ids = translateTargets(\n scene, scenePoseFrame(scene), moveSources(scene, selection.get()),\n );\n if (ids.length === 0) return false;\n // Pushed alongside each transform op so a wired geometryProjection moves\n // the node's data-held geometry too.\n const m: Affine = [1, 0, 0, 1, dx, dy];\n\n const ops: Op[] = [];\n for (const id of ids) {\n const node = scene.get(id);\n if (!node) continue;\n ops.push(createTransformOp<unknown>({\n id: id as string,\n from: node.pose,\n to: translatePoseViaDescriptor(node.pose, dx, dy, descriptorOf(id)),\n label,\n }));\n const dataOp = geometryDataOp(\n geometryProjection,\n { id: id as string, data: node.data, pose: node.pose },\n m,\n label,\n );\n if (dataOp) ops.push(dataOp);\n }\n if (ops.length === 0) return false;\n\n if (applyOps) applyOps(ops, label);\n else scene.applyBatch(ops, label, defaultCommitAdapter(scene, selection.adapterMethods));\n return true;\n}\n\n/**\n * @experimental\n * The nudge descriptor for one direction: bare arrow (magnitude='small') and\n * Shift+arrow (magnitude='big').\n */\nfunction makeNudgeAction(dir: NudgeDirection): Action & { requires: string[] } {\n return {\n id: `nudge.${dir}`,\n label: `Nudge ${NUDGE_LABEL[dir]}`,\n group: 'nudge',\n defaultBinding: [\n { spec: { kind: 'key', key: NUDGE_KEY[dir] }, opts: { params: { magnitude: 'small' } } },\n { spec: { kind: 'key', key: NUDGE_KEY[dir], mods: { shift: true } }, opts: { params: { magnitude: 'big' } } },\n ],\n eligible: { capability: 'transforms-selection' },\n requires: ['selection', 'scene', 'applyOps', 'geometryProjection', 'poseDescriptor'],\n invoker: {\n timing: 'immediate',\n run: (deps, params) => {\n const { dx, dy } = nudgeDelta(dir, params?.magnitude);\n const selection = deps.selection;\n const scene = deps.scene;\n const applyOps = deps.applyOps;\n const geometryProjection = deps.geometryProjection;\n if (!selection || !scene) return;\n if (translateSelection(selection, scene, dx, dy, applyOps, geometryProjection, poseDescriptorOf(deps.poseDescriptor))) {\n recordTransform(scene, { kind: 'translate', dx, dy }, selection.get());\n }\n },\n },\n enabled: requiresSelection,\n };\n}\n\nexport const nudgeUpAction = makeNudgeAction('up');\nexport const nudgeDownAction = makeNudgeAction('down');\nexport const nudgeLeftAction = makeNudgeAction('left');\nexport const nudgeRightAction = makeNudgeAction('right');\n"],"mappings":";;;;;;;;;;;AAuBA,SAAgBA,EACd,GACA,GACA,GACA,GACA,GACA,GACA,GACA,IAAQ,SACC;CACT,IAAMC,IAAeC,EAAgBC,GAAOC,CAAC,GACvCC,IAAMC,EACVH,GAAOI,EAAeJ,CAAK,GAAGK,EAAYL,GAAOM,EAAU,IAAI,CAAC,CAClE;CACA,IAAIJ,EAAI,WAAW,GAAG,OAAO;CAG7B,IAAMK,IAAY;EAAC;EAAG;EAAG;EAAG;EAAGC;EAAIC;CAAE,GAE/BC,IAAY,CAAC;CACnB,KAAK,IAAMC,KAAMT,GAAK;EACpB,IAAMU,IAAOZ,EAAM,IAAIW,CAAE;EACzB,IAAI,CAACC,GAAM;EACX,EAAI,KAAKC,EAA2B;GAC9B;GACJ,MAAMD,EAAK;GACX,IAAIE,EAA2BF,EAAK,MAAMJ,GAAIC,GAAIX,EAAaa,CAAE,CAAC;GAClE;EACF,CAAC,CAAC;EACF,IAAMI,IAASC,EACbC,GACA;GAAM;GAAc,MAAML,EAAK;GAAM,MAAMA,EAAK;EAAK,GACrDL,GACAW,CACF;EACA,AAAIH,KAAQL,EAAI,KAAKK,CAAM;CAC7B;CAKA,OAJIL,EAAI,WAAW,MAEfS,IAAUA,EAAST,GAAKQ,CAAK,IAC5BlB,EAAM,WAAWU,GAAKQ,GAAOE,EAAqBpB,GAAOM,EAAU,cAAc,CAAC,GAChF;AACT;AAOA,SAASe,EAAgB,GAAsD;CAC7E,OAAO;EACL,IAAI,SAASC;EACb,OAAO,SAASC,EAAYD;EAC5B,OAAO;EACP,gBAAgB,CACd;GAAE,MAAM;IAAE,MAAM;IAAO,KAAKE,EAAUF;GAAK;GAAgC,MAAM,EAAE,QAAQ,EAAE,WAAW,QAAQ,EAAE;EAAE,GACpH;GAAE,MAAM;IAAE,MAAM;IAAO,KAAKE,EAAUF;IAAM,MAAM,EAAE,OAAO,GAAK;GAAE;GAAG,MAAM,EAAE,QAAQ,EAAE,WAAW,MAAM,EAAE;EAAE,CAC9G;EACA,UAAU,EAAE,YAAY,uBAAuB;EAC/C,UAAU;GAAC;GAAa;GAAS;GAAY;GAAsB;EAAgB;EACnF,SAAS;GACP,QAAQ;GACR,MAAM,GAAM,MAAW;IACrB,IAAM,EAAE,OAAI,UAAOG,EAAWH,GAAKI,GAAQ,SAAS,GAC9CpB,IAAYqB,EAAK,WACjB3B,IAAQ2B,EAAK,OACbR,IAAWQ,EAAK,UAChBV,IAAqBU,EAAK;IAChC,AAAKrB,KAAcN,KACfH,EAAmBS,GAAWN,GAAOQ,GAAIC,GAAIU,GAAUF,GAAoBW,EAAiBD,EAAK,cAAc,CAAC,KAClHE,EAAgB7B,GAAO;KAAE,MAAM;KAAa;KAAI;IAAG,GAAGM,EAAU,IAAI,CAAC;GAEzE;EACF;EACA,SAASwB;CACX;AACF;AAEA,IAAaC,IAAmBV,EAAgB,IAAI,GACvCW,IAAmBX,EAAgB,MAAM,GACzCY,IAAmBZ,EAAgB,MAAM,GACzCa,IAAmBb,EAAgB,OAAO"}
|