@weasel-js/core 1.9.3 → 1.10.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (1139) hide show
  1. package/CHANGELOG.md +1106 -0
  2. package/README.md +7 -5
  3. package/dist/WeaselProvider.js +5 -7
  4. package/dist/WeaselProvider.js.map +1 -1
  5. package/dist/affordances/composeAffordanceLayer.js +91 -93
  6. package/dist/affordances/composeAffordanceLayer.js.map +1 -1
  7. package/dist/affordances/cornerResize.js +27 -18
  8. package/dist/affordances/cornerResize.js.map +1 -1
  9. package/dist/affordances/hitAffordanceRegions.js +65 -104
  10. package/dist/affordances/hitAffordanceRegions.js.map +1 -1
  11. package/dist/affordances/pathAnchors.js.map +1 -1
  12. package/dist/affordances/rotationHandle.js +22 -21
  13. package/dist/affordances/rotationHandle.js.map +1 -1
  14. package/dist/animation/behaviors/coast.js +21 -0
  15. package/dist/animation/behaviors/coast.js.map +1 -0
  16. package/dist/animation/behaviors/coastByWrite.js +107 -0
  17. package/dist/animation/behaviors/coastByWrite.js.map +1 -0
  18. package/dist/animation/behaviors/coastOnTargets.js +94 -0
  19. package/dist/animation/behaviors/coastOnTargets.js.map +1 -0
  20. package/dist/animation/behaviors/momentum.js +38 -88
  21. package/dist/animation/behaviors/momentum.js.map +1 -1
  22. package/dist/animation/clipTargets.js +12 -0
  23. package/dist/animation/clipTargets.js.map +1 -0
  24. package/dist/animation/index.js +15 -20
  25. package/dist/animation/poseHelpers.js +112 -33
  26. package/dist/animation/poseHelpers.js.map +1 -1
  27. package/dist/animation/poseTarget.js +115 -0
  28. package/dist/animation/poseTarget.js.map +1 -0
  29. package/dist/animation/reflow.js +113 -83
  30. package/dist/animation/reflow.js.map +1 -1
  31. package/dist/animation/rewind.js +66 -0
  32. package/dist/animation/rewind.js.map +1 -0
  33. package/dist/animation/rig/bindRig.js +85 -53
  34. package/dist/animation/rig/bindRig.js.map +1 -1
  35. package/dist/animation/rig/rigNode.js +93 -0
  36. package/dist/animation/rig/rigNode.js.map +1 -0
  37. package/dist/animation/rig/rigSeat.js +26 -0
  38. package/dist/animation/rig/rigSeat.js.map +1 -0
  39. package/dist/animation/rig/skinBinding.js +56 -0
  40. package/dist/animation/rig/skinBinding.js.map +1 -0
  41. package/dist/animation/rig/useRig.js +31 -16
  42. package/dist/animation/rig/useRig.js.map +1 -1
  43. package/dist/animation/wrappers/animateLifecycle.js +32 -24
  44. package/dist/animation/wrappers/animateLifecycle.js.map +1 -1
  45. package/dist/animation/wrappers/animateOnSetPose.js +31 -29
  46. package/dist/animation/wrappers/animateOnSetPose.js.map +1 -1
  47. package/dist/animation/wrappers/instantPose.js +13 -0
  48. package/dist/animation/wrappers/instantPose.js.map +1 -0
  49. package/dist/animation/writtenPoseTarget.js +33 -0
  50. package/dist/animation/writtenPoseTarget.js.map +1 -0
  51. package/dist/{autoPoseDescriptor-vCdt55xm.d.ts → autoPoseDescriptor-DHg5KqaJ.d.ts} +1 -1
  52. package/dist/barrel/canvas.js +31 -0
  53. package/dist/barrel/chrome.js +16 -0
  54. package/dist/barrel/input.js +18 -0
  55. package/dist/barrel/interactions.js +38 -0
  56. package/dist/barrel/paint.js +11 -0
  57. package/dist/barrel/paths.js +12 -0
  58. package/dist/barrel/renderer.js +14 -0
  59. package/dist/barrel/routing.js +57 -0
  60. package/dist/barrel/scene.js +37 -0
  61. package/dist/barrel/text.js +9 -0
  62. package/dist/barrel/viewport.js +42 -0
  63. package/dist/canvas/Canvas.js +280 -559
  64. package/dist/canvas/Canvas.js.map +1 -1
  65. package/dist/canvas/CanvasView.js +147 -167
  66. package/dist/canvas/CanvasView.js.map +1 -1
  67. package/dist/canvas/CursorCoordsHud.js +53 -49
  68. package/dist/canvas/CursorCoordsHud.js.map +1 -1
  69. package/dist/canvas/DrawCanvas.js +40 -51
  70. package/dist/canvas/DrawCanvas.js.map +1 -1
  71. package/dist/canvas/ModalityHud.js.map +1 -1
  72. package/dist/canvas/NodeShape.js +55 -374
  73. package/dist/canvas/NodeShape.js.map +1 -1
  74. package/dist/canvas/PickHud.js +50 -47
  75. package/dist/canvas/PickHud.js.map +1 -1
  76. package/dist/canvas/SceneCanvas/DevHuds.js +40 -0
  77. package/dist/canvas/SceneCanvas/DevHuds.js.map +1 -0
  78. package/dist/canvas/SceneCanvas/GestureDispatcherMounter.js +126 -0
  79. package/dist/canvas/SceneCanvas/GestureDispatcherMounter.js.map +1 -0
  80. package/dist/canvas/SceneCanvas/PointerProviderIfRoot.js +27 -31
  81. package/dist/canvas/SceneCanvas/PointerProviderIfRoot.js.map +1 -1
  82. package/dist/canvas/SceneCanvas/StandardActionsRegistrar.js +64 -0
  83. package/dist/canvas/SceneCanvas/StandardActionsRegistrar.js.map +1 -0
  84. package/dist/canvas/SceneCanvas/ToolKeybindingsMounter.js +16 -0
  85. package/dist/canvas/SceneCanvas/ToolKeybindingsMounter.js.map +1 -0
  86. package/dist/canvas/SceneCanvas/coordTrace.js +46 -0
  87. package/dist/canvas/SceneCanvas/coordTrace.js.map +1 -0
  88. package/dist/canvas/SceneCanvas/defaultNodeProperties.js +138 -85
  89. package/dist/canvas/SceneCanvas/defaultNodeProperties.js.map +1 -1
  90. package/dist/canvas/SceneCanvas/defaultNodeRouting.js +9 -8
  91. package/dist/canvas/SceneCanvas/defaultNodeRouting.js.map +1 -1
  92. package/dist/canvas/SceneCanvas/dispatcherGestureBounds.js.map +1 -1
  93. package/dist/canvas/SceneCanvas/features.js +74 -43
  94. package/dist/canvas/SceneCanvas/features.js.map +1 -1
  95. package/dist/canvas/SceneCanvas/isDev.js +12 -0
  96. package/dist/canvas/SceneCanvas/isDev.js.map +1 -0
  97. package/dist/canvas/SceneCanvas/poseGeometry.js +31 -34
  98. package/dist/canvas/SceneCanvas/poseGeometry.js.map +1 -1
  99. package/dist/canvas/SceneCanvas/poseRegistrars.js +13 -0
  100. package/dist/canvas/SceneCanvas/poseRegistrars.js.map +1 -0
  101. package/dist/canvas/SceneCanvas/props.js +39 -0
  102. package/dist/canvas/SceneCanvas/props.js.map +1 -0
  103. package/dist/canvas/SceneCanvas/toolRegistry.js +23 -0
  104. package/dist/canvas/SceneCanvas/toolRegistry.js.map +1 -0
  105. package/dist/canvas/SceneCanvas/useActionsPropResolver.js +6 -1
  106. package/dist/canvas/SceneCanvas/useActionsPropResolver.js.map +1 -1
  107. package/dist/canvas/SceneCanvas/useBuiltinShapeTools.js +21 -62
  108. package/dist/canvas/SceneCanvas/useBuiltinShapeTools.js.map +1 -1
  109. package/dist/canvas/SceneCanvas/useBuiltinTools.js +21 -0
  110. package/dist/canvas/SceneCanvas/useBuiltinTools.js.map +1 -0
  111. package/dist/canvas/SceneCanvas/useCanvasCamera.js +38 -0
  112. package/dist/canvas/SceneCanvas/useCanvasCamera.js.map +1 -0
  113. package/dist/canvas/SceneCanvas/useCanvasDispatcher.js +20 -0
  114. package/dist/canvas/SceneCanvas/useCanvasDispatcher.js.map +1 -0
  115. package/dist/canvas/SceneCanvas/useCanvasSelection.js +16 -0
  116. package/dist/canvas/SceneCanvas/useCanvasSelection.js.map +1 -0
  117. package/dist/canvas/SceneCanvas/useCanvasTools.js +67 -0
  118. package/dist/canvas/SceneCanvas/useCanvasTools.js.map +1 -0
  119. package/dist/canvas/SceneCanvas/useDispatcherOverlayLayer.js +29 -29
  120. package/dist/canvas/SceneCanvas/useDispatcherOverlayLayer.js.map +1 -1
  121. package/dist/canvas/SceneCanvas/useHeldModifiers.js +20 -0
  122. package/dist/canvas/SceneCanvas/useHeldModifiers.js.map +1 -0
  123. package/dist/canvas/SceneCanvas/useNodeAtPoint.js +26 -0
  124. package/dist/canvas/SceneCanvas/useNodeAtPoint.js.map +1 -0
  125. package/dist/canvas/SceneCanvas/useNodeKinds.js +26 -0
  126. package/dist/canvas/SceneCanvas/useNodeKinds.js.map +1 -0
  127. package/dist/canvas/SceneCanvas/usePreviewGhostLayer.js +48 -48
  128. package/dist/canvas/SceneCanvas/usePreviewGhostLayer.js.map +1 -1
  129. package/dist/canvas/SceneCanvas/useSceneCanvasHandle.js +47 -0
  130. package/dist/canvas/SceneCanvas/useSceneCanvasHandle.js.map +1 -0
  131. package/dist/canvas/SceneCanvas/useSceneCanvasLayers.js +66 -0
  132. package/dist/canvas/SceneCanvas/useSceneCanvasLayers.js.map +1 -0
  133. package/dist/canvas/SceneCanvas/useSceneChrome.js +59 -0
  134. package/dist/canvas/SceneCanvas/useSceneChrome.js.map +1 -0
  135. package/dist/canvas/SceneCanvas/useSceneRedrawSources.js +23 -0
  136. package/dist/canvas/SceneCanvas/useSceneRedrawSources.js.map +1 -0
  137. package/dist/canvas/SceneCanvas/useSceneSelectTool.js +74 -78
  138. package/dist/canvas/SceneCanvas/useSceneSelectTool.js.map +1 -1
  139. package/dist/canvas/SceneCanvas/useSceneSlotLayers.js +37 -0
  140. package/dist/canvas/SceneCanvas/useSceneSlotLayers.js.map +1 -0
  141. package/dist/canvas/SceneCanvas/useSelectionOverlayLayer.js +38 -0
  142. package/dist/canvas/SceneCanvas/useSelectionOverlayLayer.js.map +1 -0
  143. package/dist/canvas/SceneCanvas/useViewLayerGate.js +20 -0
  144. package/dist/canvas/SceneCanvas/useViewLayerGate.js.map +1 -0
  145. package/dist/canvas/SceneCanvas/useViewportActions.js +9 -1
  146. package/dist/canvas/SceneCanvas/useViewportActions.js.map +1 -1
  147. package/dist/canvas/SceneCanvas/worldPointAt.js +9 -0
  148. package/dist/canvas/SceneCanvas/worldPointAt.js.map +1 -0
  149. package/dist/canvas/SceneCanvas.js +311 -969
  150. package/dist/canvas/SceneCanvas.js.map +1 -1
  151. package/dist/canvas/SceneViewCanvas.js +42 -46
  152. package/dist/canvas/SceneViewCanvas.js.map +1 -1
  153. package/dist/canvas/adapterDerivedPath.js +26 -0
  154. package/dist/canvas/adapterDerivedPath.js.map +1 -0
  155. package/dist/canvas/affordanceAt.js +11 -1
  156. package/dist/canvas/affordanceAt.js.map +1 -1
  157. package/dist/canvas/buildSceneLayer.js +111 -0
  158. package/dist/canvas/buildSceneLayer.js.map +1 -0
  159. package/dist/canvas/buildSceneTree.js +16 -19
  160. package/dist/canvas/buildSceneTree.js.map +1 -1
  161. package/dist/canvas/canvasRenderer.js +67 -55
  162. package/dist/canvas/canvasRenderer.js.map +1 -1
  163. package/dist/canvas/colorOverrides.js.map +1 -1
  164. package/dist/canvas/defaultDrawOne.js +12 -12
  165. package/dist/canvas/defaultDrawOne.js.map +1 -1
  166. package/dist/canvas/deps/areaSelect.js +4 -4
  167. package/dist/canvas/deps/areaSelect.js.map +1 -1
  168. package/dist/canvas/deps/changes.js +13 -0
  169. package/dist/canvas/deps/changes.js.map +1 -0
  170. package/dist/canvas/deps/debug.js.map +1 -1
  171. package/dist/canvas/deps/editAnchors.js +38 -57
  172. package/dist/canvas/deps/editAnchors.js.map +1 -1
  173. package/dist/canvas/deps/geometryProjection.js.map +1 -1
  174. package/dist/canvas/deps/hitTestArea.js +31 -26
  175. package/dist/canvas/deps/hitTestArea.js.map +1 -1
  176. package/dist/canvas/deps/insert.js +130 -91
  177. package/dist/canvas/deps/insert.js.map +1 -1
  178. package/dist/canvas/deps/lassoSelect.js +5 -5
  179. package/dist/canvas/deps/lassoSelect.js.map +1 -1
  180. package/dist/canvas/deps/poseDescriptor.js +1 -1
  181. package/dist/canvas/deps/poseDescriptor.js.map +1 -1
  182. package/dist/canvas/deps/resizePolicy.js.map +1 -1
  183. package/dist/canvas/deps/slice.js +26 -26
  184. package/dist/canvas/deps/slice.js.map +1 -1
  185. package/dist/canvas/deps/textEdit.js +6 -5
  186. package/dist/canvas/deps/textEdit.js.map +1 -1
  187. package/dist/canvas/deps/view.js.map +1 -1
  188. package/dist/canvas/derivedPath.js +47 -22
  189. package/dist/canvas/derivedPath.js.map +1 -1
  190. package/dist/canvas/drawEnvelope.js +8 -4
  191. package/dist/canvas/drawEnvelope.js.map +1 -1
  192. package/dist/canvas/getNodeAtPoint.js +4 -8
  193. package/dist/canvas/getNodeAtPoint.js.map +1 -1
  194. package/dist/canvas/hud.module.js +1 -1
  195. package/dist/canvas/hud.module.js.map +1 -1
  196. package/dist/canvas/insertPreviewExtent.js.map +1 -1
  197. package/dist/canvas/kitRequirements.js +2 -2
  198. package/dist/canvas/kitRequirements.js.map +1 -1
  199. package/dist/canvas/layerOrder.js +13 -6
  200. package/dist/canvas/layerOrder.js.map +1 -1
  201. package/dist/canvas/layerSlots.js +6 -1
  202. package/dist/canvas/layerSlots.js.map +1 -1
  203. package/dist/canvas/nodeShapes/derivedPainter.js +34 -0
  204. package/dist/canvas/nodeShapes/derivedPainter.js.map +1 -0
  205. package/dist/canvas/nodeShapes/imagePainter.js +87 -0
  206. package/dist/canvas/nodeShapes/imagePainter.js.map +1 -0
  207. package/dist/canvas/nodeShapes/memo.js +9 -0
  208. package/dist/canvas/nodeShapes/memo.js.map +1 -0
  209. package/dist/canvas/nodeShapes/nodePaint.js +68 -0
  210. package/dist/canvas/nodeShapes/nodePaint.js.map +1 -0
  211. package/dist/canvas/nodeShapes/pathPainter.js +39 -0
  212. package/dist/canvas/nodeShapes/pathPainter.js.map +1 -0
  213. package/dist/canvas/nodeShapes/poseBox.js +20 -0
  214. package/dist/canvas/nodeShapes/poseBox.js.map +1 -0
  215. package/dist/canvas/nodeShapes/rectFallbackPainter.js +38 -0
  216. package/dist/canvas/nodeShapes/rectFallbackPainter.js.map +1 -0
  217. package/dist/canvas/nodeShapes/shapePainter.js +72 -0
  218. package/dist/canvas/nodeShapes/shapePainter.js.map +1 -0
  219. package/dist/canvas/nodeShapes/textPainter.js +55 -0
  220. package/dist/canvas/nodeShapes/textPainter.js.map +1 -0
  221. package/dist/canvas/overlayRoleStrokes.js.map +1 -1
  222. package/dist/canvas/paintCull.js +11 -14
  223. package/dist/canvas/paintCull.js.map +1 -1
  224. package/dist/{features/cursor → canvas}/paintedCursorLayer.js +2 -2
  225. package/dist/canvas/paintedCursorLayer.js.map +1 -0
  226. package/dist/canvas/pickWalk.js +59 -68
  227. package/dist/canvas/pickWalk.js.map +1 -1
  228. package/dist/canvas/planeClips.js +18 -19
  229. package/dist/canvas/planeClips.js.map +1 -1
  230. package/dist/canvas/poseCascade.js +41 -0
  231. package/dist/canvas/poseCascade.js.map +1 -0
  232. package/dist/canvas/poseRotation.js +9 -23
  233. package/dist/canvas/poseRotation.js.map +1 -1
  234. package/dist/canvas/rasterReadback.js +22 -0
  235. package/dist/canvas/rasterReadback.js.map +1 -0
  236. package/dist/canvas/renderDebugSnapshot.js +11 -11
  237. package/dist/canvas/renderDebugSnapshot.js.map +1 -1
  238. package/dist/canvas/renderNeeds.js +3 -3
  239. package/dist/canvas/renderNeeds.js.map +1 -1
  240. package/dist/canvas/renderSceneToPixels.js +64 -81
  241. package/dist/canvas/renderSceneToPixels.js.map +1 -1
  242. package/dist/canvas/sceneAdapter.js +68 -214
  243. package/dist/canvas/sceneAdapter.js.map +1 -1
  244. package/dist/canvas/sceneClipboard.js +112 -0
  245. package/dist/canvas/sceneClipboard.js.map +1 -0
  246. package/dist/canvas/sceneLayerPaint.js +4 -4
  247. package/dist/canvas/sceneLayerPaint.js.map +1 -1
  248. package/dist/canvas/sceneSlotWiring.js.map +1 -1
  249. package/dist/canvas/sceneViewRender.js +39 -39
  250. package/dist/canvas/sceneViewRender.js.map +1 -1
  251. package/dist/canvas/slopsDebugLayer.js +4 -4
  252. package/dist/canvas/slopsDebugLayer.js.map +1 -1
  253. package/dist/canvas/surface.module.js +6 -0
  254. package/dist/canvas/surface.module.js.map +1 -0
  255. package/dist/canvas/surfaceBox.js +16 -0
  256. package/dist/canvas/surfaceBox.js.map +1 -0
  257. package/dist/canvas/useCanvasRenderer.js +26 -6
  258. package/dist/canvas/useCanvasRenderer.js.map +1 -1
  259. package/dist/canvas/useCanvasSurface.js +31 -0
  260. package/dist/canvas/useCanvasSurface.js.map +1 -0
  261. package/dist/canvas/useCanvasView.js +67 -0
  262. package/dist/canvas/useCanvasView.js.map +1 -0
  263. package/dist/canvas/useFrameLoop.js +39 -31
  264. package/dist/canvas/useFrameLoop.js.map +1 -1
  265. package/dist/canvas/useHostAnchor.js +35 -33
  266. package/dist/canvas/useHostAnchor.js.map +1 -1
  267. package/dist/canvas/useLateContentRedraw.js +8 -8
  268. package/dist/canvas/useLateContentRedraw.js.map +1 -1
  269. package/dist/canvas/useSceneLayerList.js +11 -0
  270. package/dist/canvas/useSceneLayerList.js.map +1 -0
  271. package/dist/canvas/useSurfaceInput.js +42 -0
  272. package/dist/canvas/useSurfaceInput.js.map +1 -0
  273. package/dist/canvas/useToolCursor.js +29 -0
  274. package/dist/canvas/useToolCursor.js.map +1 -0
  275. package/dist/canvas/useViewHelpers.js +46 -85
  276. package/dist/canvas/useViewHelpers.js.map +1 -1
  277. package/dist/canvas/viewInputs.js.map +1 -1
  278. package/dist/canvas/viewRegistry.js +25 -27
  279. package/dist/canvas/viewRegistry.js.map +1 -1
  280. package/dist/canvas/watchElementMove.js +43 -0
  281. package/dist/canvas/watchElementMove.js.map +1 -0
  282. package/dist/canvas/wrapNodeOutput.js.map +1 -1
  283. package/dist/clipboard.d.ts +16 -19
  284. package/dist/{types-B_9g6hMM.d.ts → clone-2a5hVbBd.d.ts} +123 -74
  285. package/dist/clone.d.ts +4 -7
  286. package/dist/clone.js +0 -2
  287. package/dist/core/device/index.js +5 -4
  288. package/dist/core/device/targets.js.map +1 -1
  289. package/dist/core/device/useDeviceProfile.js +38 -44
  290. package/dist/core/device/useDeviceProfile.js.map +1 -1
  291. package/dist/core/device/watchDevicePixelRatio.js +17 -0
  292. package/dist/core/device/watchDevicePixelRatio.js.map +1 -0
  293. package/dist/{interactions/actions/resize → core/geometry}/autoPoseDescriptor.js +8 -7
  294. package/dist/core/geometry/autoPoseDescriptor.js.map +1 -0
  295. package/dist/core/geometry/pathPoseDescriptor.js +88 -0
  296. package/dist/core/geometry/pathPoseDescriptor.js.map +1 -0
  297. package/dist/core/geometry/poseDescriptor.js +68 -19
  298. package/dist/core/geometry/poseDescriptor.js.map +1 -1
  299. package/dist/core/geometry/regionHit.js +31 -34
  300. package/dist/core/geometry/regionHit.js.map +1 -1
  301. package/dist/core/geometry/targetFrame.js +94 -0
  302. package/dist/core/geometry/targetFrame.js.map +1 -0
  303. package/dist/core/geometry/unionBounds.js +30 -29
  304. package/dist/core/geometry/unionBounds.js.map +1 -1
  305. package/dist/core/isPlainObject.js +2 -11
  306. package/dist/core/layers/backgroundFill.js +31 -0
  307. package/dist/core/layers/backgroundFill.js.map +1 -0
  308. package/dist/{features/groups → core/layers}/children.js +1 -1
  309. package/dist/core/layers/children.js.map +1 -0
  310. package/dist/core/layers/gateLayer.js +13 -0
  311. package/dist/core/layers/gateLayer.js.map +1 -0
  312. package/dist/core/layers/layerGroup.js +40 -0
  313. package/dist/core/layers/layerGroup.js.map +1 -0
  314. package/dist/core/layers/render.js +50 -76
  315. package/dist/core/layers/render.js.map +1 -1
  316. package/dist/core/ops/arrange.js +1 -0
  317. package/dist/core/ops/arrange.js.map +1 -1
  318. package/dist/core/ops/create.js +10 -5
  319. package/dist/core/ops/create.js.map +1 -1
  320. package/dist/core/ops/createHistory.js +9 -9
  321. package/dist/core/ops/createHistory.js.map +1 -1
  322. package/dist/core/ops/delete.js +12 -24
  323. package/dist/core/ops/delete.js.map +1 -1
  324. package/dist/core/ops/reorder/index.js +43 -40
  325. package/dist/core/ops/reorder/index.js.map +1 -1
  326. package/dist/core/ops/reorder/setChildOrder.js +34 -0
  327. package/dist/core/ops/reorder/setChildOrder.js.map +1 -0
  328. package/dist/core/paint/meshKind.js +16 -0
  329. package/dist/core/paint/meshKind.js.map +1 -0
  330. package/dist/{features/meshPaint/lazyKind.js → core/paint/meshKindLazy.js} +282 -105
  331. package/dist/core/paint/meshKindLazy.js.map +1 -0
  332. package/dist/core/paint/paintKindEntry.js +8 -0
  333. package/dist/core/paint/paintKindEntry.js.map +1 -0
  334. package/dist/core/paint/paintKinds.js +144 -0
  335. package/dist/core/paint/paintKinds.js.map +1 -0
  336. package/dist/core/paint/registerMesh.js +7 -0
  337. package/dist/core/paint/registerMesh.js.map +1 -0
  338. package/dist/core/scene/NodeProperties.js.map +1 -1
  339. package/dist/core/scene/NodeRouting.js.map +1 -1
  340. package/dist/core/scene/appliedLog.js +37 -0
  341. package/dist/core/scene/appliedLog.js.map +1 -0
  342. package/dist/core/scene/arrivalWindow.js +102 -0
  343. package/dist/core/scene/arrivalWindow.js.map +1 -0
  344. package/dist/core/scene/boundOps.js +40 -0
  345. package/dist/core/scene/boundOps.js.map +1 -0
  346. package/dist/core/scene/composeFrame.js +9 -6
  347. package/dist/core/scene/composeFrame.js.map +1 -1
  348. package/dist/{features/groups → core/scene}/composePose.js +18 -18
  349. package/dist/core/scene/composePose.js.map +1 -0
  350. package/dist/core/scene/depMemo.js +31 -6
  351. package/dist/core/scene/depMemo.js.map +1 -1
  352. package/dist/core/scene/derivedPath.js +19 -20
  353. package/dist/core/scene/derivedPath.js.map +1 -1
  354. package/dist/core/scene/editMode.js +26 -0
  355. package/dist/core/scene/editMode.js.map +1 -0
  356. package/dist/core/scene/effectivePose.js +38 -39
  357. package/dist/core/scene/effectivePose.js.map +1 -1
  358. package/dist/core/scene/fieldEdits.js +98 -0
  359. package/dist/core/scene/fieldEdits.js.map +1 -0
  360. package/dist/core/scene/historyFacade.js +130 -0
  361. package/dist/core/scene/historyFacade.js.map +1 -0
  362. package/dist/core/scene/historyForm.js +6 -0
  363. package/dist/core/scene/historyForm.js.map +1 -0
  364. package/dist/core/scene/kitOps.js +185 -0
  365. package/dist/core/scene/kitOps.js.map +1 -0
  366. package/dist/core/scene/kitRegistry.js.map +1 -1
  367. package/dist/core/scene/layerStack.js +131 -0
  368. package/dist/core/scene/layerStack.js.map +1 -0
  369. package/dist/core/scene/layoutPass.js +58 -59
  370. package/dist/core/scene/layoutPass.js.map +1 -1
  371. package/dist/core/scene/lockGuard.js +37 -0
  372. package/dist/core/scene/lockGuard.js.map +1 -0
  373. package/dist/{features/groups → core/scene}/nestedHit.js +3 -3
  374. package/dist/core/scene/nestedHit.js.map +1 -0
  375. package/dist/core/scene/nodeFnFields.js +10 -11
  376. package/dist/core/scene/nodeFnFields.js.map +1 -1
  377. package/dist/core/scene/nodeMemo.js +45 -19
  378. package/dist/core/scene/nodeMemo.js.map +1 -1
  379. package/dist/core/scene/nodeStore.js +127 -0
  380. package/dist/core/scene/nodeStore.js.map +1 -0
  381. package/dist/core/scene/notifier.js +37 -0
  382. package/dist/core/scene/notifier.js.map +1 -0
  383. package/dist/core/scene/opTable.js +50 -0
  384. package/dist/core/scene/opTable.js.map +1 -0
  385. package/dist/core/scene/outerOps.js +66 -0
  386. package/dist/core/scene/outerOps.js.map +1 -0
  387. package/dist/core/scene/poseFeed.js +38 -38
  388. package/dist/core/scene/poseFeed.js.map +1 -1
  389. package/dist/core/scene/poseHold.js +39 -0
  390. package/dist/core/scene/poseHold.js.map +1 -0
  391. package/dist/core/scene/poseOverrides.js +44 -40
  392. package/dist/core/scene/poseOverrides.js.map +1 -1
  393. package/dist/core/scene/poseSnapshot.js.map +1 -1
  394. package/dist/core/scene/reconcileSpecs.js +3 -2
  395. package/dist/core/scene/reconcileSpecs.js.map +1 -1
  396. package/dist/core/scene/recorder.js +86 -0
  397. package/dist/core/scene/recorder.js.map +1 -0
  398. package/dist/core/scene/renderOrder.js +84 -0
  399. package/dist/core/scene/renderOrder.js.map +1 -0
  400. package/dist/core/scene/scene.js +80 -1266
  401. package/dist/core/scene/scene.js.map +1 -1
  402. package/dist/core/scene/sceneEdits.js +58 -0
  403. package/dist/core/scene/sceneEdits.js.map +1 -0
  404. package/dist/core/scene/sceneMutators.js +49 -0
  405. package/dist/core/scene/sceneMutators.js.map +1 -0
  406. package/dist/core/scene/scenePoseAdapter.js +16 -0
  407. package/dist/core/scene/scenePoseAdapter.js.map +1 -0
  408. package/dist/core/scene/sceneRecording.js +90 -0
  409. package/dist/core/scene/sceneRecording.js.map +1 -0
  410. package/dist/core/scene/sceneSelection.js +28 -0
  411. package/dist/core/scene/sceneSelection.js.map +1 -0
  412. package/dist/core/scene/sceneState.js +49 -0
  413. package/dist/core/scene/sceneState.js.map +1 -0
  414. package/dist/core/scene/serialization.js +71 -0
  415. package/dist/core/scene/serialization.js.map +1 -0
  416. package/dist/core/scene/staleReplay.js +51 -0
  417. package/dist/core/scene/staleReplay.js.map +1 -0
  418. package/dist/core/scene/statedFields.js +9 -0
  419. package/dist/core/scene/statedFields.js.map +1 -0
  420. package/dist/core/scene/treeEdits.js +127 -0
  421. package/dist/core/scene/treeEdits.js.map +1 -0
  422. package/dist/core/scene/treeOrder.js +13 -0
  423. package/dist/core/scene/treeOrder.js.map +1 -0
  424. package/dist/core/scene/treeReads.js +26 -0
  425. package/dist/core/scene/treeReads.js.map +1 -0
  426. package/dist/core/scene/types.js.map +1 -1
  427. package/dist/{features/groups → core/scene}/unionOfChildren.js +3 -3
  428. package/dist/core/scene/unionOfChildren.js.map +1 -0
  429. package/dist/core/scene/unitScopes.js +13 -0
  430. package/dist/core/scene/unitScopes.js.map +1 -0
  431. package/dist/core/scene/useScene.js.map +1 -1
  432. package/dist/core/selection/readOnlySelection.js +32 -0
  433. package/dist/core/selection/readOnlySelection.js.map +1 -0
  434. package/dist/core/selection/usePublishSceneSelection.js +26 -0
  435. package/dist/core/selection/usePublishSceneSelection.js.map +1 -0
  436. package/dist/core/selection/useSelection.js +34 -25
  437. package/dist/core/selection/useSelection.js.map +1 -1
  438. package/dist/core/shapeKinds.js.map +1 -1
  439. package/dist/core/stylus/stylus.js.map +1 -1
  440. package/dist/core/stylus/usePointerStylus.js.map +1 -1
  441. package/dist/core/usePaintKinds.js +1 -1
  442. package/dist/core/usePaintKinds.js.map +1 -1
  443. package/dist/core/viewport/clientToWorld.js.map +1 -1
  444. package/dist/core/viewport/fitViewToBounds.js.map +1 -1
  445. package/dist/core/viewport/parallax.js.map +1 -1
  446. package/dist/core/viewport/screenSlop.js +11 -11
  447. package/dist/core/viewport/screenSlop.js.map +1 -1
  448. package/dist/core/viewport/useCanvasSize.js.map +1 -1
  449. package/dist/core/viewport/useDecayLoop.js +8 -8
  450. package/dist/core/viewport/useDecayLoop.js.map +1 -1
  451. package/dist/core/viewport/useNodeOverlayFrame.js +84 -0
  452. package/dist/core/viewport/useNodeOverlayFrame.js.map +1 -0
  453. package/dist/core/viewport/useViewAnimation.js +102 -43
  454. package/dist/core/viewport/useViewAnimation.js.map +1 -1
  455. package/dist/core/viewport/view.js +9 -9
  456. package/dist/core/viewport/view.js.map +1 -1
  457. package/dist/core/viewport/wheelHandler.js.map +1 -1
  458. package/dist/core/viewport/zoomBounds.js +10 -8
  459. package/dist/core/viewport/zoomBounds.js.map +1 -1
  460. package/dist/{cornerHandles-BCrDp_mH.d.ts → cornerHandles-BEshc4z3.d.ts} +11 -24
  461. package/dist/debug/createDebugOverlayLayer.js +97 -97
  462. package/dist/debug/createDebugOverlayLayer.js.map +1 -1
  463. package/dist/debug/createDebugSink.js.map +1 -1
  464. package/dist/debug/flag.js +2 -41
  465. package/dist/debug/frameStats.js.map +1 -1
  466. package/dist/debug/useDebugSink.js +52 -0
  467. package/dist/debug/useDebugSink.js.map +1 -0
  468. package/dist/features/chrome-caps/buildChromeCtx.js.map +1 -1
  469. package/dist/features/chrome-caps/conditions.js.map +1 -1
  470. package/dist/features/chrome-caps/defaults.js.map +1 -1
  471. package/dist/features/chrome-caps/resolve.js.map +1 -1
  472. package/dist/features/chrome-caps/useChromeCaps.js +54 -0
  473. package/dist/features/chrome-caps/useChromeCaps.js.map +1 -0
  474. package/dist/features/chrome-caps/useHoverTracking.js +22 -17
  475. package/dist/features/chrome-caps/useHoverTracking.js.map +1 -1
  476. package/dist/features/ingestion/contentHandlers.js +28 -19
  477. package/dist/features/ingestion/contentHandlers.js.map +1 -1
  478. package/dist/features/ingestion/imageHandler.js +21 -24
  479. package/dist/features/ingestion/imageHandler.js.map +1 -1
  480. package/dist/features/ingestion/openFilePicker.js.map +1 -1
  481. package/dist/features/ingestion/placement.js +16 -0
  482. package/dist/features/ingestion/placement.js.map +1 -0
  483. package/dist/features/ingestion/registerKitHandlers.js +7 -7
  484. package/dist/features/ingestion/svgHandler.js +5 -0
  485. package/dist/features/ingestion/svgHandler.js.map +1 -1
  486. package/dist/features/ingestion/textHandler.js +28 -0
  487. package/dist/features/ingestion/textHandler.js.map +1 -0
  488. package/dist/features/ingestion/useCanvasIngestion.js +48 -0
  489. package/dist/features/ingestion/useCanvasIngestion.js.map +1 -0
  490. package/dist/features/ingestion/weaselJsonHandler.js +22 -14
  491. package/dist/features/ingestion/weaselJsonHandler.js.map +1 -1
  492. package/dist/features/longPress/longPressFeedback.js.map +1 -1
  493. package/dist/features/modes/modeLayers.js +7 -7
  494. package/dist/features/modes/modeLayers.js.map +1 -1
  495. package/dist/features/paths/editablePath.js +47 -0
  496. package/dist/features/paths/editablePath.js.map +1 -0
  497. package/dist/features/paths/index.js +9 -14
  498. package/dist/features/paths/pathEditState.js +41 -0
  499. package/dist/features/paths/pathEditState.js.map +1 -0
  500. package/dist/features/paths/pathEditingOverlayLayer.js +36 -38
  501. package/dist/features/paths/pathEditingOverlayLayer.js.map +1 -1
  502. package/dist/features/paths/pathLayer.js +3 -2
  503. package/dist/features/paths/pathLayer.js.map +1 -1
  504. package/dist/features/paths/penPreviewLayer.js +86 -88
  505. package/dist/features/paths/penPreviewLayer.js.map +1 -1
  506. package/dist/features/paths/usePathEdit.js +34 -0
  507. package/dist/features/paths/usePathEdit.js.map +1 -0
  508. package/dist/features/poseRun/usePoseRun.js +44 -52
  509. package/dist/features/poseRun/usePoseRun.js.map +1 -1
  510. package/dist/features/selection/overlay.js +171 -179
  511. package/dist/features/selection/overlay.js.map +1 -1
  512. package/dist/features/text/index.js +6 -0
  513. package/dist/features/text/textLayer.js +1 -1
  514. package/dist/features/text/textLayer.js.map +1 -1
  515. package/dist/features/text/useSceneTextEdit.js +100 -93
  516. package/dist/features/text/useSceneTextEdit.js.map +1 -1
  517. package/dist/features/viewports/viewportLayer.js +25 -36
  518. package/dist/features/viewports/viewportLayer.js.map +1 -1
  519. package/dist/index.d.ts +8473 -9141
  520. package/dist/index.js +269 -307
  521. package/dist/input/keyState.js +38 -39
  522. package/dist/input/keyState.js.map +1 -1
  523. package/dist/input/useKeyModifiers.js +11 -0
  524. package/dist/input/useKeyModifiers.js.map +1 -0
  525. package/dist/interactions/actions/actionShortcuts.js.map +1 -1
  526. package/dist/interactions/actions/{defaults/align.js → align/action.js} +18 -20
  527. package/dist/interactions/actions/align/action.js.map +1 -0
  528. package/dist/interactions/actions/align/align.js +20 -20
  529. package/dist/interactions/actions/align/align.js.map +1 -1
  530. package/dist/interactions/actions/booleans/action.js +65 -0
  531. package/dist/interactions/actions/booleans/action.js.map +1 -0
  532. package/dist/interactions/actions/booleans/booleans.js +69 -78
  533. package/dist/interactions/actions/booleans/booleans.js.map +1 -1
  534. package/dist/interactions/actions/booleans/operands.js +40 -0
  535. package/dist/interactions/actions/booleans/operands.js.map +1 -0
  536. package/dist/interactions/actions/booleans/pieces.js +45 -0
  537. package/dist/interactions/actions/booleans/pieces.js.map +1 -0
  538. package/dist/interactions/actions/booleans/placement.js +24 -0
  539. package/dist/interactions/actions/booleans/placement.js.map +1 -0
  540. package/dist/interactions/actions/booleans/useBooleans.js +11 -9
  541. package/dist/interactions/actions/booleans/useBooleans.js.map +1 -1
  542. package/dist/interactions/actions/booleans/useBooleansAdapter.js.map +1 -1
  543. package/dist/interactions/actions/{defaults/clipboard.js → clipboard/action.js} +31 -15
  544. package/dist/interactions/actions/clipboard/action.js.map +1 -0
  545. package/dist/interactions/actions/clipboard/clipboardOps.js +44 -42
  546. package/dist/interactions/actions/clipboard/clipboardOps.js.map +1 -1
  547. package/dist/interactions/actions/clipboard/materializePaste.js +10 -7
  548. package/dist/interactions/actions/clipboard/materializePaste.js.map +1 -1
  549. package/dist/interactions/actions/clipboard/wireFormat.js.map +1 -1
  550. package/dist/interactions/actions/clone/action.js +98 -0
  551. package/dist/interactions/actions/clone/action.js.map +1 -0
  552. package/dist/interactions/actions/clone/behaviors.js +52 -0
  553. package/dist/interactions/actions/clone/behaviors.js.map +1 -0
  554. package/dist/interactions/actions/defaultCommitAdapter.js +7 -32
  555. package/dist/interactions/actions/defaultCommitAdapter.js.map +1 -1
  556. package/dist/interactions/actions/defaults/anchorEditing.js +60 -84
  557. package/dist/interactions/actions/defaults/anchorEditing.js.map +1 -1
  558. package/dist/interactions/actions/defaults/areaSelect.js +35 -38
  559. package/dist/interactions/actions/defaults/areaSelect.js.map +1 -1
  560. package/dist/interactions/actions/defaults/cancelGesture.js.map +1 -1
  561. package/dist/interactions/actions/defaults/clearSelection.js.map +1 -1
  562. package/dist/interactions/actions/defaults/copySubtree.js +40 -0
  563. package/dist/interactions/actions/defaults/copySubtree.js.map +1 -0
  564. package/dist/interactions/actions/defaults/createPaintAction.js.map +1 -1
  565. package/dist/interactions/actions/defaults/delete.js.map +1 -1
  566. package/dist/interactions/actions/defaults/duplicate.js +13 -53
  567. package/dist/interactions/actions/defaults/duplicate.js.map +1 -1
  568. package/dist/interactions/actions/defaults/enterTextEdit.js.map +1 -1
  569. package/dist/interactions/actions/defaults/group.js +40 -50
  570. package/dist/interactions/actions/defaults/group.js.map +1 -1
  571. package/dist/interactions/actions/defaults/icons/booleanIcons.js +24 -1
  572. package/dist/interactions/actions/defaults/icons/booleanIcons.js.map +1 -1
  573. package/dist/interactions/actions/defaults/icons/outlineIcons.js +39 -1
  574. package/dist/interactions/actions/defaults/icons/outlineIcons.js.map +1 -1
  575. package/dist/interactions/actions/defaults/ingest.js +44 -38
  576. package/dist/interactions/actions/defaults/ingest.js.map +1 -1
  577. package/dist/interactions/actions/defaults/insertPathAnchor.js +11 -12
  578. package/dist/interactions/actions/defaults/insertPathAnchor.js.map +1 -1
  579. package/dist/interactions/actions/defaults/nudge.js +40 -69
  580. package/dist/interactions/actions/defaults/nudge.js.map +1 -1
  581. package/dist/interactions/actions/defaults/nudgeSteps.js +37 -0
  582. package/dist/interactions/actions/defaults/nudgeSteps.js.map +1 -0
  583. package/dist/interactions/actions/defaults/pinchZoom.js.map +1 -1
  584. package/dist/interactions/actions/defaults/reorder.js +2 -0
  585. package/dist/interactions/actions/defaults/reorder.js.map +1 -1
  586. package/dist/interactions/actions/defaults/requiresSelection.js.map +1 -1
  587. package/dist/interactions/actions/defaults/setFill.js +14 -8
  588. package/dist/interactions/actions/defaults/setFill.js.map +1 -1
  589. package/dist/interactions/actions/defaults/setFillOpacity.js +7 -4
  590. package/dist/interactions/actions/defaults/setFillOpacity.js.map +1 -1
  591. package/dist/interactions/actions/defaults/setStroke.js +12 -12
  592. package/dist/interactions/actions/defaults/setStroke.js.map +1 -1
  593. package/dist/interactions/actions/defaults/setStrokeOpacity.js +6 -6
  594. package/dist/interactions/actions/defaults/sliceOps.js +8 -10
  595. package/dist/interactions/actions/defaults/sliceOps.js.map +1 -1
  596. package/dist/interactions/actions/defaults/toolActivate.js.map +1 -1
  597. package/dist/interactions/actions/defaults/toolResetToDefault.js.map +1 -1
  598. package/dist/interactions/actions/defaults/viewportDragPan.js +37 -26
  599. package/dist/interactions/actions/defaults/viewportDragPan.js.map +1 -1
  600. package/dist/interactions/actions/defaults/viewportWheelPan.js.map +1 -1
  601. package/dist/interactions/actions/defaults/viewportZoom.js.map +1 -1
  602. package/dist/interactions/actions/distribute/action.js +66 -0
  603. package/dist/interactions/actions/distribute/action.js.map +1 -0
  604. package/dist/interactions/actions/distribute/distribute.js +11 -11
  605. package/dist/interactions/actions/distribute/distribute.js.map +1 -1
  606. package/dist/interactions/actions/{defaults/editAnchors.js → edit-anchors/action.js} +7 -9
  607. package/dist/interactions/actions/edit-anchors/action.js.map +1 -0
  608. package/dist/interactions/actions/edit-anchors/geometry.js +30 -27
  609. package/dist/interactions/actions/edit-anchors/geometry.js.map +1 -1
  610. package/dist/interactions/actions/flip/action.js +124 -0
  611. package/dist/interactions/actions/flip/action.js.map +1 -0
  612. package/dist/interactions/actions/flip/helpers.js +30 -17
  613. package/dist/interactions/actions/flip/helpers.js.map +1 -1
  614. package/dist/interactions/actions/gestureFrames.js +18 -0
  615. package/dist/interactions/actions/gestureFrames.js.map +1 -0
  616. package/dist/interactions/actions/gestureLifecycle.js +47 -20
  617. package/dist/interactions/actions/gestureLifecycle.js.map +1 -1
  618. package/dist/interactions/actions/hitSelection.js +8 -0
  619. package/dist/interactions/actions/hitSelection.js.map +1 -0
  620. package/dist/interactions/actions/insert/action.js +72 -0
  621. package/dist/interactions/actions/insert/action.js.map +1 -0
  622. package/dist/interactions/actions/insert/commit.js +28 -0
  623. package/dist/interactions/actions/insert/commit.js.map +1 -0
  624. package/dist/interactions/actions/insert/extras.js +65 -0
  625. package/dist/interactions/actions/insert/extras.js.map +1 -0
  626. package/dist/interactions/actions/insert/frame.js +48 -0
  627. package/dist/interactions/actions/insert/frame.js.map +1 -0
  628. package/dist/interactions/actions/insert/geometry.js +35 -0
  629. package/dist/interactions/actions/insert/geometry.js.map +1 -0
  630. package/dist/interactions/actions/insert/rotateAction.js +21 -0
  631. package/dist/interactions/actions/insert/rotateAction.js.map +1 -0
  632. package/dist/interactions/actions/insert/session.js +59 -0
  633. package/dist/interactions/actions/insert/session.js.map +1 -0
  634. package/dist/interactions/actions/insert/shape.js +34 -0
  635. package/dist/interactions/actions/insert/shape.js.map +1 -0
  636. package/dist/interactions/actions/lasso-select/action.js +143 -0
  637. package/dist/interactions/actions/lasso-select/action.js.map +1 -0
  638. package/dist/interactions/actions/lasso-select/behaviors/selectFromLasso.js +14 -18
  639. package/dist/interactions/actions/lasso-select/behaviors/selectFromLasso.js.map +1 -1
  640. package/dist/interactions/actions/move/action.js +87 -0
  641. package/dist/interactions/actions/move/action.js.map +1 -0
  642. package/dist/interactions/actions/move/behaviors/layoutDrop.js +51 -0
  643. package/dist/interactions/actions/move/behaviors/layoutDrop.js.map +1 -0
  644. package/dist/interactions/actions/move/behaviors/reparentOnDrop.js +15 -0
  645. package/dist/interactions/actions/move/behaviors/reparentOnDrop.js.map +1 -0
  646. package/dist/interactions/actions/move/behaviors/snapBackOrDelete.js +5 -5
  647. package/dist/interactions/actions/move/behaviors/snapBackOrDelete.js.map +1 -1
  648. package/dist/interactions/actions/move/behaviors/snapToContainer.js +39 -27
  649. package/dist/interactions/actions/move/behaviors/snapToContainer.js.map +1 -1
  650. package/dist/interactions/actions/move/capture.js +99 -0
  651. package/dist/interactions/actions/move/capture.js.map +1 -0
  652. package/dist/interactions/actions/move/commit/index.js +41 -0
  653. package/dist/interactions/actions/move/commit/index.js.map +1 -0
  654. package/dist/interactions/actions/move/commit/layoutDrop.js +44 -0
  655. package/dist/interactions/actions/move/commit/layoutDrop.js.map +1 -0
  656. package/dist/interactions/actions/move/commit/layoutRelease.js +100 -0
  657. package/dist/interactions/actions/move/commit/layoutRelease.js.map +1 -0
  658. package/dist/interactions/actions/move/commit/rebase.js +18 -0
  659. package/dist/interactions/actions/move/commit/rebase.js.map +1 -0
  660. package/dist/interactions/actions/move/commit/reparent.js +65 -0
  661. package/dist/interactions/actions/move/commit/reparent.js.map +1 -0
  662. package/dist/interactions/actions/move/delta.js +51 -0
  663. package/dist/interactions/actions/move/delta.js.map +1 -0
  664. package/dist/interactions/actions/move/frame.js +59 -0
  665. package/dist/interactions/actions/move/frame.js.map +1 -0
  666. package/dist/interactions/actions/move/gestureAdapter.js +22 -30
  667. package/dist/interactions/actions/move/gestureAdapter.js.map +1 -1
  668. package/dist/interactions/actions/move/landedDescendants.js +33 -0
  669. package/dist/interactions/actions/move/landedDescendants.js.map +1 -0
  670. package/dist/interactions/actions/move/layout/container.js +94 -0
  671. package/dist/interactions/actions/move/layout/container.js.map +1 -0
  672. package/dist/interactions/actions/move/layout/dragged.js +58 -0
  673. package/dist/interactions/actions/move/layout/dragged.js.map +1 -0
  674. package/dist/interactions/actions/move/layout/dropPass.js +122 -0
  675. package/dist/interactions/actions/move/layout/dropPass.js.map +1 -0
  676. package/dist/interactions/actions/move/layout/exits.js +38 -0
  677. package/dist/interactions/actions/move/layout/exits.js.map +1 -0
  678. package/dist/interactions/actions/move/layout/glide.js +48 -0
  679. package/dist/interactions/actions/move/layout/glide.js.map +1 -0
  680. package/dist/interactions/actions/move/session.js +63 -0
  681. package/dist/interactions/actions/move/session.js.map +1 -0
  682. package/dist/interactions/actions/move/translate.js +61 -0
  683. package/dist/interactions/actions/move/translate.js.map +1 -0
  684. package/dist/interactions/actions/outlines/createOutlines.js +16 -63
  685. package/dist/interactions/actions/outlines/createOutlines.js.map +1 -1
  686. package/dist/interactions/actions/outlines/createOutlinesAction.js +51 -0
  687. package/dist/interactions/actions/outlines/createOutlinesAction.js.map +1 -0
  688. package/dist/interactions/actions/outlines/outlineStroke.js +72 -0
  689. package/dist/interactions/actions/outlines/outlineStroke.js.map +1 -0
  690. package/dist/interactions/actions/outlines/outlineStrokeAction.js +37 -0
  691. package/dist/interactions/actions/outlines/outlineStrokeAction.js.map +1 -0
  692. package/dist/interactions/actions/outlines/replaceWithPaths.js +54 -0
  693. package/dist/interactions/actions/outlines/replaceWithPaths.js.map +1 -0
  694. package/dist/interactions/actions/outlines/strokeRegion.js +27 -0
  695. package/dist/interactions/actions/outlines/strokeRegion.js.map +1 -0
  696. package/dist/interactions/actions/planeInput.js.map +1 -1
  697. package/dist/interactions/actions/pointerState.js +12 -0
  698. package/dist/interactions/actions/pointerState.js.map +1 -0
  699. package/dist/interactions/actions/poseDescriptorDep.js +16 -4
  700. package/dist/interactions/actions/poseDescriptorDep.js.map +1 -1
  701. package/dist/interactions/actions/poseFrame.js +25 -20
  702. package/dist/interactions/actions/poseFrame.js.map +1 -1
  703. package/dist/interactions/actions/resize/action.js +55 -0
  704. package/dist/interactions/actions/resize/action.js.map +1 -0
  705. package/dist/interactions/actions/resize/behaviors/lockAspect.js.map +1 -1
  706. package/dist/interactions/actions/resize/boxFrame.js +16 -0
  707. package/dist/interactions/actions/resize/boxFrame.js.map +1 -0
  708. package/dist/interactions/actions/resize/capture.js +85 -0
  709. package/dist/interactions/actions/resize/capture.js.map +1 -0
  710. package/dist/interactions/actions/resize/commit.js +69 -0
  711. package/dist/interactions/actions/resize/commit.js.map +1 -0
  712. package/dist/interactions/actions/resize/frame.js +74 -0
  713. package/dist/interactions/actions/resize/frame.js.map +1 -0
  714. package/dist/interactions/actions/resize/pointSnap.js +111 -0
  715. package/dist/interactions/actions/resize/pointSnap.js.map +1 -0
  716. package/dist/interactions/actions/resize/ruleBounds.js +9 -0
  717. package/dist/interactions/actions/resize/ruleBounds.js.map +1 -0
  718. package/dist/interactions/actions/resize/session.js +49 -0
  719. package/dist/interactions/actions/resize/session.js.map +1 -0
  720. package/dist/interactions/actions/resolveOverlays.js.map +1 -1
  721. package/dist/interactions/actions/resolvePreviews.js.map +1 -1
  722. package/dist/interactions/actions/rotate/action.js +56 -0
  723. package/dist/interactions/actions/rotate/action.js.map +1 -0
  724. package/dist/interactions/actions/rotate/behaviors/index.js +7 -0
  725. package/dist/interactions/actions/rotate/behaviors/index.js.map +1 -0
  726. package/dist/interactions/actions/rotate/behaviors/snapRotation.js +12 -0
  727. package/dist/interactions/actions/rotate/behaviors/snapRotation.js.map +1 -0
  728. package/dist/interactions/actions/rotate/commit.js +40 -0
  729. package/dist/interactions/actions/rotate/commit.js.map +1 -0
  730. package/dist/interactions/actions/rotate/frame.js +65 -0
  731. package/dist/interactions/actions/rotate/frame.js.map +1 -0
  732. package/dist/interactions/actions/rotate/handle.js +12 -12
  733. package/dist/interactions/actions/rotate/handle.js.map +1 -1
  734. package/dist/interactions/actions/rotate/session.js +92 -0
  735. package/dist/interactions/actions/rotate/session.js.map +1 -0
  736. package/dist/interactions/actions/selectionSubtree.js +69 -0
  737. package/dist/interactions/actions/selectionSubtree.js.map +1 -0
  738. package/dist/interactions/actions/spatialReference.js.map +1 -1
  739. package/dist/interactions/actions/useStandardActions.js +87 -78
  740. package/dist/interactions/actions/useStandardActions.js.map +1 -1
  741. package/dist/interactions/gestures/dragGesture/dragGesture.js +4 -7
  742. package/dist/interactions/gestures/dragGesture/dragGesture.js.map +1 -1
  743. package/dist/interactions/gestures/dragGesture/dragPointOf.js +23 -0
  744. package/dist/interactions/gestures/dragGesture/dragPointOf.js.map +1 -0
  745. package/dist/interactions/gestures/handleDrag/handleDrag.js +21 -26
  746. package/dist/interactions/gestures/handleDrag/handleDrag.js.map +1 -1
  747. package/dist/interactions/gestures/pointerDrag/pointerDrag.js +62 -41
  748. package/dist/interactions/gestures/pointerDrag/pointerDrag.js.map +1 -1
  749. package/dist/interactions/gestures/shared/originProjection.js +1 -1
  750. package/dist/interactions/gestures/shared/originProjection.js.map +1 -1
  751. package/dist/interactions/gestures/shared/screenTolerance.js +8 -2
  752. package/dist/interactions/gestures/shared/screenTolerance.js.map +1 -1
  753. package/dist/interactions/gestures/shared/snap.js.map +1 -1
  754. package/dist/interactions/gestures/thresholdDrag/thresholdDrag.js +8 -4
  755. package/dist/interactions/gestures/thresholdDrag/thresholdDrag.js.map +1 -1
  756. package/dist/layout/arrivals.js +20 -23
  757. package/dist/layout/arrivals.js.map +1 -1
  758. package/dist/math-CYUjoyyU.d.ts +33 -0
  759. package/dist/math.d.ts +5 -3
  760. package/dist/math.js +6 -6
  761. package/dist/mesh.d.ts +4 -268
  762. package/dist/mesh.js +3 -7
  763. package/dist/move.d.ts +14 -11
  764. package/dist/{originProjection-DEklpDc_.d.ts → originProjection-PPT88jZv.d.ts} +1 -1
  765. package/dist/patterns-builtin.d.ts +1 -118
  766. package/dist/patterns-builtin.js +2 -3
  767. package/dist/{poseDescriptor-D-OH-tu5.d.ts → poseDescriptor-Bqk-11Rl.d.ts} +26 -36
  768. package/dist/renderer.d.ts +1 -91
  769. package/dist/renderer.js +2 -18
  770. package/dist/resize.d.ts +10 -22
  771. package/dist/resize.js +6 -6
  772. package/dist/style.css +1 -1
  773. package/dist/test-hook/install.js +12 -6
  774. package/dist/test-hook/install.js.map +1 -1
  775. package/dist/test-hook/useTestHook.js +22 -0
  776. package/dist/test-hook/useTestHook.js.map +1 -0
  777. package/dist/test-seams-D0pyV3pR.d.ts +149 -0
  778. package/dist/test-seams.d.ts +4 -4
  779. package/dist/test-seams.js +2 -2
  780. package/dist/tools/builtin/bone/boneActions.js +130 -0
  781. package/dist/tools/builtin/bone/boneActions.js.map +1 -0
  782. package/dist/tools/builtin/bone/boneOverlay.js +58 -0
  783. package/dist/tools/builtin/bone/boneOverlay.js.map +1 -0
  784. package/dist/tools/builtin/bone/placedRig.js +24 -0
  785. package/dist/tools/builtin/bone/placedRig.js.map +1 -0
  786. package/dist/tools/builtin/bone/rigEditState.js +21 -0
  787. package/dist/tools/builtin/bone/rigEditState.js.map +1 -0
  788. package/dist/tools/builtin/bone/useBoneTool.js +98 -0
  789. package/dist/tools/builtin/bone/useBoneTool.js.map +1 -0
  790. package/dist/tools/builtin/ellipse/useEllipseTool.js +1 -0
  791. package/dist/tools/builtin/ellipse/useEllipseTool.js.map +1 -1
  792. package/dist/tools/builtin/eyedropper/useEyedropperTool.js.map +1 -1
  793. package/dist/tools/builtin/hand/useHandTool.js +1 -0
  794. package/dist/tools/builtin/hand/useHandTool.js.map +1 -1
  795. package/dist/tools/builtin/image/useImageTool.js.map +1 -1
  796. package/dist/tools/builtin/lasso/useLassoTool.js +11 -11
  797. package/dist/tools/builtin/lasso/useLassoTool.js.map +1 -1
  798. package/dist/tools/builtin/line/useLineTool.js +1 -0
  799. package/dist/tools/builtin/line/useLineTool.js.map +1 -1
  800. package/dist/tools/builtin/pen/usePenTool.js +198 -150
  801. package/dist/tools/builtin/pen/usePenTool.js.map +1 -1
  802. package/dist/tools/builtin/pencil/usePencilTool.js +1 -0
  803. package/dist/tools/builtin/pencil/usePencilTool.js.map +1 -1
  804. package/dist/tools/builtin/pickTopMostHit.js.map +1 -1
  805. package/dist/tools/builtin/polygon/usePolygonTool.js +13 -8
  806. package/dist/tools/builtin/polygon/usePolygonTool.js.map +1 -1
  807. package/dist/tools/builtin/rect/useRectTool.js +1 -0
  808. package/dist/tools/builtin/rect/useRectTool.js.map +1 -1
  809. package/dist/tools/builtin/select/adapterPointQuery.js +36 -0
  810. package/dist/tools/builtin/select/adapterPointQuery.js.map +1 -0
  811. package/dist/tools/builtin/select/selectionContributions.js +25 -24
  812. package/dist/tools/builtin/select/selectionContributions.js.map +1 -1
  813. package/dist/tools/builtin/select/useSelectTool.js +42 -67
  814. package/dist/tools/builtin/select/useSelectTool.js.map +1 -1
  815. package/dist/tools/builtin/shared/pointerFollower.js +17 -0
  816. package/dist/tools/builtin/shared/pointerFollower.js.map +1 -0
  817. package/dist/tools/builtin/slice/useSliceTool.js +72 -82
  818. package/dist/tools/builtin/slice/useSliceTool.js.map +1 -1
  819. package/dist/tools/builtin/star/useStarTool.js +22 -16
  820. package/dist/tools/builtin/star/useStarTool.js.map +1 -1
  821. package/dist/tools/builtin/text/useTextTool.js +9 -0
  822. package/dist/tools/builtin/text/useTextTool.js.map +1 -1
  823. package/dist/tools/builtin/weight/useWeightTool.js +77 -0
  824. package/dist/tools/builtin/weight/useWeightTool.js.map +1 -0
  825. package/dist/tools/builtin/weight/weightActions.js +112 -0
  826. package/dist/tools/builtin/weight/weightActions.js.map +1 -0
  827. package/dist/tools/builtin/weight/weightOverlay.js +61 -0
  828. package/dist/tools/builtin/weight/weightOverlay.js.map +1 -0
  829. package/dist/tools/overlayBinding.js.map +1 -1
  830. package/dist/tools/useKeybindings.js +12 -22
  831. package/dist/tools/useKeybindings.js.map +1 -1
  832. package/dist/{types-A37hYkeR.d.ts → types-CIKDwlsP.d.ts} +113 -169
  833. package/dist/util/color.js +3 -3
  834. package/dist/util/color.js.map +1 -1
  835. package/dist/util/paint.js +1 -1
  836. package/dist/util/paint.js.map +1 -1
  837. package/dist/version.js +1 -1
  838. package/package.json +28 -21
  839. package/dist/animation/colorHelpers.js +0 -135
  840. package/dist/animation/colorHelpers.js.map +0 -1
  841. package/dist/animation/colorRegistry.js +0 -37
  842. package/dist/animation/colorRegistry.js.map +0 -1
  843. package/dist/animation/engine/axes.js +0 -36
  844. package/dist/animation/engine/axes.js.map +0 -1
  845. package/dist/animation/engine/codec.js +0 -170
  846. package/dist/animation/engine/codec.js.map +0 -1
  847. package/dist/animation/engine/integrator.js +0 -12
  848. package/dist/animation/engine/integrator.js.map +0 -1
  849. package/dist/animation/loop.js +0 -62
  850. package/dist/animation/loop.js.map +0 -1
  851. package/dist/animation/observe.js +0 -23
  852. package/dist/animation/observe.js.map +0 -1
  853. package/dist/animation/rig/blendPoses.js +0 -43
  854. package/dist/animation/rig/blendPoses.js.map +0 -1
  855. package/dist/animation/rig/mirrorPose.js +0 -19
  856. package/dist/animation/rig/mirrorPose.js.map +0 -1
  857. package/dist/animation/rig/resolveSkeleton.js +0 -33
  858. package/dist/animation/rig/resolveSkeleton.js.map +0 -1
  859. package/dist/animation/rig/solveIk.js +0 -103
  860. package/dist/animation/rig/solveIk.js.map +0 -1
  861. package/dist/animation/rig/types.js +0 -12
  862. package/dist/animation/rig/types.js.map +0 -1
  863. package/dist/animation/slew.js +0 -27
  864. package/dist/animation/slew.js.map +0 -1
  865. package/dist/animation/stagger.js +0 -138
  866. package/dist/animation/stagger.js.map +0 -1
  867. package/dist/animation/timeline/booking.js +0 -106
  868. package/dist/animation/timeline/booking.js.map +0 -1
  869. package/dist/animation/timeline/createTimeline.js +0 -116
  870. package/dist/animation/timeline/createTimeline.js.map +0 -1
  871. package/dist/animation/timeline/sampleTrack.js +0 -71
  872. package/dist/animation/timeline/sampleTrack.js.map +0 -1
  873. package/dist/animation/useAnimator.js +0 -378
  874. package/dist/animation/useAnimator.js.map +0 -1
  875. package/dist/builtins-C-VgUlWI.d.ts +0 -4514
  876. package/dist/canvas/MinimapCanvas.js +0 -139
  877. package/dist/canvas/MinimapCanvas.js.map +0 -1
  878. package/dist/canvas/deps/poseComposition.js +0 -11
  879. package/dist/canvas/deps/poseComposition.js.map +0 -1
  880. package/dist/canvas/minimapMath.js +0 -80
  881. package/dist/canvas/minimapMath.js.map +0 -1
  882. package/dist/canvas/toolPreview.js +0 -39
  883. package/dist/canvas/toolPreview.js.map +0 -1
  884. package/dist/core/adapters/arrayAdapter.js +0 -85
  885. package/dist/core/adapters/arrayAdapter.js.map +0 -1
  886. package/dist/core/adapters/useArrayAdapter.js +0 -13
  887. package/dist/core/adapters/useArrayAdapter.js.map +0 -1
  888. package/dist/core/fillInPoseFrame.js +0 -102
  889. package/dist/core/fillInPoseFrame.js.map +0 -1
  890. package/dist/core/geometry/poseRotation.js +0 -58
  891. package/dist/core/geometry/poseRotation.js.map +0 -1
  892. package/dist/core/gradient.js +0 -136
  893. package/dist/core/gradient.js.map +0 -1
  894. package/dist/core/isPlainObject.js.map +0 -1
  895. package/dist/core/markerInset.js +0 -24
  896. package/dist/core/markerInset.js.map +0 -1
  897. package/dist/core/mixed.js +0 -6
  898. package/dist/core/mixed.js.map +0 -1
  899. package/dist/core/paintKinds.js +0 -156
  900. package/dist/core/paintKinds.js.map +0 -1
  901. package/dist/core/strokeMarkerShapes.js +0 -139
  902. package/dist/core/strokeMarkerShapes.js.map +0 -1
  903. package/dist/core/strokeMarkers.js +0 -28
  904. package/dist/core/strokeMarkers.js.map +0 -1
  905. package/dist/core/viewport/meanScale.js +0 -8
  906. package/dist/core/viewport/meanScale.js.map +0 -1
  907. package/dist/core/viewport/pxExtent.js +0 -42
  908. package/dist/core/viewport/pxExtent.js.map +0 -1
  909. package/dist/debug/flag.js.map +0 -1
  910. package/dist/features/cursor/paintedCursorLayer.js.map +0 -1
  911. package/dist/features/focus/gateLayer.js +0 -14
  912. package/dist/features/focus/gateLayer.js.map +0 -1
  913. package/dist/features/focus/useCanvasFocus.js +0 -29
  914. package/dist/features/focus/useCanvasFocus.js.map +0 -1
  915. package/dist/features/groups/children.js.map +0 -1
  916. package/dist/features/groups/composePose.js.map +0 -1
  917. package/dist/features/groups/nestedHit.js.map +0 -1
  918. package/dist/features/groups/unionOfChildren.js.map +0 -1
  919. package/dist/features/images/imageCache.js +0 -94
  920. package/dist/features/images/imageCache.js.map +0 -1
  921. package/dist/features/ingestion/index.js +0 -8
  922. package/dist/features/meshPaint/bake.js +0 -79
  923. package/dist/features/meshPaint/bake.js.map +0 -1
  924. package/dist/features/meshPaint/bakeCache.js +0 -59
  925. package/dist/features/meshPaint/bakeCache.js.map +0 -1
  926. package/dist/features/meshPaint/handles.js +0 -86
  927. package/dist/features/meshPaint/handles.js.map +0 -1
  928. package/dist/features/meshPaint/lazyKind.js.map +0 -1
  929. package/dist/features/meshPaint/meshPaint.js +0 -236
  930. package/dist/features/meshPaint/meshPaint.js.map +0 -1
  931. package/dist/features/meshPaint/meshShader.js +0 -6
  932. package/dist/features/meshPaint/meshShader.js.map +0 -1
  933. package/dist/features/meshPaint/register.js +0 -7
  934. package/dist/features/meshPaint/register.js.map +0 -1
  935. package/dist/features/meshPaint/surface.js +0 -110
  936. package/dist/features/meshPaint/surface.js.map +0 -1
  937. package/dist/features/minimap/actions.js +0 -53
  938. package/dist/features/minimap/actions.js.map +0 -1
  939. package/dist/features/minimap/createMinimapContribution.js +0 -96
  940. package/dist/features/minimap/createMinimapContribution.js.map +0 -1
  941. package/dist/features/minimap/layers.js +0 -103
  942. package/dist/features/minimap/layers.js.map +0 -1
  943. package/dist/features/overlays/useNodeOverlayFrame.js +0 -103
  944. package/dist/features/overlays/useNodeOverlayFrame.js.map +0 -1
  945. package/dist/features/parallax/createParallaxLayer.js +0 -26
  946. package/dist/features/parallax/createParallaxLayer.js.map +0 -1
  947. package/dist/features/parallax/createParallaxPlane.js +0 -26
  948. package/dist/features/parallax/createParallaxPlane.js.map +0 -1
  949. package/dist/features/paths/anchorEdits.js +0 -156
  950. package/dist/features/paths/anchorEdits.js.map +0 -1
  951. package/dist/features/paths/anchors.js +0 -154
  952. package/dist/features/paths/anchors.js.map +0 -1
  953. package/dist/features/paths/booleans.js +0 -2
  954. package/dist/features/paths/markerCommands.js +0 -148
  955. package/dist/features/paths/markerCommands.js.map +0 -1
  956. package/dist/features/paths/markerSites.js +0 -59
  957. package/dist/features/paths/markerSites.js.map +0 -1
  958. package/dist/features/paths/markers.js +0 -95
  959. package/dist/features/paths/markers.js.map +0 -1
  960. package/dist/features/paths/nearestAnchor.js +0 -36
  961. package/dist/features/paths/nearestAnchor.js.map +0 -1
  962. package/dist/features/paths/pathInWorld.js +0 -41
  963. package/dist/features/paths/pathInWorld.js.map +0 -1
  964. package/dist/features/paths/poseDescriptor.js +0 -39
  965. package/dist/features/paths/poseDescriptor.js.map +0 -1
  966. package/dist/features/paths/tessellate/dash.js +0 -52
  967. package/dist/features/paths/tessellate/dash.js.map +0 -1
  968. package/dist/features/paths/tessellate/insets.js +0 -32
  969. package/dist/features/paths/tessellate/insets.js.map +0 -1
  970. package/dist/features/paths/tessellate/metric.js +0 -72
  971. package/dist/features/paths/tessellate/metric.js.map +0 -1
  972. package/dist/features/paths/tessellate/stroke.js +0 -170
  973. package/dist/features/paths/tessellate/stroke.js.map +0 -1
  974. package/dist/features/paths/tessellate/vertexWidths.js +0 -32
  975. package/dist/features/paths/tessellate/vertexWidths.js.map +0 -1
  976. package/dist/features/patterns/index.js +0 -23
  977. package/dist/features/patterns/index.js.map +0 -1
  978. package/dist/features/patterns/patterns-builtin.js +0 -38
  979. package/dist/features/patterns/patterns-builtin.js.map +0 -1
  980. package/dist/features/patterns/resolveSpec.js +0 -57
  981. package/dist/features/patterns/resolveSpec.js.map +0 -1
  982. package/dist/features/patterns/tileGeometry.js +0 -158
  983. package/dist/features/patterns/tileGeometry.js.map +0 -1
  984. package/dist/features/pointer/PointerContext.js +0 -45
  985. package/dist/features/pointer/PointerContext.js.map +0 -1
  986. package/dist/features/selection/SelectionContext.js +0 -46
  987. package/dist/features/selection/SelectionContext.js.map +0 -1
  988. package/dist/features/simulation/createSimulation.js +0 -61
  989. package/dist/features/simulation/createSimulation.js.map +0 -1
  990. package/dist/features/simulation/types.js +0 -6
  991. package/dist/features/simulation/types.js.map +0 -1
  992. package/dist/features/simulation/useSimulation.js +0 -74
  993. package/dist/features/simulation/useSimulation.js.map +0 -1
  994. package/dist/features/text/domRuns.js +0 -258
  995. package/dist/features/text/domRuns.js.map +0 -1
  996. package/dist/features/text/fitTextPose.js +0 -38
  997. package/dist/features/text/fitTextPose.js.map +0 -1
  998. package/dist/features/text/hitTest.js +0 -45
  999. package/dist/features/text/hitTest.js.map +0 -1
  1000. package/dist/features/text/renderLabel.js +0 -14
  1001. package/dist/features/text/renderLabel.js.map +0 -1
  1002. package/dist/features/text/runs/effectiveRangeStyle.js +0 -66
  1003. package/dist/features/text/runs/effectiveRangeStyle.js.map +0 -1
  1004. package/dist/features/text/runs/flagRange.js +0 -53
  1005. package/dist/features/text/runs/flagRange.js.map +0 -1
  1006. package/dist/features/text/runs/rangeStyle.js +0 -135
  1007. package/dist/features/text/runs/rangeStyle.js.map +0 -1
  1008. package/dist/features/text/textCommand.js +0 -59
  1009. package/dist/features/text/textCommand.js.map +0 -1
  1010. package/dist/features/text/textToPath.js +0 -181
  1011. package/dist/features/text/textToPath.js.map +0 -1
  1012. package/dist/features/text/useTextEdit.js +0 -467
  1013. package/dist/features/text/useTextEdit.js.map +0 -1
  1014. package/dist/features/tiling/createTiledLayer.js +0 -63
  1015. package/dist/features/tiling/createTiledLayer.js.map +0 -1
  1016. package/dist/features/tiling/tiledProject.js +0 -14
  1017. package/dist/features/tiling/tiledProject.js.map +0 -1
  1018. package/dist/interactions/actions/clone/behaviors/cloneByAltDrag.js +0 -26
  1019. package/dist/interactions/actions/clone/behaviors/cloneByAltDrag.js.map +0 -1
  1020. package/dist/interactions/actions/defaults/align.js.map +0 -1
  1021. package/dist/interactions/actions/defaults/booleans.js +0 -52
  1022. package/dist/interactions/actions/defaults/booleans.js.map +0 -1
  1023. package/dist/interactions/actions/defaults/clipboard.js.map +0 -1
  1024. package/dist/interactions/actions/defaults/clone.js +0 -107
  1025. package/dist/interactions/actions/defaults/clone.js.map +0 -1
  1026. package/dist/interactions/actions/defaults/createOutlines.js +0 -47
  1027. package/dist/interactions/actions/defaults/createOutlines.js.map +0 -1
  1028. package/dist/interactions/actions/defaults/distribute.js +0 -66
  1029. package/dist/interactions/actions/defaults/distribute.js.map +0 -1
  1030. package/dist/interactions/actions/defaults/editAnchors.js.map +0 -1
  1031. package/dist/interactions/actions/defaults/flip.js +0 -119
  1032. package/dist/interactions/actions/defaults/flip.js.map +0 -1
  1033. package/dist/interactions/actions/defaults/freshNodeId.js +0 -10
  1034. package/dist/interactions/actions/defaults/freshNodeId.js.map +0 -1
  1035. package/dist/interactions/actions/defaults/insert.js +0 -288
  1036. package/dist/interactions/actions/defaults/insert.js.map +0 -1
  1037. package/dist/interactions/actions/defaults/lassoSelect.js +0 -156
  1038. package/dist/interactions/actions/defaults/lassoSelect.js.map +0 -1
  1039. package/dist/interactions/actions/defaults/move.js +0 -760
  1040. package/dist/interactions/actions/defaults/move.js.map +0 -1
  1041. package/dist/interactions/actions/defaults/resize.js +0 -335
  1042. package/dist/interactions/actions/defaults/resize.js.map +0 -1
  1043. package/dist/interactions/actions/defaults/rotate.js +0 -184
  1044. package/dist/interactions/actions/defaults/rotate.js.map +0 -1
  1045. package/dist/interactions/actions/previewOverrides.js +0 -25
  1046. package/dist/interactions/actions/previewOverrides.js.map +0 -1
  1047. package/dist/interactions/actions/resize/autoPoseDescriptor.js.map +0 -1
  1048. package/dist/math-Drrw4ewZ.d.ts +0 -160
  1049. package/dist/registerProgram-BMZRDgrh.d.ts +0 -197
  1050. package/dist/renderer/DrawCommand.js +0 -6
  1051. package/dist/renderer/DrawCommand.js.map +0 -1
  1052. package/dist/renderer/WeaselRenderer.js +0 -331
  1053. package/dist/renderer/WeaselRenderer.js.map +0 -1
  1054. package/dist/renderer/batchClip.js +0 -46
  1055. package/dist/renderer/batchClip.js.map +0 -1
  1056. package/dist/renderer/cache/GLImageCache.js +0 -64
  1057. package/dist/renderer/cache/GLImageCache.js.map +0 -1
  1058. package/dist/renderer/cache/GLMeshCache.js +0 -102
  1059. package/dist/renderer/cache/GLMeshCache.js.map +0 -1
  1060. package/dist/renderer/cache/GLTextureCache.js +0 -51
  1061. package/dist/renderer/cache/GLTextureCache.js.map +0 -1
  1062. package/dist/renderer/cache/GradientRampAtlas.js +0 -82
  1063. package/dist/renderer/cache/GradientRampAtlas.js.map +0 -1
  1064. package/dist/renderer/cache/cache.js +0 -13
  1065. package/dist/renderer/cache/cache.js.map +0 -1
  1066. package/dist/renderer/cache/markerCommandCache.js +0 -63
  1067. package/dist/renderer/cache/markerCommandCache.js.map +0 -1
  1068. package/dist/renderer/cache/outlineMeshCache.js +0 -15
  1069. package/dist/renderer/cache/outlineMeshCache.js.map +0 -1
  1070. package/dist/renderer/cache/outlineStrokeMeshCache.js +0 -36
  1071. package/dist/renderer/cache/outlineStrokeMeshCache.js.map +0 -1
  1072. package/dist/renderer/cache/strokeMeshCache.js +0 -55
  1073. package/dist/renderer/cache/strokeMeshCache.js.map +0 -1
  1074. package/dist/renderer/cullDrawCommands.js +0 -90
  1075. package/dist/renderer/cullDrawCommands.js.map +0 -1
  1076. package/dist/renderer/draw.js +0 -1135
  1077. package/dist/renderer/draw.js.map +0 -1
  1078. package/dist/renderer/drawBatch.js +0 -198
  1079. package/dist/renderer/drawBatch.js.map +0 -1
  1080. package/dist/renderer/effects/EffectTargets.js +0 -45
  1081. package/dist/renderer/effects/EffectTargets.js.map +0 -1
  1082. package/dist/renderer/effects/builtins.js +0 -31
  1083. package/dist/renderer/effects/builtins.js.map +0 -1
  1084. package/dist/renderer/effects/composite.js +0 -9
  1085. package/dist/renderer/effects/composite.js.map +0 -1
  1086. package/dist/renderer/effects/effectPrelude.js +0 -10
  1087. package/dist/renderer/effects/effectPrelude.js.map +0 -1
  1088. package/dist/renderer/effects/types.js +0 -10
  1089. package/dist/renderer/effects/types.js.map +0 -1
  1090. package/dist/renderer/glyphOutlineMesh.js +0 -67
  1091. package/dist/renderer/glyphOutlineMesh.js.map +0 -1
  1092. package/dist/renderer/index.js +0 -19
  1093. package/dist/renderer/math/color.js +0 -341
  1094. package/dist/renderer/math/color.js.map +0 -1
  1095. package/dist/renderer/math/mat3.js +0 -76
  1096. package/dist/renderer/math/mat3.js.map +0 -1
  1097. package/dist/renderer/math/patternSpace.js +0 -22
  1098. package/dist/renderer/math/patternSpace.js.map +0 -1
  1099. package/dist/renderer/math/viewToMat3.js +0 -19
  1100. package/dist/renderer/math/viewToMat3.js.map +0 -1
  1101. package/dist/renderer/paintResources.js +0 -18
  1102. package/dist/renderer/paintResources.js.map +0 -1
  1103. package/dist/renderer/paintScratch.js +0 -37
  1104. package/dist/renderer/paintScratch.js.map +0 -1
  1105. package/dist/renderer/shaders/ShaderProgram.js +0 -74
  1106. package/dist/renderer/shaders/ShaderProgram.js.map +0 -1
  1107. package/dist/renderer/shaders/batchFill.js +0 -119
  1108. package/dist/renderer/shaders/batchFill.js.map +0 -1
  1109. package/dist/renderer/shaders/customPrelude.js +0 -34
  1110. package/dist/renderer/shaders/customPrelude.js.map +0 -1
  1111. package/dist/renderer/shaders/extractUniformNames.js +0 -184
  1112. package/dist/renderer/shaders/extractUniformNames.js.map +0 -1
  1113. package/dist/renderer/shaders/glyphPaint.js +0 -61
  1114. package/dist/renderer/shaders/glyphPaint.js.map +0 -1
  1115. package/dist/renderer/shaders/gradFill.js +0 -30
  1116. package/dist/renderer/shaders/gradFill.js.map +0 -1
  1117. package/dist/renderer/shaders/imageFill.js +0 -14
  1118. package/dist/renderer/shaders/imageFill.js.map +0 -1
  1119. package/dist/renderer/shaders/pathFill.js +0 -13
  1120. package/dist/renderer/shaders/pathFill.js.map +0 -1
  1121. package/dist/renderer/shaders/patternFill.js +0 -24
  1122. package/dist/renderer/shaders/patternFill.js.map +0 -1
  1123. package/dist/renderer/shaders/registerProgram.js +0 -18
  1124. package/dist/renderer/shaders/registerProgram.js.map +0 -1
  1125. package/dist/renderer/spriteSheet.js +0 -14
  1126. package/dist/renderer/spriteSheet.js.map +0 -1
  1127. package/dist/renderer/state/GroupState.js +0 -77
  1128. package/dist/renderer/state/GroupState.js.map +0 -1
  1129. package/dist/renderer/strokeLengths.js +0 -50
  1130. package/dist/renderer/strokeLengths.js.map +0 -1
  1131. package/dist/renderer/syntheticItalic.js +0 -6
  1132. package/dist/renderer/syntheticItalic.js.map +0 -1
  1133. package/dist/renderer/textures/registerTexture.js +0 -14
  1134. package/dist/renderer/textures/registerTexture.js.map +0 -1
  1135. package/dist/scheduling/useVisibleRaf.js +0 -69
  1136. package/dist/scheduling/useVisibleRaf.js.map +0 -1
  1137. package/dist/test-seams-CuIxe0xY.d.ts +0 -356
  1138. package/dist/tools/prefs.js +0 -62
  1139. package/dist/tools/prefs.js.map +0 -1
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@weasel-js/core",
3
- "version": "1.9.3",
4
- "description": "Domain-agnostic 2D scene graph primitives for React: viewport math, drag/resize/insert/clone interactions, layered canvas rendering.",
3
+ "version": "1.10.0",
4
+ "description": "A 2D scene-graph engine for React, rendered on WebGL2: the scene tree, viewport math, pointer and keyboard input, layered rendering, and op-based undo.",
5
5
  "license": "MIT",
