@weasel-js/core 1.9.4 → 1.10.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +918 -0
- package/README.md +38 -3
- package/dist/WeaselProvider.js +5 -7
- package/dist/WeaselProvider.js.map +1 -1
- package/dist/affordances/composeAffordanceLayer.js +92 -84
- package/dist/affordances/composeAffordanceLayer.js.map +1 -1
- package/dist/affordances/cornerResize.js +3 -2
- package/dist/affordances/cornerResize.js.map +1 -1
- package/dist/affordances/hitAffordanceRegions.js +71 -101
- package/dist/affordances/hitAffordanceRegions.js.map +1 -1
- package/dist/affordances/pathAnchors.js +50 -28
- package/dist/affordances/pathAnchors.js.map +1 -1
- package/dist/affordances/rotateCursor.js +12 -0
- package/dist/affordances/rotateCursor.js.map +1 -0
- package/dist/affordances/rotationHandle.js +44 -46
- package/dist/affordances/rotationHandle.js.map +1 -1
- package/dist/animation/behaviors/coast.js +21 -0
- package/dist/animation/behaviors/coast.js.map +1 -0
- package/dist/animation/behaviors/coastByWrite.js +107 -0
- package/dist/animation/behaviors/coastByWrite.js.map +1 -0
- package/dist/animation/behaviors/coastOnTargets.js +94 -0
- package/dist/animation/behaviors/coastOnTargets.js.map +1 -0
- package/dist/animation/behaviors/momentum.js +48 -136
- package/dist/animation/behaviors/momentum.js.map +1 -1
- package/dist/animation/clipTargets.js +12 -0
- package/dist/animation/clipTargets.js.map +1 -0
- package/dist/animation/index.js +15 -20
- package/dist/animation/poseHelpers.js +112 -33
- package/dist/animation/poseHelpers.js.map +1 -1
- package/dist/animation/poseTarget.js +115 -0
- package/dist/animation/poseTarget.js.map +1 -0
- package/dist/animation/reflow.js +113 -83
- package/dist/animation/reflow.js.map +1 -1
- package/dist/animation/rewind.js +66 -0
- package/dist/animation/rewind.js.map +1 -0
- package/dist/animation/rig/bindRig.js +85 -53
- package/dist/animation/rig/bindRig.js.map +1 -1
- package/dist/animation/rig/rigNode.js +99 -0
- package/dist/animation/rig/rigNode.js.map +1 -0
- package/dist/animation/rig/rigSeat.js +59 -0
- package/dist/animation/rig/rigSeat.js.map +1 -0
- package/dist/animation/rig/skinBinding.js +64 -0
- package/dist/animation/rig/skinBinding.js.map +1 -0
- package/dist/animation/rig/useRig.js +31 -16
- package/dist/animation/rig/useRig.js.map +1 -1
- package/dist/animation/wrappers/animateLifecycle.js +8 -7
- package/dist/animation/wrappers/animateLifecycle.js.map +1 -1
- package/dist/animation/wrappers/animateOnSetPose.js +31 -31
- package/dist/animation/wrappers/animateOnSetPose.js.map +1 -1
- package/dist/animation/wrappers/instantPose.js.map +1 -1
- package/dist/animation/writtenPoseTarget.js +33 -0
- package/dist/animation/writtenPoseTarget.js.map +1 -0
- package/dist/autoPoseDescriptor-DHg5KqaJ.d.ts +27 -0
- package/dist/barrel/canvas.js +32 -0
- package/dist/barrel/chrome.js +10 -10
- package/dist/barrel/input.js +16 -17
- package/dist/barrel/interactions.js +34 -37
- package/dist/barrel/paint.js +11 -18
- package/dist/barrel/paths.js +13 -19
- package/dist/barrel/renderer.js +14 -20
- package/dist/barrel/routing.js +54 -47
- package/dist/barrel/scene.js +37 -0
- package/dist/barrel/text.js +9 -18
- package/dist/barrel/viewport.js +44 -51
- package/dist/canvas/Canvas.js +270 -475
- package/dist/canvas/Canvas.js.map +1 -1
- package/dist/canvas/CanvasView.js +168 -190
- package/dist/canvas/CanvasView.js.map +1 -1
- package/dist/canvas/CursorCoordsHud.js +24 -25
- package/dist/canvas/CursorCoordsHud.js.map +1 -1
- package/dist/canvas/DrawCanvas.js +39 -56
- package/dist/canvas/DrawCanvas.js.map +1 -1
- package/dist/canvas/ModalityHud.js.map +1 -1
- package/dist/canvas/NodeShape.js +28 -29
- package/dist/canvas/NodeShape.js.map +1 -1
- package/dist/canvas/PickHud.js.map +1 -1
- package/dist/canvas/SceneCanvas/DevHuds.js +40 -0
- package/dist/canvas/SceneCanvas/DevHuds.js.map +1 -0
- package/dist/canvas/SceneCanvas/GestureDispatcherMounter.js +66 -107
- package/dist/canvas/SceneCanvas/GestureDispatcherMounter.js.map +1 -1
- package/dist/canvas/SceneCanvas/PointerProviderIfRoot.js +33 -36
- package/dist/canvas/SceneCanvas/PointerProviderIfRoot.js.map +1 -1
- package/dist/canvas/SceneCanvas/StandardActionsRegistrar.js +38 -50
- package/dist/canvas/SceneCanvas/StandardActionsRegistrar.js.map +1 -1
- package/dist/canvas/SceneCanvas/ToolKeybindingsMounter.js +3 -3
- package/dist/canvas/SceneCanvas/ToolKeybindingsMounter.js.map +1 -1
- package/dist/canvas/SceneCanvas/coordTrace.js +37 -1
- package/dist/canvas/SceneCanvas/coordTrace.js.map +1 -1
- package/dist/canvas/SceneCanvas/defaultNodeProperties.js +319 -270
- package/dist/canvas/SceneCanvas/defaultNodeProperties.js.map +1 -1
- package/dist/canvas/SceneCanvas/defaultNodeRouting.js +1 -1
- package/dist/canvas/SceneCanvas/defaultNodeRouting.js.map +1 -1
- package/dist/canvas/SceneCanvas/dispatcherGestureBounds.js.map +1 -1
- package/dist/canvas/SceneCanvas/features.js +71 -62
- package/dist/canvas/SceneCanvas/features.js.map +1 -1
- package/dist/canvas/SceneCanvas/insertPreviewCommands.js +97 -0
- package/dist/canvas/SceneCanvas/insertPreviewCommands.js.map +1 -0
- package/dist/canvas/SceneCanvas/isDev.js.map +1 -1
- package/dist/canvas/SceneCanvas/poseGeometry.js +33 -37
- package/dist/canvas/SceneCanvas/poseGeometry.js.map +1 -1
- package/dist/canvas/SceneCanvas/props.js +15 -14
- package/dist/canvas/SceneCanvas/props.js.map +1 -1
- package/dist/canvas/SceneCanvas/scenePointQuery.js +50 -0
- package/dist/canvas/SceneCanvas/scenePointQuery.js.map +1 -0
- package/dist/canvas/SceneCanvas/shapeGeneratorProperties.js +52 -0
- package/dist/canvas/SceneCanvas/shapeGeneratorProperties.js.map +1 -0
- package/dist/canvas/SceneCanvas/toolRegistry.js +23 -0
- package/dist/canvas/SceneCanvas/toolRegistry.js.map +1 -0
- package/dist/canvas/SceneCanvas/useActionTunings.js +17 -0
- package/dist/canvas/SceneCanvas/useActionTunings.js.map +1 -0
- package/dist/canvas/SceneCanvas/useActionsPropResolver.js +6 -1
- package/dist/canvas/SceneCanvas/useActionsPropResolver.js.map +1 -1
- package/dist/canvas/SceneCanvas/useBuiltinShapeTools.js.map +1 -1
- package/dist/canvas/SceneCanvas/useBuiltinTools.js +21 -0
- package/dist/canvas/SceneCanvas/useBuiltinTools.js.map +1 -0
- package/dist/canvas/SceneCanvas/useCanvasCamera.js +46 -0
- package/dist/canvas/SceneCanvas/useCanvasCamera.js.map +1 -0
- package/dist/canvas/SceneCanvas/useCanvasDispatcher.js +20 -0
- package/dist/canvas/SceneCanvas/useCanvasDispatcher.js.map +1 -0
- package/dist/canvas/SceneCanvas/useCanvasSelection.js +16 -0
- package/dist/canvas/SceneCanvas/useCanvasSelection.js.map +1 -0
- package/dist/canvas/SceneCanvas/useCanvasTools.js +67 -0
- package/dist/canvas/SceneCanvas/useCanvasTools.js.map +1 -0
- package/dist/canvas/SceneCanvas/useDispatcherOverlayLayer.js +49 -113
- package/dist/canvas/SceneCanvas/useDispatcherOverlayLayer.js.map +1 -1
- package/dist/canvas/SceneCanvas/useHeldModifiers.js +20 -0
- package/dist/canvas/SceneCanvas/useHeldModifiers.js.map +1 -0
- package/dist/canvas/SceneCanvas/useNodeAtPoint.js +26 -0
- package/dist/canvas/SceneCanvas/useNodeAtPoint.js.map +1 -0
- package/dist/canvas/SceneCanvas/useNodeKinds.js +26 -0
- package/dist/canvas/SceneCanvas/useNodeKinds.js.map +1 -0
- package/dist/canvas/SceneCanvas/usePreviewGhostLayer.js +51 -41
- package/dist/canvas/SceneCanvas/usePreviewGhostLayer.js.map +1 -1
- package/dist/canvas/SceneCanvas/useSceneCanvasHandle.js +47 -0
- package/dist/canvas/SceneCanvas/useSceneCanvasHandle.js.map +1 -0
- package/dist/canvas/SceneCanvas/useSceneCanvasLayers.js +66 -0
- package/dist/canvas/SceneCanvas/useSceneCanvasLayers.js.map +1 -0
- package/dist/canvas/SceneCanvas/useSceneChrome.js +59 -0
- package/dist/canvas/SceneCanvas/useSceneChrome.js.map +1 -0
- package/dist/canvas/SceneCanvas/useSceneRedrawSources.js +23 -0
- package/dist/canvas/SceneCanvas/useSceneRedrawSources.js.map +1 -0
- package/dist/canvas/SceneCanvas/useSceneSelectTool.js +65 -101
- package/dist/canvas/SceneCanvas/useSceneSelectTool.js.map +1 -1
- package/dist/canvas/SceneCanvas/useSceneSlotLayers.js +37 -0
- package/dist/canvas/SceneCanvas/useSceneSlotLayers.js.map +1 -0
- package/dist/canvas/SceneCanvas/useSelectionOverlayLayer.js +38 -0
- package/dist/canvas/SceneCanvas/useSelectionOverlayLayer.js.map +1 -0
- package/dist/canvas/SceneCanvas/useViewLayerGate.js +20 -0
- package/dist/canvas/SceneCanvas/useViewLayerGate.js.map +1 -0
- package/dist/canvas/SceneCanvas/useViewportActions.js +9 -1
- package/dist/canvas/SceneCanvas/useViewportActions.js.map +1 -1
- package/dist/canvas/SceneCanvas/worldPointAt.js +8 -0
- package/dist/canvas/SceneCanvas/worldPointAt.js.map +1 -0
- package/dist/canvas/SceneCanvas.js +301 -708
- package/dist/canvas/SceneCanvas.js.map +1 -1
- package/dist/canvas/SceneViewCanvas.js +41 -47
- package/dist/canvas/SceneViewCanvas.js.map +1 -1
- package/dist/canvas/SurfaceCanvas.js +40 -0
- package/dist/canvas/SurfaceCanvas.js.map +1 -0
- package/dist/canvas/adapterDerivedPath.js +26 -0
- package/dist/canvas/adapterDerivedPath.js.map +1 -0
- package/dist/canvas/adapterPickSource.js +34 -0
- package/dist/canvas/adapterPickSource.js.map +1 -0
- package/dist/canvas/affordanceAt.js +12 -2
- package/dist/canvas/affordanceAt.js.map +1 -1
- package/dist/canvas/buildSceneLayer.js +81 -61
- package/dist/canvas/buildSceneLayer.js.map +1 -1
- package/dist/canvas/buildSceneTree.js +56 -34
- package/dist/canvas/buildSceneTree.js.map +1 -1
- package/dist/canvas/canvasRenderer.js +40 -44
- package/dist/canvas/canvasRenderer.js.map +1 -1
- package/dist/canvas/colorOverrides.js.map +1 -1
- package/dist/canvas/copiesAbove.js +27 -0
- package/dist/canvas/copiesAbove.js.map +1 -0
- package/dist/canvas/defaultDrawOne.js +25 -24
- package/dist/canvas/defaultDrawOne.js.map +1 -1
- package/dist/canvas/deps/areaSelect.js +4 -4
- package/dist/canvas/deps/areaSelect.js.map +1 -1
- package/dist/canvas/deps/debug.js.map +1 -1
- package/dist/canvas/deps/editAnchors.js +47 -71
- package/dist/canvas/deps/editAnchors.js.map +1 -1
- package/dist/canvas/deps/geometryProjection.js.map +1 -1
- package/dist/canvas/deps/hitTestArea.js +45 -25
- package/dist/canvas/deps/hitTestArea.js.map +1 -1
- package/dist/canvas/deps/insert.js +149 -104
- package/dist/canvas/deps/insert.js.map +1 -1
- package/dist/canvas/deps/lassoSelect.js +5 -5
- package/dist/canvas/deps/lassoSelect.js.map +1 -1
- package/dist/canvas/deps/layout.js +9 -15
- package/dist/canvas/deps/layout.js.map +1 -1
- package/dist/canvas/deps/poseDescriptor.js +1 -1
- package/dist/canvas/deps/poseDescriptor.js.map +1 -1
- package/dist/canvas/deps/resizePolicy.js.map +1 -1
- package/dist/canvas/deps/slice.js +44 -45
- package/dist/canvas/deps/slice.js.map +1 -1
- package/dist/canvas/deps/textEdit.js +8 -8
- package/dist/canvas/deps/textEdit.js.map +1 -1
- package/dist/canvas/deps/view.js.map +1 -1
- package/dist/canvas/derivedPath.js +69 -43
- package/dist/canvas/derivedPath.js.map +1 -1
- package/dist/canvas/drawEnvelope.js +8 -4
- package/dist/canvas/drawEnvelope.js.map +1 -1
- package/dist/canvas/getNodeAtPoint.js +2 -6
- package/dist/canvas/getNodeAtPoint.js.map +1 -1
- package/dist/canvas/hud.module.js.map +1 -1
- package/dist/canvas/insertPreviewExtent.js +33 -31
- package/dist/canvas/insertPreviewExtent.js.map +1 -1
- package/dist/canvas/layerOrder.js.map +1 -1
- package/dist/canvas/layerSlots.js +6 -1
- package/dist/canvas/layerSlots.js.map +1 -1
- package/dist/canvas/nodeShapes/derivedPainter.js +12 -12
- package/dist/canvas/nodeShapes/derivedPainter.js.map +1 -1
- package/dist/canvas/nodeShapes/imagePainter.js +10 -10
- package/dist/canvas/nodeShapes/imagePainter.js.map +1 -1
- package/dist/canvas/nodeShapes/memo.js.map +1 -1
- package/dist/canvas/nodeShapes/nodePaint.js +34 -23
- package/dist/canvas/nodeShapes/nodePaint.js.map +1 -1
- package/dist/canvas/nodeShapes/pathPainter.js +23 -22
- package/dist/canvas/nodeShapes/pathPainter.js.map +1 -1
- package/dist/canvas/nodeShapes/poseBox.js +6 -6
- package/dist/canvas/nodeShapes/poseBox.js.map +1 -1
- package/dist/canvas/nodeShapes/rectFallbackPainter.js +8 -8
- package/dist/canvas/nodeShapes/rectFallbackPainter.js.map +1 -1
- package/dist/canvas/nodeShapes/shapePainter.js +16 -16
- package/dist/canvas/nodeShapes/shapePainter.js.map +1 -1
- package/dist/canvas/nodeShapes/textPainter.js +1 -1
- package/dist/canvas/nodeShapes/textPainter.js.map +1 -1
- package/dist/canvas/overChildren.js +29 -0
- package/dist/canvas/overChildren.js.map +1 -0
- package/dist/canvas/overlayRoleStrokes.js.map +1 -1
- package/dist/canvas/paintCull.js +6 -8
- package/dist/canvas/paintCull.js.map +1 -1
- package/dist/{features/cursor → canvas}/paintedCursorLayer.js +2 -2
- package/dist/canvas/paintedCursorLayer.js.map +1 -0
- package/dist/canvas/pickReach.js +23 -0
- package/dist/canvas/pickReach.js.map +1 -0
- package/dist/canvas/pickWalk.js +43 -70
- package/dist/canvas/pickWalk.js.map +1 -1
- package/dist/canvas/planeClips.js +18 -19
- package/dist/canvas/planeClips.js.map +1 -1
- package/dist/canvas/poseCascade.js +41 -0
- package/dist/canvas/poseCascade.js.map +1 -0
- package/dist/canvas/poseRotation.js +1 -3
- package/dist/canvas/poseRotation.js.map +1 -1
- package/dist/canvas/rasterReadback.js +22 -0
- package/dist/canvas/rasterReadback.js.map +1 -0
- package/dist/canvas/renderDebugSnapshot.js +12 -12
- package/dist/canvas/renderDebugSnapshot.js.map +1 -1
- package/dist/canvas/renderNeeds.js +3 -3
- package/dist/canvas/renderNeeds.js.map +1 -1
- package/dist/canvas/renderSceneToPixels.js +64 -83
- package/dist/canvas/renderSceneToPixels.js.map +1 -1
- package/dist/canvas/sceneAdapter.js +59 -144
- package/dist/canvas/sceneAdapter.js.map +1 -1
- package/dist/canvas/sceneClipboard.js +1 -1
- package/dist/canvas/sceneClipboard.js.map +1 -1
- package/dist/canvas/sceneLayerPaint.js +4 -4
- package/dist/canvas/sceneLayerPaint.js.map +1 -1
- package/dist/canvas/sceneSlotWiring.js +10 -9
- package/dist/canvas/sceneSlotWiring.js.map +1 -1
- package/dist/canvas/sceneViewRender.js +37 -42
- package/dist/canvas/sceneViewRender.js.map +1 -1
- package/dist/canvas/slopsDebugLayer.js +4 -4
- package/dist/canvas/slopsDebugLayer.js.map +1 -1
- package/dist/canvas/useCanvasRenderer.js +23 -11
- package/dist/canvas/useCanvasRenderer.js.map +1 -1
- package/dist/canvas/useCanvasSurface.js +31 -0
- package/dist/canvas/useCanvasSurface.js.map +1 -0
- package/dist/canvas/useCanvasView.js +51 -44
- package/dist/canvas/useCanvasView.js.map +1 -1
- package/dist/canvas/useFrameLoop.js +11 -12
- package/dist/canvas/useFrameLoop.js.map +1 -1
- package/dist/canvas/useHostAnchor.js +35 -33
- package/dist/canvas/useHostAnchor.js.map +1 -1
- package/dist/canvas/useLateContentRedraw.js +8 -8
- package/dist/canvas/useLateContentRedraw.js.map +1 -1
- package/dist/canvas/useSceneAdapter.js +22 -0
- package/dist/canvas/useSceneAdapter.js.map +1 -0
- package/dist/canvas/useSceneLayerList.js +4 -14
- package/dist/canvas/useSceneLayerList.js.map +1 -1
- package/dist/canvas/useSurfaceInput.js +39 -0
- package/dist/canvas/useSurfaceInput.js.map +1 -0
- package/dist/canvas/useToolCursor.js +29 -0
- package/dist/canvas/useToolCursor.js.map +1 -0
- package/dist/canvas/useViewHelpers.js +46 -85
- package/dist/canvas/useViewHelpers.js.map +1 -1
- package/dist/canvas/viewInputs.js.map +1 -1
- package/dist/canvas/viewRegistry.js +40 -34
- package/dist/canvas/viewRegistry.js.map +1 -1
- package/dist/canvas/watchElementMove.js +43 -0
- package/dist/canvas/watchElementMove.js.map +1 -0
- package/dist/canvas/wrapNodeOutput.js +7 -2
- package/dist/canvas/wrapNodeOutput.js.map +1 -1
- package/dist/clipboard.d.ts +7 -14
- package/dist/{types-B4iJRHC3.d.ts → clone-C0eADtS0.d.ts} +129 -84
- package/dist/clone.d.ts +4 -8
- package/dist/clone.js +0 -2
- package/dist/core/device/targets.js.map +1 -1
- package/dist/core/device/useDeviceProfile.js +13 -13
- package/dist/core/device/useDeviceProfile.js.map +1 -1
- package/dist/{interactions/actions/resize → core/geometry}/autoPoseDescriptor.js +8 -7
- package/dist/core/geometry/autoPoseDescriptor.js.map +1 -0
- package/dist/core/geometry/pathPoseDescriptor.js +88 -0
- package/dist/core/geometry/pathPoseDescriptor.js.map +1 -0
- package/dist/core/geometry/poseDescriptor.js +102 -29
- package/dist/core/geometry/poseDescriptor.js.map +1 -1
- package/dist/core/geometry/regionHit.js +35 -37
- package/dist/core/geometry/regionHit.js.map +1 -1
- package/dist/core/geometry/targetFrame.js +94 -0
- package/dist/core/geometry/targetFrame.js.map +1 -0
- package/dist/core/geometry/unionBounds.js +4 -5
- package/dist/core/geometry/unionBounds.js.map +1 -1
- package/dist/core/layers/backgroundFill.js +31 -0
- package/dist/core/layers/backgroundFill.js.map +1 -0
- package/dist/{features/groups → core/layers}/children.js +2 -4
- package/dist/core/layers/children.js.map +1 -0
- package/dist/{features/focus → core/layers}/gateLayer.js +2 -2
- package/dist/core/layers/gateLayer.js.map +1 -0
- package/dist/core/layers/layerGroup.js +40 -0
- package/dist/core/layers/layerGroup.js.map +1 -0
- package/dist/core/layers/render.js +50 -76
- package/dist/core/layers/render.js.map +1 -1
- package/dist/core/ops/create.js +2 -2
- package/dist/core/ops/create.js.map +1 -1
- package/dist/core/ops/createHistory.js +9 -9
- package/dist/core/ops/createHistory.js.map +1 -1
- package/dist/core/ops/delete.js +19 -23
- package/dist/core/ops/delete.js.map +1 -1
- package/dist/core/ops/reorder/index.js +3 -7
- package/dist/core/ops/reorder/index.js.map +1 -1
- package/dist/core/ops/reorder/setChildOrder.js +2 -4
- package/dist/core/ops/reorder/setChildOrder.js.map +1 -1
- package/dist/core/ops/reparent.js +0 -1
- package/dist/core/ops/reparent.js.map +1 -1
- package/dist/core/ops/slot.js +3 -6
- package/dist/core/ops/slot.js.map +1 -1
- package/dist/core/pages/fitViewToPage.js +15 -0
- package/dist/core/pages/fitViewToPage.js.map +1 -0
- package/dist/core/pages/pages.js +65 -0
- package/dist/core/pages/pages.js.map +1 -0
- package/dist/core/pages/pagesLayer.js +27 -0
- package/dist/core/pages/pagesLayer.js.map +1 -0
- package/dist/core/paint/meshKind.js +16 -0
- package/dist/core/paint/meshKind.js.map +1 -0
- package/dist/{features/meshPaint/lazyKind.js → core/paint/meshKindLazy.js} +104 -93
- package/dist/core/paint/meshKindLazy.js.map +1 -0
- package/dist/core/paint/paintKindEntry.js +8 -0
- package/dist/core/paint/paintKindEntry.js.map +1 -0
- package/dist/core/paint/paintKinds.js +144 -0
- package/dist/core/paint/paintKinds.js.map +1 -0
- package/dist/core/paint/registerMesh.js +7 -0
- package/dist/core/paint/registerMesh.js.map +1 -0
- package/dist/core/scene/NodeProperties.js.map +1 -1
- package/dist/core/scene/NodeRouting.js.map +1 -1
- package/dist/core/scene/arrivalWindow.js +65 -64
- package/dist/core/scene/arrivalWindow.js.map +1 -1
- package/dist/core/scene/boundOps.js +40 -0
- package/dist/core/scene/boundOps.js.map +1 -0
- package/dist/core/scene/composeFrame.js +9 -6
- package/dist/core/scene/composeFrame.js.map +1 -1
- package/dist/core/scene/composePose.js +105 -0
- package/dist/core/scene/composePose.js.map +1 -0
- package/dist/core/scene/depMemo.js +31 -6
- package/dist/core/scene/depMemo.js.map +1 -1
- package/dist/core/scene/derivedPath.js +19 -20
- package/dist/core/scene/derivedPath.js.map +1 -1
- package/dist/core/scene/editMode.js +26 -0
- package/dist/core/scene/editMode.js.map +1 -0
- package/dist/core/scene/effectivePose.js +42 -39
- package/dist/core/scene/effectivePose.js.map +1 -1
- package/dist/core/scene/fieldEdits.js +98 -0
- package/dist/core/scene/fieldEdits.js.map +1 -0
- package/dist/core/scene/historyFacade.js +122 -70
- package/dist/core/scene/historyFacade.js.map +1 -1
- package/dist/core/scene/historyForm.js +6 -0
- package/dist/core/scene/historyForm.js.map +1 -0
- package/dist/core/scene/kitOps.js +83 -71
- package/dist/core/scene/kitOps.js.map +1 -1
- package/dist/core/scene/kitRegistry.js.map +1 -1
- package/dist/core/scene/layerStack.js +105 -12
- package/dist/core/scene/layerStack.js.map +1 -1
- package/dist/core/scene/layoutPass.js +58 -59
- package/dist/core/scene/layoutPass.js.map +1 -1
- package/dist/{features/groups → core/scene}/nestedHit.js +3 -3
- package/dist/core/scene/nestedHit.js.map +1 -0
- package/dist/core/scene/nodeFnFields.js +16 -9
- package/dist/core/scene/nodeFnFields.js.map +1 -1
- package/dist/core/scene/nodeMemo.js.map +1 -1
- package/dist/core/scene/nodeStore.js +72 -71
- package/dist/core/scene/nodeStore.js.map +1 -1
- package/dist/core/scene/notifier.js +37 -0
- package/dist/core/scene/notifier.js.map +1 -0
- package/dist/core/scene/opTable.js +50 -0
- package/dist/core/scene/opTable.js.map +1 -0
- package/dist/core/scene/outerOps.js +67 -0
- package/dist/core/scene/outerOps.js.map +1 -0
- package/dist/core/scene/poseHold.js +39 -0
- package/dist/core/scene/poseHold.js.map +1 -0
- package/dist/core/scene/poseOverrides.js +44 -36
- package/dist/core/scene/poseOverrides.js.map +1 -1
- package/dist/core/scene/poseSnapshot.js.map +1 -1
- package/dist/core/scene/reconcileSpecs.js +4 -3
- package/dist/core/scene/reconcileSpecs.js.map +1 -1
- package/dist/core/scene/recorder.js +86 -0
- package/dist/core/scene/recorder.js.map +1 -0
- package/dist/core/scene/renderOrder.js.map +1 -1
- package/dist/core/scene/scene.js +81 -690
- package/dist/core/scene/scene.js.map +1 -1
- package/dist/core/scene/sceneEdits.js +58 -0
- package/dist/core/scene/sceneEdits.js.map +1 -0
- package/dist/core/scene/sceneMutators.js +49 -0
- package/dist/core/scene/sceneMutators.js.map +1 -0
- package/dist/core/scene/scenePoseAdapter.js +16 -0
- package/dist/core/scene/scenePoseAdapter.js.map +1 -0
- package/dist/core/scene/sceneRecording.js +91 -0
- package/dist/core/scene/sceneRecording.js.map +1 -0
- package/dist/core/scene/sceneSelection.js +28 -0
- package/dist/core/scene/sceneSelection.js.map +1 -0
- package/dist/core/scene/sceneState.js +49 -0
- package/dist/core/scene/sceneState.js.map +1 -0
- package/dist/core/scene/serialization.js +8 -5
- package/dist/core/scene/serialization.js.map +1 -1
- package/dist/core/scene/staleReplay.js +51 -0
- package/dist/core/scene/staleReplay.js.map +1 -0
- package/dist/core/scene/statedFields.js +9 -0
- package/dist/core/scene/statedFields.js.map +1 -0
- package/dist/core/scene/treeEdits.js +127 -0
- package/dist/core/scene/treeEdits.js.map +1 -0
- package/dist/core/scene/treeReads.js +26 -0
- package/dist/core/scene/treeReads.js.map +1 -0
- package/dist/core/scene/types.js.map +1 -1
- package/dist/{features/groups → core/scene}/unionOfChildren.js +3 -3
- package/dist/core/scene/unionOfChildren.js.map +1 -0
- package/dist/core/scene/unitScopes.js +13 -0
- package/dist/core/scene/unitScopes.js.map +1 -0
- package/dist/core/scene/useScene.js.map +1 -1
- package/dist/core/selection/readOnlySelection.js +32 -0
- package/dist/core/selection/readOnlySelection.js.map +1 -0
- package/dist/core/selection/usePublishSceneSelection.js +26 -0
- package/dist/core/selection/usePublishSceneSelection.js.map +1 -0
- package/dist/core/selection/useSelection.js +34 -25
- package/dist/core/selection/useSelection.js.map +1 -1
- package/dist/core/shapeKinds.js.map +1 -1
- package/dist/core/stylus/stylus.js.map +1 -1
- package/dist/core/stylus/usePointerStylus.js.map +1 -1
- package/dist/core/usePaintKinds.js +1 -1
- package/dist/core/usePaintKinds.js.map +1 -1
- package/dist/core/viewport/clientToWorld.js.map +1 -1
- package/dist/core/viewport/fitViewToBounds.js.map +1 -1
- package/dist/core/viewport/parallax.js.map +1 -1
- package/dist/core/viewport/screenSlop.js +11 -11
- package/dist/core/viewport/screenSlop.js.map +1 -1
- package/dist/core/viewport/useCanvasSize.js.map +1 -1
- package/dist/core/viewport/useDecayLoop.js +31 -33
- package/dist/core/viewport/useDecayLoop.js.map +1 -1
- package/dist/core/viewport/useNodeOverlayFrame.js +84 -0
- package/dist/core/viewport/useNodeOverlayFrame.js.map +1 -0
- package/dist/core/viewport/useViewAnimation.js +113 -53
- package/dist/core/viewport/useViewAnimation.js.map +1 -1
- package/dist/core/viewport/view.js +14 -11
- package/dist/core/viewport/view.js.map +1 -1
- package/dist/core/viewport/wheelHandler.js.map +1 -1
- package/dist/core/viewport/zoomAt.js +11 -2
- package/dist/core/viewport/zoomAt.js.map +1 -1
- package/dist/{cornerHandles-CtCb8a3G.d.ts → cornerHandles-BSKbyuvQ.d.ts} +11 -24
- package/dist/debug/createDebugOverlayLayer.js +100 -100
- package/dist/debug/createDebugOverlayLayer.js.map +1 -1
- package/dist/debug/createDebugSink.js.map +1 -1
- package/dist/debug/frameStats.js.map +1 -1
- package/dist/debug/useDebugSink.js +52 -0
- package/dist/debug/useDebugSink.js.map +1 -0
- package/dist/features/chrome-caps/buildChromeCtx.js.map +1 -1
- package/dist/features/chrome-caps/conditions.js.map +1 -1
- package/dist/features/chrome-caps/defaults.js.map +1 -1
- package/dist/features/chrome-caps/resolve.js.map +1 -1
- package/dist/features/chrome-caps/useChromeCaps.js +54 -0
- package/dist/features/chrome-caps/useChromeCaps.js.map +1 -0
- package/dist/features/chrome-caps/useHoverTracking.js.map +1 -1
- package/dist/features/ingestion/contentHandlers.js +25 -19
- package/dist/features/ingestion/contentHandlers.js.map +1 -1
- package/dist/features/ingestion/imageHandler.js +21 -24
- package/dist/features/ingestion/imageHandler.js.map +1 -1
- package/dist/features/ingestion/openFilePicker.js.map +1 -1
- package/dist/features/ingestion/placement.js +16 -0
- package/dist/features/ingestion/placement.js.map +1 -0
- package/dist/features/ingestion/svgHandler.js +5 -0
- package/dist/features/ingestion/svgHandler.js.map +1 -1
- package/dist/features/ingestion/textHandler.js +28 -0
- package/dist/features/ingestion/textHandler.js.map +1 -0
- package/dist/features/ingestion/useCanvasIngestion.js +48 -0
- package/dist/features/ingestion/useCanvasIngestion.js.map +1 -0
- package/dist/features/ingestion/weaselJsonHandler.js +5 -0
- package/dist/features/ingestion/weaselJsonHandler.js.map +1 -1
- package/dist/features/longPress/longPressFeedback.js.map +1 -1
- package/dist/features/modes/modeLayers.js +7 -7
- package/dist/features/modes/modeLayers.js.map +1 -1
- package/dist/features/paths/editablePath.js +63 -0
- package/dist/features/paths/editablePath.js.map +1 -0
- package/dist/features/paths/index.js +9 -16
- package/dist/features/paths/pathEditState.js +41 -0
- package/dist/features/paths/pathEditState.js.map +1 -0
- package/dist/features/paths/pathEditingOverlayLayer.js +36 -38
- package/dist/features/paths/pathEditingOverlayLayer.js.map +1 -1
- package/dist/features/paths/pathLayer.js +3 -2
- package/dist/features/paths/pathLayer.js.map +1 -1
- package/dist/features/paths/penPreviewLayer.js +86 -88
- package/dist/features/paths/penPreviewLayer.js.map +1 -1
- package/dist/features/paths/shapeGenerator.js +89 -0
- package/dist/features/paths/shapeGenerator.js.map +1 -0
- package/dist/features/paths/usePathEdit.js +34 -0
- package/dist/features/paths/usePathEdit.js.map +1 -0
- package/dist/features/poseRun/usePoseRun.js +44 -57
- package/dist/features/poseRun/usePoseRun.js.map +1 -1
- package/dist/features/selection/overlay.js +170 -178
- package/dist/features/selection/overlay.js.map +1 -1
- package/dist/features/text/index.js +6 -0
- package/dist/features/text/textLayer.js +1 -1
- package/dist/features/text/textLayer.js.map +1 -1
- package/dist/features/text/useSceneTextEdit.js +119 -88
- package/dist/features/text/useSceneTextEdit.js.map +1 -1
- package/dist/features/viewports/viewResolver.js +28 -24
- package/dist/features/viewports/viewResolver.js.map +1 -1
- package/dist/features/viewports/viewportLayer.js +25 -36
- package/dist/features/viewports/viewportLayer.js.map +1 -1
- package/dist/icons/SliceIcon.js +24 -0
- package/dist/icons/SliceIcon.js.map +1 -0
- package/dist/index.d.ts +5200 -8777
- package/dist/index.js +284 -320
- package/dist/input/keyState.js +14 -14
- package/dist/interactions/actions/actionShortcuts.js.map +1 -1
- package/dist/interactions/actions/{defaults/align.js → align/action.js} +15 -16
- package/dist/interactions/actions/align/action.js.map +1 -0
- package/dist/interactions/actions/align/align.js +24 -24
- package/dist/interactions/actions/align/align.js.map +1 -1
- package/dist/interactions/actions/booleans/action.js +65 -0
- package/dist/interactions/actions/booleans/action.js.map +1 -0
- package/dist/interactions/actions/booleans/booleans.js +74 -83
- package/dist/interactions/actions/booleans/booleans.js.map +1 -1
- package/dist/interactions/actions/booleans/operands.js +40 -0
- package/dist/interactions/actions/booleans/operands.js.map +1 -0
- package/dist/interactions/actions/booleans/pieces.js +45 -0
- package/dist/interactions/actions/booleans/pieces.js.map +1 -0
- package/dist/interactions/actions/booleans/placement.js +24 -0
- package/dist/interactions/actions/booleans/placement.js.map +1 -0
- package/dist/interactions/actions/booleans/useBooleans.js +11 -9
- package/dist/interactions/actions/booleans/useBooleans.js.map +1 -1
- package/dist/interactions/actions/booleans/useBooleansAdapter.js.map +1 -1
- package/dist/interactions/actions/{defaults/clipboard.js → clipboard/action.js} +19 -19
- package/dist/interactions/actions/clipboard/action.js.map +1 -0
- package/dist/interactions/actions/clipboard/clipboardOps.js +15 -15
- package/dist/interactions/actions/clipboard/clipboardOps.js.map +1 -1
- package/dist/interactions/actions/clipboard/wireFormat.js.map +1 -1
- package/dist/interactions/actions/clone/action.js +103 -0
- package/dist/interactions/actions/clone/action.js.map +1 -0
- package/dist/interactions/actions/clone/behaviors.js +52 -0
- package/dist/interactions/actions/clone/behaviors.js.map +1 -0
- package/dist/interactions/actions/defaultCommitAdapter.js +10 -37
- package/dist/interactions/actions/defaultCommitAdapter.js.map +1 -1
- package/dist/interactions/actions/defaults/anchorEditing.js +69 -74
- package/dist/interactions/actions/defaults/anchorEditing.js.map +1 -1
- package/dist/interactions/actions/defaults/anchorHandles.js +42 -0
- package/dist/interactions/actions/defaults/anchorHandles.js.map +1 -0
- package/dist/interactions/actions/defaults/anchorJoin.js +92 -0
- package/dist/interactions/actions/defaults/anchorJoin.js.map +1 -0
- package/dist/interactions/actions/defaults/areaSelect.js.map +1 -1
- package/dist/interactions/actions/defaults/bendSegment.js +46 -0
- package/dist/interactions/actions/defaults/bendSegment.js.map +1 -0
- package/dist/interactions/actions/defaults/cancelGesture.js.map +1 -1
- package/dist/interactions/actions/defaults/clearSelection.js.map +1 -1
- package/dist/interactions/actions/defaults/copySubtree.js +1 -1
- package/dist/interactions/actions/defaults/copySubtree.js.map +1 -1
- package/dist/interactions/actions/defaults/createPaintAction.js.map +1 -1
- package/dist/interactions/actions/defaults/delete.js.map +1 -1
- package/dist/interactions/actions/defaults/duplicate.js +36 -21
- package/dist/interactions/actions/defaults/duplicate.js.map +1 -1
- package/dist/interactions/actions/defaults/enterPathEdit.js +19 -7
- package/dist/interactions/actions/defaults/enterPathEdit.js.map +1 -1
- package/dist/interactions/actions/defaults/enterTextEdit.js.map +1 -1
- package/dist/interactions/actions/defaults/group.js +35 -40
- package/dist/interactions/actions/defaults/group.js.map +1 -1
- package/dist/interactions/actions/defaults/icons/anchorIcons.js +75 -0
- package/dist/interactions/actions/defaults/icons/anchorIcons.js.map +1 -0
- package/dist/interactions/actions/defaults/icons/booleanIcons.js +24 -1
- package/dist/interactions/actions/defaults/icons/booleanIcons.js.map +1 -1
- package/dist/interactions/actions/defaults/icons/editIcons.js +35 -8
- package/dist/interactions/actions/defaults/icons/editIcons.js.map +1 -1
- package/dist/interactions/actions/defaults/icons/outlineIcons.js +39 -1
- package/dist/interactions/actions/defaults/icons/outlineIcons.js.map +1 -1
- package/dist/interactions/actions/defaults/ingest.js +19 -15
- package/dist/interactions/actions/defaults/ingest.js.map +1 -1
- package/dist/interactions/actions/defaults/insertPathAnchor.js +18 -34
- package/dist/interactions/actions/defaults/insertPathAnchor.js.map +1 -1
- package/dist/interactions/actions/defaults/nudge.js +43 -39
- package/dist/interactions/actions/defaults/nudge.js.map +1 -1
- package/dist/interactions/actions/defaults/pinchZoom.js +29 -29
- package/dist/interactions/actions/defaults/pinchZoom.js.map +1 -1
- package/dist/interactions/actions/defaults/requiresSelection.js.map +1 -1
- package/dist/interactions/actions/defaults/segmentUnder.js +22 -0
- package/dist/interactions/actions/defaults/segmentUnder.js.map +1 -0
- package/dist/interactions/actions/defaults/setFill.js +9 -3
- package/dist/interactions/actions/defaults/setFill.js.map +1 -1
- package/dist/interactions/actions/defaults/setFillOpacity.js +4 -1
- package/dist/interactions/actions/defaults/setFillOpacity.js.map +1 -1
- package/dist/interactions/actions/defaults/setStroke.js.map +1 -1
- package/dist/interactions/actions/defaults/sliceOps.js +20 -22
- package/dist/interactions/actions/defaults/sliceOps.js.map +1 -1
- package/dist/interactions/actions/defaults/toolActivate.js.map +1 -1
- package/dist/interactions/actions/defaults/toolResetToDefault.js.map +1 -1
- package/dist/interactions/actions/defaults/viewportDragPan.js +1 -1
- package/dist/interactions/actions/defaults/viewportDragPan.js.map +1 -1
- package/dist/interactions/actions/defaults/viewportWheelPan.js.map +1 -1
- package/dist/interactions/actions/defaults/viewportZoom.js +82 -79
- package/dist/interactions/actions/defaults/viewportZoom.js.map +1 -1
- package/dist/interactions/actions/{defaults/distribute.js → distribute/action.js} +18 -19
- package/dist/interactions/actions/distribute/action.js.map +1 -0
- package/dist/interactions/actions/distribute/distribute.js +15 -15
- package/dist/interactions/actions/distribute/distribute.js.map +1 -1
- package/dist/interactions/actions/edit-anchors/action.js +101 -0
- package/dist/interactions/actions/edit-anchors/action.js.map +1 -0
- package/dist/interactions/actions/edit-anchors/geometry.js +2 -4
- package/dist/interactions/actions/edit-anchors/geometry.js.map +1 -1
- package/dist/interactions/actions/edit-anchors/preview.js +26 -0
- package/dist/interactions/actions/edit-anchors/preview.js.map +1 -0
- package/dist/interactions/actions/edit-anchors/symmetry.js +11 -0
- package/dist/interactions/actions/edit-anchors/symmetry.js.map +1 -0
- package/dist/interactions/actions/flip/action.js +124 -0
- package/dist/interactions/actions/flip/action.js.map +1 -0
- package/dist/interactions/actions/flip/helpers.js +1 -1
- package/dist/interactions/actions/flip/helpers.js.map +1 -1
- package/dist/interactions/actions/geometryProjection.js.map +1 -1
- package/dist/interactions/actions/gestureFrames.js +18 -0
- package/dist/interactions/actions/gestureFrames.js.map +1 -0
- package/dist/interactions/actions/gestureLifecycle.js +47 -20
- package/dist/interactions/actions/gestureLifecycle.js.map +1 -1
- package/dist/interactions/actions/insert/action.js +79 -0
- package/dist/interactions/actions/insert/action.js.map +1 -0
- package/dist/interactions/actions/insert/commit.js +28 -0
- package/dist/interactions/actions/insert/commit.js.map +1 -0
- package/dist/interactions/actions/insert/extras.js +65 -0
- package/dist/interactions/actions/insert/extras.js.map +1 -0
- package/dist/interactions/actions/insert/frame.js +55 -0
- package/dist/interactions/actions/insert/frame.js.map +1 -0
- package/dist/interactions/actions/insert/geometry.js +35 -0
- package/dist/interactions/actions/insert/geometry.js.map +1 -0
- package/dist/interactions/actions/insert/repositionAction.js +31 -0
- package/dist/interactions/actions/insert/repositionAction.js.map +1 -0
- package/dist/interactions/actions/insert/rotateAction.js +21 -0
- package/dist/interactions/actions/insert/rotateAction.js.map +1 -0
- package/dist/interactions/actions/insert/session.js +59 -0
- package/dist/interactions/actions/insert/session.js.map +1 -0
- package/dist/interactions/actions/insert/shape.js +34 -0
- package/dist/interactions/actions/insert/shape.js.map +1 -0
- package/dist/interactions/actions/lasso-select/action.js +143 -0
- package/dist/interactions/actions/lasso-select/action.js.map +1 -0
- package/dist/interactions/actions/move/action.js +91 -0
- package/dist/interactions/actions/move/action.js.map +1 -0
- package/dist/interactions/actions/move/behaviors/layoutDrop.js +51 -0
- package/dist/interactions/actions/move/behaviors/layoutDrop.js.map +1 -0
- package/dist/interactions/actions/move/behaviors/reparentOnDrop.js +15 -0
- package/dist/interactions/actions/move/behaviors/reparentOnDrop.js.map +1 -0
- package/dist/interactions/actions/move/behaviors/snapToContainer.js +35 -28
- package/dist/interactions/actions/move/behaviors/snapToContainer.js.map +1 -1
- package/dist/interactions/actions/move/capture.js +108 -0
- package/dist/interactions/actions/move/capture.js.map +1 -0
- package/dist/interactions/actions/move/commit/index.js +41 -0
- package/dist/interactions/actions/move/commit/index.js.map +1 -0
- package/dist/interactions/actions/move/commit/layoutDrop.js +44 -0
- package/dist/interactions/actions/move/commit/layoutDrop.js.map +1 -0
- package/dist/interactions/actions/move/commit/layoutRelease.js +100 -0
- package/dist/interactions/actions/move/commit/layoutRelease.js.map +1 -0
- package/dist/interactions/actions/move/commit/rebase.js +18 -0
- package/dist/interactions/actions/move/commit/rebase.js.map +1 -0
- package/dist/interactions/actions/move/commit/reparent.js +65 -0
- package/dist/interactions/actions/move/commit/reparent.js.map +1 -0
- package/dist/interactions/actions/move/delta.js +51 -0
- package/dist/interactions/actions/move/delta.js.map +1 -0
- package/dist/interactions/actions/move/frame.js +47 -0
- package/dist/interactions/actions/move/frame.js.map +1 -0
- package/dist/interactions/actions/move/gestureAdapter.js +15 -40
- package/dist/interactions/actions/move/gestureAdapter.js.map +1 -1
- package/dist/interactions/actions/move/landedDescendants.js +8 -8
- package/dist/interactions/actions/move/layout/container.js +94 -0
- package/dist/interactions/actions/move/layout/container.js.map +1 -0
- package/dist/interactions/actions/move/layout/dragged.js +58 -0
- package/dist/interactions/actions/move/layout/dragged.js.map +1 -0
- package/dist/interactions/actions/move/layout/dropPass.js +122 -0
- package/dist/interactions/actions/move/layout/dropPass.js.map +1 -0
- package/dist/interactions/actions/move/layout/exits.js +38 -0
- package/dist/interactions/actions/move/layout/exits.js.map +1 -0
- package/dist/interactions/actions/move/layout/glide.js +48 -0
- package/dist/interactions/actions/move/layout/glide.js.map +1 -0
- package/dist/interactions/actions/move/session.js +63 -0
- package/dist/interactions/actions/move/session.js.map +1 -0
- package/dist/interactions/actions/move/translate.js +61 -0
- package/dist/interactions/actions/move/translate.js.map +1 -0
- package/dist/interactions/actions/outlines/createOutlines.js +17 -64
- package/dist/interactions/actions/outlines/createOutlines.js.map +1 -1
- package/dist/interactions/actions/outlines/createOutlinesAction.js +51 -0
- package/dist/interactions/actions/outlines/createOutlinesAction.js.map +1 -0
- package/dist/interactions/actions/outlines/outlineStroke.js +72 -0
- package/dist/interactions/actions/outlines/outlineStroke.js.map +1 -0
- package/dist/interactions/actions/outlines/outlineStrokeAction.js +37 -0
- package/dist/interactions/actions/outlines/outlineStrokeAction.js.map +1 -0
- package/dist/interactions/actions/outlines/replaceWithPaths.js +54 -0
- package/dist/interactions/actions/outlines/replaceWithPaths.js.map +1 -0
- package/dist/interactions/actions/outlines/strokeRegion.js +27 -0
- package/dist/interactions/actions/outlines/strokeRegion.js.map +1 -0
- package/dist/interactions/actions/pathCommands/cutJoin.js +102 -0
- package/dist/interactions/actions/pathCommands/cutJoin.js.map +1 -0
- package/dist/interactions/actions/pathCommands/livePathEdit.js +64 -0
- package/dist/interactions/actions/pathCommands/livePathEdit.js.map +1 -0
- package/dist/interactions/actions/pathCommands/pathNodes.js +99 -0
- package/dist/interactions/actions/pathCommands/pathNodes.js.map +1 -0
- package/dist/interactions/actions/pathCommands/simplifyOffset.js +42 -0
- package/dist/interactions/actions/pathCommands/simplifyOffset.js.map +1 -0
- package/dist/interactions/actions/planeInput.js.map +1 -1
- package/dist/interactions/actions/pointerState.js +12 -0
- package/dist/interactions/actions/pointerState.js.map +1 -0
- package/dist/interactions/actions/poseDescriptorDep.js +1 -1
- package/dist/interactions/actions/poseDescriptorDep.js.map +1 -1
- package/dist/interactions/actions/poseFrame.js +26 -26
- package/dist/interactions/actions/poseFrame.js.map +1 -1
- package/dist/interactions/actions/resize/action.js +66 -0
- package/dist/interactions/actions/resize/action.js.map +1 -0
- package/dist/interactions/actions/resize/behaviors/lockAspect.js.map +1 -1
- package/dist/interactions/actions/resize/boxFrame.js +16 -0
- package/dist/interactions/actions/resize/boxFrame.js.map +1 -0
- package/dist/interactions/actions/resize/capture.js +85 -0
- package/dist/interactions/actions/resize/capture.js.map +1 -0
- package/dist/interactions/actions/resize/commit.js +69 -0
- package/dist/interactions/actions/resize/commit.js.map +1 -0
- package/dist/interactions/actions/resize/frame.js +88 -0
- package/dist/interactions/actions/resize/frame.js.map +1 -0
- package/dist/interactions/actions/resize/pointSnap.js +111 -0
- package/dist/interactions/actions/resize/pointSnap.js.map +1 -0
- package/dist/interactions/actions/resize/replay.js +47 -0
- package/dist/interactions/actions/resize/replay.js.map +1 -0
- package/dist/interactions/actions/resize/ruleBounds.js +9 -0
- package/dist/interactions/actions/resize/ruleBounds.js.map +1 -0
- package/dist/interactions/actions/resize/session.js +63 -0
- package/dist/interactions/actions/resize/session.js.map +1 -0
- package/dist/interactions/actions/resolveOverlays.js +2 -1
- package/dist/interactions/actions/resolveOverlays.js.map +1 -1
- package/dist/interactions/actions/resolvePreviews.js.map +1 -1
- package/dist/interactions/actions/rotate/action.js +71 -0
- package/dist/interactions/actions/rotate/action.js.map +1 -0
- package/dist/interactions/actions/rotate/behaviors/index.js +7 -0
- package/dist/interactions/actions/rotate/behaviors/index.js.map +1 -0
- package/dist/interactions/actions/rotate/behaviors/snapRotation.js +12 -0
- package/dist/interactions/actions/rotate/behaviors/snapRotation.js.map +1 -0
- package/dist/interactions/actions/rotate/commit.js +40 -0
- package/dist/interactions/actions/rotate/commit.js.map +1 -0
- package/dist/interactions/actions/rotate/frame.js +65 -0
- package/dist/interactions/actions/rotate/frame.js.map +1 -0
- package/dist/interactions/actions/rotate/handle.js +12 -12
- package/dist/interactions/actions/rotate/handle.js.map +1 -1
- package/dist/interactions/actions/rotate/replay.js +22 -0
- package/dist/interactions/actions/rotate/replay.js.map +1 -0
- package/dist/interactions/actions/rotate/session.js +102 -0
- package/dist/interactions/actions/rotate/session.js.map +1 -0
- package/dist/interactions/actions/spatialReference.js.map +1 -1
- package/dist/interactions/actions/transform-again/action.js +63 -0
- package/dist/interactions/actions/transform-again/action.js.map +1 -0
- package/dist/interactions/actions/transform-again/memory.js +35 -0
- package/dist/interactions/actions/transform-again/memory.js.map +1 -0
- package/dist/interactions/actions/useStandardActions.js +84 -61
- package/dist/interactions/actions/useStandardActions.js.map +1 -1
- package/dist/interactions/gestures/pointerDrag/pointerDrag.js +61 -42
- package/dist/interactions/gestures/pointerDrag/pointerDrag.js.map +1 -1
- package/dist/interactions/gestures/shared/originProjection.js +1 -1
- package/dist/interactions/gestures/shared/originProjection.js.map +1 -1
- package/dist/interactions/gestures/shared/screenTolerance.js +8 -2
- package/dist/interactions/gestures/shared/screenTolerance.js.map +1 -1
- package/dist/interactions/gestures/shared/snap.js.map +1 -1
- package/dist/math-CYUjoyyU.d.ts +33 -0
- package/dist/math.d.ts +5 -2
- package/dist/math.js +6 -6
- package/dist/mesh.d.ts +4 -268
- package/dist/mesh.js +3 -7
- package/dist/move.d.ts +6 -4
- package/dist/{originProjection-gHnOup4e.d.ts → originProjection-CoNVpITV.d.ts} +1 -1
- package/dist/patterns-builtin.d.ts +1 -118
- package/dist/patterns-builtin.js +2 -3
- package/dist/poseDescriptor-Bqk-11Rl.d.ts +73 -0
- package/dist/renderer.d.ts +1 -92
- package/dist/renderer.js +2 -19
- package/dist/resize.d.ts +11 -22
- package/dist/resize.js +1 -1
- package/dist/style.css +1 -1
- package/dist/test-hook/install.js.map +1 -1
- package/dist/test-hook/useTestHook.js +22 -0
- package/dist/test-hook/useTestHook.js.map +1 -0
- package/dist/test-seams-D0pyV3pR.d.ts +149 -0
- package/dist/test-seams.d.ts +4 -4
- package/dist/test-seams.js +2 -2
- package/dist/tools/builtin/bone/boneActions.js +130 -0
- package/dist/tools/builtin/bone/boneActions.js.map +1 -0
- package/dist/tools/builtin/bone/boneOverlay.js +58 -0
- package/dist/tools/builtin/bone/boneOverlay.js.map +1 -0
- package/dist/tools/builtin/bone/placedRig.js +24 -0
- package/dist/tools/builtin/bone/placedRig.js.map +1 -0
- package/dist/tools/builtin/bone/rigEditState.js +21 -0
- package/dist/tools/builtin/bone/rigEditState.js.map +1 -0
- package/dist/tools/builtin/bone/useBoneTool.js +98 -0
- package/dist/tools/builtin/bone/useBoneTool.js.map +1 -0
- package/dist/tools/builtin/ellipse/useEllipseTool.js +16 -15
- package/dist/tools/builtin/ellipse/useEllipseTool.js.map +1 -1
- package/dist/tools/builtin/eyedropper/useEyedropperTool.js.map +1 -1
- package/dist/tools/builtin/hand/useHandTool.js.map +1 -1
- package/dist/tools/builtin/image/useImageTool.js.map +1 -1
- package/dist/tools/builtin/lasso/useLassoTool.js.map +1 -1
- package/dist/tools/builtin/line/useLineTool.js +16 -15
- package/dist/tools/builtin/line/useLineTool.js.map +1 -1
- package/dist/tools/builtin/pen/usePenTool.js +162 -164
- package/dist/tools/builtin/pen/usePenTool.js.map +1 -1
- package/dist/tools/builtin/pencil/usePencilTool.js.map +1 -1
- package/dist/tools/builtin/pickTopMostHit.js +11 -14
- package/dist/tools/builtin/pickTopMostHit.js.map +1 -1
- package/dist/tools/builtin/polygon/usePolygonTool.js +17 -15
- package/dist/tools/builtin/polygon/usePolygonTool.js.map +1 -1
- package/dist/tools/builtin/rect/useRectTool.js +15 -14
- package/dist/tools/builtin/rect/useRectTool.js.map +1 -1
- package/dist/tools/builtin/select/adapterPointQuery.js +40 -0
- package/dist/tools/builtin/select/adapterPointQuery.js.map +1 -0
- package/dist/tools/builtin/select/selectionContributions.js +5 -5
- package/dist/tools/builtin/select/selectionContributions.js.map +1 -1
- package/dist/tools/builtin/select/useSelectTool.js +44 -71
- package/dist/tools/builtin/select/useSelectTool.js.map +1 -1
- package/dist/tools/builtin/shared/pointerFollower.js.map +1 -1
- package/dist/tools/builtin/slice/useSliceTool.js +69 -72
- package/dist/tools/builtin/slice/useSliceTool.js.map +1 -1
- package/dist/tools/builtin/star/useStarTool.js +18 -16
- package/dist/tools/builtin/star/useStarTool.js.map +1 -1
- package/dist/tools/builtin/text/useTextTool.js +10 -2
- package/dist/tools/builtin/text/useTextTool.js.map +1 -1
- package/dist/tools/builtin/weight/useWeightTool.js +77 -0
- package/dist/tools/builtin/weight/useWeightTool.js.map +1 -0
- package/dist/tools/builtin/weight/weightActions.js +112 -0
- package/dist/tools/builtin/weight/weightActions.js.map +1 -0
- package/dist/tools/builtin/weight/weightOverlay.js +61 -0
- package/dist/tools/builtin/weight/weightOverlay.js.map +1 -0
- package/dist/tools/overlayBinding.js.map +1 -1
- package/dist/tools/useKeybindings.js +20 -14
- package/dist/tools/useKeybindings.js.map +1 -1
- package/dist/{types-k-5Oqh-U.d.ts → types-DBbbCy0i.d.ts} +103 -176
- package/dist/util/paint.js +1 -1
- package/dist/util/paint.js.map +1 -1
- package/dist/version.js +1 -1
- package/package.json +26 -21
- package/dist/animation/colorHelpers.js +0 -135
- package/dist/animation/colorHelpers.js.map +0 -1
- package/dist/animation/colorRegistry.js +0 -37
- package/dist/animation/colorRegistry.js.map +0 -1
- package/dist/animation/engine/axes.js +0 -36
- package/dist/animation/engine/axes.js.map +0 -1
- package/dist/animation/engine/codec.js +0 -170
- package/dist/animation/engine/codec.js.map +0 -1
- package/dist/animation/engine/integrator.js +0 -12
- package/dist/animation/engine/integrator.js.map +0 -1
- package/dist/animation/loop.js +0 -60
- package/dist/animation/loop.js.map +0 -1
- package/dist/animation/observe.js +0 -23
- package/dist/animation/observe.js.map +0 -1
- package/dist/animation/rig/blendPoses.js +0 -43
- package/dist/animation/rig/blendPoses.js.map +0 -1
- package/dist/animation/rig/mirrorPose.js +0 -19
- package/dist/animation/rig/mirrorPose.js.map +0 -1
- package/dist/animation/rig/resolveSkeleton.js +0 -33
- package/dist/animation/rig/resolveSkeleton.js.map +0 -1
- package/dist/animation/rig/solveIk.js +0 -103
- package/dist/animation/rig/solveIk.js.map +0 -1
- package/dist/animation/rig/types.js +0 -12
- package/dist/animation/rig/types.js.map +0 -1
- package/dist/animation/slew.js +0 -27
- package/dist/animation/slew.js.map +0 -1
- package/dist/animation/stagger.js +0 -146
- package/dist/animation/stagger.js.map +0 -1
- package/dist/animation/timeline/booking.js +0 -114
- package/dist/animation/timeline/booking.js.map +0 -1
- package/dist/animation/timeline/createTimeline.js +0 -125
- package/dist/animation/timeline/createTimeline.js.map +0 -1
- package/dist/animation/timeline/sampleTrack.js +0 -79
- package/dist/animation/timeline/sampleTrack.js.map +0 -1
- package/dist/animation/useAnimator.js +0 -388
- package/dist/animation/useAnimator.js.map +0 -1
- package/dist/autoPoseDescriptor-Ct7yqivU.d.ts +0 -108
- package/dist/builtins-DPcdghtB.d.ts +0 -1223
- package/dist/canvas/MinimapCanvas.js +0 -140
- package/dist/canvas/MinimapCanvas.js.map +0 -1
- package/dist/canvas/deps/poseComposition.js +0 -11
- package/dist/canvas/deps/poseComposition.js.map +0 -1
- package/dist/canvas/minimapMath.js +0 -82
- package/dist/canvas/minimapMath.js.map +0 -1
- package/dist/canvas/toolPreview.js +0 -39
- package/dist/canvas/toolPreview.js.map +0 -1
- package/dist/core/adapters/arrayAdapter.js +0 -94
- package/dist/core/adapters/arrayAdapter.js.map +0 -1
- package/dist/core/adapters/useArrayAdapter.js +0 -13
- package/dist/core/adapters/useArrayAdapter.js.map +0 -1
- package/dist/core/fillInPoseFrame.js +0 -102
- package/dist/core/fillInPoseFrame.js.map +0 -1
- package/dist/core/geometry/poseFrame.js +0 -44
- package/dist/core/geometry/poseFrame.js.map +0 -1
- package/dist/core/geometry/poseRotation.js +0 -58
- package/dist/core/geometry/poseRotation.js.map +0 -1
- package/dist/core/gradient.js +0 -136
- package/dist/core/gradient.js.map +0 -1
- package/dist/core/markerInset.js +0 -24
- package/dist/core/markerInset.js.map +0 -1
- package/dist/core/mixed.js +0 -6
- package/dist/core/mixed.js.map +0 -1
- package/dist/core/paintKinds.js +0 -156
- package/dist/core/paintKinds.js.map +0 -1
- package/dist/core/scene/pickability.js +0 -6
- package/dist/core/scene/pickability.js.map +0 -1
- package/dist/core/strokeMarkerShapes.js +0 -139
- package/dist/core/strokeMarkerShapes.js.map +0 -1
- package/dist/core/strokeMarkers.js +0 -28
- package/dist/core/strokeMarkers.js.map +0 -1
- package/dist/core/viewport/meanScale.js +0 -8
- package/dist/core/viewport/meanScale.js.map +0 -1
- package/dist/core/viewport/pxExtent.js +0 -42
- package/dist/core/viewport/pxExtent.js.map +0 -1
- package/dist/features/cursor/paintedCursorLayer.js.map +0 -1
- package/dist/features/focus/gateLayer.js.map +0 -1
- package/dist/features/focus/useCanvasFocus.js +0 -29
- package/dist/features/focus/useCanvasFocus.js.map +0 -1
- package/dist/features/groups/children.js.map +0 -1
- package/dist/features/groups/composePose.js +0 -67
- package/dist/features/groups/composePose.js.map +0 -1
- package/dist/features/groups/nestedHit.js.map +0 -1
- package/dist/features/groups/unionOfChildren.js.map +0 -1
- package/dist/features/images/imageCache.js +0 -104
- package/dist/features/images/imageCache.js.map +0 -1
- package/dist/features/ingestion/index.js +0 -8
- package/dist/features/meshPaint/bake.js +0 -79
- package/dist/features/meshPaint/bake.js.map +0 -1
- package/dist/features/meshPaint/bakeCache.js +0 -59
- package/dist/features/meshPaint/bakeCache.js.map +0 -1
- package/dist/features/meshPaint/handles.js +0 -86
- package/dist/features/meshPaint/handles.js.map +0 -1
- package/dist/features/meshPaint/lazyKind.js.map +0 -1
- package/dist/features/meshPaint/meshPaint.js +0 -239
- package/dist/features/meshPaint/meshPaint.js.map +0 -1
- package/dist/features/meshPaint/meshShader.js +0 -6
- package/dist/features/meshPaint/meshShader.js.map +0 -1
- package/dist/features/meshPaint/register.js +0 -7
- package/dist/features/meshPaint/register.js.map +0 -1
- package/dist/features/meshPaint/surface.js +0 -110
- package/dist/features/meshPaint/surface.js.map +0 -1
- package/dist/features/minimap/actions.js +0 -53
- package/dist/features/minimap/actions.js.map +0 -1
- package/dist/features/minimap/createMinimapContribution.js +0 -96
- package/dist/features/minimap/createMinimapContribution.js.map +0 -1
- package/dist/features/minimap/layers.js +0 -85
- package/dist/features/minimap/layers.js.map +0 -1
- package/dist/features/overlays/useNodeOverlayFrame.js +0 -103
- package/dist/features/overlays/useNodeOverlayFrame.js.map +0 -1
- package/dist/features/parallax/createParallaxLayer.js +0 -26
- package/dist/features/parallax/createParallaxLayer.js.map +0 -1
- package/dist/features/parallax/createParallaxPlane.js +0 -22
- package/dist/features/parallax/createParallaxPlane.js.map +0 -1
- package/dist/features/paths/anchorEdits.js +0 -167
- package/dist/features/paths/anchorEdits.js.map +0 -1
- package/dist/features/paths/anchors.js +0 -159
- package/dist/features/paths/anchors.js.map +0 -1
- package/dist/features/paths/booleans.js +0 -2
- package/dist/features/paths/markerCommands.js +0 -149
- package/dist/features/paths/markerCommands.js.map +0 -1
- package/dist/features/paths/markerSites.js +0 -59
- package/dist/features/paths/markerSites.js.map +0 -1
- package/dist/features/paths/markers.js +0 -95
- package/dist/features/paths/markers.js.map +0 -1
- package/dist/features/paths/nearestAnchor.js +0 -36
- package/dist/features/paths/nearestAnchor.js.map +0 -1
- package/dist/features/paths/pathInWorld.js +0 -41
- package/dist/features/paths/pathInWorld.js.map +0 -1
- package/dist/features/paths/poseDescriptor.js +0 -39
- package/dist/features/paths/poseDescriptor.js.map +0 -1
- package/dist/features/paths/strokeToPath.js +0 -40
- package/dist/features/paths/strokeToPath.js.map +0 -1
- package/dist/features/paths/tessellate/dash.js +0 -52
- package/dist/features/paths/tessellate/dash.js.map +0 -1
- package/dist/features/paths/tessellate/insets.js +0 -32
- package/dist/features/paths/tessellate/insets.js.map +0 -1
- package/dist/features/paths/tessellate/metric.js +0 -72
- package/dist/features/paths/tessellate/metric.js.map +0 -1
- package/dist/features/paths/tessellate/stroke.js +0 -170
- package/dist/features/paths/tessellate/stroke.js.map +0 -1
- package/dist/features/paths/tessellate/vertexWidths.js +0 -32
- package/dist/features/paths/tessellate/vertexWidths.js.map +0 -1
- package/dist/features/patterns/commandPaint.js +0 -18
- package/dist/features/patterns/commandPaint.js.map +0 -1
- package/dist/features/patterns/index.js +0 -11
- package/dist/features/patterns/index.js.map +0 -1
- package/dist/features/patterns/patterns-builtin.js +0 -38
- package/dist/features/patterns/patterns-builtin.js.map +0 -1
- package/dist/features/patterns/rasterizeTile.js +0 -17
- package/dist/features/patterns/rasterizeTile.js.map +0 -1
- package/dist/features/patterns/resolveSpec.js +0 -65
- package/dist/features/patterns/resolveSpec.js.map +0 -1
- package/dist/features/patterns/tileGeometry.js +0 -158
- package/dist/features/patterns/tileGeometry.js.map +0 -1
- package/dist/features/pointer/PointerContext.js +0 -45
- package/dist/features/pointer/PointerContext.js.map +0 -1
- package/dist/features/selection/SelectionContext.js +0 -51
- package/dist/features/selection/SelectionContext.js.map +0 -1
- package/dist/features/simulation/createSimulation.js +0 -61
- package/dist/features/simulation/createSimulation.js.map +0 -1
- package/dist/features/simulation/types.js +0 -6
- package/dist/features/simulation/types.js.map +0 -1
- package/dist/features/simulation/useSimulation.js +0 -74
- package/dist/features/simulation/useSimulation.js.map +0 -1
- package/dist/features/text/domOffsets.js +0 -82
- package/dist/features/text/domOffsets.js.map +0 -1
- package/dist/features/text/domRuns.js +0 -230
- package/dist/features/text/domRuns.js.map +0 -1
- package/dist/features/text/fitTextPose.js +0 -38
- package/dist/features/text/fitTextPose.js.map +0 -1
- package/dist/features/text/hitTest.js +0 -48
- package/dist/features/text/hitTest.js.map +0 -1
- package/dist/features/text/isTextData.js +0 -8
- package/dist/features/text/isTextData.js.map +0 -1
- package/dist/features/text/overlayDirection.js +0 -15
- package/dist/features/text/overlayDirection.js.map +0 -1
- package/dist/features/text/renderLabel.js +0 -14
- package/dist/features/text/renderLabel.js.map +0 -1
- package/dist/features/text/runs/effectiveRangeStyle.js +0 -66
- package/dist/features/text/runs/effectiveRangeStyle.js.map +0 -1
- package/dist/features/text/runs/flagRange.js +0 -53
- package/dist/features/text/runs/flagRange.js.map +0 -1
- package/dist/features/text/runs/rangeStyle.js +0 -133
- package/dist/features/text/runs/rangeStyle.js.map +0 -1
- package/dist/features/text/textCommand.js +0 -60
- package/dist/features/text/textCommand.js.map +0 -1
- package/dist/features/text/textToPath.js +0 -181
- package/dist/features/text/textToPath.js.map +0 -1
- package/dist/features/text/useTextEdit.js +0 -491
- package/dist/features/text/useTextEdit.js.map +0 -1
- package/dist/features/tiling/createTiledLayer.js +0 -65
- package/dist/features/tiling/createTiledLayer.js.map +0 -1
- package/dist/features/tiling/tiledProject.js +0 -14
- package/dist/features/tiling/tiledProject.js.map +0 -1
- package/dist/interactions/actions/clone/behaviors/cloneByAltDrag.js +0 -26
- package/dist/interactions/actions/clone/behaviors/cloneByAltDrag.js.map +0 -1
- package/dist/interactions/actions/defaults/align.js.map +0 -1
- package/dist/interactions/actions/defaults/booleans.js +0 -52
- package/dist/interactions/actions/defaults/booleans.js.map +0 -1
- package/dist/interactions/actions/defaults/clipboard.js.map +0 -1
- package/dist/interactions/actions/defaults/clone.js +0 -91
- package/dist/interactions/actions/defaults/clone.js.map +0 -1
- package/dist/interactions/actions/defaults/createOutlines.js +0 -47
- package/dist/interactions/actions/defaults/createOutlines.js.map +0 -1
- package/dist/interactions/actions/defaults/distribute.js.map +0 -1
- package/dist/interactions/actions/defaults/editAnchors.js +0 -100
- package/dist/interactions/actions/defaults/editAnchors.js.map +0 -1
- package/dist/interactions/actions/defaults/flip.js +0 -125
- package/dist/interactions/actions/defaults/flip.js.map +0 -1
- package/dist/interactions/actions/defaults/insert.js +0 -287
- package/dist/interactions/actions/defaults/insert.js.map +0 -1
- package/dist/interactions/actions/defaults/lassoSelect.js +0 -153
- package/dist/interactions/actions/defaults/lassoSelect.js.map +0 -1
- package/dist/interactions/actions/defaults/move.js +0 -778
- package/dist/interactions/actions/defaults/move.js.map +0 -1
- package/dist/interactions/actions/defaults/resize.js +0 -341
- package/dist/interactions/actions/defaults/resize.js.map +0 -1
- package/dist/interactions/actions/defaults/rotate.js +0 -185
- package/dist/interactions/actions/defaults/rotate.js.map +0 -1
- package/dist/interactions/actions/previewOverrides.js +0 -25
- package/dist/interactions/actions/previewOverrides.js.map +0 -1
- package/dist/interactions/actions/resize/autoPoseDescriptor.js.map +0 -1
- package/dist/layout/arrivals.js +0 -36
- package/dist/layout/arrivals.js.map +0 -1
- package/dist/math-J-ACHyEg.d.ts +0 -159
- package/dist/registerProgram-T9S_PfAX.d.ts +0 -208
- package/dist/renderer/DrawCommand.js +0 -6
- package/dist/renderer/DrawCommand.js.map +0 -1
- package/dist/renderer/WeaselRenderer.js +0 -333
- package/dist/renderer/WeaselRenderer.js.map +0 -1
- package/dist/renderer/batchClip.js +0 -46
- package/dist/renderer/batchClip.js.map +0 -1
- package/dist/renderer/cache/GLImageCache.js +0 -74
- package/dist/renderer/cache/GLImageCache.js.map +0 -1
- package/dist/renderer/cache/GLMeshCache.js +0 -102
- package/dist/renderer/cache/GLMeshCache.js.map +0 -1
- package/dist/renderer/cache/GLTextureCache.js +0 -68
- package/dist/renderer/cache/GLTextureCache.js.map +0 -1
- package/dist/renderer/cache/GradientRampAtlas.js +0 -82
- package/dist/renderer/cache/GradientRampAtlas.js.map +0 -1
- package/dist/renderer/cache/cache.js +0 -13
- package/dist/renderer/cache/cache.js.map +0 -1
- package/dist/renderer/cache/markerCommandCache.js +0 -63
- package/dist/renderer/cache/markerCommandCache.js.map +0 -1
- package/dist/renderer/cache/outlineMeshCache.js +0 -15
- package/dist/renderer/cache/outlineMeshCache.js.map +0 -1
- package/dist/renderer/cache/outlineStrokeMeshCache.js +0 -36
- package/dist/renderer/cache/outlineStrokeMeshCache.js.map +0 -1
- package/dist/renderer/cache/strokeMeshCache.js +0 -55
- package/dist/renderer/cache/strokeMeshCache.js.map +0 -1
- package/dist/renderer/cullDrawCommands.js +0 -90
- package/dist/renderer/cullDrawCommands.js.map +0 -1
- package/dist/renderer/draw/batch.js +0 -133
- package/dist/renderer/draw/batch.js.map +0 -1
- package/dist/renderer/draw/clip.js +0 -89
- package/dist/renderer/draw/clip.js.map +0 -1
- package/dist/renderer/draw/customShader.js +0 -230
- package/dist/renderer/draw/customShader.js.map +0 -1
- package/dist/renderer/draw/drawTriangles.js +0 -8
- package/dist/renderer/draw/drawTriangles.js.map +0 -1
- package/dist/renderer/draw/effects.js +0 -28
- package/dist/renderer/draw/effects.js.map +0 -1
- package/dist/renderer/draw/flushBatch.js +0 -35
- package/dist/renderer/draw/flushBatch.js.map +0 -1
- package/dist/renderer/draw/gradient.js +0 -90
- package/dist/renderer/draw/gradient.js.map +0 -1
- package/dist/renderer/draw/image.js +0 -38
- package/dist/renderer/draw/image.js.map +0 -1
- package/dist/renderer/draw/mesh.js +0 -16
- package/dist/renderer/draw/mesh.js.map +0 -1
- package/dist/renderer/draw/paintBind.js +0 -70
- package/dist/renderer/draw/paintBind.js.map +0 -1
- package/dist/renderer/draw/pathPaint.js +0 -142
- package/dist/renderer/draw/pathPaint.js.map +0 -1
- package/dist/renderer/draw/scratchPass.js +0 -83
- package/dist/renderer/draw/scratchPass.js.map +0 -1
- package/dist/renderer/draw/stencil.js +0 -28
- package/dist/renderer/draw/stencil.js.map +0 -1
- package/dist/renderer/draw/text.js +0 -167
- package/dist/renderer/draw/text.js.map +0 -1
- package/dist/renderer/draw/uniforms.js +0 -77
- package/dist/renderer/draw/uniforms.js.map +0 -1
- package/dist/renderer/draw.js +0 -79
- package/dist/renderer/draw.js.map +0 -1
- package/dist/renderer/drawBatch.js +0 -198
- package/dist/renderer/drawBatch.js.map +0 -1
- package/dist/renderer/effects/EffectTargets.js +0 -48
- package/dist/renderer/effects/EffectTargets.js.map +0 -1
- package/dist/renderer/effects/builtins.js +0 -31
- package/dist/renderer/effects/builtins.js.map +0 -1
- package/dist/renderer/effects/composite.js +0 -11
- package/dist/renderer/effects/composite.js.map +0 -1
- package/dist/renderer/effects/effectPrelude.js +0 -10
- package/dist/renderer/effects/effectPrelude.js.map +0 -1
- package/dist/renderer/effects/types.js +0 -10
- package/dist/renderer/effects/types.js.map +0 -1
- package/dist/renderer/glyphOutlineMesh.js +0 -67
- package/dist/renderer/glyphOutlineMesh.js.map +0 -1
- package/dist/renderer/index.js +0 -20
- package/dist/renderer/math/color.js +0 -321
- package/dist/renderer/math/color.js.map +0 -1
- package/dist/renderer/math/mat3.js +0 -80
- package/dist/renderer/math/mat3.js.map +0 -1
- package/dist/renderer/math/patternSpace.js +0 -22
- package/dist/renderer/math/patternSpace.js.map +0 -1
- package/dist/renderer/math/viewToMat3.js +0 -19
- package/dist/renderer/math/viewToMat3.js.map +0 -1
- package/dist/renderer/paintResources.js +0 -18
- package/dist/renderer/paintResources.js.map +0 -1
- package/dist/renderer/paintScratch.js +0 -37
- package/dist/renderer/paintScratch.js.map +0 -1
- package/dist/renderer/shaders/ShaderProgram.js +0 -74
- package/dist/renderer/shaders/ShaderProgram.js.map +0 -1
- package/dist/renderer/shaders/batchFill.js +0 -119
- package/dist/renderer/shaders/batchFill.js.map +0 -1
- package/dist/renderer/shaders/customPrelude.js +0 -34
- package/dist/renderer/shaders/customPrelude.js.map +0 -1
- package/dist/renderer/shaders/extractUniformNames.js +0 -184
- package/dist/renderer/shaders/extractUniformNames.js.map +0 -1
- package/dist/renderer/shaders/glyphPaint.js +0 -61
- package/dist/renderer/shaders/glyphPaint.js.map +0 -1
- package/dist/renderer/shaders/gradFill.js +0 -31
- package/dist/renderer/shaders/gradFill.js.map +0 -1
- package/dist/renderer/shaders/pathFill.js +0 -14
- package/dist/renderer/shaders/pathFill.js.map +0 -1
- package/dist/renderer/shaders/patternFill.js +0 -25
- package/dist/renderer/shaders/patternFill.js.map +0 -1
- package/dist/renderer/shaders/registerProgram.js +0 -18
- package/dist/renderer/shaders/registerProgram.js.map +0 -1
- package/dist/renderer/spriteSheet.js +0 -14
- package/dist/renderer/spriteSheet.js.map +0 -1
- package/dist/renderer/state/GroupState.js +0 -77
- package/dist/renderer/state/GroupState.js.map +0 -1
- package/dist/renderer/strokeLengths.js +0 -50
- package/dist/renderer/strokeLengths.js.map +0 -1
- package/dist/renderer/syntheticItalic.js +0 -6
- package/dist/renderer/syntheticItalic.js.map +0 -1
- package/dist/renderer/textures/registerTexture.js +0 -34
- package/dist/renderer/textures/registerTexture.js.map +0 -1
- package/dist/scheduling/useVisibleRaf.js +0 -69
- package/dist/scheduling/useVisibleRaf.js.map +0 -1
- package/dist/test-seams-DM2B87-g.d.ts +0 -356
|
@@ -1,140 +0,0 @@
|
|
|
1
|
-
import { normalizeView as e } from "../core/viewport/view.js";
|
|
2
|
-
import { AUTO_POSE_DESCRIPTOR as t } from "../interactions/actions/resize/autoPoseDescriptor.js";
|
|
3
|
-
import { SceneViewCanvas as n } from "./SceneViewCanvas.js";
|
|
4
|
-
import { usePointerContext as r, usePointerPosition as i } from "../features/pointer/PointerContext.js";
|
|
5
|
-
import { PointerProviderIfRoot as a } from "./SceneCanvas/PointerProviderIfRoot.js";
|
|
6
|
-
import { MINIMAP_CENTER as o, MINIMAP_PAN as s, minimapCenterAction as c, minimapPanAction as l } from "../features/minimap/actions.js";
|
|
7
|
-
import { computeFitView as u, computeIndicatorCommand as d } from "./minimapMath.js";
|
|
8
|
-
import { createLinkedCursorLayer as f } from "../features/minimap/layers.js";
|
|
9
|
-
import { accentColorOf as p } from "./accentColor.js";
|
|
10
|
-
import { useCallback as m, useEffect as h, useMemo as g, useRef as ee, useSyncExternalStore as te } from "react";
|
|
11
|
-
import { assignRef as _, useLatest as v } from "@weasel-js/react";
|
|
12
|
-
import { ActionsProvider as y, ActiveToolContextProvider as b, DepRegistryProvider as x, useActionsRegistry as S, useDepSource as ne, useGestureDispatcher as C } from "@weasel-js/routing/react";
|
|
13
|
-
import { jsx as w } from "react/jsx-runtime";
|
|
14
|
-
//#region src/canvas/MinimapCanvas.tsx
|
|
15
|
-
var T = {
|
|
16
|
-
id: "minimap",
|
|
17
|
-
eligibility: { always: !0 },
|
|
18
|
-
bindings: [{
|
|
19
|
-
spec: { kind: "pointerDown" },
|
|
20
|
-
actionId: o
|
|
21
|
-
}, {
|
|
22
|
-
spec: { kind: "drag" },
|
|
23
|
-
actionId: s
|
|
24
|
-
}]
|
|
25
|
-
}, E = /* @__PURE__ */ new Map([[T.id, T]]), D = {
|
|
26
|
-
wheel: !1,
|
|
27
|
-
pinch: !1,
|
|
28
|
-
contextMenu: !1,
|
|
29
|
-
ingest: !1
|
|
30
|
-
};
|
|
31
|
-
function O(a) {
|
|
32
|
-
let { scene: o, mainView: s, mainViewDims: y, onMainViewChange: b, width: x, height: T, drawOne: O, alphaFor: k, layerVisibility: A, layerOrder: j, animator: M, fit: N = "scene", poseDescriptor: re, indicatorStyle: P, className: F, canvasRef: I, id: L = "minimap" } = a, R = e(s), z = te(o.subscribe, o.getVersion, o.getVersion), B = re ?? t, V = g(() => e(u(o, {
|
|
33
|
-
width: x,
|
|
34
|
-
height: T
|
|
35
|
-
}, N, B)), [
|
|
36
|
-
o,
|
|
37
|
-
z,
|
|
38
|
-
x,
|
|
39
|
-
T,
|
|
40
|
-
N,
|
|
41
|
-
B
|
|
42
|
-
]), H = g(() => d(R, y, P, V), [
|
|
43
|
-
R,
|
|
44
|
-
y,
|
|
45
|
-
P,
|
|
46
|
-
V
|
|
47
|
-
]), U = ee(null), W = v(R), G = v(y), K = v(b), q = v(V), J = g(() => ({
|
|
48
|
-
get: () => W.current,
|
|
49
|
-
set: (e) => K.current(e),
|
|
50
|
-
hostSize: () => G.current
|
|
51
|
-
}), [
|
|
52
|
-
W,
|
|
53
|
-
K,
|
|
54
|
-
G
|
|
55
|
-
]);
|
|
56
|
-
ne("rootView", () => J);
|
|
57
|
-
let Y = S();
|
|
58
|
-
h(() => {
|
|
59
|
-
if (!Y) return;
|
|
60
|
-
let e = [Y.register(c()), Y.register(l())];
|
|
61
|
-
return () => {
|
|
62
|
-
for (let t of e) t();
|
|
63
|
-
};
|
|
64
|
-
}, [Y]);
|
|
65
|
-
let X = m((e, t) => {
|
|
66
|
-
let n = U.current?.getBoundingClientRect(), r = q.current;
|
|
67
|
-
return {
|
|
68
|
-
x: r.x + (e - (n?.left ?? 0)) / r.scale.x,
|
|
69
|
-
y: r.y + (t - (n?.top ?? 0)) / r.scale.y
|
|
70
|
-
};
|
|
71
|
-
}, [q]);
|
|
72
|
-
C({
|
|
73
|
-
canvasRef: U,
|
|
74
|
-
actions: Y,
|
|
75
|
-
entriesById: E,
|
|
76
|
-
clientToWorld: X,
|
|
77
|
-
keyboard: !1,
|
|
78
|
-
channels: D
|
|
79
|
-
});
|
|
80
|
-
let Z = r();
|
|
81
|
-
h(() => {
|
|
82
|
-
let e = U.current;
|
|
83
|
-
if (!e || !Z) return;
|
|
84
|
-
let t = (e) => {
|
|
85
|
-
let t = X(e.clientX, e.clientY);
|
|
86
|
-
Z.set({
|
|
87
|
-
worldX: t.x,
|
|
88
|
-
worldY: t.y,
|
|
89
|
-
viewId: L
|
|
90
|
-
});
|
|
91
|
-
}, n = (e) => {
|
|
92
|
-
e.buttons === 0 && Z.get()?.viewId === L && Z.set(null);
|
|
93
|
-
};
|
|
94
|
-
return e.addEventListener("pointermove", t), e.addEventListener("pointerleave", n), () => {
|
|
95
|
-
e.removeEventListener("pointermove", t), e.removeEventListener("pointerleave", n);
|
|
96
|
-
};
|
|
97
|
-
}, [
|
|
98
|
-
Z,
|
|
99
|
-
X,
|
|
100
|
-
L
|
|
101
|
-
]);
|
|
102
|
-
let Q = i(), $ = g(() => f({
|
|
103
|
-
id: `${L}.cursor`,
|
|
104
|
-
pointer: () => Q,
|
|
105
|
-
color: () => p(U.current)
|
|
106
|
-
}), [L, Q]), ie = g(() => [H, ...$.draw({ viewId: L }, V, {
|
|
107
|
-
width: x,
|
|
108
|
-
height: T
|
|
109
|
-
})], [
|
|
110
|
-
H,
|
|
111
|
-
$,
|
|
112
|
-
L,
|
|
113
|
-
V,
|
|
114
|
-
x,
|
|
115
|
-
T
|
|
116
|
-
]), ae = m((e) => {
|
|
117
|
-
U.current = e, _(I, e);
|
|
118
|
-
}, [I]);
|
|
119
|
-
return /* @__PURE__ */ w(n, {
|
|
120
|
-
scene: o,
|
|
121
|
-
view: V,
|
|
122
|
-
width: x,
|
|
123
|
-
height: T,
|
|
124
|
-
drawOne: O,
|
|
125
|
-
extraCommands: ie,
|
|
126
|
-
alphaFor: k,
|
|
127
|
-
layerVisibility: A,
|
|
128
|
-
layerOrder: j,
|
|
129
|
-
animator: M,
|
|
130
|
-
className: F,
|
|
131
|
-
canvasRef: ae
|
|
132
|
-
});
|
|
133
|
-
}
|
|
134
|
-
function k(e) {
|
|
135
|
-
return /* @__PURE__ */ w(x, { children: /* @__PURE__ */ w(y, { children: /* @__PURE__ */ w(b, { children: /* @__PURE__ */ w(a, { children: /* @__PURE__ */ w(O, { ...e }) }) }) }) });
|
|
136
|
-
}
|
|
137
|
-
//#endregion
|
|
138
|
-
export { k as MinimapCanvas };
|
|
139
|
-
|
|
140
|
-
//# sourceMappingURL=MinimapCanvas.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"MinimapCanvas.js","names":["MINIMAP_INPUT","MINIMAP_CENTER","MINIMAP_PAN","TOOLS_BY_ID","CHANNELS","MinimapCanvasInner","mainViewProp","props","mainView","normalizeView","sceneVersion","useSyncExternalStore","scene","descriptor","poseDescriptor","AUTO_POSE_DESCRIPTOR","fitView","useMemo","computeFitView","fit","width","height","indicatorCmd","computeIndicatorCommand","mainViewDims","indicatorStyle","localCanvasRef","useRef","mainViewRef","useLatest","mainViewDimsRef","onMainViewChangeRef","onMainViewChange","fitViewRef","rootView","v","actions","useActionsRegistry","off","minimapCenterAction","minimapPanAction","u","clientToWorld","useCallback","rect","fv","cx","cy","pointerStore","usePointerContext","el","onMove","w","id","onLeave","pointer","usePointerPosition","cursorLayer","createLinkedCursorLayer","accentColorOf","extraCommands","setCanvasRef","assignRef","canvasRef","SceneViewCanvas","MinimapCanvas","DepRegistryProvider","ActionsProvider","ActiveToolContextProvider","PointerProviderIfRoot"],"sources":["../../src/canvas/MinimapCanvas.tsx"],"sourcesContent":["/**\n * `<MinimapCanvas>` — opinionated minimap on a canvas of its own, built on\n * `<SceneViewCanvas>`.\n *\n * Renders the same `scene` the main canvas is showing, through a derived\n * \"fit\" view, and overlays a dashed visible-window indicator showing where\n * the main canvas is currently looking. Press anywhere in the minimap to\n * recenter the main view on that world point; drag to pan continuously.\n *\n * Input runs on a dispatcher of its own, through the same `minimap.center` /\n * `minimap.pan` actions the in-surface minimap (`createMinimapContribution`)\n * binds. It publishes its pointer into the pointer store in scope, and draws a\n * crosshair wherever that store says the pointer is on another surface — put\n * one `<PointerContextProvider>` around it and the main canvas for linked\n * cursors both ways.\n */\nimport {\n useCallback,\n useEffect,\n useMemo,\n useRef,\n useSyncExternalStore,\n} from 'react';\nimport type { Ref } from 'react';\nimport {\n ActionsProvider,\n ActiveToolContextProvider,\n DepRegistryProvider,\n useActionsRegistry,\n useDepSource,\n useGestureDispatcher,\n} from '@weasel-js/routing/react';\nimport { assignRef, useLatest } from '@weasel-js/react';\nimport type { Tool } from '@weasel-js/routing';\nimport { PointerProviderIfRoot } from './SceneCanvas/PointerProviderIfRoot';\nimport { usePointerContext, usePointerPosition } from 'features/pointer/PointerContext';\nimport {\n MINIMAP_CENTER, MINIMAP_PAN, minimapCenterAction, minimapPanAction,\n} from 'features/minimap/actions';\nimport { createLinkedCursorLayer } from 'features/minimap/layers';\nimport type { ViewApi } from 'interactions/actions/depSchema';\nimport { SceneViewCanvas } from './SceneViewCanvas';\nimport {\n computeFitView,\n computeIndicatorCommand,\n} from './minimapMath';\nimport type { IndicatorStyle, MinimapFit } from './minimapMath';\nimport type { SceneViewDrawOne, SceneViewLayers } from './sceneViewRender';\nimport type { DrawCommand } from '../renderer/DrawCommand';\nimport { normalizeView, type View } from '../core/viewport/view';\nimport type { Scene } from '../core/scene/types';\nimport type { PoseDescriptor } from '../core/geometry/poseDescriptor';\nimport type { Animator } from '../animation/types';\nimport { AUTO_POSE_DESCRIPTOR } from '../interactions/actions/resize/autoPoseDescriptor';\nimport { accentColorOf } from './accentColor';\n\n/** Props for `<MinimapCanvas>`. */\nexport interface MinimapCanvasProps<TData, TLayer extends string, TPose> {\n /** Same scene the main canvas is rendering. */\n scene: Scene<TData, TLayer, TPose>;\n /** Main canvas's view — used to position the visible-window indicator and\n * to preserve `scale` when the minimap recenters. */\n mainView: View;\n /** Main canvas's CSS-pixel dims. Used to compute the visible-window rect\n * and the recenter offset. */\n mainViewDims: { width: number; height: number };\n /** Setter called on click (single recenter) and during drag (continuous\n * recenter). Receives a `View` with the same `scale` as `mainView` and\n * `(x, y)` shifted so the pointer's world point lands at the main\n * canvas's center. */\n onMainViewChange: (next: View) => void;\n /** Minimap's own CSS-pixel dims. */\n width: number;\n height: number;\n /** Consumer's draw callback. Applied through the derived fit view; same\n * signature as `<SceneCanvas>`'s scene-slot `drawOne` so the consumer\n * can reuse it (typically simplified — just colored AABBs). */\n drawOne: SceneViewDrawOne<TData, TLayer, TPose>;\n /** Fit policy. Defaults to `\"scene\"` (AABB union of leaf poses). See\n * `MinimapFit` for the full shape.\n *\n * Framing is derived from **document** poses, not `scene.overrides` — a\n * node moved by an override paints where the override puts it, outside the\n * frame if it goes there, rather than making the whole minimap rescale on\n * every frame of a drag or a settle. */\n fit?: MinimapFit<TData, TLayer, TPose>;\n /** How to read poses. Default `AUTO_POSE_DESCRIPTOR`. */\n poseDescriptor?: PoseDescriptor<TPose>;\n /** Optional per-id alpha multiplier, mirroring `<SceneCanvas>`'s scene-slot\n * `alphaFor`. Pass the same function the main canvas uses so a\n * scoping-dim treatment shows up in the minimap too. */\n alphaFor?: (id: string) => number;\n /** Hide scene layers in the minimap, keyed `scene:<layerId>` as on\n * `<SceneCanvas>` — pass the main canvas's map so both show the same set. */\n layerVisibility?: SceneViewLayers['layerVisibility'];\n /** Paint order for the minimap, keyed as `layerVisibility`. */\n layerOrder?: SceneViewLayers['layerOrder'];\n /** Optional animator: the minimap repaints on its ticks and paints its\n * `colorOverrides`. Pass the main canvas's animator so both show the same\n * colors. */\n animator?: Animator;\n /** Visual tuning of the indicator stroke. */\n indicatorStyle?: IndicatorStyle;\n /** CSS class for positioning the canvas. Its size is `width` × `height`. */\n className?: string;\n /** Forwarded ref to the underlying `<canvas>`. */\n canvasRef?: Ref<HTMLCanvasElement>;\n /** The view id this minimap publishes its pointer under. Default\n * `'minimap'`. */\n id?: string;\n}\n\n/** The minimap's own bindings. Unscoped: this dispatcher routes no views, so\n * every input on it is the minimap's. */\nconst MINIMAP_INPUT: Tool = {\n id: 'minimap',\n eligibility: { always: true },\n bindings: [\n { spec: { kind: 'pointerDown' }, actionId: MINIMAP_CENTER },\n { spec: { kind: 'drag' }, actionId: MINIMAP_PAN },\n ],\n};\nconst TOOLS_BY_ID: ReadonlyMap<string, Tool> = new Map([[MINIMAP_INPUT.id, MINIMAP_INPUT]]);\nconst CHANNELS = { wheel: false, pinch: false, contextMenu: false, ingest: false } as const;\n\nfunction MinimapCanvasInner<TData, TLayer extends string, TPose>(\n props: MinimapCanvasProps<TData, TLayer, TPose>,\n) {\n const {\n scene,\n mainView: mainViewProp,\n mainViewDims,\n onMainViewChange,\n width,\n height,\n drawOne,\n alphaFor,\n layerVisibility,\n layerOrder,\n animator,\n fit = 'scene',\n poseDescriptor,\n indicatorStyle,\n className,\n canvasRef,\n id = 'minimap',\n } = props;\n const mainView = normalizeView(mainViewProp);\n\n // Subscribe to scene version so the fit view recomputes when the scene\n // mutates. `<SceneViewCanvas>` also subscribes, but it owns its own\n // rendering; we need the version *here* to invalidate the memoized fit.\n const sceneVersion = useSyncExternalStore(\n scene.subscribe,\n scene.getVersion,\n scene.getVersion,\n );\n\n const descriptor = (poseDescriptor ?? AUTO_POSE_DESCRIPTOR) as PoseDescriptor<TPose>;\n\n const fitView = useMemo<View>(() => {\n // A `fit` function's result is the caller's; pointer math divides by its scale.\n return normalizeView(computeFitView(scene, { width, height }, fit, descriptor));\n // `sceneVersion` participates so the memo re-evaluates after scene mutations.\n // `descriptor` is stable when the prop is omitted.\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [scene, sceneVersion, width, height, fit, descriptor]);\n\n const indicatorCmd = useMemo<DrawCommand>(() => {\n return computeIndicatorCommand(mainView, mainViewDims, indicatorStyle, fitView);\n }, [mainView, mainViewDims, indicatorStyle, fitView]);\n\n // -------------------------------------------------------------------------\n // Input\n // -------------------------------------------------------------------------\n //\n // The \"latest\" pattern (refs holding the current mainView / dims / setter\n // / fitView) lets the dep and the listeners read up-to-date values without\n // re-binding every frame.\n\n const localCanvasRef = useRef<HTMLCanvasElement | null>(null);\n const mainViewRef = useLatest(mainView);\n const mainViewDimsRef = useLatest(mainViewDims);\n const onMainViewChangeRef = useLatest(onMainViewChange);\n const fitViewRef = useLatest(fitView);\n\n // The main canvas's camera, which is what the minimap's actions move.\n const rootView = useMemo<ViewApi>(() => ({\n get: () => mainViewRef.current,\n set: (v) => onMainViewChangeRef.current(v),\n hostSize: () => mainViewDimsRef.current,\n }), [mainViewRef, onMainViewChangeRef, mainViewDimsRef]);\n useDepSource('rootView', () => rootView);\n\n const actions = useActionsRegistry();\n useEffect(() => {\n if (!actions) return;\n const off = [actions.register(minimapCenterAction()), actions.register(minimapPanAction())];\n return () => { for (const u of off) u(); };\n }, [actions]);\n\n /** Client point → world, through the fit camera. */\n const clientToWorld = useCallback((cx: number, cy: number) => {\n const rect = localCanvasRef.current?.getBoundingClientRect();\n const fv = fitViewRef.current;\n return {\n x: fv.x + (cx - (rect?.left ?? 0)) / fv.scale.x,\n y: fv.y + (cy - (rect?.top ?? 0)) / fv.scale.y,\n };\n }, [fitViewRef]);\n\n useGestureDispatcher({\n canvasRef: localCanvasRef,\n actions: actions!,\n entriesById: TOOLS_BY_ID,\n clientToWorld,\n keyboard: false,\n channels: CHANNELS,\n });\n\n // -------------------------------------------------------------------------\n // Linked cursor\n // -------------------------------------------------------------------------\n\n const pointerStore = usePointerContext();\n useEffect(() => {\n const el = localCanvasRef.current;\n if (!el || !pointerStore) return;\n const onMove = (e: PointerEvent): void => {\n const w = clientToWorld(e.clientX, e.clientY);\n pointerStore.set({ worldX: w.x, worldY: w.y, viewId: id });\n };\n const onLeave = (e: PointerEvent): void => {\n if (e.buttons !== 0) return;\n if (pointerStore.get()?.viewId === id) pointerStore.set(null);\n };\n el.addEventListener('pointermove', onMove);\n el.addEventListener('pointerleave', onLeave);\n return () => {\n el.removeEventListener('pointermove', onMove);\n el.removeEventListener('pointerleave', onLeave);\n };\n }, [pointerStore, clientToWorld, id]);\n\n const pointer = usePointerPosition();\n const cursorLayer = useMemo(() => createLinkedCursorLayer({\n id: `${id}.cursor`,\n pointer: () => pointer,\n color: () => accentColorOf(localCanvasRef.current),\n }), [id, pointer]);\n\n const extraCommands = useMemo<DrawCommand[]>(() => [\n indicatorCmd,\n ...cursorLayer.draw({ viewId: id }, fitView, { width, height }),\n ], [indicatorCmd, cursorLayer, id, fitView, width, height]);\n\n // `<SceneViewCanvas>` doesn't expose its element except via `canvasRef`, so\n // we route both our internal ref and the consumer's ref through one setter.\n const setCanvasRef = useCallback((el: HTMLCanvasElement | null) => {\n localCanvasRef.current = el;\n assignRef(canvasRef, el);\n }, [canvasRef]);\n\n return (\n <SceneViewCanvas\n scene={scene}\n view={fitView}\n width={width}\n height={height}\n drawOne={drawOne}\n extraCommands={extraCommands}\n alphaFor={alphaFor}\n layerVisibility={layerVisibility}\n layerOrder={layerOrder}\n animator={animator}\n className={className}\n canvasRef={setCanvasRef}\n />\n );\n}\n\n/**\n * Opinionated minimap. See `MinimapCanvasProps` for the full surface and\n * the module docstring for the rendering / input model.\n *\n * Its dispatcher, actions and deps are its own, so it never competes with\n * the main canvas for input. The pointer store is shared when one is in scope.\n *\n * `forwardRef` is not used because the component is generic over\n * `<TData, TLayer, TPose>` and React's `forwardRef` erases generics. The\n * `canvasRef` prop is the plain-prop equivalent.\n */\nexport function MinimapCanvas<TData, TLayer extends string, TPose>(\n props: MinimapCanvasProps<TData, TLayer, TPose>,\n) {\n return (\n <DepRegistryProvider>\n <ActionsProvider>\n <ActiveToolContextProvider>\n <PointerProviderIfRoot>\n <MinimapCanvasInner {...props} />\n </PointerProviderIfRoot>\n </ActiveToolContextProvider>\n </ActionsProvider>\n </DepRegistryProvider>\n );\n}\n"],"mappings":"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"}
|
|
@@ -1,11 +0,0 @@
|
|
|
1
|
-
import { useLatest as e } from "@weasel-js/react";
|
|
2
|
-
import { useDepSource as t } from "@weasel-js/routing/react";
|
|
3
|
-
//#region src/canvas/deps/poseComposition.ts
|
|
4
|
-
function n(n) {
|
|
5
|
-
let r = e(n);
|
|
6
|
-
t("poseComposition", () => r.current);
|
|
7
|
-
}
|
|
8
|
-
//#endregion
|
|
9
|
-
export { n as usePoseCompositionDepSource };
|
|
10
|
-
|
|
11
|
-
//# sourceMappingURL=poseComposition.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"poseComposition.js","names":["usePoseCompositionDepSource","ref","useLatest","composition"],"sources":["../../../src/canvas/deps/poseComposition.ts"],"sourcesContent":["import { useDepSource } from '@weasel-js/routing/react';\nimport { useLatest } from '@weasel-js/react';\nimport type { PoseComposition } from 'features/groups/composePose';\n\n/** Publish the scene's pose-composition strategy to the built-in actions.\n * Absent is the absolute-pose model: `scenePoseFrame` falls back to identity\n * and every world/local conversion in an action is a no-op. */\nexport function usePoseCompositionDepSource(\n composition: PoseComposition<unknown> | undefined,\n): void {\n const ref = useLatest(composition);\n useDepSource('poseComposition', () => ref.current);\n}\n"],"mappings":";;;AAOA,SAAgBA,EACd,GACM;CACN,IAAMC,IAAMC,EAAUC,CAAW;CACjC,EAAa,yBAAyBF,EAAI,OAAO;AACnD"}
|
|
@@ -1,82 +0,0 @@
|
|
|
1
|
-
import { documentPose as e } from "../core/scene/effectivePose.js";
|
|
2
|
-
import { poseDescriptorForNode as t } from "../core/geometry/poseDescriptor.js";
|
|
3
|
-
//#region src/canvas/minimapMath.ts
|
|
4
|
-
var n = 8, r = {
|
|
5
|
-
x: 0,
|
|
6
|
-
y: 0,
|
|
7
|
-
scale: {
|
|
8
|
-
x: 1,
|
|
9
|
-
y: 1
|
|
10
|
-
}
|
|
11
|
-
}, i = "#ffffff", a = 1, o = [2, 3];
|
|
12
|
-
function s(e, t, n) {
|
|
13
|
-
let r = Math.max(1, t.width - n * 2), i = Math.max(1, t.height - n * 2), a = e.width > 0, o = e.height > 0;
|
|
14
|
-
if (!a && !o) return {
|
|
15
|
-
x: e.x - t.width / 2,
|
|
16
|
-
y: e.y - t.height / 2,
|
|
17
|
-
scale: {
|
|
18
|
-
x: 1,
|
|
19
|
-
y: 1
|
|
20
|
-
}
|
|
21
|
-
};
|
|
22
|
-
let s = Math.min(a ? r / e.width : Infinity, o ? i / e.height : Infinity), c = e.x + Math.max(0, e.width) / 2, l = e.y + Math.max(0, e.height) / 2;
|
|
23
|
-
return {
|
|
24
|
-
x: c - t.width / (2 * s),
|
|
25
|
-
y: l - t.height / (2 * s),
|
|
26
|
-
scale: {
|
|
27
|
-
x: s,
|
|
28
|
-
y: s
|
|
29
|
-
}
|
|
30
|
-
};
|
|
31
|
-
}
|
|
32
|
-
function c(n, r) {
|
|
33
|
-
let i = Infinity, a = Infinity, o = -Infinity, s = -Infinity, c = !1;
|
|
34
|
-
for (let l of n.nodes.values()) {
|
|
35
|
-
if (l.kind !== "leaf") continue;
|
|
36
|
-
let u = t(r, l).getBounds(e(n, l));
|
|
37
|
-
if (!Number.isFinite(u.x + u.y + u.width + u.height)) continue;
|
|
38
|
-
u.x < i && (i = u.x), u.y < a && (a = u.y);
|
|
39
|
-
let d = u.x + u.width, f = u.y + u.height;
|
|
40
|
-
d > o && (o = d), f > s && (s = f), c = !0;
|
|
41
|
-
}
|
|
42
|
-
return c ? {
|
|
43
|
-
x: i,
|
|
44
|
-
y: a,
|
|
45
|
-
width: o - i,
|
|
46
|
-
height: s - a
|
|
47
|
-
} : null;
|
|
48
|
-
}
|
|
49
|
-
function l(e, t, i, a, o = {}) {
|
|
50
|
-
let l = o.padding ?? n;
|
|
51
|
-
if (typeof i == "function") return i(e, t);
|
|
52
|
-
if (i === "scene") {
|
|
53
|
-
let n = c(e, a);
|
|
54
|
-
return n === null ? r : s(n, t, l);
|
|
55
|
-
}
|
|
56
|
-
return s(i.rect, t, l);
|
|
57
|
-
}
|
|
58
|
-
function u(e, t, n = {}, r) {
|
|
59
|
-
let s = e.x, c = e.y, l = t.width / e.scale.x, u = t.height / e.scale.y, d = r ? 1 / Math.abs(r.scale.x) : 1;
|
|
60
|
-
return {
|
|
61
|
-
kind: "path",
|
|
62
|
-
path: {
|
|
63
|
-
kind: "rect",
|
|
64
|
-
x: s,
|
|
65
|
-
y: c,
|
|
66
|
-
width: l,
|
|
67
|
-
height: u
|
|
68
|
-
},
|
|
69
|
-
stroke: {
|
|
70
|
-
paint: {
|
|
71
|
-
fill: "solid",
|
|
72
|
-
color: n.stroke ?? i
|
|
73
|
-
},
|
|
74
|
-
width: (n.width ?? a) * d,
|
|
75
|
-
dash: (n.dash ?? o).map((e) => e * d)
|
|
76
|
-
}
|
|
77
|
-
};
|
|
78
|
-
}
|
|
79
|
-
//#endregion
|
|
80
|
-
export { r as FALLBACK_FIT_VIEW, l as computeFitView, u as computeIndicatorCommand };
|
|
81
|
-
|
|
82
|
-
//# sourceMappingURL=minimapMath.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"minimapMath.js","names":["DEFAULT_FIT_PADDING","FALLBACK_FIT_VIEW","DEFAULT_INDICATOR_STROKE","DEFAULT_INDICATOR_WIDTH","DEFAULT_INDICATOR_DASH","fitRectInto","availW","dims","padding","availH","hasW","rect","hasH","worldCx","worldCy","sceneLeafBounds","minX","minY","maxX","maxY","any","node","scene","b","poseDescriptorForNode","descriptor","documentPose","right","bottom","computeFitView","opts","fit","computeIndicatorCommand","x","mainView","y","width","mainViewDims","height","px","minimapView","style","d"],"sources":["../../src/canvas/minimapMath.ts"],"sourcesContent":["/**\n * Pure math helpers for `<MinimapCanvas>`.\n *\n * `computeFitView` derives a `View` that fits a chosen world rect into a\n * minimap canvas of given pixel dims. `computeIndicatorCommand` builds the\n * dashed \"visible window\" rect — the main canvas's screen window projected\n * into the minimap's own screen coordinates.\n *\n * Neither helper touches GL, the DOM, or the renderer; they're pure\n * functions, unit-testable with `expect`.\n */\nimport { documentPose } from '../core/scene';\nimport type { Scene } from '../core/scene';\nimport type { View } from '../core/viewport/view';\nimport type { Bounds, ViewportDims } from '../core/viewport/fitViewToBounds';\nimport { poseDescriptorForNode, type PoseDescriptor } from '../core/geometry/poseDescriptor';\nimport type { PathDrawCommand } from '../renderer/DrawCommand';\n\n/** Inset (CSS px) around the fit rect on each side. Matches the spec note. */\nconst DEFAULT_FIT_PADDING = 8;\n\n/**\n * Fallback view returned when there is nothing to fit (empty scene, etc.).\n * Identity view at the origin — produces a 1:1 mapping centered on (0, 0).\n */\nexport const FALLBACK_FIT_VIEW: View = { x: 0, y: 0, scale: { x: 1, y: 1 } };\n\n/**\n * Fit policy for `<MinimapCanvas>` / `computeFitView`.\n *\n * - `\"scene\"` — union of leaf-node pose AABBs (via the pose descriptor).\n * - `{ kind: \"world\", rect }` — caller-supplied world rect.\n * - `(scene, dims) => View` — caller derives the view directly.\n */\nexport type MinimapFit<TData, TLayer extends string, TPose> =\n | 'scene'\n | { kind: 'world'; rect: Bounds }\n | ((scene: Scene<TData, TLayer, TPose>, dims: ViewportDims) => View);\n\n/** Style for the visible-window indicator rect drawn over the minimap. */\nexport interface IndicatorStyle {\n /** Stroke color (any CSS color). Defaults to `'#ffffff'`. */\n stroke?: string;\n /** Stroke width in CSS px. Defaults to `1`. */\n width?: number;\n /** Dash pattern in CSS px. Defaults to `[2, 3]`. */\n dash?: number[];\n}\n\nconst DEFAULT_INDICATOR_STROKE = '#ffffff';\nconst DEFAULT_INDICATOR_WIDTH = 1;\nconst DEFAULT_INDICATOR_DASH: readonly number[] = [2, 3];\n\n/** Internal: fit a world rect uniformly into dims with padding. */\nfunction fitRectInto(rect: Bounds, dims: ViewportDims, padding: number): View {\n const availW = Math.max(1, dims.width - padding * 2);\n const availH = Math.max(1, dims.height - padding * 2);\n const hasW = rect.width > 0;\n const hasH = rect.height > 0;\n if (!hasW && !hasH) {\n return {\n x: rect.x - dims.width / 2,\n y: rect.y - dims.height / 2,\n scale: { x: 1, y: 1 },\n };\n }\n const s = Math.min(\n hasW ? availW / rect.width : Infinity,\n hasH ? availH / rect.height : Infinity,\n );\n const worldCx = rect.x + Math.max(0, rect.width) / 2;\n const worldCy = rect.y + Math.max(0, rect.height) / 2;\n return {\n x: worldCx - dims.width / (2 * s),\n y: worldCy - dims.height / (2 * s),\n scale: { x: s, y: s },\n };\n}\n\n/**\n * Compute the AABB union of all leaf-node poses in the scene, via\n * `descriptor`. Container nodes are skipped — their effective bounds come\n * from their descendant leaves, and so is a leaf whose bounds are not finite,\n * which would otherwise make the whole union non-finite. Returns `null` when\n * the scene has no leaf with bounds.\n */\nfunction sceneLeafBounds<TData, TLayer extends string, TPose>(\n scene: Scene<TData, TLayer, TPose>,\n descriptor: PoseDescriptor<TPose>,\n): Bounds | null {\n let minX = Infinity;\n let minY = Infinity;\n let maxX = -Infinity;\n let maxY = -Infinity;\n let any = false;\n for (const node of scene.nodes.values()) {\n if (node.kind !== 'leaf') continue;\n const b = poseDescriptorForNode(descriptor, node).getBounds(documentPose(scene, node));\n if (!Number.isFinite(b.x + b.y + b.width + b.height)) continue;\n if (b.x < minX) minX = b.x;\n if (b.y < minY) minY = b.y;\n const right = b.x + b.width;\n const bottom = b.y + b.height;\n if (right > maxX) maxX = right;\n if (bottom > maxY) maxY = bottom;\n any = true;\n }\n if (!any) return null;\n return { x: minX, y: minY, width: maxX - minX, height: maxY - minY };\n}\n\n/** Options for {@link computeFitView}. */\nexport interface ComputeFitViewOptions {\n /** Inset (CSS px) around the fit rect on each side. Defaults to `8`. */\n padding?: number;\n}\n\n/**\n * Derive a `View` that fits the chosen world rect into a minimap of\n * `dims.width × dims.height` CSS px. Uniform scale on both axes; the rect\n * is centered with `padding` (default 8) on each side. The smaller-axis\n * fit ratio wins, so the whole rect is visible.\n *\n * - `fit === \"scene\"`: union AABB of leaf-node poses via `descriptor`.\n * Empty scene → {@link FALLBACK_FIT_VIEW}.\n * - `fit` is `{ kind: \"world\", rect }`: fit `rect`.\n * - `fit` is a function: called with `(scene, dims)`; its return is\n * passed through unchanged.\n *\n * A rect with one zero axis (a line) is fitted along the other. One with no\n * positive axis falls back to identity scale centered on its top-left.\n */\nexport function computeFitView<TData, TLayer extends string, TPose>(\n scene: Scene<TData, TLayer, TPose>,\n dims: ViewportDims,\n fit: MinimapFit<TData, TLayer, TPose>,\n descriptor: PoseDescriptor<TPose>,\n opts: ComputeFitViewOptions = {},\n): View {\n const padding = opts.padding ?? DEFAULT_FIT_PADDING;\n\n if (typeof fit === 'function') {\n return fit(scene, dims);\n }\n if (fit === 'scene') {\n const rect = sceneLeafBounds(scene, descriptor);\n if (rect === null) return FALLBACK_FIT_VIEW;\n return fitRectInto(rect, dims, padding);\n }\n // { kind: 'world', rect }\n return fitRectInto(fit.rect, dims, padding);\n}\n\n/**\n * Build the visible-window indicator `DrawCommand` for the minimap.\n *\n * The main canvas's visible world rect is:\n * ```\n * worldX = mainView.x\n * worldY = mainView.y\n * worldW = mainViewDims.width / mainView.scale.x\n * worldH = mainViewDims.height / mainView.scale.y\n * ```\n * That world rect is then transformed into the minimap's screen\n * coordinates through `minimapView`.\n *\n * The returned command is a dashed-stroke `path` rect with no fill. Pass the\n * `minimapView` it will be drawn through, so the stroke width and dash come\n * out in CSS px at any fit scale; without it they are in world units.\n */\nexport function computeIndicatorCommand(\n mainView: View,\n mainViewDims: ViewportDims,\n style: IndicatorStyle = {},\n minimapView?: View,\n): PathDrawCommand {\n // World-space rect: returned as-is. The caller wraps the command list\n // (scene + extras) in a group transformed by the minimap's view, so the\n // indicator lands in screen coords automatically. Returning screen coords\n // here would get the view transform applied a second time — a bug that\n // manifested as the indicator drifting at non-identity minimap scale.\n const x = mainView.x;\n const y = mainView.y;\n const width = mainViewDims.width / mainView.scale.x;\n const height = mainViewDims.height / mainView.scale.y;\n const px = minimapView ? 1 / Math.abs(minimapView.scale.x) : 1;\n return {\n kind: 'path',\n path: { kind: 'rect', x, y, width, height },\n stroke: {\n paint: { fill: 'solid', color: style.stroke ?? DEFAULT_INDICATOR_STROKE },\n width: (style.width ?? DEFAULT_INDICATOR_WIDTH) * px,\n dash: (style.dash ?? DEFAULT_INDICATOR_DASH).map((d) => d * px),\n },\n };\n}\n"],"mappings":"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"}
|
|
@@ -1,39 +0,0 @@
|
|
|
1
|
-
//#region src/canvas/toolPreview.ts
|
|
2
|
-
function* e(e) {
|
|
3
|
-
let t = /* @__PURE__ */ new Set(), n = e.hotkeyEngaged ? e.registry[e.hotkeyEngaged] : void 0, r = e.active === null ? void 0 : e.registry[e.active];
|
|
4
|
-
for (let e of [n, r]) e && !t.has(e) && (t.add(e), yield e);
|
|
5
|
-
for (let n of Object.values(e.registry)) n && !t.has(n) && (t.add(n), yield n);
|
|
6
|
-
for (let n of e.ambient) n && !t.has(n) && (t.add(n), yield n);
|
|
7
|
-
}
|
|
8
|
-
function t(t, n) {
|
|
9
|
-
if (!t) return null;
|
|
10
|
-
for (let r of e(t)) {
|
|
11
|
-
let e = r.previewPose?.(n);
|
|
12
|
-
if (e != null) return e;
|
|
13
|
-
}
|
|
14
|
-
return null;
|
|
15
|
-
}
|
|
16
|
-
function n(t, n) {
|
|
17
|
-
if (!t) return null;
|
|
18
|
-
for (let r of e(t)) {
|
|
19
|
-
let e = r.previewBounds?.(n);
|
|
20
|
-
if (e) return e;
|
|
21
|
-
}
|
|
22
|
-
return null;
|
|
23
|
-
}
|
|
24
|
-
function r(t) {
|
|
25
|
-
let n = /* @__PURE__ */ new Set();
|
|
26
|
-
if (!t) return n;
|
|
27
|
-
for (let r of e(t)) {
|
|
28
|
-
let e = r.previewIds?.();
|
|
29
|
-
if (e) for (let t of e) n.add(t);
|
|
30
|
-
}
|
|
31
|
-
return n;
|
|
32
|
-
}
|
|
33
|
-
function i(t) {
|
|
34
|
-
return t ? [...e(t)] : [];
|
|
35
|
-
}
|
|
36
|
-
//#endregion
|
|
37
|
-
export { r as aggregatePreviewIds, n as firstPreviewBounds, t as firstPreviewPose, i as toolPreviewSources, e as toolsInPriorityOrder };
|
|
38
|
-
|
|
39
|
-
//# sourceMappingURL=toolPreview.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"toolPreview.js","names":["toolsInPriorityOrder","seen","hotkey","tools","active","t","firstPreviewPose","p","id","firstPreviewBounds","b","aggregatePreviewIds","out","ids","toolPreviewSources"],"sources":["../../src/canvas/toolPreview.ts"],"sourcesContent":["/**\n * Helpers for reading preview pose / bounds / ids from a ToolsApi.\n * Extracted from Canvas.tsx so SceneCanvas can use the same logic when\n * constructing scene-aware layers (selection overlay, etc.) without\n * going through Canvas's internal render closure.\n */\nimport type { ToolsApi } from '../tools/overlayBinding';\nimport type { AnyTool } from '../tools/overlayBinding';\nimport type { Bounds } from 'core/viewport/fitViewToBounds';\nimport type { GesturePreviewSource } from './gestureBounds';\n\n/** Iterate all tools in priority order: hotkey-engaged → active → rest of\n * registry → ambient. Skips duplicates so each tool is only visited once.\n * This preserves the \"most-specific tool wins\" contract when multiple\n * siblings of select each publish their own preview slice. */\nexport function* toolsInPriorityOrder(tools: ToolsApi): IterableIterator<AnyTool> {\n const seen = new Set<AnyTool>();\n const hotkey = tools.hotkeyEngaged ? tools.registry[tools.hotkeyEngaged] : undefined;\n const active = tools.active === null ? undefined : tools.registry[tools.active];\n for (const t of [hotkey, active]) {\n if (t && !seen.has(t)) { seen.add(t); yield t; }\n }\n for (const t of Object.values(tools.registry)) {\n if (t && !seen.has(t)) { seen.add(t); yield t; }\n }\n for (const t of tools.ambient) {\n if (t && !seen.has(t)) { seen.add(t); yield t; }\n }\n}\n\n/** Return the first non-null `previewPose(id)` from any tool in priority\n * order, or `null` when no tool owns a preview for this id. */\nexport function firstPreviewPose(tools: ToolsApi | undefined, id: string): unknown {\n if (!tools) return null;\n for (const t of toolsInPriorityOrder(tools)) {\n const p = t.previewPose?.(id);\n if (p != null) return p;\n }\n return null;\n}\n\n/** Return the first non-null `previewBounds(id)` from any tool in priority\n * order, or `null` when no tool owns a bounds preview for this id. */\nexport function firstPreviewBounds(tools: ToolsApi | undefined, id: string): Bounds | null {\n if (!tools) return null;\n for (const t of toolsInPriorityOrder(tools)) {\n const b = t.previewBounds?.(id);\n if (b) return b as Bounds;\n }\n return null;\n}\n\n/** Aggregate all `previewIds()` from every registered tool into a single Set. */\nexport function aggregatePreviewIds(tools: ToolsApi | undefined): Set<string> {\n const out = new Set<string>();\n if (!tools) return out;\n for (const t of toolsInPriorityOrder(tools)) {\n const ids = t.previewIds?.();\n if (!ids) continue;\n for (const id of ids) out.add(id);\n }\n return out;\n}\n\n/** Every tool that can publish a preview, in priority order and deduplicated —\n * the tool half of a view's preview sources. A drag may run through `select`\n * while the active tool is `clone`, so the active tool alone is the wrong\n * source. */\nexport function toolPreviewSources(tools: ToolsApi | undefined): GesturePreviewSource[] {\n if (!tools) return [];\n return [...toolsInPriorityOrder(tools)];\n}\n"],"mappings":";AAeA,UAAiBA,EAAqB,GAA4C;CAChF,IAAMC,oBAAO,IAAI,IAAa,GACxBC,IAASC,EAAM,gBAAgBA,EAAM,SAASA,EAAM,iBAAiB,KAAA,GACrEC,IAASD,EAAM,WAAW,OAAO,KAAA,IAAYA,EAAM,SAASA,EAAM;CACxE,KAAK,IAAME,KAAK,CAACH,GAAQE,CAAM,GAC7B,AAAIC,KAAK,CAACJ,EAAK,IAAII,CAAC,MAAKJ,EAAK,IAAII,CAAC,GAAG,MAAMA;CAE9C,KAAK,IAAMA,KAAK,OAAO,OAAOF,EAAM,QAAQ,GAC1C,AAAIE,KAAK,CAACJ,EAAK,IAAII,CAAC,MAAKJ,EAAK,IAAII,CAAC,GAAG,MAAMA;CAE9C,KAAK,IAAMA,KAAKF,EAAM,SACpB,AAAIE,KAAK,CAACJ,EAAK,IAAII,CAAC,MAAKJ,EAAK,IAAII,CAAC,GAAG,MAAMA;AAEhD;AAIA,SAAgBC,EAAiB,GAA6B,GAAqB;CACjF,IAAI,CAACH,GAAO,OAAO;CACnB,KAAK,IAAME,KAAKL,EAAqBG,CAAK,GAAG;EAC3C,IAAMI,IAAIF,EAAE,cAAcG,CAAE;EAC5B,IAAID,KAAK,MAAM,OAAOA;CACxB;CACA,OAAO;AACT;AAIA,SAAgBE,EAAmB,GAA6B,GAA2B;CACzF,IAAI,CAACN,GAAO,OAAO;CACnB,KAAK,IAAME,KAAKL,EAAqBG,CAAK,GAAG;EAC3C,IAAMO,IAAIL,EAAE,gBAAgBG,CAAE;EAC9B,IAAIE,GAAG,OAAOA;CAChB;CACA,OAAO;AACT;AAGA,SAAgBC,EAAoB,GAA0C;CAC5E,IAAMC,oBAAM,IAAI,IAAY;CAC5B,IAAI,CAACT,GAAO,OAAOS;CACnB,KAAK,IAAMP,KAAKL,EAAqBG,CAAK,GAAG;EAC3C,IAAMU,IAAMR,EAAE,aAAa;EAC3B,IAAKQ,GACL,KAAK,IAAML,KAAMK,GAAK,EAAI,IAAIL,CAAE;CAClC;CACA,OAAOI;AACT;AAMA,SAAgBE,EAAmB,GAAqD;CAEtF,OADKX,IACE,CAAC,GAAGH,EAAqBG,CAAK,CAAC,IADnB,CAAC;AAEtB"}
|
|
@@ -1,94 +0,0 @@
|
|
|
1
|
-
import { RECT_POSE_DESCRIPTOR as e, poseDescriptorForNode as t, translatePoseViaDescriptor as n } from "../geometry/poseDescriptor.js";
|
|
2
|
-
import { parentOf as r } from "../ops/slot.js";
|
|
3
|
-
import { applyOpsTo as i } from "../applyOps.js";
|
|
4
|
-
import { polygonRegion as a, poseOutline as o, rectRegion as s, regionBoundsOf as c, regionTakes as l } from "../geometry/regionHit.js";
|
|
5
|
-
//#region src/core/adapters/arrayAdapter.ts
|
|
6
|
-
function u(e, t) {
|
|
7
|
-
return {
|
|
8
|
-
...e,
|
|
9
|
-
...t
|
|
10
|
-
};
|
|
11
|
-
}
|
|
12
|
-
var d = 0;
|
|
13
|
-
function f() {
|
|
14
|
-
let e = globalThis.crypto;
|
|
15
|
-
return e && typeof e.randomUUID == "function" ? e.randomUUID() : `paste-${d++}`;
|
|
16
|
-
}
|
|
17
|
-
function p(d) {
|
|
18
|
-
let { ref: p, setItems: m, toPose: h, fromPose: g = u, getParent: _ = () => null, setParent: v = () => {}, getChildren: y, selectionRef: b, setSelection: x = () => {}, createDefault: S, nextId: C = f, silhouette: w } = d, T = d.poseDescriptor ?? e, E = b ? () => b.current : () => [], D = (e, n) => {
|
|
19
|
-
let r = [];
|
|
20
|
-
for (let i of p.current) {
|
|
21
|
-
let a = h(i), s = c(i, a, t(T, i));
|
|
22
|
-
l(e, n, a, s, () => w?.(i, a) ?? o(a, s)) && r.push(i.id);
|
|
23
|
-
}
|
|
24
|
-
return r;
|
|
25
|
-
}, O = (e, t) => t === null ? e.filter((e) => _(e.id) === null).map((e) => e.id) : y?.(t) ?? [], k = (e, t, n) => {
|
|
26
|
-
if (n === void 0 || n < 0) return;
|
|
27
|
-
if (!y) return n < e.length ? n : void 0;
|
|
28
|
-
let i = O(e, r(t)).filter((e) => e !== t.id)[n], a = i === void 0 ? -1 : e.findIndex((e) => e.id === i);
|
|
29
|
-
return a < 0 ? void 0 : a;
|
|
30
|
-
}, A = {
|
|
31
|
-
getNode: (e) => p.current.find((t) => t.id === e),
|
|
32
|
-
getNodes: () => p.current,
|
|
33
|
-
getPose: (e) => {
|
|
34
|
-
let t = p.current.find((t) => t.id === e);
|
|
35
|
-
if (!t) throw Error(`arrayAdapter.getPose: id "${e}" not found`);
|
|
36
|
-
return h(t);
|
|
37
|
-
},
|
|
38
|
-
setPose: (e, t) => {
|
|
39
|
-
m((n) => n.map((n) => n.id === e ? g(n, t) : n));
|
|
40
|
-
},
|
|
41
|
-
getParent: _,
|
|
42
|
-
setParent: v,
|
|
43
|
-
insertNode: (e, t) => m((n) => {
|
|
44
|
-
let r = k(n, e, t);
|
|
45
|
-
return r === void 0 ? [...n, e] : [
|
|
46
|
-
...n.slice(0, r),
|
|
47
|
-
e,
|
|
48
|
-
...n.slice(r)
|
|
49
|
-
];
|
|
50
|
-
}),
|
|
51
|
-
removeNode: (e) => m((t) => t.filter((t) => t.id !== e)),
|
|
52
|
-
getSelection: E,
|
|
53
|
-
setSelection: x,
|
|
54
|
-
hitTestArea: (e) => D(s(e), "intersect"),
|
|
55
|
-
hitTestLasso: (e, t) => {
|
|
56
|
-
let n = a(e);
|
|
57
|
-
return n ? D(n, t) : [];
|
|
58
|
-
},
|
|
59
|
-
applyOps(e) {
|
|
60
|
-
i(this, e);
|
|
61
|
-
},
|
|
62
|
-
commitInsert: S ? (e) => S(e) : () => null,
|
|
63
|
-
commitPaste: (e, r, i) => {
|
|
64
|
-
let a = e.items;
|
|
65
|
-
if (a.length === 0) return [];
|
|
66
|
-
let o = r.dx, s = r.dy;
|
|
67
|
-
if (i?.dropPoint) {
|
|
68
|
-
let e = Infinity, n = Infinity, r = -Infinity, c = -Infinity;
|
|
69
|
-
for (let i of a) {
|
|
70
|
-
let a = t(T, i).getBounds(h(i));
|
|
71
|
-
a.x < e && (e = a.x), a.y < n && (n = a.y), a.x + a.width > r && (r = a.x + a.width), a.y + a.height > c && (c = a.y + a.height);
|
|
72
|
-
}
|
|
73
|
-
if (Number.isFinite(e) && Number.isFinite(n)) {
|
|
74
|
-
let t = (e + r) / 2, a = (n + c) / 2;
|
|
75
|
-
o = i.dropPoint.worldX - t, s = i.dropPoint.worldY - a;
|
|
76
|
-
}
|
|
77
|
-
}
|
|
78
|
-
let c = [];
|
|
79
|
-
for (let e of a) {
|
|
80
|
-
let r = JSON.parse(JSON.stringify(e));
|
|
81
|
-
r.id = C();
|
|
82
|
-
let i = n(h(r), o, s, t(T, r));
|
|
83
|
-
c.push(g(r, i));
|
|
84
|
-
}
|
|
85
|
-
return c;
|
|
86
|
-
},
|
|
87
|
-
snapshotSelection: (e) => ({ items: e.map((e) => p.current.find((t) => t.id === e)).filter((e) => !!e) })
|
|
88
|
-
};
|
|
89
|
-
return y && (A.getChildren = (e) => O(p.current, e)), A;
|
|
90
|
-
}
|
|
91
|
-
//#endregion
|
|
92
|
-
export { p as arrayAdapter };
|
|
93
|
-
|
|
94
|
-
//# sourceMappingURL=arrayAdapter.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"arrayAdapter.js","names":["defaultFromPose","obj","pose","monotonicPasteCounter","defaultNextId","c","arrayAdapter","config","d","RECT_POSE_DESCRIPTOR","getSelection","selectionRef","takenBy","out","o","ref","toPose","b","regionBoundsOf","poseDescriptorForNode","regionTakes","region","mode","silhouette","poseOutline","childrenIn","parentId","items","getParent","getChildren","arrayIndexFor","index","before","parentOf","id","at","adapter","fromPose","setItems","rectRegion","rect","polygonRegion","polygon","ops","createDefault","src","clip","dx","offset","dy","ctx","minX","minY","maxX","maxY","n","cx","cy","cloned","nextId","translated","translatePoseViaDescriptor","ids"],"sources":["../../../src/core/adapters/arrayAdapter.ts"],"sourcesContent":["import type { MutableRefObject } from 'react';\nimport type {\n AreaSelectAdapter,\n InsertAdapter,\n LassoHitMode,\n LassoSelectAdapter,\n MoveAdapter,\n ResizeAdapter,\n} from './types';\nimport type { Op } from '../ops/types';\nimport { applyOpsTo } from '../applyOps';\nimport { parentOf } from '../ops/slot';\nimport type { Bounds } from '../viewport/fitViewToBounds';\nimport type { ClipboardSnapshot } from './types';\nimport {\n poseDescriptorForNode,\n translatePoseViaDescriptor,\n RECT_POSE_DESCRIPTOR,\n type PoseDescriptor,\n} from 'core/geometry/poseDescriptor';\nimport type { Path } from '@weasel-js/geom';\nimport {\n polygonRegion,\n poseOutline,\n rectRegion,\n regionBoundsOf,\n regionTakes,\n type SelectRegion,\n} from 'core/geometry/regionHit';\n\n/** Configuration for `arrayAdapter`. */\nexport interface ArrayAdapterConfig<TNode extends { id: string }, TPose> {\n /** Live ref to the current array. */\n ref: MutableRefObject<TNode[]>;\n /** Functional setter (typically the second value from `useState`). */\n setItems: (updater: (items: TNode[]) => TNode[]) => void;\n /** Project an object to its pose. Required. */\n toPose: (obj: TNode) => TPose;\n /** Merge a new pose back into an object. Default: shallow spread. */\n fromPose?: (obj: TNode, pose: TPose) => TNode;\n /** Optional parent lookup. Default returns `null`. */\n getParent?: (id: string) => string | null;\n /** Optional reparent mutator. Default is a noop. */\n setParent?: (id: string, parentId: string | null) => void;\n /** Optional children lookup for a node id. The adapter answers the root\n * itself, from `ref` and `getParent` in array order, so this is never\n * called with `null`. Default omits the method entirely. */\n getChildren?: (id: string) => string[] | undefined;\n\n /** Live ref to the current selection. Default: empty array. */\n selectionRef?: MutableRefObject<string[]>;\n /** Selection setter. Default: noop. */\n setSelection?: (ids: string[]) => void;\n\n /** Factory for `commitInsert` — invoked at the end of an insert drag.\n * Consumers own id generation and any palette/payload fields. Returning\n * `null` aborts the insert. When omitted, `commitInsert` returns `null`. */\n createDefault?: (bounds: Bounds) => TNode | null;\n\n /** How to read and rewrite item poses. Default `RECT_POSE_DESCRIPTOR`,\n * which reads the pose as its own AABB — the canonical axis-aligned rect\n * pose. `AUTO_POSE_DESCRIPTOR` lives above `core/` and so cannot be the\n * default here; pass it for a scene whose poses may be Paths. */\n poseDescriptor?: PoseDescriptor<TPose>;\n\n /** The outline a node draws, for marquee and lasso, in world coordinates.\n * Return `null` where the pose says it all. Default: none — a polygon pose\n * is its own outline, and anything else is its pose rect, rotated by\n * `rotation`. The kit's painters live above `core/`, so a scene whose\n * nodes they draw passes `findShapeSilhouette` to be tested as drawn. */\n silhouette?: (node: TNode, pose: TPose) => Path | null;\n\n /** Factory for fresh node ids in `commitPaste`. Default: `crypto.randomUUID()`\n * when available, otherwise a monotonic `paste-<n>` counter. Override\n * when consumers want stable id schemes (e.g. `clip-${n++}`). */\n nextId?: () => string;\n}\n\n/**\n * Combined adapter satisfying every narrow adapter the kit ships. Methods\n * with no default implementation (e.g. `commitInsert` without\n * `createDefault`) return null/[]/noop — sufficient to typecheck against\n * `InsertAdapter`/`AreaSelectAdapter`, and the corresponding gesture hook\n * simply produces no commit.\n */\nexport interface ArrayAdapter<TNode extends { id: string }, TPose>\n extends MoveAdapter<TNode, TPose>,\n ResizeAdapter<TNode, TPose>,\n InsertAdapter<TNode>,\n AreaSelectAdapter,\n LassoSelectAdapter {\n getNodes(): TNode[];\n removeNode(id: string): void;\n // ArrayAdapter satisfies the union of all narrow adapters; redeclare the\n // methods that are optional on AreaSelectAdapter (post-relaxation) but\n // required on InsertAdapter so TS sees a single non-conflicting signature.\n getSelection(): string[];\n setSelection(ids: string[]): void;\n // Redeclare applyOps with an optional label so it's compatible with both\n // MoveAdapter (label required) and AreaSelectAdapter (label absent = transient).\n applyOps?(ops: Op[], label?: string): void;\n}\n\nfunction defaultFromPose<TNode extends { id: string }, TPose>(\n obj: TNode,\n pose: TPose,\n): TNode {\n return { ...obj, ...(pose as object) } as TNode;\n}\n\nlet monotonicPasteCounter = 0;\nfunction defaultNextId(): string {\n const c = (globalThis as { crypto?: { randomUUID?: () => string } }).crypto;\n if (c && typeof c.randomUUID === 'function') return c.randomUUID();\n return `paste-${monotonicPasteCounter++}`;\n}\n\n/**\n * Synthesize a many-faceted adapter from a `useState`-array scene. Always\n * satisfies `MoveAdapter`, `ResizeAdapter`, `InsertAdapter`, and\n * `AreaSelectAdapter` via structural typing. Override individual methods by\n * spreading the result.\n *\n * `applyOps` is intentionally omitted — hooks fall back to the built-in\n * dispatcher (see `dispatchApplyBatch`). Apps with custom history\n * integration supply their own via spread.\n */\nexport function arrayAdapter<TNode extends { id: string }, TPose>(\n config: ArrayAdapterConfig<TNode, TPose>,\n): ArrayAdapter<TNode, TPose> {\n const {\n ref,\n setItems,\n toPose,\n fromPose = defaultFromPose,\n getParent = () => null,\n setParent = () => {},\n getChildren,\n selectionRef,\n setSelection = () => {},\n createDefault,\n nextId = defaultNextId,\n silhouette,\n } = config;\n\n const d = (config.poseDescriptor ?? RECT_POSE_DESCRIPTOR) as PoseDescriptor<TPose>;\n\n const getSelection = selectionRef ? () => selectionRef.current : () => [];\n\n const takenBy = (region: SelectRegion, mode: LassoHitMode): string[] => {\n const out: string[] = [];\n for (const o of ref.current) {\n const pose = toPose(o);\n const b = regionBoundsOf(o, pose, poseDescriptorForNode(d, o) as PoseDescriptor<unknown>);\n const outline = (): Path => silhouette?.(o, pose) ?? poseOutline(pose, b);\n if (regionTakes(region, mode, pose, b, outline)) out.push(o.id);\n }\n return out;\n };\n\n // Root order is the item array's order, which this adapter owns — asking\n // the consumer would get a callback written for node ids, and its `[]`\n // is indistinguishable from \"the root has no children\".\n const childrenIn = (items: readonly TNode[], parentId: string | null): string[] =>\n parentId === null\n ? items.filter((o) => getParent(o.id) === null).map((o) => o.id)\n : getChildren?.(parentId) ?? [];\n\n /** Where in `items` an insert at `index` lands, `undefined` to append. With\n * `getChildren` configured the ops hand over an ordinal among the node's\n * siblings, which is an array index only when nothing else sits between. */\n const arrayIndexFor = (items: readonly TNode[], obj: TNode, index: number | undefined): number | undefined => {\n if (index === undefined || index < 0) return undefined;\n if (!getChildren) return index < items.length ? index : undefined;\n const before = childrenIn(items, parentOf(obj)).filter((id) => id !== obj.id)[index];\n const at = before === undefined ? -1 : items.findIndex((o) => o.id === before);\n return at < 0 ? undefined : at;\n };\n\n const adapter: ArrayAdapter<TNode, TPose> = {\n getNode: (id) => ref.current.find((o) => o.id === id),\n getNodes: () => ref.current,\n getPose: (id) => {\n const obj = ref.current.find((o) => o.id === id);\n if (!obj) throw new Error(`arrayAdapter.getPose: id \"${id}\" not found`);\n return toPose(obj);\n },\n setPose: (id, pose) => {\n setItems((items) => items.map((o) => (o.id === id ? fromPose(o, pose) : o)));\n },\n getParent,\n setParent,\n\n insertNode: (obj, index) => setItems((items) => {\n const at = arrayIndexFor(items, obj, index);\n if (at === undefined) return [...items, obj];\n return [...items.slice(0, at), obj, ...items.slice(at)];\n }),\n removeNode: (id) => setItems((items) => items.filter((o) => o.id !== id)),\n\n getSelection,\n setSelection,\n\n hitTestArea: (rect) => takenBy(rectRegion(rect), 'intersect'),\n\n hitTestLasso: (polygon, mode: LassoHitMode) => {\n const region = polygonRegion(polygon);\n return region ? takenBy(region, mode) : [];\n },\n\n // Use a method shorthand so `this` is the call-site receiver, not the\n // adapter we're building here. That way consumers can spread additional\n // methods on top (e.g. `{ ...arrayAdapter(...), ...selection.adapterMethods }`)\n // and `applyOps` will dispatch ops against the merged object.\n applyOps(ops: Op[]) {\n applyOpsTo(this, ops);\n },\n\n commitInsert: createDefault ? (b) => createDefault(b) : () => null,\n commitPaste: (\n clip: ClipboardSnapshot,\n offset: { dx: number; dy: number },\n ctx?: { dropPoint?: { worldX: number; worldY: number } },\n ): TNode[] => {\n const src = clip.items as TNode[];\n if (src.length === 0) return [];\n\n // Default translation = `offset`. When `dropPoint` is supplied, center\n // the cluster's union AABB at the drop point — matches the\n // `ClipboardDemo` reference wiring.\n let dx = offset.dx;\n let dy = offset.dy;\n if (ctx?.dropPoint) {\n let minX = Infinity, minY = Infinity, maxX = -Infinity, maxY = -Infinity;\n for (const n of src) {\n const b = poseDescriptorForNode(d, n).getBounds(toPose(n));\n if (b.x < minX) minX = b.x;\n if (b.y < minY) minY = b.y;\n if (b.x + b.width > maxX) maxX = b.x + b.width;\n if (b.y + b.height > maxY) maxY = b.y + b.height;\n }\n // Defensive: if the descriptor returned nothing usable, fall back to offset.\n if (Number.isFinite(minX) && Number.isFinite(minY)) {\n const cx = (minX + maxX) / 2;\n const cy = (minY + maxY) / 2;\n dx = ctx.dropPoint.worldX - cx;\n dy = ctx.dropPoint.worldY - cy;\n }\n }\n\n // Deep-clone via JSON round-trip so the snapshot isn't mutated by\n // downstream pose edits.\n const out: TNode[] = [];\n for (const n of src) {\n const cloned = JSON.parse(JSON.stringify(n)) as TNode;\n (cloned as { id: string }).id = nextId();\n const translated = translatePoseViaDescriptor(\n toPose(cloned), dx, dy, poseDescriptorForNode(d, cloned),\n );\n out.push(fromPose(cloned, translated));\n }\n return out;\n },\n snapshotSelection: (ids) => ({\n items: ids\n .map((id) => ref.current.find((o) => o.id === id))\n .filter((o): o is TNode => !!o),\n }),\n };\n\n if (getChildren) {\n (adapter as ArrayAdapter<TNode, TPose> & {\n getChildren: (parentId: string | null) => string[];\n }).getChildren = (parentId) => childrenIn(ref.current, parentId);\n }\n\n return adapter;\n}\n"],"mappings":"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"}
|
|
@@ -1,13 +0,0 @@
|
|
|
1
|
-
import { arrayAdapter as e } from "./arrayAdapter.js";
|
|
2
|
-
//#region src/core/adapters/useArrayAdapter.ts
|
|
3
|
-
function t(t) {
|
|
4
|
-
let { items: n, ...r } = t;
|
|
5
|
-
return e({
|
|
6
|
-
ref: { current: n },
|
|
7
|
-
...r
|
|
8
|
-
});
|
|
9
|
-
}
|
|
10
|
-
//#endregion
|
|
11
|
-
export { t as useArrayAdapter };
|
|
12
|
-
|
|
13
|
-
//# sourceMappingURL=useArrayAdapter.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"useArrayAdapter.js","names":["useArrayAdapter","rest","options","arrayAdapter","items"],"sources":["../../../src/core/adapters/useArrayAdapter.ts"],"sourcesContent":["import { arrayAdapter, type ArrayAdapter, type ArrayAdapterConfig } from './arrayAdapter';\n\n/** Options for `useArrayAdapter` — same shape as `ArrayAdapterConfig` minus the\n * `ref` field, which the hook manages internally from `items`. */\nexport type UseArrayAdapterOptions<TNode extends { id: string }, TPose> =\n Omit<ArrayAdapterConfig<TNode, TPose>, 'ref' | 'setItems'> & {\n items: TNode[];\n setItems: ArrayAdapterConfig<TNode, TPose>['setItems'];\n };\n\n/** Hook wrapper around `arrayAdapter` over this render's `items`. Eliminates\n * the `useRef + ref.current = items` boilerplate every flat-list scene needs.\n * Returns a fresh adapter each render, reading that render's items — so an\n * adapter a render reads from sees its own items, and the gesture hooks, which\n * hold the latest committed adapter, see the committed ones. */\nexport function useArrayAdapter<TNode extends { id: string }, TPose>(\n options: UseArrayAdapterOptions<TNode, TPose>,\n): ArrayAdapter<TNode, TPose> {\n const { items, ...rest } = options;\n return arrayAdapter<TNode, TPose>({ ref: { current: items }, ...rest });\n}\n"],"mappings":";;AAeA,SAAgBA,EACd,GAC4B;CAC5B,IAAM,EAAE,UAAO,GAAGC,MAASC;CAC3B,OAAOC,EAA2B;EAAE,KAAK,EAAE,SAASC,EAAM;EAAG,GAAGH;CAAK,CAAC;AACxE"}
|
|
@@ -1,102 +0,0 @@
|
|
|
1
|
-
import { getPaintKind as e } from "./paintKinds.js";
|
|
2
|
-
//#region src/core/fillInPoseFrame.ts
|
|
3
|
-
function t(t, n) {
|
|
4
|
-
if (!a(t)) return e(t.fill)?.inPoseFrame?.(t, n) ?? t;
|
|
5
|
-
if (r(t)) {
|
|
6
|
-
let e = t.origin ?? {
|
|
7
|
-
x: 0,
|
|
8
|
-
y: 0
|
|
9
|
-
};
|
|
10
|
-
return {
|
|
11
|
-
...t,
|
|
12
|
-
origin: {
|
|
13
|
-
x: n.x + e.x,
|
|
14
|
-
y: n.y + e.y
|
|
15
|
-
},
|
|
16
|
-
units: "local"
|
|
17
|
-
};
|
|
18
|
-
}
|
|
19
|
-
if (!i(t)) return t;
|
|
20
|
-
let o = (e) => ({
|
|
21
|
-
x: n.x + e.x * n.width,
|
|
22
|
-
y: n.y + e.y * n.height
|
|
23
|
-
});
|
|
24
|
-
if (t.fill === "linear-gradient") return {
|
|
25
|
-
...t,
|
|
26
|
-
from: o(t.from),
|
|
27
|
-
to: o(t.to),
|
|
28
|
-
units: "local"
|
|
29
|
-
};
|
|
30
|
-
if (t.fill === "radial-gradient") {
|
|
31
|
-
let e = Math.hypot(n.width, n.height) / Math.SQRT2;
|
|
32
|
-
return {
|
|
33
|
-
...t,
|
|
34
|
-
center: o(t.center),
|
|
35
|
-
radius: t.radius * e,
|
|
36
|
-
units: "local"
|
|
37
|
-
};
|
|
38
|
-
}
|
|
39
|
-
return {
|
|
40
|
-
...t,
|
|
41
|
-
center: o(t.center),
|
|
42
|
-
units: "local"
|
|
43
|
-
};
|
|
44
|
-
}
|
|
45
|
-
function n(t, n) {
|
|
46
|
-
if (!a(t)) return e(t.fill)?.toBoundsFrame?.(t, n) ?? t;
|
|
47
|
-
if (t.fill === "pattern") {
|
|
48
|
-
let e = t.origin ?? {
|
|
49
|
-
x: 0,
|
|
50
|
-
y: 0
|
|
51
|
-
};
|
|
52
|
-
return {
|
|
53
|
-
...t,
|
|
54
|
-
origin: {
|
|
55
|
-
x: e.x - n.x,
|
|
56
|
-
y: e.y - n.y
|
|
57
|
-
},
|
|
58
|
-
units: "bounds"
|
|
59
|
-
};
|
|
60
|
-
}
|
|
61
|
-
if (t.fill !== "linear-gradient" && t.fill !== "radial-gradient" && t.fill !== "conic-gradient" || n.width === 0 || n.height === 0) return t;
|
|
62
|
-
let r = (e) => ({
|
|
63
|
-
x: (e.x - n.x) / n.width,
|
|
64
|
-
y: (e.y - n.y) / n.height
|
|
65
|
-
});
|
|
66
|
-
if (t.fill === "linear-gradient") return {
|
|
67
|
-
...t,
|
|
68
|
-
from: r(t.from),
|
|
69
|
-
to: r(t.to),
|
|
70
|
-
units: "bounds"
|
|
71
|
-
};
|
|
72
|
-
if (t.fill === "radial-gradient") {
|
|
73
|
-
let e = Math.hypot(n.width, n.height) / Math.SQRT2;
|
|
74
|
-
return {
|
|
75
|
-
...t,
|
|
76
|
-
center: r(t.center),
|
|
77
|
-
radius: t.radius / e,
|
|
78
|
-
units: "bounds"
|
|
79
|
-
};
|
|
80
|
-
}
|
|
81
|
-
return {
|
|
82
|
-
...t,
|
|
83
|
-
center: r(t.center),
|
|
84
|
-
units: "bounds"
|
|
85
|
-
};
|
|
86
|
-
}
|
|
87
|
-
function r(e) {
|
|
88
|
-
return e.fill === "pattern" && e.units === "bounds";
|
|
89
|
-
}
|
|
90
|
-
function i(e) {
|
|
91
|
-
if (e === void 0) return !1;
|
|
92
|
-
let t = e.fill;
|
|
93
|
-
return t !== "linear-gradient" && t !== "radial-gradient" && t !== "conic-gradient" ? !1 : e.units === "bounds";
|
|
94
|
-
}
|
|
95
|
-
function a(e) {
|
|
96
|
-
let t = e.fill ?? "solid";
|
|
97
|
-
return t === "solid" || t === "pattern" || t === "linear-gradient" || t === "radial-gradient" || t === "conic-gradient";
|
|
98
|
-
}
|
|
99
|
-
//#endregion
|
|
100
|
-
export { t as fillInPoseFrame, n as fillToBoundsFrame };
|
|
101
|
-
|
|
102
|
-
//# sourceMappingURL=fillInPoseFrame.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"fillInPoseFrame.js","names":["fillInPoseFrame","isBuiltinKind","fill","getPaintKind","box","isBoundsPattern","o","isBoundsGradient","toBox","p","scale","fillToBoundsFrame","fromBox","kind"],"sources":["../../src/core/fillInPoseFrame.ts"],"sourcesContent":["/**\n * Resolve a `units: 'bounds'` gradient into the frame its node is painted in.\n *\n * Node painters bake the pose into their geometry (`pathInPoseFrame`) rather\n * than emitting a per-node transform, so by the time the renderer sees a\n * scene node there is no node-local space left for a gradient to refer to.\n * This is the paint-side counterpart: it maps box-relative gradient geometry\n * onto the same box the path was just projected into, so the two arrive in\n * the renderer in one frame.\n */\n\nimport type { FillStyle, GradientFill, PosedFill } from '@weasel-js/paint';\nimport { getPaintKind } from './paintKinds';\n\n/** The box a `'bounds'` gradient's normalized geometry is mapped onto —\n * usually a node's bounds. */\nexport interface FillPoseBox {\n x: number;\n y: number;\n width: number;\n height: number;\n}\n\n/**\n * Map a `'bounds'` gradient's `0..1` geometry onto `box`, returning it in the\n * box's own frame (`units: 'local'`). Any other fill — solid, pattern, or a\n * gradient in another space — is returned untouched.\n *\n * Radii scale by the box's normalized diagonal, SVG's rule for a percentage\n * radius against `objectBoundingBox`: `sqrt(w² + h²) / sqrt(2)`, which is\n * exactly `w` for a square box. The renderer's radial gradient is circular,\n * so a non-square box cannot make it the ellipse SVG would — this keeps the\n * radius proportionate instead.\n */\nexport function fillInPoseFrame(fill: FillStyle, box: FillPoseBox): PosedFill {\n if (!isBuiltinKind(fill)) {\n return (getPaintKind(fill.fill)?.inPoseFrame?.(fill, box) ?? fill) as PosedFill;\n }\n if (isBoundsPattern(fill)) {\n const o = fill.origin ?? { x: 0, y: 0 };\n return { ...fill, origin: { x: box.x + o.x, y: box.y + o.y }, units: 'local' as const };\n }\n if (!isBoundsGradient(fill)) return fill as PosedFill;\n\n const toBox = (p: { x: number; y: number }): { x: number; y: number } => ({\n x: box.x + p.x * box.width,\n y: box.y + p.y * box.height,\n });\n\n if (fill.fill === 'linear-gradient') {\n return { ...fill, from: toBox(fill.from), to: toBox(fill.to), units: 'local' as const };\n }\n if (fill.fill === 'radial-gradient') {\n const scale = Math.hypot(box.width, box.height) / Math.SQRT2;\n return { ...fill, center: toBox(fill.center), radius: fill.radius * scale, units: 'local' as const };\n }\n return { ...fill, center: toBox(fill.center), units: 'local' as const };\n}\n\n/**\n * Inverse of {@link fillInPoseFrame}: express a gradient already positioned\n * in `box`'s frame as `0..1` fractions of that box (`units: 'bounds'`), so\n * it follows the node when moved or resized.\n *\n * The importer's counterpart — SVG `userSpaceOnUse` coordinates arrive in\n * page space, and normalizing them here makes an imported gradient behave\n * exactly like one drawn in the app.\n *\n * A zero-width or zero-height box has no frame to normalize against; the\n * fill is returned untouched rather than divided by zero.\n */\nexport function fillToBoundsFrame(fill: FillStyle, box: FillPoseBox): FillStyle {\n if (!isBuiltinKind(fill)) {\n return getPaintKind(fill.fill)?.toBoundsFrame?.(fill, box) ?? fill;\n }\n if (fill.fill === 'pattern') {\n const o = fill.origin ?? { x: 0, y: 0 };\n return { ...fill, origin: { x: o.x - box.x, y: o.y - box.y }, units: 'bounds' as const };\n }\n const isGradient = fill.fill === 'linear-gradient'\n || fill.fill === 'radial-gradient'\n || fill.fill === 'conic-gradient';\n if (!isGradient) return fill;\n if (box.width === 0 || box.height === 0) return fill;\n\n const fromBox = (p: { x: number; y: number }): { x: number; y: number } => ({\n x: (p.x - box.x) / box.width,\n y: (p.y - box.y) / box.height,\n });\n\n if (fill.fill === 'linear-gradient') {\n return { ...fill, from: fromBox(fill.from), to: fromBox(fill.to), units: 'bounds' as const };\n }\n if (fill.fill === 'radial-gradient') {\n const scale = Math.hypot(box.width, box.height) / Math.SQRT2;\n return { ...fill, center: fromBox(fill.center), radius: fill.radius / scale, units: 'bounds' as const };\n }\n return { ...fill, center: fromBox(fill.center), units: 'bounds' as const };\n}\n\n/** True when this fill is a pattern anchored to the painted node's box.\n * Rebasing it is a translation only — a resize must reveal more tiles, not\n * stretch them, which is the whole reason patterns get their own branch. */\nfunction isBoundsPattern(\n fill: FillStyle,\n): fill is Extract<FillStyle, { fill: 'pattern' }> {\n return fill.fill === 'pattern' && fill.units === 'bounds';\n}\n\n/** True when this fill is a gradient declaring box-relative geometry. */\nfunction isBoundsGradient(fill: FillStyle | undefined): fill is GradientFill {\n if (fill === undefined) return false;\n const kind = fill.fill;\n if (kind !== 'linear-gradient' && kind !== 'radial-gradient' && kind !== 'conic-gradient') {\n return false;\n }\n return fill.units === 'bounds';\n}\n\n/** The five kinds whose frame conversion is written above. Anything else is a\n * registered kind and converts through its own entry. */\nfunction isBuiltinKind(fill: FillStyle): boolean {\n const kind = fill.fill ?? 'solid';\n return kind === 'solid' || kind === 'pattern'\n || kind === 'linear-gradient' || kind === 'radial-gradient' || kind === 'conic-gradient';\n}\n"],"mappings":"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"}
|