@weasel-js/core 1.9.4 → 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 (1092) hide show
  1. package/CHANGELOG.md +750 -0
  2. package/README.md +5 -3
  3. package/dist/WeaselProvider.js +5 -7
  4. package/dist/WeaselProvider.js.map +1 -1
  5. package/dist/affordances/composeAffordanceLayer.js +91 -83
  6. package/dist/affordances/composeAffordanceLayer.js.map +1 -1
  7. package/dist/affordances/cornerResize.js +3 -2
  8. package/dist/affordances/cornerResize.js.map +1 -1
  9. package/dist/affordances/hitAffordanceRegions.js +54 -100
  10. package/dist/affordances/hitAffordanceRegions.js.map +1 -1
  11. package/dist/affordances/pathAnchors.js.map +1 -1
  12. package/dist/affordances/rotationHandle.js +5 -4
  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 +48 -136
  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 +8 -7
  44. package/dist/animation/wrappers/animateLifecycle.js.map +1 -1
  45. package/dist/animation/wrappers/animateOnSetPose.js +31 -31
  46. package/dist/animation/wrappers/animateOnSetPose.js.map +1 -1
  47. package/dist/animation/wrappers/instantPose.js.map +1 -1
  48. package/dist/animation/writtenPoseTarget.js +33 -0
  49. package/dist/animation/writtenPoseTarget.js.map +1 -0
  50. package/dist/autoPoseDescriptor-DHg5KqaJ.d.ts +27 -0
  51. package/dist/barrel/canvas.js +31 -0
  52. package/dist/barrel/chrome.js +10 -10
  53. package/dist/barrel/input.js +16 -17
  54. package/dist/barrel/interactions.js +35 -39
  55. package/dist/barrel/paint.js +11 -18
  56. package/dist/barrel/paths.js +12 -19
  57. package/dist/barrel/renderer.js +14 -20
  58. package/dist/barrel/routing.js +42 -36
  59. package/dist/barrel/scene.js +37 -0
  60. package/dist/barrel/text.js +9 -18
  61. package/dist/barrel/viewport.js +41 -51
  62. package/dist/canvas/Canvas.js +281 -475
  63. package/dist/canvas/Canvas.js.map +1 -1
  64. package/dist/canvas/CanvasView.js +169 -188
  65. package/dist/canvas/CanvasView.js.map +1 -1
  66. package/dist/canvas/CursorCoordsHud.js +22 -23
  67. package/dist/canvas/CursorCoordsHud.js.map +1 -1
  68. package/dist/canvas/DrawCanvas.js +39 -56
  69. package/dist/canvas/DrawCanvas.js.map +1 -1
  70. package/dist/canvas/ModalityHud.js.map +1 -1
  71. package/dist/canvas/NodeShape.js +28 -29
  72. package/dist/canvas/NodeShape.js.map +1 -1
  73. package/dist/canvas/PickHud.js.map +1 -1
  74. package/dist/canvas/SceneCanvas/DevHuds.js +40 -0
  75. package/dist/canvas/SceneCanvas/DevHuds.js.map +1 -0
  76. package/dist/canvas/SceneCanvas/GestureDispatcherMounter.js +66 -107
  77. package/dist/canvas/SceneCanvas/GestureDispatcherMounter.js.map +1 -1
  78. package/dist/canvas/SceneCanvas/PointerProviderIfRoot.js +27 -31
  79. package/dist/canvas/SceneCanvas/PointerProviderIfRoot.js.map +1 -1
  80. package/dist/canvas/SceneCanvas/StandardActionsRegistrar.js +51 -54
  81. package/dist/canvas/SceneCanvas/StandardActionsRegistrar.js.map +1 -1
  82. package/dist/canvas/SceneCanvas/ToolKeybindingsMounter.js +3 -3
  83. package/dist/canvas/SceneCanvas/ToolKeybindingsMounter.js.map +1 -1
  84. package/dist/canvas/SceneCanvas/coordTrace.js +37 -1
  85. package/dist/canvas/SceneCanvas/coordTrace.js.map +1 -1
  86. package/dist/canvas/SceneCanvas/defaultNodeProperties.js +40 -29
  87. package/dist/canvas/SceneCanvas/defaultNodeProperties.js.map +1 -1
  88. package/dist/canvas/SceneCanvas/defaultNodeRouting.js +1 -1
  89. package/dist/canvas/SceneCanvas/defaultNodeRouting.js.map +1 -1
  90. package/dist/canvas/SceneCanvas/dispatcherGestureBounds.js.map +1 -1
  91. package/dist/canvas/SceneCanvas/features.js +73 -43
  92. package/dist/canvas/SceneCanvas/features.js.map +1 -1
  93. package/dist/canvas/SceneCanvas/isDev.js.map +1 -1
  94. package/dist/canvas/SceneCanvas/poseGeometry.js +33 -37
  95. package/dist/canvas/SceneCanvas/poseGeometry.js.map +1 -1
  96. package/dist/canvas/SceneCanvas/props.js +15 -14
  97. package/dist/canvas/SceneCanvas/props.js.map +1 -1
  98. package/dist/canvas/SceneCanvas/toolRegistry.js +23 -0
  99. package/dist/canvas/SceneCanvas/toolRegistry.js.map +1 -0
  100. package/dist/canvas/SceneCanvas/useActionsPropResolver.js +6 -1
  101. package/dist/canvas/SceneCanvas/useActionsPropResolver.js.map +1 -1
  102. package/dist/canvas/SceneCanvas/useBuiltinShapeTools.js.map +1 -1
  103. package/dist/canvas/SceneCanvas/useBuiltinTools.js +21 -0
  104. package/dist/canvas/SceneCanvas/useBuiltinTools.js.map +1 -0
  105. package/dist/canvas/SceneCanvas/useCanvasCamera.js +38 -0
  106. package/dist/canvas/SceneCanvas/useCanvasCamera.js.map +1 -0
  107. package/dist/canvas/SceneCanvas/useCanvasDispatcher.js +20 -0
  108. package/dist/canvas/SceneCanvas/useCanvasDispatcher.js.map +1 -0
  109. package/dist/canvas/SceneCanvas/useCanvasSelection.js +16 -0
  110. package/dist/canvas/SceneCanvas/useCanvasSelection.js.map +1 -0
  111. package/dist/canvas/SceneCanvas/useCanvasTools.js +67 -0
  112. package/dist/canvas/SceneCanvas/useCanvasTools.js.map +1 -0
  113. package/dist/canvas/SceneCanvas/useDispatcherOverlayLayer.js +29 -29
  114. package/dist/canvas/SceneCanvas/useDispatcherOverlayLayer.js.map +1 -1
  115. package/dist/canvas/SceneCanvas/useHeldModifiers.js +20 -0
  116. package/dist/canvas/SceneCanvas/useHeldModifiers.js.map +1 -0
  117. package/dist/canvas/SceneCanvas/useNodeAtPoint.js +26 -0
  118. package/dist/canvas/SceneCanvas/useNodeAtPoint.js.map +1 -0
  119. package/dist/canvas/SceneCanvas/useNodeKinds.js +26 -0
  120. package/dist/canvas/SceneCanvas/useNodeKinds.js.map +1 -0
  121. package/dist/canvas/SceneCanvas/usePreviewGhostLayer.js +39 -37
  122. package/dist/canvas/SceneCanvas/usePreviewGhostLayer.js.map +1 -1
  123. package/dist/canvas/SceneCanvas/useSceneCanvasHandle.js +47 -0
  124. package/dist/canvas/SceneCanvas/useSceneCanvasHandle.js.map +1 -0
  125. package/dist/canvas/SceneCanvas/useSceneCanvasLayers.js +66 -0
  126. package/dist/canvas/SceneCanvas/useSceneCanvasLayers.js.map +1 -0
  127. package/dist/canvas/SceneCanvas/useSceneChrome.js +59 -0
  128. package/dist/canvas/SceneCanvas/useSceneChrome.js.map +1 -0
  129. package/dist/canvas/SceneCanvas/useSceneRedrawSources.js +23 -0
  130. package/dist/canvas/SceneCanvas/useSceneRedrawSources.js.map +1 -0
  131. package/dist/canvas/SceneCanvas/useSceneSelectTool.js +76 -80
  132. package/dist/canvas/SceneCanvas/useSceneSelectTool.js.map +1 -1
  133. package/dist/canvas/SceneCanvas/useSceneSlotLayers.js +37 -0
  134. package/dist/canvas/SceneCanvas/useSceneSlotLayers.js.map +1 -0
  135. package/dist/canvas/SceneCanvas/useSelectionOverlayLayer.js +38 -0
  136. package/dist/canvas/SceneCanvas/useSelectionOverlayLayer.js.map +1 -0
  137. package/dist/canvas/SceneCanvas/useViewLayerGate.js +20 -0
  138. package/dist/canvas/SceneCanvas/useViewLayerGate.js.map +1 -0
  139. package/dist/canvas/SceneCanvas/useViewportActions.js +9 -1
  140. package/dist/canvas/SceneCanvas/useViewportActions.js.map +1 -1
  141. package/dist/canvas/SceneCanvas/worldPointAt.js +9 -0
  142. package/dist/canvas/SceneCanvas/worldPointAt.js.map +1 -0
  143. package/dist/canvas/SceneCanvas.js +303 -707
  144. package/dist/canvas/SceneCanvas.js.map +1 -1
  145. package/dist/canvas/SceneViewCanvas.js +41 -47
  146. package/dist/canvas/SceneViewCanvas.js.map +1 -1
  147. package/dist/canvas/adapterDerivedPath.js +26 -0
  148. package/dist/canvas/adapterDerivedPath.js.map +1 -0
  149. package/dist/canvas/affordanceAt.js +11 -1
  150. package/dist/canvas/affordanceAt.js.map +1 -1
  151. package/dist/canvas/buildSceneLayer.js +81 -61
  152. package/dist/canvas/buildSceneLayer.js.map +1 -1
  153. package/dist/canvas/buildSceneTree.js.map +1 -1
  154. package/dist/canvas/canvasRenderer.js +40 -44
  155. package/dist/canvas/canvasRenderer.js.map +1 -1
  156. package/dist/canvas/colorOverrides.js.map +1 -1
  157. package/dist/canvas/defaultDrawOne.js +12 -12
  158. package/dist/canvas/defaultDrawOne.js.map +1 -1
  159. package/dist/canvas/deps/areaSelect.js +4 -4
  160. package/dist/canvas/deps/areaSelect.js.map +1 -1
  161. package/dist/canvas/deps/debug.js.map +1 -1
  162. package/dist/canvas/deps/editAnchors.js +49 -68
  163. package/dist/canvas/deps/editAnchors.js.map +1 -1
  164. package/dist/canvas/deps/geometryProjection.js.map +1 -1
  165. package/dist/canvas/deps/hitTestArea.js +31 -26
  166. package/dist/canvas/deps/hitTestArea.js.map +1 -1
  167. package/dist/canvas/deps/insert.js +65 -54
  168. package/dist/canvas/deps/insert.js.map +1 -1
  169. package/dist/canvas/deps/lassoSelect.js +5 -5
  170. package/dist/canvas/deps/lassoSelect.js.map +1 -1
  171. package/dist/canvas/deps/poseDescriptor.js +1 -1
  172. package/dist/canvas/deps/poseDescriptor.js.map +1 -1
  173. package/dist/canvas/deps/resizePolicy.js.map +1 -1
  174. package/dist/canvas/deps/slice.js +44 -45
  175. package/dist/canvas/deps/slice.js.map +1 -1
  176. package/dist/canvas/deps/textEdit.js +8 -8
  177. package/dist/canvas/deps/textEdit.js.map +1 -1
  178. package/dist/canvas/deps/view.js.map +1 -1
  179. package/dist/canvas/derivedPath.js +43 -41
  180. package/dist/canvas/derivedPath.js.map +1 -1
  181. package/dist/canvas/drawEnvelope.js +8 -4
  182. package/dist/canvas/drawEnvelope.js.map +1 -1
  183. package/dist/canvas/getNodeAtPoint.js +2 -6
  184. package/dist/canvas/getNodeAtPoint.js.map +1 -1
  185. package/dist/canvas/hud.module.js.map +1 -1
  186. package/dist/canvas/insertPreviewExtent.js.map +1 -1
  187. package/dist/canvas/layerOrder.js.map +1 -1
  188. package/dist/canvas/layerSlots.js +6 -1
  189. package/dist/canvas/layerSlots.js.map +1 -1
  190. package/dist/canvas/nodeShapes/derivedPainter.js +12 -12
  191. package/dist/canvas/nodeShapes/derivedPainter.js.map +1 -1
  192. package/dist/canvas/nodeShapes/imagePainter.js +10 -10
  193. package/dist/canvas/nodeShapes/imagePainter.js.map +1 -1
  194. package/dist/canvas/nodeShapes/memo.js.map +1 -1
  195. package/dist/canvas/nodeShapes/nodePaint.js +34 -23
  196. package/dist/canvas/nodeShapes/nodePaint.js.map +1 -1
  197. package/dist/canvas/nodeShapes/pathPainter.js +23 -22
  198. package/dist/canvas/nodeShapes/pathPainter.js.map +1 -1
  199. package/dist/canvas/nodeShapes/poseBox.js +6 -6
  200. package/dist/canvas/nodeShapes/poseBox.js.map +1 -1
  201. package/dist/canvas/nodeShapes/rectFallbackPainter.js +8 -8
  202. package/dist/canvas/nodeShapes/rectFallbackPainter.js.map +1 -1
  203. package/dist/canvas/nodeShapes/shapePainter.js +16 -16
  204. package/dist/canvas/nodeShapes/shapePainter.js.map +1 -1
  205. package/dist/canvas/nodeShapes/textPainter.js +1 -1
  206. package/dist/canvas/nodeShapes/textPainter.js.map +1 -1
  207. package/dist/canvas/overlayRoleStrokes.js.map +1 -1
  208. package/dist/canvas/paintCull.js +6 -8
  209. package/dist/canvas/paintCull.js.map +1 -1
  210. package/dist/{features/cursor → canvas}/paintedCursorLayer.js +2 -2
  211. package/dist/canvas/paintedCursorLayer.js.map +1 -0
  212. package/dist/canvas/pickWalk.js +52 -50
  213. package/dist/canvas/pickWalk.js.map +1 -1
  214. package/dist/canvas/planeClips.js +18 -19
  215. package/dist/canvas/planeClips.js.map +1 -1
  216. package/dist/canvas/poseCascade.js +41 -0
  217. package/dist/canvas/poseCascade.js.map +1 -0
  218. package/dist/canvas/poseRotation.js +1 -3
  219. package/dist/canvas/poseRotation.js.map +1 -1
  220. package/dist/canvas/rasterReadback.js +22 -0
  221. package/dist/canvas/rasterReadback.js.map +1 -0
  222. package/dist/canvas/renderDebugSnapshot.js +12 -12
  223. package/dist/canvas/renderDebugSnapshot.js.map +1 -1
  224. package/dist/canvas/renderNeeds.js +3 -3
  225. package/dist/canvas/renderNeeds.js.map +1 -1
  226. package/dist/canvas/renderSceneToPixels.js +64 -83
  227. package/dist/canvas/renderSceneToPixels.js.map +1 -1
  228. package/dist/canvas/sceneAdapter.js +68 -132
  229. package/dist/canvas/sceneAdapter.js.map +1 -1
  230. package/dist/canvas/sceneClipboard.js +1 -1
  231. package/dist/canvas/sceneClipboard.js.map +1 -1
  232. package/dist/canvas/sceneLayerPaint.js +4 -4
  233. package/dist/canvas/sceneLayerPaint.js.map +1 -1
  234. package/dist/canvas/sceneSlotWiring.js +4 -4
  235. package/dist/canvas/sceneSlotWiring.js.map +1 -1
  236. package/dist/canvas/sceneViewRender.js +36 -35
  237. package/dist/canvas/sceneViewRender.js.map +1 -1
  238. package/dist/canvas/slopsDebugLayer.js +4 -4
  239. package/dist/canvas/slopsDebugLayer.js.map +1 -1
  240. package/dist/canvas/surface.module.js +6 -0
  241. package/dist/canvas/surface.module.js.map +1 -0
  242. package/dist/canvas/surfaceBox.js +16 -0
  243. package/dist/canvas/surfaceBox.js.map +1 -0
  244. package/dist/canvas/useCanvasRenderer.js +23 -11
  245. package/dist/canvas/useCanvasRenderer.js.map +1 -1
  246. package/dist/canvas/useCanvasSurface.js +31 -0
  247. package/dist/canvas/useCanvasSurface.js.map +1 -0
  248. package/dist/canvas/useCanvasView.js +46 -37
  249. package/dist/canvas/useCanvasView.js.map +1 -1
  250. package/dist/canvas/useFrameLoop.js +11 -12
  251. package/dist/canvas/useFrameLoop.js.map +1 -1
  252. package/dist/canvas/useHostAnchor.js +35 -33
  253. package/dist/canvas/useHostAnchor.js.map +1 -1
  254. package/dist/canvas/useLateContentRedraw.js +8 -8
  255. package/dist/canvas/useLateContentRedraw.js.map +1 -1
  256. package/dist/canvas/useSceneLayerList.js +4 -14
  257. package/dist/canvas/useSceneLayerList.js.map +1 -1
  258. package/dist/canvas/useSurfaceInput.js +42 -0
  259. package/dist/canvas/useSurfaceInput.js.map +1 -0
  260. package/dist/canvas/useToolCursor.js +29 -0
  261. package/dist/canvas/useToolCursor.js.map +1 -0
  262. package/dist/canvas/useViewHelpers.js +46 -85
  263. package/dist/canvas/useViewHelpers.js.map +1 -1
  264. package/dist/canvas/viewInputs.js.map +1 -1
  265. package/dist/canvas/viewRegistry.js +25 -27
  266. package/dist/canvas/viewRegistry.js.map +1 -1
  267. package/dist/canvas/watchElementMove.js +43 -0
  268. package/dist/canvas/watchElementMove.js.map +1 -0
  269. package/dist/canvas/wrapNodeOutput.js.map +1 -1
  270. package/dist/clipboard.d.ts +7 -14
  271. package/dist/{types-B4iJRHC3.d.ts → clone-2a5hVbBd.d.ts} +122 -77
  272. package/dist/clone.d.ts +4 -8
  273. package/dist/clone.js +0 -2
  274. package/dist/core/device/targets.js.map +1 -1
  275. package/dist/core/device/useDeviceProfile.js +13 -13
  276. package/dist/core/device/useDeviceProfile.js.map +1 -1
  277. package/dist/{interactions/actions/resize → core/geometry}/autoPoseDescriptor.js +8 -7
  278. package/dist/core/geometry/autoPoseDescriptor.js.map +1 -0
  279. package/dist/core/geometry/pathPoseDescriptor.js +88 -0
  280. package/dist/core/geometry/pathPoseDescriptor.js.map +1 -0
  281. package/dist/core/geometry/poseDescriptor.js +61 -14
  282. package/dist/core/geometry/poseDescriptor.js.map +1 -1
  283. package/dist/core/geometry/regionHit.js +35 -37
  284. package/dist/core/geometry/regionHit.js.map +1 -1
  285. package/dist/core/geometry/targetFrame.js +94 -0
  286. package/dist/core/geometry/targetFrame.js.map +1 -0
  287. package/dist/core/geometry/unionBounds.js +4 -5
  288. package/dist/core/geometry/unionBounds.js.map +1 -1
  289. package/dist/core/layers/backgroundFill.js +31 -0
  290. package/dist/core/layers/backgroundFill.js.map +1 -0
  291. package/dist/{features/groups → core/layers}/children.js +1 -1
  292. package/dist/core/layers/children.js.map +1 -0
  293. package/dist/{features/focus → core/layers}/gateLayer.js +2 -2
  294. package/dist/core/layers/gateLayer.js.map +1 -0
  295. package/dist/core/layers/layerGroup.js +40 -0
  296. package/dist/core/layers/layerGroup.js.map +1 -0
  297. package/dist/core/layers/render.js +50 -76
  298. package/dist/core/layers/render.js.map +1 -1
  299. package/dist/core/ops/createHistory.js +9 -9
  300. package/dist/core/ops/createHistory.js.map +1 -1
  301. package/dist/core/ops/delete.js.map +1 -1
  302. package/dist/core/paint/meshKind.js +16 -0
  303. package/dist/core/paint/meshKind.js.map +1 -0
  304. package/dist/{features/meshPaint/lazyKind.js → core/paint/meshKindLazy.js} +103 -92
  305. package/dist/core/paint/meshKindLazy.js.map +1 -0
  306. package/dist/core/paint/paintKindEntry.js +8 -0
  307. package/dist/core/paint/paintKindEntry.js.map +1 -0
  308. package/dist/core/paint/paintKinds.js +144 -0
  309. package/dist/core/paint/paintKinds.js.map +1 -0
  310. package/dist/core/paint/registerMesh.js +7 -0
  311. package/dist/core/paint/registerMesh.js.map +1 -0
  312. package/dist/core/scene/NodeProperties.js.map +1 -1
  313. package/dist/core/scene/NodeRouting.js.map +1 -1
  314. package/dist/core/scene/arrivalWindow.js +65 -64
  315. package/dist/core/scene/arrivalWindow.js.map +1 -1
  316. package/dist/core/scene/boundOps.js +40 -0
  317. package/dist/core/scene/boundOps.js.map +1 -0
  318. package/dist/core/scene/composeFrame.js +9 -6
  319. package/dist/core/scene/composeFrame.js.map +1 -1
  320. package/dist/{features/groups → core/scene}/composePose.js +18 -18
  321. package/dist/core/scene/composePose.js.map +1 -0
  322. package/dist/core/scene/depMemo.js +31 -6
  323. package/dist/core/scene/depMemo.js.map +1 -1
  324. package/dist/core/scene/derivedPath.js +19 -20
  325. package/dist/core/scene/derivedPath.js.map +1 -1
  326. package/dist/core/scene/editMode.js +26 -0
  327. package/dist/core/scene/editMode.js.map +1 -0
  328. package/dist/core/scene/effectivePose.js +38 -39
  329. package/dist/core/scene/effectivePose.js.map +1 -1
  330. package/dist/core/scene/fieldEdits.js +98 -0
  331. package/dist/core/scene/fieldEdits.js.map +1 -0
  332. package/dist/core/scene/historyFacade.js +116 -70
  333. package/dist/core/scene/historyFacade.js.map +1 -1
  334. package/dist/core/scene/historyForm.js +6 -0
  335. package/dist/core/scene/historyForm.js.map +1 -0
  336. package/dist/core/scene/kitOps.js +83 -71
  337. package/dist/core/scene/kitOps.js.map +1 -1
  338. package/dist/core/scene/kitRegistry.js.map +1 -1
  339. package/dist/core/scene/layerStack.js +105 -12
  340. package/dist/core/scene/layerStack.js.map +1 -1
  341. package/dist/core/scene/layoutPass.js +58 -59
  342. package/dist/core/scene/layoutPass.js.map +1 -1
  343. package/dist/{features/groups → core/scene}/nestedHit.js +3 -3
  344. package/dist/core/scene/nestedHit.js.map +1 -0
  345. package/dist/core/scene/nodeFnFields.js +9 -9
  346. package/dist/core/scene/nodeFnFields.js.map +1 -1
  347. package/dist/core/scene/nodeMemo.js.map +1 -1
  348. package/dist/core/scene/nodeStore.js +72 -71
  349. package/dist/core/scene/nodeStore.js.map +1 -1
  350. package/dist/core/scene/notifier.js +37 -0
  351. package/dist/core/scene/notifier.js.map +1 -0
  352. package/dist/core/scene/opTable.js +50 -0
  353. package/dist/core/scene/opTable.js.map +1 -0
  354. package/dist/core/scene/outerOps.js +66 -0
  355. package/dist/core/scene/outerOps.js.map +1 -0
  356. package/dist/core/scene/poseHold.js +39 -0
  357. package/dist/core/scene/poseHold.js.map +1 -0
  358. package/dist/core/scene/poseOverrides.js +44 -36
  359. package/dist/core/scene/poseOverrides.js.map +1 -1
  360. package/dist/core/scene/poseSnapshot.js.map +1 -1
  361. package/dist/core/scene/reconcileSpecs.js +3 -2
  362. package/dist/core/scene/reconcileSpecs.js.map +1 -1
  363. package/dist/core/scene/recorder.js +86 -0
  364. package/dist/core/scene/recorder.js.map +1 -0
  365. package/dist/core/scene/renderOrder.js.map +1 -1
  366. package/dist/core/scene/scene.js +81 -690
  367. package/dist/core/scene/scene.js.map +1 -1
  368. package/dist/core/scene/sceneEdits.js +58 -0
  369. package/dist/core/scene/sceneEdits.js.map +1 -0
  370. package/dist/core/scene/sceneMutators.js +49 -0
  371. package/dist/core/scene/sceneMutators.js.map +1 -0
  372. package/dist/core/scene/scenePoseAdapter.js +16 -0
  373. package/dist/core/scene/scenePoseAdapter.js.map +1 -0
  374. package/dist/core/scene/sceneRecording.js +90 -0
  375. package/dist/core/scene/sceneRecording.js.map +1 -0
  376. package/dist/core/scene/sceneSelection.js +28 -0
  377. package/dist/core/scene/sceneSelection.js.map +1 -0
  378. package/dist/core/scene/sceneState.js +49 -0
  379. package/dist/core/scene/sceneState.js.map +1 -0
  380. package/dist/core/scene/serialization.js +8 -5
  381. package/dist/core/scene/serialization.js.map +1 -1
  382. package/dist/core/scene/staleReplay.js +51 -0
  383. package/dist/core/scene/staleReplay.js.map +1 -0
  384. package/dist/core/scene/statedFields.js +9 -0
  385. package/dist/core/scene/statedFields.js.map +1 -0
  386. package/dist/core/scene/treeEdits.js +127 -0
  387. package/dist/core/scene/treeEdits.js.map +1 -0
  388. package/dist/core/scene/treeReads.js +26 -0
  389. package/dist/core/scene/treeReads.js.map +1 -0
  390. package/dist/core/scene/types.js.map +1 -1
  391. package/dist/{features/groups → core/scene}/unionOfChildren.js +3 -3
  392. package/dist/core/scene/unionOfChildren.js.map +1 -0
  393. package/dist/core/scene/unitScopes.js +13 -0
  394. package/dist/core/scene/unitScopes.js.map +1 -0
  395. package/dist/core/scene/useScene.js.map +1 -1
  396. package/dist/core/selection/readOnlySelection.js +32 -0
  397. package/dist/core/selection/readOnlySelection.js.map +1 -0
  398. package/dist/core/selection/usePublishSceneSelection.js +26 -0
  399. package/dist/core/selection/usePublishSceneSelection.js.map +1 -0
  400. package/dist/core/selection/useSelection.js +34 -25
  401. package/dist/core/selection/useSelection.js.map +1 -1
  402. package/dist/core/shapeKinds.js.map +1 -1
  403. package/dist/core/stylus/stylus.js.map +1 -1
  404. package/dist/core/stylus/usePointerStylus.js.map +1 -1
  405. package/dist/core/usePaintKinds.js +1 -1
  406. package/dist/core/usePaintKinds.js.map +1 -1
  407. package/dist/core/viewport/clientToWorld.js.map +1 -1
  408. package/dist/core/viewport/fitViewToBounds.js.map +1 -1
  409. package/dist/core/viewport/parallax.js.map +1 -1
  410. package/dist/core/viewport/screenSlop.js +11 -11
  411. package/dist/core/viewport/screenSlop.js.map +1 -1
  412. package/dist/core/viewport/useCanvasSize.js.map +1 -1
  413. package/dist/core/viewport/useDecayLoop.js +8 -8
  414. package/dist/core/viewport/useDecayLoop.js.map +1 -1
  415. package/dist/core/viewport/useNodeOverlayFrame.js +84 -0
  416. package/dist/core/viewport/useNodeOverlayFrame.js.map +1 -0
  417. package/dist/core/viewport/useViewAnimation.js +102 -43
  418. package/dist/core/viewport/useViewAnimation.js.map +1 -1
  419. package/dist/core/viewport/view.js +7 -7
  420. package/dist/core/viewport/view.js.map +1 -1
  421. package/dist/core/viewport/wheelHandler.js.map +1 -1
  422. package/dist/{cornerHandles-CtCb8a3G.d.ts → cornerHandles-BEshc4z3.d.ts} +11 -24
  423. package/dist/debug/createDebugOverlayLayer.js +100 -100
  424. package/dist/debug/createDebugOverlayLayer.js.map +1 -1
  425. package/dist/debug/createDebugSink.js.map +1 -1
  426. package/dist/debug/frameStats.js.map +1 -1
  427. package/dist/debug/useDebugSink.js +52 -0
  428. package/dist/debug/useDebugSink.js.map +1 -0
  429. package/dist/features/chrome-caps/buildChromeCtx.js.map +1 -1
  430. package/dist/features/chrome-caps/conditions.js.map +1 -1
  431. package/dist/features/chrome-caps/defaults.js.map +1 -1
  432. package/dist/features/chrome-caps/resolve.js.map +1 -1
  433. package/dist/features/chrome-caps/useChromeCaps.js +54 -0
  434. package/dist/features/chrome-caps/useChromeCaps.js.map +1 -0
  435. package/dist/features/chrome-caps/useHoverTracking.js.map +1 -1
  436. package/dist/features/ingestion/contentHandlers.js +25 -19
  437. package/dist/features/ingestion/contentHandlers.js.map +1 -1
  438. package/dist/features/ingestion/imageHandler.js +21 -24
  439. package/dist/features/ingestion/imageHandler.js.map +1 -1
  440. package/dist/features/ingestion/openFilePicker.js.map +1 -1
  441. package/dist/features/ingestion/placement.js +16 -0
  442. package/dist/features/ingestion/placement.js.map +1 -0
  443. package/dist/features/ingestion/svgHandler.js +5 -0
  444. package/dist/features/ingestion/svgHandler.js.map +1 -1
  445. package/dist/features/ingestion/textHandler.js +28 -0
  446. package/dist/features/ingestion/textHandler.js.map +1 -0
  447. package/dist/features/ingestion/useCanvasIngestion.js +48 -0
  448. package/dist/features/ingestion/useCanvasIngestion.js.map +1 -0
  449. package/dist/features/ingestion/weaselJsonHandler.js +5 -0
  450. package/dist/features/ingestion/weaselJsonHandler.js.map +1 -1
  451. package/dist/features/longPress/longPressFeedback.js.map +1 -1
  452. package/dist/features/modes/modeLayers.js +7 -7
  453. package/dist/features/modes/modeLayers.js.map +1 -1
  454. package/dist/features/paths/editablePath.js +47 -0
  455. package/dist/features/paths/editablePath.js.map +1 -0
  456. package/dist/features/paths/index.js +9 -16
  457. package/dist/features/paths/pathEditState.js +41 -0
  458. package/dist/features/paths/pathEditState.js.map +1 -0
  459. package/dist/features/paths/pathEditingOverlayLayer.js +36 -38
  460. package/dist/features/paths/pathEditingOverlayLayer.js.map +1 -1
  461. package/dist/features/paths/pathLayer.js +3 -2
  462. package/dist/features/paths/pathLayer.js.map +1 -1
  463. package/dist/features/paths/penPreviewLayer.js +86 -88
  464. package/dist/features/paths/penPreviewLayer.js.map +1 -1
  465. package/dist/features/paths/usePathEdit.js +34 -0
  466. package/dist/features/paths/usePathEdit.js.map +1 -0
  467. package/dist/features/poseRun/usePoseRun.js +42 -55
  468. package/dist/features/poseRun/usePoseRun.js.map +1 -1
  469. package/dist/features/selection/overlay.js +170 -178
  470. package/dist/features/selection/overlay.js.map +1 -1
  471. package/dist/features/text/index.js +6 -0
  472. package/dist/features/text/textLayer.js +1 -1
  473. package/dist/features/text/textLayer.js.map +1 -1
  474. package/dist/features/text/useSceneTextEdit.js +95 -82
  475. package/dist/features/text/useSceneTextEdit.js.map +1 -1
  476. package/dist/features/viewports/viewportLayer.js +25 -36
  477. package/dist/features/viewports/viewportLayer.js.map +1 -1
  478. package/dist/index.d.ts +4507 -8459
  479. package/dist/index.js +275 -320
  480. package/dist/input/keyState.js +14 -14
  481. package/dist/interactions/actions/actionShortcuts.js.map +1 -1
  482. package/dist/interactions/actions/{defaults/align.js → align/action.js} +15 -16
  483. package/dist/interactions/actions/align/action.js.map +1 -0
  484. package/dist/interactions/actions/align/align.js +23 -23
  485. package/dist/interactions/actions/align/align.js.map +1 -1
  486. package/dist/interactions/actions/booleans/action.js +65 -0
  487. package/dist/interactions/actions/booleans/action.js.map +1 -0
  488. package/dist/interactions/actions/booleans/booleans.js +69 -78
  489. package/dist/interactions/actions/booleans/booleans.js.map +1 -1
  490. package/dist/interactions/actions/booleans/operands.js +40 -0
  491. package/dist/interactions/actions/booleans/operands.js.map +1 -0
  492. package/dist/interactions/actions/booleans/pieces.js +45 -0
  493. package/dist/interactions/actions/booleans/pieces.js.map +1 -0
  494. package/dist/interactions/actions/booleans/placement.js +24 -0
  495. package/dist/interactions/actions/booleans/placement.js.map +1 -0
  496. package/dist/interactions/actions/booleans/useBooleans.js +11 -9
  497. package/dist/interactions/actions/booleans/useBooleans.js.map +1 -1
  498. package/dist/interactions/actions/booleans/useBooleansAdapter.js.map +1 -1
  499. package/dist/interactions/actions/{defaults/clipboard.js → clipboard/action.js} +19 -19
  500. package/dist/interactions/actions/clipboard/action.js.map +1 -0
  501. package/dist/interactions/actions/clipboard/clipboardOps.js +15 -15
  502. package/dist/interactions/actions/clipboard/clipboardOps.js.map +1 -1
  503. package/dist/interactions/actions/clipboard/wireFormat.js.map +1 -1
  504. package/dist/interactions/actions/clone/action.js +98 -0
  505. package/dist/interactions/actions/clone/action.js.map +1 -0
  506. package/dist/interactions/actions/clone/behaviors.js +52 -0
  507. package/dist/interactions/actions/clone/behaviors.js.map +1 -0
  508. package/dist/interactions/actions/defaultCommitAdapter.js +10 -37
  509. package/dist/interactions/actions/defaultCommitAdapter.js.map +1 -1
  510. package/dist/interactions/actions/defaults/anchorEditing.js +41 -43
  511. package/dist/interactions/actions/defaults/anchorEditing.js.map +1 -1
  512. package/dist/interactions/actions/defaults/areaSelect.js.map +1 -1
  513. package/dist/interactions/actions/defaults/cancelGesture.js.map +1 -1
  514. package/dist/interactions/actions/defaults/clearSelection.js.map +1 -1
  515. package/dist/interactions/actions/defaults/createPaintAction.js.map +1 -1
  516. package/dist/interactions/actions/defaults/delete.js.map +1 -1
  517. package/dist/interactions/actions/defaults/duplicate.js +19 -19
  518. package/dist/interactions/actions/defaults/duplicate.js.map +1 -1
  519. package/dist/interactions/actions/defaults/enterTextEdit.js.map +1 -1
  520. package/dist/interactions/actions/defaults/group.js +35 -40
  521. package/dist/interactions/actions/defaults/group.js.map +1 -1
  522. package/dist/interactions/actions/defaults/icons/booleanIcons.js +24 -1
  523. package/dist/interactions/actions/defaults/icons/booleanIcons.js.map +1 -1
  524. package/dist/interactions/actions/defaults/icons/outlineIcons.js +39 -1
  525. package/dist/interactions/actions/defaults/icons/outlineIcons.js.map +1 -1
  526. package/dist/interactions/actions/defaults/ingest.js +19 -15
  527. package/dist/interactions/actions/defaults/ingest.js.map +1 -1
  528. package/dist/interactions/actions/defaults/insertPathAnchor.js +14 -15
  529. package/dist/interactions/actions/defaults/insertPathAnchor.js.map +1 -1
  530. package/dist/interactions/actions/defaults/nudge.js +30 -31
  531. package/dist/interactions/actions/defaults/nudge.js.map +1 -1
  532. package/dist/interactions/actions/defaults/pinchZoom.js.map +1 -1
  533. package/dist/interactions/actions/defaults/requiresSelection.js.map +1 -1
  534. package/dist/interactions/actions/defaults/setFill.js +9 -3
  535. package/dist/interactions/actions/defaults/setFill.js.map +1 -1
  536. package/dist/interactions/actions/defaults/setFillOpacity.js +4 -1
  537. package/dist/interactions/actions/defaults/setFillOpacity.js.map +1 -1
  538. package/dist/interactions/actions/defaults/setStroke.js.map +1 -1
  539. package/dist/interactions/actions/defaults/sliceOps.js +20 -22
  540. package/dist/interactions/actions/defaults/sliceOps.js.map +1 -1
  541. package/dist/interactions/actions/defaults/toolActivate.js.map +1 -1
  542. package/dist/interactions/actions/defaults/toolResetToDefault.js.map +1 -1
  543. package/dist/interactions/actions/defaults/viewportDragPan.js +1 -1
  544. package/dist/interactions/actions/defaults/viewportDragPan.js.map +1 -1
  545. package/dist/interactions/actions/defaults/viewportWheelPan.js.map +1 -1
  546. package/dist/interactions/actions/defaults/viewportZoom.js.map +1 -1
  547. package/dist/interactions/actions/{defaults/distribute.js → distribute/action.js} +18 -19
  548. package/dist/interactions/actions/distribute/action.js.map +1 -0
  549. package/dist/interactions/actions/distribute/distribute.js +11 -11
  550. package/dist/interactions/actions/distribute/distribute.js.map +1 -1
  551. package/dist/interactions/actions/{defaults/editAnchors.js → edit-anchors/action.js} +19 -21
  552. package/dist/interactions/actions/edit-anchors/action.js.map +1 -0
  553. package/dist/interactions/actions/edit-anchors/geometry.js +2 -4
  554. package/dist/interactions/actions/edit-anchors/geometry.js.map +1 -1
  555. package/dist/interactions/actions/flip/action.js +124 -0
  556. package/dist/interactions/actions/flip/action.js.map +1 -0
  557. package/dist/interactions/actions/flip/helpers.js +1 -1
  558. package/dist/interactions/actions/flip/helpers.js.map +1 -1
  559. package/dist/interactions/actions/gestureFrames.js +18 -0
  560. package/dist/interactions/actions/gestureFrames.js.map +1 -0
  561. package/dist/interactions/actions/gestureLifecycle.js +47 -20
  562. package/dist/interactions/actions/gestureLifecycle.js.map +1 -1
  563. package/dist/interactions/actions/insert/action.js +72 -0
  564. package/dist/interactions/actions/insert/action.js.map +1 -0
  565. package/dist/interactions/actions/insert/commit.js +28 -0
  566. package/dist/interactions/actions/insert/commit.js.map +1 -0
  567. package/dist/interactions/actions/insert/extras.js +65 -0
  568. package/dist/interactions/actions/insert/extras.js.map +1 -0
  569. package/dist/interactions/actions/insert/frame.js +48 -0
  570. package/dist/interactions/actions/insert/frame.js.map +1 -0
  571. package/dist/interactions/actions/insert/geometry.js +35 -0
  572. package/dist/interactions/actions/insert/geometry.js.map +1 -0
  573. package/dist/interactions/actions/insert/rotateAction.js +21 -0
  574. package/dist/interactions/actions/insert/rotateAction.js.map +1 -0
  575. package/dist/interactions/actions/insert/session.js +59 -0
  576. package/dist/interactions/actions/insert/session.js.map +1 -0
  577. package/dist/interactions/actions/insert/shape.js +34 -0
  578. package/dist/interactions/actions/insert/shape.js.map +1 -0
  579. package/dist/interactions/actions/lasso-select/action.js +143 -0
  580. package/dist/interactions/actions/lasso-select/action.js.map +1 -0
  581. package/dist/interactions/actions/move/action.js +87 -0
  582. package/dist/interactions/actions/move/action.js.map +1 -0
  583. package/dist/interactions/actions/move/behaviors/layoutDrop.js +51 -0
  584. package/dist/interactions/actions/move/behaviors/layoutDrop.js.map +1 -0
  585. package/dist/interactions/actions/move/behaviors/reparentOnDrop.js +15 -0
  586. package/dist/interactions/actions/move/behaviors/reparentOnDrop.js.map +1 -0
  587. package/dist/interactions/actions/move/behaviors/snapToContainer.js +24 -23
  588. package/dist/interactions/actions/move/behaviors/snapToContainer.js.map +1 -1
  589. package/dist/interactions/actions/move/capture.js +99 -0
  590. package/dist/interactions/actions/move/capture.js.map +1 -0
  591. package/dist/interactions/actions/move/commit/index.js +41 -0
  592. package/dist/interactions/actions/move/commit/index.js.map +1 -0
  593. package/dist/interactions/actions/move/commit/layoutDrop.js +44 -0
  594. package/dist/interactions/actions/move/commit/layoutDrop.js.map +1 -0
  595. package/dist/interactions/actions/move/commit/layoutRelease.js +100 -0
  596. package/dist/interactions/actions/move/commit/layoutRelease.js.map +1 -0
  597. package/dist/interactions/actions/move/commit/rebase.js +18 -0
  598. package/dist/interactions/actions/move/commit/rebase.js.map +1 -0
  599. package/dist/interactions/actions/move/commit/reparent.js +65 -0
  600. package/dist/interactions/actions/move/commit/reparent.js.map +1 -0
  601. package/dist/interactions/actions/move/delta.js +51 -0
  602. package/dist/interactions/actions/move/delta.js.map +1 -0
  603. package/dist/interactions/actions/move/frame.js +59 -0
  604. package/dist/interactions/actions/move/frame.js.map +1 -0
  605. package/dist/interactions/actions/move/gestureAdapter.js +15 -40
  606. package/dist/interactions/actions/move/gestureAdapter.js.map +1 -1
  607. package/dist/interactions/actions/move/landedDescendants.js +8 -8
  608. package/dist/interactions/actions/move/layout/container.js +94 -0
  609. package/dist/interactions/actions/move/layout/container.js.map +1 -0
  610. package/dist/interactions/actions/move/layout/dragged.js +58 -0
  611. package/dist/interactions/actions/move/layout/dragged.js.map +1 -0
  612. package/dist/interactions/actions/move/layout/dropPass.js +122 -0
  613. package/dist/interactions/actions/move/layout/dropPass.js.map +1 -0
  614. package/dist/interactions/actions/move/layout/exits.js +38 -0
  615. package/dist/interactions/actions/move/layout/exits.js.map +1 -0
  616. package/dist/interactions/actions/move/layout/glide.js +48 -0
  617. package/dist/interactions/actions/move/layout/glide.js.map +1 -0
  618. package/dist/interactions/actions/move/session.js +63 -0
  619. package/dist/interactions/actions/move/session.js.map +1 -0
  620. package/dist/interactions/actions/move/translate.js +61 -0
  621. package/dist/interactions/actions/move/translate.js.map +1 -0
  622. package/dist/interactions/actions/outlines/createOutlines.js +17 -64
  623. package/dist/interactions/actions/outlines/createOutlines.js.map +1 -1
  624. package/dist/interactions/actions/outlines/createOutlinesAction.js +51 -0
  625. package/dist/interactions/actions/outlines/createOutlinesAction.js.map +1 -0
  626. package/dist/interactions/actions/outlines/outlineStroke.js +72 -0
  627. package/dist/interactions/actions/outlines/outlineStroke.js.map +1 -0
  628. package/dist/interactions/actions/outlines/outlineStrokeAction.js +37 -0
  629. package/dist/interactions/actions/outlines/outlineStrokeAction.js.map +1 -0
  630. package/dist/interactions/actions/outlines/replaceWithPaths.js +54 -0
  631. package/dist/interactions/actions/outlines/replaceWithPaths.js.map +1 -0
  632. package/dist/interactions/actions/outlines/strokeRegion.js +27 -0
  633. package/dist/interactions/actions/outlines/strokeRegion.js.map +1 -0
  634. package/dist/interactions/actions/planeInput.js.map +1 -1
  635. package/dist/interactions/actions/pointerState.js +12 -0
  636. package/dist/interactions/actions/pointerState.js.map +1 -0
  637. package/dist/interactions/actions/poseDescriptorDep.js +1 -1
  638. package/dist/interactions/actions/poseDescriptorDep.js.map +1 -1
  639. package/dist/interactions/actions/poseFrame.js +26 -26
  640. package/dist/interactions/actions/poseFrame.js.map +1 -1
  641. package/dist/interactions/actions/resize/action.js +55 -0
  642. package/dist/interactions/actions/resize/action.js.map +1 -0
  643. package/dist/interactions/actions/resize/behaviors/lockAspect.js.map +1 -1
  644. package/dist/interactions/actions/resize/boxFrame.js +16 -0
  645. package/dist/interactions/actions/resize/boxFrame.js.map +1 -0
  646. package/dist/interactions/actions/resize/capture.js +85 -0
  647. package/dist/interactions/actions/resize/capture.js.map +1 -0
  648. package/dist/interactions/actions/resize/commit.js +69 -0
  649. package/dist/interactions/actions/resize/commit.js.map +1 -0
  650. package/dist/interactions/actions/resize/frame.js +74 -0
  651. package/dist/interactions/actions/resize/frame.js.map +1 -0
  652. package/dist/interactions/actions/resize/pointSnap.js +111 -0
  653. package/dist/interactions/actions/resize/pointSnap.js.map +1 -0
  654. package/dist/interactions/actions/resize/ruleBounds.js +9 -0
  655. package/dist/interactions/actions/resize/ruleBounds.js.map +1 -0
  656. package/dist/interactions/actions/resize/session.js +49 -0
  657. package/dist/interactions/actions/resize/session.js.map +1 -0
  658. package/dist/interactions/actions/resolveOverlays.js.map +1 -1
  659. package/dist/interactions/actions/resolvePreviews.js.map +1 -1
  660. package/dist/interactions/actions/rotate/action.js +56 -0
  661. package/dist/interactions/actions/rotate/action.js.map +1 -0
  662. package/dist/interactions/actions/rotate/behaviors/index.js +7 -0
  663. package/dist/interactions/actions/rotate/behaviors/index.js.map +1 -0
  664. package/dist/interactions/actions/rotate/behaviors/snapRotation.js +12 -0
  665. package/dist/interactions/actions/rotate/behaviors/snapRotation.js.map +1 -0
  666. package/dist/interactions/actions/rotate/commit.js +40 -0
  667. package/dist/interactions/actions/rotate/commit.js.map +1 -0
  668. package/dist/interactions/actions/rotate/frame.js +65 -0
  669. package/dist/interactions/actions/rotate/frame.js.map +1 -0
  670. package/dist/interactions/actions/rotate/handle.js +12 -12
  671. package/dist/interactions/actions/rotate/handle.js.map +1 -1
  672. package/dist/interactions/actions/rotate/session.js +92 -0
  673. package/dist/interactions/actions/rotate/session.js.map +1 -0
  674. package/dist/interactions/actions/spatialReference.js.map +1 -1
  675. package/dist/interactions/actions/useStandardActions.js +77 -72
  676. package/dist/interactions/actions/useStandardActions.js.map +1 -1
  677. package/dist/interactions/gestures/pointerDrag/pointerDrag.js +61 -42
  678. package/dist/interactions/gestures/pointerDrag/pointerDrag.js.map +1 -1
  679. package/dist/interactions/gestures/shared/originProjection.js +1 -1
  680. package/dist/interactions/gestures/shared/originProjection.js.map +1 -1
  681. package/dist/interactions/gestures/shared/screenTolerance.js +8 -2
  682. package/dist/interactions/gestures/shared/screenTolerance.js.map +1 -1
  683. package/dist/interactions/gestures/shared/snap.js.map +1 -1
  684. package/dist/layout/arrivals.js +20 -23
  685. package/dist/layout/arrivals.js.map +1 -1
  686. package/dist/math-CYUjoyyU.d.ts +33 -0
  687. package/dist/math.d.ts +5 -2
  688. package/dist/math.js +6 -6
  689. package/dist/mesh.d.ts +4 -268
  690. package/dist/mesh.js +3 -7
  691. package/dist/move.d.ts +6 -4
  692. package/dist/{originProjection-gHnOup4e.d.ts → originProjection-PPT88jZv.d.ts} +1 -1
  693. package/dist/patterns-builtin.d.ts +1 -118
  694. package/dist/patterns-builtin.js +2 -3
  695. package/dist/poseDescriptor-Bqk-11Rl.d.ts +73 -0
  696. package/dist/renderer.d.ts +1 -92
  697. package/dist/renderer.js +2 -19
  698. package/dist/resize.d.ts +11 -22
  699. package/dist/resize.js +1 -1
  700. package/dist/style.css +1 -1
  701. package/dist/test-hook/install.js.map +1 -1
  702. package/dist/test-hook/useTestHook.js +22 -0
  703. package/dist/test-hook/useTestHook.js.map +1 -0
  704. package/dist/test-seams-D0pyV3pR.d.ts +149 -0
  705. package/dist/test-seams.d.ts +4 -4
  706. package/dist/test-seams.js +2 -2
  707. package/dist/tools/builtin/bone/boneActions.js +130 -0
  708. package/dist/tools/builtin/bone/boneActions.js.map +1 -0
  709. package/dist/tools/builtin/bone/boneOverlay.js +58 -0
  710. package/dist/tools/builtin/bone/boneOverlay.js.map +1 -0
  711. package/dist/tools/builtin/bone/placedRig.js +24 -0
  712. package/dist/tools/builtin/bone/placedRig.js.map +1 -0
  713. package/dist/tools/builtin/bone/rigEditState.js +21 -0
  714. package/dist/tools/builtin/bone/rigEditState.js.map +1 -0
  715. package/dist/tools/builtin/bone/useBoneTool.js +98 -0
  716. package/dist/tools/builtin/bone/useBoneTool.js.map +1 -0
  717. package/dist/tools/builtin/ellipse/useEllipseTool.js.map +1 -1
  718. package/dist/tools/builtin/eyedropper/useEyedropperTool.js.map +1 -1
  719. package/dist/tools/builtin/hand/useHandTool.js.map +1 -1
  720. package/dist/tools/builtin/image/useImageTool.js.map +1 -1
  721. package/dist/tools/builtin/lasso/useLassoTool.js.map +1 -1
  722. package/dist/tools/builtin/line/useLineTool.js.map +1 -1
  723. package/dist/tools/builtin/pen/usePenTool.js +161 -163
  724. package/dist/tools/builtin/pen/usePenTool.js.map +1 -1
  725. package/dist/tools/builtin/pencil/usePencilTool.js.map +1 -1
  726. package/dist/tools/builtin/pickTopMostHit.js.map +1 -1
  727. package/dist/tools/builtin/polygon/usePolygonTool.js.map +1 -1
  728. package/dist/tools/builtin/rect/useRectTool.js.map +1 -1
  729. package/dist/tools/builtin/select/adapterPointQuery.js +36 -0
  730. package/dist/tools/builtin/select/adapterPointQuery.js.map +1 -0
  731. package/dist/tools/builtin/select/selectionContributions.js +4 -4
  732. package/dist/tools/builtin/select/selectionContributions.js.map +1 -1
  733. package/dist/tools/builtin/select/useSelectTool.js +43 -71
  734. package/dist/tools/builtin/select/useSelectTool.js.map +1 -1
  735. package/dist/tools/builtin/shared/pointerFollower.js.map +1 -1
  736. package/dist/tools/builtin/slice/useSliceTool.js +67 -72
  737. package/dist/tools/builtin/slice/useSliceTool.js.map +1 -1
  738. package/dist/tools/builtin/star/useStarTool.js.map +1 -1
  739. package/dist/tools/builtin/text/useTextTool.js +8 -0
  740. package/dist/tools/builtin/text/useTextTool.js.map +1 -1
  741. package/dist/tools/builtin/weight/useWeightTool.js +77 -0
  742. package/dist/tools/builtin/weight/useWeightTool.js.map +1 -0
  743. package/dist/tools/builtin/weight/weightActions.js +112 -0
  744. package/dist/tools/builtin/weight/weightActions.js.map +1 -0
  745. package/dist/tools/builtin/weight/weightOverlay.js +61 -0
  746. package/dist/tools/builtin/weight/weightOverlay.js.map +1 -0
  747. package/dist/tools/overlayBinding.js.map +1 -1
  748. package/dist/tools/useKeybindings.js +20 -14
  749. package/dist/tools/useKeybindings.js.map +1 -1
  750. package/dist/{types-k-5Oqh-U.d.ts → types-CIKDwlsP.d.ts} +84 -164
  751. package/dist/util/paint.js +1 -1
  752. package/dist/util/paint.js.map +1 -1
  753. package/dist/version.js +1 -1
  754. package/package.json +26 -21
  755. package/dist/animation/colorHelpers.js +0 -135
  756. package/dist/animation/colorHelpers.js.map +0 -1
  757. package/dist/animation/colorRegistry.js +0 -37
  758. package/dist/animation/colorRegistry.js.map +0 -1
  759. package/dist/animation/engine/axes.js +0 -36
  760. package/dist/animation/engine/axes.js.map +0 -1
  761. package/dist/animation/engine/codec.js +0 -170
  762. package/dist/animation/engine/codec.js.map +0 -1
  763. package/dist/animation/engine/integrator.js +0 -12
  764. package/dist/animation/engine/integrator.js.map +0 -1
  765. package/dist/animation/loop.js +0 -60
  766. package/dist/animation/loop.js.map +0 -1
  767. package/dist/animation/observe.js +0 -23
  768. package/dist/animation/observe.js.map +0 -1
  769. package/dist/animation/rig/blendPoses.js +0 -43
  770. package/dist/animation/rig/blendPoses.js.map +0 -1
  771. package/dist/animation/rig/mirrorPose.js +0 -19
  772. package/dist/animation/rig/mirrorPose.js.map +0 -1
  773. package/dist/animation/rig/resolveSkeleton.js +0 -33
  774. package/dist/animation/rig/resolveSkeleton.js.map +0 -1
  775. package/dist/animation/rig/solveIk.js +0 -103
  776. package/dist/animation/rig/solveIk.js.map +0 -1
  777. package/dist/animation/rig/types.js +0 -12
  778. package/dist/animation/rig/types.js.map +0 -1
  779. package/dist/animation/slew.js +0 -27
  780. package/dist/animation/slew.js.map +0 -1
  781. package/dist/animation/stagger.js +0 -146
  782. package/dist/animation/stagger.js.map +0 -1
  783. package/dist/animation/timeline/booking.js +0 -114
  784. package/dist/animation/timeline/booking.js.map +0 -1
  785. package/dist/animation/timeline/createTimeline.js +0 -125
  786. package/dist/animation/timeline/createTimeline.js.map +0 -1
  787. package/dist/animation/timeline/sampleTrack.js +0 -79
  788. package/dist/animation/timeline/sampleTrack.js.map +0 -1
  789. package/dist/animation/useAnimator.js +0 -388
  790. package/dist/animation/useAnimator.js.map +0 -1
  791. package/dist/autoPoseDescriptor-Ct7yqivU.d.ts +0 -108
  792. package/dist/builtins-DPcdghtB.d.ts +0 -1223
  793. package/dist/canvas/MinimapCanvas.js +0 -140
  794. package/dist/canvas/MinimapCanvas.js.map +0 -1
  795. package/dist/canvas/deps/poseComposition.js +0 -11
  796. package/dist/canvas/deps/poseComposition.js.map +0 -1
  797. package/dist/canvas/minimapMath.js +0 -82
  798. package/dist/canvas/minimapMath.js.map +0 -1
  799. package/dist/canvas/toolPreview.js +0 -39
  800. package/dist/canvas/toolPreview.js.map +0 -1
  801. package/dist/core/adapters/arrayAdapter.js +0 -94
  802. package/dist/core/adapters/arrayAdapter.js.map +0 -1
  803. package/dist/core/adapters/useArrayAdapter.js +0 -13
  804. package/dist/core/adapters/useArrayAdapter.js.map +0 -1
  805. package/dist/core/fillInPoseFrame.js +0 -102
  806. package/dist/core/fillInPoseFrame.js.map +0 -1
  807. package/dist/core/geometry/poseFrame.js +0 -44
  808. package/dist/core/geometry/poseFrame.js.map +0 -1
  809. package/dist/core/geometry/poseRotation.js +0 -58
  810. package/dist/core/geometry/poseRotation.js.map +0 -1
  811. package/dist/core/gradient.js +0 -136
  812. package/dist/core/gradient.js.map +0 -1
  813. package/dist/core/markerInset.js +0 -24
  814. package/dist/core/markerInset.js.map +0 -1
  815. package/dist/core/mixed.js +0 -6
  816. package/dist/core/mixed.js.map +0 -1
  817. package/dist/core/paintKinds.js +0 -156
  818. package/dist/core/paintKinds.js.map +0 -1
  819. package/dist/core/scene/pickability.js +0 -6
  820. package/dist/core/scene/pickability.js.map +0 -1
  821. package/dist/core/strokeMarkerShapes.js +0 -139
  822. package/dist/core/strokeMarkerShapes.js.map +0 -1
  823. package/dist/core/strokeMarkers.js +0 -28
  824. package/dist/core/strokeMarkers.js.map +0 -1
  825. package/dist/core/viewport/meanScale.js +0 -8
  826. package/dist/core/viewport/meanScale.js.map +0 -1
  827. package/dist/core/viewport/pxExtent.js +0 -42
  828. package/dist/core/viewport/pxExtent.js.map +0 -1
  829. package/dist/features/cursor/paintedCursorLayer.js.map +0 -1
  830. package/dist/features/focus/gateLayer.js.map +0 -1
  831. package/dist/features/focus/useCanvasFocus.js +0 -29
  832. package/dist/features/focus/useCanvasFocus.js.map +0 -1
  833. package/dist/features/groups/children.js.map +0 -1
  834. package/dist/features/groups/composePose.js.map +0 -1
  835. package/dist/features/groups/nestedHit.js.map +0 -1
  836. package/dist/features/groups/unionOfChildren.js.map +0 -1
  837. package/dist/features/images/imageCache.js +0 -104
  838. package/dist/features/images/imageCache.js.map +0 -1
  839. package/dist/features/ingestion/index.js +0 -8
  840. package/dist/features/meshPaint/bake.js +0 -79
  841. package/dist/features/meshPaint/bake.js.map +0 -1
  842. package/dist/features/meshPaint/bakeCache.js +0 -59
  843. package/dist/features/meshPaint/bakeCache.js.map +0 -1
  844. package/dist/features/meshPaint/handles.js +0 -86
  845. package/dist/features/meshPaint/handles.js.map +0 -1
  846. package/dist/features/meshPaint/lazyKind.js.map +0 -1
  847. package/dist/features/meshPaint/meshPaint.js +0 -239
  848. package/dist/features/meshPaint/meshPaint.js.map +0 -1
  849. package/dist/features/meshPaint/meshShader.js +0 -6
  850. package/dist/features/meshPaint/meshShader.js.map +0 -1
  851. package/dist/features/meshPaint/register.js +0 -7
  852. package/dist/features/meshPaint/register.js.map +0 -1
  853. package/dist/features/meshPaint/surface.js +0 -110
  854. package/dist/features/meshPaint/surface.js.map +0 -1
  855. package/dist/features/minimap/actions.js +0 -53
  856. package/dist/features/minimap/actions.js.map +0 -1
  857. package/dist/features/minimap/createMinimapContribution.js +0 -96
  858. package/dist/features/minimap/createMinimapContribution.js.map +0 -1
  859. package/dist/features/minimap/layers.js +0 -85
  860. package/dist/features/minimap/layers.js.map +0 -1
  861. package/dist/features/overlays/useNodeOverlayFrame.js +0 -103
  862. package/dist/features/overlays/useNodeOverlayFrame.js.map +0 -1
  863. package/dist/features/parallax/createParallaxLayer.js +0 -26
  864. package/dist/features/parallax/createParallaxLayer.js.map +0 -1
  865. package/dist/features/parallax/createParallaxPlane.js +0 -22
  866. package/dist/features/parallax/createParallaxPlane.js.map +0 -1
  867. package/dist/features/paths/anchorEdits.js +0 -167
  868. package/dist/features/paths/anchorEdits.js.map +0 -1
  869. package/dist/features/paths/anchors.js +0 -159
  870. package/dist/features/paths/anchors.js.map +0 -1
  871. package/dist/features/paths/booleans.js +0 -2
  872. package/dist/features/paths/markerCommands.js +0 -149
  873. package/dist/features/paths/markerCommands.js.map +0 -1
  874. package/dist/features/paths/markerSites.js +0 -59
  875. package/dist/features/paths/markerSites.js.map +0 -1
  876. package/dist/features/paths/markers.js +0 -95
  877. package/dist/features/paths/markers.js.map +0 -1
  878. package/dist/features/paths/nearestAnchor.js +0 -36
  879. package/dist/features/paths/nearestAnchor.js.map +0 -1
  880. package/dist/features/paths/pathInWorld.js +0 -41
  881. package/dist/features/paths/pathInWorld.js.map +0 -1
  882. package/dist/features/paths/poseDescriptor.js +0 -39
  883. package/dist/features/paths/poseDescriptor.js.map +0 -1
  884. package/dist/features/paths/strokeToPath.js +0 -40
  885. package/dist/features/paths/strokeToPath.js.map +0 -1
  886. package/dist/features/paths/tessellate/dash.js +0 -52
  887. package/dist/features/paths/tessellate/dash.js.map +0 -1
  888. package/dist/features/paths/tessellate/insets.js +0 -32
  889. package/dist/features/paths/tessellate/insets.js.map +0 -1
  890. package/dist/features/paths/tessellate/metric.js +0 -72
  891. package/dist/features/paths/tessellate/metric.js.map +0 -1
  892. package/dist/features/paths/tessellate/stroke.js +0 -170
  893. package/dist/features/paths/tessellate/stroke.js.map +0 -1
  894. package/dist/features/paths/tessellate/vertexWidths.js +0 -32
  895. package/dist/features/paths/tessellate/vertexWidths.js.map +0 -1
  896. package/dist/features/patterns/commandPaint.js +0 -18
  897. package/dist/features/patterns/commandPaint.js.map +0 -1
  898. package/dist/features/patterns/index.js +0 -11
  899. package/dist/features/patterns/index.js.map +0 -1
  900. package/dist/features/patterns/patterns-builtin.js +0 -38
  901. package/dist/features/patterns/patterns-builtin.js.map +0 -1
  902. package/dist/features/patterns/rasterizeTile.js +0 -17
  903. package/dist/features/patterns/rasterizeTile.js.map +0 -1
  904. package/dist/features/patterns/resolveSpec.js +0 -65
  905. package/dist/features/patterns/resolveSpec.js.map +0 -1
  906. package/dist/features/patterns/tileGeometry.js +0 -158
  907. package/dist/features/patterns/tileGeometry.js.map +0 -1
  908. package/dist/features/pointer/PointerContext.js +0 -45
  909. package/dist/features/pointer/PointerContext.js.map +0 -1
  910. package/dist/features/selection/SelectionContext.js +0 -51
  911. package/dist/features/selection/SelectionContext.js.map +0 -1
  912. package/dist/features/simulation/createSimulation.js +0 -61
  913. package/dist/features/simulation/createSimulation.js.map +0 -1
  914. package/dist/features/simulation/types.js +0 -6
  915. package/dist/features/simulation/types.js.map +0 -1
  916. package/dist/features/simulation/useSimulation.js +0 -74
  917. package/dist/features/simulation/useSimulation.js.map +0 -1
  918. package/dist/features/text/domOffsets.js +0 -82
  919. package/dist/features/text/domOffsets.js.map +0 -1
  920. package/dist/features/text/domRuns.js +0 -230
  921. package/dist/features/text/domRuns.js.map +0 -1
  922. package/dist/features/text/fitTextPose.js +0 -38
  923. package/dist/features/text/fitTextPose.js.map +0 -1
  924. package/dist/features/text/hitTest.js +0 -48
  925. package/dist/features/text/hitTest.js.map +0 -1
  926. package/dist/features/text/isTextData.js +0 -8
  927. package/dist/features/text/isTextData.js.map +0 -1
  928. package/dist/features/text/overlayDirection.js +0 -15
  929. package/dist/features/text/overlayDirection.js.map +0 -1
  930. package/dist/features/text/renderLabel.js +0 -14
  931. package/dist/features/text/renderLabel.js.map +0 -1
  932. package/dist/features/text/runs/effectiveRangeStyle.js +0 -66
  933. package/dist/features/text/runs/effectiveRangeStyle.js.map +0 -1
  934. package/dist/features/text/runs/flagRange.js +0 -53
  935. package/dist/features/text/runs/flagRange.js.map +0 -1
  936. package/dist/features/text/runs/rangeStyle.js +0 -133
  937. package/dist/features/text/runs/rangeStyle.js.map +0 -1
  938. package/dist/features/text/textCommand.js +0 -60
  939. package/dist/features/text/textCommand.js.map +0 -1
  940. package/dist/features/text/textToPath.js +0 -181
  941. package/dist/features/text/textToPath.js.map +0 -1
  942. package/dist/features/text/useTextEdit.js +0 -491
  943. package/dist/features/text/useTextEdit.js.map +0 -1
  944. package/dist/features/tiling/createTiledLayer.js +0 -65
  945. package/dist/features/tiling/createTiledLayer.js.map +0 -1
  946. package/dist/features/tiling/tiledProject.js +0 -14
  947. package/dist/features/tiling/tiledProject.js.map +0 -1
  948. package/dist/interactions/actions/clone/behaviors/cloneByAltDrag.js +0 -26
  949. package/dist/interactions/actions/clone/behaviors/cloneByAltDrag.js.map +0 -1
  950. package/dist/interactions/actions/defaults/align.js.map +0 -1
  951. package/dist/interactions/actions/defaults/booleans.js +0 -52
  952. package/dist/interactions/actions/defaults/booleans.js.map +0 -1
  953. package/dist/interactions/actions/defaults/clipboard.js.map +0 -1
  954. package/dist/interactions/actions/defaults/clone.js +0 -91
  955. package/dist/interactions/actions/defaults/clone.js.map +0 -1
  956. package/dist/interactions/actions/defaults/createOutlines.js +0 -47
  957. package/dist/interactions/actions/defaults/createOutlines.js.map +0 -1
  958. package/dist/interactions/actions/defaults/distribute.js.map +0 -1
  959. package/dist/interactions/actions/defaults/editAnchors.js.map +0 -1
  960. package/dist/interactions/actions/defaults/flip.js +0 -125
  961. package/dist/interactions/actions/defaults/flip.js.map +0 -1
  962. package/dist/interactions/actions/defaults/insert.js +0 -287
  963. package/dist/interactions/actions/defaults/insert.js.map +0 -1
  964. package/dist/interactions/actions/defaults/lassoSelect.js +0 -153
  965. package/dist/interactions/actions/defaults/lassoSelect.js.map +0 -1
  966. package/dist/interactions/actions/defaults/move.js +0 -778
  967. package/dist/interactions/actions/defaults/move.js.map +0 -1
  968. package/dist/interactions/actions/defaults/resize.js +0 -341
  969. package/dist/interactions/actions/defaults/resize.js.map +0 -1
  970. package/dist/interactions/actions/defaults/rotate.js +0 -185
  971. package/dist/interactions/actions/defaults/rotate.js.map +0 -1
  972. package/dist/interactions/actions/previewOverrides.js +0 -25
  973. package/dist/interactions/actions/previewOverrides.js.map +0 -1
  974. package/dist/interactions/actions/resize/autoPoseDescriptor.js.map +0 -1
  975. package/dist/math-J-ACHyEg.d.ts +0 -159
  976. package/dist/registerProgram-T9S_PfAX.d.ts +0 -208
  977. package/dist/renderer/DrawCommand.js +0 -6
  978. package/dist/renderer/DrawCommand.js.map +0 -1
  979. package/dist/renderer/WeaselRenderer.js +0 -333
  980. package/dist/renderer/WeaselRenderer.js.map +0 -1
  981. package/dist/renderer/batchClip.js +0 -46
  982. package/dist/renderer/batchClip.js.map +0 -1
  983. package/dist/renderer/cache/GLImageCache.js +0 -74
  984. package/dist/renderer/cache/GLImageCache.js.map +0 -1
  985. package/dist/renderer/cache/GLMeshCache.js +0 -102
  986. package/dist/renderer/cache/GLMeshCache.js.map +0 -1
  987. package/dist/renderer/cache/GLTextureCache.js +0 -68
  988. package/dist/renderer/cache/GLTextureCache.js.map +0 -1
  989. package/dist/renderer/cache/GradientRampAtlas.js +0 -82
  990. package/dist/renderer/cache/GradientRampAtlas.js.map +0 -1
  991. package/dist/renderer/cache/cache.js +0 -13
  992. package/dist/renderer/cache/cache.js.map +0 -1
  993. package/dist/renderer/cache/markerCommandCache.js +0 -63
  994. package/dist/renderer/cache/markerCommandCache.js.map +0 -1
  995. package/dist/renderer/cache/outlineMeshCache.js +0 -15
  996. package/dist/renderer/cache/outlineMeshCache.js.map +0 -1
  997. package/dist/renderer/cache/outlineStrokeMeshCache.js +0 -36
  998. package/dist/renderer/cache/outlineStrokeMeshCache.js.map +0 -1
  999. package/dist/renderer/cache/strokeMeshCache.js +0 -55
  1000. package/dist/renderer/cache/strokeMeshCache.js.map +0 -1
  1001. package/dist/renderer/cullDrawCommands.js +0 -90
  1002. package/dist/renderer/cullDrawCommands.js.map +0 -1
  1003. package/dist/renderer/draw/batch.js +0 -133
  1004. package/dist/renderer/draw/batch.js.map +0 -1
  1005. package/dist/renderer/draw/clip.js +0 -89
  1006. package/dist/renderer/draw/clip.js.map +0 -1
  1007. package/dist/renderer/draw/customShader.js +0 -230
  1008. package/dist/renderer/draw/customShader.js.map +0 -1
  1009. package/dist/renderer/draw/drawTriangles.js +0 -8
  1010. package/dist/renderer/draw/drawTriangles.js.map +0 -1
  1011. package/dist/renderer/draw/effects.js +0 -28
  1012. package/dist/renderer/draw/effects.js.map +0 -1
  1013. package/dist/renderer/draw/flushBatch.js +0 -35
  1014. package/dist/renderer/draw/flushBatch.js.map +0 -1
  1015. package/dist/renderer/draw/gradient.js +0 -90
  1016. package/dist/renderer/draw/gradient.js.map +0 -1
  1017. package/dist/renderer/draw/image.js +0 -38
  1018. package/dist/renderer/draw/image.js.map +0 -1
  1019. package/dist/renderer/draw/mesh.js +0 -16
  1020. package/dist/renderer/draw/mesh.js.map +0 -1
  1021. package/dist/renderer/draw/paintBind.js +0 -70
  1022. package/dist/renderer/draw/paintBind.js.map +0 -1
  1023. package/dist/renderer/draw/pathPaint.js +0 -142
  1024. package/dist/renderer/draw/pathPaint.js.map +0 -1
  1025. package/dist/renderer/draw/scratchPass.js +0 -83
  1026. package/dist/renderer/draw/scratchPass.js.map +0 -1
  1027. package/dist/renderer/draw/stencil.js +0 -28
  1028. package/dist/renderer/draw/stencil.js.map +0 -1
  1029. package/dist/renderer/draw/text.js +0 -167
  1030. package/dist/renderer/draw/text.js.map +0 -1
  1031. package/dist/renderer/draw/uniforms.js +0 -77
  1032. package/dist/renderer/draw/uniforms.js.map +0 -1
  1033. package/dist/renderer/draw.js +0 -79
  1034. package/dist/renderer/draw.js.map +0 -1
  1035. package/dist/renderer/drawBatch.js +0 -198
  1036. package/dist/renderer/drawBatch.js.map +0 -1
  1037. package/dist/renderer/effects/EffectTargets.js +0 -48
  1038. package/dist/renderer/effects/EffectTargets.js.map +0 -1
  1039. package/dist/renderer/effects/builtins.js +0 -31
  1040. package/dist/renderer/effects/builtins.js.map +0 -1
  1041. package/dist/renderer/effects/composite.js +0 -11
  1042. package/dist/renderer/effects/composite.js.map +0 -1
  1043. package/dist/renderer/effects/effectPrelude.js +0 -10
  1044. package/dist/renderer/effects/effectPrelude.js.map +0 -1
  1045. package/dist/renderer/effects/types.js +0 -10
  1046. package/dist/renderer/effects/types.js.map +0 -1
  1047. package/dist/renderer/glyphOutlineMesh.js +0 -67
  1048. package/dist/renderer/glyphOutlineMesh.js.map +0 -1
  1049. package/dist/renderer/index.js +0 -20
  1050. package/dist/renderer/math/color.js +0 -321
  1051. package/dist/renderer/math/color.js.map +0 -1
  1052. package/dist/renderer/math/mat3.js +0 -80
  1053. package/dist/renderer/math/mat3.js.map +0 -1
  1054. package/dist/renderer/math/patternSpace.js +0 -22
  1055. package/dist/renderer/math/patternSpace.js.map +0 -1
  1056. package/dist/renderer/math/viewToMat3.js +0 -19
  1057. package/dist/renderer/math/viewToMat3.js.map +0 -1
  1058. package/dist/renderer/paintResources.js +0 -18
  1059. package/dist/renderer/paintResources.js.map +0 -1
  1060. package/dist/renderer/paintScratch.js +0 -37
  1061. package/dist/renderer/paintScratch.js.map +0 -1
  1062. package/dist/renderer/shaders/ShaderProgram.js +0 -74
  1063. package/dist/renderer/shaders/ShaderProgram.js.map +0 -1
  1064. package/dist/renderer/shaders/batchFill.js +0 -119
  1065. package/dist/renderer/shaders/batchFill.js.map +0 -1
  1066. package/dist/renderer/shaders/customPrelude.js +0 -34
  1067. package/dist/renderer/shaders/customPrelude.js.map +0 -1
  1068. package/dist/renderer/shaders/extractUniformNames.js +0 -184
  1069. package/dist/renderer/shaders/extractUniformNames.js.map +0 -1
  1070. package/dist/renderer/shaders/glyphPaint.js +0 -61
  1071. package/dist/renderer/shaders/glyphPaint.js.map +0 -1
  1072. package/dist/renderer/shaders/gradFill.js +0 -31
  1073. package/dist/renderer/shaders/gradFill.js.map +0 -1
  1074. package/dist/renderer/shaders/pathFill.js +0 -14
  1075. package/dist/renderer/shaders/pathFill.js.map +0 -1
  1076. package/dist/renderer/shaders/patternFill.js +0 -25
  1077. package/dist/renderer/shaders/patternFill.js.map +0 -1
  1078. package/dist/renderer/shaders/registerProgram.js +0 -18
  1079. package/dist/renderer/shaders/registerProgram.js.map +0 -1
  1080. package/dist/renderer/spriteSheet.js +0 -14
  1081. package/dist/renderer/spriteSheet.js.map +0 -1
  1082. package/dist/renderer/state/GroupState.js +0 -77
  1083. package/dist/renderer/state/GroupState.js.map +0 -1
  1084. package/dist/renderer/strokeLengths.js +0 -50
  1085. package/dist/renderer/strokeLengths.js.map +0 -1
  1086. package/dist/renderer/syntheticItalic.js +0 -6
  1087. package/dist/renderer/syntheticItalic.js.map +0 -1
  1088. package/dist/renderer/textures/registerTexture.js +0 -34
  1089. package/dist/renderer/textures/registerTexture.js.map +0 -1
  1090. package/dist/scheduling/useVisibleRaf.js +0 -69
  1091. package/dist/scheduling/useVisibleRaf.js.map +0 -1
  1092. package/dist/test-seams-DM2B87-g.d.ts +0 -356
