@weasel-js/core 1.9.4 → 1.10.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +918 -0
- package/README.md +38 -3
- package/dist/WeaselProvider.js +5 -7
- package/dist/WeaselProvider.js.map +1 -1
- package/dist/affordances/composeAffordanceLayer.js +92 -84
- package/dist/affordances/composeAffordanceLayer.js.map +1 -1
- package/dist/affordances/cornerResize.js +3 -2
- package/dist/affordances/cornerResize.js.map +1 -1
- package/dist/affordances/hitAffordanceRegions.js +71 -101
- package/dist/affordances/hitAffordanceRegions.js.map +1 -1
- package/dist/affordances/pathAnchors.js +50 -28
- package/dist/affordances/pathAnchors.js.map +1 -1
- package/dist/affordances/rotateCursor.js +12 -0
- package/dist/affordances/rotateCursor.js.map +1 -0
- package/dist/affordances/rotationHandle.js +44 -46
- package/dist/affordances/rotationHandle.js.map +1 -1
- package/dist/animation/behaviors/coast.js +21 -0
- package/dist/animation/behaviors/coast.js.map +1 -0
- package/dist/animation/behaviors/coastByWrite.js +107 -0
- package/dist/animation/behaviors/coastByWrite.js.map +1 -0
- package/dist/animation/behaviors/coastOnTargets.js +94 -0
- package/dist/animation/behaviors/coastOnTargets.js.map +1 -0
- package/dist/animation/behaviors/momentum.js +48 -136
- package/dist/animation/behaviors/momentum.js.map +1 -1
- package/dist/animation/clipTargets.js +12 -0
- package/dist/animation/clipTargets.js.map +1 -0
- package/dist/animation/index.js +15 -20
- package/dist/animation/poseHelpers.js +112 -33
- package/dist/animation/poseHelpers.js.map +1 -1
- package/dist/animation/poseTarget.js +115 -0
- package/dist/animation/poseTarget.js.map +1 -0
- package/dist/animation/reflow.js +113 -83
- package/dist/animation/reflow.js.map +1 -1
- package/dist/animation/rewind.js +66 -0
- package/dist/animation/rewind.js.map +1 -0
- package/dist/animation/rig/bindRig.js +85 -53
- package/dist/animation/rig/bindRig.js.map +1 -1
- package/dist/animation/rig/rigNode.js +99 -0
- package/dist/animation/rig/rigNode.js.map +1 -0
- package/dist/animation/rig/rigSeat.js +59 -0
- package/dist/animation/rig/rigSeat.js.map +1 -0
- package/dist/animation/rig/skinBinding.js +64 -0
- package/dist/animation/rig/skinBinding.js.map +1 -0
- package/dist/animation/rig/useRig.js +31 -16
- package/dist/animation/rig/useRig.js.map +1 -1
- package/dist/animation/wrappers/animateLifecycle.js +8 -7
- package/dist/animation/wrappers/animateLifecycle.js.map +1 -1
- package/dist/animation/wrappers/animateOnSetPose.js +31 -31
- package/dist/animation/wrappers/animateOnSetPose.js.map +1 -1
- package/dist/animation/wrappers/instantPose.js.map +1 -1
- package/dist/animation/writtenPoseTarget.js +33 -0
- package/dist/animation/writtenPoseTarget.js.map +1 -0
- package/dist/autoPoseDescriptor-DHg5KqaJ.d.ts +27 -0
- package/dist/barrel/canvas.js +32 -0
- package/dist/barrel/chrome.js +10 -10
- package/dist/barrel/input.js +16 -17
- package/dist/barrel/interactions.js +34 -37
- package/dist/barrel/paint.js +11 -18
- package/dist/barrel/paths.js +13 -19
- package/dist/barrel/renderer.js +14 -20
- package/dist/barrel/routing.js +54 -47
- package/dist/barrel/scene.js +37 -0
- package/dist/barrel/text.js +9 -18
- package/dist/barrel/viewport.js +44 -51
- package/dist/canvas/Canvas.js +270 -475
- package/dist/canvas/Canvas.js.map +1 -1
- package/dist/canvas/CanvasView.js +168 -190
- package/dist/canvas/CanvasView.js.map +1 -1
- package/dist/canvas/CursorCoordsHud.js +24 -25
- package/dist/canvas/CursorCoordsHud.js.map +1 -1
- package/dist/canvas/DrawCanvas.js +39 -56
- package/dist/canvas/DrawCanvas.js.map +1 -1
- package/dist/canvas/ModalityHud.js.map +1 -1
- package/dist/canvas/NodeShape.js +28 -29
- package/dist/canvas/NodeShape.js.map +1 -1
- package/dist/canvas/PickHud.js.map +1 -1
- package/dist/canvas/SceneCanvas/DevHuds.js +40 -0
- package/dist/canvas/SceneCanvas/DevHuds.js.map +1 -0
- package/dist/canvas/SceneCanvas/GestureDispatcherMounter.js +66 -107
- package/dist/canvas/SceneCanvas/GestureDispatcherMounter.js.map +1 -1
- package/dist/canvas/SceneCanvas/PointerProviderIfRoot.js +33 -36
- package/dist/canvas/SceneCanvas/PointerProviderIfRoot.js.map +1 -1
- package/dist/canvas/SceneCanvas/StandardActionsRegistrar.js +38 -50
- package/dist/canvas/SceneCanvas/StandardActionsRegistrar.js.map +1 -1
- package/dist/canvas/SceneCanvas/ToolKeybindingsMounter.js +3 -3
- package/dist/canvas/SceneCanvas/ToolKeybindingsMounter.js.map +1 -1
- package/dist/canvas/SceneCanvas/coordTrace.js +37 -1
- package/dist/canvas/SceneCanvas/coordTrace.js.map +1 -1
- package/dist/canvas/SceneCanvas/defaultNodeProperties.js +319 -270
- package/dist/canvas/SceneCanvas/defaultNodeProperties.js.map +1 -1
- package/dist/canvas/SceneCanvas/defaultNodeRouting.js +1 -1
- package/dist/canvas/SceneCanvas/defaultNodeRouting.js.map +1 -1
- package/dist/canvas/SceneCanvas/dispatcherGestureBounds.js.map +1 -1
- package/dist/canvas/SceneCanvas/features.js +71 -62
- package/dist/canvas/SceneCanvas/features.js.map +1 -1
- package/dist/canvas/SceneCanvas/insertPreviewCommands.js +97 -0
- package/dist/canvas/SceneCanvas/insertPreviewCommands.js.map +1 -0
- package/dist/canvas/SceneCanvas/isDev.js.map +1 -1
- package/dist/canvas/SceneCanvas/poseGeometry.js +33 -37
- package/dist/canvas/SceneCanvas/poseGeometry.js.map +1 -1
- package/dist/canvas/SceneCanvas/props.js +15 -14
- package/dist/canvas/SceneCanvas/props.js.map +1 -1
- package/dist/canvas/SceneCanvas/scenePointQuery.js +50 -0
- package/dist/canvas/SceneCanvas/scenePointQuery.js.map +1 -0
- package/dist/canvas/SceneCanvas/shapeGeneratorProperties.js +52 -0
- package/dist/canvas/SceneCanvas/shapeGeneratorProperties.js.map +1 -0
- package/dist/canvas/SceneCanvas/toolRegistry.js +23 -0
- package/dist/canvas/SceneCanvas/toolRegistry.js.map +1 -0
- package/dist/canvas/SceneCanvas/useActionTunings.js +17 -0
- package/dist/canvas/SceneCanvas/useActionTunings.js.map +1 -0
- package/dist/canvas/SceneCanvas/useActionsPropResolver.js +6 -1
- package/dist/canvas/SceneCanvas/useActionsPropResolver.js.map +1 -1
- package/dist/canvas/SceneCanvas/useBuiltinShapeTools.js.map +1 -1
- package/dist/canvas/SceneCanvas/useBuiltinTools.js +21 -0
- package/dist/canvas/SceneCanvas/useBuiltinTools.js.map +1 -0
- package/dist/canvas/SceneCanvas/useCanvasCamera.js +46 -0
- package/dist/canvas/SceneCanvas/useCanvasCamera.js.map +1 -0
- package/dist/canvas/SceneCanvas/useCanvasDispatcher.js +20 -0
- package/dist/canvas/SceneCanvas/useCanvasDispatcher.js.map +1 -0
- package/dist/canvas/SceneCanvas/useCanvasSelection.js +16 -0
- package/dist/canvas/SceneCanvas/useCanvasSelection.js.map +1 -0
- package/dist/canvas/SceneCanvas/useCanvasTools.js +67 -0
- package/dist/canvas/SceneCanvas/useCanvasTools.js.map +1 -0
- package/dist/canvas/SceneCanvas/useDispatcherOverlayLayer.js +49 -113
- package/dist/canvas/SceneCanvas/useDispatcherOverlayLayer.js.map +1 -1
- package/dist/canvas/SceneCanvas/useHeldModifiers.js +20 -0
- package/dist/canvas/SceneCanvas/useHeldModifiers.js.map +1 -0
- package/dist/canvas/SceneCanvas/useNodeAtPoint.js +26 -0
- package/dist/canvas/SceneCanvas/useNodeAtPoint.js.map +1 -0
- package/dist/canvas/SceneCanvas/useNodeKinds.js +26 -0
- package/dist/canvas/SceneCanvas/useNodeKinds.js.map +1 -0
- package/dist/canvas/SceneCanvas/usePreviewGhostLayer.js +51 -41
- package/dist/canvas/SceneCanvas/usePreviewGhostLayer.js.map +1 -1
- package/dist/canvas/SceneCanvas/useSceneCanvasHandle.js +47 -0
- package/dist/canvas/SceneCanvas/useSceneCanvasHandle.js.map +1 -0
- package/dist/canvas/SceneCanvas/useSceneCanvasLayers.js +66 -0
- package/dist/canvas/SceneCanvas/useSceneCanvasLayers.js.map +1 -0
- package/dist/canvas/SceneCanvas/useSceneChrome.js +59 -0
- package/dist/canvas/SceneCanvas/useSceneChrome.js.map +1 -0
- package/dist/canvas/SceneCanvas/useSceneRedrawSources.js +23 -0
- package/dist/canvas/SceneCanvas/useSceneRedrawSources.js.map +1 -0
- package/dist/canvas/SceneCanvas/useSceneSelectTool.js +65 -101
- package/dist/canvas/SceneCanvas/useSceneSelectTool.js.map +1 -1
- package/dist/canvas/SceneCanvas/useSceneSlotLayers.js +37 -0
- package/dist/canvas/SceneCanvas/useSceneSlotLayers.js.map +1 -0
- package/dist/canvas/SceneCanvas/useSelectionOverlayLayer.js +38 -0
- package/dist/canvas/SceneCanvas/useSelectionOverlayLayer.js.map +1 -0
- package/dist/canvas/SceneCanvas/useViewLayerGate.js +20 -0
- package/dist/canvas/SceneCanvas/useViewLayerGate.js.map +1 -0
- package/dist/canvas/SceneCanvas/useViewportActions.js +9 -1
- package/dist/canvas/SceneCanvas/useViewportActions.js.map +1 -1
- package/dist/canvas/SceneCanvas/worldPointAt.js +8 -0
- package/dist/canvas/SceneCanvas/worldPointAt.js.map +1 -0
- package/dist/canvas/SceneCanvas.js +301 -708
- package/dist/canvas/SceneCanvas.js.map +1 -1
- package/dist/canvas/SceneViewCanvas.js +41 -47
- package/dist/canvas/SceneViewCanvas.js.map +1 -1
- package/dist/canvas/SurfaceCanvas.js +40 -0
- package/dist/canvas/SurfaceCanvas.js.map +1 -0
- package/dist/canvas/adapterDerivedPath.js +26 -0
- package/dist/canvas/adapterDerivedPath.js.map +1 -0
- package/dist/canvas/adapterPickSource.js +34 -0
- package/dist/canvas/adapterPickSource.js.map +1 -0
- package/dist/canvas/affordanceAt.js +12 -2
- package/dist/canvas/affordanceAt.js.map +1 -1
- package/dist/canvas/buildSceneLayer.js +81 -61
- package/dist/canvas/buildSceneLayer.js.map +1 -1
- package/dist/canvas/buildSceneTree.js +56 -34
- package/dist/canvas/buildSceneTree.js.map +1 -1
- package/dist/canvas/canvasRenderer.js +40 -44
- package/dist/canvas/canvasRenderer.js.map +1 -1
- package/dist/canvas/colorOverrides.js.map +1 -1
- package/dist/canvas/copiesAbove.js +27 -0
- package/dist/canvas/copiesAbove.js.map +1 -0
- package/dist/canvas/defaultDrawOne.js +25 -24
- package/dist/canvas/defaultDrawOne.js.map +1 -1
- package/dist/canvas/deps/areaSelect.js +4 -4
- package/dist/canvas/deps/areaSelect.js.map +1 -1
- package/dist/canvas/deps/debug.js.map +1 -1
- package/dist/canvas/deps/editAnchors.js +47 -71
- package/dist/canvas/deps/editAnchors.js.map +1 -1
- package/dist/canvas/deps/geometryProjection.js.map +1 -1
- package/dist/canvas/deps/hitTestArea.js +45 -25
- package/dist/canvas/deps/hitTestArea.js.map +1 -1
- package/dist/canvas/deps/insert.js +149 -104
- package/dist/canvas/deps/insert.js.map +1 -1
- package/dist/canvas/deps/lassoSelect.js +5 -5
- package/dist/canvas/deps/lassoSelect.js.map +1 -1
- package/dist/canvas/deps/layout.js +9 -15
- package/dist/canvas/deps/layout.js.map +1 -1
- package/dist/canvas/deps/poseDescriptor.js +1 -1
- package/dist/canvas/deps/poseDescriptor.js.map +1 -1
- package/dist/canvas/deps/resizePolicy.js.map +1 -1
- package/dist/canvas/deps/slice.js +44 -45
- package/dist/canvas/deps/slice.js.map +1 -1
- package/dist/canvas/deps/textEdit.js +8 -8
- package/dist/canvas/deps/textEdit.js.map +1 -1
- package/dist/canvas/deps/view.js.map +1 -1
- package/dist/canvas/derivedPath.js +69 -43
- package/dist/canvas/derivedPath.js.map +1 -1
- package/dist/canvas/drawEnvelope.js +8 -4
- package/dist/canvas/drawEnvelope.js.map +1 -1
- package/dist/canvas/getNodeAtPoint.js +2 -6
- package/dist/canvas/getNodeAtPoint.js.map +1 -1
- package/dist/canvas/hud.module.js.map +1 -1
- package/dist/canvas/insertPreviewExtent.js +33 -31
- package/dist/canvas/insertPreviewExtent.js.map +1 -1
- package/dist/canvas/layerOrder.js.map +1 -1
- package/dist/canvas/layerSlots.js +6 -1
- package/dist/canvas/layerSlots.js.map +1 -1
- package/dist/canvas/nodeShapes/derivedPainter.js +12 -12
- package/dist/canvas/nodeShapes/derivedPainter.js.map +1 -1
- package/dist/canvas/nodeShapes/imagePainter.js +10 -10
- package/dist/canvas/nodeShapes/imagePainter.js.map +1 -1
- package/dist/canvas/nodeShapes/memo.js.map +1 -1
- package/dist/canvas/nodeShapes/nodePaint.js +34 -23
- package/dist/canvas/nodeShapes/nodePaint.js.map +1 -1
- package/dist/canvas/nodeShapes/pathPainter.js +23 -22
- package/dist/canvas/nodeShapes/pathPainter.js.map +1 -1
- package/dist/canvas/nodeShapes/poseBox.js +6 -6
- package/dist/canvas/nodeShapes/poseBox.js.map +1 -1
- package/dist/canvas/nodeShapes/rectFallbackPainter.js +8 -8
- package/dist/canvas/nodeShapes/rectFallbackPainter.js.map +1 -1
- package/dist/canvas/nodeShapes/shapePainter.js +16 -16
- package/dist/canvas/nodeShapes/shapePainter.js.map +1 -1
- package/dist/canvas/nodeShapes/textPainter.js +1 -1
- package/dist/canvas/nodeShapes/textPainter.js.map +1 -1
- package/dist/canvas/overChildren.js +29 -0
- package/dist/canvas/overChildren.js.map +1 -0
- package/dist/canvas/overlayRoleStrokes.js.map +1 -1
- package/dist/canvas/paintCull.js +6 -8
- package/dist/canvas/paintCull.js.map +1 -1
- package/dist/{features/cursor → canvas}/paintedCursorLayer.js +2 -2
- package/dist/canvas/paintedCursorLayer.js.map +1 -0
- package/dist/canvas/pickReach.js +23 -0
- package/dist/canvas/pickReach.js.map +1 -0
- package/dist/canvas/pickWalk.js +43 -70
- package/dist/canvas/pickWalk.js.map +1 -1
- package/dist/canvas/planeClips.js +18 -19
- package/dist/canvas/planeClips.js.map +1 -1
- package/dist/canvas/poseCascade.js +41 -0
- package/dist/canvas/poseCascade.js.map +1 -0
- package/dist/canvas/poseRotation.js +1 -3
- package/dist/canvas/poseRotation.js.map +1 -1
- package/dist/canvas/rasterReadback.js +22 -0
- package/dist/canvas/rasterReadback.js.map +1 -0
- package/dist/canvas/renderDebugSnapshot.js +12 -12
- package/dist/canvas/renderDebugSnapshot.js.map +1 -1
- package/dist/canvas/renderNeeds.js +3 -3
- package/dist/canvas/renderNeeds.js.map +1 -1
- package/dist/canvas/renderSceneToPixels.js +64 -83
- package/dist/canvas/renderSceneToPixels.js.map +1 -1
- package/dist/canvas/sceneAdapter.js +59 -144
- package/dist/canvas/sceneAdapter.js.map +1 -1
- package/dist/canvas/sceneClipboard.js +1 -1
- package/dist/canvas/sceneClipboard.js.map +1 -1
- package/dist/canvas/sceneLayerPaint.js +4 -4
- package/dist/canvas/sceneLayerPaint.js.map +1 -1
- package/dist/canvas/sceneSlotWiring.js +10 -9
- package/dist/canvas/sceneSlotWiring.js.map +1 -1
- package/dist/canvas/sceneViewRender.js +37 -42
- package/dist/canvas/sceneViewRender.js.map +1 -1
- package/dist/canvas/slopsDebugLayer.js +4 -4
- package/dist/canvas/slopsDebugLayer.js.map +1 -1
- package/dist/canvas/useCanvasRenderer.js +23 -11
- package/dist/canvas/useCanvasRenderer.js.map +1 -1
- package/dist/canvas/useCanvasSurface.js +31 -0
- package/dist/canvas/useCanvasSurface.js.map +1 -0
- package/dist/canvas/useCanvasView.js +51 -44
- package/dist/canvas/useCanvasView.js.map +1 -1
- package/dist/canvas/useFrameLoop.js +11 -12
- package/dist/canvas/useFrameLoop.js.map +1 -1
- package/dist/canvas/useHostAnchor.js +35 -33
- package/dist/canvas/useHostAnchor.js.map +1 -1
- package/dist/canvas/useLateContentRedraw.js +8 -8
- package/dist/canvas/useLateContentRedraw.js.map +1 -1
- package/dist/canvas/useSceneAdapter.js +22 -0
- package/dist/canvas/useSceneAdapter.js.map +1 -0
- package/dist/canvas/useSceneLayerList.js +4 -14
- package/dist/canvas/useSceneLayerList.js.map +1 -1
- package/dist/canvas/useSurfaceInput.js +39 -0
- package/dist/canvas/useSurfaceInput.js.map +1 -0
- package/dist/canvas/useToolCursor.js +29 -0
- package/dist/canvas/useToolCursor.js.map +1 -0
- package/dist/canvas/useViewHelpers.js +46 -85
- package/dist/canvas/useViewHelpers.js.map +1 -1
- package/dist/canvas/viewInputs.js.map +1 -1
- package/dist/canvas/viewRegistry.js +40 -34
- package/dist/canvas/viewRegistry.js.map +1 -1
- package/dist/canvas/watchElementMove.js +43 -0
- package/dist/canvas/watchElementMove.js.map +1 -0
- package/dist/canvas/wrapNodeOutput.js +7 -2
- package/dist/canvas/wrapNodeOutput.js.map +1 -1
- package/dist/clipboard.d.ts +7 -14
- package/dist/{types-B4iJRHC3.d.ts → clone-C0eADtS0.d.ts} +129 -84
- package/dist/clone.d.ts +4 -8
- package/dist/clone.js +0 -2
- package/dist/core/device/targets.js.map +1 -1
- package/dist/core/device/useDeviceProfile.js +13 -13
- package/dist/core/device/useDeviceProfile.js.map +1 -1
- package/dist/{interactions/actions/resize → core/geometry}/autoPoseDescriptor.js +8 -7
- package/dist/core/geometry/autoPoseDescriptor.js.map +1 -0
- package/dist/core/geometry/pathPoseDescriptor.js +88 -0
- package/dist/core/geometry/pathPoseDescriptor.js.map +1 -0
- package/dist/core/geometry/poseDescriptor.js +102 -29
- package/dist/core/geometry/poseDescriptor.js.map +1 -1
- package/dist/core/geometry/regionHit.js +35 -37
- package/dist/core/geometry/regionHit.js.map +1 -1
- package/dist/core/geometry/targetFrame.js +94 -0
- package/dist/core/geometry/targetFrame.js.map +1 -0
- package/dist/core/geometry/unionBounds.js +4 -5
- package/dist/core/geometry/unionBounds.js.map +1 -1
- package/dist/core/layers/backgroundFill.js +31 -0
- package/dist/core/layers/backgroundFill.js.map +1 -0
- package/dist/{features/groups → core/layers}/children.js +2 -4
- package/dist/core/layers/children.js.map +1 -0
- package/dist/{features/focus → core/layers}/gateLayer.js +2 -2
- package/dist/core/layers/gateLayer.js.map +1 -0
- package/dist/core/layers/layerGroup.js +40 -0
- package/dist/core/layers/layerGroup.js.map +1 -0
- package/dist/core/layers/render.js +50 -76
- package/dist/core/layers/render.js.map +1 -1
- package/dist/core/ops/create.js +2 -2
- package/dist/core/ops/create.js.map +1 -1
- package/dist/core/ops/createHistory.js +9 -9
- package/dist/core/ops/createHistory.js.map +1 -1
- package/dist/core/ops/delete.js +19 -23
- package/dist/core/ops/delete.js.map +1 -1
- package/dist/core/ops/reorder/index.js +3 -7
- package/dist/core/ops/reorder/index.js.map +1 -1
- package/dist/core/ops/reorder/setChildOrder.js +2 -4
- package/dist/core/ops/reorder/setChildOrder.js.map +1 -1
- package/dist/core/ops/reparent.js +0 -1
- package/dist/core/ops/reparent.js.map +1 -1
- package/dist/core/ops/slot.js +3 -6
- package/dist/core/ops/slot.js.map +1 -1
- package/dist/core/pages/fitViewToPage.js +15 -0
- package/dist/core/pages/fitViewToPage.js.map +1 -0
- package/dist/core/pages/pages.js +65 -0
- package/dist/core/pages/pages.js.map +1 -0
- package/dist/core/pages/pagesLayer.js +27 -0
- package/dist/core/pages/pagesLayer.js.map +1 -0
- package/dist/core/paint/meshKind.js +16 -0
- package/dist/core/paint/meshKind.js.map +1 -0
- package/dist/{features/meshPaint/lazyKind.js → core/paint/meshKindLazy.js} +104 -93
- package/dist/core/paint/meshKindLazy.js.map +1 -0
- package/dist/core/paint/paintKindEntry.js +8 -0
- package/dist/core/paint/paintKindEntry.js.map +1 -0
- package/dist/core/paint/paintKinds.js +144 -0
- package/dist/core/paint/paintKinds.js.map +1 -0
- package/dist/core/paint/registerMesh.js +7 -0
- package/dist/core/paint/registerMesh.js.map +1 -0
- package/dist/core/scene/NodeProperties.js.map +1 -1
- package/dist/core/scene/NodeRouting.js.map +1 -1
- package/dist/core/scene/arrivalWindow.js +65 -64
- package/dist/core/scene/arrivalWindow.js.map +1 -1
- package/dist/core/scene/boundOps.js +40 -0
- package/dist/core/scene/boundOps.js.map +1 -0
- package/dist/core/scene/composeFrame.js +9 -6
- package/dist/core/scene/composeFrame.js.map +1 -1
- package/dist/core/scene/composePose.js +105 -0
- package/dist/core/scene/composePose.js.map +1 -0
- package/dist/core/scene/depMemo.js +31 -6
- package/dist/core/scene/depMemo.js.map +1 -1
- package/dist/core/scene/derivedPath.js +19 -20
- package/dist/core/scene/derivedPath.js.map +1 -1
- package/dist/core/scene/editMode.js +26 -0
- package/dist/core/scene/editMode.js.map +1 -0
- package/dist/core/scene/effectivePose.js +42 -39
- package/dist/core/scene/effectivePose.js.map +1 -1
- package/dist/core/scene/fieldEdits.js +98 -0
- package/dist/core/scene/fieldEdits.js.map +1 -0
- package/dist/core/scene/historyFacade.js +122 -70
- package/dist/core/scene/historyFacade.js.map +1 -1
- package/dist/core/scene/historyForm.js +6 -0
- package/dist/core/scene/historyForm.js.map +1 -0
- package/dist/core/scene/kitOps.js +83 -71
- package/dist/core/scene/kitOps.js.map +1 -1
- package/dist/core/scene/kitRegistry.js.map +1 -1
- package/dist/core/scene/layerStack.js +105 -12
- package/dist/core/scene/layerStack.js.map +1 -1
- package/dist/core/scene/layoutPass.js +58 -59
- package/dist/core/scene/layoutPass.js.map +1 -1
- package/dist/{features/groups → core/scene}/nestedHit.js +3 -3
- package/dist/core/scene/nestedHit.js.map +1 -0
- package/dist/core/scene/nodeFnFields.js +16 -9
- package/dist/core/scene/nodeFnFields.js.map +1 -1
- package/dist/core/scene/nodeMemo.js.map +1 -1
- package/dist/core/scene/nodeStore.js +72 -71
- package/dist/core/scene/nodeStore.js.map +1 -1
- package/dist/core/scene/notifier.js +37 -0
- package/dist/core/scene/notifier.js.map +1 -0
- package/dist/core/scene/opTable.js +50 -0
- package/dist/core/scene/opTable.js.map +1 -0
- package/dist/core/scene/outerOps.js +67 -0
- package/dist/core/scene/outerOps.js.map +1 -0
- package/dist/core/scene/poseHold.js +39 -0
- package/dist/core/scene/poseHold.js.map +1 -0
- package/dist/core/scene/poseOverrides.js +44 -36
- package/dist/core/scene/poseOverrides.js.map +1 -1
- package/dist/core/scene/poseSnapshot.js.map +1 -1
- package/dist/core/scene/reconcileSpecs.js +4 -3
- package/dist/core/scene/reconcileSpecs.js.map +1 -1
- package/dist/core/scene/recorder.js +86 -0
- package/dist/core/scene/recorder.js.map +1 -0
- package/dist/core/scene/renderOrder.js.map +1 -1
- package/dist/core/scene/scene.js +81 -690
- package/dist/core/scene/scene.js.map +1 -1
- package/dist/core/scene/sceneEdits.js +58 -0
- package/dist/core/scene/sceneEdits.js.map +1 -0
- package/dist/core/scene/sceneMutators.js +49 -0
- package/dist/core/scene/sceneMutators.js.map +1 -0
- package/dist/core/scene/scenePoseAdapter.js +16 -0
- package/dist/core/scene/scenePoseAdapter.js.map +1 -0
- package/dist/core/scene/sceneRecording.js +91 -0
- package/dist/core/scene/sceneRecording.js.map +1 -0
- package/dist/core/scene/sceneSelection.js +28 -0
- package/dist/core/scene/sceneSelection.js.map +1 -0
- package/dist/core/scene/sceneState.js +49 -0
- package/dist/core/scene/sceneState.js.map +1 -0
- package/dist/core/scene/serialization.js +8 -5
- package/dist/core/scene/serialization.js.map +1 -1
- package/dist/core/scene/staleReplay.js +51 -0
- package/dist/core/scene/staleReplay.js.map +1 -0
- package/dist/core/scene/statedFields.js +9 -0
- package/dist/core/scene/statedFields.js.map +1 -0
- package/dist/core/scene/treeEdits.js +127 -0
- package/dist/core/scene/treeEdits.js.map +1 -0
- package/dist/core/scene/treeReads.js +26 -0
- package/dist/core/scene/treeReads.js.map +1 -0
- package/dist/core/scene/types.js.map +1 -1
- package/dist/{features/groups → core/scene}/unionOfChildren.js +3 -3
- package/dist/core/scene/unionOfChildren.js.map +1 -0
- package/dist/core/scene/unitScopes.js +13 -0
- package/dist/core/scene/unitScopes.js.map +1 -0
- package/dist/core/scene/useScene.js.map +1 -1
- package/dist/core/selection/readOnlySelection.js +32 -0
- package/dist/core/selection/readOnlySelection.js.map +1 -0
- package/dist/core/selection/usePublishSceneSelection.js +26 -0
- package/dist/core/selection/usePublishSceneSelection.js.map +1 -0
- package/dist/core/selection/useSelection.js +34 -25
- package/dist/core/selection/useSelection.js.map +1 -1
- package/dist/core/shapeKinds.js.map +1 -1
- package/dist/core/stylus/stylus.js.map +1 -1
- package/dist/core/stylus/usePointerStylus.js.map +1 -1
- package/dist/core/usePaintKinds.js +1 -1
- package/dist/core/usePaintKinds.js.map +1 -1
- package/dist/core/viewport/clientToWorld.js.map +1 -1
- package/dist/core/viewport/fitViewToBounds.js.map +1 -1
- package/dist/core/viewport/parallax.js.map +1 -1
- package/dist/core/viewport/screenSlop.js +11 -11
- package/dist/core/viewport/screenSlop.js.map +1 -1
- package/dist/core/viewport/useCanvasSize.js.map +1 -1
- package/dist/core/viewport/useDecayLoop.js +31 -33
- package/dist/core/viewport/useDecayLoop.js.map +1 -1
- package/dist/core/viewport/useNodeOverlayFrame.js +84 -0
- package/dist/core/viewport/useNodeOverlayFrame.js.map +1 -0
- package/dist/core/viewport/useViewAnimation.js +113 -53
- package/dist/core/viewport/useViewAnimation.js.map +1 -1
- package/dist/core/viewport/view.js +14 -11
- package/dist/core/viewport/view.js.map +1 -1
- package/dist/core/viewport/wheelHandler.js.map +1 -1
- package/dist/core/viewport/zoomAt.js +11 -2
- package/dist/core/viewport/zoomAt.js.map +1 -1
- package/dist/{cornerHandles-CtCb8a3G.d.ts → cornerHandles-BSKbyuvQ.d.ts} +11 -24
- package/dist/debug/createDebugOverlayLayer.js +100 -100
- package/dist/debug/createDebugOverlayLayer.js.map +1 -1
- package/dist/debug/createDebugSink.js.map +1 -1
- package/dist/debug/frameStats.js.map +1 -1
- package/dist/debug/useDebugSink.js +52 -0
- package/dist/debug/useDebugSink.js.map +1 -0
- package/dist/features/chrome-caps/buildChromeCtx.js.map +1 -1
- package/dist/features/chrome-caps/conditions.js.map +1 -1
- package/dist/features/chrome-caps/defaults.js.map +1 -1
- package/dist/features/chrome-caps/resolve.js.map +1 -1
- package/dist/features/chrome-caps/useChromeCaps.js +54 -0
- package/dist/features/chrome-caps/useChromeCaps.js.map +1 -0
- package/dist/features/chrome-caps/useHoverTracking.js.map +1 -1
- package/dist/features/ingestion/contentHandlers.js +25 -19
- package/dist/features/ingestion/contentHandlers.js.map +1 -1
- package/dist/features/ingestion/imageHandler.js +21 -24
- package/dist/features/ingestion/imageHandler.js.map +1 -1
- package/dist/features/ingestion/openFilePicker.js.map +1 -1
- package/dist/features/ingestion/placement.js +16 -0
- package/dist/features/ingestion/placement.js.map +1 -0
- package/dist/features/ingestion/svgHandler.js +5 -0
- package/dist/features/ingestion/svgHandler.js.map +1 -1
- package/dist/features/ingestion/textHandler.js +28 -0
- package/dist/features/ingestion/textHandler.js.map +1 -0
- package/dist/features/ingestion/useCanvasIngestion.js +48 -0
- package/dist/features/ingestion/useCanvasIngestion.js.map +1 -0
- package/dist/features/ingestion/weaselJsonHandler.js +5 -0
- package/dist/features/ingestion/weaselJsonHandler.js.map +1 -1
- package/dist/features/longPress/longPressFeedback.js.map +1 -1
- package/dist/features/modes/modeLayers.js +7 -7
- package/dist/features/modes/modeLayers.js.map +1 -1
- package/dist/features/paths/editablePath.js +63 -0
- package/dist/features/paths/editablePath.js.map +1 -0
- package/dist/features/paths/index.js +9 -16
- package/dist/features/paths/pathEditState.js +41 -0
- package/dist/features/paths/pathEditState.js.map +1 -0
- package/dist/features/paths/pathEditingOverlayLayer.js +36 -38
- package/dist/features/paths/pathEditingOverlayLayer.js.map +1 -1
- package/dist/features/paths/pathLayer.js +3 -2
- package/dist/features/paths/pathLayer.js.map +1 -1
- package/dist/features/paths/penPreviewLayer.js +86 -88
- package/dist/features/paths/penPreviewLayer.js.map +1 -1
- package/dist/features/paths/shapeGenerator.js +89 -0
- package/dist/features/paths/shapeGenerator.js.map +1 -0
- package/dist/features/paths/usePathEdit.js +34 -0
- package/dist/features/paths/usePathEdit.js.map +1 -0
- package/dist/features/poseRun/usePoseRun.js +44 -57
- package/dist/features/poseRun/usePoseRun.js.map +1 -1
- package/dist/features/selection/overlay.js +170 -178
- package/dist/features/selection/overlay.js.map +1 -1
- package/dist/features/text/index.js +6 -0
- package/dist/features/text/textLayer.js +1 -1
- package/dist/features/text/textLayer.js.map +1 -1
- package/dist/features/text/useSceneTextEdit.js +119 -88
- package/dist/features/text/useSceneTextEdit.js.map +1 -1
- package/dist/features/viewports/viewResolver.js +28 -24
- package/dist/features/viewports/viewResolver.js.map +1 -1
- package/dist/features/viewports/viewportLayer.js +25 -36
- package/dist/features/viewports/viewportLayer.js.map +1 -1
- package/dist/icons/SliceIcon.js +24 -0
- package/dist/icons/SliceIcon.js.map +1 -0
- package/dist/index.d.ts +5200 -8777
- package/dist/index.js +284 -320
- package/dist/input/keyState.js +14 -14
- package/dist/interactions/actions/actionShortcuts.js.map +1 -1
- package/dist/interactions/actions/{defaults/align.js → align/action.js} +15 -16
- package/dist/interactions/actions/align/action.js.map +1 -0
- package/dist/interactions/actions/align/align.js +24 -24
- package/dist/interactions/actions/align/align.js.map +1 -1
- package/dist/interactions/actions/booleans/action.js +65 -0
- package/dist/interactions/actions/booleans/action.js.map +1 -0
- package/dist/interactions/actions/booleans/booleans.js +74 -83
- package/dist/interactions/actions/booleans/booleans.js.map +1 -1
- package/dist/interactions/actions/booleans/operands.js +40 -0
- package/dist/interactions/actions/booleans/operands.js.map +1 -0
- package/dist/interactions/actions/booleans/pieces.js +45 -0
- package/dist/interactions/actions/booleans/pieces.js.map +1 -0
- package/dist/interactions/actions/booleans/placement.js +24 -0
- package/dist/interactions/actions/booleans/placement.js.map +1 -0
- package/dist/interactions/actions/booleans/useBooleans.js +11 -9
- package/dist/interactions/actions/booleans/useBooleans.js.map +1 -1
- package/dist/interactions/actions/booleans/useBooleansAdapter.js.map +1 -1
- package/dist/interactions/actions/{defaults/clipboard.js → clipboard/action.js} +19 -19
- package/dist/interactions/actions/clipboard/action.js.map +1 -0
- package/dist/interactions/actions/clipboard/clipboardOps.js +15 -15
- package/dist/interactions/actions/clipboard/clipboardOps.js.map +1 -1
- package/dist/interactions/actions/clipboard/wireFormat.js.map +1 -1
- package/dist/interactions/actions/clone/action.js +103 -0
- package/dist/interactions/actions/clone/action.js.map +1 -0
- package/dist/interactions/actions/clone/behaviors.js +52 -0
- package/dist/interactions/actions/clone/behaviors.js.map +1 -0
- package/dist/interactions/actions/defaultCommitAdapter.js +10 -37
- package/dist/interactions/actions/defaultCommitAdapter.js.map +1 -1
- package/dist/interactions/actions/defaults/anchorEditing.js +69 -74
- package/dist/interactions/actions/defaults/anchorEditing.js.map +1 -1
- package/dist/interactions/actions/defaults/anchorHandles.js +42 -0
- package/dist/interactions/actions/defaults/anchorHandles.js.map +1 -0
- package/dist/interactions/actions/defaults/anchorJoin.js +92 -0
- package/dist/interactions/actions/defaults/anchorJoin.js.map +1 -0
- package/dist/interactions/actions/defaults/areaSelect.js.map +1 -1
- package/dist/interactions/actions/defaults/bendSegment.js +46 -0
- package/dist/interactions/actions/defaults/bendSegment.js.map +1 -0
- package/dist/interactions/actions/defaults/cancelGesture.js.map +1 -1
- package/dist/interactions/actions/defaults/clearSelection.js.map +1 -1
- package/dist/interactions/actions/defaults/copySubtree.js +1 -1
- package/dist/interactions/actions/defaults/copySubtree.js.map +1 -1
- package/dist/interactions/actions/defaults/createPaintAction.js.map +1 -1
- package/dist/interactions/actions/defaults/delete.js.map +1 -1
- package/dist/interactions/actions/defaults/duplicate.js +36 -21
- package/dist/interactions/actions/defaults/duplicate.js.map +1 -1
- package/dist/interactions/actions/defaults/enterPathEdit.js +19 -7
- package/dist/interactions/actions/defaults/enterPathEdit.js.map +1 -1
- package/dist/interactions/actions/defaults/enterTextEdit.js.map +1 -1
- package/dist/interactions/actions/defaults/group.js +35 -40
- package/dist/interactions/actions/defaults/group.js.map +1 -1
- package/dist/interactions/actions/defaults/icons/anchorIcons.js +75 -0
- package/dist/interactions/actions/defaults/icons/anchorIcons.js.map +1 -0
- package/dist/interactions/actions/defaults/icons/booleanIcons.js +24 -1
- package/dist/interactions/actions/defaults/icons/booleanIcons.js.map +1 -1
- package/dist/interactions/actions/defaults/icons/editIcons.js +35 -8
- package/dist/interactions/actions/defaults/icons/editIcons.js.map +1 -1
- package/dist/interactions/actions/defaults/icons/outlineIcons.js +39 -1
- package/dist/interactions/actions/defaults/icons/outlineIcons.js.map +1 -1
- package/dist/interactions/actions/defaults/ingest.js +19 -15
- package/dist/interactions/actions/defaults/ingest.js.map +1 -1
- package/dist/interactions/actions/defaults/insertPathAnchor.js +18 -34
- package/dist/interactions/actions/defaults/insertPathAnchor.js.map +1 -1
- package/dist/interactions/actions/defaults/nudge.js +43 -39
- package/dist/interactions/actions/defaults/nudge.js.map +1 -1
- package/dist/interactions/actions/defaults/pinchZoom.js +29 -29
- package/dist/interactions/actions/defaults/pinchZoom.js.map +1 -1
- package/dist/interactions/actions/defaults/requiresSelection.js.map +1 -1
- package/dist/interactions/actions/defaults/segmentUnder.js +22 -0
- package/dist/interactions/actions/defaults/segmentUnder.js.map +1 -0
- package/dist/interactions/actions/defaults/setFill.js +9 -3
- package/dist/interactions/actions/defaults/setFill.js.map +1 -1
- package/dist/interactions/actions/defaults/setFillOpacity.js +4 -1
- package/dist/interactions/actions/defaults/setFillOpacity.js.map +1 -1
- package/dist/interactions/actions/defaults/setStroke.js.map +1 -1
- package/dist/interactions/actions/defaults/sliceOps.js +20 -22
- package/dist/interactions/actions/defaults/sliceOps.js.map +1 -1
- package/dist/interactions/actions/defaults/toolActivate.js.map +1 -1
- package/dist/interactions/actions/defaults/toolResetToDefault.js.map +1 -1
- package/dist/interactions/actions/defaults/viewportDragPan.js +1 -1
- package/dist/interactions/actions/defaults/viewportDragPan.js.map +1 -1
- package/dist/interactions/actions/defaults/viewportWheelPan.js.map +1 -1
- package/dist/interactions/actions/defaults/viewportZoom.js +82 -79
- package/dist/interactions/actions/defaults/viewportZoom.js.map +1 -1
- package/dist/interactions/actions/{defaults/distribute.js → distribute/action.js} +18 -19
- package/dist/interactions/actions/distribute/action.js.map +1 -0
- package/dist/interactions/actions/distribute/distribute.js +15 -15
- package/dist/interactions/actions/distribute/distribute.js.map +1 -1
- package/dist/interactions/actions/edit-anchors/action.js +101 -0
- package/dist/interactions/actions/edit-anchors/action.js.map +1 -0
- package/dist/interactions/actions/edit-anchors/geometry.js +2 -4
- package/dist/interactions/actions/edit-anchors/geometry.js.map +1 -1
- package/dist/interactions/actions/edit-anchors/preview.js +26 -0
- package/dist/interactions/actions/edit-anchors/preview.js.map +1 -0
- package/dist/interactions/actions/edit-anchors/symmetry.js +11 -0
- package/dist/interactions/actions/edit-anchors/symmetry.js.map +1 -0
- package/dist/interactions/actions/flip/action.js +124 -0
- package/dist/interactions/actions/flip/action.js.map +1 -0
- package/dist/interactions/actions/flip/helpers.js +1 -1
- package/dist/interactions/actions/flip/helpers.js.map +1 -1
- package/dist/interactions/actions/geometryProjection.js.map +1 -1
- package/dist/interactions/actions/gestureFrames.js +18 -0
- package/dist/interactions/actions/gestureFrames.js.map +1 -0
- package/dist/interactions/actions/gestureLifecycle.js +47 -20
- package/dist/interactions/actions/gestureLifecycle.js.map +1 -1
- package/dist/interactions/actions/insert/action.js +79 -0
- package/dist/interactions/actions/insert/action.js.map +1 -0
- package/dist/interactions/actions/insert/commit.js +28 -0
- package/dist/interactions/actions/insert/commit.js.map +1 -0
- package/dist/interactions/actions/insert/extras.js +65 -0
- package/dist/interactions/actions/insert/extras.js.map +1 -0
- package/dist/interactions/actions/insert/frame.js +55 -0
- package/dist/interactions/actions/insert/frame.js.map +1 -0
- package/dist/interactions/actions/insert/geometry.js +35 -0
- package/dist/interactions/actions/insert/geometry.js.map +1 -0
- package/dist/interactions/actions/insert/repositionAction.js +31 -0
- package/dist/interactions/actions/insert/repositionAction.js.map +1 -0
- package/dist/interactions/actions/insert/rotateAction.js +21 -0
- package/dist/interactions/actions/insert/rotateAction.js.map +1 -0
- package/dist/interactions/actions/insert/session.js +59 -0
- package/dist/interactions/actions/insert/session.js.map +1 -0
- package/dist/interactions/actions/insert/shape.js +34 -0
- package/dist/interactions/actions/insert/shape.js.map +1 -0
- package/dist/interactions/actions/lasso-select/action.js +143 -0
- package/dist/interactions/actions/lasso-select/action.js.map +1 -0
- package/dist/interactions/actions/move/action.js +91 -0
- package/dist/interactions/actions/move/action.js.map +1 -0
- package/dist/interactions/actions/move/behaviors/layoutDrop.js +51 -0
- package/dist/interactions/actions/move/behaviors/layoutDrop.js.map +1 -0
- package/dist/interactions/actions/move/behaviors/reparentOnDrop.js +15 -0
- package/dist/interactions/actions/move/behaviors/reparentOnDrop.js.map +1 -0
- package/dist/interactions/actions/move/behaviors/snapToContainer.js +35 -28
- package/dist/interactions/actions/move/behaviors/snapToContainer.js.map +1 -1
- package/dist/interactions/actions/move/capture.js +108 -0
- package/dist/interactions/actions/move/capture.js.map +1 -0
- package/dist/interactions/actions/move/commit/index.js +41 -0
- package/dist/interactions/actions/move/commit/index.js.map +1 -0
- package/dist/interactions/actions/move/commit/layoutDrop.js +44 -0
- package/dist/interactions/actions/move/commit/layoutDrop.js.map +1 -0
- package/dist/interactions/actions/move/commit/layoutRelease.js +100 -0
- package/dist/interactions/actions/move/commit/layoutRelease.js.map +1 -0
- package/dist/interactions/actions/move/commit/rebase.js +18 -0
- package/dist/interactions/actions/move/commit/rebase.js.map +1 -0
- package/dist/interactions/actions/move/commit/reparent.js +65 -0
- package/dist/interactions/actions/move/commit/reparent.js.map +1 -0
- package/dist/interactions/actions/move/delta.js +51 -0
- package/dist/interactions/actions/move/delta.js.map +1 -0
- package/dist/interactions/actions/move/frame.js +47 -0
- package/dist/interactions/actions/move/frame.js.map +1 -0
- package/dist/interactions/actions/move/gestureAdapter.js +15 -40
- package/dist/interactions/actions/move/gestureAdapter.js.map +1 -1
- package/dist/interactions/actions/move/landedDescendants.js +8 -8
- package/dist/interactions/actions/move/layout/container.js +94 -0
- package/dist/interactions/actions/move/layout/container.js.map +1 -0
- package/dist/interactions/actions/move/layout/dragged.js +58 -0
- package/dist/interactions/actions/move/layout/dragged.js.map +1 -0
- package/dist/interactions/actions/move/layout/dropPass.js +122 -0
- package/dist/interactions/actions/move/layout/dropPass.js.map +1 -0
- package/dist/interactions/actions/move/layout/exits.js +38 -0
- package/dist/interactions/actions/move/layout/exits.js.map +1 -0
- package/dist/interactions/actions/move/layout/glide.js +48 -0
- package/dist/interactions/actions/move/layout/glide.js.map +1 -0
- package/dist/interactions/actions/move/session.js +63 -0
- package/dist/interactions/actions/move/session.js.map +1 -0
- package/dist/interactions/actions/move/translate.js +61 -0
- package/dist/interactions/actions/move/translate.js.map +1 -0
- package/dist/interactions/actions/outlines/createOutlines.js +17 -64
- package/dist/interactions/actions/outlines/createOutlines.js.map +1 -1
- package/dist/interactions/actions/outlines/createOutlinesAction.js +51 -0
- package/dist/interactions/actions/outlines/createOutlinesAction.js.map +1 -0
- package/dist/interactions/actions/outlines/outlineStroke.js +72 -0
- package/dist/interactions/actions/outlines/outlineStroke.js.map +1 -0
- package/dist/interactions/actions/outlines/outlineStrokeAction.js +37 -0
- package/dist/interactions/actions/outlines/outlineStrokeAction.js.map +1 -0
- package/dist/interactions/actions/outlines/replaceWithPaths.js +54 -0
- package/dist/interactions/actions/outlines/replaceWithPaths.js.map +1 -0
- package/dist/interactions/actions/outlines/strokeRegion.js +27 -0
- package/dist/interactions/actions/outlines/strokeRegion.js.map +1 -0
- package/dist/interactions/actions/pathCommands/cutJoin.js +102 -0
- package/dist/interactions/actions/pathCommands/cutJoin.js.map +1 -0
- package/dist/interactions/actions/pathCommands/livePathEdit.js +64 -0
- package/dist/interactions/actions/pathCommands/livePathEdit.js.map +1 -0
- package/dist/interactions/actions/pathCommands/pathNodes.js +99 -0
- package/dist/interactions/actions/pathCommands/pathNodes.js.map +1 -0
- package/dist/interactions/actions/pathCommands/simplifyOffset.js +42 -0
- package/dist/interactions/actions/pathCommands/simplifyOffset.js.map +1 -0
- package/dist/interactions/actions/planeInput.js.map +1 -1
- package/dist/interactions/actions/pointerState.js +12 -0
- package/dist/interactions/actions/pointerState.js.map +1 -0
- package/dist/interactions/actions/poseDescriptorDep.js +1 -1
- package/dist/interactions/actions/poseDescriptorDep.js.map +1 -1
- package/dist/interactions/actions/poseFrame.js +26 -26
- package/dist/interactions/actions/poseFrame.js.map +1 -1
- package/dist/interactions/actions/resize/action.js +66 -0
- package/dist/interactions/actions/resize/action.js.map +1 -0
- package/dist/interactions/actions/resize/behaviors/lockAspect.js.map +1 -1
- package/dist/interactions/actions/resize/boxFrame.js +16 -0
- package/dist/interactions/actions/resize/boxFrame.js.map +1 -0
- package/dist/interactions/actions/resize/capture.js +85 -0
- package/dist/interactions/actions/resize/capture.js.map +1 -0
- package/dist/interactions/actions/resize/commit.js +69 -0
- package/dist/interactions/actions/resize/commit.js.map +1 -0
- package/dist/interactions/actions/resize/frame.js +88 -0
- package/dist/interactions/actions/resize/frame.js.map +1 -0
- package/dist/interactions/actions/resize/pointSnap.js +111 -0
- package/dist/interactions/actions/resize/pointSnap.js.map +1 -0
- package/dist/interactions/actions/resize/replay.js +47 -0
- package/dist/interactions/actions/resize/replay.js.map +1 -0
- package/dist/interactions/actions/resize/ruleBounds.js +9 -0
- package/dist/interactions/actions/resize/ruleBounds.js.map +1 -0
- package/dist/interactions/actions/resize/session.js +63 -0
- package/dist/interactions/actions/resize/session.js.map +1 -0
- package/dist/interactions/actions/resolveOverlays.js +2 -1
- package/dist/interactions/actions/resolveOverlays.js.map +1 -1
- package/dist/interactions/actions/resolvePreviews.js.map +1 -1
- package/dist/interactions/actions/rotate/action.js +71 -0
- package/dist/interactions/actions/rotate/action.js.map +1 -0
- package/dist/interactions/actions/rotate/behaviors/index.js +7 -0
- package/dist/interactions/actions/rotate/behaviors/index.js.map +1 -0
- package/dist/interactions/actions/rotate/behaviors/snapRotation.js +12 -0
- package/dist/interactions/actions/rotate/behaviors/snapRotation.js.map +1 -0
- package/dist/interactions/actions/rotate/commit.js +40 -0
- package/dist/interactions/actions/rotate/commit.js.map +1 -0
- package/dist/interactions/actions/rotate/frame.js +65 -0
- package/dist/interactions/actions/rotate/frame.js.map +1 -0
- package/dist/interactions/actions/rotate/handle.js +12 -12
- package/dist/interactions/actions/rotate/handle.js.map +1 -1
- package/dist/interactions/actions/rotate/replay.js +22 -0
- package/dist/interactions/actions/rotate/replay.js.map +1 -0
- package/dist/interactions/actions/rotate/session.js +102 -0
- package/dist/interactions/actions/rotate/session.js.map +1 -0
- package/dist/interactions/actions/spatialReference.js.map +1 -1
- package/dist/interactions/actions/transform-again/action.js +63 -0
- package/dist/interactions/actions/transform-again/action.js.map +1 -0
- package/dist/interactions/actions/transform-again/memory.js +35 -0
- package/dist/interactions/actions/transform-again/memory.js.map +1 -0
- package/dist/interactions/actions/useStandardActions.js +84 -61
- package/dist/interactions/actions/useStandardActions.js.map +1 -1
- package/dist/interactions/gestures/pointerDrag/pointerDrag.js +61 -42
- package/dist/interactions/gestures/pointerDrag/pointerDrag.js.map +1 -1
- package/dist/interactions/gestures/shared/originProjection.js +1 -1
- package/dist/interactions/gestures/shared/originProjection.js.map +1 -1
- package/dist/interactions/gestures/shared/screenTolerance.js +8 -2
- package/dist/interactions/gestures/shared/screenTolerance.js.map +1 -1
- package/dist/interactions/gestures/shared/snap.js.map +1 -1
- package/dist/math-CYUjoyyU.d.ts +33 -0
- package/dist/math.d.ts +5 -2
- package/dist/math.js +6 -6
- package/dist/mesh.d.ts +4 -268
- package/dist/mesh.js +3 -7
- package/dist/move.d.ts +6 -4
- package/dist/{originProjection-gHnOup4e.d.ts → originProjection-CoNVpITV.d.ts} +1 -1
- package/dist/patterns-builtin.d.ts +1 -118
- package/dist/patterns-builtin.js +2 -3
- package/dist/poseDescriptor-Bqk-11Rl.d.ts +73 -0
- package/dist/renderer.d.ts +1 -92
- package/dist/renderer.js +2 -19
- package/dist/resize.d.ts +11 -22
- package/dist/resize.js +1 -1
- package/dist/style.css +1 -1
- package/dist/test-hook/install.js.map +1 -1
- package/dist/test-hook/useTestHook.js +22 -0
- package/dist/test-hook/useTestHook.js.map +1 -0
- package/dist/test-seams-D0pyV3pR.d.ts +149 -0
- package/dist/test-seams.d.ts +4 -4
- package/dist/test-seams.js +2 -2
- package/dist/tools/builtin/bone/boneActions.js +130 -0
- package/dist/tools/builtin/bone/boneActions.js.map +1 -0
- package/dist/tools/builtin/bone/boneOverlay.js +58 -0
- package/dist/tools/builtin/bone/boneOverlay.js.map +1 -0
- package/dist/tools/builtin/bone/placedRig.js +24 -0
- package/dist/tools/builtin/bone/placedRig.js.map +1 -0
- package/dist/tools/builtin/bone/rigEditState.js +21 -0
- package/dist/tools/builtin/bone/rigEditState.js.map +1 -0
- package/dist/tools/builtin/bone/useBoneTool.js +98 -0
- package/dist/tools/builtin/bone/useBoneTool.js.map +1 -0
- package/dist/tools/builtin/ellipse/useEllipseTool.js +16 -15
- package/dist/tools/builtin/ellipse/useEllipseTool.js.map +1 -1
- package/dist/tools/builtin/eyedropper/useEyedropperTool.js.map +1 -1
- package/dist/tools/builtin/hand/useHandTool.js.map +1 -1
- package/dist/tools/builtin/image/useImageTool.js.map +1 -1
- package/dist/tools/builtin/lasso/useLassoTool.js.map +1 -1
- package/dist/tools/builtin/line/useLineTool.js +16 -15
- package/dist/tools/builtin/line/useLineTool.js.map +1 -1
- package/dist/tools/builtin/pen/usePenTool.js +162 -164
- package/dist/tools/builtin/pen/usePenTool.js.map +1 -1
- package/dist/tools/builtin/pencil/usePencilTool.js.map +1 -1
- package/dist/tools/builtin/pickTopMostHit.js +11 -14
- package/dist/tools/builtin/pickTopMostHit.js.map +1 -1
- package/dist/tools/builtin/polygon/usePolygonTool.js +17 -15
- package/dist/tools/builtin/polygon/usePolygonTool.js.map +1 -1
- package/dist/tools/builtin/rect/useRectTool.js +15 -14
- package/dist/tools/builtin/rect/useRectTool.js.map +1 -1
- package/dist/tools/builtin/select/adapterPointQuery.js +40 -0
- package/dist/tools/builtin/select/adapterPointQuery.js.map +1 -0
- package/dist/tools/builtin/select/selectionContributions.js +5 -5
- package/dist/tools/builtin/select/selectionContributions.js.map +1 -1
- package/dist/tools/builtin/select/useSelectTool.js +44 -71
- package/dist/tools/builtin/select/useSelectTool.js.map +1 -1
- package/dist/tools/builtin/shared/pointerFollower.js.map +1 -1
- package/dist/tools/builtin/slice/useSliceTool.js +69 -72
- package/dist/tools/builtin/slice/useSliceTool.js.map +1 -1
- package/dist/tools/builtin/star/useStarTool.js +18 -16
- package/dist/tools/builtin/star/useStarTool.js.map +1 -1
- package/dist/tools/builtin/text/useTextTool.js +10 -2
- package/dist/tools/builtin/text/useTextTool.js.map +1 -1
- package/dist/tools/builtin/weight/useWeightTool.js +77 -0
- package/dist/tools/builtin/weight/useWeightTool.js.map +1 -0
- package/dist/tools/builtin/weight/weightActions.js +112 -0
- package/dist/tools/builtin/weight/weightActions.js.map +1 -0
- package/dist/tools/builtin/weight/weightOverlay.js +61 -0
- package/dist/tools/builtin/weight/weightOverlay.js.map +1 -0
- package/dist/tools/overlayBinding.js.map +1 -1
- package/dist/tools/useKeybindings.js +20 -14
- package/dist/tools/useKeybindings.js.map +1 -1
- package/dist/{types-k-5Oqh-U.d.ts → types-DBbbCy0i.d.ts} +103 -176
- package/dist/util/paint.js +1 -1
- package/dist/util/paint.js.map +1 -1
- package/dist/version.js +1 -1
- package/package.json +26 -21
- package/dist/animation/colorHelpers.js +0 -135
- package/dist/animation/colorHelpers.js.map +0 -1
- package/dist/animation/colorRegistry.js +0 -37
- package/dist/animation/colorRegistry.js.map +0 -1
- package/dist/animation/engine/axes.js +0 -36
- package/dist/animation/engine/axes.js.map +0 -1
- package/dist/animation/engine/codec.js +0 -170
- package/dist/animation/engine/codec.js.map +0 -1
- package/dist/animation/engine/integrator.js +0 -12
- package/dist/animation/engine/integrator.js.map +0 -1
- package/dist/animation/loop.js +0 -60
- package/dist/animation/loop.js.map +0 -1
- package/dist/animation/observe.js +0 -23
- package/dist/animation/observe.js.map +0 -1
- package/dist/animation/rig/blendPoses.js +0 -43
- package/dist/animation/rig/blendPoses.js.map +0 -1
- package/dist/animation/rig/mirrorPose.js +0 -19
- package/dist/animation/rig/mirrorPose.js.map +0 -1
- package/dist/animation/rig/resolveSkeleton.js +0 -33
- package/dist/animation/rig/resolveSkeleton.js.map +0 -1
- package/dist/animation/rig/solveIk.js +0 -103
- package/dist/animation/rig/solveIk.js.map +0 -1
- package/dist/animation/rig/types.js +0 -12
- package/dist/animation/rig/types.js.map +0 -1
- package/dist/animation/slew.js +0 -27
- package/dist/animation/slew.js.map +0 -1
- package/dist/animation/stagger.js +0 -146
- package/dist/animation/stagger.js.map +0 -1
- package/dist/animation/timeline/booking.js +0 -114
- package/dist/animation/timeline/booking.js.map +0 -1
- package/dist/animation/timeline/createTimeline.js +0 -125
- package/dist/animation/timeline/createTimeline.js.map +0 -1
- package/dist/animation/timeline/sampleTrack.js +0 -79
- package/dist/animation/timeline/sampleTrack.js.map +0 -1
- package/dist/animation/useAnimator.js +0 -388
- package/dist/animation/useAnimator.js.map +0 -1
- package/dist/autoPoseDescriptor-Ct7yqivU.d.ts +0 -108
- package/dist/builtins-DPcdghtB.d.ts +0 -1223
- package/dist/canvas/MinimapCanvas.js +0 -140
- package/dist/canvas/MinimapCanvas.js.map +0 -1
- package/dist/canvas/deps/poseComposition.js +0 -11
- package/dist/canvas/deps/poseComposition.js.map +0 -1
- package/dist/canvas/minimapMath.js +0 -82
- package/dist/canvas/minimapMath.js.map +0 -1
- package/dist/canvas/toolPreview.js +0 -39
- package/dist/canvas/toolPreview.js.map +0 -1
- package/dist/core/adapters/arrayAdapter.js +0 -94
- package/dist/core/adapters/arrayAdapter.js.map +0 -1
- package/dist/core/adapters/useArrayAdapter.js +0 -13
- package/dist/core/adapters/useArrayAdapter.js.map +0 -1
- package/dist/core/fillInPoseFrame.js +0 -102
- package/dist/core/fillInPoseFrame.js.map +0 -1
- package/dist/core/geometry/poseFrame.js +0 -44
- package/dist/core/geometry/poseFrame.js.map +0 -1
- package/dist/core/geometry/poseRotation.js +0 -58
- package/dist/core/geometry/poseRotation.js.map +0 -1
- package/dist/core/gradient.js +0 -136
- package/dist/core/gradient.js.map +0 -1
- package/dist/core/markerInset.js +0 -24
- package/dist/core/markerInset.js.map +0 -1
- package/dist/core/mixed.js +0 -6
- package/dist/core/mixed.js.map +0 -1
- package/dist/core/paintKinds.js +0 -156
- package/dist/core/paintKinds.js.map +0 -1
- package/dist/core/scene/pickability.js +0 -6
- package/dist/core/scene/pickability.js.map +0 -1
- package/dist/core/strokeMarkerShapes.js +0 -139
- package/dist/core/strokeMarkerShapes.js.map +0 -1
- package/dist/core/strokeMarkers.js +0 -28
- package/dist/core/strokeMarkers.js.map +0 -1
- package/dist/core/viewport/meanScale.js +0 -8
- package/dist/core/viewport/meanScale.js.map +0 -1
- package/dist/core/viewport/pxExtent.js +0 -42
- package/dist/core/viewport/pxExtent.js.map +0 -1
- package/dist/features/cursor/paintedCursorLayer.js.map +0 -1
- package/dist/features/focus/gateLayer.js.map +0 -1
- package/dist/features/focus/useCanvasFocus.js +0 -29
- package/dist/features/focus/useCanvasFocus.js.map +0 -1
- package/dist/features/groups/children.js.map +0 -1
- package/dist/features/groups/composePose.js +0 -67
- package/dist/features/groups/composePose.js.map +0 -1
- package/dist/features/groups/nestedHit.js.map +0 -1
- package/dist/features/groups/unionOfChildren.js.map +0 -1
- package/dist/features/images/imageCache.js +0 -104
- package/dist/features/images/imageCache.js.map +0 -1
- package/dist/features/ingestion/index.js +0 -8
- package/dist/features/meshPaint/bake.js +0 -79
- package/dist/features/meshPaint/bake.js.map +0 -1
- package/dist/features/meshPaint/bakeCache.js +0 -59
- package/dist/features/meshPaint/bakeCache.js.map +0 -1
- package/dist/features/meshPaint/handles.js +0 -86
- package/dist/features/meshPaint/handles.js.map +0 -1
- package/dist/features/meshPaint/lazyKind.js.map +0 -1
- package/dist/features/meshPaint/meshPaint.js +0 -239
- package/dist/features/meshPaint/meshPaint.js.map +0 -1
- package/dist/features/meshPaint/meshShader.js +0 -6
- package/dist/features/meshPaint/meshShader.js.map +0 -1
- package/dist/features/meshPaint/register.js +0 -7
- package/dist/features/meshPaint/register.js.map +0 -1
- package/dist/features/meshPaint/surface.js +0 -110
- package/dist/features/meshPaint/surface.js.map +0 -1
- package/dist/features/minimap/actions.js +0 -53
- package/dist/features/minimap/actions.js.map +0 -1
- package/dist/features/minimap/createMinimapContribution.js +0 -96
- package/dist/features/minimap/createMinimapContribution.js.map +0 -1
- package/dist/features/minimap/layers.js +0 -85
- package/dist/features/minimap/layers.js.map +0 -1
- package/dist/features/overlays/useNodeOverlayFrame.js +0 -103
- package/dist/features/overlays/useNodeOverlayFrame.js.map +0 -1
- package/dist/features/parallax/createParallaxLayer.js +0 -26
- package/dist/features/parallax/createParallaxLayer.js.map +0 -1
- package/dist/features/parallax/createParallaxPlane.js +0 -22
- package/dist/features/parallax/createParallaxPlane.js.map +0 -1
- package/dist/features/paths/anchorEdits.js +0 -167
- package/dist/features/paths/anchorEdits.js.map +0 -1
- package/dist/features/paths/anchors.js +0 -159
- package/dist/features/paths/anchors.js.map +0 -1
- package/dist/features/paths/booleans.js +0 -2
- package/dist/features/paths/markerCommands.js +0 -149
- package/dist/features/paths/markerCommands.js.map +0 -1
- package/dist/features/paths/markerSites.js +0 -59
- package/dist/features/paths/markerSites.js.map +0 -1
- package/dist/features/paths/markers.js +0 -95
- package/dist/features/paths/markers.js.map +0 -1
- package/dist/features/paths/nearestAnchor.js +0 -36
- package/dist/features/paths/nearestAnchor.js.map +0 -1
- package/dist/features/paths/pathInWorld.js +0 -41
- package/dist/features/paths/pathInWorld.js.map +0 -1
- package/dist/features/paths/poseDescriptor.js +0 -39
- package/dist/features/paths/poseDescriptor.js.map +0 -1
- package/dist/features/paths/strokeToPath.js +0 -40
- package/dist/features/paths/strokeToPath.js.map +0 -1
- package/dist/features/paths/tessellate/dash.js +0 -52
- package/dist/features/paths/tessellate/dash.js.map +0 -1
- package/dist/features/paths/tessellate/insets.js +0 -32
- package/dist/features/paths/tessellate/insets.js.map +0 -1
- package/dist/features/paths/tessellate/metric.js +0 -72
- package/dist/features/paths/tessellate/metric.js.map +0 -1
- package/dist/features/paths/tessellate/stroke.js +0 -170
- package/dist/features/paths/tessellate/stroke.js.map +0 -1
- package/dist/features/paths/tessellate/vertexWidths.js +0 -32
- package/dist/features/paths/tessellate/vertexWidths.js.map +0 -1
- package/dist/features/patterns/commandPaint.js +0 -18
- package/dist/features/patterns/commandPaint.js.map +0 -1
- package/dist/features/patterns/index.js +0 -11
- package/dist/features/patterns/index.js.map +0 -1
- package/dist/features/patterns/patterns-builtin.js +0 -38
- package/dist/features/patterns/patterns-builtin.js.map +0 -1
- package/dist/features/patterns/rasterizeTile.js +0 -17
- package/dist/features/patterns/rasterizeTile.js.map +0 -1
- package/dist/features/patterns/resolveSpec.js +0 -65
- package/dist/features/patterns/resolveSpec.js.map +0 -1
- package/dist/features/patterns/tileGeometry.js +0 -158
- package/dist/features/patterns/tileGeometry.js.map +0 -1
- package/dist/features/pointer/PointerContext.js +0 -45
- package/dist/features/pointer/PointerContext.js.map +0 -1
- package/dist/features/selection/SelectionContext.js +0 -51
- package/dist/features/selection/SelectionContext.js.map +0 -1
- package/dist/features/simulation/createSimulation.js +0 -61
- package/dist/features/simulation/createSimulation.js.map +0 -1
- package/dist/features/simulation/types.js +0 -6
- package/dist/features/simulation/types.js.map +0 -1
- package/dist/features/simulation/useSimulation.js +0 -74
- package/dist/features/simulation/useSimulation.js.map +0 -1
- package/dist/features/text/domOffsets.js +0 -82
- package/dist/features/text/domOffsets.js.map +0 -1
- package/dist/features/text/domRuns.js +0 -230
- package/dist/features/text/domRuns.js.map +0 -1
- package/dist/features/text/fitTextPose.js +0 -38
- package/dist/features/text/fitTextPose.js.map +0 -1
- package/dist/features/text/hitTest.js +0 -48
- package/dist/features/text/hitTest.js.map +0 -1
- package/dist/features/text/isTextData.js +0 -8
- package/dist/features/text/isTextData.js.map +0 -1
- package/dist/features/text/overlayDirection.js +0 -15
- package/dist/features/text/overlayDirection.js.map +0 -1
- package/dist/features/text/renderLabel.js +0 -14
- package/dist/features/text/renderLabel.js.map +0 -1
- package/dist/features/text/runs/effectiveRangeStyle.js +0 -66
- package/dist/features/text/runs/effectiveRangeStyle.js.map +0 -1
- package/dist/features/text/runs/flagRange.js +0 -53
- package/dist/features/text/runs/flagRange.js.map +0 -1
- package/dist/features/text/runs/rangeStyle.js +0 -133
- package/dist/features/text/runs/rangeStyle.js.map +0 -1
- package/dist/features/text/textCommand.js +0 -60
- package/dist/features/text/textCommand.js.map +0 -1
- package/dist/features/text/textToPath.js +0 -181
- package/dist/features/text/textToPath.js.map +0 -1
- package/dist/features/text/useTextEdit.js +0 -491
- package/dist/features/text/useTextEdit.js.map +0 -1
- package/dist/features/tiling/createTiledLayer.js +0 -65
- package/dist/features/tiling/createTiledLayer.js.map +0 -1
- package/dist/features/tiling/tiledProject.js +0 -14
- package/dist/features/tiling/tiledProject.js.map +0 -1
- package/dist/interactions/actions/clone/behaviors/cloneByAltDrag.js +0 -26
- package/dist/interactions/actions/clone/behaviors/cloneByAltDrag.js.map +0 -1
- package/dist/interactions/actions/defaults/align.js.map +0 -1
- package/dist/interactions/actions/defaults/booleans.js +0 -52
- package/dist/interactions/actions/defaults/booleans.js.map +0 -1
- package/dist/interactions/actions/defaults/clipboard.js.map +0 -1
- package/dist/interactions/actions/defaults/clone.js +0 -91
- package/dist/interactions/actions/defaults/clone.js.map +0 -1
- package/dist/interactions/actions/defaults/createOutlines.js +0 -47
- package/dist/interactions/actions/defaults/createOutlines.js.map +0 -1
- package/dist/interactions/actions/defaults/distribute.js.map +0 -1
- package/dist/interactions/actions/defaults/editAnchors.js +0 -100
- package/dist/interactions/actions/defaults/editAnchors.js.map +0 -1
- package/dist/interactions/actions/defaults/flip.js +0 -125
- package/dist/interactions/actions/defaults/flip.js.map +0 -1
- package/dist/interactions/actions/defaults/insert.js +0 -287
- package/dist/interactions/actions/defaults/insert.js.map +0 -1
- package/dist/interactions/actions/defaults/lassoSelect.js +0 -153
- package/dist/interactions/actions/defaults/lassoSelect.js.map +0 -1
- package/dist/interactions/actions/defaults/move.js +0 -778
- package/dist/interactions/actions/defaults/move.js.map +0 -1
- package/dist/interactions/actions/defaults/resize.js +0 -341
- package/dist/interactions/actions/defaults/resize.js.map +0 -1
- package/dist/interactions/actions/defaults/rotate.js +0 -185
- package/dist/interactions/actions/defaults/rotate.js.map +0 -1
- package/dist/interactions/actions/previewOverrides.js +0 -25
- package/dist/interactions/actions/previewOverrides.js.map +0 -1
- package/dist/interactions/actions/resize/autoPoseDescriptor.js.map +0 -1
- package/dist/layout/arrivals.js +0 -36
- package/dist/layout/arrivals.js.map +0 -1
- package/dist/math-J-ACHyEg.d.ts +0 -159
- package/dist/registerProgram-T9S_PfAX.d.ts +0 -208
- package/dist/renderer/DrawCommand.js +0 -6
- package/dist/renderer/DrawCommand.js.map +0 -1
- package/dist/renderer/WeaselRenderer.js +0 -333
- package/dist/renderer/WeaselRenderer.js.map +0 -1
- package/dist/renderer/batchClip.js +0 -46
- package/dist/renderer/batchClip.js.map +0 -1
- package/dist/renderer/cache/GLImageCache.js +0 -74
- package/dist/renderer/cache/GLImageCache.js.map +0 -1
- package/dist/renderer/cache/GLMeshCache.js +0 -102
- package/dist/renderer/cache/GLMeshCache.js.map +0 -1
- package/dist/renderer/cache/GLTextureCache.js +0 -68
- package/dist/renderer/cache/GLTextureCache.js.map +0 -1
- package/dist/renderer/cache/GradientRampAtlas.js +0 -82
- package/dist/renderer/cache/GradientRampAtlas.js.map +0 -1
- package/dist/renderer/cache/cache.js +0 -13
- package/dist/renderer/cache/cache.js.map +0 -1
- package/dist/renderer/cache/markerCommandCache.js +0 -63
- package/dist/renderer/cache/markerCommandCache.js.map +0 -1
- package/dist/renderer/cache/outlineMeshCache.js +0 -15
- package/dist/renderer/cache/outlineMeshCache.js.map +0 -1
- package/dist/renderer/cache/outlineStrokeMeshCache.js +0 -36
- package/dist/renderer/cache/outlineStrokeMeshCache.js.map +0 -1
- package/dist/renderer/cache/strokeMeshCache.js +0 -55
- package/dist/renderer/cache/strokeMeshCache.js.map +0 -1
- package/dist/renderer/cullDrawCommands.js +0 -90
- package/dist/renderer/cullDrawCommands.js.map +0 -1
- package/dist/renderer/draw/batch.js +0 -133
- package/dist/renderer/draw/batch.js.map +0 -1
- package/dist/renderer/draw/clip.js +0 -89
- package/dist/renderer/draw/clip.js.map +0 -1
- package/dist/renderer/draw/customShader.js +0 -230
- package/dist/renderer/draw/customShader.js.map +0 -1
- package/dist/renderer/draw/drawTriangles.js +0 -8
- package/dist/renderer/draw/drawTriangles.js.map +0 -1
- package/dist/renderer/draw/effects.js +0 -28
- package/dist/renderer/draw/effects.js.map +0 -1
- package/dist/renderer/draw/flushBatch.js +0 -35
- package/dist/renderer/draw/flushBatch.js.map +0 -1
- package/dist/renderer/draw/gradient.js +0 -90
- package/dist/renderer/draw/gradient.js.map +0 -1
- package/dist/renderer/draw/image.js +0 -38
- package/dist/renderer/draw/image.js.map +0 -1
- package/dist/renderer/draw/mesh.js +0 -16
- package/dist/renderer/draw/mesh.js.map +0 -1
- package/dist/renderer/draw/paintBind.js +0 -70
- package/dist/renderer/draw/paintBind.js.map +0 -1
- package/dist/renderer/draw/pathPaint.js +0 -142
- package/dist/renderer/draw/pathPaint.js.map +0 -1
- package/dist/renderer/draw/scratchPass.js +0 -83
- package/dist/renderer/draw/scratchPass.js.map +0 -1
- package/dist/renderer/draw/stencil.js +0 -28
- package/dist/renderer/draw/stencil.js.map +0 -1
- package/dist/renderer/draw/text.js +0 -167
- package/dist/renderer/draw/text.js.map +0 -1
- package/dist/renderer/draw/uniforms.js +0 -77
- package/dist/renderer/draw/uniforms.js.map +0 -1
- package/dist/renderer/draw.js +0 -79
- package/dist/renderer/draw.js.map +0 -1
- package/dist/renderer/drawBatch.js +0 -198
- package/dist/renderer/drawBatch.js.map +0 -1
- package/dist/renderer/effects/EffectTargets.js +0 -48
- package/dist/renderer/effects/EffectTargets.js.map +0 -1
- package/dist/renderer/effects/builtins.js +0 -31
- package/dist/renderer/effects/builtins.js.map +0 -1
- package/dist/renderer/effects/composite.js +0 -11
- package/dist/renderer/effects/composite.js.map +0 -1
- package/dist/renderer/effects/effectPrelude.js +0 -10
- package/dist/renderer/effects/effectPrelude.js.map +0 -1
- package/dist/renderer/effects/types.js +0 -10
- package/dist/renderer/effects/types.js.map +0 -1
- package/dist/renderer/glyphOutlineMesh.js +0 -67
- package/dist/renderer/glyphOutlineMesh.js.map +0 -1
- package/dist/renderer/index.js +0 -20
- package/dist/renderer/math/color.js +0 -321
- package/dist/renderer/math/color.js.map +0 -1
- package/dist/renderer/math/mat3.js +0 -80
- package/dist/renderer/math/mat3.js.map +0 -1
- package/dist/renderer/math/patternSpace.js +0 -22
- package/dist/renderer/math/patternSpace.js.map +0 -1
- package/dist/renderer/math/viewToMat3.js +0 -19
- package/dist/renderer/math/viewToMat3.js.map +0 -1
- package/dist/renderer/paintResources.js +0 -18
- package/dist/renderer/paintResources.js.map +0 -1
- package/dist/renderer/paintScratch.js +0 -37
- package/dist/renderer/paintScratch.js.map +0 -1
- package/dist/renderer/shaders/ShaderProgram.js +0 -74
- package/dist/renderer/shaders/ShaderProgram.js.map +0 -1
- package/dist/renderer/shaders/batchFill.js +0 -119
- package/dist/renderer/shaders/batchFill.js.map +0 -1
- package/dist/renderer/shaders/customPrelude.js +0 -34
- package/dist/renderer/shaders/customPrelude.js.map +0 -1
- package/dist/renderer/shaders/extractUniformNames.js +0 -184
- package/dist/renderer/shaders/extractUniformNames.js.map +0 -1
- package/dist/renderer/shaders/glyphPaint.js +0 -61
- package/dist/renderer/shaders/glyphPaint.js.map +0 -1
- package/dist/renderer/shaders/gradFill.js +0 -31
- package/dist/renderer/shaders/gradFill.js.map +0 -1
- package/dist/renderer/shaders/pathFill.js +0 -14
- package/dist/renderer/shaders/pathFill.js.map +0 -1
- package/dist/renderer/shaders/patternFill.js +0 -25
- package/dist/renderer/shaders/patternFill.js.map +0 -1
- package/dist/renderer/shaders/registerProgram.js +0 -18
- package/dist/renderer/shaders/registerProgram.js.map +0 -1
- package/dist/renderer/spriteSheet.js +0 -14
- package/dist/renderer/spriteSheet.js.map +0 -1
- package/dist/renderer/state/GroupState.js +0 -77
- package/dist/renderer/state/GroupState.js.map +0 -1
- package/dist/renderer/strokeLengths.js +0 -50
- package/dist/renderer/strokeLengths.js.map +0 -1
- package/dist/renderer/syntheticItalic.js +0 -6
- package/dist/renderer/syntheticItalic.js.map +0 -1
- package/dist/renderer/textures/registerTexture.js +0 -34
- package/dist/renderer/textures/registerTexture.js.map +0 -1
- package/dist/scheduling/useVisibleRaf.js +0 -69
- package/dist/scheduling/useVisibleRaf.js.map +0 -1
- package/dist/test-seams-DM2B87-g.d.ts +0 -356
|
@@ -1,63 +0,0 @@
|
|
|
1
|
-
import { screenSpaceKey as e } from "../../features/paths/tessellate/metric.js";
|
|
2
|
-
import { getMarker as t, markerGeneration as n } from "../../core/strokeMarkers.js";
|
|
3
|
-
import { markerKeyOf as r } from "../../core/markerInset.js";
|
|
4
|
-
import { STROKE_CONFIGS_PER_PATH as i } from "./strokeMeshCache.js";
|
|
5
|
-
import { headCommands as a, markerHeads as o, markerReadsKey as s } from "../../features/paths/markerCommands.js";
|
|
6
|
-
//#region src/renderer/cache/markerCommandCache.ts
|
|
7
|
-
var c = /* @__PURE__ */ new WeakMap(), l = /* @__PURE__ */ new WeakMap(), u = (e) => e === void 0 ? "" : typeof e == "string" ? e : `${e.key}@${String(e.size ?? "")}`;
|
|
8
|
-
function d(e) {
|
|
9
|
-
let n = "";
|
|
10
|
-
for (let i of [
|
|
11
|
-
e.markerStart,
|
|
12
|
-
e.markerMid,
|
|
13
|
-
e.markerEnd
|
|
14
|
-
]) {
|
|
15
|
-
let a = i === void 0 ? void 0 : t(r(i));
|
|
16
|
-
if (a === void 0) {
|
|
17
|
-
n += "/";
|
|
18
|
-
continue;
|
|
19
|
-
}
|
|
20
|
-
let o = s(a, e);
|
|
21
|
-
if (o === null) return null;
|
|
22
|
-
n += `${o}/`;
|
|
23
|
-
}
|
|
24
|
-
return n;
|
|
25
|
-
}
|
|
26
|
-
function f(e, t, n) {
|
|
27
|
-
if (n !== null) {
|
|
28
|
-
let t = c.get(e);
|
|
29
|
-
return t === void 0 && c.set(e, t = /* @__PURE__ */ new Map()), t;
|
|
30
|
-
}
|
|
31
|
-
let r = l.get(e);
|
|
32
|
-
r === void 0 && l.set(e, r = /* @__PURE__ */ new WeakMap());
|
|
33
|
-
let i = r.get(t);
|
|
34
|
-
return i === void 0 && r.set(t, i = /* @__PURE__ */ new Map()), i;
|
|
35
|
-
}
|
|
36
|
-
function p(t, r, s, c, l, p = {}) {
|
|
37
|
-
if (s.markerStart === void 0 && s.markerMid === void 0 && s.markerEnd === void 0) return [];
|
|
38
|
-
let m = d(s), h = f(t, r, m), g = [
|
|
39
|
-
c,
|
|
40
|
-
l ?? "",
|
|
41
|
-
n(),
|
|
42
|
-
u(s.markerStart),
|
|
43
|
-
u(s.markerMid),
|
|
44
|
-
u(s.markerEnd),
|
|
45
|
-
m ?? "",
|
|
46
|
-
e(p.start),
|
|
47
|
-
e(p.mid),
|
|
48
|
-
e(p.end)
|
|
49
|
-
].join("|"), _ = h.get(g);
|
|
50
|
-
if (_ === void 0) {
|
|
51
|
-
let e = o(t, s, c, l, p);
|
|
52
|
-
_ = {
|
|
53
|
-
heads: e,
|
|
54
|
-
paint: s.paint,
|
|
55
|
-
cmds: a(e, s)
|
|
56
|
-
}, h.size >= i && h.clear(), h.set(g, _);
|
|
57
|
-
} else _.paint !== s.paint && (_.paint = s.paint, _.cmds = a(_.heads, s));
|
|
58
|
-
return _.cmds;
|
|
59
|
-
}
|
|
60
|
-
//#endregion
|
|
61
|
-
export { p as cachedMarkerCommands };
|
|
62
|
-
|
|
63
|
-
//# sourceMappingURL=markerCommandCache.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"markerCommandCache.js","names":["byValue","byStroke","refKey","ref","readsKey","key","stroke","entry","getMarker","markerKeyOf","reads","markerReadsKey","mapFor","map","path","strokes","source","cachedMarkerCommands","strokeWidth","flattenTolerance","markerGeneration","screenSpaceKey","spaces","heads","markerHeads","headCommands","STROKE_CONFIGS_PER_PATH"],"sources":["../../../src/renderer/cache/markerCommandCache.ts"],"sourcesContent":["/**\n * A stroke's marker commands, cached per path. The placed head is a fresh\n * `Path`, and the fill cache keys on path identity — so rebuilding it every\n * frame would re-tessellate and re-upload every head every frame.\n *\n * Keyed on value, so a painter that builds a new stroke object every frame\n * still hits: the resolved lengths, the flatten tolerance, the registry's\n * generation, the marker refs and whatever fields each head declares it reads.\n * A head that does not declare them may read any field, so for it the stroke\n * as the command carried it — before any `{ px }` length was resolved — joins\n * the key by identity. Paint is applied over the cached geometry, so a new\n * paint reuses the heads.\n */\n\nimport type { Path } from '@weasel-js/geom';\nimport type { CommandFill, MarkerRef, CommandStroke } from '@weasel-js/paint';\nimport type { PathDrawCommand } from '../DrawCommand';\nimport {\n headCommands, markerHeads, markerReadsKey, type MarkerHead,\n} from 'features/paths/markerCommands';\nimport { getMarker, markerGeneration } from '../../core/strokeMarkers';\nimport { markerKeyOf } from '../../core/markerInset';\nimport { STROKE_CONFIGS_PER_PATH } from './strokeMeshCache';\nimport { screenSpaceKey, type StrokeSpaces } from 'features/paths/tessellate/metric';\n\ninterface Entry {\n readonly heads: MarkerHead[];\n paint: CommandFill | undefined;\n cmds: PathDrawCommand[];\n}\n\nlet byValue = new WeakMap<Path, Map<string, Entry>>();\nlet byStroke = new WeakMap<Path, WeakMap<CommandStroke, Map<string, Entry>>>();\n\nconst refKey = (ref: MarkerRef | undefined): string =>\n ref === undefined ? '' : typeof ref === 'string' ? ref : `${ref.key}@${String(ref.size ?? '')}`;\n\n/** What every head of `stroke` reads, or `null` if any head does not say. */\nfunction readsKey(stroke: CommandStroke): string | null {\n let key = '';\n for (const ref of [stroke.markerStart, stroke.markerMid, stroke.markerEnd]) {\n const entry = ref === undefined ? undefined : getMarker(markerKeyOf(ref));\n if (entry === undefined) {\n key += '/';\n continue;\n }\n const reads = markerReadsKey(entry, stroke);\n if (reads === null) return null;\n key += `${reads}/`;\n }\n return key;\n}\n\nfunction mapFor(path: Path, source: CommandStroke, reads: string | null): Map<string, Entry> {\n if (reads !== null) {\n let map = byValue.get(path);\n if (map === undefined) byValue.set(path, (map = new Map()));\n return map;\n }\n let strokes = byStroke.get(path);\n if (strokes === undefined) byStroke.set(path, (strokes = new WeakMap()));\n let map = strokes.get(source);\n if (map === undefined) strokes.set(source, (map = new Map()));\n return map;\n}\n\n/**\n * The marker commands for `path` under `stroke`, whose lengths are already\n * resolved. `source` is the stroke before that resolution. A head's lengths are\n * in the space `spaces` builds it in.\n */\nexport function cachedMarkerCommands(\n path: Path,\n source: CommandStroke,\n stroke: CommandStroke,\n strokeWidth: number,\n flattenTolerance: number | undefined,\n spaces: StrokeSpaces = {},\n): PathDrawCommand[] {\n if (stroke.markerStart === undefined && stroke.markerMid === undefined && stroke.markerEnd === undefined) {\n return [];\n }\n const reads = readsKey(stroke);\n const map = mapFor(path, source, reads);\n const key = [\n strokeWidth,\n flattenTolerance ?? '',\n markerGeneration(),\n refKey(stroke.markerStart),\n refKey(stroke.markerMid),\n refKey(stroke.markerEnd),\n reads ?? '',\n screenSpaceKey(spaces.start),\n screenSpaceKey(spaces.mid),\n screenSpaceKey(spaces.end),\n ].join('|');\n let entry = map.get(key);\n if (entry === undefined) {\n const heads = markerHeads(path, stroke, strokeWidth, flattenTolerance, spaces);\n entry = { heads, paint: stroke.paint, cmds: headCommands(heads, stroke) };\n if (map.size >= STROKE_CONFIGS_PER_PATH) map.clear();\n map.set(key, entry);\n } else if (entry.paint !== stroke.paint) {\n entry.paint = stroke.paint;\n entry.cmds = headCommands(entry.heads, stroke);\n }\n return entry.cmds;\n}\n\n/** Test helper. Do not call from product code. */\nexport function _resetMarkerCommandCacheForTests(): void {\n byValue = new WeakMap();\n byStroke = new WeakMap();\n}\n"],"mappings":";;;;;;AA+BA,IAAIA,oBAAU,IAAI,QAAkC,GAChDC,oBAAW,IAAI,QAA0D,GAEvEC,KAAU,MACdC,MAAQ,KAAA,IAAY,KAAK,OAAOA,KAAQ,WAAWA,IAAM,GAAGA,EAAI,IAAI,GAAG,OAAOA,EAAI,QAAQ,EAAE;AAG9F,SAASC,EAAS,GAAsC;CACtD,IAAIC,IAAM;CACV,KAAK,IAAMF,KAAO;EAACG,EAAO;EAAaA,EAAO;EAAWA,EAAO;CAAS,GAAG;EAC1E,IAAMC,IAAQJ,MAAQ,KAAA,IAAY,KAAA,IAAYK,EAAUC,EAAYN,CAAG,CAAC;EACxE,IAAII,MAAU,KAAA,GAAW;GACvB,KAAO;GACP;EACF;EACA,IAAMG,IAAQC,EAAeJ,GAAOD,CAAM;EAC1C,IAAII,MAAU,MAAM,OAAO;EAC3B,KAAO,GAAGA,EAAM;CAClB;CACA,OAAOL;AACT;AAEA,SAASO,EAAO,GAAY,GAAuB,GAA0C;CAC3F,IAAIF,MAAU,MAAM;EAClB,IAAIG,IAAMb,EAAQ,IAAIc,CAAI;EAE1B,OADID,MAAQ,KAAA,KAAWb,EAAQ,IAAIc,GAAO,oBAAM,IAAI,IAAI,CAAE,GACnDD;CACT;CACA,IAAIE,IAAUd,EAAS,IAAIa,CAAI;CAC/B,AAAIC,MAAY,KAAA,KAAWd,EAAS,IAAIa,GAAO,oBAAU,IAAI,QAAQ,CAAE;CACvE,IAAID,IAAME,EAAQ,IAAIC,CAAM;CAE5B,OADIH,MAAQ,KAAA,KAAWE,EAAQ,IAAIC,GAAS,oBAAM,IAAI,IAAI,CAAE,GACrDH;AACT;AAOA,SAAgBI,EACd,GACA,GACA,GACA,GACA,GACA,IAAuB,CAAC,GACL;CACnB,IAAIX,EAAO,gBAAgB,KAAA,KAAaA,EAAO,cAAc,KAAA,KAAaA,EAAO,cAAc,KAAA,GAC7F,OAAO,CAAC;CAEV,IAAMI,IAAQN,EAASE,CAAM,GACvBO,IAAMD,EAAOE,GAAME,GAAQN,CAAK,GAChCL,IAAM;EACVa;EACAC,KAAoB;EACpBC,EAAiB;EACjBlB,EAAOI,EAAO,WAAW;EACzBJ,EAAOI,EAAO,SAAS;EACvBJ,EAAOI,EAAO,SAAS;EACvBI,KAAS;EACTW,EAAeC,EAAO,KAAK;EAC3BD,EAAeC,EAAO,GAAG;EACzBD,EAAeC,EAAO,GAAG;CAC3B,CAAC,CAAC,KAAK,GAAG,GACNf,IAAQM,EAAI,IAAIR,CAAG;CACvB,IAAIE,MAAU,KAAA,GAAW;EACvB,IAAMgB,IAAQC,EAAYV,GAAMR,GAAQY,GAAaC,GAAkBG,CAAM;EAG7E,AAFA,IAAQ;GAAE;GAAO,OAAOhB,EAAO;GAAO,MAAMmB,EAAaF,GAAOjB,CAAM;EAAE,GACpEO,EAAI,QAAQa,KAAyBb,EAAI,MAAM,GACnDA,EAAI,IAAIR,GAAKE,CAAK;CACpB,OAAO,AAAIA,EAAM,UAAUD,EAAO,UAChC,EAAM,QAAQA,EAAO,OACrB,EAAM,OAAOmB,EAAalB,EAAM,OAAOD,CAAM;CAE/C,OAAOC,EAAM;AACf"}
|
|
@@ -1,15 +0,0 @@
|
|
|
1
|
-
import { pathFromD as e } from "@weasel-js/geom";
|
|
2
|
-
import { tessellate as t } from "@weasel-js/geom/tessellate";
|
|
3
|
-
//#region src/renderer/cache/outlineMeshCache.ts
|
|
4
|
-
var n = 1 / 4096, r = 2048, i = /* @__PURE__ */ new Map();
|
|
5
|
-
function a(a, o) {
|
|
6
|
-
let s = i.get(a);
|
|
7
|
-
if (s !== void 0) return s;
|
|
8
|
-
i.size >= r && (i = /* @__PURE__ */ new Map());
|
|
9
|
-
let c = t(e(o), { flattenTolerance: n });
|
|
10
|
-
return i.set(a, c), c;
|
|
11
|
-
}
|
|
12
|
-
//#endregion
|
|
13
|
-
export { n as OUTLINE_FLATTEN_TOLERANCE, r as OUTLINE_MESH_CACHE_LIMIT, a as outlineMesh };
|
|
14
|
-
|
|
15
|
-
//# sourceMappingURL=outlineMeshCache.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"outlineMeshCache.js","names":["OUTLINE_FLATTEN_TOLERANCE","OUTLINE_MESH_CACHE_LIMIT","cache","outlineMesh","cached","key","mesh","tessellate","pathFromD","d"],"sources":["../../../src/renderer/cache/outlineMeshCache.ts"],"sourcesContent":["/**\n * Tessellated glyph outlines, in em space.\n *\n * This is the half of the outline text tier that is expensive: parsing `d`\n * into a path and running earcut over it costs far more than the per-instance\n * transform that follows. It is also the half that does not vary — em space\n * is unit-scale and baseline-relative, so the same glyph of the same face is\n * the same triangles at every size, position and zoom. Tessellate once, keep\n * it, and pay only a scale-and-translate per occurrence.\n *\n * That is why the renderer transforms cached vertices on the CPU and appends\n * them into one shared buffer rather than giving each glyph its own model\n * matrix: a per-glyph matrix would mean a draw call per glyph, throwing away\n * the batching the atlas tier already has, in exchange for saving an\n * arithmetic pass over a few hundred vertices.\n *\n * ### Flatten tolerance\n *\n * Tessellating once means committing to a curve tolerance once, and em space\n * makes that a clean tradeoff rather than a guess: an error of `T` em shows\n * up as `T × fontSize × viewScale` screen pixels. At 1/4096 em, a glyph would\n * have to reach ~4000 screen pixels tall before the flattening error covered\n * a single pixel — well past any size a document is read at, and far enough\n * past the tier's own threshold that the two never interact.\n *\n * ### Bound\n *\n * A plain `Map` with a cap and wholesale eviction. Glyph tessellations are\n * small (a few hundred vertices) and the working set is a charset, not a\n * document — the cap exists so a page that cycles through many faces cannot\n * grow without limit, not because pressure is expected. Wholesale rather than\n * LRU because the refill cost is bounded by what is actually on screen, and\n * an LRU's bookkeeping would cost more than the misses it avoids.\n */\n\nimport { pathFromD } from '@weasel-js/geom';\nimport { tessellate, type Mesh } from '@weasel-js/geom/tessellate';\n\n/** Curve flattening tolerance for glyph outlines, in em. See the header. */\nexport const OUTLINE_FLATTEN_TOLERANCE = 1 / 4096;\n\n/** Cached glyph tessellations before the cache is dropped wholesale. */\nexport const OUTLINE_MESH_CACHE_LIMIT = 2048;\n\nlet cache = new Map<string, Mesh>();\n\n/**\n * The em-space tessellation of one glyph.\n *\n * `key` identifies the glyph — face identity plus codepoint, assembled by\n * `layoutRuns`. `d` is only read on a miss, so passing the path data on every\n * call costs nothing; it is already in hand from the same source.\n */\nexport function outlineMesh(key: string, d: string): Mesh {\n const cached = cache.get(key);\n if (cached !== undefined) return cached;\n if (cache.size >= OUTLINE_MESH_CACHE_LIMIT) cache = new Map();\n const mesh = tessellate(pathFromD(d), { flattenTolerance: OUTLINE_FLATTEN_TOLERANCE });\n cache.set(key, mesh);\n return mesh;\n}\n\n/** Test helper. Do not call from product code. */\nexport function _resetOutlineMeshCacheForTests(): void {\n cache = new Map();\n}\n"],"mappings":";;;AAuCA,IAAaA,IAA4B,IAAI,MAGhCC,IAA2B,MAEpCC,oBAAQ,IAAI,IAAkB;AASlC,SAAgBC,EAAY,GAAa,GAAiB;CACxD,IAAMC,IAASF,EAAM,IAAIG,CAAG;CAC5B,IAAID,MAAW,KAAA,GAAW,OAAOA;CACjC,AAAIF,EAAM,QAAQD,MAA0B,oBAAQ,IAAI,IAAI;CAC5D,IAAMK,IAAOC,EAAWC,EAAUC,CAAC,GAAG,EAAE,kBAAkBT,EAA0B,CAAC;CAErF,OADAE,EAAM,IAAIG,GAAKC,CAAI,GACZA;AACT"}
|
|
@@ -1,36 +0,0 @@
|
|
|
1
|
-
import { metricKey as e } from "../../features/paths/tessellate/metric.js";
|
|
2
|
-
import { tessellateStroke as t } from "../../features/paths/tessellate/stroke.js";
|
|
3
|
-
import { OUTLINE_FLATTEN_TOLERANCE as n } from "./outlineMeshCache.js";
|
|
4
|
-
import { pathFromD as r } from "@weasel-js/geom";
|
|
5
|
-
//#region src/renderer/cache/outlineStrokeMeshCache.ts
|
|
6
|
-
var i = 2048, a = 1 / 1024, o = /* @__PURE__ */ new Map();
|
|
7
|
-
function s(e) {
|
|
8
|
-
return Math.round(e / a) * a;
|
|
9
|
-
}
|
|
10
|
-
function c(a, s, c, l, u) {
|
|
11
|
-
if (!(c > 0)) return null;
|
|
12
|
-
let d = [
|
|
13
|
-
a,
|
|
14
|
-
c,
|
|
15
|
-
l.join ?? "miter",
|
|
16
|
-
l.cap ?? "butt",
|
|
17
|
-
l.miterLimit ?? "",
|
|
18
|
-
l.align ?? "center",
|
|
19
|
-
(l.dash ?? []).join(","),
|
|
20
|
-
e(u)
|
|
21
|
-
].join("|"), f = o.get(d);
|
|
22
|
-
if (f !== void 0) return f.indices.length === 0 ? null : f;
|
|
23
|
-
o.size >= i && (o = /* @__PURE__ */ new Map());
|
|
24
|
-
let p = t(r(s), {
|
|
25
|
-
...l,
|
|
26
|
-
width: c
|
|
27
|
-
}, {
|
|
28
|
-
flattenTolerance: n,
|
|
29
|
-
metric: u
|
|
30
|
-
});
|
|
31
|
-
return o.set(d, p), p.indices.length === 0 ? null : p;
|
|
32
|
-
}
|
|
33
|
-
//#endregion
|
|
34
|
-
export { i as OUTLINE_STROKE_MESH_CACHE_LIMIT, c as outlineStrokeMesh, s as quantizeEmWidth };
|
|
35
|
-
|
|
36
|
-
//# sourceMappingURL=outlineStrokeMeshCache.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"outlineStrokeMeshCache.js","names":["OUTLINE_STROKE_MESH_CACHE_LIMIT","WIDTH_QUANTUM","cache","quantizeEmWidth","emWidth","outlineStrokeMesh","key","glyphKey","stroke","metricKey","metric","cached","mesh","tessellateStroke","pathFromD","d","OUTLINE_FLATTEN_TOLERANCE"],"sources":["../../../src/renderer/cache/outlineStrokeMeshCache.ts"],"sourcesContent":["/**\n * Tessellated glyph *outlines' strokes*, in em space.\n *\n * The sibling of `outlineMeshCache`, and cached for the same reason: parsing\n * `d` and tessellating a ribbon costs far more than the per-instance\n * transform that follows, and em space is size- and position-independent, so\n * one tessellation serves every occurrence of that glyph.\n *\n * ### Why the width is in the key\n *\n * A fill mesh is the same triangles at every size. A stroke's is not — the\n * ribbon's width relative to the glyph decides the geometry, so the em-space\n * mesh depends on `strokeWidth / fontSize`. That ratio is a property of the\n * run's style, not of the frame, so it is stable across frames and makes a\n * perfectly good cache key; what it is *not* is free, so a document that\n * animates stroke width or font size will miss every frame. That is the same\n * bargain `tessellate` makes everywhere else, and it is the reason the width\n * is quantized before it reaches the key: neighbouring sub-quantum widths\n * would otherwise each get their own entry and evict each other.\n *\n * Joins, caps, miter limit, alignment and dash all change the ribbon too, so\n * they are in the key as well — assembled by the caller, which already has\n * the `Stroke` in hand.\n */\n\nimport { pathFromD } from '@weasel-js/geom';\nimport { tessellateStroke } from 'features/paths/tessellate/stroke';\nimport { metricKey, type StrokeMetric } from 'features/paths/tessellate/metric';\nimport type { Stroke } from '@weasel-js/paint';\nimport type { Mesh } from '@weasel-js/geom/tessellate';\nimport { OUTLINE_FLATTEN_TOLERANCE } from './outlineMeshCache';\n\n/** Cached ribbons before the cache is dropped wholesale. Matches the fill\n * cache's cap: the working set is a charset times the handful of stroke\n * widths a document actually uses. */\nexport const OUTLINE_STROKE_MESH_CACHE_LIMIT = 2048;\n\n/**\n * Em-width quantum. 1/1024 em is finer than any width a reader can\n * distinguish at the sizes this tier serves — a 0.001 em difference is a\n * fifth of a screen pixel on 200px text — and coarse enough that a slider\n * dragged across a range lands on a bounded set of keys.\n */\nconst WIDTH_QUANTUM = 1 / 1024;\n\nlet cache = new Map<string, Mesh>();\n\n/** Quantized em width, exported so the key builder and the tessellator agree\n * on the number rather than each rounding for themselves. */\nexport function quantizeEmWidth(emWidth: number): number {\n return Math.round(emWidth / WIDTH_QUANTUM) * WIDTH_QUANTUM;\n}\n\n/**\n * The em-space stroke tessellation of one glyph.\n *\n * `glyphKey` identifies the glyph (face identity plus codepoint, assembled by\n * `layoutRuns`); `emWidth` is the stroke width in em, already quantized, and\n * `stroke`'s dashes are in em too. Given a `metric`, the ribbon is built in its\n * space and both are lengths there. `d` is only read on a miss.\n *\n * Returns `null` when the ribbon has no area — a zero or negative width, or a\n * glyph whose path is empty (a space).\n */\nexport function outlineStrokeMesh(\n glyphKey: string,\n d: string,\n emWidth: number,\n stroke: Stroke,\n metric?: StrokeMetric,\n): Mesh | null {\n if (!(emWidth > 0)) return null;\n const key = [\n glyphKey, emWidth, stroke.join ?? 'miter', stroke.cap ?? 'butt',\n stroke.miterLimit ?? '', stroke.align ?? 'center', (stroke.dash ?? []).join(','),\n metricKey(metric),\n ].join('|');\n\n const cached = cache.get(key);\n if (cached !== undefined) return cached.indices.length === 0 ? null : cached;\n if (cache.size >= OUTLINE_STROKE_MESH_CACHE_LIMIT) cache = new Map();\n\n const mesh = tessellateStroke(\n pathFromD(d),\n { ...stroke, width: emWidth },\n { flattenTolerance: OUTLINE_FLATTEN_TOLERANCE, metric },\n );\n cache.set(key, mesh);\n return mesh.indices.length === 0 ? null : mesh;\n}\n\n/** Test helper. Do not call from product code. */\nexport function _resetOutlineStrokeMeshCacheForTests(): void {\n cache = new Map();\n}\n"],"mappings":";;;;;AAmCA,IAAaA,IAAkC,MAQzCC,IAAgB,IAAI,MAEtBC,oBAAQ,IAAI,IAAkB;AAIlC,SAAgBC,EAAgB,GAAyB;CACvD,OAAO,KAAK,MAAMC,IAAUH,CAAa,IAAIA;AAC/C;AAaA,SAAgBI,EACd,GACA,GACA,GACA,GACA,GACa;CACb,IAAI,EAAED,IAAU,IAAI,OAAO;CAC3B,IAAME,IAAM;EACVC;EAAUH;EAASI,EAAO,QAAQ;EAASA,EAAO,OAAO;EACzDA,EAAO,cAAc;EAAIA,EAAO,SAAS;GAAWA,EAAO,QAAQ,CAAC,EAAA,CAAG,KAAK,GAAG;EAC/EC,EAAUC,CAAM;CAClB,CAAC,CAAC,KAAK,GAAG,GAEJC,IAAST,EAAM,IAAII,CAAG;CAC5B,IAAIK,MAAW,KAAA,GAAW,OAAOA,EAAO,QAAQ,WAAW,IAAI,OAAOA;CACtE,AAAIT,EAAM,QAAQF,MAAiC,oBAAQ,IAAI,IAAI;CAEnE,IAAMY,IAAOC,EACXC,EAAUC,CAAC,GACX;EAAE,GAAGP;EAAQ,OAAOJ;CAAQ,GAC5B;EAAE,kBAAkBY;EAA2B;CAAO,CACxD;CAEA,OADAd,EAAM,IAAII,GAAKM,CAAI,GACZA,EAAK,QAAQ,WAAW,IAAI,OAAOA;AAC5C"}
|
|
@@ -1,55 +0,0 @@
|
|
|
1
|
-
import { metricKey as e } from "../../features/paths/tessellate/metric.js";
|
|
2
|
-
import { resolveStrokeWidth as t, tessellateStroke as n } from "../../features/paths/tessellate/stroke.js";
|
|
3
|
-
import { strokeInsets as r } from "../../core/markerInset.js";
|
|
4
|
-
//#region src/renderer/cache/strokeMeshCache.ts
|
|
5
|
-
var i = 8, a = 1 / 8;
|
|
6
|
-
function o(e, t) {
|
|
7
|
-
if (!(e > 0) || !(t > 0) || !Number.isFinite(t)) return t;
|
|
8
|
-
let n = Math.ceil(Math.LN2 / (2 * Math.log1p(a / e)));
|
|
9
|
-
return 2 ** (Math.round(Math.log2(t) * n) / n);
|
|
10
|
-
}
|
|
11
|
-
var s = /* @__PURE__ */ new WeakMap();
|
|
12
|
-
function c(n, i, a) {
|
|
13
|
-
let o = t(n.width ?? 1, 1), s = r(n, o), c = a.ribbon?.metric;
|
|
14
|
-
return [
|
|
15
|
-
o,
|
|
16
|
-
n.cap ?? "butt",
|
|
17
|
-
n.join ?? "miter",
|
|
18
|
-
n.miterLimit ?? "",
|
|
19
|
-
n.align ?? "center",
|
|
20
|
-
(n.dash ?? []).join(","),
|
|
21
|
-
n.varyingWidthJoinThreshold ?? "",
|
|
22
|
-
i ?? "",
|
|
23
|
-
s.start,
|
|
24
|
-
s.end,
|
|
25
|
-
e(c),
|
|
26
|
-
e(a.start?.metric),
|
|
27
|
-
e(a.end?.metric)
|
|
28
|
-
].join("|");
|
|
29
|
-
}
|
|
30
|
-
function l(e, a, o, l = {}) {
|
|
31
|
-
let d = s.get(e);
|
|
32
|
-
d === void 0 && (d = /* @__PURE__ */ new Map(), s.set(e, d));
|
|
33
|
-
let f = c(a, o, l), p = d.get(f);
|
|
34
|
-
if (p !== void 0 && p.vertexWidths === a.vertexWidths) return p.mesh;
|
|
35
|
-
let m = t(a.width ?? 1, 1), h = r(a, m), g = n(e, a, {
|
|
36
|
-
flattenTolerance: o,
|
|
37
|
-
startInset: u(h.start, l.start, l.ribbon),
|
|
38
|
-
endInset: u(h.end, l.end, l.ribbon),
|
|
39
|
-
metric: l.ribbon?.metric
|
|
40
|
-
});
|
|
41
|
-
return p === void 0 && d.size >= i && d.clear(), d.set(f, {
|
|
42
|
-
mesh: g,
|
|
43
|
-
vertexWidths: a.vertexWidths
|
|
44
|
-
}), g;
|
|
45
|
-
}
|
|
46
|
-
function u(e, t, n) {
|
|
47
|
-
return t?.metric === n?.metric ? e : {
|
|
48
|
-
length: e,
|
|
49
|
-
metric: t?.metric ?? null
|
|
50
|
-
};
|
|
51
|
-
}
|
|
52
|
-
//#endregion
|
|
53
|
-
export { i as STROKE_CONFIGS_PER_PATH, o as quantizeStrokeScale, l as strokeMesh };
|
|
54
|
-
|
|
55
|
-
//# sourceMappingURL=strokeMeshCache.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"strokeMeshCache.js","names":["STROKE_CONFIGS_PER_PATH","PX_WIDTH_TOLERANCE","quantizeStrokeScale","px","scale","stepsPerOctave","cache","configKey","width","resolveStrokeWidth","stroke","insets","strokeInsets","ribbon","spaces","flattenTolerance","metricKey","strokeMesh","byConfig","path","key","entry","mesh","tessellateStroke","insetIn","head","length"],"sources":["../../../src/renderer/cache/strokeMeshCache.ts"],"sourcesContent":["/**\n * Tessellated stroke ribbons for scene paths, keyed on `Path` identity.\n *\n * The sibling of `cache.ts` (fills) and `outlineStrokeMeshCache.ts` (glyph\n * ribbons in em space), and it inherits their contract: identity, not content.\n * A `Path` rebuilt with equal coords is a distinct entry.\n *\n * Design: `docs/superpowers/specs/2026-08-15-stroke-ribbon-cache-design.md`.\n */\n\nimport type { Path } from '@weasel-js/geom';\nimport type { Stroke } from '@weasel-js/paint';\nimport { tessellateStroke, resolveStrokeWidth } from 'features/paths/tessellate/stroke';\nimport { strokeInsets } from '../../core/markerInset';\nimport { metricKey, type ScreenSpace, type StrokeSpaces } from 'features/paths/tessellate/metric';\nimport type { InsetLength } from 'features/paths/tessellate/insets';\nimport type { Mesh } from '@weasel-js/geom/tessellate';\n\n/**\n * Distinct stroke configurations kept per path before that path's map is\n * dropped wholesale. A document uses a handful; a width slider passes this on\n * its first drag and then degrades to tessellating every frame, which is what\n * it did before this cache existed.\n */\nexport const STROKE_CONFIGS_PER_PATH = 8;\n\n/** Screen-pixel bound on how far a quantized `{ px }` ribbon's width may\n * drift from the width asked for: each edge moves at most half of it. */\nconst PX_WIDTH_TOLERANCE = 1 / 8;\n\n/**\n * `scale` snapped to a log-spaced grid, for resolving a `{ px }` width against.\n * Resolving against the raw scale gives a continuous zoom a new cache key every\n * frame. The grid is fine enough that the resolved ribbon stays within\n * `PX_WIDTH_TOLERANCE` screen pixels of `px`, so it is coarser for thin\n * strokes, and powers of two land on it exactly.\n */\nexport function quantizeStrokeScale(px: number, scale: number): number {\n if (!(px > 0) || !(scale > 0) || !Number.isFinite(scale)) return scale;\n const stepsPerOctave = Math.ceil(Math.LN2 / (2 * Math.log1p(PX_WIDTH_TOLERANCE / px)));\n return 2 ** (Math.round(Math.log2(scale) * stepsPerOctave) / stepsPerOctave);\n}\n\ninterface StrokeEntry {\n readonly mesh: Mesh;\n /** Compared by reference — long enough that stringifying it per frame would\n * cost what the cache saves. */\n readonly vertexWidths: number[] | undefined;\n}\n\nlet cache = new WeakMap<Path, Map<string, StrokeEntry>>();\n\n/** The stroke parameters that change the ribbon's geometry. `paint` and\n * `vertexColors` are absent on purpose: both are applied over the same\n * triangles at draw time. Marker *identity* is absent too — only the\n * resolved trim distance affects these triangles, so two heads with the\n * same inset share one entry. */\nfunction configKey(stroke: Stroke, flattenTolerance: number | undefined, spaces: StrokeSpaces): string {\n const width = resolveStrokeWidth(stroke.width ?? 1, 1);\n const insets = strokeInsets(stroke, width);\n const ribbon = spaces.ribbon?.metric;\n return [\n width,\n stroke.cap ?? 'butt',\n stroke.join ?? 'miter',\n stroke.miterLimit ?? '',\n stroke.align ?? 'center',\n (stroke.dash ?? []).join(','),\n stroke.varyingWidthJoinThreshold ?? '',\n flattenTolerance ?? '',\n insets.start,\n insets.end,\n metricKey(ribbon),\n metricKey(spaces.start?.metric),\n metricKey(spaces.end?.metric),\n ].join('|');\n}\n\n/** The tessellated ribbon for `path` under `stroke`, built in the space\n * `spaces` names for it, and stopped short of each head in that head's own.\n * The same `Mesh` object comes back for as long as the entry lives. */\nexport function strokeMesh(\n path: Path,\n stroke: Stroke,\n flattenTolerance: number | undefined,\n spaces: StrokeSpaces = {},\n): Mesh {\n let byConfig = cache.get(path);\n if (byConfig === undefined) {\n byConfig = new Map<string, StrokeEntry>();\n cache.set(path, byConfig);\n }\n\n const key = configKey(stroke, flattenTolerance, spaces);\n const entry = byConfig.get(key);\n if (entry !== undefined && entry.vertexWidths === stroke.vertexWidths) {\n return entry.mesh;\n }\n\n const width = resolveStrokeWidth(stroke.width ?? 1, 1);\n const insets = strokeInsets(stroke, width);\n const mesh = tessellateStroke(path, stroke, {\n flattenTolerance,\n startInset: insetIn(insets.start, spaces.start, spaces.ribbon),\n endInset: insetIn(insets.end, spaces.end, spaces.ribbon),\n metric: spaces.ribbon?.metric,\n });\n // Only a new key grows the map; replacing one under a churning\n // `vertexWidths` must not evict the other configurations alongside it.\n if (entry === undefined && byConfig.size >= STROKE_CONFIGS_PER_PATH) byConfig.clear();\n byConfig.set(key, { mesh, vertexWidths: stroke.vertexWidths });\n return mesh;\n}\n\n/** `length`, measured in `head`'s space, as the tessellator reads it. */\nfunction insetIn(length: number, head: ScreenSpace | undefined, ribbon: ScreenSpace | undefined): InsetLength {\n return head?.metric === ribbon?.metric ? length : { length, metric: head?.metric ?? null };\n}\n\n/** Test helper. Do not call from product code. */\nexport function _resetStrokeMeshCacheForTests(): void {\n cache = new WeakMap();\n}\n"],"mappings":";;;;AAwBA,IAAaA,IAA0B,GAIjCC,IAAqB,IAAI;AAS/B,SAAgBC,EAAoB,GAAY,GAAuB;CACrE,IAAI,EAAEC,IAAK,MAAM,EAAEC,IAAQ,MAAM,CAAC,OAAO,SAASA,CAAK,GAAG,OAAOA;CACjE,IAAMC,IAAiB,KAAK,KAAK,KAAK,OAAO,IAAI,KAAK,MAAMJ,IAAqBE,CAAE,EAAE;CACrF,OAAO,MAAM,KAAK,MAAM,KAAK,KAAKC,CAAK,IAAIC,CAAc,IAAIA;AAC/D;AASA,IAAIC,oBAAQ,IAAI,QAAwC;AAOxD,SAASC,EAAU,GAAgB,GAAsC,GAA8B;CACrG,IAAMC,IAAQC,EAAmBC,EAAO,SAAS,GAAG,CAAC,GAC/CC,IAASC,EAAaF,GAAQF,CAAK,GACnCK,IAASC,EAAO,QAAQ;CAC9B,OAAO;EACLN;EACAE,EAAO,OAAO;EACdA,EAAO,QAAQ;EACfA,EAAO,cAAc;EACrBA,EAAO,SAAS;GACfA,EAAO,QAAQ,CAAC,EAAA,CAAG,KAAK,GAAG;EAC5BA,EAAO,6BAA6B;EACpCK,KAAoB;EACpBJ,EAAO;EACPA,EAAO;EACPK,EAAUH,CAAM;EAChBG,EAAUF,EAAO,OAAO,MAAM;EAC9BE,EAAUF,EAAO,KAAK,MAAM;CAC9B,CAAC,CAAC,KAAK,GAAG;AACZ;AAKA,SAAgBG,EACd,GACA,GACA,GACA,IAAuB,CAAC,GAClB;CACN,IAAIC,IAAWZ,EAAM,IAAIa,CAAI;CAC7B,AAAID,MAAa,KAAA,MACf,oBAAW,IAAI,IAAyB,GACxCZ,EAAM,IAAIa,GAAMD,CAAQ;CAG1B,IAAME,IAAMb,EAAUG,GAAQK,GAAkBD,CAAM,GAChDO,IAAQH,EAAS,IAAIE,CAAG;CAC9B,IAAIC,MAAU,KAAA,KAAaA,EAAM,iBAAiBX,EAAO,cACvD,OAAOW,EAAM;CAGf,IAAMb,IAAQC,EAAmBC,EAAO,SAAS,GAAG,CAAC,GAC/CC,IAASC,EAAaF,GAAQF,CAAK,GACnCc,IAAOC,EAAiBJ,GAAMT,GAAQ;EAC1C;EACA,YAAYc,EAAQb,EAAO,OAAOG,EAAO,OAAOA,EAAO,MAAM;EAC7D,UAAUU,EAAQb,EAAO,KAAKG,EAAO,KAAKA,EAAO,MAAM;EACvD,QAAQA,EAAO,QAAQ;CACzB,CAAC;CAKD,OAFIO,MAAU,KAAA,KAAaH,EAAS,QAAQlB,KAAyBkB,EAAS,MAAM,GACpFA,EAAS,IAAIE,GAAK;EAAE;EAAM,cAAcV,EAAO;CAAa,CAAC,GACtDY;AACT;AAGA,SAASE,EAAQ,GAAgB,GAA+B,GAA8C;CAC5G,OAAOC,GAAM,WAAWZ,GAAQ,SAASa,IAAS;EAAE;EAAQ,QAAQD,GAAM,UAAU;CAAK;AAC3F"}
|
|
@@ -1,90 +0,0 @@
|
|
|
1
|
-
import { mat3 as e } from "./math/mat3.js";
|
|
2
|
-
import { resolveStrokeWidth as t } from "../features/paths/tessellate/stroke.js";
|
|
3
|
-
import { markerReach as n } from "../features/paths/markerCommands.js";
|
|
4
|
-
import { SPRITE_STRIDE as r } from "./DrawCommand.js";
|
|
5
|
-
import { resolveScreenLength as i } from "@weasel-js/paint";
|
|
6
|
-
//#region src/renderer/cullDrawCommands.ts
|
|
7
|
-
var a = 1, o = 4;
|
|
8
|
-
function s(e, t, n) {
|
|
9
|
-
return c(e, t, h(n));
|
|
10
|
-
}
|
|
11
|
-
function c(e, t, n) {
|
|
12
|
-
let r = null;
|
|
13
|
-
for (let i = 0; i < e.length; i++) {
|
|
14
|
-
let a = e[i], o = l(a, t, n);
|
|
15
|
-
if (o === a) {
|
|
16
|
-
r?.push(a);
|
|
17
|
-
continue;
|
|
18
|
-
}
|
|
19
|
-
r ??= e.slice(0, i), o && r.push(o);
|
|
20
|
-
}
|
|
21
|
-
return r ?? e;
|
|
22
|
-
}
|
|
23
|
-
function l(t, n, r) {
|
|
24
|
-
switch (t.kind) {
|
|
25
|
-
case "group": {
|
|
26
|
-
if (t.effects && t.effects.length > 0) return t;
|
|
27
|
-
let i = t.transform ? e.multiply(n, t.transform) : n, a = c(t.children, i, r);
|
|
28
|
-
return a === t.children ? t : a.length === 0 ? null : {
|
|
29
|
-
...t,
|
|
30
|
-
children: a
|
|
31
|
-
};
|
|
32
|
-
}
|
|
33
|
-
case "path": return u(t.path, t.stroke, n, r) ? null : t;
|
|
34
|
-
case "image": return g(t.x, t.y, t.x + t.w, t.y + t.h, n, r) ? null : t;
|
|
35
|
-
case "sprites": return p(t.sprites, n, r) ? null : t;
|
|
36
|
-
default: return t;
|
|
37
|
-
}
|
|
38
|
-
}
|
|
39
|
-
function u(e, t, n, r) {
|
|
40
|
-
let i, a, o, s;
|
|
41
|
-
if (e.kind === "rect") i = Math.min(e.x, e.x + e.width), o = Math.max(e.x, e.x + e.width), a = Math.min(e.y, e.y + e.height), s = Math.max(e.y, e.y + e.height);
|
|
42
|
-
else if (e.kind === "polygon") {
|
|
43
|
-
let t = e.coords;
|
|
44
|
-
if (t.length < 2) return !1;
|
|
45
|
-
i = o = t[0], a = s = t[1];
|
|
46
|
-
for (let e = 2; e + 1 < t.length; e += 2) {
|
|
47
|
-
let n = t[e], r = t[e + 1];
|
|
48
|
-
n < i ? i = n : n > o && (o = n), r < a ? a = r : r > s && (s = r);
|
|
49
|
-
}
|
|
50
|
-
} else return !1;
|
|
51
|
-
let c = t ? d(t, n) : 0;
|
|
52
|
-
return g(i - c, a - c, o + c, s + c, n, r);
|
|
53
|
-
}
|
|
54
|
-
function d(t, n) {
|
|
55
|
-
return f(t, e.meanScaleOf(n), e.minScaleOf(n));
|
|
56
|
-
}
|
|
57
|
-
function f(e, r, a = r) {
|
|
58
|
-
let s = a > 0 ? a : r, c = t(e.width ?? 1, typeof e.width == "object" ? s : r);
|
|
59
|
-
if (e.vertexWidths) for (let t of e.vertexWidths) t > c && (c = t);
|
|
60
|
-
let l = Math.max(e.miterLimit ?? o, Math.SQRT2), u = n(e);
|
|
61
|
-
return Math.max(Math.abs(c) * l, u.world, i({ px: u.px }, s));
|
|
62
|
-
}
|
|
63
|
-
function p(e, t, n) {
|
|
64
|
-
let i = Infinity, a = Infinity, o = -Infinity, s = -Infinity;
|
|
65
|
-
for (let t = 0; t + r <= e.length; t += r) {
|
|
66
|
-
let n = e[t], r = e[t + 1], c = n + e[t + 2], l = r + e[t + 3];
|
|
67
|
-
i = Math.min(i, n, c), o = Math.max(o, n, c), a = Math.min(a, r, l), s = Math.max(s, r, l);
|
|
68
|
-
}
|
|
69
|
-
return i !== Infinity && g(i, a, o, s, t, n);
|
|
70
|
-
}
|
|
71
|
-
function m(e, t, n) {
|
|
72
|
-
let r = Math.min(e.x, e.x + e.width), i = Math.max(e.x, e.x + e.width);
|
|
73
|
-
return g(r, Math.min(e.y, e.y + e.height), i, Math.max(e.y, e.y + e.height), t, h(n));
|
|
74
|
-
}
|
|
75
|
-
function h(e) {
|
|
76
|
-
return {
|
|
77
|
-
minX: e.x - a,
|
|
78
|
-
minY: e.y - a,
|
|
79
|
-
maxX: e.x + e.width + a,
|
|
80
|
-
maxY: e.y + e.height + a
|
|
81
|
-
};
|
|
82
|
-
}
|
|
83
|
-
function g(t, n, r, i, a, o) {
|
|
84
|
-
let [s, c] = e.apply(a, t, n), [l, u] = e.apply(a, r, n), [d, f] = e.apply(a, r, i), [p, m] = e.apply(a, t, i);
|
|
85
|
-
return Math.max(s, l, d, p) < o.minX || Math.min(s, l, d, p) > o.maxX || Math.max(c, u, f, m) < o.minY || Math.min(c, u, f, m) > o.maxY;
|
|
86
|
-
}
|
|
87
|
-
//#endregion
|
|
88
|
-
export { m as boundsMissRect, s as cullDrawCommands, f as strokeReachAt };
|
|
89
|
-
|
|
90
|
-
//# sourceMappingURL=cullDrawCommands.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"cullDrawCommands.js","names":["SLACK_PX","DEFAULT_MITER_LIMIT","cullDrawCommands","cullList","cmds","transform","slackBox","rect","out","cmd","kept","cullOne","m","box","inner","mat3","children","pathMisses","quadMisses","spritesMiss","minX","minY","maxX","maxY","path","c","i","x","y","reach","stroke","strokeReach","strokeReachAt","scale","at","least","width","resolveStrokeWidth","v","spike","heads","markerReach","resolveScreenLength","SPRITE_STRIDE","sprites","x0","y0","x1","y1","boundsMissRect","bounds","ax","ay","bx","by","cx","cy","dx","dy"],"sources":["../../src/renderer/cullDrawCommands.ts"],"sourcesContent":["import type { Path } from '@weasel-js/geom';\nimport { resolveScreenLength, type Stroke } from '@weasel-js/paint';\nimport { SPRITE_STRIDE, type DrawCommand } from './DrawCommand';\nimport { mat3, type GlMat3 } from './math/mat3';\nimport { resolveStrokeWidth } from 'features/paths/tessellate/stroke';\nimport { markerReach } from 'features/paths/markerCommands';\n\n/** A screen-space rectangle, CSS pixels. */\nexport interface CullRect {\n x: number;\n y: number;\n width: number;\n height: number;\n}\n\n/** Screen pixels added to every bound: antialiasing, and the 1/8 px a `{ px }`\n * stroke's width may drift through quantization. */\nconst SLACK_PX = 1;\n\n/** Matches the tessellator's default. */\nconst DEFAULT_MITER_LIMIT = 4;\n\n/**\n * `cmds` without the commands that cannot put a pixel inside `rect`, where\n * `transform` maps the commands' space to screen space — `viewToMat3(view)`\n * for a world-space layer.\n *\n * Conservative by construction: a command is dropped only when a bound that\n * encloses everything it can paint misses `rect`. Paths are bounded by their\n * control hull plus the farthest a stroke can reach (miter spikes and square\n * caps included), images and sprites by their quads, and every bound is taken\n * through the accumulated transform as the AABB of its corners, so rotation\n * only enlarges it. Text and shader commands are always kept, and so is a\n * group with `effects` — an effect may move pixels. Clips are ignored, which\n * can only keep more. A group whose children all go is dropped.\n *\n * Returns `cmds` itself when nothing was dropped.\n */\nexport function cullDrawCommands(\n cmds: DrawCommand[],\n transform: GlMat3,\n rect: CullRect,\n): DrawCommand[] {\n return cullList(cmds, transform, slackBox(rect));\n}\n\ninterface Box { minX: number; minY: number; maxX: number; maxY: number }\n\nfunction cullList(cmds: DrawCommand[], m: GlMat3, box: Box): DrawCommand[] {\n let out: DrawCommand[] | null = null;\n for (let i = 0; i < cmds.length; i++) {\n const cmd = cmds[i];\n const kept = cullOne(cmd, m, box);\n if (kept === cmd) {\n out?.push(cmd);\n continue;\n }\n out ??= cmds.slice(0, i);\n if (kept) out.push(kept);\n }\n return out ?? cmds;\n}\n\nfunction cullOne(cmd: DrawCommand, m: GlMat3, box: Box): DrawCommand | null {\n switch (cmd.kind) {\n case 'group': {\n if (cmd.effects && cmd.effects.length > 0) return cmd;\n const inner = cmd.transform ? mat3.multiply(m, cmd.transform) : m;\n const children = cullList(cmd.children, inner, box);\n if (children === cmd.children) return cmd;\n return children.length === 0 ? null : { ...cmd, children };\n }\n case 'path':\n return pathMisses(cmd.path, cmd.stroke, m, box) ? null : cmd;\n case 'image':\n return quadMisses(cmd.x, cmd.y, cmd.x + cmd.w, cmd.y + cmd.h, m, box) ? null : cmd;\n case 'sprites':\n return spritesMiss(cmd.sprites, m, box) ? null : cmd;\n default:\n return cmd;\n }\n}\n\nfunction pathMisses(path: Path, stroke: Stroke | undefined, m: GlMat3, box: Box): boolean {\n let minX: number, minY: number, maxX: number, maxY: number;\n if (path.kind === 'rect') {\n minX = Math.min(path.x, path.x + path.width);\n maxX = Math.max(path.x, path.x + path.width);\n minY = Math.min(path.y, path.y + path.height);\n maxY = Math.max(path.y, path.y + path.height);\n } else if (path.kind === 'polygon') {\n const c = path.coords;\n if (c.length < 2) return false;\n minX = maxX = c[0];\n minY = maxY = c[1];\n for (let i = 2; i + 1 < c.length; i += 2) {\n const x = c[i], y = c[i + 1];\n if (x < minX) minX = x; else if (x > maxX) maxX = x;\n if (y < minY) minY = y; else if (y > maxY) maxY = y;\n }\n } else {\n return false;\n }\n const reach = stroke ? strokeReach(stroke, m) : 0;\n return quadMisses(minX - reach, minY - reach, maxX + reach, maxY + reach, m, box);\n}\n\n/** How far outside the geometry a stroke can paint, in the path's own units.\n * A full width rather than half covers `'outer'` alignment, which the\n * renderer draws as a doubled ribbon; the miter limit covers every join. A\n * marker head sits on a vertex, so its reach is measured from the hull too. */\nfunction strokeReach(stroke: Stroke, m: GlMat3): number {\n return strokeReachAt(stroke, mat3.meanScaleOf(m), mat3.minScaleOf(m));\n}\n\n/**\n * {@link strokeReach} at a known world-to-screen scale — what a painter\n * bounding its own output before it paints can know. `least` is the scale\n * along the axis the transform shrinks most, where it differs from `scale`.\n *\n * A `{ px }` ribbon or head is built to its screen size in every direction,\n * so in world it reaches farthest along that axis. A head with a world size is\n * built in world, whatever the line's width is in.\n */\nexport function strokeReachAt(stroke: Stroke, scale: number, least = scale): number {\n const at = least > 0 ? least : scale;\n const base = resolveStrokeWidth(stroke.width ?? 1, typeof stroke.width === 'object' ? at : scale);\n let width = base;\n if (stroke.vertexWidths) {\n for (const v of stroke.vertexWidths) if (v > width) width = v;\n }\n const spike = Math.max(stroke.miterLimit ?? DEFAULT_MITER_LIMIT, Math.SQRT2);\n const heads = markerReach(stroke);\n return Math.max(Math.abs(width) * spike, heads.world, resolveScreenLength({ px: heads.px }, at));\n}\n\nfunction spritesMiss(sprites: Float32Array, m: GlMat3, box: Box): boolean {\n let minX = Infinity, minY = Infinity, maxX = -Infinity, maxY = -Infinity;\n for (let i = 0; i + SPRITE_STRIDE <= sprites.length; i += SPRITE_STRIDE) {\n const x0 = sprites[i], y0 = sprites[i + 1];\n const x1 = x0 + sprites[i + 2], y1 = y0 + sprites[i + 3];\n minX = Math.min(minX, x0, x1); maxX = Math.max(maxX, x0, x1);\n minY = Math.min(minY, y0, y1); maxY = Math.max(maxY, y0, y1);\n }\n if (minX === Infinity) return false;\n return quadMisses(minX, minY, maxX, maxY, m, box);\n}\n\n/**\n * True when `bounds`, taken through `transform` to screen space, cannot put a\n * pixel inside `rect` — the per-command test above, for a caller holding a box\n * rather than a command. Same slack, same NaN-keeps rule.\n */\nexport function boundsMissRect(\n bounds: { x: number; y: number; width: number; height: number },\n transform: GlMat3,\n rect: CullRect,\n): boolean {\n const x0 = Math.min(bounds.x, bounds.x + bounds.width);\n const x1 = Math.max(bounds.x, bounds.x + bounds.width);\n const y0 = Math.min(bounds.y, bounds.y + bounds.height);\n const y1 = Math.max(bounds.y, bounds.y + bounds.height);\n return quadMisses(x0, y0, x1, y1, transform, slackBox(rect));\n}\n\nfunction slackBox(rect: CullRect): Box {\n return {\n minX: rect.x - SLACK_PX,\n minY: rect.y - SLACK_PX,\n maxX: rect.x + rect.width + SLACK_PX,\n maxY: rect.y + rect.height + SLACK_PX,\n };\n}\n\n/** True when the local rect, taken through `m`, lies wholly outside `box`.\n * Any NaN makes every comparison false, so the command is kept. */\nfunction quadMisses(x0: number, y0: number, x1: number, y1: number, m: GlMat3, box: Box): boolean {\n const [ax, ay] = mat3.apply(m, x0, y0);\n const [bx, by] = mat3.apply(m, x1, y0);\n const [cx, cy] = mat3.apply(m, x1, y1);\n const [dx, dy] = mat3.apply(m, x0, y1);\n return (\n Math.max(ax, bx, cx, dx) < box.minX ||\n Math.min(ax, bx, cx, dx) > box.maxX ||\n Math.max(ay, by, cy, dy) < box.minY ||\n Math.min(ay, by, cy, dy) > box.maxY\n );\n}\n"],"mappings":"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"}
|
|
@@ -1,133 +0,0 @@
|
|
|
1
|
-
import { BATCH_TEXTURE_SLOTS as e } from "../shaders/batchFill.js";
|
|
2
|
-
import { resolveColor as t } from "../math/color.js";
|
|
3
|
-
import { IDENTITY_COLOR_MATRIX as n } from "../state/GroupState.js";
|
|
4
|
-
import { sameValues as r } from "./uniforms.js";
|
|
5
|
-
import { flushBatch as i } from "./flushBatch.js";
|
|
6
|
-
import { flushForOwnDraw as a, retryUncut as o, runClipDepth as s } from "./clip.js";
|
|
7
|
-
import { rampVertices as c } from "./gradient.js";
|
|
8
|
-
//#region src/renderer/draw/batch.ts
|
|
9
|
-
function l(e) {
|
|
10
|
-
return e === n || r(n, e);
|
|
11
|
-
}
|
|
12
|
-
function u(e, t, n, i, a = 0) {
|
|
13
|
-
if (t.clipDepth !== (e.clipStack.length === 0 ? e.clipDepth : s(e)) || t.synthBold !== a || !t.foldsAlpha && t.alpha !== e.state.alpha || n !== void 0 && d(t, n, i) < 0) return !1;
|
|
14
|
-
let o = e.state.colorMatrix;
|
|
15
|
-
return t.colorMatrix === o || r(t.colorMatrix, o);
|
|
16
|
-
}
|
|
17
|
-
function d(e, t, n) {
|
|
18
|
-
for (let r = 0; r < e.textures.length; r++) {
|
|
19
|
-
let i = e.textures[r];
|
|
20
|
-
if (i.kind === "bitmap" && i.image === t) return i.sampling === n ? r + 1 : -1;
|
|
21
|
-
}
|
|
22
|
-
return m(e);
|
|
23
|
-
}
|
|
24
|
-
function f(e) {
|
|
25
|
-
for (let t = 0; t < e.textures.length; t++) if (e.textures[t].kind === "ramps") return t + 1;
|
|
26
|
-
return m(e);
|
|
27
|
-
}
|
|
28
|
-
function p(e, t) {
|
|
29
|
-
for (let n = 0; n < e.textures.length; n++) {
|
|
30
|
-
let r = e.textures[n];
|
|
31
|
-
if (r.kind === "atlas" && r.id === t) return n + 1;
|
|
32
|
-
}
|
|
33
|
-
return m(e);
|
|
34
|
-
}
|
|
35
|
-
function m(t) {
|
|
36
|
-
return t.textures.length + 1 < e ? t.textures.length + 1 : -1;
|
|
37
|
-
}
|
|
38
|
-
var h = {
|
|
39
|
-
maxVertices: 96,
|
|
40
|
-
maxVerticesInRun: 1024
|
|
41
|
-
};
|
|
42
|
-
function g(e, t) {
|
|
43
|
-
if (t.requiresStencil) return !1;
|
|
44
|
-
let n = e.drawBatch.length > 0 ? h.maxVerticesInRun : h.maxVertices;
|
|
45
|
-
return t.vertices.length >> 1 <= n;
|
|
46
|
-
}
|
|
47
|
-
function _(e, t) {
|
|
48
|
-
return e.batchState !== void 0 && !u(e, e.batchState) && i(e), e.drawBatch.wouldOverflow(t) && i(e), v(e);
|
|
49
|
-
}
|
|
50
|
-
function v(e) {
|
|
51
|
-
if (e.batchState === void 0) {
|
|
52
|
-
let t = e.state.colorMatrix, n = l(t);
|
|
53
|
-
e.batchState = {
|
|
54
|
-
alpha: n ? 1 : e.state.alpha,
|
|
55
|
-
colorMatrix: t,
|
|
56
|
-
clipDepth: s(e),
|
|
57
|
-
synthBold: 0,
|
|
58
|
-
foldsAlpha: n,
|
|
59
|
-
textures: []
|
|
60
|
-
};
|
|
61
|
-
}
|
|
62
|
-
return e.batchState;
|
|
63
|
-
}
|
|
64
|
-
function y(e, t, n) {
|
|
65
|
-
e.batchState !== void 0 && !u(e, e.batchState, t, n) && i(e), e.drawBatch.wouldOverflow(4) && i(e);
|
|
66
|
-
let r = v(e), a = d(r, t, n);
|
|
67
|
-
return a > r.textures.length && (r.textures.push({
|
|
68
|
-
kind: "bitmap",
|
|
69
|
-
image: t,
|
|
70
|
-
sampling: n
|
|
71
|
-
}), a = r.textures.length), {
|
|
72
|
-
staged: r,
|
|
73
|
-
slot: a
|
|
74
|
-
};
|
|
75
|
-
}
|
|
76
|
-
function b(e, t, n, r) {
|
|
77
|
-
e.batchState !== void 0 && (!u(e, e.batchState, void 0, void 0, r) || p(e.batchState, t) < 0) && i(e), e.drawBatch.wouldOverflow(4) && i(e);
|
|
78
|
-
let a = v(e);
|
|
79
|
-
a.synthBold = r;
|
|
80
|
-
let o = p(a, t);
|
|
81
|
-
return o > a.textures.length && (a.textures.push({
|
|
82
|
-
kind: "atlas",
|
|
83
|
-
id: t,
|
|
84
|
-
fieldScale: n
|
|
85
|
-
}), o = a.textures.length), {
|
|
86
|
-
staged: a,
|
|
87
|
-
slot: o
|
|
88
|
-
};
|
|
89
|
-
}
|
|
90
|
-
function x(e, t, n, r) {
|
|
91
|
-
e.gradRamps.wouldReshape(t, n) && i(e), e.batchState !== void 0 && (!u(e, e.batchState) || f(e.batchState) < 0) && i(e), e.drawBatch.wouldOverflow(r) && i(e);
|
|
92
|
-
let a = v(e), o = f(a);
|
|
93
|
-
return o > a.textures.length && (a.textures.push({ kind: "ramps" }), o = a.textures.length), {
|
|
94
|
-
staged: a,
|
|
95
|
-
slot: o,
|
|
96
|
-
rowV: e.gradRamps.rowV(e.gradRamps.upload(t, n))
|
|
97
|
-
};
|
|
98
|
-
}
|
|
99
|
-
function S(e, t, n) {
|
|
100
|
-
return (n ?? 1) * (t.foldsAlpha ? e.state.alpha : 1);
|
|
101
|
-
}
|
|
102
|
-
function C(e, n, r) {
|
|
103
|
-
let [i, a, o, s] = t(r.color);
|
|
104
|
-
return [
|
|
105
|
-
i,
|
|
106
|
-
a,
|
|
107
|
-
o,
|
|
108
|
-
s * S(e, n, r.opacity)
|
|
109
|
-
];
|
|
110
|
-
}
|
|
111
|
-
function w(e, t, n) {
|
|
112
|
-
let [r, i, a, s] = C(e, _(e, 4), n);
|
|
113
|
-
e.drawBatch.pushRect(t.x, t.y, t.width, t.height, e.state.transform, r, i, a, s) || o(e, t, n, w);
|
|
114
|
-
}
|
|
115
|
-
function T(e, t, n) {
|
|
116
|
-
let [r, i, a, s] = C(e, _(e, t.vertices.length >> 1), n);
|
|
117
|
-
e.drawBatch.pushMesh(t, e.state.transform, r, i, a, s) || o(e, t, n, T);
|
|
118
|
-
}
|
|
119
|
-
function E(e, t, n) {
|
|
120
|
-
let { staged: r, slot: i, rowV: a } = x(e, n.stops, n.space, 4), { uv: s, post: l } = c(n, a);
|
|
121
|
-
e.drawBatch.pushGradientRect(t.x, t.y, t.width, t.height, e.state.transform, s, l, i, n.mode, 1, 1, 1, S(e, r, n.opacity)) || o(e, t, n, E);
|
|
122
|
-
}
|
|
123
|
-
function D(e, t, n) {
|
|
124
|
-
let { staged: r, slot: i, rowV: a } = x(e, n.stops, n.space, t.vertices.length >> 1), { uv: s, post: l } = c(n, a);
|
|
125
|
-
e.drawBatch.pushGradientMesh(t, e.state.transform, s, l, i, n.mode, 1, 1, 1, S(e, r, n.opacity)) || o(e, t, n, D);
|
|
126
|
-
}
|
|
127
|
-
function O(e, t, n) {
|
|
128
|
-
return n !== void 0 && g(e, t) ? (n.kind === "ramp" ? D(e, t, n) : T(e, t, n), !0) : (a(e), !1);
|
|
129
|
-
}
|
|
130
|
-
//#endregion
|
|
131
|
-
export { h as meshBatching, E as pushRampRect, w as pushRect, b as stageGlyphs, y as stageImage, _ as stageSolid, O as tryStageFill };
|
|
132
|
-
|
|
133
|
-
//# sourceMappingURL=batch.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"batch.js","names":["isIdentityColorMatrix","cm","IDENTITY_COLOR_MATRIX","sameValues","stagedStateIsLive","staged","ctx","runClipDepth","synthBold","image","slotForBitmap","sampling","colorMatrix","i","entry","nextFreeSlot","slotForRamps","slotForAtlas","id","BATCH_TEXTURE_SLOTS","meshBatching","canBatchMesh","mesh","cap","stageSolid","flushBatch","vertices","openRun","foldsAlpha","stageImage","slot","stageGlyphs","atlasId","stageRamps","stops","space","stagedAlpha","opacity","stagedColor","r","g","b","a","resolveColor","paint","pushRect","fill","rect","retryUncut","pushMesh","pushRampRect","rampVertices","rowV","uv","post","pushRampMesh","tryStageFill","flushForOwnDraw"],"sources":["../../../src/renderer/draw/batch.ts"],"sourcesContent":["import type { ColorSpace, GradStop } from '@weasel-js/paint';\nimport { IDENTITY_COLOR_MATRIX } from '../state/GroupState';\nimport type { Mesh } from '@weasel-js/geom/tessellate';\nimport { resolveColor } from '../math/color';\nimport { BATCH_TEXTURE_SLOTS } from '../shaders/batchFill';\nimport type { DrawContext } from './drawContext';\nimport { sameValues } from './uniforms';\nimport { runClipDepth, retryUncut, flushForOwnDraw } from './clip';\nimport { flushBatch } from './flushBatch';\nimport { type BatchPaint, rampVertices } from './gradient';\n\n/**\n * The group state a staged run was built under.\n *\n * A run outlives the group it started in, so the state live when the flush\n * happens is not the state the rects belong to — the flush draws with these\n * values instead. Transform is absent because it rides the vertices; `alpha`\n * is 1 whenever it rode them too.\n */\nexport interface StagedBatchState {\n alpha: number;\n colorMatrix: Float32Array;\n clipDepth: number;\n /**\n * The SDF threshold shift `u_synthBold` draws this run under.\n *\n * A uniform rather than a vertex attribute, and so a thing that breaks a run.\n * A per-vertex float costs every rect and quad in the run (see \"Mode and slot\n * share one attribute\" in `shaders/batchFill.ts`): the batch's whole point is\n * one cheap buffer write a frame, and a float only glyphs read still widens the write\n * for every rect and quad beside them. What it costs instead is a break\n * wherever faked-bold text meets text that is not, which is a fallback path:\n * a registered bold face never sets this at all.\n */\n synthBold: number;\n /** Whether group alpha folded into the vertex colors. */\n foldsAlpha: boolean;\n /**\n * The textures this run samples, in the order they joined. A quad's vertices\n * carry `index + 1`, because slot 0 is the white texel every solid samples.\n *\n * Two kinds, because two caches own them: an image quad names an\n * `ImageBitmap` that `GLImageCache` keys by identity, a glyph names the\n * string id of a font atlas in `GLTextureCache`. They share the slot list so\n * a caption and the thumbnail above it share a draw.\n *\n * A bitmap's `sampling` is per entry and set per flush rather than at upload:\n * MAG_FILTER is state on the texture object, so the same bitmap drawn at both\n * filters in one frame needs two flushes, not two slots. An atlas carries no\n * sampling because `GLTextureCache` owns its filtering — and must keep\n * owning it: filtering a distance field destroys it, so a font atlas is\n * never mipmapped and never joins a shared image atlas.\n */\n textures: BatchTexture[];\n}\n\n/** One entry in a run's slot list. */\ntype BatchTexture =\n | { kind: 'bitmap'; image: ImageBitmap; sampling: 'linear' | 'nearest' }\n | { kind: 'atlas'; id: string; fieldScale: readonly [number, number] }\n | { kind: 'ramps' };\n\n/** Identity in row-major 4×5 leaves `src` untouched *and* leaves the shader's\n * clamp with nothing to do, which is what makes the alpha fold exact. */\nfunction isIdentityColorMatrix(cm: Float32Array): boolean {\n return cm === IDENTITY_COLOR_MATRIX || sameValues(IDENTITY_COLOR_MATRIX, cm);\n}\n\n/**\n * Whether the live group state would draw the staged run identically.\n *\n * By value, not by reference: a group carrying an identity color matrix still\n * goes through `compose4x5`, which allocates a new array holding equal numbers.\n * Twenty float compares are nothing against the draw call they save.\n */\nfunction stagedStateIsLive(\n ctx: DrawContext, staged: StagedBatchState,\n image?: ImageBitmap, sampling?: 'linear' | 'nearest',\n synthBold = 0,\n): boolean {\n if (staged.clipDepth !== (ctx.clipStack.length === 0 ? ctx.clipDepth : runClipDepth(ctx))) return false;\n // Solids and image quads ask with 0, which is what a run of them carries, so\n // this only ever breaks between two kinds of glyph.\n if (staged.synthBold !== synthBold) return false;\n if (!staged.foldsAlpha && staged.alpha !== ctx.state.alpha) return false;\n if (image !== undefined && slotForBitmap(staged, image, sampling!) < 0) return false;\n const colorMatrix = ctx.state.colorMatrix;\n return staged.colorMatrix === colorMatrix || sameValues(staged.colorMatrix, colorMatrix);\n}\n\n/**\n * The slot `image` would sample from in this run, or -1 if it cannot join.\n *\n * A bitmap already in the run reuses its slot — but only at the filter it went\n * in under, since MAG_FILTER belongs to the texture object and one draw cannot\n * have it both ways. Otherwise it takes the next free slot, and a run with none\n * left is a run this quad has to break.\n */\nfunction slotForBitmap(\n staged: StagedBatchState, image: ImageBitmap, sampling: 'linear' | 'nearest',\n): number {\n for (let i = 0; i < staged.textures.length; i++) {\n const entry = staged.textures[i];\n if (entry.kind !== 'bitmap' || entry.image !== image) continue;\n return entry.sampling === sampling ? i + 1 : -1;\n }\n return nextFreeSlot(staged);\n}\n\n/** The same for the ramp atlas, of which there is one — so every gradient in a\n * run shares the slot, however many distinct ramps they are. */\nfunction slotForRamps(staged: StagedBatchState): number {\n for (let i = 0; i < staged.textures.length; i++) {\n if (staged.textures[i].kind === 'ramps') return i + 1;\n }\n return nextFreeSlot(staged);\n}\n\n/** The same for a font atlas, which has no filter to disagree about. */\nfunction slotForAtlas(staged: StagedBatchState, id: string): number {\n for (let i = 0; i < staged.textures.length; i++) {\n const entry = staged.textures[i];\n if (entry.kind === 'atlas' && entry.id === id) return i + 1;\n }\n return nextFreeSlot(staged);\n}\n\n/** The slot a texture new to this run would take, or -1 if it is full. */\nfunction nextFreeSlot(staged: StagedBatchState): number {\n return staged.textures.length + 1 < BATCH_TEXTURE_SLOTS ? staged.textures.length + 1 : -1;\n}\n\n/**\n * Vertices above which a mesh keeps its own draw, by whether a run is open.\n *\n * Batching trades a draw call for copying and re-uploading the mesh every\n * frame, where a mesh already in the persistent cache costs nothing per frame\n * beyond the draw. Drawn alone with a run open, a mesh also closes that run and\n * switches program twice, so it breaks even far later there. Both values sit\n * below what `tests/perf/mesh-batch.spec.ts` measured, recorded in\n * `docs/TODO.md`: being wrong on the open-run side costs ten times more.\n */\nconst MAX_BATCHED_MESH_VERTICES = 96;\n\nconst MAX_BATCHED_MESH_VERTICES_IN_RUN = 1024;\n\n/** The caps {@link canBatchMesh} reads. Mutable only so `mesh-batch.spec.ts`\n * can time both sides of them in one page; the barrel does not export it. */\nexport const meshBatching = {\n maxVertices: MAX_BATCHED_MESH_VERTICES,\n maxVerticesInRun: MAX_BATCHED_MESH_VERTICES_IN_RUN,\n};\n\n/** Whether a mesh can join a run. Stencil fills need their own two-pass dance,\n * and a mesh past the cap is cheaper as its own draw. */\nfunction canBatchMesh(ctx: DrawContext, mesh: Mesh): boolean {\n if (mesh.requiresStencil) return false;\n const cap = ctx.drawBatch.length > 0 ? meshBatching.maxVerticesInRun : meshBatching.maxVertices;\n return (mesh.vertices.length >> 1) <= cap;\n}\n\n/**\n * Open or continue a run for `vertices` more, flushing first if the run would\n * overflow or if the live group state no longer matches what it was staged\n * under. Returns the staged state, which the caller reads to resolve alpha.\n *\n * Fill opacity folds into the vertex alpha, exactly as `u_color` carried it\n * when each shape was its own draw. Group alpha folds in too, but only under an\n * identity color matrix: the shader is `a = clamp(CM * src + bias).a * u_alpha`,\n * so with a real matrix between them a pre-multiplied vertex alpha is a\n * different number. There it stays a uniform, and a differing alpha breaks the\n * run as before.\n */\nexport function stageSolid(ctx: DrawContext, vertices: number): StagedBatchState {\n if (ctx.batchState !== undefined && !stagedStateIsLive(ctx, ctx.batchState)) flushBatch(ctx);\n if (ctx.drawBatch.wouldOverflow(vertices)) flushBatch(ctx);\n return openRun(ctx);\n}\n\n/** The staged state, opening a run under the live group state if none is. */\nfunction openRun(ctx: DrawContext): StagedBatchState {\n if (ctx.batchState === undefined) {\n const colorMatrix = ctx.state.colorMatrix;\n const foldsAlpha = isIdentityColorMatrix(colorMatrix);\n ctx.batchState = {\n alpha: foldsAlpha ? 1 : ctx.state.alpha,\n colorMatrix,\n clipDepth: runClipDepth(ctx),\n synthBold: 0,\n foldsAlpha,\n textures: [],\n };\n }\n return ctx.batchState;\n}\n\n/**\n * Open or continue a run for one more image quad, flushing first if the run\n * would overflow or cannot give this bitmap a slot.\n *\n * A run adopts a bitmap it has not seen rather than breaking, which is what\n * lets a wall's ground rect and its atlas quad share a draw, and what lets a\n * cell's art and its badge share one too. Returns the staged state and the slot\n * the quad's vertices must carry.\n */\nexport function stageImage(\n ctx: DrawContext, image: ImageBitmap, sampling: 'linear' | 'nearest',\n): { staged: StagedBatchState; slot: number } {\n if (ctx.batchState !== undefined\n && !stagedStateIsLive(ctx, ctx.batchState, image, sampling)) {\n flushBatch(ctx);\n }\n if (ctx.drawBatch.wouldOverflow(4)) flushBatch(ctx);\n const staged = openRun(ctx);\n let slot = slotForBitmap(staged, image, sampling);\n if (slot > staged.textures.length) {\n staged.textures.push({ kind: 'bitmap', image, sampling });\n slot = staged.textures.length;\n }\n return { staged, slot };\n}\n\n/**\n * Open or continue a run for a glyph off the font atlas `atlasId`, flushing\n * first if the run would overflow or has no slot left for it.\n *\n * The atlas is the unit of coalescing the way a sprite sheet is: every glyph a\n * face contributes to a frame shares one texture, so a paragraph is one run\n * however many glyphs it is, and a second face costs one more slot rather than\n * a flush per word.\n */\nexport function stageGlyphs(\n ctx: DrawContext, atlasId: string, fieldScale: readonly [number, number], synthBold: number,\n): { staged: StagedBatchState; slot: number } {\n if (ctx.batchState !== undefined\n && (!stagedStateIsLive(ctx, ctx.batchState, undefined, undefined, synthBold)\n || slotForAtlas(ctx.batchState, atlasId) < 0)) {\n flushBatch(ctx);\n }\n if (ctx.drawBatch.wouldOverflow(4)) flushBatch(ctx);\n const staged = openRun(ctx);\n // An empty run adopts the threshold; one that already has vertices agreed to\n // it above, since a mismatch flushed.\n staged.synthBold = synthBold;\n let slot = slotForAtlas(staged, atlasId);\n if (slot > staged.textures.length) {\n staged.textures.push({ kind: 'atlas', id: atlasId, fieldScale });\n slot = staged.textures.length;\n }\n return { staged, slot };\n}\n\n/**\n * Open or continue a run for geometry filled from the ramp atlas, flushing\n * first if the run would overflow, has no slot left, or if baking `stops` would\n * move the rows already staged.\n *\n * **That last one is the trap.** A staged vertex names its ramp by where the\n * row sits, so growing the atlas — which changes every row's `v` — or recycling\n * a row repaints geometry already staged with somebody else's gradient. Both\n * are irreversible once done, so the question is asked before the bake, not\n * after.\n */\nfunction stageRamps(\n ctx: DrawContext, stops: GradStop[], space: ColorSpace, vertices: number,\n): { staged: StagedBatchState; slot: number; rowV: number } {\n if (ctx.gradRamps.wouldReshape(stops, space)) flushBatch(ctx);\n if (ctx.batchState !== undefined\n && (!stagedStateIsLive(ctx, ctx.batchState) || slotForRamps(ctx.batchState) < 0)) {\n flushBatch(ctx);\n }\n if (ctx.drawBatch.wouldOverflow(vertices)) flushBatch(ctx);\n const staged = openRun(ctx);\n let slot = slotForRamps(staged);\n if (slot > staged.textures.length) {\n staged.textures.push({ kind: 'ramps' });\n slot = staged.textures.length;\n }\n return { staged, slot, rowV: ctx.gradRamps.rowV(ctx.gradRamps.upload(stops, space)) };\n}\n\n/** Alpha a batched paint's vertices carry: its own opacity, and the group's\n * under an identity color matrix. */\nfunction stagedAlpha(\n ctx: DrawContext, staged: StagedBatchState, opacity: number | undefined,\n): number {\n return (opacity ?? 1) * (staged.foldsAlpha ? ctx.state.alpha : 1);\n}\n\n/** Straight-alpha rgba for a solid paint under the staged state. */\nfunction stagedColor(\n ctx: DrawContext, staged: StagedBatchState,\n paint: { color: string; opacity?: number },\n): [number, number, number, number] {\n const [r, g, b, a] = resolveColor(paint.color);\n return [r, g, b, a * stagedAlpha(ctx, staged, paint.opacity)];\n}\n\nexport function pushRect(\n ctx: DrawContext,\n rect: { x: number; y: number; width: number; height: number },\n fill: { color: string; opacity?: number },\n): void {\n const staged = stageSolid(ctx, 4);\n const [r, g, b, a] = stagedColor(ctx, staged, fill);\n if (!ctx.drawBatch.pushRect(\n rect.x, rect.y, rect.width, rect.height, ctx.state.transform, r, g, b, a,\n )) retryUncut(ctx, rect, fill, pushRect);\n}\n\nfunction pushMesh(\n ctx: DrawContext,\n mesh: Mesh,\n paint: { color: string; opacity?: number },\n): void {\n const staged = stageSolid(ctx, mesh.vertices.length >> 1);\n const [r, g, b, a] = stagedColor(ctx, staged, paint);\n if (!ctx.drawBatch.pushMesh(mesh, ctx.state.transform, r, g, b, a)) {\n retryUncut(ctx, mesh, paint, pushMesh);\n }\n}\n\nexport function pushRampRect(\n ctx: DrawContext,\n rect: { x: number; y: number; width: number; height: number },\n paint: Extract<BatchPaint, { kind: 'ramp' }>,\n): void {\n const { staged, slot, rowV } = stageRamps(ctx, paint.stops, paint.space, 4);\n const { uv, post } = rampVertices(paint, rowV);\n // White vertices, so the ramp texel passes through as its own color and the\n // alpha channel carries what `u_opacity` and `u_alpha` used to.\n if (!ctx.drawBatch.pushGradientRect(\n rect.x, rect.y, rect.width, rect.height, ctx.state.transform,\n uv, post, slot, paint.mode, 1, 1, 1, stagedAlpha(ctx, staged, paint.opacity),\n )) retryUncut(ctx, rect, paint, pushRampRect);\n}\n\nfunction pushRampMesh(\n ctx: DrawContext, mesh: Mesh, paint: Extract<BatchPaint, { kind: 'ramp' }>,\n): void {\n const { staged, slot, rowV } = stageRamps(ctx, paint.stops, paint.space, mesh.vertices.length >> 1);\n const { uv, post } = rampVertices(paint, rowV);\n if (!ctx.drawBatch.pushGradientMesh(\n mesh, ctx.state.transform,\n uv, post, slot, paint.mode, 1, 1, 1, stagedAlpha(ctx, staged, paint.opacity),\n )) retryUncut(ctx, mesh, paint, pushRampMesh);\n}\n\n/**\n * Stage `mesh` into the run, or drain the run so the caller can draw it itself.\n *\n * `true` means the mesh is in the batch and the caller is done. `false` comes\n * back only *after* a flush, so an emitter cannot earn permission to draw for\n * itself without also draining the batch. `paint` is `undefined` when it is one\n * no run can express — see `batchPaint`.\n */\nexport function tryStageFill(\n ctx: DrawContext,\n mesh: Mesh,\n paint: BatchPaint | undefined,\n): boolean {\n if (paint !== undefined && canBatchMesh(ctx, mesh)) {\n if (paint.kind === 'ramp') pushRampMesh(ctx, mesh, paint);\n else pushMesh(ctx, mesh, paint);\n return true;\n }\n flushForOwnDraw(ctx);\n return false;\n}\n"],"mappings":"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"}
|
|
@@ -1,89 +0,0 @@
|
|
|
1
|
-
import { drawTriangles as e } from "./drawTriangles.js";
|
|
2
|
-
import { ancestorMask as t } from "./stencil.js";
|
|
3
|
-
import { setProjAndModel as n } from "./uniforms.js";
|
|
4
|
-
import { axisAlignedClipRect as r, intersectClipRects as i } from "../batchClip.js";
|
|
5
|
-
import { fillMeshHandle as a } from "./mesh.js";
|
|
6
|
-
import { flushBatch as o } from "./flushBatch.js";
|
|
7
|
-
//#region src/renderer/draw/clip.ts
|
|
8
|
-
function s(e, t) {
|
|
9
|
-
let n = e.clipStack.reduce((e, t) => e + +(t.depth === 0), 0);
|
|
10
|
-
if (e.clipDepth + n + 1 > 7) throw Error("weasel: clip nesting depth exceeded (max 7). You can't nest more than 7 levels of clipped containers in a single draw tree. Flatten the hierarchy or compose poses outside the scene graph.");
|
|
11
|
-
c(e, t);
|
|
12
|
-
}
|
|
13
|
-
function c(e, t) {
|
|
14
|
-
let n = e.state.transform, i = r(t, n);
|
|
15
|
-
if (i === null) {
|
|
16
|
-
u(e);
|
|
17
|
-
let r = e.clipDepth + 1;
|
|
18
|
-
v(e, t, r), e.clipDepth = r, e.clipStack.push({
|
|
19
|
-
path: t,
|
|
20
|
-
transform: n,
|
|
21
|
-
rect: null,
|
|
22
|
-
depth: r
|
|
23
|
-
});
|
|
24
|
-
} else e.clipStack.push({
|
|
25
|
-
path: t,
|
|
26
|
-
transform: n,
|
|
27
|
-
rect: i,
|
|
28
|
-
depth: 0
|
|
29
|
-
});
|
|
30
|
-
d(e);
|
|
31
|
-
}
|
|
32
|
-
function l(e) {
|
|
33
|
-
let t = e.clipStack.pop();
|
|
34
|
-
t.depth > 0 && (y(e, t.path, t.depth - 1, t.transform), e.clipDepth = t.depth - 1), d(e);
|
|
35
|
-
}
|
|
36
|
-
function u(e) {
|
|
37
|
-
for (let t of e.clipStack) {
|
|
38
|
-
if (t.depth !== 0) continue;
|
|
39
|
-
let n = e.clipDepth + 1;
|
|
40
|
-
v(e, t.path, n, t.transform), t.depth = n, e.clipDepth = n;
|
|
41
|
-
}
|
|
42
|
-
}
|
|
43
|
-
function d(e) {
|
|
44
|
-
let t = null;
|
|
45
|
-
for (let n of e.clipStack) n.rect && (t = t ? i(t, n.rect) : n.rect);
|
|
46
|
-
e.drawBatch.clip = t;
|
|
47
|
-
}
|
|
48
|
-
function f(e) {
|
|
49
|
-
let t = e.clipStack;
|
|
50
|
-
if (t.length === 0 || e.uncut) return e.clipDepth;
|
|
51
|
-
for (let e = t.length - 1; e >= 0; e--) if (t[e].rect === null) return t[e].depth;
|
|
52
|
-
for (let e of t) if (e.depth > 0) return e.depth - 1;
|
|
53
|
-
return e.clipDepth;
|
|
54
|
-
}
|
|
55
|
-
function p(e) {
|
|
56
|
-
u(e);
|
|
57
|
-
let t = e.drawBatch.clip;
|
|
58
|
-
return e.drawBatch.clip = null, e.uncut = !0, t;
|
|
59
|
-
}
|
|
60
|
-
function m(e, t) {
|
|
61
|
-
e.drawBatch.clip = t, e.uncut = !1;
|
|
62
|
-
}
|
|
63
|
-
function h(e, t, n, r) {
|
|
64
|
-
let i = p(e);
|
|
65
|
-
r(e, t, n), m(e, i);
|
|
66
|
-
}
|
|
67
|
-
function g(e) {
|
|
68
|
-
o(e), e.clipStack.length > 0 && u(e);
|
|
69
|
-
}
|
|
70
|
-
function _(t, r, i) {
|
|
71
|
-
let o = t.gl, s = a(t, r);
|
|
72
|
-
o.useProgram(t.pathFill.handle), o.bindVertexArray(s.vao), n(t, t.pathFill, i), e(t, s.indexCount, t.gl.UNSIGNED_INT), o.bindVertexArray(null);
|
|
73
|
-
}
|
|
74
|
-
function v(e, n, r, i = e.state.transform) {
|
|
75
|
-
o(e);
|
|
76
|
-
let s = e.gl, c = t(r - 1), l = 1 << r, u = c | l;
|
|
77
|
-
s.enable(s.STENCIL_TEST), s.colorMask(!1, !1, !1, !1), a(e, n).requiresStencil ? (s.stencilMask(1), s.stencilFunc(s.ALWAYS, 0, 1), s.stencilOp(s.KEEP, s.KEEP, s.INVERT), _(e, n, i), s.stencilMask(l), s.stencilFunc(s.EQUAL, u | 1, c | 1), s.stencilOp(s.KEEP, s.KEEP, s.REPLACE), _(e, n, i), s.stencilMask(1), s.stencilFunc(s.ALWAYS, 0, 1), s.stencilOp(s.KEEP, s.KEEP, s.INVERT), _(e, n, i)) : (s.stencilMask(l), s.stencilFunc(s.EQUAL, u, c), s.stencilOp(s.KEEP, s.KEEP, s.REPLACE), _(e, n, i)), s.colorMask(!0, !0, !0, !0), s.stencilMask(255);
|
|
78
|
-
}
|
|
79
|
-
function y(e, n, r, i = e.state.transform) {
|
|
80
|
-
e.batchState !== void 0 && e.batchState.clipDepth > r && o(e);
|
|
81
|
-
let a = e.gl;
|
|
82
|
-
a.enable(a.STENCIL_TEST);
|
|
83
|
-
let s = 1 << r + 1, c = t(r) | s;
|
|
84
|
-
a.colorMask(!1, !1, !1, !1), a.stencilMask(s), a.stencilFunc(a.EQUAL, c, c), a.stencilOp(a.KEEP, a.KEEP, a.ZERO), _(e, n, i), a.colorMask(!0, !0, !0, !0), a.stencilMask(255);
|
|
85
|
-
}
|
|
86
|
-
//#endregion
|
|
87
|
-
export { s as enterGroupClip, p as enterUncut, g as flushForOwnDraw, l as leaveClip, m as leaveUncut, y as popClip, v as pushClip, h as retryUncut, f as runClipDepth };
|
|
88
|
-
|
|
89
|
-
//# sourceMappingURL=clip.js.map
|