motionary 0.0.0-stage → 6.2.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 (374) hide show
  1. package/CHANGELOG.md +803 -0
  2. package/LICENSE +21 -0
  3. package/README.md +218 -2
  4. package/README_ja.md +219 -0
  5. package/README_zh.md +219 -0
  6. package/bin/usa-codemod-5.mjs +79 -0
  7. package/bin/usa-codemod-6.mjs +146 -0
  8. package/dist/chunks/base-BaQV-2ha.cjs +436 -0
  9. package/dist/chunks/base-BaQV-2ha.cjs.map +1 -0
  10. package/dist/chunks/base-C_3cAoRz.js +404 -0
  11. package/dist/chunks/base-C_3cAoRz.js.map +1 -0
  12. package/dist/chunks/bind-B_CTL6Qn.js +22 -0
  13. package/dist/chunks/bind-B_CTL6Qn.js.map +1 -0
  14. package/dist/chunks/bind-Ui43-n2d.cjs +25 -0
  15. package/dist/chunks/bind-Ui43-n2d.cjs.map +1 -0
  16. package/dist/chunks/core-B5T0dhFH.cjs +920 -0
  17. package/dist/chunks/core-B5T0dhFH.cjs.map +1 -0
  18. package/dist/chunks/core-BGAyaY6L.cjs +265 -0
  19. package/dist/chunks/core-BGAyaY6L.cjs.map +1 -0
  20. package/dist/chunks/core-D7cVumUu.js +909 -0
  21. package/dist/chunks/core-D7cVumUu.js.map +1 -0
  22. package/dist/chunks/core-VEBw36QK.js +260 -0
  23. package/dist/chunks/core-VEBw36QK.js.map +1 -0
  24. package/dist/chunks/core-ps8uvYuN.js +181 -0
  25. package/dist/chunks/core-ps8uvYuN.js.map +1 -0
  26. package/dist/chunks/core-zq17EeCI.cjs +185 -0
  27. package/dist/chunks/core-zq17EeCI.cjs.map +1 -0
  28. package/dist/chunks/fx-Bs6IrV4Q.js +109 -0
  29. package/dist/chunks/fx-Bs6IrV4Q.js.map +1 -0
  30. package/dist/chunks/fx-lBGVtQO1.cjs +114 -0
  31. package/dist/chunks/fx-lBGVtQO1.cjs.map +1 -0
  32. package/dist/chunks/generative-D2YyhaeO.js +336 -0
  33. package/dist/chunks/generative-D2YyhaeO.js.map +1 -0
  34. package/dist/chunks/generative-DzIZq-_g.cjs +348 -0
  35. package/dist/chunks/generative-DzIZq-_g.cjs.map +1 -0
  36. package/dist/chunks/gpu-Bu7qwugO.js +380 -0
  37. package/dist/chunks/gpu-Bu7qwugO.js.map +1 -0
  38. package/dist/chunks/gpu-CenK2l6b.cjs +387 -0
  39. package/dist/chunks/gpu-CenK2l6b.cjs.map +1 -0
  40. package/dist/chunks/index-tags-DucKMQr_.js +26 -0
  41. package/dist/chunks/index-tags-DucKMQr_.js.map +1 -0
  42. package/dist/chunks/index-tags-wv0R_vkO.cjs +28 -0
  43. package/dist/chunks/index-tags-wv0R_vkO.cjs.map +1 -0
  44. package/dist/chunks/presets-BYBVJVeP.js +226 -0
  45. package/dist/chunks/presets-BYBVJVeP.js.map +1 -0
  46. package/dist/chunks/presets-CUHys3sK.cjs +233 -0
  47. package/dist/chunks/presets-CUHys3sK.cjs.map +1 -0
  48. package/dist/chunks/registry-CKNLQpwd.js +121 -0
  49. package/dist/chunks/registry-CKNLQpwd.js.map +1 -0
  50. package/dist/chunks/registry-DehBVRDV.cjs +131 -0
  51. package/dist/chunks/registry-DehBVRDV.cjs.map +1 -0
  52. package/dist/chunks/spring-CbvHfVtP.js +219 -0
  53. package/dist/chunks/spring-CbvHfVtP.js.map +1 -0
  54. package/dist/chunks/spring-Dgx187Vh.cjs +232 -0
  55. package/dist/chunks/spring-Dgx187Vh.cjs.map +1 -0
  56. package/dist/chunks/stagger-CCFyhzSw.cjs +86 -0
  57. package/dist/chunks/stagger-CCFyhzSw.cjs.map +1 -0
  58. package/dist/chunks/stagger-DtMKo2SK.js +84 -0
  59. package/dist/chunks/stagger-DtMKo2SK.js.map +1 -0
  60. package/dist/chunks/variants-BhjyddG8.cjs +39 -0
  61. package/dist/chunks/variants-BhjyddG8.cjs.map +1 -0
  62. package/dist/chunks/variants-DRlKVHvu.js +35 -0
  63. package/dist/chunks/variants-DRlKVHvu.js.map +1 -0
  64. package/dist/components/a11y.cjs +276 -0
  65. package/dist/components/a11y.cjs.map +1 -0
  66. package/dist/components/a11y.d.cts +131 -0
  67. package/dist/components/a11y.d.ts +131 -0
  68. package/dist/components/a11y.js +259 -0
  69. package/dist/components/a11y.js.map +1 -0
  70. package/dist/components/angular.cjs +76 -0
  71. package/dist/components/angular.cjs.map +1 -0
  72. package/dist/components/angular.d.cts +1734 -0
  73. package/dist/components/angular.d.ts +1734 -0
  74. package/dist/components/angular.js +70 -0
  75. package/dist/components/angular.js.map +1 -0
  76. package/dist/components/background.cjs +659 -0
  77. package/dist/components/background.cjs.map +1 -0
  78. package/dist/components/background.css +9 -0
  79. package/dist/components/background.d.cts +166 -0
  80. package/dist/components/background.d.ts +166 -0
  81. package/dist/components/background.js +647 -0
  82. package/dist/components/background.js.map +1 -0
  83. package/dist/components/bridge.cjs +154 -0
  84. package/dist/components/bridge.cjs.map +1 -0
  85. package/dist/components/bridge.d.cts +63 -0
  86. package/dist/components/bridge.d.ts +63 -0
  87. package/dist/components/bridge.js +147 -0
  88. package/dist/components/bridge.js.map +1 -0
  89. package/dist/components/cards.cjs +561 -0
  90. package/dist/components/cards.cjs.map +1 -0
  91. package/dist/components/cards.css +6 -0
  92. package/dist/components/cards.d.cts +115 -0
  93. package/dist/components/cards.d.ts +115 -0
  94. package/dist/components/cards.js +554 -0
  95. package/dist/components/cards.js.map +1 -0
  96. package/dist/components/click.cjs +877 -0
  97. package/dist/components/click.cjs.map +1 -0
  98. package/dist/components/click.css +9 -0
  99. package/dist/components/click.d.cts +218 -0
  100. package/dist/components/click.d.ts +218 -0
  101. package/dist/components/click.js +863 -0
  102. package/dist/components/click.js.map +1 -0
  103. package/dist/components/depth.cjs +250 -0
  104. package/dist/components/depth.cjs.map +1 -0
  105. package/dist/components/depth.css +3 -0
  106. package/dist/components/depth.d.cts +86 -0
  107. package/dist/components/depth.d.ts +86 -0
  108. package/dist/components/depth.js +242 -0
  109. package/dist/components/depth.js.map +1 -0
  110. package/dist/components/effects.cjs +2258 -0
  111. package/dist/components/effects.cjs.map +1 -0
  112. package/dist/components/effects.d.cts +545 -0
  113. package/dist/components/effects.d.ts +545 -0
  114. package/dist/components/effects.js +2200 -0
  115. package/dist/components/effects.js.map +1 -0
  116. package/dist/components/feedback.cjs +442 -0
  117. package/dist/components/feedback.cjs.map +1 -0
  118. package/dist/components/feedback.css +7 -0
  119. package/dist/components/feedback.d.cts +144 -0
  120. package/dist/components/feedback.d.ts +144 -0
  121. package/dist/components/feedback.js +433 -0
  122. package/dist/components/feedback.js.map +1 -0
  123. package/dist/components/fx-gpu.cjs +12 -0
  124. package/dist/components/fx-gpu.cjs.map +1 -0
  125. package/dist/components/fx-gpu.d.cts +63 -0
  126. package/dist/components/fx-gpu.d.ts +63 -0
  127. package/dist/components/fx-gpu.js +5 -0
  128. package/dist/components/fx-gpu.js.map +1 -0
  129. package/dist/components/fx.cjs +169 -0
  130. package/dist/components/fx.cjs.map +1 -0
  131. package/dist/components/fx.css +3 -0
  132. package/dist/components/fx.d.cts +114 -0
  133. package/dist/components/fx.d.ts +114 -0
  134. package/dist/components/fx.js +156 -0
  135. package/dist/components/fx.js.map +1 -0
  136. package/dist/components/fx2.cjs +25 -0
  137. package/dist/components/fx2.cjs.map +1 -0
  138. package/dist/components/fx2.d.cts +136 -0
  139. package/dist/components/fx2.d.ts +136 -0
  140. package/dist/components/fx2.js +17 -0
  141. package/dist/components/fx2.js.map +1 -0
  142. package/dist/components/gesture.cjs +209 -0
  143. package/dist/components/gesture.cjs.map +1 -0
  144. package/dist/components/gesture.css +3 -0
  145. package/dist/components/gesture.d.cts +134 -0
  146. package/dist/components/gesture.d.ts +134 -0
  147. package/dist/components/gesture.js +203 -0
  148. package/dist/components/gesture.js.map +1 -0
  149. package/dist/components/interaction.cjs +424 -0
  150. package/dist/components/interaction.cjs.map +1 -0
  151. package/dist/components/interaction.css +8 -0
  152. package/dist/components/interaction.d.cts +115 -0
  153. package/dist/components/interaction.d.ts +115 -0
  154. package/dist/components/interaction.js +416 -0
  155. package/dist/components/interaction.js.map +1 -0
  156. package/dist/components/jsx.cjs +3 -0
  157. package/dist/components/jsx.cjs.map +1 -0
  158. package/dist/components/jsx.d.cts +53 -0
  159. package/dist/components/jsx.d.ts +53 -0
  160. package/dist/components/jsx.js +2 -0
  161. package/dist/components/jsx.js.map +1 -0
  162. package/dist/components/layout.cjs +257 -0
  163. package/dist/components/layout.cjs.map +1 -0
  164. package/dist/components/layout.css +3 -0
  165. package/dist/components/layout.d.cts +99 -0
  166. package/dist/components/layout.d.ts +99 -0
  167. package/dist/components/layout.js +249 -0
  168. package/dist/components/layout.js.map +1 -0
  169. package/dist/components/lazy.cjs +92 -0
  170. package/dist/components/lazy.cjs.map +1 -0
  171. package/dist/components/lazy.d.cts +48 -0
  172. package/dist/components/lazy.d.ts +48 -0
  173. package/dist/components/lazy.js +87 -0
  174. package/dist/components/lazy.js.map +1 -0
  175. package/dist/components/lite.cjs +11095 -0
  176. package/dist/components/lite.cjs.map +1 -0
  177. package/dist/components/lite.d.cts +4 -0
  178. package/dist/components/lite.d.ts +4 -0
  179. package/dist/components/lite.js +10827 -0
  180. package/dist/components/lite.js.map +1 -0
  181. package/dist/components/packs.cjs +192 -0
  182. package/dist/components/packs.cjs.map +1 -0
  183. package/dist/components/packs.css +3 -0
  184. package/dist/components/packs.d.cts +72 -0
  185. package/dist/components/packs.d.ts +72 -0
  186. package/dist/components/packs.js +184 -0
  187. package/dist/components/packs.js.map +1 -0
  188. package/dist/components/page.cjs +824 -0
  189. package/dist/components/page.cjs.map +1 -0
  190. package/dist/components/page.css +11 -0
  191. package/dist/components/page.d.cts +249 -0
  192. package/dist/components/page.d.ts +249 -0
  193. package/dist/components/page.js +799 -0
  194. package/dist/components/page.js.map +1 -0
  195. package/dist/components/perf.cjs +120 -0
  196. package/dist/components/perf.cjs.map +1 -0
  197. package/dist/components/perf.d.cts +98 -0
  198. package/dist/components/perf.d.ts +98 -0
  199. package/dist/components/perf.js +110 -0
  200. package/dist/components/perf.js.map +1 -0
  201. package/dist/components/physics.cjs +448 -0
  202. package/dist/components/physics.cjs.map +1 -0
  203. package/dist/components/physics.css +5 -0
  204. package/dist/components/physics.d.cts +189 -0
  205. package/dist/components/physics.d.ts +189 -0
  206. package/dist/components/physics.js +430 -0
  207. package/dist/components/physics.js.map +1 -0
  208. package/dist/components/react.cjs +96 -0
  209. package/dist/components/react.cjs.map +1 -0
  210. package/dist/components/react.d.cts +18 -0
  211. package/dist/components/react.d.ts +18 -0
  212. package/dist/components/react.js +91 -0
  213. package/dist/components/react.js.map +1 -0
  214. package/dist/components/reveal.cjs +362 -0
  215. package/dist/components/reveal.cjs.map +1 -0
  216. package/dist/components/reveal.css +5 -0
  217. package/dist/components/reveal.d.cts +105 -0
  218. package/dist/components/reveal.d.ts +105 -0
  219. package/dist/components/reveal.js +353 -0
  220. package/dist/components/reveal.js.map +1 -0
  221. package/dist/components/solid.cjs +86 -0
  222. package/dist/components/solid.cjs.map +1 -0
  223. package/dist/components/solid.d.cts +1751 -0
  224. package/dist/components/solid.d.ts +1751 -0
  225. package/dist/components/solid.js +82 -0
  226. package/dist/components/solid.js.map +1 -0
  227. package/dist/components/svelte.cjs +68 -0
  228. package/dist/components/svelte.cjs.map +1 -0
  229. package/dist/components/svelte.d.cts +1733 -0
  230. package/dist/components/svelte.d.ts +1733 -0
  231. package/dist/components/svelte.js +64 -0
  232. package/dist/components/svelte.js.map +1 -0
  233. package/dist/components/svg.cjs +359 -0
  234. package/dist/components/svg.cjs.map +1 -0
  235. package/dist/components/svg.css +3 -0
  236. package/dist/components/svg.d.cts +113 -0
  237. package/dist/components/svg.d.ts +113 -0
  238. package/dist/components/svg.js +347 -0
  239. package/dist/components/svg.js.map +1 -0
  240. package/dist/components/text.cjs +968 -0
  241. package/dist/components/text.cjs.map +1 -0
  242. package/dist/components/text.css +8 -0
  243. package/dist/components/text.d.cts +342 -0
  244. package/dist/components/text.d.ts +342 -0
  245. package/dist/components/text.js +947 -0
  246. package/dist/components/text.js.map +1 -0
  247. package/dist/components/timeline.cjs +109 -0
  248. package/dist/components/timeline.cjs.map +1 -0
  249. package/dist/components/timeline.css +3 -0
  250. package/dist/components/timeline.d.cts +155 -0
  251. package/dist/components/timeline.d.ts +155 -0
  252. package/dist/components/timeline.js +103 -0
  253. package/dist/components/timeline.js.map +1 -0
  254. package/dist/components/tokens.cjs +226 -0
  255. package/dist/components/tokens.cjs.map +1 -0
  256. package/dist/components/tokens.d.cts +74 -0
  257. package/dist/components/tokens.d.ts +74 -0
  258. package/dist/components/tokens.js +211 -0
  259. package/dist/components/tokens.js.map +1 -0
  260. package/dist/components/transitions.cjs +430 -0
  261. package/dist/components/transitions.cjs.map +1 -0
  262. package/dist/components/transitions.css +5 -0
  263. package/dist/components/transitions.d.cts +126 -0
  264. package/dist/components/transitions.d.ts +126 -0
  265. package/dist/components/transitions.js +423 -0
  266. package/dist/components/transitions.js.map +1 -0
  267. package/dist/components/ui.cjs +1050 -0
  268. package/dist/components/ui.cjs.map +1 -0
  269. package/dist/components/ui.css +14 -0
  270. package/dist/components/ui.d.cts +224 -0
  271. package/dist/components/ui.d.ts +224 -0
  272. package/dist/components/ui.js +1034 -0
  273. package/dist/components/ui.js.map +1 -0
  274. package/dist/components/vue.cjs +67 -0
  275. package/dist/components/vue.cjs.map +1 -0
  276. package/dist/components/vue.d.cts +1722 -0
  277. package/dist/components/vue.d.ts +1722 -0
  278. package/dist/components/vue.js +64 -0
  279. package/dist/components/vue.js.map +1 -0
  280. package/dist/components/webgl.cjs +459 -0
  281. package/dist/components/webgl.cjs.map +1 -0
  282. package/dist/components/webgl.css +3 -0
  283. package/dist/components/webgl.d.cts +133 -0
  284. package/dist/components/webgl.d.ts +133 -0
  285. package/dist/components/webgl.js +442 -0
  286. package/dist/components/webgl.js.map +1 -0
  287. package/dist/components/widgets.cjs +591 -0
  288. package/dist/components/widgets.cjs.map +1 -0
  289. package/dist/components/widgets.d.cts +110 -0
  290. package/dist/components/widgets.d.ts +110 -0
  291. package/dist/components/widgets.js +581 -0
  292. package/dist/components/widgets.js.map +1 -0
  293. package/dist/components.cjs +351 -0
  294. package/dist/components.cjs.map +1 -0
  295. package/dist/components.css +75 -0
  296. package/dist/components.d.cts +2997 -0
  297. package/dist/components.d.ts +2997 -0
  298. package/dist/components.js +106 -0
  299. package/dist/components.js.map +1 -0
  300. package/dist/components.umd.js +23 -0
  301. package/dist/components.umd.js.map +1 -0
  302. package/dist/element.cjs +97 -0
  303. package/dist/element.cjs.map +1 -0
  304. package/dist/element.d.cts +215 -0
  305. package/dist/element.d.ts +215 -0
  306. package/dist/element.js +95 -0
  307. package/dist/element.js.map +1 -0
  308. package/dist/element.umd.js +2 -0
  309. package/dist/element.umd.js.map +1 -0
  310. package/dist/index.cjs +149 -0
  311. package/dist/index.cjs.map +1 -0
  312. package/dist/index.d.cts +425 -0
  313. package/dist/index.d.ts +425 -0
  314. package/dist/index.js +131 -0
  315. package/dist/index.js.map +1 -0
  316. package/dist/index.umd.js +15 -0
  317. package/dist/index.umd.js.map +1 -0
  318. package/dist/presets/extended.cjs +243 -0
  319. package/dist/presets/extended.cjs.map +1 -0
  320. package/dist/presets/extended.d.cts +37 -0
  321. package/dist/presets/extended.d.ts +37 -0
  322. package/dist/presets/extended.js +239 -0
  323. package/dist/presets/extended.js.map +1 -0
  324. package/dist/presets-extended.umd.js +2 -0
  325. package/dist/presets-extended.umd.js.map +1 -0
  326. package/dist/react.cjs +68 -0
  327. package/dist/react.cjs.map +1 -0
  328. package/dist/react.d.cts +158 -0
  329. package/dist/react.d.ts +158 -0
  330. package/dist/react.js +65 -0
  331. package/dist/react.js.map +1 -0
  332. package/dist/solid.cjs +93 -0
  333. package/dist/solid.cjs.map +1 -0
  334. package/dist/solid.d.cts +249 -0
  335. package/dist/solid.d.ts +249 -0
  336. package/dist/solid.js +89 -0
  337. package/dist/solid.js.map +1 -0
  338. package/dist/svelte.cjs +66 -0
  339. package/dist/svelte.cjs.map +1 -0
  340. package/dist/svelte.d.cts +243 -0
  341. package/dist/svelte.d.ts +243 -0
  342. package/dist/svelte.js +63 -0
  343. package/dist/svelte.js.map +1 -0
  344. package/dist/vue.cjs +62 -0
  345. package/dist/vue.cjs.map +1 -0
  346. package/dist/vue.d.cts +158 -0
  347. package/dist/vue.d.ts +158 -0
  348. package/dist/vue.js +60 -0
  349. package/dist/vue.js.map +1 -0
  350. package/dist/widgets.umd.js +2 -0
  351. package/dist/widgets.umd.js.map +1 -0
  352. package/docs/API.md +147 -0
  353. package/docs/ROADMAP.md +14 -0
  354. package/docs/accessibility.md +60 -0
  355. package/docs/components.md +564 -0
  356. package/docs/deprecations.md +30 -0
  357. package/docs/frameworks-ssr.md +100 -0
  358. package/docs/hybrid-apps.md +145 -0
  359. package/docs/images/showcase-detail.png +0 -0
  360. package/docs/images/showcase-grid.png +0 -0
  361. package/docs/images/showcase-mobile.png +0 -0
  362. package/docs/migration-from-aos.md +67 -0
  363. package/docs/migration-from-gsap-scrolltrigger.md +80 -0
  364. package/docs/motion-tokens.css +31 -0
  365. package/docs/motion-tokens.md +46 -0
  366. package/docs/motion.tokens.json +132 -0
  367. package/docs/performance.md +24 -0
  368. package/docs/presets.md +310 -0
  369. package/docs/upgrading-3.md +21 -0
  370. package/docs/upgrading-4.md +65 -0
  371. package/docs/upgrading-5.md +31 -0
  372. package/docs/upgrading-6.md +32 -0
  373. package/docs/windows-apps.md +119 -0
  374. package/package.json +562 -4
