use-scroll-animate 10.2.0 → 10.4.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 (403) hide show
  1. package/AGENTS.md +4 -0
  2. package/CHANGELOG.md +35 -0
  3. package/README.md +67 -0
  4. package/bin/motionary-mcp.mjs +265 -0
  5. package/dist/chunks/anim-image-DDdb9q3X.js +166 -0
  6. package/dist/chunks/anim-image-DDdb9q3X.js.map +1 -0
  7. package/dist/chunks/anim-image-blQgPFFS.cjs +174 -0
  8. package/dist/chunks/anim-image-blQgPFFS.cjs.map +1 -0
  9. package/dist/chunks/audio-BpU-A1m1.cjs.map +1 -1
  10. package/dist/chunks/{audio-D95jwlOh.js → audio-CWt1xdZB.js} +3 -3
  11. package/dist/chunks/{audio-D95jwlOh.js.map → audio-CWt1xdZB.js.map} +1 -1
  12. package/dist/chunks/{base-BnRyfuyM.js → base-BTev8qxg.js} +2 -2
  13. package/dist/chunks/{base-BnRyfuyM.js.map → base-BTev8qxg.js.map} +1 -1
  14. package/dist/chunks/base-DBheNxJu.cjs.map +1 -1
  15. package/dist/chunks/bind-B_CTL6Qn.js.map +1 -1
  16. package/dist/chunks/bind-Ui43-n2d.cjs.map +1 -1
  17. package/dist/chunks/builtins-CKKZNR95.cjs.map +1 -1
  18. package/dist/chunks/{builtins-CqIq1zBv.js → builtins-CPmS6aDB.js} +3 -3
  19. package/dist/chunks/{builtins-CqIq1zBv.js.map → builtins-CPmS6aDB.js.map} +1 -1
  20. package/dist/chunks/core-B5T0dhFH.cjs.map +1 -1
  21. package/dist/chunks/{core-DsGoL9EY.js → core-BviA7nFa.js} +2 -2
  22. package/dist/chunks/{core-DsGoL9EY.js.map → core-BviA7nFa.js.map} +1 -1
  23. package/dist/chunks/core-D74Fz-dL.cjs.map +1 -1
  24. package/dist/chunks/core-D7cVumUu.js.map +1 -1
  25. package/dist/chunks/{core-XA2yhn1b.js → core-KiM7MXjL.js} +2 -2
  26. package/dist/chunks/{core-XA2yhn1b.js.map → core-KiM7MXjL.js.map} +1 -1
  27. package/dist/chunks/core-MQlXZKUG.cjs.map +1 -1
  28. package/dist/chunks/ease-HwYZnZat.cjs +94 -0
  29. package/dist/chunks/ease-HwYZnZat.cjs.map +1 -0
  30. package/dist/chunks/ease-XN8_0sXu.js +89 -0
  31. package/dist/chunks/ease-XN8_0sXu.js.map +1 -0
  32. package/dist/chunks/fx-B_pbhpDp.cjs.map +1 -1
  33. package/dist/chunks/{fx-CtnrFEg9.js → fx-CgWKqVsn.js} +2 -2
  34. package/dist/chunks/{fx-CtnrFEg9.js.map → fx-CgWKqVsn.js.map} +1 -1
  35. package/dist/chunks/generative-2LhxG5BJ.js.map +1 -1
  36. package/dist/chunks/generative-BHIj-NU0.cjs.map +1 -1
  37. package/dist/chunks/{gpu-CDcXiNA8.js → gpu-BWfgYWMY.js} +2 -2
  38. package/dist/chunks/{gpu-CDcXiNA8.js.map → gpu-BWfgYWMY.js.map} +1 -1
  39. package/dist/chunks/gpu-cUixt7kT.cjs.map +1 -1
  40. package/dist/chunks/index-tags-B-JBecYg.js.map +1 -1
  41. package/dist/chunks/index-tags-hLIF2Clq.cjs.map +1 -1
  42. package/dist/chunks/{keyframes-W-474DMc.js → keyframes-B5PWe5bU.js} +3 -2
  43. package/dist/chunks/keyframes-B5PWe5bU.js.map +1 -0
  44. package/dist/chunks/{keyframes-ZheOkpt0.cjs → keyframes-tC3I7anQ.cjs} +4 -3
  45. package/dist/chunks/keyframes-tC3I7anQ.cjs.map +1 -0
  46. package/dist/chunks/{manifest-D58HXVY-.js → manifest-BHx5yPN6.js} +2 -2
  47. package/dist/chunks/{manifest-D58HXVY-.js.map → manifest-BHx5yPN6.js.map} +1 -1
  48. package/dist/chunks/manifest-PaF9B8Vt.cjs.map +1 -1
  49. package/dist/chunks/{player-48Zy_NBG.js → player-BfHMNtiM.js} +4 -4
  50. package/dist/chunks/{player-48Zy_NBG.js.map → player-BfHMNtiM.js.map} +1 -1
  51. package/dist/chunks/player-C4y4jXSv.cjs.map +1 -1
  52. package/dist/chunks/presets-BYBVJVeP.js.map +1 -1
  53. package/dist/chunks/presets-CUHys3sK.cjs.map +1 -1
  54. package/dist/chunks/{registry-gFJRpPES.js → registry-BKzyg1JV.js} +2 -2
  55. package/dist/chunks/{registry-gFJRpPES.js.map → registry-BKzyg1JV.js.map} +1 -1
  56. package/dist/chunks/{registry-BIEjKngP.js → registry-CT-TT_bx.js} +3 -3
  57. package/dist/chunks/{registry-BIEjKngP.js.map → registry-CT-TT_bx.js.map} +1 -1
  58. package/dist/chunks/{registry-eJgpFAzI.cjs → registry-tzwKkldE.cjs} +2 -2
  59. package/dist/chunks/{registry-eJgpFAzI.cjs.map → registry-tzwKkldE.cjs.map} +1 -1
  60. package/dist/chunks/registry-xQZnSqqV.cjs.map +1 -1
  61. package/dist/chunks/shared-CkKHWrtJ.js.map +1 -1
  62. package/dist/chunks/shared-jkgRH-Hx.cjs.map +1 -1
  63. package/dist/chunks/{spring-CZDNyqWp.js → spring-BHuP55DR.js} +2 -2
  64. package/dist/chunks/{spring-CZDNyqWp.js.map → spring-BHuP55DR.js.map} +1 -1
  65. package/dist/chunks/spring-BlTQD2AV.cjs.map +1 -1
  66. package/dist/chunks/stagger-CCFyhzSw.cjs.map +1 -1
  67. package/dist/chunks/stagger-DtMKo2SK.js.map +1 -1
  68. package/dist/chunks/{ticker-CM_56oVy.js → ticker-C8lSGml9.js} +2 -2
  69. package/dist/chunks/{ticker-CM_56oVy.js.map → ticker-C8lSGml9.js.map} +1 -1
  70. package/dist/chunks/{ticker-D4o6enH0.cjs → ticker-Un0bvTWR.cjs} +2 -2
  71. package/dist/chunks/{ticker-D4o6enH0.cjs.map → ticker-Un0bvTWR.cjs.map} +1 -1
  72. package/dist/chunks/{tween-CqX1JBuj.js → tween-BcejKpsx.js} +15 -91
  73. package/dist/chunks/tween-BcejKpsx.js.map +1 -0
  74. package/dist/chunks/{tween-CBuWYpI-.cjs → tween-CwLLC3Ko.cjs} +15 -95
  75. package/dist/chunks/tween-CwLLC3Ko.cjs.map +1 -0
  76. package/dist/chunks/variants-CrDDJoYK.cjs.map +1 -1
  77. package/dist/chunks/{variants-GU3yIL4F.js → variants-CsRGUIyA.js} +2 -2
  78. package/dist/chunks/{variants-GU3yIL4F.js.map → variants-CsRGUIyA.js.map} +1 -1
  79. package/dist/components/a11y.cjs.map +1 -1
  80. package/dist/components/a11y.js +2 -2
  81. package/dist/components/a11y.js.map +1 -1
  82. package/dist/components/angular.cjs.map +1 -1
  83. package/dist/components/angular.js +8 -8
  84. package/dist/components/angular.js.map +1 -1
  85. package/dist/components/background.cjs.map +1 -1
  86. package/dist/components/background.js +2 -2
  87. package/dist/components/background.js.map +1 -1
  88. package/dist/components/bridge.cjs.map +1 -1
  89. package/dist/components/bridge.js +1 -1
  90. package/dist/components/bridge.js.map +1 -1
  91. package/dist/components/cards.cjs.map +1 -1
  92. package/dist/components/cards.js +2 -2
  93. package/dist/components/cards.js.map +1 -1
  94. package/dist/components/click.cjs.map +1 -1
  95. package/dist/components/click.js +3 -3
  96. package/dist/components/click.js.map +1 -1
  97. package/dist/components/core.cjs.map +1 -1
  98. package/dist/components/core.js.map +1 -1
  99. package/dist/components/depth.cjs.map +1 -1
  100. package/dist/components/depth.js +3 -3
  101. package/dist/components/depth.js.map +1 -1
  102. package/dist/components/design.cjs.map +1 -1
  103. package/dist/components/design.js +3 -3
  104. package/dist/components/design.js.map +1 -1
  105. package/dist/components/dsl.cjs.map +1 -1
  106. package/dist/components/dsl.js +2 -2
  107. package/dist/components/dsl.js.map +1 -1
  108. package/dist/components/effects.cjs.map +1 -1
  109. package/dist/components/effects.js +9 -9
  110. package/dist/components/effects.js.map +1 -1
  111. package/dist/components/engine.cjs.map +1 -1
  112. package/dist/components/engine.js +2 -2
  113. package/dist/components/engine.js.map +1 -1
  114. package/dist/components/feedback.cjs.map +1 -1
  115. package/dist/components/feedback.js +1 -1
  116. package/dist/components/feedback.js.map +1 -1
  117. package/dist/components/fx-3d.cjs.map +1 -1
  118. package/dist/components/fx-3d.js +2 -2
  119. package/dist/components/fx-3d.js.map +1 -1
  120. package/dist/components/fx-ai.cjs.map +1 -1
  121. package/dist/components/fx-ai.js +2 -2
  122. package/dist/components/fx-ai.js.map +1 -1
  123. package/dist/components/fx-chart.cjs.map +1 -1
  124. package/dist/components/fx-chart.js +2 -2
  125. package/dist/components/fx-chart.js.map +1 -1
  126. package/dist/components/fx-cinema.cjs.map +1 -1
  127. package/dist/components/fx-cinema.js +2 -2
  128. package/dist/components/fx-cinema.js.map +1 -1
  129. package/dist/components/fx-cyber.cjs.map +1 -1
  130. package/dist/components/fx-cyber.js +2 -2
  131. package/dist/components/fx-cyber.js.map +1 -1
  132. package/dist/components/fx-festival.cjs.map +1 -1
  133. package/dist/components/fx-festival.js +2 -2
  134. package/dist/components/fx-festival.js.map +1 -1
  135. package/dist/components/fx-focus.cjs.map +1 -1
  136. package/dist/components/fx-focus.js +2 -2
  137. package/dist/components/fx-focus.js.map +1 -1
  138. package/dist/components/fx-form.cjs.map +1 -1
  139. package/dist/components/fx-form.js +2 -2
  140. package/dist/components/fx-form.js.map +1 -1
  141. package/dist/components/fx-game.cjs.map +1 -1
  142. package/dist/components/fx-game.js +2 -2
  143. package/dist/components/fx-game.js.map +1 -1
  144. package/dist/components/fx-genart.cjs.map +1 -1
  145. package/dist/components/fx-genart.js +2 -2
  146. package/dist/components/fx-genart.js.map +1 -1
  147. package/dist/components/fx-geo.cjs.map +1 -1
  148. package/dist/components/fx-geo.js +2 -2
  149. package/dist/components/fx-geo.js.map +1 -1
  150. package/dist/components/fx-gesture.cjs.map +1 -1
  151. package/dist/components/fx-gesture.js +2 -2
  152. package/dist/components/fx-gesture.js.map +1 -1
  153. package/dist/components/fx-gpu.js +3 -3
  154. package/dist/components/fx-light.cjs.map +1 -1
  155. package/dist/components/fx-light.js +2 -2
  156. package/dist/components/fx-light.js.map +1 -1
  157. package/dist/components/fx-lottie.cjs.map +1 -1
  158. package/dist/components/fx-lottie.js +2 -2
  159. package/dist/components/fx-lottie.js.map +1 -1
  160. package/dist/components/fx-morph.cjs.map +1 -1
  161. package/dist/components/fx-morph.js +2 -2
  162. package/dist/components/fx-morph.js.map +1 -1
  163. package/dist/components/fx-music.cjs.map +1 -1
  164. package/dist/components/fx-music.js +3 -3
  165. package/dist/components/fx-music.js.map +1 -1
  166. package/dist/components/fx-organic.cjs.map +1 -1
  167. package/dist/components/fx-organic.js +2 -2
  168. package/dist/components/fx-organic.js.map +1 -1
  169. package/dist/components/fx-paper.cjs.map +1 -1
  170. package/dist/components/fx-paper.js +2 -2
  171. package/dist/components/fx-paper.js.map +1 -1
  172. package/dist/components/fx-perf.cjs.map +1 -1
  173. package/dist/components/fx-perf.js +2 -2
  174. package/dist/components/fx-perf.js.map +1 -1
  175. package/dist/components/fx-physics.cjs.map +1 -1
  176. package/dist/components/fx-physics.js +2 -2
  177. package/dist/components/fx-physics.js.map +1 -1
  178. package/dist/components/fx-retro.cjs.map +1 -1
  179. package/dist/components/fx-retro.js +2 -2
  180. package/dist/components/fx-retro.js.map +1 -1
  181. package/dist/components/fx-safe.cjs.map +1 -1
  182. package/dist/components/fx-safe.js +2 -2
  183. package/dist/components/fx-safe.js.map +1 -1
  184. package/dist/components/fx-shop.cjs.map +1 -1
  185. package/dist/components/fx-shop.js +2 -2
  186. package/dist/components/fx-shop.js.map +1 -1
  187. package/dist/components/fx-social.cjs.map +1 -1
  188. package/dist/components/fx-social.js +2 -2
  189. package/dist/components/fx-social.js.map +1 -1
  190. package/dist/components/fx-spatial.cjs.map +1 -1
  191. package/dist/components/fx-spatial.js +2 -2
  192. package/dist/components/fx-spatial.js.map +1 -1
  193. package/dist/components/fx-surface.cjs.map +1 -1
  194. package/dist/components/fx-surface.js +2 -2
  195. package/dist/components/fx-surface.js.map +1 -1
  196. package/dist/components/fx-text.cjs.map +1 -1
  197. package/dist/components/fx-text.js +2 -2
  198. package/dist/components/fx-text.js.map +1 -1
  199. package/dist/components/fx-transitions.cjs.map +1 -1
  200. package/dist/components/fx-transitions.js +3 -3
  201. package/dist/components/fx-transitions.js.map +1 -1
  202. package/dist/components/fx-video.cjs.map +1 -1
  203. package/dist/components/fx-video.js +2 -2
  204. package/dist/components/fx-video.js.map +1 -1
  205. package/dist/components/fx-weather.cjs.map +1 -1
  206. package/dist/components/fx-weather.js +2 -2
  207. package/dist/components/fx-weather.js.map +1 -1
  208. package/dist/components/fx.cjs.map +1 -1
  209. package/dist/components/fx.js +6 -6
  210. package/dist/components/fx.js.map +1 -1
  211. package/dist/components/fx2.cjs.map +1 -1
  212. package/dist/components/fx2.js +6 -6
  213. package/dist/components/fx2.js.map +1 -1
  214. package/dist/components/gesture.cjs.map +1 -1
  215. package/dist/components/gesture.js +4 -4
  216. package/dist/components/gesture.js.map +1 -1
  217. package/dist/components/interaction.cjs.map +1 -1
  218. package/dist/components/interaction.js +1 -1
  219. package/dist/components/interaction.js.map +1 -1
  220. package/dist/components/layout.cjs.map +1 -1
  221. package/dist/components/layout.js +1 -1
  222. package/dist/components/layout.js.map +1 -1
  223. package/dist/components/lazy.cjs.map +1 -1
  224. package/dist/components/lazy.js.map +1 -1
  225. package/dist/components/lite.cjs.map +1 -1
  226. package/dist/components/lite.js.map +1 -1
  227. package/dist/components/marketplace.cjs.map +1 -1
  228. package/dist/components/marketplace.js +4 -4
  229. package/dist/components/marketplace.js.map +1 -1
  230. package/dist/components/native.cjs.map +1 -1
  231. package/dist/components/native.js +3 -3
  232. package/dist/components/native.js.map +1 -1
  233. package/dist/components/packs.cjs.map +1 -1
  234. package/dist/components/packs.js +1 -1
  235. package/dist/components/packs.js.map +1 -1
  236. package/dist/components/page.cjs.map +1 -1
  237. package/dist/components/page.js +3 -3
  238. package/dist/components/page.js.map +1 -1
  239. package/dist/components/perf.cjs.map +1 -1
  240. package/dist/components/perf.js +2 -2
  241. package/dist/components/perf.js.map +1 -1
  242. package/dist/components/physics.cjs.map +1 -1
  243. package/dist/components/physics.js +3 -3
  244. package/dist/components/physics.js.map +1 -1
  245. package/dist/components/plugins.cjs.map +1 -1
  246. package/dist/components/plugins.js +4 -4
  247. package/dist/components/plugins.js.map +1 -1
  248. package/dist/components/react.cjs.map +1 -1
  249. package/dist/components/react.js.map +1 -1
  250. package/dist/components/reveal.cjs.map +1 -1
  251. package/dist/components/reveal.js +1 -1
  252. package/dist/components/reveal.js.map +1 -1
  253. package/dist/components/solid.cjs.map +1 -1
  254. package/dist/components/solid.js +8 -8
  255. package/dist/components/solid.js.map +1 -1
  256. package/dist/components/svelte.cjs.map +1 -1
  257. package/dist/components/svelte.js +8 -8
  258. package/dist/components/svelte.js.map +1 -1
  259. package/dist/components/svg.cjs.map +1 -1
  260. package/dist/components/svg.js +1 -1
  261. package/dist/components/svg.js.map +1 -1
  262. package/dist/components/text.cjs.map +1 -1
  263. package/dist/components/text.js +2 -2
  264. package/dist/components/text.js.map +1 -1
  265. package/dist/components/timeline.cjs.map +1 -1
  266. package/dist/components/timeline.js +3 -3
  267. package/dist/components/timeline.js.map +1 -1
  268. package/dist/components/tokens.cjs.map +1 -1
  269. package/dist/components/tokens.js.map +1 -1
  270. package/dist/components/transitions.cjs.map +1 -1
  271. package/dist/components/transitions.js +1 -1
  272. package/dist/components/transitions.js.map +1 -1
  273. package/dist/components/ui.cjs.map +1 -1
  274. package/dist/components/ui.js +4 -4
  275. package/dist/components/ui.js.map +1 -1
  276. package/dist/components/vue.cjs.map +1 -1
  277. package/dist/components/vue.js +8 -8
  278. package/dist/components/vue.js.map +1 -1
  279. package/dist/components/webgl.cjs.map +1 -1
  280. package/dist/components/webgl.js +1 -1
  281. package/dist/components/webgl.js.map +1 -1
  282. package/dist/components/widgets.cjs +766 -212
  283. package/dist/components/widgets.cjs.map +1 -1
  284. package/dist/components/widgets.d.cts +207 -2
  285. package/dist/components/widgets.d.ts +207 -2
  286. package/dist/components/widgets.js +770 -221
  287. package/dist/components/widgets.js.map +1 -1
  288. package/dist/components.cjs.map +1 -1
  289. package/dist/components.js +10 -10
  290. package/dist/components.js.map +1 -1
  291. package/dist/element.cjs.map +1 -1
  292. package/dist/element.js.map +1 -1
  293. package/dist/index.cjs.map +1 -1
  294. package/dist/index.js +2 -2
  295. package/dist/index.js.map +1 -1
  296. package/dist/llms-full.txt +250 -1
  297. package/dist/llms.txt +13 -2
  298. package/dist/manifest.json +646 -1
  299. package/dist/presets/extended.cjs.map +1 -1
  300. package/dist/presets/extended.js.map +1 -1
  301. package/dist/react.cjs.map +1 -1
  302. package/dist/react.js.map +1 -1
  303. package/dist/runtime/format-apng.cjs +131 -0
  304. package/dist/runtime/format-apng.cjs.map +1 -0
  305. package/dist/runtime/format-apng.d.cts +250 -0
  306. package/dist/runtime/format-apng.d.ts +250 -0
  307. package/dist/runtime/format-apng.iife.js +2 -0
  308. package/dist/runtime/format-apng.iife.js.map +1 -0
  309. package/dist/runtime/format-apng.js +123 -0
  310. package/dist/runtime/format-apng.js.map +1 -0
  311. package/dist/runtime/format-css.cjs +5 -4
  312. package/dist/runtime/format-css.cjs.map +1 -1
  313. package/dist/runtime/format-css.js +5 -4
  314. package/dist/runtime/format-css.js.map +1 -1
  315. package/dist/runtime/format-gif.cjs +206 -0
  316. package/dist/runtime/format-gif.cjs.map +1 -0
  317. package/dist/runtime/format-gif.d.cts +223 -0
  318. package/dist/runtime/format-gif.d.ts +223 -0
  319. package/dist/runtime/format-gif.iife.js +2 -0
  320. package/dist/runtime/format-gif.iife.js.map +1 -0
  321. package/dist/runtime/format-gif.js +199 -0
  322. package/dist/runtime/format-gif.js.map +1 -0
  323. package/dist/runtime/format-motion.cjs +9 -8
  324. package/dist/runtime/format-motion.cjs.map +1 -1
  325. package/dist/runtime/format-motion.js +5 -4
  326. package/dist/runtime/format-motion.js.map +1 -1
  327. package/dist/runtime/format-sprite.cjs +226 -0
  328. package/dist/runtime/format-sprite.cjs.map +1 -0
  329. package/dist/runtime/format-sprite.d.cts +224 -0
  330. package/dist/runtime/format-sprite.d.ts +224 -0
  331. package/dist/runtime/format-sprite.iife.js +2 -0
  332. package/dist/runtime/format-sprite.iife.js.map +1 -0
  333. package/dist/runtime/format-sprite.js +216 -0
  334. package/dist/runtime/format-sprite.js.map +1 -0
  335. package/dist/runtime/format-svg.cjs +5 -4
  336. package/dist/runtime/format-svg.cjs.map +1 -1
  337. package/dist/runtime/format-svg.iife.js.map +1 -1
  338. package/dist/runtime/format-svg.js +4 -3
  339. package/dist/runtime/format-svg.js.map +1 -1
  340. package/dist/runtime/format-webp.cjs +123 -0
  341. package/dist/runtime/format-webp.cjs.map +1 -0
  342. package/dist/runtime/format-webp.d.cts +245 -0
  343. package/dist/runtime/format-webp.d.ts +245 -0
  344. package/dist/runtime/format-webp.iife.js +2 -0
  345. package/dist/runtime/format-webp.iife.js.map +1 -0
  346. package/dist/runtime/format-webp.js +115 -0
  347. package/dist/runtime/format-webp.js.map +1 -0
  348. package/dist/runtime/scroll.cjs +2 -2
  349. package/dist/runtime/scroll.cjs.map +1 -1
  350. package/dist/runtime/scroll.js +2 -2
  351. package/dist/runtime/scroll.js.map +1 -1
  352. package/dist/runtime/smooth.cjs +284 -0
  353. package/dist/runtime/smooth.cjs.map +1 -0
  354. package/dist/runtime/smooth.d.cts +137 -0
  355. package/dist/runtime/smooth.d.ts +137 -0
  356. package/dist/runtime/smooth.iife.js +2 -0
  357. package/dist/runtime/smooth.iife.js.map +1 -0
  358. package/dist/runtime/smooth.js +279 -0
  359. package/dist/runtime/smooth.js.map +1 -0
  360. package/dist/runtime/text.cjs +147 -0
  361. package/dist/runtime/text.cjs.map +1 -0
  362. package/dist/runtime/text.d.cts +65 -0
  363. package/dist/runtime/text.d.ts +65 -0
  364. package/dist/runtime/text.iife.js +2 -0
  365. package/dist/runtime/text.iife.js.map +1 -0
  366. package/dist/runtime/text.js +143 -0
  367. package/dist/runtime/text.js.map +1 -0
  368. package/dist/runtime.cjs +9 -8
  369. package/dist/runtime.cjs.map +1 -1
  370. package/dist/runtime.d.cts +9 -2
  371. package/dist/runtime.d.ts +9 -2
  372. package/dist/runtime.iife.js +1 -1
  373. package/dist/runtime.iife.js.map +1 -1
  374. package/dist/runtime.js +6 -5
  375. package/dist/runtime.js.map +1 -1
  376. package/dist/solid.cjs.map +1 -1
  377. package/dist/solid.js.map +1 -1
  378. package/dist/svelte.cjs.map +1 -1
  379. package/dist/svelte.js.map +1 -1
  380. package/dist/vue.cjs.map +1 -1
  381. package/dist/vue.js.map +1 -1
  382. package/dist/widgets.umd.js +1 -1
  383. package/dist/widgets.umd.js.map +1 -1
  384. package/docs/ROADMAP.md +2 -2
  385. package/docs/components/README.md +12 -7
  386. package/docs/components/usa-parallax-layers.md +38 -0
  387. package/docs/components/usa-route-transition.md +38 -0
  388. package/docs/components/usa-scroll-ring.md +32 -0
  389. package/docs/components/usa-smooth-scroll.md +60 -0
  390. package/docs/components/usa-text-splitter.md +60 -0
  391. package/docs/components.md +94 -0
  392. package/docs/mcp.md +50 -0
  393. package/docs/runtime/format-apng.md +59 -0
  394. package/docs/runtime/format-gif.md +60 -0
  395. package/docs/runtime/format-sprite.md +60 -0
  396. package/docs/runtime/format-webp.md +58 -0
  397. package/docs/runtime/smooth.md +60 -0
  398. package/docs/runtime/text.md +59 -0
  399. package/package.json +64 -2
  400. package/dist/chunks/keyframes-W-474DMc.js.map +0 -1
  401. package/dist/chunks/keyframes-ZheOkpt0.cjs.map +0 -1
  402. package/dist/chunks/tween-CBuWYpI-.cjs.map +0 -1
  403. package/dist/chunks/tween-CqX1JBuj.js.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"runtime.iife.js","sources":["../src/runtime/registry.ts","../src/runtime/ticker.ts","../src/runtime/ease.ts","../src/runtime/tween.ts","../src/runtime/index.ts","../src/runtime/iife/core.ts"],"sourcesContent":["/**\n * Module registry shared by every copy of `motionary/runtime` on the page\n * (ESM, CJS and the CDN IIFE builds all read the same `globalThis` slot),\n * so a component never needs to import the runtime itself — it asks for a\n * module with `requireModule()` and gets a clear error when it is missing.\n * Nothing here touches `window` / `document`: safe to import during SSR and\n * inside Web Workers.\n */\n\n/** Runtime version (kept in sync with the package version by the release script). */\nexport const RUNTIME_VERSION = '10.2.0';\n\n/** Where the CDN builds live (major-pinned). */\nexport const RUNTIME_CDN = 'https://cdn.jsdelivr.net/npm/motionary@10/dist/';\n\n/** A runtime module: `{ id, version, api }`, registered with `use()`. */\nexport interface RuntimeModule<A = unknown> {\n /** Module id: 'core', 'format-css', 'scroll', … (import path `motionary/runtime/<id>`). */\n id: string;\n version: string;\n /** Other modules this one needs (registered first by `use()` callers). */\n requires?: string[];\n /** The module's public API (what `requireModule(id)` returns). */\n api: A;\n /** Optional one-time setup, called on first registration. */\n setup?(registry: RuntimeRegistry): void;\n}\n\nexport interface RuntimeRegistry {\n version: string;\n modules: Map<string, RuntimeModule>;\n /** Shared per-page state slots (the ticker lives here). */\n slots: Record<string, unknown>;\n}\n\nconst KEY = Symbol.for('motionary.runtime');\n\n/** The page-wide registry (created on first use). */\nexport function registry(): RuntimeRegistry {\n const g = globalThis as unknown as Record<symbol, RuntimeRegistry | undefined>;\n return (g[KEY] ||= { version: RUNTIME_VERSION, modules: new Map(), slots: {} });\n}\n\n/** The import path of a module id. */\nexport const modulePath = (id: string): string => (id === 'core' ? 'motionary/runtime' : `motionary/runtime/${id}`);\n\n/** The CDN IIFE file of a module id. */\nexport const moduleCdn = (id: string): string => RUNTIME_CDN + (id === 'core' ? 'runtime.iife.js' : `runtime/${id}.iife.js`);\n\n/** The text of the \"module missing\" error (shared with the components). */\nexport function missingMessage(id: string, who = 'This feature'): string {\n const path = modulePath(id);\n const reg = id === 'core' ? `import { use } from 'motionary/runtime'; use();` : `import { use } from 'motionary/runtime'; import { ${camel(id)} } from '${path}'; use(${camel(id)});`;\n const cdn = id === 'core' ? `<script src=\"${moduleCdn('core')}\"></script>` : `<script src=\"${moduleCdn('core')}\"></script><script src=\"${moduleCdn(id)}\"></script>`;\n return `[motionary] ${who} requires ${path}. Install once: npm i motionary — then register it before the component mounts: ${reg} Or from a CDN (core first): ${cdn} Docs: https://github.com/HarrisonCN/Motionary/blob/main/docs/runtime/${id}.md`;\n}\n\n/** 'format-css' → 'formatCss' (the module object's export name). */\nexport const camel = (id: string): string => id.replace(/-(\\w)/g, (_, c: string) => c.toUpperCase());\n\n/** Thrown by `requireModule()` when a module is not registered. */\nexport class RuntimeModuleError extends Error {\n readonly module: string;\n constructor(id: string, who?: string) {\n super(missingMessage(id, who));\n this.name = 'RuntimeModuleError';\n this.module = id;\n }\n}\n\n/** Register modules (each once; re-registering the same id keeps the first). Returns the registry. */\nexport function register(...mods: RuntimeModule[]): RuntimeRegistry {\n const r = registry();\n for (const m of mods) {\n if (!m || typeof m.id !== 'string') throw new TypeError('[motionary] use(): not a runtime module — pass the object exported by motionary/runtime/<module>');\n if (r.modules.has(m.id)) continue;\n for (const dep of m.requires || []) if (!r.modules.has(dep)) throw new RuntimeModuleError(dep, `motionary/runtime/${m.id}`);\n r.modules.set(m.id, m as RuntimeModule);\n m.setup?.(r);\n }\n return r;\n}\n\n/** Is a module registered? */\nexport const hasModule = (id: string): boolean => registry().modules.has(id);\n\n/** The API of a registered module, or a `RuntimeModuleError` with install / import / CDN instructions. */\nexport function requireModule<A = unknown>(id: string, who?: string): A {\n const m = registry().modules.get(id);\n if (!m) throw new RuntimeModuleError(id, who);\n return m.api as A;\n}\n\n/** Ids of the registered modules. */\nexport const registeredModules = (): string[] => Array.from(registry().modules.keys());\n","/**\n * The shared ticker: one requestAnimationFrame loop per page (or worker) for\n * every runtime animation, with lag smoothing and a frame budget readout.\n * Falls back to a 16 ms timer where rAF is missing (Node, some workers).\n * Nothing runs until the first listener is added (SSR-safe).\n */\nimport { registry } from './registry';\n\nexport type TickFn = (time: number, delta: number) => void;\n\nexport interface Ticker {\n /** Add a listener; returns a remover. */\n add(fn: TickFn): () => void;\n remove(fn: TickFn): void;\n /** ms since the ticker started (frozen while sleeping). */\n readonly time: number;\n /** Smoothed frames per second. */\n readonly fps: number;\n /** Listener count (0 = asleep). */\n readonly size: number;\n /** Cap a single frame's delta (default 100 ms) so a background tab does not jump animations. */\n lagSmoothing(maxDelta: number): void;\n /** Global time scale (1 = normal, 0.5 = half speed, 0 = frozen). */\n timeScale: number;\n /** Advance by `ms` synchronously (tests, offline rendering, worker loops). */\n step(ms: number): void;\n}\n\nfunction createTicker(): Ticker {\n const fns = new Set<TickFn>();\n let time = 0, last = -1, fps = 60, maxDelta = 100, handle: unknown = null;\n const g = globalThis as any;\n const now = (): number => (g.performance?.now ? g.performance.now() : Date.now());\n const raf = (cb: (t: number) => void): unknown => (typeof g.requestAnimationFrame === 'function' ? g.requestAnimationFrame(cb) : setTimeout(() => cb(now()), 16));\n const caf = (h: unknown): void => (typeof g.cancelAnimationFrame === 'function' ? g.cancelAnimationFrame(h) : clearTimeout(h as any));\n const run = (dt: number, cap = true): void => {\n const d = (cap ? Math.min(dt, maxDelta) : dt) * t.timeScale;\n time += d;\n for (const fn of Array.from(fns)) fn(time, d);\n };\n const frame = (ts: number): void => {\n handle = null;\n if (!fns.size) return;\n const n = typeof ts === 'number' && ts > 0 ? ts : now();\n const dt = last < 0 ? 0 : n - last;\n last = n;\n if (dt > 0) fps = fps * 0.9 + (1000 / dt) * 0.1;\n run(dt);\n if (fns.size) handle = raf(frame);\n };\n const wake = (): void => {\n if (handle === null && fns.size) {\n last = -1;\n handle = raf(frame);\n }\n };\n const t: Ticker = {\n add(fn) {\n fns.add(fn);\n wake();\n return () => t.remove(fn);\n },\n remove(fn) {\n fns.delete(fn);\n if (!fns.size && handle !== null) {\n caf(handle);\n handle = null;\n }\n },\n get time() { return time; },\n get fps() { return Math.round(fps); },\n get size() { return fns.size; },\n lagSmoothing(ms) { maxDelta = ms > 0 ? ms : Infinity; },\n timeScale: 1,\n step(ms) { run(ms, false); },\n };\n return t;\n}\n\n/** The page-wide ticker (shared across every copy of the runtime). */\nexport function getTicker(): Ticker {\n const s = registry().slots;\n return (s.ticker ||= createTicker()) as Ticker;\n}\n","/** Easing functions (t ∈ [0, 1] → progress). Original implementations of the standard Penner-style curves. */\nexport type Ease = (t: number) => number;\n\nconst out = (f: Ease): Ease => (t) => 1 - f(1 - t);\nconst inOut = (f: Ease): Ease => (t) => (t < 0.5 ? f(t * 2) / 2 : 1 - f((1 - t) * 2) / 2);\nconst pow = (p: number): Ease => (t) => Math.pow(t, p);\nconst sine: Ease = (t) => 1 - Math.cos((t * Math.PI) / 2);\nconst expo: Ease = (t) => (t === 0 ? 0 : Math.pow(2, 10 * t - 10));\nconst circ: Ease = (t) => 1 - Math.sqrt(1 - t * t);\nconst back = (s = 1.70158): Ease => (t) => t * t * ((s + 1) * t - s);\nconst elastic: Ease = (t) => (t === 0 || t === 1 ? t : -Math.pow(2, 10 * t - 10) * Math.sin((t * 10 - 10.75) * ((2 * Math.PI) / 3)));\nconst bounceOut: Ease = (t) => {\n const n = 7.5625, d = 2.75;\n if (t < 1 / d) return n * t * t;\n if (t < 2 / d) return n * (t -= 1.5 / d) * t + 0.75;\n if (t < 2.5 / d) return n * (t -= 2.25 / d) * t + 0.9375;\n return n * (t -= 2.625 / d) * t + 0.984375;\n};\n\n/** cubic-bezier(x1, y1, x2, y2), solved with Newton steps + bisection fallback. */\nexport function cubicBezier(x1: number, y1: number, x2: number, y2: number): Ease {\n const a = (p1: number, p2: number) => 1 - 3 * p2 + 3 * p1;\n const b = (p1: number, p2: number) => 3 * p2 - 6 * p1;\n const c = (p1: number) => 3 * p1;\n const at = (t: number, p1: number, p2: number) => ((a(p1, p2) * t + b(p1, p2)) * t + c(p1)) * t;\n const slope = (t: number, p1: number, p2: number) => 3 * a(p1, p2) * t * t + 2 * b(p1, p2) * t + c(p1);\n return (x) => {\n if (x <= 0 || x >= 1) return x <= 0 ? 0 : 1;\n let t = x;\n for (let i = 0; i < 6; i++) {\n const s = slope(t, x1, x2);\n if (Math.abs(s) < 1e-6) break;\n t -= (at(t, x1, x2) - x) / s;\n }\n if (t < 0 || t > 1 || Math.abs(at(t, x1, x2) - x) > 1e-4) {\n let lo = 0, hi = 1;\n t = x;\n for (let i = 0; i < 30; i++) {\n const v = at(t, x1, x2);\n if (Math.abs(v - x) < 1e-6) break;\n if (v < x) lo = t; else hi = t;\n t = (lo + hi) / 2;\n }\n }\n return at(t, y1, y2);\n };\n}\n\n/** steps(n, 'end' | 'start'). */\nexport const steps = (n: number, pos: 'start' | 'end' = 'end'): Ease => (t) => {\n const k = pos === 'start' ? Math.ceil(t * n) : Math.floor(t * n);\n return Math.min(1, Math.max(0, k / n));\n};\n\n/** Named eases: linear, quad/cubic/quart/quint, sine, expo, circ, back, elastic, bounce — each `.in`, `.out`, `.inOut` via 'name-in' | 'name-out' | 'name-in-out'. */\nconst BASE: Record<string, Ease> = { quad: pow(2), cubic: pow(3), quart: pow(4), quint: pow(5), sine, expo, circ, back: back(), elastic, bounce: out(bounceOut) };\nexport const EASES: Record<string, Ease> = { linear: (t) => t, ease: cubicBezier(0.25, 0.1, 0.25, 1), 'ease-in': cubicBezier(0.42, 0, 1, 1), 'ease-out': cubicBezier(0, 0, 0.58, 1), 'ease-in-out': cubicBezier(0.42, 0, 0.58, 1), smooth: cubicBezier(0.22, 1, 0.36, 1) };\nfor (const [k, f] of Object.entries(BASE)) {\n EASES[`${k}-in`] = f;\n EASES[`${k}-out`] = out(f);\n EASES[`${k}-in-out`] = inOut(f);\n}\n\n/** Resolve an ease: a function, a name ('cubic-out', 'ease-in-out', 'linear'), 'cubic-bezier(a,b,c,d)' or 'steps(n[, start|end])'. Unknown names throw. */\nexport function parseEase(e?: string | Ease): Ease {\n if (typeof e === 'function') return e;\n if (!e) return EASES['cubic-out'];\n const s = e.trim();\n if (EASES[s]) return EASES[s];\n let m = /^cubic-bezier\\(\\s*([-\\d.]+)\\s*,\\s*([-\\d.]+)\\s*,\\s*([-\\d.]+)\\s*,\\s*([-\\d.]+)\\s*\\)$/.exec(s);\n if (m) return cubicBezier(+m[1], +m[2], +m[3], +m[4]);\n m = /^steps\\(\\s*(\\d+)\\s*(?:,\\s*(jump-)?(start|end)\\s*)?\\)$/.exec(s);\n if (m) return steps(+m[1], (m[3] as 'start' | 'end') || 'end');\n if (s === 'step-start') return steps(1, 'start');\n if (s === 'step-end') return steps(1, 'end');\n throw new Error(`[motionary] unknown ease \"${s}\" — use a name from EASES, cubic-bezier(…) or steps(…)`);\n}\n","/**\n * Tween + timeline engine (original implementation). Times are in\n * milliseconds. Targets are plain objects (numeric props) or elements\n * (CSS: numbers with units, colours, `opacity`, custom properties, and the\n * transform shorthands `x y rotate scale scaleX scaleY skewX skewY`,\n * composed in that order). Driven by the shared ticker; a tween placed in a\n * timeline is driven by the timeline instead.\n */\nimport { getTicker } from './ticker';\nimport { parseEase, type Ease } from './ease';\n\nexport type Target = object | Element;\nexport type Props = Record<string, number | string>;\n\nexport interface PlayOptions {\n /** Delay before the first iteration, ms. */\n delay?: number;\n /** Extra iterations (-1 = forever). */\n repeat?: number;\n /** Alternate direction on every other iteration. */\n yoyo?: boolean;\n /** Start paused (`play()` to start). */\n paused?: boolean;\n onUpdate?: (progress: number) => void;\n onComplete?: () => void;\n}\n\nexport interface TweenOptions extends PlayOptions {\n to?: Props;\n from?: Props;\n /** ms (default 600). */\n duration?: number;\n ease?: string | Ease;\n /** Delay added per target index (ms) when several targets are given. */\n stagger?: number;\n}\n\nconst TRANSFORM = ['x', 'y', 'rotate', 'scale', 'scaleX', 'scaleY', 'skewX', 'skewY'];\nconst DEFAULT_UNIT: Record<string, string> = { x: 'px', y: 'px', rotate: 'deg', skewX: 'deg', skewY: 'deg', scale: '', scaleX: '', scaleY: '' };\ntype TState = Record<string, { v: number; u: string }>;\nconst tstate = new WeakMap<Element, TState>();\n\nconst isEl = (t: unknown): t is HTMLElement => typeof Element !== 'undefined' && t instanceof Element;\n\ninterface Num { kind: 'num'; v: number; u: string }\ninterface Col { kind: 'col'; c: number[] }\ntype Val = Num | Col;\n\n/** Parse '12px', '-3.5', '50%', '#0af', 'rgb(1 2 3 / .5)', 'rgba(…)'. */\nexport function parseValue(v: number | string): Val {\n if (typeof v === 'number') return { kind: 'num', v, u: '' };\n const s = v.trim();\n let m = /^#([0-9a-f]{3,8})$/i.exec(s);\n if (m) {\n let h = m[1];\n if (h.length <= 4) h = h.split('').map((c) => c + c).join('');\n const n = (i: number) => parseInt(h.slice(i, i + 2), 16);\n return { kind: 'col', c: [n(0), n(2), n(4), h.length === 8 ? n(6) / 255 : 1] };\n }\n m = /^rgba?\\(([^)]+)\\)$/i.exec(s);\n if (m) {\n const p = m[1].split(/[\\s,/]+/).filter(Boolean).map((x) => (x.endsWith('%') ? (parseFloat(x) / 100) * 255 : parseFloat(x)));\n return { kind: 'col', c: [p[0], p[1], p[2], p[3] === undefined ? 1 : p[3] > 1 ? p[3] / 255 : p[3]] };\n }\n if (s === 'transparent') return { kind: 'col', c: [0, 0, 0, 0] };\n m = /^(-?[\\d.]+(?:e-?\\d+)?)([a-z%]*)$/i.exec(s);\n if (m) return { kind: 'num', v: parseFloat(m[1]), u: m[2] };\n throw new Error(`[motionary] cannot tween value \"${s}\"`);\n}\n\nconst lerpVal = (a: Val, b: Val, p: number): string | number => {\n if (a.kind === 'col' || b.kind === 'col') {\n const ca = a.kind === 'col' ? a.c : [0, 0, 0, 0], cb = b.kind === 'col' ? b.c : [0, 0, 0, 0];\n const c = ca.map((x, i) => x + (cb[i] - x) * p);\n return `rgba(${Math.round(c[0])}, ${Math.round(c[1])}, ${Math.round(c[2])}, ${+c[3].toFixed(3)})`;\n }\n const v = a.v + (b.v - a.v) * p;\n const u = b.u || a.u;\n return u ? `${+v.toFixed(4)}${u}` : +v.toFixed(6);\n};\n\nconst kebab = (k: string) => (k.startsWith('--') ? k : k.replace(/[A-Z]/g, (c) => '-' + c.toLowerCase()));\n\nfunction readProp(t: Target, k: string): number | string {\n if (!isEl(t)) return (t as any)[k] ?? 0;\n if (TRANSFORM.includes(k)) {\n const s = tstate.get(t)?.[k];\n return s ? s.v + s.u : k.startsWith('scale') ? 1 : 0;\n }\n const inline = t.style.getPropertyValue(kebab(k));\n if (inline) return inline;\n const cs = typeof getComputedStyle === 'function' ? getComputedStyle(t).getPropertyValue(kebab(k)) : '';\n return cs || (k === 'opacity' ? 1 : 0);\n}\n\nfunction writeTransform(el: HTMLElement): void {\n const s = tstate.get(el)!;\n const g = (k: string, d: number) => (s[k] ? s[k].v : d);\n const u = (k: string) => (s[k]?.u ?? DEFAULT_UNIT[k]);\n const parts: string[] = [];\n if (s.x || s.y) parts.push(`translate(${g('x', 0)}${u('x') || 'px'}, ${g('y', 0)}${u('y') || 'px'})`);\n if (s.rotate) parts.push(`rotate(${g('rotate', 0)}${u('rotate') || 'deg'})`);\n if (s.scale) parts.push(`scale(${g('scale', 1)})`);\n if (s.scaleX || s.scaleY) parts.push(`scale(${g('scaleX', 1)}, ${g('scaleY', 1)})`);\n if (s.skewX) parts.push(`skewX(${g('skewX', 0)}${u('skewX') || 'deg'})`);\n if (s.skewY) parts.push(`skewY(${g('skewY', 0)}${u('skewY') || 'deg'})`);\n el.style.transform = parts.join(' ');\n}\n\nfunction writeProp(t: Target, k: string, v: string | number): void {\n if (!isEl(t)) {\n (t as any)[k] = typeof v === 'string' && typeof (t as any)[k] === 'number' ? parseFloat(v) : v;\n return;\n }\n if (TRANSFORM.includes(k)) {\n const p = parseValue(v) as Num;\n const s = tstate.get(t) || {};\n s[k] = { v: p.v, u: p.u };\n tstate.set(t, s);\n return;\n }\n t.style.setProperty(kebab(k), typeof v === 'number' && !['opacity', 'zIndex', 'z-index'].includes(k) && !k.startsWith('--') ? v + 'px' : String(v));\n}\n\n/** Common playback: delay, repeat, yoyo, direction, ticker attachment, promise. */\nexport abstract class Playable {\n delay: number;\n repeat: number;\n yoyo: boolean;\n /** Playback rate multiplier. */\n timeScale = 1;\n onUpdate?: (progress: number) => void;\n onComplete?: () => void;\n protected _t = 0;\n private _dir = 1;\n private _off: (() => void) | null = null;\n private _done = false;\n private _resolve!: () => void;\n /** Resolves on completion (forward end, or start when reversed). */\n finished: Promise<void>;\n /** Set when owned by a timeline (then the ticker never drives it). */\n parent: Timeline | null = null;\n\n constructor(o: PlayOptions) {\n this.delay = o.delay || 0;\n this.repeat = o.repeat || 0;\n this.yoyo = !!o.yoyo;\n this.onUpdate = o.onUpdate;\n this.onComplete = o.onComplete;\n this.finished = new Promise((r) => (this._resolve = r));\n }\n /** One iteration, ms. */\n abstract get duration(): number;\n /** Render at `ms` into one iteration. */\n protected abstract renderLocal(ms: number, iterationEnded: boolean): void;\n\n get totalDuration(): number {\n return this.repeat < 0 ? Infinity : this.delay + this.duration * (this.repeat + 1);\n }\n get time(): number {\n return this._t;\n }\n get progress(): number {\n const td = this.totalDuration;\n return td === Infinity ? ((this._t - this.delay) % this.duration) / this.duration : td ? this._t / td : 1;\n }\n set progress(p: number) {\n this.seek(p * (this.totalDuration === Infinity ? this.delay + this.duration : this.totalDuration));\n }\n get isActive(): boolean {\n return !!this._off;\n }\n get reversed(): boolean {\n return this._dir < 0;\n }\n\n /** Jump to `ms` (total time, including the delay) and render. */\n seek(ms: number): this {\n const td = this.totalDuration;\n this._t = Math.max(0, Math.min(ms, td));\n const t = this._t - this.delay;\n const d = this.duration || 0;\n if (t < 0) this.renderLocal(0, false);\n else if (!d) this.renderLocal(0, true);\n else {\n let it = d === Infinity ? 0 : Math.floor(t / d);\n let local = d === Infinity ? t : t - it * d;\n if (t >= td - this.delay && td !== Infinity) {\n it = this.repeat;\n local = d;\n }\n const back = this.yoyo && it % 2 === 1;\n this.renderLocal(back ? d - local : local, local === d);\n }\n this.onUpdate?.(this.progress);\n return this;\n }\n\n play(): this {\n this._dir = 1;\n if (this._t >= this.totalDuration) this._t = 0;\n return this.attach();\n }\n pause(): this {\n this._off?.();\n this._off = null;\n return this;\n }\n /** Play backwards from the current time. */\n reverse(): this {\n this._dir = -1;\n if (this._t <= 0) this._t = this.totalDuration === Infinity ? this.delay + this.duration : this.totalDuration;\n return this.attach();\n }\n restart(): this {\n this._done = false;\n this.seek(0);\n return this.play();\n }\n /** Stop and detach for good. */\n kill(): void {\n this.pause();\n this.parent?.remove(this);\n }\n /** Promise-like: `await tween(...)`. */\n then<R>(ok?: (v: void) => R, err?: (e: unknown) => R): Promise<R> {\n return this.finished.then(ok, err);\n }\n\n private attach(): this {\n if (this.parent || this._off) return this;\n this._done = false;\n this._off = getTicker().add((_, dt) => this.advance(dt));\n return this;\n }\n private advance(dt: number): void {\n const td = this.totalDuration;\n this.seek(this._t + dt * this._dir * this.timeScale);\n if ((this._dir > 0 && this._t >= td) || (this._dir < 0 && this._t <= 0)) this.complete();\n }\n protected complete(): void {\n this.pause();\n if (this._done) return;\n this._done = true;\n this.onComplete?.();\n this._resolve();\n }\n}\n\ninterface Track { k: string; from?: Val; to: Val; fromRaw?: number | string; toRaw: number | string }\n\n/** A tween of one target. */\nexport class Tween extends Playable {\n readonly target: Target;\n private _dur: number;\n private ease: Ease;\n private tracks: Track[] | null = null;\n private toProps: Props;\n private fromProps: Props;\n constructor(target: Target, o: TweenOptions) {\n super(o);\n this.target = target;\n this._dur = o.duration ?? 600;\n this.ease = parseEase(o.ease);\n this.toProps = o.to || {};\n this.fromProps = o.from || {};\n }\n get duration(): number {\n return this._dur;\n }\n /** Capture start values (first render). */\n private init(): Track[] {\n const keys = Array.from(new Set([...Object.keys(this.fromProps), ...Object.keys(this.toProps)]));\n return keys.map((k) => {\n const fromRaw = k in this.fromProps ? this.fromProps[k] : readProp(this.target, k);\n const toRaw = k in this.toProps ? this.toProps[k] : readProp(this.target, k);\n return { k, fromRaw, toRaw, from: parseValue(fromRaw), to: parseValue(toRaw) };\n });\n }\n protected renderLocal(ms: number, ended: boolean): void {\n this.tracks ||= this.init();\n const p = this._dur ? (ended ? this.ease(ms >= this._dur ? 1 : 0) : this.ease(ms / this._dur)) : 1;\n let tr = false;\n for (const t of this.tracks) {\n writeProp(this.target, t.k, lerpVal(t.from!, t.to, p));\n if (TRANSFORM.includes(t.k)) tr = true;\n }\n if (tr && isEl(this.target)) writeTransform(this.target);\n }\n}\n\ntype Child = { item: Playable | (() => void); start: number; fired?: boolean };\n\n/** Position: ms number, '<' (start of previous), '>' (end of previous, default), '+=200' / '-=200' (relative to the end), 'label', 'label+=100', '<+=100'. */\nexport type Position = number | string;\n\nexport interface TimelineOptions extends PlayOptions {\n /** Defaults merged into every `.to()`. */\n defaults?: Omit<TweenOptions, 'to' | 'from'>;\n}\n\n/** A sequence of tweens, nested timelines and callbacks. */\nexport class Timeline extends Playable {\n private children: Child[] = [];\n private labels: Record<string, number> = {};\n private prevStart = 0;\n private prevEnd = 0;\n private defaults: TimelineOptions['defaults'];\n private lastLocal = 0;\n constructor(o: TimelineOptions = {}) {\n super(o);\n this.defaults = o.defaults;\n }\n get duration(): number {\n let d = 0;\n for (const c of this.children) d = Math.max(d, c.start + (typeof c.item === 'function' ? 0 : c.item.totalDuration));\n return d;\n }\n private resolve(pos: Position | undefined): number {\n if (pos === undefined || pos === '>') return this.prevEnd;\n if (typeof pos === 'number') return Math.max(0, pos);\n const m = /^([<>]|[\\w-]+)?\\s*(?:([+-])=\\s*([\\d.]+))?$/.exec(pos.trim());\n if (!m) throw new Error(`[motionary] bad timeline position \"${pos}\"`);\n let base = this.prevEnd;\n if (m[1] === '<') base = this.prevStart;\n else if (m[1] && m[1] !== '>') {\n if (!(m[1] in this.labels)) throw new Error(`[motionary] unknown timeline label \"${m[1]}\"`);\n base = this.labels[m[1]];\n }\n const off = m[2] ? (m[2] === '+' ? 1 : -1) * parseFloat(m[3]) : 0;\n return Math.max(0, base + off);\n }\n /** Add a tween, timeline or callback at a position. */\n add(item: Playable | (() => void), position?: Position): this {\n const start = this.resolve(position);\n if (typeof item !== 'function') {\n item.pause();\n item.parent = this;\n }\n this.children.push({ item, start });\n this.prevStart = start;\n this.prevEnd = start + (typeof item === 'function' ? 0 : item.totalDuration);\n return this;\n }\n /** `tween(target, vars)` placed at `position` (stagger across several targets). */\n to(target: Target | Target[] | ArrayLike<Target>, vars: TweenOptions, position?: Position): this {\n const list = toList(target);\n const start = this.resolve(position);\n let end = start;\n list.forEach((t, i) => {\n const tw = new Tween(t, { ...this.defaults, ...vars, delay: (vars.delay || 0) + (vars.stagger || 0) * i, paused: true });\n tw.parent = this;\n this.children.push({ item: tw, start });\n end = Math.max(end, start + tw.totalDuration);\n });\n this.prevStart = start;\n this.prevEnd = end;\n return this;\n }\n call(fn: () => void, position?: Position): this {\n return this.add(fn, position);\n }\n label(name: string, position?: Position): this {\n this.labels[name] = this.resolve(position);\n return this;\n }\n /** Time of a label, ms. */\n labelTime(name: string): number | undefined {\n return this.labels[name];\n }\n remove(item: Playable): void {\n this.children = this.children.filter((c) => c.item !== item);\n }\n /** Children in start order (callbacks excluded). */\n getChildren(): Playable[] {\n return this.children.filter((c) => typeof c.item !== 'function').map((c) => c.item as Playable);\n }\n protected renderLocal(ms: number): void {\n const forward = ms >= this.lastLocal;\n const list = [...this.children].sort((a, b) => (forward ? a.start - b.start : b.start - a.start));\n for (const c of list) {\n if (typeof c.item === 'function') {\n if (forward && !c.fired && ms >= c.start && this.lastLocal <= c.start) {\n c.fired = true;\n c.item();\n } else if (!forward && ms < c.start) c.fired = false;\n continue;\n }\n const local = ms - c.start;\n const p = c.item as Playable & { _started?: boolean };\n if (local < 0) {\n if (p._started) p.seek(0);\n continue;\n }\n p._started = true;\n p.seek(Math.min(local, p.totalDuration));\n }\n this.lastLocal = ms;\n }\n}\n\nfunction toList(t: Target | Target[] | ArrayLike<Target>): Target[] {\n if (Array.isArray(t)) return t;\n if (t && typeof (t as ArrayLike<Target>).length === 'number' && !isEl(t)) return Array.from(t as ArrayLike<Target>);\n return [t as Target];\n}\n\n/**\n * Tween one or more targets. Returns a `Tween` (or a `Timeline` holding one\n * tween per target when several are given) that starts on the next frame\n * unless `paused`. `await` it for completion.\n */\nexport function tween(target: Target | Target[] | ArrayLike<Target>, o: TweenOptions): Playable {\n const list = toList(target);\n let p: Playable;\n if (list.length === 1) p = new Tween(list[0], o);\n else {\n const tl = new Timeline({ repeat: o.repeat, yoyo: o.yoyo, onUpdate: o.onUpdate, onComplete: o.onComplete, delay: o.delay });\n tl.to(list, { ...o, delay: 0, repeat: 0, yoyo: false, onUpdate: undefined, onComplete: undefined }, 0);\n p = tl;\n }\n if (!o.paused) p.play();\n return p;\n}\n\n/** A new timeline (plays on the next frame unless `paused`). */\nexport function timeline(o: TimelineOptions = {}): Timeline {\n const tl = new Timeline(o);\n if (!o.paused) tl.play();\n return tl;\n}\n","/**\n * `motionary/runtime` (10.1) — Motionary's own zero-dependency animation\n * runtime, the one prerequisite for runtime-powered components:\n *\n * - shared **ticker** (`getTicker()`): one rAF loop for everything;\n * - **tween + timeline** engine with easing (`tween()`, `timeline()`, `EASES`, `cubicBezier()`);\n * - **module registry** (`use()`, `requireModule()`, `hasModule()`) with a\n * clear `RuntimeModuleError` (install / import / CDN instructions) when a\n * component needs a module that was not registered.\n *\n * Every other module lives at its own subpath (`motionary/runtime/format-css`,\n * `motionary/runtime/format-motion`, …) so you only pay for what you import.\n * SSR-safe (no `window` access at import) and usable in Web Workers.\n *\n * ```ts\n * import { use, tween } from 'motionary/runtime';\n * use(); // registers the core (components can now find it)\n * tween('.box', { to: { x: 120, opacity: 1 }, duration: 500, ease: 'back-out' });\n * ```\n */\nimport { register, RUNTIME_VERSION, type RuntimeModule, type RuntimeRegistry } from './registry';\nimport { getTicker } from './ticker';\nimport { tween as rawTween, timeline, Tween, Timeline, type TweenOptions, type Playable } from './tween';\nimport { EASES, parseEase, cubicBezier, steps } from './ease';\n\nexport { registry, register, requireModule, hasModule, registeredModules, missingMessage, modulePath, moduleCdn, RuntimeModuleError, RUNTIME_VERSION, RUNTIME_CDN } from './registry';\nexport type { RuntimeModule, RuntimeRegistry } from './registry';\nexport { getTicker } from './ticker';\nexport type { Ticker, TickFn } from './ticker';\nexport { timeline, Tween, Timeline, Playable, parseValue } from './tween';\nexport type { TweenOptions, TimelineOptions, PlayOptions, Props, Target, Position } from './tween';\nexport { EASES, parseEase, cubicBezier, steps } from './ease';\nexport type { Ease } from './ease';\n\n/** The core module's API (what `requireModule('core')` returns). */\nexport interface CoreApi {\n version: string;\n getTicker: typeof getTicker;\n tween: (target: any, o: import('./tween').TweenOptions) => import('./tween').Playable;\n timeline: typeof timeline;\n Tween: typeof Tween;\n Timeline: typeof Timeline;\n EASES: typeof EASES;\n parseEase: typeof parseEase;\n cubicBezier: typeof cubicBezier;\n steps: typeof steps;\n}\n\n/** The core as a module object. */\nexport const core: RuntimeModule<CoreApi> = {\n id: 'core',\n version: RUNTIME_VERSION,\n api: { version: RUNTIME_VERSION, getTicker, tween, timeline, Tween, Timeline, EASES, parseEase, cubicBezier, steps },\n};\n\n/** Tween targets (objects, elements, lists or a CSS selector). See `TweenOptions`. */\nexport function tween(target: any, o: TweenOptions): Playable {\n return rawTween(resolveTargets(target), o);\n}\n\n/** Selector strings become element lists (only where `document` exists). */\nexport function resolveTargets(t: any): any {\n if (typeof t === 'string') {\n if (typeof document === 'undefined') throw new Error('[motionary] selector targets need a document — pass objects or elements instead');\n return Array.from(document.querySelectorAll(t));\n }\n return t;\n}\n\n/**\n * Register the core plus any modules (`use(formatCss, formatMotion)`).\n * Call once at start-up, before runtime-powered components mount.\n */\nexport function use(...mods: RuntimeModule[]): RuntimeRegistry {\n return register(core as RuntimeModule, ...mods);\n}\n","// CDN build: <script src=\".../dist/runtime.iife.js\"> → window.MotionaryRuntime, core registered.\nimport { use } from '../index';\nexport * from '../index';\nuse();\n"],"names":["RUNTIME_VERSION","RUNTIME_CDN","KEY","Symbol","for","registry","g","globalThis","version","modules","Map","slots","modulePath","id","moduleCdn","missingMessage","who","path","camel","replace","_","c","toUpperCase","RuntimeModuleError","Error","constructor","super","this","name","module","register","mods","r","m","TypeError","has","dep","requires","set","setup","createTicker","fns","Set","time","last","fps","maxDelta","handle","now","performance","Date","raf","cb","requestAnimationFrame","setTimeout","run","dt","cap","d","Math","min","t","timeScale","fn","Array","from","frame","ts","size","n","add","remove","h","delete","cancelAnimationFrame","clearTimeout","round","lagSmoothing","ms","Infinity","step","getTicker","s","ticker","out","f","inOut","pow","p","cubicBezier","x1","y1","x2","y2","a","p1","p2","b","at","slope","x","i","abs","lo","hi","v","steps","pos","k","ceil","floor","max","BASE","quad","cubic","quart","quint","sine","cos","PI","expo","circ","sqrt","back","elastic","sin","bounce","EASES","linear","ease","smooth","Object","entries","parseEase","e","trim","exec","TRANSFORM","DEFAULT_UNIT","y","rotate","skewX","skewY","scale","scaleX","scaleY","tstate","WeakMap","isEl","Element","parseValue","kind","u","length","split","map","join","parseInt","slice","filter","Boolean","endsWith","parseFloat","undefined","lerpVal","ca","toFixed","kebab","startsWith","toLowerCase","readProp","includes","get","inline","style","getPropertyValue","getComputedStyle","writeProp","setProperty","String","Playable","o","_t","_dir","_off","_done","parent","delay","repeat","yoyo","onUpdate","onComplete","finished","Promise","_resolve","totalDuration","duration","progress","td","seek","isActive","reversed","renderLocal","it","local","play","attach","pause","reverse","restart","kill","then","ok","err","advance","complete","Tween","target","tracks","_dur","toProps","to","fromProps","init","keys","fromRaw","toRaw","ended","tr","el","parts","push","transform","writeTransform","Timeline","children","labels","prevStart","prevEnd","lastLocal","defaults","start","item","resolve","base","off","position","vars","list","toList","end","forEach","tw","stagger","paused","call","label","labelTime","getChildren","forward","sort","fired","_started","isArray","timeline","tl","core","api","tween","rawTween","resolveTargets","document","querySelectorAll","use"],"mappings":"0BAUO,MAAMA,EAAkB,SAGlBC,EAAc,kDAsBrBC,EAAMC,OAAOC,IAAI,8BAGPC,IACd,MAAMC,EAAIC,WACV,OAAQD,EAAEJ,KAAFI,EAAEJ,GAAS,CAAEM,QAASR,EAAiBS,QAAS,IAAIC,IAAOC,MAAO,CAAA,GAC5E,CAGO,MAAMC,EAAcC,GAA+B,SAAPA,EAAgB,oBAAsB,qBAAqBA,IAGjGC,EAAaD,GAAuBZ,GAAsB,SAAPY,EAAgB,kBAAoB,WAAWA,sBAG/FE,EAAeF,EAAYG,EAAM,gBAC/C,MAAMC,EAAOL,EAAWC,GAGxB,MAAO,eAAeG,cAAgBC,oFAFnB,SAAPJ,EAAgB,kDAAoD,qDAAqDK,EAAML,cAAeI,WAAcC,EAAML,sCAC3J,SAAPA,EAAgB,gBAAgBC,EAAU,sBAAuB,gBAAgBA,EAAU,mCAAkCA,EAAUD,yFACyFA,MAC9O,CAGO,MAAMK,EAASL,GAAuBA,EAAGM,QAAQ,SAAU,CAACC,EAAGC,IAAcA,EAAEC,eAGhF,MAAOC,UAA2BC,MAEtC,WAAAC,CAAYZ,EAAYG,GACtBU,MAAMX,EAAeF,EAAIG,IACzBW,KAAKC,KAAO,qBACZD,KAAKE,OAAShB,CAChB,EAII,SAAUiB,KAAYC,GAC1B,MAAMC,EAAI3B,IACV,IAAK,MAAM4B,KAAKF,EAAM,CACpB,IAAKE,GAAqB,iBAATA,EAAEpB,GAAiB,MAAM,IAAIqB,UAAU,oGACxD,IAAIF,EAAEvB,QAAQ0B,IAAIF,EAAEpB,IAApB,CACA,IAAK,MAAMuB,KAAOH,EAAEI,UAAY,GAAI,IAAKL,EAAEvB,QAAQ0B,IAAIC,GAAM,MAAM,IAAIb,EAAmBa,EAAK,qBAAqBH,EAAEpB,MACtHmB,EAAEvB,QAAQ6B,IAAIL,EAAEpB,GAAIoB,GACpBA,EAAEM,QAAQP,EAHe,CAI3B,CACA,OAAOA,CACT,CCrDA,SAASQ,IACP,MAAMC,EAAM,IAAIC,IAChB,IAAIC,EAAO,EAAGC,GAAO,EAAIC,EAAM,GAAIC,EAAW,IAAKC,EAAkB,KACrE,MAAMzC,EAAIC,WACJyC,EAAM,IAAe1C,EAAE2C,aAAaD,IAAM1C,EAAE2C,YAAYD,MAAQE,KAAKF,MACrEG,EAAOC,GAAyE,mBAA5B9C,EAAE+C,sBAAuC/C,EAAE+C,sBAAsBD,GAAME,WAAW,IAAMF,EAAGJ,KAAQ,IAEvJO,EAAM,CAACC,EAAYC,GAAM,KAC7B,MAAMC,GAAKD,EAAME,KAAKC,IAAIJ,EAAIV,GAAYU,GAAMK,EAAEC,UAClDnB,GAAQe,EACR,IAAK,MAAMK,KAAMC,MAAMC,KAAKxB,GAAMsB,EAAGpB,EAAMe,IAEvCQ,EAASC,IAEb,GADApB,EAAS,MACJN,EAAI2B,KAAM,OACf,MAAMC,EAAkB,iBAAPF,GAAmBA,EAAK,EAAIA,EAAKnB,IAC5CQ,EAAKZ,EAAO,EAAI,EAAIyB,EAAIzB,EAC9BA,EAAOyB,EACHb,EAAK,IAAGX,EAAY,GAANA,EAAa,IAAOW,EAAM,IAC5CD,EAAIC,GACAf,EAAI2B,OAAMrB,EAASI,EAAIe,KAQvBL,EAAY,CAChBS,IAAIP,IACFtB,EAAI6B,IAAIP,GAPK,OAAXhB,GAAmBN,EAAI2B,OACzBxB,GAAO,EACPG,EAASI,EAAIe,IAON,IAAML,EAAEU,OAAOR,IAExB,MAAAQ,CAAOR,GA5BG,IAACS,EA6BT/B,EAAIgC,OAAOV,GACNtB,EAAI2B,MAAmB,OAAXrB,IA9BRyB,EA+BHzB,EA/B2D,mBAA3BzC,EAAEoE,qBAAsCpE,EAAEoE,qBAAqBF,GAAKG,aAAaH,GAgCrHzB,EAAS,KAEb,EACA,QAAIJ,GAAS,OAAOA,CAAM,EAC1B,OAAIE,GAAQ,OAAOc,KAAKiB,MAAM/B,EAAM,EACpC,QAAIuB,GAAS,OAAO3B,EAAI2B,IAAM,EAC9B,YAAAS,CAAaC,GAAMhC,EAAWgC,EAAK,EAAIA,EAAKC,GAAU,EACtDjB,UAAW,EACX,IAAAkB,CAAKF,GAAMvB,EAAIuB,GAAI,EAAQ,GAE7B,OAAOjB,CACT,UAGgBoB,IACd,MAAMC,EAAI7E,IAAWM,MACrB,OAAQuE,EAAEC,SAAFD,EAAEC,OAAW3C,IACvB,CChFA,MAAM4C,EAAOC,GAAmBxB,GAAM,EAAIwB,EAAE,EAAIxB,GAC1CyB,EAASD,GAAmBxB,GAAOA,EAAI,GAAMwB,EAAM,EAAJxB,GAAS,EAAI,EAAIwB,EAAY,GAAT,EAAIxB,IAAU,EACjF0B,EAAOC,GAAqB3B,GAAMF,KAAK4B,IAAI1B,EAAG2B,GAe9C,SAAUC,EAAYC,EAAYC,EAAYC,EAAYC,GAC9D,MAAMC,EAAI,CAACC,EAAYC,IAAe,EAAI,EAAIA,EAAK,EAAID,EACjDE,EAAI,CAACF,EAAYC,IAAe,EAAIA,EAAK,EAAID,EAC7C1E,EAAK0E,GAAe,EAAIA,EACxBG,EAAK,CAACrC,EAAWkC,EAAYC,MAAiBF,EAAEC,EAAIC,GAAMnC,EAAIoC,EAAEF,EAAIC,IAAOnC,EAAIxC,EAAE0E,IAAOlC,EACxFsC,EAAQ,CAACtC,EAAWkC,EAAYC,IAAe,EAAIF,EAAEC,EAAIC,GAAMnC,EAAIA,EAAI,EAAIoC,EAAEF,EAAIC,GAAMnC,EAAIxC,EAAE0E,GACnG,OAAQK,IACN,GAAIA,GAAK,GAAKA,GAAK,EAAG,OAAOA,GAAK,EAAI,EAAI,EAC1C,IAAIvC,EAAIuC,EACR,IAAK,IAAIC,EAAI,EAAGA,EAAI,EAAGA,IAAK,CAC1B,MAAMnB,EAAIiB,EAAMtC,EAAG6B,EAAIE,GACvB,GAAIjC,KAAK2C,IAAIpB,GAAK,KAAM,MACxBrB,IAAMqC,EAAGrC,EAAG6B,EAAIE,GAAMQ,GAAKlB,CAC7B,CACA,GAAIrB,EAAI,GAAKA,EAAI,GAAKF,KAAK2C,IAAIJ,EAAGrC,EAAG6B,EAAIE,GAAMQ,GAAK,KAAM,CACxD,IAAIG,EAAK,EAAGC,EAAK,EACjB3C,EAAIuC,EACJ,IAAK,IAAIC,EAAI,EAAGA,EAAI,GAAIA,IAAK,CAC3B,MAAMI,EAAIP,EAAGrC,EAAG6B,EAAIE,GACpB,GAAIjC,KAAK2C,IAAIG,EAAIL,GAAK,KAAM,MACxBK,EAAIL,EAAGG,EAAK1C,EAAQ2C,EAAK3C,EAC7BA,GAAK0C,EAAKC,GAAM,CAClB,CACF,CACA,OAAON,EAAGrC,EAAG8B,EAAIE,GAErB,CAGO,MAAMa,EAAQ,CAACrC,EAAWsC,EAAuB,QAAiB9C,IACvE,MAAM+C,EAAY,UAARD,EAAkBhD,KAAKkD,KAAKhD,EAAIQ,GAAKV,KAAKmD,MAAMjD,EAAIQ,GAC9D,OAAOV,KAAKC,IAAI,EAAGD,KAAKoD,IAAI,EAAGH,EAAIvC,KAI/B2C,EAA6B,CAAEC,KAAM1B,EAAI,GAAI2B,MAAO3B,EAAI,GAAI4B,MAAO5B,EAAI,GAAI6B,MAAO7B,EAAI,GAAI8B,KAjD5ExD,GAAM,EAAIF,KAAK2D,IAAKzD,EAAIF,KAAK4D,GAAM,GAiD+CC,KAhDlF3D,GAAa,IAANA,EAAU,EAAIF,KAAK4B,IAAI,EAAG,GAAK1B,EAAI,IAgD8C4D,KA/CxF5D,GAAM,EAAIF,KAAK+D,KAAK,EAAI7D,EAAIA,GA+CkE8D,KA9CrG,EAACzC,EAAI,UAAmBrB,GAAMA,EAAIA,IAAMqB,EAAI,GAAKrB,EAAIqB,GA8CsDyC,GAAQC,QA7CzG/D,GAAa,IAANA,GAAiB,IAANA,EAAUA,GAAKF,KAAK4B,IAAI,EAAG,GAAK1B,EAAI,IAAMF,KAAKkE,KAAS,GAAJhE,EAAS,QAAW,EAAIF,KAAK4D,GAAM,IA6CSO,OAAQ1C,EA5CxHvB,IACvB,MAAMQ,EAAI,OAAQX,EAAI,KACtB,OAAIG,EAAI,EAAIH,EAAUW,EAAIR,EAAIA,EAC1BA,EAAI,EAAIH,EAAUW,GAAKR,GAAK,IAAMH,GAAKG,EAAI,IAC3CA,EAAI,IAAMH,EAAUW,GAAKR,GAAK,KAAOH,GAAKG,EAAI,MAC3CQ,GAAKR,GAAK,MAAQH,GAAKG,EAAI,WAwCvBkE,EAA8B,CAAEC,OAASnE,GAAMA,EAAGoE,KAAMxC,EAAY,IAAM,GAAK,IAAM,GAAI,UAAWA,EAAY,IAAM,EAAG,EAAG,GAAI,WAAYA,EAAY,EAAG,EAAG,IAAM,GAAI,cAAeA,EAAY,IAAM,EAAG,IAAM,GAAIyC,OAAQzC,EAAY,IAAM,EAAG,IAAM,IACtQ,IAAK,MAAOmB,EAAGvB,KAAM8C,OAAOC,QAAQpB,GAClCe,EAAM,GAAGnB,QAAUvB,EACnB0C,EAAM,GAAGnB,SAAWxB,EAAIC,GACxB0C,EAAM,GAAGnB,YAActB,EAAMD,GAIzB,SAAUgD,EAAUC,GACxB,GAAiB,mBAANA,EAAkB,OAAOA,EACpC,IAAKA,EAAG,OAAOP,EAAM,aACrB,MAAM7C,EAAIoD,EAAEC,OACZ,GAAIR,EAAM7C,GAAI,OAAO6C,EAAM7C,GAC3B,IAAIjD,EAAI,oFAAoFuG,KAAKtD,GACjG,GAAIjD,EAAG,OAAOwD,GAAaxD,EAAE,IAAKA,EAAE,IAAKA,EAAE,IAAKA,EAAE,IAElD,GADAA,EAAI,wDAAwDuG,KAAKtD,GAC7DjD,EAAG,OAAOyE,GAAOzE,EAAE,GAAKA,EAAE,IAA0B,OACxD,GAAU,eAANiD,EAAoB,OAAOwB,EAAM,EAAG,SACxC,GAAU,aAANxB,EAAkB,OAAOwB,EAAM,EAAG,OACtC,MAAM,IAAIlF,MAAM,6BAA6B0D,0DAC/C,CCvCA,MAAMuD,EAAY,CAAC,IAAK,IAAK,SAAU,QAAS,SAAU,SAAU,QAAS,SACvEC,EAAuC,CAAEtC,EAAG,KAAMuC,EAAG,KAAMC,OAAQ,MAAOC,MAAO,MAAOC,MAAO,MAAOC,MAAO,GAAIC,OAAQ,GAAIC,OAAQ,IAErIC,EAAS,IAAIC,QAEbC,EAAQvF,GAAoD,oBAAZwF,SAA2BxF,aAAawF,QAOxF,SAAUC,EAAW7C,GACzB,GAAiB,iBAANA,EAAgB,MAAO,CAAE8C,KAAM,MAAO9C,IAAG+C,EAAG,IACvD,MAAMtE,EAAIuB,EAAE8B,OACZ,IAAItG,EAAI,sBAAsBuG,KAAKtD,GACnC,GAAIjD,EAAG,CACL,IAAIuC,EAAIvC,EAAE,GACNuC,EAAEiF,QAAU,IAAGjF,EAAIA,EAAEkF,MAAM,IAAIC,IAAKtI,GAAMA,EAAIA,GAAGuI,KAAK,KAC1D,MAAMvF,EAAKgC,GAAcwD,SAASrF,EAAEsF,MAAMzD,EAAGA,EAAI,GAAI,IACrD,MAAO,CAAEkD,KAAM,MAAOlI,EAAG,CAACgD,EAAE,GAAIA,EAAE,GAAIA,EAAE,GAAiB,IAAbG,EAAEiF,OAAepF,EAAE,GAAK,IAAM,GAC5E,CAEA,GADApC,EAAI,sBAAsBuG,KAAKtD,GAC3BjD,EAAG,CACL,MAAMuD,EAAIvD,EAAE,GAAGyH,MAAM,WAAWK,OAAOC,SAASL,IAAKvD,GAAOA,EAAE6D,SAAS,KAAQC,WAAW9D,GAAK,IAAO,IAAM8D,WAAW9D,IACvH,MAAO,CAAEmD,KAAM,MAAOlI,EAAG,CAACmE,EAAE,GAAIA,EAAE,GAAIA,EAAE,QAAa2E,IAAT3E,EAAE,GAAmB,EAAIA,EAAE,GAAK,EAAIA,EAAE,GAAK,IAAMA,EAAE,IACjG,CACA,GAAU,gBAANN,EAAqB,MAAO,CAAEqE,KAAM,MAAOlI,EAAG,CAAC,EAAG,EAAG,EAAG,IAE5D,GADAY,EAAI,oCAAoCuG,KAAKtD,GACzCjD,EAAG,MAAO,CAAEsH,KAAM,MAAO9C,EAAGyD,WAAWjI,EAAE,IAAKuH,EAAGvH,EAAE,IACvD,MAAM,IAAIT,MAAM,mCAAmC0D,KACrD,CAEA,MAAMkF,EAAU,CAACtE,EAAQG,EAAQT,KAC/B,GAAe,QAAXM,EAAEyD,MAA6B,QAAXtD,EAAEsD,KAAgB,CACxC,MAAMc,EAAgB,QAAXvE,EAAEyD,KAAiBzD,EAAEzE,EAAI,CAAC,EAAG,EAAG,EAAG,GAAI+B,EAAgB,QAAX6C,EAAEsD,KAAiBtD,EAAE5E,EAAI,CAAC,EAAG,EAAG,EAAG,GACpFA,EAAIgJ,EAAGV,IAAI,CAACvD,EAAGC,IAAMD,GAAKhD,EAAGiD,GAAKD,GAAKZ,GAC7C,MAAO,QAAQ7B,KAAKiB,MAAMvD,EAAE,QAAQsC,KAAKiB,MAAMvD,EAAE,QAAQsC,KAAKiB,MAAMvD,EAAE,SAASA,EAAE,GAAGiJ,QAAQ,KAC9F,CACA,MAAM7D,EAAIX,EAAEW,GAAKR,EAAEQ,EAAIX,EAAEW,GAAKjB,EACxBgE,EAAIvD,EAAEuD,GAAK1D,EAAE0D,EACnB,OAAOA,EAAI,IAAI/C,EAAE6D,QAAQ,KAAKd,KAAO/C,EAAE6D,QAAQ,IAG3CC,EAAS3D,GAAeA,EAAE4D,WAAW,MAAQ5D,EAAIA,EAAEzF,QAAQ,SAAWE,GAAM,IAAMA,EAAEoJ,eAE1F,SAASC,EAAS7G,EAAW+C,GAC3B,IAAKwC,EAAKvF,GAAI,OAAQA,EAAU+C,IAAM,EACtC,GAAI6B,EAAUkC,SAAS/D,GAAI,CACzB,MAAM1B,EAAIgE,EAAO0B,IAAI/G,KAAK+C,GAC1B,OAAO1B,EAAIA,EAAEuB,EAAIvB,EAAEsE,EAAI5C,EAAE4D,WAAW,SAAW,EAAI,CACrD,CACA,MAAMK,EAAShH,EAAEiH,MAAMC,iBAAiBR,EAAM3D,IAC9C,GAAIiE,EAAQ,OAAOA,EAEnB,OADuC,mBAArBG,iBAAkCA,iBAAiBnH,GAAGkH,iBAAiBR,EAAM3D,IAAM,MACjF,YAANA,EAAkB,EAAI,EACtC,CAgBA,SAASqE,EAAUpH,EAAW+C,EAAWH,GACvC,GAAK2C,EAAKvF,GAAV,CAIA,GAAI4E,EAAUkC,SAAS/D,GAAI,CACzB,MAAMpB,EAAI8D,EAAW7C,GACfvB,EAAIgE,EAAO0B,IAAI/G,IAAM,CAAA,EAG3B,OAFAqB,EAAE0B,GAAK,CAAEH,EAAGjB,EAAEiB,EAAG+C,EAAGhE,EAAEgE,QACtBN,EAAO5G,IAAIuB,EAAGqB,EAEhB,CACArB,EAAEiH,MAAMI,YAAYX,EAAM3D,GAAiB,iBAANH,GAAmB,CAAC,UAAW,SAAU,WAAWkE,SAAS/D,IAAOA,EAAE4D,WAAW,MAAmBW,OAAO1E,GAAlBA,EAAI,KARlI,MAFG5C,EAAU+C,GAAkB,iBAANH,GAA2C,iBAAjB5C,EAAU+C,GAAkBsD,WAAWzD,GAAKA,CAWjG,OAGsB2E,EAkBpB,WAAA3J,CAAY4J,GAbZ1J,KAAAmC,UAAY,EAGFnC,KAAA2J,GAAK,EACP3J,KAAA4J,KAAO,EACP5J,KAAA6J,KAA4B,KAC5B7J,KAAA8J,OAAQ,EAKhB9J,KAAA+J,OAA0B,KAGxB/J,KAAKgK,MAAQN,EAAEM,OAAS,EACxBhK,KAAKiK,OAASP,EAAEO,QAAU,EAC1BjK,KAAKkK,OAASR,EAAEQ,KAChBlK,KAAKmK,SAAWT,EAAES,SAClBnK,KAAKoK,WAAaV,EAAEU,WACpBpK,KAAKqK,SAAW,IAAIC,QAASjK,GAAOL,KAAKuK,SAAWlK,EACtD,CAMA,iBAAImK,GACF,OAAOxK,KAAKiK,OAAS,EAAI7G,IAAWpD,KAAKgK,MAAQhK,KAAKyK,UAAYzK,KAAKiK,OAAS,EAClF,CACA,QAAIjJ,GACF,OAAOhB,KAAK2J,EACd,CACA,YAAIe,GACF,MAAMC,EAAK3K,KAAKwK,cAChB,OAAOG,IAAOvH,KAAapD,KAAK2J,GAAK3J,KAAKgK,OAAShK,KAAKyK,SAAYzK,KAAKyK,SAAWE,EAAK3K,KAAK2J,GAAKgB,EAAK,CAC1G,CACA,YAAID,CAAS7G,GACX7D,KAAK4K,KAAK/G,GAAK7D,KAAKwK,gBAAkBpH,IAAWpD,KAAKgK,MAAQhK,KAAKyK,SAAWzK,KAAKwK,eACrF,CACA,YAAIK,GACF,QAAS7K,KAAK6J,IAChB,CACA,YAAIiB,GACF,OAAO9K,KAAK4J,KAAO,CACrB,CAGA,IAAAgB,CAAKzH,GACH,MAAMwH,EAAK3K,KAAKwK,cAChBxK,KAAK2J,GAAK3H,KAAKoD,IAAI,EAAGpD,KAAKC,IAAIkB,EAAIwH,IACnC,MAAMzI,EAAIlC,KAAK2J,GAAK3J,KAAKgK,MACnBjI,EAAI/B,KAAKyK,UAAY,EAC3B,GAAIvI,EAAI,EAAGlC,KAAK+K,YAAY,GAAG,QAC1B,GAAKhJ,EACL,CACH,IAAIiJ,EAAKjJ,IAAMqB,IAAW,EAAIpB,KAAKmD,MAAMjD,EAAIH,GACzCkJ,EAAQlJ,IAAMqB,IAAWlB,EAAIA,EAAI8I,EAAKjJ,EACtCG,GAAKyI,EAAK3K,KAAKgK,OAASW,IAAOvH,MACjC4H,EAAKhL,KAAKiK,OACVgB,EAAQlJ,GAEV,MAAMiE,EAAOhG,KAAKkK,MAAQc,EAAK,GAAM,EACrChL,KAAK+K,YAAY/E,EAAOjE,EAAIkJ,EAAQA,EAAOA,IAAUlJ,EACvD,MAVa/B,KAAK+K,YAAY,GAAG,GAYjC,OADA/K,KAAKmK,WAAWnK,KAAK0K,UACd1K,IACT,CAEA,IAAAkL,GAGE,OAFAlL,KAAK4J,KAAO,EACR5J,KAAK2J,IAAM3J,KAAKwK,gBAAexK,KAAK2J,GAAK,GACtC3J,KAAKmL,QACd,CACA,KAAAC,GAGE,OAFApL,KAAK6J,SACL7J,KAAK6J,KAAO,KACL7J,IACT,CAEA,OAAAqL,GAGE,OAFArL,KAAK4J,MAAO,EACR5J,KAAK2J,IAAM,IAAG3J,KAAK2J,GAAK3J,KAAKwK,gBAAkBpH,IAAWpD,KAAKgK,MAAQhK,KAAKyK,SAAWzK,KAAKwK,eACzFxK,KAAKmL,QACd,CACA,OAAAG,GAGE,OAFAtL,KAAK8J,OAAQ,EACb9J,KAAK4K,KAAK,GACH5K,KAAKkL,MACd,CAEA,IAAAK,GACEvL,KAAKoL,QACLpL,KAAK+J,QAAQnH,OAAO5C,KACtB,CAEA,IAAAwL,CAAQC,EAAqBC,GAC3B,OAAO1L,KAAKqK,SAASmB,KAAKC,EAAIC,EAChC,CAEQ,MAAAP,GACN,OAAInL,KAAK+J,QAAU/J,KAAK6J,OACxB7J,KAAK8J,OAAQ,EACb9J,KAAK6J,KAAOvG,IAAYX,IAAI,CAAClD,EAAGoC,IAAO7B,KAAK2L,QAAQ9J,KAFf7B,IAIvC,CACQ,OAAA2L,CAAQ9J,GACd,MAAM8I,EAAK3K,KAAKwK,cAChBxK,KAAK4K,KAAK5K,KAAK2J,GAAK9H,EAAK7B,KAAK4J,KAAO5J,KAAKmC,YACrCnC,KAAK4J,KAAO,GAAK5J,KAAK2J,IAAMgB,GAAQ3K,KAAK4J,KAAO,GAAK5J,KAAK2J,IAAM,IAAI3J,KAAK4L,UAChF,CACU,QAAAA,GACR5L,KAAKoL,QACDpL,KAAK8J,QACT9J,KAAK8J,OAAQ,EACb9J,KAAKoK,eACLpK,KAAKuK,WACP,EAMI,MAAOsB,UAAcpC,EAOzB,WAAA3J,CAAYgM,EAAgBpC,GAC1B3J,MAAM2J,GAJA1J,KAAA+L,OAAyB,KAK/B/L,KAAK8L,OAASA,EACd9L,KAAKgM,KAAOtC,EAAEe,UAAY,IAC1BzK,KAAKsG,KAAOI,EAAUgD,EAAEpD,MACxBtG,KAAKiM,QAAUvC,EAAEwC,IAAM,CAAA,EACvBlM,KAAKmM,UAAYzC,EAAEpH,MAAQ,CAAA,CAC7B,CACA,YAAImI,GACF,OAAOzK,KAAKgM,IACd,CAEQ,IAAAI,GAEN,OADa/J,MAAMC,KAAK,IAAIvB,IAAI,IAAIyF,OAAO6F,KAAKrM,KAAKmM,cAAe3F,OAAO6F,KAAKrM,KAAKiM,YACzEjE,IAAK/C,IACf,MAAMqH,EAAUrH,KAAKjF,KAAKmM,UAAYnM,KAAKmM,UAAUlH,GAAK8D,EAAS/I,KAAK8L,OAAQ7G,GAC1EsH,EAAQtH,KAAKjF,KAAKiM,QAAUjM,KAAKiM,QAAQhH,GAAK8D,EAAS/I,KAAK8L,OAAQ7G,GAC1E,MAAO,CAAEA,IAAGqH,UAASC,QAAOjK,KAAMqF,EAAW2E,GAAUJ,GAAIvE,EAAW4E,KAE1E,CACU,WAAAxB,CAAY5H,EAAYqJ,GAChCxM,KAAK+L,SAAL/L,KAAK+L,OAAW/L,KAAKoM,QACrB,MAAMvI,EAAI7D,KAAKgM,KAAQQ,EAAQxM,KAAKsG,KAAKnD,GAAMnD,KAAKgM,KAAO,EAAI,GAAKhM,KAAKsG,KAAKnD,EAAKnD,KAAKgM,MAAS,EACjG,IAAIS,GAAK,EACT,IAAK,MAAMvK,KAAKlC,KAAK+L,OACnBzC,EAAUtJ,KAAK8L,OAAQ5J,EAAE+C,EAAGwD,EAAQvG,EAAEI,KAAOJ,EAAEgK,GAAIrI,IAC/CiD,EAAUkC,SAAS9G,EAAE+C,KAAIwH,GAAK,GAEhCA,GAAMhF,EAAKzH,KAAK8L,SAhMxB,SAAwBY,GACtB,MAAMnJ,EAAIgE,EAAO0B,IAAIyD,GACf/N,EAAI,CAACsG,EAAWlD,IAAewB,EAAE0B,GAAK1B,EAAE0B,GAAGH,EAAI/C,EAC/C8F,EAAK5C,GAAe1B,EAAE0B,IAAI4C,GAAKd,EAAa9B,GAC5C0H,EAAkB,IACpBpJ,EAAEkB,GAAKlB,EAAEyD,IAAG2F,EAAMC,KAAK,aAAajO,EAAE,IAAK,KAAKkJ,EAAE,MAAQ,SAASlJ,EAAE,IAAK,KAAKkJ,EAAE,MAAQ,SACzFtE,EAAE0D,QAAQ0F,EAAMC,KAAK,UAAUjO,EAAE,SAAU,KAAKkJ,EAAE,WAAa,UAC/DtE,EAAE6D,OAAOuF,EAAMC,KAAK,SAASjO,EAAE,QAAS,QACxC4E,EAAE8D,QAAU9D,EAAE+D,SAAQqF,EAAMC,KAAK,SAASjO,EAAE,SAAU,OAAOA,EAAE,SAAU,OACzE4E,EAAE2D,OAAOyF,EAAMC,KAAK,SAASjO,EAAE,QAAS,KAAKkJ,EAAE,UAAY,UAC3DtE,EAAE4D,OAAOwF,EAAMC,KAAK,SAASjO,EAAE,QAAS,KAAKkJ,EAAE,UAAY,UAC/D6E,EAAGvD,MAAM0D,UAAYF,EAAM1E,KAAK,IAClC,CAoLiC6E,CAAe9M,KAAK8L,OACnD,EAcI,MAAOiB,UAAiBtD,EAO5B,WAAA3J,CAAY4J,EAAqB,IAC/B3J,MAAM2J,GAPA1J,KAAAgN,SAAoB,GACpBhN,KAAAiN,OAAiC,CAAA,EACjCjN,KAAAkN,UAAY,EACZlN,KAAAmN,QAAU,EAEVnN,KAAAoN,UAAY,EAGlBpN,KAAKqN,SAAW3D,EAAE2D,QACpB,CACA,YAAI5C,GACF,IAAI1I,EAAI,EACR,IAAK,MAAMrC,KAAKM,KAAKgN,SAAUjL,EAAIC,KAAKoD,IAAIrD,EAAGrC,EAAE4N,OAA2B,mBAAX5N,EAAE6N,KAAsB,EAAI7N,EAAE6N,KAAK/C,gBACpG,OAAOzI,CACT,CACQ,OAAAyL,CAAQxI,GACd,QAAYwD,IAARxD,GAA6B,MAARA,EAAa,OAAOhF,KAAKmN,QAClD,GAAmB,iBAARnI,EAAkB,OAAOhD,KAAKoD,IAAI,EAAGJ,GAChD,MAAM1E,EAAI,6CAA6CuG,KAAK7B,EAAI4B,QAChE,IAAKtG,EAAG,MAAM,IAAIT,MAAM,sCAAsCmF,MAC9D,IAAIyI,EAAOzN,KAAKmN,QAChB,GAAa,MAAT7M,EAAE,GAAYmN,EAAOzN,KAAKkN,eACzB,GAAI5M,EAAE,IAAe,MAATA,EAAE,GAAY,CAC7B,KAAMA,EAAE,KAAMN,KAAKiN,QAAS,MAAM,IAAIpN,MAAM,uCAAuCS,EAAE,OACrFmN,EAAOzN,KAAKiN,OAAO3M,EAAE,GACvB,CACA,MAAMoN,EAAMpN,EAAE,IAAe,MAATA,EAAE,GAAa,GAAI,GAAMiI,WAAWjI,EAAE,IAAM,EAChE,OAAO0B,KAAKoD,IAAI,EAAGqI,EAAOC,EAC5B,CAEA,GAAA/K,CAAI4K,EAA+BI,GACjC,MAAML,EAAQtN,KAAKwN,QAAQG,GAQ3B,MAPoB,mBAATJ,IACTA,EAAKnC,QACLmC,EAAKxD,OAAS/J,MAEhBA,KAAKgN,SAASJ,KAAK,CAAEW,OAAMD,UAC3BtN,KAAKkN,UAAYI,EACjBtN,KAAKmN,QAAUG,GAAyB,mBAATC,EAAsB,EAAIA,EAAK/C,eACvDxK,IACT,CAEA,EAAAkM,CAAGJ,EAA+C8B,EAAoBD,GACpE,MAAME,EAAOC,EAAOhC,GACdwB,EAAQtN,KAAKwN,QAAQG,GAC3B,IAAII,EAAMT,EASV,OARAO,EAAKG,QAAQ,CAAC9L,EAAGwC,KACf,MAAMuJ,EAAK,IAAIpC,EAAM3J,EAAG,IAAKlC,KAAKqN,YAAaO,EAAM5D,OAAQ4D,EAAK5D,OAAS,IAAM4D,EAAKM,SAAW,GAAKxJ,EAAGyJ,QAAQ,IACjHF,EAAGlE,OAAS/J,KACZA,KAAKgN,SAASJ,KAAK,CAAEW,KAAMU,EAAIX,UAC/BS,EAAM/L,KAAKoD,IAAI2I,EAAKT,EAAQW,EAAGzD,iBAEjCxK,KAAKkN,UAAYI,EACjBtN,KAAKmN,QAAUY,EACR/N,IACT,CACA,IAAAoO,CAAKhM,EAAgBuL,GACnB,OAAO3N,KAAK2C,IAAIP,EAAIuL,EACtB,CACA,KAAAU,CAAMpO,EAAc0N,GAElB,OADA3N,KAAKiN,OAAOhN,GAAQD,KAAKwN,QAAQG,GAC1B3N,IACT,CAEA,SAAAsO,CAAUrO,GACR,OAAOD,KAAKiN,OAAOhN,EACrB,CACA,MAAA2C,CAAO2K,GACLvN,KAAKgN,SAAWhN,KAAKgN,SAAS5E,OAAQ1I,GAAMA,EAAE6N,OAASA,EACzD,CAEA,WAAAgB,GACE,OAAOvO,KAAKgN,SAAS5E,OAAQ1I,GAAwB,mBAAXA,EAAE6N,MAAqBvF,IAAKtI,GAAMA,EAAE6N,KAChF,CACU,WAAAxC,CAAY5H,GACpB,MAAMqL,EAAUrL,GAAMnD,KAAKoN,UACrBS,EAAO,IAAI7N,KAAKgN,UAAUyB,KAAK,CAACtK,EAAGG,IAAOkK,EAAUrK,EAAEmJ,MAAQhJ,EAAEgJ,MAAQhJ,EAAEgJ,MAAQnJ,EAAEmJ,OAC1F,IAAK,MAAM5N,KAAKmO,EAAM,CACpB,GAAsB,mBAAXnO,EAAE6N,KAAqB,CAC5BiB,IAAY9O,EAAEgP,OAASvL,GAAMzD,EAAE4N,OAAStN,KAAKoN,WAAa1N,EAAE4N,OAC9D5N,EAAEgP,OAAQ,EACVhP,EAAE6N,SACQiB,GAAWrL,EAAKzD,EAAE4N,QAAO5N,EAAEgP,OAAQ,GAC/C,QACF,CACA,MAAMzD,EAAQ9H,EAAKzD,EAAE4N,MACfzJ,EAAInE,EAAE6N,KACRtC,EAAQ,EACNpH,EAAE8K,UAAU9K,EAAE+G,KAAK,IAGzB/G,EAAE8K,UAAW,EACb9K,EAAE+G,KAAK5I,KAAKC,IAAIgJ,EAAOpH,EAAE2G,gBAC3B,CACAxK,KAAKoN,UAAYjK,CACnB,EAGF,SAAS2K,EAAO5L,GACd,OAAIG,MAAMuM,QAAQ1M,GAAWA,EACzBA,GAAgD,iBAAnCA,EAAwB4F,SAAwBL,EAAKvF,GAAWG,MAAMC,KAAKJ,GACrF,CAACA,EACV,CAqBM,SAAU2M,EAASnF,EAAqB,IAC5C,MAAMoF,EAAK,IAAI/B,EAASrD,GAExB,OADKA,EAAEyE,QAAQW,EAAG5D,OACX4D,CACT,CC7XO,MAAMC,EAA+B,CAC1C7P,GAAI,OACJL,QAASR,EACT2Q,IAAK,CAAEnQ,QAASR,EAAiBiF,YAAW2L,QAAOJ,WAAUhD,QAAOkB,WAAU3G,QAAOM,YAAW5C,cAAaiB,UAIzG,SAAUkK,EAAMnD,EAAapC,GACjC,ODmWI,SAAgBoC,EAA+CpC,GACnE,MAAMmE,EAAOC,EAAOhC,GACpB,IAAIjI,EACJ,GAAoB,IAAhBgK,EAAK/F,OAAcjE,EAAI,IAAIgI,EAAMgC,EAAK,GAAInE,OACzC,CACH,MAAMoF,EAAK,IAAI/B,EAAS,CAAE9C,OAAQP,EAAEO,OAAQC,KAAMR,EAAEQ,KAAMC,SAAUT,EAAES,SAAUC,WAAYV,EAAEU,WAAYJ,MAAON,EAAEM,QACnH8E,EAAG5C,GAAG2B,EAAM,IAAKnE,EAAGM,MAAO,EAAGC,OAAQ,EAAGC,MAAM,EAAOC,cAAU3B,EAAW4B,gBAAY5B,GAAa,GACpG3E,EAAIiL,CACN,CAEA,OADKpF,EAAEyE,QAAQtK,EAAEqH,OACVrH,CACT,CC9WSqL,CAASC,EAAerD,GAASpC,EAC1C,CAGM,SAAUyF,EAAejN,GAC7B,GAAiB,iBAANA,EAAgB,CACzB,GAAwB,oBAAbkN,SAA0B,MAAM,IAAIvP,MAAM,mFACrD,OAAOwC,MAAMC,KAAK8M,SAASC,iBAAiBnN,GAC9C,CACA,OAAOA,CACT,CAMM,SAAUoN,KAAOlP,GACrB,OAAOD,EAAS4O,KAA0B3O,EAC5C,CCxEAkP,gKLiF0BpQ,GAAwBR,IAAWI,QAAQ0B,IAAItB,iHAUxC,IAAgBmD,MAAMC,KAAK5D,IAAWI,QAAQuN,qCAPzE,SAAqCnN,EAAYG,GACrD,MAAMiB,EAAI5B,IAAWI,QAAQmK,IAAI/J,GACjC,IAAKoB,EAAG,MAAM,IAAIV,EAAmBV,EAAIG,GACzC,OAAOiB,EAAE0O,GACX"}
