@weasel-js/core 1.9.3 → 1.10.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +1106 -0
- package/README.md +7 -5
- package/dist/WeaselProvider.js +5 -7
- package/dist/WeaselProvider.js.map +1 -1
- package/dist/affordances/composeAffordanceLayer.js +91 -93
- package/dist/affordances/composeAffordanceLayer.js.map +1 -1
- package/dist/affordances/cornerResize.js +27 -18
- package/dist/affordances/cornerResize.js.map +1 -1
- package/dist/affordances/hitAffordanceRegions.js +65 -104
- package/dist/affordances/hitAffordanceRegions.js.map +1 -1
- package/dist/affordances/pathAnchors.js.map +1 -1
- package/dist/affordances/rotationHandle.js +22 -21
- package/dist/affordances/rotationHandle.js.map +1 -1
- package/dist/animation/behaviors/coast.js +21 -0
- package/dist/animation/behaviors/coast.js.map +1 -0
- package/dist/animation/behaviors/coastByWrite.js +107 -0
- package/dist/animation/behaviors/coastByWrite.js.map +1 -0
- package/dist/animation/behaviors/coastOnTargets.js +94 -0
- package/dist/animation/behaviors/coastOnTargets.js.map +1 -0
- package/dist/animation/behaviors/momentum.js +38 -88
- package/dist/animation/behaviors/momentum.js.map +1 -1
- package/dist/animation/clipTargets.js +12 -0
- package/dist/animation/clipTargets.js.map +1 -0
- package/dist/animation/index.js +15 -20
- package/dist/animation/poseHelpers.js +112 -33
- package/dist/animation/poseHelpers.js.map +1 -1
- package/dist/animation/poseTarget.js +115 -0
- package/dist/animation/poseTarget.js.map +1 -0
- package/dist/animation/reflow.js +113 -83
- package/dist/animation/reflow.js.map +1 -1
- package/dist/animation/rewind.js +66 -0
- package/dist/animation/rewind.js.map +1 -0
- package/dist/animation/rig/bindRig.js +85 -53
- package/dist/animation/rig/bindRig.js.map +1 -1
- package/dist/animation/rig/rigNode.js +93 -0
- package/dist/animation/rig/rigNode.js.map +1 -0
- package/dist/animation/rig/rigSeat.js +26 -0
- package/dist/animation/rig/rigSeat.js.map +1 -0
- package/dist/animation/rig/skinBinding.js +56 -0
- package/dist/animation/rig/skinBinding.js.map +1 -0
- package/dist/animation/rig/useRig.js +31 -16
- package/dist/animation/rig/useRig.js.map +1 -1
- package/dist/animation/wrappers/animateLifecycle.js +32 -24
- package/dist/animation/wrappers/animateLifecycle.js.map +1 -1
- package/dist/animation/wrappers/animateOnSetPose.js +31 -29
- package/dist/animation/wrappers/animateOnSetPose.js.map +1 -1
- package/dist/animation/wrappers/instantPose.js +13 -0
- package/dist/animation/wrappers/instantPose.js.map +1 -0
- package/dist/animation/writtenPoseTarget.js +33 -0
- package/dist/animation/writtenPoseTarget.js.map +1 -0
- package/dist/{autoPoseDescriptor-vCdt55xm.d.ts → autoPoseDescriptor-DHg5KqaJ.d.ts} +1 -1
- package/dist/barrel/canvas.js +31 -0
- package/dist/barrel/chrome.js +16 -0
- package/dist/barrel/input.js +18 -0
- package/dist/barrel/interactions.js +38 -0
- package/dist/barrel/paint.js +11 -0
- package/dist/barrel/paths.js +12 -0
- package/dist/barrel/renderer.js +14 -0
- package/dist/barrel/routing.js +57 -0
- package/dist/barrel/scene.js +37 -0
- package/dist/barrel/text.js +9 -0
- package/dist/barrel/viewport.js +42 -0
- package/dist/canvas/Canvas.js +280 -559
- package/dist/canvas/Canvas.js.map +1 -1
- package/dist/canvas/CanvasView.js +147 -167
- package/dist/canvas/CanvasView.js.map +1 -1
- package/dist/canvas/CursorCoordsHud.js +53 -49
- package/dist/canvas/CursorCoordsHud.js.map +1 -1
- package/dist/canvas/DrawCanvas.js +40 -51
- package/dist/canvas/DrawCanvas.js.map +1 -1
- package/dist/canvas/ModalityHud.js.map +1 -1
- package/dist/canvas/NodeShape.js +55 -374
- package/dist/canvas/NodeShape.js.map +1 -1
- package/dist/canvas/PickHud.js +50 -47
- package/dist/canvas/PickHud.js.map +1 -1
- package/dist/canvas/SceneCanvas/DevHuds.js +40 -0
- package/dist/canvas/SceneCanvas/DevHuds.js.map +1 -0
- package/dist/canvas/SceneCanvas/GestureDispatcherMounter.js +126 -0
- package/dist/canvas/SceneCanvas/GestureDispatcherMounter.js.map +1 -0
- package/dist/canvas/SceneCanvas/PointerProviderIfRoot.js +27 -31
- package/dist/canvas/SceneCanvas/PointerProviderIfRoot.js.map +1 -1
- package/dist/canvas/SceneCanvas/StandardActionsRegistrar.js +64 -0
- package/dist/canvas/SceneCanvas/StandardActionsRegistrar.js.map +1 -0
- package/dist/canvas/SceneCanvas/ToolKeybindingsMounter.js +16 -0
- package/dist/canvas/SceneCanvas/ToolKeybindingsMounter.js.map +1 -0
- package/dist/canvas/SceneCanvas/coordTrace.js +46 -0
- package/dist/canvas/SceneCanvas/coordTrace.js.map +1 -0
- package/dist/canvas/SceneCanvas/defaultNodeProperties.js +138 -85
- package/dist/canvas/SceneCanvas/defaultNodeProperties.js.map +1 -1
- package/dist/canvas/SceneCanvas/defaultNodeRouting.js +9 -8
- package/dist/canvas/SceneCanvas/defaultNodeRouting.js.map +1 -1
- package/dist/canvas/SceneCanvas/dispatcherGestureBounds.js.map +1 -1
- package/dist/canvas/SceneCanvas/features.js +74 -43
- package/dist/canvas/SceneCanvas/features.js.map +1 -1
- package/dist/canvas/SceneCanvas/isDev.js +12 -0
- package/dist/canvas/SceneCanvas/isDev.js.map +1 -0
- package/dist/canvas/SceneCanvas/poseGeometry.js +31 -34
- package/dist/canvas/SceneCanvas/poseGeometry.js.map +1 -1
- package/dist/canvas/SceneCanvas/poseRegistrars.js +13 -0
- package/dist/canvas/SceneCanvas/poseRegistrars.js.map +1 -0
- package/dist/canvas/SceneCanvas/props.js +39 -0
- package/dist/canvas/SceneCanvas/props.js.map +1 -0
- package/dist/canvas/SceneCanvas/toolRegistry.js +23 -0
- package/dist/canvas/SceneCanvas/toolRegistry.js.map +1 -0
- package/dist/canvas/SceneCanvas/useActionsPropResolver.js +6 -1
- package/dist/canvas/SceneCanvas/useActionsPropResolver.js.map +1 -1
- package/dist/canvas/SceneCanvas/useBuiltinShapeTools.js +21 -62
- package/dist/canvas/SceneCanvas/useBuiltinShapeTools.js.map +1 -1
- package/dist/canvas/SceneCanvas/useBuiltinTools.js +21 -0
- package/dist/canvas/SceneCanvas/useBuiltinTools.js.map +1 -0
- package/dist/canvas/SceneCanvas/useCanvasCamera.js +38 -0
- package/dist/canvas/SceneCanvas/useCanvasCamera.js.map +1 -0
- package/dist/canvas/SceneCanvas/useCanvasDispatcher.js +20 -0
- package/dist/canvas/SceneCanvas/useCanvasDispatcher.js.map +1 -0
- package/dist/canvas/SceneCanvas/useCanvasSelection.js +16 -0
- package/dist/canvas/SceneCanvas/useCanvasSelection.js.map +1 -0
- package/dist/canvas/SceneCanvas/useCanvasTools.js +67 -0
- package/dist/canvas/SceneCanvas/useCanvasTools.js.map +1 -0
- package/dist/canvas/SceneCanvas/useDispatcherOverlayLayer.js +29 -29
- package/dist/canvas/SceneCanvas/useDispatcherOverlayLayer.js.map +1 -1
- package/dist/canvas/SceneCanvas/useHeldModifiers.js +20 -0
- package/dist/canvas/SceneCanvas/useHeldModifiers.js.map +1 -0
- package/dist/canvas/SceneCanvas/useNodeAtPoint.js +26 -0
- package/dist/canvas/SceneCanvas/useNodeAtPoint.js.map +1 -0
- package/dist/canvas/SceneCanvas/useNodeKinds.js +26 -0
- package/dist/canvas/SceneCanvas/useNodeKinds.js.map +1 -0
- package/dist/canvas/SceneCanvas/usePreviewGhostLayer.js +48 -48
- package/dist/canvas/SceneCanvas/usePreviewGhostLayer.js.map +1 -1
- package/dist/canvas/SceneCanvas/useSceneCanvasHandle.js +47 -0
- package/dist/canvas/SceneCanvas/useSceneCanvasHandle.js.map +1 -0
- package/dist/canvas/SceneCanvas/useSceneCanvasLayers.js +66 -0
- package/dist/canvas/SceneCanvas/useSceneCanvasLayers.js.map +1 -0
- package/dist/canvas/SceneCanvas/useSceneChrome.js +59 -0
- package/dist/canvas/SceneCanvas/useSceneChrome.js.map +1 -0
- package/dist/canvas/SceneCanvas/useSceneRedrawSources.js +23 -0
- package/dist/canvas/SceneCanvas/useSceneRedrawSources.js.map +1 -0
- package/dist/canvas/SceneCanvas/useSceneSelectTool.js +74 -78
- package/dist/canvas/SceneCanvas/useSceneSelectTool.js.map +1 -1
- package/dist/canvas/SceneCanvas/useSceneSlotLayers.js +37 -0
- package/dist/canvas/SceneCanvas/useSceneSlotLayers.js.map +1 -0
- package/dist/canvas/SceneCanvas/useSelectionOverlayLayer.js +38 -0
- package/dist/canvas/SceneCanvas/useSelectionOverlayLayer.js.map +1 -0
- package/dist/canvas/SceneCanvas/useViewLayerGate.js +20 -0
- package/dist/canvas/SceneCanvas/useViewLayerGate.js.map +1 -0
- package/dist/canvas/SceneCanvas/useViewportActions.js +9 -1
- package/dist/canvas/SceneCanvas/useViewportActions.js.map +1 -1
- package/dist/canvas/SceneCanvas/worldPointAt.js +9 -0
- package/dist/canvas/SceneCanvas/worldPointAt.js.map +1 -0
- package/dist/canvas/SceneCanvas.js +311 -969
- package/dist/canvas/SceneCanvas.js.map +1 -1
- package/dist/canvas/SceneViewCanvas.js +42 -46
- package/dist/canvas/SceneViewCanvas.js.map +1 -1
- package/dist/canvas/adapterDerivedPath.js +26 -0
- package/dist/canvas/adapterDerivedPath.js.map +1 -0
- package/dist/canvas/affordanceAt.js +11 -1
- package/dist/canvas/affordanceAt.js.map +1 -1
- package/dist/canvas/buildSceneLayer.js +111 -0
- package/dist/canvas/buildSceneLayer.js.map +1 -0
- package/dist/canvas/buildSceneTree.js +16 -19
- package/dist/canvas/buildSceneTree.js.map +1 -1
- package/dist/canvas/canvasRenderer.js +67 -55
- package/dist/canvas/canvasRenderer.js.map +1 -1
- package/dist/canvas/colorOverrides.js.map +1 -1
- package/dist/canvas/defaultDrawOne.js +12 -12
- package/dist/canvas/defaultDrawOne.js.map +1 -1
- package/dist/canvas/deps/areaSelect.js +4 -4
- package/dist/canvas/deps/areaSelect.js.map +1 -1
- package/dist/canvas/deps/changes.js +13 -0
- package/dist/canvas/deps/changes.js.map +1 -0
- package/dist/canvas/deps/debug.js.map +1 -1
- package/dist/canvas/deps/editAnchors.js +38 -57
- package/dist/canvas/deps/editAnchors.js.map +1 -1
- package/dist/canvas/deps/geometryProjection.js.map +1 -1
- package/dist/canvas/deps/hitTestArea.js +31 -26
- package/dist/canvas/deps/hitTestArea.js.map +1 -1
- package/dist/canvas/deps/insert.js +130 -91
- package/dist/canvas/deps/insert.js.map +1 -1
- package/dist/canvas/deps/lassoSelect.js +5 -5
- package/dist/canvas/deps/lassoSelect.js.map +1 -1
- package/dist/canvas/deps/poseDescriptor.js +1 -1
- package/dist/canvas/deps/poseDescriptor.js.map +1 -1
- package/dist/canvas/deps/resizePolicy.js.map +1 -1
- package/dist/canvas/deps/slice.js +26 -26
- package/dist/canvas/deps/slice.js.map +1 -1
- package/dist/canvas/deps/textEdit.js +6 -5
- package/dist/canvas/deps/textEdit.js.map +1 -1
- package/dist/canvas/deps/view.js.map +1 -1
- package/dist/canvas/derivedPath.js +47 -22
- package/dist/canvas/derivedPath.js.map +1 -1
- package/dist/canvas/drawEnvelope.js +8 -4
- package/dist/canvas/drawEnvelope.js.map +1 -1
- package/dist/canvas/getNodeAtPoint.js +4 -8
- package/dist/canvas/getNodeAtPoint.js.map +1 -1
- package/dist/canvas/hud.module.js +1 -1
- package/dist/canvas/hud.module.js.map +1 -1
- package/dist/canvas/insertPreviewExtent.js.map +1 -1
- package/dist/canvas/kitRequirements.js +2 -2
- package/dist/canvas/kitRequirements.js.map +1 -1
- package/dist/canvas/layerOrder.js +13 -6
- package/dist/canvas/layerOrder.js.map +1 -1
- package/dist/canvas/layerSlots.js +6 -1
- package/dist/canvas/layerSlots.js.map +1 -1
- package/dist/canvas/nodeShapes/derivedPainter.js +34 -0
- package/dist/canvas/nodeShapes/derivedPainter.js.map +1 -0
- package/dist/canvas/nodeShapes/imagePainter.js +87 -0
- package/dist/canvas/nodeShapes/imagePainter.js.map +1 -0
- package/dist/canvas/nodeShapes/memo.js +9 -0
- package/dist/canvas/nodeShapes/memo.js.map +1 -0
- package/dist/canvas/nodeShapes/nodePaint.js +68 -0
- package/dist/canvas/nodeShapes/nodePaint.js.map +1 -0
- package/dist/canvas/nodeShapes/pathPainter.js +39 -0
- package/dist/canvas/nodeShapes/pathPainter.js.map +1 -0
- package/dist/canvas/nodeShapes/poseBox.js +20 -0
- package/dist/canvas/nodeShapes/poseBox.js.map +1 -0
- package/dist/canvas/nodeShapes/rectFallbackPainter.js +38 -0
- package/dist/canvas/nodeShapes/rectFallbackPainter.js.map +1 -0
- package/dist/canvas/nodeShapes/shapePainter.js +72 -0
- package/dist/canvas/nodeShapes/shapePainter.js.map +1 -0
- package/dist/canvas/nodeShapes/textPainter.js +55 -0
- package/dist/canvas/nodeShapes/textPainter.js.map +1 -0
- package/dist/canvas/overlayRoleStrokes.js.map +1 -1
- package/dist/canvas/paintCull.js +11 -14
- package/dist/canvas/paintCull.js.map +1 -1
- package/dist/{features/cursor → canvas}/paintedCursorLayer.js +2 -2
- package/dist/canvas/paintedCursorLayer.js.map +1 -0
- package/dist/canvas/pickWalk.js +59 -68
- package/dist/canvas/pickWalk.js.map +1 -1
- package/dist/canvas/planeClips.js +18 -19
- package/dist/canvas/planeClips.js.map +1 -1
- package/dist/canvas/poseCascade.js +41 -0
- package/dist/canvas/poseCascade.js.map +1 -0
- package/dist/canvas/poseRotation.js +9 -23
- package/dist/canvas/poseRotation.js.map +1 -1
- package/dist/canvas/rasterReadback.js +22 -0
- package/dist/canvas/rasterReadback.js.map +1 -0
- package/dist/canvas/renderDebugSnapshot.js +11 -11
- package/dist/canvas/renderDebugSnapshot.js.map +1 -1
- package/dist/canvas/renderNeeds.js +3 -3
- package/dist/canvas/renderNeeds.js.map +1 -1
- package/dist/canvas/renderSceneToPixels.js +64 -81
- package/dist/canvas/renderSceneToPixels.js.map +1 -1
- package/dist/canvas/sceneAdapter.js +68 -214
- package/dist/canvas/sceneAdapter.js.map +1 -1
- package/dist/canvas/sceneClipboard.js +112 -0
- package/dist/canvas/sceneClipboard.js.map +1 -0
- package/dist/canvas/sceneLayerPaint.js +4 -4
- package/dist/canvas/sceneLayerPaint.js.map +1 -1
- package/dist/canvas/sceneSlotWiring.js.map +1 -1
- package/dist/canvas/sceneViewRender.js +39 -39
- package/dist/canvas/sceneViewRender.js.map +1 -1
- package/dist/canvas/slopsDebugLayer.js +4 -4
- package/dist/canvas/slopsDebugLayer.js.map +1 -1
- package/dist/canvas/surface.module.js +6 -0
- package/dist/canvas/surface.module.js.map +1 -0
- package/dist/canvas/surfaceBox.js +16 -0
- package/dist/canvas/surfaceBox.js.map +1 -0
- package/dist/canvas/useCanvasRenderer.js +26 -6
- package/dist/canvas/useCanvasRenderer.js.map +1 -1
- package/dist/canvas/useCanvasSurface.js +31 -0
- package/dist/canvas/useCanvasSurface.js.map +1 -0
- package/dist/canvas/useCanvasView.js +67 -0
- package/dist/canvas/useCanvasView.js.map +1 -0
- package/dist/canvas/useFrameLoop.js +39 -31
- package/dist/canvas/useFrameLoop.js.map +1 -1
- package/dist/canvas/useHostAnchor.js +35 -33
- package/dist/canvas/useHostAnchor.js.map +1 -1
- package/dist/canvas/useLateContentRedraw.js +8 -8
- package/dist/canvas/useLateContentRedraw.js.map +1 -1
- package/dist/canvas/useSceneLayerList.js +11 -0
- package/dist/canvas/useSceneLayerList.js.map +1 -0
- package/dist/canvas/useSurfaceInput.js +42 -0
- package/dist/canvas/useSurfaceInput.js.map +1 -0
- package/dist/canvas/useToolCursor.js +29 -0
- package/dist/canvas/useToolCursor.js.map +1 -0
- package/dist/canvas/useViewHelpers.js +46 -85
- package/dist/canvas/useViewHelpers.js.map +1 -1
- package/dist/canvas/viewInputs.js.map +1 -1
- package/dist/canvas/viewRegistry.js +25 -27
- package/dist/canvas/viewRegistry.js.map +1 -1
- package/dist/canvas/watchElementMove.js +43 -0
- package/dist/canvas/watchElementMove.js.map +1 -0
- package/dist/canvas/wrapNodeOutput.js.map +1 -1
- package/dist/clipboard.d.ts +16 -19
- package/dist/{types-B_9g6hMM.d.ts → clone-2a5hVbBd.d.ts} +123 -74
- package/dist/clone.d.ts +4 -7
- package/dist/clone.js +0 -2
- package/dist/core/device/index.js +5 -4
- package/dist/core/device/targets.js.map +1 -1
- package/dist/core/device/useDeviceProfile.js +38 -44
- package/dist/core/device/useDeviceProfile.js.map +1 -1
- package/dist/core/device/watchDevicePixelRatio.js +17 -0
- package/dist/core/device/watchDevicePixelRatio.js.map +1 -0
- package/dist/{interactions/actions/resize → core/geometry}/autoPoseDescriptor.js +8 -7
- package/dist/core/geometry/autoPoseDescriptor.js.map +1 -0
- package/dist/core/geometry/pathPoseDescriptor.js +88 -0
- package/dist/core/geometry/pathPoseDescriptor.js.map +1 -0
- package/dist/core/geometry/poseDescriptor.js +68 -19
- package/dist/core/geometry/poseDescriptor.js.map +1 -1
- package/dist/core/geometry/regionHit.js +31 -34
- package/dist/core/geometry/regionHit.js.map +1 -1
- package/dist/core/geometry/targetFrame.js +94 -0
- package/dist/core/geometry/targetFrame.js.map +1 -0
- package/dist/core/geometry/unionBounds.js +30 -29
- package/dist/core/geometry/unionBounds.js.map +1 -1
- package/dist/core/isPlainObject.js +2 -11
- package/dist/core/layers/backgroundFill.js +31 -0
- package/dist/core/layers/backgroundFill.js.map +1 -0
- package/dist/{features/groups → core/layers}/children.js +1 -1
- package/dist/core/layers/children.js.map +1 -0
- package/dist/core/layers/gateLayer.js +13 -0
- package/dist/core/layers/gateLayer.js.map +1 -0
- package/dist/core/layers/layerGroup.js +40 -0
- package/dist/core/layers/layerGroup.js.map +1 -0
- package/dist/core/layers/render.js +50 -76
- package/dist/core/layers/render.js.map +1 -1
- package/dist/core/ops/arrange.js +1 -0
- package/dist/core/ops/arrange.js.map +1 -1
- package/dist/core/ops/create.js +10 -5
- package/dist/core/ops/create.js.map +1 -1
- package/dist/core/ops/createHistory.js +9 -9
- package/dist/core/ops/createHistory.js.map +1 -1
- package/dist/core/ops/delete.js +12 -24
- package/dist/core/ops/delete.js.map +1 -1
- package/dist/core/ops/reorder/index.js +43 -40
- package/dist/core/ops/reorder/index.js.map +1 -1
- package/dist/core/ops/reorder/setChildOrder.js +34 -0
- package/dist/core/ops/reorder/setChildOrder.js.map +1 -0
- package/dist/core/paint/meshKind.js +16 -0
- package/dist/core/paint/meshKind.js.map +1 -0
- package/dist/{features/meshPaint/lazyKind.js → core/paint/meshKindLazy.js} +282 -105
- package/dist/core/paint/meshKindLazy.js.map +1 -0
- package/dist/core/paint/paintKindEntry.js +8 -0
- package/dist/core/paint/paintKindEntry.js.map +1 -0
- package/dist/core/paint/paintKinds.js +144 -0
- package/dist/core/paint/paintKinds.js.map +1 -0
- package/dist/core/paint/registerMesh.js +7 -0
- package/dist/core/paint/registerMesh.js.map +1 -0
- package/dist/core/scene/NodeProperties.js.map +1 -1
- package/dist/core/scene/NodeRouting.js.map +1 -1
- package/dist/core/scene/appliedLog.js +37 -0
- package/dist/core/scene/appliedLog.js.map +1 -0
- package/dist/core/scene/arrivalWindow.js +102 -0
- package/dist/core/scene/arrivalWindow.js.map +1 -0
- package/dist/core/scene/boundOps.js +40 -0
- package/dist/core/scene/boundOps.js.map +1 -0
- package/dist/core/scene/composeFrame.js +9 -6
- package/dist/core/scene/composeFrame.js.map +1 -1
- package/dist/{features/groups → core/scene}/composePose.js +18 -18
- package/dist/core/scene/composePose.js.map +1 -0
- package/dist/core/scene/depMemo.js +31 -6
- package/dist/core/scene/depMemo.js.map +1 -1
- package/dist/core/scene/derivedPath.js +19 -20
- package/dist/core/scene/derivedPath.js.map +1 -1
- package/dist/core/scene/editMode.js +26 -0
- package/dist/core/scene/editMode.js.map +1 -0
- package/dist/core/scene/effectivePose.js +38 -39
- package/dist/core/scene/effectivePose.js.map +1 -1
- package/dist/core/scene/fieldEdits.js +98 -0
- package/dist/core/scene/fieldEdits.js.map +1 -0
- package/dist/core/scene/historyFacade.js +130 -0
- package/dist/core/scene/historyFacade.js.map +1 -0
- package/dist/core/scene/historyForm.js +6 -0
- package/dist/core/scene/historyForm.js.map +1 -0
- package/dist/core/scene/kitOps.js +185 -0
- package/dist/core/scene/kitOps.js.map +1 -0
- package/dist/core/scene/kitRegistry.js.map +1 -1
- package/dist/core/scene/layerStack.js +131 -0
- package/dist/core/scene/layerStack.js.map +1 -0
- package/dist/core/scene/layoutPass.js +58 -59
- package/dist/core/scene/layoutPass.js.map +1 -1
- package/dist/core/scene/lockGuard.js +37 -0
- package/dist/core/scene/lockGuard.js.map +1 -0
- package/dist/{features/groups → core/scene}/nestedHit.js +3 -3
- package/dist/core/scene/nestedHit.js.map +1 -0
- package/dist/core/scene/nodeFnFields.js +10 -11
- package/dist/core/scene/nodeFnFields.js.map +1 -1
- package/dist/core/scene/nodeMemo.js +45 -19
- package/dist/core/scene/nodeMemo.js.map +1 -1
- package/dist/core/scene/nodeStore.js +127 -0
- package/dist/core/scene/nodeStore.js.map +1 -0
- package/dist/core/scene/notifier.js +37 -0
- package/dist/core/scene/notifier.js.map +1 -0
- package/dist/core/scene/opTable.js +50 -0
- package/dist/core/scene/opTable.js.map +1 -0
- package/dist/core/scene/outerOps.js +66 -0
- package/dist/core/scene/outerOps.js.map +1 -0
- package/dist/core/scene/poseFeed.js +38 -38
- package/dist/core/scene/poseFeed.js.map +1 -1
- package/dist/core/scene/poseHold.js +39 -0
- package/dist/core/scene/poseHold.js.map +1 -0
- package/dist/core/scene/poseOverrides.js +44 -40
- package/dist/core/scene/poseOverrides.js.map +1 -1
- package/dist/core/scene/poseSnapshot.js.map +1 -1
- package/dist/core/scene/reconcileSpecs.js +3 -2
- package/dist/core/scene/reconcileSpecs.js.map +1 -1
- package/dist/core/scene/recorder.js +86 -0
- package/dist/core/scene/recorder.js.map +1 -0
- package/dist/core/scene/renderOrder.js +84 -0
- package/dist/core/scene/renderOrder.js.map +1 -0
- package/dist/core/scene/scene.js +80 -1266
- package/dist/core/scene/scene.js.map +1 -1
- package/dist/core/scene/sceneEdits.js +58 -0
- package/dist/core/scene/sceneEdits.js.map +1 -0
- package/dist/core/scene/sceneMutators.js +49 -0
- package/dist/core/scene/sceneMutators.js.map +1 -0
- package/dist/core/scene/scenePoseAdapter.js +16 -0
- package/dist/core/scene/scenePoseAdapter.js.map +1 -0
- package/dist/core/scene/sceneRecording.js +90 -0
- package/dist/core/scene/sceneRecording.js.map +1 -0
- package/dist/core/scene/sceneSelection.js +28 -0
- package/dist/core/scene/sceneSelection.js.map +1 -0
- package/dist/core/scene/sceneState.js +49 -0
- package/dist/core/scene/sceneState.js.map +1 -0
- package/dist/core/scene/serialization.js +71 -0
- package/dist/core/scene/serialization.js.map +1 -0
- package/dist/core/scene/staleReplay.js +51 -0
- package/dist/core/scene/staleReplay.js.map +1 -0
- package/dist/core/scene/statedFields.js +9 -0
- package/dist/core/scene/statedFields.js.map +1 -0
- package/dist/core/scene/treeEdits.js +127 -0
- package/dist/core/scene/treeEdits.js.map +1 -0
- package/dist/core/scene/treeOrder.js +13 -0
- package/dist/core/scene/treeOrder.js.map +1 -0
- package/dist/core/scene/treeReads.js +26 -0
- package/dist/core/scene/treeReads.js.map +1 -0
- package/dist/core/scene/types.js.map +1 -1
- package/dist/{features/groups → core/scene}/unionOfChildren.js +3 -3
- package/dist/core/scene/unionOfChildren.js.map +1 -0
- package/dist/core/scene/unitScopes.js +13 -0
- package/dist/core/scene/unitScopes.js.map +1 -0
- package/dist/core/scene/useScene.js.map +1 -1
- package/dist/core/selection/readOnlySelection.js +32 -0
- package/dist/core/selection/readOnlySelection.js.map +1 -0
- package/dist/core/selection/usePublishSceneSelection.js +26 -0
- package/dist/core/selection/usePublishSceneSelection.js.map +1 -0
- package/dist/core/selection/useSelection.js +34 -25
- package/dist/core/selection/useSelection.js.map +1 -1
- package/dist/core/shapeKinds.js.map +1 -1
- package/dist/core/stylus/stylus.js.map +1 -1
- package/dist/core/stylus/usePointerStylus.js.map +1 -1
- package/dist/core/usePaintKinds.js +1 -1
- package/dist/core/usePaintKinds.js.map +1 -1
- package/dist/core/viewport/clientToWorld.js.map +1 -1
- package/dist/core/viewport/fitViewToBounds.js.map +1 -1
- package/dist/core/viewport/parallax.js.map +1 -1
- package/dist/core/viewport/screenSlop.js +11 -11
- package/dist/core/viewport/screenSlop.js.map +1 -1
- package/dist/core/viewport/useCanvasSize.js.map +1 -1
- package/dist/core/viewport/useDecayLoop.js +8 -8
- package/dist/core/viewport/useDecayLoop.js.map +1 -1
- package/dist/core/viewport/useNodeOverlayFrame.js +84 -0
- package/dist/core/viewport/useNodeOverlayFrame.js.map +1 -0
- package/dist/core/viewport/useViewAnimation.js +102 -43
- package/dist/core/viewport/useViewAnimation.js.map +1 -1
- package/dist/core/viewport/view.js +9 -9
- package/dist/core/viewport/view.js.map +1 -1
- package/dist/core/viewport/wheelHandler.js.map +1 -1
- package/dist/core/viewport/zoomBounds.js +10 -8
- package/dist/core/viewport/zoomBounds.js.map +1 -1
- package/dist/{cornerHandles-BCrDp_mH.d.ts → cornerHandles-BEshc4z3.d.ts} +11 -24
- package/dist/debug/createDebugOverlayLayer.js +97 -97
- package/dist/debug/createDebugOverlayLayer.js.map +1 -1
- package/dist/debug/createDebugSink.js.map +1 -1
- package/dist/debug/flag.js +2 -41
- package/dist/debug/frameStats.js.map +1 -1
- package/dist/debug/useDebugSink.js +52 -0
- package/dist/debug/useDebugSink.js.map +1 -0
- package/dist/features/chrome-caps/buildChromeCtx.js.map +1 -1
- package/dist/features/chrome-caps/conditions.js.map +1 -1
- package/dist/features/chrome-caps/defaults.js.map +1 -1
- package/dist/features/chrome-caps/resolve.js.map +1 -1
- package/dist/features/chrome-caps/useChromeCaps.js +54 -0
- package/dist/features/chrome-caps/useChromeCaps.js.map +1 -0
- package/dist/features/chrome-caps/useHoverTracking.js +22 -17
- package/dist/features/chrome-caps/useHoverTracking.js.map +1 -1
- package/dist/features/ingestion/contentHandlers.js +28 -19
- package/dist/features/ingestion/contentHandlers.js.map +1 -1
- package/dist/features/ingestion/imageHandler.js +21 -24
- package/dist/features/ingestion/imageHandler.js.map +1 -1
- package/dist/features/ingestion/openFilePicker.js.map +1 -1
- package/dist/features/ingestion/placement.js +16 -0
- package/dist/features/ingestion/placement.js.map +1 -0
- package/dist/features/ingestion/registerKitHandlers.js +7 -7
- package/dist/features/ingestion/svgHandler.js +5 -0
- package/dist/features/ingestion/svgHandler.js.map +1 -1
- package/dist/features/ingestion/textHandler.js +28 -0
- package/dist/features/ingestion/textHandler.js.map +1 -0
- package/dist/features/ingestion/useCanvasIngestion.js +48 -0
- package/dist/features/ingestion/useCanvasIngestion.js.map +1 -0
- package/dist/features/ingestion/weaselJsonHandler.js +22 -14
- package/dist/features/ingestion/weaselJsonHandler.js.map +1 -1
- package/dist/features/longPress/longPressFeedback.js.map +1 -1
- package/dist/features/modes/modeLayers.js +7 -7
- package/dist/features/modes/modeLayers.js.map +1 -1
- package/dist/features/paths/editablePath.js +47 -0
- package/dist/features/paths/editablePath.js.map +1 -0
- package/dist/features/paths/index.js +9 -14
- package/dist/features/paths/pathEditState.js +41 -0
- package/dist/features/paths/pathEditState.js.map +1 -0
- package/dist/features/paths/pathEditingOverlayLayer.js +36 -38
- package/dist/features/paths/pathEditingOverlayLayer.js.map +1 -1
- package/dist/features/paths/pathLayer.js +3 -2
- package/dist/features/paths/pathLayer.js.map +1 -1
- package/dist/features/paths/penPreviewLayer.js +86 -88
- package/dist/features/paths/penPreviewLayer.js.map +1 -1
- package/dist/features/paths/usePathEdit.js +34 -0
- package/dist/features/paths/usePathEdit.js.map +1 -0
- package/dist/features/poseRun/usePoseRun.js +44 -52
- package/dist/features/poseRun/usePoseRun.js.map +1 -1
- package/dist/features/selection/overlay.js +171 -179
- package/dist/features/selection/overlay.js.map +1 -1
- package/dist/features/text/index.js +6 -0
- package/dist/features/text/textLayer.js +1 -1
- package/dist/features/text/textLayer.js.map +1 -1
- package/dist/features/text/useSceneTextEdit.js +100 -93
- package/dist/features/text/useSceneTextEdit.js.map +1 -1
- package/dist/features/viewports/viewportLayer.js +25 -36
- package/dist/features/viewports/viewportLayer.js.map +1 -1
- package/dist/index.d.ts +8473 -9141
- package/dist/index.js +269 -307
- package/dist/input/keyState.js +38 -39
- package/dist/input/keyState.js.map +1 -1
- package/dist/input/useKeyModifiers.js +11 -0
- package/dist/input/useKeyModifiers.js.map +1 -0
- package/dist/interactions/actions/actionShortcuts.js.map +1 -1
- package/dist/interactions/actions/{defaults/align.js → align/action.js} +18 -20
- package/dist/interactions/actions/align/action.js.map +1 -0
- package/dist/interactions/actions/align/align.js +20 -20
- package/dist/interactions/actions/align/align.js.map +1 -1
- package/dist/interactions/actions/booleans/action.js +65 -0
- package/dist/interactions/actions/booleans/action.js.map +1 -0
- package/dist/interactions/actions/booleans/booleans.js +69 -78
- package/dist/interactions/actions/booleans/booleans.js.map +1 -1
- package/dist/interactions/actions/booleans/operands.js +40 -0
- package/dist/interactions/actions/booleans/operands.js.map +1 -0
- package/dist/interactions/actions/booleans/pieces.js +45 -0
- package/dist/interactions/actions/booleans/pieces.js.map +1 -0
- package/dist/interactions/actions/booleans/placement.js +24 -0
- package/dist/interactions/actions/booleans/placement.js.map +1 -0
- package/dist/interactions/actions/booleans/useBooleans.js +11 -9
- package/dist/interactions/actions/booleans/useBooleans.js.map +1 -1
- package/dist/interactions/actions/booleans/useBooleansAdapter.js.map +1 -1
- package/dist/interactions/actions/{defaults/clipboard.js → clipboard/action.js} +31 -15
- package/dist/interactions/actions/clipboard/action.js.map +1 -0
- package/dist/interactions/actions/clipboard/clipboardOps.js +44 -42
- package/dist/interactions/actions/clipboard/clipboardOps.js.map +1 -1
- package/dist/interactions/actions/clipboard/materializePaste.js +10 -7
- package/dist/interactions/actions/clipboard/materializePaste.js.map +1 -1
- package/dist/interactions/actions/clipboard/wireFormat.js.map +1 -1
- package/dist/interactions/actions/clone/action.js +98 -0
- package/dist/interactions/actions/clone/action.js.map +1 -0
- package/dist/interactions/actions/clone/behaviors.js +52 -0
- package/dist/interactions/actions/clone/behaviors.js.map +1 -0
- package/dist/interactions/actions/defaultCommitAdapter.js +7 -32
- package/dist/interactions/actions/defaultCommitAdapter.js.map +1 -1
- package/dist/interactions/actions/defaults/anchorEditing.js +60 -84
- package/dist/interactions/actions/defaults/anchorEditing.js.map +1 -1
- package/dist/interactions/actions/defaults/areaSelect.js +35 -38
- package/dist/interactions/actions/defaults/areaSelect.js.map +1 -1
- package/dist/interactions/actions/defaults/cancelGesture.js.map +1 -1
- package/dist/interactions/actions/defaults/clearSelection.js.map +1 -1
- package/dist/interactions/actions/defaults/copySubtree.js +40 -0
- package/dist/interactions/actions/defaults/copySubtree.js.map +1 -0
- package/dist/interactions/actions/defaults/createPaintAction.js.map +1 -1
- package/dist/interactions/actions/defaults/delete.js.map +1 -1
- package/dist/interactions/actions/defaults/duplicate.js +13 -53
- package/dist/interactions/actions/defaults/duplicate.js.map +1 -1
- package/dist/interactions/actions/defaults/enterTextEdit.js.map +1 -1
- package/dist/interactions/actions/defaults/group.js +40 -50
- package/dist/interactions/actions/defaults/group.js.map +1 -1
- package/dist/interactions/actions/defaults/icons/booleanIcons.js +24 -1
- package/dist/interactions/actions/defaults/icons/booleanIcons.js.map +1 -1
- package/dist/interactions/actions/defaults/icons/outlineIcons.js +39 -1
- package/dist/interactions/actions/defaults/icons/outlineIcons.js.map +1 -1
- package/dist/interactions/actions/defaults/ingest.js +44 -38
- package/dist/interactions/actions/defaults/ingest.js.map +1 -1
- package/dist/interactions/actions/defaults/insertPathAnchor.js +11 -12
- package/dist/interactions/actions/defaults/insertPathAnchor.js.map +1 -1
- package/dist/interactions/actions/defaults/nudge.js +40 -69
- package/dist/interactions/actions/defaults/nudge.js.map +1 -1
- package/dist/interactions/actions/defaults/nudgeSteps.js +37 -0
- package/dist/interactions/actions/defaults/nudgeSteps.js.map +1 -0
- package/dist/interactions/actions/defaults/pinchZoom.js.map +1 -1
- package/dist/interactions/actions/defaults/reorder.js +2 -0
- package/dist/interactions/actions/defaults/reorder.js.map +1 -1
- package/dist/interactions/actions/defaults/requiresSelection.js.map +1 -1
- package/dist/interactions/actions/defaults/setFill.js +14 -8
- package/dist/interactions/actions/defaults/setFill.js.map +1 -1
- package/dist/interactions/actions/defaults/setFillOpacity.js +7 -4
- package/dist/interactions/actions/defaults/setFillOpacity.js.map +1 -1
- package/dist/interactions/actions/defaults/setStroke.js +12 -12
- package/dist/interactions/actions/defaults/setStroke.js.map +1 -1
- package/dist/interactions/actions/defaults/setStrokeOpacity.js +6 -6
- package/dist/interactions/actions/defaults/sliceOps.js +8 -10
- package/dist/interactions/actions/defaults/sliceOps.js.map +1 -1
- package/dist/interactions/actions/defaults/toolActivate.js.map +1 -1
- package/dist/interactions/actions/defaults/toolResetToDefault.js.map +1 -1
- package/dist/interactions/actions/defaults/viewportDragPan.js +37 -26
- package/dist/interactions/actions/defaults/viewportDragPan.js.map +1 -1
- package/dist/interactions/actions/defaults/viewportWheelPan.js.map +1 -1
- package/dist/interactions/actions/defaults/viewportZoom.js.map +1 -1
- package/dist/interactions/actions/distribute/action.js +66 -0
- package/dist/interactions/actions/distribute/action.js.map +1 -0
- package/dist/interactions/actions/distribute/distribute.js +11 -11
- package/dist/interactions/actions/distribute/distribute.js.map +1 -1
- package/dist/interactions/actions/{defaults/editAnchors.js → edit-anchors/action.js} +7 -9
- package/dist/interactions/actions/edit-anchors/action.js.map +1 -0
- package/dist/interactions/actions/edit-anchors/geometry.js +30 -27
- package/dist/interactions/actions/edit-anchors/geometry.js.map +1 -1
- package/dist/interactions/actions/flip/action.js +124 -0
- package/dist/interactions/actions/flip/action.js.map +1 -0
- package/dist/interactions/actions/flip/helpers.js +30 -17
- package/dist/interactions/actions/flip/helpers.js.map +1 -1
- package/dist/interactions/actions/gestureFrames.js +18 -0
- package/dist/interactions/actions/gestureFrames.js.map +1 -0
- package/dist/interactions/actions/gestureLifecycle.js +47 -20
- package/dist/interactions/actions/gestureLifecycle.js.map +1 -1
- package/dist/interactions/actions/hitSelection.js +8 -0
- package/dist/interactions/actions/hitSelection.js.map +1 -0
- package/dist/interactions/actions/insert/action.js +72 -0
- package/dist/interactions/actions/insert/action.js.map +1 -0
- package/dist/interactions/actions/insert/commit.js +28 -0
- package/dist/interactions/actions/insert/commit.js.map +1 -0
- package/dist/interactions/actions/insert/extras.js +65 -0
- package/dist/interactions/actions/insert/extras.js.map +1 -0
- package/dist/interactions/actions/insert/frame.js +48 -0
- package/dist/interactions/actions/insert/frame.js.map +1 -0
- package/dist/interactions/actions/insert/geometry.js +35 -0
- package/dist/interactions/actions/insert/geometry.js.map +1 -0
- package/dist/interactions/actions/insert/rotateAction.js +21 -0
- package/dist/interactions/actions/insert/rotateAction.js.map +1 -0
- package/dist/interactions/actions/insert/session.js +59 -0
- package/dist/interactions/actions/insert/session.js.map +1 -0
- package/dist/interactions/actions/insert/shape.js +34 -0
- package/dist/interactions/actions/insert/shape.js.map +1 -0
- package/dist/interactions/actions/lasso-select/action.js +143 -0
- package/dist/interactions/actions/lasso-select/action.js.map +1 -0
- package/dist/interactions/actions/lasso-select/behaviors/selectFromLasso.js +14 -18
- package/dist/interactions/actions/lasso-select/behaviors/selectFromLasso.js.map +1 -1
- package/dist/interactions/actions/move/action.js +87 -0
- package/dist/interactions/actions/move/action.js.map +1 -0
- package/dist/interactions/actions/move/behaviors/layoutDrop.js +51 -0
- package/dist/interactions/actions/move/behaviors/layoutDrop.js.map +1 -0
- package/dist/interactions/actions/move/behaviors/reparentOnDrop.js +15 -0
- package/dist/interactions/actions/move/behaviors/reparentOnDrop.js.map +1 -0
- package/dist/interactions/actions/move/behaviors/snapBackOrDelete.js +5 -5
- package/dist/interactions/actions/move/behaviors/snapBackOrDelete.js.map +1 -1
- package/dist/interactions/actions/move/behaviors/snapToContainer.js +39 -27
- package/dist/interactions/actions/move/behaviors/snapToContainer.js.map +1 -1
- package/dist/interactions/actions/move/capture.js +99 -0
- package/dist/interactions/actions/move/capture.js.map +1 -0
- package/dist/interactions/actions/move/commit/index.js +41 -0
- package/dist/interactions/actions/move/commit/index.js.map +1 -0
- package/dist/interactions/actions/move/commit/layoutDrop.js +44 -0
- package/dist/interactions/actions/move/commit/layoutDrop.js.map +1 -0
- package/dist/interactions/actions/move/commit/layoutRelease.js +100 -0
- package/dist/interactions/actions/move/commit/layoutRelease.js.map +1 -0
- package/dist/interactions/actions/move/commit/rebase.js +18 -0
- package/dist/interactions/actions/move/commit/rebase.js.map +1 -0
- package/dist/interactions/actions/move/commit/reparent.js +65 -0
- package/dist/interactions/actions/move/commit/reparent.js.map +1 -0
- package/dist/interactions/actions/move/delta.js +51 -0
- package/dist/interactions/actions/move/delta.js.map +1 -0
- package/dist/interactions/actions/move/frame.js +59 -0
- package/dist/interactions/actions/move/frame.js.map +1 -0
- package/dist/interactions/actions/move/gestureAdapter.js +22 -30
- package/dist/interactions/actions/move/gestureAdapter.js.map +1 -1
- package/dist/interactions/actions/move/landedDescendants.js +33 -0
- package/dist/interactions/actions/move/landedDescendants.js.map +1 -0
- package/dist/interactions/actions/move/layout/container.js +94 -0
- package/dist/interactions/actions/move/layout/container.js.map +1 -0
- package/dist/interactions/actions/move/layout/dragged.js +58 -0
- package/dist/interactions/actions/move/layout/dragged.js.map +1 -0
- package/dist/interactions/actions/move/layout/dropPass.js +122 -0
- package/dist/interactions/actions/move/layout/dropPass.js.map +1 -0
- package/dist/interactions/actions/move/layout/exits.js +38 -0
- package/dist/interactions/actions/move/layout/exits.js.map +1 -0
- package/dist/interactions/actions/move/layout/glide.js +48 -0
- package/dist/interactions/actions/move/layout/glide.js.map +1 -0
- package/dist/interactions/actions/move/session.js +63 -0
- package/dist/interactions/actions/move/session.js.map +1 -0
- package/dist/interactions/actions/move/translate.js +61 -0
- package/dist/interactions/actions/move/translate.js.map +1 -0
- package/dist/interactions/actions/outlines/createOutlines.js +16 -63
- package/dist/interactions/actions/outlines/createOutlines.js.map +1 -1
- package/dist/interactions/actions/outlines/createOutlinesAction.js +51 -0
- package/dist/interactions/actions/outlines/createOutlinesAction.js.map +1 -0
- package/dist/interactions/actions/outlines/outlineStroke.js +72 -0
- package/dist/interactions/actions/outlines/outlineStroke.js.map +1 -0
- package/dist/interactions/actions/outlines/outlineStrokeAction.js +37 -0
- package/dist/interactions/actions/outlines/outlineStrokeAction.js.map +1 -0
- package/dist/interactions/actions/outlines/replaceWithPaths.js +54 -0
- package/dist/interactions/actions/outlines/replaceWithPaths.js.map +1 -0
- package/dist/interactions/actions/outlines/strokeRegion.js +27 -0
- package/dist/interactions/actions/outlines/strokeRegion.js.map +1 -0
- package/dist/interactions/actions/planeInput.js.map +1 -1
- package/dist/interactions/actions/pointerState.js +12 -0
- package/dist/interactions/actions/pointerState.js.map +1 -0
- package/dist/interactions/actions/poseDescriptorDep.js +16 -4
- package/dist/interactions/actions/poseDescriptorDep.js.map +1 -1
- package/dist/interactions/actions/poseFrame.js +25 -20
- package/dist/interactions/actions/poseFrame.js.map +1 -1
- package/dist/interactions/actions/resize/action.js +55 -0
- package/dist/interactions/actions/resize/action.js.map +1 -0
- package/dist/interactions/actions/resize/behaviors/lockAspect.js.map +1 -1
- package/dist/interactions/actions/resize/boxFrame.js +16 -0
- package/dist/interactions/actions/resize/boxFrame.js.map +1 -0
- package/dist/interactions/actions/resize/capture.js +85 -0
- package/dist/interactions/actions/resize/capture.js.map +1 -0
- package/dist/interactions/actions/resize/commit.js +69 -0
- package/dist/interactions/actions/resize/commit.js.map +1 -0
- package/dist/interactions/actions/resize/frame.js +74 -0
- package/dist/interactions/actions/resize/frame.js.map +1 -0
- package/dist/interactions/actions/resize/pointSnap.js +111 -0
- package/dist/interactions/actions/resize/pointSnap.js.map +1 -0
- package/dist/interactions/actions/resize/ruleBounds.js +9 -0
- package/dist/interactions/actions/resize/ruleBounds.js.map +1 -0
- package/dist/interactions/actions/resize/session.js +49 -0
- package/dist/interactions/actions/resize/session.js.map +1 -0
- package/dist/interactions/actions/resolveOverlays.js.map +1 -1
- package/dist/interactions/actions/resolvePreviews.js.map +1 -1
- package/dist/interactions/actions/rotate/action.js +56 -0
- package/dist/interactions/actions/rotate/action.js.map +1 -0
- package/dist/interactions/actions/rotate/behaviors/index.js +7 -0
- package/dist/interactions/actions/rotate/behaviors/index.js.map +1 -0
- package/dist/interactions/actions/rotate/behaviors/snapRotation.js +12 -0
- package/dist/interactions/actions/rotate/behaviors/snapRotation.js.map +1 -0
- package/dist/interactions/actions/rotate/commit.js +40 -0
- package/dist/interactions/actions/rotate/commit.js.map +1 -0
- package/dist/interactions/actions/rotate/frame.js +65 -0
- package/dist/interactions/actions/rotate/frame.js.map +1 -0
- package/dist/interactions/actions/rotate/handle.js +12 -12
- package/dist/interactions/actions/rotate/handle.js.map +1 -1
- package/dist/interactions/actions/rotate/session.js +92 -0
- package/dist/interactions/actions/rotate/session.js.map +1 -0
- package/dist/interactions/actions/selectionSubtree.js +69 -0
- package/dist/interactions/actions/selectionSubtree.js.map +1 -0
- package/dist/interactions/actions/spatialReference.js.map +1 -1
- package/dist/interactions/actions/useStandardActions.js +87 -78
- package/dist/interactions/actions/useStandardActions.js.map +1 -1
- package/dist/interactions/gestures/dragGesture/dragGesture.js +4 -7
- package/dist/interactions/gestures/dragGesture/dragGesture.js.map +1 -1
- package/dist/interactions/gestures/dragGesture/dragPointOf.js +23 -0
- package/dist/interactions/gestures/dragGesture/dragPointOf.js.map +1 -0
- package/dist/interactions/gestures/handleDrag/handleDrag.js +21 -26
- package/dist/interactions/gestures/handleDrag/handleDrag.js.map +1 -1
- package/dist/interactions/gestures/pointerDrag/pointerDrag.js +62 -41
- package/dist/interactions/gestures/pointerDrag/pointerDrag.js.map +1 -1
- package/dist/interactions/gestures/shared/originProjection.js +1 -1
- package/dist/interactions/gestures/shared/originProjection.js.map +1 -1
- package/dist/interactions/gestures/shared/screenTolerance.js +8 -2
- package/dist/interactions/gestures/shared/screenTolerance.js.map +1 -1
- package/dist/interactions/gestures/shared/snap.js.map +1 -1
- package/dist/interactions/gestures/thresholdDrag/thresholdDrag.js +8 -4
- package/dist/interactions/gestures/thresholdDrag/thresholdDrag.js.map +1 -1
- package/dist/layout/arrivals.js +20 -23
- package/dist/layout/arrivals.js.map +1 -1
- package/dist/math-CYUjoyyU.d.ts +33 -0
- package/dist/math.d.ts +5 -3
- package/dist/math.js +6 -6
- package/dist/mesh.d.ts +4 -268
- package/dist/mesh.js +3 -7
- package/dist/move.d.ts +14 -11
- package/dist/{originProjection-DEklpDc_.d.ts → originProjection-PPT88jZv.d.ts} +1 -1
- package/dist/patterns-builtin.d.ts +1 -118
- package/dist/patterns-builtin.js +2 -3
- package/dist/{poseDescriptor-D-OH-tu5.d.ts → poseDescriptor-Bqk-11Rl.d.ts} +26 -36
- package/dist/renderer.d.ts +1 -91
- package/dist/renderer.js +2 -18
- package/dist/resize.d.ts +10 -22
- package/dist/resize.js +6 -6
- package/dist/style.css +1 -1
- package/dist/test-hook/install.js +12 -6
- package/dist/test-hook/install.js.map +1 -1
- package/dist/test-hook/useTestHook.js +22 -0
- package/dist/test-hook/useTestHook.js.map +1 -0
- package/dist/test-seams-D0pyV3pR.d.ts +149 -0
- package/dist/test-seams.d.ts +4 -4
- package/dist/test-seams.js +2 -2
- package/dist/tools/builtin/bone/boneActions.js +130 -0
- package/dist/tools/builtin/bone/boneActions.js.map +1 -0
- package/dist/tools/builtin/bone/boneOverlay.js +58 -0
- package/dist/tools/builtin/bone/boneOverlay.js.map +1 -0
- package/dist/tools/builtin/bone/placedRig.js +24 -0
- package/dist/tools/builtin/bone/placedRig.js.map +1 -0
- package/dist/tools/builtin/bone/rigEditState.js +21 -0
- package/dist/tools/builtin/bone/rigEditState.js.map +1 -0
- package/dist/tools/builtin/bone/useBoneTool.js +98 -0
- package/dist/tools/builtin/bone/useBoneTool.js.map +1 -0
- package/dist/tools/builtin/ellipse/useEllipseTool.js +1 -0
- package/dist/tools/builtin/ellipse/useEllipseTool.js.map +1 -1
- package/dist/tools/builtin/eyedropper/useEyedropperTool.js.map +1 -1
- package/dist/tools/builtin/hand/useHandTool.js +1 -0
- package/dist/tools/builtin/hand/useHandTool.js.map +1 -1
- package/dist/tools/builtin/image/useImageTool.js.map +1 -1
- package/dist/tools/builtin/lasso/useLassoTool.js +11 -11
- package/dist/tools/builtin/lasso/useLassoTool.js.map +1 -1
- package/dist/tools/builtin/line/useLineTool.js +1 -0
- package/dist/tools/builtin/line/useLineTool.js.map +1 -1
- package/dist/tools/builtin/pen/usePenTool.js +198 -150
- package/dist/tools/builtin/pen/usePenTool.js.map +1 -1
- package/dist/tools/builtin/pencil/usePencilTool.js +1 -0
- package/dist/tools/builtin/pencil/usePencilTool.js.map +1 -1
- package/dist/tools/builtin/pickTopMostHit.js.map +1 -1
- package/dist/tools/builtin/polygon/usePolygonTool.js +13 -8
- package/dist/tools/builtin/polygon/usePolygonTool.js.map +1 -1
- package/dist/tools/builtin/rect/useRectTool.js +1 -0
- package/dist/tools/builtin/rect/useRectTool.js.map +1 -1
- package/dist/tools/builtin/select/adapterPointQuery.js +36 -0
- package/dist/tools/builtin/select/adapterPointQuery.js.map +1 -0
- package/dist/tools/builtin/select/selectionContributions.js +25 -24
- package/dist/tools/builtin/select/selectionContributions.js.map +1 -1
- package/dist/tools/builtin/select/useSelectTool.js +42 -67
- package/dist/tools/builtin/select/useSelectTool.js.map +1 -1
- package/dist/tools/builtin/shared/pointerFollower.js +17 -0
- package/dist/tools/builtin/shared/pointerFollower.js.map +1 -0
- package/dist/tools/builtin/slice/useSliceTool.js +72 -82
- package/dist/tools/builtin/slice/useSliceTool.js.map +1 -1
- package/dist/tools/builtin/star/useStarTool.js +22 -16
- package/dist/tools/builtin/star/useStarTool.js.map +1 -1
- package/dist/tools/builtin/text/useTextTool.js +9 -0
- package/dist/tools/builtin/text/useTextTool.js.map +1 -1
- package/dist/tools/builtin/weight/useWeightTool.js +77 -0
- package/dist/tools/builtin/weight/useWeightTool.js.map +1 -0
- package/dist/tools/builtin/weight/weightActions.js +112 -0
- package/dist/tools/builtin/weight/weightActions.js.map +1 -0
- package/dist/tools/builtin/weight/weightOverlay.js +61 -0
- package/dist/tools/builtin/weight/weightOverlay.js.map +1 -0
- package/dist/tools/overlayBinding.js.map +1 -1
- package/dist/tools/useKeybindings.js +12 -22
- package/dist/tools/useKeybindings.js.map +1 -1
- package/dist/{types-A37hYkeR.d.ts → types-CIKDwlsP.d.ts} +113 -169
- package/dist/util/color.js +3 -3
- package/dist/util/color.js.map +1 -1
- package/dist/util/paint.js +1 -1
- package/dist/util/paint.js.map +1 -1
- package/dist/version.js +1 -1
- package/package.json +28 -21
- package/dist/animation/colorHelpers.js +0 -135
- package/dist/animation/colorHelpers.js.map +0 -1
- package/dist/animation/colorRegistry.js +0 -37
- package/dist/animation/colorRegistry.js.map +0 -1
- package/dist/animation/engine/axes.js +0 -36
- package/dist/animation/engine/axes.js.map +0 -1
- package/dist/animation/engine/codec.js +0 -170
- package/dist/animation/engine/codec.js.map +0 -1
- package/dist/animation/engine/integrator.js +0 -12
- package/dist/animation/engine/integrator.js.map +0 -1
- package/dist/animation/loop.js +0 -62
- package/dist/animation/loop.js.map +0 -1
- package/dist/animation/observe.js +0 -23
- package/dist/animation/observe.js.map +0 -1
- package/dist/animation/rig/blendPoses.js +0 -43
- package/dist/animation/rig/blendPoses.js.map +0 -1
- package/dist/animation/rig/mirrorPose.js +0 -19
- package/dist/animation/rig/mirrorPose.js.map +0 -1
- package/dist/animation/rig/resolveSkeleton.js +0 -33
- package/dist/animation/rig/resolveSkeleton.js.map +0 -1
- package/dist/animation/rig/solveIk.js +0 -103
- package/dist/animation/rig/solveIk.js.map +0 -1
- package/dist/animation/rig/types.js +0 -12
- package/dist/animation/rig/types.js.map +0 -1
- package/dist/animation/slew.js +0 -27
- package/dist/animation/slew.js.map +0 -1
- package/dist/animation/stagger.js +0 -138
- package/dist/animation/stagger.js.map +0 -1
- package/dist/animation/timeline/booking.js +0 -106
- package/dist/animation/timeline/booking.js.map +0 -1
- package/dist/animation/timeline/createTimeline.js +0 -116
- package/dist/animation/timeline/createTimeline.js.map +0 -1
- package/dist/animation/timeline/sampleTrack.js +0 -71
- package/dist/animation/timeline/sampleTrack.js.map +0 -1
- package/dist/animation/useAnimator.js +0 -378
- package/dist/animation/useAnimator.js.map +0 -1
- package/dist/builtins-C-VgUlWI.d.ts +0 -4514
- package/dist/canvas/MinimapCanvas.js +0 -139
- package/dist/canvas/MinimapCanvas.js.map +0 -1
- package/dist/canvas/deps/poseComposition.js +0 -11
- package/dist/canvas/deps/poseComposition.js.map +0 -1
- package/dist/canvas/minimapMath.js +0 -80
- package/dist/canvas/minimapMath.js.map +0 -1
- package/dist/canvas/toolPreview.js +0 -39
- package/dist/canvas/toolPreview.js.map +0 -1
- package/dist/core/adapters/arrayAdapter.js +0 -85
- package/dist/core/adapters/arrayAdapter.js.map +0 -1
- package/dist/core/adapters/useArrayAdapter.js +0 -13
- package/dist/core/adapters/useArrayAdapter.js.map +0 -1
- package/dist/core/fillInPoseFrame.js +0 -102
- package/dist/core/fillInPoseFrame.js.map +0 -1
- package/dist/core/geometry/poseRotation.js +0 -58
- package/dist/core/geometry/poseRotation.js.map +0 -1
- package/dist/core/gradient.js +0 -136
- package/dist/core/gradient.js.map +0 -1
- package/dist/core/isPlainObject.js.map +0 -1
- package/dist/core/markerInset.js +0 -24
- package/dist/core/markerInset.js.map +0 -1
- package/dist/core/mixed.js +0 -6
- package/dist/core/mixed.js.map +0 -1
- package/dist/core/paintKinds.js +0 -156
- package/dist/core/paintKinds.js.map +0 -1
- package/dist/core/strokeMarkerShapes.js +0 -139
- package/dist/core/strokeMarkerShapes.js.map +0 -1
- package/dist/core/strokeMarkers.js +0 -28
- package/dist/core/strokeMarkers.js.map +0 -1
- package/dist/core/viewport/meanScale.js +0 -8
- package/dist/core/viewport/meanScale.js.map +0 -1
- package/dist/core/viewport/pxExtent.js +0 -42
- package/dist/core/viewport/pxExtent.js.map +0 -1
- package/dist/debug/flag.js.map +0 -1
- package/dist/features/cursor/paintedCursorLayer.js.map +0 -1
- package/dist/features/focus/gateLayer.js +0 -14
- package/dist/features/focus/gateLayer.js.map +0 -1
- package/dist/features/focus/useCanvasFocus.js +0 -29
- package/dist/features/focus/useCanvasFocus.js.map +0 -1
- package/dist/features/groups/children.js.map +0 -1
- package/dist/features/groups/composePose.js.map +0 -1
- package/dist/features/groups/nestedHit.js.map +0 -1
- package/dist/features/groups/unionOfChildren.js.map +0 -1
- package/dist/features/images/imageCache.js +0 -94
- package/dist/features/images/imageCache.js.map +0 -1
- package/dist/features/ingestion/index.js +0 -8
- package/dist/features/meshPaint/bake.js +0 -79
- package/dist/features/meshPaint/bake.js.map +0 -1
- package/dist/features/meshPaint/bakeCache.js +0 -59
- package/dist/features/meshPaint/bakeCache.js.map +0 -1
- package/dist/features/meshPaint/handles.js +0 -86
- package/dist/features/meshPaint/handles.js.map +0 -1
- package/dist/features/meshPaint/lazyKind.js.map +0 -1
- package/dist/features/meshPaint/meshPaint.js +0 -236
- package/dist/features/meshPaint/meshPaint.js.map +0 -1
- package/dist/features/meshPaint/meshShader.js +0 -6
- package/dist/features/meshPaint/meshShader.js.map +0 -1
- package/dist/features/meshPaint/register.js +0 -7
- package/dist/features/meshPaint/register.js.map +0 -1
- package/dist/features/meshPaint/surface.js +0 -110
- package/dist/features/meshPaint/surface.js.map +0 -1
- package/dist/features/minimap/actions.js +0 -53
- package/dist/features/minimap/actions.js.map +0 -1
- package/dist/features/minimap/createMinimapContribution.js +0 -96
- package/dist/features/minimap/createMinimapContribution.js.map +0 -1
- package/dist/features/minimap/layers.js +0 -103
- package/dist/features/minimap/layers.js.map +0 -1
- package/dist/features/overlays/useNodeOverlayFrame.js +0 -103
- package/dist/features/overlays/useNodeOverlayFrame.js.map +0 -1
- package/dist/features/parallax/createParallaxLayer.js +0 -26
- package/dist/features/parallax/createParallaxLayer.js.map +0 -1
- package/dist/features/parallax/createParallaxPlane.js +0 -26
- package/dist/features/parallax/createParallaxPlane.js.map +0 -1
- package/dist/features/paths/anchorEdits.js +0 -156
- package/dist/features/paths/anchorEdits.js.map +0 -1
- package/dist/features/paths/anchors.js +0 -154
- package/dist/features/paths/anchors.js.map +0 -1
- package/dist/features/paths/booleans.js +0 -2
- package/dist/features/paths/markerCommands.js +0 -148
- package/dist/features/paths/markerCommands.js.map +0 -1
- package/dist/features/paths/markerSites.js +0 -59
- package/dist/features/paths/markerSites.js.map +0 -1
- package/dist/features/paths/markers.js +0 -95
- package/dist/features/paths/markers.js.map +0 -1
- package/dist/features/paths/nearestAnchor.js +0 -36
- package/dist/features/paths/nearestAnchor.js.map +0 -1
- package/dist/features/paths/pathInWorld.js +0 -41
- package/dist/features/paths/pathInWorld.js.map +0 -1
- package/dist/features/paths/poseDescriptor.js +0 -39
- package/dist/features/paths/poseDescriptor.js.map +0 -1
- package/dist/features/paths/tessellate/dash.js +0 -52
- package/dist/features/paths/tessellate/dash.js.map +0 -1
- package/dist/features/paths/tessellate/insets.js +0 -32
- package/dist/features/paths/tessellate/insets.js.map +0 -1
- package/dist/features/paths/tessellate/metric.js +0 -72
- package/dist/features/paths/tessellate/metric.js.map +0 -1
- package/dist/features/paths/tessellate/stroke.js +0 -170
- package/dist/features/paths/tessellate/stroke.js.map +0 -1
- package/dist/features/paths/tessellate/vertexWidths.js +0 -32
- package/dist/features/paths/tessellate/vertexWidths.js.map +0 -1
- package/dist/features/patterns/index.js +0 -23
- package/dist/features/patterns/index.js.map +0 -1
- package/dist/features/patterns/patterns-builtin.js +0 -38
- package/dist/features/patterns/patterns-builtin.js.map +0 -1
- package/dist/features/patterns/resolveSpec.js +0 -57
- package/dist/features/patterns/resolveSpec.js.map +0 -1
- package/dist/features/patterns/tileGeometry.js +0 -158
- package/dist/features/patterns/tileGeometry.js.map +0 -1
- package/dist/features/pointer/PointerContext.js +0 -45
- package/dist/features/pointer/PointerContext.js.map +0 -1
- package/dist/features/selection/SelectionContext.js +0 -46
- package/dist/features/selection/SelectionContext.js.map +0 -1
- package/dist/features/simulation/createSimulation.js +0 -61
- package/dist/features/simulation/createSimulation.js.map +0 -1
- package/dist/features/simulation/types.js +0 -6
- package/dist/features/simulation/types.js.map +0 -1
- package/dist/features/simulation/useSimulation.js +0 -74
- package/dist/features/simulation/useSimulation.js.map +0 -1
- package/dist/features/text/domRuns.js +0 -258
- package/dist/features/text/domRuns.js.map +0 -1
- package/dist/features/text/fitTextPose.js +0 -38
- package/dist/features/text/fitTextPose.js.map +0 -1
- package/dist/features/text/hitTest.js +0 -45
- package/dist/features/text/hitTest.js.map +0 -1
- package/dist/features/text/renderLabel.js +0 -14
- package/dist/features/text/renderLabel.js.map +0 -1
- package/dist/features/text/runs/effectiveRangeStyle.js +0 -66
- package/dist/features/text/runs/effectiveRangeStyle.js.map +0 -1
- package/dist/features/text/runs/flagRange.js +0 -53
- package/dist/features/text/runs/flagRange.js.map +0 -1
- package/dist/features/text/runs/rangeStyle.js +0 -135
- package/dist/features/text/runs/rangeStyle.js.map +0 -1
- package/dist/features/text/textCommand.js +0 -59
- package/dist/features/text/textCommand.js.map +0 -1
- package/dist/features/text/textToPath.js +0 -181
- package/dist/features/text/textToPath.js.map +0 -1
- package/dist/features/text/useTextEdit.js +0 -467
- package/dist/features/text/useTextEdit.js.map +0 -1
- package/dist/features/tiling/createTiledLayer.js +0 -63
- package/dist/features/tiling/createTiledLayer.js.map +0 -1
- package/dist/features/tiling/tiledProject.js +0 -14
- package/dist/features/tiling/tiledProject.js.map +0 -1
- package/dist/interactions/actions/clone/behaviors/cloneByAltDrag.js +0 -26
- package/dist/interactions/actions/clone/behaviors/cloneByAltDrag.js.map +0 -1
- package/dist/interactions/actions/defaults/align.js.map +0 -1
- package/dist/interactions/actions/defaults/booleans.js +0 -52
- package/dist/interactions/actions/defaults/booleans.js.map +0 -1
- package/dist/interactions/actions/defaults/clipboard.js.map +0 -1
- package/dist/interactions/actions/defaults/clone.js +0 -107
- package/dist/interactions/actions/defaults/clone.js.map +0 -1
- package/dist/interactions/actions/defaults/createOutlines.js +0 -47
- package/dist/interactions/actions/defaults/createOutlines.js.map +0 -1
- package/dist/interactions/actions/defaults/distribute.js +0 -66
- package/dist/interactions/actions/defaults/distribute.js.map +0 -1
- package/dist/interactions/actions/defaults/editAnchors.js.map +0 -1
- package/dist/interactions/actions/defaults/flip.js +0 -119
- package/dist/interactions/actions/defaults/flip.js.map +0 -1
- package/dist/interactions/actions/defaults/freshNodeId.js +0 -10
- package/dist/interactions/actions/defaults/freshNodeId.js.map +0 -1
- package/dist/interactions/actions/defaults/insert.js +0 -288
- package/dist/interactions/actions/defaults/insert.js.map +0 -1
- package/dist/interactions/actions/defaults/lassoSelect.js +0 -156
- package/dist/interactions/actions/defaults/lassoSelect.js.map +0 -1
- package/dist/interactions/actions/defaults/move.js +0 -760
- package/dist/interactions/actions/defaults/move.js.map +0 -1
- package/dist/interactions/actions/defaults/resize.js +0 -335
- package/dist/interactions/actions/defaults/resize.js.map +0 -1
- package/dist/interactions/actions/defaults/rotate.js +0 -184
- package/dist/interactions/actions/defaults/rotate.js.map +0 -1
- package/dist/interactions/actions/previewOverrides.js +0 -25
- package/dist/interactions/actions/previewOverrides.js.map +0 -1
- package/dist/interactions/actions/resize/autoPoseDescriptor.js.map +0 -1
- package/dist/math-Drrw4ewZ.d.ts +0 -160
- package/dist/registerProgram-BMZRDgrh.d.ts +0 -197
- package/dist/renderer/DrawCommand.js +0 -6
- package/dist/renderer/DrawCommand.js.map +0 -1
- package/dist/renderer/WeaselRenderer.js +0 -331
- package/dist/renderer/WeaselRenderer.js.map +0 -1
- package/dist/renderer/batchClip.js +0 -46
- package/dist/renderer/batchClip.js.map +0 -1
- package/dist/renderer/cache/GLImageCache.js +0 -64
- package/dist/renderer/cache/GLImageCache.js.map +0 -1
- package/dist/renderer/cache/GLMeshCache.js +0 -102
- package/dist/renderer/cache/GLMeshCache.js.map +0 -1
- package/dist/renderer/cache/GLTextureCache.js +0 -51
- package/dist/renderer/cache/GLTextureCache.js.map +0 -1
- package/dist/renderer/cache/GradientRampAtlas.js +0 -82
- package/dist/renderer/cache/GradientRampAtlas.js.map +0 -1
- package/dist/renderer/cache/cache.js +0 -13
- package/dist/renderer/cache/cache.js.map +0 -1
- package/dist/renderer/cache/markerCommandCache.js +0 -63
- package/dist/renderer/cache/markerCommandCache.js.map +0 -1
- package/dist/renderer/cache/outlineMeshCache.js +0 -15
- package/dist/renderer/cache/outlineMeshCache.js.map +0 -1
- package/dist/renderer/cache/outlineStrokeMeshCache.js +0 -36
- package/dist/renderer/cache/outlineStrokeMeshCache.js.map +0 -1
- package/dist/renderer/cache/strokeMeshCache.js +0 -55
- package/dist/renderer/cache/strokeMeshCache.js.map +0 -1
- package/dist/renderer/cullDrawCommands.js +0 -90
- package/dist/renderer/cullDrawCommands.js.map +0 -1
- package/dist/renderer/draw.js +0 -1135
- package/dist/renderer/draw.js.map +0 -1
- package/dist/renderer/drawBatch.js +0 -198
- package/dist/renderer/drawBatch.js.map +0 -1
- package/dist/renderer/effects/EffectTargets.js +0 -45
- package/dist/renderer/effects/EffectTargets.js.map +0 -1
- package/dist/renderer/effects/builtins.js +0 -31
- package/dist/renderer/effects/builtins.js.map +0 -1
- package/dist/renderer/effects/composite.js +0 -9
- package/dist/renderer/effects/composite.js.map +0 -1
- package/dist/renderer/effects/effectPrelude.js +0 -10
- package/dist/renderer/effects/effectPrelude.js.map +0 -1
- package/dist/renderer/effects/types.js +0 -10
- package/dist/renderer/effects/types.js.map +0 -1
- package/dist/renderer/glyphOutlineMesh.js +0 -67
- package/dist/renderer/glyphOutlineMesh.js.map +0 -1
- package/dist/renderer/index.js +0 -19
- package/dist/renderer/math/color.js +0 -341
- package/dist/renderer/math/color.js.map +0 -1
- package/dist/renderer/math/mat3.js +0 -76
- package/dist/renderer/math/mat3.js.map +0 -1
- package/dist/renderer/math/patternSpace.js +0 -22
- package/dist/renderer/math/patternSpace.js.map +0 -1
- package/dist/renderer/math/viewToMat3.js +0 -19
- package/dist/renderer/math/viewToMat3.js.map +0 -1
- package/dist/renderer/paintResources.js +0 -18
- package/dist/renderer/paintResources.js.map +0 -1
- package/dist/renderer/paintScratch.js +0 -37
- package/dist/renderer/paintScratch.js.map +0 -1
- package/dist/renderer/shaders/ShaderProgram.js +0 -74
- package/dist/renderer/shaders/ShaderProgram.js.map +0 -1
- package/dist/renderer/shaders/batchFill.js +0 -119
- package/dist/renderer/shaders/batchFill.js.map +0 -1
- package/dist/renderer/shaders/customPrelude.js +0 -34
- package/dist/renderer/shaders/customPrelude.js.map +0 -1
- package/dist/renderer/shaders/extractUniformNames.js +0 -184
- package/dist/renderer/shaders/extractUniformNames.js.map +0 -1
- package/dist/renderer/shaders/glyphPaint.js +0 -61
- package/dist/renderer/shaders/glyphPaint.js.map +0 -1
- package/dist/renderer/shaders/gradFill.js +0 -30
- package/dist/renderer/shaders/gradFill.js.map +0 -1
- package/dist/renderer/shaders/imageFill.js +0 -14
- package/dist/renderer/shaders/imageFill.js.map +0 -1
- package/dist/renderer/shaders/pathFill.js +0 -13
- package/dist/renderer/shaders/pathFill.js.map +0 -1
- package/dist/renderer/shaders/patternFill.js +0 -24
- package/dist/renderer/shaders/patternFill.js.map +0 -1
- package/dist/renderer/shaders/registerProgram.js +0 -18
- package/dist/renderer/shaders/registerProgram.js.map +0 -1
- package/dist/renderer/spriteSheet.js +0 -14
- package/dist/renderer/spriteSheet.js.map +0 -1
- package/dist/renderer/state/GroupState.js +0 -77
- package/dist/renderer/state/GroupState.js.map +0 -1
- package/dist/renderer/strokeLengths.js +0 -50
- package/dist/renderer/strokeLengths.js.map +0 -1
- package/dist/renderer/syntheticItalic.js +0 -6
- package/dist/renderer/syntheticItalic.js.map +0 -1
- package/dist/renderer/textures/registerTexture.js +0 -14
- package/dist/renderer/textures/registerTexture.js.map +0 -1
- package/dist/scheduling/useVisibleRaf.js +0 -69
- package/dist/scheduling/useVisibleRaf.js.map +0 -1
- package/dist/test-seams-CuIxe0xY.d.ts +0 -356
- package/dist/tools/prefs.js +0 -62
- package/dist/tools/prefs.js.map +0 -1
package/dist/canvas/PickHud.js
CHANGED
|
@@ -1,93 +1,96 @@
|
|
|
1
|
-
import e from "
|
|
2
|
-
import
|
|
3
|
-
import {
|
|
4
|
-
import {
|
|
1
|
+
import { clientToWorld as e } from "../core/viewport/clientToWorld.js";
|
|
2
|
+
import t from "./hud.module.js";
|
|
3
|
+
import { useHostAnchor as n } from "./useHostAnchor.js";
|
|
4
|
+
import { useEffect as r, useState as i } from "react";
|
|
5
|
+
import { useLatest as a } from "@weasel-js/react";
|
|
6
|
+
import { jsx as o, jsxs as s } from "react/jsx-runtime";
|
|
5
7
|
//#region src/canvas/PickHud.tsx
|
|
6
|
-
function
|
|
7
|
-
let [
|
|
8
|
+
function c({ canvasRef: c, anchorRef: l, viewRef: u, toWorld: d, pickEvery: f, pickBest: p, offset: m }) {
|
|
9
|
+
let h = a(d), [g, _] = i({
|
|
8
10
|
ids: [],
|
|
9
11
|
best: null,
|
|
10
12
|
inCanvas: !1
|
|
11
|
-
}), { ref:
|
|
13
|
+
}), { ref: v, style: y } = n(() => l?.current ?? c.current?.parentElement ?? c.current, {
|
|
12
14
|
align: {
|
|
13
15
|
x: "end",
|
|
14
16
|
y: "start"
|
|
15
17
|
},
|
|
16
18
|
offset: {
|
|
17
|
-
x:
|
|
18
|
-
y:
|
|
19
|
+
x: m?.right ?? 8,
|
|
20
|
+
y: m?.top ?? 76
|
|
19
21
|
}
|
|
20
22
|
});
|
|
21
|
-
return
|
|
22
|
-
let
|
|
23
|
-
let
|
|
24
|
-
if (!
|
|
25
|
-
|
|
23
|
+
return r(() => {
|
|
24
|
+
let t = (t) => {
|
|
25
|
+
let n = c.current, r = u.current;
|
|
26
|
+
if (!n || !r) {
|
|
27
|
+
_({
|
|
26
28
|
ids: [],
|
|
27
29
|
best: null,
|
|
28
30
|
inCanvas: !1
|
|
29
31
|
});
|
|
30
32
|
return;
|
|
31
33
|
}
|
|
32
|
-
let
|
|
33
|
-
if (!(
|
|
34
|
-
|
|
34
|
+
let i = n.getBoundingClientRect();
|
|
35
|
+
if (!(t.clientX >= i.left && t.clientX <= i.right && t.clientY >= i.top && t.clientY <= i.bottom)) {
|
|
36
|
+
_({
|
|
35
37
|
ids: [],
|
|
36
38
|
best: null,
|
|
37
39
|
inCanvas: !1
|
|
38
40
|
});
|
|
39
41
|
return;
|
|
40
42
|
}
|
|
41
|
-
let
|
|
43
|
+
let [a, o] = h.current?.(t.clientX, t.clientY) ?? e(t.clientX, t.clientY, i, r), s = [];
|
|
42
44
|
try {
|
|
43
|
-
s =
|
|
45
|
+
s = f(a, o);
|
|
44
46
|
} catch {
|
|
45
47
|
s = [];
|
|
46
48
|
}
|
|
47
|
-
let
|
|
48
|
-
if (
|
|
49
|
-
|
|
49
|
+
let l = null;
|
|
50
|
+
if (p) try {
|
|
51
|
+
l = p(a, o);
|
|
50
52
|
} catch {
|
|
51
|
-
|
|
53
|
+
l = null;
|
|
52
54
|
}
|
|
53
|
-
|
|
55
|
+
_({
|
|
54
56
|
ids: s,
|
|
55
|
-
best:
|
|
57
|
+
best: l,
|
|
56
58
|
inCanvas: !0
|
|
57
59
|
});
|
|
58
60
|
};
|
|
59
|
-
return document.addEventListener("pointermove",
|
|
60
|
-
document.removeEventListener("pointermove",
|
|
61
|
+
return document.addEventListener("pointermove", t), () => {
|
|
62
|
+
document.removeEventListener("pointermove", t);
|
|
61
63
|
};
|
|
62
64
|
}, [
|
|
63
|
-
o,
|
|
64
65
|
c,
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
66
|
+
u,
|
|
67
|
+
f,
|
|
68
|
+
p,
|
|
69
|
+
h
|
|
70
|
+
]), y ? /* @__PURE__ */ s("div", {
|
|
71
|
+
ref: v,
|
|
72
|
+
className: `${t.hud} ${t.sized}`,
|
|
73
|
+
style: y,
|
|
74
|
+
children: [/* @__PURE__ */ s("div", {
|
|
75
|
+
className: `${t.header} ${t.muted}`,
|
|
73
76
|
children: [
|
|
74
77
|
"pickEvery (",
|
|
75
|
-
|
|
78
|
+
g.ids.length,
|
|
76
79
|
")"
|
|
77
80
|
]
|
|
78
|
-
}),
|
|
79
|
-
className:
|
|
80
|
-
children:
|
|
81
|
-
}) : /* @__PURE__ */
|
|
82
|
-
className:
|
|
83
|
-
children:
|
|
84
|
-
className:
|
|
85
|
-
children:
|
|
86
|
-
},
|
|
81
|
+
}), g.ids.length === 0 ? /* @__PURE__ */ o("div", {
|
|
82
|
+
className: t.absent,
|
|
83
|
+
children: g.inCanvas ? "—" : "off-canvas"
|
|
84
|
+
}) : /* @__PURE__ */ o("ul", {
|
|
85
|
+
className: t.list,
|
|
86
|
+
children: g.ids.slice().reverse().map((e) => /* @__PURE__ */ o("li", {
|
|
87
|
+
className: e === g.best ? `${t.item} ${t.itemBest}` : t.item,
|
|
88
|
+
children: e
|
|
89
|
+
}, e))
|
|
87
90
|
})]
|
|
88
91
|
}) : null;
|
|
89
92
|
}
|
|
90
93
|
//#endregion
|
|
91
|
-
export {
|
|
94
|
+
export { c as PickHud };
|
|
92
95
|
|
|
93
96
|
//# sourceMappingURL=PickHud.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"PickHud.js","names":["s","hud_module_default","PickHud","state","setState","useState","useHostAnchor","anchorRef","canvasRef","offset","useEffect","onMove","canvas","view","viewRef","rect","worldX","worldY","ids","pickEvery","best","pickBest","style","id"],"sources":["../../src/canvas/PickHud.tsx"],"sourcesContent":["/**\n * Dev HUD listing the ids returned by `pickEvery(world)` under the cursor.\n *\n * Anchors to the canvas's top-right corner like `CursorCoordsHud`, offset\n * downward so it sits just below that HUD. Updates on `document`\n * pointermove. Refreshes its position on scroll / resize so it tracks the\n * canvas through layout changes.\n */\nimport { useEffect, useState } from 'react';\nimport type { View } from 'core/viewport/view';\nimport { useHostAnchor } from './useHostAnchor';\nimport s from './hud.module.css';\n\n/** Props for `<PickHud>`. */\nexport interface PickHudProps {\n canvasRef: React.RefObject<HTMLElement | null>;\n /** Element the HUD pins its corner to. Defaults to the canvas's parent — the\n * wrapper a bare `<canvas>` sits in. A detached canvas passes its own input\n * box, whose parent is the shared surface every pane sits in. */\n anchorRef?: React.RefObject<HTMLElement | null>;\n viewRef: React.RefObject<View>;\n /** World-space hit-test. Same shape as `useSelectTool`'s `pickEvery`. */\n pickEvery: (worldX: number, worldY: number) => readonly string[];\n /** Optional single-best resolver — the id this point would select on a\n * bare click. When supplied, that id is rendered bold in the list. */\n pickBest?: (worldX: number, worldY: number) => string | null;\n /** Inset from the canvas's top-right corner. Default `{ top: 76, right: 8 }`\n * so the HUD clears `CursorCoordsHud` (~64 px tall in its 3-line form). */\n offset?: { top?: number; right?: number };\n}\n\ninterface HudState {\n ids: readonly string[];\n best: string | null;\n inCanvas: boolean;\n}\n\n/** Debug overlay listing every node under the pointer, with the one a click\n * would actually select shown in bold. */\nexport function PickHud({ canvasRef, anchorRef, viewRef, pickEvery, pickBest, offset }: PickHudProps) {\n const [state, setState] = useState<HudState>({\n ids: [], best: null, inCanvas: false,\n });\n const { ref, style } = useHostAnchor(\n () => anchorRef?.current ?? canvasRef.current?.parentElement ?? canvasRef.current,\n {\n align: { x: 'end', y: 'start' },\n offset: { x: offset?.right ?? 8, y: offset?.top ?? 76 },\n },\n );\n\n useEffect(() => {\n const onMove = (e: PointerEvent) => {\n const canvas = canvasRef.current;\n const view = viewRef.current;\n if (!canvas || !view) {\n setState({ ids: [], best: null, inCanvas: false });\n return;\n }\n const rect = canvas.getBoundingClientRect();\n const inCanvas =\n e.clientX >= rect.left && e.clientX <= rect.right &&\n e.clientY >= rect.top && e.clientY <= rect.bottom;\n if (!inCanvas) {\n setState({ ids: [], best: null, inCanvas: false });\n return;\n }\n const worldX = (e.clientX
|
|
1
|
+
{"version":3,"file":"PickHud.js","names":["s","hud_module_default","PickHud","toWorldRef","useLatest","toWorld","state","setState","useState","useHostAnchor","anchorRef","canvasRef","offset","useEffect","onMove","canvas","view","viewRef","rect","e","worldX","worldY","clientToWorld","ids","pickEvery","best","pickBest","style","id"],"sources":["../../src/canvas/PickHud.tsx"],"sourcesContent":["/// <reference path=\"../css-modules.d.ts\" />\n/**\n * Dev HUD listing the ids returned by `pickEvery(world)` under the cursor.\n *\n * Anchors to the canvas's top-right corner like `CursorCoordsHud`, offset\n * downward so it sits just below that HUD. Updates on `document`\n * pointermove. Refreshes its position on scroll / resize so it tracks the\n * canvas through layout changes.\n */\nimport { useEffect, useState } from 'react';\nimport { useLatest } from '@weasel-js/react';\nimport type { View } from 'core/viewport/view';\nimport { clientToWorld } from 'core/viewport/clientToWorld';\nimport { useHostAnchor } from './useHostAnchor';\nimport s from './hud.module.css';\n\n/** Props for `<PickHud>`. */\nexport interface PickHudProps {\n canvasRef: React.RefObject<HTMLElement | null>;\n /** Element the HUD pins its corner to. Defaults to the canvas's parent — the\n * wrapper a bare `<canvas>` sits in. A detached canvas passes its own input\n * box, whose parent is the shared surface every pane sits in. */\n anchorRef?: React.RefObject<HTMLElement | null>;\n viewRef: React.RefObject<View>;\n /** Client coords to world. Defaults to the canvas's rect and `viewRef`. A\n * canvas whose routing converts some other way (a CSS transform, a 3D host)\n * passes that conversion, so the readout agrees with the picks. */\n toWorld?: (clientX: number, clientY: number) => [number, number];\n /** World-space hit-test. Same shape as `useSelectTool`'s `pickEvery`. */\n pickEvery: (worldX: number, worldY: number) => readonly string[];\n /** Optional single-best resolver — the id this point would select on a\n * bare click. When supplied, that id is rendered bold in the list. */\n pickBest?: (worldX: number, worldY: number) => string | null;\n /** Inset from the canvas's top-right corner. Default `{ top: 76, right: 8 }`\n * so the HUD clears `CursorCoordsHud` (~64 px tall in its 3-line form). */\n offset?: { top?: number; right?: number };\n}\n\ninterface HudState {\n ids: readonly string[];\n best: string | null;\n inCanvas: boolean;\n}\n\n/** Debug overlay listing every node under the pointer, with the one a click\n * would actually select shown in bold. */\nexport function PickHud({ canvasRef, anchorRef, viewRef, toWorld, pickEvery, pickBest, offset }: PickHudProps) {\n const toWorldRef = useLatest(toWorld);\n const [state, setState] = useState<HudState>({\n ids: [], best: null, inCanvas: false,\n });\n const { ref, style } = useHostAnchor(\n () => anchorRef?.current ?? canvasRef.current?.parentElement ?? canvasRef.current,\n {\n align: { x: 'end', y: 'start' },\n offset: { x: offset?.right ?? 8, y: offset?.top ?? 76 },\n },\n );\n\n useEffect(() => {\n const onMove = (e: PointerEvent) => {\n const canvas = canvasRef.current;\n const view = viewRef.current;\n if (!canvas || !view) {\n setState({ ids: [], best: null, inCanvas: false });\n return;\n }\n const rect = canvas.getBoundingClientRect();\n const inCanvas =\n e.clientX >= rect.left && e.clientX <= rect.right &&\n e.clientY >= rect.top && e.clientY <= rect.bottom;\n if (!inCanvas) {\n setState({ ids: [], best: null, inCanvas: false });\n return;\n }\n const [worldX, worldY] = toWorldRef.current?.(e.clientX, e.clientY)\n ?? clientToWorld(e.clientX, e.clientY, rect, view);\n let ids: readonly string[] = [];\n try {\n ids = pickEvery(worldX, worldY);\n } catch {\n ids = [];\n }\n let best: string | null = null;\n if (pickBest) {\n try { best = pickBest(worldX, worldY); } catch { best = null; }\n }\n setState({ ids, best, inCanvas: true });\n };\n\n document.addEventListener('pointermove', onMove);\n\n return () => {\n document.removeEventListener('pointermove', onMove);\n };\n }, [canvasRef, viewRef, pickEvery, pickBest, toWorldRef]);\n\n if (!style) return null;\n\n return (\n <div ref={ref} className={`${s.hud} ${s.sized}`} style={style}>\n <div className={`${s.header} ${s.muted}`}>pickEvery ({state.ids.length})</div>\n {state.ids.length === 0 ? (\n <div className={s.absent}>{state.inCanvas ? '—' : 'off-canvas'}</div>\n ) : (\n <ul className={s.list}>\n {/* pickEvery returns back-to-front (topmost last). Display top-first. */}\n {state.ids.slice().reverse().map((id) => (\n <li\n key={id}\n className={id === state.best ? `${s.item} ${s.itemBest}` : s.item}\n >\n {id}\n </li>\n ))}\n </ul>\n )}\n </div>\n );\n}\n"],"mappings":";;;;;;;AA8CA,SAAgBE,EAAQ,EAAE,cAAW,cAAW,YAAS,YAAS,cAAW,aAAU,aAAwB;CAC7G,IAAMC,IAAaC,EAAUC,CAAO,GAC9B,CAACC,GAAOC,KAAYC,EAAmB;EAC3C,KAAK,CAAC;EAAG,MAAM;EAAM,UAAU;CACjC,CAAC,GACK,EAAE,QAAK,aAAUC,QACfC,GAAW,WAAWC,EAAU,SAAS,iBAAiBA,EAAU,SAC1E;EACE,OAAO;GAAE,GAAG;GAAO,GAAG;EAAQ;EAC9B,QAAQ;GAAE,GAAGC,GAAQ,SAAS;GAAG,GAAGA,GAAQ,OAAO;EAAG;CACxD,CACF;CA0CA,OAxCAC,QAAgB;EACd,IAAMC,KAAU,MAAoB;GAClC,IAAMC,IAASJ,EAAU,SACnBK,IAAOC,EAAQ;GACrB,IAAI,CAACF,KAAU,CAACC,GAAM;IACpB,EAAS;KAAE,KAAK,CAAC;KAAG,MAAM;KAAM,UAAU;IAAM,CAAC;IACjD;GACF;GACA,IAAME,IAAOH,EAAO,sBAAsB;GAI1C,IAAI,EAFFI,EAAE,WAAWD,EAAK,QAAQC,EAAE,WAAWD,EAAK,SAC5CC,EAAE,WAAWD,EAAK,OAAQC,EAAE,WAAWD,EAAK,SAC/B;IACb,EAAS;KAAE,KAAK,CAAC;KAAG,MAAM;KAAM,UAAU;IAAM,CAAC;IACjD;GACF;GACA,IAAM,CAACE,GAAQC,KAAUlB,EAAW,UAAUgB,EAAE,SAASA,EAAE,OAAO,KAC7DG,EAAcH,EAAE,SAASA,EAAE,SAASD,GAAMF,CAAI,GAC/CO,IAAyB,CAAC;GAC9B,IAAI;IACF,IAAMC,EAAUJ,GAAQC,CAAM;GAChC,QAAQ;IACN,IAAM,CAAC;GACT;GACA,IAAII,IAAsB;GAC1B,IAAIC,GACF,IAAI;IAAE,IAAOA,EAASN,GAAQC,CAAM;GAAG,QAAQ;IAAE,IAAO;GAAM;GAEhE,EAAS;IAAE;IAAK;IAAM,UAAU;GAAK,CAAC;EACxC;EAIA,OAFA,SAAS,iBAAiB,eAAeP,CAAM,SAElC;GACX,SAAS,oBAAoB,eAAeA,CAAM;EACpD;CACF,GAAG;EAACH;EAAWM;EAASO;EAAWE;EAAUvB;CAAU,CAAC,GAEnDwB,IAGH,kBAAC,OAAD;EAAU;EAAK,WAAW,GAAG3B,EAAE,IAAI,GAAGA,EAAE;EAAgB;EAAxD,UAAA,CACE,kBAAC,OAAD;GAAK,WAAW,GAAGA,EAAE,OAAO,GAAGA,EAAE;GAAjC,UAAA;IAA0C;IAAYM,EAAM,IAAI;IAAO;GAAM;EAC5E,CAAA,GAAAA,EAAM,IAAI,WAAW,IACpB,kBAAC,OAAD;GAAK,WAAWN,EAAE;GAAS,UAAAM,EAAM,WAAW,MAAM;EAAkB,CAAA,IAEpE,kBAAC,MAAD;GAAI,WAAWN,EAAE;GAEd,UAAAM,EAAM,IAAI,MAAM,CAAC,CAAC,QAAQ,CAAC,CAAC,KAAK,MAChC,kBAAC,MAAD;IAEE,WAAWsB,MAAOtB,EAAM,OAAO,GAAGN,EAAE,KAAK,GAAGA,EAAE,aAAaA,EAAE;IAE5D,UAAA4B;GACC,GAJGA,CAIH,CACL;EACC,CAAA,CAEH;MApBY;AAsBrB"}
|
|
@@ -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"}
|
|
@@ -0,0 +1,126 @@
|
|
|
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";
|
|
3
|
+
import { pathFromPlane as o } from "../planeClips.js";
|
|
4
|
+
import { useOptionalViewRegistry as s } from "../viewRegistry.js";
|
|
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";
|
|
10
|
+
//#region src/canvas/SceneCanvas/GestureDispatcherMounter.tsx
|
|
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(() => {
|
|
13
|
+
let e = /* @__PURE__ */ new Map();
|
|
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);
|
|
17
|
+
return e;
|
|
18
|
+
}, [
|
|
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,
|
|
26
|
+
getAnchorState: Y
|
|
27
|
+
}), [
|
|
28
|
+
M,
|
|
29
|
+
N,
|
|
30
|
+
P,
|
|
31
|
+
Y
|
|
32
|
+
]);
|
|
33
|
+
ee(() => {
|
|
34
|
+
F && (F.current = X);
|
|
35
|
+
});
|
|
36
|
+
let Z = u(() => {
|
|
37
|
+
if (C && w && k) return n({
|
|
38
|
+
getChromeState: () => H?.surface()?.chromeState() ?? e,
|
|
39
|
+
getView: () => k.current ?? {
|
|
40
|
+
x: 0,
|
|
41
|
+
y: 0,
|
|
42
|
+
scale: {
|
|
43
|
+
x: 1,
|
|
44
|
+
y: 1
|
|
45
|
+
}
|
|
46
|
+
},
|
|
47
|
+
affordances: X,
|
|
48
|
+
...j ? { getIsVisible: () => j() } : {}
|
|
49
|
+
});
|
|
50
|
+
}, [
|
|
51
|
+
C,
|
|
52
|
+
w,
|
|
53
|
+
k,
|
|
54
|
+
X,
|
|
55
|
+
j,
|
|
56
|
+
H
|
|
57
|
+
]), ie = u(() => {
|
|
58
|
+
if (C && E && k) return r(() => C.current?.current ?? [], (e, t) => {
|
|
59
|
+
if (G.current) return G.current(e, t);
|
|
60
|
+
let n = W.current?.(e, t) ?? [];
|
|
61
|
+
return n.length > 0 ? n[n.length - 1] : null;
|
|
62
|
+
}, (e) => K.current?.(e));
|
|
63
|
+
}, [
|
|
64
|
+
C,
|
|
65
|
+
E,
|
|
66
|
+
k,
|
|
67
|
+
G,
|
|
68
|
+
W,
|
|
69
|
+
K
|
|
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
|
|
74
|
+
};
|
|
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(() => ({
|
|
86
|
+
state: Q,
|
|
87
|
+
...R === void 0 ? {} : { duration: R },
|
|
88
|
+
...z === void 0 ? {} : { haptics: z }
|
|
89
|
+
}), [
|
|
90
|
+
Q,
|
|
91
|
+
R,
|
|
92
|
+
z
|
|
93
|
+
]), $ = u(() => {
|
|
94
|
+
if (H) return {
|
|
95
|
+
targets: () => H.list().map((e) => ({
|
|
96
|
+
id: e.id,
|
|
97
|
+
...e.target
|
|
98
|
+
})),
|
|
99
|
+
resolver: H.resolver
|
|
100
|
+
};
|
|
101
|
+
}, [H]);
|
|
102
|
+
return g({
|
|
103
|
+
canvasRef: _,
|
|
104
|
+
actions: B,
|
|
105
|
+
entriesById: U,
|
|
106
|
+
enabled: ne,
|
|
107
|
+
keyboard: x,
|
|
108
|
+
claimKeys: S,
|
|
109
|
+
affordanceAt: oe,
|
|
110
|
+
classifyTarget: ie,
|
|
111
|
+
dispatcher: A,
|
|
112
|
+
clientToWorld: ae,
|
|
113
|
+
requestRedraw: se,
|
|
114
|
+
paintedCursor: ce,
|
|
115
|
+
cursorSink: le,
|
|
116
|
+
getRuleCtx: re,
|
|
117
|
+
onClick: L,
|
|
118
|
+
onDoubleClick: I,
|
|
119
|
+
longPress: ue,
|
|
120
|
+
...$ ? { views: $ } : {}
|
|
121
|
+
}), h("longPress", () => Q), null;
|
|
122
|
+
}
|
|
123
|
+
//#endregion
|
|
124
|
+
export { _ as GestureDispatcherMounter };
|
|
125
|
+
|
|
126
|
+
//# sourceMappingURL=GestureDispatcherMounter.js.map
|
|
@@ -0,0 +1 @@
|
|
|
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":";;;;;;;;;;AAkBA,SAAgBA,EAAyB,EACvC,cACA,iBACA,UACA,kBACA,aACA,aACA,cACA,iBACA,aACA,gBACA,cACA,aACA,eACA,YACA,eACA,0BACA,gBACA,gBACA,oBACA,kBACA,yBACA,kBACA,YACA,WAAW,EAAE,UAAUC,GAAmB,SAASC,MAAqB,CAAC,KA+DxE;CACD,IAAMC,IAAWC,GAAmB,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,CAAW,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,SAAyB;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,GAGzE2B,KAAgBC,GAAa,GAAiB,MAA8C;EAChG,IAAMC,IAAMC,EAAa,SACnB,CAACC,GAAGC,KAAKH,IAAMA,EAAI,cAAcI,GAASC,CAAO,IAAI,CAACD,GAASC,CAAO,GACtEC,IAAQ;GAAE;GAAG;EAAE;EAErB,OADAC,EAAgBH,GAASC,GAASL,IAAMQ,EAAU,UAAU,MAAMnB,GAAS,SAASiB,CAAK,GAClFA;CACT,GAAG;EAACE;EAAWP;EAAcZ;CAAO,CAAC,GAE/BoB,KAAuBlD,SAInB,MAAyC;EAM/C,IAAMmD,IAAQT,EAAa,SAAS,gBAAgBU,EAAW,GAAGA,EAAW,CAAC;EAE9E,OADID,IAAcE,EAAgBF,EAAM,SAASA,EAAM,GAAG,IACnDxB,IAAeA,EAAayB,CAAU,IAAI;CACnD,GACC,CAACzB,GAAce,CAAY,CAAC,GAIzBY,KAAgBd,QAAkB;EACtC,EAAa,SAAS,gBAAgB;CACxC,GAAG,CAACE,CAAY,CAAC,GAIXa,KAAgBf,QAAkBE,EAAa,SAAS,eAAe,CAACA,CAAY,CAAC,GACrFc,KAAahB,QAAkBE,EAAa,SAAS,YAAY,CAACA,CAAY,CAAC,GAG/E,CAACe,KAAkBC,EAASC,CAAoB,GAChDC,KAAY5D,SAAe;EAC/B,OAAOyD;EACP,GAAIlE,MAAsB,KAAA,IAA8C,CAAC,IAAnC,EAAE,UAAUA,EAAkB;EACpE,GAAIC,MAAqB,KAAA,IAA4C,CAAC,IAAjC,EAAE,SAASA,EAAiB;CACnE,IAAI;EAACiE;EAAgBlE;EAAmBC;CAAgB,CAAC,GAKnDqE,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;CA2BjB,OArBAkE,EAAqB;EACnB;EACA,SAAStE;EACT;EACA;EACA;EACA;EACA,cAAcyD;EACd;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA,GAAIW,IAAQ,EAAE,SAAM,IAAI,CAAC;CAC3B,CAAC,GACDG,EAAa,mBAAmBP,CAAc,GACvC;AACT"}
|
|
@@ -1,48 +1,44 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import {
|
|
3
|
-
import {
|
|
4
|
-
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 { PointerContextProvider as r, usePointerContext as i } from "@weasel-js/routing/react";
|
|
5
5
|
import { Fragment as a, jsx as o } from "react/jsx-runtime";
|
|
6
6
|
//#region src/canvas/SceneCanvas/PointerProviderIfRoot.tsx
|
|
7
7
|
function s({ children: e }) {
|
|
8
|
-
return
|
|
8
|
+
return i() ? /* @__PURE__ */ o(a, { children: e }) : /* @__PURE__ */ o(r, { children: e });
|
|
9
9
|
}
|
|
10
|
-
function c({ canvasRef:
|
|
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({
|
|
10
|
+
function c({ canvasRef: r, canvasApiRef: a }) {
|
|
11
|
+
let o = i(), s = e();
|
|
12
|
+
return n(() => {
|
|
13
|
+
if (!o) return;
|
|
14
|
+
let e = r.current;
|
|
15
|
+
if (!e) return;
|
|
16
|
+
let n = (e, n, r) => {
|
|
17
|
+
let i = a.current;
|
|
18
|
+
if (!i) return;
|
|
19
|
+
let c = s?.resolver.at(e, n, r), [l, u] = t(i, c, n, r);
|
|
20
|
+
o.set({
|
|
26
21
|
worldX: l,
|
|
27
22
|
worldY: u,
|
|
28
|
-
viewId:
|
|
23
|
+
viewId: c?.id ?? null
|
|
29
24
|
});
|
|
30
|
-
}, i = (e) =>
|
|
25
|
+
}, i = (e) => n(e.pointerId, e.clientX, e.clientY), c = (e) => {
|
|
31
26
|
if (e.buttons !== 0) {
|
|
32
|
-
|
|
27
|
+
n(e.pointerId, e.clientX, e.clientY);
|
|
33
28
|
return;
|
|
34
29
|
}
|
|
35
|
-
|
|
36
|
-
},
|
|
37
|
-
|
|
30
|
+
o.set(null);
|
|
31
|
+
}, l = (t) => {
|
|
32
|
+
t.target !== e && t.buttons !== 0 && n(t.pointerId, t.clientX, t.clientY);
|
|
38
33
|
};
|
|
39
|
-
return
|
|
40
|
-
|
|
34
|
+
return e.addEventListener("pointermove", i), e.addEventListener("pointerleave", c), document.addEventListener("pointermove", l), () => {
|
|
35
|
+
e.removeEventListener("pointermove", i), e.removeEventListener("pointerleave", c), document.removeEventListener("pointermove", l);
|
|
41
36
|
};
|
|
42
37
|
}, [
|
|
38
|
+
o,
|
|
39
|
+
r,
|
|
43
40
|
a,
|
|
44
|
-
|
|
45
|
-
o
|
|
41
|
+
s
|
|
46
42
|
]), null;
|
|
47
43
|
}
|
|
48
44
|
//#endregion
|
|
@@ -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","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 { 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 onLeave = (e: PointerEvent): void => {\n // Don't clear coords mid-drag: any pointer button down means the user\n // is still actively manipulating the canvas, and downstream consumers\n // (resize/move/etc.) need the latest world position even when the\n // cursor leaves the canvas rect. The `useGestureDispatcher`-side\n // `setPointerCapture` keeps pointermove flowing in that case, so we\n // get fresh values; this guard just prevents the leave event from\n // racing in and nulling them between captured moves.\n if (e.buttons !== 0) {\n publish(e.pointerId, e.clientX, e.clientY);\n return;\n }\n ctx.set(null);\n };\n // Document-level pointermove backstop so the HUD keeps updating when the\n // pointer drifts off the canvas during a drag (pointer capture routes\n // events back to the canvas, but the leave-window edge case is covered\n // here too). Filter to events whose target isn't the canvas to avoid\n // double-publishing.\n const onDocMove = (e: PointerEvent): void => {\n if (e.target === el) return;\n // Only forward off-canvas moves during an active drag — idle hover\n // outside the canvas shouldn't be reported as a canvas pointer position.\n if (e.buttons === 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 };\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":";;;;;;AAgBA,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;CAqDzC,OApDAC,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,KAAW,MAA0B;GAQzC,IAAI,EAAE,YAAY,GAAG;IACnB,EAAQ,EAAE,WAAW,EAAE,SAAS,EAAE,OAAO;IACzC;GACF;GACA,EAAI,IAAI,IAAI;EACd,GAMMC,KAAa,MAA0B;GAC3C,AAAIC,EAAE,WAAWf,KAGbe,EAAE,YAAY,KAClBb,EAAQa,EAAE,WAAWA,EAAE,SAASA,EAAE,OAAO;EAC3C;EAIA,OAHAf,EAAG,iBAAiB,eAAeY,CAAM,GACzCZ,EAAG,iBAAiB,gBAAgBa,CAAO,GAC3C,SAAS,iBAAiB,eAAeC,CAAS,SACrC;GAGX,AAFAd,EAAG,oBAAoB,eAAeY,CAAM,GAC5CZ,EAAG,oBAAoB,gBAAgBa,CAAO,GAC9C,SAAS,oBAAoB,eAAeC,CAAS;EACvD;CAGF,GAAG;EAAClB;EAAKK;EAAWG;EAAcP;CAAQ,CAAC,GACpC;AACT"}
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
import { useDecayLoop as e } from "../../core/viewport/useDecayLoop.js";
|
|
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 { useLayoutArrivals as i } from "../../layout/arrivals.js";
|
|
6
|
+
import { useViewDepSource as a } from "../deps/view.js";
|
|
7
|
+
import { useAreaSelectDepSource as o } from "../deps/areaSelect.js";
|
|
8
|
+
import { useNodeAtPointDepSource as s } from "../deps/nodeAtPoint.js";
|
|
9
|
+
import { useLassoSelectDepSource as c } from "../deps/lassoSelect.js";
|
|
10
|
+
import { useTextEditDepSource as l } from "../deps/textEdit.js";
|
|
11
|
+
import { useEditAnchorsDepSource as u } from "../deps/editAnchors.js";
|
|
12
|
+
import { useInsertDepSource as d } from "../deps/insert.js";
|
|
13
|
+
import { useSnapDepSource as f } from "../deps/snap.js";
|
|
14
|
+
import { useDebugDepSource as p } from "../deps/debug.js";
|
|
15
|
+
import { useDepChangeNotices as m } from "../deps/changes.js";
|
|
16
|
+
import { useDispatcherDepSource as h } from "../deps/dispatcher.js";
|
|
17
|
+
import { useLayoutDepSource as g } from "../deps/layout.js";
|
|
18
|
+
import { useIngestionDepSource as ee } from "../deps/ingestion.js";
|
|
19
|
+
import { GeometryProjectionRegistrar as te, ResizePolicyRegistrar as ne } from "./poseRegistrars.js";
|
|
20
|
+
import { useActionsPropResolver as re } from "./useActionsPropResolver.js";
|
|
21
|
+
import { useViewportActions as ie } from "./useViewportActions.js";
|
|
22
|
+
import { useEffect as _ } from "react";
|
|
23
|
+
import { useActionsRegistry as v, useDepSource as y, usePointerContext as b } from "@weasel-js/routing/react";
|
|
24
|
+
import { Fragment as x, jsx as S, jsxs as C } from "react/jsx-runtime";
|
|
25
|
+
//#region src/canvas/SceneCanvas/StandardActionsRegistrar.tsx
|
|
26
|
+
function w({ selection: w, scene: T, adapter: E, actions: D, excludeActions: O, currentViewRef: k, onViewChange: A, resizeOptions: j, poseDescriptor: M, geometryProjection: N, dispatcher: P, getActionRef: F, pickEvery: I, layerIsPainted: ae, alphaOf: L, viewportPanEnabled: R, viewportZoom: z, viewportPinchZoom: B, viewportRecenter: V, viewAnimation: H, editAnchorsExternalState: U, layouts: W, layoutDropTarget: G, reflowTransition: K, insertNodeFactories: q, insertPaint: J, snapPoint: oe, canvasRef: Y, canvasApiRef: se, ingestionResolveSrc: ce, ingestionSvg: le, ingestionClipboard: ue, actionsRegistryRef: X }) {
|
|
27
|
+
let Z = v();
|
|
28
|
+
_(() => (X.current = Z, () => {
|
|
29
|
+
X.current = null;
|
|
30
|
+
}), [Z, X]), _(() => {
|
|
31
|
+
if (Z) return Z.setDispatcher(P);
|
|
32
|
+
}, [Z, P]), _(() => {
|
|
33
|
+
if (Z) return F.current = (e) => Z.list().find((t) => t.id === e), () => {
|
|
34
|
+
F.current = null;
|
|
35
|
+
};
|
|
36
|
+
}, [Z, F]);
|
|
37
|
+
let Q = e(), $ = a(k, A, V, () => {
|
|
38
|
+
let e = Y.current;
|
|
39
|
+
return e ? {
|
|
40
|
+
width: e.clientWidth,
|
|
41
|
+
height: e.clientHeight
|
|
42
|
+
} : null;
|
|
43
|
+
}, H, Q, ae);
|
|
44
|
+
t({
|
|
45
|
+
selection: w,
|
|
46
|
+
scene: T,
|
|
47
|
+
view: $,
|
|
48
|
+
history: T.history,
|
|
49
|
+
exclude: O
|
|
50
|
+
}), y("rootView", () => $);
|
|
51
|
+
let de = b();
|
|
52
|
+
return y("pointer", () => de ?? void 0), ie({
|
|
53
|
+
pan: R,
|
|
54
|
+
zoom: z,
|
|
55
|
+
pinchZoom: B
|
|
56
|
+
}), o(T, w, M, L), s(I), g(T, W, G, K), i(T, {
|
|
57
|
+
layouts: W,
|
|
58
|
+
poseDescriptor: M
|
|
59
|
+
}), d(T, E, q, J), r(T, w, E, M), f(oe), p(se), m(T, w.current), ee(Y, () => k.current, ce, le, ue), c(T, w, M, L), l(T), u(T, w, E, U), h(P), n(M), re(D, O.join("|")), /* @__PURE__ */ C(x, { children: [j ? /* @__PURE__ */ S(ne, { options: j }) : null, N ? /* @__PURE__ */ S(te, { projection: N }) : null] });
|
|
60
|
+
}
|
|
61
|
+
//#endregion
|
|
62
|
+
export { w as StandardActionsRegistrar };
|
|
63
|
+
|
|
64
|
+
//# sourceMappingURL=StandardActionsRegistrar.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"StandardActionsRegistrar.js","names":["_Fragment","StandardActionsRegistrar","registry","useActionsRegistry","useEffect","actionsRegistryRef","dispatcher","a","id","getActionRef","decayLoop","useDecayLoop","view","useViewDepSource","currentViewRef","onViewChange","viewportRecenter","el","canvasRef","viewAnimation","layerIsPainted","useStandardActions","scene","excludeActions","useDepSource","pointer","usePointerContext","useViewportActions","viewportPanEnabled","viewportZoom","viewportPinchZoom","useAreaSelectDepSource","selection","poseDescriptor","alphaOf","useNodeAtPointDepSource","pickEvery","useLayoutDepSource","layouts","layoutDropTarget","reflowTransition","useLayoutArrivals","useInsertDepSource","adapter","insertNodeFactories","insertPaint","useSliceDepSource","useSnapDepSource","snapPoint","useDebugDepSource","canvasApiRef","useDepChangeNotices","useIngestionDepSource","ingestionResolveSrc","ingestionSvg","ingestionClipboard","useLassoSelectDepSource","useTextEditDepSource","useEditAnchorsDepSource","editAnchorsExternalState","useDispatcherDepSource","usePoseDescriptorDepSource","useActionsPropResolver","actions","Fragment","resizeOptions","ResizePolicyRegistrar","geometryProjection","GeometryProjectionRegistrar"],"sources":["../../../src/canvas/SceneCanvas/StandardActionsRegistrar.tsx"],"sourcesContent":["import type { Action, ActionsProp, ActionsRegistry } from '@weasel-js/routing';\nimport type { Dispatcher } from '@weasel-js/routing';\nimport { useActionsRegistry, useDepSource, usePointerContext } from '@weasel-js/routing/react';\nimport type { Scene } from 'core/scene/types';\nimport type { SelectionApi } from 'core/selection/useSelection';\nimport { useDecayLoop } from 'core/viewport/useDecayLoop';\nimport type { ViewAnimationApi } from 'core/viewport/useViewAnimation';\nimport type { View } from 'core/viewport/view';\nimport type { PinchZoomOptions } from 'interactions/actions/defaults/pinchZoom';\nimport type { WheelPanOptions } from 'interactions/actions/defaults/viewportWheelPan';\nimport type { ViewportZoomOptions } from 'interactions/actions/defaults/viewportZoom';\nimport type { ClipboardIngestCtx, SvgIngestOptions } from 'interactions/actions/depSchema';\nimport type { GeometryProjection } from 'interactions/actions/geometryProjection';\nimport type { PoseDescriptor } from 'interactions/actions/resize/geometry';\nimport type { UseResizeOptions } from 'interactions/actions/resize/options';\nimport { useStandardActions } from 'interactions/actions/useStandardActions';\nimport type React from 'react';\nimport { useEffect } from 'react';\nimport { useLayoutArrivals } from '../../layout/arrivals';\nimport type { LayoutDropTargetMode, ReflowTransition } from '../../layout/types';\nimport type { CanvasExtensionApi } from '../canvasExtension';\nimport {\n useAreaSelectDepSource,\n useDebugDepSource,\n useDepChangeNotices,\n useDispatcherDepSource,\n useEditAnchorsDepSource,\n useIngestionDepSource,\n useInsertDepSource,\n useLassoSelectDepSource,\n useLayoutDepSource,\n useNodeAtPointDepSource,\n usePoseDescriptorDepSource,\n useSliceDepSource,\n useSnapDepSource,\n useTextEditDepSource,\n useViewDepSource,\n type InsertNodeFactory,\n type InsertPaint\n} from '../deps';\nimport { GeometryProjectionRegistrar, ResizePolicyRegistrar } from './poseRegistrars';\nimport type { BridgeAdapter, SceneCanvasProps } from './props';\nimport { useActionsPropResolver } from './useActionsPropResolver';\nimport { useViewportActions } from './useViewportActions';\n\n/**\n * Registers the kit's default action set into this canvas's input scope.\n *\n * For `delete`, `duplicate`, `group`, and `ungroup` the descriptor's\n * invoker is a stub (those deps aren't in `DepSchema` yet — Phase 4 T8\n * TODO). This component registers legacy bridge overrides for them so the\n * consumer-facing `run` path is functional. The overrides land after the\n * descriptor registrations (last-writer-wins) and use the same id, so the\n * dispatcher and keybinding system see a real `run` body.\n */\nexport function StandardActionsRegistrar({\n selection,\n scene,\n adapter,\n actions,\n excludeActions,\n currentViewRef,\n onViewChange,\n resizeOptions,\n poseDescriptor,\n geometryProjection,\n dispatcher,\n getActionRef,\n pickEvery,\n layerIsPainted,\n alphaOf,\n viewportPanEnabled,\n viewportZoom,\n viewportPinchZoom,\n viewportRecenter,\n viewAnimation,\n editAnchorsExternalState,\n layouts,\n layoutDropTarget,\n reflowTransition,\n insertNodeFactories,\n insertPaint,\n snapPoint,\n canvasRef,\n canvasApiRef,\n ingestionResolveSrc,\n ingestionSvg,\n ingestionClipboard,\n actionsRegistryRef,\n}: {\n selection: SelectionApi;\n scene: Scene<unknown, string, unknown>;\n adapter: BridgeAdapter;\n actions?: ActionsProp;\n /** Kit-standard action ids this canvas's presets and tools leave out. */\n excludeActions: readonly string[];\n currentViewRef: React.RefObject<View>;\n onViewChange: (v: View) => void;\n /** Forwarded from `selectTool.resize` — wires the `resizePolicy` dep\n * consumed by the dispatcher-path `resizeAction`. The legacy\n * `useResizeTool` consumes the same options separately (both paths run\n * in parallel during the dispatcher migration). */\n resizeOptions?: UseResizeOptions<unknown>;\n /** Forwarded from `SceneCanvasProps.poseDescriptor` — wires the\n * `poseDescriptor` dep every built-in pose-touching action reads. */\n poseDescriptor: PoseDescriptor<unknown>;\n /** Forwarded from `SceneCanvasProps.geometryProjection` — wires the\n * `geometryProjection` dep consumed by pose-transform actions (move,\n * resize, nudge, flip). Conditionally mounted so absent → dep undefined. */\n geometryProjection?: GeometryProjection;\n /** Forwarded so `cancelGestureAction` and other actions that need to\n * abort in-flight handles can read the dispatcher's control surface. */\n dispatcher: Dispatcher;\n /** Ref populated with a live action-lookup function so the dispatcher's\n * `getAction` closure can resolve action ids after the registry is\n * mounted. Set on first render; cleared on unmount. */\n getActionRef: React.MutableRefObject<((id: string) => Action | undefined) | null>;\n /** World-space picker forwarded so the `nodeAtPoint` dep source can\n * reuse the same hit-test plumbing the tool dispatcher uses. */\n pickEvery: (worldX: number, worldY: number) => string[];\n /** This canvas's own view gate for scene layers, published on the `view`\n * dep and read by the selecting actions. Absent when it hides nothing. */\n layerIsPainted?: (layerId: string) => boolean;\n /** The composed paint alpha, when the consumer fades anything, so a region\n * select passes over what is painted at zero. */\n alphaOf?: (id: string) => number;\n /** Resolved `viewport.pan` flag — default true, false to disable. */\n viewportPanEnabled: boolean | WheelPanOptions;\n /** Resolved `viewport.zoom` setting — `true` (default Cmd+wheel zoom),\n * `false` (disabled), or a {@link ViewportZoomOptions} config. */\n viewportZoom: boolean | ViewportZoomOptions;\n /** Resolved `viewport.pinchZoom` setting — `true` (default two-finger pinch),\n * `false` (disabled), or a {@link PinchZoomOptions} scale clamp. */\n viewportPinchZoom: boolean | PinchZoomOptions;\n /** Optional recenter callback. When supplied, wires through to the\n * `view` dep so `viewport.zoom` reset (Cmd-0) calls it instead of\n * snapping to identity. A returned `View` is a target the kit may\n * animate to; `void` means the callback dispatched it itself. */\n viewportRecenter?: () => View | void;\n /** The canvas's camera runner, published on the `view` dep so\n * `viewport.zoom`'s discrete branches can animate. */\n viewAnimation: ViewAnimationApi;\n /** Lifted edit-mode state so the `pathEditingOverlay` chrome (rendered\n * outside this subtree) can read the same `editingId` the dep does. */\n editAnchorsExternalState: import('../deps/editAnchors').EditAnchorsStateRef;\n /** Forwarded from `SceneCanvasProps` so the `layout` dep source can wire\n * the per-container layout strategy lookup consumed by `moveAction`. */\n layouts?: SceneCanvasProps<unknown, string, unknown>['layouts'];\n layoutDropTarget?: LayoutDropTargetMode;\n reflowTransition?: ReflowTransition<unknown> | null;\n /** Forwarded from `SceneCanvasProps` so `useInsertDepSource` can wire the\n * consumer's per-kind node factories into the `insert` dep. */\n insertNodeFactories?: Record<string, InsertNodeFactory>;\n insertPaint?: InsertPaint;\n /** Forwarded from `SceneCanvasProps.toolOptions.snapPoint` so the `snap`\n * dep source can expose grid snapping to `insertAction`. */\n snapPoint?: (p: { x: number; y: number }) => { x: number; y: number };\n /** The canvas element ref, so `useIngestionDepSource` can compute the\n * visible world rect from the client rect + current view. */\n canvasRef: React.RefObject<HTMLElement | null>;\n /** The canvas handle, whose debug sink backs the `debug` dep. */\n canvasApiRef: React.RefObject<CanvasExtensionApi | null>;\n /** Forwarded from `SceneCanvasProps.ingestion.resolveSrc` — consumer\n * file→src override for the kit image handler. */\n ingestionResolveSrc?: (file: File) => Promise<string>;\n /** Forwarded from `SceneCanvasProps.ingestion.svg` — kit SVG-handler\n * options (`unpack`). */\n ingestionSvg?: SvgIngestOptions;\n /** Clipboard-paste ctx (this canvas's adapter + the consumer's reviver)\n * for the kit weasel-JSON handler, from `useCanvasIngestion`; absent\n * when disabled. */\n ingestionClipboard?: ClipboardIngestCtx;\n /** Populated with the live registry so `CanvasExtensionApi.ingest`\n * (assembled in SceneCanvasInner, OUTSIDE the actions provider) can call\n * `registry.trigger('ingest', …)`. Cleared on unmount. */\n actionsRegistryRef: React.MutableRefObject<ActionsRegistry | null>;\n}) {\n const registry = useActionsRegistry();\n\n // Stash the registry for SceneCanvasInner's imperative `ingest` handle.\n useEffect(() => {\n actionsRegistryRef.current = registry;\n return () => { actionsRegistryRef.current = null; };\n }, [registry, actionsRegistryRef]);\n\n // Wire the dispatcher into the registry so registry.begin() can delegate\n // to dispatcher.beginUiOngoing() for UI-driven ongoing actions (color,\n // opacity).\n useEffect(() => {\n if (!registry) return;\n return registry.setDispatcher(dispatcher);\n }, [registry, dispatcher]);\n\n // Populate the action-lookup ref so the dispatcher's getAction closure\n // can resolve action ids once the registry is in scope.\n useEffect(() => {\n if (!registry) return;\n getActionRef.current = (id: string) => registry.list().find((a) => a.id === id);\n return () => { getActionRef.current = null; };\n }, [registry, getActionRef]);\n\n // Momentum for `viewport.dragPan`. The loop must be a hook (it owns a\n // `useVisibleRaf`), so it is built here and republished on the view dep.\n const decayLoop = useDecayLoop();\n\n // Build the ViewApi (stable identity, refreshed closures) and hand it to\n // useStandardActions (which publishes the `view` dep along with selection,\n // scene, history, pointer, activeTool). `hostSize` reads the live canvas\n // element so keyboard zoom (Cmd+=/-) can anchor at the visible center.\n const view = useViewDepSource(\n currentViewRef,\n onViewChange,\n viewportRecenter,\n () => {\n const el = canvasRef.current;\n return el ? { width: el.clientWidth, height: el.clientHeight } : null;\n },\n viewAnimation,\n decayLoop,\n layerIsPainted,\n );\n useStandardActions({ selection, scene, view, history: scene.history, exclude: excludeActions });\n // A view overlays `view` with its own camera; this name it leaves alone.\n useDepSource('rootView', () => view);\n const pointer = usePointerContext();\n useDepSource('pointer', () => pointer ?? undefined);\n\n // viewport.pan / viewport.zoom are SceneCanvas-coupled (need the `view` dep\n // published just above), so they're registered here rather than in\n // KIT_STANDARD_DESCRIPTORS. Both default ON; consumer opts out via\n // `viewport={{ pan: false }}` / `viewport={{ zoom: false }}`.\n useViewportActions({ pan: viewportPanEnabled, zoom: viewportZoom, pinchZoom: viewportPinchZoom });\n\n // Per-dep wiring modules under `src/canvas/deps/`. See each file for the\n // dep's contract and trade-offs.\n useAreaSelectDepSource(scene, selection, poseDescriptor, alphaOf);\n useNodeAtPointDepSource(pickEvery);\n useLayoutDepSource(scene, layouts, layoutDropTarget, reflowTransition);\n useLayoutArrivals(scene, { layouts, poseDescriptor });\n useInsertDepSource(scene, adapter, insertNodeFactories, insertPaint);\n useSliceDepSource(scene, selection, adapter, poseDescriptor);\n useSnapDepSource(snapPoint);\n useDebugDepSource(canvasApiRef);\n useDepChangeNotices(scene, selection.current);\n useIngestionDepSource(canvasRef, () => currentViewRef.current, ingestionResolveSrc, ingestionSvg, ingestionClipboard);\n useLassoSelectDepSource(scene, selection, poseDescriptor, alphaOf);\n useTextEditDepSource(scene);\n useEditAnchorsDepSource(scene, selection, adapter, editAnchorsExternalState);\n useDispatcherDepSource(dispatcher);\n usePoseDescriptorDepSource(poseDescriptor);\n\n // Keyed on the exclusion too: a re-registration of the standard set would\n // otherwise land over the overrides applied on top of it.\n useActionsPropResolver(actions, excludeActions.join('|'));\n\n // Gate the `resizePolicy` dep registration on the consumer having\n // passed `selectTool.resize`. When absent, consumers wire it via a child\n // component (see PointSnapDemo / GroupsDemo). Registering empty defaults\n // here would race with child-component registrations — React runs child\n // effects before parent effects, so the parent's empty default would\n // overwrite the child's real value. The conditional mount avoids that.\n //\n // Same pattern for `geometryProjection`: only mount when the consumer\n // passed the prop so absent → dep undefined → actions stay pose-only.\n return (\n <>\n {resizeOptions ? <ResizePolicyRegistrar options={resizeOptions} /> : null}\n {geometryProjection ? <GeometryProjectionRegistrar projection={geometryProjection} /> : null}\n </>\n );\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;AAuDA,SAAgBC,EAAyB,EACvC,cACA,UACA,YACA,YACA,mBACA,mBACA,iBACA,kBACA,mBACA,uBACA,eACA,iBACA,cACA,oBACA,YACA,uBACA,iBACA,sBACA,qBACA,kBACA,6BACA,YACA,qBACA,qBACA,wBACA,gBACA,eACA,cACA,kBACA,yBACA,kBACA,wBACA,yBAwFC;CACD,IAAMC,IAAWC,EAAmB;CAkBpC,AAfAC,SACE,EAAmB,UAAUF,SAChB;EAAE,EAAmB,UAAU;CAAM,IACjD,CAACA,GAAUG,CAAkB,CAAC,GAKjCD,QAAgB;EACd,IAAKF,GACL,OAAOA,EAAS,cAAcI,CAAU;CAC1C,GAAG,CAACJ,GAAUI,CAAU,CAAC,GAIzBF,QAAgB;EACd,IAAKF,GAEL,OADA,EAAa,WAAW,MAAeA,EAAS,KAAK,CAAC,CAAC,MAAM,MAAMK,EAAE,OAAOC,CAAE,SACjE;GAAE,EAAa,UAAU;EAAM;CAC9C,GAAG,CAACN,GAAUO,CAAY,CAAC;CAI3B,IAAMC,IAAYC,EAAa,GAMzBC,IAAOC,EACXC,GACAC,GACAC,SACM;EACJ,IAAMC,IAAKC,EAAU;EACrB,OAAOD,IAAK;GAAE,OAAOA,EAAG;GAAa,QAAQA,EAAG;EAAa,IAAI;CACnE,GACAE,GACAT,GACAU,EACF;CAGA,AAFAC,EAAmB;EAAE;EAAW;EAAO;EAAM,SAASC,EAAM;EAAS,SAASC;CAAe,CAAC,GAE9FC,EAAa,kBAAkBZ,CAAI;CACnC,IAAMa,KAAUC,EAAkB;CAwClC,OAvCAF,EAAa,iBAAiBC,MAAW,KAAA,CAAS,GAMlDE,GAAmB;EAAE,KAAKC;EAAoB,MAAMC;EAAc,WAAWC;CAAkB,CAAC,GAIhGC,EAAuBT,GAAOU,GAAWC,GAAgBC,CAAO,GAChEC,EAAwBC,CAAS,GACjCC,EAAmBf,GAAOgB,GAASC,GAAkBC,CAAgB,GACrEC,EAAkBnB,GAAO;EAAE;EAAS;CAAe,CAAC,GACpDoB,EAAmBpB,GAAOqB,GAASC,GAAqBC,CAAW,GACnEC,EAAkBxB,GAAOU,GAAWW,GAASV,CAAc,GAC3Dc,EAAiBC,EAAS,GAC1BC,EAAkBC,EAAY,GAC9BC,EAAoB7B,GAAOU,EAAU,OAAO,GAC5CoB,GAAsBlC,SAAiBJ,EAAe,SAASuC,IAAqBC,IAAcC,EAAkB,GACpHC,EAAwBlC,GAAOU,GAAWC,GAAgBC,CAAO,GACjEuB,EAAqBnC,CAAK,GAC1BoC,EAAwBpC,GAAOU,GAAWW,GAASgB,CAAwB,GAC3EC,EAAuBtD,CAAU,GACjCuD,EAA2B5B,CAAc,GAIzC6B,GAAuBC,GAASxC,EAAe,KAAK,GAAG,CAAC,GAYtD,kBAAAvB,GAAA,EAAA,UAAA,CACGiE,IAAgB,kBAACC,IAAD,EAAuB,SAASD,EAAgB,CAAA,IAAI,MACpEE,IAAqB,kBAACC,IAAD,EAA6B,YAAYD,EAAqB,CAAA,IAAI,IACxF,EAAA,CAAA;AAEN"}
|