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
@@ -0,0 +1 @@
1
+ {"version":3,"file":"format-apng.cjs","sources":["../../src/runtime/format-apng.ts"],"sourcesContent":["/**\n * `motionary/runtime/format-apng` (10.4) — animated PNG (APNG) loader written\n * for Motionary: reads `acTL` / `fcTL` / `fdAT`, rebuilds every frame as a\n * standalone PNG (header + palette / transparency chunks + its image data,\n * with fresh CRCs) and lets the browser's own PNG decoder decode it, then\n * composites the frames (`dispose_op` none / background / previous,\n * `blend_op` source / over) into full-size RGBA. A plain (non-animated) PNG\n * loads as a one-frame animation.\n *\n * `parseApng()` and `apngFramePngs()` are pure (no DOM); `decodeApng()` needs\n * an image decoder — the browser's by default (also in workers), or your own\n * via `{ decode }`.\n */\nimport { RUNTIME_VERSION, type RuntimeModule } from './registry';\nimport { composeFrames, fixDelay, bytesOf, browserDecode, crc32, animatedImagePlayer, u8, type AnimatedImage, type FramePart, type FrameDecoder } from './anim-image';\n\nexport type { AnimatedImage, AnimFrame, Rgba, AnimPlayer, AnimPlayerOptions, FrameDecoder } from './anim-image';\nexport { animatedImagePlayer } from './anim-image';\n\nconst SIG = [137, 80, 78, 71, 13, 10, 26, 10];\n\nexport interface ApngChunk {\n type: string;\n data: Uint8Array;\n}\n\nexport interface ApngFrameInfo {\n width: number;\n height: number;\n x: number;\n y: number;\n /** ms */\n delay: number;\n dispose: FramePart['dispose'];\n blend: FramePart['blend'];\n /** Image data (zlib stream pieces) of this frame. */\n data: Uint8Array[];\n}\n\nexport interface ApngInfo {\n width: number;\n height: number;\n /** acTL num_plays (0 = forever); 1 for a plain PNG. */\n plays: number;\n animated: boolean;\n /** The default image (IDAT) is not part of the animation. */\n hiddenDefault: boolean;\n frames: ApngFrameInfo[];\n /** Chunks copied into every frame PNG (PLTE, tRNS, gAMA, cHRM, sRGB, iCCP, sBIT). */\n shared: ApngChunk[];\n ihdr: Uint8Array;\n}\n\nconst u32 = (b: Uint8Array, i: number) => ((b[i] << 24) | (b[i + 1] << 16) | (b[i + 2] << 8) | b[i + 3]) >>> 0;\nconst u16 = (b: Uint8Array, i: number) => (b[i] << 8) | b[i + 1];\n\n/** Read the chunk list of a PNG / APNG (pure). */\nexport function pngChunks(b: Uint8Array): ApngChunk[] {\n for (let i = 0; i < 8; i++) if (b[i] !== SIG[i]) throw new Error('[motionary] format-apng: not a PNG file');\n const out: ApngChunk[] = [];\n let p = 8;\n while (p + 8 <= b.length) {\n const len = u32(b, p), type = String.fromCharCode(b[p + 4], b[p + 5], b[p + 6], b[p + 7]);\n out.push({ type, data: b.subarray(p + 8, p + 8 + len) });\n p += 12 + len;\n if (type === 'IEND') break;\n }\n return out;\n}\n\n/** Parse the animation structure (pure; no pixels decoded). */\nexport function parseApng(input: Uint8Array | ArrayBuffer): ApngInfo {\n const b = u8(input);\n const chunks = pngChunks(b);\n const ihdr = chunks[0]?.type === 'IHDR' ? chunks[0].data : null;\n if (!ihdr) throw new Error('[motionary] format-apng: missing IHDR');\n const width = u32(ihdr, 0), height = u32(ihdr, 4);\n const shared = chunks.filter((c) => /^(PLTE|tRNS|gAMA|cHRM|sRGB|iCCP|sBIT)$/.test(c.type));\n const actl = chunks.find((c) => c.type === 'acTL');\n const frames: ApngFrameInfo[] = [];\n let cur: ApngFrameInfo | null = null, sawIdat = false, idatHasFrame = false;\n const idat: Uint8Array[] = [];\n for (const c of chunks) {\n if (c.type === 'fcTL') {\n const d = c.data;\n const dn = u16(d, 20), dd = u16(d, 22) || 100;\n cur = { width: u32(d, 4), height: u32(d, 8), x: u32(d, 12), y: u32(d, 16), delay: fixDelay((dn / dd) * 1000), dispose: (['none', 'background', 'previous'] as const)[d[24]] || 'none', blend: d[25] === 1 ? 'over' : 'source', data: [] };\n frames.push(cur);\n if (!sawIdat) idatHasFrame = true;\n } else if (c.type === 'IDAT') {\n sawIdat = true;\n idat.push(c.data);\n if (cur && idatHasFrame) cur.data.push(c.data);\n } else if (c.type === 'fdAT' && cur) cur.data.push(c.data.subarray(4)); // drop the sequence number\n }\n if (!actl || !frames.length) {\n // a plain PNG: one frame, the whole image\n return { width, height, plays: 1, animated: false, hiddenDefault: false, frames: [{ width, height, x: 0, y: 0, delay: 100, dispose: 'none', blend: 'source', data: idat }], shared, ihdr };\n }\n // the first frame's dispose \"previous\" acts like \"background\" (spec)\n if (frames[0].dispose === 'previous') frames[0].dispose = 'background';\n return { width, height, plays: u32(actl.data, 4), animated: true, hiddenDefault: !idatHasFrame, frames, shared, ihdr };\n}\n\nfunction chunk(type: string, data: Uint8Array): Uint8Array {\n const out = new Uint8Array(12 + data.length);\n const v = new DataView(out.buffer);\n v.setUint32(0, data.length);\n for (let i = 0; i < 4; i++) out[4 + i] = type.charCodeAt(i);\n out.set(data, 8);\n v.setUint32(8 + data.length, crc32(out, 4, 8 + data.length));\n return out;\n}\n\n/** Rebuild every animation frame as a standalone PNG file (pure). */\nexport function apngFramePngs(info: ApngInfo): Uint8Array[] {\n return info.frames.map((f) => {\n const ihdr = new Uint8Array(info.ihdr); // a copy (never a Node Buffer view)\n const v = new DataView(ihdr.buffer);\n v.setUint32(0, f.width);\n v.setUint32(4, f.height);\n const parts = [new Uint8Array(SIG), chunk('IHDR', ihdr), ...info.shared.map((c) => chunk(c.type, c.data)), ...f.data.map((d) => chunk('IDAT', d)), chunk('IEND', new Uint8Array(0))];\n const out = new Uint8Array(parts.reduce((n, p) => n + p.length, 0));\n let o = 0;\n for (const p of parts) {\n out.set(p, o);\n o += p.length;\n }\n return out;\n });\n}\n\n/** Decode an APNG (or PNG) into composited RGBA frames. */\nexport async function decodeApng(input: Uint8Array | ArrayBuffer, o: { decode?: FrameDecoder } = {}): Promise<AnimatedImage & { info: ApngInfo }> {\n const info = parseApng(input);\n const decode = o.decode || browserDecode;\n const pngs = apngFramePngs(info);\n const images = await Promise.all(pngs.map((p) => decode(p, 'image/png')));\n const parts: FramePart[] = info.frames.map((f, i) => ({ x: f.x, y: f.y, image: images[i], delay: f.delay, blend: f.blend, dispose: f.dispose }));\n return { format: 'apng', width: info.width, height: info.height, plays: info.plays, frames: composeFrames(info.width, info.height, parts), info };\n}\n\n/** Fetch (URL) or read (ArrayBuffer / Blob / bytes) and decode an APNG. */\nexport async function loadApng(src: string | ArrayBuffer | ArrayBufferView | Blob, o: { decode?: FrameDecoder } = {}): Promise<AnimatedImage & { info: ApngInfo }> {\n return decodeApng(await bytesOf(src), o);\n}\n\nexport interface FormatApngApi {\n parseApng: typeof parseApng;\n apngFramePngs: typeof apngFramePngs;\n decodeApng: typeof decodeApng;\n loadApng: typeof loadApng;\n animatedImagePlayer: typeof animatedImagePlayer;\n}\n\n/** The module object for `use(formatApng)`. */\nexport const formatApng: RuntimeModule<FormatApngApi> = { id: 'format-apng', version: RUNTIME_VERSION, requires: ['core'], api: { parseApng, apngFramePngs, decodeApng, loadApng, animatedImagePlayer } };\n"],"names":["u8","fixDelay","crc32","browserDecode","composeFrames","bytesOf","RUNTIME_VERSION","animatedImagePlayer"],"mappings":"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"}
@@ -0,0 +1,250 @@
1
+ /** A runtime module: `{ id, version, api }`, registered with `use()`. */
2
+ interface RuntimeModule<A = unknown> {
3
+ /** Module id: 'core', 'format-css', 'scroll', … (import path `motionary/runtime/<id>`). */
4
+ id: string;
5
+ version: string;
6
+ /** Other modules this one needs (registered first by `use()` callers). */
7
+ requires?: string[];
8
+ /** The module's public API (what `requireModule(id)` returns). */
9
+ api: A;
10
+ /** Optional one-time setup, called on first registration. */
11
+ setup?(registry: RuntimeRegistry): void;
12
+ }
13
+ interface RuntimeRegistry {
14
+ version: string;
15
+ modules: Map<string, RuntimeModule>;
16
+ /** Shared per-page state slots (the ticker lives here). */
17
+ slots: Record<string, unknown>;
18
+ }
19
+
20
+ /** Easing functions (t ∈ [0, 1] → progress). Original implementations of the standard Penner-style curves. */
21
+ type Ease = (t: number) => number;
22
+
23
+ type Target = object | Element;
24
+ type Props = Record<string, number | string>;
25
+ interface PlayOptions {
26
+ /** Delay before the first iteration, ms. */
27
+ delay?: number;
28
+ /** Extra iterations (-1 = forever). */
29
+ repeat?: number;
30
+ /** Alternate direction on every other iteration. */
31
+ yoyo?: boolean;
32
+ /** Start paused (`play()` to start). */
33
+ paused?: boolean;
34
+ onUpdate?: (progress: number) => void;
35
+ onComplete?: () => void;
36
+ }
37
+ interface TweenOptions extends PlayOptions {
38
+ to?: Props;
39
+ from?: Props;
40
+ /** ms (default 600). */
41
+ duration?: number;
42
+ ease?: string | Ease;
43
+ /** Delay added per target index (ms) when several targets are given. */
44
+ stagger?: number;
45
+ }
46
+ /** Common playback: delay, repeat, yoyo, direction, ticker attachment, promise. */
47
+ declare abstract class Playable {
48
+ delay: number;
49
+ repeat: number;
50
+ yoyo: boolean;
51
+ /** Playback rate multiplier. */
52
+ timeScale: number;
53
+ onUpdate?: (progress: number) => void;
54
+ onComplete?: () => void;
55
+ protected _t: number;
56
+ private _dir;
57
+ private _off;
58
+ private _done;
59
+ private _resolve;
60
+ /** Resolves on completion (forward end, or start when reversed). */
61
+ finished: Promise<void>;
62
+ /** Set when owned by a timeline (then the ticker never drives it). */
63
+ parent: Timeline | null;
64
+ constructor(o: PlayOptions);
65
+ /** One iteration, ms. */
66
+ abstract get duration(): number;
67
+ /** Render at `ms` into one iteration. */
68
+ protected abstract renderLocal(ms: number, iterationEnded: boolean): void;
69
+ get totalDuration(): number;
70
+ get time(): number;
71
+ get progress(): number;
72
+ set progress(p: number);
73
+ get isActive(): boolean;
74
+ get reversed(): boolean;
75
+ /** Jump to `ms` (total time, including the delay) and render. */
76
+ seek(ms: number): this;
77
+ play(): this;
78
+ pause(): this;
79
+ /** Play backwards from the current time. */
80
+ reverse(): this;
81
+ restart(): this;
82
+ /** Stop and detach for good. */
83
+ kill(): void;
84
+ /** Promise-like: `await tween(...)`. */
85
+ then<R>(ok?: (v: void) => R, err?: (e: unknown) => R): Promise<R>;
86
+ private attach;
87
+ private advance;
88
+ protected complete(): void;
89
+ }
90
+ /** Position: ms number, '<' (start of previous), '>' (end of previous, default), '+=200' / '-=200' (relative to the end), 'label', 'label+=100', '<+=100'. */
91
+ type Position = number | string;
92
+ interface TimelineOptions extends PlayOptions {
93
+ /** Defaults merged into every `.to()`. */
94
+ defaults?: Omit<TweenOptions, 'to' | 'from'>;
95
+ }
96
+ /** A sequence of tweens, nested timelines and callbacks. */
97
+ declare class Timeline extends Playable {
98
+ private children;
99
+ private labels;
100
+ private prevStart;
101
+ private prevEnd;
102
+ private defaults;
103
+ private lastLocal;
104
+ constructor(o?: TimelineOptions);
105
+ get duration(): number;
106
+ private resolve;
107
+ /** Add a tween, timeline or callback at a position. */
108
+ add(item: Playable | (() => void), position?: Position): this;
109
+ /** `tween(target, vars)` placed at `position` (stagger across several targets). */
110
+ to(target: Target | Target[] | ArrayLike<Target>, vars: TweenOptions, position?: Position): this;
111
+ call(fn: () => void, position?: Position): this;
112
+ label(name: string, position?: Position): this;
113
+ /** Time of a label, ms. */
114
+ labelTime(name: string): number | undefined;
115
+ remove(item: Playable): void;
116
+ /** Children in start order (callbacks excluded). */
117
+ getChildren(): Playable[];
118
+ protected renderLocal(ms: number): void;
119
+ }
120
+
121
+ /**
122
+ * Shared internals of the animated-image loaders (`format-gif`, `format-apng`,
123
+ * `format-webp`, 10.4): the decoded-animation shape, frame compositing in
124
+ * plain RGBA arrays (no DOM — works in workers and on the server), the
125
+ * browser image decoder used for APNG / WebP frames, and the canvas player
126
+ * (a runtime `Playable`, so it can be paused, reversed, scrubbed and driven
127
+ * by a scroll scene). Bundled into each loader; not a public module.
128
+ */
129
+
130
+ /** An RGBA bitmap (the shape of `ImageData`, without needing the DOM). */
131
+ interface Rgba {
132
+ width: number;
133
+ height: number;
134
+ data: Uint8ClampedArray;
135
+ }
136
+ /** One frame of an animation, already composited to the full canvas size. */
137
+ interface AnimFrame {
138
+ /** Display time, ms. */
139
+ delay: number;
140
+ image: Rgba;
141
+ }
142
+ interface AnimatedImage {
143
+ format: 'gif' | 'apng' | 'webp';
144
+ width: number;
145
+ height: number;
146
+ /** Number of plays: 0 = forever, 1 = once, … */
147
+ plays: number;
148
+ frames: AnimFrame[];
149
+ }
150
+ /** A frame region before compositing (APNG fcTL / WebP ANMF / GIF descriptor). */
151
+ interface FramePart {
152
+ x: number;
153
+ y: number;
154
+ image: Rgba;
155
+ delay: number;
156
+ /** 'over' alpha-blends onto the canvas, 'source' replaces the region. */
157
+ blend: 'over' | 'source';
158
+ /** What happens to the region after the frame is shown. */
159
+ dispose: 'none' | 'background' | 'previous';
160
+ }
161
+ /** Image decoder for one frame file (PNG / WebP bytes) → RGBA. Replaceable (workers, tests, servers). */
162
+ type FrameDecoder = (bytes: Uint8Array, mime: string) => Promise<Rgba>;
163
+ interface AnimPlayerOptions {
164
+ /** Extra repeats; default from the file (`plays`: 0 → forever). */
165
+ repeat?: number;
166
+ yoyo?: boolean;
167
+ paused?: boolean;
168
+ /** Playback speed (default 1). */
169
+ speed?: number;
170
+ }
171
+ type AnimPlayer = Playable & {
172
+ readonly frame: number;
173
+ readonly frameCount: number;
174
+ };
175
+ /** Play a decoded animation on a canvas as a runtime timeline (seek / reverse / `progress` scrub). */
176
+ declare function animatedImagePlayer(canvas: HTMLCanvasElement | OffscreenCanvas, anim: AnimatedImage, o?: AnimPlayerOptions): AnimPlayer;
177
+
178
+ /**
179
+ * `motionary/runtime/format-apng` (10.4) — animated PNG (APNG) loader written
180
+ * for Motionary: reads `acTL` / `fcTL` / `fdAT`, rebuilds every frame as a
181
+ * standalone PNG (header + palette / transparency chunks + its image data,
182
+ * with fresh CRCs) and lets the browser's own PNG decoder decode it, then
183
+ * composites the frames (`dispose_op` none / background / previous,
184
+ * `blend_op` source / over) into full-size RGBA. A plain (non-animated) PNG
185
+ * loads as a one-frame animation.
186
+ *
187
+ * `parseApng()` and `apngFramePngs()` are pure (no DOM); `decodeApng()` needs
188
+ * an image decoder — the browser's by default (also in workers), or your own
189
+ * via `{ decode }`.
190
+ */
191
+
192
+ interface ApngChunk {
193
+ type: string;
194
+ data: Uint8Array;
195
+ }
196
+ interface ApngFrameInfo {
197
+ width: number;
198
+ height: number;
199
+ x: number;
200
+ y: number;
201
+ /** ms */
202
+ delay: number;
203
+ dispose: FramePart['dispose'];
204
+ blend: FramePart['blend'];
205
+ /** Image data (zlib stream pieces) of this frame. */
206
+ data: Uint8Array[];
207
+ }
208
+ interface ApngInfo {
209
+ width: number;
210
+ height: number;
211
+ /** acTL num_plays (0 = forever); 1 for a plain PNG. */
212
+ plays: number;
213
+ animated: boolean;
214
+ /** The default image (IDAT) is not part of the animation. */
215
+ hiddenDefault: boolean;
216
+ frames: ApngFrameInfo[];
217
+ /** Chunks copied into every frame PNG (PLTE, tRNS, gAMA, cHRM, sRGB, iCCP, sBIT). */
218
+ shared: ApngChunk[];
219
+ ihdr: Uint8Array;
220
+ }
221
+ /** Read the chunk list of a PNG / APNG (pure). */
222
+ declare function pngChunks(b: Uint8Array): ApngChunk[];
223
+ /** Parse the animation structure (pure; no pixels decoded). */
224
+ declare function parseApng(input: Uint8Array | ArrayBuffer): ApngInfo;
225
+ /** Rebuild every animation frame as a standalone PNG file (pure). */
226
+ declare function apngFramePngs(info: ApngInfo): Uint8Array[];
227
+ /** Decode an APNG (or PNG) into composited RGBA frames. */
228
+ declare function decodeApng(input: Uint8Array | ArrayBuffer, o?: {
229
+ decode?: FrameDecoder;
230
+ }): Promise<AnimatedImage & {
231
+ info: ApngInfo;
232
+ }>;
233
+ /** Fetch (URL) or read (ArrayBuffer / Blob / bytes) and decode an APNG. */
234
+ declare function loadApng(src: string | ArrayBuffer | ArrayBufferView | Blob, o?: {
235
+ decode?: FrameDecoder;
236
+ }): Promise<AnimatedImage & {
237
+ info: ApngInfo;
238
+ }>;
239
+ interface FormatApngApi {
240
+ parseApng: typeof parseApng;
241
+ apngFramePngs: typeof apngFramePngs;
242
+ decodeApng: typeof decodeApng;
243
+ loadApng: typeof loadApng;
244
+ animatedImagePlayer: typeof animatedImagePlayer;
245
+ }
246
+ /** The module object for `use(formatApng)`. */
247
+ declare const formatApng: RuntimeModule<FormatApngApi>;
248
+
249
+ export { animatedImagePlayer, apngFramePngs, decodeApng, formatApng, loadApng, parseApng, pngChunks };
250
+ export type { AnimFrame, AnimPlayer, AnimPlayerOptions, AnimatedImage, ApngChunk, ApngFrameInfo, ApngInfo, FormatApngApi, FrameDecoder, Rgba };
@@ -0,0 +1,250 @@
1
+ /** A runtime module: `{ id, version, api }`, registered with `use()`. */
2
+ interface RuntimeModule<A = unknown> {
3
+ /** Module id: 'core', 'format-css', 'scroll', … (import path `motionary/runtime/<id>`). */
4
+ id: string;
5
+ version: string;
6
+ /** Other modules this one needs (registered first by `use()` callers). */
7
+ requires?: string[];
8
+ /** The module's public API (what `requireModule(id)` returns). */
9
+ api: A;
10
+ /** Optional one-time setup, called on first registration. */
11
+ setup?(registry: RuntimeRegistry): void;
12
+ }
13
+ interface RuntimeRegistry {
14
+ version: string;
15
+ modules: Map<string, RuntimeModule>;
16
+ /** Shared per-page state slots (the ticker lives here). */
17
+ slots: Record<string, unknown>;
18
+ }
19
+
20
+ /** Easing functions (t ∈ [0, 1] → progress). Original implementations of the standard Penner-style curves. */
21
+ type Ease = (t: number) => number;
22
+
23
+ type Target = object | Element;
24
+ type Props = Record<string, number | string>;
25
+ interface PlayOptions {
26
+ /** Delay before the first iteration, ms. */
27
+ delay?: number;
28
+ /** Extra iterations (-1 = forever). */
29
+ repeat?: number;
30
+ /** Alternate direction on every other iteration. */
31
+ yoyo?: boolean;
32
+ /** Start paused (`play()` to start). */
33
+ paused?: boolean;
34
+ onUpdate?: (progress: number) => void;
35
+ onComplete?: () => void;
36
+ }
37
+ interface TweenOptions extends PlayOptions {
38
+ to?: Props;
39
+ from?: Props;
40
+ /** ms (default 600). */
41
+ duration?: number;
42
+ ease?: string | Ease;
43
+ /** Delay added per target index (ms) when several targets are given. */
44
+ stagger?: number;
45
+ }
46
+ /** Common playback: delay, repeat, yoyo, direction, ticker attachment, promise. */
47
+ declare abstract class Playable {
48
+ delay: number;
49
+ repeat: number;
50
+ yoyo: boolean;
51
+ /** Playback rate multiplier. */
52
+ timeScale: number;
53
+ onUpdate?: (progress: number) => void;
54
+ onComplete?: () => void;
55
+ protected _t: number;
56
+ private _dir;
57
+ private _off;
58
+ private _done;
59
+ private _resolve;
60
+ /** Resolves on completion (forward end, or start when reversed). */
61
+ finished: Promise<void>;
62
+ /** Set when owned by a timeline (then the ticker never drives it). */
63
+ parent: Timeline | null;
64
+ constructor(o: PlayOptions);
65
+ /** One iteration, ms. */
66
+ abstract get duration(): number;
67
+ /** Render at `ms` into one iteration. */
68
+ protected abstract renderLocal(ms: number, iterationEnded: boolean): void;
69
+ get totalDuration(): number;
70
+ get time(): number;
71
+ get progress(): number;
72
+ set progress(p: number);
73
+ get isActive(): boolean;
74
+ get reversed(): boolean;
75
+ /** Jump to `ms` (total time, including the delay) and render. */
76
+ seek(ms: number): this;
77
+ play(): this;
78
+ pause(): this;
79
+ /** Play backwards from the current time. */
80
+ reverse(): this;
81
+ restart(): this;
82
+ /** Stop and detach for good. */
83
+ kill(): void;
84
+ /** Promise-like: `await tween(...)`. */
85
+ then<R>(ok?: (v: void) => R, err?: (e: unknown) => R): Promise<R>;
86
+ private attach;
87
+ private advance;
88
+ protected complete(): void;
89
+ }
90
+ /** Position: ms number, '<' (start of previous), '>' (end of previous, default), '+=200' / '-=200' (relative to the end), 'label', 'label+=100', '<+=100'. */
91
+ type Position = number | string;
92
+ interface TimelineOptions extends PlayOptions {
93
+ /** Defaults merged into every `.to()`. */
94
+ defaults?: Omit<TweenOptions, 'to' | 'from'>;
95
+ }
96
+ /** A sequence of tweens, nested timelines and callbacks. */
97
+ declare class Timeline extends Playable {
98
+ private children;
99
+ private labels;
100
+ private prevStart;
101
+ private prevEnd;
102
+ private defaults;
103
+ private lastLocal;
104
+ constructor(o?: TimelineOptions);
105
+ get duration(): number;
106
+ private resolve;
107
+ /** Add a tween, timeline or callback at a position. */
108
+ add(item: Playable | (() => void), position?: Position): this;
109
+ /** `tween(target, vars)` placed at `position` (stagger across several targets). */
110
+ to(target: Target | Target[] | ArrayLike<Target>, vars: TweenOptions, position?: Position): this;
111
+ call(fn: () => void, position?: Position): this;
112
+ label(name: string, position?: Position): this;
113
+ /** Time of a label, ms. */
114
+ labelTime(name: string): number | undefined;
115
+ remove(item: Playable): void;
116
+ /** Children in start order (callbacks excluded). */
117
+ getChildren(): Playable[];
118
+ protected renderLocal(ms: number): void;
119
+ }
120
+
121
+ /**
122
+ * Shared internals of the animated-image loaders (`format-gif`, `format-apng`,
123
+ * `format-webp`, 10.4): the decoded-animation shape, frame compositing in
124
+ * plain RGBA arrays (no DOM — works in workers and on the server), the
125
+ * browser image decoder used for APNG / WebP frames, and the canvas player
126
+ * (a runtime `Playable`, so it can be paused, reversed, scrubbed and driven
127
+ * by a scroll scene). Bundled into each loader; not a public module.
128
+ */
129
+
130
+ /** An RGBA bitmap (the shape of `ImageData`, without needing the DOM). */
131
+ interface Rgba {
132
+ width: number;
133
+ height: number;
134
+ data: Uint8ClampedArray;
135
+ }
136
+ /** One frame of an animation, already composited to the full canvas size. */
137
+ interface AnimFrame {
138
+ /** Display time, ms. */
139
+ delay: number;
140
+ image: Rgba;
141
+ }
142
+ interface AnimatedImage {
143
+ format: 'gif' | 'apng' | 'webp';
144
+ width: number;
145
+ height: number;
146
+ /** Number of plays: 0 = forever, 1 = once, … */
147
+ plays: number;
148
+ frames: AnimFrame[];
149
+ }
150
+ /** A frame region before compositing (APNG fcTL / WebP ANMF / GIF descriptor). */
151
+ interface FramePart {
152
+ x: number;
153
+ y: number;
154
+ image: Rgba;
155
+ delay: number;
156
+ /** 'over' alpha-blends onto the canvas, 'source' replaces the region. */
157
+ blend: 'over' | 'source';
158
+ /** What happens to the region after the frame is shown. */
159
+ dispose: 'none' | 'background' | 'previous';
160
+ }
161
+ /** Image decoder for one frame file (PNG / WebP bytes) → RGBA. Replaceable (workers, tests, servers). */
162
+ type FrameDecoder = (bytes: Uint8Array, mime: string) => Promise<Rgba>;
163
+ interface AnimPlayerOptions {
164
+ /** Extra repeats; default from the file (`plays`: 0 → forever). */
165
+ repeat?: number;
166
+ yoyo?: boolean;
167
+ paused?: boolean;
168
+ /** Playback speed (default 1). */
169
+ speed?: number;
170
+ }
171
+ type AnimPlayer = Playable & {
172
+ readonly frame: number;
173
+ readonly frameCount: number;
174
+ };
175
+ /** Play a decoded animation on a canvas as a runtime timeline (seek / reverse / `progress` scrub). */
176
+ declare function animatedImagePlayer(canvas: HTMLCanvasElement | OffscreenCanvas, anim: AnimatedImage, o?: AnimPlayerOptions): AnimPlayer;
177
+
178
+ /**
179
+ * `motionary/runtime/format-apng` (10.4) — animated PNG (APNG) loader written
180
+ * for Motionary: reads `acTL` / `fcTL` / `fdAT`, rebuilds every frame as a
181
+ * standalone PNG (header + palette / transparency chunks + its image data,
182
+ * with fresh CRCs) and lets the browser's own PNG decoder decode it, then
183
+ * composites the frames (`dispose_op` none / background / previous,
184
+ * `blend_op` source / over) into full-size RGBA. A plain (non-animated) PNG
185
+ * loads as a one-frame animation.
186
+ *
187
+ * `parseApng()` and `apngFramePngs()` are pure (no DOM); `decodeApng()` needs
188
+ * an image decoder — the browser's by default (also in workers), or your own
189
+ * via `{ decode }`.
190
+ */
191
+
192
+ interface ApngChunk {
193
+ type: string;
194
+ data: Uint8Array;
195
+ }
196
+ interface ApngFrameInfo {
197
+ width: number;
198
+ height: number;
199
+ x: number;
200
+ y: number;
201
+ /** ms */
202
+ delay: number;
203
+ dispose: FramePart['dispose'];
204
+ blend: FramePart['blend'];
205
+ /** Image data (zlib stream pieces) of this frame. */
206
+ data: Uint8Array[];
207
+ }
208
+ interface ApngInfo {
209
+ width: number;
210
+ height: number;
211
+ /** acTL num_plays (0 = forever); 1 for a plain PNG. */
212
+ plays: number;
213
+ animated: boolean;
214
+ /** The default image (IDAT) is not part of the animation. */
215
+ hiddenDefault: boolean;
216
+ frames: ApngFrameInfo[];
217
+ /** Chunks copied into every frame PNG (PLTE, tRNS, gAMA, cHRM, sRGB, iCCP, sBIT). */
218
+ shared: ApngChunk[];
219
+ ihdr: Uint8Array;
220
+ }
221
+ /** Read the chunk list of a PNG / APNG (pure). */
222
+ declare function pngChunks(b: Uint8Array): ApngChunk[];
223
+ /** Parse the animation structure (pure; no pixels decoded). */
224
+ declare function parseApng(input: Uint8Array | ArrayBuffer): ApngInfo;
225
+ /** Rebuild every animation frame as a standalone PNG file (pure). */
226
+ declare function apngFramePngs(info: ApngInfo): Uint8Array[];
227
+ /** Decode an APNG (or PNG) into composited RGBA frames. */
228
+ declare function decodeApng(input: Uint8Array | ArrayBuffer, o?: {
229
+ decode?: FrameDecoder;
230
+ }): Promise<AnimatedImage & {
231
+ info: ApngInfo;
232
+ }>;
233
+ /** Fetch (URL) or read (ArrayBuffer / Blob / bytes) and decode an APNG. */
234
+ declare function loadApng(src: string | ArrayBuffer | ArrayBufferView | Blob, o?: {
235
+ decode?: FrameDecoder;
236
+ }): Promise<AnimatedImage & {
237
+ info: ApngInfo;
238
+ }>;
239
+ interface FormatApngApi {
240
+ parseApng: typeof parseApng;
241
+ apngFramePngs: typeof apngFramePngs;
242
+ decodeApng: typeof decodeApng;
243
+ loadApng: typeof loadApng;
244
+ animatedImagePlayer: typeof animatedImagePlayer;
245
+ }
246
+ /** The module object for `use(formatApng)`. */
247
+ declare const formatApng: RuntimeModule<FormatApngApi>;
248
+
249
+ export { animatedImagePlayer, apngFramePngs, decodeApng, formatApng, loadApng, parseApng, pngChunks };
250
+ export type { AnimFrame, AnimPlayer, AnimPlayerOptions, AnimatedImage, ApngChunk, ApngFrameInfo, ApngInfo, FormatApngApi, FrameDecoder, Rgba };
@@ -0,0 +1,2 @@
1
+ !function(t,e,a){"use strict";const n=t=>t<=10?100:t;function i(t,e,a,n){const i=new Uint8ClampedArray(t*e*4),r=[];for(const n of a){const a="previous"===n.dispose?i.slice():null,{width:s,height:o,data:h}=n.image;for(let a=0;a<o;a++){const r=n.y+a;if(!(r<0||r>=e))for(let e=0;e<s;e++){const o=n.x+e;if(o<0||o>=t)continue;const d=4*(a*s+e),f=4*(r*t+o),c=h[d+3];if("source"===n.blend||255===c)i[f]=h[d],i[f+1]=h[d+1],i[f+2]=h[d+2],i[f+3]=c;else if(c){const t=i[f+3]/255,e=c/255,a=e+t*(1-e);for(let n=0;n<3;n++)i[f+n]=(h[d+n]*e+i[f+n]*t*(1-e))/a;i[f+3]=255*a}}}if(r.push({delay:n.delay,image:{width:t,height:e,data:i.slice()}}),"background"===n.dispose)for(let a=Math.max(0,n.y);a<Math.min(e,n.y+o);a++)for(let e=Math.max(0,n.x);e<Math.min(t,n.x+s);e++)i.set([0,0,0,0],4*(a*t+e));else a&&i.set(a)}return r}const r=async(t,e)=>{const a=globalThis;if("function"!=typeof a.createImageBitmap)throw new Error("[motionary] no image decoder here (createImageBitmap is missing) — pass { decode } to the loader");const n=await a.createImageBitmap(new Blob([t],{type:e})),i=n.width,r=n.height,s=("function"==typeof a.OffscreenCanvas?new a.OffscreenCanvas(i,r):Object.assign(document.createElement("canvas"),{width:i,height:r})).getContext("2d",{willReadFrequently:!0});s.drawImage(n,0,0),n.close?.();const o=s.getImageData(0,0,i,r);return{width:o.width,height:o.height,data:o.data}};class s extends a.Playable{constructor(t,e,a){super({repeat:a.repeat??(0===e.plays?-1:Math.max(0,e.plays-1)),yoyo:a.yoyo}),this.canvas=t,this.anim=e,this.times=[0],this.cur=-1,this.timeScale=a.speed||1;for(const t of e.frames)this.times.push(this.times[this.times.length-1]+t.delay);t.width!==e.width&&(t.width=e.width),t.height!==e.height&&(t.height=e.height),this.ctx=t.getContext("2d"),this.datas=e.frames.map(()=>null),this.show(0),a.paused||this.play()}get duration(){return this.times[this.times.length-1]}get frame(){return this.cur}get frameCount(){return this.anim.frames.length}renderLocal(t){const e=Math.min(t,this.duration-.001);let a=0,n=this.anim.frames.length-1;for(;a<n;){const t=a+n+1>>1;this.times[t]<=e?a=t:n=t-1}this.show(a)}show(t){if(t===this.cur||!this.ctx)return;this.cur=t;const e=this.anim.frames[t];if(!e)return;let a=this.datas[t];a||"function"!=typeof ImageData||(a=this.datas[t]=new ImageData(new Uint8ClampedArray(e.image.data),e.image.width,e.image.height)),a&&this.ctx.putImageData(a,0,0)}}function o(t,e,a={}){if(!e.frames.length)throw new Error("[motionary] animatedImagePlayer: the animation has no frames");return new s(t,e,a)}let h=null;const d=[137,80,78,71,13,10,26,10],f=(t,e)=>(t[e]<<24|t[e+1]<<16|t[e+2]<<8|t[e+3])>>>0,c=(t,e)=>t[e]<<8|t[e+1];function l(t){for(let e=0;e<8;e++)if(t[e]!==d[e])throw new Error("[motionary] format-apng: not a PNG file");const e=[];let a=8;for(;a+8<=t.length;){const n=f(t,a),i=String.fromCharCode(t[a+4],t[a+5],t[a+6],t[a+7]);if(e.push({type:i,data:t.subarray(a+8,a+8+n)}),a+=12+n,"IEND"===i)break}return e}function m(t){var e;const a=l((e=t)instanceof ArrayBuffer?new Uint8Array(e):new Uint8Array(e.buffer,e.byteOffset,e.byteLength)),i="IHDR"===a[0]?.type?a[0].data:null;if(!i)throw new Error("[motionary] format-apng: missing IHDR");const r=f(i,0),s=f(i,4),o=a.filter(t=>/^(PLTE|tRNS|gAMA|cHRM|sRGB|iCCP|sBIT)$/.test(t.type)),h=a.find(t=>"acTL"===t.type),d=[];let m=null,u=!1,g=!1;const y=[];for(const t of a)if("fcTL"===t.type){const e=t.data,a=c(e,20),i=c(e,22)||100;m={width:f(e,4),height:f(e,8),x:f(e,12),y:f(e,16),delay:n(a/i*1e3),dispose:["none","background","previous"][e[24]]||"none",blend:1===e[25]?"over":"source",data:[]},d.push(m),u||(g=!0)}else"IDAT"===t.type?(u=!0,y.push(t.data),m&&g&&m.data.push(t.data)):"fdAT"===t.type&&m&&m.data.push(t.data.subarray(4));return h&&d.length?("previous"===d[0].dispose&&(d[0].dispose="background"),{width:r,height:s,plays:f(h.data,4),animated:!0,hiddenDefault:!g,frames:d,shared:o,ihdr:i}):{width:r,height:s,plays:1,animated:!1,hiddenDefault:!1,frames:[{width:r,height:s,x:0,y:0,delay:100,dispose:"none",blend:"source",data:y}],shared:o,ihdr:i}}function u(t,e){const a=new Uint8Array(12+e.length),n=new DataView(a.buffer);n.setUint32(0,e.length);for(let e=0;e<4;e++)a[4+e]=t.charCodeAt(e);return a.set(e,8),n.setUint32(8+e.length,function(t,e=0,a=t.length){if(!h){h=new Uint32Array(256);for(let t=0;t<256;t++){let e=t;for(let t=0;t<8;t++)e=1&e?3988292384^e>>>1:e>>>1;h[t]=e>>>0}}let n=4294967295;for(let i=e;i<a;i++)n=h[255&(n^t[i])]^n>>>8;return(4294967295^n)>>>0}(a,4,8+e.length)),a}function g(t){return t.frames.map(e=>{const a=new Uint8Array(t.ihdr),n=new DataView(a.buffer);n.setUint32(0,e.width),n.setUint32(4,e.height);const i=[new Uint8Array(d),u("IHDR",a),...t.shared.map(t=>u(t.type,t.data)),...e.data.map(t=>u("IDAT",t)),u("IEND",new Uint8Array(0))],r=new Uint8Array(i.reduce((t,e)=>t+e.length,0));let s=0;for(const t of i)r.set(t,s),s+=t.length;return r})}async function y(t,e={}){const a=m(t),n=e.decode||r,s=g(a),o=await Promise.all(s.map(t=>n(t,"image/png"))),h=a.frames.map((t,e)=>({x:t.x,y:t.y,image:o[e],delay:t.delay,blend:t.blend,dispose:t.dispose}));return{format:"apng",width:a.width,height:a.height,plays:a.plays,frames:i(a.width,a.height,h),info:a}}async function p(t,e={}){return y(await async function(t){if("string"==typeof t){const e=await fetch(t);if(!e.ok)throw new Error(`[motionary] could not load ${t} (${e.status})`);return new Uint8Array(await e.arrayBuffer())}return t instanceof ArrayBuffer?new Uint8Array(t):ArrayBuffer.isView(t)?new Uint8Array(t.buffer,t.byteOffset,t.byteLength):new Uint8Array(await t.arrayBuffer())}(t),e)}const w={id:"format-apng",version:e.RUNTIME_VERSION,requires:["core"],api:{parseApng:m,apngFramePngs:g,decodeApng:y,loadApng:p,animatedImagePlayer:o}};e.register(w),t.animatedImagePlayer=o,t.apngFramePngs=g,t.decodeApng=y,t.formatApng=w,t.loadApng=p,t.parseApng=m,t.pngChunks=l}(this.MotionaryRuntime=this.MotionaryRuntime||{},MotionaryRuntime,MotionaryRuntime);
2
+ //# sourceMappingURL=format-apng.iife.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"format-apng.iife.js","sources":["../../src/runtime/anim-image.ts","../../src/runtime/format-apng.ts","../../src/runtime/iife/format-apng.ts"],"sourcesContent":["/**\n * Shared internals of the animated-image loaders (`format-gif`, `format-apng`,\n * `format-webp`, 10.4): the decoded-animation shape, frame compositing in\n * plain RGBA arrays (no DOM — works in workers and on the server), the\n * browser image decoder used for APNG / WebP frames, and the canvas player\n * (a runtime `Playable`, so it can be paused, reversed, scrubbed and driven\n * by a scroll scene). Bundled into each loader; not a public module.\n */\nimport { Playable } from './tween';\n\n/** An RGBA bitmap (the shape of `ImageData`, without needing the DOM). */\nexport interface Rgba {\n width: number;\n height: number;\n data: Uint8ClampedArray;\n}\n\n/** One frame of an animation, already composited to the full canvas size. */\nexport interface AnimFrame {\n /** Display time, ms. */\n delay: number;\n image: Rgba;\n}\n\nexport interface AnimatedImage {\n format: 'gif' | 'apng' | 'webp';\n width: number;\n height: number;\n /** Number of plays: 0 = forever, 1 = once, … */\n plays: number;\n frames: AnimFrame[];\n}\n\n/** A frame region before compositing (APNG fcTL / WebP ANMF / GIF descriptor). */\nexport interface FramePart {\n x: number;\n y: number;\n image: Rgba;\n delay: number;\n /** 'over' alpha-blends onto the canvas, 'source' replaces the region. */\n blend: 'over' | 'source';\n /** What happens to the region after the frame is shown. */\n dispose: 'none' | 'background' | 'previous';\n}\n\n/** Browsers clamp tiny delays (0–10 ms) to 100 ms; we do the same. */\nexport const fixDelay = (ms: number): number => (ms <= 10 ? 100 : ms);\n\n/** Composite frame parts onto a `width × height` canvas (pure; RGBA in, RGBA out). */\nexport function composeFrames(width: number, height: number, parts: FramePart[], background?: [number, number, number, number]): AnimFrame[] {\n const canvas = new Uint8ClampedArray(width * height * 4);\n const out: AnimFrame[] = [];\n for (const p of parts) {\n const before = p.dispose === 'previous' ? canvas.slice() : null;\n const { width: w, height: h, data } = p.image;\n for (let y = 0; y < h; y++) {\n const cy = p.y + y;\n if (cy < 0 || cy >= height) continue;\n for (let x = 0; x < w; x++) {\n const cx = p.x + x;\n if (cx < 0 || cx >= width) continue;\n const s = (y * w + x) * 4, d = (cy * width + cx) * 4;\n const a = data[s + 3];\n if (p.blend === 'source' || a === 255) {\n canvas[d] = data[s]; canvas[d + 1] = data[s + 1]; canvas[d + 2] = data[s + 2]; canvas[d + 3] = a;\n } else if (a) {\n // straight-alpha \"over\"\n const da = canvas[d + 3] / 255, sa = a / 255, oa = sa + da * (1 - sa);\n for (let c = 0; c < 3; c++) canvas[d + c] = (data[s + c] * sa + canvas[d + c] * da * (1 - sa)) / oa;\n canvas[d + 3] = oa * 255;\n }\n }\n }\n out.push({ delay: p.delay, image: { width, height, data: canvas.slice() } });\n if (p.dispose === 'background') {\n for (let y = Math.max(0, p.y); y < Math.min(height, p.y + h); y++)\n for (let x = Math.max(0, p.x); x < Math.min(width, p.x + w); x++) canvas.set(background || [0, 0, 0, 0], (y * width + x) * 4);\n } else if (before) canvas.set(before);\n }\n return out;\n}\n\n/** Image decoder for one frame file (PNG / WebP bytes) → RGBA. Replaceable (workers, tests, servers). */\nexport type FrameDecoder = (bytes: Uint8Array, mime: string) => Promise<Rgba>;\n\n/** Default decoder: the browser's own (`createImageBitmap` + a 2D canvas; OffscreenCanvas in workers). */\nexport const browserDecode: FrameDecoder = async (bytes, mime) => {\n const g = globalThis as any;\n if (typeof g.createImageBitmap !== 'function') throw new Error('[motionary] no image decoder here (createImageBitmap is missing) — pass { decode } to the loader');\n const bmp = await g.createImageBitmap(new Blob([bytes as BlobPart], { type: mime }));\n const w = bmp.width, h = bmp.height; // read before close(): a closed ImageBitmap reports 0 × 0\n const c = typeof g.OffscreenCanvas === 'function' ? new g.OffscreenCanvas(w, h) : Object.assign(document.createElement('canvas'), { width: w, height: h });\n const ctx = c.getContext('2d', { willReadFrequently: true });\n ctx.drawImage(bmp, 0, 0);\n bmp.close?.();\n const id = ctx.getImageData(0, 0, w, h);\n return { width: id.width, height: id.height, data: id.data };\n};\n\n/** Read a `src` (URL, ArrayBuffer, typed array or Blob) into bytes. */\nexport async function bytesOf(src: string | ArrayBuffer | ArrayBufferView | Blob): Promise<Uint8Array> {\n if (typeof src === 'string') {\n const r = await fetch(src);\n if (!r.ok) throw new Error(`[motionary] could not load ${src} (${r.status})`);\n return new Uint8Array(await r.arrayBuffer());\n }\n if (src instanceof ArrayBuffer) return new Uint8Array(src);\n if (ArrayBuffer.isView(src)) return new Uint8Array(src.buffer, src.byteOffset, src.byteLength);\n return new Uint8Array(await (src as Blob).arrayBuffer());\n}\n\nexport interface AnimPlayerOptions {\n /** Extra repeats; default from the file (`plays`: 0 → forever). */\n repeat?: number;\n yoyo?: boolean;\n paused?: boolean;\n /** Playback speed (default 1). */\n speed?: number;\n}\n\nexport type AnimPlayer = Playable & { readonly frame: number; readonly frameCount: number };\n\nclass AnimImagePlayer extends Playable {\n private times: number[] = [0];\n private cur = -1;\n private ctx: CanvasRenderingContext2D | null;\n private datas: (ImageData | null)[];\n constructor(private canvas: HTMLCanvasElement | OffscreenCanvas, private anim: AnimatedImage, o: AnimPlayerOptions) {\n super({ repeat: o.repeat ?? (anim.plays === 0 ? -1 : Math.max(0, anim.plays - 1)), yoyo: o.yoyo });\n this.timeScale = o.speed || 1;\n for (const f of anim.frames) this.times.push(this.times[this.times.length - 1] + f.delay);\n if (canvas.width !== anim.width) canvas.width = anim.width;\n if (canvas.height !== anim.height) canvas.height = anim.height;\n this.ctx = canvas.getContext('2d') as CanvasRenderingContext2D | null;\n this.datas = anim.frames.map(() => null);\n this.show(0);\n if (!o.paused) this.play();\n }\n get duration(): number {\n return this.times[this.times.length - 1];\n }\n get frame(): number {\n return this.cur;\n }\n get frameCount(): number {\n return this.anim.frames.length;\n }\n protected renderLocal(ms: number): void {\n const t = Math.min(ms, this.duration - 0.001);\n let lo = 0, hi = this.anim.frames.length - 1;\n while (lo < hi) {\n const mid = (lo + hi + 1) >> 1;\n if (this.times[mid] <= t) lo = mid;\n else hi = mid - 1;\n }\n this.show(lo);\n }\n private show(i: number): void {\n if (i === this.cur || !this.ctx) return;\n this.cur = i;\n const f = this.anim.frames[i];\n if (!f) return;\n let d = this.datas[i];\n if (!d && typeof ImageData === 'function') d = this.datas[i] = new ImageData(new Uint8ClampedArray(f.image.data), f.image.width, f.image.height);\n if (d) this.ctx.putImageData(d, 0, 0);\n }\n}\n\n/** Play a decoded animation on a canvas as a runtime timeline (seek / reverse / `progress` scrub). */\nexport function animatedImagePlayer(canvas: HTMLCanvasElement | OffscreenCanvas, anim: AnimatedImage, o: AnimPlayerOptions = {}): AnimPlayer {\n if (!anim.frames.length) throw new Error('[motionary] animatedImagePlayer: the animation has no frames');\n return new AnimImagePlayer(canvas, anim, o);\n}\n\n/** A plain Uint8Array view (Node Buffers' `slice()` shares memory — normalise them away). */\nexport const u8 = (x: Uint8Array | ArrayBuffer): Uint8Array => (x instanceof ArrayBuffer ? new Uint8Array(x) : new Uint8Array(x.buffer, x.byteOffset, x.byteLength));\n\n/** CRC-32 (PNG chunks). */\nlet CRC: Uint32Array | null = null;\nexport function crc32(bytes: Uint8Array, start = 0, end = bytes.length): number {\n if (!CRC) {\n CRC = new Uint32Array(256);\n for (let n = 0; n < 256; n++) {\n let c = n;\n for (let k = 0; k < 8; k++) c = c & 1 ? 0xedb88320 ^ (c >>> 1) : c >>> 1;\n CRC[n] = c >>> 0;\n }\n }\n let c = 0xffffffff;\n for (let i = start; i < end; i++) c = CRC[(c ^ bytes[i]) & 0xff] ^ (c >>> 8);\n return (c ^ 0xffffffff) >>> 0;\n}\n","/**\n * `motionary/runtime/format-apng` (10.4) — animated PNG (APNG) loader written\n * for Motionary: reads `acTL` / `fcTL` / `fdAT`, rebuilds every frame as a\n * standalone PNG (header + palette / transparency chunks + its image data,\n * with fresh CRCs) and lets the browser's own PNG decoder decode it, then\n * composites the frames (`dispose_op` none / background / previous,\n * `blend_op` source / over) into full-size RGBA. A plain (non-animated) PNG\n * loads as a one-frame animation.\n *\n * `parseApng()` and `apngFramePngs()` are pure (no DOM); `decodeApng()` needs\n * an image decoder — the browser's by default (also in workers), or your own\n * via `{ decode }`.\n */\nimport { RUNTIME_VERSION, type RuntimeModule } from './registry';\nimport { composeFrames, fixDelay, bytesOf, browserDecode, crc32, animatedImagePlayer, u8, type AnimatedImage, type FramePart, type FrameDecoder } from './anim-image';\n\nexport type { AnimatedImage, AnimFrame, Rgba, AnimPlayer, AnimPlayerOptions, FrameDecoder } from './anim-image';\nexport { animatedImagePlayer } from './anim-image';\n\nconst SIG = [137, 80, 78, 71, 13, 10, 26, 10];\n\nexport interface ApngChunk {\n type: string;\n data: Uint8Array;\n}\n\nexport interface ApngFrameInfo {\n width: number;\n height: number;\n x: number;\n y: number;\n /** ms */\n delay: number;\n dispose: FramePart['dispose'];\n blend: FramePart['blend'];\n /** Image data (zlib stream pieces) of this frame. */\n data: Uint8Array[];\n}\n\nexport interface ApngInfo {\n width: number;\n height: number;\n /** acTL num_plays (0 = forever); 1 for a plain PNG. */\n plays: number;\n animated: boolean;\n /** The default image (IDAT) is not part of the animation. */\n hiddenDefault: boolean;\n frames: ApngFrameInfo[];\n /** Chunks copied into every frame PNG (PLTE, tRNS, gAMA, cHRM, sRGB, iCCP, sBIT). */\n shared: ApngChunk[];\n ihdr: Uint8Array;\n}\n\nconst u32 = (b: Uint8Array, i: number) => ((b[i] << 24) | (b[i + 1] << 16) | (b[i + 2] << 8) | b[i + 3]) >>> 0;\nconst u16 = (b: Uint8Array, i: number) => (b[i] << 8) | b[i + 1];\n\n/** Read the chunk list of a PNG / APNG (pure). */\nexport function pngChunks(b: Uint8Array): ApngChunk[] {\n for (let i = 0; i < 8; i++) if (b[i] !== SIG[i]) throw new Error('[motionary] format-apng: not a PNG file');\n const out: ApngChunk[] = [];\n let p = 8;\n while (p + 8 <= b.length) {\n const len = u32(b, p), type = String.fromCharCode(b[p + 4], b[p + 5], b[p + 6], b[p + 7]);\n out.push({ type, data: b.subarray(p + 8, p + 8 + len) });\n p += 12 + len;\n if (type === 'IEND') break;\n }\n return out;\n}\n\n/** Parse the animation structure (pure; no pixels decoded). */\nexport function parseApng(input: Uint8Array | ArrayBuffer): ApngInfo {\n const b = u8(input);\n const chunks = pngChunks(b);\n const ihdr = chunks[0]?.type === 'IHDR' ? chunks[0].data : null;\n if (!ihdr) throw new Error('[motionary] format-apng: missing IHDR');\n const width = u32(ihdr, 0), height = u32(ihdr, 4);\n const shared = chunks.filter((c) => /^(PLTE|tRNS|gAMA|cHRM|sRGB|iCCP|sBIT)$/.test(c.type));\n const actl = chunks.find((c) => c.type === 'acTL');\n const frames: ApngFrameInfo[] = [];\n let cur: ApngFrameInfo | null = null, sawIdat = false, idatHasFrame = false;\n const idat: Uint8Array[] = [];\n for (const c of chunks) {\n if (c.type === 'fcTL') {\n const d = c.data;\n const dn = u16(d, 20), dd = u16(d, 22) || 100;\n cur = { width: u32(d, 4), height: u32(d, 8), x: u32(d, 12), y: u32(d, 16), delay: fixDelay((dn / dd) * 1000), dispose: (['none', 'background', 'previous'] as const)[d[24]] || 'none', blend: d[25] === 1 ? 'over' : 'source', data: [] };\n frames.push(cur);\n if (!sawIdat) idatHasFrame = true;\n } else if (c.type === 'IDAT') {\n sawIdat = true;\n idat.push(c.data);\n if (cur && idatHasFrame) cur.data.push(c.data);\n } else if (c.type === 'fdAT' && cur) cur.data.push(c.data.subarray(4)); // drop the sequence number\n }\n if (!actl || !frames.length) {\n // a plain PNG: one frame, the whole image\n return { width, height, plays: 1, animated: false, hiddenDefault: false, frames: [{ width, height, x: 0, y: 0, delay: 100, dispose: 'none', blend: 'source', data: idat }], shared, ihdr };\n }\n // the first frame's dispose \"previous\" acts like \"background\" (spec)\n if (frames[0].dispose === 'previous') frames[0].dispose = 'background';\n return { width, height, plays: u32(actl.data, 4), animated: true, hiddenDefault: !idatHasFrame, frames, shared, ihdr };\n}\n\nfunction chunk(type: string, data: Uint8Array): Uint8Array {\n const out = new Uint8Array(12 + data.length);\n const v = new DataView(out.buffer);\n v.setUint32(0, data.length);\n for (let i = 0; i < 4; i++) out[4 + i] = type.charCodeAt(i);\n out.set(data, 8);\n v.setUint32(8 + data.length, crc32(out, 4, 8 + data.length));\n return out;\n}\n\n/** Rebuild every animation frame as a standalone PNG file (pure). */\nexport function apngFramePngs(info: ApngInfo): Uint8Array[] {\n return info.frames.map((f) => {\n const ihdr = new Uint8Array(info.ihdr); // a copy (never a Node Buffer view)\n const v = new DataView(ihdr.buffer);\n v.setUint32(0, f.width);\n v.setUint32(4, f.height);\n const parts = [new Uint8Array(SIG), chunk('IHDR', ihdr), ...info.shared.map((c) => chunk(c.type, c.data)), ...f.data.map((d) => chunk('IDAT', d)), chunk('IEND', new Uint8Array(0))];\n const out = new Uint8Array(parts.reduce((n, p) => n + p.length, 0));\n let o = 0;\n for (const p of parts) {\n out.set(p, o);\n o += p.length;\n }\n return out;\n });\n}\n\n/** Decode an APNG (or PNG) into composited RGBA frames. */\nexport async function decodeApng(input: Uint8Array | ArrayBuffer, o: { decode?: FrameDecoder } = {}): Promise<AnimatedImage & { info: ApngInfo }> {\n const info = parseApng(input);\n const decode = o.decode || browserDecode;\n const pngs = apngFramePngs(info);\n const images = await Promise.all(pngs.map((p) => decode(p, 'image/png')));\n const parts: FramePart[] = info.frames.map((f, i) => ({ x: f.x, y: f.y, image: images[i], delay: f.delay, blend: f.blend, dispose: f.dispose }));\n return { format: 'apng', width: info.width, height: info.height, plays: info.plays, frames: composeFrames(info.width, info.height, parts), info };\n}\n\n/** Fetch (URL) or read (ArrayBuffer / Blob / bytes) and decode an APNG. */\nexport async function loadApng(src: string | ArrayBuffer | ArrayBufferView | Blob, o: { decode?: FrameDecoder } = {}): Promise<AnimatedImage & { info: ApngInfo }> {\n return decodeApng(await bytesOf(src), o);\n}\n\nexport interface FormatApngApi {\n parseApng: typeof parseApng;\n apngFramePngs: typeof apngFramePngs;\n decodeApng: typeof decodeApng;\n loadApng: typeof loadApng;\n animatedImagePlayer: typeof animatedImagePlayer;\n}\n\n/** The module object for `use(formatApng)`. */\nexport const formatApng: RuntimeModule<FormatApngApi> = { id: 'format-apng', version: RUNTIME_VERSION, requires: ['core'], api: { parseApng, apngFramePngs, decodeApng, loadApng, animatedImagePlayer } };\n","// CDN build: load runtime.iife.js first, then this file → registers motionary/runtime/format-apng and adds its API to window.MotionaryRuntime.\nimport { register } from '../registry';\nimport { formatApng } from '../format-apng';\nexport * from '../format-apng';\nregister(formatApng);\n"],"names":["fixDelay","ms","composeFrames","width","height","parts","background","canvas","Uint8ClampedArray","out","p","before","dispose","slice","w","h","data","image","y","cy","x","cx","s","d","a","blend","da","sa","oa","c","push","delay","Math","max","min","set","browserDecode","async","bytes","mime","g","globalThis","createImageBitmap","Error","bmp","Blob","type","ctx","OffscreenCanvas","Object","assign","document","createElement","getContext","willReadFrequently","drawImage","close","id","getImageData","AnimImagePlayer","Playable","constructor","anim","o","super","repeat","plays","yoyo","this","times","cur","timeScale","speed","f","frames","length","datas","map","show","paused","play","duration","frame","frameCount","renderLocal","t","lo","hi","mid","i","ImageData","putImageData","animatedImagePlayer","CRC","SIG","u32","b","u16","pngChunks","len","String","fromCharCode","subarray","parseApng","input","chunks","ArrayBuffer","Uint8Array","buffer","byteOffset","byteLength","ihdr","shared","filter","test","actl","find","sawIdat","idatHasFrame","idat","dn","dd","animated","hiddenDefault","chunk","v","DataView","setUint32","charCodeAt","start","end","Uint32Array","n","k","crc32","apngFramePngs","info","reduce","decodeApng","decode","pngs","images","Promise","all","format","loadApng","src","r","fetch","ok","status","arrayBuffer","isView","bytesOf","formatApng","version","RUNTIME_VERSION","requires","api","register"],"mappings":"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"}