@@ -0,0 +1 @@
1
+ {"version":3,"file":"presets-extended.umd.js","sources":["../src/extended-presets-data.ts","../src/extended-presets-umd.ts"],"sourcesContent":["/**\n * motionary — extended preset data (\"Scroll presets 2.0\", v6.1).\n * GENERATED by the release tooling from one source list; edit with care and keep\n * `ExtendedPreset` (src/types.ts) and showcase/catalog-extended.js in sync (tests check it).\n * Pure data: no side effects. Register with `registerPresets(EXTENDED_PRESETS)` or import\n * 'motionary/presets/extended' (registers on import).\n */\nimport type { ExtendedPreset, PresetKeyframes } from './types';\n\nexport const EXTENDED_PRESETS: Record<ExtendedPreset, PresetKeyframes> = {\n // Fade\n 'fade-in-up-sm': { from: { opacity: 0, transform: 'translateY(16px)' }, to: { opacity: 1, transform: 'translateY(0px)' } },\n 'fade-in-down-sm': { from: { opacity: 0, transform: 'translateY(-16px)' }, to: { opacity: 1, transform: 'translateY(0px)' } },\n 'fade-in-left-sm': { from: { opacity: 0, transform: 'translateX(-16px)' }, to: { opacity: 1, transform: 'translateX(0px)' } },\n 'fade-in-right-sm': { from: { opacity: 0, transform: 'translateX(16px)' }, to: { opacity: 1, transform: 'translateX(0px)' } },\n 'fade-in-up-lg': { from: { opacity: 0, transform: 'translateY(120px)' }, to: { opacity: 1, transform: 'translateY(0px)' } },\n 'fade-in-down-lg': { from: { opacity: 0, transform: 'translateY(-120px)' }, to: { opacity: 1, transform: 'translateY(0px)' } },\n 'fade-in-left-lg': { from: { opacity: 0, transform: 'translateX(-120px)' }, to: { opacity: 1, transform: 'translateX(0px)' } },\n 'fade-in-right-lg': { from: { opacity: 0, transform: 'translateX(120px)' }, to: { opacity: 1, transform: 'translateX(0px)' } },\n 'fade-in-up-left': { from: { opacity: 0, transform: 'translate(-40px, 40px)' }, to: { opacity: 1, transform: 'translate(0px, 0px)' } },\n 'fade-in-up-right': { from: { opacity: 0, transform: 'translate(40px, 40px)' }, to: { opacity: 1, transform: 'translate(0px, 0px)' } },\n 'fade-in-down-left': { from: { opacity: 0, transform: 'translate(-40px, -40px)' }, to: { opacity: 1, transform: 'translate(0px, 0px)' } },\n 'fade-in-down-right': { from: { opacity: 0, transform: 'translate(40px, -40px)' }, to: { opacity: 1, transform: 'translate(0px, 0px)' } },\n 'fade-in-scale': { from: { opacity: 0, transform: 'translateY(20px) scale(0.95)' }, to: { opacity: 1, transform: 'translateY(0px) scale(1)' } },\n 'fade-in-half': { from: { opacity: 0.5 }, to: { opacity: 1 } },\n // Zoom & scale\n 'zoom-in-up': { from: { opacity: 0, transform: 'translateY(60px) scale(0.6)' }, to: { opacity: 1, transform: 'translateY(0px) scale(1)' } },\n 'zoom-in-down': { from: { opacity: 0, transform: 'translateY(-60px) scale(0.6)' }, to: { opacity: 1, transform: 'translateY(0px) scale(1)' } },\n 'zoom-in-left': { from: { opacity: 0, transform: 'translateX(-60px) scale(0.6)' }, to: { opacity: 1, transform: 'translateX(0px) scale(1)' } },\n 'zoom-in-right': { from: { opacity: 0, transform: 'translateX(60px) scale(0.6)' }, to: { opacity: 1, transform: 'translateX(0px) scale(1)' } },\n 'zoom-out-up': { from: { opacity: 0, transform: 'translateY(60px) scale(1.4)' }, to: { opacity: 1, transform: 'translateY(0px) scale(1)' } },\n 'zoom-out-down': { from: { opacity: 0, transform: 'translateY(-60px) scale(1.4)' }, to: { opacity: 1, transform: 'translateY(0px) scale(1)' } },\n 'zoom-out-left': { from: { opacity: 0, transform: 'translateX(-60px) scale(1.4)' }, to: { opacity: 1, transform: 'translateX(0px) scale(1)' } },\n 'zoom-out-right': { from: { opacity: 0, transform: 'translateX(60px) scale(1.4)' }, to: { opacity: 1, transform: 'translateX(0px) scale(1)' } },\n 'zoom-in-big': { from: { opacity: 0, transform: 'scale(0)' }, to: { opacity: 1, transform: 'scale(1)' } },\n 'zoom-out-big': { from: { opacity: 0, transform: 'scale(2)' }, to: { opacity: 1, transform: 'scale(1)' } },\n 'zoom-bounce': { from: { opacity: 0, transform: 'scale(0.3)' }, to: { opacity: 1, transform: 'scale(1)' }, frames: [{ offset: 0.5, opacity: 1, transform: 'scale(1.1)' }, { offset: 0.75, transform: 'scale(0.95)' }] },\n 'zoom-in-rotate': { from: { opacity: 0, transform: 'rotate(-30deg) scale(0.5)' }, to: { opacity: 1, transform: 'rotate(0deg) scale(1)' } },\n 'scale-x-left': { from: { transform: 'scaleX(0)', transformOrigin: 'left center' }, to: { transform: 'scaleX(1)', transformOrigin: 'left center' } },\n 'scale-x-right': { from: { transform: 'scaleX(0)', transformOrigin: 'right center' }, to: { transform: 'scaleX(1)', transformOrigin: 'right center' } },\n 'scale-y-top': { from: { transform: 'scaleY(0)', transformOrigin: 'center top' }, to: { transform: 'scaleY(1)', transformOrigin: 'center top' } },\n 'scale-y-bottom': { from: { transform: 'scaleY(0)', transformOrigin: 'center bottom' }, to: { transform: 'scaleY(1)', transformOrigin: 'center bottom' } },\n 'stretch-x': { from: { opacity: 0, transform: 'scale(1.6, 0.6)' }, to: { opacity: 1, transform: 'scale(1, 1)' } },\n 'stretch-y': { from: { opacity: 0, transform: 'scale(0.6, 1.6)' }, to: { opacity: 1, transform: 'scale(1, 1)' } },\n // Flip 3D\n 'flip-x-reverse': { from: { opacity: 0, transform: 'perspective(800px) rotateX(90deg)' }, to: { opacity: 1, transform: 'perspective(800px) rotateX(0deg)' } },\n 'flip-y-reverse': { from: { opacity: 0, transform: 'perspective(800px) rotateY(90deg)' }, to: { opacity: 1, transform: 'perspective(800px) rotateY(0deg)' } },\n 'flip-y-full': { from: { opacity: 0, transform: 'perspective(800px) rotateY(-180deg)' }, to: { opacity: 1, transform: 'perspective(800px) rotateY(0deg)' } },\n 'flip-diagonal': { from: { opacity: 0, transform: 'perspective(800px) rotate3d(1, 1, 0, 90deg)' }, to: { opacity: 1, transform: 'perspective(800px) rotate3d(1, 1, 0, 0deg)' } },\n 'flip-diagonal-reverse': { from: { opacity: 0, transform: 'perspective(800px) rotate3d(1, -1, 0, 90deg)' }, to: { opacity: 1, transform: 'perspective(800px) rotate3d(1, -1, 0, 0deg)' } },\n 'flip-left': { from: { opacity: 0, transform: 'perspective(800px) rotateY(-70deg)', transformOrigin: 'left center' }, to: { opacity: 1, transform: 'perspective(800px) rotateY(0deg)', transformOrigin: 'left center' } },\n 'flip-right': { from: { opacity: 0, transform: 'perspective(800px) rotateY(70deg)', transformOrigin: 'right center' }, to: { opacity: 1, transform: 'perspective(800px) rotateY(0deg)', transformOrigin: 'right center' } },\n 'unfold-down': { from: { opacity: 0, transform: 'perspective(800px) rotateX(-90deg)', transformOrigin: 'center top' }, to: { opacity: 1, transform: 'perspective(800px) rotateX(0deg)', transformOrigin: 'center top' } },\n 'unfold-up': { from: { opacity: 0, transform: 'perspective(800px) rotateX(90deg)', transformOrigin: 'center bottom' }, to: { opacity: 1, transform: 'perspective(800px) rotateX(0deg)', transformOrigin: 'center bottom' } },\n 'door-open-left': { from: { transform: 'perspective(800px) rotateY(-100deg)', transformOrigin: 'left center' }, to: { transform: 'perspective(800px) rotateY(0deg)', transformOrigin: 'left center' } },\n 'door-open-right': { from: { transform: 'perspective(800px) rotateY(100deg)', transformOrigin: 'right center' }, to: { transform: 'perspective(800px) rotateY(0deg)', transformOrigin: 'right center' } },\n 'fold-in': { from: { opacity: 0, transform: 'perspective(800px) rotateX(80deg) scaleY(0.4)' }, to: { opacity: 1, transform: 'perspective(800px) rotateX(0deg) scaleY(1)' } },\n 'flip-x-bounce': { from: { opacity: 0, transform: 'perspective(800px) rotateX(90deg)' }, to: { opacity: 1, transform: 'perspective(800px) rotateX(0deg)' }, frames: [{ offset: 0.4, opacity: 1, transform: 'perspective(800px) rotateX(-20deg)' }, { offset: 0.6, transform: 'perspective(800px) rotateX(10deg)' }, { offset: 0.8, transform: 'perspective(800px) rotateX(-5deg)' }] },\n 'flip-y-bounce': { from: { opacity: 0, transform: 'perspective(800px) rotateY(90deg)' }, to: { opacity: 1, transform: 'perspective(800px) rotateY(0deg)' }, frames: [{ offset: 0.4, opacity: 1, transform: 'perspective(800px) rotateY(-20deg)' }, { offset: 0.6, transform: 'perspective(800px) rotateY(10deg)' }, { offset: 0.8, transform: 'perspective(800px) rotateY(-5deg)' }] },\n 'swing-in-top': { from: { opacity: 0, transform: 'perspective(800px) rotateX(-100deg)', transformOrigin: 'center top' }, to: { opacity: 1, transform: 'perspective(800px) rotateX(0deg)', transformOrigin: 'center top' }, frames: [{ offset: 0.6, opacity: 1, transform: 'perspective(800px) rotateX(12deg)' }, { offset: 0.8, transform: 'perspective(800px) rotateX(-5deg)' }] },\n 'swing-in-bottom': { from: { opacity: 0, transform: 'perspective(800px) rotateX(100deg)', transformOrigin: 'center bottom' }, to: { opacity: 1, transform: 'perspective(800px) rotateX(0deg)', transformOrigin: 'center bottom' }, frames: [{ offset: 0.6, opacity: 1, transform: 'perspective(800px) rotateX(-12deg)' }, { offset: 0.8, transform: 'perspective(800px) rotateX(5deg)' }] },\n 'swing-in-left': { from: { opacity: 0, transform: 'perspective(800px) rotateY(100deg)', transformOrigin: 'left center' }, to: { opacity: 1, transform: 'perspective(800px) rotateY(0deg)', transformOrigin: 'left center' }, frames: [{ offset: 0.6, opacity: 1, transform: 'perspective(800px) rotateY(-12deg)' }, { offset: 0.8, transform: 'perspective(800px) rotateY(5deg)' }] },\n 'swing-in-right': { from: { opacity: 0, transform: 'perspective(800px) rotateY(-100deg)', transformOrigin: 'right center' }, to: { opacity: 1, transform: 'perspective(800px) rotateY(0deg)', transformOrigin: 'right center' }, frames: [{ offset: 0.6, opacity: 1, transform: 'perspective(800px) rotateY(12deg)' }, { offset: 0.8, transform: 'perspective(800px) rotateY(-5deg)' }] },\n // Slide\n 'slide-up-spring': { from: { transform: 'translateY(100%)' }, to: { transform: 'translateY(0%)' }, frames: [{ offset: 0.7, transform: 'translateY(-8%)' }] },\n 'slide-down-spring': { from: { transform: 'translateY(-100%)' }, to: { transform: 'translateY(0%)' }, frames: [{ offset: 0.7, transform: 'translateY(8%)' }] },\n 'slide-left-spring': { from: { transform: 'translateX(-100%)' }, to: { transform: 'translateX(0%)' }, frames: [{ offset: 0.7, transform: 'translateX(8%)' }] },\n 'slide-right-spring': { from: { transform: 'translateX(100%)' }, to: { transform: 'translateX(0%)' }, frames: [{ offset: 0.7, transform: 'translateX(-8%)' }] },\n 'slide-up-sm': { from: { transform: 'translateY(30%)' }, to: { transform: 'translateY(0%)' } },\n 'slide-down-sm': { from: { transform: 'translateY(-30%)' }, to: { transform: 'translateY(0%)' } },\n 'back-in-up': { from: { opacity: 0, transform: 'translateY(120px) scale(0.7)' }, to: { opacity: 1, transform: 'translateY(0px) scale(1)' }, frames: [{ offset: 0.7, opacity: 0.8, transform: 'translateY(0px) scale(0.7)' }] },\n 'back-in-down': { from: { opacity: 0, transform: 'translateY(-120px) scale(0.7)' }, to: { opacity: 1, transform: 'translateY(0px) scale(1)' }, frames: [{ offset: 0.7, opacity: 0.8, transform: 'translateY(0px) scale(0.7)' }] },\n 'back-in-left': { from: { opacity: 0, transform: 'translateX(-120px) scale(0.7)' }, to: { opacity: 1, transform: 'translateX(0px) scale(1)' }, frames: [{ offset: 0.7, opacity: 0.8, transform: 'translateX(0px) scale(0.7)' }] },\n 'back-in-right': { from: { opacity: 0, transform: 'translateX(120px) scale(0.7)' }, to: { opacity: 1, transform: 'translateX(0px) scale(1)' }, frames: [{ offset: 0.7, opacity: 0.8, transform: 'translateX(0px) scale(0.7)' }] },\n 'light-speed-in-left': { from: { opacity: 0, transform: 'translateX(-100%) skewX(30deg)' }, to: { opacity: 1, transform: 'translateX(0%) skewX(0deg)' }, frames: [{ offset: 0.6, opacity: 1, transform: 'translateX(0%) skewX(-20deg)' }, { offset: 0.8, transform: 'translateX(0%) skewX(5deg)' }] },\n 'light-speed-in-right': { from: { opacity: 0, transform: 'translateX(100%) skewX(-30deg)' }, to: { opacity: 1, transform: 'translateX(0%) skewX(0deg)' }, frames: [{ offset: 0.6, opacity: 1, transform: 'translateX(0%) skewX(20deg)' }, { offset: 0.8, transform: 'translateX(0%) skewX(-5deg)' }] },\n 'rise-in': { from: { opacity: 0, transform: 'translateY(80px) scale(0.96)' }, to: { opacity: 1, transform: 'translateY(0px) scale(1)' } },\n 'sink-in': { from: { opacity: 0, transform: 'translateY(-80px) scale(1.04)' }, to: { opacity: 1, transform: 'translateY(0px) scale(1)' } },\n 'float-in-up': { from: { opacity: 0, transform: 'translateY(40px) rotate(-3deg)' }, to: { opacity: 1, transform: 'translateY(0px) rotate(0deg)' }, frames: [{ offset: 0.6, opacity: 1, transform: 'translateY(-6px) rotate(1deg)' }] },\n 'float-in-down': { from: { opacity: 0, transform: 'translateY(-40px) rotate(3deg)' }, to: { opacity: 1, transform: 'translateY(0px) rotate(0deg)' }, frames: [{ offset: 0.6, opacity: 1, transform: 'translateY(6px) rotate(-1deg)' }] },\n // Rotate & skew\n 'roll-in-left': { from: { opacity: 0, transform: 'translateX(-120%) rotate(-120deg)' }, to: { opacity: 1, transform: 'translateX(0%) rotate(0deg)' } },\n 'roll-in-right': { from: { opacity: 0, transform: 'translateX(120%) rotate(120deg)' }, to: { opacity: 1, transform: 'translateX(0%) rotate(0deg)' } },\n 'spiral-in': { from: { opacity: 0, transform: 'rotate(-540deg) scale(0)' }, to: { opacity: 1, transform: 'rotate(0deg) scale(1)' } },\n 'spiral-in-reverse': { from: { opacity: 0, transform: 'rotate(540deg) scale(0)' }, to: { opacity: 1, transform: 'rotate(0deg) scale(1)' } },\n 'spin-in': { from: { opacity: 0, transform: 'rotate(-360deg)' }, to: { opacity: 1, transform: 'rotate(0deg)' } },\n 'rotate-in-up-left': { from: { opacity: 0, transform: 'rotate(45deg)', transformOrigin: 'left bottom' }, to: { opacity: 1, transform: 'rotate(0deg)', transformOrigin: 'left bottom' } },\n 'rotate-in-up-right': { from: { opacity: 0, transform: 'rotate(-45deg)', transformOrigin: 'right bottom' }, to: { opacity: 1, transform: 'rotate(0deg)', transformOrigin: 'right bottom' } },\n 'rotate-in-down-left': { from: { opacity: 0, transform: 'rotate(-45deg)', transformOrigin: 'left bottom' }, to: { opacity: 1, transform: 'rotate(0deg)', transformOrigin: 'left bottom' } },\n 'rotate-in-down-right': { from: { opacity: 0, transform: 'rotate(45deg)', transformOrigin: 'right bottom' }, to: { opacity: 1, transform: 'rotate(0deg)', transformOrigin: 'right bottom' } },\n 'skew-in-left': { from: { opacity: 0, transform: 'translateX(-80px) skewX(30deg)' }, to: { opacity: 1, transform: 'translateX(0px) skewX(0deg)' } },\n 'skew-in-y': { from: { opacity: 0, transform: 'translateY(40px) skewY(12deg)' }, to: { opacity: 1, transform: 'translateY(0px) skewY(0deg)' } },\n 'shear-in': { from: { opacity: 0, transform: 'skew(20deg, 10deg)' }, to: { opacity: 1, transform: 'skew(0deg, 0deg)' } },\n 'shear-in-reverse': { from: { opacity: 0, transform: 'skew(-20deg, -10deg)' }, to: { opacity: 1, transform: 'skew(0deg, 0deg)' } },\n 'twist-in': { from: { opacity: 0, transform: 'rotate(-20deg) skewX(10deg) scale(0.8)' }, to: { opacity: 1, transform: 'rotate(0deg) skewX(0deg) scale(1)' } },\n 'tilt-in-left': { from: { opacity: 0, transform: 'translateY(30px) rotate(-8deg)' }, to: { opacity: 1, transform: 'translateY(0px) rotate(0deg)' } },\n 'tilt-in-right': { from: { opacity: 0, transform: 'translateY(30px) rotate(8deg)' }, to: { opacity: 1, transform: 'translateY(0px) rotate(0deg)' } },\n // Blur & mask\n 'blur-in-down': { from: { opacity: 0, filter: 'blur(12px)', transform: 'translateY(-40px)' }, to: { opacity: 1, filter: 'blur(0px)', transform: 'translateY(0px)' } },\n 'blur-in-left': { from: { opacity: 0, filter: 'blur(12px)', transform: 'translateX(-40px)' }, to: { opacity: 1, filter: 'blur(0px)', transform: 'translateX(0px)' } },\n 'blur-in-right': { from: { opacity: 0, filter: 'blur(12px)', transform: 'translateX(40px)' }, to: { opacity: 1, filter: 'blur(0px)', transform: 'translateX(0px)' } },\n 'blur-in-strong': { from: { opacity: 0, filter: 'blur(24px)' }, to: { opacity: 1, filter: 'blur(0px)' } },\n 'blur-in-zoom': { from: { opacity: 0, filter: 'blur(14px)', transform: 'scale(1.2)' }, to: { opacity: 1, filter: 'blur(0px)', transform: 'scale(1)' } },\n 'blur-in-scale': { from: { opacity: 0, filter: 'blur(14px)', transform: 'scale(0.8)' }, to: { opacity: 1, filter: 'blur(0px)', transform: 'scale(1)' } },\n 'blur-in-x': { from: { opacity: 0, filter: 'blur(10px)', transform: 'scaleX(1.3)' }, to: { opacity: 1, filter: 'blur(0px)', transform: 'scaleX(1)' } },\n 'mask-up': { from: { transform: 'translateY(100%)', clipPath: 'inset(0% 0% 100% 0%)' }, to: { transform: 'translateY(0%)', clipPath: 'inset(0% 0% 0% 0%)' } },\n 'mask-down': { from: { transform: 'translateY(-100%)', clipPath: 'inset(100% 0% 0% 0%)' }, to: { transform: 'translateY(0%)', clipPath: 'inset(0% 0% 0% 0%)' } },\n 'mask-left': { from: { transform: 'translateX(100%)', clipPath: 'inset(0% 100% 0% 0%)' }, to: { transform: 'translateX(0%)', clipPath: 'inset(0% 0% 0% 0%)' } },\n 'mask-right': { from: { transform: 'translateX(-100%)', clipPath: 'inset(0% 0% 0% 100%)' }, to: { transform: 'translateX(0%)', clipPath: 'inset(0% 0% 0% 0%)' } },\n 'blur-mask-up': { from: { transform: 'translateY(60%)', clipPath: 'inset(0% 0% 60% 0%)', filter: 'blur(8px)' }, to: { transform: 'translateY(0%)', clipPath: 'inset(0% 0% 0% 0%)', filter: 'blur(0px)' } },\n // Clip reveal\n 'clip-circle-top': { from: { clipPath: 'circle(0% at 50% 0%)' }, to: { clipPath: 'circle(150% at 50% 0%)' } },\n 'clip-circle-bottom': { from: { clipPath: 'circle(0% at 50% 100%)' }, to: { clipPath: 'circle(150% at 50% 100%)' } },\n 'clip-circle-left': { from: { clipPath: 'circle(0% at 0% 50%)' }, to: { clipPath: 'circle(150% at 0% 50%)' } },\n 'clip-circle-right': { from: { clipPath: 'circle(0% at 100% 50%)' }, to: { clipPath: 'circle(150% at 100% 50%)' } },\n 'clip-circle-corner': { from: { clipPath: 'circle(0% at 0% 0%)' }, to: { clipPath: 'circle(150% at 0% 0%)' } },\n 'clip-ellipse': { from: { clipPath: 'ellipse(0% 0% at 50% 50%)' }, to: { clipPath: 'ellipse(75% 75% at 50% 50%)' } },\n 'clip-diamond': { from: { clipPath: 'polygon(50% 50%, 50% 50%, 50% 50%, 50% 50%)' }, to: { clipPath: 'polygon(50% -50%, 150% 50%, 50% 150%, -50% 50%)' } },\n 'clip-split-x': { from: { clipPath: 'inset(0% 50% 0% 50%)' }, to: { clipPath: 'inset(0% 0% 0% 0%)' } },\n 'clip-split-y': { from: { clipPath: 'inset(50% 0% 50% 0%)' }, to: { clipPath: 'inset(0% 0% 0% 0%)' } },\n 'clip-box': { from: { clipPath: 'inset(50% 50% 50% 50%)' }, to: { clipPath: 'inset(0% 0% 0% 0%)' } },\n 'clip-pill': { from: { clipPath: 'inset(35% 35% 35% 35% round 50%)' }, to: { clipPath: 'inset(0% 0% 0% 0% round 0%)' } },\n 'clip-blinds': { from: { clipPath: 'polygon(0% 0%, 100% 0%, 100% 0%, 0% 0%, 0% 25%, 100% 25%, 100% 25%, 0% 25%, 0% 50%, 100% 50%, 100% 50%, 0% 50%, 0% 75%, 100% 75%, 100% 75%, 0% 75%)' }, to: { clipPath: 'polygon(0% 0%, 100% 0%, 100% 25%, 0% 25%, 0% 25%, 100% 25%, 100% 50%, 0% 50%, 0% 50%, 100% 50%, 100% 75%, 0% 75%, 0% 75%, 100% 75%, 100% 100%, 0% 100%)' } },\n 'clip-blinds-x': { from: { clipPath: 'polygon(0% 0%, 0% 100%, 0% 100%, 0% 0%, 25% 0%, 25% 100%, 25% 100%, 25% 0%, 50% 0%, 50% 100%, 50% 100%, 50% 0%, 75% 0%, 75% 100%, 75% 100%, 75% 0%)' }, to: { clipPath: 'polygon(0% 0%, 0% 100%, 25% 100%, 25% 0%, 25% 0%, 25% 100%, 50% 100%, 50% 0%, 50% 0%, 50% 100%, 75% 100%, 75% 0%, 75% 0%, 75% 100%, 100% 100%, 100% 0%)' } },\n 'clip-diagonal': { from: { clipPath: 'polygon(0% 0%, 0% 0%, 0% 0%)' }, to: { clipPath: 'polygon(0% 0%, 200% 0%, 0% 200%)' } },\n 'clip-diagonal-reverse': { from: { clipPath: 'polygon(100% 100%, 100% 100%, 100% 100%)' }, to: { clipPath: 'polygon(100% 100%, -100% 100%, 100% -100%)' } },\n 'clip-slant-right': { from: { clipPath: 'polygon(0% 0%, 0% 0%, -20% 100%, -20% 100%)' }, to: { clipPath: 'polygon(0% 0%, 120% 0%, 100% 100%, -20% 100%)' } },\n 'clip-slant-left': { from: { clipPath: 'polygon(100% 0%, 120% 0%, 120% 100%, 100% 100%)' }, to: { clipPath: 'polygon(-20% 0%, 120% 0%, 120% 100%, 0% 100%)' } },\n // Bounce & elastic\n 'bounce-in': { from: { opacity: 0, transform: 'scale(0.3)' }, to: { opacity: 1, transform: 'scale(1)' }, frames: [{ offset: 0.2, transform: 'scale(1.1)' }, { offset: 0.4, transform: 'scale(0.9)' }, { offset: 0.6, opacity: 1, transform: 'scale(1.03)' }, { offset: 0.8, transform: 'scale(0.97)' }] },\n 'bounce-in-up': { from: { opacity: 0, transform: 'translateY(120px)' }, to: { opacity: 1, transform: 'translateY(0px)' }, frames: [{ offset: 0.6, opacity: 1, transform: 'translateY(-20px)' }, { offset: 0.75, transform: 'translateY(10px)' }, { offset: 0.9, transform: 'translateY(-5px)' }] },\n 'bounce-in-down': { from: { opacity: 0, transform: 'translateY(-120px)' }, to: { opacity: 1, transform: 'translateY(0px)' }, frames: [{ offset: 0.6, opacity: 1, transform: 'translateY(20px)' }, { offset: 0.75, transform: 'translateY(-10px)' }, { offset: 0.9, transform: 'translateY(5px)' }] },\n 'bounce-in-left': { from: { opacity: 0, transform: 'translateX(-120px)' }, to: { opacity: 1, transform: 'translateX(0px)' }, frames: [{ offset: 0.6, opacity: 1, transform: 'translateX(20px)' }, { offset: 0.75, transform: 'translateX(-10px)' }, { offset: 0.9, transform: 'translateX(5px)' }] },\n 'bounce-in-right': { from: { opacity: 0, transform: 'translateX(120px)' }, to: { opacity: 1, transform: 'translateX(0px)' }, frames: [{ offset: 0.6, opacity: 1, transform: 'translateX(-20px)' }, { offset: 0.75, transform: 'translateX(10px)' }, { offset: 0.9, transform: 'translateX(-5px)' }] },\n 'elastic-in': { from: { opacity: 0, transform: 'scale(0)' }, to: { opacity: 1, transform: 'scale(1)' }, frames: [{ offset: 0.4, opacity: 1, transform: 'scale(1.2)' }, { offset: 0.6, transform: 'scale(0.88)' }, { offset: 0.75, transform: 'scale(1.06)' }, { offset: 0.9, transform: 'scale(0.98)' }] },\n 'elastic-in-x': { from: { opacity: 0, transform: 'scaleX(0)' }, to: { opacity: 1, transform: 'scaleX(1)' }, frames: [{ offset: 0.4, opacity: 1, transform: 'scaleX(1.25)' }, { offset: 0.6, transform: 'scaleX(0.85)' }, { offset: 0.8, transform: 'scaleX(1.08)' }] },\n 'rubber-in': { from: { opacity: 0, transform: 'scale(0.4, 0.4)' }, to: { opacity: 1, transform: 'scale(1, 1)' }, frames: [{ offset: 0.3, opacity: 1, transform: 'scale(1.25, 0.75)' }, { offset: 0.4, transform: 'scale(0.75, 1.25)' }, { offset: 0.5, transform: 'scale(1.15, 0.85)' }, { offset: 0.65, transform: 'scale(0.95, 1.05)' }, { offset: 0.75, transform: 'scale(1.05, 0.95)' }] },\n 'jello-in': { from: { opacity: 0, transform: 'skewX(-12.5deg) skewY(-12.5deg)' }, to: { opacity: 1, transform: 'skewX(0deg) skewY(0deg)' }, frames: [{ offset: 0.22, opacity: 1, transform: 'skewX(6.25deg) skewY(6.25deg)' }, { offset: 0.33, transform: 'skewX(-3.125deg) skewY(-3.125deg)' }, { offset: 0.44, transform: 'skewX(1.5625deg) skewY(1.5625deg)' }, { offset: 0.55, transform: 'skewX(-0.78deg) skewY(-0.78deg)' }, { offset: 0.66, transform: 'skewX(0.39deg) skewY(0.39deg)' }] },\n 'wobble-in': { from: { opacity: 0, transform: 'translateX(-25%) rotate(-5deg)' }, to: { opacity: 1, transform: 'translateX(0%) rotate(0deg)' }, frames: [{ offset: 0.3, opacity: 1, transform: 'translateX(20%) rotate(3deg)' }, { offset: 0.45, transform: 'translateX(-15%) rotate(-3deg)' }, { offset: 0.6, transform: 'translateX(10%) rotate(2deg)' }, { offset: 0.75, transform: 'translateX(-5%) rotate(-1deg)' }] },\n 'tada-in': { from: { opacity: 0, transform: 'scale(0.9) rotate(-3deg)' }, to: { opacity: 1, transform: 'scale(1) rotate(0deg)' }, frames: [{ offset: 0.3, opacity: 1, transform: 'scale(1.1) rotate(3deg)' }, { offset: 0.4, transform: 'scale(1.1) rotate(-3deg)' }, { offset: 0.5, transform: 'scale(1.1) rotate(3deg)' }, { offset: 0.6, transform: 'scale(1.1) rotate(-3deg)' }, { offset: 0.7, transform: 'scale(1.1) rotate(3deg)' }] },\n 'heartbeat-in': { from: { opacity: 0, transform: 'scale(0.6)' }, to: { opacity: 1, transform: 'scale(1)' }, frames: [{ offset: 0.25, opacity: 1, transform: 'scale(1.15)' }, { offset: 0.4, transform: 'scale(0.95)' }, { offset: 0.6, transform: 'scale(1.1)' }, { offset: 0.8, transform: 'scale(0.98)' }] },\n 'drop-in': { from: { opacity: 0, transform: 'translateY(-150px)' }, to: { opacity: 1, transform: 'translateY(0px)' }, frames: [{ offset: 0.4, opacity: 1, transform: 'translateY(0px)' }, { offset: 0.55, transform: 'translateY(-30px)' }, { offset: 0.7, transform: 'translateY(0px)' }, { offset: 0.82, transform: 'translateY(-8px)' }, { offset: 0.92, transform: 'translateY(0px)' }] },\n 'pop-in': { from: { opacity: 0, transform: 'scale(0.5)' }, to: { opacity: 1, transform: 'scale(1)' }, frames: [{ offset: 0.6, opacity: 1, transform: 'scale(1.12)' }] },\n 'squash-in': { from: { opacity: 0, transform: 'translateY(-80px) scale(0.8, 1.2)' }, to: { opacity: 1, transform: 'translateY(0px) scale(1, 1)' }, frames: [{ offset: 0.5, opacity: 1, transform: 'translateY(0px) scale(1.25, 0.75)' }, { offset: 0.7, transform: 'translateY(-10px) scale(0.95, 1.05)' }, { offset: 0.85, transform: 'translateY(0px) scale(1.03, 0.97)' }] },\n 'shake-in': { from: { opacity: 0, transform: 'translateX(-30px)' }, to: { opacity: 1, transform: 'translateX(0px)' }, frames: [{ offset: 0.2, opacity: 1, transform: 'translateX(20px)' }, { offset: 0.4, transform: 'translateX(-14px)' }, { offset: 0.6, transform: 'translateX(8px)' }, { offset: 0.8, transform: 'translateX(-4px)' }] },\n 'swing-in': { from: { opacity: 0, transform: 'rotate(-30deg)', transformOrigin: 'center top' }, to: { opacity: 1, transform: 'rotate(0deg)', transformOrigin: 'center top' }, frames: [{ offset: 0.4, opacity: 1, transform: 'rotate(15deg)' }, { offset: 0.6, transform: 'rotate(-10deg)' }, { offset: 0.8, transform: 'rotate(5deg)' }] },\n // Color & light\n 'brightness-in': { from: { opacity: 0, filter: 'brightness(3)' }, to: { opacity: 1, filter: 'brightness(1)' } },\n 'darken-in': { from: { filter: 'brightness(0)' }, to: { filter: 'brightness(1)' } },\n 'color-in': { from: { filter: 'grayscale(1)' }, to: { filter: 'grayscale(0)' } },\n 'saturate-in': { from: { opacity: 0, filter: 'saturate(3)' }, to: { opacity: 1, filter: 'saturate(1)' } },\n 'hue-in': { from: { opacity: 0, filter: 'hue-rotate(-180deg)' }, to: { opacity: 1, filter: 'hue-rotate(0deg)' } },\n 'sepia-in': { from: { filter: 'sepia(1)' }, to: { filter: 'sepia(0)' } },\n 'invert-in': { from: { opacity: 0, filter: 'invert(1)' }, to: { opacity: 1, filter: 'invert(0)' } },\n 'contrast-in': { from: { opacity: 0, filter: 'contrast(0)' }, to: { opacity: 1, filter: 'contrast(1)' } },\n 'exposure-in': { from: { opacity: 0, filter: 'brightness(4) contrast(0.5)' }, to: { opacity: 1, filter: 'brightness(1) contrast(1)' } },\n 'vintage-in': { from: { opacity: 0, filter: 'sepia(1) contrast(1.4) blur(2px)' }, to: { opacity: 1, filter: 'sepia(0) contrast(1) blur(0px)' } },\n 'blur-bright-in': { from: { opacity: 0, filter: 'blur(8px) brightness(2)' }, to: { opacity: 1, filter: 'blur(0px) brightness(1)' } },\n 'shadow-lift': { from: { opacity: 0, transform: 'translateY(16px) scale(0.98)', filter: 'drop-shadow(0px 0px 0px rgba(0, 0, 0, 0))' }, to: { opacity: 1, transform: 'translateY(0px) scale(1)', filter: 'drop-shadow(0px 18px 22px rgba(0, 0, 0, 0.35))' } },\n 'neon-glow-in': { from: { opacity: 0, filter: 'brightness(0.6) drop-shadow(0px 0px 0px rgba(124, 92, 255, 0))' }, to: { opacity: 1, filter: 'brightness(1) drop-shadow(0px 0px 10px rgba(124, 92, 255, 0.6))' }, frames: [{ offset: 0.5, opacity: 1, filter: 'brightness(1.5) drop-shadow(0px 0px 22px rgba(124, 92, 255, 0.95))' }] },\n 'glow-in': { from: { opacity: 0, filter: 'brightness(2) drop-shadow(0px 0px 18px rgba(255, 255, 255, 0.9))' }, to: { opacity: 1, filter: 'brightness(1) drop-shadow(0px 0px 0px rgba(255, 255, 255, 0))' } },\n // Depth & perspective\n 'perspective-in-up': { from: { opacity: 0, transform: 'perspective(800px) translateY(60px) rotateX(30deg)' }, to: { opacity: 1, transform: 'perspective(800px) translateY(0px) rotateX(0deg)' } },\n 'perspective-in-down': { from: { opacity: 0, transform: 'perspective(800px) translateY(-60px) rotateX(-30deg)' }, to: { opacity: 1, transform: 'perspective(800px) translateY(0px) rotateX(0deg)' } },\n 'perspective-in-left': { from: { opacity: 0, transform: 'perspective(800px) translateX(-60px) rotateY(-30deg)' }, to: { opacity: 1, transform: 'perspective(800px) translateX(0px) rotateY(0deg)' } },\n 'perspective-in-right': { from: { opacity: 0, transform: 'perspective(800px) translateX(60px) rotateY(30deg)' }, to: { opacity: 1, transform: 'perspective(800px) translateX(0px) rotateY(0deg)' } },\n 'depth-push': { from: { opacity: 0, transform: 'perspective(800px) translateZ(300px)' }, to: { opacity: 1, transform: 'perspective(800px) translateZ(0px)' } },\n 'depth-pull': { from: { opacity: 0, transform: 'perspective(800px) translateZ(-400px)' }, to: { opacity: 1, transform: 'perspective(800px) translateZ(0px)' } },\n 'depth-in-up': { from: { opacity: 0, transform: 'perspective(800px) translateY(80px) translateZ(-300px)' }, to: { opacity: 1, transform: 'perspective(800px) translateY(0px) translateZ(0px)' } },\n 'swoop-in-left': { from: { opacity: 0, transform: 'perspective(800px) translateX(-100px) translateZ(-200px) rotateY(60deg)' }, to: { opacity: 1, transform: 'perspective(800px) translateX(0px) translateZ(0px) rotateY(0deg)' } },\n 'swoop-in-right': { from: { opacity: 0, transform: 'perspective(800px) translateX(100px) translateZ(-200px) rotateY(-60deg)' }, to: { opacity: 1, transform: 'perspective(800px) translateX(0px) translateZ(0px) rotateY(0deg)' } },\n 'card-tilt-in': { from: { opacity: 0, transform: 'perspective(800px) rotateX(20deg) rotateY(-20deg) scale(0.9)' }, to: { opacity: 1, transform: 'perspective(800px) rotateX(0deg) rotateY(0deg) scale(1)' } },\n // Glitch & special\n 'glitch-in': { from: { opacity: 0, transform: 'translate(-12px, 0px) skewX(0deg)', clipPath: 'inset(40% 0% 45% 0%)' }, to: { opacity: 1, transform: 'translate(0px, 0px) skewX(0deg)', clipPath: 'inset(0% 0% 0% 0%)' }, frames: [{ offset: 0.15, opacity: 1, transform: 'translate(10px, 0px) skewX(-12deg)', clipPath: 'inset(10% 0% 70% 0%)' }, { offset: 0.3, transform: 'translate(-6px, 0px) skewX(8deg)', clipPath: 'inset(60% 0% 10% 0%)' }, { offset: 0.45, transform: 'translate(4px, 0px) skewX(0deg)', clipPath: 'inset(20% 0% 35% 0%)' }, { offset: 0.6, transform: 'translate(-2px, 0px) skewX(-4deg)', clipPath: 'inset(0% 0% 0% 0%)' }] },\n 'glitch-in-color': { from: { opacity: 0, transform: 'translate(-10px, 4px)', filter: 'hue-rotate(90deg) saturate(3)' }, to: { opacity: 1, transform: 'translate(0px, 0px)', filter: 'hue-rotate(0deg) saturate(1)' }, frames: [{ offset: 0.2, opacity: 1, transform: 'translate(8px, -3px)', filter: 'hue-rotate(-60deg) saturate(2.5)' }, { offset: 0.4, transform: 'translate(-5px, 2px)', filter: 'hue-rotate(40deg) saturate(2)' }, { offset: 0.6, transform: 'translate(3px, 0px)', filter: 'hue-rotate(-20deg) saturate(1.5)' }] },\n 'typewriter': { from: { clipPath: 'inset(0% 100% 0% 0%)', easing: 'steps(16, end)' }, to: { clipPath: 'inset(0% 0% 0% 0%)' } },\n 'typewriter-lines': { from: { clipPath: 'inset(0% 0% 100% 0%)', easing: 'steps(5, end)' }, to: { clipPath: 'inset(0% 0% 0% 0%)' } },\n 'hinge-in': { from: { opacity: 0, transform: 'translateY(60px) rotate(60deg)', transformOrigin: 'left top' }, to: { opacity: 1, transform: 'translateY(0px) rotate(0deg)', transformOrigin: 'left top' }, frames: [{ offset: 0.4, opacity: 1, transform: 'translateY(0px) rotate(-12deg)' }, { offset: 0.6, transform: 'translateY(0px) rotate(8deg)' }, { offset: 0.8, transform: 'translateY(0px) rotate(-4deg)' }] },\n 'flicker-in': { from: { opacity: 0 }, to: { opacity: 1 }, frames: [{ offset: 0.2, opacity: 0.7 }, { offset: 0.32, opacity: 0.2 }, { offset: 0.55, opacity: 0.9 }, { offset: 0.68, opacity: 0.45 }] },\n 'scan-in': { from: { clipPath: 'inset(0% 0% 100% 0%)', filter: 'brightness(2.5)' }, to: { clipPath: 'inset(0% 0% 0% 0%)', filter: 'brightness(1)' }, frames: [{ offset: 0.7, clipPath: 'inset(0% 0% 0% 0%)', filter: 'brightness(1.6)' }] },\n 'materialize': { from: { opacity: 0, filter: 'blur(10px) brightness(2.2)', transform: 'scale(1.08)' }, to: { opacity: 1, filter: 'blur(0px) brightness(1)', transform: 'scale(1)' } },\n 'teleport-in': { from: { opacity: 0, transform: 'scale(0.02, 2)', filter: 'brightness(3)' }, to: { opacity: 1, transform: 'scale(1, 1)', filter: 'brightness(1)' }, frames: [{ offset: 0.5, opacity: 1, transform: 'scale(1.2, 0.8)', filter: 'brightness(1.6)' }, { offset: 0.75, transform: 'scale(0.95, 1.05)', filter: 'brightness(1.1)' }] },\n // Stagger-ready\n 'stagger-fade-up': { from: { opacity: 0, transform: 'translateY(12px)' }, to: { opacity: 1, transform: 'translateY(0px)' } },\n 'stagger-pop': { from: { opacity: 0, transform: 'scale(0.85)' }, to: { opacity: 1, transform: 'scale(1)' } },\n 'stagger-rise': { from: { opacity: 0, transform: 'translateY(24px) scale(0.98)' }, to: { opacity: 1, transform: 'translateY(0px) scale(1)' } },\n 'stagger-slide': { from: { opacity: 0, transform: 'translateX(24px)' }, to: { opacity: 1, transform: 'translateX(0px)' } },\n 'stagger-flip': { from: { opacity: 0, transform: 'perspective(800px) rotateX(-50deg)', transformOrigin: 'center top' }, to: { opacity: 1, transform: 'perspective(800px) rotateX(0deg)', transformOrigin: 'center top' } },\n 'stagger-blur': { from: { opacity: 0, filter: 'blur(6px)', transform: 'translateY(8px)' }, to: { opacity: 1, filter: 'blur(0px)', transform: 'translateY(0px)' } },\n 'stagger-zoom': { from: { opacity: 0, transform: 'scale(1.15)' }, to: { opacity: 1, transform: 'scale(1)' } },\n 'stagger-drop': { from: { opacity: 0, transform: 'translateY(-16px) rotate(-3deg)' }, to: { opacity: 1, transform: 'translateY(0px) rotate(0deg)' } },\n // Scroll-linked\n 'scrub-parallax-up': { from: { transform: 'translateY(80px)' }, to: { transform: 'translateY(-80px)' } },\n 'scrub-parallax-down': { from: { transform: 'translateY(-80px)' }, to: { transform: 'translateY(80px)' } },\n 'scrub-rotate': { from: { transform: 'rotate(-25deg)' }, to: { transform: 'rotate(25deg)' } },\n 'scrub-spin': { from: { transform: 'rotate(0deg)' }, to: { transform: 'rotate(360deg)' } },\n 'scrub-scale': { from: { transform: 'scale(0.7)' }, to: { transform: 'scale(1.1)' } },\n 'scrub-shrink': { from: { transform: 'scale(1.15)' }, to: { transform: 'scale(0.85)' } },\n 'scrub-pan-left': { from: { transform: 'translateX(30%)' }, to: { transform: 'translateX(-30%)' } },\n 'scrub-pan-right': { from: { transform: 'translateX(-30%)' }, to: { transform: 'translateX(30%)' } },\n 'scrub-tilt': { from: { transform: 'perspective(800px) rotateX(25deg)' }, to: { transform: 'perspective(800px) rotateX(-25deg)' } },\n 'scrub-fade-through': { from: { opacity: 0 }, to: { opacity: 0 }, frames: [{ offset: 0.3, opacity: 1 }, { offset: 0.7, opacity: 1 }] },\n 'scrub-blur-through': { from: { filter: 'blur(8px)' }, to: { filter: 'blur(8px)' }, frames: [{ offset: 0.4, filter: 'blur(0px)' }, { offset: 0.6, filter: 'blur(0px)' }] },\n 'scrub-reveal-x': { from: { clipPath: 'inset(0% 100% 0% 0%)' }, to: { clipPath: 'inset(0% 0% 0% 0%)' } },\n};\n\n/** Extended preset names by category (the Animation Store filters). */\nexport const EXTENDED_PRESET_CATEGORIES: Record<string, ExtendedPreset[]> = {\n fade: ['fade-in-up-sm', 'fade-in-down-sm', 'fade-in-left-sm', 'fade-in-right-sm', 'fade-in-up-lg', 'fade-in-down-lg', 'fade-in-left-lg', 'fade-in-right-lg', 'fade-in-up-left', 'fade-in-up-right', 'fade-in-down-left', 'fade-in-down-right', 'fade-in-scale', 'fade-in-half'],\n zoom: ['zoom-in-up', 'zoom-in-down', 'zoom-in-left', 'zoom-in-right', 'zoom-out-up', 'zoom-out-down', 'zoom-out-left', 'zoom-out-right', 'zoom-in-big', 'zoom-out-big', 'zoom-bounce', 'zoom-in-rotate', 'scale-x-left', 'scale-x-right', 'scale-y-top', 'scale-y-bottom', 'stretch-x', 'stretch-y'],\n flip: ['flip-x-reverse', 'flip-y-reverse', 'flip-y-full', 'flip-diagonal', 'flip-diagonal-reverse', 'flip-left', 'flip-right', 'unfold-down', 'unfold-up', 'door-open-left', 'door-open-right', 'fold-in', 'flip-x-bounce', 'flip-y-bounce', 'swing-in-top', 'swing-in-bottom', 'swing-in-left', 'swing-in-right'],\n slide: ['slide-up-spring', 'slide-down-spring', 'slide-left-spring', 'slide-right-spring', 'slide-up-sm', 'slide-down-sm', 'back-in-up', 'back-in-down', 'back-in-left', 'back-in-right', 'light-speed-in-left', 'light-speed-in-right', 'rise-in', 'sink-in', 'float-in-up', 'float-in-down'],\n rotate: ['roll-in-left', 'roll-in-right', 'spiral-in', 'spiral-in-reverse', 'spin-in', 'rotate-in-up-left', 'rotate-in-up-right', 'rotate-in-down-left', 'rotate-in-down-right', 'skew-in-left', 'skew-in-y', 'shear-in', 'shear-in-reverse', 'twist-in', 'tilt-in-left', 'tilt-in-right'],\n blur: ['blur-in-down', 'blur-in-left', 'blur-in-right', 'blur-in-strong', 'blur-in-zoom', 'blur-in-scale', 'blur-in-x', 'mask-up', 'mask-down', 'mask-left', 'mask-right', 'blur-mask-up'],\n clip: ['clip-circle-top', 'clip-circle-bottom', 'clip-circle-left', 'clip-circle-right', 'clip-circle-corner', 'clip-ellipse', 'clip-diamond', 'clip-split-x', 'clip-split-y', 'clip-box', 'clip-pill', 'clip-blinds', 'clip-blinds-x', 'clip-diagonal', 'clip-diagonal-reverse', 'clip-slant-right', 'clip-slant-left'],\n elastic: ['bounce-in', 'bounce-in-up', 'bounce-in-down', 'bounce-in-left', 'bounce-in-right', 'elastic-in', 'elastic-in-x', 'rubber-in', 'jello-in', 'wobble-in', 'tada-in', 'heartbeat-in', 'drop-in', 'pop-in', 'squash-in', 'shake-in', 'swing-in'],\n light: ['brightness-in', 'darken-in', 'color-in', 'saturate-in', 'hue-in', 'sepia-in', 'invert-in', 'contrast-in', 'exposure-in', 'vintage-in', 'blur-bright-in', 'shadow-lift', 'neon-glow-in', 'glow-in'],\n depth: ['perspective-in-up', 'perspective-in-down', 'perspective-in-left', 'perspective-in-right', 'depth-push', 'depth-pull', 'depth-in-up', 'swoop-in-left', 'swoop-in-right', 'card-tilt-in'],\n special: ['glitch-in', 'glitch-in-color', 'typewriter', 'typewriter-lines', 'hinge-in', 'flicker-in', 'scan-in', 'materialize', 'teleport-in'],\n stagger: ['stagger-fade-up', 'stagger-pop', 'stagger-rise', 'stagger-slide', 'stagger-flip', 'stagger-blur', 'stagger-zoom', 'stagger-drop'],\n scrub: ['scrub-parallax-up', 'scrub-parallax-down', 'scrub-rotate', 'scrub-spin', 'scrub-scale', 'scrub-shrink', 'scrub-pan-left', 'scrub-pan-right', 'scrub-tilt', 'scrub-fade-through', 'scrub-blur-through', 'scrub-reveal-x'],\n};\n","/**\n * dist/presets-extended.umd.js — `<script>` build of the extended presets.\n * Adds them to the page-wide preset table shared by every copy of the library\n * (load it before or after dist/index.umd.js). Global: `ScrollAnimatePresets`.\n */\nimport { EXTENDED_PRESETS, EXTENDED_PRESET_CATEGORIES } from './extended-presets-data';\n\nconst g = globalThis as any;\nconst key = Symbol.for('use-scroll-animate.presets');\ng[key] = Object.assign(g[key] || {}, EXTENDED_PRESETS);\n\nexport { EXTENDED_PRESETS, EXTENDED_PRESET_CATEGORIES };\n"],"names":["EXTENDED_PRESETS","from","opacity","transform","to","frames","offset","transformOrigin","filter","clipPath","typewriter","easing","materialize","g","globalThis","key","Symbol","for","Object","assign","fade","zoom","flip","slide","rotate","blur","clip","elastic","light","depth","special","stagger","scrub"],"mappings":"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"}
package/dist/react.cjs ADDED
@@ -0,0 +1,68 @@
1
+ 'use strict';
2
+
3
+ var core = require('./chunks/core-B5T0dhFH.cjs');
4
+ var stagger = require('./chunks/stagger-CCFyhzSw.cjs');
5
+ require('./chunks/presets-CUHys3sK.cjs');
6
+
7
+ /**
8
+ * motionary - React Integration
9
+ * Provides useScrollAnimate and useScrollStagger hooks for React applications.
10
+ * `useScrollStagger({ observeChildren: true })` also animates children added later.
11
+ *
12
+ * Both hooks are thin wrappers around the core engine, so they share its
13
+ * behaviour: `once`, `offset`, custom easing functions, progress,
14
+ * `prefers-reduced-motion` support, and proper cleanup on unmount.
15
+ */
16
+ const CALLBACKS = ['onStart', 'onComplete', 'onEnter', 'onLeave', 'onProgress'];
17
+ /**
18
+ * Wrap the callbacks that exist at mount so they always call the latest
19
+ * version from the most recent render (avoids stale closures without
20
+ * re-creating observers on every render).
21
+ * @internal
22
+ */
23
+ function withLatestCallbacks(latest) {
24
+ const initial = latest.current || {};
25
+ const opts = { ...initial };
26
+ CALLBACKS.forEach((name) => {
27
+ if (typeof initial[name] === 'function') {
28
+ opts[name] = (...args) => latest.current?.[name]?.(...args);
29
+ }
30
+ });
31
+ return opts;
32
+ }
33
+ function createReactHooks(React) {
34
+ // Created lazily on the client so importing on the server is side-effect free.
35
+ let instance = null;
36
+ const getInstance = () => instance || (instance = core.createScrollAnimate());
37
+ function useScrollAnimate(options = {}) {
38
+ const ref = React.useRef(null);
39
+ const optionsRef = React.useRef(options);
40
+ optionsRef.current = options;
41
+ React.useEffect(() => {
42
+ const el = ref.current;
43
+ if (!el)
44
+ return;
45
+ const sa = getInstance();
46
+ sa.observe(el, withLatestCallbacks(optionsRef));
47
+ return () => sa.unobserve(el);
48
+ }, []);
49
+ return ref;
50
+ }
51
+ function useScrollStagger(options = {}) {
52
+ const ref = React.useRef(null);
53
+ const optionsRef = React.useRef(options);
54
+ optionsRef.current = options;
55
+ React.useEffect(() => {
56
+ const container = ref.current;
57
+ if (!container)
58
+ return;
59
+ return stagger.staggerChildren(container, withLatestCallbacks(optionsRef), getInstance());
60
+ }, []);
61
+ return ref;
62
+ }
63
+ return { useScrollAnimate, useScrollStagger };
64
+ }
65
+
66
+ exports.createReactHooks = createReactHooks;
67
+ exports.withLatestCallbacks = withLatestCallbacks;
68
+ //# sourceMappingURL=react.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"react.cjs","sources":["../src/react.ts"],"sourcesContent":["/**\n * motionary - React Integration\n * Provides useScrollAnimate and useScrollStagger hooks for React applications.\n * `useScrollStagger({ observeChildren: true })` also animates children added later.\n *\n * Both hooks are thin wrappers around the core engine, so they share its\n * behaviour: `once`, `offset`, custom easing functions, progress,\n * `prefers-reduced-motion` support, and proper cleanup on unmount.\n */\n\nimport type { AnimateOptions, ScrollAnimateInstance } from './types';\nimport { createScrollAnimate } from './core';\nimport { staggerChildren, type StaggerOptions } from './stagger';\n\ntype ReactRef<T> = { current: T | null };\n\nconst CALLBACKS = ['onStart', 'onComplete', 'onEnter', 'onLeave', 'onProgress'] as const;\n\n/**\n * Wrap the callbacks that exist at mount so they always call the latest\n * version from the most recent render (avoids stale closures without\n * re-creating observers on every render).\n * @internal\n */\nexport function withLatestCallbacks(latest: ReactRef<AnimateOptions>): AnimateOptions {\n const initial = latest.current || {};\n const opts: AnimateOptions = { ...initial };\n CALLBACKS.forEach((name) => {\n if (typeof initial[name] === 'function') {\n (opts as any)[name] = (...args: unknown[]) => (latest.current?.[name] as any)?.(...args);\n }\n });\n return opts;\n}\n\nexport function createReactHooks(React: {\n useRef: <T>(initial: T | null) => ReactRef<T>;\n useEffect: (effect: () => (() => void) | void, deps?: unknown[]) => 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 ref = React.useRef<Element>(null);\n const optionsRef = React.useRef<AnimateOptions>(options);\n optionsRef.current = options;\n\n React.useEffect(() => {\n const el = ref.current;\n if (!el) return;\n const sa = getInstance();\n sa.observe(el, withLatestCallbacks(optionsRef));\n return () => sa.unobserve(el);\n }, []);\n\n return ref;\n }\n\n function useScrollStagger(options: StaggerOptions = {}) {\n const ref = React.useRef<Element>(null);\n const optionsRef = React.useRef<AnimateOptions>(options);\n optionsRef.current = options;\n\n React.useEffect(() => {\n const container = ref.current;\n if (!container) return;\n return staggerChildren(container, withLatestCallbacks(optionsRef) as StaggerOptions, getInstance());\n }, []);\n\n return ref;\n }\n\n return { useScrollAnimate, useScrollStagger };\n}\n"],"names":["createScrollAnimate","staggerChildren"],"mappings":";;;;;;AAAA;;;;;;;;AAQG;AAQH,MAAM,SAAS,GAAG,CAAC,SAAS,EAAE,YAAY,EAAE,SAAS,EAAE,SAAS,EAAE,YAAY,CAAU;AAExF;;;;;AAKG;AACG,SAAU,mBAAmB,CAAC,MAAgC,EAAA;AAClE,IAAA,MAAM,OAAO,GAAG,MAAM,CAAC,OAAO,IAAI,EAAE;AACpC,IAAA,MAAM,IAAI,GAAmB,EAAE,GAAG,OAAO,EAAE;AAC3C,IAAA,SAAS,CAAC,OAAO,CAAC,CAAC,IAAI,KAAI;QACzB,IAAI,OAAO,OAAO,CAAC,IAAI,CAAC,KAAK,UAAU,EAAE;YACtC,IAAY,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,IAAe,KAAM,MAAM,CAAC,OAAO,GAAG,IAAI,CAAS,GAAG,GAAG,IAAI,CAAC;QAC1F;AACF,IAAA,CAAC,CAAC;AACF,IAAA,OAAO,IAAI;AACb;AAEM,SAAU,gBAAgB,CAAC,KAGhC,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,GAAG,GAAG,KAAK,CAAC,MAAM,CAAU,IAAI,CAAC;QACvC,MAAM,UAAU,GAAG,KAAK,CAAC,MAAM,CAAiB,OAAO,CAAC;AACxD,QAAA,UAAU,CAAC,OAAO,GAAG,OAAO;AAE5B,QAAA,KAAK,CAAC,SAAS,CAAC,MAAK;AACnB,YAAA,MAAM,EAAE,GAAG,GAAG,CAAC,OAAO;AACtB,YAAA,IAAI,CAAC,EAAE;gBAAE;AACT,YAAA,MAAM,EAAE,GAAG,WAAW,EAAE;YACxB,EAAE,CAAC,OAAO,CAAC,EAAE,EAAE,mBAAmB,CAAC,UAAU,CAAC,CAAC;YAC/C,OAAO,MAAM,EAAE,CAAC,SAAS,CAAC,EAAE,CAAC;QAC/B,CAAC,EAAE,EAAE,CAAC;AAEN,QAAA,OAAO,GAAG;IACZ;IAEA,SAAS,gBAAgB,CAAC,OAAA,GAA0B,EAAE,EAAA;QACpD,MAAM,GAAG,GAAG,KAAK,CAAC,MAAM,CAAU,IAAI,CAAC;QACvC,MAAM,UAAU,GAAG,KAAK,CAAC,MAAM,CAAiB,OAAO,CAAC;AACxD,QAAA,UAAU,CAAC,OAAO,GAAG,OAAO;AAE5B,QAAA,KAAK,CAAC,SAAS,CAAC,MAAK;AACnB,YAAA,MAAM,SAAS,GAAG,GAAG,CAAC,OAAO;AAC7B,YAAA,IAAI,CAAC,SAAS;gBAAE;AAChB,YAAA,OAAOC,uBAAe,CAAC,SAAS,EAAE,mBAAmB,CAAC,UAAU,CAAmB,EAAE,WAAW,EAAE,CAAC;QACrG,CAAC,EAAE,EAAE,CAAC;AAEN,QAAA,OAAO,GAAG;IACZ;AAEA,IAAA,OAAO,EAAE,gBAAgB,EAAE,gBAAgB,EAAE;AAC/C;;;;;"}
@@ -0,0 +1,158 @@
1
+ /**
2
+ * motionary - Core Type Definitions
3
+ * A lightweight, high-performance scroll animation library
4
+ */
5
+ /** The 33 core presets (always available in `PRESETS`). */
6
+ type CorePreset = 'fade-in' | 'fade-in-up' | 'fade-in-down' | 'fade-in-left' | 'fade-in-right' | 'zoom-in' | 'zoom-out' | 'flip-x' | 'flip-y' | 'slide-up' | 'slide-down' | 'slide-left' | 'slide-right' | 'bounce' | 'rotate-in' | 'blur-in' | 'skew-in' | 'scale-x' | 'scale-y' | 'shimmer' | 'pulse' | 'swing' | 'scale-up' | 'blur-in-up' | 'flip-up' | 'flip-down' | 'rotate-left' | 'rotate-right' | 'clip-up' | 'clip-down' | 'clip-left' | 'clip-right' | 'clip-circle';
7
+ /**
8
+ * Every built-in preset name: the core set plus the 6.1 extended set, which is
9
+ * available once `motionary/presets/extended` is loaded (or after
10
+ * `registerPresets(EXTENDED_PRESETS)`).
11
+ */
12
+ type AnimationPreset = CorePreset | ExtendedPreset;
13
+ /**
14
+ * How `onProgress` / `progressVar` progress is measured.
15
+ * - `'ratio'` (default): the element's visible ratio (IntersectionObserver `intersectionRatio`).
16
+ * - `'scroll'`: true scroll progress, 0 when the element's top touches the bottom of the
17
+ * viewport and 1 when its bottom leaves the top. Works for elements taller than the screen.
18
+ */
19
+ type ProgressMode = 'ratio' | 'scroll';
20
+ /**
21
+ * Which engine runs the entrance animation.
22
+ * - `'js'`: IntersectionObserver triggers a time-based Web Animation.
23
+ * - `'css'`: the preset runs on the browser's native scroll-driven timeline
24
+ * (`animation-timeline: view()`), so its progress follows the scroll position
25
+ * off the main thread. Falls back to `'js'` where unsupported.
26
+ * - `'auto'` (default since 2.0): native when supported, JS otherwise — and JS
27
+ * whenever the element sets `duration`, `delay`, `offset` or `stagger` itself,
28
+ * since those only mean something for a time-based animation.
29
+ */
30
+ type ScrollEngine = 'auto' | 'js' | 'css';
31
+ /** The 6.1 extended presets (`motionary/presets/extended`). */
32
+ type ExtendedPreset = 'fade-in-up-sm' | 'fade-in-down-sm' | 'fade-in-left-sm' | 'fade-in-right-sm' | 'fade-in-up-lg' | 'fade-in-down-lg' | 'fade-in-left-lg' | 'fade-in-right-lg' | 'fade-in-up-left' | 'fade-in-up-right' | 'fade-in-down-left' | 'fade-in-down-right' | 'fade-in-scale' | 'fade-in-half' | 'zoom-in-up' | 'zoom-in-down' | 'zoom-in-left' | 'zoom-in-right' | 'zoom-out-up' | 'zoom-out-down' | 'zoom-out-left' | 'zoom-out-right' | 'zoom-in-big' | 'zoom-out-big' | 'zoom-bounce' | 'zoom-in-rotate' | 'scale-x-left' | 'scale-x-right' | 'scale-y-top' | 'scale-y-bottom' | 'stretch-x' | 'stretch-y' | 'flip-x-reverse' | 'flip-y-reverse' | 'flip-y-full' | 'flip-diagonal' | 'flip-diagonal-reverse' | 'flip-left' | 'flip-right' | 'unfold-down' | 'unfold-up' | 'door-open-left' | 'door-open-right' | 'fold-in' | 'flip-x-bounce' | 'flip-y-bounce' | 'swing-in-top' | 'swing-in-bottom' | 'swing-in-left' | 'swing-in-right' | 'slide-up-spring' | 'slide-down-spring' | 'slide-left-spring' | 'slide-right-spring' | 'slide-up-sm' | 'slide-down-sm' | 'back-in-up' | 'back-in-down' | 'back-in-left' | 'back-in-right' | 'light-speed-in-left' | 'light-speed-in-right' | 'rise-in' | 'sink-in' | 'float-in-up' | 'float-in-down' | 'roll-in-left' | 'roll-in-right' | 'spiral-in' | 'spiral-in-reverse' | 'spin-in' | 'rotate-in-up-left' | 'rotate-in-up-right' | 'rotate-in-down-left' | 'rotate-in-down-right' | 'skew-in-left' | 'skew-in-y' | 'shear-in' | 'shear-in-reverse' | 'twist-in' | 'tilt-in-left' | 'tilt-in-right' | 'blur-in-down' | 'blur-in-left' | 'blur-in-right' | 'blur-in-strong' | 'blur-in-zoom' | 'blur-in-scale' | 'blur-in-x' | 'mask-up' | 'mask-down' | 'mask-left' | 'mask-right' | 'blur-mask-up' | 'clip-circle-top' | 'clip-circle-bottom' | 'clip-circle-left' | 'clip-circle-right' | 'clip-circle-corner' | 'clip-ellipse' | 'clip-diamond' | 'clip-split-x' | 'clip-split-y' | 'clip-box' | 'clip-pill' | 'clip-blinds' | 'clip-blinds-x' | 'clip-diagonal' | 'clip-diagonal-reverse' | 'clip-slant-right' | 'clip-slant-left' | 'bounce-in' | 'bounce-in-up' | 'bounce-in-down' | 'bounce-in-left' | 'bounce-in-right' | 'elastic-in' | 'elastic-in-x' | 'rubber-in' | 'jello-in' | 'wobble-in' | 'tada-in' | 'heartbeat-in' | 'drop-in' | 'pop-in' | 'squash-in' | 'shake-in' | 'swing-in' | 'brightness-in' | 'darken-in' | 'color-in' | 'saturate-in' | 'hue-in' | 'sepia-in' | 'invert-in' | 'contrast-in' | 'exposure-in' | 'vintage-in' | 'blur-bright-in' | 'shadow-lift' | 'neon-glow-in' | 'glow-in' | 'perspective-in-up' | 'perspective-in-down' | 'perspective-in-left' | 'perspective-in-right' | 'depth-push' | 'depth-pull' | 'depth-in-up' | 'swoop-in-left' | 'swoop-in-right' | 'card-tilt-in' | 'glitch-in' | 'glitch-in-color' | 'typewriter' | 'typewriter-lines' | 'hinge-in' | 'flicker-in' | 'scan-in' | 'materialize' | 'teleport-in' | 'stagger-fade-up' | 'stagger-pop' | 'stagger-rise' | 'stagger-slide' | 'stagger-flip' | 'stagger-blur' | 'stagger-zoom' | 'stagger-drop' | 'scrub-parallax-up' | 'scrub-parallax-down' | 'scrub-rotate' | 'scrub-spin' | 'scrub-scale' | 'scrub-shrink' | 'scrub-pan-left' | 'scrub-pan-right' | 'scrub-tilt' | 'scrub-fade-through' | 'scrub-blur-through' | 'scrub-reveal-x';
33
+ /** Easing function types */
34
+ type EasingType = 'linear' | 'ease' | 'ease-in' | 'ease-out' | 'ease-in-out' | 'spring' | 'soft-spring' | 'heavy-bounce' | [number, number, number, number] | ((t: number) => number) | string;
35
+ /** Keyframe definition for custom animations */
36
+ interface AnimationKeyframe {
37
+ [property: string]: string | number;
38
+ }
39
+ /** One intermediate keyframe of a preset: `offset` is 0 < offset < 1. */
40
+ interface AnimationFrame extends AnimationKeyframe {
41
+ offset: number;
42
+ }
43
+ /** Custom animation definition */
44
+ interface CustomAnimation {
45
+ from: AnimationKeyframe;
46
+ to: AnimationKeyframe;
47
+ /** Optional intermediate keyframes (overshoot, bounce, …), played between `from` and `to`. */
48
+ frames?: AnimationFrame[];
49
+ }
50
+ /** Per-element animation options */
51
+ interface AnimateOptions {
52
+ /** Animation preset name, array of presets, or custom animation object */
53
+ animation?: AnimationPreset | AnimationPreset[] | CustomAnimation;
54
+ /** Duration in milliseconds (default: 600) */
55
+ duration?: number;
56
+ /** Delay in milliseconds (default: 0) */
57
+ delay?: number;
58
+ /** Easing function (default: 'ease') */
59
+ easing?: EasingType;
60
+ /** Intersection threshold 0-1 (default: 0.1) */
61
+ threshold?: number | number[];
62
+ /** Root margin for IntersectionObserver (default: '0px') */
63
+ rootMargin?: string;
64
+ /** Whether to replay animation each time element enters viewport (default: false) */
65
+ repeat?: boolean;
66
+ /** Whether to trigger animation only once (default: true if repeat is false) */
67
+ once?: boolean;
68
+ /** Offset in pixels from the viewport edge to trigger animation (default: 0) */
69
+ offset?: number;
70
+ /** Stagger delay for child elements in ms (default: 0) */
71
+ stagger?: number;
72
+ /** Callback fired when animation starts */
73
+ onStart?: (element: Element) => void;
74
+ /** Callback fired when animation completes */
75
+ onComplete?: (element: Element) => void;
76
+ /** Callback fired when element enters viewport */
77
+ onEnter?: (element: Element) => void;
78
+ /** Callback fired when element leaves viewport */
79
+ onLeave?: (element: Element) => void;
80
+ /** Callback fired with scroll progress (0 to 1) */
81
+ onProgress?: (element: Element, progress: number) => void;
82
+ /** How progress for `onProgress`/`progressVar` is measured (default: 'ratio') */
83
+ progressMode?: ProgressMode;
84
+ /**
85
+ * Name of a CSS custom property (e.g. `'--sa-progress'`) that receives the
86
+ * element's progress (0 to 1, same value as `onProgress`) as an inline
87
+ * style, for scroll-driven effects written in plain CSS. Off by default.
88
+ */
89
+ progressVar?: string;
90
+ /**
91
+ * Animation engine (default: `'auto'`, see `ScrollEngine`). With the native
92
+ * engine the animation is linked to scroll position: `duration`, `delay`,
93
+ * `threshold`, `offset` and `stagger` do not apply; `viewRange` does.
94
+ */
95
+ engine?: ScrollEngine;
96
+ /**
97
+ * Native engine only: the view-timeline range the entrance animation spans,
98
+ * as `[rangeStart, rangeEnd]` (default: `['entry 0%', 'entry 100%']`).
99
+ */
100
+ viewRange?: [string, string];
101
+ /**
102
+ * Animate out when the element leaves the viewport, and back in when it
103
+ * re-enters (implies `repeat: true` unless `repeat` is set).
104
+ * - `true`: play the entrance animation in reverse.
105
+ * - a preset / presets / `{ from, to }`: play that animation in reverse
106
+ * (e.g. `exit: 'fade-in-down'` leaves upwards).
107
+ * Skipped under reduced motion. (default: `false`)
108
+ */
109
+ exit?: boolean | AnimationPreset | AnimationPreset[] | CustomAnimation;
110
+ }
111
+
112
+ /**
113
+ * motionary - Staggered children
114
+ * Reveal a container's children one after another when the container scrolls
115
+ * into view, optionally also animating children that are added later.
116
+ */
117
+
118
+ interface StaggerOptions extends AnimateOptions {
119
+ /** Delay between consecutive children in ms (default: 80) */
120
+ stagger?: number;
121
+ /**
122
+ * Watch the container with a MutationObserver and animate children added
123
+ * later (e.g. infinite lists). Children added after the container was
124
+ * revealed animate when they scroll into view, staggered per batch.
125
+ * (default: false)
126
+ */
127
+ observeChildren?: boolean;
128
+ }
129
+
130
+ /**
131
+ * motionary - React Integration
132
+ * Provides useScrollAnimate and useScrollStagger hooks for React applications.
133
+ * `useScrollStagger({ observeChildren: true })` also animates children added later.
134
+ *
135
+ * Both hooks are thin wrappers around the core engine, so they share its
136
+ * behaviour: `once`, `offset`, custom easing functions, progress,
137
+ * `prefers-reduced-motion` support, and proper cleanup on unmount.
138
+ */
139
+
140
+ type ReactRef<T> = {
141
+ current: T | null;
142
+ };
143
+ /**
144
+ * Wrap the callbacks that exist at mount so they always call the latest
145
+ * version from the most recent render (avoids stale closures without
146
+ * re-creating observers on every render).
147
+ * @internal
148
+ */
149
+ declare function withLatestCallbacks(latest: ReactRef<AnimateOptions>): AnimateOptions;
150
+ declare function createReactHooks(React: {
151
+ useRef: <T>(initial: T | null) => ReactRef<T>;
152
+ useEffect: (effect: () => (() => void) | void, deps?: unknown[]) => void;
153
+ }): {
154
+ useScrollAnimate: (options?: AnimateOptions) => ReactRef<Element>;
155
+ useScrollStagger: (options?: StaggerOptions) => ReactRef<Element>;
156
+ };
157
+
158
+ export { createReactHooks, withLatestCallbacks };
@@ -0,0 +1,158 @@
1
+ /**
2
+ * motionary - Core Type Definitions
3
+ * A lightweight, high-performance scroll animation library
4
+ */
5
+ /** The 33 core presets (always available in `PRESETS`). */
6
+ type CorePreset = 'fade-in' | 'fade-in-up' | 'fade-in-down' | 'fade-in-left' | 'fade-in-right' | 'zoom-in' | 'zoom-out' | 'flip-x' | 'flip-y' | 'slide-up' | 'slide-down' | 'slide-left' | 'slide-right' | 'bounce' | 'rotate-in' | 'blur-in' | 'skew-in' | 'scale-x' | 'scale-y' | 'shimmer' | 'pulse' | 'swing' | 'scale-up' | 'blur-in-up' | 'flip-up' | 'flip-down' | 'rotate-left' | 'rotate-right' | 'clip-up' | 'clip-down' | 'clip-left' | 'clip-right' | 'clip-circle';
7
+ /**
8
+ * Every built-in preset name: the core set plus the 6.1 extended set, which is
9
+ * available once `motionary/presets/extended` is loaded (or after
10
+ * `registerPresets(EXTENDED_PRESETS)`).
11
+ */
12
+ type AnimationPreset = CorePreset | ExtendedPreset;
13
+ /**
14
+ * How `onProgress` / `progressVar` progress is measured.
15
+ * - `'ratio'` (default): the element's visible ratio (IntersectionObserver `intersectionRatio`).
16
+ * - `'scroll'`: true scroll progress, 0 when the element's top touches the bottom of the
17
+ * viewport and 1 when its bottom leaves the top. Works for elements taller than the screen.
18
+ */
19
+ type ProgressMode = 'ratio' | 'scroll';
20
+ /**
21
+ * Which engine runs the entrance animation.
22
+ * - `'js'`: IntersectionObserver triggers a time-based Web Animation.
23
+ * - `'css'`: the preset runs on the browser's native scroll-driven timeline
24
+ * (`animation-timeline: view()`), so its progress follows the scroll position
25
+ * off the main thread. Falls back to `'js'` where unsupported.
26
+ * - `'auto'` (default since 2.0): native when supported, JS otherwise — and JS
27
+ * whenever the element sets `duration`, `delay`, `offset` or `stagger` itself,
28
+ * since those only mean something for a time-based animation.
29
+ */
30
+ type ScrollEngine = 'auto' | 'js' | 'css';
31
+ /** The 6.1 extended presets (`motionary/presets/extended`). */
32
+ type ExtendedPreset = 'fade-in-up-sm' | 'fade-in-down-sm' | 'fade-in-left-sm' | 'fade-in-right-sm' | 'fade-in-up-lg' | 'fade-in-down-lg' | 'fade-in-left-lg' | 'fade-in-right-lg' | 'fade-in-up-left' | 'fade-in-up-right' | 'fade-in-down-left' | 'fade-in-down-right' | 'fade-in-scale' | 'fade-in-half' | 'zoom-in-up' | 'zoom-in-down' | 'zoom-in-left' | 'zoom-in-right' | 'zoom-out-up' | 'zoom-out-down' | 'zoom-out-left' | 'zoom-out-right' | 'zoom-in-big' | 'zoom-out-big' | 'zoom-bounce' | 'zoom-in-rotate' | 'scale-x-left' | 'scale-x-right' | 'scale-y-top' | 'scale-y-bottom' | 'stretch-x' | 'stretch-y' | 'flip-x-reverse' | 'flip-y-reverse' | 'flip-y-full' | 'flip-diagonal' | 'flip-diagonal-reverse' | 'flip-left' | 'flip-right' | 'unfold-down' | 'unfold-up' | 'door-open-left' | 'door-open-right' | 'fold-in' | 'flip-x-bounce' | 'flip-y-bounce' | 'swing-in-top' | 'swing-in-bottom' | 'swing-in-left' | 'swing-in-right' | 'slide-up-spring' | 'slide-down-spring' | 'slide-left-spring' | 'slide-right-spring' | 'slide-up-sm' | 'slide-down-sm' | 'back-in-up' | 'back-in-down' | 'back-in-left' | 'back-in-right' | 'light-speed-in-left' | 'light-speed-in-right' | 'rise-in' | 'sink-in' | 'float-in-up' | 'float-in-down' | 'roll-in-left' | 'roll-in-right' | 'spiral-in' | 'spiral-in-reverse' | 'spin-in' | 'rotate-in-up-left' | 'rotate-in-up-right' | 'rotate-in-down-left' | 'rotate-in-down-right' | 'skew-in-left' | 'skew-in-y' | 'shear-in' | 'shear-in-reverse' | 'twist-in' | 'tilt-in-left' | 'tilt-in-right' | 'blur-in-down' | 'blur-in-left' | 'blur-in-right' | 'blur-in-strong' | 'blur-in-zoom' | 'blur-in-scale' | 'blur-in-x' | 'mask-up' | 'mask-down' | 'mask-left' | 'mask-right' | 'blur-mask-up' | 'clip-circle-top' | 'clip-circle-bottom' | 'clip-circle-left' | 'clip-circle-right' | 'clip-circle-corner' | 'clip-ellipse' | 'clip-diamond' | 'clip-split-x' | 'clip-split-y' | 'clip-box' | 'clip-pill' | 'clip-blinds' | 'clip-blinds-x' | 'clip-diagonal' | 'clip-diagonal-reverse' | 'clip-slant-right' | 'clip-slant-left' | 'bounce-in' | 'bounce-in-up' | 'bounce-in-down' | 'bounce-in-left' | 'bounce-in-right' | 'elastic-in' | 'elastic-in-x' | 'rubber-in' | 'jello-in' | 'wobble-in' | 'tada-in' | 'heartbeat-in' | 'drop-in' | 'pop-in' | 'squash-in' | 'shake-in' | 'swing-in' | 'brightness-in' | 'darken-in' | 'color-in' | 'saturate-in' | 'hue-in' | 'sepia-in' | 'invert-in' | 'contrast-in' | 'exposure-in' | 'vintage-in' | 'blur-bright-in' | 'shadow-lift' | 'neon-glow-in' | 'glow-in' | 'perspective-in-up' | 'perspective-in-down' | 'perspective-in-left' | 'perspective-in-right' | 'depth-push' | 'depth-pull' | 'depth-in-up' | 'swoop-in-left' | 'swoop-in-right' | 'card-tilt-in' | 'glitch-in' | 'glitch-in-color' | 'typewriter' | 'typewriter-lines' | 'hinge-in' | 'flicker-in' | 'scan-in' | 'materialize' | 'teleport-in' | 'stagger-fade-up' | 'stagger-pop' | 'stagger-rise' | 'stagger-slide' | 'stagger-flip' | 'stagger-blur' | 'stagger-zoom' | 'stagger-drop' | 'scrub-parallax-up' | 'scrub-parallax-down' | 'scrub-rotate' | 'scrub-spin' | 'scrub-scale' | 'scrub-shrink' | 'scrub-pan-left' | 'scrub-pan-right' | 'scrub-tilt' | 'scrub-fade-through' | 'scrub-blur-through' | 'scrub-reveal-x';
33
+ /** Easing function types */
34
+ type EasingType = 'linear' | 'ease' | 'ease-in' | 'ease-out' | 'ease-in-out' | 'spring' | 'soft-spring' | 'heavy-bounce' | [number, number, number, number] | ((t: number) => number) | string;
35
+ /** Keyframe definition for custom animations */
36
+ interface AnimationKeyframe {
37
+ [property: string]: string | number;
38
+ }
39
+ /** One intermediate keyframe of a preset: `offset` is 0 < offset < 1. */
40
+ interface AnimationFrame extends AnimationKeyframe {
41
+ offset: number;
42
+ }
43
+ /** Custom animation definition */
44
+ interface CustomAnimation {
45
+ from: AnimationKeyframe;
46
+ to: AnimationKeyframe;
47
+ /** Optional intermediate keyframes (overshoot, bounce, …), played between `from` and `to`. */
48
+ frames?: AnimationFrame[];
49
+ }
50
+ /** Per-element animation options */
51
+ interface AnimateOptions {
52
+ /** Animation preset name, array of presets, or custom animation object */
53
+ animation?: AnimationPreset | AnimationPreset[] | CustomAnimation;
54
+ /** Duration in milliseconds (default: 600) */
55
+ duration?: number;
56
+ /** Delay in milliseconds (default: 0) */
57
+ delay?: number;
58
+ /** Easing function (default: 'ease') */
59
+ easing?: EasingType;
60
+ /** Intersection threshold 0-1 (default: 0.1) */
61
+ threshold?: number | number[];
62
+ /** Root margin for IntersectionObserver (default: '0px') */
63
+ rootMargin?: string;
64
+ /** Whether to replay animation each time element enters viewport (default: false) */
65
+ repeat?: boolean;
66
+ /** Whether to trigger animation only once (default: true if repeat is false) */
67
+ once?: boolean;
68
+ /** Offset in pixels from the viewport edge to trigger animation (default: 0) */
69
+ offset?: number;
70
+ /** Stagger delay for child elements in ms (default: 0) */
71
+ stagger?: number;
72
+ /** Callback fired when animation starts */
73
+ onStart?: (element: Element) => void;
74
+ /** Callback fired when animation completes */
75
+ onComplete?: (element: Element) => void;
76
+ /** Callback fired when element enters viewport */
77
+ onEnter?: (element: Element) => void;
78
+ /** Callback fired when element leaves viewport */
79
+ onLeave?: (element: Element) => void;
80
+ /** Callback fired with scroll progress (0 to 1) */
81
+ onProgress?: (element: Element, progress: number) => void;
82
+ /** How progress for `onProgress`/`progressVar` is measured (default: 'ratio') */
83
+ progressMode?: ProgressMode;
84
+ /**
85
+ * Name of a CSS custom property (e.g. `'--sa-progress'`) that receives the
86
+ * element's progress (0 to 1, same value as `onProgress`) as an inline
87
+ * style, for scroll-driven effects written in plain CSS. Off by default.
88
+ */
89
+ progressVar?: string;
90
+ /**
91
+ * Animation engine (default: `'auto'`, see `ScrollEngine`). With the native
92
+ * engine the animation is linked to scroll position: `duration`, `delay`,
93
+ * `threshold`, `offset` and `stagger` do not apply; `viewRange` does.
94
+ */
95
+ engine?: ScrollEngine;
96
+ /**
97
+ * Native engine only: the view-timeline range the entrance animation spans,
98
+ * as `[rangeStart, rangeEnd]` (default: `['entry 0%', 'entry 100%']`).
99
+ */
100
+ viewRange?: [string, string];
101
+ /**
102
+ * Animate out when the element leaves the viewport, and back in when it
103
+ * re-enters (implies `repeat: true` unless `repeat` is set).
104
+ * - `true`: play the entrance animation in reverse.
105
+ * - a preset / presets / `{ from, to }`: play that animation in reverse
106
+ * (e.g. `exit: 'fade-in-down'` leaves upwards).
107
+ * Skipped under reduced motion. (default: `false`)
108
+ */
109
+ exit?: boolean | AnimationPreset | AnimationPreset[] | CustomAnimation;
110
+ }
111
+
112
+ /**
113
+ * motionary - Staggered children
114
+ * Reveal a container's children one after another when the container scrolls
115
+ * into view, optionally also animating children that are added later.
116
+ */
117
+
118
+ interface StaggerOptions extends AnimateOptions {
119
+ /** Delay between consecutive children in ms (default: 80) */
120
+ stagger?: number;
121
+ /**
122
+ * Watch the container with a MutationObserver and animate children added
123
+ * later (e.g. infinite lists). Children added after the container was
124
+ * revealed animate when they scroll into view, staggered per batch.
125
+ * (default: false)
126
+ */
127
+ observeChildren?: boolean;
128
+ }
129
+
130
+ /**
131
+ * motionary - React Integration
132
+ * Provides useScrollAnimate and useScrollStagger hooks for React applications.
133
+ * `useScrollStagger({ observeChildren: true })` also animates children added later.
134
+ *
135
+ * Both hooks are thin wrappers around the core engine, so they share its
136
+ * behaviour: `once`, `offset`, custom easing functions, progress,
137
+ * `prefers-reduced-motion` support, and proper cleanup on unmount.
138
+ */
139
+
140
+ type ReactRef<T> = {
141
+ current: T | null;
142
+ };
143
+ /**
144
+ * Wrap the callbacks that exist at mount so they always call the latest
145
+ * version from the most recent render (avoids stale closures without
146
+ * re-creating observers on every render).
147
+ * @internal
148
+ */
149
+ declare function withLatestCallbacks(latest: ReactRef<AnimateOptions>): AnimateOptions;
150
+ declare function createReactHooks(React: {
151
+ useRef: <T>(initial: T | null) => ReactRef<T>;
152
+ useEffect: (effect: () => (() => void) | void, deps?: unknown[]) => void;
153
+ }): {
154
+ useScrollAnimate: (options?: AnimateOptions) => ReactRef<Element>;
155
+ useScrollStagger: (options?: StaggerOptions) => ReactRef<Element>;
156
+ };
157
+
158
+ export { createReactHooks, withLatestCallbacks };
package/dist/react.js ADDED
@@ -0,0 +1,65 @@
1
+ import { c as createScrollAnimate } from './chunks/core-D7cVumUu.js';
2
+ import { s as staggerChildren } from './chunks/stagger-DtMKo2SK.js';
3
+ import './chunks/presets-BYBVJVeP.js';
4
+
5
+ /**
6
+ * motionary - React Integration
7
+ * Provides useScrollAnimate and useScrollStagger hooks for React applications.
8
+ * `useScrollStagger({ observeChildren: true })` also animates children added later.
9
+ *
10
+ * Both hooks are thin wrappers around the core engine, so they share its
11
+ * behaviour: `once`, `offset`, custom easing functions, progress,
12
+ * `prefers-reduced-motion` support, and proper cleanup on unmount.
13
+ */
14
+ const CALLBACKS = ['onStart', 'onComplete', 'onEnter', 'onLeave', 'onProgress'];
15
+ /**
16
+ * Wrap the callbacks that exist at mount so they always call the latest
17
+ * version from the most recent render (avoids stale closures without
18
+ * re-creating observers on every render).
19
+ * @internal
20
+ */
21
+ function withLatestCallbacks(latest) {
22
+ const initial = latest.current || {};
23
+ const opts = { ...initial };
24
+ CALLBACKS.forEach((name) => {
25
+ if (typeof initial[name] === 'function') {
26
+ opts[name] = (...args) => latest.current?.[name]?.(...args);
27
+ }
28
+ });
29
+ return opts;
30
+ }
31
+ function createReactHooks(React) {
32
+ // Created lazily on the client so importing on the server is side-effect free.
33
+ let instance = null;
34
+ const getInstance = () => instance || (instance = createScrollAnimate());
35
+ function useScrollAnimate(options = {}) {
36
+ const ref = React.useRef(null);
37
+ const optionsRef = React.useRef(options);
38
+ optionsRef.current = options;
39
+ React.useEffect(() => {
40
+ const el = ref.current;
41
+ if (!el)
42
+ return;
43
+ const sa = getInstance();
44
+ sa.observe(el, withLatestCallbacks(optionsRef));
45
+ return () => sa.unobserve(el);
46
+ }, []);
47
+ return ref;
48
+ }
49
+ function useScrollStagger(options = {}) {
50
+ const ref = React.useRef(null);
51
+ const optionsRef = React.useRef(options);
52
+ optionsRef.current = options;
53
+ React.useEffect(() => {
54
+ const container = ref.current;
55
+ if (!container)
56
+ return;
57
+ return staggerChildren(container, withLatestCallbacks(optionsRef), getInstance());
58
+ }, []);
59
+ return ref;
60
+ }
61
+ return { useScrollAnimate, useScrollStagger };
62
+ }
63
+
64
+ export { createReactHooks, withLatestCallbacks };
65
+ //# sourceMappingURL=react.js.map