@weasel-js/core 1.9.4 → 1.10.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +918 -0
- package/README.md +38 -3
- package/dist/WeaselProvider.js +5 -7
- package/dist/WeaselProvider.js.map +1 -1
- package/dist/affordances/composeAffordanceLayer.js +92 -84
- package/dist/affordances/composeAffordanceLayer.js.map +1 -1
- package/dist/affordances/cornerResize.js +3 -2
- package/dist/affordances/cornerResize.js.map +1 -1
- package/dist/affordances/hitAffordanceRegions.js +71 -101
- package/dist/affordances/hitAffordanceRegions.js.map +1 -1
- package/dist/affordances/pathAnchors.js +50 -28
- package/dist/affordances/pathAnchors.js.map +1 -1
- package/dist/affordances/rotateCursor.js +12 -0
- package/dist/affordances/rotateCursor.js.map +1 -0
- package/dist/affordances/rotationHandle.js +44 -46
- package/dist/affordances/rotationHandle.js.map +1 -1
- package/dist/animation/behaviors/coast.js +21 -0
- package/dist/animation/behaviors/coast.js.map +1 -0
- package/dist/animation/behaviors/coastByWrite.js +107 -0
- package/dist/animation/behaviors/coastByWrite.js.map +1 -0
- package/dist/animation/behaviors/coastOnTargets.js +94 -0
- package/dist/animation/behaviors/coastOnTargets.js.map +1 -0
- package/dist/animation/behaviors/momentum.js +48 -136
- package/dist/animation/behaviors/momentum.js.map +1 -1
- package/dist/animation/clipTargets.js +12 -0
- package/dist/animation/clipTargets.js.map +1 -0
- package/dist/animation/index.js +15 -20
- package/dist/animation/poseHelpers.js +112 -33
- package/dist/animation/poseHelpers.js.map +1 -1
- package/dist/animation/poseTarget.js +115 -0
- package/dist/animation/poseTarget.js.map +1 -0
- package/dist/animation/reflow.js +113 -83
- package/dist/animation/reflow.js.map +1 -1
- package/dist/animation/rewind.js +66 -0
- package/dist/animation/rewind.js.map +1 -0
- package/dist/animation/rig/bindRig.js +85 -53
- package/dist/animation/rig/bindRig.js.map +1 -1
- package/dist/animation/rig/rigNode.js +99 -0
- package/dist/animation/rig/rigNode.js.map +1 -0
- package/dist/animation/rig/rigSeat.js +59 -0
- package/dist/animation/rig/rigSeat.js.map +1 -0
- package/dist/animation/rig/skinBinding.js +64 -0
- package/dist/animation/rig/skinBinding.js.map +1 -0
- package/dist/animation/rig/useRig.js +31 -16
- package/dist/animation/rig/useRig.js.map +1 -1
- package/dist/animation/wrappers/animateLifecycle.js +8 -7
- package/dist/animation/wrappers/animateLifecycle.js.map +1 -1
- package/dist/animation/wrappers/animateOnSetPose.js +31 -31
- package/dist/animation/wrappers/animateOnSetPose.js.map +1 -1
- package/dist/animation/wrappers/instantPose.js.map +1 -1
- package/dist/animation/writtenPoseTarget.js +33 -0
- package/dist/animation/writtenPoseTarget.js.map +1 -0
- package/dist/autoPoseDescriptor-DHg5KqaJ.d.ts +27 -0
- package/dist/barrel/canvas.js +32 -0
- package/dist/barrel/chrome.js +10 -10
- package/dist/barrel/input.js +16 -17
- package/dist/barrel/interactions.js +34 -37
- package/dist/barrel/paint.js +11 -18
- package/dist/barrel/paths.js +13 -19
- package/dist/barrel/renderer.js +14 -20
- package/dist/barrel/routing.js +54 -47
- package/dist/barrel/scene.js +37 -0
- package/dist/barrel/text.js +9 -18
- package/dist/barrel/viewport.js +44 -51
- package/dist/canvas/Canvas.js +270 -475
- package/dist/canvas/Canvas.js.map +1 -1
- package/dist/canvas/CanvasView.js +168 -190
- package/dist/canvas/CanvasView.js.map +1 -1
- package/dist/canvas/CursorCoordsHud.js +24 -25
- package/dist/canvas/CursorCoordsHud.js.map +1 -1
- package/dist/canvas/DrawCanvas.js +39 -56
- package/dist/canvas/DrawCanvas.js.map +1 -1
- package/dist/canvas/ModalityHud.js.map +1 -1
- package/dist/canvas/NodeShape.js +28 -29
- package/dist/canvas/NodeShape.js.map +1 -1
- package/dist/canvas/PickHud.js.map +1 -1
- package/dist/canvas/SceneCanvas/DevHuds.js +40 -0
- package/dist/canvas/SceneCanvas/DevHuds.js.map +1 -0
- package/dist/canvas/SceneCanvas/GestureDispatcherMounter.js +66 -107
- package/dist/canvas/SceneCanvas/GestureDispatcherMounter.js.map +1 -1
- package/dist/canvas/SceneCanvas/PointerProviderIfRoot.js +33 -36
- package/dist/canvas/SceneCanvas/PointerProviderIfRoot.js.map +1 -1
- package/dist/canvas/SceneCanvas/StandardActionsRegistrar.js +38 -50
- package/dist/canvas/SceneCanvas/StandardActionsRegistrar.js.map +1 -1
- package/dist/canvas/SceneCanvas/ToolKeybindingsMounter.js +3 -3
- package/dist/canvas/SceneCanvas/ToolKeybindingsMounter.js.map +1 -1
- package/dist/canvas/SceneCanvas/coordTrace.js +37 -1
- package/dist/canvas/SceneCanvas/coordTrace.js.map +1 -1
- package/dist/canvas/SceneCanvas/defaultNodeProperties.js +319 -270
- package/dist/canvas/SceneCanvas/defaultNodeProperties.js.map +1 -1
- package/dist/canvas/SceneCanvas/defaultNodeRouting.js +1 -1
- package/dist/canvas/SceneCanvas/defaultNodeRouting.js.map +1 -1
- package/dist/canvas/SceneCanvas/dispatcherGestureBounds.js.map +1 -1
- package/dist/canvas/SceneCanvas/features.js +71 -62
- package/dist/canvas/SceneCanvas/features.js.map +1 -1
- package/dist/canvas/SceneCanvas/insertPreviewCommands.js +97 -0
- package/dist/canvas/SceneCanvas/insertPreviewCommands.js.map +1 -0
- package/dist/canvas/SceneCanvas/isDev.js.map +1 -1
- package/dist/canvas/SceneCanvas/poseGeometry.js +33 -37
- package/dist/canvas/SceneCanvas/poseGeometry.js.map +1 -1
- package/dist/canvas/SceneCanvas/props.js +15 -14
- package/dist/canvas/SceneCanvas/props.js.map +1 -1
- package/dist/canvas/SceneCanvas/scenePointQuery.js +50 -0
- package/dist/canvas/SceneCanvas/scenePointQuery.js.map +1 -0
- package/dist/canvas/SceneCanvas/shapeGeneratorProperties.js +52 -0
- package/dist/canvas/SceneCanvas/shapeGeneratorProperties.js.map +1 -0
- package/dist/canvas/SceneCanvas/toolRegistry.js +23 -0
- package/dist/canvas/SceneCanvas/toolRegistry.js.map +1 -0
- package/dist/canvas/SceneCanvas/useActionTunings.js +17 -0
- package/dist/canvas/SceneCanvas/useActionTunings.js.map +1 -0
- package/dist/canvas/SceneCanvas/useActionsPropResolver.js +6 -1
- package/dist/canvas/SceneCanvas/useActionsPropResolver.js.map +1 -1
- package/dist/canvas/SceneCanvas/useBuiltinShapeTools.js.map +1 -1
- package/dist/canvas/SceneCanvas/useBuiltinTools.js +21 -0
- package/dist/canvas/SceneCanvas/useBuiltinTools.js.map +1 -0
- package/dist/canvas/SceneCanvas/useCanvasCamera.js +46 -0
- package/dist/canvas/SceneCanvas/useCanvasCamera.js.map +1 -0
- package/dist/canvas/SceneCanvas/useCanvasDispatcher.js +20 -0
- package/dist/canvas/SceneCanvas/useCanvasDispatcher.js.map +1 -0
- package/dist/canvas/SceneCanvas/useCanvasSelection.js +16 -0
- package/dist/canvas/SceneCanvas/useCanvasSelection.js.map +1 -0
- package/dist/canvas/SceneCanvas/useCanvasTools.js +67 -0
- package/dist/canvas/SceneCanvas/useCanvasTools.js.map +1 -0
- package/dist/canvas/SceneCanvas/useDispatcherOverlayLayer.js +49 -113
- package/dist/canvas/SceneCanvas/useDispatcherOverlayLayer.js.map +1 -1
- package/dist/canvas/SceneCanvas/useHeldModifiers.js +20 -0
- package/dist/canvas/SceneCanvas/useHeldModifiers.js.map +1 -0
- package/dist/canvas/SceneCanvas/useNodeAtPoint.js +26 -0
- package/dist/canvas/SceneCanvas/useNodeAtPoint.js.map +1 -0
- package/dist/canvas/SceneCanvas/useNodeKinds.js +26 -0
- package/dist/canvas/SceneCanvas/useNodeKinds.js.map +1 -0
- package/dist/canvas/SceneCanvas/usePreviewGhostLayer.js +51 -41
- package/dist/canvas/SceneCanvas/usePreviewGhostLayer.js.map +1 -1
- package/dist/canvas/SceneCanvas/useSceneCanvasHandle.js +47 -0
- package/dist/canvas/SceneCanvas/useSceneCanvasHandle.js.map +1 -0
- package/dist/canvas/SceneCanvas/useSceneCanvasLayers.js +66 -0
- package/dist/canvas/SceneCanvas/useSceneCanvasLayers.js.map +1 -0
- package/dist/canvas/SceneCanvas/useSceneChrome.js +59 -0
- package/dist/canvas/SceneCanvas/useSceneChrome.js.map +1 -0
- package/dist/canvas/SceneCanvas/useSceneRedrawSources.js +23 -0
- package/dist/canvas/SceneCanvas/useSceneRedrawSources.js.map +1 -0
- package/dist/canvas/SceneCanvas/useSceneSelectTool.js +65 -101
- package/dist/canvas/SceneCanvas/useSceneSelectTool.js.map +1 -1
- package/dist/canvas/SceneCanvas/useSceneSlotLayers.js +37 -0
- package/dist/canvas/SceneCanvas/useSceneSlotLayers.js.map +1 -0
- package/dist/canvas/SceneCanvas/useSelectionOverlayLayer.js +38 -0
- package/dist/canvas/SceneCanvas/useSelectionOverlayLayer.js.map +1 -0
- package/dist/canvas/SceneCanvas/useViewLayerGate.js +20 -0
- package/dist/canvas/SceneCanvas/useViewLayerGate.js.map +1 -0
- package/dist/canvas/SceneCanvas/useViewportActions.js +9 -1
- package/dist/canvas/SceneCanvas/useViewportActions.js.map +1 -1
- package/dist/canvas/SceneCanvas/worldPointAt.js +8 -0
- package/dist/canvas/SceneCanvas/worldPointAt.js.map +1 -0
- package/dist/canvas/SceneCanvas.js +301 -708
- package/dist/canvas/SceneCanvas.js.map +1 -1
- package/dist/canvas/SceneViewCanvas.js +41 -47
- package/dist/canvas/SceneViewCanvas.js.map +1 -1
- package/dist/canvas/SurfaceCanvas.js +40 -0
- package/dist/canvas/SurfaceCanvas.js.map +1 -0
- package/dist/canvas/adapterDerivedPath.js +26 -0
- package/dist/canvas/adapterDerivedPath.js.map +1 -0
- package/dist/canvas/adapterPickSource.js +34 -0
- package/dist/canvas/adapterPickSource.js.map +1 -0
- package/dist/canvas/affordanceAt.js +12 -2
- package/dist/canvas/affordanceAt.js.map +1 -1
- package/dist/canvas/buildSceneLayer.js +81 -61
- package/dist/canvas/buildSceneLayer.js.map +1 -1
- package/dist/canvas/buildSceneTree.js +56 -34
- package/dist/canvas/buildSceneTree.js.map +1 -1
- package/dist/canvas/canvasRenderer.js +40 -44
- package/dist/canvas/canvasRenderer.js.map +1 -1
- package/dist/canvas/colorOverrides.js.map +1 -1
- package/dist/canvas/copiesAbove.js +27 -0
- package/dist/canvas/copiesAbove.js.map +1 -0
- package/dist/canvas/defaultDrawOne.js +25 -24
- package/dist/canvas/defaultDrawOne.js.map +1 -1
- package/dist/canvas/deps/areaSelect.js +4 -4
- package/dist/canvas/deps/areaSelect.js.map +1 -1
- package/dist/canvas/deps/debug.js.map +1 -1
- package/dist/canvas/deps/editAnchors.js +47 -71
- package/dist/canvas/deps/editAnchors.js.map +1 -1
- package/dist/canvas/deps/geometryProjection.js.map +1 -1
- package/dist/canvas/deps/hitTestArea.js +45 -25
- package/dist/canvas/deps/hitTestArea.js.map +1 -1
- package/dist/canvas/deps/insert.js +149 -104
- package/dist/canvas/deps/insert.js.map +1 -1
- package/dist/canvas/deps/lassoSelect.js +5 -5
- package/dist/canvas/deps/lassoSelect.js.map +1 -1
- package/dist/canvas/deps/layout.js +9 -15
- package/dist/canvas/deps/layout.js.map +1 -1
- package/dist/canvas/deps/poseDescriptor.js +1 -1
- package/dist/canvas/deps/poseDescriptor.js.map +1 -1
- package/dist/canvas/deps/resizePolicy.js.map +1 -1
- package/dist/canvas/deps/slice.js +44 -45
- package/dist/canvas/deps/slice.js.map +1 -1
- package/dist/canvas/deps/textEdit.js +8 -8
- package/dist/canvas/deps/textEdit.js.map +1 -1
- package/dist/canvas/deps/view.js.map +1 -1
- package/dist/canvas/derivedPath.js +69 -43
- package/dist/canvas/derivedPath.js.map +1 -1
- package/dist/canvas/drawEnvelope.js +8 -4
- package/dist/canvas/drawEnvelope.js.map +1 -1
- package/dist/canvas/getNodeAtPoint.js +2 -6
- package/dist/canvas/getNodeAtPoint.js.map +1 -1
- package/dist/canvas/hud.module.js.map +1 -1
- package/dist/canvas/insertPreviewExtent.js +33 -31
- package/dist/canvas/insertPreviewExtent.js.map +1 -1
- package/dist/canvas/layerOrder.js.map +1 -1
- package/dist/canvas/layerSlots.js +6 -1
- package/dist/canvas/layerSlots.js.map +1 -1
- package/dist/canvas/nodeShapes/derivedPainter.js +12 -12
- package/dist/canvas/nodeShapes/derivedPainter.js.map +1 -1
- package/dist/canvas/nodeShapes/imagePainter.js +10 -10
- package/dist/canvas/nodeShapes/imagePainter.js.map +1 -1
- package/dist/canvas/nodeShapes/memo.js.map +1 -1
- package/dist/canvas/nodeShapes/nodePaint.js +34 -23
- package/dist/canvas/nodeShapes/nodePaint.js.map +1 -1
- package/dist/canvas/nodeShapes/pathPainter.js +23 -22
- package/dist/canvas/nodeShapes/pathPainter.js.map +1 -1
- package/dist/canvas/nodeShapes/poseBox.js +6 -6
- package/dist/canvas/nodeShapes/poseBox.js.map +1 -1
- package/dist/canvas/nodeShapes/rectFallbackPainter.js +8 -8
- package/dist/canvas/nodeShapes/rectFallbackPainter.js.map +1 -1
- package/dist/canvas/nodeShapes/shapePainter.js +16 -16
- package/dist/canvas/nodeShapes/shapePainter.js.map +1 -1
- package/dist/canvas/nodeShapes/textPainter.js +1 -1
- package/dist/canvas/nodeShapes/textPainter.js.map +1 -1
- package/dist/canvas/overChildren.js +29 -0
- package/dist/canvas/overChildren.js.map +1 -0
- package/dist/canvas/overlayRoleStrokes.js.map +1 -1
- package/dist/canvas/paintCull.js +6 -8
- package/dist/canvas/paintCull.js.map +1 -1
- package/dist/{features/cursor → canvas}/paintedCursorLayer.js +2 -2
- package/dist/canvas/paintedCursorLayer.js.map +1 -0
- package/dist/canvas/pickReach.js +23 -0
- package/dist/canvas/pickReach.js.map +1 -0
- package/dist/canvas/pickWalk.js +43 -70
- package/dist/canvas/pickWalk.js.map +1 -1
- package/dist/canvas/planeClips.js +18 -19
- package/dist/canvas/planeClips.js.map +1 -1
- package/dist/canvas/poseCascade.js +41 -0
- package/dist/canvas/poseCascade.js.map +1 -0
- package/dist/canvas/poseRotation.js +1 -3
- package/dist/canvas/poseRotation.js.map +1 -1
- package/dist/canvas/rasterReadback.js +22 -0
- package/dist/canvas/rasterReadback.js.map +1 -0
- package/dist/canvas/renderDebugSnapshot.js +12 -12
- package/dist/canvas/renderDebugSnapshot.js.map +1 -1
- package/dist/canvas/renderNeeds.js +3 -3
- package/dist/canvas/renderNeeds.js.map +1 -1
- package/dist/canvas/renderSceneToPixels.js +64 -83
- package/dist/canvas/renderSceneToPixels.js.map +1 -1
- package/dist/canvas/sceneAdapter.js +59 -144
- package/dist/canvas/sceneAdapter.js.map +1 -1
- package/dist/canvas/sceneClipboard.js +1 -1
- package/dist/canvas/sceneClipboard.js.map +1 -1
- package/dist/canvas/sceneLayerPaint.js +4 -4
- package/dist/canvas/sceneLayerPaint.js.map +1 -1
- package/dist/canvas/sceneSlotWiring.js +10 -9
- package/dist/canvas/sceneSlotWiring.js.map +1 -1
- package/dist/canvas/sceneViewRender.js +37 -42
- package/dist/canvas/sceneViewRender.js.map +1 -1
- package/dist/canvas/slopsDebugLayer.js +4 -4
- package/dist/canvas/slopsDebugLayer.js.map +1 -1
- package/dist/canvas/useCanvasRenderer.js +23 -11
- package/dist/canvas/useCanvasRenderer.js.map +1 -1
- package/dist/canvas/useCanvasSurface.js +31 -0
- package/dist/canvas/useCanvasSurface.js.map +1 -0
- package/dist/canvas/useCanvasView.js +51 -44
- package/dist/canvas/useCanvasView.js.map +1 -1
- package/dist/canvas/useFrameLoop.js +11 -12
- package/dist/canvas/useFrameLoop.js.map +1 -1
- package/dist/canvas/useHostAnchor.js +35 -33
- package/dist/canvas/useHostAnchor.js.map +1 -1
- package/dist/canvas/useLateContentRedraw.js +8 -8
- package/dist/canvas/useLateContentRedraw.js.map +1 -1
- package/dist/canvas/useSceneAdapter.js +22 -0
- package/dist/canvas/useSceneAdapter.js.map +1 -0
- package/dist/canvas/useSceneLayerList.js +4 -14
- package/dist/canvas/useSceneLayerList.js.map +1 -1
- package/dist/canvas/useSurfaceInput.js +39 -0
- package/dist/canvas/useSurfaceInput.js.map +1 -0
- package/dist/canvas/useToolCursor.js +29 -0
- package/dist/canvas/useToolCursor.js.map +1 -0
- package/dist/canvas/useViewHelpers.js +46 -85
- package/dist/canvas/useViewHelpers.js.map +1 -1
- package/dist/canvas/viewInputs.js.map +1 -1
- package/dist/canvas/viewRegistry.js +40 -34
- package/dist/canvas/viewRegistry.js.map +1 -1
- package/dist/canvas/watchElementMove.js +43 -0
- package/dist/canvas/watchElementMove.js.map +1 -0
- package/dist/canvas/wrapNodeOutput.js +7 -2
- package/dist/canvas/wrapNodeOutput.js.map +1 -1
- package/dist/clipboard.d.ts +7 -14
- package/dist/{types-B4iJRHC3.d.ts → clone-C0eADtS0.d.ts} +129 -84
- package/dist/clone.d.ts +4 -8
- package/dist/clone.js +0 -2
- package/dist/core/device/targets.js.map +1 -1
- package/dist/core/device/useDeviceProfile.js +13 -13
- package/dist/core/device/useDeviceProfile.js.map +1 -1
- package/dist/{interactions/actions/resize → core/geometry}/autoPoseDescriptor.js +8 -7
- package/dist/core/geometry/autoPoseDescriptor.js.map +1 -0
- package/dist/core/geometry/pathPoseDescriptor.js +88 -0
- package/dist/core/geometry/pathPoseDescriptor.js.map +1 -0
- package/dist/core/geometry/poseDescriptor.js +102 -29
- package/dist/core/geometry/poseDescriptor.js.map +1 -1
- package/dist/core/geometry/regionHit.js +35 -37
- package/dist/core/geometry/regionHit.js.map +1 -1
- package/dist/core/geometry/targetFrame.js +94 -0
- package/dist/core/geometry/targetFrame.js.map +1 -0
- package/dist/core/geometry/unionBounds.js +4 -5
- package/dist/core/geometry/unionBounds.js.map +1 -1
- package/dist/core/layers/backgroundFill.js +31 -0
- package/dist/core/layers/backgroundFill.js.map +1 -0
- package/dist/{features/groups → core/layers}/children.js +2 -4
- package/dist/core/layers/children.js.map +1 -0
- package/dist/{features/focus → core/layers}/gateLayer.js +2 -2
- package/dist/core/layers/gateLayer.js.map +1 -0
- package/dist/core/layers/layerGroup.js +40 -0
- package/dist/core/layers/layerGroup.js.map +1 -0
- package/dist/core/layers/render.js +50 -76
- package/dist/core/layers/render.js.map +1 -1
- package/dist/core/ops/create.js +2 -2
- package/dist/core/ops/create.js.map +1 -1
- package/dist/core/ops/createHistory.js +9 -9
- package/dist/core/ops/createHistory.js.map +1 -1
- package/dist/core/ops/delete.js +19 -23
- package/dist/core/ops/delete.js.map +1 -1
- package/dist/core/ops/reorder/index.js +3 -7
- package/dist/core/ops/reorder/index.js.map +1 -1
- package/dist/core/ops/reorder/setChildOrder.js +2 -4
- package/dist/core/ops/reorder/setChildOrder.js.map +1 -1
- package/dist/core/ops/reparent.js +0 -1
- package/dist/core/ops/reparent.js.map +1 -1
- package/dist/core/ops/slot.js +3 -6
- package/dist/core/ops/slot.js.map +1 -1
- package/dist/core/pages/fitViewToPage.js +15 -0
- package/dist/core/pages/fitViewToPage.js.map +1 -0
- package/dist/core/pages/pages.js +65 -0
- package/dist/core/pages/pages.js.map +1 -0
- package/dist/core/pages/pagesLayer.js +27 -0
- package/dist/core/pages/pagesLayer.js.map +1 -0
- package/dist/core/paint/meshKind.js +16 -0
- package/dist/core/paint/meshKind.js.map +1 -0
- package/dist/{features/meshPaint/lazyKind.js → core/paint/meshKindLazy.js} +104 -93
- package/dist/core/paint/meshKindLazy.js.map +1 -0
- package/dist/core/paint/paintKindEntry.js +8 -0
- package/dist/core/paint/paintKindEntry.js.map +1 -0
- package/dist/core/paint/paintKinds.js +144 -0
- package/dist/core/paint/paintKinds.js.map +1 -0
- package/dist/core/paint/registerMesh.js +7 -0
- package/dist/core/paint/registerMesh.js.map +1 -0
- package/dist/core/scene/NodeProperties.js.map +1 -1
- package/dist/core/scene/NodeRouting.js.map +1 -1
- package/dist/core/scene/arrivalWindow.js +65 -64
- package/dist/core/scene/arrivalWindow.js.map +1 -1
- package/dist/core/scene/boundOps.js +40 -0
- package/dist/core/scene/boundOps.js.map +1 -0
- package/dist/core/scene/composeFrame.js +9 -6
- package/dist/core/scene/composeFrame.js.map +1 -1
- package/dist/core/scene/composePose.js +105 -0
- package/dist/core/scene/composePose.js.map +1 -0
- package/dist/core/scene/depMemo.js +31 -6
- package/dist/core/scene/depMemo.js.map +1 -1
- package/dist/core/scene/derivedPath.js +19 -20
- package/dist/core/scene/derivedPath.js.map +1 -1
- package/dist/core/scene/editMode.js +26 -0
- package/dist/core/scene/editMode.js.map +1 -0
- package/dist/core/scene/effectivePose.js +42 -39
- package/dist/core/scene/effectivePose.js.map +1 -1
- package/dist/core/scene/fieldEdits.js +98 -0
- package/dist/core/scene/fieldEdits.js.map +1 -0
- package/dist/core/scene/historyFacade.js +122 -70
- package/dist/core/scene/historyFacade.js.map +1 -1
- package/dist/core/scene/historyForm.js +6 -0
- package/dist/core/scene/historyForm.js.map +1 -0
- package/dist/core/scene/kitOps.js +83 -71
- package/dist/core/scene/kitOps.js.map +1 -1
- package/dist/core/scene/kitRegistry.js.map +1 -1
- package/dist/core/scene/layerStack.js +105 -12
- package/dist/core/scene/layerStack.js.map +1 -1
- package/dist/core/scene/layoutPass.js +58 -59
- package/dist/core/scene/layoutPass.js.map +1 -1
- package/dist/{features/groups → core/scene}/nestedHit.js +3 -3
- package/dist/core/scene/nestedHit.js.map +1 -0
- package/dist/core/scene/nodeFnFields.js +16 -9
- package/dist/core/scene/nodeFnFields.js.map +1 -1
- package/dist/core/scene/nodeMemo.js.map +1 -1
- package/dist/core/scene/nodeStore.js +72 -71
- package/dist/core/scene/nodeStore.js.map +1 -1
- package/dist/core/scene/notifier.js +37 -0
- package/dist/core/scene/notifier.js.map +1 -0
- package/dist/core/scene/opTable.js +50 -0
- package/dist/core/scene/opTable.js.map +1 -0
- package/dist/core/scene/outerOps.js +67 -0
- package/dist/core/scene/outerOps.js.map +1 -0
- package/dist/core/scene/poseHold.js +39 -0
- package/dist/core/scene/poseHold.js.map +1 -0
- package/dist/core/scene/poseOverrides.js +44 -36
- package/dist/core/scene/poseOverrides.js.map +1 -1
- package/dist/core/scene/poseSnapshot.js.map +1 -1
- package/dist/core/scene/reconcileSpecs.js +4 -3
- package/dist/core/scene/reconcileSpecs.js.map +1 -1
- package/dist/core/scene/recorder.js +86 -0
- package/dist/core/scene/recorder.js.map +1 -0
- package/dist/core/scene/renderOrder.js.map +1 -1
- package/dist/core/scene/scene.js +81 -690
- package/dist/core/scene/scene.js.map +1 -1
- package/dist/core/scene/sceneEdits.js +58 -0
- package/dist/core/scene/sceneEdits.js.map +1 -0
- package/dist/core/scene/sceneMutators.js +49 -0
- package/dist/core/scene/sceneMutators.js.map +1 -0
- package/dist/core/scene/scenePoseAdapter.js +16 -0
- package/dist/core/scene/scenePoseAdapter.js.map +1 -0
- package/dist/core/scene/sceneRecording.js +91 -0
- package/dist/core/scene/sceneRecording.js.map +1 -0
- package/dist/core/scene/sceneSelection.js +28 -0
- package/dist/core/scene/sceneSelection.js.map +1 -0
- package/dist/core/scene/sceneState.js +49 -0
- package/dist/core/scene/sceneState.js.map +1 -0
- package/dist/core/scene/serialization.js +8 -5
- package/dist/core/scene/serialization.js.map +1 -1
- package/dist/core/scene/staleReplay.js +51 -0
- package/dist/core/scene/staleReplay.js.map +1 -0
- package/dist/core/scene/statedFields.js +9 -0
- package/dist/core/scene/statedFields.js.map +1 -0
- package/dist/core/scene/treeEdits.js +127 -0
- package/dist/core/scene/treeEdits.js.map +1 -0
- package/dist/core/scene/treeReads.js +26 -0
- package/dist/core/scene/treeReads.js.map +1 -0
- package/dist/core/scene/types.js.map +1 -1
- package/dist/{features/groups → core/scene}/unionOfChildren.js +3 -3
- package/dist/core/scene/unionOfChildren.js.map +1 -0
- package/dist/core/scene/unitScopes.js +13 -0
- package/dist/core/scene/unitScopes.js.map +1 -0
- package/dist/core/scene/useScene.js.map +1 -1
- package/dist/core/selection/readOnlySelection.js +32 -0
- package/dist/core/selection/readOnlySelection.js.map +1 -0
- package/dist/core/selection/usePublishSceneSelection.js +26 -0
- package/dist/core/selection/usePublishSceneSelection.js.map +1 -0
- package/dist/core/selection/useSelection.js +34 -25
- package/dist/core/selection/useSelection.js.map +1 -1
- package/dist/core/shapeKinds.js.map +1 -1
- package/dist/core/stylus/stylus.js.map +1 -1
- package/dist/core/stylus/usePointerStylus.js.map +1 -1
- package/dist/core/usePaintKinds.js +1 -1
- package/dist/core/usePaintKinds.js.map +1 -1
- package/dist/core/viewport/clientToWorld.js.map +1 -1
- package/dist/core/viewport/fitViewToBounds.js.map +1 -1
- package/dist/core/viewport/parallax.js.map +1 -1
- package/dist/core/viewport/screenSlop.js +11 -11
- package/dist/core/viewport/screenSlop.js.map +1 -1
- package/dist/core/viewport/useCanvasSize.js.map +1 -1
- package/dist/core/viewport/useDecayLoop.js +31 -33
- package/dist/core/viewport/useDecayLoop.js.map +1 -1
- package/dist/core/viewport/useNodeOverlayFrame.js +84 -0
- package/dist/core/viewport/useNodeOverlayFrame.js.map +1 -0
- package/dist/core/viewport/useViewAnimation.js +113 -53
- package/dist/core/viewport/useViewAnimation.js.map +1 -1
- package/dist/core/viewport/view.js +14 -11
- package/dist/core/viewport/view.js.map +1 -1
- package/dist/core/viewport/wheelHandler.js.map +1 -1
- package/dist/core/viewport/zoomAt.js +11 -2
- package/dist/core/viewport/zoomAt.js.map +1 -1
- package/dist/{cornerHandles-CtCb8a3G.d.ts → cornerHandles-BSKbyuvQ.d.ts} +11 -24
- package/dist/debug/createDebugOverlayLayer.js +100 -100
- package/dist/debug/createDebugOverlayLayer.js.map +1 -1
- package/dist/debug/createDebugSink.js.map +1 -1
- package/dist/debug/frameStats.js.map +1 -1
- package/dist/debug/useDebugSink.js +52 -0
- package/dist/debug/useDebugSink.js.map +1 -0
- package/dist/features/chrome-caps/buildChromeCtx.js.map +1 -1
- package/dist/features/chrome-caps/conditions.js.map +1 -1
- package/dist/features/chrome-caps/defaults.js.map +1 -1
- package/dist/features/chrome-caps/resolve.js.map +1 -1
- package/dist/features/chrome-caps/useChromeCaps.js +54 -0
- package/dist/features/chrome-caps/useChromeCaps.js.map +1 -0
- package/dist/features/chrome-caps/useHoverTracking.js.map +1 -1
- package/dist/features/ingestion/contentHandlers.js +25 -19
- package/dist/features/ingestion/contentHandlers.js.map +1 -1
- package/dist/features/ingestion/imageHandler.js +21 -24
- package/dist/features/ingestion/imageHandler.js.map +1 -1
- package/dist/features/ingestion/openFilePicker.js.map +1 -1
- package/dist/features/ingestion/placement.js +16 -0
- package/dist/features/ingestion/placement.js.map +1 -0
- package/dist/features/ingestion/svgHandler.js +5 -0
- package/dist/features/ingestion/svgHandler.js.map +1 -1
- package/dist/features/ingestion/textHandler.js +28 -0
- package/dist/features/ingestion/textHandler.js.map +1 -0
- package/dist/features/ingestion/useCanvasIngestion.js +48 -0
- package/dist/features/ingestion/useCanvasIngestion.js.map +1 -0
- package/dist/features/ingestion/weaselJsonHandler.js +5 -0
- package/dist/features/ingestion/weaselJsonHandler.js.map +1 -1
- package/dist/features/longPress/longPressFeedback.js.map +1 -1
- package/dist/features/modes/modeLayers.js +7 -7
- package/dist/features/modes/modeLayers.js.map +1 -1
- package/dist/features/paths/editablePath.js +63 -0
- package/dist/features/paths/editablePath.js.map +1 -0
- package/dist/features/paths/index.js +9 -16
- package/dist/features/paths/pathEditState.js +41 -0
- package/dist/features/paths/pathEditState.js.map +1 -0
- package/dist/features/paths/pathEditingOverlayLayer.js +36 -38
- package/dist/features/paths/pathEditingOverlayLayer.js.map +1 -1
- package/dist/features/paths/pathLayer.js +3 -2
- package/dist/features/paths/pathLayer.js.map +1 -1
- package/dist/features/paths/penPreviewLayer.js +86 -88
- package/dist/features/paths/penPreviewLayer.js.map +1 -1
- package/dist/features/paths/shapeGenerator.js +89 -0
- package/dist/features/paths/shapeGenerator.js.map +1 -0
- package/dist/features/paths/usePathEdit.js +34 -0
- package/dist/features/paths/usePathEdit.js.map +1 -0
- package/dist/features/poseRun/usePoseRun.js +44 -57
- package/dist/features/poseRun/usePoseRun.js.map +1 -1
- package/dist/features/selection/overlay.js +170 -178
- package/dist/features/selection/overlay.js.map +1 -1
- package/dist/features/text/index.js +6 -0
- package/dist/features/text/textLayer.js +1 -1
- package/dist/features/text/textLayer.js.map +1 -1
- package/dist/features/text/useSceneTextEdit.js +119 -88
- package/dist/features/text/useSceneTextEdit.js.map +1 -1
- package/dist/features/viewports/viewResolver.js +28 -24
- package/dist/features/viewports/viewResolver.js.map +1 -1
- package/dist/features/viewports/viewportLayer.js +25 -36
- package/dist/features/viewports/viewportLayer.js.map +1 -1
- package/dist/icons/SliceIcon.js +24 -0
- package/dist/icons/SliceIcon.js.map +1 -0
- package/dist/index.d.ts +5200 -8777
- package/dist/index.js +284 -320
- package/dist/input/keyState.js +14 -14
- package/dist/interactions/actions/actionShortcuts.js.map +1 -1
- package/dist/interactions/actions/{defaults/align.js → align/action.js} +15 -16
- package/dist/interactions/actions/align/action.js.map +1 -0
- package/dist/interactions/actions/align/align.js +24 -24
- package/dist/interactions/actions/align/align.js.map +1 -1
- package/dist/interactions/actions/booleans/action.js +65 -0
- package/dist/interactions/actions/booleans/action.js.map +1 -0
- package/dist/interactions/actions/booleans/booleans.js +74 -83
- package/dist/interactions/actions/booleans/booleans.js.map +1 -1
- package/dist/interactions/actions/booleans/operands.js +40 -0
- package/dist/interactions/actions/booleans/operands.js.map +1 -0
- package/dist/interactions/actions/booleans/pieces.js +45 -0
- package/dist/interactions/actions/booleans/pieces.js.map +1 -0
- package/dist/interactions/actions/booleans/placement.js +24 -0
- package/dist/interactions/actions/booleans/placement.js.map +1 -0
- package/dist/interactions/actions/booleans/useBooleans.js +11 -9
- package/dist/interactions/actions/booleans/useBooleans.js.map +1 -1
- package/dist/interactions/actions/booleans/useBooleansAdapter.js.map +1 -1
- package/dist/interactions/actions/{defaults/clipboard.js → clipboard/action.js} +19 -19
- package/dist/interactions/actions/clipboard/action.js.map +1 -0
- package/dist/interactions/actions/clipboard/clipboardOps.js +15 -15
- package/dist/interactions/actions/clipboard/clipboardOps.js.map +1 -1
- package/dist/interactions/actions/clipboard/wireFormat.js.map +1 -1
- package/dist/interactions/actions/clone/action.js +103 -0
- package/dist/interactions/actions/clone/action.js.map +1 -0
- package/dist/interactions/actions/clone/behaviors.js +52 -0
- package/dist/interactions/actions/clone/behaviors.js.map +1 -0
- package/dist/interactions/actions/defaultCommitAdapter.js +10 -37
- package/dist/interactions/actions/defaultCommitAdapter.js.map +1 -1
- package/dist/interactions/actions/defaults/anchorEditing.js +69 -74
- package/dist/interactions/actions/defaults/anchorEditing.js.map +1 -1
- package/dist/interactions/actions/defaults/anchorHandles.js +42 -0
- package/dist/interactions/actions/defaults/anchorHandles.js.map +1 -0
- package/dist/interactions/actions/defaults/anchorJoin.js +92 -0
- package/dist/interactions/actions/defaults/anchorJoin.js.map +1 -0
- package/dist/interactions/actions/defaults/areaSelect.js.map +1 -1
- package/dist/interactions/actions/defaults/bendSegment.js +46 -0
- package/dist/interactions/actions/defaults/bendSegment.js.map +1 -0
- package/dist/interactions/actions/defaults/cancelGesture.js.map +1 -1
- package/dist/interactions/actions/defaults/clearSelection.js.map +1 -1
- package/dist/interactions/actions/defaults/copySubtree.js +1 -1
- package/dist/interactions/actions/defaults/copySubtree.js.map +1 -1
- package/dist/interactions/actions/defaults/createPaintAction.js.map +1 -1
- package/dist/interactions/actions/defaults/delete.js.map +1 -1
- package/dist/interactions/actions/defaults/duplicate.js +36 -21
- package/dist/interactions/actions/defaults/duplicate.js.map +1 -1
- package/dist/interactions/actions/defaults/enterPathEdit.js +19 -7
- package/dist/interactions/actions/defaults/enterPathEdit.js.map +1 -1
- package/dist/interactions/actions/defaults/enterTextEdit.js.map +1 -1
- package/dist/interactions/actions/defaults/group.js +35 -40
- package/dist/interactions/actions/defaults/group.js.map +1 -1
- package/dist/interactions/actions/defaults/icons/anchorIcons.js +75 -0
- package/dist/interactions/actions/defaults/icons/anchorIcons.js.map +1 -0
- package/dist/interactions/actions/defaults/icons/booleanIcons.js +24 -1
- package/dist/interactions/actions/defaults/icons/booleanIcons.js.map +1 -1
- package/dist/interactions/actions/defaults/icons/editIcons.js +35 -8
- package/dist/interactions/actions/defaults/icons/editIcons.js.map +1 -1
- package/dist/interactions/actions/defaults/icons/outlineIcons.js +39 -1
- package/dist/interactions/actions/defaults/icons/outlineIcons.js.map +1 -1
- package/dist/interactions/actions/defaults/ingest.js +19 -15
- package/dist/interactions/actions/defaults/ingest.js.map +1 -1
- package/dist/interactions/actions/defaults/insertPathAnchor.js +18 -34
- package/dist/interactions/actions/defaults/insertPathAnchor.js.map +1 -1
- package/dist/interactions/actions/defaults/nudge.js +43 -39
- package/dist/interactions/actions/defaults/nudge.js.map +1 -1
- package/dist/interactions/actions/defaults/pinchZoom.js +29 -29
- package/dist/interactions/actions/defaults/pinchZoom.js.map +1 -1
- package/dist/interactions/actions/defaults/requiresSelection.js.map +1 -1
- package/dist/interactions/actions/defaults/segmentUnder.js +22 -0
- package/dist/interactions/actions/defaults/segmentUnder.js.map +1 -0
- package/dist/interactions/actions/defaults/setFill.js +9 -3
- package/dist/interactions/actions/defaults/setFill.js.map +1 -1
- package/dist/interactions/actions/defaults/setFillOpacity.js +4 -1
- package/dist/interactions/actions/defaults/setFillOpacity.js.map +1 -1
- package/dist/interactions/actions/defaults/setStroke.js.map +1 -1
- package/dist/interactions/actions/defaults/sliceOps.js +20 -22
- package/dist/interactions/actions/defaults/sliceOps.js.map +1 -1
- package/dist/interactions/actions/defaults/toolActivate.js.map +1 -1
- package/dist/interactions/actions/defaults/toolResetToDefault.js.map +1 -1
- package/dist/interactions/actions/defaults/viewportDragPan.js +1 -1
- package/dist/interactions/actions/defaults/viewportDragPan.js.map +1 -1
- package/dist/interactions/actions/defaults/viewportWheelPan.js.map +1 -1
- package/dist/interactions/actions/defaults/viewportZoom.js +82 -79
- package/dist/interactions/actions/defaults/viewportZoom.js.map +1 -1
- package/dist/interactions/actions/{defaults/distribute.js → distribute/action.js} +18 -19
- package/dist/interactions/actions/distribute/action.js.map +1 -0
- package/dist/interactions/actions/distribute/distribute.js +15 -15
- package/dist/interactions/actions/distribute/distribute.js.map +1 -1
- package/dist/interactions/actions/edit-anchors/action.js +101 -0
- package/dist/interactions/actions/edit-anchors/action.js.map +1 -0
- package/dist/interactions/actions/edit-anchors/geometry.js +2 -4
- package/dist/interactions/actions/edit-anchors/geometry.js.map +1 -1
- package/dist/interactions/actions/edit-anchors/preview.js +26 -0
- package/dist/interactions/actions/edit-anchors/preview.js.map +1 -0
- package/dist/interactions/actions/edit-anchors/symmetry.js +11 -0
- package/dist/interactions/actions/edit-anchors/symmetry.js.map +1 -0
- package/dist/interactions/actions/flip/action.js +124 -0
- package/dist/interactions/actions/flip/action.js.map +1 -0
- package/dist/interactions/actions/flip/helpers.js +1 -1
- package/dist/interactions/actions/flip/helpers.js.map +1 -1
- package/dist/interactions/actions/geometryProjection.js.map +1 -1
- package/dist/interactions/actions/gestureFrames.js +18 -0
- package/dist/interactions/actions/gestureFrames.js.map +1 -0
- package/dist/interactions/actions/gestureLifecycle.js +47 -20
- package/dist/interactions/actions/gestureLifecycle.js.map +1 -1
- package/dist/interactions/actions/insert/action.js +79 -0
- package/dist/interactions/actions/insert/action.js.map +1 -0
- package/dist/interactions/actions/insert/commit.js +28 -0
- package/dist/interactions/actions/insert/commit.js.map +1 -0
- package/dist/interactions/actions/insert/extras.js +65 -0
- package/dist/interactions/actions/insert/extras.js.map +1 -0
- package/dist/interactions/actions/insert/frame.js +55 -0
- package/dist/interactions/actions/insert/frame.js.map +1 -0
- package/dist/interactions/actions/insert/geometry.js +35 -0
- package/dist/interactions/actions/insert/geometry.js.map +1 -0
- package/dist/interactions/actions/insert/repositionAction.js +31 -0
- package/dist/interactions/actions/insert/repositionAction.js.map +1 -0
- package/dist/interactions/actions/insert/rotateAction.js +21 -0
- package/dist/interactions/actions/insert/rotateAction.js.map +1 -0
- package/dist/interactions/actions/insert/session.js +59 -0
- package/dist/interactions/actions/insert/session.js.map +1 -0
- package/dist/interactions/actions/insert/shape.js +34 -0
- package/dist/interactions/actions/insert/shape.js.map +1 -0
- package/dist/interactions/actions/lasso-select/action.js +143 -0
- package/dist/interactions/actions/lasso-select/action.js.map +1 -0
- package/dist/interactions/actions/move/action.js +91 -0
- package/dist/interactions/actions/move/action.js.map +1 -0
- package/dist/interactions/actions/move/behaviors/layoutDrop.js +51 -0
- package/dist/interactions/actions/move/behaviors/layoutDrop.js.map +1 -0
- package/dist/interactions/actions/move/behaviors/reparentOnDrop.js +15 -0
- package/dist/interactions/actions/move/behaviors/reparentOnDrop.js.map +1 -0
- package/dist/interactions/actions/move/behaviors/snapToContainer.js +35 -28
- package/dist/interactions/actions/move/behaviors/snapToContainer.js.map +1 -1
- package/dist/interactions/actions/move/capture.js +108 -0
- package/dist/interactions/actions/move/capture.js.map +1 -0
- package/dist/interactions/actions/move/commit/index.js +41 -0
- package/dist/interactions/actions/move/commit/index.js.map +1 -0
- package/dist/interactions/actions/move/commit/layoutDrop.js +44 -0
- package/dist/interactions/actions/move/commit/layoutDrop.js.map +1 -0
- package/dist/interactions/actions/move/commit/layoutRelease.js +100 -0
- package/dist/interactions/actions/move/commit/layoutRelease.js.map +1 -0
- package/dist/interactions/actions/move/commit/rebase.js +18 -0
- package/dist/interactions/actions/move/commit/rebase.js.map +1 -0
- package/dist/interactions/actions/move/commit/reparent.js +65 -0
- package/dist/interactions/actions/move/commit/reparent.js.map +1 -0
- package/dist/interactions/actions/move/delta.js +51 -0
- package/dist/interactions/actions/move/delta.js.map +1 -0
- package/dist/interactions/actions/move/frame.js +47 -0
- package/dist/interactions/actions/move/frame.js.map +1 -0
- package/dist/interactions/actions/move/gestureAdapter.js +15 -40
- package/dist/interactions/actions/move/gestureAdapter.js.map +1 -1
- package/dist/interactions/actions/move/landedDescendants.js +8 -8
- package/dist/interactions/actions/move/layout/container.js +94 -0
- package/dist/interactions/actions/move/layout/container.js.map +1 -0
- package/dist/interactions/actions/move/layout/dragged.js +58 -0
- package/dist/interactions/actions/move/layout/dragged.js.map +1 -0
- package/dist/interactions/actions/move/layout/dropPass.js +122 -0
- package/dist/interactions/actions/move/layout/dropPass.js.map +1 -0
- package/dist/interactions/actions/move/layout/exits.js +38 -0
- package/dist/interactions/actions/move/layout/exits.js.map +1 -0
- package/dist/interactions/actions/move/layout/glide.js +48 -0
- package/dist/interactions/actions/move/layout/glide.js.map +1 -0
- package/dist/interactions/actions/move/session.js +63 -0
- package/dist/interactions/actions/move/session.js.map +1 -0
- package/dist/interactions/actions/move/translate.js +61 -0
- package/dist/interactions/actions/move/translate.js.map +1 -0
- package/dist/interactions/actions/outlines/createOutlines.js +17 -64
- package/dist/interactions/actions/outlines/createOutlines.js.map +1 -1
- package/dist/interactions/actions/outlines/createOutlinesAction.js +51 -0
- package/dist/interactions/actions/outlines/createOutlinesAction.js.map +1 -0
- package/dist/interactions/actions/outlines/outlineStroke.js +72 -0
- package/dist/interactions/actions/outlines/outlineStroke.js.map +1 -0
- package/dist/interactions/actions/outlines/outlineStrokeAction.js +37 -0
- package/dist/interactions/actions/outlines/outlineStrokeAction.js.map +1 -0
- package/dist/interactions/actions/outlines/replaceWithPaths.js +54 -0
- package/dist/interactions/actions/outlines/replaceWithPaths.js.map +1 -0
- package/dist/interactions/actions/outlines/strokeRegion.js +27 -0
- package/dist/interactions/actions/outlines/strokeRegion.js.map +1 -0
- package/dist/interactions/actions/pathCommands/cutJoin.js +102 -0
- package/dist/interactions/actions/pathCommands/cutJoin.js.map +1 -0
- package/dist/interactions/actions/pathCommands/livePathEdit.js +64 -0
- package/dist/interactions/actions/pathCommands/livePathEdit.js.map +1 -0
- package/dist/interactions/actions/pathCommands/pathNodes.js +99 -0
- package/dist/interactions/actions/pathCommands/pathNodes.js.map +1 -0
- package/dist/interactions/actions/pathCommands/simplifyOffset.js +42 -0
- package/dist/interactions/actions/pathCommands/simplifyOffset.js.map +1 -0
- package/dist/interactions/actions/planeInput.js.map +1 -1
- package/dist/interactions/actions/pointerState.js +12 -0
- package/dist/interactions/actions/pointerState.js.map +1 -0
- package/dist/interactions/actions/poseDescriptorDep.js +1 -1
- package/dist/interactions/actions/poseDescriptorDep.js.map +1 -1
- package/dist/interactions/actions/poseFrame.js +26 -26
- package/dist/interactions/actions/poseFrame.js.map +1 -1
- package/dist/interactions/actions/resize/action.js +66 -0
- package/dist/interactions/actions/resize/action.js.map +1 -0
- package/dist/interactions/actions/resize/behaviors/lockAspect.js.map +1 -1
- package/dist/interactions/actions/resize/boxFrame.js +16 -0
- package/dist/interactions/actions/resize/boxFrame.js.map +1 -0
- package/dist/interactions/actions/resize/capture.js +85 -0
- package/dist/interactions/actions/resize/capture.js.map +1 -0
- package/dist/interactions/actions/resize/commit.js +69 -0
- package/dist/interactions/actions/resize/commit.js.map +1 -0
- package/dist/interactions/actions/resize/frame.js +88 -0
- package/dist/interactions/actions/resize/frame.js.map +1 -0
- package/dist/interactions/actions/resize/pointSnap.js +111 -0
- package/dist/interactions/actions/resize/pointSnap.js.map +1 -0
- package/dist/interactions/actions/resize/replay.js +47 -0
- package/dist/interactions/actions/resize/replay.js.map +1 -0
- package/dist/interactions/actions/resize/ruleBounds.js +9 -0
- package/dist/interactions/actions/resize/ruleBounds.js.map +1 -0
- package/dist/interactions/actions/resize/session.js +63 -0
- package/dist/interactions/actions/resize/session.js.map +1 -0
- package/dist/interactions/actions/resolveOverlays.js +2 -1
- package/dist/interactions/actions/resolveOverlays.js.map +1 -1
- package/dist/interactions/actions/resolvePreviews.js.map +1 -1
- package/dist/interactions/actions/rotate/action.js +71 -0
- package/dist/interactions/actions/rotate/action.js.map +1 -0
- package/dist/interactions/actions/rotate/behaviors/index.js +7 -0
- package/dist/interactions/actions/rotate/behaviors/index.js.map +1 -0
- package/dist/interactions/actions/rotate/behaviors/snapRotation.js +12 -0
- package/dist/interactions/actions/rotate/behaviors/snapRotation.js.map +1 -0
- package/dist/interactions/actions/rotate/commit.js +40 -0
- package/dist/interactions/actions/rotate/commit.js.map +1 -0
- package/dist/interactions/actions/rotate/frame.js +65 -0
- package/dist/interactions/actions/rotate/frame.js.map +1 -0
- package/dist/interactions/actions/rotate/handle.js +12 -12
- package/dist/interactions/actions/rotate/handle.js.map +1 -1
- package/dist/interactions/actions/rotate/replay.js +22 -0
- package/dist/interactions/actions/rotate/replay.js.map +1 -0
- package/dist/interactions/actions/rotate/session.js +102 -0
- package/dist/interactions/actions/rotate/session.js.map +1 -0
- package/dist/interactions/actions/spatialReference.js.map +1 -1
- package/dist/interactions/actions/transform-again/action.js +63 -0
- package/dist/interactions/actions/transform-again/action.js.map +1 -0
- package/dist/interactions/actions/transform-again/memory.js +35 -0
- package/dist/interactions/actions/transform-again/memory.js.map +1 -0
- package/dist/interactions/actions/useStandardActions.js +84 -61
- package/dist/interactions/actions/useStandardActions.js.map +1 -1
- package/dist/interactions/gestures/pointerDrag/pointerDrag.js +61 -42
- package/dist/interactions/gestures/pointerDrag/pointerDrag.js.map +1 -1
- package/dist/interactions/gestures/shared/originProjection.js +1 -1
- package/dist/interactions/gestures/shared/originProjection.js.map +1 -1
- package/dist/interactions/gestures/shared/screenTolerance.js +8 -2
- package/dist/interactions/gestures/shared/screenTolerance.js.map +1 -1
- package/dist/interactions/gestures/shared/snap.js.map +1 -1
- package/dist/math-CYUjoyyU.d.ts +33 -0
- package/dist/math.d.ts +5 -2
- package/dist/math.js +6 -6
- package/dist/mesh.d.ts +4 -268
- package/dist/mesh.js +3 -7
- package/dist/move.d.ts +6 -4
- package/dist/{originProjection-gHnOup4e.d.ts → originProjection-CoNVpITV.d.ts} +1 -1
- package/dist/patterns-builtin.d.ts +1 -118
- package/dist/patterns-builtin.js +2 -3
- package/dist/poseDescriptor-Bqk-11Rl.d.ts +73 -0
- package/dist/renderer.d.ts +1 -92
- package/dist/renderer.js +2 -19
- package/dist/resize.d.ts +11 -22
- package/dist/resize.js +1 -1
- package/dist/style.css +1 -1
- package/dist/test-hook/install.js.map +1 -1
- package/dist/test-hook/useTestHook.js +22 -0
- package/dist/test-hook/useTestHook.js.map +1 -0
- package/dist/test-seams-D0pyV3pR.d.ts +149 -0
- package/dist/test-seams.d.ts +4 -4
- package/dist/test-seams.js +2 -2
- package/dist/tools/builtin/bone/boneActions.js +130 -0
- package/dist/tools/builtin/bone/boneActions.js.map +1 -0
- package/dist/tools/builtin/bone/boneOverlay.js +58 -0
- package/dist/tools/builtin/bone/boneOverlay.js.map +1 -0
- package/dist/tools/builtin/bone/placedRig.js +24 -0
- package/dist/tools/builtin/bone/placedRig.js.map +1 -0
- package/dist/tools/builtin/bone/rigEditState.js +21 -0
- package/dist/tools/builtin/bone/rigEditState.js.map +1 -0
- package/dist/tools/builtin/bone/useBoneTool.js +98 -0
- package/dist/tools/builtin/bone/useBoneTool.js.map +1 -0
- package/dist/tools/builtin/ellipse/useEllipseTool.js +16 -15
- package/dist/tools/builtin/ellipse/useEllipseTool.js.map +1 -1
- package/dist/tools/builtin/eyedropper/useEyedropperTool.js.map +1 -1
- package/dist/tools/builtin/hand/useHandTool.js.map +1 -1
- package/dist/tools/builtin/image/useImageTool.js.map +1 -1
- package/dist/tools/builtin/lasso/useLassoTool.js.map +1 -1
- package/dist/tools/builtin/line/useLineTool.js +16 -15
- package/dist/tools/builtin/line/useLineTool.js.map +1 -1
- package/dist/tools/builtin/pen/usePenTool.js +162 -164
- package/dist/tools/builtin/pen/usePenTool.js.map +1 -1
- package/dist/tools/builtin/pencil/usePencilTool.js.map +1 -1
- package/dist/tools/builtin/pickTopMostHit.js +11 -14
- package/dist/tools/builtin/pickTopMostHit.js.map +1 -1
- package/dist/tools/builtin/polygon/usePolygonTool.js +17 -15
- package/dist/tools/builtin/polygon/usePolygonTool.js.map +1 -1
- package/dist/tools/builtin/rect/useRectTool.js +15 -14
- package/dist/tools/builtin/rect/useRectTool.js.map +1 -1
- package/dist/tools/builtin/select/adapterPointQuery.js +40 -0
- package/dist/tools/builtin/select/adapterPointQuery.js.map +1 -0
- package/dist/tools/builtin/select/selectionContributions.js +5 -5
- package/dist/tools/builtin/select/selectionContributions.js.map +1 -1
- package/dist/tools/builtin/select/useSelectTool.js +44 -71
- package/dist/tools/builtin/select/useSelectTool.js.map +1 -1
- package/dist/tools/builtin/shared/pointerFollower.js.map +1 -1
- package/dist/tools/builtin/slice/useSliceTool.js +69 -72
- package/dist/tools/builtin/slice/useSliceTool.js.map +1 -1
- package/dist/tools/builtin/star/useStarTool.js +18 -16
- package/dist/tools/builtin/star/useStarTool.js.map +1 -1
- package/dist/tools/builtin/text/useTextTool.js +10 -2
- package/dist/tools/builtin/text/useTextTool.js.map +1 -1
- package/dist/tools/builtin/weight/useWeightTool.js +77 -0
- package/dist/tools/builtin/weight/useWeightTool.js.map +1 -0
- package/dist/tools/builtin/weight/weightActions.js +112 -0
- package/dist/tools/builtin/weight/weightActions.js.map +1 -0
- package/dist/tools/builtin/weight/weightOverlay.js +61 -0
- package/dist/tools/builtin/weight/weightOverlay.js.map +1 -0
- package/dist/tools/overlayBinding.js.map +1 -1
- package/dist/tools/useKeybindings.js +20 -14
- package/dist/tools/useKeybindings.js.map +1 -1
- package/dist/{types-k-5Oqh-U.d.ts → types-DBbbCy0i.d.ts} +103 -176
- package/dist/util/paint.js +1 -1
- package/dist/util/paint.js.map +1 -1
- package/dist/version.js +1 -1
- package/package.json +26 -21
- package/dist/animation/colorHelpers.js +0 -135
- package/dist/animation/colorHelpers.js.map +0 -1
- package/dist/animation/colorRegistry.js +0 -37
- package/dist/animation/colorRegistry.js.map +0 -1
- package/dist/animation/engine/axes.js +0 -36
- package/dist/animation/engine/axes.js.map +0 -1
- package/dist/animation/engine/codec.js +0 -170
- package/dist/animation/engine/codec.js.map +0 -1
- package/dist/animation/engine/integrator.js +0 -12
- package/dist/animation/engine/integrator.js.map +0 -1
- package/dist/animation/loop.js +0 -60
- package/dist/animation/loop.js.map +0 -1
- package/dist/animation/observe.js +0 -23
- package/dist/animation/observe.js.map +0 -1
- package/dist/animation/rig/blendPoses.js +0 -43
- package/dist/animation/rig/blendPoses.js.map +0 -1
- package/dist/animation/rig/mirrorPose.js +0 -19
- package/dist/animation/rig/mirrorPose.js.map +0 -1
- package/dist/animation/rig/resolveSkeleton.js +0 -33
- package/dist/animation/rig/resolveSkeleton.js.map +0 -1
- package/dist/animation/rig/solveIk.js +0 -103
- package/dist/animation/rig/solveIk.js.map +0 -1
- package/dist/animation/rig/types.js +0 -12
- package/dist/animation/rig/types.js.map +0 -1
- package/dist/animation/slew.js +0 -27
- package/dist/animation/slew.js.map +0 -1
- package/dist/animation/stagger.js +0 -146
- package/dist/animation/stagger.js.map +0 -1
- package/dist/animation/timeline/booking.js +0 -114
- package/dist/animation/timeline/booking.js.map +0 -1
- package/dist/animation/timeline/createTimeline.js +0 -125
- package/dist/animation/timeline/createTimeline.js.map +0 -1
- package/dist/animation/timeline/sampleTrack.js +0 -79
- package/dist/animation/timeline/sampleTrack.js.map +0 -1
- package/dist/animation/useAnimator.js +0 -388
- package/dist/animation/useAnimator.js.map +0 -1
- package/dist/autoPoseDescriptor-Ct7yqivU.d.ts +0 -108
- package/dist/builtins-DPcdghtB.d.ts +0 -1223
- package/dist/canvas/MinimapCanvas.js +0 -140
- package/dist/canvas/MinimapCanvas.js.map +0 -1
- package/dist/canvas/deps/poseComposition.js +0 -11
- package/dist/canvas/deps/poseComposition.js.map +0 -1
- package/dist/canvas/minimapMath.js +0 -82
- package/dist/canvas/minimapMath.js.map +0 -1
- package/dist/canvas/toolPreview.js +0 -39
- package/dist/canvas/toolPreview.js.map +0 -1
- package/dist/core/adapters/arrayAdapter.js +0 -94
- package/dist/core/adapters/arrayAdapter.js.map +0 -1
- package/dist/core/adapters/useArrayAdapter.js +0 -13
- package/dist/core/adapters/useArrayAdapter.js.map +0 -1
- package/dist/core/fillInPoseFrame.js +0 -102
- package/dist/core/fillInPoseFrame.js.map +0 -1
- package/dist/core/geometry/poseFrame.js +0 -44
- package/dist/core/geometry/poseFrame.js.map +0 -1
- package/dist/core/geometry/poseRotation.js +0 -58
- package/dist/core/geometry/poseRotation.js.map +0 -1
- package/dist/core/gradient.js +0 -136
- package/dist/core/gradient.js.map +0 -1
- package/dist/core/markerInset.js +0 -24
- package/dist/core/markerInset.js.map +0 -1
- package/dist/core/mixed.js +0 -6
- package/dist/core/mixed.js.map +0 -1
- package/dist/core/paintKinds.js +0 -156
- package/dist/core/paintKinds.js.map +0 -1
- package/dist/core/scene/pickability.js +0 -6
- package/dist/core/scene/pickability.js.map +0 -1
- package/dist/core/strokeMarkerShapes.js +0 -139
- package/dist/core/strokeMarkerShapes.js.map +0 -1
- package/dist/core/strokeMarkers.js +0 -28
- package/dist/core/strokeMarkers.js.map +0 -1
- package/dist/core/viewport/meanScale.js +0 -8
- package/dist/core/viewport/meanScale.js.map +0 -1
- package/dist/core/viewport/pxExtent.js +0 -42
- package/dist/core/viewport/pxExtent.js.map +0 -1
- package/dist/features/cursor/paintedCursorLayer.js.map +0 -1
- package/dist/features/focus/gateLayer.js.map +0 -1
- package/dist/features/focus/useCanvasFocus.js +0 -29
- package/dist/features/focus/useCanvasFocus.js.map +0 -1
- package/dist/features/groups/children.js.map +0 -1
- package/dist/features/groups/composePose.js +0 -67
- package/dist/features/groups/composePose.js.map +0 -1
- package/dist/features/groups/nestedHit.js.map +0 -1
- package/dist/features/groups/unionOfChildren.js.map +0 -1
- package/dist/features/images/imageCache.js +0 -104
- package/dist/features/images/imageCache.js.map +0 -1
- package/dist/features/ingestion/index.js +0 -8
- package/dist/features/meshPaint/bake.js +0 -79
- package/dist/features/meshPaint/bake.js.map +0 -1
- package/dist/features/meshPaint/bakeCache.js +0 -59
- package/dist/features/meshPaint/bakeCache.js.map +0 -1
- package/dist/features/meshPaint/handles.js +0 -86
- package/dist/features/meshPaint/handles.js.map +0 -1
- package/dist/features/meshPaint/lazyKind.js.map +0 -1
- package/dist/features/meshPaint/meshPaint.js +0 -239
- package/dist/features/meshPaint/meshPaint.js.map +0 -1
- package/dist/features/meshPaint/meshShader.js +0 -6
- package/dist/features/meshPaint/meshShader.js.map +0 -1
- package/dist/features/meshPaint/register.js +0 -7
- package/dist/features/meshPaint/register.js.map +0 -1
- package/dist/features/meshPaint/surface.js +0 -110
- package/dist/features/meshPaint/surface.js.map +0 -1
- package/dist/features/minimap/actions.js +0 -53
- package/dist/features/minimap/actions.js.map +0 -1
- package/dist/features/minimap/createMinimapContribution.js +0 -96
- package/dist/features/minimap/createMinimapContribution.js.map +0 -1
- package/dist/features/minimap/layers.js +0 -85
- package/dist/features/minimap/layers.js.map +0 -1
- package/dist/features/overlays/useNodeOverlayFrame.js +0 -103
- package/dist/features/overlays/useNodeOverlayFrame.js.map +0 -1
- package/dist/features/parallax/createParallaxLayer.js +0 -26
- package/dist/features/parallax/createParallaxLayer.js.map +0 -1
- package/dist/features/parallax/createParallaxPlane.js +0 -22
- package/dist/features/parallax/createParallaxPlane.js.map +0 -1
- package/dist/features/paths/anchorEdits.js +0 -167
- package/dist/features/paths/anchorEdits.js.map +0 -1
- package/dist/features/paths/anchors.js +0 -159
- package/dist/features/paths/anchors.js.map +0 -1
- package/dist/features/paths/booleans.js +0 -2
- package/dist/features/paths/markerCommands.js +0 -149
- package/dist/features/paths/markerCommands.js.map +0 -1
- package/dist/features/paths/markerSites.js +0 -59
- package/dist/features/paths/markerSites.js.map +0 -1
- package/dist/features/paths/markers.js +0 -95
- package/dist/features/paths/markers.js.map +0 -1
- package/dist/features/paths/nearestAnchor.js +0 -36
- package/dist/features/paths/nearestAnchor.js.map +0 -1
- package/dist/features/paths/pathInWorld.js +0 -41
- package/dist/features/paths/pathInWorld.js.map +0 -1
- package/dist/features/paths/poseDescriptor.js +0 -39
- package/dist/features/paths/poseDescriptor.js.map +0 -1
- package/dist/features/paths/strokeToPath.js +0 -40
- package/dist/features/paths/strokeToPath.js.map +0 -1
- package/dist/features/paths/tessellate/dash.js +0 -52
- package/dist/features/paths/tessellate/dash.js.map +0 -1
- package/dist/features/paths/tessellate/insets.js +0 -32
- package/dist/features/paths/tessellate/insets.js.map +0 -1
- package/dist/features/paths/tessellate/metric.js +0 -72
- package/dist/features/paths/tessellate/metric.js.map +0 -1
- package/dist/features/paths/tessellate/stroke.js +0 -170
- package/dist/features/paths/tessellate/stroke.js.map +0 -1
- package/dist/features/paths/tessellate/vertexWidths.js +0 -32
- package/dist/features/paths/tessellate/vertexWidths.js.map +0 -1
- package/dist/features/patterns/commandPaint.js +0 -18
- package/dist/features/patterns/commandPaint.js.map +0 -1
- package/dist/features/patterns/index.js +0 -11
- package/dist/features/patterns/index.js.map +0 -1
- package/dist/features/patterns/patterns-builtin.js +0 -38
- package/dist/features/patterns/patterns-builtin.js.map +0 -1
- package/dist/features/patterns/rasterizeTile.js +0 -17
- package/dist/features/patterns/rasterizeTile.js.map +0 -1
- package/dist/features/patterns/resolveSpec.js +0 -65
- package/dist/features/patterns/resolveSpec.js.map +0 -1
- package/dist/features/patterns/tileGeometry.js +0 -158
- package/dist/features/patterns/tileGeometry.js.map +0 -1
- package/dist/features/pointer/PointerContext.js +0 -45
- package/dist/features/pointer/PointerContext.js.map +0 -1
- package/dist/features/selection/SelectionContext.js +0 -51
- package/dist/features/selection/SelectionContext.js.map +0 -1
- package/dist/features/simulation/createSimulation.js +0 -61
- package/dist/features/simulation/createSimulation.js.map +0 -1
- package/dist/features/simulation/types.js +0 -6
- package/dist/features/simulation/types.js.map +0 -1
- package/dist/features/simulation/useSimulation.js +0 -74
- package/dist/features/simulation/useSimulation.js.map +0 -1
- package/dist/features/text/domOffsets.js +0 -82
- package/dist/features/text/domOffsets.js.map +0 -1
- package/dist/features/text/domRuns.js +0 -230
- package/dist/features/text/domRuns.js.map +0 -1
- package/dist/features/text/fitTextPose.js +0 -38
- package/dist/features/text/fitTextPose.js.map +0 -1
- package/dist/features/text/hitTest.js +0 -48
- package/dist/features/text/hitTest.js.map +0 -1
- package/dist/features/text/isTextData.js +0 -8
- package/dist/features/text/isTextData.js.map +0 -1
- package/dist/features/text/overlayDirection.js +0 -15
- package/dist/features/text/overlayDirection.js.map +0 -1
- package/dist/features/text/renderLabel.js +0 -14
- package/dist/features/text/renderLabel.js.map +0 -1
- package/dist/features/text/runs/effectiveRangeStyle.js +0 -66
- package/dist/features/text/runs/effectiveRangeStyle.js.map +0 -1
- package/dist/features/text/runs/flagRange.js +0 -53
- package/dist/features/text/runs/flagRange.js.map +0 -1
- package/dist/features/text/runs/rangeStyle.js +0 -133
- package/dist/features/text/runs/rangeStyle.js.map +0 -1
- package/dist/features/text/textCommand.js +0 -60
- package/dist/features/text/textCommand.js.map +0 -1
- package/dist/features/text/textToPath.js +0 -181
- package/dist/features/text/textToPath.js.map +0 -1
- package/dist/features/text/useTextEdit.js +0 -491
- package/dist/features/text/useTextEdit.js.map +0 -1
- package/dist/features/tiling/createTiledLayer.js +0 -65
- package/dist/features/tiling/createTiledLayer.js.map +0 -1
- package/dist/features/tiling/tiledProject.js +0 -14
- package/dist/features/tiling/tiledProject.js.map +0 -1
- package/dist/interactions/actions/clone/behaviors/cloneByAltDrag.js +0 -26
- package/dist/interactions/actions/clone/behaviors/cloneByAltDrag.js.map +0 -1
- package/dist/interactions/actions/defaults/align.js.map +0 -1
- package/dist/interactions/actions/defaults/booleans.js +0 -52
- package/dist/interactions/actions/defaults/booleans.js.map +0 -1
- package/dist/interactions/actions/defaults/clipboard.js.map +0 -1
- package/dist/interactions/actions/defaults/clone.js +0 -91
- package/dist/interactions/actions/defaults/clone.js.map +0 -1
- package/dist/interactions/actions/defaults/createOutlines.js +0 -47
- package/dist/interactions/actions/defaults/createOutlines.js.map +0 -1
- package/dist/interactions/actions/defaults/distribute.js.map +0 -1
- package/dist/interactions/actions/defaults/editAnchors.js +0 -100
- package/dist/interactions/actions/defaults/editAnchors.js.map +0 -1
- package/dist/interactions/actions/defaults/flip.js +0 -125
- package/dist/interactions/actions/defaults/flip.js.map +0 -1
- package/dist/interactions/actions/defaults/insert.js +0 -287
- package/dist/interactions/actions/defaults/insert.js.map +0 -1
- package/dist/interactions/actions/defaults/lassoSelect.js +0 -153
- package/dist/interactions/actions/defaults/lassoSelect.js.map +0 -1
- package/dist/interactions/actions/defaults/move.js +0 -778
- package/dist/interactions/actions/defaults/move.js.map +0 -1
- package/dist/interactions/actions/defaults/resize.js +0 -341
- package/dist/interactions/actions/defaults/resize.js.map +0 -1
- package/dist/interactions/actions/defaults/rotate.js +0 -185
- package/dist/interactions/actions/defaults/rotate.js.map +0 -1
- package/dist/interactions/actions/previewOverrides.js +0 -25
- package/dist/interactions/actions/previewOverrides.js.map +0 -1
- package/dist/interactions/actions/resize/autoPoseDescriptor.js.map +0 -1
- package/dist/layout/arrivals.js +0 -36
- package/dist/layout/arrivals.js.map +0 -1
- package/dist/math-J-ACHyEg.d.ts +0 -159
- package/dist/registerProgram-T9S_PfAX.d.ts +0 -208
- package/dist/renderer/DrawCommand.js +0 -6
- package/dist/renderer/DrawCommand.js.map +0 -1
- package/dist/renderer/WeaselRenderer.js +0 -333
- package/dist/renderer/WeaselRenderer.js.map +0 -1
- package/dist/renderer/batchClip.js +0 -46
- package/dist/renderer/batchClip.js.map +0 -1
- package/dist/renderer/cache/GLImageCache.js +0 -74
- package/dist/renderer/cache/GLImageCache.js.map +0 -1
- package/dist/renderer/cache/GLMeshCache.js +0 -102
- package/dist/renderer/cache/GLMeshCache.js.map +0 -1
- package/dist/renderer/cache/GLTextureCache.js +0 -68
- package/dist/renderer/cache/GLTextureCache.js.map +0 -1
- package/dist/renderer/cache/GradientRampAtlas.js +0 -82
- package/dist/renderer/cache/GradientRampAtlas.js.map +0 -1
- package/dist/renderer/cache/cache.js +0 -13
- package/dist/renderer/cache/cache.js.map +0 -1
- package/dist/renderer/cache/markerCommandCache.js +0 -63
- package/dist/renderer/cache/markerCommandCache.js.map +0 -1
- package/dist/renderer/cache/outlineMeshCache.js +0 -15
- package/dist/renderer/cache/outlineMeshCache.js.map +0 -1
- package/dist/renderer/cache/outlineStrokeMeshCache.js +0 -36
- package/dist/renderer/cache/outlineStrokeMeshCache.js.map +0 -1
- package/dist/renderer/cache/strokeMeshCache.js +0 -55
- package/dist/renderer/cache/strokeMeshCache.js.map +0 -1
- package/dist/renderer/cullDrawCommands.js +0 -90
- package/dist/renderer/cullDrawCommands.js.map +0 -1
- package/dist/renderer/draw/batch.js +0 -133
- package/dist/renderer/draw/batch.js.map +0 -1
- package/dist/renderer/draw/clip.js +0 -89
- package/dist/renderer/draw/clip.js.map +0 -1
- package/dist/renderer/draw/customShader.js +0 -230
- package/dist/renderer/draw/customShader.js.map +0 -1
- package/dist/renderer/draw/drawTriangles.js +0 -8
- package/dist/renderer/draw/drawTriangles.js.map +0 -1
- package/dist/renderer/draw/effects.js +0 -28
- package/dist/renderer/draw/effects.js.map +0 -1
- package/dist/renderer/draw/flushBatch.js +0 -35
- package/dist/renderer/draw/flushBatch.js.map +0 -1
- package/dist/renderer/draw/gradient.js +0 -90
- package/dist/renderer/draw/gradient.js.map +0 -1
- package/dist/renderer/draw/image.js +0 -38
- package/dist/renderer/draw/image.js.map +0 -1
- package/dist/renderer/draw/mesh.js +0 -16
- package/dist/renderer/draw/mesh.js.map +0 -1
- package/dist/renderer/draw/paintBind.js +0 -70
- package/dist/renderer/draw/paintBind.js.map +0 -1
- package/dist/renderer/draw/pathPaint.js +0 -142
- package/dist/renderer/draw/pathPaint.js.map +0 -1
- package/dist/renderer/draw/scratchPass.js +0 -83
- package/dist/renderer/draw/scratchPass.js.map +0 -1
- package/dist/renderer/draw/stencil.js +0 -28
- package/dist/renderer/draw/stencil.js.map +0 -1
- package/dist/renderer/draw/text.js +0 -167
- package/dist/renderer/draw/text.js.map +0 -1
- package/dist/renderer/draw/uniforms.js +0 -77
- package/dist/renderer/draw/uniforms.js.map +0 -1
- package/dist/renderer/draw.js +0 -79
- package/dist/renderer/draw.js.map +0 -1
- package/dist/renderer/drawBatch.js +0 -198
- package/dist/renderer/drawBatch.js.map +0 -1
- package/dist/renderer/effects/EffectTargets.js +0 -48
- package/dist/renderer/effects/EffectTargets.js.map +0 -1
- package/dist/renderer/effects/builtins.js +0 -31
- package/dist/renderer/effects/builtins.js.map +0 -1
- package/dist/renderer/effects/composite.js +0 -11
- package/dist/renderer/effects/composite.js.map +0 -1
- package/dist/renderer/effects/effectPrelude.js +0 -10
- package/dist/renderer/effects/effectPrelude.js.map +0 -1
- package/dist/renderer/effects/types.js +0 -10
- package/dist/renderer/effects/types.js.map +0 -1
- package/dist/renderer/glyphOutlineMesh.js +0 -67
- package/dist/renderer/glyphOutlineMesh.js.map +0 -1
- package/dist/renderer/index.js +0 -20
- package/dist/renderer/math/color.js +0 -321
- package/dist/renderer/math/color.js.map +0 -1
- package/dist/renderer/math/mat3.js +0 -80
- package/dist/renderer/math/mat3.js.map +0 -1
- package/dist/renderer/math/patternSpace.js +0 -22
- package/dist/renderer/math/patternSpace.js.map +0 -1
- package/dist/renderer/math/viewToMat3.js +0 -19
- package/dist/renderer/math/viewToMat3.js.map +0 -1
- package/dist/renderer/paintResources.js +0 -18
- package/dist/renderer/paintResources.js.map +0 -1
- package/dist/renderer/paintScratch.js +0 -37
- package/dist/renderer/paintScratch.js.map +0 -1
- package/dist/renderer/shaders/ShaderProgram.js +0 -74
- package/dist/renderer/shaders/ShaderProgram.js.map +0 -1
- package/dist/renderer/shaders/batchFill.js +0 -119
- package/dist/renderer/shaders/batchFill.js.map +0 -1
- package/dist/renderer/shaders/customPrelude.js +0 -34
- package/dist/renderer/shaders/customPrelude.js.map +0 -1
- package/dist/renderer/shaders/extractUniformNames.js +0 -184
- package/dist/renderer/shaders/extractUniformNames.js.map +0 -1
- package/dist/renderer/shaders/glyphPaint.js +0 -61
- package/dist/renderer/shaders/glyphPaint.js.map +0 -1
- package/dist/renderer/shaders/gradFill.js +0 -31
- package/dist/renderer/shaders/gradFill.js.map +0 -1
- package/dist/renderer/shaders/pathFill.js +0 -14
- package/dist/renderer/shaders/pathFill.js.map +0 -1
- package/dist/renderer/shaders/patternFill.js +0 -25
- package/dist/renderer/shaders/patternFill.js.map +0 -1
- package/dist/renderer/shaders/registerProgram.js +0 -18
- package/dist/renderer/shaders/registerProgram.js.map +0 -1
- package/dist/renderer/spriteSheet.js +0 -14
- package/dist/renderer/spriteSheet.js.map +0 -1
- package/dist/renderer/state/GroupState.js +0 -77
- package/dist/renderer/state/GroupState.js.map +0 -1
- package/dist/renderer/strokeLengths.js +0 -50
- package/dist/renderer/strokeLengths.js.map +0 -1
- package/dist/renderer/syntheticItalic.js +0 -6
- package/dist/renderer/syntheticItalic.js.map +0 -1
- package/dist/renderer/textures/registerTexture.js +0 -34
- package/dist/renderer/textures/registerTexture.js.map +0 -1
- package/dist/scheduling/useVisibleRaf.js +0 -69
- package/dist/scheduling/useVisibleRaf.js.map +0 -1
- package/dist/test-seams-DM2B87-g.d.ts +0 -356
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
import { CursorCoordsHud as e } from "../CursorCoordsHud.js";
|
|
2
|
+
import { ModalityHud as t } from "../ModalityHud.js";
|
|
3
|
+
import { PickHud as n } from "../PickHud.js";
|
|
4
|
+
import { useCallback as r } from "react";
|
|
5
|
+
import { useLatest as i } from "@weasel-js/react";
|
|
6
|
+
import { Fragment as a, jsx as o, jsxs as s } from "react/jsx-runtime";
|
|
7
|
+
//#region src/canvas/SceneCanvas/DevHuds.tsx
|
|
8
|
+
function c(c) {
|
|
9
|
+
let { cursorCoords: l, pick: u, modality: d, canvasRef: f, canvasApiRef: p, detachedInput: m, viewRef: h } = c, g = r((e, t) => p.current?.clientToWorld(e, t) ?? [e, t], [p]), _ = i({
|
|
10
|
+
pickEvery: c.pickEvery,
|
|
11
|
+
pickBest: c.pickBest
|
|
12
|
+
}), v = r((e, t) => _.current.pickEvery(e, t), [_]), y = r((e, t) => _.current.pickBest(e, t), [_]);
|
|
13
|
+
if (m === null) return null;
|
|
14
|
+
let b = m ? { anchorRef: f } : {};
|
|
15
|
+
return /* @__PURE__ */ s(a, { children: [
|
|
16
|
+
l && /* @__PURE__ */ o(e, {
|
|
17
|
+
canvasRef: f,
|
|
18
|
+
...b,
|
|
19
|
+
viewRef: h,
|
|
20
|
+
toWorld: g
|
|
21
|
+
}),
|
|
22
|
+
u && /* @__PURE__ */ o(n, {
|
|
23
|
+
canvasRef: f,
|
|
24
|
+
...b,
|
|
25
|
+
viewRef: h,
|
|
26
|
+
toWorld: g,
|
|
27
|
+
pickEvery: v,
|
|
28
|
+
pickBest: y
|
|
29
|
+
}),
|
|
30
|
+
d && /* @__PURE__ */ o(t, {
|
|
31
|
+
canvasRef: f,
|
|
32
|
+
...b,
|
|
33
|
+
modeId: typeof d == "object" ? d.modeId : void 0
|
|
34
|
+
})
|
|
35
|
+
] });
|
|
36
|
+
}
|
|
37
|
+
//#endregion
|
|
38
|
+
export { c as DevHuds };
|
|
39
|
+
|
|
40
|
+
//# sourceMappingURL=DevHuds.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"DevHuds.js","names":["_Fragment","DevHuds","props","toWorld","useCallback","canvasApiRef","clientX","clientY","pickersRef","useLatest","pickEvery","wx","wy","pickBest","detachedInput","anchor","canvasRef","Fragment","cursorCoords","CursorCoordsHud","pick","PickHud","modality","ModalityHud"],"sources":["../../../src/canvas/SceneCanvas/DevHuds.tsx"],"sourcesContent":["/**\n * `<SceneCanvas>`'s dev HUDs: the cursor readout, the pick list, and the\n * modality panel, each a fixed-position widget pinned to the canvas.\n */\nimport { useCallback, type RefObject } from 'react';\nimport { useLatest } from '@weasel-js/react';\nimport type { View } from 'core/viewport/view';\nimport type { CanvasExtensionApi } from '../canvasExtension';\nimport { CursorCoordsHud } from '../CursorCoordsHud';\nimport { ModalityHud } from '../ModalityHud';\nimport { PickHud } from '../PickHud';\n\nexport interface DevHudsProps {\n cursorCoords: boolean | undefined;\n pick: boolean | undefined;\n /** `true` leaves the mode line at `—`; an object supplies the mode id. */\n modality: boolean | { modeId?: string } | undefined;\n /** The element input comes from. */\n canvasRef: RefObject<HTMLElement | null>;\n /** Read for the canvas's own client→world conversion, so a readout agrees\n * with a pick. */\n canvasApiRef: RefObject<Pick<CanvasExtensionApi, 'clientToWorld'> | null>;\n /** Under `paintInto`, the caller's input element, `null` until it arrives;\n * `undefined` when the canvas renders its own. Each HUD of a detached\n * canvas pins to the input element itself, not to its parent, which every\n * pane of the shared surface sits in. */\n detachedInput: HTMLElement | null | undefined;\n viewRef: RefObject<View>;\n pickEvery: (worldX: number, worldY: number) => readonly string[];\n /** The id a bare click at this point would select. */\n pickBest: (worldX: number, worldY: number) => string | null;\n}\n\nexport function DevHuds(props: DevHudsProps) {\n const { cursorCoords, pick, modality, canvasRef, canvasApiRef, detachedInput, viewRef } = props;\n const toWorld = useCallback(\n (clientX: number, clientY: number): [number, number] =>\n canvasApiRef.current?.clientToWorld(clientX, clientY) ?? [clientX, clientY],\n [canvasApiRef],\n );\n // The pick HUD installs its pointer listener again whenever a picker's\n // identity changes, so it gets two that never do.\n const pickersRef = useLatest({ pickEvery: props.pickEvery, pickBest: props.pickBest });\n const pickEvery = useCallback(\n (wx: number, wy: number): readonly string[] => pickersRef.current.pickEvery(wx, wy),\n [pickersRef],\n );\n const pickBest = useCallback(\n (wx: number, wy: number): string | null => pickersRef.current.pickBest(wx, wy),\n [pickersRef],\n );\n\n // `useHostAnchor` resolves its host on mount and again only when the panel\n // or the window moves, so a HUD mounted against a null host would latch off.\n if (detachedInput === null) return null;\n\n const anchor = detachedInput ? { anchorRef: canvasRef } : {};\n return (\n <>\n {cursorCoords && (\n <CursorCoordsHud canvasRef={canvasRef} {...anchor} viewRef={viewRef} toWorld={toWorld} />\n )}\n {pick && (\n <PickHud\n canvasRef={canvasRef}\n {...anchor}\n viewRef={viewRef}\n toWorld={toWorld}\n pickEvery={pickEvery}\n pickBest={pickBest}\n />\n )}\n {modality && (\n <ModalityHud\n canvasRef={canvasRef}\n {...anchor}\n modeId={typeof modality === 'object' ? modality.modeId : undefined}\n />\n )}\n </>\n );\n}\n"],"mappings":";;;;;;;AAiCA,SAAgBC,EAAQ,GAAqB;CAC3C,IAAM,EAAE,iBAAc,SAAM,aAAU,cAAW,iBAAc,kBAAe,eAAYC,GACpFC,IAAUC,GACb,GAAiB,MAChBC,EAAa,SAAS,cAAcC,GAASC,CAAO,KAAK,CAACD,GAASC,CAAO,GAC5E,CAACF,CAAY,CACf,GAGMG,IAAaC,EAAU;EAAE,WAAWP,EAAM;EAAW,UAAUA,EAAM;CAAS,CAAC,GAC/EQ,IAAYN,GACf,GAAY,MAAkCI,EAAW,QAAQ,UAAUG,GAAIC,CAAE,GAClF,CAACJ,CAAU,CACb,GACMK,IAAWT,GACd,GAAY,MAA8BI,EAAW,QAAQ,SAASG,GAAIC,CAAE,GAC7E,CAACJ,CAAU,CACb;CAIA,IAAIM,MAAkB,MAAM,OAAO;CAEnC,IAAMC,IAASD,IAAgB,EAAE,WAAWE,EAAU,IAAI,CAAC;CAC3D,OACE,kBAAAhB,GAAA,EAAA,UAAA;EACGkB,KACC,kBAACC,GAAD;GAA4B;GAAW,GAAIJ;GAAiB;GAAkB;EAAU,CAAA;EAEzFK,KACC,kBAACC,GAAD;GACa;GACX,GAAIN;GACK;GACA;GACE;GACD;EACX,CAAA;EAEFO,KACC,kBAACC,GAAD;GACa;GACX,GAAIR;GACJ,QAAQ,OAAOO,KAAa,WAAWA,EAAS,SAAS,KAAA;EAC1D,CAAA;CAEH,EAAA,CAAA;AAEN"}
|
|
@@ -1,42 +1,41 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import {
|
|
3
|
-
import { anchorStateFrom as n, buildAffordanceAt as r, buildClassifyTarget as i, chromeAffordances as a } from "../affordanceAt.js";
|
|
1
|
+
import { EMPTY_CHROME_STATE as e } from "../../core/selection/chromeState.js";
|
|
2
|
+
import { anchorStateFrom as t, buildAffordanceAt as n, buildClassifyTarget as r, chromeAffordances as i, layerAffordance as a } from "../affordanceAt.js";
|
|
4
3
|
import { pathFromPlane as o } from "../planeClips.js";
|
|
5
4
|
import { useOptionalViewRegistry as s } from "../viewRegistry.js";
|
|
6
|
-
import {
|
|
7
|
-
import { useCallback as l, useInsertionEffect as
|
|
8
|
-
import { useLatest as
|
|
9
|
-
import { createLongPressStore as
|
|
10
|
-
import { useActionsRegistry as
|
|
5
|
+
import { traceConversion as c } from "./coordTrace.js";
|
|
6
|
+
import { useCallback as l, useInsertionEffect as ee, useMemo as u, useState as d } from "react";
|
|
7
|
+
import { useLatest as f } from "@weasel-js/react";
|
|
8
|
+
import { createLongPressStore as p } from "@weasel-js/routing";
|
|
9
|
+
import { useActionsRegistry as te, useDepRegistry as m, useDepSource as h, useGestureDispatcher as g } from "@weasel-js/routing/react";
|
|
11
10
|
//#region src/canvas/SceneCanvas/GestureDispatcherMounter.tsx
|
|
12
|
-
function
|
|
13
|
-
let B =
|
|
11
|
+
function _({ canvasRef: _, canvasApiRef: v, tools: y, contributions: b, enabled: ne, keyboard: x, claimKeys: S, selectionRef: C, boundsOf: w, planeOfNode: T, pickEvery: E, pickBest: D, kindOfNode: O, viewRef: k, dispatcher: A, getIsVisibleForCanvas: j, getRuleCtx: re, targetScale: M, handleHitRadius: N, rotationBadge: P, chromeAffordancesRef: F, onDoubleClick: I, onClick: L, longPress: { duration: R, haptics: z } = {} }) {
|
|
12
|
+
let B = te(), V = m(), H = s(), U = u(() => {
|
|
14
13
|
let e = /* @__PURE__ */ new Map();
|
|
15
|
-
for (let [t, n] of Object.entries(
|
|
16
|
-
for (let t of
|
|
17
|
-
for (let t of
|
|
14
|
+
for (let [t, n] of Object.entries(y.registry)) e.set(t, n);
|
|
15
|
+
for (let t of b) e.set(t.id, t);
|
|
16
|
+
for (let t of y.ambient) e.set(t.id, t);
|
|
18
17
|
return e;
|
|
19
18
|
}, [
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
]), W =
|
|
24
|
-
...
|
|
25
|
-
...
|
|
26
|
-
rotationBadge:
|
|
19
|
+
y.registry,
|
|
20
|
+
y.ambient,
|
|
21
|
+
b
|
|
22
|
+
]), W = f(E), G = f(D), K = f(O), q = f(V), J = f(T), Y = u(() => t(() => q.current, (e, t) => o(t, J.current?.(e) ?? null)), [q, J]), X = u(() => i({
|
|
23
|
+
...M === void 0 ? {} : { targetScale: M },
|
|
24
|
+
...N === void 0 ? {} : { handleHitRadius: N },
|
|
25
|
+
rotationBadge: P,
|
|
27
26
|
getAnchorState: Y
|
|
28
27
|
}), [
|
|
28
|
+
M,
|
|
29
29
|
N,
|
|
30
30
|
P,
|
|
31
|
-
F,
|
|
32
31
|
Y
|
|
33
32
|
]);
|
|
34
|
-
|
|
35
|
-
|
|
33
|
+
ee(() => {
|
|
34
|
+
F && (F.current = X);
|
|
36
35
|
});
|
|
37
|
-
let Z =
|
|
38
|
-
if (
|
|
39
|
-
getChromeState: () => H?.surface()?.chromeState() ??
|
|
36
|
+
let Z = u(() => {
|
|
37
|
+
if (C && w && k) return n({
|
|
38
|
+
getChromeState: () => H?.surface()?.chromeState() ?? e,
|
|
40
39
|
getView: () => k.current ?? {
|
|
41
40
|
x: 0,
|
|
42
41
|
y: 0,
|
|
@@ -49,90 +48,49 @@ function y({ canvasRef: y, canvasApiRef: b, tools: x, contributions: S, enabled:
|
|
|
49
48
|
...j ? { getIsVisible: () => j() } : {}
|
|
50
49
|
});
|
|
51
50
|
}, [
|
|
51
|
+
C,
|
|
52
52
|
w,
|
|
53
|
-
T,
|
|
54
53
|
k,
|
|
55
54
|
X,
|
|
56
55
|
j,
|
|
57
56
|
H
|
|
58
|
-
]),
|
|
59
|
-
if (
|
|
57
|
+
]), ie = u(() => {
|
|
58
|
+
if (C && E && k) return r(() => C.current?.current ?? [], (e, t) => {
|
|
60
59
|
if (G.current) return G.current(e, t);
|
|
61
60
|
let n = W.current?.(e, t) ?? [];
|
|
62
61
|
return n.length > 0 ? n[n.length - 1] : null;
|
|
63
62
|
}, (e) => K.current?.(e));
|
|
64
63
|
}, [
|
|
65
|
-
|
|
64
|
+
C,
|
|
66
65
|
E,
|
|
67
66
|
k,
|
|
68
67
|
G,
|
|
69
68
|
W,
|
|
70
69
|
K
|
|
71
|
-
]),
|
|
72
|
-
let
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
clientX: t,
|
|
76
|
-
clientY: n,
|
|
77
|
-
rect: null,
|
|
78
|
-
view: null,
|
|
79
|
-
world: {
|
|
80
|
-
x: t,
|
|
81
|
-
y: n
|
|
82
|
-
},
|
|
83
|
-
fallback: !0
|
|
84
|
-
}), {
|
|
85
|
-
x: t,
|
|
86
|
-
y: n
|
|
87
|
-
};
|
|
88
|
-
let a = r.getBoundingClientRect(), [o, s] = e(t, n, a, i), l = {
|
|
89
|
-
x: o,
|
|
90
|
-
y: s
|
|
70
|
+
]), ae = l((e, t) => {
|
|
71
|
+
let n = v.current, [r, i] = n ? n.clientToWorld(e, t) : [e, t], a = {
|
|
72
|
+
x: r,
|
|
73
|
+
y: i
|
|
91
74
|
};
|
|
92
|
-
return c(
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
x: i.x,
|
|
104
|
-
y: i.y,
|
|
105
|
-
scaleX: i.scale.x,
|
|
106
|
-
scaleY: i.scale.y
|
|
107
|
-
},
|
|
108
|
-
world: l,
|
|
109
|
-
fallback: !1
|
|
110
|
-
}), l;
|
|
111
|
-
}, [y, k]), ae = d(() => (e) => {
|
|
112
|
-
let t = b?.current?.hitTestExtras?.(e.x, e.y);
|
|
113
|
-
if (t) {
|
|
114
|
-
let e = t.hit;
|
|
115
|
-
return {
|
|
116
|
-
kind: `layer:${t.layerId}`,
|
|
117
|
-
owner: t.layerId,
|
|
118
|
-
strength: e.strength ?? "shared",
|
|
119
|
-
...e.claimedKinds === void 0 ? {} : { claimedKinds: e.claimedKinds },
|
|
120
|
-
...e.cursor === void 0 ? {} : { cursor: e.cursor },
|
|
121
|
-
...e.initialScratch === void 0 ? {} : { payload: e.initialScratch }
|
|
122
|
-
};
|
|
123
|
-
}
|
|
124
|
-
return Z ? Z(e) : null;
|
|
125
|
-
}, [Z, b]), oe = l(() => {
|
|
126
|
-
b?.current?.requestRedraw?.();
|
|
127
|
-
}, [b]), se = l(() => b?.current?.paintedCursor, [b]), [Q] = f(m), ce = d(() => ({
|
|
75
|
+
return c(e, t, n ? _.current : null, k?.current, a), a;
|
|
76
|
+
}, [
|
|
77
|
+
_,
|
|
78
|
+
v,
|
|
79
|
+
k
|
|
80
|
+
]), oe = u(() => (e) => {
|
|
81
|
+
let t = v.current?.hitTestExtras?.(e.x, e.y);
|
|
82
|
+
return t ? a(t.layerId, t.hit) : Z ? Z(e) : null;
|
|
83
|
+
}, [Z, v]), se = l(() => {
|
|
84
|
+
v.current?.requestRedraw?.();
|
|
85
|
+
}, [v]), ce = l(() => v.current?.paintedCursor, [v]), le = l(() => v.current?.cursorSink, [v]), [Q] = d(p), ue = u(() => ({
|
|
128
86
|
state: Q,
|
|
129
|
-
...
|
|
130
|
-
...z
|
|
87
|
+
...R === void 0 ? {} : { duration: R },
|
|
88
|
+
...z === void 0 ? {} : { haptics: z }
|
|
131
89
|
}), [
|
|
132
90
|
Q,
|
|
133
|
-
|
|
134
|
-
z
|
|
135
|
-
]), $ =
|
|
91
|
+
R,
|
|
92
|
+
z
|
|
93
|
+
]), $ = u(() => {
|
|
136
94
|
if (H) return {
|
|
137
95
|
targets: () => H.list().map((e) => ({
|
|
138
96
|
id: e.id,
|
|
@@ -141,27 +99,28 @@ function y({ canvasRef: y, canvasApiRef: b, tools: x, contributions: S, enabled:
|
|
|
141
99
|
resolver: H.resolver
|
|
142
100
|
};
|
|
143
101
|
}, [H]);
|
|
144
|
-
return
|
|
145
|
-
canvasRef:
|
|
102
|
+
return g({
|
|
103
|
+
canvasRef: _,
|
|
146
104
|
actions: B,
|
|
147
105
|
entriesById: U,
|
|
148
|
-
enabled:
|
|
149
|
-
keyboard:
|
|
150
|
-
claimKeys:
|
|
151
|
-
affordanceAt:
|
|
152
|
-
classifyTarget:
|
|
106
|
+
enabled: ne,
|
|
107
|
+
keyboard: x,
|
|
108
|
+
claimKeys: S,
|
|
109
|
+
affordanceAt: oe,
|
|
110
|
+
classifyTarget: ie,
|
|
153
111
|
dispatcher: A,
|
|
154
|
-
clientToWorld:
|
|
155
|
-
requestRedraw:
|
|
156
|
-
paintedCursor:
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
112
|
+
clientToWorld: ae,
|
|
113
|
+
requestRedraw: se,
|
|
114
|
+
paintedCursor: ce,
|
|
115
|
+
cursorSink: le,
|
|
116
|
+
getRuleCtx: re,
|
|
117
|
+
onClick: L,
|
|
118
|
+
onDoubleClick: I,
|
|
119
|
+
longPress: ue,
|
|
161
120
|
...$ ? { views: $ } : {}
|
|
162
|
-
}),
|
|
121
|
+
}), h("longPress", () => Q), null;
|
|
163
122
|
}
|
|
164
123
|
//#endregion
|
|
165
|
-
export {
|
|
124
|
+
export { _ as GestureDispatcherMounter };
|
|
166
125
|
|
|
167
126
|
//# sourceMappingURL=GestureDispatcherMounter.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"GestureDispatcherMounter.js","names":["clientToWorld","clientToWorldHelper","GestureDispatcherMounter","longPressOpts","registry","useActionsRegistry","depRegistry","useDepRegistry","viewRegistry","useOptionalViewRegistry","entriesById","useMemo","m","id","tool","tools","entry","contributions","pickEveryRef","useLatest","pickEvery","pickBestRef","pickBest","kindOfNodeRef","kindOfNode","depRegistryRef","planeOfNodeRef","planeOfNode","getAnchorState","anchorStateFrom","pathFromPlane","path","affordances","chromeAffordances","targetScale","handleHitRadius","rotationBadge","chromeAffordancesRef","affordanceAt","selectionRef","boundsOf","viewRef","buildAffordanceAt","EMPTY_CHROME_STATE","getIsVisibleForCanvas","classifyTarget","buildClassifyTarget","wx","wy","ids","clientToWorld$1","useCallback","canvas","canvasRef","view","recordCoordTrace","clientX","clientY","rect","clientToWorld","world","affordanceWithLayers","extra","canvasApiRef","worldPoint","claim","requestRedraw","paintedCursor","longPressState","useState","createLongPressStore","longPress","views","r","useGestureDispatcher","useDepSource"],"sources":["../../../src/canvas/SceneCanvas/GestureDispatcherMounter.tsx"],"sourcesContent":["import { useLatest } from '@weasel-js/react';\nimport { createLongPressStore, type Dispatcher } from '@weasel-js/routing';\nimport { useActionsRegistry, useDepRegistry, useDepSource, useGestureDispatcher } from '@weasel-js/routing/react';\nimport type { Affordance } from 'affordances/types';\nimport { EMPTY_CHROME_STATE } from 'core/selection/chromeState';\nimport { clientToWorld as clientToWorldHelper } from 'core/viewport/clientToWorld';\nimport type { View } from 'core/viewport/view';\nimport type { RuleCtx } from 'features/chrome-caps';\nimport type React from 'react';\nimport { useCallback, useInsertionEffect, useMemo, useState } from 'react';\nimport type { Contribution } from '../../tools/overlayBinding';\nimport type { ToolsApi } from '../../tools/overlayBinding';\nimport { anchorStateFrom, buildAffordanceAt, buildClassifyTarget, chromeAffordances } from '../affordanceAt';\nimport type { CanvasExtensionApi } from '../canvasExtension';\nimport { pathFromPlane } from '../planeClips';\nimport { useOptionalViewRegistry } from '../viewRegistry';\nimport { recordCoordTrace } from './coordTrace';\nimport type { SceneCanvasLongPress } from './props';\n\nexport function GestureDispatcherMounter({\n canvasRef,\n canvasApiRef,\n tools,\n contributions,\n enabled,\n keyboard,\n claimKeys,\n selectionRef,\n boundsOf,\n planeOfNode,\n pickEvery,\n pickBest,\n kindOfNode,\n viewRef,\n dispatcher,\n getIsVisibleForCanvas,\n getRuleCtx,\n targetScale,\n handleHitRadius,\n rotationBadge,\n chromeAffordancesRef,\n onDoubleClick,\n onClick,\n longPress: longPressOpts,\n}: {\n canvasRef: React.RefObject<HTMLElement | null>;\n /** Holds the full `CanvasExtensionApi` so the gesture dispatcher can call\n * `requestRedraw()` between pointer events. */\n canvasApiRef?: React.RefObject<CanvasExtensionApi | null>;\n tools: ToolsApi;\n /** Always-live entries the canvas installs beside `tools` — the selection's\n * `move` / `transform` bindings. Ahead of the tools' ambient entries, so a\n * tie at one specificity goes to the kit's. */\n contributions: readonly Contribution[];\n enabled: boolean;\n /** When false, the dispatcher leaves keyboard listeners unattached so\n * keyboard-bound actions never fire. Wired to `enableKeybindings`. */\n keyboard: boolean;\n /** Take the keyboard on mount. Wired to `claimKeys`. */\n claimKeys: boolean;\n selectionRef?: React.RefObject<import('core/selection/useSelection').SelectionApi>;\n boundsOf?: (id: string) => import('core/viewport/fitViewToBounds').Bounds | null;\n /** The parallax plane a node is drawn through, under the surface's camera —\n * so path anchors are hit where the plane draws them. */\n planeOfNode?: (id: string) => import('core/viewport/parallax').PlaneMap | null;\n pickEvery?: (worldX: number, worldY: number) => string[];\n /** Single topmost hit (collapses parent/child via `pickTopMostHit`), used to\n * classify the body under the pointer. Must match the select tool's own\n * resolution so a child node isn't misclassified by its parent's selection.\n * Falls back to `pickEvery`'s last id when absent. */\n pickBest?: (worldX: number, worldY: number) => string | null;\n /** Resolves a hit node id to its routing-trait kind, so the body\n * classification carries `kind` alongside `bodyTarget` and the\n * `kind:<k>` / `kind:<k>:selected` target forms can match. Absent when\n * the consumer opted out of routing (`routing={[]}`). */\n kindOfNode?: (id: string) => string | undefined;\n viewRef?: React.RefObject<View>;\n /** Pre-created dispatcher to pump events into. When omitted,\n * `useGestureDispatcher` creates one internally (legacy path). */\n dispatcher?: Dispatcher;\n /** Chrome-caps visibility resolver factory. Threaded into\n * `buildAffordanceAt` so the hit-test pipeline gates corner / rotate /\n * anchor affordances on the same chrome ids the renderer uses. */\n getIsVisibleForCanvas?: () => (id: string) => boolean;\n /** Live RuleCtx factory. Threaded into `useGestureDispatcher` so the\n * dispatcher's eligibility filter sees the same mode/capabilities/selection\n * view of the world that chrome-caps does. */\n getRuleCtx?: () => RuleCtx;\n /** `DeviceProfile.targetScale`, so the affordance grab zones resolve to the\n * same sizes the chrome paints at. */\n targetScale?: number;\n /** Consumer override for the corner-handle grab radius\n * (`selectTool.handleHitRadius`). Undefined takes the device-scaled size. */\n handleHitRadius?: number;\n /** The rotate badge the selection overlay paints, grabbable where drawn. */\n rotationBadge?: { distancePx: number; sizePx: number } | null;\n /** Receives the affordances this mounter hit-tests, for the slops overlay. */\n chromeAffordancesRef?: React.MutableRefObject<readonly Affordance[]>;\n /** Fires on every synthesized double click, in world coords. Backs the\n * `onDoubleClick` prop — see the option's doc on\n * `UseGestureDispatcherOptions` for why it's an observer, not a binding. */\n onDoubleClick?: (world: { x: number; y: number }) => void;\n /** Fires after every synthesized click. Backs the `onClick` prop. */\n onClick?: (world: { x: number; y: number }) => void;\n /** Backs `<SceneCanvas longPress>`. */\n longPress?: SceneCanvasLongPress;\n}) {\n const registry = useActionsRegistry();\n const depRegistry = useDepRegistry();\n const viewRegistry = useOptionalViewRegistry();\n const entriesById = useMemo<ReadonlyMap<string, Contribution>>(() => {\n const m = new Map<string, Contribution>();\n for (const [id, tool] of Object.entries(tools.registry)) {\n m.set(id, tool);\n }\n for (const entry of contributions) m.set(entry.id, entry);\n // Ambient entries too — their bindings assemble at ambient scope, and the\n // dispatcher resolves them through this same map.\n for (const entry of tools.ambient) m.set(entry.id, entry);\n return m;\n }, [tools.registry, tools.ambient, contributions]);\n\n\n // Stable refs for the optional thunk inputs so the thunks themselves are\n // stable function identities across renders (no need to pass them as deps).\n const pickEveryRef = useLatest(pickEvery);\n const pickBestRef = useLatest(pickBest);\n const kindOfNodeRef = useLatest(kindOfNode);\n\n // `getAnchorState` thunk for `buildAffordanceAt` — reads the live\n // `editAnchors` dep from the registry at call time.\n const depRegistryRef = useLatest(depRegistry);\n const planeOfNodeRef = useLatest(planeOfNode);\n const getAnchorState = useMemo(() => anchorStateFrom(\n () => depRegistryRef.current,\n (id, path) => pathFromPlane(path, planeOfNodeRef.current?.(id) ?? null),\n ), [depRegistryRef, planeOfNodeRef]);\n\n // Build the `affordanceAt` thunk. Takes world coords and delegates to\n // `buildAffordanceAt` for handle hit-testing.\n const affordances = useMemo(() => chromeAffordances({\n ...(targetScale !== undefined ? { targetScale } : {}),\n ...(handleHitRadius !== undefined ? { handleHitRadius } : {}),\n rotationBadge,\n getAnchorState,\n }), [targetScale, handleHitRadius, rotationBadge, getAnchorState]);\n useInsertionEffect(() => {\n if (chromeAffordancesRef) chromeAffordancesRef.current = affordances;\n });\n const affordanceAt = useMemo(() => {\n if (!selectionRef || !boundsOf || !viewRef) return undefined;\n return buildAffordanceAt({\n // The canvas's own view chrome, built once by its helpers — not a\n // second construction here that has to agree with the painted one.\n getChromeState: () => viewRegistry?.surface()?.chromeState() ?? EMPTY_CHROME_STATE,\n // Radii are declared in screen pixels and converted against this view.\n getView: () => viewRef.current ?? { x: 0, y: 0, scale: { x: 1, y: 1 } },\n affordances,\n // Chrome-caps resolver: keep the affordance hit-test in sync with what\n // the renderer is actually painting. Without this, a click on a (no\n // longer visible) resize handle position still classifies as a resize\n // handle — e.g. an anchor drag in path-edit mode resizes the path's\n // bounding box instead of moving the anchor.\n ...(getIsVisibleForCanvas ? { getIsVisible: () => getIsVisibleForCanvas() } : {}),\n });\n }, [selectionRef, boundsOf, viewRef, affordances, getIsVisibleForCanvas, viewRegistry]);\n\n // Build the `classifyTarget` thunk. Takes world coords and delegates to\n // `buildClassifyTarget`.\n const classifyTarget = useMemo(() => {\n if (!selectionRef || !pickEvery || !viewRef) return undefined;\n return buildClassifyTarget(\n () => selectionRef.current?.current ?? [],\n // Use the select tool's own topmost-hit resolution (`pickTopMostHit`,\n // which collapses parent/child) so a child body is classified by ITS\n // OWN selection — not its parent's.\n (wx: number, wy: number) => {\n if (pickBestRef.current) return pickBestRef.current(wx, wy);\n const ids = pickEveryRef.current?.(wx, wy) ?? [];\n return ids.length > 0 ? ids[ids.length - 1] : null;\n },\n // Node kind comes from the routing trait — the same classifier that\n // names `Hit.kind` — so `target: 'kind:text'` on a binding speaks the\n // vocabulary the consumer already declared in `routing`, rather than a\n // second one invented for bindings. `routing={[]}` opts out and leaves\n // every `kind:` target unmatchable.\n (id: string) => kindOfNodeRef.current?.(id),\n );\n }, [selectionRef, pickEvery, viewRef, pickBestRef, pickEveryRef, kindOfNodeRef]);\n\n // The canvas rect is read on every call (not cached) so it stays correct\n // after layout changes.\n const clientToWorld = useCallback((clientX: number, clientY: number): { x: number; y: number } => {\n const canvas = canvasRef.current;\n const view = viewRef?.current;\n if (!canvas || !view) {\n recordCoordTrace({ ts: Date.now(), clientX, clientY, rect: null, view: null, world: { x: clientX, y: clientY }, fallback: true });\n return { x: clientX, y: clientY };\n }\n const rect = canvas.getBoundingClientRect();\n const [wx, wy] = clientToWorldHelper(clientX, clientY, rect, view);\n const world = { x: wx, y: wy };\n recordCoordTrace({\n ts: Date.now(), clientX, clientY,\n rect: { left: rect.left, top: rect.top, width: rect.width, height: rect.height },\n view: { x: view.x, y: view.y, scaleX: view.scale.x, scaleY: view.scale.y },\n world, fallback: false,\n });\n return world;\n }, [canvasRef, viewRef]);\n\n const affordanceWithLayers = useMemo(() => {\n // Note this is NOT gated on `affordanceAt` being built: registered layers\n // produce affordances of their own, and a consumer with no selection\n // chrome (a canvas that is nothing but a HUD, say) still needs those.\n return (worldPoint: { x: number; y: number }) => {\n // Registered layers first: they draw on top of the kit's own chrome, so\n // they get first refusal on the point. A hit becomes an `AffordanceHit`\n // whose kind names the layer, carrying whatever the layer's hit-test\n // resolved — which is how `@weasel-js/hud` routes a press on one of its\n // widgets to its own action instead of the active tool.\n const extra = canvasApiRef?.current?.hitTestExtras?.(worldPoint.x, worldPoint.y);\n if (extra) {\n const claim = extra.hit;\n return {\n kind: `layer:${extra.layerId}`,\n owner: extra.layerId,\n strength: claim.strength ?? 'shared',\n ...(claim.claimedKinds !== undefined ? { claimedKinds: claim.claimedKinds } : {}),\n ...(claim.cursor !== undefined ? { cursor: claim.cursor } : {}),\n ...(claim.initialScratch !== undefined ? { payload: claim.initialScratch } : {}),\n };\n }\n return affordanceAt ? affordanceAt(worldPoint) : null;\n };\n }, [affordanceAt, canvasApiRef]);\n\n // Stable callback that asks the canvas to redraw. Reads via ref so the\n // identity stays stable while the underlying API binds after mount.\n const requestRedraw = useCallback(() => {\n canvasApiRef?.current?.requestRedraw?.();\n }, [canvasApiRef]);\n\n // The painted tier's channel, read live for the same reason — the handle it\n // lives on binds after mount.\n const paintedCursor = useCallback(\n () => canvasApiRef?.current?.paintedCursor,\n [canvasApiRef],\n );\n\n // The pending long-press, published as the `longPress` dep for feedback.\n const [longPressState] = useState(createLongPressStore);\n const longPress = useMemo(() => ({\n state: longPressState,\n ...(longPressOpts?.duration !== undefined ? { duration: longPressOpts.duration } : {}),\n ...(longPressOpts?.haptics !== undefined ? { haptics: longPressOpts.haptics } : {}),\n }), [longPressState, longPressOpts?.duration, longPressOpts?.haptics]);\n\n // Input routing to registered views. Rebuilt per event from the registry, so\n // a view that mounts or moves mid-session is routable on the next event; with\n // nothing registered every point resolves to the canvas, as before.\n const views = useMemo(() => {\n if (!viewRegistry) return undefined;\n return {\n targets: () => viewRegistry.list().map((r) => ({ id: r.id, ...r.target })),\n resolver: viewRegistry.resolver,\n };\n }, [viewRegistry]);\n\n // Hover cursors live in `useGestureDispatcher`'s hover-cursor pump:\n // affordance hits carry `AffordanceHit.cursor` (set by `buildAffordanceAt`),\n // and everything else is predicted via `Dispatcher.resolveOnly` +\n // `Action.cursor`. Nothing SceneCanvas-specific remains here.\n useGestureDispatcher({\n canvasRef,\n actions: registry!,\n entriesById,\n enabled,\n keyboard,\n claimKeys,\n affordanceAt: affordanceWithLayers,\n classifyTarget,\n dispatcher,\n clientToWorld,\n requestRedraw,\n paintedCursor,\n getRuleCtx,\n onClick,\n onDoubleClick,\n longPress,\n ...(views ? { views } : {}),\n });\n useDepSource('longPress', () => longPressState);\n return null;\n}\n"],"mappings":";;;;;;;;;;;AAmBA,SAAgBE,EAAyB,EACvC,cACA,iBACA,UACA,kBACA,aACA,cACA,cACA,iBACA,aACA,iBACA,cACA,aACA,eACA,YACA,eACA,0BACA,eACA,gBACA,oBACA,kBACA,yBACA,kBACA,YACA,WAAWC,KA+DV;CACD,IAAMC,IAAWC,EAAmB,GAC9BC,IAAcC,EAAe,GAC7BC,IAAeC,EAAwB,GACvCC,IAAcC,QAAiD;EACnE,IAAMC,oBAAI,IAAI,IAA0B;EACxC,KAAK,IAAM,CAACC,GAAIC,MAAS,OAAO,QAAQC,EAAM,QAAQ,GACpD,EAAE,IAAIF,GAAIC,CAAI;EAEhB,KAAK,IAAME,KAASC,GAAe,EAAE,IAAID,EAAM,IAAIA,CAAK;EAGxD,KAAK,IAAMA,KAASD,EAAM,SAAS,EAAE,IAAIC,EAAM,IAAIA,CAAK;EACxD,OAAOJ;CACT,GAAG;EAACG,EAAM;EAAUA,EAAM;EAASE;CAAa,CAAC,GAK3CC,IAAeC,EAAUC,CAAS,GAClCC,IAAcF,EAAUG,CAAQ,GAChCC,IAAgBJ,EAAUK,CAAU,GAIpCC,IAAiBN,EAAUb,CAAW,GACtCoB,IAAiBP,EAAUQ,EAAW,GACtCC,IAAiBjB,QAAckB,QAC7BJ,EAAe,UACpB,GAAI,MAASK,EAAcC,GAAML,EAAe,UAAUb,CAAE,KAAK,IAAI,CACxE,GAAG,CAACY,GAAgBC,CAAc,CAAC,GAI7BM,IAAcrB,QAAcsB,EAAkB;EAClD,GAAIC,MAAgB,KAAA,IAA8B,CAAC,IAAnB,EAAE,eAAY;EAC9C,GAAIC,MAAoB,KAAA,IAAkC,CAAC,IAAvB,EAAE,mBAAgB;EACtD;EACA;CACF,CAAC,GAAG;EAACD;EAAaC;EAAiBC;EAAeR;CAAc,CAAC;CACjE,QAAyB;EACvB,AAAIS,MAAsB,EAAqB,UAAUL;CAC3D,CAAC;CACD,IAAMM,IAAe3B,QAAc;EACjC,IAAK4B,KAAiBC,KAAaC,GACnC,OAAOC,EAAkB;GAGvB,sBAAsBlC,GAAc,QAAQ,CAAC,EAAE,YAAY,KAAKmC;GAEhE,eAAeF,EAAQ,WAAW;IAAE,GAAG;IAAG,GAAG;IAAG,OAAO;KAAE,GAAG;KAAG,GAAG;IAAE;GAAE;GACtE;GAMA,GAAIG,IAAwB,EAAE,oBAAoBA,EAAsB,EAAE,IAAI,CAAC;EACjF,CAAC;CACH,GAAG;EAACL;EAAcC;EAAUC;EAAST;EAAaY;EAAuBpC;CAAY,CAAC,GAIhFqC,KAAiBlC,QAAc;EACnC,IAAK4B,KAAiBnB,KAAcqB,GACpC,OAAOK,QACCP,EAAa,SAAS,WAAW,CAAC,IAIvC,GAAY,MAAe;GAC1B,IAAIlB,EAAY,SAAS,OAAOA,EAAY,QAAQ0B,GAAIC,CAAE;GAC1D,IAAMC,IAAM/B,EAAa,UAAU6B,GAAIC,CAAE,KAAK,CAAC;GAC/C,OAAOC,EAAI,SAAS,IAAIA,EAAIA,EAAI,SAAS,KAAK;EAChD,IAMC,MAAe1B,EAAc,UAAUV,CAAE,CAC5C;CACF,GAAG;EAAC0B;EAAcnB;EAAWqB;EAASpB;EAAaH;EAAcK;CAAa,CAAC,GAIzEvB,KAAgBmD,GAAa,GAAiB,MAA8C;EAChG,IAAMC,IAASC,EAAU,SACnBC,IAAOb,GAAS;EACtB,IAAI,CAACW,KAAU,CAACE,GAEd,OADAC,EAAiB;GAAE,IAAI,KAAK,IAAI;GAAG;GAAS;GAAS,MAAM;GAAM,MAAM;GAAM,OAAO;IAAE,GAAGC;IAAS,GAAGC;GAAQ;GAAG,UAAU;EAAK,CAAC,GACzH;GAAE,GAAGD;GAAS,GAAGC;EAAQ;EAElC,IAAMC,IAAON,EAAO,sBAAsB,GACpC,CAACL,GAAIC,KAAM/C,EAAoBuD,GAASC,GAASC,GAAMJ,CAAI,GAC3DM,IAAQ;GAAE,GAAGb;GAAI,GAAGC;EAAG;EAO7B,OANAO,EAAiB;GACf,IAAI,KAAK,IAAI;GAAG;GAAS;GACzB,MAAM;IAAE,MAAMG,EAAK;IAAM,KAAKA,EAAK;IAAK,OAAOA,EAAK;IAAO,QAAQA,EAAK;GAAO;GAC/E,MAAM;IAAE,GAAGJ,EAAK;IAAG,GAAGA,EAAK;IAAG,QAAQA,EAAK,MAAM;IAAG,QAAQA,EAAK,MAAM;GAAE;GACzE;GAAO,UAAU;EACnB,CAAC,GACMM;CACT,GAAG,CAACP,GAAWZ,CAAO,CAAC,GAEjBoB,KAAuBlD,SAInB,MAAyC;EAM/C,IAAMmD,IAAQC,GAAc,SAAS,gBAAgBC,EAAW,GAAGA,EAAW,CAAC;EAC/E,IAAIF,GAAO;GACT,IAAMG,IAAQH,EAAM;GACpB,OAAO;IACL,MAAM,SAASA,EAAM;IACrB,OAAOA,EAAM;IACb,UAAUG,EAAM,YAAY;IAC5B,GAAIA,EAAM,iBAAiB,KAAA,IAAmD,CAAC,IAAxC,EAAE,cAAcA,EAAM,aAAa;IAC1E,GAAIA,EAAM,WAAW,KAAA,IAAuC,CAAC,IAA5B,EAAE,QAAQA,EAAM,OAAO;IACxD,GAAIA,EAAM,mBAAmB,KAAA,IAAgD,CAAC,IAArC,EAAE,SAASA,EAAM,eAAe;GAC3E;EACF;EACA,OAAO3B,IAAeA,EAAa0B,CAAU,IAAI;CACnD,GACC,CAAC1B,GAAcyB,CAAY,CAAC,GAIzBG,KAAgBf,QAAkB;EACtC,GAAc,SAAS,gBAAgB;CACzC,GAAG,CAACY,CAAY,CAAC,GAIXI,KAAgBhB,QACdY,GAAc,SAAS,eAC7B,CAACA,CAAY,CACf,GAGM,CAACK,KAAkBC,EAASC,CAAoB,GAChDC,KAAY5D,SAAe;EAC/B,OAAOyD;EACP,GAAIjE,GAAe,aAAa,KAAA,IAAmD,CAAC,IAAxC,EAAE,UAAUA,EAAc,SAAS;EAC/E,GAAIA,GAAe,YAAY,KAAA,IAAiD,CAAC,IAAtC,EAAE,SAASA,EAAc,QAAQ;CAC9E,IAAI;EAACiE;EAAgBjE,GAAe;EAAUA,GAAe;CAAO,CAAC,GAK/DqE,IAAQ7D,QAAc;EAC1B,IAAKH,GACL,OAAO;GACL,eAAeA,EAAa,KAAK,CAAC,CAAC,KAAK,OAAO;IAAE,IAAIiE,EAAE;IAAI,GAAGA,EAAE;GAAO,EAAE;GACzE,UAAUjE,EAAa;EACzB;CACF,GAAG,CAACA,CAAY,CAAC;CA0BjB,OApBAkE,EAAqB;EACnB;EACA,SAAStE;EACT;EACA;EACA;EACA;EACA,cAAcyD;EACd;EACA;EACA,eAAAX;EACA;EACA;EACA;EACA;EACA;EACA;EACA,GAAIsB,IAAQ,EAAE,SAAM,IAAI,CAAC;CAC3B,CAAC,GACDG,EAAa,mBAAmBP,CAAc,GACvC;AACT"}
|
|
1
|
+
{"version":3,"file":"GestureDispatcherMounter.js","names":["GestureDispatcherMounter","longPressDuration","longPressHaptics","registry","useActionsRegistry","depRegistry","useDepRegistry","viewRegistry","useOptionalViewRegistry","entriesById","useMemo","m","id","tool","tools","entry","contributions","pickEveryRef","useLatest","pickEvery","pickBestRef","pickBest","kindOfNodeRef","kindOfNode","depRegistryRef","planeOfNodeRef","planeOfNode","getAnchorState","anchorStateFrom","pathFromPlane","path","affordances","chromeAffordances","targetScale","handleHitRadius","rotationBadge","chromeAffordancesRef","affordanceAt","selectionRef","boundsOf","viewRef","buildAffordanceAt","EMPTY_CHROME_STATE","getIsVisibleForCanvas","classifyTarget","buildClassifyTarget","wx","wy","ids","clientToWorld","useCallback","api","canvasApiRef","x","y","clientX","clientY","world","traceConversion","canvasRef","affordanceWithLayers","extra","worldPoint","layerAffordance","requestRedraw","paintedCursor","cursorSink","longPressState","useState","createLongPressStore","longPress","views","r","useGestureDispatcher","useDepSource"],"sources":["../../../src/canvas/SceneCanvas/GestureDispatcherMounter.tsx"],"sourcesContent":["import { useLatest } from '@weasel-js/react';\nimport { createLongPressStore, type Dispatcher } from '@weasel-js/routing';\nimport { useActionsRegistry, useDepRegistry, useDepSource, useGestureDispatcher } from '@weasel-js/routing/react';\nimport type { Affordance } from 'affordances/types';\nimport { EMPTY_CHROME_STATE } from 'core/selection/chromeState';\nimport type { View } from 'core/viewport/view';\nimport type { RuleCtx } from 'features/chrome-caps';\nimport type React from 'react';\nimport { useCallback, useInsertionEffect, useMemo, useState } from 'react';\nimport type { Contribution } from '../../tools/overlayBinding';\nimport type { ToolsApi } from '../../tools/overlayBinding';\nimport { anchorStateFrom, buildAffordanceAt, buildClassifyTarget, chromeAffordances, layerAffordance } from '../affordanceAt';\nimport type { CanvasExtensionApi } from '../canvasExtension';\nimport { pathFromPlane } from '../planeClips';\nimport { useOptionalViewRegistry } from '../viewRegistry';\nimport { traceConversion } from './coordTrace';\nimport type { SceneCanvasLongPress } from './props';\n\nexport function GestureDispatcherMounter({\n canvasRef,\n canvasApiRef,\n tools,\n contributions,\n enabled,\n keyboard,\n claimKeys,\n selectionRef,\n boundsOf,\n planeOfNode,\n pickEvery,\n pickBest,\n kindOfNode,\n viewRef,\n dispatcher,\n getIsVisibleForCanvas,\n getRuleCtx,\n targetScale,\n handleHitRadius,\n rotationBadge,\n chromeAffordancesRef,\n onDoubleClick,\n onClick,\n longPress: { duration: longPressDuration, haptics: longPressHaptics } = {},\n}: {\n canvasRef: React.RefObject<HTMLElement | null>;\n /** Holds the full `CanvasExtensionApi` so the gesture dispatcher can call\n * `requestRedraw()` between pointer events. */\n canvasApiRef: React.RefObject<CanvasExtensionApi | null>;\n tools: ToolsApi;\n /** Always-live entries the canvas installs beside `tools` — the selection's\n * `move` / `transform` bindings. Ahead of the tools' ambient entries, so a\n * tie at one specificity goes to the kit's. */\n contributions: readonly Contribution[];\n enabled: boolean;\n /** When false, the dispatcher leaves keyboard listeners unattached so\n * keyboard-bound actions never fire. Wired to `enableKeybindings`. */\n keyboard: boolean;\n /** Take the keyboard on mount. Wired to `claimKeys`. */\n claimKeys: boolean;\n selectionRef?: React.RefObject<import('core/selection/useSelection').SelectionApi>;\n boundsOf?: (id: string) => import('core/viewport/fitViewToBounds').Bounds | null;\n /** The parallax plane a node is drawn through, under the surface's camera —\n * so path anchors are hit where the plane draws them. */\n planeOfNode?: (id: string) => import('core/viewport/parallax').PlaneMap | null;\n pickEvery?: (worldX: number, worldY: number) => string[];\n /** Single topmost hit (collapses parent/child via `pickTopMostHit`), used to\n * classify the body under the pointer. Must match the select tool's own\n * resolution so a child node isn't misclassified by its parent's selection.\n * Falls back to `pickEvery`'s last id when absent. */\n pickBest?: (worldX: number, worldY: number) => string | null;\n /** Resolves a hit node id to its routing-trait kind, so the body\n * classification carries `kind` alongside `bodyTarget` and the\n * `kind:<k>` / `kind:<k>:selected` target forms can match. Absent when\n * the consumer opted out of routing (`routing={[]}`). */\n kindOfNode?: (id: string) => string | undefined;\n viewRef?: React.RefObject<View>;\n /** Pre-created dispatcher to pump events into. When omitted,\n * `useGestureDispatcher` creates one internally (legacy path). */\n dispatcher?: Dispatcher;\n /** Chrome-caps visibility resolver factory. Threaded into\n * `buildAffordanceAt` so the hit-test pipeline gates corner / rotate /\n * anchor affordances on the same chrome ids the renderer uses. */\n getIsVisibleForCanvas?: () => (id: string) => boolean;\n /** Live RuleCtx factory. Threaded into `useGestureDispatcher` so the\n * dispatcher's eligibility filter sees the same mode/capabilities/selection\n * view of the world that chrome-caps does. */\n getRuleCtx?: () => RuleCtx | undefined;\n /** `DeviceProfile.targetScale`, so the affordance grab zones resolve to the\n * same sizes the chrome paints at. */\n targetScale?: number;\n /** Consumer override for the corner-handle grab radius\n * (`selectTool.handleHitRadius`). Undefined takes the device-scaled size. */\n handleHitRadius?: number;\n /** The rotate badge the selection overlay paints, grabbable where drawn. */\n rotationBadge?: { distancePx: number; sizePx: number } | null;\n /** Receives the affordances this mounter hit-tests, for the slops overlay. */\n chromeAffordancesRef?: React.MutableRefObject<readonly Affordance[]>;\n /** Fires on every synthesized double click, in world coords. Backs the\n * `onDoubleClick` prop — see the option's doc on\n * `UseGestureDispatcherOptions` for why it's an observer, not a binding. */\n onDoubleClick?: (world: { x: number; y: number }) => void;\n /** Fires after every synthesized click. Backs the `onClick` prop. */\n onClick?: (world: { x: number; y: number }) => void;\n /** Backs `<SceneCanvas longPress>`. */\n longPress?: SceneCanvasLongPress;\n}) {\n const registry = useActionsRegistry();\n const depRegistry = useDepRegistry();\n const viewRegistry = useOptionalViewRegistry();\n const entriesById = useMemo<ReadonlyMap<string, Contribution>>(() => {\n const m = new Map<string, Contribution>();\n for (const [id, tool] of Object.entries(tools.registry)) {\n m.set(id, tool);\n }\n for (const entry of contributions) m.set(entry.id, entry);\n // Ambient entries too — their bindings assemble at ambient scope, and the\n // dispatcher resolves them through this same map.\n for (const entry of tools.ambient) m.set(entry.id, entry);\n return m;\n }, [tools.registry, tools.ambient, contributions]);\n\n\n // Stable refs for the optional thunk inputs so the thunks themselves are\n // stable function identities across renders (no need to pass them as deps).\n const pickEveryRef = useLatest(pickEvery);\n const pickBestRef = useLatest(pickBest);\n const kindOfNodeRef = useLatest(kindOfNode);\n\n // `getAnchorState` thunk for `buildAffordanceAt` — reads the live\n // `editAnchors` dep from the registry at call time.\n const depRegistryRef = useLatest(depRegistry);\n const planeOfNodeRef = useLatest(planeOfNode);\n const getAnchorState = useMemo(() => anchorStateFrom(\n () => depRegistryRef.current,\n (id, path) => pathFromPlane(path, planeOfNodeRef.current?.(id) ?? null),\n ), [depRegistryRef, planeOfNodeRef]);\n\n // Build the `affordanceAt` thunk. Takes world coords and delegates to\n // `buildAffordanceAt` for handle hit-testing.\n const affordances = useMemo(() => chromeAffordances({\n ...(targetScale !== undefined ? { targetScale } : {}),\n ...(handleHitRadius !== undefined ? { handleHitRadius } : {}),\n rotationBadge,\n getAnchorState,\n }), [targetScale, handleHitRadius, rotationBadge, getAnchorState]);\n useInsertionEffect(() => {\n if (chromeAffordancesRef) chromeAffordancesRef.current = affordances;\n });\n const affordanceAt = useMemo(() => {\n if (!selectionRef || !boundsOf || !viewRef) return undefined;\n return buildAffordanceAt({\n // The canvas's own view chrome, built once by its helpers — not a\n // second construction here that has to agree with the painted one.\n getChromeState: () => viewRegistry?.surface()?.chromeState() ?? EMPTY_CHROME_STATE,\n // Radii are declared in screen pixels and converted against this view.\n getView: () => viewRef.current ?? { x: 0, y: 0, scale: { x: 1, y: 1 } },\n affordances,\n // Chrome-caps resolver: keep the affordance hit-test in sync with what\n // the renderer is actually painting. Without this, a click on a (no\n // longer visible) resize handle position still classifies as a resize\n // handle — e.g. an anchor drag in path-edit mode resizes the path's\n // bounding box instead of moving the anchor.\n ...(getIsVisibleForCanvas ? { getIsVisible: () => getIsVisibleForCanvas() } : {}),\n });\n }, [selectionRef, boundsOf, viewRef, affordances, getIsVisibleForCanvas, viewRegistry]);\n\n // Build the `classifyTarget` thunk. Takes world coords and delegates to\n // `buildClassifyTarget`.\n const classifyTarget = useMemo(() => {\n if (!selectionRef || !pickEvery || !viewRef) return undefined;\n return buildClassifyTarget(\n () => selectionRef.current?.current ?? [],\n // Use the select tool's own topmost-hit resolution (`pickTopMostHit`,\n // which collapses parent/child) so a child body is classified by ITS\n // OWN selection — not its parent's.\n (wx: number, wy: number) => {\n if (pickBestRef.current) return pickBestRef.current(wx, wy);\n const ids = pickEveryRef.current?.(wx, wy) ?? [];\n return ids.length > 0 ? ids[ids.length - 1] : null;\n },\n // Node kind comes from the routing trait — the same classifier that\n // names `Hit.kind` — so `target: 'kind:text'` on a binding speaks the\n // vocabulary the consumer already declared in `routing`, rather than a\n // second one invented for bindings. `routing={[]}` opts out and leaves\n // every `kind:` target unmatchable.\n (id: string) => kindOfNodeRef.current?.(id),\n );\n }, [selectionRef, pickEvery, viewRef, pickBestRef, pickEveryRef, kindOfNodeRef]);\n\n // Through the handle, so a `clientToWorld` override on the canvas applies.\n const clientToWorld = useCallback((clientX: number, clientY: number): { x: number; y: number } => {\n const api = canvasApiRef.current;\n const [x, y] = api ? api.clientToWorld(clientX, clientY) : [clientX, clientY];\n const world = { x, y };\n traceConversion(clientX, clientY, api ? canvasRef.current : null, viewRef?.current, world);\n return world;\n }, [canvasRef, canvasApiRef, viewRef]);\n\n const affordanceWithLayers = useMemo(() => {\n // Note this is NOT gated on `affordanceAt` being built: registered layers\n // produce affordances of their own, and a consumer with no selection\n // chrome (a canvas that is nothing but a HUD, say) still needs those.\n return (worldPoint: { x: number; y: number }) => {\n // Registered layers first: they draw on top of the kit's own chrome, so\n // they get first refusal on the point. A hit becomes an `AffordanceHit`\n // whose kind names the layer, carrying whatever the layer's hit-test\n // resolved — which is how `@weasel-js/hud` routes a press on one of its\n // widgets to its own action instead of the active tool.\n const extra = canvasApiRef.current?.hitTestExtras?.(worldPoint.x, worldPoint.y);\n if (extra) return layerAffordance(extra.layerId, extra.hit);\n return affordanceAt ? affordanceAt(worldPoint) : null;\n };\n }, [affordanceAt, canvasApiRef]);\n\n // Stable callback that asks the canvas to redraw. Reads via ref so the\n // identity stays stable while the underlying API binds after mount.\n const requestRedraw = useCallback(() => {\n canvasApiRef.current?.requestRedraw?.();\n }, [canvasApiRef]);\n\n // The painted tier's channel, read live for the same reason — the handle it\n // lives on binds after mount.\n const paintedCursor = useCallback(() => canvasApiRef.current?.paintedCursor, [canvasApiRef]);\n const cursorSink = useCallback(() => canvasApiRef.current?.cursorSink, [canvasApiRef]);\n\n // The pending long-press, published as the `longPress` dep for feedback.\n const [longPressState] = useState(createLongPressStore);\n const longPress = useMemo(() => ({\n state: longPressState,\n ...(longPressDuration !== undefined ? { duration: longPressDuration } : {}),\n ...(longPressHaptics !== undefined ? { haptics: longPressHaptics } : {}),\n }), [longPressState, longPressDuration, longPressHaptics]);\n\n // Input routing to registered views. Rebuilt per event from the registry, so\n // a view that mounts or moves mid-session is routable on the next event; with\n // nothing registered every point resolves to the canvas, as before.\n const views = useMemo(() => {\n if (!viewRegistry) return undefined;\n return {\n targets: () => viewRegistry.list().map((r) => ({ id: r.id, ...r.target })),\n resolver: viewRegistry.resolver,\n };\n }, [viewRegistry]);\n\n // Hover cursors live in `useGestureDispatcher`'s hover-cursor pump:\n // affordance hits carry `AffordanceHit.cursor` (set by `buildAffordanceAt`),\n // and everything else is predicted via `Dispatcher.resolveOnly` +\n // `Action.cursor`. Nothing SceneCanvas-specific remains here.\n useGestureDispatcher({\n canvasRef,\n actions: registry!,\n entriesById,\n enabled,\n keyboard,\n claimKeys,\n affordanceAt: affordanceWithLayers,\n classifyTarget,\n dispatcher,\n clientToWorld,\n requestRedraw,\n paintedCursor,\n cursorSink,\n getRuleCtx,\n onClick,\n onDoubleClick,\n longPress,\n ...(views ? { views } : {}),\n });\n useDepSource('longPress', () => longPressState);\n return null;\n}\n"],"mappings":"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"}
|
|
@@ -1,51 +1,48 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import {
|
|
3
|
-
import {
|
|
4
|
-
import {
|
|
5
|
-
import {
|
|
1
|
+
import { useOptionalViewRegistry as e } from "../viewRegistry.js";
|
|
2
|
+
import { worldPointAt as t } from "./worldPointAt.js";
|
|
3
|
+
import { useEffect as n } from "react";
|
|
4
|
+
import { heldPointers as r } from "@weasel-js/gestures";
|
|
5
|
+
import { PointerContextProvider as i, usePointerContext as a } from "@weasel-js/routing/react";
|
|
6
|
+
import { Fragment as o, jsx as s } from "react/jsx-runtime";
|
|
6
7
|
//#region src/canvas/SceneCanvas/PointerProviderIfRoot.tsx
|
|
7
|
-
function
|
|
8
|
-
return
|
|
8
|
+
function c({ children: e }) {
|
|
9
|
+
return a() ? /* @__PURE__ */ s(o, { children: e }) : /* @__PURE__ */ s(i, { children: e });
|
|
9
10
|
}
|
|
10
|
-
function
|
|
11
|
-
let
|
|
12
|
-
return
|
|
13
|
-
if (!
|
|
14
|
-
let
|
|
15
|
-
if (!
|
|
16
|
-
let
|
|
17
|
-
let
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
x: 1,
|
|
22
|
-
y: 1
|
|
23
|
-
}
|
|
24
|
-
});
|
|
25
|
-
a.set({
|
|
11
|
+
function l({ canvasRef: i, canvasApiRef: o }) {
|
|
12
|
+
let s = a(), c = e();
|
|
13
|
+
return n(() => {
|
|
14
|
+
if (!s) return;
|
|
15
|
+
let e = i.current;
|
|
16
|
+
if (!e) return;
|
|
17
|
+
let n = (e, n, r) => {
|
|
18
|
+
let i = o.current;
|
|
19
|
+
if (!i) return;
|
|
20
|
+
let a = c?.resolver.at(e, n, r), [l, u] = t(i, a, n, r);
|
|
21
|
+
s.set({
|
|
26
22
|
worldX: l,
|
|
27
23
|
worldY: u,
|
|
28
|
-
viewId:
|
|
24
|
+
viewId: a?.id ?? null
|
|
29
25
|
});
|
|
30
|
-
},
|
|
31
|
-
if (
|
|
32
|
-
|
|
26
|
+
}, a = (e) => n(e.pointerId, e.clientX, e.clientY), l = r(e), u = (e) => {
|
|
27
|
+
if (l.count() > 0) {
|
|
28
|
+
n(e.pointerId, e.clientX, e.clientY);
|
|
33
29
|
return;
|
|
34
30
|
}
|
|
35
|
-
|
|
36
|
-
},
|
|
37
|
-
|
|
31
|
+
s.set(null);
|
|
32
|
+
}, d = (t) => {
|
|
33
|
+
t.target !== e && l.count() !== 0 && n(t.pointerId, t.clientX, t.clientY);
|
|
38
34
|
};
|
|
39
|
-
return
|
|
40
|
-
|
|
35
|
+
return e.addEventListener("pointermove", a), e.addEventListener("pointerleave", u), document.addEventListener("pointermove", d), () => {
|
|
36
|
+
e.removeEventListener("pointermove", a), e.removeEventListener("pointerleave", u), document.removeEventListener("pointermove", d), l.release();
|
|
41
37
|
};
|
|
42
38
|
}, [
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
o
|
|
39
|
+
s,
|
|
40
|
+
i,
|
|
41
|
+
o,
|
|
42
|
+
c
|
|
46
43
|
]), null;
|
|
47
44
|
}
|
|
48
45
|
//#endregion
|
|
49
|
-
export {
|
|
46
|
+
export { c as PointerProviderIfRoot, l as PointerPublisher };
|
|
50
47
|
|
|
51
48
|
//# sourceMappingURL=PointerProviderIfRoot.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"PointerProviderIfRoot.js","names":["_Fragment","PointerProviderIfRoot","usePointerContext","Fragment","PointerContextProvider","PointerPublisher","ctx","registry","useOptionalViewRegistry","useEffect","el","canvasRef","publish","target","pointerId","clientX","clientY","
|
|
1
|
+
{"version":3,"file":"PointerProviderIfRoot.js","names":["_Fragment","PointerProviderIfRoot","usePointerContext","Fragment","PointerContextProvider","PointerPublisher","ctx","registry","useOptionalViewRegistry","useEffect","el","canvasRef","publish","api","canvasApiRef","target","pointerId","clientX","clientY","worldX","worldY","worldPointAt","onMove","held","heldPointers","onLeave","onDocMove","e"],"sources":["../../../src/canvas/SceneCanvas/PointerProviderIfRoot.tsx"],"sourcesContent":["/**\n * Conditional `<PointerContextProvider>` wrapper. Mounts a provider only\n * when no parent provider is in scope — otherwise renders children unwrapped\n * so SceneCanvas defers to the host's existing scope.\n *\n * Pairs with `<PointerPublisher>` which attaches native pointermove/leave\n * listeners to the canvas element and writes world-space coords into the\n * surrounding context's `pointerRef`.\n */\nimport { useEffect, type MutableRefObject, type ReactNode, type RefObject } from 'react';\nimport { heldPointers } from '@weasel-js/gestures';\nimport { PointerContextProvider, usePointerContext } from '@weasel-js/routing/react';\nimport type { CanvasExtensionApi } from '../canvasExtension';\nimport { useOptionalViewRegistry } from '../viewRegistry';\nimport { worldPointAt } from './worldPointAt';\n\n/** Mount a `<PointerContextProvider>` only when none is already in scope. */\nexport function PointerProviderIfRoot({ children }: { children: ReactNode }) {\n const parent = usePointerContext();\n if (parent) return <>{children}</>;\n return <PointerContextProvider>{children}</PointerContextProvider>;\n}\n\n/**\n * Attaches native `pointermove` / `pointerleave` listeners to the supplied\n * canvas element and publishes the world-space pointer coordinates into the\n * surrounding `<PointerContextProvider>`. Renders nothing. No-op when no\n * provider is in scope (matches \"publish if anyone is listening\").\n *\n * Lives inside the provider scope so it sees both consumer-mounted providers\n * and SceneCanvas's auto-mounted one.\n */\nexport function PointerPublisher({\n canvasRef,\n canvasApiRef,\n}: {\n canvasRef: MutableRefObject<HTMLElement | null>;\n canvasApiRef: RefObject<CanvasExtensionApi | null>;\n}) {\n const ctx = usePointerContext();\n const registry = useOptionalViewRegistry();\n useEffect(() => {\n if (!ctx) return;\n const el = canvasRef.current;\n if (!el) return;\n // The surface's one resolver answers which camera a client point belongs\n // to, so paste-at-pointer lands in the panel the cursor is over. With no\n // views declared it answers the canvas's own camera and rect.\n const publish = (pointerId: number | null, clientX: number, clientY: number): void => {\n const api = canvasApiRef.current;\n if (!api) return;\n const target = registry?.resolver.at(pointerId, clientX, clientY);\n const [worldX, worldY] = worldPointAt(api, target, clientX, clientY);\n ctx.set({ worldX, worldY, viewId: target?.id ?? null });\n };\n const onMove = (e: PointerEvent): void => publish(e.pointerId, e.clientX, e.clientY);\n const held = heldPointers(el);\n const onLeave = (e: PointerEvent): void => {\n // A pointer held on the canvas is still working it once it leaves the\n // rect, and what it drives needs the latest world position.\n if (held.count() > 0) {\n publish(e.pointerId, e.clientX, e.clientY);\n return;\n }\n ctx.set(null);\n };\n // A drag that began on the canvas keeps reporting once it is off it; the\n // canvas's own listener has the moves that still target it.\n const onDocMove = (e: PointerEvent): void => {\n if (e.target === el) return;\n if (held.count() === 0) return;\n publish(e.pointerId, e.clientX, e.clientY);\n };\n el.addEventListener('pointermove', onMove);\n el.addEventListener('pointerleave', onLeave);\n document.addEventListener('pointermove', onDocMove);\n return () => {\n el.removeEventListener('pointermove', onMove);\n el.removeEventListener('pointerleave', onLeave);\n document.removeEventListener('pointermove', onDocMove);\n held.release();\n };\n // canvasRef + registry + ctx identity are all stable across the lifetime\n // of the surrounding provider; effect runs once per mount.\n }, [ctx, canvasRef, canvasApiRef, registry]);\n return null;\n}\n"],"mappings":";;;;;;;AAiBA,SAAgBC,EAAsB,EAAE,eAAqC;CAG3E,OAFeC,EACX,IAAe,kBAAAF,GAAA,EAAG,YAAW,CAAA,IAC1B,kBAACI,GAAD,EAAyB,YAAiC,CAAA;AACnE;AAWA,SAAgBC,EAAiB,EAC/B,cACA,mBAIC;CACD,IAAMC,IAAMJ,EAAkB,GACxBK,IAAWC,EAAwB;CA6CzC,OA5CAC,QAAgB;EACd,IAAI,CAACH,GAAK;EACV,IAAMI,IAAKC,EAAU;EACrB,IAAI,CAACD,GAAI;EAIT,IAAME,KAAW,GAA0B,GAAiB,MAA0B;GACpF,IAAMC,IAAMC,EAAa;GACzB,IAAI,CAACD,GAAK;GACV,IAAME,IAASR,GAAU,SAAS,GAAGS,GAAWC,GAASC,CAAO,GAC1D,CAACC,GAAQC,KAAUC,EAAaR,GAAKE,GAAQE,GAASC,CAAO;GACnE,EAAI,IAAI;IAAE;IAAQ;IAAQ,QAAQH,GAAQ,MAAM;GAAK,CAAC;EACxD,GACMO,KAAU,MAA0BV,EAAQ,EAAE,WAAW,EAAE,SAAS,EAAE,OAAO,GAC7EW,IAAOC,EAAad,CAAE,GACtBe,KAAW,MAA0B;GAGzC,IAAIF,EAAK,MAAM,IAAI,GAAG;IACpB,EAAQ,EAAE,WAAW,EAAE,SAAS,EAAE,OAAO;IACzC;GACF;GACA,EAAI,IAAI,IAAI;EACd,GAGMG,KAAa,MAA0B;GAC3C,AAAIC,EAAE,WAAWjB,KACba,EAAK,MAAM,MAAM,KACrBX,EAAQe,EAAE,WAAWA,EAAE,SAASA,EAAE,OAAO;EAC3C;EAIA,OAHAjB,EAAG,iBAAiB,eAAeY,CAAM,GACzCZ,EAAG,iBAAiB,gBAAgBe,CAAO,GAC3C,SAAS,iBAAiB,eAAeC,CAAS,SACrC;GAIX,AAHAhB,EAAG,oBAAoB,eAAeY,CAAM,GAC5CZ,EAAG,oBAAoB,gBAAgBe,CAAO,GAC9C,SAAS,oBAAoB,eAAeC,CAAS,GACrDH,EAAK,QAAQ;EACf;CAGF,GAAG;EAACjB;EAAKK;EAAWG;EAAcP;CAAQ,CAAC,GACpC;AACT"}
|
|
@@ -1,65 +1,53 @@
|
|
|
1
1
|
import { useDecayLoop as e } from "../../core/viewport/useDecayLoop.js";
|
|
2
|
-
import {
|
|
3
|
-
import {
|
|
4
|
-
import {
|
|
5
|
-
import {
|
|
6
|
-
import {
|
|
7
|
-
import {
|
|
8
|
-
import {
|
|
9
|
-
import {
|
|
10
|
-
import {
|
|
11
|
-
import {
|
|
12
|
-
import {
|
|
13
|
-
import {
|
|
14
|
-
import {
|
|
15
|
-
import {
|
|
16
|
-
import {
|
|
17
|
-
import {
|
|
18
|
-
import {
|
|
19
|
-
import {
|
|
20
|
-
import {
|
|
21
|
-
import {
|
|
22
|
-
import {
|
|
23
|
-
import {
|
|
24
|
-
import { useEffect as y } from "react";
|
|
25
|
-
import { useActionsRegistry as b, useDepSource as x } from "@weasel-js/routing/react";
|
|
2
|
+
import { useStandardActions as t } from "../../interactions/actions/useStandardActions.js";
|
|
3
|
+
import { usePoseDescriptorDepSource as n } from "../deps/poseDescriptor.js";
|
|
4
|
+
import { useSliceDepSource as r } from "../deps/slice.js";
|
|
5
|
+
import { useViewDepSource as i } from "../deps/view.js";
|
|
6
|
+
import { useAreaSelectDepSource as a } from "../deps/areaSelect.js";
|
|
7
|
+
import { useNodeAtPointDepSource as o } from "../deps/nodeAtPoint.js";
|
|
8
|
+
import { useLassoSelectDepSource as s } from "../deps/lassoSelect.js";
|
|
9
|
+
import { useTextEditDepSource as c } from "../deps/textEdit.js";
|
|
10
|
+
import { useEditAnchorsDepSource as l } from "../deps/editAnchors.js";
|
|
11
|
+
import { useInsertDepSource as ee } from "../deps/insert.js";
|
|
12
|
+
import { useSnapDepSource as u } from "../deps/snap.js";
|
|
13
|
+
import { useDebugDepSource as d } from "../deps/debug.js";
|
|
14
|
+
import { useDepChangeNotices as f } from "../deps/changes.js";
|
|
15
|
+
import { useDispatcherDepSource as p } from "../deps/dispatcher.js";
|
|
16
|
+
import { useLayoutDepSource as te } from "../deps/layout.js";
|
|
17
|
+
import { useIngestionDepSource as ne } from "../deps/ingestion.js";
|
|
18
|
+
import { GeometryProjectionRegistrar as re, ResizePolicyRegistrar as m } from "./poseRegistrars.js";
|
|
19
|
+
import { useActionsPropResolver as h } from "./useActionsPropResolver.js";
|
|
20
|
+
import { useActionTunings as g } from "./useActionTunings.js";
|
|
21
|
+
import { useViewportActions as _ } from "./useViewportActions.js";
|
|
22
|
+
import { useEffect as v } from "react";
|
|
23
|
+
import { useActionsRegistry as y, useDepSource as b, usePointerContext as x } from "@weasel-js/routing/react";
|
|
26
24
|
import { Fragment as S, jsx as C, jsxs as w } from "react/jsx-runtime";
|
|
27
25
|
//#region src/canvas/SceneCanvas/StandardActionsRegistrar.tsx
|
|
28
|
-
function T({ selection: T, scene: E, adapter: D, actions: O,
|
|
29
|
-
let Q =
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
}), [Q, Z]), y(() => {
|
|
33
|
-
if (Q) return Q.setDispatcher(F);
|
|
34
|
-
}, [Q, F]), y(() => {
|
|
35
|
-
if (Q) return I.current = (e) => Q.list().find((t) => t.id === e), () => {
|
|
36
|
-
I.current = null;
|
|
37
|
-
};
|
|
26
|
+
function T({ selection: T, scene: E, adapter: D, actions: O, tune: k, excludeActions: A, currentViewRef: j, onViewChange: M, resizeOptions: N, poseDescriptor: P, geometryProjection: F, dispatcher: I, pickEvery: L, layerIsPainted: R, alphaOf: z, viewportPanEnabled: B, viewportZoom: V, viewportPinchZoom: H, viewportRecenter: U, viewAnimation: W, editAnchorsExternalState: G, layoutDropTarget: K, reflowTransition: q, insertNodeFactories: J, insertPaint: Y, snapPoint: X, canvasRef: Z, canvasApiRef: ie, ingestionResolveSrc: ae, ingestionSvg: oe, ingestionClipboard: se }) {
|
|
27
|
+
let Q = y();
|
|
28
|
+
v(() => {
|
|
29
|
+
if (Q) return Q.setDispatcher(I);
|
|
38
30
|
}, [Q, I]);
|
|
39
|
-
let
|
|
40
|
-
let e =
|
|
31
|
+
let ce = e(), $ = i(j, M, U, () => {
|
|
32
|
+
let e = Z.current;
|
|
41
33
|
return e ? {
|
|
42
34
|
width: e.clientWidth,
|
|
43
35
|
height: e.clientHeight
|
|
44
36
|
} : null;
|
|
45
|
-
},
|
|
46
|
-
|
|
37
|
+
}, W, ce, R);
|
|
38
|
+
t({
|
|
47
39
|
selection: T,
|
|
48
40
|
scene: E,
|
|
49
41
|
view: $,
|
|
50
42
|
history: E.history,
|
|
51
|
-
exclude:
|
|
52
|
-
}),
|
|
53
|
-
let
|
|
54
|
-
return
|
|
55
|
-
pan:
|
|
56
|
-
zoom:
|
|
57
|
-
pinchZoom:
|
|
58
|
-
}),
|
|
59
|
-
layouts: q,
|
|
60
|
-
poseDescriptor: N,
|
|
61
|
-
poseComposition: K
|
|
62
|
-
}), p(E, D, se, ce), a(E, T, D, K, N), m(le), h(X), g(E, T.current), te(Y, () => A.current, ue, de, fe), u(E, T, N, K, R), d(E), f(E, T, D, W, { anchorEditingAllowed: G }), _(F), r(N), i(K), ie(O, k.join("|")), /* @__PURE__ */ w(S, { children: [M ? /* @__PURE__ */ C(re, { options: M }) : null, P ? /* @__PURE__ */ C(ne, { projection: P }) : null] });
|
|
43
|
+
exclude: A
|
|
44
|
+
}), b("rootView", () => $);
|
|
45
|
+
let le = x();
|
|
46
|
+
return b("pointer", () => le ?? void 0), _({
|
|
47
|
+
pan: B,
|
|
48
|
+
zoom: V,
|
|
49
|
+
pinchZoom: H
|
|
50
|
+
}), a(E, T, P, z), o(L), te(E, K, q), ee(E, D, J, Y), r(E, T, D, P), u(X), d(ie), f(E, T.current), ne(Z, () => j.current, ae, oe, se), s(E, T, P, z), c(E), l(E, T, D, G), p(I), n(P), h(O, A.join("|")), g(k), /* @__PURE__ */ w(S, { children: [N ? /* @__PURE__ */ C(m, { options: N }) : null, F ? /* @__PURE__ */ C(re, { projection: F }) : null] });
|
|
63
51
|
}
|
|
64
52
|
//#endregion
|
|
65
53
|
export { T as StandardActionsRegistrar };
|