@weasel-js/core 1.7.0 → 1.7.2

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 (1004) hide show
  1. package/CHANGELOG.md +794 -0
  2. package/README.md +14 -8
  3. package/dist/WeaselProvider.js +15 -0
  4. package/dist/WeaselProvider.js.map +1 -0
  5. package/dist/affordances/composeAffordanceLayer.js +224 -0
  6. package/dist/affordances/composeAffordanceLayer.js.map +1 -0
  7. package/dist/affordances/cornerResize.js +69 -0
  8. package/dist/affordances/cornerResize.js.map +1 -0
  9. package/dist/affordances/hitAffordanceRegions.js +138 -0
  10. package/dist/affordances/hitAffordanceRegions.js.map +1 -0
  11. package/dist/affordances/pathAnchors.js +66 -0
  12. package/dist/affordances/pathAnchors.js.map +1 -0
  13. package/dist/affordances/rotationHandle.js +103 -0
  14. package/dist/affordances/rotationHandle.js.map +1 -0
  15. package/dist/animation/behaviors/momentum.js +118 -0
  16. package/dist/animation/behaviors/momentum.js.map +1 -0
  17. package/dist/animation/colorHelpers.js +135 -0
  18. package/dist/animation/colorHelpers.js.map +1 -0
  19. package/dist/animation/colorRegistry.js +37 -0
  20. package/dist/animation/colorRegistry.js.map +1 -0
  21. package/dist/animation/index.js +20 -0
  22. package/dist/animation/loop.js +62 -0
  23. package/dist/animation/loop.js.map +1 -0
  24. package/dist/animation/observe.js +23 -0
  25. package/dist/animation/observe.js.map +1 -0
  26. package/dist/animation/poseHelpers.js +50 -0
  27. package/dist/animation/poseHelpers.js.map +1 -0
  28. package/dist/animation/reflow.js +121 -0
  29. package/dist/animation/reflow.js.map +1 -0
  30. package/dist/animation/rig/bindRig.js +74 -0
  31. package/dist/animation/rig/bindRig.js.map +1 -0
  32. package/dist/animation/rig/blendPoses.js +43 -0
  33. package/dist/animation/rig/blendPoses.js.map +1 -0
  34. package/dist/animation/rig/mirrorPose.js +19 -0
  35. package/dist/animation/rig/mirrorPose.js.map +1 -0
  36. package/dist/animation/rig/resolveSkeleton.js +33 -0
  37. package/dist/animation/rig/resolveSkeleton.js.map +1 -0
  38. package/dist/animation/rig/solveIk.js +103 -0
  39. package/dist/animation/rig/solveIk.js.map +1 -0
  40. package/dist/animation/rig/types.js +12 -0
  41. package/dist/animation/rig/types.js.map +1 -0
  42. package/dist/animation/rig/useRig.js +23 -0
  43. package/dist/animation/rig/useRig.js.map +1 -0
  44. package/dist/animation/slew.js +27 -0
  45. package/dist/animation/slew.js.map +1 -0
  46. package/dist/animation/stagger.js +138 -0
  47. package/dist/animation/stagger.js.map +1 -0
  48. package/dist/animation/timeline/booking.js +106 -0
  49. package/dist/animation/timeline/booking.js.map +1 -0
  50. package/dist/animation/timeline/createTimeline.js +116 -0
  51. package/dist/animation/timeline/createTimeline.js.map +1 -0
  52. package/dist/animation/timeline/sampleTrack.js +29 -0
  53. package/dist/animation/timeline/sampleTrack.js.map +1 -0
  54. package/dist/animation/useAnimator.js +329 -0
  55. package/dist/animation/useAnimator.js.map +1 -0
  56. package/dist/animation/wrappers/animateLifecycle.js +40 -0
  57. package/dist/animation/wrappers/animateLifecycle.js.map +1 -0
  58. package/dist/animation/wrappers/animateOnSetPose.js +44 -0
  59. package/dist/animation/wrappers/animateOnSetPose.js.map +1 -0
  60. package/dist/{autoPoseDescriptor-_XOyF7t4.d.ts → autoPoseDescriptor-vCdt55xm.d.ts} +2 -2
  61. package/dist/{builtins-DLn2lCr_.d.ts → builtins-C-gRyVRx.d.ts} +742 -513
  62. package/dist/canvas/Canvas.js +608 -0
  63. package/dist/canvas/Canvas.js.map +1 -0
  64. package/dist/canvas/CanvasView.js +255 -0
  65. package/dist/canvas/CanvasView.js.map +1 -0
  66. package/dist/canvas/CursorCoordsHud.js +102 -0
  67. package/dist/canvas/CursorCoordsHud.js.map +1 -0
  68. package/dist/canvas/DrawCanvas.js +67 -0
  69. package/dist/canvas/DrawCanvas.js.map +1 -0
  70. package/dist/canvas/MinimapCanvas.js +139 -0
  71. package/dist/canvas/MinimapCanvas.js.map +1 -0
  72. package/dist/canvas/ModalityHud.js +66 -0
  73. package/dist/canvas/ModalityHud.js.map +1 -0
  74. package/dist/canvas/NodeShape.js +391 -0
  75. package/dist/canvas/NodeShape.js.map +1 -0
  76. package/dist/canvas/PickHud.js +93 -0
  77. package/dist/canvas/PickHud.js.map +1 -0
  78. package/dist/canvas/SceneCanvas/ActionsProviderIfRoot.js +10 -0
  79. package/dist/canvas/SceneCanvas/ActionsProviderIfRoot.js.map +1 -0
  80. package/dist/canvas/SceneCanvas/DepRegistryProviderIfRoot.js +10 -0
  81. package/dist/canvas/SceneCanvas/DepRegistryProviderIfRoot.js.map +1 -0
  82. package/dist/canvas/SceneCanvas/PointerProviderIfRoot.js +51 -0
  83. package/dist/canvas/SceneCanvas/PointerProviderIfRoot.js.map +1 -0
  84. package/dist/canvas/SceneCanvas/contributionFrameHooks.js +42 -0
  85. package/dist/canvas/SceneCanvas/contributionFrameHooks.js.map +1 -0
  86. package/dist/canvas/SceneCanvas/defaultNodeProperties.js +549 -0
  87. package/dist/canvas/SceneCanvas/defaultNodeProperties.js.map +1 -0
  88. package/dist/canvas/SceneCanvas/defaultNodeRouting.js +26 -0
  89. package/dist/canvas/SceneCanvas/defaultNodeRouting.js.map +1 -0
  90. package/dist/canvas/SceneCanvas/dispatcherGestureBounds.js +69 -0
  91. package/dist/canvas/SceneCanvas/dispatcherGestureBounds.js.map +1 -0
  92. package/dist/canvas/SceneCanvas/features.js +97 -0
  93. package/dist/canvas/SceneCanvas/features.js.map +1 -0
  94. package/dist/canvas/SceneCanvas/poseGeometry.js +46 -0
  95. package/dist/canvas/SceneCanvas/poseGeometry.js.map +1 -0
  96. package/dist/canvas/SceneCanvas/useActionsPropResolver.js +48 -0
  97. package/dist/canvas/SceneCanvas/useActionsPropResolver.js.map +1 -0
  98. package/dist/canvas/SceneCanvas/useBuiltinShapeTools.js +70 -0
  99. package/dist/canvas/SceneCanvas/useBuiltinShapeTools.js.map +1 -0
  100. package/dist/canvas/SceneCanvas/useContributionRoles.js +75 -0
  101. package/dist/canvas/SceneCanvas/useContributionRoles.js.map +1 -0
  102. package/dist/canvas/SceneCanvas/useDispatcherOverlayLayer.js +172 -0
  103. package/dist/canvas/SceneCanvas/useDispatcherOverlayLayer.js.map +1 -0
  104. package/dist/canvas/SceneCanvas/usePreviewGhostLayer.js +69 -0
  105. package/dist/canvas/SceneCanvas/usePreviewGhostLayer.js.map +1 -0
  106. package/dist/canvas/SceneCanvas/useSceneSelectTool.js +127 -0
  107. package/dist/canvas/SceneCanvas/useSceneSelectTool.js.map +1 -0
  108. package/dist/canvas/SceneCanvas/useViewportActions.js +30 -0
  109. package/dist/canvas/SceneCanvas/useViewportActions.js.map +1 -0
  110. package/dist/canvas/SceneCanvas.js +992 -0
  111. package/dist/canvas/SceneCanvas.js.map +1 -0
  112. package/dist/canvas/SceneViewCanvas.js +54 -0
  113. package/dist/canvas/SceneViewCanvas.js.map +1 -0
  114. package/dist/canvas/accentColor.js +9 -0
  115. package/dist/canvas/accentColor.js.map +1 -0
  116. package/dist/canvas/affordanceAt.js +63 -0
  117. package/dist/canvas/affordanceAt.js.map +1 -0
  118. package/dist/canvas/buildSceneTree.js +65 -0
  119. package/dist/canvas/buildSceneTree.js.map +1 -0
  120. package/dist/canvas/canvasRenderer.js +89 -0
  121. package/dist/canvas/canvasRenderer.js.map +1 -0
  122. package/dist/canvas/colorOverrides.js +16 -0
  123. package/dist/canvas/colorOverrides.js.map +1 -0
  124. package/dist/canvas/defaultDrawOne.js +43 -0
  125. package/dist/canvas/defaultDrawOne.js.map +1 -0
  126. package/dist/canvas/deps/areaSelect.js +19 -0
  127. package/dist/canvas/deps/areaSelect.js.map +1 -0
  128. package/dist/canvas/deps/debug.js +9 -0
  129. package/dist/canvas/deps/debug.js.map +1 -0
  130. package/dist/canvas/deps/dispatcher.js +11 -0
  131. package/dist/canvas/deps/dispatcher.js.map +1 -0
  132. package/dist/canvas/deps/editAnchors.js +101 -0
  133. package/dist/canvas/deps/editAnchors.js.map +1 -0
  134. package/dist/canvas/deps/geometryProjection.js +11 -0
  135. package/dist/canvas/deps/geometryProjection.js.map +1 -0
  136. package/dist/canvas/deps/hitTestArea.js +51 -0
  137. package/dist/canvas/deps/hitTestArea.js.map +1 -0
  138. package/dist/canvas/deps/ingestion.js +31 -0
  139. package/dist/canvas/deps/ingestion.js.map +1 -0
  140. package/dist/canvas/deps/insert.js +116 -0
  141. package/dist/canvas/deps/insert.js.map +1 -0
  142. package/dist/canvas/deps/lassoSelect.js +20 -0
  143. package/dist/canvas/deps/lassoSelect.js.map +1 -0
  144. package/dist/canvas/deps/layout.js +34 -0
  145. package/dist/canvas/deps/layout.js.map +1 -0
  146. package/dist/canvas/deps/nodeAtPoint.js +19 -0
  147. package/dist/canvas/deps/nodeAtPoint.js.map +1 -0
  148. package/dist/canvas/deps/poseComposition.js +11 -0
  149. package/dist/canvas/deps/poseComposition.js.map +1 -0
  150. package/dist/canvas/deps/poseDescriptor.js +12 -0
  151. package/dist/canvas/deps/poseDescriptor.js.map +1 -0
  152. package/dist/canvas/deps/resizePolicy.js +35 -0
  153. package/dist/canvas/deps/resizePolicy.js.map +1 -0
  154. package/dist/canvas/deps/slice.js +99 -0
  155. package/dist/canvas/deps/slice.js.map +1 -0
  156. package/dist/canvas/deps/snap.js +11 -0
  157. package/dist/canvas/deps/snap.js.map +1 -0
  158. package/dist/canvas/deps/textEdit.js +21 -0
  159. package/dist/canvas/deps/textEdit.js.map +1 -0
  160. package/dist/canvas/deps/view.js +43 -0
  161. package/dist/canvas/deps/view.js.map +1 -0
  162. package/dist/canvas/derivedPath.js +47 -0
  163. package/dist/canvas/derivedPath.js.map +1 -0
  164. package/dist/canvas/drawEnvelope.js +22 -0
  165. package/dist/canvas/drawEnvelope.js.map +1 -0
  166. package/dist/canvas/getNodeAtPoint.js +18 -0
  167. package/dist/canvas/getNodeAtPoint.js.map +1 -0
  168. package/dist/canvas/hostAnchor.js +29 -0
  169. package/dist/canvas/hostAnchor.js.map +1 -0
  170. package/dist/canvas/hud.module.js +18 -0
  171. package/dist/canvas/hud.module.js.map +1 -0
  172. package/dist/canvas/insertPreviewExtent.js +103 -0
  173. package/dist/canvas/insertPreviewExtent.js.map +1 -0
  174. package/dist/canvas/kitRequirements.js +177 -0
  175. package/dist/canvas/kitRequirements.js.map +1 -0
  176. package/dist/canvas/layerOrder.js +66 -0
  177. package/dist/canvas/layerOrder.js.map +1 -0
  178. package/dist/canvas/layerSlots.js +14 -0
  179. package/dist/canvas/layerSlots.js.map +1 -0
  180. package/dist/canvas/minimapMath.js +80 -0
  181. package/dist/canvas/minimapMath.js.map +1 -0
  182. package/dist/canvas/mountedCanvases.js +20 -0
  183. package/dist/canvas/mountedCanvases.js.map +1 -0
  184. package/dist/canvas/overlayRoleStrokes.js +17 -0
  185. package/dist/canvas/overlayRoleStrokes.js.map +1 -0
  186. package/dist/canvas/paintCull.js +20 -0
  187. package/dist/canvas/paintCull.js.map +1 -0
  188. package/dist/canvas/pickWalk.js +158 -0
  189. package/dist/canvas/pickWalk.js.map +1 -0
  190. package/dist/canvas/planeClips.js +30 -0
  191. package/dist/canvas/planeClips.js.map +1 -0
  192. package/dist/canvas/poseRotation.js +35 -0
  193. package/dist/canvas/poseRotation.js.map +1 -0
  194. package/dist/canvas/rasterToPng.js +21 -0
  195. package/dist/canvas/rasterToPng.js.map +1 -0
  196. package/dist/canvas/renderDebugSnapshot.js +32 -0
  197. package/dist/canvas/renderDebugSnapshot.js.map +1 -0
  198. package/dist/canvas/renderNeeds.js +25 -0
  199. package/dist/canvas/renderNeeds.js.map +1 -0
  200. package/dist/canvas/renderSceneToPixels.js +143 -0
  201. package/dist/canvas/renderSceneToPixels.js.map +1 -0
  202. package/dist/canvas/sceneAdapter.js +270 -0
  203. package/dist/canvas/sceneAdapter.js.map +1 -0
  204. package/dist/canvas/sceneLayerPaint.js +37 -0
  205. package/dist/canvas/sceneLayerPaint.js.map +1 -0
  206. package/dist/canvas/sceneSlotWiring.js +20 -0
  207. package/dist/canvas/sceneSlotWiring.js.map +1 -0
  208. package/dist/canvas/sceneViewRender.js +72 -0
  209. package/dist/canvas/sceneViewRender.js.map +1 -0
  210. package/dist/canvas/slopsDebugLayer.js +61 -0
  211. package/dist/canvas/slopsDebugLayer.js.map +1 -0
  212. package/dist/canvas/surfaceContribution.js +15 -0
  213. package/dist/canvas/surfaceContribution.js.map +1 -0
  214. package/dist/canvas/toolPreview.js +39 -0
  215. package/dist/canvas/toolPreview.js.map +1 -0
  216. package/dist/canvas/useCanvasRenderer.js +11 -0
  217. package/dist/canvas/useCanvasRenderer.js.map +1 -0
  218. package/dist/canvas/useFrameLoop.js +60 -0
  219. package/dist/canvas/useFrameLoop.js.map +1 -0
  220. package/dist/canvas/useHostAnchor.js +71 -0
  221. package/dist/canvas/useHostAnchor.js.map +1 -0
  222. package/dist/canvas/useLateContentRedraw.js +21 -0
  223. package/dist/canvas/useLateContentRedraw.js.map +1 -0
  224. package/dist/canvas/useRedrawOn.js +21 -0
  225. package/dist/canvas/useRedrawOn.js.map +1 -0
  226. package/dist/canvas/useViewHelpers.js +120 -0
  227. package/dist/canvas/useViewHelpers.js.map +1 -0
  228. package/dist/canvas/viewInputs.js +17 -0
  229. package/dist/canvas/viewInputs.js.map +1 -0
  230. package/dist/canvas/viewRegistry.js +61 -0
  231. package/dist/canvas/viewRegistry.js.map +1 -0
  232. package/dist/canvas/wrapNodeOutput.js +14 -0
  233. package/dist/canvas/wrapNodeOutput.js.map +1 -0
  234. package/dist/clipboard.d.ts +10 -5
  235. package/dist/clipboard.js +3 -5
  236. package/dist/clone.d.ts +3 -3
  237. package/dist/clone.js +2 -5
  238. package/dist/core/adapters/arrayAdapter.js +85 -0
  239. package/dist/core/adapters/arrayAdapter.js.map +1 -0
  240. package/dist/core/adapters/useArrayAdapter.js +13 -0
  241. package/dist/core/adapters/useArrayAdapter.js.map +1 -0
  242. package/dist/core/applyOps.js +12 -0
  243. package/dist/core/applyOps.js.map +1 -0
  244. package/dist/core/device/index.js +4 -0
  245. package/dist/core/device/targets.js +17 -0
  246. package/dist/core/device/targets.js.map +1 -0
  247. package/dist/core/device/useDeviceProfile.js +75 -0
  248. package/dist/core/device/useDeviceProfile.js.map +1 -0
  249. package/dist/core/fillInPoseFrame.js +102 -0
  250. package/dist/core/fillInPoseFrame.js.map +1 -0
  251. package/dist/core/geometry/poseDescriptor.js +93 -0
  252. package/dist/core/geometry/poseDescriptor.js.map +1 -0
  253. package/dist/core/geometry/poseRotation.js +58 -0
  254. package/dist/core/geometry/poseRotation.js.map +1 -0
  255. package/dist/core/geometry/regionHit.js +102 -0
  256. package/dist/core/geometry/regionHit.js.map +1 -0
  257. package/dist/core/geometry/unionBounds.js +60 -0
  258. package/dist/core/geometry/unionBounds.js.map +1 -0
  259. package/dist/core/gradient.js +136 -0
  260. package/dist/core/gradient.js.map +1 -0
  261. package/dist/core/isPlainObject.js +11 -0
  262. package/dist/core/isPlainObject.js.map +1 -0
  263. package/dist/core/layers/render.js +150 -0
  264. package/dist/core/layers/render.js.map +1 -0
  265. package/dist/core/markerInset.js +24 -0
  266. package/dist/core/markerInset.js.map +1 -0
  267. package/dist/core/mixed.js +6 -0
  268. package/dist/core/mixed.js.map +1 -0
  269. package/dist/core/ops/arrange.js +31 -0
  270. package/dist/core/ops/arrange.js.map +1 -0
  271. package/dist/core/ops/create.js +32 -0
  272. package/dist/core/ops/create.js.map +1 -0
  273. package/dist/core/ops/createHistory.js +20 -0
  274. package/dist/core/ops/createHistory.js.map +1 -0
  275. package/dist/core/ops/delete.js +89 -0
  276. package/dist/core/ops/delete.js.map +1 -0
  277. package/dist/core/ops/registry.js +17 -0
  278. package/dist/core/ops/registry.js.map +1 -0
  279. package/dist/core/ops/reorder/algorithms.js +55 -0
  280. package/dist/core/ops/reorder/algorithms.js.map +1 -0
  281. package/dist/core/ops/reorder/index.js +140 -0
  282. package/dist/core/ops/reorder/index.js.map +1 -0
  283. package/dist/core/ops/reparent.js +52 -0
  284. package/dist/core/ops/reparent.js.map +1 -0
  285. package/dist/core/ops/select.js +34 -0
  286. package/dist/core/ops/select.js.map +1 -0
  287. package/dist/core/ops/setData.js +34 -0
  288. package/dist/core/ops/setData.js.map +1 -0
  289. package/dist/core/ops/setLayer.js +34 -0
  290. package/dist/core/ops/setLayer.js.map +1 -0
  291. package/dist/core/ops/setLayout.js +31 -0
  292. package/dist/core/ops/setLayout.js.map +1 -0
  293. package/dist/core/ops/setPath.js +57 -0
  294. package/dist/core/ops/setPath.js.map +1 -0
  295. package/dist/core/ops/setText.js +34 -0
  296. package/dist/core/ops/setText.js.map +1 -0
  297. package/dist/core/ops/slot.js +37 -0
  298. package/dist/core/ops/slot.js.map +1 -0
  299. package/dist/core/ops/transform.js +42 -0
  300. package/dist/core/ops/transform.js.map +1 -0
  301. package/dist/core/paintKinds.js +156 -0
  302. package/dist/core/paintKinds.js.map +1 -0
  303. package/dist/core/scene/NodeProperties.js +20 -0
  304. package/dist/core/scene/NodeProperties.js.map +1 -0
  305. package/dist/core/scene/NodeRouting.js +24 -0
  306. package/dist/core/scene/NodeRouting.js.map +1 -0
  307. package/dist/core/scene/arrivals.js +12 -0
  308. package/dist/core/scene/arrivals.js.map +1 -0
  309. package/dist/core/scene/composeFrame.js +29 -0
  310. package/dist/core/scene/composeFrame.js.map +1 -0
  311. package/dist/core/scene/depMemo.js +18 -0
  312. package/dist/core/scene/depMemo.js.map +1 -0
  313. package/dist/core/scene/dependents.js +66 -0
  314. package/dist/core/scene/dependents.js.map +1 -0
  315. package/dist/core/scene/derivedPath.js +31 -0
  316. package/dist/core/scene/derivedPath.js.map +1 -0
  317. package/dist/core/scene/effectivePose.js +78 -0
  318. package/dist/core/scene/effectivePose.js.map +1 -0
  319. package/dist/core/scene/kitRegistry.js +33 -0
  320. package/dist/core/scene/kitRegistry.js.map +1 -0
  321. package/dist/core/scene/layoutPass.js +96 -0
  322. package/dist/core/scene/layoutPass.js.map +1 -0
  323. package/dist/core/scene/nodeFnFields.js +83 -0
  324. package/dist/core/scene/nodeFnFields.js.map +1 -0
  325. package/dist/core/scene/nodeMemo.js +28 -0
  326. package/dist/core/scene/nodeMemo.js.map +1 -0
  327. package/dist/core/scene/poseFeed.js +87 -0
  328. package/dist/core/scene/poseFeed.js.map +1 -0
  329. package/dist/core/scene/poseOverrides.js +52 -0
  330. package/dist/core/scene/poseOverrides.js.map +1 -0
  331. package/dist/core/scene/poseSnapshot.js +54 -0
  332. package/dist/core/scene/poseSnapshot.js.map +1 -0
  333. package/dist/core/scene/scene.js +1271 -0
  334. package/dist/core/scene/scene.js.map +1 -0
  335. package/dist/core/scene/types.js +6 -0
  336. package/dist/core/scene/types.js.map +1 -0
  337. package/dist/core/scene/useScene.js +32 -0
  338. package/dist/core/scene/useScene.js.map +1 -0
  339. package/dist/core/selection/chromeState.js +31 -0
  340. package/dist/core/selection/chromeState.js.map +1 -0
  341. package/dist/core/selection/selectionTarget.js +6 -0
  342. package/dist/core/selection/selectionTarget.js.map +1 -0
  343. package/dist/core/selection/useSelection.js +71 -0
  344. package/dist/core/selection/useSelection.js.map +1 -0
  345. package/dist/core/shapeKinds.js +54 -0
  346. package/dist/core/shapeKinds.js.map +1 -0
  347. package/dist/core/strokeMarkerShapes.js +139 -0
  348. package/dist/core/strokeMarkerShapes.js.map +1 -0
  349. package/dist/core/strokeMarkers.js +28 -0
  350. package/dist/core/strokeMarkers.js.map +1 -0
  351. package/dist/core/stylus/stylus.js +39 -0
  352. package/dist/core/stylus/stylus.js.map +1 -0
  353. package/dist/core/stylus/usePointerStylus.js +51 -0
  354. package/dist/core/stylus/usePointerStylus.js.map +1 -0
  355. package/dist/core/usePaintKinds.js +17 -0
  356. package/dist/core/usePaintKinds.js.map +1 -0
  357. package/dist/core/viewport/clampView.js +24 -0
  358. package/dist/core/viewport/clampView.js.map +1 -0
  359. package/dist/core/viewport/clientToWorld.js +8 -0
  360. package/dist/core/viewport/clientToWorld.js.map +1 -0
  361. package/dist/core/viewport/createVelocityTracker.js +39 -0
  362. package/dist/core/viewport/createVelocityTracker.js.map +1 -0
  363. package/dist/core/viewport/fitToBounds.js +18 -0
  364. package/dist/core/viewport/fitToBounds.js.map +1 -0
  365. package/dist/core/viewport/fitViewToBounds.js +36 -0
  366. package/dist/core/viewport/fitViewToBounds.js.map +1 -0
  367. package/dist/core/viewport/interpolateView.js +34 -0
  368. package/dist/core/viewport/interpolateView.js.map +1 -0
  369. package/dist/core/viewport/meanScale.js +8 -0
  370. package/dist/core/viewport/meanScale.js.map +1 -0
  371. package/dist/core/viewport/parallax.js +111 -0
  372. package/dist/core/viewport/parallax.js.map +1 -0
  373. package/dist/core/viewport/pxExtent.js +42 -0
  374. package/dist/core/viewport/pxExtent.js.map +1 -0
  375. package/dist/core/viewport/sceneNodeClientRect.js +18 -0
  376. package/dist/core/viewport/sceneNodeClientRect.js.map +1 -0
  377. package/dist/core/viewport/screenSlop.js +27 -0
  378. package/dist/core/viewport/screenSlop.js.map +1 -0
  379. package/dist/core/viewport/useAutoCenter.js +32 -0
  380. package/dist/core/viewport/useAutoCenter.js.map +1 -0
  381. package/dist/core/viewport/useCanvasSize.js +29 -0
  382. package/dist/core/viewport/useCanvasSize.js.map +1 -0
  383. package/dist/core/viewport/useDecayLoop.js +63 -0
  384. package/dist/core/viewport/useDecayLoop.js.map +1 -0
  385. package/dist/core/viewport/useVelocityTracker.js +10 -0
  386. package/dist/core/viewport/useVelocityTracker.js.map +1 -0
  387. package/dist/core/viewport/useViewAnimation.js +63 -0
  388. package/dist/core/viewport/useViewAnimation.js.map +1 -0
  389. package/dist/core/viewport/view.js +37 -0
  390. package/dist/core/viewport/view.js.map +1 -0
  391. package/dist/core/viewport/viewTransform.js +11 -0
  392. package/dist/core/viewport/viewTransform.js.map +1 -0
  393. package/dist/core/viewport/viewportWorldRect.js +13 -0
  394. package/dist/core/viewport/viewportWorldRect.js.map +1 -0
  395. package/dist/core/viewport/wheelHandler.js +30 -0
  396. package/dist/core/viewport/wheelHandler.js.map +1 -0
  397. package/dist/core/viewport/zoomAt.js +22 -0
  398. package/dist/core/viewport/zoomAt.js.map +1 -0
  399. package/dist/core/viewport/zoomBounds.js +20 -0
  400. package/dist/core/viewport/zoomBounds.js.map +1 -0
  401. package/dist/{pointSnapToGrid-Dp2IxLGb.d.ts → cornerHandles-BCrDp_mH.d.ts} +3 -13
  402. package/dist/debug/createDebugOverlayLayer.js +358 -0
  403. package/dist/debug/createDebugOverlayLayer.js.map +1 -0
  404. package/dist/debug/createDebugSink.js +83 -0
  405. package/dist/debug/createDebugSink.js.map +1 -0
  406. package/dist/debug/defaultTheme.js +31 -0
  407. package/dist/debug/defaultTheme.js.map +1 -0
  408. package/dist/debug/flag.js +41 -0
  409. package/dist/debug/flag.js.map +1 -0
  410. package/dist/debug/frameStats.js +16 -0
  411. package/dist/debug/frameStats.js.map +1 -0
  412. package/dist/debug/parseDebugFlags.js +32 -0
  413. package/dist/debug/parseDebugFlags.js.map +1 -0
  414. package/dist/features/chrome-caps/buildChromeCtx.js +16 -0
  415. package/dist/features/chrome-caps/buildChromeCtx.js.map +1 -0
  416. package/dist/features/chrome-caps/conditions.js +36 -0
  417. package/dist/features/chrome-caps/conditions.js.map +1 -0
  418. package/dist/features/chrome-caps/defaults.js +26 -0
  419. package/dist/features/chrome-caps/defaults.js.map +1 -0
  420. package/dist/features/chrome-caps/index.js +7 -0
  421. package/dist/features/chrome-caps/resolve.js +23 -0
  422. package/dist/features/chrome-caps/resolve.js.map +1 -0
  423. package/dist/features/chrome-caps/useHoverTracking.js +27 -0
  424. package/dist/features/chrome-caps/useHoverTracking.js.map +1 -0
  425. package/dist/features/cursor/paintedCursorLayer.js +60 -0
  426. package/dist/features/cursor/paintedCursorLayer.js.map +1 -0
  427. package/dist/features/focus/gateLayer.js +14 -0
  428. package/dist/features/focus/gateLayer.js.map +1 -0
  429. package/dist/features/focus/useCanvasFocus.js +29 -0
  430. package/dist/features/focus/useCanvasFocus.js.map +1 -0
  431. package/dist/features/groups/children.js +23 -0
  432. package/dist/features/groups/children.js.map +1 -0
  433. package/dist/features/groups/composePose.js +67 -0
  434. package/dist/features/groups/composePose.js.map +1 -0
  435. package/dist/features/groups/nestedHit.js +40 -0
  436. package/dist/features/groups/nestedHit.js.map +1 -0
  437. package/dist/features/groups/unionOfChildren.js +15 -0
  438. package/dist/features/groups/unionOfChildren.js.map +1 -0
  439. package/dist/features/images/imageCache.js +94 -0
  440. package/dist/features/images/imageCache.js.map +1 -0
  441. package/dist/features/ingestion/contentHandlers.js +37 -0
  442. package/dist/features/ingestion/contentHandlers.js.map +1 -0
  443. package/dist/features/ingestion/imageHandler.js +45 -0
  444. package/dist/features/ingestion/imageHandler.js.map +1 -0
  445. package/dist/features/ingestion/index.js +8 -0
  446. package/dist/features/ingestion/openFilePicker.js +15 -0
  447. package/dist/features/ingestion/openFilePicker.js.map +1 -0
  448. package/dist/features/ingestion/registerKitHandlers.js +26 -0
  449. package/dist/features/ingestion/registerKitHandlers.js.map +1 -0
  450. package/dist/features/ingestion/svgHandler.js +58 -0
  451. package/dist/features/ingestion/svgHandler.js.map +1 -0
  452. package/dist/features/ingestion/weaselJsonHandler.js +39 -0
  453. package/dist/features/ingestion/weaselJsonHandler.js.map +1 -0
  454. package/dist/features/longPress/longPressFeedback.js +96 -0
  455. package/dist/features/longPress/longPressFeedback.js.map +1 -0
  456. package/dist/features/meshPaint/bake.js +79 -0
  457. package/dist/features/meshPaint/bake.js.map +1 -0
  458. package/dist/features/meshPaint/bakeCache.js +59 -0
  459. package/dist/features/meshPaint/bakeCache.js.map +1 -0
  460. package/dist/features/meshPaint/handles.js +86 -0
  461. package/dist/features/meshPaint/handles.js.map +1 -0
  462. package/dist/features/meshPaint/lazyKind.js +1298 -0
  463. package/dist/features/meshPaint/lazyKind.js.map +1 -0
  464. package/dist/features/meshPaint/meshPaint.js +236 -0
  465. package/dist/features/meshPaint/meshPaint.js.map +1 -0
  466. package/dist/features/meshPaint/meshShader.js +6 -0
  467. package/dist/features/meshPaint/meshShader.js.map +1 -0
  468. package/dist/features/meshPaint/register.js +7 -0
  469. package/dist/features/meshPaint/register.js.map +1 -0
  470. package/dist/features/meshPaint/surface.js +110 -0
  471. package/dist/features/meshPaint/surface.js.map +1 -0
  472. package/dist/features/minimap/actions.js +53 -0
  473. package/dist/features/minimap/actions.js.map +1 -0
  474. package/dist/features/minimap/createMinimapContribution.js +96 -0
  475. package/dist/features/minimap/createMinimapContribution.js.map +1 -0
  476. package/dist/features/minimap/layers.js +103 -0
  477. package/dist/features/minimap/layers.js.map +1 -0
  478. package/dist/features/modes/modeLayers.js +113 -0
  479. package/dist/features/modes/modeLayers.js.map +1 -0
  480. package/dist/features/overlays/useNodeOverlayFrame.js +103 -0
  481. package/dist/features/overlays/useNodeOverlayFrame.js.map +1 -0
  482. package/dist/features/parallax/createParallaxLayer.js +26 -0
  483. package/dist/features/parallax/createParallaxLayer.js.map +1 -0
  484. package/dist/features/parallax/createParallaxPlane.js +26 -0
  485. package/dist/features/parallax/createParallaxPlane.js.map +1 -0
  486. package/dist/features/paths/anchorEdits.js +156 -0
  487. package/dist/features/paths/anchorEdits.js.map +1 -0
  488. package/dist/features/paths/anchors.js +154 -0
  489. package/dist/features/paths/anchors.js.map +1 -0
  490. package/dist/features/paths/booleans.js +2 -0
  491. package/dist/features/paths/index.js +15 -0
  492. package/dist/features/paths/markerCommands.js +116 -0
  493. package/dist/features/paths/markerCommands.js.map +1 -0
  494. package/dist/features/paths/markerSites.js +59 -0
  495. package/dist/features/paths/markerSites.js.map +1 -0
  496. package/dist/features/paths/markers.js +95 -0
  497. package/dist/features/paths/markers.js.map +1 -0
  498. package/dist/features/paths/nearestAnchor.js +36 -0
  499. package/dist/features/paths/nearestAnchor.js.map +1 -0
  500. package/dist/features/paths/originProjection.js +16 -0
  501. package/dist/features/paths/originProjection.js.map +1 -0
  502. package/dist/features/paths/pathEditingOverlayLayer.js +137 -0
  503. package/dist/features/paths/pathEditingOverlayLayer.js.map +1 -0
  504. package/dist/features/paths/pathInWorld.js +41 -0
  505. package/dist/features/paths/pathInWorld.js.map +1 -0
  506. package/dist/features/paths/pathLayer.js +44 -0
  507. package/dist/features/paths/pathLayer.js.map +1 -0
  508. package/dist/features/paths/penPreviewLayer.js +220 -0
  509. package/dist/features/paths/penPreviewLayer.js.map +1 -0
  510. package/dist/features/paths/poseDescriptor.js +39 -0
  511. package/dist/features/paths/poseDescriptor.js.map +1 -0
  512. package/dist/features/paths/tessellate/stroke.js +230 -0
  513. package/dist/features/paths/tessellate/stroke.js.map +1 -0
  514. package/dist/features/patterns/index.js +23 -0
  515. package/dist/features/patterns/index.js.map +1 -0
  516. package/dist/features/patterns/patterns-builtin.js +38 -0
  517. package/dist/features/patterns/patterns-builtin.js.map +1 -0
  518. package/dist/features/patterns/resolveSpec.js +57 -0
  519. package/dist/features/patterns/resolveSpec.js.map +1 -0
  520. package/dist/features/patterns/tileGeometry.js +158 -0
  521. package/dist/features/patterns/tileGeometry.js.map +1 -0
  522. package/dist/features/pointer/PointerContext.js +45 -0
  523. package/dist/features/pointer/PointerContext.js.map +1 -0
  524. package/dist/features/poseRun/usePoseRun.js +70 -0
  525. package/dist/features/poseRun/usePoseRun.js.map +1 -0
  526. package/dist/features/selection/SelectionContext.js +46 -0
  527. package/dist/features/selection/SelectionContext.js.map +1 -0
  528. package/dist/features/selection/overlay.js +442 -0
  529. package/dist/features/selection/overlay.js.map +1 -0
  530. package/dist/features/simulation/createSimulation.js +61 -0
  531. package/dist/features/simulation/createSimulation.js.map +1 -0
  532. package/dist/features/simulation/types.js +6 -0
  533. package/dist/features/simulation/types.js.map +1 -0
  534. package/dist/features/simulation/useSimulation.js +74 -0
  535. package/dist/features/simulation/useSimulation.js.map +1 -0
  536. package/dist/features/text/domRuns.js +258 -0
  537. package/dist/features/text/domRuns.js.map +1 -0
  538. package/dist/features/text/fitTextPose.js +38 -0
  539. package/dist/features/text/fitTextPose.js.map +1 -0
  540. package/dist/features/text/hitTest.js +45 -0
  541. package/dist/features/text/hitTest.js.map +1 -0
  542. package/dist/features/text/renderLabel.js +14 -0
  543. package/dist/features/text/renderLabel.js.map +1 -0
  544. package/dist/features/text/runs/effectiveRangeStyle.js +66 -0
  545. package/dist/features/text/runs/effectiveRangeStyle.js.map +1 -0
  546. package/dist/features/text/runs/flagRange.js +53 -0
  547. package/dist/features/text/runs/flagRange.js.map +1 -0
  548. package/dist/features/text/runs/rangeStyle.js +135 -0
  549. package/dist/features/text/runs/rangeStyle.js.map +1 -0
  550. package/dist/features/text/textCommand.js +59 -0
  551. package/dist/features/text/textCommand.js.map +1 -0
  552. package/dist/features/text/textLayer.js +35 -0
  553. package/dist/features/text/textLayer.js.map +1 -0
  554. package/dist/features/text/textToPath.js +181 -0
  555. package/dist/features/text/textToPath.js.map +1 -0
  556. package/dist/features/text/useSceneTextEdit.js +138 -0
  557. package/dist/features/text/useSceneTextEdit.js.map +1 -0
  558. package/dist/features/text/useTextEdit.js +465 -0
  559. package/dist/features/text/useTextEdit.js.map +1 -0
  560. package/dist/features/tiling/createTiledLayer.js +63 -0
  561. package/dist/features/tiling/createTiledLayer.js.map +1 -0
  562. package/dist/features/tiling/tiledProject.js +14 -0
  563. package/dist/features/tiling/tiledProject.js.map +1 -0
  564. package/dist/features/viewports/viewResolver.js +59 -0
  565. package/dist/features/viewports/viewResolver.js.map +1 -0
  566. package/dist/features/viewports/viewportLayer.js +58 -0
  567. package/dist/features/viewports/viewportLayer.js.map +1 -0
  568. package/dist/icons/ArrowIcon.js +23 -0
  569. package/dist/icons/ArrowIcon.js.map +1 -0
  570. package/dist/icons/EllipseIcon.js +21 -0
  571. package/dist/icons/EllipseIcon.js.map +1 -0
  572. package/dist/icons/EyedropperIcon.js +49 -0
  573. package/dist/icons/EyedropperIcon.js.map +1 -0
  574. package/dist/icons/HandIcon.js +59 -0
  575. package/dist/icons/HandIcon.js.map +1 -0
  576. package/dist/icons/ImageIcon.js +34 -0
  577. package/dist/icons/ImageIcon.js.map +1 -0
  578. package/dist/icons/LassoIcon.js +22 -0
  579. package/dist/icons/LassoIcon.js.map +1 -0
  580. package/dist/icons/LineIcon.js +22 -0
  581. package/dist/icons/LineIcon.js.map +1 -0
  582. package/dist/icons/PenIcon.js +36 -0
  583. package/dist/icons/PenIcon.js.map +1 -0
  584. package/dist/icons/PencilIcon.js +25 -0
  585. package/dist/icons/PencilIcon.js.map +1 -0
  586. package/dist/icons/PolygonIcon.js +19 -0
  587. package/dist/icons/PolygonIcon.js.map +1 -0
  588. package/dist/icons/RectIcon.js +37 -0
  589. package/dist/icons/RectIcon.js.map +1 -0
  590. package/dist/icons/SelectIcon.js +20 -0
  591. package/dist/icons/SelectIcon.js.map +1 -0
  592. package/dist/icons/StarIcon.js +19 -0
  593. package/dist/icons/StarIcon.js.map +1 -0
  594. package/dist/icons/TextIcon.js +19 -0
  595. package/dist/icons/TextIcon.js.map +1 -0
  596. package/dist/icons/UnknownIcon.js +33 -0
  597. package/dist/icons/UnknownIcon.js.map +1 -0
  598. package/dist/icons/_base.js +12 -0
  599. package/dist/icons/_base.js.map +1 -0
  600. package/dist/index.d.ts +1960 -1891
  601. package/dist/index.js +312 -13
  602. package/dist/input/keyState.js +76 -0
  603. package/dist/input/keyState.js.map +1 -0
  604. package/dist/input/useKeyState.js +22 -0
  605. package/dist/input/useKeyState.js.map +1 -0
  606. package/dist/interactions/actions/actionShortcuts.js +32 -0
  607. package/dist/interactions/actions/actionShortcuts.js.map +1 -0
  608. package/dist/interactions/actions/align/align.js +81 -0
  609. package/dist/interactions/actions/align/align.js.map +1 -0
  610. package/dist/interactions/actions/booleans/booleans.js +120 -0
  611. package/dist/interactions/actions/booleans/booleans.js.map +1 -0
  612. package/dist/interactions/actions/booleans/useBooleans.js +20 -0
  613. package/dist/interactions/actions/booleans/useBooleans.js.map +1 -0
  614. package/dist/interactions/actions/booleans/useBooleansAdapter.js +9 -0
  615. package/dist/interactions/actions/booleans/useBooleansAdapter.js.map +1 -0
  616. package/dist/interactions/actions/clipboard/clipboardOps.js +94 -0
  617. package/dist/interactions/actions/clipboard/clipboardOps.js.map +1 -0
  618. package/dist/interactions/actions/clipboard/materializePaste.js +25 -0
  619. package/dist/interactions/actions/clipboard/materializePaste.js.map +1 -0
  620. package/dist/interactions/actions/clipboard/wireFormat.js +43 -0
  621. package/dist/interactions/actions/clipboard/wireFormat.js.map +1 -0
  622. package/dist/interactions/actions/clone/behaviors/cloneByAltDrag.js +26 -0
  623. package/dist/interactions/actions/clone/behaviors/cloneByAltDrag.js.map +1 -0
  624. package/dist/interactions/actions/defaultCommitAdapter.js +42 -0
  625. package/dist/interactions/actions/defaultCommitAdapter.js.map +1 -0
  626. package/dist/interactions/actions/defaults/align.js +71 -0
  627. package/dist/interactions/actions/defaults/align.js.map +1 -0
  628. package/dist/interactions/actions/defaults/anchorEditing.js +235 -0
  629. package/dist/interactions/actions/defaults/anchorEditing.js.map +1 -0
  630. package/dist/interactions/actions/defaults/areaSelect.js +75 -0
  631. package/dist/interactions/actions/defaults/areaSelect.js.map +1 -0
  632. package/dist/interactions/actions/defaults/booleans.js +52 -0
  633. package/dist/interactions/actions/defaults/booleans.js.map +1 -0
  634. package/dist/interactions/actions/defaults/cancelGesture.js +24 -0
  635. package/dist/interactions/actions/defaults/cancelGesture.js.map +1 -0
  636. package/dist/interactions/actions/defaults/clearSelection.js +19 -0
  637. package/dist/interactions/actions/defaults/clearSelection.js.map +1 -0
  638. package/dist/interactions/actions/defaults/clipboard.js +78 -0
  639. package/dist/interactions/actions/defaults/clipboard.js.map +1 -0
  640. package/dist/interactions/actions/defaults/clone.js +107 -0
  641. package/dist/interactions/actions/defaults/clone.js.map +1 -0
  642. package/dist/interactions/actions/defaults/createOutlines.js +47 -0
  643. package/dist/interactions/actions/defaults/createOutlines.js.map +1 -0
  644. package/dist/interactions/actions/defaults/createPaintAction.js +85 -0
  645. package/dist/interactions/actions/defaults/createPaintAction.js.map +1 -0
  646. package/dist/interactions/actions/defaults/delete.js +61 -0
  647. package/dist/interactions/actions/defaults/delete.js.map +1 -0
  648. package/dist/interactions/actions/defaults/distribute.js +66 -0
  649. package/dist/interactions/actions/defaults/distribute.js.map +1 -0
  650. package/dist/interactions/actions/defaults/duplicate.js +83 -0
  651. package/dist/interactions/actions/defaults/duplicate.js.map +1 -0
  652. package/dist/interactions/actions/defaults/editAnchors.js +100 -0
  653. package/dist/interactions/actions/defaults/editAnchors.js.map +1 -0
  654. package/dist/interactions/actions/defaults/enterPathEdit.js +29 -0
  655. package/dist/interactions/actions/defaults/enterPathEdit.js.map +1 -0
  656. package/dist/interactions/actions/defaults/enterTextEdit.js +20 -0
  657. package/dist/interactions/actions/defaults/enterTextEdit.js.map +1 -0
  658. package/dist/interactions/actions/defaults/escape.js +26 -0
  659. package/dist/interactions/actions/defaults/escape.js.map +1 -0
  660. package/dist/interactions/actions/defaults/exitPathEdit.js +22 -0
  661. package/dist/interactions/actions/defaults/exitPathEdit.js.map +1 -0
  662. package/dist/interactions/actions/defaults/flip.js +119 -0
  663. package/dist/interactions/actions/defaults/flip.js.map +1 -0
  664. package/dist/interactions/actions/defaults/freshNodeId.js +10 -0
  665. package/dist/interactions/actions/defaults/freshNodeId.js.map +1 -0
  666. package/dist/interactions/actions/defaults/group.js +131 -0
  667. package/dist/interactions/actions/defaults/group.js.map +1 -0
  668. package/dist/interactions/actions/defaults/icons/actionGlyphIcons.js +40 -0
  669. package/dist/interactions/actions/defaults/icons/actionGlyphIcons.js.map +1 -0
  670. package/dist/interactions/actions/defaults/icons/actionGlyphs.js +10 -0
  671. package/dist/interactions/actions/defaults/icons/actionGlyphs.js.map +1 -0
  672. package/dist/interactions/actions/defaults/icons/alignIcons.js +173 -0
  673. package/dist/interactions/actions/defaults/icons/alignIcons.js.map +1 -0
  674. package/dist/interactions/actions/defaults/icons/booleanIcons.js +171 -0
  675. package/dist/interactions/actions/defaults/icons/booleanIcons.js.map +1 -0
  676. package/dist/interactions/actions/defaults/icons/distributeIcons.js +63 -0
  677. package/dist/interactions/actions/defaults/icons/distributeIcons.js.map +1 -0
  678. package/dist/interactions/actions/defaults/icons/editIcons.js +280 -0
  679. package/dist/interactions/actions/defaults/icons/editIcons.js.map +1 -0
  680. package/dist/interactions/actions/defaults/icons/outlineIcons.js +53 -0
  681. package/dist/interactions/actions/defaults/icons/outlineIcons.js.map +1 -0
  682. package/dist/interactions/actions/defaults/ingest.js +58 -0
  683. package/dist/interactions/actions/defaults/ingest.js.map +1 -0
  684. package/dist/interactions/actions/defaults/insert.js +288 -0
  685. package/dist/interactions/actions/defaults/insert.js.map +1 -0
  686. package/dist/interactions/actions/defaults/insertPathAnchor.js +50 -0
  687. package/dist/interactions/actions/defaults/insertPathAnchor.js.map +1 -0
  688. package/dist/interactions/actions/defaults/lassoSelect.js +156 -0
  689. package/dist/interactions/actions/defaults/lassoSelect.js.map +1 -0
  690. package/dist/interactions/actions/defaults/move.js +760 -0
  691. package/dist/interactions/actions/defaults/move.js.map +1 -0
  692. package/dist/interactions/actions/defaults/nudge.js +110 -0
  693. package/dist/interactions/actions/defaults/nudge.js.map +1 -0
  694. package/dist/interactions/actions/defaults/pinchZoom.js +63 -0
  695. package/dist/interactions/actions/defaults/pinchZoom.js.map +1 -0
  696. package/dist/interactions/actions/defaults/reorder.js +143 -0
  697. package/dist/interactions/actions/defaults/reorder.js.map +1 -0
  698. package/dist/interactions/actions/defaults/requiresSelection.js +10 -0
  699. package/dist/interactions/actions/defaults/requiresSelection.js.map +1 -0
  700. package/dist/interactions/actions/defaults/resize.js +335 -0
  701. package/dist/interactions/actions/defaults/resize.js.map +1 -0
  702. package/dist/interactions/actions/defaults/rotate.js +184 -0
  703. package/dist/interactions/actions/defaults/rotate.js.map +1 -0
  704. package/dist/interactions/actions/defaults/selectAll.js +27 -0
  705. package/dist/interactions/actions/defaults/selectAll.js.map +1 -0
  706. package/dist/interactions/actions/defaults/setFill.js +27 -0
  707. package/dist/interactions/actions/defaults/setFill.js.map +1 -0
  708. package/dist/interactions/actions/defaults/setFillOpacity.js +15 -0
  709. package/dist/interactions/actions/defaults/setFillOpacity.js.map +1 -0
  710. package/dist/interactions/actions/defaults/setStroke.js +36 -0
  711. package/dist/interactions/actions/defaults/setStroke.js.map +1 -0
  712. package/dist/interactions/actions/defaults/setStrokeOpacity.js +21 -0
  713. package/dist/interactions/actions/defaults/setStrokeOpacity.js.map +1 -0
  714. package/dist/interactions/actions/defaults/slice.js +39 -0
  715. package/dist/interactions/actions/defaults/slice.js.map +1 -0
  716. package/dist/interactions/actions/defaults/sliceOps.js +60 -0
  717. package/dist/interactions/actions/defaults/sliceOps.js.map +1 -0
  718. package/dist/interactions/actions/defaults/toolActivate.js +35 -0
  719. package/dist/interactions/actions/defaults/toolActivate.js.map +1 -0
  720. package/dist/interactions/actions/defaults/toolResetToDefault.js +26 -0
  721. package/dist/interactions/actions/defaults/toolResetToDefault.js.map +1 -0
  722. package/dist/interactions/actions/defaults/undoRedo.js +51 -0
  723. package/dist/interactions/actions/defaults/undoRedo.js.map +1 -0
  724. package/dist/interactions/actions/defaults/viewportDragPan.js +88 -0
  725. package/dist/interactions/actions/defaults/viewportDragPan.js.map +1 -0
  726. package/dist/interactions/actions/defaults/viewportWheelPan.js +57 -0
  727. package/dist/interactions/actions/defaults/viewportWheelPan.js.map +1 -0
  728. package/dist/interactions/actions/defaults/viewportZoom.js +143 -0
  729. package/dist/interactions/actions/defaults/viewportZoom.js.map +1 -0
  730. package/dist/interactions/actions/distribute/distribute.js +42 -0
  731. package/dist/interactions/actions/distribute/distribute.js.map +1 -0
  732. package/dist/interactions/actions/distribute/plan.js +29 -0
  733. package/dist/interactions/actions/distribute/plan.js.map +1 -0
  734. package/dist/interactions/actions/edit-anchors/geometry.js +61 -0
  735. package/dist/interactions/actions/edit-anchors/geometry.js.map +1 -0
  736. package/dist/interactions/actions/edit-anchors/handles.js +43 -0
  737. package/dist/interactions/actions/edit-anchors/handles.js.map +1 -0
  738. package/dist/interactions/actions/flip/helpers.js +35 -0
  739. package/dist/interactions/actions/flip/helpers.js.map +1 -0
  740. package/dist/interactions/actions/geometryProjection.js +18 -0
  741. package/dist/interactions/actions/geometryProjection.js.map +1 -0
  742. package/dist/interactions/actions/gestureLifecycle.js +44 -0
  743. package/dist/interactions/actions/gestureLifecycle.js.map +1 -0
  744. package/dist/interactions/actions/lasso-select/behaviors/selectFromLasso.js +39 -0
  745. package/dist/interactions/actions/lasso-select/behaviors/selectFromLasso.js.map +1 -0
  746. package/dist/interactions/actions/move/behaviors/snapBackOrDelete.js +36 -0
  747. package/dist/interactions/actions/move/behaviors/snapBackOrDelete.js.map +1 -0
  748. package/dist/interactions/actions/move/behaviors/snapToContainer.js +67 -0
  749. package/dist/interactions/actions/move/behaviors/snapToContainer.js.map +1 -0
  750. package/dist/interactions/actions/move/gestureAdapter.js +37 -0
  751. package/dist/interactions/actions/move/gestureAdapter.js.map +1 -0
  752. package/dist/interactions/actions/outlines/createOutlines.js +84 -0
  753. package/dist/interactions/actions/outlines/createOutlines.js.map +1 -0
  754. package/dist/interactions/actions/outlines/useCreateOutlinesAdapter.js +9 -0
  755. package/dist/interactions/actions/outlines/useCreateOutlinesAdapter.js.map +1 -0
  756. package/dist/interactions/actions/planeInput.js +181 -0
  757. package/dist/interactions/actions/planeInput.js.map +1 -0
  758. package/dist/interactions/actions/poseDescriptorDep.js +9 -0
  759. package/dist/interactions/actions/poseDescriptorDep.js.map +1 -0
  760. package/dist/interactions/actions/poseFrame.js +38 -0
  761. package/dist/interactions/actions/poseFrame.js.map +1 -0
  762. package/dist/interactions/actions/previewOverrides.js +25 -0
  763. package/dist/interactions/actions/previewOverrides.js.map +1 -0
  764. package/dist/interactions/actions/resize/autoPoseDescriptor.js +31 -0
  765. package/dist/interactions/actions/resize/autoPoseDescriptor.js.map +1 -0
  766. package/dist/interactions/actions/resize/behaviors/clampMinSize.js +18 -0
  767. package/dist/interactions/actions/resize/behaviors/clampMinSize.js.map +1 -0
  768. package/dist/interactions/actions/resize/behaviors/index.js +8 -0
  769. package/dist/interactions/actions/resize/behaviors/index.js.map +1 -0
  770. package/dist/interactions/actions/resize/behaviors/lockAspect.js +24 -0
  771. package/dist/interactions/actions/resize/behaviors/lockAspect.js.map +1 -0
  772. package/dist/interactions/actions/resize/cornerHandles.js +72 -0
  773. package/dist/interactions/actions/resize/cornerHandles.js.map +1 -0
  774. package/dist/interactions/actions/resolveOverlays.js +60 -0
  775. package/dist/interactions/actions/resolveOverlays.js.map +1 -0
  776. package/dist/interactions/actions/resolvePreviews.js +61 -0
  777. package/dist/interactions/actions/resolvePreviews.js.map +1 -0
  778. package/dist/interactions/actions/rotate/geometry.js +46 -0
  779. package/dist/interactions/actions/rotate/geometry.js.map +1 -0
  780. package/dist/interactions/actions/rotate/handle.js +27 -0
  781. package/dist/interactions/actions/rotate/handle.js.map +1 -0
  782. package/dist/interactions/actions/spatialReference.js +42 -0
  783. package/dist/interactions/actions/spatialReference.js.map +1 -0
  784. package/dist/interactions/actions/useStandardActions.js +142 -0
  785. package/dist/interactions/actions/useStandardActions.js.map +1 -0
  786. package/dist/interactions/gestures/dragGesture/dragGesture.js +111 -0
  787. package/dist/interactions/gestures/dragGesture/dragGesture.js.map +1 -0
  788. package/dist/interactions/gestures/dragRadial/dragRadial.js +117 -0
  789. package/dist/interactions/gestures/dragRadial/dragRadial.js.map +1 -0
  790. package/dist/interactions/gestures/dragRect/dragRect.js +164 -0
  791. package/dist/interactions/gestures/dragRect/dragRect.js.map +1 -0
  792. package/dist/interactions/gestures/handleDrag/handleDrag.js +46 -0
  793. package/dist/interactions/gestures/handleDrag/handleDrag.js.map +1 -0
  794. package/dist/interactions/gestures/pointerDrag/pointerDrag.js +118 -0
  795. package/dist/interactions/gestures/pointerDrag/pointerDrag.js.map +1 -0
  796. package/dist/interactions/gestures/shared/originProjection.js +42 -0
  797. package/dist/interactions/gestures/shared/originProjection.js.map +1 -0
  798. package/dist/interactions/gestures/shared/screenTolerance.js +21 -0
  799. package/dist/interactions/gestures/shared/screenTolerance.js.map +1 -0
  800. package/dist/interactions/gestures/shared/snap.js +24 -0
  801. package/dist/interactions/gestures/shared/snap.js.map +1 -0
  802. package/dist/interactions/gestures/thresholdDrag/thresholdDrag.js +30 -0
  803. package/dist/interactions/gestures/thresholdDrag/thresholdDrag.js.map +1 -0
  804. package/dist/layout/arrivals.js +36 -0
  805. package/dist/layout/arrivals.js.map +1 -0
  806. package/dist/{math-MCQcf_gc.d.ts → math-Drrw4ewZ.d.ts} +8 -116
  807. package/dist/math.d.ts +4 -5
  808. package/dist/math.js +6 -4
  809. package/dist/mesh.d.ts +268 -0
  810. package/dist/mesh.js +7 -0
  811. package/dist/move.d.ts +7 -49
  812. package/dist/move.js +3 -142
  813. package/dist/originProjection-DEklpDc_.d.ts +57 -0
  814. package/dist/patterns-builtin.js +3 -3
  815. package/dist/{poseDescriptor-rZa9W5hJ.d.ts → poseDescriptor-D-OH-tu5.d.ts} +0 -4
  816. package/dist/registerProgram-ateHDGjw.d.ts +193 -0
  817. package/dist/renderer/DrawCommand.js +6 -0
  818. package/dist/renderer/DrawCommand.js.map +1 -0
  819. package/dist/renderer/WeaselRenderer.js +328 -0
  820. package/dist/renderer/WeaselRenderer.js.map +1 -0
  821. package/dist/renderer/cache/GLImageCache.js +64 -0
  822. package/dist/renderer/cache/GLImageCache.js.map +1 -0
  823. package/dist/renderer/cache/GLMeshCache.js +102 -0
  824. package/dist/renderer/cache/GLMeshCache.js.map +1 -0
  825. package/dist/renderer/cache/GLTextureCache.js +51 -0
  826. package/dist/renderer/cache/GLTextureCache.js.map +1 -0
  827. package/dist/renderer/cache/GradientRampAtlas.js +82 -0
  828. package/dist/renderer/cache/GradientRampAtlas.js.map +1 -0
  829. package/dist/renderer/cache/cache.js +13 -0
  830. package/dist/renderer/cache/cache.js.map +1 -0
  831. package/dist/renderer/cache/markerCommandCache.js +59 -0
  832. package/dist/renderer/cache/markerCommandCache.js.map +1 -0
  833. package/dist/renderer/cache/outlineMeshCache.js +15 -0
  834. package/dist/renderer/cache/outlineMeshCache.js.map +1 -0
  835. package/dist/renderer/cache/outlineStrokeMeshCache.js +31 -0
  836. package/dist/renderer/cache/outlineStrokeMeshCache.js.map +1 -0
  837. package/dist/renderer/cache/strokeMeshCache.js +44 -0
  838. package/dist/renderer/cache/strokeMeshCache.js.map +1 -0
  839. package/dist/renderer/cullDrawCommands.js +89 -0
  840. package/dist/renderer/cullDrawCommands.js.map +1 -0
  841. package/dist/renderer/draw.js +1109 -0
  842. package/dist/renderer/draw.js.map +1 -0
  843. package/dist/renderer/drawBatch.js +168 -0
  844. package/dist/renderer/drawBatch.js.map +1 -0
  845. package/dist/renderer/effects/EffectTargets.js +45 -0
  846. package/dist/renderer/effects/EffectTargets.js.map +1 -0
  847. package/dist/renderer/effects/builtins.js +31 -0
  848. package/dist/renderer/effects/builtins.js.map +1 -0
  849. package/dist/renderer/effects/composite.js +9 -0
  850. package/dist/renderer/effects/composite.js.map +1 -0
  851. package/dist/renderer/effects/effectPrelude.js +10 -0
  852. package/dist/renderer/effects/effectPrelude.js.map +1 -0
  853. package/dist/renderer/effects/types.js +10 -0
  854. package/dist/renderer/effects/types.js.map +1 -0
  855. package/dist/renderer/index.js +19 -0
  856. package/dist/renderer/math/color.js +341 -0
  857. package/dist/renderer/math/color.js.map +1 -0
  858. package/dist/renderer/math/mat3.js +71 -0
  859. package/dist/renderer/math/mat3.js.map +1 -0
  860. package/dist/renderer/math/patternSpace.js +22 -0
  861. package/dist/renderer/math/patternSpace.js.map +1 -0
  862. package/dist/renderer/math/viewToMat3.js +19 -0
  863. package/dist/renderer/math/viewToMat3.js.map +1 -0
  864. package/dist/renderer/paintResources.js +18 -0
  865. package/dist/renderer/paintResources.js.map +1 -0
  866. package/dist/renderer/paintScratch.js +37 -0
  867. package/dist/renderer/paintScratch.js.map +1 -0
  868. package/dist/renderer/shaders/ShaderProgram.js +74 -0
  869. package/dist/renderer/shaders/ShaderProgram.js.map +1 -0
  870. package/dist/renderer/shaders/batchFill.js +118 -0
  871. package/dist/renderer/shaders/batchFill.js.map +1 -0
  872. package/dist/renderer/shaders/customPrelude.js +34 -0
  873. package/dist/renderer/shaders/customPrelude.js.map +1 -0
  874. package/dist/renderer/shaders/extractUniformNames.js +184 -0
  875. package/dist/renderer/shaders/extractUniformNames.js.map +1 -0
  876. package/dist/renderer/shaders/glyphPaint.js +61 -0
  877. package/dist/renderer/shaders/glyphPaint.js.map +1 -0
  878. package/dist/renderer/shaders/gradFill.js +30 -0
  879. package/dist/renderer/shaders/gradFill.js.map +1 -0
  880. package/dist/renderer/shaders/imageFill.js +14 -0
  881. package/dist/renderer/shaders/imageFill.js.map +1 -0
  882. package/dist/renderer/shaders/pathFill.js +13 -0
  883. package/dist/renderer/shaders/pathFill.js.map +1 -0
  884. package/dist/renderer/shaders/patternFill.js +24 -0
  885. package/dist/renderer/shaders/patternFill.js.map +1 -0
  886. package/dist/renderer/shaders/registerProgram.js +18 -0
  887. package/dist/renderer/shaders/registerProgram.js.map +1 -0
  888. package/dist/renderer/spriteSheet.js +14 -0
  889. package/dist/renderer/spriteSheet.js.map +1 -0
  890. package/dist/renderer/state/GroupState.js +77 -0
  891. package/dist/renderer/state/GroupState.js.map +1 -0
  892. package/dist/renderer/syntheticItalic.js +6 -0
  893. package/dist/renderer/syntheticItalic.js.map +1 -0
  894. package/dist/renderer/textures/registerTexture.js +14 -0
  895. package/dist/renderer/textures/registerTexture.js.map +1 -0
  896. package/dist/renderer.d.ts +11 -21
  897. package/dist/renderer.js +18 -13
  898. package/dist/resize.d.ts +10 -46
  899. package/dist/resize.js +7 -5
  900. package/dist/routing.js +2 -3
  901. package/dist/scheduling/useVisibleRaf.js +69 -0
  902. package/dist/scheduling/useVisibleRaf.js.map +1 -0
  903. package/dist/style.css +2 -0
  904. package/dist/test-hook/createTestHook.js +39 -0
  905. package/dist/test-hook/createTestHook.js.map +1 -0
  906. package/dist/test-hook/install.js +12 -0
  907. package/dist/test-hook/install.js.map +1 -0
  908. package/dist/test-seams-fYf6m5pu.d.ts +356 -0
  909. package/dist/test-seams.d.ts +6 -0
  910. package/dist/test-seams.js +3 -0
  911. package/dist/tools/builtin/ellipse/useEllipseTool.js +33 -0
  912. package/dist/tools/builtin/ellipse/useEllipseTool.js.map +1 -0
  913. package/dist/tools/builtin/eyedropper/useEyedropperTool.js +55 -0
  914. package/dist/tools/builtin/eyedropper/useEyedropperTool.js.map +1 -0
  915. package/dist/tools/builtin/hand/dragPanContribution.js +17 -0
  916. package/dist/tools/builtin/hand/dragPanContribution.js.map +1 -0
  917. package/dist/tools/builtin/hand/useHandTool.js +31 -0
  918. package/dist/tools/builtin/hand/useHandTool.js.map +1 -0
  919. package/dist/tools/builtin/image/useImageTool.js +41 -0
  920. package/dist/tools/builtin/image/useImageTool.js.map +1 -0
  921. package/dist/tools/builtin/lasso/useLassoTool.js +42 -0
  922. package/dist/tools/builtin/lasso/useLassoTool.js.map +1 -0
  923. package/dist/tools/builtin/line/useLineTool.js +33 -0
  924. package/dist/tools/builtin/line/useLineTool.js.map +1 -0
  925. package/dist/tools/builtin/pen/usePenTool.js +414 -0
  926. package/dist/tools/builtin/pen/usePenTool.js.map +1 -0
  927. package/dist/tools/builtin/pencil/usePencilTool.js +36 -0
  928. package/dist/tools/builtin/pencil/usePencilTool.js.map +1 -0
  929. package/dist/tools/builtin/pickTopMostHit.js +45 -0
  930. package/dist/tools/builtin/pickTopMostHit.js.map +1 -0
  931. package/dist/tools/builtin/polygon/usePolygonTool.js +81 -0
  932. package/dist/tools/builtin/polygon/usePolygonTool.js.map +1 -0
  933. package/dist/tools/builtin/rect/useRectTool.js +32 -0
  934. package/dist/tools/builtin/rect/useRectTool.js.map +1 -0
  935. package/dist/tools/builtin/select/selectionContributions.js +109 -0
  936. package/dist/tools/builtin/select/selectionContributions.js.map +1 -0
  937. package/dist/tools/builtin/select/useSelectTool.js +162 -0
  938. package/dist/tools/builtin/select/useSelectTool.js.map +1 -0
  939. package/dist/tools/builtin/shared/insertToolOptions.js +8 -0
  940. package/dist/tools/builtin/shared/insertToolOptions.js.map +1 -0
  941. package/dist/tools/builtin/slice/useSliceTool.js +263 -0
  942. package/dist/tools/builtin/slice/useSliceTool.js.map +1 -0
  943. package/dist/tools/builtin/star/useStarTool.js +82 -0
  944. package/dist/tools/builtin/star/useStarTool.js.map +1 -0
  945. package/dist/tools/builtin/text/useTextTool.js +177 -0
  946. package/dist/tools/builtin/text/useTextTool.js.map +1 -0
  947. package/dist/tools/overlayBinding.js +8 -0
  948. package/dist/tools/overlayBinding.js.map +1 -0
  949. package/dist/tools/prefs.js +47 -0
  950. package/dist/tools/prefs.js.map +1 -0
  951. package/dist/tools/useKeybindings.js +66 -0
  952. package/dist/tools/useKeybindings.js.map +1 -0
  953. package/dist/{types-D-9QWBy5.d.ts → types-A37hYkeR.d.ts} +185 -15
  954. package/dist/{types-qYpyTAiZ.d.ts → types-B_9g6hMM.d.ts} +32 -6
  955. package/dist/util/color.js +26 -0
  956. package/dist/util/color.js.map +1 -0
  957. package/dist/util/constrainTo45.js +17 -0
  958. package/dist/util/constrainTo45.js.map +1 -0
  959. package/dist/util/paint.js +72 -0
  960. package/dist/util/paint.js.map +1 -0
  961. package/dist/version.js +6 -0
  962. package/dist/version.js.map +1 -0
  963. package/package.json +31 -19
  964. package/dist/chunk-3TY6FHAF.js +0 -170
  965. package/dist/chunk-3TY6FHAF.js.map +0 -1
  966. package/dist/chunk-DGWNNKGD.js +0 -248
  967. package/dist/chunk-DGWNNKGD.js.map +0 -1
  968. package/dist/chunk-G4ZGQMY7.js +0 -33372
  969. package/dist/chunk-G4ZGQMY7.js.map +0 -1
  970. package/dist/chunk-L5YNZYEG.js +0 -648
  971. package/dist/chunk-L5YNZYEG.js.map +0 -1
  972. package/dist/chunk-LU4IJ52W.js +0 -111
  973. package/dist/chunk-LU4IJ52W.js.map +0 -1
  974. package/dist/chunk-M24CLARN.js +0 -28
  975. package/dist/chunk-M24CLARN.js.map +0 -1
  976. package/dist/chunk-NE27EOLP.js +0 -146
  977. package/dist/chunk-NE27EOLP.js.map +0 -1
  978. package/dist/chunk-PNNZSYRD.js +0 -318
  979. package/dist/chunk-PNNZSYRD.js.map +0 -1
  980. package/dist/chunk-UPZY4ART.js +0 -29
  981. package/dist/chunk-UPZY4ART.js.map +0 -1
  982. package/dist/chunk-WPNA6L5O.js +0 -250
  983. package/dist/chunk-WPNA6L5O.js.map +0 -1
  984. package/dist/chunk-XMAWPGTK.js +0 -128
  985. package/dist/chunk-XMAWPGTK.js.map +0 -1
  986. package/dist/clipboard.js.map +0 -1
  987. package/dist/clone.js.map +0 -1
  988. package/dist/grid-CY5UKlZh.d.ts +0 -98
  989. package/dist/index.css +0 -62
  990. package/dist/index.css.map +0 -1
  991. package/dist/index.js.map +0 -1
  992. package/dist/insert.d.ts +0 -36
  993. package/dist/insert.js +0 -81
  994. package/dist/insert.js.map +0 -1
  995. package/dist/math.js.map +0 -1
  996. package/dist/move.js.map +0 -1
  997. package/dist/path-JEV2c5If.d.ts +0 -48
  998. package/dist/patterns-builtin.js.map +0 -1
  999. package/dist/renderer.css +0 -62
  1000. package/dist/renderer.css.map +0 -1
  1001. package/dist/renderer.js.map +0 -1
  1002. package/dist/resize.js.map +0 -1
  1003. package/dist/routing.js.map +0 -1
  1004. package/dist/types-D2tTKEU0.d.ts +0 -18