@@ -1,44 +0,0 @@
1
- import { poseRotationOf as e, rotatePathAround as t } from "./poseRotation.js";
2
- import { invert as n, multiply as r, rotateAboutPoint as i, transformPath as a } from "@weasel-js/geom";
3
- //#region src/core/geometry/poseFrame.ts
4
- function o(e) {
5
- let t = e?.transform;
6
- return !Array.isArray(t) || t.length !== 4 || t[0] === 1 && t[1] === 0 && t[2] === 0 && t[3] === 1 ? null : t;
7
- }
8
- function s(e) {
9
- let t = e;
10
- if (!t || t.x == null || t.y == null || t.width == null || t.height == null) return null;
11
- let n = o(t);
12
- if (!t.rotation && !n) return null;
13
- let a = t.x + t.width / 2, s = t.y + t.height / 2;
14
- if (!n) return i(a, s, t.rotation);
15
- let [c, l, u, d] = n, f = [
16
- c,
17
- l,
18
- u,
19
- d,
20
- a - (c * a + u * s),
21
- s - (l * a + d * s)
22
- ];
23
- return t.rotation ? r(i(a, s, t.rotation), f) : f;
24
- }
25
- function c(t) {
26
- if (!o(t)) {
27
- let n = e(t);
28
- return n && i(n.cx, n.cy, -n.rotation);
29
- }
30
- let r = s(t);
31
- return r && n(r);
32
- }
33
- function l(n, r) {
34
- if (o(r)) {
35
- let e = s(r);
36
- return e ? a(n, e) : n;
37
- }
38
- let i = e(r);
39
- return i ? t(n, i.cx, i.cy, i.rotation) : n;
40
- }
41
- //#endregion
42
- export { l as pathThroughPoseFrame, c as poseFrameInverseOf, s as poseFrameOf, o as poseLinearOf };
43
-
44
- //# sourceMappingURL=poseFrame.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"poseFrame.js","names":["poseLinearOf","pose","poseFrameOf","p","linear","cx","cy","rotateAboutPoint","a","b","c","about","multiply","poseFrameInverseOf","r","poseRotationOf","frame","invert","pathThroughPoseFrame","transformPath","path","rotatePathAround"],"sources":["../../../src/core/geometry/poseFrame.ts"],"sourcesContent":["/**\n * The one composition of a box pose into the matrix that carries its own\n * frame to its parent's: the rotation convention of `poseRotationOf`, and the\n * pose's residual `transform` inside it. Painting, culling, silhouettes, and\n * picking all read a pose through `poseFrameOf` so they agree on where the\n * node is.\n */\nimport {\n invert, multiply, rotateAboutPoint, transformPath, type Mat3, type Path,\n} from '@weasel-js/geom';\nimport { poseRotationOf, rotatePathAround } from './poseRotation';\n\n/**\n * The linear part of a box pose that its box, rotation, and flips cannot\n * hold: a skew, or a scale that differs by axis. `[a, b, c, d]` in\n * `Mat3` order (`x' = a·x + c·y`, `y' = b·x + d·y`), applied about the\n * box center to what the node draws in its unrotated box, before the\n * rotation. Absent is the identity.\n *\n * The box, `rotation`, and flips keep their meaning beside it: a node at\n * `(x, y, width, height)` is laid out and painted in that box exactly as it\n * would be without a `transform`, and the result is then taken through\n * `rotate(rotation) · transform` about the box center.\n */\nexport type PoseLinear = readonly [a: number, b: number, c: number, d: number];\n\ninterface FramedBox {\n x: number;\n y: number;\n width: number;\n height: number;\n rotation?: number;\n transform?: PoseLinear;\n}\n\n/** `transform` when it changes anything, `null` for absent or the identity. */\nexport function poseLinearOf(pose: unknown): PoseLinear | null {\n const t = (pose as { transform?: unknown } | null | undefined)?.transform;\n if (!Array.isArray(t) || t.length !== 4) return null;\n if (t[0] === 1 && t[1] === 0 && t[2] === 0 && t[3] === 1) return null;\n return t as unknown as PoseLinear;\n}\n\n/**\n * The matrix taking a point in the pose's own unrotated box frame to where\n * the node draws it: `rotate(rotation) · transform`, about the box center.\n * `null` when the pose has neither, or is not a box, so a caller can skip\n * the step.\n */\nexport function poseFrameOf(pose: unknown): Mat3 | null {\n const p = pose as Partial<FramedBox> | null | undefined;\n if (!p || p.x == null || p.y == null || p.width == null || p.height == null) return null;\n const linear = poseLinearOf(p);\n if (!p.rotation && !linear) return null;\n const cx = p.x + p.width / 2;\n const cy = p.y + p.height / 2;\n if (!linear) return rotateAboutPoint(cx, cy, p.rotation as number);\n const [a, b, c, d] = linear;\n const about: Mat3 = [a, b, c, d, cx - (a * cx + c * cy), cy - (b * cx + d * cy)];\n return p.rotation ? multiply(rotateAboutPoint(cx, cy, p.rotation), about) : about;\n}\n\n/**\n * The inverse of {@link poseFrameOf}: where a parent-frame point falls in the\n * pose's unrotated box frame. `null` when there is no frame to undo, or when\n * the `transform` is singular and nothing maps back.\n */\nexport function poseFrameInverseOf(pose: unknown): Mat3 | null {\n if (!poseLinearOf(pose)) {\n // The same pivot turned back: exact, where inverting the matrix is not.\n const r = poseRotationOf(pose);\n return r && rotateAboutPoint(r.cx, r.cy, -r.rotation);\n }\n const frame = poseFrameOf(pose);\n return frame && invert(frame);\n}\n\n/** `path`, given in the pose's unrotated box frame, as the node draws it. */\nexport function pathThroughPoseFrame(path: Path, pose: unknown): Path {\n if (poseLinearOf(pose)) {\n const frame = poseFrameOf(pose);\n return frame ? transformPath(path, frame) : path;\n }\n const r = poseRotationOf(pose);\n return r ? rotatePathAround(path, r.cx, r.cy, r.rotation) : path;\n}\n"],"mappings":";;;AAoCA,SAAgBA,EAAa,GAAkC;CAC7D,IAAM,IAAKC,GAAqD;CAGhE,OAFI,CAAC,MAAM,QAAQ,CAAC,KAAK,EAAE,WAAW,KAClC,EAAE,OAAO,KAAK,EAAE,OAAO,KAAK,EAAE,OAAO,KAAK,EAAE,OAAO,IAAU,OAC1D;AACT;AAQA,SAAgBC,EAAY,GAA4B;CACtD,IAAMC,IAAIF;CACV,IAAI,CAACE,KAAKA,EAAE,KAAK,QAAQA,EAAE,KAAK,QAAQA,EAAE,SAAS,QAAQA,EAAE,UAAU,MAAM,OAAO;CACpF,IAAMC,IAASJ,EAAaG,CAAC;CAC7B,IAAI,CAACA,EAAE,YAAY,CAACC,GAAQ,OAAO;CACnC,IAAMC,IAAKF,EAAE,IAAIA,EAAE,QAAQ,GACrBG,IAAKH,EAAE,IAAIA,EAAE,SAAS;CAC5B,IAAI,CAACC,GAAQ,OAAOG,EAAiBF,GAAIC,GAAIH,EAAE,QAAkB;CACjE,IAAM,CAACK,GAAGC,GAAGC,GAAG,KAAKN,GACfO,IAAc;EAACH;EAAGC;EAAGC;EAAG;EAAGL,KAAMG,IAAIH,IAAKK,IAAIJ;EAAKA,KAAMG,IAAIJ,IAAK,IAAIC;CAAG;CAC/E,OAAOH,EAAE,WAAWS,EAASL,EAAiBF,GAAIC,GAAIH,EAAE,QAAQ,GAAGQ,CAAK,IAAIA;AAC9E;AAOA,SAAgBE,EAAmB,GAA4B;CAC7D,IAAI,CAACb,EAAaC,CAAI,GAAG;EAEvB,IAAMa,IAAIC,EAAed,CAAI;EAC7B,OAAOa,KAAKP,EAAiBO,EAAE,IAAIA,EAAE,IAAI,CAACA,EAAE,QAAQ;CACtD;CACA,IAAME,IAAQd,EAAYD,CAAI;CAC9B,OAAOe,KAASC,EAAOD,CAAK;AAC9B;AAGA,SAAgBE,EAAqB,GAAY,GAAqB;CACpE,IAAIlB,EAAaC,CAAI,GAAG;EACtB,IAAMe,IAAQd,EAAYD,CAAI;EAC9B,OAAOe,IAAQG,EAAcC,GAAMJ,CAAK,IAAII;CAC9C;CACA,IAAMN,IAAIC,EAAed,CAAI;CAC7B,OAAOa,IAAIO,EAAiBD,GAAMN,EAAE,IAAIA,EAAE,IAAIA,EAAE,QAAQ,IAAIM;AAC9D"}
@@ -1,58 +0,0 @@
1
- import { PATH_L as e, PATH_M as t, PATH_Z as n, forEachSegment as r, pathCommandCoordCount as i } from "@weasel-js/geom";
2
- //#region src/core/geometry/poseRotation.ts
3
- function a(e) {
4
- let t = e;
5
- return t.rotation && t.x != null && t.y != null && t.width != null && t.height != null ? {
6
- cx: t.x + t.width / 2,
7
- cy: t.y + t.height / 2,
8
- rotation: t.rotation
9
- } : null;
10
- }
11
- function o(e, t, n, r) {
12
- return e.kind === "rect" ? c(e.x, e.y, e.width, e.height, t, n, r) : s(e, t, n, r);
13
- }
14
- function s(e, t, n, a) {
15
- let o = Math.cos(a), s = Math.sin(a), { commands: c, coords: l } = e, u = new Float32Array(l.length);
16
- return r(c, l, (e, r) => {
17
- for (let a = 0, c = i(e); a < c; a += 2) {
18
- let e = l[r + a] - t, i = l[r + a + 1] - n;
19
- u[r + a] = t + e * o - i * s, u[r + a + 1] = n + e * s + i * o;
20
- }
21
- }), {
22
- kind: "polygon",
23
- commands: e.commands,
24
- coords: u,
25
- fillRule: e.fillRule
26
- };
27
- }
28
- function c(r, i, a, o, s, c, l) {
29
- let u = Math.cos(l), d = Math.sin(l), f = (e, t) => {
30
- let n = e - s, r = t - c;
31
- return [s + n * u - r * d, c + n * d + r * u];
32
- }, [p, m] = f(r, i), [h, g] = f(r + a, i), [_, v] = f(r + a, i + o), [y, b] = f(r, i + o);
33
- return {
34
- kind: "polygon",
35
- commands: new Uint8Array([
36
- t,
37
- e,
38
- e,
39
- e,
40
- n
41
- ]),
42
- coords: new Float32Array([
43
- p,
44
- m,
45
- h,
46
- g,
47
- _,
48
- v,
49
- y,
50
- b
51
- ]),
52
- fillRule: "nonzero"
53
- };
54
- }
55
- //#endregion
56
- export { a as poseRotationOf, o as rotatePathAround };
57
-
58
- //# sourceMappingURL=poseRotation.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"poseRotation.js","names":["poseRotationOf","p","pose","rotatePathAround","path","rotateRectCorners","cx","cy","rotation","rotatePolygon","cos","sin","next","coords","forEachSegment","commands","k","len","pathCommandCoordCount","cmd","dx","ci","dy","rotate","px","py","x0","y0","x","y","x1","y1","w","x2","y2","h","x3","y3","PATH_M","PATH_L","PATH_Z"],"sources":["../../../src/core/geometry/poseRotation.ts"],"sourcesContent":["/**\n * The kit's single encoding of the pose-rotation convention: \"rotate about the\n * pose's unrotated AABB center by `pose.rotation` (radians).\"\n *\n * Every consumer that needs to apply rotation — the render-tree wrap\n * (`canvas/poseRotation.ts`), the world coordinate bake (`pathInWorld`), the\n * silhouette/clip bake (`findShapeSilhouette`), the hit-test inverse\n * (`poseContainsRotated`), and selection chrome — derives its pivot + angle\n * from `poseRotationOf` rather than re-inlining the `if (rotation && x != null\n * …)` gate. If the convention ever changes (a different pivot, say), it\n * changes here.\n *\n * A pose may also carry a `transform` inside the rotation. `poseFrameOf`\n * (`./poseFrame`) composes the two, and is what a reader that draws, bounds,\n * or picks the node wants; this module is the angle and pivot alone.\n *\n * Lives in `core/geometry` so `core/`'s own adapters can bake rotation too.\n */\nimport {\n forEachSegment,\n pathCommandCoordCount,\n PATH_L,\n PATH_M,\n PATH_Z,\n type Path,\n type PolygonPath,\n} from '@weasel-js/geom';\n\n/** Pivot (`cx`, `cy`) and angle resolved from a pose's rotation convention. */\nexport interface PoseRotation {\n cx: number;\n cy: number;\n rotation: number;\n}\n\n/**\n * Resolve a pose's rotation transform, or `null` when the pose carries no\n * effective rotation. Non-null requires a nonzero `rotation` **and** all four\n * AABB fields (`x`, `y`, `width`, `height`) — the pivot is the unrotated AABB\n * center. Poses missing any AABB field (e.g. a bare polygon pose) or with\n * zero/absent rotation return `null`, so callers can treat `null` as \"draw /\n * hit / clip in the local frame, no rotation step.\"\n */\nexport function poseRotationOf(pose: unknown): PoseRotation | null {\n const p = pose as Partial<{ x: number; y: number; width: number; height: number; rotation: number }>;\n if (p.rotation && p.x != null && p.y != null && p.width != null && p.height != null) {\n return { cx: p.x + p.width / 2, cy: p.y + p.height / 2, rotation: p.rotation };\n }\n return null;\n}\n\n/**\n * Rotate every coordinate of `path` about `(cx, cy)` by `rotation` radians.\n * A `rect` promotes to a four-corner polygon (axis-aligned rects can't encode\n * rotation); a polygon keeps its command list and rotates each coord. Returns\n * a fresh `PolygonPath`; never mutates the input. This is the coordinate-baking\n * companion to `poseRotationOf` — `pathInWorld` and `findShapeSilhouette` both\n * apply it so they share one rotation implementation.\n */\nexport function rotatePathAround(path: Path, cx: number, cy: number, rotation: number): PolygonPath {\n if (path.kind === 'rect') {\n return rotateRectCorners(path.x, path.y, path.width, path.height, cx, cy, rotation);\n }\n return rotatePolygon(path, cx, cy, rotation);\n}\n\nfunction rotatePolygon(path: PolygonPath, cx: number, cy: number, rotation: number): PolygonPath {\n const cos = Math.cos(rotation);\n const sin = Math.sin(rotation);\n const { commands, coords } = path;\n const next = new Float32Array(coords.length);\n forEachSegment(commands, coords, (cmd, ci) => {\n for (let k = 0, len = pathCommandCoordCount(cmd); k < len; k += 2) {\n const dx = coords[ci + k] - cx;\n const dy = coords[ci + k + 1] - cy;\n next[ci + k] = cx + dx * cos - dy * sin;\n next[ci + k + 1] = cy + dx * sin + dy * cos;\n }\n });\n return { kind: 'polygon', commands: path.commands, coords: next, fillRule: path.fillRule };\n}\n\nfunction rotateRectCorners(\n x: number, y: number, w: number, h: number,\n cx: number, cy: number, rotation: number,\n): PolygonPath {\n const cos = Math.cos(rotation);\n const sin = Math.sin(rotation);\n const rotate = (px: number, py: number): [number, number] => {\n const dx = px - cx;\n const dy = py - cy;\n return [cx + dx * cos - dy * sin, cy + dx * sin + dy * cos];\n };\n const [x0, y0] = rotate(x, y);\n const [x1, y1] = rotate(x + w, y);\n const [x2, y2] = rotate(x + w, y + h);\n const [x3, y3] = rotate(x, y + h);\n // M, L, L, L, Z\n const commands = new Uint8Array([PATH_M, PATH_L, PATH_L, PATH_L, PATH_Z]);\n const coords = new Float32Array([x0, y0, x1, y1, x2, y2, x3, y3]);\n return { kind: 'polygon', commands, coords, fillRule: 'nonzero' };\n}\n"],"mappings":";;AA2CA,SAAgBA,EAAe,GAAoC;CACjE,IAAMC,IAAIC;CAIV,OAHID,EAAE,YAAYA,EAAE,KAAK,QAAQA,EAAE,KAAK,QAAQA,EAAE,SAAS,QAAQA,EAAE,UAAU,OACtE;EAAE,IAAIA,EAAE,IAAIA,EAAE,QAAQ;EAAG,IAAIA,EAAE,IAAIA,EAAE,SAAS;EAAG,UAAUA,EAAE;CAAS,IAExE;AACT;AAUA,SAAgBE,EAAiB,GAAY,GAAY,GAAY,GAA+B;CAIlG,OAHIC,EAAK,SAAS,SACTC,EAAkBD,EAAK,GAAGA,EAAK,GAAGA,EAAK,OAAOA,EAAK,QAAQE,GAAIC,GAAIC,CAAQ,IAE7EC,EAAcL,GAAME,GAAIC,GAAIC,CAAQ;AAC7C;AAEA,SAASC,EAAc,GAAmB,GAAY,GAAY,GAA+B;CAC/F,IAAMC,IAAM,KAAK,IAAIF,CAAQ,GACvBG,IAAM,KAAK,IAAIH,CAAQ,GACvB,EAAE,aAAU,cAAWJ,GACvBQ,IAAO,IAAI,aAAaC,EAAO,MAAM;CAS3C,OARAC,EAAeC,GAAUF,IAAS,GAAK,MAAO;EAC5C,KAAK,IAAIG,IAAI,GAAGC,IAAMC,EAAsBC,CAAG,GAAGH,IAAIC,GAAK,KAAK,GAAG;GACjE,IAAMG,IAAKP,EAAOQ,IAAKL,KAAKV,GACtBgB,IAAKT,EAAOQ,IAAKL,IAAI,KAAKT;GAEhC,AADA,EAAKc,IAAKL,KAAKV,IAAKc,IAAKV,IAAMY,IAAKX,GACpC,EAAKU,IAAKL,IAAI,KAAKT,IAAKa,IAAKT,IAAMW,IAAKZ;EAC1C;CACF,CAAC,GACM;EAAE,MAAM;EAAW,UAAUN,EAAK;EAAU,QAAQQ;EAAM,UAAUR,EAAK;CAAS;AAC3F;AAEA,SAASC,EACP,GAAW,GAAW,GAAW,GACjC,GAAY,GAAY,GACX;CACb,IAAMK,IAAM,KAAK,IAAIF,CAAQ,GACvBG,IAAM,KAAK,IAAIH,CAAQ,GACvBe,KAAU,GAAY,MAAiC;EAC3D,IAAMH,IAAKI,IAAKlB,GACVgB,IAAKG,IAAKlB;EAChB,OAAO,CAACD,IAAKc,IAAKV,IAAMY,IAAKX,GAAKJ,IAAKa,IAAKT,IAAMW,IAAKZ,CAAG;CAC5D,GACM,CAACgB,GAAIC,KAAMJ,EAAOK,GAAGC,CAAC,GACtB,CAACC,GAAIC,KAAMR,EAAOK,IAAII,GAAGH,CAAC,GAC1B,CAACI,GAAIC,KAAMX,EAAOK,IAAII,GAAGH,IAAIM,CAAC,GAC9B,CAACC,GAAIC,KAAMd,EAAOK,GAAGC,IAAIM,CAAC;CAIhC,OAAO;EAAE,MAAM;EAAW,UAAA,IAFL,WAAW;GAACG;GAAQC;GAAQA;GAAQA;GAAQC;EAAM,CAE7C;EAAU,QAAA,IADjB,aAAa;GAACd;GAAIC;GAAIG;GAAIC;GAAIE;GAAIC;GAAIE;GAAIC;EAAE,CAC3B;EAAQ,UAAU;CAAU;AAClE"}
@@ -1,136 +0,0 @@
1
- import { resolveColor as e, rgbaToHex as t } from "../renderer/math/color.js";
2
- import { lerpColorArray as n } from "@weasel-js/paint";
3
- //#region src/core/gradient.ts
4
- function r(e) {
5
- return e == null ? !1 : e.fill === "linear-gradient" || e.fill === "radial-gradient" || e.fill === "conic-gradient";
6
- }
7
- function i(t) {
8
- return [...t].sort((e, t) => e.offset - t.offset).map((t) => ({
9
- offset: t.offset,
10
- rgba: e(t.color)
11
- }));
12
- }
13
- function a(e, t, r = "rgb") {
14
- if (e.length === 0) return o;
15
- let i = e[0], a = e[e.length - 1];
16
- if (t <= i.offset) return i.rgba;
17
- if (t >= a.offset) return a.rgba;
18
- for (let i = 0; i < e.length - 1; i++) {
19
- let a = e[i], o = e[i + 1];
20
- if (t < a.offset || t > o.offset) continue;
21
- let s = o.offset - a.offset;
22
- if (s <= 0) return o.rgba;
23
- let c = (t - a.offset) / s, [l, u, d, f] = n(a.rgba, o.rgba, c, r);
24
- return [
25
- l,
26
- u,
27
- d,
28
- f
29
- ];
30
- }
31
- return a.rgba;
32
- }
33
- var o = [
34
- 0,
35
- 0,
36
- 0,
37
- 0
38
- ];
39
- function s(e, n, r = "rgb") {
40
- return e.length === 0 ? "rgba(0,0,0,0)" : t(a(i(e), n, r));
41
- }
42
- function c(e, t) {
43
- if (e.fill === t) return e;
44
- let n = {
45
- stops: e.stops,
46
- units: e.units,
47
- interpolate: e.interpolate,
48
- opacity: e.opacity
49
- }, { center: r, radius: i, angle: a } = l(e);
50
- if (t === "linear-gradient") {
51
- let e = Math.cos(a) * i, t = Math.sin(a) * i;
52
- return {
53
- fill: "linear-gradient",
54
- from: {
55
- x: r.x - e,
56
- y: r.y - t
57
- },
58
- to: {
59
- x: r.x + e,
60
- y: r.y + t
61
- },
62
- ...n
63
- };
64
- }
65
- return t === "radial-gradient" ? {
66
- fill: "radial-gradient",
67
- center: r,
68
- radius: i,
69
- ...n
70
- } : {
71
- fill: "conic-gradient",
72
- center: r,
73
- angle: a,
74
- ...n
75
- };
76
- }
77
- function l(e) {
78
- if (e.fill === "linear-gradient") {
79
- let t = e.to.x - e.from.x, n = e.to.y - e.from.y;
80
- return {
81
- center: {
82
- x: (e.from.x + e.to.x) / 2,
83
- y: (e.from.y + e.to.y) / 2
84
- },
85
- radius: Math.hypot(t, n) / 2,
86
- angle: Math.atan2(n, t)
87
- };
88
- }
89
- return e.fill === "radial-gradient" ? {
90
- center: e.center,
91
- radius: e.radius,
92
- angle: 0
93
- } : {
94
- center: e.center,
95
- radius: u(e.units),
96
- angle: e.angle
97
- };
98
- }
99
- function u(e) {
100
- return e === "bounds" ? .5 : 50;
101
- }
102
- function d(e, t, n, r) {
103
- let i = {
104
- x: t.x + t.width / 2,
105
- y: t.y + t.height / 2
106
- };
107
- return e === "linear-gradient" ? {
108
- fill: "linear-gradient",
109
- from: {
110
- x: t.x,
111
- y: i.y
112
- },
113
- to: {
114
- x: t.x + t.width,
115
- y: i.y
116
- },
117
- stops: n,
118
- units: r
119
- } : e === "radial-gradient" ? {
120
- fill: "radial-gradient",
121
- center: i,
122
- radius: Math.max(t.width, t.height) / 2,
123
- stops: n,
124
- units: r
125
- } : {
126
- fill: "conic-gradient",
127
- center: i,
128
- angle: 0,
129
- stops: n,
130
- units: r
131
- };
132
- }
133
- //#endregion
134
- export { d as gradientForBounds, l as gradientGeometry, r as isGradientFill, i as resolveGradientStops, s as sampleGradientStops, a as sampleResolvedStops, c as withGradientKind };
135
-
136
- //# sourceMappingURL=gradient.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"gradient.js","names":["isGradientFill","fill","resolveGradientStops","stops","a","b","s","resolveColor","sampleResolvedStops","TRANSPARENT","first","last","lo","hi","span","f","r","g","lerpColorArray","space","sampleGradientStops","rgbaToHex","t","withGradientKind","kind","common","gradientGeometry","dx","angle","radius","dy","center","conicArmRadius","units","gradientForBounds","bounds"],"sources":["../../src/core/gradient.ts"],"sourcesContent":["/**\n * Gradient helpers shared by renderers, editors and exporters: reading a\n * color out of a stop list, and moving a gradient between its three kinds.\n *\n * The stop list is the part every consumer agrees on; the geometry\n * (`from`/`to`, `center`, `radius`, `angle`) differs per kind, which is what\n * `withGradientKind` exists to translate.\n */\n\nimport { resolveColor, rgbaToHex } from '../renderer/math/color';\nimport { lerpColorArray } from '@weasel-js/paint';\nimport type { ColorSpace, FillStyle, GradStop, GradientFill, GradientKind } from '@weasel-js/paint';\n\n/** A stop with its color already parsed to 0..1 RGBA. */\nexport interface ResolvedGradientStop {\n offset: number;\n rgba: readonly [number, number, number, number];\n}\n\n/** Narrow a paint to the gradient members of `FillStyle`. The three\n * discriminants are the union's own definition of `GradientFill`, so every\n * consumer that reaches for gradient geometry starts here. */\nexport function isGradientFill(fill: FillStyle | null | undefined): fill is GradientFill {\n if (fill == null) return false;\n return fill.fill === 'linear-gradient'\n || fill.fill === 'radial-gradient'\n || fill.fill === 'conic-gradient';\n}\n\n/**\n * Sort a stop list by offset and parse each color to 0..1 RGBA — the reading\n * of a stop list that `sampleResolvedStops` works from, hoisted out so a\n * caller sampling many positions (the GL ramp) parses each color once.\n *\n * Colors go through `resolveColor`, so any CSS color the kit understands is a\n * legal stop, not just hex.\n */\nexport function resolveGradientStops(stops: readonly GradStop[]): ResolvedGradientStop[] {\n return [...stops]\n .sort((a, b) => a.offset - b.offset)\n .map((s) => ({ offset: s.offset, rgba: resolveColor(s.color) }));\n}\n\n/**\n * RGBA (0..1) at position `t` along resolved stops: flat extension past\n * either end, interpolation between neighbors in `space`, alpha included.\n *\n * The single definition of what a stop list means. The GL ramp texture bakes\n * this at 256 positions and an editor calls it per pixel of a track; a second\n * implementation is a gradient that paints differently from its own swatch.\n *\n * `space` is a gradient's `interpolate`. Alpha is linear in every space —\n * only the color channels travel through OKLab or OKLCh.\n *\n * Returns transparent black for an empty list.\n */\nexport function sampleResolvedStops(\n stops: readonly ResolvedGradientStop[], t: number, space: ColorSpace = 'rgb',\n): readonly [number, number, number, number] {\n if (stops.length === 0) return TRANSPARENT;\n const first = stops[0];\n const last = stops[stops.length - 1];\n if (t <= first.offset) return first.rgba;\n if (t >= last.offset) return last.rgba;\n\n for (let i = 0; i < stops.length - 1; i++) {\n const lo = stops[i];\n const hi = stops[i + 1];\n if (t < lo.offset || t > hi.offset) continue;\n const span = hi.offset - lo.offset;\n // Coincident stops are a hard color break: take the later one.\n if (span <= 0) return hi.rgba;\n const f = (t - lo.offset) / span;\n const [r, g, b, a] = lerpColorArray(lo.rgba, hi.rgba, f, space);\n return [r, g, b, a];\n }\n return last.rgba;\n}\n\nconst TRANSPARENT: readonly [number, number, number, number] = [0, 0, 0, 0];\n\n/**\n * Color at position `t` (0..1) along a stop list, as a hex string — the same\n * sampling the GL ramp texture bakes, so an editor track and the painted\n * gradient cannot disagree.\n *\n * Returns transparent black for an empty list.\n */\nexport function sampleGradientStops(\n stops: readonly GradStop[], t: number, space: ColorSpace = 'rgb',\n): string {\n if (stops.length === 0) return 'rgba(0,0,0,0)';\n return rgbaToHex(sampleResolvedStops(resolveGradientStops(stops), t, space));\n}\n\n/**\n * Retarget a gradient to a different kind, preserving stops, `units` and\n * `opacity`, and carrying the geometry across as faithfully as the kinds\n * allow.\n *\n * Linear carries a segment; radial and conic carry a center. Converting\n * between them keeps the center fixed and reads the radius / angle off the\n * segment, so switching kind in an editor moves the paint as little as\n * possible instead of snapping to an arbitrary default.\n *\n * Lossy in both directions, because the kinds hold different information: a\n * radial gradient stores no angle, so a round trip through one leaves the\n * segment horizontal; a conic stores no radius, so a round trip through one\n * resets the segment's length. An editor that wants a kind switch to be\n * undoable should keep the original paint rather than converting back.\n */\nexport function withGradientKind(fill: GradientFill, kind: GradientKind): GradientFill {\n if (fill.fill === kind) return fill;\n const common = {\n stops: fill.stops, units: fill.units,\n interpolate: fill.interpolate, opacity: fill.opacity,\n };\n const { center, radius, angle } = gradientGeometry(fill);\n\n if (kind === 'linear-gradient') {\n const dx = Math.cos(angle) * radius;\n const dy = Math.sin(angle) * radius;\n return {\n fill: 'linear-gradient',\n from: { x: center.x - dx, y: center.y - dy },\n to: { x: center.x + dx, y: center.y + dy },\n ...common,\n };\n }\n if (kind === 'radial-gradient') {\n return { fill: 'radial-gradient', center, radius, ...common };\n }\n return { fill: 'conic-gradient', center, angle, ...common };\n}\n\n/**\n * Center / radius / angle for any gradient kind — the shared polar reading\n * `withGradientKind` converts through, and what on-canvas handles position\n * themselves from.\n *\n * For a linear gradient the center is the segment midpoint, the radius is\n * half its length, and the angle is its direction.\n */\nexport function gradientGeometry(fill: GradientFill): {\n center: { x: number; y: number };\n radius: number;\n angle: number;\n} {\n if (fill.fill === 'linear-gradient') {\n const dx = fill.to.x - fill.from.x;\n const dy = fill.to.y - fill.from.y;\n return {\n center: { x: (fill.from.x + fill.to.x) / 2, y: (fill.from.y + fill.to.y) / 2 },\n radius: Math.hypot(dx, dy) / 2,\n angle: Math.atan2(dy, dx),\n };\n }\n if (fill.fill === 'radial-gradient') {\n return { center: fill.center, radius: fill.radius, angle: 0 };\n }\n return { center: fill.center, radius: conicArmRadius(fill.units), angle: fill.angle };\n}\n\n/**\n * Conic gradients carry no radius, but converting one to a linear or radial\n * gradient needs a non-zero length to build from.\n *\n * Unit-dependent, and that is the whole point: `'bounds'` geometry runs `0..1`\n * across the box, so a pixel-flavored default there does not mean \"a bit under\n * half the box\", it means fifty times it.\n */\nfunction conicArmRadius(units: GradientFill['units']): number {\n return units === 'bounds' ? 0.5 : 50;\n}\n\n/**\n * A gradient spanning a box left edge to right edge through its vertical\n * center (linear) or filling it (radial / conic) — the sensible starting\n * geometry when a consumer turns a solid fill into a gradient and has only\n * the shape's bounds to go on.\n */\nexport function gradientForBounds(\n kind: GradientKind,\n bounds: { x: number; y: number; width: number; height: number },\n stops: GradStop[],\n units?: GradientFill['units'],\n): GradientFill {\n const center = { x: bounds.x + bounds.width / 2, y: bounds.y + bounds.height / 2 };\n if (kind === 'linear-gradient') {\n return {\n fill: 'linear-gradient',\n from: { x: bounds.x, y: center.y },\n to: { x: bounds.x + bounds.width, y: center.y },\n stops,\n units,\n };\n }\n if (kind === 'radial-gradient') {\n return {\n fill: 'radial-gradient',\n center,\n radius: Math.max(bounds.width, bounds.height) / 2,\n stops,\n units,\n };\n }\n return { fill: 'conic-gradient', center, angle: 0, stops, units };\n}\n"],"mappings":"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"}
@@ -1,24 +0,0 @@
1
- import { getMarker as e } from "./strokeMarkers.js";
2
- import { resolveScreenLength as t } from "@weasel-js/paint";
3
- //#region src/core/markerInset.ts
4
- function n(e, n, r = 1) {
5
- return typeof e == "string" || e.size === void 0 ? n : t(e.size, r);
6
- }
7
- function r(e) {
8
- return typeof e == "string" ? e : e.key;
9
- }
10
- function i(t, i, a = 1) {
11
- if (t === void 0) return 0;
12
- let o = e(r(t));
13
- return o === void 0 ? 0 : (o.inset ?? 0) * n(t, i, a);
14
- }
15
- function a(e, t) {
16
- return {
17
- start: i(e.markerStart, t),
18
- end: i(e.markerEnd, t)
19
- };
20
- }
21
- //#endregion
22
- export { i as markerInset, r as markerKeyOf, n as resolveMarkerSize, a as strokeInsets };
23
-
24
- //# sourceMappingURL=markerInset.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"markerInset.js","names":["resolveMarkerSize","ref","strokeWidth","resolveScreenLength","scale","markerKeyOf","markerInset","entry","getMarker","strokeInsets","stroke"],"sources":["../../src/core/markerInset.ts"],"sourcesContent":["/**\n * Resolving a `MarkerRef` to the distance the ribbon must stop short.\n *\n * The tessellation layer takes these as plain numbers and knows nothing about\n * the registry — keeping that layer free of upward dependencies is deliberate.\n * The ribbon cache, the SVG serializer and `inkReach` all resolve through here,\n * so the ribbon, the export and the hit region cannot disagree about where the\n * line ends.\n */\n\nimport { resolveScreenLength, type MarkerRef, type Stroke } from '@weasel-js/paint';\nimport { getMarker } from './strokeMarkers';\n\n/** The size of one marker unit, in the same world units as `strokeWidth`.\n * `scale` is the view scale a `{ px }` size resolves against, as a `{ px }`\n * stroke width does. */\nexport function resolveMarkerSize(ref: MarkerRef, strokeWidth: number, scale = 1): number {\n if (typeof ref === 'string' || ref.size === undefined) return strokeWidth;\n return resolveScreenLength(ref.size, scale);\n}\n\n/** The registry key a `MarkerRef` names, whether given bare or with a size. */\nexport function markerKeyOf(ref: MarkerRef): string {\n return typeof ref === 'string' ? ref : ref.key;\n}\n\n/**\n * How far back the ribbon stops for `ref`, in world units. Zero for an absent\n * marker, an unregistered key, or an open head — never throws, because an\n * unknown key is a data problem and dropping the head is the graceful answer.\n */\nexport function markerInset(ref: MarkerRef | undefined, strokeWidth: number, scale = 1): number {\n if (ref === undefined) return 0;\n const entry = getMarker(markerKeyOf(ref));\n if (entry === undefined) return 0;\n return (entry.inset ?? 0) * resolveMarkerSize(ref, strokeWidth, scale);\n}\n\n/** The start and end insets a stroke asks for. `markerMid` never insets —\n * trimming at an interior vertex would cut the line in two. */\nexport function strokeInsets(stroke: Stroke, strokeWidth: number): { start: number; end: number } {\n return {\n start: markerInset(stroke.markerStart, strokeWidth),\n end: markerInset(stroke.markerEnd, strokeWidth),\n };\n}\n"],"mappings":";;;AAgBA,SAAgBA,EAAkB,GAAgB,GAAqB,IAAQ,GAAW;CAExF,OADI,OAAOC,KAAQ,YAAYA,EAAI,SAAS,KAAA,IAAkBC,IACvDC,EAAoBF,EAAI,MAAMG,CAAK;AAC5C;AAGA,SAAgBC,EAAY,GAAwB;CAClD,OAAO,OAAOJ,KAAQ,WAAWA,IAAMA,EAAI;AAC7C;AAOA,SAAgBK,EAAY,GAA4B,GAAqB,IAAQ,GAAW;CAC9F,IAAIL,MAAQ,KAAA,GAAW,OAAO;CAC9B,IAAMM,IAAQC,EAAUH,EAAYJ,CAAG,CAAC;CAExC,OADIM,MAAU,KAAA,IAAkB,KACxBA,EAAM,SAAS,KAAKP,EAAkBC,GAAKC,GAAaE,CAAK;AACvE;AAIA,SAAgBK,EAAa,GAAgB,GAAqD;CAChG,OAAO;EACL,OAAOH,EAAYI,EAAO,aAAaR,CAAW;EAClD,KAAKI,EAAYI,EAAO,WAAWR,CAAW;CAChD;AACF"}
@@ -1,6 +0,0 @@
1
- //#region src/core/mixed.ts
2
- var e = Symbol("weasel:mixed");
3
- //#endregion
4
- export { e as MIXED };
5
-
6
- //# sourceMappingURL=mixed.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"mixed.js","names":["MIXED"],"sources":["../../src/core/mixed.ts"],"sourcesContent":["/**\n * The kit-wide \"these values disagree\" sentinel. Used wherever a value is\n * aggregated across more than one source and the sources don't agree — e.g.\n * a UI panel aggregating a property across a multi-node selection, or text\n * styling aggregated across the runs in a character range. One symbol, one\n * `isMixed` check, regardless of what's being aggregated.\n */\nexport const MIXED: unique symbol = Symbol('weasel:mixed');\n/** The type of {@link MIXED}. Property panels use it to say \"the selection\n * does not agree on this value\" without colliding with any real value. */\nexport type Mixed = typeof MIXED;\n"],"mappings":";AAOA,IAAaA,IAAuB,OAAO,cAAc"}
@@ -1,156 +0,0 @@
1
- import { gradientForBounds as e, isGradientFill as t, withGradientKind as n } from "./gradient.js";
2
- import { getProgramSource as r, registerProgram as i } from "../renderer/shaders/registerProgram.js";
3
- import { bumpNodeMemoGeneration as a } from "./scene/nodeMemo.js";
4
- import { createReflectable as o } from "@weasel-js/registry";
5
- //#region src/core/paintKinds.ts
6
- var s = [
7
- {
8
- id: "solid",
9
- label: "Solid",
10
- icon: "paintSolid",
11
- seed: (e) => ({ color: e }),
12
- colorOf: (e) => (e.fill ?? "solid") === "solid" ? e.color : void 0
13
- },
14
- c("linear-gradient", "Linear", "paintLinear"),
15
- c("radial-gradient", "Radial", "paintRadial"),
16
- c("conic-gradient", "Conic", "paintConic"),
17
- {
18
- id: "pattern",
19
- label: "Pattern",
20
- icon: "paintPattern",
21
- seed: (e) => ({
22
- fill: "pattern",
23
- pattern: {
24
- tile: "hatch",
25
- color: e
26
- },
27
- units: "bounds"
28
- }),
29
- colorOf: (e) => e.fill === "pattern" ? e.pattern.color : void 0
30
- }
31
- ];
32
- function c(t, n, r) {
33
- return {
34
- id: t,
35
- label: n,
36
- icon: r,
37
- seed: (n) => e(t, l, u(n), "bounds"),
38
- colorOf: (e) => e.stops?.[0]?.color,
39
- stopsOf: (e) => e.stops,
40
- fromStops: (n) => e(t, l, n, "bounds")
41
- };
42
- }
43
- var l = {
44
- x: 0,
45
- y: 0,
46
- width: 1,
47
- height: 1
48
- };
49
- function u(e) {
50
- let t = e.slice(0, 7).toLowerCase() === "#ffffff";
51
- return [{
52
- offset: 0,
53
- color: e
54
- }, {
55
- offset: 1,
56
- color: t ? "#000000ff" : "#ffffffff"
57
- }];
58
- }
59
- var d = o();
60
- function f() {
61
- for (let e of s) d.push(e.id, e, { source: "kit" });
62
- }
63
- f(), d.subscribe(a);
64
- var p = d.reflection;
65
- function m(e) {
66
- return e;
67
- }
68
- function h(e) {
69
- if (e.stopsOf === void 0 != (e.fromStops === void 0)) {
70
- let t = e.stopsOf === void 0 ? "stopsOf" : "fromStops";
71
- throw Error(`weasel registerPaintKind: kind "${e.id}" is missing ${t}. A gradient kind reads as a stop list and builds from one; supply both or neither.`);
72
- }
73
- if (e.inPoseFrame === void 0 != (e.toBoundsFrame === void 0)) {
74
- let t = e.inPoseFrame === void 0 ? "inPoseFrame" : "toBoundsFrame";
75
- throw Error(`weasel registerPaintKind: kind "${e.id}" is missing ${t}. A kind that converts one frame direction and not the other drifts on the next resize; supply both or neither.`);
76
- }
77
- for (let [t, n] of Object.entries(e.programs ?? {})) {
78
- let e = r(t);
79
- (!e || e.vert !== n.vert || e.frag !== n.frag) && i(t, n.vert, n.frag);
80
- }
81
- return d.push(e.id, e);
82
- }
83
- function g(e) {
84
- let t = e ?? "solid", n = d.get(t);
85
- return !n && _.has(t) && S(t).catch(() => {}), n;
86
- }
87
- var _ = /* @__PURE__ */ new Map(), v = /* @__PURE__ */ new Map(), y = [["mesh-gradient", async () => (await import("../features/meshPaint/lazyKind.js")).meshGradientKind]];
88
- function b() {
89
- _.clear(), v.clear();
90
- for (let [e, t] of y) _.set(e, t);
91
- }
92
- b();
93
- function x(e, t) {
94
- return _.set(e, t), () => {
95
- _.get(e) === t && _.delete(e);
96
- };
97
- }
98
- function S(e) {
99
- let t = v.get(e);
100
- if (t) return t;
101
- let n = _.get(e)().then((t) => {
102
- if (t.id !== e) throw Error(`weasel: the loader for paint kind "${e}" resolved to "${t.id}".`);
103
- d.has(e) || h(t);
104
- }).catch((t) => {
105
- throw console.error(`weasel: paint kind "${e}" failed to load:`, t), t;
106
- });
107
- return v.set(e, n), n;
108
- }
109
- function C(e) {
110
- return d.has(e) || _.has(e);
111
- }
112
- function w(e) {
113
- let t = e ?? [..._.keys()], n = [];
114
- for (let e of t) if (!d.has(e)) {
115
- if (!_.has(e)) return Promise.reject(/* @__PURE__ */ Error(`weasel warmPaintKinds: "${e}" is neither registered nor loadable.`));
116
- n.push(S(e));
117
- }
118
- return Promise.all(n).then(() => void 0);
119
- }
120
- function T(e) {
121
- let t, n = [];
122
- return () => {
123
- let r = d.entries();
124
- return r !== t && (t = r, n = Object.freeze(e(r))), n;
125
- };
126
- }
127
- function E() {
128
- return D();
129
- }
130
- var D = T((e) => e.map((e) => e.value));
131
- function O() {
132
- return k();
133
- }
134
- var k = T((e) => e.map((e) => e.value).filter((e) => e.stopsOf && e.fromStops));
135
- function A(e, r) {
136
- let i = j(e), a = g(r);
137
- if (!i?.stopsOf || !a?.fromStops) return;
138
- if (i.id === a.id) return e;
139
- if (t(e) && t({ fill: r })) return n(e, r);
140
- let { interpolate: o, opacity: s } = e;
141
- return {
142
- ...a.fromStops(i.stopsOf(e)),
143
- ...o === void 0 ? {} : { interpolate: o },
144
- ...s === void 0 ? {} : { opacity: s }
145
- };
146
- }
147
- function j(e) {
148
- return g(e.fill ?? "solid");
149
- }
150
- function M() {
151
- d.clear(), f(), b();
152
- }
153
- //#endregion
154
- export { M as _resetPaintKindsForTests, m as asPaint, g as getPaintKind, C as isPaintKindKnown, O as listGradientKinds, E as listPaintKinds, j as paintKindOf, p as paintKindRegistry, h as registerPaintKind, x as registerPaintKindLoader, A as switchGradientKind, w as warmPaintKinds };
155
-
156
- //# sourceMappingURL=paintKinds.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"paintKinds.js","names":["BUILTINS","paint","gradientKind","gradientForBounds","id","UNIT_BOX","twoStopRamp","color","stops","isWhite","KINDS","createReflectable","seedBuiltins","entry","bumpNodeMemoGeneration","paintKindRegistry","asPaint","registerPaintKind","missing","src","have","getProgramSource","registerProgram","getPaintKind","kind","LOADERS","startLoad","LOADS","LAZY_BUILTINS","seedLoaders","load","registerPaintKindLoader","running","done","err","isPaintKindKnown","warmPaintKinds","ids","kinds","loads","derivedList","from","list","entries","derive","listPaintKinds","allKinds","all","listGradientKinds","gradientKinds","switchGradientKind","paintKindOf","to","isGradientFill","withGradientKind","interpolate","opacity","fill","_resetPaintKindsForTests"],"sources":["../../src/core/paintKinds.ts"],"sourcesContent":["/**\n * The paint-kind registry — what makes `FillStyle` open.\n *\n * A consumer registers a sixth kind and it renders, converts between the\n * bounds and pose frames, and serializes, with no kit edits. The five built-in\n * kinds are registered here at module load so an editor's kind bar can\n * enumerate every kind through one list.\n *\n * Each kit layer consults this registry for a kind it does not recognize and\n * otherwise runs its own built-in branch. That split is not laziness: a built-in\n * kind's render slot lives in the GL renderer, its serialize slot lives in\n * `@weasel-js/svg`, and neither can be imported from here without inverting a\n * package dependency.\n */\n\nimport type {\n ColorSpace, FillStyle, GradientFill, GradientKind, GradientUnits, GradStop, TilePatternSpec,\n} from '@weasel-js/paint';\nimport { gradientForBounds, isGradientFill, withGradientKind } from './gradient';\nimport { bumpNodeMemoGeneration } from './scene/nodeMemo';\nimport type { ComponentType } from 'react';\nimport { createReflectable, type ReflectedEntry, type Reflection } from '@weasel-js/registry';\nimport type { FillPoseBox } from './fillInPoseFrame';\nimport type { GlMat3 } from '../renderer/math/mat3';\nimport type { ShaderProgram } from '../renderer/shaders/ShaderProgram';\nimport { getProgramSource, registerProgram, type ProgramSource } from '../renderer/shaders/registerProgram';\n\n/** A compiled GL program. A paint kind gets one from\n * {@link PaintBindContext.program} and hands it back from `bind`. */\nexport type PaintProgram = ShaderProgram;\n\n/**\n * `FillStyle`'s discriminant, open on the string the way `ChromeId` is: the\n * five kinds the kit ships, plus whatever a consumer registers.\n */\nexport type PaintKind = 'solid' | 'linear-gradient' | 'radial-gradient' | 'conic-gradient' | 'pattern' | (string & {});\n\n/** What a registered kind's editor renders. `PaintInput` in `@weasel-js/ui`\n * is the control that mounts it. */\nexport interface PaintKindEditorProps {\n value: FillStyle;\n onInput?(next: FillStyle): void;\n onChange(next: FillStyle): void;\n}\n\n/**\n * The lifetime a paint kind's GPU state belongs to: one renderer on one live\n * context. The object itself is the key — a kind caches textures in a\n * `WeakMap` on it, so two renderers sharing a context never trade them — and\n * `onRelease` is where it frees them.\n */\nexport interface PaintResources {\n /** Run `release` once, when this lifetime ends: the renderer is disposed, or\n * its context was lost and restored. Free every GL object made under it\n * there. */\n onRelease(release: () => void): void;\n}\n\n/**\n * The renderer surface a paint kind binds against, narrowed to what a paint\n * needs. The full `DrawContext` is not consumer surface.\n */\nexport interface PaintBindContext {\n readonly gl: WebGL2RenderingContext;\n /** The group alpha this draw inherits — multiply it into the paint's own. */\n readonly alpha: number;\n /**\n * The compiled program for a `registerProgram` id, compiled against this\n * renderer on first use. `null` when no source is registered under `id` or\n * compilation failed.\n */\n program(id: string): PaintProgram | null;\n /** Send `u_proj` and `u_model`, which every kit vertex shader takes. */\n setProjAndModel(program: PaintProgram): void;\n /**\n * `u_worldInv` for a paint declaring `units` — the inverse of the transform\n * from the paint's space to the frame the geometry arrives in. Paired with\n * the vertex shader's `v_world` varying this is *the* paint-space\n * convention; it is not gradient-specific.\n *\n * `null` when that space has no inverse — a transform or view that flattens\n * an axis. Nothing the paint draws there means anything, so `bind` should\n * return `null` and draw nothing.\n */\n spaceInverse(units: GradientUnits | undefined): GlMat3 | null;\n /**\n * The transform from the space `units` names to device pixels of the target\n * this draw lands in — screen pixels times the pixel ratio on screen, output\n * pixels in a headless render. It is what a paint baking a texture measures\n * its resolution against. `null` where `spaceInverse` is.\n */\n spaceToDevice(units: GradientUnits | undefined): GlMat3 | null;\n /** The largest texture side this context accepts, `MAX_TEXTURE_SIZE`. */\n readonly maxTextureSize: number;\n /** The lifetime GPU state made for this draw belongs to. Stable across the\n * frames of one renderer, so it is the key for a kind's texture cache. */\n readonly resources: PaintResources;\n /**\n * Bake a stop ramp into the frame's ramp atlas, bind that atlas to a texture\n * unit, and return the `v` the ramp's own row sits at — every ramp in a\n * frame shares one texture, so a paint must sample at the returned `v` and\n * not at a constant.\n *\n * `space` is the blend the stops are baked through, defaulting to `'rgb'`.\n * It is part of the atlas key, so the same stops under two spaces take two\n * rows rather than colliding.\n */\n bindRamp(stops: GradStop[], unit: number, space?: ColorSpace): number;\n}\n\n/**\n * One paint kind.\n *\n * `seed`, `label` and `colorOf` are the editor's slots and every kind has\n * them. The rest are optional because a kind may not need them — but\n * `inPoseFrame` and `toBoundsFrame` come as a pair or not at all: a kind that\n * converts one direction and not the other paints correctly once and then\n * drifts on the next resize.\n */\nexport interface PaintKindEntry {\n id: string;\n label: string;\n /** Glyph naming this kind in an editor's kind bar, as an icon name the UI\n * layer resolves — the same indirection `PrefBase.icon` uses. A kind\n * without one is named by its `label`. */\n icon?: string;\n /** A paint of this kind seeded from a color — what an editor writes when a\n * consumer switches a solid to this kind. */\n seed(fromColor: string): FillStyle;\n /** The single color this paint shows, or `undefined` when it has none. */\n colorOf(paint: FillStyle): string | undefined;\n /** Editor slot. */\n Editor?: ComponentType<PaintKindEditorProps>;\n /**\n * The stop list this paint reads as. With `fromStops`, it is what makes a\n * kind a gradient: `listGradientKinds` returns the kinds carrying both, and\n * `switchGradientKind` converts between any two of them through the list.\n */\n stopsOf?(paint: FillStyle): GradStop[];\n /** A paint of this kind built from a stop list, in `bounds` units. The\n * converse of `stopsOf`; supply both or neither. */\n fromStops?(stops: GradStop[]): FillStyle;\n /**\n * Render slot: bind program, uniforms and textures for `fill` and return the\n * bound program; `null` declines the paint.\n *\n * Binding is split from drawing on purpose — a caller owning its own stencil\n * state (an inner/outer-aligned stroke, an even-odd fill) must issue its own\n * draw call, and the kit's draw wrapper would clobber that state. Shader\n * output must be premultiplied: `outColor = vec4(rgb * a, a)`.\n *\n * The geometry is not always the node's own. Text below the outline tier\n * paints by drawing a quad over its glyphs' screen box into an offscreen\n * buffer and masking that with glyph coverage, so a paint must come from\n * `v_world` through `spaceInverse`, not from where `a_position` happens to\n * lie.\n */\n bind?(ctx: PaintBindContext, fill: FillStyle): PaintProgram | null;\n /** Bounds frame → the frame the node is painted in. */\n inPoseFrame?(fill: FillStyle, box: FillPoseBox): FillStyle;\n /** The inverse. Required whenever `inPoseFrame` is supplied. */\n toBoundsFrame?(fill: FillStyle, box: FillPoseBox): FillStyle;\n /**\n * The `<defs>` entry backing a `url(#id)` reference.\n *\n * SVG has paint servers for two gradients and a pattern and nothing else, so\n * a kind beyond those has no element to target: write a foreign-namespaced\n * one under the `wzl:` prefix `@weasel-js/svg` declares on the root whenever\n * a document holds such a paint. That package emits the fallback color\n * beside the reference on its own, from `colorOf`.\n */\n toSvg?(id: string, fill: FillStyle): string;\n /**\n * Shader programs `bind` looks up through `ctx.program`, keyed by program\n * id; registering the kind registers them. Declaring them here rather than\n * calling `registerProgram` at import keeps a kind loaded by\n * {@link registerPaintKindLoader} free of core's registries.\n */\n programs?: Readonly<Record<string, ProgramSource>>;\n}\n\nconst BUILTINS: readonly PaintKindEntry[] = [\n {\n id: 'solid',\n label: 'Solid',\n icon: 'paintSolid',\n seed: (color) => ({ color }),\n colorOf: (paint) => ((paint.fill ?? 'solid') === 'solid'\n ? (paint as { color: string }).color\n : undefined),\n },\n gradientKind('linear-gradient', 'Linear', 'paintLinear'),\n gradientKind('radial-gradient', 'Radial', 'paintRadial'),\n gradientKind('conic-gradient', 'Conic', 'paintConic'),\n {\n id: 'pattern',\n label: 'Pattern',\n icon: 'paintPattern',\n seed: (color) => ({\n fill: 'pattern',\n pattern: { tile: 'hatch', color },\n units: 'bounds',\n }),\n colorOf: (paint) => (paint.fill === 'pattern'\n ? (paint.pattern as Partial<TilePatternSpec>).color\n : undefined),\n },\n];\n\nfunction gradientKind(id: GradientKind, label: string, icon: string): PaintKindEntry {\n return {\n id,\n label,\n icon,\n // `bounds` units make the seed independent of the node's actual size.\n seed: (color) => gradientForBounds(id, UNIT_BOX, twoStopRamp(color), 'bounds'),\n colorOf: (paint) => (paint as Partial<GradientFill>).stops?.[0]?.color,\n stopsOf: (paint) => (paint as GradientFill).stops,\n fromStops: (stops) => gradientForBounds(id, UNIT_BOX, stops, 'bounds'),\n };\n}\n\nconst UNIT_BOX = { x: 0, y: 0, width: 1, height: 1 };\n\n/** `color` to a contrasting end — white reads against any hue; against white\n * itself, black does. */\nfunction twoStopRamp(color: string): GradStop[] {\n const isWhite = color.slice(0, 7).toLowerCase() === '#ffffff';\n return [{ offset: 0, color }, { offset: 1, color: isWhite ? '#000000ff' : '#ffffffff' }];\n}\n\nconst KINDS = createReflectable<PaintKindEntry>();\n\nfunction seedBuiltins(): void {\n for (const entry of BUILTINS) KINDS.push(entry.id, entry, { source: 'kit' });\n}\nseedBuiltins();\n// `NodeShape`'s paint slot memoizes per node and resolves a fill's frame\n// inside it, so the kind set is ambient state that memo cannot see change.\nKINDS.subscribe(bumpNodeMemoGeneration);\n\n/** Every registered paint kind, with the overrides each displaced. */\nexport const paintKindRegistry: Reflection<PaintKindEntry> = KINDS.reflection;\n\n/**\n * A consumer's own paint, typed as a `FillStyle`.\n *\n * `FillStyle` stays a closed union: opening its discriminant would widen every\n * built-in member and break the narrowing the kit's own branches depend on.\n * A registered kind declares its own interface instead and passes it through\n * here — the kit reads only `fill` and hands the whole object back to that\n * kind's slots.\n */\nexport function asPaint<T extends { fill: string }>(paint: T): FillStyle {\n return paint as unknown as FillStyle;\n}\n\n/** Register a paint kind. Returns a disposer that removes it. Re-registering an\n * existing id is an override; disposing it uncovers whatever it displaced. */\nexport function registerPaintKind(entry: PaintKindEntry): () => void {\n if ((entry.stopsOf === undefined) !== (entry.fromStops === undefined)) {\n const missing = entry.stopsOf === undefined ? 'stopsOf' : 'fromStops';\n throw new Error(\n `weasel registerPaintKind: kind \"${entry.id}\" is missing ${missing}. A ` +\n 'gradient kind reads as a stop list and builds from one; supply both or neither.',\n );\n }\n if ((entry.inPoseFrame === undefined) !== (entry.toBoundsFrame === undefined)) {\n const missing = entry.inPoseFrame === undefined ? 'inPoseFrame' : 'toBoundsFrame';\n throw new Error(\n `weasel registerPaintKind: kind \"${entry.id}\" is missing ${missing}. A kind ` +\n 'that converts one frame direction and not the other drifts on the next ' +\n 'resize; supply both or neither.',\n );\n }\n for (const [id, src] of Object.entries(entry.programs ?? {})) {\n const have = getProgramSource(id);\n if (!have || have.vert !== src.vert || have.frag !== src.frag) registerProgram(id, src.vert, src.frag);\n }\n // Re-registering a built-in id is how a consumer closes a gap the kit leaves,\n // so disposing that override puts the built-in back rather than deleting the\n // kind.\n return KINDS.push(entry.id, entry);\n}\n\n/** The entry for `kind`, or `undefined`. A lookup that misses on a kind with\n * a loader starts that load; see {@link registerPaintKindLoader}. */\nexport function getPaintKind(kind: string | undefined): PaintKindEntry | undefined {\n const id = kind ?? 'solid';\n const entry = KINDS.get(id);\n if (!entry && LOADERS.has(id)) void startLoad(id).catch(() => {});\n return entry;\n}\n\n/** Resolves with the entry for a kind that is loaded on first use. */\nexport type PaintKindLoader = () => Promise<PaintKindEntry>;\n\nconst LOADERS = new Map<string, PaintKindLoader>();\n\n/** One load per kind, kept after it settles: a failed load is not retried on\n * every frame that meets the kind. */\nconst LOADS = new Map<string, Promise<void>>();\n\n// A built-in kind heavy enough to keep off a consumer's bundle until a paint\n// of it turns up. Importing the module statically still registers it at once.\nconst LAZY_BUILTINS: ReadonlyArray<readonly [string, PaintKindLoader]> = [\n ['mesh-gradient', async () => (await import('../features/meshPaint/lazyKind')).meshGradientKind],\n];\n\nfunction seedLoaders(): void {\n LOADERS.clear();\n LOADS.clear();\n for (const [id, load] of LAZY_BUILTINS) LOADERS.set(id, load);\n}\nseedLoaders();\n\n/**\n * Declare a paint kind that is loaded the first time something looks it up,\n * so its code stays out of the bundle until a paint of it appears — typically\n * `() => import('./myKind').then((m) => m.myKindEntry)`.\n *\n * Until it lands the kind is unregistered: the renderer draws nothing for its\n * paints, and every other reader treats it as unknown. Registering it fires\n * `paintKindRegistry`'s subscribers, which is what `<SceneCanvas>` repaints\n * on. Call {@link warmPaintKinds} to load ahead of the first frame instead.\n *\n * A kind that is already registered never calls its loader. Returns a\n * disposer that removes the loader.\n */\nexport function registerPaintKindLoader(id: string, load: PaintKindLoader): () => void {\n LOADERS.set(id, load);\n return () => {\n if (LOADERS.get(id) === load) LOADERS.delete(id);\n };\n}\n\nfunction startLoad(id: string): Promise<void> {\n const running = LOADS.get(id);\n if (running) return running;\n const load = LOADERS.get(id)!;\n const done = load().then(\n (entry) => {\n if (entry.id !== id) {\n throw new Error(`weasel: the loader for paint kind \"${id}\" resolved to \"${entry.id}\".`);\n }\n if (!KINDS.has(id)) registerPaintKind(entry);\n },\n ).catch((err: unknown) => {\n console.error(`weasel: paint kind \"${id}\" failed to load:`, err);\n throw err;\n });\n LOADS.set(id, done);\n return done;\n}\n\n/** Is `id` registered, or declared with a loader? */\nexport function isPaintKindKnown(id: string): boolean {\n return KINDS.has(id) || LOADERS.has(id);\n}\n\n/**\n * Load paint kinds ahead of their first use, so the first frame that meets\n * one draws it rather than a blank. With no list, loads every kind that has a\n * loader — the kit's lazily loaded built-ins (`mesh-gradient`) plus any a\n * consumer declared with {@link registerPaintKindLoader}.\n *\n * Resolves once every kind is registered; a kind already registered counts\n * as loaded. Rejects when a load fails, or for a kind that is neither\n * registered nor loadable.\n */\nexport function warmPaintKinds(kinds?: readonly string[]): Promise<void> {\n const ids = kinds ?? [...LOADERS.keys()];\n const loads: Promise<void>[] = [];\n for (const id of ids) {\n if (KINDS.has(id)) continue;\n if (!LOADERS.has(id)) {\n return Promise.reject(new Error(\n `weasel warmPaintKinds: \"${id}\" is neither registered nor loadable.`,\n ));\n }\n loads.push(startLoad(id));\n }\n return Promise.all(loads).then(() => undefined);\n}\n\n/** A list derived from the registry, recomputed only when it changes — so\n * its identity is a `useSyncExternalStore` snapshot. */\nfunction derivedList(\n derive: (all: readonly ReflectedEntry<PaintKindEntry>[]) => readonly PaintKindEntry[],\n): () => readonly PaintKindEntry[] {\n let from: readonly ReflectedEntry<PaintKindEntry>[] | undefined;\n let list: readonly PaintKindEntry[] = [];\n return () => {\n const entries = KINDS.entries();\n if (entries !== from) {\n from = entries;\n list = Object.freeze(derive(entries));\n }\n return list;\n };\n}\n\n/** Every registered kind, built-ins first, in registration order. The same\n * array until the registry changes. */\nexport function listPaintKinds(): readonly PaintKindEntry[] {\n return allKinds();\n}\nconst allKinds = derivedList((all) => all.map((e) => e.value));\n\n/** Every registered gradient kind — the ones that read as and build from a\n * stop list — in registration order. The same array until the registry\n * changes. */\nexport function listGradientKinds(): readonly PaintKindEntry[] {\n return gradientKinds();\n}\nconst gradientKinds = derivedList(\n (all) => all.map((e) => e.value).filter((entry) => entry.stopsOf && entry.fromStops),\n);\n\n/**\n * `paint` retargeted to gradient kind `kind`, or `undefined` when either side\n * is not a gradient kind.\n *\n * Between two of the stop gradients this is `withGradientKind`, which carries\n * the geometry. Any other pair goes through the stop list — `stopsOf` on the\n * way out, `fromStops` on the way in — keeping `interpolate` and `opacity`.\n * Lossy wherever the kinds hold different information; an editor that wants a\n * switch to be undoable should keep the original paint.\n */\nexport function switchGradientKind(paint: FillStyle, kind: PaintKind): FillStyle | undefined {\n const from = paintKindOf(paint);\n const to = getPaintKind(kind);\n if (!from?.stopsOf || !to?.fromStops) return undefined;\n if (from.id === to.id) return paint;\n if (isGradientFill(paint) && isGradientFill({ fill: kind } as FillStyle)) {\n return withGradientKind(paint, kind as GradientKind);\n }\n const { interpolate, opacity } = paint as { interpolate?: ColorSpace; opacity?: number };\n return {\n ...to.fromStops(from.stopsOf(paint)),\n ...(interpolate !== undefined ? { interpolate } : {}),\n ...(opacity !== undefined ? { opacity } : {}),\n } as FillStyle;\n}\n\n/** The registry entry for a paint, or `undefined` when its kind is unknown. */\nexport function paintKindOf(fill: FillStyle): PaintKindEntry | undefined {\n return getPaintKind(fill.fill ?? 'solid');\n}\n\n/** @internal Test helper — do not call from product code. */\nexport function _resetPaintKindsForTests(): void {\n KINDS.clear();\n seedBuiltins();\n seedLoaders();\n}\n"],"mappings":"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"}
@@ -1,6 +0,0 @@
1
- //#region src/core/scene/pickability.ts
2
- var e = (e) => e.pickable === void 0 ? {} : { pickable: e.pickable };
3
- //#endregion
4
- export { e as pickability };
5
-
6
- //# sourceMappingURL=pickability.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"pickability.js","names":["pickability","n"],"sources":["../../../src/core/scene/pickability.ts"],"sourcesContent":["/** The `pickable` field of a node as a spread for `scene.add`: present only\n * when the node states it, so an unstated one keeps the scene's default. */\nexport const pickability = (n: { pickable?: boolean }): { pickable?: boolean } =>\n n.pickable !== undefined ? { pickable: n.pickable } : {};\n"],"mappings":";AAEA,IAAaA,KAAe,MAC1BC,EAAE,aAAa,KAAA,IAAuC,CAAC,IAA5B,EAAE,UAAUA,EAAE,SAAS"}