@weasel-js/core 1.9.4 → 1.10.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +918 -0
- package/README.md +38 -3
- package/dist/WeaselProvider.js +5 -7
- package/dist/WeaselProvider.js.map +1 -1
- package/dist/affordances/composeAffordanceLayer.js +92 -84
- package/dist/affordances/composeAffordanceLayer.js.map +1 -1
- package/dist/affordances/cornerResize.js +3 -2
- package/dist/affordances/cornerResize.js.map +1 -1
- package/dist/affordances/hitAffordanceRegions.js +71 -101
- package/dist/affordances/hitAffordanceRegions.js.map +1 -1
- package/dist/affordances/pathAnchors.js +50 -28
- package/dist/affordances/pathAnchors.js.map +1 -1
- package/dist/affordances/rotateCursor.js +12 -0
- package/dist/affordances/rotateCursor.js.map +1 -0
- package/dist/affordances/rotationHandle.js +44 -46
- package/dist/affordances/rotationHandle.js.map +1 -1
- package/dist/animation/behaviors/coast.js +21 -0
- package/dist/animation/behaviors/coast.js.map +1 -0
- package/dist/animation/behaviors/coastByWrite.js +107 -0
- package/dist/animation/behaviors/coastByWrite.js.map +1 -0
- package/dist/animation/behaviors/coastOnTargets.js +94 -0
- package/dist/animation/behaviors/coastOnTargets.js.map +1 -0
- package/dist/animation/behaviors/momentum.js +48 -136
- package/dist/animation/behaviors/momentum.js.map +1 -1
- package/dist/animation/clipTargets.js +12 -0
- package/dist/animation/clipTargets.js.map +1 -0
- package/dist/animation/index.js +15 -20
- package/dist/animation/poseHelpers.js +112 -33
- package/dist/animation/poseHelpers.js.map +1 -1
- package/dist/animation/poseTarget.js +115 -0
- package/dist/animation/poseTarget.js.map +1 -0
- package/dist/animation/reflow.js +113 -83
- package/dist/animation/reflow.js.map +1 -1
- package/dist/animation/rewind.js +66 -0
- package/dist/animation/rewind.js.map +1 -0
- package/dist/animation/rig/bindRig.js +85 -53
- package/dist/animation/rig/bindRig.js.map +1 -1
- package/dist/animation/rig/rigNode.js +99 -0
- package/dist/animation/rig/rigNode.js.map +1 -0
- package/dist/animation/rig/rigSeat.js +59 -0
- package/dist/animation/rig/rigSeat.js.map +1 -0
- package/dist/animation/rig/skinBinding.js +64 -0
- package/dist/animation/rig/skinBinding.js.map +1 -0
- package/dist/animation/rig/useRig.js +31 -16
- package/dist/animation/rig/useRig.js.map +1 -1
- package/dist/animation/wrappers/animateLifecycle.js +8 -7
- package/dist/animation/wrappers/animateLifecycle.js.map +1 -1
- package/dist/animation/wrappers/animateOnSetPose.js +31 -31
- package/dist/animation/wrappers/animateOnSetPose.js.map +1 -1
- package/dist/animation/wrappers/instantPose.js.map +1 -1
- package/dist/animation/writtenPoseTarget.js +33 -0
- package/dist/animation/writtenPoseTarget.js.map +1 -0
- package/dist/autoPoseDescriptor-DHg5KqaJ.d.ts +27 -0
- package/dist/barrel/canvas.js +32 -0
- package/dist/barrel/chrome.js +10 -10
- package/dist/barrel/input.js +16 -17
- package/dist/barrel/interactions.js +34 -37
- package/dist/barrel/paint.js +11 -18
- package/dist/barrel/paths.js +13 -19
- package/dist/barrel/renderer.js +14 -20
- package/dist/barrel/routing.js +54 -47
- package/dist/barrel/scene.js +37 -0
- package/dist/barrel/text.js +9 -18
- package/dist/barrel/viewport.js +44 -51
- package/dist/canvas/Canvas.js +270 -475
- package/dist/canvas/Canvas.js.map +1 -1
- package/dist/canvas/CanvasView.js +168 -190
- package/dist/canvas/CanvasView.js.map +1 -1
- package/dist/canvas/CursorCoordsHud.js +24 -25
- package/dist/canvas/CursorCoordsHud.js.map +1 -1
- package/dist/canvas/DrawCanvas.js +39 -56
- package/dist/canvas/DrawCanvas.js.map +1 -1
- package/dist/canvas/ModalityHud.js.map +1 -1
- package/dist/canvas/NodeShape.js +28 -29
- package/dist/canvas/NodeShape.js.map +1 -1
- package/dist/canvas/PickHud.js.map +1 -1
- package/dist/canvas/SceneCanvas/DevHuds.js +40 -0
- package/dist/canvas/SceneCanvas/DevHuds.js.map +1 -0
- package/dist/canvas/SceneCanvas/GestureDispatcherMounter.js +66 -107
- package/dist/canvas/SceneCanvas/GestureDispatcherMounter.js.map +1 -1
- package/dist/canvas/SceneCanvas/PointerProviderIfRoot.js +33 -36
- package/dist/canvas/SceneCanvas/PointerProviderIfRoot.js.map +1 -1
- package/dist/canvas/SceneCanvas/StandardActionsRegistrar.js +38 -50
- package/dist/canvas/SceneCanvas/StandardActionsRegistrar.js.map +1 -1
- package/dist/canvas/SceneCanvas/ToolKeybindingsMounter.js +3 -3
- package/dist/canvas/SceneCanvas/ToolKeybindingsMounter.js.map +1 -1
- package/dist/canvas/SceneCanvas/coordTrace.js +37 -1
- package/dist/canvas/SceneCanvas/coordTrace.js.map +1 -1
- package/dist/canvas/SceneCanvas/defaultNodeProperties.js +319 -270
- package/dist/canvas/SceneCanvas/defaultNodeProperties.js.map +1 -1
- package/dist/canvas/SceneCanvas/defaultNodeRouting.js +1 -1
- package/dist/canvas/SceneCanvas/defaultNodeRouting.js.map +1 -1
- package/dist/canvas/SceneCanvas/dispatcherGestureBounds.js.map +1 -1
- package/dist/canvas/SceneCanvas/features.js +71 -62
- package/dist/canvas/SceneCanvas/features.js.map +1 -1
- package/dist/canvas/SceneCanvas/insertPreviewCommands.js +97 -0
- package/dist/canvas/SceneCanvas/insertPreviewCommands.js.map +1 -0
- package/dist/canvas/SceneCanvas/isDev.js.map +1 -1
- package/dist/canvas/SceneCanvas/poseGeometry.js +33 -37
- package/dist/canvas/SceneCanvas/poseGeometry.js.map +1 -1
- package/dist/canvas/SceneCanvas/props.js +15 -14
- package/dist/canvas/SceneCanvas/props.js.map +1 -1
- package/dist/canvas/SceneCanvas/scenePointQuery.js +50 -0
- package/dist/canvas/SceneCanvas/scenePointQuery.js.map +1 -0
- package/dist/canvas/SceneCanvas/shapeGeneratorProperties.js +52 -0
- package/dist/canvas/SceneCanvas/shapeGeneratorProperties.js.map +1 -0
- package/dist/canvas/SceneCanvas/toolRegistry.js +23 -0
- package/dist/canvas/SceneCanvas/toolRegistry.js.map +1 -0
- package/dist/canvas/SceneCanvas/useActionTunings.js +17 -0
- package/dist/canvas/SceneCanvas/useActionTunings.js.map +1 -0
- package/dist/canvas/SceneCanvas/useActionsPropResolver.js +6 -1
- package/dist/canvas/SceneCanvas/useActionsPropResolver.js.map +1 -1
- package/dist/canvas/SceneCanvas/useBuiltinShapeTools.js.map +1 -1
- package/dist/canvas/SceneCanvas/useBuiltinTools.js +21 -0
- package/dist/canvas/SceneCanvas/useBuiltinTools.js.map +1 -0
- package/dist/canvas/SceneCanvas/useCanvasCamera.js +46 -0
- package/dist/canvas/SceneCanvas/useCanvasCamera.js.map +1 -0
- package/dist/canvas/SceneCanvas/useCanvasDispatcher.js +20 -0
- package/dist/canvas/SceneCanvas/useCanvasDispatcher.js.map +1 -0
- package/dist/canvas/SceneCanvas/useCanvasSelection.js +16 -0
- package/dist/canvas/SceneCanvas/useCanvasSelection.js.map +1 -0
- package/dist/canvas/SceneCanvas/useCanvasTools.js +67 -0
- package/dist/canvas/SceneCanvas/useCanvasTools.js.map +1 -0
- package/dist/canvas/SceneCanvas/useDispatcherOverlayLayer.js +49 -113
- package/dist/canvas/SceneCanvas/useDispatcherOverlayLayer.js.map +1 -1
- package/dist/canvas/SceneCanvas/useHeldModifiers.js +20 -0
- package/dist/canvas/SceneCanvas/useHeldModifiers.js.map +1 -0
- package/dist/canvas/SceneCanvas/useNodeAtPoint.js +26 -0
- package/dist/canvas/SceneCanvas/useNodeAtPoint.js.map +1 -0
- package/dist/canvas/SceneCanvas/useNodeKinds.js +26 -0
- package/dist/canvas/SceneCanvas/useNodeKinds.js.map +1 -0
- package/dist/canvas/SceneCanvas/usePreviewGhostLayer.js +51 -41
- package/dist/canvas/SceneCanvas/usePreviewGhostLayer.js.map +1 -1
- package/dist/canvas/SceneCanvas/useSceneCanvasHandle.js +47 -0
- package/dist/canvas/SceneCanvas/useSceneCanvasHandle.js.map +1 -0
- package/dist/canvas/SceneCanvas/useSceneCanvasLayers.js +66 -0
- package/dist/canvas/SceneCanvas/useSceneCanvasLayers.js.map +1 -0
- package/dist/canvas/SceneCanvas/useSceneChrome.js +59 -0
- package/dist/canvas/SceneCanvas/useSceneChrome.js.map +1 -0
- package/dist/canvas/SceneCanvas/useSceneRedrawSources.js +23 -0
- package/dist/canvas/SceneCanvas/useSceneRedrawSources.js.map +1 -0
- package/dist/canvas/SceneCanvas/useSceneSelectTool.js +65 -101
- package/dist/canvas/SceneCanvas/useSceneSelectTool.js.map +1 -1
- package/dist/canvas/SceneCanvas/useSceneSlotLayers.js +37 -0
- package/dist/canvas/SceneCanvas/useSceneSlotLayers.js.map +1 -0
- package/dist/canvas/SceneCanvas/useSelectionOverlayLayer.js +38 -0
- package/dist/canvas/SceneCanvas/useSelectionOverlayLayer.js.map +1 -0
- package/dist/canvas/SceneCanvas/useViewLayerGate.js +20 -0
- package/dist/canvas/SceneCanvas/useViewLayerGate.js.map +1 -0
- package/dist/canvas/SceneCanvas/useViewportActions.js +9 -1
- package/dist/canvas/SceneCanvas/useViewportActions.js.map +1 -1
- package/dist/canvas/SceneCanvas/worldPointAt.js +8 -0
- package/dist/canvas/SceneCanvas/worldPointAt.js.map +1 -0
- package/dist/canvas/SceneCanvas.js +301 -708
- package/dist/canvas/SceneCanvas.js.map +1 -1
- package/dist/canvas/SceneViewCanvas.js +41 -47
- package/dist/canvas/SceneViewCanvas.js.map +1 -1
- package/dist/canvas/SurfaceCanvas.js +40 -0
- package/dist/canvas/SurfaceCanvas.js.map +1 -0
- package/dist/canvas/adapterDerivedPath.js +26 -0
- package/dist/canvas/adapterDerivedPath.js.map +1 -0
- package/dist/canvas/adapterPickSource.js +34 -0
- package/dist/canvas/adapterPickSource.js.map +1 -0
- package/dist/canvas/affordanceAt.js +12 -2
- package/dist/canvas/affordanceAt.js.map +1 -1
- package/dist/canvas/buildSceneLayer.js +81 -61
- package/dist/canvas/buildSceneLayer.js.map +1 -1
- package/dist/canvas/buildSceneTree.js +56 -34
- package/dist/canvas/buildSceneTree.js.map +1 -1
- package/dist/canvas/canvasRenderer.js +40 -44
- package/dist/canvas/canvasRenderer.js.map +1 -1
- package/dist/canvas/colorOverrides.js.map +1 -1
- package/dist/canvas/copiesAbove.js +27 -0
- package/dist/canvas/copiesAbove.js.map +1 -0
- package/dist/canvas/defaultDrawOne.js +25 -24
- package/dist/canvas/defaultDrawOne.js.map +1 -1
- package/dist/canvas/deps/areaSelect.js +4 -4
- package/dist/canvas/deps/areaSelect.js.map +1 -1
- package/dist/canvas/deps/debug.js.map +1 -1
- package/dist/canvas/deps/editAnchors.js +47 -71
- package/dist/canvas/deps/editAnchors.js.map +1 -1
- package/dist/canvas/deps/geometryProjection.js.map +1 -1
- package/dist/canvas/deps/hitTestArea.js +45 -25
- package/dist/canvas/deps/hitTestArea.js.map +1 -1
- package/dist/canvas/deps/insert.js +149 -104
- package/dist/canvas/deps/insert.js.map +1 -1
- package/dist/canvas/deps/lassoSelect.js +5 -5
- package/dist/canvas/deps/lassoSelect.js.map +1 -1
- package/dist/canvas/deps/layout.js +9 -15
- package/dist/canvas/deps/layout.js.map +1 -1
- package/dist/canvas/deps/poseDescriptor.js +1 -1
- package/dist/canvas/deps/poseDescriptor.js.map +1 -1
- package/dist/canvas/deps/resizePolicy.js.map +1 -1
- package/dist/canvas/deps/slice.js +44 -45
- package/dist/canvas/deps/slice.js.map +1 -1
- package/dist/canvas/deps/textEdit.js +8 -8
- package/dist/canvas/deps/textEdit.js.map +1 -1
- package/dist/canvas/deps/view.js.map +1 -1
- package/dist/canvas/derivedPath.js +69 -43
- package/dist/canvas/derivedPath.js.map +1 -1
- package/dist/canvas/drawEnvelope.js +8 -4
- package/dist/canvas/drawEnvelope.js.map +1 -1
- package/dist/canvas/getNodeAtPoint.js +2 -6
- package/dist/canvas/getNodeAtPoint.js.map +1 -1
- package/dist/canvas/hud.module.js.map +1 -1
- package/dist/canvas/insertPreviewExtent.js +33 -31
- package/dist/canvas/insertPreviewExtent.js.map +1 -1
- package/dist/canvas/layerOrder.js.map +1 -1
- package/dist/canvas/layerSlots.js +6 -1
- package/dist/canvas/layerSlots.js.map +1 -1
- package/dist/canvas/nodeShapes/derivedPainter.js +12 -12
- package/dist/canvas/nodeShapes/derivedPainter.js.map +1 -1
- package/dist/canvas/nodeShapes/imagePainter.js +10 -10
- package/dist/canvas/nodeShapes/imagePainter.js.map +1 -1
- package/dist/canvas/nodeShapes/memo.js.map +1 -1
- package/dist/canvas/nodeShapes/nodePaint.js +34 -23
- package/dist/canvas/nodeShapes/nodePaint.js.map +1 -1
- package/dist/canvas/nodeShapes/pathPainter.js +23 -22
- package/dist/canvas/nodeShapes/pathPainter.js.map +1 -1
- package/dist/canvas/nodeShapes/poseBox.js +6 -6
- package/dist/canvas/nodeShapes/poseBox.js.map +1 -1
- package/dist/canvas/nodeShapes/rectFallbackPainter.js +8 -8
- package/dist/canvas/nodeShapes/rectFallbackPainter.js.map +1 -1
- package/dist/canvas/nodeShapes/shapePainter.js +16 -16
- package/dist/canvas/nodeShapes/shapePainter.js.map +1 -1
- package/dist/canvas/nodeShapes/textPainter.js +1 -1
- package/dist/canvas/nodeShapes/textPainter.js.map +1 -1
- package/dist/canvas/overChildren.js +29 -0
- package/dist/canvas/overChildren.js.map +1 -0
- package/dist/canvas/overlayRoleStrokes.js.map +1 -1
- package/dist/canvas/paintCull.js +6 -8
- package/dist/canvas/paintCull.js.map +1 -1
- package/dist/{features/cursor → canvas}/paintedCursorLayer.js +2 -2
- package/dist/canvas/paintedCursorLayer.js.map +1 -0
- package/dist/canvas/pickReach.js +23 -0
- package/dist/canvas/pickReach.js.map +1 -0
- package/dist/canvas/pickWalk.js +43 -70
- package/dist/canvas/pickWalk.js.map +1 -1
- package/dist/canvas/planeClips.js +18 -19
- package/dist/canvas/planeClips.js.map +1 -1
- package/dist/canvas/poseCascade.js +41 -0
- package/dist/canvas/poseCascade.js.map +1 -0
- package/dist/canvas/poseRotation.js +1 -3
- package/dist/canvas/poseRotation.js.map +1 -1
- package/dist/canvas/rasterReadback.js +22 -0
- package/dist/canvas/rasterReadback.js.map +1 -0
- package/dist/canvas/renderDebugSnapshot.js +12 -12
- package/dist/canvas/renderDebugSnapshot.js.map +1 -1
- package/dist/canvas/renderNeeds.js +3 -3
- package/dist/canvas/renderNeeds.js.map +1 -1
- package/dist/canvas/renderSceneToPixels.js +64 -83
- package/dist/canvas/renderSceneToPixels.js.map +1 -1
- package/dist/canvas/sceneAdapter.js +59 -144
- package/dist/canvas/sceneAdapter.js.map +1 -1
- package/dist/canvas/sceneClipboard.js +1 -1
- package/dist/canvas/sceneClipboard.js.map +1 -1
- package/dist/canvas/sceneLayerPaint.js +4 -4
- package/dist/canvas/sceneLayerPaint.js.map +1 -1
- package/dist/canvas/sceneSlotWiring.js +10 -9
- package/dist/canvas/sceneSlotWiring.js.map +1 -1
- package/dist/canvas/sceneViewRender.js +37 -42
- package/dist/canvas/sceneViewRender.js.map +1 -1
- package/dist/canvas/slopsDebugLayer.js +4 -4
- package/dist/canvas/slopsDebugLayer.js.map +1 -1
- package/dist/canvas/useCanvasRenderer.js +23 -11
- package/dist/canvas/useCanvasRenderer.js.map +1 -1
- package/dist/canvas/useCanvasSurface.js +31 -0
- package/dist/canvas/useCanvasSurface.js.map +1 -0
- package/dist/canvas/useCanvasView.js +51 -44
- package/dist/canvas/useCanvasView.js.map +1 -1
- package/dist/canvas/useFrameLoop.js +11 -12
- package/dist/canvas/useFrameLoop.js.map +1 -1
- package/dist/canvas/useHostAnchor.js +35 -33
- package/dist/canvas/useHostAnchor.js.map +1 -1
- package/dist/canvas/useLateContentRedraw.js +8 -8
- package/dist/canvas/useLateContentRedraw.js.map +1 -1
- package/dist/canvas/useSceneAdapter.js +22 -0
- package/dist/canvas/useSceneAdapter.js.map +1 -0
- package/dist/canvas/useSceneLayerList.js +4 -14
- package/dist/canvas/useSceneLayerList.js.map +1 -1
- package/dist/canvas/useSurfaceInput.js +39 -0
- package/dist/canvas/useSurfaceInput.js.map +1 -0
- package/dist/canvas/useToolCursor.js +29 -0
- package/dist/canvas/useToolCursor.js.map +1 -0
- package/dist/canvas/useViewHelpers.js +46 -85
- package/dist/canvas/useViewHelpers.js.map +1 -1
- package/dist/canvas/viewInputs.js.map +1 -1
- package/dist/canvas/viewRegistry.js +40 -34
- package/dist/canvas/viewRegistry.js.map +1 -1
- package/dist/canvas/watchElementMove.js +43 -0
- package/dist/canvas/watchElementMove.js.map +1 -0
- package/dist/canvas/wrapNodeOutput.js +7 -2
- package/dist/canvas/wrapNodeOutput.js.map +1 -1
- package/dist/clipboard.d.ts +7 -14
- package/dist/{types-B4iJRHC3.d.ts → clone-C0eADtS0.d.ts} +129 -84
- package/dist/clone.d.ts +4 -8
- package/dist/clone.js +0 -2
- package/dist/core/device/targets.js.map +1 -1
- package/dist/core/device/useDeviceProfile.js +13 -13
- package/dist/core/device/useDeviceProfile.js.map +1 -1
- package/dist/{interactions/actions/resize → core/geometry}/autoPoseDescriptor.js +8 -7
- package/dist/core/geometry/autoPoseDescriptor.js.map +1 -0
- package/dist/core/geometry/pathPoseDescriptor.js +88 -0
- package/dist/core/geometry/pathPoseDescriptor.js.map +1 -0
- package/dist/core/geometry/poseDescriptor.js +102 -29
- package/dist/core/geometry/poseDescriptor.js.map +1 -1
- package/dist/core/geometry/regionHit.js +35 -37
- package/dist/core/geometry/regionHit.js.map +1 -1
- package/dist/core/geometry/targetFrame.js +94 -0
- package/dist/core/geometry/targetFrame.js.map +1 -0
- package/dist/core/geometry/unionBounds.js +4 -5
- package/dist/core/geometry/unionBounds.js.map +1 -1
- package/dist/core/layers/backgroundFill.js +31 -0
- package/dist/core/layers/backgroundFill.js.map +1 -0
- package/dist/{features/groups → core/layers}/children.js +2 -4
- package/dist/core/layers/children.js.map +1 -0
- package/dist/{features/focus → core/layers}/gateLayer.js +2 -2
- package/dist/core/layers/gateLayer.js.map +1 -0
- package/dist/core/layers/layerGroup.js +40 -0
- package/dist/core/layers/layerGroup.js.map +1 -0
- package/dist/core/layers/render.js +50 -76
- package/dist/core/layers/render.js.map +1 -1
- package/dist/core/ops/create.js +2 -2
- package/dist/core/ops/create.js.map +1 -1
- package/dist/core/ops/createHistory.js +9 -9
- package/dist/core/ops/createHistory.js.map +1 -1
- package/dist/core/ops/delete.js +19 -23
- package/dist/core/ops/delete.js.map +1 -1
- package/dist/core/ops/reorder/index.js +3 -7
- package/dist/core/ops/reorder/index.js.map +1 -1
- package/dist/core/ops/reorder/setChildOrder.js +2 -4
- package/dist/core/ops/reorder/setChildOrder.js.map +1 -1
- package/dist/core/ops/reparent.js +0 -1
- package/dist/core/ops/reparent.js.map +1 -1
- package/dist/core/ops/slot.js +3 -6
- package/dist/core/ops/slot.js.map +1 -1
- package/dist/core/pages/fitViewToPage.js +15 -0
- package/dist/core/pages/fitViewToPage.js.map +1 -0
- package/dist/core/pages/pages.js +65 -0
- package/dist/core/pages/pages.js.map +1 -0
- package/dist/core/pages/pagesLayer.js +27 -0
- package/dist/core/pages/pagesLayer.js.map +1 -0
- package/dist/core/paint/meshKind.js +16 -0
- package/dist/core/paint/meshKind.js.map +1 -0
- package/dist/{features/meshPaint/lazyKind.js → core/paint/meshKindLazy.js} +104 -93
- package/dist/core/paint/meshKindLazy.js.map +1 -0
- package/dist/core/paint/paintKindEntry.js +8 -0
- package/dist/core/paint/paintKindEntry.js.map +1 -0
- package/dist/core/paint/paintKinds.js +144 -0
- package/dist/core/paint/paintKinds.js.map +1 -0
- package/dist/core/paint/registerMesh.js +7 -0
- package/dist/core/paint/registerMesh.js.map +1 -0
- package/dist/core/scene/NodeProperties.js.map +1 -1
- package/dist/core/scene/NodeRouting.js.map +1 -1
- package/dist/core/scene/arrivalWindow.js +65 -64
- package/dist/core/scene/arrivalWindow.js.map +1 -1
- package/dist/core/scene/boundOps.js +40 -0
- package/dist/core/scene/boundOps.js.map +1 -0
- package/dist/core/scene/composeFrame.js +9 -6
- package/dist/core/scene/composeFrame.js.map +1 -1
- package/dist/core/scene/composePose.js +105 -0
- package/dist/core/scene/composePose.js.map +1 -0
- package/dist/core/scene/depMemo.js +31 -6
- package/dist/core/scene/depMemo.js.map +1 -1
- package/dist/core/scene/derivedPath.js +19 -20
- package/dist/core/scene/derivedPath.js.map +1 -1
- package/dist/core/scene/editMode.js +26 -0
- package/dist/core/scene/editMode.js.map +1 -0
- package/dist/core/scene/effectivePose.js +42 -39
- package/dist/core/scene/effectivePose.js.map +1 -1
- package/dist/core/scene/fieldEdits.js +98 -0
- package/dist/core/scene/fieldEdits.js.map +1 -0
- package/dist/core/scene/historyFacade.js +122 -70
- package/dist/core/scene/historyFacade.js.map +1 -1
- package/dist/core/scene/historyForm.js +6 -0
- package/dist/core/scene/historyForm.js.map +1 -0
- package/dist/core/scene/kitOps.js +83 -71
- package/dist/core/scene/kitOps.js.map +1 -1
- package/dist/core/scene/kitRegistry.js.map +1 -1
- package/dist/core/scene/layerStack.js +105 -12
- package/dist/core/scene/layerStack.js.map +1 -1
- package/dist/core/scene/layoutPass.js +58 -59
- package/dist/core/scene/layoutPass.js.map +1 -1
- package/dist/{features/groups → core/scene}/nestedHit.js +3 -3
- package/dist/core/scene/nestedHit.js.map +1 -0
- package/dist/core/scene/nodeFnFields.js +16 -9
- package/dist/core/scene/nodeFnFields.js.map +1 -1
- package/dist/core/scene/nodeMemo.js.map +1 -1
- package/dist/core/scene/nodeStore.js +72 -71
- package/dist/core/scene/nodeStore.js.map +1 -1
- package/dist/core/scene/notifier.js +37 -0
- package/dist/core/scene/notifier.js.map +1 -0
- package/dist/core/scene/opTable.js +50 -0
- package/dist/core/scene/opTable.js.map +1 -0
- package/dist/core/scene/outerOps.js +67 -0
- package/dist/core/scene/outerOps.js.map +1 -0
- package/dist/core/scene/poseHold.js +39 -0
- package/dist/core/scene/poseHold.js.map +1 -0
- package/dist/core/scene/poseOverrides.js +44 -36
- package/dist/core/scene/poseOverrides.js.map +1 -1
- package/dist/core/scene/poseSnapshot.js.map +1 -1
- package/dist/core/scene/reconcileSpecs.js +4 -3
- package/dist/core/scene/reconcileSpecs.js.map +1 -1
- package/dist/core/scene/recorder.js +86 -0
- package/dist/core/scene/recorder.js.map +1 -0
- package/dist/core/scene/renderOrder.js.map +1 -1
- package/dist/core/scene/scene.js +81 -690
- package/dist/core/scene/scene.js.map +1 -1
- package/dist/core/scene/sceneEdits.js +58 -0
- package/dist/core/scene/sceneEdits.js.map +1 -0
- package/dist/core/scene/sceneMutators.js +49 -0
- package/dist/core/scene/sceneMutators.js.map +1 -0
- package/dist/core/scene/scenePoseAdapter.js +16 -0
- package/dist/core/scene/scenePoseAdapter.js.map +1 -0
- package/dist/core/scene/sceneRecording.js +91 -0
- package/dist/core/scene/sceneRecording.js.map +1 -0
- package/dist/core/scene/sceneSelection.js +28 -0
- package/dist/core/scene/sceneSelection.js.map +1 -0
- package/dist/core/scene/sceneState.js +49 -0
- package/dist/core/scene/sceneState.js.map +1 -0
- package/dist/core/scene/serialization.js +8 -5
- package/dist/core/scene/serialization.js.map +1 -1
- package/dist/core/scene/staleReplay.js +51 -0
- package/dist/core/scene/staleReplay.js.map +1 -0
- package/dist/core/scene/statedFields.js +9 -0
- package/dist/core/scene/statedFields.js.map +1 -0
- package/dist/core/scene/treeEdits.js +127 -0
- package/dist/core/scene/treeEdits.js.map +1 -0
- package/dist/core/scene/treeReads.js +26 -0
- package/dist/core/scene/treeReads.js.map +1 -0
- package/dist/core/scene/types.js.map +1 -1
- package/dist/{features/groups → core/scene}/unionOfChildren.js +3 -3
- package/dist/core/scene/unionOfChildren.js.map +1 -0
- package/dist/core/scene/unitScopes.js +13 -0
- package/dist/core/scene/unitScopes.js.map +1 -0
- package/dist/core/scene/useScene.js.map +1 -1
- package/dist/core/selection/readOnlySelection.js +32 -0
- package/dist/core/selection/readOnlySelection.js.map +1 -0
- package/dist/core/selection/usePublishSceneSelection.js +26 -0
- package/dist/core/selection/usePublishSceneSelection.js.map +1 -0
- package/dist/core/selection/useSelection.js +34 -25
- package/dist/core/selection/useSelection.js.map +1 -1
- package/dist/core/shapeKinds.js.map +1 -1
- package/dist/core/stylus/stylus.js.map +1 -1
- package/dist/core/stylus/usePointerStylus.js.map +1 -1
- package/dist/core/usePaintKinds.js +1 -1
- package/dist/core/usePaintKinds.js.map +1 -1
- package/dist/core/viewport/clientToWorld.js.map +1 -1
- package/dist/core/viewport/fitViewToBounds.js.map +1 -1
- package/dist/core/viewport/parallax.js.map +1 -1
- package/dist/core/viewport/screenSlop.js +11 -11
- package/dist/core/viewport/screenSlop.js.map +1 -1
- package/dist/core/viewport/useCanvasSize.js.map +1 -1
- package/dist/core/viewport/useDecayLoop.js +31 -33
- package/dist/core/viewport/useDecayLoop.js.map +1 -1
- package/dist/core/viewport/useNodeOverlayFrame.js +84 -0
- package/dist/core/viewport/useNodeOverlayFrame.js.map +1 -0
- package/dist/core/viewport/useViewAnimation.js +113 -53
- package/dist/core/viewport/useViewAnimation.js.map +1 -1
- package/dist/core/viewport/view.js +14 -11
- package/dist/core/viewport/view.js.map +1 -1
- package/dist/core/viewport/wheelHandler.js.map +1 -1
- package/dist/core/viewport/zoomAt.js +11 -2
- package/dist/core/viewport/zoomAt.js.map +1 -1
- package/dist/{cornerHandles-CtCb8a3G.d.ts → cornerHandles-BSKbyuvQ.d.ts} +11 -24
- package/dist/debug/createDebugOverlayLayer.js +100 -100
- package/dist/debug/createDebugOverlayLayer.js.map +1 -1
- package/dist/debug/createDebugSink.js.map +1 -1
- package/dist/debug/frameStats.js.map +1 -1
- package/dist/debug/useDebugSink.js +52 -0
- package/dist/debug/useDebugSink.js.map +1 -0
- package/dist/features/chrome-caps/buildChromeCtx.js.map +1 -1
- package/dist/features/chrome-caps/conditions.js.map +1 -1
- package/dist/features/chrome-caps/defaults.js.map +1 -1
- package/dist/features/chrome-caps/resolve.js.map +1 -1
- package/dist/features/chrome-caps/useChromeCaps.js +54 -0
- package/dist/features/chrome-caps/useChromeCaps.js.map +1 -0
- package/dist/features/chrome-caps/useHoverTracking.js.map +1 -1
- package/dist/features/ingestion/contentHandlers.js +25 -19
- package/dist/features/ingestion/contentHandlers.js.map +1 -1
- package/dist/features/ingestion/imageHandler.js +21 -24
- package/dist/features/ingestion/imageHandler.js.map +1 -1
- package/dist/features/ingestion/openFilePicker.js.map +1 -1
- package/dist/features/ingestion/placement.js +16 -0
- package/dist/features/ingestion/placement.js.map +1 -0
- package/dist/features/ingestion/svgHandler.js +5 -0
- package/dist/features/ingestion/svgHandler.js.map +1 -1
- package/dist/features/ingestion/textHandler.js +28 -0
- package/dist/features/ingestion/textHandler.js.map +1 -0
- package/dist/features/ingestion/useCanvasIngestion.js +48 -0
- package/dist/features/ingestion/useCanvasIngestion.js.map +1 -0
- package/dist/features/ingestion/weaselJsonHandler.js +5 -0
- package/dist/features/ingestion/weaselJsonHandler.js.map +1 -1
- package/dist/features/longPress/longPressFeedback.js.map +1 -1
- package/dist/features/modes/modeLayers.js +7 -7
- package/dist/features/modes/modeLayers.js.map +1 -1
- package/dist/features/paths/editablePath.js +63 -0
- package/dist/features/paths/editablePath.js.map +1 -0
- package/dist/features/paths/index.js +9 -16
- package/dist/features/paths/pathEditState.js +41 -0
- package/dist/features/paths/pathEditState.js.map +1 -0
- package/dist/features/paths/pathEditingOverlayLayer.js +36 -38
- package/dist/features/paths/pathEditingOverlayLayer.js.map +1 -1
- package/dist/features/paths/pathLayer.js +3 -2
- package/dist/features/paths/pathLayer.js.map +1 -1
- package/dist/features/paths/penPreviewLayer.js +86 -88
- package/dist/features/paths/penPreviewLayer.js.map +1 -1
- package/dist/features/paths/shapeGenerator.js +89 -0
- package/dist/features/paths/shapeGenerator.js.map +1 -0
- package/dist/features/paths/usePathEdit.js +34 -0
- package/dist/features/paths/usePathEdit.js.map +1 -0
- package/dist/features/poseRun/usePoseRun.js +44 -57
- package/dist/features/poseRun/usePoseRun.js.map +1 -1
- package/dist/features/selection/overlay.js +170 -178
- package/dist/features/selection/overlay.js.map +1 -1
- package/dist/features/text/index.js +6 -0
- package/dist/features/text/textLayer.js +1 -1
- package/dist/features/text/textLayer.js.map +1 -1
- package/dist/features/text/useSceneTextEdit.js +119 -88
- package/dist/features/text/useSceneTextEdit.js.map +1 -1
- package/dist/features/viewports/viewResolver.js +28 -24
- package/dist/features/viewports/viewResolver.js.map +1 -1
- package/dist/features/viewports/viewportLayer.js +25 -36
- package/dist/features/viewports/viewportLayer.js.map +1 -1
- package/dist/icons/SliceIcon.js +24 -0
- package/dist/icons/SliceIcon.js.map +1 -0
- package/dist/index.d.ts +5200 -8777
- package/dist/index.js +284 -320
- package/dist/input/keyState.js +14 -14
- package/dist/interactions/actions/actionShortcuts.js.map +1 -1
- package/dist/interactions/actions/{defaults/align.js → align/action.js} +15 -16
- package/dist/interactions/actions/align/action.js.map +1 -0
- package/dist/interactions/actions/align/align.js +24 -24
- package/dist/interactions/actions/align/align.js.map +1 -1
- package/dist/interactions/actions/booleans/action.js +65 -0
- package/dist/interactions/actions/booleans/action.js.map +1 -0
- package/dist/interactions/actions/booleans/booleans.js +74 -83
- package/dist/interactions/actions/booleans/booleans.js.map +1 -1
- package/dist/interactions/actions/booleans/operands.js +40 -0
- package/dist/interactions/actions/booleans/operands.js.map +1 -0
- package/dist/interactions/actions/booleans/pieces.js +45 -0
- package/dist/interactions/actions/booleans/pieces.js.map +1 -0
- package/dist/interactions/actions/booleans/placement.js +24 -0
- package/dist/interactions/actions/booleans/placement.js.map +1 -0
- package/dist/interactions/actions/booleans/useBooleans.js +11 -9
- package/dist/interactions/actions/booleans/useBooleans.js.map +1 -1
- package/dist/interactions/actions/booleans/useBooleansAdapter.js.map +1 -1
- package/dist/interactions/actions/{defaults/clipboard.js → clipboard/action.js} +19 -19
- package/dist/interactions/actions/clipboard/action.js.map +1 -0
- package/dist/interactions/actions/clipboard/clipboardOps.js +15 -15
- package/dist/interactions/actions/clipboard/clipboardOps.js.map +1 -1
- package/dist/interactions/actions/clipboard/wireFormat.js.map +1 -1
- package/dist/interactions/actions/clone/action.js +103 -0
- package/dist/interactions/actions/clone/action.js.map +1 -0
- package/dist/interactions/actions/clone/behaviors.js +52 -0
- package/dist/interactions/actions/clone/behaviors.js.map +1 -0
- package/dist/interactions/actions/defaultCommitAdapter.js +10 -37
- package/dist/interactions/actions/defaultCommitAdapter.js.map +1 -1
- package/dist/interactions/actions/defaults/anchorEditing.js +69 -74
- package/dist/interactions/actions/defaults/anchorEditing.js.map +1 -1
- package/dist/interactions/actions/defaults/anchorHandles.js +42 -0
- package/dist/interactions/actions/defaults/anchorHandles.js.map +1 -0
- package/dist/interactions/actions/defaults/anchorJoin.js +92 -0
- package/dist/interactions/actions/defaults/anchorJoin.js.map +1 -0
- package/dist/interactions/actions/defaults/areaSelect.js.map +1 -1
- package/dist/interactions/actions/defaults/bendSegment.js +46 -0
- package/dist/interactions/actions/defaults/bendSegment.js.map +1 -0
- package/dist/interactions/actions/defaults/cancelGesture.js.map +1 -1
- package/dist/interactions/actions/defaults/clearSelection.js.map +1 -1
- package/dist/interactions/actions/defaults/copySubtree.js +1 -1
- package/dist/interactions/actions/defaults/copySubtree.js.map +1 -1
- package/dist/interactions/actions/defaults/createPaintAction.js.map +1 -1
- package/dist/interactions/actions/defaults/delete.js.map +1 -1
- package/dist/interactions/actions/defaults/duplicate.js +36 -21
- package/dist/interactions/actions/defaults/duplicate.js.map +1 -1
- package/dist/interactions/actions/defaults/enterPathEdit.js +19 -7
- package/dist/interactions/actions/defaults/enterPathEdit.js.map +1 -1
- package/dist/interactions/actions/defaults/enterTextEdit.js.map +1 -1
- package/dist/interactions/actions/defaults/group.js +35 -40
- package/dist/interactions/actions/defaults/group.js.map +1 -1
- package/dist/interactions/actions/defaults/icons/anchorIcons.js +75 -0
- package/dist/interactions/actions/defaults/icons/anchorIcons.js.map +1 -0
- package/dist/interactions/actions/defaults/icons/booleanIcons.js +24 -1
- package/dist/interactions/actions/defaults/icons/booleanIcons.js.map +1 -1
- package/dist/interactions/actions/defaults/icons/editIcons.js +35 -8
- package/dist/interactions/actions/defaults/icons/editIcons.js.map +1 -1
- package/dist/interactions/actions/defaults/icons/outlineIcons.js +39 -1
- package/dist/interactions/actions/defaults/icons/outlineIcons.js.map +1 -1
- package/dist/interactions/actions/defaults/ingest.js +19 -15
- package/dist/interactions/actions/defaults/ingest.js.map +1 -1
- package/dist/interactions/actions/defaults/insertPathAnchor.js +18 -34
- package/dist/interactions/actions/defaults/insertPathAnchor.js.map +1 -1
- package/dist/interactions/actions/defaults/nudge.js +43 -39
- package/dist/interactions/actions/defaults/nudge.js.map +1 -1
- package/dist/interactions/actions/defaults/pinchZoom.js +29 -29
- package/dist/interactions/actions/defaults/pinchZoom.js.map +1 -1
- package/dist/interactions/actions/defaults/requiresSelection.js.map +1 -1
- package/dist/interactions/actions/defaults/segmentUnder.js +22 -0
- package/dist/interactions/actions/defaults/segmentUnder.js.map +1 -0
- package/dist/interactions/actions/defaults/setFill.js +9 -3
- package/dist/interactions/actions/defaults/setFill.js.map +1 -1
- package/dist/interactions/actions/defaults/setFillOpacity.js +4 -1
- package/dist/interactions/actions/defaults/setFillOpacity.js.map +1 -1
- package/dist/interactions/actions/defaults/setStroke.js.map +1 -1
- package/dist/interactions/actions/defaults/sliceOps.js +20 -22
- package/dist/interactions/actions/defaults/sliceOps.js.map +1 -1
- package/dist/interactions/actions/defaults/toolActivate.js.map +1 -1
- package/dist/interactions/actions/defaults/toolResetToDefault.js.map +1 -1
- package/dist/interactions/actions/defaults/viewportDragPan.js +1 -1
- package/dist/interactions/actions/defaults/viewportDragPan.js.map +1 -1
- package/dist/interactions/actions/defaults/viewportWheelPan.js.map +1 -1
- package/dist/interactions/actions/defaults/viewportZoom.js +82 -79
- package/dist/interactions/actions/defaults/viewportZoom.js.map +1 -1
- package/dist/interactions/actions/{defaults/distribute.js → distribute/action.js} +18 -19
- package/dist/interactions/actions/distribute/action.js.map +1 -0
- package/dist/interactions/actions/distribute/distribute.js +15 -15
- package/dist/interactions/actions/distribute/distribute.js.map +1 -1
- package/dist/interactions/actions/edit-anchors/action.js +101 -0
- package/dist/interactions/actions/edit-anchors/action.js.map +1 -0
- package/dist/interactions/actions/edit-anchors/geometry.js +2 -4
- package/dist/interactions/actions/edit-anchors/geometry.js.map +1 -1
- package/dist/interactions/actions/edit-anchors/preview.js +26 -0
- package/dist/interactions/actions/edit-anchors/preview.js.map +1 -0
- package/dist/interactions/actions/edit-anchors/symmetry.js +11 -0
- package/dist/interactions/actions/edit-anchors/symmetry.js.map +1 -0
- package/dist/interactions/actions/flip/action.js +124 -0
- package/dist/interactions/actions/flip/action.js.map +1 -0
- package/dist/interactions/actions/flip/helpers.js +1 -1
- package/dist/interactions/actions/flip/helpers.js.map +1 -1
- package/dist/interactions/actions/geometryProjection.js.map +1 -1
- package/dist/interactions/actions/gestureFrames.js +18 -0
- package/dist/interactions/actions/gestureFrames.js.map +1 -0
- package/dist/interactions/actions/gestureLifecycle.js +47 -20
- package/dist/interactions/actions/gestureLifecycle.js.map +1 -1
- package/dist/interactions/actions/insert/action.js +79 -0
- package/dist/interactions/actions/insert/action.js.map +1 -0
- package/dist/interactions/actions/insert/commit.js +28 -0
- package/dist/interactions/actions/insert/commit.js.map +1 -0
- package/dist/interactions/actions/insert/extras.js +65 -0
- package/dist/interactions/actions/insert/extras.js.map +1 -0
- package/dist/interactions/actions/insert/frame.js +55 -0
- package/dist/interactions/actions/insert/frame.js.map +1 -0
- package/dist/interactions/actions/insert/geometry.js +35 -0
- package/dist/interactions/actions/insert/geometry.js.map +1 -0
- package/dist/interactions/actions/insert/repositionAction.js +31 -0
- package/dist/interactions/actions/insert/repositionAction.js.map +1 -0
- package/dist/interactions/actions/insert/rotateAction.js +21 -0
- package/dist/interactions/actions/insert/rotateAction.js.map +1 -0
- package/dist/interactions/actions/insert/session.js +59 -0
- package/dist/interactions/actions/insert/session.js.map +1 -0
- package/dist/interactions/actions/insert/shape.js +34 -0
- package/dist/interactions/actions/insert/shape.js.map +1 -0
- package/dist/interactions/actions/lasso-select/action.js +143 -0
- package/dist/interactions/actions/lasso-select/action.js.map +1 -0
- package/dist/interactions/actions/move/action.js +91 -0
- package/dist/interactions/actions/move/action.js.map +1 -0
- package/dist/interactions/actions/move/behaviors/layoutDrop.js +51 -0
- package/dist/interactions/actions/move/behaviors/layoutDrop.js.map +1 -0
- package/dist/interactions/actions/move/behaviors/reparentOnDrop.js +15 -0
- package/dist/interactions/actions/move/behaviors/reparentOnDrop.js.map +1 -0
- package/dist/interactions/actions/move/behaviors/snapToContainer.js +35 -28
- package/dist/interactions/actions/move/behaviors/snapToContainer.js.map +1 -1
- package/dist/interactions/actions/move/capture.js +108 -0
- package/dist/interactions/actions/move/capture.js.map +1 -0
- package/dist/interactions/actions/move/commit/index.js +41 -0
- package/dist/interactions/actions/move/commit/index.js.map +1 -0
- package/dist/interactions/actions/move/commit/layoutDrop.js +44 -0
- package/dist/interactions/actions/move/commit/layoutDrop.js.map +1 -0
- package/dist/interactions/actions/move/commit/layoutRelease.js +100 -0
- package/dist/interactions/actions/move/commit/layoutRelease.js.map +1 -0
- package/dist/interactions/actions/move/commit/rebase.js +18 -0
- package/dist/interactions/actions/move/commit/rebase.js.map +1 -0
- package/dist/interactions/actions/move/commit/reparent.js +65 -0
- package/dist/interactions/actions/move/commit/reparent.js.map +1 -0
- package/dist/interactions/actions/move/delta.js +51 -0
- package/dist/interactions/actions/move/delta.js.map +1 -0
- package/dist/interactions/actions/move/frame.js +47 -0
- package/dist/interactions/actions/move/frame.js.map +1 -0
- package/dist/interactions/actions/move/gestureAdapter.js +15 -40
- package/dist/interactions/actions/move/gestureAdapter.js.map +1 -1
- package/dist/interactions/actions/move/landedDescendants.js +8 -8
- package/dist/interactions/actions/move/layout/container.js +94 -0
- package/dist/interactions/actions/move/layout/container.js.map +1 -0
- package/dist/interactions/actions/move/layout/dragged.js +58 -0
- package/dist/interactions/actions/move/layout/dragged.js.map +1 -0
- package/dist/interactions/actions/move/layout/dropPass.js +122 -0
- package/dist/interactions/actions/move/layout/dropPass.js.map +1 -0
- package/dist/interactions/actions/move/layout/exits.js +38 -0
- package/dist/interactions/actions/move/layout/exits.js.map +1 -0
- package/dist/interactions/actions/move/layout/glide.js +48 -0
- package/dist/interactions/actions/move/layout/glide.js.map +1 -0
- package/dist/interactions/actions/move/session.js +63 -0
- package/dist/interactions/actions/move/session.js.map +1 -0
- package/dist/interactions/actions/move/translate.js +61 -0
- package/dist/interactions/actions/move/translate.js.map +1 -0
- package/dist/interactions/actions/outlines/createOutlines.js +17 -64
- package/dist/interactions/actions/outlines/createOutlines.js.map +1 -1
- package/dist/interactions/actions/outlines/createOutlinesAction.js +51 -0
- package/dist/interactions/actions/outlines/createOutlinesAction.js.map +1 -0
- package/dist/interactions/actions/outlines/outlineStroke.js +72 -0
- package/dist/interactions/actions/outlines/outlineStroke.js.map +1 -0
- package/dist/interactions/actions/outlines/outlineStrokeAction.js +37 -0
- package/dist/interactions/actions/outlines/outlineStrokeAction.js.map +1 -0
- package/dist/interactions/actions/outlines/replaceWithPaths.js +54 -0
- package/dist/interactions/actions/outlines/replaceWithPaths.js.map +1 -0
- package/dist/interactions/actions/outlines/strokeRegion.js +27 -0
- package/dist/interactions/actions/outlines/strokeRegion.js.map +1 -0
- package/dist/interactions/actions/pathCommands/cutJoin.js +102 -0
- package/dist/interactions/actions/pathCommands/cutJoin.js.map +1 -0
- package/dist/interactions/actions/pathCommands/livePathEdit.js +64 -0
- package/dist/interactions/actions/pathCommands/livePathEdit.js.map +1 -0
- package/dist/interactions/actions/pathCommands/pathNodes.js +99 -0
- package/dist/interactions/actions/pathCommands/pathNodes.js.map +1 -0
- package/dist/interactions/actions/pathCommands/simplifyOffset.js +42 -0
- package/dist/interactions/actions/pathCommands/simplifyOffset.js.map +1 -0
- package/dist/interactions/actions/planeInput.js.map +1 -1
- package/dist/interactions/actions/pointerState.js +12 -0
- package/dist/interactions/actions/pointerState.js.map +1 -0
- package/dist/interactions/actions/poseDescriptorDep.js +1 -1
- package/dist/interactions/actions/poseDescriptorDep.js.map +1 -1
- package/dist/interactions/actions/poseFrame.js +26 -26
- package/dist/interactions/actions/poseFrame.js.map +1 -1
- package/dist/interactions/actions/resize/action.js +66 -0
- package/dist/interactions/actions/resize/action.js.map +1 -0
- package/dist/interactions/actions/resize/behaviors/lockAspect.js.map +1 -1
- package/dist/interactions/actions/resize/boxFrame.js +16 -0
- package/dist/interactions/actions/resize/boxFrame.js.map +1 -0
- package/dist/interactions/actions/resize/capture.js +85 -0
- package/dist/interactions/actions/resize/capture.js.map +1 -0
- package/dist/interactions/actions/resize/commit.js +69 -0
- package/dist/interactions/actions/resize/commit.js.map +1 -0
- package/dist/interactions/actions/resize/frame.js +88 -0
- package/dist/interactions/actions/resize/frame.js.map +1 -0
- package/dist/interactions/actions/resize/pointSnap.js +111 -0
- package/dist/interactions/actions/resize/pointSnap.js.map +1 -0
- package/dist/interactions/actions/resize/replay.js +47 -0
- package/dist/interactions/actions/resize/replay.js.map +1 -0
- package/dist/interactions/actions/resize/ruleBounds.js +9 -0
- package/dist/interactions/actions/resize/ruleBounds.js.map +1 -0
- package/dist/interactions/actions/resize/session.js +63 -0
- package/dist/interactions/actions/resize/session.js.map +1 -0
- package/dist/interactions/actions/resolveOverlays.js +2 -1
- package/dist/interactions/actions/resolveOverlays.js.map +1 -1
- package/dist/interactions/actions/resolvePreviews.js.map +1 -1
- package/dist/interactions/actions/rotate/action.js +71 -0
- package/dist/interactions/actions/rotate/action.js.map +1 -0
- package/dist/interactions/actions/rotate/behaviors/index.js +7 -0
- package/dist/interactions/actions/rotate/behaviors/index.js.map +1 -0
- package/dist/interactions/actions/rotate/behaviors/snapRotation.js +12 -0
- package/dist/interactions/actions/rotate/behaviors/snapRotation.js.map +1 -0
- package/dist/interactions/actions/rotate/commit.js +40 -0
- package/dist/interactions/actions/rotate/commit.js.map +1 -0
- package/dist/interactions/actions/rotate/frame.js +65 -0
- package/dist/interactions/actions/rotate/frame.js.map +1 -0
- package/dist/interactions/actions/rotate/handle.js +12 -12
- package/dist/interactions/actions/rotate/handle.js.map +1 -1
- package/dist/interactions/actions/rotate/replay.js +22 -0
- package/dist/interactions/actions/rotate/replay.js.map +1 -0
- package/dist/interactions/actions/rotate/session.js +102 -0
- package/dist/interactions/actions/rotate/session.js.map +1 -0
- package/dist/interactions/actions/spatialReference.js.map +1 -1
- package/dist/interactions/actions/transform-again/action.js +63 -0
- package/dist/interactions/actions/transform-again/action.js.map +1 -0
- package/dist/interactions/actions/transform-again/memory.js +35 -0
- package/dist/interactions/actions/transform-again/memory.js.map +1 -0
- package/dist/interactions/actions/useStandardActions.js +84 -61
- package/dist/interactions/actions/useStandardActions.js.map +1 -1
- package/dist/interactions/gestures/pointerDrag/pointerDrag.js +61 -42
- package/dist/interactions/gestures/pointerDrag/pointerDrag.js.map +1 -1
- package/dist/interactions/gestures/shared/originProjection.js +1 -1
- package/dist/interactions/gestures/shared/originProjection.js.map +1 -1
- package/dist/interactions/gestures/shared/screenTolerance.js +8 -2
- package/dist/interactions/gestures/shared/screenTolerance.js.map +1 -1
- package/dist/interactions/gestures/shared/snap.js.map +1 -1
- package/dist/math-CYUjoyyU.d.ts +33 -0
- package/dist/math.d.ts +5 -2
- package/dist/math.js +6 -6
- package/dist/mesh.d.ts +4 -268
- package/dist/mesh.js +3 -7
- package/dist/move.d.ts +6 -4
- package/dist/{originProjection-gHnOup4e.d.ts → originProjection-CoNVpITV.d.ts} +1 -1
- package/dist/patterns-builtin.d.ts +1 -118
- package/dist/patterns-builtin.js +2 -3
- package/dist/poseDescriptor-Bqk-11Rl.d.ts +73 -0
- package/dist/renderer.d.ts +1 -92
- package/dist/renderer.js +2 -19
- package/dist/resize.d.ts +11 -22
- package/dist/resize.js +1 -1
- package/dist/style.css +1 -1
- package/dist/test-hook/install.js.map +1 -1
- package/dist/test-hook/useTestHook.js +22 -0
- package/dist/test-hook/useTestHook.js.map +1 -0
- package/dist/test-seams-D0pyV3pR.d.ts +149 -0
- package/dist/test-seams.d.ts +4 -4
- package/dist/test-seams.js +2 -2
- package/dist/tools/builtin/bone/boneActions.js +130 -0
- package/dist/tools/builtin/bone/boneActions.js.map +1 -0
- package/dist/tools/builtin/bone/boneOverlay.js +58 -0
- package/dist/tools/builtin/bone/boneOverlay.js.map +1 -0
- package/dist/tools/builtin/bone/placedRig.js +24 -0
- package/dist/tools/builtin/bone/placedRig.js.map +1 -0
- package/dist/tools/builtin/bone/rigEditState.js +21 -0
- package/dist/tools/builtin/bone/rigEditState.js.map +1 -0
- package/dist/tools/builtin/bone/useBoneTool.js +98 -0
- package/dist/tools/builtin/bone/useBoneTool.js.map +1 -0
- package/dist/tools/builtin/ellipse/useEllipseTool.js +16 -15
- package/dist/tools/builtin/ellipse/useEllipseTool.js.map +1 -1
- package/dist/tools/builtin/eyedropper/useEyedropperTool.js.map +1 -1
- package/dist/tools/builtin/hand/useHandTool.js.map +1 -1
- package/dist/tools/builtin/image/useImageTool.js.map +1 -1
- package/dist/tools/builtin/lasso/useLassoTool.js.map +1 -1
- package/dist/tools/builtin/line/useLineTool.js +16 -15
- package/dist/tools/builtin/line/useLineTool.js.map +1 -1
- package/dist/tools/builtin/pen/usePenTool.js +162 -164
- package/dist/tools/builtin/pen/usePenTool.js.map +1 -1
- package/dist/tools/builtin/pencil/usePencilTool.js.map +1 -1
- package/dist/tools/builtin/pickTopMostHit.js +11 -14
- package/dist/tools/builtin/pickTopMostHit.js.map +1 -1
- package/dist/tools/builtin/polygon/usePolygonTool.js +17 -15
- package/dist/tools/builtin/polygon/usePolygonTool.js.map +1 -1
- package/dist/tools/builtin/rect/useRectTool.js +15 -14
- package/dist/tools/builtin/rect/useRectTool.js.map +1 -1
- package/dist/tools/builtin/select/adapterPointQuery.js +40 -0
- package/dist/tools/builtin/select/adapterPointQuery.js.map +1 -0
- package/dist/tools/builtin/select/selectionContributions.js +5 -5
- package/dist/tools/builtin/select/selectionContributions.js.map +1 -1
- package/dist/tools/builtin/select/useSelectTool.js +44 -71
- package/dist/tools/builtin/select/useSelectTool.js.map +1 -1
- package/dist/tools/builtin/shared/pointerFollower.js.map +1 -1
- package/dist/tools/builtin/slice/useSliceTool.js +69 -72
- package/dist/tools/builtin/slice/useSliceTool.js.map +1 -1
- package/dist/tools/builtin/star/useStarTool.js +18 -16
- package/dist/tools/builtin/star/useStarTool.js.map +1 -1
- package/dist/tools/builtin/text/useTextTool.js +10 -2
- package/dist/tools/builtin/text/useTextTool.js.map +1 -1
- package/dist/tools/builtin/weight/useWeightTool.js +77 -0
- package/dist/tools/builtin/weight/useWeightTool.js.map +1 -0
- package/dist/tools/builtin/weight/weightActions.js +112 -0
- package/dist/tools/builtin/weight/weightActions.js.map +1 -0
- package/dist/tools/builtin/weight/weightOverlay.js +61 -0
- package/dist/tools/builtin/weight/weightOverlay.js.map +1 -0
- package/dist/tools/overlayBinding.js.map +1 -1
- package/dist/tools/useKeybindings.js +20 -14
- package/dist/tools/useKeybindings.js.map +1 -1
- package/dist/{types-k-5Oqh-U.d.ts → types-DBbbCy0i.d.ts} +103 -176
- package/dist/util/paint.js +1 -1
- package/dist/util/paint.js.map +1 -1
- package/dist/version.js +1 -1
- package/package.json +26 -21
- package/dist/animation/colorHelpers.js +0 -135
- package/dist/animation/colorHelpers.js.map +0 -1
- package/dist/animation/colorRegistry.js +0 -37
- package/dist/animation/colorRegistry.js.map +0 -1
- package/dist/animation/engine/axes.js +0 -36
- package/dist/animation/engine/axes.js.map +0 -1
- package/dist/animation/engine/codec.js +0 -170
- package/dist/animation/engine/codec.js.map +0 -1
- package/dist/animation/engine/integrator.js +0 -12
- package/dist/animation/engine/integrator.js.map +0 -1
- package/dist/animation/loop.js +0 -60
- package/dist/animation/loop.js.map +0 -1
- package/dist/animation/observe.js +0 -23
- package/dist/animation/observe.js.map +0 -1
- package/dist/animation/rig/blendPoses.js +0 -43
- package/dist/animation/rig/blendPoses.js.map +0 -1
- package/dist/animation/rig/mirrorPose.js +0 -19
- package/dist/animation/rig/mirrorPose.js.map +0 -1
- package/dist/animation/rig/resolveSkeleton.js +0 -33
- package/dist/animation/rig/resolveSkeleton.js.map +0 -1
- package/dist/animation/rig/solveIk.js +0 -103
- package/dist/animation/rig/solveIk.js.map +0 -1
- package/dist/animation/rig/types.js +0 -12
- package/dist/animation/rig/types.js.map +0 -1
- package/dist/animation/slew.js +0 -27
- package/dist/animation/slew.js.map +0 -1
- package/dist/animation/stagger.js +0 -146
- package/dist/animation/stagger.js.map +0 -1
- package/dist/animation/timeline/booking.js +0 -114
- package/dist/animation/timeline/booking.js.map +0 -1
- package/dist/animation/timeline/createTimeline.js +0 -125
- package/dist/animation/timeline/createTimeline.js.map +0 -1
- package/dist/animation/timeline/sampleTrack.js +0 -79
- package/dist/animation/timeline/sampleTrack.js.map +0 -1
- package/dist/animation/useAnimator.js +0 -388
- package/dist/animation/useAnimator.js.map +0 -1
- package/dist/autoPoseDescriptor-Ct7yqivU.d.ts +0 -108
- package/dist/builtins-DPcdghtB.d.ts +0 -1223
- package/dist/canvas/MinimapCanvas.js +0 -140
- package/dist/canvas/MinimapCanvas.js.map +0 -1
- package/dist/canvas/deps/poseComposition.js +0 -11
- package/dist/canvas/deps/poseComposition.js.map +0 -1
- package/dist/canvas/minimapMath.js +0 -82
- package/dist/canvas/minimapMath.js.map +0 -1
- package/dist/canvas/toolPreview.js +0 -39
- package/dist/canvas/toolPreview.js.map +0 -1
- package/dist/core/adapters/arrayAdapter.js +0 -94
- package/dist/core/adapters/arrayAdapter.js.map +0 -1
- package/dist/core/adapters/useArrayAdapter.js +0 -13
- package/dist/core/adapters/useArrayAdapter.js.map +0 -1
- package/dist/core/fillInPoseFrame.js +0 -102
- package/dist/core/fillInPoseFrame.js.map +0 -1
- package/dist/core/geometry/poseFrame.js +0 -44
- package/dist/core/geometry/poseFrame.js.map +0 -1
- package/dist/core/geometry/poseRotation.js +0 -58
- package/dist/core/geometry/poseRotation.js.map +0 -1
- package/dist/core/gradient.js +0 -136
- package/dist/core/gradient.js.map +0 -1
- package/dist/core/markerInset.js +0 -24
- package/dist/core/markerInset.js.map +0 -1
- package/dist/core/mixed.js +0 -6
- package/dist/core/mixed.js.map +0 -1
- package/dist/core/paintKinds.js +0 -156
- package/dist/core/paintKinds.js.map +0 -1
- package/dist/core/scene/pickability.js +0 -6
- package/dist/core/scene/pickability.js.map +0 -1
- package/dist/core/strokeMarkerShapes.js +0 -139
- package/dist/core/strokeMarkerShapes.js.map +0 -1
- package/dist/core/strokeMarkers.js +0 -28
- package/dist/core/strokeMarkers.js.map +0 -1
- package/dist/core/viewport/meanScale.js +0 -8
- package/dist/core/viewport/meanScale.js.map +0 -1
- package/dist/core/viewport/pxExtent.js +0 -42
- package/dist/core/viewport/pxExtent.js.map +0 -1
- package/dist/features/cursor/paintedCursorLayer.js.map +0 -1
- package/dist/features/focus/gateLayer.js.map +0 -1
- package/dist/features/focus/useCanvasFocus.js +0 -29
- package/dist/features/focus/useCanvasFocus.js.map +0 -1
- package/dist/features/groups/children.js.map +0 -1
- package/dist/features/groups/composePose.js +0 -67
- package/dist/features/groups/composePose.js.map +0 -1
- package/dist/features/groups/nestedHit.js.map +0 -1
- package/dist/features/groups/unionOfChildren.js.map +0 -1
- package/dist/features/images/imageCache.js +0 -104
- package/dist/features/images/imageCache.js.map +0 -1
- package/dist/features/ingestion/index.js +0 -8
- package/dist/features/meshPaint/bake.js +0 -79
- package/dist/features/meshPaint/bake.js.map +0 -1
- package/dist/features/meshPaint/bakeCache.js +0 -59
- package/dist/features/meshPaint/bakeCache.js.map +0 -1
- package/dist/features/meshPaint/handles.js +0 -86
- package/dist/features/meshPaint/handles.js.map +0 -1
- package/dist/features/meshPaint/lazyKind.js.map +0 -1
- package/dist/features/meshPaint/meshPaint.js +0 -239
- package/dist/features/meshPaint/meshPaint.js.map +0 -1
- package/dist/features/meshPaint/meshShader.js +0 -6
- package/dist/features/meshPaint/meshShader.js.map +0 -1
- package/dist/features/meshPaint/register.js +0 -7
- package/dist/features/meshPaint/register.js.map +0 -1
- package/dist/features/meshPaint/surface.js +0 -110
- package/dist/features/meshPaint/surface.js.map +0 -1
- package/dist/features/minimap/actions.js +0 -53
- package/dist/features/minimap/actions.js.map +0 -1
- package/dist/features/minimap/createMinimapContribution.js +0 -96
- package/dist/features/minimap/createMinimapContribution.js.map +0 -1
- package/dist/features/minimap/layers.js +0 -85
- package/dist/features/minimap/layers.js.map +0 -1
- package/dist/features/overlays/useNodeOverlayFrame.js +0 -103
- package/dist/features/overlays/useNodeOverlayFrame.js.map +0 -1
- package/dist/features/parallax/createParallaxLayer.js +0 -26
- package/dist/features/parallax/createParallaxLayer.js.map +0 -1
- package/dist/features/parallax/createParallaxPlane.js +0 -22
- package/dist/features/parallax/createParallaxPlane.js.map +0 -1
- package/dist/features/paths/anchorEdits.js +0 -167
- package/dist/features/paths/anchorEdits.js.map +0 -1
- package/dist/features/paths/anchors.js +0 -159
- package/dist/features/paths/anchors.js.map +0 -1
- package/dist/features/paths/booleans.js +0 -2
- package/dist/features/paths/markerCommands.js +0 -149
- package/dist/features/paths/markerCommands.js.map +0 -1
- package/dist/features/paths/markerSites.js +0 -59
- package/dist/features/paths/markerSites.js.map +0 -1
- package/dist/features/paths/markers.js +0 -95
- package/dist/features/paths/markers.js.map +0 -1
- package/dist/features/paths/nearestAnchor.js +0 -36
- package/dist/features/paths/nearestAnchor.js.map +0 -1
- package/dist/features/paths/pathInWorld.js +0 -41
- package/dist/features/paths/pathInWorld.js.map +0 -1
- package/dist/features/paths/poseDescriptor.js +0 -39
- package/dist/features/paths/poseDescriptor.js.map +0 -1
- package/dist/features/paths/strokeToPath.js +0 -40
- package/dist/features/paths/strokeToPath.js.map +0 -1
- package/dist/features/paths/tessellate/dash.js +0 -52
- package/dist/features/paths/tessellate/dash.js.map +0 -1
- package/dist/features/paths/tessellate/insets.js +0 -32
- package/dist/features/paths/tessellate/insets.js.map +0 -1
- package/dist/features/paths/tessellate/metric.js +0 -72
- package/dist/features/paths/tessellate/metric.js.map +0 -1
- package/dist/features/paths/tessellate/stroke.js +0 -170
- package/dist/features/paths/tessellate/stroke.js.map +0 -1
- package/dist/features/paths/tessellate/vertexWidths.js +0 -32
- package/dist/features/paths/tessellate/vertexWidths.js.map +0 -1
- package/dist/features/patterns/commandPaint.js +0 -18
- package/dist/features/patterns/commandPaint.js.map +0 -1
- package/dist/features/patterns/index.js +0 -11
- package/dist/features/patterns/index.js.map +0 -1
- package/dist/features/patterns/patterns-builtin.js +0 -38
- package/dist/features/patterns/patterns-builtin.js.map +0 -1
- package/dist/features/patterns/rasterizeTile.js +0 -17
- package/dist/features/patterns/rasterizeTile.js.map +0 -1
- package/dist/features/patterns/resolveSpec.js +0 -65
- package/dist/features/patterns/resolveSpec.js.map +0 -1
- package/dist/features/patterns/tileGeometry.js +0 -158
- package/dist/features/patterns/tileGeometry.js.map +0 -1
- package/dist/features/pointer/PointerContext.js +0 -45
- package/dist/features/pointer/PointerContext.js.map +0 -1
- package/dist/features/selection/SelectionContext.js +0 -51
- package/dist/features/selection/SelectionContext.js.map +0 -1
- package/dist/features/simulation/createSimulation.js +0 -61
- package/dist/features/simulation/createSimulation.js.map +0 -1
- package/dist/features/simulation/types.js +0 -6
- package/dist/features/simulation/types.js.map +0 -1
- package/dist/features/simulation/useSimulation.js +0 -74
- package/dist/features/simulation/useSimulation.js.map +0 -1
- package/dist/features/text/domOffsets.js +0 -82
- package/dist/features/text/domOffsets.js.map +0 -1
- package/dist/features/text/domRuns.js +0 -230
- package/dist/features/text/domRuns.js.map +0 -1
- package/dist/features/text/fitTextPose.js +0 -38
- package/dist/features/text/fitTextPose.js.map +0 -1
- package/dist/features/text/hitTest.js +0 -48
- package/dist/features/text/hitTest.js.map +0 -1
- package/dist/features/text/isTextData.js +0 -8
- package/dist/features/text/isTextData.js.map +0 -1
- package/dist/features/text/overlayDirection.js +0 -15
- package/dist/features/text/overlayDirection.js.map +0 -1
- package/dist/features/text/renderLabel.js +0 -14
- package/dist/features/text/renderLabel.js.map +0 -1
- package/dist/features/text/runs/effectiveRangeStyle.js +0 -66
- package/dist/features/text/runs/effectiveRangeStyle.js.map +0 -1
- package/dist/features/text/runs/flagRange.js +0 -53
- package/dist/features/text/runs/flagRange.js.map +0 -1
- package/dist/features/text/runs/rangeStyle.js +0 -133
- package/dist/features/text/runs/rangeStyle.js.map +0 -1
- package/dist/features/text/textCommand.js +0 -60
- package/dist/features/text/textCommand.js.map +0 -1
- package/dist/features/text/textToPath.js +0 -181
- package/dist/features/text/textToPath.js.map +0 -1
- package/dist/features/text/useTextEdit.js +0 -491
- package/dist/features/text/useTextEdit.js.map +0 -1
- package/dist/features/tiling/createTiledLayer.js +0 -65
- package/dist/features/tiling/createTiledLayer.js.map +0 -1
- package/dist/features/tiling/tiledProject.js +0 -14
- package/dist/features/tiling/tiledProject.js.map +0 -1
- package/dist/interactions/actions/clone/behaviors/cloneByAltDrag.js +0 -26
- package/dist/interactions/actions/clone/behaviors/cloneByAltDrag.js.map +0 -1
- package/dist/interactions/actions/defaults/align.js.map +0 -1
- package/dist/interactions/actions/defaults/booleans.js +0 -52
- package/dist/interactions/actions/defaults/booleans.js.map +0 -1
- package/dist/interactions/actions/defaults/clipboard.js.map +0 -1
- package/dist/interactions/actions/defaults/clone.js +0 -91
- package/dist/interactions/actions/defaults/clone.js.map +0 -1
- package/dist/interactions/actions/defaults/createOutlines.js +0 -47
- package/dist/interactions/actions/defaults/createOutlines.js.map +0 -1
- package/dist/interactions/actions/defaults/distribute.js.map +0 -1
- package/dist/interactions/actions/defaults/editAnchors.js +0 -100
- package/dist/interactions/actions/defaults/editAnchors.js.map +0 -1
- package/dist/interactions/actions/defaults/flip.js +0 -125
- package/dist/interactions/actions/defaults/flip.js.map +0 -1
- package/dist/interactions/actions/defaults/insert.js +0 -287
- package/dist/interactions/actions/defaults/insert.js.map +0 -1
- package/dist/interactions/actions/defaults/lassoSelect.js +0 -153
- package/dist/interactions/actions/defaults/lassoSelect.js.map +0 -1
- package/dist/interactions/actions/defaults/move.js +0 -778
- package/dist/interactions/actions/defaults/move.js.map +0 -1
- package/dist/interactions/actions/defaults/resize.js +0 -341
- package/dist/interactions/actions/defaults/resize.js.map +0 -1
- package/dist/interactions/actions/defaults/rotate.js +0 -185
- package/dist/interactions/actions/defaults/rotate.js.map +0 -1
- package/dist/interactions/actions/previewOverrides.js +0 -25
- package/dist/interactions/actions/previewOverrides.js.map +0 -1
- package/dist/interactions/actions/resize/autoPoseDescriptor.js.map +0 -1
- package/dist/layout/arrivals.js +0 -36
- package/dist/layout/arrivals.js.map +0 -1
- package/dist/math-J-ACHyEg.d.ts +0 -159
- package/dist/registerProgram-T9S_PfAX.d.ts +0 -208
- package/dist/renderer/DrawCommand.js +0 -6
- package/dist/renderer/DrawCommand.js.map +0 -1
- package/dist/renderer/WeaselRenderer.js +0 -333
- package/dist/renderer/WeaselRenderer.js.map +0 -1
- package/dist/renderer/batchClip.js +0 -46
- package/dist/renderer/batchClip.js.map +0 -1
- package/dist/renderer/cache/GLImageCache.js +0 -74
- package/dist/renderer/cache/GLImageCache.js.map +0 -1
- package/dist/renderer/cache/GLMeshCache.js +0 -102
- package/dist/renderer/cache/GLMeshCache.js.map +0 -1
- package/dist/renderer/cache/GLTextureCache.js +0 -68
- package/dist/renderer/cache/GLTextureCache.js.map +0 -1
- package/dist/renderer/cache/GradientRampAtlas.js +0 -82
- package/dist/renderer/cache/GradientRampAtlas.js.map +0 -1
- package/dist/renderer/cache/cache.js +0 -13
- package/dist/renderer/cache/cache.js.map +0 -1
- package/dist/renderer/cache/markerCommandCache.js +0 -63
- package/dist/renderer/cache/markerCommandCache.js.map +0 -1
- package/dist/renderer/cache/outlineMeshCache.js +0 -15
- package/dist/renderer/cache/outlineMeshCache.js.map +0 -1
- package/dist/renderer/cache/outlineStrokeMeshCache.js +0 -36
- package/dist/renderer/cache/outlineStrokeMeshCache.js.map +0 -1
- package/dist/renderer/cache/strokeMeshCache.js +0 -55
- package/dist/renderer/cache/strokeMeshCache.js.map +0 -1
- package/dist/renderer/cullDrawCommands.js +0 -90
- package/dist/renderer/cullDrawCommands.js.map +0 -1
- package/dist/renderer/draw/batch.js +0 -133
- package/dist/renderer/draw/batch.js.map +0 -1
- package/dist/renderer/draw/clip.js +0 -89
- package/dist/renderer/draw/clip.js.map +0 -1
- package/dist/renderer/draw/customShader.js +0 -230
- package/dist/renderer/draw/customShader.js.map +0 -1
- package/dist/renderer/draw/drawTriangles.js +0 -8
- package/dist/renderer/draw/drawTriangles.js.map +0 -1
- package/dist/renderer/draw/effects.js +0 -28
- package/dist/renderer/draw/effects.js.map +0 -1
- package/dist/renderer/draw/flushBatch.js +0 -35
- package/dist/renderer/draw/flushBatch.js.map +0 -1
- package/dist/renderer/draw/gradient.js +0 -90
- package/dist/renderer/draw/gradient.js.map +0 -1
- package/dist/renderer/draw/image.js +0 -38
- package/dist/renderer/draw/image.js.map +0 -1
- package/dist/renderer/draw/mesh.js +0 -16
- package/dist/renderer/draw/mesh.js.map +0 -1
- package/dist/renderer/draw/paintBind.js +0 -70
- package/dist/renderer/draw/paintBind.js.map +0 -1
- package/dist/renderer/draw/pathPaint.js +0 -142
- package/dist/renderer/draw/pathPaint.js.map +0 -1
- package/dist/renderer/draw/scratchPass.js +0 -83
- package/dist/renderer/draw/scratchPass.js.map +0 -1
- package/dist/renderer/draw/stencil.js +0 -28
- package/dist/renderer/draw/stencil.js.map +0 -1
- package/dist/renderer/draw/text.js +0 -167
- package/dist/renderer/draw/text.js.map +0 -1
- package/dist/renderer/draw/uniforms.js +0 -77
- package/dist/renderer/draw/uniforms.js.map +0 -1
- package/dist/renderer/draw.js +0 -79
- package/dist/renderer/draw.js.map +0 -1
- package/dist/renderer/drawBatch.js +0 -198
- package/dist/renderer/drawBatch.js.map +0 -1
- package/dist/renderer/effects/EffectTargets.js +0 -48
- package/dist/renderer/effects/EffectTargets.js.map +0 -1
- package/dist/renderer/effects/builtins.js +0 -31
- package/dist/renderer/effects/builtins.js.map +0 -1
- package/dist/renderer/effects/composite.js +0 -11
- package/dist/renderer/effects/composite.js.map +0 -1
- package/dist/renderer/effects/effectPrelude.js +0 -10
- package/dist/renderer/effects/effectPrelude.js.map +0 -1
- package/dist/renderer/effects/types.js +0 -10
- package/dist/renderer/effects/types.js.map +0 -1
- package/dist/renderer/glyphOutlineMesh.js +0 -67
- package/dist/renderer/glyphOutlineMesh.js.map +0 -1
- package/dist/renderer/index.js +0 -20
- package/dist/renderer/math/color.js +0 -321
- package/dist/renderer/math/color.js.map +0 -1
- package/dist/renderer/math/mat3.js +0 -80
- package/dist/renderer/math/mat3.js.map +0 -1
- package/dist/renderer/math/patternSpace.js +0 -22
- package/dist/renderer/math/patternSpace.js.map +0 -1
- package/dist/renderer/math/viewToMat3.js +0 -19
- package/dist/renderer/math/viewToMat3.js.map +0 -1
- package/dist/renderer/paintResources.js +0 -18
- package/dist/renderer/paintResources.js.map +0 -1
- package/dist/renderer/paintScratch.js +0 -37
- package/dist/renderer/paintScratch.js.map +0 -1
- package/dist/renderer/shaders/ShaderProgram.js +0 -74
- package/dist/renderer/shaders/ShaderProgram.js.map +0 -1
- package/dist/renderer/shaders/batchFill.js +0 -119
- package/dist/renderer/shaders/batchFill.js.map +0 -1
- package/dist/renderer/shaders/customPrelude.js +0 -34
- package/dist/renderer/shaders/customPrelude.js.map +0 -1
- package/dist/renderer/shaders/extractUniformNames.js +0 -184
- package/dist/renderer/shaders/extractUniformNames.js.map +0 -1
- package/dist/renderer/shaders/glyphPaint.js +0 -61
- package/dist/renderer/shaders/glyphPaint.js.map +0 -1
- package/dist/renderer/shaders/gradFill.js +0 -31
- package/dist/renderer/shaders/gradFill.js.map +0 -1
- package/dist/renderer/shaders/pathFill.js +0 -14
- package/dist/renderer/shaders/pathFill.js.map +0 -1
- package/dist/renderer/shaders/patternFill.js +0 -25
- package/dist/renderer/shaders/patternFill.js.map +0 -1
- package/dist/renderer/shaders/registerProgram.js +0 -18
- package/dist/renderer/shaders/registerProgram.js.map +0 -1
- package/dist/renderer/spriteSheet.js +0 -14
- package/dist/renderer/spriteSheet.js.map +0 -1
- package/dist/renderer/state/GroupState.js +0 -77
- package/dist/renderer/state/GroupState.js.map +0 -1
- package/dist/renderer/strokeLengths.js +0 -50
- package/dist/renderer/strokeLengths.js.map +0 -1
- package/dist/renderer/syntheticItalic.js +0 -6
- package/dist/renderer/syntheticItalic.js.map +0 -1
- package/dist/renderer/textures/registerTexture.js +0 -34
- package/dist/renderer/textures/registerTexture.js.map +0 -1
- package/dist/scheduling/useVisibleRaf.js +0 -69
- package/dist/scheduling/useVisibleRaf.js.map +0 -1
- package/dist/test-seams-DM2B87-g.d.ts +0 -356
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"rasterizeTile.js","names":["rasterizeTile","off","opts","c","oc"],"sources":["../../../src/features/patterns/rasterizeTile.ts"],"sourcesContent":["import type { TilePatternOpts } from '.';\n\n/** Draw one tile and hand back its pixels, or `null` where no\n * `OffscreenCanvas` 2D context can be had. */\nexport function rasterizeTile(opts: TilePatternOpts): ImageBitmap | null {\n // Prefer OffscreenCanvas; fall back to <canvas> for environments without it.\n let off: OffscreenCanvas | HTMLCanvasElement;\n try {\n off = new OffscreenCanvas(opts.size, opts.size);\n } catch {\n if (typeof document === 'undefined') return null;\n const c = document.createElement('canvas');\n c.width = opts.size;\n c.height = opts.size;\n off = c;\n }\n const oc = off.getContext('2d') as CanvasRenderingContext2D | null;\n if (!oc) return null;\n opts.draw(oc, opts.size);\n\n // Only an OffscreenCanvas can hand over a bitmap synchronously.\n if (typeof (off as OffscreenCanvas).transferToImageBitmap !== 'function') return null;\n return (off as OffscreenCanvas).transferToImageBitmap();\n}\n"],"mappings":";AAIA,SAAgBA,EAAc,GAA2C;CAEvE,IAAIC;CACJ,IAAI;EACF,IAAM,IAAI,gBAAgBC,EAAK,MAAMA,EAAK,IAAI;CAChD,QAAQ;EACN,IAAI,OAAO,WAAa,KAAa,OAAO;EAC5C,IAAMC,IAAI,SAAS,cAAc,QAAQ;EAGzC,AAFA,EAAE,QAAQD,EAAK,MACf,EAAE,SAASA,EAAK,MAChB,IAAMC;CACR;CACA,IAAMC,IAAKH,EAAI,WAAW,IAAI;CAM9B,OALI,CAACG,MACLF,EAAK,KAAKE,GAAIF,EAAK,IAAI,GAGnB,OAAQD,EAAwB,yBAA0B,cAAmB,OACzEA,EAAwB,sBAAsB;AACxD"}
|
|
@@ -1,65 +0,0 @@
|
|
|
1
|
-
import { ownTextureIds as e, registerTextureAs as t, textureRegistry as n, unregisterTexture as r } from "../../renderer/textures/registerTexture.js";
|
|
2
|
-
import { rasterizeTile as i } from "./rasterizeTile.js";
|
|
3
|
-
import { drawTileShapes as a, tileGeometry as o, tileSize as s } from "./tileGeometry.js";
|
|
4
|
-
//#region src/features/patterns/resolveSpec.ts
|
|
5
|
-
var c = 256, l = "pattern:", u = /* @__PURE__ */ new Map();
|
|
6
|
-
function d(e) {
|
|
7
|
-
let t = e, n = {};
|
|
8
|
-
for (let e of Object.keys(t).sort()) n[e] = t[e];
|
|
9
|
-
return l + JSON.stringify(n);
|
|
10
|
-
}
|
|
11
|
-
function f(e) {
|
|
12
|
-
let t = d(e), n = u.get(t);
|
|
13
|
-
return n === void 0 ? m(t, e) : (p(t), n);
|
|
14
|
-
}
|
|
15
|
-
function p(e) {
|
|
16
|
-
let t = u.get(e);
|
|
17
|
-
t !== void 0 && (u.delete(e), u.set(e, t));
|
|
18
|
-
}
|
|
19
|
-
function m(e, n) {
|
|
20
|
-
let r = h.has(n.tile) ? i({
|
|
21
|
-
size: s(n),
|
|
22
|
-
draw: (e) => a(e, o(n))
|
|
23
|
-
}) : null, l = r ? t(e, r) : null;
|
|
24
|
-
for (u.delete(e), u.set(e, l); u.size > c;) g(u.keys().next().value);
|
|
25
|
-
return l;
|
|
26
|
-
}
|
|
27
|
-
var h = /* @__PURE__ */ new Set([
|
|
28
|
-
"hatch",
|
|
29
|
-
"crosshatch",
|
|
30
|
-
"dots",
|
|
31
|
-
"chunks"
|
|
32
|
-
]);
|
|
33
|
-
function g(e) {
|
|
34
|
-
u.delete(e);
|
|
35
|
-
let t = n.get(e)?.source;
|
|
36
|
-
r({ id: e }), t && "close" in t && t.close();
|
|
37
|
-
}
|
|
38
|
-
function _(e) {
|
|
39
|
-
let t;
|
|
40
|
-
try {
|
|
41
|
-
t = JSON.parse(e.slice(8));
|
|
42
|
-
} catch {
|
|
43
|
-
return;
|
|
44
|
-
}
|
|
45
|
-
typeof t == "object" && t && "tile" in t && m(e, t);
|
|
46
|
-
}
|
|
47
|
-
e(l, {
|
|
48
|
-
revive: _,
|
|
49
|
-
touched: p
|
|
50
|
-
});
|
|
51
|
-
function v(e) {
|
|
52
|
-
return "tile" in e;
|
|
53
|
-
}
|
|
54
|
-
function y(e) {
|
|
55
|
-
if (e.fill !== "pattern" || !v(e.pattern)) return e;
|
|
56
|
-
let t = f(e.pattern);
|
|
57
|
-
return t ? {
|
|
58
|
-
...e,
|
|
59
|
-
pattern: t
|
|
60
|
-
} : null;
|
|
61
|
-
}
|
|
62
|
-
//#endregion
|
|
63
|
-
export { c as PATTERN_TILE_CACHE_LIMIT, v as isPatternSpec, y as resolveFillPattern, f as resolvePatternSpec };
|
|
64
|
-
|
|
65
|
-
//# sourceMappingURL=resolveSpec.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"resolveSpec.js","names":["PATTERN_TILE_CACHE_LIMIT","ID_PREFIX","cache","specId","bag","spec","sorted","k","resolvePatternSpec","id","hit","build","markUsed","bitmap","TILES","rasterizeTile","tileSize","drawTileShapes","oc","tileGeometry","handle","registerTextureAs","evict","source","textureRegistry","unregisterTexture","revive","ownTextureIds","isPatternSpec","payload","resolveFillPattern","fill"],"sources":["../../../src/features/patterns/resolveSpec.ts"],"sourcesContent":["/**\n * `TilePatternSpec` → `TextureHandle`. The bridge between the serializable\n * half of a pattern paint and the GL texture that paints it.\n *\n * Memoized on the spec's field values, so identical specs across nodes share\n * one texture and a re-render never re-rasterizes. The memo keeps the\n * `PATTERN_TILE_CACHE_LIMIT` tiles most recently resolved or drawn and\n * unregisters the rest. A handle outliving its tile still draws: its id is\n * the spec, and the texture registry asks this module to rebuild it.\n */\n\nimport type { CommandFill, FillStyle, PosedFill, TilePatternSpec } from '@weasel-js/paint';\nimport {\n ownTextureIds, registerTextureAs, textureRegistry, unregisterTexture,\n type TextureHandle,\n} from '../../renderer/textures/registerTexture';\nimport { rasterizeTile } from './rasterizeTile';\nimport { drawTileShapes, tileGeometry, tileSize } from './tileGeometry';\n\n/** How many built-in tiles stay rasterized at once. A scene drawing more\n * distinct specs than this in one frame rebuilds the overflow every frame. */\nexport const PATTERN_TILE_CACHE_LIMIT = 256;\n\nconst ID_PREFIX = 'pattern:';\n\n/** Texture id → handle, least recently used first. */\nconst cache = new Map<string, TextureHandle | null>();\n\n/** Stable across key order — specs arriving from JSON have no guaranteed\n * field order, and two orderings must not rasterize two tiles. */\nfunction specId(spec: TilePatternSpec): string {\n const bag = spec as unknown as Record<string, unknown>;\n const sorted: Record<string, unknown> = {};\n for (const k of Object.keys(bag).sort()) sorted[k] = bag[k];\n return ID_PREFIX + JSON.stringify(sorted);\n}\n\n/** @internal Test helper — do not call from product code. */\nexport function _resetPatternSpecCacheForTests(): void {\n cache.clear();\n}\n\n/**\n * Build (or fetch) the texture for a spec. Returns `null` when the tile\n * can't be rasterized — no `OffscreenCanvas`, same as `createTilePattern`.\n */\nexport function resolvePatternSpec(spec: TilePatternSpec): TextureHandle | null {\n const id = specId(spec);\n const hit = cache.get(id);\n if (hit !== undefined) {\n markUsed(id);\n return hit;\n }\n return build(id, spec);\n}\n\nfunction markUsed(id: string): void {\n const hit = cache.get(id);\n if (hit === undefined) return;\n cache.delete(id);\n cache.set(id, hit);\n}\n\nfunction build(id: string, spec: TilePatternSpec): TextureHandle | null {\n const bitmap = TILES.has(spec.tile)\n ? rasterizeTile({\n size: tileSize(spec),\n draw: (oc) => drawTileShapes(oc, tileGeometry(spec)),\n })\n : null;\n const handle = bitmap ? registerTextureAs(id, bitmap) : null;\n cache.delete(id);\n cache.set(id, handle);\n while (cache.size > PATTERN_TILE_CACHE_LIMIT) evict(cache.keys().next().value!);\n return handle;\n}\n\nconst TILES: ReadonlySet<string> = new Set<TilePatternSpec['tile']>([\n 'hatch', 'crosshatch', 'dots', 'chunks',\n]);\n\nfunction evict(id: string): void {\n cache.delete(id);\n const source = textureRegistry.get(id)?.source;\n unregisterTexture({ id });\n if (source && 'close' in source) source.close();\n}\n\nfunction revive(id: string): void {\n let spec: unknown;\n try {\n spec = JSON.parse(id.slice(ID_PREFIX.length));\n } catch {\n return;\n }\n if (typeof spec !== 'object' || spec === null || !('tile' in spec)) return;\n build(id, spec as TilePatternSpec);\n}\n\nownTextureIds(ID_PREFIX, { revive, touched: markUsed });\n\n/** Whether a pattern payload is a spec rather than an already-built handle. */\nexport function isPatternSpec(\n payload: TextureHandle | TilePatternSpec,\n): payload is TilePatternSpec {\n return 'tile' in payload;\n}\n\n/**\n * Swap a pattern paint's spec payload for the texture that paints it,\n * leaving every other fill untouched. The built-in painters run this\n * alongside `fillInPoseFrame`; a consumer emitting its own draw commands\n * runs it at the same place it runs that one.\n *\n * A spec that can't rasterize drops the fill rather than painting garbage.\n */\nexport function resolveFillPattern(fill: PosedFill): CommandFill | null;\nexport function resolveFillPattern(fill: FillStyle): FillStyle | null;\nexport function resolveFillPattern(fill: FillStyle): FillStyle | null {\n if (fill.fill !== 'pattern') return fill;\n if (!isPatternSpec(fill.pattern)) return fill;\n const handle = resolvePatternSpec(fill.pattern);\n return handle ? { ...fill, pattern: handle } : null;\n}\n"],"mappings":";;;;AAqBA,IAAaA,IAA2B,KAElCC,IAAY,YAGZC,oBAAQ,IAAI,IAAkC;AAIpD,SAASC,EAAO,GAA+B;CAC7C,IAAMC,IAAMC,GACNC,IAAkC,CAAC;CACzC,KAAK,IAAMC,KAAK,OAAO,KAAKH,CAAG,CAAC,CAAC,KAAK,GAAG,EAAOG,KAAKH,EAAIG;CACzD,OAAON,IAAY,KAAK,UAAUK,CAAM;AAC1C;AAWA,SAAgBE,EAAmB,GAA6C;CAC9E,IAAMC,IAAKN,EAAOE,CAAI,GAChBK,IAAMR,EAAM,IAAIO,CAAE;CAKxB,OAJIC,MAAQ,KAAA,IAILC,EAAMF,GAAIJ,CAAI,KAHnBO,EAASH,CAAE,GACJC;AAGX;AAEA,SAASE,EAAS,GAAkB;CAClC,IAAMF,IAAMR,EAAM,IAAIO,CAAE;CACxB,AAAIC,MAAQ,KAAA,MACZR,EAAM,OAAOO,CAAE,GACfP,EAAM,IAAIO,GAAIC,CAAG;AACnB;AAEA,SAASC,EAAM,GAAY,GAA6C;CACtE,IAAME,IAASC,EAAM,IAAIT,EAAK,IAAI,IAC9BU,EAAc;EACd,MAAMC,EAASX,CAAI;EACnB,OAAO,MAAOY,EAAeC,GAAIC,EAAad,CAAI,CAAC;CACrD,CAAC,IACC,MACEe,IAASP,IAASQ,EAAkBZ,GAAII,CAAM,IAAI;CAGxD,KAFAX,EAAM,OAAOO,CAAE,GACfP,EAAM,IAAIO,GAAIW,CAAM,GACblB,EAAM,OAAOF,IAA0B,EAAME,EAAM,KAAK,CAAC,CAAC,KAAK,CAAC,CAAC,KAAM;CAC9E,OAAOkB;AACT;AAEA,IAAMN,oBAA6B,IAAI,IAA6B;CAClE;CAAS;CAAc;CAAQ;AACjC,CAAC;AAED,SAASQ,EAAM,GAAkB;CAC/B,EAAM,OAAOb,CAAE;CACf,IAAMc,IAASC,EAAgB,IAAIf,CAAE,CAAC,EAAE;CAExC,AADAgB,EAAkB,EAAE,MAAG,CAAC,GACpBF,KAAU,WAAWA,KAAQA,EAAO,MAAM;AAChD;AAEA,SAASG,EAAO,GAAkB;CAChC,IAAIrB;CACJ,IAAI;EACF,IAAO,KAAK,MAAMI,EAAG,MAAM,CAAgB,CAAC;CAC9C,QAAQ;EACN;CACF;CACA,AAAI,OAAOJ,KAAS,YAAYA,KAAmB,UAAUA,KAC7DM,EAAMF,GAAIJ,CAAuB;AACnC;AAEAsB,EAAc1B,GAAW;CAAE;CAAQ,SAASW;AAAS,CAAC;AAGtD,SAAgBgB,EACd,GAC4B;CAC5B,OAAO,UAAUC;AACnB;AAYA,SAAgBC,EAAmB,GAAmC;CAEpE,IADIC,EAAK,SAAS,aACd,CAACH,EAAcG,EAAK,OAAO,GAAG,OAAOA;CACzC,IAAMX,IAASZ,EAAmBuB,EAAK,OAAO;CAC9C,OAAOX,IAAS;EAAE,GAAGW;EAAM,SAASX;CAAO,IAAI;AACjD"}
|
|
@@ -1,158 +0,0 @@
|
|
|
1
|
-
//#region src/features/patterns/tileGeometry.ts
|
|
2
|
-
function e(e) {
|
|
3
|
-
if (e.size !== void 0) return e.size;
|
|
4
|
-
switch (e.tile) {
|
|
5
|
-
case "hatch": return 5;
|
|
6
|
-
case "crosshatch": return 6;
|
|
7
|
-
case "dots": return 6;
|
|
8
|
-
case "chunks": return 48;
|
|
9
|
-
default: return 8;
|
|
10
|
-
}
|
|
11
|
-
}
|
|
12
|
-
function t(e) {
|
|
13
|
-
let t = e | 0;
|
|
14
|
-
return () => {
|
|
15
|
-
t = t + 1831565813 | 0;
|
|
16
|
-
let e = Math.imul(t ^ t >>> 15, 1 | t);
|
|
17
|
-
return e = e + Math.imul(e ^ e >>> 7, 61 | e) ^ e, ((e ^ e >>> 14) >>> 0) / 4294967296;
|
|
18
|
-
};
|
|
19
|
-
}
|
|
20
|
-
function n(n) {
|
|
21
|
-
let a = e(n), { color: o } = n;
|
|
22
|
-
switch (n.tile) {
|
|
23
|
-
case "hatch": return {
|
|
24
|
-
size: a,
|
|
25
|
-
shapes: r(a, n.lineWidth ?? 1, o)
|
|
26
|
-
};
|
|
27
|
-
case "crosshatch": {
|
|
28
|
-
let e = n.lineWidth ?? .8;
|
|
29
|
-
return {
|
|
30
|
-
size: a,
|
|
31
|
-
shapes: [...r(a, e, o), ...i(a, e, o)]
|
|
32
|
-
};
|
|
33
|
-
}
|
|
34
|
-
case "dots": {
|
|
35
|
-
let e = n.radius ?? 1;
|
|
36
|
-
return {
|
|
37
|
-
size: a,
|
|
38
|
-
shapes: [{
|
|
39
|
-
kind: "circle",
|
|
40
|
-
cx: a / 2,
|
|
41
|
-
cy: a / 2,
|
|
42
|
-
r: e,
|
|
43
|
-
color: o
|
|
44
|
-
}]
|
|
45
|
-
};
|
|
46
|
-
}
|
|
47
|
-
case "chunks": {
|
|
48
|
-
let e = n.density ?? .35, r = n.chunkSize ?? 3, i = t(n.seed ?? 42), s = Math.round(a * a * e / (r * r)), c = [];
|
|
49
|
-
n.bg !== void 0 && c.push({
|
|
50
|
-
kind: "rect",
|
|
51
|
-
x: 0,
|
|
52
|
-
y: 0,
|
|
53
|
-
width: a,
|
|
54
|
-
height: a,
|
|
55
|
-
color: n.bg
|
|
56
|
-
});
|
|
57
|
-
for (let e = 0; e < s; e++) {
|
|
58
|
-
let e = i() * a, t = i() * a, n = r * (.5 + i()), s = r * (.5 + i()), l = i() * Math.PI;
|
|
59
|
-
c.push({
|
|
60
|
-
kind: "ellipse",
|
|
61
|
-
cx: e,
|
|
62
|
-
cy: t,
|
|
63
|
-
rx: n / 2,
|
|
64
|
-
ry: s / 2,
|
|
65
|
-
rotation: l,
|
|
66
|
-
color: o
|
|
67
|
-
});
|
|
68
|
-
}
|
|
69
|
-
return {
|
|
70
|
-
size: a,
|
|
71
|
-
shapes: c
|
|
72
|
-
};
|
|
73
|
-
}
|
|
74
|
-
default: return {
|
|
75
|
-
size: a,
|
|
76
|
-
shapes: []
|
|
77
|
-
};
|
|
78
|
-
}
|
|
79
|
-
}
|
|
80
|
-
function r(e, t, n) {
|
|
81
|
-
return [
|
|
82
|
-
{
|
|
83
|
-
kind: "line",
|
|
84
|
-
x1: -1,
|
|
85
|
-
y1: e + 1,
|
|
86
|
-
x2: e + 1,
|
|
87
|
-
y2: -1,
|
|
88
|
-
width: t,
|
|
89
|
-
color: n
|
|
90
|
-
},
|
|
91
|
-
{
|
|
92
|
-
kind: "line",
|
|
93
|
-
x1: -1,
|
|
94
|
-
y1: 1,
|
|
95
|
-
x2: 1,
|
|
96
|
-
y2: -1,
|
|
97
|
-
width: t,
|
|
98
|
-
color: n
|
|
99
|
-
},
|
|
100
|
-
{
|
|
101
|
-
kind: "line",
|
|
102
|
-
x1: e - 1,
|
|
103
|
-
y1: e + 1,
|
|
104
|
-
x2: e + 1,
|
|
105
|
-
y2: e - 1,
|
|
106
|
-
width: t,
|
|
107
|
-
color: n
|
|
108
|
-
}
|
|
109
|
-
];
|
|
110
|
-
}
|
|
111
|
-
function i(e, t, n) {
|
|
112
|
-
return [
|
|
113
|
-
{
|
|
114
|
-
kind: "line",
|
|
115
|
-
x1: -1,
|
|
116
|
-
y1: -1,
|
|
117
|
-
x2: e + 1,
|
|
118
|
-
y2: e + 1,
|
|
119
|
-
width: t,
|
|
120
|
-
color: n
|
|
121
|
-
},
|
|
122
|
-
{
|
|
123
|
-
kind: "line",
|
|
124
|
-
x1: e - 1,
|
|
125
|
-
y1: -1,
|
|
126
|
-
x2: e + 1,
|
|
127
|
-
y2: 1,
|
|
128
|
-
width: t,
|
|
129
|
-
color: n
|
|
130
|
-
},
|
|
131
|
-
{
|
|
132
|
-
kind: "line",
|
|
133
|
-
x1: -1,
|
|
134
|
-
y1: e - 1,
|
|
135
|
-
x2: 1,
|
|
136
|
-
y2: e + 1,
|
|
137
|
-
width: t,
|
|
138
|
-
color: n
|
|
139
|
-
}
|
|
140
|
-
];
|
|
141
|
-
}
|
|
142
|
-
function a(e, t) {
|
|
143
|
-
for (let n of t.shapes) {
|
|
144
|
-
if (n.kind === "line") {
|
|
145
|
-
e.strokeStyle = n.color, e.lineWidth = n.width, e.beginPath(), e.moveTo(n.x1, n.y1), e.lineTo(n.x2, n.y2), e.stroke();
|
|
146
|
-
continue;
|
|
147
|
-
}
|
|
148
|
-
if (e.fillStyle = n.color, n.kind === "rect") {
|
|
149
|
-
e.fillRect(n.x, n.y, n.width, n.height);
|
|
150
|
-
continue;
|
|
151
|
-
}
|
|
152
|
-
e.beginPath(), n.kind === "circle" ? e.arc(n.cx, n.cy, n.r, 0, Math.PI * 2) : e.ellipse(n.cx, n.cy, n.rx, n.ry, n.rotation, 0, Math.PI * 2), e.fill();
|
|
153
|
-
}
|
|
154
|
-
}
|
|
155
|
-
//#endregion
|
|
156
|
-
export { a as drawTileShapes, n as tileGeometry, e as tileSize };
|
|
157
|
-
|
|
158
|
-
//# sourceMappingURL=tileGeometry.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"tileGeometry.js","names":["tileSize","spec","mulberry32","s","seed","t","tileGeometry","forwardDiagonals","color","width","backwardDiagonals","r","density","chunkSize","rand","count","shapes","i","cx","cy","w","h","rotation","drawTileShapes","shape","geometry","oc"],"sources":["../../../src/features/patterns/tileGeometry.ts"],"sourcesContent":["/**\n * The shapes a built-in tile is made of, as data.\n *\n * One description, two renderers: `patterns-builtin` strokes/fills these to\n * an `OffscreenCanvas` to build the GL texture, and `@weasel-js/svg` maps\n * them to `<pattern>` children. Duplicating the tile drawing in the\n * serializer would let the raster and vector forms drift apart silently.\n */\n\nimport type { TilePatternSpec } from '@weasel-js/paint';\n\n/** One primitive within a pattern tile, in tile-local coordinates. */\nexport type TileShape =\n | { kind: 'line'; x1: number; y1: number; x2: number; y2: number; width: number; color: string }\n | { kind: 'circle'; cx: number; cy: number; r: number; color: string }\n | { kind: 'ellipse'; cx: number; cy: number; rx: number; ry: number; rotation: number; color: string }\n | { kind: 'rect'; x: number; y: number; width: number; height: number; color: string };\n\n/** A built-in tile's shapes plus the edge length they're drawn within. */\nexport interface TileGeometry {\n size: number;\n shapes: TileShape[];\n}\n\n/** Defaults per tile kind, matching each factory's signature. */\nexport function tileSize(spec: TilePatternSpec): number {\n if (spec.size !== undefined) return spec.size;\n switch (spec.tile) {\n case 'hatch': return 5;\n case 'crosshatch': return 6;\n case 'dots': return 6;\n case 'chunks': return 48;\n default: return 8;\n }\n}\n\n/** Seeded PRNG (mulberry32) — `chunks` places its scatter with this, so the\n * same `seed` yields the same tile in both the raster and vector paths. */\nfunction mulberry32(seed: number): () => number {\n let s = seed | 0;\n return () => {\n s = (s + 0x6D2B79F5) | 0;\n let t = Math.imul(s ^ (s >>> 15), 1 | s);\n t = (t + Math.imul(t ^ (t >>> 7), 61 | t)) ^ t;\n return ((t ^ (t >>> 14)) >>> 0) / 4294967296;\n };\n}\n\n/** Resolve a pattern spec to the shapes that make up one tile. Consumers that\n * want to draw a pattern swatch themselves — a picker, an SVG export — read\n * this rather than rasterizing a texture. */\nexport function tileGeometry(spec: TilePatternSpec): TileGeometry {\n const s = tileSize(spec);\n const { color } = spec;\n\n switch (spec.tile) {\n case 'hatch': {\n const width = spec.lineWidth ?? 1;\n return { size: s, shapes: forwardDiagonals(s, width, color) };\n }\n case 'crosshatch': {\n const width = spec.lineWidth ?? 0.8;\n return {\n size: s,\n shapes: [...forwardDiagonals(s, width, color), ...backwardDiagonals(s, width, color)],\n };\n }\n case 'dots': {\n const r = spec.radius ?? 1;\n return { size: s, shapes: [{ kind: 'circle', cx: s / 2, cy: s / 2, r, color }] };\n }\n case 'chunks': {\n const density = spec.density ?? 0.35;\n const chunkSize = spec.chunkSize ?? 3;\n const rand = mulberry32(spec.seed ?? 42);\n const count = Math.round((s * s * density) / (chunkSize * chunkSize));\n const shapes: TileShape[] = [];\n if (spec.bg !== undefined) {\n shapes.push({ kind: 'rect', x: 0, y: 0, width: s, height: s, color: spec.bg });\n }\n for (let i = 0; i < count; i++) {\n const cx = rand() * s;\n const cy = rand() * s;\n const w = chunkSize * (0.5 + rand());\n const h = chunkSize * (0.5 + rand());\n const rotation = rand() * Math.PI;\n shapes.push({ kind: 'ellipse', cx, cy, rx: w / 2, ry: h / 2, rotation, color });\n }\n return { size: s, shapes };\n }\n default:\n return { size: s, shapes: [] };\n }\n}\n\n/** The forward (`/`) diagonal, plus the two corner stubs that make it tile\n * seamlessly across the edges. */\nfunction forwardDiagonals(s: number, width: number, color: string): TileShape[] {\n return [\n { kind: 'line', x1: -1, y1: s + 1, x2: s + 1, y2: -1, width, color },\n { kind: 'line', x1: -1, y1: 1, x2: 1, y2: -1, width, color },\n { kind: 'line', x1: s - 1, y1: s + 1, x2: s + 1, y2: s - 1, width, color },\n ];\n}\n\n/** The backward (`\\`) diagonal and its two stubs. */\nfunction backwardDiagonals(s: number, width: number, color: string): TileShape[] {\n return [\n { kind: 'line', x1: -1, y1: -1, x2: s + 1, y2: s + 1, width, color },\n { kind: 'line', x1: s - 1, y1: -1, x2: s + 1, y2: 1, width, color },\n { kind: 'line', x1: -1, y1: s - 1, x2: 1, y2: s + 1, width, color },\n ];\n}\n\n/** Draw a tile's shapes to a 2D context — the raster half of the pair. */\nexport function drawTileShapes(oc: CanvasRenderingContext2D, geometry: TileGeometry): void {\n for (const shape of geometry.shapes) {\n if (shape.kind === 'line') {\n oc.strokeStyle = shape.color;\n oc.lineWidth = shape.width;\n oc.beginPath();\n oc.moveTo(shape.x1, shape.y1);\n oc.lineTo(shape.x2, shape.y2);\n oc.stroke();\n continue;\n }\n oc.fillStyle = shape.color;\n if (shape.kind === 'rect') {\n oc.fillRect(shape.x, shape.y, shape.width, shape.height);\n continue;\n }\n oc.beginPath();\n if (shape.kind === 'circle') {\n oc.arc(shape.cx, shape.cy, shape.r, 0, Math.PI * 2);\n } else {\n oc.ellipse(shape.cx, shape.cy, shape.rx, shape.ry, shape.rotation, 0, Math.PI * 2);\n }\n oc.fill();\n }\n}\n"],"mappings":";AAyBA,SAAgBA,EAAS,GAA+B;CACtD,IAAIC,EAAK,SAAS,KAAA,GAAW,OAAOA,EAAK;CACzC,QAAQA,EAAK,MAAb;EACE,KAAK,SAAS,OAAO;EACrB,KAAK,cAAc,OAAO;EAC1B,KAAK,QAAQ,OAAO;EACpB,KAAK,UAAU,OAAO;EACtB,SAAS,OAAO;CAClB;AACF;AAIA,SAASC,EAAW,GAA4B;CAC9C,IAAIC,IAAIC,IAAO;CACf,aAAa;EACX,IAAKD,IAAI,aAAc;EACvB,IAAIE,IAAI,KAAK,KAAKF,IAAKA,MAAM,IAAK,IAAIA,CAAC;EAEvC,OADA,IAAKE,IAAI,KAAK,KAAKA,IAAKA,MAAM,GAAI,KAAKA,CAAC,IAAKA,KACpCA,IAAKA,MAAM,QAAS,KAAK;CACpC;AACF;AAKA,SAAgBC,EAAa,GAAqC;CAChE,IAAMH,IAAIH,EAASC,CAAI,GACjB,EAAE,aAAUA;CAElB,QAAQA,EAAK,MAAb;EACE,KAAK,SAEH,OAAO;GAAE,MAAME;GAAG,QAAQI,EAAiBJ,GAD7BF,EAAK,aAAa,GACqBO,CAAK;EAAE;EAE9D,KAAK,cAAc;GACjB,IAAMC,IAAQR,EAAK,aAAa;GAChC,OAAO;IACL,MAAME;IACN,QAAQ,CAAC,GAAGI,EAAiBJ,GAAGM,GAAOD,CAAK,GAAG,GAAGE,EAAkBP,GAAGM,GAAOD,CAAK,CAAC;GACtF;EACF;EACA,KAAK,QAAQ;GACX,IAAMG,IAAIV,EAAK,UAAU;GACzB,OAAO;IAAE,MAAME;IAAG,QAAQ,CAAC;KAAE,MAAM;KAAU,IAAIA,IAAI;KAAG,IAAIA,IAAI;KAAG;KAAG;IAAM,CAAC;GAAE;EACjF;EACA,KAAK,UAAU;GACb,IAAMS,IAAUX,EAAK,WAAW,KAC1BY,IAAYZ,EAAK,aAAa,GAC9Ba,IAAOZ,EAAWD,EAAK,QAAQ,EAAE,GACjCc,IAAQ,KAAK,MAAOZ,IAAIA,IAAIS,KAAYC,IAAYA,EAAU,GAC9DG,IAAsB,CAAC;GAC7B,AAAIf,EAAK,OAAO,KAAA,KACde,EAAO,KAAK;IAAE,MAAM;IAAQ,GAAG;IAAG,GAAG;IAAG,OAAOb;IAAG,QAAQA;IAAG,OAAOF,EAAK;GAAG,CAAC;GAE/E,KAAK,IAAIgB,IAAI,GAAGA,IAAIF,GAAO,KAAK;IAC9B,IAAMG,IAAKJ,EAAK,IAAIX,GACdgB,IAAKL,EAAK,IAAIX,GACdiB,IAAIP,KAAa,KAAMC,EAAK,IAC5BO,IAAIR,KAAa,KAAMC,EAAK,IAC5BQ,IAAWR,EAAK,IAAI,KAAK;IAC/B,EAAO,KAAK;KAAE,MAAM;KAAW;KAAI;KAAI,IAAIM,IAAI;KAAG,IAAIC,IAAI;KAAG;KAAU;IAAM,CAAC;GAChF;GACA,OAAO;IAAE,MAAMlB;IAAG;GAAO;EAC3B;EACA,SACE,OAAO;GAAE,MAAMA;GAAG,QAAQ,CAAC;EAAE;CACjC;AACF;AAIA,SAASI,EAAiB,GAAW,GAAe,GAA4B;CAC9E,OAAO;EACL;GAAE,MAAM;GAAQ,IAAI;GAAI,IAAIJ,IAAI;GAAG,IAAIA,IAAI;GAAG,IAAI;GAAI;GAAO;EAAM;EACnE;GAAE,MAAM;GAAQ,IAAI;GAAI,IAAI;GAAG,IAAI;GAAG,IAAI;GAAI;GAAO;EAAM;EAC3D;GAAE,MAAM;GAAQ,IAAIA,IAAI;GAAG,IAAIA,IAAI;GAAG,IAAIA,IAAI;GAAG,IAAIA,IAAI;GAAG;GAAO;EAAM;CAC3E;AACF;AAGA,SAASO,EAAkB,GAAW,GAAe,GAA4B;CAC/E,OAAO;EACL;GAAE,MAAM;GAAQ,IAAI;GAAI,IAAI;GAAI,IAAIP,IAAI;GAAG,IAAIA,IAAI;GAAG;GAAO;EAAM;EACnE;GAAE,MAAM;GAAQ,IAAIA,IAAI;GAAG,IAAI;GAAI,IAAIA,IAAI;GAAG,IAAI;GAAG;GAAO;EAAM;EAClE;GAAE,MAAM;GAAQ,IAAI;GAAI,IAAIA,IAAI;GAAG,IAAI;GAAG,IAAIA,IAAI;GAAG;GAAO;EAAM;CACpE;AACF;AAGA,SAAgBoB,EAAe,GAA8B,GAA8B;CACzF,KAAK,IAAMC,KAASC,EAAS,QAAQ;EACnC,IAAID,EAAM,SAAS,QAAQ;GAMzB,AALA,EAAG,cAAcA,EAAM,OACvB,EAAG,YAAYA,EAAM,OACrBE,EAAG,UAAU,GACbA,EAAG,OAAOF,EAAM,IAAIA,EAAM,EAAE,GAC5BE,EAAG,OAAOF,EAAM,IAAIA,EAAM,EAAE,GAC5BE,EAAG,OAAO;GACV;EACF;EAEA,IADA,EAAG,YAAYF,EAAM,OACjBA,EAAM,SAAS,QAAQ;GACzB,EAAG,SAASA,EAAM,GAAGA,EAAM,GAAGA,EAAM,OAAOA,EAAM,MAAM;GACvD;EACF;EAOA,AANAE,EAAG,UAAU,GACTF,EAAM,SAAS,WACjBE,EAAG,IAAIF,EAAM,IAAIA,EAAM,IAAIA,EAAM,GAAG,GAAG,KAAK,KAAK,CAAC,IAElDE,EAAG,QAAQF,EAAM,IAAIA,EAAM,IAAIA,EAAM,IAAIA,EAAM,IAAIA,EAAM,UAAU,GAAG,KAAK,KAAK,CAAC,GAEnFE,EAAG,KAAK;CACV;AACF"}
|
|
@@ -1,45 +0,0 @@
|
|
|
1
|
-
import { createContext as e, useContext as t, useState as n, useSyncExternalStore as r } from "react";
|
|
2
|
-
import { jsx as i } from "react/jsx-runtime";
|
|
3
|
-
//#region src/features/pointer/PointerContext.tsx
|
|
4
|
-
function a(e, t) {
|
|
5
|
-
return e === null || t === null ? e === t : e.worldX === t.worldX && e.worldY === t.worldY && e.viewId === t.viewId;
|
|
6
|
-
}
|
|
7
|
-
function o() {
|
|
8
|
-
let e = null, t = 0, n = /* @__PURE__ */ new Set(), r = () => e;
|
|
9
|
-
return {
|
|
10
|
-
get: r,
|
|
11
|
-
set(r) {
|
|
12
|
-
if (!a(e, r)) {
|
|
13
|
-
e = r, t++;
|
|
14
|
-
for (let e of [...n]) e();
|
|
15
|
-
}
|
|
16
|
-
},
|
|
17
|
-
subscribe(e) {
|
|
18
|
-
return n.add(e), () => {
|
|
19
|
-
n.delete(e);
|
|
20
|
-
};
|
|
21
|
-
},
|
|
22
|
-
getVersion: () => t,
|
|
23
|
-
getDropPoint: r
|
|
24
|
-
};
|
|
25
|
-
}
|
|
26
|
-
var s = e(null);
|
|
27
|
-
function c({ children: e, store: t }) {
|
|
28
|
-
let [r] = n(o);
|
|
29
|
-
return /* @__PURE__ */ i(s.Provider, {
|
|
30
|
-
value: t ?? r,
|
|
31
|
-
children: e
|
|
32
|
-
});
|
|
33
|
-
}
|
|
34
|
-
function l() {
|
|
35
|
-
return t(s);
|
|
36
|
-
}
|
|
37
|
-
var u = () => () => {}, d = () => null;
|
|
38
|
-
function f() {
|
|
39
|
-
let e = l();
|
|
40
|
-
return r(e ? e.subscribe : u, e ? e.get : d, e ? e.get : d);
|
|
41
|
-
}
|
|
42
|
-
//#endregion
|
|
43
|
-
export { c as PointerContextProvider, o as createPointerStore, l as usePointerContext, f as usePointerPosition };
|
|
44
|
-
|
|
45
|
-
//# sourceMappingURL=PointerContext.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"PointerContext.js","names":["samePos","a","b","createPointerStore","current","version","listeners","get","next","fn","PointerContext","createContext","PointerContextProvider","own","useState","store","usePointerContext","useContext","noSubscribe","noPointer","usePointerPosition","useSyncExternalStore"],"sources":["../../../src/features/pointer/PointerContext.tsx"],"sourcesContent":["/**\n * @experimental\n * PointerContext — the world-space position of the canvas pointer, and the\n * view it is over, refreshed on every `pointermove` and cleared on\n * `pointerleave`.\n *\n * It is an external store rather than React state: cursor moves fire dozens of\n * times per second, and a consumer that only reads on demand (paste at the\n * pointer) must not re-render for each one. Readers that do need to follow it\n * — a linked cursor — subscribe, or use `usePointerPosition()`.\n *\n * `<SceneCanvas>` publishes automatically, and defers to a provider already in\n * scope, so several surfaces under one provider share one pointer: a detached\n * minimap and its main canvas each see where the other's pointer is.\n */\nimport {\n createContext, useContext, useState, useSyncExternalStore, type ReactNode,\n} from 'react';\n\n/** @experimental World-space pointer position and the view it is over — a\n * view id, or `null` for a surface's own camera. `null` as a whole when the\n * pointer is over no publishing surface. */\nexport type PointerWorldPos = { worldX: number; worldY: number; viewId: string | null } | null;\n\n/** @experimental */\nexport interface PointerContextValue {\n /** The latest position. */\n get(): PointerWorldPos;\n /** Publish a position. Subscribers hear only a changed value. */\n set(next: PointerWorldPos): void;\n /** Called after every change; returns the unsubscribe. */\n subscribe(fn: () => void): () => void;\n /** Bumps on every change. */\n getVersion(): number;\n /** `get()` as a stable thunk, for hooks taking a drop-point option. */\n readonly getDropPoint: () => PointerWorldPos;\n}\n\nfunction samePos(a: PointerWorldPos, b: PointerWorldPos): boolean {\n if (a === null || b === null) return a === b;\n return a.worldX === b.worldX && a.worldY === b.worldY && a.viewId === b.viewId;\n}\n\n/** @experimental A pointer store with no provider around it. */\nexport function createPointerStore(): PointerContextValue {\n let current: PointerWorldPos = null;\n let version = 0;\n const listeners = new Set<() => void>();\n const get = (): PointerWorldPos => current;\n return {\n get,\n set(next) {\n if (samePos(current, next)) return;\n current = next;\n version++;\n for (const fn of [...listeners]) fn();\n },\n subscribe(fn) {\n listeners.add(fn);\n return () => { listeners.delete(fn); };\n },\n getVersion: () => version,\n getDropPoint: get,\n };\n}\n\nconst PointerContext = createContext<PointerContextValue | null>(null);\n\n/**\n * @experimental\n * Wrap the part of the React tree that should share one pointer. Usually at\n * the app root, alongside `<ActionsProvider>` and `<SelectionContextProvider>`.\n *\n * Most consumers don't need to mount this directly — `<SceneCanvas>` mounts\n * one when none is in scope. Mount it yourself when two surfaces should share\n * a pointer. Pass `store` to publish into one you hold elsewhere\n * (`createPointerStore()`).\n */\nexport function PointerContextProvider(\n { children, store }: { children: ReactNode; store?: PointerContextValue },\n): ReactNode {\n const [own] = useState(createPointerStore);\n return <PointerContext.Provider value={store ?? own}>{children}</PointerContext.Provider>;\n}\n\n/** @experimental The surrounding pointer store, or `null` when no provider is\n * in scope. */\nexport function usePointerContext(): PointerContextValue | null {\n return useContext(PointerContext);\n}\n\nconst noSubscribe = (): (() => void) => () => {};\nconst noPointer = (): PointerWorldPos => null;\n\n/** @experimental The pointer, re-rendering the caller whenever it changes.\n * `null` outside a provider. */\nexport function usePointerPosition(): PointerWorldPos {\n const store = usePointerContext();\n return useSyncExternalStore(\n store ? store.subscribe : noSubscribe,\n store ? store.get : noPointer,\n store ? store.get : noPointer,\n );\n}\n"],"mappings":";;;AAsCA,SAASA,EAAQ,GAAoB,GAA6B;CAEhE,OADIC,MAAM,QAAQC,MAAM,OAAaD,MAAMC,IACpCD,EAAE,WAAWC,EAAE,UAAUD,EAAE,WAAWC,EAAE,UAAUD,EAAE,WAAWC,EAAE;AAC1E;AAGA,SAAgBC,IAA0C;CACxD,IAAIC,IAA2B,MAC3BC,IAAU,GACRC,oBAAY,IAAI,IAAgB,GAChCC,UAA6BH;CACnC,OAAO;EACL;EACA,IAAI,GAAM;GACR,IAAI,GAAQA,GAASI,CAAI,GAEzB;IADA,IAAUA,GACV;IACA,KAAK,IAAMC,KAAM,CAAC,GAAGH,CAAS,GAAG,EAAG;GADpC;EAEF;EACA,UAAU,GAAI;GAEZ,OADAA,EAAU,IAAIG,CAAE,SACH;IAAE,EAAU,OAAOA,CAAE;GAAG;EACvC;EACA,kBAAkBJ;EAClB,cAAcE;CAChB;AACF;AAEA,IAAMG,IAAiBC,EAA0C,IAAI;AAYrE,SAAgBC,EACd,EAAE,aAAU,YACD;CACX,IAAM,CAACC,KAAOC,EAASX,CAAkB;CACzC,OAAO,kBAACO,EAAe,UAAhB;EAAyB,OAAOK,KAASF;EAAM;CAAkC,CAAA;AAC1F;AAIA,SAAgBG,IAAgD;CAC9D,OAAOC,EAAWP,CAAc;AAClC;AAEA,IAAMQ,gBAAwC,CAAC,GACzCC,UAAmC;AAIzC,SAAgBC,IAAsC;CACpD,IAAML,IAAQC,EAAkB;CAChC,OAAOK,EACLN,IAAQA,EAAM,YAAYG,GAC1BH,IAAQA,EAAM,MAAMI,GACpBJ,IAAQA,EAAM,MAAMI,CACtB;AACF"}
|
|
@@ -1,51 +0,0 @@
|
|
|
1
|
-
import { createContext as e, useCallback as t, useContext as n, useEffect as r, useMemo as i, useRef as a, useState as o } from "react";
|
|
2
|
-
import { useLatest as s } from "@weasel-js/react";
|
|
3
|
-
import { Fragment as c, jsx as l } from "react/jsx-runtime";
|
|
4
|
-
//#region src/features/selection/SelectionContext.tsx
|
|
5
|
-
var u = e(null);
|
|
6
|
-
function d({ children: e }) {
|
|
7
|
-
let [n, r] = o({
|
|
8
|
-
selection: [],
|
|
9
|
-
kinds: void 0
|
|
10
|
-
}), s = a(""), c = t((e, t) => {
|
|
11
|
-
let n = JSON.stringify([e, t]);
|
|
12
|
-
n !== s.current && (s.current = n, r({
|
|
13
|
-
selection: e,
|
|
14
|
-
kinds: t
|
|
15
|
-
}));
|
|
16
|
-
}, []), d = i(() => ({
|
|
17
|
-
selection: n.selection,
|
|
18
|
-
...n.kinds === void 0 ? {} : { kinds: n.kinds },
|
|
19
|
-
publishSelection: c
|
|
20
|
-
}), [n, c]);
|
|
21
|
-
return /* @__PURE__ */ l(u.Provider, {
|
|
22
|
-
value: d,
|
|
23
|
-
children: e
|
|
24
|
-
});
|
|
25
|
-
}
|
|
26
|
-
function f() {
|
|
27
|
-
return n(u);
|
|
28
|
-
}
|
|
29
|
-
function p({ children: e }) {
|
|
30
|
-
return n(u) === null ? /* @__PURE__ */ l(d, { children: e }) : /* @__PURE__ */ l(c, { children: e });
|
|
31
|
-
}
|
|
32
|
-
function m(e, t) {
|
|
33
|
-
let i = n(u), a = s(e), o = s(t), c = JSON.stringify([e, t]), l = i?.publishSelection;
|
|
34
|
-
r(() => {
|
|
35
|
-
l && l(a.current, o.current);
|
|
36
|
-
}, [
|
|
37
|
-
l,
|
|
38
|
-
c,
|
|
39
|
-
a,
|
|
40
|
-
o
|
|
41
|
-
]);
|
|
42
|
-
let d = s(i), f = s(c);
|
|
43
|
-
r(() => () => {
|
|
44
|
-
let e = d.current;
|
|
45
|
-
e && JSON.stringify([e.selection, e.kinds]) === f.current && e.publishSelection([]);
|
|
46
|
-
}, [d, f]);
|
|
47
|
-
}
|
|
48
|
-
//#endregion
|
|
49
|
-
export { d as SelectionContextProvider, p as SelectionContextProviderIfRoot, m as usePublishSelection, f as useSelectionContext };
|
|
50
|
-
|
|
51
|
-
//# sourceMappingURL=SelectionContext.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"SelectionContext.js","names":["_Fragment","SelectionContext","createContext","SelectionContextProvider","state","setState","useState","lastSerializedRef","useRef","publishSelection","useCallback","next","ids","kinds","value","useMemo","useSelectionContext","useContext","SelectionContextProviderIfRoot","Fragment","usePublishSelection","ctx","idsRef","useLatest","kindsRef","serialized","publish","ctxRef","serializedRef","slot"],"sources":["../../../src/features/selection/SelectionContext.tsx"],"sourcesContent":["/**\n * @experimental\n * SelectionContext — a tiny ambient context that publishes \"what's currently\n * selected\" so non-canvas UI (command palette, status bar, breadcrumbs,\n * undo-label generation) can read it without threading a selection prop\n * through the tree.\n *\n * **Single-slot semantics (v1):** the context holds one selection array.\n * Whichever canvas (or other publisher) calls `publishSelection` most\n * recently owns the slot. For single-canvas pages — the typical case —\n * this Just Works. Multi-canvas pages get last-writer-wins, which is\n * approximately \"most recently rendered.\" A v2 could become focus-aware\n * (canvas claims the slot on focus, releases on blur), but that's deferred\n * until a real multi-canvas use case lands.\n *\n * `<SceneCanvas>` calls `publishSelection` automatically when wrapped in a\n * `<SelectionContext>`. Bare-`<Canvas>` consumers opt in by calling\n * `useSelectionContext().publishSelection(ids)` themselves.\n */\nimport {\n createContext,\n useCallback,\n useContext,\n useEffect,\n useMemo,\n useRef,\n useState,\n type ReactNode,\n} from 'react';\nimport { useLatest } from '@weasel-js/react';\nimport type { NodeId } from 'core/scene/types';\n\n/** @experimental */\nexport interface SelectionContextValue {\n /** The most-recently-published selection. Empty array when no canvas\n * has published or when the active canvas's selection is empty. */\n readonly selection: readonly NodeId[];\n /** Optional per-id kind label, parallel to `selection`. Publishers that\n * know their domain populate it (e.g. `'rectangle'`, `'path'`, `'group'`)\n * so consumers can render type-aware copy. Sparse entries (`undefined`)\n * are allowed; consumers should treat the kinds array as best-effort.\n *\n * See `docs/TODO.md` (Tier 1.5 → \"Typed scene-object references\") for the\n * longer-term direction toward a proper id+kind value type. */\n readonly kinds?: readonly (string | undefined)[];\n /** Publish the calling canvas's selection. Idempotent — calling with\n * the same array (by content equality) does not trigger a re-render\n * of the consumer tree. */\n publishSelection(ids: readonly NodeId[], kinds?: readonly (string | undefined)[]): void;\n}\n\nconst SelectionContext = createContext<SelectionContextValue | null>(null);\n\n/**\n * @experimental\n * Wrap the part of the React tree that should share a selection context.\n * Usually placed at the demo / app root, alongside `<ActionsProvider>`.\n */\nexport function SelectionContextProvider({ children }: { children: ReactNode }): ReactNode {\n const [state, setState] = useState<{\n selection: readonly NodeId[];\n kinds: readonly (string | undefined)[] | undefined;\n }>({ selection: [], kinds: undefined });\n const lastSerializedRef = useRef<string>('');\n\n const publishSelection = useCallback((\n ids: readonly NodeId[],\n kinds?: readonly (string | undefined)[],\n ): void => {\n // Cheap content equality via JSON serialization over both ids and kinds.\n // Selection arrays are typically small (≤ a few dozen entries); the cost\n // is dwarfed by avoiding a re-render when nothing changed.\n const next = JSON.stringify([ids, kinds]);\n if (next === lastSerializedRef.current) return;\n lastSerializedRef.current = next;\n setState({ selection: ids, kinds });\n }, []);\n\n const value = useMemo<SelectionContextValue>(\n () => ({\n selection: state.selection,\n ...(state.kinds !== undefined ? { kinds: state.kinds } : {}),\n publishSelection,\n }),\n [state, publishSelection],\n );\n\n return <SelectionContext.Provider value={value}>{children}</SelectionContext.Provider>;\n}\n\n/**\n * @experimental\n * Read the current selection-context value. Returns `null` when no\n * `<SelectionContextProvider>` is in scope; consumers should fall back\n * gracefully (e.g. command palette hides the \"N selected\" header).\n */\nexport function useSelectionContext(): SelectionContextValue | null {\n return useContext(SelectionContext);\n}\n\n/**\n * @experimental\n * Conditional `<SelectionContextProvider>` wrapper. Mounts a provider only\n * when no parent provider is in scope — otherwise renders children unwrapped\n * so callers (e.g. `<WeaselProvider>`) defer to the host's existing scope.\n * Mirrors `ActionsProviderIfRoot` / `DepRegistryProviderIfRoot`.\n */\nexport function SelectionContextProviderIfRoot({\n children,\n}: {\n children: ReactNode;\n}): ReactNode {\n const parent = useContext(SelectionContext);\n if (parent !== null) return <>{children}</>;\n return <SelectionContextProvider>{children}</SelectionContextProvider>;\n}\n\n/**\n * @experimental\n * Convenience hook for canvas components: publishes the supplied `ids`\n * into the surrounding `<SelectionContextProvider>` whenever the\n * content of `ids` changes. No-op when there's no provider in scope.\n *\n * Used by `<SceneCanvas>` internally to auto-publish; bare-Canvas\n * consumers call `useSelectionContext()` and `publishSelection` directly.\n */\nexport function usePublishSelection(\n ids: readonly NodeId[],\n kinds?: readonly (string | undefined)[],\n): void {\n const ctx = useContext(SelectionContext);\n // Track latest values via refs so the effect's deps array can use a stable\n // serialization — avoids re-firing on identity-only changes.\n const idsRef = useLatest(ids);\n const kindsRef = useLatest(kinds);\n const serialized = JSON.stringify([ids, kinds]);\n // Depend on `publishSelection` rather than `ctx`: the provider mints a new\n // context value on every publish, so keying on `ctx` refires this effect for\n // every publisher whenever any one of them publishes.\n const publish = ctx?.publishSelection;\n useEffect(() => {\n if (!publish) return;\n publish(idsRef.current, kindsRef.current);\n }, [publish, serialized, idsRef, kindsRef]);\n // A publisher that goes away takes its selection with it, unless another\n // has written the slot since.\n const ctxRef = useLatest(ctx);\n const serializedRef = useLatest(serialized);\n useEffect(() => () => {\n const slot = ctxRef.current;\n if (slot && JSON.stringify([slot.selection, slot.kinds]) === serializedRef.current) {\n slot.publishSelection([]);\n }\n }, [ctxRef, serializedRef]);\n}\n"],"mappings":";;;;AAmDA,IAAMC,IAAmBC,EAA4C,IAAI;AAOzE,SAAgBC,EAAyB,EAAE,eAAgD;CACzF,IAAM,CAACC,GAAOC,KAAYC,EAGvB;EAAE,WAAW,CAAC;EAAG,OAAO,KAAA;CAAU,CAAC,GAChCC,IAAoBC,EAAe,EAAE,GAErCC,IAAmBC,GACvB,GACA,MACS;EAIT,IAAMC,IAAO,KAAK,UAAU,CAACC,GAAKC,CAAK,CAAC;EACxC,AAAIF,MAASJ,EAAkB,YAC/B,EAAkB,UAAUI,GAC5BN,EAAS;GAAE,WAAWO;GAAK;EAAM,CAAC;CACpC,GAAG,CAAC,CAAC,GAECE,IAAQC,SACL;EACL,WAAWX,EAAM;EACjB,GAAIA,EAAM,UAAU,KAAA,IAAqC,CAAC,IAA1B,EAAE,OAAOA,EAAM,MAAM;EACrD;CACF,IACA,CAACA,GAAOK,CAAgB,CAC1B;CAEA,OAAO,kBAACR,EAAiB,UAAlB;EAAkC;EAAQ;CAAoC,CAAA;AACvF;AAQA,SAAgBe,IAAoD;CAClE,OAAOC,EAAWhB,CAAgB;AACpC;AASA,SAAgBiB,EAA+B,EAC7C,eAGY;CAGZ,OAFeD,EAAWhB,CACtB,MAAW,OACR,kBAACE,GAAD,EAA2B,YAAmC,CAAA,IADzC,kBAAAH,GAAA,EAAG,YAAW,CAAA;AAE5C;AAWA,SAAgBoB,EACd,GACA,GACM;CACN,IAAMC,IAAMJ,EAAWhB,CAAgB,GAGjCqB,IAASC,EAAUX,CAAG,GACtBY,IAAWD,EAAUV,CAAK,GAC1BY,IAAa,KAAK,UAAU,CAACb,GAAKC,CAAK,CAAC,GAIxCa,IAAUL,GAAK;CACrB,QAAgB;EACd,AAAKK,KACLA,EAAQJ,EAAO,SAASE,EAAS,OAAO;CAC1C,GAAG;EAACE;EAASD;EAAYH;EAAQE;CAAQ,CAAC;CAG1C,IAAMG,IAASJ,EAAUF,CAAG,GACtBO,IAAgBL,EAAUE,CAAU;CAC1C,cAAsB;EACpB,IAAMI,IAAOF,EAAO;EACpB,AAAIE,KAAQ,KAAK,UAAU,CAACA,EAAK,WAAWA,EAAK,KAAK,CAAC,MAAMD,EAAc,WACzEC,EAAK,iBAAiB,CAAC,CAAC;CAE5B,GAAG,CAACF,GAAQC,CAAa,CAAC;AAC5B"}
|
|
@@ -1,61 +0,0 @@
|
|
|
1
|
-
import { DEFAULT_ALPHA_DECAY as e, DEFAULT_ALPHA_MIN as t, DEFAULT_VELOCITY_DECAY as n } from "./types.js";
|
|
2
|
-
//#region src/features/simulation/createSimulation.ts
|
|
3
|
-
function r(r) {
|
|
4
|
-
let i = r.nodes, a = r.forces ?? [], o = r.alpha ?? 1, s = r.alphaMin ?? t, c = r.alphaDecay ?? e, l = r.alphaTarget ?? 0, u = r.velocityDecay ?? n, d = r.random ?? Math.random;
|
|
5
|
-
function f(e) {
|
|
6
|
-
e.forEach((e, t) => {
|
|
7
|
-
e.index = t, e.vx ??= 0, e.vy ??= 0;
|
|
8
|
-
});
|
|
9
|
-
}
|
|
10
|
-
f(i);
|
|
11
|
-
for (let e of a) e.initialize?.(i, d);
|
|
12
|
-
function p() {
|
|
13
|
-
o += (l - o) * c;
|
|
14
|
-
for (let e of a) e(o);
|
|
15
|
-
let e = 1 - u;
|
|
16
|
-
for (let t of i) t.fx == null ? (t.vx = (t.vx ?? 0) * e, Number.isFinite(t.vx) || (t.vx = 0), t.x += t.vx, Number.isFinite(t.x) || (t.x = 0)) : (t.x = t.fx, t.vx = 0), t.fy == null ? (t.vy = (t.vy ?? 0) * e, Number.isFinite(t.vy) || (t.vy = 0), t.y += t.vy, Number.isFinite(t.y) || (t.y = 0)) : (t.y = t.fy, t.vy = 0);
|
|
17
|
-
}
|
|
18
|
-
let m = {
|
|
19
|
-
get nodes() {
|
|
20
|
-
return i;
|
|
21
|
-
},
|
|
22
|
-
setNodes(e) {
|
|
23
|
-
i = e, f(i);
|
|
24
|
-
for (let e of a) e.initialize?.(i, d);
|
|
25
|
-
return m;
|
|
26
|
-
},
|
|
27
|
-
setForces(e) {
|
|
28
|
-
let t = a;
|
|
29
|
-
a = e;
|
|
30
|
-
for (let n of e) t.includes(n) || n.initialize?.(i, d);
|
|
31
|
-
return m;
|
|
32
|
-
},
|
|
33
|
-
alpha(e) {
|
|
34
|
-
return e === void 0 ? o : (o = e, m);
|
|
35
|
-
},
|
|
36
|
-
alphaTarget(e) {
|
|
37
|
-
return e === void 0 ? l : (l = e, m);
|
|
38
|
-
},
|
|
39
|
-
alphaDecay(e) {
|
|
40
|
-
return e === void 0 ? c : (c = e, m);
|
|
41
|
-
},
|
|
42
|
-
alphaMin(e) {
|
|
43
|
-
return e === void 0 ? s : (s = e, m);
|
|
44
|
-
},
|
|
45
|
-
velocityDecay(e) {
|
|
46
|
-
return e === void 0 ? u : (u = e, m);
|
|
47
|
-
},
|
|
48
|
-
tick(e = 1) {
|
|
49
|
-
for (let t = 0; t < e; t++) p();
|
|
50
|
-
return m;
|
|
51
|
-
},
|
|
52
|
-
isSettled() {
|
|
53
|
-
return o < s && l === 0;
|
|
54
|
-
}
|
|
55
|
-
};
|
|
56
|
-
return m;
|
|
57
|
-
}
|
|
58
|
-
//#endregion
|
|
59
|
-
export { r as createSimulation };
|
|
60
|
-
|
|
61
|
-
//# sourceMappingURL=createSimulation.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"createSimulation.js","names":["createSimulation","nodes","opts","forces","alpha","alphaMin","DEFAULT_ALPHA_MIN","alphaDecay","DEFAULT_ALPHA_DECAY","alphaTarget","velocityDecay","DEFAULT_VELOCITY_DECAY","random","prime","i","n","f","step","friction","core","next","old","value","iterations"],"sources":["../../../src/features/simulation/createSimulation.ts"],"sourcesContent":["/**\n * The integrator, with no clock attached.\n *\n * Velocity-Verlet over a pluggable force list, contract-compatible with\n * d3-force so d3's own bundled forces drop in untranslated. Nothing here\n * advances time: `tick()` is the only thing that moves a node, and the caller\n * decides how often to call it. `useSimulation` calls it once a frame; a\n * layout pass calls it a few hundred times in one go and reads the result.\n *\n * Splitting it out is what lets a *pure* function run a relaxation — a React\n * hook cannot, and the alternative was a second integrator drifting away from\n * this one.\n */\nimport {\n DEFAULT_ALPHA_DECAY,\n DEFAULT_ALPHA_MIN,\n DEFAULT_VELOCITY_DECAY,\n type SimulationCore,\n type SimulationForce,\n type SimulationNode,\n type SimulationOptions,\n} from './types';\n\n/**\n * A d3-force-compatible simulation with no clock: nothing moves until `tick()`.\n * Nodes are mutated in place, and primed with `index`, `vx` and `vy` on creation.\n */\nexport function createSimulation<TNode extends SimulationNode>(\n opts: SimulationOptions<TNode>,\n): SimulationCore<TNode> {\n let nodes = opts.nodes;\n let forces = opts.forces ?? [];\n let alpha = opts.alpha ?? 1;\n let alphaMin = opts.alphaMin ?? DEFAULT_ALPHA_MIN;\n let alphaDecay = opts.alphaDecay ?? DEFAULT_ALPHA_DECAY;\n let alphaTarget = opts.alphaTarget ?? 0;\n let velocityDecay = opts.velocityDecay ?? DEFAULT_VELOCITY_DECAY;\n const random = opts.random ?? Math.random;\n\n /** `index` is what `forceLink` and friends address nodes by, and a d3 force\n * does `n.vx += …` without checking, so both must exist before the first\n * tick or the first tick produces NaN. */\n function prime(list: TNode[]): void {\n list.forEach((n, i) => {\n n.index = i;\n if (n.vx == null) n.vx = 0;\n if (n.vy == null) n.vy = 0;\n });\n }\n\n prime(nodes);\n for (const f of forces) f.initialize?.(nodes, random);\n\n function step(): void {\n alpha += (alphaTarget - alpha) * alphaDecay;\n for (const f of forces) f(alpha);\n\n const friction = 1 - velocityDecay;\n for (const n of nodes) {\n if (n.fx == null) {\n n.vx = (n.vx ?? 0) * friction;\n // A non-finite velocity — force overflow, or two nodes exactly\n // coincident — would reach the renderer as geometry and cost\n // pathological tessellation work without throwing anywhere.\n if (!Number.isFinite(n.vx)) n.vx = 0;\n n.x += n.vx;\n if (!Number.isFinite(n.x)) n.x = 0;\n } else {\n n.x = n.fx;\n n.vx = 0;\n }\n if (n.fy == null) {\n n.vy = (n.vy ?? 0) * friction;\n if (!Number.isFinite(n.vy)) n.vy = 0;\n n.y += n.vy;\n if (!Number.isFinite(n.y)) n.y = 0;\n } else {\n n.y = n.fy;\n n.vy = 0;\n }\n }\n }\n\n /* eslint-disable @typescript-eslint/no-explicit-any */\n const core: any = {\n get nodes() {\n return nodes;\n },\n setNodes(next: TNode[]) {\n nodes = next;\n prime(nodes);\n for (const f of forces) f.initialize?.(nodes, random);\n return core;\n },\n setForces(next: SimulationForce<TNode>[]) {\n const old = forces;\n forces = next;\n for (const f of next) {\n if (!old.includes(f)) f.initialize?.(nodes, random);\n }\n return core;\n },\n alpha(value?: number) {\n if (value === undefined) return alpha;\n alpha = value;\n return core;\n },\n alphaTarget(value?: number) {\n if (value === undefined) return alphaTarget;\n alphaTarget = value;\n return core;\n },\n alphaDecay(value?: number) {\n if (value === undefined) return alphaDecay;\n alphaDecay = value;\n return core;\n },\n alphaMin(value?: number) {\n if (value === undefined) return alphaMin;\n alphaMin = value;\n return core;\n },\n velocityDecay(value?: number) {\n if (value === undefined) return velocityDecay;\n velocityDecay = value;\n return core;\n },\n tick(iterations: number = 1) {\n for (let i = 0; i < iterations; i++) step();\n return core;\n },\n isSettled() {\n return alpha < alphaMin && alphaTarget === 0;\n },\n };\n /* eslint-enable @typescript-eslint/no-explicit-any */\n return core as SimulationCore<TNode>;\n}\n"],"mappings":";;AA2BA,SAAgBA,EACd,GACuB;CACvB,IAAIC,IAAQC,EAAK,OACbC,IAASD,EAAK,UAAU,CAAC,GACzBE,IAAQF,EAAK,SAAS,GACtBG,IAAWH,EAAK,YAAYI,GAC5BC,IAAaL,EAAK,cAAcM,GAChCC,IAAcP,EAAK,eAAe,GAClCQ,IAAgBR,EAAK,iBAAiBS,GACpCC,IAASV,EAAK,UAAU,KAAK;CAKnC,SAASW,EAAM,GAAqB;EAClC,EAAK,SAAS,GAAG,MAAM;GAGrB,AAFA,EAAE,QAAQC,GACV,AAAkBC,EAAE,OAAK,GACzB,AAAkBA,EAAE,OAAK;EAC3B,CAAC;CACH;CAEA,EAAMd,CAAK;CACX,KAAK,IAAMe,KAAKb,GAAQ,EAAE,aAAaF,GAAOW,CAAM;CAEpD,SAASK,IAAa;EACpB,MAAUR,IAAcL,KAASG;EACjC,KAAK,IAAMS,KAAKb,GAAQ,EAAEC,CAAK;EAE/B,IAAMc,IAAW,IAAIR;EACrB,KAAK,IAAMK,KAAKd,GAad,AAZIc,EAAE,MAAM,QACV,EAAE,MAAMA,EAAE,MAAM,KAAKG,GAIhB,OAAO,SAASH,EAAE,EAAE,MAAG,EAAE,KAAK,IACnC,EAAE,KAAKA,EAAE,IACJ,OAAO,SAASA,EAAE,CAAC,MAAG,EAAE,IAAI,OAEjC,EAAE,IAAIA,EAAE,IACR,EAAE,KAAK,IAELA,EAAE,MAAM,QACV,EAAE,MAAMA,EAAE,MAAM,KAAKG,GAChB,OAAO,SAASH,EAAE,EAAE,MAAG,EAAE,KAAK,IACnC,EAAE,KAAKA,EAAE,IACJ,OAAO,SAASA,EAAE,CAAC,MAAG,EAAE,IAAI,OAEjC,EAAE,IAAIA,EAAE,IACR,EAAE,KAAK;CAGb;CAGA,IAAMI,IAAY;EAChB,IAAI,QAAQ;GACV,OAAOlB;EACT;EACA,SAAS,GAAe;GAEtB,AADA,IAAQmB,GACRP,EAAMZ,CAAK;GACX,KAAK,IAAMe,KAAKb,GAAQ,EAAE,aAAaF,GAAOW,CAAM;GACpD,OAAOO;EACT;EACA,UAAU,GAAgC;GACxC,IAAME,IAAMlB;GACZ,IAASiB;GACT,KAAK,IAAMJ,KAAKI,GACd,AAAKC,EAAI,SAASL,CAAC,KAAGA,EAAE,aAAaf,GAAOW,CAAM;GAEpD,OAAOO;EACT;EACA,MAAM,GAAgB;GAGpB,OAFIG,MAAU,KAAA,IAAkBlB,KAChC,IAAQkB,GACDH;EACT;EACA,YAAY,GAAgB;GAG1B,OAFIG,MAAU,KAAA,IAAkBb,KAChC,IAAca,GACPH;EACT;EACA,WAAW,GAAgB;GAGzB,OAFIG,MAAU,KAAA,IAAkBf,KAChC,IAAae,GACNH;EACT;EACA,SAAS,GAAgB;GAGvB,OAFIG,MAAU,KAAA,IAAkBjB,KAChC,IAAWiB,GACJH;EACT;EACA,cAAc,GAAgB;GAG5B,OAFIG,MAAU,KAAA,IAAkBZ,KAChC,IAAgBY,GACTH;EACT;EACA,KAAK,IAAqB,GAAG;GAC3B,KAAK,IAAIL,IAAI,GAAGA,IAAIS,GAAY,KAAK,EAAK;GAC1C,OAAOJ;EACT;EACA,YAAY;GACV,OAAOf,IAAQC,KAAYI,MAAgB;EAC7C;CACF;CAEA,OAAOU;AACT"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"types.js","names":["DEFAULT_ALPHA_DECAY","DEFAULT_ALPHA_MIN","DEFAULT_VELOCITY_DECAY"],"sources":["../../../src/features/simulation/types.ts"],"sourcesContent":["/**\n * Minimal node interface for the simulation primitive. Matches d3-force's\n * node shape exactly so d3-force's bundled forces work without translation.\n *\n * Consumers extend this with arbitrary additional fields (id, label, etc.).\n */\nexport interface SimulationNode {\n x: number;\n y: number;\n vx?: number;\n vy?: number;\n /** Pin x to this value when non-null. The integrator skips x/vx for the node. */\n fx?: number | null;\n fy?: number | null;\n /** Array index, written by `initialize`. Some forces (e.g. forceLink) rely on it. */\n index?: number;\n}\n\n/**\n * Force protocol — contract-compatible with d3-force. A force is a function\n * called once per tick with the current alpha; it mutates `vx`/`vy` on nodes.\n * Optional `initialize` lets the force compute setup (link indices, etc.).\n */\nexport interface SimulationForce<TNode extends SimulationNode = SimulationNode> {\n (alpha: number): void;\n initialize?(nodes: TNode[], random?: () => number): void;\n}\n\n/** Options for `useSimulation`: everything {@link SimulationOptions} carries,\n * plus the loop's own callbacks and clock. */\nexport interface UseSimulationOptions<TNode extends SimulationNode>\n extends SimulationOptions<TNode> {\n /** Fired after each integration step. */\n onTick?: (nodes: TNode[]) => void;\n /** Fired once when the sim settles (alpha < alphaMin && alphaTarget === 0). */\n onEnd?: () => void;\n\n // Test injection (mirrors useAnimator):\n /** Optional rAF injection. Defaults to window.requestAnimationFrame. */\n requestFrame?: (cb: (t: number) => void) => number;\n cancelFrame?: (handle: number) => void;\n}\n\n/**\n * A force simulation over a set of nodes, with no clock of its own.\n *\n * Each tick applies every force and then integrates velocities, scaled by\n * `alpha` — a temperature that decays toward `alphaTarget` so the layout\n * settles instead of jittering forever. Raise `alphaTarget` to reheat it,\n * which is what a drag does.\n *\n * Nodes are mutated in place; the simulation holds the array, not a copy.\n *\n * Nothing here advances time. {@link Simulation} adds the frame loop; a caller\n * that wants the whole relaxation at once — a layout pass, a pre-warm, a test\n * — drives {@link SimulationCore.tick} itself.\n */\nexport interface SimulationCore<TNode extends SimulationNode> {\n readonly nodes: TNode[];\n\n setNodes(nodes: TNode[]): this;\n setForces(forces: SimulationForce<TNode>[]): this;\n\n alpha(): number;\n alpha(value: number): this;\n alphaTarget(): number;\n alphaTarget(value: number): this;\n alphaDecay(): number;\n alphaDecay(value: number): this;\n alphaMin(): number;\n alphaMin(value: number): this;\n velocityDecay(): number;\n velocityDecay(value: number): this;\n\n /**\n * Run the tick body synchronously `iterations` times. Does NOT fire\n * onTick or onEnd (matches d3-force). Used for offscreen pre-warm and tests.\n */\n tick(iterations?: number): this;\n\n isSettled(): boolean;\n}\n\n/** A {@link SimulationCore} running on a frame loop. */\nexport interface Simulation<TNode extends SimulationNode> extends SimulationCore<TNode> {\n /** Resume the RAF loop. If alpha < alphaMin, reset alpha to 1. */\n restart(): this;\n /** Cancel the RAF loop. Does not change alpha. */\n stop(): this;\n}\n\n/** What {@link SimulationCore} needs: the nodes, the forces acting on them,\n * and the cooling schedule. {@link UseSimulationOptions} adds the loop's. */\nexport interface SimulationOptions<TNode extends SimulationNode> {\n /** Mutable array of nodes. Kit + forces mutate vx/vy/x/y in place. */\n nodes: TNode[];\n /** Forces applied per tick. Each may implement `initialize` for setup. */\n forces?: SimulationForce<TNode>[];\n\n /** Initial alpha. Default 1. */\n alpha?: number;\n /** Settle threshold. When alpha drops below and alphaTarget is 0, onEnd fires. Default 0.001. */\n alphaMin?: number;\n /** Per-tick decay rate toward alphaTarget. Default 1 - 0.001^(1/300) ≈ 0.0228. */\n alphaDecay?: number;\n /** Target alpha. Set above alphaMin to keep sim warm (e.g. during drag). Default 0. */\n alphaTarget?: number;\n /** Friction multiplier on velocity per tick: vx *= (1 - velocityDecay). Default 0.4. */\n velocityDecay?: number;\n /** Handed to each force's `initialize`. Default `Math.random`; pass a seeded\n * source to make a run reproducible. */\n random?: () => number;\n}\n\n/** Default alpha decay: such that alpha drops from 1 to alphaMin (0.001) in 300 ticks. */\nexport const DEFAULT_ALPHA_DECAY = 1 - Math.pow(0.001, 1 / 300);\n/** Alpha below which a cooling simulation is considered settled. */\nexport const DEFAULT_ALPHA_MIN = 0.001;\n/** Fraction of velocity shed each tick — friction. Higher settles sooner and\n * overshoots less. */\nexport const DEFAULT_VELOCITY_DECAY = 0.4;\n"],"mappings":";AAmHA,IAAaA,IAAsB,IAAa,SAAO,IAAI,MAE9CC,IAAoB,MAGpBC,IAAyB"}
|
|
@@ -1,74 +0,0 @@
|
|
|
1
|
-
import { createSimulation as e } from "./createSimulation.js";
|
|
2
|
-
import { useVisibleRaf as t } from "../../scheduling/useVisibleRaf.js";
|
|
3
|
-
import { useLayoutEffect as n, useMemo as r, useRef as i } from "react";
|
|
4
|
-
import { useLatest as a } from "@weasel-js/react";
|
|
5
|
-
//#region src/features/simulation/useSimulation.ts
|
|
6
|
-
function o(o) {
|
|
7
|
-
let s = a(o), c = i(null);
|
|
8
|
-
c.current ??= e(o);
|
|
9
|
-
let l = c.current, u = i(!1), d = i(!0), f = t(() => {
|
|
10
|
-
m();
|
|
11
|
-
}, {
|
|
12
|
-
requestFrame: o.requestFrame,
|
|
13
|
-
cancelFrame: o.cancelFrame
|
|
14
|
-
}), p = () => {
|
|
15
|
-
f.cancel();
|
|
16
|
-
}, m = () => {
|
|
17
|
-
if (d.current) {
|
|
18
|
-
if (l.tick(), s.current.onTick?.(l.nodes), l.alpha() < l.alphaMin()) {
|
|
19
|
-
p(), u.current || (u.current = !0, s.current.onEnd?.());
|
|
20
|
-
return;
|
|
21
|
-
}
|
|
22
|
-
f.request();
|
|
23
|
-
}
|
|
24
|
-
}, h = () => {
|
|
25
|
-
d.current && f.request();
|
|
26
|
-
};
|
|
27
|
-
return n(() => (d.current = !0, f.request(), () => {
|
|
28
|
-
d.current = !1, f.cancel();
|
|
29
|
-
}), [f]), r(() => {
|
|
30
|
-
let e = {
|
|
31
|
-
get nodes() {
|
|
32
|
-
return l.nodes;
|
|
33
|
-
},
|
|
34
|
-
setNodes(t) {
|
|
35
|
-
return l.setNodes(t), e;
|
|
36
|
-
},
|
|
37
|
-
setForces(t) {
|
|
38
|
-
return l.setForces(t), e;
|
|
39
|
-
},
|
|
40
|
-
alpha(t) {
|
|
41
|
-
return t === void 0 ? l.alpha() : (l.alpha(t), t >= l.alphaMin() && (u.current = !1), e);
|
|
42
|
-
},
|
|
43
|
-
alphaTarget(t) {
|
|
44
|
-
return t === void 0 ? l.alphaTarget() : (l.alphaTarget(t), t > 0 && (u.current = !1), e);
|
|
45
|
-
},
|
|
46
|
-
alphaDecay(t) {
|
|
47
|
-
return t === void 0 ? l.alphaDecay() : (l.alphaDecay(t), e);
|
|
48
|
-
},
|
|
49
|
-
alphaMin(t) {
|
|
50
|
-
return t === void 0 ? l.alphaMin() : (l.alphaMin(t), e);
|
|
51
|
-
},
|
|
52
|
-
velocityDecay(t) {
|
|
53
|
-
return t === void 0 ? l.velocityDecay() : (l.velocityDecay(t), e);
|
|
54
|
-
},
|
|
55
|
-
restart() {
|
|
56
|
-
return l.alpha() < l.alphaMin() && l.alpha(1), u.current = !1, h(), e;
|
|
57
|
-
},
|
|
58
|
-
stop() {
|
|
59
|
-
return p(), e;
|
|
60
|
-
},
|
|
61
|
-
tick(t = 1) {
|
|
62
|
-
return l.tick(t), e;
|
|
63
|
-
},
|
|
64
|
-
isSettled() {
|
|
65
|
-
return l.isSettled();
|
|
66
|
-
}
|
|
67
|
-
};
|
|
68
|
-
return e;
|
|
69
|
-
}, []);
|
|
70
|
-
}
|
|
71
|
-
//#endregion
|
|
72
|
-
export { o as useSimulation };
|
|
73
|
-
|
|
74
|
-
//# sourceMappingURL=useSimulation.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"useSimulation.js","names":["useSimulation","optsRef","useLatest","opts","coreRef","useRef","createSimulation","core","endedRef","mountedRef","frameLoop","useVisibleRaf","stopRaf","rafTick","startRaf","useLayoutEffect","useMemo","h","newNodes","newForces","value","iterations"],"sources":["../../../src/features/simulation/useSimulation.ts"],"sourcesContent":["import { useLayoutEffect, useMemo, useRef } from 'react';\nimport { useLatest } from '@weasel-js/react';\nimport { useVisibleRaf } from '../../scheduling/useVisibleRaf';\nimport { createSimulation } from './createSimulation';\nimport {\n type Simulation,\n type SimulationCore,\n type SimulationForce,\n type SimulationNode,\n type UseSimulationOptions,\n} from './types';\n\n/**\n * Continuous N-body simulation primitive: `createSimulation`'s integrator on a\n * frame loop.\n *\n * The kit is adapter-agnostic — `onTick(nodes)` fires after each integration\n * step and the consumer decides how (and whether) to write through to scene\n * state. Per-tick history bypass and settle-commit semantics are consumer\n * concerns; the kit doesn't have an opinion.\n */\nexport function useSimulation<TNode extends SimulationNode>(\n opts: UseSimulationOptions<TNode>,\n): Simulation<TNode> {\n const optsRef = useLatest(opts);\n\n const coreRef = useRef<SimulationCore<TNode> | null>(null);\n coreRef.current ??= createSimulation(opts);\n const core = coreRef.current;\n\n /** Whether onEnd has fired since the last energization (restart / alpha set / target raise). */\n const endedRef = useRef(false);\n const mountedRef = useRef(true);\n\n // The loop runs behind the visibility gate: a settling simulation stops\n // integrating on a page nobody is looking at, and picks up where it left off.\n // Its step is fixed rather than time-based, so there is no clock to rebase.\n // The gate defaults an absent clock to `requestAnimationFrame`, so an\n // injected one passes straight through rather than being defaulted twice.\n const frameLoop = useVisibleRaf(\n () => { rafTick(); },\n {\n requestFrame: opts.requestFrame,\n cancelFrame: opts.cancelFrame,\n },\n );\n\n const stopRaf = (): void => { frameLoop.cancel(); };\n\n const rafTick = (): void => {\n if (!mountedRef.current) return;\n\n core.tick();\n optsRef.current.onTick?.(core.nodes);\n\n if (core.alpha() < core.alphaMin()) {\n stopRaf();\n if (!endedRef.current) {\n endedRef.current = true;\n optsRef.current.onEnd?.();\n }\n return;\n }\n\n frameLoop.request();\n };\n\n const startRaf = (): void => {\n if (!mountedRef.current) return;\n frameLoop.request();\n };\n\n // Starts on every mount, StrictMode's simulated remount included, and in a\n // layout effect so a host's own layout effects can already `stop()` it.\n // `createSimulation` has already primed the nodes.\n useLayoutEffect(() => {\n mountedRef.current = true;\n frameLoop.request();\n return () => {\n mountedRef.current = false;\n frameLoop.cancel();\n };\n }, [frameLoop]);\n\n // Stable handle. All methods read through the core, so a fixed identity is safe.\n const handle = useMemo<Simulation<TNode>>(() => {\n /* eslint-disable @typescript-eslint/no-explicit-any */\n const h: any = {\n get nodes() {\n return core.nodes;\n },\n setNodes(newNodes: TNode[]) {\n core.setNodes(newNodes);\n return h;\n },\n setForces(newForces: SimulationForce<TNode>[]) {\n core.setForces(newForces);\n return h;\n },\n alpha(value?: number) {\n if (value === undefined) return core.alpha();\n core.alpha(value);\n if (value >= core.alphaMin()) endedRef.current = false;\n return h;\n },\n alphaTarget(value?: number) {\n if (value === undefined) return core.alphaTarget();\n core.alphaTarget(value);\n if (value > 0) endedRef.current = false;\n return h;\n },\n alphaDecay(value?: number) {\n if (value === undefined) return core.alphaDecay();\n core.alphaDecay(value);\n return h;\n },\n alphaMin(value?: number) {\n if (value === undefined) return core.alphaMin();\n core.alphaMin(value);\n return h;\n },\n velocityDecay(value?: number) {\n if (value === undefined) return core.velocityDecay();\n core.velocityDecay(value);\n return h;\n },\n restart() {\n if (core.alpha() < core.alphaMin()) core.alpha(1);\n endedRef.current = false;\n startRaf();\n return h;\n },\n stop() {\n stopRaf();\n return h;\n },\n tick(iterations: number = 1) {\n core.tick(iterations);\n return h;\n },\n isSettled() {\n return core.isSettled();\n },\n };\n return h as Simulation<TNode>;\n /* eslint-enable @typescript-eslint/no-explicit-any */\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, []);\n\n return handle;\n}\n"],"mappings":";;;;;AAqBA,SAAgBA,EACd,GACmB;CACnB,IAAMC,IAAUC,EAAUC,CAAI,GAExBC,IAAUC,EAAqC,IAAI;CACzD,EAAQ,YAAYC,EAAiBH,CAAI;CACzC,IAAMI,IAAOH,EAAQ,SAGfI,IAAWH,EAAO,EAAK,GACvBI,IAAaJ,EAAO,EAAI,GAOxBK,IAAYC,QACV;EAAE,EAAQ;CAAG,GACnB;EACE,cAAcR,EAAK;EACnB,aAAaA,EAAK;CACpB,CACF,GAEMS,UAAsB;EAAE,EAAU,OAAO;CAAG,GAE5CC,UAAsB;EAC1B,IAAKJ,EAAW,SAKhB;OAHAF,EAAK,KAAK,GACVN,EAAQ,QAAQ,SAASM,EAAK,KAAK,GAE/BA,EAAK,MAAM,IAAIA,EAAK,SAAS,GAAG;IAElC,AADAK,EAAQ,GACHJ,EAAS,YACZ,EAAS,UAAU,IACnBP,EAAQ,QAAQ,QAAQ;IAE1B;GACF;GAEA,EAAU,QAAQ;EAFlB;CAGF,GAEMa,UAAuB;EAC3B,AAAKL,EAAW,WAChBC,EAAU,QAAQ;CACpB;CA+EA,OA1EAK,SACE,EAAW,UAAU,IACrBL,EAAU,QAAQ,SACL;EAEX,AADA,EAAW,UAAU,IACrBA,EAAU,OAAO;CACnB,IACC,CAACA,CAAS,CAAC,GAGCM,QAAiC;EAE9C,IAAMC,IAAS;GACb,IAAI,QAAQ;IACV,OAAOV,EAAK;GACd;GACA,SAAS,GAAmB;IAE1B,OADAA,EAAK,SAASW,CAAQ,GACfD;GACT;GACA,UAAU,GAAqC;IAE7C,OADAV,EAAK,UAAUY,CAAS,GACjBF;GACT;GACA,MAAM,GAAgB;IAIpB,OAHIG,MAAU,KAAA,IAAkBb,EAAK,MAAM,KAC3CA,EAAK,MAAMa,CAAK,GACZA,KAASb,EAAK,SAAS,MAAG,EAAS,UAAU,KAC1CU;GACT;GACA,YAAY,GAAgB;IAI1B,OAHIG,MAAU,KAAA,IAAkBb,EAAK,YAAY,KACjDA,EAAK,YAAYa,CAAK,GAClBA,IAAQ,MAAG,EAAS,UAAU,KAC3BH;GACT;GACA,WAAW,GAAgB;IAGzB,OAFIG,MAAU,KAAA,IAAkBb,EAAK,WAAW,KAChDA,EAAK,WAAWa,CAAK,GACdH;GACT;GACA,SAAS,GAAgB;IAGvB,OAFIG,MAAU,KAAA,IAAkBb,EAAK,SAAS,KAC9CA,EAAK,SAASa,CAAK,GACZH;GACT;GACA,cAAc,GAAgB;IAG5B,OAFIG,MAAU,KAAA,IAAkBb,EAAK,cAAc,KACnDA,EAAK,cAAca,CAAK,GACjBH;GACT;GACA,UAAU;IAIR,OAHIV,EAAK,MAAM,IAAIA,EAAK,SAAS,KAAGA,EAAK,MAAM,CAAC,GAChD,EAAS,UAAU,IACnBO,EAAS,GACFG;GACT;GACA,OAAO;IAEL,OADAL,EAAQ,GACDK;GACT;GACA,KAAK,IAAqB,GAAG;IAE3B,OADAV,EAAK,KAAKc,CAAU,GACbJ;GACT;GACA,YAAY;IACV,OAAOV,EAAK,UAAU;GACxB;EACF;EACA,OAAOU;CAGT,GAAG,CAAC,CAEG;AACT"}
|