@@ -0,0 +1,329 @@
1
+ import { useVisibleRaf as e } from "../scheduling/useVisibleRaf.js";
2
+ import { createLoop as t, createTweenLoop as n } from "./loop.js";
3
+ import { createStagger as r } from "./stagger.js";
4
+ import { createTimeline as i } from "./timeline/createTimeline.js";
5
+ import { ColorOverrideRegistry as a } from "./colorRegistry.js";
6
+ import { AnimatorEventHub as o } from "./observe.js";
7
+ import { SPRING_PRESETS as s, easeOut as c, resolveEasing as l } from "@weasel-js/geom";
8
+ import { useCallback as u, useEffect as d, useInsertionEffect as f, useMemo as p, useRef as m } from "react";
9
+ import { useLatest as h } from "@weasel-js/react";
10
+ //#region src/animation/useAnimator.ts
11
+ var g = (e, t, n) => e + (t - e) * n;
12
+ function _(e) {
13
+ let t = e.preset ? s[e.preset] : null;
14
+ return {
15
+ stiffness: e.stiffness ?? t?.stiffness ?? 170,
16
+ damping: e.damping ?? t?.damping ?? 26,
17
+ mass: e.mass ?? t?.mass ?? 1
18
+ };
19
+ }
20
+ function v(s = {}) {
21
+ let v = h(s), y = m(/* @__PURE__ */ new Map()), b = m(1), x = m(0), S = m(1), C = m(!1), w = m(new a()), T = m(/* @__PURE__ */ new Set()), E = m(null), D = e(u((e) => {
22
+ E.current?.(e);
23
+ }, []), {
24
+ requestFrame: s.requestFrame,
25
+ cancelFrame: s.cancelFrame,
26
+ onResume: () => {
27
+ for (let e of y.current.values()) e.lastRealNow = null;
28
+ }
29
+ }), O = h(D), k = m(!0), A = m(!1), j = () => !k.current && (A.current || (A.current = !0, (typeof process > "u" || process.env.NODE_ENV !== "production") && console.error("weasel useAnimator: animation tick fired after the host component unmounted. This usually means cleanup logic was bypassed — check for refactors that removed the unmount effect or replaced cancelAll with a custom path.")), !0), { api: M, tickAll: N } = p(() => {
30
+ let e = () => (v.current.now ?? (typeof performance < "u" ? performance.now.bind(performance) : Date.now))(), a = {
31
+ setTimer: (e, t) => (v.current.setTimer ?? ((e, t) => setTimeout(e, t)))(e, t),
32
+ clearTimer: (e) => (v.current.clearTimer ?? ((e) => clearTimeout(e)))(e),
33
+ now: e
34
+ }, s = /* @__PURE__ */ new Map(), u = (e) => {
35
+ let t = s.get(e);
36
+ if (t) {
37
+ s.delete(e);
38
+ for (let e of t) e();
39
+ }
40
+ }, d = (e, t) => {
41
+ let n = s.get(e) ?? [];
42
+ return n.push(t), s.set(e, n), () => {
43
+ let n = s.get(e);
44
+ if (!n) return;
45
+ let r = n.indexOf(t);
46
+ r >= 0 && n.splice(r, 1), n.length === 0 && s.delete(e);
47
+ };
48
+ }, f = new o(), p = (e) => {
49
+ if (!e.info) {
50
+ let t = {
51
+ id: e.id,
52
+ kind: e.kind
53
+ };
54
+ e.cancelKey != null && (t.key = e.cancelKey), e.label != null && (t.label = e.label), e.info = t;
55
+ }
56
+ return e.info;
57
+ }, m = (e) => {
58
+ let t = y.current.get(e);
59
+ t && !t.ended && (t.ended = !0, f.watched && f.emit({
60
+ type: "end",
61
+ animation: p(t)
62
+ }));
63
+ }, h = (e, t) => {
64
+ let n = y.current.get(e);
65
+ n && (n.onCancel?.(), y.current.delete(e), u(e), f.watched && !n.ended && f.emit(t ? {
66
+ type: "interrupt",
67
+ animation: p(n),
68
+ by: p(t)
69
+ } : {
70
+ type: "cancel",
71
+ animation: p(n)
72
+ }));
73
+ }, E = (e) => {
74
+ let t = [];
75
+ for (let n of y.current.values()) {
76
+ let r = n.lastRealNow == null ? 0 : Math.max(0, e - n.lastRealNow);
77
+ n.lastRealNow = e;
78
+ let i = C.current ? 0 : S.current * (n.paused ? 0 : n.timeScale);
79
+ n.virtualNow += r * i, x.current += 1;
80
+ try {
81
+ n.tick(n.virtualNow, i) && t.push(n);
82
+ } finally {
83
+ --x.current;
84
+ }
85
+ }
86
+ for (let e of t) y.current.get(e.id) === e && (m(e.id), y.current.delete(e.id), u(e.id));
87
+ for (let e of T.current) try {
88
+ e();
89
+ } catch (e) {
90
+ console.error("useAnimator: onTick subscriber threw", e);
91
+ }
92
+ y.current.size > 0 && O.current.request();
93
+ }, D = () => {
94
+ y.current.size !== 0 && O.current.request();
95
+ }, k = (e, t) => {
96
+ let n = [];
97
+ for (let t of y.current.values()) t.cancelKey === e && n.push(t.id);
98
+ for (let e of n) h(e, t);
99
+ }, A = (t) => {
100
+ let n = t;
101
+ return t.cancelKey != null && !t.keepExisting && k(t.cancelKey, n), n.paused = !1, n.timeScale = 1, n.virtualNow = 0, n.lastRealNow = e(), y.current.set(n.id, n), f.watched && f.emit({
102
+ type: "start",
103
+ animation: p(n)
104
+ }), D(), {
105
+ id: n.id,
106
+ cancel: () => h(n.id),
107
+ pause: () => {
108
+ let e = y.current.get(n.id);
109
+ e && (e.paused = !0);
110
+ },
111
+ resume: () => {
112
+ let e = y.current.get(n.id);
113
+ e && (e.paused = !1);
114
+ },
115
+ setTimeScale: (e) => {
116
+ let t = y.current.get(n.id);
117
+ t && (t.timeScale = e);
118
+ },
119
+ timeScale: () => y.current.get(n.id)?.timeScale ?? 1,
120
+ isPaused: () => y.current.get(n.id)?.paused ?? !1
121
+ };
122
+ }, M = ({ kind: e, cancelKey: t, label: n }) => {
123
+ let r = b.current++, i, a = A({
124
+ id: r,
125
+ kind: e,
126
+ cancelKey: t,
127
+ label: n,
128
+ tick: () => !1,
129
+ onCancel: () => i?.()
130
+ });
131
+ return {
132
+ id: a.id,
133
+ cancel: a.cancel,
134
+ pause: a.pause,
135
+ resume: a.resume,
136
+ setTimeScale: a.setTimeScale,
137
+ timeScale: a.timeScale,
138
+ isPaused: a.isPaused,
139
+ setOnCancel: (e) => {
140
+ i = e;
141
+ },
142
+ finish: () => {
143
+ y.current.has(r) && (m(r), y.current.delete(r), u(r));
144
+ },
145
+ cancelKey: t
146
+ };
147
+ }, N = (e) => {
148
+ let t = b.current++, n = l(e.easing ?? c), r = e.interpolator ? e.interpolator(e.from, e.to) : null, i = r ? null : e.interpolate ?? ((e, t, n) => {
149
+ if (typeof e == "number" && typeof t == "number") return g(e, t, n);
150
+ throw Error("tween: interpolate or interpolator is required for non-numeric T");
151
+ }), a = !1;
152
+ return A({
153
+ id: t,
154
+ kind: "tween",
155
+ cancelKey: e.cancelKey,
156
+ label: e.label,
157
+ progress: (t) => e.ms <= 0 ? 1 : Math.min(1, t / e.ms),
158
+ tick(o) {
159
+ if (j()) return !0;
160
+ let s = o - 0, c = e.ms <= 0 ? 1 : Math.min(1, Math.max(0, s / e.ms)), l = n(c), u = r ? r(l) : i(e.from, e.to, l);
161
+ return e.onTick(u), c >= 1 && !a && (a = !0, y.current.has(t) && (m(t), e.onDone?.()), !0);
162
+ }
163
+ });
164
+ }, P = (e, t = "physics") => {
165
+ let n = b.current++;
166
+ if (typeof e.from != "number" && (!e.add || !e.subtract || !e.scale || !e.magnitude)) throw Error("physics: add/subtract/scale/magnitude are required for non-numeric T");
167
+ let r = e.add ?? ((e, t) => e + t), i = e.subtract ?? ((e, t) => e - t), a = e.scale ?? ((e, t) => e * t), o = e.magnitude ?? ((e) => Math.abs(e)), { stiffness: s, damping: c, mass: l } = _(e), u = e.restThreshold ?? .01, d = e.to ?? null, f = e.from, p = e.velocity ?? a(e.from, 0), h = null;
168
+ return {
169
+ ...A({
170
+ id: n,
171
+ kind: t,
172
+ cancelKey: e.cancelKey,
173
+ label: e.label,
174
+ tick(t) {
175
+ if (j()) return !0;
176
+ if (h == null) return h = t, d == null && o(p) < u ? (m(n), e.onDone?.(), !0) : (e.onTick(f), !1);
177
+ let g = Math.min(.064, (t - h) / 1e3);
178
+ h = t;
179
+ let _ = i(f, d ?? f), v = a(_, d == null ? 0 : -s), y = a(p, -c), b = a(r(v, y), 1 / l);
180
+ p = r(p, a(b, g)), f = r(f, a(p, g)), e.onTick(f);
181
+ let x = o(p) < u, S = d == null || o(i(f, d)) < u;
182
+ return x && S ? (d != null && e.onTick(d), m(n), e.onDone?.(), !0) : !1;
183
+ }
184
+ }),
185
+ setTarget: (e) => {
186
+ d = e;
187
+ },
188
+ setVelocity: (e) => {
189
+ p = e;
190
+ }
191
+ };
192
+ }, F = {
193
+ tween: N,
194
+ spring: (e) => P(e, "spring"),
195
+ decay: (e) => {
196
+ let t = e.friction ?? .95, n = -Math.log(t);
197
+ return P({
198
+ from: e.from,
199
+ to: null,
200
+ velocity: e.velocity,
201
+ stiffness: 0,
202
+ damping: n,
203
+ mass: 1,
204
+ restThreshold: e.threshold ?? .5,
205
+ add: e.add,
206
+ subtract: (t, n) => e.add(t, e.scale(n, -1)),
207
+ scale: e.scale,
208
+ magnitude: e.magnitude,
209
+ onTick: e.onTick,
210
+ onDone: e.onDone,
211
+ cancelKey: e.cancelKey,
212
+ label: e.label
213
+ }, "decay");
214
+ },
215
+ physics: P,
216
+ cancel: (e) => h(e.id),
217
+ cancelKey: (e) => k(e),
218
+ cancelAll: () => {
219
+ let e = [];
220
+ for (let t of y.current.values()) t.onCancel?.(), e.push(t);
221
+ y.current.clear();
222
+ for (let t of e) u(t.id);
223
+ if (f.watched) for (let t of e) f.emit({
224
+ type: "cancel",
225
+ animation: p(t)
226
+ });
227
+ O.current.cancel();
228
+ },
229
+ isActive: (e) => {
230
+ if (e == null) return y.current.size > 0;
231
+ for (let t of y.current.values()) if (t.cancelKey === e) return !0;
232
+ return !1;
233
+ },
234
+ isTicking: () => x.current > 0,
235
+ pause: () => {
236
+ C.current = !0;
237
+ },
238
+ resume: () => {
239
+ C.current = !1;
240
+ },
241
+ isPaused: () => C.current,
242
+ setTimeScale: (e) => {
243
+ S.current = e;
244
+ },
245
+ timeScale: () => S.current,
246
+ pauseKey: (e) => {
247
+ for (let t of y.current.values()) t.cancelKey === e && (t.paused = !0);
248
+ },
249
+ resumeKey: (e) => {
250
+ for (let t of y.current.values()) t.cancelKey === e && (t.paused = !1);
251
+ },
252
+ setTimeScaleByKey: (e, t) => {
253
+ for (let n of y.current.values()) n.cancelKey === e && (n.timeScale = t);
254
+ },
255
+ loop: (e, n) => t(M, e, n),
256
+ tweenLoop: (e) => n(F, M, e),
257
+ stagger: ((e, t, n, i) => r(F, a, M, d, e, t, n, i)),
258
+ timeline: (e) => {
259
+ let t = b.current++, n = () => {
260
+ let e = y.current.get(t);
261
+ return e && p(e);
262
+ };
263
+ return i(A, t, e, {
264
+ get watched() {
265
+ return f.watched;
266
+ },
267
+ fire: (e, t, r, i) => {
268
+ let a = n();
269
+ a && f.emit({
270
+ type: "fire",
271
+ animation: a,
272
+ track: e,
273
+ path: t.slice(),
274
+ event: r,
275
+ lateBy: i
276
+ });
277
+ },
278
+ lap: (e) => {
279
+ let t = n();
280
+ t && f.emit({
281
+ type: "lap",
282
+ animation: t,
283
+ lap: e
284
+ });
285
+ }
286
+ });
287
+ },
288
+ colorOverrides: w.current,
289
+ onTick: (e) => (T.current.add(e), () => {
290
+ T.current.delete(e);
291
+ }),
292
+ keepAlive: () => {
293
+ let e = M({ kind: "keepAlive" });
294
+ return () => e.cancel();
295
+ },
296
+ watch: (e) => f.add(e),
297
+ live: () => {
298
+ let e = [];
299
+ for (let t of y.current.values()) {
300
+ let n = {
301
+ ...p(t),
302
+ paused: t.paused,
303
+ timeScale: t.timeScale,
304
+ elapsed: t.virtualNow,
305
+ ...t.progress ? { progress: t.progress(t.virtualNow) } : {}
306
+ };
307
+ e.push(n);
308
+ }
309
+ return e;
310
+ }
311
+ };
312
+ return {
313
+ api: F,
314
+ tickAll: E
315
+ };
316
+ }, [O, v]);
317
+ return f(() => {
318
+ E.current = N;
319
+ }, [N]), d(() => {
320
+ let e = w.current;
321
+ return k.current = !0, () => {
322
+ k.current = !1, M.cancelAll(), e.clearAll();
323
+ };
324
+ }, [M]), M;
325
+ }
326
+ //#endregion
327
+ export { v as useAnimator };
328
+
329
+ //# sourceMappingURL=useAnimator.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useAnimator.js","names":["numericLerp","a","b","t","resolveSpringConstants","preset","o","SPRING_PRESETS","useAnimator","optsRef","useLatest","opts","animations","useRef","nextId","tickDepth","globalTimeScale","globalPaused","colorOverrides","ColorOverrideRegistry","tickSubscribers","tickAllRef","frameLoop","useVisibleRaf","useCallback","anim","frameLoopRef","mountedRef","trippedRef","tripwire","useMemo","now","staggerTimers","c","m","cb","ms","x","h","completionListeners","fireCompletion","ls","id","watchCompletion","cur","idx","hub","AnimatorEventHub","infoOf","info","reportEnd","retire","by","tickAll","finished","realDt","scale","sub","err","ensureLoop","cancelByKey","ids","key","register","seed","s","createSupervisor","onCancelCb","base","tween","easing","resolveEasing","easeOut","factoryFn","perTickInterp","lastValueEmitted","virtualNow","elapsed","nowMs","eased","value","physics","add","subtract","v","k","magnitude","kBase","restThreshold","target","velocity","lastTime","dt","displacement","springForce","dampingForce","damping","accel","mass","velRested","posRested","newTo","api","friction","handle","retired","createLoop","factory","loopOpts","createTweenLoop","tweenLoopOpts","createStagger","items","delay","staggerOpts","createTimeline","animation","path","sup","listener","rows","row","useInsertionEffect","useEffect","overrides"],"sources":["../../src/animation/useAnimator.ts"],"sourcesContent":["import { useCallback, useEffect, useInsertionEffect, useMemo, useRef } from 'react';\nimport { useLatest } from '@weasel-js/react';\nimport { useVisibleRaf } from '../scheduling/useVisibleRaf';\nimport { easeOut, SPRING_PRESETS, resolveEasing } from '@weasel-js/geom';\nimport { createLoop, createTweenLoop } from './loop';\nimport { createStagger, type StaggerTimers } from './stagger';\nimport { createTimeline } from './timeline/createTimeline';\nimport { ColorOverrideRegistry } from './colorRegistry';\nimport { AnimatorEventHub } from './observe';\nimport type { Supervisor, SupervisorOptions, WatchCompletion } from './supervisor';\nimport type {\n AnimationHandle,\n AnimationInfo,\n AnimationKind,\n Animator,\n TweenOptions,\n SpringOptions,\n DecayOptions,\n PhysicsOptions,\n PhysicsHandle,\n UseAnimatorOptions,\n LiveAnimation,\n} from './types';\nimport type { TimelineOptions } from './timeline/types';\n\ninterface ActiveAnimation {\n id: number;\n kind: AnimationKind;\n cancelKey?: string;\n label?: string;\n /** Built the first time something reports on this entry, then shared. */\n info?: AnimationInfo;\n /** 0–1 where the animation has an end to measure against. */\n progress?(virtualNow: number): number;\n /** Its `end` is reported, though the entry stays on the table until the\n * frame's ticks are done. */\n ended?: boolean;\n paused: boolean;\n timeScale: number;\n virtualNow: number;\n lastRealNow: number | null;\n /** Returns true when finished. Called once per frame with the current\n * virtual-ms timestamp and the effective scale it advanced at this frame. */\n tick(virtualNow: number, scale: number): boolean;\n /** Called when the animation is cancelled. Skips onDone. */\n onCancel?(): void;\n}\n\nconst numericLerp = (a: number, b: number, t: number): number => a + (b - a) * t;\n\nfunction resolveSpringConstants(o: { preset?: string; stiffness?: number; damping?: number; mass?: number }) {\n const preset = o.preset ? SPRING_PRESETS[o.preset as keyof typeof SPRING_PRESETS] : null;\n return {\n stiffness: o.stiffness ?? preset?.stiffness ?? 170,\n damping: o.damping ?? preset?.damping ?? 26,\n mass: o.mass ?? preset?.mass ?? 1,\n };\n}\n\n/** Create the animator for a canvas. One rAF loop drives every animation it\n * owns, and everything still running is cancelled on unmount. */\nexport function useAnimator(opts: UseAnimatorOptions = {}): Animator {\n const optsRef = useLatest(opts);\n const animations = useRef<Map<number, ActiveAnimation>>(new Map());\n const nextId = useRef(1);\n /**\n * Re-entrancy counter incremented around each animation tick in tickAll.\n * Exposed via `isTicking()`. > 0 ⇒ we're currently inside an animation's\n * onTick; an adapter wrapper (`animateOnSetPose`) seeing this flag should\n * write through to the base adapter rather than schedule a new tween.\n */\n const tickDepth = useRef(0);\n const globalTimeScale = useRef(1);\n const globalPaused = useRef(false);\n const colorOverrides = useRef<ColorOverrideRegistry>(new ColorOverrideRegistry());\n // Per-frame tick subscribers. Notified after each batch of animation\n // ticks (i.e. after `colorOverrides` has settled to its latest values\n // but before the next RAF schedules). Used by `<SceneCanvas animator>`\n // to request a redraw on every active frame.\n const tickSubscribers = useRef<Set<() => void>>(new Set());\n\n // The loop runs behind the visibility gate. `tickAll` is built inside the\n // memo below, so the frame callback reaches it through a ref, published\n // once the memo's render commits.\n const tickAllRef = useRef<((t: number) => void) | null>(null);\n const frameLoop = useVisibleRaf(\n useCallback((t: number) => { tickAllRef.current?.(t); }, []),\n {\n requestFrame: opts.requestFrame,\n cancelFrame: opts.cancelFrame,\n // An hour spent hidden is not an hour the animation ran: dropping each\n // animation's last timestamp makes the resuming frame's `realDt` zero.\n onResume: () => {\n for (const anim of animations.current.values()) anim.lastRealNow = null;\n },\n },\n );\n const frameLoopRef = useLatest(frameLoop);\n\n // Tripwire: dev-only flag that every tween/spring/decay's tick reads to\n // detect \"animation fired after the host component unmounted.\" This is a\n // symptom of cleanup not running (regression) — typically because someone\n // refactored useAnimator and forgot to wire the unmount effect. The flag\n // flips false on cleanup; ticks see it and log a one-time error so the\n // bug is loud rather than just visually-doubled animation.\n const mountedRef = useRef(true);\n const trippedRef = useRef(false);\n const tripwire = (): boolean => {\n if (mountedRef.current) return false;\n if (!trippedRef.current) {\n trippedRef.current = true;\n const isDev = typeof process !== 'undefined' ? process.env.NODE_ENV !== 'production' : true;\n if (isDev) {\n console.error(\n 'weasel useAnimator: animation tick fired after the host component unmounted. ' +\n 'This usually means cleanup logic was bypassed — check for refactors that ' +\n 'removed the unmount effect or replaced cancelAll with a custom path.',\n );\n }\n }\n return true;\n };\n\n const { api, tickAll } = useMemo(() => {\n // Default to performance.now() so the time origin matches the\n // requestAnimationFrame callback's DOMHighResTimeStamp argument.\n // Using Date.now() here would mix epoch-millis with page-relative-millis,\n // producing huge negative `elapsed` values that clamp tween `t` to 0\n // forever (never reaching completion).\n const now = (): number =>\n (optsRef.current.now ?? (typeof performance !== 'undefined' ? performance.now.bind(performance) : Date.now))();\n // Resolved timer pair, snapshotted lazily from optsRef on each call so a\n // test that updates the injection after mount still wins. Kept internal —\n // not exposed on the public Animator surface; passed directly into\n // `createStagger` at bind time below.\n const staggerTimers: StaggerTimers = {\n setTimer: (cb, ms) =>\n (optsRef.current.setTimer ?? ((c, m) => setTimeout(c, m)))(cb, ms),\n clearTimer: (h) =>\n (optsRef.current.clearTimer ??\n ((x) => clearTimeout(x as ReturnType<typeof setTimeout>)))(h),\n now,\n };\n\n // Per-id one-shot completion listeners. Used by stagger to detect when\n // each child has left the registry (natural completion OR cancel) so the\n // supervising composite can retire itself when the last child finishes.\n const completionListeners = new Map<number, (() => void)[]>();\n const fireCompletion = (id: number): void => {\n const ls = completionListeners.get(id);\n if (!ls) return;\n completionListeners.delete(id);\n for (const cb of ls) cb();\n };\n const watchCompletion: WatchCompletion = (id, cb) => {\n const ls = completionListeners.get(id) ?? [];\n ls.push(cb);\n completionListeners.set(id, ls);\n return () => {\n const cur = completionListeners.get(id);\n if (!cur) return;\n const idx = cur.indexOf(cb);\n if (idx >= 0) cur.splice(idx, 1);\n if (cur.length === 0) completionListeners.delete(id);\n };\n };\n\n const hub = new AnimatorEventHub();\n const infoOf = (a: ActiveAnimation): AnimationInfo => {\n if (!a.info) {\n const info: { -readonly [K in keyof AnimationInfo]: AnimationInfo[K] } = { id: a.id, kind: a.kind };\n if (a.cancelKey != null) info.key = a.cancelKey;\n if (a.label != null) info.label = a.label;\n a.info = info;\n }\n return a.info;\n };\n\n /** Report `id` as finished, ahead of its `onDone`, so whatever that\n * handler starts is heard after it. Nothing revives a primitive; a\n * timeline, which can be revived, is reported as it leaves the table. */\n const reportEnd = (id: number): void => {\n const a = animations.current.get(id);\n if (!a || a.ended) return;\n a.ended = true;\n if (hub.watched) hub.emit({ type: 'end', animation: infoOf(a) });\n };\n\n /** Take `id` off the table as canceled — or, given `by`, as interrupted by\n * the animation claiming its key. */\n const retire = (id: number, by?: ActiveAnimation): void => {\n const a = animations.current.get(id);\n if (!a) return;\n a.onCancel?.();\n animations.current.delete(id);\n fireCompletion(id);\n if (!hub.watched || a.ended) return;\n hub.emit(by\n ? { type: 'interrupt', animation: infoOf(a), by: infoOf(by) }\n : { type: 'cancel', animation: infoOf(a) });\n };\n\n const tickAll = (t: number): void => {\n const finished: ActiveAnimation[] = [];\n for (const anim of animations.current.values()) {\n // `t` comes from the frame clock; `lastRealNow` is seeded at register()\n // from `now()`. The two share a time origin in a browser, where the rAF\n // timestamp and `performance.now()` are both page-relative — but not\n // everywhere: jsdom starts them ~600ms apart, which made the first\n // frame's delta hugely negative and left `virtualNow` climbing back\n // toward zero for dozens of frames before a tween advanced at all.\n // Time never runs backwards, so a negative sample is never real.\n const realDt = anim.lastRealNow == null ? 0 : Math.max(0, t - anim.lastRealNow);\n anim.lastRealNow = t;\n const scale = globalPaused.current\n ? 0\n : globalTimeScale.current * (anim.paused ? 0 : anim.timeScale);\n anim.virtualNow += realDt * scale;\n // Increment tick depth around each animation's tick so re-entrant\n // calls (e.g. `decay.onTick` → `adapter.setPose` →\n // `animateOnSetPose` checking `isTicking()`) see the flag and\n // skip scheduling a new wrap-tween that would fight the caller.\n tickDepth.current += 1;\n try {\n if (anim.tick(anim.virtualNow, scale)) finished.push(anim);\n } finally {\n tickDepth.current -= 1;\n }\n }\n for (const anim of finished) {\n // Gone already if its own tick canceled it; replaced if something\n // revived it under the same id since.\n if (animations.current.get(anim.id) !== anim) continue;\n reportEnd(anim.id);\n animations.current.delete(anim.id);\n fireCompletion(anim.id);\n }\n // Notify every onTick subscriber AFTER the tick batch so they\n // see the latest `colorOverrides` / pose values. Errors in one\n // subscriber don't suppress the others.\n for (const sub of tickSubscribers.current) {\n try { sub(); } catch (err) { console.error('useAnimator: onTick subscriber threw', err); }\n }\n if (animations.current.size > 0) frameLoopRef.current.request();\n };\n\n const ensureLoop = (): void => {\n if (animations.current.size === 0) return;\n frameLoopRef.current.request();\n };\n\n const cancelByKey = (key: string, by?: ActiveAnimation): void => {\n const ids: number[] = [];\n for (const anim of animations.current.values()) {\n if (anim.cancelKey === key) ids.push(anim.id);\n }\n for (const id of ids) retire(id, by);\n };\n\n type AnimationSeed =\n Omit<ActiveAnimation, 'paused' | 'timeScale' | 'virtualNow' | 'lastRealNow'>\n & {\n /** Registers under an existing `cancelKey` without cancelling whoever\n * holds it. For an animation re-registering itself — a revived\n * timeline — which is not a new claim on the key. */\n keepExisting?: boolean;\n };\n const register = (seed: AnimationSeed): AnimationHandle => {\n const anim = seed as ActiveAnimation;\n if (seed.cancelKey != null && !seed.keepExisting) cancelByKey(seed.cancelKey, anim);\n anim.paused = false;\n anim.timeScale = 1;\n anim.virtualNow = 0;\n // Seed lastRealNow at registration so the first frame's realDt reflects\n // the gap between register() and the first RAF callback. Preserves prior\n // wall-clock-anchored start behavior for tween and gives spring/decay a\n // non-zero first dt sample matching the pre-virtual-clock code.\n anim.lastRealNow = now();\n animations.current.set(anim.id, anim);\n if (hub.watched) hub.emit({ type: 'start', animation: infoOf(anim) });\n ensureLoop();\n return {\n id: anim.id,\n cancel: () => retire(anim.id),\n pause: () => { const a = animations.current.get(anim.id); if (a) a.paused = true; },\n resume: () => { const a = animations.current.get(anim.id); if (a) a.paused = false; },\n setTimeScale: (s) => { const a = animations.current.get(anim.id); if (a) a.timeScale = s; },\n timeScale: () => animations.current.get(anim.id)?.timeScale ?? 1,\n isPaused: () => animations.current.get(anim.id)?.paused ?? false,\n };\n };\n\n // Supervisor: a registered animation whose tick is a no-op (never\n // finishes naturally) so loop/stagger can sit in the animator's id table\n // and benefit from `cancel`/`cancelKey`/`isActive`. The owning composite\n // (loop/stagger) installs an onCancel to actually tear down its children.\n const createSupervisor = ({ kind, cancelKey, label }: SupervisorOptions): Supervisor => {\n const id = nextId.current++;\n let onCancelCb: (() => void) | undefined;\n const base = register({\n id,\n kind,\n cancelKey,\n label,\n // tick is a no-op: the supervisor only ends when the owner calls\n // `cancel()` (either via animator.cancel, animator.cancelKey, or the\n // composite's natural-completion path which forwards to `cancel`).\n tick: () => false,\n onCancel: () => onCancelCb?.(),\n });\n return {\n id: base.id,\n cancel: base.cancel,\n pause: base.pause,\n resume: base.resume,\n setTimeScale: base.setTimeScale,\n timeScale: base.timeScale,\n isPaused: base.isPaused,\n setOnCancel: (cb) => { onCancelCb = cb; },\n finish: () => {\n if (!animations.current.has(id)) return;\n reportEnd(id);\n animations.current.delete(id);\n fireCompletion(id);\n },\n cancelKey,\n };\n };\n\n const tween = <T,>(o: TweenOptions<T>): AnimationHandle => {\n const id = nextId.current++;\n // start is captured in *virtual* time; since virtualNow begins at 0 on\n // registration, that's our reference. The tween's \"elapsed\" is just\n // virtualNow itself — naturally freezing when paused (virtualNow stops\n // advancing) and decoupled from wall time.\n const start = 0;\n const easing = resolveEasing(o.easing ?? easeOut);\n // Precedence: factory > per-tick > default numeric lerp. Factory is built\n // once at tween start so expensive setup (color space conversion etc.)\n // doesn't repeat per frame.\n const factoryFn = o.interpolator ? o.interpolator(o.from, o.to) : null;\n const perTickInterp =\n factoryFn\n ? null\n : o.interpolate ??\n ((a: T, b: T, t: number) => {\n if (typeof a === 'number' && typeof b === 'number') {\n return numericLerp(a as number, b as number, t) as unknown as T;\n }\n throw new Error('tween: interpolate or interpolator is required for non-numeric T');\n });\n let lastValueEmitted = false;\n return register({\n id,\n kind: 'tween',\n cancelKey: o.cancelKey,\n label: o.label,\n progress: (virtualNow) => (o.ms <= 0 ? 1 : Math.min(1, virtualNow / o.ms)),\n tick(nowMs) {\n if (tripwire()) return true;\n const elapsed = nowMs - start;\n const t = o.ms <= 0 ? 1 : Math.min(1, Math.max(0, elapsed / o.ms));\n const eased = easing(t);\n const value = factoryFn ? factoryFn(eased) : perTickInterp!(o.from, o.to, eased);\n o.onTick(value);\n if (t >= 1 && !lastValueEmitted) {\n lastValueEmitted = true;\n // That last onTick may have cancelled us — deregistering the id.\n // A cancelled tween never completes, whenever the cancel landed.\n if (animations.current.has(id)) {\n reportEnd(id);\n o.onDone?.();\n }\n return true;\n }\n return false;\n },\n });\n };\n\n const physics = <T,>(o: PhysicsOptions<T>, kind: AnimationKind = 'physics'): PhysicsHandle<T> => {\n const id = nextId.current++;\n const isNumeric = typeof o.from === 'number';\n if (!isNumeric && (!o.add || !o.subtract || !o.scale || !o.magnitude)) {\n throw new Error('physics: add/subtract/scale/magnitude are required for non-numeric T');\n }\n const add = o.add ?? ((a: T, b: T) => ((a as unknown as number) + (b as unknown as number)) as unknown as T);\n const subtract = o.subtract ?? ((a: T, b: T) => ((a as unknown as number) - (b as unknown as number)) as unknown as T);\n const scale = o.scale ?? ((v: T, k: number) => ((v as unknown as number) * k) as unknown as T);\n const magnitude = o.magnitude ?? ((v: T) => Math.abs(v as unknown as number));\n const { stiffness: kBase, damping, mass } = resolveSpringConstants(o);\n const restThreshold = o.restThreshold ?? 0.01;\n\n let target: T | null = o.to ?? null;\n let value = o.from;\n // Default to zero velocity: assumes scale(_, 0) returns the zero vector of T. Pass an explicit velocity for unusual T where this isn't true.\n let velocity: T = o.velocity ?? scale(o.from, 0);\n let lastTime: number | null = null;\n\n const baseHandle = register({\n id,\n kind,\n cancelKey: o.cancelKey,\n label: o.label,\n tick(nowMs) {\n if (tripwire()) return true;\n if (lastTime == null) {\n lastTime = nowMs;\n // Already-at-rest short-circuit: decay-mode (target == null)\n // with starting velocity below threshold should complete\n // immediately rather than emit a tick and wait a frame.\n if (target == null && magnitude(velocity) < restThreshold) {\n reportEnd(id);\n o.onDone?.();\n return true;\n }\n o.onTick(value);\n return false;\n }\n const dt = Math.min(0.064, (nowMs - lastTime) / 1000);\n lastTime = nowMs;\n // Semi-implicit Euler. When target == null, stiffness == 0 ⇒\n // no spring force; only damping acts on velocity (exponential decay).\n const ref = target ?? value;\n const displacement = subtract(value, ref);\n const springForce = scale(displacement, target == null ? 0 : -kBase);\n const dampingForce = scale(velocity, -damping);\n const accel = scale(add(springForce, dampingForce), 1 / mass);\n velocity = add(velocity, scale(accel, dt));\n value = add(value, scale(velocity, dt));\n o.onTick(value);\n const velRested = magnitude(velocity) < restThreshold;\n const posRested = target == null\n ? true\n : magnitude(subtract(value, target)) < restThreshold;\n if (velRested && posRested) {\n if (target != null) o.onTick(target);\n reportEnd(id);\n o.onDone?.();\n return true;\n }\n return false;\n },\n });\n\n const handle: PhysicsHandle<T> = {\n ...baseHandle,\n setTarget: (newTo: T | null) => { target = newTo; },\n setVelocity: (v: T) => { velocity = v; },\n };\n return handle;\n };\n\n const spring = <T,>(o: SpringOptions<T>): AnimationHandle => physics<T>(o, 'spring');\n\n const decay = <T,>(o: DecayOptions<T>): AnimationHandle => {\n const friction = o.friction ?? 0.95;\n // Per-second friction v(t) = v0 * friction^t corresponds to\n // m*dv/dt = -c*v with c = -ln(friction), m = 1, k = 0.\n const damping = -Math.log(friction);\n return physics<T>({\n from: o.from,\n to: null,\n velocity: o.velocity,\n stiffness: 0,\n damping,\n mass: 1,\n restThreshold: o.threshold ?? 0.5,\n add: o.add,\n // DecayOptions doesn't carry subtract; derive from add+scale.\n subtract: (a, b) => o.add(a, o.scale(b, -1)),\n scale: o.scale,\n magnitude: o.magnitude,\n onTick: o.onTick,\n onDone: o.onDone,\n cancelKey: o.cancelKey,\n label: o.label,\n }, 'decay');\n };\n\n const cancelAll = (): void => {\n const retired: ActiveAnimation[] = [];\n for (const a of animations.current.values()) {\n a.onCancel?.();\n retired.push(a);\n }\n animations.current.clear();\n for (const a of retired) fireCompletion(a.id);\n if (hub.watched) for (const a of retired) hub.emit({ type: 'cancel', animation: infoOf(a) });\n frameLoopRef.current.cancel();\n };\n const api: Animator = {\n tween,\n spring,\n decay,\n physics,\n cancel: (handle) => retire(handle.id),\n cancelKey: (key) => cancelByKey(key),\n cancelAll,\n isActive: (key) => {\n if (key == null) return animations.current.size > 0;\n for (const a of animations.current.values()) {\n if (a.cancelKey === key) return true;\n }\n return false;\n },\n isTicking: () => tickDepth.current > 0,\n pause: () => { globalPaused.current = true; },\n resume: () => { globalPaused.current = false; },\n isPaused: () => globalPaused.current,\n setTimeScale: (s) => { globalTimeScale.current = s; },\n timeScale: () => globalTimeScale.current,\n pauseKey: (key) => {\n for (const a of animations.current.values()) if (a.cancelKey === key) a.paused = true;\n },\n resumeKey: (key) => {\n for (const a of animations.current.values()) if (a.cancelKey === key) a.paused = false;\n },\n setTimeScaleByKey: (key, s) => {\n for (const a of animations.current.values()) if (a.cancelKey === key) a.timeScale = s;\n },\n loop: (factory, loopOpts) => createLoop(createSupervisor, factory, loopOpts),\n tweenLoop: (tweenLoopOpts) =>\n createTweenLoop(api, createSupervisor, tweenLoopOpts),\n stagger: ((items, delay, factory, staggerOpts) =>\n createStagger(\n api,\n staggerTimers,\n createSupervisor,\n watchCompletion,\n items,\n delay,\n factory as never,\n staggerOpts,\n )) as Animator['stagger'],\n timeline: (o: TimelineOptions) => {\n const id = nextId.current++;\n const info = (): AnimationInfo | undefined => {\n const a = animations.current.get(id);\n return a && infoOf(a);\n };\n return createTimeline(register, id, o, {\n get watched() { return hub.watched; },\n fire: (track, path, event, lateBy) => {\n const animation = info();\n if (animation) hub.emit({ type: 'fire', animation, track, path: path.slice(), event, lateBy });\n },\n lap: (lap) => {\n const animation = info();\n if (animation) hub.emit({ type: 'lap', animation, lap });\n },\n });\n },\n colorOverrides: colorOverrides.current,\n onTick: (cb) => {\n tickSubscribers.current.add(cb);\n return () => { tickSubscribers.current.delete(cb); };\n },\n keepAlive: () => {\n const sup = createSupervisor({ kind: 'keepAlive' });\n return () => sup.cancel();\n },\n watch: (listener) => hub.add(listener),\n live: () => {\n const rows: LiveAnimation[] = [];\n for (const a of animations.current.values()) {\n const row: LiveAnimation = {\n ...infoOf(a),\n paused: a.paused,\n timeScale: a.timeScale,\n elapsed: a.virtualNow,\n ...(a.progress ? { progress: a.progress(a.virtualNow) } : {}),\n };\n rows.push(row);\n }\n return rows;\n },\n };\n return { api, tickAll };\n }, [frameLoopRef, optsRef]);\n\n useInsertionEffect(() => {\n tickAllRef.current = tickAll;\n }, [tickAll]);\n\n // StrictMode-safe cleanup: when the component unmounts (including the\n // dev-mode double-mount that StrictMode performs), cancel every running\n // animation and stop the RAF loop. Without this, the FIRST mount's\n // animator keeps ticking with stale callbacks pointing at the unmounted\n // adapter, while the SECOND mount creates its own animator on top —\n // visible to the user as every animation playing twice.\n useEffect(() => {\n const overrides = colorOverrides.current;\n mountedRef.current = true;\n return () => {\n mountedRef.current = false;\n api.cancelAll();\n overrides.clearAll();\n };\n }, [api]);\n\n return api;\n}\n"],"mappings":"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"}
@@ -0,0 +1,40 @@
1
+ import { tweenPose as e } from "../poseHelpers.js";
2
+ //#region src/animation/wrappers/animateLifecycle.ts
3
+ function t(t, n, r) {
4
+ let i = r.ms ?? 200;
5
+ return {
6
+ ...t,
7
+ insertNode(a, o) {
8
+ if (t.insertNode(a, o), !r.enterFrom) return;
9
+ let s = t.getPose(a.id), c = r.enterFrom(s);
10
+ t.setPose(a.id, c), e(n, t, {
11
+ id: a.id,
12
+ to: s,
13
+ ms: i,
14
+ easing: r.easing,
15
+ geometry: r.geometry,
16
+ recordOp: !1
17
+ });
18
+ },
19
+ removeNode(a) {
20
+ if (!r.exitTo) {
21
+ t.removeNode(a);
22
+ return;
23
+ }
24
+ let o = t.getPose(a);
25
+ e(n, t, {
26
+ id: a,
27
+ to: r.exitTo(o),
28
+ ms: i,
29
+ easing: r.easing,
30
+ geometry: r.geometry,
31
+ recordOp: !1,
32
+ onDone: () => t.removeNode(a)
33
+ });
34
+ }
35
+ };
36
+ }
37
+ //#endregion
38
+ export { t as animateLifecycle };
39
+
40
+ //# sourceMappingURL=animateLifecycle.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"animateLifecycle.js","names":["animateLifecycle","ms","opts","adapter","object","index","final","start","tweenPose","animator","id","current"],"sources":["../../../src/animation/wrappers/animateLifecycle.ts"],"sourcesContent":["import { tweenPose } from '../poseHelpers';\nimport type { PoseDescriptor } from 'interactions/actions/resize/geometry';\nimport type { SceneAdapter } from 'core/adapters/types';\nimport type { Animator, EasingSpec } from '../types';\n\n/** How nodes enter and leave. `enterFrom` derives the pose a new node starts\n * at, given where it belongs; `exitTo` derives the pose a departing node\n * animates to before it is actually removed. Omit either to leave that\n * transition instant. */\nexport interface LifecycleAnimation<TPose> {\n /** Pose to animate the new object FROM at insert. */\n enterFrom?: (final: TPose) => TPose;\n /** Pose to animate the existing object TO at remove. */\n exitTo?: (current: TPose) => TPose;\n ms?: number;\n easing?: EasingSpec;\n geometry?: PoseDescriptor<TPose>;\n}\n\n/** Wrap an adapter so inserts and removals animate — the scene-graph\n * equivalent of CSS enter/leave transitions. */\nexport function animateLifecycle<TNode extends { id: string; pose?: TPose }, TPose>(\n adapter: SceneAdapter<TNode, TPose>,\n animator: Animator,\n opts: LifecycleAnimation<TPose>,\n): SceneAdapter<TNode, TPose> {\n const ms = opts.ms ?? 200;\n\n return {\n ...adapter,\n insertNode(object: TNode, index?: number): void {\n adapter.insertNode(object, index);\n if (!opts.enterFrom) return;\n const final = adapter.getPose(object.id);\n const start = opts.enterFrom(final);\n adapter.setPose(object.id, start);\n tweenPose(animator, adapter as never, {\n id: object.id,\n to: final,\n ms,\n easing: opts.easing,\n geometry: opts.geometry,\n recordOp: false,\n });\n },\n removeNode(id: string): void {\n if (!opts.exitTo) {\n adapter.removeNode(id);\n return;\n }\n const current = adapter.getPose(id);\n tweenPose(animator, adapter as never, {\n id,\n to: opts.exitTo(current),\n ms,\n easing: opts.easing,\n geometry: opts.geometry,\n recordOp: false,\n onDone: () => adapter.removeNode(id),\n });\n },\n };\n}\n"],"mappings":";;AAqBA,SAAgBA,EACd,GACA,GACA,GAC4B;CAC5B,IAAMC,IAAKC,EAAK,MAAM;CAEtB,OAAO;EACL,GAAGC;EACH,WAAW,GAAe,GAAsB;GAE9C,IADAA,EAAQ,WAAWC,GAAQC,CAAK,GAC5B,CAACH,EAAK,WAAW;GACrB,IAAMI,IAAQH,EAAQ,QAAQC,EAAO,EAAE,GACjCG,IAAQL,EAAK,UAAUI,CAAK;GAElC,AADAH,EAAQ,QAAQC,EAAO,IAAIG,CAAK,GAChCC,EAAUC,GAAUN,GAAkB;IACpC,IAAIC,EAAO;IACX,IAAIE;IACJ;IACA,QAAQJ,EAAK;IACb,UAAUA,EAAK;IACf,UAAU;GACZ,CAAC;EACH;EACA,WAAW,GAAkB;GAC3B,IAAI,CAACA,EAAK,QAAQ;IAChB,EAAQ,WAAWQ,CAAE;IACrB;GACF;GACA,IAAMC,IAAUR,EAAQ,QAAQO,CAAE;GAClC,EAAUD,GAAUN,GAAkB;IACpC;IACA,IAAID,EAAK,OAAOS,CAAO;IACvB;IACA,QAAQT,EAAK;IACb,UAAUA,EAAK;IACf,UAAU;IACV,cAAcC,EAAQ,WAAWO,CAAE;GACrC,CAAC;EACH;CACF;AACF"}
@@ -0,0 +1,44 @@
1
+ import { springPose as e, tweenPose as t } from "../poseHelpers.js";
2
+ //#region src/animation/wrappers/animateOnSetPose.ts
3
+ function n(n, r, i = {}) {
4
+ let a = i.ms ?? 200, o = (e, t, n) => i.shouldAnimate ? !i.shouldAnimate(e, t, n) : !!(i.skipDuringGesture && i.gestureScope?.has(e));
5
+ return {
6
+ ...n,
7
+ setPose(s, c) {
8
+ let l = n.getPose(s);
9
+ if (o(s, l, c)) {
10
+ n.setPose(s, c);
11
+ return;
12
+ }
13
+ if (r.isTicking()) {
14
+ n.setPose(s, c);
15
+ return;
16
+ }
17
+ if (r.isActive("pose:" + s)) {
18
+ n.setPose(s, c);
19
+ return;
20
+ }
21
+ i.spring ? e(r, n, {
22
+ id: s,
23
+ to: c,
24
+ preset: i.spring.preset,
25
+ stiffness: i.spring.stiffness,
26
+ damping: i.spring.damping,
27
+ mass: i.spring.mass,
28
+ geometry: i.geometry,
29
+ opLabel: i.opLabel
30
+ }) : t(r, n, {
31
+ id: s,
32
+ to: c,
33
+ ms: a,
34
+ easing: i.easing,
35
+ geometry: i.geometry,
36
+ opLabel: i.opLabel
37
+ });
38
+ }
39
+ };
40
+ }
41
+ //#endregion
42
+ export { n as animateOnSetPose };
43
+
44
+ //# sourceMappingURL=animateOnSetPose.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"animateOnSetPose.js","names":["animateOnSetPose","ms","opts","skipPredicate","id","from","to","adapter","pose","animator","springPose","tweenPose"],"sources":["../../../src/animation/wrappers/animateOnSetPose.ts"],"sourcesContent":["import { tweenPose, springPose } from '../poseHelpers';\nimport type { PoseDescriptor } from 'interactions/actions/resize/geometry';\nimport type { SceneAdapter } from 'core/adapters/types';\nimport type { Animator, EasingSpec, SpringPresetName } from '../types';\n\n/** Options for `animateOnSetPose`. */\nexport interface AnimateOnSetPoseOptions<TPose> {\n /** Default: 200ms tween with easeOut. */\n ms?: number;\n easing?: EasingSpec;\n /** Use a spring instead of a duration tween. Mutually exclusive with ms/easing. */\n spring?: {\n preset?: SpringPresetName;\n stiffness?: number;\n damping?: number;\n mass?: number;\n };\n geometry?: PoseDescriptor<TPose>;\n /** Predicate: return false to skip animation and write through immediately. */\n shouldAnimate?: (id: string, from: TPose, to: TPose) => boolean;\n /** Convenience: when true, auto-skip animation if the id is currently being\n * manipulated by an active gesture. Implementation: see `gestureScope` —\n * the wrapper consults a shared \"in-flight ids\" Set if one is provided,\n * otherwise this option is a no-op (treat as `shouldAnimate` returning true).\n * Mutually exclusive with `shouldAnimate`. */\n skipDuringGesture?: boolean;\n /** Optional: a Set the kit (or app) populates with ids currently being\n * manipulated by a gesture. When `skipDuringGesture` is true and the id\n * is in this Set, the wrapper writes through immediately. */\n gestureScope?: ReadonlySet<string>;\n /** Op label for the recorded transform op. Default: `'animate'`. */\n opLabel?: string;\n}\n\n/**\n * Wrap an adapter so every `setPose` animates to the new pose instead of\n * jumping to it. Anything that moves a node — a layout strategy, an action, a\n * consumer's own code — is animated without knowing it, since the adapter is\n * the single write path.\n *\n * Poses written from inside another animation's tick, and (optionally) poses\n * written for a node currently under a gesture, are passed straight through:\n * animating those would fight whatever is already driving the node.\n */\nexport function animateOnSetPose<TNode extends { id: string }, TPose>(\n adapter: SceneAdapter<TNode, TPose>,\n animator: Animator,\n opts: AnimateOnSetPoseOptions<TPose> = {},\n): SceneAdapter<TNode, TPose> {\n const ms = opts.ms ?? 200;\n const skipPredicate = (id: string, from: TPose, to: TPose): boolean => {\n if (opts.shouldAnimate) return !opts.shouldAnimate(id, from, to);\n if (opts.skipDuringGesture && opts.gestureScope?.has(id)) return true;\n return false;\n };\n\n return {\n ...adapter,\n setPose(id: string, pose: TPose): void {\n const from = adapter.getPose(id);\n if (skipPredicate(id, from, pose)) {\n adapter.setPose(id, pose);\n return;\n }\n // Re-entrant short-circuit (a): the caller IS another animation's tick\n // (momentum decay, in-flight tween, spring) writing setPose ~60×/sec.\n // Wrapping each call in a fresh 250ms tween fights the caller — the\n // new tween's t=0 sample writes back the previous `from`, undoing\n // this onTick — and when each wrap-tween settles, the very next\n // caller-tick spawns another, looping visibly forever (cards never\n // stop after a flick). Detect via animator.isTicking() and write\n // through.\n if (animator.isTicking()) {\n adapter.setPose(id, pose);\n return;\n }\n // Re-entrant short-circuit (b): a prior wrap-tween for this id is\n // still in flight. Let it finish rather than registering a competing\n // tween. (Earlier guard from 3af4ed8; kept alongside (a) for the case\n // where setPose is called from outside the animator's own tick loop\n // but a pose:<id> tween is still mid-transition.)\n if (animator.isActive('pose:' + id)) {\n adapter.setPose(id, pose);\n return;\n }\n if (opts.spring) {\n springPose(animator, adapter as never, {\n id,\n to: pose,\n preset: opts.spring.preset,\n stiffness: opts.spring.stiffness,\n damping: opts.spring.damping,\n mass: opts.spring.mass,\n geometry: opts.geometry,\n opLabel: opts.opLabel,\n });\n } else {\n tweenPose(animator, adapter as never, {\n id,\n to: pose,\n ms,\n easing: opts.easing,\n geometry: opts.geometry,\n opLabel: opts.opLabel,\n });\n }\n },\n };\n}\n"],"mappings":";;AA4CA,SAAgBA,EACd,GACA,GACA,IAAuC,CAAC,GACZ;CAC5B,IAAMC,IAAKC,EAAK,MAAM,KAChBC,KAAiB,GAAY,GAAa,MAC1CD,EAAK,gBAAsB,CAACA,EAAK,cAAcE,GAAIC,GAAMC,CAAE,IAC/D,GAAIJ,EAAK,qBAAqBA,EAAK,cAAc,IAAIE,CAAE;CAIzD,OAAO;EACL,GAAGG;EACH,QAAQ,GAAY,GAAmB;GACrC,IAAMF,IAAOE,EAAQ,QAAQH,CAAE;GAC/B,IAAID,EAAcC,GAAIC,GAAMG,CAAI,GAAG;IACjC,EAAQ,QAAQJ,GAAII,CAAI;IACxB;GACF;GASA,IAAIC,EAAS,UAAU,GAAG;IACxB,EAAQ,QAAQL,GAAII,CAAI;IACxB;GACF;GAMA,IAAIC,EAAS,SAAS,UAAUL,CAAE,GAAG;IACnC,EAAQ,QAAQA,GAAII,CAAI;IACxB;GACF;GACA,AAAIN,EAAK,SACPQ,EAAWD,GAAUF,GAAkB;IACrC;IACA,IAAIC;IACJ,QAAQN,EAAK,OAAO;IACpB,WAAWA,EAAK,OAAO;IACvB,SAASA,EAAK,OAAO;IACrB,MAAMA,EAAK,OAAO;IAClB,UAAUA,EAAK;IACf,SAASA,EAAK;GAChB,CAAC,IAEDS,EAAUF,GAAUF,GAAkB;IACpC;IACA,IAAIC;IACJ;IACA,QAAQN,EAAK;IACb,UAAUA,EAAK;IACf,SAASA,EAAK;GAChB,CAAC;EAEL;CACF;AACF"}
@@ -1,5 +1,5 @@
1
- import { P as Path } from './path-JEV2c5If.js';
2
- import { P as PoseDescriptor } from './poseDescriptor-rZa9W5hJ.js';
1
+ import { Path } from '@weasel-js/geom';
2
+ import { P as PoseDescriptor } from './poseDescriptor-D-OH-tu5.js';
3
3
 
4
4
  /** True for Path-shaped poses (`{kind: 'polygon' | 'rect'}`). Useful for
5
5
  * callers that need to fork between `pathPoseDescriptor` and