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,243 @@
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
+ /** Global configuration for ScrollAnimate instance */
112
+ interface ScrollAnimateConfig {
113
+ /** Default animation preset (default: 'fade-in-up') */
114
+ defaultAnimation?: AnimationPreset | AnimationPreset[] | CustomAnimation;
115
+ /** Default duration in ms (default: 600) */
116
+ defaultDuration?: number;
117
+ /** Default delay in ms (default: 0) */
118
+ defaultDelay?: number;
119
+ /** Default easing (default: 'ease') */
120
+ defaultEasing?: EasingType;
121
+ /** Default threshold (default: 0.1) */
122
+ defaultThreshold?: number | number[];
123
+ /** Default root margin (default: '0px') */
124
+ defaultRootMargin?: string;
125
+ /** Whether animations replay by default (default: false) */
126
+ defaultRepeat?: boolean;
127
+ /** Default once setting (default: true) */
128
+ defaultOnce?: boolean;
129
+ /** Default offset in pixels (default: 0) */
130
+ defaultOffset?: number;
131
+ /** CSS class added before animation (default: 'sa-hidden') */
132
+ hiddenClass?: string;
133
+ /** CSS class added when element is visible (default: 'sa-visible') */
134
+ visibleClass?: string;
135
+ /** Whether to use CSS class-based animation instead of Web Animations API */
136
+ useClassNames?: boolean;
137
+ /** Disable all animations (useful for reduced-motion preference) */
138
+ disabled?: boolean;
139
+ /** Custom IntersectionObserver root element */
140
+ root?: Element | null;
141
+ /**
142
+ * Drop `once` elements from the registry as soon as their entrance animation
143
+ * has been triggered (unless they still need onProgress/progressVar), so they can
144
+ * be garbage-collected. They are remembered in a WeakSet, so `init()`/`observe()`
145
+ * never re-hide or replay them. (default: true)
146
+ */
147
+ autoUnregister?: boolean;
148
+ /** Default animation engine (default: `'auto'`; `'js'` restores the 1.x behaviour) */
149
+ defaultEngine?: ScrollEngine;
150
+ }
151
+ /** Registered element entry */
152
+ interface AnimatedElement {
153
+ element: Element;
154
+ options: Required<AnimateOptions>;
155
+ observer: IntersectionObserver;
156
+ animated: boolean;
157
+ progressObserver?: IntersectionObserver;
158
+ /** Engine actually used for this element (`'css'` = native scroll-driven timeline) */
159
+ engine?: 'js' | 'css';
160
+ }
161
+ /** ScrollAnimate public API */
162
+ interface ScrollAnimateInstance {
163
+ /** Observe a single element or CSS selector */
164
+ observe(target: string | Element | NodeList | Element[], options?: AnimateOptions): void;
165
+ /** Stop observing a single element or CSS selector */
166
+ unobserve(target: string | Element | NodeList | Element[]): void;
167
+ /** Observe all elements matching the data-sa attribute */
168
+ init(rootElement?: Element | Document): void;
169
+ /**
170
+ * Like `init()`, then keep watching `rootElement` (default: `document`) with a
171
+ * MutationObserver: `[data-sa]` elements added later (or that gain the
172
+ * attribute) are observed automatically, and removed ones are released.
173
+ * Returns a function that stops watching. `destroy()` stops every watcher.
174
+ * SSR-safe: a no-op without a DOM / MutationObserver.
175
+ */
176
+ watch(rootElement?: Element | Document): () => void;
177
+ /** Destroy the instance and clean up all observers */
178
+ destroy(): void;
179
+ /** Refresh all observers (useful after DOM changes) */
180
+ refresh(): void;
181
+ /** Manually trigger animation on an element */
182
+ animate(target: string | Element, options?: AnimateOptions): void;
183
+ /** Get all currently observed elements */
184
+ getObservedElements(): AnimatedElement[];
185
+ /** Update global configuration */
186
+ configure(config: Partial<ScrollAnimateConfig>): void;
187
+ }
188
+
189
+ /**
190
+ * motionary - Staggered children
191
+ * Reveal a container's children one after another when the container scrolls
192
+ * into view, optionally also animating children that are added later.
193
+ */
194
+
195
+ interface StaggerOptions extends AnimateOptions {
196
+ /** Delay between consecutive children in ms (default: 80) */
197
+ stagger?: number;
198
+ /**
199
+ * Watch the container with a MutationObserver and animate children added
200
+ * later (e.g. infinite lists). Children added after the container was
201
+ * revealed animate when they scroll into view, staggered per batch.
202
+ * (default: false)
203
+ */
204
+ observeChildren?: boolean;
205
+ }
206
+
207
+ /**
208
+ * motionary - Svelte integration
209
+ *
210
+ * Svelte actions (no import from `svelte` needed, works with Svelte 3, 4 and 5):
211
+ *
212
+ * ```svelte
213
+ * <script>
214
+ * import { scrollAnimate, scrollStagger } from 'motionary/svelte';
215
+ * </script>
216
+ * <div use:scrollAnimate={{ animation: 'fade-in-up', duration: 800 }}>…</div>
217
+ * <ul use:scrollStagger={{ stagger: 60 }}>…</ul>
218
+ * ```
219
+ */
220
+
221
+ interface ScrollAnimateActionOptions extends AnimateOptions {
222
+ /** Instance to register with (default: a shared instance created on first use) */
223
+ instance?: ScrollAnimateInstance;
224
+ }
225
+ interface ScrollStaggerActionOptions extends StaggerOptions {
226
+ instance?: ScrollAnimateInstance;
227
+ }
228
+ /** Shape of a Svelte action's return value. */
229
+ interface ActionReturn<P> {
230
+ update?: (parameter: P) => void;
231
+ destroy?: () => void;
232
+ }
233
+ /**
234
+ * Animate `node` when it scrolls into view. Changing the parameter updates the
235
+ * callbacks right away; other options are applied if the element has not
236
+ * animated yet.
237
+ */
238
+ declare function scrollAnimate(node: Element, options?: ScrollAnimateActionOptions): ActionReturn<ScrollAnimateActionOptions | undefined>;
239
+ /** Stagger the children of `node` when it scrolls into view (`observeChildren: true` also animates children added later). */
240
+ declare function scrollStagger(node: Element, options?: ScrollStaggerActionOptions): ActionReturn<ScrollStaggerActionOptions | undefined>;
241
+
242
+ export { scrollAnimate, scrollStagger };
243
+ export type { ActionReturn, ScrollAnimateActionOptions, ScrollStaggerActionOptions };
package/dist/svelte.js ADDED
@@ -0,0 +1,63 @@
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 - Svelte integration
7
+ *
8
+ * Svelte actions (no import from `svelte` needed, works with Svelte 3, 4 and 5):
9
+ *
10
+ * ```svelte
11
+ * <script>
12
+ * import { scrollAnimate, scrollStagger } from 'motionary/svelte';
13
+ * </script>
14
+ * <div use:scrollAnimate={{ animation: 'fade-in-up', duration: 800 }}>…</div>
15
+ * <ul use:scrollStagger={{ stagger: 60 }}>…</ul>
16
+ * ```
17
+ */
18
+ let shared = null;
19
+ const getInstance = (own) => own || shared || (shared = createScrollAnimate());
20
+ const CALLBACKS = ['onStart', 'onComplete', 'onEnter', 'onLeave', 'onProgress'];
21
+ /** Callbacks always call the latest parameter's version. */
22
+ function liveCallbacks(opts, latest) {
23
+ const out = { ...opts };
24
+ CALLBACKS.forEach((name) => {
25
+ if (typeof opts[name] === 'function')
26
+ out[name] = (...args) => latest()[name]?.(...args);
27
+ });
28
+ return out;
29
+ }
30
+ /**
31
+ * Animate `node` when it scrolls into view. Changing the parameter updates the
32
+ * callbacks right away; other options are applied if the element has not
33
+ * animated yet.
34
+ */
35
+ function scrollAnimate(node, options = {}) {
36
+ let current = options;
37
+ const { instance, ...opts } = options;
38
+ const sa = getInstance(instance);
39
+ sa.observe(node, liveCallbacks(opts, () => current));
40
+ return {
41
+ update(next = {}) {
42
+ current = next;
43
+ const record = sa.getObservedElements().find((r) => r.element === node);
44
+ if (record && !record.animated) {
45
+ const { instance: _ignored, ...nextOpts } = next;
46
+ sa.unobserve(node);
47
+ sa.observe(node, liveCallbacks(nextOpts, () => current));
48
+ }
49
+ },
50
+ destroy() {
51
+ sa.unobserve(node);
52
+ },
53
+ };
54
+ }
55
+ /** Stagger the children of `node` when it scrolls into view (`observeChildren: true` also animates children added later). */
56
+ function scrollStagger(node, options = {}) {
57
+ const { instance, ...opts } = options;
58
+ const stop = staggerChildren(node, opts, getInstance(instance));
59
+ return { destroy: stop };
60
+ }
61
+
62
+ export { scrollAnimate, scrollStagger };
63
+ //# sourceMappingURL=svelte.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"svelte.js","sources":["../src/svelte.ts"],"sourcesContent":["/**\n * motionary - Svelte integration\n *\n * Svelte actions (no import from `svelte` needed, works with Svelte 3, 4 and 5):\n *\n * ```svelte\n * <script>\n * import { scrollAnimate, scrollStagger } from 'motionary/svelte';\n * </script>\n * <div use:scrollAnimate={{ animation: 'fade-in-up', duration: 800 }}>…</div>\n * <ul use:scrollStagger={{ stagger: 60 }}>…</ul>\n * ```\n */\n\nimport type { AnimateOptions, ScrollAnimateInstance } from './types';\nimport { createScrollAnimate } from './core';\nimport { staggerChildren, type StaggerOptions } from './stagger';\n\nexport interface ScrollAnimateActionOptions extends AnimateOptions {\n /** Instance to register with (default: a shared instance created on first use) */\n instance?: ScrollAnimateInstance;\n}\n\nexport interface ScrollStaggerActionOptions extends StaggerOptions {\n instance?: ScrollAnimateInstance;\n}\n\n/** Shape of a Svelte action's return value. */\nexport interface ActionReturn<P> {\n update?: (parameter: P) => void;\n destroy?: () => void;\n}\n\nlet shared: ScrollAnimateInstance | null = null;\nconst getInstance = (own?: ScrollAnimateInstance) => own || shared || (shared = createScrollAnimate());\n\nconst CALLBACKS = ['onStart', 'onComplete', 'onEnter', 'onLeave', 'onProgress'] as const;\n\n/** Callbacks always call the latest parameter's version. */\nfunction liveCallbacks(opts: AnimateOptions, latest: () => AnimateOptions): AnimateOptions {\n const out: AnimateOptions = { ...opts };\n CALLBACKS.forEach((name) => {\n if (typeof opts[name] === 'function') (out as any)[name] = (...args: unknown[]) => (latest()[name] as any)?.(...args);\n });\n return out;\n}\n\n/**\n * Animate `node` when it scrolls into view. Changing the parameter updates the\n * callbacks right away; other options are applied if the element has not\n * animated yet.\n */\nexport function scrollAnimate(\n node: Element,\n options: ScrollAnimateActionOptions = {}\n): ActionReturn<ScrollAnimateActionOptions | undefined> {\n let current = options;\n const { instance, ...opts } = options;\n const sa = getInstance(instance);\n sa.observe(node, liveCallbacks(opts, () => current));\n\n return {\n update(next = {}) {\n current = next;\n const record = sa.getObservedElements().find((r) => r.element === node);\n if (record && !record.animated) {\n const { instance: _ignored, ...nextOpts } = next;\n sa.unobserve(node);\n sa.observe(node, liveCallbacks(nextOpts, () => current));\n }\n },\n destroy() {\n sa.unobserve(node);\n },\n };\n}\n\n/** Stagger the children of `node` when it scrolls into view (`observeChildren: true` also animates children added later). */\nexport function scrollStagger(\n node: Element,\n options: ScrollStaggerActionOptions = {}\n): ActionReturn<ScrollStaggerActionOptions | undefined> {\n const { instance, ...opts } = options;\n const stop = staggerChildren(node, opts, getInstance(instance));\n return { destroy: stop };\n}\n"],"names":[],"mappings":";;;;AAAA;;;;;;;;;;;;AAYG;AAqBH,IAAI,MAAM,GAAiC,IAAI;AAC/C,MAAM,WAAW,GAAG,CAAC,GAA2B,KAAK,GAAG,IAAI,MAAM,KAAK,MAAM,GAAG,mBAAmB,EAAE,CAAC;AAEtG,MAAM,SAAS,GAAG,CAAC,SAAS,EAAE,YAAY,EAAE,SAAS,EAAE,SAAS,EAAE,YAAY,CAAU;AAExF;AACA,SAAS,aAAa,CAAC,IAAoB,EAAE,MAA4B,EAAA;AACvE,IAAA,MAAM,GAAG,GAAmB,EAAE,GAAG,IAAI,EAAE;AACvC,IAAA,SAAS,CAAC,OAAO,CAAC,CAAC,IAAI,KAAI;AACzB,QAAA,IAAI,OAAO,IAAI,CAAC,IAAI,CAAC,KAAK,UAAU;YAAG,GAAW,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,IAAe,KAAM,MAAM,EAAE,CAAC,IAAI,CAAS,GAAG,GAAG,IAAI,CAAC;AACvH,IAAA,CAAC,CAAC;AACF,IAAA,OAAO,GAAG;AACZ;AAEA;;;;AAIG;SACa,aAAa,CAC3B,IAAa,EACb,UAAsC,EAAE,EAAA;IAExC,IAAI,OAAO,GAAG,OAAO;IACrB,MAAM,EAAE,QAAQ,EAAE,GAAG,IAAI,EAAE,GAAG,OAAO;AACrC,IAAA,MAAM,EAAE,GAAG,WAAW,CAAC,QAAQ,CAAC;AAChC,IAAA,EAAE,CAAC,OAAO,CAAC,IAAI,EAAE,aAAa,CAAC,IAAI,EAAE,MAAM,OAAO,CAAC,CAAC;IAEpD,OAAO;QACL,MAAM,CAAC,IAAI,GAAG,EAAE,EAAA;YACd,OAAO,GAAG,IAAI;YACd,MAAM,MAAM,GAAG,EAAE,CAAC,mBAAmB,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,OAAO,KAAK,IAAI,CAAC;AACvE,YAAA,IAAI,MAAM,IAAI,CAAC,MAAM,CAAC,QAAQ,EAAE;gBAC9B,MAAM,EAAE,QAAQ,EAAE,QAAQ,EAAE,GAAG,QAAQ,EAAE,GAAG,IAAI;AAChD,gBAAA,EAAE,CAAC,SAAS,CAAC,IAAI,CAAC;AAClB,gBAAA,EAAE,CAAC,OAAO,CAAC,IAAI,EAAE,aAAa,CAAC,QAAQ,EAAE,MAAM,OAAO,CAAC,CAAC;YAC1D;QACF,CAAC;QACD,OAAO,GAAA;AACL,YAAA,EAAE,CAAC,SAAS,CAAC,IAAI,CAAC;QACpB,CAAC;KACF;AACH;AAEA;SACgB,aAAa,CAC3B,IAAa,EACb,UAAsC,EAAE,EAAA;IAExC,MAAM,EAAE,QAAQ,EAAE,GAAG,IAAI,EAAE,GAAG,OAAO;AACrC,IAAA,MAAM,IAAI,GAAG,eAAe,CAAC,IAAI,EAAE,IAAI,EAAE,WAAW,CAAC,QAAQ,CAAC,CAAC;AAC/D,IAAA,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE;AAC1B;;;;"}
package/dist/vue.cjs ADDED
@@ -0,0 +1,62 @@
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 - Vue 3 Integration
9
+ * Provides useScrollAnimate and useScrollStagger composables for Vue 3 applications.
10
+ *
11
+ * A thin wrapper around the core engine, so it shares its behaviour: `once`,
12
+ * `offset`, custom easing functions, progress, `prefers-reduced-motion`
13
+ * support, and cleanup on unmount.
14
+ */
15
+ /** Support refs on components (`$el`) as well as plain elements. */
16
+ function unwrap(value) {
17
+ if (value && typeof Element !== 'undefined' && !(value instanceof Element) && value.$el instanceof Element) {
18
+ return value.$el;
19
+ }
20
+ return value || null;
21
+ }
22
+ function createVueComposables(Vue) {
23
+ // Created lazily on the client so importing on the server is side-effect free.
24
+ let instance = null;
25
+ const getInstance = () => instance || (instance = core.createScrollAnimate());
26
+ function useScrollAnimate(options = {}) {
27
+ const animateRef = Vue.ref(null);
28
+ let el = null;
29
+ Vue.onMounted(() => {
30
+ const target = unwrap(animateRef.value);
31
+ if (!target)
32
+ return;
33
+ el = target;
34
+ getInstance().observe(el, options);
35
+ });
36
+ Vue.onUnmounted(() => {
37
+ if (el)
38
+ getInstance().unobserve(el);
39
+ el = null;
40
+ });
41
+ return { animateRef };
42
+ }
43
+ /** Stagger the children of `staggerRef`; `observeChildren: true` also animates children added later. */
44
+ function useScrollStagger(options = {}) {
45
+ const staggerRef = Vue.ref(null);
46
+ let stop;
47
+ Vue.onMounted(() => {
48
+ const target = unwrap(staggerRef.value);
49
+ if (target)
50
+ stop = stagger.staggerChildren(target, options, getInstance());
51
+ });
52
+ Vue.onUnmounted(() => {
53
+ stop?.();
54
+ stop = undefined;
55
+ });
56
+ return { staggerRef };
57
+ }
58
+ return { useScrollAnimate, useScrollStagger };
59
+ }
60
+
61
+ exports.createVueComposables = createVueComposables;
62
+ //# sourceMappingURL=vue.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"vue.cjs","sources":["../src/vue.ts"],"sourcesContent":["/**\n * motionary - Vue 3 Integration\n * Provides useScrollAnimate and useScrollStagger composables for Vue 3 applications.\n *\n * A thin wrapper around the core engine, so it shares its behaviour: `once`,\n * `offset`, custom easing functions, progress, `prefers-reduced-motion`\n * support, and cleanup on unmount.\n */\n\nimport type { AnimateOptions, ScrollAnimateInstance } from './types';\nimport { createScrollAnimate } from './core';\nimport { staggerChildren, type StaggerOptions } from './stagger';\n\n/** Support refs on components (`$el`) as well as plain elements. */\nfunction unwrap(value: unknown): Element | null {\n if (value && typeof Element !== 'undefined' && !(value instanceof Element) && (value as any).$el instanceof Element) {\n return (value as any).$el as Element;\n }\n return (value as Element | null) || null;\n}\n\nexport function createVueComposables(Vue: {\n ref: <T>(value: T | null) => { value: T | null };\n onMounted: (fn: () => void) => void;\n onUnmounted: (fn: () => void) => void;\n}) {\n // Created lazily on the client so importing on the server is side-effect free.\n let instance: ScrollAnimateInstance | null = null;\n const getInstance = () => instance || (instance = createScrollAnimate());\n\n function useScrollAnimate(options: AnimateOptions = {}) {\n const animateRef = Vue.ref<Element>(null);\n let el: Element | null = null;\n\n Vue.onMounted(() => {\n const target = unwrap(animateRef.value);\n if (!target) return;\n el = target;\n getInstance().observe(el, options);\n });\n\n Vue.onUnmounted(() => {\n if (el) getInstance().unobserve(el);\n el = null;\n });\n\n return { animateRef };\n }\n\n /** Stagger the children of `staggerRef`; `observeChildren: true` also animates children added later. */\n function useScrollStagger(options: StaggerOptions = {}) {\n const staggerRef = Vue.ref<Element>(null);\n let stop: (() => void) | undefined;\n\n Vue.onMounted(() => {\n const target = unwrap(staggerRef.value);\n if (target) stop = staggerChildren(target, options, getInstance());\n });\n\n Vue.onUnmounted(() => {\n stop?.();\n stop = undefined;\n });\n\n return { staggerRef };\n }\n\n return { useScrollAnimate, useScrollStagger };\n}\n"],"names":["createScrollAnimate","staggerChildren"],"mappings":";;;;;;AAAA;;;;;;;AAOG;AAMH;AACA,SAAS,MAAM,CAAC,KAAc,EAAA;IAC5B,IAAI,KAAK,IAAI,OAAO,OAAO,KAAK,WAAW,IAAI,EAAE,KAAK,YAAY,OAAO,CAAC,IAAK,KAAa,CAAC,GAAG,YAAY,OAAO,EAAE;QACnH,OAAQ,KAAa,CAAC,GAAc;IACtC;IACA,OAAQ,KAAwB,IAAI,IAAI;AAC1C;AAEM,SAAU,oBAAoB,CAAC,GAIpC,EAAA;;IAEC,IAAI,QAAQ,GAAiC,IAAI;AACjD,IAAA,MAAM,WAAW,GAAG,MAAM,QAAQ,KAAK,QAAQ,GAAGA,wBAAmB,EAAE,CAAC;IAExE,SAAS,gBAAgB,CAAC,OAAA,GAA0B,EAAE,EAAA;QACpD,MAAM,UAAU,GAAG,GAAG,CAAC,GAAG,CAAU,IAAI,CAAC;QACzC,IAAI,EAAE,GAAmB,IAAI;AAE7B,QAAA,GAAG,CAAC,SAAS,CAAC,MAAK;YACjB,MAAM,MAAM,GAAG,MAAM,CAAC,UAAU,CAAC,KAAK,CAAC;AACvC,YAAA,IAAI,CAAC,MAAM;gBAAE;YACb,EAAE,GAAG,MAAM;YACX,WAAW,EAAE,CAAC,OAAO,CAAC,EAAE,EAAE,OAAO,CAAC;AACpC,QAAA,CAAC,CAAC;AAEF,QAAA,GAAG,CAAC,WAAW,CAAC,MAAK;AACnB,YAAA,IAAI,EAAE;AAAE,gBAAA,WAAW,EAAE,CAAC,SAAS,CAAC,EAAE,CAAC;YACnC,EAAE,GAAG,IAAI;AACX,QAAA,CAAC,CAAC;QAEF,OAAO,EAAE,UAAU,EAAE;IACvB;;IAGA,SAAS,gBAAgB,CAAC,OAAA,GAA0B,EAAE,EAAA;QACpD,MAAM,UAAU,GAAG,GAAG,CAAC,GAAG,CAAU,IAAI,CAAC;AACzC,QAAA,IAAI,IAA8B;AAElC,QAAA,GAAG,CAAC,SAAS,CAAC,MAAK;YACjB,MAAM,MAAM,GAAG,MAAM,CAAC,UAAU,CAAC,KAAK,CAAC;AACvC,YAAA,IAAI,MAAM;gBAAE,IAAI,GAAGC,uBAAe,CAAC,MAAM,EAAE,OAAO,EAAE,WAAW,EAAE,CAAC;AACpE,QAAA,CAAC,CAAC;AAEF,QAAA,GAAG,CAAC,WAAW,CAAC,MAAK;YACnB,IAAI,IAAI;YACR,IAAI,GAAG,SAAS;AAClB,QAAA,CAAC,CAAC;QAEF,OAAO,EAAE,UAAU,EAAE;IACvB;AAEA,IAAA,OAAO,EAAE,gBAAgB,EAAE,gBAAgB,EAAE;AAC/C;;;;"}
package/dist/vue.d.cts ADDED
@@ -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 - Vue 3 Integration
132
+ * Provides useScrollAnimate and useScrollStagger composables for Vue 3 applications.
133
+ *
134
+ * A thin wrapper around the core engine, so it shares its behaviour: `once`,
135
+ * `offset`, custom easing functions, progress, `prefers-reduced-motion`
136
+ * support, and cleanup on unmount.
137
+ */
138
+
139
+ declare function createVueComposables(Vue: {
140
+ ref: <T>(value: T | null) => {
141
+ value: T | null;
142
+ };
143
+ onMounted: (fn: () => void) => void;
144
+ onUnmounted: (fn: () => void) => void;
145
+ }): {
146
+ useScrollAnimate: (options?: AnimateOptions) => {
147
+ animateRef: {
148
+ value: Element | null;
149
+ };
150
+ };
151
+ useScrollStagger: (options?: StaggerOptions) => {
152
+ staggerRef: {
153
+ value: Element | null;
154
+ };
155
+ };
156
+ };
157
+
158
+ export { createVueComposables };