6
6
  "author": "orochi235",
7
7
  "homepage": "https://orochi235.github.io/weasel/",
@@ -15,10 +15,11 @@
15
15
  },
16
16
  "type": "module",
17
17
  "sideEffects": [
18
+ "*.css",
18
19
  "./src/import-shims/mesh.ts",
19
- "./src/features/meshPaint/register.ts",
20
+ "./src/core/paint/registerMesh.ts",
20
21
  "./dist/mesh.js",
21
- "./dist/features/meshPaint/register.js"
22
+ "./dist/core/paint/registerMesh.js"
22
23
  ],
23
24
  "engines": {
24
25
  "node": ">=22"
@@ -81,27 +82,33 @@
81
82
  "./package.json": "./package.json"
82
83
  },
83
84
  "scripts": {
84
- "build": "vite build && tsup",
85
+ "build": "vite build && tsup && node ../labkit/scripts/build-css.mjs --if-built",
85
86
  "typecheck": "tsc --noEmit -p tsconfig.json"
86
87
  },
87
88
  "peerDependencies": {
88
- "@weasel-js/font": "1.9.3",
89
+ "@weasel-js/font": "1.10.0",
89
90
  "react": ">=18"
90
91
  },
91
92
  "dependencies": {
92
- "@msb235/blits": "0.7.0",
93
- "@weasel-js/cursor": "1.9.3",
94
- "@weasel-js/geom": "1.9.3",
95
- "@weasel-js/gestures": "1.9.3",
96
- "@weasel-js/history": "1.9.3",
97
- "@weasel-js/modes": "1.9.3",
98
- "@weasel-js/quantity": "1.9.3",
99
- "@weasel-js/paint": "1.9.3",
100
- "@weasel-js/react": "1.9.3",
101
- "@weasel-js/registry": "1.9.3",
102
- "@weasel-js/routing": "1.9.3",
103
- "@weasel-js/select": "1.9.3",
104
- "@weasel-js/text": "1.9.3",
93
+ "@msb235/blits": "0.10.0",
94
+ "@weasel-js/animator": "1.10.0",
95
+ "@weasel-js/cursor": "1.10.0",
96
+ "@weasel-js/geom": "1.10.0",
97
+ "@weasel-js/gestures": "1.10.0",
98
+ "@weasel-js/history": "1.10.0",
99
+ "@weasel-js/modes": "1.10.0",
100
+ "@weasel-js/paint": "1.10.0",
101
+ "@weasel-js/prefs": "1.10.0",
102
+ "@weasel-js/quantity": "1.10.0",
103
+ "@weasel-js/react": "1.10.0",
104
+ "@weasel-js/registry": "1.10.0",
105
+ "@weasel-js/renderer": "1.10.0",
106
+ "@weasel-js/routing": "1.10.0",
107
+ "@weasel-js/select": "1.10.0",
108
+ "@weasel-js/simulation": "1.10.0",
109
+ "@weasel-js/stroke": "1.10.0",
110
+ "@weasel-js/text": "1.10.0",
111
+ "@weasel-js/text-dom": "1.10.0",
105
112
  "earcut": "3.2.3",
106
113
  "polygon-clipping": "^0.15.7"
107
114
  },
