@weasel-js/core 1.11.1 → 1.13.0-rc.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 +275 -0
- package/dist/WeaselProvider.js +1 -1
- package/dist/affordances/pathAnchors.js +10 -6
- package/dist/affordances/pathAnchors.js.map +1 -1
- package/dist/animation/poseTarget.js +46 -15
- package/dist/animation/poseTarget.js.map +1 -1
- package/dist/animation/poseTransition.js +3 -3
- package/dist/animation/poseTransition.js.map +1 -1
- package/dist/animation/reflow.js +3 -6
- package/dist/animation/reflow.js.map +1 -1
- package/dist/animation/rig/bindRig.js +2 -2
- package/dist/animation/rig/bindRig.js.map +1 -1
- package/dist/animation/rig/skinBinding.js +2 -2
- package/dist/animation/rig/skinBinding.js.map +1 -1
- package/dist/barrel/canvas.js +5 -1
- package/dist/barrel/chrome.js +3 -1
- package/dist/barrel/paint.js +4 -4
- package/dist/barrel/paths.js +9 -4
- package/dist/barrel/renderer.js +3 -2
- package/dist/barrel/routing.js +4 -4
- package/dist/barrel/scene.js +7 -1
- package/dist/barrel/text.js +2 -2
- package/dist/barrel/viewport.js +6 -2
- package/dist/canvas/Canvas.js +2 -1
- package/dist/canvas/Canvas.js.map +1 -1
- package/dist/canvas/CanvasView.js +23 -34
- package/dist/canvas/CanvasView.js.map +1 -1
- package/dist/canvas/ModalityHud.js +1 -1
- package/dist/canvas/NodeShape.js +5 -1
- package/dist/canvas/NodeShape.js.map +1 -1
- package/dist/canvas/SceneCanvas/ActionsProviderIfRoot.js +1 -1
- package/dist/canvas/SceneCanvas/DepRegistryProviderIfRoot.js +1 -1
- package/dist/canvas/SceneCanvas/PointerProviderIfRoot.js +1 -1
- package/dist/canvas/SceneCanvas/SceneCanvasInput.js +2 -0
- package/dist/canvas/SceneCanvas/SceneCanvasInput.js.map +1 -1
- package/dist/canvas/SceneCanvas/SurfaceDeclarations.js +23 -0
- package/dist/canvas/SceneCanvas/SurfaceDeclarations.js.map +1 -0
- package/dist/canvas/SceneCanvas/canvasPassThrough.js +2 -1
- package/dist/canvas/SceneCanvas/canvasPassThrough.js.map +1 -1
- package/dist/canvas/SceneCanvas/defaultNodeRouting.js +2 -2
- package/dist/canvas/SceneCanvas/defaultNodeRouting.js.map +1 -1
- package/dist/canvas/SceneCanvas/props.js.map +1 -1
- package/dist/canvas/SceneCanvas/scenePointQuery.js +27 -5
- package/dist/canvas/SceneCanvas/scenePointQuery.js.map +1 -1
- package/dist/canvas/SceneCanvas/useActionTunings.js +6 -1
- package/dist/canvas/SceneCanvas/useActionTunings.js.map +1 -1
- package/dist/canvas/SceneCanvas/useCanvasDevtoolsRoot.js +1 -0
- package/dist/canvas/SceneCanvas/useCanvasDevtoolsRoot.js.map +1 -1
- package/dist/canvas/SceneCanvas/useCanvasTools.js +10 -2
- package/dist/canvas/SceneCanvas/useCanvasTools.js.map +1 -1
- package/dist/canvas/SceneCanvas/usePreviewGhostLayer.js +25 -19
- package/dist/canvas/SceneCanvas/usePreviewGhostLayer.js.map +1 -1
- package/dist/canvas/SceneCanvas/useSceneCanvasHandle.js +9 -3
- package/dist/canvas/SceneCanvas/useSceneCanvasHandle.js.map +1 -1
- package/dist/canvas/SceneCanvas/useSceneCanvasLayers.js +17 -2
- package/dist/canvas/SceneCanvas/useSceneCanvasLayers.js.map +1 -1
- package/dist/canvas/SceneCanvas/useSceneCanvasTools.js +2 -0
- package/dist/canvas/SceneCanvas/useSceneCanvasTools.js.map +1 -1
- package/dist/canvas/SceneCanvas/useSceneGestureDispatcher.js +19 -4
- package/dist/canvas/SceneCanvas/useSceneGestureDispatcher.js.map +1 -1
- package/dist/canvas/SceneCanvas/useScenePicking.js +31 -6
- package/dist/canvas/SceneCanvas/useScenePicking.js.map +1 -1
- package/dist/canvas/SceneCanvas/useSceneSelectTool.js +4 -5
- package/dist/canvas/SceneCanvas/useSceneSelectTool.js.map +1 -1
- package/dist/canvas/SceneCanvas/useSceneStandardActions.js +7 -4
- package/dist/canvas/SceneCanvas/useSceneStandardActions.js.map +1 -1
- package/dist/canvas/SceneCanvas.js +30 -12
- package/dist/canvas/SceneCanvas.js.map +1 -1
- package/dist/canvas/ViewMarker.js +35 -0
- package/dist/canvas/ViewMarker.js.map +1 -0
- package/dist/canvas/accentColor.js +26 -3
- package/dist/canvas/accentColor.js.map +1 -1
- package/dist/canvas/buildSceneTree.js +14 -20
- package/dist/canvas/buildSceneTree.js.map +1 -1
- package/dist/canvas/copiesAbove.js +1 -1
- package/dist/canvas/copiesAbove.js.map +1 -1
- package/dist/canvas/defaultDrawOne.js +11 -6
- package/dist/canvas/defaultDrawOne.js.map +1 -1
- package/dist/canvas/deps/areaSelect.js +5 -2
- package/dist/canvas/deps/areaSelect.js.map +1 -1
- package/dist/canvas/deps/booleans.js +3 -2
- package/dist/canvas/deps/booleans.js.map +1 -1
- package/dist/canvas/deps/enteredGroup.js +81 -0
- package/dist/canvas/deps/enteredGroup.js.map +1 -0
- package/dist/canvas/deps/hitTestArea.js +28 -16
- package/dist/canvas/deps/hitTestArea.js.map +1 -1
- package/dist/canvas/deps/insert.js +10 -38
- package/dist/canvas/deps/insert.js.map +1 -1
- package/dist/canvas/deps/insertSite.js +39 -0
- package/dist/canvas/deps/insertSite.js.map +1 -0
- package/dist/canvas/deps/lassoSelect.js +6 -3
- package/dist/canvas/deps/lassoSelect.js.map +1 -1
- package/dist/canvas/deps/pathEditCommits.js +3 -7
- package/dist/canvas/deps/pathEditCommits.js.map +1 -1
- package/dist/canvas/deps/pathLeaf.js +1 -1
- package/dist/canvas/deps/pathLeaf.js.map +1 -1
- package/dist/canvas/deps/slice.js +2 -1
- package/dist/canvas/deps/slice.js.map +1 -1
- package/dist/canvas/derivedPath.js +14 -6
- package/dist/canvas/derivedPath.js.map +1 -1
- package/dist/canvas/doubleClickTarget.js +9 -11
- package/dist/canvas/doubleClickTarget.js.map +1 -1
- package/dist/canvas/drawnBounds.js +26 -9
- package/dist/canvas/drawnBounds.js.map +1 -1
- package/dist/canvas/inheritedPaints.js +55 -0
- package/dist/canvas/inheritedPaints.js.map +1 -0
- package/dist/canvas/nodeShapes/derivedPainter.js +15 -16
- package/dist/canvas/nodeShapes/derivedPainter.js.map +1 -1
- package/dist/canvas/nodeShapes/nodePaint.js +7 -34
- package/dist/canvas/nodeShapes/nodePaint.js.map +1 -1
- package/dist/canvas/nodeShapes/pathPainter.js +7 -7
- package/dist/canvas/nodeShapes/pathPainter.js.map +1 -1
- package/dist/canvas/nodeShapes/rectFallbackPainter.js +4 -5
- package/dist/canvas/nodeShapes/rectFallbackPainter.js.map +1 -1
- package/dist/canvas/nodeShapes/shapePainter.js +9 -9
- package/dist/canvas/nodeShapes/shapePainter.js.map +1 -1
- package/dist/canvas/nodeShapes/textPainter.js +13 -12
- package/dist/canvas/nodeShapes/textPainter.js.map +1 -1
- package/dist/canvas/ownClip.js +24 -0
- package/dist/canvas/ownClip.js.map +1 -0
- package/dist/canvas/paintCull.js.map +1 -1
- package/dist/canvas/pickIndex/nodeBroadBox.js +86 -0
- package/dist/canvas/pickIndex/nodeBroadBox.js.map +1 -0
- package/dist/canvas/pickIndex/scenePickIndex.js +208 -0
- package/dist/canvas/pickIndex/scenePickIndex.js.map +1 -0
- package/dist/canvas/pickReach.js +3 -3
- package/dist/canvas/pickReach.js.map +1 -1
- package/dist/canvas/pickWalk.js +17 -91
- package/dist/canvas/pickWalk.js.map +1 -1
- package/dist/canvas/poseCascade.js +1 -1
- package/dist/canvas/poseCascade.js.map +1 -1
- package/dist/canvas/publishPreviews.js +97 -0
- package/dist/canvas/publishPreviews.js.map +1 -0
- package/dist/canvas/renderSceneToPixels.js +1 -1
- package/dist/canvas/renderSceneToPixels.js.map +1 -1
- package/dist/canvas/sceneAdapter.js +7 -5
- package/dist/canvas/sceneAdapter.js.map +1 -1
- package/dist/canvas/sceneClipboard.js +17 -10
- package/dist/canvas/sceneClipboard.js.map +1 -1
- package/dist/canvas/scenePickReads.js +37 -0
- package/dist/canvas/scenePickReads.js.map +1 -0
- package/dist/canvas/scenePickSource.js +74 -0
- package/dist/canvas/scenePickSource.js.map +1 -0
- package/dist/canvas/sceneSlotWiring.js +9 -3
- package/dist/canvas/sceneSlotWiring.js.map +1 -1
- package/dist/canvas/sceneViewRender.js +9 -4
- package/dist/canvas/sceneViewRender.js.map +1 -1
- package/dist/canvas/shownNodes.js +15 -0
- package/dist/canvas/shownNodes.js.map +1 -0
- package/dist/canvas/surfaceContribution.js +12 -8
- package/dist/canvas/surfaceContribution.js.map +1 -1
- package/dist/canvas/useCanvasView.js +4 -2
- package/dist/canvas/useCanvasView.js.map +1 -1
- package/dist/canvas/useLayerStack.js +6 -2
- package/dist/canvas/useLayerStack.js.map +1 -1
- package/dist/canvas/useSceneAdapter.js +5 -3
- package/dist/canvas/useSceneAdapter.js.map +1 -1
- package/dist/canvas/useViewAim.js +121 -0
- package/dist/canvas/useViewAim.js.map +1 -0
- package/dist/canvas/useViewNesting.js +3 -2
- package/dist/canvas/useViewNesting.js.map +1 -1
- package/dist/canvas/useViewRegistrySurface.js +4 -2
- package/dist/canvas/useViewRegistrySurface.js.map +1 -1
- package/dist/canvas/viewMarkers.js +63 -0
- package/dist/canvas/viewMarkers.js.map +1 -0
- package/dist/canvas/viewRegistry.js +27 -1
- package/dist/canvas/viewRegistry.js.map +1 -1
- package/dist/clipboard.d.ts +2 -2
- package/dist/{clone-C3e0OTuF.d.ts → clone-qb2e1F5p.d.ts} +2 -2
- package/dist/clone.d.ts +3 -3
- package/dist/core/isPlainObject.js +2 -2
- package/dist/core/layers/layerGroup.js.map +1 -1
- package/dist/core/pages/pageEdits.js +2 -3
- package/dist/core/pages/pageEdits.js.map +1 -1
- package/dist/core/paint/meshKindLazy.js +59 -2
- package/dist/core/paint/meshKindLazy.js.map +1 -1
- package/dist/core/scene/NodeRouting.js.map +1 -1
- package/dist/core/scene/arrivalWindow.js +1 -1
- package/dist/core/scene/arrivalWindow.js.map +1 -1
- package/dist/core/scene/clipNothing.js +10 -0
- package/dist/core/scene/clipNothing.js.map +1 -0
- package/dist/core/scene/declaredFieldSetters.js +44 -0
- package/dist/core/scene/declaredFieldSetters.js.map +1 -0
- package/dist/core/scene/depMemo.js +14 -3
- package/dist/core/scene/depMemo.js.map +1 -1
- package/dist/core/scene/dependents.js +9 -1
- package/dist/core/scene/dependents.js.map +1 -1
- package/dist/core/scene/derivedParts.js +10 -11
- package/dist/core/scene/derivedParts.js.map +1 -1
- package/dist/core/scene/documentOf.js +43 -0
- package/dist/core/scene/documentOf.js.map +1 -0
- package/dist/core/scene/effectivePose.js +44 -15
- package/dist/core/scene/effectivePose.js.map +1 -1
- package/dist/core/scene/fieldEdits.js +17 -14
- package/dist/core/scene/fieldEdits.js.map +1 -1
- package/dist/core/scene/fontReads.js +37 -0
- package/dist/core/scene/fontReads.js.map +1 -0
- package/dist/core/scene/historyForm.js +4 -4
- package/dist/core/scene/historyForm.js.map +1 -1
- package/dist/core/scene/inheritedPaint.js +97 -0
- package/dist/core/scene/inheritedPaint.js.map +1 -0
- package/dist/core/scene/kitOps.js +3 -23
- package/dist/core/scene/kitOps.js.map +1 -1
- package/dist/core/scene/kitRegistry.js +5 -0
- package/dist/core/scene/kitRegistry.js.map +1 -1
- package/dist/core/scene/layoutPass.js +1 -2
- package/dist/core/scene/layoutPass.js.map +1 -1
- package/dist/core/scene/nodeAsShown.js +72 -0
- package/dist/core/scene/nodeAsShown.js.map +1 -0
- package/dist/core/scene/nodeFnFields.js +2 -10
- package/dist/core/scene/nodeFnFields.js.map +1 -1
- package/dist/core/scene/nodeMemo.js +21 -8
- package/dist/core/scene/nodeMemo.js.map +1 -1
- package/dist/core/scene/nodeStore.js +2 -4
- package/dist/core/scene/nodeStore.js.map +1 -1
- package/dist/core/scene/pathEffects/blend.js.map +1 -1
- package/dist/core/scene/pathEffects/derive.js +10 -4
- package/dist/core/scene/pathEffects/derive.js.map +1 -1
- package/dist/core/scene/pathEffects/effects.js +3 -1
- package/dist/core/scene/pathEffects/effects.js.map +1 -1
- package/dist/core/scene/pathEffects/foundHidden.js +35 -0
- package/dist/core/scene/pathEffects/foundHidden.js.map +1 -0
- package/dist/core/scene/pathEffects/textAlong.js +95 -0
- package/dist/core/scene/pathEffects/textAlong.js.map +1 -0
- package/dist/core/scene/plyStacks.js +89 -0
- package/dist/core/scene/plyStacks.js.map +1 -0
- package/dist/core/scene/poseHold.js +42 -24
- package/dist/core/scene/poseHold.js.map +1 -1
- package/dist/core/scene/poseOverrides.js +35 -38
- package/dist/core/scene/poseOverrides.js.map +1 -1
- package/dist/core/scene/posePlies.js +59 -0
- package/dist/core/scene/posePlies.js.map +1 -0
- package/dist/core/scene/reconcileSpecs.js +6 -15
- package/dist/core/scene/reconcileSpecs.js.map +1 -1
- package/dist/core/scene/renderOrder.js +10 -4
- package/dist/core/scene/renderOrder.js.map +1 -1
- package/dist/core/scene/sameValue.js +17 -0
- package/dist/core/scene/sameValue.js.map +1 -0
- package/dist/core/scene/scene.js +3 -3
- package/dist/core/scene/scene.js.map +1 -1
- package/dist/core/scene/sceneEdits.js +8 -0
- package/dist/core/scene/sceneEdits.js.map +1 -1
- package/dist/core/scene/sceneState.js +1 -2
- package/dist/core/scene/sceneState.js.map +1 -1
- package/dist/core/scene/serialization.js +45 -9
- package/dist/core/scene/serialization.js.map +1 -1
- package/dist/core/scene/staleReplay.js +5 -2
- package/dist/core/scene/staleReplay.js.map +1 -1
- package/dist/core/scene/statedFields.js +4 -2
- package/dist/core/scene/statedFields.js.map +1 -1
- package/dist/core/scene/treeEdits.js +2 -4
- package/dist/core/scene/treeEdits.js.map +1 -1
- package/dist/core/scene/treeOrder.js +3 -1
- package/dist/core/scene/treeOrder.js.map +1 -1
- package/dist/core/scene/treeReads.js +1 -2
- package/dist/core/scene/treeReads.js.map +1 -1
- package/dist/core/scene/treeShape.js +13 -0
- package/dist/core/scene/treeShape.js.map +1 -0
- package/dist/core/scene/types.js.map +1 -1
- package/dist/core/scene/useScene.js +1 -1
- package/dist/core/scene/useScene.js.map +1 -1
- package/dist/{cornerHandles-BHuoMs1o.d.ts → cornerHandles-CNCb7aTY.d.ts} +3 -2
- package/dist/{depSchema-BpZNOv7q.d.ts → depSchema-B1RS-IJx.d.ts} +39 -18
- package/dist/devtools/handlers.js +1 -1
- package/dist/devtools/handlers.js.map +1 -1
- package/dist/devtools/protocol.js.map +1 -1
- package/dist/devtools/registry.js +4 -4
- package/dist/devtools/registry.js.map +1 -1
- package/dist/devtools-protocol.d.ts +4 -3
- package/dist/devtools.d.ts +3 -2
- package/dist/features/measure/measureContribution.js +4 -2
- package/dist/features/measure/measureContribution.js.map +1 -1
- package/dist/features/measure/measureHit.js +5 -3
- package/dist/features/measure/measureHit.js.map +1 -1
- package/dist/features/measure/measurement.js +1 -1
- package/dist/features/measure/measurement.js.map +1 -1
- package/dist/features/modes/modeLayers.js +14 -7
- package/dist/features/modes/modeLayers.js.map +1 -1
- package/dist/features/modes/modeTriggers.js +10 -6
- package/dist/features/modes/modeTriggers.js.map +1 -1
- package/dist/features/pathEffects/effectSources.js +69 -0
- package/dist/features/pathEffects/effectSources.js.map +1 -0
- package/dist/features/pathEffects/readSource.js +18 -2
- package/dist/features/pathEffects/readSource.js.map +1 -1
- package/dist/features/pathEffects/textItems.js +53 -0
- package/dist/features/pathEffects/textItems.js.map +1 -0
- package/dist/features/pathEffects/useEffectSourcesLayer.js +53 -0
- package/dist/features/pathEffects/useEffectSourcesLayer.js.map +1 -0
- package/dist/features/paths/editablePath.js +1 -1
- package/dist/features/paths/editablePath.js.map +1 -1
- package/dist/features/paths/pathEditState.js +5 -2
- package/dist/features/paths/pathEditState.js.map +1 -1
- package/dist/features/paths/pathSnap/sceneIndex.js +1 -1
- package/dist/features/paths/pathSnap/sceneIndex.js.map +1 -1
- package/dist/features/selection/enteredGroupFrame.js +65 -0
- package/dist/features/selection/enteredGroupFrame.js.map +1 -0
- package/dist/features/selection/enteredGroupScope.js +44 -0
- package/dist/features/selection/enteredGroupScope.js.map +1 -0
- package/dist/features/text/sceneTextDrafts.js +64 -0
- package/dist/features/text/sceneTextDrafts.js.map +1 -0
- package/dist/features/text/textHitAt.js +34 -3
- package/dist/features/text/textHitAt.js.map +1 -1
- package/dist/features/text/useSceneTextEdit.js +23 -19
- package/dist/features/text/useSceneTextEdit.js.map +1 -1
- package/dist/features/viewports/aim.js +105 -0
- package/dist/features/viewports/aim.js.map +1 -0
- package/dist/features/viewports/viewMarker.js +82 -0
- package/dist/features/viewports/viewMarker.js.map +1 -0
- package/dist/features/viewports/viewMarkerDrag.js +55 -0
- package/dist/features/viewports/viewMarkerDrag.js.map +1 -0
- package/dist/index.d.ts +709 -258
- package/dist/index.js +33 -12
- package/dist/interactions/actions/admitsChild.js +11 -0
- package/dist/interactions/actions/admitsChild.js.map +1 -0
- package/dist/interactions/actions/booleans/booleans.js +2 -1
- package/dist/interactions/actions/booleans/booleans.js.map +1 -1
- package/dist/interactions/actions/booleans/operands.js +6 -5
- package/dist/interactions/actions/booleans/operands.js.map +1 -1
- package/dist/interactions/actions/clipboard/action.js +27 -17
- package/dist/interactions/actions/clipboard/action.js.map +1 -1
- package/dist/interactions/actions/defaults/anchorEditing.js +44 -23
- package/dist/interactions/actions/defaults/anchorEditing.js.map +1 -1
- package/dist/interactions/actions/defaults/anchorJoin.js +12 -6
- package/dist/interactions/actions/defaults/anchorJoin.js.map +1 -1
- package/dist/interactions/actions/defaults/bendSegment.js +7 -4
- package/dist/interactions/actions/defaults/bendSegment.js.map +1 -1
- package/dist/interactions/actions/defaults/cancelGesture.js +11 -8
- package/dist/interactions/actions/defaults/cancelGesture.js.map +1 -1
- package/dist/interactions/actions/defaults/contextMenu.js +33 -11
- package/dist/interactions/actions/defaults/contextMenu.js.map +1 -1
- package/dist/interactions/actions/defaults/createPaintAction.js +5 -2
- package/dist/interactions/actions/defaults/createPaintAction.js.map +1 -1
- package/dist/interactions/actions/defaults/delete.js +28 -14
- package/dist/interactions/actions/defaults/delete.js.map +1 -1
- package/dist/interactions/actions/defaults/duplicate.js +11 -8
- package/dist/interactions/actions/defaults/duplicate.js.map +1 -1
- package/dist/interactions/actions/defaults/enterGroup.js +88 -0
- package/dist/interactions/actions/defaults/enterGroup.js.map +1 -0
- package/dist/interactions/actions/defaults/enterPathEdit.js +20 -10
- package/dist/interactions/actions/defaults/enterPathEdit.js.map +1 -1
- package/dist/interactions/actions/defaults/enterTextEdit.js +1 -1
- package/dist/interactions/actions/defaults/enterTextEdit.js.map +1 -1
- package/dist/interactions/actions/defaults/escape.js +11 -8
- package/dist/interactions/actions/defaults/escape.js.map +1 -1
- package/dist/interactions/actions/defaults/exitPathEdit.js +7 -4
- package/dist/interactions/actions/defaults/exitPathEdit.js.map +1 -1
- package/dist/interactions/actions/defaults/group.js +26 -20
- package/dist/interactions/actions/defaults/group.js.map +1 -1
- package/dist/interactions/actions/defaults/ingest.js +10 -4
- package/dist/interactions/actions/defaults/ingest.js.map +1 -1
- package/dist/interactions/actions/defaults/insertPathAnchor.js +7 -4
- package/dist/interactions/actions/defaults/insertPathAnchor.js.map +1 -1
- package/dist/interactions/actions/defaults/nudge.js +8 -2
- package/dist/interactions/actions/defaults/nudge.js.map +1 -1
- package/dist/interactions/actions/defaults/pathEditTools.js +11 -8
- package/dist/interactions/actions/defaults/pathEditTools.js.map +1 -1
- package/dist/interactions/actions/defaults/pinchZoom.js +7 -4
- package/dist/interactions/actions/defaults/pinchZoom.js.map +1 -1
- package/dist/interactions/actions/defaults/reorder.js +24 -6
- package/dist/interactions/actions/defaults/reorder.js.map +1 -1
- package/dist/interactions/actions/defaults/selectAll.js +15 -8
- package/dist/interactions/actions/defaults/selectAll.js.map +1 -1
- package/dist/interactions/actions/defaults/selectDeep.js +35 -0
- package/dist/interactions/actions/defaults/selectDeep.js.map +1 -0
- package/dist/interactions/actions/defaults/setFill.js +7 -3
- package/dist/interactions/actions/defaults/setFill.js.map +1 -1
- package/dist/interactions/actions/defaults/setFillOpacity.js +1 -1
- package/dist/interactions/actions/defaults/setStroke.js +12 -11
- package/dist/interactions/actions/defaults/setStroke.js.map +1 -1
- package/dist/interactions/actions/defaults/setStrokeOpacity.js +1 -1
- package/dist/interactions/actions/defaults/toolActivate.js +7 -1
- package/dist/interactions/actions/defaults/toolActivate.js.map +1 -1
- package/dist/interactions/actions/defaults/toolResetToDefault.js +7 -4
- package/dist/interactions/actions/defaults/toolResetToDefault.js.map +1 -1
- package/dist/interactions/actions/defaults/undoRedo.js +19 -13
- package/dist/interactions/actions/defaults/undoRedo.js.map +1 -1
- package/dist/interactions/actions/defaults/viewportWheelPan.js +16 -7
- package/dist/interactions/actions/defaults/viewportWheelPan.js.map +1 -1
- package/dist/interactions/actions/defaults/viewportZoom.js +24 -6
- package/dist/interactions/actions/defaults/viewportZoom.js.map +1 -1
- package/dist/interactions/actions/drawnBoxes.js +2 -1
- package/dist/interactions/actions/drawnBoxes.js.map +1 -1
- package/dist/interactions/actions/edit-anchors/action.js +7 -4
- package/dist/interactions/actions/edit-anchors/action.js.map +1 -1
- package/dist/interactions/actions/flip/action.js +8 -2
- package/dist/interactions/actions/flip/action.js.map +1 -1
- package/dist/interactions/actions/insert/action.js +1 -0
- package/dist/interactions/actions/insert/action.js.map +1 -1
- package/dist/interactions/actions/insert/parent.js +7 -5
- package/dist/interactions/actions/insert/parent.js.map +1 -1
- package/dist/interactions/actions/insert/placeAction.js +3 -2
- package/dist/interactions/actions/insert/placeAction.js.map +1 -1
- package/dist/interactions/actions/insert/repositionAction.js +2 -1
- package/dist/interactions/actions/insert/repositionAction.js.map +1 -1
- package/dist/interactions/actions/insert/session.js +2 -2
- package/dist/interactions/actions/insert/session.js.map +1 -1
- package/dist/interactions/actions/move/action.js +7 -4
- package/dist/interactions/actions/move/action.js.map +1 -1
- package/dist/interactions/actions/move/commit/reparent.js +1 -1
- package/dist/interactions/actions/move/commit/reparent.js.map +1 -1
- package/dist/interactions/actions/move/gestureAdapter.js +6 -7
- package/dist/interactions/actions/move/gestureAdapter.js.map +1 -1
- package/dist/interactions/actions/move/layout/exits.js +1 -1
- package/dist/interactions/actions/move/layout/exits.js.map +1 -1
- package/dist/interactions/actions/move/session.js +4 -4
- package/dist/interactions/actions/move/session.js.map +1 -1
- package/dist/interactions/actions/outlines/createOutlinesAction.js +8 -5
- package/dist/interactions/actions/outlines/createOutlinesAction.js.map +1 -1
- package/dist/interactions/actions/outlines/outlineStroke.js +5 -3
- package/dist/interactions/actions/outlines/outlineStroke.js.map +1 -1
- package/dist/interactions/actions/pathCommands/cutJoin.js +8 -5
- package/dist/interactions/actions/pathCommands/cutJoin.js.map +1 -1
- package/dist/interactions/actions/pathCommands/pathNodes.js +14 -5
- package/dist/interactions/actions/pathCommands/pathNodes.js.map +1 -1
- package/dist/interactions/actions/resize/cornerHandles.js +2 -1
- package/dist/interactions/actions/resize/cornerHandles.js.map +1 -1
- package/dist/interactions/actions/selectionSubtree.js +12 -7
- package/dist/interactions/actions/selectionSubtree.js.map +1 -1
- package/dist/interactions/actions/transform-again/action.js +8 -5
- package/dist/interactions/actions/transform-again/action.js.map +1 -1
- package/dist/interactions/gestures/thresholdDrag/thresholdDrag.js +14 -2
- package/dist/interactions/gestures/thresholdDrag/thresholdDrag.js.map +1 -1
- package/dist/json.d.ts +4 -0
- package/dist/json.js +3 -0
- package/dist/kitSettingsSchema.js +8 -1
- package/dist/kitSettingsSchema.js.map +1 -1
- package/dist/{math-CrJULaZI.d.ts → math-C_elShP_.d.ts} +7 -1
- package/dist/math.d.ts +1 -1
- package/dist/math.js +2 -1
- package/dist/move.d.ts +4 -4
- package/dist/{options-DBxEryYq.d.ts → options-ClEm3SEl.d.ts} +1 -1
- package/dist/resize.d.ts +4 -4
- package/dist/test-seams.d.ts +6 -6
- 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 +2 -1
- package/dist/tools/builtin/eyedropper/useEyedropperTool.js.map +1 -1
- package/dist/tools/builtin/hand/dragPanContribution.js +4 -1
- package/dist/tools/builtin/hand/dragPanContribution.js.map +1 -1
- package/dist/tools/builtin/hand/useHandTool.js +7 -4
- package/dist/tools/builtin/hand/useHandTool.js.map +1 -1
- package/dist/tools/builtin/image/useImageTool.js +1 -0
- package/dist/tools/builtin/image/useImageTool.js.map +1 -1
- package/dist/tools/builtin/lasso/useLassoTool.js +1 -0
- 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/measure/useMeasureTool.js +12 -5
- package/dist/tools/builtin/measure/useMeasureTool.js.map +1 -1
- package/dist/tools/builtin/pen/usePenTool.js +14 -6
- package/dist/tools/builtin/pen/usePenTool.js.map +1 -1
- package/dist/tools/builtin/pencil/usePencilTool.js +1 -0
- package/dist/tools/builtin/pencil/usePencilTool.js.map +1 -1
- package/dist/tools/builtin/polygon/usePolygonTool.js +13 -4
- package/dist/tools/builtin/polygon/usePolygonTool.js.map +1 -1
- package/dist/tools/builtin/pressTarget.js +22 -0
- package/dist/tools/builtin/pressTarget.js.map +1 -0
- 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 +6 -5
- package/dist/tools/builtin/select/adapterPointQuery.js.map +1 -1
- package/dist/tools/builtin/select/collapseDeferred.js +40 -0
- package/dist/tools/builtin/select/collapseDeferred.js.map +1 -0
- package/dist/tools/builtin/select/groupEntry.js +82 -0
- package/dist/tools/builtin/select/groupEntry.js.map +1 -0
- package/dist/tools/builtin/select/pressDecision.js +32 -0
- package/dist/tools/builtin/select/pressDecision.js.map +1 -0
- package/dist/tools/builtin/select/selectionContributions.js +22 -13
- package/dist/tools/builtin/select/selectionContributions.js.map +1 -1
- package/dist/tools/builtin/select/useSelectTool.js +74 -55
- package/dist/tools/builtin/select/useSelectTool.js.map +1 -1
- package/dist/tools/builtin/slice/useSliceTool.js +22 -8
- package/dist/tools/builtin/slice/useSliceTool.js.map +1 -1
- package/dist/tools/builtin/star/useStarTool.js +13 -4
- package/dist/tools/builtin/star/useStarTool.js.map +1 -1
- package/dist/tools/builtin/sticky/stickyNode.js +4 -1
- package/dist/tools/builtin/sticky/stickyNode.js.map +1 -1
- package/dist/tools/builtin/sticky/useStickyTool.js +10 -5
- package/dist/tools/builtin/sticky/useStickyTool.js.map +1 -1
- package/dist/tools/builtin/text/useTextTool.js +3 -1
- package/dist/tools/builtin/text/useTextTool.js.map +1 -1
- package/dist/{types-7puAuVD2.d.ts → types-49uYJN3j.d.ts} +1 -1
- package/dist/{types-CniVctmk.d.ts → types-BEdRIhNc.d.ts} +272 -109
- package/dist/{types-oFeQ5VjV.d.ts → types-p2alu-R1.d.ts} +1 -1
- package/dist/util/paint.js +1 -3
- package/dist/util/paint.js.map +1 -1
- package/dist/version.js +1 -1
- package/package.json +29 -25
package/dist/index.js
CHANGED
|
@@ -6,6 +6,8 @@ import { DEFAULT_MAX_ZOOM, DEFAULT_MIN_ZOOM, ZOOM_FLOOR, normalizeZoom } from ".
|
|
|
6
6
|
import { normalizeView, viewToTransform, viewZoom } from "./core/viewport/view.js";
|
|
7
7
|
import { createViewportLayer } from "./features/viewports/viewportLayer.js";
|
|
8
8
|
import { createViewResolver } from "./features/viewports/viewResolver.js";
|
|
9
|
+
import { fitViewToBounds } from "./core/viewport/fitViewToBounds.js";
|
|
10
|
+
import { aimSpace2d, isRectAim, rectAim, viewForAim } from "./features/viewports/aim.js";
|
|
9
11
|
import { deriveParallaxView, fromPlane, planeMap, planeMatrix, planeToPlane, rectFromPlane, rectToPlane, toPlane } from "./core/viewport/parallax.js";
|
|
10
12
|
import { usePoseRun } from "./features/poseRun/usePoseRun.js";
|
|
11
13
|
import { watchDevicePixelRatio } from "./core/device/watchDevicePixelRatio.js";
|
|
@@ -13,8 +15,13 @@ import { DeviceProfileProvider, useDeviceProfile } from "./core/device/useDevice
|
|
|
13
15
|
import { useCanvasSize, useElementSize } from "./core/viewport/useCanvasSize.js";
|
|
14
16
|
import { IDENTITY_POSE_COMPOSITION, composeWorldPose, composesFrames, rebaseLocalPose } from "./core/scene/composeFrame.js";
|
|
15
17
|
import { RECT_POSE_COMPOSITION, RIGID_POSE_COMPOSITION, composeRectPose, composeRigidPose, decomposeRectPose, decomposeRigidPose, translateRectPose, worldPoseLookup } from "./core/scene/composePose.js";
|
|
18
|
+
import { noteFontRead } from "./core/scene/fontReads.js";
|
|
16
19
|
import { isPlainObject } from "./core/isPlainObject.js";
|
|
17
|
-
import { derivedPartsOf, pathFromParts } from "./core/scene/derivedParts.js";
|
|
20
|
+
import { derivedPartsOf, pathFromParts, resolvePartPaint } from "./core/scene/derivedParts.js";
|
|
21
|
+
import { sourcesOf } from "./core/scene/dependents.js";
|
|
22
|
+
import { inheritedPaintIn, inheritedPaintOf, inheritsPaint, withInheritedPaint } from "./core/scene/inheritedPaint.js";
|
|
23
|
+
import { documentOf } from "./core/scene/documentOf.js";
|
|
24
|
+
import { nodeAsShown } from "./core/scene/nodeAsShown.js";
|
|
18
25
|
import { definesFrame, derivedDepOf, derivedPose, documentDepOf, documentPose, effectivePose } from "./core/scene/effectivePose.js";
|
|
19
26
|
import { useNodeOverlayFrame } from "./core/viewport/useNodeOverlayFrame.js";
|
|
20
27
|
import { screenToWorld, worldToScreen } from "./core/viewport/viewTransform.js";
|
|
@@ -25,7 +32,6 @@ import { startThresholdDrag } from "./interactions/gestures/thresholdDrag/thresh
|
|
|
25
32
|
import { ANCHOR_HIT_BASE_PX, HANDLE_BASE_PX, ROTATION_HANDLE_BASE_PX } from "./core/device/targets.js";
|
|
26
33
|
import { COARSE_TARGET_SCALE, DEFAULT_DEVICE_PROFILE, resolveDeviceProfile } from "./core/device/index.js";
|
|
27
34
|
import { fitToBounds, fitZoom } from "./core/viewport/fitToBounds.js";
|
|
28
|
-
import { fitViewToBounds } from "./core/viewport/fitViewToBounds.js";
|
|
29
35
|
import { adjacentPage, layoutPages, pageAt, pageHolding, pageName, pageOfBounds, pagesBounds } from "./core/pages/pages.js";
|
|
30
36
|
import { pagesLayer } from "./core/pages/pagesLayer.js";
|
|
31
37
|
import { fitViewToPage, pageInView } from "./core/pages/fitViewToPage.js";
|
|
@@ -50,14 +56,14 @@ import { useSelection } from "./core/selection/useSelection.js";
|
|
|
50
56
|
import { pathPoseDescriptor } from "./core/geometry/pathPoseDescriptor.js";
|
|
51
57
|
import { AUTO_POSE_DESCRIPTOR, isPathLike, isRectPose } from "./core/geometry/autoPoseDescriptor.js";
|
|
52
58
|
import { paintsLayer } from "./core/selection/chromeState.js";
|
|
53
|
-
import {
|
|
54
|
-
import { DEFAULT_FILL_COLOR, DEFAULT_PALETTE, DEFAULT_SHAPE_FILL, DEFAULT_STROKE_COLOR, GHOST_STROKE, cycleFill, paintAlpha, paintWithAlpha, paintWithColor, solid, strokeOf, strokeWith } from "./util/paint.js";
|
|
59
|
+
import { paintAbove, withInheritedPaintBounds, withInheritedPaints } from "./canvas/inheritedPaints.js";
|
|
55
60
|
import { pathPaintOf } from "./canvas/nodeShapes/nodePaint.js";
|
|
56
61
|
import { OVERLAY_ROLE_STROKES } from "./canvas/overlayRoleStrokes.js";
|
|
57
62
|
import { measureBetween, measureEndsOf, measureNode, measurePose, measurementOf } from "./features/measure/measurement.js";
|
|
58
63
|
import { textBoxOf } from "./canvas/nodeShapes/textPainter.js";
|
|
59
64
|
import { DEFAULT_INK, findNodeShape, findShapeBounds, findShapeInk, findShapeSilhouette, getNodeShapes, registerNodeShape, shapeCoversPoint } from "./canvas/NodeShape.js";
|
|
60
65
|
import { drawnAABBOf, drawnBoundsOf, findShapeDrawnBounds, inkExtentsOf } from "./canvas/drawnBounds.js";
|
|
66
|
+
import { VIEW_MARKER_DEFAULT_STYLE, VIEW_MARKER_HIT_SLOP_PX, createViewMarkerLayer, grabViewMarker } from "./features/viewports/viewMarker.js";
|
|
61
67
|
import { CORNER_ANCHORS, EDGE_HANDLE_MIN_RADII, RESIZE_HANDLE_ANCHORS, cornerPoint, cornerResizeHandles, fixedCornerOf, handlePoint, hitCornerHandle, isCornerHandle, resizeHandlesFor } from "./interactions/actions/resize/cornerHandles.js";
|
|
62
68
|
import { annulusSemiAxes, hitAffordanceRegions, pointRegionFrame } from "./affordances/hitAffordanceRegions.js";
|
|
63
69
|
import { createCornerResizeAffordance } from "./affordances/cornerResize.js";
|
|
@@ -66,17 +72,22 @@ import { enumerateAnchors, withCoord } from "./interactions/actions/edit-anchors
|
|
|
66
72
|
import { PATH_ANCHOR_CHROME_ID, createPathAnchorAffordances } from "./affordances/pathAnchors.js";
|
|
67
73
|
import { insertPreviewExtent } from "./canvas/insertPreviewExtent.js";
|
|
68
74
|
import { CanvasView } from "./canvas/CanvasView.js";
|
|
75
|
+
import { ViewMarker } from "./canvas/ViewMarker.js";
|
|
76
|
+
import { VIEW_MARKER_DRAG, createViewMarkerContribution, viewMarkerDragAction } from "./features/viewports/viewMarkerDrag.js";
|
|
69
77
|
import { CANVAS_CONTEXT_ATTRIBUTES } from "./canvas/contextAttributes.js";
|
|
70
78
|
import { releaseCanvasRenderer } from "./canvas/canvasRenderer.js";
|
|
71
79
|
import { getPaintKind, listGradientKinds, listPaintKinds, paintKindOf, paintKindRegistry, patternFamily, registerPaintKind, registerPaintKindLoader, seedTile, switchGradientKind } from "./core/paint/paintKinds.js";
|
|
72
80
|
import { rotateAroundAABBCenter } from "./canvas/poseRotation.js";
|
|
73
81
|
import { isOverChildren, overChildren, splitOverChildren } from "./canvas/overChildren.js";
|
|
82
|
+
import { clipOutline } from "./canvas/ownClip.js";
|
|
74
83
|
import { asNodeId } from "./core/scene/types.js";
|
|
75
84
|
import { annotationLayerIds, isAnnotationLayer, isAnnotationNode } from "./core/scene/annotation.js";
|
|
76
85
|
import { hidesSubtree, isNodeHidden, isNodeLocked, nodeGates } from "./core/scene/nodeGates.js";
|
|
77
86
|
import { drawnBoundsScene } from "./canvas/derivedPath.js";
|
|
87
|
+
import { statedFields } from "./core/scene/statedFields.js";
|
|
78
88
|
import { applyOpsTo, dispatchApplyBatch } from "./core/applyOps.js";
|
|
79
89
|
import { createPoseTarget, poseAxes, scenePoseTarget } from "./animation/poseTarget.js";
|
|
90
|
+
import { hasChildren, isLeaf } from "./core/scene/treeShape.js";
|
|
80
91
|
import { sceneToAdapter } from "./canvas/sceneAdapter.js";
|
|
81
92
|
import { defaultDrawOne, defaultPaintBounds } from "./canvas/defaultDrawOne.js";
|
|
82
93
|
import { buildSceneViewCommands, renderSceneToCanvas } from "./canvas/sceneViewRender.js";
|
|
@@ -151,7 +162,10 @@ import { createSetSelectionOp } from "./core/ops/select.js";
|
|
|
151
162
|
import { selectFromLasso } from "./interactions/actions/lasso-select/behaviors/selectFromLasso.js";
|
|
152
163
|
import { lassoSelectAction } from "./interactions/actions/lasso-select/action.js";
|
|
153
164
|
import { sliceAction } from "./interactions/actions/defaults/slice.js";
|
|
154
|
-
import {
|
|
165
|
+
import { textAlongParts } from "./core/scene/pathEffects/textAlong.js";
|
|
166
|
+
import { PATH_EFFECT, createPathEffectDerivations, pathEffectNode, pathEffectOf, pathEffectParts, registeredPathEffects } from "./core/scene/pathEffects/derive.js";
|
|
167
|
+
import { effectSourceFor, hiddenSourcesTakenWith, sourcesHiddenBy } from "./features/pathEffects/effectSources.js";
|
|
168
|
+
import { commitDeleteToScene, createDeleteAction, deleteAction, hiddenSourceDeleteOps } from "./interactions/actions/defaults/delete.js";
|
|
155
169
|
import { makePinchZoomAction, pinchZoomAction } from "./interactions/actions/defaults/pinchZoom.js";
|
|
156
170
|
import { WEASEL_CLIPBOARD_MIME, WEASEL_CLIPBOARD_MIME_WEB, buildWeaselClipboardText, embedWeaselMetadataInSvg, extractWeaselClipboardFromSvg, parseWeaselClipboardText, sniffWeaselClipboardText } from "./interactions/actions/clipboard/wireFormat.js";
|
|
157
171
|
import { DEBUG_FEATURES } from "./debug/features.js";
|
|
@@ -165,7 +179,11 @@ import { canBringForward, canSendBackward } from "./core/ops/reorder/algorithms.
|
|
|
165
179
|
import { createSetChildOrderOp } from "./core/ops/reorder/setChildOrder.js";
|
|
166
180
|
import { createMoveToIndexOp, createReorderOp } from "./core/ops/reorder/index.js";
|
|
167
181
|
import { arrangePreset } from "./canvas/SceneCanvas/presets/arrange.js";
|
|
182
|
+
import { CLIP_NOTHING, clipNothing } from "./core/scene/clipNothing.js";
|
|
168
183
|
import { UNION_OF_CHILDREN, unionOfChildren } from "./core/scene/kitRegistry.js";
|
|
184
|
+
import { createEnteredGroup, useEnteredGroup } from "./canvas/deps/enteredGroup.js";
|
|
185
|
+
import { getAlpha01, mergeAlphaFromPrev, toHex8, withAlpha01 } from "./util/color.js";
|
|
186
|
+
import { DEFAULT_FILL_COLOR, DEFAULT_PALETTE, DEFAULT_STROKE_COLOR, GHOST_STROKE, cycleFill, paintAlpha, paintWithAlpha, paintWithColor, solid, strokeOf, strokeWith } from "./util/paint.js";
|
|
169
187
|
import { editPreset } from "./canvas/SceneCanvas/presets/edit.js";
|
|
170
188
|
import { ingestPreset } from "./canvas/SceneCanvas/presets/ingest.js";
|
|
171
189
|
import { makeHandleCommand } from "./interactions/actions/defaults/anchorHandles.js";
|
|
@@ -222,7 +240,7 @@ import { measureAt, measureEndSource } from "./features/measure/measureHit.js";
|
|
|
222
240
|
import { MEASURE_ACTION_IDS } from "./features/measure/actionIds.js";
|
|
223
241
|
import { useMeasureTool } from "./tools/builtin/measure/useMeasureTool.js";
|
|
224
242
|
import { isToolSet, toolIdsOf, toolSet, toolSetHas, withoutTools } from "./tools/index.js";
|
|
225
|
-
import { ActionDisabledReason, ActionsProvider, ActiveToolContextProvider, ActiveToolContextProviderIfRoot, DepRegistryProvider, InputScope, Yoke, actionBindings, actionCursor, actionItemTitle, actionItems, actionSettingsParams, actionShortcuts, actionsTagged, bodyPredicate, buildDepsFromRequires, createDepRegistry, createDispatcher, deleteScratch, evaluateActive, evaluateEnabled, getScratch, heldKeySpec, hitPredicate, keySpecShortcut, keysHeld, matchActionItem, overlaysOf, readActionSettings, resolveParams, resolveSchemaMenu, roleReader, scratchKey, setScratch, specificity, taggedActionItems, tuneAction, useAction, useActionsRegistry, useActiveToolContext, useCommand, useDepRegistry, useDepSource, useGestureDispatcher, useLatest, useMenuHost, useMenus, useOngoingAction, useOptionalActiveToolContext, useOptionalDepRegistry, useYoke } from "./barrel/routing.js";
|
|
243
|
+
import { ActionDisabledReason, ActionsProvider, ActiveToolContextProvider, ActiveToolContextProviderIfRoot, DepRegistryProvider, InputScope, Yoke, actionBindings, actionCursor, actionItemTitle, actionItems, actionSettingsParams, actionShortcuts, actionsTagged, bindingId, bodyPredicate, buildDepsFromRequires, createDepRegistry, createDispatcher, deleteScratch, evaluateActive, evaluateEnabled, getScratch, heldKeySpec, hitPredicate, keySpecShortcut, keysHeld, matchActionItem, modifierStateOf, overlaysOf, readActionSettings, resolveBindingOverrides, resolveParams, resolveSchemaMenu, roleReader, scratchKey, setScratch, specificity, taggedActionItems, tuneAction, useAction, useActionsRegistry, useActiveToolContext, useCommand, useDepRegistry, useDepSource, useGestureDispatcher, useLatest, useMenuHost, useMenus, useOngoingAction, useOpenKeymap, useOptionalActiveToolContext, useOptionalDepRegistry, useYoke } from "./barrel/routing.js";
|
|
226
244
|
import { PAINTED_CURSOR_LAYER_ID, createPaintedCursorLayer } from "./canvas/paintedCursorLayer.js";
|
|
227
245
|
import { hostAnchorCss, hostAnchorRect } from "./canvas/hostAnchor.js";
|
|
228
246
|
import { useHostAnchor } from "./canvas/useHostAnchor.js";
|
|
@@ -250,7 +268,9 @@ import { createArrangeOp } from "./core/ops/arrange.js";
|
|
|
250
268
|
import { createHistory } from "./core/ops/createHistory.js";
|
|
251
269
|
import { SCENE_HISTORY_FORM } from "./core/scene/historyForm.js";
|
|
252
270
|
import { sceneSelectionStore } from "./core/scene/sceneSelection.js";
|
|
271
|
+
import { nodeKindOf, specsFromSerialized } from "./core/scene/serialization.js";
|
|
253
272
|
import { createScene, sceneFromJSON } from "./core/scene/scene.js";
|
|
273
|
+
import { publishPreviews } from "./canvas/publishPreviews.js";
|
|
254
274
|
import { actionIs, always, and, canHover, capabilityAll, capabilityIn, capabilityIs, capabilityNot, coarsePointer, cond, editingAnchors, focused, gesturing, hovering, hoveringSelected, modeIn, modeIs, modeNot, modifierHeld, multiActive, never, not, or, selectionAtLeast, selectionEmpty, selectionIs, when, zoomAtLeast } from "./features/chrome-caps/conditions.js";
|
|
255
275
|
import { SCENE_CANVAS_FEATURES } from "./canvas/SceneCanvas/features.js";
|
|
256
276
|
import { BUILTIN_TOOLS, BUILTIN_TOOL_IDS, DRAW_TOOLS, PAGE_TOOLS, SELECT_TOOLS, SHAPE_TOOLS, TYPE_TOOLS, VIEW_TOOLS } from "./canvas/SceneCanvas/builtinToolSets.js";
|
|
@@ -259,6 +279,8 @@ import { DEFAULT_OVERLAY_STYLE } from "./features/paths/anchorMarkers.js";
|
|
|
259
279
|
import { createPathEditingOverlayLayer } from "./features/paths/pathEditingOverlayLayer.js";
|
|
260
280
|
import { resolveOverlays } from "./interactions/actions/resolveOverlays.js";
|
|
261
281
|
import { flattenPreviews, resolvePreviews } from "./interactions/actions/resolvePreviews.js";
|
|
282
|
+
import { readEffectSource } from "./features/pathEffects/readSource.js";
|
|
283
|
+
import { useEffectSourcesLayer } from "./features/pathEffects/useEffectSourcesLayer.js";
|
|
262
284
|
import { createDepartures } from "./animation/departures.js";
|
|
263
285
|
import { bindPoseTransition, glidesByDefault, usePoseTransition } from "./animation/poseTransition.js";
|
|
264
286
|
import { composeSelectionPose } from "./features/selection/selectionPose.js";
|
|
@@ -271,6 +293,7 @@ import { resolveVisibility } from "./features/chrome-caps/resolve.js";
|
|
|
271
293
|
import { buildChromeCtx } from "./features/chrome-caps/buildChromeCtx.js";
|
|
272
294
|
import { useHoverTracking } from "./features/chrome-caps/useHoverTracking.js";
|
|
273
295
|
import { ALWAYS, DEFAULT_ALLOWED_CAPABILITIES, NEVER, buildRuleCtx, describeRule, evaluate } from "./features/chrome-caps/index.js";
|
|
296
|
+
import { createEnteredGroupScope } from "./features/selection/enteredGroupScope.js";
|
|
274
297
|
import { useSceneAdapter } from "./canvas/useSceneAdapter.js";
|
|
275
298
|
import { createNodeRouting, routeKind } from "./core/scene/NodeRouting.js";
|
|
276
299
|
import { SceneCanvas } from "./canvas/SceneCanvas.js";
|
|
@@ -290,10 +313,10 @@ import { createTextLayer } from "./features/text/textLayer.js";
|
|
|
290
313
|
import { useSceneTextEdit } from "./features/text/useSceneTextEdit.js";
|
|
291
314
|
import { TEXT_EDIT_FONT_HOLD, TextOutlinesError, charOffsetToDomPosition, domPositionToCharOffset, domToRuns, loadTextOutlines, runsToDom, textCommand, textCommandFromPose, textCommandFromRuns, textToPath, textToPathsByPaint, useTextEdit } from "./features/text/index.js";
|
|
292
315
|
import { useCreateOutlinesAdapter } from "./interactions/actions/outlines/useCreateOutlinesAdapter.js";
|
|
293
|
-
import { DEFAULT_DECORATION_METRICS, DEFAULT_TEXT_STYLE, MARKDOWN_RUN_GRAMMAR, SCRIPT_METRICS, SMALL_CAPS_SCALE, applyStyleToRange, cachedLayoutRuns, cachedPaintRuns, caretIndexAt, createMarkdownRenderer, decorationMetrics, defaultLabelTextRenderer, effectiveRangeStyle, fitTextPose, fontString, isBoldWeight, isSmallCapsLetter, isTextData, layoutMarkdown, layoutRuns, layoutTextPose, markdownToRuns, measureText, measureTextBounds, measuredWidth, nodeHasFlag, numericWeight, paintRuns, paragraphDirection, patchRangeStyle, pointInTextPose, rangeWeight, registerBidi, renderLabel, resolveAlign, resolveRunFace, resolveRuns, resolveTextStyle, runsToMarkdown, runsToPlainText, scriptMetrics, scriptMetricsFor, setFlagOverRange, smallCapsScale, smallCapsScaleFor, smallCapsText, styleAtRange, textLineBoxes, textPoseLayoutInput, toRuns, transformRunTexts, unboldPatch, verticalAlignOffset } from "./barrel/text.js";
|
|
316
|
+
import { DEFAULT_DECORATION_METRICS, DEFAULT_TEXT_FILL, DEFAULT_TEXT_STYLE, MARKDOWN_RUN_GRAMMAR, SCRIPT_METRICS, SMALL_CAPS_SCALE, applyStyleToRange, cachedLayoutRuns, cachedPaintRuns, caretIndexAt, createMarkdownRenderer, decorationMetrics, defaultLabelTextRenderer, effectiveRangeStyle, fitTextPose, fontString, isBoldWeight, isSmallCapsLetter, isTextData, layoutMarkdown, layoutRuns, layoutTextPose, markdownToRuns, measureText, measureTextBounds, measuredWidth, nodeHasFlag, numericWeight, paintRuns, paragraphDirection, patchRangeStyle, pointInTextPose, rangeWeight, registerBidi, renderLabel, resolveAlign, resolveRunFace, resolveRuns, resolveTextStyle, runsToMarkdown, runsToPlainText, scriptMetrics, scriptMetricsFor, setFlagOverRange, smallCapsScale, smallCapsScaleFor, smallCapsText, styleAtRange, textLineBoxes, textPoseLayoutInput, toRuns, transformRunTexts, unboldPatch, verticalAlignOffset } from "./barrel/text.js";
|
|
294
317
|
import { asPaint } from "./core/paint/paintKindEntry.js";
|
|
295
318
|
import { useGradientKinds, usePaintKind, usePaintKinds } from "./core/usePaintKinds.js";
|
|
296
|
-
import { BUILTIN_MARKERS, STROKE_DASH_RATIOS, TILE_KINDS, alignedStrokeRect, commandFill, commandPaint, commandStroke, composePatternTransform, contrastLineColor, createTilePattern, dashForStrokeStyle, decomposePatternTransform, fillInPoseFrame, fillToBoundsFrame, getMarker, gradientForBounds, gradientGeometry, hexToRgbBytes, hexToRgba, isGradientPaint, isPaintKindKnown, isPatternPaint, isSolidPaint, isTileKind, isTilePaint, lerpFill, lerpPaint, lerpStroke, listMarkers, markerInset, markerKeyOf, markerRegistry, markerSites, normalizeHex, parseColor, parseColorToRgba255, parseHexBytes, patternPlacementOf, registerMarker, resolveColor, resolveFillPattern, resolveMarkerSize, resolvePatternSpec, resolveScreenLength, resolveStrokeWidth, rgbaToHex, sampleGradientStops, scaleVertexWidth, strokeDashStyleOf, strokeInsets, tileSpecOf, trimPolyline, vertexHalfWidths, vertexWidthFromSides, warmPaintKinds, widestHalfWidth, withGradientKind } from "./barrel/paint.js";
|
|
319
|
+
import { BUILTIN_MARKERS, INHERIT, STROKE_DASH_RATIOS, TILE_KINDS, alignedStrokeRect, commandFill, commandPaint, commandStroke, composePatternTransform, contrastLineColor, contrastRatio, createTilePattern, dashForStrokeStyle, decomposePatternTransform, fillInPoseFrame, fillToBoundsFrame, getMarker, gradientForBounds, gradientGeometry, hexToRgbBytes, hexToRgba, isGradientPaint, isPaintKindKnown, isPatternPaint, isSolidPaint, isTileKind, isTilePaint, lerpFill, lerpPaint, lerpStroke, listMarkers, markerInset, markerKeyOf, markerRegistry, markerSites, normalizeHex, parseColor, parseColorToRgba255, parseHexBytes, patternPlacementOf, registerMarker, resolveColor, resolveFill, resolveFillPattern, resolveMarkerSize, resolvePatternSpec, resolveScreenLength, resolveStroke, resolveStrokeWidth, rgbaToHex, sampleGradientStops, scaleVertexWidth, strokeDashStyleOf, strokeInsets, tileSpecOf, trimPolyline, vertexHalfWidths, vertexWidthFromSides, warmPaintKinds, wcagLevels, widestHalfWidth, withGradientKind } from "./barrel/paint.js";
|
|
297
320
|
import { createSetTextOp } from "./core/ops/setText.js";
|
|
298
321
|
import { createSetDependsOnOp } from "./core/ops/setDependsOn.js";
|
|
299
322
|
import { createSetHiddenOp, createSetLockedOp } from "./core/ops/nodeFlags.js";
|
|
@@ -312,8 +335,6 @@ import { createPathLayer } from "./features/paths/pathLayer.js";
|
|
|
312
335
|
import { pathOriginProjection } from "./features/paths/originProjection.js";
|
|
313
336
|
import { CORNER_FIT_TOLERANCE, CORNER_KEYWORDS, DEFAULT_FLATTEN_TOLERANCE, PATH_C, PATH_CMD_LENGTHS, PATH_L, PATH_M, PATH_Q, PATH_SNAP_KINDS, PATH_Z, PathBuilder, asPolygonPath, averageAnchorsAt, bendAlongPath, blendPaths, boundsOfPath, circlePath, composePath, cornerAt, cornerFrameAt, cornerFrames, cornerKeywordOf, cornerShapeK, cornerShapePieces, cornerSpecAt, countPathAnchors, createPathSnapIndex, decomposePath, ellipsePath, extendToMeet, findPathSnap, flattenCubic, flattenCubicWithArcLen, flattenQuadratic, flattenQuadraticWithArcLen, hasCorners, hasOpenSubpath, intersectSegments, isCornerShape, joinAnchorsAt, lengthenOpenEnd, linePath, measurePath, nextCornerShape, offsetPath, openEndRay, openPathEnds, pathCommandCoordCount, pathContainsPoint, pathContainsPolygon, pathContainsRect, pathCrossings, pathDistanceToPoint, pathDivide, pathExclude, pathFromD, pathInPoseFrame, pathInWorld, pathIntersect, pathIntersectsPolygon, pathIntersectsRect, pathSegments, pathSignedArea, pathSubtract, pathThroughPoseFrame, pathToAnchors, pathToD, pathUnion, pointAlongPath, pointInPath, polygonFromPoints, polylineFromPoints, poseFrameInverseOf, poseFrameOf, poseLinearOf, poseRotationOf, prepareBlend, rectMarkerPath, rectPath, regularPolygonPath, remapPerAnchor, repeatAlongPath, resolveCorners, resolveCornersWithSources, reversePath, rotatePathAround, roundRectPath, scalePathToBounds, simplifyAnchorsAt, simplifyPath, smudgePath, snipPathByPolyline, snipPathsAtCrossings, splitByClosure, splitPathByPolyline, splitPathBySegment, splitSubpaths, squarePath, starPath, stationsAlongPath, strokeToPath, transformPath, translatePath, trianglesToPath, trimPathAt, unionBoundsPath, withCorner, withoutCorners, worldEditToStorage } from "./features/paths/index.js";
|
|
314
337
|
import { useAnchorFields } from "./features/paths/useAnchorFields.js";
|
|
315
|
-
import { PATH_EFFECT, createPathEffectDerivations, pathEffectNode, pathEffectOf, pathEffectParts, registeredPathEffects } from "./core/scene/pathEffects/derive.js";
|
|
316
|
-
import { readEffectSource } from "./features/pathEffects/readSource.js";
|
|
317
338
|
import { PATH_EFFECT_DERIVATIONS, withPathEffectsRegistry } from "./features/pathEffects/index.js";
|
|
318
339
|
import { useBooleans } from "./interactions/actions/booleans/useBooleans.js";
|
|
319
340
|
import { useBooleansAdapter } from "./interactions/actions/booleans/useBooleansAdapter.js";
|
|
@@ -340,7 +361,7 @@ import { EASINGS, SPRING_PRESETS, cubicBezierEasing, easeIn, easeInBack, easeInB
|
|
|
340
361
|
import { CONTROL_SELECTOR, DRAG_THRESHOLD_PX, isInControlWithin, openPointerSession, pastDragThreshold, startCarry } from "./barrel/interactions.js";
|
|
341
362
|
import { toIconRef } from "./barrel/icons.js";
|
|
342
363
|
import { mergeContributions } from "./canvas/surfaceContribution.js";
|
|
343
|
-
import { CURSOR_ANGLE_STEPS, CURSOR_MAX_CSS_PX, SPRITE_STRIDE, assembleEntries, bakeCursor, blur, canQueryLocalFonts, createCursorSink, createPaintedCursorState, createReflectable, cssFamilyName, cssFontFamily, cssFontFamilyLoading, cullDrawCommands, cursorFor, enableLocalFontOutlines, fontOutlineRegistry, fontRegistry, frameRect, hasFontOutlines, isCanvasFont, listFontOutlines, liveScope, loadFontOutlines, mat3, modeShortcutSpec, modeShortcuts, outlineStatus, refreshCanvasFont, registerCanvasFont, registerEffect, registerFont, registerFontOutlines, resolveCursor, resolveCursorTier, scopeBindings, subscribeGlyphReady, unregisterCanvasFont, unregisterFontOutlines, viewToMat3, vignette, warmFonts } from "./barrel/renderer.js";
|
|
364
|
+
import { CURSOR_ANGLE_STEPS, CURSOR_MAX_CSS_PX, KEYMAP_HOLD, SPRITE_STRIDE, assembleEntries, bakeCursor, bindingSpec, blur, canQueryLocalFonts, captureGesture, captureKey, createCursorSink, createKeymapStack, createPaintedCursorState, createReflectable, cssFamilyName, cssFontFamily, cssFontFamilyLoading, cullDrawCommands, cursorFor, describeKeymap, enableLocalFontOutlines, fontOutlineRegistry, fontRegistry, frameRect, hasFontOutlines, held, isCanvasFont, key, keySpecRoute, keymapContribution, keymapLeaderBindingId, keymapLeaderId, keymapShortcuts, listFontOutlines, liveScope, loadFontOutlines, mat3, modeShortcutSpec, modeShortcuts, outlineStatus, refreshCanvasFont, registerCanvasFont, registerEffect, registerFont, registerFontOutlines, resolveCursor, resolveCursorTier, scopeBindings, subscribeGlyphReady, unbound, unregisterCanvasFont, unregisterFontOutlines, viewToMat3, vignette, warmFonts } from "./barrel/renderer.js";
|
|
344
365
|
import { coreKitSettingsSchema } from "./kitSettingsSchema.js";
|
|
345
366
|
|
|
346
|
-
export { ALWAYS, ANCHOR_HIT_BASE_PX, ANGLE_RADIANS, AREA_SELECT_ID, AUTO_ORIGIN_PROJECTION, AUTO_POSE_DESCRIPTOR, ActionDisabledReason, ActionsProvider, ActionsProviderIfRoot, ActiveToolContextProvider, ActiveToolContextProviderIfRoot, BUILTIN_MARKERS, BUILTIN_TOOLS, BUILTIN_TOOL_IDS, CANVAS_CONTEXT_ATTRIBUTES, COARSE_TARGET_SCALE, COMPOSITE_FEATURES, CONSTRAINT_TOLERANCE, CONTROL_SELECTOR, CORNER_ANCHORS, CORNER_FIT_TOLERANCE, CORNER_KEYWORDS, CURSOR_ANGLE_STEPS, CURSOR_MAX_CSS_PX, CURVE_REPS, CanvasView, CursorCoordsHud, DEBUG_FEATURES, DEFAULT_ALLOWED_CAPABILITIES, DEFAULT_ALPHA_DECAY, DEFAULT_ALPHA_MIN, DEFAULT_DEBUG_STROKES, DEFAULT_DEBUG_THEME, DEFAULT_DECORATION_METRICS, DEFAULT_DEVICE_PROFILE, DEFAULT_FILL_COLOR, DEFAULT_FLATTEN_TOLERANCE, DEFAULT_HANDLE_SIZE, DEFAULT_INK, DEFAULT_LAYER_RETAIN, DEFAULT_MAX_ZOOM, DEFAULT_MIN_ZOOM, DEFAULT_OVERLAY_STYLE, DEFAULT_PALETTE, DEFAULT_ROTATION_HANDLE_DISTANCE, DEFAULT_SHAPE_FILL, DEFAULT_SIMPLIFY_TOLERANCE, DEFAULT_SNAP_PX, DEFAULT_STROKE_COLOR, DEFAULT_TEXT_STYLE, DEFAULT_VELOCITY_DECAY, DRAG_PAN_ID, DRAG_THRESHOLD_PX, DRAW_TOOLS, DepRegistryProvider, DepRegistryProviderIfRoot, DeviceProfileProvider, DevtoolsLabel, DrawCanvas, EASINGS, EDGE_HANDLE_MIN_RADII, FALLBACK_ACCENT, FEATURE_ACTION_IDS, GEOMETRY_BOUND_DATA, GHOST_STROKE, HANDLE_BASE_PX, HANDLE_LOCK_ROLES, IDENTITY_POSE_COMPOSITION, IMPERIAL_INCHES, INSERT_REPOSITION_BINDING, IconRegistryProvider, IconRegistryProviderIfRoot, InputScope, KIT_SHAPE_KINDS, KIT_STANDARD_ACTION_IDS, KIT_VERSIONS, LONG_PRESS_FEEDBACK_ID, LONG_PRESS_MS, LeanSceneCanvas, MARKDOWN_RUN_GRAMMAR, MEASURE_ACTION_IDS, MEASURE_AFFORDANCE_KIND, MEASURE_LAYER_ID, METRIC_MM, MIXED, MOVE_NODES_REQUIRES, NEVER, OVERLAY_ROLE_STROKES, PAGES_DOC_KEY, PAGE_TOOLS, PAINTED_CURSOR_LAYER_ID, PATHFINDER_STROKES, PATH_ANCHOR_CHROME_ID, PATH_C, PATH_CMD_LENGTHS, PATH_EFFECT, PATH_EFFECT_DERIVATIONS, PATH_GESTURE_TAGS, PATH_L, PATH_M, PATH_OVERLAY_ROLES, PATH_Q, PATH_SNAP_KINDS, PATH_SNAP_LABELS, PATH_Z, PIXELS, PathBuilder, PickHud, PointerContextProvider, PointerProviderIfRoot, RECT_ORIGIN_PROJECTION, RECT_POSE_COMPOSITION, RECT_POSE_DESCRIPTOR, RESIZE_HANDLE_ANCHORS, RIGID_POSE_COMPOSITION, ROTATED_POSE_DESCRIPTOR, ROTATION_HANDLE_BASE_PX, SCENE_CANVAS_FEATURES, SCENE_HISTORY_FORM, SCRIPT_METRICS, SELECTION_MOVE_ID, SELECTION_RESIZE_ID, SELECTION_ROTATE_ID, SELECTION_TRANSFORM_ID, SELECT_TOOLS, SHAPE_COUNT_RANGE, SHAPE_KINDS, SHAPE_TOOLS, SMALL_CAPS_SCALE, SNAP_ANGLE_STEP, SNAP_AXIS_STEP, SNAP_ROLES, SPRING_PRESETS, SPRITE_STRIDE, STAR_RATIO_RANGE, STICKY_DEFAULTS, STROKE_DASH_RATIOS, SceneArrivalRefused, SceneCanvas, SceneViewCanvas, SelectionContextProvider, SelectionContextProviderIfRoot, TEXT_EDIT_FONT_HOLD, TILE_KINDS, TOOL_DRIVEN_ACTION_IDS, TYPE_TOOLS, TextOutlinesError, UNION_OF_CHILDREN, VERSION, VIEW_ANIMATION_KEY, VIEW_TOOLS, WEASEL_CLIPBOARD_MIME, WEASEL_CLIPBOARD_MIME_WEB, WHEEL_ZOOM_STEP, WeaselProvider, Yoke, ZOOM_FLOOR, aabbCenter, accentColorOf, actionBindings, actionCursor, actionIs, actionItemTitle, actionItems, actionSettingsParams, actionShortcuts, actionsTagged, activatesFocusedControl, addPage, adjacentPage, alignDeltaFor, alignTargetBounds, alignedStrokeRect, always, anchorEditWouldChange, and, animateLifecycle, animateOnSetPose, annotationLayerIds, annulusSemiAxes, applyBooleanOp, applyCreateOutlines, applyOpsTo, applyOutlineStroke, applyStyleToRange, areaSelectAction, areaSelectContribution, arrangePreset, asNodeId, asPaint, asPolygonPath, assembleEntries, assertSnapSourceIds, averageAnchorsAt, axisAlignedBounds, axisUnits, axisZoomFactor, bakeCursor, bendAlongPath, bezierCubic, bezierQuadratic, bindPoseTransition, bindRig, bitmapSrc, blendPaths, blur, bodyPredicate, boundsOfPath, buildChromeCtx, buildDebugOverlayCommands, buildDepsFromRequires, buildRuleCtx, buildSceneViewCommands, buildWeaselClipboardText, cachedLayoutRuns, cachedPaintRuns, canBringForward, canHover, canQueryLocalFonts, canSendBackward, capabilityAll, capabilityIn, capabilityIs, capabilityNot, caretIndexAt, carriedDescendants, charOffsetToDomPosition, checkRequirements, circlePath, clampShapeGenerator, clampView, classifyPathStorage, clearSelectionAction, clientToCanvas, clipboardCopyAction, clipboardCutAction, clipboardPasteAction, clipboardPasteEventAction, cloneAction, coarsePointer, commandFill, commandPaint, commandStroke, commitAnchorEdit, commitBooleanPieces, commitDeleteToScene, commitOps, composeAffordanceLayer, composePath, composePatternTransform, composeRectPose, composeRigidPose, composeSelectionPose, composeWorldPose, composesFrames, computeFitViewport, computeSliceOps, computeWheelAction, cond, constrainPathEdit, constraintAnchors, contextMenuAction, contrastLineColor, coreKitSettingsSchema, cornerAt, cornerFrameAt, cornerFrames, cornerKeywordOf, cornerPoint, cornerResizeHandles, cornerShapeK, cornerShapePieces, cornerSpecAt, countPathAnchors, createArrangeOp, createChildrenLayer, createCornerResizeAffordance, createCursorSink, createDebugOverlayLayer, createDebugSink, createDeleteAction, createDeleteOp, createDepRegistry, createDepartures, createDispatcher, createHistory, createInsertOp, createKeyState, createLongPressFeedbackContribution, createLongPressStore, createMarkdownRenderer, createMeasurements, createMoveToIndexOp, createNodeProperties, createNodeRouting, createPaintedCursorLayer, createPaintedCursorState, createPathAnchorAffordances, createPathEditingOverlayLayer, createPathEffectDerivations, createPathLayer, createPathOverlay, createPathSnapIndex, createPenPreviewLayer, createPointerFollower, createPointerStore, createPoseFeed, createPoseOverrides, createPoseTarget, createRasterSession, createReflectable, createReflowTransition, createReorderOp, createReparentOp, createResizeAction, createRotationAffordance, createScene, createSelectionHandlesLayer, createSelectionOutlineLayer, createSelectionOverlayLayer, createSetChildOrderOp, createSetDataOp, createSetDependsOnOp, createSetHiddenOp, createSetLayerOp, createSetLayoutOp, createSetLockedOp, createSetPathOp, createSetSelectionOp, createSetTextOp, createSimulation, createSnapOutcomeStore, createSnapReadoutLayer, createTextLayer, createTilePattern, createTransformOp, createVelocityTracker, createViewResolver, createViewportLayer, createWrittenPoseTarget, cssFamilyName, cssFontFamily, cssFontFamilyLoading, cubicBezierEasing, cullDrawCommands, currentMeasureId, cursorFor, cycleFill, dashForStrokeStyle, dataRestPath, debugSnapshotArgs, decomposePath, decomposePatternTransform, decomposeRectPose, decomposeRigidPose, decorationMetrics, defaultCommitAdapter, defaultDrawOne, defaultLabelTextRenderer, defaultNodeProperties, defaultNodeRouting, defaultPaintBounds, defaultVisibilityRules, defineTool, definesFrame, deleteAction, deleteAnchorsAction, deleteNode, deleteScratch, deleteSelectedMark, depOf, depsUnchanged, deriveParallaxView, derivedDepOf, derivedPartsOf, derivedPose, describeRule, dispatchApplyBatch, dlog, documentDepOf, documentPose, domPositionToCharOffset, domToRuns, dragPanContribution, dragPointOf, drawLayers, drawOneLayer, drawnAABBOf, drawnBoundsOf, drawnBoundsScene, dwarn, easeIn, easeInBack, easeInBounce, easeInCirc, easeInCubic, easeInElastic, easeInExpo, easeInOut, easeInOutBack, easeInOutBounce, easeInOutCirc, easeInOutCubic, easeInOutElastic, easeInOutExpo, easeInOutQuad, easeInOutQuart, easeInOutQuint, easeInOutSine, easeInQuad, easeInQuart, easeInQuint, easeInSine, easeOut, easeOutBack, easeOutBounce, easeOutCirc, easeOutCubic, easeOutElastic, easeOutExpo, easeOutQuad, easeOutQuart, easeOutQuint, easeOutSine, editAnchorsAction, editPreset, editTargetOf, editedPathSymmetries, editingAnchors, editingLayer, effectivePose, effectiveRangeStyle, ellipsePath, embedWeaselMetadataInSvg, enableLocalFontOutlines, enterTextEditAction, enumerateAnchors, evaluate, evaluateActive, evaluateEnabled, exitPathEditToolAction, extendToMeet, extractWeaselClipboardFromSvg, fillInPoseFrame, fillToBoundsFrame, findNodeShape, findPathSnap, findShapeBounds, findShapeDrawnBounds, findShapeInk, findShapeSilhouette, finishPathEditFrame, fitTextPose, fitToBounds, fitViewToBounds, fitViewToPage, fitZoom, fixedCornerOf, flattenCubic, flattenCubicWithArcLen, flattenPreviews, flattenQuadratic, flattenQuadraticWithArcLen, flipAction, focused, focusedControlOwnsKey, fontOutlineRegistry, fontRegistry, fontString, forEachCoalesced, forgetTransform, formatAxes, formatScoped, formatUnit, frameRect, fromPlane, fromRoot, gateLayer, gatherSnapCandidates, gesturePlaneReader, gestureViewReader, gesturing, getAlpha01, getImageBitmap, getMarker, getNodeShapes, getPaintKind, getScratch, getStylusData, glidesByDefault, gradientForBounds, gradientGeometry, groupNodeRouting, handlePoint, hasCorners, hasEditablePath, hasFontOutlines, hasOpenSubpath, heldKeySpec, hexToOklchDeg, hexToRgbBytes, hexToRgba, hidesSubtree, historyKey, hitAffordanceRegions, hitAnchor, hitCornerHandle, hitPredicate, hitRotationHandle, hostAnchorCss, hostAnchorRect, hovering, hoveringSelected, hslToSrgb, imageStatus, inPlane, inferredNodeProperties, inferredNodeRouting, ingestPreset, inkExtentsOf, insertAction, insertAt, insertLayer, insertPreviewExtent, insertRepositionAction, interpolateSrgb, interpolateView, intersectSegments, isAnnotationLayer, isAnnotationNode, isBoldWeight, isCanvasFont, isCornerHandle, isCornerShape, isDebugEnabled, isEditableTarget, isGradientPaint, isInControlWithin, isLayerPainted, isLayerVisible, isNodeHidden, isNodeLocked, isOverChildren, isPaintKindKnown, isPathLike, isPatternPaint, isPlainObject, isRectPose, isShapeGenerator, isSmallCapsLetter, isSolidPaint, isTextData, isTileKind, isTilePaint, isToolSet, isVectorImageSrc, joinAnchorsAt, joinPathsCommand, joinSelectedAnchors, keySpecShortcut, keysHeld, kitTextHandler, lassoSelectAction, lastTransform, layoutMarkdown, layoutPages, layoutRuns, layoutTextPose, lengthenOpenEnd, lerpColorArray, lerpFill, lerpOklab, lerpOklch, lerpPaint, lerpStroke, linePath, linear, linearSrgbToOklab, linearToSrgb, listFontOutlines, listGradientKinds, listMarkers, listPaintKinds, livePathEdit, liveScope, loadFontOutlines, loadTextOutlines, locksInForce, makeHandleCommand, makePinchZoomAction, makeViewportWheelPanAction, makeViewportZoomAction, markUnder, markdownToRuns, markerInset, markerKeyOf, markerRegistry, markerSites, mat3, matchActionItem, matchesKeyBinding, meanScale, measureAt, measureBetween, measureEndSource, measureEndsOf, measureIds, measureNode, measurePath, measurePose, measureText, measureTextBounds, measuredSegmentCommands, measuredWidth, measurementOf, measurementsContribution, mergeAlphaFromPrev, mergeContributions, minSizeOf, modeDecorationLayer, modeIn, modeIs, modeNot, modeShortcutSpec, modeShortcuts, modeTriggers, modifierHeld, momentum, moveAction, moveNodes, moveNodesOps, movePage, movePreset, multiActive, nestedHitTester, never, nextCornerShape, nextPageId, nodeGates, nodeHasFlag, nodeOutline, normalizeHex, normalizeView, normalizeZoom, not, nudgeAnchorsDownAction, nudgeAnchorsLeftAction, nudgeAnchorsRightAction, nudgeAnchorsUpAction, numericWeight, nurbs, offsetPath, oklabToLinearSrgb, oklabToOklch, oklabToSrgbU8, oklchDegToHex, oklchToOklab, onEmptyCanvas, opFactoryRegistry, openContextMenu, openEndRay, openFilePicker, openPathEnds, openPointerSession, or, outlinePreset, outlineStatus, overChildren, overlaysOf, pageAt, pageHolding, pageInView, pageMembers, pageName, pageOfBounds, pagesBounds, pagesLayer, pagesOf, paintAlpha, paintKindOf, paintKindRegistry, paintRuns, paintWithAlpha, paintWithColor, paintedLayers, paintsLayer, paletteInsertPaint, paragraphDirection, parseColor, parseColorToRgba255, parseDebugFlags, parseHexBytes, parseUnitExpr, parseWeaselClipboardText, pastDragThreshold, patchRangeStyle, pathAnchorPoints, pathCommandCoordCount, pathContainsPoint, pathContainsPolygon, pathContainsRect, pathCopy, pathCrossings, pathDistanceToPoint, pathDivide, pathEditPathOf, pathEditPreview, pathEditToolAction, pathEditToolActive, pathEffectNode, pathEffectOf, pathEffectParts, pathExclude, pathFromD, pathFromParts, pathInPoseFrame, pathInWorld, pathIntersect, pathIntersectsPolygon, pathIntersectsRect, pathNodesOf, pathOperationTags, pathOriginProjection, pathPaintOf, pathPoseDescriptor, pathSegments, pathSignedArea, pathSnapGlyph, pathSnapSource, pathSubtract, pathThroughPoseFrame, pathToAnchors, pathToD, pathUnion, pathsPreset, patternFamily, patternPlacementOf, pickTopMostHit, pillCommands, pinchZoomAction, placeAction, placeSkeleton, placedPagesOf, planJoin, planPixelRender, planeMap, planeMatrix, planeToPlane, pointAlongPath, pointInPath, pointInRotatedRect, pointInTextPose, pointRegionFrame, pointSnap, polygonFromPoints, polylineFromPoints, poseAxes, poseDescriptorForNode, poseFrameInverseOf, poseFrameOf, poseLinearOf, poseRotationOf, prepareBlend, pressureToWidth, previewBooleanOp, pxExtent, rangeWeight, rasterToPng, readActionSettings, readEffectSource, rebaseLocalPose, rebuildOp, reconcileSpecs, recordTransform, rectCorners, rectFromPlane, rectMarkerPath, rectPath, rectToPlane, refreshCanvasFont, regenerateShape, registerBidi, registerCanvasFont, registerContentHandler, registerEffect, registerFont, registerFontOutlines, registerMarker, registerNodeShape, registerOpFactory, registerPaintKind, registerPaintKindLoader, registeredOpNames, registeredPathEffects, regularPolygonPath, releaseCanvasRenderer, releaseImage, remapPerAnchor, removePage, renamePage, renderDebugSnapshot, renderLabel, renderNeeds, renderSceneToCanvas, renderSceneToPixels, repeatAlongPath, requiresAnchorSelection, reshapeOps, reshapeTo, resizeAction, resizeHandlesFor, resizePage, resizePreset, resolveAlign, resolveAxes, resolveBooleanOperands, resolveColor, resolveCorners, resolveCornersWithSources, resolveCursor, resolveCursorTier, resolveDeviceProfile, resolveEasing, resolveEditablePathOf, resolveFillPattern, resolveMarkerSize, resolveOverlays, resolveParams, resolvePatternSpec, resolvePreviews, resolveRunFace, resolveRuns, resolveSchemaMenu, resolveScoped, resolveScreenLength, resolveSpatialReference, resolveStrokeWidth, resolveTextStyle, resolveUnit, resolveUnitExpr, resolveVisibility, resolvedSnapMarks, retryImage, reversePath, rgbaToHex, rigFromNode, rigidRigApply, roleReader, rotateAction, rotateAroundAABBCenter, rotatePathAround, rotatePoint, rotatePreset, rotatedRectCorners, rotationDegreesUnit, rotationHandle, rotationSnapSource, roundRectPath, routeKind, runsToDom, runsToMarkdown, runsToPlainText, sampleGradientStops, satisfiesRange, scaleDelta, scalePathToBounds, scaleVertexWidth, sceneCarrySource, sceneClipTargets, sceneFromJSON, sceneNodeClientRect, scenePoseAdapter, scenePoseFrame, scenePoseTarget, sceneSelectionStore, sceneSharedUnitScopes, sceneToAdapter, sceneUnitScopes, scopeBindings, scopesOf, scratchKey, screenAngleOf, screenToWorld, screenTolerance, scriptMetrics, scriptMetricsFor, seedTile, segmentUnder, selectAnchorAction, selectFromLasso, selectPreset, selectedPathNodes, selectionAtLeast, selectionEmpty, selectionIs, selectionLayer, selectionMoveBindings, selectionMoveContribution, selectionResizeBindings, selectionResizeContribution, selectionRotateBindings, selectionRotateContribution, selectionTransformBindings, selectionTransformContribution, setFlagOverRange, setImageCacheBudget, setPages, setScratch, settleShapeGenerator, shapeCoversPoint, shapeGeneratorOf, shapeGeneratorPath, simplifyAnchorsAt, simplifyPath, sliceAction, slotOf, smallCapsScale, smallCapsScaleFor, smallCapsText, smudgePath, snapMods, snapSourcesFor, sniffWeaselClipboardText, snipPathByPolyline, snipPathsAtCrossings, solid, solveConstraints, solvePathConstraints, specificity, spiro, splitByClosure, splitOverChildren, splitPathByPolyline, splitPathBySegment, splitSubpaths, springPose, squarePath, srgbFloatToOklab, srgbToHsl, srgbToLinear, srgbU8ToOklab, stableStringify, staggerSpringPose, standoff, starPath, startCarry, startThresholdDrag, stationsAlongPath, stepAngles, stickyData, stickyNodeFactory, storeEditablePath, strokeDashStyleOf, strokeInsets, strokeOf, strokeRegion, strokeToPath, strokeWith, styleAtRange, subscribeGlyphReady, subscribeImageReady, subscribeToSources, swapOp, switchGradientKind, taggedActionItems, textBoxOf, textCommand, textCommandFromPose, textCommandFromRuns, textLineBoxes, textPoseLayoutInput, textToPath, textToPathsByPaint, tickedSegment, tileSpecOf, toHex8, toIconRef, toPlane, toRoot, toRuns, toolIdsOf, toolSet, toolSetHas, transformPath, transformRunTexts, translatePath, translatePoseViaDescriptor, translateRectPose, trianglesToPath, trimPathAt, trimPolyline, tuneAction, tweenPose, unboldPatch, unionAABB, unionBounds, unionBoundsPath, unionOfChildren, unionOfChildrenVia, unitScale, unplaceSkeleton, unregisterCanvasFont, unregisterFontOutlines, unsatisfiedConstraints, useAction, useActionsRegistry, useActiveToolContext, useAlign, useAnchorFields, useAnimatedReflow, useAutoCenter, useBooleans, useBooleansAdapter, useBooleansAdapterSource, useCanvasFocus, useCanvasSize, useClipboardOps, useCommand, useCreateOutlinesAdapter, useDecayLoop, useDepRegistry, useDepSource, useDeviceProfile, useDevtoolsLabel, useDistribute, useDragGesture, useDragHandle, useDragRadial, useDragRect, useDropZone, useElementSize, useEllipseTool, useEyedropperTool, useFrameClock, useGestureDispatcher, useGradientKinds, useHandTool, useHandleDrag, useHostAnchor, useHoverTracking, useIconGlyph, useIconRegistry, useIconVariant, useImageTool, useKeyModifiers, useKeyState, useKeybindings, useLassoTool, useLatest, useLineTool, useMeasureTool, useMenuHost, useMenus, useNodeOverlayFrame, useOngoingAction, useOptionalActiveToolContext, useOptionalDepRegistry, usePaintKind, usePaintKinds, usePenTool, usePencilTool, usePointerContext, usePointerPosition, usePointerStylus, usePolygonTool, usePoseDescriptorDepSource, usePoseRun, usePoseTransition, usePublishSelection, useRectTool, useResizePolicy, useRig, useRigNode, useScene, useSceneAdapter, useSceneTextEdit, useSelectTool, useSelection, useSelectionContext, useSimulation, useSliceDep, useSliceDepSource, useSliceTool, useSnapSource, useStandardActions, useStarTool, useStickyTool, useTextEdit, useTextTool, useTools, useTransformFollower, useVelocityTracker, useViewAnimation, useViewAnimationOn, useVisibleRaf, useYoke, vertexHalfWidths, vertexWidthFromSides, verticalAlignOffset, viewAxes, viewPreset, viewToMat3, viewToTransform, viewZoom, viewportDragPanAction, viewportWheelPanAction, viewportWorldRect, viewportZoomAction, vignette, visualBoundsViaDescriptor, warmFonts, warmPaintKinds, warmRender, watchDevicePixelRatio, wheelPan, wheelZoom, wheelZoomFactor, when, widestHalfWidth, withAlpha01, withCoord, withCorner, withGradientKind, withPath, withPathEffectsRegistry, withinPxBox, withinPxRadius, withoutCorners, withoutGeometryBoundData, withoutShapeGenerator, withoutTools, workspaceTintLayer, worldEditToStorage, worldPoseLookup, worldToScreen, writtenBy, zoomAt, zoomAtLeast };
|
|
367
|
+
export { ALWAYS, ANCHOR_HIT_BASE_PX, ANGLE_RADIANS, AREA_SELECT_ID, AUTO_ORIGIN_PROJECTION, AUTO_POSE_DESCRIPTOR, ActionDisabledReason, ActionsProvider, ActionsProviderIfRoot, ActiveToolContextProvider, ActiveToolContextProviderIfRoot, BUILTIN_MARKERS, BUILTIN_TOOLS, BUILTIN_TOOL_IDS, CANVAS_CONTEXT_ATTRIBUTES, CLIP_NOTHING, COARSE_TARGET_SCALE, COMPOSITE_FEATURES, CONSTRAINT_TOLERANCE, CONTROL_SELECTOR, CORNER_ANCHORS, CORNER_FIT_TOLERANCE, CORNER_KEYWORDS, CURSOR_ANGLE_STEPS, CURSOR_MAX_CSS_PX, CURVE_REPS, CanvasView, CursorCoordsHud, DEBUG_FEATURES, DEFAULT_ALLOWED_CAPABILITIES, DEFAULT_ALPHA_DECAY, DEFAULT_ALPHA_MIN, DEFAULT_DEBUG_STROKES, DEFAULT_DEBUG_THEME, DEFAULT_DECORATION_METRICS, DEFAULT_DEVICE_PROFILE, DEFAULT_FILL_COLOR, DEFAULT_FLATTEN_TOLERANCE, DEFAULT_HANDLE_SIZE, DEFAULT_INK, DEFAULT_LAYER_RETAIN, DEFAULT_MAX_ZOOM, DEFAULT_MIN_ZOOM, DEFAULT_OVERLAY_STYLE, DEFAULT_PALETTE, DEFAULT_ROTATION_HANDLE_DISTANCE, DEFAULT_SIMPLIFY_TOLERANCE, DEFAULT_SNAP_PX, DEFAULT_STROKE_COLOR, DEFAULT_TEXT_FILL, DEFAULT_TEXT_STYLE, DEFAULT_VELOCITY_DECAY, DRAG_PAN_ID, DRAG_THRESHOLD_PX, DRAW_TOOLS, DepRegistryProvider, DepRegistryProviderIfRoot, DeviceProfileProvider, DevtoolsLabel, DrawCanvas, EASINGS, EDGE_HANDLE_MIN_RADII, FALLBACK_ACCENT, FEATURE_ACTION_IDS, GEOMETRY_BOUND_DATA, GHOST_STROKE, HANDLE_BASE_PX, HANDLE_LOCK_ROLES, IDENTITY_POSE_COMPOSITION, IMPERIAL_INCHES, INHERIT, INSERT_REPOSITION_BINDING, IconRegistryProvider, IconRegistryProviderIfRoot, InputScope, KEYMAP_HOLD, KIT_SHAPE_KINDS, KIT_STANDARD_ACTION_IDS, KIT_VERSIONS, LONG_PRESS_FEEDBACK_ID, LONG_PRESS_MS, LeanSceneCanvas, MARKDOWN_RUN_GRAMMAR, MEASURE_ACTION_IDS, MEASURE_AFFORDANCE_KIND, MEASURE_LAYER_ID, METRIC_MM, MIXED, MOVE_NODES_REQUIRES, NEVER, OVERLAY_ROLE_STROKES, PAGES_DOC_KEY, PAGE_TOOLS, PAINTED_CURSOR_LAYER_ID, PATHFINDER_STROKES, PATH_ANCHOR_CHROME_ID, PATH_C, PATH_CMD_LENGTHS, PATH_EFFECT, PATH_EFFECT_DERIVATIONS, PATH_GESTURE_TAGS, PATH_L, PATH_M, PATH_OVERLAY_ROLES, PATH_Q, PATH_SNAP_KINDS, PATH_SNAP_LABELS, PATH_Z, PIXELS, PathBuilder, PickHud, PointerContextProvider, PointerProviderIfRoot, RECT_ORIGIN_PROJECTION, RECT_POSE_COMPOSITION, RECT_POSE_DESCRIPTOR, RESIZE_HANDLE_ANCHORS, RIGID_POSE_COMPOSITION, ROTATED_POSE_DESCRIPTOR, ROTATION_HANDLE_BASE_PX, SCENE_CANVAS_FEATURES, SCENE_HISTORY_FORM, SCRIPT_METRICS, SELECTION_MOVE_ID, SELECTION_RESIZE_ID, SELECTION_ROTATE_ID, SELECTION_TRANSFORM_ID, SELECT_TOOLS, SHAPE_COUNT_RANGE, SHAPE_KINDS, SHAPE_TOOLS, SMALL_CAPS_SCALE, SNAP_ANGLE_STEP, SNAP_AXIS_STEP, SNAP_ROLES, SPRING_PRESETS, SPRITE_STRIDE, STAR_RATIO_RANGE, STICKY_DEFAULTS, STROKE_DASH_RATIOS, SceneArrivalRefused, SceneCanvas, SceneViewCanvas, SelectionContextProvider, SelectionContextProviderIfRoot, TEXT_EDIT_FONT_HOLD, TILE_KINDS, TOOL_DRIVEN_ACTION_IDS, TYPE_TOOLS, TextOutlinesError, UNION_OF_CHILDREN, VERSION, VIEW_ANIMATION_KEY, VIEW_MARKER_DEFAULT_STYLE, VIEW_MARKER_DRAG, VIEW_MARKER_HIT_SLOP_PX, VIEW_TOOLS, ViewMarker, WEASEL_CLIPBOARD_MIME, WEASEL_CLIPBOARD_MIME_WEB, WHEEL_ZOOM_STEP, WeaselProvider, Yoke, ZOOM_FLOOR, aabbCenter, accentColorOf, actionBindings, actionCursor, actionIs, actionItemTitle, actionItems, actionSettingsParams, actionShortcuts, actionsTagged, activatesFocusedControl, addPage, adjacentPage, aimSpace2d, alignDeltaFor, alignTargetBounds, alignedStrokeRect, always, anchorEditWouldChange, and, animateLifecycle, animateOnSetPose, annotationLayerIds, annulusSemiAxes, applyBooleanOp, applyCreateOutlines, applyOpsTo, applyOutlineStroke, applyStyleToRange, areaSelectAction, areaSelectContribution, arrangePreset, asNodeId, asPaint, asPolygonPath, assembleEntries, assertSnapSourceIds, averageAnchorsAt, axisAlignedBounds, axisUnits, axisZoomFactor, bakeCursor, bendAlongPath, bezierCubic, bezierQuadratic, bindPoseTransition, bindRig, bindingId, bindingSpec, bitmapSrc, blendPaths, blur, bodyPredicate, boundsOfPath, buildChromeCtx, buildDebugOverlayCommands, buildDepsFromRequires, buildRuleCtx, buildSceneViewCommands, buildWeaselClipboardText, cachedLayoutRuns, cachedPaintRuns, canBringForward, canHover, canQueryLocalFonts, canSendBackward, capabilityAll, capabilityIn, capabilityIs, capabilityNot, captureGesture, captureKey, caretIndexAt, carriedDescendants, charOffsetToDomPosition, checkRequirements, circlePath, clampShapeGenerator, clampView, classifyPathStorage, clearSelectionAction, clientToCanvas, clipNothing, clipOutline, clipboardCopyAction, clipboardCutAction, clipboardPasteAction, clipboardPasteEventAction, cloneAction, coarsePointer, commandFill, commandPaint, commandStroke, commitAnchorEdit, commitBooleanPieces, commitDeleteToScene, commitOps, composeAffordanceLayer, composePath, composePatternTransform, composeRectPose, composeRigidPose, composeSelectionPose, composeWorldPose, composesFrames, computeFitViewport, computeSliceOps, computeWheelAction, cond, constrainPathEdit, constraintAnchors, contextMenuAction, contrastLineColor, contrastRatio, coreKitSettingsSchema, cornerAt, cornerFrameAt, cornerFrames, cornerKeywordOf, cornerPoint, cornerResizeHandles, cornerShapeK, cornerShapePieces, cornerSpecAt, countPathAnchors, createArrangeOp, createChildrenLayer, createCornerResizeAffordance, createCursorSink, createDebugOverlayLayer, createDebugSink, createDeleteAction, createDeleteOp, createDepRegistry, createDepartures, createDispatcher, createEnteredGroup, createEnteredGroupScope, createHistory, createInsertOp, createKeyState, createKeymapStack, createLongPressFeedbackContribution, createLongPressStore, createMarkdownRenderer, createMeasurements, createMoveToIndexOp, createNodeProperties, createNodeRouting, createPaintedCursorLayer, createPaintedCursorState, createPathAnchorAffordances, createPathEditingOverlayLayer, createPathEffectDerivations, createPathLayer, createPathOverlay, createPathSnapIndex, createPenPreviewLayer, createPointerFollower, createPointerStore, createPoseFeed, createPoseOverrides, createPoseTarget, createRasterSession, createReflectable, createReflowTransition, createReorderOp, createReparentOp, createResizeAction, createRotationAffordance, createScene, createSelectionHandlesLayer, createSelectionOutlineLayer, createSelectionOverlayLayer, createSetChildOrderOp, createSetDataOp, createSetDependsOnOp, createSetHiddenOp, createSetLayerOp, createSetLayoutOp, createSetLockedOp, createSetPathOp, createSetSelectionOp, createSetTextOp, createSimulation, createSnapOutcomeStore, createSnapReadoutLayer, createTextLayer, createTilePattern, createTransformOp, createVelocityTracker, createViewMarkerContribution, createViewMarkerLayer, createViewResolver, createViewportLayer, createWrittenPoseTarget, cssFamilyName, cssFontFamily, cssFontFamilyLoading, cubicBezierEasing, cullDrawCommands, currentMeasureId, cursorFor, cycleFill, dashForStrokeStyle, dataRestPath, debugSnapshotArgs, decomposePath, decomposePatternTransform, decomposeRectPose, decomposeRigidPose, decorationMetrics, defaultCommitAdapter, defaultDrawOne, defaultLabelTextRenderer, defaultNodeProperties, defaultNodeRouting, defaultPaintBounds, defaultVisibilityRules, defineTool, definesFrame, deleteAction, deleteAnchorsAction, deleteNode, deleteScratch, deleteSelectedMark, depOf, depsUnchanged, deriveParallaxView, derivedDepOf, derivedPartsOf, derivedPose, describeKeymap, describeRule, dispatchApplyBatch, dlog, documentDepOf, documentOf, documentPose, domPositionToCharOffset, domToRuns, dragPanContribution, dragPointOf, drawLayers, drawOneLayer, drawnAABBOf, drawnBoundsOf, drawnBoundsScene, dwarn, easeIn, easeInBack, easeInBounce, easeInCirc, easeInCubic, easeInElastic, easeInExpo, easeInOut, easeInOutBack, easeInOutBounce, easeInOutCirc, easeInOutCubic, easeInOutElastic, easeInOutExpo, easeInOutQuad, easeInOutQuart, easeInOutQuint, easeInOutSine, easeInQuad, easeInQuart, easeInQuint, easeInSine, easeOut, easeOutBack, easeOutBounce, easeOutCirc, easeOutCubic, easeOutElastic, easeOutExpo, easeOutQuad, easeOutQuart, easeOutQuint, easeOutSine, editAnchorsAction, editPreset, editTargetOf, editedPathSymmetries, editingAnchors, editingLayer, effectSourceFor, effectivePose, effectiveRangeStyle, ellipsePath, embedWeaselMetadataInSvg, enableLocalFontOutlines, enterTextEditAction, enumerateAnchors, evaluate, evaluateActive, evaluateEnabled, exitPathEditToolAction, extendToMeet, extractWeaselClipboardFromSvg, fillInPoseFrame, fillToBoundsFrame, findNodeShape, findPathSnap, findShapeBounds, findShapeDrawnBounds, findShapeInk, findShapeSilhouette, finishPathEditFrame, fitTextPose, fitToBounds, fitViewToBounds, fitViewToPage, fitZoom, fixedCornerOf, flattenCubic, flattenCubicWithArcLen, flattenPreviews, flattenQuadratic, flattenQuadraticWithArcLen, flipAction, focused, focusedControlOwnsKey, fontOutlineRegistry, fontRegistry, fontString, forEachCoalesced, forgetTransform, formatAxes, formatScoped, formatUnit, frameRect, fromPlane, fromRoot, gateLayer, gatherSnapCandidates, gesturePlaneReader, gestureViewReader, gesturing, getAlpha01, getImageBitmap, getMarker, getNodeShapes, getPaintKind, getScratch, getStylusData, glidesByDefault, grabViewMarker, gradientForBounds, gradientGeometry, groupNodeRouting, handlePoint, hasChildren, hasCorners, hasEditablePath, hasFontOutlines, hasOpenSubpath, held, heldKeySpec, hexToOklchDeg, hexToRgbBytes, hexToRgba, hiddenSourceDeleteOps, hiddenSourcesTakenWith, hidesSubtree, historyKey, hitAffordanceRegions, hitAnchor, hitCornerHandle, hitPredicate, hitRotationHandle, hostAnchorCss, hostAnchorRect, hovering, hoveringSelected, hslToSrgb, imageStatus, inPlane, inferredNodeProperties, inferredNodeRouting, ingestPreset, inheritedPaintIn, inheritedPaintOf, inheritsPaint, inkExtentsOf, insertAction, insertAt, insertLayer, insertPreviewExtent, insertRepositionAction, interpolateSrgb, interpolateView, intersectSegments, isAnnotationLayer, isAnnotationNode, isBoldWeight, isCanvasFont, isCornerHandle, isCornerShape, isDebugEnabled, isEditableTarget, isGradientPaint, isInControlWithin, isLayerPainted, isLayerVisible, isLeaf, isNodeHidden, isNodeLocked, isOverChildren, isPaintKindKnown, isPathLike, isPatternPaint, isPlainObject, isRectAim, isRectPose, isShapeGenerator, isSmallCapsLetter, isSolidPaint, isTextData, isTileKind, isTilePaint, isToolSet, isVectorImageSrc, joinAnchorsAt, joinPathsCommand, joinSelectedAnchors, key, keySpecRoute, keySpecShortcut, keymapContribution, keymapLeaderBindingId, keymapLeaderId, keymapShortcuts, keysHeld, kitTextHandler, lassoSelectAction, lastTransform, layoutMarkdown, layoutPages, layoutRuns, layoutTextPose, lengthenOpenEnd, lerpColorArray, lerpFill, lerpOklab, lerpOklch, lerpPaint, lerpStroke, linePath, linear, linearSrgbToOklab, linearToSrgb, listFontOutlines, listGradientKinds, listMarkers, listPaintKinds, livePathEdit, liveScope, loadFontOutlines, loadTextOutlines, locksInForce, makeHandleCommand, makePinchZoomAction, makeViewportWheelPanAction, makeViewportZoomAction, markUnder, markdownToRuns, markerInset, markerKeyOf, markerRegistry, markerSites, mat3, matchActionItem, matchesKeyBinding, meanScale, measureAt, measureBetween, measureEndSource, measureEndsOf, measureIds, measureNode, measurePath, measurePose, measureText, measureTextBounds, measuredSegmentCommands, measuredWidth, measurementOf, measurementsContribution, mergeAlphaFromPrev, mergeContributions, minSizeOf, modeDecorationLayer, modeIn, modeIs, modeNot, modeShortcutSpec, modeShortcuts, modeTriggers, modifierHeld, modifierStateOf, momentum, moveAction, moveNodes, moveNodesOps, movePage, movePreset, multiActive, nestedHitTester, never, nextCornerShape, nextPageId, nodeAsShown, nodeGates, nodeHasFlag, nodeKindOf, nodeOutline, normalizeHex, normalizeView, normalizeZoom, not, noteFontRead, nudgeAnchorsDownAction, nudgeAnchorsLeftAction, nudgeAnchorsRightAction, nudgeAnchorsUpAction, numericWeight, nurbs, offsetPath, oklabToLinearSrgb, oklabToOklch, oklabToSrgbU8, oklchDegToHex, oklchToOklab, onEmptyCanvas, opFactoryRegistry, openContextMenu, openEndRay, openFilePicker, openPathEnds, openPointerSession, or, outlinePreset, outlineStatus, overChildren, overlaysOf, pageAt, pageHolding, pageInView, pageMembers, pageName, pageOfBounds, pagesBounds, pagesLayer, pagesOf, paintAbove, paintAlpha, paintKindOf, paintKindRegistry, paintRuns, paintWithAlpha, paintWithColor, paintedLayers, paintsLayer, paletteInsertPaint, paragraphDirection, parseColor, parseColorToRgba255, parseDebugFlags, parseHexBytes, parseUnitExpr, parseWeaselClipboardText, pastDragThreshold, patchRangeStyle, pathAnchorPoints, pathCommandCoordCount, pathContainsPoint, pathContainsPolygon, pathContainsRect, pathCopy, pathCrossings, pathDistanceToPoint, pathDivide, pathEditPathOf, pathEditPreview, pathEditToolAction, pathEditToolActive, pathEffectNode, pathEffectOf, pathEffectParts, pathExclude, pathFromD, pathFromParts, pathInPoseFrame, pathInWorld, pathIntersect, pathIntersectsPolygon, pathIntersectsRect, pathNodesOf, pathOperationTags, pathOriginProjection, pathPaintOf, pathPoseDescriptor, pathSegments, pathSignedArea, pathSnapGlyph, pathSnapSource, pathSubtract, pathThroughPoseFrame, pathToAnchors, pathToD, pathUnion, pathsPreset, patternFamily, patternPlacementOf, pickTopMostHit, pillCommands, pinchZoomAction, placeAction, placeSkeleton, placedPagesOf, planJoin, planPixelRender, planeMap, planeMatrix, planeToPlane, pointAlongPath, pointInPath, pointInRotatedRect, pointInTextPose, pointRegionFrame, pointSnap, polygonFromPoints, polylineFromPoints, poseAxes, poseDescriptorForNode, poseFrameInverseOf, poseFrameOf, poseLinearOf, poseRotationOf, prepareBlend, pressureToWidth, previewBooleanOp, publishPreviews, pxExtent, rangeWeight, rasterToPng, readActionSettings, readEffectSource, rebaseLocalPose, rebuildOp, reconcileSpecs, recordTransform, rectAim, rectCorners, rectFromPlane, rectMarkerPath, rectPath, rectToPlane, refreshCanvasFont, regenerateShape, registerBidi, registerCanvasFont, registerContentHandler, registerEffect, registerFont, registerFontOutlines, registerMarker, registerNodeShape, registerOpFactory, registerPaintKind, registerPaintKindLoader, registeredOpNames, registeredPathEffects, regularPolygonPath, releaseCanvasRenderer, releaseImage, remapPerAnchor, removePage, renamePage, renderDebugSnapshot, renderLabel, renderNeeds, renderSceneToCanvas, renderSceneToPixels, repeatAlongPath, requiresAnchorSelection, reshapeOps, reshapeTo, resizeAction, resizeHandlesFor, resizePage, resizePreset, resolveAlign, resolveAxes, resolveBindingOverrides, resolveBooleanOperands, resolveColor, resolveCorners, resolveCornersWithSources, resolveCursor, resolveCursorTier, resolveDeviceProfile, resolveEasing, resolveEditablePathOf, resolveFill, resolveFillPattern, resolveMarkerSize, resolveOverlays, resolveParams, resolvePartPaint, resolvePatternSpec, resolvePreviews, resolveRunFace, resolveRuns, resolveSchemaMenu, resolveScoped, resolveScreenLength, resolveSpatialReference, resolveStroke, resolveStrokeWidth, resolveTextStyle, resolveUnit, resolveUnitExpr, resolveVisibility, resolvedSnapMarks, retryImage, reversePath, rgbaToHex, rigFromNode, rigidRigApply, roleReader, rotateAction, rotateAroundAABBCenter, rotatePathAround, rotatePoint, rotatePreset, rotatedRectCorners, rotationDegreesUnit, rotationHandle, rotationSnapSource, roundRectPath, routeKind, runsToDom, runsToMarkdown, runsToPlainText, sampleGradientStops, satisfiesRange, scaleDelta, scalePathToBounds, scaleVertexWidth, sceneCarrySource, sceneClipTargets, sceneFromJSON, sceneNodeClientRect, scenePoseAdapter, scenePoseFrame, scenePoseTarget, sceneSelectionStore, sceneSharedUnitScopes, sceneToAdapter, sceneUnitScopes, scopeBindings, scopesOf, scratchKey, screenAngleOf, screenToWorld, screenTolerance, scriptMetrics, scriptMetricsFor, seedTile, segmentUnder, selectAnchorAction, selectFromLasso, selectPreset, selectedPathNodes, selectionAtLeast, selectionEmpty, selectionIs, selectionLayer, selectionMoveBindings, selectionMoveContribution, selectionResizeBindings, selectionResizeContribution, selectionRotateBindings, selectionRotateContribution, selectionTransformBindings, selectionTransformContribution, setFlagOverRange, setImageCacheBudget, setPages, setScratch, settleShapeGenerator, shapeCoversPoint, shapeGeneratorOf, shapeGeneratorPath, simplifyAnchorsAt, simplifyPath, sliceAction, slotOf, smallCapsScale, smallCapsScaleFor, smallCapsText, smudgePath, snapMods, snapSourcesFor, sniffWeaselClipboardText, snipPathByPolyline, snipPathsAtCrossings, solid, solveConstraints, solvePathConstraints, sourcesHiddenBy, sourcesOf, specificity, specsFromSerialized, spiro, splitByClosure, splitOverChildren, splitPathByPolyline, splitPathBySegment, splitSubpaths, springPose, squarePath, srgbFloatToOklab, srgbToHsl, srgbToLinear, srgbU8ToOklab, stableStringify, staggerSpringPose, standoff, starPath, startCarry, startThresholdDrag, statedFields, stationsAlongPath, stepAngles, stickyData, stickyNodeFactory, storeEditablePath, strokeDashStyleOf, strokeInsets, strokeOf, strokeRegion, strokeToPath, strokeWith, styleAtRange, subscribeGlyphReady, subscribeImageReady, subscribeToSources, swapOp, switchGradientKind, taggedActionItems, textAlongParts, textBoxOf, textCommand, textCommandFromPose, textCommandFromRuns, textLineBoxes, textPoseLayoutInput, textToPath, textToPathsByPaint, tickedSegment, tileSpecOf, toHex8, toIconRef, toPlane, toRoot, toRuns, toolIdsOf, toolSet, toolSetHas, transformPath, transformRunTexts, translatePath, translatePoseViaDescriptor, translateRectPose, trianglesToPath, trimPathAt, trimPolyline, tuneAction, tweenPose, unboldPatch, unbound, unionAABB, unionBounds, unionBoundsPath, unionOfChildren, unionOfChildrenVia, unitScale, unplaceSkeleton, unregisterCanvasFont, unregisterFontOutlines, unsatisfiedConstraints, useAction, useActionsRegistry, useActiveToolContext, useAlign, useAnchorFields, useAnimatedReflow, useAutoCenter, useBooleans, useBooleansAdapter, useBooleansAdapterSource, useCanvasFocus, useCanvasSize, useClipboardOps, useCommand, useCreateOutlinesAdapter, useDecayLoop, useDepRegistry, useDepSource, useDeviceProfile, useDevtoolsLabel, useDistribute, useDragGesture, useDragHandle, useDragRadial, useDragRect, useDropZone, useEffectSourcesLayer, useElementSize, useEllipseTool, useEnteredGroup, useEyedropperTool, useFrameClock, useGestureDispatcher, useGradientKinds, useHandTool, useHandleDrag, useHostAnchor, useHoverTracking, useIconGlyph, useIconRegistry, useIconVariant, useImageTool, useKeyModifiers, useKeyState, useKeybindings, useLassoTool, useLatest, useLineTool, useMeasureTool, useMenuHost, useMenus, useNodeOverlayFrame, useOngoingAction, useOpenKeymap, useOptionalActiveToolContext, useOptionalDepRegistry, usePaintKind, usePaintKinds, usePenTool, usePencilTool, usePointerContext, usePointerPosition, usePointerStylus, usePolygonTool, usePoseDescriptorDepSource, usePoseRun, usePoseTransition, usePublishSelection, useRectTool, useResizePolicy, useRig, useRigNode, useScene, useSceneAdapter, useSceneTextEdit, useSelectTool, useSelection, useSelectionContext, useSimulation, useSliceDep, useSliceDepSource, useSliceTool, useSnapSource, useStandardActions, useStarTool, useStickyTool, useTextEdit, useTextTool, useTools, useTransformFollower, useVelocityTracker, useViewAnimation, useViewAnimationOn, useVisibleRaf, useYoke, vertexHalfWidths, vertexWidthFromSides, verticalAlignOffset, viewAxes, viewForAim, viewMarkerDragAction, viewPreset, viewToMat3, viewToTransform, viewZoom, viewportDragPanAction, viewportWheelPanAction, viewportWorldRect, viewportZoomAction, vignette, visualBoundsViaDescriptor, warmFonts, warmPaintKinds, warmRender, watchDevicePixelRatio, wcagLevels, wheelPan, wheelZoom, wheelZoomFactor, when, widestHalfWidth, withAlpha01, withCoord, withCorner, withGradientKind, withInheritedPaint, withInheritedPaintBounds, withInheritedPaints, withPath, withPathEffectsRegistry, withinPxBox, withinPxRadius, withoutCorners, withoutGeometryBoundData, withoutShapeGenerator, withoutTools, workspaceTintLayer, worldEditToStorage, worldPoseLookup, worldToScreen, writtenBy, zoomAt, zoomAtLeast };
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
//#region src/interactions/actions/admitsChild.ts
|
|
2
|
+
/** The one rule for whether `parent` takes `ids` as children, by drop or by insert:
|
|
3
|
+
* `canDropInto` decides when present, else a group does and a mark does not. */
|
|
4
|
+
function admitsChild(scene, parent, ids, canDropInto) {
|
|
5
|
+
if (canDropInto !== void 0) return canDropInto(parent, ids);
|
|
6
|
+
return scene.get(parent)?.kind === "group";
|
|
7
|
+
}
|
|
8
|
+
|
|
9
|
+
//#endregion
|
|
10
|
+
export { admitsChild };
|
|
11
|
+
//# sourceMappingURL=admitsChild.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"admitsChild.js","names":[],"sources":["../../../src/interactions/actions/admitsChild.ts"],"sourcesContent":["import type { NodeId } from 'core/scene/types';\nimport type { CanDropIntoDep } from './layoutDeps';\n\n/** The one rule for whether `parent` takes `ids` as children, by drop or by insert:\n * `canDropInto` decides when present, else a group does and a mark does not. */\nexport function admitsChild(\n scene: { get(id: NodeId): { kind: string } | undefined },\n parent: NodeId,\n ids: readonly string[],\n canDropInto: CanDropIntoDep | undefined,\n): boolean {\n if (canDropInto !== undefined) return canDropInto(parent as string, ids);\n return scene.get(parent)?.kind === 'group';\n}\n"],"mappings":";;;AAKA,SAAgB,YACd,OACA,QACA,KACA,aACS;CACT,IAAI,gBAAgB,QAAW,OAAO,YAAY,QAAkB,GAAG;CACvE,OAAO,MAAM,IAAI,MAAM,CAAC,EAAE,SAAS;AACrC"}
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { resolveOperand } from "./operands.js";
|
|
2
2
|
import { booleanPieces } from "./pieces.js";
|
|
3
3
|
import { commitPieces } from "./commit.js";
|
|
4
|
+
import { resolveFill } from "@weasel-js/paint";
|
|
4
5
|
import { TextOutlinesError } from "@weasel-js/text";
|
|
5
6
|
|
|
6
7
|
//#region src/interactions/actions/booleans/booleans.ts
|
|
@@ -54,7 +55,7 @@ function planBooleanOp(adapter, sel, op, opts) {
|
|
|
54
55
|
const fillKey = (i) => {
|
|
55
56
|
const { id, operand } = entries[i];
|
|
56
57
|
const paint = operand.paint ?? adapter.getPaint?.(id);
|
|
57
|
-
return paint ? JSON.stringify(paint.fill
|
|
58
|
+
return paint ? JSON.stringify(resolveFill(paint.fill)) : i;
|
|
58
59
|
};
|
|
59
60
|
const pieces = booleanPieces(op, entries.map((e) => e.operand.path), fillKey);
|
|
60
61
|
if (pieces.length === 0) return {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"booleans.js","names":[],"sources":["../../../../src/interactions/actions/booleans/booleans.ts"],"sourcesContent":["/**\n * Pure action core for path boolean operations. Resolves the current\n * selection into z-ordered paths, runs the chosen op, and dispatches a\n * single batch of `Op`s (delete sources + insert results + set selection).\n */\nimport type { Affine, Path } from '@weasel-js/geom';\nimport type { Op } from 'core/ops/types';\nimport type { NodeId } from 'core/scene/types';\nimport { TextOutlinesError, type TextNodeSource } from '@weasel-js/text';\nimport type { PathPaint } from 'canvas/nodeShapes/nodePaint';\nimport { resolveOperand, type BooleanOpOptions, type BooleanOperand } from './operands';\nimport { booleanPieces, type ResultPiece } from './pieces';\nimport { commitPieces } from './commit';\n\n/** Boolean op identifiers: the five Pathfinder primaries, and Crop, Trim, and Merge. */\nexport type BooleanOp = 'union' | 'intersect' | 'subtract' | 'exclude' | 'divide' | 'crop' | 'trim' | 'merge';\n\n/**\n * z-position descriptor for a path node. `parentId` is the direct parent\n * (or `null` for a top-level node); `index` is the position within that\n * parent's child order — never a global render index.\n */\n/** @internal */\nexport interface BooleanZOrder {\n parentId: string | null;\n index: number;\n}\n\n/** Adapter the hook and the pure core both consume. */\nexport interface BooleansAdapter {\n getSelection(): readonly NodeId[] | readonly string[];\n getWorldPath(id: NodeId): Path | undefined;\n /**\n * Optional: the text node behind `id`, for an id `getWorldPath` has no path\n * for. Its glyph outlines (`textToPath`) become the operand, so text can be\n * cut, united or intersected like any shape.\n */\n getTextSource?(id: NodeId): TextNodeSource | undefined;\n /**\n * Optional: the paint the path node behind `id` wears. An operation told to\n * count strokes (`BooleanOpOptions.strokes`) reads it to learn whether the\n * node is stroked and whether it is filled; without it every operand is its\n * path alone.\n */\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. A counted world-width stroke is skewed and stretched\n * with it. Without it every stroke is outlined in world.\n */\n getStrokeFrame?(id: NodeId): Affine | null | undefined;\n compareZ(a: NodeId, b: NodeId): number;\n /**\n * Mint a new node from a boolean-op result `Path`. `producedBy` names the\n * op that synthesized it — adapters that store provenance (e.g. for a\n * layer-panel icon) record it; others ignore the arg. `sourceId` is the\n * source the result stands in for: the topmost, except that each piece of\n * a Divide, Crop, Trim, or Merge names the topmost source it was cut from. Give the\n * node that source's parent, or the kit's reorder cannot find it there.\n * `paint` is passed when that source's stroke went into the geometry, and\n * the node must wear it as given: wearing the source's stroke again would\n * draw it twice. Without `paint`, give it that source's paint. The kit never\n * reads a node's `data`: anything else the result should keep of its source,\n * a name say, is the adapter's to copy from `sourceId`.\n */\n createPathNode(path: Path, producedBy: BooleanOp, sourceId: NodeId, paint?: PathPaint): { id: string };\n /**\n * The full object for an id. The delete ops capture it, so their `invert`\n * (an insert) restores the complete object on undo.\n */\n getNode(id: NodeId): { id: string } | undefined | null;\n /**\n * The tree. The kit reads each source's slot among its siblings through\n * `getParent` and `getChildren`, and moves each result into the slot of\n * the topmost source in its own source's parent through `setChildOrder`.\n * `defaultCommitAdapter` supplies all three, and `getNode`.\n */\n getParent(id: string): string | null;\n getChildren(parentId: string | null): string[];\n setChildOrder(parentId: string | null, ids: string[]): void;\n applyOps?(ops: Op[], label?: string): void;\n setSelection?(ids: NodeId[]): void;\n insertNode?(node: { id: string }): void;\n removeNode?(id: string): void;\n}\n\n/** Outcome reported back to callers (lets the hook surface no-op signals). */\nexport type BooleanOpResult =\n | { kind: 'applied'; resultIds: string[] }\n | { kind: 'noop'; reason: 'no-paths' | 'too-few-for-subtract' | 'empty-result' }\n /** A text operand had no outline geometry. Nothing was changed: an op that\n * quietly dropped the operand would commit a different shape than asked. */\n | { kind: 'failed'; reason: 'text-outlines'; error: TextOutlinesError };\n\nconst LABEL: Record<BooleanOp, string> = {\n union: 'Union',\n intersect: 'Intersect',\n subtract: 'Subtract',\n exclude: 'Exclude',\n divide: 'Divide',\n crop: 'Crop',\n trim: 'Trim',\n merge: 'Merge',\n};\n\n/** One path a Boolean operation would make. */\nexport interface BooleanPreviewPiece {\n path: Path;\n /** The source the piece stands in for; see `BooleansAdapter.createPathNode`. */\n sourceId: NodeId;\n /** Set when that source's stroke went into `path`: the paint the piece wears. */\n paint?: PathPaint;\n}\n\n/** What {@link previewBooleanOp} answers: the pieces, or why there are none. */\nexport type BooleanOpPreview =\n | { kind: 'pieces'; pieces: BooleanPreviewPiece[] }\n | Exclude<BooleanOpResult, { kind: 'applied' }>;\n\n/** @internal A selected node and the operand it gives. */\nexport type BooleanEntry = { id: NodeId; operand: BooleanOperand };\ntype Entry = BooleanEntry;\n\n/** @internal The operands behind `sel`, back to front, or the result that\n * says why there are too few. Reads the adapter and changes nothing. */\nexport function resolveEntries(\n adapter: BooleansAdapter,\n sel: readonly NodeId[],\n op: BooleanOp,\n opts: BooleanOpOptions,\n): Entry[] | Exclude<BooleanOpResult, { kind: 'applied' }> {\n // Sorted ascending by `compareZ` so the first entry is the bottommost\n // (back) member. `subtract` relies on this: it computes `back − union(rest)`.\n let resolved: { id: NodeId; operand: BooleanOperand | undefined }[];\n try {\n resolved = sel.map((id) => ({ id, operand: resolveOperand(adapter, id, opts) }));\n } catch (err) {\n if (err instanceof TextOutlinesError) return { kind: 'failed', reason: 'text-outlines', error: err };\n throw err;\n }\n const entries = resolved\n .filter((e): e is Entry => e.operand != null)\n .sort((a, b) => adapter.compareZ(a.id, b.id));\n\n if (entries.length === 0) return { kind: 'noop', reason: 'no-paths' };\n if (op === 'subtract' && entries.length < 2) {\n return { kind: 'noop', reason: 'too-few-for-subtract' };\n }\n if (entries.length < 2) return { kind: 'noop', reason: 'no-paths' };\n return entries;\n}\n\n/** The operands back to front and the pieces `op` makes of them, or the\n * result that says why it makes none. Reads the adapter and changes nothing. */\nfunction planBooleanOp(\n adapter: BooleansAdapter,\n sel: readonly NodeId[],\n op: BooleanOp,\n opts: BooleanOpOptions,\n): { entries: Entry[]; pieces: ResultPiece[] } | Exclude<BooleanOpResult, { kind: 'applied' }> {\n const entries = resolveEntries(adapter, sel, op, opts);\n if ('kind' in entries) return entries;\n // Merge unites the operands that wear one fill; one whose paint is unknown is united with nothing.\n const fillKey = (i: number): unknown => {\n const { id, operand } = entries[i]!;\n const paint = operand.paint ?? adapter.getPaint?.(id);\n return paint ? JSON.stringify(paint.fill ?? null) : i;\n };\n const pieces = booleanPieces(op, entries.map((e) => e.operand.path), fillKey);\n if (pieces.length === 0) return { kind: 'noop', reason: 'empty-result' };\n return { entries, pieces };\n}\n\n/**\n * What {@link applyBooleanOp} would make of the selection, without minting a\n * node or committing anything: for drawing an operation before it is applied.\n */\nexport function previewBooleanOp(\n adapter: BooleansAdapter,\n op: BooleanOp,\n opts: BooleanOpOptions = {},\n): BooleanOpPreview {\n const plan = planBooleanOp(adapter, [...adapter.getSelection()] as NodeId[], op, opts);\n if ('kind' in plan) return plan;\n return {\n kind: 'pieces',\n pieces: plan.pieces.map((piece) => {\n const { id, operand } = plan.entries[piece.source]!;\n return operand.paint ? { path: piece.path, sourceId: id, paint: operand.paint } : { path: piece.path, sourceId: id };\n }),\n };\n}\n\n/**\n * Run one Boolean operation over the selected paths and commit the result as a\n * single undoable batch.\n *\n * Operands are ordered back-to-front, which is what makes `subtract` mean\n * \"everything in front removed from the backmost shape\". Returns without\n * mutating anything when the selection holds no paths, or too few for the\n * requested operation. `opts.strokes` says what a stroked operand gives.\n */\nexport function applyBooleanOp(\n adapter: BooleansAdapter,\n op: BooleanOp,\n opts: BooleanOpOptions = {},\n): BooleanOpResult {\n const sel = [...adapter.getSelection()] as NodeId[];\n const plan = planBooleanOp(adapter, sel, op, opts);\n if ('kind' in plan) return plan;\n const { entries, pieces } = plan;\n const made = pieces.map((piece) => ({ path: piece.path, source: piece.source, producedBy: op }));\n return { kind: 'applied', resultIds: commitPieces(adapter, sel, entries, made, LABEL[op]) };\n}\n"],"mappings":";;;;;;AA+FA,IAAM,QAAmC;CACvC,OAAO;CACP,WAAW;CACX,UAAU;CACV,SAAS;CACT,QAAQ;CACR,MAAM;CACN,MAAM;CACN,OAAO;AACT;;;AAsBA,SAAgB,eACd,SACA,KACA,IACA,MACyD;CAGzD,IAAI;CACJ,IAAI;EACF,WAAW,IAAI,KAAK,QAAQ;GAAE;GAAI,SAAS,eAAe,SAAS,IAAI,IAAI;EAAE,EAAE;CACjF,SAAS,KAAK;EACZ,IAAI,eAAe,mBAAmB,OAAO;GAAE,MAAM;GAAU,QAAQ;GAAiB,OAAO;EAAI;EACnG,MAAM;CACR;CACA,MAAM,UAAU,SACb,QAAQ,MAAkB,EAAE,WAAW,IAAI,CAAC,CAC5C,MAAM,GAAG,MAAM,QAAQ,SAAS,EAAE,IAAI,EAAE,EAAE,CAAC;CAE9C,IAAI,QAAQ,WAAW,GAAG,OAAO;EAAE,MAAM;EAAQ,QAAQ;CAAW;CACpE,IAAI,OAAO,cAAc,QAAQ,SAAS,GACxC,OAAO;EAAE,MAAM;EAAQ,QAAQ;CAAuB;CAExD,IAAI,QAAQ,SAAS,GAAG,OAAO;EAAE,MAAM;EAAQ,QAAQ;CAAW;CAClE,OAAO;AACT;;;AAIA,SAAS,cACP,SACA,KACA,IACA,MAC6F;CAC7F,MAAM,UAAU,eAAe,SAAS,KAAK,IAAI,IAAI;CACrD,IAAI,UAAU,SAAS,OAAO;CAE9B,MAAM,WAAW,MAAuB;EACtC,MAAM,EAAE,IAAI,YAAY,QAAQ;EAChC,MAAM,QAAQ,QAAQ,SAAS,QAAQ,WAAW,EAAE;EACpD,OAAO,QAAQ,KAAK,UAAU,MAAM,QAAQ,IAAI,IAAI;CACtD;CACA,MAAM,SAAS,cAAc,IAAI,QAAQ,KAAK,MAAM,EAAE,QAAQ,IAAI,GAAG,OAAO;CAC5E,IAAI,OAAO,WAAW,GAAG,OAAO;EAAE,MAAM;EAAQ,QAAQ;CAAe;CACvE,OAAO;EAAE;EAAS;CAAO;AAC3B;;;;;AAMA,SAAgB,iBACd,SACA,IACA,OAAyB,CAAC,GACR;CAClB,MAAM,OAAO,cAAc,SAAS,CAAC,GAAG,QAAQ,aAAa,CAAC,GAAe,IAAI,IAAI;CACrF,IAAI,UAAU,MAAM,OAAO;CAC3B,OAAO;EACL,MAAM;EACN,QAAQ,KAAK,OAAO,KAAK,UAAU;GACjC,MAAM,EAAE,IAAI,YAAY,KAAK,QAAQ,MAAM;GAC3C,OAAO,QAAQ,QAAQ;IAAE,MAAM,MAAM;IAAM,UAAU;IAAI,OAAO,QAAQ;GAAM,IAAI;IAAE,MAAM,MAAM;IAAM,UAAU;GAAG;EACrH,CAAC;CACH;AACF;;;;;;;;;;AAWA,SAAgB,eACd,SACA,IACA,OAAyB,CAAC,GACT;CACjB,MAAM,MAAM,CAAC,GAAG,QAAQ,aAAa,CAAC;CACtC,MAAM,OAAO,cAAc,SAAS,KAAK,IAAI,IAAI;CACjD,IAAI,UAAU,MAAM,OAAO;CAC3B,MAAM,EAAE,SAAS,WAAW;CAC5B,MAAM,OAAO,OAAO,KAAK,WAAW;EAAE,MAAM,MAAM;EAAM,QAAQ,MAAM;EAAQ,YAAY;CAAG,EAAE;CAC/F,OAAO;EAAE,MAAM;EAAW,WAAW,aAAa,SAAS,KAAK,SAAS,MAAM,MAAM,GAAG;CAAE;AAC5F"}
|
|
1
|
+
{"version":3,"file":"booleans.js","names":[],"sources":["../../../../src/interactions/actions/booleans/booleans.ts"],"sourcesContent":["/**\n * Pure action core for path boolean operations. Resolves the current\n * selection into z-ordered paths, runs the chosen op, and dispatches a\n * single batch of `Op`s (delete sources + insert results + set selection).\n */\nimport type { Affine, Path } from '@weasel-js/geom';\nimport type { Op } from 'core/ops/types';\nimport type { NodeId } from 'core/scene/types';\nimport { resolveFill } from '@weasel-js/paint';\nimport { TextOutlinesError, type TextNodeSource } from '@weasel-js/text';\nimport type { PathPaint } from 'canvas/nodeShapes/nodePaint';\nimport { resolveOperand, type BooleanOpOptions, type BooleanOperand } from './operands';\nimport { booleanPieces, type ResultPiece } from './pieces';\nimport { commitPieces } from './commit';\n\n/** Boolean op identifiers: the five Pathfinder primaries, and Crop, Trim, and Merge. */\nexport type BooleanOp = 'union' | 'intersect' | 'subtract' | 'exclude' | 'divide' | 'crop' | 'trim' | 'merge';\n\n/**\n * z-position descriptor for a path node. `parentId` is the direct parent\n * (or `null` for a top-level node); `index` is the position within that\n * parent's child order — never a global render index.\n */\n/** @internal */\nexport interface BooleanZOrder {\n parentId: string | null;\n index: number;\n}\n\n/** Adapter the hook and the pure core both consume. */\nexport interface BooleansAdapter {\n getSelection(): readonly NodeId[] | readonly string[];\n getWorldPath(id: NodeId): Path | undefined;\n /**\n * Optional: the text node behind `id`, for an id `getWorldPath` has no path\n * for. Its glyph outlines (`textToPath`) become the operand, so text can be\n * cut, united or intersected like any shape.\n */\n getTextSource?(id: NodeId): TextNodeSource | undefined;\n /**\n * Optional: the paint the path node behind `id` wears. An operation told to\n * count strokes (`BooleanOpOptions.strokes`) reads it to learn whether the\n * node is stroked and whether it is filled; without it every operand is its\n * path alone.\n */\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. A counted world-width stroke is skewed and stretched\n * with it. Without it every stroke is outlined in world.\n */\n getStrokeFrame?(id: NodeId): Affine | null | undefined;\n compareZ(a: NodeId, b: NodeId): number;\n /**\n * Mint a new node from a boolean-op result `Path`. `producedBy` names the\n * op that synthesized it — adapters that store provenance (e.g. for a\n * layer-panel icon) record it; others ignore the arg. `sourceId` is the\n * source the result stands in for: the topmost, except that each piece of\n * a Divide, Crop, Trim, or Merge names the topmost source it was cut from. Give the\n * node that source's parent, or the kit's reorder cannot find it there.\n * `paint` is passed when that source's stroke went into the geometry, and\n * the node must wear it as given: wearing the source's stroke again would\n * draw it twice. Without `paint`, give it that source's paint. The kit never\n * reads a node's `data`: anything else the result should keep of its source,\n * a name say, is the adapter's to copy from `sourceId`.\n */\n createPathNode(path: Path, producedBy: BooleanOp, sourceId: NodeId, paint?: PathPaint): { id: string };\n /**\n * The full object for an id. The delete ops capture it, so their `invert`\n * (an insert) restores the complete object on undo.\n */\n getNode(id: NodeId): { id: string } | undefined | null;\n /**\n * The tree. The kit reads each source's slot among its siblings through\n * `getParent` and `getChildren`, and moves each result into the slot of\n * the topmost source in its own source's parent through `setChildOrder`.\n * `defaultCommitAdapter` supplies all three, and `getNode`.\n */\n getParent(id: string): string | null;\n getChildren(parentId: string | null): string[];\n setChildOrder(parentId: string | null, ids: string[]): void;\n applyOps?(ops: Op[], label?: string): void;\n setSelection?(ids: NodeId[]): void;\n insertNode?(node: { id: string }): void;\n removeNode?(id: string): void;\n}\n\n/** Outcome reported back to callers (lets the hook surface no-op signals). */\nexport type BooleanOpResult =\n | { kind: 'applied'; resultIds: string[] }\n | { kind: 'noop'; reason: 'no-paths' | 'too-few-for-subtract' | 'empty-result' }\n /** A text operand had no outline geometry. Nothing was changed: an op that\n * quietly dropped the operand would commit a different shape than asked. */\n | { kind: 'failed'; reason: 'text-outlines'; error: TextOutlinesError };\n\nconst LABEL: Record<BooleanOp, string> = {\n union: 'Union',\n intersect: 'Intersect',\n subtract: 'Subtract',\n exclude: 'Exclude',\n divide: 'Divide',\n crop: 'Crop',\n trim: 'Trim',\n merge: 'Merge',\n};\n\n/** One path a Boolean operation would make. */\nexport interface BooleanPreviewPiece {\n path: Path;\n /** The source the piece stands in for; see `BooleansAdapter.createPathNode`. */\n sourceId: NodeId;\n /** Set when that source's stroke went into `path`: the paint the piece wears. */\n paint?: PathPaint;\n}\n\n/** What {@link previewBooleanOp} answers: the pieces, or why there are none. */\nexport type BooleanOpPreview =\n | { kind: 'pieces'; pieces: BooleanPreviewPiece[] }\n | Exclude<BooleanOpResult, { kind: 'applied' }>;\n\n/** @internal A selected node and the operand it gives. */\nexport type BooleanEntry = { id: NodeId; operand: BooleanOperand };\ntype Entry = BooleanEntry;\n\n/** @internal The operands behind `sel`, back to front, or the result that\n * says why there are too few. Reads the adapter and changes nothing. */\nexport function resolveEntries(\n adapter: BooleansAdapter,\n sel: readonly NodeId[],\n op: BooleanOp,\n opts: BooleanOpOptions,\n): Entry[] | Exclude<BooleanOpResult, { kind: 'applied' }> {\n // Sorted ascending by `compareZ` so the first entry is the bottommost\n // (back) member. `subtract` relies on this: it computes `back − union(rest)`.\n let resolved: { id: NodeId; operand: BooleanOperand | undefined }[];\n try {\n resolved = sel.map((id) => ({ id, operand: resolveOperand(adapter, id, opts) }));\n } catch (err) {\n if (err instanceof TextOutlinesError) return { kind: 'failed', reason: 'text-outlines', error: err };\n throw err;\n }\n const entries = resolved\n .filter((e): e is Entry => e.operand != null)\n .sort((a, b) => adapter.compareZ(a.id, b.id));\n\n if (entries.length === 0) return { kind: 'noop', reason: 'no-paths' };\n if (op === 'subtract' && entries.length < 2) {\n return { kind: 'noop', reason: 'too-few-for-subtract' };\n }\n if (entries.length < 2) return { kind: 'noop', reason: 'no-paths' };\n return entries;\n}\n\n/** The operands back to front and the pieces `op` makes of them, or the\n * result that says why it makes none. Reads the adapter and changes nothing. */\nfunction planBooleanOp(\n adapter: BooleansAdapter,\n sel: readonly NodeId[],\n op: BooleanOp,\n opts: BooleanOpOptions,\n): { entries: Entry[]; pieces: ResultPiece[] } | Exclude<BooleanOpResult, { kind: 'applied' }> {\n const entries = resolveEntries(adapter, sel, op, opts);\n if ('kind' in entries) return entries;\n // Merge unites the operands that wear one fill; one whose paint is unknown is united with nothing.\n const fillKey = (i: number): unknown => {\n const { id, operand } = entries[i]!;\n const paint = operand.paint ?? adapter.getPaint?.(id);\n return paint ? JSON.stringify(resolveFill(paint.fill)) : i;\n };\n const pieces = booleanPieces(op, entries.map((e) => e.operand.path), fillKey);\n if (pieces.length === 0) return { kind: 'noop', reason: 'empty-result' };\n return { entries, pieces };\n}\n\n/**\n * What {@link applyBooleanOp} would make of the selection, without minting a\n * node or committing anything: for drawing an operation before it is applied.\n */\nexport function previewBooleanOp(\n adapter: BooleansAdapter,\n op: BooleanOp,\n opts: BooleanOpOptions = {},\n): BooleanOpPreview {\n const plan = planBooleanOp(adapter, [...adapter.getSelection()] as NodeId[], op, opts);\n if ('kind' in plan) return plan;\n return {\n kind: 'pieces',\n pieces: plan.pieces.map((piece) => {\n const { id, operand } = plan.entries[piece.source]!;\n return operand.paint ? { path: piece.path, sourceId: id, paint: operand.paint } : { path: piece.path, sourceId: id };\n }),\n };\n}\n\n/**\n * Run one Boolean operation over the selected paths and commit the result as a\n * single undoable batch.\n *\n * Operands are ordered back-to-front, which is what makes `subtract` mean\n * \"everything in front removed from the backmost shape\". Returns without\n * mutating anything when the selection holds no paths, or too few for the\n * requested operation. `opts.strokes` says what a stroked operand gives.\n */\nexport function applyBooleanOp(\n adapter: BooleansAdapter,\n op: BooleanOp,\n opts: BooleanOpOptions = {},\n): BooleanOpResult {\n const sel = [...adapter.getSelection()] as NodeId[];\n const plan = planBooleanOp(adapter, sel, op, opts);\n if ('kind' in plan) return plan;\n const { entries, pieces } = plan;\n const made = pieces.map((piece) => ({ path: piece.path, source: piece.source, producedBy: op }));\n return { kind: 'applied', resultIds: commitPieces(adapter, sel, entries, made, LABEL[op]) };\n}\n"],"mappings":";;;;;;;AAgGA,IAAM,QAAmC;CACvC,OAAO;CACP,WAAW;CACX,UAAU;CACV,SAAS;CACT,QAAQ;CACR,MAAM;CACN,MAAM;CACN,OAAO;AACT;;;AAsBA,SAAgB,eACd,SACA,KACA,IACA,MACyD;CAGzD,IAAI;CACJ,IAAI;EACF,WAAW,IAAI,KAAK,QAAQ;GAAE;GAAI,SAAS,eAAe,SAAS,IAAI,IAAI;EAAE,EAAE;CACjF,SAAS,KAAK;EACZ,IAAI,eAAe,mBAAmB,OAAO;GAAE,MAAM;GAAU,QAAQ;GAAiB,OAAO;EAAI;EACnG,MAAM;CACR;CACA,MAAM,UAAU,SACb,QAAQ,MAAkB,EAAE,WAAW,IAAI,CAAC,CAC5C,MAAM,GAAG,MAAM,QAAQ,SAAS,EAAE,IAAI,EAAE,EAAE,CAAC;CAE9C,IAAI,QAAQ,WAAW,GAAG,OAAO;EAAE,MAAM;EAAQ,QAAQ;CAAW;CACpE,IAAI,OAAO,cAAc,QAAQ,SAAS,GACxC,OAAO;EAAE,MAAM;EAAQ,QAAQ;CAAuB;CAExD,IAAI,QAAQ,SAAS,GAAG,OAAO;EAAE,MAAM;EAAQ,QAAQ;CAAW;CAClE,OAAO;AACT;;;AAIA,SAAS,cACP,SACA,KACA,IACA,MAC6F;CAC7F,MAAM,UAAU,eAAe,SAAS,KAAK,IAAI,IAAI;CACrD,IAAI,UAAU,SAAS,OAAO;CAE9B,MAAM,WAAW,MAAuB;EACtC,MAAM,EAAE,IAAI,YAAY,QAAQ;EAChC,MAAM,QAAQ,QAAQ,SAAS,QAAQ,WAAW,EAAE;EACpD,OAAO,QAAQ,KAAK,UAAU,YAAY,MAAM,IAAI,CAAC,IAAI;CAC3D;CACA,MAAM,SAAS,cAAc,IAAI,QAAQ,KAAK,MAAM,EAAE,QAAQ,IAAI,GAAG,OAAO;CAC5E,IAAI,OAAO,WAAW,GAAG,OAAO;EAAE,MAAM;EAAQ,QAAQ;CAAe;CACvE,OAAO;EAAE;EAAS;CAAO;AAC3B;;;;;AAMA,SAAgB,iBACd,SACA,IACA,OAAyB,CAAC,GACR;CAClB,MAAM,OAAO,cAAc,SAAS,CAAC,GAAG,QAAQ,aAAa,CAAC,GAAe,IAAI,IAAI;CACrF,IAAI,UAAU,MAAM,OAAO;CAC3B,OAAO;EACL,MAAM;EACN,QAAQ,KAAK,OAAO,KAAK,UAAU;GACjC,MAAM,EAAE,IAAI,YAAY,KAAK,QAAQ,MAAM;GAC3C,OAAO,QAAQ,QAAQ;IAAE,MAAM,MAAM;IAAM,UAAU;IAAI,OAAO,QAAQ;GAAM,IAAI;IAAE,MAAM,MAAM;IAAM,UAAU;GAAG;EACrH,CAAC;CACH;AACF;;;;;;;;;;AAWA,SAAgB,eACd,SACA,IACA,OAAyB,CAAC,GACT;CACjB,MAAM,MAAM,CAAC,GAAG,QAAQ,aAAa,CAAC;CACtC,MAAM,OAAO,cAAc,SAAS,KAAK,IAAI,IAAI;CACjD,IAAI,UAAU,MAAM,OAAO;CAC3B,MAAM,EAAE,SAAS,WAAW;CAC5B,MAAM,OAAO,OAAO,KAAK,WAAW;EAAE,MAAM,MAAM;EAAM,QAAQ,MAAM;EAAQ,YAAY;CAAG,EAAE;CAC/F,OAAO;EAAE,MAAM;EAAW,WAAW,aAAa,SAAS,KAAK,SAAS,MAAM,MAAM,GAAG;CAAE;AAC5F"}
|
|
@@ -1,19 +1,20 @@
|
|
|
1
1
|
import { strokeRegion } from "../outlines/strokeRegion.js";
|
|
2
|
+
import { resolveFill, resolveStroke } from "@weasel-js/paint";
|
|
2
3
|
import { textToPath, textToPathsByPaint } from "@weasel-js/text";
|
|
3
4
|
import { pathUnion } from "@weasel-js/geom/booleans";
|
|
4
5
|
|
|
5
6
|
//#region src/interactions/actions/booleans/operands.ts
|
|
6
7
|
function inkOf(source, strokes, frame, scale) {
|
|
7
|
-
const { path
|
|
8
|
-
const
|
|
9
|
-
const
|
|
10
|
-
if (!stroke
|
|
8
|
+
const { path } = source;
|
|
9
|
+
const fill = resolveFill(source.fill);
|
|
10
|
+
const stroke = resolveStroke(source.stroke);
|
|
11
|
+
if (!stroke) return { path };
|
|
11
12
|
if (strokes === "ignore" || strokes === "unfilled" && fill !== null) return { path };
|
|
12
13
|
const ribbon = strokeRegion(path, stroke, frame, scale === void 0 ? {} : { scale });
|
|
13
14
|
if (ribbon.commands.length === 0) return { path };
|
|
14
15
|
return {
|
|
15
16
|
path: fill !== null ? pathUnion(path, ribbon) : ribbon,
|
|
16
|
-
paint: { fill: fill ?? { paint:
|
|
17
|
+
paint: { fill: fill ?? { paint: stroke.paint } }
|
|
17
18
|
};
|
|
18
19
|
}
|
|
19
20
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"operands.js","names":[],"sources":["../../../../src/interactions/actions/booleans/operands.ts"],"sourcesContent":["/**\n * What each selected node gives a Boolean operation: its path, its glyph\n * outlines, or the region its ink covers once a stroke is counted.\n */\nimport type { Affine, Path, Scale2 } from '@weasel-js/geom';\nimport { pathUnion } from '@weasel-js/geom/booleans';\nimport { textToPath, textToPathsByPaint } from '@weasel-js/text';\nimport type { PathPaint } from 'canvas/nodeShapes/nodePaint';\nimport type { NodeId } from 'core/scene/types';\nimport type { PaintedPath } from '../outlines/replaceWithPaths';\nimport { strokeRegion } from '../outlines/strokeRegion';\nimport type { BooleansAdapter } from './booleans';\n\n/**\n * What a stroked operand gives a Boolean operation.\n *\n * - `'ignore'`: its path, as though it had no stroke.\n * - `'unfilled'`: the region its stroke covers when it has no fill, as a line\n * or an open pencil stroke has none; its path when it is filled.\n * - `'include'`: what it paints — its fill and its stroke together, or the\n * stroke alone when it has no fill.\n *\n * Any mode but `'ignore'` needs {@link BooleansAdapter.getPaint}.\n */\nexport type BooleanStrokes = 'ignore' | 'unfilled' | 'include';\n\n/** Options for `applyBooleanOp`. */\nexport interface BooleanOpOptions {\n /** Default `'ignore'`. */\n strokes?: BooleanStrokes;\n /** The view scale a `{ px }` stroke width resolves against: one number, or\n * the view's own scale per axis. Default 1. */\n scale?: number | Scale2;\n}\n\n/** @internal */\nexport interface BooleanOperand {\n path: Path;\n /** Set when a stroke went into `path`: what a result standing in for this\n * operand wears, the stroke being part of its shape now. */\n paint?: PathPaint;\n}\n\nfunction inkOf(\n source: PaintedPath,\n strokes: BooleanStrokes,\n frame: Affine | null | undefined,\n scale: number | Scale2 | undefined,\n): BooleanOperand {\n const { path
|
|
1
|
+
{"version":3,"file":"operands.js","names":[],"sources":["../../../../src/interactions/actions/booleans/operands.ts"],"sourcesContent":["/**\n * What each selected node gives a Boolean operation: its path, its glyph\n * outlines, or the region its ink covers once a stroke is counted.\n */\nimport type { Affine, Path, Scale2 } from '@weasel-js/geom';\nimport { pathUnion } from '@weasel-js/geom/booleans';\nimport { textToPath, textToPathsByPaint } from '@weasel-js/text';\nimport { resolveFill, resolveStroke } from '@weasel-js/paint';\nimport type { PathPaint } from 'canvas/nodeShapes/nodePaint';\nimport type { NodeId } from 'core/scene/types';\nimport type { PaintedPath } from '../outlines/replaceWithPaths';\nimport { strokeRegion } from '../outlines/strokeRegion';\nimport type { BooleansAdapter } from './booleans';\n\n/**\n * What a stroked operand gives a Boolean operation.\n *\n * - `'ignore'`: its path, as though it had no stroke.\n * - `'unfilled'`: the region its stroke covers when it has no fill, as a line\n * or an open pencil stroke has none; its path when it is filled.\n * - `'include'`: what it paints — its fill and its stroke together, or the\n * stroke alone when it has no fill.\n *\n * Any mode but `'ignore'` needs {@link BooleansAdapter.getPaint}.\n */\nexport type BooleanStrokes = 'ignore' | 'unfilled' | 'include';\n\n/** Options for `applyBooleanOp`. */\nexport interface BooleanOpOptions {\n /** Default `'ignore'`. */\n strokes?: BooleanStrokes;\n /** The view scale a `{ px }` stroke width resolves against: one number, or\n * the view's own scale per axis. Default 1. */\n scale?: number | Scale2;\n}\n\n/** @internal */\nexport interface BooleanOperand {\n path: Path;\n /** Set when a stroke went into `path`: what a result standing in for this\n * operand wears, the stroke being part of its shape now. */\n paint?: PathPaint;\n}\n\nfunction inkOf(\n source: PaintedPath,\n strokes: BooleanStrokes,\n frame: Affine | null | undefined,\n scale: number | Scale2 | undefined,\n): BooleanOperand {\n const { path } = source;\n const fill = resolveFill(source.fill);\n const stroke = resolveStroke(source.stroke);\n if (!stroke) return { path };\n if (strokes === 'ignore' || (strokes === 'unfilled' && fill !== null)) return { path };\n const ribbon = strokeRegion(path, stroke, frame, scale === undefined ? {} : { scale });\n if (ribbon.commands.length === 0) return { path };\n return { path: fill !== null ? pathUnion(path, ribbon) : ribbon, paint: { fill: fill ?? { paint: stroke.paint } } };\n}\n\n/**\n * The operand behind `id`, or `undefined` for a node that is not one: a group,\n * blank text, anything the adapter has neither a path nor text for. Throws\n * `TextOutlinesError` for text whose face has no outlines.\n */\nexport function resolveOperand(\n adapter: BooleansAdapter,\n id: NodeId,\n { strokes = 'ignore', scale }: BooleanOpOptions,\n): BooleanOperand | undefined {\n const path = adapter.getWorldPath(id);\n if (path) {\n const paint = strokes === 'ignore' ? undefined : adapter.getPaint?.(id);\n return paint ? inkOf({ path, ...paint }, strokes, adapter.getStrokeFrame?.(id), scale) : { path };\n }\n const text = adapter.getTextSource?.(id);\n if (!text) return undefined;\n if (strokes === 'ignore') {\n const glyphs = textToPath(text.data, text.pose);\n return glyphs.commands.length > 0 ? { path: glyphs } : undefined;\n }\n const inks = textToPathsByPaint(text.data, text.pose).map((p) => inkOf(p, strokes, adapter.getStrokeFrame?.(id), scale));\n if (inks.length === 0) return undefined;\n const paint = inks.find((ink) => ink.paint)?.paint;\n const whole = inks.length === 1 ? inks[0]!.path : pathUnion(...inks.map((ink) => ink.path));\n return paint ? { path: whole, paint } : { path: whole };\n}\n"],"mappings":";;;;;;AA4CA,SAAS,MACP,QACA,SACA,OACA,OACgB;CAChB,MAAM,EAAE,SAAS;CACjB,MAAM,OAAO,YAAY,OAAO,IAAI;CACpC,MAAM,SAAS,cAAc,OAAO,MAAM;CAC1C,IAAI,CAAC,QAAQ,OAAO,EAAE,KAAK;CAC3B,IAAI,YAAY,YAAa,YAAY,cAAc,SAAS,MAAO,OAAO,EAAE,KAAK;CACrF,MAAM,SAAS,aAAa,MAAM,QAAQ,OAAO,UAAU,SAAY,CAAC,IAAI,EAAE,MAAM,CAAC;CACrF,IAAI,OAAO,SAAS,WAAW,GAAG,OAAO,EAAE,KAAK;CAChD,OAAO;EAAE,MAAM,SAAS,OAAO,UAAU,MAAM,MAAM,IAAI;EAAQ,OAAO,EAAE,MAAM,QAAQ,EAAE,OAAO,OAAO,MAAM,EAAE;CAAE;AACpH;;;;;;AAOA,SAAgB,eACd,SACA,IACA,EAAE,UAAU,UAAU,SACM;CAC5B,MAAM,OAAO,QAAQ,aAAa,EAAE;CACpC,IAAI,MAAM;EACR,MAAM,QAAQ,YAAY,WAAW,SAAY,QAAQ,WAAW,EAAE;EACtE,OAAO,QAAQ,MAAM;GAAE;GAAM,GAAG;EAAM,GAAG,SAAS,QAAQ,iBAAiB,EAAE,GAAG,KAAK,IAAI,EAAE,KAAK;CAClG;CACA,MAAM,OAAO,QAAQ,gBAAgB,EAAE;CACvC,IAAI,CAAC,MAAM,OAAO;CAClB,IAAI,YAAY,UAAU;EACxB,MAAM,SAAS,WAAW,KAAK,MAAM,KAAK,IAAI;EAC9C,OAAO,OAAO,SAAS,SAAS,IAAI,EAAE,MAAM,OAAO,IAAI;CACzD;CACA,MAAM,OAAO,mBAAmB,KAAK,MAAM,KAAK,IAAI,CAAC,CAAC,KAAK,MAAM,MAAM,GAAG,SAAS,QAAQ,iBAAiB,EAAE,GAAG,KAAK,CAAC;CACvH,IAAI,KAAK,WAAW,GAAG,OAAO;CAC9B,MAAM,QAAQ,KAAK,MAAM,QAAQ,IAAI,KAAK,CAAC,EAAE;CAC7C,MAAM,QAAQ,KAAK,WAAW,IAAI,KAAK,EAAE,CAAE,OAAO,UAAU,GAAG,KAAK,KAAK,QAAQ,IAAI,IAAI,CAAC;CAC1F,OAAO,QAAQ;EAAE,MAAM;EAAO;CAAM,IAAI,EAAE,MAAM,MAAM;AACxD"}
|
|
@@ -14,11 +14,14 @@ var clipboardCopyAction = {
|
|
|
14
14
|
label: "Copy",
|
|
15
15
|
icon: /* @icon */ "core:copy",
|
|
16
16
|
group: "clipboard",
|
|
17
|
-
defaultBinding: {
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
17
|
+
defaultBinding: [{
|
|
18
|
+
spec: {
|
|
19
|
+
kind: "key",
|
|
20
|
+
key: "c",
|
|
21
|
+
mods: { mod: true }
|
|
22
|
+
},
|
|
23
|
+
opts: { id: "clipboard.copy.key" }
|
|
24
|
+
}],
|
|
22
25
|
eligible: { capability: ["edits-page", "creates-selection"] },
|
|
23
26
|
requires: ["clipboard", "selection"],
|
|
24
27
|
invoker: {
|
|
@@ -31,18 +34,22 @@ var clipboardCopyAction = {
|
|
|
31
34
|
};
|
|
32
35
|
/**
|
|
33
36
|
* Static descriptor for the `clipboard.cut` Action (Cmd/Ctrl+X) — copy, then
|
|
34
|
-
* the same batched delete `deleteAction` performs, as one undo entry
|
|
37
|
+
* the same batched delete `deleteAction` performs, as one undo entry: the
|
|
38
|
+
* sources a path effect hid go too.
|
|
35
39
|
*/
|
|
36
40
|
var clipboardCutAction = {
|
|
37
41
|
id: "clipboard.cut",
|
|
38
42
|
label: "Cut",
|
|
39
43
|
icon: /* @icon */ "core:cut",
|
|
40
44
|
group: "clipboard",
|
|
41
|
-
defaultBinding: {
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
45
|
+
defaultBinding: [{
|
|
46
|
+
spec: {
|
|
47
|
+
kind: "key",
|
|
48
|
+
key: "x",
|
|
49
|
+
mods: { mod: true }
|
|
50
|
+
},
|
|
51
|
+
opts: { id: "clipboard.cut.key" }
|
|
52
|
+
}],
|
|
46
53
|
eligible: { capability: "edits-page" },
|
|
47
54
|
requires: [
|
|
48
55
|
"clipboard",
|
|
@@ -61,7 +68,7 @@ var clipboardCutAction = {
|
|
|
61
68
|
const ids = selection.get();
|
|
62
69
|
if (ids.length === 0) return;
|
|
63
70
|
clipboard.copy();
|
|
64
|
-
const ops = buildDeleteOps(scene, ids, "Cut");
|
|
71
|
+
const ops = buildDeleteOps(scene, ids, "Cut", { takeHiddenSources: true });
|
|
65
72
|
if (ops.length > 0) {
|
|
66
73
|
if (applyOps) applyOps(ops, "Cut");
|
|
67
74
|
else scene.applyBatch(ops, "Cut", defaultCommitAdapter(scene, selection.adapterMethods));
|
|
@@ -117,11 +124,14 @@ var PASTE_EVENT_HANDLERS = [kitWeaselJsonHandler];
|
|
|
117
124
|
var clipboardPasteEventAction = {
|
|
118
125
|
id: "clipboard.pasteEvent",
|
|
119
126
|
label: "Paste copied nodes",
|
|
120
|
-
defaultBinding: {
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
127
|
+
defaultBinding: [{
|
|
128
|
+
spec: {
|
|
129
|
+
kind: "paste",
|
|
130
|
+
types: ["text/plain"],
|
|
131
|
+
mods: ANY_INGEST_MODS
|
|
132
|
+
},
|
|
133
|
+
opts: { id: "clipboard.pasteEvent.paste" }
|
|
134
|
+
}],
|
|
125
135
|
requires: [...INGEST_REQUIRES],
|
|
126
136
|
invoker: {
|
|
127
137
|
timing: "immediate",
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"action.js","names":[],"sources":["../../../../src/interactions/actions/clipboard/action.ts"],"sourcesContent":["import { defaultCommitAdapter } from '../defaultCommitAdapter';\nimport { ActionDisabledReason, type Action } from '@weasel-js/routing';\nimport { buildDeleteOps } from '../defaults/delete';\nimport { requiresSelection } from '../defaults/requiresSelection';\nimport { kitWeaselJsonHandler } from 'features/ingestion/weaselJsonHandler';\nimport { ANY_INGEST_MODS, claimable, INGEST_REQUIRES, ingestFromEvent } from '../defaults/ingest';\nimport { icon } from '../../../icons.gen';\n\n/**\n * Static descriptor for the `clipboard.copy` Action (Cmd/Ctrl+C).\n */\nexport const clipboardCopyAction: Action & { requires: string[] } = {\n id: 'clipboard.copy',\n label: 'Copy',\n icon: icon('copy'),\n group: 'clipboard',\n defaultBinding: { kind: 'key', key: 'c', mods: { mod: true } },\n // Same gate as `duplicate`: a mode that can neither edit the page nor own a\n // selection has nothing to copy. Notably excludes `text-edit`, where Cmd+C\n // must stay the browser's own copy of the caret range.\n eligible: { capability: ['edits-page', 'creates-selection'] },\n // `selection` is read by the `enabled` gate, not the invoker — the\n // dispatcher builds deps for both, and an undeclared read is undefined.\n requires: ['clipboard', 'selection'],\n invoker: {\n timing: 'immediate',\n run: (deps) => {\n deps.clipboard?.copy();\n },\n },\n enabled: requiresSelection,\n};\n\n/**\n * Static descriptor for the `clipboard.cut` Action (Cmd/Ctrl+X) — copy, then\n * the same batched delete `deleteAction` performs, as one undo entry.\n */\nexport const clipboardCutAction: Action & { requires: string[] } = {\n id: 'clipboard.cut',\n label: 'Cut',\n icon: icon('cut'),\n group: 'clipboard',\n defaultBinding: { kind: 'key', key: 'x', mods: { mod: true } },\n eligible: { capability: 'edits-page' },\n requires: ['clipboard', 'scene', 'selection', 'applyOps'],\n invoker: {\n timing: 'immediate',\n run: (deps) => {\n const clipboard = deps.clipboard;\n const selection = deps.selection;\n const scene = deps.scene;\n const applyOps = deps.applyOps;\n if (!clipboard || !selection || !scene) return;\n const ids = selection.get();\n if (ids.length === 0) return;\n\n // Snapshot before removal — `snapshotSelection` reads live nodes.\n clipboard.copy();\n\n const ops = buildDeleteOps(scene, ids, 'Cut');\n if (ops.length > 0) {\n if (applyOps) applyOps(ops, 'Cut');\n else scene.applyBatch(ops, 'Cut', defaultCommitAdapter(scene, selection.adapterMethods));\n }\n selection.set([]);\n },\n },\n enabled: requiresSelection,\n};\n\n/**\n * Static descriptor for the `clipboard.paste` Action — what a Paste button or\n * menu item triggers, pasting the last copy this canvas made. It has no key\n * binding: Cmd/Ctrl+V already arrives as a DOM `paste` event, which the\n * dispatcher routes to `clipboard.pasteEvent` or `ingest`, and a binding here\n * would fire alongside it and paste twice.\n */\nexport const clipboardPasteAction: Action & { requires: string[] } = {\n id: 'clipboard.paste',\n label: 'Paste',\n icon: icon('paste'),\n group: 'clipboard',\n eligible: { capability: 'edits-page' },\n requires: ['clipboard'],\n invoker: {\n timing: 'immediate',\n run: (deps, params) => {\n const x = params?.worldX;\n const y = params?.worldY;\n deps.clipboard?.paste(typeof x === 'number' && typeof y === 'number' ? { worldX: x, worldY: y } : undefined);\n },\n },\n enabled: (deps) => {\n const clipboard = deps?.clipboard;\n return clipboard && !clipboard.isEmpty() ? true : ActionDisabledReason.NotApplicable;\n },\n};\n\nconst PASTE_EVENT_HANDLERS = [kitWeaselJsonHandler];\n\n/**\n * Static descriptor for the `clipboard.pasteEvent` Action — Cmd/Ctrl+V on a\n * canvas that edits and does not ingest. It answers the DOM `paste` event by\n * pasting nodes a kit canvas copied to the OS clipboard, in this tab or\n * another, and nothing else: an image, SVG, or file on the clipboard, and\n * every consumer content handler, need `ingest`. `ingest` binds the same\n * event and takes this payload among the rest, so `useStandardActions`\n * leaves this one unregistered wherever `ingest` is registered.\n *\n * Bound to `text/plain` because that is the only flavor of a copy a paste\n * event carries; a paste without text stays the page's.\n */\nexport const clipboardPasteEventAction: Action & { requires: string[] } = {\n id: 'clipboard.pasteEvent',\n label: 'Paste copied nodes',\n defaultBinding: { kind: 'paste', types: ['text/plain'], mods: ANY_INGEST_MODS },\n requires: [...INGEST_REQUIRES],\n invoker: {\n timing: 'immediate',\n run: (deps, params) => ingestFromEvent(deps, params, { handlers: PASTE_EVENT_HANDLERS }),\n },\n enabled: (_deps, _at, carried) => claimable(carried, PASTE_EVENT_HANDLERS),\n};\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"action.js","names":[],"sources":["../../../../src/interactions/actions/clipboard/action.ts"],"sourcesContent":["import { defaultCommitAdapter } from '../defaultCommitAdapter';\nimport { ActionDisabledReason, type Action } from '@weasel-js/routing';\nimport { buildDeleteOps } from '../defaults/delete';\nimport { requiresSelection } from '../defaults/requiresSelection';\nimport { kitWeaselJsonHandler } from 'features/ingestion/weaselJsonHandler';\nimport { ANY_INGEST_MODS, claimable, INGEST_REQUIRES, ingestFromEvent } from '../defaults/ingest';\nimport { icon } from '../../../icons.gen';\n\n/**\n * Static descriptor for the `clipboard.copy` Action (Cmd/Ctrl+C).\n */\nexport const clipboardCopyAction: Action & { requires: string[] } = {\n id: 'clipboard.copy',\n label: 'Copy',\n icon: icon('copy'),\n group: 'clipboard',\n defaultBinding: [{ spec: { kind: 'key', key: 'c', mods: { mod: true } }, opts: { id: 'clipboard.copy.key' } }],\n // Same gate as `duplicate`: a mode that can neither edit the page nor own a\n // selection has nothing to copy. Notably excludes `text-edit`, where Cmd+C\n // must stay the browser's own copy of the caret range.\n eligible: { capability: ['edits-page', 'creates-selection'] },\n // `selection` is read by the `enabled` gate, not the invoker — the\n // dispatcher builds deps for both, and an undeclared read is undefined.\n requires: ['clipboard', 'selection'],\n invoker: {\n timing: 'immediate',\n run: (deps) => {\n deps.clipboard?.copy();\n },\n },\n enabled: requiresSelection,\n};\n\n/**\n * Static descriptor for the `clipboard.cut` Action (Cmd/Ctrl+X) — copy, then\n * the same batched delete `deleteAction` performs, as one undo entry: the\n * sources a path effect hid go too.\n */\nexport const clipboardCutAction: Action & { requires: string[] } = {\n id: 'clipboard.cut',\n label: 'Cut',\n icon: icon('cut'),\n group: 'clipboard',\n defaultBinding: [{ spec: { kind: 'key', key: 'x', mods: { mod: true } }, opts: { id: 'clipboard.cut.key' } }],\n eligible: { capability: 'edits-page' },\n requires: ['clipboard', 'scene', 'selection', 'applyOps'],\n invoker: {\n timing: 'immediate',\n run: (deps) => {\n const clipboard = deps.clipboard;\n const selection = deps.selection;\n const scene = deps.scene;\n const applyOps = deps.applyOps;\n if (!clipboard || !selection || !scene) return;\n const ids = selection.get();\n if (ids.length === 0) return;\n\n // Snapshot before removal — `snapshotSelection` reads live nodes.\n clipboard.copy();\n\n const ops = buildDeleteOps(scene, ids, 'Cut', { takeHiddenSources: true });\n if (ops.length > 0) {\n if (applyOps) applyOps(ops, 'Cut');\n else scene.applyBatch(ops, 'Cut', defaultCommitAdapter(scene, selection.adapterMethods));\n }\n selection.set([]);\n },\n },\n enabled: requiresSelection,\n};\n\n/**\n * Static descriptor for the `clipboard.paste` Action — what a Paste button or\n * menu item triggers, pasting the last copy this canvas made. It has no key\n * binding: Cmd/Ctrl+V already arrives as a DOM `paste` event, which the\n * dispatcher routes to `clipboard.pasteEvent` or `ingest`, and a binding here\n * would fire alongside it and paste twice.\n */\nexport const clipboardPasteAction: Action & { requires: string[] } = {\n id: 'clipboard.paste',\n label: 'Paste',\n icon: icon('paste'),\n group: 'clipboard',\n eligible: { capability: 'edits-page' },\n requires: ['clipboard'],\n invoker: {\n timing: 'immediate',\n run: (deps, params) => {\n const x = params?.worldX;\n const y = params?.worldY;\n deps.clipboard?.paste(typeof x === 'number' && typeof y === 'number' ? { worldX: x, worldY: y } : undefined);\n },\n },\n enabled: (deps) => {\n const clipboard = deps?.clipboard;\n return clipboard && !clipboard.isEmpty() ? true : ActionDisabledReason.NotApplicable;\n },\n};\n\nconst PASTE_EVENT_HANDLERS = [kitWeaselJsonHandler];\n\n/**\n * Static descriptor for the `clipboard.pasteEvent` Action — Cmd/Ctrl+V on a\n * canvas that edits and does not ingest. It answers the DOM `paste` event by\n * pasting nodes a kit canvas copied to the OS clipboard, in this tab or\n * another, and nothing else: an image, SVG, or file on the clipboard, and\n * every consumer content handler, need `ingest`. `ingest` binds the same\n * event and takes this payload among the rest, so `useStandardActions`\n * leaves this one unregistered wherever `ingest` is registered.\n *\n * Bound to `text/plain` because that is the only flavor of a copy a paste\n * event carries; a paste without text stays the page's.\n */\nexport const clipboardPasteEventAction: Action & { requires: string[] } = {\n id: 'clipboard.pasteEvent',\n label: 'Paste copied nodes',\n defaultBinding: [{ spec: { kind: 'paste', types: ['text/plain'], mods: ANY_INGEST_MODS }, opts: { id: 'clipboard.pasteEvent.paste' } }],\n requires: [...INGEST_REQUIRES],\n invoker: {\n timing: 'immediate',\n run: (deps, params) => ingestFromEvent(deps, params, { handlers: PASTE_EVENT_HANDLERS }),\n },\n enabled: (_deps, _at, carried) => claimable(carried, PASTE_EVENT_HANDLERS),\n};\n"],"mappings":"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"}
|