@weasel-js/core 1.9.4 → 1.10.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +918 -0
- package/README.md +38 -3
- package/dist/WeaselProvider.js +5 -7
- package/dist/WeaselProvider.js.map +1 -1
- package/dist/affordances/composeAffordanceLayer.js +92 -84
- package/dist/affordances/composeAffordanceLayer.js.map +1 -1
- package/dist/affordances/cornerResize.js +3 -2
- package/dist/affordances/cornerResize.js.map +1 -1
- package/dist/affordances/hitAffordanceRegions.js +71 -101
- package/dist/affordances/hitAffordanceRegions.js.map +1 -1
- package/dist/affordances/pathAnchors.js +50 -28
- package/dist/affordances/pathAnchors.js.map +1 -1
- package/dist/affordances/rotateCursor.js +12 -0
- package/dist/affordances/rotateCursor.js.map +1 -0
- package/dist/affordances/rotationHandle.js +44 -46
- package/dist/affordances/rotationHandle.js.map +1 -1
- package/dist/animation/behaviors/coast.js +21 -0
- package/dist/animation/behaviors/coast.js.map +1 -0
- package/dist/animation/behaviors/coastByWrite.js +107 -0
- package/dist/animation/behaviors/coastByWrite.js.map +1 -0
- package/dist/animation/behaviors/coastOnTargets.js +94 -0
- package/dist/animation/behaviors/coastOnTargets.js.map +1 -0
- package/dist/animation/behaviors/momentum.js +48 -136
- package/dist/animation/behaviors/momentum.js.map +1 -1
- package/dist/animation/clipTargets.js +12 -0
- package/dist/animation/clipTargets.js.map +1 -0
- package/dist/animation/index.js +15 -20
- package/dist/animation/poseHelpers.js +112 -33
- package/dist/animation/poseHelpers.js.map +1 -1
- package/dist/animation/poseTarget.js +115 -0
- package/dist/animation/poseTarget.js.map +1 -0
- package/dist/animation/reflow.js +113 -83
- package/dist/animation/reflow.js.map +1 -1
- package/dist/animation/rewind.js +66 -0
- package/dist/animation/rewind.js.map +1 -0
- package/dist/animation/rig/bindRig.js +85 -53
- package/dist/animation/rig/bindRig.js.map +1 -1
- package/dist/animation/rig/rigNode.js +99 -0
- package/dist/animation/rig/rigNode.js.map +1 -0
- package/dist/animation/rig/rigSeat.js +59 -0
- package/dist/animation/rig/rigSeat.js.map +1 -0
- package/dist/animation/rig/skinBinding.js +64 -0
- package/dist/animation/rig/skinBinding.js.map +1 -0
- package/dist/animation/rig/useRig.js +31 -16
- package/dist/animation/rig/useRig.js.map +1 -1
- package/dist/animation/wrappers/animateLifecycle.js +8 -7
- package/dist/animation/wrappers/animateLifecycle.js.map +1 -1
- package/dist/animation/wrappers/animateOnSetPose.js +31 -31
- package/dist/animation/wrappers/animateOnSetPose.js.map +1 -1
- package/dist/animation/wrappers/instantPose.js.map +1 -1
- package/dist/animation/writtenPoseTarget.js +33 -0
- package/dist/animation/writtenPoseTarget.js.map +1 -0
- package/dist/autoPoseDescriptor-DHg5KqaJ.d.ts +27 -0
- package/dist/barrel/canvas.js +32 -0
- package/dist/barrel/chrome.js +10 -10
- package/dist/barrel/input.js +16 -17
- package/dist/barrel/interactions.js +34 -37
- package/dist/barrel/paint.js +11 -18
- package/dist/barrel/paths.js +13 -19
- package/dist/barrel/renderer.js +14 -20
- package/dist/barrel/routing.js +54 -47
- package/dist/barrel/scene.js +37 -0
- package/dist/barrel/text.js +9 -18
- package/dist/barrel/viewport.js +44 -51
- package/dist/canvas/Canvas.js +270 -475
- package/dist/canvas/Canvas.js.map +1 -1
- package/dist/canvas/CanvasView.js +168 -190
- package/dist/canvas/CanvasView.js.map +1 -1
- package/dist/canvas/CursorCoordsHud.js +24 -25
- package/dist/canvas/CursorCoordsHud.js.map +1 -1
- package/dist/canvas/DrawCanvas.js +39 -56
- package/dist/canvas/DrawCanvas.js.map +1 -1
- package/dist/canvas/ModalityHud.js.map +1 -1
- package/dist/canvas/NodeShape.js +28 -29
- package/dist/canvas/NodeShape.js.map +1 -1
- package/dist/canvas/PickHud.js.map +1 -1
- package/dist/canvas/SceneCanvas/DevHuds.js +40 -0
- package/dist/canvas/SceneCanvas/DevHuds.js.map +1 -0
- package/dist/canvas/SceneCanvas/GestureDispatcherMounter.js +66 -107
- package/dist/canvas/SceneCanvas/GestureDispatcherMounter.js.map +1 -1
- package/dist/canvas/SceneCanvas/PointerProviderIfRoot.js +33 -36
- package/dist/canvas/SceneCanvas/PointerProviderIfRoot.js.map +1 -1
- package/dist/canvas/SceneCanvas/StandardActionsRegistrar.js +38 -50
- package/dist/canvas/SceneCanvas/StandardActionsRegistrar.js.map +1 -1
- package/dist/canvas/SceneCanvas/ToolKeybindingsMounter.js +3 -3
- package/dist/canvas/SceneCanvas/ToolKeybindingsMounter.js.map +1 -1
- package/dist/canvas/SceneCanvas/coordTrace.js +37 -1
- package/dist/canvas/SceneCanvas/coordTrace.js.map +1 -1
- package/dist/canvas/SceneCanvas/defaultNodeProperties.js +319 -270
- package/dist/canvas/SceneCanvas/defaultNodeProperties.js.map +1 -1
- package/dist/canvas/SceneCanvas/defaultNodeRouting.js +1 -1
- package/dist/canvas/SceneCanvas/defaultNodeRouting.js.map +1 -1
- package/dist/canvas/SceneCanvas/dispatcherGestureBounds.js.map +1 -1
- package/dist/canvas/SceneCanvas/features.js +71 -62
- package/dist/canvas/SceneCanvas/features.js.map +1 -1
- package/dist/canvas/SceneCanvas/insertPreviewCommands.js +97 -0
- package/dist/canvas/SceneCanvas/insertPreviewCommands.js.map +1 -0
- package/dist/canvas/SceneCanvas/isDev.js.map +1 -1
- package/dist/canvas/SceneCanvas/poseGeometry.js +33 -37
- package/dist/canvas/SceneCanvas/poseGeometry.js.map +1 -1
- package/dist/canvas/SceneCanvas/props.js +15 -14
- package/dist/canvas/SceneCanvas/props.js.map +1 -1
- package/dist/canvas/SceneCanvas/scenePointQuery.js +50 -0
- package/dist/canvas/SceneCanvas/scenePointQuery.js.map +1 -0
- package/dist/canvas/SceneCanvas/shapeGeneratorProperties.js +52 -0
- package/dist/canvas/SceneCanvas/shapeGeneratorProperties.js.map +1 -0
- package/dist/canvas/SceneCanvas/toolRegistry.js +23 -0
- package/dist/canvas/SceneCanvas/toolRegistry.js.map +1 -0
- package/dist/canvas/SceneCanvas/useActionTunings.js +17 -0
- package/dist/canvas/SceneCanvas/useActionTunings.js.map +1 -0
- package/dist/canvas/SceneCanvas/useActionsPropResolver.js +6 -1
- package/dist/canvas/SceneCanvas/useActionsPropResolver.js.map +1 -1
- package/dist/canvas/SceneCanvas/useBuiltinShapeTools.js.map +1 -1
- package/dist/canvas/SceneCanvas/useBuiltinTools.js +21 -0
- package/dist/canvas/SceneCanvas/useBuiltinTools.js.map +1 -0
- package/dist/canvas/SceneCanvas/useCanvasCamera.js +46 -0
- package/dist/canvas/SceneCanvas/useCanvasCamera.js.map +1 -0
- package/dist/canvas/SceneCanvas/useCanvasDispatcher.js +20 -0
- package/dist/canvas/SceneCanvas/useCanvasDispatcher.js.map +1 -0
- package/dist/canvas/SceneCanvas/useCanvasSelection.js +16 -0
- package/dist/canvas/SceneCanvas/useCanvasSelection.js.map +1 -0
- package/dist/canvas/SceneCanvas/useCanvasTools.js +67 -0
- package/dist/canvas/SceneCanvas/useCanvasTools.js.map +1 -0
- package/dist/canvas/SceneCanvas/useDispatcherOverlayLayer.js +49 -113
- package/dist/canvas/SceneCanvas/useDispatcherOverlayLayer.js.map +1 -1
- package/dist/canvas/SceneCanvas/useHeldModifiers.js +20 -0
- package/dist/canvas/SceneCanvas/useHeldModifiers.js.map +1 -0
- package/dist/canvas/SceneCanvas/useNodeAtPoint.js +26 -0
- package/dist/canvas/SceneCanvas/useNodeAtPoint.js.map +1 -0
- package/dist/canvas/SceneCanvas/useNodeKinds.js +26 -0
- package/dist/canvas/SceneCanvas/useNodeKinds.js.map +1 -0
- package/dist/canvas/SceneCanvas/usePreviewGhostLayer.js +51 -41
- package/dist/canvas/SceneCanvas/usePreviewGhostLayer.js.map +1 -1
- package/dist/canvas/SceneCanvas/useSceneCanvasHandle.js +47 -0
- package/dist/canvas/SceneCanvas/useSceneCanvasHandle.js.map +1 -0
- package/dist/canvas/SceneCanvas/useSceneCanvasLayers.js +66 -0
- package/dist/canvas/SceneCanvas/useSceneCanvasLayers.js.map +1 -0
- package/dist/canvas/SceneCanvas/useSceneChrome.js +59 -0
- package/dist/canvas/SceneCanvas/useSceneChrome.js.map +1 -0
- package/dist/canvas/SceneCanvas/useSceneRedrawSources.js +23 -0
- package/dist/canvas/SceneCanvas/useSceneRedrawSources.js.map +1 -0
- package/dist/canvas/SceneCanvas/useSceneSelectTool.js +65 -101
- package/dist/canvas/SceneCanvas/useSceneSelectTool.js.map +1 -1
- package/dist/canvas/SceneCanvas/useSceneSlotLayers.js +37 -0
- package/dist/canvas/SceneCanvas/useSceneSlotLayers.js.map +1 -0
- package/dist/canvas/SceneCanvas/useSelectionOverlayLayer.js +38 -0
- package/dist/canvas/SceneCanvas/useSelectionOverlayLayer.js.map +1 -0
- package/dist/canvas/SceneCanvas/useViewLayerGate.js +20 -0
- package/dist/canvas/SceneCanvas/useViewLayerGate.js.map +1 -0
- package/dist/canvas/SceneCanvas/useViewportActions.js +9 -1
- package/dist/canvas/SceneCanvas/useViewportActions.js.map +1 -1
- package/dist/canvas/SceneCanvas/worldPointAt.js +8 -0
- package/dist/canvas/SceneCanvas/worldPointAt.js.map +1 -0
- package/dist/canvas/SceneCanvas.js +301 -708
- package/dist/canvas/SceneCanvas.js.map +1 -1
- package/dist/canvas/SceneViewCanvas.js +41 -47
- package/dist/canvas/SceneViewCanvas.js.map +1 -1
- package/dist/canvas/SurfaceCanvas.js +40 -0
- package/dist/canvas/SurfaceCanvas.js.map +1 -0
- package/dist/canvas/adapterDerivedPath.js +26 -0
- package/dist/canvas/adapterDerivedPath.js.map +1 -0
- package/dist/canvas/adapterPickSource.js +34 -0
- package/dist/canvas/adapterPickSource.js.map +1 -0
- package/dist/canvas/affordanceAt.js +12 -2
- package/dist/canvas/affordanceAt.js.map +1 -1
- package/dist/canvas/buildSceneLayer.js +81 -61
- package/dist/canvas/buildSceneLayer.js.map +1 -1
- package/dist/canvas/buildSceneTree.js +56 -34
- package/dist/canvas/buildSceneTree.js.map +1 -1
- package/dist/canvas/canvasRenderer.js +40 -44
- package/dist/canvas/canvasRenderer.js.map +1 -1
- package/dist/canvas/colorOverrides.js.map +1 -1
- package/dist/canvas/copiesAbove.js +27 -0
- package/dist/canvas/copiesAbove.js.map +1 -0
- package/dist/canvas/defaultDrawOne.js +25 -24
- package/dist/canvas/defaultDrawOne.js.map +1 -1
- package/dist/canvas/deps/areaSelect.js +4 -4
- package/dist/canvas/deps/areaSelect.js.map +1 -1
- package/dist/canvas/deps/debug.js.map +1 -1
- package/dist/canvas/deps/editAnchors.js +47 -71
- package/dist/canvas/deps/editAnchors.js.map +1 -1
- package/dist/canvas/deps/geometryProjection.js.map +1 -1
- package/dist/canvas/deps/hitTestArea.js +45 -25
- package/dist/canvas/deps/hitTestArea.js.map +1 -1
- package/dist/canvas/deps/insert.js +149 -104
- package/dist/canvas/deps/insert.js.map +1 -1
- package/dist/canvas/deps/lassoSelect.js +5 -5
- package/dist/canvas/deps/lassoSelect.js.map +1 -1
- package/dist/canvas/deps/layout.js +9 -15
- package/dist/canvas/deps/layout.js.map +1 -1
- package/dist/canvas/deps/poseDescriptor.js +1 -1
- package/dist/canvas/deps/poseDescriptor.js.map +1 -1
- package/dist/canvas/deps/resizePolicy.js.map +1 -1
- package/dist/canvas/deps/slice.js +44 -45
- package/dist/canvas/deps/slice.js.map +1 -1
- package/dist/canvas/deps/textEdit.js +8 -8
- package/dist/canvas/deps/textEdit.js.map +1 -1
- package/dist/canvas/deps/view.js.map +1 -1
- package/dist/canvas/derivedPath.js +69 -43
- package/dist/canvas/derivedPath.js.map +1 -1
- package/dist/canvas/drawEnvelope.js +8 -4
- package/dist/canvas/drawEnvelope.js.map +1 -1
- package/dist/canvas/getNodeAtPoint.js +2 -6
- package/dist/canvas/getNodeAtPoint.js.map +1 -1
- package/dist/canvas/hud.module.js.map +1 -1
- package/dist/canvas/insertPreviewExtent.js +33 -31
- package/dist/canvas/insertPreviewExtent.js.map +1 -1
- package/dist/canvas/layerOrder.js.map +1 -1
- package/dist/canvas/layerSlots.js +6 -1
- package/dist/canvas/layerSlots.js.map +1 -1
- package/dist/canvas/nodeShapes/derivedPainter.js +12 -12
- package/dist/canvas/nodeShapes/derivedPainter.js.map +1 -1
- package/dist/canvas/nodeShapes/imagePainter.js +10 -10
- package/dist/canvas/nodeShapes/imagePainter.js.map +1 -1
- package/dist/canvas/nodeShapes/memo.js.map +1 -1
- package/dist/canvas/nodeShapes/nodePaint.js +34 -23
- package/dist/canvas/nodeShapes/nodePaint.js.map +1 -1
- package/dist/canvas/nodeShapes/pathPainter.js +23 -22
- package/dist/canvas/nodeShapes/pathPainter.js.map +1 -1
- package/dist/canvas/nodeShapes/poseBox.js +6 -6
- package/dist/canvas/nodeShapes/poseBox.js.map +1 -1
- package/dist/canvas/nodeShapes/rectFallbackPainter.js +8 -8
- package/dist/canvas/nodeShapes/rectFallbackPainter.js.map +1 -1
- package/dist/canvas/nodeShapes/shapePainter.js +16 -16
- package/dist/canvas/nodeShapes/shapePainter.js.map +1 -1
- package/dist/canvas/nodeShapes/textPainter.js +1 -1
- package/dist/canvas/nodeShapes/textPainter.js.map +1 -1
- package/dist/canvas/overChildren.js +29 -0
- package/dist/canvas/overChildren.js.map +1 -0
- package/dist/canvas/overlayRoleStrokes.js.map +1 -1
- package/dist/canvas/paintCull.js +6 -8
- package/dist/canvas/paintCull.js.map +1 -1
- package/dist/{features/cursor → canvas}/paintedCursorLayer.js +2 -2
- package/dist/canvas/paintedCursorLayer.js.map +1 -0
- package/dist/canvas/pickReach.js +23 -0
- package/dist/canvas/pickReach.js.map +1 -0
- package/dist/canvas/pickWalk.js +43 -70
- package/dist/canvas/pickWalk.js.map +1 -1
- package/dist/canvas/planeClips.js +18 -19
- package/dist/canvas/planeClips.js.map +1 -1
- package/dist/canvas/poseCascade.js +41 -0
- package/dist/canvas/poseCascade.js.map +1 -0
- package/dist/canvas/poseRotation.js +1 -3
- package/dist/canvas/poseRotation.js.map +1 -1
- package/dist/canvas/rasterReadback.js +22 -0
- package/dist/canvas/rasterReadback.js.map +1 -0
- package/dist/canvas/renderDebugSnapshot.js +12 -12
- package/dist/canvas/renderDebugSnapshot.js.map +1 -1
- package/dist/canvas/renderNeeds.js +3 -3
- package/dist/canvas/renderNeeds.js.map +1 -1
- package/dist/canvas/renderSceneToPixels.js +64 -83
- package/dist/canvas/renderSceneToPixels.js.map +1 -1
- package/dist/canvas/sceneAdapter.js +59 -144
- package/dist/canvas/sceneAdapter.js.map +1 -1
- package/dist/canvas/sceneClipboard.js +1 -1
- package/dist/canvas/sceneClipboard.js.map +1 -1
- package/dist/canvas/sceneLayerPaint.js +4 -4
- package/dist/canvas/sceneLayerPaint.js.map +1 -1
- package/dist/canvas/sceneSlotWiring.js +10 -9
- package/dist/canvas/sceneSlotWiring.js.map +1 -1
- package/dist/canvas/sceneViewRender.js +37 -42
- package/dist/canvas/sceneViewRender.js.map +1 -1
- package/dist/canvas/slopsDebugLayer.js +4 -4
- package/dist/canvas/slopsDebugLayer.js.map +1 -1
- package/dist/canvas/useCanvasRenderer.js +23 -11
- package/dist/canvas/useCanvasRenderer.js.map +1 -1
- package/dist/canvas/useCanvasSurface.js +31 -0
- package/dist/canvas/useCanvasSurface.js.map +1 -0
- package/dist/canvas/useCanvasView.js +51 -44
- package/dist/canvas/useCanvasView.js.map +1 -1
- package/dist/canvas/useFrameLoop.js +11 -12
- package/dist/canvas/useFrameLoop.js.map +1 -1
- package/dist/canvas/useHostAnchor.js +35 -33
- package/dist/canvas/useHostAnchor.js.map +1 -1
- package/dist/canvas/useLateContentRedraw.js +8 -8
- package/dist/canvas/useLateContentRedraw.js.map +1 -1
- package/dist/canvas/useSceneAdapter.js +22 -0
- package/dist/canvas/useSceneAdapter.js.map +1 -0
- package/dist/canvas/useSceneLayerList.js +4 -14
- package/dist/canvas/useSceneLayerList.js.map +1 -1
- package/dist/canvas/useSurfaceInput.js +39 -0
- package/dist/canvas/useSurfaceInput.js.map +1 -0
- package/dist/canvas/useToolCursor.js +29 -0
- package/dist/canvas/useToolCursor.js.map +1 -0
- package/dist/canvas/useViewHelpers.js +46 -85
- package/dist/canvas/useViewHelpers.js.map +1 -1
- package/dist/canvas/viewInputs.js.map +1 -1
- package/dist/canvas/viewRegistry.js +40 -34
- package/dist/canvas/viewRegistry.js.map +1 -1
- package/dist/canvas/watchElementMove.js +43 -0
- package/dist/canvas/watchElementMove.js.map +1 -0
- package/dist/canvas/wrapNodeOutput.js +7 -2
- package/dist/canvas/wrapNodeOutput.js.map +1 -1
- package/dist/clipboard.d.ts +7 -14
- package/dist/{types-B4iJRHC3.d.ts → clone-C0eADtS0.d.ts} +129 -84
- package/dist/clone.d.ts +4 -8
- package/dist/clone.js +0 -2
- package/dist/core/device/targets.js.map +1 -1
- package/dist/core/device/useDeviceProfile.js +13 -13
- package/dist/core/device/useDeviceProfile.js.map +1 -1
- package/dist/{interactions/actions/resize → core/geometry}/autoPoseDescriptor.js +8 -7
- package/dist/core/geometry/autoPoseDescriptor.js.map +1 -0
- package/dist/core/geometry/pathPoseDescriptor.js +88 -0
- package/dist/core/geometry/pathPoseDescriptor.js.map +1 -0
- package/dist/core/geometry/poseDescriptor.js +102 -29
- package/dist/core/geometry/poseDescriptor.js.map +1 -1
- package/dist/core/geometry/regionHit.js +35 -37
- package/dist/core/geometry/regionHit.js.map +1 -1
- package/dist/core/geometry/targetFrame.js +94 -0
- package/dist/core/geometry/targetFrame.js.map +1 -0
- package/dist/core/geometry/unionBounds.js +4 -5
- package/dist/core/geometry/unionBounds.js.map +1 -1
- package/dist/core/layers/backgroundFill.js +31 -0
- package/dist/core/layers/backgroundFill.js.map +1 -0
- package/dist/{features/groups → core/layers}/children.js +2 -4
- package/dist/core/layers/children.js.map +1 -0
- package/dist/{features/focus → core/layers}/gateLayer.js +2 -2
- package/dist/core/layers/gateLayer.js.map +1 -0
- package/dist/core/layers/layerGroup.js +40 -0
- package/dist/core/layers/layerGroup.js.map +1 -0
- package/dist/core/layers/render.js +50 -76
- package/dist/core/layers/render.js.map +1 -1
- package/dist/core/ops/create.js +2 -2
- package/dist/core/ops/create.js.map +1 -1
- package/dist/core/ops/createHistory.js +9 -9
- package/dist/core/ops/createHistory.js.map +1 -1
- package/dist/core/ops/delete.js +19 -23
- package/dist/core/ops/delete.js.map +1 -1
- package/dist/core/ops/reorder/index.js +3 -7
- package/dist/core/ops/reorder/index.js.map +1 -1
- package/dist/core/ops/reorder/setChildOrder.js +2 -4
- package/dist/core/ops/reorder/setChildOrder.js.map +1 -1
- package/dist/core/ops/reparent.js +0 -1
- package/dist/core/ops/reparent.js.map +1 -1
- package/dist/core/ops/slot.js +3 -6
- package/dist/core/ops/slot.js.map +1 -1
- package/dist/core/pages/fitViewToPage.js +15 -0
- package/dist/core/pages/fitViewToPage.js.map +1 -0
- package/dist/core/pages/pages.js +65 -0
- package/dist/core/pages/pages.js.map +1 -0
- package/dist/core/pages/pagesLayer.js +27 -0
- package/dist/core/pages/pagesLayer.js.map +1 -0
- package/dist/core/paint/meshKind.js +16 -0
- package/dist/core/paint/meshKind.js.map +1 -0
- package/dist/{features/meshPaint/lazyKind.js → core/paint/meshKindLazy.js} +104 -93
- package/dist/core/paint/meshKindLazy.js.map +1 -0
- package/dist/core/paint/paintKindEntry.js +8 -0
- package/dist/core/paint/paintKindEntry.js.map +1 -0
- package/dist/core/paint/paintKinds.js +144 -0
- package/dist/core/paint/paintKinds.js.map +1 -0
- package/dist/core/paint/registerMesh.js +7 -0
- package/dist/core/paint/registerMesh.js.map +1 -0
- package/dist/core/scene/NodeProperties.js.map +1 -1
- package/dist/core/scene/NodeRouting.js.map +1 -1
- package/dist/core/scene/arrivalWindow.js +65 -64
- package/dist/core/scene/arrivalWindow.js.map +1 -1
- package/dist/core/scene/boundOps.js +40 -0
- package/dist/core/scene/boundOps.js.map +1 -0
- package/dist/core/scene/composeFrame.js +9 -6
- package/dist/core/scene/composeFrame.js.map +1 -1
- package/dist/core/scene/composePose.js +105 -0
- package/dist/core/scene/composePose.js.map +1 -0
- package/dist/core/scene/depMemo.js +31 -6
- package/dist/core/scene/depMemo.js.map +1 -1
- package/dist/core/scene/derivedPath.js +19 -20
- package/dist/core/scene/derivedPath.js.map +1 -1
- package/dist/core/scene/editMode.js +26 -0
- package/dist/core/scene/editMode.js.map +1 -0
- package/dist/core/scene/effectivePose.js +42 -39
- package/dist/core/scene/effectivePose.js.map +1 -1
- package/dist/core/scene/fieldEdits.js +98 -0
- package/dist/core/scene/fieldEdits.js.map +1 -0
- package/dist/core/scene/historyFacade.js +122 -70
- package/dist/core/scene/historyFacade.js.map +1 -1
- package/dist/core/scene/historyForm.js +6 -0
- package/dist/core/scene/historyForm.js.map +1 -0
- package/dist/core/scene/kitOps.js +83 -71
- package/dist/core/scene/kitOps.js.map +1 -1
- package/dist/core/scene/kitRegistry.js.map +1 -1
- package/dist/core/scene/layerStack.js +105 -12
- package/dist/core/scene/layerStack.js.map +1 -1
- package/dist/core/scene/layoutPass.js +58 -59
- package/dist/core/scene/layoutPass.js.map +1 -1
- package/dist/{features/groups → core/scene}/nestedHit.js +3 -3
- package/dist/core/scene/nestedHit.js.map +1 -0
- package/dist/core/scene/nodeFnFields.js +16 -9
- package/dist/core/scene/nodeFnFields.js.map +1 -1
- package/dist/core/scene/nodeMemo.js.map +1 -1
- package/dist/core/scene/nodeStore.js +72 -71
- package/dist/core/scene/nodeStore.js.map +1 -1
- package/dist/core/scene/notifier.js +37 -0
- package/dist/core/scene/notifier.js.map +1 -0
- package/dist/core/scene/opTable.js +50 -0
- package/dist/core/scene/opTable.js.map +1 -0
- package/dist/core/scene/outerOps.js +67 -0
- package/dist/core/scene/outerOps.js.map +1 -0
- package/dist/core/scene/poseHold.js +39 -0
- package/dist/core/scene/poseHold.js.map +1 -0
- package/dist/core/scene/poseOverrides.js +44 -36
- package/dist/core/scene/poseOverrides.js.map +1 -1
- package/dist/core/scene/poseSnapshot.js.map +1 -1
- package/dist/core/scene/reconcileSpecs.js +4 -3
- package/dist/core/scene/reconcileSpecs.js.map +1 -1
- package/dist/core/scene/recorder.js +86 -0
- package/dist/core/scene/recorder.js.map +1 -0
- package/dist/core/scene/renderOrder.js.map +1 -1
- package/dist/core/scene/scene.js +81 -690
- package/dist/core/scene/scene.js.map +1 -1
- package/dist/core/scene/sceneEdits.js +58 -0
- package/dist/core/scene/sceneEdits.js.map +1 -0
- package/dist/core/scene/sceneMutators.js +49 -0
- package/dist/core/scene/sceneMutators.js.map +1 -0
- package/dist/core/scene/scenePoseAdapter.js +16 -0
- package/dist/core/scene/scenePoseAdapter.js.map +1 -0
- package/dist/core/scene/sceneRecording.js +91 -0
- package/dist/core/scene/sceneRecording.js.map +1 -0
- package/dist/core/scene/sceneSelection.js +28 -0
- package/dist/core/scene/sceneSelection.js.map +1 -0
- package/dist/core/scene/sceneState.js +49 -0
- package/dist/core/scene/sceneState.js.map +1 -0
- package/dist/core/scene/serialization.js +8 -5
- package/dist/core/scene/serialization.js.map +1 -1
- package/dist/core/scene/staleReplay.js +51 -0
- package/dist/core/scene/staleReplay.js.map +1 -0
- package/dist/core/scene/statedFields.js +9 -0
- package/dist/core/scene/statedFields.js.map +1 -0
- package/dist/core/scene/treeEdits.js +127 -0
- package/dist/core/scene/treeEdits.js.map +1 -0
- package/dist/core/scene/treeReads.js +26 -0
- package/dist/core/scene/treeReads.js.map +1 -0
- package/dist/core/scene/types.js.map +1 -1
- package/dist/{features/groups → core/scene}/unionOfChildren.js +3 -3
- package/dist/core/scene/unionOfChildren.js.map +1 -0
- package/dist/core/scene/unitScopes.js +13 -0
- package/dist/core/scene/unitScopes.js.map +1 -0
- package/dist/core/scene/useScene.js.map +1 -1
- package/dist/core/selection/readOnlySelection.js +32 -0
- package/dist/core/selection/readOnlySelection.js.map +1 -0
- package/dist/core/selection/usePublishSceneSelection.js +26 -0
- package/dist/core/selection/usePublishSceneSelection.js.map +1 -0
- package/dist/core/selection/useSelection.js +34 -25
- package/dist/core/selection/useSelection.js.map +1 -1
- package/dist/core/shapeKinds.js.map +1 -1
- package/dist/core/stylus/stylus.js.map +1 -1
- package/dist/core/stylus/usePointerStylus.js.map +1 -1
- package/dist/core/usePaintKinds.js +1 -1
- package/dist/core/usePaintKinds.js.map +1 -1
- package/dist/core/viewport/clientToWorld.js.map +1 -1
- package/dist/core/viewport/fitViewToBounds.js.map +1 -1
- package/dist/core/viewport/parallax.js.map +1 -1
- package/dist/core/viewport/screenSlop.js +11 -11
- package/dist/core/viewport/screenSlop.js.map +1 -1
- package/dist/core/viewport/useCanvasSize.js.map +1 -1
- package/dist/core/viewport/useDecayLoop.js +31 -33
- package/dist/core/viewport/useDecayLoop.js.map +1 -1
- package/dist/core/viewport/useNodeOverlayFrame.js +84 -0
- package/dist/core/viewport/useNodeOverlayFrame.js.map +1 -0
- package/dist/core/viewport/useViewAnimation.js +113 -53
- package/dist/core/viewport/useViewAnimation.js.map +1 -1
- package/dist/core/viewport/view.js +14 -11
- package/dist/core/viewport/view.js.map +1 -1
- package/dist/core/viewport/wheelHandler.js.map +1 -1
- package/dist/core/viewport/zoomAt.js +11 -2
- package/dist/core/viewport/zoomAt.js.map +1 -1
- package/dist/{cornerHandles-CtCb8a3G.d.ts → cornerHandles-BSKbyuvQ.d.ts} +11 -24
- package/dist/debug/createDebugOverlayLayer.js +100 -100
- package/dist/debug/createDebugOverlayLayer.js.map +1 -1
- package/dist/debug/createDebugSink.js.map +1 -1
- package/dist/debug/frameStats.js.map +1 -1
- package/dist/debug/useDebugSink.js +52 -0
- package/dist/debug/useDebugSink.js.map +1 -0
- package/dist/features/chrome-caps/buildChromeCtx.js.map +1 -1
- package/dist/features/chrome-caps/conditions.js.map +1 -1
- package/dist/features/chrome-caps/defaults.js.map +1 -1
- package/dist/features/chrome-caps/resolve.js.map +1 -1
- package/dist/features/chrome-caps/useChromeCaps.js +54 -0
- package/dist/features/chrome-caps/useChromeCaps.js.map +1 -0
- package/dist/features/chrome-caps/useHoverTracking.js.map +1 -1
- package/dist/features/ingestion/contentHandlers.js +25 -19
- package/dist/features/ingestion/contentHandlers.js.map +1 -1
- package/dist/features/ingestion/imageHandler.js +21 -24
- package/dist/features/ingestion/imageHandler.js.map +1 -1
- package/dist/features/ingestion/openFilePicker.js.map +1 -1
- package/dist/features/ingestion/placement.js +16 -0
- package/dist/features/ingestion/placement.js.map +1 -0
- package/dist/features/ingestion/svgHandler.js +5 -0
- package/dist/features/ingestion/svgHandler.js.map +1 -1
- package/dist/features/ingestion/textHandler.js +28 -0
- package/dist/features/ingestion/textHandler.js.map +1 -0
- package/dist/features/ingestion/useCanvasIngestion.js +48 -0
- package/dist/features/ingestion/useCanvasIngestion.js.map +1 -0
- package/dist/features/ingestion/weaselJsonHandler.js +5 -0
- package/dist/features/ingestion/weaselJsonHandler.js.map +1 -1
- package/dist/features/longPress/longPressFeedback.js.map +1 -1
- package/dist/features/modes/modeLayers.js +7 -7
- package/dist/features/modes/modeLayers.js.map +1 -1
- package/dist/features/paths/editablePath.js +63 -0
- package/dist/features/paths/editablePath.js.map +1 -0
- package/dist/features/paths/index.js +9 -16
- package/dist/features/paths/pathEditState.js +41 -0
- package/dist/features/paths/pathEditState.js.map +1 -0
- package/dist/features/paths/pathEditingOverlayLayer.js +36 -38
- package/dist/features/paths/pathEditingOverlayLayer.js.map +1 -1
- package/dist/features/paths/pathLayer.js +3 -2
- package/dist/features/paths/pathLayer.js.map +1 -1
- package/dist/features/paths/penPreviewLayer.js +86 -88
- package/dist/features/paths/penPreviewLayer.js.map +1 -1
- package/dist/features/paths/shapeGenerator.js +89 -0
- package/dist/features/paths/shapeGenerator.js.map +1 -0
- package/dist/features/paths/usePathEdit.js +34 -0
- package/dist/features/paths/usePathEdit.js.map +1 -0
- package/dist/features/poseRun/usePoseRun.js +44 -57
- package/dist/features/poseRun/usePoseRun.js.map +1 -1
- package/dist/features/selection/overlay.js +170 -178
- package/dist/features/selection/overlay.js.map +1 -1
- package/dist/features/text/index.js +6 -0
- package/dist/features/text/textLayer.js +1 -1
- package/dist/features/text/textLayer.js.map +1 -1
- package/dist/features/text/useSceneTextEdit.js +119 -88
- package/dist/features/text/useSceneTextEdit.js.map +1 -1
- package/dist/features/viewports/viewResolver.js +28 -24
- package/dist/features/viewports/viewResolver.js.map +1 -1
- package/dist/features/viewports/viewportLayer.js +25 -36
- package/dist/features/viewports/viewportLayer.js.map +1 -1
- package/dist/icons/SliceIcon.js +24 -0
- package/dist/icons/SliceIcon.js.map +1 -0
- package/dist/index.d.ts +5200 -8777
- package/dist/index.js +284 -320
- package/dist/input/keyState.js +14 -14
- package/dist/interactions/actions/actionShortcuts.js.map +1 -1
- package/dist/interactions/actions/{defaults/align.js → align/action.js} +15 -16
- package/dist/interactions/actions/align/action.js.map +1 -0
- package/dist/interactions/actions/align/align.js +24 -24
- package/dist/interactions/actions/align/align.js.map +1 -1
- package/dist/interactions/actions/booleans/action.js +65 -0
- package/dist/interactions/actions/booleans/action.js.map +1 -0
- package/dist/interactions/actions/booleans/booleans.js +74 -83
- package/dist/interactions/actions/booleans/booleans.js.map +1 -1
- package/dist/interactions/actions/booleans/operands.js +40 -0
- package/dist/interactions/actions/booleans/operands.js.map +1 -0
- package/dist/interactions/actions/booleans/pieces.js +45 -0
- package/dist/interactions/actions/booleans/pieces.js.map +1 -0
- package/dist/interactions/actions/booleans/placement.js +24 -0
- package/dist/interactions/actions/booleans/placement.js.map +1 -0
- package/dist/interactions/actions/booleans/useBooleans.js +11 -9
- package/dist/interactions/actions/booleans/useBooleans.js.map +1 -1
- package/dist/interactions/actions/booleans/useBooleansAdapter.js.map +1 -1
- package/dist/interactions/actions/{defaults/clipboard.js → clipboard/action.js} +19 -19
- package/dist/interactions/actions/clipboard/action.js.map +1 -0
- package/dist/interactions/actions/clipboard/clipboardOps.js +15 -15
- package/dist/interactions/actions/clipboard/clipboardOps.js.map +1 -1
- package/dist/interactions/actions/clipboard/wireFormat.js.map +1 -1
- package/dist/interactions/actions/clone/action.js +103 -0
- package/dist/interactions/actions/clone/action.js.map +1 -0
- package/dist/interactions/actions/clone/behaviors.js +52 -0
- package/dist/interactions/actions/clone/behaviors.js.map +1 -0
- package/dist/interactions/actions/defaultCommitAdapter.js +10 -37
- package/dist/interactions/actions/defaultCommitAdapter.js.map +1 -1
- package/dist/interactions/actions/defaults/anchorEditing.js +69 -74
- package/dist/interactions/actions/defaults/anchorEditing.js.map +1 -1
- package/dist/interactions/actions/defaults/anchorHandles.js +42 -0
- package/dist/interactions/actions/defaults/anchorHandles.js.map +1 -0
- package/dist/interactions/actions/defaults/anchorJoin.js +92 -0
- package/dist/interactions/actions/defaults/anchorJoin.js.map +1 -0
- package/dist/interactions/actions/defaults/areaSelect.js.map +1 -1
- package/dist/interactions/actions/defaults/bendSegment.js +46 -0
- package/dist/interactions/actions/defaults/bendSegment.js.map +1 -0
- package/dist/interactions/actions/defaults/cancelGesture.js.map +1 -1
- package/dist/interactions/actions/defaults/clearSelection.js.map +1 -1
- package/dist/interactions/actions/defaults/copySubtree.js +1 -1
- package/dist/interactions/actions/defaults/copySubtree.js.map +1 -1
- package/dist/interactions/actions/defaults/createPaintAction.js.map +1 -1
- package/dist/interactions/actions/defaults/delete.js.map +1 -1
- package/dist/interactions/actions/defaults/duplicate.js +36 -21
- package/dist/interactions/actions/defaults/duplicate.js.map +1 -1
- package/dist/interactions/actions/defaults/enterPathEdit.js +19 -7
- package/dist/interactions/actions/defaults/enterPathEdit.js.map +1 -1
- package/dist/interactions/actions/defaults/enterTextEdit.js.map +1 -1
- package/dist/interactions/actions/defaults/group.js +35 -40
- package/dist/interactions/actions/defaults/group.js.map +1 -1
- package/dist/interactions/actions/defaults/icons/anchorIcons.js +75 -0
- package/dist/interactions/actions/defaults/icons/anchorIcons.js.map +1 -0
- package/dist/interactions/actions/defaults/icons/booleanIcons.js +24 -1
- package/dist/interactions/actions/defaults/icons/booleanIcons.js.map +1 -1
- package/dist/interactions/actions/defaults/icons/editIcons.js +35 -8
- package/dist/interactions/actions/defaults/icons/editIcons.js.map +1 -1
- package/dist/interactions/actions/defaults/icons/outlineIcons.js +39 -1
- package/dist/interactions/actions/defaults/icons/outlineIcons.js.map +1 -1
- package/dist/interactions/actions/defaults/ingest.js +19 -15
- package/dist/interactions/actions/defaults/ingest.js.map +1 -1
- package/dist/interactions/actions/defaults/insertPathAnchor.js +18 -34
- package/dist/interactions/actions/defaults/insertPathAnchor.js.map +1 -1
- package/dist/interactions/actions/defaults/nudge.js +43 -39
- package/dist/interactions/actions/defaults/nudge.js.map +1 -1
- package/dist/interactions/actions/defaults/pinchZoom.js +29 -29
- package/dist/interactions/actions/defaults/pinchZoom.js.map +1 -1
- package/dist/interactions/actions/defaults/requiresSelection.js.map +1 -1
- package/dist/interactions/actions/defaults/segmentUnder.js +22 -0
- package/dist/interactions/actions/defaults/segmentUnder.js.map +1 -0
- package/dist/interactions/actions/defaults/setFill.js +9 -3
- package/dist/interactions/actions/defaults/setFill.js.map +1 -1
- package/dist/interactions/actions/defaults/setFillOpacity.js +4 -1
- package/dist/interactions/actions/defaults/setFillOpacity.js.map +1 -1
- package/dist/interactions/actions/defaults/setStroke.js.map +1 -1
- package/dist/interactions/actions/defaults/sliceOps.js +20 -22
- package/dist/interactions/actions/defaults/sliceOps.js.map +1 -1
- package/dist/interactions/actions/defaults/toolActivate.js.map +1 -1
- package/dist/interactions/actions/defaults/toolResetToDefault.js.map +1 -1
- package/dist/interactions/actions/defaults/viewportDragPan.js +1 -1
- package/dist/interactions/actions/defaults/viewportDragPan.js.map +1 -1
- package/dist/interactions/actions/defaults/viewportWheelPan.js.map +1 -1
- package/dist/interactions/actions/defaults/viewportZoom.js +82 -79
- package/dist/interactions/actions/defaults/viewportZoom.js.map +1 -1
- package/dist/interactions/actions/{defaults/distribute.js → distribute/action.js} +18 -19
- package/dist/interactions/actions/distribute/action.js.map +1 -0
- package/dist/interactions/actions/distribute/distribute.js +15 -15
- package/dist/interactions/actions/distribute/distribute.js.map +1 -1
- package/dist/interactions/actions/edit-anchors/action.js +101 -0
- package/dist/interactions/actions/edit-anchors/action.js.map +1 -0
- package/dist/interactions/actions/edit-anchors/geometry.js +2 -4
- package/dist/interactions/actions/edit-anchors/geometry.js.map +1 -1
- package/dist/interactions/actions/edit-anchors/preview.js +26 -0
- package/dist/interactions/actions/edit-anchors/preview.js.map +1 -0
- package/dist/interactions/actions/edit-anchors/symmetry.js +11 -0
- package/dist/interactions/actions/edit-anchors/symmetry.js.map +1 -0
- package/dist/interactions/actions/flip/action.js +124 -0
- package/dist/interactions/actions/flip/action.js.map +1 -0
- package/dist/interactions/actions/flip/helpers.js +1 -1
- package/dist/interactions/actions/flip/helpers.js.map +1 -1
- package/dist/interactions/actions/geometryProjection.js.map +1 -1
- package/dist/interactions/actions/gestureFrames.js +18 -0
- package/dist/interactions/actions/gestureFrames.js.map +1 -0
- package/dist/interactions/actions/gestureLifecycle.js +47 -20
- package/dist/interactions/actions/gestureLifecycle.js.map +1 -1
- package/dist/interactions/actions/insert/action.js +79 -0
- package/dist/interactions/actions/insert/action.js.map +1 -0
- package/dist/interactions/actions/insert/commit.js +28 -0
- package/dist/interactions/actions/insert/commit.js.map +1 -0
- package/dist/interactions/actions/insert/extras.js +65 -0
- package/dist/interactions/actions/insert/extras.js.map +1 -0
- package/dist/interactions/actions/insert/frame.js +55 -0
- package/dist/interactions/actions/insert/frame.js.map +1 -0
- package/dist/interactions/actions/insert/geometry.js +35 -0
- package/dist/interactions/actions/insert/geometry.js.map +1 -0
- package/dist/interactions/actions/insert/repositionAction.js +31 -0
- package/dist/interactions/actions/insert/repositionAction.js.map +1 -0
- package/dist/interactions/actions/insert/rotateAction.js +21 -0
- package/dist/interactions/actions/insert/rotateAction.js.map +1 -0
- package/dist/interactions/actions/insert/session.js +59 -0
- package/dist/interactions/actions/insert/session.js.map +1 -0
- package/dist/interactions/actions/insert/shape.js +34 -0
- package/dist/interactions/actions/insert/shape.js.map +1 -0
- package/dist/interactions/actions/lasso-select/action.js +143 -0
- package/dist/interactions/actions/lasso-select/action.js.map +1 -0
- package/dist/interactions/actions/move/action.js +91 -0
- package/dist/interactions/actions/move/action.js.map +1 -0
- package/dist/interactions/actions/move/behaviors/layoutDrop.js +51 -0
- package/dist/interactions/actions/move/behaviors/layoutDrop.js.map +1 -0
- package/dist/interactions/actions/move/behaviors/reparentOnDrop.js +15 -0
- package/dist/interactions/actions/move/behaviors/reparentOnDrop.js.map +1 -0
- package/dist/interactions/actions/move/behaviors/snapToContainer.js +35 -28
- package/dist/interactions/actions/move/behaviors/snapToContainer.js.map +1 -1
- package/dist/interactions/actions/move/capture.js +108 -0
- package/dist/interactions/actions/move/capture.js.map +1 -0
- package/dist/interactions/actions/move/commit/index.js +41 -0
- package/dist/interactions/actions/move/commit/index.js.map +1 -0
- package/dist/interactions/actions/move/commit/layoutDrop.js +44 -0
- package/dist/interactions/actions/move/commit/layoutDrop.js.map +1 -0
- package/dist/interactions/actions/move/commit/layoutRelease.js +100 -0
- package/dist/interactions/actions/move/commit/layoutRelease.js.map +1 -0
- package/dist/interactions/actions/move/commit/rebase.js +18 -0
- package/dist/interactions/actions/move/commit/rebase.js.map +1 -0
- package/dist/interactions/actions/move/commit/reparent.js +65 -0
- package/dist/interactions/actions/move/commit/reparent.js.map +1 -0
- package/dist/interactions/actions/move/delta.js +51 -0
- package/dist/interactions/actions/move/delta.js.map +1 -0
- package/dist/interactions/actions/move/frame.js +47 -0
- package/dist/interactions/actions/move/frame.js.map +1 -0
- package/dist/interactions/actions/move/gestureAdapter.js +15 -40
- package/dist/interactions/actions/move/gestureAdapter.js.map +1 -1
- package/dist/interactions/actions/move/landedDescendants.js +8 -8
- package/dist/interactions/actions/move/layout/container.js +94 -0
- package/dist/interactions/actions/move/layout/container.js.map +1 -0
- package/dist/interactions/actions/move/layout/dragged.js +58 -0
- package/dist/interactions/actions/move/layout/dragged.js.map +1 -0
- package/dist/interactions/actions/move/layout/dropPass.js +122 -0
- package/dist/interactions/actions/move/layout/dropPass.js.map +1 -0
- package/dist/interactions/actions/move/layout/exits.js +38 -0
- package/dist/interactions/actions/move/layout/exits.js.map +1 -0
- package/dist/interactions/actions/move/layout/glide.js +48 -0
- package/dist/interactions/actions/move/layout/glide.js.map +1 -0
- package/dist/interactions/actions/move/session.js +63 -0
- package/dist/interactions/actions/move/session.js.map +1 -0
- package/dist/interactions/actions/move/translate.js +61 -0
- package/dist/interactions/actions/move/translate.js.map +1 -0
- package/dist/interactions/actions/outlines/createOutlines.js +17 -64
- package/dist/interactions/actions/outlines/createOutlines.js.map +1 -1
- package/dist/interactions/actions/outlines/createOutlinesAction.js +51 -0
- package/dist/interactions/actions/outlines/createOutlinesAction.js.map +1 -0
- package/dist/interactions/actions/outlines/outlineStroke.js +72 -0
- package/dist/interactions/actions/outlines/outlineStroke.js.map +1 -0
- package/dist/interactions/actions/outlines/outlineStrokeAction.js +37 -0
- package/dist/interactions/actions/outlines/outlineStrokeAction.js.map +1 -0
- package/dist/interactions/actions/outlines/replaceWithPaths.js +54 -0
- package/dist/interactions/actions/outlines/replaceWithPaths.js.map +1 -0
- package/dist/interactions/actions/outlines/strokeRegion.js +27 -0
- package/dist/interactions/actions/outlines/strokeRegion.js.map +1 -0
- package/dist/interactions/actions/pathCommands/cutJoin.js +102 -0
- package/dist/interactions/actions/pathCommands/cutJoin.js.map +1 -0
- package/dist/interactions/actions/pathCommands/livePathEdit.js +64 -0
- package/dist/interactions/actions/pathCommands/livePathEdit.js.map +1 -0
- package/dist/interactions/actions/pathCommands/pathNodes.js +99 -0
- package/dist/interactions/actions/pathCommands/pathNodes.js.map +1 -0
- package/dist/interactions/actions/pathCommands/simplifyOffset.js +42 -0
- package/dist/interactions/actions/pathCommands/simplifyOffset.js.map +1 -0
- package/dist/interactions/actions/planeInput.js.map +1 -1
- package/dist/interactions/actions/pointerState.js +12 -0
- package/dist/interactions/actions/pointerState.js.map +1 -0
- package/dist/interactions/actions/poseDescriptorDep.js +1 -1
- package/dist/interactions/actions/poseDescriptorDep.js.map +1 -1
- package/dist/interactions/actions/poseFrame.js +26 -26
- package/dist/interactions/actions/poseFrame.js.map +1 -1
- package/dist/interactions/actions/resize/action.js +66 -0
- package/dist/interactions/actions/resize/action.js.map +1 -0
- package/dist/interactions/actions/resize/behaviors/lockAspect.js.map +1 -1
- package/dist/interactions/actions/resize/boxFrame.js +16 -0
- package/dist/interactions/actions/resize/boxFrame.js.map +1 -0
- package/dist/interactions/actions/resize/capture.js +85 -0
- package/dist/interactions/actions/resize/capture.js.map +1 -0
- package/dist/interactions/actions/resize/commit.js +69 -0
- package/dist/interactions/actions/resize/commit.js.map +1 -0
- package/dist/interactions/actions/resize/frame.js +88 -0
- package/dist/interactions/actions/resize/frame.js.map +1 -0
- package/dist/interactions/actions/resize/pointSnap.js +111 -0
- package/dist/interactions/actions/resize/pointSnap.js.map +1 -0
- package/dist/interactions/actions/resize/replay.js +47 -0
- package/dist/interactions/actions/resize/replay.js.map +1 -0
- package/dist/interactions/actions/resize/ruleBounds.js +9 -0
- package/dist/interactions/actions/resize/ruleBounds.js.map +1 -0
- package/dist/interactions/actions/resize/session.js +63 -0
- package/dist/interactions/actions/resize/session.js.map +1 -0
- package/dist/interactions/actions/resolveOverlays.js +2 -1
- package/dist/interactions/actions/resolveOverlays.js.map +1 -1
- package/dist/interactions/actions/resolvePreviews.js.map +1 -1
- package/dist/interactions/actions/rotate/action.js +71 -0
- package/dist/interactions/actions/rotate/action.js.map +1 -0
- package/dist/interactions/actions/rotate/behaviors/index.js +7 -0
- package/dist/interactions/actions/rotate/behaviors/index.js.map +1 -0
- package/dist/interactions/actions/rotate/behaviors/snapRotation.js +12 -0
- package/dist/interactions/actions/rotate/behaviors/snapRotation.js.map +1 -0
- package/dist/interactions/actions/rotate/commit.js +40 -0
- package/dist/interactions/actions/rotate/commit.js.map +1 -0
- package/dist/interactions/actions/rotate/frame.js +65 -0
- package/dist/interactions/actions/rotate/frame.js.map +1 -0
- package/dist/interactions/actions/rotate/handle.js +12 -12
- package/dist/interactions/actions/rotate/handle.js.map +1 -1
- package/dist/interactions/actions/rotate/replay.js +22 -0
- package/dist/interactions/actions/rotate/replay.js.map +1 -0
- package/dist/interactions/actions/rotate/session.js +102 -0
- package/dist/interactions/actions/rotate/session.js.map +1 -0
- package/dist/interactions/actions/spatialReference.js.map +1 -1
- package/dist/interactions/actions/transform-again/action.js +63 -0
- package/dist/interactions/actions/transform-again/action.js.map +1 -0
- package/dist/interactions/actions/transform-again/memory.js +35 -0
- package/dist/interactions/actions/transform-again/memory.js.map +1 -0
- package/dist/interactions/actions/useStandardActions.js +84 -61
- package/dist/interactions/actions/useStandardActions.js.map +1 -1
- package/dist/interactions/gestures/pointerDrag/pointerDrag.js +61 -42
- package/dist/interactions/gestures/pointerDrag/pointerDrag.js.map +1 -1
- package/dist/interactions/gestures/shared/originProjection.js +1 -1
- package/dist/interactions/gestures/shared/originProjection.js.map +1 -1
- package/dist/interactions/gestures/shared/screenTolerance.js +8 -2
- package/dist/interactions/gestures/shared/screenTolerance.js.map +1 -1
- package/dist/interactions/gestures/shared/snap.js.map +1 -1
- package/dist/math-CYUjoyyU.d.ts +33 -0
- package/dist/math.d.ts +5 -2
- package/dist/math.js +6 -6
- package/dist/mesh.d.ts +4 -268
- package/dist/mesh.js +3 -7
- package/dist/move.d.ts +6 -4
- package/dist/{originProjection-gHnOup4e.d.ts → originProjection-CoNVpITV.d.ts} +1 -1
- package/dist/patterns-builtin.d.ts +1 -118
- package/dist/patterns-builtin.js +2 -3
- package/dist/poseDescriptor-Bqk-11Rl.d.ts +73 -0
- package/dist/renderer.d.ts +1 -92
- package/dist/renderer.js +2 -19
- package/dist/resize.d.ts +11 -22
- package/dist/resize.js +1 -1
- package/dist/style.css +1 -1
- package/dist/test-hook/install.js.map +1 -1
- package/dist/test-hook/useTestHook.js +22 -0
- package/dist/test-hook/useTestHook.js.map +1 -0
- package/dist/test-seams-D0pyV3pR.d.ts +149 -0
- package/dist/test-seams.d.ts +4 -4
- package/dist/test-seams.js +2 -2
- package/dist/tools/builtin/bone/boneActions.js +130 -0
- package/dist/tools/builtin/bone/boneActions.js.map +1 -0
- package/dist/tools/builtin/bone/boneOverlay.js +58 -0
- package/dist/tools/builtin/bone/boneOverlay.js.map +1 -0
- package/dist/tools/builtin/bone/placedRig.js +24 -0
- package/dist/tools/builtin/bone/placedRig.js.map +1 -0
- package/dist/tools/builtin/bone/rigEditState.js +21 -0
- package/dist/tools/builtin/bone/rigEditState.js.map +1 -0
- package/dist/tools/builtin/bone/useBoneTool.js +98 -0
- package/dist/tools/builtin/bone/useBoneTool.js.map +1 -0
- package/dist/tools/builtin/ellipse/useEllipseTool.js +16 -15
- package/dist/tools/builtin/ellipse/useEllipseTool.js.map +1 -1
- package/dist/tools/builtin/eyedropper/useEyedropperTool.js.map +1 -1
- package/dist/tools/builtin/hand/useHandTool.js.map +1 -1
- package/dist/tools/builtin/image/useImageTool.js.map +1 -1
- package/dist/tools/builtin/lasso/useLassoTool.js.map +1 -1
- package/dist/tools/builtin/line/useLineTool.js +16 -15
- package/dist/tools/builtin/line/useLineTool.js.map +1 -1
- package/dist/tools/builtin/pen/usePenTool.js +162 -164
- package/dist/tools/builtin/pen/usePenTool.js.map +1 -1
- package/dist/tools/builtin/pencil/usePencilTool.js.map +1 -1
- package/dist/tools/builtin/pickTopMostHit.js +11 -14
- package/dist/tools/builtin/pickTopMostHit.js.map +1 -1
- package/dist/tools/builtin/polygon/usePolygonTool.js +17 -15
- package/dist/tools/builtin/polygon/usePolygonTool.js.map +1 -1
- package/dist/tools/builtin/rect/useRectTool.js +15 -14
- package/dist/tools/builtin/rect/useRectTool.js.map +1 -1
- package/dist/tools/builtin/select/adapterPointQuery.js +40 -0
- package/dist/tools/builtin/select/adapterPointQuery.js.map +1 -0
- package/dist/tools/builtin/select/selectionContributions.js +5 -5
- package/dist/tools/builtin/select/selectionContributions.js.map +1 -1
- package/dist/tools/builtin/select/useSelectTool.js +44 -71
- package/dist/tools/builtin/select/useSelectTool.js.map +1 -1
- package/dist/tools/builtin/shared/pointerFollower.js.map +1 -1
- package/dist/tools/builtin/slice/useSliceTool.js +69 -72
- package/dist/tools/builtin/slice/useSliceTool.js.map +1 -1
- package/dist/tools/builtin/star/useStarTool.js +18 -16
- package/dist/tools/builtin/star/useStarTool.js.map +1 -1
- package/dist/tools/builtin/text/useTextTool.js +10 -2
- package/dist/tools/builtin/text/useTextTool.js.map +1 -1
- package/dist/tools/builtin/weight/useWeightTool.js +77 -0
- package/dist/tools/builtin/weight/useWeightTool.js.map +1 -0
- package/dist/tools/builtin/weight/weightActions.js +112 -0
- package/dist/tools/builtin/weight/weightActions.js.map +1 -0
- package/dist/tools/builtin/weight/weightOverlay.js +61 -0
- package/dist/tools/builtin/weight/weightOverlay.js.map +1 -0
- package/dist/tools/overlayBinding.js.map +1 -1
- package/dist/tools/useKeybindings.js +20 -14
- package/dist/tools/useKeybindings.js.map +1 -1
- package/dist/{types-k-5Oqh-U.d.ts → types-DBbbCy0i.d.ts} +103 -176
- package/dist/util/paint.js +1 -1
- package/dist/util/paint.js.map +1 -1
- package/dist/version.js +1 -1
- package/package.json +26 -21
- package/dist/animation/colorHelpers.js +0 -135
- package/dist/animation/colorHelpers.js.map +0 -1
- package/dist/animation/colorRegistry.js +0 -37
- package/dist/animation/colorRegistry.js.map +0 -1
- package/dist/animation/engine/axes.js +0 -36
- package/dist/animation/engine/axes.js.map +0 -1
- package/dist/animation/engine/codec.js +0 -170
- package/dist/animation/engine/codec.js.map +0 -1
- package/dist/animation/engine/integrator.js +0 -12
- package/dist/animation/engine/integrator.js.map +0 -1
- package/dist/animation/loop.js +0 -60
- package/dist/animation/loop.js.map +0 -1
- package/dist/animation/observe.js +0 -23
- package/dist/animation/observe.js.map +0 -1
- package/dist/animation/rig/blendPoses.js +0 -43
- package/dist/animation/rig/blendPoses.js.map +0 -1
- package/dist/animation/rig/mirrorPose.js +0 -19
- package/dist/animation/rig/mirrorPose.js.map +0 -1
- package/dist/animation/rig/resolveSkeleton.js +0 -33
- package/dist/animation/rig/resolveSkeleton.js.map +0 -1
- package/dist/animation/rig/solveIk.js +0 -103
- package/dist/animation/rig/solveIk.js.map +0 -1
- package/dist/animation/rig/types.js +0 -12
- package/dist/animation/rig/types.js.map +0 -1
- package/dist/animation/slew.js +0 -27
- package/dist/animation/slew.js.map +0 -1
- package/dist/animation/stagger.js +0 -146
- package/dist/animation/stagger.js.map +0 -1
- package/dist/animation/timeline/booking.js +0 -114
- package/dist/animation/timeline/booking.js.map +0 -1
- package/dist/animation/timeline/createTimeline.js +0 -125
- package/dist/animation/timeline/createTimeline.js.map +0 -1
- package/dist/animation/timeline/sampleTrack.js +0 -79
- package/dist/animation/timeline/sampleTrack.js.map +0 -1
- package/dist/animation/useAnimator.js +0 -388
- package/dist/animation/useAnimator.js.map +0 -1
- package/dist/autoPoseDescriptor-Ct7yqivU.d.ts +0 -108
- package/dist/builtins-DPcdghtB.d.ts +0 -1223
- package/dist/canvas/MinimapCanvas.js +0 -140
- package/dist/canvas/MinimapCanvas.js.map +0 -1
- package/dist/canvas/deps/poseComposition.js +0 -11
- package/dist/canvas/deps/poseComposition.js.map +0 -1
- package/dist/canvas/minimapMath.js +0 -82
- package/dist/canvas/minimapMath.js.map +0 -1
- package/dist/canvas/toolPreview.js +0 -39
- package/dist/canvas/toolPreview.js.map +0 -1
- package/dist/core/adapters/arrayAdapter.js +0 -94
- package/dist/core/adapters/arrayAdapter.js.map +0 -1
- package/dist/core/adapters/useArrayAdapter.js +0 -13
- package/dist/core/adapters/useArrayAdapter.js.map +0 -1
- package/dist/core/fillInPoseFrame.js +0 -102
- package/dist/core/fillInPoseFrame.js.map +0 -1
- package/dist/core/geometry/poseFrame.js +0 -44
- package/dist/core/geometry/poseFrame.js.map +0 -1
- package/dist/core/geometry/poseRotation.js +0 -58
- package/dist/core/geometry/poseRotation.js.map +0 -1
- package/dist/core/gradient.js +0 -136
- package/dist/core/gradient.js.map +0 -1
- package/dist/core/markerInset.js +0 -24
- package/dist/core/markerInset.js.map +0 -1
- package/dist/core/mixed.js +0 -6
- package/dist/core/mixed.js.map +0 -1
- package/dist/core/paintKinds.js +0 -156
- package/dist/core/paintKinds.js.map +0 -1
- package/dist/core/scene/pickability.js +0 -6
- package/dist/core/scene/pickability.js.map +0 -1
- package/dist/core/strokeMarkerShapes.js +0 -139
- package/dist/core/strokeMarkerShapes.js.map +0 -1
- package/dist/core/strokeMarkers.js +0 -28
- package/dist/core/strokeMarkers.js.map +0 -1
- package/dist/core/viewport/meanScale.js +0 -8
- package/dist/core/viewport/meanScale.js.map +0 -1
- package/dist/core/viewport/pxExtent.js +0 -42
- package/dist/core/viewport/pxExtent.js.map +0 -1
- package/dist/features/cursor/paintedCursorLayer.js.map +0 -1
- package/dist/features/focus/gateLayer.js.map +0 -1
- package/dist/features/focus/useCanvasFocus.js +0 -29
- package/dist/features/focus/useCanvasFocus.js.map +0 -1
- package/dist/features/groups/children.js.map +0 -1
- package/dist/features/groups/composePose.js +0 -67
- package/dist/features/groups/composePose.js.map +0 -1
- package/dist/features/groups/nestedHit.js.map +0 -1
- package/dist/features/groups/unionOfChildren.js.map +0 -1
- package/dist/features/images/imageCache.js +0 -104
- package/dist/features/images/imageCache.js.map +0 -1
- package/dist/features/ingestion/index.js +0 -8
- package/dist/features/meshPaint/bake.js +0 -79
- package/dist/features/meshPaint/bake.js.map +0 -1
- package/dist/features/meshPaint/bakeCache.js +0 -59
- package/dist/features/meshPaint/bakeCache.js.map +0 -1
- package/dist/features/meshPaint/handles.js +0 -86
- package/dist/features/meshPaint/handles.js.map +0 -1
- package/dist/features/meshPaint/lazyKind.js.map +0 -1
- package/dist/features/meshPaint/meshPaint.js +0 -239
- package/dist/features/meshPaint/meshPaint.js.map +0 -1
- package/dist/features/meshPaint/meshShader.js +0 -6
- package/dist/features/meshPaint/meshShader.js.map +0 -1
- package/dist/features/meshPaint/register.js +0 -7
- package/dist/features/meshPaint/register.js.map +0 -1
- package/dist/features/meshPaint/surface.js +0 -110
- package/dist/features/meshPaint/surface.js.map +0 -1
- package/dist/features/minimap/actions.js +0 -53
- package/dist/features/minimap/actions.js.map +0 -1
- package/dist/features/minimap/createMinimapContribution.js +0 -96
- package/dist/features/minimap/createMinimapContribution.js.map +0 -1
- package/dist/features/minimap/layers.js +0 -85
- package/dist/features/minimap/layers.js.map +0 -1
- package/dist/features/overlays/useNodeOverlayFrame.js +0 -103
- package/dist/features/overlays/useNodeOverlayFrame.js.map +0 -1
- package/dist/features/parallax/createParallaxLayer.js +0 -26
- package/dist/features/parallax/createParallaxLayer.js.map +0 -1
- package/dist/features/parallax/createParallaxPlane.js +0 -22
- package/dist/features/parallax/createParallaxPlane.js.map +0 -1
- package/dist/features/paths/anchorEdits.js +0 -167
- package/dist/features/paths/anchorEdits.js.map +0 -1
- package/dist/features/paths/anchors.js +0 -159
- package/dist/features/paths/anchors.js.map +0 -1
- package/dist/features/paths/booleans.js +0 -2
- package/dist/features/paths/markerCommands.js +0 -149
- package/dist/features/paths/markerCommands.js.map +0 -1
- package/dist/features/paths/markerSites.js +0 -59
- package/dist/features/paths/markerSites.js.map +0 -1
- package/dist/features/paths/markers.js +0 -95
- package/dist/features/paths/markers.js.map +0 -1
- package/dist/features/paths/nearestAnchor.js +0 -36
- package/dist/features/paths/nearestAnchor.js.map +0 -1
- package/dist/features/paths/pathInWorld.js +0 -41
- package/dist/features/paths/pathInWorld.js.map +0 -1
- package/dist/features/paths/poseDescriptor.js +0 -39
- package/dist/features/paths/poseDescriptor.js.map +0 -1
- package/dist/features/paths/strokeToPath.js +0 -40
- package/dist/features/paths/strokeToPath.js.map +0 -1
- package/dist/features/paths/tessellate/dash.js +0 -52
- package/dist/features/paths/tessellate/dash.js.map +0 -1
- package/dist/features/paths/tessellate/insets.js +0 -32
- package/dist/features/paths/tessellate/insets.js.map +0 -1
- package/dist/features/paths/tessellate/metric.js +0 -72
- package/dist/features/paths/tessellate/metric.js.map +0 -1
- package/dist/features/paths/tessellate/stroke.js +0 -170
- package/dist/features/paths/tessellate/stroke.js.map +0 -1
- package/dist/features/paths/tessellate/vertexWidths.js +0 -32
- package/dist/features/paths/tessellate/vertexWidths.js.map +0 -1
- package/dist/features/patterns/commandPaint.js +0 -18
- package/dist/features/patterns/commandPaint.js.map +0 -1
- package/dist/features/patterns/index.js +0 -11
- package/dist/features/patterns/index.js.map +0 -1
- package/dist/features/patterns/patterns-builtin.js +0 -38
- package/dist/features/patterns/patterns-builtin.js.map +0 -1
- package/dist/features/patterns/rasterizeTile.js +0 -17
- package/dist/features/patterns/rasterizeTile.js.map +0 -1
- package/dist/features/patterns/resolveSpec.js +0 -65
- package/dist/features/patterns/resolveSpec.js.map +0 -1
- package/dist/features/patterns/tileGeometry.js +0 -158
- package/dist/features/patterns/tileGeometry.js.map +0 -1
- package/dist/features/pointer/PointerContext.js +0 -45
- package/dist/features/pointer/PointerContext.js.map +0 -1
- package/dist/features/selection/SelectionContext.js +0 -51
- package/dist/features/selection/SelectionContext.js.map +0 -1
- package/dist/features/simulation/createSimulation.js +0 -61
- package/dist/features/simulation/createSimulation.js.map +0 -1
- package/dist/features/simulation/types.js +0 -6
- package/dist/features/simulation/types.js.map +0 -1
- package/dist/features/simulation/useSimulation.js +0 -74
- package/dist/features/simulation/useSimulation.js.map +0 -1
- package/dist/features/text/domOffsets.js +0 -82
- package/dist/features/text/domOffsets.js.map +0 -1
- package/dist/features/text/domRuns.js +0 -230
- package/dist/features/text/domRuns.js.map +0 -1
- package/dist/features/text/fitTextPose.js +0 -38
- package/dist/features/text/fitTextPose.js.map +0 -1
- package/dist/features/text/hitTest.js +0 -48
- package/dist/features/text/hitTest.js.map +0 -1
- package/dist/features/text/isTextData.js +0 -8
- package/dist/features/text/isTextData.js.map +0 -1
- package/dist/features/text/overlayDirection.js +0 -15
- package/dist/features/text/overlayDirection.js.map +0 -1
- package/dist/features/text/renderLabel.js +0 -14
- package/dist/features/text/renderLabel.js.map +0 -1
- package/dist/features/text/runs/effectiveRangeStyle.js +0 -66
- package/dist/features/text/runs/effectiveRangeStyle.js.map +0 -1
- package/dist/features/text/runs/flagRange.js +0 -53
- package/dist/features/text/runs/flagRange.js.map +0 -1
- package/dist/features/text/runs/rangeStyle.js +0 -133
- package/dist/features/text/runs/rangeStyle.js.map +0 -1
- package/dist/features/text/textCommand.js +0 -60
- package/dist/features/text/textCommand.js.map +0 -1
- package/dist/features/text/textToPath.js +0 -181
- package/dist/features/text/textToPath.js.map +0 -1
- package/dist/features/text/useTextEdit.js +0 -491
- package/dist/features/text/useTextEdit.js.map +0 -1
- package/dist/features/tiling/createTiledLayer.js +0 -65
- package/dist/features/tiling/createTiledLayer.js.map +0 -1
- package/dist/features/tiling/tiledProject.js +0 -14
- package/dist/features/tiling/tiledProject.js.map +0 -1
- package/dist/interactions/actions/clone/behaviors/cloneByAltDrag.js +0 -26
- package/dist/interactions/actions/clone/behaviors/cloneByAltDrag.js.map +0 -1
- package/dist/interactions/actions/defaults/align.js.map +0 -1
- package/dist/interactions/actions/defaults/booleans.js +0 -52
- package/dist/interactions/actions/defaults/booleans.js.map +0 -1
- package/dist/interactions/actions/defaults/clipboard.js.map +0 -1
- package/dist/interactions/actions/defaults/clone.js +0 -91
- package/dist/interactions/actions/defaults/clone.js.map +0 -1
- package/dist/interactions/actions/defaults/createOutlines.js +0 -47
- package/dist/interactions/actions/defaults/createOutlines.js.map +0 -1
- package/dist/interactions/actions/defaults/distribute.js.map +0 -1
- package/dist/interactions/actions/defaults/editAnchors.js +0 -100
- package/dist/interactions/actions/defaults/editAnchors.js.map +0 -1
- package/dist/interactions/actions/defaults/flip.js +0 -125
- package/dist/interactions/actions/defaults/flip.js.map +0 -1
- package/dist/interactions/actions/defaults/insert.js +0 -287
- package/dist/interactions/actions/defaults/insert.js.map +0 -1
- package/dist/interactions/actions/defaults/lassoSelect.js +0 -153
- package/dist/interactions/actions/defaults/lassoSelect.js.map +0 -1
- package/dist/interactions/actions/defaults/move.js +0 -778
- package/dist/interactions/actions/defaults/move.js.map +0 -1
- package/dist/interactions/actions/defaults/resize.js +0 -341
- package/dist/interactions/actions/defaults/resize.js.map +0 -1
- package/dist/interactions/actions/defaults/rotate.js +0 -185
- package/dist/interactions/actions/defaults/rotate.js.map +0 -1
- package/dist/interactions/actions/previewOverrides.js +0 -25
- package/dist/interactions/actions/previewOverrides.js.map +0 -1
- package/dist/interactions/actions/resize/autoPoseDescriptor.js.map +0 -1
- package/dist/layout/arrivals.js +0 -36
- package/dist/layout/arrivals.js.map +0 -1
- package/dist/math-J-ACHyEg.d.ts +0 -159
- package/dist/registerProgram-T9S_PfAX.d.ts +0 -208
- package/dist/renderer/DrawCommand.js +0 -6
- package/dist/renderer/DrawCommand.js.map +0 -1
- package/dist/renderer/WeaselRenderer.js +0 -333
- package/dist/renderer/WeaselRenderer.js.map +0 -1
- package/dist/renderer/batchClip.js +0 -46
- package/dist/renderer/batchClip.js.map +0 -1
- package/dist/renderer/cache/GLImageCache.js +0 -74
- package/dist/renderer/cache/GLImageCache.js.map +0 -1
- package/dist/renderer/cache/GLMeshCache.js +0 -102
- package/dist/renderer/cache/GLMeshCache.js.map +0 -1
- package/dist/renderer/cache/GLTextureCache.js +0 -68
- package/dist/renderer/cache/GLTextureCache.js.map +0 -1
- package/dist/renderer/cache/GradientRampAtlas.js +0 -82
- package/dist/renderer/cache/GradientRampAtlas.js.map +0 -1
- package/dist/renderer/cache/cache.js +0 -13
- package/dist/renderer/cache/cache.js.map +0 -1
- package/dist/renderer/cache/markerCommandCache.js +0 -63
- package/dist/renderer/cache/markerCommandCache.js.map +0 -1
- package/dist/renderer/cache/outlineMeshCache.js +0 -15
- package/dist/renderer/cache/outlineMeshCache.js.map +0 -1
- package/dist/renderer/cache/outlineStrokeMeshCache.js +0 -36
- package/dist/renderer/cache/outlineStrokeMeshCache.js.map +0 -1
- package/dist/renderer/cache/strokeMeshCache.js +0 -55
- package/dist/renderer/cache/strokeMeshCache.js.map +0 -1
- package/dist/renderer/cullDrawCommands.js +0 -90
- package/dist/renderer/cullDrawCommands.js.map +0 -1
- package/dist/renderer/draw/batch.js +0 -133
- package/dist/renderer/draw/batch.js.map +0 -1
- package/dist/renderer/draw/clip.js +0 -89
- package/dist/renderer/draw/clip.js.map +0 -1
- package/dist/renderer/draw/customShader.js +0 -230
- package/dist/renderer/draw/customShader.js.map +0 -1
- package/dist/renderer/draw/drawTriangles.js +0 -8
- package/dist/renderer/draw/drawTriangles.js.map +0 -1
- package/dist/renderer/draw/effects.js +0 -28
- package/dist/renderer/draw/effects.js.map +0 -1
- package/dist/renderer/draw/flushBatch.js +0 -35
- package/dist/renderer/draw/flushBatch.js.map +0 -1
- package/dist/renderer/draw/gradient.js +0 -90
- package/dist/renderer/draw/gradient.js.map +0 -1
- package/dist/renderer/draw/image.js +0 -38
- package/dist/renderer/draw/image.js.map +0 -1
- package/dist/renderer/draw/mesh.js +0 -16
- package/dist/renderer/draw/mesh.js.map +0 -1
- package/dist/renderer/draw/paintBind.js +0 -70
- package/dist/renderer/draw/paintBind.js.map +0 -1
- package/dist/renderer/draw/pathPaint.js +0 -142
- package/dist/renderer/draw/pathPaint.js.map +0 -1
- package/dist/renderer/draw/scratchPass.js +0 -83
- package/dist/renderer/draw/scratchPass.js.map +0 -1
- package/dist/renderer/draw/stencil.js +0 -28
- package/dist/renderer/draw/stencil.js.map +0 -1
- package/dist/renderer/draw/text.js +0 -167
- package/dist/renderer/draw/text.js.map +0 -1
- package/dist/renderer/draw/uniforms.js +0 -77
- package/dist/renderer/draw/uniforms.js.map +0 -1
- package/dist/renderer/draw.js +0 -79
- package/dist/renderer/draw.js.map +0 -1
- package/dist/renderer/drawBatch.js +0 -198
- package/dist/renderer/drawBatch.js.map +0 -1
- package/dist/renderer/effects/EffectTargets.js +0 -48
- package/dist/renderer/effects/EffectTargets.js.map +0 -1
- package/dist/renderer/effects/builtins.js +0 -31
- package/dist/renderer/effects/builtins.js.map +0 -1
- package/dist/renderer/effects/composite.js +0 -11
- package/dist/renderer/effects/composite.js.map +0 -1
- package/dist/renderer/effects/effectPrelude.js +0 -10
- package/dist/renderer/effects/effectPrelude.js.map +0 -1
- package/dist/renderer/effects/types.js +0 -10
- package/dist/renderer/effects/types.js.map +0 -1
- package/dist/renderer/glyphOutlineMesh.js +0 -67
- package/dist/renderer/glyphOutlineMesh.js.map +0 -1
- package/dist/renderer/index.js +0 -20
- package/dist/renderer/math/color.js +0 -321
- package/dist/renderer/math/color.js.map +0 -1
- package/dist/renderer/math/mat3.js +0 -80
- package/dist/renderer/math/mat3.js.map +0 -1
- package/dist/renderer/math/patternSpace.js +0 -22
- package/dist/renderer/math/patternSpace.js.map +0 -1
- package/dist/renderer/math/viewToMat3.js +0 -19
- package/dist/renderer/math/viewToMat3.js.map +0 -1
- package/dist/renderer/paintResources.js +0 -18
- package/dist/renderer/paintResources.js.map +0 -1
- package/dist/renderer/paintScratch.js +0 -37
- package/dist/renderer/paintScratch.js.map +0 -1
- package/dist/renderer/shaders/ShaderProgram.js +0 -74
- package/dist/renderer/shaders/ShaderProgram.js.map +0 -1
- package/dist/renderer/shaders/batchFill.js +0 -119
- package/dist/renderer/shaders/batchFill.js.map +0 -1
- package/dist/renderer/shaders/customPrelude.js +0 -34
- package/dist/renderer/shaders/customPrelude.js.map +0 -1
- package/dist/renderer/shaders/extractUniformNames.js +0 -184
- package/dist/renderer/shaders/extractUniformNames.js.map +0 -1
- package/dist/renderer/shaders/glyphPaint.js +0 -61
- package/dist/renderer/shaders/glyphPaint.js.map +0 -1
- package/dist/renderer/shaders/gradFill.js +0 -31
- package/dist/renderer/shaders/gradFill.js.map +0 -1
- package/dist/renderer/shaders/pathFill.js +0 -14
- package/dist/renderer/shaders/pathFill.js.map +0 -1
- package/dist/renderer/shaders/patternFill.js +0 -25
- package/dist/renderer/shaders/patternFill.js.map +0 -1
- package/dist/renderer/shaders/registerProgram.js +0 -18
- package/dist/renderer/shaders/registerProgram.js.map +0 -1
- package/dist/renderer/spriteSheet.js +0 -14
- package/dist/renderer/spriteSheet.js.map +0 -1
- package/dist/renderer/state/GroupState.js +0 -77
- package/dist/renderer/state/GroupState.js.map +0 -1
- package/dist/renderer/strokeLengths.js +0 -50
- package/dist/renderer/strokeLengths.js.map +0 -1
- package/dist/renderer/syntheticItalic.js +0 -6
- package/dist/renderer/syntheticItalic.js.map +0 -1
- package/dist/renderer/textures/registerTexture.js +0 -34
- package/dist/renderer/textures/registerTexture.js.map +0 -1
- package/dist/scheduling/useVisibleRaf.js +0 -69
- package/dist/scheduling/useVisibleRaf.js.map +0 -1
- package/dist/test-seams-DM2B87-g.d.ts +0 -356
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
import { commitGestureOps as e, readGestureLifecycle as t } from "../gestureLifecycle.js";
|
|
2
|
+
import { gestureReaders as n } from "../../gestures/shared/screenTolerance.js";
|
|
3
|
+
import { nodeDescriptors as r, poseDescriptorOf as i } from "../poseDescriptorDep.js";
|
|
4
|
+
import { moveSources as a } from "../selectionSubtree.js";
|
|
5
|
+
import { layoutDrop as o } from "./behaviors/layoutDrop.js";
|
|
6
|
+
import { reparentOnDrop as s } from "./behaviors/reparentOnDrop.js";
|
|
7
|
+
import { buildGestureContext as c, captureFrames as l, capturePlaneRefs as u, captureStartPoses as d } from "./capture.js";
|
|
8
|
+
import { moveGestureAdapter as f } from "./gestureAdapter.js";
|
|
9
|
+
import { DRAG_THRESHOLD_PX as p, isPathEditPart as m, resolveParams as h } from "@weasel-js/routing";
|
|
10
|
+
//#region src/interactions/actions/move/session.ts
|
|
11
|
+
function g(g, _, v) {
|
|
12
|
+
let y = g.deps.selection, b = g.deps.scene, x = i(g.deps.poseDescriptor), S = g.deps.layout, C = g.deps.applyOps, w = g.deps.geometryProjection;
|
|
13
|
+
if (!y || !b) return null;
|
|
14
|
+
let T = b.composition;
|
|
15
|
+
if (m(g.drag?.affordance)) return null;
|
|
16
|
+
let E = h(_?.params), D = E?.expandIds, O = [...y.get()], k = a(b, D ? D(O) : O);
|
|
17
|
+
if (k.length === 0) return null;
|
|
18
|
+
let A = S?.reflow ?? null, { startPoses: j, cascadeIds: M, caught: N } = d(b, k, A, x), { carried: P, frames: F } = l(b, k, j), I = {
|
|
19
|
+
session: () => U,
|
|
20
|
+
frame: v
|
|
21
|
+
}, L = [
|
|
22
|
+
..._?.behaviors ?? [],
|
|
23
|
+
...S ? [o(I)] : [],
|
|
24
|
+
s(I)
|
|
25
|
+
], R = E?.dragThresholdPx ?? p, z = t(E, "Move", L), B = f(b, (t, n, r) => e({
|
|
26
|
+
scene: b,
|
|
27
|
+
applyOps: C,
|
|
28
|
+
adapter: r
|
|
29
|
+
}, z, t), y.adapterMethods), V = n(g.deps), H = c(g, b, k, j, B, V);
|
|
30
|
+
for (let e of L) e.onStart?.(H);
|
|
31
|
+
let U = {
|
|
32
|
+
startPoses: j,
|
|
33
|
+
ids: k,
|
|
34
|
+
cascadeIds: M,
|
|
35
|
+
carried: P,
|
|
36
|
+
frames: F,
|
|
37
|
+
scene: b,
|
|
38
|
+
view: g.deps.view,
|
|
39
|
+
planeRefs: u(b, k, g.deps.view, F, j, x),
|
|
40
|
+
caught: N,
|
|
41
|
+
projection: x,
|
|
42
|
+
descriptorOf: r(b, x),
|
|
43
|
+
behaviors: L,
|
|
44
|
+
gestureCtx: H,
|
|
45
|
+
adapter: B,
|
|
46
|
+
layout: S,
|
|
47
|
+
pc: T,
|
|
48
|
+
applyOps: C,
|
|
49
|
+
geometryProjection: w,
|
|
50
|
+
lifecycle: z,
|
|
51
|
+
nodeAtPoint: g.deps.nodeAtPoint,
|
|
52
|
+
reparentOnDrop: () => h(_?.params)?.reparentOnDrop ?? "off",
|
|
53
|
+
dragThresholdPx: R
|
|
54
|
+
};
|
|
55
|
+
return {
|
|
56
|
+
session: U,
|
|
57
|
+
readers: V
|
|
58
|
+
};
|
|
59
|
+
}
|
|
60
|
+
//#endregion
|
|
61
|
+
export { g as beginMove };
|
|
62
|
+
|
|
63
|
+
//# sourceMappingURL=session.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"session.js","names":["beginMove","selection","ctx","scene","projection","poseDescriptorOf","layout","applyOps","geometryProjection","pc","isPathEditPart","params","resolveParams","opts","expandIds","\"expandIds\"","selected","ids","moveSources","reflow","captureStartPoses","captureFrames","startPoses","gesture","session","behaviors","layoutDrop","reparentOnDrop","dragThresholdPx","\"dragThresholdPx\"","DRAG_THRESHOLD_PX","lifecycle","readGestureLifecycle","adapter","moveGestureAdapter","commitGestureOps","through","ops","readers","gestureReaders","gestureCtx","buildGestureContext","b","capturePlaneRefs","frames","nodeDescriptors","\"reparentOnDrop\""],"sources":["../../../../src/interactions/actions/move/session.ts"],"sourcesContent":["import type { BindingOpts, InvocationCtx } from '@weasel-js/routing';\nimport { DRAG_THRESHOLD_PX, isPathEditPart, resolveParams } from '@weasel-js/routing';\nimport type { Op } from 'core/ops/types';\nimport type { NodeId, Scene } from 'core/scene/types';\nimport type { PoseDescriptor } from 'core/geometry/poseDescriptor';\nimport type { PoseComposition } from 'core/scene/composePose';\nimport { gestureReaders, type GestureReaders } from '../../gestures/shared/screenTolerance';\nimport type { GestureContext, MoveBehavior } from '../../gestures/types';\nimport type { LayoutDep, NodeAtPointDep } from '../depSchema';\nimport type { GeometryProjection } from '../geometryProjection';\nimport { commitGestureOps, readGestureLifecycle, type GestureLifecycle } from '../gestureLifecycle';\nimport { nodeDescriptors, poseDescriptorOf } from '../poseDescriptorDep';\nimport { moveSources } from '../selectionSubtree';\nimport { layoutDrop } from './behaviors/layoutDrop';\nimport { reparentOnDrop } from './behaviors/reparentOnDrop';\nimport { buildGestureContext, captureFrames, capturePlaneRefs, captureStartPoses } from './capture';\nimport { moveGestureAdapter, type MoveGestureAdapter } from './gestureAdapter';\n\n/** Allowed values for the `reparentOnDrop` binding param. `'off'` (the\n * default) preserves the legacy translate-only commit. `'top'` lands the\n * moved node at the top of the container under the cursor. `'above'`\n * lands it immediately above the hit sibling in z-order (falls back to\n * `'top'` semantics when the hit is itself a container or when the hit\n * and moved node share no parent). */\nexport type ReparentOnDrop = 'off' | 'top' | 'above';\n\n/** What a move captured at press. Nothing here changes during the drag. */\nexport interface MoveSession {\n readonly scene: Scene<unknown, string, unknown>;\n /** The drag roots. */\n readonly ids: readonly NodeId[];\n /** Descendants of the roots, previewed along with them. */\n readonly cascadeIds: readonly NodeId[];\n /** Start pose of every root and descendant. */\n readonly startPoses: ReadonlyMap<NodeId, unknown>;\n /** Ids whose frame is itself moving, so they ride it and are not translated. */\n readonly carried: ReadonlySet<NodeId>;\n /** For each moved id stored under a frame: its world pose and the frame's, at press. */\n readonly frames: ReadonlyMap<NodeId, { world: unknown; frameWorld: unknown }>;\n /** Ids grabbed mid-glide, with how far the pose shown stood from the document's. */\n readonly caught: ReadonlyMap<NodeId, { dx: number; dy: number }>;\n /** Per layer on another plane than the edited one: a point of its first root, in both. */\n readonly planeRefs: ReadonlyMap<string, { own: { x: number; y: number }; edited: { x: number; y: number } }>;\n readonly view: unknown;\n readonly projection: PoseDescriptor<unknown>;\n readonly descriptorOf: (id: NodeId | string) => PoseDescriptor<unknown>;\n readonly pc: PoseComposition<unknown>;\n /** The binding's behaviors, then the ones the action adds: a layout drop\n * when the `layout` dep is present, and reparent-on-drop. */\n readonly behaviors: readonly MoveBehavior<unknown>[];\n /** Reused across the drag; behaviors mutate its `scratch`. */\n readonly gestureCtx: GestureContext<unknown>;\n readonly adapter: MoveGestureAdapter<unknown>;\n readonly layout: LayoutDep | undefined;\n readonly applyOps?: (ops: Op[], label: string) => void;\n readonly geometryProjection?: GeometryProjection;\n readonly lifecycle: GestureLifecycle;\n readonly nodeAtPoint: NodeAtPointDep | undefined;\n /** Read at release: a binding's params may be a thunk. */\n readonly reparentOnDrop: () => ReparentOnDrop;\n readonly dragThresholdPx: number;\n}\n\n/** What one `onMove` produced. Replaced, not mutated, by the next. */\nexport interface MoveFrame {\n readonly delta: { dx: number; dy: number };\n /** Stored-frame pose of every displaced id, roots and descendants, and of\n * any other id a behavior posed. */\n readonly previews: Map<NodeId, unknown>;\n /** Ids the behaviors asked to have painted at full opacity. */\n readonly opaque: ReadonlySet<NodeId>;\n}\n\n/** What the behaviors the action builds itself read of the drag they belong\n * to. Neither is readable from `onStart`, which runs before the session\n * exists. */\nexport interface MoveGesture {\n session(): MoveSession;\n /** The latest frame: the previous one while an `onMove` is running. */\n frame(): MoveFrame;\n}\n\n/** Capture a drag at press. Null when there is nothing to move. Runs each\n * behavior's `onStart`. `frame` reads the drag's latest frame, for the\n * behaviors appended to the binding's own. */\nexport function beginMove(\n ctx: InvocationCtx,\n opts: BindingOpts | undefined,\n frame: () => MoveFrame,\n): { session: MoveSession; readers: GestureReaders } | null {\n const selection = ctx.deps.selection;\n const scene = ctx.deps.scene;\n const projection = poseDescriptorOf(ctx.deps.poseDescriptor);\n const layout = ctx.deps.layout;\n const applyOps = ctx.deps.applyOps;\n const geometryProjection = ctx.deps.geometryProjection;\n\n if (!selection || !scene) return null;\n const pc = scene.composition;\n // Anchors and segments sit on the selected body, and this binding ties editAnchors' and\n // bendSegment's on specificity; with no mode registry to filter move out, declining is what\n // lets them through.\n if (isPathEditPart(ctx.drag?.affordance)) return null;\n\n const params = resolveParams(opts?.params);\n const expandIds = params?.['expandIds'] as ((ids: string[]) => string[]) | undefined;\n const selected = [...selection.get()] as string[];\n const ids = moveSources(scene, expandIds ? expandIds(selected) : selected) as NodeId[];\n if (ids.length === 0) return null;\n\n const reflow = layout?.reflow ?? null;\n const { startPoses, cascadeIds, caught } = captureStartPoses(scene, ids, reflow, projection);\n const { carried, frames } = captureFrames(scene, ids, startPoses);\n\n // Everything a move does beyond translating is a behavior: the binding's\n // own, then the layout drop, then reparent-on-drop. On release the first to\n // answer owns the commit, so each preempts the ones after it.\n const gesture: MoveGesture = { session: () => session, frame };\n const behaviors: MoveBehavior<unknown>[] = [\n ...((opts?.behaviors ?? []) as MoveBehavior<unknown>[]),\n ...(layout ? [layoutDrop(gesture)] : []),\n reparentOnDrop(gesture),\n ];\n const dragThresholdPx = (params?.['dragThresholdPx'] as number | undefined)\n ?? DRAG_THRESHOLD_PX;\n const lifecycle = readGestureLifecycle(params, 'Move', behaviors);\n // A behavior that commits after the gesture has ended, a coast coming to\n // rest, lands its batch the way the gesture's own commit does.\n const adapter = moveGestureAdapter<unknown>(scene, (ops, _label, through) =>\n commitGestureOps({ scene, applyOps, adapter: through }, lifecycle, ops), selection.adapterMethods);\n const readers = gestureReaders(ctx.deps);\n const gestureCtx = buildGestureContext(ctx, scene, ids, startPoses, adapter, readers);\n for (const b of behaviors) b.onStart?.(gestureCtx);\n\n const session: MoveSession = {\n startPoses,\n ids,\n cascadeIds,\n carried,\n frames,\n scene,\n view: ctx.deps.view,\n planeRefs: capturePlaneRefs(scene, ids, ctx.deps.view, frames, startPoses, projection),\n caught,\n projection,\n descriptorOf: nodeDescriptors(scene, projection),\n behaviors,\n gestureCtx,\n adapter,\n layout,\n pc,\n applyOps,\n geometryProjection,\n lifecycle,\n nodeAtPoint: ctx.deps.nodeAtPoint,\n reparentOnDrop: () => (resolveParams(opts?.params)?.['reparentOnDrop'] as ReparentOnDrop | undefined) ?? 'off',\n dragThresholdPx,\n };\n return { session, readers };\n}\n"],"mappings":";;;;;;;;;;AAqFA,SAAgBA,EACd,GACA,GACA,GAC0D;CAC1D,IAAMC,IAAYC,EAAI,KAAK,WACrBC,IAAQD,EAAI,KAAK,OACjBE,IAAaC,EAAiBH,EAAI,KAAK,cAAc,GACrDI,IAASJ,EAAI,KAAK,QAClBK,IAAWL,EAAI,KAAK,UACpBM,IAAqBN,EAAI,KAAK;CAEpC,IAAI,CAACD,KAAa,CAACE,GAAO,OAAO;CACjC,IAAMM,IAAKN,EAAM;CAIjB,IAAIO,EAAeR,EAAI,MAAM,UAAU,GAAG,OAAO;CAEjD,IAAMS,IAASC,EAAcC,GAAM,MAAM,GACnCC,IAAYH,GAASI,WACrBC,IAAW,CAAC,GAAGf,EAAU,IAAI,CAAC,GAC9BgB,IAAMC,EAAYf,GAAOW,IAAYA,EAAUE,CAAQ,IAAIA,CAAQ;CACzE,IAAIC,EAAI,WAAW,GAAG,OAAO;CAE7B,IAAME,IAASb,GAAQ,UAAU,MAC3B,EAAE,eAAY,eAAY,cAAWc,EAAkBjB,GAAOc,GAAKE,GAAQf,CAAU,GACrF,EAAE,YAAS,cAAWiB,EAAclB,GAAOc,GAAKK,CAAU,GAK1DC,IAAuB;EAAE,eAAeC;EAAS;CAAM,GACvDC,IAAqC;EACzC,GAAKZ,GAAM,aAAa,CAAC;EACzB,GAAIP,IAAS,CAACoB,EAAWH,CAAO,CAAC,IAAI,CAAC;EACtCI,EAAeJ,CAAO;CACxB,GACMK,IAAmBjB,GAASkB,mBAC7BC,GACCC,IAAYC,EAAqBrB,GAAQ,QAAQc,CAAS,GAG1DQ,IAAUC,EAA4B/B,IAAQ,GAAK,GAAQ,MAC/DgC,EAAiB;EAAE;EAAO;EAAU,SAASC;CAAQ,GAAGL,GAAWM,CAAG,GAAGpC,EAAU,cAAc,GAC7FqC,IAAUC,EAAerC,EAAI,IAAI,GACjCsC,IAAaC,EAAoBvC,GAAKC,GAAOc,GAAKK,GAAYW,GAASK,CAAO;CACpF,KAAK,IAAMI,KAAKjB,GAAW,EAAE,UAAUe,CAAU;CAEjD,IAAMhB,IAAuB;EAC3B;EACA;EACA;EACA;EACA;EACA;EACA,MAAMtB,EAAI,KAAK;EACf,WAAWyC,EAAiBxC,GAAOc,GAAKf,EAAI,KAAK,MAAM0C,GAAQtB,GAAYlB,CAAU;EACrF;EACA;EACA,cAAcyC,EAAgB1C,GAAOC,CAAU;EAC/C;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA,aAAaF,EAAI,KAAK;EACtB,sBAAuBU,EAAcC,GAAM,MAAM,CAAC,EAAGiC,kBAAoD;EACzG;CACF;CACA,OAAO;EAAE;EAAS;CAAQ;AAC5B"}
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
import { translatePoseViaDescriptor as e } from "../../../core/geometry/poseDescriptor.js";
|
|
2
|
+
import { createTransformOp as t } from "../../../core/ops/transform.js";
|
|
3
|
+
import { localDelta as n } from "./delta.js";
|
|
4
|
+
import { geometryDataOp as r } from "../geometryProjection.js";
|
|
5
|
+
//#region src/interactions/actions/move/translate.ts
|
|
6
|
+
function i(i, a, o) {
|
|
7
|
+
let s = [];
|
|
8
|
+
for (let c of a) {
|
|
9
|
+
if (!i.startPoses.has(c) || i.carried.has(c)) continue;
|
|
10
|
+
let a = i.scene.get(c);
|
|
11
|
+
if (!a) continue;
|
|
12
|
+
let l = n(i, c, o.dx, o.dy), u = i.caught.get(c);
|
|
13
|
+
u && (l.dx += u.dx, l.dy += u.dy);
|
|
14
|
+
let d = [
|
|
15
|
+
1,
|
|
16
|
+
0,
|
|
17
|
+
0,
|
|
18
|
+
1,
|
|
19
|
+
l.dx,
|
|
20
|
+
l.dy
|
|
21
|
+
], f = a.pose;
|
|
22
|
+
if (s.push(t({
|
|
23
|
+
id: c,
|
|
24
|
+
from: f,
|
|
25
|
+
to: e(f, l.dx, l.dy, i.descriptorOf(c)),
|
|
26
|
+
label: i.lifecycle.label
|
|
27
|
+
})), i.geometryProjection) {
|
|
28
|
+
let e = r(i.geometryProjection, {
|
|
29
|
+
id: c,
|
|
30
|
+
data: a.data,
|
|
31
|
+
pose: f
|
|
32
|
+
}, d, i.lifecycle.label);
|
|
33
|
+
e && s.push(e);
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
return s;
|
|
37
|
+
}
|
|
38
|
+
function a(e, t, n) {
|
|
39
|
+
let r = new Set(t);
|
|
40
|
+
return i(e, o(e, new Set(e.ids.filter((e) => !r.has(e)))), n);
|
|
41
|
+
}
|
|
42
|
+
function o(e, t) {
|
|
43
|
+
let n = new Set(e.ids), r = e.ids.filter((e) => !t.has(e));
|
|
44
|
+
for (let i of e.cascadeIds) {
|
|
45
|
+
let a = e.scene.get(i)?.parent ?? null, o = !1;
|
|
46
|
+
for (; a;) {
|
|
47
|
+
if (t.has(a)) {
|
|
48
|
+
o = !0;
|
|
49
|
+
break;
|
|
50
|
+
}
|
|
51
|
+
if (n.has(a)) break;
|
|
52
|
+
a = e.scene.get(a)?.parent ?? null;
|
|
53
|
+
}
|
|
54
|
+
o || r.push(i);
|
|
55
|
+
}
|
|
56
|
+
return r;
|
|
57
|
+
}
|
|
58
|
+
//#endregion
|
|
59
|
+
export { a as rootTranslateOps, i as translateOps, o as unreleasedIds };
|
|
60
|
+
|
|
61
|
+
//# sourceMappingURL=translate.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"translate.js","names":["translateOps","ops","id","ids","session","node","localDelta","delta","c","m","authored","createTransformOp","translatePoseViaDescriptor","dataOp","geometryDataOp","rootTranslateOps","wanted","roots","unreleasedIds","selected","out","released","cur","claimed"],"sources":["../../../../src/interactions/actions/move/translate.ts"],"sourcesContent":["import type { Affine } from '@weasel-js/geom';\nimport { translatePoseViaDescriptor } from 'core/geometry/poseDescriptor';\nimport { createTransformOp } from 'core/ops/transform';\nimport type { Op } from 'core/ops/types';\nimport type { NodeId } from 'core/scene/types';\nimport { geometryDataOp } from '../geometryProjection';\nimport { localDelta } from './delta';\nimport type { MoveSession } from './session';\n\n/** The default translate commit: one transform op per id, plus the data-held\n * geometry op when the `geometryProjection` seam is wired. */\nexport function translateOps(session: MoveSession, ids: Iterable<NodeId>, delta: { dx: number; dy: number }): Op[] {\n const ops: Op[] = [];\n for (const id of ids) {\n if (!session.startPoses.has(id) || session.carried.has(id)) continue;\n const node = session.scene.get(id);\n if (!node) continue;\n const l = localDelta(session, id, delta.dx, delta.dy);\n const c = session.caught.get(id);\n if (c) { l.dx += c.dx; l.dy += c.dy; }\n const m: Affine = [1, 0, 0, 1, l.dx, l.dy];\n // The authored pose, not the captured one: a derived node's captured pose\n // is its derivation, and writing that back would lose the placeholder undo\n // restores.\n const authored = node.pose;\n ops.push(createTransformOp<unknown>({\n id: id as string,\n from: authored,\n to: translatePoseViaDescriptor(authored, l.dx, l.dy, session.descriptorOf(id)),\n label: session.lifecycle.label,\n }));\n if (session.geometryProjection) {\n const dataOp = geometryDataOp(\n session.geometryProjection,\n { id: id as string, data: node.data, pose: authored },\n m,\n session.lifecycle.label,\n );\n if (dataOp) ops.push(dataOp);\n }\n }\n return ops;\n}\n\n/** The default translate commit for the dragged roots among `roots` and the\n * descendants that follow them. Anything else in `roots` is ignored. */\nexport function rootTranslateOps(session: MoveSession, roots: Iterable<string>, delta: { dx: number; dy: number }): Op[] {\n const wanted = new Set<string>(roots);\n const others = new Set<NodeId>(session.ids.filter((id) => !wanted.has(id)));\n return translateOps(session, unreleasedIds(session, others), delta);\n}\n\n/** Selected roots no source layout claimed on release, plus the descendants\n * that follow them — the part of the selection the translate commit owns. */\nexport function unreleasedIds(session: MoveSession, released: Set<NodeId>): NodeId[] {\n const selected = new Set<NodeId>(session.ids);\n const out: NodeId[] = session.ids.filter((id) => !released.has(id));\n for (const id of session.cascadeIds) {\n let cur = session.scene.get(id)?.parent ?? null;\n let claimed = false;\n while (cur) {\n if (released.has(cur)) { claimed = true; break; }\n if (selected.has(cur)) break;\n cur = session.scene.get(cur)?.parent ?? null;\n }\n if (!claimed) out.push(id);\n }\n return out;\n}\n"],"mappings":";;;;;AAWA,SAAgBA,EAAa,GAAsB,GAAuB,GAAyC;CACjH,IAAMC,IAAY,CAAC;CACnB,KAAK,IAAMC,KAAMC,GAAK;EACpB,IAAI,CAACC,EAAQ,WAAW,IAAIF,CAAE,KAAKE,EAAQ,QAAQ,IAAIF,CAAE,GAAG;EAC5D,IAAMG,IAAOD,EAAQ,MAAM,IAAIF,CAAE;EACjC,IAAI,CAACG,GAAM;EACX,IAAM,IAAIC,EAAWF,GAASF,GAAIK,EAAM,IAAIA,EAAM,EAAE,GAC9CC,IAAIJ,EAAQ,OAAO,IAAIF,CAAE;EAC/B,AAAIM,MAAK,EAAE,MAAMA,EAAE,IAAI,EAAE,MAAMA,EAAE;EACjC,IAAMC,IAAY;GAAC;GAAG;GAAG;GAAG;GAAG,EAAE;GAAI,EAAE;EAAE,GAInCC,IAAWL,EAAK;EAOtB,IANAJ,EAAI,KAAKU,EAA2B;GAC9B;GACJ,MAAMD;GACN,IAAIE,EAA2BF,GAAU,EAAE,IAAI,EAAE,IAAIN,EAAQ,aAAaF,CAAE,CAAC;GAC7E,OAAOE,EAAQ,UAAU;EAC3B,CAAC,CAAC,GACEA,EAAQ,oBAAoB;GAC9B,IAAMS,IAASC,EACbV,EAAQ,oBACR;IAAM;IAAc,MAAMC,EAAK;IAAM,MAAMK;GAAS,GACpDD,GACAL,EAAQ,UAAU,KACpB;GACA,AAAIS,KAAQZ,EAAI,KAAKY,CAAM;EAC7B;CACF;CACA,OAAOZ;AACT;AAIA,SAAgBc,EAAiB,GAAsB,GAAyB,GAAyC;CACvH,IAAMC,IAAS,IAAI,IAAYC,CAAK;CAEpC,OAAOjB,EAAaI,GAASc,EAAcd,GAAS,IADjC,IAAYA,EAAQ,IAAI,QAAQ,MAAO,CAACY,EAAO,IAAId,CAAE,CAAC,CACrB,CAAM,GAAGK,CAAK;AACpE;AAIA,SAAgBW,EAAc,GAAsB,GAAiC;CACnF,IAAMC,IAAW,IAAI,IAAYf,EAAQ,GAAG,GACtCgB,IAAgBhB,EAAQ,IAAI,QAAQ,MAAO,CAACiB,EAAS,IAAInB,CAAE,CAAC;CAClE,KAAK,IAAMA,KAAME,EAAQ,YAAY;EACnC,IAAIkB,IAAMlB,EAAQ,MAAM,IAAIF,CAAE,CAAC,EAAE,UAAU,MACvCqB,IAAU;EACd,OAAOD,IAAK;GACV,IAAID,EAAS,IAAIC,CAAG,GAAG;IAAE,IAAU;IAAM;GAAO;GAChD,IAAIH,EAAS,IAAIG,CAAG,GAAG;GACvB,IAAMlB,EAAQ,MAAM,IAAIkB,CAAG,CAAC,EAAE,UAAU;EAC1C;EACA,AAAKC,KAASH,EAAI,KAAKlB,CAAE;CAC3B;CACA,OAAOkB;AACT"}
|
|
@@ -1,84 +1,37 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import {
|
|
3
|
-
import { createDeleteOp as n } from "../../../core/ops/delete.js";
|
|
4
|
-
import { createInsertOp as r } from "../../../core/ops/create.js";
|
|
5
|
-
import { dispatchApplyBatch as i } from "../../../core/applyOps.js";
|
|
6
|
-
import { createSetSelectionOp as a } from "../../../core/ops/select.js";
|
|
7
|
-
import { TextOutlinesError as o, textToPathsByPaint as s } from "../../../features/text/textToPath.js";
|
|
8
|
-
import { boundsOfPath as c } from "@weasel-js/geom";
|
|
1
|
+
import { replaceWithPaths as e } from "./replaceWithPaths.js";
|
|
2
|
+
import { TextOutlinesError as t, textToPathsByPaint as n } from "@weasel-js/text";
|
|
9
3
|
//#region src/interactions/actions/outlines/createOutlines.ts
|
|
10
|
-
function
|
|
11
|
-
let
|
|
4
|
+
function r(r) {
|
|
5
|
+
let i = [...r.getSelection()], a = [];
|
|
12
6
|
try {
|
|
13
|
-
for (let
|
|
14
|
-
let
|
|
15
|
-
if (!
|
|
16
|
-
let
|
|
17
|
-
|
|
18
|
-
id:
|
|
19
|
-
paths:
|
|
7
|
+
for (let e of i) {
|
|
8
|
+
let t = r.getTextSource(e);
|
|
9
|
+
if (!t) continue;
|
|
10
|
+
let i = n(t.data, t.pose);
|
|
11
|
+
i.length > 0 && a.push({
|
|
12
|
+
id: e,
|
|
13
|
+
paths: i
|
|
20
14
|
});
|
|
21
15
|
}
|
|
22
16
|
} catch (e) {
|
|
23
|
-
if (e instanceof
|
|
17
|
+
if (e instanceof t) return {
|
|
24
18
|
kind: "failed",
|
|
25
19
|
reason: "text-outlines",
|
|
26
20
|
error: e
|
|
27
21
|
};
|
|
28
22
|
throw e;
|
|
29
23
|
}
|
|
30
|
-
if (
|
|
24
|
+
if (a.length === 0) return {
|
|
31
25
|
kind: "noop",
|
|
32
26
|
reason: "no-text"
|
|
33
27
|
};
|
|
34
|
-
let
|
|
35
|
-
|
|
36
|
-
at: t(e, n.id)
|
|
37
|
-
}))].sort((e, t) => (t.at?.index ?? -1) - (e.at?.index ?? -1));
|
|
38
|
-
for (let { id: t, paths: i, at: a } of m) {
|
|
39
|
-
let o = e.getNode?.(t) ?? { id: t }, s = a?.index ?? -1, c = a?.parentId ?? e.getParent?.(t) ?? null, l = (e, t) => r(s >= 0 ? {
|
|
40
|
-
node: e,
|
|
41
|
-
index: s + t
|
|
42
|
-
} : { node: e });
|
|
43
|
-
f.push(n({
|
|
44
|
-
node: o,
|
|
45
|
-
index: s
|
|
46
|
-
}));
|
|
47
|
-
let m = i.length > 1 ? e.createContainerNode?.(t, {
|
|
48
|
-
parent: c,
|
|
49
|
-
bounds: d(i)
|
|
50
|
-
}) : void 0;
|
|
51
|
-
if (m) {
|
|
52
|
-
f.push(l(m, 0));
|
|
53
|
-
for (let n of i) f.push(r({ node: e.createPathNode(n.path, t, u(n, m.id)) }));
|
|
54
|
-
p.set(t, [m.id]);
|
|
55
|
-
} else {
|
|
56
|
-
let n = i.map((n) => e.createPathNode(n.path, t, u(n, c)));
|
|
57
|
-
n.forEach((e, t) => f.push(l(e, t))), p.set(t, n.map((e) => e.id));
|
|
58
|
-
}
|
|
59
|
-
}
|
|
60
|
-
return f.push(a({
|
|
61
|
-
from: c,
|
|
62
|
-
to: c.flatMap((e) => p.get(e) ?? [e])
|
|
63
|
-
})), i(e, f, "Create Outlines"), {
|
|
28
|
+
let o = e(r, i, a, "Create Outlines");
|
|
29
|
+
return {
|
|
64
30
|
kind: "applied",
|
|
65
|
-
resultIds:
|
|
31
|
+
resultIds: a.flatMap((e) => o.get(e.id))
|
|
66
32
|
};
|
|
67
33
|
}
|
|
68
|
-
function u(e, t) {
|
|
69
|
-
return e.stroke === void 0 ? {
|
|
70
|
-
fill: e.fill,
|
|
71
|
-
parent: t
|
|
72
|
-
} : {
|
|
73
|
-
fill: e.fill,
|
|
74
|
-
stroke: e.stroke,
|
|
75
|
-
parent: t
|
|
76
|
-
};
|
|
77
|
-
}
|
|
78
|
-
function d(t) {
|
|
79
|
-
return e(t.map((e) => c(e.path)));
|
|
80
|
-
}
|
|
81
34
|
//#endregion
|
|
82
|
-
export {
|
|
35
|
+
export { r as applyCreateOutlines };
|
|
83
36
|
|
|
84
37
|
//# sourceMappingURL=createOutlines.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"createOutlines.js","names":["applyCreateOutlines","sel","adapter","converted","id","text","paths","textToPathsByPaint","err","TextOutlinesError","
|
|
1
|
+
{"version":3,"file":"createOutlines.js","names":["applyCreateOutlines","sel","adapter","converted","id","text","paths","textToPathsByPaint","err","TextOutlinesError","replaced","replaceWithPaths","c"],"sources":["../../../../src/interactions/actions/outlines/createOutlines.ts"],"sourcesContent":["/**\n * Create Outlines: replace each selected text node with path nodes carrying\n * its glyph outlines, giving up editability for geometry — the destructive\n * conversion every vector editor has. One path per paint the text wears; one\n * undoable batch; the replacement takes the text node's slot, so stacking\n * order is unchanged.\n */\nimport type { Affine, Path, Rect } from '@weasel-js/geom';\nimport type { PathPaint } from 'canvas/nodeShapes/nodePaint';\nimport type { Op } from 'core/ops/types';\nimport type { NodeId } from 'core/scene/types';\nimport { textToPathsByPaint, TextOutlinesError, type TextNodeSource } from '@weasel-js/text';\nimport { replaceWithPaths, type PaintedPath } from './replaceWithPaths';\n\n/** What a path minted by an outline action must carry — see\n * {@link CreateOutlinesAdapter.createPathNode}. */\nexport interface OutlinePathSpec extends PathPaint {\n /** The parent the path goes under: the source's own, or the container\n * minted to hold a source's several paths. */\n parent: string | null;\n}\n\n/** What `applyCreateOutlines` and `applyOutlineStroke` read and write through. */\nexport interface CreateOutlinesAdapter {\n getSelection(): readonly NodeId[] | readonly string[];\n /** The text node behind `id`, or `undefined` for anything else. */\n getTextSource(id: NodeId): TextNodeSource | undefined;\n /**\n * Optional: the world-space path of the path node behind `id`, and the\n * paint it wears. Outline Stroke reads both, and passes over a node that\n * lacks either.\n */\n getWorldPath?(id: NodeId): Path | undefined;\n getPaint?(id: NodeId): PathPaint | undefined;\n /**\n * Optional: the frame the node behind `id` draws its stroke in, as the\n * matrix taking that frame to world (`poseFrameOf`); null or absent for a\n * node drawn straight. Outline Stroke skews and stretches a world-width\n * stroke with it. Without it every stroke is outlined in world.\n */\n getStrokeFrame?(id: NodeId): Affine | null | undefined;\n /**\n * Mint one path node of node `sourceId`'s outlines. `path` is in world\n * space. The node must wear `spec`'s fill and stroke — a text whose runs\n * differ in paint gets one path per paint, and a filled node whose stroke\n * is outlined gets one for the fill and one for the stroke — and sit under\n * `spec.parent`. The kit places it; only the consumer knows its data shape,\n * so anything else of the source's `data` worth keeping is the adapter's to\n * copy: onto this path when it stands alone in the source's slot, onto the\n * container when `createContainerNode` minted one.\n */\n createPathNode(path: Path, sourceId: NodeId, spec: OutlinePathSpec): { id: string };\n /**\n * Mint the container that holds one source's several paths, under `parent`.\n * `bounds` is the world envelope of the paths. The kit puts the container in\n * the source's slot and the paths inside it, back to front. Without this,\n * the paths are laid flat in that slot instead.\n */\n createContainerNode?(sourceId: NodeId, spec: { parent: string | null; bounds: Rect }): { id: string };\n /** Full node for `id`, so undo restores the text node whole. */\n getNode(id: string): { id: string } | undefined | null;\n /** The tree: each path is inserted at its source node's index among its\n * parent's children. */\n getParent(id: string): string | null;\n getChildren(parentId: string | null): string[];\n applyOps?(ops: Op[], label?: string): void;\n setSelection?(ids: NodeId[]): void;\n insertNode?(node: { id: string }, index?: number): void;\n removeNode?(id: string): void;\n}\n\n/** Outcome of {@link applyCreateOutlines}. */\nexport type CreateOutlinesResult =\n /** `resultIds` are what replaced the text nodes at their level — a path,\n * a container, or a run of flat paths each — which is also what is now\n * selected in the text nodes' place. */\n | { kind: 'applied'; resultIds: string[] }\n /** Nothing selected is text with ink. */\n | { kind: 'noop'; reason: 'no-text' }\n /** Some selected text has no outline geometry; nothing was changed. */\n | { kind: 'failed'; reason: 'text-outlines'; error: TextOutlinesError };\n\n/**\n * Convert every text node in the selection to outlines, as one batch labeled\n * \"Create Outlines\". Other selected nodes are left alone and stay selected.\n * All or nothing: if any text node's face cannot supply outlines the scene is\n * untouched and the error comes back in the result.\n */\nexport function applyCreateOutlines(adapter: CreateOutlinesAdapter): CreateOutlinesResult {\n const sel = [...adapter.getSelection()] as NodeId[];\n const converted: { id: NodeId; paths: PaintedPath[] }[] = [];\n try {\n for (const id of sel) {\n const text = adapter.getTextSource(id);\n if (!text) continue;\n const paths = textToPathsByPaint(text.data, text.pose);\n if (paths.length > 0) converted.push({ id, paths });\n }\n } catch (err) {\n if (err instanceof TextOutlinesError) return { kind: 'failed', reason: 'text-outlines', error: err };\n throw err;\n }\n if (converted.length === 0) return { kind: 'noop', reason: 'no-text' };\n\n const replaced = replaceWithPaths(adapter, sel, converted, 'Create Outlines');\n return { kind: 'applied', resultIds: converted.flatMap((c) => replaced.get(c.id)!) };\n}\n"],"mappings":";;;AAwFA,SAAgBA,EAAoB,GAAsD;CACxF,IAAMC,IAAM,CAAC,GAAGC,EAAQ,aAAa,CAAC,GAChCC,IAAoD,CAAC;CAC3D,IAAI;EACF,KAAK,IAAMC,KAAMH,GAAK;GACpB,IAAMI,IAAOH,EAAQ,cAAcE,CAAE;GACrC,IAAI,CAACC,GAAM;GACX,IAAMC,IAAQC,EAAmBF,EAAK,MAAMA,EAAK,IAAI;GACrD,AAAIC,EAAM,SAAS,KAAGH,EAAU,KAAK;IAAE;IAAI;GAAM,CAAC;EACpD;CACF,SAASK,GAAK;EACZ,IAAIA,aAAeC,GAAmB,OAAO;GAAE,MAAM;GAAU,QAAQ;GAAiB,OAAOD;EAAI;EACnG,MAAMA;CACR;CACA,IAAIL,EAAU,WAAW,GAAG,OAAO;EAAE,MAAM;EAAQ,QAAQ;CAAU;CAErE,IAAMO,IAAWC,EAAiBT,GAASD,GAAKE,GAAW,iBAAiB;CAC5E,OAAO;EAAE,MAAM;EAAW,WAAWA,EAAU,SAAS,MAAMO,EAAS,IAAIE,EAAE,EAAE,CAAE;CAAE;AACrF"}
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
import { applyCreateOutlines as e } from "./createOutlines.js";
|
|
2
|
+
import { CreateOutlinesIcon as t } from "../defaults/icons/outlineIcons.js";
|
|
3
|
+
import { ActionDisabledReason as n } from "@weasel-js/routing";
|
|
4
|
+
import { jsx as r } from "react/jsx-runtime";
|
|
5
|
+
import { loadTextOutlines as i } from "@weasel-js/text";
|
|
6
|
+
//#region src/interactions/actions/outlines/createOutlinesAction.tsx
|
|
7
|
+
async function a(e, t, n) {
|
|
8
|
+
let r = (e) => e.kind === "failed" ? e.error : null, a = t();
|
|
9
|
+
if (r(a)?.reason === "outlines-loading") {
|
|
10
|
+
let n = [...e.getSelection()].map((t) => e.getTextSource(t)).filter((e) => e !== void 0);
|
|
11
|
+
await Promise.all(n.map((e) => i(e.data))), a = t();
|
|
12
|
+
}
|
|
13
|
+
let o = r(a);
|
|
14
|
+
return o && console.warn(`[${n}] ${o.message}`), a;
|
|
15
|
+
}
|
|
16
|
+
function o(t) {
|
|
17
|
+
return a(t, () => e(t), "createOutlines");
|
|
18
|
+
}
|
|
19
|
+
var s = {
|
|
20
|
+
id: "createOutlines",
|
|
21
|
+
label: "Create Outlines",
|
|
22
|
+
icon: /* @__PURE__ */ r(t, {}),
|
|
23
|
+
group: "text",
|
|
24
|
+
defaultBinding: {
|
|
25
|
+
kind: "key",
|
|
26
|
+
key: "o",
|
|
27
|
+
mods: {
|
|
28
|
+
mod: !0,
|
|
29
|
+
shift: !0
|
|
30
|
+
}
|
|
31
|
+
},
|
|
32
|
+
eligible: { capability: "creates-shapes" },
|
|
33
|
+
requires: ["selection", "createOutlinesAdapter"],
|
|
34
|
+
invoker: {
|
|
35
|
+
timing: "immediate",
|
|
36
|
+
run: (e) => {
|
|
37
|
+
let t = e.createOutlinesAdapter;
|
|
38
|
+
t && o(t);
|
|
39
|
+
}
|
|
40
|
+
},
|
|
41
|
+
enabled: (e) => {
|
|
42
|
+
let t = e?.selection?.get() ?? [];
|
|
43
|
+
if (t.length === 0) return n.SelectionRequired;
|
|
44
|
+
let r = e?.createOutlinesAdapter;
|
|
45
|
+
return r && t.some((e) => r.getTextSource(e) !== void 0) ? !0 : n.NotApplicable;
|
|
46
|
+
}
|
|
47
|
+
};
|
|
48
|
+
//#endregion
|
|
49
|
+
export { s as createOutlinesAction, o as runCreateOutlines, a as withTextOutlines };
|
|
50
|
+
|
|
51
|
+
//# sourceMappingURL=createOutlinesAction.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"createOutlinesAction.js","names":["withTextOutlines","failure","r","result","apply","texts","adapter","id","t","loadTextOutlines","error","tag","runCreateOutlines","applyCreateOutlines","createOutlinesAction","CreateOutlinesIcon","deps","ids","ActionDisabledReason"],"sources":["../../../../src/interactions/actions/outlines/createOutlinesAction.tsx"],"sourcesContent":["import type { Action, ImmediateInvoker } from '@weasel-js/routing';\nimport { ActionDisabledReason } from '@weasel-js/routing';\nimport type { NodeId } from 'core/scene/types';\nimport { loadTextOutlines, type TextNodeSource, type TextOutlinesError } from '@weasel-js/text';\nimport {\n applyCreateOutlines, type CreateOutlinesAdapter, type CreateOutlinesResult,\n} from './createOutlines';\nimport { CreateOutlinesIcon } from '../defaults/icons/outlineIcons';\n\n/** What an outline conversion answers when a text face had no outlines. */\ntype OutlinesFailure = { kind: 'failed'; error: TextOutlinesError };\n\n/**\n * Run `apply`, an outline conversion of `adapter`'s selection, waiting first\n * for any face whose outlines are registered but not yet loaded — a face is\n * parsed on first use, so the first conversion in a session would otherwise\n * fail. Warns under `tag` with the reason when the selection still cannot be\n * converted.\n */\nexport async function withTextOutlines<R extends { kind: string } | OutlinesFailure>(\n adapter: CreateOutlinesAdapter,\n apply: () => R,\n tag: string,\n): Promise<R> {\n const failure = (r: R): TextOutlinesError | null => (r.kind === 'failed' ? (r as OutlinesFailure).error : null);\n let result = apply();\n if (failure(result)?.reason === 'outlines-loading') {\n const texts = [...adapter.getSelection()]\n .map((id) => adapter.getTextSource(id as NodeId))\n .filter((t): t is TextNodeSource => t !== undefined);\n await Promise.all(texts.map((t) => loadTextOutlines(t.data)));\n result = apply();\n }\n const error = failure(result);\n if (error) console.warn(`[${tag}] ${error.message}`);\n return result;\n}\n\n/** {@link applyCreateOutlines} through {@link withTextOutlines}. */\nexport function runCreateOutlines(adapter: CreateOutlinesAdapter): Promise<CreateOutlinesResult> {\n return withTextOutlines(adapter, () => applyCreateOutlines(adapter), 'createOutlines');\n}\n\n/**\n * @experimental Static descriptor for Create Outlines: replace the selected\n * text nodes with path nodes carrying their glyph outlines. Reads the\n * `createOutlinesAdapter` dep, published with `useCreateOutlinesAdapter`.\n */\nexport const createOutlinesAction: Action = {\n id: 'createOutlines',\n label: 'Create Outlines',\n icon: <CreateOutlinesIcon />,\n group: 'text',\n defaultBinding: { kind: 'key', key: 'o', mods: { mod: true, shift: true } },\n eligible: { capability: 'creates-shapes' },\n requires: ['selection', 'createOutlinesAdapter'],\n invoker: {\n timing: 'immediate',\n run: (deps) => {\n const adapter = deps.createOutlinesAdapter;\n if (adapter) void runCreateOutlines(adapter);\n },\n } satisfies ImmediateInvoker,\n enabled: (deps) => {\n const ids = deps?.selection?.get() ?? [];\n if (ids.length === 0) return ActionDisabledReason.SelectionRequired;\n const adapter = deps?.createOutlinesAdapter;\n return adapter && ids.some((id) => adapter.getTextSource(id) !== undefined)\n ? true\n : ActionDisabledReason.NotApplicable;\n },\n};\n"],"mappings":";;;;;;AAmBA,eAAsBA,EACpB,GACA,GACA,GACY;CACZ,IAAMC,KAAW,MAAoCC,EAAE,SAAS,WAAYA,EAAsB,QAAQ,MACtGC,IAASC,EAAM;CACnB,IAAIH,EAAQE,CAAM,CAAC,EAAE,WAAW,oBAAoB;EAClD,IAAME,IAAQ,CAAC,GAAGC,EAAQ,aAAa,CAAC,CAAC,CACtC,KAAK,MAAOA,EAAQ,cAAcC,CAAY,CAAC,CAAC,CAChD,QAAQ,MAA2BC,MAAM,KAAA,CAAS;EAErD,AADA,MAAM,QAAQ,IAAIH,EAAM,KAAK,MAAMI,EAAiBD,EAAE,IAAI,CAAC,CAAC,GAC5D,IAASJ,EAAM;CACjB;CACA,IAAMM,IAAQT,EAAQE,CAAM;CAE5B,OADIO,KAAO,QAAQ,KAAK,IAAIC,EAAI,IAAID,EAAM,SAAS,GAC5CP;AACT;AAGA,SAAgBS,EAAkB,GAA+D;CAC/F,OAAOZ,EAAiBM,SAAeO,EAAoBP,CAAO,GAAG,gBAAgB;AACvF;AAOA,IAAaQ,IAA+B;CAC1C,IAAI;CACJ,OAAO;CACP,MAAM,kBAACC,GAAD,CAAqB,CAAA;CAC3B,OAAO;CACP,gBAAgB;EAAE,MAAM;EAAO,KAAK;EAAK,MAAM;GAAE,KAAK;GAAM,OAAO;EAAK;CAAE;CAC1E,UAAU,EAAE,YAAY,iBAAiB;CACzC,UAAU,CAAC,aAAa,uBAAuB;CAC/C,SAAS;EACP,QAAQ;EACR,MAAM,MAAS;GACb,IAAMT,IAAUU,EAAK;GACrB,AAAIV,KAASM,EAAuBN,CAAO;EAC7C;CACF;CACA,UAAU,MAAS;EACjB,IAAMW,IAAMD,GAAM,WAAW,IAAI,KAAK,CAAC;EACvC,IAAIC,EAAI,WAAW,GAAG,OAAOC,EAAqB;EAClD,IAAMZ,IAAUU,GAAM;EACtB,OAAOV,KAAWW,EAAI,MAAM,MAAOX,EAAQ,cAAcC,CAAE,MAAM,KAAA,CAAS,IACtE,KACAW,EAAqB;CAC3B;AACF"}
|
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
import { strokeRegion as e } from "./strokeRegion.js";
|
|
2
|
+
import { replaceWithPaths as t } from "./replaceWithPaths.js";
|
|
3
|
+
import { TextOutlinesError as n, textToPathsByPaint as r } from "@weasel-js/text";
|
|
4
|
+
//#region src/interactions/actions/outlines/outlineStroke.ts
|
|
5
|
+
function i(e) {
|
|
6
|
+
return e != null && (e.data.stroke != null || !!e.data.runs?.some((e) => e.stroke != null));
|
|
7
|
+
}
|
|
8
|
+
function a(e, t) {
|
|
9
|
+
let n = e.getWorldPath?.(t);
|
|
10
|
+
if (n) {
|
|
11
|
+
let r = e.getPaint?.(t);
|
|
12
|
+
return r ? [{
|
|
13
|
+
path: n,
|
|
14
|
+
...r
|
|
15
|
+
}] : [];
|
|
16
|
+
}
|
|
17
|
+
let a = e.getTextSource(t);
|
|
18
|
+
return !a || !i(a) ? [] : r(a.data, a.pose);
|
|
19
|
+
}
|
|
20
|
+
function o(r, i = {}) {
|
|
21
|
+
let o = [...r.getSelection()], s = [];
|
|
22
|
+
try {
|
|
23
|
+
for (let t of o) {
|
|
24
|
+
let n = r.getStrokeFrame?.(t), o = [], c = !1;
|
|
25
|
+
for (let { path: s, fill: l, stroke: u } of a(r, t)) {
|
|
26
|
+
let t = u?.paint == null ? null : e(s, u, n, i);
|
|
27
|
+
if (!t || t.commands.length === 0) {
|
|
28
|
+
o.push(u ? {
|
|
29
|
+
path: s,
|
|
30
|
+
fill: l,
|
|
31
|
+
stroke: u
|
|
32
|
+
} : {
|
|
33
|
+
path: s,
|
|
34
|
+
fill: l
|
|
35
|
+
});
|
|
36
|
+
continue;
|
|
37
|
+
}
|
|
38
|
+
c = !0, l !== null && o.push({
|
|
39
|
+
path: s,
|
|
40
|
+
fill: l
|
|
41
|
+
}), o.push({
|
|
42
|
+
path: t,
|
|
43
|
+
fill: { paint: u.paint }
|
|
44
|
+
});
|
|
45
|
+
}
|
|
46
|
+
c && s.push({
|
|
47
|
+
id: t,
|
|
48
|
+
paths: o
|
|
49
|
+
});
|
|
50
|
+
}
|
|
51
|
+
} catch (e) {
|
|
52
|
+
if (e instanceof n) return {
|
|
53
|
+
kind: "failed",
|
|
54
|
+
reason: "text-outlines",
|
|
55
|
+
error: e
|
|
56
|
+
};
|
|
57
|
+
throw e;
|
|
58
|
+
}
|
|
59
|
+
if (s.length === 0) return {
|
|
60
|
+
kind: "noop",
|
|
61
|
+
reason: "no-stroke"
|
|
62
|
+
};
|
|
63
|
+
let c = t(r, o, s, "Outline Stroke");
|
|
64
|
+
return {
|
|
65
|
+
kind: "applied",
|
|
66
|
+
resultIds: s.flatMap((e) => c.get(e.id))
|
|
67
|
+
};
|
|
68
|
+
}
|
|
69
|
+
//#endregion
|
|
70
|
+
export { o as applyOutlineStroke, i as textIsStroked };
|
|
71
|
+
|
|
72
|
+
//# sourceMappingURL=outlineStroke.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"outlineStroke.js","names":["textIsStroked","text","r","paintedPaths","path","adapter","id","paint","textToPathsByPaint","applyOutlineStroke","sel","converted","frame","paths","outlined","outline","stroke","strokeRegion","opts","fill","err","TextOutlinesError","replaced","replaceWithPaths","c"],"sources":["../../../../src/interactions/actions/outlines/outlineStroke.ts"],"sourcesContent":["/**\n * Outline Stroke: replace each selected stroked path, or stroked text, with\n * the region its stroke covers, as a path filled in the stroke's paint. A node\n * that is also filled keeps its fill as a path of its own underneath. One\n * undoable batch; the replacement takes the node's slot.\n */\nimport { textToPathsByPaint, TextOutlinesError, type TextNodeSource } from '@weasel-js/text';\nimport type { NodeId } from 'core/scene/types';\nimport type { CreateOutlinesAdapter } from './createOutlines';\nimport { replaceWithPaths, type PaintedPath } from './replaceWithPaths';\nimport { strokeRegion, type StrokeRegionOptions } from './strokeRegion';\n\n/** Outcome of {@link applyOutlineStroke}. */\nexport type OutlineStrokeResult =\n /** `resultIds` are what replaced the stroked nodes at their level — a\n * path, a container, or a run of flat paths each — and are now selected in\n * their place. */\n | { kind: 'applied'; resultIds: string[] }\n /** Nothing selected is a path or text with a stroke that has width. */\n | { kind: 'noop'; reason: 'no-stroke' }\n /** Some selected stroked text has no outline geometry; nothing was changed. */\n | { kind: 'failed'; reason: 'text-outlines'; error: TextOutlinesError };\n\n/** Whether a text node wears a stroke anywhere: its own, or a run's. */\nexport function textIsStroked(text: TextNodeSource | undefined): boolean {\n return text != null && (text.data.stroke != null || !!text.data.runs?.some((r) => r.stroke != null));\n}\n\n/** What the adapter knows of `id` as painted world paths: a path node's one,\n * or a text node's glyphs by paint. Throws as `textToPathsByPaint` does. */\nfunction paintedPaths(adapter: CreateOutlinesAdapter, id: NodeId): PaintedPath[] {\n const path = adapter.getWorldPath?.(id);\n if (path) {\n const paint = adapter.getPaint?.(id);\n return paint ? [{ path, ...paint }] : [];\n }\n const text = adapter.getTextSource(id);\n // Text with no stroke stays text: its outlines are not read, so a face\n // without them fails only the text this would convert.\n if (!text || !textIsStroked(text)) return [];\n return textToPathsByPaint(text.data, text.pose);\n}\n\n/**\n * Outline the stroke of every stroked path and stroked text in the selection,\n * as one batch labeled \"Outline Stroke\". Other selected nodes are left alone\n * and stay selected. Each stroke is outlined in the frame it is drawn in: see\n * {@link strokeRegion}. All or nothing: if a stroked text's face cannot\n * supply outlines the scene is untouched and the error comes back.\n */\nexport function applyOutlineStroke(\n adapter: CreateOutlinesAdapter,\n opts: StrokeRegionOptions = {},\n): OutlineStrokeResult {\n const sel = [...adapter.getSelection()] as NodeId[];\n const converted: { id: NodeId; paths: PaintedPath[] }[] = [];\n try {\n for (const id of sel) {\n const frame = adapter.getStrokeFrame?.(id);\n const paths: PaintedPath[] = [];\n let outlined = false;\n for (const { path, fill, stroke } of paintedPaths(adapter, id)) {\n const outline = stroke?.paint == null ? null : strokeRegion(path, stroke, frame, opts);\n if (!outline || outline.commands.length === 0) {\n paths.push(stroke ? { path, fill, stroke } : { path, fill });\n continue;\n }\n outlined = true;\n if (fill !== null) paths.push({ path, fill });\n paths.push({ path: outline, fill: { paint: stroke!.paint! } });\n }\n if (outlined) converted.push({ id, paths });\n }\n } catch (err) {\n if (err instanceof TextOutlinesError) return { kind: 'failed', reason: 'text-outlines', error: err };\n throw err;\n }\n if (converted.length === 0) return { kind: 'noop', reason: 'no-stroke' };\n const replaced = replaceWithPaths(adapter, sel, converted, 'Outline Stroke');\n return { kind: 'applied', resultIds: converted.flatMap((c) => replaced.get(c.id)!) };\n}\n"],"mappings":";;;;AAwBA,SAAgBA,EAAc,GAA2C;CACvE,OAAOC,KAAQ,SAASA,EAAK,KAAK,UAAU,QAAQ,CAAC,CAACA,EAAK,KAAK,MAAM,MAAM,MAAMC,EAAE,UAAU,IAAI;AACpG;AAIA,SAASC,EAAa,GAAgC,GAA2B;CAC/E,IAAMC,IAAOC,EAAQ,eAAeC,CAAE;CACtC,IAAIF,GAAM;EACR,IAAMG,IAAQF,EAAQ,WAAWC,CAAE;EACnC,OAAOC,IAAQ,CAAC;GAAE;GAAM,GAAGA;EAAM,CAAC,IAAI,CAAC;CACzC;CACA,IAAMN,IAAOI,EAAQ,cAAcC,CAAE;CAIrC,OADI,CAACL,KAAQ,CAACD,EAAcC,CAAI,IAAU,CAAC,IACpCO,EAAmBP,EAAK,MAAMA,EAAK,IAAI;AAChD;AASA,SAAgBQ,EACd,GACA,IAA4B,CAAC,GACR;CACrB,IAAMC,IAAM,CAAC,GAAGL,EAAQ,aAAa,CAAC,GAChCM,IAAoD,CAAC;CAC3D,IAAI;EACF,KAAK,IAAML,KAAMI,GAAK;GACpB,IAAME,IAAQP,EAAQ,iBAAiBC,CAAE,GACnCO,IAAuB,CAAC,GAC1BC,IAAW;GACf,KAAK,IAAM,EAAE,SAAM,SAAM,eAAYX,EAAaE,GAASC,CAAE,GAAG;IAC9D,IAAMS,IAAUC,GAAQ,SAAS,OAAO,OAAOC,EAAab,GAAMY,GAAQJ,GAAOM,CAAI;IACrF,IAAI,CAACH,KAAWA,EAAQ,SAAS,WAAW,GAAG;KAC7C,EAAM,KAAKC,IAAS;MAAE;MAAM;MAAM;KAAO,IAAI;MAAE;MAAM;KAAK,CAAC;KAC3D;IACF;IAGA,AAFA,IAAW,IACPG,MAAS,QAAMN,EAAM,KAAK;KAAE;KAAM;IAAK,CAAC,GAC5CA,EAAM,KAAK;KAAE,MAAME;KAAS,MAAM,EAAE,OAAOC,EAAQ,MAAO;IAAE,CAAC;GAC/D;GACA,AAAIF,KAAUH,EAAU,KAAK;IAAE;IAAI;GAAM,CAAC;EAC5C;CACF,SAASS,GAAK;EACZ,IAAIA,aAAeC,GAAmB,OAAO;GAAE,MAAM;GAAU,QAAQ;GAAiB,OAAOD;EAAI;EACnG,MAAMA;CACR;CACA,IAAIT,EAAU,WAAW,GAAG,OAAO;EAAE,MAAM;EAAQ,QAAQ;CAAY;CACvE,IAAMW,IAAWC,EAAiBlB,GAASK,GAAKC,GAAW,gBAAgB;CAC3E,OAAO;EAAE,MAAM;EAAW,WAAWA,EAAU,SAAS,MAAMW,EAAS,IAAIE,EAAE,EAAE,CAAE;CAAE;AACrF"}
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
import { OutlineStrokeIcon as e } from "../defaults/icons/outlineIcons.js";
|
|
2
|
+
import { withTextOutlines as t } from "./createOutlinesAction.js";
|
|
3
|
+
import { applyOutlineStroke as n, textIsStroked as r } from "./outlineStroke.js";
|
|
4
|
+
import { ActionDisabledReason as i } from "@weasel-js/routing";
|
|
5
|
+
import { jsx as a } from "react/jsx-runtime";
|
|
6
|
+
//#region src/interactions/actions/outlines/outlineStrokeAction.tsx
|
|
7
|
+
var o = {
|
|
8
|
+
id: "outlineStroke",
|
|
9
|
+
label: "Outline Stroke",
|
|
10
|
+
icon: /* @__PURE__ */ a(e, {}),
|
|
11
|
+
group: "pathfinder",
|
|
12
|
+
eligible: { capability: "creates-shapes" },
|
|
13
|
+
requires: [
|
|
14
|
+
"selection",
|
|
15
|
+
"createOutlinesAdapter",
|
|
16
|
+
"view"
|
|
17
|
+
],
|
|
18
|
+
invoker: {
|
|
19
|
+
timing: "immediate",
|
|
20
|
+
run: (e) => {
|
|
21
|
+
let r = e.createOutlinesAdapter;
|
|
22
|
+
if (!r) return;
|
|
23
|
+
let i = e.view?.get().scale;
|
|
24
|
+
t(r, () => n(r, i ? { scale: i } : {}), "outlineStroke");
|
|
25
|
+
}
|
|
26
|
+
},
|
|
27
|
+
enabled: (e) => {
|
|
28
|
+
let t = e?.selection?.get() ?? [];
|
|
29
|
+
if (t.length === 0) return i.SelectionRequired;
|
|
30
|
+
let n = e?.createOutlinesAdapter;
|
|
31
|
+
return n && t.some((e) => n.getPaint?.(e)?.stroke !== void 0 || r(n.getTextSource(e))) ? !0 : i.NotApplicable;
|
|
32
|
+
}
|
|
33
|
+
};
|
|
34
|
+
//#endregion
|
|
35
|
+
export { o as outlineStrokeAction };
|
|
36
|
+
|
|
37
|
+
//# sourceMappingURL=outlineStrokeAction.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"outlineStrokeAction.js","names":["outlineStrokeAction","OutlineStrokeIcon","adapter","deps","scale","applyOutlineStroke","ids","ActionDisabledReason","id","textIsStroked"],"sources":["../../../../src/interactions/actions/outlines/outlineStrokeAction.tsx"],"sourcesContent":["import type { Action, ImmediateInvoker } from '@weasel-js/routing';\nimport { ActionDisabledReason } from '@weasel-js/routing';\nimport { applyOutlineStroke, textIsStroked } from './outlineStroke';\nimport { withTextOutlines } from './createOutlinesAction';\nimport { OutlineStrokeIcon } from '../defaults/icons/outlineIcons';\n\n/**\n * @experimental Static descriptor for Outline Stroke: replace each selected\n * stroked path, or stroked text, with the region its stroke covers, filled in\n * the stroke's paint. Reads the `createOutlinesAdapter` dep, published with\n * `useCreateOutlinesAdapter`, and needs its `getWorldPath` and `getPaint` for paths.\n */\nexport const outlineStrokeAction: Action = {\n id: 'outlineStroke',\n label: 'Outline Stroke',\n icon: <OutlineStrokeIcon />,\n group: 'pathfinder',\n eligible: { capability: 'creates-shapes' },\n requires: ['selection', 'createOutlinesAdapter', 'view'],\n invoker: {\n timing: 'immediate',\n run: (deps) => {\n const adapter = deps.createOutlinesAdapter;\n if (!adapter) return;\n const scale = deps.view?.get().scale;\n void withTextOutlines(adapter, () => applyOutlineStroke(adapter, scale ? { scale } : {}), 'outlineStroke');\n },\n } satisfies ImmediateInvoker,\n enabled: (deps) => {\n const ids = deps?.selection?.get() ?? [];\n if (ids.length === 0) return ActionDisabledReason.SelectionRequired;\n const adapter = deps?.createOutlinesAdapter;\n return adapter && ids.some((id) => adapter.getPaint?.(id)?.stroke !== undefined || textIsStroked(adapter.getTextSource(id)))\n ? true\n : ActionDisabledReason.NotApplicable;\n },\n};\n"],"mappings":";;;;;;AAYA,IAAaA,IAA8B;CACzC,IAAI;CACJ,OAAO;CACP,MAAM,kBAACC,GAAD,CAAoB,CAAA;CAC1B,OAAO;CACP,UAAU,EAAE,YAAY,iBAAiB;CACzC,UAAU;EAAC;EAAa;EAAyB;CAAM;CACvD,SAAS;EACP,QAAQ;EACR,MAAM,MAAS;GACb,IAAMC,IAAUC,EAAK;GACrB,IAAI,CAACD,GAAS;GACd,IAAME,IAAQD,EAAK,MAAM,IAAI,CAAC,CAAC;GAC/B,EAAsBD,SAAeG,EAAmBH,GAASE,IAAQ,EAAE,SAAM,IAAI,CAAC,CAAC,GAAG,eAAe;EAC3G;CACF;CACA,UAAU,MAAS;EACjB,IAAME,IAAMH,GAAM,WAAW,IAAI,KAAK,CAAC;EACvC,IAAIG,EAAI,WAAW,GAAG,OAAOC,EAAqB;EAClD,IAAML,IAAUC,GAAM;EACtB,OAAOD,KAAWI,EAAI,MAAM,MAAOJ,EAAQ,WAAWM,CAAE,CAAC,EAAE,WAAW,KAAA,KAAaC,EAAcP,EAAQ,cAAcM,CAAE,CAAC,CAAC,IACvH,KACAD,EAAqB;CAC3B;AACF"}
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
import { unionBounds as e } from "../../../core/geometry/unionBounds.js";
|
|
2
|
+
import { dispatchApplyBatch as t } from "../../../core/applyOps.js";
|
|
3
|
+
import { locateChild as n } from "../../../core/ops/slot.js";
|
|
4
|
+
import { createDeleteOp as r } from "../../../core/ops/delete.js";
|
|
5
|
+
import { createInsertOp as i } from "../../../core/ops/create.js";
|
|
6
|
+
import { createSetSelectionOp as a } from "../../../core/ops/select.js";
|
|
7
|
+
import { boundsOfPath as o } from "@weasel-js/geom";
|
|
8
|
+
//#region src/interactions/actions/outlines/replaceWithPaths.ts
|
|
9
|
+
function s(s, l, u, d) {
|
|
10
|
+
let f = [], p = /* @__PURE__ */ new Map(), m = [...u.map((e) => ({
|
|
11
|
+
...e,
|
|
12
|
+
at: n(s, e.id)
|
|
13
|
+
}))].sort((e, t) => (t.at?.index ?? -1) - (e.at?.index ?? -1));
|
|
14
|
+
for (let { id: t, paths: n, at: a } of m) {
|
|
15
|
+
let l = s.getNode(t) ?? { id: t }, u = a?.index ?? -1, d = a?.parentId ?? s.getParent(t), m = (e, t) => i(u >= 0 ? {
|
|
16
|
+
node: e,
|
|
17
|
+
index: u + t
|
|
18
|
+
} : { node: e });
|
|
19
|
+
f.push(r({
|
|
20
|
+
node: l,
|
|
21
|
+
index: u
|
|
22
|
+
}));
|
|
23
|
+
let h = n.length > 1 ? s.createContainerNode?.(t, {
|
|
24
|
+
parent: d,
|
|
25
|
+
bounds: e(n.map((e) => o(e.path)))
|
|
26
|
+
}) : void 0;
|
|
27
|
+
if (h) {
|
|
28
|
+
f.push(m(h, 0));
|
|
29
|
+
for (let e of n) f.push(i({ node: s.createPathNode(e.path, t, c(e, h.id)) }));
|
|
30
|
+
p.set(t, [h.id]);
|
|
31
|
+
} else {
|
|
32
|
+
let e = n.map((e) => s.createPathNode(e.path, t, c(e, d)));
|
|
33
|
+
e.forEach((e, t) => f.push(m(e, t))), p.set(t, e.map((e) => e.id));
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
return f.push(a({
|
|
37
|
+
from: [...l],
|
|
38
|
+
to: l.flatMap((e) => p.get(e) ?? [e])
|
|
39
|
+
})), t(s, f, d), p;
|
|
40
|
+
}
|
|
41
|
+
function c(e, t) {
|
|
42
|
+
return e.stroke === void 0 ? {
|
|
43
|
+
fill: e.fill,
|
|
44
|
+
parent: t
|
|
45
|
+
} : {
|
|
46
|
+
fill: e.fill,
|
|
47
|
+
stroke: e.stroke,
|
|
48
|
+
parent: t
|
|
49
|
+
};
|
|
50
|
+
}
|
|
51
|
+
//#endregion
|
|
52
|
+
export { s as replaceWithPaths };
|
|
53
|
+
|
|
54
|
+
//# sourceMappingURL=replaceWithPaths.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"replaceWithPaths.js","names":["replaceWithPaths","ops","replaced","order","converted","c","locateChild","adapter","b","a","node","id","index","at","parent","place","createInsertOp","created","i","createDeleteOp","container","paths","unionBounds","boundsOfPath","p","specOf","n","createSetSelectionOp","sel","dispatchApplyBatch","label"],"sources":["../../../../src/interactions/actions/outlines/replaceWithPaths.ts"],"sourcesContent":["import { boundsOfPath, type Path } from '@weasel-js/geom';\nimport type { PathPaint } from 'canvas/nodeShapes/nodePaint';\nimport { createInsertOp } from 'core/ops/create';\nimport { createDeleteOp } from 'core/ops/delete';\nimport { createSetSelectionOp } from 'core/ops/select';\nimport { locateChild } from 'core/ops/slot';\nimport { unionBounds } from 'core/geometry/unionBounds';\nimport type { Op } from 'core/ops/types';\nimport type { NodeId } from 'core/scene/types';\nimport { dispatchApplyBatch } from 'core/applyOps';\nimport type { CreateOutlinesAdapter, OutlinePathSpec } from './createOutlines';\n\n/** A world-space path and the paint it is to wear. */\nexport interface PaintedPath extends PathPaint {\n path: Path;\n}\n\n/**\n * Replace each node in `converted` with its `paths`, back to front, as one\n * batch under `label`: in the node's own slot, inside a container when it has\n * several paths and the adapter mints one. The rest of `sel` stays selected.\n * Answers what took each node's place at its level.\n */\nexport function replaceWithPaths(\n adapter: CreateOutlinesAdapter,\n sel: readonly NodeId[],\n converted: readonly { id: NodeId; paths: readonly PaintedPath[] }[],\n label: string,\n): Map<NodeId, string[]> {\n const ops: Op[] = [];\n const replaced = new Map<NodeId, string[]>();\n // Replacements in the same parent are inserted top slot first, so an\n // earlier one widening the sibling list cannot shift a later one's index.\n const located = converted.map((c) => ({ ...c, at: locateChild(adapter, c.id) }));\n const order = [...located].sort((a, b) => (b.at?.index ?? -1) - (a.at?.index ?? -1));\n for (const { id, paths, at } of order) {\n const node = adapter.getNode(id) ?? { id };\n const index = at?.index ?? -1;\n const parent = at?.parentId ?? adapter.getParent(id);\n const place = (created: { id: string }, i: number) =>\n createInsertOp(index >= 0 ? { node: created, index: index + i } : { node: created });\n ops.push(createDeleteOp({ node, index }));\n\n const container = paths.length > 1\n ? adapter.createContainerNode?.(id, { parent, bounds: unionBounds(paths.map((p) => boundsOfPath(p.path)))! })\n : undefined;\n if (container) {\n ops.push(place(container, 0));\n for (const p of paths) {\n ops.push(createInsertOp({ node: adapter.createPathNode(p.path, id, specOf(p, container.id)) }));\n }\n replaced.set(id, [container.id]);\n } else {\n const created = paths.map((p) => adapter.createPathNode(p.path, id, specOf(p, parent)));\n created.forEach((n, i) => ops.push(place(n, i)));\n replaced.set(id, created.map((n) => n.id));\n }\n }\n ops.push(createSetSelectionOp({\n from: [...sel],\n to: sel.flatMap((id) => (replaced.get(id) ?? [id]) as NodeId[]),\n }));\n dispatchApplyBatch(adapter, ops, label);\n return replaced;\n}\n\nfunction specOf(p: PaintedPath, parent: string | null): OutlinePathSpec {\n return p.stroke !== undefined ? { fill: p.fill, stroke: p.stroke, parent } : { fill: p.fill, parent };\n}\n"],"mappings":";;;;;;;;AAuBA,SAAgBA,EACd,GACA,GACA,GACA,GACuB;CACvB,IAAMC,IAAY,CAAC,GACbC,oBAAW,IAAI,IAAsB,GAIrCC,IAAQ,CAAC,GADCC,EAAU,KAAK,OAAO;EAAE,GAAGC;EAAG,IAAIC,EAAYC,GAASF,EAAE,EAAE;CAAE,EAC3D,CAAO,CAAC,CAAC,MAAM,GAAG,OAAOG,EAAE,IAAI,SAAS,OAAOC,EAAE,IAAI,SAAS,GAAG;CACnF,KAAK,IAAM,EAAE,OAAI,UAAO,WAAQN,GAAO;EACrC,IAAMO,IAAOH,EAAQ,QAAQI,CAAE,KAAK,EAAE,MAAG,GACnCC,IAAQC,GAAI,SAAS,IACrBC,IAASD,GAAI,YAAYN,EAAQ,UAAUI,CAAE,GAC7CI,KAAS,GAAyB,MACtCC,EAAeJ,KAAS,IAAI;GAAE,MAAMK;GAAS,OAAOL,IAAQM;EAAE,IAAI,EAAE,MAAMD,EAAQ,CAAC;EACrF,EAAI,KAAKE,EAAe;GAAE;GAAM;EAAM,CAAC,CAAC;EAExC,IAAMC,IAAYC,EAAM,SAAS,IAC7Bd,EAAQ,sBAAsBI,GAAI;GAAE;GAAQ,QAAQW,EAAYD,EAAM,KAAK,MAAME,EAAaC,EAAE,IAAI,CAAC,CAAC;EAAG,CAAC,IAC1G,KAAA;EACJ,IAAIJ,GAAW;GACb,EAAI,KAAKL,EAAMK,GAAW,CAAC,CAAC;GAC5B,KAAK,IAAMI,KAAKH,GACd,EAAI,KAAKL,EAAe,EAAE,MAAMT,EAAQ,eAAeiB,EAAE,MAAMb,GAAIc,EAAOD,GAAGJ,EAAU,EAAE,CAAC,EAAE,CAAC,CAAC;GAEhG,EAAS,IAAIT,GAAI,CAACS,EAAU,EAAE,CAAC;EACjC,OAAO;GACL,IAAMH,IAAUI,EAAM,KAAK,MAAMd,EAAQ,eAAeiB,EAAE,MAAMb,GAAIc,EAAOD,GAAGV,CAAM,CAAC,CAAC;GAEtF,AADAG,EAAQ,SAAS,GAAG,MAAMhB,EAAI,KAAKc,EAAMW,GAAGR,CAAC,CAAC,CAAC,GAC/ChB,EAAS,IAAIS,GAAIM,EAAQ,KAAK,MAAMS,EAAE,EAAE,CAAC;EAC3C;CACF;CAMA,OALAzB,EAAI,KAAK0B,EAAqB;EAC5B,MAAM,CAAC,GAAGC,CAAG;EACb,IAAIA,EAAI,SAAS,MAAQ1B,EAAS,IAAIS,CAAE,KAAK,CAACA,CAAE,CAAc;CAChE,CAAC,CAAC,GACFkB,EAAmBtB,GAASN,GAAK6B,CAAK,GAC/B5B;AACT;AAEA,SAASuB,EAAO,GAAgB,GAAwC;CACtE,OAAOD,EAAE,WAAW,KAAA,IAAyD;EAAE,MAAMA,EAAE;EAAM;CAAO,IAApE;EAAE,MAAMA,EAAE;EAAM,QAAQA,EAAE;EAAQ;CAAO;AAC3E"}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import { strokeToPath as e } from "@weasel-js/stroke";
|
|
2
|
+
//#region src/interactions/actions/outlines/strokeRegion.ts
|
|
3
|
+
function t(t, n, r, { scale: i = 1, flattenTolerance: a } = {}) {
|
|
4
|
+
let o = a === void 0 ? {} : { flattenTolerance: a }, s = typeof i == "number" ? i : i.x, c = typeof i == "number" ? i : i.y, l = Math.sqrt(Math.abs(s * c));
|
|
5
|
+
return typeof n.width == "object" ? Math.abs(s) === Math.abs(c) ? e(t, n, {
|
|
6
|
+
...o,
|
|
7
|
+
scale: l
|
|
8
|
+
}) : e(t, n, {
|
|
9
|
+
...o,
|
|
10
|
+
frame: [
|
|
11
|
+
1 / s,
|
|
12
|
+
0,
|
|
13
|
+
0,
|
|
14
|
+
1 / c,
|
|
15
|
+
0,
|
|
16
|
+
0
|
|
17
|
+
]
|
|
18
|
+
}) : e(t, n, {
|
|
19
|
+
...o,
|
|
20
|
+
scale: l,
|
|
21
|
+
...r ? { frame: r } : {}
|
|
22
|
+
});
|
|
23
|
+
}
|
|
24
|
+
//#endregion
|
|
25
|
+
export { t as strokeRegion };
|
|
26
|
+
|
|
27
|
+
//# sourceMappingURL=strokeRegion.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"strokeRegion.js","names":["strokeRegion","tolerance","flattenTolerance","sx","scale","sy","mean","stroke","strokeToPath","path","frame"],"sources":["../../../../src/interactions/actions/outlines/strokeRegion.ts"],"sourcesContent":["import { strokeToPath } from '@weasel-js/stroke';\nimport type { Affine, Path, PolygonPath, Scale2 } from '@weasel-js/geom';\nimport type { Stroke } from '@weasel-js/paint';\n\n/** How Outline Stroke and a Boolean operation counting strokes measure one. */\nexport interface StrokeRegionOptions {\n /** The view scale a `{ px }` width resolves against: one number, or the\n * view's own scale per axis. Default 1. */\n scale?: number | Scale2;\n /** Flatness tolerance for curves, in the units of the frame the stroke is\n * drawn in. */\n flattenTolerance?: number;\n}\n\n/**\n * The region `stroke` covers along the world-space `path`, outlined in the\n * frame the canvas draws it in: the screen for a `{ px }` width, so a view\n * that scales its axes apart thins it on one of them, and otherwise `frame`,\n * the node's own (`poseFrameOf`, to world), which skews and stretches the\n * stroke with the node.\n */\nexport function strokeRegion(\n path: Path,\n stroke: Stroke,\n frame: Affine | null | undefined,\n { scale = 1, flattenTolerance }: StrokeRegionOptions = {},\n): PolygonPath {\n const tolerance = flattenTolerance === undefined ? {} : { flattenTolerance };\n const sx = typeof scale === 'number' ? scale : scale.x;\n const sy = typeof scale === 'number' ? scale : scale.y;\n const mean = Math.sqrt(Math.abs(sx * sy));\n if (typeof stroke.width === 'object') {\n if (Math.abs(sx) === Math.abs(sy)) return strokeToPath(path, stroke, { ...tolerance, scale: mean });\n return strokeToPath(path, stroke, { ...tolerance, frame: [1 / sx, 0, 0, 1 / sy, 0, 0] });\n }\n return strokeToPath(path, stroke, { ...tolerance, scale: mean, ...(frame ? { frame } : {}) });\n}\n"],"mappings":";;AAqBA,SAAgBA,EACd,GACA,GACA,GACA,EAAE,WAAQ,GAAG,wBAA0C,CAAC,GAC3C;CACb,IAAMC,IAAYC,MAAqB,KAAA,IAAY,CAAC,IAAI,EAAE,oBAAiB,GACrEC,IAAK,OAAOC,KAAU,WAAWA,IAAQA,EAAM,GAC/CC,IAAK,OAAOD,KAAU,WAAWA,IAAQA,EAAM,GAC/CE,IAAO,KAAK,KAAK,KAAK,IAAIH,IAAKE,CAAE,CAAC;CAKxC,OAJI,OAAOE,EAAO,SAAU,WACtB,KAAK,IAAIJ,CAAE,MAAM,KAAK,IAAIE,CAAE,IAAUG,EAAaC,GAAMF,GAAQ;EAAE,GAAGN;EAAW,OAAOK;CAAK,CAAC,IAC3FE,EAAaC,GAAMF,GAAQ;EAAE,GAAGN;EAAW,OAAO;GAAC,IAAIE;GAAI;GAAG;GAAG,IAAIE;GAAI;GAAG;EAAC;CAAE,CAAC,IAElFG,EAAaC,GAAMF,GAAQ;EAAE,GAAGN;EAAW,OAAOK;EAAM,GAAII,IAAQ,EAAE,SAAM,IAAI,CAAC;CAAG,CAAC;AAC9F"}
|