@weasel-js/core 1.7.0 → 1.7.2
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 +794 -0
- package/README.md +14 -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-vCdt55xm.d.ts} +2 -2
- package/dist/{builtins-DLn2lCr_.d.ts → builtins-C-gRyVRx.d.ts} +742 -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 +102 -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 +93 -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-BCrDp_mH.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 +39 -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.d.ts +1960 -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 +107 -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 +760 -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 +335 -0
- package/dist/interactions/actions/defaults/resize.js.map +1 -0
- package/dist/interactions/actions/defaults/rotate.js +184 -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 +181 -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 +31 -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-Drrw4ewZ.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-DEklpDc_.d.ts +57 -0
- package/dist/patterns-builtin.js +3 -3
- package/dist/{poseDescriptor-rZa9W5hJ.d.ts → poseDescriptor-D-OH-tu5.d.ts} +0 -4
- 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/style.css +2 -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-A37hYkeR.d.ts} +185 -15
- package/dist/{types-qYpyTAiZ.d.ts → types-B_9g6hMM.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 +31 -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 +0 -62
- 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,30 @@
|
|
|
1
|
+
import { zoomAt as e } from "./zoomAt.js";
|
|
2
|
+
//#region src/core/viewport/wheelHandler.ts
|
|
3
|
+
var t = 1.1;
|
|
4
|
+
function n(e) {
|
|
5
|
+
return t ** (-e / 100);
|
|
6
|
+
}
|
|
7
|
+
function r(t, r, i, a) {
|
|
8
|
+
return e(t, r, n(i), a);
|
|
9
|
+
}
|
|
10
|
+
function i(e, t, n = {}) {
|
|
11
|
+
let r = n.axis ?? "both", i = n.swapAxis === !0, a = i && t.deltaX === 0 ? t.deltaY : t.deltaX, o = i ? 0 : t.deltaY;
|
|
12
|
+
return {
|
|
13
|
+
scale: e.scale,
|
|
14
|
+
x: e.x + (r === "y" ? 0 : a / e.scale.x),
|
|
15
|
+
y: e.y + (r === "x" ? 0 : o / e.scale.y)
|
|
16
|
+
};
|
|
17
|
+
}
|
|
18
|
+
function a(e, t, n, a = {}) {
|
|
19
|
+
return t.ctrlKey || t.metaKey ? r(e, {
|
|
20
|
+
x: t.x,
|
|
21
|
+
y: t.y
|
|
22
|
+
}, t.deltaY, n) : i(e, t, {
|
|
23
|
+
axis: a.axis,
|
|
24
|
+
swapAxis: t.shiftKey === !0
|
|
25
|
+
});
|
|
26
|
+
}
|
|
27
|
+
//#endregion
|
|
28
|
+
export { t as WHEEL_ZOOM_STEP, a as computeWheelAction, i as wheelPan, r as wheelZoom, n as wheelZoomFactor };
|
|
29
|
+
|
|
30
|
+
//# sourceMappingURL=wheelHandler.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"wheelHandler.js","names":["WHEEL_ZOOM_STEP","wheelZoomFactor","deltaY","wheelZoom","zoomAt","view","anchor","clamp","wheelPan","axis","opts","swapped","screenX","delta","screenY","computeWheelAction","input"],"sources":["../../../src/core/viewport/wheelHandler.ts"],"sourcesContent":["/**\n * The kit's one wheel convention, as pure functions over `View`.\n *\n * ## Modifiers\n * - bare wheel → pan\n * - shift+wheel → horizontal pan (mouse wheels emit only `deltaY`)\n * - Cmd/Ctrl+wheel → zoom, anchored under the pointer. Ctrl also covers the\n * trackpad pinch, which browsers deliver as ctrl+wheel.\n *\n * ## Coordinates\n * `View.x` / `View.y` are world-space, so a pan delta — screen pixels, as the\n * DOM reports them — is divided by `View.scale` before it lands. The zoom\n * anchor is canvas-local: client coords minus the canvas's bounding rect.\n *\n * `viewport.wheelPan` and `viewport.zoom` are the wired form of these, and\n * call them rather than restating the math.\n */\n\nimport type { View } from './view';\nimport { zoomAt, type ZoomClampOpts } from './zoomAt';\n\n/** Multiplicative zoom applied per 100 px of wheel `deltaY`. */\nexport const WHEEL_ZOOM_STEP = 1.1;\n\n/** A wheel event, decoupled from the DOM `WheelEvent` shape for testability. */\nexport interface WheelInput {\n deltaX: number;\n deltaY: number;\n /** Zoom anchor, canvas-local: client coords minus the canvas's rect. */\n x: number;\n y: number;\n shiftKey?: boolean;\n ctrlKey?: boolean;\n metaKey?: boolean;\n}\n\n/** Which axes a wheel pan is allowed to move, and whether `deltaY` is routed\n * into the x axis (shift+wheel). An axis lock outranks `swapAxis`. */\nexport interface WheelPanOpts {\n axis?: 'both' | 'x' | 'y';\n swapAxis?: boolean;\n}\n\n/** Zoom multiplier for one wheel sample. Reciprocal in `deltaY`, so scrolling\n * a distance and back returns to the scale you started from. */\nexport function wheelZoomFactor(deltaY: number): number {\n return Math.pow(WHEEL_ZOOM_STEP, -deltaY / 100);\n}\n\n/** Zoom one wheel sample about `anchor` (canvas-local pixels). */\nexport function wheelZoom(\n view: View,\n anchor: { x: number; y: number },\n deltaY: number,\n clamp?: ZoomClampOpts,\n): View {\n return zoomAt(view, anchor, wheelZoomFactor(deltaY), clamp);\n}\n\n/** Pan by one wheel sample. `delta` is in screen pixels. */\nexport function wheelPan(\n view: View,\n delta: { deltaX: number; deltaY: number },\n opts: WheelPanOpts = {},\n): View {\n const axis = opts.axis ?? 'both';\n const swapped = opts.swapAxis === true;\n // Shift+wheel wants a horizontal pan, but a mouse wheel only emits deltaY.\n const screenX = swapped ? (delta.deltaX !== 0 ? delta.deltaX : delta.deltaY) : delta.deltaX;\n const screenY = swapped ? 0 : delta.deltaY;\n return {\n scale: view.scale,\n x: view.x + (axis === 'y' ? 0 : screenX / view.scale.x),\n y: view.y + (axis === 'x' ? 0 : screenY / view.scale.y),\n };\n}\n\n/** Pure reducer: the whole wheel convention in one call. */\nexport function computeWheelAction(\n view: View,\n input: WheelInput,\n clamp?: ZoomClampOpts,\n opts: Pick<WheelPanOpts, 'axis'> = {},\n): View {\n if (input.ctrlKey || input.metaKey) {\n return wheelZoom(view, { x: input.x, y: input.y }, input.deltaY, clamp);\n }\n return wheelPan(view, input, { axis: opts.axis, swapAxis: input.shiftKey === true });\n}\n"],"mappings":";;AAsBA,IAAaA,IAAkB;AAuB/B,SAAgBC,EAAgB,GAAwB;CACtD,OAAgBD,MAAiB,CAACE,IAAS;AAC7C;AAGA,SAAgBC,EACd,GACA,GACA,GACA,GACM;CACN,OAAOC,EAAOC,GAAMC,GAAQL,EAAgBC,CAAM,GAAGK,CAAK;AAC5D;AAGA,SAAgBC,EACd,GACA,GACA,IAAqB,CAAC,GAChB;CACN,IAAMC,IAAOC,EAAK,QAAQ,QACpBC,IAAUD,EAAK,aAAa,IAE5BE,IAAUD,KAAWE,EAAM,WAAW,IAAmBA,EAAM,SAArBA,EAAM,QAChDC,IAAUH,IAAU,IAAIE,EAAM;CACpC,OAAO;EACL,OAAOR,EAAK;EACZ,GAAGA,EAAK,KAAKI,MAAS,MAAM,IAAIG,IAAUP,EAAK,MAAM;EACrD,GAAGA,EAAK,KAAKI,MAAS,MAAM,IAAIK,IAAUT,EAAK,MAAM;CACvD;AACF;AAGA,SAAgBU,EACd,GACA,GACA,GACA,IAAmC,CAAC,GAC9B;CAIN,OAHIC,EAAM,WAAWA,EAAM,UAClBb,EAAUE,GAAM;EAAE,GAAGW,EAAM;EAAG,GAAGA,EAAM;CAAE,GAAGA,EAAM,QAAQT,CAAK,IAEjEC,EAASH,GAAMW,GAAO;EAAE,MAAMN,EAAK;EAAM,UAAUM,EAAM,aAAa;CAAK,CAAC;AACrF"}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import { DEFAULT_MAX_ZOOM as e, DEFAULT_MIN_ZOOM as t, normalizeZoom as n } from "./zoomBounds.js";
|
|
2
|
+
import { normalizeView as r } from "./view.js";
|
|
3
|
+
//#region src/core/viewport/zoomAt.ts
|
|
4
|
+
function i(e, t, r) {
|
|
5
|
+
let i = n(Math.min(r, Math.max(t, Math.abs(e))));
|
|
6
|
+
return e < 0 ? -i : i;
|
|
7
|
+
}
|
|
8
|
+
function a(n, a, o, s) {
|
|
9
|
+
let c = r(n), l = typeof o == "number" ? o : o.x, u = typeof o == "number" ? o : o.y, d = typeof s?.min == "number" ? s.min : s?.min?.x ?? t, f = typeof s?.min == "number" ? s.min : s?.min?.y ?? t, p = typeof s?.max == "number" ? s.max : s?.max?.x ?? e, m = typeof s?.max == "number" ? s.max : s?.max?.y ?? e, h = i(c.scale.x * l, d, p), g = i(c.scale.y * u, f, m), _ = a.x / c.scale.x + c.x, v = a.y / c.scale.y + c.y;
|
|
10
|
+
return {
|
|
11
|
+
scale: {
|
|
12
|
+
x: h,
|
|
13
|
+
y: g
|
|
14
|
+
},
|
|
15
|
+
x: _ - a.x / h,
|
|
16
|
+
y: v - a.y / g
|
|
17
|
+
};
|
|
18
|
+
}
|
|
19
|
+
//#endregion
|
|
20
|
+
export { a as zoomAt };
|
|
21
|
+
|
|
22
|
+
//# sourceMappingURL=zoomAt.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"zoomAt.js","names":["clampScale","magnitude","normalizeZoom","max","min","scale","zoomAt","view","normalizeView","input","fx","factor","fy","minX","opts","DEFAULT_MIN_ZOOM","minY","maxX","DEFAULT_MAX_ZOOM","maxY","nextX","nextY","worldX","anchor","worldY"],"sources":["../../../src/core/viewport/zoomAt.ts"],"sourcesContent":["import { normalizeView, type View, type ZoomFactor, type ZoomBound } from './view';\nimport { DEFAULT_MIN_ZOOM, DEFAULT_MAX_ZOOM, normalizeZoom } from './zoomBounds';\n\n/** Optional clamp bounds for `zoomAt`. Defaults: {@link DEFAULT_MIN_ZOOM} /\n * {@link DEFAULT_MAX_ZOOM} (per axis). */\nexport interface ZoomClampOpts {\n min?: ZoomBound;\n max?: ZoomBound;\n}\n\n/** Bound a scale's *magnitude*, keeping its direction. `scale.y < 0` is how a\n * `View` spells a y-up camera, so clamping the signed value against positive\n * bounds would flip the axis and collapse the zoom rather than limit it. */\nfunction clampScale(scale: number, min: number, max: number): number {\n const magnitude = normalizeZoom(Math.min(max, Math.max(min, Math.abs(scale))));\n return scale < 0 ? -magnitude : magnitude;\n}\n\n/**\n * Pure zoom primitive. Returns a new `View` whose `scale` is multiplied\n * by `factor` (per-axis, clamped) and whose translation is adjusted so\n * that the world point currently under `anchor` (screen coords relative\n * to the canvas top-left) stays under the same screen pixel after the\n * zoom — independently on each axis.\n *\n * `factor: number` means \"apply uniformly to both axes\". `factor: {x, y}`\n * applies per-axis factors. Likewise for `opts.min` / `opts.max`.\n */\nexport function zoomAt(\n input: View,\n anchor: { x: number; y: number },\n factor: ZoomFactor,\n opts?: ZoomClampOpts,\n): View {\n const view = normalizeView(input);\n const fx = typeof factor === 'number' ? factor : factor.x;\n const fy = typeof factor === 'number' ? factor : factor.y;\n const minX = typeof opts?.min === 'number' ? opts.min : opts?.min?.x ?? DEFAULT_MIN_ZOOM;\n const minY = typeof opts?.min === 'number' ? opts.min : opts?.min?.y ?? DEFAULT_MIN_ZOOM;\n const maxX = typeof opts?.max === 'number' ? opts.max : opts?.max?.x ?? DEFAULT_MAX_ZOOM;\n const maxY = typeof opts?.max === 'number' ? opts.max : opts?.max?.y ?? DEFAULT_MAX_ZOOM;\n\n const nextX = clampScale(view.scale.x * fx, minX, maxX);\n const nextY = clampScale(view.scale.y * fy, minY, maxY);\n\n const worldX = anchor.x / view.scale.x + view.x;\n const worldY = anchor.y / view.scale.y + view.y;\n return {\n scale: { x: nextX, y: nextY },\n x: worldX - anchor.x / nextX,\n y: worldY - anchor.y / nextY,\n };\n}\n"],"mappings":";;;AAaA,SAASA,EAAW,GAAe,GAAa,GAAqB;CACnE,IAAMC,IAAYC,EAAc,KAAK,IAAIC,GAAK,KAAK,IAAIC,GAAK,KAAK,IAAIC,CAAK,CAAC,CAAC,CAAC;CAC7E,OAAOA,IAAQ,IAAI,CAACJ,IAAYA;AAClC;AAYA,SAAgBK,EACd,GACA,GACA,GACA,GACM;CACN,IAAMC,IAAOC,EAAcC,CAAK,GAC1BC,IAAK,OAAOC,KAAW,WAAWA,IAASA,EAAO,GAClDC,IAAK,OAAOD,KAAW,WAAWA,IAASA,EAAO,GAClDE,IAAO,OAAOC,GAAM,OAAQ,WAAWA,EAAK,MAAMA,GAAM,KAAK,KAAKC,GAClEC,IAAO,OAAOF,GAAM,OAAQ,WAAWA,EAAK,MAAMA,GAAM,KAAK,KAAKC,GAClEE,IAAO,OAAOH,GAAM,OAAQ,WAAWA,EAAK,MAAMA,GAAM,KAAK,KAAKI,GAClEC,IAAO,OAAOL,GAAM,OAAQ,WAAWA,EAAK,MAAMA,GAAM,KAAK,KAAKI,GAElEE,IAAQpB,EAAWO,EAAK,MAAM,IAAIG,GAAIG,GAAMI,CAAI,GAChDI,IAAQrB,EAAWO,EAAK,MAAM,IAAIK,GAAII,GAAMG,CAAI,GAEhDG,IAASC,EAAO,IAAIhB,EAAK,MAAM,IAAIA,EAAK,GACxCiB,IAASD,EAAO,IAAIhB,EAAK,MAAM,IAAIA,EAAK;CAC9C,OAAO;EACL,OAAO;GAAE,GAAGa;GAAO,GAAGC;EAAM;EAC5B,GAAGC,IAASC,EAAO,IAAIH;EACvB,GAAGI,IAASD,EAAO,IAAIF;CACzB;AACF"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
//#region src/core/viewport/zoomBounds.ts
|
|
2
|
+
var e = .1, t = 8, n = 1e-9;
|
|
3
|
+
function r(e) {
|
|
4
|
+
return e >= n && e < Infinity ? e : ((!(e > 0) || e === Infinity) && a(`a zoom of ${e}`), n);
|
|
5
|
+
}
|
|
6
|
+
var i = !1;
|
|
7
|
+
function a(e) {
|
|
8
|
+
!i && o && (i = !0, console.warn(`[weasel] a view was given ${e} and has been clamped. A view's zoom is always positive and finite, and its position finite; see ZOOM_FLOOR.`));
|
|
9
|
+
}
|
|
10
|
+
var o = (() => {
|
|
11
|
+
try {
|
|
12
|
+
return !1;
|
|
13
|
+
} catch {
|
|
14
|
+
return !1;
|
|
15
|
+
}
|
|
16
|
+
})();
|
|
17
|
+
//#endregion
|
|
18
|
+
export { t as DEFAULT_MAX_ZOOM, e as DEFAULT_MIN_ZOOM, n as ZOOM_FLOOR, r as normalizeZoom, a as warnInvalidView };
|
|
19
|
+
|
|
20
|
+
//# sourceMappingURL=zoomBounds.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"zoomBounds.js","names":["DEFAULT_MIN_ZOOM","DEFAULT_MAX_ZOOM","ZOOM_FLOOR","normalizeZoom","zoom","warnInvalidView","warned","IS_DEV","what"],"sources":["../../../src/core/viewport/zoomBounds.ts"],"sourcesContent":["/**\n * The kit's system-wide zoom clamp, in `View.scale` units (pixels per world\n * unit): `1` is 100%, `0.1` is 10%, `8` is 800%.\n *\n * Every zoom path defaults from these — `zoomAt`, the `viewport.zoom` and\n * pinch actions, `fitViewToBounds`, `computeWheelAction`. They\n * used to carry two disagreeing pairs, so a fit could legally land at 10x\n * and the next pinch frame would clamp it back to 8x.\n */\nexport const DEFAULT_MIN_ZOOM = 0.1;\n/** Upper end of the kit's default zoom clamp — 800%. See {@link DEFAULT_MIN_ZOOM}. */\nexport const DEFAULT_MAX_ZOOM = 8;\n\n/**\n * The smallest zoom magnitude a view can hold, in `View.scale` units.\n *\n * A view's zoom is always finite and at least this far from 0. Nothing can be\n * drawn or picked through a zoom of 0, and every screen↔world conversion\n * divides by it, so it is ruled out where views are made rather than handled\n * by each conversion. This is validity, not an interaction limit: that is\n * {@link DEFAULT_MIN_ZOOM}, which a consumer may set far below.\n */\nexport const ZOOM_FLOOR = 1e-9;\n\n/**\n * The one rule for a zoom magnitude: a finite number no smaller than\n * {@link ZOOM_FLOOR}. Anything else (0, negative, NaN, ±Infinity) becomes the\n * floor. Dev builds warn once when a zoom that was never valid arrives; a\n * positive zoom that merely undershoots the floor clamps silently.\n */\nexport function normalizeZoom(zoom: number): number {\n if (zoom >= ZOOM_FLOOR && zoom < Infinity) return zoom;\n if (!(zoom > 0) || zoom === Infinity) warnInvalidView(`a zoom of ${zoom}`);\n return ZOOM_FLOOR;\n}\n\nlet warned = false;\n\n/** @internal Once per session, in dev builds only. */\nexport function warnInvalidView(what: string): void {\n if (warned || !IS_DEV) return;\n warned = true;\n console.warn(\n `[weasel] a view was given ${what} and has been clamped. A view's zoom is ` +\n 'always positive and finite, and its position finite; see ZOOM_FLOOR.',\n );\n}\n\n/** `import.meta.env.DEV` read through a cast, as in SceneCanvas.tsx. */\nconst IS_DEV: boolean = (() => {\n try {\n return Boolean((import.meta as unknown as { env?: { DEV?: boolean } }).env?.DEV);\n } catch {\n return false;\n }\n})();\n"],"mappings":";AASA,IAAaA,IAAmB,IAEnBC,IAAmB,GAWnBC,IAAa;AAQ1B,SAAgBC,EAAc,GAAsB;CAGlD,OAFIC,KAAQF,KAAcE,IAAO,WAAiBA,MAC9C,EAAEA,IAAO,MAAMA,MAAS,aAAUC,EAAgB,aAAaD,GAAM,GAClEF;AACT;AAEA,IAAII,IAAS;AAGb,SAAgBD,EAAgB,GAAoB;CAClD,AAAI,MAAWE,MACf,IAAS,IACT,QAAQ,KACN,6BAA6BC,EAAK,6GAEpC;AACF;AAGA,IAAMD,WAAyB;CAC7B,IAAI;EACF,OAAO,CAAA;CACT,QAAQ;EACN,OAAO;CACT;AACF,EAAA,CAAG"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { B as BoundsConstraint, P as PointSnapBehavior
|
|
2
|
-
import { Bounds, ResizeAnchor
|
|
1
|
+
import { B as BoundsConstraint, P as PointSnapBehavior } from './types-B_9g6hMM.js';
|
|
2
|
+
import { Bounds, ResizeAnchor } from '@weasel-js/routing';
|
|
3
3
|
|
|
4
4
|
/** Option surface for the `resize` action. */
|
|
5
5
|
|
|
@@ -114,14 +114,4 @@ declare function fixedCornerOf(bounds: Bounds, anchor: ResizeAnchor): {
|
|
|
114
114
|
y: number;
|
|
115
115
|
};
|
|
116
116
|
|
|
117
|
-
|
|
118
|
-
* corner, the fixed corner, or the center, per `frame` — to a grid, moving
|
|
119
|
-
* the whole pose by the same delta. Unlike the bounds-level `snapToGrid`,
|
|
120
|
-
* this preserves the node's dimensions. */
|
|
121
|
-
declare function pointSnapToGrid<TPose extends Bounds>(args: {
|
|
122
|
-
spacing: number;
|
|
123
|
-
frame?: PointSnapFrame;
|
|
124
|
-
bypassKey?: keyof ModifierState;
|
|
125
|
-
}): PointSnapBehavior<TPose>;
|
|
126
|
-
|
|
127
|
-
export { CORNER_ANCHORS as C, type UseResizeOptions as U, type CornerAnchor as a, type CornerHandle as b, cornerPoint as c, cornerResizeHandles as d, type CornerEdge as e, fixedCornerOf as f, hitCornerHandle as h, pointSnapToGrid as p };
|
|
117
|
+
export { CORNER_ANCHORS as C, type UseResizeOptions as U, type CornerAnchor as a, type CornerHandle as b, cornerPoint as c, cornerResizeHandles as d, type CornerEdge as e, fixedCornerOf as f, hitCornerHandle as h };
|
|
@@ -0,0 +1,358 @@
|
|
|
1
|
+
import { viewToTransform as e } from "../core/viewport/view.js";
|
|
2
|
+
import { worldToScreen as t } from "../core/viewport/viewTransform.js";
|
|
3
|
+
import { rotatePoint as n } from "../interactions/actions/rotate/geometry.js";
|
|
4
|
+
import { textCommandFromRuns as r } from "../features/text/textCommand.js";
|
|
5
|
+
import { DEFAULT_DEBUG_STROKES as i, DEFAULT_DEBUG_THEME as a } from "./defaultTheme.js";
|
|
6
|
+
import { PATH_L as o, PATH_M as s, PATH_Z as c } from "@weasel-js/geom";
|
|
7
|
+
//#region src/debug/createDebugOverlayLayer.ts
|
|
8
|
+
var l = 60;
|
|
9
|
+
function u({ sink: e, config: t }) {
|
|
10
|
+
let n = [];
|
|
11
|
+
return {
|
|
12
|
+
id: "debug-overlay",
|
|
13
|
+
label: "Debug overlay",
|
|
14
|
+
space: "screen",
|
|
15
|
+
alwaysOn: !0,
|
|
16
|
+
draw: (r, i, a) => (t.fps ? (n.push(typeof performance < "u" ? performance.now() : Date.now()), n.length > l && n.shift()) : n.length > 0 && (n.length = 0), d(e.snapshot(), t, i, a, n))
|
|
17
|
+
};
|
|
18
|
+
}
|
|
19
|
+
function d(t, n, r, o, s = []) {
|
|
20
|
+
let c = {
|
|
21
|
+
...a,
|
|
22
|
+
...n.theme ?? {}
|
|
23
|
+
}, l = {
|
|
24
|
+
...i,
|
|
25
|
+
...n.strokes ?? {}
|
|
26
|
+
}, u = t, d = e(r), f = [];
|
|
27
|
+
return n.viewport && u.viewport && A(f, u.viewport, r, o, c, l), n.hitboxes && _(f, u, r, d, c, l), n.bounds && v(f, u, r, d, c, l), n.handles && y(f, u, d, c, l), n.origins && b(f, u, d, c), n.snap && x(f, u, d, c, l), n.ids && S(f, u, d, c), n.layers && C(f, u, o, c), n.fps && k(f, s, u.frame, c), f;
|
|
28
|
+
}
|
|
29
|
+
function f(e, t, n, r = 24) {
|
|
30
|
+
return p(e, t, n, n, r);
|
|
31
|
+
}
|
|
32
|
+
function p(e, t, n, r, i = 24) {
|
|
33
|
+
let a = new Uint8Array(i + 1), l = new Float32Array(i * 2);
|
|
34
|
+
a[0] = s, l[0] = e + n, l[1] = t;
|
|
35
|
+
for (let s = 1; s < i; s++) {
|
|
36
|
+
a[s] = o;
|
|
37
|
+
let c = s / i * Math.PI * 2;
|
|
38
|
+
l[s * 2] = e + n * Math.cos(c), l[s * 2 + 1] = t + r * Math.sin(c);
|
|
39
|
+
}
|
|
40
|
+
return a[i] = c, {
|
|
41
|
+
kind: "polygon",
|
|
42
|
+
commands: a,
|
|
43
|
+
coords: l,
|
|
44
|
+
fillRule: "nonzero"
|
|
45
|
+
};
|
|
46
|
+
}
|
|
47
|
+
function m(e, r) {
|
|
48
|
+
let i = e.x + e.width / 2, a = e.y + e.height / 2, l = /* @__PURE__ */ new Float32Array(8);
|
|
49
|
+
return [
|
|
50
|
+
[e.x, e.y],
|
|
51
|
+
[e.x + e.width, e.y],
|
|
52
|
+
[e.x + e.width, e.y + e.height],
|
|
53
|
+
[e.x, e.y + e.height]
|
|
54
|
+
].forEach(([o, s], c) => {
|
|
55
|
+
let u = n(o, s, i, a, e.rotation), [d, f] = t(u.x, u.y, r);
|
|
56
|
+
l[c * 2] = d, l[c * 2 + 1] = f;
|
|
57
|
+
}), {
|
|
58
|
+
kind: "polygon",
|
|
59
|
+
commands: new Uint8Array([
|
|
60
|
+
s,
|
|
61
|
+
o,
|
|
62
|
+
o,
|
|
63
|
+
o,
|
|
64
|
+
c
|
|
65
|
+
]),
|
|
66
|
+
coords: l,
|
|
67
|
+
fillRule: "nonzero"
|
|
68
|
+
};
|
|
69
|
+
}
|
|
70
|
+
function h(e, t, n, r) {
|
|
71
|
+
return {
|
|
72
|
+
kind: "rect",
|
|
73
|
+
x: e,
|
|
74
|
+
y: t,
|
|
75
|
+
width: n,
|
|
76
|
+
height: r
|
|
77
|
+
};
|
|
78
|
+
}
|
|
79
|
+
function g(e, t) {
|
|
80
|
+
return {
|
|
81
|
+
paint: {
|
|
82
|
+
fill: "solid",
|
|
83
|
+
color: t
|
|
84
|
+
},
|
|
85
|
+
width: e.width,
|
|
86
|
+
...e.dash && e.dash.length > 0 ? { dash: [...e.dash] } : {}
|
|
87
|
+
};
|
|
88
|
+
}
|
|
89
|
+
function _(e, n, r, i, a, l) {
|
|
90
|
+
let u = {
|
|
91
|
+
fill: "solid",
|
|
92
|
+
color: a.hitboxFill
|
|
93
|
+
}, d = g(l.hitbox, a.hitboxStroke);
|
|
94
|
+
for (let a of n.hitboxes) if (a.shape.kind === "rect" && a.shape.rotation) {
|
|
95
|
+
let t = m({
|
|
96
|
+
...a.shape,
|
|
97
|
+
rotation: a.shape.rotation
|
|
98
|
+
}, i);
|
|
99
|
+
e.push({
|
|
100
|
+
kind: "path",
|
|
101
|
+
path: t,
|
|
102
|
+
fill: u,
|
|
103
|
+
stroke: d
|
|
104
|
+
});
|
|
105
|
+
} else if (a.shape.kind === "rect") {
|
|
106
|
+
let [n, o] = t(a.shape.x, a.shape.y, i), s = a.shape.width * r.scale.x, c = a.shape.height * r.scale.y;
|
|
107
|
+
e.push({
|
|
108
|
+
kind: "path",
|
|
109
|
+
path: h(n, o, s, c),
|
|
110
|
+
fill: u,
|
|
111
|
+
stroke: d
|
|
112
|
+
});
|
|
113
|
+
} else if (a.shape.kind === "circle") {
|
|
114
|
+
let [n, o] = t(a.shape.cx, a.shape.cy, i), s = a.shape.r * Math.abs(r.scale.x), c = a.shape.r * Math.abs(r.scale.y);
|
|
115
|
+
e.push({
|
|
116
|
+
kind: "path",
|
|
117
|
+
path: p(n, o, s, c),
|
|
118
|
+
fill: u,
|
|
119
|
+
stroke: d
|
|
120
|
+
});
|
|
121
|
+
} else if (a.shape.kind === "polygon" && a.shape.points.length > 2) {
|
|
122
|
+
let n = a.shape.points, r = new Float32Array(n.length * 2);
|
|
123
|
+
n.forEach((e, n) => {
|
|
124
|
+
let [a, o] = t(e.x, e.y, i);
|
|
125
|
+
r[n * 2] = a, r[n * 2 + 1] = o;
|
|
126
|
+
});
|
|
127
|
+
let l = new Uint8Array(n.length + 1).fill(o);
|
|
128
|
+
l[0] = s, l[n.length] = c, e.push({
|
|
129
|
+
kind: "path",
|
|
130
|
+
path: {
|
|
131
|
+
kind: "polygon",
|
|
132
|
+
commands: l,
|
|
133
|
+
coords: r,
|
|
134
|
+
fillRule: "nonzero"
|
|
135
|
+
},
|
|
136
|
+
fill: u,
|
|
137
|
+
stroke: d
|
|
138
|
+
});
|
|
139
|
+
}
|
|
140
|
+
}
|
|
141
|
+
function v(e, n, r, i, a, o) {
|
|
142
|
+
let s = g(o.bounds, a.bounds);
|
|
143
|
+
for (let a of n.bounds) {
|
|
144
|
+
let [n, o] = t(a.bounds.x, a.bounds.y, i), c = a.bounds.width * r.scale.x, l = a.bounds.height * r.scale.y;
|
|
145
|
+
e.push({
|
|
146
|
+
kind: "path",
|
|
147
|
+
path: h(n, o, c, l),
|
|
148
|
+
stroke: s
|
|
149
|
+
});
|
|
150
|
+
}
|
|
151
|
+
}
|
|
152
|
+
function y(e, n, r, i, a) {
|
|
153
|
+
let c = g(a.handle, i.handle);
|
|
154
|
+
for (let i of n.handles) {
|
|
155
|
+
let [n, a] = t(i.position.x, i.position.y, r), l = {
|
|
156
|
+
kind: "polygon",
|
|
157
|
+
commands: new Uint8Array([s, o]),
|
|
158
|
+
coords: new Float32Array([
|
|
159
|
+
n - 4,
|
|
160
|
+
a,
|
|
161
|
+
n + 4,
|
|
162
|
+
a
|
|
163
|
+
]),
|
|
164
|
+
fillRule: "nonzero"
|
|
165
|
+
}, u = {
|
|
166
|
+
kind: "polygon",
|
|
167
|
+
commands: new Uint8Array([s, o]),
|
|
168
|
+
coords: new Float32Array([
|
|
169
|
+
n,
|
|
170
|
+
a - 4,
|
|
171
|
+
n,
|
|
172
|
+
a + 4
|
|
173
|
+
]),
|
|
174
|
+
fillRule: "nonzero"
|
|
175
|
+
};
|
|
176
|
+
e.push({
|
|
177
|
+
kind: "path",
|
|
178
|
+
path: l,
|
|
179
|
+
stroke: c
|
|
180
|
+
}), e.push({
|
|
181
|
+
kind: "path",
|
|
182
|
+
path: u,
|
|
183
|
+
stroke: c
|
|
184
|
+
});
|
|
185
|
+
}
|
|
186
|
+
}
|
|
187
|
+
function b(e, n, r, i) {
|
|
188
|
+
let a = {
|
|
189
|
+
fill: "solid",
|
|
190
|
+
color: i.origin
|
|
191
|
+
};
|
|
192
|
+
for (let i of n.origins) {
|
|
193
|
+
let [n, o] = t(i.point.x, i.point.y, r);
|
|
194
|
+
e.push({
|
|
195
|
+
kind: "path",
|
|
196
|
+
path: f(n, o, 3),
|
|
197
|
+
fill: a
|
|
198
|
+
});
|
|
199
|
+
}
|
|
200
|
+
}
|
|
201
|
+
function x(e, n, r, i, a) {
|
|
202
|
+
let o = i.snap;
|
|
203
|
+
for (let i of n.snap) {
|
|
204
|
+
let [n, s] = t(i.point.x, i.point.y, r), c = {
|
|
205
|
+
kind: "path",
|
|
206
|
+
path: f(n, s, 4),
|
|
207
|
+
...i.accepted ? { fill: {
|
|
208
|
+
fill: "solid",
|
|
209
|
+
color: o
|
|
210
|
+
} } : { stroke: g(a.snap, o) }
|
|
211
|
+
};
|
|
212
|
+
e.push(c);
|
|
213
|
+
}
|
|
214
|
+
}
|
|
215
|
+
function S(e, n, i, a) {
|
|
216
|
+
for (let o of n.bounds) {
|
|
217
|
+
let [n, s] = t(o.bounds.x, o.bounds.y, i);
|
|
218
|
+
e.push(r(n + 2, s + 11, [{
|
|
219
|
+
text: o.id,
|
|
220
|
+
fill: {
|
|
221
|
+
fill: "solid",
|
|
222
|
+
color: a.idText
|
|
223
|
+
}
|
|
224
|
+
}], {
|
|
225
|
+
fontFamily: "ui-monospace, Menlo, monospace",
|
|
226
|
+
fontSize: 10
|
|
227
|
+
}));
|
|
228
|
+
}
|
|
229
|
+
}
|
|
230
|
+
function C(e, t, n, i) {
|
|
231
|
+
if (t.layers.length === 0) return;
|
|
232
|
+
let a = t.layers.map((e) => `[${e.index}] ${e.id} (${e.space})`), o = 0;
|
|
233
|
+
for (let e of a) o = Math.max(o, e.length * 6.6);
|
|
234
|
+
let s = o + 12, c = a.length * 14 + 8, l = n.width - s - 8;
|
|
235
|
+
e.push({
|
|
236
|
+
kind: "path",
|
|
237
|
+
path: h(l, 8, s, c),
|
|
238
|
+
fill: {
|
|
239
|
+
fill: "solid",
|
|
240
|
+
color: i.layerTextBg
|
|
241
|
+
}
|
|
242
|
+
});
|
|
243
|
+
for (let t = 0; t < a.length; t++) e.push(r(l + 6, 12 + t * 14, [{
|
|
244
|
+
text: a[t],
|
|
245
|
+
fill: {
|
|
246
|
+
fill: "solid",
|
|
247
|
+
color: i.layerText
|
|
248
|
+
}
|
|
249
|
+
}], {
|
|
250
|
+
fontFamily: "ui-monospace, Menlo, monospace",
|
|
251
|
+
fontSize: 11
|
|
252
|
+
}));
|
|
253
|
+
}
|
|
254
|
+
var w = {
|
|
255
|
+
fontFamily: "ui-monospace, Menlo, monospace",
|
|
256
|
+
fontSize: 11
|
|
257
|
+
}, T = 6.6, E = 14;
|
|
258
|
+
function D(e, t, n, i, a, o) {
|
|
259
|
+
let s = 0;
|
|
260
|
+
for (let e of t) s = Math.max(s, e.length);
|
|
261
|
+
e.push({
|
|
262
|
+
kind: "path",
|
|
263
|
+
path: h(n, i, s * T + 12, t.length * E + 8),
|
|
264
|
+
fill: {
|
|
265
|
+
fill: "solid",
|
|
266
|
+
color: o
|
|
267
|
+
}
|
|
268
|
+
});
|
|
269
|
+
for (let o = 0; o < t.length; o++) e.push(r(n + 6, i + 4 + o * E, [{
|
|
270
|
+
text: t[o],
|
|
271
|
+
fill: {
|
|
272
|
+
fill: "solid",
|
|
273
|
+
color: a
|
|
274
|
+
}
|
|
275
|
+
}], w));
|
|
276
|
+
}
|
|
277
|
+
function O(e, t, n) {
|
|
278
|
+
return e.toFixed(n).padStart(t);
|
|
279
|
+
}
|
|
280
|
+
function k(e, t, n, r) {
|
|
281
|
+
let i = t.length >= 2 ? t[t.length - 1] - t[0] : 0, a = i > 0 ? i / (t.length - 1) : null, o = [[
|
|
282
|
+
"fps",
|
|
283
|
+
null,
|
|
284
|
+
a ? 1e3 / a : null,
|
|
285
|
+
" "
|
|
286
|
+
], [
|
|
287
|
+
"frame",
|
|
288
|
+
null,
|
|
289
|
+
a,
|
|
290
|
+
"ms"
|
|
291
|
+
]];
|
|
292
|
+
if (n) {
|
|
293
|
+
o.push([
|
|
294
|
+
"paint",
|
|
295
|
+
n.drawCalls,
|
|
296
|
+
n.paintMs,
|
|
297
|
+
"ms"
|
|
298
|
+
]);
|
|
299
|
+
for (let e of n.layers) o.push([
|
|
300
|
+
e.id,
|
|
301
|
+
e.drawCalls,
|
|
302
|
+
e.ms,
|
|
303
|
+
"ms"
|
|
304
|
+
]);
|
|
305
|
+
}
|
|
306
|
+
let s = 0;
|
|
307
|
+
for (let [e] of o) s = Math.max(s, e.length);
|
|
308
|
+
let c = (e, t, n, r) => `${e.padEnd(s)} ${t.padStart(5)} ${n.padStart(7)} ${r}`, l = o.map(([e, t, n, r]) => c(e, t === null ? "" : String(t), n === null ? "—" : O(n, 7, 2), r));
|
|
309
|
+
n && l.splice(2, 0, c("", "draws", "cpu", " ")), D(e, l, 8, 8, r.fpsText, r.fpsTextBg);
|
|
310
|
+
}
|
|
311
|
+
function A(n, r, i, a, o, s) {
|
|
312
|
+
let c = e(i), l = g(s.viewport, o.viewport), { from: u, to: d } = r, [p, m] = t(u.x, u.y, c);
|
|
313
|
+
if (n.push({
|
|
314
|
+
kind: "path",
|
|
315
|
+
path: h(p, m, a.width / u.scale.x * i.scale.x, a.height / u.scale.y * i.scale.y),
|
|
316
|
+
stroke: l
|
|
317
|
+
}), r.anchor) {
|
|
318
|
+
let [i, a] = t(r.anchor.x, r.anchor.y, e(u)), [d, p] = t(r.anchor.x, r.anchor.y, c);
|
|
319
|
+
n.push({
|
|
320
|
+
kind: "path",
|
|
321
|
+
path: f(i, a, 2.5),
|
|
322
|
+
fill: {
|
|
323
|
+
fill: "solid",
|
|
324
|
+
color: o.viewport
|
|
325
|
+
}
|
|
326
|
+
}), Math.hypot(d - i, p - a) > .5 && n.push({
|
|
327
|
+
kind: "path",
|
|
328
|
+
path: M(i, a, d, p),
|
|
329
|
+
stroke: l
|
|
330
|
+
}), n.push({
|
|
331
|
+
kind: "path",
|
|
332
|
+
path: f(d, p, 6),
|
|
333
|
+
stroke: g({ width: s.viewport.width }, o.viewport)
|
|
334
|
+
});
|
|
335
|
+
}
|
|
336
|
+
D(n, [r.kind === "pan" ? `pan Δ ${j((u.x - d.x) * d.scale.x)} ${j((u.y - d.y) * d.scale.y)} px` : `zoom ×${(d.scale.x / u.scale.x).toFixed(3)} ${u.scale.x.toFixed(3)} → ${d.scale.x.toFixed(3)}`], 8, a.height - E - 16, o.viewport, o.layerTextBg);
|
|
337
|
+
}
|
|
338
|
+
function j(e) {
|
|
339
|
+
let t = Math.abs(e) < .05 ? 0 : e;
|
|
340
|
+
return `${t >= 0 ? "+" : "-"}${Math.abs(t).toFixed(1)}`.padStart(8);
|
|
341
|
+
}
|
|
342
|
+
function M(e, t, n, r) {
|
|
343
|
+
return {
|
|
344
|
+
kind: "polygon",
|
|
345
|
+
commands: new Uint8Array([s, o]),
|
|
346
|
+
coords: new Float32Array([
|
|
347
|
+
e,
|
|
348
|
+
t,
|
|
349
|
+
n,
|
|
350
|
+
r
|
|
351
|
+
]),
|
|
352
|
+
fillRule: "nonzero"
|
|
353
|
+
};
|
|
354
|
+
}
|
|
355
|
+
//#endregion
|
|
356
|
+
export { d as buildDebugOverlayCommands, u as createDebugOverlayLayer };
|
|
357
|
+
|
|
358
|
+
//# sourceMappingURL=createDebugOverlayLayer.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"createDebugOverlayLayer.js","names":["rectPath","FPS_WINDOW","createDebugOverlayLayer","fpsHistory","config","buildDebugOverlayCommands","sink","view","dims","theme","DEFAULT_DEBUG_THEME","strokes","DEFAULT_DEBUG_STROKES","s","snapshot","t","viewToTransform","out","emitViewport","emitHitboxes","emitBounds","emitHandles","emitOrigins","emitSnap","emitIds","emitLayersPanel","emitFramePanel","frameTimes","approxCircleScreen","approxEllipseScreen","cx","cy","r","segments","cmds","coords","PATH_M","rx","i","PATH_L","theta","ry","PATH_Z","rotatedRectScreen","x","y","w","rotatePoint","sx","sy","worldToScreen","rectPath$1","h","strokeOf","fill","stroke","path","sw","sh","pts","p","commands","b","horiz","vert","o","color","c","cmd","textCommandFromRuns","lines","l","maxW","line","boxW","boxH","MONO","MONO_CHAR_W","LINE_H","emitTextPanel","maxLen","bg","fixed","v","decimals","width","span","history","interval","rows","frame","labelW","label","count","value","unit","rec","fx","fy","from","ax0","ay0","ax1","ay1","segment","signed","to","x0","y0","x1","y1"],"sources":["../../src/debug/createDebugOverlayLayer.ts"],"sourcesContent":["import type { DrawCommand, PathDrawCommand } from '../renderer';\nimport type { Dims, RenderLayer } from 'core/layers/render';\nimport type { View } from 'core/viewport/view';\nimport { viewToTransform } from 'core/viewport/view';\nimport { worldToScreen } from 'core/viewport/viewTransform';\nimport { rotatePoint } from 'interactions/actions/rotate/geometry';\nimport { PATH_L, PATH_M, PATH_Z, type PolygonPath } from '@weasel-js/geom';\nimport { textCommandFromRuns } from 'features/text/textCommand';\nimport type {\n DebugConfig,\n DebugSnapshot,\n DebugStroke,\n DebugStrokes,\n DebugTheme,\n FrameStats,\n RecordedViewport,\n} from './types';\nimport { DEFAULT_DEBUG_STROKES, DEFAULT_DEBUG_THEME } from './defaultTheme';\n\n/** @internal */\ninterface CreateDebugOverlayLayerOpts {\n sink: { snapshot(): DebugSnapshot };\n config: DebugConfig;\n}\n\nconst FPS_WINDOW = 60;\n\n/**\n * Screen-space `RenderLayer` that paints the sink's snapshot. Appended at\n * the top of the Canvas's layer stack when `debug` is enabled. World-space\n * coords in the snapshot are projected through `view` here, since the\n * layer itself runs at identity transform.\n */\nexport function createDebugOverlayLayer({\n sink,\n config,\n}: CreateDebugOverlayLayerOpts): RenderLayer<unknown> {\n // Timestamps of the last FPS_WINDOW draws; survives across draws within\n // one Canvas mount.\n const fpsHistory: number[] = [];\n return {\n id: 'debug-overlay',\n label: 'Debug overlay',\n space: 'screen',\n alwaysOn: true,\n draw: (_data, view, dims) => {\n if (config.fps) {\n fpsHistory.push(typeof performance !== 'undefined' ? performance.now() : Date.now());\n if (fpsHistory.length > FPS_WINDOW) fpsHistory.shift();\n } else if (fpsHistory.length > 0) {\n fpsHistory.length = 0;\n }\n return buildDebugOverlayCommands(sink.snapshot(), config, view, dims, fpsHistory);\n },\n };\n}\n\n/**\n * The debug overlay's draw commands for one snapshot, in screen space (CSS\n * pixels of a `dims`-sized canvas looking through `view`). What the overlay\n * layer paints each frame, and what `renderDebugSnapshot` rasterizes.\n *\n * `frameTimes` are `performance.now()` stamps of recent paints, oldest first;\n * the frame panel derives its rate from them and shows none without two.\n */\nexport function buildDebugOverlayCommands(\n snapshot: DebugSnapshot,\n config: DebugConfig,\n view: View,\n dims: Dims,\n frameTimes: readonly number[] = [],\n): DrawCommand[] {\n const theme: DebugTheme = { ...DEFAULT_DEBUG_THEME, ...(config.theme ?? {}) };\n const strokes: DebugStrokes = { ...DEFAULT_DEBUG_STROKES, ...(config.strokes ?? {}) };\n const s = snapshot;\n const t = viewToTransform(view);\n const out: DrawCommand[] = [];\n\n if (config.viewport && s.viewport) emitViewport(out, s.viewport, view, dims, theme, strokes);\n if (config.hitboxes) emitHitboxes(out, s, view, t, theme, strokes);\n if (config.bounds) emitBounds(out, s, view, t, theme, strokes);\n if (config.handles) emitHandles(out, s, t, theme, strokes);\n if (config.origins) emitOrigins(out, s, t, theme);\n if (config.snap) emitSnap(out, s, t, theme, strokes);\n if (config.ids) emitIds(out, s, t, theme);\n if (config.layers) emitLayersPanel(out, s, dims, theme);\n if (config.fps) emitFramePanel(out, frameTimes, s.frame, theme);\n return out;\n}\n\n// --- emitters (screen-space) ---\n\nfunction approxCircleScreen(cx: number, cy: number, r: number, segments = 24): PolygonPath {\n return approxEllipseScreen(cx, cy, r, r, segments);\n}\n\nfunction approxEllipseScreen(cx: number, cy: number, rx: number, ry: number, segments = 24): PolygonPath {\n // Commands: M + (segments-1) L + Z. Coords: (segments) × 2 — pairs for\n // the moveTo and the (segments-1) lineTos. PATH_Z consumes no coords.\n const cmds = new Uint8Array(segments + 1);\n const coords = new Float32Array(segments * 2);\n cmds[0] = PATH_M;\n coords[0] = cx + rx;\n coords[1] = cy;\n for (let i = 1; i < segments; i++) {\n cmds[i] = PATH_L;\n const theta = (i / segments) * Math.PI * 2;\n coords[i * 2] = cx + rx * Math.cos(theta);\n coords[i * 2 + 1] = cy + ry * Math.sin(theta);\n }\n cmds[segments] = PATH_Z;\n return { kind: 'polygon', commands: cmds, coords, fillRule: 'nonzero' };\n}\n\n/** A world rect turned `rotation` about its center, as the screen quad it\n * lands on. */\nfunction rotatedRectScreen(\n r: { x: number; y: number; width: number; height: number; rotation: number },\n t: ReturnType<typeof viewToTransform>,\n): PolygonPath {\n const cx = r.x + r.width / 2, cy = r.y + r.height / 2;\n const coords = new Float32Array(8);\n const corners = [[r.x, r.y], [r.x + r.width, r.y], [r.x + r.width, r.y + r.height], [r.x, r.y + r.height]];\n corners.forEach(([x, y], i) => {\n const w = rotatePoint(x, y, cx, cy, r.rotation);\n const [sx, sy] = worldToScreen(w.x, w.y, t);\n coords[i * 2] = sx;\n coords[i * 2 + 1] = sy;\n });\n return {\n kind: 'polygon',\n commands: new Uint8Array([PATH_M, PATH_L, PATH_L, PATH_L, PATH_Z]),\n coords,\n fillRule: 'nonzero',\n };\n}\n\nfunction rectPath(x: number, y: number, w: number, h: number): { kind: 'rect'; x: number; y: number; width: number; height: number } {\n return { kind: 'rect', x, y, width: w, height: h };\n}\n\n/** A `DebugStroke` + color as the renderer's stroke shape. `dash` is dropped\n * when empty rather than passed through, so a solid line stays solid. */\nfunction strokeOf(s: DebugStroke, color: string) {\n return {\n paint: { fill: 'solid' as const, color },\n width: s.width,\n ...(s.dash && s.dash.length > 0 ? { dash: [...s.dash] } : {}),\n };\n}\n\nfunction emitHitboxes(\n out: DrawCommand[],\n s: DebugSnapshot,\n view: View,\n t: ReturnType<typeof viewToTransform>,\n theme: DebugTheme,\n strokes: DebugStrokes,\n): void {\n const fill = { fill: 'solid' as const, color: theme.hitboxFill };\n const stroke = strokeOf(strokes.hitbox, theme.hitboxStroke);\n for (const h of s.hitboxes) {\n if (h.shape.kind === 'rect' && h.shape.rotation) {\n const path = rotatedRectScreen({ ...h.shape, rotation: h.shape.rotation }, t);\n out.push({ kind: 'path', path, fill, stroke });\n } else if (h.shape.kind === 'rect') {\n const [sx, sy] = worldToScreen(h.shape.x, h.shape.y, t);\n const sw = h.shape.width * view.scale.x;\n const sh = h.shape.height * view.scale.y;\n out.push({ kind: 'path', path: rectPath(sx, sy, sw, sh), fill, stroke });\n } else if (h.shape.kind === 'circle') {\n const [cx, cy] = worldToScreen(h.shape.cx, h.shape.cy, t);\n const rx = h.shape.r * Math.abs(view.scale.x);\n const ry = h.shape.r * Math.abs(view.scale.y);\n out.push({ kind: 'path', path: approxEllipseScreen(cx, cy, rx, ry), fill, stroke });\n } else if (h.shape.kind === 'polygon' && h.shape.points.length > 2) {\n const pts = h.shape.points;\n const coords = new Float32Array(pts.length * 2);\n pts.forEach((p, i) => {\n const [sx, sy] = worldToScreen(p.x, p.y, t);\n coords[i * 2] = sx;\n coords[i * 2 + 1] = sy;\n });\n const commands = new Uint8Array(pts.length + 1).fill(PATH_L);\n commands[0] = PATH_M;\n commands[pts.length] = PATH_Z;\n out.push({ kind: 'path', path: { kind: 'polygon', commands, coords, fillRule: 'nonzero' }, fill, stroke });\n }\n // 'path' kind: v1 punt — matches 2D behavior.\n }\n}\n\nfunction emitBounds(\n out: DrawCommand[],\n s: DebugSnapshot,\n view: View,\n t: ReturnType<typeof viewToTransform>,\n theme: DebugTheme,\n strokes: DebugStrokes,\n): void {\n const stroke = strokeOf(strokes.bounds, theme.bounds);\n for (const b of s.bounds) {\n const [sx, sy] = worldToScreen(b.bounds.x, b.bounds.y, t);\n const sw = b.bounds.width * view.scale.x;\n const sh = b.bounds.height * view.scale.y;\n out.push({ kind: 'path', path: rectPath(sx, sy, sw, sh), stroke });\n }\n}\n\nfunction emitHandles(\n out: DrawCommand[],\n s: DebugSnapshot,\n t: ReturnType<typeof viewToTransform>,\n theme: DebugTheme,\n strokes: DebugStrokes,\n): void {\n const stroke = strokeOf(strokes.handle, theme.handle);\n for (const h of s.handles) {\n const [cx, cy] = worldToScreen(h.position.x, h.position.y, t);\n const horiz: PolygonPath = {\n kind: 'polygon',\n commands: new Uint8Array([PATH_M, PATH_L]),\n coords: new Float32Array([cx - 4, cy, cx + 4, cy]),\n fillRule: 'nonzero',\n };\n const vert: PolygonPath = {\n kind: 'polygon',\n commands: new Uint8Array([PATH_M, PATH_L]),\n coords: new Float32Array([cx, cy - 4, cx, cy + 4]),\n fillRule: 'nonzero',\n };\n out.push({ kind: 'path', path: horiz, stroke });\n out.push({ kind: 'path', path: vert, stroke });\n }\n}\n\nfunction emitOrigins(\n out: DrawCommand[],\n s: DebugSnapshot,\n t: ReturnType<typeof viewToTransform>,\n theme: DebugTheme,\n): void {\n const fill = { fill: 'solid' as const, color: theme.origin };\n for (const o of s.origins) {\n const [cx, cy] = worldToScreen(o.point.x, o.point.y, t);\n out.push({ kind: 'path', path: approxCircleScreen(cx, cy, 3), fill });\n }\n}\n\nfunction emitSnap(\n out: DrawCommand[],\n s: DebugSnapshot,\n t: ReturnType<typeof viewToTransform>,\n theme: DebugTheme,\n strokes: DebugStrokes,\n): void {\n const color = theme.snap;\n for (const c of s.snap) {\n const [cx, cy] = worldToScreen(c.point.x, c.point.y, t);\n const cmd: PathDrawCommand = {\n kind: 'path',\n path: approxCircleScreen(cx, cy, 4),\n ...(c.accepted\n ? { fill: { fill: 'solid' as const, color } }\n : { stroke: strokeOf(strokes.snap, color) }),\n };\n out.push(cmd);\n }\n}\n\nfunction emitIds(\n out: DrawCommand[],\n s: DebugSnapshot,\n t: ReturnType<typeof viewToTransform>,\n theme: DebugTheme,\n): void {\n // Pulls from the bounds stream — every consumer that records bounds\n // (selection overlay's handle math, the kit's per-node debug shim) gets\n // an id label for free.\n for (const b of s.bounds) {\n const [sx, sy] = worldToScreen(b.bounds.x, b.bounds.y, t);\n out.push(textCommandFromRuns(\n sx + 2,\n sy + 11,\n [{ text: b.id, fill: { fill: 'solid', color: theme.idText } }],\n { fontFamily: 'ui-monospace, Menlo, monospace', fontSize: 10 },\n ));\n }\n}\n\nfunction emitLayersPanel(\n out: DrawCommand[],\n s: DebugSnapshot,\n dims: Dims,\n theme: DebugTheme,\n): void {\n if (s.layers.length === 0) return;\n const lineH = 14;\n const padX = 6;\n const padY = 4;\n const lines = s.layers.map((l) => `[${l.index}] ${l.id} (${l.space})`);\n // Approximate width: 11px font, monospaced — assume each glyph ≈6.6px.\n // 2D path uses ctx.measureText; we don't have a ctx here, so fall back\n // to a character-count estimate. Pixel-level accuracy is not load-bearing\n // for a debug panel; right-edge anchoring stays correct.\n const charW = 6.6;\n let maxW = 0;\n for (const line of lines) maxW = Math.max(maxW, line.length * charW);\n const boxW = maxW + padX * 2;\n const boxH = lines.length * lineH + padY * 2;\n const x = dims.width - boxW - 8;\n const y = 8;\n out.push({\n kind: 'path',\n path: rectPath(x, y, boxW, boxH),\n fill: { fill: 'solid', color: theme.layerTextBg },\n });\n for (let i = 0; i < lines.length; i++) {\n out.push(textCommandFromRuns(\n x + padX,\n y + padY + i * lineH,\n [{ text: lines[i], fill: { fill: 'solid', color: theme.layerText } }],\n { fontFamily: 'ui-monospace, Menlo, monospace', fontSize: 11 },\n ));\n }\n}\n\nconst MONO = { fontFamily: 'ui-monospace, Menlo, monospace', fontSize: 11 };\nconst MONO_CHAR_W = 6.6;\nconst LINE_H = 14;\n\n/** A dark box holding monospace lines, at `(x, y)`; `y < 0` anchors its bottom\n * that far above `bottom`. Width is estimated from the character count — there\n * is no text measurer here, and a debug panel does not need one. */\nfunction emitTextPanel(\n out: DrawCommand[],\n lines: readonly string[],\n x: number,\n y: number,\n color: string,\n bg: string,\n): void {\n const padX = 6;\n const padY = 4;\n let maxLen = 0;\n for (const l of lines) maxLen = Math.max(maxLen, l.length);\n out.push({\n kind: 'path',\n path: rectPath(x, y, maxLen * MONO_CHAR_W + padX * 2, lines.length * LINE_H + padY * 2),\n fill: { fill: 'solid', color: bg },\n });\n for (let i = 0; i < lines.length; i++) {\n out.push(textCommandFromRuns(\n x + padX,\n y + padY + i * LINE_H,\n [{ text: lines[i], fill: { fill: 'solid', color } }],\n MONO,\n ));\n }\n}\n\n/** Fixed-width number, right-aligned, `decimals` places: `%{width}.{decimals}f`. */\nfunction fixed(v: number, width: number, decimals: number): string {\n return v.toFixed(decimals).padStart(width);\n}\n\nfunction emitFramePanel(\n out: DrawCommand[],\n history: readonly number[],\n frame: FrameStats | null,\n theme: DebugTheme,\n): void {\n const span = history.length >= 2 ? history[history.length - 1] - history[0] : 0;\n const interval = span > 0 ? span / (history.length - 1) : null;\n // Columns: label, draw-call count, value, unit — every row the same width,\n // so decimals line up down the panel.\n const rows: [label: string, count: number | null, value: number | null, unit: string][] = [\n ['fps', null, interval ? 1000 / interval : null, ' '],\n ['frame', null, interval, 'ms'],\n ];\n if (frame) {\n rows.push(['paint', frame.drawCalls, frame.paintMs, 'ms']);\n for (const l of frame.layers) rows.push([l.id, l.drawCalls, l.ms, 'ms']);\n }\n let labelW = 0;\n for (const [label] of rows) labelW = Math.max(labelW, label.length);\n const line = (label: string, count: string, value: string, unit: string) =>\n `${label.padEnd(labelW)} ${count.padStart(5)} ${value.padStart(7)} ${unit}`;\n const lines = rows.map(([label, count, value, unit]) =>\n line(label, count === null ? '' : String(count), value === null ? '—' : fixed(value, 7, 2), unit));\n if (frame) lines.splice(2, 0, line('', 'draws', 'cpu', ' '));\n emitTextPanel(out, lines, 8, 8, theme.fpsText, theme.fpsTextBg);\n}\n\nfunction emitViewport(\n out: DrawCommand[],\n rec: RecordedViewport,\n view: View,\n dims: Dims,\n theme: DebugTheme,\n strokes: DebugStrokes,\n): void {\n const t = viewToTransform(view);\n const stroke = strokeOf(strokes.viewport, theme.viewport);\n // Where the viewport the gesture started from sits in the current camera.\n const { from, to } = rec;\n const [fx, fy] = worldToScreen(from.x, from.y, t);\n out.push({\n kind: 'path',\n path: rectPath(fx, fy, (dims.width / from.scale.x) * view.scale.x, (dims.height / from.scale.y) * view.scale.y),\n stroke,\n });\n if (rec.anchor) {\n const [ax0, ay0] = worldToScreen(rec.anchor.x, rec.anchor.y, viewToTransform(from));\n const [ax1, ay1] = worldToScreen(rec.anchor.x, rec.anchor.y, t);\n out.push({ kind: 'path', path: approxCircleScreen(ax0, ay0, 2.5), fill: { fill: 'solid', color: theme.viewport } });\n if (Math.hypot(ax1 - ax0, ay1 - ay0) > 0.5) {\n out.push({ kind: 'path', path: segment(ax0, ay0, ax1, ay1), stroke });\n }\n out.push({ kind: 'path', path: approxCircleScreen(ax1, ay1, 6), stroke: strokeOf({ width: strokes.viewport.width }, theme.viewport) });\n }\n const text = rec.kind === 'pan'\n ? `pan Δ ${signed((from.x - to.x) * to.scale.x)} ${signed((from.y - to.y) * to.scale.y)} px`\n : `zoom ×${(to.scale.x / from.scale.x).toFixed(3)} ${from.scale.x.toFixed(3)} → ${to.scale.x.toFixed(3)}`;\n emitTextPanel(out, [text], 8, dims.height - LINE_H - 16, theme.viewport, theme.layerTextBg);\n}\n\nfunction signed(v: number): string {\n const r = Math.abs(v) < 0.05 ? 0 : v;\n return `${r >= 0 ? '+' : '-'}${Math.abs(r).toFixed(1)}`.padStart(8);\n}\n\nfunction segment(x0: number, y0: number, x1: number, y1: number): PolygonPath {\n return {\n kind: 'polygon',\n commands: new Uint8Array([PATH_M, PATH_L]),\n coords: new Float32Array([x0, y0, x1, y1]),\n fillRule: 'nonzero',\n };\n}\n"],"mappings":"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"}
|
|
@@ -0,0 +1,83 @@
|
|
|
1
|
+
//#region src/debug/createDebugSink.ts
|
|
2
|
+
function e(e) {
|
|
3
|
+
let t = {
|
|
4
|
+
hitboxes: [],
|
|
5
|
+
handles: [],
|
|
6
|
+
bounds: [],
|
|
7
|
+
origins: [],
|
|
8
|
+
snap: [],
|
|
9
|
+
layers: [],
|
|
10
|
+
viewport: null,
|
|
11
|
+
frame: null
|
|
12
|
+
};
|
|
13
|
+
return {
|
|
14
|
+
recordHitbox(n, r, i) {
|
|
15
|
+
e.hitboxes && t.hitboxes.push({
|
|
16
|
+
id: n,
|
|
17
|
+
kind: r,
|
|
18
|
+
shape: i
|
|
19
|
+
});
|
|
20
|
+
},
|
|
21
|
+
recordHandle(n, r, i) {
|
|
22
|
+
e.handles && t.handles.push({
|
|
23
|
+
id: n,
|
|
24
|
+
position: r,
|
|
25
|
+
kind: i
|
|
26
|
+
});
|
|
27
|
+
},
|
|
28
|
+
recordBounds(n, r) {
|
|
29
|
+
e.bounds && t.bounds.push({
|
|
30
|
+
id: n,
|
|
31
|
+
bounds: r
|
|
32
|
+
});
|
|
33
|
+
},
|
|
34
|
+
recordOrigin(n, r) {
|
|
35
|
+
e.origins && t.origins.push({
|
|
36
|
+
id: n,
|
|
37
|
+
point: r
|
|
38
|
+
});
|
|
39
|
+
},
|
|
40
|
+
recordSnapCandidate(n, r) {
|
|
41
|
+
e.snap && t.snap.push({
|
|
42
|
+
point: n,
|
|
43
|
+
accepted: r
|
|
44
|
+
});
|
|
45
|
+
},
|
|
46
|
+
recordLayer(n, r, i, a) {
|
|
47
|
+
e.layers && t.layers.push({
|
|
48
|
+
id: n,
|
|
49
|
+
label: r,
|
|
50
|
+
space: i,
|
|
51
|
+
index: a
|
|
52
|
+
});
|
|
53
|
+
},
|
|
54
|
+
recordViewport(n, r, i, a) {
|
|
55
|
+
e.viewport && (t.viewport = a ? {
|
|
56
|
+
kind: n,
|
|
57
|
+
from: r,
|
|
58
|
+
to: i,
|
|
59
|
+
anchor: a
|
|
60
|
+
} : {
|
|
61
|
+
kind: n,
|
|
62
|
+
from: r,
|
|
63
|
+
to: i
|
|
64
|
+
});
|
|
65
|
+
},
|
|
66
|
+
recordFrame(n) {
|
|
67
|
+
e.fps && (t.frame = n);
|
|
68
|
+
},
|
|
69
|
+
beginFrame() {
|
|
70
|
+
t.hitboxes.length = 0, t.handles.length = 0, t.bounds.length = 0, t.origins.length = 0, t.layers.length = 0;
|
|
71
|
+
},
|
|
72
|
+
clearSnap() {
|
|
73
|
+
t.snap.length = 0;
|
|
74
|
+
},
|
|
75
|
+
snapshot() {
|
|
76
|
+
return t;
|
|
77
|
+
}
|
|
78
|
+
};
|
|
79
|
+
}
|
|
80
|
+
//#endregion
|
|
81
|
+
export { e as createDebugSink };
|
|
82
|
+
|
|
83
|
+
//# sourceMappingURL=createDebugSink.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"createDebugSink.js","names":["createDebugSink","snap","config","anchor","stats"],"sources":["../../src/debug/createDebugSink.ts"],"sourcesContent":["import type {\n CanvasDebugSink,\n DebugConfig,\n DebugSnapshot,\n HandleKind,\n HitShape,\n} from './types';\n\n/**\n * Build a sink that stores recorded primitives in arrays keyed by feature.\n * Each `recordX` method checks the matching flag in `config` first — when\n * the feature is off, the call no-ops, so callers can record unconditionally\n * without an extra check.\n *\n * `beginFrame()` clears every per-frame array. `clearSnap()` clears the snap\n * array. Snap, the latest viewport record and the last frame's stats survive\n * across frames.\n *\n * `snapshot()` returns live references — no copy. The overlay layer reads\n * these in the same render frame.\n */\nexport function createDebugSink(config: DebugConfig): CanvasDebugSink {\n const snap: DebugSnapshot = {\n hitboxes: [],\n handles: [],\n bounds: [],\n origins: [],\n snap: [],\n layers: [],\n viewport: null,\n frame: null,\n };\n return {\n recordHitbox(id, kind, shape: HitShape) {\n if (!config.hitboxes) return;\n snap.hitboxes.push({ id, kind, shape });\n },\n recordHandle(id, position, kind: HandleKind) {\n if (!config.handles) return;\n snap.handles.push({ id, position, kind });\n },\n recordBounds(id, bounds) {\n if (!config.bounds) return;\n snap.bounds.push({ id, bounds });\n },\n recordOrigin(id, point) {\n if (!config.origins) return;\n snap.origins.push({ id, point });\n },\n recordSnapCandidate(point, accepted) {\n if (!config.snap) return;\n snap.snap.push({ point, accepted });\n },\n recordLayer(id, label, space, index) {\n if (!config.layers) return;\n snap.layers.push({ id, label, space, index });\n },\n recordViewport(kind, from, to, anchor) {\n if (!config.viewport) return;\n snap.viewport = anchor ? { kind, from, to, anchor } : { kind, from, to };\n },\n recordFrame(stats) {\n if (!config.fps) return;\n snap.frame = stats;\n },\n beginFrame() {\n snap.hitboxes.length = 0;\n snap.handles.length = 0;\n snap.bounds.length = 0;\n snap.origins.length = 0;\n snap.layers.length = 0;\n },\n clearSnap() {\n snap.snap.length = 0;\n },\n snapshot() {\n return snap;\n },\n };\n}\n"],"mappings":";AAqBA,SAAgBA,EAAgB,GAAsC;CACpE,IAAMC,IAAsB;EAC1B,UAAU,CAAC;EACX,SAAS,CAAC;EACV,QAAQ,CAAC;EACT,SAAS,CAAC;EACV,MAAM,CAAC;EACP,QAAQ,CAAC;EACT,UAAU;EACV,OAAO;CACT;CACA,OAAO;EACL,aAAa,GAAI,GAAM,GAAiB;GACtC,AAAKC,EAAO,YACZD,EAAK,SAAS,KAAK;IAAE;IAAI;IAAM;GAAM,CAAC;EACxC;EACA,aAAa,GAAI,GAAU,GAAkB;GAC3C,AAAKC,EAAO,WACZD,EAAK,QAAQ,KAAK;IAAE;IAAI;IAAU;GAAK,CAAC;EAC1C;EACA,aAAa,GAAI,GAAQ;GACvB,AAAKC,EAAO,UACZD,EAAK,OAAO,KAAK;IAAE;IAAI;GAAO,CAAC;EACjC;EACA,aAAa,GAAI,GAAO;GACtB,AAAKC,EAAO,WACZD,EAAK,QAAQ,KAAK;IAAE;IAAI;GAAM,CAAC;EACjC;EACA,oBAAoB,GAAO,GAAU;GACnC,AAAKC,EAAO,QACZD,EAAK,KAAK,KAAK;IAAE;IAAO;GAAS,CAAC;EACpC;EACA,YAAY,GAAI,GAAO,GAAO,GAAO;GACnC,AAAKC,EAAO,UACZD,EAAK,OAAO,KAAK;IAAE;IAAI;IAAO;IAAO;GAAM,CAAC;EAC9C;EACA,eAAe,GAAM,GAAM,GAAI,GAAQ;GACrC,AAAKC,EAAO,aACZ,EAAK,WAAWC,IAAS;IAAE;IAAM;IAAM;IAAI;GAAO,IAAI;IAAE;IAAM;IAAM;GAAG;EACzE;EACA,YAAY,GAAO;GACjB,AAAKD,EAAO,QACZ,EAAK,QAAQE;EACf;EACA,aAAa;GAKX,AAJA,EAAK,SAAS,SAAS,GACvB,EAAK,QAAQ,SAAS,GACtB,EAAK,OAAO,SAAS,GACrB,EAAK,QAAQ,SAAS,GACtB,EAAK,OAAO,SAAS;EACvB;EACA,YAAY;GACV,EAAK,KAAK,SAAS;EACrB;EACA,WAAW;GACT,OAAOH;EACT;CACF;AACF"}
|