@weasel-js/core 1.9.4 → 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 +750 -0
- package/README.md +5 -3
- package/dist/WeaselProvider.js +5 -7
- package/dist/WeaselProvider.js.map +1 -1
- package/dist/affordances/composeAffordanceLayer.js +91 -83
- package/dist/affordances/composeAffordanceLayer.js.map +1 -1
- package/dist/affordances/cornerResize.js +3 -2
- package/dist/affordances/cornerResize.js.map +1 -1
- package/dist/affordances/hitAffordanceRegions.js +54 -100
- package/dist/affordances/hitAffordanceRegions.js.map +1 -1
- package/dist/affordances/pathAnchors.js.map +1 -1
- package/dist/affordances/rotationHandle.js +5 -4
- package/dist/affordances/rotationHandle.js.map +1 -1
- package/dist/animation/behaviors/coast.js +21 -0
- package/dist/animation/behaviors/coast.js.map +1 -0
- package/dist/animation/behaviors/coastByWrite.js +107 -0
- package/dist/animation/behaviors/coastByWrite.js.map +1 -0
- package/dist/animation/behaviors/coastOnTargets.js +94 -0
- package/dist/animation/behaviors/coastOnTargets.js.map +1 -0
- package/dist/animation/behaviors/momentum.js +48 -136
- package/dist/animation/behaviors/momentum.js.map +1 -1
- package/dist/animation/clipTargets.js +12 -0
- package/dist/animation/clipTargets.js.map +1 -0
- package/dist/animation/index.js +15 -20
- package/dist/animation/poseHelpers.js +112 -33
- package/dist/animation/poseHelpers.js.map +1 -1
- package/dist/animation/poseTarget.js +115 -0
- package/dist/animation/poseTarget.js.map +1 -0
- package/dist/animation/reflow.js +113 -83
- package/dist/animation/reflow.js.map +1 -1
- package/dist/animation/rewind.js +66 -0
- package/dist/animation/rewind.js.map +1 -0
- package/dist/animation/rig/bindRig.js +85 -53
- package/dist/animation/rig/bindRig.js.map +1 -1
- package/dist/animation/rig/rigNode.js +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 +8 -7
- package/dist/animation/wrappers/animateLifecycle.js.map +1 -1
- package/dist/animation/wrappers/animateOnSetPose.js +31 -31
- package/dist/animation/wrappers/animateOnSetPose.js.map +1 -1
- package/dist/animation/wrappers/instantPose.js.map +1 -1
- package/dist/animation/writtenPoseTarget.js +33 -0
- package/dist/animation/writtenPoseTarget.js.map +1 -0
- package/dist/autoPoseDescriptor-DHg5KqaJ.d.ts +27 -0
- package/dist/barrel/canvas.js +31 -0
- package/dist/barrel/chrome.js +10 -10
- package/dist/barrel/input.js +16 -17
- package/dist/barrel/interactions.js +35 -39
- package/dist/barrel/paint.js +11 -18
- package/dist/barrel/paths.js +12 -19
- package/dist/barrel/renderer.js +14 -20
- package/dist/barrel/routing.js +42 -36
- package/dist/barrel/scene.js +37 -0
- package/dist/barrel/text.js +9 -18
- package/dist/barrel/viewport.js +41 -51
- package/dist/canvas/Canvas.js +281 -475
- package/dist/canvas/Canvas.js.map +1 -1
- package/dist/canvas/CanvasView.js +169 -188
- package/dist/canvas/CanvasView.js.map +1 -1
- package/dist/canvas/CursorCoordsHud.js +22 -23
- package/dist/canvas/CursorCoordsHud.js.map +1 -1
- package/dist/canvas/DrawCanvas.js +39 -56
- package/dist/canvas/DrawCanvas.js.map +1 -1
- package/dist/canvas/ModalityHud.js.map +1 -1
- package/dist/canvas/NodeShape.js +28 -29
- package/dist/canvas/NodeShape.js.map +1 -1
- package/dist/canvas/PickHud.js.map +1 -1
- package/dist/canvas/SceneCanvas/DevHuds.js +40 -0
- package/dist/canvas/SceneCanvas/DevHuds.js.map +1 -0
- package/dist/canvas/SceneCanvas/GestureDispatcherMounter.js +66 -107
- package/dist/canvas/SceneCanvas/GestureDispatcherMounter.js.map +1 -1
- package/dist/canvas/SceneCanvas/PointerProviderIfRoot.js +27 -31
- package/dist/canvas/SceneCanvas/PointerProviderIfRoot.js.map +1 -1
- package/dist/canvas/SceneCanvas/StandardActionsRegistrar.js +51 -54
- package/dist/canvas/SceneCanvas/StandardActionsRegistrar.js.map +1 -1
- package/dist/canvas/SceneCanvas/ToolKeybindingsMounter.js +3 -3
- package/dist/canvas/SceneCanvas/ToolKeybindingsMounter.js.map +1 -1
- package/dist/canvas/SceneCanvas/coordTrace.js +37 -1
- package/dist/canvas/SceneCanvas/coordTrace.js.map +1 -1
- package/dist/canvas/SceneCanvas/defaultNodeProperties.js +40 -29
- package/dist/canvas/SceneCanvas/defaultNodeProperties.js.map +1 -1
- package/dist/canvas/SceneCanvas/defaultNodeRouting.js +1 -1
- package/dist/canvas/SceneCanvas/defaultNodeRouting.js.map +1 -1
- package/dist/canvas/SceneCanvas/dispatcherGestureBounds.js.map +1 -1
- package/dist/canvas/SceneCanvas/features.js +73 -43
- package/dist/canvas/SceneCanvas/features.js.map +1 -1
- package/dist/canvas/SceneCanvas/isDev.js.map +1 -1
- package/dist/canvas/SceneCanvas/poseGeometry.js +33 -37
- package/dist/canvas/SceneCanvas/poseGeometry.js.map +1 -1
- package/dist/canvas/SceneCanvas/props.js +15 -14
- package/dist/canvas/SceneCanvas/props.js.map +1 -1
- package/dist/canvas/SceneCanvas/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.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 +39 -37
- 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 +76 -80
- 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 +303 -707
- package/dist/canvas/SceneCanvas.js.map +1 -1
- package/dist/canvas/SceneViewCanvas.js +41 -47
- package/dist/canvas/SceneViewCanvas.js.map +1 -1
- package/dist/canvas/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 +81 -61
- package/dist/canvas/buildSceneLayer.js.map +1 -1
- package/dist/canvas/buildSceneTree.js.map +1 -1
- package/dist/canvas/canvasRenderer.js +40 -44
- package/dist/canvas/canvasRenderer.js.map +1 -1
- package/dist/canvas/colorOverrides.js.map +1 -1
- package/dist/canvas/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/debug.js.map +1 -1
- package/dist/canvas/deps/editAnchors.js +49 -68
- 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 +65 -54
- 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 +44 -45
- package/dist/canvas/deps/slice.js.map +1 -1
- package/dist/canvas/deps/textEdit.js +8 -8
- package/dist/canvas/deps/textEdit.js.map +1 -1
- package/dist/canvas/deps/view.js.map +1 -1
- package/dist/canvas/derivedPath.js +43 -41
- package/dist/canvas/derivedPath.js.map +1 -1
- package/dist/canvas/drawEnvelope.js +8 -4
- package/dist/canvas/drawEnvelope.js.map +1 -1
- package/dist/canvas/getNodeAtPoint.js +2 -6
- package/dist/canvas/getNodeAtPoint.js.map +1 -1
- package/dist/canvas/hud.module.js.map +1 -1
- package/dist/canvas/insertPreviewExtent.js.map +1 -1
- package/dist/canvas/layerOrder.js.map +1 -1
- package/dist/canvas/layerSlots.js +6 -1
- package/dist/canvas/layerSlots.js.map +1 -1
- package/dist/canvas/nodeShapes/derivedPainter.js +12 -12
- package/dist/canvas/nodeShapes/derivedPainter.js.map +1 -1
- package/dist/canvas/nodeShapes/imagePainter.js +10 -10
- package/dist/canvas/nodeShapes/imagePainter.js.map +1 -1
- package/dist/canvas/nodeShapes/memo.js.map +1 -1
- package/dist/canvas/nodeShapes/nodePaint.js +34 -23
- package/dist/canvas/nodeShapes/nodePaint.js.map +1 -1
- package/dist/canvas/nodeShapes/pathPainter.js +23 -22
- package/dist/canvas/nodeShapes/pathPainter.js.map +1 -1
- package/dist/canvas/nodeShapes/poseBox.js +6 -6
- package/dist/canvas/nodeShapes/poseBox.js.map +1 -1
- package/dist/canvas/nodeShapes/rectFallbackPainter.js +8 -8
- package/dist/canvas/nodeShapes/rectFallbackPainter.js.map +1 -1
- package/dist/canvas/nodeShapes/shapePainter.js +16 -16
- package/dist/canvas/nodeShapes/shapePainter.js.map +1 -1
- package/dist/canvas/nodeShapes/textPainter.js +1 -1
- package/dist/canvas/nodeShapes/textPainter.js.map +1 -1
- package/dist/canvas/overlayRoleStrokes.js.map +1 -1
- package/dist/canvas/paintCull.js +6 -8
- package/dist/canvas/paintCull.js.map +1 -1
- package/dist/{features/cursor → canvas}/paintedCursorLayer.js +2 -2
- package/dist/canvas/paintedCursorLayer.js.map +1 -0
- package/dist/canvas/pickWalk.js +52 -50
- package/dist/canvas/pickWalk.js.map +1 -1
- package/dist/canvas/planeClips.js +18 -19
- package/dist/canvas/planeClips.js.map +1 -1
- package/dist/canvas/poseCascade.js +41 -0
- package/dist/canvas/poseCascade.js.map +1 -0
- package/dist/canvas/poseRotation.js +1 -3
- package/dist/canvas/poseRotation.js.map +1 -1
- package/dist/canvas/rasterReadback.js +22 -0
- package/dist/canvas/rasterReadback.js.map +1 -0
- package/dist/canvas/renderDebugSnapshot.js +12 -12
- package/dist/canvas/renderDebugSnapshot.js.map +1 -1
- package/dist/canvas/renderNeeds.js +3 -3
- package/dist/canvas/renderNeeds.js.map +1 -1
- package/dist/canvas/renderSceneToPixels.js +64 -83
- package/dist/canvas/renderSceneToPixels.js.map +1 -1
- package/dist/canvas/sceneAdapter.js +68 -132
- package/dist/canvas/sceneAdapter.js.map +1 -1
- package/dist/canvas/sceneClipboard.js +1 -1
- package/dist/canvas/sceneClipboard.js.map +1 -1
- package/dist/canvas/sceneLayerPaint.js +4 -4
- package/dist/canvas/sceneLayerPaint.js.map +1 -1
- package/dist/canvas/sceneSlotWiring.js +4 -4
- package/dist/canvas/sceneSlotWiring.js.map +1 -1
- package/dist/canvas/sceneViewRender.js +36 -35
- 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 +23 -11
- package/dist/canvas/useCanvasRenderer.js.map +1 -1
- package/dist/canvas/useCanvasSurface.js +31 -0
- package/dist/canvas/useCanvasSurface.js.map +1 -0
- package/dist/canvas/useCanvasView.js +46 -37
- package/dist/canvas/useCanvasView.js.map +1 -1
- package/dist/canvas/useFrameLoop.js +11 -12
- package/dist/canvas/useFrameLoop.js.map +1 -1
- package/dist/canvas/useHostAnchor.js +35 -33
- package/dist/canvas/useHostAnchor.js.map +1 -1
- package/dist/canvas/useLateContentRedraw.js +8 -8
- package/dist/canvas/useLateContentRedraw.js.map +1 -1
- package/dist/canvas/useSceneLayerList.js +4 -14
- package/dist/canvas/useSceneLayerList.js.map +1 -1
- 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 +7 -14
- package/dist/{types-B4iJRHC3.d.ts → clone-2a5hVbBd.d.ts} +122 -77
- package/dist/clone.d.ts +4 -8
- package/dist/clone.js +0 -2
- package/dist/core/device/targets.js.map +1 -1
- package/dist/core/device/useDeviceProfile.js +13 -13
- package/dist/core/device/useDeviceProfile.js.map +1 -1
- package/dist/{interactions/actions/resize → core/geometry}/autoPoseDescriptor.js +8 -7
- package/dist/core/geometry/autoPoseDescriptor.js.map +1 -0
- package/dist/core/geometry/pathPoseDescriptor.js +88 -0
- package/dist/core/geometry/pathPoseDescriptor.js.map +1 -0
- package/dist/core/geometry/poseDescriptor.js +61 -14
- package/dist/core/geometry/poseDescriptor.js.map +1 -1
- package/dist/core/geometry/regionHit.js +35 -37
- package/dist/core/geometry/regionHit.js.map +1 -1
- package/dist/core/geometry/targetFrame.js +94 -0
- package/dist/core/geometry/targetFrame.js.map +1 -0
- package/dist/core/geometry/unionBounds.js +4 -5
- package/dist/core/geometry/unionBounds.js.map +1 -1
- package/dist/core/layers/backgroundFill.js +31 -0
- package/dist/core/layers/backgroundFill.js.map +1 -0
- package/dist/{features/groups → core/layers}/children.js +1 -1
- package/dist/core/layers/children.js.map +1 -0
- package/dist/{features/focus → core/layers}/gateLayer.js +2 -2
- package/dist/core/layers/gateLayer.js.map +1 -0
- package/dist/core/layers/layerGroup.js +40 -0
- package/dist/core/layers/layerGroup.js.map +1 -0
- package/dist/core/layers/render.js +50 -76
- package/dist/core/layers/render.js.map +1 -1
- package/dist/core/ops/createHistory.js +9 -9
- package/dist/core/ops/createHistory.js.map +1 -1
- package/dist/core/ops/delete.js.map +1 -1
- 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} +103 -92
- package/dist/core/paint/meshKindLazy.js.map +1 -0
- package/dist/core/paint/paintKindEntry.js +8 -0
- package/dist/core/paint/paintKindEntry.js.map +1 -0
- package/dist/core/paint/paintKinds.js +144 -0
- package/dist/core/paint/paintKinds.js.map +1 -0
- package/dist/core/paint/registerMesh.js +7 -0
- package/dist/core/paint/registerMesh.js.map +1 -0
- package/dist/core/scene/NodeProperties.js.map +1 -1
- package/dist/core/scene/NodeRouting.js.map +1 -1
- package/dist/core/scene/arrivalWindow.js +65 -64
- package/dist/core/scene/arrivalWindow.js.map +1 -1
- package/dist/core/scene/boundOps.js +40 -0
- package/dist/core/scene/boundOps.js.map +1 -0
- package/dist/core/scene/composeFrame.js +9 -6
- package/dist/core/scene/composeFrame.js.map +1 -1
- package/dist/{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 +116 -70
- package/dist/core/scene/historyFacade.js.map +1 -1
- package/dist/core/scene/historyForm.js +6 -0
- package/dist/core/scene/historyForm.js.map +1 -0
- package/dist/core/scene/kitOps.js +83 -71
- package/dist/core/scene/kitOps.js.map +1 -1
- package/dist/core/scene/kitRegistry.js.map +1 -1
- package/dist/core/scene/layerStack.js +105 -12
- package/dist/core/scene/layerStack.js.map +1 -1
- package/dist/core/scene/layoutPass.js +58 -59
- package/dist/core/scene/layoutPass.js.map +1 -1
- package/dist/{features/groups → core/scene}/nestedHit.js +3 -3
- package/dist/core/scene/nestedHit.js.map +1 -0
- package/dist/core/scene/nodeFnFields.js +9 -9
- package/dist/core/scene/nodeFnFields.js.map +1 -1
- package/dist/core/scene/nodeMemo.js.map +1 -1
- package/dist/core/scene/nodeStore.js +72 -71
- package/dist/core/scene/nodeStore.js.map +1 -1
- package/dist/core/scene/notifier.js +37 -0
- package/dist/core/scene/notifier.js.map +1 -0
- package/dist/core/scene/opTable.js +50 -0
- package/dist/core/scene/opTable.js.map +1 -0
- package/dist/core/scene/outerOps.js +66 -0
- package/dist/core/scene/outerOps.js.map +1 -0
- package/dist/core/scene/poseHold.js +39 -0
- package/dist/core/scene/poseHold.js.map +1 -0
- package/dist/core/scene/poseOverrides.js +44 -36
- package/dist/core/scene/poseOverrides.js.map +1 -1
- package/dist/core/scene/poseSnapshot.js.map +1 -1
- package/dist/core/scene/reconcileSpecs.js +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.map +1 -1
- package/dist/core/scene/scene.js +81 -690
- package/dist/core/scene/scene.js.map +1 -1
- package/dist/core/scene/sceneEdits.js +58 -0
- package/dist/core/scene/sceneEdits.js.map +1 -0
- package/dist/core/scene/sceneMutators.js +49 -0
- package/dist/core/scene/sceneMutators.js.map +1 -0
- package/dist/core/scene/scenePoseAdapter.js +16 -0
- package/dist/core/scene/scenePoseAdapter.js.map +1 -0
- package/dist/core/scene/sceneRecording.js +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 +8 -5
- package/dist/core/scene/serialization.js.map +1 -1
- package/dist/core/scene/staleReplay.js +51 -0
- package/dist/core/scene/staleReplay.js.map +1 -0
- package/dist/core/scene/statedFields.js +9 -0
- package/dist/core/scene/statedFields.js.map +1 -0
- package/dist/core/scene/treeEdits.js +127 -0
- package/dist/core/scene/treeEdits.js.map +1 -0
- package/dist/core/scene/treeReads.js +26 -0
- package/dist/core/scene/treeReads.js.map +1 -0
- package/dist/core/scene/types.js.map +1 -1
- package/dist/{features/groups → core/scene}/unionOfChildren.js +3 -3
- package/dist/core/scene/unionOfChildren.js.map +1 -0
- package/dist/core/scene/unitScopes.js +13 -0
- package/dist/core/scene/unitScopes.js.map +1 -0
- package/dist/core/scene/useScene.js.map +1 -1
- package/dist/core/selection/readOnlySelection.js +32 -0
- package/dist/core/selection/readOnlySelection.js.map +1 -0
- package/dist/core/selection/usePublishSceneSelection.js +26 -0
- package/dist/core/selection/usePublishSceneSelection.js.map +1 -0
- package/dist/core/selection/useSelection.js +34 -25
- package/dist/core/selection/useSelection.js.map +1 -1
- package/dist/core/shapeKinds.js.map +1 -1
- package/dist/core/stylus/stylus.js.map +1 -1
- package/dist/core/stylus/usePointerStylus.js.map +1 -1
- package/dist/core/usePaintKinds.js +1 -1
- package/dist/core/usePaintKinds.js.map +1 -1
- package/dist/core/viewport/clientToWorld.js.map +1 -1
- package/dist/core/viewport/fitViewToBounds.js.map +1 -1
- package/dist/core/viewport/parallax.js.map +1 -1
- package/dist/core/viewport/screenSlop.js +11 -11
- package/dist/core/viewport/screenSlop.js.map +1 -1
- package/dist/core/viewport/useCanvasSize.js.map +1 -1
- package/dist/core/viewport/useDecayLoop.js +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 +7 -7
- package/dist/core/viewport/view.js.map +1 -1
- package/dist/core/viewport/wheelHandler.js.map +1 -1
- package/dist/{cornerHandles-CtCb8a3G.d.ts → cornerHandles-BEshc4z3.d.ts} +11 -24
- package/dist/debug/createDebugOverlayLayer.js +100 -100
- package/dist/debug/createDebugOverlayLayer.js.map +1 -1
- package/dist/debug/createDebugSink.js.map +1 -1
- package/dist/debug/frameStats.js.map +1 -1
- package/dist/debug/useDebugSink.js +52 -0
- package/dist/debug/useDebugSink.js.map +1 -0
- package/dist/features/chrome-caps/buildChromeCtx.js.map +1 -1
- package/dist/features/chrome-caps/conditions.js.map +1 -1
- package/dist/features/chrome-caps/defaults.js.map +1 -1
- package/dist/features/chrome-caps/resolve.js.map +1 -1
- package/dist/features/chrome-caps/useChromeCaps.js +54 -0
- package/dist/features/chrome-caps/useChromeCaps.js.map +1 -0
- package/dist/features/chrome-caps/useHoverTracking.js.map +1 -1
- package/dist/features/ingestion/contentHandlers.js +25 -19
- package/dist/features/ingestion/contentHandlers.js.map +1 -1
- package/dist/features/ingestion/imageHandler.js +21 -24
- package/dist/features/ingestion/imageHandler.js.map +1 -1
- package/dist/features/ingestion/openFilePicker.js.map +1 -1
- package/dist/features/ingestion/placement.js +16 -0
- package/dist/features/ingestion/placement.js.map +1 -0
- package/dist/features/ingestion/svgHandler.js +5 -0
- package/dist/features/ingestion/svgHandler.js.map +1 -1
- package/dist/features/ingestion/textHandler.js +28 -0
- package/dist/features/ingestion/textHandler.js.map +1 -0
- package/dist/features/ingestion/useCanvasIngestion.js +48 -0
- package/dist/features/ingestion/useCanvasIngestion.js.map +1 -0
- package/dist/features/ingestion/weaselJsonHandler.js +5 -0
- package/dist/features/ingestion/weaselJsonHandler.js.map +1 -1
- package/dist/features/longPress/longPressFeedback.js.map +1 -1
- package/dist/features/modes/modeLayers.js +7 -7
- package/dist/features/modes/modeLayers.js.map +1 -1
- package/dist/features/paths/editablePath.js +47 -0
- package/dist/features/paths/editablePath.js.map +1 -0
- package/dist/features/paths/index.js +9 -16
- package/dist/features/paths/pathEditState.js +41 -0
- package/dist/features/paths/pathEditState.js.map +1 -0
- package/dist/features/paths/pathEditingOverlayLayer.js +36 -38
- package/dist/features/paths/pathEditingOverlayLayer.js.map +1 -1
- package/dist/features/paths/pathLayer.js +3 -2
- package/dist/features/paths/pathLayer.js.map +1 -1
- package/dist/features/paths/penPreviewLayer.js +86 -88
- package/dist/features/paths/penPreviewLayer.js.map +1 -1
- package/dist/features/paths/usePathEdit.js +34 -0
- package/dist/features/paths/usePathEdit.js.map +1 -0
- package/dist/features/poseRun/usePoseRun.js +42 -55
- package/dist/features/poseRun/usePoseRun.js.map +1 -1
- package/dist/features/selection/overlay.js +170 -178
- package/dist/features/selection/overlay.js.map +1 -1
- package/dist/features/text/index.js +6 -0
- package/dist/features/text/textLayer.js +1 -1
- package/dist/features/text/textLayer.js.map +1 -1
- package/dist/features/text/useSceneTextEdit.js +95 -82
- 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 +4507 -8459
- package/dist/index.js +275 -320
- package/dist/input/keyState.js +14 -14
- package/dist/interactions/actions/actionShortcuts.js.map +1 -1
- package/dist/interactions/actions/{defaults/align.js → align/action.js} +15 -16
- package/dist/interactions/actions/align/action.js.map +1 -0
- package/dist/interactions/actions/align/align.js +23 -23
- 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} +19 -19
- package/dist/interactions/actions/clipboard/action.js.map +1 -0
- package/dist/interactions/actions/clipboard/clipboardOps.js +15 -15
- package/dist/interactions/actions/clipboard/clipboardOps.js.map +1 -1
- package/dist/interactions/actions/clipboard/wireFormat.js.map +1 -1
- package/dist/interactions/actions/clone/action.js +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 +10 -37
- package/dist/interactions/actions/defaultCommitAdapter.js.map +1 -1
- package/dist/interactions/actions/defaults/anchorEditing.js +41 -43
- package/dist/interactions/actions/defaults/anchorEditing.js.map +1 -1
- 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/createPaintAction.js.map +1 -1
- package/dist/interactions/actions/defaults/delete.js.map +1 -1
- package/dist/interactions/actions/defaults/duplicate.js +19 -19
- 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 +35 -40
- 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 +19 -15
- package/dist/interactions/actions/defaults/ingest.js.map +1 -1
- package/dist/interactions/actions/defaults/insertPathAnchor.js +14 -15
- package/dist/interactions/actions/defaults/insertPathAnchor.js.map +1 -1
- package/dist/interactions/actions/defaults/nudge.js +30 -31
- package/dist/interactions/actions/defaults/nudge.js.map +1 -1
- package/dist/interactions/actions/defaults/pinchZoom.js.map +1 -1
- package/dist/interactions/actions/defaults/requiresSelection.js.map +1 -1
- package/dist/interactions/actions/defaults/setFill.js +9 -3
- package/dist/interactions/actions/defaults/setFill.js.map +1 -1
- package/dist/interactions/actions/defaults/setFillOpacity.js +4 -1
- package/dist/interactions/actions/defaults/setFillOpacity.js.map +1 -1
- package/dist/interactions/actions/defaults/setStroke.js.map +1 -1
- package/dist/interactions/actions/defaults/sliceOps.js +20 -22
- package/dist/interactions/actions/defaults/sliceOps.js.map +1 -1
- package/dist/interactions/actions/defaults/toolActivate.js.map +1 -1
- package/dist/interactions/actions/defaults/toolResetToDefault.js.map +1 -1
- package/dist/interactions/actions/defaults/viewportDragPan.js +1 -1
- package/dist/interactions/actions/defaults/viewportDragPan.js.map +1 -1
- package/dist/interactions/actions/defaults/viewportWheelPan.js.map +1 -1
- package/dist/interactions/actions/defaults/viewportZoom.js.map +1 -1
- package/dist/interactions/actions/{defaults/distribute.js → distribute/action.js} +18 -19
- package/dist/interactions/actions/distribute/action.js.map +1 -0
- package/dist/interactions/actions/distribute/distribute.js +11 -11
- package/dist/interactions/actions/distribute/distribute.js.map +1 -1
- package/dist/interactions/actions/{defaults/editAnchors.js → edit-anchors/action.js} +19 -21
- package/dist/interactions/actions/edit-anchors/action.js.map +1 -0
- package/dist/interactions/actions/edit-anchors/geometry.js +2 -4
- package/dist/interactions/actions/edit-anchors/geometry.js.map +1 -1
- package/dist/interactions/actions/flip/action.js +124 -0
- package/dist/interactions/actions/flip/action.js.map +1 -0
- package/dist/interactions/actions/flip/helpers.js +1 -1
- package/dist/interactions/actions/flip/helpers.js.map +1 -1
- package/dist/interactions/actions/gestureFrames.js +18 -0
- package/dist/interactions/actions/gestureFrames.js.map +1 -0
- package/dist/interactions/actions/gestureLifecycle.js +47 -20
- package/dist/interactions/actions/gestureLifecycle.js.map +1 -1
- package/dist/interactions/actions/insert/action.js +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/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/snapToContainer.js +24 -23
- 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 +15 -40
- package/dist/interactions/actions/move/gestureAdapter.js.map +1 -1
- package/dist/interactions/actions/move/landedDescendants.js +8 -8
- package/dist/interactions/actions/move/layout/container.js +94 -0
- package/dist/interactions/actions/move/layout/container.js.map +1 -0
- package/dist/interactions/actions/move/layout/dragged.js +58 -0
- package/dist/interactions/actions/move/layout/dragged.js.map +1 -0
- package/dist/interactions/actions/move/layout/dropPass.js +122 -0
- package/dist/interactions/actions/move/layout/dropPass.js.map +1 -0
- package/dist/interactions/actions/move/layout/exits.js +38 -0
- package/dist/interactions/actions/move/layout/exits.js.map +1 -0
- package/dist/interactions/actions/move/layout/glide.js +48 -0
- package/dist/interactions/actions/move/layout/glide.js.map +1 -0
- package/dist/interactions/actions/move/session.js +63 -0
- package/dist/interactions/actions/move/session.js.map +1 -0
- package/dist/interactions/actions/move/translate.js +61 -0
- package/dist/interactions/actions/move/translate.js.map +1 -0
- package/dist/interactions/actions/outlines/createOutlines.js +17 -64
- package/dist/interactions/actions/outlines/createOutlines.js.map +1 -1
- package/dist/interactions/actions/outlines/createOutlinesAction.js +51 -0
- package/dist/interactions/actions/outlines/createOutlinesAction.js.map +1 -0
- package/dist/interactions/actions/outlines/outlineStroke.js +72 -0
- package/dist/interactions/actions/outlines/outlineStroke.js.map +1 -0
- package/dist/interactions/actions/outlines/outlineStrokeAction.js +37 -0
- package/dist/interactions/actions/outlines/outlineStrokeAction.js.map +1 -0
- package/dist/interactions/actions/outlines/replaceWithPaths.js +54 -0
- package/dist/interactions/actions/outlines/replaceWithPaths.js.map +1 -0
- package/dist/interactions/actions/outlines/strokeRegion.js +27 -0
- package/dist/interactions/actions/outlines/strokeRegion.js.map +1 -0
- package/dist/interactions/actions/planeInput.js.map +1 -1
- package/dist/interactions/actions/pointerState.js +12 -0
- package/dist/interactions/actions/pointerState.js.map +1 -0
- package/dist/interactions/actions/poseDescriptorDep.js +1 -1
- package/dist/interactions/actions/poseDescriptorDep.js.map +1 -1
- package/dist/interactions/actions/poseFrame.js +26 -26
- package/dist/interactions/actions/poseFrame.js.map +1 -1
- package/dist/interactions/actions/resize/action.js +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/spatialReference.js.map +1 -1
- package/dist/interactions/actions/useStandardActions.js +77 -72
- package/dist/interactions/actions/useStandardActions.js.map +1 -1
- package/dist/interactions/gestures/pointerDrag/pointerDrag.js +61 -42
- package/dist/interactions/gestures/pointerDrag/pointerDrag.js.map +1 -1
- package/dist/interactions/gestures/shared/originProjection.js +1 -1
- package/dist/interactions/gestures/shared/originProjection.js.map +1 -1
- package/dist/interactions/gestures/shared/screenTolerance.js +8 -2
- package/dist/interactions/gestures/shared/screenTolerance.js.map +1 -1
- package/dist/interactions/gestures/shared/snap.js.map +1 -1
- package/dist/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 -2
- package/dist/math.js +6 -6
- package/dist/mesh.d.ts +4 -268
- package/dist/mesh.js +3 -7
- package/dist/move.d.ts +6 -4
- package/dist/{originProjection-gHnOup4e.d.ts → originProjection-PPT88jZv.d.ts} +1 -1
- package/dist/patterns-builtin.d.ts +1 -118
- package/dist/patterns-builtin.js +2 -3
- package/dist/poseDescriptor-Bqk-11Rl.d.ts +73 -0
- package/dist/renderer.d.ts +1 -92
- package/dist/renderer.js +2 -19
- package/dist/resize.d.ts +11 -22
- package/dist/resize.js +1 -1
- package/dist/style.css +1 -1
- package/dist/test-hook/install.js.map +1 -1
- package/dist/test-hook/useTestHook.js +22 -0
- package/dist/test-hook/useTestHook.js.map +1 -0
- package/dist/test-seams-D0pyV3pR.d.ts +149 -0
- package/dist/test-seams.d.ts +4 -4
- package/dist/test-seams.js +2 -2
- package/dist/tools/builtin/bone/boneActions.js +130 -0
- package/dist/tools/builtin/bone/boneActions.js.map +1 -0
- package/dist/tools/builtin/bone/boneOverlay.js +58 -0
- package/dist/tools/builtin/bone/boneOverlay.js.map +1 -0
- package/dist/tools/builtin/bone/placedRig.js +24 -0
- package/dist/tools/builtin/bone/placedRig.js.map +1 -0
- package/dist/tools/builtin/bone/rigEditState.js +21 -0
- package/dist/tools/builtin/bone/rigEditState.js.map +1 -0
- package/dist/tools/builtin/bone/useBoneTool.js +98 -0
- package/dist/tools/builtin/bone/useBoneTool.js.map +1 -0
- package/dist/tools/builtin/ellipse/useEllipseTool.js.map +1 -1
- package/dist/tools/builtin/eyedropper/useEyedropperTool.js.map +1 -1
- package/dist/tools/builtin/hand/useHandTool.js.map +1 -1
- package/dist/tools/builtin/image/useImageTool.js.map +1 -1
- package/dist/tools/builtin/lasso/useLassoTool.js.map +1 -1
- package/dist/tools/builtin/line/useLineTool.js.map +1 -1
- package/dist/tools/builtin/pen/usePenTool.js +161 -163
- package/dist/tools/builtin/pen/usePenTool.js.map +1 -1
- package/dist/tools/builtin/pencil/usePencilTool.js.map +1 -1
- package/dist/tools/builtin/pickTopMostHit.js.map +1 -1
- package/dist/tools/builtin/polygon/usePolygonTool.js.map +1 -1
- 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 +4 -4
- package/dist/tools/builtin/select/selectionContributions.js.map +1 -1
- package/dist/tools/builtin/select/useSelectTool.js +43 -71
- package/dist/tools/builtin/select/useSelectTool.js.map +1 -1
- package/dist/tools/builtin/shared/pointerFollower.js.map +1 -1
- package/dist/tools/builtin/slice/useSliceTool.js +67 -72
- package/dist/tools/builtin/slice/useSliceTool.js.map +1 -1
- package/dist/tools/builtin/star/useStarTool.js.map +1 -1
- package/dist/tools/builtin/text/useTextTool.js +8 -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 +20 -14
- package/dist/tools/useKeybindings.js.map +1 -1
- package/dist/{types-k-5Oqh-U.d.ts → types-CIKDwlsP.d.ts} +84 -164
- package/dist/util/paint.js +1 -1
- package/dist/util/paint.js.map +1 -1
- package/dist/version.js +1 -1
- package/package.json +26 -21
- package/dist/animation/colorHelpers.js +0 -135
- package/dist/animation/colorHelpers.js.map +0 -1
- package/dist/animation/colorRegistry.js +0 -37
- package/dist/animation/colorRegistry.js.map +0 -1
- package/dist/animation/engine/axes.js +0 -36
- package/dist/animation/engine/axes.js.map +0 -1
- package/dist/animation/engine/codec.js +0 -170
- package/dist/animation/engine/codec.js.map +0 -1
- package/dist/animation/engine/integrator.js +0 -12
- package/dist/animation/engine/integrator.js.map +0 -1
- package/dist/animation/loop.js +0 -60
- package/dist/animation/loop.js.map +0 -1
- package/dist/animation/observe.js +0 -23
- package/dist/animation/observe.js.map +0 -1
- package/dist/animation/rig/blendPoses.js +0 -43
- package/dist/animation/rig/blendPoses.js.map +0 -1
- package/dist/animation/rig/mirrorPose.js +0 -19
- package/dist/animation/rig/mirrorPose.js.map +0 -1
- package/dist/animation/rig/resolveSkeleton.js +0 -33
- package/dist/animation/rig/resolveSkeleton.js.map +0 -1
- package/dist/animation/rig/solveIk.js +0 -103
- package/dist/animation/rig/solveIk.js.map +0 -1
- package/dist/animation/rig/types.js +0 -12
- package/dist/animation/rig/types.js.map +0 -1
- package/dist/animation/slew.js +0 -27
- package/dist/animation/slew.js.map +0 -1
- package/dist/animation/stagger.js +0 -146
- package/dist/animation/stagger.js.map +0 -1
- package/dist/animation/timeline/booking.js +0 -114
- package/dist/animation/timeline/booking.js.map +0 -1
- package/dist/animation/timeline/createTimeline.js +0 -125
- package/dist/animation/timeline/createTimeline.js.map +0 -1
- package/dist/animation/timeline/sampleTrack.js +0 -79
- package/dist/animation/timeline/sampleTrack.js.map +0 -1
- package/dist/animation/useAnimator.js +0 -388
- package/dist/animation/useAnimator.js.map +0 -1
- package/dist/autoPoseDescriptor-Ct7yqivU.d.ts +0 -108
- package/dist/builtins-DPcdghtB.d.ts +0 -1223
- package/dist/canvas/MinimapCanvas.js +0 -140
- package/dist/canvas/MinimapCanvas.js.map +0 -1
- package/dist/canvas/deps/poseComposition.js +0 -11
- package/dist/canvas/deps/poseComposition.js.map +0 -1
- package/dist/canvas/minimapMath.js +0 -82
- package/dist/canvas/minimapMath.js.map +0 -1
- package/dist/canvas/toolPreview.js +0 -39
- package/dist/canvas/toolPreview.js.map +0 -1
- package/dist/core/adapters/arrayAdapter.js +0 -94
- package/dist/core/adapters/arrayAdapter.js.map +0 -1
- package/dist/core/adapters/useArrayAdapter.js +0 -13
- package/dist/core/adapters/useArrayAdapter.js.map +0 -1
- package/dist/core/fillInPoseFrame.js +0 -102
- package/dist/core/fillInPoseFrame.js.map +0 -1
- package/dist/core/geometry/poseFrame.js +0 -44
- package/dist/core/geometry/poseFrame.js.map +0 -1
- package/dist/core/geometry/poseRotation.js +0 -58
- package/dist/core/geometry/poseRotation.js.map +0 -1
- package/dist/core/gradient.js +0 -136
- package/dist/core/gradient.js.map +0 -1
- package/dist/core/markerInset.js +0 -24
- package/dist/core/markerInset.js.map +0 -1
- package/dist/core/mixed.js +0 -6
- package/dist/core/mixed.js.map +0 -1
- package/dist/core/paintKinds.js +0 -156
- package/dist/core/paintKinds.js.map +0 -1
- package/dist/core/scene/pickability.js +0 -6
- package/dist/core/scene/pickability.js.map +0 -1
- package/dist/core/strokeMarkerShapes.js +0 -139
- package/dist/core/strokeMarkerShapes.js.map +0 -1
- package/dist/core/strokeMarkers.js +0 -28
- package/dist/core/strokeMarkers.js.map +0 -1
- package/dist/core/viewport/meanScale.js +0 -8
- package/dist/core/viewport/meanScale.js.map +0 -1
- package/dist/core/viewport/pxExtent.js +0 -42
- package/dist/core/viewport/pxExtent.js.map +0 -1
- package/dist/features/cursor/paintedCursorLayer.js.map +0 -1
- package/dist/features/focus/gateLayer.js.map +0 -1
- package/dist/features/focus/useCanvasFocus.js +0 -29
- package/dist/features/focus/useCanvasFocus.js.map +0 -1
- package/dist/features/groups/children.js.map +0 -1
- package/dist/features/groups/composePose.js.map +0 -1
- package/dist/features/groups/nestedHit.js.map +0 -1
- package/dist/features/groups/unionOfChildren.js.map +0 -1
- package/dist/features/images/imageCache.js +0 -104
- package/dist/features/images/imageCache.js.map +0 -1
- package/dist/features/ingestion/index.js +0 -8
- package/dist/features/meshPaint/bake.js +0 -79
- package/dist/features/meshPaint/bake.js.map +0 -1
- package/dist/features/meshPaint/bakeCache.js +0 -59
- package/dist/features/meshPaint/bakeCache.js.map +0 -1
- package/dist/features/meshPaint/handles.js +0 -86
- package/dist/features/meshPaint/handles.js.map +0 -1
- package/dist/features/meshPaint/lazyKind.js.map +0 -1
- package/dist/features/meshPaint/meshPaint.js +0 -239
- package/dist/features/meshPaint/meshPaint.js.map +0 -1
- package/dist/features/meshPaint/meshShader.js +0 -6
- package/dist/features/meshPaint/meshShader.js.map +0 -1
- package/dist/features/meshPaint/register.js +0 -7
- package/dist/features/meshPaint/register.js.map +0 -1
- package/dist/features/meshPaint/surface.js +0 -110
- package/dist/features/meshPaint/surface.js.map +0 -1
- package/dist/features/minimap/actions.js +0 -53
- package/dist/features/minimap/actions.js.map +0 -1
- package/dist/features/minimap/createMinimapContribution.js +0 -96
- package/dist/features/minimap/createMinimapContribution.js.map +0 -1
- package/dist/features/minimap/layers.js +0 -85
- package/dist/features/minimap/layers.js.map +0 -1
- package/dist/features/overlays/useNodeOverlayFrame.js +0 -103
- package/dist/features/overlays/useNodeOverlayFrame.js.map +0 -1
- package/dist/features/parallax/createParallaxLayer.js +0 -26
- package/dist/features/parallax/createParallaxLayer.js.map +0 -1
- package/dist/features/parallax/createParallaxPlane.js +0 -22
- package/dist/features/parallax/createParallaxPlane.js.map +0 -1
- package/dist/features/paths/anchorEdits.js +0 -167
- package/dist/features/paths/anchorEdits.js.map +0 -1
- package/dist/features/paths/anchors.js +0 -159
- package/dist/features/paths/anchors.js.map +0 -1
- package/dist/features/paths/booleans.js +0 -2
- package/dist/features/paths/markerCommands.js +0 -149
- package/dist/features/paths/markerCommands.js.map +0 -1
- package/dist/features/paths/markerSites.js +0 -59
- package/dist/features/paths/markerSites.js.map +0 -1
- package/dist/features/paths/markers.js +0 -95
- package/dist/features/paths/markers.js.map +0 -1
- package/dist/features/paths/nearestAnchor.js +0 -36
- package/dist/features/paths/nearestAnchor.js.map +0 -1
- package/dist/features/paths/pathInWorld.js +0 -41
- package/dist/features/paths/pathInWorld.js.map +0 -1
- package/dist/features/paths/poseDescriptor.js +0 -39
- package/dist/features/paths/poseDescriptor.js.map +0 -1
- package/dist/features/paths/strokeToPath.js +0 -40
- package/dist/features/paths/strokeToPath.js.map +0 -1
- package/dist/features/paths/tessellate/dash.js +0 -52
- package/dist/features/paths/tessellate/dash.js.map +0 -1
- package/dist/features/paths/tessellate/insets.js +0 -32
- package/dist/features/paths/tessellate/insets.js.map +0 -1
- package/dist/features/paths/tessellate/metric.js +0 -72
- package/dist/features/paths/tessellate/metric.js.map +0 -1
- package/dist/features/paths/tessellate/stroke.js +0 -170
- package/dist/features/paths/tessellate/stroke.js.map +0 -1
- package/dist/features/paths/tessellate/vertexWidths.js +0 -32
- package/dist/features/paths/tessellate/vertexWidths.js.map +0 -1
- package/dist/features/patterns/commandPaint.js +0 -18
- package/dist/features/patterns/commandPaint.js.map +0 -1
- package/dist/features/patterns/index.js +0 -11
- package/dist/features/patterns/index.js.map +0 -1
- package/dist/features/patterns/patterns-builtin.js +0 -38
- package/dist/features/patterns/patterns-builtin.js.map +0 -1
- package/dist/features/patterns/rasterizeTile.js +0 -17
- package/dist/features/patterns/rasterizeTile.js.map +0 -1
- package/dist/features/patterns/resolveSpec.js +0 -65
- package/dist/features/patterns/resolveSpec.js.map +0 -1
- package/dist/features/patterns/tileGeometry.js +0 -158
- package/dist/features/patterns/tileGeometry.js.map +0 -1
- package/dist/features/pointer/PointerContext.js +0 -45
- package/dist/features/pointer/PointerContext.js.map +0 -1
- package/dist/features/selection/SelectionContext.js +0 -51
- package/dist/features/selection/SelectionContext.js.map +0 -1
- package/dist/features/simulation/createSimulation.js +0 -61
- package/dist/features/simulation/createSimulation.js.map +0 -1
- package/dist/features/simulation/types.js +0 -6
- package/dist/features/simulation/types.js.map +0 -1
- package/dist/features/simulation/useSimulation.js +0 -74
- package/dist/features/simulation/useSimulation.js.map +0 -1
- package/dist/features/text/domOffsets.js +0 -82
- package/dist/features/text/domOffsets.js.map +0 -1
- package/dist/features/text/domRuns.js +0 -230
- package/dist/features/text/domRuns.js.map +0 -1
- package/dist/features/text/fitTextPose.js +0 -38
- package/dist/features/text/fitTextPose.js.map +0 -1
- package/dist/features/text/hitTest.js +0 -48
- package/dist/features/text/hitTest.js.map +0 -1
- package/dist/features/text/isTextData.js +0 -8
- package/dist/features/text/isTextData.js.map +0 -1
- package/dist/features/text/overlayDirection.js +0 -15
- package/dist/features/text/overlayDirection.js.map +0 -1
- package/dist/features/text/renderLabel.js +0 -14
- package/dist/features/text/renderLabel.js.map +0 -1
- package/dist/features/text/runs/effectiveRangeStyle.js +0 -66
- package/dist/features/text/runs/effectiveRangeStyle.js.map +0 -1
- package/dist/features/text/runs/flagRange.js +0 -53
- package/dist/features/text/runs/flagRange.js.map +0 -1
- package/dist/features/text/runs/rangeStyle.js +0 -133
- package/dist/features/text/runs/rangeStyle.js.map +0 -1
- package/dist/features/text/textCommand.js +0 -60
- package/dist/features/text/textCommand.js.map +0 -1
- package/dist/features/text/textToPath.js +0 -181
- package/dist/features/text/textToPath.js.map +0 -1
- package/dist/features/text/useTextEdit.js +0 -491
- package/dist/features/text/useTextEdit.js.map +0 -1
- package/dist/features/tiling/createTiledLayer.js +0 -65
- package/dist/features/tiling/createTiledLayer.js.map +0 -1
- package/dist/features/tiling/tiledProject.js +0 -14
- package/dist/features/tiling/tiledProject.js.map +0 -1
- package/dist/interactions/actions/clone/behaviors/cloneByAltDrag.js +0 -26
- package/dist/interactions/actions/clone/behaviors/cloneByAltDrag.js.map +0 -1
- package/dist/interactions/actions/defaults/align.js.map +0 -1
- package/dist/interactions/actions/defaults/booleans.js +0 -52
- package/dist/interactions/actions/defaults/booleans.js.map +0 -1
- package/dist/interactions/actions/defaults/clipboard.js.map +0 -1
- package/dist/interactions/actions/defaults/clone.js +0 -91
- package/dist/interactions/actions/defaults/clone.js.map +0 -1
- package/dist/interactions/actions/defaults/createOutlines.js +0 -47
- package/dist/interactions/actions/defaults/createOutlines.js.map +0 -1
- package/dist/interactions/actions/defaults/distribute.js.map +0 -1
- package/dist/interactions/actions/defaults/editAnchors.js.map +0 -1
- package/dist/interactions/actions/defaults/flip.js +0 -125
- package/dist/interactions/actions/defaults/flip.js.map +0 -1
- package/dist/interactions/actions/defaults/insert.js +0 -287
- package/dist/interactions/actions/defaults/insert.js.map +0 -1
- package/dist/interactions/actions/defaults/lassoSelect.js +0 -153
- package/dist/interactions/actions/defaults/lassoSelect.js.map +0 -1
- package/dist/interactions/actions/defaults/move.js +0 -778
- package/dist/interactions/actions/defaults/move.js.map +0 -1
- package/dist/interactions/actions/defaults/resize.js +0 -341
- package/dist/interactions/actions/defaults/resize.js.map +0 -1
- package/dist/interactions/actions/defaults/rotate.js +0 -185
- package/dist/interactions/actions/defaults/rotate.js.map +0 -1
- package/dist/interactions/actions/previewOverrides.js +0 -25
- package/dist/interactions/actions/previewOverrides.js.map +0 -1
- package/dist/interactions/actions/resize/autoPoseDescriptor.js.map +0 -1
- package/dist/math-J-ACHyEg.d.ts +0 -159
- package/dist/registerProgram-T9S_PfAX.d.ts +0 -208
- package/dist/renderer/DrawCommand.js +0 -6
- package/dist/renderer/DrawCommand.js.map +0 -1
- package/dist/renderer/WeaselRenderer.js +0 -333
- package/dist/renderer/WeaselRenderer.js.map +0 -1
- package/dist/renderer/batchClip.js +0 -46
- package/dist/renderer/batchClip.js.map +0 -1
- package/dist/renderer/cache/GLImageCache.js +0 -74
- package/dist/renderer/cache/GLImageCache.js.map +0 -1
- package/dist/renderer/cache/GLMeshCache.js +0 -102
- package/dist/renderer/cache/GLMeshCache.js.map +0 -1
- package/dist/renderer/cache/GLTextureCache.js +0 -68
- package/dist/renderer/cache/GLTextureCache.js.map +0 -1
- package/dist/renderer/cache/GradientRampAtlas.js +0 -82
- package/dist/renderer/cache/GradientRampAtlas.js.map +0 -1
- package/dist/renderer/cache/cache.js +0 -13
- package/dist/renderer/cache/cache.js.map +0 -1
- package/dist/renderer/cache/markerCommandCache.js +0 -63
- package/dist/renderer/cache/markerCommandCache.js.map +0 -1
- package/dist/renderer/cache/outlineMeshCache.js +0 -15
- package/dist/renderer/cache/outlineMeshCache.js.map +0 -1
- package/dist/renderer/cache/outlineStrokeMeshCache.js +0 -36
- package/dist/renderer/cache/outlineStrokeMeshCache.js.map +0 -1
- package/dist/renderer/cache/strokeMeshCache.js +0 -55
- package/dist/renderer/cache/strokeMeshCache.js.map +0 -1
- package/dist/renderer/cullDrawCommands.js +0 -90
- package/dist/renderer/cullDrawCommands.js.map +0 -1
- package/dist/renderer/draw/batch.js +0 -133
- package/dist/renderer/draw/batch.js.map +0 -1
- package/dist/renderer/draw/clip.js +0 -89
- package/dist/renderer/draw/clip.js.map +0 -1
- package/dist/renderer/draw/customShader.js +0 -230
- package/dist/renderer/draw/customShader.js.map +0 -1
- package/dist/renderer/draw/drawTriangles.js +0 -8
- package/dist/renderer/draw/drawTriangles.js.map +0 -1
- package/dist/renderer/draw/effects.js +0 -28
- package/dist/renderer/draw/effects.js.map +0 -1
- package/dist/renderer/draw/flushBatch.js +0 -35
- package/dist/renderer/draw/flushBatch.js.map +0 -1
- package/dist/renderer/draw/gradient.js +0 -90
- package/dist/renderer/draw/gradient.js.map +0 -1
- package/dist/renderer/draw/image.js +0 -38
- package/dist/renderer/draw/image.js.map +0 -1
- package/dist/renderer/draw/mesh.js +0 -16
- package/dist/renderer/draw/mesh.js.map +0 -1
- package/dist/renderer/draw/paintBind.js +0 -70
- package/dist/renderer/draw/paintBind.js.map +0 -1
- package/dist/renderer/draw/pathPaint.js +0 -142
- package/dist/renderer/draw/pathPaint.js.map +0 -1
- package/dist/renderer/draw/scratchPass.js +0 -83
- package/dist/renderer/draw/scratchPass.js.map +0 -1
- package/dist/renderer/draw/stencil.js +0 -28
- package/dist/renderer/draw/stencil.js.map +0 -1
- package/dist/renderer/draw/text.js +0 -167
- package/dist/renderer/draw/text.js.map +0 -1
- package/dist/renderer/draw/uniforms.js +0 -77
- package/dist/renderer/draw/uniforms.js.map +0 -1
- package/dist/renderer/draw.js +0 -79
- package/dist/renderer/draw.js.map +0 -1
- package/dist/renderer/drawBatch.js +0 -198
- package/dist/renderer/drawBatch.js.map +0 -1
- package/dist/renderer/effects/EffectTargets.js +0 -48
- package/dist/renderer/effects/EffectTargets.js.map +0 -1
- package/dist/renderer/effects/builtins.js +0 -31
- package/dist/renderer/effects/builtins.js.map +0 -1
- package/dist/renderer/effects/composite.js +0 -11
- package/dist/renderer/effects/composite.js.map +0 -1
- package/dist/renderer/effects/effectPrelude.js +0 -10
- package/dist/renderer/effects/effectPrelude.js.map +0 -1
- package/dist/renderer/effects/types.js +0 -10
- package/dist/renderer/effects/types.js.map +0 -1
- package/dist/renderer/glyphOutlineMesh.js +0 -67
- package/dist/renderer/glyphOutlineMesh.js.map +0 -1
- package/dist/renderer/index.js +0 -20
- package/dist/renderer/math/color.js +0 -321
- package/dist/renderer/math/color.js.map +0 -1
- package/dist/renderer/math/mat3.js +0 -80
- package/dist/renderer/math/mat3.js.map +0 -1
- package/dist/renderer/math/patternSpace.js +0 -22
- package/dist/renderer/math/patternSpace.js.map +0 -1
- package/dist/renderer/math/viewToMat3.js +0 -19
- package/dist/renderer/math/viewToMat3.js.map +0 -1
- package/dist/renderer/paintResources.js +0 -18
- package/dist/renderer/paintResources.js.map +0 -1
- package/dist/renderer/paintScratch.js +0 -37
- package/dist/renderer/paintScratch.js.map +0 -1
- package/dist/renderer/shaders/ShaderProgram.js +0 -74
- package/dist/renderer/shaders/ShaderProgram.js.map +0 -1
- package/dist/renderer/shaders/batchFill.js +0 -119
- package/dist/renderer/shaders/batchFill.js.map +0 -1
- package/dist/renderer/shaders/customPrelude.js +0 -34
- package/dist/renderer/shaders/customPrelude.js.map +0 -1
- package/dist/renderer/shaders/extractUniformNames.js +0 -184
- package/dist/renderer/shaders/extractUniformNames.js.map +0 -1
- package/dist/renderer/shaders/glyphPaint.js +0 -61
- package/dist/renderer/shaders/glyphPaint.js.map +0 -1
- package/dist/renderer/shaders/gradFill.js +0 -31
- package/dist/renderer/shaders/gradFill.js.map +0 -1
- package/dist/renderer/shaders/pathFill.js +0 -14
- package/dist/renderer/shaders/pathFill.js.map +0 -1
- package/dist/renderer/shaders/patternFill.js +0 -25
- package/dist/renderer/shaders/patternFill.js.map +0 -1
- package/dist/renderer/shaders/registerProgram.js +0 -18
- package/dist/renderer/shaders/registerProgram.js.map +0 -1
- package/dist/renderer/spriteSheet.js +0 -14
- package/dist/renderer/spriteSheet.js.map +0 -1
- package/dist/renderer/state/GroupState.js +0 -77
- package/dist/renderer/state/GroupState.js.map +0 -1
- package/dist/renderer/strokeLengths.js +0 -50
- package/dist/renderer/strokeLengths.js.map +0 -1
- package/dist/renderer/syntheticItalic.js +0 -6
- package/dist/renderer/syntheticItalic.js.map +0 -1
- package/dist/renderer/textures/registerTexture.js +0 -34
- package/dist/renderer/textures/registerTexture.js.map +0 -1
- package/dist/scheduling/useVisibleRaf.js +0 -69
- package/dist/scheduling/useVisibleRaf.js.map +0 -1
- package/dist/test-seams-DM2B87-g.d.ts +0 -356
|
@@ -1,7 +1,6 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import {
|
|
3
|
-
import {
|
|
4
|
-
import { AUTO_POSE_DESCRIPTOR as i } from "../../interactions/actions/resize/autoPoseDescriptor.js";
|
|
1
|
+
import { rectFromPlane as e, toPlane as t } from "../../core/viewport/parallax.js";
|
|
2
|
+
import { framedBounds as n, poseDescriptorForNode as r } from "../../core/geometry/poseDescriptor.js";
|
|
3
|
+
import { AUTO_POSE_DESCRIPTOR as i } from "../../core/geometry/autoPoseDescriptor.js";
|
|
5
4
|
import { findShapeInk as a, shapeCoversPoint as o } from "../NodeShape.js";
|
|
6
5
|
import { asNodeId as s } from "../../core/scene/types.js";
|
|
7
6
|
import { pickWalk as c, scenePickSource as l, scenePlaneOf as u } from "../pickWalk.js";
|
|
@@ -9,120 +8,117 @@ import { pickTopMostHit as d } from "../../tools/builtin/pickTopMostHit.js";
|
|
|
9
8
|
import { useSelectTool as f } from "../../tools/builtin/select/useSelectTool.js";
|
|
10
9
|
import { snap as p } from "../../interactions/gestures/shared/snap.js";
|
|
11
10
|
import { poseContains as m, poseContainsRotated as h } from "./poseGeometry.js";
|
|
12
|
-
import {
|
|
13
|
-
import { useMemo as
|
|
14
|
-
import { useLatest as
|
|
11
|
+
import { meanScale as g, pathContainsPoint as _ } from "@weasel-js/geom";
|
|
12
|
+
import { useMemo as v } from "react";
|
|
13
|
+
import { useLatest as y } from "@weasel-js/react";
|
|
15
14
|
//#region src/canvas/SceneCanvas/useSceneSelectTool.ts
|
|
16
|
-
var
|
|
17
|
-
function
|
|
15
|
+
var b = 4;
|
|
16
|
+
function x(e) {
|
|
18
17
|
return e && typeof e.x == "number" && typeof e.y == "number" ? {
|
|
19
18
|
x: e.x,
|
|
20
19
|
y: e.y,
|
|
21
20
|
scale: e.scale
|
|
22
21
|
} : null;
|
|
23
22
|
}
|
|
24
|
-
function
|
|
25
|
-
let { scene:
|
|
26
|
-
let e = { ...
|
|
27
|
-
if (
|
|
23
|
+
function S(S) {
|
|
24
|
+
let { scene: C, adapter: w, geometry: T, selectTool: E, getView: D, alphaOf: O, layerIsPainted: k } = S, A = S.poseDescriptor ?? i, j = T?.pickEvery, M = T?.boundsOf, N = (T?.picking ?? "shape") === "shape", P = T?.pickTolerancePx ?? b, F = E?.move, I = E?.snap, L = v(() => {
|
|
25
|
+
let e = { ...F ?? {} };
|
|
26
|
+
if (I) {
|
|
28
27
|
let t = e.behaviors ?? [];
|
|
29
|
-
e.behaviors = [p(
|
|
28
|
+
e.behaviors = [p(I), ...t];
|
|
30
29
|
}
|
|
31
30
|
return e;
|
|
32
|
-
}, [
|
|
33
|
-
if (
|
|
34
|
-
let
|
|
35
|
-
return
|
|
31
|
+
}, [F, I]), R = v(() => (e, n, r) => {
|
|
32
|
+
if (j) {
|
|
33
|
+
let t = j(e, n);
|
|
34
|
+
return t == null ? [] : Array.isArray(t) ? t : [t];
|
|
36
35
|
}
|
|
37
|
-
let
|
|
38
|
-
getPose: (e) =>
|
|
39
|
-
...
|
|
40
|
-
...
|
|
41
|
-
...
|
|
42
|
-
}),
|
|
43
|
-
let
|
|
44
|
-
px:
|
|
45
|
-
scale:
|
|
36
|
+
let i = r ?? D?.() ?? null, s = r?.alphaOf ?? O, u = r?.layerIsPainted ?? k, d = x(i), f = l(C, {
|
|
37
|
+
getPose: (e) => w.getWorldPose(e),
|
|
38
|
+
...s ? { alphaOf: s } : {},
|
|
39
|
+
...u ? { layerIsPainted: u } : {},
|
|
40
|
+
...d ? { camera: d } : {}
|
|
41
|
+
}), p = (e, n, r) => {
|
|
42
|
+
let i = g(r), s = {
|
|
43
|
+
px: P,
|
|
44
|
+
scale: r
|
|
46
45
|
};
|
|
47
46
|
return {
|
|
48
|
-
hits: (
|
|
49
|
-
let l =
|
|
50
|
-
...
|
|
51
|
-
px:
|
|
47
|
+
hits: (t, r, c) => {
|
|
48
|
+
let l = N ? a(t, r, { scale: i }) : null, u = {
|
|
49
|
+
...s,
|
|
50
|
+
px: s.px + (l?.outsetPx ?? 0),
|
|
52
51
|
reach: l?.outset ?? 0
|
|
53
52
|
};
|
|
54
|
-
return (
|
|
55
|
-
tolerance:
|
|
56
|
-
scale:
|
|
57
|
-
derivedPath:
|
|
53
|
+
return (c ? m(c, e, n, u, A) : h(r, e, n, u, A)) ? !N || o(t, r, e, n, {
|
|
54
|
+
tolerance: s,
|
|
55
|
+
scale: i,
|
|
56
|
+
derivedPath: c
|
|
58
57
|
}) : !1;
|
|
59
58
|
},
|
|
60
|
-
clipAdmits: (
|
|
61
|
-
inPlane: (
|
|
62
|
-
let a =
|
|
63
|
-
x:
|
|
64
|
-
y:
|
|
59
|
+
clipAdmits: (t) => _(t, e, n),
|
|
60
|
+
inPlane: (i) => {
|
|
61
|
+
let a = t(i, {
|
|
62
|
+
x: e,
|
|
63
|
+
y: n
|
|
65
64
|
});
|
|
66
|
-
return
|
|
67
|
-
x:
|
|
68
|
-
y:
|
|
65
|
+
return p(a.x, a.y, {
|
|
66
|
+
x: r.x / i.scale.x,
|
|
67
|
+
y: r.y / i.scale.y
|
|
69
68
|
});
|
|
70
69
|
}
|
|
71
70
|
};
|
|
72
71
|
};
|
|
73
|
-
return c(
|
|
72
|
+
return c(f, p(e, n, i?.scale ?? {
|
|
74
73
|
x: 1,
|
|
75
74
|
y: 1
|
|
76
75
|
}));
|
|
77
76
|
}, [
|
|
78
|
-
S,
|
|
79
77
|
C,
|
|
80
|
-
|
|
81
|
-
|
|
78
|
+
w,
|
|
79
|
+
j,
|
|
82
80
|
N,
|
|
83
|
-
|
|
81
|
+
P,
|
|
84
82
|
D,
|
|
85
83
|
O,
|
|
86
|
-
k
|
|
87
|
-
]), R = v(E), z = _(() => (e, t) => {
|
|
88
|
-
let n = S.get(s(e)), r = b(t ?? R.current?.() ?? null);
|
|
89
|
-
return !n || !r ? null : u(S.layers, r)?.(n.layer) ?? null;
|
|
90
|
-
}, [S, R]), B = _(() => (e, n, i) => {
|
|
91
|
-
let a = S.get(s(e));
|
|
92
|
-
if (!a) return null;
|
|
93
|
-
let o = r(k, a), c = o.getBounds(n), l = o.getRotation?.(n) ?? c.rotation ?? 0, u = l ? {
|
|
94
|
-
...c,
|
|
95
|
-
rotation: l
|
|
96
|
-
} : c, d = z(e, i);
|
|
97
|
-
return d ? t(d, u) : u;
|
|
98
|
-
}, [
|
|
99
|
-
S,
|
|
100
84
|
k,
|
|
101
|
-
|
|
102
|
-
]),
|
|
103
|
-
|
|
85
|
+
A
|
|
86
|
+
]), z = y(D), B = v(() => (e, t) => {
|
|
87
|
+
let n = C.get(s(e)), r = x(t ?? z.current?.() ?? null);
|
|
88
|
+
return !n || !r ? null : u(C.layers, r)?.(n.layer) ?? null;
|
|
89
|
+
}, [C, z]), V = v(() => (t, i, a) => {
|
|
90
|
+
let o = C.get(s(t));
|
|
91
|
+
if (!o) return null;
|
|
92
|
+
let c = n(i, r(A, o)), l = B(t, a);
|
|
93
|
+
return l ? e(l, c) : c;
|
|
94
|
+
}, [
|
|
104
95
|
C,
|
|
105
|
-
|
|
96
|
+
A,
|
|
106
97
|
B
|
|
98
|
+
]), H = v(() => (e, t) => M ? M(e) : C.get(s(e)) ? V(e, w.getWorldPose(e), t) : null, [
|
|
99
|
+
C,
|
|
100
|
+
w,
|
|
101
|
+
M,
|
|
102
|
+
V
|
|
107
103
|
]);
|
|
108
104
|
return {
|
|
109
|
-
selectTool: f(
|
|
110
|
-
pickEvery:
|
|
111
|
-
...
|
|
112
|
-
...
|
|
105
|
+
selectTool: f(w, {
|
|
106
|
+
pickEvery: R,
|
|
107
|
+
...E?.pickBest ? { pickBest: E.pickBest } : {},
|
|
108
|
+
...E?.extendClickLocked ? { extendClickLocked: E.extendClickLocked } : {}
|
|
113
109
|
}),
|
|
114
|
-
pickEvery:
|
|
115
|
-
pickBest:
|
|
116
|
-
let r =
|
|
117
|
-
return d(r,
|
|
118
|
-
}, [
|
|
119
|
-
boundsOf:
|
|
120
|
-
boundsOfPose:
|
|
121
|
-
planeOfNode:
|
|
122
|
-
moveOptions:
|
|
110
|
+
pickEvery: R,
|
|
111
|
+
pickBest: v(() => (e, t, n) => {
|
|
112
|
+
let r = R(e, t, n);
|
|
113
|
+
return d(r, w);
|
|
114
|
+
}, [R, w]),
|
|
115
|
+
boundsOf: H,
|
|
116
|
+
boundsOfPose: V,
|
|
117
|
+
planeOfNode: B,
|
|
118
|
+
moveOptions: L
|
|
123
119
|
};
|
|
124
120
|
}
|
|
125
121
|
//#endregion
|
|
126
|
-
export {
|
|
122
|
+
export { b as DEFAULT_PICK_TOLERANCE_PX, S as useSceneSelectTool };
|
|
127
123
|
|
|
128
124
|
//# sourceMappingURL=useSceneSelectTool.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useSceneSelectTool.js","names":["snap","snapBehavior","DEFAULT_PICK_TOLERANCE_PX","cameraOf","v","useSceneSelectTool","opts","args","d","AUTO_POSE_DESCRIPTOR","pickEveryProp","geometry","boundsOfProp","shapePicking","pickTolerancePx","moveOptions","snap$1","wiredMoveOptions","useMemo","merged","existing","snap","wiredHitBody","r","wx","wy","asked","view","getView","viewAlpha","alphaOf","viewLayers","layerIsPainted","camera","src","scenePickSource","scene","adapter","id","pointQuery","scale","meanScale","s","tolerance","ink","findShapeInk","n","pose","slop","derived","poseContains","px","py","poseContainsRotated","shapeCoversPoint","pathContainsPoint","clip","p","toPlane","m","pickWalk","getViewRef","useLatest","wiredPlaneOfNode","asNodeId","scenePlaneOf","wiredBoundsOfPose","g","poseDescriptorForNode","b","rot","own","plane","rectFromPlane","wiredBoundsOf","useSelectTool","ids","pickTopMostHit"],"sources":["../../../src/canvas/SceneCanvas/useSceneSelectTool.ts"],"sourcesContent":["/**\n * Scene-aware select-tool synthesis for `<SceneCanvas>`: a `useSelectTool`\n * over the caller's scene adapter, configured with kit-default pickEvery /\n * boundsOf derived from pose shape. Caller-supplied `pickEvery` / `boundsOf`\n * overrides via the `geometry` arg take precedence.\n */\nimport { useMemo } from 'react';\nimport { useLatest } from '@weasel-js/react';\nimport type { SceneCanvasAdapter } from '../sceneAdapter';\nimport { pickWalk, scenePickSource, scenePlaneOf, type PickQuery, type ViewPickGates } from 'canvas/pickWalk';\nimport { rectFromPlane, toPlane, type PlaneMap } from 'core/viewport/parallax';\nimport type { View } from 'core/viewport/view';\nimport { pathContainsPoint } from '@weasel-js/geom';\nimport { useSelectTool, type Bounds } from 'tools/builtin/select';\nimport { pickTopMostHit, type PickTopMostHitAdapter } from 'tools/builtin/pickTopMostHit';\nimport type { Node, Scene } from 'core/scene/types';\nimport { asNodeId } from 'core/scene/types';\nimport type { UseMoveOptions } from 'interactions/actions/move/options';\nimport type { UseResizeOptions } from 'interactions/actions/resize/options';\nimport type { SnapStrategy } from 'interactions/gestures/types';\nimport { snap as snapBehavior } from 'interactions/gestures/shared/snap';\nimport { poseDescriptorForNode, type PoseDescriptor } from 'interactions/actions/resize/geometry';\nimport { AUTO_POSE_DESCRIPTOR } from 'interactions/actions/resize/autoPoseDescriptor';\nimport { poseContains, poseContainsRotated } from './poseGeometry';\nimport { shapeCoversPoint, findShapeInk } from 'canvas/NodeShape';\nimport { meanScale } from 'core/viewport/meanScale';\n\n/**\n * Default grab slop around a shape's outline, in screen pixels.\n *\n * Four is the same number the path-pose stroke test has always used, and it's\n * the difference between a hairline being clickable and not: a 1px stroke is\n * half a world unit of reach at scale 1, which no pointing device can hit\n * reliably. It also lets a filled shape be grabbed a few pixels outside its\n * edge, which is what makes edge-adjacent dragging feel possible.\n */\nexport const DEFAULT_PICK_TOLERANCE_PX = 4;\n\n/** The view a pick is asked for. A world point carries neither the scale it\n * was produced under nor what that view paints, so a caller picking for a\n * view other than the surface's says both. A gate left out is the one this\n * hook was built with. */\nexport interface PickView extends ViewPickGates {\n scale: { x: number; y: number };\n /** The rest of the asking camera. Supplied, it lets a parallax layer be\n * picked through its plane; left out, every layer is taken to move with\n * the camera. */\n x?: number;\n y?: number;\n}\n\n/** A pick view that names a whole camera, or null. */\nfunction cameraOf(v: Pick<PickView, 'scale' | 'x' | 'y'> | null): View | null {\n return v && typeof v.x === 'number' && typeof v.y === 'number'\n ? { x: v.x, y: v.y, scale: v.scale }\n : null;\n}\n\nexport interface UseSceneSelectToolArgs<TData, TLayer extends string, TPose> {\n scene: Scene<TData, TLayer, TPose>;\n /** The adapter the select tool drives, built over `scene` with the same\n * `poseDescriptor`. Its world poses are what picking and bounds read. */\n adapter: SceneCanvasAdapter<TData, TLayer, TPose>;\n /** How to read and rewrite this scene's poses. Default `AUTO_POSE_DESCRIPTOR`. */\n poseDescriptor?: PoseDescriptor<TPose>;\n geometry?: {\n pickEvery?: (worldX: number, worldY: number) => string | string[] | null;\n boundsOf?: (id: string) => Bounds | null;\n /** How the default body-pick decides a node covers the pointer. Defaults\n * to `'shape'`; `'pose'` opts back down to the bare pose rect. See\n * `SceneCanvasProps.geometry.picking`. Ignored when `pickEvery` is\n * supplied — that override owns the whole test. */\n picking?: 'pose' | 'shape';\n /** Grab slop around a shape's outline, in screen pixels. See\n * `SceneCanvasProps.geometry.pickTolerancePx`. */\n pickTolerancePx?: number;\n };\n /** The surface's camera, for converting the screen-pixel pick tolerance into\n * world units. A caller picking for another view passes that view's camera\n * to `pickEvery` / `pickBest` instead. Omitted in tests and non-viewport\n * hosts, where scale is 1. */\n getView?: () => Pick<PickView, 'scale' | 'x' | 'y'> | null;\n /** The asking view's painted alpha per node — its `alphaFor` times any\n * per-node override alpha. A node the view paints at alpha 0 is not on\n * screen, so picking must not answer for it. */\n alphaOf?: (id: string) => number;\n /** The asking view's answer to \"does this scene layer reach the screen\".\n * `layerVisibility` and `layerOrder` both gate a layer out of the paint\n * (`drawLayers` drops any layer missing from a supplied order), and an\n * undrawn layer must not claim clicks. */\n layerIsPainted?: (layer: string) => boolean;\n selectTool?: {\n move?: UseMoveOptions<TPose>;\n resize?: UseResizeOptions<TPose>;\n snap?: SnapStrategy<TPose>;\n /** Override the body-pick used on click/pointerdown. Alt-aware: receives\n * the live alt state + current selection so consumers can implement\n * alt-cycling through an overlapping stack. Default: top-most hit\n * (alt ignored). Forwarded verbatim to `useSelectTool`. */\n pickBest?: (worldX: number, worldY: number, alt: boolean, sel: readonly string[]) => string | null;\n /** Forwarded verbatim to `useSelectTool`. See\n * `UseSelectToolOptions.extendClickLocked`. */\n extendClickLocked?: () => boolean;\n };\n}\n\nexport interface UseSceneSelectToolReturn<TData, TLayer extends string, TPose> {\n selectTool: ReturnType<typeof useSelectTool<Node<TData, TLayer, TPose>, TPose>>;\n /** Every id under the world point, back-to-front (topmost last), from the\n * caller's `geometry.pickEvery` or the pose-walk default. */\n pickEvery: (worldX: number, worldY: number, view?: PickView | null) => string[];\n /** Single-best hit under the world point, or null. Runs `pickEvery` then\n * collapses parent/child overlap via `pickTopMostHit` — matches the id\n * the select tool's pointerdown classifier would settle on for a bare\n * click. The canvas's `getNodeAtPoint` resolves through it. */\n pickBest: (worldX: number, worldY: number, view?: PickView | null) => string | null;\n /** World-space AABB of `id`, or null. Same as what the selection overlay +\n * affordance hit-test need. Exposed so SceneCanvas can pass it to the\n * `affordanceAt` thunk without re-deriving it. `view` is the camera the\n * box is drawn under — a plane node sits somewhere else in each — and\n * defaults to the surface's. */\n boundsOf: (id: string, view?: Pick<PickView, 'scale' | 'x' | 'y'> | null) =>\n import('core/viewport/fitViewToBounds').Bounds | null;\n /** How `view`'s world (the surface's camera by default) maps into the plane\n * `id` is drawn through, or null when its layer moves with the camera. */\n planeOfNode: (id: string, view?: Pick<PickView, 'scale' | 'x' | 'y'> | null) => PlaneMap | null;\n /** `boundsOf` for `id` drawn at `pose` rather than its own — how chrome\n * boxes an in-flight preview. Ignores a `geometry.boundsOf` override, which\n * answers only for a node's own pose. */\n boundsOfPose: (id: string, pose: TPose, view?: Pick<PickView, 'scale' | 'x' | 'y'> | null) =>\n import('core/viewport/fitViewToBounds').Bounds | null;\n /** `selectTool.move` with `selectTool.snap` folded into its behaviors — what\n * the `move` preset's bindings carry. */\n moveOptions: UseMoveOptions<TPose>;\n}\n\nexport function useSceneSelectTool<TData, TLayer extends string, TPose>(\n args: UseSceneSelectToolArgs<TData, TLayer, TPose>,\n): UseSceneSelectToolReturn<TData, TLayer, TPose> {\n const { scene, adapter, geometry, selectTool: opts, getView, alphaOf, layerIsPainted } = args;\n const d = (args.poseDescriptor ?? AUTO_POSE_DESCRIPTOR) as PoseDescriptor<TPose>;\n\n const pickEveryProp = geometry?.pickEvery;\n const boundsOfProp = geometry?.boundsOf;\n // Default. The pose rect is the wrong answer for anything that isn't a\n // rectangle, so `'pose'` is the opt-out rather than the baseline. Cheap to\n // leave on: the rect pre-filter runs first and rejects every node the\n // pointer isn't over, and the survivors' silhouettes are memoized per node.\n const shapePicking = (geometry?.picking ?? 'shape') === 'shape';\n const pickTolerancePx = geometry?.pickTolerancePx ?? DEFAULT_PICK_TOLERANCE_PX;\n const moveOptions = opts?.move;\n const snap = opts?.snap;\n\n const wiredMoveOptions = useMemo<UseMoveOptions<TPose>>(() => {\n const merged: UseMoveOptions<TPose> = { ...(moveOptions ?? {}) };\n if (snap) {\n const existing = merged.behaviors ?? [];\n merged.behaviors = [snapBehavior(snap), ...existing];\n }\n return merged;\n }, [moveOptions, snap]);\n\n // Default pickEvery: walk renderOrder() forward (back-to-front) and collect\n // every node whose pose contains the world point. Order matches the\n // `useSelectTool` contract — last element is the topmost — so `pickTopMostHit`\n // picks correctly. Wraps the caller's `pickEvery` (string-or-null) into the\n // array form `useSelectTool` expects. `poseContainsRotated` reads\n // `pose.rotation` directly (the kit's one rotation convention), so rotated\n // shapes pick against their rendered, rotated body without a per-demo override.\n const wiredHitBody = useMemo(() => {\n return (wx: number, wy: number, view?: PickView | null): string[] => {\n if (pickEveryProp) {\n const r = pickEveryProp(wx, wy);\n if (r == null) return [];\n return Array.isArray(r) ? r : [r];\n }\n const asked = view ?? getView?.() ?? null;\n const viewAlpha = view?.alphaOf ?? alphaOf;\n const viewLayers = view?.layerIsPainted ?? layerIsPainted;\n const camera = cameraOf(asked);\n // Through the adapter, not `n.pose`: an ephemeral override is the pose\n // the renderer draws, so it has to be the one picking tests. World, not\n // local, for the same reason — a framed child is drawn in its parent's\n // frame, not where its own pose says.\n const src = scenePickSource<TData, TLayer, TPose>(scene, {\n getPose: (id) => adapter.getWorldPose(id),\n ...(viewAlpha ? { alphaOf: viewAlpha } : {}),\n ...(viewLayers ? { layerIsPainted: viewLayers } : {}),\n ...(camera ? { camera } : {}),\n });\n // `s` makes the slop a screen distance, so the grab zone stays the same\n // apparent thickness at any zoom and on every axis. A `{ px }` stroke's\n // reach is on screen too, and joins the slop there.\n const pointQuery = (px: number, py: number, s: { x: number; y: number }): PickQuery<TPose> => {\n const scale = meanScale(s);\n const tolerance = { px: pickTolerancePx, scale: s };\n return {\n hits: (n, pose, derived) => {\n // The pre-filter has to be at least as generous as the refinement\n // that follows it, or it rejects points the refinement would have\n // claimed. A stroke reaches past the pose box by `outset` — a whole\n // stroke width for an outer align — on top of the pointer slop.\n const ink = shapePicking ? findShapeInk(n as never, pose, { scale }) : null;\n // A derived node's pose is a placeholder — typically zero-sized at\n // the origin — so its own box rejects every point the path covers.\n // The path is the region to test instead, and `poseContains` already\n // reads a path-like pose as one.\n const slop = { ...tolerance, px: tolerance.px + (ink?.outsetPx ?? 0), reach: ink?.outset ?? 0 };\n const admitted = derived\n ? poseContains(derived as never, px, py, slop, d as PoseDescriptor<unknown>)\n : poseContainsRotated(pose, px, py, slop, d as PoseDescriptor<unknown>);\n if (!admitted) return false;\n // `shapeCoversPoint` narrows the rect to the ink the painter actually\n // lays down (and answers `true` for painters that have no silhouette,\n // so nothing becomes unpickable).\n return !shapePicking\n || shapeCoversPoint(n as never, pose, px, py, {\n tolerance, scale, derivedPath: derived,\n });\n },\n clipAdmits: (clip) => pathContainsPoint(clip, px, py),\n inPlane: (m) => {\n const p = toPlane(m, { x: px, y: py });\n return pointQuery(p.x, p.y, { x: s.x / m.scale.x, y: s.y / m.scale.y });\n },\n };\n };\n return pickWalk<TPose>(src, pointQuery(wx, wy, asked?.scale ?? { x: 1, y: 1 }));\n };\n }, [scene, adapter, pickEveryProp, shapePicking, pickTolerancePx, getView,\n alphaOf, layerIsPainted, d]);\n\n // Read through a ref: this is the chrome's bounds source, and a caller's\n // inline `getView` would otherwise rebuild it, and everything keyed on it,\n // every render.\n const getViewRef = useLatest(getView);\n const wiredPlaneOfNode = useMemo(() => {\n return (id: string, view?: Pick<PickView, 'scale' | 'x' | 'y'> | null): PlaneMap | null => {\n const n = scene.get(asNodeId(id));\n const camera = cameraOf(view ?? getViewRef.current?.() ?? null);\n if (!n || !camera) return null;\n return scenePlaneOf(scene.layers, camera)?.(n.layer) ?? null;\n };\n }, [scene, getViewRef]);\n\n const wiredBoundsOfPose = useMemo(() => {\n return (id: string, pose: TPose, view?: Pick<PickView, 'scale' | 'x' | 'y'> | null): Bounds | null => {\n const n = scene.get(asNodeId(id));\n if (!n) return null;\n const g = poseDescriptorForNode(d, n);\n const b = g.getBounds(pose);\n const rot = g.getRotation?.(pose) ?? (b as { rotation?: number }).rotation ?? 0;\n const own = rot ? { ...b, rotation: rot } : b;\n // A plane node is drawn where its plane puts it, and the chrome has to\n // follow it there.\n const plane = wiredPlaneOfNode(id, view);\n return plane ? rectFromPlane(plane, own) : own;\n };\n }, [scene, d, wiredPlaneOfNode]);\n\n const wiredBoundsOf = useMemo(() => {\n return (id: string, view?: Pick<PickView, 'scale' | 'x' | 'y'> | null): Bounds | null => {\n if (boundsOfProp) return boundsOfProp(id);\n if (!scene.get(asNodeId(id))) return null;\n // World, not local: a framed child is drawn in its parent's frame, and\n // the chrome has to land on the ink.\n return wiredBoundsOfPose(id, adapter.getWorldPose(id), view);\n };\n }, [scene, adapter, boundsOfProp, wiredBoundsOfPose]);\n\n const selectTool = useSelectTool<Node<TData, TLayer, TPose>, TPose>(adapter, {\n pickEvery: wiredHitBody,\n ...(opts?.pickBest ? { pickBest: opts.pickBest } : {}),\n ...(opts?.extendClickLocked ? { extendClickLocked: opts.extendClickLocked } : {}),\n });\n\n\n const wiredPickBest = useMemo(() => {\n return (wx: number, wy: number, view?: PickView | null): string | null => {\n const ids = wiredHitBody(wx, wy, view);\n return pickTopMostHit(ids, adapter as unknown as PickTopMostHitAdapter);\n };\n }, [wiredHitBody, adapter]);\n\n return {\n selectTool,\n pickEvery: wiredHitBody,\n pickBest: wiredPickBest,\n boundsOf: wiredBoundsOf,\n boundsOfPose: wiredBoundsOfPose,\n planeOfNode: wiredPlaneOfNode,\n moveOptions: wiredMoveOptions,\n };\n}\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"useSceneSelectTool.js","names":["snap","snapBehavior","DEFAULT_PICK_TOLERANCE_PX","cameraOf","v","useSceneSelectTool","opts","args","d","AUTO_POSE_DESCRIPTOR","pickEveryProp","geometry","boundsOfProp","shapePicking","pickTolerancePx","moveOptions","snap$1","wiredMoveOptions","useMemo","merged","existing","snap","wiredHitBody","r","wx","wy","asked","view","getView","viewAlpha","alphaOf","viewLayers","layerIsPainted","camera","src","scenePickSource","scene","adapter","id","pointQuery","scale","meanScale","s","tolerance","ink","findShapeInk","n","pose","slop","derived","poseContains","px","py","poseContainsRotated","shapeCoversPoint","pathContainsPoint","clip","p","toPlane","m","pickWalk","getViewRef","useLatest","wiredPlaneOfNode","asNodeId","scenePlaneOf","wiredBoundsOfPose","own","framedBounds","poseDescriptorForNode","plane","rectFromPlane","wiredBoundsOf","useSelectTool","ids","pickTopMostHit"],"sources":["../../../src/canvas/SceneCanvas/useSceneSelectTool.ts"],"sourcesContent":["/**\n * Scene-aware select-tool synthesis for `<SceneCanvas>`: a `useSelectTool`\n * over the caller's scene adapter, configured with kit-default pickEvery /\n * boundsOf derived from pose shape. Caller-supplied `pickEvery` / `boundsOf`\n * overrides via the `geometry` arg take precedence.\n */\nimport { useMemo } from 'react';\nimport { useLatest } from '@weasel-js/react';\nimport type { SceneCanvasAdapter } from '../sceneAdapter';\nimport { pickWalk, scenePickSource, scenePlaneOf, type PickQuery, type ViewPickGates } from 'canvas/pickWalk';\nimport { rectFromPlane, toPlane, type PlaneMap } from 'core/viewport/parallax';\nimport type { View } from 'core/viewport/view';\nimport { pathContainsPoint } from '@weasel-js/geom';\nimport { useSelectTool, type Bounds } from 'tools/builtin/select';\nimport { pickTopMostHit, type PickTopMostHitAdapter } from 'tools/builtin/pickTopMostHit';\nimport type { Node, Scene } from 'core/scene/types';\nimport { asNodeId } from 'core/scene/types';\nimport type { UseMoveOptions } from 'interactions/actions/move/options';\nimport type { UseResizeOptions } from 'interactions/actions/resize/options';\nimport type { SnapStrategy } from 'interactions/gestures/types';\nimport { snap as snapBehavior } from 'interactions/gestures/shared/snap';\nimport { poseDescriptorForNode, type PoseDescriptor } from 'interactions/actions/resize/geometry';\nimport { framedBounds } from 'core/geometry/poseDescriptor';\nimport { AUTO_POSE_DESCRIPTOR } from 'core/geometry/autoPoseDescriptor';\nimport { poseContains, poseContainsRotated } from './poseGeometry';\nimport { shapeCoversPoint, findShapeInk } from 'canvas/NodeShape';\nimport { meanScale } from '@weasel-js/geom';\n\n/**\n * Default grab slop around a shape's outline, in screen pixels.\n *\n * Four is the same number the path-pose stroke test has always used, and it's\n * the difference between a hairline being clickable and not: a 1px stroke is\n * half a world unit of reach at scale 1, which no pointing device can hit\n * reliably. It also lets a filled shape be grabbed a few pixels outside its\n * edge, which is what makes edge-adjacent dragging feel possible.\n */\nexport const DEFAULT_PICK_TOLERANCE_PX = 4;\n\n/** The view a pick is asked for. A world point carries neither the scale it\n * was produced under nor what that view paints, so a caller picking for a\n * view other than the surface's says both. A gate left out is the one this\n * hook was built with. */\nexport interface PickView extends ViewPickGates {\n scale: { x: number; y: number };\n /** The rest of the asking camera. Supplied, it lets a parallax layer be\n * picked through its plane; left out, every layer is taken to move with\n * the camera. */\n x?: number;\n y?: number;\n}\n\n/** A pick view that names a whole camera, or null. */\nfunction cameraOf(v: Pick<PickView, 'scale' | 'x' | 'y'> | null): View | null {\n return v && typeof v.x === 'number' && typeof v.y === 'number'\n ? { x: v.x, y: v.y, scale: v.scale }\n : null;\n}\n\nexport interface UseSceneSelectToolArgs<TData, TLayer extends string, TPose> {\n scene: Scene<TData, TLayer, TPose>;\n /** The adapter the select tool drives, built over `scene` with the same\n * `poseDescriptor`. Its world poses are what picking and bounds read. */\n adapter: SceneCanvasAdapter<TData, TLayer, TPose>;\n /** How to read and rewrite this scene's poses. Default `AUTO_POSE_DESCRIPTOR`. */\n poseDescriptor?: PoseDescriptor<TPose>;\n geometry?: {\n pickEvery?: (worldX: number, worldY: number) => string | string[] | null;\n boundsOf?: (id: string) => Bounds | null;\n /** How the default body-pick decides a node covers the pointer. Defaults\n * to `'shape'`; `'pose'` opts back down to the bare pose rect. See\n * `SceneCanvasProps.geometry.picking`. Ignored when `pickEvery` is\n * supplied — that override owns the whole test. */\n picking?: 'pose' | 'shape';\n /** Grab slop around a shape's outline, in screen pixels. See\n * `SceneCanvasProps.geometry.pickTolerancePx`. */\n pickTolerancePx?: number;\n };\n /** The surface's camera, for converting the screen-pixel pick tolerance into\n * world units. A caller picking for another view passes that view's camera\n * to `pickEvery` / `pickBest` instead. Omitted in tests and non-viewport\n * hosts, where scale is 1. */\n getView?: () => Pick<PickView, 'scale' | 'x' | 'y'> | null;\n /** The asking view's painted alpha per node — its `alphaFor` times any\n * per-node override alpha. A node the view paints at alpha 0 is not on\n * screen, so picking must not answer for it. */\n alphaOf?: (id: string) => number;\n /** The asking view's answer to \"does this scene layer reach the screen\".\n * `layerVisibility` and `layerOrder` both gate a layer out of the paint\n * (`drawLayers` drops any layer missing from a supplied order), and an\n * undrawn layer must not claim clicks. */\n layerIsPainted?: (layer: string) => boolean;\n selectTool?: {\n move?: UseMoveOptions<TPose>;\n resize?: UseResizeOptions<TPose>;\n snap?: SnapStrategy<TPose>;\n /** Override the body-pick used on click/pointerdown. Alt-aware: receives\n * the live alt state + current selection so consumers can implement\n * alt-cycling through an overlapping stack. Default: top-most hit\n * (alt ignored). Forwarded verbatim to `useSelectTool`. */\n pickBest?: (worldX: number, worldY: number, alt: boolean, sel: readonly string[]) => string | null;\n /** Forwarded verbatim to `useSelectTool`. See\n * `UseSelectToolOptions.extendClickLocked`. */\n extendClickLocked?: () => boolean;\n };\n}\n\nexport interface UseSceneSelectToolReturn<TData, TLayer extends string, TPose> {\n selectTool: ReturnType<typeof useSelectTool<Node<TData, TLayer, TPose>, TPose>>;\n /** Every id under the world point, back-to-front (topmost last), from the\n * caller's `geometry.pickEvery` or the pose-walk default. */\n pickEvery: (worldX: number, worldY: number, view?: PickView | null) => string[];\n /** Single-best hit under the world point, or null. Runs `pickEvery` then\n * collapses parent/child overlap via `pickTopMostHit` — matches the id\n * the select tool's pointerdown classifier would settle on for a bare\n * click. The canvas's `getNodeAtPoint` resolves through it. */\n pickBest: (worldX: number, worldY: number, view?: PickView | null) => string | null;\n /** World-space AABB of `id`, or null. Same as what the selection overlay +\n * affordance hit-test need. Exposed so SceneCanvas can pass it to the\n * `affordanceAt` thunk without re-deriving it. `view` is the camera the\n * box is drawn under — a plane node sits somewhere else in each — and\n * defaults to the surface's. */\n boundsOf: (id: string, view?: Pick<PickView, 'scale' | 'x' | 'y'> | null) =>\n import('core/viewport/fitViewToBounds').Bounds | null;\n /** How `view`'s world (the surface's camera by default) maps into the plane\n * `id` is drawn through, or null when its layer moves with the camera. */\n planeOfNode: (id: string, view?: Pick<PickView, 'scale' | 'x' | 'y'> | null) => PlaneMap | null;\n /** `boundsOf` for `id` drawn at `pose` rather than its own — how chrome\n * boxes an in-flight preview. Ignores a `geometry.boundsOf` override, which\n * answers only for a node's own pose. */\n boundsOfPose: (id: string, pose: TPose, view?: Pick<PickView, 'scale' | 'x' | 'y'> | null) =>\n import('core/viewport/fitViewToBounds').Bounds | null;\n /** `selectTool.move` with `selectTool.snap` folded into its behaviors — what\n * the `move` preset's bindings carry. */\n moveOptions: UseMoveOptions<TPose>;\n}\n\nexport function useSceneSelectTool<TData, TLayer extends string, TPose>(\n args: UseSceneSelectToolArgs<TData, TLayer, TPose>,\n): UseSceneSelectToolReturn<TData, TLayer, TPose> {\n const { scene, adapter, geometry, selectTool: opts, getView, alphaOf, layerIsPainted } = args;\n const d = (args.poseDescriptor ?? AUTO_POSE_DESCRIPTOR) as PoseDescriptor<TPose>;\n\n const pickEveryProp = geometry?.pickEvery;\n const boundsOfProp = geometry?.boundsOf;\n // Default. The pose rect is the wrong answer for anything that isn't a\n // rectangle, so `'pose'` is the opt-out rather than the baseline. Cheap to\n // leave on: the rect pre-filter runs first and rejects every node the\n // pointer isn't over, and the survivors' silhouettes are memoized per node.\n const shapePicking = (geometry?.picking ?? 'shape') === 'shape';\n const pickTolerancePx = geometry?.pickTolerancePx ?? DEFAULT_PICK_TOLERANCE_PX;\n const moveOptions = opts?.move;\n const snap = opts?.snap;\n\n const wiredMoveOptions = useMemo<UseMoveOptions<TPose>>(() => {\n const merged: UseMoveOptions<TPose> = { ...(moveOptions ?? {}) };\n if (snap) {\n const existing = merged.behaviors ?? [];\n merged.behaviors = [snapBehavior(snap), ...existing];\n }\n return merged;\n }, [moveOptions, snap]);\n\n // Default pickEvery: walk renderOrder() forward (back-to-front) and collect\n // every node whose pose contains the world point. Order matches the\n // `useSelectTool` contract — last element is the topmost — so `pickTopMostHit`\n // picks correctly. Wraps the caller's `pickEvery` (string-or-null) into the\n // array form `useSelectTool` expects. `poseContainsRotated` reads\n // `pose.rotation` directly (the kit's one rotation convention), so rotated\n // shapes pick against their rendered, rotated body without a per-demo override.\n const wiredHitBody = useMemo(() => {\n return (wx: number, wy: number, view?: PickView | null): string[] => {\n if (pickEveryProp) {\n const r = pickEveryProp(wx, wy);\n if (r == null) return [];\n return Array.isArray(r) ? r : [r];\n }\n const asked = view ?? getView?.() ?? null;\n const viewAlpha = view?.alphaOf ?? alphaOf;\n const viewLayers = view?.layerIsPainted ?? layerIsPainted;\n const camera = cameraOf(asked);\n // Through the adapter, not `n.pose`: an ephemeral override is the pose\n // the renderer draws, so it has to be the one picking tests. World, not\n // local, for the same reason — a framed child is drawn in its parent's\n // frame, not where its own pose says.\n const src = scenePickSource<TData, TLayer, TPose>(scene, {\n getPose: (id) => adapter.getWorldPose(id),\n ...(viewAlpha ? { alphaOf: viewAlpha } : {}),\n ...(viewLayers ? { layerIsPainted: viewLayers } : {}),\n ...(camera ? { camera } : {}),\n });\n // `s` makes the slop a screen distance, so the grab zone stays the same\n // apparent thickness at any zoom and on every axis. A `{ px }` stroke's\n // reach is on screen too, and joins the slop there.\n const pointQuery = (px: number, py: number, s: { x: number; y: number }): PickQuery<TPose> => {\n const scale = meanScale(s);\n const tolerance = { px: pickTolerancePx, scale: s };\n return {\n hits: (n, pose, derived) => {\n // The pre-filter has to be at least as generous as the refinement\n // that follows it, or it rejects points the refinement would have\n // claimed. A stroke reaches past the pose box by `outset` — a whole\n // stroke width for an outer align — on top of the pointer slop.\n const ink = shapePicking ? findShapeInk(n as never, pose, { scale }) : null;\n // A derived node's pose is a placeholder — typically zero-sized at\n // the origin — so its own box rejects every point the path covers.\n // The path is the region to test instead, and `poseContains` already\n // reads a path-like pose as one.\n const slop = { ...tolerance, px: tolerance.px + (ink?.outsetPx ?? 0), reach: ink?.outset ?? 0 };\n const admitted = derived\n ? poseContains(derived as never, px, py, slop, d as PoseDescriptor<unknown>)\n : poseContainsRotated(pose, px, py, slop, d as PoseDescriptor<unknown>);\n if (!admitted) return false;\n // `shapeCoversPoint` narrows the rect to the ink the painter actually\n // lays down (and answers `true` for painters that have no silhouette,\n // so nothing becomes unpickable).\n return !shapePicking\n || shapeCoversPoint(n as never, pose, px, py, {\n tolerance, scale, derivedPath: derived,\n });\n },\n clipAdmits: (clip) => pathContainsPoint(clip, px, py),\n inPlane: (m) => {\n const p = toPlane(m, { x: px, y: py });\n return pointQuery(p.x, p.y, { x: s.x / m.scale.x, y: s.y / m.scale.y });\n },\n };\n };\n return pickWalk<TPose>(src, pointQuery(wx, wy, asked?.scale ?? { x: 1, y: 1 }));\n };\n }, [scene, adapter, pickEveryProp, shapePicking, pickTolerancePx, getView,\n alphaOf, layerIsPainted, d]);\n\n // Read through a ref: this is the chrome's bounds source, and a caller's\n // inline `getView` would otherwise rebuild it, and everything keyed on it,\n // every render.\n const getViewRef = useLatest(getView);\n const wiredPlaneOfNode = useMemo(() => {\n return (id: string, view?: Pick<PickView, 'scale' | 'x' | 'y'> | null): PlaneMap | null => {\n const n = scene.get(asNodeId(id));\n const camera = cameraOf(view ?? getViewRef.current?.() ?? null);\n if (!n || !camera) return null;\n return scenePlaneOf(scene.layers, camera)?.(n.layer) ?? null;\n };\n }, [scene, getViewRef]);\n\n const wiredBoundsOfPose = useMemo(() => {\n return (id: string, pose: TPose, view?: Pick<PickView, 'scale' | 'x' | 'y'> | null): Bounds | null => {\n const n = scene.get(asNodeId(id));\n if (!n) return null;\n const own = framedBounds(pose, poseDescriptorForNode(d, n));\n // A plane node is drawn where its plane puts it, and the chrome has to\n // follow it there.\n const plane = wiredPlaneOfNode(id, view);\n return plane ? rectFromPlane(plane, own) : own;\n };\n }, [scene, d, wiredPlaneOfNode]);\n\n const wiredBoundsOf = useMemo(() => {\n return (id: string, view?: Pick<PickView, 'scale' | 'x' | 'y'> | null): Bounds | null => {\n if (boundsOfProp) return boundsOfProp(id);\n if (!scene.get(asNodeId(id))) return null;\n // World, not local: a framed child is drawn in its parent's frame, and\n // the chrome has to land on the ink.\n return wiredBoundsOfPose(id, adapter.getWorldPose(id), view);\n };\n }, [scene, adapter, boundsOfProp, wiredBoundsOfPose]);\n\n const selectTool = useSelectTool<Node<TData, TLayer, TPose>, TPose>(adapter, {\n pickEvery: wiredHitBody,\n ...(opts?.pickBest ? { pickBest: opts.pickBest } : {}),\n ...(opts?.extendClickLocked ? { extendClickLocked: opts.extendClickLocked } : {}),\n });\n\n\n const wiredPickBest = useMemo(() => {\n return (wx: number, wy: number, view?: PickView | null): string | null => {\n const ids = wiredHitBody(wx, wy, view);\n return pickTopMostHit(ids, adapter as unknown as PickTopMostHitAdapter);\n };\n }, [wiredHitBody, adapter]);\n\n return {\n selectTool,\n pickEvery: wiredHitBody,\n pickBest: wiredPickBest,\n boundsOf: wiredBoundsOf,\n boundsOfPose: wiredBoundsOfPose,\n planeOfNode: wiredPlaneOfNode,\n moveOptions: wiredMoveOptions,\n };\n}\n"],"mappings":"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"}
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
import { isCustomEntry as e } from "../layerSlots.js";
|
|
2
|
+
import { buildSceneLayers as t } from "../buildSceneLayer.js";
|
|
3
|
+
import { wireSceneSlotToScene as n } from "../sceneSlotWiring.js";
|
|
4
|
+
import { useSceneLayerList as r } from "../useSceneLayerList.js";
|
|
5
|
+
import { useMemo as i } from "react";
|
|
6
|
+
//#region src/canvas/SceneCanvas/useSceneSlotLayers.ts
|
|
7
|
+
function a(a) {
|
|
8
|
+
let { slot: o, scene: s, adapter: c, alphaFor: l, colorOverrides: u, boundsOf: d, previewIds: f } = a, p = i(() => !o || e(o) ? o : n(o, s, l, u), [
|
|
9
|
+
o,
|
|
10
|
+
l,
|
|
11
|
+
s,
|
|
12
|
+
u
|
|
13
|
+
]), m = r(c);
|
|
14
|
+
return {
|
|
15
|
+
config: p,
|
|
16
|
+
layers: i(() => {
|
|
17
|
+
if (e(p)) return { layers: [{
|
|
18
|
+
key: "scene",
|
|
19
|
+
layer: p.layer
|
|
20
|
+
}] };
|
|
21
|
+
if (p && p.drawOne) return { layers: t(p, c, d, () => {
|
|
22
|
+
let e = new Set(f() ?? []);
|
|
23
|
+
return e.size > 0 ? e : null;
|
|
24
|
+
}) };
|
|
25
|
+
}, [
|
|
26
|
+
p,
|
|
27
|
+
c,
|
|
28
|
+
d,
|
|
29
|
+
f,
|
|
30
|
+
m
|
|
31
|
+
])
|
|
32
|
+
};
|
|
33
|
+
}
|
|
34
|
+
//#endregion
|
|
35
|
+
export { a as useSceneSlotLayers };
|
|
36
|
+
|
|
37
|
+
//# sourceMappingURL=useSceneSlotLayers.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useSceneSlotLayers.js","names":["useSceneSlotLayers","args","config","useMemo","slot","isCustomEntry","wireSceneSlotToScene","scene","alphaFor","colorOverrides","sceneLayersKey","useSceneLayerList","adapter","buildSceneLayers","boundsOf","ids","previewIds"],"sources":["../../../src/canvas/SceneCanvas/useSceneSlotLayers.ts"],"sourcesContent":["/**\n * The scene slot, built: the caller's config wired to the scene, and the\n * canvas layers it paints as. A hierarchical scene gets one canvas layer per\n * scene layer, so the list follows the scene's layers after mount.\n */\nimport { useMemo } from 'react';\nimport type { ColorOverrideRegistry } from '@weasel-js/animator';\nimport type { Node, Scene } from 'core/scene/types';\nimport type { Bounds } from 'core/viewport/fitViewToBounds';\nimport { buildSceneLayers, type SceneSlotConfig } from '../buildSceneLayer';\nimport type { HierarchicalAdapter } from '../buildSceneTree';\nimport { isCustomEntry, type LayersMap, type SceneSlotLayers } from '../layerSlots';\nimport { wireSceneSlotToScene } from '../sceneSlotWiring';\nimport { useSceneLayerList } from '../useSceneLayerList';\n\ntype SceneSlot<TData, TLayer extends string, TPose> =\n LayersMap<Node<TData, TLayer, TPose>, TPose>['scene'];\n\nexport function useSceneSlotLayers<TData, TLayer extends string, TPose>(args: {\n /** The slot after `mergeLayersWithDefaults`. */\n slot: SceneSlot<TData, TLayer, TPose>;\n scene: Scene<TData, TLayer, TPose>;\n adapter: HierarchicalAdapter<Node<TData, TLayer, TPose>, TPose>;\n alphaFor: ((id: string) => number) | undefined;\n colorOverrides: ColorOverrideRegistry | undefined;\n /** Committed bounds of a node, for the debug overlay's record of it. */\n boundsOf: (id: string) => Bounds | null;\n /** Ids an in-flight gesture is ghosting; their committed paint is left out\n * so the source does not show through the ghost. */\n previewIds: () => Iterable<string> | null;\n}): {\n /** The scene-wired config, for whatever else paints with its `drawOne`. */\n config: SceneSlot<TData, TLayer, TPose>;\n /** Absent when the slot is empty or carries no `drawOne`; a pre-built layer is the whole slot. */\n layers: SceneSlotLayers | undefined;\n} {\n const { slot, scene, adapter, alphaFor, colorOverrides, boundsOf, previewIds } = args;\n\n const config = useMemo(() => {\n if (!slot || isCustomEntry(slot)) return slot;\n return wireSceneSlotToScene(\n slot as SceneSlotConfig<Node<TData, TLayer, TPose>, TPose>,\n scene,\n alphaFor,\n colorOverrides,\n );\n }, [slot, alphaFor, scene, colorOverrides]);\n\n const sceneLayersKey = useSceneLayerList(adapter);\n const layers = useMemo<SceneSlotLayers | undefined>(() => {\n if (isCustomEntry(config)) return { layers: [{ key: 'scene', layer: config.layer }] };\n if (!config || !config.drawOne) return undefined;\n return {\n layers: buildSceneLayers(config, adapter, boundsOf, () => {\n const ids = new Set(previewIds() ?? []);\n return ids.size > 0 ? ids : null;\n }),\n };\n // `sceneLayersKey` stands for `adapter.getLayers()`, which `buildSceneLayers` reads.\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [config, adapter, boundsOf, previewIds, sceneLayersKey]);\n\n return { config, layers };\n}\n"],"mappings":";;;;;;AAkBA,SAAgBA,EAAwD,GAiBtE;CACA,IAAM,EAAE,SAAM,UAAO,YAAS,aAAU,mBAAgB,aAAU,kBAAeC,GAE3EC,IAASC,QACT,CAACC,KAAQC,EAAcD,CAAI,IAAUA,IAClCE,EACLF,GACAG,GACAC,GACAC,CACF,GACC;EAACL;EAAMI;EAAUD;EAAOE;CAAc,CAAC,GAEpCC,IAAiBC,EAAkBC,CAAO;CAchD,OAAO;EAAE;EAAQ,QAbFT,QAA2C;GACxD,IAAIE,EAAcH,CAAM,GAAG,OAAO,EAAE,QAAQ,CAAC;IAAE,KAAK;IAAS,OAAOA,EAAO;GAAM,CAAC,EAAE;GACpF,IAAKA,KAAWA,EAAO,SACvB,OAAO,EACL,QAAQW,EAAiBX,GAAQU,GAASE,SAAgB;IACxD,IAAMC,IAAM,IAAI,IAAIC,EAAW,KAAK,CAAC,CAAC;IACtC,OAAOD,EAAI,OAAO,IAAIA,IAAM;GAC9B,CAAC,EACH;EAGF,GAAG;GAACb;GAAQU;GAASE;GAAUE;GAAYN;EAAc,CAExC;CAAO;AAC1B"}
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
import { isCustomEntry as e } from "../layerSlots.js";
|
|
2
|
+
import { createSelectionOverlayLayer as t, rotationBadgeOf as n } from "../../features/selection/overlay.js";
|
|
3
|
+
import { useMemo as r } from "react";
|
|
4
|
+
//#region src/canvas/SceneCanvas/useSelectionOverlayLayer.ts
|
|
5
|
+
function i(i, a, o) {
|
|
6
|
+
let s = i && !e(i) ? n(i) : null, c = r(() => s, [s?.distancePx, s?.sizePx]);
|
|
7
|
+
return {
|
|
8
|
+
layer: r(() => {
|
|
9
|
+
if (i === null) return null;
|
|
10
|
+
if (e(i)) return i.layer;
|
|
11
|
+
let n = i ?? {}, r = n.getSuppressedIds, s = () => {
|
|
12
|
+
let e = a(), t = r?.();
|
|
13
|
+
if (!t || t.size === 0) return e;
|
|
14
|
+
if (e.size === 0) return t;
|
|
15
|
+
let n = new Set(t);
|
|
16
|
+
for (let t of e) n.add(t);
|
|
17
|
+
return n;
|
|
18
|
+
};
|
|
19
|
+
return t({
|
|
20
|
+
...n,
|
|
21
|
+
getSuppressedIds: s,
|
|
22
|
+
...n.poseById ? {
|
|
23
|
+
getPose: n.poseById,
|
|
24
|
+
poseDescriptor: n.poseDescriptor ?? o
|
|
25
|
+
} : {}
|
|
26
|
+
});
|
|
27
|
+
}, [
|
|
28
|
+
i,
|
|
29
|
+
a,
|
|
30
|
+
o
|
|
31
|
+
]),
|
|
32
|
+
rotationBadge: c
|
|
33
|
+
};
|
|
34
|
+
}
|
|
35
|
+
//#endregion
|
|
36
|
+
export { i as useSelectionOverlayLayer };
|
|
37
|
+
|
|
38
|
+
//# sourceMappingURL=useSelectionOverlayLayer.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useSelectionOverlayLayer.js","names":["useSelectionOverlayLayer","badge","slot","isCustomEntry","rotationBadgeOf","rotationBadge","useMemo","cfg","callerSuppress","getSuppressedIds","own","getOwnSuppressedIds","caller","merged","id","createSelectionOverlayLayer","poseDescriptor"],"sources":["../../../src/canvas/SceneCanvas/useSelectionOverlayLayer.ts"],"sourcesContent":["/**\n * The selection-overlay slot, built, and where it paints its rotate badge.\n * Both are `null` when the slot is switched off, and a pre-built layer has no badge.\n */\nimport { useMemo } from 'react';\nimport type { RenderLayer } from 'core/layers/render';\nimport { createSelectionOverlayLayer, rotationBadgeOf } from 'features/selection/overlay';\nimport type { PoseDescriptor } from 'interactions/actions/resize/geometry';\nimport { isCustomEntry, type CustomLayerEntry, type SelectionOverlaySlotConfig } from '../layerSlots';\n\nexport function useSelectionOverlayLayer<TPose>(\n /** The slot after `mergeLayersWithDefaults`. */\n slot: SelectionOverlaySlotConfig<TPose> | CustomLayerEntry | null | undefined,\n /** Ids whose outline and handles other chrome replaces, on top of the\n * slot's own `getSuppressedIds`: the node whose anchors are being edited. */\n getOwnSuppressedIds: () => ReadonlySet<string>,\n /** What a slot's `poseById` is projected with when it names no descriptor. */\n poseDescriptor: PoseDescriptor<TPose>,\n): {\n layer: RenderLayer<unknown> | null;\n rotationBadge: ReturnType<typeof rotationBadgeOf>;\n} {\n const badge = slot && !isCustomEntry(slot) ? rotationBadgeOf(slot) : null;\n // Kept by value so the layers and hit-testers keyed on it don't rebuild\n // every render.\n const rotationBadge = useMemo(\n () => badge,\n // eslint-disable-next-line react-hooks/exhaustive-deps\n [badge?.distancePx, badge?.sizePx],\n );\n const layer = useMemo(() => {\n if (slot === null) return null;\n if (isCustomEntry(slot)) return slot.layer;\n const cfg = slot ?? {};\n const callerSuppress = cfg.getSuppressedIds;\n const getSuppressedIds = (): ReadonlySet<string> => {\n const own = getOwnSuppressedIds();\n const caller = callerSuppress?.();\n if (!caller || caller.size === 0) return own;\n if (own.size === 0) return caller;\n const merged = new Set<string>(caller);\n for (const id of own) merged.add(id);\n return merged;\n };\n return createSelectionOverlayLayer<TPose>({\n ...cfg,\n getSuppressedIds,\n // A caller's pose lookup still needs a geometry to project with; without\n // one the layer reads bounds off the chrome state and calls neither.\n ...(cfg.poseById\n ? { getPose: cfg.poseById, poseDescriptor: cfg.poseDescriptor ?? poseDescriptor }\n : {}),\n });\n }, [slot, getOwnSuppressedIds, poseDescriptor]);\n return { layer, rotationBadge };\n}\n"],"mappings":";;;;AAUA,SAAgBA,EAEd,GAGA,GAEA,GAIA;CACA,IAAMC,IAAQC,KAAQ,CAACC,EAAcD,CAAI,IAAIE,EAAgBF,CAAI,IAAI,MAG/DG,IAAgBC,QACdL,GAEN,CAACA,GAAO,YAAYA,GAAO,MAAM,CACnC;CAyBA,OAAO;EAAE,OAxBKK,QAAc;GAC1B,IAAIJ,MAAS,MAAM,OAAO;GAC1B,IAAIC,EAAcD,CAAI,GAAG,OAAOA,EAAK;GACrC,IAAMK,IAAML,KAAQ,CAAC,GACfM,IAAiBD,EAAI,kBACrBE,UAA8C;IAClD,IAAMC,IAAMC,EAAoB,GAC1BC,IAASJ,IAAiB;IAChC,IAAI,CAACI,KAAUA,EAAO,SAAS,GAAG,OAAOF;IACzC,IAAIA,EAAI,SAAS,GAAG,OAAOE;IAC3B,IAAMC,IAAS,IAAI,IAAYD,CAAM;IACrC,KAAK,IAAME,KAAMJ,GAAK,EAAO,IAAII,CAAE;IACnC,OAAOD;GACT;GACA,OAAOE,EAAmC;IACxC,GAAGR;IACH;IAGA,GAAIA,EAAI,WACJ;KAAE,SAASA,EAAI;KAAU,gBAAgBA,EAAI,kBAAkBS;IAAe,IAC9E,CAAC;GACP,CAAC;EACH,GAAG;GAACd;GAAMS;GAAqBK;EAAc,CACpC;EAAO;CAAc;AAChC"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import { createSceneLayerGate as e } from "../sceneLayerPaint.js";
|
|
2
|
+
import { useOptionalViewRegistry as t } from "../viewRegistry.js";
|
|
3
|
+
import { useCallback as n, useState as r } from "react";
|
|
4
|
+
import { useLatest as i } from "@weasel-js/react";
|
|
5
|
+
//#region src/canvas/SceneCanvas/useViewLayerGate.ts
|
|
6
|
+
function a(a, o) {
|
|
7
|
+
let s = t(), c = i({
|
|
8
|
+
layerVisibility: a,
|
|
9
|
+
layerOrder: o
|
|
10
|
+
}), [l] = r(e), u = n((e) => l(s?.surface()?.layers() ?? [], c.current)(e), [
|
|
11
|
+
s,
|
|
12
|
+
l,
|
|
13
|
+
c
|
|
14
|
+
]);
|
|
15
|
+
return a !== void 0 || o !== void 0 ? u : void 0;
|
|
16
|
+
}
|
|
17
|
+
//#endregion
|
|
18
|
+
export { a as useViewLayerGate };
|
|
19
|
+
|
|
20
|
+
//# sourceMappingURL=useViewLayerGate.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useViewLayerGate.js","names":["useViewLayerGate","surfaceViewRegistry","useOptionalViewRegistry","layerPaintRef","useLatest","sceneLayerGate","useState","createSceneLayerGate","layerIsPainted","useCallback","layerId","layerVisibility","layerOrder"],"sources":["../../../src/canvas/SceneCanvas/useViewLayerGate.ts"],"sourcesContent":["import { useCallback, useState } from 'react';\nimport { useLatest } from '@weasel-js/react';\nimport { createSceneLayerGate, type ViewLayerPaint } from '../sceneLayerPaint';\nimport { useOptionalViewRegistry } from '../viewRegistry';\n\n/**\n * Whether the surface's own view paints a scene layer, judged against the\n * stack `<Canvas>` composed and read at pick time, so a consumer slot anchored\n * between scene layers is weighed the way paint weighs it. Undefined when the\n * view hides nothing, so a pick walk skips the gate.\n */\nexport function useViewLayerGate(\n layerVisibility: ViewLayerPaint['layerVisibility'],\n layerOrder: ViewLayerPaint['layerOrder'],\n): ((layerId: string) => boolean) | undefined {\n const surfaceViewRegistry = useOptionalViewRegistry();\n const layerPaintRef = useLatest<ViewLayerPaint>({ layerVisibility, layerOrder });\n const [sceneLayerGate] = useState(createSceneLayerGate);\n const layerIsPainted = useCallback((layerId: string): boolean => (\n sceneLayerGate(surfaceViewRegistry?.surface()?.layers() ?? [], layerPaintRef.current)(layerId)\n ), [surfaceViewRegistry, sceneLayerGate, layerPaintRef]);\n return layerVisibility !== undefined || layerOrder !== undefined ? layerIsPainted : undefined;\n}\n"],"mappings":";;;;;AAWA,SAAgBA,EACd,GACA,GAC4C;CAC5C,IAAMC,IAAsBC,EAAwB,GAC9CC,IAAgBC,EAA0B;EAAE;EAAiB;CAAW,CAAC,GACzE,CAACC,KAAkBC,EAASC,CAAoB,GAChDC,IAAiBC,GAAa,MAClCJ,EAAeJ,GAAqB,QAAQ,CAAC,EAAE,OAAO,KAAK,CAAC,GAAGE,EAAc,OAAO,CAAC,CAACO,CAAO,GAC5F;EAACT;EAAqBI;EAAgBF;CAAa,CAAC;CACvD,OAAOQ,MAAoB,KAAA,KAAaC,MAAe,KAAA,IAAYJ,IAAiB,KAAA;AACtF"}
|
|
@@ -24,7 +24,15 @@ function o(o) {
|
|
|
24
24
|
m
|
|
25
25
|
]);
|
|
26
26
|
}
|
|
27
|
+
function s(e, t) {
|
|
28
|
+
if (e === !1) return !1;
|
|
29
|
+
let n = typeof e == "object" ? e : {};
|
|
30
|
+
return t ? {
|
|
31
|
+
...n,
|
|
32
|
+
animate: t === !0 ? {} : t
|
|
33
|
+
} : n;
|
|
34
|
+
}
|
|
27
35
|
//#endregion
|
|
28
|
-
export { o as useViewportActions };
|
|
36
|
+
export { o as useViewportActions, s as viewportZoomOption };
|
|
29
37
|
|
|
30
38
|
//# sourceMappingURL=useViewportActions.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useViewportActions.js","names":["useViewportActions","args","reg","useActionsRegistry","regRef","useLatest","panKey","pan","zoomKey","zoom","pinchKey","pinchZoom","unregisters","makeViewportWheelPanAction","zoomAction","makeViewportZoomAction","makePinchZoomAction","u"],"sources":["../../../src/canvas/SceneCanvas/useViewportActions.ts"],"sourcesContent":["/**\n *
|
|
1
|
+
{"version":3,"file":"useViewportActions.js","names":["useViewportActions","args","reg","useActionsRegistry","regRef","useLatest","panKey","pan","zoomKey","zoom","pinchKey","pinchZoom","unregisters","makeViewportWheelPanAction","zoomAction","makeViewportZoomAction","makePinchZoomAction","u","viewportZoomOption","base","animatedZoom"],"sources":["../../../src/canvas/SceneCanvas/useViewportActions.ts"],"sourcesContent":["/**\n * Registers the wheel pan, zoom, and pinch zoom actions from SceneCanvas's\n * `viewport` prop.\n *\n * Wheel pan and zoom are registered only here. `pinchZoom` is also a kit\n * standard action, so this hook re-registers a configured one over it, or\n * mutes it — muting rather than unregistering, so a sibling canvas sharing the\n * registry keeps its own. That overlap is why this must run after\n * `useStandardActions`.\n */\nimport { useEffect } from 'react';\nimport { useActionsRegistry } from '@weasel-js/routing/react';\nimport { useLatest } from '@weasel-js/react';\nimport {\n makeViewportWheelPanAction,\n type WheelPanOptions,\n} from 'interactions/actions/defaults/viewportWheelPan';\nimport {\n makeViewportZoomAction,\n type ViewportZoomOptions,\n} from 'interactions/actions/defaults/viewportZoom';\nimport {\n makePinchZoomAction,\n type PinchZoomOptions,\n} from 'interactions/actions/defaults/pinchZoom';\n\nexport function useViewportActions(args: {\n /** `true`/`false` toggles wheel pan; an object locks its axis (see\n * {@link WheelPanOptions}). */\n pan: boolean | WheelPanOptions;\n /** `true`/`false` toggles the default Cmd+wheel zoom; an object tunes the\n * wheel trigger + scale clamp (see {@link ViewportZoomOptions}). */\n zoom: boolean | ViewportZoomOptions;\n /** `true`/`false` toggles two-finger pinch zoom; an object sets its scale\n * clamp (see {@link PinchZoomOptions}). */\n pinchZoom: boolean | PinchZoomOptions;\n}): void {\n const { pan, zoom, pinchZoom } = args;\n const reg = useActionsRegistry();\n const regRef = useLatest(reg);\n\n // Serialized so the effect re-runs when a config's fields change, not its\n // identity. JSON.stringify drops function-valued fields, so changing only\n // `animate.easing` does not re-register — pass a stable easing.\n const panKey = typeof pan === 'object' ? JSON.stringify(pan) : String(pan);\n const zoomKey = typeof zoom === 'object' ? JSON.stringify(zoom) : String(zoom);\n const pinchKey = typeof pinchZoom === 'object' ? JSON.stringify(pinchZoom) : String(pinchZoom);\n\n useEffect(() => {\n const r = regRef.current;\n if (!r) return;\n const unregisters: Array<() => void> = [];\n if (pan) {\n unregisters.push(\n r.register(makeViewportWheelPanAction(typeof pan === 'object' ? pan : {})),\n );\n }\n if (zoom) {\n const zoomAction =\n typeof zoom === 'object' ? makeViewportZoomAction(zoom) : makeViewportZoomAction();\n unregisters.push(r.register(zoomAction));\n }\n if (pinchZoom) {\n unregisters.push(\n r.register(makePinchZoomAction(typeof pinchZoom === 'object' ? pinchZoom : {})),\n );\n } else {\n unregisters.push(r.mute('viewport.pinchZoom'));\n }\n return () => { for (const u of unregisters) u(); };\n // eslint-disable-next-line react-hooks/exhaustive-deps -- configs tracked via zoomKey / pinchKey\n }, [panKey, zoomKey, pinchKey]);\n}\n\n/**\n * `viewport.zoom` with `viewport.animatedZoom` folded in as the zoom action's\n * `animate` option, the way `pinchZoom` carries the pinch tool's clamp.\n */\nexport function viewportZoomOption(\n zoom: boolean | ViewportZoomOptions | undefined,\n animatedZoom: ViewportZoomOptions['animate'] | undefined,\n): boolean | ViewportZoomOptions {\n if (zoom === false) return false;\n const base = typeof zoom === 'object' ? zoom : {};\n if (!animatedZoom) return base;\n return { ...base, animate: animatedZoom === true ? {} : animatedZoom };\n}\n"],"mappings":";;;;;;;AA0BA,SAAgBA,EAAmB,GAU1B;CACP,IAAM,EAAE,QAAK,SAAM,iBAAcC,GAC3BC,IAAMC,EAAmB,GACzBC,IAASC,EAAUH,CAAG,GAKtBI,IAAS,OAAOC,KAAQ,WAAW,KAAK,UAAUA,CAAG,IAAI,OAAOA,CAAG,GACnEC,IAAU,OAAOC,KAAS,WAAW,KAAK,UAAUA,CAAI,IAAI,OAAOA,CAAI,GACvEC,IAAW,OAAOC,KAAc,WAAW,KAAK,UAAUA,CAAS,IAAI,OAAOA,CAAS;CAE7F,QAAgB;EACd,IAAM,IAAIP,EAAO;EACjB,IAAI,CAAC,GAAG;EACR,IAAMQ,IAAiC,CAAC;EAMxC,IALIL,KACFK,EAAY,KACV,EAAE,SAASC,EAA2B,OAAON,KAAQ,WAAWA,IAAM,CAAC,CAAC,CAAC,CAC3E,GAEEE,GAAM;GACR,IAAMK,IACJ,OAAOL,KAAS,WAAWM,EAAuBN,CAAI,IAAIM,EAAuB;GACnF,EAAY,KAAK,EAAE,SAASD,CAAU,CAAC;EACzC;EAQA,OAPIH,IACFC,EAAY,KACV,EAAE,SAASI,EAAoB,OAAOL,KAAc,WAAWA,IAAY,CAAC,CAAC,CAAC,CAChF,IAEAC,EAAY,KAAK,EAAE,KAAK,oBAAoB,CAAC,SAElC;GAAE,KAAK,IAAMK,KAAKL,GAAa,EAAE;EAAG;CAEnD,GAAG;EAACN;EAAQE;EAASE;CAAQ,CAAC;AAChC;AAMA,SAAgBQ,EACd,GACA,GAC+B;CAC/B,IAAIT,MAAS,IAAO,OAAO;CAC3B,IAAMU,IAAO,OAAOV,KAAS,WAAWA,IAAO,CAAC;CAEhD,OADKW,IACE;EAAE,GAAGD;EAAM,SAASC,MAAiB,KAAO,CAAC,IAAIA;CAAa,IAD3CD;AAE5B"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import { clientToWorld as e } from "../../core/viewport/clientToWorld.js";
|
|
2
|
+
//#region src/canvas/SceneCanvas/worldPointAt.ts
|
|
3
|
+
function t(t, n, r, i) {
|
|
4
|
+
return !n || n.id === null ? t.clientToWorld(r, i) : e(r, i, n.origin, n.view);
|
|
5
|
+
}
|
|
6
|
+
//#endregion
|
|
7
|
+
export { t as worldPointAt };
|
|
8
|
+
|
|
9
|
+
//# sourceMappingURL=worldPointAt.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"worldPointAt.js","names":["worldPointAt","target","api","clientX","clientY","clientToWorld"],"sources":["../../../src/canvas/SceneCanvas/worldPointAt.ts"],"sourcesContent":["import { clientToWorld } from 'core/viewport/clientToWorld';\nimport type { ViewTarget } from 'features/viewports/viewResolver';\nimport type { CanvasExtensionApi } from '../canvasExtension';\n\n/**\n * A client point in the world of the view it resolved to. The canvas's own\n * view converts through the handle, which honors a `clientToWorld` override;\n * a declared view has a rect and a camera of its own, which the override\n * knows nothing about.\n */\nexport function worldPointAt(\n api: Pick<CanvasExtensionApi, 'clientToWorld'>,\n target: ViewTarget | undefined,\n clientX: number,\n clientY: number,\n): [number, number] {\n if (!target || target.id === null) return api.clientToWorld(clientX, clientY);\n return clientToWorld(clientX, clientY, target.origin, target.view);\n}\n"],"mappings":";;AAUA,SAAgBA,EACd,GACA,GACA,GACA,GACkB;CAElB,OADI,CAACC,KAAUA,EAAO,OAAO,OAAaC,EAAI,cAAcC,GAASC,CAAO,IACrEC,EAAcF,GAASC,GAASH,EAAO,QAAQA,EAAO,IAAI;AACnE"}
|