@weasel-js/core 1.9.3 → 1.10.0

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 (1139) hide show
  1. package/CHANGELOG.md +1106 -0
  2. package/README.md +7 -5
  3. package/dist/WeaselProvider.js +5 -7
  4. package/dist/WeaselProvider.js.map +1 -1
  5. package/dist/affordances/composeAffordanceLayer.js +91 -93
  6. package/dist/affordances/composeAffordanceLayer.js.map +1 -1
  7. package/dist/affordances/cornerResize.js +27 -18
  8. package/dist/affordances/cornerResize.js.map +1 -1
  9. package/dist/affordances/hitAffordanceRegions.js +65 -104
  10. package/dist/affordances/hitAffordanceRegions.js.map +1 -1
  11. package/dist/affordances/pathAnchors.js.map +1 -1
  12. package/dist/affordances/rotationHandle.js +22 -21
  13. package/dist/affordances/rotationHandle.js.map +1 -1
  14. package/dist/animation/behaviors/coast.js +21 -0
  15. package/dist/animation/behaviors/coast.js.map +1 -0
  16. package/dist/animation/behaviors/coastByWrite.js +107 -0
  17. package/dist/animation/behaviors/coastByWrite.js.map +1 -0
  18. package/dist/animation/behaviors/coastOnTargets.js +94 -0
  19. package/dist/animation/behaviors/coastOnTargets.js.map +1 -0
  20. package/dist/animation/behaviors/momentum.js +38 -88
  21. package/dist/animation/behaviors/momentum.js.map +1 -1
  22. package/dist/animation/clipTargets.js +12 -0
  23. package/dist/animation/clipTargets.js.map +1 -0
  24. package/dist/animation/index.js +15 -20
  25. package/dist/animation/poseHelpers.js +112 -33
  26. package/dist/animation/poseHelpers.js.map +1 -1
  27. package/dist/animation/poseTarget.js +115 -0
  28. package/dist/animation/poseTarget.js.map +1 -0
  29. package/dist/animation/reflow.js +113 -83
  30. package/dist/animation/reflow.js.map +1 -1
  31. package/dist/animation/rewind.js +66 -0
  32. package/dist/animation/rewind.js.map +1 -0
  33. package/dist/animation/rig/bindRig.js +85 -53
  34. package/dist/animation/rig/bindRig.js.map +1 -1
  35. package/dist/animation/rig/rigNode.js +93 -0
  36. package/dist/animation/rig/rigNode.js.map +1 -0
  37. package/dist/animation/rig/rigSeat.js +26 -0
  38. package/dist/animation/rig/rigSeat.js.map +1 -0
  39. package/dist/animation/rig/skinBinding.js +56 -0
  40. package/dist/animation/rig/skinBinding.js.map +1 -0
  41. package/dist/animation/rig/useRig.js +31 -16
  42. package/dist/animation/rig/useRig.js.map +1 -1
  43. package/dist/animation/wrappers/animateLifecycle.js +32 -24
  44. package/dist/animation/wrappers/animateLifecycle.js.map +1 -1
  45. package/dist/animation/wrappers/animateOnSetPose.js +31 -29
  46. package/dist/animation/wrappers/animateOnSetPose.js.map +1 -1
  47. package/dist/animation/wrappers/instantPose.js +13 -0
  48. package/dist/animation/wrappers/instantPose.js.map +1 -0
  49. package/dist/animation/writtenPoseTarget.js +33 -0
  50. package/dist/animation/writtenPoseTarget.js.map +1 -0
  51. package/dist/{autoPoseDescriptor-vCdt55xm.d.ts → autoPoseDescriptor-DHg5KqaJ.d.ts} +1 -1
  52. package/dist/barrel/canvas.js +31 -0
  53. package/dist/barrel/chrome.js +16 -0
  54. package/dist/barrel/input.js +18 -0
  55. package/dist/barrel/interactions.js +38 -0
  56. package/dist/barrel/paint.js +11 -0
  57. package/dist/barrel/paths.js +12 -0
  58. package/dist/barrel/renderer.js +14 -0
  59. package/dist/barrel/routing.js +57 -0
  60. package/dist/barrel/scene.js +37 -0
  61. package/dist/barrel/text.js +9 -0
  62. package/dist/barrel/viewport.js +42 -0
  63. package/dist/canvas/Canvas.js +280 -559
  64. package/dist/canvas/Canvas.js.map +1 -1
  65. package/dist/canvas/CanvasView.js +147 -167
  66. package/dist/canvas/CanvasView.js.map +1 -1
  67. package/dist/canvas/CursorCoordsHud.js +53 -49
  68. package/dist/canvas/CursorCoordsHud.js.map +1 -1
  69. package/dist/canvas/DrawCanvas.js +40 -51
  70. package/dist/canvas/DrawCanvas.js.map +1 -1
  71. package/dist/canvas/ModalityHud.js.map +1 -1
  72. package/dist/canvas/NodeShape.js +55 -374
  73. package/dist/canvas/NodeShape.js.map +1 -1
  74. package/dist/canvas/PickHud.js +50 -47
  75. package/dist/canvas/PickHud.js.map +1 -1
  76. package/dist/canvas/SceneCanvas/DevHuds.js +40 -0
  77. package/dist/canvas/SceneCanvas/DevHuds.js.map +1 -0
  78. package/dist/canvas/SceneCanvas/GestureDispatcherMounter.js +126 -0
  79. package/dist/canvas/SceneCanvas/GestureDispatcherMounter.js.map +1 -0
  80. package/dist/canvas/SceneCanvas/PointerProviderIfRoot.js +27 -31
  81. package/dist/canvas/SceneCanvas/PointerProviderIfRoot.js.map +1 -1
  82. package/dist/canvas/SceneCanvas/StandardActionsRegistrar.js +64 -0
  83. package/dist/canvas/SceneCanvas/StandardActionsRegistrar.js.map +1 -0
  84. package/dist/canvas/SceneCanvas/ToolKeybindingsMounter.js +16 -0
  85. package/dist/canvas/SceneCanvas/ToolKeybindingsMounter.js.map +1 -0
  86. package/dist/canvas/SceneCanvas/coordTrace.js +46 -0
  87. package/dist/canvas/SceneCanvas/coordTrace.js.map +1 -0
  88. package/dist/canvas/SceneCanvas/defaultNodeProperties.js +138 -85
  89. package/dist/canvas/SceneCanvas/defaultNodeProperties.js.map +1 -1
  90. package/dist/canvas/SceneCanvas/defaultNodeRouting.js +9 -8
  91. package/dist/canvas/SceneCanvas/defaultNodeRouting.js.map +1 -1
  92. package/dist/canvas/SceneCanvas/dispatcherGestureBounds.js.map +1 -1
  93. package/dist/canvas/SceneCanvas/features.js +74 -43
  94. package/dist/canvas/SceneCanvas/features.js.map +1 -1
  95. package/dist/canvas/SceneCanvas/isDev.js +12 -0
  96. package/dist/canvas/SceneCanvas/isDev.js.map +1 -0
  97. package/dist/canvas/SceneCanvas/poseGeometry.js +31 -34
  98. package/dist/canvas/SceneCanvas/poseGeometry.js.map +1 -1
  99. package/dist/canvas/SceneCanvas/poseRegistrars.js +13 -0
  100. package/dist/canvas/SceneCanvas/poseRegistrars.js.map +1 -0
  101. package/dist/canvas/SceneCanvas/props.js +39 -0
  102. package/dist/canvas/SceneCanvas/props.js.map +1 -0
  103. package/dist/canvas/SceneCanvas/toolRegistry.js +23 -0
  104. package/dist/canvas/SceneCanvas/toolRegistry.js.map +1 -0
  105. package/dist/canvas/SceneCanvas/useActionsPropResolver.js +6 -1
  106. package/dist/canvas/SceneCanvas/useActionsPropResolver.js.map +1 -1
  107. package/dist/canvas/SceneCanvas/useBuiltinShapeTools.js +21 -62
  108. package/dist/canvas/SceneCanvas/useBuiltinShapeTools.js.map +1 -1
  109. package/dist/canvas/SceneCanvas/useBuiltinTools.js +21 -0
  110. package/dist/canvas/SceneCanvas/useBuiltinTools.js.map +1 -0
  111. package/dist/canvas/SceneCanvas/useCanvasCamera.js +38 -0
  112. package/dist/canvas/SceneCanvas/useCanvasCamera.js.map +1 -0
  113. package/dist/canvas/SceneCanvas/useCanvasDispatcher.js +20 -0
  114. package/dist/canvas/SceneCanvas/useCanvasDispatcher.js.map +1 -0
  115. package/dist/canvas/SceneCanvas/useCanvasSelection.js +16 -0
  116. package/dist/canvas/SceneCanvas/useCanvasSelection.js.map +1 -0
  117. package/dist/canvas/SceneCanvas/useCanvasTools.js +67 -0
  118. package/dist/canvas/SceneCanvas/useCanvasTools.js.map +1 -0
  119. package/dist/canvas/SceneCanvas/useDispatcherOverlayLayer.js +29 -29
  120. package/dist/canvas/SceneCanvas/useDispatcherOverlayLayer.js.map +1 -1
  121. package/dist/canvas/SceneCanvas/useHeldModifiers.js +20 -0
  122. package/dist/canvas/SceneCanvas/useHeldModifiers.js.map +1 -0
  123. package/dist/canvas/SceneCanvas/useNodeAtPoint.js +26 -0
  124. package/dist/canvas/SceneCanvas/useNodeAtPoint.js.map +1 -0
  125. package/dist/canvas/SceneCanvas/useNodeKinds.js +26 -0
  126. package/dist/canvas/SceneCanvas/useNodeKinds.js.map +1 -0
  127. package/dist/canvas/SceneCanvas/usePreviewGhostLayer.js +48 -48
  128. package/dist/canvas/SceneCanvas/usePreviewGhostLayer.js.map +1 -1
  129. package/dist/canvas/SceneCanvas/useSceneCanvasHandle.js +47 -0
  130. package/dist/canvas/SceneCanvas/useSceneCanvasHandle.js.map +1 -0
  131. package/dist/canvas/SceneCanvas/useSceneCanvasLayers.js +66 -0
  132. package/dist/canvas/SceneCanvas/useSceneCanvasLayers.js.map +1 -0
  133. package/dist/canvas/SceneCanvas/useSceneChrome.js +59 -0
  134. package/dist/canvas/SceneCanvas/useSceneChrome.js.map +1 -0
  135. package/dist/canvas/SceneCanvas/useSceneRedrawSources.js +23 -0
  136. package/dist/canvas/SceneCanvas/useSceneRedrawSources.js.map +1 -0
  137. package/dist/canvas/SceneCanvas/useSceneSelectTool.js +74 -78
  138. package/dist/canvas/SceneCanvas/useSceneSelectTool.js.map +1 -1
  139. package/dist/canvas/SceneCanvas/useSceneSlotLayers.js +37 -0
  140. package/dist/canvas/SceneCanvas/useSceneSlotLayers.js.map +1 -0
  141. package/dist/canvas/SceneCanvas/useSelectionOverlayLayer.js +38 -0
  142. package/dist/canvas/SceneCanvas/useSelectionOverlayLayer.js.map +1 -0
  143. package/dist/canvas/SceneCanvas/useViewLayerGate.js +20 -0
  144. package/dist/canvas/SceneCanvas/useViewLayerGate.js.map +1 -0
  145. package/dist/canvas/SceneCanvas/useViewportActions.js +9 -1
  146. package/dist/canvas/SceneCanvas/useViewportActions.js.map +1 -1
  147. package/dist/canvas/SceneCanvas/worldPointAt.js +9 -0
  148. package/dist/canvas/SceneCanvas/worldPointAt.js.map +1 -0
  149. package/dist/canvas/SceneCanvas.js +311 -969
  150. package/dist/canvas/SceneCanvas.js.map +1 -1
  151. package/dist/canvas/SceneViewCanvas.js +42 -46
  152. package/dist/canvas/SceneViewCanvas.js.map +1 -1
  153. package/dist/canvas/adapterDerivedPath.js +26 -0
  154. package/dist/canvas/adapterDerivedPath.js.map +1 -0
  155. package/dist/canvas/affordanceAt.js +11 -1
  156. package/dist/canvas/affordanceAt.js.map +1 -1
  157. package/dist/canvas/buildSceneLayer.js +111 -0
  158. package/dist/canvas/buildSceneLayer.js.map +1 -0
  159. package/dist/canvas/buildSceneTree.js +16 -19
  160. package/dist/canvas/buildSceneTree.js.map +1 -1
  161. package/dist/canvas/canvasRenderer.js +67 -55
  162. package/dist/canvas/canvasRenderer.js.map +1 -1
  163. package/dist/canvas/colorOverrides.js.map +1 -1
  164. package/dist/canvas/defaultDrawOne.js +12 -12
  165. package/dist/canvas/defaultDrawOne.js.map +1 -1
  166. package/dist/canvas/deps/areaSelect.js +4 -4
  167. package/dist/canvas/deps/areaSelect.js.map +1 -1
  168. package/dist/canvas/deps/changes.js +13 -0
  169. package/dist/canvas/deps/changes.js.map +1 -0
  170. package/dist/canvas/deps/debug.js.map +1 -1
  171. package/dist/canvas/deps/editAnchors.js +38 -57
  172. package/dist/canvas/deps/editAnchors.js.map +1 -1
  173. package/dist/canvas/deps/geometryProjection.js.map +1 -1
  174. package/dist/canvas/deps/hitTestArea.js +31 -26
  175. package/dist/canvas/deps/hitTestArea.js.map +1 -1
  176. package/dist/canvas/deps/insert.js +130 -91
  177. package/dist/canvas/deps/insert.js.map +1 -1
  178. package/dist/canvas/deps/lassoSelect.js +5 -5
  179. package/dist/canvas/deps/lassoSelect.js.map +1 -1
  180. package/dist/canvas/deps/poseDescriptor.js +1 -1
  181. package/dist/canvas/deps/poseDescriptor.js.map +1 -1
  182. package/dist/canvas/deps/resizePolicy.js.map +1 -1
  183. package/dist/canvas/deps/slice.js +26 -26
  184. package/dist/canvas/deps/slice.js.map +1 -1
  185. package/dist/canvas/deps/textEdit.js +6 -5
  186. package/dist/canvas/deps/textEdit.js.map +1 -1
  187. package/dist/canvas/deps/view.js.map +1 -1
  188. package/dist/canvas/derivedPath.js +47 -22
  189. package/dist/canvas/derivedPath.js.map +1 -1
  190. package/dist/canvas/drawEnvelope.js +8 -4
  191. package/dist/canvas/drawEnvelope.js.map +1 -1
  192. package/dist/canvas/getNodeAtPoint.js +4 -8
  193. package/dist/canvas/getNodeAtPoint.js.map +1 -1
  194. package/dist/canvas/hud.module.js +1 -1
  195. package/dist/canvas/hud.module.js.map +1 -1
  196. package/dist/canvas/insertPreviewExtent.js.map +1 -1
  197. package/dist/canvas/kitRequirements.js +2 -2
  198. package/dist/canvas/kitRequirements.js.map +1 -1
  199. package/dist/canvas/layerOrder.js +13 -6
  200. package/dist/canvas/layerOrder.js.map +1 -1
  201. package/dist/canvas/layerSlots.js +6 -1
  202. package/dist/canvas/layerSlots.js.map +1 -1
  203. package/dist/canvas/nodeShapes/derivedPainter.js +34 -0
  204. package/dist/canvas/nodeShapes/derivedPainter.js.map +1 -0
  205. package/dist/canvas/nodeShapes/imagePainter.js +87 -0
  206. package/dist/canvas/nodeShapes/imagePainter.js.map +1 -0
  207. package/dist/canvas/nodeShapes/memo.js +9 -0
  208. package/dist/canvas/nodeShapes/memo.js.map +1 -0
  209. package/dist/canvas/nodeShapes/nodePaint.js +68 -0
  210. package/dist/canvas/nodeShapes/nodePaint.js.map +1 -0
  211. package/dist/canvas/nodeShapes/pathPainter.js +39 -0
  212. package/dist/canvas/nodeShapes/pathPainter.js.map +1 -0
  213. package/dist/canvas/nodeShapes/poseBox.js +20 -0
  214. package/dist/canvas/nodeShapes/poseBox.js.map +1 -0
  215. package/dist/canvas/nodeShapes/rectFallbackPainter.js +38 -0
  216. package/dist/canvas/nodeShapes/rectFallbackPainter.js.map +1 -0
  217. package/dist/canvas/nodeShapes/shapePainter.js +72 -0
  218. package/dist/canvas/nodeShapes/shapePainter.js.map +1 -0
  219. package/dist/canvas/nodeShapes/textPainter.js +55 -0
  220. package/dist/canvas/nodeShapes/textPainter.js.map +1 -0
  221. package/dist/canvas/overlayRoleStrokes.js.map +1 -1
  222. package/dist/canvas/paintCull.js +11 -14
  223. package/dist/canvas/paintCull.js.map +1 -1
  224. package/dist/{features/cursor → canvas}/paintedCursorLayer.js +2 -2
  225. package/dist/canvas/paintedCursorLayer.js.map +1 -0
  226. package/dist/canvas/pickWalk.js +59 -68
  227. package/dist/canvas/pickWalk.js.map +1 -1
  228. package/dist/canvas/planeClips.js +18 -19
  229. package/dist/canvas/planeClips.js.map +1 -1
  230. package/dist/canvas/poseCascade.js +41 -0
  231. package/dist/canvas/poseCascade.js.map +1 -0
  232. package/dist/canvas/poseRotation.js +9 -23
  233. package/dist/canvas/poseRotation.js.map +1 -1
  234. package/dist/canvas/rasterReadback.js +22 -0
  235. package/dist/canvas/rasterReadback.js.map +1 -0
  236. package/dist/canvas/renderDebugSnapshot.js +11 -11
  237. package/dist/canvas/renderDebugSnapshot.js.map +1 -1
  238. package/dist/canvas/renderNeeds.js +3 -3
  239. package/dist/canvas/renderNeeds.js.map +1 -1
  240. package/dist/canvas/renderSceneToPixels.js +64 -81
  241. package/dist/canvas/renderSceneToPixels.js.map +1 -1
  242. package/dist/canvas/sceneAdapter.js +68 -214
  243. package/dist/canvas/sceneAdapter.js.map +1 -1
  244. package/dist/canvas/sceneClipboard.js +112 -0
  245. package/dist/canvas/sceneClipboard.js.map +1 -0
  246. package/dist/canvas/sceneLayerPaint.js +4 -4
  247. package/dist/canvas/sceneLayerPaint.js.map +1 -1
  248. package/dist/canvas/sceneSlotWiring.js.map +1 -1
  249. package/dist/canvas/sceneViewRender.js +39 -39
  250. package/dist/canvas/sceneViewRender.js.map +1 -1
  251. package/dist/canvas/slopsDebugLayer.js +4 -4
  252. package/dist/canvas/slopsDebugLayer.js.map +1 -1
  253. package/dist/canvas/surface.module.js +6 -0
  254. package/dist/canvas/surface.module.js.map +1 -0
  255. package/dist/canvas/surfaceBox.js +16 -0
  256. package/dist/canvas/surfaceBox.js.map +1 -0
  257. package/dist/canvas/useCanvasRenderer.js +26 -6
  258. package/dist/canvas/useCanvasRenderer.js.map +1 -1
  259. package/dist/canvas/useCanvasSurface.js +31 -0
  260. package/dist/canvas/useCanvasSurface.js.map +1 -0
  261. package/dist/canvas/useCanvasView.js +67 -0
  262. package/dist/canvas/useCanvasView.js.map +1 -0
  263. package/dist/canvas/useFrameLoop.js +39 -31
  264. package/dist/canvas/useFrameLoop.js.map +1 -1
  265. package/dist/canvas/useHostAnchor.js +35 -33
  266. package/dist/canvas/useHostAnchor.js.map +1 -1
  267. package/dist/canvas/useLateContentRedraw.js +8 -8
  268. package/dist/canvas/useLateContentRedraw.js.map +1 -1
  269. package/dist/canvas/useSceneLayerList.js +11 -0
  270. package/dist/canvas/useSceneLayerList.js.map +1 -0
  271. package/dist/canvas/useSurfaceInput.js +42 -0
  272. package/dist/canvas/useSurfaceInput.js.map +1 -0
  273. package/dist/canvas/useToolCursor.js +29 -0
  274. package/dist/canvas/useToolCursor.js.map +1 -0
  275. package/dist/canvas/useViewHelpers.js +46 -85
  276. package/dist/canvas/useViewHelpers.js.map +1 -1
  277. package/dist/canvas/viewInputs.js.map +1 -1
  278. package/dist/canvas/viewRegistry.js +25 -27
  279. package/dist/canvas/viewRegistry.js.map +1 -1
  280. package/dist/canvas/watchElementMove.js +43 -0
  281. package/dist/canvas/watchElementMove.js.map +1 -0
  282. package/dist/canvas/wrapNodeOutput.js.map +1 -1
  283. package/dist/clipboard.d.ts +16 -19
  284. package/dist/{types-B_9g6hMM.d.ts → clone-2a5hVbBd.d.ts} +123 -74
  285. package/dist/clone.d.ts +4 -7
  286. package/dist/clone.js +0 -2
  287. package/dist/core/device/index.js +5 -4
  288. package/dist/core/device/targets.js.map +1 -1
  289. package/dist/core/device/useDeviceProfile.js +38 -44
  290. package/dist/core/device/useDeviceProfile.js.map +1 -1
  291. package/dist/core/device/watchDevicePixelRatio.js +17 -0
  292. package/dist/core/device/watchDevicePixelRatio.js.map +1 -0
  293. package/dist/{interactions/actions/resize → core/geometry}/autoPoseDescriptor.js +8 -7
  294. package/dist/core/geometry/autoPoseDescriptor.js.map +1 -0
  295. package/dist/core/geometry/pathPoseDescriptor.js +88 -0
  296. package/dist/core/geometry/pathPoseDescriptor.js.map +1 -0
  297. package/dist/core/geometry/poseDescriptor.js +68 -19
  298. package/dist/core/geometry/poseDescriptor.js.map +1 -1
  299. package/dist/core/geometry/regionHit.js +31 -34
  300. package/dist/core/geometry/regionHit.js.map +1 -1
  301. package/dist/core/geometry/targetFrame.js +94 -0
  302. package/dist/core/geometry/targetFrame.js.map +1 -0
  303. package/dist/core/geometry/unionBounds.js +30 -29
  304. package/dist/core/geometry/unionBounds.js.map +1 -1
  305. package/dist/core/isPlainObject.js +2 -11
  306. package/dist/core/layers/backgroundFill.js +31 -0
  307. package/dist/core/layers/backgroundFill.js.map +1 -0
  308. package/dist/{features/groups → core/layers}/children.js +1 -1
  309. package/dist/core/layers/children.js.map +1 -0
  310. package/dist/core/layers/gateLayer.js +13 -0
  311. package/dist/core/layers/gateLayer.js.map +1 -0
  312. package/dist/core/layers/layerGroup.js +40 -0
  313. package/dist/core/layers/layerGroup.js.map +1 -0
  314. package/dist/core/layers/render.js +50 -76
  315. package/dist/core/layers/render.js.map +1 -1
  316. package/dist/core/ops/arrange.js +1 -0
  317. package/dist/core/ops/arrange.js.map +1 -1
  318. package/dist/core/ops/create.js +10 -5
  319. package/dist/core/ops/create.js.map +1 -1
  320. package/dist/core/ops/createHistory.js +9 -9
  321. package/dist/core/ops/createHistory.js.map +1 -1
  322. package/dist/core/ops/delete.js +12 -24
  323. package/dist/core/ops/delete.js.map +1 -1
  324. package/dist/core/ops/reorder/index.js +43 -40
  325. package/dist/core/ops/reorder/index.js.map +1 -1
  326. package/dist/core/ops/reorder/setChildOrder.js +34 -0
  327. package/dist/core/ops/reorder/setChildOrder.js.map +1 -0
  328. package/dist/core/paint/meshKind.js +16 -0
  329. package/dist/core/paint/meshKind.js.map +1 -0
  330. package/dist/{features/meshPaint/lazyKind.js → core/paint/meshKindLazy.js} +282 -105
  331. package/dist/core/paint/meshKindLazy.js.map +1 -0
  332. package/dist/core/paint/paintKindEntry.js +8 -0
  333. package/dist/core/paint/paintKindEntry.js.map +1 -0
  334. package/dist/core/paint/paintKinds.js +144 -0
  335. package/dist/core/paint/paintKinds.js.map +1 -0
  336. package/dist/core/paint/registerMesh.js +7 -0
  337. package/dist/core/paint/registerMesh.js.map +1 -0
  338. package/dist/core/scene/NodeProperties.js.map +1 -1
  339. package/dist/core/scene/NodeRouting.js.map +1 -1
  340. package/dist/core/scene/appliedLog.js +37 -0
  341. package/dist/core/scene/appliedLog.js.map +1 -0
  342. package/dist/core/scene/arrivalWindow.js +102 -0
  343. package/dist/core/scene/arrivalWindow.js.map +1 -0
  344. package/dist/core/scene/boundOps.js +40 -0
  345. package/dist/core/scene/boundOps.js.map +1 -0
  346. package/dist/core/scene/composeFrame.js +9 -6
  347. package/dist/core/scene/composeFrame.js.map +1 -1
  348. package/dist/{features/groups → core/scene}/composePose.js +18 -18
  349. package/dist/core/scene/composePose.js.map +1 -0
  350. package/dist/core/scene/depMemo.js +31 -6
  351. package/dist/core/scene/depMemo.js.map +1 -1
  352. package/dist/core/scene/derivedPath.js +19 -20
  353. package/dist/core/scene/derivedPath.js.map +1 -1
  354. package/dist/core/scene/editMode.js +26 -0
  355. package/dist/core/scene/editMode.js.map +1 -0
  356. package/dist/core/scene/effectivePose.js +38 -39
  357. package/dist/core/scene/effectivePose.js.map +1 -1
  358. package/dist/core/scene/fieldEdits.js +98 -0
  359. package/dist/core/scene/fieldEdits.js.map +1 -0
  360. package/dist/core/scene/historyFacade.js +130 -0
  361. package/dist/core/scene/historyFacade.js.map +1 -0
  362. package/dist/core/scene/historyForm.js +6 -0
  363. package/dist/core/scene/historyForm.js.map +1 -0
  364. package/dist/core/scene/kitOps.js +185 -0
  365. package/dist/core/scene/kitOps.js.map +1 -0
  366. package/dist/core/scene/kitRegistry.js.map +1 -1
  367. package/dist/core/scene/layerStack.js +131 -0
  368. package/dist/core/scene/layerStack.js.map +1 -0
  369. package/dist/core/scene/layoutPass.js +58 -59
  370. package/dist/core/scene/layoutPass.js.map +1 -1
  371. package/dist/core/scene/lockGuard.js +37 -0
  372. package/dist/core/scene/lockGuard.js.map +1 -0
  373. package/dist/{features/groups → core/scene}/nestedHit.js +3 -3
  374. package/dist/core/scene/nestedHit.js.map +1 -0
  375. package/dist/core/scene/nodeFnFields.js +10 -11
  376. package/dist/core/scene/nodeFnFields.js.map +1 -1
  377. package/dist/core/scene/nodeMemo.js +45 -19
  378. package/dist/core/scene/nodeMemo.js.map +1 -1
  379. package/dist/core/scene/nodeStore.js +127 -0
  380. package/dist/core/scene/nodeStore.js.map +1 -0
  381. package/dist/core/scene/notifier.js +37 -0
  382. package/dist/core/scene/notifier.js.map +1 -0
  383. package/dist/core/scene/opTable.js +50 -0
  384. package/dist/core/scene/opTable.js.map +1 -0
  385. package/dist/core/scene/outerOps.js +66 -0
  386. package/dist/core/scene/outerOps.js.map +1 -0
  387. package/dist/core/scene/poseFeed.js +38 -38
  388. package/dist/core/scene/poseFeed.js.map +1 -1
  389. package/dist/core/scene/poseHold.js +39 -0
  390. package/dist/core/scene/poseHold.js.map +1 -0
  391. package/dist/core/scene/poseOverrides.js +44 -40
  392. package/dist/core/scene/poseOverrides.js.map +1 -1
  393. package/dist/core/scene/poseSnapshot.js.map +1 -1
  394. package/dist/core/scene/reconcileSpecs.js +3 -2
  395. package/dist/core/scene/reconcileSpecs.js.map +1 -1
  396. package/dist/core/scene/recorder.js +86 -0
  397. package/dist/core/scene/recorder.js.map +1 -0
  398. package/dist/core/scene/renderOrder.js +84 -0
  399. package/dist/core/scene/renderOrder.js.map +1 -0
  400. package/dist/core/scene/scene.js +80 -1266
  401. package/dist/core/scene/scene.js.map +1 -1
  402. package/dist/core/scene/sceneEdits.js +58 -0
  403. package/dist/core/scene/sceneEdits.js.map +1 -0
  404. package/dist/core/scene/sceneMutators.js +49 -0
  405. package/dist/core/scene/sceneMutators.js.map +1 -0
  406. package/dist/core/scene/scenePoseAdapter.js +16 -0
  407. package/dist/core/scene/scenePoseAdapter.js.map +1 -0
  408. package/dist/core/scene/sceneRecording.js +90 -0
  409. package/dist/core/scene/sceneRecording.js.map +1 -0
  410. package/dist/core/scene/sceneSelection.js +28 -0
  411. package/dist/core/scene/sceneSelection.js.map +1 -0
  412. package/dist/core/scene/sceneState.js +49 -0
  413. package/dist/core/scene/sceneState.js.map +1 -0
  414. package/dist/core/scene/serialization.js +71 -0
  415. package/dist/core/scene/serialization.js.map +1 -0
  416. package/dist/core/scene/staleReplay.js +51 -0
  417. package/dist/core/scene/staleReplay.js.map +1 -0
  418. package/dist/core/scene/statedFields.js +9 -0
  419. package/dist/core/scene/statedFields.js.map +1 -0
  420. package/dist/core/scene/treeEdits.js +127 -0
  421. package/dist/core/scene/treeEdits.js.map +1 -0
  422. package/dist/core/scene/treeOrder.js +13 -0
  423. package/dist/core/scene/treeOrder.js.map +1 -0
  424. package/dist/core/scene/treeReads.js +26 -0
  425. package/dist/core/scene/treeReads.js.map +1 -0
  426. package/dist/core/scene/types.js.map +1 -1
  427. package/dist/{features/groups → core/scene}/unionOfChildren.js +3 -3
  428. package/dist/core/scene/unionOfChildren.js.map +1 -0
  429. package/dist/core/scene/unitScopes.js +13 -0
  430. package/dist/core/scene/unitScopes.js.map +1 -0
  431. package/dist/core/scene/useScene.js.map +1 -1
  432. package/dist/core/selection/readOnlySelection.js +32 -0
  433. package/dist/core/selection/readOnlySelection.js.map +1 -0
  434. package/dist/core/selection/usePublishSceneSelection.js +26 -0
  435. package/dist/core/selection/usePublishSceneSelection.js.map +1 -0
  436. package/dist/core/selection/useSelection.js +34 -25
  437. package/dist/core/selection/useSelection.js.map +1 -1
  438. package/dist/core/shapeKinds.js.map +1 -1
  439. package/dist/core/stylus/stylus.js.map +1 -1
  440. package/dist/core/stylus/usePointerStylus.js.map +1 -1
  441. package/dist/core/usePaintKinds.js +1 -1
  442. package/dist/core/usePaintKinds.js.map +1 -1
  443. package/dist/core/viewport/clientToWorld.js.map +1 -1
  444. package/dist/core/viewport/fitViewToBounds.js.map +1 -1
  445. package/dist/core/viewport/parallax.js.map +1 -1
  446. package/dist/core/viewport/screenSlop.js +11 -11
  447. package/dist/core/viewport/screenSlop.js.map +1 -1
  448. package/dist/core/viewport/useCanvasSize.js.map +1 -1
  449. package/dist/core/viewport/useDecayLoop.js +8 -8
  450. package/dist/core/viewport/useDecayLoop.js.map +1 -1
  451. package/dist/core/viewport/useNodeOverlayFrame.js +84 -0
  452. package/dist/core/viewport/useNodeOverlayFrame.js.map +1 -0
  453. package/dist/core/viewport/useViewAnimation.js +102 -43
  454. package/dist/core/viewport/useViewAnimation.js.map +1 -1
  455. package/dist/core/viewport/view.js +9 -9
  456. package/dist/core/viewport/view.js.map +1 -1
  457. package/dist/core/viewport/wheelHandler.js.map +1 -1
  458. package/dist/core/viewport/zoomBounds.js +10 -8
  459. package/dist/core/viewport/zoomBounds.js.map +1 -1
  460. package/dist/{cornerHandles-BCrDp_mH.d.ts → cornerHandles-BEshc4z3.d.ts} +11 -24
  461. package/dist/debug/createDebugOverlayLayer.js +97 -97
  462. package/dist/debug/createDebugOverlayLayer.js.map +1 -1
  463. package/dist/debug/createDebugSink.js.map +1 -1
  464. package/dist/debug/flag.js +2 -41
  465. package/dist/debug/frameStats.js.map +1 -1
  466. package/dist/debug/useDebugSink.js +52 -0
  467. package/dist/debug/useDebugSink.js.map +1 -0
  468. package/dist/features/chrome-caps/buildChromeCtx.js.map +1 -1
  469. package/dist/features/chrome-caps/conditions.js.map +1 -1
  470. package/dist/features/chrome-caps/defaults.js.map +1 -1
  471. package/dist/features/chrome-caps/resolve.js.map +1 -1
  472. package/dist/features/chrome-caps/useChromeCaps.js +54 -0
  473. package/dist/features/chrome-caps/useChromeCaps.js.map +1 -0
  474. package/dist/features/chrome-caps/useHoverTracking.js +22 -17
  475. package/dist/features/chrome-caps/useHoverTracking.js.map +1 -1
  476. package/dist/features/ingestion/contentHandlers.js +28 -19
  477. package/dist/features/ingestion/contentHandlers.js.map +1 -1
  478. package/dist/features/ingestion/imageHandler.js +21 -24
  479. package/dist/features/ingestion/imageHandler.js.map +1 -1
  480. package/dist/features/ingestion/openFilePicker.js.map +1 -1
  481. package/dist/features/ingestion/placement.js +16 -0
  482. package/dist/features/ingestion/placement.js.map +1 -0
  483. package/dist/features/ingestion/registerKitHandlers.js +7 -7
  484. package/dist/features/ingestion/svgHandler.js +5 -0
  485. package/dist/features/ingestion/svgHandler.js.map +1 -1
  486. package/dist/features/ingestion/textHandler.js +28 -0
  487. package/dist/features/ingestion/textHandler.js.map +1 -0
  488. package/dist/features/ingestion/useCanvasIngestion.js +48 -0
  489. package/dist/features/ingestion/useCanvasIngestion.js.map +1 -0
  490. package/dist/features/ingestion/weaselJsonHandler.js +22 -14
  491. package/dist/features/ingestion/weaselJsonHandler.js.map +1 -1
  492. package/dist/features/longPress/longPressFeedback.js.map +1 -1
  493. package/dist/features/modes/modeLayers.js +7 -7
  494. package/dist/features/modes/modeLayers.js.map +1 -1
  495. package/dist/features/paths/editablePath.js +47 -0
  496. package/dist/features/paths/editablePath.js.map +1 -0
  497. package/dist/features/paths/index.js +9 -14
  498. package/dist/features/paths/pathEditState.js +41 -0
  499. package/dist/features/paths/pathEditState.js.map +1 -0
  500. package/dist/features/paths/pathEditingOverlayLayer.js +36 -38
  501. package/dist/features/paths/pathEditingOverlayLayer.js.map +1 -1
  502. package/dist/features/paths/pathLayer.js +3 -2
  503. package/dist/features/paths/pathLayer.js.map +1 -1
  504. package/dist/features/paths/penPreviewLayer.js +86 -88
  505. package/dist/features/paths/penPreviewLayer.js.map +1 -1
  506. package/dist/features/paths/usePathEdit.js +34 -0
  507. package/dist/features/paths/usePathEdit.js.map +1 -0
  508. package/dist/features/poseRun/usePoseRun.js +44 -52
  509. package/dist/features/poseRun/usePoseRun.js.map +1 -1
  510. package/dist/features/selection/overlay.js +171 -179
  511. package/dist/features/selection/overlay.js.map +1 -1
  512. package/dist/features/text/index.js +6 -0
  513. package/dist/features/text/textLayer.js +1 -1
  514. package/dist/features/text/textLayer.js.map +1 -1
  515. package/dist/features/text/useSceneTextEdit.js +100 -93
  516. package/dist/features/text/useSceneTextEdit.js.map +1 -1
  517. package/dist/features/viewports/viewportLayer.js +25 -36
  518. package/dist/features/viewports/viewportLayer.js.map +1 -1
  519. package/dist/index.d.ts +8473 -9141
  520. package/dist/index.js +269 -307
  521. package/dist/input/keyState.js +38 -39
  522. package/dist/input/keyState.js.map +1 -1
  523. package/dist/input/useKeyModifiers.js +11 -0
  524. package/dist/input/useKeyModifiers.js.map +1 -0
  525. package/dist/interactions/actions/actionShortcuts.js.map +1 -1
  526. package/dist/interactions/actions/{defaults/align.js → align/action.js} +18 -20
  527. package/dist/interactions/actions/align/action.js.map +1 -0
  528. package/dist/interactions/actions/align/align.js +20 -20
  529. package/dist/interactions/actions/align/align.js.map +1 -1
  530. package/dist/interactions/actions/booleans/action.js +65 -0
  531. package/dist/interactions/actions/booleans/action.js.map +1 -0
  532. package/dist/interactions/actions/booleans/booleans.js +69 -78
  533. package/dist/interactions/actions/booleans/booleans.js.map +1 -1
  534. package/dist/interactions/actions/booleans/operands.js +40 -0
  535. package/dist/interactions/actions/booleans/operands.js.map +1 -0
  536. package/dist/interactions/actions/booleans/pieces.js +45 -0
  537. package/dist/interactions/actions/booleans/pieces.js.map +1 -0
  538. package/dist/interactions/actions/booleans/placement.js +24 -0
  539. package/dist/interactions/actions/booleans/placement.js.map +1 -0
  540. package/dist/interactions/actions/booleans/useBooleans.js +11 -9
  541. package/dist/interactions/actions/booleans/useBooleans.js.map +1 -1
  542. package/dist/interactions/actions/booleans/useBooleansAdapter.js.map +1 -1
  543. package/dist/interactions/actions/{defaults/clipboard.js → clipboard/action.js} +31 -15
  544. package/dist/interactions/actions/clipboard/action.js.map +1 -0
  545. package/dist/interactions/actions/clipboard/clipboardOps.js +44 -42
  546. package/dist/interactions/actions/clipboard/clipboardOps.js.map +1 -1
  547. package/dist/interactions/actions/clipboard/materializePaste.js +10 -7
  548. package/dist/interactions/actions/clipboard/materializePaste.js.map +1 -1
  549. package/dist/interactions/actions/clipboard/wireFormat.js.map +1 -1
  550. package/dist/interactions/actions/clone/action.js +98 -0
  551. package/dist/interactions/actions/clone/action.js.map +1 -0
  552. package/dist/interactions/actions/clone/behaviors.js +52 -0
  553. package/dist/interactions/actions/clone/behaviors.js.map +1 -0
  554. package/dist/interactions/actions/defaultCommitAdapter.js +7 -32
  555. package/dist/interactions/actions/defaultCommitAdapter.js.map +1 -1
  556. package/dist/interactions/actions/defaults/anchorEditing.js +60 -84
  557. package/dist/interactions/actions/defaults/anchorEditing.js.map +1 -1
  558. package/dist/interactions/actions/defaults/areaSelect.js +35 -38
  559. package/dist/interactions/actions/defaults/areaSelect.js.map +1 -1
  560. package/dist/interactions/actions/defaults/cancelGesture.js.map +1 -1
  561. package/dist/interactions/actions/defaults/clearSelection.js.map +1 -1
  562. package/dist/interactions/actions/defaults/copySubtree.js +40 -0
  563. package/dist/interactions/actions/defaults/copySubtree.js.map +1 -0
  564. package/dist/interactions/actions/defaults/createPaintAction.js.map +1 -1
  565. package/dist/interactions/actions/defaults/delete.js.map +1 -1
  566. package/dist/interactions/actions/defaults/duplicate.js +13 -53
  567. package/dist/interactions/actions/defaults/duplicate.js.map +1 -1
  568. package/dist/interactions/actions/defaults/enterTextEdit.js.map +1 -1
  569. package/dist/interactions/actions/defaults/group.js +40 -50
  570. package/dist/interactions/actions/defaults/group.js.map +1 -1
  571. package/dist/interactions/actions/defaults/icons/booleanIcons.js +24 -1
  572. package/dist/interactions/actions/defaults/icons/booleanIcons.js.map +1 -1
  573. package/dist/interactions/actions/defaults/icons/outlineIcons.js +39 -1
  574. package/dist/interactions/actions/defaults/icons/outlineIcons.js.map +1 -1
  575. package/dist/interactions/actions/defaults/ingest.js +44 -38
  576. package/dist/interactions/actions/defaults/ingest.js.map +1 -1
  577. package/dist/interactions/actions/defaults/insertPathAnchor.js +11 -12
  578. package/dist/interactions/actions/defaults/insertPathAnchor.js.map +1 -1
  579. package/dist/interactions/actions/defaults/nudge.js +40 -69
  580. package/dist/interactions/actions/defaults/nudge.js.map +1 -1
  581. package/dist/interactions/actions/defaults/nudgeSteps.js +37 -0
  582. package/dist/interactions/actions/defaults/nudgeSteps.js.map +1 -0
  583. package/dist/interactions/actions/defaults/pinchZoom.js.map +1 -1
  584. package/dist/interactions/actions/defaults/reorder.js +2 -0
  585. package/dist/interactions/actions/defaults/reorder.js.map +1 -1
  586. package/dist/interactions/actions/defaults/requiresSelection.js.map +1 -1
  587. package/dist/interactions/actions/defaults/setFill.js +14 -8
  588. package/dist/interactions/actions/defaults/setFill.js.map +1 -1
  589. package/dist/interactions/actions/defaults/setFillOpacity.js +7 -4
  590. package/dist/interactions/actions/defaults/setFillOpacity.js.map +1 -1
  591. package/dist/interactions/actions/defaults/setStroke.js +12 -12
  592. package/dist/interactions/actions/defaults/setStroke.js.map +1 -1
  593. package/dist/interactions/actions/defaults/setStrokeOpacity.js +6 -6
  594. package/dist/interactions/actions/defaults/sliceOps.js +8 -10
  595. package/dist/interactions/actions/defaults/sliceOps.js.map +1 -1
  596. package/dist/interactions/actions/defaults/toolActivate.js.map +1 -1
  597. package/dist/interactions/actions/defaults/toolResetToDefault.js.map +1 -1
  598. package/dist/interactions/actions/defaults/viewportDragPan.js +37 -26
  599. package/dist/interactions/actions/defaults/viewportDragPan.js.map +1 -1
  600. package/dist/interactions/actions/defaults/viewportWheelPan.js.map +1 -1
  601. package/dist/interactions/actions/defaults/viewportZoom.js.map +1 -1
  602. package/dist/interactions/actions/distribute/action.js +66 -0
  603. package/dist/interactions/actions/distribute/action.js.map +1 -0
  604. package/dist/interactions/actions/distribute/distribute.js +11 -11
  605. package/dist/interactions/actions/distribute/distribute.js.map +1 -1
  606. package/dist/interactions/actions/{defaults/editAnchors.js → edit-anchors/action.js} +7 -9
  607. package/dist/interactions/actions/edit-anchors/action.js.map +1 -0
  608. package/dist/interactions/actions/edit-anchors/geometry.js +30 -27
  609. package/dist/interactions/actions/edit-anchors/geometry.js.map +1 -1
  610. package/dist/interactions/actions/flip/action.js +124 -0
  611. package/dist/interactions/actions/flip/action.js.map +1 -0
  612. package/dist/interactions/actions/flip/helpers.js +30 -17
  613. package/dist/interactions/actions/flip/helpers.js.map +1 -1
  614. package/dist/interactions/actions/gestureFrames.js +18 -0
  615. package/dist/interactions/actions/gestureFrames.js.map +1 -0
  616. package/dist/interactions/actions/gestureLifecycle.js +47 -20
  617. package/dist/interactions/actions/gestureLifecycle.js.map +1 -1
  618. package/dist/interactions/actions/hitSelection.js +8 -0
  619. package/dist/interactions/actions/hitSelection.js.map +1 -0
  620. package/dist/interactions/actions/insert/action.js +72 -0
  621. package/dist/interactions/actions/insert/action.js.map +1 -0
  622. package/dist/interactions/actions/insert/commit.js +28 -0
  623. package/dist/interactions/actions/insert/commit.js.map +1 -0
  624. package/dist/interactions/actions/insert/extras.js +65 -0
  625. package/dist/interactions/actions/insert/extras.js.map +1 -0
  626. package/dist/interactions/actions/insert/frame.js +48 -0
  627. package/dist/interactions/actions/insert/frame.js.map +1 -0
  628. package/dist/interactions/actions/insert/geometry.js +35 -0
  629. package/dist/interactions/actions/insert/geometry.js.map +1 -0
  630. package/dist/interactions/actions/insert/rotateAction.js +21 -0
  631. package/dist/interactions/actions/insert/rotateAction.js.map +1 -0
  632. package/dist/interactions/actions/insert/session.js +59 -0
  633. package/dist/interactions/actions/insert/session.js.map +1 -0
  634. package/dist/interactions/actions/insert/shape.js +34 -0
  635. package/dist/interactions/actions/insert/shape.js.map +1 -0
  636. package/dist/interactions/actions/lasso-select/action.js +143 -0
  637. package/dist/interactions/actions/lasso-select/action.js.map +1 -0
  638. package/dist/interactions/actions/lasso-select/behaviors/selectFromLasso.js +14 -18
  639. package/dist/interactions/actions/lasso-select/behaviors/selectFromLasso.js.map +1 -1
  640. package/dist/interactions/actions/move/action.js +87 -0
  641. package/dist/interactions/actions/move/action.js.map +1 -0
  642. package/dist/interactions/actions/move/behaviors/layoutDrop.js +51 -0
  643. package/dist/interactions/actions/move/behaviors/layoutDrop.js.map +1 -0
  644. package/dist/interactions/actions/move/behaviors/reparentOnDrop.js +15 -0
  645. package/dist/interactions/actions/move/behaviors/reparentOnDrop.js.map +1 -0
  646. package/dist/interactions/actions/move/behaviors/snapBackOrDelete.js +5 -5
  647. package/dist/interactions/actions/move/behaviors/snapBackOrDelete.js.map +1 -1
  648. package/dist/interactions/actions/move/behaviors/snapToContainer.js +39 -27
  649. package/dist/interactions/actions/move/behaviors/snapToContainer.js.map +1 -1
  650. package/dist/interactions/actions/move/capture.js +99 -0
  651. package/dist/interactions/actions/move/capture.js.map +1 -0
  652. package/dist/interactions/actions/move/commit/index.js +41 -0
  653. package/dist/interactions/actions/move/commit/index.js.map +1 -0
  654. package/dist/interactions/actions/move/commit/layoutDrop.js +44 -0
  655. package/dist/interactions/actions/move/commit/layoutDrop.js.map +1 -0
  656. package/dist/interactions/actions/move/commit/layoutRelease.js +100 -0
  657. package/dist/interactions/actions/move/commit/layoutRelease.js.map +1 -0
  658. package/dist/interactions/actions/move/commit/rebase.js +18 -0
  659. package/dist/interactions/actions/move/commit/rebase.js.map +1 -0
  660. package/dist/interactions/actions/move/commit/reparent.js +65 -0
  661. package/dist/interactions/actions/move/commit/reparent.js.map +1 -0
  662. package/dist/interactions/actions/move/delta.js +51 -0
  663. package/dist/interactions/actions/move/delta.js.map +1 -0
  664. package/dist/interactions/actions/move/frame.js +59 -0
  665. package/dist/interactions/actions/move/frame.js.map +1 -0
  666. package/dist/interactions/actions/move/gestureAdapter.js +22 -30
  667. package/dist/interactions/actions/move/gestureAdapter.js.map +1 -1
  668. package/dist/interactions/actions/move/landedDescendants.js +33 -0
  669. package/dist/interactions/actions/move/landedDescendants.js.map +1 -0
  670. package/dist/interactions/actions/move/layout/container.js +94 -0
  671. package/dist/interactions/actions/move/layout/container.js.map +1 -0
  672. package/dist/interactions/actions/move/layout/dragged.js +58 -0
  673. package/dist/interactions/actions/move/layout/dragged.js.map +1 -0
  674. package/dist/interactions/actions/move/layout/dropPass.js +122 -0
  675. package/dist/interactions/actions/move/layout/dropPass.js.map +1 -0
  676. package/dist/interactions/actions/move/layout/exits.js +38 -0
  677. package/dist/interactions/actions/move/layout/exits.js.map +1 -0
  678. package/dist/interactions/actions/move/layout/glide.js +48 -0
  679. package/dist/interactions/actions/move/layout/glide.js.map +1 -0
  680. package/dist/interactions/actions/move/session.js +63 -0
  681. package/dist/interactions/actions/move/session.js.map +1 -0
  682. package/dist/interactions/actions/move/translate.js +61 -0
  683. package/dist/interactions/actions/move/translate.js.map +1 -0
  684. package/dist/interactions/actions/outlines/createOutlines.js +16 -63
  685. package/dist/interactions/actions/outlines/createOutlines.js.map +1 -1
  686. package/dist/interactions/actions/outlines/createOutlinesAction.js +51 -0
  687. package/dist/interactions/actions/outlines/createOutlinesAction.js.map +1 -0
  688. package/dist/interactions/actions/outlines/outlineStroke.js +72 -0
  689. package/dist/interactions/actions/outlines/outlineStroke.js.map +1 -0
  690. package/dist/interactions/actions/outlines/outlineStrokeAction.js +37 -0
  691. package/dist/interactions/actions/outlines/outlineStrokeAction.js.map +1 -0
  692. package/dist/interactions/actions/outlines/replaceWithPaths.js +54 -0
  693. package/dist/interactions/actions/outlines/replaceWithPaths.js.map +1 -0
  694. package/dist/interactions/actions/outlines/strokeRegion.js +27 -0
  695. package/dist/interactions/actions/outlines/strokeRegion.js.map +1 -0
  696. package/dist/interactions/actions/planeInput.js.map +1 -1
  697. package/dist/interactions/actions/pointerState.js +12 -0
  698. package/dist/interactions/actions/pointerState.js.map +1 -0
  699. package/dist/interactions/actions/poseDescriptorDep.js +16 -4
  700. package/dist/interactions/actions/poseDescriptorDep.js.map +1 -1
  701. package/dist/interactions/actions/poseFrame.js +25 -20
  702. package/dist/interactions/actions/poseFrame.js.map +1 -1
  703. package/dist/interactions/actions/resize/action.js +55 -0
  704. package/dist/interactions/actions/resize/action.js.map +1 -0
  705. package/dist/interactions/actions/resize/behaviors/lockAspect.js.map +1 -1
  706. package/dist/interactions/actions/resize/boxFrame.js +16 -0
  707. package/dist/interactions/actions/resize/boxFrame.js.map +1 -0
  708. package/dist/interactions/actions/resize/capture.js +85 -0
  709. package/dist/interactions/actions/resize/capture.js.map +1 -0
  710. package/dist/interactions/actions/resize/commit.js +69 -0
  711. package/dist/interactions/actions/resize/commit.js.map +1 -0
  712. package/dist/interactions/actions/resize/frame.js +74 -0
  713. package/dist/interactions/actions/resize/frame.js.map +1 -0
  714. package/dist/interactions/actions/resize/pointSnap.js +111 -0
  715. package/dist/interactions/actions/resize/pointSnap.js.map +1 -0
  716. package/dist/interactions/actions/resize/ruleBounds.js +9 -0
  717. package/dist/interactions/actions/resize/ruleBounds.js.map +1 -0
  718. package/dist/interactions/actions/resize/session.js +49 -0
  719. package/dist/interactions/actions/resize/session.js.map +1 -0
  720. package/dist/interactions/actions/resolveOverlays.js.map +1 -1
  721. package/dist/interactions/actions/resolvePreviews.js.map +1 -1
  722. package/dist/interactions/actions/rotate/action.js +56 -0
  723. package/dist/interactions/actions/rotate/action.js.map +1 -0
  724. package/dist/interactions/actions/rotate/behaviors/index.js +7 -0
  725. package/dist/interactions/actions/rotate/behaviors/index.js.map +1 -0
  726. package/dist/interactions/actions/rotate/behaviors/snapRotation.js +12 -0
  727. package/dist/interactions/actions/rotate/behaviors/snapRotation.js.map +1 -0
  728. package/dist/interactions/actions/rotate/commit.js +40 -0
  729. package/dist/interactions/actions/rotate/commit.js.map +1 -0
  730. package/dist/interactions/actions/rotate/frame.js +65 -0
  731. package/dist/interactions/actions/rotate/frame.js.map +1 -0
  732. package/dist/interactions/actions/rotate/handle.js +12 -12
  733. package/dist/interactions/actions/rotate/handle.js.map +1 -1
  734. package/dist/interactions/actions/rotate/session.js +92 -0
  735. package/dist/interactions/actions/rotate/session.js.map +1 -0
  736. package/dist/interactions/actions/selectionSubtree.js +69 -0
  737. package/dist/interactions/actions/selectionSubtree.js.map +1 -0
  738. package/dist/interactions/actions/spatialReference.js.map +1 -1
  739. package/dist/interactions/actions/useStandardActions.js +87 -78
  740. package/dist/interactions/actions/useStandardActions.js.map +1 -1
  741. package/dist/interactions/gestures/dragGesture/dragGesture.js +4 -7
  742. package/dist/interactions/gestures/dragGesture/dragGesture.js.map +1 -1
  743. package/dist/interactions/gestures/dragGesture/dragPointOf.js +23 -0
  744. package/dist/interactions/gestures/dragGesture/dragPointOf.js.map +1 -0
  745. package/dist/interactions/gestures/handleDrag/handleDrag.js +21 -26
  746. package/dist/interactions/gestures/handleDrag/handleDrag.js.map +1 -1
  747. package/dist/interactions/gestures/pointerDrag/pointerDrag.js +62 -41
  748. package/dist/interactions/gestures/pointerDrag/pointerDrag.js.map +1 -1
  749. package/dist/interactions/gestures/shared/originProjection.js +1 -1
  750. package/dist/interactions/gestures/shared/originProjection.js.map +1 -1
  751. package/dist/interactions/gestures/shared/screenTolerance.js +8 -2
  752. package/dist/interactions/gestures/shared/screenTolerance.js.map +1 -1
  753. package/dist/interactions/gestures/shared/snap.js.map +1 -1
  754. package/dist/interactions/gestures/thresholdDrag/thresholdDrag.js +8 -4
  755. package/dist/interactions/gestures/thresholdDrag/thresholdDrag.js.map +1 -1
  756. package/dist/layout/arrivals.js +20 -23
  757. package/dist/layout/arrivals.js.map +1 -1
  758. package/dist/math-CYUjoyyU.d.ts +33 -0
  759. package/dist/math.d.ts +5 -3
  760. package/dist/math.js +6 -6
  761. package/dist/mesh.d.ts +4 -268
  762. package/dist/mesh.js +3 -7
  763. package/dist/move.d.ts +14 -11
  764. package/dist/{originProjection-DEklpDc_.d.ts → originProjection-PPT88jZv.d.ts} +1 -1
  765. package/dist/patterns-builtin.d.ts +1 -118
  766. package/dist/patterns-builtin.js +2 -3
  767. package/dist/{poseDescriptor-D-OH-tu5.d.ts → poseDescriptor-Bqk-11Rl.d.ts} +26 -36
  768. package/dist/renderer.d.ts +1 -91
  769. package/dist/renderer.js +2 -18
  770. package/dist/resize.d.ts +10 -22
  771. package/dist/resize.js +6 -6
  772. package/dist/style.css +1 -1
  773. package/dist/test-hook/install.js +12 -6
  774. package/dist/test-hook/install.js.map +1 -1
  775. package/dist/test-hook/useTestHook.js +22 -0
  776. package/dist/test-hook/useTestHook.js.map +1 -0
  777. package/dist/test-seams-D0pyV3pR.d.ts +149 -0
  778. package/dist/test-seams.d.ts +4 -4
  779. package/dist/test-seams.js +2 -2
  780. package/dist/tools/builtin/bone/boneActions.js +130 -0
  781. package/dist/tools/builtin/bone/boneActions.js.map +1 -0
  782. package/dist/tools/builtin/bone/boneOverlay.js +58 -0
  783. package/dist/tools/builtin/bone/boneOverlay.js.map +1 -0
  784. package/dist/tools/builtin/bone/placedRig.js +24 -0
  785. package/dist/tools/builtin/bone/placedRig.js.map +1 -0
  786. package/dist/tools/builtin/bone/rigEditState.js +21 -0
  787. package/dist/tools/builtin/bone/rigEditState.js.map +1 -0
  788. package/dist/tools/builtin/bone/useBoneTool.js +98 -0
  789. package/dist/tools/builtin/bone/useBoneTool.js.map +1 -0
  790. package/dist/tools/builtin/ellipse/useEllipseTool.js +1 -0
  791. package/dist/tools/builtin/ellipse/useEllipseTool.js.map +1 -1
  792. package/dist/tools/builtin/eyedropper/useEyedropperTool.js.map +1 -1
  793. package/dist/tools/builtin/hand/useHandTool.js +1 -0
  794. package/dist/tools/builtin/hand/useHandTool.js.map +1 -1
  795. package/dist/tools/builtin/image/useImageTool.js.map +1 -1
  796. package/dist/tools/builtin/lasso/useLassoTool.js +11 -11
  797. package/dist/tools/builtin/lasso/useLassoTool.js.map +1 -1
  798. package/dist/tools/builtin/line/useLineTool.js +1 -0
  799. package/dist/tools/builtin/line/useLineTool.js.map +1 -1
  800. package/dist/tools/builtin/pen/usePenTool.js +198 -150
  801. package/dist/tools/builtin/pen/usePenTool.js.map +1 -1
  802. package/dist/tools/builtin/pencil/usePencilTool.js +1 -0
  803. package/dist/tools/builtin/pencil/usePencilTool.js.map +1 -1
  804. package/dist/tools/builtin/pickTopMostHit.js.map +1 -1
  805. package/dist/tools/builtin/polygon/usePolygonTool.js +13 -8
  806. package/dist/tools/builtin/polygon/usePolygonTool.js.map +1 -1
  807. package/dist/tools/builtin/rect/useRectTool.js +1 -0
  808. package/dist/tools/builtin/rect/useRectTool.js.map +1 -1
  809. package/dist/tools/builtin/select/adapterPointQuery.js +36 -0
  810. package/dist/tools/builtin/select/adapterPointQuery.js.map +1 -0
  811. package/dist/tools/builtin/select/selectionContributions.js +25 -24
  812. package/dist/tools/builtin/select/selectionContributions.js.map +1 -1
  813. package/dist/tools/builtin/select/useSelectTool.js +42 -67
  814. package/dist/tools/builtin/select/useSelectTool.js.map +1 -1
  815. package/dist/tools/builtin/shared/pointerFollower.js +17 -0
  816. package/dist/tools/builtin/shared/pointerFollower.js.map +1 -0
  817. package/dist/tools/builtin/slice/useSliceTool.js +72 -82
  818. package/dist/tools/builtin/slice/useSliceTool.js.map +1 -1
  819. package/dist/tools/builtin/star/useStarTool.js +22 -16
  820. package/dist/tools/builtin/star/useStarTool.js.map +1 -1
  821. package/dist/tools/builtin/text/useTextTool.js +9 -0
  822. package/dist/tools/builtin/text/useTextTool.js.map +1 -1
  823. package/dist/tools/builtin/weight/useWeightTool.js +77 -0
  824. package/dist/tools/builtin/weight/useWeightTool.js.map +1 -0
  825. package/dist/tools/builtin/weight/weightActions.js +112 -0
  826. package/dist/tools/builtin/weight/weightActions.js.map +1 -0
  827. package/dist/tools/builtin/weight/weightOverlay.js +61 -0
  828. package/dist/tools/builtin/weight/weightOverlay.js.map +1 -0
  829. package/dist/tools/overlayBinding.js.map +1 -1
  830. package/dist/tools/useKeybindings.js +12 -22
  831. package/dist/tools/useKeybindings.js.map +1 -1
  832. package/dist/{types-A37hYkeR.d.ts → types-CIKDwlsP.d.ts} +113 -169
  833. package/dist/util/color.js +3 -3
  834. package/dist/util/color.js.map +1 -1
  835. package/dist/util/paint.js +1 -1
  836. package/dist/util/paint.js.map +1 -1
  837. package/dist/version.js +1 -1
  838. package/package.json +28 -21
  839. package/dist/animation/colorHelpers.js +0 -135
  840. package/dist/animation/colorHelpers.js.map +0 -1
  841. package/dist/animation/colorRegistry.js +0 -37
  842. package/dist/animation/colorRegistry.js.map +0 -1
  843. package/dist/animation/engine/axes.js +0 -36
  844. package/dist/animation/engine/axes.js.map +0 -1
  845. package/dist/animation/engine/codec.js +0 -170
  846. package/dist/animation/engine/codec.js.map +0 -1
  847. package/dist/animation/engine/integrator.js +0 -12
  848. package/dist/animation/engine/integrator.js.map +0 -1
  849. package/dist/animation/loop.js +0 -62
  850. package/dist/animation/loop.js.map +0 -1
  851. package/dist/animation/observe.js +0 -23
  852. package/dist/animation/observe.js.map +0 -1
  853. package/dist/animation/rig/blendPoses.js +0 -43
  854. package/dist/animation/rig/blendPoses.js.map +0 -1
  855. package/dist/animation/rig/mirrorPose.js +0 -19
  856. package/dist/animation/rig/mirrorPose.js.map +0 -1
  857. package/dist/animation/rig/resolveSkeleton.js +0 -33
  858. package/dist/animation/rig/resolveSkeleton.js.map +0 -1
  859. package/dist/animation/rig/solveIk.js +0 -103
  860. package/dist/animation/rig/solveIk.js.map +0 -1
  861. package/dist/animation/rig/types.js +0 -12
  862. package/dist/animation/rig/types.js.map +0 -1
  863. package/dist/animation/slew.js +0 -27
  864. package/dist/animation/slew.js.map +0 -1
  865. package/dist/animation/stagger.js +0 -138
  866. package/dist/animation/stagger.js.map +0 -1
  867. package/dist/animation/timeline/booking.js +0 -106
  868. package/dist/animation/timeline/booking.js.map +0 -1
  869. package/dist/animation/timeline/createTimeline.js +0 -116
  870. package/dist/animation/timeline/createTimeline.js.map +0 -1
  871. package/dist/animation/timeline/sampleTrack.js +0 -71
  872. package/dist/animation/timeline/sampleTrack.js.map +0 -1
  873. package/dist/animation/useAnimator.js +0 -378
  874. package/dist/animation/useAnimator.js.map +0 -1
  875. package/dist/builtins-C-VgUlWI.d.ts +0 -4514
  876. package/dist/canvas/MinimapCanvas.js +0 -139
  877. package/dist/canvas/MinimapCanvas.js.map +0 -1
  878. package/dist/canvas/deps/poseComposition.js +0 -11
  879. package/dist/canvas/deps/poseComposition.js.map +0 -1
  880. package/dist/canvas/minimapMath.js +0 -80
  881. package/dist/canvas/minimapMath.js.map +0 -1
  882. package/dist/canvas/toolPreview.js +0 -39
  883. package/dist/canvas/toolPreview.js.map +0 -1
  884. package/dist/core/adapters/arrayAdapter.js +0 -85
  885. package/dist/core/adapters/arrayAdapter.js.map +0 -1
  886. package/dist/core/adapters/useArrayAdapter.js +0 -13
  887. package/dist/core/adapters/useArrayAdapter.js.map +0 -1
  888. package/dist/core/fillInPoseFrame.js +0 -102
  889. package/dist/core/fillInPoseFrame.js.map +0 -1
  890. package/dist/core/geometry/poseRotation.js +0 -58
  891. package/dist/core/geometry/poseRotation.js.map +0 -1
  892. package/dist/core/gradient.js +0 -136
  893. package/dist/core/gradient.js.map +0 -1
  894. package/dist/core/isPlainObject.js.map +0 -1
  895. package/dist/core/markerInset.js +0 -24
  896. package/dist/core/markerInset.js.map +0 -1
  897. package/dist/core/mixed.js +0 -6
  898. package/dist/core/mixed.js.map +0 -1
  899. package/dist/core/paintKinds.js +0 -156
  900. package/dist/core/paintKinds.js.map +0 -1
  901. package/dist/core/strokeMarkerShapes.js +0 -139
  902. package/dist/core/strokeMarkerShapes.js.map +0 -1
  903. package/dist/core/strokeMarkers.js +0 -28
  904. package/dist/core/strokeMarkers.js.map +0 -1
  905. package/dist/core/viewport/meanScale.js +0 -8
  906. package/dist/core/viewport/meanScale.js.map +0 -1
  907. package/dist/core/viewport/pxExtent.js +0 -42
  908. package/dist/core/viewport/pxExtent.js.map +0 -1
  909. package/dist/debug/flag.js.map +0 -1
  910. package/dist/features/cursor/paintedCursorLayer.js.map +0 -1
  911. package/dist/features/focus/gateLayer.js +0 -14
  912. package/dist/features/focus/gateLayer.js.map +0 -1
  913. package/dist/features/focus/useCanvasFocus.js +0 -29
  914. package/dist/features/focus/useCanvasFocus.js.map +0 -1
  915. package/dist/features/groups/children.js.map +0 -1
  916. package/dist/features/groups/composePose.js.map +0 -1
  917. package/dist/features/groups/nestedHit.js.map +0 -1
  918. package/dist/features/groups/unionOfChildren.js.map +0 -1
  919. package/dist/features/images/imageCache.js +0 -94
  920. package/dist/features/images/imageCache.js.map +0 -1
  921. package/dist/features/ingestion/index.js +0 -8
  922. package/dist/features/meshPaint/bake.js +0 -79
  923. package/dist/features/meshPaint/bake.js.map +0 -1
  924. package/dist/features/meshPaint/bakeCache.js +0 -59
  925. package/dist/features/meshPaint/bakeCache.js.map +0 -1
  926. package/dist/features/meshPaint/handles.js +0 -86
  927. package/dist/features/meshPaint/handles.js.map +0 -1
  928. package/dist/features/meshPaint/lazyKind.js.map +0 -1
  929. package/dist/features/meshPaint/meshPaint.js +0 -236
  930. package/dist/features/meshPaint/meshPaint.js.map +0 -1
  931. package/dist/features/meshPaint/meshShader.js +0 -6
  932. package/dist/features/meshPaint/meshShader.js.map +0 -1
  933. package/dist/features/meshPaint/register.js +0 -7
  934. package/dist/features/meshPaint/register.js.map +0 -1
  935. package/dist/features/meshPaint/surface.js +0 -110
  936. package/dist/features/meshPaint/surface.js.map +0 -1
  937. package/dist/features/minimap/actions.js +0 -53
  938. package/dist/features/minimap/actions.js.map +0 -1
  939. package/dist/features/minimap/createMinimapContribution.js +0 -96
  940. package/dist/features/minimap/createMinimapContribution.js.map +0 -1
  941. package/dist/features/minimap/layers.js +0 -103
  942. package/dist/features/minimap/layers.js.map +0 -1
  943. package/dist/features/overlays/useNodeOverlayFrame.js +0 -103
  944. package/dist/features/overlays/useNodeOverlayFrame.js.map +0 -1
  945. package/dist/features/parallax/createParallaxLayer.js +0 -26
  946. package/dist/features/parallax/createParallaxLayer.js.map +0 -1
  947. package/dist/features/parallax/createParallaxPlane.js +0 -26
  948. package/dist/features/parallax/createParallaxPlane.js.map +0 -1
  949. package/dist/features/paths/anchorEdits.js +0 -156
  950. package/dist/features/paths/anchorEdits.js.map +0 -1
  951. package/dist/features/paths/anchors.js +0 -154
  952. package/dist/features/paths/anchors.js.map +0 -1
  953. package/dist/features/paths/booleans.js +0 -2
  954. package/dist/features/paths/markerCommands.js +0 -148
  955. package/dist/features/paths/markerCommands.js.map +0 -1
  956. package/dist/features/paths/markerSites.js +0 -59
  957. package/dist/features/paths/markerSites.js.map +0 -1
  958. package/dist/features/paths/markers.js +0 -95
  959. package/dist/features/paths/markers.js.map +0 -1
  960. package/dist/features/paths/nearestAnchor.js +0 -36
  961. package/dist/features/paths/nearestAnchor.js.map +0 -1
  962. package/dist/features/paths/pathInWorld.js +0 -41
  963. package/dist/features/paths/pathInWorld.js.map +0 -1
  964. package/dist/features/paths/poseDescriptor.js +0 -39
  965. package/dist/features/paths/poseDescriptor.js.map +0 -1
  966. package/dist/features/paths/tessellate/dash.js +0 -52
  967. package/dist/features/paths/tessellate/dash.js.map +0 -1
  968. package/dist/features/paths/tessellate/insets.js +0 -32
  969. package/dist/features/paths/tessellate/insets.js.map +0 -1
  970. package/dist/features/paths/tessellate/metric.js +0 -72
  971. package/dist/features/paths/tessellate/metric.js.map +0 -1
  972. package/dist/features/paths/tessellate/stroke.js +0 -170
  973. package/dist/features/paths/tessellate/stroke.js.map +0 -1
  974. package/dist/features/paths/tessellate/vertexWidths.js +0 -32
  975. package/dist/features/paths/tessellate/vertexWidths.js.map +0 -1
  976. package/dist/features/patterns/index.js +0 -23
  977. package/dist/features/patterns/index.js.map +0 -1
  978. package/dist/features/patterns/patterns-builtin.js +0 -38
  979. package/dist/features/patterns/patterns-builtin.js.map +0 -1
  980. package/dist/features/patterns/resolveSpec.js +0 -57
  981. package/dist/features/patterns/resolveSpec.js.map +0 -1
  982. package/dist/features/patterns/tileGeometry.js +0 -158
  983. package/dist/features/patterns/tileGeometry.js.map +0 -1
  984. package/dist/features/pointer/PointerContext.js +0 -45
  985. package/dist/features/pointer/PointerContext.js.map +0 -1
  986. package/dist/features/selection/SelectionContext.js +0 -46
  987. package/dist/features/selection/SelectionContext.js.map +0 -1
  988. package/dist/features/simulation/createSimulation.js +0 -61
  989. package/dist/features/simulation/createSimulation.js.map +0 -1
  990. package/dist/features/simulation/types.js +0 -6
  991. package/dist/features/simulation/types.js.map +0 -1
  992. package/dist/features/simulation/useSimulation.js +0 -74
  993. package/dist/features/simulation/useSimulation.js.map +0 -1
  994. package/dist/features/text/domRuns.js +0 -258
  995. package/dist/features/text/domRuns.js.map +0 -1
  996. package/dist/features/text/fitTextPose.js +0 -38
  997. package/dist/features/text/fitTextPose.js.map +0 -1
  998. package/dist/features/text/hitTest.js +0 -45
  999. package/dist/features/text/hitTest.js.map +0 -1
  1000. package/dist/features/text/renderLabel.js +0 -14
  1001. package/dist/features/text/renderLabel.js.map +0 -1
  1002. package/dist/features/text/runs/effectiveRangeStyle.js +0 -66
  1003. package/dist/features/text/runs/effectiveRangeStyle.js.map +0 -1
  1004. package/dist/features/text/runs/flagRange.js +0 -53
  1005. package/dist/features/text/runs/flagRange.js.map +0 -1
  1006. package/dist/features/text/runs/rangeStyle.js +0 -135
  1007. package/dist/features/text/runs/rangeStyle.js.map +0 -1
  1008. package/dist/features/text/textCommand.js +0 -59
  1009. package/dist/features/text/textCommand.js.map +0 -1
  1010. package/dist/features/text/textToPath.js +0 -181
  1011. package/dist/features/text/textToPath.js.map +0 -1
  1012. package/dist/features/text/useTextEdit.js +0 -467
  1013. package/dist/features/text/useTextEdit.js.map +0 -1
  1014. package/dist/features/tiling/createTiledLayer.js +0 -63
  1015. package/dist/features/tiling/createTiledLayer.js.map +0 -1
  1016. package/dist/features/tiling/tiledProject.js +0 -14
  1017. package/dist/features/tiling/tiledProject.js.map +0 -1
  1018. package/dist/interactions/actions/clone/behaviors/cloneByAltDrag.js +0 -26
  1019. package/dist/interactions/actions/clone/behaviors/cloneByAltDrag.js.map +0 -1
  1020. package/dist/interactions/actions/defaults/align.js.map +0 -1
  1021. package/dist/interactions/actions/defaults/booleans.js +0 -52
  1022. package/dist/interactions/actions/defaults/booleans.js.map +0 -1
  1023. package/dist/interactions/actions/defaults/clipboard.js.map +0 -1
  1024. package/dist/interactions/actions/defaults/clone.js +0 -107
  1025. package/dist/interactions/actions/defaults/clone.js.map +0 -1
  1026. package/dist/interactions/actions/defaults/createOutlines.js +0 -47
  1027. package/dist/interactions/actions/defaults/createOutlines.js.map +0 -1
  1028. package/dist/interactions/actions/defaults/distribute.js +0 -66
  1029. package/dist/interactions/actions/defaults/distribute.js.map +0 -1
  1030. package/dist/interactions/actions/defaults/editAnchors.js.map +0 -1
  1031. package/dist/interactions/actions/defaults/flip.js +0 -119
  1032. package/dist/interactions/actions/defaults/flip.js.map +0 -1
  1033. package/dist/interactions/actions/defaults/freshNodeId.js +0 -10
  1034. package/dist/interactions/actions/defaults/freshNodeId.js.map +0 -1
  1035. package/dist/interactions/actions/defaults/insert.js +0 -288
  1036. package/dist/interactions/actions/defaults/insert.js.map +0 -1
  1037. package/dist/interactions/actions/defaults/lassoSelect.js +0 -156
  1038. package/dist/interactions/actions/defaults/lassoSelect.js.map +0 -1
  1039. package/dist/interactions/actions/defaults/move.js +0 -760
  1040. package/dist/interactions/actions/defaults/move.js.map +0 -1
  1041. package/dist/interactions/actions/defaults/resize.js +0 -335
  1042. package/dist/interactions/actions/defaults/resize.js.map +0 -1
  1043. package/dist/interactions/actions/defaults/rotate.js +0 -184
  1044. package/dist/interactions/actions/defaults/rotate.js.map +0 -1
  1045. package/dist/interactions/actions/previewOverrides.js +0 -25
  1046. package/dist/interactions/actions/previewOverrides.js.map +0 -1
  1047. package/dist/interactions/actions/resize/autoPoseDescriptor.js.map +0 -1
  1048. package/dist/math-Drrw4ewZ.d.ts +0 -160
  1049. package/dist/registerProgram-BMZRDgrh.d.ts +0 -197
  1050. package/dist/renderer/DrawCommand.js +0 -6
  1051. package/dist/renderer/DrawCommand.js.map +0 -1
  1052. package/dist/renderer/WeaselRenderer.js +0 -331
  1053. package/dist/renderer/WeaselRenderer.js.map +0 -1
  1054. package/dist/renderer/batchClip.js +0 -46
  1055. package/dist/renderer/batchClip.js.map +0 -1
  1056. package/dist/renderer/cache/GLImageCache.js +0 -64
  1057. package/dist/renderer/cache/GLImageCache.js.map +0 -1
  1058. package/dist/renderer/cache/GLMeshCache.js +0 -102
  1059. package/dist/renderer/cache/GLMeshCache.js.map +0 -1
  1060. package/dist/renderer/cache/GLTextureCache.js +0 -51
  1061. package/dist/renderer/cache/GLTextureCache.js.map +0 -1
  1062. package/dist/renderer/cache/GradientRampAtlas.js +0 -82
  1063. package/dist/renderer/cache/GradientRampAtlas.js.map +0 -1
  1064. package/dist/renderer/cache/cache.js +0 -13
  1065. package/dist/renderer/cache/cache.js.map +0 -1
  1066. package/dist/renderer/cache/markerCommandCache.js +0 -63
  1067. package/dist/renderer/cache/markerCommandCache.js.map +0 -1
  1068. package/dist/renderer/cache/outlineMeshCache.js +0 -15
  1069. package/dist/renderer/cache/outlineMeshCache.js.map +0 -1
  1070. package/dist/renderer/cache/outlineStrokeMeshCache.js +0 -36
  1071. package/dist/renderer/cache/outlineStrokeMeshCache.js.map +0 -1
  1072. package/dist/renderer/cache/strokeMeshCache.js +0 -55
  1073. package/dist/renderer/cache/strokeMeshCache.js.map +0 -1
  1074. package/dist/renderer/cullDrawCommands.js +0 -90
  1075. package/dist/renderer/cullDrawCommands.js.map +0 -1
  1076. package/dist/renderer/draw.js +0 -1135
  1077. package/dist/renderer/draw.js.map +0 -1
  1078. package/dist/renderer/drawBatch.js +0 -198
  1079. package/dist/renderer/drawBatch.js.map +0 -1
  1080. package/dist/renderer/effects/EffectTargets.js +0 -45
  1081. package/dist/renderer/effects/EffectTargets.js.map +0 -1
  1082. package/dist/renderer/effects/builtins.js +0 -31
  1083. package/dist/renderer/effects/builtins.js.map +0 -1
  1084. package/dist/renderer/effects/composite.js +0 -9
  1085. package/dist/renderer/effects/composite.js.map +0 -1
  1086. package/dist/renderer/effects/effectPrelude.js +0 -10
  1087. package/dist/renderer/effects/effectPrelude.js.map +0 -1
  1088. package/dist/renderer/effects/types.js +0 -10
  1089. package/dist/renderer/effects/types.js.map +0 -1
  1090. package/dist/renderer/glyphOutlineMesh.js +0 -67
  1091. package/dist/renderer/glyphOutlineMesh.js.map +0 -1
  1092. package/dist/renderer/index.js +0 -19
  1093. package/dist/renderer/math/color.js +0 -341
  1094. package/dist/renderer/math/color.js.map +0 -1
  1095. package/dist/renderer/math/mat3.js +0 -76
  1096. package/dist/renderer/math/mat3.js.map +0 -1
  1097. package/dist/renderer/math/patternSpace.js +0 -22
  1098. package/dist/renderer/math/patternSpace.js.map +0 -1
  1099. package/dist/renderer/math/viewToMat3.js +0 -19
  1100. package/dist/renderer/math/viewToMat3.js.map +0 -1
  1101. package/dist/renderer/paintResources.js +0 -18
  1102. package/dist/renderer/paintResources.js.map +0 -1
  1103. package/dist/renderer/paintScratch.js +0 -37
  1104. package/dist/renderer/paintScratch.js.map +0 -1
  1105. package/dist/renderer/shaders/ShaderProgram.js +0 -74
  1106. package/dist/renderer/shaders/ShaderProgram.js.map +0 -1
  1107. package/dist/renderer/shaders/batchFill.js +0 -119
  1108. package/dist/renderer/shaders/batchFill.js.map +0 -1
  1109. package/dist/renderer/shaders/customPrelude.js +0 -34
  1110. package/dist/renderer/shaders/customPrelude.js.map +0 -1
  1111. package/dist/renderer/shaders/extractUniformNames.js +0 -184
  1112. package/dist/renderer/shaders/extractUniformNames.js.map +0 -1
  1113. package/dist/renderer/shaders/glyphPaint.js +0 -61
  1114. package/dist/renderer/shaders/glyphPaint.js.map +0 -1
  1115. package/dist/renderer/shaders/gradFill.js +0 -30
  1116. package/dist/renderer/shaders/gradFill.js.map +0 -1
  1117. package/dist/renderer/shaders/imageFill.js +0 -14
  1118. package/dist/renderer/shaders/imageFill.js.map +0 -1
  1119. package/dist/renderer/shaders/pathFill.js +0 -13
  1120. package/dist/renderer/shaders/pathFill.js.map +0 -1
  1121. package/dist/renderer/shaders/patternFill.js +0 -24
  1122. package/dist/renderer/shaders/patternFill.js.map +0 -1
  1123. package/dist/renderer/shaders/registerProgram.js +0 -18
  1124. package/dist/renderer/shaders/registerProgram.js.map +0 -1
  1125. package/dist/renderer/spriteSheet.js +0 -14
  1126. package/dist/renderer/spriteSheet.js.map +0 -1
  1127. package/dist/renderer/state/GroupState.js +0 -77
  1128. package/dist/renderer/state/GroupState.js.map +0 -1
  1129. package/dist/renderer/strokeLengths.js +0 -50
  1130. package/dist/renderer/strokeLengths.js.map +0 -1
  1131. package/dist/renderer/syntheticItalic.js +0 -6
  1132. package/dist/renderer/syntheticItalic.js.map +0 -1
  1133. package/dist/renderer/textures/registerTexture.js +0 -14
  1134. package/dist/renderer/textures/registerTexture.js.map +0 -1
  1135. package/dist/scheduling/useVisibleRaf.js +0 -69
  1136. package/dist/scheduling/useVisibleRaf.js.map +0 -1
  1137. package/dist/test-seams-CuIxe0xY.d.ts +0 -356
  1138. package/dist/tools/prefs.js +0 -62
  1139. package/dist/tools/prefs.js.map +0 -1
