@weasel-js/core 1.9.3 → 1.10.0
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 +1106 -0
- package/README.md +7 -5
- package/dist/WeaselProvider.js +5 -7
- package/dist/WeaselProvider.js.map +1 -1
- package/dist/affordances/composeAffordanceLayer.js +91 -93
- package/dist/affordances/composeAffordanceLayer.js.map +1 -1
- package/dist/affordances/cornerResize.js +27 -18
- package/dist/affordances/cornerResize.js.map +1 -1
- package/dist/affordances/hitAffordanceRegions.js +65 -104
- package/dist/affordances/hitAffordanceRegions.js.map +1 -1
- package/dist/affordances/pathAnchors.js.map +1 -1
- package/dist/affordances/rotationHandle.js +22 -21
- 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 +38 -88
- 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 +93 -0
- package/dist/animation/rig/rigNode.js.map +1 -0
- package/dist/animation/rig/rigSeat.js +26 -0
- package/dist/animation/rig/rigSeat.js.map +1 -0
- package/dist/animation/rig/skinBinding.js +56 -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 +32 -24
- package/dist/animation/wrappers/animateLifecycle.js.map +1 -1
- package/dist/animation/wrappers/animateOnSetPose.js +31 -29
- package/dist/animation/wrappers/animateOnSetPose.js.map +1 -1
- package/dist/animation/wrappers/instantPose.js +13 -0
- package/dist/animation/wrappers/instantPose.js.map +1 -0
- package/dist/animation/writtenPoseTarget.js +33 -0
- package/dist/animation/writtenPoseTarget.js.map +1 -0
- package/dist/{autoPoseDescriptor-vCdt55xm.d.ts → autoPoseDescriptor-DHg5KqaJ.d.ts} +1 -1
- package/dist/barrel/canvas.js +31 -0
- package/dist/barrel/chrome.js +16 -0
- package/dist/barrel/input.js +18 -0
- package/dist/barrel/interactions.js +38 -0
- package/dist/barrel/paint.js +11 -0
- package/dist/barrel/paths.js +12 -0
- package/dist/barrel/renderer.js +14 -0
- package/dist/barrel/routing.js +57 -0
- package/dist/barrel/scene.js +37 -0
- package/dist/barrel/text.js +9 -0
- package/dist/barrel/viewport.js +42 -0
- package/dist/canvas/Canvas.js +280 -559
- package/dist/canvas/Canvas.js.map +1 -1
- package/dist/canvas/CanvasView.js +147 -167
- package/dist/canvas/CanvasView.js.map +1 -1
- package/dist/canvas/CursorCoordsHud.js +53 -49
- package/dist/canvas/CursorCoordsHud.js.map +1 -1
- package/dist/canvas/DrawCanvas.js +40 -51
- package/dist/canvas/DrawCanvas.js.map +1 -1
- package/dist/canvas/ModalityHud.js.map +1 -1
- package/dist/canvas/NodeShape.js +55 -374
- package/dist/canvas/NodeShape.js.map +1 -1
- package/dist/canvas/PickHud.js +50 -47
- package/dist/canvas/PickHud.js.map +1 -1
- package/dist/canvas/SceneCanvas/DevHuds.js +40 -0
- package/dist/canvas/SceneCanvas/DevHuds.js.map +1 -0
- package/dist/canvas/SceneCanvas/GestureDispatcherMounter.js +126 -0
- package/dist/canvas/SceneCanvas/GestureDispatcherMounter.js.map +1 -0
- package/dist/canvas/SceneCanvas/PointerProviderIfRoot.js +27 -31
- package/dist/canvas/SceneCanvas/PointerProviderIfRoot.js.map +1 -1
- package/dist/canvas/SceneCanvas/StandardActionsRegistrar.js +64 -0
- package/dist/canvas/SceneCanvas/StandardActionsRegistrar.js.map +1 -0
- package/dist/canvas/SceneCanvas/ToolKeybindingsMounter.js +16 -0
- package/dist/canvas/SceneCanvas/ToolKeybindingsMounter.js.map +1 -0
- package/dist/canvas/SceneCanvas/coordTrace.js +46 -0
- package/dist/canvas/SceneCanvas/coordTrace.js.map +1 -0
- package/dist/canvas/SceneCanvas/defaultNodeProperties.js +138 -85
- package/dist/canvas/SceneCanvas/defaultNodeProperties.js.map +1 -1
- package/dist/canvas/SceneCanvas/defaultNodeRouting.js +9 -8
- package/dist/canvas/SceneCanvas/defaultNodeRouting.js.map +1 -1
- package/dist/canvas/SceneCanvas/dispatcherGestureBounds.js.map +1 -1
- package/dist/canvas/SceneCanvas/features.js +74 -43
- package/dist/canvas/SceneCanvas/features.js.map +1 -1
- package/dist/canvas/SceneCanvas/isDev.js +12 -0
- package/dist/canvas/SceneCanvas/isDev.js.map +1 -0
- package/dist/canvas/SceneCanvas/poseGeometry.js +31 -34
- package/dist/canvas/SceneCanvas/poseGeometry.js.map +1 -1
- package/dist/canvas/SceneCanvas/poseRegistrars.js +13 -0
- package/dist/canvas/SceneCanvas/poseRegistrars.js.map +1 -0
- package/dist/canvas/SceneCanvas/props.js +39 -0
- package/dist/canvas/SceneCanvas/props.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/useActionsPropResolver.js +6 -1
- package/dist/canvas/SceneCanvas/useActionsPropResolver.js.map +1 -1
- package/dist/canvas/SceneCanvas/useBuiltinShapeTools.js +21 -62
- 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 +38 -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 +29 -29
- 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 +48 -48
- 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 +74 -78
- 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 +9 -0
- package/dist/canvas/SceneCanvas/worldPointAt.js.map +1 -0
- package/dist/canvas/SceneCanvas.js +311 -969
- package/dist/canvas/SceneCanvas.js.map +1 -1
- package/dist/canvas/SceneViewCanvas.js +42 -46
- package/dist/canvas/SceneViewCanvas.js.map +1 -1
- package/dist/canvas/adapterDerivedPath.js +26 -0
- package/dist/canvas/adapterDerivedPath.js.map +1 -0
- package/dist/canvas/affordanceAt.js +11 -1
- package/dist/canvas/affordanceAt.js.map +1 -1
- package/dist/canvas/buildSceneLayer.js +111 -0
- package/dist/canvas/buildSceneLayer.js.map +1 -0
- package/dist/canvas/buildSceneTree.js +16 -19
- package/dist/canvas/buildSceneTree.js.map +1 -1
- package/dist/canvas/canvasRenderer.js +67 -55
- package/dist/canvas/canvasRenderer.js.map +1 -1
- package/dist/canvas/colorOverrides.js.map +1 -1
- package/dist/canvas/defaultDrawOne.js +12 -12
- 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/changes.js +13 -0
- package/dist/canvas/deps/changes.js.map +1 -0
- package/dist/canvas/deps/debug.js.map +1 -1
- package/dist/canvas/deps/editAnchors.js +38 -57
- package/dist/canvas/deps/editAnchors.js.map +1 -1
- package/dist/canvas/deps/geometryProjection.js.map +1 -1
- package/dist/canvas/deps/hitTestArea.js +31 -26
- package/dist/canvas/deps/hitTestArea.js.map +1 -1
- package/dist/canvas/deps/insert.js +130 -91
- 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/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 +26 -26
- package/dist/canvas/deps/slice.js.map +1 -1
- package/dist/canvas/deps/textEdit.js +6 -5
- package/dist/canvas/deps/textEdit.js.map +1 -1
- package/dist/canvas/deps/view.js.map +1 -1
- package/dist/canvas/derivedPath.js +47 -22
- 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 +4 -8
- package/dist/canvas/getNodeAtPoint.js.map +1 -1
- package/dist/canvas/hud.module.js +1 -1
- package/dist/canvas/hud.module.js.map +1 -1
- package/dist/canvas/insertPreviewExtent.js.map +1 -1
- package/dist/canvas/kitRequirements.js +2 -2
- package/dist/canvas/kitRequirements.js.map +1 -1
- package/dist/canvas/layerOrder.js +13 -6
- package/dist/canvas/layerOrder.js.map +1 -1
- package/dist/canvas/layerSlots.js +6 -1
- package/dist/canvas/layerSlots.js.map +1 -1
- package/dist/canvas/nodeShapes/derivedPainter.js +34 -0
- package/dist/canvas/nodeShapes/derivedPainter.js.map +1 -0
- package/dist/canvas/nodeShapes/imagePainter.js +87 -0
- package/dist/canvas/nodeShapes/imagePainter.js.map +1 -0
- package/dist/canvas/nodeShapes/memo.js +9 -0
- package/dist/canvas/nodeShapes/memo.js.map +1 -0
- package/dist/canvas/nodeShapes/nodePaint.js +68 -0
- package/dist/canvas/nodeShapes/nodePaint.js.map +1 -0
- package/dist/canvas/nodeShapes/pathPainter.js +39 -0
- package/dist/canvas/nodeShapes/pathPainter.js.map +1 -0
- package/dist/canvas/nodeShapes/poseBox.js +20 -0
- package/dist/canvas/nodeShapes/poseBox.js.map +1 -0
- package/dist/canvas/nodeShapes/rectFallbackPainter.js +38 -0
- package/dist/canvas/nodeShapes/rectFallbackPainter.js.map +1 -0
- package/dist/canvas/nodeShapes/shapePainter.js +72 -0
- package/dist/canvas/nodeShapes/shapePainter.js.map +1 -0
- package/dist/canvas/nodeShapes/textPainter.js +55 -0
- package/dist/canvas/nodeShapes/textPainter.js.map +1 -0
- package/dist/canvas/overlayRoleStrokes.js.map +1 -1
- package/dist/canvas/paintCull.js +11 -14
- 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/pickWalk.js +59 -68
- 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 +9 -23
- 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 +11 -11
- 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 -81
- package/dist/canvas/renderSceneToPixels.js.map +1 -1
- package/dist/canvas/sceneAdapter.js +68 -214
- package/dist/canvas/sceneAdapter.js.map +1 -1
- package/dist/canvas/sceneClipboard.js +112 -0
- package/dist/canvas/sceneClipboard.js.map +1 -0
- package/dist/canvas/sceneLayerPaint.js +4 -4
- package/dist/canvas/sceneLayerPaint.js.map +1 -1
- package/dist/canvas/sceneSlotWiring.js.map +1 -1
- package/dist/canvas/sceneViewRender.js +39 -39
- 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/surface.module.js +6 -0
- package/dist/canvas/surface.module.js.map +1 -0
- package/dist/canvas/surfaceBox.js +16 -0
- package/dist/canvas/surfaceBox.js.map +1 -0
- package/dist/canvas/useCanvasRenderer.js +26 -6
- 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 +67 -0
- package/dist/canvas/useCanvasView.js.map +1 -0
- package/dist/canvas/useFrameLoop.js +39 -31
- 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/useSceneLayerList.js +11 -0
- package/dist/canvas/useSceneLayerList.js.map +1 -0
- package/dist/canvas/useSurfaceInput.js +42 -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 +25 -27
- 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.map +1 -1
- package/dist/clipboard.d.ts +16 -19
- package/dist/{types-B_9g6hMM.d.ts → clone-2a5hVbBd.d.ts} +123 -74
- package/dist/clone.d.ts +4 -7
- package/dist/clone.js +0 -2
- package/dist/core/device/index.js +5 -4
- package/dist/core/device/targets.js.map +1 -1
- package/dist/core/device/useDeviceProfile.js +38 -44
- package/dist/core/device/useDeviceProfile.js.map +1 -1
- package/dist/core/device/watchDevicePixelRatio.js +17 -0
- package/dist/core/device/watchDevicePixelRatio.js.map +1 -0
- package/dist/{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 +68 -19
- package/dist/core/geometry/poseDescriptor.js.map +1 -1
- package/dist/core/geometry/regionHit.js +31 -34
- 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 +30 -29
- package/dist/core/geometry/unionBounds.js.map +1 -1
- package/dist/core/isPlainObject.js +2 -11
- 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 +1 -1
- package/dist/core/layers/children.js.map +1 -0
- package/dist/core/layers/gateLayer.js +13 -0
- 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/arrange.js +1 -0
- package/dist/core/ops/arrange.js.map +1 -1
- package/dist/core/ops/create.js +10 -5
- package/dist/core/ops/create.js.map +1 -1
- package/dist/core/ops/createHistory.js +9 -9
- package/dist/core/ops/createHistory.js.map +1 -1
- package/dist/core/ops/delete.js +12 -24
- package/dist/core/ops/delete.js.map +1 -1
- package/dist/core/ops/reorder/index.js +43 -40
- package/dist/core/ops/reorder/index.js.map +1 -1
- package/dist/core/ops/reorder/setChildOrder.js +34 -0
- package/dist/core/ops/reorder/setChildOrder.js.map +1 -0
- package/dist/core/paint/meshKind.js +16 -0
- package/dist/core/paint/meshKind.js.map +1 -0
- package/dist/{features/meshPaint/lazyKind.js → core/paint/meshKindLazy.js} +282 -105
- 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/appliedLog.js +37 -0
- package/dist/core/scene/appliedLog.js.map +1 -0
- package/dist/core/scene/arrivalWindow.js +102 -0
- package/dist/core/scene/arrivalWindow.js.map +1 -0
- 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/{features/groups → core/scene}/composePose.js +18 -18
- 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 +38 -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 +130 -0
- package/dist/core/scene/historyFacade.js.map +1 -0
- package/dist/core/scene/historyForm.js +6 -0
- package/dist/core/scene/historyForm.js.map +1 -0
- package/dist/core/scene/kitOps.js +185 -0
- package/dist/core/scene/kitOps.js.map +1 -0
- package/dist/core/scene/kitRegistry.js.map +1 -1
- package/dist/core/scene/layerStack.js +131 -0
- package/dist/core/scene/layerStack.js.map +1 -0
- package/dist/core/scene/layoutPass.js +58 -59
- package/dist/core/scene/layoutPass.js.map +1 -1
- package/dist/core/scene/lockGuard.js +37 -0
- package/dist/core/scene/lockGuard.js.map +1 -0
- 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 +10 -11
- package/dist/core/scene/nodeFnFields.js.map +1 -1
- package/dist/core/scene/nodeMemo.js +45 -19
- package/dist/core/scene/nodeMemo.js.map +1 -1
- package/dist/core/scene/nodeStore.js +127 -0
- package/dist/core/scene/nodeStore.js.map +1 -0
- 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 +66 -0
- package/dist/core/scene/outerOps.js.map +1 -0
- package/dist/core/scene/poseFeed.js +38 -38
- package/dist/core/scene/poseFeed.js.map +1 -1
- package/dist/core/scene/poseHold.js +39 -0
- package/dist/core/scene/poseHold.js.map +1 -0
- package/dist/core/scene/poseOverrides.js +44 -40
- package/dist/core/scene/poseOverrides.js.map +1 -1
- package/dist/core/scene/poseSnapshot.js.map +1 -1
- package/dist/core/scene/reconcileSpecs.js +3 -2
- 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 +84 -0
- package/dist/core/scene/renderOrder.js.map +1 -0
- package/dist/core/scene/scene.js +80 -1266
- 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 +90 -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 +71 -0
- package/dist/core/scene/serialization.js.map +1 -0
- 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/treeOrder.js +13 -0
- package/dist/core/scene/treeOrder.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 +8 -8
- 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 +102 -43
- package/dist/core/viewport/useViewAnimation.js.map +1 -1
- package/dist/core/viewport/view.js +9 -9
- package/dist/core/viewport/view.js.map +1 -1
- package/dist/core/viewport/wheelHandler.js.map +1 -1
- package/dist/core/viewport/zoomBounds.js +10 -8
- package/dist/core/viewport/zoomBounds.js.map +1 -1
- package/dist/{cornerHandles-BCrDp_mH.d.ts → cornerHandles-BEshc4z3.d.ts} +11 -24
- package/dist/debug/createDebugOverlayLayer.js +97 -97
- package/dist/debug/createDebugOverlayLayer.js.map +1 -1
- package/dist/debug/createDebugSink.js.map +1 -1
- package/dist/debug/flag.js +2 -41
- 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 +22 -17
- package/dist/features/chrome-caps/useHoverTracking.js.map +1 -1
- package/dist/features/ingestion/contentHandlers.js +28 -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/registerKitHandlers.js +7 -7
- 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 +22 -14
- 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 +47 -0
- package/dist/features/paths/editablePath.js.map +1 -0
- package/dist/features/paths/index.js +9 -14
- 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/usePathEdit.js +34 -0
- package/dist/features/paths/usePathEdit.js.map +1 -0
- package/dist/features/poseRun/usePoseRun.js +44 -52
- package/dist/features/poseRun/usePoseRun.js.map +1 -1
- package/dist/features/selection/overlay.js +171 -179
- 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 +100 -93
- package/dist/features/text/useSceneTextEdit.js.map +1 -1
- package/dist/features/viewports/viewportLayer.js +25 -36
- package/dist/features/viewports/viewportLayer.js.map +1 -1
- package/dist/index.d.ts +8473 -9141
- package/dist/index.js +269 -307
- package/dist/input/keyState.js +38 -39
- package/dist/input/keyState.js.map +1 -1
- package/dist/input/useKeyModifiers.js +11 -0
- package/dist/input/useKeyModifiers.js.map +1 -0
- package/dist/interactions/actions/actionShortcuts.js.map +1 -1
- package/dist/interactions/actions/{defaults/align.js → align/action.js} +18 -20
- package/dist/interactions/actions/align/action.js.map +1 -0
- package/dist/interactions/actions/align/align.js +20 -20
- 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 +69 -78
- 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} +31 -15
- package/dist/interactions/actions/clipboard/action.js.map +1 -0
- package/dist/interactions/actions/clipboard/clipboardOps.js +44 -42
- package/dist/interactions/actions/clipboard/clipboardOps.js.map +1 -1
- package/dist/interactions/actions/clipboard/materializePaste.js +10 -7
- package/dist/interactions/actions/clipboard/materializePaste.js.map +1 -1
- package/dist/interactions/actions/clipboard/wireFormat.js.map +1 -1
- package/dist/interactions/actions/clone/action.js +98 -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 +7 -32
- package/dist/interactions/actions/defaultCommitAdapter.js.map +1 -1
- package/dist/interactions/actions/defaults/anchorEditing.js +60 -84
- package/dist/interactions/actions/defaults/anchorEditing.js.map +1 -1
- package/dist/interactions/actions/defaults/areaSelect.js +35 -38
- package/dist/interactions/actions/defaults/areaSelect.js.map +1 -1
- package/dist/interactions/actions/defaults/cancelGesture.js.map +1 -1
- package/dist/interactions/actions/defaults/clearSelection.js.map +1 -1
- package/dist/interactions/actions/defaults/copySubtree.js +40 -0
- package/dist/interactions/actions/defaults/copySubtree.js.map +1 -0
- package/dist/interactions/actions/defaults/createPaintAction.js.map +1 -1
- package/dist/interactions/actions/defaults/delete.js.map +1 -1
- package/dist/interactions/actions/defaults/duplicate.js +13 -53
- package/dist/interactions/actions/defaults/duplicate.js.map +1 -1
- package/dist/interactions/actions/defaults/enterTextEdit.js.map +1 -1
- package/dist/interactions/actions/defaults/group.js +40 -50
- package/dist/interactions/actions/defaults/group.js.map +1 -1
- 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/outlineIcons.js +39 -1
- package/dist/interactions/actions/defaults/icons/outlineIcons.js.map +1 -1
- package/dist/interactions/actions/defaults/ingest.js +44 -38
- package/dist/interactions/actions/defaults/ingest.js.map +1 -1
- package/dist/interactions/actions/defaults/insertPathAnchor.js +11 -12
- package/dist/interactions/actions/defaults/insertPathAnchor.js.map +1 -1
- package/dist/interactions/actions/defaults/nudge.js +40 -69
- package/dist/interactions/actions/defaults/nudge.js.map +1 -1
- package/dist/interactions/actions/defaults/nudgeSteps.js +37 -0
- package/dist/interactions/actions/defaults/nudgeSteps.js.map +1 -0
- package/dist/interactions/actions/defaults/pinchZoom.js.map +1 -1
- package/dist/interactions/actions/defaults/reorder.js +2 -0
- package/dist/interactions/actions/defaults/reorder.js.map +1 -1
- package/dist/interactions/actions/defaults/requiresSelection.js.map +1 -1
- package/dist/interactions/actions/defaults/setFill.js +14 -8
- package/dist/interactions/actions/defaults/setFill.js.map +1 -1
- package/dist/interactions/actions/defaults/setFillOpacity.js +7 -4
- package/dist/interactions/actions/defaults/setFillOpacity.js.map +1 -1
- package/dist/interactions/actions/defaults/setStroke.js +12 -12
- package/dist/interactions/actions/defaults/setStroke.js.map +1 -1
- package/dist/interactions/actions/defaults/setStrokeOpacity.js +6 -6
- package/dist/interactions/actions/defaults/sliceOps.js +8 -10
- 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 +37 -26
- 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.map +1 -1
- package/dist/interactions/actions/distribute/action.js +66 -0
- package/dist/interactions/actions/distribute/action.js.map +1 -0
- package/dist/interactions/actions/distribute/distribute.js +11 -11
- package/dist/interactions/actions/distribute/distribute.js.map +1 -1
- package/dist/interactions/actions/{defaults/editAnchors.js → edit-anchors/action.js} +7 -9
- package/dist/interactions/actions/edit-anchors/action.js.map +1 -0
- package/dist/interactions/actions/edit-anchors/geometry.js +30 -27
- package/dist/interactions/actions/edit-anchors/geometry.js.map +1 -1
- 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 +30 -17
- package/dist/interactions/actions/flip/helpers.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/hitSelection.js +8 -0
- package/dist/interactions/actions/hitSelection.js.map +1 -0
- package/dist/interactions/actions/insert/action.js +72 -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 +48 -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/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/lasso-select/behaviors/selectFromLasso.js +14 -18
- package/dist/interactions/actions/lasso-select/behaviors/selectFromLasso.js.map +1 -1
- package/dist/interactions/actions/move/action.js +87 -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/snapBackOrDelete.js +5 -5
- package/dist/interactions/actions/move/behaviors/snapBackOrDelete.js.map +1 -1
- package/dist/interactions/actions/move/behaviors/snapToContainer.js +39 -27
- package/dist/interactions/actions/move/behaviors/snapToContainer.js.map +1 -1
- package/dist/interactions/actions/move/capture.js +99 -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 +59 -0
- package/dist/interactions/actions/move/frame.js.map +1 -0
- package/dist/interactions/actions/move/gestureAdapter.js +22 -30
- package/dist/interactions/actions/move/gestureAdapter.js.map +1 -1
- package/dist/interactions/actions/move/landedDescendants.js +33 -0
- package/dist/interactions/actions/move/landedDescendants.js.map +1 -0
- package/dist/interactions/actions/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 +16 -63
- 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/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 +16 -4
- package/dist/interactions/actions/poseDescriptorDep.js.map +1 -1
- package/dist/interactions/actions/poseFrame.js +25 -20
- package/dist/interactions/actions/poseFrame.js.map +1 -1
- package/dist/interactions/actions/resize/action.js +55 -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 +74 -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/ruleBounds.js +9 -0
- package/dist/interactions/actions/resize/ruleBounds.js.map +1 -0
- package/dist/interactions/actions/resize/session.js +49 -0
- package/dist/interactions/actions/resize/session.js.map +1 -0
- 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 +56 -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/session.js +92 -0
- package/dist/interactions/actions/rotate/session.js.map +1 -0
- package/dist/interactions/actions/selectionSubtree.js +69 -0
- package/dist/interactions/actions/selectionSubtree.js.map +1 -0
- package/dist/interactions/actions/spatialReference.js.map +1 -1
- package/dist/interactions/actions/useStandardActions.js +87 -78
- package/dist/interactions/actions/useStandardActions.js.map +1 -1
- package/dist/interactions/gestures/dragGesture/dragGesture.js +4 -7
- package/dist/interactions/gestures/dragGesture/dragGesture.js.map +1 -1
- package/dist/interactions/gestures/dragGesture/dragPointOf.js +23 -0
- package/dist/interactions/gestures/dragGesture/dragPointOf.js.map +1 -0
- package/dist/interactions/gestures/handleDrag/handleDrag.js +21 -26
- package/dist/interactions/gestures/handleDrag/handleDrag.js.map +1 -1
- package/dist/interactions/gestures/pointerDrag/pointerDrag.js +62 -41
- 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/interactions/gestures/thresholdDrag/thresholdDrag.js +8 -4
- package/dist/interactions/gestures/thresholdDrag/thresholdDrag.js.map +1 -1
- package/dist/layout/arrivals.js +20 -23
- package/dist/layout/arrivals.js.map +1 -1
- package/dist/math-CYUjoyyU.d.ts +33 -0
- package/dist/math.d.ts +5 -3
- package/dist/math.js +6 -6
- package/dist/mesh.d.ts +4 -268
- package/dist/mesh.js +3 -7
- package/dist/move.d.ts +14 -11
- package/dist/{originProjection-DEklpDc_.d.ts → originProjection-PPT88jZv.d.ts} +1 -1
- package/dist/patterns-builtin.d.ts +1 -118
- package/dist/patterns-builtin.js +2 -3
- package/dist/{poseDescriptor-D-OH-tu5.d.ts → poseDescriptor-Bqk-11Rl.d.ts} +26 -36
- package/dist/renderer.d.ts +1 -91
- package/dist/renderer.js +2 -18
- package/dist/resize.d.ts +10 -22
- package/dist/resize.js +6 -6
- package/dist/style.css +1 -1
- package/dist/test-hook/install.js +12 -6
- package/dist/test-hook/install.js.map +1 -1
- package/dist/test-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 +1 -0
- 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 +1 -0
- 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 +11 -11
- package/dist/tools/builtin/lasso/useLassoTool.js.map +1 -1
- package/dist/tools/builtin/line/useLineTool.js +1 -0
- package/dist/tools/builtin/line/useLineTool.js.map +1 -1
- package/dist/tools/builtin/pen/usePenTool.js +198 -150
- package/dist/tools/builtin/pen/usePenTool.js.map +1 -1
- package/dist/tools/builtin/pencil/usePencilTool.js +1 -0
- package/dist/tools/builtin/pencil/usePencilTool.js.map +1 -1
- package/dist/tools/builtin/pickTopMostHit.js.map +1 -1
- package/dist/tools/builtin/polygon/usePolygonTool.js +13 -8
- package/dist/tools/builtin/polygon/usePolygonTool.js.map +1 -1
- package/dist/tools/builtin/rect/useRectTool.js +1 -0
- package/dist/tools/builtin/rect/useRectTool.js.map +1 -1
- package/dist/tools/builtin/select/adapterPointQuery.js +36 -0
- package/dist/tools/builtin/select/adapterPointQuery.js.map +1 -0
- package/dist/tools/builtin/select/selectionContributions.js +25 -24
- package/dist/tools/builtin/select/selectionContributions.js.map +1 -1
- package/dist/tools/builtin/select/useSelectTool.js +42 -67
- package/dist/tools/builtin/select/useSelectTool.js.map +1 -1
- package/dist/tools/builtin/shared/pointerFollower.js +17 -0
- package/dist/tools/builtin/shared/pointerFollower.js.map +1 -0
- package/dist/tools/builtin/slice/useSliceTool.js +72 -82
- package/dist/tools/builtin/slice/useSliceTool.js.map +1 -1
- package/dist/tools/builtin/star/useStarTool.js +22 -16
- package/dist/tools/builtin/star/useStarTool.js.map +1 -1
- package/dist/tools/builtin/text/useTextTool.js +9 -0
- 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 +12 -22
- package/dist/tools/useKeybindings.js.map +1 -1
- package/dist/{types-A37hYkeR.d.ts → types-CIKDwlsP.d.ts} +113 -169
- package/dist/util/color.js +3 -3
- package/dist/util/color.js.map +1 -1
- package/dist/util/paint.js +1 -1
- package/dist/util/paint.js.map +1 -1
- package/dist/version.js +1 -1
- package/package.json +28 -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 -62
- 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 -138
- package/dist/animation/stagger.js.map +0 -1
- package/dist/animation/timeline/booking.js +0 -106
- package/dist/animation/timeline/booking.js.map +0 -1
- package/dist/animation/timeline/createTimeline.js +0 -116
- package/dist/animation/timeline/createTimeline.js.map +0 -1
- package/dist/animation/timeline/sampleTrack.js +0 -71
- package/dist/animation/timeline/sampleTrack.js.map +0 -1
- package/dist/animation/useAnimator.js +0 -378
- package/dist/animation/useAnimator.js.map +0 -1
- package/dist/builtins-C-VgUlWI.d.ts +0 -4514
- package/dist/canvas/MinimapCanvas.js +0 -139
- 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 -80
- 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 -85
- 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/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/isPlainObject.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/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/debug/flag.js.map +0 -1
- package/dist/features/cursor/paintedCursorLayer.js.map +0 -1
- package/dist/features/focus/gateLayer.js +0 -14
- 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.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 -94
- 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 -236
- 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 -103
- 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 -26
- package/dist/features/parallax/createParallaxPlane.js.map +0 -1
- package/dist/features/paths/anchorEdits.js +0 -156
- package/dist/features/paths/anchorEdits.js.map +0 -1
- package/dist/features/paths/anchors.js +0 -154
- package/dist/features/paths/anchors.js.map +0 -1
- package/dist/features/paths/booleans.js +0 -2
- package/dist/features/paths/markerCommands.js +0 -148
- 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/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/index.js +0 -23
- 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/resolveSpec.js +0 -57
- 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 -46
- 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/domRuns.js +0 -258
- 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 -45
- package/dist/features/text/hitTest.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 -135
- package/dist/features/text/runs/rangeStyle.js.map +0 -1
- package/dist/features/text/textCommand.js +0 -59
- 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 -467
- package/dist/features/text/useTextEdit.js.map +0 -1
- package/dist/features/tiling/createTiledLayer.js +0 -63
- 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 -107
- 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 +0 -66
- package/dist/interactions/actions/defaults/distribute.js.map +0 -1
- package/dist/interactions/actions/defaults/editAnchors.js.map +0 -1
- package/dist/interactions/actions/defaults/flip.js +0 -119
- package/dist/interactions/actions/defaults/flip.js.map +0 -1
- package/dist/interactions/actions/defaults/freshNodeId.js +0 -10
- package/dist/interactions/actions/defaults/freshNodeId.js.map +0 -1
- package/dist/interactions/actions/defaults/insert.js +0 -288
- package/dist/interactions/actions/defaults/insert.js.map +0 -1
- package/dist/interactions/actions/defaults/lassoSelect.js +0 -156
- package/dist/interactions/actions/defaults/lassoSelect.js.map +0 -1
- package/dist/interactions/actions/defaults/move.js +0 -760
- package/dist/interactions/actions/defaults/move.js.map +0 -1
- package/dist/interactions/actions/defaults/resize.js +0 -335
- package/dist/interactions/actions/defaults/resize.js.map +0 -1
- package/dist/interactions/actions/defaults/rotate.js +0 -184
- 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/math-Drrw4ewZ.d.ts +0 -160
- package/dist/registerProgram-BMZRDgrh.d.ts +0 -197
- package/dist/renderer/DrawCommand.js +0 -6
- package/dist/renderer/DrawCommand.js.map +0 -1
- package/dist/renderer/WeaselRenderer.js +0 -331
- 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 -64
- 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 -51
- 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.js +0 -1135
- 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 -45
- 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 -9
- 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 -19
- package/dist/renderer/math/color.js +0 -341
- package/dist/renderer/math/color.js.map +0 -1
- package/dist/renderer/math/mat3.js +0 -76
- 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 -30
- package/dist/renderer/shaders/gradFill.js.map +0 -1
- package/dist/renderer/shaders/imageFill.js +0 -14
- package/dist/renderer/shaders/imageFill.js.map +0 -1
- package/dist/renderer/shaders/pathFill.js +0 -13
- package/dist/renderer/shaders/pathFill.js.map +0 -1
- package/dist/renderer/shaders/patternFill.js +0 -24
- 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 -14
- 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-CuIxe0xY.d.ts +0 -356
- package/dist/tools/prefs.js +0 -62
- package/dist/tools/prefs.js.map +0 -1
|
@@ -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, isAnchorOrControl 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","isAnchorOrControl","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, isAnchorOrControl, 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 sit on the selected body, and this binding ties editAnchors' on\n // specificity; with no mode registry to filter move out, declining is what lets it through.\n if (isAnchorOrControl(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;CAGjB,IAAIO,EAAkBR,EAAI,MAAM,UAAU,GAAG,OAAO;CAEpD,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 { Mat3 } 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: Mat3 = [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,IAAU;GAAC;GAAG;GAAG;GAAG;GAAG,EAAE;GAAI,EAAE;EAAE,GAIjCC,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 e of
|
|
14
|
-
let
|
|
15
|
-
if (!
|
|
16
|
-
let
|
|
17
|
-
|
|
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({
|
|
18
12
|
id: e,
|
|
19
|
-
paths:
|
|
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: e(t, n.id)
|
|
37
|
-
}))].sort((e, t) => (t.at?.index ?? -1) - (e.at?.index ?? -1));
|
|
38
|
-
for (let { id: e, paths: i, at: a } of m) {
|
|
39
|
-
let o = t.getNode?.(e) ?? { id: e }, s = a?.index ?? -1, c = a?.parentId ?? t.getParent?.(e) ?? 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 ? t.createContainerNode?.(e, {
|
|
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: t.createPathNode(n.path, e, u(n, m.id)) }));
|
|
54
|
-
p.set(e, [m.id]);
|
|
55
|
-
} else {
|
|
56
|
-
let n = i.map((n) => t.createPathNode(n.path, e, u(n, c)));
|
|
57
|
-
n.forEach((e, t) => f.push(l(e, t))), p.set(e, 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(t, 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(e) {
|
|
79
|
-
return t(e.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 { Mat3, 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): Mat3 | 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. Without it the\n * delete captures an `{ id }` stub. */\n getNode?(id: string): { id: string } | undefined | null;\n /** Parent and sibling order — the reorder contract. With both, each path is\n * inserted at its text node's index; without, where `insertNode` defaults. */\n getParent?(id: string): string | null;\n getChildren?(parentId: string | null): readonly 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":";;;AAyFA,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 { locateChild as t } from "../../../core/ops/slot.js";
|
|
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 { 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: t(s, e.id)
|
|
13
|
+
}))].sort((e, t) => (t.at?.index ?? -1) - (e.at?.index ?? -1));
|
|
14
|
+
for (let { id: t, paths: i, at: a } of m) {
|
|
15
|
+
let l = s.getNode?.(t) ?? { id: t }, u = a?.index ?? -1, d = a?.parentId ?? s.getParent?.(t) ?? null, m = (e, t) => r(u >= 0 ? {
|
|
16
|
+
node: e,
|
|
17
|
+
index: u + t
|
|
18
|
+
} : { node: e });
|
|
19
|
+
f.push(n({
|
|
20
|
+
node: l,
|
|
21
|
+
index: u
|
|
22
|
+
}));
|
|
23
|
+
let h = i.length > 1 ? s.createContainerNode?.(t, {
|
|
24
|
+
parent: d,
|
|
25
|
+
bounds: e(i.map((e) => o(e.path)))
|
|
26
|
+
}) : void 0;
|
|
27
|
+
if (h) {
|
|
28
|
+
f.push(m(h, 0));
|
|
29
|
+
for (let e of i) f.push(r({ node: s.createPathNode(e.path, t, c(e, h.id)) }));
|
|
30
|
+
p.set(t, [h.id]);
|
|
31
|
+
} else {
|
|
32
|
+
let e = i.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
|
+
})), i(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) ?? null;\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,UAAUI,CAAE,KAAK,EAAE,MAAG,GACrCC,IAAQC,GAAI,SAAS,IACrBC,IAASD,GAAI,YAAYN,EAAQ,YAAYI,CAAE,KAAK,MACpDI,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 { Mat3, 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: Mat3 | 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"}
|