@weasel-js/core 1.9.3 → 1.10.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (1139) hide show
  1. package/CHANGELOG.md +1106 -0
  2. package/README.md +7 -5
  3. package/dist/WeaselProvider.js +5 -7
  4. package/dist/WeaselProvider.js.map +1 -1
  5. package/dist/affordances/composeAffordanceLayer.js +91 -93
  6. package/dist/affordances/composeAffordanceLayer.js.map +1 -1
  7. package/dist/affordances/cornerResize.js +27 -18
  8. package/dist/affordances/cornerResize.js.map +1 -1
  9. package/dist/affordances/hitAffordanceRegions.js +65 -104
  10. package/dist/affordances/hitAffordanceRegions.js.map +1 -1
  11. package/dist/affordances/pathAnchors.js.map +1 -1
  12. package/dist/affordances/rotationHandle.js +22 -21
  13. package/dist/affordances/rotationHandle.js.map +1 -1
  14. package/dist/animation/behaviors/coast.js +21 -0
  15. package/dist/animation/behaviors/coast.js.map +1 -0
  16. package/dist/animation/behaviors/coastByWrite.js +107 -0
  17. package/dist/animation/behaviors/coastByWrite.js.map +1 -0
  18. package/dist/animation/behaviors/coastOnTargets.js +94 -0
  19. package/dist/animation/behaviors/coastOnTargets.js.map +1 -0
  20. package/dist/animation/behaviors/momentum.js +38 -88
  21. package/dist/animation/behaviors/momentum.js.map +1 -1
  22. package/dist/animation/clipTargets.js +12 -0
  23. package/dist/animation/clipTargets.js.map +1 -0
  24. package/dist/animation/index.js +15 -20
  25. package/dist/animation/poseHelpers.js +112 -33
  26. package/dist/animation/poseHelpers.js.map +1 -1
  27. package/dist/animation/poseTarget.js +115 -0
  28. package/dist/animation/poseTarget.js.map +1 -0
  29. package/dist/animation/reflow.js +113 -83
  30. package/dist/animation/reflow.js.map +1 -1
  31. package/dist/animation/rewind.js +66 -0
  32. package/dist/animation/rewind.js.map +1 -0
  33. package/dist/animation/rig/bindRig.js +85 -53
  34. package/dist/animation/rig/bindRig.js.map +1 -1
  35. package/dist/animation/rig/rigNode.js +93 -0
  36. package/dist/animation/rig/rigNode.js.map +1 -0
  37. package/dist/animation/rig/rigSeat.js +26 -0
  38. package/dist/animation/rig/rigSeat.js.map +1 -0
  39. package/dist/animation/rig/skinBinding.js +56 -0
  40. package/dist/animation/rig/skinBinding.js.map +1 -0
  41. package/dist/animation/rig/useRig.js +31 -16
  42. package/dist/animation/rig/useRig.js.map +1 -1
  43. package/dist/animation/wrappers/animateLifecycle.js +32 -24
  44. package/dist/animation/wrappers/animateLifecycle.js.map +1 -1
  45. package/dist/animation/wrappers/animateOnSetPose.js +31 -29
  46. package/dist/animation/wrappers/animateOnSetPose.js.map +1 -1
  47. package/dist/animation/wrappers/instantPose.js +13 -0
  48. package/dist/animation/wrappers/instantPose.js.map +1 -0
  49. package/dist/animation/writtenPoseTarget.js +33 -0
  50. package/dist/animation/writtenPoseTarget.js.map +1 -0
  51. package/dist/{autoPoseDescriptor-vCdt55xm.d.ts → autoPoseDescriptor-DHg5KqaJ.d.ts} +1 -1
  52. package/dist/barrel/canvas.js +31 -0
  53. package/dist/barrel/chrome.js +16 -0
  54. package/dist/barrel/input.js +18 -0
  55. package/dist/barrel/interactions.js +38 -0
  56. package/dist/barrel/paint.js +11 -0
  57. package/dist/barrel/paths.js +12 -0
  58. package/dist/barrel/renderer.js +14 -0
  59. package/dist/barrel/routing.js +57 -0
  60. package/dist/barrel/scene.js +37 -0
  61. package/dist/barrel/text.js +9 -0
  62. package/dist/barrel/viewport.js +42 -0
  63. package/dist/canvas/Canvas.js +280 -559
  64. package/dist/canvas/Canvas.js.map +1 -1
  65. package/dist/canvas/CanvasView.js +147 -167
  66. package/dist/canvas/CanvasView.js.map +1 -1
  67. package/dist/canvas/CursorCoordsHud.js +53 -49
  68. package/dist/canvas/CursorCoordsHud.js.map +1 -1
  69. package/dist/canvas/DrawCanvas.js +40 -51
  70. package/dist/canvas/DrawCanvas.js.map +1 -1
  71. package/dist/canvas/ModalityHud.js.map +1 -1
  72. package/dist/canvas/NodeShape.js +55 -374
  73. package/dist/canvas/NodeShape.js.map +1 -1
  74. package/dist/canvas/PickHud.js +50 -47
  75. package/dist/canvas/PickHud.js.map +1 -1
  76. package/dist/canvas/SceneCanvas/DevHuds.js +40 -0
  77. package/dist/canvas/SceneCanvas/DevHuds.js.map +1 -0
  78. package/dist/canvas/SceneCanvas/GestureDispatcherMounter.js +126 -0
  79. package/dist/canvas/SceneCanvas/GestureDispatcherMounter.js.map +1 -0
  80. package/dist/canvas/SceneCanvas/PointerProviderIfRoot.js +27 -31
  81. package/dist/canvas/SceneCanvas/PointerProviderIfRoot.js.map +1 -1
  82. package/dist/canvas/SceneCanvas/StandardActionsRegistrar.js +64 -0
  83. package/dist/canvas/SceneCanvas/StandardActionsRegistrar.js.map +1 -0
  84. package/dist/canvas/SceneCanvas/ToolKeybindingsMounter.js +16 -0
  85. package/dist/canvas/SceneCanvas/ToolKeybindingsMounter.js.map +1 -0
  86. package/dist/canvas/SceneCanvas/coordTrace.js +46 -0
  87. package/dist/canvas/SceneCanvas/coordTrace.js.map +1 -0
  88. package/dist/canvas/SceneCanvas/defaultNodeProperties.js +138 -85
  89. package/dist/canvas/SceneCanvas/defaultNodeProperties.js.map +1 -1
  90. package/dist/canvas/SceneCanvas/defaultNodeRouting.js +9 -8
  91. package/dist/canvas/SceneCanvas/defaultNodeRouting.js.map +1 -1
  92. package/dist/canvas/SceneCanvas/dispatcherGestureBounds.js.map +1 -1
  93. package/dist/canvas/SceneCanvas/features.js +74 -43
  94. package/dist/canvas/SceneCanvas/features.js.map +1 -1
  95. package/dist/canvas/SceneCanvas/isDev.js +12 -0
  96. package/dist/canvas/SceneCanvas/isDev.js.map +1 -0
  97. package/dist/canvas/SceneCanvas/poseGeometry.js +31 -34
  98. package/dist/canvas/SceneCanvas/poseGeometry.js.map +1 -1
  99. package/dist/canvas/SceneCanvas/poseRegistrars.js +13 -0
  100. package/dist/canvas/SceneCanvas/poseRegistrars.js.map +1 -0
  101. package/dist/canvas/SceneCanvas/props.js +39 -0
  102. package/dist/canvas/SceneCanvas/props.js.map +1 -0
  103. package/dist/canvas/SceneCanvas/toolRegistry.js +23 -0
  104. package/dist/canvas/SceneCanvas/toolRegistry.js.map +1 -0
  105. package/dist/canvas/SceneCanvas/useActionsPropResolver.js +6 -1
  106. package/dist/canvas/SceneCanvas/useActionsPropResolver.js.map +1 -1
  107. package/dist/canvas/SceneCanvas/useBuiltinShapeTools.js +21 -62
  108. package/dist/canvas/SceneCanvas/useBuiltinShapeTools.js.map +1 -1
  109. package/dist/canvas/SceneCanvas/useBuiltinTools.js +21 -0
  110. package/dist/canvas/SceneCanvas/useBuiltinTools.js.map +1 -0
  111. package/dist/canvas/SceneCanvas/useCanvasCamera.js +38 -0
  112. package/dist/canvas/SceneCanvas/useCanvasCamera.js.map +1 -0
  113. package/dist/canvas/SceneCanvas/useCanvasDispatcher.js +20 -0
  114. package/dist/canvas/SceneCanvas/useCanvasDispatcher.js.map +1 -0
  115. package/dist/canvas/SceneCanvas/useCanvasSelection.js +16 -0
  116. package/dist/canvas/SceneCanvas/useCanvasSelection.js.map +1 -0
  117. package/dist/canvas/SceneCanvas/useCanvasTools.js +67 -0
  118. package/dist/canvas/SceneCanvas/useCanvasTools.js.map +1 -0
  119. package/dist/canvas/SceneCanvas/useDispatcherOverlayLayer.js +29 -29
  120. package/dist/canvas/SceneCanvas/useDispatcherOverlayLayer.js.map +1 -1
  121. package/dist/canvas/SceneCanvas/useHeldModifiers.js +20 -0
  122. package/dist/canvas/SceneCanvas/useHeldModifiers.js.map +1 -0
  123. package/dist/canvas/SceneCanvas/useNodeAtPoint.js +26 -0
  124. package/dist/canvas/SceneCanvas/useNodeAtPoint.js.map +1 -0
  125. package/dist/canvas/SceneCanvas/useNodeKinds.js +26 -0
  126. package/dist/canvas/SceneCanvas/useNodeKinds.js.map +1 -0
  127. package/dist/canvas/SceneCanvas/usePreviewGhostLayer.js +48 -48
  128. package/dist/canvas/SceneCanvas/usePreviewGhostLayer.js.map +1 -1
  129. package/dist/canvas/SceneCanvas/useSceneCanvasHandle.js +47 -0
  130. package/dist/canvas/SceneCanvas/useSceneCanvasHandle.js.map +1 -0
  131. package/dist/canvas/SceneCanvas/useSceneCanvasLayers.js +66 -0
  132. package/dist/canvas/SceneCanvas/useSceneCanvasLayers.js.map +1 -0
  133. package/dist/canvas/SceneCanvas/useSceneChrome.js +59 -0
  134. package/dist/canvas/SceneCanvas/useSceneChrome.js.map +1 -0
  135. package/dist/canvas/SceneCanvas/useSceneRedrawSources.js +23 -0
  136. package/dist/canvas/SceneCanvas/useSceneRedrawSources.js.map +1 -0
  137. package/dist/canvas/SceneCanvas/useSceneSelectTool.js +74 -78
  138. package/dist/canvas/SceneCanvas/useSceneSelectTool.js.map +1 -1
  139. package/dist/canvas/SceneCanvas/useSceneSlotLayers.js +37 -0
  140. package/dist/canvas/SceneCanvas/useSceneSlotLayers.js.map +1 -0
  141. package/dist/canvas/SceneCanvas/useSelectionOverlayLayer.js +38 -0
  142. package/dist/canvas/SceneCanvas/useSelectionOverlayLayer.js.map +1 -0
  143. package/dist/canvas/SceneCanvas/useViewLayerGate.js +20 -0
  144. package/dist/canvas/SceneCanvas/useViewLayerGate.js.map +1 -0
  145. package/dist/canvas/SceneCanvas/useViewportActions.js +9 -1
  146. package/dist/canvas/SceneCanvas/useViewportActions.js.map +1 -1
  147. package/dist/canvas/SceneCanvas/worldPointAt.js +9 -0
  148. package/dist/canvas/SceneCanvas/worldPointAt.js.map +1 -0
  149. package/dist/canvas/SceneCanvas.js +311 -969
  150. package/dist/canvas/SceneCanvas.js.map +1 -1
  151. package/dist/canvas/SceneViewCanvas.js +42 -46
  152. package/dist/canvas/SceneViewCanvas.js.map +1 -1
  153. package/dist/canvas/adapterDerivedPath.js +26 -0
  154. package/dist/canvas/adapterDerivedPath.js.map +1 -0
  155. package/dist/canvas/affordanceAt.js +11 -1
  156. package/dist/canvas/affordanceAt.js.map +1 -1
  157. package/dist/canvas/buildSceneLayer.js +111 -0
  158. package/dist/canvas/buildSceneLayer.js.map +1 -0
  159. package/dist/canvas/buildSceneTree.js +16 -19
  160. package/dist/canvas/buildSceneTree.js.map +1 -1
  161. package/dist/canvas/canvasRenderer.js +67 -55
  162. package/dist/canvas/canvasRenderer.js.map +1 -1
  163. package/dist/canvas/colorOverrides.js.map +1 -1
  164. package/dist/canvas/defaultDrawOne.js +12 -12
  165. package/dist/canvas/defaultDrawOne.js.map +1 -1
  166. package/dist/canvas/deps/areaSelect.js +4 -4
  167. package/dist/canvas/deps/areaSelect.js.map +1 -1
  168. package/dist/canvas/deps/changes.js +13 -0
  169. package/dist/canvas/deps/changes.js.map +1 -0
  170. package/dist/canvas/deps/debug.js.map +1 -1
  171. package/dist/canvas/deps/editAnchors.js +38 -57
  172. package/dist/canvas/deps/editAnchors.js.map +1 -1
  173. package/dist/canvas/deps/geometryProjection.js.map +1 -1
  174. package/dist/canvas/deps/hitTestArea.js +31 -26
  175. package/dist/canvas/deps/hitTestArea.js.map +1 -1
  176. package/dist/canvas/deps/insert.js +130 -91
  177. package/dist/canvas/deps/insert.js.map +1 -1
  178. package/dist/canvas/deps/lassoSelect.js +5 -5
  179. package/dist/canvas/deps/lassoSelect.js.map +1 -1
  180. package/dist/canvas/deps/poseDescriptor.js +1 -1
  181. package/dist/canvas/deps/poseDescriptor.js.map +1 -1
  182. package/dist/canvas/deps/resizePolicy.js.map +1 -1
  183. package/dist/canvas/deps/slice.js +26 -26
  184. package/dist/canvas/deps/slice.js.map +1 -1
  185. package/dist/canvas/deps/textEdit.js +6 -5
  186. package/dist/canvas/deps/textEdit.js.map +1 -1
  187. package/dist/canvas/deps/view.js.map +1 -1
  188. package/dist/canvas/derivedPath.js +47 -22
  189. package/dist/canvas/derivedPath.js.map +1 -1
  190. package/dist/canvas/drawEnvelope.js +8 -4
  191. package/dist/canvas/drawEnvelope.js.map +1 -1
  192. package/dist/canvas/getNodeAtPoint.js +4 -8
  193. package/dist/canvas/getNodeAtPoint.js.map +1 -1
  194. package/dist/canvas/hud.module.js +1 -1
  195. package/dist/canvas/hud.module.js.map +1 -1
  196. package/dist/canvas/insertPreviewExtent.js.map +1 -1
  197. package/dist/canvas/kitRequirements.js +2 -2
  198. package/dist/canvas/kitRequirements.js.map +1 -1
  199. package/dist/canvas/layerOrder.js +13 -6
  200. package/dist/canvas/layerOrder.js.map +1 -1
  201. package/dist/canvas/layerSlots.js +6 -1
  202. package/dist/canvas/layerSlots.js.map +1 -1
  203. package/dist/canvas/nodeShapes/derivedPainter.js +34 -0
  204. package/dist/canvas/nodeShapes/derivedPainter.js.map +1 -0
  205. package/dist/canvas/nodeShapes/imagePainter.js +87 -0
  206. package/dist/canvas/nodeShapes/imagePainter.js.map +1 -0
  207. package/dist/canvas/nodeShapes/memo.js +9 -0
  208. package/dist/canvas/nodeShapes/memo.js.map +1 -0
  209. package/dist/canvas/nodeShapes/nodePaint.js +68 -0
  210. package/dist/canvas/nodeShapes/nodePaint.js.map +1 -0
  211. package/dist/canvas/nodeShapes/pathPainter.js +39 -0
  212. package/dist/canvas/nodeShapes/pathPainter.js.map +1 -0
  213. package/dist/canvas/nodeShapes/poseBox.js +20 -0
  214. package/dist/canvas/nodeShapes/poseBox.js.map +1 -0
  215. package/dist/canvas/nodeShapes/rectFallbackPainter.js +38 -0
  216. package/dist/canvas/nodeShapes/rectFallbackPainter.js.map +1 -0
  217. package/dist/canvas/nodeShapes/shapePainter.js +72 -0
  218. package/dist/canvas/nodeShapes/shapePainter.js.map +1 -0
  219. package/dist/canvas/nodeShapes/textPainter.js +55 -0
  220. package/dist/canvas/nodeShapes/textPainter.js.map +1 -0
  221. package/dist/canvas/overlayRoleStrokes.js.map +1 -1
  222. package/dist/canvas/paintCull.js +11 -14
  223. package/dist/canvas/paintCull.js.map +1 -1
  224. package/dist/{features/cursor → canvas}/paintedCursorLayer.js +2 -2
  225. package/dist/canvas/paintedCursorLayer.js.map +1 -0
  226. package/dist/canvas/pickWalk.js +59 -68
  227. package/dist/canvas/pickWalk.js.map +1 -1
  228. package/dist/canvas/planeClips.js +18 -19
  229. package/dist/canvas/planeClips.js.map +1 -1
  230. package/dist/canvas/poseCascade.js +41 -0
  231. package/dist/canvas/poseCascade.js.map +1 -0
  232. package/dist/canvas/poseRotation.js +9 -23
  233. package/dist/canvas/poseRotation.js.map +1 -1
  234. package/dist/canvas/rasterReadback.js +22 -0
  235. package/dist/canvas/rasterReadback.js.map +1 -0
  236. package/dist/canvas/renderDebugSnapshot.js +11 -11
  237. package/dist/canvas/renderDebugSnapshot.js.map +1 -1
  238. package/dist/canvas/renderNeeds.js +3 -3
  239. package/dist/canvas/renderNeeds.js.map +1 -1
  240. package/dist/canvas/renderSceneToPixels.js +64 -81
  241. package/dist/canvas/renderSceneToPixels.js.map +1 -1
  242. package/dist/canvas/sceneAdapter.js +68 -214
  243. package/dist/canvas/sceneAdapter.js.map +1 -1
  244. package/dist/canvas/sceneClipboard.js +112 -0
  245. package/dist/canvas/sceneClipboard.js.map +1 -0
  246. package/dist/canvas/sceneLayerPaint.js +4 -4
  247. package/dist/canvas/sceneLayerPaint.js.map +1 -1
  248. package/dist/canvas/sceneSlotWiring.js.map +1 -1
  249. package/dist/canvas/sceneViewRender.js +39 -39
  250. package/dist/canvas/sceneViewRender.js.map +1 -1
  251. package/dist/canvas/slopsDebugLayer.js +4 -4
  252. package/dist/canvas/slopsDebugLayer.js.map +1 -1
  253. package/dist/canvas/surface.module.js +6 -0
  254. package/dist/canvas/surface.module.js.map +1 -0
  255. package/dist/canvas/surfaceBox.js +16 -0
  256. package/dist/canvas/surfaceBox.js.map +1 -0
  257. package/dist/canvas/useCanvasRenderer.js +26 -6
  258. package/dist/canvas/useCanvasRenderer.js.map +1 -1
  259. package/dist/canvas/useCanvasSurface.js +31 -0
  260. package/dist/canvas/useCanvasSurface.js.map +1 -0
  261. package/dist/canvas/useCanvasView.js +67 -0
  262. package/dist/canvas/useCanvasView.js.map +1 -0
  263. package/dist/canvas/useFrameLoop.js +39 -31
  264. package/dist/canvas/useFrameLoop.js.map +1 -1
  265. package/dist/canvas/useHostAnchor.js +35 -33
  266. package/dist/canvas/useHostAnchor.js.map +1 -1
  267. package/dist/canvas/useLateContentRedraw.js +8 -8
  268. package/dist/canvas/useLateContentRedraw.js.map +1 -1
  269. package/dist/canvas/useSceneLayerList.js +11 -0
  270. package/dist/canvas/useSceneLayerList.js.map +1 -0
  271. package/dist/canvas/useSurfaceInput.js +42 -0
  272. package/dist/canvas/useSurfaceInput.js.map +1 -0
  273. package/dist/canvas/useToolCursor.js +29 -0
  274. package/dist/canvas/useToolCursor.js.map +1 -0
  275. package/dist/canvas/useViewHelpers.js +46 -85
  276. package/dist/canvas/useViewHelpers.js.map +1 -1
  277. package/dist/canvas/viewInputs.js.map +1 -1
  278. package/dist/canvas/viewRegistry.js +25 -27
  279. package/dist/canvas/viewRegistry.js.map +1 -1
  280. package/dist/canvas/watchElementMove.js +43 -0
  281. package/dist/canvas/watchElementMove.js.map +1 -0
  282. package/dist/canvas/wrapNodeOutput.js.map +1 -1
  283. package/dist/clipboard.d.ts +16 -19
  284. package/dist/{types-B_9g6hMM.d.ts → clone-2a5hVbBd.d.ts} +123 -74
  285. package/dist/clone.d.ts +4 -7
  286. package/dist/clone.js +0 -2
  287. package/dist/core/device/index.js +5 -4
  288. package/dist/core/device/targets.js.map +1 -1
  289. package/dist/core/device/useDeviceProfile.js +38 -44
  290. package/dist/core/device/useDeviceProfile.js.map +1 -1
  291. package/dist/core/device/watchDevicePixelRatio.js +17 -0
  292. package/dist/core/device/watchDevicePixelRatio.js.map +1 -0
  293. package/dist/{interactions/actions/resize → core/geometry}/autoPoseDescriptor.js +8 -7
  294. package/dist/core/geometry/autoPoseDescriptor.js.map +1 -0
  295. package/dist/core/geometry/pathPoseDescriptor.js +88 -0
  296. package/dist/core/geometry/pathPoseDescriptor.js.map +1 -0
  297. package/dist/core/geometry/poseDescriptor.js +68 -19
  298. package/dist/core/geometry/poseDescriptor.js.map +1 -1
  299. package/dist/core/geometry/regionHit.js +31 -34
  300. package/dist/core/geometry/regionHit.js.map +1 -1
  301. package/dist/core/geometry/targetFrame.js +94 -0
  302. package/dist/core/geometry/targetFrame.js.map +1 -0
  303. package/dist/core/geometry/unionBounds.js +30 -29
  304. package/dist/core/geometry/unionBounds.js.map +1 -1
  305. package/dist/core/isPlainObject.js +2 -11
  306. package/dist/core/layers/backgroundFill.js +31 -0
  307. package/dist/core/layers/backgroundFill.js.map +1 -0
  308. package/dist/{features/groups → core/layers}/children.js +1 -1
  309. package/dist/core/layers/children.js.map +1 -0
  310. package/dist/core/layers/gateLayer.js +13 -0
  311. package/dist/core/layers/gateLayer.js.map +1 -0
  312. package/dist/core/layers/layerGroup.js +40 -0
  313. package/dist/core/layers/layerGroup.js.map +1 -0
  314. package/dist/core/layers/render.js +50 -76
  315. package/dist/core/layers/render.js.map +1 -1
  316. package/dist/core/ops/arrange.js +1 -0
  317. package/dist/core/ops/arrange.js.map +1 -1
  318. package/dist/core/ops/create.js +10 -5
  319. package/dist/core/ops/create.js.map +1 -1
  320. package/dist/core/ops/createHistory.js +9 -9
  321. package/dist/core/ops/createHistory.js.map +1 -1
  322. package/dist/core/ops/delete.js +12 -24
  323. package/dist/core/ops/delete.js.map +1 -1
  324. package/dist/core/ops/reorder/index.js +43 -40
  325. package/dist/core/ops/reorder/index.js.map +1 -1
  326. package/dist/core/ops/reorder/setChildOrder.js +34 -0
  327. package/dist/core/ops/reorder/setChildOrder.js.map +1 -0
  328. package/dist/core/paint/meshKind.js +16 -0
  329. package/dist/core/paint/meshKind.js.map +1 -0
  330. package/dist/{features/meshPaint/lazyKind.js → core/paint/meshKindLazy.js} +282 -105
  331. package/dist/core/paint/meshKindLazy.js.map +1 -0
  332. package/dist/core/paint/paintKindEntry.js +8 -0
  333. package/dist/core/paint/paintKindEntry.js.map +1 -0
  334. package/dist/core/paint/paintKinds.js +144 -0
  335. package/dist/core/paint/paintKinds.js.map +1 -0
  336. package/dist/core/paint/registerMesh.js +7 -0
  337. package/dist/core/paint/registerMesh.js.map +1 -0
  338. package/dist/core/scene/NodeProperties.js.map +1 -1
  339. package/dist/core/scene/NodeRouting.js.map +1 -1
  340. package/dist/core/scene/appliedLog.js +37 -0
  341. package/dist/core/scene/appliedLog.js.map +1 -0
  342. package/dist/core/scene/arrivalWindow.js +102 -0
  343. package/dist/core/scene/arrivalWindow.js.map +1 -0
  344. package/dist/core/scene/boundOps.js +40 -0
  345. package/dist/core/scene/boundOps.js.map +1 -0
  346. package/dist/core/scene/composeFrame.js +9 -6
  347. package/dist/core/scene/composeFrame.js.map +1 -1
  348. package/dist/{features/groups → core/scene}/composePose.js +18 -18
  349. package/dist/core/scene/composePose.js.map +1 -0
  350. package/dist/core/scene/depMemo.js +31 -6
  351. package/dist/core/scene/depMemo.js.map +1 -1
  352. package/dist/core/scene/derivedPath.js +19 -20
  353. package/dist/core/scene/derivedPath.js.map +1 -1
  354. package/dist/core/scene/editMode.js +26 -0
  355. package/dist/core/scene/editMode.js.map +1 -0
  356. package/dist/core/scene/effectivePose.js +38 -39
  357. package/dist/core/scene/effectivePose.js.map +1 -1
  358. package/dist/core/scene/fieldEdits.js +98 -0
  359. package/dist/core/scene/fieldEdits.js.map +1 -0
  360. package/dist/core/scene/historyFacade.js +130 -0
  361. package/dist/core/scene/historyFacade.js.map +1 -0
  362. package/dist/core/scene/historyForm.js +6 -0
  363. package/dist/core/scene/historyForm.js.map +1 -0
  364. package/dist/core/scene/kitOps.js +185 -0
  365. package/dist/core/scene/kitOps.js.map +1 -0
  366. package/dist/core/scene/kitRegistry.js.map +1 -1
  367. package/dist/core/scene/layerStack.js +131 -0
  368. package/dist/core/scene/layerStack.js.map +1 -0
  369. package/dist/core/scene/layoutPass.js +58 -59
  370. package/dist/core/scene/layoutPass.js.map +1 -1
  371. package/dist/core/scene/lockGuard.js +37 -0
  372. package/dist/core/scene/lockGuard.js.map +1 -0
  373. package/dist/{features/groups → core/scene}/nestedHit.js +3 -3
  374. package/dist/core/scene/nestedHit.js.map +1 -0
  375. package/dist/core/scene/nodeFnFields.js +10 -11
  376. package/dist/core/scene/nodeFnFields.js.map +1 -1
  377. package/dist/core/scene/nodeMemo.js +45 -19
  378. package/dist/core/scene/nodeMemo.js.map +1 -1
  379. package/dist/core/scene/nodeStore.js +127 -0
  380. package/dist/core/scene/nodeStore.js.map +1 -0
  381. package/dist/core/scene/notifier.js +37 -0
  382. package/dist/core/scene/notifier.js.map +1 -0
  383. package/dist/core/scene/opTable.js +50 -0
  384. package/dist/core/scene/opTable.js.map +1 -0
  385. package/dist/core/scene/outerOps.js +66 -0
  386. package/dist/core/scene/outerOps.js.map +1 -0
  387. package/dist/core/scene/poseFeed.js +38 -38
  388. package/dist/core/scene/poseFeed.js.map +1 -1
  389. package/dist/core/scene/poseHold.js +39 -0
  390. package/dist/core/scene/poseHold.js.map +1 -0
  391. package/dist/core/scene/poseOverrides.js +44 -40
  392. package/dist/core/scene/poseOverrides.js.map +1 -1
  393. package/dist/core/scene/poseSnapshot.js.map +1 -1
  394. package/dist/core/scene/reconcileSpecs.js +3 -2
  395. package/dist/core/scene/reconcileSpecs.js.map +1 -1
  396. package/dist/core/scene/recorder.js +86 -0
  397. package/dist/core/scene/recorder.js.map +1 -0
  398. package/dist/core/scene/renderOrder.js +84 -0
  399. package/dist/core/scene/renderOrder.js.map +1 -0
  400. package/dist/core/scene/scene.js +80 -1266
  401. package/dist/core/scene/scene.js.map +1 -1
  402. package/dist/core/scene/sceneEdits.js +58 -0
  403. package/dist/core/scene/sceneEdits.js.map +1 -0
  404. package/dist/core/scene/sceneMutators.js +49 -0
  405. package/dist/core/scene/sceneMutators.js.map +1 -0
  406. package/dist/core/scene/scenePoseAdapter.js +16 -0
  407. package/dist/core/scene/scenePoseAdapter.js.map +1 -0
  408. package/dist/core/scene/sceneRecording.js +90 -0
  409. package/dist/core/scene/sceneRecording.js.map +1 -0
  410. package/dist/core/scene/sceneSelection.js +28 -0
  411. package/dist/core/scene/sceneSelection.js.map +1 -0
  412. package/dist/core/scene/sceneState.js +49 -0
  413. package/dist/core/scene/sceneState.js.map +1 -0
  414. package/dist/core/scene/serialization.js +71 -0
  415. package/dist/core/scene/serialization.js.map +1 -0
  416. package/dist/core/scene/staleReplay.js +51 -0
  417. package/dist/core/scene/staleReplay.js.map +1 -0
  418. package/dist/core/scene/statedFields.js +9 -0
  419. package/dist/core/scene/statedFields.js.map +1 -0
  420. package/dist/core/scene/treeEdits.js +127 -0
  421. package/dist/core/scene/treeEdits.js.map +1 -0
  422. package/dist/core/scene/treeOrder.js +13 -0
  423. package/dist/core/scene/treeOrder.js.map +1 -0
  424. package/dist/core/scene/treeReads.js +26 -0
  425. package/dist/core/scene/treeReads.js.map +1 -0
  426. package/dist/core/scene/types.js.map +1 -1
  427. package/dist/{features/groups → core/scene}/unionOfChildren.js +3 -3
  428. package/dist/core/scene/unionOfChildren.js.map +1 -0
  429. package/dist/core/scene/unitScopes.js +13 -0
  430. package/dist/core/scene/unitScopes.js.map +1 -0
  431. package/dist/core/scene/useScene.js.map +1 -1
  432. package/dist/core/selection/readOnlySelection.js +32 -0
  433. package/dist/core/selection/readOnlySelection.js.map +1 -0
  434. package/dist/core/selection/usePublishSceneSelection.js +26 -0
  435. package/dist/core/selection/usePublishSceneSelection.js.map +1 -0
  436. package/dist/core/selection/useSelection.js +34 -25
  437. package/dist/core/selection/useSelection.js.map +1 -1
  438. package/dist/core/shapeKinds.js.map +1 -1
  439. package/dist/core/stylus/stylus.js.map +1 -1
  440. package/dist/core/stylus/usePointerStylus.js.map +1 -1
  441. package/dist/core/usePaintKinds.js +1 -1
  442. package/dist/core/usePaintKinds.js.map +1 -1
  443. package/dist/core/viewport/clientToWorld.js.map +1 -1
  444. package/dist/core/viewport/fitViewToBounds.js.map +1 -1
  445. package/dist/core/viewport/parallax.js.map +1 -1
  446. package/dist/core/viewport/screenSlop.js +11 -11
  447. package/dist/core/viewport/screenSlop.js.map +1 -1
  448. package/dist/core/viewport/useCanvasSize.js.map +1 -1
  449. package/dist/core/viewport/useDecayLoop.js +8 -8
  450. package/dist/core/viewport/useDecayLoop.js.map +1 -1
  451. package/dist/core/viewport/useNodeOverlayFrame.js +84 -0
  452. package/dist/core/viewport/useNodeOverlayFrame.js.map +1 -0
  453. package/dist/core/viewport/useViewAnimation.js +102 -43
  454. package/dist/core/viewport/useViewAnimation.js.map +1 -1
  455. package/dist/core/viewport/view.js +9 -9
  456. package/dist/core/viewport/view.js.map +1 -1
  457. package/dist/core/viewport/wheelHandler.js.map +1 -1
  458. package/dist/core/viewport/zoomBounds.js +10 -8
  459. package/dist/core/viewport/zoomBounds.js.map +1 -1
  460. package/dist/{cornerHandles-BCrDp_mH.d.ts → cornerHandles-BEshc4z3.d.ts} +11 -24
  461. package/dist/debug/createDebugOverlayLayer.js +97 -97
  462. package/dist/debug/createDebugOverlayLayer.js.map +1 -1
  463. package/dist/debug/createDebugSink.js.map +1 -1
  464. package/dist/debug/flag.js +2 -41
  465. package/dist/debug/frameStats.js.map +1 -1
  466. package/dist/debug/useDebugSink.js +52 -0
  467. package/dist/debug/useDebugSink.js.map +1 -0
  468. package/dist/features/chrome-caps/buildChromeCtx.js.map +1 -1
  469. package/dist/features/chrome-caps/conditions.js.map +1 -1
  470. package/dist/features/chrome-caps/defaults.js.map +1 -1
  471. package/dist/features/chrome-caps/resolve.js.map +1 -1
  472. package/dist/features/chrome-caps/useChromeCaps.js +54 -0
  473. package/dist/features/chrome-caps/useChromeCaps.js.map +1 -0
  474. package/dist/features/chrome-caps/useHoverTracking.js +22 -17
  475. package/dist/features/chrome-caps/useHoverTracking.js.map +1 -1
  476. package/dist/features/ingestion/contentHandlers.js +28 -19
  477. package/dist/features/ingestion/contentHandlers.js.map +1 -1
  478. package/dist/features/ingestion/imageHandler.js +21 -24
  479. package/dist/features/ingestion/imageHandler.js.map +1 -1
  480. package/dist/features/ingestion/openFilePicker.js.map +1 -1
  481. package/dist/features/ingestion/placement.js +16 -0
  482. package/dist/features/ingestion/placement.js.map +1 -0
  483. package/dist/features/ingestion/registerKitHandlers.js +7 -7
  484. package/dist/features/ingestion/svgHandler.js +5 -0
  485. package/dist/features/ingestion/svgHandler.js.map +1 -1
  486. package/dist/features/ingestion/textHandler.js +28 -0
  487. package/dist/features/ingestion/textHandler.js.map +1 -0
  488. package/dist/features/ingestion/useCanvasIngestion.js +48 -0
  489. package/dist/features/ingestion/useCanvasIngestion.js.map +1 -0
  490. package/dist/features/ingestion/weaselJsonHandler.js +22 -14
  491. package/dist/features/ingestion/weaselJsonHandler.js.map +1 -1
  492. package/dist/features/longPress/longPressFeedback.js.map +1 -1
  493. package/dist/features/modes/modeLayers.js +7 -7
  494. package/dist/features/modes/modeLayers.js.map +1 -1
  495. package/dist/features/paths/editablePath.js +47 -0
  496. package/dist/features/paths/editablePath.js.map +1 -0
  497. package/dist/features/paths/index.js +9 -14
  498. package/dist/features/paths/pathEditState.js +41 -0
  499. package/dist/features/paths/pathEditState.js.map +1 -0
  500. package/dist/features/paths/pathEditingOverlayLayer.js +36 -38
  501. package/dist/features/paths/pathEditingOverlayLayer.js.map +1 -1
  502. package/dist/features/paths/pathLayer.js +3 -2
  503. package/dist/features/paths/pathLayer.js.map +1 -1
  504. package/dist/features/paths/penPreviewLayer.js +86 -88
  505. package/dist/features/paths/penPreviewLayer.js.map +1 -1
  506. package/dist/features/paths/usePathEdit.js +34 -0
  507. package/dist/features/paths/usePathEdit.js.map +1 -0
  508. package/dist/features/poseRun/usePoseRun.js +44 -52
  509. package/dist/features/poseRun/usePoseRun.js.map +1 -1
  510. package/dist/features/selection/overlay.js +171 -179
  511. package/dist/features/selection/overlay.js.map +1 -1
  512. package/dist/features/text/index.js +6 -0
  513. package/dist/features/text/textLayer.js +1 -1
  514. package/dist/features/text/textLayer.js.map +1 -1
  515. package/dist/features/text/useSceneTextEdit.js +100 -93
  516. package/dist/features/text/useSceneTextEdit.js.map +1 -1
  517. package/dist/features/viewports/viewportLayer.js +25 -36
  518. package/dist/features/viewports/viewportLayer.js.map +1 -1
  519. package/dist/index.d.ts +8473 -9141
  520. package/dist/index.js +269 -307
  521. package/dist/input/keyState.js +38 -39
  522. package/dist/input/keyState.js.map +1 -1
  523. package/dist/input/useKeyModifiers.js +11 -0
  524. package/dist/input/useKeyModifiers.js.map +1 -0
  525. package/dist/interactions/actions/actionShortcuts.js.map +1 -1
  526. package/dist/interactions/actions/{defaults/align.js → align/action.js} +18 -20
  527. package/dist/interactions/actions/align/action.js.map +1 -0
  528. package/dist/interactions/actions/align/align.js +20 -20
  529. package/dist/interactions/actions/align/align.js.map +1 -1
  530. package/dist/interactions/actions/booleans/action.js +65 -0
  531. package/dist/interactions/actions/booleans/action.js.map +1 -0
  532. package/dist/interactions/actions/booleans/booleans.js +69 -78
  533. package/dist/interactions/actions/booleans/booleans.js.map +1 -1
  534. package/dist/interactions/actions/booleans/operands.js +40 -0
  535. package/dist/interactions/actions/booleans/operands.js.map +1 -0
  536. package/dist/interactions/actions/booleans/pieces.js +45 -0
  537. package/dist/interactions/actions/booleans/pieces.js.map +1 -0
  538. package/dist/interactions/actions/booleans/placement.js +24 -0
  539. package/dist/interactions/actions/booleans/placement.js.map +1 -0
  540. package/dist/interactions/actions/booleans/useBooleans.js +11 -9
  541. package/dist/interactions/actions/booleans/useBooleans.js.map +1 -1
  542. package/dist/interactions/actions/booleans/useBooleansAdapter.js.map +1 -1
  543. package/dist/interactions/actions/{defaults/clipboard.js → clipboard/action.js} +31 -15
  544. package/dist/interactions/actions/clipboard/action.js.map +1 -0
  545. package/dist/interactions/actions/clipboard/clipboardOps.js +44 -42
  546. package/dist/interactions/actions/clipboard/clipboardOps.js.map +1 -1
  547. package/dist/interactions/actions/clipboard/materializePaste.js +10 -7
  548. package/dist/interactions/actions/clipboard/materializePaste.js.map +1 -1
  549. package/dist/interactions/actions/clipboard/wireFormat.js.map +1 -1
  550. package/dist/interactions/actions/clone/action.js +98 -0
  551. package/dist/interactions/actions/clone/action.js.map +1 -0
  552. package/dist/interactions/actions/clone/behaviors.js +52 -0
  553. package/dist/interactions/actions/clone/behaviors.js.map +1 -0
  554. package/dist/interactions/actions/defaultCommitAdapter.js +7 -32
  555. package/dist/interactions/actions/defaultCommitAdapter.js.map +1 -1
  556. package/dist/interactions/actions/defaults/anchorEditing.js +60 -84
  557. package/dist/interactions/actions/defaults/anchorEditing.js.map +1 -1
  558. package/dist/interactions/actions/defaults/areaSelect.js +35 -38
  559. package/dist/interactions/actions/defaults/areaSelect.js.map +1 -1
  560. package/dist/interactions/actions/defaults/cancelGesture.js.map +1 -1
  561. package/dist/interactions/actions/defaults/clearSelection.js.map +1 -1
  562. package/dist/interactions/actions/defaults/copySubtree.js +40 -0
  563. package/dist/interactions/actions/defaults/copySubtree.js.map +1 -0
  564. package/dist/interactions/actions/defaults/createPaintAction.js.map +1 -1
  565. package/dist/interactions/actions/defaults/delete.js.map +1 -1
  566. package/dist/interactions/actions/defaults/duplicate.js +13 -53
  567. package/dist/interactions/actions/defaults/duplicate.js.map +1 -1
  568. package/dist/interactions/actions/defaults/enterTextEdit.js.map +1 -1
  569. package/dist/interactions/actions/defaults/group.js +40 -50
  570. package/dist/interactions/actions/defaults/group.js.map +1 -1
  571. package/dist/interactions/actions/defaults/icons/booleanIcons.js +24 -1
  572. package/dist/interactions/actions/defaults/icons/booleanIcons.js.map +1 -1
  573. package/dist/interactions/actions/defaults/icons/outlineIcons.js +39 -1
  574. package/dist/interactions/actions/defaults/icons/outlineIcons.js.map +1 -1
  575. package/dist/interactions/actions/defaults/ingest.js +44 -38
  576. package/dist/interactions/actions/defaults/ingest.js.map +1 -1
  577. package/dist/interactions/actions/defaults/insertPathAnchor.js +11 -12
  578. package/dist/interactions/actions/defaults/insertPathAnchor.js.map +1 -1
  579. package/dist/interactions/actions/defaults/nudge.js +40 -69
  580. package/dist/interactions/actions/defaults/nudge.js.map +1 -1
  581. package/dist/interactions/actions/defaults/nudgeSteps.js +37 -0
  582. package/dist/interactions/actions/defaults/nudgeSteps.js.map +1 -0
  583. package/dist/interactions/actions/defaults/pinchZoom.js.map +1 -1
  584. package/dist/interactions/actions/defaults/reorder.js +2 -0
  585. package/dist/interactions/actions/defaults/reorder.js.map +1 -1
  586. package/dist/interactions/actions/defaults/requiresSelection.js.map +1 -1
  587. package/dist/interactions/actions/defaults/setFill.js +14 -8
  588. package/dist/interactions/actions/defaults/setFill.js.map +1 -1
  589. package/dist/interactions/actions/defaults/setFillOpacity.js +7 -4
  590. package/dist/interactions/actions/defaults/setFillOpacity.js.map +1 -1
  591. package/dist/interactions/actions/defaults/setStroke.js +12 -12
  592. package/dist/interactions/actions/defaults/setStroke.js.map +1 -1
  593. package/dist/interactions/actions/defaults/setStrokeOpacity.js +6 -6
  594. package/dist/interactions/actions/defaults/sliceOps.js +8 -10
  595. package/dist/interactions/actions/defaults/sliceOps.js.map +1 -1
  596. package/dist/interactions/actions/defaults/toolActivate.js.map +1 -1
  597. package/dist/interactions/actions/defaults/toolResetToDefault.js.map +1 -1
  598. package/dist/interactions/actions/defaults/viewportDragPan.js +37 -26
  599. package/dist/interactions/actions/defaults/viewportDragPan.js.map +1 -1
  600. package/dist/interactions/actions/defaults/viewportWheelPan.js.map +1 -1
  601. package/dist/interactions/actions/defaults/viewportZoom.js.map +1 -1
  602. package/dist/interactions/actions/distribute/action.js +66 -0
  603. package/dist/interactions/actions/distribute/action.js.map +1 -0
  604. package/dist/interactions/actions/distribute/distribute.js +11 -11
  605. package/dist/interactions/actions/distribute/distribute.js.map +1 -1
  606. package/dist/interactions/actions/{defaults/editAnchors.js → edit-anchors/action.js} +7 -9
  607. package/dist/interactions/actions/edit-anchors/action.js.map +1 -0
  608. package/dist/interactions/actions/edit-anchors/geometry.js +30 -27
  609. package/dist/interactions/actions/edit-anchors/geometry.js.map +1 -1
  610. package/dist/interactions/actions/flip/action.js +124 -0
  611. package/dist/interactions/actions/flip/action.js.map +1 -0
  612. package/dist/interactions/actions/flip/helpers.js +30 -17
  613. package/dist/interactions/actions/flip/helpers.js.map +1 -1
  614. package/dist/interactions/actions/gestureFrames.js +18 -0
  615. package/dist/interactions/actions/gestureFrames.js.map +1 -0
  616. package/dist/interactions/actions/gestureLifecycle.js +47 -20
  617. package/dist/interactions/actions/gestureLifecycle.js.map +1 -1
  618. package/dist/interactions/actions/hitSelection.js +8 -0
  619. package/dist/interactions/actions/hitSelection.js.map +1 -0
  620. package/dist/interactions/actions/insert/action.js +72 -0
  621. package/dist/interactions/actions/insert/action.js.map +1 -0
  622. package/dist/interactions/actions/insert/commit.js +28 -0
  623. package/dist/interactions/actions/insert/commit.js.map +1 -0
  624. package/dist/interactions/actions/insert/extras.js +65 -0
  625. package/dist/interactions/actions/insert/extras.js.map +1 -0
  626. package/dist/interactions/actions/insert/frame.js +48 -0
  627. package/dist/interactions/actions/insert/frame.js.map +1 -0
  628. package/dist/interactions/actions/insert/geometry.js +35 -0
  629. package/dist/interactions/actions/insert/geometry.js.map +1 -0
  630. package/dist/interactions/actions/insert/rotateAction.js +21 -0
  631. package/dist/interactions/actions/insert/rotateAction.js.map +1 -0
  632. package/dist/interactions/actions/insert/session.js +59 -0
  633. package/dist/interactions/actions/insert/session.js.map +1 -0
  634. package/dist/interactions/actions/insert/shape.js +34 -0
  635. package/dist/interactions/actions/insert/shape.js.map +1 -0
  636. package/dist/interactions/actions/lasso-select/action.js +143 -0
  637. package/dist/interactions/actions/lasso-select/action.js.map +1 -0
  638. package/dist/interactions/actions/lasso-select/behaviors/selectFromLasso.js +14 -18
  639. package/dist/interactions/actions/lasso-select/behaviors/selectFromLasso.js.map +1 -1
  640. package/dist/interactions/actions/move/action.js +87 -0
  641. package/dist/interactions/actions/move/action.js.map +1 -0
  642. package/dist/interactions/actions/move/behaviors/layoutDrop.js +51 -0
  643. package/dist/interactions/actions/move/behaviors/layoutDrop.js.map +1 -0
  644. package/dist/interactions/actions/move/behaviors/reparentOnDrop.js +15 -0
  645. package/dist/interactions/actions/move/behaviors/reparentOnDrop.js.map +1 -0
  646. package/dist/interactions/actions/move/behaviors/snapBackOrDelete.js +5 -5
  647. package/dist/interactions/actions/move/behaviors/snapBackOrDelete.js.map +1 -1
  648. package/dist/interactions/actions/move/behaviors/snapToContainer.js +39 -27
  649. package/dist/interactions/actions/move/behaviors/snapToContainer.js.map +1 -1
  650. package/dist/interactions/actions/move/capture.js +99 -0
  651. package/dist/interactions/actions/move/capture.js.map +1 -0
  652. package/dist/interactions/actions/move/commit/index.js +41 -0
  653. package/dist/interactions/actions/move/commit/index.js.map +1 -0
  654. package/dist/interactions/actions/move/commit/layoutDrop.js +44 -0
  655. package/dist/interactions/actions/move/commit/layoutDrop.js.map +1 -0
  656. package/dist/interactions/actions/move/commit/layoutRelease.js +100 -0
  657. package/dist/interactions/actions/move/commit/layoutRelease.js.map +1 -0
  658. package/dist/interactions/actions/move/commit/rebase.js +18 -0
  659. package/dist/interactions/actions/move/commit/rebase.js.map +1 -0
  660. package/dist/interactions/actions/move/commit/reparent.js +65 -0
  661. package/dist/interactions/actions/move/commit/reparent.js.map +1 -0
  662. package/dist/interactions/actions/move/delta.js +51 -0
  663. package/dist/interactions/actions/move/delta.js.map +1 -0
  664. package/dist/interactions/actions/move/frame.js +59 -0
  665. package/dist/interactions/actions/move/frame.js.map +1 -0
  666. package/dist/interactions/actions/move/gestureAdapter.js +22 -30
  667. package/dist/interactions/actions/move/gestureAdapter.js.map +1 -1
  668. package/dist/interactions/actions/move/landedDescendants.js +33 -0
  669. package/dist/interactions/actions/move/landedDescendants.js.map +1 -0
  670. package/dist/interactions/actions/move/layout/container.js +94 -0
  671. package/dist/interactions/actions/move/layout/container.js.map +1 -0
  672. package/dist/interactions/actions/move/layout/dragged.js +58 -0
  673. package/dist/interactions/actions/move/layout/dragged.js.map +1 -0
  674. package/dist/interactions/actions/move/layout/dropPass.js +122 -0
  675. package/dist/interactions/actions/move/layout/dropPass.js.map +1 -0
  676. package/dist/interactions/actions/move/layout/exits.js +38 -0
  677. package/dist/interactions/actions/move/layout/exits.js.map +1 -0
  678. package/dist/interactions/actions/move/layout/glide.js +48 -0
  679. package/dist/interactions/actions/move/layout/glide.js.map +1 -0
  680. package/dist/interactions/actions/move/session.js +63 -0
  681. package/dist/interactions/actions/move/session.js.map +1 -0
  682. package/dist/interactions/actions/move/translate.js +61 -0
  683. package/dist/interactions/actions/move/translate.js.map +1 -0
  684. package/dist/interactions/actions/outlines/createOutlines.js +16 -63
  685. package/dist/interactions/actions/outlines/createOutlines.js.map +1 -1
  686. package/dist/interactions/actions/outlines/createOutlinesAction.js +51 -0
  687. package/dist/interactions/actions/outlines/createOutlinesAction.js.map +1 -0
  688. package/dist/interactions/actions/outlines/outlineStroke.js +72 -0
  689. package/dist/interactions/actions/outlines/outlineStroke.js.map +1 -0
  690. package/dist/interactions/actions/outlines/outlineStrokeAction.js +37 -0
  691. package/dist/interactions/actions/outlines/outlineStrokeAction.js.map +1 -0
  692. package/dist/interactions/actions/outlines/replaceWithPaths.js +54 -0
  693. package/dist/interactions/actions/outlines/replaceWithPaths.js.map +1 -0
  694. package/dist/interactions/actions/outlines/strokeRegion.js +27 -0
  695. package/dist/interactions/actions/outlines/strokeRegion.js.map +1 -0
  696. package/dist/interactions/actions/planeInput.js.map +1 -1
  697. package/dist/interactions/actions/pointerState.js +12 -0
  698. package/dist/interactions/actions/pointerState.js.map +1 -0
  699. package/dist/interactions/actions/poseDescriptorDep.js +16 -4
  700. package/dist/interactions/actions/poseDescriptorDep.js.map +1 -1
  701. package/dist/interactions/actions/poseFrame.js +25 -20
  702. package/dist/interactions/actions/poseFrame.js.map +1 -1
  703. package/dist/interactions/actions/resize/action.js +55 -0
  704. package/dist/interactions/actions/resize/action.js.map +1 -0
  705. package/dist/interactions/actions/resize/behaviors/lockAspect.js.map +1 -1
  706. package/dist/interactions/actions/resize/boxFrame.js +16 -0
  707. package/dist/interactions/actions/resize/boxFrame.js.map +1 -0
  708. package/dist/interactions/actions/resize/capture.js +85 -0
  709. package/dist/interactions/actions/resize/capture.js.map +1 -0
  710. package/dist/interactions/actions/resize/commit.js +69 -0
  711. package/dist/interactions/actions/resize/commit.js.map +1 -0
  712. package/dist/interactions/actions/resize/frame.js +74 -0
  713. package/dist/interactions/actions/resize/frame.js.map +1 -0
  714. package/dist/interactions/actions/resize/pointSnap.js +111 -0
  715. package/dist/interactions/actions/resize/pointSnap.js.map +1 -0
  716. package/dist/interactions/actions/resize/ruleBounds.js +9 -0
  717. package/dist/interactions/actions/resize/ruleBounds.js.map +1 -0
  718. package/dist/interactions/actions/resize/session.js +49 -0
  719. package/dist/interactions/actions/resize/session.js.map +1 -0
  720. package/dist/interactions/actions/resolveOverlays.js.map +1 -1
  721. package/dist/interactions/actions/resolvePreviews.js.map +1 -1
  722. package/dist/interactions/actions/rotate/action.js +56 -0
  723. package/dist/interactions/actions/rotate/action.js.map +1 -0
  724. package/dist/interactions/actions/rotate/behaviors/index.js +7 -0
  725. package/dist/interactions/actions/rotate/behaviors/index.js.map +1 -0
  726. package/dist/interactions/actions/rotate/behaviors/snapRotation.js +12 -0
  727. package/dist/interactions/actions/rotate/behaviors/snapRotation.js.map +1 -0
  728. package/dist/interactions/actions/rotate/commit.js +40 -0
  729. package/dist/interactions/actions/rotate/commit.js.map +1 -0
  730. package/dist/interactions/actions/rotate/frame.js +65 -0
  731. package/dist/interactions/actions/rotate/frame.js.map +1 -0
  732. package/dist/interactions/actions/rotate/handle.js +12 -12
  733. package/dist/interactions/actions/rotate/handle.js.map +1 -1
  734. package/dist/interactions/actions/rotate/session.js +92 -0
  735. package/dist/interactions/actions/rotate/session.js.map +1 -0
  736. package/dist/interactions/actions/selectionSubtree.js +69 -0
  737. package/dist/interactions/actions/selectionSubtree.js.map +1 -0
  738. package/dist/interactions/actions/spatialReference.js.map +1 -1
  739. package/dist/interactions/actions/useStandardActions.js +87 -78
  740. package/dist/interactions/actions/useStandardActions.js.map +1 -1
  741. package/dist/interactions/gestures/dragGesture/dragGesture.js +4 -7
  742. package/dist/interactions/gestures/dragGesture/dragGesture.js.map +1 -1
  743. package/dist/interactions/gestures/dragGesture/dragPointOf.js +23 -0
  744. package/dist/interactions/gestures/dragGesture/dragPointOf.js.map +1 -0
  745. package/dist/interactions/gestures/handleDrag/handleDrag.js +21 -26
  746. package/dist/interactions/gestures/handleDrag/handleDrag.js.map +1 -1
  747. package/dist/interactions/gestures/pointerDrag/pointerDrag.js +62 -41
  748. package/dist/interactions/gestures/pointerDrag/pointerDrag.js.map +1 -1
  749. package/dist/interactions/gestures/shared/originProjection.js +1 -1
  750. package/dist/interactions/gestures/shared/originProjection.js.map +1 -1
  751. package/dist/interactions/gestures/shared/screenTolerance.js +8 -2
  752. package/dist/interactions/gestures/shared/screenTolerance.js.map +1 -1
  753. package/dist/interactions/gestures/shared/snap.js.map +1 -1
  754. package/dist/interactions/gestures/thresholdDrag/thresholdDrag.js +8 -4
  755. package/dist/interactions/gestures/thresholdDrag/thresholdDrag.js.map +1 -1
  756. package/dist/layout/arrivals.js +20 -23
  757. package/dist/layout/arrivals.js.map +1 -1
  758. package/dist/math-CYUjoyyU.d.ts +33 -0
  759. package/dist/math.d.ts +5 -3
  760. package/dist/math.js +6 -6
  761. package/dist/mesh.d.ts +4 -268
  762. package/dist/mesh.js +3 -7
  763. package/dist/move.d.ts +14 -11
  764. package/dist/{originProjection-DEklpDc_.d.ts → originProjection-PPT88jZv.d.ts} +1 -1
  765. package/dist/patterns-builtin.d.ts +1 -118
  766. package/dist/patterns-builtin.js +2 -3
  767. package/dist/{poseDescriptor-D-OH-tu5.d.ts → poseDescriptor-Bqk-11Rl.d.ts} +26 -36
  768. package/dist/renderer.d.ts +1 -91
  769. package/dist/renderer.js +2 -18
  770. package/dist/resize.d.ts +10 -22
  771. package/dist/resize.js +6 -6
  772. package/dist/style.css +1 -1
  773. package/dist/test-hook/install.js +12 -6
  774. package/dist/test-hook/install.js.map +1 -1
  775. package/dist/test-hook/useTestHook.js +22 -0
  776. package/dist/test-hook/useTestHook.js.map +1 -0
  777. package/dist/test-seams-D0pyV3pR.d.ts +149 -0
  778. package/dist/test-seams.d.ts +4 -4
  779. package/dist/test-seams.js +2 -2
  780. package/dist/tools/builtin/bone/boneActions.js +130 -0
  781. package/dist/tools/builtin/bone/boneActions.js.map +1 -0
  782. package/dist/tools/builtin/bone/boneOverlay.js +58 -0
  783. package/dist/tools/builtin/bone/boneOverlay.js.map +1 -0
  784. package/dist/tools/builtin/bone/placedRig.js +24 -0
  785. package/dist/tools/builtin/bone/placedRig.js.map +1 -0
  786. package/dist/tools/builtin/bone/rigEditState.js +21 -0
  787. package/dist/tools/builtin/bone/rigEditState.js.map +1 -0
  788. package/dist/tools/builtin/bone/useBoneTool.js +98 -0
  789. package/dist/tools/builtin/bone/useBoneTool.js.map +1 -0
  790. package/dist/tools/builtin/ellipse/useEllipseTool.js +1 -0
  791. package/dist/tools/builtin/ellipse/useEllipseTool.js.map +1 -1
  792. package/dist/tools/builtin/eyedropper/useEyedropperTool.js.map +1 -1
  793. package/dist/tools/builtin/hand/useHandTool.js +1 -0
  794. package/dist/tools/builtin/hand/useHandTool.js.map +1 -1
  795. package/dist/tools/builtin/image/useImageTool.js.map +1 -1
  796. package/dist/tools/builtin/lasso/useLassoTool.js +11 -11
  797. package/dist/tools/builtin/lasso/useLassoTool.js.map +1 -1
  798. package/dist/tools/builtin/line/useLineTool.js +1 -0
  799. package/dist/tools/builtin/line/useLineTool.js.map +1 -1
  800. package/dist/tools/builtin/pen/usePenTool.js +198 -150
  801. package/dist/tools/builtin/pen/usePenTool.js.map +1 -1
  802. package/dist/tools/builtin/pencil/usePencilTool.js +1 -0
  803. package/dist/tools/builtin/pencil/usePencilTool.js.map +1 -1
  804. package/dist/tools/builtin/pickTopMostHit.js.map +1 -1
  805. package/dist/tools/builtin/polygon/usePolygonTool.js +13 -8
  806. package/dist/tools/builtin/polygon/usePolygonTool.js.map +1 -1
  807. package/dist/tools/builtin/rect/useRectTool.js +1 -0
  808. package/dist/tools/builtin/rect/useRectTool.js.map +1 -1
  809. package/dist/tools/builtin/select/adapterPointQuery.js +36 -0
  810. package/dist/tools/builtin/select/adapterPointQuery.js.map +1 -0
  811. package/dist/tools/builtin/select/selectionContributions.js +25 -24
  812. package/dist/tools/builtin/select/selectionContributions.js.map +1 -1
  813. package/dist/tools/builtin/select/useSelectTool.js +42 -67
  814. package/dist/tools/builtin/select/useSelectTool.js.map +1 -1
  815. package/dist/tools/builtin/shared/pointerFollower.js +17 -0
  816. package/dist/tools/builtin/shared/pointerFollower.js.map +1 -0
  817. package/dist/tools/builtin/slice/useSliceTool.js +72 -82
  818. package/dist/tools/builtin/slice/useSliceTool.js.map +1 -1
  819. package/dist/tools/builtin/star/useStarTool.js +22 -16
  820. package/dist/tools/builtin/star/useStarTool.js.map +1 -1
  821. package/dist/tools/builtin/text/useTextTool.js +9 -0
  822. package/dist/tools/builtin/text/useTextTool.js.map +1 -1
  823. package/dist/tools/builtin/weight/useWeightTool.js +77 -0
  824. package/dist/tools/builtin/weight/useWeightTool.js.map +1 -0
  825. package/dist/tools/builtin/weight/weightActions.js +112 -0
  826. package/dist/tools/builtin/weight/weightActions.js.map +1 -0
  827. package/dist/tools/builtin/weight/weightOverlay.js +61 -0
  828. package/dist/tools/builtin/weight/weightOverlay.js.map +1 -0
  829. package/dist/tools/overlayBinding.js.map +1 -1
  830. package/dist/tools/useKeybindings.js +12 -22
  831. package/dist/tools/useKeybindings.js.map +1 -1
  832. package/dist/{types-A37hYkeR.d.ts → types-CIKDwlsP.d.ts} +113 -169
  833. package/dist/util/color.js +3 -3
  834. package/dist/util/color.js.map +1 -1
  835. package/dist/util/paint.js +1 -1
  836. package/dist/util/paint.js.map +1 -1
  837. package/dist/version.js +1 -1
  838. package/package.json +28 -21
  839. package/dist/animation/colorHelpers.js +0 -135
  840. package/dist/animation/colorHelpers.js.map +0 -1
  841. package/dist/animation/colorRegistry.js +0 -37
  842. package/dist/animation/colorRegistry.js.map +0 -1
  843. package/dist/animation/engine/axes.js +0 -36
  844. package/dist/animation/engine/axes.js.map +0 -1
  845. package/dist/animation/engine/codec.js +0 -170
  846. package/dist/animation/engine/codec.js.map +0 -1
  847. package/dist/animation/engine/integrator.js +0 -12
  848. package/dist/animation/engine/integrator.js.map +0 -1
  849. package/dist/animation/loop.js +0 -62
  850. package/dist/animation/loop.js.map +0 -1
  851. package/dist/animation/observe.js +0 -23
  852. package/dist/animation/observe.js.map +0 -1
  853. package/dist/animation/rig/blendPoses.js +0 -43
  854. package/dist/animation/rig/blendPoses.js.map +0 -1
  855. package/dist/animation/rig/mirrorPose.js +0 -19
  856. package/dist/animation/rig/mirrorPose.js.map +0 -1
  857. package/dist/animation/rig/resolveSkeleton.js +0 -33
  858. package/dist/animation/rig/resolveSkeleton.js.map +0 -1
  859. package/dist/animation/rig/solveIk.js +0 -103
  860. package/dist/animation/rig/solveIk.js.map +0 -1
  861. package/dist/animation/rig/types.js +0 -12
  862. package/dist/animation/rig/types.js.map +0 -1
  863. package/dist/animation/slew.js +0 -27
  864. package/dist/animation/slew.js.map +0 -1
  865. package/dist/animation/stagger.js +0 -138
  866. package/dist/animation/stagger.js.map +0 -1
  867. package/dist/animation/timeline/booking.js +0 -106
  868. package/dist/animation/timeline/booking.js.map +0 -1
  869. package/dist/animation/timeline/createTimeline.js +0 -116
  870. package/dist/animation/timeline/createTimeline.js.map +0 -1
  871. package/dist/animation/timeline/sampleTrack.js +0 -71
  872. package/dist/animation/timeline/sampleTrack.js.map +0 -1
  873. package/dist/animation/useAnimator.js +0 -378
  874. package/dist/animation/useAnimator.js.map +0 -1
  875. package/dist/builtins-C-VgUlWI.d.ts +0 -4514
  876. package/dist/canvas/MinimapCanvas.js +0 -139
  877. package/dist/canvas/MinimapCanvas.js.map +0 -1
  878. package/dist/canvas/deps/poseComposition.js +0 -11
  879. package/dist/canvas/deps/poseComposition.js.map +0 -1
  880. package/dist/canvas/minimapMath.js +0 -80
  881. package/dist/canvas/minimapMath.js.map +0 -1
  882. package/dist/canvas/toolPreview.js +0 -39
  883. package/dist/canvas/toolPreview.js.map +0 -1
  884. package/dist/core/adapters/arrayAdapter.js +0 -85
  885. package/dist/core/adapters/arrayAdapter.js.map +0 -1
  886. package/dist/core/adapters/useArrayAdapter.js +0 -13
  887. package/dist/core/adapters/useArrayAdapter.js.map +0 -1
  888. package/dist/core/fillInPoseFrame.js +0 -102
  889. package/dist/core/fillInPoseFrame.js.map +0 -1
  890. package/dist/core/geometry/poseRotation.js +0 -58
  891. package/dist/core/geometry/poseRotation.js.map +0 -1
  892. package/dist/core/gradient.js +0 -136
  893. package/dist/core/gradient.js.map +0 -1
  894. package/dist/core/isPlainObject.js.map +0 -1
  895. package/dist/core/markerInset.js +0 -24
  896. package/dist/core/markerInset.js.map +0 -1
  897. package/dist/core/mixed.js +0 -6
  898. package/dist/core/mixed.js.map +0 -1
  899. package/dist/core/paintKinds.js +0 -156
  900. package/dist/core/paintKinds.js.map +0 -1
  901. package/dist/core/strokeMarkerShapes.js +0 -139
  902. package/dist/core/strokeMarkerShapes.js.map +0 -1
  903. package/dist/core/strokeMarkers.js +0 -28
  904. package/dist/core/strokeMarkers.js.map +0 -1
  905. package/dist/core/viewport/meanScale.js +0 -8
  906. package/dist/core/viewport/meanScale.js.map +0 -1
  907. package/dist/core/viewport/pxExtent.js +0 -42
  908. package/dist/core/viewport/pxExtent.js.map +0 -1
  909. package/dist/debug/flag.js.map +0 -1
  910. package/dist/features/cursor/paintedCursorLayer.js.map +0 -1
  911. package/dist/features/focus/gateLayer.js +0 -14
  912. package/dist/features/focus/gateLayer.js.map +0 -1
  913. package/dist/features/focus/useCanvasFocus.js +0 -29
  914. package/dist/features/focus/useCanvasFocus.js.map +0 -1
  915. package/dist/features/groups/children.js.map +0 -1
  916. package/dist/features/groups/composePose.js.map +0 -1
  917. package/dist/features/groups/nestedHit.js.map +0 -1
  918. package/dist/features/groups/unionOfChildren.js.map +0 -1
  919. package/dist/features/images/imageCache.js +0 -94
  920. package/dist/features/images/imageCache.js.map +0 -1
  921. package/dist/features/ingestion/index.js +0 -8
  922. package/dist/features/meshPaint/bake.js +0 -79
  923. package/dist/features/meshPaint/bake.js.map +0 -1
  924. package/dist/features/meshPaint/bakeCache.js +0 -59
  925. package/dist/features/meshPaint/bakeCache.js.map +0 -1
  926. package/dist/features/meshPaint/handles.js +0 -86
  927. package/dist/features/meshPaint/handles.js.map +0 -1
  928. package/dist/features/meshPaint/lazyKind.js.map +0 -1
  929. package/dist/features/meshPaint/meshPaint.js +0 -236
  930. package/dist/features/meshPaint/meshPaint.js.map +0 -1
  931. package/dist/features/meshPaint/meshShader.js +0 -6
  932. package/dist/features/meshPaint/meshShader.js.map +0 -1
  933. package/dist/features/meshPaint/register.js +0 -7
  934. package/dist/features/meshPaint/register.js.map +0 -1
  935. package/dist/features/meshPaint/surface.js +0 -110
  936. package/dist/features/meshPaint/surface.js.map +0 -1
  937. package/dist/features/minimap/actions.js +0 -53
  938. package/dist/features/minimap/actions.js.map +0 -1
  939. package/dist/features/minimap/createMinimapContribution.js +0 -96
  940. package/dist/features/minimap/createMinimapContribution.js.map +0 -1
  941. package/dist/features/minimap/layers.js +0 -103
  942. package/dist/features/minimap/layers.js.map +0 -1
  943. package/dist/features/overlays/useNodeOverlayFrame.js +0 -103
  944. package/dist/features/overlays/useNodeOverlayFrame.js.map +0 -1
  945. package/dist/features/parallax/createParallaxLayer.js +0 -26
  946. package/dist/features/parallax/createParallaxLayer.js.map +0 -1
  947. package/dist/features/parallax/createParallaxPlane.js +0 -26
  948. package/dist/features/parallax/createParallaxPlane.js.map +0 -1
  949. package/dist/features/paths/anchorEdits.js +0 -156
  950. package/dist/features/paths/anchorEdits.js.map +0 -1
  951. package/dist/features/paths/anchors.js +0 -154
  952. package/dist/features/paths/anchors.js.map +0 -1
  953. package/dist/features/paths/booleans.js +0 -2
  954. package/dist/features/paths/markerCommands.js +0 -148
  955. package/dist/features/paths/markerCommands.js.map +0 -1
  956. package/dist/features/paths/markerSites.js +0 -59
  957. package/dist/features/paths/markerSites.js.map +0 -1
  958. package/dist/features/paths/markers.js +0 -95
  959. package/dist/features/paths/markers.js.map +0 -1
  960. package/dist/features/paths/nearestAnchor.js +0 -36
  961. package/dist/features/paths/nearestAnchor.js.map +0 -1
  962. package/dist/features/paths/pathInWorld.js +0 -41
  963. package/dist/features/paths/pathInWorld.js.map +0 -1
  964. package/dist/features/paths/poseDescriptor.js +0 -39
  965. package/dist/features/paths/poseDescriptor.js.map +0 -1
  966. package/dist/features/paths/tessellate/dash.js +0 -52
  967. package/dist/features/paths/tessellate/dash.js.map +0 -1
  968. package/dist/features/paths/tessellate/insets.js +0 -32
  969. package/dist/features/paths/tessellate/insets.js.map +0 -1
  970. package/dist/features/paths/tessellate/metric.js +0 -72
  971. package/dist/features/paths/tessellate/metric.js.map +0 -1
  972. package/dist/features/paths/tessellate/stroke.js +0 -170
  973. package/dist/features/paths/tessellate/stroke.js.map +0 -1
  974. package/dist/features/paths/tessellate/vertexWidths.js +0 -32
  975. package/dist/features/paths/tessellate/vertexWidths.js.map +0 -1
  976. package/dist/features/patterns/index.js +0 -23
  977. package/dist/features/patterns/index.js.map +0 -1
  978. package/dist/features/patterns/patterns-builtin.js +0 -38
  979. package/dist/features/patterns/patterns-builtin.js.map +0 -1
  980. package/dist/features/patterns/resolveSpec.js +0 -57
  981. package/dist/features/patterns/resolveSpec.js.map +0 -1
  982. package/dist/features/patterns/tileGeometry.js +0 -158
  983. package/dist/features/patterns/tileGeometry.js.map +0 -1
  984. package/dist/features/pointer/PointerContext.js +0 -45
  985. package/dist/features/pointer/PointerContext.js.map +0 -1
  986. package/dist/features/selection/SelectionContext.js +0 -46
  987. package/dist/features/selection/SelectionContext.js.map +0 -1
  988. package/dist/features/simulation/createSimulation.js +0 -61
  989. package/dist/features/simulation/createSimulation.js.map +0 -1
  990. package/dist/features/simulation/types.js +0 -6
  991. package/dist/features/simulation/types.js.map +0 -1
  992. package/dist/features/simulation/useSimulation.js +0 -74
  993. package/dist/features/simulation/useSimulation.js.map +0 -1
  994. package/dist/features/text/domRuns.js +0 -258
  995. package/dist/features/text/domRuns.js.map +0 -1
  996. package/dist/features/text/fitTextPose.js +0 -38
  997. package/dist/features/text/fitTextPose.js.map +0 -1
  998. package/dist/features/text/hitTest.js +0 -45
  999. package/dist/features/text/hitTest.js.map +0 -1
  1000. package/dist/features/text/renderLabel.js +0 -14
  1001. package/dist/features/text/renderLabel.js.map +0 -1
  1002. package/dist/features/text/runs/effectiveRangeStyle.js +0 -66
  1003. package/dist/features/text/runs/effectiveRangeStyle.js.map +0 -1
  1004. package/dist/features/text/runs/flagRange.js +0 -53
  1005. package/dist/features/text/runs/flagRange.js.map +0 -1
  1006. package/dist/features/text/runs/rangeStyle.js +0 -135
  1007. package/dist/features/text/runs/rangeStyle.js.map +0 -1
  1008. package/dist/features/text/textCommand.js +0 -59
  1009. package/dist/features/text/textCommand.js.map +0 -1
  1010. package/dist/features/text/textToPath.js +0 -181
  1011. package/dist/features/text/textToPath.js.map +0 -1
  1012. package/dist/features/text/useTextEdit.js +0 -467
  1013. package/dist/features/text/useTextEdit.js.map +0 -1
  1014. package/dist/features/tiling/createTiledLayer.js +0 -63
  1015. package/dist/features/tiling/createTiledLayer.js.map +0 -1
  1016. package/dist/features/tiling/tiledProject.js +0 -14
  1017. package/dist/features/tiling/tiledProject.js.map +0 -1
  1018. package/dist/interactions/actions/clone/behaviors/cloneByAltDrag.js +0 -26
  1019. package/dist/interactions/actions/clone/behaviors/cloneByAltDrag.js.map +0 -1
  1020. package/dist/interactions/actions/defaults/align.js.map +0 -1
  1021. package/dist/interactions/actions/defaults/booleans.js +0 -52
  1022. package/dist/interactions/actions/defaults/booleans.js.map +0 -1
  1023. package/dist/interactions/actions/defaults/clipboard.js.map +0 -1
  1024. package/dist/interactions/actions/defaults/clone.js +0 -107
  1025. package/dist/interactions/actions/defaults/clone.js.map +0 -1
  1026. package/dist/interactions/actions/defaults/createOutlines.js +0 -47
  1027. package/dist/interactions/actions/defaults/createOutlines.js.map +0 -1
  1028. package/dist/interactions/actions/defaults/distribute.js +0 -66
  1029. package/dist/interactions/actions/defaults/distribute.js.map +0 -1
  1030. package/dist/interactions/actions/defaults/editAnchors.js.map +0 -1
  1031. package/dist/interactions/actions/defaults/flip.js +0 -119
  1032. package/dist/interactions/actions/defaults/flip.js.map +0 -1
  1033. package/dist/interactions/actions/defaults/freshNodeId.js +0 -10
  1034. package/dist/interactions/actions/defaults/freshNodeId.js.map +0 -1
  1035. package/dist/interactions/actions/defaults/insert.js +0 -288
  1036. package/dist/interactions/actions/defaults/insert.js.map +0 -1
  1037. package/dist/interactions/actions/defaults/lassoSelect.js +0 -156
  1038. package/dist/interactions/actions/defaults/lassoSelect.js.map +0 -1
  1039. package/dist/interactions/actions/defaults/move.js +0 -760
  1040. package/dist/interactions/actions/defaults/move.js.map +0 -1
  1041. package/dist/interactions/actions/defaults/resize.js +0 -335
  1042. package/dist/interactions/actions/defaults/resize.js.map +0 -1
  1043. package/dist/interactions/actions/defaults/rotate.js +0 -184
  1044. package/dist/interactions/actions/defaults/rotate.js.map +0 -1
  1045. package/dist/interactions/actions/previewOverrides.js +0 -25
  1046. package/dist/interactions/actions/previewOverrides.js.map +0 -1
  1047. package/dist/interactions/actions/resize/autoPoseDescriptor.js.map +0 -1
  1048. package/dist/math-Drrw4ewZ.d.ts +0 -160
  1049. package/dist/registerProgram-BMZRDgrh.d.ts +0 -197
  1050. package/dist/renderer/DrawCommand.js +0 -6
  1051. package/dist/renderer/DrawCommand.js.map +0 -1
  1052. package/dist/renderer/WeaselRenderer.js +0 -331
  1053. package/dist/renderer/WeaselRenderer.js.map +0 -1
  1054. package/dist/renderer/batchClip.js +0 -46
  1055. package/dist/renderer/batchClip.js.map +0 -1
  1056. package/dist/renderer/cache/GLImageCache.js +0 -64
  1057. package/dist/renderer/cache/GLImageCache.js.map +0 -1
  1058. package/dist/renderer/cache/GLMeshCache.js +0 -102
  1059. package/dist/renderer/cache/GLMeshCache.js.map +0 -1
  1060. package/dist/renderer/cache/GLTextureCache.js +0 -51
  1061. package/dist/renderer/cache/GLTextureCache.js.map +0 -1
  1062. package/dist/renderer/cache/GradientRampAtlas.js +0 -82
  1063. package/dist/renderer/cache/GradientRampAtlas.js.map +0 -1
  1064. package/dist/renderer/cache/cache.js +0 -13
  1065. package/dist/renderer/cache/cache.js.map +0 -1
  1066. package/dist/renderer/cache/markerCommandCache.js +0 -63
  1067. package/dist/renderer/cache/markerCommandCache.js.map +0 -1
  1068. package/dist/renderer/cache/outlineMeshCache.js +0 -15
  1069. package/dist/renderer/cache/outlineMeshCache.js.map +0 -1
  1070. package/dist/renderer/cache/outlineStrokeMeshCache.js +0 -36
  1071. package/dist/renderer/cache/outlineStrokeMeshCache.js.map +0 -1
  1072. package/dist/renderer/cache/strokeMeshCache.js +0 -55
  1073. package/dist/renderer/cache/strokeMeshCache.js.map +0 -1
  1074. package/dist/renderer/cullDrawCommands.js +0 -90
  1075. package/dist/renderer/cullDrawCommands.js.map +0 -1
  1076. package/dist/renderer/draw.js +0 -1135
  1077. package/dist/renderer/draw.js.map +0 -1
  1078. package/dist/renderer/drawBatch.js +0 -198
  1079. package/dist/renderer/drawBatch.js.map +0 -1
  1080. package/dist/renderer/effects/EffectTargets.js +0 -45
  1081. package/dist/renderer/effects/EffectTargets.js.map +0 -1
  1082. package/dist/renderer/effects/builtins.js +0 -31
  1083. package/dist/renderer/effects/builtins.js.map +0 -1
  1084. package/dist/renderer/effects/composite.js +0 -9
  1085. package/dist/renderer/effects/composite.js.map +0 -1
  1086. package/dist/renderer/effects/effectPrelude.js +0 -10
  1087. package/dist/renderer/effects/effectPrelude.js.map +0 -1
  1088. package/dist/renderer/effects/types.js +0 -10
  1089. package/dist/renderer/effects/types.js.map +0 -1
  1090. package/dist/renderer/glyphOutlineMesh.js +0 -67
  1091. package/dist/renderer/glyphOutlineMesh.js.map +0 -1
  1092. package/dist/renderer/index.js +0 -19
  1093. package/dist/renderer/math/color.js +0 -341
  1094. package/dist/renderer/math/color.js.map +0 -1
  1095. package/dist/renderer/math/mat3.js +0 -76
  1096. package/dist/renderer/math/mat3.js.map +0 -1
  1097. package/dist/renderer/math/patternSpace.js +0 -22
  1098. package/dist/renderer/math/patternSpace.js.map +0 -1
  1099. package/dist/renderer/math/viewToMat3.js +0 -19
  1100. package/dist/renderer/math/viewToMat3.js.map +0 -1
  1101. package/dist/renderer/paintResources.js +0 -18
  1102. package/dist/renderer/paintResources.js.map +0 -1
  1103. package/dist/renderer/paintScratch.js +0 -37
  1104. package/dist/renderer/paintScratch.js.map +0 -1
  1105. package/dist/renderer/shaders/ShaderProgram.js +0 -74
  1106. package/dist/renderer/shaders/ShaderProgram.js.map +0 -1
  1107. package/dist/renderer/shaders/batchFill.js +0 -119
  1108. package/dist/renderer/shaders/batchFill.js.map +0 -1
  1109. package/dist/renderer/shaders/customPrelude.js +0 -34
  1110. package/dist/renderer/shaders/customPrelude.js.map +0 -1
  1111. package/dist/renderer/shaders/extractUniformNames.js +0 -184
  1112. package/dist/renderer/shaders/extractUniformNames.js.map +0 -1
  1113. package/dist/renderer/shaders/glyphPaint.js +0 -61
  1114. package/dist/renderer/shaders/glyphPaint.js.map +0 -1
  1115. package/dist/renderer/shaders/gradFill.js +0 -30
  1116. package/dist/renderer/shaders/gradFill.js.map +0 -1
  1117. package/dist/renderer/shaders/imageFill.js +0 -14
  1118. package/dist/renderer/shaders/imageFill.js.map +0 -1
  1119. package/dist/renderer/shaders/pathFill.js +0 -13
  1120. package/dist/renderer/shaders/pathFill.js.map +0 -1
  1121. package/dist/renderer/shaders/patternFill.js +0 -24
  1122. package/dist/renderer/shaders/patternFill.js.map +0 -1
  1123. package/dist/renderer/shaders/registerProgram.js +0 -18
  1124. package/dist/renderer/shaders/registerProgram.js.map +0 -1
  1125. package/dist/renderer/spriteSheet.js +0 -14
  1126. package/dist/renderer/spriteSheet.js.map +0 -1
  1127. package/dist/renderer/state/GroupState.js +0 -77
  1128. package/dist/renderer/state/GroupState.js.map +0 -1
  1129. package/dist/renderer/strokeLengths.js +0 -50
  1130. package/dist/renderer/strokeLengths.js.map +0 -1
  1131. package/dist/renderer/syntheticItalic.js +0 -6
  1132. package/dist/renderer/syntheticItalic.js.map +0 -1
  1133. package/dist/renderer/textures/registerTexture.js +0 -14
  1134. package/dist/renderer/textures/registerTexture.js.map +0 -1
  1135. package/dist/scheduling/useVisibleRaf.js +0 -69
  1136. package/dist/scheduling/useVisibleRaf.js.map +0 -1
  1137. package/dist/test-seams-CuIxe0xY.d.ts +0 -356
  1138. package/dist/tools/prefs.js +0 -62
  1139. package/dist/tools/prefs.js.map +0 -1