@@ -119,7 +126,7 @@
119
126
  "2d"
120
127
  ],
121
128
  "devDependencies": {
122
- "@weasel-js/modes": "1.9.3",
123
- "@weasel-js/theme": "1.9.3"
129
+ "@weasel-js/modes": "1.10.0",
130
+ "@weasel-js/theme": "1.10.0"
124
131
  }
125
132
  }
@@ -1,135 +0,0 @@
1
- import { hslToRgb as e } from "../renderer/math/color.js";
2
- import { lerpColorArray as t } from "@weasel-js/paint";
3
- import { linear as n, resolveEasing as r } from "@weasel-js/geom";
4
- //#region src/animation/colorHelpers.ts
5
- function i(e, t) {
6
- if (e.length !== t.length) throw Error(`vertex colors: length mismatch (from=${e.length}, to=${t.length})`);
7
- if (e.length === 0 || e.length % 4 != 0) throw Error(`vertex colors: length ${e.length} must be a positive multiple of 4`);
8
- }
9
- function a(e) {
10
- if (e.interpolate) return e.interpolate;
11
- let n = e.interpolation ?? "rgb";
12
- return (e, r, i) => t(e, r, i, n);
13
- }
14
- var o = (e, t) => `colors:${e}:${t}`;
15
- function s(e, t) {
16
- i(t.from, t.to);
17
- let n = a(t), { id: r, channel: s } = t;
18
- return e.tween({
19
- from: 0,
20
- to: 1,
21
- ms: t.ms,
22
- easing: t.easing,
23
- cancelKey: o(r, s),
24
- interpolate: (e, t, n) => e + (t - e) * n,
25
- onTick: (i) => {
26
- e.colorOverrides.set(r, s, n(t.from, t.to, i));
27
- },
28
- onDone: () => {
29
- e.colorOverrides.clear(r, s), t.onDone?.();
30
- }
31
- });
32
- }
33
- function c(e, t) {
34
- i(t.from, t.to);
35
- let n = a(t), { id: r, channel: s } = t;
36
- return e.spring({
37
- from: 0,
38
- to: 1,
39
- preset: t.preset,
40
- stiffness: t.stiffness,
41
- damping: t.damping,
42
- mass: t.mass,
43
- cancelKey: o(r, s),
44
- interpolate: (e, t, n) => e + (t - e) * n,
45
- onTick: (i) => {
46
- let a = Math.max(0, Math.min(1, i));
47
- e.colorOverrides.set(r, s, n(t.from, t.to, a));
48
- },
49
- onDone: () => {
50
- e.colorOverrides.clear(r, s), t.onDone?.();
51
- }
52
- });
53
- }
54
- function l(e, t) {
55
- let n = a(t), { id: i, channel: o } = t, s = t.direction ?? 1, c = r(t.easing);
56
- e.colorOverrides.set(i, o, (e, r) => {
57
- let i = e.length / 4;
58
- if (i === 0) return e.slice();
59
- let a = r / t.msPerCycle * i * s / i, o = a - Math.floor(a), l = c(o), u = ((Math.floor(a) + l) * i % i + i) % i, d = Math.floor(u), f = u - d, p = Array(e.length);
60
- for (let t = 0; t < i; t++) {
61
- let r = (t + d) % i * 4, a = (t + d + 1) % i * 4, o = [
62
- e[r],
63
- e[r + 1],
64
- e[r + 2],
65
- e[r + 3]
66
- ], s = [
67
- e[a],
68
- e[a + 1],
69
- e[a + 2],
70
- e[a + 3]
71
- ], c = n(o, s, f), l = t * 4;
72
- p[l] = c[0], p[l + 1] = c[1], p[l + 2] = c[2], p[l + 3] = c[3];
73
- }
74
- return p;
75
- });
76
- let l = e.keepAlive();
77
- return { cancel() {
78
- e.colorOverrides.clear(i, o), l();
79
- } };
80
- }
81
- function u(e, t) {
82
- i(t.from, t.to);
83
- let s = a(t), { id: c, channel: l, from: u, to: d, anchorMs: f, perAnchorDelay: p } = t, m = u.length / 4, h = r(t.easing), g = t.origin === "last" ? m - 1 : typeof t.origin == "number" ? Math.max(0, Math.min(m - 1, t.origin)) : 0, _ = Math.max(g, m - 1 - g) * p + f, v = (e) => {
84
- let t = Array(u.length);
85
- for (let n = 0; n < m; n++) {
86
- let r = Math.abs(n - g) * p, i = Math.max(0, Math.min(1, (e - r) / f)), a = h(i), o = n * 4, c = [
87
- u[o],
88
- u[o + 1],
89
- u[o + 2],
90
- u[o + 3]
91
- ], l = [
92
- d[o],
93
- d[o + 1],
94
- d[o + 2],
95
- d[o + 3]
96
- ], m = s(c, l, a);
97
- t[o] = m[0], t[o + 1] = m[1], t[o + 2] = m[2], t[o + 3] = m[3];
98
- }
99
- return t;
100
- };
101
- return e.colorOverrides.set(c, l, v(0)), e.tween({
102
- from: 0,
103
- to: 1,
104
- ms: _,
105
- easing: n,
106
- cancelKey: o(c, l),
107
- interpolate: (e, t, n) => e + (t - e) * n,
108
- onTick: (t) => {
109
- e.colorOverrides.set(c, l, v(t * _));
110
- },
111
- onDone: () => {
112
- e.colorOverrides.clear(c, l), t.onDone?.();
113
- }
114
- });
115
- }
116
- function d(e, t = {}) {
117
- let n = t.saturation ?? .8, r = t.lightness ?? .6, i = t.alpha ?? 1, a = [];
118
- for (let t = 0; t < e; t++) {
119
- let [o, s, c] = p(t * 360 / Math.max(1, e), n, r);
120
- a.push(o, s, c, i);
121
- }
122
- return a;
123
- }
124
- function f(e, t, n, r, i = 1) {
125
- let a = [];
126
- for (let o = 0; o < e; o++) a.push(t, n, r, i);
127
- return a;
128
- }
129
- function p(t, n, r) {
130
- return e(t, n, r);
131
- }
132
- //#endregion
133
- export { l as cycleVertexColors, d as rainbowVertexColors, f as solidVertexColors, c as springVertexColors, u as staggerVertexColors, s as tweenVertexColors };
134
-
135
- //# sourceMappingURL=colorHelpers.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"colorHelpers.js","names":["validateLengths","from","to","resolveInterpolator","opts","space","lerpColorArray","a","b","t","cancelKeyFor","id","channel","tweenVertexColors","interp","animator","springVertexColors","clamped","cycleVertexColors","direction","easing","resolveEasing","n","base","cycles","tMs","cycleFrac","easedFrac","phase","phaseInt","phaseFrac","out","i","aIdx","bIdx","blended","k","releaseKeepAlive","staggerVertexColors","originIndex","totalMs","perAnchorDelay","anchorMs","colorsAt","startMs","localT","elapsedMs","eased","fSlice","tSlice","linear","rainbowVertexColors","saturation","lightness","alpha","r","g","hslToRgbUnit","solidVertexColors","hslToRgb","h","s","l"],"sources":["../../src/animation/colorHelpers.ts"],"sourcesContent":["import { linear, resolveEasing } from '@weasel-js/geom';\nimport type {\n AnimationHandle,\n Animator,\n EasingSpec,\n SpringPresetName,\n} from './types';\nimport type { VertexColorChannel } from './colorRegistry';\nimport { lerpColorArray, type ColorSpace } from '@weasel-js/paint';\nimport { hslToRgb } from '../renderer/math/color';\n\n/**\n * Color interpolator: receives two flat RGBA float arrays (values in\n * 0..1, the renderer's color space — same shape as\n * `stroke.vertexColors`) and a normalized progress `t` in 0..1.\n * Returns the same-length blended array, also in 0..1 floats. Override\n * the default per-channel lerp via `TweenVertexColorsOptions.interpolate`\n * when a custom color-space or shaping is needed.\n */\nexport type ColorInterpolate = (\n from: readonly number[],\n to: readonly number[],\n t: number,\n) => number[];\n\n/** Options for `tweenVertexColors`. */\nexport interface TweenVertexColorsOptions {\n id: string;\n channel: VertexColorChannel;\n /** Per-anchor RGBA, flat, in 0..1 floats (matches the renderer's\n * `stroke.vertexColors` / `PathDrawCommand.vertexColors` color space).\n * Length must equal `from.length`. */\n to: readonly number[];\n /** Per-anchor RGBA, flat, in 0..1 floats. Length must equal `to.length`\n * and be a positive multiple of 4. */\n from: readonly number[];\n ms: number;\n easing?: EasingSpec;\n interpolation?: ColorSpace;\n interpolate?: ColorInterpolate;\n onDone?: () => void;\n}\n\nfunction validateLengths(from: readonly number[], to: readonly number[]): void {\n if (from.length !== to.length) {\n throw new Error(\n `vertex colors: length mismatch (from=${from.length}, to=${to.length})`,\n );\n }\n if (from.length === 0 || from.length % 4 !== 0) {\n throw new Error(\n `vertex colors: length ${from.length} must be a positive multiple of 4`,\n );\n }\n}\n\nfunction resolveInterpolator(\n opts: { interpolation?: ColorSpace; interpolate?: ColorInterpolate },\n): ColorInterpolate {\n if (opts.interpolate) return opts.interpolate;\n const space: ColorSpace = opts.interpolation ?? 'rgb';\n return (a, b, t) => lerpColorArray(a, b, t, space);\n}\n\nconst cancelKeyFor = (id: string, channel: VertexColorChannel): string =>\n `colors:${id}:${channel}`;\n\n/**\n * Animate one node's per-anchor colors from `from` to `to` over `ms`.\n *\n * The colors are published to the animator's `colorOverrides` registry rather\n * than written into the scene, so nothing is recorded in history and the\n * node's own data is untouched; the override is dropped when the animation\n * finishes. Starting another color animation on the same node and channel\n * cancels this one.\n */\nexport function tweenVertexColors(\n animator: Animator,\n opts: TweenVertexColorsOptions,\n): AnimationHandle {\n validateLengths(opts.from, opts.to);\n const interp = resolveInterpolator(opts);\n const { id, channel } = opts;\n return animator.tween<number>({\n from: 0,\n to: 1,\n ms: opts.ms,\n easing: opts.easing,\n cancelKey: cancelKeyFor(id, channel),\n interpolate: (a, b, t) => a + (b - a) * t,\n onTick: (t) => {\n animator.colorOverrides.set(id, channel, interp(opts.from, opts.to, t));\n },\n onDone: () => {\n animator.colorOverrides.clear(id, channel);\n opts.onDone?.();\n },\n });\n}\n\n/** Options for `springVertexColors`. */\nexport interface SpringVertexColorsOptions {\n id: string;\n channel: VertexColorChannel;\n /** Per-anchor RGBA in 0..1 floats. See `TweenVertexColorsOptions.to`. */\n to: readonly number[];\n /** Per-anchor RGBA in 0..1 floats. See `TweenVertexColorsOptions.from`. */\n from: readonly number[];\n preset?: SpringPresetName;\n stiffness?: number;\n damping?: number;\n mass?: number;\n interpolation?: ColorSpace;\n interpolate?: ColorInterpolate;\n onDone?: () => void;\n}\n\n/** `tweenVertexColors` driven by a spring instead of a duration. Same override\n * semantics. */\nexport function springVertexColors(\n animator: Animator,\n opts: SpringVertexColorsOptions,\n): AnimationHandle {\n validateLengths(opts.from, opts.to);\n const interp = resolveInterpolator(opts);\n const { id, channel } = opts;\n return animator.spring<number>({\n from: 0,\n to: 1,\n preset: opts.preset,\n stiffness: opts.stiffness,\n damping: opts.damping,\n mass: opts.mass,\n cancelKey: cancelKeyFor(id, channel),\n interpolate: (a, b, t) => a + (b - a) * t,\n onTick: (t) => {\n const clamped = Math.max(0, Math.min(1, t));\n animator.colorOverrides.set(id, channel, interp(opts.from, opts.to, clamped));\n },\n onDone: () => {\n animator.colorOverrides.clear(id, channel);\n opts.onDone?.();\n },\n });\n}\n\n/** Options for `cycleVertexColors`. */\nexport interface CycleVertexColorsOptions {\n id: string;\n channel: VertexColorChannel;\n msPerCycle: number;\n direction?: 1 | -1;\n easing?: EasingSpec;\n interpolation?: ColorSpace;\n /** Custom interpolator. Receives two RGBA arrays in 0..1 floats and a\n * progress `t` in 0..1; returns the blended array in 0..1 floats. */\n interpolate?: ColorInterpolate;\n}\n\n/** Removes an installed color cycle. Unlike the other color helpers this is\n * not an `AnimationHandle`, because a cycle has no progress to pause or\n * scale — it only ends. */\nexport interface CycleHandle {\n cancel(): void;\n}\n\n/** Register a function override that phase-rotates the base color array\n * along the path index. Returns a handle whose `cancel()` removes the\n * override.\n *\n * The override computes its value purely from `performance.now()`, so\n * there's no per-frame progress to register with the animator's tick\n * loop. To keep the loop alive (so `<SceneCanvas animator>`'s onTick\n * subscription continues firing redraws while the cycle is installed),\n * cycleVertexColors holds an `animator.keepAlive()` entry for the\n * lifetime of the cycle; `cancel()` releases it. */\nexport function cycleVertexColors(\n animator: Animator,\n opts: CycleVertexColorsOptions,\n): CycleHandle {\n const interp = resolveInterpolator(opts);\n const { id, channel } = opts;\n const direction = opts.direction ?? 1;\n const easing = resolveEasing(opts.easing);\n\n const override = (base: readonly number[], tMs: number): number[] => {\n const n = base.length / 4;\n if (n === 0) return base.slice();\n const raw = (tMs / opts.msPerCycle) * n * direction;\n const cycles = raw / n;\n const cycleFrac = cycles - Math.floor(cycles);\n const easedFrac = easing(cycleFrac);\n const easedRaw = (Math.floor(cycles) + easedFrac) * n;\n const phase = ((easedRaw % n) + n) % n;\n const phaseInt = Math.floor(phase);\n const phaseFrac = phase - phaseInt;\n\n const out = new Array<number>(base.length);\n for (let i = 0; i < n; i++) {\n const aIdx = ((i + phaseInt) % n) * 4;\n const bIdx = ((i + phaseInt + 1) % n) * 4;\n const a = [base[aIdx], base[aIdx + 1], base[aIdx + 2], base[aIdx + 3]];\n const b = [base[bIdx], base[bIdx + 1], base[bIdx + 2], base[bIdx + 3]];\n const blended = interp(a, b, phaseFrac);\n const k = i * 4;\n out[k] = blended[0];\n out[k + 1] = blended[1];\n out[k + 2] = blended[2];\n out[k + 3] = blended[3];\n }\n return out;\n };\n\n animator.colorOverrides.set(id, channel, override);\n // Cycle's \"value\" is a function of wall-clock time, not a tween-style\n // progress. We don't register a per-frame ticking animation, so without\n // an explicit keep-alive entry the animator's RAF loop would idle and\n // SceneCanvas's onTick redraw subscription would never fire. Keep the\n // loop running until cancel().\n const releaseKeepAlive = animator.keepAlive();\n\n return {\n cancel(): void {\n animator.colorOverrides.clear(id, channel);\n releaseKeepAlive();\n },\n };\n}\n\n/** Options for `staggerVertexColors`. `origin` picks which anchor the wave\n * starts from and `perAnchorDelay` how far behind each successive anchor\n * runs. */\nexport interface StaggerVertexColorsOptions {\n id: string;\n channel: VertexColorChannel;\n /** Per-anchor RGBA in 0..1 floats. See `TweenVertexColorsOptions.to`. */\n to: readonly number[];\n /** Per-anchor RGBA in 0..1 floats. See `TweenVertexColorsOptions.from`. */\n from: readonly number[];\n anchorMs: number;\n perAnchorDelay: number;\n origin?: 'first' | 'last' | number;\n easing?: EasingSpec;\n interpolation?: ColorSpace;\n interpolate?: ColorInterpolate;\n onDone?: () => void;\n}\n\n/** Run the same color change across a node's anchors as a wave, each anchor\n * starting later than the one before it. Same override semantics as\n * `tweenVertexColors`. */\nexport function staggerVertexColors(\n animator: Animator,\n opts: StaggerVertexColorsOptions,\n): AnimationHandle {\n validateLengths(opts.from, opts.to);\n const interp = resolveInterpolator(opts);\n const { id, channel, from, to, anchorMs, perAnchorDelay } = opts;\n const n = from.length / 4;\n const easing = resolveEasing(opts.easing);\n\n const originIndex =\n opts.origin === 'last' ? n - 1 :\n typeof opts.origin === 'number' ? Math.max(0, Math.min(n - 1, opts.origin)) :\n 0;\n\n const maxDistance = Math.max(originIndex, n - 1 - originIndex);\n const totalMs = maxDistance * perAnchorDelay + anchorMs;\n\n const colorsAt = (elapsedMs: number): number[] => {\n const out = new Array<number>(from.length);\n for (let i = 0; i < n; i++) {\n const distance = Math.abs(i - originIndex);\n const startMs = distance * perAnchorDelay;\n const localT = Math.max(0, Math.min(1, (elapsedMs - startMs) / anchorMs));\n const eased = easing(localT);\n const k = i * 4;\n const fSlice = [from[k], from[k + 1], from[k + 2], from[k + 3]];\n const tSlice = [to[k], to[k + 1], to[k + 2], to[k + 3]];\n const blended = interp(fSlice, tSlice, eased);\n out[k] = blended[0];\n out[k + 1] = blended[1];\n out[k + 2] = blended[2];\n out[k + 3] = blended[3];\n }\n return out;\n };\n\n // A plain array, not a function override: painters call those with their\n // own clock (`performance.now()`), not time since this stagger began.\n animator.colorOverrides.set(id, channel, colorsAt(0));\n\n return animator.tween<number>({\n from: 0,\n to: 1,\n ms: totalMs,\n easing: linear,\n cancelKey: cancelKeyFor(id, channel),\n interpolate: (a, b, t) => a + (b - a) * t,\n onTick: (t) => {\n animator.colorOverrides.set(id, channel, colorsAt(t * totalMs));\n },\n onDone: () => {\n animator.colorOverrides.clear(id, channel);\n opts.onDone?.();\n },\n });\n}\n\n// ─── Color-array constructors ───────────────────────────────────────\n//\n// Helpers that build the per-anchor RGBA arrays the tween/cycle/stagger\n// helpers above (and `stroke.vertexColors` on draw commands) consume.\n// Values are in the 0..1 range the renderer expects — emitting bytes\n// (0..255) clamps every channel to 1.0 on the GPU and renders white.\n\n/** Build an n-anchor rainbow RGBA array sweeping the hue wheel. The\n * output is suitable to pass directly into `stroke.vertexColors`,\n * `tweenVertexColors({ from: rainbowVertexColors(n) })`, or any\n * other API that wants per-anchor color floats. */\nexport function rainbowVertexColors(\n n: number,\n opts: { saturation?: number; lightness?: number; alpha?: number } = {},\n): number[] {\n const saturation = opts.saturation ?? 0.8;\n const lightness = opts.lightness ?? 0.6;\n const alpha = opts.alpha ?? 1;\n const out: number[] = [];\n for (let i = 0; i < n; i++) {\n const h = (i * 360) / Math.max(1, n);\n const [r, g, b] = hslToRgbUnit(h, saturation, lightness);\n out.push(r, g, b, alpha);\n }\n return out;\n}\n\n/** Build an n-anchor solid RGBA array. Shorthand for\n * `[r, g, b, a, r, g, b, a, …]` — the array a `tweenVertexColors`\n * `to`-target typically needs. */\nexport function solidVertexColors(\n n: number,\n r: number,\n g: number,\n b: number,\n a = 1,\n): number[] {\n const out: number[] = [];\n for (let i = 0; i < n; i++) out.push(r, g, b, a);\n return out;\n}\n\n/** HSL → RGB in 0..1 (hue in degrees). Delegates to the single internal\n * implementation in `renderer/math/color.ts` so there's only one HSL→RGB\n * formula in the package. Kept local so consumers building hue-cycled\n * color arrays via `huesweepVertexColors` don't have to roll their own. */\nfunction hslToRgbUnit(h: number, s: number, l: number): [number, number, number] {\n return hslToRgb(h, s, l);\n}\n"],"mappings":"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"}
@@ -1,37 +0,0 @@
1
- //#region src/animation/colorRegistry.ts
2
- var e = class {
3
- map = /* @__PURE__ */ new Map();
4
- _version = 0;
5
- set(e, t, n) {
6
- let r = this.map.get(e);
7
- r || (r = {}, this.map.set(e, r)), r[t] = n, this._version++;
8
- }
9
- clear(e, t) {
10
- let n = this.map.get(e);
11
- n && t in n && (delete n[t], !n.fill && !n.stroke && this.map.delete(e), this._version++);
12
- }
13
- clearAll() {
14
- this.map.size !== 0 && (this.map.clear(), this._version++);
15
- }
16
- get(e, t) {
17
- return this.map.get(e)?.[t];
18
- }
19
- has(e) {
20
- return this.map.has(e);
21
- }
22
- resolve(e, t, n, r) {
23
- let i = this.get(e, t);
24
- if (i === void 0) return n;
25
- if (typeof i != "function") return i;
26
- if (n === void 0) return;
27
- let a = i(n, r);
28
- return a.length === n.length ? a : n;
29
- }
30
- version() {
31
- return this._version;
32
- }
33
- };
34
- //#endregion
35
- export { e as ColorOverrideRegistry };
36
-
37
- //# sourceMappingURL=colorRegistry.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"colorRegistry.js","names":["ColorOverrideRegistry","entry","id","channel","override","base","result","tMs"],"sources":["../../src/animation/colorRegistry.ts"],"sourcesContent":["/** Which of a node's two per-anchor color arrays an override applies to. */\nexport type VertexColorChannel = 'fill' | 'stroke';\n\n/** Function-form override: receives the consumer-supplied base color\n * array and the current animation timestamp (ms, from the animator's\n * clock). Returns a flat RGBA float array (values in 0..1, matching\n * the renderer's `stroke.vertexColors` / `PathDrawCommand.vertexColors`\n * color space) of the same length as `base`. */\nexport type ColorOverrideFn = (base: readonly number[], tMs: number) => number[];\n\n/** Either a static per-anchor RGBA float array (0..1) or a function-form\n * override (see {@link ColorOverrideFn}). */\nexport type ColorOverride = readonly number[] | ColorOverrideFn;\n\ninterface NodeOverrides {\n fill?: ColorOverride;\n stroke?: ColorOverride;\n}\n\n/** Per-node, per-channel store of color overrides. Attached to `useAnimator` as\n * `animator.colorOverrides`; painted onto scene nodes by `<SceneCanvas animator>`\n * and onto a `createPathLayer`'s nodes by its `colorOverrides` option. */\nexport class ColorOverrideRegistry {\n private readonly map = new Map<string, NodeOverrides>();\n private _version = 0;\n\n set(id: string, channel: VertexColorChannel, override: ColorOverride): void {\n let entry = this.map.get(id);\n if (!entry) {\n entry = {};\n this.map.set(id, entry);\n }\n entry[channel] = override;\n this._version++;\n }\n\n clear(id: string, channel: VertexColorChannel): void {\n const entry = this.map.get(id);\n if (!entry) return;\n if (!(channel in entry)) return;\n delete entry[channel];\n if (!entry.fill && !entry.stroke) this.map.delete(id);\n this._version++;\n }\n\n clearAll(): void {\n if (this.map.size === 0) return;\n this.map.clear();\n this._version++;\n }\n\n get(id: string, channel: VertexColorChannel): ColorOverride | undefined {\n return this.map.get(id)?.[channel];\n }\n\n /** Whether anything overrides `id`, on either channel. */\n has(id: string): boolean {\n return this.map.has(id);\n }\n\n /**\n * The colors to paint on `id`'s `channel`, given the colors the painter would\n * otherwise paint and the frame's timestamp. A function override needs that\n * `base` and must return an array of its length; failing either, `base`\n * stands.\n */\n resolve(\n id: string,\n channel: VertexColorChannel,\n base: readonly number[] | undefined,\n tMs: number,\n ): readonly number[] | undefined {\n const override = this.get(id, channel);\n if (override === undefined) return base;\n if (typeof override !== 'function') return override;\n if (base === undefined) return undefined;\n const result = override(base, tMs);\n return result.length === base.length ? result : base;\n }\n\n version(): number {\n return this._version;\n }\n}\n"],"mappings":";AAsBA,IAAaA,IAAb,MAAmC;CACjC,sBAAuB,IAAI,IAA2B;CACtD,WAAmB;CAEnB,IAAI,GAAY,GAA6B,GAA+B;EAC1E,IAAIC,IAAQ,KAAK,IAAI,IAAIC,CAAE;EAM3B,AALKD,MACH,IAAQ,CAAC,GACT,KAAK,IAAI,IAAIC,GAAID,CAAK,IAExB,EAAME,KAAWC,GACjB,KAAK;CACP;CAEA,MAAM,GAAY,GAAmC;EACnD,IAAMH,IAAQ,KAAK,IAAI,IAAIC,CAAE;EAC7B,AAAKD,KACCE,KAAWF,MACjB,OAAOA,EAAME,IACT,CAACF,EAAM,QAAQ,CAACA,EAAM,UAAQ,KAAK,IAAI,OAAOC,CAAE,GACpD,KAAK;CACP;CAEA,WAAiB;EACf,AAAI,KAAK,IAAI,SAAS,MACtB,KAAK,IAAI,MAAM,GACf,KAAK;CACP;CAEA,IAAI,GAAY,GAAwD;EACtE,OAAO,KAAK,IAAI,IAAIA,CAAE,CAAC,GAAGC;CAC5B;CAGA,IAAI,GAAqB;EACvB,OAAO,KAAK,IAAI,IAAID,CAAE;CACxB;CAQA,QACE,GACA,GACA,GACA,GAC+B;EAC/B,IAAME,IAAW,KAAK,IAAIF,GAAIC,CAAO;EACrC,IAAIC,MAAa,KAAA,GAAW,OAAOC;EACnC,IAAI,OAAOD,KAAa,YAAY,OAAOA;EAC3C,IAAIC,MAAS,KAAA,GAAW;EACxB,IAAMC,IAASF,EAASC,GAAME,CAAG;EACjC,OAAOD,EAAO,WAAWD,EAAK,SAASC,IAASD;CAClD;CAEA,UAAkB;EAChB,OAAO,KAAK;CACd;AACF"}
@@ -1,36 +0,0 @@
1
- import { isPlainObject as e } from "../../core/isPlainObject.js";
2
- //#region src/animation/engine/axes.ts
3
- function t(t) {
4
- if (typeof t == "number") return {
5
- count: 1,
6
- shape: "number",
7
- to: (e) => [e],
8
- from: (e, t = 0) => e[t]
9
- };
10
- if (Array.isArray(t)) return t.every((e) => typeof e == "number") ? {
11
- count: t.length,
12
- shape: `array:${t.length}`,
13
- to: (e) => e.slice(),
14
- from: (e, n = 0) => {
15
- let r = Array(t.length);
16
- for (let t = 0; t < r.length; t++) r[t] = e[n + t];
17
- return r;
18
- }
19
- } : null;
20
- if (!e(t)) return null;
21
- let n = Object.keys(t).sort();
22
- return n.length === 0 || !n.every((e) => typeof t[e] == "number") ? null : {
23
- count: n.length,
24
- shape: `object:${JSON.stringify(n)}`,
25
- to: (e) => n.map((t) => e[t]),
26
- from: (e, t = 0) => {
27
- let r = {};
28
- for (let i = 0; i < n.length; i++) r[n[i]] = e[t + i];
29
- return r;
30
- }
31
- };
32
- }
33
- //#endregion
34
- export { t as axesOf };
35
-
36
- //# sourceMappingURL=axes.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"axes.js","names":["axesOf","sample","v","a","at","x","out","i","isPlainObject","keys","k"],"sources":["../../../src/animation/engine/axes.ts"],"sourcesContent":["import { isPlainObject } from '../../core/isPlainObject';\n\n/** How a value maps to the flat numbers blits moves, and back. */\nexport interface Axes<T> {\n count: number;\n /** Equal for two values exactly when their axes line up one for one. */\n shape: string;\n to(v: T): number[];\n /** The value whose `count` axes start at `at` in `a`. */\n from(a: ArrayLike<number>, at?: number): T;\n}\n\n/** The axes of `sample`'s shape: a number, a plain array of numbers, or a plain object whose\n * fields are all numbers. Null for any other shape, which blits cannot move. */\nexport function axesOf<T>(sample: T): Axes<T> | null {\n if (typeof sample === 'number') {\n return { count: 1, shape: 'number', to: (v) => [v as number], from: (a, at = 0) => a[at] as T };\n }\n if (Array.isArray(sample)) {\n if (!sample.every((x) => typeof x === 'number')) return null;\n return {\n count: sample.length,\n shape: `array:${sample.length}`,\n to: (v) => (v as number[]).slice(),\n from: (a, at = 0) => {\n const out = new Array<number>(sample.length);\n for (let i = 0; i < out.length; i++) out[i] = a[at + i]!;\n return out as T;\n },\n };\n }\n if (!isPlainObject(sample)) return null;\n const keys = Object.keys(sample).sort();\n if (keys.length === 0 || !keys.every((k) => typeof sample[k] === 'number')) return null;\n return {\n count: keys.length,\n shape: `object:${JSON.stringify(keys)}`,\n to: (v) => keys.map((k) => (v as Record<string, number>)[k]!),\n from: (a, at = 0) => {\n const out: Record<string, number> = {};\n for (let i = 0; i < keys.length; i++) out[keys[i]!] = a[at + i]!;\n return out as T;\n },\n };\n}\n"],"mappings":";;AAcA,SAAgBA,EAAU,GAA2B;CACnD,IAAI,OAAOC,KAAW,UACpB,OAAO;EAAE,OAAO;EAAG,OAAO;EAAU,KAAK,MAAM,CAACC,CAAW;EAAG,OAAO,GAAG,IAAK,MAAMC,EAAEC;CAAS;CAEhG,IAAI,MAAM,QAAQH,CAAM,GAEtB,OADKA,EAAO,OAAO,MAAM,OAAOI,KAAM,QAAQ,IACvC;EACL,OAAOJ,EAAO;EACd,OAAO,SAASA,EAAO;EACvB,KAAK,MAAOC,EAAe,MAAM;EACjC,OAAO,GAAG,IAAK,MAAM;GACnB,IAAMI,IAAU,MAAcL,EAAO,MAAM;GAC3C,KAAK,IAAIM,IAAI,GAAGA,IAAID,EAAI,QAAQ,KAAK,EAAIC,KAAKJ,EAAEC,IAAKG;GACrD,OAAOD;EACT;CACF,IAVwD;CAY1D,IAAI,CAACE,EAAcP,CAAM,GAAG,OAAO;CACnC,IAAMQ,IAAO,OAAO,KAAKR,CAAM,CAAC,CAAC,KAAK;CAEtC,OADIQ,EAAK,WAAW,KAAK,CAACA,EAAK,OAAO,MAAM,OAAOR,EAAOS,MAAO,QAAQ,IAAU,OAC5E;EACL,OAAOD,EAAK;EACZ,OAAO,UAAU,KAAK,UAAUA,CAAI;EACpC,KAAK,MAAMA,EAAK,KAAK,MAAOP,EAA6BQ,EAAG;EAC5D,OAAO,GAAG,IAAK,MAAM;GACnB,IAAMJ,IAA8B,CAAC;GACrC,KAAK,IAAI,IAAI,GAAG,IAAIG,EAAK,QAAQ,KAAK,EAAIA,EAAK,MAAON,EAAEC,IAAK;GAC7D,OAAOE;EACT;CACF;AACF"}
@@ -1,170 +0,0 @@
1
- import { glide as e, kit as t, mix as n, spring as r, sum as i, tween as a, vec as o } from "@msb235/blits";
2
- //#region src/animation/engine/codec.ts
3
- function s() {
4
- let s = /* @__PURE__ */ new Map(), c = /* @__PURE__ */ new Map(), l = [], u = 0, d = (e) => {
5
- let r = s.get(e);
6
- if (!r) {
7
- let a = n(t({ v: o(e, i()) }));
8
- a.sync(u), r = {
9
- axes: e,
10
- mix: a,
11
- ids: [],
12
- subs: [],
13
- pending: /* @__PURE__ */ new Set(),
14
- dirty: !1,
15
- idle: 0,
16
- cols: { v: /* @__PURE__ */ new Float64Array() }
17
- }, s.set(e, r);
18
- }
19
- return r;
20
- }, f = (e, t) => {
21
- e.slot = -1, e.cols = e.held, e.at = 0, e.lane.pending.add(t), e.lane.dirty = !0;
22
- }, p = (e, t) => {
23
- let n = e.lane;
24
- if (n.dirty = !0, e.slot < 0) {
25
- n.pending.delete(t);
26
- return;
27
- }
28
- let r = n.ids.pop(), i = n.subs.pop();
29
- if (r === t) return;
30
- let a = n.axes, o = n.ids.length * a;
31
- n.cols.v.copyWithin(e.slot * a, o, o + a), n.ids[e.slot] = r, n.subs[e.slot] = i, i.slot = e.slot, i.at = e.slot * a;
32
- }, m = (e) => {
33
- let t = e.ids.slice(), n = e.subs;
34
- for (let r of e.pending) {
35
- let i = c.get(r);
36
- i.slot = t.length, i.at = i.slot * e.axes, i.cols = e.cols.v, t.push(r), n.push(i);
37
- }
38
- if (e.pending.clear(), e.ids = t, e.cols.v.length !== t.length * e.axes) {
39
- e.cols = { v: new Float64Array(t.length * e.axes) };
40
- for (let t of n) t.cols = e.cols.v;
41
- }
42
- e.dirty = !1;
43
- }, h = (t, n, i) => {
44
- let a = i.to == null ? e("v", {
45
- from: i.from,
46
- ms: 1e3 * i.mass / i.damping
47
- }) : r("v", {
48
- from: i.from,
49
- to: i.from,
50
- stiffness: i.stiffness,
51
- damping: i.damping,
52
- mass: i.mass
53
- }), o = t.mix.cue({
54
- patch: a,
55
- subjects: [n]
56
- });
57
- return i.to && a.to(n, i.to, 0), a.push(n, i.velocity, 0), {
58
- handle: o,
59
- patch: a
60
- };
61
- }, g = (e) => {
62
- let t = c.get(e);
63
- if (!t) throw Error(`codec: no subject ${e}`);
64
- return t;
65
- }, _ = (e, t) => e.patch.read(t) ?? {
66
- value: e.spring.from.slice(),
67
- velocity: e.spring.velocity.slice()
68
- };
69
- function v(e) {
70
- let t = c.get(e);
71
- t && (t.queued ? t.queued = void 0 : (t.handle.fade({ over: 0 }), t.lane.mix.drop(e)), p(t, e), c.delete(e));
72
- }
73
- return {
74
- frame(e) {
75
- for (let e of l) {
76
- let t = e.queued;
77
- if (!t) continue;
78
- e.queued = void 0;
79
- let n = a("v", {
80
- from: t.from.slice(),
81
- to: t.from.slice(),
82
- ms: t.ms,
83
- ease: t.ease
84
- });
85
- e.handle = e.lane.mix.cue({
86
- patch: n,
87
- subjects: [t.id]
88
- }), e.patch = n, n.to(t.id, t.to.slice(), 0), e.queuedRate !== void 0 && (e.handle.rate = e.queuedRate);
89
- }
90
- l.length = 0, u += e;
91
- for (let e of s.values()) {
92
- if (e.dirty && m(e), e.ids.length === 0 && ++e.idle >= 2) {
93
- s.delete(e.axes);
94
- continue;
95
- }
96
- e.mix.sync(u), e.ids.length !== 0 && (e.idle = 0, e.mix.pull(e.ids, e.cols));
97
- }
98
- },
99
- tween(e) {
100
- if (e.to.length !== e.from.length) throw Error(`codec: tween ${e.id} goes from ${e.from.length} axes to ${e.to.length}`);
101
- let t = d(e.from.length), n = Float64Array.from(e.from), r = {
102
- kind: "tween",
103
- lane: t,
104
- slot: -1,
105
- held: n,
106
- cols: n,
107
- at: 0,
108
- queued: e
109
- };
110
- return c.set(e.id, r), f(r, e.id), l.push(r), r;
111
- },
112
- spring(e) {
113
- let t = {
114
- ...e,
115
- from: e.from.slice(),
116
- to: e.to && e.to.slice(),
117
- velocity: e.velocity.slice()
118
- }, n = d(t.axes), { handle: r, patch: i } = h(n, e.id, t), a = Float64Array.from(t.from), o = {
119
- kind: "spring",
120
- lane: n,
121
- handle: r,
122
- patch: i,
123
- spring: t,
124
- slot: -1,
125
- held: a,
126
- cols: a,
127
- at: 0
128
- };
129
- c.set(e.id, o), f(o, e.id);
130
- let s = e.id;
131
- return o.motion = () => _(o, s), o;
132
- },
133
- retarget(e, t) {
134
- let n = g(e);
135
- if (n.kind === "tween") throw Error(`codec: subject ${e} is a tween; tweens are not retargeted`);
136
- let r = n.spring;
137
- if (t == null == (r.to == null)) {
138
- if (!t) return;
139
- r.to = t.slice(), n.patch.to(e, r.to);
140
- return;
141
- }
142
- let i = _(n, e), a = n.handle.rate, o = {
143
- ...r,
144
- to: t && t.slice(),
145
- from: i.value,
146
- velocity: i.velocity
147
- };
148
- n.handle.fade({ over: 0 });
149
- let { handle: s, patch: c } = h(n.lane, e, o);
150
- s.rate = a, n.handle = s, n.patch = c, n.spring = o;
151
- },
152
- push(e, t) {
153
- let n = g(e);
154
- n.spring && !n.patch.read(e) && (n.spring.velocity = t.slice()), n.patch.push?.(e, t);
155
- },
156
- rate(e, t) {
157
- let n = g(e);
158
- n.queued ? n.queuedRate = t : n.handle.rate = t;
159
- },
160
- stop: v,
161
- has: (e) => c.has(e),
162
- voiceCount() {
163
- return c.size;
164
- }
165
- };
166
- }
167
- //#endregion
168
- export { s as createCodec };
169
-
170
- //# sourceMappingURL=codec.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"codec.js","names":["springPatch","tweenPatch","createCodec","lanes","subjects","queue","time","laneOf","l","axes","m","mix","kit","vec","sum","join","s","id","depart","last","moved","n","from","rebuild","ids","subs","springVoice","patch","sp","glide","spring","handle","get","current","stop","sub","q","tween","dtMs","held","to","now","rate","next","velocity"],"sources":["../../../src/animation/engine/codec.ts"],"sourcesContent":["import {\n glide, kit, mix, spring as springPatch, sum, tween as tweenPatch, vec,\n type Handle, type Mix, type Motion, type Patch,\n} from '@msb235/blits';\n\nexport interface TweenStart {\n id: number; ms: number; ease: (u: number) => number;\n /** Endpoints as axes. A tween whose caller blends its own values passes [0] and [1]. */\n from: number[]; to: number[];\n}\nexport interface SpringStart {\n id: number; axes: number;\n from: number[]; to: number[] | null; velocity: number[];\n stiffness: number; damping: number; mass: number;\n}\n/** One subject's value, kept current in place by the codec. Valid until the subject stops. */\nexport interface Reader {\n /** The array holding the subject's axes as the last `frame` read them, from `at` on. It is the\n * codec's own, shared with other subjects and valid until the next `frame`. */\n readonly cols: Float64Array;\n /** Where the subject's axes start in `cols`. */\n readonly at: number;\n}\nexport interface SpringReader extends Reader {\n /** Position and velocity at the last `frame`. */\n motion(): { value: number[]; velocity: number[] };\n}\nexport interface Codec {\n /** Advances the codec's clock by `dtMs` of animator time, then reads every subject. */\n frame(dtMs: number): void;\n tween(s: TweenStart): Reader;\n spring(s: SpringStart): SpringReader;\n retarget(id: number, to: number[] | null): void;\n push(id: number, velocity: number[]): void;\n /** Plays `id` at rate `rate` from where it is, without a jump. */\n rate(id: number, rate: number): void;\n stop(id: number): void;\n /** Whether `id` is one of the codec's subjects. */\n has(id: number): boolean;\n /** How many voices the codec is running, one per subject; for tests and diagnostics. */\n voiceCount(): number;\n}\n\ntype Out = { v: number[] };\n\n/** What the codec calls on a motion patch: a tween has no `push`, a glide no `to`. */\ninterface Moves {\n to?(id: number, target: number[], at?: number): void;\n read(id: number, at?: number): Motion<number[]> | undefined;\n push?(id: number, velocity: number[], at?: number): void;\n}\n\n/** One mix per axis count, since a kit's channel width is fixed. */\ninterface Lane {\n axes: number;\n mix: Mix<number, Out>;\n /** The subjects `pull` reads, by slot. Joins wait in `pending` until the next `frame`. */\n ids: number[];\n /** Each slot's subject, beside `ids`. */\n subs: Subject[];\n pending: Set<number>;\n dirty: boolean;\n /** Frames in a row it has had no subjects at; it retires at the second. */\n idle: number;\n cols: { v: Float64Array };\n}\n\ninterface Subject extends Reader {\n cols: Float64Array;\n at: number;\n kind: 'tween' | 'spring';\n lane: Lane;\n handle: Handle<number>;\n patch: Moves;\n /** The codec's own copy, kept at the subject's motion as of its last re-cue. */\n spring?: SpringStart;\n /** Index into the lane's `ids`; -1 while no frame has read it. */\n slot: number;\n /** What `cols` points at while `slot` is -1. */\n held: Float64Array;\n /** A tween's start, until the next `frame` cues its voice; `handle` and `patch` exist only after. */\n queued?: TweenStart;\n /** A rate asked for while queued. */\n queuedRate?: number;\n motion?(): { value: number[]; velocity: number[] };\n}\n\nexport function createCodec(): Codec {\n const lanes = new Map<number, Lane>();\n const subjects = new Map<number, Subject>();\n // Tweens are cued together at the next frame, not one by one as they start: a burst of starts then\n // keeps the caller's objects together rather than each a voice apart, which the frame loop reads.\n const queue: Subject[] = [];\n let time = 0;\n\n const laneOf = (axes: number): Lane => {\n let l = lanes.get(axes);\n if (!l) {\n const m = mix<number, Out>(kit<Out>({ v: vec(axes, sum()) }));\n m.sync(time);\n l = { axes, mix: m, ids: [], subs: [], pending: new Set(), dirty: false, idle: 0, cols: { v: new Float64Array(0) } };\n lanes.set(axes, l);\n }\n return l;\n };\n const join = (s: Subject, id: number): void => {\n s.slot = -1;\n s.cols = s.held;\n s.at = 0;\n s.lane.pending.add(id);\n s.lane.dirty = true;\n };\n const depart = (s: Subject, id: number): void => {\n const l = s.lane;\n l.dirty = true;\n if (s.slot < 0) { l.pending.delete(id); return; }\n const last = l.ids.pop()!;\n const moved = l.subs.pop()!;\n if (last === id) return;\n const n = l.axes;\n const from = l.ids.length * n;\n l.cols.v.copyWithin(s.slot * n, from, from + n);\n l.ids[s.slot] = last;\n l.subs[s.slot] = moved;\n moved.slot = s.slot;\n moved.at = s.slot * n;\n };\n const rebuild = (l: Lane): void => {\n const ids = l.ids.slice();\n const subs = l.subs;\n for (const id of l.pending) {\n const s = subjects.get(id)!;\n s.slot = ids.length;\n s.at = s.slot * l.axes;\n s.cols = l.cols.v;\n ids.push(id);\n subs.push(s);\n }\n l.pending.clear();\n l.ids = ids;\n if (l.cols.v.length !== ids.length * l.axes) {\n l.cols = { v: new Float64Array(ids.length * l.axes) };\n for (const s of subs) s.cols = l.cols.v;\n }\n l.dirty = false;\n };\n\n // A voice cued now reads voice time 0 at codec time `time`. Each patch holds its subject at rest\n // at `from`, and the codec releases it with a `to` or `push` timed at 0.\n const springVoice = (l: Lane, id: number, sp: SpringStart): { handle: Handle<number>; patch: Moves } => {\n // With no target the spring force is zero whatever the stiffness, leaving damping alone:\n // velocity falls as exp(-t * damping / mass), a glide whose time constant is mass / damping.\n const patch: Moves & Patch<number, Out, void> = sp.to == null\n ? glide<number, Out, number[]>('v', { from: sp.from, ms: (1000 * sp.mass) / sp.damping })\n : springPatch<number, Out, number[]>('v', {\n from: sp.from, to: sp.from, stiffness: sp.stiffness, damping: sp.damping, mass: sp.mass,\n });\n const handle = l.mix.cue({ patch, subjects: [id] });\n if (sp.to) patch.to!(id, sp.to, 0);\n patch.push!(id, sp.velocity, 0);\n return { handle, patch };\n };\n\n const get = (id: number): Subject => {\n const s = subjects.get(id);\n if (!s) throw new Error(`codec: no subject ${id}`);\n return s;\n };\n /** A spring subject's motion now: as its voice last read it, else where it was last placed. */\n const current = (s: Subject, id: number): { value: number[]; velocity: number[] } =>\n s.patch.read(id) ?? { value: s.spring!.from.slice(), velocity: s.spring!.velocity.slice() };\n\n function stop(id: number): void {\n const s = subjects.get(id);\n if (!s) return;\n if (s.queued) s.queued = undefined;\n else {\n s.handle.fade({ over: 0 });\n s.lane.mix.drop(id);\n }\n depart(s, id);\n subjects.delete(id);\n }\n\n return {\n frame(dtMs) {\n for (const sub of queue) {\n const q = sub.queued;\n if (!q) continue;\n sub.queued = undefined;\n const patch = tweenPatch<number, Out, number[]>('v', { from: q.from.slice(), to: q.from.slice(), ms: q.ms, ease: q.ease });\n sub.handle = sub.lane.mix.cue({ patch, subjects: [q.id] });\n sub.patch = patch;\n patch.to(q.id, q.to.slice(), 0);\n if (sub.queuedRate !== undefined) sub.handle.rate = sub.queuedRate;\n }\n queue.length = 0;\n time += dtMs;\n for (const l of lanes.values()) {\n if (l.dirty) rebuild(l);\n if (l.ids.length === 0 && ++l.idle >= 2) {\n lanes.delete(l.axes);\n continue;\n }\n l.mix.sync(time);\n if (l.ids.length === 0) continue;\n l.idle = 0;\n l.mix.pull(l.ids, l.cols);\n }\n },\n tween(s) {\n if (s.to.length !== s.from.length) {\n throw new Error(`codec: tween ${s.id} goes from ${s.from.length} axes to ${s.to.length}`);\n }\n const l = laneOf(s.from.length);\n const held = Float64Array.from(s.from);\n const sub = { kind: 'tween', lane: l, slot: -1, held, cols: held, at: 0, queued: s } as Subject;\n subjects.set(s.id, sub);\n join(sub, s.id);\n queue.push(sub);\n return sub;\n },\n spring(s) {\n const sp = { ...s, from: s.from.slice(), to: s.to && s.to.slice(), velocity: s.velocity.slice() };\n const l = laneOf(sp.axes);\n const { handle, patch } = springVoice(l, s.id, sp);\n const held = Float64Array.from(sp.from);\n const sub: Subject = { kind: 'spring', lane: l, handle, patch, spring: sp, slot: -1, held, cols: held, at: 0 };\n subjects.set(s.id, sub);\n join(sub, s.id);\n const id = s.id;\n sub.motion = () => current(sub, id);\n return sub as Subject & SpringReader;\n },\n retarget(id, to) {\n const s = get(id);\n if (s.kind === 'tween') throw new Error(`codec: subject ${id} is a tween; tweens are not retargeted`);\n const sp = s.spring!;\n if ((to == null) === (sp.to == null)) {\n if (!to) return;\n sp.to = to.slice();\n s.patch.to!(id, sp.to);\n return;\n }\n // Held and free run different patches, so the subject is re-cued from where it is.\n const now = current(s, id);\n const rate = s.handle.rate;\n const next = { ...sp, to: to && to.slice(), from: now.value, velocity: now.velocity };\n s.handle.fade({ over: 0 });\n const { handle, patch } = springVoice(s.lane, id, next);\n handle.rate = rate;\n s.handle = handle;\n s.patch = patch;\n s.spring = next;\n },\n push(id, velocity) {\n const s = get(id);\n if (s.spring && !s.patch.read(id)) s.spring.velocity = velocity.slice();\n s.patch.push?.(id, velocity);\n },\n rate(id, rate) {\n const s = get(id);\n if (s.queued) s.queuedRate = rate;\n else s.handle.rate = rate;\n },\n stop,\n has: (id) => subjects.has(id),\n voiceCount() {\n return subjects.size;\n },\n };\n}\n"],"mappings":"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"}
@@ -1,12 +0,0 @@
1
- //#region src/animation/engine/integrator.ts
2
- function e(e, t, n, r, i, a, o, s) {
3
- let c = r ?? t, l = e.subtract(t, c), u = e.scale(l, r == null ? 0 : -i), d = e.scale(n, -a), f = e.scale(e.add(u, d), 1 / o), p = e.add(n, e.scale(f, s));
4
- return {
5
- value: e.add(t, e.scale(p, s)),
6
- velocity: p
7
- };
8
- }
9
- //#endregion
10
- export { e as stepSpring };
11
-
12
- //# sourceMappingURL=integrator.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"integrator.js","names":["stepSpring","ref","target","value","displacement","ops","springForce","k","dampingForce","velocity","damping","accel","mass","v","dt"],"sources":["../../../src/animation/engine/integrator.ts"],"sourcesContent":["export interface VectorOps<T> {\n add(a: T, b: T): T;\n subtract(a: T, b: T): T;\n scale(v: T, k: number): T;\n}\n\n/** One semi-implicit Euler step of a damped spring toward `target`, or of pure damping when\n * `target` is null. Returns the new value and velocity. */\nexport function stepSpring<T>(\n ops: VectorOps<T>,\n value: T, velocity: T, target: T | null,\n k: number, damping: number, mass: number, dt: number,\n): { value: T; velocity: T } {\n const ref = target ?? value;\n const displacement = ops.subtract(value, ref);\n const springForce = ops.scale(displacement, target == null ? 0 : -k);\n const dampingForce = ops.scale(velocity, -damping);\n const accel = ops.scale(ops.add(springForce, dampingForce), 1 / mass);\n const v = ops.add(velocity, ops.scale(accel, dt));\n return { value: ops.add(value, ops.scale(v, dt)), velocity: v };\n}\n"],"mappings":";AAQA,SAAgBA,EACd,GACA,GAAU,GAAa,GACvB,GAAW,GAAiB,GAAc,GACf;CAC3B,IAAMC,IAAMC,KAAUC,GAChBC,IAAeC,EAAI,SAASF,GAAOF,CAAG,GACtCK,IAAcD,EAAI,MAAMD,GAAcF,KAAU,OAAO,IAAI,CAACK,CAAC,GAC7DC,IAAeH,EAAI,MAAMI,GAAU,CAACC,CAAO,GAC3CC,IAAQN,EAAI,MAAMA,EAAI,IAAIC,GAAaE,CAAY,GAAG,IAAII,CAAI,GAC9DC,IAAIR,EAAI,IAAII,GAAUJ,EAAI,MAAMM,GAAOG,CAAE,CAAC;CAChD,OAAO;EAAE,OAAOT,EAAI,IAAIF,GAAOE,EAAI,MAAMQ,GAAGC,CAAE,CAAC;EAAG,UAAUD;CAAE;AAChE"}
@@ -1,62 +0,0 @@
1
- //#region src/animation/loop.ts
2
- function e(e, t, n = {}) {
3
- let r = n.count ?? Infinity, i = 0, a = !1, o = null, s = e({
4
- kind: "loop",
5
- cancelKey: n.cancelKey,
6
- label: n.label
7
- });
8
- s.setOnCancel(() => {
9
- a = !0, o?.cancel(), o = null;
10
- });
11
- let c = () => {
12
- if (!a) {
13
- if (i >= r) {
14
- o = null, a = !0, s.finish(), n.onDone?.();
15
- return;
16
- }
17
- o = t(i++, c);
18
- }
19
- };
20
- return c(), {
21
- id: s.id,
22
- cancel: () => s.cancel(),
23
- pause: () => {
24
- s.pause(), o?.pause();
25
- },
26
- resume: () => {
27
- s.resume(), o?.resume();
28
- },
29
- setTimeScale: (e) => {
30
- s.setTimeScale(e), o?.setTimeScale(e);
31
- },
32
- timeScale: () => s.timeScale(),
33
- isPaused: () => s.isPaused()
34
- };
35
- }
36
- function t(t, n, r) {
37
- let i = r.direction ?? "restart";
38
- return e((e) => n({
39
- ...e,
40
- kind: "tweenLoop"
41
- }), (e, n) => {
42
- let a = i === "reverse" || i === "alternate" && e % 2 == 1, o = a ? r.to : r.from, s = a ? r.from : r.to;
43
- return t.tween({
44
- from: o,
45
- to: s,
46
- ms: r.ms,
47
- easing: r.easing,
48
- interpolate: r.interpolate,
49
- onTick: r.onTick,
50
- onDone: n
51
- });
52
- }, {
53
- count: r.count,
54
- onDone: r.onDone,
55
- cancelKey: r.cancelKey,
56
- label: r.label
57
- });
58
- }
59
- //#endregion
60
- export { e as createLoop, t as createTweenLoop };
61
-
62
- //# sourceMappingURL=loop.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"loop.js","names":["createLoop","max","opts","iteration","cancelled","current","supervisor","createSupervisor","next","factory","s","createTweenLoop","direction","o","flipped","i","from","to","animator"],"sources":["../../src/animation/loop.ts"],"sourcesContent":["import type { SupervisorFactory } from './supervisor';\nimport type {\n AnimationHandle,\n Animator,\n LoopFactory,\n LoopOptions,\n TweenLoopOptions,\n} from './types';\n\n/**\n * Loop primitive. Repeatedly invokes `factory(i, next)` to produce a child\n * animation. The factory is responsible for wiring its returned handle's\n * `onDone` to call `next` — that's how the loop advances. Pause/resume/\n * setTimeScale delegate to the current child; cancel stops the in-flight\n * child and prevents future iterations.\n *\n * The loop is registered with the animator under a supervisor entry, so\n * `animator.cancel(handle)`, `animator.cancelKey(key)`, and\n * `animator.isActive(key)` all work for it.\n */\nexport function createLoop(\n createSupervisor: SupervisorFactory,\n factory: LoopFactory,\n opts: LoopOptions = {},\n): AnimationHandle {\n const max = opts.count ?? Infinity;\n let iteration = 0;\n let cancelled = false;\n let current: AnimationHandle | null = null;\n\n const supervisor = createSupervisor({ kind: 'loop', cancelKey: opts.cancelKey, label: opts.label });\n supervisor.setOnCancel(() => {\n // External cancel path (animator.cancel/cancelKey or handle.cancel).\n // Mark cancelled so `next` short-circuits; tear down the current child.\n cancelled = true;\n current?.cancel();\n current = null;\n });\n\n const next = (): void => {\n if (cancelled) return;\n if (iteration >= max) {\n current = null;\n // Natural completion: deregister the supervisor so isActive() goes\n // false. `cancelled` makes a late `next` a no-op.\n cancelled = true;\n supervisor.finish();\n opts.onDone?.();\n return;\n }\n const i = iteration++;\n current = factory(i, next);\n };\n\n next();\n\n return {\n id: supervisor.id,\n cancel: () => supervisor.cancel(),\n pause: () => {\n supervisor.pause();\n current?.pause();\n },\n resume: () => {\n supervisor.resume();\n current?.resume();\n },\n setTimeScale: (s) => {\n supervisor.setTimeScale(s);\n current?.setTimeScale(s);\n },\n timeScale: () => supervisor.timeScale(),\n isPaused: () => supervisor.isPaused(),\n };\n}\n\n/**\n * Sugar over `createLoop` for the common case of looping a tween between two\n * values. `direction` controls per-iteration from/to:\n * - `restart` (default): from→to every iteration\n * - `reverse`: to→from every iteration\n * - `alternate`: even iterations from→to, odd iterations to→from\n */\nexport function createTweenLoop<T>(\n animator: Animator,\n createSupervisor: SupervisorFactory,\n opts: TweenLoopOptions<T>,\n): AnimationHandle {\n const direction = opts.direction ?? 'restart';\n return createLoop(\n (o) => createSupervisor({ ...o, kind: 'tweenLoop' }),\n (i, next) => {\n const flipped = direction === 'reverse' || (direction === 'alternate' && i % 2 === 1);\n const from = flipped ? opts.to : opts.from;\n const to = flipped ? opts.from : opts.to;\n return animator.tween({\n from,\n to,\n ms: opts.ms,\n easing: opts.easing,\n interpolate: opts.interpolate,\n onTick: opts.onTick,\n onDone: next,\n });\n },\n { count: opts.count, onDone: opts.onDone, cancelKey: opts.cancelKey, label: opts.label },\n );\n}\n"],"mappings":";AAoBA,SAAgBA,EACd,GACA,GACA,IAAoB,CAAC,GACJ;CACjB,IAAMC,IAAMC,EAAK,SAAS,UACtBC,IAAY,GACZC,IAAY,IACZC,IAAkC,MAEhCC,IAAaC,EAAiB;EAAE,MAAM;EAAQ,WAAWL,EAAK;EAAW,OAAOA,EAAK;CAAM,CAAC;CAClG,EAAW,kBAAkB;EAK3B,AAFA,IAAY,IACZG,GAAS,OAAO,GAChB,IAAU;CACZ,CAAC;CAED,IAAMG,UAAmB;EACvB,IAAI,IACJ;OAAIL,KAAaF,GAAK;IAMpB,AALA,IAAU,MAGV,IAAY,IACZK,EAAW,OAAO,GAClBJ,EAAK,SAAS;IACd;GACF;GAEA,IAAUO,EAAQ,KAAGD,CAAI;EAFzB;CAGF;CAIA,OAFAA,EAAK,GAEE;EACL,IAAIF,EAAW;EACf,cAAcA,EAAW,OAAO;EAChC,aAAa;GAEX,AADAA,EAAW,MAAM,GACjBD,GAAS,MAAM;EACjB;EACA,cAAc;GAEZ,AADAC,EAAW,OAAO,GAClBD,GAAS,OAAO;EAClB;EACA,eAAe,MAAM;GAEnB,AADAC,EAAW,aAAaI,CAAC,GACzBL,GAAS,aAAaK,CAAC;EACzB;EACA,iBAAiBJ,EAAW,UAAU;EACtC,gBAAgBA,EAAW,SAAS;CACtC;AACF;AASA,SAAgBK,EACd,GACA,GACA,GACiB;CACjB,IAAMC,IAAYV,EAAK,aAAa;CACpC,OAAOF,GACJ,MAAMO,EAAiB;EAAE,GAAGM;EAAG,MAAM;CAAY,CAAC,IAClD,GAAG,MAAS;EACX,IAAMC,IAAUF,MAAc,aAAcA,MAAc,eAAeG,IAAI,KAAM,GAC7EC,IAAOF,IAAUZ,EAAK,KAAKA,EAAK,MAChCe,IAAKH,IAAUZ,EAAK,OAAOA,EAAK;EACtC,OAAOgB,EAAS,MAAM;GACpB;GACA;GACA,IAAIhB,EAAK;GACT,QAAQA,EAAK;GACb,aAAaA,EAAK;GAClB,QAAQA,EAAK;GACb,QAAQM;EACV,CAAC;CACH,GACA;EAAE,OAAON,EAAK;EAAO,QAAQA,EAAK;EAAQ,WAAWA,EAAK;EAAW,OAAOA,EAAK;CAAM,CACzF;AACF"}