1
+ {"version":3,"file":"runtime.iife.js","sources":["../src/runtime/registry.ts","../src/runtime/ticker.ts","../src/runtime/ease.ts","../src/runtime/tween.ts","../src/runtime/index.ts","../src/runtime/iife/core.ts"],"sourcesContent":["/**\n * Module registry shared by every copy of `motionary/runtime` on the page\n * (ESM, CJS and the CDN IIFE builds all read the same `globalThis` slot),\n * so a component never needs to import the runtime itself — it asks for a\n * module with `requireModule()` and gets a clear error when it is missing.\n * Nothing here touches `window` / `document`: safe to import during SSR and\n * inside Web Workers.\n */\n\n/** Runtime version (kept in sync with the package version by the release script). */\nexport const RUNTIME_VERSION = '10.4.0';\n\n/** Where the CDN builds live (major-pinned). */\nexport const RUNTIME_CDN = 'https://cdn.jsdelivr.net/npm/motionary@10/dist/';\n\n/** A runtime module: `{ id, version, api }`, registered with `use()`. */\nexport interface RuntimeModule<A = unknown> {\n /** Module id: 'core', 'format-css', 'scroll', … (import path `motionary/runtime/<id>`). */\n id: string;\n version: string;\n /** Other modules this one needs (registered first by `use()` callers). */\n requires?: string[];\n /** The module's public API (what `requireModule(id)` returns). */\n api: A;\n /** Optional one-time setup, called on first registration. */\n setup?(registry: RuntimeRegistry): void;\n}\n\nexport interface RuntimeRegistry {\n version: string;\n modules: Map<string, RuntimeModule>;\n /** Shared per-page state slots (the ticker lives here). */\n slots: Record<string, unknown>;\n}\n\nconst KEY = Symbol.for('motionary.runtime');\n\n/** The page-wide registry (created on first use). */\nexport function registry(): RuntimeRegistry {\n const g = globalThis as unknown as Record<symbol, RuntimeRegistry | undefined>;\n return (g[KEY] ||= { version: RUNTIME_VERSION, modules: new Map(), slots: {} });\n}\n\n/** The import path of a module id. */\nexport const modulePath = (id: string): string => (id === 'core' ? 'motionary/runtime' : `motionary/runtime/${id}`);\n\n/** The CDN IIFE file of a module id. */\nexport const moduleCdn = (id: string): string => RUNTIME_CDN + (id === 'core' ? 'runtime.iife.js' : `runtime/${id}.iife.js`);\n\n/** The text of the \"module missing\" error (shared with the components). */\nexport function missingMessage(id: string, who = 'This feature'): string {\n const path = modulePath(id);\n const reg = id === 'core' ? `import { use } from 'motionary/runtime'; use();` : `import { use } from 'motionary/runtime'; import { ${camel(id)} } from '${path}'; use(${camel(id)});`;\n const cdn = id === 'core' ? `<script src=\"${moduleCdn('core')}\"></script>` : `<script src=\"${moduleCdn('core')}\"></script><script src=\"${moduleCdn(id)}\"></script>`;\n return `[motionary] ${who} requires ${path}. Install once: npm i motionary — then register it before the component mounts: ${reg} Or from a CDN (core first): ${cdn} Docs: https://github.com/HarrisonCN/Motionary/blob/main/docs/runtime/${id}.md`;\n}\n\n/** 'format-css' → 'formatCss' (the module object's export name). */\nexport const camel = (id: string): string => id.replace(/-(\\w)/g, (_, c: string) => c.toUpperCase());\n\n/** Thrown by `requireModule()` when a module is not registered. */\nexport class RuntimeModuleError extends Error {\n readonly module: string;\n constructor(id: string, who?: string) {\n super(missingMessage(id, who));\n this.name = 'RuntimeModuleError';\n this.module = id;\n }\n}\n\n/** Register modules (each once; re-registering the same id keeps the first). Returns the registry. */\nexport function register(...mods: RuntimeModule[]): RuntimeRegistry {\n const r = registry();\n for (const m of mods) {\n if (!m || typeof m.id !== 'string') throw new TypeError('[motionary] use(): not a runtime module — pass the object exported by motionary/runtime/<module>');\n if (r.modules.has(m.id)) continue;\n for (const dep of m.requires || []) if (!r.modules.has(dep)) throw new RuntimeModuleError(dep, `motionary/runtime/${m.id}`);\n r.modules.set(m.id, m as RuntimeModule);\n m.setup?.(r);\n }\n return r;\n}\n\n/** Is a module registered? */\nexport const hasModule = (id: string): boolean => registry().modules.has(id);\n\n/** The API of a registered module, or a `RuntimeModuleError` with install / import / CDN instructions. */\nexport function requireModule<A = unknown>(id: string, who?: string): A {\n const m = registry().modules.get(id);\n if (!m) throw new RuntimeModuleError(id, who);\n return m.api as A;\n}\n\n/** Ids of the registered modules. */\nexport const registeredModules = (): string[] => Array.from(registry().modules.keys());\n","/**\n * The shared ticker: one requestAnimationFrame loop per page (or worker) for\n * every runtime animation, with lag smoothing and a frame budget readout.\n * Falls back to a 16 ms timer where rAF is missing (Node, some workers).\n * Nothing runs until the first listener is added (SSR-safe).\n */\nimport { registry } from './registry';\n\nexport type TickFn = (time: number, delta: number) => void;\n\nexport interface Ticker {\n /** Add a listener; returns a remover. */\n add(fn: TickFn): () => void;\n remove(fn: TickFn): void;\n /** ms since the ticker started (frozen while sleeping). */\n readonly time: number;\n /** Smoothed frames per second. */\n readonly fps: number;\n /** Listener count (0 = asleep). */\n readonly size: number;\n /** Cap a single frame's delta (default 100 ms) so a background tab does not jump animations. */\n lagSmoothing(maxDelta: number): void;\n /** Global time scale (1 = normal, 0.5 = half speed, 0 = frozen). */\n timeScale: number;\n /** Advance by `ms` synchronously (tests, offline rendering, worker loops). */\n step(ms: number): void;\n}\n\nfunction createTicker(): Ticker {\n const fns = new Set<TickFn>();\n let time = 0, last = -1, fps = 60, maxDelta = 100, handle: unknown = null;\n const g = globalThis as any;\n const now = (): number => (g.performance?.now ? g.performance.now() : Date.now());\n const raf = (cb: (t: number) => void): unknown => (typeof g.requestAnimationFrame === 'function' ? g.requestAnimationFrame(cb) : setTimeout(() => cb(now()), 16));\n const caf = (h: unknown): void => (typeof g.cancelAnimationFrame === 'function' ? g.cancelAnimationFrame(h) : clearTimeout(h as any));\n const run = (dt: number, cap = true): void => {\n const d = (cap ? Math.min(dt, maxDelta) : dt) * t.timeScale;\n time += d;\n for (const fn of Array.from(fns)) fn(time, d);\n };\n const frame = (ts: number): void => {\n handle = null;\n if (!fns.size) return;\n const n = typeof ts === 'number' && ts > 0 ? ts : now();\n const dt = last < 0 ? 0 : n - last;\n last = n;\n if (dt > 0) fps = fps * 0.9 + (1000 / dt) * 0.1;\n run(dt);\n if (fns.size) handle = raf(frame);\n };\n const wake = (): void => {\n if (handle === null && fns.size) {\n last = -1;\n handle = raf(frame);\n }\n };\n const t: Ticker = {\n add(fn) {\n fns.add(fn);\n wake();\n return () => t.remove(fn);\n },\n remove(fn) {\n fns.delete(fn);\n if (!fns.size && handle !== null) {\n caf(handle);\n handle = null;\n }\n },\n get time() { return time; },\n get fps() { return Math.round(fps); },\n get size() { return fns.size; },\n lagSmoothing(ms) { maxDelta = ms > 0 ? ms : Infinity; },\n timeScale: 1,\n step(ms) { run(ms, false); },\n };\n return t;\n}\n\n/** The page-wide ticker (shared across every copy of the runtime). */\nexport function getTicker(): Ticker {\n const s = registry().slots;\n return (s.ticker ||= createTicker()) as Ticker;\n}\n","/** Easing functions (t ∈ [0, 1] → progress). Original implementations of the standard Penner-style curves. */\nexport type Ease = (t: number) => number;\n\nconst out = (f: Ease): Ease => (t) => 1 - f(1 - t);\nconst inOut = (f: Ease): Ease => (t) => (t < 0.5 ? f(t * 2) / 2 : 1 - f((1 - t) * 2) / 2);\nconst pow = (p: number): Ease => (t) => Math.pow(t, p);\nconst sine: Ease = (t) => 1 - Math.cos((t * Math.PI) / 2);\nconst expo: Ease = (t) => (t === 0 ? 0 : Math.pow(2, 10 * t - 10));\nconst circ: Ease = (t) => 1 - Math.sqrt(1 - t * t);\nconst back = (s = 1.70158): Ease => (t) => t * t * ((s + 1) * t - s);\nconst elastic: Ease = (t) => (t === 0 || t === 1 ? t : -Math.pow(2, 10 * t - 10) * Math.sin((t * 10 - 10.75) * ((2 * Math.PI) / 3)));\nconst bounceOut: Ease = (t) => {\n const n = 7.5625, d = 2.75;\n if (t < 1 / d) return n * t * t;\n if (t < 2 / d) return n * (t -= 1.5 / d) * t + 0.75;\n if (t < 2.5 / d) return n * (t -= 2.25 / d) * t + 0.9375;\n return n * (t -= 2.625 / d) * t + 0.984375;\n};\n\n/** cubic-bezier(x1, y1, x2, y2), solved with Newton steps + bisection fallback. */\nexport function cubicBezier(x1: number, y1: number, x2: number, y2: number): Ease {\n const a = (p1: number, p2: number) => 1 - 3 * p2 + 3 * p1;\n const b = (p1: number, p2: number) => 3 * p2 - 6 * p1;\n const c = (p1: number) => 3 * p1;\n const at = (t: number, p1: number, p2: number) => ((a(p1, p2) * t + b(p1, p2)) * t + c(p1)) * t;\n const slope = (t: number, p1: number, p2: number) => 3 * a(p1, p2) * t * t + 2 * b(p1, p2) * t + c(p1);\n return (x) => {\n if (x <= 0 || x >= 1) return x <= 0 ? 0 : 1;\n let t = x;\n for (let i = 0; i < 6; i++) {\n const s = slope(t, x1, x2);\n if (Math.abs(s) < 1e-6) break;\n t -= (at(t, x1, x2) - x) / s;\n }\n if (t < 0 || t > 1 || Math.abs(at(t, x1, x2) - x) > 1e-4) {\n let lo = 0, hi = 1;\n t = x;\n for (let i = 0; i < 30; i++) {\n const v = at(t, x1, x2);\n if (Math.abs(v - x) < 1e-6) break;\n if (v < x) lo = t; else hi = t;\n t = (lo + hi) / 2;\n }\n }\n return at(t, y1, y2);\n };\n}\n\n/** steps(n, 'end' | 'start'). */\nexport const steps = (n: number, pos: 'start' | 'end' = 'end'): Ease => (t) => {\n const k = pos === 'start' ? Math.ceil(t * n) : Math.floor(t * n);\n return Math.min(1, Math.max(0, k / n));\n};\n\n/** Named eases: linear, quad/cubic/quart/quint, sine, expo, circ, back, elastic, bounce — each `.in`, `.out`, `.inOut` via 'name-in' | 'name-out' | 'name-in-out'. */\nconst BASE: Record<string, Ease> = { quad: pow(2), cubic: pow(3), quart: pow(4), quint: pow(5), sine, expo, circ, back: back(), elastic, bounce: out(bounceOut) };\nexport const EASES: Record<string, Ease> = { linear: (t) => t, ease: cubicBezier(0.25, 0.1, 0.25, 1), 'ease-in': cubicBezier(0.42, 0, 1, 1), 'ease-out': cubicBezier(0, 0, 0.58, 1), 'ease-in-out': cubicBezier(0.42, 0, 0.58, 1), smooth: cubicBezier(0.22, 1, 0.36, 1) };\nfor (const [k, f] of Object.entries(BASE)) {\n EASES[`${k}-in`] = f;\n EASES[`${k}-out`] = out(f);\n EASES[`${k}-in-out`] = inOut(f);\n}\n\n/** Resolve an ease: a function, a name ('cubic-out', 'ease-in-out', 'linear'), 'cubic-bezier(a,b,c,d)' or 'steps(n[, start|end])'. Unknown names throw. */\nexport function parseEase(e?: string | Ease): Ease {\n if (typeof e === 'function') return e;\n if (!e) return EASES['cubic-out'];\n const s = e.trim();\n if (EASES[s]) return EASES[s];\n let m = /^cubic-bezier\\(\\s*([-\\d.]+)\\s*,\\s*([-\\d.]+)\\s*,\\s*([-\\d.]+)\\s*,\\s*([-\\d.]+)\\s*\\)$/.exec(s);\n if (m) return cubicBezier(+m[1], +m[2], +m[3], +m[4]);\n m = /^steps\\(\\s*(\\d+)\\s*(?:,\\s*(jump-)?(start|end)\\s*)?\\)$/.exec(s);\n if (m) return steps(+m[1], (m[3] as 'start' | 'end') || 'end');\n if (s === 'step-start') return steps(1, 'start');\n if (s === 'step-end') return steps(1, 'end');\n throw new Error(`[motionary] unknown ease \"${s}\" — use a name from EASES, cubic-bezier(…) or steps(…)`);\n}\n","/**\n * Tween + timeline engine (original implementation). Times are in\n * milliseconds. Targets are plain objects (numeric props) or elements\n * (CSS: numbers with units, colours, `opacity`, custom properties, and the\n * transform shorthands `x y rotate scale scaleX scaleY skewX skewY`,\n * composed in that order). Driven by the shared ticker; a tween placed in a\n * timeline is driven by the timeline instead.\n */\nimport { getTicker } from './ticker';\nimport { parseEase, type Ease } from './ease';\n\nexport type Target = object | Element;\nexport type Props = Record<string, number | string>;\n\nexport interface PlayOptions {\n /** Delay before the first iteration, ms. */\n delay?: number;\n /** Extra iterations (-1 = forever). */\n repeat?: number;\n /** Alternate direction on every other iteration. */\n yoyo?: boolean;\n /** Start paused (`play()` to start). */\n paused?: boolean;\n onUpdate?: (progress: number) => void;\n onComplete?: () => void;\n}\n\nexport interface TweenOptions extends PlayOptions {\n to?: Props;\n from?: Props;\n /** ms (default 600). */\n duration?: number;\n ease?: string | Ease;\n /** Delay added per target index (ms) when several targets are given. */\n stagger?: number;\n}\n\nconst TRANSFORM = ['x', 'y', 'rotate', 'scale', 'scaleX', 'scaleY', 'skewX', 'skewY'];\nconst DEFAULT_UNIT: Record<string, string> = { x: 'px', y: 'px', rotate: 'deg', skewX: 'deg', skewY: 'deg', scale: '', scaleX: '', scaleY: '' };\ntype TState = Record<string, { v: number; u: string }>;\nconst tstate = new WeakMap<Element, TState>();\n\nconst isEl = (t: unknown): t is HTMLElement => typeof Element !== 'undefined' && t instanceof Element;\n\ninterface Num { kind: 'num'; v: number; u: string }\ninterface Col { kind: 'col'; c: number[] }\n/** Any other string: its numbers are interpolated when both ends share the same text around them. */\ninterface Str { kind: 'str'; s: string; parts: string[]; nums: number[] }\ntype Val = Num | Col | Str;\nconst NUM_RE = /-?(?:\\d+\\.?\\d*|\\.\\d+)(?:e-?\\d+)?/gi;\n\n/** Parse '12px', '-3.5', '50%', '#0af', 'rgb(1 2 3 / .5)', 'rgba(…)'. */\nexport function parseValue(v: number | string): Val {\n if (typeof v === 'number') return { kind: 'num', v, u: '' };\n const s = v.trim();\n let m = /^#([0-9a-f]{3,8})$/i.exec(s);\n if (m) {\n let h = m[1];\n if (h.length <= 4) h = h.split('').map((c) => c + c).join('');\n const n = (i: number) => parseInt(h.slice(i, i + 2), 16);\n return { kind: 'col', c: [n(0), n(2), n(4), h.length === 8 ? n(6) / 255 : 1] };\n }\n m = /^rgba?\\(([^)]+)\\)$/i.exec(s);\n if (m) {\n const p = m[1].split(/[\\s,/]+/).filter(Boolean).map((x) => (x.endsWith('%') ? (parseFloat(x) / 100) * 255 : parseFloat(x)));\n return { kind: 'col', c: [p[0], p[1], p[2], p[3] === undefined ? 1 : p[3] > 1 ? p[3] / 255 : p[3]] };\n }\n if (s === 'transparent') return { kind: 'col', c: [0, 0, 0, 0] };\n m = /^(-?[\\d.]+(?:e-?\\d+)?)([a-z%]*)$/i.exec(s);\n if (m) return { kind: 'num', v: parseFloat(m[1]), u: m[2] };\n return { kind: 'str', s, parts: s.split(NUM_RE), nums: (s.match(NUM_RE) || []).map(Number) };\n}\n\nconst lerpVal = (a: Val, b: Val, p: number): string | number => {\n if (a.kind === 'str' || b.kind === 'str') {\n if (a.kind === 'str' && b.kind === 'str' && a.parts.join('\\u0000') === b.parts.join('\\u0000') && a.nums.length === b.nums.length) {\n return a.parts.map((t, i) => t + (i < a.nums.length ? +(a.nums[i] + (b.nums[i] - a.nums[i]) * p).toFixed(4) : '')).join('');\n }\n const src = p < 0.5 ? a : b;\n return src.kind === 'str' ? src.s : src.kind === 'num' ? (src.u ? src.v + src.u : src.v) : `rgba(${src.c.join(', ')})`;\n }\n if (a.kind === 'col' || b.kind === 'col') {\n const ca = a.kind === 'col' ? a.c : [0, 0, 0, 0], cb = b.kind === 'col' ? b.c : [0, 0, 0, 0];\n const c = ca.map((x, i) => x + (cb[i] - x) * p);\n return `rgba(${Math.round(c[0])}, ${Math.round(c[1])}, ${Math.round(c[2])}, ${+c[3].toFixed(3)})`;\n }\n const v = a.v + (b.v - a.v) * p;\n const u = b.u || a.u;\n return u ? `${+v.toFixed(4)}${u}` : +v.toFixed(6);\n};\n\nconst kebab = (k: string) => (k.startsWith('--') ? k : k.replace(/[A-Z]/g, (c) => '-' + c.toLowerCase()));\n\nfunction readProp(t: Target, k: string): number | string {\n if (!isEl(t)) return (t as any)[k] ?? 0;\n if (TRANSFORM.includes(k)) {\n const s = tstate.get(t)?.[k];\n return s ? s.v + s.u : k.startsWith('scale') ? 1 : 0;\n }\n const inline = t.style.getPropertyValue(kebab(k));\n if (inline) return inline;\n const cs = typeof getComputedStyle === 'function' ? getComputedStyle(t).getPropertyValue(kebab(k)) : '';\n return cs || (k === 'opacity' ? 1 : 0);\n}\n\nfunction writeTransform(el: HTMLElement): void {\n const s = tstate.get(el)!;\n const g = (k: string, d: number) => (s[k] ? s[k].v : d);\n const u = (k: string) => (s[k]?.u ?? DEFAULT_UNIT[k]);\n const parts: string[] = [];\n if (s.x || s.y) parts.push(`translate(${g('x', 0)}${u('x') || 'px'}, ${g('y', 0)}${u('y') || 'px'})`);\n if (s.rotate) parts.push(`rotate(${g('rotate', 0)}${u('rotate') || 'deg'})`);\n if (s.scale) parts.push(`scale(${g('scale', 1)})`);\n if (s.scaleX || s.scaleY) parts.push(`scale(${g('scaleX', 1)}, ${g('scaleY', 1)})`);\n if (s.skewX) parts.push(`skewX(${g('skewX', 0)}${u('skewX') || 'deg'})`);\n if (s.skewY) parts.push(`skewY(${g('skewY', 0)}${u('skewY') || 'deg'})`);\n el.style.transform = parts.join(' ');\n}\n\nfunction writeProp(t: Target, k: string, v: string | number): void {\n if (!isEl(t)) {\n (t as any)[k] = typeof v === 'string' && typeof (t as any)[k] === 'number' ? parseFloat(v) : v;\n return;\n }\n if (TRANSFORM.includes(k)) {\n const p = parseValue(v) as Num;\n if (p.kind !== 'num') throw new Error(`[motionary] ${k} needs a number (got \"${v}\")`);\n const s = tstate.get(t) || {};\n s[k] = { v: p.v, u: p.u };\n tstate.set(t, s);\n return;\n }\n t.style.setProperty(kebab(k), typeof v === 'number' && !['opacity', 'zIndex', 'z-index'].includes(k) && !k.startsWith('--') ? v + 'px' : String(v));\n}\n\n/** Common playback: delay, repeat, yoyo, direction, ticker attachment, promise. */\nexport abstract class Playable {\n delay: number;\n repeat: number;\n yoyo: boolean;\n /** Playback rate multiplier. */\n timeScale = 1;\n onUpdate?: (progress: number) => void;\n onComplete?: () => void;\n protected _t = 0;\n private _dir = 1;\n private _off: (() => void) | null = null;\n private _done = false;\n private _resolve!: () => void;\n /** Resolves on completion (forward end, or start when reversed). */\n finished: Promise<void>;\n /** Set when owned by a timeline (then the ticker never drives it). */\n parent: Timeline | null = null;\n\n constructor(o: PlayOptions) {\n this.delay = o.delay || 0;\n this.repeat = o.repeat || 0;\n this.yoyo = !!o.yoyo;\n this.onUpdate = o.onUpdate;\n this.onComplete = o.onComplete;\n this.finished = new Promise((r) => (this._resolve = r));\n }\n /** One iteration, ms. */\n abstract get duration(): number;\n /** Render at `ms` into one iteration. */\n protected abstract renderLocal(ms: number, iterationEnded: boolean): void;\n\n get totalDuration(): number {\n return this.repeat < 0 ? Infinity : this.delay + this.duration * (this.repeat + 1);\n }\n get time(): number {\n return this._t;\n }\n get progress(): number {\n const td = this.totalDuration;\n return td === Infinity ? ((this._t - this.delay) % this.duration) / this.duration : td ? this._t / td : 1;\n }\n set progress(p: number) {\n this.seek(p * (this.totalDuration === Infinity ? this.delay + this.duration : this.totalDuration));\n }\n get isActive(): boolean {\n return !!this._off;\n }\n get reversed(): boolean {\n return this._dir < 0;\n }\n\n /** Jump to `ms` (total time, including the delay) and render. */\n seek(ms: number): this {\n const td = this.totalDuration;\n this._t = Math.max(0, Math.min(ms, td));\n const t = this._t - this.delay;\n const d = this.duration || 0;\n if (t < 0) this.renderLocal(0, false);\n else if (!d) this.renderLocal(0, true);\n else {\n let it = d === Infinity ? 0 : Math.floor(t / d);\n let local = d === Infinity ? t : t - it * d;\n if (t >= td - this.delay && td !== Infinity) {\n it = this.repeat;\n local = d;\n }\n const back = this.yoyo && it % 2 === 1;\n this.renderLocal(back ? d - local : local, local === d);\n }\n this.onUpdate?.(this.progress);\n return this;\n }\n\n play(): this {\n this._dir = 1;\n if (this._t >= this.totalDuration) this._t = 0;\n return this.attach();\n }\n pause(): this {\n this._off?.();\n this._off = null;\n return this;\n }\n /** Play backwards from the current time. */\n reverse(): this {\n this._dir = -1;\n if (this._t <= 0) this._t = this.totalDuration === Infinity ? this.delay + this.duration : this.totalDuration;\n return this.attach();\n }\n restart(): this {\n this._done = false;\n this.seek(0);\n return this.play();\n }\n /** Stop and detach for good. */\n kill(): void {\n this.pause();\n this.parent?.remove(this);\n }\n /** Promise-like: `await tween(...)`. */\n then<R>(ok?: (v: void) => R, err?: (e: unknown) => R): Promise<R> {\n return this.finished.then(ok, err);\n }\n\n private attach(): this {\n if (this.parent || this._off) return this;\n this._done = false;\n this._off = getTicker().add((_, dt) => this.advance(dt));\n return this;\n }\n private advance(dt: number): void {\n const td = this.totalDuration;\n this.seek(this._t + dt * this._dir * this.timeScale);\n if ((this._dir > 0 && this._t >= td) || (this._dir < 0 && this._t <= 0)) this.complete();\n }\n protected complete(): void {\n this.pause();\n if (this._done) return;\n this._done = true;\n this.onComplete?.();\n this._resolve();\n }\n}\n\ninterface Track { k: string; from?: Val; to: Val; fromRaw?: number | string; toRaw: number | string }\n\n/** A tween of one target. */\nexport class Tween extends Playable {\n readonly target: Target;\n private _dur: number;\n private ease: Ease;\n private tracks: Track[] | null = null;\n private toProps: Props;\n private fromProps: Props;\n constructor(target: Target, o: TweenOptions) {\n super(o);\n this.target = target;\n this._dur = o.duration ?? 600;\n this.ease = parseEase(o.ease);\n this.toProps = o.to || {};\n this.fromProps = o.from || {};\n }\n get duration(): number {\n return this._dur;\n }\n /** Capture start values (first render). */\n private init(): Track[] {\n const keys = Array.from(new Set([...Object.keys(this.fromProps), ...Object.keys(this.toProps)]));\n return keys.map((k) => {\n const fromRaw = k in this.fromProps ? this.fromProps[k] : readProp(this.target, k);\n const toRaw = k in this.toProps ? this.toProps[k] : readProp(this.target, k);\n return { k, fromRaw, toRaw, from: parseValue(fromRaw), to: parseValue(toRaw) };\n });\n }\n protected renderLocal(ms: number, ended: boolean): void {\n this.tracks ||= this.init();\n const p = this._dur ? (ended ? this.ease(ms >= this._dur ? 1 : 0) : this.ease(ms / this._dur)) : 1;\n let tr = false;\n for (const t of this.tracks) {\n writeProp(this.target, t.k, lerpVal(t.from!, t.to, p));\n if (TRANSFORM.includes(t.k)) tr = true;\n }\n if (tr && isEl(this.target)) writeTransform(this.target);\n }\n}\n\ntype Child = { item: Playable | (() => void); start: number; fired?: boolean };\n\n/** Position: ms number, '<' (start of previous), '>' (end of previous, default), '+=200' / '-=200' (relative to the end), 'label', 'label+=100', '<+=100'. */\nexport type Position = number | string;\n\nexport interface TimelineOptions extends PlayOptions {\n /** Defaults merged into every `.to()`. */\n defaults?: Omit<TweenOptions, 'to' | 'from'>;\n}\n\n/** A sequence of tweens, nested timelines and callbacks. */\nexport class Timeline extends Playable {\n private children: Child[] = [];\n private labels: Record<string, number> = {};\n private prevStart = 0;\n private prevEnd = 0;\n private defaults: TimelineOptions['defaults'];\n private lastLocal = 0;\n constructor(o: TimelineOptions = {}) {\n super(o);\n this.defaults = o.defaults;\n }\n get duration(): number {\n let d = 0;\n for (const c of this.children) d = Math.max(d, c.start + (typeof c.item === 'function' ? 0 : c.item.totalDuration));\n return d;\n }\n private resolve(pos: Position | undefined): number {\n if (pos === undefined || pos === '>') return this.prevEnd;\n if (typeof pos === 'number') return Math.max(0, pos);\n const m = /^([<>]|[\\w-]+)?\\s*(?:([+-])=\\s*([\\d.]+))?$/.exec(pos.trim());\n if (!m) throw new Error(`[motionary] bad timeline position \"${pos}\"`);\n let base = this.prevEnd;\n if (m[1] === '<') base = this.prevStart;\n else if (m[1] && m[1] !== '>') {\n if (!(m[1] in this.labels)) throw new Error(`[motionary] unknown timeline label \"${m[1]}\"`);\n base = this.labels[m[1]];\n }\n const off = m[2] ? (m[2] === '+' ? 1 : -1) * parseFloat(m[3]) : 0;\n return Math.max(0, base + off);\n }\n /** Add a tween, timeline or callback at a position. */\n add(item: Playable | (() => void), position?: Position): this {\n const start = this.resolve(position);\n if (typeof item !== 'function') {\n item.pause();\n item.parent = this;\n }\n this.children.push({ item, start });\n this.prevStart = start;\n this.prevEnd = start + (typeof item === 'function' ? 0 : item.totalDuration);\n return this;\n }\n /** `tween(target, vars)` placed at `position` (stagger across several targets). */\n to(target: Target | Target[] | ArrayLike<Target>, vars: TweenOptions, position?: Position): this {\n const list = toList(target);\n const start = this.resolve(position);\n let end = start;\n list.forEach((t, i) => {\n const tw = new Tween(t, { ...this.defaults, ...vars, delay: (vars.delay || 0) + (vars.stagger || 0) * i, paused: true });\n tw.parent = this;\n this.children.push({ item: tw, start });\n end = Math.max(end, start + tw.totalDuration);\n });\n this.prevStart = start;\n this.prevEnd = end;\n return this;\n }\n call(fn: () => void, position?: Position): this {\n return this.add(fn, position);\n }\n label(name: string, position?: Position): this {\n this.labels[name] = this.resolve(position);\n return this;\n }\n /** Time of a label, ms. */\n labelTime(name: string): number | undefined {\n return this.labels[name];\n }\n remove(item: Playable): void {\n this.children = this.children.filter((c) => c.item !== item);\n }\n /** Children in start order (callbacks excluded). */\n getChildren(): Playable[] {\n return this.children.filter((c) => typeof c.item !== 'function').map((c) => c.item as Playable);\n }\n protected renderLocal(ms: number): void {\n const forward = ms >= this.lastLocal;\n const list = [...this.children].sort((a, b) => (forward ? a.start - b.start : b.start - a.start));\n for (const c of list) {\n if (typeof c.item === 'function') {\n if (forward && !c.fired && ms >= c.start && this.lastLocal <= c.start) {\n c.fired = true;\n c.item();\n } else if (!forward && ms < c.start) c.fired = false;\n continue;\n }\n const local = ms - c.start;\n const p = c.item as Playable & { _started?: boolean };\n if (local < 0) {\n if (p._started) p.seek(0);\n continue;\n }\n p._started = true;\n p.seek(Math.min(local, p.totalDuration));\n }\n this.lastLocal = ms;\n }\n}\n\nfunction toList(t: Target | Target[] | ArrayLike<Target>): Target[] {\n if (Array.isArray(t)) return t;\n if (t && typeof (t as ArrayLike<Target>).length === 'number' && !isEl(t)) return Array.from(t as ArrayLike<Target>);\n return [t as Target];\n}\n\n/**\n * Tween one or more targets. Returns a `Tween` (or a `Timeline` holding one\n * tween per target when several are given) that starts on the next frame\n * unless `paused`. `await` it for completion.\n */\nexport function tween(target: Target | Target[] | ArrayLike<Target>, o: TweenOptions): Playable {\n const list = toList(target);\n let p: Playable;\n if (list.length === 1) p = new Tween(list[0], o);\n else {\n const tl = new Timeline({ repeat: o.repeat, yoyo: o.yoyo, onUpdate: o.onUpdate, onComplete: o.onComplete, delay: o.delay });\n tl.to(list, { ...o, delay: 0, repeat: 0, yoyo: false, onUpdate: undefined, onComplete: undefined }, 0);\n p = tl;\n }\n if (!o.paused) p.play();\n return p;\n}\n\n/** A new timeline (plays on the next frame unless `paused`). */\nexport function timeline(o: TimelineOptions = {}): Timeline {\n const tl = new Timeline(o);\n if (!o.paused) tl.play();\n return tl;\n}\n","/**\n * `motionary/runtime` (10.1) — Motionary's own zero-dependency animation\n * runtime, the one prerequisite for runtime-powered components:\n *\n * - shared **ticker** (`getTicker()`): one rAF loop for everything;\n * - **tween + timeline** engine with easing (`tween()`, `timeline()`, `EASES`, `cubicBezier()`);\n * - **module registry** (`use()`, `requireModule()`, `hasModule()`) with a\n * clear `RuntimeModuleError` (install / import / CDN instructions) when a\n * component needs a module that was not registered.\n *\n * Every other module lives at its own subpath (`motionary/runtime/format-css`,\n * `motionary/runtime/format-motion`, …) so you only pay for what you import.\n * SSR-safe (no `window` access at import) and usable in Web Workers.\n *\n * ```ts\n * import { use, tween } from 'motionary/runtime';\n * use(); // registers the core (components can now find it)\n * tween('.box', { to: { x: 120, opacity: 1 }, duration: 500, ease: 'back-out' });\n * ```\n */\nimport { register, RUNTIME_VERSION, type RuntimeModule, type RuntimeRegistry } from './registry';\nimport { getTicker } from './ticker';\nimport { tween as rawTween, timeline, Tween, Timeline, type TweenOptions, type Playable } from './tween';\nimport { EASES, parseEase, cubicBezier, steps } from './ease';\n\nexport { registry, register, requireModule, hasModule, registeredModules, missingMessage, modulePath, moduleCdn, RuntimeModuleError, RUNTIME_VERSION, RUNTIME_CDN } from './registry';\nexport type { RuntimeModule, RuntimeRegistry } from './registry';\nexport { getTicker } from './ticker';\nexport type { Ticker, TickFn } from './ticker';\nexport { timeline, Tween, Timeline, Playable, parseValue } from './tween';\nexport type { TweenOptions, TimelineOptions, PlayOptions, Props, Target, Position } from './tween';\nexport { EASES, parseEase, cubicBezier, steps } from './ease';\nexport type { Ease } from './ease';\n\n/** The core module's API (what `requireModule('core')` returns). */\nexport interface CoreApi {\n version: string;\n getTicker: typeof getTicker;\n tween: (target: any, o: import('./tween').TweenOptions) => import('./tween').Playable;\n timeline: typeof timeline;\n Tween: typeof Tween;\n Timeline: typeof Timeline;\n EASES: typeof EASES;\n parseEase: typeof parseEase;\n cubicBezier: typeof cubicBezier;\n steps: typeof steps;\n}\n\n/** The core as a module object. */\nexport const core: RuntimeModule<CoreApi> = {\n id: 'core',\n version: RUNTIME_VERSION,\n api: { version: RUNTIME_VERSION, getTicker, tween, timeline, Tween, Timeline, EASES, parseEase, cubicBezier, steps },\n};\n\n/** Tween targets (objects, elements, lists or a CSS selector). See `TweenOptions`. */\nexport function tween(target: any, o: TweenOptions): Playable {\n return rawTween(resolveTargets(target), o);\n}\n\n/** Selector strings become element lists (only where `document` exists). */\nexport function resolveTargets(t: any): any {\n if (typeof t === 'string') {\n if (typeof document === 'undefined') throw new Error('[motionary] selector targets need a document — pass objects or elements instead');\n return Array.from(document.querySelectorAll(t));\n }\n return t;\n}\n\n/**\n * Register the core plus any modules (`use(formatCss, formatMotion)`).\n * Call once at start-up, before runtime-powered components mount.\n */\nexport function use(...mods: RuntimeModule[]): RuntimeRegistry {\n return register(core as RuntimeModule, ...mods);\n}\n","// CDN build: <script src=\".../dist/runtime.iife.js\"> → window.MotionaryRuntime, core registered.\nimport { use } from '../index';\nexport * from '../index';\nuse();\n"],"names":["RUNTIME_VERSION","RUNTIME_CDN","KEY","Symbol","for","registry","g","globalThis","version","modules","Map","slots","modulePath","id","moduleCdn","missingMessage","who","path","camel","replace","_","c","toUpperCase","RuntimeModuleError","Error","constructor","super","this","name","module","register","mods","r","m","TypeError","has","dep","requires","set","setup","createTicker","fns","Set","time","last","fps","maxDelta","handle","now","performance","Date","raf","cb","requestAnimationFrame","setTimeout","run","dt","cap","d","Math","min","t","timeScale","fn","Array","from","frame","ts","size","n","add","remove","h","delete","cancelAnimationFrame","clearTimeout","round","lagSmoothing","ms","Infinity","step","getTicker","s","ticker","out","f","inOut","pow","p","cubicBezier","x1","y1","x2","y2","a","p1","p2","b","at","slope","x","i","abs","lo","hi","v","steps","pos","k","ceil","floor","max","BASE","quad","cubic","quart","quint","sine","cos","PI","expo","circ","sqrt","back","elastic","sin","bounce","EASES","linear","ease","smooth","Object","entries","parseEase","e","trim","exec","TRANSFORM","DEFAULT_UNIT","y","rotate","skewX","skewY","scale","scaleX","scaleY","tstate","WeakMap","isEl","Element","NUM_RE","parseValue","kind","u","length","split","map","join","parseInt","slice","filter","Boolean","endsWith","parseFloat","undefined","parts","nums","match","Number","lerpVal","toFixed","src","ca","kebab","startsWith","toLowerCase","readProp","includes","get","inline","style","getPropertyValue","getComputedStyle","writeProp","setProperty","String","Playable","o","_t","_dir","_off","_done","parent","delay","repeat","yoyo","onUpdate","onComplete","finished","Promise","_resolve","totalDuration","duration","progress","td","seek","isActive","reversed","renderLocal","it","local","play","attach","pause","reverse","restart","kill","then","ok","err","advance","complete","Tween","target","tracks","_dur","toProps","to","fromProps","init","keys","fromRaw","toRaw","ended","tr","el","push","transform","writeTransform","Timeline","children","labels","prevStart","prevEnd","lastLocal","defaults","start","item","resolve","base","off","position","vars","list","toList","end","forEach","tw","stagger","paused","call","label","labelTime","getChildren","forward","sort","fired","_started","isArray","timeline","tl","core","api","tween","rawTween","resolveTargets","document","querySelectorAll","use"],"mappings":"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"}
package/dist/runtime.js CHANGED
@@ -1,8 +1,9 @@
1
- import { R as RUNTIME_VERSION, r as register } from './chunks/registry-BIEjKngP.js';
2
- export { a as RUNTIME_CDN, b as RuntimeModuleError, h as hasModule, m as missingMessage, c as moduleCdn, d as modulePath, e as registeredModules, f as registry, g as requireModule } from './chunks/registry-BIEjKngP.js';
3
- import { g as getTicker } from './chunks/ticker-CM_56oVy.js';
4
- import { s as steps, c as cubicBezier, p as parseEase, E as EASES, T as Timeline, a as Tween, t as timeline, b as tween$1 } from './chunks/tween-CqX1JBuj.js';
5
- export { P as Playable, d as parseValue } from './chunks/tween-CqX1JBuj.js';
1
+ import { R as RUNTIME_VERSION, a as register } from './chunks/registry-CT-TT_bx.js';
2
+ export { b as RUNTIME_CDN, c as RuntimeModuleError, h as hasModule, m as missingMessage, d as moduleCdn, e as modulePath, f as registeredModules, r as registry, g as requireModule } from './chunks/registry-CT-TT_bx.js';
3
+ import { g as getTicker } from './chunks/ticker-C8lSGml9.js';
4
+ import { T as Timeline, a as Tween, t as timeline, b as tween$1 } from './chunks/tween-BcejKpsx.js';
5
+ export { P as Playable, p as parseValue } from './chunks/tween-BcejKpsx.js';
6
+ import { s as steps, c as cubicBezier, p as parseEase, E as EASES } from './chunks/ease-XN8_0sXu.js';
6
7
 
