@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.
Files changed (1191) hide show
  1. package/CHANGELOG.md +918 -0
  2. package/README.md +38 -3
  3. package/dist/WeaselProvider.js +5 -7
  4. package/dist/WeaselProvider.js.map +1 -1
  5. package/dist/affordances/composeAffordanceLayer.js +92 -84
  6. package/dist/affordances/composeAffordanceLayer.js.map +1 -1
  7. package/dist/affordances/cornerResize.js +3 -2
  8. package/dist/affordances/cornerResize.js.map +1 -1
  9. package/dist/affordances/hitAffordanceRegions.js +71 -101
  10. package/dist/affordances/hitAffordanceRegions.js.map +1 -1
  11. package/dist/affordances/pathAnchors.js +50 -28
  12. package/dist/affordances/pathAnchors.js.map +1 -1
  13. package/dist/affordances/rotateCursor.js +12 -0
  14. package/dist/affordances/rotateCursor.js.map +1 -0
  15. package/dist/affordances/rotationHandle.js +44 -46
  16. package/dist/affordances/rotationHandle.js.map +1 -1
  17. package/dist/animation/behaviors/coast.js +21 -0
  18. package/dist/animation/behaviors/coast.js.map +1 -0
  19. package/dist/animation/behaviors/coastByWrite.js +107 -0
  20. package/dist/animation/behaviors/coastByWrite.js.map +1 -0
  21. package/dist/animation/behaviors/coastOnTargets.js +94 -0
  22. package/dist/animation/behaviors/coastOnTargets.js.map +1 -0
  23. package/dist/animation/behaviors/momentum.js +48 -136
  24. package/dist/animation/behaviors/momentum.js.map +1 -1
  25. package/dist/animation/clipTargets.js +12 -0
  26. package/dist/animation/clipTargets.js.map +1 -0
  27. package/dist/animation/index.js +15 -20
  28. package/dist/animation/poseHelpers.js +112 -33
  29. package/dist/animation/poseHelpers.js.map +1 -1
  30. package/dist/animation/poseTarget.js +115 -0
  31. package/dist/animation/poseTarget.js.map +1 -0
  32. package/dist/animation/reflow.js +113 -83
  33. package/dist/animation/reflow.js.map +1 -1
  34. package/dist/animation/rewind.js +66 -0
  35. package/dist/animation/rewind.js.map +1 -0
  36. package/dist/animation/rig/bindRig.js +85 -53
  37. package/dist/animation/rig/bindRig.js.map +1 -1
  38. package/dist/animation/rig/rigNode.js +99 -0
  39. package/dist/animation/rig/rigNode.js.map +1 -0
  40. package/dist/animation/rig/rigSeat.js +59 -0
  41. package/dist/animation/rig/rigSeat.js.map +1 -0
  42. package/dist/animation/rig/skinBinding.js +64 -0
  43. package/dist/animation/rig/skinBinding.js.map +1 -0
  44. package/dist/animation/rig/useRig.js +31 -16
  45. package/dist/animation/rig/useRig.js.map +1 -1
  46. package/dist/animation/wrappers/animateLifecycle.js +8 -7
  47. package/dist/animation/wrappers/animateLifecycle.js.map +1 -1
  48. package/dist/animation/wrappers/animateOnSetPose.js +31 -31
  49. package/dist/animation/wrappers/animateOnSetPose.js.map +1 -1
  50. package/dist/animation/wrappers/instantPose.js.map +1 -1
  51. package/dist/animation/writtenPoseTarget.js +33 -0
  52. package/dist/animation/writtenPoseTarget.js.map +1 -0
  53. package/dist/autoPoseDescriptor-DHg5KqaJ.d.ts +27 -0
  54. package/dist/barrel/canvas.js +32 -0
  55. package/dist/barrel/chrome.js +10 -10
  56. package/dist/barrel/input.js +16 -17
  57. package/dist/barrel/interactions.js +34 -37
  58. package/dist/barrel/paint.js +11 -18
  59. package/dist/barrel/paths.js +13 -19
  60. package/dist/barrel/renderer.js +14 -20
  61. package/dist/barrel/routing.js +54 -47
  62. package/dist/barrel/scene.js +37 -0
  63. package/dist/barrel/text.js +9 -18
  64. package/dist/barrel/viewport.js +44 -51
  65. package/dist/canvas/Canvas.js +270 -475
  66. package/dist/canvas/Canvas.js.map +1 -1
  67. package/dist/canvas/CanvasView.js +168 -190
  68. package/dist/canvas/CanvasView.js.map +1 -1
  69. package/dist/canvas/CursorCoordsHud.js +24 -25
  70. package/dist/canvas/CursorCoordsHud.js.map +1 -1
  71. package/dist/canvas/DrawCanvas.js +39 -56
  72. package/dist/canvas/DrawCanvas.js.map +1 -1
  73. package/dist/canvas/ModalityHud.js.map +1 -1
  74. package/dist/canvas/NodeShape.js +28 -29
  75. package/dist/canvas/NodeShape.js.map +1 -1
  76. package/dist/canvas/PickHud.js.map +1 -1
  77. package/dist/canvas/SceneCanvas/DevHuds.js +40 -0
  78. package/dist/canvas/SceneCanvas/DevHuds.js.map +1 -0
  79. package/dist/canvas/SceneCanvas/GestureDispatcherMounter.js +66 -107
  80. package/dist/canvas/SceneCanvas/GestureDispatcherMounter.js.map +1 -1
  81. package/dist/canvas/SceneCanvas/PointerProviderIfRoot.js +33 -36
  82. package/dist/canvas/SceneCanvas/PointerProviderIfRoot.js.map +1 -1
  83. package/dist/canvas/SceneCanvas/StandardActionsRegistrar.js +38 -50
  84. package/dist/canvas/SceneCanvas/StandardActionsRegistrar.js.map +1 -1
  85. package/dist/canvas/SceneCanvas/ToolKeybindingsMounter.js +3 -3
  86. package/dist/canvas/SceneCanvas/ToolKeybindingsMounter.js.map +1 -1
  87. package/dist/canvas/SceneCanvas/coordTrace.js +37 -1
  88. package/dist/canvas/SceneCanvas/coordTrace.js.map +1 -1
  89. package/dist/canvas/SceneCanvas/defaultNodeProperties.js +319 -270
  90. package/dist/canvas/SceneCanvas/defaultNodeProperties.js.map +1 -1
  91. package/dist/canvas/SceneCanvas/defaultNodeRouting.js +1 -1
  92. package/dist/canvas/SceneCanvas/defaultNodeRouting.js.map +1 -1
  93. package/dist/canvas/SceneCanvas/dispatcherGestureBounds.js.map +1 -1
  94. package/dist/canvas/SceneCanvas/features.js +71 -62
  95. package/dist/canvas/SceneCanvas/features.js.map +1 -1
  96. package/dist/canvas/SceneCanvas/insertPreviewCommands.js +97 -0
  97. package/dist/canvas/SceneCanvas/insertPreviewCommands.js.map +1 -0
  98. package/dist/canvas/SceneCanvas/isDev.js.map +1 -1
  99. package/dist/canvas/SceneCanvas/poseGeometry.js +33 -37
  100. package/dist/canvas/SceneCanvas/poseGeometry.js.map +1 -1
  101. package/dist/canvas/SceneCanvas/props.js +15 -14
  102. package/dist/canvas/SceneCanvas/props.js.map +1 -1
  103. package/dist/canvas/SceneCanvas/scenePointQuery.js +50 -0
  104. package/dist/canvas/SceneCanvas/scenePointQuery.js.map +1 -0
  105. package/dist/canvas/SceneCanvas/shapeGeneratorProperties.js +52 -0
  106. package/dist/canvas/SceneCanvas/shapeGeneratorProperties.js.map +1 -0
  107. package/dist/canvas/SceneCanvas/toolRegistry.js +23 -0
  108. package/dist/canvas/SceneCanvas/toolRegistry.js.map +1 -0
  109. package/dist/canvas/SceneCanvas/useActionTunings.js +17 -0
  110. package/dist/canvas/SceneCanvas/useActionTunings.js.map +1 -0
  111. package/dist/canvas/SceneCanvas/useActionsPropResolver.js +6 -1
  112. package/dist/canvas/SceneCanvas/useActionsPropResolver.js.map +1 -1
  113. package/dist/canvas/SceneCanvas/useBuiltinShapeTools.js.map +1 -1
  114. package/dist/canvas/SceneCanvas/useBuiltinTools.js +21 -0
  115. package/dist/canvas/SceneCanvas/useBuiltinTools.js.map +1 -0
  116. package/dist/canvas/SceneCanvas/useCanvasCamera.js +46 -0
  117. package/dist/canvas/SceneCanvas/useCanvasCamera.js.map +1 -0
  118. package/dist/canvas/SceneCanvas/useCanvasDispatcher.js +20 -0
  119. package/dist/canvas/SceneCanvas/useCanvasDispatcher.js.map +1 -0
  120. package/dist/canvas/SceneCanvas/useCanvasSelection.js +16 -0
  121. package/dist/canvas/SceneCanvas/useCanvasSelection.js.map +1 -0
  122. package/dist/canvas/SceneCanvas/useCanvasTools.js +67 -0
  123. package/dist/canvas/SceneCanvas/useCanvasTools.js.map +1 -0
  124. package/dist/canvas/SceneCanvas/useDispatcherOverlayLayer.js +49 -113
  125. package/dist/canvas/SceneCanvas/useDispatcherOverlayLayer.js.map +1 -1
  126. package/dist/canvas/SceneCanvas/useHeldModifiers.js +20 -0
  127. package/dist/canvas/SceneCanvas/useHeldModifiers.js.map +1 -0
  128. package/dist/canvas/SceneCanvas/useNodeAtPoint.js +26 -0
  129. package/dist/canvas/SceneCanvas/useNodeAtPoint.js.map +1 -0
  130. package/dist/canvas/SceneCanvas/useNodeKinds.js +26 -0
  131. package/dist/canvas/SceneCanvas/useNodeKinds.js.map +1 -0
  132. package/dist/canvas/SceneCanvas/usePreviewGhostLayer.js +51 -41
  133. package/dist/canvas/SceneCanvas/usePreviewGhostLayer.js.map +1 -1
  134. package/dist/canvas/SceneCanvas/useSceneCanvasHandle.js +47 -0
  135. package/dist/canvas/SceneCanvas/useSceneCanvasHandle.js.map +1 -0
  136. package/dist/canvas/SceneCanvas/useSceneCanvasLayers.js +66 -0
  137. package/dist/canvas/SceneCanvas/useSceneCanvasLayers.js.map +1 -0
  138. package/dist/canvas/SceneCanvas/useSceneChrome.js +59 -0
  139. package/dist/canvas/SceneCanvas/useSceneChrome.js.map +1 -0
  140. package/dist/canvas/SceneCanvas/useSceneRedrawSources.js +23 -0
  141. package/dist/canvas/SceneCanvas/useSceneRedrawSources.js.map +1 -0
  142. package/dist/canvas/SceneCanvas/useSceneSelectTool.js +65 -101
  143. package/dist/canvas/SceneCanvas/useSceneSelectTool.js.map +1 -1
  144. package/dist/canvas/SceneCanvas/useSceneSlotLayers.js +37 -0
  145. package/dist/canvas/SceneCanvas/useSceneSlotLayers.js.map +1 -0
  146. package/dist/canvas/SceneCanvas/useSelectionOverlayLayer.js +38 -0
  147. package/dist/canvas/SceneCanvas/useSelectionOverlayLayer.js.map +1 -0
  148. package/dist/canvas/SceneCanvas/useViewLayerGate.js +20 -0
  149. package/dist/canvas/SceneCanvas/useViewLayerGate.js.map +1 -0
  150. package/dist/canvas/SceneCanvas/useViewportActions.js +9 -1
  151. package/dist/canvas/SceneCanvas/useViewportActions.js.map +1 -1
  152. package/dist/canvas/SceneCanvas/worldPointAt.js +8 -0
  153. package/dist/canvas/SceneCanvas/worldPointAt.js.map +1 -0
  154. package/dist/canvas/SceneCanvas.js +301 -708
  155. package/dist/canvas/SceneCanvas.js.map +1 -1
  156. package/dist/canvas/SceneViewCanvas.js +41 -47
  157. package/dist/canvas/SceneViewCanvas.js.map +1 -1
  158. package/dist/canvas/SurfaceCanvas.js +40 -0
  159. package/dist/canvas/SurfaceCanvas.js.map +1 -0
  160. package/dist/canvas/adapterDerivedPath.js +26 -0
  161. package/dist/canvas/adapterDerivedPath.js.map +1 -0
  162. package/dist/canvas/adapterPickSource.js +34 -0
  163. package/dist/canvas/adapterPickSource.js.map +1 -0
  164. package/dist/canvas/affordanceAt.js +12 -2
  165. package/dist/canvas/affordanceAt.js.map +1 -1
  166. package/dist/canvas/buildSceneLayer.js +81 -61
  167. package/dist/canvas/buildSceneLayer.js.map +1 -1
  168. package/dist/canvas/buildSceneTree.js +56 -34
  169. package/dist/canvas/buildSceneTree.js.map +1 -1
  170. package/dist/canvas/canvasRenderer.js +40 -44
  171. package/dist/canvas/canvasRenderer.js.map +1 -1
  172. package/dist/canvas/colorOverrides.js.map +1 -1
  173. package/dist/canvas/copiesAbove.js +27 -0
  174. package/dist/canvas/copiesAbove.js.map +1 -0
  175. package/dist/canvas/defaultDrawOne.js +25 -24
  176. package/dist/canvas/defaultDrawOne.js.map +1 -1
  177. package/dist/canvas/deps/areaSelect.js +4 -4
  178. package/dist/canvas/deps/areaSelect.js.map +1 -1
  179. package/dist/canvas/deps/debug.js.map +1 -1
  180. package/dist/canvas/deps/editAnchors.js +47 -71
  181. package/dist/canvas/deps/editAnchors.js.map +1 -1
  182. package/dist/canvas/deps/geometryProjection.js.map +1 -1
  183. package/dist/canvas/deps/hitTestArea.js +45 -25
  184. package/dist/canvas/deps/hitTestArea.js.map +1 -1
  185. package/dist/canvas/deps/insert.js +149 -104
  186. package/dist/canvas/deps/insert.js.map +1 -1
  187. package/dist/canvas/deps/lassoSelect.js +5 -5
  188. package/dist/canvas/deps/lassoSelect.js.map +1 -1
  189. package/dist/canvas/deps/layout.js +9 -15
  190. package/dist/canvas/deps/layout.js.map +1 -1
  191. package/dist/canvas/deps/poseDescriptor.js +1 -1
  192. package/dist/canvas/deps/poseDescriptor.js.map +1 -1
  193. package/dist/canvas/deps/resizePolicy.js.map +1 -1
  194. package/dist/canvas/deps/slice.js +44 -45
  195. package/dist/canvas/deps/slice.js.map +1 -1
  196. package/dist/canvas/deps/textEdit.js +8 -8
  197. package/dist/canvas/deps/textEdit.js.map +1 -1
  198. package/dist/canvas/deps/view.js.map +1 -1
  199. package/dist/canvas/derivedPath.js +69 -43
  200. package/dist/canvas/derivedPath.js.map +1 -1
  201. package/dist/canvas/drawEnvelope.js +8 -4
  202. package/dist/canvas/drawEnvelope.js.map +1 -1
  203. package/dist/canvas/getNodeAtPoint.js +2 -6
  204. package/dist/canvas/getNodeAtPoint.js.map +1 -1
  205. package/dist/canvas/hud.module.js.map +1 -1
  206. package/dist/canvas/insertPreviewExtent.js +33 -31
  207. package/dist/canvas/insertPreviewExtent.js.map +1 -1
  208. package/dist/canvas/layerOrder.js.map +1 -1
  209. package/dist/canvas/layerSlots.js +6 -1
  210. package/dist/canvas/layerSlots.js.map +1 -1
  211. package/dist/canvas/nodeShapes/derivedPainter.js +12 -12
  212. package/dist/canvas/nodeShapes/derivedPainter.js.map +1 -1
  213. package/dist/canvas/nodeShapes/imagePainter.js +10 -10
  214. package/dist/canvas/nodeShapes/imagePainter.js.map +1 -1
  215. package/dist/canvas/nodeShapes/memo.js.map +1 -1
  216. package/dist/canvas/nodeShapes/nodePaint.js +34 -23
  217. package/dist/canvas/nodeShapes/nodePaint.js.map +1 -1
  218. package/dist/canvas/nodeShapes/pathPainter.js +23 -22
  219. package/dist/canvas/nodeShapes/pathPainter.js.map +1 -1
  220. package/dist/canvas/nodeShapes/poseBox.js +6 -6
  221. package/dist/canvas/nodeShapes/poseBox.js.map +1 -1
  222. package/dist/canvas/nodeShapes/rectFallbackPainter.js +8 -8
  223. package/dist/canvas/nodeShapes/rectFallbackPainter.js.map +1 -1
  224. package/dist/canvas/nodeShapes/shapePainter.js +16 -16
  225. package/dist/canvas/nodeShapes/shapePainter.js.map +1 -1
  226. package/dist/canvas/nodeShapes/textPainter.js +1 -1
  227. package/dist/canvas/nodeShapes/textPainter.js.map +1 -1
  228. package/dist/canvas/overChildren.js +29 -0
  229. package/dist/canvas/overChildren.js.map +1 -0
  230. package/dist/canvas/overlayRoleStrokes.js.map +1 -1
  231. package/dist/canvas/paintCull.js +6 -8
  232. package/dist/canvas/paintCull.js.map +1 -1
  233. package/dist/{features/cursor → canvas}/paintedCursorLayer.js +2 -2
  234. package/dist/canvas/paintedCursorLayer.js.map +1 -0
  235. package/dist/canvas/pickReach.js +23 -0
  236. package/dist/canvas/pickReach.js.map +1 -0
  237. package/dist/canvas/pickWalk.js +43 -70
  238. package/dist/canvas/pickWalk.js.map +1 -1
  239. package/dist/canvas/planeClips.js +18 -19
  240. package/dist/canvas/planeClips.js.map +1 -1
  241. package/dist/canvas/poseCascade.js +41 -0
  242. package/dist/canvas/poseCascade.js.map +1 -0
  243. package/dist/canvas/poseRotation.js +1 -3
  244. package/dist/canvas/poseRotation.js.map +1 -1
  245. package/dist/canvas/rasterReadback.js +22 -0
  246. package/dist/canvas/rasterReadback.js.map +1 -0
  247. package/dist/canvas/renderDebugSnapshot.js +12 -12
  248. package/dist/canvas/renderDebugSnapshot.js.map +1 -1
  249. package/dist/canvas/renderNeeds.js +3 -3
  250. package/dist/canvas/renderNeeds.js.map +1 -1
  251. package/dist/canvas/renderSceneToPixels.js +64 -83
  252. package/dist/canvas/renderSceneToPixels.js.map +1 -1
  253. package/dist/canvas/sceneAdapter.js +59 -144
  254. package/dist/canvas/sceneAdapter.js.map +1 -1
  255. package/dist/canvas/sceneClipboard.js +1 -1
  256. package/dist/canvas/sceneClipboard.js.map +1 -1
  257. package/dist/canvas/sceneLayerPaint.js +4 -4
  258. package/dist/canvas/sceneLayerPaint.js.map +1 -1
  259. package/dist/canvas/sceneSlotWiring.js +10 -9
  260. package/dist/canvas/sceneSlotWiring.js.map +1 -1
  261. package/dist/canvas/sceneViewRender.js +37 -42
  262. package/dist/canvas/sceneViewRender.js.map +1 -1
  263. package/dist/canvas/slopsDebugLayer.js +4 -4
  264. package/dist/canvas/slopsDebugLayer.js.map +1 -1
  265. package/dist/canvas/useCanvasRenderer.js +23 -11
  266. package/dist/canvas/useCanvasRenderer.js.map +1 -1
  267. package/dist/canvas/useCanvasSurface.js +31 -0
  268. package/dist/canvas/useCanvasSurface.js.map +1 -0
  269. package/dist/canvas/useCanvasView.js +51 -44
  270. package/dist/canvas/useCanvasView.js.map +1 -1
  271. package/dist/canvas/useFrameLoop.js +11 -12
  272. package/dist/canvas/useFrameLoop.js.map +1 -1
  273. package/dist/canvas/useHostAnchor.js +35 -33
  274. package/dist/canvas/useHostAnchor.js.map +1 -1
  275. package/dist/canvas/useLateContentRedraw.js +8 -8
  276. package/dist/canvas/useLateContentRedraw.js.map +1 -1
  277. package/dist/canvas/useSceneAdapter.js +22 -0
  278. package/dist/canvas/useSceneAdapter.js.map +1 -0
  279. package/dist/canvas/useSceneLayerList.js +4 -14
  280. package/dist/canvas/useSceneLayerList.js.map +1 -1
  281. package/dist/canvas/useSurfaceInput.js +39 -0
  282. package/dist/canvas/useSurfaceInput.js.map +1 -0
  283. package/dist/canvas/useToolCursor.js +29 -0
  284. package/dist/canvas/useToolCursor.js.map +1 -0
  285. package/dist/canvas/useViewHelpers.js +46 -85
  286. package/dist/canvas/useViewHelpers.js.map +1 -1
  287. package/dist/canvas/viewInputs.js.map +1 -1
  288. package/dist/canvas/viewRegistry.js +40 -34
  289. package/dist/canvas/viewRegistry.js.map +1 -1
  290. package/dist/canvas/watchElementMove.js +43 -0
  291. package/dist/canvas/watchElementMove.js.map +1 -0
  292. package/dist/canvas/wrapNodeOutput.js +7 -2
  293. package/dist/canvas/wrapNodeOutput.js.map +1 -1
  294. package/dist/clipboard.d.ts +7 -14
  295. package/dist/{types-B4iJRHC3.d.ts → clone-C0eADtS0.d.ts} +129 -84
  296. package/dist/clone.d.ts +4 -8
  297. package/dist/clone.js +0 -2
  298. package/dist/core/device/targets.js.map +1 -1
  299. package/dist/core/device/useDeviceProfile.js +13 -13
  300. package/dist/core/device/useDeviceProfile.js.map +1 -1
  301. package/dist/{interactions/actions/resize → core/geometry}/autoPoseDescriptor.js +8 -7
  302. package/dist/core/geometry/autoPoseDescriptor.js.map +1 -0
  303. package/dist/core/geometry/pathPoseDescriptor.js +88 -0
  304. package/dist/core/geometry/pathPoseDescriptor.js.map +1 -0
  305. package/dist/core/geometry/poseDescriptor.js +102 -29
  306. package/dist/core/geometry/poseDescriptor.js.map +1 -1
  307. package/dist/core/geometry/regionHit.js +35 -37
  308. package/dist/core/geometry/regionHit.js.map +1 -1
  309. package/dist/core/geometry/targetFrame.js +94 -0
  310. package/dist/core/geometry/targetFrame.js.map +1 -0
  311. package/dist/core/geometry/unionBounds.js +4 -5
  312. package/dist/core/geometry/unionBounds.js.map +1 -1
  313. package/dist/core/layers/backgroundFill.js +31 -0
  314. package/dist/core/layers/backgroundFill.js.map +1 -0
  315. package/dist/{features/groups → core/layers}/children.js +2 -4
  316. package/dist/core/layers/children.js.map +1 -0
  317. package/dist/{features/focus → core/layers}/gateLayer.js +2 -2
  318. package/dist/core/layers/gateLayer.js.map +1 -0
  319. package/dist/core/layers/layerGroup.js +40 -0
  320. package/dist/core/layers/layerGroup.js.map +1 -0
  321. package/dist/core/layers/render.js +50 -76
  322. package/dist/core/layers/render.js.map +1 -1
  323. package/dist/core/ops/create.js +2 -2
  324. package/dist/core/ops/create.js.map +1 -1
  325. package/dist/core/ops/createHistory.js +9 -9
  326. package/dist/core/ops/createHistory.js.map +1 -1
  327. package/dist/core/ops/delete.js +19 -23
  328. package/dist/core/ops/delete.js.map +1 -1
  329. package/dist/core/ops/reorder/index.js +3 -7
  330. package/dist/core/ops/reorder/index.js.map +1 -1
  331. package/dist/core/ops/reorder/setChildOrder.js +2 -4
  332. package/dist/core/ops/reorder/setChildOrder.js.map +1 -1
  333. package/dist/core/ops/reparent.js +0 -1
  334. package/dist/core/ops/reparent.js.map +1 -1
  335. package/dist/core/ops/slot.js +3 -6
  336. package/dist/core/ops/slot.js.map +1 -1
  337. package/dist/core/pages/fitViewToPage.js +15 -0
  338. package/dist/core/pages/fitViewToPage.js.map +1 -0
  339. package/dist/core/pages/pages.js +65 -0
  340. package/dist/core/pages/pages.js.map +1 -0
  341. package/dist/core/pages/pagesLayer.js +27 -0
  342. package/dist/core/pages/pagesLayer.js.map +1 -0
  343. package/dist/core/paint/meshKind.js +16 -0
  344. package/dist/core/paint/meshKind.js.map +1 -0
  345. package/dist/{features/meshPaint/lazyKind.js → core/paint/meshKindLazy.js} +104 -93
  346. package/dist/core/paint/meshKindLazy.js.map +1 -0
  347. package/dist/core/paint/paintKindEntry.js +8 -0
  348. package/dist/core/paint/paintKindEntry.js.map +1 -0
  349. package/dist/core/paint/paintKinds.js +144 -0
  350. package/dist/core/paint/paintKinds.js.map +1 -0
  351. package/dist/core/paint/registerMesh.js +7 -0
  352. package/dist/core/paint/registerMesh.js.map +1 -0
  353. package/dist/core/scene/NodeProperties.js.map +1 -1
  354. package/dist/core/scene/NodeRouting.js.map +1 -1
  355. package/dist/core/scene/arrivalWindow.js +65 -64
  356. package/dist/core/scene/arrivalWindow.js.map +1 -1
  357. package/dist/core/scene/boundOps.js +40 -0
  358. package/dist/core/scene/boundOps.js.map +1 -0
  359. package/dist/core/scene/composeFrame.js +9 -6
  360. package/dist/core/scene/composeFrame.js.map +1 -1
  361. package/dist/core/scene/composePose.js +105 -0
  362. package/dist/core/scene/composePose.js.map +1 -0
  363. package/dist/core/scene/depMemo.js +31 -6
  364. package/dist/core/scene/depMemo.js.map +1 -1
  365. package/dist/core/scene/derivedPath.js +19 -20
  366. package/dist/core/scene/derivedPath.js.map +1 -1
  367. package/dist/core/scene/editMode.js +26 -0
  368. package/dist/core/scene/editMode.js.map +1 -0
  369. package/dist/core/scene/effectivePose.js +42 -39
  370. package/dist/core/scene/effectivePose.js.map +1 -1
  371. package/dist/core/scene/fieldEdits.js +98 -0
  372. package/dist/core/scene/fieldEdits.js.map +1 -0
  373. package/dist/core/scene/historyFacade.js +122 -70
  374. package/dist/core/scene/historyFacade.js.map +1 -1
  375. package/dist/core/scene/historyForm.js +6 -0
  376. package/dist/core/scene/historyForm.js.map +1 -0
  377. package/dist/core/scene/kitOps.js +83 -71
  378. package/dist/core/scene/kitOps.js.map +1 -1
  379. package/dist/core/scene/kitRegistry.js.map +1 -1
  380. package/dist/core/scene/layerStack.js +105 -12
  381. package/dist/core/scene/layerStack.js.map +1 -1
  382. package/dist/core/scene/layoutPass.js +58 -59
  383. package/dist/core/scene/layoutPass.js.map +1 -1
  384. package/dist/{features/groups → core/scene}/nestedHit.js +3 -3
  385. package/dist/core/scene/nestedHit.js.map +1 -0
  386. package/dist/core/scene/nodeFnFields.js +16 -9
  387. package/dist/core/scene/nodeFnFields.js.map +1 -1
  388. package/dist/core/scene/nodeMemo.js.map +1 -1
  389. package/dist/core/scene/nodeStore.js +72 -71
  390. package/dist/core/scene/nodeStore.js.map +1 -1
  391. package/dist/core/scene/notifier.js +37 -0
  392. package/dist/core/scene/notifier.js.map +1 -0
  393. package/dist/core/scene/opTable.js +50 -0
  394. package/dist/core/scene/opTable.js.map +1 -0
  395. package/dist/core/scene/outerOps.js +67 -0
  396. package/dist/core/scene/outerOps.js.map +1 -0
  397. package/dist/core/scene/poseHold.js +39 -0
  398. package/dist/core/scene/poseHold.js.map +1 -0
  399. package/dist/core/scene/poseOverrides.js +44 -36
  400. package/dist/core/scene/poseOverrides.js.map +1 -1
  401. package/dist/core/scene/poseSnapshot.js.map +1 -1
  402. package/dist/core/scene/reconcileSpecs.js +4 -3
  403. package/dist/core/scene/reconcileSpecs.js.map +1 -1
  404. package/dist/core/scene/recorder.js +86 -0
  405. package/dist/core/scene/recorder.js.map +1 -0
  406. package/dist/core/scene/renderOrder.js.map +1 -1
  407. package/dist/core/scene/scene.js +81 -690
  408. package/dist/core/scene/scene.js.map +1 -1
  409. package/dist/core/scene/sceneEdits.js +58 -0
  410. package/dist/core/scene/sceneEdits.js.map +1 -0
  411. package/dist/core/scene/sceneMutators.js +49 -0
  412. package/dist/core/scene/sceneMutators.js.map +1 -0
  413. package/dist/core/scene/scenePoseAdapter.js +16 -0
  414. package/dist/core/scene/scenePoseAdapter.js.map +1 -0
  415. package/dist/core/scene/sceneRecording.js +91 -0
  416. package/dist/core/scene/sceneRecording.js.map +1 -0
  417. package/dist/core/scene/sceneSelection.js +28 -0
  418. package/dist/core/scene/sceneSelection.js.map +1 -0
  419. package/dist/core/scene/sceneState.js +49 -0
  420. package/dist/core/scene/sceneState.js.map +1 -0
  421. package/dist/core/scene/serialization.js +8 -5
  422. package/dist/core/scene/serialization.js.map +1 -1
  423. package/dist/core/scene/staleReplay.js +51 -0
  424. package/dist/core/scene/staleReplay.js.map +1 -0
  425. package/dist/core/scene/statedFields.js +9 -0
  426. package/dist/core/scene/statedFields.js.map +1 -0
  427. package/dist/core/scene/treeEdits.js +127 -0
  428. package/dist/core/scene/treeEdits.js.map +1 -0
  429. package/dist/core/scene/treeReads.js +26 -0
  430. package/dist/core/scene/treeReads.js.map +1 -0
  431. package/dist/core/scene/types.js.map +1 -1
  432. package/dist/{features/groups → core/scene}/unionOfChildren.js +3 -3
  433. package/dist/core/scene/unionOfChildren.js.map +1 -0
  434. package/dist/core/scene/unitScopes.js +13 -0
  435. package/dist/core/scene/unitScopes.js.map +1 -0
  436. package/dist/core/scene/useScene.js.map +1 -1
  437. package/dist/core/selection/readOnlySelection.js +32 -0
  438. package/dist/core/selection/readOnlySelection.js.map +1 -0
  439. package/dist/core/selection/usePublishSceneSelection.js +26 -0
  440. package/dist/core/selection/usePublishSceneSelection.js.map +1 -0
  441. package/dist/core/selection/useSelection.js +34 -25
  442. package/dist/core/selection/useSelection.js.map +1 -1
  443. package/dist/core/shapeKinds.js.map +1 -1
  444. package/dist/core/stylus/stylus.js.map +1 -1
  445. package/dist/core/stylus/usePointerStylus.js.map +1 -1
  446. package/dist/core/usePaintKinds.js +1 -1
  447. package/dist/core/usePaintKinds.js.map +1 -1
  448. package/dist/core/viewport/clientToWorld.js.map +1 -1
  449. package/dist/core/viewport/fitViewToBounds.js.map +1 -1
  450. package/dist/core/viewport/parallax.js.map +1 -1
  451. package/dist/core/viewport/screenSlop.js +11 -11
  452. package/dist/core/viewport/screenSlop.js.map +1 -1
  453. package/dist/core/viewport/useCanvasSize.js.map +1 -1
  454. package/dist/core/viewport/useDecayLoop.js +31 -33
  455. package/dist/core/viewport/useDecayLoop.js.map +1 -1
  456. package/dist/core/viewport/useNodeOverlayFrame.js +84 -0
  457. package/dist/core/viewport/useNodeOverlayFrame.js.map +1 -0
  458. package/dist/core/viewport/useViewAnimation.js +113 -53
  459. package/dist/core/viewport/useViewAnimation.js.map +1 -1
  460. package/dist/core/viewport/view.js +14 -11
  461. package/dist/core/viewport/view.js.map +1 -1
  462. package/dist/core/viewport/wheelHandler.js.map +1 -1
  463. package/dist/core/viewport/zoomAt.js +11 -2
  464. package/dist/core/viewport/zoomAt.js.map +1 -1
  465. package/dist/{cornerHandles-CtCb8a3G.d.ts → cornerHandles-BSKbyuvQ.d.ts} +11 -24
  466. package/dist/debug/createDebugOverlayLayer.js +100 -100
  467. package/dist/debug/createDebugOverlayLayer.js.map +1 -1
  468. package/dist/debug/createDebugSink.js.map +1 -1
  469. package/dist/debug/frameStats.js.map +1 -1
  470. package/dist/debug/useDebugSink.js +52 -0
  471. package/dist/debug/useDebugSink.js.map +1 -0
  472. package/dist/features/chrome-caps/buildChromeCtx.js.map +1 -1
  473. package/dist/features/chrome-caps/conditions.js.map +1 -1
  474. package/dist/features/chrome-caps/defaults.js.map +1 -1
  475. package/dist/features/chrome-caps/resolve.js.map +1 -1
  476. package/dist/features/chrome-caps/useChromeCaps.js +54 -0
  477. package/dist/features/chrome-caps/useChromeCaps.js.map +1 -0
  478. package/dist/features/chrome-caps/useHoverTracking.js.map +1 -1
  479. package/dist/features/ingestion/contentHandlers.js +25 -19
  480. package/dist/features/ingestion/contentHandlers.js.map +1 -1
  481. package/dist/features/ingestion/imageHandler.js +21 -24
  482. package/dist/features/ingestion/imageHandler.js.map +1 -1
  483. package/dist/features/ingestion/openFilePicker.js.map +1 -1
  484. package/dist/features/ingestion/placement.js +16 -0
  485. package/dist/features/ingestion/placement.js.map +1 -0
  486. package/dist/features/ingestion/svgHandler.js +5 -0
  487. package/dist/features/ingestion/svgHandler.js.map +1 -1
  488. package/dist/features/ingestion/textHandler.js +28 -0
  489. package/dist/features/ingestion/textHandler.js.map +1 -0
  490. package/dist/features/ingestion/useCanvasIngestion.js +48 -0
  491. package/dist/features/ingestion/useCanvasIngestion.js.map +1 -0
  492. package/dist/features/ingestion/weaselJsonHandler.js +5 -0
  493. package/dist/features/ingestion/weaselJsonHandler.js.map +1 -1
  494. package/dist/features/longPress/longPressFeedback.js.map +1 -1
  495. package/dist/features/modes/modeLayers.js +7 -7
  496. package/dist/features/modes/modeLayers.js.map +1 -1
  497. package/dist/features/paths/editablePath.js +63 -0
  498. package/dist/features/paths/editablePath.js.map +1 -0
  499. package/dist/features/paths/index.js +9 -16
  500. package/dist/features/paths/pathEditState.js +41 -0
  501. package/dist/features/paths/pathEditState.js.map +1 -0
  502. package/dist/features/paths/pathEditingOverlayLayer.js +36 -38
  503. package/dist/features/paths/pathEditingOverlayLayer.js.map +1 -1
  504. package/dist/features/paths/pathLayer.js +3 -2
  505. package/dist/features/paths/pathLayer.js.map +1 -1
  506. package/dist/features/paths/penPreviewLayer.js +86 -88
  507. package/dist/features/paths/penPreviewLayer.js.map +1 -1
  508. package/dist/features/paths/shapeGenerator.js +89 -0
  509. package/dist/features/paths/shapeGenerator.js.map +1 -0
  510. package/dist/features/paths/usePathEdit.js +34 -0
  511. package/dist/features/paths/usePathEdit.js.map +1 -0
  512. package/dist/features/poseRun/usePoseRun.js +44 -57
  513. package/dist/features/poseRun/usePoseRun.js.map +1 -1
  514. package/dist/features/selection/overlay.js +170 -178
  515. package/dist/features/selection/overlay.js.map +1 -1
  516. package/dist/features/text/index.js +6 -0
  517. package/dist/features/text/textLayer.js +1 -1
  518. package/dist/features/text/textLayer.js.map +1 -1
  519. package/dist/features/text/useSceneTextEdit.js +119 -88
  520. package/dist/features/text/useSceneTextEdit.js.map +1 -1
  521. package/dist/features/viewports/viewResolver.js +28 -24
  522. package/dist/features/viewports/viewResolver.js.map +1 -1
  523. package/dist/features/viewports/viewportLayer.js +25 -36
  524. package/dist/features/viewports/viewportLayer.js.map +1 -1
  525. package/dist/icons/SliceIcon.js +24 -0
  526. package/dist/icons/SliceIcon.js.map +1 -0
  527. package/dist/index.d.ts +5200 -8777
  528. package/dist/index.js +284 -320
  529. package/dist/input/keyState.js +14 -14
  530. package/dist/interactions/actions/actionShortcuts.js.map +1 -1
  531. package/dist/interactions/actions/{defaults/align.js → align/action.js} +15 -16
  532. package/dist/interactions/actions/align/action.js.map +1 -0
  533. package/dist/interactions/actions/align/align.js +24 -24
  534. package/dist/interactions/actions/align/align.js.map +1 -1
  535. package/dist/interactions/actions/booleans/action.js +65 -0
  536. package/dist/interactions/actions/booleans/action.js.map +1 -0
  537. package/dist/interactions/actions/booleans/booleans.js +74 -83
  538. package/dist/interactions/actions/booleans/booleans.js.map +1 -1
  539. package/dist/interactions/actions/booleans/operands.js +40 -0
  540. package/dist/interactions/actions/booleans/operands.js.map +1 -0
  541. package/dist/interactions/actions/booleans/pieces.js +45 -0
  542. package/dist/interactions/actions/booleans/pieces.js.map +1 -0
  543. package/dist/interactions/actions/booleans/placement.js +24 -0
  544. package/dist/interactions/actions/booleans/placement.js.map +1 -0
  545. package/dist/interactions/actions/booleans/useBooleans.js +11 -9
  546. package/dist/interactions/actions/booleans/useBooleans.js.map +1 -1
  547. package/dist/interactions/actions/booleans/useBooleansAdapter.js.map +1 -1
  548. package/dist/interactions/actions/{defaults/clipboard.js → clipboard/action.js} +19 -19
  549. package/dist/interactions/actions/clipboard/action.js.map +1 -0
  550. package/dist/interactions/actions/clipboard/clipboardOps.js +15 -15
  551. package/dist/interactions/actions/clipboard/clipboardOps.js.map +1 -1
  552. package/dist/interactions/actions/clipboard/wireFormat.js.map +1 -1
  553. package/dist/interactions/actions/clone/action.js +103 -0
  554. package/dist/interactions/actions/clone/action.js.map +1 -0
  555. package/dist/interactions/actions/clone/behaviors.js +52 -0
  556. package/dist/interactions/actions/clone/behaviors.js.map +1 -0
  557. package/dist/interactions/actions/defaultCommitAdapter.js +10 -37
  558. package/dist/interactions/actions/defaultCommitAdapter.js.map +1 -1
  559. package/dist/interactions/actions/defaults/anchorEditing.js +69 -74
  560. package/dist/interactions/actions/defaults/anchorEditing.js.map +1 -1
  561. package/dist/interactions/actions/defaults/anchorHandles.js +42 -0
  562. package/dist/interactions/actions/defaults/anchorHandles.js.map +1 -0
  563. package/dist/interactions/actions/defaults/anchorJoin.js +92 -0
  564. package/dist/interactions/actions/defaults/anchorJoin.js.map +1 -0
  565. package/dist/interactions/actions/defaults/areaSelect.js.map +1 -1
  566. package/dist/interactions/actions/defaults/bendSegment.js +46 -0
  567. package/dist/interactions/actions/defaults/bendSegment.js.map +1 -0
  568. package/dist/interactions/actions/defaults/cancelGesture.js.map +1 -1
  569. package/dist/interactions/actions/defaults/clearSelection.js.map +1 -1
  570. package/dist/interactions/actions/defaults/copySubtree.js +1 -1
  571. package/dist/interactions/actions/defaults/copySubtree.js.map +1 -1
  572. package/dist/interactions/actions/defaults/createPaintAction.js.map +1 -1
  573. package/dist/interactions/actions/defaults/delete.js.map +1 -1
  574. package/dist/interactions/actions/defaults/duplicate.js +36 -21
  575. package/dist/interactions/actions/defaults/duplicate.js.map +1 -1
  576. package/dist/interactions/actions/defaults/enterPathEdit.js +19 -7
  577. package/dist/interactions/actions/defaults/enterPathEdit.js.map +1 -1
  578. package/dist/interactions/actions/defaults/enterTextEdit.js.map +1 -1
  579. package/dist/interactions/actions/defaults/group.js +35 -40
  580. package/dist/interactions/actions/defaults/group.js.map +1 -1
  581. package/dist/interactions/actions/defaults/icons/anchorIcons.js +75 -0
  582. package/dist/interactions/actions/defaults/icons/anchorIcons.js.map +1 -0
  583. package/dist/interactions/actions/defaults/icons/booleanIcons.js +24 -1
  584. package/dist/interactions/actions/defaults/icons/booleanIcons.js.map +1 -1
  585. package/dist/interactions/actions/defaults/icons/editIcons.js +35 -8
  586. package/dist/interactions/actions/defaults/icons/editIcons.js.map +1 -1
  587. package/dist/interactions/actions/defaults/icons/outlineIcons.js +39 -1
  588. package/dist/interactions/actions/defaults/icons/outlineIcons.js.map +1 -1
  589. package/dist/interactions/actions/defaults/ingest.js +19 -15
  590. package/dist/interactions/actions/defaults/ingest.js.map +1 -1
  591. package/dist/interactions/actions/defaults/insertPathAnchor.js +18 -34
  592. package/dist/interactions/actions/defaults/insertPathAnchor.js.map +1 -1
  593. package/dist/interactions/actions/defaults/nudge.js +43 -39
  594. package/dist/interactions/actions/defaults/nudge.js.map +1 -1
  595. package/dist/interactions/actions/defaults/pinchZoom.js +29 -29
  596. package/dist/interactions/actions/defaults/pinchZoom.js.map +1 -1
  597. package/dist/interactions/actions/defaults/requiresSelection.js.map +1 -1
  598. package/dist/interactions/actions/defaults/segmentUnder.js +22 -0
  599. package/dist/interactions/actions/defaults/segmentUnder.js.map +1 -0
  600. package/dist/interactions/actions/defaults/setFill.js +9 -3
  601. package/dist/interactions/actions/defaults/setFill.js.map +1 -1
  602. package/dist/interactions/actions/defaults/setFillOpacity.js +4 -1
  603. package/dist/interactions/actions/defaults/setFillOpacity.js.map +1 -1
  604. package/dist/interactions/actions/defaults/setStroke.js.map +1 -1
  605. package/dist/interactions/actions/defaults/sliceOps.js +20 -22
  606. package/dist/interactions/actions/defaults/sliceOps.js.map +1 -1
  607. package/dist/interactions/actions/defaults/toolActivate.js.map +1 -1
  608. package/dist/interactions/actions/defaults/toolResetToDefault.js.map +1 -1
  609. package/dist/interactions/actions/defaults/viewportDragPan.js +1 -1
  610. package/dist/interactions/actions/defaults/viewportDragPan.js.map +1 -1
  611. package/dist/interactions/actions/defaults/viewportWheelPan.js.map +1 -1
  612. package/dist/interactions/actions/defaults/viewportZoom.js +82 -79
  613. package/dist/interactions/actions/defaults/viewportZoom.js.map +1 -1
  614. package/dist/interactions/actions/{defaults/distribute.js → distribute/action.js} +18 -19
  615. package/dist/interactions/actions/distribute/action.js.map +1 -0
  616. package/dist/interactions/actions/distribute/distribute.js +15 -15
  617. package/dist/interactions/actions/distribute/distribute.js.map +1 -1
  618. package/dist/interactions/actions/edit-anchors/action.js +101 -0
  619. package/dist/interactions/actions/edit-anchors/action.js.map +1 -0
  620. package/dist/interactions/actions/edit-anchors/geometry.js +2 -4
  621. package/dist/interactions/actions/edit-anchors/geometry.js.map +1 -1
  622. package/dist/interactions/actions/edit-anchors/preview.js +26 -0
  623. package/dist/interactions/actions/edit-anchors/preview.js.map +1 -0
  624. package/dist/interactions/actions/edit-anchors/symmetry.js +11 -0
  625. package/dist/interactions/actions/edit-anchors/symmetry.js.map +1 -0
  626. package/dist/interactions/actions/flip/action.js +124 -0
  627. package/dist/interactions/actions/flip/action.js.map +1 -0
  628. package/dist/interactions/actions/flip/helpers.js +1 -1
  629. package/dist/interactions/actions/flip/helpers.js.map +1 -1
  630. package/dist/interactions/actions/geometryProjection.js.map +1 -1
  631. package/dist/interactions/actions/gestureFrames.js +18 -0
  632. package/dist/interactions/actions/gestureFrames.js.map +1 -0
  633. package/dist/interactions/actions/gestureLifecycle.js +47 -20
  634. package/dist/interactions/actions/gestureLifecycle.js.map +1 -1
  635. package/dist/interactions/actions/insert/action.js +79 -0
  636. package/dist/interactions/actions/insert/action.js.map +1 -0
  637. package/dist/interactions/actions/insert/commit.js +28 -0
  638. package/dist/interactions/actions/insert/commit.js.map +1 -0
  639. package/dist/interactions/actions/insert/extras.js +65 -0
  640. package/dist/interactions/actions/insert/extras.js.map +1 -0
  641. package/dist/interactions/actions/insert/frame.js +55 -0
  642. package/dist/interactions/actions/insert/frame.js.map +1 -0
  643. package/dist/interactions/actions/insert/geometry.js +35 -0
  644. package/dist/interactions/actions/insert/geometry.js.map +1 -0
  645. package/dist/interactions/actions/insert/repositionAction.js +31 -0
  646. package/dist/interactions/actions/insert/repositionAction.js.map +1 -0
  647. package/dist/interactions/actions/insert/rotateAction.js +21 -0
  648. package/dist/interactions/actions/insert/rotateAction.js.map +1 -0
  649. package/dist/interactions/actions/insert/session.js +59 -0
  650. package/dist/interactions/actions/insert/session.js.map +1 -0
  651. package/dist/interactions/actions/insert/shape.js +34 -0
  652. package/dist/interactions/actions/insert/shape.js.map +1 -0
  653. package/dist/interactions/actions/lasso-select/action.js +143 -0
  654. package/dist/interactions/actions/lasso-select/action.js.map +1 -0
  655. package/dist/interactions/actions/move/action.js +91 -0
  656. package/dist/interactions/actions/move/action.js.map +1 -0
  657. package/dist/interactions/actions/move/behaviors/layoutDrop.js +51 -0
  658. package/dist/interactions/actions/move/behaviors/layoutDrop.js.map +1 -0
  659. package/dist/interactions/actions/move/behaviors/reparentOnDrop.js +15 -0
  660. package/dist/interactions/actions/move/behaviors/reparentOnDrop.js.map +1 -0
  661. package/dist/interactions/actions/move/behaviors/snapToContainer.js +35 -28
  662. package/dist/interactions/actions/move/behaviors/snapToContainer.js.map +1 -1
  663. package/dist/interactions/actions/move/capture.js +108 -0
  664. package/dist/interactions/actions/move/capture.js.map +1 -0
  665. package/dist/interactions/actions/move/commit/index.js +41 -0
  666. package/dist/interactions/actions/move/commit/index.js.map +1 -0
  667. package/dist/interactions/actions/move/commit/layoutDrop.js +44 -0
  668. package/dist/interactions/actions/move/commit/layoutDrop.js.map +1 -0
  669. package/dist/interactions/actions/move/commit/layoutRelease.js +100 -0
  670. package/dist/interactions/actions/move/commit/layoutRelease.js.map +1 -0
  671. package/dist/interactions/actions/move/commit/rebase.js +18 -0
  672. package/dist/interactions/actions/move/commit/rebase.js.map +1 -0
  673. package/dist/interactions/actions/move/commit/reparent.js +65 -0
  674. package/dist/interactions/actions/move/commit/reparent.js.map +1 -0
  675. package/dist/interactions/actions/move/delta.js +51 -0
  676. package/dist/interactions/actions/move/delta.js.map +1 -0
  677. package/dist/interactions/actions/move/frame.js +47 -0
  678. package/dist/interactions/actions/move/frame.js.map +1 -0
  679. package/dist/interactions/actions/move/gestureAdapter.js +15 -40
  680. package/dist/interactions/actions/move/gestureAdapter.js.map +1 -1
  681. package/dist/interactions/actions/move/landedDescendants.js +8 -8
  682. package/dist/interactions/actions/move/layout/container.js +94 -0
  683. package/dist/interactions/actions/move/layout/container.js.map +1 -0
  684. package/dist/interactions/actions/move/layout/dragged.js +58 -0
  685. package/dist/interactions/actions/move/layout/dragged.js.map +1 -0
  686. package/dist/interactions/actions/move/layout/dropPass.js +122 -0
  687. package/dist/interactions/actions/move/layout/dropPass.js.map +1 -0
  688. package/dist/interactions/actions/move/layout/exits.js +38 -0
  689. package/dist/interactions/actions/move/layout/exits.js.map +1 -0
  690. package/dist/interactions/actions/move/layout/glide.js +48 -0
  691. package/dist/interactions/actions/move/layout/glide.js.map +1 -0
  692. package/dist/interactions/actions/move/session.js +63 -0
  693. package/dist/interactions/actions/move/session.js.map +1 -0
  694. package/dist/interactions/actions/move/translate.js +61 -0
  695. package/dist/interactions/actions/move/translate.js.map +1 -0
  696. package/dist/interactions/actions/outlines/createOutlines.js +17 -64
  697. package/dist/interactions/actions/outlines/createOutlines.js.map +1 -1
  698. package/dist/interactions/actions/outlines/createOutlinesAction.js +51 -0
  699. package/dist/interactions/actions/outlines/createOutlinesAction.js.map +1 -0
  700. package/dist/interactions/actions/outlines/outlineStroke.js +72 -0
  701. package/dist/interactions/actions/outlines/outlineStroke.js.map +1 -0
  702. package/dist/interactions/actions/outlines/outlineStrokeAction.js +37 -0
  703. package/dist/interactions/actions/outlines/outlineStrokeAction.js.map +1 -0
  704. package/dist/interactions/actions/outlines/replaceWithPaths.js +54 -0
  705. package/dist/interactions/actions/outlines/replaceWithPaths.js.map +1 -0
  706. package/dist/interactions/actions/outlines/strokeRegion.js +27 -0
  707. package/dist/interactions/actions/outlines/strokeRegion.js.map +1 -0
  708. package/dist/interactions/actions/pathCommands/cutJoin.js +102 -0
  709. package/dist/interactions/actions/pathCommands/cutJoin.js.map +1 -0
  710. package/dist/interactions/actions/pathCommands/livePathEdit.js +64 -0
  711. package/dist/interactions/actions/pathCommands/livePathEdit.js.map +1 -0
  712. package/dist/interactions/actions/pathCommands/pathNodes.js +99 -0
  713. package/dist/interactions/actions/pathCommands/pathNodes.js.map +1 -0
  714. package/dist/interactions/actions/pathCommands/simplifyOffset.js +42 -0
  715. package/dist/interactions/actions/pathCommands/simplifyOffset.js.map +1 -0
  716. package/dist/interactions/actions/planeInput.js.map +1 -1
  717. package/dist/interactions/actions/pointerState.js +12 -0
  718. package/dist/interactions/actions/pointerState.js.map +1 -0
  719. package/dist/interactions/actions/poseDescriptorDep.js +1 -1
  720. package/dist/interactions/actions/poseDescriptorDep.js.map +1 -1
  721. package/dist/interactions/actions/poseFrame.js +26 -26
  722. package/dist/interactions/actions/poseFrame.js.map +1 -1
  723. package/dist/interactions/actions/resize/action.js +66 -0
  724. package/dist/interactions/actions/resize/action.js.map +1 -0
  725. package/dist/interactions/actions/resize/behaviors/lockAspect.js.map +1 -1
  726. package/dist/interactions/actions/resize/boxFrame.js +16 -0
  727. package/dist/interactions/actions/resize/boxFrame.js.map +1 -0
  728. package/dist/interactions/actions/resize/capture.js +85 -0
  729. package/dist/interactions/actions/resize/capture.js.map +1 -0
  730. package/dist/interactions/actions/resize/commit.js +69 -0
  731. package/dist/interactions/actions/resize/commit.js.map +1 -0
  732. package/dist/interactions/actions/resize/frame.js +88 -0
  733. package/dist/interactions/actions/resize/frame.js.map +1 -0
  734. package/dist/interactions/actions/resize/pointSnap.js +111 -0
  735. package/dist/interactions/actions/resize/pointSnap.js.map +1 -0
  736. package/dist/interactions/actions/resize/replay.js +47 -0
  737. package/dist/interactions/actions/resize/replay.js.map +1 -0
  738. package/dist/interactions/actions/resize/ruleBounds.js +9 -0
  739. package/dist/interactions/actions/resize/ruleBounds.js.map +1 -0
  740. package/dist/interactions/actions/resize/session.js +63 -0
  741. package/dist/interactions/actions/resize/session.js.map +1 -0
  742. package/dist/interactions/actions/resolveOverlays.js +2 -1
  743. package/dist/interactions/actions/resolveOverlays.js.map +1 -1
  744. package/dist/interactions/actions/resolvePreviews.js.map +1 -1
  745. package/dist/interactions/actions/rotate/action.js +71 -0
  746. package/dist/interactions/actions/rotate/action.js.map +1 -0
  747. package/dist/interactions/actions/rotate/behaviors/index.js +7 -0
  748. package/dist/interactions/actions/rotate/behaviors/index.js.map +1 -0
  749. package/dist/interactions/actions/rotate/behaviors/snapRotation.js +12 -0
  750. package/dist/interactions/actions/rotate/behaviors/snapRotation.js.map +1 -0
  751. package/dist/interactions/actions/rotate/commit.js +40 -0
  752. package/dist/interactions/actions/rotate/commit.js.map +1 -0
  753. package/dist/interactions/actions/rotate/frame.js +65 -0
  754. package/dist/interactions/actions/rotate/frame.js.map +1 -0
  755. package/dist/interactions/actions/rotate/handle.js +12 -12
  756. package/dist/interactions/actions/rotate/handle.js.map +1 -1
  757. package/dist/interactions/actions/rotate/replay.js +22 -0
  758. package/dist/interactions/actions/rotate/replay.js.map +1 -0
  759. package/dist/interactions/actions/rotate/session.js +102 -0
  760. package/dist/interactions/actions/rotate/session.js.map +1 -0
  761. package/dist/interactions/actions/spatialReference.js.map +1 -1
  762. package/dist/interactions/actions/transform-again/action.js +63 -0
  763. package/dist/interactions/actions/transform-again/action.js.map +1 -0
  764. package/dist/interactions/actions/transform-again/memory.js +35 -0
  765. package/dist/interactions/actions/transform-again/memory.js.map +1 -0
  766. package/dist/interactions/actions/useStandardActions.js +84 -61
  767. package/dist/interactions/actions/useStandardActions.js.map +1 -1
  768. package/dist/interactions/gestures/pointerDrag/pointerDrag.js +61 -42
  769. package/dist/interactions/gestures/pointerDrag/pointerDrag.js.map +1 -1
  770. package/dist/interactions/gestures/shared/originProjection.js +1 -1
  771. package/dist/interactions/gestures/shared/originProjection.js.map +1 -1
  772. package/dist/interactions/gestures/shared/screenTolerance.js +8 -2
  773. package/dist/interactions/gestures/shared/screenTolerance.js.map +1 -1
  774. package/dist/interactions/gestures/shared/snap.js.map +1 -1
  775. package/dist/math-CYUjoyyU.d.ts +33 -0
  776. package/dist/math.d.ts +5 -2
  777. package/dist/math.js +6 -6
  778. package/dist/mesh.d.ts +4 -268
  779. package/dist/mesh.js +3 -7
  780. package/dist/move.d.ts +6 -4
  781. package/dist/{originProjection-gHnOup4e.d.ts → originProjection-CoNVpITV.d.ts} +1 -1
  782. package/dist/patterns-builtin.d.ts +1 -118
  783. package/dist/patterns-builtin.js +2 -3
  784. package/dist/poseDescriptor-Bqk-11Rl.d.ts +73 -0
  785. package/dist/renderer.d.ts +1 -92
  786. package/dist/renderer.js +2 -19
  787. package/dist/resize.d.ts +11 -22
  788. package/dist/resize.js +1 -1
  789. package/dist/style.css +1 -1
  790. package/dist/test-hook/install.js.map +1 -1
  791. package/dist/test-hook/useTestHook.js +22 -0
  792. package/dist/test-hook/useTestHook.js.map +1 -0
  793. package/dist/test-seams-D0pyV3pR.d.ts +149 -0
  794. package/dist/test-seams.d.ts +4 -4
  795. package/dist/test-seams.js +2 -2
  796. package/dist/tools/builtin/bone/boneActions.js +130 -0
  797. package/dist/tools/builtin/bone/boneActions.js.map +1 -0
  798. package/dist/tools/builtin/bone/boneOverlay.js +58 -0
  799. package/dist/tools/builtin/bone/boneOverlay.js.map +1 -0
  800. package/dist/tools/builtin/bone/placedRig.js +24 -0
  801. package/dist/tools/builtin/bone/placedRig.js.map +1 -0
  802. package/dist/tools/builtin/bone/rigEditState.js +21 -0
  803. package/dist/tools/builtin/bone/rigEditState.js.map +1 -0
  804. package/dist/tools/builtin/bone/useBoneTool.js +98 -0
  805. package/dist/tools/builtin/bone/useBoneTool.js.map +1 -0
  806. package/dist/tools/builtin/ellipse/useEllipseTool.js +16 -15
  807. package/dist/tools/builtin/ellipse/useEllipseTool.js.map +1 -1
  808. package/dist/tools/builtin/eyedropper/useEyedropperTool.js.map +1 -1
  809. package/dist/tools/builtin/hand/useHandTool.js.map +1 -1
  810. package/dist/tools/builtin/image/useImageTool.js.map +1 -1
  811. package/dist/tools/builtin/lasso/useLassoTool.js.map +1 -1
  812. package/dist/tools/builtin/line/useLineTool.js +16 -15
  813. package/dist/tools/builtin/line/useLineTool.js.map +1 -1
  814. package/dist/tools/builtin/pen/usePenTool.js +162 -164
  815. package/dist/tools/builtin/pen/usePenTool.js.map +1 -1
  816. package/dist/tools/builtin/pencil/usePencilTool.js.map +1 -1
  817. package/dist/tools/builtin/pickTopMostHit.js +11 -14
  818. package/dist/tools/builtin/pickTopMostHit.js.map +1 -1
  819. package/dist/tools/builtin/polygon/usePolygonTool.js +17 -15
  820. package/dist/tools/builtin/polygon/usePolygonTool.js.map +1 -1
  821. package/dist/tools/builtin/rect/useRectTool.js +15 -14
  822. package/dist/tools/builtin/rect/useRectTool.js.map +1 -1
  823. package/dist/tools/builtin/select/adapterPointQuery.js +40 -0
  824. package/dist/tools/builtin/select/adapterPointQuery.js.map +1 -0
  825. package/dist/tools/builtin/select/selectionContributions.js +5 -5
  826. package/dist/tools/builtin/select/selectionContributions.js.map +1 -1
  827. package/dist/tools/builtin/select/useSelectTool.js +44 -71
  828. package/dist/tools/builtin/select/useSelectTool.js.map +1 -1
  829. package/dist/tools/builtin/shared/pointerFollower.js.map +1 -1
  830. package/dist/tools/builtin/slice/useSliceTool.js +69 -72
  831. package/dist/tools/builtin/slice/useSliceTool.js.map +1 -1
  832. package/dist/tools/builtin/star/useStarTool.js +18 -16
  833. package/dist/tools/builtin/star/useStarTool.js.map +1 -1
  834. package/dist/tools/builtin/text/useTextTool.js +10 -2
  835. package/dist/tools/builtin/text/useTextTool.js.map +1 -1
  836. package/dist/tools/builtin/weight/useWeightTool.js +77 -0
  837. package/dist/tools/builtin/weight/useWeightTool.js.map +1 -0
  838. package/dist/tools/builtin/weight/weightActions.js +112 -0
  839. package/dist/tools/builtin/weight/weightActions.js.map +1 -0
  840. package/dist/tools/builtin/weight/weightOverlay.js +61 -0
  841. package/dist/tools/builtin/weight/weightOverlay.js.map +1 -0
  842. package/dist/tools/overlayBinding.js.map +1 -1
  843. package/dist/tools/useKeybindings.js +20 -14
  844. package/dist/tools/useKeybindings.js.map +1 -1
  845. package/dist/{types-k-5Oqh-U.d.ts → types-DBbbCy0i.d.ts} +103 -176
  846. package/dist/util/paint.js +1 -1
  847. package/dist/util/paint.js.map +1 -1
  848. package/dist/version.js +1 -1
  849. package/package.json +26 -21
  850. package/dist/animation/colorHelpers.js +0 -135
  851. package/dist/animation/colorHelpers.js.map +0 -1
  852. package/dist/animation/colorRegistry.js +0 -37
  853. package/dist/animation/colorRegistry.js.map +0 -1
  854. package/dist/animation/engine/axes.js +0 -36
  855. package/dist/animation/engine/axes.js.map +0 -1
  856. package/dist/animation/engine/codec.js +0 -170
  857. package/dist/animation/engine/codec.js.map +0 -1
  858. package/dist/animation/engine/integrator.js +0 -12
  859. package/dist/animation/engine/integrator.js.map +0 -1
  860. package/dist/animation/loop.js +0 -60
  861. package/dist/animation/loop.js.map +0 -1
  862. package/dist/animation/observe.js +0 -23
  863. package/dist/animation/observe.js.map +0 -1
  864. package/dist/animation/rig/blendPoses.js +0 -43
  865. package/dist/animation/rig/blendPoses.js.map +0 -1
  866. package/dist/animation/rig/mirrorPose.js +0 -19
  867. package/dist/animation/rig/mirrorPose.js.map +0 -1
  868. package/dist/animation/rig/resolveSkeleton.js +0 -33
  869. package/dist/animation/rig/resolveSkeleton.js.map +0 -1
  870. package/dist/animation/rig/solveIk.js +0 -103
  871. package/dist/animation/rig/solveIk.js.map +0 -1
  872. package/dist/animation/rig/types.js +0 -12
  873. package/dist/animation/rig/types.js.map +0 -1
  874. package/dist/animation/slew.js +0 -27
  875. package/dist/animation/slew.js.map +0 -1
  876. package/dist/animation/stagger.js +0 -146
  877. package/dist/animation/stagger.js.map +0 -1
  878. package/dist/animation/timeline/booking.js +0 -114
  879. package/dist/animation/timeline/booking.js.map +0 -1
  880. package/dist/animation/timeline/createTimeline.js +0 -125
  881. package/dist/animation/timeline/createTimeline.js.map +0 -1
  882. package/dist/animation/timeline/sampleTrack.js +0 -79
  883. package/dist/animation/timeline/sampleTrack.js.map +0 -1
  884. package/dist/animation/useAnimator.js +0 -388
  885. package/dist/animation/useAnimator.js.map +0 -1
  886. package/dist/autoPoseDescriptor-Ct7yqivU.d.ts +0 -108
  887. package/dist/builtins-DPcdghtB.d.ts +0 -1223
  888. package/dist/canvas/MinimapCanvas.js +0 -140
  889. package/dist/canvas/MinimapCanvas.js.map +0 -1
  890. package/dist/canvas/deps/poseComposition.js +0 -11
  891. package/dist/canvas/deps/poseComposition.js.map +0 -1
  892. package/dist/canvas/minimapMath.js +0 -82
  893. package/dist/canvas/minimapMath.js.map +0 -1
  894. package/dist/canvas/toolPreview.js +0 -39
  895. package/dist/canvas/toolPreview.js.map +0 -1
  896. package/dist/core/adapters/arrayAdapter.js +0 -94
  897. package/dist/core/adapters/arrayAdapter.js.map +0 -1
  898. package/dist/core/adapters/useArrayAdapter.js +0 -13
  899. package/dist/core/adapters/useArrayAdapter.js.map +0 -1
  900. package/dist/core/fillInPoseFrame.js +0 -102
  901. package/dist/core/fillInPoseFrame.js.map +0 -1
  902. package/dist/core/geometry/poseFrame.js +0 -44
  903. package/dist/core/geometry/poseFrame.js.map +0 -1
  904. package/dist/core/geometry/poseRotation.js +0 -58
  905. package/dist/core/geometry/poseRotation.js.map +0 -1
  906. package/dist/core/gradient.js +0 -136
  907. package/dist/core/gradient.js.map +0 -1
  908. package/dist/core/markerInset.js +0 -24
  909. package/dist/core/markerInset.js.map +0 -1
  910. package/dist/core/mixed.js +0 -6
  911. package/dist/core/mixed.js.map +0 -1
  912. package/dist/core/paintKinds.js +0 -156
  913. package/dist/core/paintKinds.js.map +0 -1
  914. package/dist/core/scene/pickability.js +0 -6
  915. package/dist/core/scene/pickability.js.map +0 -1
  916. package/dist/core/strokeMarkerShapes.js +0 -139
  917. package/dist/core/strokeMarkerShapes.js.map +0 -1
  918. package/dist/core/strokeMarkers.js +0 -28
  919. package/dist/core/strokeMarkers.js.map +0 -1
  920. package/dist/core/viewport/meanScale.js +0 -8
  921. package/dist/core/viewport/meanScale.js.map +0 -1
  922. package/dist/core/viewport/pxExtent.js +0 -42
  923. package/dist/core/viewport/pxExtent.js.map +0 -1
  924. package/dist/features/cursor/paintedCursorLayer.js.map +0 -1
  925. package/dist/features/focus/gateLayer.js.map +0 -1
  926. package/dist/features/focus/useCanvasFocus.js +0 -29
  927. package/dist/features/focus/useCanvasFocus.js.map +0 -1
  928. package/dist/features/groups/children.js.map +0 -1
  929. package/dist/features/groups/composePose.js +0 -67
  930. package/dist/features/groups/composePose.js.map +0 -1
  931. package/dist/features/groups/nestedHit.js.map +0 -1
  932. package/dist/features/groups/unionOfChildren.js.map +0 -1
  933. package/dist/features/images/imageCache.js +0 -104
  934. package/dist/features/images/imageCache.js.map +0 -1
  935. package/dist/features/ingestion/index.js +0 -8
  936. package/dist/features/meshPaint/bake.js +0 -79
  937. package/dist/features/meshPaint/bake.js.map +0 -1
  938. package/dist/features/meshPaint/bakeCache.js +0 -59
  939. package/dist/features/meshPaint/bakeCache.js.map +0 -1
  940. package/dist/features/meshPaint/handles.js +0 -86
  941. package/dist/features/meshPaint/handles.js.map +0 -1
  942. package/dist/features/meshPaint/lazyKind.js.map +0 -1
  943. package/dist/features/meshPaint/meshPaint.js +0 -239
  944. package/dist/features/meshPaint/meshPaint.js.map +0 -1
  945. package/dist/features/meshPaint/meshShader.js +0 -6
  946. package/dist/features/meshPaint/meshShader.js.map +0 -1
  947. package/dist/features/meshPaint/register.js +0 -7
  948. package/dist/features/meshPaint/register.js.map +0 -1
  949. package/dist/features/meshPaint/surface.js +0 -110
  950. package/dist/features/meshPaint/surface.js.map +0 -1
  951. package/dist/features/minimap/actions.js +0 -53
  952. package/dist/features/minimap/actions.js.map +0 -1
  953. package/dist/features/minimap/createMinimapContribution.js +0 -96
  954. package/dist/features/minimap/createMinimapContribution.js.map +0 -1
  955. package/dist/features/minimap/layers.js +0 -85
  956. package/dist/features/minimap/layers.js.map +0 -1
  957. package/dist/features/overlays/useNodeOverlayFrame.js +0 -103
  958. package/dist/features/overlays/useNodeOverlayFrame.js.map +0 -1
  959. package/dist/features/parallax/createParallaxLayer.js +0 -26
  960. package/dist/features/parallax/createParallaxLayer.js.map +0 -1
  961. package/dist/features/parallax/createParallaxPlane.js +0 -22
  962. package/dist/features/parallax/createParallaxPlane.js.map +0 -1
  963. package/dist/features/paths/anchorEdits.js +0 -167
  964. package/dist/features/paths/anchorEdits.js.map +0 -1
  965. package/dist/features/paths/anchors.js +0 -159
  966. package/dist/features/paths/anchors.js.map +0 -1
  967. package/dist/features/paths/booleans.js +0 -2
  968. package/dist/features/paths/markerCommands.js +0 -149
  969. package/dist/features/paths/markerCommands.js.map +0 -1
  970. package/dist/features/paths/markerSites.js +0 -59
  971. package/dist/features/paths/markerSites.js.map +0 -1
  972. package/dist/features/paths/markers.js +0 -95
  973. package/dist/features/paths/markers.js.map +0 -1
  974. package/dist/features/paths/nearestAnchor.js +0 -36
  975. package/dist/features/paths/nearestAnchor.js.map +0 -1
  976. package/dist/features/paths/pathInWorld.js +0 -41
  977. package/dist/features/paths/pathInWorld.js.map +0 -1
  978. package/dist/features/paths/poseDescriptor.js +0 -39
  979. package/dist/features/paths/poseDescriptor.js.map +0 -1
  980. package/dist/features/paths/strokeToPath.js +0 -40
  981. package/dist/features/paths/strokeToPath.js.map +0 -1
  982. package/dist/features/paths/tessellate/dash.js +0 -52
  983. package/dist/features/paths/tessellate/dash.js.map +0 -1
  984. package/dist/features/paths/tessellate/insets.js +0 -32
  985. package/dist/features/paths/tessellate/insets.js.map +0 -1
  986. package/dist/features/paths/tessellate/metric.js +0 -72
  987. package/dist/features/paths/tessellate/metric.js.map +0 -1
  988. package/dist/features/paths/tessellate/stroke.js +0 -170
  989. package/dist/features/paths/tessellate/stroke.js.map +0 -1
  990. package/dist/features/paths/tessellate/vertexWidths.js +0 -32
  991. package/dist/features/paths/tessellate/vertexWidths.js.map +0 -1
  992. package/dist/features/patterns/commandPaint.js +0 -18
  993. package/dist/features/patterns/commandPaint.js.map +0 -1
  994. package/dist/features/patterns/index.js +0 -11
  995. package/dist/features/patterns/index.js.map +0 -1
  996. package/dist/features/patterns/patterns-builtin.js +0 -38
  997. package/dist/features/patterns/patterns-builtin.js.map +0 -1
  998. package/dist/features/patterns/rasterizeTile.js +0 -17
  999. package/dist/features/patterns/rasterizeTile.js.map +0 -1
  1000. package/dist/features/patterns/resolveSpec.js +0 -65
  1001. package/dist/features/patterns/resolveSpec.js.map +0 -1
  1002. package/dist/features/patterns/tileGeometry.js +0 -158
  1003. package/dist/features/patterns/tileGeometry.js.map +0 -1
  1004. package/dist/features/pointer/PointerContext.js +0 -45
  1005. package/dist/features/pointer/PointerContext.js.map +0 -1
  1006. package/dist/features/selection/SelectionContext.js +0 -51
  1007. package/dist/features/selection/SelectionContext.js.map +0 -1
  1008. package/dist/features/simulation/createSimulation.js +0 -61
  1009. package/dist/features/simulation/createSimulation.js.map +0 -1
  1010. package/dist/features/simulation/types.js +0 -6
  1011. package/dist/features/simulation/types.js.map +0 -1
  1012. package/dist/features/simulation/useSimulation.js +0 -74
  1013. package/dist/features/simulation/useSimulation.js.map +0 -1
  1014. package/dist/features/text/domOffsets.js +0 -82
  1015. package/dist/features/text/domOffsets.js.map +0 -1
  1016. package/dist/features/text/domRuns.js +0 -230
  1017. package/dist/features/text/domRuns.js.map +0 -1
  1018. package/dist/features/text/fitTextPose.js +0 -38
  1019. package/dist/features/text/fitTextPose.js.map +0 -1
  1020. package/dist/features/text/hitTest.js +0 -48
  1021. package/dist/features/text/hitTest.js.map +0 -1
  1022. package/dist/features/text/isTextData.js +0 -8
  1023. package/dist/features/text/isTextData.js.map +0 -1
  1024. package/dist/features/text/overlayDirection.js +0 -15
  1025. package/dist/features/text/overlayDirection.js.map +0 -1
  1026. package/dist/features/text/renderLabel.js +0 -14
  1027. package/dist/features/text/renderLabel.js.map +0 -1
  1028. package/dist/features/text/runs/effectiveRangeStyle.js +0 -66
  1029. package/dist/features/text/runs/effectiveRangeStyle.js.map +0 -1
  1030. package/dist/features/text/runs/flagRange.js +0 -53
  1031. package/dist/features/text/runs/flagRange.js.map +0 -1
  1032. package/dist/features/text/runs/rangeStyle.js +0 -133
  1033. package/dist/features/text/runs/rangeStyle.js.map +0 -1
  1034. package/dist/features/text/textCommand.js +0 -60
  1035. package/dist/features/text/textCommand.js.map +0 -1
  1036. package/dist/features/text/textToPath.js +0 -181
  1037. package/dist/features/text/textToPath.js.map +0 -1
  1038. package/dist/features/text/useTextEdit.js +0 -491
  1039. package/dist/features/text/useTextEdit.js.map +0 -1
  1040. package/dist/features/tiling/createTiledLayer.js +0 -65
  1041. package/dist/features/tiling/createTiledLayer.js.map +0 -1
  1042. package/dist/features/tiling/tiledProject.js +0 -14
  1043. package/dist/features/tiling/tiledProject.js.map +0 -1
  1044. package/dist/interactions/actions/clone/behaviors/cloneByAltDrag.js +0 -26
  1045. package/dist/interactions/actions/clone/behaviors/cloneByAltDrag.js.map +0 -1
  1046. package/dist/interactions/actions/defaults/align.js.map +0 -1
  1047. package/dist/interactions/actions/defaults/booleans.js +0 -52
  1048. package/dist/interactions/actions/defaults/booleans.js.map +0 -1
  1049. package/dist/interactions/actions/defaults/clipboard.js.map +0 -1
  1050. package/dist/interactions/actions/defaults/clone.js +0 -91
  1051. package/dist/interactions/actions/defaults/clone.js.map +0 -1
  1052. package/dist/interactions/actions/defaults/createOutlines.js +0 -47
  1053. package/dist/interactions/actions/defaults/createOutlines.js.map +0 -1
  1054. package/dist/interactions/actions/defaults/distribute.js.map +0 -1
  1055. package/dist/interactions/actions/defaults/editAnchors.js +0 -100
  1056. package/dist/interactions/actions/defaults/editAnchors.js.map +0 -1
  1057. package/dist/interactions/actions/defaults/flip.js +0 -125
  1058. package/dist/interactions/actions/defaults/flip.js.map +0 -1
  1059. package/dist/interactions/actions/defaults/insert.js +0 -287
  1060. package/dist/interactions/actions/defaults/insert.js.map +0 -1
  1061. package/dist/interactions/actions/defaults/lassoSelect.js +0 -153
  1062. package/dist/interactions/actions/defaults/lassoSelect.js.map +0 -1
  1063. package/dist/interactions/actions/defaults/move.js +0 -778
  1064. package/dist/interactions/actions/defaults/move.js.map +0 -1
  1065. package/dist/interactions/actions/defaults/resize.js +0 -341
  1066. package/dist/interactions/actions/defaults/resize.js.map +0 -1
  1067. package/dist/interactions/actions/defaults/rotate.js +0 -185
  1068. package/dist/interactions/actions/defaults/rotate.js.map +0 -1
  1069. package/dist/interactions/actions/previewOverrides.js +0 -25
  1070. package/dist/interactions/actions/previewOverrides.js.map +0 -1
  1071. package/dist/interactions/actions/resize/autoPoseDescriptor.js.map +0 -1
  1072. package/dist/layout/arrivals.js +0 -36
  1073. package/dist/layout/arrivals.js.map +0 -1
  1074. package/dist/math-J-ACHyEg.d.ts +0 -159
  1075. package/dist/registerProgram-T9S_PfAX.d.ts +0 -208
  1076. package/dist/renderer/DrawCommand.js +0 -6
  1077. package/dist/renderer/DrawCommand.js.map +0 -1
  1078. package/dist/renderer/WeaselRenderer.js +0 -333
  1079. package/dist/renderer/WeaselRenderer.js.map +0 -1
  1080. package/dist/renderer/batchClip.js +0 -46
  1081. package/dist/renderer/batchClip.js.map +0 -1
  1082. package/dist/renderer/cache/GLImageCache.js +0 -74
  1083. package/dist/renderer/cache/GLImageCache.js.map +0 -1
  1084. package/dist/renderer/cache/GLMeshCache.js +0 -102
  1085. package/dist/renderer/cache/GLMeshCache.js.map +0 -1
  1086. package/dist/renderer/cache/GLTextureCache.js +0 -68
  1087. package/dist/renderer/cache/GLTextureCache.js.map +0 -1
  1088. package/dist/renderer/cache/GradientRampAtlas.js +0 -82
  1089. package/dist/renderer/cache/GradientRampAtlas.js.map +0 -1
  1090. package/dist/renderer/cache/cache.js +0 -13
  1091. package/dist/renderer/cache/cache.js.map +0 -1
  1092. package/dist/renderer/cache/markerCommandCache.js +0 -63
  1093. package/dist/renderer/cache/markerCommandCache.js.map +0 -1
  1094. package/dist/renderer/cache/outlineMeshCache.js +0 -15
  1095. package/dist/renderer/cache/outlineMeshCache.js.map +0 -1
  1096. package/dist/renderer/cache/outlineStrokeMeshCache.js +0 -36
  1097. package/dist/renderer/cache/outlineStrokeMeshCache.js.map +0 -1
  1098. package/dist/renderer/cache/strokeMeshCache.js +0 -55
  1099. package/dist/renderer/cache/strokeMeshCache.js.map +0 -1
  1100. package/dist/renderer/cullDrawCommands.js +0 -90
  1101. package/dist/renderer/cullDrawCommands.js.map +0 -1
  1102. package/dist/renderer/draw/batch.js +0 -133
  1103. package/dist/renderer/draw/batch.js.map +0 -1
  1104. package/dist/renderer/draw/clip.js +0 -89
  1105. package/dist/renderer/draw/clip.js.map +0 -1
  1106. package/dist/renderer/draw/customShader.js +0 -230
  1107. package/dist/renderer/draw/customShader.js.map +0 -1
  1108. package/dist/renderer/draw/drawTriangles.js +0 -8
  1109. package/dist/renderer/draw/drawTriangles.js.map +0 -1
  1110. package/dist/renderer/draw/effects.js +0 -28
  1111. package/dist/renderer/draw/effects.js.map +0 -1
  1112. package/dist/renderer/draw/flushBatch.js +0 -35
  1113. package/dist/renderer/draw/flushBatch.js.map +0 -1
  1114. package/dist/renderer/draw/gradient.js +0 -90
  1115. package/dist/renderer/draw/gradient.js.map +0 -1
  1116. package/dist/renderer/draw/image.js +0 -38
  1117. package/dist/renderer/draw/image.js.map +0 -1
  1118. package/dist/renderer/draw/mesh.js +0 -16
  1119. package/dist/renderer/draw/mesh.js.map +0 -1
  1120. package/dist/renderer/draw/paintBind.js +0 -70
  1121. package/dist/renderer/draw/paintBind.js.map +0 -1
  1122. package/dist/renderer/draw/pathPaint.js +0 -142
  1123. package/dist/renderer/draw/pathPaint.js.map +0 -1
  1124. package/dist/renderer/draw/scratchPass.js +0 -83
  1125. package/dist/renderer/draw/scratchPass.js.map +0 -1
  1126. package/dist/renderer/draw/stencil.js +0 -28
  1127. package/dist/renderer/draw/stencil.js.map +0 -1
  1128. package/dist/renderer/draw/text.js +0 -167
  1129. package/dist/renderer/draw/text.js.map +0 -1
  1130. package/dist/renderer/draw/uniforms.js +0 -77
  1131. package/dist/renderer/draw/uniforms.js.map +0 -1
  1132. package/dist/renderer/draw.js +0 -79
  1133. package/dist/renderer/draw.js.map +0 -1
  1134. package/dist/renderer/drawBatch.js +0 -198
  1135. package/dist/renderer/drawBatch.js.map +0 -1
  1136. package/dist/renderer/effects/EffectTargets.js +0 -48
  1137. package/dist/renderer/effects/EffectTargets.js.map +0 -1
  1138. package/dist/renderer/effects/builtins.js +0 -31
  1139. package/dist/renderer/effects/builtins.js.map +0 -1
  1140. package/dist/renderer/effects/composite.js +0 -11
  1141. package/dist/renderer/effects/composite.js.map +0 -1
  1142. package/dist/renderer/effects/effectPrelude.js +0 -10
  1143. package/dist/renderer/effects/effectPrelude.js.map +0 -1
  1144. package/dist/renderer/effects/types.js +0 -10
  1145. package/dist/renderer/effects/types.js.map +0 -1
  1146. package/dist/renderer/glyphOutlineMesh.js +0 -67
  1147. package/dist/renderer/glyphOutlineMesh.js.map +0 -1
  1148. package/dist/renderer/index.js +0 -20
  1149. package/dist/renderer/math/color.js +0 -321
  1150. package/dist/renderer/math/color.js.map +0 -1
  1151. package/dist/renderer/math/mat3.js +0 -80
  1152. package/dist/renderer/math/mat3.js.map +0 -1
  1153. package/dist/renderer/math/patternSpace.js +0 -22
  1154. package/dist/renderer/math/patternSpace.js.map +0 -1
  1155. package/dist/renderer/math/viewToMat3.js +0 -19
  1156. package/dist/renderer/math/viewToMat3.js.map +0 -1
  1157. package/dist/renderer/paintResources.js +0 -18
  1158. package/dist/renderer/paintResources.js.map +0 -1
  1159. package/dist/renderer/paintScratch.js +0 -37
  1160. package/dist/renderer/paintScratch.js.map +0 -1
  1161. package/dist/renderer/shaders/ShaderProgram.js +0 -74
  1162. package/dist/renderer/shaders/ShaderProgram.js.map +0 -1
  1163. package/dist/renderer/shaders/batchFill.js +0 -119
  1164. package/dist/renderer/shaders/batchFill.js.map +0 -1
  1165. package/dist/renderer/shaders/customPrelude.js +0 -34
  1166. package/dist/renderer/shaders/customPrelude.js.map +0 -1
  1167. package/dist/renderer/shaders/extractUniformNames.js +0 -184
  1168. package/dist/renderer/shaders/extractUniformNames.js.map +0 -1
  1169. package/dist/renderer/shaders/glyphPaint.js +0 -61
  1170. package/dist/renderer/shaders/glyphPaint.js.map +0 -1
  1171. package/dist/renderer/shaders/gradFill.js +0 -31
  1172. package/dist/renderer/shaders/gradFill.js.map +0 -1
  1173. package/dist/renderer/shaders/pathFill.js +0 -14
  1174. package/dist/renderer/shaders/pathFill.js.map +0 -1
  1175. package/dist/renderer/shaders/patternFill.js +0 -25
  1176. package/dist/renderer/shaders/patternFill.js.map +0 -1
  1177. package/dist/renderer/shaders/registerProgram.js +0 -18
  1178. package/dist/renderer/shaders/registerProgram.js.map +0 -1
  1179. package/dist/renderer/spriteSheet.js +0 -14
  1180. package/dist/renderer/spriteSheet.js.map +0 -1
  1181. package/dist/renderer/state/GroupState.js +0 -77
  1182. package/dist/renderer/state/GroupState.js.map +0 -1
  1183. package/dist/renderer/strokeLengths.js +0 -50
  1184. package/dist/renderer/strokeLengths.js.map +0 -1
  1185. package/dist/renderer/syntheticItalic.js +0 -6
  1186. package/dist/renderer/syntheticItalic.js.map +0 -1
  1187. package/dist/renderer/textures/registerTexture.js +0 -34
  1188. package/dist/renderer/textures/registerTexture.js.map +0 -1
  1189. package/dist/scheduling/useVisibleRaf.js +0 -69
  1190. package/dist/scheduling/useVisibleRaf.js.map +0 -1
  1191. 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,8 +0,0 @@
1
- //#region src/features/text/isTextData.ts
2
- function e(e) {
3
- return typeof e == "object" && !!e && typeof e.text == "string";
4
- }
5
- //#endregion
6
- export { e as isTextData };
7
-
8
- //# sourceMappingURL=isTextData.js.map
@@ -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"}