@weasel-js/core 1.7.0 → 1.7.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 +764 -0
- package/README.md +7 -8
- package/dist/WeaselProvider.js +15 -0
- package/dist/WeaselProvider.js.map +1 -0
- package/dist/affordances/composeAffordanceLayer.js +224 -0
- package/dist/affordances/composeAffordanceLayer.js.map +1 -0
- package/dist/affordances/cornerResize.js +69 -0
- package/dist/affordances/cornerResize.js.map +1 -0
- package/dist/affordances/hitAffordanceRegions.js +138 -0
- package/dist/affordances/hitAffordanceRegions.js.map +1 -0
- package/dist/affordances/pathAnchors.js +66 -0
- package/dist/affordances/pathAnchors.js.map +1 -0
- package/dist/affordances/rotationHandle.js +103 -0
- package/dist/affordances/rotationHandle.js.map +1 -0
- package/dist/animation/behaviors/momentum.js +118 -0
- package/dist/animation/behaviors/momentum.js.map +1 -0
- package/dist/animation/colorHelpers.js +135 -0
- package/dist/animation/colorHelpers.js.map +1 -0
- package/dist/animation/colorRegistry.js +37 -0
- package/dist/animation/colorRegistry.js.map +1 -0
- package/dist/animation/index.js +20 -0
- package/dist/animation/loop.js +62 -0
- package/dist/animation/loop.js.map +1 -0
- package/dist/animation/observe.js +23 -0
- package/dist/animation/observe.js.map +1 -0
- package/dist/animation/poseHelpers.js +50 -0
- package/dist/animation/poseHelpers.js.map +1 -0
- package/dist/animation/reflow.js +121 -0
- package/dist/animation/reflow.js.map +1 -0
- package/dist/animation/rig/bindRig.js +74 -0
- package/dist/animation/rig/bindRig.js.map +1 -0
- package/dist/animation/rig/blendPoses.js +43 -0
- package/dist/animation/rig/blendPoses.js.map +1 -0
- package/dist/animation/rig/mirrorPose.js +19 -0
- package/dist/animation/rig/mirrorPose.js.map +1 -0
- package/dist/animation/rig/resolveSkeleton.js +33 -0
- package/dist/animation/rig/resolveSkeleton.js.map +1 -0
- package/dist/animation/rig/solveIk.js +103 -0
- package/dist/animation/rig/solveIk.js.map +1 -0
- package/dist/animation/rig/types.js +12 -0
- package/dist/animation/rig/types.js.map +1 -0
- package/dist/animation/rig/useRig.js +23 -0
- package/dist/animation/rig/useRig.js.map +1 -0
- package/dist/animation/slew.js +27 -0
- package/dist/animation/slew.js.map +1 -0
- package/dist/animation/stagger.js +138 -0
- package/dist/animation/stagger.js.map +1 -0
- package/dist/animation/timeline/booking.js +106 -0
- package/dist/animation/timeline/booking.js.map +1 -0
- package/dist/animation/timeline/createTimeline.js +116 -0
- package/dist/animation/timeline/createTimeline.js.map +1 -0
- package/dist/animation/timeline/sampleTrack.js +29 -0
- package/dist/animation/timeline/sampleTrack.js.map +1 -0
- package/dist/animation/useAnimator.js +329 -0
- package/dist/animation/useAnimator.js.map +1 -0
- package/dist/animation/wrappers/animateLifecycle.js +40 -0
- package/dist/animation/wrappers/animateLifecycle.js.map +1 -0
- package/dist/animation/wrappers/animateOnSetPose.js +44 -0
- package/dist/animation/wrappers/animateOnSetPose.js.map +1 -0
- package/dist/{autoPoseDescriptor-_XOyF7t4.d.ts → autoPoseDescriptor-BT_vp9FO.d.ts} +2 -2
- package/dist/{builtins-DLn2lCr_.d.ts → builtins-BSUfH8nU.d.ts} +738 -513
- package/dist/canvas/Canvas.js +608 -0
- package/dist/canvas/Canvas.js.map +1 -0
- package/dist/canvas/CanvasView.js +255 -0
- package/dist/canvas/CanvasView.js.map +1 -0
- package/dist/canvas/CursorCoordsHud.js +75 -0
- package/dist/canvas/CursorCoordsHud.js.map +1 -0
- package/dist/canvas/DrawCanvas.js +67 -0
- package/dist/canvas/DrawCanvas.js.map +1 -0
- package/dist/canvas/MinimapCanvas.js +139 -0
- package/dist/canvas/MinimapCanvas.js.map +1 -0
- package/dist/canvas/ModalityHud.js +66 -0
- package/dist/canvas/ModalityHud.js.map +1 -0
- package/dist/canvas/NodeShape.js +391 -0
- package/dist/canvas/NodeShape.js.map +1 -0
- package/dist/canvas/PickHud.js +93 -0
- package/dist/canvas/PickHud.js.map +1 -0
- package/dist/canvas/SceneCanvas/ActionsProviderIfRoot.js +10 -0
- package/dist/canvas/SceneCanvas/ActionsProviderIfRoot.js.map +1 -0
- package/dist/canvas/SceneCanvas/DepRegistryProviderIfRoot.js +10 -0
- package/dist/canvas/SceneCanvas/DepRegistryProviderIfRoot.js.map +1 -0
- package/dist/canvas/SceneCanvas/PointerProviderIfRoot.js +51 -0
- package/dist/canvas/SceneCanvas/PointerProviderIfRoot.js.map +1 -0
- package/dist/canvas/SceneCanvas/contributionFrameHooks.js +42 -0
- package/dist/canvas/SceneCanvas/contributionFrameHooks.js.map +1 -0
- package/dist/canvas/SceneCanvas/defaultNodeProperties.js +549 -0
- package/dist/canvas/SceneCanvas/defaultNodeProperties.js.map +1 -0
- package/dist/canvas/SceneCanvas/defaultNodeRouting.js +26 -0
- package/dist/canvas/SceneCanvas/defaultNodeRouting.js.map +1 -0
- package/dist/canvas/SceneCanvas/dispatcherGestureBounds.js +69 -0
- package/dist/canvas/SceneCanvas/dispatcherGestureBounds.js.map +1 -0
- package/dist/canvas/SceneCanvas/features.js +97 -0
- package/dist/canvas/SceneCanvas/features.js.map +1 -0
- package/dist/canvas/SceneCanvas/poseGeometry.js +46 -0
- package/dist/canvas/SceneCanvas/poseGeometry.js.map +1 -0
- package/dist/canvas/SceneCanvas/useActionsPropResolver.js +48 -0
- package/dist/canvas/SceneCanvas/useActionsPropResolver.js.map +1 -0
- package/dist/canvas/SceneCanvas/useBuiltinShapeTools.js +70 -0
- package/dist/canvas/SceneCanvas/useBuiltinShapeTools.js.map +1 -0
- package/dist/canvas/SceneCanvas/useContributionRoles.js +75 -0
- package/dist/canvas/SceneCanvas/useContributionRoles.js.map +1 -0
- package/dist/canvas/SceneCanvas/useDispatcherOverlayLayer.js +172 -0
- package/dist/canvas/SceneCanvas/useDispatcherOverlayLayer.js.map +1 -0
- package/dist/canvas/SceneCanvas/usePreviewGhostLayer.js +69 -0
- package/dist/canvas/SceneCanvas/usePreviewGhostLayer.js.map +1 -0
- package/dist/canvas/SceneCanvas/useSceneSelectTool.js +127 -0
- package/dist/canvas/SceneCanvas/useSceneSelectTool.js.map +1 -0
- package/dist/canvas/SceneCanvas/useViewportActions.js +30 -0
- package/dist/canvas/SceneCanvas/useViewportActions.js.map +1 -0
- package/dist/canvas/SceneCanvas.js +992 -0
- package/dist/canvas/SceneCanvas.js.map +1 -0
- package/dist/canvas/SceneViewCanvas.js +54 -0
- package/dist/canvas/SceneViewCanvas.js.map +1 -0
- package/dist/canvas/accentColor.js +9 -0
- package/dist/canvas/accentColor.js.map +1 -0
- package/dist/canvas/affordanceAt.js +63 -0
- package/dist/canvas/affordanceAt.js.map +1 -0
- package/dist/canvas/buildSceneTree.js +65 -0
- package/dist/canvas/buildSceneTree.js.map +1 -0
- package/dist/canvas/canvasRenderer.js +89 -0
- package/dist/canvas/canvasRenderer.js.map +1 -0
- package/dist/canvas/colorOverrides.js +16 -0
- package/dist/canvas/colorOverrides.js.map +1 -0
- package/dist/canvas/defaultDrawOne.js +43 -0
- package/dist/canvas/defaultDrawOne.js.map +1 -0
- package/dist/canvas/deps/areaSelect.js +19 -0
- package/dist/canvas/deps/areaSelect.js.map +1 -0
- package/dist/canvas/deps/debug.js +9 -0
- package/dist/canvas/deps/debug.js.map +1 -0
- package/dist/canvas/deps/dispatcher.js +11 -0
- package/dist/canvas/deps/dispatcher.js.map +1 -0
- package/dist/canvas/deps/editAnchors.js +101 -0
- package/dist/canvas/deps/editAnchors.js.map +1 -0
- package/dist/canvas/deps/geometryProjection.js +11 -0
- package/dist/canvas/deps/geometryProjection.js.map +1 -0
- package/dist/canvas/deps/hitTestArea.js +51 -0
- package/dist/canvas/deps/hitTestArea.js.map +1 -0
- package/dist/canvas/deps/ingestion.js +31 -0
- package/dist/canvas/deps/ingestion.js.map +1 -0
- package/dist/canvas/deps/insert.js +116 -0
- package/dist/canvas/deps/insert.js.map +1 -0
- package/dist/canvas/deps/lassoSelect.js +20 -0
- package/dist/canvas/deps/lassoSelect.js.map +1 -0
- package/dist/canvas/deps/layout.js +34 -0
- package/dist/canvas/deps/layout.js.map +1 -0
- package/dist/canvas/deps/nodeAtPoint.js +19 -0
- package/dist/canvas/deps/nodeAtPoint.js.map +1 -0
- package/dist/canvas/deps/poseComposition.js +11 -0
- package/dist/canvas/deps/poseComposition.js.map +1 -0
- package/dist/canvas/deps/poseDescriptor.js +12 -0
- package/dist/canvas/deps/poseDescriptor.js.map +1 -0
- package/dist/canvas/deps/resizePolicy.js +35 -0
- package/dist/canvas/deps/resizePolicy.js.map +1 -0
- package/dist/canvas/deps/slice.js +99 -0
- package/dist/canvas/deps/slice.js.map +1 -0
- package/dist/canvas/deps/snap.js +11 -0
- package/dist/canvas/deps/snap.js.map +1 -0
- package/dist/canvas/deps/textEdit.js +21 -0
- package/dist/canvas/deps/textEdit.js.map +1 -0
- package/dist/canvas/deps/view.js +43 -0
- package/dist/canvas/deps/view.js.map +1 -0
- package/dist/canvas/derivedPath.js +47 -0
- package/dist/canvas/derivedPath.js.map +1 -0
- package/dist/canvas/drawEnvelope.js +22 -0
- package/dist/canvas/drawEnvelope.js.map +1 -0
- package/dist/canvas/getNodeAtPoint.js +18 -0
- package/dist/canvas/getNodeAtPoint.js.map +1 -0
- package/dist/canvas/hostAnchor.js +29 -0
- package/dist/canvas/hostAnchor.js.map +1 -0
- package/dist/canvas/hud.module.js +18 -0
- package/dist/canvas/hud.module.js.map +1 -0
- package/dist/canvas/insertPreviewExtent.js +103 -0
- package/dist/canvas/insertPreviewExtent.js.map +1 -0
- package/dist/canvas/kitRequirements.js +177 -0
- package/dist/canvas/kitRequirements.js.map +1 -0
- package/dist/canvas/layerOrder.js +66 -0
- package/dist/canvas/layerOrder.js.map +1 -0
- package/dist/canvas/layerSlots.js +14 -0
- package/dist/canvas/layerSlots.js.map +1 -0
- package/dist/canvas/minimapMath.js +80 -0
- package/dist/canvas/minimapMath.js.map +1 -0
- package/dist/canvas/mountedCanvases.js +20 -0
- package/dist/canvas/mountedCanvases.js.map +1 -0
- package/dist/canvas/overlayRoleStrokes.js +17 -0
- package/dist/canvas/overlayRoleStrokes.js.map +1 -0
- package/dist/canvas/paintCull.js +20 -0
- package/dist/canvas/paintCull.js.map +1 -0
- package/dist/canvas/pickWalk.js +158 -0
- package/dist/canvas/pickWalk.js.map +1 -0
- package/dist/canvas/planeClips.js +30 -0
- package/dist/canvas/planeClips.js.map +1 -0
- package/dist/canvas/poseRotation.js +35 -0
- package/dist/canvas/poseRotation.js.map +1 -0
- package/dist/canvas/rasterToPng.js +21 -0
- package/dist/canvas/rasterToPng.js.map +1 -0
- package/dist/canvas/renderDebugSnapshot.js +32 -0
- package/dist/canvas/renderDebugSnapshot.js.map +1 -0
- package/dist/canvas/renderNeeds.js +25 -0
- package/dist/canvas/renderNeeds.js.map +1 -0
- package/dist/canvas/renderSceneToPixels.js +143 -0
- package/dist/canvas/renderSceneToPixels.js.map +1 -0
- package/dist/canvas/sceneAdapter.js +270 -0
- package/dist/canvas/sceneAdapter.js.map +1 -0
- package/dist/canvas/sceneLayerPaint.js +37 -0
- package/dist/canvas/sceneLayerPaint.js.map +1 -0
- package/dist/canvas/sceneSlotWiring.js +20 -0
- package/dist/canvas/sceneSlotWiring.js.map +1 -0
- package/dist/canvas/sceneViewRender.js +72 -0
- package/dist/canvas/sceneViewRender.js.map +1 -0
- package/dist/canvas/slopsDebugLayer.js +61 -0
- package/dist/canvas/slopsDebugLayer.js.map +1 -0
- package/dist/canvas/surfaceContribution.js +15 -0
- package/dist/canvas/surfaceContribution.js.map +1 -0
- package/dist/canvas/toolPreview.js +39 -0
- package/dist/canvas/toolPreview.js.map +1 -0
- package/dist/canvas/useCanvasRenderer.js +11 -0
- package/dist/canvas/useCanvasRenderer.js.map +1 -0
- package/dist/canvas/useFrameLoop.js +60 -0
- package/dist/canvas/useFrameLoop.js.map +1 -0
- package/dist/canvas/useHostAnchor.js +71 -0
- package/dist/canvas/useHostAnchor.js.map +1 -0
- package/dist/canvas/useLateContentRedraw.js +21 -0
- package/dist/canvas/useLateContentRedraw.js.map +1 -0
- package/dist/canvas/useRedrawOn.js +21 -0
- package/dist/canvas/useRedrawOn.js.map +1 -0
- package/dist/canvas/useViewHelpers.js +120 -0
- package/dist/canvas/useViewHelpers.js.map +1 -0
- package/dist/canvas/viewInputs.js +17 -0
- package/dist/canvas/viewInputs.js.map +1 -0
- package/dist/canvas/viewRegistry.js +61 -0
- package/dist/canvas/viewRegistry.js.map +1 -0
- package/dist/canvas/wrapNodeOutput.js +14 -0
- package/dist/canvas/wrapNodeOutput.js.map +1 -0
- package/dist/clipboard.d.ts +10 -5
- package/dist/clipboard.js +3 -5
- package/dist/clone.d.ts +3 -3
- package/dist/clone.js +2 -5
- package/dist/core/adapters/arrayAdapter.js +85 -0
- package/dist/core/adapters/arrayAdapter.js.map +1 -0
- package/dist/core/adapters/useArrayAdapter.js +13 -0
- package/dist/core/adapters/useArrayAdapter.js.map +1 -0
- package/dist/core/applyOps.js +12 -0
- package/dist/core/applyOps.js.map +1 -0
- package/dist/core/device/index.js +4 -0
- package/dist/core/device/targets.js +17 -0
- package/dist/core/device/targets.js.map +1 -0
- package/dist/core/device/useDeviceProfile.js +75 -0
- package/dist/core/device/useDeviceProfile.js.map +1 -0
- package/dist/core/fillInPoseFrame.js +102 -0
- package/dist/core/fillInPoseFrame.js.map +1 -0
- package/dist/core/geometry/poseDescriptor.js +98 -0
- package/dist/core/geometry/poseDescriptor.js.map +1 -0
- package/dist/core/geometry/poseRotation.js +58 -0
- package/dist/core/geometry/poseRotation.js.map +1 -0
- package/dist/core/geometry/regionHit.js +102 -0
- package/dist/core/geometry/regionHit.js.map +1 -0
- package/dist/core/geometry/unionBounds.js +60 -0
- package/dist/core/geometry/unionBounds.js.map +1 -0
- package/dist/core/gradient.js +136 -0
- package/dist/core/gradient.js.map +1 -0
- package/dist/core/isPlainObject.js +11 -0
- package/dist/core/isPlainObject.js.map +1 -0
- package/dist/core/layers/render.js +150 -0
- package/dist/core/layers/render.js.map +1 -0
- package/dist/core/markerInset.js +24 -0
- package/dist/core/markerInset.js.map +1 -0
- package/dist/core/mixed.js +6 -0
- package/dist/core/mixed.js.map +1 -0
- package/dist/core/ops/arrange.js +31 -0
- package/dist/core/ops/arrange.js.map +1 -0
- package/dist/core/ops/create.js +32 -0
- package/dist/core/ops/create.js.map +1 -0
- package/dist/core/ops/createHistory.js +20 -0
- package/dist/core/ops/createHistory.js.map +1 -0
- package/dist/core/ops/delete.js +89 -0
- package/dist/core/ops/delete.js.map +1 -0
- package/dist/core/ops/registry.js +17 -0
- package/dist/core/ops/registry.js.map +1 -0
- package/dist/core/ops/reorder/algorithms.js +55 -0
- package/dist/core/ops/reorder/algorithms.js.map +1 -0
- package/dist/core/ops/reorder/index.js +140 -0
- package/dist/core/ops/reorder/index.js.map +1 -0
- package/dist/core/ops/reparent.js +52 -0
- package/dist/core/ops/reparent.js.map +1 -0
- package/dist/core/ops/select.js +34 -0
- package/dist/core/ops/select.js.map +1 -0
- package/dist/core/ops/setData.js +34 -0
- package/dist/core/ops/setData.js.map +1 -0
- package/dist/core/ops/setLayer.js +34 -0
- package/dist/core/ops/setLayer.js.map +1 -0
- package/dist/core/ops/setLayout.js +31 -0
- package/dist/core/ops/setLayout.js.map +1 -0
- package/dist/core/ops/setPath.js +57 -0
- package/dist/core/ops/setPath.js.map +1 -0
- package/dist/core/ops/setText.js +34 -0
- package/dist/core/ops/setText.js.map +1 -0
- package/dist/core/ops/slot.js +37 -0
- package/dist/core/ops/slot.js.map +1 -0
- package/dist/core/ops/transform.js +42 -0
- package/dist/core/ops/transform.js.map +1 -0
- package/dist/core/paintKinds.js +156 -0
- package/dist/core/paintKinds.js.map +1 -0
- package/dist/core/scene/NodeProperties.js +20 -0
- package/dist/core/scene/NodeProperties.js.map +1 -0
- package/dist/core/scene/NodeRouting.js +24 -0
- package/dist/core/scene/NodeRouting.js.map +1 -0
- package/dist/core/scene/arrivals.js +12 -0
- package/dist/core/scene/arrivals.js.map +1 -0
- package/dist/core/scene/composeFrame.js +29 -0
- package/dist/core/scene/composeFrame.js.map +1 -0
- package/dist/core/scene/depMemo.js +18 -0
- package/dist/core/scene/depMemo.js.map +1 -0
- package/dist/core/scene/dependents.js +66 -0
- package/dist/core/scene/dependents.js.map +1 -0
- package/dist/core/scene/derivedPath.js +31 -0
- package/dist/core/scene/derivedPath.js.map +1 -0
- package/dist/core/scene/effectivePose.js +78 -0
- package/dist/core/scene/effectivePose.js.map +1 -0
- package/dist/core/scene/kitRegistry.js +33 -0
- package/dist/core/scene/kitRegistry.js.map +1 -0
- package/dist/core/scene/layoutPass.js +96 -0
- package/dist/core/scene/layoutPass.js.map +1 -0
- package/dist/core/scene/nodeFnFields.js +83 -0
- package/dist/core/scene/nodeFnFields.js.map +1 -0
- package/dist/core/scene/nodeMemo.js +28 -0
- package/dist/core/scene/nodeMemo.js.map +1 -0
- package/dist/core/scene/poseFeed.js +87 -0
- package/dist/core/scene/poseFeed.js.map +1 -0
- package/dist/core/scene/poseOverrides.js +52 -0
- package/dist/core/scene/poseOverrides.js.map +1 -0
- package/dist/core/scene/poseSnapshot.js +54 -0
- package/dist/core/scene/poseSnapshot.js.map +1 -0
- package/dist/core/scene/scene.js +1271 -0
- package/dist/core/scene/scene.js.map +1 -0
- package/dist/core/scene/types.js +6 -0
- package/dist/core/scene/types.js.map +1 -0
- package/dist/core/scene/useScene.js +32 -0
- package/dist/core/scene/useScene.js.map +1 -0
- package/dist/core/selection/chromeState.js +31 -0
- package/dist/core/selection/chromeState.js.map +1 -0
- package/dist/core/selection/selectionTarget.js +6 -0
- package/dist/core/selection/selectionTarget.js.map +1 -0
- package/dist/core/selection/useSelection.js +71 -0
- package/dist/core/selection/useSelection.js.map +1 -0
- package/dist/core/shapeKinds.js +54 -0
- package/dist/core/shapeKinds.js.map +1 -0
- package/dist/core/strokeMarkerShapes.js +139 -0
- package/dist/core/strokeMarkerShapes.js.map +1 -0
- package/dist/core/strokeMarkers.js +28 -0
- package/dist/core/strokeMarkers.js.map +1 -0
- package/dist/core/stylus/stylus.js +39 -0
- package/dist/core/stylus/stylus.js.map +1 -0
- package/dist/core/stylus/usePointerStylus.js +51 -0
- package/dist/core/stylus/usePointerStylus.js.map +1 -0
- package/dist/core/usePaintKinds.js +17 -0
- package/dist/core/usePaintKinds.js.map +1 -0
- package/dist/core/viewport/clampView.js +24 -0
- package/dist/core/viewport/clampView.js.map +1 -0
- package/dist/core/viewport/clientToWorld.js +8 -0
- package/dist/core/viewport/clientToWorld.js.map +1 -0
- package/dist/core/viewport/createVelocityTracker.js +39 -0
- package/dist/core/viewport/createVelocityTracker.js.map +1 -0
- package/dist/core/viewport/fitToBounds.js +18 -0
- package/dist/core/viewport/fitToBounds.js.map +1 -0
- package/dist/core/viewport/fitViewToBounds.js +36 -0
- package/dist/core/viewport/fitViewToBounds.js.map +1 -0
- package/dist/core/viewport/interpolateView.js +34 -0
- package/dist/core/viewport/interpolateView.js.map +1 -0
- package/dist/core/viewport/meanScale.js +8 -0
- package/dist/core/viewport/meanScale.js.map +1 -0
- package/dist/core/viewport/parallax.js +111 -0
- package/dist/core/viewport/parallax.js.map +1 -0
- package/dist/core/viewport/pxExtent.js +42 -0
- package/dist/core/viewport/pxExtent.js.map +1 -0
- package/dist/core/viewport/sceneNodeClientRect.js +18 -0
- package/dist/core/viewport/sceneNodeClientRect.js.map +1 -0
- package/dist/core/viewport/screenSlop.js +27 -0
- package/dist/core/viewport/screenSlop.js.map +1 -0
- package/dist/core/viewport/useAutoCenter.js +32 -0
- package/dist/core/viewport/useAutoCenter.js.map +1 -0
- package/dist/core/viewport/useCanvasSize.js +29 -0
- package/dist/core/viewport/useCanvasSize.js.map +1 -0
- package/dist/core/viewport/useDecayLoop.js +63 -0
- package/dist/core/viewport/useDecayLoop.js.map +1 -0
- package/dist/core/viewport/useVelocityTracker.js +10 -0
- package/dist/core/viewport/useVelocityTracker.js.map +1 -0
- package/dist/core/viewport/useViewAnimation.js +63 -0
- package/dist/core/viewport/useViewAnimation.js.map +1 -0
- package/dist/core/viewport/view.js +37 -0
- package/dist/core/viewport/view.js.map +1 -0
- package/dist/core/viewport/viewTransform.js +11 -0
- package/dist/core/viewport/viewTransform.js.map +1 -0
- package/dist/core/viewport/viewportWorldRect.js +13 -0
- package/dist/core/viewport/viewportWorldRect.js.map +1 -0
- package/dist/core/viewport/wheelHandler.js +30 -0
- package/dist/core/viewport/wheelHandler.js.map +1 -0
- package/dist/core/viewport/zoomAt.js +22 -0
- package/dist/core/viewport/zoomAt.js.map +1 -0
- package/dist/core/viewport/zoomBounds.js +20 -0
- package/dist/core/viewport/zoomBounds.js.map +1 -0
- package/dist/{pointSnapToGrid-Dp2IxLGb.d.ts → cornerHandles-CDcZOV8h.d.ts} +3 -13
- package/dist/debug/createDebugOverlayLayer.js +358 -0
- package/dist/debug/createDebugOverlayLayer.js.map +1 -0
- package/dist/debug/createDebugSink.js +83 -0
- package/dist/debug/createDebugSink.js.map +1 -0
- package/dist/debug/defaultTheme.js +31 -0
- package/dist/debug/defaultTheme.js.map +1 -0
- package/dist/debug/flag.js +41 -0
- package/dist/debug/flag.js.map +1 -0
- package/dist/debug/frameStats.js +16 -0
- package/dist/debug/frameStats.js.map +1 -0
- package/dist/debug/parseDebugFlags.js +32 -0
- package/dist/debug/parseDebugFlags.js.map +1 -0
- package/dist/features/chrome-caps/buildChromeCtx.js +16 -0
- package/dist/features/chrome-caps/buildChromeCtx.js.map +1 -0
- package/dist/features/chrome-caps/conditions.js +36 -0
- package/dist/features/chrome-caps/conditions.js.map +1 -0
- package/dist/features/chrome-caps/defaults.js +26 -0
- package/dist/features/chrome-caps/defaults.js.map +1 -0
- package/dist/features/chrome-caps/index.js +7 -0
- package/dist/features/chrome-caps/resolve.js +23 -0
- package/dist/features/chrome-caps/resolve.js.map +1 -0
- package/dist/features/chrome-caps/useHoverTracking.js +27 -0
- package/dist/features/chrome-caps/useHoverTracking.js.map +1 -0
- package/dist/features/cursor/paintedCursorLayer.js +60 -0
- package/dist/features/cursor/paintedCursorLayer.js.map +1 -0
- package/dist/features/focus/gateLayer.js +14 -0
- package/dist/features/focus/gateLayer.js.map +1 -0
- package/dist/features/focus/useCanvasFocus.js +29 -0
- package/dist/features/focus/useCanvasFocus.js.map +1 -0
- package/dist/features/groups/children.js +23 -0
- package/dist/features/groups/children.js.map +1 -0
- package/dist/features/groups/composePose.js +67 -0
- package/dist/features/groups/composePose.js.map +1 -0
- package/dist/features/groups/nestedHit.js +40 -0
- package/dist/features/groups/nestedHit.js.map +1 -0
- package/dist/features/groups/unionOfChildren.js +15 -0
- package/dist/features/groups/unionOfChildren.js.map +1 -0
- package/dist/features/images/imageCache.js +94 -0
- package/dist/features/images/imageCache.js.map +1 -0
- package/dist/features/ingestion/contentHandlers.js +37 -0
- package/dist/features/ingestion/contentHandlers.js.map +1 -0
- package/dist/features/ingestion/imageHandler.js +45 -0
- package/dist/features/ingestion/imageHandler.js.map +1 -0
- package/dist/features/ingestion/index.js +8 -0
- package/dist/features/ingestion/openFilePicker.js +15 -0
- package/dist/features/ingestion/openFilePicker.js.map +1 -0
- package/dist/features/ingestion/registerKitHandlers.js +26 -0
- package/dist/features/ingestion/registerKitHandlers.js.map +1 -0
- package/dist/features/ingestion/svgHandler.js +58 -0
- package/dist/features/ingestion/svgHandler.js.map +1 -0
- package/dist/features/ingestion/weaselJsonHandler.js +39 -0
- package/dist/features/ingestion/weaselJsonHandler.js.map +1 -0
- package/dist/features/longPress/longPressFeedback.js +96 -0
- package/dist/features/longPress/longPressFeedback.js.map +1 -0
- package/dist/features/meshPaint/bake.js +79 -0
- package/dist/features/meshPaint/bake.js.map +1 -0
- package/dist/features/meshPaint/bakeCache.js +59 -0
- package/dist/features/meshPaint/bakeCache.js.map +1 -0
- package/dist/features/meshPaint/handles.js +86 -0
- package/dist/features/meshPaint/handles.js.map +1 -0
- package/dist/features/meshPaint/lazyKind.js +1298 -0
- package/dist/features/meshPaint/lazyKind.js.map +1 -0
- package/dist/features/meshPaint/meshPaint.js +236 -0
- package/dist/features/meshPaint/meshPaint.js.map +1 -0
- package/dist/features/meshPaint/meshShader.js +6 -0
- package/dist/features/meshPaint/meshShader.js.map +1 -0
- package/dist/features/meshPaint/register.js +7 -0
- package/dist/features/meshPaint/register.js.map +1 -0
- package/dist/features/meshPaint/surface.js +110 -0
- package/dist/features/meshPaint/surface.js.map +1 -0
- package/dist/features/minimap/actions.js +53 -0
- package/dist/features/minimap/actions.js.map +1 -0
- package/dist/features/minimap/createMinimapContribution.js +96 -0
- package/dist/features/minimap/createMinimapContribution.js.map +1 -0
- package/dist/features/minimap/layers.js +103 -0
- package/dist/features/minimap/layers.js.map +1 -0
- package/dist/features/modes/modeLayers.js +113 -0
- package/dist/features/modes/modeLayers.js.map +1 -0
- package/dist/features/overlays/useNodeOverlayFrame.js +103 -0
- package/dist/features/overlays/useNodeOverlayFrame.js.map +1 -0
- package/dist/features/parallax/createParallaxLayer.js +26 -0
- package/dist/features/parallax/createParallaxLayer.js.map +1 -0
- package/dist/features/parallax/createParallaxPlane.js +26 -0
- package/dist/features/parallax/createParallaxPlane.js.map +1 -0
- package/dist/features/paths/anchorEdits.js +156 -0
- package/dist/features/paths/anchorEdits.js.map +1 -0
- package/dist/features/paths/anchors.js +154 -0
- package/dist/features/paths/anchors.js.map +1 -0
- package/dist/features/paths/booleans.js +2 -0
- package/dist/features/paths/index.js +15 -0
- package/dist/features/paths/markerCommands.js +116 -0
- package/dist/features/paths/markerCommands.js.map +1 -0
- package/dist/features/paths/markerSites.js +59 -0
- package/dist/features/paths/markerSites.js.map +1 -0
- package/dist/features/paths/markers.js +95 -0
- package/dist/features/paths/markers.js.map +1 -0
- package/dist/features/paths/nearestAnchor.js +36 -0
- package/dist/features/paths/nearestAnchor.js.map +1 -0
- package/dist/features/paths/originProjection.js +16 -0
- package/dist/features/paths/originProjection.js.map +1 -0
- package/dist/features/paths/pathEditingOverlayLayer.js +137 -0
- package/dist/features/paths/pathEditingOverlayLayer.js.map +1 -0
- package/dist/features/paths/pathInWorld.js +41 -0
- package/dist/features/paths/pathInWorld.js.map +1 -0
- package/dist/features/paths/pathLayer.js +44 -0
- package/dist/features/paths/pathLayer.js.map +1 -0
- package/dist/features/paths/penPreviewLayer.js +220 -0
- package/dist/features/paths/penPreviewLayer.js.map +1 -0
- package/dist/features/paths/poseDescriptor.js +44 -0
- package/dist/features/paths/poseDescriptor.js.map +1 -0
- package/dist/features/paths/tessellate/stroke.js +230 -0
- package/dist/features/paths/tessellate/stroke.js.map +1 -0
- package/dist/features/patterns/index.js +23 -0
- package/dist/features/patterns/index.js.map +1 -0
- package/dist/features/patterns/patterns-builtin.js +38 -0
- package/dist/features/patterns/patterns-builtin.js.map +1 -0
- package/dist/features/patterns/resolveSpec.js +57 -0
- package/dist/features/patterns/resolveSpec.js.map +1 -0
- package/dist/features/patterns/tileGeometry.js +158 -0
- package/dist/features/patterns/tileGeometry.js.map +1 -0
- package/dist/features/pointer/PointerContext.js +45 -0
- package/dist/features/pointer/PointerContext.js.map +1 -0
- package/dist/features/poseRun/usePoseRun.js +70 -0
- package/dist/features/poseRun/usePoseRun.js.map +1 -0
- package/dist/features/selection/SelectionContext.js +46 -0
- package/dist/features/selection/SelectionContext.js.map +1 -0
- package/dist/features/selection/overlay.js +442 -0
- package/dist/features/selection/overlay.js.map +1 -0
- package/dist/features/simulation/createSimulation.js +61 -0
- package/dist/features/simulation/createSimulation.js.map +1 -0
- package/dist/features/simulation/types.js +6 -0
- package/dist/features/simulation/types.js.map +1 -0
- package/dist/features/simulation/useSimulation.js +74 -0
- package/dist/features/simulation/useSimulation.js.map +1 -0
- package/dist/features/text/domRuns.js +258 -0
- package/dist/features/text/domRuns.js.map +1 -0
- package/dist/features/text/fitTextPose.js +38 -0
- package/dist/features/text/fitTextPose.js.map +1 -0
- package/dist/features/text/hitTest.js +45 -0
- package/dist/features/text/hitTest.js.map +1 -0
- package/dist/features/text/renderLabel.js +14 -0
- package/dist/features/text/renderLabel.js.map +1 -0
- package/dist/features/text/runs/effectiveRangeStyle.js +66 -0
- package/dist/features/text/runs/effectiveRangeStyle.js.map +1 -0
- package/dist/features/text/runs/flagRange.js +53 -0
- package/dist/features/text/runs/flagRange.js.map +1 -0
- package/dist/features/text/runs/rangeStyle.js +135 -0
- package/dist/features/text/runs/rangeStyle.js.map +1 -0
- package/dist/features/text/textCommand.js +59 -0
- package/dist/features/text/textCommand.js.map +1 -0
- package/dist/features/text/textLayer.js +35 -0
- package/dist/features/text/textLayer.js.map +1 -0
- package/dist/features/text/textToPath.js +181 -0
- package/dist/features/text/textToPath.js.map +1 -0
- package/dist/features/text/useSceneTextEdit.js +138 -0
- package/dist/features/text/useSceneTextEdit.js.map +1 -0
- package/dist/features/text/useTextEdit.js +465 -0
- package/dist/features/text/useTextEdit.js.map +1 -0
- package/dist/features/tiling/createTiledLayer.js +63 -0
- package/dist/features/tiling/createTiledLayer.js.map +1 -0
- package/dist/features/tiling/tiledProject.js +14 -0
- package/dist/features/tiling/tiledProject.js.map +1 -0
- package/dist/features/viewports/viewResolver.js +59 -0
- package/dist/features/viewports/viewResolver.js.map +1 -0
- package/dist/features/viewports/viewportLayer.js +58 -0
- package/dist/features/viewports/viewportLayer.js.map +1 -0
- package/dist/icons/ArrowIcon.js +23 -0
- package/dist/icons/ArrowIcon.js.map +1 -0
- package/dist/icons/EllipseIcon.js +21 -0
- package/dist/icons/EllipseIcon.js.map +1 -0
- package/dist/icons/EyedropperIcon.js +49 -0
- package/dist/icons/EyedropperIcon.js.map +1 -0
- package/dist/icons/HandIcon.js +59 -0
- package/dist/icons/HandIcon.js.map +1 -0
- package/dist/icons/ImageIcon.js +34 -0
- package/dist/icons/ImageIcon.js.map +1 -0
- package/dist/icons/LassoIcon.js +22 -0
- package/dist/icons/LassoIcon.js.map +1 -0
- package/dist/icons/LineIcon.js +22 -0
- package/dist/icons/LineIcon.js.map +1 -0
- package/dist/icons/PenIcon.js +36 -0
- package/dist/icons/PenIcon.js.map +1 -0
- package/dist/icons/PencilIcon.js +25 -0
- package/dist/icons/PencilIcon.js.map +1 -0
- package/dist/icons/PolygonIcon.js +19 -0
- package/dist/icons/PolygonIcon.js.map +1 -0
- package/dist/icons/RectIcon.js +37 -0
- package/dist/icons/RectIcon.js.map +1 -0
- package/dist/icons/SelectIcon.js +20 -0
- package/dist/icons/SelectIcon.js.map +1 -0
- package/dist/icons/StarIcon.js +19 -0
- package/dist/icons/StarIcon.js.map +1 -0
- package/dist/icons/TextIcon.js +19 -0
- package/dist/icons/TextIcon.js.map +1 -0
- package/dist/icons/UnknownIcon.js +33 -0
- package/dist/icons/UnknownIcon.js.map +1 -0
- package/dist/icons/_base.js +12 -0
- package/dist/icons/_base.js.map +1 -0
- package/dist/index.css +2 -62
- package/dist/index.d.ts +1955 -1891
- package/dist/index.js +312 -13
- package/dist/input/keyState.js +76 -0
- package/dist/input/keyState.js.map +1 -0
- package/dist/input/useKeyState.js +22 -0
- package/dist/input/useKeyState.js.map +1 -0
- package/dist/interactions/actions/actionShortcuts.js +32 -0
- package/dist/interactions/actions/actionShortcuts.js.map +1 -0
- package/dist/interactions/actions/align/align.js +81 -0
- package/dist/interactions/actions/align/align.js.map +1 -0
- package/dist/interactions/actions/booleans/booleans.js +120 -0
- package/dist/interactions/actions/booleans/booleans.js.map +1 -0
- package/dist/interactions/actions/booleans/useBooleans.js +20 -0
- package/dist/interactions/actions/booleans/useBooleans.js.map +1 -0
- package/dist/interactions/actions/booleans/useBooleansAdapter.js +9 -0
- package/dist/interactions/actions/booleans/useBooleansAdapter.js.map +1 -0
- package/dist/interactions/actions/clipboard/clipboardOps.js +94 -0
- package/dist/interactions/actions/clipboard/clipboardOps.js.map +1 -0
- package/dist/interactions/actions/clipboard/materializePaste.js +25 -0
- package/dist/interactions/actions/clipboard/materializePaste.js.map +1 -0
- package/dist/interactions/actions/clipboard/wireFormat.js +43 -0
- package/dist/interactions/actions/clipboard/wireFormat.js.map +1 -0
- package/dist/interactions/actions/clone/behaviors/cloneByAltDrag.js +26 -0
- package/dist/interactions/actions/clone/behaviors/cloneByAltDrag.js.map +1 -0
- package/dist/interactions/actions/defaultCommitAdapter.js +42 -0
- package/dist/interactions/actions/defaultCommitAdapter.js.map +1 -0
- package/dist/interactions/actions/defaults/align.js +71 -0
- package/dist/interactions/actions/defaults/align.js.map +1 -0
- package/dist/interactions/actions/defaults/anchorEditing.js +235 -0
- package/dist/interactions/actions/defaults/anchorEditing.js.map +1 -0
- package/dist/interactions/actions/defaults/areaSelect.js +75 -0
- package/dist/interactions/actions/defaults/areaSelect.js.map +1 -0
- package/dist/interactions/actions/defaults/booleans.js +52 -0
- package/dist/interactions/actions/defaults/booleans.js.map +1 -0
- package/dist/interactions/actions/defaults/cancelGesture.js +24 -0
- package/dist/interactions/actions/defaults/cancelGesture.js.map +1 -0
- package/dist/interactions/actions/defaults/clearSelection.js +19 -0
- package/dist/interactions/actions/defaults/clearSelection.js.map +1 -0
- package/dist/interactions/actions/defaults/clipboard.js +78 -0
- package/dist/interactions/actions/defaults/clipboard.js.map +1 -0
- package/dist/interactions/actions/defaults/clone.js +96 -0
- package/dist/interactions/actions/defaults/clone.js.map +1 -0
- package/dist/interactions/actions/defaults/createOutlines.js +47 -0
- package/dist/interactions/actions/defaults/createOutlines.js.map +1 -0
- package/dist/interactions/actions/defaults/createPaintAction.js +85 -0
- package/dist/interactions/actions/defaults/createPaintAction.js.map +1 -0
- package/dist/interactions/actions/defaults/delete.js +61 -0
- package/dist/interactions/actions/defaults/delete.js.map +1 -0
- package/dist/interactions/actions/defaults/distribute.js +66 -0
- package/dist/interactions/actions/defaults/distribute.js.map +1 -0
- package/dist/interactions/actions/defaults/duplicate.js +83 -0
- package/dist/interactions/actions/defaults/duplicate.js.map +1 -0
- package/dist/interactions/actions/defaults/editAnchors.js +100 -0
- package/dist/interactions/actions/defaults/editAnchors.js.map +1 -0
- package/dist/interactions/actions/defaults/enterPathEdit.js +29 -0
- package/dist/interactions/actions/defaults/enterPathEdit.js.map +1 -0
- package/dist/interactions/actions/defaults/enterTextEdit.js +20 -0
- package/dist/interactions/actions/defaults/enterTextEdit.js.map +1 -0
- package/dist/interactions/actions/defaults/escape.js +26 -0
- package/dist/interactions/actions/defaults/escape.js.map +1 -0
- package/dist/interactions/actions/defaults/exitPathEdit.js +22 -0
- package/dist/interactions/actions/defaults/exitPathEdit.js.map +1 -0
- package/dist/interactions/actions/defaults/flip.js +119 -0
- package/dist/interactions/actions/defaults/flip.js.map +1 -0
- package/dist/interactions/actions/defaults/freshNodeId.js +10 -0
- package/dist/interactions/actions/defaults/freshNodeId.js.map +1 -0
- package/dist/interactions/actions/defaults/group.js +131 -0
- package/dist/interactions/actions/defaults/group.js.map +1 -0
- package/dist/interactions/actions/defaults/icons/actionGlyphIcons.js +40 -0
- package/dist/interactions/actions/defaults/icons/actionGlyphIcons.js.map +1 -0
- package/dist/interactions/actions/defaults/icons/actionGlyphs.js +10 -0
- package/dist/interactions/actions/defaults/icons/actionGlyphs.js.map +1 -0
- package/dist/interactions/actions/defaults/icons/alignIcons.js +173 -0
- package/dist/interactions/actions/defaults/icons/alignIcons.js.map +1 -0
- package/dist/interactions/actions/defaults/icons/booleanIcons.js +171 -0
- package/dist/interactions/actions/defaults/icons/booleanIcons.js.map +1 -0
- package/dist/interactions/actions/defaults/icons/distributeIcons.js +63 -0
- package/dist/interactions/actions/defaults/icons/distributeIcons.js.map +1 -0
- package/dist/interactions/actions/defaults/icons/editIcons.js +280 -0
- package/dist/interactions/actions/defaults/icons/editIcons.js.map +1 -0
- package/dist/interactions/actions/defaults/icons/outlineIcons.js +53 -0
- package/dist/interactions/actions/defaults/icons/outlineIcons.js.map +1 -0
- package/dist/interactions/actions/defaults/ingest.js +58 -0
- package/dist/interactions/actions/defaults/ingest.js.map +1 -0
- package/dist/interactions/actions/defaults/insert.js +288 -0
- package/dist/interactions/actions/defaults/insert.js.map +1 -0
- package/dist/interactions/actions/defaults/insertPathAnchor.js +50 -0
- package/dist/interactions/actions/defaults/insertPathAnchor.js.map +1 -0
- package/dist/interactions/actions/defaults/lassoSelect.js +156 -0
- package/dist/interactions/actions/defaults/lassoSelect.js.map +1 -0
- package/dist/interactions/actions/defaults/move.js +656 -0
- package/dist/interactions/actions/defaults/move.js.map +1 -0
- package/dist/interactions/actions/defaults/nudge.js +110 -0
- package/dist/interactions/actions/defaults/nudge.js.map +1 -0
- package/dist/interactions/actions/defaults/pinchZoom.js +63 -0
- package/dist/interactions/actions/defaults/pinchZoom.js.map +1 -0
- package/dist/interactions/actions/defaults/reorder.js +143 -0
- package/dist/interactions/actions/defaults/reorder.js.map +1 -0
- package/dist/interactions/actions/defaults/requiresSelection.js +10 -0
- package/dist/interactions/actions/defaults/requiresSelection.js.map +1 -0
- package/dist/interactions/actions/defaults/resize.js +332 -0
- package/dist/interactions/actions/defaults/resize.js.map +1 -0
- package/dist/interactions/actions/defaults/rotate.js +181 -0
- package/dist/interactions/actions/defaults/rotate.js.map +1 -0
- package/dist/interactions/actions/defaults/selectAll.js +27 -0
- package/dist/interactions/actions/defaults/selectAll.js.map +1 -0
- package/dist/interactions/actions/defaults/setFill.js +27 -0
- package/dist/interactions/actions/defaults/setFill.js.map +1 -0
- package/dist/interactions/actions/defaults/setFillOpacity.js +15 -0
- package/dist/interactions/actions/defaults/setFillOpacity.js.map +1 -0
- package/dist/interactions/actions/defaults/setStroke.js +36 -0
- package/dist/interactions/actions/defaults/setStroke.js.map +1 -0
- package/dist/interactions/actions/defaults/setStrokeOpacity.js +21 -0
- package/dist/interactions/actions/defaults/setStrokeOpacity.js.map +1 -0
- package/dist/interactions/actions/defaults/slice.js +39 -0
- package/dist/interactions/actions/defaults/slice.js.map +1 -0
- package/dist/interactions/actions/defaults/sliceOps.js +60 -0
- package/dist/interactions/actions/defaults/sliceOps.js.map +1 -0
- package/dist/interactions/actions/defaults/toolActivate.js +35 -0
- package/dist/interactions/actions/defaults/toolActivate.js.map +1 -0
- package/dist/interactions/actions/defaults/toolResetToDefault.js +26 -0
- package/dist/interactions/actions/defaults/toolResetToDefault.js.map +1 -0
- package/dist/interactions/actions/defaults/undoRedo.js +51 -0
- package/dist/interactions/actions/defaults/undoRedo.js.map +1 -0
- package/dist/interactions/actions/defaults/viewportDragPan.js +88 -0
- package/dist/interactions/actions/defaults/viewportDragPan.js.map +1 -0
- package/dist/interactions/actions/defaults/viewportWheelPan.js +57 -0
- package/dist/interactions/actions/defaults/viewportWheelPan.js.map +1 -0
- package/dist/interactions/actions/defaults/viewportZoom.js +143 -0
- package/dist/interactions/actions/defaults/viewportZoom.js.map +1 -0
- package/dist/interactions/actions/distribute/distribute.js +42 -0
- package/dist/interactions/actions/distribute/distribute.js.map +1 -0
- package/dist/interactions/actions/distribute/plan.js +29 -0
- package/dist/interactions/actions/distribute/plan.js.map +1 -0
- package/dist/interactions/actions/edit-anchors/geometry.js +61 -0
- package/dist/interactions/actions/edit-anchors/geometry.js.map +1 -0
- package/dist/interactions/actions/edit-anchors/handles.js +43 -0
- package/dist/interactions/actions/edit-anchors/handles.js.map +1 -0
- package/dist/interactions/actions/flip/helpers.js +35 -0
- package/dist/interactions/actions/flip/helpers.js.map +1 -0
- package/dist/interactions/actions/geometryProjection.js +18 -0
- package/dist/interactions/actions/geometryProjection.js.map +1 -0
- package/dist/interactions/actions/gestureLifecycle.js +44 -0
- package/dist/interactions/actions/gestureLifecycle.js.map +1 -0
- package/dist/interactions/actions/lasso-select/behaviors/selectFromLasso.js +39 -0
- package/dist/interactions/actions/lasso-select/behaviors/selectFromLasso.js.map +1 -0
- package/dist/interactions/actions/move/behaviors/snapBackOrDelete.js +36 -0
- package/dist/interactions/actions/move/behaviors/snapBackOrDelete.js.map +1 -0
- package/dist/interactions/actions/move/behaviors/snapToContainer.js +67 -0
- package/dist/interactions/actions/move/behaviors/snapToContainer.js.map +1 -0
- package/dist/interactions/actions/move/gestureAdapter.js +37 -0
- package/dist/interactions/actions/move/gestureAdapter.js.map +1 -0
- package/dist/interactions/actions/outlines/createOutlines.js +84 -0
- package/dist/interactions/actions/outlines/createOutlines.js.map +1 -0
- package/dist/interactions/actions/outlines/useCreateOutlinesAdapter.js +9 -0
- package/dist/interactions/actions/outlines/useCreateOutlinesAdapter.js.map +1 -0
- package/dist/interactions/actions/planeInput.js +168 -0
- package/dist/interactions/actions/planeInput.js.map +1 -0
- package/dist/interactions/actions/poseDescriptorDep.js +9 -0
- package/dist/interactions/actions/poseDescriptorDep.js.map +1 -0
- package/dist/interactions/actions/poseFrame.js +38 -0
- package/dist/interactions/actions/poseFrame.js.map +1 -0
- package/dist/interactions/actions/previewOverrides.js +25 -0
- package/dist/interactions/actions/previewOverrides.js.map +1 -0
- package/dist/interactions/actions/resize/autoPoseDescriptor.js +32 -0
- package/dist/interactions/actions/resize/autoPoseDescriptor.js.map +1 -0
- package/dist/interactions/actions/resize/behaviors/clampMinSize.js +18 -0
- package/dist/interactions/actions/resize/behaviors/clampMinSize.js.map +1 -0
- package/dist/interactions/actions/resize/behaviors/index.js +8 -0
- package/dist/interactions/actions/resize/behaviors/index.js.map +1 -0
- package/dist/interactions/actions/resize/behaviors/lockAspect.js +24 -0
- package/dist/interactions/actions/resize/behaviors/lockAspect.js.map +1 -0
- package/dist/interactions/actions/resize/cornerHandles.js +72 -0
- package/dist/interactions/actions/resize/cornerHandles.js.map +1 -0
- package/dist/interactions/actions/resolveOverlays.js +60 -0
- package/dist/interactions/actions/resolveOverlays.js.map +1 -0
- package/dist/interactions/actions/resolvePreviews.js +61 -0
- package/dist/interactions/actions/resolvePreviews.js.map +1 -0
- package/dist/interactions/actions/rotate/geometry.js +46 -0
- package/dist/interactions/actions/rotate/geometry.js.map +1 -0
- package/dist/interactions/actions/rotate/handle.js +27 -0
- package/dist/interactions/actions/rotate/handle.js.map +1 -0
- package/dist/interactions/actions/spatialReference.js +42 -0
- package/dist/interactions/actions/spatialReference.js.map +1 -0
- package/dist/interactions/actions/useStandardActions.js +142 -0
- package/dist/interactions/actions/useStandardActions.js.map +1 -0
- package/dist/interactions/gestures/dragGesture/dragGesture.js +111 -0
- package/dist/interactions/gestures/dragGesture/dragGesture.js.map +1 -0
- package/dist/interactions/gestures/dragRadial/dragRadial.js +117 -0
- package/dist/interactions/gestures/dragRadial/dragRadial.js.map +1 -0
- package/dist/interactions/gestures/dragRect/dragRect.js +164 -0
- package/dist/interactions/gestures/dragRect/dragRect.js.map +1 -0
- package/dist/interactions/gestures/handleDrag/handleDrag.js +46 -0
- package/dist/interactions/gestures/handleDrag/handleDrag.js.map +1 -0
- package/dist/interactions/gestures/pointerDrag/pointerDrag.js +118 -0
- package/dist/interactions/gestures/pointerDrag/pointerDrag.js.map +1 -0
- package/dist/interactions/gestures/shared/originProjection.js +42 -0
- package/dist/interactions/gestures/shared/originProjection.js.map +1 -0
- package/dist/interactions/gestures/shared/screenTolerance.js +21 -0
- package/dist/interactions/gestures/shared/screenTolerance.js.map +1 -0
- package/dist/interactions/gestures/shared/snap.js +24 -0
- package/dist/interactions/gestures/shared/snap.js.map +1 -0
- package/dist/interactions/gestures/thresholdDrag/thresholdDrag.js +30 -0
- package/dist/interactions/gestures/thresholdDrag/thresholdDrag.js.map +1 -0
- package/dist/layout/arrivals.js +36 -0
- package/dist/layout/arrivals.js.map +1 -0
- package/dist/{math-MCQcf_gc.d.ts → math-CUMxmZzn.d.ts} +8 -116
- package/dist/math.d.ts +4 -5
- package/dist/math.js +6 -4
- package/dist/mesh.d.ts +268 -0
- package/dist/mesh.js +7 -0
- package/dist/move.d.ts +7 -49
- package/dist/move.js +3 -142
- package/dist/originProjection-BSn4xiEy.d.ts +57 -0
- package/dist/patterns-builtin.js +3 -3
- package/dist/{poseDescriptor-rZa9W5hJ.d.ts → poseDescriptor-CjSXMf8X.d.ts} +3 -3
- package/dist/registerProgram-ateHDGjw.d.ts +193 -0
- package/dist/renderer/DrawCommand.js +6 -0
- package/dist/renderer/DrawCommand.js.map +1 -0
- package/dist/renderer/WeaselRenderer.js +328 -0
- package/dist/renderer/WeaselRenderer.js.map +1 -0
- package/dist/renderer/cache/GLImageCache.js +64 -0
- package/dist/renderer/cache/GLImageCache.js.map +1 -0
- package/dist/renderer/cache/GLMeshCache.js +102 -0
- package/dist/renderer/cache/GLMeshCache.js.map +1 -0
- package/dist/renderer/cache/GLTextureCache.js +51 -0
- package/dist/renderer/cache/GLTextureCache.js.map +1 -0
- package/dist/renderer/cache/GradientRampAtlas.js +82 -0
- package/dist/renderer/cache/GradientRampAtlas.js.map +1 -0
- package/dist/renderer/cache/cache.js +13 -0
- package/dist/renderer/cache/cache.js.map +1 -0
- package/dist/renderer/cache/markerCommandCache.js +59 -0
- package/dist/renderer/cache/markerCommandCache.js.map +1 -0
- package/dist/renderer/cache/outlineMeshCache.js +15 -0
- package/dist/renderer/cache/outlineMeshCache.js.map +1 -0
- package/dist/renderer/cache/outlineStrokeMeshCache.js +31 -0
- package/dist/renderer/cache/outlineStrokeMeshCache.js.map +1 -0
- package/dist/renderer/cache/strokeMeshCache.js +44 -0
- package/dist/renderer/cache/strokeMeshCache.js.map +1 -0
- package/dist/renderer/cullDrawCommands.js +89 -0
- package/dist/renderer/cullDrawCommands.js.map +1 -0
- package/dist/renderer/draw.js +1109 -0
- package/dist/renderer/draw.js.map +1 -0
- package/dist/renderer/drawBatch.js +168 -0
- package/dist/renderer/drawBatch.js.map +1 -0
- package/dist/renderer/effects/EffectTargets.js +45 -0
- package/dist/renderer/effects/EffectTargets.js.map +1 -0
- package/dist/renderer/effects/builtins.js +31 -0
- package/dist/renderer/effects/builtins.js.map +1 -0
- package/dist/renderer/effects/composite.js +9 -0
- package/dist/renderer/effects/composite.js.map +1 -0
- package/dist/renderer/effects/effectPrelude.js +10 -0
- package/dist/renderer/effects/effectPrelude.js.map +1 -0
- package/dist/renderer/effects/types.js +10 -0
- package/dist/renderer/effects/types.js.map +1 -0
- package/dist/renderer/index.js +19 -0
- package/dist/renderer/math/color.js +341 -0
- package/dist/renderer/math/color.js.map +1 -0
- package/dist/renderer/math/mat3.js +71 -0
- package/dist/renderer/math/mat3.js.map +1 -0
- package/dist/renderer/math/patternSpace.js +22 -0
- package/dist/renderer/math/patternSpace.js.map +1 -0
- package/dist/renderer/math/viewToMat3.js +19 -0
- package/dist/renderer/math/viewToMat3.js.map +1 -0
- package/dist/renderer/paintResources.js +18 -0
- package/dist/renderer/paintResources.js.map +1 -0
- package/dist/renderer/paintScratch.js +37 -0
- package/dist/renderer/paintScratch.js.map +1 -0
- package/dist/renderer/shaders/ShaderProgram.js +74 -0
- package/dist/renderer/shaders/ShaderProgram.js.map +1 -0
- package/dist/renderer/shaders/batchFill.js +118 -0
- package/dist/renderer/shaders/batchFill.js.map +1 -0
- package/dist/renderer/shaders/customPrelude.js +34 -0
- package/dist/renderer/shaders/customPrelude.js.map +1 -0
- package/dist/renderer/shaders/extractUniformNames.js +184 -0
- package/dist/renderer/shaders/extractUniformNames.js.map +1 -0
- package/dist/renderer/shaders/glyphPaint.js +61 -0
- package/dist/renderer/shaders/glyphPaint.js.map +1 -0
- package/dist/renderer/shaders/gradFill.js +30 -0
- package/dist/renderer/shaders/gradFill.js.map +1 -0
- package/dist/renderer/shaders/imageFill.js +14 -0
- package/dist/renderer/shaders/imageFill.js.map +1 -0
- package/dist/renderer/shaders/pathFill.js +13 -0
- package/dist/renderer/shaders/pathFill.js.map +1 -0
- package/dist/renderer/shaders/patternFill.js +24 -0
- package/dist/renderer/shaders/patternFill.js.map +1 -0
- package/dist/renderer/shaders/registerProgram.js +18 -0
- package/dist/renderer/shaders/registerProgram.js.map +1 -0
- package/dist/renderer/spriteSheet.js +14 -0
- package/dist/renderer/spriteSheet.js.map +1 -0
- package/dist/renderer/state/GroupState.js +77 -0
- package/dist/renderer/state/GroupState.js.map +1 -0
- package/dist/renderer/syntheticItalic.js +6 -0
- package/dist/renderer/syntheticItalic.js.map +1 -0
- package/dist/renderer/textures/registerTexture.js +14 -0
- package/dist/renderer/textures/registerTexture.js.map +1 -0
- package/dist/renderer.d.ts +11 -21
- package/dist/renderer.js +18 -13
- package/dist/resize.d.ts +10 -46
- package/dist/resize.js +7 -5
- package/dist/routing.js +2 -3
- package/dist/scheduling/useVisibleRaf.js +69 -0
- package/dist/scheduling/useVisibleRaf.js.map +1 -0
- package/dist/test-hook/createTestHook.js +39 -0
- package/dist/test-hook/createTestHook.js.map +1 -0
- package/dist/test-hook/install.js +12 -0
- package/dist/test-hook/install.js.map +1 -0
- package/dist/test-seams-fYf6m5pu.d.ts +356 -0
- package/dist/test-seams.d.ts +6 -0
- package/dist/test-seams.js +3 -0
- package/dist/tools/builtin/ellipse/useEllipseTool.js +33 -0
- package/dist/tools/builtin/ellipse/useEllipseTool.js.map +1 -0
- package/dist/tools/builtin/eyedropper/useEyedropperTool.js +55 -0
- package/dist/tools/builtin/eyedropper/useEyedropperTool.js.map +1 -0
- package/dist/tools/builtin/hand/dragPanContribution.js +17 -0
- package/dist/tools/builtin/hand/dragPanContribution.js.map +1 -0
- package/dist/tools/builtin/hand/useHandTool.js +31 -0
- package/dist/tools/builtin/hand/useHandTool.js.map +1 -0
- package/dist/tools/builtin/image/useImageTool.js +41 -0
- package/dist/tools/builtin/image/useImageTool.js.map +1 -0
- package/dist/tools/builtin/lasso/useLassoTool.js +42 -0
- package/dist/tools/builtin/lasso/useLassoTool.js.map +1 -0
- package/dist/tools/builtin/line/useLineTool.js +33 -0
- package/dist/tools/builtin/line/useLineTool.js.map +1 -0
- package/dist/tools/builtin/pen/usePenTool.js +414 -0
- package/dist/tools/builtin/pen/usePenTool.js.map +1 -0
- package/dist/tools/builtin/pencil/usePencilTool.js +36 -0
- package/dist/tools/builtin/pencil/usePencilTool.js.map +1 -0
- package/dist/tools/builtin/pickTopMostHit.js +45 -0
- package/dist/tools/builtin/pickTopMostHit.js.map +1 -0
- package/dist/tools/builtin/polygon/usePolygonTool.js +81 -0
- package/dist/tools/builtin/polygon/usePolygonTool.js.map +1 -0
- package/dist/tools/builtin/rect/useRectTool.js +32 -0
- package/dist/tools/builtin/rect/useRectTool.js.map +1 -0
- package/dist/tools/builtin/select/selectionContributions.js +109 -0
- package/dist/tools/builtin/select/selectionContributions.js.map +1 -0
- package/dist/tools/builtin/select/useSelectTool.js +162 -0
- package/dist/tools/builtin/select/useSelectTool.js.map +1 -0
- package/dist/tools/builtin/shared/insertToolOptions.js +8 -0
- package/dist/tools/builtin/shared/insertToolOptions.js.map +1 -0
- package/dist/tools/builtin/slice/useSliceTool.js +263 -0
- package/dist/tools/builtin/slice/useSliceTool.js.map +1 -0
- package/dist/tools/builtin/star/useStarTool.js +82 -0
- package/dist/tools/builtin/star/useStarTool.js.map +1 -0
- package/dist/tools/builtin/text/useTextTool.js +177 -0
- package/dist/tools/builtin/text/useTextTool.js.map +1 -0
- package/dist/tools/overlayBinding.js +8 -0
- package/dist/tools/overlayBinding.js.map +1 -0
- package/dist/tools/prefs.js +47 -0
- package/dist/tools/prefs.js.map +1 -0
- package/dist/tools/useKeybindings.js +66 -0
- package/dist/tools/useKeybindings.js.map +1 -0
- package/dist/{types-D-9QWBy5.d.ts → types-CA54-mAZ.d.ts} +181 -13
- package/dist/{types-qYpyTAiZ.d.ts → types-DSjd6W3n.d.ts} +32 -6
- package/dist/util/color.js +26 -0
- package/dist/util/color.js.map +1 -0
- package/dist/util/constrainTo45.js +17 -0
- package/dist/util/constrainTo45.js.map +1 -0
- package/dist/util/paint.js +72 -0
- package/dist/util/paint.js.map +1 -0
- package/dist/version.js +6 -0
- package/dist/version.js.map +1 -0
- package/package.json +29 -19
- package/dist/chunk-3TY6FHAF.js +0 -170
- package/dist/chunk-3TY6FHAF.js.map +0 -1
- package/dist/chunk-DGWNNKGD.js +0 -248
- package/dist/chunk-DGWNNKGD.js.map +0 -1
- package/dist/chunk-G4ZGQMY7.js +0 -33372
- package/dist/chunk-G4ZGQMY7.js.map +0 -1
- package/dist/chunk-L5YNZYEG.js +0 -648
- package/dist/chunk-L5YNZYEG.js.map +0 -1
- package/dist/chunk-LU4IJ52W.js +0 -111
- package/dist/chunk-LU4IJ52W.js.map +0 -1
- package/dist/chunk-M24CLARN.js +0 -28
- package/dist/chunk-M24CLARN.js.map +0 -1
- package/dist/chunk-NE27EOLP.js +0 -146
- package/dist/chunk-NE27EOLP.js.map +0 -1
- package/dist/chunk-PNNZSYRD.js +0 -318
- package/dist/chunk-PNNZSYRD.js.map +0 -1
- package/dist/chunk-UPZY4ART.js +0 -29
- package/dist/chunk-UPZY4ART.js.map +0 -1
- package/dist/chunk-WPNA6L5O.js +0 -250
- package/dist/chunk-WPNA6L5O.js.map +0 -1
- package/dist/chunk-XMAWPGTK.js +0 -128
- package/dist/chunk-XMAWPGTK.js.map +0 -1
- package/dist/clipboard.js.map +0 -1
- package/dist/clone.js.map +0 -1
- package/dist/grid-CY5UKlZh.d.ts +0 -98
- package/dist/index.css.map +0 -1
- package/dist/index.js.map +0 -1
- package/dist/insert.d.ts +0 -36
- package/dist/insert.js +0 -81
- package/dist/insert.js.map +0 -1
- package/dist/math.js.map +0 -1
- package/dist/move.js.map +0 -1
- package/dist/path-JEV2c5If.d.ts +0 -48
- package/dist/patterns-builtin.js.map +0 -1
- package/dist/renderer.css +0 -62
- package/dist/renderer.css.map +0 -1
- package/dist/renderer.js.map +0 -1
- package/dist/resize.js.map +0 -1
- package/dist/routing.js.map +0 -1
- package/dist/types-D2tTKEU0.d.ts +0 -18
|
@@ -0,0 +1,96 @@
|
|
|
1
|
+
import { accentColorOf as e } from "../../canvas/accentColor.js";
|
|
2
|
+
import { ellipsePath as t, polylineFromPoints as n } from "@weasel-js/geom";
|
|
3
|
+
//#region src/features/longPress/longPressFeedback.ts
|
|
4
|
+
var r = "long-press-feedback", i = 64, a = .3, o = () => performance.now();
|
|
5
|
+
function s() {
|
|
6
|
+
return typeof matchMedia == "function" && matchMedia("(prefers-reduced-motion: reduce)").matches;
|
|
7
|
+
}
|
|
8
|
+
function c(e, t, r, a) {
|
|
9
|
+
let o = Math.max(1, Math.ceil(i * a)), s = [];
|
|
10
|
+
for (let n = 0; n <= o; n++) {
|
|
11
|
+
let i = n / o * a * Math.PI * 2;
|
|
12
|
+
s.push({
|
|
13
|
+
x: e + r * Math.sin(i),
|
|
14
|
+
y: t - r * Math.cos(i)
|
|
15
|
+
});
|
|
16
|
+
}
|
|
17
|
+
return n(s);
|
|
18
|
+
}
|
|
19
|
+
function l(e, n, r) {
|
|
20
|
+
return t({
|
|
21
|
+
x: e - r,
|
|
22
|
+
y: n - r,
|
|
23
|
+
width: 2 * r,
|
|
24
|
+
height: 2 * r
|
|
25
|
+
});
|
|
26
|
+
}
|
|
27
|
+
var u = (e) => e?.viewId ?? null;
|
|
28
|
+
function d(t = {}) {
|
|
29
|
+
let n = t.id ?? r, i = t.radius ?? 22, d = t.width ?? 3, f = t.delay ?? 120, p, m = "", h = !1, g = () => {
|
|
30
|
+
let e = p?.get();
|
|
31
|
+
return !!e && e.armed;
|
|
32
|
+
};
|
|
33
|
+
return {
|
|
34
|
+
id: n,
|
|
35
|
+
eligibility: { always: !0 },
|
|
36
|
+
overlay: {
|
|
37
|
+
id: n,
|
|
38
|
+
label: "Long-press feedback",
|
|
39
|
+
space: "screen",
|
|
40
|
+
draw: (e) => {
|
|
41
|
+
let t = p?.get();
|
|
42
|
+
if (!p || !t || !t.armed || u(e) !== null) return [];
|
|
43
|
+
let n = o();
|
|
44
|
+
if (n - t.startedAt < f) return [];
|
|
45
|
+
let { x: r, y: s } = t.local, g = (e) => ({
|
|
46
|
+
paint: {
|
|
47
|
+
color: m,
|
|
48
|
+
...e === void 0 ? {} : { opacity: e }
|
|
49
|
+
},
|
|
50
|
+
width: { px: d },
|
|
51
|
+
cap: "round"
|
|
52
|
+
});
|
|
53
|
+
return h ? [{
|
|
54
|
+
kind: "path",
|
|
55
|
+
path: l(r, s, i),
|
|
56
|
+
stroke: g()
|
|
57
|
+
}] : [{
|
|
58
|
+
kind: "path",
|
|
59
|
+
path: l(r, s, i),
|
|
60
|
+
stroke: g(a)
|
|
61
|
+
}, {
|
|
62
|
+
kind: "path",
|
|
63
|
+
path: c(r, s, i, p.progress(n)),
|
|
64
|
+
stroke: g()
|
|
65
|
+
}];
|
|
66
|
+
}
|
|
67
|
+
},
|
|
68
|
+
attach: (n, r) => {
|
|
69
|
+
let i = r.get("longPress");
|
|
70
|
+
if (!i) return () => {};
|
|
71
|
+
p = i;
|
|
72
|
+
let a, c = () => {
|
|
73
|
+
clearTimeout(a), a = void 0;
|
|
74
|
+
let r = i.get();
|
|
75
|
+
if (r?.armed) {
|
|
76
|
+
m = typeof t.color == "function" ? t.color() : t.color ?? e(n.element), h = t.reducedMotion === "auto" || t.reducedMotion === void 0 ? s() : t.reducedMotion;
|
|
77
|
+
let i = f - (o() - r.startedAt);
|
|
78
|
+
h && i > 0 && (a = setTimeout(() => {
|
|
79
|
+
n.requestRedraw();
|
|
80
|
+
}, i));
|
|
81
|
+
}
|
|
82
|
+
n.requestRedraw();
|
|
83
|
+
}, l = i.subscribe(c);
|
|
84
|
+
return c(), () => {
|
|
85
|
+
l(), clearTimeout(a), p = void 0, n.requestRedraw();
|
|
86
|
+
};
|
|
87
|
+
},
|
|
88
|
+
afterPaint: (e) => {
|
|
89
|
+
!h && g() && e.requestFrame();
|
|
90
|
+
}
|
|
91
|
+
};
|
|
92
|
+
}
|
|
93
|
+
//#endregion
|
|
94
|
+
export { r as LONG_PRESS_FEEDBACK_ID, d as createLongPressFeedbackContribution };
|
|
95
|
+
|
|
96
|
+
//# sourceMappingURL=longPressFeedback.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"longPressFeedback.js","names":["LONG_PRESS_FEEDBACK_ID","RING_SEGMENTS","TRACK_OPACITY","nowMs","prefersReducedMotion","arcPath","n","t","pts","i","a","cx","cy","polylineFromPoints","circlePath","ellipsePath","viewIdOf","data","createLongPressFeedbackContribution","id","opts","radius","width","delay","state","color","reduced","showing","p","now","stroke","opacity","x","y","store","deps","appear","onChange","accentColorOf","api","wait","offStore","ctx"],"sources":["../../../src/features/longPress/longPressFeedback.ts"],"sourcesContent":["/**\n * The default \"press is registering\" feedback for a touch or pen long-press: a\n * ring around the press point that fills over the hold. It reads the `longPress`\n * dep the gesture dispatcher publishes, so it shows only for a press some\n * binding would fire on, and disappears when the press fires, moves past the\n * drag threshold, lifts, or is canceled.\n */\nimport type { LongPressState } from '@weasel-js/routing';\nimport type { RenderLayer } from 'core/layers/render';\nimport { ellipsePath, polylineFromPoints, type Path } from '@weasel-js/geom';\nimport type { DrawCommand } from '../../renderer';\nimport type { CanvasExtensionApi } from '../../canvas/canvasExtension';\nimport type { ContributionDepReader, SurfaceContribution } from '../../canvas/surfaceContribution';\nimport { accentColorOf } from '../../canvas/accentColor';\n\n/** Entry and layer id of the default feedback, so a host can find or order it. */\nexport const LONG_PRESS_FEEDBACK_ID = 'long-press-feedback';\n\n/** Options for {@link createLongPressFeedbackContribution}. */\nexport interface LongPressFeedbackOptions {\n /** Entry and layer id. Default {@link LONG_PRESS_FEEDBACK_ID}. */\n id?: string;\n /** Ring radius in CSS pixels. Default 22 — clear of a fingertip. */\n radius?: number;\n /** Ring stroke width in CSS pixels. Default 3. */\n width?: number;\n /** Ring color. Default the theme's `--wzl-accent`, read off the canvas\n * element when each press starts. */\n color?: string | (() => string);\n /** How long a press is held before the ring appears, in ms, so an ordinary\n * tap shows nothing. Default 120. */\n delay?: number;\n /** `true` shows a static full ring instead of one that fills, and runs no\n * frame loop. Default `'auto'`: follow `prefers-reduced-motion`, read when\n * each press starts. */\n reducedMotion?: boolean | 'auto';\n}\n\nconst RING_SEGMENTS = 64;\nconst TRACK_OPACITY = 0.3;\n\nconst nowMs = (): number => performance.now();\n\nfunction prefersReducedMotion(): boolean {\n return typeof matchMedia === 'function'\n && matchMedia('(prefers-reduced-motion: reduce)').matches;\n}\n\n/** An open arc from 12 o'clock, clockwise on a y-down screen, through `t` of a turn. */\nfunction arcPath(cx: number, cy: number, r: number, t: number): Path {\n const n = Math.max(1, Math.ceil(RING_SEGMENTS * t));\n const pts: { x: number; y: number }[] = [];\n for (let i = 0; i <= n; i++) {\n const a = (i / n) * t * Math.PI * 2;\n pts.push({ x: cx + r * Math.sin(a), y: cy - r * Math.cos(a) });\n }\n return polylineFromPoints(pts);\n}\n\nfunction circlePath(cx: number, cy: number, r: number): Path {\n return ellipsePath({ x: cx - r, y: cy - r, width: 2 * r, height: 2 * r });\n}\n\nconst viewIdOf = (data: unknown): string | null =>\n (data as { viewId?: string | null } | null)?.viewId ?? null;\n\n/**\n * The default long-press feedback, as one entry. `<SceneCanvas>` installs it\n * unless `longPress={{ feedback: false }}`; pass a contribution of your own there to\n * replace it — it reads the same `longPress` dep this one does.\n */\nexport function createLongPressFeedbackContribution(\n opts: LongPressFeedbackOptions = {},\n): SurfaceContribution {\n const id = opts.id ?? LONG_PRESS_FEEDBACK_ID;\n const radius = opts.radius ?? 22;\n const width = opts.width ?? 3;\n const delay = opts.delay ?? 120;\n\n let state: LongPressState | undefined;\n let color = '';\n let reduced = false;\n\n const showing = (): boolean => {\n const p = state?.get();\n return !!p && p.armed;\n };\n\n const layer: RenderLayer<unknown> = {\n id,\n label: 'Long-press feedback',\n space: 'screen',\n draw: (data): DrawCommand[] => {\n const p = state?.get();\n // Screen space is the whole canvas, so the root pass draws the ring\n // wherever the press routed; a view pass drawing it too would double it.\n if (!state || !p || !p.armed || viewIdOf(data) !== null) return [];\n const now = nowMs();\n if (now - p.startedAt < delay) return [];\n const { x, y } = p.local;\n const stroke = (opacity?: number) => ({\n paint: { color, ...(opacity !== undefined ? { opacity } : {}) },\n width: { px: width },\n cap: 'round' as const,\n });\n if (reduced) return [{ kind: 'path', path: circlePath(x, y, radius), stroke: stroke() }];\n return [\n { kind: 'path', path: circlePath(x, y, radius), stroke: stroke(TRACK_OPACITY) },\n { kind: 'path', path: arcPath(x, y, radius, state.progress(now)), stroke: stroke() },\n ];\n },\n };\n\n const attach = (api: CanvasExtensionApi, deps: ContributionDepReader): (() => void) => {\n const store = deps.get('longPress');\n if (!store) return () => {};\n state = store;\n let appear: ReturnType<typeof setTimeout> | undefined;\n\n const onChange = (): void => {\n clearTimeout(appear);\n appear = undefined;\n const p = store.get();\n if (p?.armed) {\n color = typeof opts.color === 'function' ? opts.color() : (opts.color ?? accentColorOf(api.element));\n reduced = opts.reducedMotion === 'auto' || opts.reducedMotion === undefined\n ? prefersReducedMotion()\n : opts.reducedMotion;\n // A static ring changes once, when it appears; nothing needs frames.\n const wait = delay - (nowMs() - p.startedAt);\n if (reduced && wait > 0) appear = setTimeout(() => { api.requestRedraw(); }, wait);\n }\n api.requestRedraw();\n };\n\n const offStore = store.subscribe(onChange);\n onChange();\n return () => {\n offStore();\n clearTimeout(appear);\n state = undefined;\n api.requestRedraw();\n };\n };\n\n return {\n id,\n eligibility: { always: true },\n overlay: layer,\n attach,\n // The filling ring asks for the next frame from each painted one while it shows.\n afterPaint: (ctx) => {\n if (!reduced && showing()) ctx.requestFrame();\n },\n };\n}\n"],"mappings":"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"}
|
|
@@ -0,0 +1,79 @@
|
|
|
1
|
+
import { resolveColor as e } from "../../renderer/math/color.js";
|
|
2
|
+
import { evalPatch as t, isValidPatch as n, patchBounds as r } from "./surface.js";
|
|
3
|
+
import { lerpColorArray as i } from "@weasel-js/paint";
|
|
4
|
+
//#region src/features/meshPaint/bake.ts
|
|
5
|
+
var a = 256, o = 10;
|
|
6
|
+
function s(e) {
|
|
7
|
+
return Math.max(24, Math.ceil(e / o));
|
|
8
|
+
}
|
|
9
|
+
function c(e) {
|
|
10
|
+
let t = Infinity, i = Infinity, a = -Infinity, o = -Infinity;
|
|
11
|
+
for (let s of e) {
|
|
12
|
+
if (!n(s)) continue;
|
|
13
|
+
let e = r(s);
|
|
14
|
+
t = Math.min(t, e.x), i = Math.min(i, e.y), a = Math.max(a, e.x + e.width), o = Math.max(o, e.y + e.height);
|
|
15
|
+
}
|
|
16
|
+
return !Number.isFinite(t) || a <= t || o <= i ? null : {
|
|
17
|
+
x: t,
|
|
18
|
+
y: i,
|
|
19
|
+
width: a - t,
|
|
20
|
+
height: o - i
|
|
21
|
+
};
|
|
22
|
+
}
|
|
23
|
+
function l(e, t, n, r) {
|
|
24
|
+
let a = i(e[0], e[1], t, r), o = i(e[3], e[2], t, r);
|
|
25
|
+
return i(a, o, n, r);
|
|
26
|
+
}
|
|
27
|
+
function u(r, i = "rgb", o = a) {
|
|
28
|
+
let u = c(r);
|
|
29
|
+
if (!u) return null;
|
|
30
|
+
let f = new Uint8ClampedArray(o * o * 4), p = s(o), m = (e) => ({
|
|
31
|
+
x: (e.x - u.x) / u.width * (o - 1) + .5,
|
|
32
|
+
y: (e.y - u.y) / u.height * (o - 1) + .5
|
|
33
|
+
});
|
|
34
|
+
for (let a of r) {
|
|
35
|
+
if (!n(a)) continue;
|
|
36
|
+
let r = a.colors.map((t) => e(t));
|
|
37
|
+
for (let e = 0; e < p; e++) for (let n = 0; n < p; n++) {
|
|
38
|
+
let s = e / p, c = (e + 1) / p, u = n / p, h = (n + 1) / p, g = [
|
|
39
|
+
{
|
|
40
|
+
at: m(t(a, s, u)),
|
|
41
|
+
color: l(r, s, u, i)
|
|
42
|
+
},
|
|
43
|
+
{
|
|
44
|
+
at: m(t(a, c, u)),
|
|
45
|
+
color: l(r, c, u, i)
|
|
46
|
+
},
|
|
47
|
+
{
|
|
48
|
+
at: m(t(a, c, h)),
|
|
49
|
+
color: l(r, c, h, i)
|
|
50
|
+
},
|
|
51
|
+
{
|
|
52
|
+
at: m(t(a, s, h)),
|
|
53
|
+
color: l(r, s, h, i)
|
|
54
|
+
}
|
|
55
|
+
];
|
|
56
|
+
d(f, o, g[0], g[1], g[2]), d(f, o, g[0], g[2], g[3]);
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
return {
|
|
60
|
+
pixels: f,
|
|
61
|
+
size: o,
|
|
62
|
+
box: u
|
|
63
|
+
};
|
|
64
|
+
}
|
|
65
|
+
function d(e, t, n, r, i) {
|
|
66
|
+
let a = Math.max(0, Math.floor(Math.min(n.at.x, r.at.x, i.at.x))), o = Math.min(t - 1, Math.ceil(Math.max(n.at.x, r.at.x, i.at.x))), s = Math.max(0, Math.floor(Math.min(n.at.y, r.at.y, i.at.y))), c = Math.min(t - 1, Math.ceil(Math.max(n.at.y, r.at.y, i.at.y)));
|
|
67
|
+
if (o < a || c < s) return;
|
|
68
|
+
let l = (r.at.x - n.at.x) * (i.at.y - n.at.y) - (i.at.x - n.at.x) * (r.at.y - n.at.y);
|
|
69
|
+
if (!(Math.abs(l) < 1e-9)) for (let u = s; u <= c; u++) for (let s = a; s <= o; s++) {
|
|
70
|
+
let a = s + .5, o = u + .5, c = ((r.at.x - a) * (i.at.y - o) - (i.at.x - a) * (r.at.y - o)) / l, d = ((i.at.x - a) * (n.at.y - o) - (n.at.x - a) * (i.at.y - o)) / l, f = 1 - c - d;
|
|
71
|
+
if (c < -1e-6 || d < -1e-6 || f < -1e-6) continue;
|
|
72
|
+
let p = (u * t + s) * 4;
|
|
73
|
+
for (let t = 0; t < 4; t++) e[p + t] = (c * n.color[t] + d * r.color[t] + f * i.color[t]) * 255;
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
//#endregion
|
|
77
|
+
export { a as MESH_BAKE_SIZE, u as bakeMesh, c as meshBounds };
|
|
78
|
+
|
|
79
|
+
//# sourceMappingURL=bake.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"bake.js","names":["MESH_BAKE_SIZE","TEXELS_PER_CELL","gridFor","size","meshBounds","minX","minY","maxX","maxY","patch","patches","isValidPatch","b","patchBounds","colorAt","bottom","lerpColorArray","corners","u","space","top","v","bakeMesh","box","pixels","grid","toTexel","p","resolveColor","c","i","j","u0","u1","v0","v1","quad","evalPatch","fillTriangle","a","area","y","x","px","py","w0","w1","w2","k","ch"],"sources":["../../../src/features/meshPaint/bake.ts"],"sourcesContent":["/**\n * A mesh paint baked into one RGBA bitmap.\n *\n * A patch is a surface over `(u, v)`, but a paint has to answer \"what color is\n * this fragment\", which is the inverse question — and inverting a bicubic is\n * Newton iteration per fragment. Every renderer that draws these instead\n * subdivides the patch into small quads and rasterizes them forward, which is\n * what this does, once per paint, into a texture the shader then samples. The\n * cost is a texture and a resolution; the gain is that the paint composes with\n * every fill the renderer already knows how to draw, clipping included.\n *\n * The bitmap is straight (non-premultiplied) RGBA, matching the ramp atlas;\n * the fragment shader premultiplies.\n */\n\nimport { resolveColor } from '../../renderer/math/color';\nimport { lerpColorArray, type ColorSpace } from '@weasel-js/paint';\nimport { evalPatch, isValidPatch, patchBounds, type MeshPatch } from './surface';\n\n/** Texels on a side of a bake when the caller names no size. The renderer\n * sizes each bake from how large the paint draws — see `meshBakeSize`. */\nexport const MESH_BAKE_SIZE = 256;\n\n/** Texels a rasterized cell spans at most. The rasterizer interpolates color\n * linearly inside a cell and draws a curved edge as its chord, so this is\n * what keeps a perceptual blend perceptual and an edge curved at any size. */\nconst TEXELS_PER_CELL = 10;\n\n/** Quads per patch on a side, never fewer than 24. */\nfunction gridFor(size: number): number {\n return Math.max(24, Math.ceil(size / TEXELS_PER_CELL));\n}\n\n/** The box a bake covers, in the paint's own space. */\nexport interface MeshBox {\n x: number;\n y: number;\n width: number;\n height: number;\n}\n\n/** The bitmap `bakeMesh` produces, and the paint-space box it covers. */\nexport interface BakedMesh {\n /** `size` × `size` texels, straight RGBA. */\n pixels: Uint8ClampedArray;\n /** Texels on a side; `MESH_BAKE_SIZE` unless the caller asked otherwise. */\n size: number;\n /** Where the bitmap sits in paint space, which is what the shader maps a\n * fragment through. */\n box: MeshBox;\n}\n\n/** The union of every patch's bounds, or `null` when nothing is drawable. */\nexport function meshBounds(patches: readonly MeshPatch[]): MeshBox | null {\n let minX = Infinity;\n let minY = Infinity;\n let maxX = -Infinity;\n let maxY = -Infinity;\n for (const patch of patches) {\n if (!isValidPatch(patch)) continue;\n const b = patchBounds(patch);\n minX = Math.min(minX, b.x);\n minY = Math.min(minY, b.y);\n maxX = Math.max(maxX, b.x + b.width);\n maxY = Math.max(maxY, b.y + b.height);\n }\n if (!Number.isFinite(minX) || maxX <= minX || maxY <= minY) return null;\n return { x: minX, y: minY, width: maxX - minX, height: maxY - minY };\n}\n\ntype Rgba = readonly [number, number, number, number];\n\n/**\n * Corner colors blended at `(u, v)` in `space`.\n *\n * Bilinear as three lerps rather than four weights, because a perceptual space\n * has a midpoint between two colors and no meaningful four-way mix — OKLCh's\n * hue in particular is an arc, which only two endpoints define.\n */\nfunction colorAt(corners: Rgba[], u: number, v: number, space: ColorSpace): number[] {\n const bottom = lerpColorArray(corners[0], corners[1], u, space);\n const top = lerpColorArray(corners[3], corners[2], u, space);\n return lerpColorArray(bottom, top, v, space);\n}\n\n/**\n * Rasterize `patches` into a square bitmap covering their union.\n *\n * Returns `null` when no patch is drawable, which is the caller's cue to paint\n * nothing rather than a blank square.\n */\nexport function bakeMesh(\n patches: readonly MeshPatch[],\n space: ColorSpace = 'rgb',\n size: number = MESH_BAKE_SIZE,\n): BakedMesh | null {\n const box = meshBounds(patches);\n if (!box) return null;\n\n const pixels = new Uint8ClampedArray(size * size * 4);\n const grid = gridFor(size);\n // The box maps onto texel *centers*, not texel edges: a corner of the mesh\n // lands at the center of the corner texel, so the outermost row and column\n // are covered rather than half-missed by a rasterizer testing centers.\n const toTexel = (p: { x: number; y: number }): { x: number; y: number } => ({\n x: ((p.x - box.x) / box.width) * (size - 1) + 0.5,\n y: ((p.y - box.y) / box.height) * (size - 1) + 0.5,\n });\n\n for (const patch of patches) {\n if (!isValidPatch(patch)) continue;\n const corners = patch.colors.map((c) => resolveColor(c)) as Rgba[];\n\n for (let i = 0; i < grid; i++) {\n for (let j = 0; j < grid; j++) {\n const u0 = i / grid;\n const u1 = (i + 1) / grid;\n const v0 = j / grid;\n const v1 = (j + 1) / grid;\n const quad = [\n { at: toTexel(evalPatch(patch, u0, v0)), color: colorAt(corners, u0, v0, space) },\n { at: toTexel(evalPatch(patch, u1, v0)), color: colorAt(corners, u1, v0, space) },\n { at: toTexel(evalPatch(patch, u1, v1)), color: colorAt(corners, u1, v1, space) },\n { at: toTexel(evalPatch(patch, u0, v1)), color: colorAt(corners, u0, v1, space) },\n ];\n fillTriangle(pixels, size, quad[0], quad[1], quad[2]);\n fillTriangle(pixels, size, quad[0], quad[2], quad[3]);\n }\n }\n }\n\n return { pixels, size, box };\n}\n\ninterface Vertex {\n at: { x: number; y: number };\n color: number[];\n}\n\nconst EDGE_EPS = 1e-6;\n\n/**\n * One triangle, barycentric, colors interpolated across it.\n *\n * Neighboring cells share an edge, so a pixel exactly on one is claimed by\n * both — harmless here because both carry the same color there, and cheaper\n * than a fill rule.\n */\nfunction fillTriangle(\n pixels: Uint8ClampedArray, size: number, a: Vertex, b: Vertex, c: Vertex,\n): void {\n const minX = Math.max(0, Math.floor(Math.min(a.at.x, b.at.x, c.at.x)));\n const maxX = Math.min(size - 1, Math.ceil(Math.max(a.at.x, b.at.x, c.at.x)));\n const minY = Math.max(0, Math.floor(Math.min(a.at.y, b.at.y, c.at.y)));\n const maxY = Math.min(size - 1, Math.ceil(Math.max(a.at.y, b.at.y, c.at.y)));\n if (maxX < minX || maxY < minY) return;\n\n const area = (b.at.x - a.at.x) * (c.at.y - a.at.y) - (c.at.x - a.at.x) * (b.at.y - a.at.y);\n // A degenerate cell — a patch collapsed to a line — covers nothing.\n if (Math.abs(area) < 1e-9) return;\n\n for (let y = minY; y <= maxY; y++) {\n for (let x = minX; x <= maxX; x++) {\n const px = x + 0.5;\n const py = y + 0.5;\n const w0 = ((b.at.x - px) * (c.at.y - py) - (c.at.x - px) * (b.at.y - py)) / area;\n const w1 = ((c.at.x - px) * (a.at.y - py) - (a.at.x - px) * (c.at.y - py)) / area;\n const w2 = 1 - w0 - w1;\n // An edge texel's center sits exactly on the boundary, where rounding\n // can put it a hair outside; the epsilon is what keeps the border row\n // from dropping out.\n if (w0 < -EDGE_EPS || w1 < -EDGE_EPS || w2 < -EDGE_EPS) continue;\n const k = (y * size + x) * 4;\n for (let ch = 0; ch < 4; ch++) {\n pixels[k + ch] = (w0 * a.color[ch] + w1 * b.color[ch] + w2 * c.color[ch]) * 255;\n }\n }\n }\n}\n"],"mappings":"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"}
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
import { MESH_BAKE_SIZE as e } from "./bake.js";
|
|
2
|
+
//#region src/features/meshPaint/bakeCache.ts
|
|
3
|
+
var t = 32, n = 2048, r = 67108864, i = 256;
|
|
4
|
+
function a(r, i) {
|
|
5
|
+
let a = Math.min(n, o(i));
|
|
6
|
+
return Number.isNaN(r) ? Math.min(e, a) : r <= t ? Math.min(t, a) : r >= a ? a : Math.min(a, 2 ** Math.ceil(Math.log2(r)));
|
|
7
|
+
}
|
|
8
|
+
function o(e) {
|
|
9
|
+
return e >= 1 ? Number.isFinite(e) ? 2 ** Math.floor(Math.log2(e)) : n : t;
|
|
10
|
+
}
|
|
11
|
+
var s = class {
|
|
12
|
+
free;
|
|
13
|
+
budgetBytes;
|
|
14
|
+
maxEntries;
|
|
15
|
+
byPaint = /* @__PURE__ */ new WeakMap();
|
|
16
|
+
order = /* @__PURE__ */ new Set();
|
|
17
|
+
held = 0;
|
|
18
|
+
constructor(e, t = r, n = i) {
|
|
19
|
+
this.free = e, this.budgetBytes = t, this.maxEntries = n;
|
|
20
|
+
}
|
|
21
|
+
get bytes() {
|
|
22
|
+
return this.held;
|
|
23
|
+
}
|
|
24
|
+
get size() {
|
|
25
|
+
return this.order.size;
|
|
26
|
+
}
|
|
27
|
+
get(e, t) {
|
|
28
|
+
let n = this.byPaint.get(e)?.get(t);
|
|
29
|
+
if (n) return this.order.delete(n), this.order.add(n), n.value;
|
|
30
|
+
}
|
|
31
|
+
set(e, t, n) {
|
|
32
|
+
let r = this.byPaint.get(e);
|
|
33
|
+
r || (r = /* @__PURE__ */ new Map(), this.byPaint.set(e, r));
|
|
34
|
+
let i = r.get(t);
|
|
35
|
+
i && this.drop(i);
|
|
36
|
+
let a = {
|
|
37
|
+
value: n,
|
|
38
|
+
size: t,
|
|
39
|
+
bySize: r
|
|
40
|
+
};
|
|
41
|
+
r.set(t, a), this.order.add(a), this.held += t * t * 4, this.evict(a);
|
|
42
|
+
}
|
|
43
|
+
clear() {
|
|
44
|
+
for (let e of [...this.order]) this.drop(e);
|
|
45
|
+
}
|
|
46
|
+
evict(e) {
|
|
47
|
+
for (let t of this.order) {
|
|
48
|
+
if (this.held <= this.budgetBytes && this.order.size <= this.maxEntries) return;
|
|
49
|
+
t !== e && this.drop(t);
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
drop(e) {
|
|
53
|
+
this.order.delete(e) && (e.bySize.delete(e.size), this.held -= e.size * e.size * 4, this.free(e.value));
|
|
54
|
+
}
|
|
55
|
+
};
|
|
56
|
+
//#endregion
|
|
57
|
+
export { r as MESH_BAKE_CACHE_BYTES, i as MESH_BAKE_CACHE_ENTRIES, n as MESH_BAKE_MAX, t as MESH_BAKE_MIN, s as MeshBakeCache, a as meshBakeSize };
|
|
58
|
+
|
|
59
|
+
//# sourceMappingURL=bakeCache.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"bakeCache.js","names":["MESH_BAKE_MIN","MESH_BAKE_MAX","MESH_BAKE_CACHE_BYTES","MESH_BAKE_CACHE_ENTRIES","meshBakeSize","ceiling","floorPow2","maxTextureSize","devicePx","MESH_BAKE_SIZE","n","MeshBakeCache","free","budgetBytes","maxEntries","entry","paint","size","bySize","old","keep"],"sources":["../../../src/features/meshPaint/bakeCache.ts"],"sourcesContent":["/**\n * How large a mesh bake is, and the bounded cache the bakes live in.\n *\n * A gradient's ramp is one-dimensional, so 256 texels cover it at any size. A\n * mesh's bake is two-dimensional and is stretched over whatever the paint\n * covers, so a fixed size shows its texels once the paint draws large. The\n * bake is sized from the device pixels it covers instead, in power-of-two\n * buckets so a zoom inside one bucket reuses the bake it already has.\n */\n\nimport { MESH_BAKE_SIZE } from './bake';\n\n/** The smallest bake: below this a texture costs more in bookkeeping than in\n * bytes. */\nexport const MESH_BAKE_MIN = 32;\n\n/** The largest bake, whatever the context allows: 16 MiB of RGBA, and a bake\n * that already takes a noticeable moment on the CPU. */\nexport const MESH_BAKE_MAX = 2048;\n\n/** Bytes of baked texture one renderer keeps before evicting the least\n * recently drawn. */\nexport const MESH_BAKE_CACHE_BYTES = 64 * 1024 * 1024;\n\n/** Bakes one renderer keeps, however small, so a scene of many tiny meshes\n * cannot hold thousands of GL textures. */\nexport const MESH_BAKE_CACHE_ENTRIES = 256;\n\n/**\n * The bake side for a paint drawn `devicePx` device pixels across, on a\n * context accepting `maxTextureSize`: the next power of two at or above it,\n * clamped to `[MESH_BAKE_MIN, MESH_BAKE_MAX]` and to the context. A size that\n * cannot be measured gets `MESH_BAKE_SIZE`.\n */\nexport function meshBakeSize(devicePx: number, maxTextureSize: number): number {\n const ceiling = Math.min(MESH_BAKE_MAX, floorPow2(maxTextureSize));\n if (Number.isNaN(devicePx)) return Math.min(MESH_BAKE_SIZE, ceiling);\n if (devicePx <= MESH_BAKE_MIN) return Math.min(MESH_BAKE_MIN, ceiling);\n if (devicePx >= ceiling) return ceiling;\n return Math.min(ceiling, 2 ** Math.ceil(Math.log2(devicePx)));\n}\n\nfunction floorPow2(n: number): number {\n if (!(n >= 1)) return MESH_BAKE_MIN;\n if (!Number.isFinite(n)) return MESH_BAKE_MAX;\n return 2 ** Math.floor(Math.log2(n));\n}\n\ninterface Entry<T> {\n value: T;\n size: number;\n /** The paint's own bucket map, which is what eviction removes it from. */\n bySize: Map<number, Entry<T>>;\n}\n\n/**\n * Bakes keyed by paint and bake size, least recently used first out.\n *\n * The paint is held weakly, so a paint nobody draws any more does not pin its\n * key; its texture stays until eviction reaches it, which the bounds keep\n * finite. `free` runs for every value that leaves, by eviction, replacement or\n * `clear`.\n */\nexport class MeshBakeCache<T> {\n private readonly byPaint = new WeakMap<object, Map<number, Entry<T>>>();\n /** Insertion order is recency: a hit is deleted and re-added. */\n private readonly order = new Set<Entry<T>>();\n private held = 0;\n\n constructor(\n private readonly free: (value: T) => void,\n private readonly budgetBytes: number = MESH_BAKE_CACHE_BYTES,\n private readonly maxEntries: number = MESH_BAKE_CACHE_ENTRIES,\n ) {}\n\n /** Bytes the held bakes occupy, as RGBA8. */\n get bytes(): number { return this.held; }\n\n /** Bakes held. */\n get size(): number { return this.order.size; }\n\n get(paint: object, size: number): T | undefined {\n const entry = this.byPaint.get(paint)?.get(size);\n if (!entry) return undefined;\n this.order.delete(entry);\n this.order.add(entry);\n return entry.value;\n }\n\n set(paint: object, size: number, value: T): void {\n let bySize = this.byPaint.get(paint);\n if (!bySize) {\n bySize = new Map();\n this.byPaint.set(paint, bySize);\n }\n const old = bySize.get(size);\n if (old) this.drop(old);\n const entry: Entry<T> = { value, size, bySize };\n bySize.set(size, entry);\n this.order.add(entry);\n this.held += size * size * 4;\n this.evict(entry);\n }\n\n /** Free every bake. The cache stays usable. */\n clear(): void {\n for (const entry of [...this.order]) this.drop(entry);\n }\n\n /** Oldest first until both bounds hold, never evicting `keep` — the bake\n * the caller is about to draw. */\n private evict(keep: Entry<T>): void {\n for (const entry of this.order) {\n if (this.held <= this.budgetBytes && this.order.size <= this.maxEntries) return;\n if (entry !== keep) this.drop(entry);\n }\n }\n\n private drop(entry: Entry<T>): void {\n if (!this.order.delete(entry)) return;\n entry.bySize.delete(entry.size);\n this.held -= entry.size * entry.size * 4;\n this.free(entry.value);\n }\n}\n"],"mappings":";;AAcA,IAAaA,IAAgB,IAIhBC,IAAgB,MAIhBC,IAAwB,UAIxBC,IAA0B;AAQvC,SAAgBC,EAAa,GAAkB,GAAgC;CAC7E,IAAMC,IAAU,KAAK,IAAIJ,GAAeK,EAAUC,CAAc,CAAC;CAIjE,OAHI,OAAO,MAAMC,CAAQ,IAAU,KAAK,IAAIC,GAAgBJ,CAAO,IAC/DG,KAAYR,IAAsB,KAAK,IAAIA,GAAeK,CAAO,IACjEG,KAAYH,IAAgBA,IACzB,KAAK,IAAIA,GAAS,KAAK,KAAK,KAAK,KAAK,KAAKG,CAAQ,CAAC,CAAC;AAC9D;AAEA,SAASF,EAAU,GAAmB;CAGpC,OAFMI,KAAK,IACN,OAAO,SAASA,CAAC,IACf,KAAK,KAAK,MAAM,KAAK,KAAKA,CAAC,CAAC,IADHT,IADVD;AAGxB;AAiBA,IAAaW,IAAb,MAA8B;CAOT;CACA;CACA;CARnB,0BAA2B,IAAI,QAAuC;CAEtE,wBAAyB,IAAI,IAAc;CAC3C,OAAe;CAEf,YACE,GACA,IAAuCT,GACvC,IAAsCC,GACtC;EADiB,AAFA,KAAA,OAAAS,GACA,KAAA,cAAAC,GACA,KAAA,aAAAC;CAChB;CAGH,IAAI,QAAgB;EAAE,OAAO,KAAK;CAAM;CAGxC,IAAI,OAAe;EAAE,OAAO,KAAK,MAAM;CAAM;CAE7C,IAAI,GAAe,GAA6B;EAC9C,IAAMC,IAAQ,KAAK,QAAQ,IAAIC,CAAK,CAAC,EAAE,IAAIC,CAAI;EAC/C,IAAKF,GAGL,OAFA,KAAK,MAAM,OAAOA,CAAK,GACvB,KAAK,MAAM,IAAIA,CAAK,GACbA,EAAM;CACf;CAEA,IAAI,GAAe,GAAc,GAAgB;EAC/C,IAAIG,IAAS,KAAK,QAAQ,IAAIF,CAAK;EACnC,AAAKE,MACH,oBAAS,IAAI,IAAI,GACjB,KAAK,QAAQ,IAAIF,GAAOE,CAAM;EAEhC,IAAMC,IAAMD,EAAO,IAAID,CAAI;EAC3B,AAAIE,KAAK,KAAK,KAAKA,CAAG;EACtB,IAAMJ,IAAkB;GAAE;GAAO;GAAM;EAAO;EAI9C,AAHAG,EAAO,IAAID,GAAMF,CAAK,GACtB,KAAK,MAAM,IAAIA,CAAK,GACpB,KAAK,QAAQE,IAAOA,IAAO,GAC3B,KAAK,MAAMF,CAAK;CAClB;CAGA,QAAc;EACZ,KAAK,IAAMA,KAAS,CAAC,GAAG,KAAK,KAAK,GAAG,KAAK,KAAKA,CAAK;CACtD;CAIA,MAAc,GAAsB;EAClC,KAAK,IAAMA,KAAS,KAAK,OAAO;GAC9B,IAAI,KAAK,QAAQ,KAAK,eAAe,KAAK,MAAM,QAAQ,KAAK,YAAY;GACzE,AAAIA,MAAUK,KAAM,KAAK,KAAKL,CAAK;EACrC;CACF;CAEA,KAAa,GAAuB;EAClC,AAAK,KAAK,MAAM,OAAOA,CAAK,MAC5BA,EAAM,OAAO,OAAOA,EAAM,IAAI,GAC9B,KAAK,QAAQA,EAAM,OAAOA,EAAM,OAAO,GACvC,KAAK,KAAKA,EAAM,KAAK;CACvB;AACF"}
|
|
@@ -0,0 +1,86 @@
|
|
|
1
|
+
import { isTensorPatch as e, isValidPatch as t } from "./surface.js";
|
|
2
|
+
//#region src/features/meshPaint/handles.ts
|
|
3
|
+
var n = [
|
|
4
|
+
12,
|
|
5
|
+
15,
|
|
6
|
+
14,
|
|
7
|
+
13
|
|
8
|
+
];
|
|
9
|
+
function r(e) {
|
|
10
|
+
return e >= 12 ? "interior" : e % 3 == 0 ? "corner" : "control";
|
|
11
|
+
}
|
|
12
|
+
function i(e, t) {
|
|
13
|
+
return Math.abs(e - t) <= 1e-9 * Math.max(1, Math.abs(e), Math.abs(t));
|
|
14
|
+
}
|
|
15
|
+
function a(e, t) {
|
|
16
|
+
return i(e.x, t.x) && i(e.y, t.y);
|
|
17
|
+
}
|
|
18
|
+
function o(e) {
|
|
19
|
+
let n = [];
|
|
20
|
+
return e.patches.forEach((e, i) => {
|
|
21
|
+
t(e) && e.points.forEach((e, t) => {
|
|
22
|
+
let o = r(t), s = n.find((t) => t.kind === o && a(t.at, e));
|
|
23
|
+
s ? s.refs.push({
|
|
24
|
+
patch: i,
|
|
25
|
+
index: t
|
|
26
|
+
}) : n.push({
|
|
27
|
+
id: `${i}:${t}`,
|
|
28
|
+
kind: o,
|
|
29
|
+
at: e,
|
|
30
|
+
refs: [{
|
|
31
|
+
patch: i,
|
|
32
|
+
index: t
|
|
33
|
+
}]
|
|
34
|
+
});
|
|
35
|
+
});
|
|
36
|
+
}), n;
|
|
37
|
+
}
|
|
38
|
+
function s(t, r) {
|
|
39
|
+
let i = r / 3, a = [r + 1, (r + 11) % 12];
|
|
40
|
+
return e(t) && a.push(n[i]), a;
|
|
41
|
+
}
|
|
42
|
+
function c(e, t, n) {
|
|
43
|
+
let r = n.x - t.at.x, i = n.y - t.at.y, a = /* @__PURE__ */ new Map();
|
|
44
|
+
for (let { patch: e, index: r } of t.refs) a.set(`${e}:${r}`, n);
|
|
45
|
+
if (t.kind === "corner") for (let { patch: n, index: o } of t.refs) for (let t of s(e.patches[n], o)) {
|
|
46
|
+
let o = `${n}:${t}`;
|
|
47
|
+
if (a.has(o)) continue;
|
|
48
|
+
let s = e.patches[n].points[t];
|
|
49
|
+
a.set(o, {
|
|
50
|
+
x: s.x + r,
|
|
51
|
+
y: s.y + i
|
|
52
|
+
});
|
|
53
|
+
}
|
|
54
|
+
return {
|
|
55
|
+
...e,
|
|
56
|
+
patches: e.patches.map((e, t) => ({
|
|
57
|
+
...e,
|
|
58
|
+
points: e.points.map((e, n) => a.get(`${t}:${n}`) ?? e)
|
|
59
|
+
}))
|
|
60
|
+
};
|
|
61
|
+
}
|
|
62
|
+
function l(e) {
|
|
63
|
+
let n = [], r = [];
|
|
64
|
+
for (let i of e.patches) {
|
|
65
|
+
if (!t(i)) continue;
|
|
66
|
+
let e = i.points;
|
|
67
|
+
for (let t = 0; t < 4; t++) {
|
|
68
|
+
let a = t * 3;
|
|
69
|
+
n.push([
|
|
70
|
+
e[a],
|
|
71
|
+
e[a + 1],
|
|
72
|
+
e[a + 2],
|
|
73
|
+
e[(a + 3) % 12]
|
|
74
|
+
]);
|
|
75
|
+
for (let t of s(i, a)) r.push([e[a], e[t]]);
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
return {
|
|
79
|
+
edges: n,
|
|
80
|
+
arms: r
|
|
81
|
+
};
|
|
82
|
+
}
|
|
83
|
+
//#endregion
|
|
84
|
+
export { l as meshGuides, o as meshHandles, c as moveMeshHandle };
|
|
85
|
+
|
|
86
|
+
//# sourceMappingURL=handles.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"handles.js","names":["INTERIOR_OF_CORNER","kindOf","index","near","a","b","same","meshHandles","handles","mesh","isValidPatch","patch","kind","twin","h","at","p","carriedBy","k","corner","carried","isTensorPatch","moveMeshHandle","dx","to","handle","dy","placed","key","from","i","point","meshGuides","edges","arms"],"sources":["../../../src/features/meshPaint/handles.ts"],"sourcesContent":["/**\n * The draggable points of a mesh paint, as pure geometry — what an on-canvas\n * editor lists, and what moving one of them does to the paint.\n *\n * Nothing here knows a frame: the handles are in whatever space the mesh's\n * points are, so a caller resolves a `'bounds'` mesh onto its box first\n * (`fillInPoseFrame`) and normalizes the result back (`fillToBoundsFrame`).\n */\n\nimport type { MeshGradientFill } from './meshPaint';\nimport { isTensorPatch, isValidPatch, type MeshPatch, type MeshPoint } from './surface';\n\n/** What a handle moves: a patch corner, one of the two controls of an edge,\n * or one of a tensor patch's four interior points. */\nexport type MeshHandleKind = 'corner' | 'control' | 'interior';\n\n/** One stored point: `patches[patch].points[index]`. */\nexport interface MeshPointRef {\n patch: number;\n index: number;\n}\n\n/**\n * One draggable point.\n *\n * Patches store their points in full rather than sharing edges, so two\n * patches that meet each carry a copy of the corner and controls they meet\n * at. Those copies are one handle, with a `ref` per copy — dragging one of\n * them alone would tear the surface open along the seam.\n */\nexport interface MeshHandle {\n /** Stable while the handle moves: its first ref, as `\"patch:index\"`. */\n id: string;\n kind: MeshHandleKind;\n at: MeshPoint;\n refs: readonly MeshPointRef[];\n}\n\n/** Corner `k`'s interior neighbor in the tensor net. PDF's trailing four walk\n * the net as (1,1) (1,2) (2,2) (2,1), which puts corner 1's at index 15 and\n * corner 3's at 13 — the transpose of the obvious reading. */\nconst INTERIOR_OF_CORNER = [12, 15, 14, 13] as const;\n\nfunction kindOf(index: number): MeshHandleKind {\n if (index >= 12) return 'interior';\n return index % 3 === 0 ? 'corner' : 'control';\n}\n\nfunction near(a: number, b: number): boolean {\n return Math.abs(a - b) <= 1e-9 * Math.max(1, Math.abs(a), Math.abs(b));\n}\n\nfunction same(a: MeshPoint, b: MeshPoint): boolean {\n return near(a.x, b.x) && near(a.y, b.y);\n}\n\n/**\n * Every draggable point of `mesh`, in walk order: each patch's corners and\n * edge controls, then a tensor patch's interior. Coincident points of one\n * kind merge into one handle. A patch that cannot be evaluated has none.\n */\nexport function meshHandles(mesh: MeshGradientFill): MeshHandle[] {\n const handles: { id: string; kind: MeshHandleKind; at: MeshPoint; refs: MeshPointRef[] }[] = [];\n mesh.patches.forEach((patch, p) => {\n if (!isValidPatch(patch)) return;\n patch.points.forEach((at, index) => {\n const kind = kindOf(index);\n const twin = handles.find((h) => h.kind === kind && same(h.at, at));\n if (twin) twin.refs.push({ patch: p, index });\n else handles.push({ id: `${p}:${index}`, kind, at, refs: [{ patch: p, index }] });\n });\n });\n return handles;\n}\n\n/** The points a corner carries: the controls of the two edges it joins, and\n * its interior neighbor when the patch has one. */\nfunction carriedBy(patch: MeshPatch, corner: number): number[] {\n const k = corner / 3;\n const carried = [corner + 1, (corner + 11) % 12];\n if (isTensorPatch(patch)) carried.push(INTERIOR_OF_CORNER[k]);\n return carried;\n}\n\n/**\n * `mesh` with `handle` moved to `to`. A corner carries its edge controls\n * and interior neighbor along by the same offset, the way a path editor's\n * anchor carries its handles; a control or interior point moves alone.\n * Returns a new paint; `mesh` is not modified.\n */\nexport function moveMeshHandle(\n mesh: MeshGradientFill, handle: MeshHandle, to: MeshPoint,\n): MeshGradientFill {\n const dx = to.x - handle.at.x;\n const dy = to.y - handle.at.y;\n const placed = new Map<string, MeshPoint>();\n for (const { patch, index } of handle.refs) {\n placed.set(`${patch}:${index}`, to);\n }\n if (handle.kind === 'corner') {\n for (const { patch, index } of handle.refs) {\n for (const carried of carriedBy(mesh.patches[patch], index)) {\n const key = `${patch}:${carried}`;\n if (placed.has(key)) continue;\n const from = mesh.patches[patch].points[carried];\n placed.set(key, { x: from.x + dx, y: from.y + dy });\n }\n }\n }\n return {\n ...mesh,\n patches: mesh.patches.map((patch, p) => ({\n ...patch,\n points: patch.points.map((point, i) => placed.get(`${p}:${i}`) ?? point),\n })),\n };\n}\n\n/** The lines an editor draws under the handles, as control polygons. */\nexport interface MeshGuides {\n /** Every patch edge as its four cubic control points, from the corner it\n * leaves to the corner it reaches. */\n edges: [MeshPoint, MeshPoint, MeshPoint, MeshPoint][];\n /** Corner to each point it carries — an edge control or interior point. */\n arms: [MeshPoint, MeshPoint][];\n}\n\n/** The guides for `mesh`'s valid patches. Shared edges appear once per patch. */\nexport function meshGuides(mesh: MeshGradientFill): MeshGuides {\n const edges: MeshGuides['edges'] = [];\n const arms: MeshGuides['arms'] = [];\n for (const patch of mesh.patches) {\n if (!isValidPatch(patch)) continue;\n const p = patch.points;\n for (let k = 0; k < 4; k++) {\n const corner = k * 3;\n edges.push([p[corner], p[corner + 1], p[corner + 2], p[(corner + 3) % 12]]);\n for (const carried of carriedBy(patch, corner)) arms.push([p[corner], p[carried]]);\n }\n }\n return { edges, arms };\n}\n"],"mappings":"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"}
|