7
8
  /**
8
9
  * `motionary/runtime` (10.1) — Motionary's own zero-dependency animation
@@ -1 +1 @@
1
- {"version":3,"file":"runtime.js","sources":["../src/runtime/index.ts"],"sourcesContent":["/**\n * `motionary/runtime` (10.1) — Motionary's own zero-dependency animation\n * runtime, the one prerequisite for runtime-powered components:\n *\n * - shared **ticker** (`getTicker()`): one rAF loop for everything;\n * - **tween + timeline** engine with easing (`tween()`, `timeline()`, `EASES`, `cubicBezier()`);\n * - **module registry** (`use()`, `requireModule()`, `hasModule()`) with a\n * clear `RuntimeModuleError` (install / import / CDN instructions) when a\n * component needs a module that was not registered.\n *\n * Every other module lives at its own subpath (`motionary/runtime/format-css`,\n * `motionary/runtime/format-motion`, …) so you only pay for what you import.\n * SSR-safe (no `window` access at import) and usable in Web Workers.\n *\n * ```ts\n * import { use, tween } from 'motionary/runtime';\n * use(); // registers the core (components can now find it)\n * tween('.box', { to: { x: 120, opacity: 1 }, duration: 500, ease: 'back-out' });\n * ```\n */\nimport { register, RUNTIME_VERSION, type RuntimeModule, type RuntimeRegistry } from './registry';\nimport { getTicker } from './ticker';\nimport { tween as rawTween, timeline, Tween, Timeline, type TweenOptions, type Playable } from './tween';\nimport { EASES, parseEase, cubicBezier, steps } from './ease';\n\nexport { registry, register, requireModule, hasModule, registeredModules, missingMessage, modulePath, moduleCdn, RuntimeModuleError, RUNTIME_VERSION, RUNTIME_CDN } from './registry';\nexport type { RuntimeModule, RuntimeRegistry } from './registry';\nexport { getTicker } from './ticker';\nexport type { Ticker, TickFn } from './ticker';\nexport { timeline, Tween, Timeline, Playable, parseValue } from './tween';\nexport type { TweenOptions, TimelineOptions, PlayOptions, Props, Target, Position } from './tween';\nexport { EASES, parseEase, cubicBezier, steps } from './ease';\nexport type { Ease } from './ease';\n\n/** The core module's API (what `requireModule('core')` returns). */\nexport interface CoreApi {\n version: string;\n getTicker: typeof getTicker;\n tween: (target: any, o: import('./tween').TweenOptions) => import('./tween').Playable;\n timeline: typeof timeline;\n Tween: typeof Tween;\n Timeline: typeof Timeline;\n EASES: typeof EASES;\n parseEase: typeof parseEase;\n cubicBezier: typeof cubicBezier;\n steps: typeof steps;\n}\n\n/** The core as a module object. */\nexport const core: RuntimeModule<CoreApi> = {\n id: 'core',\n version: RUNTIME_VERSION,\n api: { version: RUNTIME_VERSION, getTicker, tween, timeline, Tween, Timeline, EASES, parseEase, cubicBezier, steps },\n};\n\n/** Tween targets (objects, elements, lists or a CSS selector). See `TweenOptions`. */\nexport function tween(target: any, o: TweenOptions): Playable {\n return rawTween(resolveTargets(target), o);\n}\n\n/** Selector strings become element lists (only where `document` exists). */\nexport function resolveTargets(t: any): any {\n if (typeof t === 'string') {\n if (typeof document === 'undefined') throw new Error('[motionary] selector targets need a document — pass objects or elements instead');\n return Array.from(document.querySelectorAll(t));\n }\n return t;\n}\n\n/**\n * Register the core plus any modules (`use(formatCss, formatMotion)`).\n * Call once at start-up, before runtime-powered components mount.\n */\nexport function use(...mods: RuntimeModule[]): RuntimeRegistry {\n return register(core as RuntimeModule, ...mods);\n}\n"],"names":["rawTween"],"mappings":";;;;;;AAAA;;;;;;;;;;;;;;;;;;;AAmBG;AA6BH;AACO,MAAM,IAAI,GAA2B;AAC1C,IAAA,EAAE,EAAE,MAAM;AACV,IAAA,OAAO,EAAE,eAAe;IACxB,GAAG,EAAE,EAAE,OAAO,EAAE,eAAe,EAAE,SAAS,EAAE,KAAK,EAAE,QAAQ,EAAE,KAAK,EAAE,QAAQ,EAAE,KAAK,EAAE,SAAS,EAAE,WAAW,EAAE,KAAK,EAAE;;AAGtH;AACM,SAAU,KAAK,CAAC,MAAW,EAAE,CAAe,EAAA;IAChD,OAAOA,OAAQ,CAAC,cAAc,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;AAC5C;AAEA;AACM,SAAU,cAAc,CAAC,CAAM,EAAA;AACnC,IAAA,IAAI,OAAO,CAAC,KAAK,QAAQ,EAAE;QACzB,IAAI,OAAO,QAAQ,KAAK,WAAW;AAAE,YAAA,MAAM,IAAI,KAAK,CAAC,iFAAiF,CAAC;QACvI,OAAO,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,gBAAgB,CAAC,CAAC,CAAC,CAAC;IACjD;AACA,IAAA,OAAO,CAAC;AACV;AAEA;;;AAGG;AACG,SAAU,GAAG,CAAC,GAAG,IAAqB,EAAA;AAC1C,IAAA,OAAO,QAAQ,CAAC,IAAqB,EAAE,GAAG,IAAI,CAAC;AACjD;;;;"}
1
+ {"version":3,"file":"runtime.js","sources":["../src/runtime/index.ts"],"sourcesContent":["/**\n * `motionary/runtime` (10.1) — Motionary's own zero-dependency animation\n * runtime, the one prerequisite for runtime-powered components:\n *\n * - shared **ticker** (`getTicker()`): one rAF loop for everything;\n * - **tween + timeline** engine with easing (`tween()`, `timeline()`, `EASES`, `cubicBezier()`);\n * - **module registry** (`use()`, `requireModule()`, `hasModule()`) with a\n * clear `RuntimeModuleError` (install / import / CDN instructions) when a\n * component needs a module that was not registered.\n *\n * Every other module lives at its own subpath (`motionary/runtime/format-css`,\n * `motionary/runtime/format-motion`, …) so you only pay for what you import.\n * SSR-safe (no `window` access at import) and usable in Web Workers.\n *\n * ```ts\n * import { use, tween } from 'motionary/runtime';\n * use(); // registers the core (components can now find it)\n * tween('.box', { to: { x: 120, opacity: 1 }, duration: 500, ease: 'back-out' });\n * ```\n */\nimport { register, RUNTIME_VERSION, type RuntimeModule, type RuntimeRegistry } from './registry';\nimport { getTicker } from './ticker';\nimport { tween as rawTween, timeline, Tween, Timeline, type TweenOptions, type Playable } from './tween';\nimport { EASES, parseEase, cubicBezier, steps } from './ease';\n\nexport { registry, register, requireModule, hasModule, registeredModules, missingMessage, modulePath, moduleCdn, RuntimeModuleError, RUNTIME_VERSION, RUNTIME_CDN } from './registry';\nexport type { RuntimeModule, RuntimeRegistry } from './registry';\nexport { getTicker } from './ticker';\nexport type { Ticker, TickFn } from './ticker';\nexport { timeline, Tween, Timeline, Playable, parseValue } from './tween';\nexport type { TweenOptions, TimelineOptions, PlayOptions, Props, Target, Position } from './tween';\nexport { EASES, parseEase, cubicBezier, steps } from './ease';\nexport type { Ease } from './ease';\n\n/** The core module's API (what `requireModule('core')` returns). */\nexport interface CoreApi {\n version: string;\n getTicker: typeof getTicker;\n tween: (target: any, o: import('./tween').TweenOptions) => import('./tween').Playable;\n timeline: typeof timeline;\n Tween: typeof Tween;\n Timeline: typeof Timeline;\n EASES: typeof EASES;\n parseEase: typeof parseEase;\n cubicBezier: typeof cubicBezier;\n steps: typeof steps;\n}\n\n/** The core as a module object. */\nexport const core: RuntimeModule<CoreApi> = {\n id: 'core',\n version: RUNTIME_VERSION,\n api: { version: RUNTIME_VERSION, getTicker, tween, timeline, Tween, Timeline, EASES, parseEase, cubicBezier, steps },\n};\n\n/** Tween targets (objects, elements, lists or a CSS selector). See `TweenOptions`. */\nexport function tween(target: any, o: TweenOptions): Playable {\n return rawTween(resolveTargets(target), o);\n}\n\n/** Selector strings become element lists (only where `document` exists). */\nexport function resolveTargets(t: any): any {\n if (typeof t === 'string') {\n if (typeof document === 'undefined') throw new Error('[motionary] selector targets need a document — pass objects or elements instead');\n return Array.from(document.querySelectorAll(t));\n }\n return t;\n}\n\n/**\n * Register the core plus any modules (`use(formatCss, formatMotion)`).\n * Call once at start-up, before runtime-powered components mount.\n */\nexport function use(...mods: RuntimeModule[]): RuntimeRegistry {\n return register(core as RuntimeModule, ...mods);\n}\n"],"names":["rawTween"],"mappings":";;;;;;;AAAA;;;;;;;;;;;;;;;;;;;AAmBG;AA6BH;AACO,MAAM,IAAI,GAA2B;AAC1C,IAAA,EAAE,EAAE,MAAM;AACV,IAAA,OAAO,EAAE,eAAe;IACxB,GAAG,EAAE,EAAE,OAAO,EAAE,eAAe,EAAE,SAAS,EAAE,KAAK,EAAE,QAAQ,EAAE,KAAK,EAAE,QAAQ,EAAE,KAAK,EAAE,SAAS,EAAE,WAAW,EAAE,KAAK,EAAE;;AAGtH;AACM,SAAU,KAAK,CAAC,MAAW,EAAE,CAAe,EAAA;IAChD,OAAOA,OAAQ,CAAC,cAAc,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;AAC5C;AAEA;AACM,SAAU,cAAc,CAAC,CAAM,EAAA;AACnC,IAAA,IAAI,OAAO,CAAC,KAAK,QAAQ,EAAE;QACzB,IAAI,OAAO,QAAQ,KAAK,WAAW;AAAE,YAAA,MAAM,IAAI,KAAK,CAAC,iFAAiF,CAAC;QACvI,OAAO,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,gBAAgB,CAAC,CAAC,CAAC,CAAC;IACjD;AACA,IAAA,OAAO,CAAC;AACV;AAEA;;;AAGG;AACG,SAAU,GAAG,CAAC,GAAG,IAAqB,EAAA;AAC1C,IAAA,OAAO,QAAQ,CAAC,IAAqB,EAAE,GAAG,IAAI,CAAC;AACjD;;"}
@@ -1 +1 @@
1
- {"version":3,"file":"solid.cjs","sources":["../src/solid.ts"],"sourcesContent":["/**\n * motionary - Solid integration\n *\n * ```tsx\n * import { scrollAnimate, scrollStagger, useScrollAnimate } from 'motionary/solid';\n * false && scrollAnimate; // keep the directive import (TypeScript)\n *\n * <div use:scrollAnimate={{ animation: 'zoom-in' }}>…</div>\n * <ul use:scrollStagger={{ stagger: 60 }}>…</ul>\n * <div ref={useScrollAnimate({ animation: 'fade-in-up' })}>…</div>\n * ```\n *\n * `solid-js` is an optional peer dependency (only needed for this entry).\n */\n\nimport { createRenderEffect, onCleanup, onMount } from 'solid-js';\nimport type { AnimateOptions, ScrollAnimateInstance } from './types';\nimport { createScrollAnimate } from './core';\nimport { staggerChildren, type StaggerOptions } from './stagger';\n\nexport interface SolidScrollAnimateOptions extends AnimateOptions {\n instance?: ScrollAnimateInstance;\n}\nexport interface SolidScrollStaggerOptions extends StaggerOptions {\n instance?: ScrollAnimateInstance;\n}\n\ndeclare module 'solid-js' {\n // eslint-disable-next-line @typescript-eslint/no-namespace\n namespace JSX {\n interface Directives {\n scrollAnimate: SolidScrollAnimateOptions | true;\n scrollStagger: SolidScrollStaggerOptions | true;\n }\n }\n}\n\nlet shared: ScrollAnimateInstance | null = null;\nconst getInstance = (own?: ScrollAnimateInstance) => own || shared || (shared = createScrollAnimate());\n\nfunction read<T>(accessor?: () => T | true | undefined): T {\n const v = accessor?.();\n return (v && v !== true ? v : {}) as T;\n}\n\nconst CALLBACKS = ['onStart', 'onComplete', 'onEnter', 'onLeave', 'onProgress'] as const;\n\n/** Callbacks always call the latest options' version. */\nfunction liveCallbacks(opts: AnimateOptions, latest: () => AnimateOptions): AnimateOptions {\n const out: AnimateOptions = { ...opts };\n CALLBACKS.forEach((name) => {\n if (typeof opts[name] === 'function') (out as any)[name] = (...args: unknown[]) => (latest()[name] as any)?.(...args);\n });\n return out;\n}\n\n/**\n * Directive: `<div use:scrollAnimate={{ animation: 'fade-in' }} />`.\n * 4.0.1: the accessor is tracked — when signals it reads change, callbacks\n * update right away and the other options are re-applied if the element has\n * not animated yet (no manual `refresh()` needed).\n */\nexport function scrollAnimate(el: Element, accessor?: () => SolidScrollAnimateOptions | true | undefined): void {\n let latest: SolidScrollAnimateOptions = {};\n let mounted = false;\n let sa: ScrollAnimateInstance | null = null;\n const apply = () => {\n const { instance, ...opts } = latest;\n const record = sa?.getObservedElements().find((r) => r.element === el);\n if (sa && record?.animated) return; // finished: callbacks stay live\n sa?.unobserve(el);\n sa = getInstance(instance);\n sa.observe(el, liveCallbacks(opts, () => latest));\n };\n createRenderEffect(() => {\n latest = read<SolidScrollAnimateOptions>(accessor);\n if (mounted) apply();\n });\n // Wait until the element is in the document (directives/refs run before insertion).\n onMount(() => {\n mounted = true;\n apply();\n });\n onCleanup(() => sa?.unobserve(el));\n}\n\n/** Directive: `<ul use:scrollStagger={{ stagger: 60, observeChildren: true }} />` */\nexport function scrollStagger(el: Element, accessor?: () => SolidScrollStaggerOptions | true | undefined): void {\n const { instance, ...opts } = read<SolidScrollStaggerOptions>(accessor);\n let stop: (() => void) | undefined;\n onMount(() => {\n stop = staggerChildren(el, opts, getInstance(instance));\n });\n onCleanup(() => stop?.());\n}\n\n/** Primitive returning a `ref` callback: `<div ref={useScrollAnimate({ animation: 'fade-in-up' })} />` */\nexport function useScrollAnimate(options: SolidScrollAnimateOptions = {}): (el: Element) => void {\n let el: Element | undefined;\n const { instance, ...opts } = options;\n const sa = getInstance(instance);\n onMount(() => el && sa.observe(el, opts));\n onCleanup(() => el && sa.unobserve(el));\n return (node: Element) => {\n el = node;\n };\n}\n"],"names":["createScrollAnimate","createRenderEffect","onMount","onCleanup","staggerChildren"],"mappings":"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"}
1
+ {"version":3,"file":"solid.cjs","sources":["../src/solid.ts"],"sourcesContent":["/**\n * motionary - Solid integration\n *\n * ```tsx\n * import { scrollAnimate, scrollStagger, useScrollAnimate } from 'motionary/solid';\n * false && scrollAnimate; // keep the directive import (TypeScript)\n *\n * <div use:scrollAnimate={{ animation: 'zoom-in' }}>…</div>\n * <ul use:scrollStagger={{ stagger: 60 }}>…</ul>\n * <div ref={useScrollAnimate({ animation: 'fade-in-up' })}>…</div>\n * ```\n *\n * `solid-js` is an optional peer dependency (only needed for this entry).\n */\n\nimport { createRenderEffect, onCleanup, onMount } from 'solid-js';\nimport type { AnimateOptions, ScrollAnimateInstance } from './types';\nimport { createScrollAnimate } from './core';\nimport { staggerChildren, type StaggerOptions } from './stagger';\n\nexport interface SolidScrollAnimateOptions extends AnimateOptions {\n instance?: ScrollAnimateInstance;\n}\nexport interface SolidScrollStaggerOptions extends StaggerOptions {\n instance?: ScrollAnimateInstance;\n}\n\ndeclare module 'solid-js' {\n // eslint-disable-next-line @typescript-eslint/no-namespace\n namespace JSX {\n interface Directives {\n scrollAnimate: SolidScrollAnimateOptions | true;\n scrollStagger: SolidScrollStaggerOptions | true;\n }\n }\n}\n\nlet shared: ScrollAnimateInstance | null = null;\nconst getInstance = (own?: ScrollAnimateInstance) => own || shared || (shared = createScrollAnimate());\n\nfunction read<T>(accessor?: () => T | true | undefined): T {\n const v = accessor?.();\n return (v && v !== true ? v : {}) as T;\n}\n\nconst CALLBACKS = ['onStart', 'onComplete', 'onEnter', 'onLeave', 'onProgress'] as const;\n\n/** Callbacks always call the latest options' version. */\nfunction liveCallbacks(opts: AnimateOptions, latest: () => AnimateOptions): AnimateOptions {\n const out: AnimateOptions = { ...opts };\n CALLBACKS.forEach((name) => {\n if (typeof opts[name] === 'function') (out as any)[name] = (...args: unknown[]) => (latest()[name] as any)?.(...args);\n });\n return out;\n}\n\n/**\n * Directive: `<div use:scrollAnimate={{ animation: 'fade-in' }} />`.\n * 4.0.1: the accessor is tracked — when signals it reads change, callbacks\n * update right away and the other options are re-applied if the element has\n * not animated yet (no manual `refresh()` needed).\n */\nexport function scrollAnimate(el: Element, accessor?: () => SolidScrollAnimateOptions | true | undefined): void {\n let latest: SolidScrollAnimateOptions = {};\n let mounted = false;\n let sa: ScrollAnimateInstance | null = null;\n const apply = () => {\n const { instance, ...opts } = latest;\n const record = sa?.getObservedElements().find((r) => r.element === el);\n if (sa && record?.animated) return; // finished: callbacks stay live\n sa?.unobserve(el);\n sa = getInstance(instance);\n sa.observe(el, liveCallbacks(opts, () => latest));\n };\n createRenderEffect(() => {\n latest = read<SolidScrollAnimateOptions>(accessor);\n if (mounted) apply();\n });\n // Wait until the element is in the document (directives/refs run before insertion).\n onMount(() => {\n mounted = true;\n apply();\n });\n onCleanup(() => sa?.unobserve(el));\n}\n\n/** Directive: `<ul use:scrollStagger={{ stagger: 60, observeChildren: true }} />` */\nexport function scrollStagger(el: Element, accessor?: () => SolidScrollStaggerOptions | true | undefined): void {\n const { instance, ...opts } = read<SolidScrollStaggerOptions>(accessor);\n let stop: (() => void) | undefined;\n onMount(() => {\n stop = staggerChildren(el, opts, getInstance(instance));\n });\n onCleanup(() => stop?.());\n}\n\n/** Primitive returning a `ref` callback: `<div ref={useScrollAnimate({ animation: 'fade-in-up' })} />` */\nexport function useScrollAnimate(options: SolidScrollAnimateOptions = {}): (el: Element) => void {\n let el: Element | undefined;\n const { instance, ...opts } = options;\n const sa = getInstance(instance);\n onMount(() => el && sa.observe(el, opts));\n onCleanup(() => el && sa.unobserve(el));\n return (node: Element) => {\n el = node;\n };\n}\n"],"names":["createScrollAnimate","createRenderEffect","onMount","onCleanup","staggerChildren"],"mappings":"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"}
package/dist/solid.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"solid.js","sources":["../src/solid.ts"],"sourcesContent":["/**\n * motionary - Solid integration\n *\n * ```tsx\n * import { scrollAnimate, scrollStagger, useScrollAnimate } from 'motionary/solid';\n * false && scrollAnimate; // keep the directive import (TypeScript)\n *\n * <div use:scrollAnimate={{ animation: 'zoom-in' }}>…</div>\n * <ul use:scrollStagger={{ stagger: 60 }}>…</ul>\n * <div ref={useScrollAnimate({ animation: 'fade-in-up' })}>…</div>\n * ```\n *\n * `solid-js` is an optional peer dependency (only needed for this entry).\n */\n\nimport { createRenderEffect, onCleanup, onMount } from 'solid-js';\nimport type { AnimateOptions, ScrollAnimateInstance } from './types';\nimport { createScrollAnimate } from './core';\nimport { staggerChildren, type StaggerOptions } from './stagger';\n\nexport interface SolidScrollAnimateOptions extends AnimateOptions {\n instance?: ScrollAnimateInstance;\n}\nexport interface SolidScrollStaggerOptions extends StaggerOptions {\n instance?: ScrollAnimateInstance;\n}\n\ndeclare module 'solid-js' {\n // eslint-disable-next-line @typescript-eslint/no-namespace\n namespace JSX {\n interface Directives {\n scrollAnimate: SolidScrollAnimateOptions | true;\n scrollStagger: SolidScrollStaggerOptions | true;\n }\n }\n}\n\nlet shared: ScrollAnimateInstance | null = null;\nconst getInstance = (own?: ScrollAnimateInstance) => own || shared || (shared = createScrollAnimate());\n\nfunction read<T>(accessor?: () => T | true | undefined): T {\n const v = accessor?.();\n return (v && v !== true ? v : {}) as T;\n}\n\nconst CALLBACKS = ['onStart', 'onComplete', 'onEnter', 'onLeave', 'onProgress'] as const;\n\n/** Callbacks always call the latest options' version. */\nfunction liveCallbacks(opts: AnimateOptions, latest: () => AnimateOptions): AnimateOptions {\n const out: AnimateOptions = { ...opts };\n CALLBACKS.forEach((name) => {\n if (typeof opts[name] === 'function') (out as any)[name] = (...args: unknown[]) => (latest()[name] as any)?.(...args);\n });\n return out;\n}\n\n/**\n * Directive: `<div use:scrollAnimate={{ animation: 'fade-in' }} />`.\n * 4.0.1: the accessor is tracked — when signals it reads change, callbacks\n * update right away and the other options are re-applied if the element has\n * not animated yet (no manual `refresh()` needed).\n */\nexport function scrollAnimate(el: Element, accessor?: () => SolidScrollAnimateOptions | true | undefined): void {\n let latest: SolidScrollAnimateOptions = {};\n let mounted = false;\n let sa: ScrollAnimateInstance | null = null;\n const apply = () => {\n const { instance, ...opts } = latest;\n const record = sa?.getObservedElements().find((r) => r.element === el);\n if (sa && record?.animated) return; // finished: callbacks stay live\n sa?.unobserve(el);\n sa = getInstance(instance);\n sa.observe(el, liveCallbacks(opts, () => latest));\n };\n createRenderEffect(() => {\n latest = read<SolidScrollAnimateOptions>(accessor);\n if (mounted) apply();\n });\n // Wait until the element is in the document (directives/refs run before insertion).\n onMount(() => {\n mounted = true;\n apply();\n });\n onCleanup(() => sa?.unobserve(el));\n}\n\n/** Directive: `<ul use:scrollStagger={{ stagger: 60, observeChildren: true }} />` */\nexport function scrollStagger(el: Element, accessor?: () => SolidScrollStaggerOptions | true | undefined): void {\n const { instance, ...opts } = read<SolidScrollStaggerOptions>(accessor);\n let stop: (() => void) | undefined;\n onMount(() => {\n stop = staggerChildren(el, opts, getInstance(instance));\n });\n onCleanup(() => stop?.());\n}\n\n/** Primitive returning a `ref` callback: `<div ref={useScrollAnimate({ animation: 'fade-in-up' })} />` */\nexport function useScrollAnimate(options: SolidScrollAnimateOptions = {}): (el: Element) => void {\n let el: Element | undefined;\n const { instance, ...opts } = options;\n const sa = getInstance(instance);\n onMount(() => el && sa.observe(el, opts));\n onCleanup(() => el && sa.unobserve(el));\n return (node: Element) => {\n el = node;\n };\n}\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"solid.js","sources":["../src/solid.ts"],"sourcesContent":["/**\n * motionary - Solid integration\n *\n * ```tsx\n * import { scrollAnimate, scrollStagger, useScrollAnimate } from 'motionary/solid';\n * false && scrollAnimate; // keep the directive import (TypeScript)\n *\n * <div use:scrollAnimate={{ animation: 'zoom-in' }}>…</div>\n * <ul use:scrollStagger={{ stagger: 60 }}>…</ul>\n * <div ref={useScrollAnimate({ animation: 'fade-in-up' })}>…</div>\n * ```\n *\n * `solid-js` is an optional peer dependency (only needed for this entry).\n */\n\nimport { createRenderEffect, onCleanup, onMount } from 'solid-js';\nimport type { AnimateOptions, ScrollAnimateInstance } from './types';\nimport { createScrollAnimate } from './core';\nimport { staggerChildren, type StaggerOptions } from './stagger';\n\nexport interface SolidScrollAnimateOptions extends AnimateOptions {\n instance?: ScrollAnimateInstance;\n}\nexport interface SolidScrollStaggerOptions extends StaggerOptions {\n instance?: ScrollAnimateInstance;\n}\n\ndeclare module 'solid-js' {\n // eslint-disable-next-line @typescript-eslint/no-namespace\n namespace JSX {\n interface Directives {\n scrollAnimate: SolidScrollAnimateOptions | true;\n scrollStagger: SolidScrollStaggerOptions | true;\n }\n }\n}\n\nlet shared: ScrollAnimateInstance | null = null;\nconst getInstance = (own?: ScrollAnimateInstance) => own || shared || (shared = createScrollAnimate());\n\nfunction read<T>(accessor?: () => T | true | undefined): T {\n const v = accessor?.();\n return (v && v !== true ? v : {}) as T;\n}\n\nconst CALLBACKS = ['onStart', 'onComplete', 'onEnter', 'onLeave', 'onProgress'] as const;\n\n/** Callbacks always call the latest options' version. */\nfunction liveCallbacks(opts: AnimateOptions, latest: () => AnimateOptions): AnimateOptions {\n const out: AnimateOptions = { ...opts };\n CALLBACKS.forEach((name) => {\n if (typeof opts[name] === 'function') (out as any)[name] = (...args: unknown[]) => (latest()[name] as any)?.(...args);\n });\n return out;\n}\n\n/**\n * Directive: `<div use:scrollAnimate={{ animation: 'fade-in' }} />`.\n * 4.0.1: the accessor is tracked — when signals it reads change, callbacks\n * update right away and the other options are re-applied if the element has\n * not animated yet (no manual `refresh()` needed).\n */\nexport function scrollAnimate(el: Element, accessor?: () => SolidScrollAnimateOptions | true | undefined): void {\n let latest: SolidScrollAnimateOptions = {};\n let mounted = false;\n let sa: ScrollAnimateInstance | null = null;\n const apply = () => {\n const { instance, ...opts } = latest;\n const record = sa?.getObservedElements().find((r) => r.element === el);\n if (sa && record?.animated) return; // finished: callbacks stay live\n sa?.unobserve(el);\n sa = getInstance(instance);\n sa.observe(el, liveCallbacks(opts, () => latest));\n };\n createRenderEffect(() => {\n latest = read<SolidScrollAnimateOptions>(accessor);\n if (mounted) apply();\n });\n // Wait until the element is in the document (directives/refs run before insertion).\n onMount(() => {\n mounted = true;\n apply();\n });\n onCleanup(() => sa?.unobserve(el));\n}\n\n/** Directive: `<ul use:scrollStagger={{ stagger: 60, observeChildren: true }} />` */\nexport function scrollStagger(el: Element, accessor?: () => SolidScrollStaggerOptions | true | undefined): void {\n const { instance, ...opts } = read<SolidScrollStaggerOptions>(accessor);\n let stop: (() => void) | undefined;\n onMount(() => {\n stop = staggerChildren(el, opts, getInstance(instance));\n });\n onCleanup(() => stop?.());\n}\n\n/** Primitive returning a `ref` callback: `<div ref={useScrollAnimate({ animation: 'fade-in-up' })} />` */\nexport function useScrollAnimate(options: SolidScrollAnimateOptions = {}): (el: Element) => void {\n let el: Element | undefined;\n const { instance, ...opts } = options;\n const sa = getInstance(instance);\n onMount(() => el && sa.observe(el, opts));\n onCleanup(() => el && sa.unobserve(el));\n return (node: Element) => {\n el = node;\n };\n}\n"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"svelte.cjs","sources":["../src/svelte.ts"],"sourcesContent":["/**\n * motionary - Svelte integration\n *\n * Svelte actions (no import from `svelte` needed, works with Svelte 3, 4 and 5):\n *\n * ```svelte\n * <script>\n * import { scrollAnimate, scrollStagger } from 'motionary/svelte';\n * </script>\n * <div use:scrollAnimate={{ animation: 'fade-in-up', duration: 800 }}>…</div>\n * <ul use:scrollStagger={{ stagger: 60 }}>…</ul>\n * ```\n */\n\nimport type { AnimateOptions, ScrollAnimateInstance } from './types';\nimport { createScrollAnimate } from './core';\nimport { staggerChildren, type StaggerOptions } from './stagger';\n\nexport interface ScrollAnimateActionOptions extends AnimateOptions {\n /** Instance to register with (default: a shared instance created on first use) */\n instance?: ScrollAnimateInstance;\n}\n\nexport interface ScrollStaggerActionOptions extends StaggerOptions {\n instance?: ScrollAnimateInstance;\n}\n\n/** Shape of a Svelte action's return value. */\nexport interface ActionReturn<P> {\n update?: (parameter: P) => void;\n destroy?: () => void;\n}\n\nlet shared: ScrollAnimateInstance | null = null;\nconst getInstance = (own?: ScrollAnimateInstance) => own || shared || (shared = createScrollAnimate());\n\nconst CALLBACKS = ['onStart', 'onComplete', 'onEnter', 'onLeave', 'onProgress'] as const;\n\n/** Callbacks always call the latest parameter's version. */\nfunction liveCallbacks(opts: AnimateOptions, latest: () => AnimateOptions): AnimateOptions {\n const out: AnimateOptions = { ...opts };\n CALLBACKS.forEach((name) => {\n if (typeof opts[name] === 'function') (out as any)[name] = (...args: unknown[]) => (latest()[name] as any)?.(...args);\n });\n return out;\n}\n\n/**\n * Animate `node` when it scrolls into view. Changing the parameter updates the\n * callbacks right away; other options are applied if the element has not\n * animated yet.\n */\nexport function scrollAnimate(\n node: Element,\n options: ScrollAnimateActionOptions = {}\n): ActionReturn<ScrollAnimateActionOptions | undefined> {\n let current = options;\n const { instance, ...opts } = options;\n const sa = getInstance(instance);\n sa.observe(node, liveCallbacks(opts, () => current));\n\n return {\n update(next = {}) {\n current = next;\n const record = sa.getObservedElements().find((r) => r.element === node);\n if (record && !record.animated) {\n const { instance: _ignored, ...nextOpts } = next;\n sa.unobserve(node);\n sa.observe(node, liveCallbacks(nextOpts, () => current));\n }\n },\n destroy() {\n sa.unobserve(node);\n },\n };\n}\n\n/** Stagger the children of `node` when it scrolls into view (`observeChildren: true` also animates children added later). */\nexport function scrollStagger(\n node: Element,\n options: ScrollStaggerActionOptions = {}\n): ActionReturn<ScrollStaggerActionOptions | undefined> {\n const { instance, ...opts } = options;\n const stop = staggerChildren(node, opts, getInstance(instance));\n return { destroy: stop };\n}\n"],"names":["createScrollAnimate","staggerChildren"],"mappings":";;;;;;AAAA;;;;;;;;;;;;AAYG;AAqBH,IAAI,MAAM,GAAiC,IAAI;AAC/C,MAAM,WAAW,GAAG,CAAC,GAA2B,KAAK,GAAG,IAAI,MAAM,KAAK,MAAM,GAAGA,wBAAmB,EAAE,CAAC;AAEtG,MAAM,SAAS,GAAG,CAAC,SAAS,EAAE,YAAY,EAAE,SAAS,EAAE,SAAS,EAAE,YAAY,CAAU;AAExF;AACA,SAAS,aAAa,CAAC,IAAoB,EAAE,MAA4B,EAAA;AACvE,IAAA,MAAM,GAAG,GAAmB,EAAE,GAAG,IAAI,EAAE;AACvC,IAAA,SAAS,CAAC,OAAO,CAAC,CAAC,IAAI,KAAI;AACzB,QAAA,IAAI,OAAO,IAAI,CAAC,IAAI,CAAC,KAAK,UAAU;YAAG,GAAW,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,IAAe,KAAM,MAAM,EAAE,CAAC,IAAI,CAAS,GAAG,GAAG,IAAI,CAAC;AACvH,IAAA,CAAC,CAAC;AACF,IAAA,OAAO,GAAG;AACZ;AAEA;;;;AAIG;SACa,aAAa,CAC3B,IAAa,EACb,UAAsC,EAAE,EAAA;IAExC,IAAI,OAAO,GAAG,OAAO;IACrB,MAAM,EAAE,QAAQ,EAAE,GAAG,IAAI,EAAE,GAAG,OAAO;AACrC,IAAA,MAAM,EAAE,GAAG,WAAW,CAAC,QAAQ,CAAC;AAChC,IAAA,EAAE,CAAC,OAAO,CAAC,IAAI,EAAE,aAAa,CAAC,IAAI,EAAE,MAAM,OAAO,CAAC,CAAC;IAEpD,OAAO;QACL,MAAM,CAAC,IAAI,GAAG,EAAE,EAAA;YACd,OAAO,GAAG,IAAI;YACd,MAAM,MAAM,GAAG,EAAE,CAAC,mBAAmB,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,OAAO,KAAK,IAAI,CAAC;AACvE,YAAA,IAAI,MAAM,IAAI,CAAC,MAAM,CAAC,QAAQ,EAAE;gBAC9B,MAAM,EAAE,QAAQ,EAAE,QAAQ,EAAE,GAAG,QAAQ,EAAE,GAAG,IAAI;AAChD,gBAAA,EAAE,CAAC,SAAS,CAAC,IAAI,CAAC;AAClB,gBAAA,EAAE,CAAC,OAAO,CAAC,IAAI,EAAE,aAAa,CAAC,QAAQ,EAAE,MAAM,OAAO,CAAC,CAAC;YAC1D;QACF,CAAC;QACD,OAAO,GAAA;AACL,YAAA,EAAE,CAAC,SAAS,CAAC,IAAI,CAAC;QACpB,CAAC;KACF;AACH;AAEA;SACgB,aAAa,CAC3B,IAAa,EACb,UAAsC,EAAE,EAAA;IAExC,MAAM,EAAE,QAAQ,EAAE,GAAG,IAAI,EAAE,GAAG,OAAO;AACrC,IAAA,MAAM,IAAI,GAAGC,uBAAe,CAAC,IAAI,EAAE,IAAI,EAAE,WAAW,CAAC,QAAQ,CAAC,CAAC;AAC/D,IAAA,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE;AAC1B;;;;;"}
1
+ {"version":3,"file":"svelte.cjs","sources":["../src/svelte.ts"],"sourcesContent":["/**\n * motionary - Svelte integration\n *\n * Svelte actions (no import from `svelte` needed, works with Svelte 3, 4 and 5):\n *\n * ```svelte\n * <script>\n * import { scrollAnimate, scrollStagger } from 'motionary/svelte';\n * </script>\n * <div use:scrollAnimate={{ animation: 'fade-in-up', duration: 800 }}>…</div>\n * <ul use:scrollStagger={{ stagger: 60 }}>…</ul>\n * ```\n */\n\nimport type { AnimateOptions, ScrollAnimateInstance } from './types';\nimport { createScrollAnimate } from './core';\nimport { staggerChildren, type StaggerOptions } from './stagger';\n\nexport interface ScrollAnimateActionOptions extends AnimateOptions {\n /** Instance to register with (default: a shared instance created on first use) */\n instance?: ScrollAnimateInstance;\n}\n\nexport interface ScrollStaggerActionOptions extends StaggerOptions {\n instance?: ScrollAnimateInstance;\n}\n\n/** Shape of a Svelte action's return value. */\nexport interface ActionReturn<P> {\n update?: (parameter: P) => void;\n destroy?: () => void;\n}\n\nlet shared: ScrollAnimateInstance | null = null;\nconst getInstance = (own?: ScrollAnimateInstance) => own || shared || (shared = createScrollAnimate());\n\nconst CALLBACKS = ['onStart', 'onComplete', 'onEnter', 'onLeave', 'onProgress'] as const;\n\n/** Callbacks always call the latest parameter's version. */\nfunction liveCallbacks(opts: AnimateOptions, latest: () => AnimateOptions): AnimateOptions {\n const out: AnimateOptions = { ...opts };\n CALLBACKS.forEach((name) => {\n if (typeof opts[name] === 'function') (out as any)[name] = (...args: unknown[]) => (latest()[name] as any)?.(...args);\n });\n return out;\n}\n\n/**\n * Animate `node` when it scrolls into view. Changing the parameter updates the\n * callbacks right away; other options are applied if the element has not\n * animated yet.\n */\nexport function scrollAnimate(\n node: Element,\n options: ScrollAnimateActionOptions = {}\n): ActionReturn<ScrollAnimateActionOptions | undefined> {\n let current = options;\n const { instance, ...opts } = options;\n const sa = getInstance(instance);\n sa.observe(node, liveCallbacks(opts, () => current));\n\n return {\n update(next = {}) {\n current = next;\n const record = sa.getObservedElements().find((r) => r.element === node);\n if (record && !record.animated) {\n const { instance: _ignored, ...nextOpts } = next;\n sa.unobserve(node);\n sa.observe(node, liveCallbacks(nextOpts, () => current));\n }\n },\n destroy() {\n sa.unobserve(node);\n },\n };\n}\n\n/** Stagger the children of `node` when it scrolls into view (`observeChildren: true` also animates children added later). */\nexport function scrollStagger(\n node: Element,\n options: ScrollStaggerActionOptions = {}\n): ActionReturn<ScrollStaggerActionOptions | undefined> {\n const { instance, ...opts } = options;\n const stop = staggerChildren(node, opts, getInstance(instance));\n return { destroy: stop };\n}\n"],"names":["createScrollAnimate","staggerChildren"],"mappings":";;;;;;AAAA;;;;;;;;;;;;AAYG;AAqBH,IAAI,MAAM,GAAiC,IAAI;AAC/C,MAAM,WAAW,GAAG,CAAC,GAA2B,KAAK,GAAG,IAAI,MAAM,KAAK,MAAM,GAAGA,wBAAmB,EAAE,CAAC;AAEtG,MAAM,SAAS,GAAG,CAAC,SAAS,EAAE,YAAY,EAAE,SAAS,EAAE,SAAS,EAAE,YAAY,CAAU;AAExF;AACA,SAAS,aAAa,CAAC,IAAoB,EAAE,MAA4B,EAAA;AACvE,IAAA,MAAM,GAAG,GAAmB,EAAE,GAAG,IAAI,EAAE;AACvC,IAAA,SAAS,CAAC,OAAO,CAAC,CAAC,IAAI,KAAI;AACzB,QAAA,IAAI,OAAO,IAAI,CAAC,IAAI,CAAC,KAAK,UAAU;YAAG,GAAW,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,IAAe,KAAM,MAAM,EAAE,CAAC,IAAI,CAAS,GAAG,GAAG,IAAI,CAAC;AACvH,IAAA,CAAC,CAAC;AACF,IAAA,OAAO,GAAG;AACZ;AAEA;;;;AAIG;SACa,aAAa,CAC3B,IAAa,EACb,UAAsC,EAAE,EAAA;IAExC,IAAI,OAAO,GAAG,OAAO;IACrB,MAAM,EAAE,QAAQ,EAAE,GAAG,IAAI,EAAE,GAAG,OAAO;AACrC,IAAA,MAAM,EAAE,GAAG,WAAW,CAAC,QAAQ,CAAC;AAChC,IAAA,EAAE,CAAC,OAAO,CAAC,IAAI,EAAE,aAAa,CAAC,IAAI,EAAE,MAAM,OAAO,CAAC,CAAC;IAEpD,OAAO;QACL,MAAM,CAAC,IAAI,GAAG,EAAE,EAAA;YACd,OAAO,GAAG,IAAI;YACd,MAAM,MAAM,GAAG,EAAE,CAAC,mBAAmB,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,OAAO,KAAK,IAAI,CAAC;AACvE,YAAA,IAAI,MAAM,IAAI,CAAC,MAAM,CAAC,QAAQ,EAAE;gBAC9B,MAAM,EAAE,QAAQ,EAAE,QAAQ,EAAE,GAAG,QAAQ,EAAE,GAAG,IAAI;AAChD,gBAAA,EAAE,CAAC,SAAS,CAAC,IAAI,CAAC;AAClB,gBAAA,EAAE,CAAC,OAAO,CAAC,IAAI,EAAE,aAAa,CAAC,QAAQ,EAAE,MAAM,OAAO,CAAC,CAAC;YAC1D;QACF,CAAC;QACD,OAAO,GAAA;AACL,YAAA,EAAE,CAAC,SAAS,CAAC,IAAI,CAAC;QACpB,CAAC;KACF;AACH;AAEA;SACgB,aAAa,CAC3B,IAAa,EACb,UAAsC,EAAE,EAAA;IAExC,MAAM,EAAE,QAAQ,EAAE,GAAG,IAAI,EAAE,GAAG,OAAO;AACrC,IAAA,MAAM,IAAI,GAAGC,uBAAe,CAAC,IAAI,EAAE,IAAI,EAAE,WAAW,CAAC,QAAQ,CAAC,CAAC;AAC/D,IAAA,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE;AAC1B;;;"}
@@ -1 +1 @@
1
- {"version":3,"file":"svelte.js","sources":["../src/svelte.ts"],"sourcesContent":["/**\n * motionary - Svelte integration\n *\n * Svelte actions (no import from `svelte` needed, works with Svelte 3, 4 and 5):\n *\n * ```svelte\n * <script>\n * import { scrollAnimate, scrollStagger } from 'motionary/svelte';\n * </script>\n * <div use:scrollAnimate={{ animation: 'fade-in-up', duration: 800 }}>…</div>\n * <ul use:scrollStagger={{ stagger: 60 }}>…</ul>\n * ```\n */\n\nimport type { AnimateOptions, ScrollAnimateInstance } from './types';\nimport { createScrollAnimate } from './core';\nimport { staggerChildren, type StaggerOptions } from './stagger';\n\nexport interface ScrollAnimateActionOptions extends AnimateOptions {\n /** Instance to register with (default: a shared instance created on first use) */\n instance?: ScrollAnimateInstance;\n}\n\nexport interface ScrollStaggerActionOptions extends StaggerOptions {\n instance?: ScrollAnimateInstance;\n}\n\n/** Shape of a Svelte action's return value. */\nexport interface ActionReturn<P> {\n update?: (parameter: P) => void;\n destroy?: () => void;\n}\n\nlet shared: ScrollAnimateInstance | null = null;\nconst getInstance = (own?: ScrollAnimateInstance) => own || shared || (shared = createScrollAnimate());\n\nconst CALLBACKS = ['onStart', 'onComplete', 'onEnter', 'onLeave', 'onProgress'] as const;\n\n/** Callbacks always call the latest parameter's version. */\nfunction liveCallbacks(opts: AnimateOptions, latest: () => AnimateOptions): AnimateOptions {\n const out: AnimateOptions = { ...opts };\n CALLBACKS.forEach((name) => {\n if (typeof opts[name] === 'function') (out as any)[name] = (...args: unknown[]) => (latest()[name] as any)?.(...args);\n });\n return out;\n}\n\n/**\n * Animate `node` when it scrolls into view. Changing the parameter updates the\n * callbacks right away; other options are applied if the element has not\n * animated yet.\n */\nexport function scrollAnimate(\n node: Element,\n options: ScrollAnimateActionOptions = {}\n): ActionReturn<ScrollAnimateActionOptions | undefined> {\n let current = options;\n const { instance, ...opts } = options;\n const sa = getInstance(instance);\n sa.observe(node, liveCallbacks(opts, () => current));\n\n return {\n update(next = {}) {\n current = next;\n const record = sa.getObservedElements().find((r) => r.element === node);\n if (record && !record.animated) {\n const { instance: _ignored, ...nextOpts } = next;\n sa.unobserve(node);\n sa.observe(node, liveCallbacks(nextOpts, () => current));\n }\n },\n destroy() {\n sa.unobserve(node);\n },\n };\n}\n\n/** Stagger the children of `node` when it scrolls into view (`observeChildren: true` also animates children added later). */\nexport function scrollStagger(\n node: Element,\n options: ScrollStaggerActionOptions = {}\n): ActionReturn<ScrollStaggerActionOptions | undefined> {\n const { instance, ...opts } = options;\n const stop = staggerChildren(node, opts, getInstance(instance));\n return { destroy: stop };\n}\n"],"names":[],"mappings":";;;;AAAA;;;;;;;;;;;;AAYG;AAqBH,IAAI,MAAM,GAAiC,IAAI;AAC/C,MAAM,WAAW,GAAG,CAAC,GAA2B,KAAK,GAAG,IAAI,MAAM,KAAK,MAAM,GAAG,mBAAmB,EAAE,CAAC;AAEtG,MAAM,SAAS,GAAG,CAAC,SAAS,EAAE,YAAY,EAAE,SAAS,EAAE,SAAS,EAAE,YAAY,CAAU;AAExF;AACA,SAAS,aAAa,CAAC,IAAoB,EAAE,MAA4B,EAAA;AACvE,IAAA,MAAM,GAAG,GAAmB,EAAE,GAAG,IAAI,EAAE;AACvC,IAAA,SAAS,CAAC,OAAO,CAAC,CAAC,IAAI,KAAI;AACzB,QAAA,IAAI,OAAO,IAAI,CAAC,IAAI,CAAC,KAAK,UAAU;YAAG,GAAW,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,IAAe,KAAM,MAAM,EAAE,CAAC,IAAI,CAAS,GAAG,GAAG,IAAI,CAAC;AACvH,IAAA,CAAC,CAAC;AACF,IAAA,OAAO,GAAG;AACZ;AAEA;;;;AAIG;SACa,aAAa,CAC3B,IAAa,EACb,UAAsC,EAAE,EAAA;IAExC,IAAI,OAAO,GAAG,OAAO;IACrB,MAAM,EAAE,QAAQ,EAAE,GAAG,IAAI,EAAE,GAAG,OAAO;AACrC,IAAA,MAAM,EAAE,GAAG,WAAW,CAAC,QAAQ,CAAC;AAChC,IAAA,EAAE,CAAC,OAAO,CAAC,IAAI,EAAE,aAAa,CAAC,IAAI,EAAE,MAAM,OAAO,CAAC,CAAC;IAEpD,OAAO;QACL,MAAM,CAAC,IAAI,GAAG,EAAE,EAAA;YACd,OAAO,GAAG,IAAI;YACd,MAAM,MAAM,GAAG,EAAE,CAAC,mBAAmB,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,OAAO,KAAK,IAAI,CAAC;AACvE,YAAA,IAAI,MAAM,IAAI,CAAC,MAAM,CAAC,QAAQ,EAAE;gBAC9B,MAAM,EAAE,QAAQ,EAAE,QAAQ,EAAE,GAAG,QAAQ,EAAE,GAAG,IAAI;AAChD,gBAAA,EAAE,CAAC,SAAS,CAAC,IAAI,CAAC;AAClB,gBAAA,EAAE,CAAC,OAAO,CAAC,IAAI,EAAE,aAAa,CAAC,QAAQ,EAAE,MAAM,OAAO,CAAC,CAAC;YAC1D;QACF,CAAC;QACD,OAAO,GAAA;AACL,YAAA,EAAE,CAAC,SAAS,CAAC,IAAI,CAAC;QACpB,CAAC;KACF;AACH;AAEA;SACgB,aAAa,CAC3B,IAAa,EACb,UAAsC,EAAE,EAAA;IAExC,MAAM,EAAE,QAAQ,EAAE,GAAG,IAAI,EAAE,GAAG,OAAO;AACrC,IAAA,MAAM,IAAI,GAAG,eAAe,CAAC,IAAI,EAAE,IAAI,EAAE,WAAW,CAAC,QAAQ,CAAC,CAAC;AAC/D,IAAA,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE;AAC1B;;;;"}
1
+ {"version":3,"file":"svelte.js","sources":["../src/svelte.ts"],"sourcesContent":["/**\n * motionary - Svelte integration\n *\n * Svelte actions (no import from `svelte` needed, works with Svelte 3, 4 and 5):\n *\n * ```svelte\n * <script>\n * import { scrollAnimate, scrollStagger } from 'motionary/svelte';\n * </script>\n * <div use:scrollAnimate={{ animation: 'fade-in-up', duration: 800 }}>…</div>\n * <ul use:scrollStagger={{ stagger: 60 }}>…</ul>\n * ```\n */\n\nimport type { AnimateOptions, ScrollAnimateInstance } from './types';\nimport { createScrollAnimate } from './core';\nimport { staggerChildren, type StaggerOptions } from './stagger';\n\nexport interface ScrollAnimateActionOptions extends AnimateOptions {\n /** Instance to register with (default: a shared instance created on first use) */\n instance?: ScrollAnimateInstance;\n}\n\nexport interface ScrollStaggerActionOptions extends StaggerOptions {\n instance?: ScrollAnimateInstance;\n}\n\n/** Shape of a Svelte action's return value. */\nexport interface ActionReturn<P> {\n update?: (parameter: P) => void;\n destroy?: () => void;\n}\n\nlet shared: ScrollAnimateInstance | null = null;\nconst getInstance = (own?: ScrollAnimateInstance) => own || shared || (shared = createScrollAnimate());\n\nconst CALLBACKS = ['onStart', 'onComplete', 'onEnter', 'onLeave', 'onProgress'] as const;\n\n/** Callbacks always call the latest parameter's version. */\nfunction liveCallbacks(opts: AnimateOptions, latest: () => AnimateOptions): AnimateOptions {\n const out: AnimateOptions = { ...opts };\n CALLBACKS.forEach((name) => {\n if (typeof opts[name] === 'function') (out as any)[name] = (...args: unknown[]) => (latest()[name] as any)?.(...args);\n });\n return out;\n}\n\n/**\n * Animate `node` when it scrolls into view. Changing the parameter updates the\n * callbacks right away; other options are applied if the element has not\n * animated yet.\n */\nexport function scrollAnimate(\n node: Element,\n options: ScrollAnimateActionOptions = {}\n): ActionReturn<ScrollAnimateActionOptions | undefined> {\n let current = options;\n const { instance, ...opts } = options;\n const sa = getInstance(instance);\n sa.observe(node, liveCallbacks(opts, () => current));\n\n return {\n update(next = {}) {\n current = next;\n const record = sa.getObservedElements().find((r) => r.element === node);\n if (record && !record.animated) {\n const { instance: _ignored, ...nextOpts } = next;\n sa.unobserve(node);\n sa.observe(node, liveCallbacks(nextOpts, () => current));\n }\n },\n destroy() {\n sa.unobserve(node);\n },\n };\n}\n\n/** Stagger the children of `node` when it scrolls into view (`observeChildren: true` also animates children added later). */\nexport function scrollStagger(\n node: Element,\n options: ScrollStaggerActionOptions = {}\n): ActionReturn<ScrollStaggerActionOptions | undefined> {\n const { instance, ...opts } = options;\n const stop = staggerChildren(node, opts, getInstance(instance));\n return { destroy: stop };\n}\n"],"names":[],"mappings":";;;;AAAA;;;;;;;;;;;;AAYG;AAqBH,IAAI,MAAM,GAAiC,IAAI;AAC/C,MAAM,WAAW,GAAG,CAAC,GAA2B,KAAK,GAAG,IAAI,MAAM,KAAK,MAAM,GAAG,mBAAmB,EAAE,CAAC;AAEtG,MAAM,SAAS,GAAG,CAAC,SAAS,EAAE,YAAY,EAAE,SAAS,EAAE,SAAS,EAAE,YAAY,CAAU;AAExF;AACA,SAAS,aAAa,CAAC,IAAoB,EAAE,MAA4B,EAAA;AACvE,IAAA,MAAM,GAAG,GAAmB,EAAE,GAAG,IAAI,EAAE;AACvC,IAAA,SAAS,CAAC,OAAO,CAAC,CAAC,IAAI,KAAI;AACzB,QAAA,IAAI,OAAO,IAAI,CAAC,IAAI,CAAC,KAAK,UAAU;YAAG,GAAW,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,IAAe,KAAM,MAAM,EAAE,CAAC,IAAI,CAAS,GAAG,GAAG,IAAI,CAAC;AACvH,IAAA,CAAC,CAAC;AACF,IAAA,OAAO,GAAG;AACZ;AAEA;;;;AAIG;SACa,aAAa,CAC3B,IAAa,EACb,UAAsC,EAAE,EAAA;IAExC,IAAI,OAAO,GAAG,OAAO;IACrB,MAAM,EAAE,QAAQ,EAAE,GAAG,IAAI,EAAE,GAAG,OAAO;AACrC,IAAA,MAAM,EAAE,GAAG,WAAW,CAAC,QAAQ,CAAC;AAChC,IAAA,EAAE,CAAC,OAAO,CAAC,IAAI,EAAE,aAAa,CAAC,IAAI,EAAE,MAAM,OAAO,CAAC,CAAC;IAEpD,OAAO;QACL,MAAM,CAAC,IAAI,GAAG,EAAE,EAAA;YACd,OAAO,GAAG,IAAI;YACd,MAAM,MAAM,GAAG,EAAE,CAAC,mBAAmB,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,OAAO,KAAK,IAAI,CAAC;AACvE,YAAA,IAAI,MAAM,IAAI,CAAC,MAAM,CAAC,QAAQ,EAAE;gBAC9B,MAAM,EAAE,QAAQ,EAAE,QAAQ,EAAE,GAAG,QAAQ,EAAE,GAAG,IAAI;AAChD,gBAAA,EAAE,CAAC,SAAS,CAAC,IAAI,CAAC;AAClB,gBAAA,EAAE,CAAC,OAAO,CAAC,IAAI,EAAE,aAAa,CAAC,QAAQ,EAAE,MAAM,OAAO,CAAC,CAAC;YAC1D;QACF,CAAC;QACD,OAAO,GAAA;AACL,YAAA,EAAE,CAAC,SAAS,CAAC,IAAI,CAAC;QACpB,CAAC;KACF;AACH;AAEA;SACgB,aAAa,CAC3B,IAAa,EACb,UAAsC,EAAE,EAAA;IAExC,MAAM,EAAE,QAAQ,EAAE,GAAG,IAAI,EAAE,GAAG,OAAO;AACrC,IAAA,MAAM,IAAI,GAAG,eAAe,CAAC,IAAI,EAAE,IAAI,EAAE,WAAW,CAAC,QAAQ,CAAC,CAAC;AAC/D,IAAA,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE;AAC1B;;"}
package/dist/vue.cjs.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"vue.cjs","sources":["../src/vue.ts"],"sourcesContent":["/**\n * motionary - Vue 3 Integration\n * Provides useScrollAnimate and useScrollStagger composables for Vue 3 applications.\n *\n * A thin wrapper around the core engine, so it shares its behaviour: `once`,\n * `offset`, custom easing functions, progress, `prefers-reduced-motion`\n * support, and cleanup on unmount.\n */\n\nimport type { AnimateOptions, ScrollAnimateInstance } from './types';\nimport { createScrollAnimate } from './core';\nimport { staggerChildren, type StaggerOptions } from './stagger';\n\n/** Support refs on components (`$el`) as well as plain elements. */\nfunction unwrap(value: unknown): Element | null {\n if (value && typeof Element !== 'undefined' && !(value instanceof Element) && (value as any).$el instanceof Element) {\n return (value as any).$el as Element;\n }\n return (value as Element | null) || null;\n}\n\nexport function createVueComposables(Vue: {\n ref: <T>(value: T | null) => { value: T | null };\n onMounted: (fn: () => void) => void;\n onUnmounted: (fn: () => void) => void;\n}) {\n // Created lazily on the client so importing on the server is side-effect free.\n let instance: ScrollAnimateInstance | null = null;\n const getInstance = () => instance || (instance = createScrollAnimate());\n\n function useScrollAnimate(options: AnimateOptions = {}) {\n const animateRef = Vue.ref<Element>(null);\n let el: Element | null = null;\n\n Vue.onMounted(() => {\n const target = unwrap(animateRef.value);\n if (!target) return;\n el = target;\n getInstance().observe(el, options);\n });\n\n Vue.onUnmounted(() => {\n if (el) getInstance().unobserve(el);\n el = null;\n });\n\n return { animateRef };\n }\n\n /** Stagger the children of `staggerRef`; `observeChildren: true` also animates children added later. */\n function useScrollStagger(options: StaggerOptions = {}) {\n const staggerRef = Vue.ref<Element>(null);\n let stop: (() => void) | undefined;\n\n Vue.onMounted(() => {\n const target = unwrap(staggerRef.value);\n if (target) stop = staggerChildren(target, options, getInstance());\n });\n\n Vue.onUnmounted(() => {\n stop?.();\n stop = undefined;\n });\n\n return { staggerRef };\n }\n\n return { useScrollAnimate, useScrollStagger };\n}\n"],"names":["createScrollAnimate","staggerChildren"],"mappings":";;;;;;AAAA;;;;;;;AAOG;AAMH;AACA,SAAS,MAAM,CAAC,KAAc,EAAA;IAC5B,IAAI,KAAK,IAAI,OAAO,OAAO,KAAK,WAAW,IAAI,EAAE,KAAK,YAAY,OAAO,CAAC,IAAK,KAAa,CAAC,GAAG,YAAY,OAAO,EAAE;QACnH,OAAQ,KAAa,CAAC,GAAc;IACtC;IACA,OAAQ,KAAwB,IAAI,IAAI;AAC1C;AAEM,SAAU,oBAAoB,CAAC,GAIpC,EAAA;;IAEC,IAAI,QAAQ,GAAiC,IAAI;AACjD,IAAA,MAAM,WAAW,GAAG,MAAM,QAAQ,KAAK,QAAQ,GAAGA,wBAAmB,EAAE,CAAC;IAExE,SAAS,gBAAgB,CAAC,OAAA,GAA0B,EAAE,EAAA;QACpD,MAAM,UAAU,GAAG,GAAG,CAAC,GAAG,CAAU,IAAI,CAAC;QACzC,IAAI,EAAE,GAAmB,IAAI;AAE7B,QAAA,GAAG,CAAC,SAAS,CAAC,MAAK;YACjB,MAAM,MAAM,GAAG,MAAM,CAAC,UAAU,CAAC,KAAK,CAAC;AACvC,YAAA,IAAI,CAAC,MAAM;gBAAE;YACb,EAAE,GAAG,MAAM;YACX,WAAW,EAAE,CAAC,OAAO,CAAC,EAAE,EAAE,OAAO,CAAC;AACpC,QAAA,CAAC,CAAC;AAEF,QAAA,GAAG,CAAC,WAAW,CAAC,MAAK;AACnB,YAAA,IAAI,EAAE;AAAE,gBAAA,WAAW,EAAE,CAAC,SAAS,CAAC,EAAE,CAAC;YACnC,EAAE,GAAG,IAAI;AACX,QAAA,CAAC,CAAC;QAEF,OAAO,EAAE,UAAU,EAAE;IACvB;;IAGA,SAAS,gBAAgB,CAAC,OAAA,GAA0B,EAAE,EAAA;QACpD,MAAM,UAAU,GAAG,GAAG,CAAC,GAAG,CAAU,IAAI,CAAC;AACzC,QAAA,IAAI,IAA8B;AAElC,QAAA,GAAG,CAAC,SAAS,CAAC,MAAK;YACjB,MAAM,MAAM,GAAG,MAAM,CAAC,UAAU,CAAC,KAAK,CAAC;AACvC,YAAA,IAAI,MAAM;gBAAE,IAAI,GAAGC,uBAAe,CAAC,MAAM,EAAE,OAAO,EAAE,WAAW,EAAE,CAAC;AACpE,QAAA,CAAC,CAAC;AAEF,QAAA,GAAG,CAAC,WAAW,CAAC,MAAK;YACnB,IAAI,IAAI;YACR,IAAI,GAAG,SAAS;AAClB,QAAA,CAAC,CAAC;QAEF,OAAO,EAAE,UAAU,EAAE;IACvB;AAEA,IAAA,OAAO,EAAE,gBAAgB,EAAE,gBAAgB,EAAE;AAC/C;;;;"}
1
+ {"version":3,"file":"vue.cjs","sources":["../src/vue.ts"],"sourcesContent":["/**\n * motionary - Vue 3 Integration\n * Provides useScrollAnimate and useScrollStagger composables for Vue 3 applications.\n *\n * A thin wrapper around the core engine, so it shares its behaviour: `once`,\n * `offset`, custom easing functions, progress, `prefers-reduced-motion`\n * support, and cleanup on unmount.\n */\n\nimport type { AnimateOptions, ScrollAnimateInstance } from './types';\nimport { createScrollAnimate } from './core';\nimport { staggerChildren, type StaggerOptions } from './stagger';\n\n/** Support refs on components (`$el`) as well as plain elements. */\nfunction unwrap(value: unknown): Element | null {\n if (value && typeof Element !== 'undefined' && !(value instanceof Element) && (value as any).$el instanceof Element) {\n return (value as any).$el as Element;\n }\n return (value as Element | null) || null;\n}\n\nexport function createVueComposables(Vue: {\n ref: <T>(value: T | null) => { value: T | null };\n onMounted: (fn: () => void) => void;\n onUnmounted: (fn: () => void) => void;\n}) {\n // Created lazily on the client so importing on the server is side-effect free.\n let instance: ScrollAnimateInstance | null = null;\n const getInstance = () => instance || (instance = createScrollAnimate());\n\n function useScrollAnimate(options: AnimateOptions = {}) {\n const animateRef = Vue.ref<Element>(null);\n let el: Element | null = null;\n\n Vue.onMounted(() => {\n const target = unwrap(animateRef.value);\n if (!target) return;\n el = target;\n getInstance().observe(el, options);\n });\n\n Vue.onUnmounted(() => {\n if (el) getInstance().unobserve(el);\n el = null;\n });\n\n return { animateRef };\n }\n\n /** Stagger the children of `staggerRef`; `observeChildren: true` also animates children added later. */\n function useScrollStagger(options: StaggerOptions = {}) {\n const staggerRef = Vue.ref<Element>(null);\n let stop: (() => void) | undefined;\n\n Vue.onMounted(() => {\n const target = unwrap(staggerRef.value);\n if (target) stop = staggerChildren(target, options, getInstance());\n });\n\n Vue.onUnmounted(() => {\n stop?.();\n stop = undefined;\n });\n\n return { staggerRef };\n }\n\n return { useScrollAnimate, useScrollStagger };\n}\n"],"names":["createScrollAnimate","staggerChildren"],"mappings":";;;;;;AAAA;;;;;;;AAOG;AAMH;AACA,SAAS,MAAM,CAAC,KAAc,EAAA;IAC5B,IAAI,KAAK,IAAI,OAAO,OAAO,KAAK,WAAW,IAAI,EAAE,KAAK,YAAY,OAAO,CAAC,IAAK,KAAa,CAAC,GAAG,YAAY,OAAO,EAAE;QACnH,OAAQ,KAAa,CAAC,GAAc;IACtC;IACA,OAAQ,KAAwB,IAAI,IAAI;AAC1C;AAEM,SAAU,oBAAoB,CAAC,GAIpC,EAAA;;IAEC,IAAI,QAAQ,GAAiC,IAAI;AACjD,IAAA,MAAM,WAAW,GAAG,MAAM,QAAQ,KAAK,QAAQ,GAAGA,wBAAmB,EAAE,CAAC;IAExE,SAAS,gBAAgB,CAAC,OAAA,GAA0B,EAAE,EAAA;QACpD,MAAM,UAAU,GAAG,GAAG,CAAC,GAAG,CAAU,IAAI,CAAC;QACzC,IAAI,EAAE,GAAmB,IAAI;AAE7B,QAAA,GAAG,CAAC,SAAS,CAAC,MAAK;YACjB,MAAM,MAAM,GAAG,MAAM,CAAC,UAAU,CAAC,KAAK,CAAC;AACvC,YAAA,IAAI,CAAC,MAAM;gBAAE;YACb,EAAE,GAAG,MAAM;YACX,WAAW,EAAE,CAAC,OAAO,CAAC,EAAE,EAAE,OAAO,CAAC;AACpC,QAAA,CAAC,CAAC;AAEF,QAAA,GAAG,CAAC,WAAW,CAAC,MAAK;AACnB,YAAA,IAAI,EAAE;AAAE,gBAAA,WAAW,EAAE,CAAC,SAAS,CAAC,EAAE,CAAC;YACnC,EAAE,GAAG,IAAI;AACX,QAAA,CAAC,CAAC;QAEF,OAAO,EAAE,UAAU,EAAE;IACvB;;IAGA,SAAS,gBAAgB,CAAC,OAAA,GAA0B,EAAE,EAAA;QACpD,MAAM,UAAU,GAAG,GAAG,CAAC,GAAG,CAAU,IAAI,CAAC;AACzC,QAAA,IAAI,IAA8B;AAElC,QAAA,GAAG,CAAC,SAAS,CAAC,MAAK;YACjB,MAAM,MAAM,GAAG,MAAM,CAAC,UAAU,CAAC,KAAK,CAAC;AACvC,YAAA,IAAI,MAAM;gBAAE,IAAI,GAAGC,uBAAe,CAAC,MAAM,EAAE,OAAO,EAAE,WAAW,EAAE,CAAC;AACpE,QAAA,CAAC,CAAC;AAEF,QAAA,GAAG,CAAC,WAAW,CAAC,MAAK;YACnB,IAAI,IAAI;YACR,IAAI,GAAG,SAAS;AAClB,QAAA,CAAC,CAAC;QAEF,OAAO,EAAE,UAAU,EAAE;IACvB;AAEA,IAAA,OAAO,EAAE,gBAAgB,EAAE,gBAAgB,EAAE;AAC/C;;"}
package/dist/vue.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"vue.js","sources":["../src/vue.ts"],"sourcesContent":["/**\n * motionary - Vue 3 Integration\n * Provides useScrollAnimate and useScrollStagger composables for Vue 3 applications.\n *\n * A thin wrapper around the core engine, so it shares its behaviour: `once`,\n * `offset`, custom easing functions, progress, `prefers-reduced-motion`\n * support, and cleanup on unmount.\n */\n\nimport type { AnimateOptions, ScrollAnimateInstance } from './types';\nimport { createScrollAnimate } from './core';\nimport { staggerChildren, type StaggerOptions } from './stagger';\n\n/** Support refs on components (`$el`) as well as plain elements. */\nfunction unwrap(value: unknown): Element | null {\n if (value && typeof Element !== 'undefined' && !(value instanceof Element) && (value as any).$el instanceof Element) {\n return (value as any).$el as Element;\n }\n return (value as Element | null) || null;\n}\n\nexport function createVueComposables(Vue: {\n ref: <T>(value: T | null) => { value: T | null };\n onMounted: (fn: () => void) => void;\n onUnmounted: (fn: () => void) => void;\n}) {\n // Created lazily on the client so importing on the server is side-effect free.\n let instance: ScrollAnimateInstance | null = null;\n const getInstance = () => instance || (instance = createScrollAnimate());\n\n function useScrollAnimate(options: AnimateOptions = {}) {\n const animateRef = Vue.ref<Element>(null);\n let el: Element | null = null;\n\n Vue.onMounted(() => {\n const target = unwrap(animateRef.value);\n if (!target) return;\n el = target;\n getInstance().observe(el, options);\n });\n\n Vue.onUnmounted(() => {\n if (el) getInstance().unobserve(el);\n el = null;\n });\n\n return { animateRef };\n }\n\n /** Stagger the children of `staggerRef`; `observeChildren: true` also animates children added later. */\n function useScrollStagger(options: StaggerOptions = {}) {\n const staggerRef = Vue.ref<Element>(null);\n let stop: (() => void) | undefined;\n\n Vue.onMounted(() => {\n const target = unwrap(staggerRef.value);\n if (target) stop = staggerChildren(target, options, getInstance());\n });\n\n Vue.onUnmounted(() => {\n stop?.();\n stop = undefined;\n });\n\n return { staggerRef };\n }\n\n return { useScrollAnimate, useScrollStagger };\n}\n"],"names":[],"mappings":";;;;AAAA;;;;;;;AAOG;AAMH;AACA,SAAS,MAAM,CAAC,KAAc,EAAA;IAC5B,IAAI,KAAK,IAAI,OAAO,OAAO,KAAK,WAAW,IAAI,EAAE,KAAK,YAAY,OAAO,CAAC,IAAK,KAAa,CAAC,GAAG,YAAY,OAAO,EAAE;QACnH,OAAQ,KAAa,CAAC,GAAc;IACtC;IACA,OAAQ,KAAwB,IAAI,IAAI;AAC1C;AAEM,SAAU,oBAAoB,CAAC,GAIpC,EAAA;;IAEC,IAAI,QAAQ,GAAiC,IAAI;AACjD,IAAA,MAAM,WAAW,GAAG,MAAM,QAAQ,KAAK,QAAQ,GAAG,mBAAmB,EAAE,CAAC;IAExE,SAAS,gBAAgB,CAAC,OAAA,GAA0B,EAAE,EAAA;QACpD,MAAM,UAAU,GAAG,GAAG,CAAC,GAAG,CAAU,IAAI,CAAC;QACzC,IAAI,EAAE,GAAmB,IAAI;AAE7B,QAAA,GAAG,CAAC,SAAS,CAAC,MAAK;YACjB,MAAM,MAAM,GAAG,MAAM,CAAC,UAAU,CAAC,KAAK,CAAC;AACvC,YAAA,IAAI,CAAC,MAAM;gBAAE;YACb,EAAE,GAAG,MAAM;YACX,WAAW,EAAE,CAAC,OAAO,CAAC,EAAE,EAAE,OAAO,CAAC;AACpC,QAAA,CAAC,CAAC;AAEF,QAAA,GAAG,CAAC,WAAW,CAAC,MAAK;AACnB,YAAA,IAAI,EAAE;AAAE,gBAAA,WAAW,EAAE,CAAC,SAAS,CAAC,EAAE,CAAC;YACnC,EAAE,GAAG,IAAI;AACX,QAAA,CAAC,CAAC;QAEF,OAAO,EAAE,UAAU,EAAE;IACvB;;IAGA,SAAS,gBAAgB,CAAC,OAAA,GAA0B,EAAE,EAAA;QACpD,MAAM,UAAU,GAAG,GAAG,CAAC,GAAG,CAAU,IAAI,CAAC;AACzC,QAAA,IAAI,IAA8B;AAElC,QAAA,GAAG,CAAC,SAAS,CAAC,MAAK;YACjB,MAAM,MAAM,GAAG,MAAM,CAAC,UAAU,CAAC,KAAK,CAAC;AACvC,YAAA,IAAI,MAAM;gBAAE,IAAI,GAAG,eAAe,CAAC,MAAM,EAAE,OAAO,EAAE,WAAW,EAAE,CAAC;AACpE,QAAA,CAAC,CAAC;AAEF,QAAA,GAAG,CAAC,WAAW,CAAC,MAAK;YACnB,IAAI,IAAI;YACR,IAAI,GAAG,SAAS;AAClB,QAAA,CAAC,CAAC;QAEF,OAAO,EAAE,UAAU,EAAE;IACvB;AAEA,IAAA,OAAO,EAAE,gBAAgB,EAAE,gBAAgB,EAAE;AAC/C;;;;"}
1
+ {"version":3,"file":"vue.js","sources":["../src/vue.ts"],"sourcesContent":["/**\n * motionary - Vue 3 Integration\n * Provides useScrollAnimate and useScrollStagger composables for Vue 3 applications.\n *\n * A thin wrapper around the core engine, so it shares its behaviour: `once`,\n * `offset`, custom easing functions, progress, `prefers-reduced-motion`\n * support, and cleanup on unmount.\n */\n\nimport type { AnimateOptions, ScrollAnimateInstance } from './types';\nimport { createScrollAnimate } from './core';\nimport { staggerChildren, type StaggerOptions } from './stagger';\n\n/** Support refs on components (`$el`) as well as plain elements. */\nfunction unwrap(value: unknown): Element | null {\n if (value && typeof Element !== 'undefined' && !(value instanceof Element) && (value as any).$el instanceof Element) {\n return (value as any).$el as Element;\n }\n return (value as Element | null) || null;\n}\n\nexport function createVueComposables(Vue: {\n ref: <T>(value: T | null) => { value: T | null };\n onMounted: (fn: () => void) => void;\n onUnmounted: (fn: () => void) => void;\n}) {\n // Created lazily on the client so importing on the server is side-effect free.\n let instance: ScrollAnimateInstance | null = null;\n const getInstance = () => instance || (instance = createScrollAnimate());\n\n function useScrollAnimate(options: AnimateOptions = {}) {\n const animateRef = Vue.ref<Element>(null);\n let el: Element | null = null;\n\n Vue.onMounted(() => {\n const target = unwrap(animateRef.value);\n if (!target) return;\n el = target;\n getInstance().observe(el, options);\n });\n\n Vue.onUnmounted(() => {\n if (el) getInstance().unobserve(el);\n el = null;\n });\n\n return { animateRef };\n }\n\n /** Stagger the children of `staggerRef`; `observeChildren: true` also animates children added later. */\n function useScrollStagger(options: StaggerOptions = {}) {\n const staggerRef = Vue.ref<Element>(null);\n let stop: (() => void) | undefined;\n\n Vue.onMounted(() => {\n const target = unwrap(staggerRef.value);\n if (target) stop = staggerChildren(target, options, getInstance());\n });\n\n Vue.onUnmounted(() => {\n stop?.();\n stop = undefined;\n });\n\n return { staggerRef };\n }\n\n return { useScrollAnimate, useScrollStagger };\n}\n"],"names":[],"mappings":";;;;AAAA;;;;;;;AAOG;AAMH;AACA,SAAS,MAAM,CAAC,KAAc,EAAA;IAC5B,IAAI,KAAK,IAAI,OAAO,OAAO,KAAK,WAAW,IAAI,EAAE,KAAK,YAAY,OAAO,CAAC,IAAK,KAAa,CAAC,GAAG,YAAY,OAAO,EAAE;QACnH,OAAQ,KAAa,CAAC,GAAc;IACtC;IACA,OAAQ,KAAwB,IAAI,IAAI;AAC1C;AAEM,SAAU,oBAAoB,CAAC,GAIpC,EAAA;;IAEC,IAAI,QAAQ,GAAiC,IAAI;AACjD,IAAA,MAAM,WAAW,GAAG,MAAM,QAAQ,KAAK,QAAQ,GAAG,mBAAmB,EAAE,CAAC;IAExE,SAAS,gBAAgB,CAAC,OAAA,GAA0B,EAAE,EAAA;QACpD,MAAM,UAAU,GAAG,GAAG,CAAC,GAAG,CAAU,IAAI,CAAC;QACzC,IAAI,EAAE,GAAmB,IAAI;AAE7B,QAAA,GAAG,CAAC,SAAS,CAAC,MAAK;YACjB,MAAM,MAAM,GAAG,MAAM,CAAC,UAAU,CAAC,KAAK,CAAC;AACvC,YAAA,IAAI,CAAC,MAAM;gBAAE;YACb,EAAE,GAAG,MAAM;YACX,WAAW,EAAE,CAAC,OAAO,CAAC,EAAE,EAAE,OAAO,CAAC;AACpC,QAAA,CAAC,CAAC;AAEF,QAAA,GAAG,CAAC,WAAW,CAAC,MAAK;AACnB,YAAA,IAAI,EAAE;AAAE,gBAAA,WAAW,EAAE,CAAC,SAAS,CAAC,EAAE,CAAC;YACnC,EAAE,GAAG,IAAI;AACX,QAAA,CAAC,CAAC;QAEF,OAAO,EAAE,UAAU,EAAE;IACvB;;IAGA,SAAS,gBAAgB,CAAC,OAAA,GAA0B,EAAE,EAAA;QACpD,MAAM,UAAU,GAAG,GAAG,CAAC,GAAG,CAAU,IAAI,CAAC;AACzC,QAAA,IAAI,IAA8B;AAElC,QAAA,GAAG,CAAC,SAAS,CAAC,MAAK;YACjB,MAAM,MAAM,GAAG,MAAM,CAAC,UAAU,CAAC,KAAK,CAAC;AACvC,YAAA,IAAI,MAAM;gBAAE,IAAI,GAAG,eAAe,CAAC,MAAM,EAAE,OAAO,EAAE,WAAW,EAAE,CAAC;AACpE,QAAA,CAAC,CAAC;AAEF,QAAA,GAAG,CAAC,WAAW,CAAC,MAAK;YACnB,IAAI,IAAI;YACR,IAAI,GAAG,SAAS;AAClB,QAAA,CAAC,CAAC;QAEF,OAAO,EAAE,UAAU,EAAE;IACvB;AAEA,IAAA,OAAO,EAAE,gBAAgB,EAAE,gBAAgB,EAAE;AAC/C;;"}