@@ -0,0 +1,94 @@
1
+ import { translatePoseViaDescriptor as e } from "../../core/geometry/poseDescriptor.js";
2
+ import { createTransformOp as t } from "../../core/ops/transform.js";
3
+ import { poseKey as n } from "../poseHelpers.js";
4
+ import { clampCorner as r, coastKey as i, sameBounds as a } from "./coast.js";
5
+ //#region src/animation/behaviors/coastOnTargets.ts
6
+ function o(t, n, r, i, a) {
7
+ let o = t.to(r), s = t.to(e(r, 1, 0, n)), c = t.to(e(r, 0, 1, n));
8
+ return t.from(o.map((e, t) => i * (s[t] - e) + a * (c[t] - e)));
9
+ }
10
+ function s(s, c) {
11
+ let { animator: l, ctx: u, d, bounds: f, coasts: p } = s, m = u.adapter, h = -Math.log(s.friction), g = i(), _ = /* @__PURE__ */ new Map(), v = (e) => m.getNode(e.id) !== void 0 && a(d.getBounds(e.target.committed()), d.getBounds(e.seen)), y = (e, t, n, r) => {
12
+ let i = t ?? e.target.committed(), a = o(e.target.axes, d, i, n, r), c = d.getBounds(i);
13
+ e.startX = c.x, e.startY = c.y, e.vx = n, e.vy = r, e.handle = l.decay({
14
+ target: e.target,
15
+ from: t,
16
+ velocity: a,
17
+ friction: s.friction,
18
+ cancelKey: g,
19
+ interrupt: !1,
20
+ onTick: (t) => S(e, t),
21
+ onDone: () => b(e)
22
+ });
23
+ }, b = (e) => {
24
+ e.handle = null, e.seen = e.target.committed();
25
+ for (let e of _.values()) if (e.handle) return;
26
+ w();
27
+ }, x = (e, t) => {
28
+ let r = e.target.committed();
29
+ if (_.delete(e.id), e.handle?.cancel(), e.target.commit(r), e.target.active && m.getNode(e.id) !== void 0) {
30
+ let i = d.getBounds(r), a = d.getBounds(e.seen), s = d.getBounds(t), c = e.vx - h * (s.x - (i.x - a.x) - e.startX), u = e.vy - h * (s.y - (i.y - a.y) - e.startY);
31
+ l.spring({
32
+ target: e.target,
33
+ from: t,
34
+ to: r,
35
+ velocity: o(e.target.axes, d, t, c, u),
36
+ cancelKey: n(e.id),
37
+ interrupt: !1
38
+ });
39
+ }
40
+ b(e);
41
+ };
42
+ function S(t, n) {
43
+ if (!v(t)) {
44
+ x(t, n);
45
+ return;
46
+ }
47
+ let i = d.getBounds(n), { nx: a, ny: o, hitX: c, hitY: l } = r(f, i.x, i.y);
48
+ if (!c && !l) return;
49
+ let u = c ? 0 : t.vx - h * (i.x - t.startX), p = l ? 0 : t.vy - h * (i.y - t.startY);
50
+ t.handle?.cancel(), t.target.commit(e(t.target.committed(), a - i.x, o - i.y, d)), t.seen = t.target.committed(), s.boundary === "continue" && Math.hypot(u, p) > 0 ? y(t, void 0, u, p) : b(t);
51
+ }
52
+ let C = {
53
+ ids: u.draggedIds.slice(),
54
+ stop: () => {
55
+ if (!l.isActive(g)) {
56
+ p.delete(C);
57
+ return;
58
+ }
59
+ for (let e of _.values()) e.handle?.cancel(), e.handle = null, e.seen = e.target.committed();
60
+ w();
61
+ }
62
+ };
63
+ p.add(C);
64
+ function w() {
65
+ if (!p.delete(C) || !m.applyOps) return;
66
+ let e = [];
67
+ for (let n of _.values()) {
68
+ if (!v(n)) continue;
69
+ let r = u.origin.get(n.id) ?? n.seen, i = n.target.committed();
70
+ n.target.commit(r), e.push(t({
71
+ id: n.id,
72
+ from: r,
73
+ to: i,
74
+ label: "flick"
75
+ }));
76
+ }
77
+ e.length > 0 && m.applyOps(e, "flick");
78
+ }
79
+ for (let [e, t] of c) _.set(e, {
80
+ id: e,
81
+ target: t,
82
+ seen: t.committed(),
83
+ handle: null,
84
+ startX: 0,
85
+ startY: 0,
86
+ vx: 0,
87
+ vy: 0
88
+ });
89
+ for (let e of [..._.values()]) y(e, u.current.get(e.id), s.vx, s.vy);
90
+ }
91
+ //#endregion
92
+ export { s as coastOnTargets };
93
+
94
+ //# sourceMappingURL=coastOnTargets.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"coastOnTargets.js","names":["poseVelocity","base","ax","at","alongX","translatePoseViaDescriptor","d","alongY","vx","i","b","vy","coastOnTargets","a","adapter","ctx","drag","cancelKey","coastKey","riders","ours","r","sameBounds","launch","from","velocity","corner","animator","tick","own","halted","other","drop","left","moved","was","poseKey","clampCorner","bounds","hitX","hitY","nx","ny","coast","commitFlick","coasts","ops","to","createTransformOp","id","target","targets"],"sources":["../../../src/animation/behaviors/coastOnTargets.ts"],"sourcesContent":["import { createTransformOp } from 'core/ops/transform';\nimport type { Op } from 'core/ops/types';\nimport { translatePoseViaDescriptor, type PoseDescriptor } from 'core/geometry/poseDescriptor';\nimport type { Target, TargetAxes } from '@weasel-js/animator';\nimport type { AnimationHandle } from '@weasel-js/animator';\nimport { poseKey } from '../poseHelpers';\nimport { clampCorner, coastKey, sameBounds, type Coast, type CoastArgs } from './coast';\n\ninterface Rider<TPose> {\n id: string;\n target: Target<TPose>;\n /** The committed pose as the coast last left it. Anything else there is another writer's. */\n seen: TPose;\n /** Null once this node has stopped. */\n handle: AnimationHandle | null;\n /** The corner and velocity its running decay started with. */\n startX: number;\n startY: number;\n vx: number;\n vy: number;\n}\n\n/** A world velocity as the rate of change of a pose at `at`. */\nfunction poseVelocity<TPose>(\n ax: TargetAxes<TPose>,\n d: PoseDescriptor<TPose>,\n at: TPose,\n vx: number,\n vy: number,\n): TPose {\n const base = ax.to(at);\n const alongX = ax.to(translatePoseViaDescriptor(at, 1, 0, d));\n const alongY = ax.to(translatePoseViaDescriptor(at, 0, 1, d));\n return ax.from(base.map((b, i) => vx * (alongX[i]! - b) + vy * (alongY[i]! - b)));\n}\n\n/**\n * A coast on each node's own pose target: a decay per node, so anything else animating the\n * node adds to it. The document keeps the pre-drag pose while the node travels, takes the\n * pose it stops at, and the flick is recorded as one transform once every node has stopped.\n */\nexport function coastOnTargets<TPose>(a: CoastArgs<TPose>, targets: ReadonlyMap<string, Target<TPose>>): void {\n const { animator, ctx, d, bounds, coasts } = a;\n const adapter = ctx.adapter;\n // Speed lost per unit traveled: an exponential coast's velocity is its first less this times\n // how far it has gone, which is how a node stopped at an edge knows what speed it has left.\n const drag = -Math.log(a.friction);\n const cancelKey = coastKey();\n const riders = new Map<string, Rider<TPose>>();\n\n const ours = (r: Rider<TPose>): boolean =>\n adapter.getNode(r.id) !== undefined && sameBounds(d.getBounds(r.target.committed()), d.getBounds(r.seen));\n\n const launch = (r: Rider<TPose>, from: TPose | undefined, vx: number, vy: number): void => {\n const at = from ?? r.target.committed();\n const velocity = poseVelocity(r.target.axes, d, at, vx, vy);\n const corner = d.getBounds(at);\n r.startX = corner.x;\n r.startY = corner.y;\n r.vx = vx;\n r.vy = vy;\n r.handle = animator.decay<TPose>({\n target: r.target,\n from,\n velocity,\n friction: a.friction,\n cancelKey,\n interrupt: false,\n onTick: (own) => tick(r, own),\n onDone: () => halted(r),\n });\n };\n\n const halted = (r: Rider<TPose>): void => {\n r.handle = null;\n r.seen = r.target.committed();\n for (const other of riders.values()) if (other.handle) return;\n commitFlick();\n };\n\n /**\n * Takes `r` out of the coast where another writer left its node. Where that writer is another\n * animation on the node, the node is still short of `left` by what the coast had traveled, at\n * `own`: a spring carries that to nothing from the coast's speed, joining the node's moves.\n */\n const drop = (r: Rider<TPose>, own: TPose): void => {\n const left = r.target.committed();\n riders.delete(r.id);\n r.handle?.cancel();\n r.target.commit(left);\n if (r.target.active && adapter.getNode(r.id) !== undefined) {\n const moved = d.getBounds(left);\n const was = d.getBounds(r.seen);\n const corner = d.getBounds(own);\n const vx = r.vx - drag * (corner.x - (moved.x - was.x) - r.startX);\n const vy = r.vy - drag * (corner.y - (moved.y - was.y) - r.startY);\n animator.spring<TPose>({\n target: r.target,\n from: own,\n to: left,\n velocity: poseVelocity(r.target.axes, d, own, vx, vy),\n cancelKey: poseKey(r.id),\n interrupt: false,\n });\n }\n halted(r);\n };\n\n function tick(r: Rider<TPose>, own: TPose): void {\n if (!ours(r)) { drop(r, own); return; }\n const corner = d.getBounds(own);\n const { nx, ny, hitX, hitY } = clampCorner(bounds, corner.x, corner.y);\n if (!hitX && !hitY) return;\n const vx = hitX ? 0 : r.vx - drag * (corner.x - r.startX);\n const vy = hitY ? 0 : r.vy - drag * (corner.y - r.startY);\n // Canceled, it commits the pose it reached; the edge is where it belongs.\n r.handle?.cancel();\n r.target.commit(translatePoseViaDescriptor(r.target.committed(), nx - corner.x, ny - corner.y, d));\n r.seen = r.target.committed();\n if (a.boundary === 'continue' && Math.hypot(vx, vy) > 0) launch(r, undefined, vx, vy);\n else halted(r);\n }\n\n const coast: Coast = {\n ids: ctx.draggedIds.slice(),\n stop: (): void => {\n // Canceled from outside (cancelAll, unmount), it stopped long ago and somewhere else.\n if (!animator.isActive(cancelKey)) {\n coasts.delete(coast);\n return;\n }\n for (const r of riders.values()) {\n r.handle?.cancel();\n r.handle = null;\n r.seen = r.target.committed();\n }\n commitFlick();\n },\n };\n coasts.add(coast);\n\n function commitFlick(): void {\n if (!coasts.delete(coast) || !adapter.applyOps) return;\n const ops: Op[] = [];\n for (const r of riders.values()) {\n if (!ours(r)) continue;\n const from = ctx.origin.get(r.id) ?? r.seen;\n const to = r.target.committed();\n // A scene records the write it sees, not an op's `from`, so the document goes back first.\n r.target.commit(from);\n ops.push(createTransformOp<TPose>({ id: r.id, from, to, label: 'flick' }));\n }\n if (ops.length > 0) adapter.applyOps(ops, 'flick');\n }\n\n for (const [id, target] of targets) {\n riders.set(id, { id, target, seen: target.committed(), handle: null, startX: 0, startY: 0, vx: 0, vy: 0 });\n }\n // Each starts from its release pose, which the document does not hold: the drag was a preview.\n for (const r of [...riders.values()]) launch(r, ctx.current.get(r.id), a.vx, a.vy);\n}\n"],"mappings":"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"}
@@ -1,24 +1,11 @@
1
- import { createTransformOp as e } from "../../core/ops/transform.js";
2
- import { translatePoseViaDescriptor as t } from "../../core/geometry/poseDescriptor.js";
3
- import { AUTO_POSE_DESCRIPTOR as n } from "../../interactions/actions/resize/autoPoseDescriptor.js";
1
+ import { AUTO_POSE_DESCRIPTOR as e } from "../../core/geometry/autoPoseDescriptor.js";
2
+ import { coastByWrite as t } from "./coastByWrite.js";
3
+ import { coastOnTargets as n } from "./coastOnTargets.js";
4
4
  import { getScratch as r, scratchKey as i, setScratch as a } from "@weasel-js/routing";