@@ -1,170 +0,0 @@
1
- import { splitForDash as e } from "./dash.js";
2
- import { populatePolylineWidths as t } from "./vertexWidths.js";
3
- import { coordsOutOfMetric as n, rectIntoMetric as r, worldWidthInMetric as i, worldWidthInMetricAlongWorld as a } from "./metric.js";
4
- import { trimInSpace as o } from "./insets.js";
5
- import { alignedStrokeRect as s, resolveScreenLength as c } from "@weasel-js/paint";
6
- import { extractPolylines as l } from "@weasel-js/geom/tessellate";
7
- //#region src/features/paths/tessellate/stroke.ts
8
- var u = {
9
- vertices: /* @__PURE__ */ new Float32Array(),
10
- indices: /* @__PURE__ */ new Uint32Array(),
11
- anchorA: /* @__PURE__ */ new Uint32Array(),
12
- anchorB: /* @__PURE__ */ new Uint32Array(),
13
- anchorT: /* @__PURE__ */ new Float32Array()
14
- };
15
- function d(e, t) {
16
- return c(e, t);
17
- }
18
- function f(c, f, m = {}) {
19
- let h = d(f.width ?? 1, 1);
20
- if (h <= 0) return u;
21
- let g = f.join ?? "miter", y = f.cap ?? "butt", b = f.align ?? "center", x = f.miterLimit ?? _, S = f.varyingWidthJoinThreshold ?? v, C = m.metric, w = C && c.kind === "rect" ? r(c, C) : null, T = w ?? c;
22
- if (T.kind === "rect" && b !== "center") {
23
- let e = s(T, b, h);
24
- T = {
25
- kind: "rect",
26
- x: e.x,
27
- y: e.y,
28
- width: e.width,
29
- height: e.height
30
- };
31
- }
32
- let E = l(T, m), D = f.vertexWidths && f.vertexWidths.length > 0 ? f.vertexWidths : null, O = C ? w ? (e, t) => i(C, e, t) : (e, t) => a(C, e, t) : void 0, k = f.dash ?? [], A = [], j = [], M = [], N = [], P = [], F = C ?? null;
33
- for (let n of E) {
34
- D && t(n, D, h, O);
35
- let r = o(n, w ? F : null, F, m.startInset, m.endInset);
36
- if (r === null) continue;
37
- let i = k.length > 0 ? e(r, k) : [r];
38
- for (let e of i) p(e, h, g, y, x, S, A, j, M, N, P);
39
- }
40
- let I = new Float32Array(A);
41
- return C && n(I, C), {
42
- vertices: I,
43
- indices: new Uint32Array(j),
44
- anchorA: new Uint32Array(M),
45
- anchorB: new Uint32Array(N),
46
- anchorT: new Float32Array(P)
47
- };
48
- }
49
- function p(e, t, n, r, i, a, o, s, c, l, u) {
50
- let d = t / 2, f = e.points, p = f.length / 2, m = p - 1;
51
- if (m < 1) return;
52
- let _ = e.anchorA ?? new Uint32Array(p), v = e.anchorB ?? new Uint32Array(p), b = e.anchorT ?? new Float32Array(p), x = e.widths ? e.widths.map((e) => e / 2) : null, S = [], C = [];
53
- for (let e = 0; e < m; e++) {
54
- let t = x ? x[e] : d, n = x ? x[e + 1] : d, r = g(f[e * 2], f[e * 2 + 1], f[(e + 1) * 2], f[(e + 1) * 2 + 1], t, n);
55
- r && (S.push(r), C.push(e));
56
- }
57
- let w = -1;
58
- if (e.closed && S.length >= 1) {
59
- let e = S[S.length - 1], t = S[0], n = x ? x[p - 1] : d, r = x ? x[0] : d, i = g(e.bx, e.by, t.ax, t.ay, n, r);
60
- i && (S.push(i), w = p - 1, C.push(w));
61
- }
62
- if (S.length === 0) return;
63
- let T = [];
64
- for (let t = 0; t < S.length; t++) {
65
- let n = S[t], r = C[t], i = t === S.length - 1 && e.closed && w >= 0 ? 0 : r + 1, a = o.length / 2;
66
- T.push(a);
67
- let d = n.nxUnit * n.halfA, f = n.nyUnit * n.halfA, p = n.nxUnit * n.halfB, m = n.nyUnit * n.halfB;
68
- o.push(n.ax + d, n.ay + f), c.push(_[r]), l.push(v[r]), u.push(b[r]), o.push(n.ax - d, n.ay - f), c.push(_[r]), l.push(v[r]), u.push(b[r]), o.push(n.bx + p, n.by + m), c.push(_[i]), l.push(v[i]), u.push(b[i]), o.push(n.bx - p, n.by - m), c.push(_[i]), l.push(v[i]), u.push(b[i]), s.push(a, a + 1, a + 2, a + 1, a + 3, a + 2);
69
- }
70
- let E = e.closed ? S.length : S.length - 1;
71
- for (let e = 0; e < E; e++) y(S, T, e, n, i, a, o, s, c, l, u, C, _, v, b);
72
- if (!e.closed && r !== "butt") {
73
- let e = S[0], t = T[0];
74
- h(e, t + 0, t + 1, !1, e.halfA, r, o, s, c, l, u, _[0], v[0], b[0]);
75
- let n = S[S.length - 1], i = T[S.length - 1], a = C[S.length - 1] + 1;
76
- h(n, i + 2, i + 3, !0, n.halfB, r, o, s, c, l, u, _[a], v[a], b[a]);
77
- }
78
- }
79
- var m = 10 * Math.PI / 180;
80
- function h(e, t, n, r, i, a, o, s, c, l, u, d, f, p) {
81
- let h = r ? 1 : -1, g = (e.bx - e.ax) / e.len * h, _ = (e.by - e.ay) / e.len * h, v = r ? e.bx : e.ax, y = r ? e.by : e.ay, b = e.nxUnit * i, x = e.nyUnit * i;
82
- if (a === "square") {
83
- let e = v + g * i, a = y + _ * i, m = o.length / 2;
84
- o.push(e + b, a + x), c.push(d), l.push(f), u.push(p);
85
- let h = o.length / 2;
86
- o.push(e - b, a - x), c.push(d), l.push(f), u.push(p), r ? s.push(t, m, h, t, h, n) : s.push(t, h, m, t, n, h);
87
- return;
88
- }
89
- if (a === "round") {
90
- let e = o.length / 2;
91
- o.push(v, y), c.push(d), l.push(f), u.push(p);
92
- let a = Math.atan2(x, b), h = r ? -Math.PI : Math.PI, g = Math.max(1, Math.ceil(Math.abs(h) / m)), _ = h / g, S = t;
93
- for (let t = 1; t < g; t++) {
94
- let n = a + t * _, m = v + Math.cos(n) * i, h = y + Math.sin(n) * i, g = o.length / 2;
95
- o.push(m, h), c.push(d), l.push(f), u.push(p), r ? s.push(S, g, e) : s.push(S, e, g), S = g;
96
- }
97
- r ? s.push(S, n, e) : s.push(S, e, n);
98
- }
99
- }
100
- function g(e, t, n, r, i, a) {
101
- let o = n - e, s = r - t, c = Math.hypot(o, s);
102
- return c === 0 ? null : {
103
- ax: e,
104
- ay: t,
105
- bx: n,
106
- by: r,
107
- nxUnit: -s / c,
108
- nyUnit: o / c,
109
- halfA: i,
110
- halfB: a,
111
- len: c
112
- };
113
- }
114
- var _ = 4, v = 1.5;
115
- function y(e, t, n, r, i, a, o, s, c, l, u, d, f, p, m) {
116
- let h = e[n], g = e[(n + 1) % e.length], _ = t[n], v = t[(n + 1) % e.length], y = h.bx - h.ax, b = h.by - h.ay, w = g.bx - g.ax, T = g.by - g.ay, E = y * T - b * w;
117
- if (E === 0) return;
118
- let D = E > 0, O = D ? _ + 3 : _ + 2, k = D ? v + 1 : v + 0, A = d[(n + 1) % e.length], j = f[A], M = p[A], N = m[A], P = h.halfB, F = Math.max(h.halfA, h.halfB) / Math.max(1e-9, Math.min(h.halfA, h.halfB)), I = Math.max(g.halfA, g.halfB) / Math.max(1e-9, Math.min(g.halfA, g.halfB));
119
- if (r === "bevel" || F > a || I > a) {
120
- S(h, O, k, D, o, s, c, l, u, j, M, N);
121
- return;
122
- }
123
- if (r === "miter") {
124
- let e = o[O * 2], t = o[O * 2 + 1], n = o[k * 2], r = o[k * 2 + 1], a = C(e, t, y, b, n, r, -w, -T);
125
- if (!a) {
126
- S(h, O, k, D, o, s, c, l, u, j, M, N);
127
- return;
128
- }
129
- if (Math.hypot(a[0] - h.bx, a[1] - h.by) > i * P) {
130
- S(h, O, k, D, o, s, c, l, u, j, M, N);
131
- return;
132
- }
133
- let d = o.length / 2;
134
- o.push(a[0], a[1]), c.push(j), l.push(M), u.push(N);
135
- let f = o.length / 2;
136
- o.push(h.bx, h.by), c.push(j), l.push(M), u.push(N), D ? (s.push(O, d, k), s.push(O, k, f)) : (s.push(O, k, d), s.push(O, f, k));
137
- return;
138
- }
139
- if (r === "round") {
140
- x(h, O, k, D, o, s, c, l, u, j, M, N);
141
- return;
142
- }
143
- }
144
- var b = 10 * Math.PI / 180;
145
- function x(e, t, n, r, i, a, o, s, c, l, u, d) {
146
- let f = e.bx, p = e.by, m = i.length / 2;
147
- i.push(f, p), o.push(l), s.push(u), c.push(d);
148
- let h = i[t * 2] - f, g = i[t * 2 + 1] - p, _ = i[n * 2] - f, v = i[n * 2 + 1] - p, y = Math.hypot(h, g), x = Math.atan2(g, h), S = Math.atan2(v, _) - x;
149
- r && S < 0 ? S += 2 * Math.PI : !r && S > 0 && (S -= 2 * Math.PI);
150
- let C = Math.max(1, Math.ceil(Math.abs(S) / b)), w = S / C, T = t;
151
- for (let e = 1; e < C; e++) {
152
- let t = x + e * w, n = f + Math.cos(t) * y, h = p + Math.sin(t) * y, g = i.length / 2;
153
- i.push(n, h), o.push(l), s.push(u), c.push(d), r ? a.push(T, m, g) : a.push(T, g, m), T = g;
154
- }
155
- r ? a.push(T, m, n) : a.push(T, n, m);
156
- }
157
- function S(e, t, n, r, i, a, o, s, c, l, u, d) {
158
- let f = i.length / 2;
159
- i.push(e.bx, e.by), o.push(l), s.push(u), c.push(d), r ? a.push(t, f, n) : a.push(t, n, f);
160
- }
161
- function C(e, t, n, r, i, a, o, s) {
162
- let c = n * s - r * o;
163
- if (Math.abs(c) < 1e-9) return null;
164
- let l = ((i - e) * s - (a - t) * o) / c;
165
- return [e + l * n, t + l * r];
166
- }
167
- //#endregion
168
- export { d as resolveStrokeWidth, f as tessellateStroke };
169
-
170
- //# sourceMappingURL=stroke.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"stroke.js","names":["EMPTY_MESH","resolveStrokeWidth","resolveScreenLength","width","scale","tessellateStroke","stroke","join","cap","align","miterLimit","DEFAULT_MITER_LIMIT","varyingThreshold","DEFAULT_VARYING_WIDTH_JOIN_THRESHOLD","metric","opts","rectInMetric","path","rectIntoMetric","workingPath","aligned","alignedStrokeRect","polylines","extractPolylines","vertexWidths","worldWidthInMetric","tx","ty","worldWidthInMetricAlongWorld","ux","uy","dash","verts","idx","anchorA","anchorB","anchorT","ribbonSpace","pl","populatePolylineWidths","trimmed","trimInSpace","subs","splitForDash","sub","vertices","coordsOutOfMetric","expandPolyline","half","pts","ptCount","segCount","plA","plB","plT","plHalf","w","segs","segSrcIdx","s","ha","hb","seg","makeSeg","closerSrcIdx","last","first","haCloser","hbCloser","closer","segBaseIdx","startSrc","endSrc","base","nxA","nyA","nxB","nyB","joinCount","j","firstBase","lastBase","lastSrc","ROUND_CAP_STEP_RAD","emitCap","sign","atEnd","dx","dy","cx","cy","nx","ny","ox","oy","lOut","endA","endB","endT","rOut","leftIdx","rightIdx","pivotIdx","startAngle","sweep","steps","stepAngle","prevIdx","i","ang","fx","fy","newIdx","bx","ax","by","ay","len","emitJoin","a","b","aBase","bBase","adx","ady","bdx","bdy","cross","onPositive","aOuterEnd","bOuterStart","cornerSrc","cornerA","cornerB","cornerT","halfAtCorner","taperA","taperB","aOX","aOY","bOX","bOY","apex","lineLineIntersect","apexIdx","jIdx","ROUND_STEP_RAD","emitRoundJoin","startX","startY","endX","endY","r","emitBevel","denom","t","bpx","apx","bpy","apy"],"sources":["../../../../src/features/paths/tessellate/stroke.ts"],"sourcesContent":["import type { Path } from '@weasel-js/core';\nimport type { ScreenLength, Stroke } from '@weasel-js/paint';\nimport { alignedStrokeRect, resolveScreenLength } from '@weasel-js/paint';\nimport { type Mesh, extractPolylines, type Polyline } from '@weasel-js/geom/tessellate';\nimport { splitForDash } from './dash';\nimport { populatePolylineWidths, type WidthScale } from './vertexWidths';\nimport { type InsetLength, trimInSpace } from './insets';\nimport {\n type StrokeMetric, coordsOutOfMetric, rectIntoMetric, worldWidthInMetric, worldWidthInMetricAlongWorld,\n} from './metric';\n\n/** Options for stroke tessellation. */\nexport interface StrokeOptions {\n flattenTolerance?: number;\n /**\n * Shorten each open subpath by this much at its start / end: a length in\n * the ribbon's space, or one measured in a space of its own. Stroke markers\n * use this so a filled head is not speared by its own line; the caller\n * resolves the distance, because this layer knows nothing about the marker\n * registry.\n */\n startInset?: InsetLength;\n endInset?: InsetLength;\n /**\n * Build the ribbon in this metric's space and map it back out, so the\n * transform it was derived from draws it at an exact screen width — see\n * `./metric`. Width and dash are then lengths in that space; `vertexWidths`\n * stay world widths. The path is flattened in world first, so the ribbon\n * follows the same vertices its fill does.\n */\n metric?: StrokeMetric;\n}\n\nconst EMPTY_MESH: Mesh = {\n vertices: new Float32Array(0),\n indices: new Uint32Array(0),\n anchorA: new Uint32Array(0),\n anchorB: new Uint32Array(0),\n anchorT: new Float32Array(0),\n};\n\ntype Cap = 'butt' | 'round' | 'square';\ntype Join = 'miter' | 'round' | 'bevel';\n\n/** Per-segment data the join code needs. */\ninterface Seg {\n ax: number; ay: number;\n bx: number; by: number;\n /** Unit perpendicular (rotated 90° CCW from direction). */\n nxUnit: number; nyUnit: number;\n /** Half-width at the start (a) and end (b) endpoints. Equal for uniform\n * strokes; differ when the polyline carries per-point widths. */\n halfA: number; halfB: number;\n len: number;\n}\n\n/** Resolve a stroke width to world units. A number is already world units;\n * `{ px }` is screen pixels divided by the accumulated scale, so it holds its\n * on-screen thickness as the view zooms. */\nexport function resolveStrokeWidth(width: ScreenLength, scale: number): number {\n return resolveScreenLength(width, scale);\n}\n\n/**\n * Build a triangle-mesh ribbon from a stroked Path.\n *\n * Supports:\n * - cap: 'butt' | 'round' | 'square'\n * - join: 'miter' | 'round' | 'bevel'\n * - center alignment directly; RectPath inner/outer alignment via a\n * pre-shifted rect; PolygonPath inner/outer alignment via stencil at the\n * renderer level\n * - dash splitting\n */\nexport function tessellateStroke(\n path: Path,\n stroke: Stroke,\n opts: StrokeOptions = {},\n): Mesh {\n // The renderer resolves `{ px }` against the accumulated transform before it\n // gets here; a stroke that reaches the tessellator unresolved is read at\n // scale 1, matching what the ribbon cache keys it under.\n const width = resolveStrokeWidth(stroke.width ?? 1, 1);\n if (width <= 0) return EMPTY_MESH;\n const join: Join = stroke.join ?? 'miter';\n const cap: Cap = stroke.cap ?? 'butt';\n const align = stroke.align ?? 'center';\n const miterLimit = stroke.miterLimit ?? DEFAULT_MITER_LIMIT;\n const varyingThreshold = stroke.varyingWidthJoinThreshold ?? DEFAULT_VARYING_WIDTH_JOIN_THRESHOLD;\n\n // RectPath fast path for inner/outer alignment: shift the rect by half-width\n // so the ribbon's center alignment lands the stroke on the desired side of\n // the original geometric edge. Arbitrary paths handle alignment via stencil\n // clipping at the renderer level (not here).\n const metric = opts.metric;\n const rectInMetric = metric && path.kind === 'rect' ? rectIntoMetric(path, metric) : null;\n let workingPath: Path = rectInMetric ?? path;\n if (workingPath.kind === 'rect' && align !== 'center') {\n const aligned = alignedStrokeRect(workingPath, align, width);\n workingPath = {\n kind: 'rect',\n x: aligned.x,\n y: aligned.y,\n width: aligned.width,\n height: aligned.height,\n };\n }\n\n const polylines = extractPolylines(workingPath, opts);\n // Per-point widths come first, in the space the points are in, so a trim\n // interpolates them rather than re-reading an anchor's.\n const vertexWidths = stroke.vertexWidths && stroke.vertexWidths.length > 0 ? stroke.vertexWidths : null;\n const scale: WidthScale | undefined = !metric ? undefined\n : rectInMetric ? (tx, ty) => worldWidthInMetric(metric, tx, ty)\n : (ux, uy) => worldWidthInMetricAlongWorld(metric, ux, uy);\n const dash = stroke.dash ?? [];\n const verts: number[] = [];\n const idx: number[] = [];\n const anchorA: number[] = [];\n const anchorB: number[] = [];\n const anchorT: number[] = [];\n\n // Trim before dashing, so the dash pattern fits the visible line rather than\n // running off under a marker head.\n const ribbonSpace = metric ?? null;\n for (const pl of polylines) {\n if (vertexWidths) populatePolylineWidths(pl, vertexWidths, width, scale);\n const trimmed = trimInSpace(pl, rectInMetric ? ribbonSpace : null, ribbonSpace, opts.startInset, opts.endInset);\n if (trimmed === null) continue;\n const subs = dash.length > 0 ? splitForDash(trimmed, dash) : [trimmed];\n for (const sub of subs) {\n expandPolyline(sub, width, join, cap, miterLimit, varyingThreshold, verts, idx, anchorA, anchorB, anchorT);\n }\n }\n\n const vertices = new Float32Array(verts);\n if (metric) coordsOutOfMetric(vertices, metric);\n return {\n vertices,\n indices: new Uint32Array(idx),\n anchorA: new Uint32Array(anchorA),\n anchorB: new Uint32Array(anchorB),\n anchorT: new Float32Array(anchorT),\n };\n}\n\nfunction expandPolyline(\n pl: Polyline,\n width: number,\n join: Join,\n cap: Cap,\n miterLimit: number,\n varyingThreshold: number,\n verts: number[],\n idx: number[],\n anchorA: number[],\n anchorB: number[],\n anchorT: number[],\n): void {\n const half = width / 2;\n const pts = pl.points;\n const ptCount = pts.length / 2;\n const segCount = ptCount - 1;\n if (segCount < 1) return;\n\n // Anchor params per polyline point (set by extractPolylines; splitForDash\n // re-derives them on dash boundaries). Default to A=B=0,t=0 if missing.\n const plA = pl.anchorA ?? new Uint32Array(ptCount);\n const plB = pl.anchorB ?? new Uint32Array(ptCount);\n const plT = pl.anchorT ?? new Float32Array(ptCount);\n // Per-point half-widths: derived from pl.widths if present, else the\n // uniform half. Indexing matches `pts` (one entry per polyline point).\n const plHalf = pl.widths\n ? pl.widths.map((w) => w / 2)\n : null;\n\n const segs: Seg[] = [];\n const segSrcIdx: number[] = []; // For each seg, the polyline-point index of its start.\n for (let s = 0; s < segCount; s++) {\n const ha = plHalf ? plHalf[s] : half;\n const hb = plHalf ? plHalf[s + 1] : half;\n const seg = makeSeg(pts[s * 2], pts[s * 2 + 1], pts[(s + 1) * 2], pts[(s + 1) * 2 + 1], ha, hb);\n if (seg) {\n segs.push(seg);\n segSrcIdx.push(s);\n }\n }\n let closerSrcIdx = -1;\n if (pl.closed && segs.length >= 1) {\n const last = segs[segs.length - 1];\n const first = segs[0];\n // Closer: from last point back to point 0. Half-widths are the\n // already-resolved ones at those source indices.\n const haCloser = plHalf ? plHalf[ptCount - 1] : half;\n const hbCloser = plHalf ? plHalf[0] : half;\n const closer = makeSeg(last.bx, last.by, first.ax, first.ay, haCloser, hbCloser);\n if (closer) {\n segs.push(closer);\n closerSrcIdx = ptCount - 1; // start is the last polyline point.\n segSrcIdx.push(closerSrcIdx);\n }\n }\n if (segs.length === 0) return;\n\n // Emit ribbon quads. For each emitted vertex, record the (A, B, t) of the\n // source polyline point that the geometric vertex sits at. Per-end\n // half-widths produce trapezoidal segments when the stroke tapers.\n const segBaseIdx: number[] = [];\n for (let s = 0; s < segs.length; s++) {\n const seg = segs[s];\n const startSrc = segSrcIdx[s];\n // End-source index for the seg. For closer (closed-path wraparound), end is point 0.\n const endSrc = (s === segs.length - 1 && pl.closed && closerSrcIdx >= 0) ? 0 : startSrc + 1;\n const base = verts.length / 2;\n segBaseIdx.push(base);\n const nxA = seg.nxUnit * seg.halfA, nyA = seg.nyUnit * seg.halfA;\n const nxB = seg.nxUnit * seg.halfB, nyB = seg.nyUnit * seg.halfB;\n // L0, R0 — at seg.ax/ay with start half-width.\n verts.push(seg.ax + nxA, seg.ay + nyA);\n anchorA.push(plA[startSrc]); anchorB.push(plB[startSrc]); anchorT.push(plT[startSrc]);\n verts.push(seg.ax - nxA, seg.ay - nyA);\n anchorA.push(plA[startSrc]); anchorB.push(plB[startSrc]); anchorT.push(plT[startSrc]);\n // L1, R1 — at seg.bx/by with end half-width.\n verts.push(seg.bx + nxB, seg.by + nyB);\n anchorA.push(plA[endSrc]); anchorB.push(plB[endSrc]); anchorT.push(plT[endSrc]);\n verts.push(seg.bx - nxB, seg.by - nyB);\n anchorA.push(plA[endSrc]); anchorB.push(plB[endSrc]); anchorT.push(plT[endSrc]);\n idx.push(base, base + 1, base + 2, base + 1, base + 3, base + 2);\n }\n\n // Joins between consecutive segments.\n const joinCount = pl.closed ? segs.length : segs.length - 1;\n for (let j = 0; j < joinCount; j++) {\n emitJoin(segs, segBaseIdx, j, join, miterLimit, varyingThreshold, verts, idx, anchorA, anchorB, anchorT, segSrcIdx, plA, plB, plT);\n }\n\n // Caps. Use the local half-width at the cap end (seg.halfA at start, seg.halfB at end).\n if (!pl.closed && cap !== 'butt') {\n const first = segs[0];\n const firstBase = segBaseIdx[0];\n emitCap(first, firstBase + 0, firstBase + 1, false, first.halfA, cap, verts, idx, anchorA, anchorB, anchorT, plA[0], plB[0], plT[0]);\n\n const last = segs[segs.length - 1];\n const lastBase = segBaseIdx[segs.length - 1];\n const lastSrc = segSrcIdx[segs.length - 1] + 1;\n emitCap(last, lastBase + 2, lastBase + 3, true, last.halfB, cap, verts, idx, anchorA, anchorB, anchorT, plA[lastSrc], plB[lastSrc], plT[lastSrc]);\n }\n}\n\nconst ROUND_CAP_STEP_RAD = (10 * Math.PI) / 180;\n\n/**\n * Emit a cap at one end of a segment. `leftIdx`/`rightIdx` are the buffer\n * indices of the L (perpendicular +n) and R (perpendicular -n) vertices at\n * the segment endpoint where the cap attaches. `atEnd` chooses which end of\n * the segment to extend from (and which cap-direction sign to use).\n */\nfunction emitCap(\n seg: Seg, leftIdx: number, rightIdx: number, atEnd: boolean,\n half: number, cap: Cap,\n verts: number[], idx: number[],\n anchorA: number[], anchorB: number[], anchorT: number[],\n endA: number, endB: number, endT: number,\n): void {\n // Outward direction = forward at end, backward at start.\n const sign = atEnd ? 1 : -1;\n const dx = (seg.bx - seg.ax) / seg.len * sign;\n const dy = (seg.by - seg.ay) / seg.len * sign;\n const cx = atEnd ? seg.bx : seg.ax;\n const cy = atEnd ? seg.by : seg.ay;\n\n // Perpendicular offset at this cap end uses the local half-width\n // (varies along the polyline when vertexWidths is set).\n const nx = seg.nxUnit * half;\n const ny = seg.nyUnit * half;\n\n if (cap === 'square') {\n const ox = cx + dx * half;\n const oy = cy + dy * half;\n const lOut = verts.length / 2;\n verts.push(ox + nx, oy + ny);\n anchorA.push(endA); anchorB.push(endB); anchorT.push(endT);\n const rOut = verts.length / 2;\n verts.push(ox - nx, oy - ny);\n anchorA.push(endA); anchorB.push(endB); anchorT.push(endT);\n // Two triangles forming the cap rectangle. Wind so triangles are CCW\n // viewed from the front; orientation symmetric for start vs. end caps.\n if (atEnd) {\n idx.push(leftIdx, lOut, rOut, leftIdx, rOut, rightIdx);\n } else {\n idx.push(leftIdx, rOut, lOut, leftIdx, rightIdx, rOut);\n }\n return;\n }\n\n if (cap === 'round') {\n // Pivot vertex at the endpoint center; fan from L through the outward\n // 180° arc to R.\n const pivotIdx = verts.length / 2;\n verts.push(cx, cy);\n anchorA.push(endA); anchorB.push(endB); anchorT.push(endT);\n\n // Starting angle: direction from pivot to L (= +n direction).\n const startAngle = Math.atan2(ny, nx);\n // Sweep 180° toward the outward direction. The outward unit is (dx, dy);\n // we rotate from +n to -n the \"outward\" way. The dot product of (dx, dy)\n // with the perpendicular tells us which way around the arc to go.\n // A start-cap (sign = -1) sweeps backward; end-cap (sign = +1) sweeps forward.\n const sweep = atEnd ? -Math.PI : Math.PI;\n const steps = Math.max(1, Math.ceil(Math.abs(sweep) / ROUND_CAP_STEP_RAD));\n const stepAngle = sweep / steps;\n\n let prevIdx = leftIdx;\n for (let i = 1; i < steps; i++) {\n const ang = startAngle + i * stepAngle;\n const fx = cx + Math.cos(ang) * half;\n const fy = cy + Math.sin(ang) * half;\n const newIdx = verts.length / 2;\n verts.push(fx, fy);\n anchorA.push(endA); anchorB.push(endB); anchorT.push(endT);\n if (atEnd) idx.push(prevIdx, newIdx, pivotIdx);\n else idx.push(prevIdx, pivotIdx, newIdx);\n prevIdx = newIdx;\n }\n if (atEnd) idx.push(prevIdx, rightIdx, pivotIdx);\n else idx.push(prevIdx, pivotIdx, rightIdx);\n }\n}\n\nfunction makeSeg(ax: number, ay: number, bx: number, by: number, halfA: number, halfB: number): Seg | null {\n const dx = bx - ax, dy = by - ay;\n const len = Math.hypot(dx, dy);\n if (len === 0) return null;\n return {\n ax, ay, bx, by,\n nxUnit: -dy / len, nyUnit: dx / len,\n halfA, halfB,\n len,\n };\n}\n\n/**\n * Miter limit for a stroke that does not set one. SVG's default, not\n * Canvas2D's 10, because the serializer omits the attribute when the field is\n * unset — so a kit stroke exported to SVG is read back by every other renderer\n * as 4, and a kit that used 10 would disagree with its own export. 10 also\n * lets an acute corner throw a spike four times the half-width, which is what\n * a glyph outline's sharpest vertices do.\n */\nconst DEFAULT_MITER_LIMIT = 4;\n/** Default `Stroke.varyingWidthJoinThreshold`. */\nconst DEFAULT_VARYING_WIDTH_JOIN_THRESHOLD = 1.5;\n\nfunction emitJoin(\n segs: Seg[], segBaseIdx: number[], j: number, join: Join,\n miterLimit: number,\n varyingThreshold: number,\n verts: number[], idx: number[],\n anchorA: number[], anchorB: number[], anchorT: number[],\n segSrcIdx: number[],\n plA: Uint32Array, plB: Uint32Array, plT: Float32Array,\n): void {\n const a = segs[j];\n const b = segs[(j + 1) % segs.length];\n const aBase = segBaseIdx[j];\n const bBase = segBaseIdx[(j + 1) % segs.length];\n\n const adx = a.bx - a.ax, ady = a.by - a.ay;\n const bdx = b.bx - b.ax, bdy = b.by - b.ay;\n const cross = adx * bdy - ady * bdx;\n if (cross === 0) return; // straight (collinear), no wedge\n const onPositive = cross > 0;\n\n const aOuterEnd = onPositive ? aBase + 3 : aBase + 2;\n const bOuterStart = onPositive ? bBase + 1 : bBase + 0;\n\n // The corner of join `j` is the start of segment `j+1` (which is the END of\n // segment `j` — they share the same polyline point). For the wraparound join\n // on a closed polyline, j+1 wraps to segment 0 whose start is the closer\n // segment's endpoint, which is polyline point 0.\n const nextSeg = (j + 1) % segs.length;\n // The corner anchor is the start of the next segment (shared endpoint).\n // For a closed path's final join, nextSeg wraps to 0, whose start is\n // polyline point 0 — correct.\n const cornerSrc = segSrcIdx[nextSeg];\n const cornerA = plA[cornerSrc];\n const cornerB = plB[cornerSrc];\n const cornerT = plT[cornerSrc];\n // The two adjoining half-widths agree at the shared corner (a.halfB ===\n // b.halfA for a single-contour polyline), so use either for miter-limit\n // sizing. Force bevel when either adjacent segment itself tapers by\n // more than `varyingThreshold` — the miter apex math computes against\n // outer edges parallel to the segment direction, an assumption that\n // breaks on tapered trapezoids (outer edges fan in/out).\n const halfAtCorner = a.halfB;\n const taperA = Math.max(a.halfA, a.halfB) / Math.max(1e-9, Math.min(a.halfA, a.halfB));\n const taperB = Math.max(b.halfA, b.halfB) / Math.max(1e-9, Math.min(b.halfA, b.halfB));\n const forceBevelForVarying = taperA > varyingThreshold || taperB > varyingThreshold;\n\n if (join === 'bevel' || forceBevelForVarying) {\n emitBevel(a, aOuterEnd, bOuterStart, onPositive, verts, idx, anchorA, anchorB, anchorT, cornerA, cornerB, cornerT);\n return;\n }\n\n if (join === 'miter') {\n // Compute apex: intersection of A's outer edge extended forward and\n // B's outer edge extended backward. If miter length > MITER_LIMIT * half,\n // fall back to bevel.\n const aOX = verts[aOuterEnd * 2], aOY = verts[aOuterEnd * 2 + 1];\n const bOX = verts[bOuterStart * 2], bOY = verts[bOuterStart * 2 + 1];\n const apex = lineLineIntersect(aOX, aOY, adx, ady, bOX, bOY, -bdx, -bdy);\n if (!apex) {\n emitBevel(a, aOuterEnd, bOuterStart, onPositive, verts, idx, anchorA, anchorB, anchorT, cornerA, cornerB, cornerT);\n return;\n }\n const miterLen = Math.hypot(apex[0] - a.bx, apex[1] - a.by);\n if (miterLen > miterLimit * halfAtCorner) {\n emitBevel(a, aOuterEnd, bOuterStart, onPositive, verts, idx, anchorA, anchorB, anchorT, cornerA, cornerB, cornerT);\n return;\n }\n // A miter join's outer face is a kite quadrilateral with vertices\n // (R1, apex, R0, J) — covered by TWO triangles. The bevel inner half\n // (R1, R0, J) fills the area between the joint corner and the diagonal\n // hypotenuse R0-R1; the outer extension (R1, apex, R0) fills from the\n // hypotenuse to the apex point. Without the bevel half, an \"inverted\n // triangle\" gap opens at every miter corner.\n const apexIdx = verts.length / 2;\n verts.push(apex[0], apex[1]);\n anchorA.push(cornerA); anchorB.push(cornerB); anchorT.push(cornerT);\n const jIdx = verts.length / 2;\n verts.push(a.bx, a.by);\n anchorA.push(cornerA); anchorB.push(cornerB); anchorT.push(cornerT);\n if (onPositive) {\n idx.push(aOuterEnd, apexIdx, bOuterStart);\n idx.push(aOuterEnd, bOuterStart, jIdx);\n } else {\n idx.push(aOuterEnd, bOuterStart, apexIdx);\n idx.push(aOuterEnd, jIdx, bOuterStart);\n }\n return;\n }\n\n if (join === 'round') {\n emitRoundJoin(a, aOuterEnd, bOuterStart, onPositive, verts, idx, anchorA, anchorB, anchorT, cornerA, cornerB, cornerT);\n return;\n }\n}\n\nconst ROUND_STEP_RAD = (10 * Math.PI) / 180; // ~10° per fan triangle\n\nfunction emitRoundJoin(\n a: Seg, aOuterEnd: number, bOuterStart: number, onPositive: boolean,\n verts: number[], idx: number[],\n anchorA: number[], anchorB: number[], anchorT: number[],\n cornerA: number, cornerB: number, cornerT: number,\n): void {\n // Pivot = joint center; emit fresh vertex.\n const cx = a.bx, cy = a.by;\n const pivotIdx = verts.length / 2;\n verts.push(cx, cy);\n anchorA.push(cornerA); anchorB.push(cornerB); anchorT.push(cornerT);\n\n const startX = verts[aOuterEnd * 2] - cx;\n const startY = verts[aOuterEnd * 2 + 1] - cy;\n const endX = verts[bOuterStart * 2] - cx;\n const endY = verts[bOuterStart * 2 + 1] - cy;\n const r = Math.hypot(startX, startY);\n\n const startAngle = Math.atan2(startY, startX);\n const endAngle = Math.atan2(endY, endX);\n // Outer-side sweep: for CCW turns (cross > 0, onPositive true) outer is on\n // the -n side and the arc sweeps from R1 (south of joint) clockwise to R0\n // (east of joint) — i.e., negative sweep. For CW turns, sweep is positive.\n // Pick the SHORT arc that crosses the outer wedge. For onPositive=true\n // (CW turn in screen coords with y-down), the outer wedge sits where the\n // natural sweep is positive; for onPositive=false, where it is negative.\n // If the natural sweep has the wrong sign, wrap by ±2π.\n let sweep = endAngle - startAngle;\n if (onPositive && sweep < 0) sweep += 2 * Math.PI;\n else if (!onPositive && sweep > 0) sweep -= 2 * Math.PI;\n\n const steps = Math.max(1, Math.ceil(Math.abs(sweep) / ROUND_STEP_RAD));\n const stepAngle = sweep / steps;\n\n let prevIdx = aOuterEnd;\n for (let i = 1; i < steps; i++) {\n const ang = startAngle + i * stepAngle;\n const fx = cx + Math.cos(ang) * r;\n const fy = cy + Math.sin(ang) * r;\n const newIdx = verts.length / 2;\n verts.push(fx, fy);\n anchorA.push(cornerA); anchorB.push(cornerB); anchorT.push(cornerT);\n if (onPositive) idx.push(prevIdx, pivotIdx, newIdx);\n else idx.push(prevIdx, newIdx, pivotIdx);\n prevIdx = newIdx;\n }\n if (onPositive) idx.push(prevIdx, pivotIdx, bOuterStart);\n else idx.push(prevIdx, bOuterStart, pivotIdx);\n}\n\nfunction emitBevel(\n a: Seg, aOuterEnd: number, bOuterStart: number, onPositive: boolean,\n verts: number[], idx: number[],\n anchorA: number[], anchorB: number[], anchorT: number[],\n cornerA: number, cornerB: number, cornerT: number,\n): void {\n const jIdx = verts.length / 2;\n verts.push(a.bx, a.by);\n anchorA.push(cornerA); anchorB.push(cornerB); anchorT.push(cornerT);\n if (onPositive) idx.push(aOuterEnd, jIdx, bOuterStart);\n else idx.push(aOuterEnd, bOuterStart, jIdx);\n}\n\n/**\n * Solve for the intersection of line A (point ap, direction ad) with line B\n * (point bp, direction bd). Returns null if parallel or near-parallel.\n */\nfunction lineLineIntersect(\n apx: number, apy: number, adx: number, ady: number,\n bpx: number, bpy: number, bdx: number, bdy: number,\n): [number, number] | null {\n const denom = adx * bdy - ady * bdx;\n if (Math.abs(denom) < 1e-9) return null;\n const t = ((bpx - apx) * bdy - (bpy - apy) * bdx) / denom;\n return [apx + t * adx, apy + t * ady];\n}\n"],"mappings":"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"}
@@ -1,32 +0,0 @@
1
- //#region src/features/paths/tessellate/vertexWidths.ts
2
- function e(e, n, r, i) {
3
- let a = e.points.length / 2;
4
- if (a === 0) return;
5
- let o = e.anchorA ?? new Uint32Array(a), s = e.anchorB ?? new Uint32Array(a), c = e.anchorT ?? new Float32Array(a), l = new Float32Array(a), u = 1, d = (e) => {
6
- let t = n[e];
7
- return typeof t == "number" && isFinite(t) && t > 0 ? t * u : r;
8
- };
9
- for (let n = 0; n < a; n++) {
10
- i && (u = t(e, n, i));
11
- let r = o[n], a = s[n], f = c[n];
12
- if (r === a) l[n] = d(r);
13
- else {
14
- let e = d(r), t = d(a);
15
- l[n] = e + (t - e) * f;
16
- }
17
- }
18
- e.widths = l;
19
- }
20
- function t(e, t, n) {
21
- let r = e.points, i = r.length / 2, a = 0, o = 0, s = (e, t) => {
22
- let n = r[t * 2] - r[e * 2], i = r[t * 2 + 1] - r[e * 2 + 1], s = Math.hypot(n, i);
23
- s > 0 && (a += n / s, o += i / s);
24
- };
25
- t > 0 ? s(t - 1, t) : e.closed && i > 1 && s(i - 1, 0), t < i - 1 ? s(t, t + 1) : e.closed && i > 1 && s(i - 1, 0);
26
- let c = Math.hypot(a, o);
27
- return c > 0 ? n(a / c, o / c) : 1;
28
- }
29
- //#endregion
30
- export { e as populatePolylineWidths };
31
-
32
- //# sourceMappingURL=vertexWidths.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"vertexWidths.js","names":["populatePolylineWidths","ptCount","pl","aA","aB","aT","widths","k","read","v","vertexWidths","i","fallbackWidth","scale","scaleAt","a","b","t","wa","wb","pts","n","tx","ty","add","dx","to","from","dy","len"],"sources":["../../../../src/features/paths/tessellate/vertexWidths.ts"],"sourcesContent":["import type { Polyline } from '@weasel-js/geom/tessellate';\n\n/** What one unit of a `vertexWidths` entry measures across the line at a\n * point whose unit tangent, in the polyline's own space, is `(tx, ty)`. */\nexport type WidthScale = (tx: number, ty: number) => number;\n\n/** Fill `pl.widths` by interpolating `vertexWidths` across each point's\n * (anchorA, anchorB, anchorT). Anchor-aligned points (A === B) read the\n * anchor's value directly. Out-of-range / non-finite anchor entries fall\n * back to `fallbackWidth`. Given `scale`, each entry is scaled at the point\n * that reads it, and the fallback is not. */\nexport function populatePolylineWidths(\n pl: Polyline,\n vertexWidths: number[],\n fallbackWidth: number,\n scale?: WidthScale,\n): void {\n const ptCount = pl.points.length / 2;\n if (ptCount === 0) return;\n const aA = pl.anchorA ?? new Uint32Array(ptCount);\n const aB = pl.anchorB ?? new Uint32Array(ptCount);\n const aT = pl.anchorT ?? new Float32Array(ptCount);\n const widths = new Float32Array(ptCount);\n let k = 1;\n const read = (i: number): number => {\n const v = vertexWidths[i];\n return typeof v === 'number' && isFinite(v) && v > 0 ? v * k : fallbackWidth;\n };\n for (let i = 0; i < ptCount; i++) {\n if (scale) k = scaleAt(pl, i, scale);\n const a = aA[i], b = aB[i], t = aT[i];\n if (a === b) {\n widths[i] = read(a);\n } else {\n const wa = read(a);\n const wb = read(b);\n widths[i] = wa + (wb - wa) * t;\n }\n }\n pl.widths = widths;\n}\n\n/** `scale` along the line's direction at point `i`: the bisector of the\n * segments either side, or the one segment at an open end. */\nfunction scaleAt(pl: Polyline, i: number, scale: WidthScale): number {\n const pts = pl.points;\n const n = pts.length / 2;\n let tx = 0, ty = 0;\n const add = (from: number, to: number) => {\n const dx = pts[to * 2] - pts[from * 2], dy = pts[to * 2 + 1] - pts[from * 2 + 1];\n const len = Math.hypot(dx, dy);\n if (len > 0) { tx += dx / len; ty += dy / len; }\n };\n if (i > 0) add(i - 1, i);\n else if (pl.closed && n > 1) add(n - 1, 0);\n if (i < n - 1) add(i, i + 1);\n else if (pl.closed && n > 1) add(n - 1, 0);\n const len = Math.hypot(tx, ty);\n return len > 0 ? scale(tx / len, ty / len) : 1;\n}\n"],"mappings":";AAWA,SAAgBA,EACd,GACA,GACA,GACA,GACM;CACN,IAAMC,IAAUC,EAAG,OAAO,SAAS;CACnC,IAAID,MAAY,GAAG;CACnB,IAAME,IAAKD,EAAG,WAAW,IAAI,YAAYD,CAAO,GAC1CG,IAAKF,EAAG,WAAW,IAAI,YAAYD,CAAO,GAC1CI,IAAKH,EAAG,WAAW,IAAI,aAAaD,CAAO,GAC3CK,IAAS,IAAI,aAAaL,CAAO,GACnCM,IAAI,GACFC,KAAQ,MAAsB;EAClC,IAAMC,IAAIC,EAAaC;EACvB,OAAO,OAAOF,KAAM,YAAY,SAASA,CAAC,KAAKA,IAAI,IAAIA,IAAIF,IAAIK;CACjE;CACA,KAAK,IAAID,IAAI,GAAGA,IAAIV,GAAS,KAAK;EAChC,AAAIY,MAAO,IAAIC,EAAQZ,GAAIS,GAAGE,CAAK;EACnC,IAAME,IAAIZ,EAAGQ,IAAIK,IAAIZ,EAAGO,IAAIM,IAAIZ,EAAGM;EACnC,IAAII,MAAMC,GACR,EAAOL,KAAKH,EAAKO,CAAC;OACb;GACL,IAAMG,IAAKV,EAAKO,CAAC,GACXI,IAAKX,EAAKQ,CAAC;GACjB,EAAOL,KAAKO,KAAMC,IAAKD,KAAMD;EAC/B;CACF;CACA,EAAG,SAASX;AACd;AAIA,SAASQ,EAAQ,GAAc,GAAW,GAA2B;CACnE,IAAMM,IAAMlB,EAAG,QACTmB,IAAID,EAAI,SAAS,GACnBE,IAAK,GAAGC,IAAK,GACXC,KAAO,GAAc,MAAe;EACxC,IAAMC,IAAKL,EAAIM,IAAK,KAAKN,EAAIO,IAAO,IAAIC,IAAKR,EAAIM,IAAK,IAAI,KAAKN,EAAIO,IAAO,IAAI,IACxEE,IAAM,KAAK,MAAMJ,GAAIG,CAAE;EAC7B,AAAIC,IAAM,MAAK,KAAMJ,IAAKI,GAAK,KAAMD,IAAKC;CAC5C;CAGA,AAFIlB,IAAI,IAAGa,EAAIb,IAAI,GAAGA,CAAC,IACdT,EAAG,UAAUmB,IAAI,KAAGG,EAAIH,IAAI,GAAG,CAAC,GACrCV,IAAIU,IAAI,IAAGG,EAAIb,GAAGA,IAAI,CAAC,IAClBT,EAAG,UAAUmB,IAAI,KAAGG,EAAIH,IAAI,GAAG,CAAC;CACzC,IAAMQ,IAAM,KAAK,MAAMP,GAAIC,CAAE;CAC7B,OAAOM,IAAM,IAAIhB,EAAMS,IAAKO,GAAKN,IAAKM,CAAG,IAAI;AAC/C"}
@@ -1,23 +0,0 @@
1
- import { registerTexture as e } from "../../renderer/textures/registerTexture.js";
2
- //#region src/features/patterns/index.ts
3
- function t(t) {
4
- let n;
5
- try {
6
- n = new OffscreenCanvas(t.size, t.size);
7
- } catch {
8
- if (typeof document > "u") return null;
9
- let e = document.createElement("canvas");
10
- e.width = t.size, e.height = t.size, n = e;
11
- }
12
- let r = n.getContext("2d");
13
- if (!r) return null;
14
- t.draw(r, t.size);
15
- let i;
16
- if (typeof n.transferToImageBitmap == "function") i = n.transferToImageBitmap();
17
- else return null;
18
- return e(i);
19
- }
20
- //#endregion
21
- export { t as createTilePattern };
22
-
23
- //# sourceMappingURL=index.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.js","names":["createTilePattern","off","opts","c","oc","bitmap","registerTexture"],"sources":["../../../src/features/patterns/index.ts"],"sourcesContent":["/**\n * Tile-pattern primitive — a small helper for building repeating texture\n * tiles from a draw callback. The result plugs into a `FillStyle` of\n * `{ fill: 'pattern', pattern }` (see `@weasel-js/paint`).\n *\n * GL-backed: the tile is rendered to an `OffscreenCanvas` (with a 2D fallback\n * to a regular `<canvas>` for environments without `OffscreenCanvas`),\n * converted to an `ImageBitmap`, and registered with `registerTexture()`.\n * The returned `TextureHandle` is what `FillStyle.pattern` accepts.\n *\n * For ready-to-use named patterns (hatch, crosshatch, dots, chunks),\n * see the `@weasel-js/core/patterns-builtin` subpath.\n */\n\nimport { registerTexture } from '../../renderer/textures/registerTexture';\nimport type { TextureHandle } from '../../renderer/textures/registerTexture';\n\n/** Options for `createTilePattern`. */\nexport interface TilePatternOpts {\n /** Edge length (in pixels) of the square offscreen tile. */\n size: number;\n /** FillStyle one tile at integer-pixel coordinates `(0, 0) .. (size, size)`. */\n draw: (oc: CanvasRenderingContext2D, size: number) => void;\n}\n\n/**\n * Render a single tile to an offscreen canvas and register it as a GL\n * texture, returning a `TextureHandle` you can wrap in a `FillStyle` of\n * `{ fill: 'pattern', pattern }`. Returns `null` only when an\n * `OffscreenCanvas`/2D context can't be acquired (very rare; same fallback\n * semantics as the prior `CanvasPattern`-based implementation).\n */\nexport function createTilePattern(opts: TilePatternOpts): TextureHandle | null {\n // Prefer OffscreenCanvas; fall back to <canvas> for environments without it\n // (tests in jsdom may need that fallback — try OffscreenCanvas first).\n let off: OffscreenCanvas | HTMLCanvasElement;\n try {\n off = new OffscreenCanvas(opts.size, opts.size);\n } catch {\n if (typeof document === 'undefined') return null;\n const c = document.createElement('canvas');\n c.width = opts.size;\n c.height = opts.size;\n off = c;\n }\n const oc = off.getContext('2d') as CanvasRenderingContext2D | null;\n if (!oc) return null;\n opts.draw(oc, opts.size);\n\n // Convert to ImageBitmap so registerTexture can store it.\n // OffscreenCanvas.transferToImageBitmap() is the fast path; the\n // synchronous path requires OffscreenCanvas. If we got here without it,\n // the env doesn't support OffscreenCanvas — fail gracefully.\n let bitmap: ImageBitmap;\n if (typeof (off as OffscreenCanvas).transferToImageBitmap === 'function') {\n bitmap = (off as OffscreenCanvas).transferToImageBitmap();\n } else {\n return null;\n }\n return registerTexture(bitmap);\n}\n"],"mappings":";;AAgCA,SAAgBA,EAAkB,GAA6C;CAG7E,IAAIC;CACJ,IAAI;EACF,IAAM,IAAI,gBAAgBC,EAAK,MAAMA,EAAK,IAAI;CAChD,QAAQ;EACN,IAAI,OAAO,WAAa,KAAa,OAAO;EAC5C,IAAMC,IAAI,SAAS,cAAc,QAAQ;EAGzC,AAFA,EAAE,QAAQD,EAAK,MACf,EAAE,SAASA,EAAK,MAChB,IAAMC;CACR;CACA,IAAMC,IAAKH,EAAI,WAAW,IAAI;CAC9B,IAAI,CAACG,GAAI,OAAO;CAChB,EAAK,KAAKA,GAAIF,EAAK,IAAI;CAMvB,IAAIG;CACJ,IAAI,OAAQJ,EAAwB,yBAA0B,YAC5D,IAAUA,EAAwB,sBAAsB;MAExD,OAAO;CAET,OAAOK,EAAgBD,CAAM;AAC/B"}
@@ -1,38 +0,0 @@
1
- import { drawTileShapes as e, tileGeometry as t, tileSize as n } from "./tileGeometry.js";
2
- import { createTilePattern as r } from "./index.js";
3
- //#region src/features/patterns/patterns-builtin.ts
4
- function i(i) {
5
- let a = t(i);
6
- return r({
7
- size: n(i),
8
- draw: (t) => e(t, a)
9
- });
10
- }
11
- function a(e) {
12
- return i({
13
- tile: "hatch",
14
- ...e
15
- });
16
- }
17
- function o(e) {
18
- return i({
19
- tile: "crosshatch",
20
- ...e
21
- });
22
- }
23
- function s(e) {
24
- return i({
25
- tile: "dots",
26
- ...e
27
- });
28
- }
29
- function c(e) {
30
- return i({
31
- tile: "chunks",
32
- ...e
33
- });
34
- }
35
- //#endregion
36
- export { c as chunks, o as crosshatch, s as dots, e as drawTileShapes, a as hatch, t as tileGeometry, n as tileSize };
37
-
38
- //# sourceMappingURL=patterns-builtin.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"patterns-builtin.js","names":["build","geometry","tileGeometry","spec","createTilePattern","tileSize","drawTileShapes","oc","hatch","params","crosshatch","dots","chunks"],"sources":["../../../src/features/patterns/patterns-builtin.ts"],"sourcesContent":["/**\n * Built-in pattern factories — generic line/dot/scatter textures. Each\n * returns a `TextureHandle` you can wrap in a `FillStyle` of\n * `{ fill: 'pattern', pattern }` and pass to anything that accepts a `FillStyle`\n * (`FillStyle`-aware layers, path fills, etc.).\n * Imported from a subpath so consumers that ship their own catalog can\n * avoid the bundle cost.\n *\n * All factories require an explicit `color` (and `bg` for `chunks`). No\n * defaults are baked in — the caller's design system is the source of truth\n * for palette decisions.\n *\n * Each is a thin wrapper over `tileGeometry`, which describes the tile as\n * shapes so `@weasel-js/svg` can emit the same tile as a `<pattern>`.\n * Prefer naming a tile in a `TilePatternSpec` over calling these directly —\n * a spec serializes, a `TextureHandle` does not.\n */\n\nexport { tileGeometry, tileSize, drawTileShapes } from './tileGeometry';\nexport type { TileShape, TileGeometry } from './tileGeometry';\n\nimport { createTilePattern } from '.';\nimport { tileGeometry, drawTileShapes, tileSize } from './tileGeometry';\nimport type { TilePatternSpec } from '@weasel-js/paint';\nimport type { TextureHandle } from '../../renderer/textures/registerTexture';\n\nfunction build(spec: TilePatternSpec): TextureHandle | null {\n const geometry = tileGeometry(spec);\n return createTilePattern({\n size: tileSize(spec),\n draw: (oc) => drawTileShapes(oc, geometry),\n });\n}\n\n/** Diagonal hatch (forward slash). */\nexport interface HatchParams {\n color: string;\n size?: number;\n lineWidth?: number;\n}\n\n/** Build a diagonal-hatch pattern texture. */\nexport function hatch(params: HatchParams): TextureHandle | null {\n return build({ tile: 'hatch', ...params });\n}\n\n/** Diagonal hatch in both directions. */\nexport interface CrosshatchParams {\n color: string;\n size?: number;\n lineWidth?: number;\n}\n\n/** Build a crosshatch pattern texture. */\nexport function crosshatch(params: CrosshatchParams): TextureHandle | null {\n return build({ tile: 'crosshatch', ...params });\n}\n\n/** Regular grid of filled dots. */\nexport interface DotsParams {\n color: string;\n size?: number;\n radius?: number;\n}\n\n/** Build a dot-grid pattern texture. */\nexport function dots(params: DotsParams): TextureHandle | null {\n return build({ tile: 'dots', ...params });\n}\n\n/**\n * Random scatter of small ellipses on top of a solid background. Driven by a\n * seeded PRNG so the same `seed` produces a deterministic tile.\n *\n * Note: the `bg` field is optional — omit it for a transparent background\n * (the scatter shapes draw directly onto whatever sits beneath the overlay).\n */\nexport interface ChunksParams {\n color: string;\n bg?: string;\n size?: number;\n /** Coverage: `chunks * chunkSize²` per `size²` tile. Range ~[0, 1]. */\n density?: number;\n chunkSize?: number;\n seed?: number;\n}\n\n/** Build a seeded random-scatter pattern texture. */\nexport function chunks(params: ChunksParams): TextureHandle | null {\n return build({ tile: 'chunks', ...params });\n}\n"],"mappings":";;;AA0BA,SAASA,EAAM,GAA6C;CAC1D,IAAMC,IAAWC,EAAaC,CAAI;CAClC,OAAOC,EAAkB;EACvB,MAAMC,EAASF,CAAI;EACnB,OAAO,MAAOG,EAAeC,GAAIN,CAAQ;CAC3C,CAAC;AACH;AAUA,SAAgBO,EAAM,GAA2C;CAC/D,OAAOR,EAAM;EAAE,MAAM;EAAS,GAAGS;CAAO,CAAC;AAC3C;AAUA,SAAgBC,EAAW,GAAgD;CACzE,OAAOV,EAAM;EAAE,MAAM;EAAc,GAAGS;CAAO,CAAC;AAChD;AAUA,SAAgBE,EAAK,GAA0C;CAC7D,OAAOX,EAAM;EAAE,MAAM;EAAQ,GAAGS;CAAO,CAAC;AAC1C;AAoBA,SAAgBG,EAAO,GAA4C;CACjE,OAAOZ,EAAM;EAAE,MAAM;EAAU,GAAGS;CAAO,CAAC;AAC5C"}
@@ -1,57 +0,0 @@
1
- import { chunks as e, crosshatch as t, dots as n, hatch as r } from "./patterns-builtin.js";
2
- //#region src/features/patterns/resolveSpec.ts
3
- var i = /* @__PURE__ */ new Map();
4
- function a(e) {
5
- let t = Object.keys(e).sort(), n = e;
6
- return t.map((e) => `${e}=${String(n[e])}`).join("&");
7
- }
8
- function o(e) {
9
- let t = a(e), n = i.get(t);
10
- if (n !== void 0) return n;
11
- let r = s(e);
12
- return i.set(t, r), r;
13
- }
14
- function s(i) {
15
- let { color: a, size: o } = i;
16
- switch (i.tile) {
17
- case "hatch": return r({
18
- color: a,
19
- size: o,
20
- lineWidth: i.lineWidth
21
- });
22
- case "crosshatch": return t({
23
- color: a,
24
- size: o,
25
- lineWidth: i.lineWidth
26
- });
27
- case "dots": return n({
28
- color: a,
29
- size: o,
30
- radius: i.radius
31
- });
32
- case "chunks": return e({
33
- color: a,
34
- size: o,
35
- bg: i.bg,
36
- density: i.density,
37
- chunkSize: i.chunkSize,
38
- seed: i.seed
39
- });
40
- default: return null;
41
- }
42
- }
43
- function c(e) {
44
- return "tile" in e;
45
- }
46
- function l(e) {
47
- if (e.fill !== "pattern" || !c(e.pattern)) return e;
48
- let t = o(e.pattern);
49
- return t ? {
50
- ...e,
51
- pattern: t
52
- } : null;
53
- }
54
- //#endregion
55
- export { c as isPatternSpec, l as resolveFillPattern, o as resolvePatternSpec };
56
-
57
- //# sourceMappingURL=resolveSpec.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"resolveSpec.js","names":["cache","specKey","keys","spec","bag","k","resolvePatternSpec","key","hit","built","buildTile","hatch","crosshatch","dots","chunks","isPatternSpec","payload","resolveFillPattern","fill","handle"],"sources":["../../../src/features/patterns/resolveSpec.ts"],"sourcesContent":["/**\n * `TilePatternSpec` → `TextureHandle`. The bridge between the serializable\n * half of a pattern paint and the GL texture that paints it.\n *\n * Memoized on the spec's field values, so identical specs across nodes share\n * one texture and a re-render never re-rasterizes. Entries live for the\n * session, matching `registerTexture`'s own lifetime.\n */\n\nimport type { FillStyle, TilePatternSpec } from '@weasel-js/paint';\nimport type { TextureHandle } from '../../renderer/textures/registerTexture';\nimport { hatch, crosshatch, dots, chunks } from './patterns-builtin';\n\nconst cache = new Map<string, TextureHandle | null>();\n\n/** Stable key across key order — specs arriving from JSON have no guaranteed\n * field order, and two orderings must not rasterize two tiles. */\nfunction specKey(spec: TilePatternSpec): string {\n const keys = Object.keys(spec).sort();\n const bag = spec as unknown as Record<string, unknown>;\n return keys.map((k) => `${k}=${String(bag[k])}`).join('&');\n}\n\n/** @internal Test helper — do not call from product code. */\nexport function _resetPatternSpecCacheForTests(): void {\n cache.clear();\n}\n\n/**\n * Build (or fetch) the texture for a spec. Returns `null` when the tile\n * can't be rasterized — no `OffscreenCanvas`, same as `createTilePattern`.\n */\nexport function resolvePatternSpec(spec: TilePatternSpec): TextureHandle | null {\n const key = specKey(spec);\n const hit = cache.get(key);\n if (hit !== undefined) return hit;\n\n const built = buildTile(spec);\n cache.set(key, built);\n return built;\n}\n\nfunction buildTile(spec: TilePatternSpec): TextureHandle | null {\n const { color, size } = spec;\n switch (spec.tile) {\n case 'hatch':\n return hatch({ color, size, lineWidth: spec.lineWidth });\n case 'crosshatch':\n return crosshatch({ color, size, lineWidth: spec.lineWidth });\n case 'dots':\n return dots({ color, size, radius: spec.radius });\n case 'chunks':\n return chunks({\n color, size, bg: spec.bg,\n density: spec.density, chunkSize: spec.chunkSize, seed: spec.seed,\n });\n default:\n return null;\n }\n}\n\n/** Whether a pattern payload is a spec rather than an already-built handle. */\nexport function isPatternSpec(\n payload: TextureHandle | TilePatternSpec,\n): payload is TilePatternSpec {\n return 'tile' in payload;\n}\n\n/**\n * Swap a pattern paint's spec payload for the texture that paints it,\n * leaving every other fill untouched. The built-in painters run this\n * alongside `fillInPoseFrame`; a consumer emitting its own draw commands\n * runs it at the same place it runs that one.\n *\n * A spec that can't rasterize drops the fill rather than painting garbage.\n */\nexport function resolveFillPattern(fill: FillStyle): FillStyle | null {\n if (fill.fill !== 'pattern') return fill;\n if (!isPatternSpec(fill.pattern)) return fill;\n const handle = resolvePatternSpec(fill.pattern);\n return handle ? { ...fill, pattern: handle } : null;\n}\n"],"mappings":";;AAaA,IAAMA,oBAAQ,IAAI,IAAkC;AAIpD,SAASC,EAAQ,GAA+B;CAC9C,IAAMC,IAAO,OAAO,KAAKC,CAAI,CAAC,CAAC,KAAK,GAC9BC,IAAMD;CACZ,OAAOD,EAAK,KAAK,MAAM,GAAGG,EAAE,GAAG,OAAOD,EAAIC,EAAE,GAAG,CAAC,CAAC,KAAK,GAAG;AAC3D;AAWA,SAAgBC,EAAmB,GAA6C;CAC9E,IAAMC,IAAMN,EAAQE,CAAI,GAClBK,IAAMR,EAAM,IAAIO,CAAG;CACzB,IAAIC,MAAQ,KAAA,GAAW,OAAOA;CAE9B,IAAMC,IAAQC,EAAUP,CAAI;CAE5B,OADAH,EAAM,IAAIO,GAAKE,CAAK,GACbA;AACT;AAEA,SAASC,EAAU,GAA6C;CAC9D,IAAM,EAAE,UAAO,YAASP;CACxB,QAAQA,EAAK,MAAb;EACE,KAAK,SACH,OAAOQ,EAAM;GAAE;GAAO;GAAM,WAAWR,EAAK;EAAU,CAAC;EACzD,KAAK,cACH,OAAOS,EAAW;GAAE;GAAO;GAAM,WAAWT,EAAK;EAAU,CAAC;EAC9D,KAAK,QACH,OAAOU,EAAK;GAAE;GAAO;GAAM,QAAQV,EAAK;EAAO,CAAC;EAClD,KAAK,UACH,OAAOW,EAAO;GACZ;GAAO;GAAM,IAAIX,EAAK;GACtB,SAASA,EAAK;GAAS,WAAWA,EAAK;GAAW,MAAMA,EAAK;EAC/D,CAAC;EACH,SACE,OAAO;CACX;AACF;AAGA,SAAgBY,EACd,GAC4B;CAC5B,OAAO,UAAUC;AACnB;AAUA,SAAgBC,EAAmB,GAAmC;CAEpE,IADIC,EAAK,SAAS,aACd,CAACH,EAAcG,EAAK,OAAO,GAAG,OAAOA;CACzC,IAAMC,IAASb,EAAmBY,EAAK,OAAO;CAC9C,OAAOC,IAAS;EAAE,GAAGD;EAAM,SAASC;CAAO,IAAI;AACjD"}
@@ -1,158 +0,0 @@
1
- //#region src/features/patterns/tileGeometry.ts
2
- function e(e) {
3
- if (e.size !== void 0) return e.size;
4
- switch (e.tile) {
5
- case "hatch": return 5;
6
- case "crosshatch": return 6;
7
- case "dots": return 6;
8
- case "chunks": return 48;
9
- default: return 8;
10
- }
11
- }
12
- function t(e) {
13
- let t = e | 0;
14
- return () => {
15
- t = t + 1831565813 | 0;
16
- let e = Math.imul(t ^ t >>> 15, 1 | t);
17
- return e = e + Math.imul(e ^ e >>> 7, 61 | e) ^ e, ((e ^ e >>> 14) >>> 0) / 4294967296;
18
- };
19
- }
20
- function n(n) {
21
- let a = e(n), { color: o } = n;
22
- switch (n.tile) {
23
- case "hatch": return {
24
- size: a,
25
- shapes: r(a, n.lineWidth ?? 1, o)
26
- };
27
- case "crosshatch": {
28
- let e = n.lineWidth ?? .8;
29
- return {
30
- size: a,
31
- shapes: [...r(a, e, o), ...i(a, e, o)]
32
- };
33
- }
34
- case "dots": {
35
- let e = n.radius ?? 1;
36
- return {
37
- size: a,
38
- shapes: [{
39
- kind: "circle",
40
- cx: a / 2,
41
- cy: a / 2,
42
- r: e,
43
- color: o
44
- }]
45
- };
46
- }
47
- case "chunks": {
48
- let e = n.density ?? .35, r = n.chunkSize ?? 3, i = t(n.seed ?? 42), s = Math.round(a * a * e / (r * r)), c = [];
49
- n.bg !== void 0 && c.push({
50
- kind: "rect",
51
- x: 0,
52
- y: 0,
53
- width: a,
54
- height: a,
55
- color: n.bg
56
- });
57
- for (let e = 0; e < s; e++) {
58
- let e = i() * a, t = i() * a, n = r * (.5 + i()), s = r * (.5 + i()), l = i() * Math.PI;
59
- c.push({
60
- kind: "ellipse",
61
- cx: e,
62
- cy: t,
63
- rx: n / 2,
64
- ry: s / 2,
65
- rotation: l,
66
- color: o
67
- });
68
- }
69
- return {
70
- size: a,
71
- shapes: c
72
- };
73
- }
74
- default: return {
75
- size: a,
76
- shapes: []
77
- };
78
- }
79
- }
80
- function r(e, t, n) {
81
- return [
82
- {
83
- kind: "line",
84
- x1: -1,
85
- y1: e + 1,
86
- x2: e + 1,
87
- y2: -1,
88
- width: t,
89
- color: n
90
- },
91
- {
92
- kind: "line",
93
- x1: -1,
94
- y1: 1,
95
- x2: 1,
96
- y2: -1,
97
- width: t,
98
- color: n
99
- },
100
- {
101
- kind: "line",
102
- x1: e - 1,
103
- y1: e + 1,
104
- x2: e + 1,
105
- y2: e - 1,
106
- width: t,
107
- color: n
108
- }
109
- ];
110
- }
111
- function i(e, t, n) {
112
- return [
113
- {
114
- kind: "line",
115
- x1: -1,
116
- y1: -1,
117
- x2: e + 1,
118
- y2: e + 1,
119
- width: t,
120
- color: n
121
- },
122
- {
123
- kind: "line",
124
- x1: e - 1,
125
- y1: -1,
126
- x2: e + 1,
127
- y2: 1,
128
- width: t,
129
- color: n
130
- },
131
- {
132
- kind: "line",
133
- x1: -1,
134
- y1: e - 1,
135
- x2: 1,
136
- y2: e + 1,
137
- width: t,
138
- color: n
139
- }
140
- ];
141
- }
142
- function a(e, t) {
143
- for (let n of t.shapes) {
144
- if (n.kind === "line") {
145
- e.strokeStyle = n.color, e.lineWidth = n.width, e.beginPath(), e.moveTo(n.x1, n.y1), e.lineTo(n.x2, n.y2), e.stroke();
146
- continue;
147
- }
148
- if (e.fillStyle = n.color, n.kind === "rect") {
149
- e.fillRect(n.x, n.y, n.width, n.height);
150
- continue;
151
- }
152
- e.beginPath(), n.kind === "circle" ? e.arc(n.cx, n.cy, n.r, 0, Math.PI * 2) : e.ellipse(n.cx, n.cy, n.rx, n.ry, n.rotation, 0, Math.PI * 2), e.fill();
153
- }
154
- }
155
- //#endregion
156
- export { a as drawTileShapes, n as tileGeometry, e as tileSize };
157
-
158
- //# sourceMappingURL=tileGeometry.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"tileGeometry.js","names":["tileSize","spec","mulberry32","s","seed","t","tileGeometry","forwardDiagonals","color","width","backwardDiagonals","r","density","chunkSize","rand","count","shapes","i","cx","cy","w","h","rotation","drawTileShapes","shape","geometry","oc"],"sources":["../../../src/features/patterns/tileGeometry.ts"],"sourcesContent":["/**\n * The shapes a built-in tile is made of, as data.\n *\n * One description, two renderers: `patterns-builtin` strokes/fills these to\n * an `OffscreenCanvas` to build the GL texture, and `@weasel-js/svg` maps\n * them to `<pattern>` children. Duplicating the tile drawing in the\n * serializer would let the raster and vector forms drift apart silently.\n */\n\nimport type { TilePatternSpec } from '@weasel-js/paint';\n\n/** One primitive within a pattern tile, in tile-local coordinates. */\nexport type TileShape =\n | { kind: 'line'; x1: number; y1: number; x2: number; y2: number; width: number; color: string }\n | { kind: 'circle'; cx: number; cy: number; r: number; color: string }\n | { kind: 'ellipse'; cx: number; cy: number; rx: number; ry: number; rotation: number; color: string }\n | { kind: 'rect'; x: number; y: number; width: number; height: number; color: string };\n\n/** A built-in tile's shapes plus the edge length they're drawn within. */\nexport interface TileGeometry {\n size: number;\n shapes: TileShape[];\n}\n\n/** Defaults per tile kind, matching each factory's signature. */\nexport function tileSize(spec: TilePatternSpec): number {\n if (spec.size !== undefined) return spec.size;\n switch (spec.tile) {\n case 'hatch': return 5;\n case 'crosshatch': return 6;\n case 'dots': return 6;\n case 'chunks': return 48;\n default: return 8;\n }\n}\n\n/** Seeded PRNG (mulberry32) — `chunks` places its scatter with this, so the\n * same `seed` yields the same tile in both the raster and vector paths. */\nfunction mulberry32(seed: number): () => number {\n let s = seed | 0;\n return () => {\n s = (s + 0x6D2B79F5) | 0;\n let t = Math.imul(s ^ (s >>> 15), 1 | s);\n t = (t + Math.imul(t ^ (t >>> 7), 61 | t)) ^ t;\n return ((t ^ (t >>> 14)) >>> 0) / 4294967296;\n };\n}\n\n/** Resolve a pattern spec to the shapes that make up one tile. Consumers that\n * want to draw a pattern swatch themselves — a picker, an SVG export — read\n * this rather than rasterizing a texture. */\nexport function tileGeometry(spec: TilePatternSpec): TileGeometry {\n const s = tileSize(spec);\n const { color } = spec;\n\n switch (spec.tile) {\n case 'hatch': {\n const width = spec.lineWidth ?? 1;\n return { size: s, shapes: forwardDiagonals(s, width, color) };\n }\n case 'crosshatch': {\n const width = spec.lineWidth ?? 0.8;\n return {\n size: s,\n shapes: [...forwardDiagonals(s, width, color), ...backwardDiagonals(s, width, color)],\n };\n }\n case 'dots': {\n const r = spec.radius ?? 1;\n return { size: s, shapes: [{ kind: 'circle', cx: s / 2, cy: s / 2, r, color }] };\n }\n case 'chunks': {\n const density = spec.density ?? 0.35;\n const chunkSize = spec.chunkSize ?? 3;\n const rand = mulberry32(spec.seed ?? 42);\n const count = Math.round((s * s * density) / (chunkSize * chunkSize));\n const shapes: TileShape[] = [];\n if (spec.bg !== undefined) {\n shapes.push({ kind: 'rect', x: 0, y: 0, width: s, height: s, color: spec.bg });\n }\n for (let i = 0; i < count; i++) {\n const cx = rand() * s;\n const cy = rand() * s;\n const w = chunkSize * (0.5 + rand());\n const h = chunkSize * (0.5 + rand());\n const rotation = rand() * Math.PI;\n shapes.push({ kind: 'ellipse', cx, cy, rx: w / 2, ry: h / 2, rotation, color });\n }\n return { size: s, shapes };\n }\n default:\n return { size: s, shapes: [] };\n }\n}\n\n/** The forward (`/`) diagonal, plus the two corner stubs that make it tile\n * seamlessly across the edges. */\nfunction forwardDiagonals(s: number, width: number, color: string): TileShape[] {\n return [\n { kind: 'line', x1: -1, y1: s + 1, x2: s + 1, y2: -1, width, color },\n { kind: 'line', x1: -1, y1: 1, x2: 1, y2: -1, width, color },\n { kind: 'line', x1: s - 1, y1: s + 1, x2: s + 1, y2: s - 1, width, color },\n ];\n}\n\n/** The backward (`\\`) diagonal and its two stubs. */\nfunction backwardDiagonals(s: number, width: number, color: string): TileShape[] {\n return [\n { kind: 'line', x1: -1, y1: -1, x2: s + 1, y2: s + 1, width, color },\n { kind: 'line', x1: s - 1, y1: -1, x2: s + 1, y2: 1, width, color },\n { kind: 'line', x1: -1, y1: s - 1, x2: 1, y2: s + 1, width, color },\n ];\n}\n\n/** Draw a tile's shapes to a 2D context — the raster half of the pair. */\nexport function drawTileShapes(oc: CanvasRenderingContext2D, geometry: TileGeometry): void {\n for (const shape of geometry.shapes) {\n if (shape.kind === 'line') {\n oc.strokeStyle = shape.color;\n oc.lineWidth = shape.width;\n oc.beginPath();\n oc.moveTo(shape.x1, shape.y1);\n oc.lineTo(shape.x2, shape.y2);\n oc.stroke();\n continue;\n }\n oc.fillStyle = shape.color;\n if (shape.kind === 'rect') {\n oc.fillRect(shape.x, shape.y, shape.width, shape.height);\n continue;\n }\n oc.beginPath();\n if (shape.kind === 'circle') {\n oc.arc(shape.cx, shape.cy, shape.r, 0, Math.PI * 2);\n } else {\n oc.ellipse(shape.cx, shape.cy, shape.rx, shape.ry, shape.rotation, 0, Math.PI * 2);\n }\n oc.fill();\n }\n}\n"],"mappings":"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"}