@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,82 +0,0 @@
|
|
|
1
|
-
//#region src/features/text/domOffsets.ts
|
|
2
|
-
var e = /* @__PURE__ */ new Set(["DIV", "P"]);
|
|
3
|
-
function t(t) {
|
|
4
|
-
let n = [], r = (t) => {
|
|
5
|
-
if (t.nodeType === Node.TEXT_NODE) {
|
|
6
|
-
t.data.length > 0 && n.push({ text: t });
|
|
7
|
-
return;
|
|
8
|
-
}
|
|
9
|
-
if (t instanceof Element) {
|
|
10
|
-
if (t.tagName === "BR") {
|
|
11
|
-
n.push({ br: t });
|
|
12
|
-
return;
|
|
13
|
-
}
|
|
14
|
-
e.has(t.tagName) && n.length > 0 && n.push({ block: t });
|
|
15
|
-
for (let e of t.childNodes) r(e);
|
|
16
|
-
}
|
|
17
|
-
};
|
|
18
|
-
for (let e of t.childNodes) r(e);
|
|
19
|
-
return n;
|
|
20
|
-
}
|
|
21
|
-
var n = (e) => Array.prototype.indexOf.call(e.parentNode.childNodes, e);
|
|
22
|
-
function r(e) {
|
|
23
|
-
return "br" in e ? {
|
|
24
|
-
node: e.br.parentNode,
|
|
25
|
-
offset: n(e.br) + 1
|
|
26
|
-
} : {
|
|
27
|
-
node: e.block,
|
|
28
|
-
offset: 0
|
|
29
|
-
};
|
|
30
|
-
}
|
|
31
|
-
function i(e, i) {
|
|
32
|
-
let a = i, o = {
|
|
33
|
-
node: e,
|
|
34
|
-
offset: 0
|
|
35
|
-
}, s = null;
|
|
36
|
-
for (let i of t(e)) {
|
|
37
|
-
if ("text" in i) {
|
|
38
|
-
let e = i.text.data.length;
|
|
39
|
-
if (a <= e) return {
|
|
40
|
-
node: i.text,
|
|
41
|
-
offset: a
|
|
42
|
-
};
|
|
43
|
-
a -= e, o = {
|
|
44
|
-
node: i.text,
|
|
45
|
-
offset: e
|
|
46
|
-
}, s = null;
|
|
47
|
-
continue;
|
|
48
|
-
}
|
|
49
|
-
if (a === 0) return s ?? ("br" in i ? {
|
|
50
|
-
node: i.br.parentNode,
|
|
51
|
-
offset: n(i.br)
|
|
52
|
-
} : r(i));
|
|
53
|
-
--a, o = r(i), s = a === 0 ? o : null;
|
|
54
|
-
}
|
|
55
|
-
return o;
|
|
56
|
-
}
|
|
57
|
-
function a(e, n, i) {
|
|
58
|
-
let a = t(e), o = 0;
|
|
59
|
-
if (n.nodeType === Node.TEXT_NODE) {
|
|
60
|
-
for (let e of a) {
|
|
61
|
-
if (!("text" in e)) {
|
|
62
|
-
o += 1;
|
|
63
|
-
continue;
|
|
64
|
-
}
|
|
65
|
-
if (e.text === n) return o + i;
|
|
66
|
-
o += e.text.data.length;
|
|
67
|
-
}
|
|
68
|
-
return o;
|
|
69
|
-
}
|
|
70
|
-
let s = document.createRange();
|
|
71
|
-
s.setStart(n, Math.max(0, Math.min(i, n.childNodes.length))), s.collapse(!0);
|
|
72
|
-
for (let e of a) if ("text" in e) s.comparePoint(e.text, 0) < 0 && (o += e.text.data.length);
|
|
73
|
-
else {
|
|
74
|
-
let t = r(e);
|
|
75
|
-
s.comparePoint(t.node, t.offset) <= 0 && (o += 1);
|
|
76
|
-
}
|
|
77
|
-
return o;
|
|
78
|
-
}
|
|
79
|
-
//#endregion
|
|
80
|
-
export { e as BLOCK_TAGS, i as charOffsetToDomPosition, a as domPositionToCharOffset, t as overlayPieces };
|
|
81
|
-
|
|
82
|
-
//# sourceMappingURL=domOffsets.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"domOffsets.js","names":["BLOCK_TAGS","overlayPieces","out","visit","node","child","parent","indexIn","el","afterBreak","piece","charOffsetToDomPosition","remaining","offset","end","pending","len","domPositionToCharOffset","pieces","total","point","past"],"sources":["../../../src/features/text/domOffsets.ts"],"sourcesContent":["/**\n * Character offsets in the edit overlay's DOM, counted the way `domToRuns`\n * reads its text: every text node's characters, plus one newline for each\n * break element a browser or a paste can leave behind.\n */\n\n/** One stretch of the overlay's text, in document order. */\nexport type OverlayPiece =\n | { text: Text }\n /** A newline with no text node of its own: a `<br>`, or the boundary a block opens. */\n | { br: Element }\n | { block: Element };\n\n/** Elements whose boundary reads as a newline. */\nexport const BLOCK_TAGS: ReadonlySet<string> = new Set(['DIV', 'P']);\n\n/**\n * `parent`'s text as pieces. A block (`<div>`, `<p>`) reads as a newline\n * before its contents unless it opens the text, which is how a browser renders\n * the boundary. Both offset walkers below read through here, and `domToRuns`\n * applies the same rule from `BLOCK_TAGS` in its own styled walk.\n */\nexport function overlayPieces(parent: Element): OverlayPiece[] {\n const out: OverlayPiece[] = [];\n const visit = (node: Node): void => {\n if (node.nodeType === Node.TEXT_NODE) {\n if ((node as Text).data.length > 0) out.push({ text: node as Text });\n return;\n }\n if (!(node instanceof Element)) return;\n if (node.tagName === 'BR') { out.push({ br: node }); return; }\n if (BLOCK_TAGS.has(node.tagName) && out.length > 0) out.push({ block: node });\n for (const child of node.childNodes) visit(child);\n };\n for (const child of parent.childNodes) visit(child);\n return out;\n}\n\nconst indexIn = (el: Element): number => Array.prototype.indexOf.call(el.parentNode!.childNodes, el);\n\n/** The DOM position just past a break piece, where the next character goes. */\nfunction afterBreak(piece: { br: Element } | { block: Element }): { node: Node; offset: number } {\n return 'br' in piece\n ? { node: piece.br.parentNode!, offset: indexIn(piece.br) + 1 }\n : { node: piece.block, offset: 0 };\n}\n\n/**\n * The DOM position of plain-text character position `offset`: a text node\n * and an offset into it wherever one holds the position, otherwise an element\n * and a child index (just past a `<br>` that ends the text). Offsets beyond\n * the text clamp to its end. Returns `{ node: parent, offset: 0 }` for an\n * overlay with no text.\n */\nexport function charOffsetToDomPosition(\n parent: HTMLElement,\n offset: number,\n): { node: Node; offset: number } | null {\n let remaining = offset;\n let end: { node: Node; offset: number } = { node: parent, offset: 0 };\n /** Set while the position sits just past a break, with no text met since. */\n let pending: { node: Node; offset: number } | null = null;\n for (const piece of overlayPieces(parent)) {\n if ('text' in piece) {\n const len = piece.text.data.length;\n if (remaining <= len) return { node: piece.text, offset: remaining };\n remaining -= len;\n end = { node: piece.text, offset: len };\n pending = null;\n continue;\n }\n if (remaining === 0) {\n return pending ?? ('br' in piece\n ? { node: piece.br.parentNode!, offset: indexIn(piece.br) }\n : afterBreak(piece));\n }\n remaining -= 1;\n end = afterBreak(piece);\n pending = remaining === 0 ? end : null;\n }\n return end;\n}\n\n/**\n * Inverse of `charOffsetToDomPosition`: the characters that precede the DOM\n * position `(node, offset)`.\n *\n * When `node` is an element the DOM offset indexes *child nodes*, not\n * characters — `(overlay, 0)` is the start of the text and `(overlay,\n * childNodes.length)` its end. That shape is not exotic: `Range.\n * selectNodeContents`, which `useTextEdit` uses for its select-all caret,\n * produces exactly it. So an element position is resolved by counting the\n * pieces that end at or before the boundary point.\n */\nexport function domPositionToCharOffset(\n parent: HTMLElement,\n node: Node,\n offset: number,\n): number {\n const pieces = overlayPieces(parent);\n let total = 0;\n if (node.nodeType === Node.TEXT_NODE) {\n for (const piece of pieces) {\n if (!('text' in piece)) { total += 1; continue; }\n if (piece.text === node) return total + offset;\n total += piece.text.data.length;\n }\n return total;\n }\n const point = document.createRange();\n point.setStart(node, Math.max(0, Math.min(offset, node.childNodes.length)));\n point.collapse(true);\n for (const piece of pieces) {\n if ('text' in piece) {\n // A text node cannot contain the point, so it is wholly before or after.\n if (point.comparePoint(piece.text, 0) < 0) total += piece.text.data.length;\n } else {\n const past = afterBreak(piece);\n if (point.comparePoint(past.node, past.offset) <= 0) total += 1;\n }\n }\n return total;\n}\n"],"mappings":";AAcA,IAAaA,oBAAkC,IAAI,IAAI,CAAC,OAAO,GAAG,CAAC;AAQnE,SAAgBC,EAAc,GAAiC;CAC7D,IAAMC,IAAsB,CAAC,GACvBC,KAAS,MAAqB;EAClC,IAAIC,EAAK,aAAa,KAAK,WAAW;GACpC,AAAKA,EAAc,KAAK,SAAS,KAAGF,EAAI,KAAK,EAAE,MAAME,EAAa,CAAC;GACnE;EACF;EACA,IAAMA,aAAgB,SACtB;OAAIA,EAAK,YAAY,MAAM;IAAE,EAAI,KAAK,EAAE,IAAIA,EAAK,CAAC;IAAG;GAAQ;GAC7D,AAAIJ,EAAW,IAAII,EAAK,OAAO,KAAKF,EAAI,SAAS,KAAGA,EAAI,KAAK,EAAE,OAAOE,EAAK,CAAC;GAC5E,KAAK,IAAMC,KAASD,EAAK,YAAY,EAAMC,CAAK;EAFa;CAG/D;CACA,KAAK,IAAMA,KAASC,EAAO,YAAY,EAAMD,CAAK;CAClD,OAAOH;AACT;AAEA,IAAMK,KAAW,MAAwB,MAAM,UAAU,QAAQ,KAAKC,EAAG,WAAY,YAAYA,CAAE;AAGnG,SAASC,EAAW,GAA6E;CAC/F,OAAO,QAAQC,IACX;EAAE,MAAMA,EAAM,GAAG;EAAa,QAAQH,EAAQG,EAAM,EAAE,IAAI;CAAE,IAC5D;EAAE,MAAMA,EAAM;EAAO,QAAQ;CAAE;AACrC;AASA,SAAgBC,EACd,GACA,GACuC;CACvC,IAAIC,IAAYC,GACZC,IAAsC;EAAE,MAAMR;EAAQ,QAAQ;CAAE,GAEhES,IAAiD;CACrD,KAAK,IAAML,KAAST,EAAcK,CAAM,GAAG;EACzC,IAAI,UAAUI,GAAO;GACnB,IAAMM,IAAMN,EAAM,KAAK,KAAK;GAC5B,IAAIE,KAAaI,GAAK,OAAO;IAAE,MAAMN,EAAM;IAAM,QAAQE;GAAU;GAGnE,AAFA,KAAaI,GACb,IAAM;IAAE,MAAMN,EAAM;IAAM,QAAQM;GAAI,GACtC,IAAU;GACV;EACF;EACA,IAAIJ,MAAc,GAChB,OAAOG,MAAY,QAAQL,IACvB;GAAE,MAAMA,EAAM,GAAG;GAAa,QAAQH,EAAQG,EAAM,EAAE;EAAE,IACxDD,EAAWC,CAAK;EAItB,AAFA,KACA,IAAMD,EAAWC,CAAK,GACtB,IAAUE,MAAc,IAAIE,IAAM;CACpC;CACA,OAAOA;AACT;AAaA,SAAgBG,EACd,GACA,GACA,GACQ;CACR,IAAMC,IAASjB,EAAcK,CAAM,GAC/Ba,IAAQ;CACZ,IAAIf,EAAK,aAAa,KAAK,WAAW;EACpC,KAAK,IAAMM,KAASQ,GAAQ;GAC1B,IAAI,EAAE,UAAUR,IAAQ;IAAE,KAAS;IAAG;GAAU;GAChD,IAAIA,EAAM,SAASN,GAAM,OAAOe,IAAQN;GACxC,KAASH,EAAM,KAAK,KAAK;EAC3B;EACA,OAAOS;CACT;CACA,IAAMC,IAAQ,SAAS,YAAY;CAEnC,AADAA,EAAM,SAAShB,GAAM,KAAK,IAAI,GAAG,KAAK,IAAIS,GAAQT,EAAK,WAAW,MAAM,CAAC,CAAC,GAC1EgB,EAAM,SAAS,EAAI;CACnB,KAAK,IAAMV,KAASQ,GAClB,IAAI,UAAUR,GAER,AAAAU,EAAM,aAAaV,EAAM,MAAM,CAAC,IAAI,MAAG,KAASA,EAAM,KAAK,KAAK;MAC/D;EACL,IAAMW,IAAOZ,EAAWC,CAAK;EAC7B,AAAIU,EAAM,aAAaC,EAAK,MAAMA,EAAK,MAAM,KAAK,MAAG,KAAS;CAChE;CAEF,OAAOF;AACT"}
|
|
@@ -1,230 +0,0 @@
|
|
|
1
|
-
import { BLOCK_TAGS as e, charOffsetToDomPosition as t, domPositionToCharOffset as n } from "./domOffsets.js";
|
|
2
|
-
import { cssFontFamily as r } from "@weasel-js/font";
|
|
3
|
-
import { DEFAULT_TEXT_STYLE as i, SMALL_CAPS_SCALE as a, isHardLineBreak as o, numericWeight as s, smallCapsScaleFor as c, smallCapsText as l, transformRunTexts as u } from "@weasel-js/text";
|
|
4
|
-
//#region src/features/text/domRuns.ts
|
|
5
|
-
function d(e) {
|
|
6
|
-
return e && "color" in e ? e.color : null;
|
|
7
|
-
}
|
|
8
|
-
var f = "data-fill", p = /* @__PURE__ */ new Set([
|
|
9
|
-
"none",
|
|
10
|
-
"uppercase",
|
|
11
|
-
"lowercase",
|
|
12
|
-
"capitalize"
|
|
13
|
-
]), m = {
|
|
14
|
-
bold: !1,
|
|
15
|
-
italic: !1,
|
|
16
|
-
underline: !1,
|
|
17
|
-
strikethrough: !1,
|
|
18
|
-
overline: !1
|
|
19
|
-
};
|
|
20
|
-
function h(e) {
|
|
21
|
-
let t = parseFloat(e);
|
|
22
|
-
if (!Number.isFinite(t)) return;
|
|
23
|
-
let n = /^-?[\d.]+([a-z%]+)$/i.exec(e.trim())?.[1]?.toLowerCase();
|
|
24
|
-
return n && n !== "px" && console.warn(`weasel domRuns: letter-spacing "${e}" uses unit "${n}", which is not converted; treated as ${t} world units`), t;
|
|
25
|
-
}
|
|
26
|
-
var g = (e) => e.hasAttribute("data-small-caps");
|
|
27
|
-
function _(e) {
|
|
28
|
-
let t = e.style.fontVariant || e.style.getPropertyValue("font-variant-caps");
|
|
29
|
-
return t === "small-caps" || t === "normal" ? t : void 0;
|
|
30
|
-
}
|
|
31
|
-
function v(e, t) {
|
|
32
|
-
if (g(e)) return t;
|
|
33
|
-
let n = { ...t }, r = e.tagName;
|
|
34
|
-
if ((r === "B" || r === "STRONG") && (n.bold = !0, n.fontWeight = void 0), (r === "I" || r === "EM") && (n.italic = !0), r === "U" && (n.underline = !0), (r === "S" || r === "STRIKE" || r === "DEL") && (n.strikethrough = !0), r === "SUP" && (n.script = "super"), r === "SUB" && (n.script = "sub"), e instanceof HTMLElement) {
|
|
35
|
-
let t = e.style.fontWeight, r = Number(e.getAttribute("data-font-weight") ?? t);
|
|
36
|
-
e.hasAttribute("data-font-weight") || ![
|
|
37
|
-
"",
|
|
38
|
-
"700",
|
|
39
|
-
"bold",
|
|
40
|
-
"400",
|
|
41
|
-
"normal"
|
|
42
|
-
].includes(t) ? Number.isFinite(r) && r > 0 && (n.fontWeight = r, n.bold = !1) : t !== "" && (n.bold = t === "700" || t === "bold", n.fontWeight = void 0);
|
|
43
|
-
let i = e.style.fontStyle;
|
|
44
|
-
i === "italic" && (n.italic = !0), i === "normal" && (n.italic = !1);
|
|
45
|
-
let a = e.style.textDecoration || e.style.textDecorationLine;
|
|
46
|
-
if (a && !a.includes("none") && (n.underline ||= a.includes("underline"), n.strikethrough ||= a.includes("line-through"), n.overline ||= a.includes("overline")), e.style.fontSize) {
|
|
47
|
-
let t = parseFloat(e.style.fontSize);
|
|
48
|
-
Number.isFinite(t) && (e.style.fontSize.trim().endsWith("%") ? n.fontScale = t / 100 : n.fontSize = t);
|
|
49
|
-
}
|
|
50
|
-
let o = e.style.verticalAlign;
|
|
51
|
-
(o === "super" || o === "sub") && (n.script = o === "super" ? "super" : "sub"), o === "baseline" && (n.script = void 0);
|
|
52
|
-
let s = e.getAttribute("data-baseline-shift");
|
|
53
|
-
if (s != null) {
|
|
54
|
-
let e = parseFloat(s);
|
|
55
|
-
Number.isFinite(e) && (n.baselineShift = e);
|
|
56
|
-
}
|
|
57
|
-
let c = e.style.textTransform;
|
|
58
|
-
p.has(c) && (n.textTransform = c);
|
|
59
|
-
let l = _(e);
|
|
60
|
-
l && (n.fontVariantCaps = l);
|
|
61
|
-
let u = e.getAttribute("data-font-family") ?? e.style.fontFamily;
|
|
62
|
-
u && (n.fontFamily = u);
|
|
63
|
-
let d = e.getAttribute(f);
|
|
64
|
-
d == null ? e.style.color && (n.color = e.style.color, n.fillJson = void 0) : (n.fillJson = d, n.color = void 0);
|
|
65
|
-
let m = e.style.letterSpacing;
|
|
66
|
-
if (m === "normal") n.letterSpacing = void 0;
|
|
67
|
-
else if (m) {
|
|
68
|
-
let e = h(m);
|
|
69
|
-
e != null && (n.letterSpacing = e);
|
|
70
|
-
}
|
|
71
|
-
}
|
|
72
|
-
return n;
|
|
73
|
-
}
|
|
74
|
-
function y(e, t) {
|
|
75
|
-
return e.bold === t.bold && e.italic === t.italic && e.underline === t.underline && e.strikethrough === t.strikethrough && e.overline === t.overline && e.fontWeight === t.fontWeight && e.fontSize === t.fontSize && e.fontFamily === t.fontFamily && e.color === t.color && e.fillJson === t.fillJson && e.letterSpacing === t.letterSpacing && e.script === t.script && e.baselineShift === t.baselineShift && e.fontScale === t.fontScale && e.textTransform === t.textTransform && e.fontVariantCaps === t.fontVariantCaps;
|
|
76
|
-
}
|
|
77
|
-
function b(e, t) {
|
|
78
|
-
let n = { text: e };
|
|
79
|
-
return t.bold && (n.bold = !0), t.italic && (n.italic = !0), t.fontWeight != null && (n.fontWeight = t.fontWeight), t.fontSize != null && (n.fontSize = t.fontSize), t.fontFamily != null && (n.fontFamily = t.fontFamily), t.fillJson === void 0 ? t.color != null && (n.fill = {
|
|
80
|
-
fill: "solid",
|
|
81
|
-
color: t.color
|
|
82
|
-
}) : n.fill = JSON.parse(t.fillJson), t.letterSpacing != null && (n.letterSpacing = t.letterSpacing), t.underline && (n.underline = !0), t.strikethrough && (n.strikethrough = !0), t.overline && (n.overline = !0), t.script != null && (n.script = t.script), t.baselineShift != null && (n.baselineShift = t.baselineShift), t.fontScale != null && (n.fontScale = t.fontScale), t.textTransform != null && (n.textTransform = t.textTransform), t.fontVariantCaps != null && (n.fontVariantCaps = t.fontVariantCaps), n;
|
|
83
|
-
}
|
|
84
|
-
var x = "data-break";
|
|
85
|
-
function S(e) {
|
|
86
|
-
let t = e.textContent ?? "", n = parseInt(e.getAttribute(x) ?? "", 16);
|
|
87
|
-
return t.startsWith("\n") && Number.isFinite(n) ? String.fromCharCode(n) + t.slice(1) : t;
|
|
88
|
-
}
|
|
89
|
-
function C(e, t) {
|
|
90
|
-
let n = 0;
|
|
91
|
-
for (let r = 0; r < t.length; r++) {
|
|
92
|
-
let i = t.charCodeAt(r);
|
|
93
|
-
if (i === 10 || !o(i) || i === 13 && t.charCodeAt(r + 1) === 10) continue;
|
|
94
|
-
r > n && e.appendChild(document.createTextNode(t.slice(n, r)));
|
|
95
|
-
let a = document.createElement("span");
|
|
96
|
-
a.setAttribute(x, i.toString(16)), a.textContent = "\n", e.appendChild(a), n = r + 1;
|
|
97
|
-
}
|
|
98
|
-
n < t.length && e.appendChild(document.createTextNode(t.slice(n)));
|
|
99
|
-
}
|
|
100
|
-
function w(t) {
|
|
101
|
-
let n = [];
|
|
102
|
-
function r(t, i) {
|
|
103
|
-
if (t.nodeType === Node.TEXT_NODE) {
|
|
104
|
-
let e = t.data;
|
|
105
|
-
e.length > 0 && n.push({
|
|
106
|
-
text: e,
|
|
107
|
-
style: i
|
|
108
|
-
});
|
|
109
|
-
return;
|
|
110
|
-
}
|
|
111
|
-
if (t.nodeType !== Node.ELEMENT_NODE) return;
|
|
112
|
-
let a = t;
|
|
113
|
-
if (a.tagName === "BR") {
|
|
114
|
-
n.push({
|
|
115
|
-
text: "\n",
|
|
116
|
-
style: i
|
|
117
|
-
});
|
|
118
|
-
return;
|
|
119
|
-
}
|
|
120
|
-
if (a.hasAttribute(x)) {
|
|
121
|
-
let e = S(a);
|
|
122
|
-
e.length > 0 && n.push({
|
|
123
|
-
text: e,
|
|
124
|
-
style: i
|
|
125
|
-
});
|
|
126
|
-
return;
|
|
127
|
-
}
|
|
128
|
-
e.has(a.tagName) && n.length > 0 && n.push({
|
|
129
|
-
text: "\n",
|
|
130
|
-
style: i
|
|
131
|
-
});
|
|
132
|
-
let o = v(a, i);
|
|
133
|
-
for (let e of Array.from(a.childNodes)) r(e, o);
|
|
134
|
-
}
|
|
135
|
-
for (let e of Array.from(t.childNodes)) r(e, m);
|
|
136
|
-
let i = [], a = 0;
|
|
137
|
-
for (; a < n.length;) {
|
|
138
|
-
let e = a + 1;
|
|
139
|
-
for (; e < n.length && y(n[a].style, n[e].style);) e++;
|
|
140
|
-
let t = n.slice(a, e).map((e) => e.text).join("");
|
|
141
|
-
i.push(b(t, n[a].style)), a = e;
|
|
142
|
-
}
|
|
143
|
-
return i;
|
|
144
|
-
}
|
|
145
|
-
var T = "--weasel-small-caps";
|
|
146
|
-
function E(e, t) {
|
|
147
|
-
let [n] = u([e], [t]), r = l(n.text, n.srcMap), i = Array(e.length).fill(!1);
|
|
148
|
-
r.small?.forEach((e, t) => {
|
|
149
|
-
e && (i[r.srcMap ? r.srcMap.starts[t] : t] = !0);
|
|
150
|
-
});
|
|
151
|
-
let a = [], o = 0;
|
|
152
|
-
for (let t of e) {
|
|
153
|
-
let e = a[a.length - 1];
|
|
154
|
-
e && e.small === i[o] ? e.text += t : a.push({
|
|
155
|
-
text: t,
|
|
156
|
-
small: i[o]
|
|
157
|
-
}), o += t.length;
|
|
158
|
-
}
|
|
159
|
-
return a;
|
|
160
|
-
}
|
|
161
|
-
function D(e, t, n) {
|
|
162
|
-
e.replaceChildren();
|
|
163
|
-
for (let r of E(t, n)) {
|
|
164
|
-
if (!r.small) {
|
|
165
|
-
C(e, r.text);
|
|
166
|
-
continue;
|
|
167
|
-
}
|
|
168
|
-
let t = document.createElement("span");
|
|
169
|
-
t.setAttribute("data-small-caps", ""), t.style.fontSize = `calc(var(${T}, ${a}) * 1em)`, t.style.textTransform = "uppercase", t.textContent = r.text, e.appendChild(t);
|
|
170
|
-
}
|
|
171
|
-
}
|
|
172
|
-
function O(e, t, n = i) {
|
|
173
|
-
t.replaceChildren();
|
|
174
|
-
for (let i of e) {
|
|
175
|
-
let e = document.createElement("span");
|
|
176
|
-
if (e.setAttribute("data-run", ""), (i.fontVariantCaps ?? n.fontVariantCaps) === "small-caps") {
|
|
177
|
-
let t = c(i.fontFamily ?? n.fontFamily, i.fontWeight ?? (i.bold ? 700 : s(n.fontWeight)), i.italic ? "italic" : n.fontStyle);
|
|
178
|
-
e.style.setProperty(T, String(t)), D(e, i.text, i.textTransform ?? n.textTransform);
|
|
179
|
-
} else C(e, i.text);
|
|
180
|
-
i.fontVariantCaps != null && (e.style.fontVariant = i.fontVariantCaps), i.fontWeight == null ? i.bold && (e.style.fontWeight = "700") : (e.style.fontWeight = String(i.fontWeight), e.setAttribute("data-font-weight", String(i.fontWeight))), i.italic && (e.style.fontStyle = "italic"), i.fontSize == null ? i.fontScale != null && (e.style.fontSize = `${i.fontScale * 100}%`) : e.style.fontSize = `${i.fontSize}px`, i.fontFamily != null && (e.style.fontFamily = r(i.fontFamily, {
|
|
181
|
-
weight: i.fontWeight ?? (i.bold ? 700 : void 0),
|
|
182
|
-
style: i.italic ? "italic" : void 0
|
|
183
|
-
}), e.setAttribute("data-font-family", i.fontFamily));
|
|
184
|
-
let a = d(i.fill);
|
|
185
|
-
a == null ? i.fill !== void 0 && e.setAttribute(f, JSON.stringify(i.fill)) : e.style.color = a, i.fill === null && (e.style.color = "#000");
|
|
186
|
-
let o = [];
|
|
187
|
-
i.underline && o.push("underline"), i.strikethrough && o.push("line-through"), i.overline && o.push("overline"), o.length > 0 && (e.style.textDecoration = o.join(" ")), i.script != null && (e.style.verticalAlign = i.script), i.baselineShift != null && e.setAttribute("data-baseline-shift", String(i.baselineShift)), i.letterSpacing != null && (e.style.letterSpacing = `${i.letterSpacing}px`), i.textTransform != null && (e.style.textTransform = i.textTransform), t.appendChild(e);
|
|
188
|
-
}
|
|
189
|
-
}
|
|
190
|
-
function k(e) {
|
|
191
|
-
let t = "";
|
|
192
|
-
for (let n of e.childNodes) n.nodeType === Node.TEXT_NODE ? t += n.data : n instanceof Element && (t += n.hasAttribute(x) ? S(n) : k(n));
|
|
193
|
-
return t;
|
|
194
|
-
}
|
|
195
|
-
function A(e, t) {
|
|
196
|
-
let n = E(k(e), t), r = [];
|
|
197
|
-
for (let t of e.childNodes) {
|
|
198
|
-
let e, n;
|
|
199
|
-
if (t.nodeType === Node.TEXT_NODE) e = !1, n = t.data;
|
|
200
|
-
else if (t instanceof HTMLElement && t.hasAttribute(x)) e = !1, n = S(t);
|
|
201
|
-
else if (t instanceof HTMLElement && g(t) && t.children.length === 0) e = !0, n = t.textContent ?? "";
|
|
202
|
-
else return !1;
|
|
203
|
-
if (n.length === 0) continue;
|
|
204
|
-
let i = r[r.length - 1];
|
|
205
|
-
i && i.small === e ? i.text += n : r.push({
|
|
206
|
-
text: n,
|
|
207
|
-
small: e
|
|
208
|
-
});
|
|
209
|
-
}
|
|
210
|
-
return n.length === r.length && n.every((e, t) => e.text === r[t].text && e.small === r[t].small);
|
|
211
|
-
}
|
|
212
|
-
function j(e) {
|
|
213
|
-
let t = !1, n = (e, r, i) => {
|
|
214
|
-
let a = _(e) ?? r, o = e.style.textTransform, s = p.has(o) ? o : i;
|
|
215
|
-
if (e.hasAttribute("data-run")) {
|
|
216
|
-
if (a === "small-caps") A(e, s) || (D(e, k(e), s), t = !0);
|
|
217
|
-
else if (e.querySelector("[data-small-caps]")) {
|
|
218
|
-
let n = k(e);
|
|
219
|
-
e.replaceChildren(), C(e, n), t = !0;
|
|
220
|
-
}
|
|
221
|
-
return;
|
|
222
|
-
}
|
|
223
|
-
for (let t of e.children) t instanceof HTMLElement && n(t, a, s);
|
|
224
|
-
};
|
|
225
|
-
return n(e, "normal", "none"), t;
|
|
226
|
-
}
|
|
227
|
-
//#endregion
|
|
228
|
-
export { T as SMALL_CAPS_SCALE_PROPERTY, C as appendOverlayText, t as charOffsetToDomPosition, n as domPositionToCharOffset, w as domToRuns, j as normalizeSmallCaps, O as runsToDom };
|
|
229
|
-
|
|
230
|
-
//# sourceMappingURL=domRuns.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"domRuns.js","names":["solidColor","p","FILL_ATTR","TRANSFORMS","EMPTY_STYLE","parseLetterSpacing","n","raw","unit","isSmallCapsPiece","el","cssFontVariant","v","styleStateFromElement","parent","next","tag","fw","ownWeight","fs","td","size","va","rawShift","shift","tt","fv","family","fillJson","ls","px","styleEquals","a","b","toRun","run","style","BREAK_ATTR","restoreBreak","text","code","appendOverlayText","from","i","c","isHardLineBreak","span","domToRuns","fragments","visit","node","restored","BLOCK_TAGS","nextStyle","child","runs","j","merged","f","SMALL_CAPS_SCALE_PROPERTY","smallCapsPieces","shown","transformRunTexts","transform","caps","smallCapsText","small","s","out","at","ch","last","writeSmallCaps","piece","SMALL_CAPS_SCALE","runsToDom","DEFAULT_TEXT_STYLE","base","scale","smallCapsScaleFor","numericWeight","cssFontFamily","color","decorations","sourceText","piecesMatch","want","have","normalizeSmallCaps","changed","variant","t","charOffsetToDomPosition","domPositionToCharOffset"],"sources":["../../../src/features/text/domRuns.ts"],"sourcesContent":["/**\n * Pure DOM ↔ `StyledRun[]` serializers for the contenteditable overlay\n * used by `useTextEdit`. The overlay's children are a flat sequence of\n * `<span data-run>` elements, each carrying one run's text and inline\n * styles. Newlines inside a run are literal `\\n` characters; the overlay\n * has `white-space: pre-wrap` so they render as line breaks. The browser\n * breaks at no other UAX #14 hard break, so each of those is written as a\n * `<span data-break>` holding a `\\n` in its place — one character for one,\n * which keeps DOM offsets equal to source offsets.\n *\n * A small-caps run is the one exception to one text node per span: its\n * lowercase letters sit in `<span data-small-caps>` pieces, uppercased and\n * sized at the scale the canvas draws them with, since a browser's own\n * synthesis uses a fixed factor of its own. The pieces are presentation\n * only — `domToRuns` reads straight through them.\n */\n\nimport type { FillStyle } from '@weasel-js/paint';\nimport {\n DEFAULT_TEXT_STYLE, isHardLineBreak, numericWeight, smallCapsScaleFor, smallCapsText, transformRunTexts,\n SMALL_CAPS_SCALE,\n type FontVariantCaps, type ResolvedTextStyle, type StyledRun, type TextTransform,\n} from '@weasel-js/text';\nimport { cssFontFamily } from '@weasel-js/font';\nimport { BLOCK_TAGS } from './domOffsets';\n\nexport { charOffsetToDomPosition, domPositionToCharOffset } from './domOffsets';\n\nfunction solidColor(p: FillStyle | null | undefined): string | null {\n if (!p) return null;\n if ('color' in p) return p.color;\n return null;\n}\n\n/** Holds, as JSON, a run fill its span's CSS color cannot say: a gradient, a\n * pattern, or `null` for no fill. */\nconst FILL_ATTR = 'data-fill';\n\ninterface StyleState {\n bold: boolean;\n italic: boolean;\n underline: boolean;\n strikethrough: boolean;\n overline: boolean;\n fontWeight?: number;\n fontSize?: number;\n fontFamily?: string;\n color?: string;\n /** `FILL_ATTR`'s value, which wins over `color`. */\n fillJson?: string;\n letterSpacing?: number;\n script?: 'super' | 'sub';\n baselineShift?: number;\n fontScale?: number;\n textTransform?: TextTransform;\n fontVariantCaps?: FontVariantCaps;\n}\n\nconst TRANSFORMS: ReadonlySet<string> = new Set(['none', 'uppercase', 'lowercase', 'capitalize']);\n\nconst EMPTY_STYLE: StyleState = {\n bold: false,\n italic: false,\n underline: false,\n strikethrough: false,\n overline: false,\n};\n\n/**\n * Parse a CSS `letter-spacing` value into world units. `runsToDom` only ever\n * writes `px`, but paste is a live path into the contenteditable and CSSOM\n * keeps whatever unit the pasted markup used. Any other unit is still\n * numerically coerced — `parseFloat` reads the leading digits — but flagged,\n * since e.g. `0.1em` silently becomes `0.1` world units, off by a factor of\n * the font size. Mirrors `parseLetterSpacing` in the SVG reader.\n */\nfunction parseLetterSpacing(raw: string): number | undefined {\n const n = parseFloat(raw);\n if (!Number.isFinite(n)) return undefined;\n const unit = /^-?[\\d.]+([a-z%]+)$/i.exec(raw.trim())?.[1]?.toLowerCase();\n if (unit && unit !== 'px') {\n console.warn(\n `weasel domRuns: letter-spacing \"${raw}\" uses unit \"${unit}\", which is not converted; treated as ${n} world units`,\n );\n }\n return n;\n}\n\n/** A small-caps piece is presentation `runsToDom` split a run into, not styling. */\nconst isSmallCapsPiece = (el: Element): boolean => el.hasAttribute('data-small-caps');\n\n/** The element's own `font-variant`, from the shorthand or the caps longhand\n * pasted markup may carry alone. */\nfunction cssFontVariant(el: HTMLElement): FontVariantCaps | undefined {\n const v = el.style.fontVariant || el.style.getPropertyValue('font-variant-caps');\n return v === 'small-caps' || v === 'normal' ? v : undefined;\n}\n\nfunction styleStateFromElement(el: Element, parent: StyleState): StyleState {\n if (isSmallCapsPiece(el)) return parent;\n const next: StyleState = { ...parent };\n const tag = el.tagName;\n if (tag === 'B' || tag === 'STRONG') {\n next.bold = true;\n next.fontWeight = undefined;\n }\n if (tag === 'I' || tag === 'EM') next.italic = true;\n // `runsToDom` never emits these, but a browser contenteditable can (Cmd+U\n // runs the native `underline` command, which produces `<u>` in Chrome), so\n // read them for the same reason `<b>`/`<i>` are read.\n if (tag === 'U') next.underline = true;\n if (tag === 'S' || tag === 'STRIKE' || tag === 'DEL') next.strikethrough = true;\n if (tag === 'SUP') next.script = 'super';\n if (tag === 'SUB') next.script = 'sub';\n if (el instanceof HTMLElement) {\n // 700 and 400 are the bold flag on and off, which is what pasted markup\n // means by them. A run's own weight is written with an attribute beside\n // the CSS, so a stored 400 or 700 comes back as the weight it was.\n const fw = el.style.fontWeight;\n const ownWeight = Number(el.getAttribute('data-font-weight') ?? fw);\n if (el.hasAttribute('data-font-weight') || !['', '700', 'bold', '400', 'normal'].includes(fw)) {\n if (Number.isFinite(ownWeight) && ownWeight > 0) {\n next.fontWeight = ownWeight;\n next.bold = false;\n }\n } else if (fw !== '') {\n next.bold = fw === '700' || fw === 'bold';\n next.fontWeight = undefined;\n }\n const fs = el.style.fontStyle;\n if (fs === 'italic') next.italic = true;\n if (fs === 'normal') next.italic = false;\n // Decoration accumulates down the tree — unlike `font-weight`/`font-style`\n // above, `text-decoration` does not inherit, it *propagates*, and a\n // descendant cannot cancel what an ancestor drew. So OR the flags in\n // rather than overwriting: `<u><span style=\"text-decoration: line-through\">`\n // renders both lines, and that is a reachable shape here, since `runsToDom`\n // emits the span and an unintercepted Cmd+U supplies the `<u>`. An explicit\n // `none` contributes no tokens and cancels nothing.\n //\n // A declaration block carrying only the longhand serializes the shorthand\n // as `''` (the shorthand needs the full set), and browsers and pasted HTML\n // both produce that, so fall back to `text-decoration-line`.\n const td = el.style.textDecoration || el.style.textDecorationLine;\n if (td && !td.includes('none')) {\n next.underline ||= td.includes('underline');\n next.strikethrough ||= td.includes('line-through');\n next.overline ||= td.includes('overline');\n }\n // A percentage is `fontScale`'s own spelling — CSS resolves it against the\n // parent, which is exactly what the field means. Any other unit is an\n // absolute size.\n if (el.style.fontSize) {\n const size = parseFloat(el.style.fontSize);\n if (Number.isFinite(size)) {\n if (el.style.fontSize.trim().endsWith('%')) next.fontScale = size / 100;\n else next.fontSize = size;\n }\n }\n const va = el.style.verticalAlign;\n if (va === 'super' || va === 'sub') next.script = va === 'super' ? 'super' : 'sub';\n if (va === 'baseline') next.script = undefined;\n const rawShift = el.getAttribute('data-baseline-shift');\n if (rawShift != null) {\n const shift = parseFloat(rawShift);\n if (Number.isFinite(shift)) next.baselineShift = shift;\n }\n const tt = el.style.textTransform;\n if (TRANSFORMS.has(tt)) next.textTransform = tt as TextTransform;\n const fv = cssFontVariant(el);\n if (fv) next.fontVariantCaps = fv;\n // The attribute holds the run's family; the CSS holds the face it maps to.\n const family = el.getAttribute('data-font-family') ?? el.style.fontFamily;\n if (family) next.fontFamily = family;\n const fillJson = el.getAttribute(FILL_ATTR);\n if (fillJson != null) {\n next.fillJson = fillJson;\n next.color = undefined;\n } else if (el.style.color) {\n next.color = el.style.color;\n next.fillJson = undefined;\n }\n const ls = el.style.letterSpacing;\n if (ls === 'normal') {\n next.letterSpacing = undefined;\n } else if (ls) {\n const px = parseLetterSpacing(ls);\n if (px != null) next.letterSpacing = px;\n }\n }\n return next;\n}\n\nfunction styleEquals(a: StyleState, b: StyleState): boolean {\n return (\n a.bold === b.bold &&\n a.italic === b.italic &&\n a.underline === b.underline &&\n a.strikethrough === b.strikethrough &&\n a.overline === b.overline &&\n a.fontWeight === b.fontWeight &&\n a.fontSize === b.fontSize &&\n a.fontFamily === b.fontFamily &&\n a.color === b.color &&\n a.fillJson === b.fillJson &&\n a.letterSpacing === b.letterSpacing &&\n a.script === b.script &&\n a.baselineShift === b.baselineShift &&\n a.fontScale === b.fontScale &&\n a.textTransform === b.textTransform &&\n a.fontVariantCaps === b.fontVariantCaps\n );\n}\n\nfunction toRun(text: string, style: StyleState): StyledRun {\n const run: StyledRun = { text };\n if (style.bold) run.bold = true;\n if (style.italic) run.italic = true;\n if (style.fontWeight != null) run.fontWeight = style.fontWeight;\n if (style.fontSize != null) run.fontSize = style.fontSize;\n if (style.fontFamily != null) run.fontFamily = style.fontFamily;\n if (style.fillJson !== undefined) run.fill = JSON.parse(style.fillJson) as FillStyle | null;\n else if (style.color != null) run.fill = { fill: 'solid', color: style.color };\n // `letterSpacing: 0` is a meaningful override (it cancels node-level\n // tracking for this run), so test for presence, not truthiness.\n if (style.letterSpacing != null) run.letterSpacing = style.letterSpacing;\n // Run-level flags are additive over the node style — a run cannot un-set\n // one — so an undecorated run gets an absent key, never `false`.\n if (style.underline) run.underline = true;\n if (style.strikethrough) run.strikethrough = true;\n if (style.overline) run.overline = true;\n if (style.script != null) run.script = style.script;\n // Both are meaningful at values that test falsy — a 0 shift cancels an\n // inherited script's rise — so test for presence, as `letterSpacing` does.\n if (style.baselineShift != null) run.baselineShift = style.baselineShift;\n if (style.fontScale != null) run.fontScale = style.fontScale;\n if (style.textTransform != null) run.textTransform = style.textTransform;\n if (style.fontVariantCaps != null) run.fontVariantCaps = style.fontVariantCaps;\n return run;\n}\n\nconst BREAK_ATTR = 'data-break';\n\n/** A break stand-in's source text: its hard break, and anything typed into it after. */\nfunction restoreBreak(el: Element): string {\n const text = el.textContent ?? '';\n const code = parseInt(el.getAttribute(BREAK_ATTR) ?? '', 16);\n return text.startsWith('\\n') && Number.isFinite(code) ? String.fromCharCode(code) + text.slice(1) : text;\n}\n\n/**\n * Append `text` to `parent` as the overlay sets it: a hard break the browser\n * would not break at becomes a `<span data-break>` holding a `\\n`, carrying\n * the original's code as hex for `domToRuns` to restore. A CR that opens a\n * CRLF is left as it is — the LF breaks, and the CR draws nothing.\n */\nexport function appendOverlayText(parent: Node, text: string): void {\n let from = 0;\n for (let i = 0; i < text.length; i++) {\n const c = text.charCodeAt(i);\n if (c === 10 || !isHardLineBreak(c) || (c === 13 && text.charCodeAt(i + 1) === 10)) continue;\n if (i > from) parent.appendChild(document.createTextNode(text.slice(from, i)));\n const span = document.createElement('span');\n span.setAttribute(BREAK_ATTR, c.toString(16));\n span.textContent = '\\n';\n parent.appendChild(span);\n from = i + 1;\n }\n if (from < text.length) parent.appendChild(document.createTextNode(text.slice(from)));\n}\n\n/** Walk an overlay tree and emit a coalesced `StyledRun[]`. */\nexport function domToRuns(parent: HTMLElement): StyledRun[] {\n const fragments: Array<{ text: string; style: StyleState }> = [];\n\n function visit(node: Node, style: StyleState): void {\n if (node.nodeType === Node.TEXT_NODE) {\n const text = (node as Text).data;\n if (text.length > 0) fragments.push({ text, style });\n return;\n }\n if (node.nodeType !== Node.ELEMENT_NODE) return;\n const el = node as Element;\n if (el.tagName === 'BR') {\n fragments.push({ text: '\\n', style });\n return;\n }\n if (el.hasAttribute(BREAK_ATTR)) {\n const restored = restoreBreak(el);\n if (restored.length > 0) fragments.push({ text: restored, style });\n return;\n }\n if (BLOCK_TAGS.has(el.tagName) && fragments.length > 0) {\n fragments.push({ text: '\\n', style });\n }\n const nextStyle = styleStateFromElement(el, style);\n for (const child of Array.from(el.childNodes)) {\n visit(child, nextStyle);\n }\n }\n\n for (const child of Array.from(parent.childNodes)) {\n visit(child, EMPTY_STYLE);\n }\n\n // Coalesce adjacent fragments with identical style.\n const runs: StyledRun[] = [];\n let i = 0;\n while (i < fragments.length) {\n let j = i + 1;\n while (j < fragments.length && styleEquals(fragments[i].style, fragments[j].style)) {\n j++;\n }\n const merged = fragments.slice(i, j).map((f) => f.text).join('');\n runs.push(toRun(merged, fragments[i].style));\n i = j;\n }\n return runs;\n}\n\n/** What a run inherits from its node, for the overlay's small caps: which\n * runs have it, and the face and transform that decide their pieces. */\nexport type OverlayRunBase = Pick<\n ResolvedTextStyle, 'fontFamily' | 'fontWeight' | 'fontStyle' | 'textTransform' | 'fontVariantCaps'\n>;\n\n/** The custom property carrying a small-caps run's scale down to its pieces. */\nexport const SMALL_CAPS_SCALE_PROPERTY = '--weasel-small-caps';\n\n/** A run's source text cut where small caps changes size, per `smallCapsText`\n * over the text as `transform` draws it. */\nfunction smallCapsPieces(text: string, transform: TextTransform): Array<{ text: string; small: boolean }> {\n const [shown] = transformRunTexts([text], [transform]);\n const caps = smallCapsText(shown.text, shown.srcMap);\n const small = new Array<boolean>(text.length).fill(false);\n caps.small?.forEach((s, i) => {\n if (s) small[caps.srcMap ? caps.srcMap.starts[i] : i] = true;\n });\n const out: Array<{ text: string; small: boolean }> = [];\n let at = 0;\n for (const ch of text) {\n const last = out[out.length - 1];\n if (last && last.small === small[at]) last.text += ch;\n else out.push({ text: ch, small: small[at] });\n at += ch.length;\n }\n return out;\n}\n\n/** Replace `span`'s children with `text`, its small-caps letters in pieces. */\nfunction writeSmallCaps(span: HTMLElement, text: string, transform: TextTransform): void {\n span.replaceChildren();\n for (const p of smallCapsPieces(text, transform)) {\n if (!p.small) { appendOverlayText(span, p.text); continue; }\n const piece = document.createElement('span');\n piece.setAttribute('data-small-caps', '');\n piece.style.fontSize = `calc(var(${SMALL_CAPS_SCALE_PROPERTY}, ${SMALL_CAPS_SCALE}) * 1em)`;\n piece.style.textTransform = 'uppercase';\n piece.textContent = p.text;\n span.appendChild(piece);\n }\n}\n\n/**\n * Build a flat sequence of `<span data-run>` children from `runs`, replacing\n * any existing children of `parent`. `base` is the node's style, which a run\n * inheriting small caps needs to be split by; without it the kit defaults\n * stand in.\n */\nexport function runsToDom(\n runs: readonly StyledRun[],\n parent: HTMLElement,\n base: OverlayRunBase = DEFAULT_TEXT_STYLE,\n): void {\n parent.replaceChildren();\n for (const run of runs) {\n const span = document.createElement('span');\n span.setAttribute('data-run', '');\n if ((run.fontVariantCaps ?? base.fontVariantCaps) === 'small-caps') {\n const scale = smallCapsScaleFor(\n run.fontFamily ?? base.fontFamily,\n run.fontWeight ?? (run.bold ? 700 : numericWeight(base.fontWeight)),\n run.italic ? 'italic' : base.fontStyle,\n );\n span.style.setProperty(SMALL_CAPS_SCALE_PROPERTY, String(scale));\n writeSmallCaps(span, run.text, run.textTransform ?? base.textTransform);\n } else {\n appendOverlayText(span, run.text);\n }\n // CSS as well as the pieces: it is what pasted markup says, and it gives a\n // letter typed outside a piece a small cap until the next normalize.\n if (run.fontVariantCaps != null) span.style.fontVariant = run.fontVariantCaps;\n if (run.fontWeight != null) {\n span.style.fontWeight = String(run.fontWeight);\n span.setAttribute('data-font-weight', String(run.fontWeight));\n } else if (run.bold) span.style.fontWeight = '700';\n if (run.italic) span.style.fontStyle = 'italic';\n // An absolute size wins over a relative one, as it does in `resolveRuns`.\n if (run.fontSize != null) span.style.fontSize = `${run.fontSize}px`;\n else if (run.fontScale != null) span.style.fontSize = `${run.fontScale * 100}%`;\n if (run.fontFamily != null) {\n span.style.fontFamily = cssFontFamily(run.fontFamily, {\n weight: run.fontWeight ?? (run.bold ? 700 : undefined),\n style: run.italic ? 'italic' : undefined,\n });\n span.setAttribute('data-font-family', run.fontFamily);\n }\n const color = solidColor(run.fill);\n if (color != null) span.style.color = color;\n else if (run.fill !== undefined) span.setAttribute(FILL_ATTR, JSON.stringify(run.fill));\n // Black, as an unfilled node edits in: no CSS color leaves it legible.\n if (run.fill === null) span.style.color = '#000';\n // Decoration goes on the span as an inline style rather than `<u>`/`<s>`\n // wrappers: one representation for `domToRuns` to unwrap, and one element\n // per run so the caret-offset walkers stay flat.\n const decorations: string[] = [];\n if (run.underline) decorations.push('underline');\n if (run.strikethrough) decorations.push('line-through');\n if (run.overline) decorations.push('overline');\n if (decorations.length > 0) span.style.textDecoration = decorations.join(' ');\n if (run.script != null) span.style.verticalAlign = run.script;\n // The one run field with no CSS spelling: `vertical-align` takes a length\n // or a percentage of the *line height*, and this is a fraction of the\n // parent's font size. An attribute keeps the round-trip exact; the canvas\n // underneath is what actually draws the run at its offset.\n if (run.baselineShift != null) {\n span.setAttribute('data-baseline-shift', String(run.baselineShift));\n }\n // World units — the overlay's own node-level tracking is screen-scaled,\n // but a run override is stored as-is so the round-trip is lossless. CSS\n // `letter-spacing` is inherited and a child declaration *replaces* the\n // inherited value, so this composes with the overlay's rather than adding.\n if (run.letterSpacing != null) span.style.letterSpacing = `${run.letterSpacing}px`;\n // CSS draws the transform, so the span's text stays the source and the\n // caret-offset walkers below need no map.\n if (run.textTransform != null) span.style.textTransform = run.textTransform;\n parent.appendChild(span);\n }\n}\n\n/** `el`'s text as `domToRuns` reads it: each break stand-in restored. */\nfunction sourceText(el: Element): string {\n let out = '';\n for (const n of el.childNodes) {\n if (n.nodeType === Node.TEXT_NODE) out += (n as Text).data;\n else if (n instanceof Element) out += n.hasAttribute(BREAK_ATTR) ? restoreBreak(n) : sourceText(n);\n }\n return out;\n}\n\n/** Whether `span`'s children are the pieces `writeSmallCaps` would write. */\nfunction piecesMatch(span: HTMLElement, transform: TextTransform): boolean {\n const want = smallCapsPieces(sourceText(span), transform);\n const have: Array<{ text: string; small: boolean }> = [];\n for (const n of span.childNodes) {\n let small: boolean;\n let text: string;\n if (n.nodeType === Node.TEXT_NODE) { small = false; text = (n as Text).data; }\n else if (n instanceof HTMLElement && n.hasAttribute(BREAK_ATTR)) { small = false; text = restoreBreak(n); }\n else if (n instanceof HTMLElement && isSmallCapsPiece(n) && n.children.length === 0) { small = true; text = n.textContent ?? ''; }\n else return false;\n if (text.length === 0) continue;\n const last = have[have.length - 1];\n if (last && last.small === small) last.text += text;\n else have.push({ text, small });\n }\n return want.length === have.length\n && want.every((p, i) => p.text === have[i].text && p.small === have[i].small);\n}\n\n/**\n * Put every run span's small-caps pieces back where its text now needs them —\n * typing lands a letter in whichever piece holds the caret, not the one its\n * case belongs in. Returns whether anything was rewritten, which moves the\n * DOM selection: the caller restores it by character offset.\n */\nexport function normalizeSmallCaps(parent: HTMLElement): boolean {\n let changed = false;\n const visit = (el: HTMLElement, variant: FontVariantCaps, transform: TextTransform): void => {\n const v = cssFontVariant(el) ?? variant;\n const tt = el.style.textTransform;\n const t = TRANSFORMS.has(tt) ? (tt as TextTransform) : transform;\n if (el.hasAttribute('data-run')) {\n if (v === 'small-caps') {\n if (!piecesMatch(el, t)) { writeSmallCaps(el, sourceText(el), t); changed = true; }\n } else if (el.querySelector('[data-small-caps]')) {\n const text = sourceText(el);\n el.replaceChildren();\n appendOverlayText(el, text);\n changed = true;\n }\n return;\n }\n for (const child of el.children) if (child instanceof HTMLElement) visit(child, v, t);\n };\n visit(parent, 'normal', 'none');\n return changed;\n}\n"],"mappings":"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"}
|
|
@@ -1,38 +0,0 @@
|
|
|
1
|
-
import { layoutTextPose as e } from "@weasel-js/text";
|
|
2
|
-
//#region src/features/text/fitTextPose.ts
|
|
3
|
-
function t(t, r = {}) {
|
|
4
|
-
let i = r.axis ?? "height", { padX: a, padY: o } = n(r.padding), { bounds: s } = e(i === "height" ? {
|
|
5
|
-
...t,
|
|
6
|
-
width: t.width - a * 2
|
|
7
|
-
} : {
|
|
8
|
-
...t,
|
|
9
|
-
style: {
|
|
10
|
-
...t.style,
|
|
11
|
-
wrap: !1
|
|
12
|
-
}
|
|
13
|
-
}).laid;
|
|
14
|
-
return i === "height" ? {
|
|
15
|
-
...t,
|
|
16
|
-
height: s.height + o * 2
|
|
17
|
-
} : {
|
|
18
|
-
...t,
|
|
19
|
-
width: s.width + a * 2,
|
|
20
|
-
height: s.height + o * 2
|
|
21
|
-
};
|
|
22
|
-
}
|
|
23
|
-
function n(e) {
|
|
24
|
-
return e == null ? {
|
|
25
|
-
padX: 0,
|
|
26
|
-
padY: 0
|
|
27
|
-
} : typeof e == "number" ? {
|
|
28
|
-
padX: e,
|
|
29
|
-
padY: e
|
|
30
|
-
} : {
|
|
31
|
-
padX: e.x ?? 0,
|
|
32
|
-
padY: e.y ?? 0
|
|
33
|
-
};
|
|
34
|
-
}
|
|
35
|
-
//#endregion
|
|
36
|
-
export { t as fitTextPose };
|
|
37
|
-
|
|
38
|
-
//# sourceMappingURL=fitTextPose.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"fitTextPose.js","names":["fitTextPose","axis","opts","resolvePadding","layoutTextPose","pose","padX","bounds","padY","p"],"sources":["../../../src/features/text/fitTextPose.ts"],"sourcesContent":["/**\n * Resize a text node's pose to fit its content. Pure helper — does not own\n * scene state. Call it whenever the text, style, or relevant axis changes,\n * and write the returned pose back through your adapter.\n *\n * Two modes:\n *\n * - `axis: 'height'` (default): keep `pose.width`, recompute `height` as\n * the block height plus optional vertical padding — wrapped at the width\n * inside the horizontal padding when the style declares `wrap`. The\n * common case for column-layout text — chat bubbles, sticky notes.\n *\n * - `axis: 'both'`: ignore wrapping; recompute both `width` (longest\n * `\\n`-split line) and `height` (line count × line height) plus padding.\n * For badges and inline labels where the rect hugs the text on both\n * axes. Newlines are still respected.\n *\n * `pose.x` / `pose.y` are preserved. The caller picks the anchor — if you\n * want a different growth direction (e.g. anchor bottom-right), adjust\n * `x` / `y` after calling.\n */\n\nimport { layoutTextPose } from '@weasel-js/text';\nimport type { TextPose } from '@weasel-js/text';\n\n/** Options for `fitTextPose`. */\nexport interface FitTextPoseOptions {\n /** Which axis (or axes) to recompute. Default: `'height'`. */\n axis?: 'height' | 'both';\n /** Padding (world units) added to all four sides. Default 0. */\n padding?: number | { x?: number; y?: number };\n}\n\n/** Recompute a `TextPose`'s `width`/`height` to fit its content; pure helper, doesn't mutate scene state. */\nexport function fitTextPose(\n pose: TextPose,\n opts: FitTextPoseOptions = {},\n): TextPose {\n const axis = opts.axis ?? 'height';\n const { padX, padY } = resolvePadding(opts.padding);\n const { bounds } = layoutTextPose(axis === 'height'\n ? { ...pose, width: pose.width - padX * 2 }\n : { ...pose, style: { ...pose.style, wrap: false } }).laid;\n if (axis === 'height') return { ...pose, height: bounds.height + padY * 2 };\n return {\n ...pose,\n width: bounds.width + padX * 2,\n height: bounds.height + padY * 2,\n };\n}\n\nfunction resolvePadding(p: FitTextPoseOptions['padding']): { padX: number; padY: number } {\n if (p == null) return { padX: 0, padY: 0 };\n if (typeof p === 'number') return { padX: p, padY: p };\n return { padX: p.x ?? 0, padY: p.y ?? 0 };\n}\n"],"mappings":";;AAkCA,SAAgBA,EACd,GACA,IAA2B,CAAC,GAClB;CACV,IAAMC,IAAOC,EAAK,QAAQ,UACpB,EAAE,SAAM,YAASC,EAAeD,EAAK,OAAO,GAC5C,EAAE,cAAWE,EAAeH,MAAS,WACvC;EAAE,GAAGI;EAAM,OAAOA,EAAK,QAAQC,IAAO;CAAE,IACxC;EAAE,GAAGD;EAAM,OAAO;GAAE,GAAGA,EAAK;GAAO,MAAM;EAAM;CAAE,CAAC,CAAC,CAAC;CAExD,OADIJ,MAAS,WAAiB;EAAE,GAAGI;EAAM,QAAQE,EAAO,SAASC,IAAO;CAAE,IACnE;EACL,GAAGH;EACH,OAAOE,EAAO,QAAQD,IAAO;EAC7B,QAAQC,EAAO,SAASC,IAAO;CACjC;AACF;AAEA,SAASL,EAAe,GAAkE;CAGxF,OAFIM,KAAK,OAAa;EAAE,MAAM;EAAG,MAAM;CAAE,IACrC,OAAOA,KAAM,WAAiB;EAAE,MAAMA;EAAG,MAAMA;CAAE,IAC9C;EAAE,MAAMA,EAAE,KAAK;EAAG,MAAMA,EAAE,KAAK;CAAE;AAC1C"}
|
|
@@ -1,48 +0,0 @@
|
|
|
1
|
-
import { layoutTextPose as e } from "@weasel-js/text";
|
|
2
|
-
//#region src/features/text/hitTest.ts
|
|
3
|
-
function t(e) {
|
|
4
|
-
let t = [];
|
|
5
|
-
for (let n of e) {
|
|
6
|
-
let e = t[t.length - 1];
|
|
7
|
-
if (e && (!e.clusterEnd || e.srcIndex === n.srcIndex && e.srcEnd === n.srcEnd)) {
|
|
8
|
-
let r = Math.min(e.x, n.x), i = Math.max(e.x + e.advance, n.x + n.advance);
|
|
9
|
-
t[t.length - 1] = {
|
|
10
|
-
...e,
|
|
11
|
-
x: r,
|
|
12
|
-
advance: i - r,
|
|
13
|
-
srcIndex: Math.min(e.srcIndex, n.srcIndex),
|
|
14
|
-
srcEnd: Math.max(e.srcEnd, n.srcEnd),
|
|
15
|
-
clusterEnd: n.clusterEnd
|
|
16
|
-
};
|
|
17
|
-
} else t.push(n);
|
|
18
|
-
}
|
|
19
|
-
return t;
|
|
20
|
-
}
|
|
21
|
-
function n(e, t, n, r = {}) {
|
|
22
|
-
let i = r.padding ?? 0;
|
|
23
|
-
return e >= n.x - i && e <= n.x + n.width + i && t >= n.y - i && t <= n.y + n.height + i;
|
|
24
|
-
}
|
|
25
|
-
function r(n, r, i) {
|
|
26
|
-
let { laid: a, x: o, y: s } = e(i), c = a.lines;
|
|
27
|
-
if (c.length === 0) return 0;
|
|
28
|
-
let l = c[c.length - 1];
|
|
29
|
-
if (r < s + c[0].y0) return c[0].cells[0]?.srcIndex ?? c[0].srcEnd;
|
|
30
|
-
if (r >= s + l.y1) return l.srcEnd;
|
|
31
|
-
let u = l;
|
|
32
|
-
for (let e of c) if (r < s + e.y1) {
|
|
33
|
-
u = e;
|
|
34
|
-
break;
|
|
35
|
-
}
|
|
36
|
-
if (u.cells.length === 0) return u.srcEnd;
|
|
37
|
-
let d = t(u.cells), f = d.map((e, t) => t).sort((e, t) => d[e].x - d[t].x);
|
|
38
|
-
for (let e of f) {
|
|
39
|
-
let t = d[e];
|
|
40
|
-
if (!(n >= o + t.x + t.advance / 2)) return t.level % 2 == 1 ? t.srcEnd : t.srcIndex;
|
|
41
|
-
}
|
|
42
|
-
let p = d[f[f.length - 1]];
|
|
43
|
-
return p.level % 2 == 1 ? p.srcIndex : p.srcEnd;
|
|
44
|
-
}
|
|
45
|
-
//#endregion
|
|
46
|
-
export { r as caretIndexAt, n as pointInTextPose };
|
|
47
|
-
|
|
48
|
-
//# sourceMappingURL=hitTest.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"hitTest.js","names":["caretCells","out","c","cells","prev","x0","x1","pointInTextPose","p","opts","x","pose","y","caretIndexAt","dx","dy","layoutTextPose","lines","laid","last","line","candidate","visual","i","a","b","trailing"],"sources":["../../../src/features/text/hitTest.ts"],"sourcesContent":["/**\n * Hit-testing for text nodes.\n *\n * `pointInTextPose` does a coarse pose-rect test — suitable for click-to-edit\n * where the pose rect is the authoritative bounding box (selection outline,\n * drag target).\n *\n * `caretIndexAt` does the finer test: given a world-space (x, y) inside the\n * pose, returns the corresponding character offset so the consumer can place\n * the caret on click. It reads the caret stops off `layoutTextPose`, the\n * layout the painters draw and `textLineBoxes` picks against, so the caret\n * cannot land on a different line — or between different glyphs — than the\n * one under the pointer.\n */\n\nimport { layoutTextPose } from '@weasel-js/text';\nimport type { LaidOutCell, TextPose } from '@weasel-js/text';\n\n/**\n * Merge neighboring cells a caret cannot stop between into one cell spanning\n * them: the cells of one grapheme cluster (a letter and its combining mark,\n * the parts of a joined emoji), and cells drawn from one source character\n * (the two `S`s an uppercased `ß` becomes).\n */\nfunction caretCells(cells: readonly LaidOutCell[]): LaidOutCell[] {\n const out: LaidOutCell[] = [];\n for (const c of cells) {\n const prev = out[out.length - 1];\n if (prev && (!prev.clusterEnd || (prev.srcIndex === c.srcIndex && prev.srcEnd === c.srcEnd))) {\n const x0 = Math.min(prev.x, c.x);\n const x1 = Math.max(prev.x + prev.advance, c.x + c.advance);\n out[out.length - 1] = {\n ...prev, x: x0, advance: x1 - x0,\n srcIndex: Math.min(prev.srcIndex, c.srcIndex), srcEnd: Math.max(prev.srcEnd, c.srcEnd),\n clusterEnd: c.clusterEnd,\n };\n } else {\n out.push(c);\n }\n }\n return out;\n}\n\n/** Options for `pointInTextPose`. */\nexport interface PointInTextPoseOpts {\n /** Extra padding (world units) added to the rect on all sides. Default 0. */\n padding?: number;\n}\n\n/** Coarse pose-rect hit-test for a text node — suitable for click-to-edit dispatch. */\nexport function pointInTextPose(\n x: number,\n y: number,\n pose: TextPose,\n opts: PointInTextPoseOpts = {},\n): boolean {\n const p = opts.padding ?? 0;\n return (\n x >= pose.x - p &&\n x <= pose.x + pose.width + p &&\n y >= pose.y - p &&\n y <= pose.y + pose.height + p\n );\n}\n\n/**\n * Map a world-space point inside `pose` to a character offset into the pose's\n * text (0..length). Clicks above the first line clamp to 0; clicks below the\n * last line clamp to the end. Within a line, the caret lands between two\n * glyphs at whichever side of the advance cell's midpoint `x` falls on — the\n * standard \"snap caret to nearest character boundary\" rule.\n *\n * Honors `pose.runs` (a mixed-size line snaps on the cells each run actually\n * produced) and `pose.verticalAlign`. The offset is into the runs'\n * concatenated text, which `TextPose` requires to equal `pose.text`.\n */\nexport function caretIndexAt(x: number, y: number, pose: TextPose): number {\n const { laid, x: dx, y: dy } = layoutTextPose(pose);\n const lines = laid.lines;\n if (lines.length === 0) return 0;\n\n const last = lines[lines.length - 1];\n if (y < dy + lines[0].y0) return lines[0].cells[0]?.srcIndex ?? lines[0].srcEnd;\n if (y >= dy + last.y1) return last.srcEnd;\n\n let line = last;\n for (const candidate of lines) {\n if (y < dy + candidate.y1) { line = candidate; break; }\n }\n\n // Cells are in logical order and their x values need not ascend, so the\n // sweep has to be in visual order and each cell's own extent is what it is\n // tested against — the next cell along is not its right edge.\n if (line.cells.length === 0) return line.srcEnd;\n const cells = caretCells(line.cells);\n const visual = cells.map((_, i) => i).sort((a, b) => cells[a].x - cells[b].x);\n\n for (const i of visual) {\n const c = cells[i];\n if (x >= dx + c.x + c.advance / 2) continue;\n // A right-to-left cell reads the other way, so its visually-leading half\n // is the character's logical end.\n return c.level % 2 === 1 ? c.srcEnd : c.srcIndex;\n }\n const trailing = cells[visual[visual.length - 1]];\n return trailing.level % 2 === 1 ? trailing.srcIndex : trailing.srcEnd;\n}\n"],"mappings":";;AAwBA,SAASA,EAAW,GAA8C;CAChE,IAAMC,IAAqB,CAAC;CAC5B,KAAK,IAAMC,KAAKC,GAAO;EACrB,IAAMC,IAAOH,EAAIA,EAAI,SAAS;EAC9B,IAAIG,MAAS,CAACA,EAAK,cAAeA,EAAK,aAAaF,EAAE,YAAYE,EAAK,WAAWF,EAAE,SAAU;GAC5F,IAAMG,IAAK,KAAK,IAAID,EAAK,GAAGF,EAAE,CAAC,GACzBI,IAAK,KAAK,IAAIF,EAAK,IAAIA,EAAK,SAASF,EAAE,IAAIA,EAAE,OAAO;GAC1D,EAAID,EAAI,SAAS,KAAK;IACpB,GAAGG;IAAM,GAAGC;IAAI,SAASC,IAAKD;IAC9B,UAAU,KAAK,IAAID,EAAK,UAAUF,EAAE,QAAQ;IAAG,QAAQ,KAAK,IAAIE,EAAK,QAAQF,EAAE,MAAM;IACrF,YAAYA,EAAE;GAChB;EACF,OACE,EAAI,KAAKA,CAAC;CAEd;CACA,OAAOD;AACT;AASA,SAAgBM,EACd,GACA,GACA,GACA,IAA4B,CAAC,GACpB;CACT,IAAMC,IAAIC,EAAK,WAAW;CAC1B,OACEC,KAAKC,EAAK,IAAIH,KACdE,KAAKC,EAAK,IAAIA,EAAK,QAAQH,KAC3BI,KAAKD,EAAK,IAAIH,KACdI,KAAKD,EAAK,IAAIA,EAAK,SAASH;AAEhC;AAaA,SAAgBK,EAAa,GAAW,GAAW,GAAwB;CACzE,IAAM,EAAE,SAAM,GAAGC,GAAI,GAAGC,MAAOC,EAAeL,CAAI,GAC5CM,IAAQC,EAAK;CACnB,IAAID,EAAM,WAAW,GAAG,OAAO;CAE/B,IAAME,IAAOF,EAAMA,EAAM,SAAS;CAClC,IAAIL,IAAIG,IAAKE,EAAM,EAAE,CAAC,IAAI,OAAOA,EAAM,EAAE,CAAC,MAAM,EAAE,EAAE,YAAYA,EAAM,EAAE,CAAC;CACzE,IAAIL,KAAKG,IAAKI,EAAK,IAAI,OAAOA,EAAK;CAEnC,IAAIC,IAAOD;CACX,KAAK,IAAME,KAAaJ,GACtB,IAAIL,IAAIG,IAAKM,EAAU,IAAI;EAAE,IAAOA;EAAW;CAAO;CAMxD,IAAID,EAAK,MAAM,WAAW,GAAG,OAAOA,EAAK;CACzC,IAAMjB,IAAQH,EAAWoB,EAAK,KAAK,GAC7BE,IAASnB,EAAM,KAAK,GAAG,MAAMoB,CAAC,CAAC,CAAC,MAAM,GAAG,MAAMpB,EAAMqB,EAAE,CAAC,IAAIrB,EAAMsB,EAAE,CAAC,CAAC;CAE5E,KAAK,IAAMF,KAAKD,GAAQ;EACtB,IAAMpB,IAAIC,EAAMoB;EAChB,IAAI,OAAKT,IAAKZ,EAAE,IAAIA,EAAE,UAAU,IAGhC,OAAOA,EAAE,QAAQ,KAAM,IAAIA,EAAE,SAASA,EAAE;CAC1C;CACA,IAAMwB,IAAWvB,EAAMmB,EAAOA,EAAO,SAAS;CAC9C,OAAOI,EAAS,QAAQ,KAAM,IAAIA,EAAS,WAAWA,EAAS;AACjE"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"isTextData.js","names":["isTextData","data"],"sources":["../../../src/features/text/isTextData.ts"],"sourcesContent":["/**\n * The kit's one answer to \"is this node text?\": its data carries a string\n * `text`. Routing, the `textEdit` dep, and `useSceneTextEdit` all ask it.\n */\nexport function isTextData(data: unknown): data is { text: string } {\n return typeof data === 'object' && data !== null\n && typeof (data as { text?: unknown }).text === 'string';\n}\n"],"mappings":";AAIA,SAAgBA,EAAW,GAAyC;CAClE,OAAO,OAAOC,KAAS,cAAYA,KAC9B,OAAQA,EAA4B,QAAS;AACpD"}
|
|
@@ -1,15 +0,0 @@
|
|
|
1
|
-
import { paragraphDirection as e, resolveAlign as t } from "@weasel-js/text";
|
|
2
|
-
//#region src/features/text/overlayDirection.ts
|
|
3
|
-
function n(e, n) {
|
|
4
|
-
let r = n.direction === "auto";
|
|
5
|
-
e.style.direction = r ? "" : n.direction, e.style.setProperty("unicode-bidi", r ? "plaintext" : ""), e.style.setProperty("tab-size", String(n.tabSize));
|
|
6
|
-
let i = n.align === "justify", a = n.direction === "auto" ? i ? "start" : n.align : t(n.align, n.direction);
|
|
7
|
-
e.style.textAlign = i ? "justify" : a, e.style.setProperty("text-align-last", i ? a : "");
|
|
8
|
-
}
|
|
9
|
-
function r(n, r) {
|
|
10
|
-
return t(r.align, e(n.textContent ?? "", r.direction));
|
|
11
|
-
}
|
|
12
|
-
//#endregion
|
|
13
|
-
export { n as applyOverlayDirection, r as overlayAlignEdge };
|
|
14
|
-
|
|
15
|
-
//# sourceMappingURL=overlayDirection.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"overlayDirection.js","names":["applyOverlayDirection","auto","style","el","justify","edge","resolveAlign","overlayAlignEdge","paragraphDirection"],"sources":["../../../src/features/text/overlayDirection.ts"],"sourcesContent":["/**\n * The edit overlay's reading direction, alignment, and tab stops, set so the\n * browser resolves them the way `layoutRuns` does for the canvas.\n */\nimport { paragraphDirection, resolveAlign, type ResolvedTextStyle } from '@weasel-js/text';\n\n/**\n * A stated direction goes on the overlay as CSS `direction`. `auto` becomes\n * `unicode-bidi: plaintext`, CSS's spelling of \"each paragraph reads the way\n * its first strong character does\", under which `start` and `end` follow each\n * paragraph too, so those are left for the browser to resolve.\n */\nexport function applyOverlayDirection(el: HTMLElement, style: ResolvedTextStyle): void {\n const auto = style.direction === 'auto';\n el.style.direction = auto ? '' : style.direction;\n el.style.setProperty('unicode-bidi', auto ? 'plaintext' : '');\n el.style.setProperty('tab-size', String(style.tabSize));\n const justify = style.align === 'justify';\n const edge = style.direction === 'auto'\n ? (justify ? 'start' : style.align)\n : resolveAlign(style.align, style.direction);\n el.style.textAlign = justify ? 'justify' : edge;\n // Pinned, so a justified paragraph's last line sits where the canvas puts it.\n el.style.setProperty('text-align-last', justify ? edge : '');\n}\n\n/** The absolute edge the overlay's text is set from, by its first paragraph. */\nexport function overlayAlignEdge(el: HTMLElement, style: ResolvedTextStyle): 'left' | 'center' | 'right' {\n return resolveAlign(style.align, paragraphDirection(el.textContent ?? '', style.direction));\n}\n"],"mappings":";;AAYA,SAAgBA,EAAsB,GAAiB,GAAgC;CACrF,IAAMC,IAAOC,EAAM,cAAc;CAGjC,AAFA,EAAG,MAAM,YAAYD,IAAO,KAAKC,EAAM,WACvCC,EAAG,MAAM,YAAY,gBAAgBF,IAAO,cAAc,EAAE,GAC5DE,EAAG,MAAM,YAAY,YAAY,OAAOD,EAAM,OAAO,CAAC;CACtD,IAAME,IAAUF,EAAM,UAAU,WAC1BG,IAAOH,EAAM,cAAc,SAC5BE,IAAU,UAAUF,EAAM,QAC3BI,EAAaJ,EAAM,OAAOA,EAAM,SAAS;CAG7C,AAFA,EAAG,MAAM,YAAYE,IAAU,YAAYC,GAE3CF,EAAG,MAAM,YAAY,mBAAmBC,IAAUC,IAAO,EAAE;AAC7D;AAGA,SAAgBE,EAAiB,GAAiB,GAAuD;CACvG,OAAOD,EAAaJ,EAAM,OAAOM,EAAmBL,EAAG,eAAe,IAAID,EAAM,SAAS,CAAC;AAC5F"}
|
|
@@ -1,14 +0,0 @@
|
|
|
1
|
-
//#region src/features/text/renderLabel.ts
|
|
2
|
-
function e(e, n, r, i, a = {}) {
|
|
3
|
-
let { align: o = "center", fontSize: s = 13, renderText: c, width: l, height: u, padX: d = 4, padY: f = 1, cornerRadius: p = 3 } = a;
|
|
4
|
-
e.save(), e.font = `${s}px sans-serif`, e.textBaseline = "top";
|
|
5
|
-
let m = l ?? e.measureText(n).width, h = u ?? s, g = m + d * 2, _ = h + f * 2, v = o === "center" ? r - g / 2 : r - d;
|
|
6
|
-
e.fillStyle = "rgba(0, 0, 0, 0.75)", e.beginPath(), e.roundRect(v, i - f, g, _, p), e.fill(), e.textAlign = o === "center" ? "center" : "left", (c ?? t)(e, n, r, i), e.restore();
|
|
7
|
-
}
|
|
8
|
-
var t = (e, t, n, r) => {
|
|
9
|
-
e.fillStyle = "#FFFFFF", e.fillText(t, n, r);
|
|
10
|
-
};
|
|
11
|
-
//#endregion
|
|
12
|
-
export { t as defaultLabelTextRenderer, e as renderLabel };
|
|
13
|
-
|
|
14
|
-
//# sourceMappingURL=renderLabel.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"renderLabel.js","names":["renderLabel","options","ctx","fontSize","contentW","width","text","contentH","height","w","padX","h","padY","rx","align","x","y","cornerRadius","renderText","defaultLabelTextRenderer"],"sources":["../../../src/features/text/renderLabel.ts"],"sourcesContent":["import type { TextRenderer } from '@weasel-js/text';\n\n\n/** Visual options for `renderLabel`. */\nexport interface LabelOptions {\n align?: 'center' | 'left';\n fontSize?: number;\n renderText?: TextRenderer;\n /** Override the pill width (content width, excluding padding). */\n width?: number;\n /** Override the pill height (content height, excluding padding). */\n height?: number;\n /** Horizontal padding inside the pill. Default 4 (screen-pixel default). */\n padX?: number;\n /** Vertical padding inside the pill. Default 1 (screen-pixel default). */\n padY?: number;\n /** Corner radius of the pill background. Default 3 (screen-pixel default). */\n cornerRadius?: number;\n}\n\n/** Render a text label with a 75%-opaque black pill background and white text. */\nexport function renderLabel(\n ctx: CanvasRenderingContext2D,\n text: string,\n x: number,\n y: number,\n options: LabelOptions = {},\n): void {\n const {\n align = 'center',\n fontSize = 13,\n renderText,\n width,\n height,\n padX = 4,\n padY = 1,\n cornerRadius = 3,\n } = options;\n\n ctx.save();\n ctx.font = `${fontSize}px sans-serif`;\n ctx.textBaseline = 'top';\n const contentW = width ?? ctx.measureText(text).width;\n const contentH = height ?? fontSize;\n const w = contentW + padX * 2;\n const h = contentH + padY * 2;\n const rx = align === 'center' ? x - w / 2 : x - padX;\n\n ctx.fillStyle = 'rgba(0, 0, 0, 0.75)';\n ctx.beginPath();\n ctx.roundRect(rx, y - padY, w, h, cornerRadius);\n ctx.fill();\n\n ctx.textAlign = align === 'center' ? 'center' : 'left';\n const tx = align === 'center' ? x : x;\n (renderText ?? defaultLabelTextRenderer)(ctx, text, tx, y);\n ctx.restore();\n}\n\n/** Default `TextRenderer` used by `renderLabel`: white fill, no styling. */\nexport const defaultLabelTextRenderer: TextRenderer = (ctx, text, x, y) => {\n ctx.fillStyle = '#FFFFFF';\n ctx.fillText(text, x, y);\n};\n"],"mappings":";AAqBA,SAAgBA,EACd,GACA,GACA,GACA,GACA,IAAwB,CAAC,GACnB;CACN,IAAM,EACJ,WAAQ,UACR,cAAW,IACX,eACA,UACA,WACA,UAAO,GACP,UAAO,GACP,kBAAe,MACbC;CAIJ,AAFAC,EAAI,KAAK,GACT,EAAI,OAAO,GAAGC,EAAS,gBACvB,EAAI,eAAe;CACnB,IAAMC,IAAWC,KAASH,EAAI,YAAYI,CAAI,CAAC,CAAC,OAC1CC,IAAWC,KAAUL,GACrBM,IAAIL,IAAWM,IAAO,GACtBC,IAAIJ,IAAWK,IAAO,GACtBC,IAAKC,MAAU,WAAWC,IAAIN,IAAI,IAAIM,IAAIL;CAUhD,AARA,EAAI,YAAY,uBAChBR,EAAI,UAAU,GACdA,EAAI,UAAUW,GAAIG,IAAIJ,GAAMH,GAAGE,GAAGM,CAAY,GAC9Cf,EAAI,KAAK,GAET,EAAI,YAAYY,MAAU,WAAW,WAAW,SAE/CI,KAAcC,EAAA,CAA0BjB,GAAKI,GADdS,GACwBC,CAAC,GACzDd,EAAI,QAAQ;AACd;AAGA,IAAaiB,KAA0C,GAAK,GAAM,GAAG,MAAM;CAEzE,AADA,EAAI,YAAY,WAChBjB,EAAI,SAASI,GAAMS,GAAGC,CAAC;AACzB"}
|