5
5
  //#region src/animation/behaviors/momentum.ts
6
6
  var o = i("momentum.samples");
7
7
  function s(i) {
8
- let s = i.friction ?? .92, c = i.threshold ?? 200, l = i.velocitySampleMs ?? 80, u = i.now ?? (() => Date.now()), d = i.bounds, f = i.boundary ?? "stop", p = i.poseDescriptor ?? n, m = (e, t, n, r) => {
9
- let i = e + n, a = t + r;
10
- if (!d) return {
11
- nx: i,
12
- ny: a,
13
- hit: !1
14
- };
15
- let o = !1;
16
- return i < d.x ? (i = d.x, o = !0) : i > d.x + d.width && (i = d.x + d.width, o = !0), a < d.y ? (a = d.y, o = !0) : a > d.y + d.height && (a = d.y + d.height, o = !0), {
17
- nx: i,
18
- ny: a,
19
- hit: o
20
- };
21
- }, h = (e) => {
8
+ let s = i.friction ?? .92, c = i.threshold ?? 200, l = i.velocitySampleMs ?? 80, u = i.now ?? (() => Date.now()), d = i.poseDescriptor ?? e, f = (e) => {
22
9
  let t = r(e.scratch, o);
23
10
  t || (t = [], a(e.scratch, o, t)), t.push({
24
11
  t: u(),
@@ -27,88 +14,51 @@ function s(i) {
27
14
  });
28
15
  let n = u() - l * 4;
29
16
  for (; t.length > 1 && t[0].t < n;) t.shift();
17
+ }, p = /* @__PURE__ */ new Set(), m = (e) => {
18
+ let { adapter: t } = e;
19
+ if (!t.poseTarget) return null;
20
+ let n = /* @__PURE__ */ new Map();
21
+ for (let r of e.draggedIds) {
22
+ if (!e.current.has(r)) continue;
23
+ let a = t.getNode(r) && t.poseTarget(r, i.poseDescriptor);
24
+ if (!a) return null;
25
+ n.set(r, a);
26
+ }
27
+ return n;
30
28
  };
31
29
  return {
32
30
  onStart(e) {
33
- a(e.scratch, o, []), h(e);
31
+ for (let t of [...p]) t.ids.some((t) => e.draggedIds.includes(t)) && t.stop();
32
+ a(e.scratch, o, []), f(e);
34
33
  },
35
34
  onMove(e) {
36
- h(e);
35
+ f(e);
37
36
  },
38
- onEnd(n, a) {
37
+ onEnd(e, a) {
39
38
  if (a.answered) return;
40
- let u = r(n.scratch, o) ?? [];
39
+ let u = r(e.scratch, o) ?? [];
41
40
  if (u.length < 2) return;
42
- let h = u[u.length - 1], g = h.t - l, _ = u[0];
43
- for (let e of u) if (e.t >= g) {
44
- _ = e;
41
+ let f = u[u.length - 1], h = f.t - l, g = u[0];
42
+ for (let e of u) if (e.t >= h) {
43
+ g = e;
45
44
  break;
46
45
  }
47
- let v = (h.t - _.t) / 1e3;
48
- if (v <= 0) return;
49
- let y = (h.x - _.x) / v, b = (h.y - _.y) / v;
50
- if (Math.hypot(y, b) < c) return;
51
- let x = new Map(n.current), S = {
52
- x: 0,
53
- y: 0
54
- }, C = n.adapter, w = /* @__PURE__ */ new Map(), T = null;
55
- T = i.animator.decay({
56
- from: {
57
- x: 0,
58
- y: 0
59
- },
60
- velocity: {
61
- x: y,
62
- y: b
63
- },
46
+ let _ = (f.t - g.t) / 1e3;
47
+ if (_ <= 0) return;
48
+ let v = (f.x - g.x) / _, y = (f.y - g.y) / _;
49
+ if (Math.hypot(v, y) < c) return;
50
+ let b = {
51
+ animator: i.animator,
52
+ ctx: e,
53
+ vx: v,
54
+ vy: y,
64
55
  friction: s,
65
- add: (e, t) => ({
66
- x: e.x + t.x,
67
- y: e.y + t.y
68
- }),
69
- scale: (e, t) => ({
70
- x: e.x * t,
71
- y: e.y * t
72
- }),
73
- magnitude: (e) => Math.hypot(e.x, e.y),
74
- onTick: (e) => {
75
- S = e;
76
- let r = d !== void 0;
77
- for (let i of n.draggedIds) {
78
- let n = x.get(i);
79
- if (!n) continue;
80
- let a = p.getBounds(n), { nx: o, ny: s, hit: c } = m(a.x, a.y, e.x, e.y);
81
- c || (r = !1), w.set(i, {
82
- x: o,
83
- y: s
84
- }), C.setPose(i, t(n, o - a.x, s - a.y, p));
85
- }
86
- f === "stop" && r && T && (T.cancel(), E());
87
- },
88
- onDone: () => {
89
- E();
90
- }
91
- });
92
- function E() {
93
- if (!C.applyOps) return;
94
- let r = [];
95
- for (let i of n.draggedIds) {
96
- let n = x.get(i);
97
- if (!n) continue;
98
- let a = p.getBounds(n), o = w.get(i) ?? {
99
- x: a.x + S.x,
100
- y: a.y + S.y
101
- }, s = t(n, o.x - a.x, o.y - a.y, p);
102
- r.push(e({
103
- id: i,
104
- from: n,
105
- to: s,
106
- label: "flick"
107
- }));
108
- }
109
- r.length > 0 && C.applyOps(r, "flick");
110
- }
111
- return null;
56
+ d,
57
+ coasts: p,
58
+ bounds: i.bounds,
59
+ boundary: i.boundary ?? "stop"
60
+ }, x = m(e);
61
+ return x ? n(b, x) : t(b), null;
112
62
  }
113
63
  };
114
64
  }
@@ -1 +1 @@
1
- {"version":3,"file":"momentum.js","names":["SAMPLES","scratchKey","momentum","friction","opts","threshold","sampleMs","now","bounds","boundaryPolicy","d","AUTO_POSE_DESCRIPTOR","clampToBounds","nx","sx","dx","ny","sy","dy","hit","recordSample","samples","getScratch","ctx","setScratch","cutoff","end","last","first","s","dt","vx","vy","startPoses","lastValue","adapter","finalPositions","decayHandle","a","b","v","k","delta","allHit","id","start","o","translatePoseViaDescriptor","commitFlick","ops","fp","finalPose","createTransformOp"],"sources":["../../../src/animation/behaviors/momentum.ts"],"sourcesContent":["import { createTransformOp } from 'core/ops/transform';\nimport type { Op } from 'core/ops/types';\nimport type { MoveBehavior, GestureContext } from 'interactions/gestures/types';\nimport { scratchKey, getScratch, setScratch } from '@weasel-js/routing';\nimport type { PoseDescriptor } from 'core/geometry/poseDescriptor';\nimport { translatePoseViaDescriptor } from 'core/geometry/poseDescriptor';\nimport { AUTO_POSE_DESCRIPTOR } from 'interactions/actions/resize/autoPoseDescriptor';\nimport type { Animator } from '../types';\n\n/** Options for the `momentum` move behavior. */\nexport interface MomentumOptions {\n /** Required: the per-Canvas animator that will own the decay. */\n animator: Animator;\n friction?: number; // default 0.92 (per second)\n threshold?: number; // default 200 px/sec\n /** Sample window in ms for velocity computation. Default 80ms. */\n velocitySampleMs?: number;\n /** Optional clock override for tests. Defaults to `Date.now`. */\n now?: () => number;\n /**\n * Optional bounds for the object's top-left corner (in world units). When\n * supplied, momentum-driven translation is clamped: each tick's new\n * position is constrained so the object's `(x, y)` stays inside the rect.\n * Without bounds, a hard flick carries the object indefinitely until\n * friction dampens velocity below `threshold`.\n *\n * Note: ignores object size for now — the bound is on the top-left, not\n * the visible edges. A consumer wanting \"object stays fully inside\" should\n * pass `bounds = { x: canvas.x, y: canvas.y, width: canvas.w - obj.w,\n * height: canvas.h - obj.h }` (and accept that it doesn't adapt to\n * variable-sized objects mid-flight).\n */\n bounds?: { x: number; y: number; width: number; height: number };\n /**\n * Boundary policy when the clamped position hits an edge. 'stop' cancels\n * the decay (instant settle at the edge). 'continue' keeps decaying but\n * subsequent ticks stay clamped (object drifts along the edge as friction\n * decays the velocity). Default 'stop'.\n */\n boundary?: 'stop' | 'continue';\n /** How to translate poses. Default `AUTO_POSE_DESCRIPTOR`. */\n poseDescriptor?: PoseDescriptor<unknown>;\n}\n\ninterface PointerSample {\n t: number; // ms timestamp\n x: number;\n y: number;\n}\n\ninterface RectLike { x: number; y: number }\n\nconst SAMPLES = scratchKey<PointerSample[]>('momentum.samples');\n\n/**\n * Move behavior that keeps a dragged node coasting after the pointer is\n * released, at the velocity it was travelling, until friction brings it below\n * `threshold`.\n *\n * Plugs into the move action rather than replacing it, so the drag itself is\n * unchanged — this only decides what happens after the release. The whole\n * flick, coast included, records as one undoable transform.\n */\nexport function momentum<TPose>(opts: MomentumOptions): MoveBehavior<TPose> {\n const friction = opts.friction ?? 0.92;\n const threshold = opts.threshold ?? 200;\n const sampleMs = opts.velocitySampleMs ?? 80;\n const now = opts.now ?? (() => Date.now());\n const bounds = opts.bounds;\n const boundaryPolicy = opts.boundary ?? 'stop';\n const d = (opts.poseDescriptor ?? AUTO_POSE_DESCRIPTOR) as PoseDescriptor<TPose>;\n\n /** Apply bounds clamp to (sx + dx, sy + dy). Returns clamped (nx, ny) and\n * whether either axis was clamped (signalling boundary hit). */\n const clampToBounds = (sx: number, sy: number, dx: number, dy: number): { nx: number; ny: number; hit: boolean } => {\n let nx = sx + dx;\n let ny = sy + dy;\n if (!bounds) return { nx, ny, hit: false };\n let hit = false;\n if (nx < bounds.x) { nx = bounds.x; hit = true; }\n else if (nx > bounds.x + bounds.width) { nx = bounds.x + bounds.width; hit = true; }\n if (ny < bounds.y) { ny = bounds.y; hit = true; }\n else if (ny > bounds.y + bounds.height) { ny = bounds.y + bounds.height; hit = true; }\n return { nx, ny, hit };\n };\n\n const recordSample = (ctx: GestureContext<TPose>): void => {\n let samples = getScratch(ctx.scratch, SAMPLES);\n if (!samples) {\n samples = [];\n setScratch(ctx.scratch, SAMPLES, samples);\n }\n samples.push({\n t: now(),\n x: ctx.pointer.worldX,\n y: ctx.pointer.worldY,\n });\n // Trim anything older than 4× the sample window — bounded memory.\n const cutoff = now() - sampleMs * 4;\n while (samples.length > 1 && samples[0].t < cutoff) samples.shift();\n };\n\n return {\n onStart(ctx) {\n setScratch(ctx.scratch, SAMPLES, []);\n recordSample(ctx);\n },\n onMove(ctx) {\n recordSample(ctx);\n },\n onEnd(ctx, end): Op[] | null | void {\n if (end.answered) return undefined;\n const samples = getScratch(ctx.scratch, SAMPLES) ?? [];\n if (samples.length < 2) return undefined;\n const last = samples[samples.length - 1];\n // Find the oldest sample within `sampleMs` of `last`.\n const cutoff = last.t - sampleMs;\n let first = samples[0];\n for (const s of samples) {\n if (s.t >= cutoff) { first = s; break; }\n }\n const dt = (last.t - first.t) / 1000;\n if (dt <= 0) return undefined;\n const vx = (last.x - first.x) / dt;\n const vy = (last.y - first.y) / dt;\n const speed = Math.hypot(vx, vy);\n if (speed < threshold) return undefined;\n\n // Suppress default commit and fire decay. We translate each dragged id\n // by the per-frame delta and commit one transform op per id when done.\n const startPoses = new Map<string, TPose>(ctx.current);\n let lastValue = { x: 0, y: 0 };\n const adapter = ctx.adapter as { setPose(id: string, p: TPose): void; applyOps?(ops: Op[], label: string): void };\n // Track per-id final positions when bounds clamping is active — used\n // by onDone to compute the correct final transform op (not just\n // start + decay's last delta, which may overshoot the boundary).\n const finalPositions = new Map<string, { x: number; y: number }>();\n let decayHandle: { cancel(): void } | null = null;\n decayHandle = opts.animator.decay<RectLike>({\n from: { x: 0, y: 0 },\n velocity: { x: vx, y: vy },\n friction,\n add: (a, b) => ({ x: a.x + b.x, y: a.y + b.y }),\n scale: (v, k) => ({ x: v.x * k, y: v.y * k }),\n magnitude: (v) => Math.hypot(v.x, v.y),\n onTick: (delta) => {\n lastValue = delta;\n let allHit = bounds !== undefined;\n for (const id of ctx.draggedIds) {\n const start = startPoses.get(id);\n if (!start) continue;\n const o = d.getBounds(start);\n const { nx, ny, hit } = clampToBounds(o.x, o.y, delta.x, delta.y);\n if (!hit) allHit = false;\n finalPositions.set(id, { x: nx, y: ny });\n adapter.setPose(id, translatePoseViaDescriptor(start, nx - o.x, ny - o.y, d));\n }\n // If 'stop' policy and every dragged id's clamped position hit\n // the boundary, cancel the decay so the animation settles instantly\n // instead of drifting along the edge as friction wears off.\n if (boundaryPolicy === 'stop' && allHit && decayHandle) {\n decayHandle.cancel();\n // Manually fire onDone since cancel() bypasses it.\n commitFlick();\n }\n },\n onDone: () => {\n commitFlick();\n },\n });\n\n function commitFlick(): void {\n if (!adapter.applyOps) return;\n const ops: Op[] = [];\n for (const id of ctx.draggedIds) {\n const start = startPoses.get(id);\n if (!start) continue;\n const o = d.getBounds(start);\n const fp = finalPositions.get(id) ?? { x: o.x + lastValue.x, y: o.y + lastValue.y };\n const finalPose = translatePoseViaDescriptor(start, fp.x - o.x, fp.y - o.y, d);\n ops.push(createTransformOp<TPose>({ id, from: start, to: finalPose, label: 'flick' }));\n }\n if (ops.length > 0) adapter.applyOps(ops, 'flick');\n }\n\n return null;\n },\n };\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"momentum.js","names":["SAMPLES","scratchKey","momentum","friction","opts","threshold","sampleMs","now","AUTO_POSE_DESCRIPTOR","recordSample","samples","getScratch","ctx","setScratch","cutoff","coasts","targetsOf","adapter","targets","id","target","coast","end","last","first","s","dt","vx","vy","args","coastOnTargets","coastByWrite"],"sources":["../../../src/animation/behaviors/momentum.ts"],"sourcesContent":["import type { Op } from 'core/ops/types';\nimport type { MoveBehavior, GestureContext } from 'interactions/gestures/types';\nimport { scratchKey, getScratch, setScratch } from '@weasel-js/routing';\nimport type { PoseDescriptor } from 'core/geometry/poseDescriptor';\nimport { AUTO_POSE_DESCRIPTOR } from 'core/geometry/autoPoseDescriptor';\nimport type { Target } from '@weasel-js/animator';\nimport type { Animator } from '@weasel-js/animator';\nimport type { Coast, CoastArgs } from './coast';\nimport { coastByWrite } from './coastByWrite';\nimport { coastOnTargets } from './coastOnTargets';\n\n/** Options for the `momentum` move behavior. */\nexport interface MomentumOptions {\n /** Required: the per-Canvas animator that will own the decay. */\n animator: Animator;\n friction?: number; // default 0.92 (per second)\n threshold?: number; // default 200 world units/sec; the slowest release that coasts\n /** Sample window in ms for velocity computation. Default 80ms. */\n velocitySampleMs?: number;\n /** Optional clock override for tests. Defaults to `Date.now`. */\n now?: () => number;\n /**\n * Optional bounds for the object's top-left corner (in world units): each\n * tick's new position is clamped so the object's `(x, y)` stays inside the\n * rect. Object size is ignored, so to keep an object fully inside, shrink\n * the rect by the object's width and height.\n */\n bounds?: { x: number; y: number; width: number; height: number };\n /**\n * Boundary policy when the clamped position hits an edge. 'stop' settles at\n * the edge at once. 'continue' keeps decaying, so the object drifts along\n * the edge. Default 'stop'.\n */\n boundary?: 'stop' | 'continue';\n /** How to translate poses. Default `AUTO_POSE_DESCRIPTOR`. */\n poseDescriptor?: PoseDescriptor<unknown>;\n}\n\ninterface PointerSample {\n t: number; // ms timestamp\n x: number;\n y: number;\n}\n\nconst SAMPLES = scratchKey<PointerSample[]>('momentum.samples');\n\n/**\n * Move behavior that keeps a dragged node coasting after the pointer is\n * released, at the velocity it was traveling, until friction brings it to\n * rest. A release slower than `threshold` does not coast at all.\n *\n * The whole flick, coast included, records as one undoable transform, written\n * once it comes to rest. Over an adapter with `poseTarget`, which a\n * scene-backed one has, each node coasts on its own pose target, so anything\n * else animating it adds; over one without, the coast is shown through\n * `previewPoses`, or written through `setPose` each frame. Dragging a node\n * again while it coasts stops the coast and records it where it stands. A\n * `tweenPose` or `springPose` of a coasting node ends its coast. A node\n * something else moves or deletes mid-coast, an undo included, drops out of\n * the coast where that left it, and nothing is recorded for it.\n */\nexport function momentum<TPose>(opts: MomentumOptions): MoveBehavior<TPose> {\n const friction = opts.friction ?? 0.92;\n const threshold = opts.threshold ?? 200;\n const sampleMs = opts.velocitySampleMs ?? 80;\n const now = opts.now ?? (() => Date.now());\n const d = (opts.poseDescriptor ?? AUTO_POSE_DESCRIPTOR) as PoseDescriptor<TPose>;\n\n const recordSample = (ctx: GestureContext<TPose>): void => {\n let samples = getScratch(ctx.scratch, SAMPLES);\n if (!samples) {\n samples = [];\n setScratch(ctx.scratch, SAMPLES, samples);\n }\n samples.push({\n t: now(),\n x: ctx.pointer.worldX,\n y: ctx.pointer.worldY,\n });\n // Trim anything older than 4× the sample window — bounded memory.\n const cutoff = now() - sampleMs * 4;\n while (samples.length > 1 && samples[0].t < cutoff) samples.shift();\n };\n\n const coasts = new Set<Coast>();\n\n /** Every dragged node's pose target, or null where the adapter has none for one of them. */\n const targetsOf = (ctx: GestureContext<TPose>): Map<string, Target<TPose>> | null => {\n const { adapter } = ctx;\n if (!adapter.poseTarget) return null;\n const targets = new Map<string, Target<TPose>>();\n for (const id of ctx.draggedIds) {\n if (!ctx.current.has(id)) continue;\n const target = adapter.getNode(id) && adapter.poseTarget(id, opts.poseDescriptor as PoseDescriptor<TPose> | undefined);\n if (!target) return null;\n targets.set(id, target);\n }\n return targets;\n };\n\n return {\n onStart(ctx) {\n for (const coast of [...coasts]) {\n if (coast.ids.some((id) => ctx.draggedIds.includes(id))) coast.stop();\n }\n setScratch(ctx.scratch, SAMPLES, []);\n recordSample(ctx);\n },\n onMove(ctx) {\n recordSample(ctx);\n },\n onEnd(ctx, end): Op[] | null | void {\n if (end.answered) return undefined;\n const samples = getScratch(ctx.scratch, SAMPLES) ?? [];\n if (samples.length < 2) return undefined;\n const last = samples[samples.length - 1];\n // Find the oldest sample within `sampleMs` of `last`.\n const cutoff = last.t - sampleMs;\n let first = samples[0];\n for (const s of samples) {\n if (s.t >= cutoff) { first = s; break; }\n }\n const dt = (last.t - first.t) / 1000;\n if (dt <= 0) return undefined;\n const vx = (last.x - first.x) / dt;\n const vy = (last.y - first.y) / dt;\n if (Math.hypot(vx, vy) < threshold) return undefined;\n\n const args: CoastArgs<TPose> = {\n animator: opts.animator, ctx, vx, vy, friction, d, coasts,\n bounds: opts.bounds, boundary: opts.boundary ?? 'stop',\n };\n const targets = targetsOf(ctx);\n if (targets) coastOnTargets(args, targets);\n else coastByWrite(args);\n // The coast commits the flick itself, so the move action's own commit is suppressed.\n return null;\n },\n };\n}\n"],"mappings":";;;;;AA4CA,IAAMA,IAAUC,EAA4B,kBAAkB;AAiB9D,SAAgBC,EAAgB,GAA4C;CAC1E,IAAMC,IAAWC,EAAK,YAAY,KAC5BC,IAAYD,EAAK,aAAa,KAC9BE,IAAWF,EAAK,oBAAoB,IACpCG,IAAMH,EAAK,cAAc,KAAK,IAAI,IAClC,IAAKA,EAAK,kBAAkBI,GAE5BC,KAAgB,MAAqC;EACzD,IAAIC,IAAUC,EAAWC,EAAI,SAASZ,CAAO;EAK7C,AAJKU,MACH,IAAU,CAAC,GACXG,EAAWD,EAAI,SAASZ,GAASU,CAAO,IAE1CA,EAAQ,KAAK;GACX,GAAGH,EAAI;GACP,GAAGK,EAAI,QAAQ;GACf,GAAGA,EAAI,QAAQ;EACjB,CAAC;EAED,IAAME,IAASP,EAAI,IAAID,IAAW;EAClC,OAAOI,EAAQ,SAAS,KAAKA,EAAQ,EAAE,CAAC,IAAII,IAAQ,EAAQ,MAAM;CACpE,GAEMC,oBAAS,IAAI,IAAW,GAGxBC,KAAa,MAAkE;EACnF,IAAM,EAAE,eAAYJ;EACpB,IAAI,CAACK,EAAQ,YAAY,OAAO;EAChC,IAAMC,oBAAU,IAAI,IAA2B;EAC/C,KAAK,IAAMC,KAAMP,EAAI,YAAY;GAC/B,IAAI,CAACA,EAAI,QAAQ,IAAIO,CAAE,GAAG;GAC1B,IAAMC,IAASH,EAAQ,QAAQE,CAAE,KAAKF,EAAQ,WAAWE,GAAIf,EAAK,cAAmD;GACrH,IAAI,CAACgB,GAAQ,OAAO;GACpB,EAAQ,IAAID,GAAIC,CAAM;EACxB;EACA,OAAOF;CACT;CAEA,OAAO;EACL,QAAQ,GAAK;GACX,KAAK,IAAMG,KAAS,CAAC,GAAGN,CAAM,GAC5B,AAAIM,EAAM,IAAI,MAAM,MAAOT,EAAI,WAAW,SAASO,CAAE,CAAC,KAAGE,EAAM,KAAK;GAGtE,AADAR,EAAWD,EAAI,SAASZ,GAAS,CAAC,CAAC,GACnCS,EAAaG,CAAG;EAClB;EACA,OAAO,GAAK;GACV,EAAaA,CAAG;EAClB;EACA,MAAM,GAAK,GAAyB;GAClC,IAAIU,EAAI,UAAU;GAClB,IAAMZ,IAAUC,EAAWC,EAAI,SAASZ,CAAO,KAAK,CAAC;GACrD,IAAIU,EAAQ,SAAS,GAAG;GACxB,IAAMa,IAAOb,EAAQA,EAAQ,SAAS,IAEhCI,IAASS,EAAK,IAAIjB,GACpBkB,IAAQd,EAAQ;GACpB,KAAK,IAAMe,KAAKf,GACd,IAAIe,EAAE,KAAKX,GAAQ;IAAE,IAAQW;IAAG;GAAO;GAEzC,IAAMC,KAAMH,EAAK,IAAIC,EAAM,KAAK;GAChC,IAAIE,KAAM,GAAG;GACb,IAAMC,KAAMJ,EAAK,IAAIC,EAAM,KAAKE,GAC1BE,KAAML,EAAK,IAAIC,EAAM,KAAKE;GAChC,IAAI,KAAK,MAAMC,GAAIC,CAAE,IAAIvB,GAAW;GAEpC,IAAMwB,IAAyB;IAC7B,UAAUzB,EAAK;IAAU;IAAK;IAAI;IAAI;IAAU;IAAG;IACnD,QAAQA,EAAK;IAAQ,UAAUA,EAAK,YAAY;GAClD,GACMc,IAAUF,EAAUJ,CAAG;GAI7B,OAHIM,IAASY,EAAeD,GAAMX,CAAO,IACpCa,EAAaF,CAAI,GAEf;EACT;CACF;AACF"}
@@ -0,0 +1,12 @@
1
+ import { scenePoseTarget as e } from "./poseTarget.js";
2
+ //#region src/animation/clipTargets.ts
3
+ function t(t, n = {}) {
4
+ return (r) => {
5
+ if (r.startsWith("pose:")) return e(t, r.slice(5), n.descriptor, n.cascade);
6
+ if (r.startsWith("rig:")) return n.rigs?.[r.slice(4)]?.target;
7
+ };
8
+ }
9
+ //#endregion
10
+ export { t as sceneClipTargets };
11
+
12
+ //# sourceMappingURL=clipTargets.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"clipTargets.js","names":["sceneClipTargets","name","scenePoseTarget","scene","options"],"sources":["../../src/animation/clipTargets.ts"],"sourcesContent":["import type { ClipBinder, Pose, Target } from '@weasel-js/animator';\nimport type { PoseDescriptor } from '../core/geometry/poseDescriptor';\nimport { scenePoseTarget, type PoseCascade, type PoseTargetScene } from './poseTarget';\n\n/** Options for `sceneClipTargets`. */\nexport interface SceneClipTargetsOptions<TPose> {\n /** Rigs by the name a clip calls them: a track naming `rig:<name>` moves that rig's pose. */\n rigs?: Readonly<Record<string, { readonly target: Target<Pose> }>>;\n /** As `scenePoseTarget` takes them. */\n descriptor?: PoseDescriptor<TPose>;\n cascade?: PoseCascade<TPose>;\n}\n\n/**\n * A `ClipBinder.target` over a scene. `pose:<node id>` is that node's pose target, the one\n * `scenePoseTarget` answers, and `rig:<name>` is the target of the rig given under that\n * name. Any other name is `undefined`, for a caller to resolve itself first or after. A track\n * over part of a rig names joints as its `axes`, which the rig's target resolves.\n */\nexport function sceneClipTargets<TPose>(\n scene: PoseTargetScene<TPose>,\n options: SceneClipTargetsOptions<TPose> = {},\n): NonNullable<ClipBinder['target']> {\n return (name) => {\n if (name.startsWith('pose:')) return scenePoseTarget(scene, name.slice(5), options.descriptor, options.cascade);\n if (name.startsWith('rig:')) return options.rigs?.[name.slice(4)]?.target;\n return undefined;\n };\n}\n"],"mappings":";;AAmBA,SAAgBA,EACd,GACA,IAA0C,CAAC,GACR;CACnC,QAAQ,MAAS;EACf,IAAIC,EAAK,WAAW,OAAO,GAAG,OAAOC,EAAgBC,GAAOF,EAAK,MAAM,CAAC,GAAGG,EAAQ,YAAYA,EAAQ,OAAO;EAC9G,IAAIH,EAAK,WAAW,MAAM,GAAG,OAAOG,EAAQ,OAAOH,EAAK,MAAM,CAAC,EAAE,EAAE;CAErE;AACF"}
@@ -1,20 +1,15 @@
1
- import { springPose as e, tweenPose as t } from "./poseHelpers.js";
2
- import { sampleTrack as n } from "./timeline/sampleTrack.js";
3
- import { ColorOverrideRegistry as r } from "./colorRegistry.js";
4
- import { useAnimator as i } from "./useAnimator.js";
5
- import { animateOnSetPose as a } from "./wrappers/animateOnSetPose.js";
6
- import { animateLifecycle as o } from "./wrappers/animateLifecycle.js";
7
- import { createReflowTransition as s, useAnimatedReflow as c } from "./reflow.js";
8
- import { momentum as l } from "./behaviors/momentum.js";
9
- import { createSlew as u, slewToward as d } from "./slew.js";
10
- import { cycleVertexColors as f, rainbowVertexColors as p, solidVertexColors as m, springVertexColors as h, staggerVertexColors as g, tweenVertexColors as _ } from "./colorHelpers.js";
11
- import { IDENTITY_JOINT as v } from "./rig/types.js";
12
- import { blendPoses as y } from "./rig/blendPoses.js";
13
- import { mirrorPose as b } from "./rig/mirrorPose.js";
14
- import { resolveSkeleton as x } from "./rig/resolveSkeleton.js";
15
- import { bindRig as S, rigidRigApply as C } from "./rig/bindRig.js";
16
- import { solveIk as w } from "./rig/solveIk.js";
17
- import { useRig as T } from "./rig/useRig.js";
18
- import { hexToOklchDeg as E, hslToSrgb as D, interpolateSrgb as O, lerpColorArray as k, lerpOklab as A, lerpOklch as j, linearSrgbToOklab as M, linearToSrgb as N, oklabToLinearSrgb as P, oklabToOklch as F, oklabToSrgbU8 as I, oklchDegToHex as L, oklchToOklab as R, srgbFloatToOklab as z, srgbToHsl as B, srgbToLinear as V, srgbU8ToOklab as H } from "@weasel-js/paint";
19
- import { EASINGS as U, SPRING_PRESETS as W, cubicBezierEasing as G, easeIn as K, easeInBack as q, easeInBounce as J, easeInCirc as Y, easeInCubic as X, easeInElastic as Z, easeInExpo as Q, easeInOut as $, easeInOutBack as ee, easeInOutBounce as te, easeInOutCirc as ne, easeInOutCubic as re, easeInOutElastic as ie, easeInOutExpo as ae, easeInOutQuad as oe, easeInOutQuart as se, easeInOutQuint as ce, easeInOutSine as le, easeInQuad as ue, easeInQuart as de, easeInQuint as fe, easeInSine as pe, easeOut as me, easeOutBack as he, easeOutBounce as ge, easeOutCirc as _e, easeOutCubic as ve, easeOutElastic as ye, easeOutExpo as be, easeOutQuad as xe, easeOutQuart as Se, easeOutQuint as Ce, easeOutSine as we, linear as Te, resolveEasing as Ee } from "@weasel-js/geom";
20
- export { r as ColorOverrideRegistry, U as EASINGS, v as IDENTITY_JOINT, W as SPRING_PRESETS, o as animateLifecycle, a as animateOnSetPose, S as bindRig, y as blendPoses, s as createReflowTransition, u as createSlew, G as cubicBezierEasing, f as cycleVertexColors, K as easeIn, q as easeInBack, J as easeInBounce, Y as easeInCirc, X as easeInCubic, Z as easeInElastic, Q as easeInExpo, $ as easeInOut, ee as easeInOutBack, te as easeInOutBounce, ne as easeInOutCirc, re as easeInOutCubic, ie as easeInOutElastic, ae as easeInOutExpo, oe as easeInOutQuad, se as easeInOutQuart, ce as easeInOutQuint, le as easeInOutSine, ue as easeInQuad, de as easeInQuart, fe as easeInQuint, pe as easeInSine, me as easeOut, he as easeOutBack, ge as easeOutBounce, _e as easeOutCirc, ve as easeOutCubic, ye as easeOutElastic, be as easeOutExpo, xe as easeOutQuad, Se as easeOutQuart, Ce as easeOutQuint, we as easeOutSine, E as hexToOklchDeg, D as hslToSrgb, O as interpolateSrgb, k as lerpColorArray, A as lerpOklab, j as lerpOklch, Te as linear, M as linearSrgbToOklab, N as linearToSrgb, b as mirrorPose, l as momentum, P as oklabToLinearSrgb, F as oklabToOklch, I as oklabToSrgbU8, L as oklchDegToHex, R as oklchToOklab, p as rainbowVertexColors, Ee as resolveEasing, x as resolveSkeleton, C as rigidRigApply, n as sampleTrack, d as slewToward, m as solidVertexColors, w as solveIk, e as springPose, h as springVertexColors, z as srgbFloatToOklab, B as srgbToHsl, V as srgbToLinear, H as srgbU8ToOklab, g as staggerVertexColors, t as tweenPose, _ as tweenVertexColors, c as useAnimatedReflow, i as useAnimator, T as useRig };
1
+ import { createPoseTarget as e, poseAxes as t, scenePoseTarget as n } from "./poseTarget.js";
2
+ import { dataRestPath as r } from "./rig/skinBinding.js";
3
+ import { bindRig as i, rigidRigApply as a } from "./rig/bindRig.js";
4
+ import { useRig as o } from "./rig/useRig.js";
5
+ import { placeSkeleton as s, rigFromNode as c, unplaceSkeleton as l, useRigNode as u } from "./rig/rigNode.js";
6
+ import { createWrittenPoseTarget as d } from "./writtenPoseTarget.js";
7
+ import { sceneClipTargets as f } from "./clipTargets.js";
8
+ import { springPose as p, staggerSpringPose as m, tweenPose as h } from "./poseHelpers.js";
9
+ import { animateOnSetPose as g } from "./wrappers/animateOnSetPose.js";
10
+ import { animateLifecycle as _ } from "./wrappers/animateLifecycle.js";
11
+ import { createReflowTransition as v, useAnimatedReflow as y } from "./reflow.js";
12
+ import { momentum as b } from "./behaviors/momentum.js";
13
+ import { EASINGS as x, SPRING_PRESETS as S, cubicBezierEasing as C, easeIn as w, easeInBack as T, easeInBounce as E, easeInCirc as D, easeInCubic as O, easeInElastic as k, easeInExpo as A, easeInOut as j, easeInOutBack as M, easeInOutBounce as N, easeInOutCirc as P, easeInOutCubic as F, easeInOutElastic as I, easeInOutExpo as L, easeInOutQuad as R, easeInOutQuart as z, easeInOutQuint as B, easeInOutSine as V, easeInQuad as H, easeInQuart as U, easeInQuint as W, easeInSine as G, easeOut as K, easeOutBack as q, easeOutBounce as J, easeOutCirc as Y, easeOutCubic as X, easeOutElastic as Z, easeOutExpo as Q, easeOutQuad as $, easeOutQuart as ee, easeOutQuint as te, easeOutSine as ne, linear as re, resolveEasing as ie } from "@weasel-js/geom";
14
+ import { hexToOklchDeg as ae, hslToSrgb as oe, interpolateSrgb as se, lerpColorArray as ce, lerpOklab as le, lerpOklch as ue, linearSrgbToOklab as de, linearToSrgb as fe, oklabToLinearSrgb as pe, oklabToOklch as me, oklabToSrgbU8 as he, oklchDegToHex as ge, oklchToOklab as _e, srgbFloatToOklab as ve, srgbToHsl as ye, srgbToLinear as be, srgbU8ToOklab as xe } from "@weasel-js/paint";
15
+ export { x as EASINGS, S as SPRING_PRESETS, _ as animateLifecycle, g as animateOnSetPose, i as bindRig, e as createPoseTarget, v as createReflowTransition, d as createWrittenPoseTarget, C as cubicBezierEasing, r as dataRestPath, w as easeIn, T as easeInBack, E as easeInBounce, D as easeInCirc, O as easeInCubic, k as easeInElastic, A as easeInExpo, j as easeInOut, M as easeInOutBack, N as easeInOutBounce, P as easeInOutCirc, F as easeInOutCubic, I as easeInOutElastic, L as easeInOutExpo, R as easeInOutQuad, z as easeInOutQuart, B as easeInOutQuint, V as easeInOutSine, H as easeInQuad, U as easeInQuart, W as easeInQuint, G as easeInSine, K as easeOut, q as easeOutBack, J as easeOutBounce, Y as easeOutCirc, X as easeOutCubic, Z as easeOutElastic, Q as easeOutExpo, $ as easeOutQuad, ee as easeOutQuart, te as easeOutQuint, ne as easeOutSine, ae as hexToOklchDeg, oe as hslToSrgb, se as interpolateSrgb, ce as lerpColorArray, le as lerpOklab, ue as lerpOklch, re as linear, de as linearSrgbToOklab, fe as linearToSrgb, b as momentum, pe as oklabToLinearSrgb, me as oklabToOklch, he as oklabToSrgbU8, ge as oklchDegToHex, _e as oklchToOklab, s as placeSkeleton, t as poseAxes, ie as resolveEasing, c as rigFromNode, a as rigidRigApply, f as sceneClipTargets, n as scenePoseTarget, p as springPose, ve as srgbFloatToOklab, ye as srgbToHsl, be as srgbToLinear, xe as srgbU8ToOklab, m as staggerSpringPose, h as tweenPose, l as unplaceSkeleton, y as useAnimatedReflow, o as useRig, u as useRigNode };
@@ -1,50 +1,129 @@
1
- import { createTransformOp as e } from "../core/ops/transform.js";
2
- import { RECT_POSE_DESCRIPTOR as t } from "../core/geometry/poseDescriptor.js";
1
+ import { RECT_POSE_DESCRIPTOR as e } from "../core/geometry/poseDescriptor.js";
2
+ import { createTransformOp as t } from "../core/ops/transform.js";
3
+ import { rewindingSpring as n, rewindingTween as r } from "./rewind.js";
3
4
  //#region src/animation/poseHelpers.ts
4
- var n = (e) => `pose:${e}`;
5
- function r(t, n, r, i, a) {
6
- if (!t.applyOps) return;
7
- let o = e({
5
+ var i = (e) => `pose:${e}`;
6
+ function a(e, n, r, i, a) {
7
+ if (!e.applyOps) return;
8
+ let o = t({
8
9
  id: n,
9
10
  from: r,
10
11
  to: i,
11
12
  label: a
12
13
  });
13
- t.applyOps([o], a);
14
+ e.applyOps([o], a);
14
15
  }
15
- function i(e, i, a) {
16
- let o = a.geometry ?? t;
17
- if (!o.lerp) throw Error("tweenPose: geometry has no lerp; supply geometry: { ..., lerp }");
18
- let s = o.lerp, c = i.getPose(a.id), l = a.recordOp ?? !0, u = a.opLabel ?? "animate";
19
- return l && r(i, a.id, c, a.to, u), e.tween({
20
- from: c,
21
- to: a.to,
22
- ms: a.ms,
23
- easing: a.easing,
24
- cancelKey: n(a.id),
25
- interpolate: (e, t, n) => s(e, t, n),
26
- onTick: (e) => i.setPose(a.id, e),
27
- onDone: a.onDone
16
+ function o(t, n, o) {
17
+ let s = o.recordOp ?? !0, c = o.opLabel ?? "animate", l = i(o.id), u = n.poseTarget?.(o.id, o.geometry);
18
+ if (u) {
19
+ let e = u.committed();
20
+ s && a(n, o.id, e, o.to, c);
21
+ let i = o.geometry?.lerp;
22
+ return o.rewind ? r(t, u, {
23
+ start: e,
24
+ from: o.from ?? e,
25
+ to: o.to,
26
+ ms: o.ms,
27
+ easing: o.easing,
28
+ cancelKey: l,
29
+ interpolate: i && ((e, t, n) => i(e, t, n)),
30
+ onDone: o.onDone
31
+ }) : t.tween({
32
+ target: u,
33
+ from: o.from ?? e,
34
+ to: o.to,
35
+ ms: o.ms,
36
+ easing: o.easing,
37
+ cancelKey: l,
38
+ interrupt: !1,
39
+ interpolate: i && ((e, t, n) => i(e, t, n)),
40
+ onDone: o.onDone
41
+ });
42
+ }
43
+ let d = o.geometry ?? e;
44
+ if (!d.lerp) throw Error("tweenPose: geometry has no lerp; supply geometry: { ..., lerp }");
45
+ let f = d.lerp, p = n.getPose(o.id);
46
+ return s && a(n, o.id, p, o.to, c), t.tween({
47
+ from: o.from ?? p,
48
+ to: o.to,
49
+ ms: o.ms,
50
+ easing: o.easing,
51
+ cancelKey: l,
52
+ interpolate: (e, t, n) => f(e, t, n),
53
+ onTick: (e) => n.setPose(o.id, e),
54
+ onDone: o.onDone
28
55
  });
29
56
  }
30
- function a(e, i, a) {
31
- let o = a.geometry ?? t;
32
- if (!o.lerp) throw Error("springPose: geometry has no lerp; supply geometry: { ..., lerp }");
33
- let s = o.lerp, c = i.getPose(a.id), l = a.recordOp ?? !0, u = a.opLabel ?? "animate";
34
- return l && r(i, a.id, c, a.to, u), e.spring({
57
+ function s(t, r, o) {
58
+ let s = o.recordOp ?? !0, c = o.opLabel ?? "animate", l = i(o.id), u = r.poseTarget?.(o.id, o.geometry);
59
+ if (u) {
60
+ let e = u.read(), i = u.committed();
61
+ return s && a(r, o.id, i, o.to, c), o.rewind ? n(t, u, {
62
+ start: i,
63
+ from: e,
64
+ to: o.to,
65
+ cancelKey: l,
66
+ onDone: o.onDone,
67
+ tuning: {
68
+ preset: o.preset,
69
+ stiffness: o.stiffness,
70
+ damping: o.damping,
71
+ mass: o.mass
72
+ }
73
+ }) : t.spring({
74
+ target: u,
75
+ from: e,
76
+ to: o.to,
77
+ preset: o.preset,
78
+ stiffness: o.stiffness,
79
+ damping: o.damping,
80
+ mass: o.mass,
81
+ cancelKey: l,
82
+ onDone: o.onDone
83
+ });
84
+ }
85
+ let d = o.geometry ?? e;
86
+ if (!d.lerp) throw Error("springPose: geometry has no lerp; supply geometry: { ..., lerp }");
87
+ let f = d.lerp, p = r.getPose(o.id);
88
+ return s && a(r, o.id, p, o.to, c), t.spring({
35
89
  from: 0,
36
90
  to: 1,
37
- preset: a.preset,
38
- stiffness: a.stiffness,
39
- damping: a.damping,
40
- mass: a.mass,
41
- cancelKey: n(a.id),
91
+ preset: o.preset,
92
+ stiffness: o.stiffness,
93
+ damping: o.damping,
94
+ mass: o.mass,
95
+ cancelKey: l,
42
96
  interpolate: (e, t, n) => e + (t - e) * n,
43
- onTick: (e) => i.setPose(a.id, s(c, a.to, e)),
44
- onDone: a.onDone
97
+ onTick: (e) => r.setPose(o.id, f(p, o.to, e)),
98
+ onDone: o.onDone
99
+ });
100
+ }
101
+ function c(e) {
102
+ if (typeof e == "object" && e && "id" in e) {
103
+ let t = e.id;
104
+ if (typeof t == "string") return t;
105
+ }
106
+ if (typeof e == "string" || typeof e == "number") return String(e);
107
+ throw Error("staggerSpringPose: each item must either be a primitive (string/number) or have a string `id` field. Otherwise pose ids would collide.");
108
+ }
109
+ function l(e, t, n) {
110
+ return e.stagger(n.items, n.delay).each((r, i) => s(e, t, {
111
+ id: c(r),
112
+ to: n.to(r, i),
113
+ preset: n.preset,
114
+ stiffness: n.stiffness,
115
+ damping: n.damping,
116
+ mass: n.mass,
117
+ geometry: n.geometry,
118
+ recordOp: n.recordOp,
119
+ opLabel: n.opLabel,
120
+ rewind: n.rewind
121
+ }), {
122
+ cancelKey: n.cancelKey,
123
+ label: n.label
45
124
  });
46
125
  }
47
126
  //#endregion
48
- export { a as springPose, i as tweenPose };
127
+ export { i as poseKey, s as springPose, l as staggerSpringPose, o as tweenPose };
49
128
 
50
129
  //# sourceMappingURL=poseHelpers.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"poseHelpers.js","names":["cancelKeyFor","id","recordTransformOp","adapter","op","createTransformOp","label","tweenPose","geometry","opts","RECT_POSE_DESCRIPTOR","lerp","from","recordOp","animator","a","b","t","value","springPose","progress"],"sources":["../../src/animation/poseHelpers.ts"],"sourcesContent":["import { createTransformOp } from 'core/ops/transform';\nimport { RECT_POSE_DESCRIPTOR, type PoseDescriptor } from 'interactions/actions/resize/geometry';\nimport type { SceneAdapter } from 'core/adapters/types';\nimport type { AnimationHandle, Animator, EasingSpec, SpringPresetName } from './types';\n\n/** Options for `tweenPose`. */\nexport interface TweenPoseOptions<TPose> {\n id: string;\n to: TPose;\n ms: number;\n easing?: EasingSpec;\n /** Pose descriptor with a `lerp(from, to, t)` method. Defaults to\n * `RECT_POSE_DESCRIPTOR`, which interpolates x/y/width/height linearly. */\n geometry?: PoseDescriptor<TPose>;\n /** When true (default), emit a transform op before the tween so undo\n * restores the pre-animation pose. */\n recordOp?: boolean;\n /** Label for the recorded op. Default: `'animate'`. */\n opLabel?: string;\n onDone?: () => void;\n}\n\n/** Options for `springPose`. */\nexport interface SpringPoseOptions<TPose> {\n id: string;\n to: TPose;\n preset?: SpringPresetName;\n stiffness?: number;\n damping?: number;\n mass?: number;\n geometry?: PoseDescriptor<TPose>;\n recordOp?: boolean;\n opLabel?: string;\n onDone?: () => void;\n}\n\nconst cancelKeyFor = (id: string): string => `pose:${id}`;\n\nfunction recordTransformOp<TPose>(\n adapter: SceneAdapter<{ id: string }, TPose>,\n id: string,\n from: TPose,\n to: TPose,\n label: string,\n): void {\n if (!adapter.applyOps) return;\n const op = createTransformOp<TPose>({ id, from, to, label });\n adapter.applyOps([op], label);\n}\n\n/**\n * Animate one node's pose to `to` over `ms`, writing each frame through the\n * adapter.\n *\n * Unlike the color helpers this really does move the node. Undo therefore has\n * to be considered: by default a single transform op covering the whole\n * animation is recorded up front, so one undo returns the node to where it\n * started rather than replaying frames.\n */\nexport function tweenPose<TNode extends { id: string }, TPose>(\n animator: Animator,\n adapter: SceneAdapter<TNode, TPose>,\n opts: TweenPoseOptions<TPose>,\n): AnimationHandle {\n const geometry = (opts.geometry ?? (RECT_POSE_DESCRIPTOR as unknown as PoseDescriptor<TPose>));\n if (!geometry.lerp) {\n throw new Error('tweenPose: geometry has no lerp; supply geometry: { ..., lerp }');\n }\n const lerp = geometry.lerp;\n const from = adapter.getPose(opts.id);\n const recordOp = opts.recordOp ?? true;\n const label = opts.opLabel ?? 'animate';\n if (recordOp) recordTransformOp(adapter as never, opts.id, from, opts.to, label);\n return animator.tween<TPose>({\n from,\n to: opts.to,\n ms: opts.ms,\n easing: opts.easing,\n cancelKey: cancelKeyFor(opts.id),\n interpolate: (a, b, t) => lerp(a, b, t),\n onTick: (value) => adapter.setPose(opts.id, value),\n onDone: opts.onDone,\n });\n}\n\n/** `tweenPose` driven by a spring instead of a duration. Same op-recording\n * behavior. */\nexport function springPose<TNode extends { id: string }, TPose>(\n animator: Animator,\n adapter: SceneAdapter<TNode, TPose>,\n opts: SpringPoseOptions<TPose>,\n): AnimationHandle {\n const geometry = (opts.geometry ?? (RECT_POSE_DESCRIPTOR as unknown as PoseDescriptor<TPose>));\n if (!geometry.lerp) {\n throw new Error('springPose: geometry has no lerp; supply geometry: { ..., lerp }');\n }\n const lerp = geometry.lerp;\n const from = adapter.getPose(opts.id);\n const recordOp = opts.recordOp ?? true;\n const label = opts.opLabel ?? 'animate';\n if (recordOp) recordTransformOp(adapter as never, opts.id, from, opts.to, label);\n // For pose springs: integrate progress (0..1) as the spring's value, then\n // use lerp(from, to, progress) for the actual visual write. This avoids\n // requiring full add/subtract/scale/magnitude on TPose.\n const progressLerp = (a: number, b: number, t: number) => a + (b - a) * t;\n return animator.spring<number>({\n from: 0,\n to: 1,\n preset: opts.preset,\n stiffness: opts.stiffness,\n damping: opts.damping,\n mass: opts.mass,\n cancelKey: cancelKeyFor(opts.id),\n interpolate: progressLerp,\n onTick: (progress) => adapter.setPose(opts.id, lerp(from, opts.to, progress)),\n onDone: opts.onDone,\n });\n}\n"],"mappings":";;;AAoCA,IAAMA,KAAgB,MAAuB,QAAQC;AAErD,SAASC,EACP,GACA,GACA,GACA,GACA,GACM;CACN,IAAI,CAACC,EAAQ,UAAU;CACvB,IAAMC,IAAKC,EAAyB;EAAE;EAAI;EAAM;EAAI;CAAM,CAAC;CAC3D,EAAQ,SAAS,CAACD,CAAE,GAAGE,CAAK;AAC9B;AAWA,SAAgBC,EACd,GACA,GACA,GACiB;CACjB,IAAMC,IAAYC,EAAK,YAAaC;CACpC,IAAI,CAACF,EAAS,MACZ,MAAU,MAAM,iEAAiE;CAEnF,IAAMG,IAAOH,EAAS,MAChBI,IAAOT,EAAQ,QAAQM,EAAK,EAAE,GAC9BI,IAAWJ,EAAK,YAAY,IAC5BH,IAAQG,EAAK,WAAW;CAE9B,OADII,KAAUX,EAAkBC,GAAkBM,EAAK,IAAIG,GAAMH,EAAK,IAAIH,CAAK,GACxEQ,EAAS,MAAa;EAC3B;EACA,IAAIL,EAAK;EACT,IAAIA,EAAK;EACT,QAAQA,EAAK;EACb,WAAWT,EAAaS,EAAK,EAAE;EAC/B,cAAc,GAAG,GAAG,MAAME,EAAKI,GAAGC,GAAGC,CAAC;EACtC,SAAS,MAAUd,EAAQ,QAAQM,EAAK,IAAIS,CAAK;EACjD,QAAQT,EAAK;CACf,CAAC;AACH;AAIA,SAAgBU,EACd,GACA,GACA,GACiB;CACjB,IAAMX,IAAYC,EAAK,YAAaC;CACpC,IAAI,CAACF,EAAS,MACZ,MAAU,MAAM,kEAAkE;CAEpF,IAAMG,IAAOH,EAAS,MAChBI,IAAOT,EAAQ,QAAQM,EAAK,EAAE,GAC9BI,IAAWJ,EAAK,YAAY,IAC5BH,IAAQG,EAAK,WAAW;CAM9B,OALII,KAAUX,EAAkBC,GAAkBM,EAAK,IAAIG,GAAMH,EAAK,IAAIH,CAAK,GAKxEQ,EAAS,OAAe;EAC7B,MAAM;EACN,IAAI;EACJ,QAAQL,EAAK;EACb,WAAWA,EAAK;EAChB,SAASA,EAAK;EACd,MAAMA,EAAK;EACX,WAAWT,EAAaS,EAAK,EAAE;EAC/B,cAToB,GAAW,GAAW,MAAcM,KAAKC,IAAID,KAAKE;EAUtE,SAAS,MAAad,EAAQ,QAAQM,EAAK,IAAIE,EAAKC,GAAMH,EAAK,IAAIW,CAAQ,CAAC;EAC5E,QAAQX,EAAK;CACf,CAAC;AACH"}
1
+ {"version":3,"file":"poseHelpers.js","names":["poseKey","id","recordTransformOp","adapter","op","createTransformOp","label","tweenPose","recordOp","opts","cancelKey","target","committed","lerp","rewindingTween","animator","a","b","t","geometry","RECT_POSE_DESCRIPTOR","from","value","springPose","shown","rewindingSpring","progress","itemId","item","staggerSpringPose"],"sources":["../../src/animation/poseHelpers.ts"],"sourcesContent":["import { createTransformOp } from 'core/ops/transform';\nimport { RECT_POSE_DESCRIPTOR, type PoseDescriptor } from 'interactions/actions/resize/geometry';\nimport type { Op } from 'core/ops/types';\nimport type {\n AnimationHandle, Animator, EasingSpec, SpringPresetName, StaggerDelay, StaggerOptions,\n} from '@weasel-js/animator';\nimport type { Target } from '@weasel-js/animator';\nimport { rewindingSpring, rewindingTween } from './rewind';\n\n/** The part of an adapter `tweenPose` and `springPose` use. The adapter `sceneToAdapter` and\n * `useSceneAdapter` build is one. */\nexport interface PoseAnimationAdapter<TPose> {\n getPose(id: string): TPose;\n setPose(id: string, pose: TPose): void;\n applyOps?(ops: Op[], label: string): void;\n /** See `MoveAdapter.poseTarget`. */\n poseTarget?(id: string, descriptor?: PoseDescriptor<TPose>): Target<TPose> | undefined;\n}\n\n/** Options for `tweenPose`. */\nexport interface TweenPoseOptions<TPose> {\n id: string;\n to: TPose;\n /** Where the move appears to start. Default: where the node is. Nothing is written there. */\n from?: TPose;\n ms: number;\n easing?: EasingSpec;\n /** Supplies the pose's axes, and its `lerp` is the path the move follows. Without one the\n * adapter's own descriptor maps the pose and each axis travels in a straight line. */\n geometry?: PoseDescriptor<TPose>;\n /** When true (default), emit a transform op before the tween so undo\n * restores the pre-animation pose. */\n recordOp?: boolean;\n /** Label for the recorded op. Default: `'animate'`. */\n opLabel?: string;\n /**\n * When true, a move undone mid-flight travels back to where it began, and one redone\n * mid-way back turns forward again, where by default the node comes to rest on the written\n * pose at once. `onDone` is called only when the move arrives at `to`. Needs an adapter with\n * `poseTarget`. Default false.\n */\n rewind?: boolean;\n onDone?: () => void;\n}\n\n/** Options for `springPose`. */\nexport interface SpringPoseOptions<TPose> {\n id: string;\n to: TPose;\n preset?: SpringPresetName;\n stiffness?: number;\n damping?: number;\n mass?: number;\n geometry?: PoseDescriptor<TPose>;\n recordOp?: boolean;\n opLabel?: string;\n /** As `TweenPoseOptions.rewind`: undone mid-flight, it springs back to where it began from\n * where it is, at the speed it has. */\n rewind?: boolean;\n onDone?: () => void;\n}\n\n/** The cancel key every move of node `id`'s pose shares. */\nexport const poseKey = (id: string): string => `pose:${id}`;\n\nfunction recordTransformOp<TPose>(\n adapter: PoseAnimationAdapter<TPose>,\n id: string,\n from: TPose,\n to: TPose,\n label: string,\n): void {\n if (!adapter.applyOps) return;\n const op = createTransformOp<TPose>({ id, from, to, label });\n adapter.applyOps([op], label);\n}\n\n/**\n * Animate one node's pose to `to` over `ms`.\n *\n * On an adapter with `poseTarget`, the destination is committed as the move starts. A\n * scene-backed adapter shows the travel through the scene's pose overrides, so the document\n * holds `to` throughout and nothing is written per frame; a store with no overrides, behind\n * `createWrittenPoseTarget`, is written the pose on screen each frame and `to` as the move ends. Moves on one node add: a\n * second `tweenPose` bends the first toward its own destination and cancels nothing. They share\n * the key `pose:<id>` for `cancelKey`, `pauseKey`, and `isActive`.\n *\n * By default one transform op covering the whole move is recorded up front, so one undo\n * returns the node to where it started. Undone mid-flight, the node comes to rest on the\n * undone pose, or with `rewind` travels back to it.\n *\n * An adapter without `poseTarget`, and a pose its descriptor gives no axes for, keep the older\n * behavior: `setPose` is written each frame, and a new move on the node cancels the one running.\n */\nexport function tweenPose<TPose>(\n animator: Animator,\n adapter: PoseAnimationAdapter<TPose>,\n opts: TweenPoseOptions<TPose>,\n): AnimationHandle {\n const recordOp = opts.recordOp ?? true;\n const label = opts.opLabel ?? 'animate';\n const cancelKey = poseKey(opts.id);\n const target = adapter.poseTarget?.(opts.id, opts.geometry);\n if (target) {\n const committed = target.committed();\n if (recordOp) recordTransformOp(adapter, opts.id, committed, opts.to, label);\n const lerp = opts.geometry?.lerp;\n if (opts.rewind) {\n return rewindingTween(animator, target, {\n start: committed, from: opts.from ?? committed, to: opts.to, ms: opts.ms, easing: opts.easing,\n cancelKey, interpolate: lerp && ((a, b, t) => lerp(a, b, t)), onDone: opts.onDone,\n });\n }\n return animator.tween<TPose>({\n target,\n from: opts.from ?? committed,\n to: opts.to,\n ms: opts.ms,\n easing: opts.easing,\n cancelKey,\n interrupt: false,\n interpolate: lerp && ((a, b, t) => lerp(a, b, t)),\n onDone: opts.onDone,\n });\n }\n const geometry = (opts.geometry ?? (RECT_POSE_DESCRIPTOR as unknown as PoseDescriptor<TPose>));\n if (!geometry.lerp) {\n throw new Error('tweenPose: geometry has no lerp; supply geometry: { ..., lerp }');\n }\n const lerp = geometry.lerp;\n const from = adapter.getPose(opts.id);\n if (recordOp) recordTransformOp(adapter, opts.id, from, opts.to, label);\n return animator.tween<TPose>({\n from: opts.from ?? from,\n to: opts.to,\n ms: opts.ms,\n easing: opts.easing,\n cancelKey,\n interpolate: (a, b, t) => lerp(a, b, t),\n onTick: (value) => adapter.setPose(opts.id, value),\n onDone: opts.onDone,\n });\n}\n\n/**\n * `tweenPose` driven by a spring instead of a duration, with the same op recording.\n *\n * On an adapter with `poseTarget` it interrupts every move under `pose:<id>` and starts at\n * their velocity, from the pose on screen. Otherwise it falls back as `tweenPose` does.\n */\nexport function springPose<TPose>(\n animator: Animator,\n adapter: PoseAnimationAdapter<TPose>,\n opts: SpringPoseOptions<TPose>,\n): AnimationHandle {\n const recordOp = opts.recordOp ?? true;\n const label = opts.opLabel ?? 'animate';\n const cancelKey = poseKey(opts.id);\n const target = adapter.poseTarget?.(opts.id, opts.geometry);\n if (target) {\n // Read ahead of the op: the spring starts from the pose on screen, wherever that commit\n // and the interrupted moves leave the committed one.\n const shown = target.read();\n const committed = target.committed();\n if (recordOp) recordTransformOp(adapter, opts.id, committed, opts.to, label);\n if (opts.rewind) {\n return rewindingSpring(animator, target, {\n start: committed, from: shown, to: opts.to, cancelKey, onDone: opts.onDone,\n tuning: { preset: opts.preset, stiffness: opts.stiffness, damping: opts.damping, mass: opts.mass },\n });\n }\n return animator.spring<TPose>({\n target,\n from: shown,\n to: opts.to,\n preset: opts.preset,\n stiffness: opts.stiffness,\n damping: opts.damping,\n mass: opts.mass,\n cancelKey,\n onDone: opts.onDone,\n });\n }\n const geometry = (opts.geometry ?? (RECT_POSE_DESCRIPTOR as unknown as PoseDescriptor<TPose>));\n if (!geometry.lerp) {\n throw new Error('springPose: geometry has no lerp; supply geometry: { ..., lerp }');\n }\n const lerp = geometry.lerp;\n const from = adapter.getPose(opts.id);\n if (recordOp) recordTransformOp(adapter, opts.id, from, opts.to, label);\n // The spring integrates progress from 0 to 1, and lerp makes the pose from it.\n return animator.spring<number>({\n from: 0,\n to: 1,\n preset: opts.preset,\n stiffness: opts.stiffness,\n damping: opts.damping,\n mass: opts.mass,\n cancelKey,\n interpolate: (a, b, t) => a + (b - a) * t,\n onTick: (progress) => adapter.setPose(opts.id, lerp(from, opts.to, progress)),\n onDone: opts.onDone,\n });\n}\n\n/** Options for `staggerSpringPose`: the items and their delays, each item's destination, and\n * the spring tuning. `cancelKey` and `label` belong to the stagger as a whole; each item's\n * spring keeps its own `pose:<id>` key. */\nexport interface StaggerSpringPoseOptions<TItem, TPose> extends StaggerOptions {\n /** Each is a node id, or carries one in a string `id` field. */\n items: readonly TItem[];\n delay: StaggerDelay;\n to: (item: TItem, index: number) => TPose;\n preset?: SpringPresetName;\n stiffness?: number;\n damping?: number;\n mass?: number;\n geometry?: PoseDescriptor<TPose>;\n recordOp?: boolean;\n opLabel?: string;\n /** As `SpringPoseOptions.rewind`, for each item's spring. */\n rewind?: boolean;\n}\n\nfunction itemId(item: unknown): string {\n if (item != null && typeof item === 'object' && 'id' in item) {\n const id = (item as { id: unknown }).id;\n if (typeof id === 'string') return id;\n }\n if (typeof item === 'string' || typeof item === 'number') return String(item);\n throw new Error(\n 'staggerSpringPose: each item must either be a primitive (string/number) ' +\n 'or have a string `id` field. Otherwise pose ids would collide.',\n );\n}\n\n/** `springPose` for each of `items`, started `delay` apart as `animator.stagger` counts it. */\nexport function staggerSpringPose<TItem, TPose>(\n animator: Animator,\n adapter: PoseAnimationAdapter<TPose>,\n opts: StaggerSpringPoseOptions<TItem, TPose>,\n): AnimationHandle {\n return animator.stagger(opts.items, opts.delay).each(\n (item, i) =>\n springPose(animator, adapter, {\n id: itemId(item),\n to: opts.to(item, i),\n preset: opts.preset,\n stiffness: opts.stiffness,\n damping: opts.damping,\n mass: opts.mass,\n geometry: opts.geometry,\n recordOp: opts.recordOp,\n opLabel: opts.opLabel,\n rewind: opts.rewind,\n }),\n { cancelKey: opts.cancelKey, label: opts.label },\n );\n}\n"],"mappings":"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"}