use-scroll-animate 10.2.0 → 10.4.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (403) hide show
  1. package/AGENTS.md +4 -0
  2. package/CHANGELOG.md +35 -0
  3. package/README.md +67 -0
  4. package/bin/motionary-mcp.mjs +265 -0
  5. package/dist/chunks/anim-image-DDdb9q3X.js +166 -0
  6. package/dist/chunks/anim-image-DDdb9q3X.js.map +1 -0
  7. package/dist/chunks/anim-image-blQgPFFS.cjs +174 -0
  8. package/dist/chunks/anim-image-blQgPFFS.cjs.map +1 -0
  9. package/dist/chunks/audio-BpU-A1m1.cjs.map +1 -1
  10. package/dist/chunks/{audio-D95jwlOh.js → audio-CWt1xdZB.js} +3 -3
  11. package/dist/chunks/{audio-D95jwlOh.js.map → audio-CWt1xdZB.js.map} +1 -1
  12. package/dist/chunks/{base-BnRyfuyM.js → base-BTev8qxg.js} +2 -2
  13. package/dist/chunks/{base-BnRyfuyM.js.map → base-BTev8qxg.js.map} +1 -1
  14. package/dist/chunks/base-DBheNxJu.cjs.map +1 -1
  15. package/dist/chunks/bind-B_CTL6Qn.js.map +1 -1
  16. package/dist/chunks/bind-Ui43-n2d.cjs.map +1 -1
  17. package/dist/chunks/builtins-CKKZNR95.cjs.map +1 -1
  18. package/dist/chunks/{builtins-CqIq1zBv.js → builtins-CPmS6aDB.js} +3 -3
  19. package/dist/chunks/{builtins-CqIq1zBv.js.map → builtins-CPmS6aDB.js.map} +1 -1
  20. package/dist/chunks/core-B5T0dhFH.cjs.map +1 -1
  21. package/dist/chunks/{core-DsGoL9EY.js → core-BviA7nFa.js} +2 -2
  22. package/dist/chunks/{core-DsGoL9EY.js.map → core-BviA7nFa.js.map} +1 -1
  23. package/dist/chunks/core-D74Fz-dL.cjs.map +1 -1
  24. package/dist/chunks/core-D7cVumUu.js.map +1 -1
  25. package/dist/chunks/{core-XA2yhn1b.js → core-KiM7MXjL.js} +2 -2
  26. package/dist/chunks/{core-XA2yhn1b.js.map → core-KiM7MXjL.js.map} +1 -1
  27. package/dist/chunks/core-MQlXZKUG.cjs.map +1 -1
  28. package/dist/chunks/ease-HwYZnZat.cjs +94 -0
  29. package/dist/chunks/ease-HwYZnZat.cjs.map +1 -0
  30. package/dist/chunks/ease-XN8_0sXu.js +89 -0
  31. package/dist/chunks/ease-XN8_0sXu.js.map +1 -0
  32. package/dist/chunks/fx-B_pbhpDp.cjs.map +1 -1
  33. package/dist/chunks/{fx-CtnrFEg9.js → fx-CgWKqVsn.js} +2 -2
  34. package/dist/chunks/{fx-CtnrFEg9.js.map → fx-CgWKqVsn.js.map} +1 -1
  35. package/dist/chunks/generative-2LhxG5BJ.js.map +1 -1
  36. package/dist/chunks/generative-BHIj-NU0.cjs.map +1 -1
  37. package/dist/chunks/{gpu-CDcXiNA8.js → gpu-BWfgYWMY.js} +2 -2
  38. package/dist/chunks/{gpu-CDcXiNA8.js.map → gpu-BWfgYWMY.js.map} +1 -1
  39. package/dist/chunks/gpu-cUixt7kT.cjs.map +1 -1
  40. package/dist/chunks/index-tags-B-JBecYg.js.map +1 -1
  41. package/dist/chunks/index-tags-hLIF2Clq.cjs.map +1 -1
  42. package/dist/chunks/{keyframes-W-474DMc.js → keyframes-B5PWe5bU.js} +3 -2
  43. package/dist/chunks/keyframes-B5PWe5bU.js.map +1 -0
  44. package/dist/chunks/{keyframes-ZheOkpt0.cjs → keyframes-tC3I7anQ.cjs} +4 -3
  45. package/dist/chunks/keyframes-tC3I7anQ.cjs.map +1 -0
  46. package/dist/chunks/{manifest-D58HXVY-.js → manifest-BHx5yPN6.js} +2 -2
  47. package/dist/chunks/{manifest-D58HXVY-.js.map → manifest-BHx5yPN6.js.map} +1 -1
  48. package/dist/chunks/manifest-PaF9B8Vt.cjs.map +1 -1
  49. package/dist/chunks/{player-48Zy_NBG.js → player-BfHMNtiM.js} +4 -4
  50. package/dist/chunks/{player-48Zy_NBG.js.map → player-BfHMNtiM.js.map} +1 -1
  51. package/dist/chunks/player-C4y4jXSv.cjs.map +1 -1
  52. package/dist/chunks/presets-BYBVJVeP.js.map +1 -1
  53. package/dist/chunks/presets-CUHys3sK.cjs.map +1 -1
  54. package/dist/chunks/{registry-gFJRpPES.js → registry-BKzyg1JV.js} +2 -2
  55. package/dist/chunks/{registry-gFJRpPES.js.map → registry-BKzyg1JV.js.map} +1 -1
  56. package/dist/chunks/{registry-BIEjKngP.js → registry-CT-TT_bx.js} +3 -3
  57. package/dist/chunks/{registry-BIEjKngP.js.map → registry-CT-TT_bx.js.map} +1 -1
  58. package/dist/chunks/{registry-eJgpFAzI.cjs → registry-tzwKkldE.cjs} +2 -2
  59. package/dist/chunks/{registry-eJgpFAzI.cjs.map → registry-tzwKkldE.cjs.map} +1 -1
  60. package/dist/chunks/registry-xQZnSqqV.cjs.map +1 -1
  61. package/dist/chunks/shared-CkKHWrtJ.js.map +1 -1
  62. package/dist/chunks/shared-jkgRH-Hx.cjs.map +1 -1
  63. package/dist/chunks/{spring-CZDNyqWp.js → spring-BHuP55DR.js} +2 -2
  64. package/dist/chunks/{spring-CZDNyqWp.js.map → spring-BHuP55DR.js.map} +1 -1
  65. package/dist/chunks/spring-BlTQD2AV.cjs.map +1 -1
  66. package/dist/chunks/stagger-CCFyhzSw.cjs.map +1 -1
  67. package/dist/chunks/stagger-DtMKo2SK.js.map +1 -1
  68. package/dist/chunks/{ticker-CM_56oVy.js → ticker-C8lSGml9.js} +2 -2
  69. package/dist/chunks/{ticker-CM_56oVy.js.map → ticker-C8lSGml9.js.map} +1 -1
  70. package/dist/chunks/{ticker-D4o6enH0.cjs → ticker-Un0bvTWR.cjs} +2 -2
  71. package/dist/chunks/{ticker-D4o6enH0.cjs.map → ticker-Un0bvTWR.cjs.map} +1 -1
  72. package/dist/chunks/{tween-CqX1JBuj.js → tween-BcejKpsx.js} +15 -91
  73. package/dist/chunks/tween-BcejKpsx.js.map +1 -0
  74. package/dist/chunks/{tween-CBuWYpI-.cjs → tween-CwLLC3Ko.cjs} +15 -95
  75. package/dist/chunks/tween-CwLLC3Ko.cjs.map +1 -0
  76. package/dist/chunks/variants-CrDDJoYK.cjs.map +1 -1
  77. package/dist/chunks/{variants-GU3yIL4F.js → variants-CsRGUIyA.js} +2 -2
  78. package/dist/chunks/{variants-GU3yIL4F.js.map → variants-CsRGUIyA.js.map} +1 -1
  79. package/dist/components/a11y.cjs.map +1 -1
  80. package/dist/components/a11y.js +2 -2
  81. package/dist/components/a11y.js.map +1 -1
  82. package/dist/components/angular.cjs.map +1 -1
  83. package/dist/components/angular.js +8 -8
  84. package/dist/components/angular.js.map +1 -1
  85. package/dist/components/background.cjs.map +1 -1
  86. package/dist/components/background.js +2 -2
  87. package/dist/components/background.js.map +1 -1
  88. package/dist/components/bridge.cjs.map +1 -1
  89. package/dist/components/bridge.js +1 -1
  90. package/dist/components/bridge.js.map +1 -1
  91. package/dist/components/cards.cjs.map +1 -1
  92. package/dist/components/cards.js +2 -2
  93. package/dist/components/cards.js.map +1 -1
  94. package/dist/components/click.cjs.map +1 -1
  95. package/dist/components/click.js +3 -3
  96. package/dist/components/click.js.map +1 -1
  97. package/dist/components/core.cjs.map +1 -1
  98. package/dist/components/core.js.map +1 -1
  99. package/dist/components/depth.cjs.map +1 -1
  100. package/dist/components/depth.js +3 -3
  101. package/dist/components/depth.js.map +1 -1
  102. package/dist/components/design.cjs.map +1 -1
  103. package/dist/components/design.js +3 -3
  104. package/dist/components/design.js.map +1 -1
  105. package/dist/components/dsl.cjs.map +1 -1
  106. package/dist/components/dsl.js +2 -2
  107. package/dist/components/dsl.js.map +1 -1
  108. package/dist/components/effects.cjs.map +1 -1
  109. package/dist/components/effects.js +9 -9
  110. package/dist/components/effects.js.map +1 -1
  111. package/dist/components/engine.cjs.map +1 -1
  112. package/dist/components/engine.js +2 -2
  113. package/dist/components/engine.js.map +1 -1
  114. package/dist/components/feedback.cjs.map +1 -1
  115. package/dist/components/feedback.js +1 -1
  116. package/dist/components/feedback.js.map +1 -1
  117. package/dist/components/fx-3d.cjs.map +1 -1
  118. package/dist/components/fx-3d.js +2 -2
  119. package/dist/components/fx-3d.js.map +1 -1
  120. package/dist/components/fx-ai.cjs.map +1 -1
  121. package/dist/components/fx-ai.js +2 -2
  122. package/dist/components/fx-ai.js.map +1 -1
  123. package/dist/components/fx-chart.cjs.map +1 -1
  124. package/dist/components/fx-chart.js +2 -2
  125. package/dist/components/fx-chart.js.map +1 -1
  126. package/dist/components/fx-cinema.cjs.map +1 -1
  127. package/dist/components/fx-cinema.js +2 -2
  128. package/dist/components/fx-cinema.js.map +1 -1
  129. package/dist/components/fx-cyber.cjs.map +1 -1
  130. package/dist/components/fx-cyber.js +2 -2
  131. package/dist/components/fx-cyber.js.map +1 -1
  132. package/dist/components/fx-festival.cjs.map +1 -1
  133. package/dist/components/fx-festival.js +2 -2
  134. package/dist/components/fx-festival.js.map +1 -1
  135. package/dist/components/fx-focus.cjs.map +1 -1
  136. package/dist/components/fx-focus.js +2 -2
  137. package/dist/components/fx-focus.js.map +1 -1
  138. package/dist/components/fx-form.cjs.map +1 -1
  139. package/dist/components/fx-form.js +2 -2
  140. package/dist/components/fx-form.js.map +1 -1
  141. package/dist/components/fx-game.cjs.map +1 -1
  142. package/dist/components/fx-game.js +2 -2
  143. package/dist/components/fx-game.js.map +1 -1
  144. package/dist/components/fx-genart.cjs.map +1 -1
  145. package/dist/components/fx-genart.js +2 -2
  146. package/dist/components/fx-genart.js.map +1 -1
  147. package/dist/components/fx-geo.cjs.map +1 -1
  148. package/dist/components/fx-geo.js +2 -2
  149. package/dist/components/fx-geo.js.map +1 -1
  150. package/dist/components/fx-gesture.cjs.map +1 -1
  151. package/dist/components/fx-gesture.js +2 -2
  152. package/dist/components/fx-gesture.js.map +1 -1
  153. package/dist/components/fx-gpu.js +3 -3
  154. package/dist/components/fx-light.cjs.map +1 -1
  155. package/dist/components/fx-light.js +2 -2
  156. package/dist/components/fx-light.js.map +1 -1
  157. package/dist/components/fx-lottie.cjs.map +1 -1
  158. package/dist/components/fx-lottie.js +2 -2
  159. package/dist/components/fx-lottie.js.map +1 -1
  160. package/dist/components/fx-morph.cjs.map +1 -1
  161. package/dist/components/fx-morph.js +2 -2
  162. package/dist/components/fx-morph.js.map +1 -1
  163. package/dist/components/fx-music.cjs.map +1 -1
  164. package/dist/components/fx-music.js +3 -3
  165. package/dist/components/fx-music.js.map +1 -1
  166. package/dist/components/fx-organic.cjs.map +1 -1
  167. package/dist/components/fx-organic.js +2 -2
  168. package/dist/components/fx-organic.js.map +1 -1
  169. package/dist/components/fx-paper.cjs.map +1 -1
  170. package/dist/components/fx-paper.js +2 -2
  171. package/dist/components/fx-paper.js.map +1 -1
  172. package/dist/components/fx-perf.cjs.map +1 -1
  173. package/dist/components/fx-perf.js +2 -2
  174. package/dist/components/fx-perf.js.map +1 -1
  175. package/dist/components/fx-physics.cjs.map +1 -1
  176. package/dist/components/fx-physics.js +2 -2
  177. package/dist/components/fx-physics.js.map +1 -1
  178. package/dist/components/fx-retro.cjs.map +1 -1
  179. package/dist/components/fx-retro.js +2 -2
  180. package/dist/components/fx-retro.js.map +1 -1
  181. package/dist/components/fx-safe.cjs.map +1 -1
  182. package/dist/components/fx-safe.js +2 -2
  183. package/dist/components/fx-safe.js.map +1 -1
  184. package/dist/components/fx-shop.cjs.map +1 -1
  185. package/dist/components/fx-shop.js +2 -2
  186. package/dist/components/fx-shop.js.map +1 -1
  187. package/dist/components/fx-social.cjs.map +1 -1
  188. package/dist/components/fx-social.js +2 -2
  189. package/dist/components/fx-social.js.map +1 -1
  190. package/dist/components/fx-spatial.cjs.map +1 -1
  191. package/dist/components/fx-spatial.js +2 -2
  192. package/dist/components/fx-spatial.js.map +1 -1
  193. package/dist/components/fx-surface.cjs.map +1 -1
  194. package/dist/components/fx-surface.js +2 -2
  195. package/dist/components/fx-surface.js.map +1 -1
  196. package/dist/components/fx-text.cjs.map +1 -1
  197. package/dist/components/fx-text.js +2 -2
  198. package/dist/components/fx-text.js.map +1 -1
  199. package/dist/components/fx-transitions.cjs.map +1 -1
  200. package/dist/components/fx-transitions.js +3 -3
  201. package/dist/components/fx-transitions.js.map +1 -1
  202. package/dist/components/fx-video.cjs.map +1 -1
  203. package/dist/components/fx-video.js +2 -2
  204. package/dist/components/fx-video.js.map +1 -1
  205. package/dist/components/fx-weather.cjs.map +1 -1
  206. package/dist/components/fx-weather.js +2 -2
  207. package/dist/components/fx-weather.js.map +1 -1
  208. package/dist/components/fx.cjs.map +1 -1
  209. package/dist/components/fx.js +6 -6
  210. package/dist/components/fx.js.map +1 -1
  211. package/dist/components/fx2.cjs.map +1 -1
  212. package/dist/components/fx2.js +6 -6
  213. package/dist/components/fx2.js.map +1 -1
  214. package/dist/components/gesture.cjs.map +1 -1
  215. package/dist/components/gesture.js +4 -4
  216. package/dist/components/gesture.js.map +1 -1
  217. package/dist/components/interaction.cjs.map +1 -1
  218. package/dist/components/interaction.js +1 -1
  219. package/dist/components/interaction.js.map +1 -1
  220. package/dist/components/layout.cjs.map +1 -1
  221. package/dist/components/layout.js +1 -1
  222. package/dist/components/layout.js.map +1 -1
  223. package/dist/components/lazy.cjs.map +1 -1
  224. package/dist/components/lazy.js.map +1 -1
  225. package/dist/components/lite.cjs.map +1 -1
  226. package/dist/components/lite.js.map +1 -1
  227. package/dist/components/marketplace.cjs.map +1 -1
  228. package/dist/components/marketplace.js +4 -4
  229. package/dist/components/marketplace.js.map +1 -1
  230. package/dist/components/native.cjs.map +1 -1
  231. package/dist/components/native.js +3 -3
  232. package/dist/components/native.js.map +1 -1
  233. package/dist/components/packs.cjs.map +1 -1
  234. package/dist/components/packs.js +1 -1
  235. package/dist/components/packs.js.map +1 -1
  236. package/dist/components/page.cjs.map +1 -1
  237. package/dist/components/page.js +3 -3
  238. package/dist/components/page.js.map +1 -1
  239. package/dist/components/perf.cjs.map +1 -1
  240. package/dist/components/perf.js +2 -2
  241. package/dist/components/perf.js.map +1 -1
  242. package/dist/components/physics.cjs.map +1 -1
  243. package/dist/components/physics.js +3 -3
  244. package/dist/components/physics.js.map +1 -1
  245. package/dist/components/plugins.cjs.map +1 -1
  246. package/dist/components/plugins.js +4 -4
  247. package/dist/components/plugins.js.map +1 -1
  248. package/dist/components/react.cjs.map +1 -1
  249. package/dist/components/react.js.map +1 -1
  250. package/dist/components/reveal.cjs.map +1 -1
  251. package/dist/components/reveal.js +1 -1
  252. package/dist/components/reveal.js.map +1 -1
  253. package/dist/components/solid.cjs.map +1 -1
  254. package/dist/components/solid.js +8 -8
  255. package/dist/components/solid.js.map +1 -1
  256. package/dist/components/svelte.cjs.map +1 -1
  257. package/dist/components/svelte.js +8 -8
  258. package/dist/components/svelte.js.map +1 -1
  259. package/dist/components/svg.cjs.map +1 -1
  260. package/dist/components/svg.js +1 -1
  261. package/dist/components/svg.js.map +1 -1
  262. package/dist/components/text.cjs.map +1 -1
  263. package/dist/components/text.js +2 -2
  264. package/dist/components/text.js.map +1 -1
  265. package/dist/components/timeline.cjs.map +1 -1
  266. package/dist/components/timeline.js +3 -3
  267. package/dist/components/timeline.js.map +1 -1
  268. package/dist/components/tokens.cjs.map +1 -1
  269. package/dist/components/tokens.js.map +1 -1
  270. package/dist/components/transitions.cjs.map +1 -1
  271. package/dist/components/transitions.js +1 -1
  272. package/dist/components/transitions.js.map +1 -1
  273. package/dist/components/ui.cjs.map +1 -1
  274. package/dist/components/ui.js +4 -4
  275. package/dist/components/ui.js.map +1 -1
  276. package/dist/components/vue.cjs.map +1 -1
  277. package/dist/components/vue.js +8 -8
  278. package/dist/components/vue.js.map +1 -1
  279. package/dist/components/webgl.cjs.map +1 -1
  280. package/dist/components/webgl.js +1 -1
  281. package/dist/components/webgl.js.map +1 -1
  282. package/dist/components/widgets.cjs +766 -212
  283. package/dist/components/widgets.cjs.map +1 -1
  284. package/dist/components/widgets.d.cts +207 -2
  285. package/dist/components/widgets.d.ts +207 -2
  286. package/dist/components/widgets.js +770 -221
  287. package/dist/components/widgets.js.map +1 -1
  288. package/dist/components.cjs.map +1 -1
  289. package/dist/components.js +10 -10
  290. package/dist/components.js.map +1 -1
  291. package/dist/element.cjs.map +1 -1
  292. package/dist/element.js.map +1 -1
  293. package/dist/index.cjs.map +1 -1
  294. package/dist/index.js +2 -2
  295. package/dist/index.js.map +1 -1
  296. package/dist/llms-full.txt +250 -1
  297. package/dist/llms.txt +13 -2
  298. package/dist/manifest.json +646 -1
  299. package/dist/presets/extended.cjs.map +1 -1
  300. package/dist/presets/extended.js.map +1 -1
  301. package/dist/react.cjs.map +1 -1
  302. package/dist/react.js.map +1 -1
  303. package/dist/runtime/format-apng.cjs +131 -0
  304. package/dist/runtime/format-apng.cjs.map +1 -0
  305. package/dist/runtime/format-apng.d.cts +250 -0
  306. package/dist/runtime/format-apng.d.ts +250 -0
  307. package/dist/runtime/format-apng.iife.js +2 -0
  308. package/dist/runtime/format-apng.iife.js.map +1 -0
  309. package/dist/runtime/format-apng.js +123 -0
  310. package/dist/runtime/format-apng.js.map +1 -0
  311. package/dist/runtime/format-css.cjs +5 -4
  312. package/dist/runtime/format-css.cjs.map +1 -1
  313. package/dist/runtime/format-css.js +5 -4
  314. package/dist/runtime/format-css.js.map +1 -1
  315. package/dist/runtime/format-gif.cjs +206 -0
  316. package/dist/runtime/format-gif.cjs.map +1 -0
  317. package/dist/runtime/format-gif.d.cts +223 -0
  318. package/dist/runtime/format-gif.d.ts +223 -0
  319. package/dist/runtime/format-gif.iife.js +2 -0
  320. package/dist/runtime/format-gif.iife.js.map +1 -0
  321. package/dist/runtime/format-gif.js +199 -0
  322. package/dist/runtime/format-gif.js.map +1 -0
  323. package/dist/runtime/format-motion.cjs +9 -8
  324. package/dist/runtime/format-motion.cjs.map +1 -1
  325. package/dist/runtime/format-motion.js +5 -4
  326. package/dist/runtime/format-motion.js.map +1 -1
  327. package/dist/runtime/format-sprite.cjs +226 -0
  328. package/dist/runtime/format-sprite.cjs.map +1 -0
  329. package/dist/runtime/format-sprite.d.cts +224 -0
  330. package/dist/runtime/format-sprite.d.ts +224 -0
  331. package/dist/runtime/format-sprite.iife.js +2 -0
  332. package/dist/runtime/format-sprite.iife.js.map +1 -0
  333. package/dist/runtime/format-sprite.js +216 -0
  334. package/dist/runtime/format-sprite.js.map +1 -0
  335. package/dist/runtime/format-svg.cjs +5 -4
  336. package/dist/runtime/format-svg.cjs.map +1 -1
  337. package/dist/runtime/format-svg.iife.js.map +1 -1
  338. package/dist/runtime/format-svg.js +4 -3
  339. package/dist/runtime/format-svg.js.map +1 -1
  340. package/dist/runtime/format-webp.cjs +123 -0
  341. package/dist/runtime/format-webp.cjs.map +1 -0
  342. package/dist/runtime/format-webp.d.cts +245 -0
  343. package/dist/runtime/format-webp.d.ts +245 -0
  344. package/dist/runtime/format-webp.iife.js +2 -0
  345. package/dist/runtime/format-webp.iife.js.map +1 -0
  346. package/dist/runtime/format-webp.js +115 -0
  347. package/dist/runtime/format-webp.js.map +1 -0
  348. package/dist/runtime/scroll.cjs +2 -2
  349. package/dist/runtime/scroll.cjs.map +1 -1
  350. package/dist/runtime/scroll.js +2 -2
  351. package/dist/runtime/scroll.js.map +1 -1
  352. package/dist/runtime/smooth.cjs +284 -0
  353. package/dist/runtime/smooth.cjs.map +1 -0
  354. package/dist/runtime/smooth.d.cts +137 -0
  355. package/dist/runtime/smooth.d.ts +137 -0
  356. package/dist/runtime/smooth.iife.js +2 -0
  357. package/dist/runtime/smooth.iife.js.map +1 -0
  358. package/dist/runtime/smooth.js +279 -0
  359. package/dist/runtime/smooth.js.map +1 -0
  360. package/dist/runtime/text.cjs +147 -0
  361. package/dist/runtime/text.cjs.map +1 -0
  362. package/dist/runtime/text.d.cts +65 -0
  363. package/dist/runtime/text.d.ts +65 -0
  364. package/dist/runtime/text.iife.js +2 -0
  365. package/dist/runtime/text.iife.js.map +1 -0
  366. package/dist/runtime/text.js +143 -0
  367. package/dist/runtime/text.js.map +1 -0
  368. package/dist/runtime.cjs +9 -8
  369. package/dist/runtime.cjs.map +1 -1
  370. package/dist/runtime.d.cts +9 -2
  371. package/dist/runtime.d.ts +9 -2
  372. package/dist/runtime.iife.js +1 -1
  373. package/dist/runtime.iife.js.map +1 -1
  374. package/dist/runtime.js +6 -5
  375. package/dist/runtime.js.map +1 -1
  376. package/dist/solid.cjs.map +1 -1
  377. package/dist/solid.js.map +1 -1
  378. package/dist/svelte.cjs.map +1 -1
  379. package/dist/svelte.js.map +1 -1
  380. package/dist/vue.cjs.map +1 -1
  381. package/dist/vue.js.map +1 -1
  382. package/dist/widgets.umd.js +1 -1
  383. package/dist/widgets.umd.js.map +1 -1
  384. package/docs/ROADMAP.md +2 -2
  385. package/docs/components/README.md +12 -7
  386. package/docs/components/usa-parallax-layers.md +38 -0
  387. package/docs/components/usa-route-transition.md +38 -0
  388. package/docs/components/usa-scroll-ring.md +32 -0
  389. package/docs/components/usa-smooth-scroll.md +60 -0
  390. package/docs/components/usa-text-splitter.md +60 -0
  391. package/docs/components.md +94 -0
  392. package/docs/mcp.md +50 -0
  393. package/docs/runtime/format-apng.md +59 -0
  394. package/docs/runtime/format-gif.md +60 -0
  395. package/docs/runtime/format-sprite.md +60 -0
  396. package/docs/runtime/format-webp.md +58 -0
  397. package/docs/runtime/smooth.md +60 -0
  398. package/docs/runtime/text.md +59 -0
  399. package/package.json +64 -2
  400. package/dist/chunks/keyframes-W-474DMc.js.map +0 -1
  401. package/dist/chunks/keyframes-ZheOkpt0.cjs.map +0 -1
  402. package/dist/chunks/tween-CBuWYpI-.cjs.map +0 -1
  403. package/dist/chunks/tween-CqX1JBuj.js.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"marketplace.cjs","sources":["../../src/components/marketplace/sign.ts","../../src/components/marketplace/index.ts"],"sourcesContent":["/**\n * 10.1: plugin signature (integrity) checks and version compatibility.\n *\n * - `pluginIntegrity(code)` → `'sha256-<base64>'` (Subresource-Integrity style).\n * - `verifyPlugin(code, integrity)` → `true` when the code matches (sha256 / sha384 / sha512).\n * - `satisfies(version, range)` — semver ranges: `*`, `x`, `1.2.3`, `=`, `>`, `>=`, `<`, `<=`,\n * `^`, `~`, `1.x`, hyphen ranges `1.0.0 - 2.0.0`, AND (space) and OR (`||`).\n * - `checkCompat(manifest, version)` — reads `engines.motionary` (or `motionary`) from a plugin manifest.\n */\n\ntype Algo = 'sha256' | 'sha384' | 'sha512';\nconst ALGO: Record<Algo, string> = { sha256: 'SHA-256', sha384: 'SHA-384', sha512: 'SHA-512' };\n\nfunction b64(buf: ArrayBuffer): string {\n const bytes = new Uint8Array(buf);\n let s = '';\n for (const b of bytes) s += String.fromCharCode(b);\n return typeof btoa === 'function' ? btoa(s) : (globalThis as any).Buffer.from(bytes).toString('base64');\n}\n\n/** SRI-style integrity string of plugin code. Needs Web Crypto (browsers, Node ≥ 18, workers). */\nexport async function pluginIntegrity(code: string | ArrayBuffer | Uint8Array, algo: Algo = 'sha256'): Promise<string> {\n const subtle = (globalThis as any).crypto?.subtle;\n if (!subtle) throw new Error('[motionary] pluginIntegrity(): Web Crypto (crypto.subtle) is not available here');\n const data = typeof code === 'string' ? new TextEncoder().encode(code) : code instanceof Uint8Array ? code : new Uint8Array(code);\n return `${algo}-${b64(await subtle.digest(ALGO[algo], data))}`;\n}\n\n/** Does the code match the integrity string (any of several, space-separated)? */\nexport async function verifyPlugin(code: string | ArrayBuffer | Uint8Array, integrity: string): Promise<boolean> {\n for (const want of integrity.trim().split(/\\s+/)) {\n const algo = want.split('-')[0] as Algo;\n if (!ALGO[algo]) continue;\n if ((await pluginIntegrity(code, algo)) === want) return true;\n }\n return false;\n}\n\ntype V3 = [number, number, number];\nconst parse = (v: string): V3 | null => {\n const m = /^v?(\\d+)(?:\\.(\\d+))?(?:\\.(\\d+))?(?:[-+].*)?$/.exec(v.trim());\n return m ? [+m[1], +(m[2] || 0), +(m[3] || 0)] : null;\n};\nconst cmp = (a: V3, b: V3) => a[0] - b[0] || a[1] - b[1] || a[2] - b[2];\n\nfunction partial(v: string): { v: V3; parts: number } | null {\n const m = /^v?(\\d+|[x*])(?:\\.(\\d+|[x*]))?(?:\\.(\\d+|[x*]))?$/i.exec(v.trim());\n if (!m) return null;\n const segs = [m[1], m[2], m[3]];\n let parts = 0;\n for (const s of segs) { if (s === undefined || /[x*]/i.test(s)) break; parts++; }\n return { v: [+(parts > 0 ? segs[0] : 0), +(parts > 1 ? segs[1]! : 0), +(parts > 2 ? segs[2]! : 0)], parts };\n}\n\nfunction test(ver: V3, comp: string): boolean {\n const m = /^(\\^|~|>=|<=|>|<|=)?\\s*(.+)$/.exec(comp.trim());\n if (!m) return false;\n const op = m[1] || '';\n const p = partial(m[2]);\n if (!p) return false;\n const { v, parts } = p;\n const upper = (n: number): V3 => (n === 0 ? [Infinity, 0, 0] : n === 1 ? [v[0] + 1, 0, 0] : n === 2 ? [v[0], v[1] + 1, 0] : [v[0], v[1], v[2] + 1]);\n switch (op) {\n case '^': {\n const hi: V3 = v[0] > 0 || parts < 2 ? [v[0] + 1, 0, 0] : v[1] > 0 || parts < 3 ? [0, v[1] + 1, 0] : [0, 0, v[2] + 1];\n return cmp(ver, v) >= 0 && cmp(ver, hi) < 0;\n }\n case '~': return cmp(ver, v) >= 0 && cmp(ver, upper(Math.min(parts, 2) || 1)) < 0;\n case '>=': return cmp(ver, v) >= 0;\n case '>': return parts < 3 ? cmp(ver, upper(parts)) >= 0 : cmp(ver, v) > 0;\n case '<=': return parts < 3 ? cmp(ver, upper(parts)) < 0 : cmp(ver, v) <= 0;\n case '<': return cmp(ver, v) < 0;\n default: return parts === 3 ? cmp(ver, v) === 0 : cmp(ver, v) >= 0 && cmp(ver, upper(parts)) < 0;\n }\n}\n\n/** Does `version` satisfy the semver `range`? */\nexport function satisfies(version: string, range: string): boolean {\n const ver = parse(version);\n if (!ver) return false;\n return range.split('||').some((alt) => {\n const a = alt.trim();\n if (!a || a === '*' || a.toLowerCase() === 'x') return true;\n const hy = /^(\\S+)\\s+-\\s+(\\S+)$/.exec(a);\n if (hy) return test(ver, '>=' + hy[1]) && test(ver, '<=' + hy[2]);\n return a.replace(/(\\^|~|>=|<=|>|<|=)\\s+/g, '$1').split(/\\s+/).every((c) => test(ver, c));\n });\n}\n\nexport interface CompatResult {\n ok: boolean;\n range: string;\n version: string;\n message: string;\n}\n\n/** Check a plugin manifest's `engines.motionary` (or `motionary`) range against the running version. */\nexport function checkCompat(manifest: { engines?: { motionary?: string }; motionary?: string; name?: string }, version: string): CompatResult {\n const range = manifest.engines?.motionary || manifest.motionary || '*';\n const ok = satisfies(version, range);\n const who = manifest.name ? `\"${manifest.name}\"` : 'This plugin';\n return { ok, range, version, message: ok ? `${who} supports Motionary ${version} (${range}).` : `${who} needs Motionary ${range}; this page runs ${version}.` };\n}\n","/**\n * `motionary/marketplace` (= `motionary/components/marketplace`, 9.0 GA) —\n * the plugin marketplace. Builds on the 6.9 effect-pack manifest\n * (`packManifest`, `validateManifest`, `loadEffectPack`) with:\n *\n * - **`MARKETPLACE`** — the first-party catalogue: every Motionary effect\n * pack as a marketplace listing (name, entry, effects, tags, since).\n * - **`searchPlugins(query, list?)`** — ranked search over names,\n * descriptions, tags and effect names.\n * - **`installPlugin(listing | url, { load })`** — imports a pack (your\n * `load` can map entries to bundler imports), validates it and registers\n * its effects; remembered by `installedPlugins()`.\n * - **`fetchMarketplace(url)`** — read a third-party index\n * (`{ \"format\": \"motionary/marketplace\", \"version\": 1, \"plugins\": [...] }`).\n */\nimport type { EffectDefinition } from '../fx/registry';\nimport { loadEffectPack } from '../fx2/manifest';\n\nexport { EFFECT_PACK_FORMAT, packManifest, validateManifest, loadEffectPack } from '../fx2/manifest';\nexport type { EffectPackManifest } from '../fx2/manifest';\nexport { pluginIntegrity, verifyPlugin, satisfies, checkCompat } from './sign';\nexport type { CompatResult } from './sign';\n\nexport const MARKETPLACE_FORMAT = 'motionary/marketplace';\nexport interface PluginListing {\n name: string;\n title: string;\n description: string;\n entry: string;\n register: string;\n effects: string[];\n tags: string[];\n since: string;\n author?: string;\n official?: boolean;\n}\n\nconst L = (name: string, title: string, description: string, entry: string, register: string, effects: string, tags: string, since: string): PluginListing => ({ name, title, description, entry, register, effects: effects.split(' '), tags: tags.split(' '), since, author: 'Motionary', official: true });\n\n/** The first-party catalogue (9.0). */\nexport const MARKETPLACE: PluginListing[] = [\n L('motionary/fx/festival', 'Festival', 'Fireworks, lanterns, Christmas snow and spooky floats.', 'motionary/fx/festival', 'registerFestivalPack', 'firework-burst lantern-rise xmas-snow spooky-float', 'holiday celebration seasonal', '8.1'),\n L('motionary/fx/retro', 'Retro', 'Pixel, CRT, VHS and Y2K looks.', 'motionary/fx/retro', 'registerRetroPack', 'pixelate-in crt-power vhs-glitch y2k-shine', 'pixel 8-bit vintage', '8.2'),\n L('motionary/fx/organic', 'Organic', 'Vines, blooms, water drops and breathing blobs.', 'motionary/fx/organic', 'registerOrganicPack', 'vine-grow bloom water-drop breathe', 'nature blob liquid', '8.3'),\n L('motionary/fx/cyber', 'Cyber', 'HUD lock-on, scanlines, holograms and data decode.', 'motionary/fx/cyber', 'registerCyberPack', 'hud-frame scanline-sweep hologram data-decode', 'sci-fi hud glitch', '8.4'),\n L('motionary/fx/paper', 'Paper & hand-drawn', 'Paper unfold, pencil sketch, watercolor and crumple.', 'motionary/fx/paper', 'registerPaperPack', 'paper-unfold pencil-sketch watercolor crumple', 'sketch paper drawing', '8.5'),\n L('motionary/fx/surface', 'Surface themes', 'Neon ignite and pulse, glass frost, neumorphic press.', 'motionary/fx/surface', 'registerSurfacePack', 'neon-ignite neon-pulse glass-frost neu-press', 'neon glassmorphism neumorphism theme', '8.6'),\n L('motionary/fx/gesture', 'Gestures 3.0', 'Swipe and pinch hints, tilt wobble, depth-in.', 'motionary/fx/gesture', 'registerGesture3Pack', 'swipe-hint pinch-hint tilt-wobble depth-in', 'touch onboarding 3d', '8.7'),\n L('motionary/fx/spatial', 'XR / spatial', 'Portal open, orbit-in, spatial float and depth pop.', 'motionary/fx/spatial', 'registerSpatialPack', 'portal-open orbit-in spatial-float depth-pop', 'xr vr visionos 3d', '8.8'),\n L('motionary/fx/cinema', 'Cinematic', 'Dolly-in, pan reveal, letterbox and rack focus.', 'motionary/fx/cinema', 'registerCinemaPack', 'dolly-in pan-reveal letterbox rack-focus', 'film camera story', '9.1'),\n L('motionary/fx/lottie', 'Lottie & Rive', 'Lottie import (keyframes + SVG), Rive state-machine inputs, icon pop.', 'motionary/fx/lottie', 'registerLottiePack', 'lottie-play icon-pop', 'lottie rive after-effects icons', '9.2'),\n L('motionary/fx/genart', 'Generative art 2.0', 'Halftone print-in, drifting mesh gradients, kaleidoscope and film grain.', 'motionary/fx/genart', 'registerGenArtPack', 'halftone-in mesh-drift kaleido grain-flicker', 'generative gradient grain art', '9.3'),\n L('motionary/fx/video', 'Video motion', 'Scroll-driven video and frame sequences, film burn, jump cut.', 'motionary/fx/video', 'registerVideoPack', 'film-burn jump-cut', 'video scroll film', '9.4'),\n L('motionary/fx/safe', 'Accessible motion 2.0', 'Motion that never moves: safe fade, focus glow, colour pulse, underline sweep.', 'motionary/fx/safe', 'registerSafePack', 'safe-fade focus-glow color-pulse underline-sweep', 'a11y accessibility vestibular reduced-motion', '9.5'),\n L('motionary/fx/perf', 'Performance 3.0', 'Idle-time reveals and compositor-only hover lifts; OffscreenCanvas / Worker helpers.', 'motionary/fx/perf', 'registerPerf3Pack', 'idle-reveal gpu-lift', 'performance worker offscreen', '9.6'),\n];\n\n/** Ranked search over listings (name / title / tags / effects / description) (9.0). */\nexport function searchPlugins(query: string, list: PluginListing[] = MARKETPLACE): PluginListing[] {\n const q = query.toLowerCase().trim().split(/\\s+/).filter(Boolean);\n if (!q.length) return list.slice();\n const score = (p: PluginListing) =>\n q.reduce((s, w) => {\n let n = 0;\n if (p.title.toLowerCase().includes(w)) n += 5;\n if (p.tags.some((t) => t.includes(w))) n += 4;\n if (p.effects.some((e) => e.includes(w))) n += 3;\n if (p.name.toLowerCase().includes(w)) n += 2;\n if (p.description.toLowerCase().includes(w)) n += 1;\n return n ? s + n : -1e9;\n }, 0);\n return list\n .map((p) => [p, score(p)] as const)\n .filter(([, s]) => s > 0)\n .sort((a, b) => b[1] - a[1])\n .map(([p]) => p);\n}\n\nconst installed = new Map<string, string[]>();\n/** Names of installed plugins → their registered effects (9.0). */\nexport function installedPlugins(): Record<string, string[]> {\n return Object.fromEntries(installed);\n}\n\n/**\n * Install a plugin: `load(entry)` imports the module (default: dynamic `import()`), then its\n * `register*` function runs (first-party listing) or its `effects` are validated and registered\n * through `loadEffectPack` (third-party pack). Returns the registered effect names (9.0).\n */\nexport async function installPlugin(p: PluginListing | string, opts: { load?: (entry: string) => Promise<any>; override?: boolean } = {}): Promise<string[]> {\n const listing = typeof p === 'string' ? null : p;\n const entry = listing ? listing.entry : (p as string);\n const key = listing ? listing.name : entry;\n if (installed.has(key)) return installed.get(key) as string[];\n const load = opts.load || ((u: string) => import(/* @vite-ignore */ u));\n const mod = await load(entry);\n let names: string[];\n if (listing && typeof mod?.[listing.register] === 'function') {\n mod[listing.register]();\n names = listing.effects.slice();\n } else names = await loadEffectPack(mod as { effects?: EffectDefinition[]; default?: EffectDefinition[] }, { override: opts.override, manifest: mod?.manifest });\n installed.set(key, names);\n return names;\n}\n\n/** Read a marketplace index (`{ format: \"motionary/marketplace\", version: 1, plugins }`) (9.0). */\nexport async function fetchMarketplace(url: string, fetcher: typeof fetch = fetch): Promise<PluginListing[]> {\n const r = await fetcher(url);\n const j = await r.json();\n if (j?.format !== MARKETPLACE_FORMAT || j?.version !== 1 || !Array.isArray(j.plugins)) throw new Error(`[motionary] ${url} is not a ${MARKETPLACE_FORMAT} v1 index`);\n return j.plugins.filter((p: any) => p && typeof p.name === 'string' && typeof p.entry === 'string').map((p: any) => ({ title: p.name, description: '', register: '', effects: [], tags: [], since: '', ...p }));\n}\n"],"names":["loadEffectPack"],"mappings":"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"}
1
+ {"version":3,"file":"marketplace.cjs","sources":["../../src/components/marketplace/sign.ts","../../src/components/marketplace/index.ts"],"sourcesContent":["/**\n * 10.1: plugin signature (integrity) checks and version compatibility.\n *\n * - `pluginIntegrity(code)` → `'sha256-<base64>'` (Subresource-Integrity style).\n * - `verifyPlugin(code, integrity)` → `true` when the code matches (sha256 / sha384 / sha512).\n * - `satisfies(version, range)` — semver ranges: `*`, `x`, `1.2.3`, `=`, `>`, `>=`, `<`, `<=`,\n * `^`, `~`, `1.x`, hyphen ranges `1.0.0 - 2.0.0`, AND (space) and OR (`||`).\n * - `checkCompat(manifest, version)` — reads `engines.motionary` (or `motionary`) from a plugin manifest.\n */\n\ntype Algo = 'sha256' | 'sha384' | 'sha512';\nconst ALGO: Record<Algo, string> = { sha256: 'SHA-256', sha384: 'SHA-384', sha512: 'SHA-512' };\n\nfunction b64(buf: ArrayBuffer): string {\n const bytes = new Uint8Array(buf);\n let s = '';\n for (const b of bytes) s += String.fromCharCode(b);\n return typeof btoa === 'function' ? btoa(s) : (globalThis as any).Buffer.from(bytes).toString('base64');\n}\n\n/** SRI-style integrity string of plugin code. Needs Web Crypto (browsers, Node ≥ 18, workers). */\nexport async function pluginIntegrity(code: string | ArrayBuffer | Uint8Array, algo: Algo = 'sha256'): Promise<string> {\n const subtle = (globalThis as any).crypto?.subtle;\n if (!subtle) throw new Error('[motionary] pluginIntegrity(): Web Crypto (crypto.subtle) is not available here');\n const data = typeof code === 'string' ? new TextEncoder().encode(code) : code instanceof Uint8Array ? code : new Uint8Array(code);\n return `${algo}-${b64(await subtle.digest(ALGO[algo], data))}`;\n}\n\n/** Does the code match the integrity string (any of several, space-separated)? */\nexport async function verifyPlugin(code: string | ArrayBuffer | Uint8Array, integrity: string): Promise<boolean> {\n for (const want of integrity.trim().split(/\\s+/)) {\n const algo = want.split('-')[0] as Algo;\n if (!ALGO[algo]) continue;\n if ((await pluginIntegrity(code, algo)) === want) return true;\n }\n return false;\n}\n\ntype V3 = [number, number, number];\nconst parse = (v: string): V3 | null => {\n const m = /^v?(\\d+)(?:\\.(\\d+))?(?:\\.(\\d+))?(?:[-+].*)?$/.exec(v.trim());\n return m ? [+m[1], +(m[2] || 0), +(m[3] || 0)] : null;\n};\nconst cmp = (a: V3, b: V3) => a[0] - b[0] || a[1] - b[1] || a[2] - b[2];\n\nfunction partial(v: string): { v: V3; parts: number } | null {\n const m = /^v?(\\d+|[x*])(?:\\.(\\d+|[x*]))?(?:\\.(\\d+|[x*]))?$/i.exec(v.trim());\n if (!m) return null;\n const segs = [m[1], m[2], m[3]];\n let parts = 0;\n for (const s of segs) { if (s === undefined || /[x*]/i.test(s)) break; parts++; }\n return { v: [+(parts > 0 ? segs[0] : 0), +(parts > 1 ? segs[1]! : 0), +(parts > 2 ? segs[2]! : 0)], parts };\n}\n\nfunction test(ver: V3, comp: string): boolean {\n const m = /^(\\^|~|>=|<=|>|<|=)?\\s*(.+)$/.exec(comp.trim());\n if (!m) return false;\n const op = m[1] || '';\n const p = partial(m[2]);\n if (!p) return false;\n const { v, parts } = p;\n const upper = (n: number): V3 => (n === 0 ? [Infinity, 0, 0] : n === 1 ? [v[0] + 1, 0, 0] : n === 2 ? [v[0], v[1] + 1, 0] : [v[0], v[1], v[2] + 1]);\n switch (op) {\n case '^': {\n const hi: V3 = v[0] > 0 || parts < 2 ? [v[0] + 1, 0, 0] : v[1] > 0 || parts < 3 ? [0, v[1] + 1, 0] : [0, 0, v[2] + 1];\n return cmp(ver, v) >= 0 && cmp(ver, hi) < 0;\n }\n case '~': return cmp(ver, v) >= 0 && cmp(ver, upper(Math.min(parts, 2) || 1)) < 0;\n case '>=': return cmp(ver, v) >= 0;\n case '>': return parts < 3 ? cmp(ver, upper(parts)) >= 0 : cmp(ver, v) > 0;\n case '<=': return parts < 3 ? cmp(ver, upper(parts)) < 0 : cmp(ver, v) <= 0;\n case '<': return cmp(ver, v) < 0;\n default: return parts === 3 ? cmp(ver, v) === 0 : cmp(ver, v) >= 0 && cmp(ver, upper(parts)) < 0;\n }\n}\n\n/** Does `version` satisfy the semver `range`? */\nexport function satisfies(version: string, range: string): boolean {\n const ver = parse(version);\n if (!ver) return false;\n return range.split('||').some((alt) => {\n const a = alt.trim();\n if (!a || a === '*' || a.toLowerCase() === 'x') return true;\n const hy = /^(\\S+)\\s+-\\s+(\\S+)$/.exec(a);\n if (hy) return test(ver, '>=' + hy[1]) && test(ver, '<=' + hy[2]);\n return a.replace(/(\\^|~|>=|<=|>|<|=)\\s+/g, '$1').split(/\\s+/).every((c) => test(ver, c));\n });\n}\n\nexport interface CompatResult {\n ok: boolean;\n range: string;\n version: string;\n message: string;\n}\n\n/** Check a plugin manifest's `engines.motionary` (or `motionary`) range against the running version. */\nexport function checkCompat(manifest: { engines?: { motionary?: string }; motionary?: string; name?: string }, version: string): CompatResult {\n const range = manifest.engines?.motionary || manifest.motionary || '*';\n const ok = satisfies(version, range);\n const who = manifest.name ? `\"${manifest.name}\"` : 'This plugin';\n return { ok, range, version, message: ok ? `${who} supports Motionary ${version} (${range}).` : `${who} needs Motionary ${range}; this page runs ${version}.` };\n}\n","/**\n * `motionary/marketplace` (= `motionary/components/marketplace`, 9.0 GA) —\n * the plugin marketplace. Builds on the 6.9 effect-pack manifest\n * (`packManifest`, `validateManifest`, `loadEffectPack`) with:\n *\n * - **`MARKETPLACE`** — the first-party catalogue: every Motionary effect\n * pack as a marketplace listing (name, entry, effects, tags, since).\n * - **`searchPlugins(query, list?)`** — ranked search over names,\n * descriptions, tags and effect names.\n * - **`installPlugin(listing | url, { load })`** — imports a pack (your\n * `load` can map entries to bundler imports), validates it and registers\n * its effects; remembered by `installedPlugins()`.\n * - **`fetchMarketplace(url)`** — read a third-party index\n * (`{ \"format\": \"motionary/marketplace\", \"version\": 1, \"plugins\": [...] }`).\n */\nimport type { EffectDefinition } from '../fx/registry';\nimport { loadEffectPack } from '../fx2/manifest';\n\nexport { EFFECT_PACK_FORMAT, packManifest, validateManifest, loadEffectPack } from '../fx2/manifest';\nexport type { EffectPackManifest } from '../fx2/manifest';\nexport { pluginIntegrity, verifyPlugin, satisfies, checkCompat } from './sign';\nexport type { CompatResult } from './sign';\n\nexport const MARKETPLACE_FORMAT = 'motionary/marketplace';\nexport interface PluginListing {\n name: string;\n title: string;\n description: string;\n entry: string;\n register: string;\n effects: string[];\n tags: string[];\n since: string;\n author?: string;\n official?: boolean;\n}\n\nconst L = (name: string, title: string, description: string, entry: string, register: string, effects: string, tags: string, since: string): PluginListing => ({ name, title, description, entry, register, effects: effects.split(' '), tags: tags.split(' '), since, author: 'Motionary', official: true });\n\n/** The first-party catalogue (9.0). */\nexport const MARKETPLACE: PluginListing[] = [\n L('motionary/fx/festival', 'Festival', 'Fireworks, lanterns, Christmas snow and spooky floats.', 'motionary/fx/festival', 'registerFestivalPack', 'firework-burst lantern-rise xmas-snow spooky-float', 'holiday celebration seasonal', '8.1'),\n L('motionary/fx/retro', 'Retro', 'Pixel, CRT, VHS and Y2K looks.', 'motionary/fx/retro', 'registerRetroPack', 'pixelate-in crt-power vhs-glitch y2k-shine', 'pixel 8-bit vintage', '8.2'),\n L('motionary/fx/organic', 'Organic', 'Vines, blooms, water drops and breathing blobs.', 'motionary/fx/organic', 'registerOrganicPack', 'vine-grow bloom water-drop breathe', 'nature blob liquid', '8.3'),\n L('motionary/fx/cyber', 'Cyber', 'HUD lock-on, scanlines, holograms and data decode.', 'motionary/fx/cyber', 'registerCyberPack', 'hud-frame scanline-sweep hologram data-decode', 'sci-fi hud glitch', '8.4'),\n L('motionary/fx/paper', 'Paper & hand-drawn', 'Paper unfold, pencil sketch, watercolor and crumple.', 'motionary/fx/paper', 'registerPaperPack', 'paper-unfold pencil-sketch watercolor crumple', 'sketch paper drawing', '8.5'),\n L('motionary/fx/surface', 'Surface themes', 'Neon ignite and pulse, glass frost, neumorphic press.', 'motionary/fx/surface', 'registerSurfacePack', 'neon-ignite neon-pulse glass-frost neu-press', 'neon glassmorphism neumorphism theme', '8.6'),\n L('motionary/fx/gesture', 'Gestures 3.0', 'Swipe and pinch hints, tilt wobble, depth-in.', 'motionary/fx/gesture', 'registerGesture3Pack', 'swipe-hint pinch-hint tilt-wobble depth-in', 'touch onboarding 3d', '8.7'),\n L('motionary/fx/spatial', 'XR / spatial', 'Portal open, orbit-in, spatial float and depth pop.', 'motionary/fx/spatial', 'registerSpatialPack', 'portal-open orbit-in spatial-float depth-pop', 'xr vr visionos 3d', '8.8'),\n L('motionary/fx/cinema', 'Cinematic', 'Dolly-in, pan reveal, letterbox and rack focus.', 'motionary/fx/cinema', 'registerCinemaPack', 'dolly-in pan-reveal letterbox rack-focus', 'film camera story', '9.1'),\n L('motionary/fx/lottie', 'Lottie & Rive', 'Lottie import (keyframes + SVG), Rive state-machine inputs, icon pop.', 'motionary/fx/lottie', 'registerLottiePack', 'lottie-play icon-pop', 'lottie rive after-effects icons', '9.2'),\n L('motionary/fx/genart', 'Generative art 2.0', 'Halftone print-in, drifting mesh gradients, kaleidoscope and film grain.', 'motionary/fx/genart', 'registerGenArtPack', 'halftone-in mesh-drift kaleido grain-flicker', 'generative gradient grain art', '9.3'),\n L('motionary/fx/video', 'Video motion', 'Scroll-driven video and frame sequences, film burn, jump cut.', 'motionary/fx/video', 'registerVideoPack', 'film-burn jump-cut', 'video scroll film', '9.4'),\n L('motionary/fx/safe', 'Accessible motion 2.0', 'Motion that never moves: safe fade, focus glow, colour pulse, underline sweep.', 'motionary/fx/safe', 'registerSafePack', 'safe-fade focus-glow color-pulse underline-sweep', 'a11y accessibility vestibular reduced-motion', '9.5'),\n L('motionary/fx/perf', 'Performance 3.0', 'Idle-time reveals and compositor-only hover lifts; OffscreenCanvas / Worker helpers.', 'motionary/fx/perf', 'registerPerf3Pack', 'idle-reveal gpu-lift', 'performance worker offscreen', '9.6'),\n];\n\n/** Ranked search over listings (name / title / tags / effects / description) (9.0). */\nexport function searchPlugins(query: string, list: PluginListing[] = MARKETPLACE): PluginListing[] {\n const q = query.toLowerCase().trim().split(/\\s+/).filter(Boolean);\n if (!q.length) return list.slice();\n const score = (p: PluginListing) =>\n q.reduce((s, w) => {\n let n = 0;\n if (p.title.toLowerCase().includes(w)) n += 5;\n if (p.tags.some((t) => t.includes(w))) n += 4;\n if (p.effects.some((e) => e.includes(w))) n += 3;\n if (p.name.toLowerCase().includes(w)) n += 2;\n if (p.description.toLowerCase().includes(w)) n += 1;\n return n ? s + n : -1e9;\n }, 0);\n return list\n .map((p) => [p, score(p)] as const)\n .filter(([, s]) => s > 0)\n .sort((a, b) => b[1] - a[1])\n .map(([p]) => p);\n}\n\nconst installed = new Map<string, string[]>();\n/** Names of installed plugins → their registered effects (9.0). */\nexport function installedPlugins(): Record<string, string[]> {\n return Object.fromEntries(installed);\n}\n\n/**\n * Install a plugin: `load(entry)` imports the module (default: dynamic `import()`), then its\n * `register*` function runs (first-party listing) or its `effects` are validated and registered\n * through `loadEffectPack` (third-party pack). Returns the registered effect names (9.0).\n */\nexport async function installPlugin(p: PluginListing | string, opts: { load?: (entry: string) => Promise<any>; override?: boolean } = {}): Promise<string[]> {\n const listing = typeof p === 'string' ? null : p;\n const entry = listing ? listing.entry : (p as string);\n const key = listing ? listing.name : entry;\n if (installed.has(key)) return installed.get(key) as string[];\n const load = opts.load || ((u: string) => import(/* @vite-ignore */ u));\n const mod = await load(entry);\n let names: string[];\n if (listing && typeof mod?.[listing.register] === 'function') {\n mod[listing.register]();\n names = listing.effects.slice();\n } else names = await loadEffectPack(mod as { effects?: EffectDefinition[]; default?: EffectDefinition[] }, { override: opts.override, manifest: mod?.manifest });\n installed.set(key, names);\n return names;\n}\n\n/** Read a marketplace index (`{ format: \"motionary/marketplace\", version: 1, plugins }`) (9.0). */\nexport async function fetchMarketplace(url: string, fetcher: typeof fetch = fetch): Promise<PluginListing[]> {\n const r = await fetcher(url);\n const j = await r.json();\n if (j?.format !== MARKETPLACE_FORMAT || j?.version !== 1 || !Array.isArray(j.plugins)) throw new Error(`[motionary] ${url} is not a ${MARKETPLACE_FORMAT} v1 index`);\n return j.plugins.filter((p: any) => p && typeof p.name === 'string' && typeof p.entry === 'string').map((p: any) => ({ title: p.name, description: '', register: '', effects: [], tags: [], since: '', ...p }));\n}\n"],"names":["loadEffectPack"],"mappings":"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"}
@@ -1,7 +1,7 @@
1
- import { l as loadEffectPack } from '../chunks/manifest-D58HXVY-.js';
2
- export { E as EFFECT_PACK_FORMAT, p as packManifest, v as validateManifest } from '../chunks/manifest-D58HXVY-.js';
3
- import '../chunks/registry-gFJRpPES.js';
4
- import '../chunks/base-BnRyfuyM.js';
1
+ import { l as loadEffectPack } from '../chunks/manifest-BHx5yPN6.js';
2
+ export { E as EFFECT_PACK_FORMAT, p as packManifest, v as validateManifest } from '../chunks/manifest-BHx5yPN6.js';
3
+ import '../chunks/registry-BKzyg1JV.js';
4
+ import '../chunks/base-BTev8qxg.js';
5
5
 
6
6
  /**
7
7
  * 10.1: plugin signature (integrity) checks and version compatibility.
@@ -1 +1 @@
1
- {"version":3,"file":"marketplace.js","sources":["../../src/components/marketplace/sign.ts","../../src/components/marketplace/index.ts"],"sourcesContent":["/**\n * 10.1: plugin signature (integrity) checks and version compatibility.\n *\n * - `pluginIntegrity(code)` → `'sha256-<base64>'` (Subresource-Integrity style).\n * - `verifyPlugin(code, integrity)` → `true` when the code matches (sha256 / sha384 / sha512).\n * - `satisfies(version, range)` — semver ranges: `*`, `x`, `1.2.3`, `=`, `>`, `>=`, `<`, `<=`,\n * `^`, `~`, `1.x`, hyphen ranges `1.0.0 - 2.0.0`, AND (space) and OR (`||`).\n * - `checkCompat(manifest, version)` — reads `engines.motionary` (or `motionary`) from a plugin manifest.\n */\n\ntype Algo = 'sha256' | 'sha384' | 'sha512';\nconst ALGO: Record<Algo, string> = { sha256: 'SHA-256', sha384: 'SHA-384', sha512: 'SHA-512' };\n\nfunction b64(buf: ArrayBuffer): string {\n const bytes = new Uint8Array(buf);\n let s = '';\n for (const b of bytes) s += String.fromCharCode(b);\n return typeof btoa === 'function' ? btoa(s) : (globalThis as any).Buffer.from(bytes).toString('base64');\n}\n\n/** SRI-style integrity string of plugin code. Needs Web Crypto (browsers, Node ≥ 18, workers). */\nexport async function pluginIntegrity(code: string | ArrayBuffer | Uint8Array, algo: Algo = 'sha256'): Promise<string> {\n const subtle = (globalThis as any).crypto?.subtle;\n if (!subtle) throw new Error('[motionary] pluginIntegrity(): Web Crypto (crypto.subtle) is not available here');\n const data = typeof code === 'string' ? new TextEncoder().encode(code) : code instanceof Uint8Array ? code : new Uint8Array(code);\n return `${algo}-${b64(await subtle.digest(ALGO[algo], data))}`;\n}\n\n/** Does the code match the integrity string (any of several, space-separated)? */\nexport async function verifyPlugin(code: string | ArrayBuffer | Uint8Array, integrity: string): Promise<boolean> {\n for (const want of integrity.trim().split(/\\s+/)) {\n const algo = want.split('-')[0] as Algo;\n if (!ALGO[algo]) continue;\n if ((await pluginIntegrity(code, algo)) === want) return true;\n }\n return false;\n}\n\ntype V3 = [number, number, number];\nconst parse = (v: string): V3 | null => {\n const m = /^v?(\\d+)(?:\\.(\\d+))?(?:\\.(\\d+))?(?:[-+].*)?$/.exec(v.trim());\n return m ? [+m[1], +(m[2] || 0), +(m[3] || 0)] : null;\n};\nconst cmp = (a: V3, b: V3) => a[0] - b[0] || a[1] - b[1] || a[2] - b[2];\n\nfunction partial(v: string): { v: V3; parts: number } | null {\n const m = /^v?(\\d+|[x*])(?:\\.(\\d+|[x*]))?(?:\\.(\\d+|[x*]))?$/i.exec(v.trim());\n if (!m) return null;\n const segs = [m[1], m[2], m[3]];\n let parts = 0;\n for (const s of segs) { if (s === undefined || /[x*]/i.test(s)) break; parts++; }\n return { v: [+(parts > 0 ? segs[0] : 0), +(parts > 1 ? segs[1]! : 0), +(parts > 2 ? segs[2]! : 0)], parts };\n}\n\nfunction test(ver: V3, comp: string): boolean {\n const m = /^(\\^|~|>=|<=|>|<|=)?\\s*(.+)$/.exec(comp.trim());\n if (!m) return false;\n const op = m[1] || '';\n const p = partial(m[2]);\n if (!p) return false;\n const { v, parts } = p;\n const upper = (n: number): V3 => (n === 0 ? [Infinity, 0, 0] : n === 1 ? [v[0] + 1, 0, 0] : n === 2 ? [v[0], v[1] + 1, 0] : [v[0], v[1], v[2] + 1]);\n switch (op) {\n case '^': {\n const hi: V3 = v[0] > 0 || parts < 2 ? [v[0] + 1, 0, 0] : v[1] > 0 || parts < 3 ? [0, v[1] + 1, 0] : [0, 0, v[2] + 1];\n return cmp(ver, v) >= 0 && cmp(ver, hi) < 0;\n }\n case '~': return cmp(ver, v) >= 0 && cmp(ver, upper(Math.min(parts, 2) || 1)) < 0;\n case '>=': return cmp(ver, v) >= 0;\n case '>': return parts < 3 ? cmp(ver, upper(parts)) >= 0 : cmp(ver, v) > 0;\n case '<=': return parts < 3 ? cmp(ver, upper(parts)) < 0 : cmp(ver, v) <= 0;\n case '<': return cmp(ver, v) < 0;\n default: return parts === 3 ? cmp(ver, v) === 0 : cmp(ver, v) >= 0 && cmp(ver, upper(parts)) < 0;\n }\n}\n\n/** Does `version` satisfy the semver `range`? */\nexport function satisfies(version: string, range: string): boolean {\n const ver = parse(version);\n if (!ver) return false;\n return range.split('||').some((alt) => {\n const a = alt.trim();\n if (!a || a === '*' || a.toLowerCase() === 'x') return true;\n const hy = /^(\\S+)\\s+-\\s+(\\S+)$/.exec(a);\n if (hy) return test(ver, '>=' + hy[1]) && test(ver, '<=' + hy[2]);\n return a.replace(/(\\^|~|>=|<=|>|<|=)\\s+/g, '$1').split(/\\s+/).every((c) => test(ver, c));\n });\n}\n\nexport interface CompatResult {\n ok: boolean;\n range: string;\n version: string;\n message: string;\n}\n\n/** Check a plugin manifest's `engines.motionary` (or `motionary`) range against the running version. */\nexport function checkCompat(manifest: { engines?: { motionary?: string }; motionary?: string; name?: string }, version: string): CompatResult {\n const range = manifest.engines?.motionary || manifest.motionary || '*';\n const ok = satisfies(version, range);\n const who = manifest.name ? `\"${manifest.name}\"` : 'This plugin';\n return { ok, range, version, message: ok ? `${who} supports Motionary ${version} (${range}).` : `${who} needs Motionary ${range}; this page runs ${version}.` };\n}\n","/**\n * `motionary/marketplace` (= `motionary/components/marketplace`, 9.0 GA) —\n * the plugin marketplace. Builds on the 6.9 effect-pack manifest\n * (`packManifest`, `validateManifest`, `loadEffectPack`) with:\n *\n * - **`MARKETPLACE`** — the first-party catalogue: every Motionary effect\n * pack as a marketplace listing (name, entry, effects, tags, since).\n * - **`searchPlugins(query, list?)`** — ranked search over names,\n * descriptions, tags and effect names.\n * - **`installPlugin(listing | url, { load })`** — imports a pack (your\n * `load` can map entries to bundler imports), validates it and registers\n * its effects; remembered by `installedPlugins()`.\n * - **`fetchMarketplace(url)`** — read a third-party index\n * (`{ \"format\": \"motionary/marketplace\", \"version\": 1, \"plugins\": [...] }`).\n */\nimport type { EffectDefinition } from '../fx/registry';\nimport { loadEffectPack } from '../fx2/manifest';\n\nexport { EFFECT_PACK_FORMAT, packManifest, validateManifest, loadEffectPack } from '../fx2/manifest';\nexport type { EffectPackManifest } from '../fx2/manifest';\nexport { pluginIntegrity, verifyPlugin, satisfies, checkCompat } from './sign';\nexport type { CompatResult } from './sign';\n\nexport const MARKETPLACE_FORMAT = 'motionary/marketplace';\nexport interface PluginListing {\n name: string;\n title: string;\n description: string;\n entry: string;\n register: string;\n effects: string[];\n tags: string[];\n since: string;\n author?: string;\n official?: boolean;\n}\n\nconst L = (name: string, title: string, description: string, entry: string, register: string, effects: string, tags: string, since: string): PluginListing => ({ name, title, description, entry, register, effects: effects.split(' '), tags: tags.split(' '), since, author: 'Motionary', official: true });\n\n/** The first-party catalogue (9.0). */\nexport const MARKETPLACE: PluginListing[] = [\n L('motionary/fx/festival', 'Festival', 'Fireworks, lanterns, Christmas snow and spooky floats.', 'motionary/fx/festival', 'registerFestivalPack', 'firework-burst lantern-rise xmas-snow spooky-float', 'holiday celebration seasonal', '8.1'),\n L('motionary/fx/retro', 'Retro', 'Pixel, CRT, VHS and Y2K looks.', 'motionary/fx/retro', 'registerRetroPack', 'pixelate-in crt-power vhs-glitch y2k-shine', 'pixel 8-bit vintage', '8.2'),\n L('motionary/fx/organic', 'Organic', 'Vines, blooms, water drops and breathing blobs.', 'motionary/fx/organic', 'registerOrganicPack', 'vine-grow bloom water-drop breathe', 'nature blob liquid', '8.3'),\n L('motionary/fx/cyber', 'Cyber', 'HUD lock-on, scanlines, holograms and data decode.', 'motionary/fx/cyber', 'registerCyberPack', 'hud-frame scanline-sweep hologram data-decode', 'sci-fi hud glitch', '8.4'),\n L('motionary/fx/paper', 'Paper & hand-drawn', 'Paper unfold, pencil sketch, watercolor and crumple.', 'motionary/fx/paper', 'registerPaperPack', 'paper-unfold pencil-sketch watercolor crumple', 'sketch paper drawing', '8.5'),\n L('motionary/fx/surface', 'Surface themes', 'Neon ignite and pulse, glass frost, neumorphic press.', 'motionary/fx/surface', 'registerSurfacePack', 'neon-ignite neon-pulse glass-frost neu-press', 'neon glassmorphism neumorphism theme', '8.6'),\n L('motionary/fx/gesture', 'Gestures 3.0', 'Swipe and pinch hints, tilt wobble, depth-in.', 'motionary/fx/gesture', 'registerGesture3Pack', 'swipe-hint pinch-hint tilt-wobble depth-in', 'touch onboarding 3d', '8.7'),\n L('motionary/fx/spatial', 'XR / spatial', 'Portal open, orbit-in, spatial float and depth pop.', 'motionary/fx/spatial', 'registerSpatialPack', 'portal-open orbit-in spatial-float depth-pop', 'xr vr visionos 3d', '8.8'),\n L('motionary/fx/cinema', 'Cinematic', 'Dolly-in, pan reveal, letterbox and rack focus.', 'motionary/fx/cinema', 'registerCinemaPack', 'dolly-in pan-reveal letterbox rack-focus', 'film camera story', '9.1'),\n L('motionary/fx/lottie', 'Lottie & Rive', 'Lottie import (keyframes + SVG), Rive state-machine inputs, icon pop.', 'motionary/fx/lottie', 'registerLottiePack', 'lottie-play icon-pop', 'lottie rive after-effects icons', '9.2'),\n L('motionary/fx/genart', 'Generative art 2.0', 'Halftone print-in, drifting mesh gradients, kaleidoscope and film grain.', 'motionary/fx/genart', 'registerGenArtPack', 'halftone-in mesh-drift kaleido grain-flicker', 'generative gradient grain art', '9.3'),\n L('motionary/fx/video', 'Video motion', 'Scroll-driven video and frame sequences, film burn, jump cut.', 'motionary/fx/video', 'registerVideoPack', 'film-burn jump-cut', 'video scroll film', '9.4'),\n L('motionary/fx/safe', 'Accessible motion 2.0', 'Motion that never moves: safe fade, focus glow, colour pulse, underline sweep.', 'motionary/fx/safe', 'registerSafePack', 'safe-fade focus-glow color-pulse underline-sweep', 'a11y accessibility vestibular reduced-motion', '9.5'),\n L('motionary/fx/perf', 'Performance 3.0', 'Idle-time reveals and compositor-only hover lifts; OffscreenCanvas / Worker helpers.', 'motionary/fx/perf', 'registerPerf3Pack', 'idle-reveal gpu-lift', 'performance worker offscreen', '9.6'),\n];\n\n/** Ranked search over listings (name / title / tags / effects / description) (9.0). */\nexport function searchPlugins(query: string, list: PluginListing[] = MARKETPLACE): PluginListing[] {\n const q = query.toLowerCase().trim().split(/\\s+/).filter(Boolean);\n if (!q.length) return list.slice();\n const score = (p: PluginListing) =>\n q.reduce((s, w) => {\n let n = 0;\n if (p.title.toLowerCase().includes(w)) n += 5;\n if (p.tags.some((t) => t.includes(w))) n += 4;\n if (p.effects.some((e) => e.includes(w))) n += 3;\n if (p.name.toLowerCase().includes(w)) n += 2;\n if (p.description.toLowerCase().includes(w)) n += 1;\n return n ? s + n : -1e9;\n }, 0);\n return list\n .map((p) => [p, score(p)] as const)\n .filter(([, s]) => s > 0)\n .sort((a, b) => b[1] - a[1])\n .map(([p]) => p);\n}\n\nconst installed = new Map<string, string[]>();\n/** Names of installed plugins → their registered effects (9.0). */\nexport function installedPlugins(): Record<string, string[]> {\n return Object.fromEntries(installed);\n}\n\n/**\n * Install a plugin: `load(entry)` imports the module (default: dynamic `import()`), then its\n * `register*` function runs (first-party listing) or its `effects` are validated and registered\n * through `loadEffectPack` (third-party pack). Returns the registered effect names (9.0).\n */\nexport async function installPlugin(p: PluginListing | string, opts: { load?: (entry: string) => Promise<any>; override?: boolean } = {}): Promise<string[]> {\n const listing = typeof p === 'string' ? null : p;\n const entry = listing ? listing.entry : (p as string);\n const key = listing ? listing.name : entry;\n if (installed.has(key)) return installed.get(key) as string[];\n const load = opts.load || ((u: string) => import(/* @vite-ignore */ u));\n const mod = await load(entry);\n let names: string[];\n if (listing && typeof mod?.[listing.register] === 'function') {\n mod[listing.register]();\n names = listing.effects.slice();\n } else names = await loadEffectPack(mod as { effects?: EffectDefinition[]; default?: EffectDefinition[] }, { override: opts.override, manifest: mod?.manifest });\n installed.set(key, names);\n return names;\n}\n\n/** Read a marketplace index (`{ format: \"motionary/marketplace\", version: 1, plugins }`) (9.0). */\nexport async function fetchMarketplace(url: string, fetcher: typeof fetch = fetch): Promise<PluginListing[]> {\n const r = await fetcher(url);\n const j = await r.json();\n if (j?.format !== MARKETPLACE_FORMAT || j?.version !== 1 || !Array.isArray(j.plugins)) throw new Error(`[motionary] ${url} is not a ${MARKETPLACE_FORMAT} v1 index`);\n return j.plugins.filter((p: any) => p && typeof p.name === 'string' && typeof p.entry === 'string').map((p: any) => ({ title: p.name, description: '', register: '', effects: [], tags: [], since: '', ...p }));\n}\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"marketplace.js","sources":["../../src/components/marketplace/sign.ts","../../src/components/marketplace/index.ts"],"sourcesContent":["/**\n * 10.1: plugin signature (integrity) checks and version compatibility.\n *\n * - `pluginIntegrity(code)` → `'sha256-<base64>'` (Subresource-Integrity style).\n * - `verifyPlugin(code, integrity)` → `true` when the code matches (sha256 / sha384 / sha512).\n * - `satisfies(version, range)` — semver ranges: `*`, `x`, `1.2.3`, `=`, `>`, `>=`, `<`, `<=`,\n * `^`, `~`, `1.x`, hyphen ranges `1.0.0 - 2.0.0`, AND (space) and OR (`||`).\n * - `checkCompat(manifest, version)` — reads `engines.motionary` (or `motionary`) from a plugin manifest.\n */\n\ntype Algo = 'sha256' | 'sha384' | 'sha512';\nconst ALGO: Record<Algo, string> = { sha256: 'SHA-256', sha384: 'SHA-384', sha512: 'SHA-512' };\n\nfunction b64(buf: ArrayBuffer): string {\n const bytes = new Uint8Array(buf);\n let s = '';\n for (const b of bytes) s += String.fromCharCode(b);\n return typeof btoa === 'function' ? btoa(s) : (globalThis as any).Buffer.from(bytes).toString('base64');\n}\n\n/** SRI-style integrity string of plugin code. Needs Web Crypto (browsers, Node ≥ 18, workers). */\nexport async function pluginIntegrity(code: string | ArrayBuffer | Uint8Array, algo: Algo = 'sha256'): Promise<string> {\n const subtle = (globalThis as any).crypto?.subtle;\n if (!subtle) throw new Error('[motionary] pluginIntegrity(): Web Crypto (crypto.subtle) is not available here');\n const data = typeof code === 'string' ? new TextEncoder().encode(code) : code instanceof Uint8Array ? code : new Uint8Array(code);\n return `${algo}-${b64(await subtle.digest(ALGO[algo], data))}`;\n}\n\n/** Does the code match the integrity string (any of several, space-separated)? */\nexport async function verifyPlugin(code: string | ArrayBuffer | Uint8Array, integrity: string): Promise<boolean> {\n for (const want of integrity.trim().split(/\\s+/)) {\n const algo = want.split('-')[0] as Algo;\n if (!ALGO[algo]) continue;\n if ((await pluginIntegrity(code, algo)) === want) return true;\n }\n return false;\n}\n\ntype V3 = [number, number, number];\nconst parse = (v: string): V3 | null => {\n const m = /^v?(\\d+)(?:\\.(\\d+))?(?:\\.(\\d+))?(?:[-+].*)?$/.exec(v.trim());\n return m ? [+m[1], +(m[2] || 0), +(m[3] || 0)] : null;\n};\nconst cmp = (a: V3, b: V3) => a[0] - b[0] || a[1] - b[1] || a[2] - b[2];\n\nfunction partial(v: string): { v: V3; parts: number } | null {\n const m = /^v?(\\d+|[x*])(?:\\.(\\d+|[x*]))?(?:\\.(\\d+|[x*]))?$/i.exec(v.trim());\n if (!m) return null;\n const segs = [m[1], m[2], m[3]];\n let parts = 0;\n for (const s of segs) { if (s === undefined || /[x*]/i.test(s)) break; parts++; }\n return { v: [+(parts > 0 ? segs[0] : 0), +(parts > 1 ? segs[1]! : 0), +(parts > 2 ? segs[2]! : 0)], parts };\n}\n\nfunction test(ver: V3, comp: string): boolean {\n const m = /^(\\^|~|>=|<=|>|<|=)?\\s*(.+)$/.exec(comp.trim());\n if (!m) return false;\n const op = m[1] || '';\n const p = partial(m[2]);\n if (!p) return false;\n const { v, parts } = p;\n const upper = (n: number): V3 => (n === 0 ? [Infinity, 0, 0] : n === 1 ? [v[0] + 1, 0, 0] : n === 2 ? [v[0], v[1] + 1, 0] : [v[0], v[1], v[2] + 1]);\n switch (op) {\n case '^': {\n const hi: V3 = v[0] > 0 || parts < 2 ? [v[0] + 1, 0, 0] : v[1] > 0 || parts < 3 ? [0, v[1] + 1, 0] : [0, 0, v[2] + 1];\n return cmp(ver, v) >= 0 && cmp(ver, hi) < 0;\n }\n case '~': return cmp(ver, v) >= 0 && cmp(ver, upper(Math.min(parts, 2) || 1)) < 0;\n case '>=': return cmp(ver, v) >= 0;\n case '>': return parts < 3 ? cmp(ver, upper(parts)) >= 0 : cmp(ver, v) > 0;\n case '<=': return parts < 3 ? cmp(ver, upper(parts)) < 0 : cmp(ver, v) <= 0;\n case '<': return cmp(ver, v) < 0;\n default: return parts === 3 ? cmp(ver, v) === 0 : cmp(ver, v) >= 0 && cmp(ver, upper(parts)) < 0;\n }\n}\n\n/** Does `version` satisfy the semver `range`? */\nexport function satisfies(version: string, range: string): boolean {\n const ver = parse(version);\n if (!ver) return false;\n return range.split('||').some((alt) => {\n const a = alt.trim();\n if (!a || a === '*' || a.toLowerCase() === 'x') return true;\n const hy = /^(\\S+)\\s+-\\s+(\\S+)$/.exec(a);\n if (hy) return test(ver, '>=' + hy[1]) && test(ver, '<=' + hy[2]);\n return a.replace(/(\\^|~|>=|<=|>|<|=)\\s+/g, '$1').split(/\\s+/).every((c) => test(ver, c));\n });\n}\n\nexport interface CompatResult {\n ok: boolean;\n range: string;\n version: string;\n message: string;\n}\n\n/** Check a plugin manifest's `engines.motionary` (or `motionary`) range against the running version. */\nexport function checkCompat(manifest: { engines?: { motionary?: string }; motionary?: string; name?: string }, version: string): CompatResult {\n const range = manifest.engines?.motionary || manifest.motionary || '*';\n const ok = satisfies(version, range);\n const who = manifest.name ? `\"${manifest.name}\"` : 'This plugin';\n return { ok, range, version, message: ok ? `${who} supports Motionary ${version} (${range}).` : `${who} needs Motionary ${range}; this page runs ${version}.` };\n}\n","/**\n * `motionary/marketplace` (= `motionary/components/marketplace`, 9.0 GA) —\n * the plugin marketplace. Builds on the 6.9 effect-pack manifest\n * (`packManifest`, `validateManifest`, `loadEffectPack`) with:\n *\n * - **`MARKETPLACE`** — the first-party catalogue: every Motionary effect\n * pack as a marketplace listing (name, entry, effects, tags, since).\n * - **`searchPlugins(query, list?)`** — ranked search over names,\n * descriptions, tags and effect names.\n * - **`installPlugin(listing | url, { load })`** — imports a pack (your\n * `load` can map entries to bundler imports), validates it and registers\n * its effects; remembered by `installedPlugins()`.\n * - **`fetchMarketplace(url)`** — read a third-party index\n * (`{ \"format\": \"motionary/marketplace\", \"version\": 1, \"plugins\": [...] }`).\n */\nimport type { EffectDefinition } from '../fx/registry';\nimport { loadEffectPack } from '../fx2/manifest';\n\nexport { EFFECT_PACK_FORMAT, packManifest, validateManifest, loadEffectPack } from '../fx2/manifest';\nexport type { EffectPackManifest } from '../fx2/manifest';\nexport { pluginIntegrity, verifyPlugin, satisfies, checkCompat } from './sign';\nexport type { CompatResult } from './sign';\n\nexport const MARKETPLACE_FORMAT = 'motionary/marketplace';\nexport interface PluginListing {\n name: string;\n title: string;\n description: string;\n entry: string;\n register: string;\n effects: string[];\n tags: string[];\n since: string;\n author?: string;\n official?: boolean;\n}\n\nconst L = (name: string, title: string, description: string, entry: string, register: string, effects: string, tags: string, since: string): PluginListing => ({ name, title, description, entry, register, effects: effects.split(' '), tags: tags.split(' '), since, author: 'Motionary', official: true });\n\n/** The first-party catalogue (9.0). */\nexport const MARKETPLACE: PluginListing[] = [\n L('motionary/fx/festival', 'Festival', 'Fireworks, lanterns, Christmas snow and spooky floats.', 'motionary/fx/festival', 'registerFestivalPack', 'firework-burst lantern-rise xmas-snow spooky-float', 'holiday celebration seasonal', '8.1'),\n L('motionary/fx/retro', 'Retro', 'Pixel, CRT, VHS and Y2K looks.', 'motionary/fx/retro', 'registerRetroPack', 'pixelate-in crt-power vhs-glitch y2k-shine', 'pixel 8-bit vintage', '8.2'),\n L('motionary/fx/organic', 'Organic', 'Vines, blooms, water drops and breathing blobs.', 'motionary/fx/organic', 'registerOrganicPack', 'vine-grow bloom water-drop breathe', 'nature blob liquid', '8.3'),\n L('motionary/fx/cyber', 'Cyber', 'HUD lock-on, scanlines, holograms and data decode.', 'motionary/fx/cyber', 'registerCyberPack', 'hud-frame scanline-sweep hologram data-decode', 'sci-fi hud glitch', '8.4'),\n L('motionary/fx/paper', 'Paper & hand-drawn', 'Paper unfold, pencil sketch, watercolor and crumple.', 'motionary/fx/paper', 'registerPaperPack', 'paper-unfold pencil-sketch watercolor crumple', 'sketch paper drawing', '8.5'),\n L('motionary/fx/surface', 'Surface themes', 'Neon ignite and pulse, glass frost, neumorphic press.', 'motionary/fx/surface', 'registerSurfacePack', 'neon-ignite neon-pulse glass-frost neu-press', 'neon glassmorphism neumorphism theme', '8.6'),\n L('motionary/fx/gesture', 'Gestures 3.0', 'Swipe and pinch hints, tilt wobble, depth-in.', 'motionary/fx/gesture', 'registerGesture3Pack', 'swipe-hint pinch-hint tilt-wobble depth-in', 'touch onboarding 3d', '8.7'),\n L('motionary/fx/spatial', 'XR / spatial', 'Portal open, orbit-in, spatial float and depth pop.', 'motionary/fx/spatial', 'registerSpatialPack', 'portal-open orbit-in spatial-float depth-pop', 'xr vr visionos 3d', '8.8'),\n L('motionary/fx/cinema', 'Cinematic', 'Dolly-in, pan reveal, letterbox and rack focus.', 'motionary/fx/cinema', 'registerCinemaPack', 'dolly-in pan-reveal letterbox rack-focus', 'film camera story', '9.1'),\n L('motionary/fx/lottie', 'Lottie & Rive', 'Lottie import (keyframes + SVG), Rive state-machine inputs, icon pop.', 'motionary/fx/lottie', 'registerLottiePack', 'lottie-play icon-pop', 'lottie rive after-effects icons', '9.2'),\n L('motionary/fx/genart', 'Generative art 2.0', 'Halftone print-in, drifting mesh gradients, kaleidoscope and film grain.', 'motionary/fx/genart', 'registerGenArtPack', 'halftone-in mesh-drift kaleido grain-flicker', 'generative gradient grain art', '9.3'),\n L('motionary/fx/video', 'Video motion', 'Scroll-driven video and frame sequences, film burn, jump cut.', 'motionary/fx/video', 'registerVideoPack', 'film-burn jump-cut', 'video scroll film', '9.4'),\n L('motionary/fx/safe', 'Accessible motion 2.0', 'Motion that never moves: safe fade, focus glow, colour pulse, underline sweep.', 'motionary/fx/safe', 'registerSafePack', 'safe-fade focus-glow color-pulse underline-sweep', 'a11y accessibility vestibular reduced-motion', '9.5'),\n L('motionary/fx/perf', 'Performance 3.0', 'Idle-time reveals and compositor-only hover lifts; OffscreenCanvas / Worker helpers.', 'motionary/fx/perf', 'registerPerf3Pack', 'idle-reveal gpu-lift', 'performance worker offscreen', '9.6'),\n];\n\n/** Ranked search over listings (name / title / tags / effects / description) (9.0). */\nexport function searchPlugins(query: string, list: PluginListing[] = MARKETPLACE): PluginListing[] {\n const q = query.toLowerCase().trim().split(/\\s+/).filter(Boolean);\n if (!q.length) return list.slice();\n const score = (p: PluginListing) =>\n q.reduce((s, w) => {\n let n = 0;\n if (p.title.toLowerCase().includes(w)) n += 5;\n if (p.tags.some((t) => t.includes(w))) n += 4;\n if (p.effects.some((e) => e.includes(w))) n += 3;\n if (p.name.toLowerCase().includes(w)) n += 2;\n if (p.description.toLowerCase().includes(w)) n += 1;\n return n ? s + n : -1e9;\n }, 0);\n return list\n .map((p) => [p, score(p)] as const)\n .filter(([, s]) => s > 0)\n .sort((a, b) => b[1] - a[1])\n .map(([p]) => p);\n}\n\nconst installed = new Map<string, string[]>();\n/** Names of installed plugins → their registered effects (9.0). */\nexport function installedPlugins(): Record<string, string[]> {\n return Object.fromEntries(installed);\n}\n\n/**\n * Install a plugin: `load(entry)` imports the module (default: dynamic `import()`), then its\n * `register*` function runs (first-party listing) or its `effects` are validated and registered\n * through `loadEffectPack` (third-party pack). Returns the registered effect names (9.0).\n */\nexport async function installPlugin(p: PluginListing | string, opts: { load?: (entry: string) => Promise<any>; override?: boolean } = {}): Promise<string[]> {\n const listing = typeof p === 'string' ? null : p;\n const entry = listing ? listing.entry : (p as string);\n const key = listing ? listing.name : entry;\n if (installed.has(key)) return installed.get(key) as string[];\n const load = opts.load || ((u: string) => import(/* @vite-ignore */ u));\n const mod = await load(entry);\n let names: string[];\n if (listing && typeof mod?.[listing.register] === 'function') {\n mod[listing.register]();\n names = listing.effects.slice();\n } else names = await loadEffectPack(mod as { effects?: EffectDefinition[]; default?: EffectDefinition[] }, { override: opts.override, manifest: mod?.manifest });\n installed.set(key, names);\n return names;\n}\n\n/** Read a marketplace index (`{ format: \"motionary/marketplace\", version: 1, plugins }`) (9.0). */\nexport async function fetchMarketplace(url: string, fetcher: typeof fetch = fetch): Promise<PluginListing[]> {\n const r = await fetcher(url);\n const j = await r.json();\n if (j?.format !== MARKETPLACE_FORMAT || j?.version !== 1 || !Array.isArray(j.plugins)) throw new Error(`[motionary] ${url} is not a ${MARKETPLACE_FORMAT} v1 index`);\n return j.plugins.filter((p: any) => p && typeof p.name === 'string' && typeof p.entry === 'string').map((p: any) => ({ title: p.name, description: '', register: '', effects: [], tags: [], since: '', ...p }));\n}\n"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"native.cjs","sources":["../../src/components/native/index.ts"],"sourcesContent":["/**\n * `motionary/native` (= `motionary/components/native`, 9.8) — native 2.0:\n * take the motion you designed on the web to React Native and Flutter.\n *\n * - `toReactNative(rules, { name })` — a React Native component (Animated +\n * Easing.bezier / spring) for the entrance and press rules of a motion\n * string.\n * - `toFlutter(rules, { name })` — a Flutter widget (AnimationController +\n * Cubic curves) for the same rules.\n * - `nativeEasing(easing, 'react-native' | 'flutter')` — a CSS easing as\n * `Easing.bezier(…)` / `Cubic(…)`.\n * - `nativeTokens()` — Motionary's motion tokens (durations, easings as\n * bezier arrays, springs) as JSON for native design systems.\n *\n * Complete sample apps live in `examples/native/react-native` and\n * `examples/native/flutter`.\n */\nimport { parseMotion, type MotionRule } from '../dsl/index';\nimport { easingPoints } from '../design/index';\nimport { MOTION_TOKENS } from '../tokens/index';\n\ntype Platform = 'react-native' | 'flutter';\nconst NAMED: Record<string, string> = { spring: 'cubic-bezier(0.34, 1.56, 0.64, 1)', smooth: 'cubic-bezier(0.22, 1, 0.36, 1)' };\n/** A CSS easing as React Native `Easing.bezier(…)` or Flutter `Cubic(…)` (9.8). */\nexport function nativeEasing(easing: string | undefined, platform: Platform): string {\n const p = easingPoints(NAMED[easing || ''] || easing || 'cubic-bezier(0.22, 1, 0.36, 1)');\n return platform === 'flutter' ? `Cubic(${p.join(', ')})` : `Easing.bezier(${p.join(', ')})`;\n}\n\n/** Start values for an entrance preset: opacity, translate x / y (dp), scale (9.8). */\nexport function entranceFrom(effect: string): { opacity: number; x: number; y: number; scale: number } {\n const m: Record<string, [number, number, number]> = { 'fade-up': [0, 24, 1], 'fade-down': [0, -24, 1], 'fade-left': [24, 0, 1], 'fade-right': [-24, 0, 1], scale: [0, 0, 0.85], 'zoom-in': [0, 0, 0.6], 'zoom-out': [0, 0, 1.2] };\n const [x, y, s] = m[effect] || [0, 0, 1];\n return { opacity: 0, x, y, scale: s };\n}\n\nconst ident = (s: string) => s.replace(/(^|[-_\\s]+)([a-z0-9])/gi, (_, __, c) => c.toUpperCase()).replace(/[^A-Za-z0-9]/g, '') || 'Motion';\nconst rulesOf = (r: string | MotionRule[]) => (typeof r === 'string' ? parseMotion(r).rules : r);\n\n/** A React Native component for a motion string (entrance on mount, `pop` / press rules on press) (9.8). */\nexport function toReactNative(rules: string | MotionRule[], opts: { name?: string } = {}): string {\n const rs = rulesOf(rules);\n const name = ident(opts.name || 'MotionView');\n const enter = rs.find((r) => r.trigger === 'enter' || r.trigger === 'load');\n const press = rs.find((r) => r.trigger === 'click' || r.trigger === 'hover');\n const f = entranceFrom(enter?.effect || 'fade');\n const lines = [\n `// Generated by motionary/native (9.8) from: ${rs.map((r) => `${r.trigger}: ${r.effect}`).join('; ') || '—'}`,\n `import React, { useEffect, useRef } from 'react';`,\n `import { Animated, Easing, ${press ? 'Pressable, ' : ''}AccessibilityInfo } from 'react-native';`,\n ``,\n `export function ${name}({ children, index = 0, onPress }) {`,\n ` const t = useRef(new Animated.Value(0)).current;`,\n ` const s = useRef(new Animated.Value(1)).current;`,\n ` useEffect(() => {`,\n ` AccessibilityInfo.isReduceMotionEnabled().then((reduce) => {`,\n ` if (reduce) return t.setValue(1);`,\n ` Animated.timing(t, { toValue: 1, duration: ${enter?.duration ?? 600}, delay: ${enter?.delay ?? 0} + index * ${enter?.stagger ?? 0}, easing: ${nativeEasing(enter?.easing, 'react-native')}, useNativeDriver: true }).start();`,\n ` });`,\n ` }, []);`,\n ` const style = {`,\n ` opacity: t.interpolate({ inputRange: [0, 1], outputRange: [${f.opacity}, 1] }),`,\n ` transform: [`,\n ` { translateX: t.interpolate({ inputRange: [0, 1], outputRange: [${f.x}, 0] }) },`,\n ` { translateY: t.interpolate({ inputRange: [0, 1], outputRange: [${f.y}, 0] }) },`,\n ` { scale: Animated.multiply(s, t.interpolate({ inputRange: [0, 1], outputRange: [${f.scale}, 1] })) },`,\n ` ],`,\n ` };`,\n ];\n if (press) {\n lines.push(\n ` const pressIn = () => Animated.spring(s, { toValue: 0.92, stiffness: ${MOTION_TOKENS.spring.snappy.stiffness}, damping: ${MOTION_TOKENS.spring.snappy.damping}, useNativeDriver: true }).start();`,\n ` const pressOut = () => Animated.spring(s, { toValue: 1, stiffness: ${MOTION_TOKENS.spring.bouncy.stiffness}, damping: ${MOTION_TOKENS.spring.bouncy.damping}, useNativeDriver: true }).start();`,\n ` return (`,\n ` <Pressable onPressIn={pressIn} onPressOut={pressOut} onPress={onPress}>`,\n ` <Animated.View style={style}>{children}</Animated.View>`,\n ` </Pressable>`,\n ` );`\n );\n } else lines.push(` return <Animated.View style={style}>{children}</Animated.View>;`);\n lines.push(`}`, ``);\n return lines.join('\\n');\n}\n\n/** A Flutter widget for a motion string (entrance on first build, press spring) (9.8). */\nexport function toFlutter(rules: string | MotionRule[], opts: { name?: string } = {}): string {\n const rs = rulesOf(rules);\n const name = ident(opts.name || 'MotionView');\n const enter = rs.find((r) => r.trigger === 'enter' || r.trigger === 'load');\n const press = rs.some((r) => r.trigger === 'click' || r.trigger === 'hover');\n const f = entranceFrom(enter?.effect || 'fade');\n return [\n `// Generated by motionary/native (9.8) from: ${rs.map((r) => `${r.trigger}: ${r.effect}`).join('; ') || '—'}`,\n `import 'package:flutter/material.dart';`,\n ``,\n `class ${name} extends StatefulWidget {`,\n ` const ${name}({super.key, required this.child, this.index = 0, this.onTap});`,\n ` final Widget child;`,\n ` final int index;`,\n ` final VoidCallback? onTap;`,\n ` @override`,\n ` State<${name}> createState() => _${name}State();`,\n `}`,\n ``,\n `class _${name}State extends State<${name}> with SingleTickerProviderStateMixin {`,\n ` late final AnimationController _c = AnimationController(vsync: this, duration: const Duration(milliseconds: ${enter?.duration ?? 600}));`,\n ` late final Animation<double> _t = CurvedAnimation(parent: _c, curve: const ${nativeEasing(enter?.easing, 'flutter')});`,\n ` double _scale = 1;`,\n ``,\n ` @override`,\n ` void didChangeDependencies() {`,\n ` super.didChangeDependencies();`,\n ` if (MediaQuery.of(context).disableAnimations) { _c.value = 1; return; }`,\n ` Future.delayed(Duration(milliseconds: ${enter?.delay ?? 0} + widget.index * ${enter?.stagger ?? 0}), () { if (mounted) _c.forward(); });`,\n ` }`,\n ``,\n ` @override`,\n ` void dispose() { _c.dispose(); super.dispose(); }`,\n ``,\n ` @override`,\n ` Widget build(BuildContext context) {`,\n ` Widget w = AnimatedBuilder(`,\n ` animation: _t,`,\n ` builder: (context, child) => Opacity(`,\n ` opacity: ${f.opacity} + (1 - ${f.opacity}) * _t.value,`,\n ` child: Transform.translate(`,\n ` offset: Offset(${f.x} * (1 - _t.value), ${f.y} * (1 - _t.value)),`,\n ` child: Transform.scale(scale: ${f.scale} + (1 - ${f.scale}) * _t.value, child: child),`,\n ` ),`,\n ` ),`,\n ` child: widget.child,`,\n ` );`,\n press\n ? ` return GestureDetector(\\n onTapDown: (_) => setState(() => _scale = 0.92),\\n onTapUp: (_) => setState(() => _scale = 1),\\n onTapCancel: () => setState(() => _scale = 1),\\n onTap: widget.onTap,\\n child: AnimatedScale(scale: _scale, duration: const Duration(milliseconds: 180), curve: Curves.easeOutBack, child: w),\\n );`\n : ` return w;`,\n ` }`,\n `}`,\n ``,\n ].join('\\n');\n}\n\n/** Motion tokens for native design systems: durations (ms), easings as bezier arrays, springs (9.8). */\nexport function nativeTokens(): { duration: Record<string, number>; easing: Record<string, number[]>; spring: Record<string, { stiffness: number; damping: number; mass: number }> } {\n const easing: Record<string, number[]> = {};\n for (const [k, v] of Object.entries(MOTION_TOKENS.easing)) easing[k] = easingPoints(v);\n return { duration: { ...MOTION_TOKENS.duration }, easing, spring: JSON.parse(JSON.stringify(MOTION_TOKENS.spring)) };\n}\n"],"names":["easingPoints","parseMotion","MOTION_TOKENS"],"mappings":"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"}
1
+ {"version":3,"file":"native.cjs","sources":["../../src/components/native/index.ts"],"sourcesContent":["/**\n * `motionary/native` (= `motionary/components/native`, 9.8) — native 2.0:\n * take the motion you designed on the web to React Native and Flutter.\n *\n * - `toReactNative(rules, { name })` — a React Native component (Animated +\n * Easing.bezier / spring) for the entrance and press rules of a motion\n * string.\n * - `toFlutter(rules, { name })` — a Flutter widget (AnimationController +\n * Cubic curves) for the same rules.\n * - `nativeEasing(easing, 'react-native' | 'flutter')` — a CSS easing as\n * `Easing.bezier(…)` / `Cubic(…)`.\n * - `nativeTokens()` — Motionary's motion tokens (durations, easings as\n * bezier arrays, springs) as JSON for native design systems.\n *\n * Complete sample apps live in `examples/native/react-native` and\n * `examples/native/flutter`.\n */\nimport { parseMotion, type MotionRule } from '../dsl/index';\nimport { easingPoints } from '../design/index';\nimport { MOTION_TOKENS } from '../tokens/index';\n\ntype Platform = 'react-native' | 'flutter';\nconst NAMED: Record<string, string> = { spring: 'cubic-bezier(0.34, 1.56, 0.64, 1)', smooth: 'cubic-bezier(0.22, 1, 0.36, 1)' };\n/** A CSS easing as React Native `Easing.bezier(…)` or Flutter `Cubic(…)` (9.8). */\nexport function nativeEasing(easing: string | undefined, platform: Platform): string {\n const p = easingPoints(NAMED[easing || ''] || easing || 'cubic-bezier(0.22, 1, 0.36, 1)');\n return platform === 'flutter' ? `Cubic(${p.join(', ')})` : `Easing.bezier(${p.join(', ')})`;\n}\n\n/** Start values for an entrance preset: opacity, translate x / y (dp), scale (9.8). */\nexport function entranceFrom(effect: string): { opacity: number; x: number; y: number; scale: number } {\n const m: Record<string, [number, number, number]> = { 'fade-up': [0, 24, 1], 'fade-down': [0, -24, 1], 'fade-left': [24, 0, 1], 'fade-right': [-24, 0, 1], scale: [0, 0, 0.85], 'zoom-in': [0, 0, 0.6], 'zoom-out': [0, 0, 1.2] };\n const [x, y, s] = m[effect] || [0, 0, 1];\n return { opacity: 0, x, y, scale: s };\n}\n\nconst ident = (s: string) => s.replace(/(^|[-_\\s]+)([a-z0-9])/gi, (_, __, c) => c.toUpperCase()).replace(/[^A-Za-z0-9]/g, '') || 'Motion';\nconst rulesOf = (r: string | MotionRule[]) => (typeof r === 'string' ? parseMotion(r).rules : r);\n\n/** A React Native component for a motion string (entrance on mount, `pop` / press rules on press) (9.8). */\nexport function toReactNative(rules: string | MotionRule[], opts: { name?: string } = {}): string {\n const rs = rulesOf(rules);\n const name = ident(opts.name || 'MotionView');\n const enter = rs.find((r) => r.trigger === 'enter' || r.trigger === 'load');\n const press = rs.find((r) => r.trigger === 'click' || r.trigger === 'hover');\n const f = entranceFrom(enter?.effect || 'fade');\n const lines = [\n `// Generated by motionary/native (9.8) from: ${rs.map((r) => `${r.trigger}: ${r.effect}`).join('; ') || '—'}`,\n `import React, { useEffect, useRef } from 'react';`,\n `import { Animated, Easing, ${press ? 'Pressable, ' : ''}AccessibilityInfo } from 'react-native';`,\n ``,\n `export function ${name}({ children, index = 0, onPress }) {`,\n ` const t = useRef(new Animated.Value(0)).current;`,\n ` const s = useRef(new Animated.Value(1)).current;`,\n ` useEffect(() => {`,\n ` AccessibilityInfo.isReduceMotionEnabled().then((reduce) => {`,\n ` if (reduce) return t.setValue(1);`,\n ` Animated.timing(t, { toValue: 1, duration: ${enter?.duration ?? 600}, delay: ${enter?.delay ?? 0} + index * ${enter?.stagger ?? 0}, easing: ${nativeEasing(enter?.easing, 'react-native')}, useNativeDriver: true }).start();`,\n ` });`,\n ` }, []);`,\n ` const style = {`,\n ` opacity: t.interpolate({ inputRange: [0, 1], outputRange: [${f.opacity}, 1] }),`,\n ` transform: [`,\n ` { translateX: t.interpolate({ inputRange: [0, 1], outputRange: [${f.x}, 0] }) },`,\n ` { translateY: t.interpolate({ inputRange: [0, 1], outputRange: [${f.y}, 0] }) },`,\n ` { scale: Animated.multiply(s, t.interpolate({ inputRange: [0, 1], outputRange: [${f.scale}, 1] })) },`,\n ` ],`,\n ` };`,\n ];\n if (press) {\n lines.push(\n ` const pressIn = () => Animated.spring(s, { toValue: 0.92, stiffness: ${MOTION_TOKENS.spring.snappy.stiffness}, damping: ${MOTION_TOKENS.spring.snappy.damping}, useNativeDriver: true }).start();`,\n ` const pressOut = () => Animated.spring(s, { toValue: 1, stiffness: ${MOTION_TOKENS.spring.bouncy.stiffness}, damping: ${MOTION_TOKENS.spring.bouncy.damping}, useNativeDriver: true }).start();`,\n ` return (`,\n ` <Pressable onPressIn={pressIn} onPressOut={pressOut} onPress={onPress}>`,\n ` <Animated.View style={style}>{children}</Animated.View>`,\n ` </Pressable>`,\n ` );`\n );\n } else lines.push(` return <Animated.View style={style}>{children}</Animated.View>;`);\n lines.push(`}`, ``);\n return lines.join('\\n');\n}\n\n/** A Flutter widget for a motion string (entrance on first build, press spring) (9.8). */\nexport function toFlutter(rules: string | MotionRule[], opts: { name?: string } = {}): string {\n const rs = rulesOf(rules);\n const name = ident(opts.name || 'MotionView');\n const enter = rs.find((r) => r.trigger === 'enter' || r.trigger === 'load');\n const press = rs.some((r) => r.trigger === 'click' || r.trigger === 'hover');\n const f = entranceFrom(enter?.effect || 'fade');\n return [\n `// Generated by motionary/native (9.8) from: ${rs.map((r) => `${r.trigger}: ${r.effect}`).join('; ') || '—'}`,\n `import 'package:flutter/material.dart';`,\n ``,\n `class ${name} extends StatefulWidget {`,\n ` const ${name}({super.key, required this.child, this.index = 0, this.onTap});`,\n ` final Widget child;`,\n ` final int index;`,\n ` final VoidCallback? onTap;`,\n ` @override`,\n ` State<${name}> createState() => _${name}State();`,\n `}`,\n ``,\n `class _${name}State extends State<${name}> with SingleTickerProviderStateMixin {`,\n ` late final AnimationController _c = AnimationController(vsync: this, duration: const Duration(milliseconds: ${enter?.duration ?? 600}));`,\n ` late final Animation<double> _t = CurvedAnimation(parent: _c, curve: const ${nativeEasing(enter?.easing, 'flutter')});`,\n ` double _scale = 1;`,\n ``,\n ` @override`,\n ` void didChangeDependencies() {`,\n ` super.didChangeDependencies();`,\n ` if (MediaQuery.of(context).disableAnimations) { _c.value = 1; return; }`,\n ` Future.delayed(Duration(milliseconds: ${enter?.delay ?? 0} + widget.index * ${enter?.stagger ?? 0}), () { if (mounted) _c.forward(); });`,\n ` }`,\n ``,\n ` @override`,\n ` void dispose() { _c.dispose(); super.dispose(); }`,\n ``,\n ` @override`,\n ` Widget build(BuildContext context) {`,\n ` Widget w = AnimatedBuilder(`,\n ` animation: _t,`,\n ` builder: (context, child) => Opacity(`,\n ` opacity: ${f.opacity} + (1 - ${f.opacity}) * _t.value,`,\n ` child: Transform.translate(`,\n ` offset: Offset(${f.x} * (1 - _t.value), ${f.y} * (1 - _t.value)),`,\n ` child: Transform.scale(scale: ${f.scale} + (1 - ${f.scale}) * _t.value, child: child),`,\n ` ),`,\n ` ),`,\n ` child: widget.child,`,\n ` );`,\n press\n ? ` return GestureDetector(\\n onTapDown: (_) => setState(() => _scale = 0.92),\\n onTapUp: (_) => setState(() => _scale = 1),\\n onTapCancel: () => setState(() => _scale = 1),\\n onTap: widget.onTap,\\n child: AnimatedScale(scale: _scale, duration: const Duration(milliseconds: 180), curve: Curves.easeOutBack, child: w),\\n );`\n : ` return w;`,\n ` }`,\n `}`,\n ``,\n ].join('\\n');\n}\n\n/** Motion tokens for native design systems: durations (ms), easings as bezier arrays, springs (9.8). */\nexport function nativeTokens(): { duration: Record<string, number>; easing: Record<string, number[]>; spring: Record<string, { stiffness: number; damping: number; mass: number }> } {\n const easing: Record<string, number[]> = {};\n for (const [k, v] of Object.entries(MOTION_TOKENS.easing)) easing[k] = easingPoints(v);\n return { duration: { ...MOTION_TOKENS.duration }, easing, spring: JSON.parse(JSON.stringify(MOTION_TOKENS.spring)) };\n}\n"],"names":["easingPoints","parseMotion","MOTION_TOKENS"],"mappings":"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"}
@@ -1,9 +1,9 @@
1
1
  import { parseMotion } from './dsl.js';
2
2
  import { easingPoints } from './design.js';
3
3
  import { MOTION_TOKENS } from './tokens.js';
4
- import '../chunks/registry-gFJRpPES.js';
5
- import '../chunks/base-BnRyfuyM.js';
6
- import '../chunks/core-DsGoL9EY.js';
4
+ import '../chunks/registry-BKzyg1JV.js';
5
+ import '../chunks/base-BTev8qxg.js';
6
+ import '../chunks/core-BviA7nFa.js';
7
7
 
8
8
  /**
9
9
  * `motionary/native` (= `motionary/components/native`, 9.8) — native 2.0:
@@ -1 +1 @@
1
- {"version":3,"file":"native.js","sources":["../../src/components/native/index.ts"],"sourcesContent":["/**\n * `motionary/native` (= `motionary/components/native`, 9.8) — native 2.0:\n * take the motion you designed on the web to React Native and Flutter.\n *\n * - `toReactNative(rules, { name })` — a React Native component (Animated +\n * Easing.bezier / spring) for the entrance and press rules of a motion\n * string.\n * - `toFlutter(rules, { name })` — a Flutter widget (AnimationController +\n * Cubic curves) for the same rules.\n * - `nativeEasing(easing, 'react-native' | 'flutter')` — a CSS easing as\n * `Easing.bezier(…)` / `Cubic(…)`.\n * - `nativeTokens()` — Motionary's motion tokens (durations, easings as\n * bezier arrays, springs) as JSON for native design systems.\n *\n * Complete sample apps live in `examples/native/react-native` and\n * `examples/native/flutter`.\n */\nimport { parseMotion, type MotionRule } from '../dsl/index';\nimport { easingPoints } from '../design/index';\nimport { MOTION_TOKENS } from '../tokens/index';\n\ntype Platform = 'react-native' | 'flutter';\nconst NAMED: Record<string, string> = { spring: 'cubic-bezier(0.34, 1.56, 0.64, 1)', smooth: 'cubic-bezier(0.22, 1, 0.36, 1)' };\n/** A CSS easing as React Native `Easing.bezier(…)` or Flutter `Cubic(…)` (9.8). */\nexport function nativeEasing(easing: string | undefined, platform: Platform): string {\n const p = easingPoints(NAMED[easing || ''] || easing || 'cubic-bezier(0.22, 1, 0.36, 1)');\n return platform === 'flutter' ? `Cubic(${p.join(', ')})` : `Easing.bezier(${p.join(', ')})`;\n}\n\n/** Start values for an entrance preset: opacity, translate x / y (dp), scale (9.8). */\nexport function entranceFrom(effect: string): { opacity: number; x: number; y: number; scale: number } {\n const m: Record<string, [number, number, number]> = { 'fade-up': [0, 24, 1], 'fade-down': [0, -24, 1], 'fade-left': [24, 0, 1], 'fade-right': [-24, 0, 1], scale: [0, 0, 0.85], 'zoom-in': [0, 0, 0.6], 'zoom-out': [0, 0, 1.2] };\n const [x, y, s] = m[effect] || [0, 0, 1];\n return { opacity: 0, x, y, scale: s };\n}\n\nconst ident = (s: string) => s.replace(/(^|[-_\\s]+)([a-z0-9])/gi, (_, __, c) => c.toUpperCase()).replace(/[^A-Za-z0-9]/g, '') || 'Motion';\nconst rulesOf = (r: string | MotionRule[]) => (typeof r === 'string' ? parseMotion(r).rules : r);\n\n/** A React Native component for a motion string (entrance on mount, `pop` / press rules on press) (9.8). */\nexport function toReactNative(rules: string | MotionRule[], opts: { name?: string } = {}): string {\n const rs = rulesOf(rules);\n const name = ident(opts.name || 'MotionView');\n const enter = rs.find((r) => r.trigger === 'enter' || r.trigger === 'load');\n const press = rs.find((r) => r.trigger === 'click' || r.trigger === 'hover');\n const f = entranceFrom(enter?.effect || 'fade');\n const lines = [\n `// Generated by motionary/native (9.8) from: ${rs.map((r) => `${r.trigger}: ${r.effect}`).join('; ') || '—'}`,\n `import React, { useEffect, useRef } from 'react';`,\n `import { Animated, Easing, ${press ? 'Pressable, ' : ''}AccessibilityInfo } from 'react-native';`,\n ``,\n `export function ${name}({ children, index = 0, onPress }) {`,\n ` const t = useRef(new Animated.Value(0)).current;`,\n ` const s = useRef(new Animated.Value(1)).current;`,\n ` useEffect(() => {`,\n ` AccessibilityInfo.isReduceMotionEnabled().then((reduce) => {`,\n ` if (reduce) return t.setValue(1);`,\n ` Animated.timing(t, { toValue: 1, duration: ${enter?.duration ?? 600}, delay: ${enter?.delay ?? 0} + index * ${enter?.stagger ?? 0}, easing: ${nativeEasing(enter?.easing, 'react-native')}, useNativeDriver: true }).start();`,\n ` });`,\n ` }, []);`,\n ` const style = {`,\n ` opacity: t.interpolate({ inputRange: [0, 1], outputRange: [${f.opacity}, 1] }),`,\n ` transform: [`,\n ` { translateX: t.interpolate({ inputRange: [0, 1], outputRange: [${f.x}, 0] }) },`,\n ` { translateY: t.interpolate({ inputRange: [0, 1], outputRange: [${f.y}, 0] }) },`,\n ` { scale: Animated.multiply(s, t.interpolate({ inputRange: [0, 1], outputRange: [${f.scale}, 1] })) },`,\n ` ],`,\n ` };`,\n ];\n if (press) {\n lines.push(\n ` const pressIn = () => Animated.spring(s, { toValue: 0.92, stiffness: ${MOTION_TOKENS.spring.snappy.stiffness}, damping: ${MOTION_TOKENS.spring.snappy.damping}, useNativeDriver: true }).start();`,\n ` const pressOut = () => Animated.spring(s, { toValue: 1, stiffness: ${MOTION_TOKENS.spring.bouncy.stiffness}, damping: ${MOTION_TOKENS.spring.bouncy.damping}, useNativeDriver: true }).start();`,\n ` return (`,\n ` <Pressable onPressIn={pressIn} onPressOut={pressOut} onPress={onPress}>`,\n ` <Animated.View style={style}>{children}</Animated.View>`,\n ` </Pressable>`,\n ` );`\n );\n } else lines.push(` return <Animated.View style={style}>{children}</Animated.View>;`);\n lines.push(`}`, ``);\n return lines.join('\\n');\n}\n\n/** A Flutter widget for a motion string (entrance on first build, press spring) (9.8). */\nexport function toFlutter(rules: string | MotionRule[], opts: { name?: string } = {}): string {\n const rs = rulesOf(rules);\n const name = ident(opts.name || 'MotionView');\n const enter = rs.find((r) => r.trigger === 'enter' || r.trigger === 'load');\n const press = rs.some((r) => r.trigger === 'click' || r.trigger === 'hover');\n const f = entranceFrom(enter?.effect || 'fade');\n return [\n `// Generated by motionary/native (9.8) from: ${rs.map((r) => `${r.trigger}: ${r.effect}`).join('; ') || '—'}`,\n `import 'package:flutter/material.dart';`,\n ``,\n `class ${name} extends StatefulWidget {`,\n ` const ${name}({super.key, required this.child, this.index = 0, this.onTap});`,\n ` final Widget child;`,\n ` final int index;`,\n ` final VoidCallback? onTap;`,\n ` @override`,\n ` State<${name}> createState() => _${name}State();`,\n `}`,\n ``,\n `class _${name}State extends State<${name}> with SingleTickerProviderStateMixin {`,\n ` late final AnimationController _c = AnimationController(vsync: this, duration: const Duration(milliseconds: ${enter?.duration ?? 600}));`,\n ` late final Animation<double> _t = CurvedAnimation(parent: _c, curve: const ${nativeEasing(enter?.easing, 'flutter')});`,\n ` double _scale = 1;`,\n ``,\n ` @override`,\n ` void didChangeDependencies() {`,\n ` super.didChangeDependencies();`,\n ` if (MediaQuery.of(context).disableAnimations) { _c.value = 1; return; }`,\n ` Future.delayed(Duration(milliseconds: ${enter?.delay ?? 0} + widget.index * ${enter?.stagger ?? 0}), () { if (mounted) _c.forward(); });`,\n ` }`,\n ``,\n ` @override`,\n ` void dispose() { _c.dispose(); super.dispose(); }`,\n ``,\n ` @override`,\n ` Widget build(BuildContext context) {`,\n ` Widget w = AnimatedBuilder(`,\n ` animation: _t,`,\n ` builder: (context, child) => Opacity(`,\n ` opacity: ${f.opacity} + (1 - ${f.opacity}) * _t.value,`,\n ` child: Transform.translate(`,\n ` offset: Offset(${f.x} * (1 - _t.value), ${f.y} * (1 - _t.value)),`,\n ` child: Transform.scale(scale: ${f.scale} + (1 - ${f.scale}) * _t.value, child: child),`,\n ` ),`,\n ` ),`,\n ` child: widget.child,`,\n ` );`,\n press\n ? ` return GestureDetector(\\n onTapDown: (_) => setState(() => _scale = 0.92),\\n onTapUp: (_) => setState(() => _scale = 1),\\n onTapCancel: () => setState(() => _scale = 1),\\n onTap: widget.onTap,\\n child: AnimatedScale(scale: _scale, duration: const Duration(milliseconds: 180), curve: Curves.easeOutBack, child: w),\\n );`\n : ` return w;`,\n ` }`,\n `}`,\n ``,\n ].join('\\n');\n}\n\n/** Motion tokens for native design systems: durations (ms), easings as bezier arrays, springs (9.8). */\nexport function nativeTokens(): { duration: Record<string, number>; easing: Record<string, number[]>; spring: Record<string, { stiffness: number; damping: number; mass: number }> } {\n const easing: Record<string, number[]> = {};\n for (const [k, v] of Object.entries(MOTION_TOKENS.easing)) easing[k] = easingPoints(v);\n return { duration: { ...MOTION_TOKENS.duration }, easing, spring: JSON.parse(JSON.stringify(MOTION_TOKENS.spring)) };\n}\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"native.js","sources":["../../src/components/native/index.ts"],"sourcesContent":["/**\n * `motionary/native` (= `motionary/components/native`, 9.8) — native 2.0:\n * take the motion you designed on the web to React Native and Flutter.\n *\n * - `toReactNative(rules, { name })` — a React Native component (Animated +\n * Easing.bezier / spring) for the entrance and press rules of a motion\n * string.\n * - `toFlutter(rules, { name })` — a Flutter widget (AnimationController +\n * Cubic curves) for the same rules.\n * - `nativeEasing(easing, 'react-native' | 'flutter')` — a CSS easing as\n * `Easing.bezier(…)` / `Cubic(…)`.\n * - `nativeTokens()` — Motionary's motion tokens (durations, easings as\n * bezier arrays, springs) as JSON for native design systems.\n *\n * Complete sample apps live in `examples/native/react-native` and\n * `examples/native/flutter`.\n */\nimport { parseMotion, type MotionRule } from '../dsl/index';\nimport { easingPoints } from '../design/index';\nimport { MOTION_TOKENS } from '../tokens/index';\n\ntype Platform = 'react-native' | 'flutter';\nconst NAMED: Record<string, string> = { spring: 'cubic-bezier(0.34, 1.56, 0.64, 1)', smooth: 'cubic-bezier(0.22, 1, 0.36, 1)' };\n/** A CSS easing as React Native `Easing.bezier(…)` or Flutter `Cubic(…)` (9.8). */\nexport function nativeEasing(easing: string | undefined, platform: Platform): string {\n const p = easingPoints(NAMED[easing || ''] || easing || 'cubic-bezier(0.22, 1, 0.36, 1)');\n return platform === 'flutter' ? `Cubic(${p.join(', ')})` : `Easing.bezier(${p.join(', ')})`;\n}\n\n/** Start values for an entrance preset: opacity, translate x / y (dp), scale (9.8). */\nexport function entranceFrom(effect: string): { opacity: number; x: number; y: number; scale: number } {\n const m: Record<string, [number, number, number]> = { 'fade-up': [0, 24, 1], 'fade-down': [0, -24, 1], 'fade-left': [24, 0, 1], 'fade-right': [-24, 0, 1], scale: [0, 0, 0.85], 'zoom-in': [0, 0, 0.6], 'zoom-out': [0, 0, 1.2] };\n const [x, y, s] = m[effect] || [0, 0, 1];\n return { opacity: 0, x, y, scale: s };\n}\n\nconst ident = (s: string) => s.replace(/(^|[-_\\s]+)([a-z0-9])/gi, (_, __, c) => c.toUpperCase()).replace(/[^A-Za-z0-9]/g, '') || 'Motion';\nconst rulesOf = (r: string | MotionRule[]) => (typeof r === 'string' ? parseMotion(r).rules : r);\n\n/** A React Native component for a motion string (entrance on mount, `pop` / press rules on press) (9.8). */\nexport function toReactNative(rules: string | MotionRule[], opts: { name?: string } = {}): string {\n const rs = rulesOf(rules);\n const name = ident(opts.name || 'MotionView');\n const enter = rs.find((r) => r.trigger === 'enter' || r.trigger === 'load');\n const press = rs.find((r) => r.trigger === 'click' || r.trigger === 'hover');\n const f = entranceFrom(enter?.effect || 'fade');\n const lines = [\n `// Generated by motionary/native (9.8) from: ${rs.map((r) => `${r.trigger}: ${r.effect}`).join('; ') || '—'}`,\n `import React, { useEffect, useRef } from 'react';`,\n `import { Animated, Easing, ${press ? 'Pressable, ' : ''}AccessibilityInfo } from 'react-native';`,\n ``,\n `export function ${name}({ children, index = 0, onPress }) {`,\n ` const t = useRef(new Animated.Value(0)).current;`,\n ` const s = useRef(new Animated.Value(1)).current;`,\n ` useEffect(() => {`,\n ` AccessibilityInfo.isReduceMotionEnabled().then((reduce) => {`,\n ` if (reduce) return t.setValue(1);`,\n ` Animated.timing(t, { toValue: 1, duration: ${enter?.duration ?? 600}, delay: ${enter?.delay ?? 0} + index * ${enter?.stagger ?? 0}, easing: ${nativeEasing(enter?.easing, 'react-native')}, useNativeDriver: true }).start();`,\n ` });`,\n ` }, []);`,\n ` const style = {`,\n ` opacity: t.interpolate({ inputRange: [0, 1], outputRange: [${f.opacity}, 1] }),`,\n ` transform: [`,\n ` { translateX: t.interpolate({ inputRange: [0, 1], outputRange: [${f.x}, 0] }) },`,\n ` { translateY: t.interpolate({ inputRange: [0, 1], outputRange: [${f.y}, 0] }) },`,\n ` { scale: Animated.multiply(s, t.interpolate({ inputRange: [0, 1], outputRange: [${f.scale}, 1] })) },`,\n ` ],`,\n ` };`,\n ];\n if (press) {\n lines.push(\n ` const pressIn = () => Animated.spring(s, { toValue: 0.92, stiffness: ${MOTION_TOKENS.spring.snappy.stiffness}, damping: ${MOTION_TOKENS.spring.snappy.damping}, useNativeDriver: true }).start();`,\n ` const pressOut = () => Animated.spring(s, { toValue: 1, stiffness: ${MOTION_TOKENS.spring.bouncy.stiffness}, damping: ${MOTION_TOKENS.spring.bouncy.damping}, useNativeDriver: true }).start();`,\n ` return (`,\n ` <Pressable onPressIn={pressIn} onPressOut={pressOut} onPress={onPress}>`,\n ` <Animated.View style={style}>{children}</Animated.View>`,\n ` </Pressable>`,\n ` );`\n );\n } else lines.push(` return <Animated.View style={style}>{children}</Animated.View>;`);\n lines.push(`}`, ``);\n return lines.join('\\n');\n}\n\n/** A Flutter widget for a motion string (entrance on first build, press spring) (9.8). */\nexport function toFlutter(rules: string | MotionRule[], opts: { name?: string } = {}): string {\n const rs = rulesOf(rules);\n const name = ident(opts.name || 'MotionView');\n const enter = rs.find((r) => r.trigger === 'enter' || r.trigger === 'load');\n const press = rs.some((r) => r.trigger === 'click' || r.trigger === 'hover');\n const f = entranceFrom(enter?.effect || 'fade');\n return [\n `// Generated by motionary/native (9.8) from: ${rs.map((r) => `${r.trigger}: ${r.effect}`).join('; ') || '—'}`,\n `import 'package:flutter/material.dart';`,\n ``,\n `class ${name} extends StatefulWidget {`,\n ` const ${name}({super.key, required this.child, this.index = 0, this.onTap});`,\n ` final Widget child;`,\n ` final int index;`,\n ` final VoidCallback? onTap;`,\n ` @override`,\n ` State<${name}> createState() => _${name}State();`,\n `}`,\n ``,\n `class _${name}State extends State<${name}> with SingleTickerProviderStateMixin {`,\n ` late final AnimationController _c = AnimationController(vsync: this, duration: const Duration(milliseconds: ${enter?.duration ?? 600}));`,\n ` late final Animation<double> _t = CurvedAnimation(parent: _c, curve: const ${nativeEasing(enter?.easing, 'flutter')});`,\n ` double _scale = 1;`,\n ``,\n ` @override`,\n ` void didChangeDependencies() {`,\n ` super.didChangeDependencies();`,\n ` if (MediaQuery.of(context).disableAnimations) { _c.value = 1; return; }`,\n ` Future.delayed(Duration(milliseconds: ${enter?.delay ?? 0} + widget.index * ${enter?.stagger ?? 0}), () { if (mounted) _c.forward(); });`,\n ` }`,\n ``,\n ` @override`,\n ` void dispose() { _c.dispose(); super.dispose(); }`,\n ``,\n ` @override`,\n ` Widget build(BuildContext context) {`,\n ` Widget w = AnimatedBuilder(`,\n ` animation: _t,`,\n ` builder: (context, child) => Opacity(`,\n ` opacity: ${f.opacity} + (1 - ${f.opacity}) * _t.value,`,\n ` child: Transform.translate(`,\n ` offset: Offset(${f.x} * (1 - _t.value), ${f.y} * (1 - _t.value)),`,\n ` child: Transform.scale(scale: ${f.scale} + (1 - ${f.scale}) * _t.value, child: child),`,\n ` ),`,\n ` ),`,\n ` child: widget.child,`,\n ` );`,\n press\n ? ` return GestureDetector(\\n onTapDown: (_) => setState(() => _scale = 0.92),\\n onTapUp: (_) => setState(() => _scale = 1),\\n onTapCancel: () => setState(() => _scale = 1),\\n onTap: widget.onTap,\\n child: AnimatedScale(scale: _scale, duration: const Duration(milliseconds: 180), curve: Curves.easeOutBack, child: w),\\n );`\n : ` return w;`,\n ` }`,\n `}`,\n ``,\n ].join('\\n');\n}\n\n/** Motion tokens for native design systems: durations (ms), easings as bezier arrays, springs (9.8). */\nexport function nativeTokens(): { duration: Record<string, number>; easing: Record<string, number[]>; spring: Record<string, { stiffness: number; damping: number; mass: number }> } {\n const easing: Record<string, number[]> = {};\n for (const [k, v] of Object.entries(MOTION_TOKENS.easing)) easing[k] = easingPoints(v);\n return { duration: { ...MOTION_TOKENS.duration }, easing, spring: JSON.parse(JSON.stringify(MOTION_TOKENS.spring)) };\n}\n"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"packs.cjs","sources":["../../src/components/packs/core.ts","../../src/components/packs/pack-el.ts","../../src/components/packs/index.ts"],"sourcesContent":["import { prefersReducedMotion, motionScale, EASE_OUT, EASE_SPRING, raf, now, clamp } from '../base';\n\ntype Cleanup = () => void;\n/** A pack primitive: wire one element, return a cleanup. */\ntype Effect = (el: HTMLElement, ctx: PackContext) => Cleanup | void;\n\nexport interface PackContext {\n root: HTMLElement;\n /** Index of the element among those with the same role (for staggering). */\n index: number;\n reduced: boolean;\n}\n\nconst anim = (el: Element, frames: Keyframe[], o: KeyframeAnimationOptions): Animation | null => {\n if (typeof (el as HTMLElement).animate !== 'function') return null;\n const k = motionScale();\n return (el as HTMLElement).animate(frames, { ...o, duration: ((o.duration as number) ?? 400) * k, delay: (o.delay ?? 0) * k });\n};\nconst on = (el: EventTarget, type: string, fn: (e: any) => void): Cleanup => {\n el.addEventListener(type, fn);\n return () => el.removeEventListener(type, fn);\n};\nconst io = (el: Element, cb: () => void): Cleanup => {\n if (typeof IntersectionObserver === 'undefined') return void cb() as unknown as Cleanup;\n const o = new IntersectionObserver((es) => es.some((e) => e.isIntersecting) && (o.disconnect(), cb()), { threshold: 0.15 });\n o.observe(el);\n return () => o.disconnect();\n};\n\n/** Count `el`'s number up from 0 when it enters the view (keeps prefix / suffix / decimals). */\nexport function countUp(el: HTMLElement, duration = 1200): Cleanup {\n const text = el.textContent || '';\n const m = /(-?[\\d,]*\\.?\\d+)/.exec(text);\n if (!m || prefersReducedMotion()) return () => {};\n const target = Number(m[1].replace(/,/g, ''));\n const dec = (m[1].split('.')[1] || '').length;\n const fmt = (v: number) => text.replace(m[1], v.toLocaleString('en-US', { minimumFractionDigits: dec, maximumFractionDigits: dec }));\n el.setAttribute('aria-label', text.trim());\n el.textContent = fmt(0);\n let stop = false;\n const off = io(el, () => {\n const t0 = now();\n const d = duration * motionScale() || 1;\n const step = () => {\n if (stop) return;\n const p = clamp((now() - t0) / d, 0, 1);\n el.textContent = fmt(target * (1 - Math.pow(1 - p, 3)));\n if (p < 1) raf(step);\n };\n raf(step);\n });\n return () => {\n stop = true;\n off();\n el.textContent = text;\n };\n}\n\n/**\n * Fly a copy of `from` (e.g. a product image) into `to` (the cart icon) along\n * an arc, then bump the target. Resolves when it lands. Instant under\n * reduced motion (only the bump's state change, no flight).\n */\nexport async function flyToCart(from: Element, to: Element, o: { duration?: number } = {}): Promise<void> {\n if (prefersReducedMotion() || typeof document === 'undefined') return;\n const a = from.getBoundingClientRect();\n const b = to.getBoundingClientRect();\n const ghost = from.cloneNode(true) as HTMLElement;\n ghost.setAttribute('aria-hidden', 'true');\n Object.assign(ghost.style, { position: 'fixed', left: `${a.left}px`, top: `${a.top}px`, width: `${a.width}px`, height: `${a.height}px`, margin: '0', zIndex: '2147483000', pointerEvents: 'none' });\n document.body.appendChild(ghost);\n const dx = b.left + b.width / 2 - (a.left + a.width / 2);\n const dy = b.top + b.height / 2 - (a.top + a.height / 2);\n const f = anim(ghost, [\n { transform: 'translate(0, 0) scale(1)', opacity: 1 },\n { transform: `translate(${dx * 0.5}px, ${dy * 0.5 - 80}px) scale(0.6)`, opacity: 0.9, offset: 0.5 },\n { transform: `translate(${dx}px, ${dy}px) scale(0.15)`, opacity: 0.4 },\n ], { duration: o.duration ?? 700, easing: 'cubic-bezier(0.5, 0, 0.5, 1)' });\n await f?.finished.catch(() => undefined);\n ghost.remove();\n anim(to, [{ transform: 'scale(1)' }, { transform: 'scale(1.3)' }, { transform: 'scale(1)' }], { duration: 380, easing: EASE_SPRING });\n}\n\nconst PRIMITIVES: Record<string, Effect> = {\n reveal: (el, c) => {\n if (c.reduced) return;\n el.style.opacity = '0';\n const off = io(el, () => {\n el.style.opacity = '';\n anim(el, [{ opacity: 0, transform: 'translateY(24px)' }, { opacity: 1, transform: 'none' }], { duration: 600, delay: Math.min(c.index, 8) * 70, easing: EASE_OUT, fill: 'backwards' });\n });\n return () => (off(), (el.style.opacity = ''));\n },\n lift: (el, c) => {\n if (c.reduced) return;\n const a = on(el, 'pointerenter', () => anim(el, [{ transform: 'none' }, { transform: 'translateY(-6px) scale(1.02)' }], { duration: 220, easing: EASE_OUT, fill: 'forwards' }));\n const b = on(el, 'pointerleave', () => anim(el, [{ transform: 'translateY(-6px) scale(1.02)' }, { transform: 'none' }], { duration: 260, easing: EASE_OUT, fill: 'forwards' }));\n return () => (a(), b());\n },\n press: (el, c) => (c.reduced ? undefined : on(el, 'pointerdown', () => anim(el, [{ transform: 'scale(1)' }, { transform: 'scale(0.94)' }, { transform: 'scale(1)' }], { duration: 260, easing: EASE_SPRING }))),\n 'count-up': (el) => countUp(el),\n pulse: (el, c) => {\n if (c.reduced) return;\n const a = anim(el, [{ boxShadow: '0 0 0 0 rgba(124, 92, 255, 0.55)' }, { boxShadow: '0 0 0 14px rgba(124, 92, 255, 0)' }], { duration: 1600, iterations: Infinity });\n return () => a?.cancel();\n },\n float: (el, c) => {\n if (c.reduced) return;\n const a = anim(el, [{ transform: 'translateY(0)' }, { transform: 'translateY(-8px)' }, { transform: 'translateY(0)' }], { duration: 3000, delay: c.index * 300, iterations: Infinity, easing: 'ease-in-out' });\n return () => a?.cancel();\n },\n shake: (el, c) => (c.reduced ? undefined : on(el, 'click', () => anim(el, [0, -8, 8, -6, 6, -3, 0].map((x) => ({ transform: `translateX(${x}px)` })), { duration: 420 }))),\n bump: (el, c) => (c.reduced ? undefined : on(el, 'usa:bump', () => anim(el, [{ transform: 'scale(1)' }, { transform: 'scale(1.25)' }, { transform: 'scale(1)' }], { duration: 360, easing: EASE_SPRING }))),\n 'fly-to-cart': (el, c) =>\n on(el, 'click', () => {\n const cart = c.root.querySelector('[data-role=\"cart\"]') || document.querySelector('[data-role=\"cart\"]');\n const item = el.closest('[data-role=\"product\"]')?.querySelector('img, [data-role=\"thumb\"]') || el;\n if (cart) void flyToCart(item, cart).then(() => cart.dispatchEvent(new CustomEvent('usa:added', { bubbles: true })));\n }),\n};\n\n/** The five effect packs: `data-role` → primitives. */\nexport const PACKS: Record<string, Record<string, string[]>> = {\n ecommerce: { product: ['reveal', 'lift'], 'add-to-cart': ['press', 'fly-to-cart'], cart: ['bump'], price: ['count-up'], badge: ['pulse'] },\n portfolio: { project: ['reveal', 'lift'], heading: ['reveal'], stat: ['count-up'], contact: ['press', 'pulse'] },\n dashboard: { card: ['reveal'], stat: ['count-up'], alert: ['pulse'], action: ['press'] },\n game: { button: ['press'], score: ['count-up', 'bump'], item: ['float'], hit: ['shake'], reward: ['pulse'] },\n landing: { hero: ['reveal'], feature: ['reveal', 'lift'], cta: ['press', 'pulse'], logo: ['float'], stat: ['count-up'] },\n};\n\nexport type PackName = keyof typeof PACKS;\n\n/**\n * Apply an effect pack to `root`: every descendant with a `data-role` the\n * pack knows gets its effects (staggered by index). Returns an undo function.\n * Reduced motion: only non-motion behaviour (e.g. the cart event) remains.\n *\n * @example\n * applyPack('ecommerce', document.querySelector('main'));\n * // <article data-role=\"product\">… <button data-role=\"add-to-cart\"> … <a data-role=\"cart\">\n */\nexport function applyPack(name: PackName | string, root: HTMLElement | Document = document): Cleanup {\n const pack = PACKS[name];\n if (!pack || typeof document === 'undefined') return () => {};\n const r = (root as Document).documentElement ? (root as Document).body : (root as HTMLElement);\n const reduced = prefersReducedMotion();\n const cleanups: Cleanup[] = [];\n for (const [role, fx] of Object.entries(pack)) {\n r.querySelectorAll<HTMLElement>(`[data-role=\"${role}\"]`).forEach((el, index) => {\n for (const f of fx) {\n const c = PRIMITIVES[f]?.(el, { root: r, index, reduced });\n if (c) cleanups.push(c);\n }\n });\n }\n return () => cleanups.splice(0).forEach((c) => c());\n}\n\n/** Primitive names a pack uses (for docs / tooling). */\nexport const PACK_PRIMITIVES = Object.keys(PRIMITIVES);\n","import { defineElement, type UsaElement } from '../base';\nimport { applyPack, PACKS } from './core';\n\n/**\n * `<usa-pack name=\"ecommerce\">` — applies an effect pack (`ecommerce` ·\n * `portfolio` · `dashboard` · `game` · `landing`) to its subtree:\n * descendants opt in with `data-role` (see `PACKS`). Re-applies when\n * `name` changes; undone on disconnect.\n */\nexport interface UsaPackElement extends UsaElement {\n readonly roles: string[];\n}\n\nexport function definePack(tag = 'usa-pack'): CustomElementConstructor | undefined {\n return defineElement(tag, (Base) =>\n class UsaPack extends Base {\n static get observedAttributes(): string[] {\n return ['name'];\n }\n get roles(): string[] {\n return Object.keys(PACKS[this.str('name', 'landing')] || {});\n }\n mount(): void {\n this.style.display ||= 'block';\n this.onCleanup(applyPack(this.str('name', 'landing'), this));\n }\n }\n );\n}\n","/**\n * motionary/components/packs — effect packs (v3.9).\n * Ready-made motion for e-commerce, portfolio, dashboard, game UI and\n * landing pages: mark elements with `data-role` and apply a pack with\n * `<usa-pack name=\"…\">` or `applyPack(name, root)`. Includes `flyToCart()`\n * and `countUp()`.\n */\nimport { definePack, type UsaPackElement } from './pack-el';\n\nexport { definePack };\nexport { applyPack, flyToCart, countUp, PACKS, PACK_PRIMITIVES } from './core';\nexport type { PackName, PackContext } from './core';\nexport type { UsaPackElement };\n\n/** Register every component of this category under its default tag. */\nexport function definePacksComponents(): void {\n definePack();\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n 'usa-pack': UsaPackElement;\n }\n}\n"],"names":["motionScale","prefersReducedMotion","now","clamp","raf","EASE_SPRING","EASE_OUT","defineElement"],"mappings":"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"}
1
+ {"version":3,"file":"packs.cjs","sources":["../../src/components/packs/core.ts","../../src/components/packs/pack-el.ts","../../src/components/packs/index.ts"],"sourcesContent":["import { prefersReducedMotion, motionScale, EASE_OUT, EASE_SPRING, raf, now, clamp } from '../base';\n\ntype Cleanup = () => void;\n/** A pack primitive: wire one element, return a cleanup. */\ntype Effect = (el: HTMLElement, ctx: PackContext) => Cleanup | void;\n\nexport interface PackContext {\n root: HTMLElement;\n /** Index of the element among those with the same role (for staggering). */\n index: number;\n reduced: boolean;\n}\n\nconst anim = (el: Element, frames: Keyframe[], o: KeyframeAnimationOptions): Animation | null => {\n if (typeof (el as HTMLElement).animate !== 'function') return null;\n const k = motionScale();\n return (el as HTMLElement).animate(frames, { ...o, duration: ((o.duration as number) ?? 400) * k, delay: (o.delay ?? 0) * k });\n};\nconst on = (el: EventTarget, type: string, fn: (e: any) => void): Cleanup => {\n el.addEventListener(type, fn);\n return () => el.removeEventListener(type, fn);\n};\nconst io = (el: Element, cb: () => void): Cleanup => {\n if (typeof IntersectionObserver === 'undefined') return void cb() as unknown as Cleanup;\n const o = new IntersectionObserver((es) => es.some((e) => e.isIntersecting) && (o.disconnect(), cb()), { threshold: 0.15 });\n o.observe(el);\n return () => o.disconnect();\n};\n\n/** Count `el`'s number up from 0 when it enters the view (keeps prefix / suffix / decimals). */\nexport function countUp(el: HTMLElement, duration = 1200): Cleanup {\n const text = el.textContent || '';\n const m = /(-?[\\d,]*\\.?\\d+)/.exec(text);\n if (!m || prefersReducedMotion()) return () => {};\n const target = Number(m[1].replace(/,/g, ''));\n const dec = (m[1].split('.')[1] || '').length;\n const fmt = (v: number) => text.replace(m[1], v.toLocaleString('en-US', { minimumFractionDigits: dec, maximumFractionDigits: dec }));\n el.setAttribute('aria-label', text.trim());\n el.textContent = fmt(0);\n let stop = false;\n const off = io(el, () => {\n const t0 = now();\n const d = duration * motionScale() || 1;\n const step = () => {\n if (stop) return;\n const p = clamp((now() - t0) / d, 0, 1);\n el.textContent = fmt(target * (1 - Math.pow(1 - p, 3)));\n if (p < 1) raf(step);\n };\n raf(step);\n });\n return () => {\n stop = true;\n off();\n el.textContent = text;\n };\n}\n\n/**\n * Fly a copy of `from` (e.g. a product image) into `to` (the cart icon) along\n * an arc, then bump the target. Resolves when it lands. Instant under\n * reduced motion (only the bump's state change, no flight).\n */\nexport async function flyToCart(from: Element, to: Element, o: { duration?: number } = {}): Promise<void> {\n if (prefersReducedMotion() || typeof document === 'undefined') return;\n const a = from.getBoundingClientRect();\n const b = to.getBoundingClientRect();\n const ghost = from.cloneNode(true) as HTMLElement;\n ghost.setAttribute('aria-hidden', 'true');\n Object.assign(ghost.style, { position: 'fixed', left: `${a.left}px`, top: `${a.top}px`, width: `${a.width}px`, height: `${a.height}px`, margin: '0', zIndex: '2147483000', pointerEvents: 'none' });\n document.body.appendChild(ghost);\n const dx = b.left + b.width / 2 - (a.left + a.width / 2);\n const dy = b.top + b.height / 2 - (a.top + a.height / 2);\n const f = anim(ghost, [\n { transform: 'translate(0, 0) scale(1)', opacity: 1 },\n { transform: `translate(${dx * 0.5}px, ${dy * 0.5 - 80}px) scale(0.6)`, opacity: 0.9, offset: 0.5 },\n { transform: `translate(${dx}px, ${dy}px) scale(0.15)`, opacity: 0.4 },\n ], { duration: o.duration ?? 700, easing: 'cubic-bezier(0.5, 0, 0.5, 1)' });\n await f?.finished.catch(() => undefined);\n ghost.remove();\n anim(to, [{ transform: 'scale(1)' }, { transform: 'scale(1.3)' }, { transform: 'scale(1)' }], { duration: 380, easing: EASE_SPRING });\n}\n\nconst PRIMITIVES: Record<string, Effect> = {\n reveal: (el, c) => {\n if (c.reduced) return;\n el.style.opacity = '0';\n const off = io(el, () => {\n el.style.opacity = '';\n anim(el, [{ opacity: 0, transform: 'translateY(24px)' }, { opacity: 1, transform: 'none' }], { duration: 600, delay: Math.min(c.index, 8) * 70, easing: EASE_OUT, fill: 'backwards' });\n });\n return () => (off(), (el.style.opacity = ''));\n },\n lift: (el, c) => {\n if (c.reduced) return;\n const a = on(el, 'pointerenter', () => anim(el, [{ transform: 'none' }, { transform: 'translateY(-6px) scale(1.02)' }], { duration: 220, easing: EASE_OUT, fill: 'forwards' }));\n const b = on(el, 'pointerleave', () => anim(el, [{ transform: 'translateY(-6px) scale(1.02)' }, { transform: 'none' }], { duration: 260, easing: EASE_OUT, fill: 'forwards' }));\n return () => (a(), b());\n },\n press: (el, c) => (c.reduced ? undefined : on(el, 'pointerdown', () => anim(el, [{ transform: 'scale(1)' }, { transform: 'scale(0.94)' }, { transform: 'scale(1)' }], { duration: 260, easing: EASE_SPRING }))),\n 'count-up': (el) => countUp(el),\n pulse: (el, c) => {\n if (c.reduced) return;\n const a = anim(el, [{ boxShadow: '0 0 0 0 rgba(124, 92, 255, 0.55)' }, { boxShadow: '0 0 0 14px rgba(124, 92, 255, 0)' }], { duration: 1600, iterations: Infinity });\n return () => a?.cancel();\n },\n float: (el, c) => {\n if (c.reduced) return;\n const a = anim(el, [{ transform: 'translateY(0)' }, { transform: 'translateY(-8px)' }, { transform: 'translateY(0)' }], { duration: 3000, delay: c.index * 300, iterations: Infinity, easing: 'ease-in-out' });\n return () => a?.cancel();\n },\n shake: (el, c) => (c.reduced ? undefined : on(el, 'click', () => anim(el, [0, -8, 8, -6, 6, -3, 0].map((x) => ({ transform: `translateX(${x}px)` })), { duration: 420 }))),\n bump: (el, c) => (c.reduced ? undefined : on(el, 'usa:bump', () => anim(el, [{ transform: 'scale(1)' }, { transform: 'scale(1.25)' }, { transform: 'scale(1)' }], { duration: 360, easing: EASE_SPRING }))),\n 'fly-to-cart': (el, c) =>\n on(el, 'click', () => {\n const cart = c.root.querySelector('[data-role=\"cart\"]') || document.querySelector('[data-role=\"cart\"]');\n const item = el.closest('[data-role=\"product\"]')?.querySelector('img, [data-role=\"thumb\"]') || el;\n if (cart) void flyToCart(item, cart).then(() => cart.dispatchEvent(new CustomEvent('usa:added', { bubbles: true })));\n }),\n};\n\n/** The five effect packs: `data-role` → primitives. */\nexport const PACKS: Record<string, Record<string, string[]>> = {\n ecommerce: { product: ['reveal', 'lift'], 'add-to-cart': ['press', 'fly-to-cart'], cart: ['bump'], price: ['count-up'], badge: ['pulse'] },\n portfolio: { project: ['reveal', 'lift'], heading: ['reveal'], stat: ['count-up'], contact: ['press', 'pulse'] },\n dashboard: { card: ['reveal'], stat: ['count-up'], alert: ['pulse'], action: ['press'] },\n game: { button: ['press'], score: ['count-up', 'bump'], item: ['float'], hit: ['shake'], reward: ['pulse'] },\n landing: { hero: ['reveal'], feature: ['reveal', 'lift'], cta: ['press', 'pulse'], logo: ['float'], stat: ['count-up'] },\n};\n\nexport type PackName = keyof typeof PACKS;\n\n/**\n * Apply an effect pack to `root`: every descendant with a `data-role` the\n * pack knows gets its effects (staggered by index). Returns an undo function.\n * Reduced motion: only non-motion behaviour (e.g. the cart event) remains.\n *\n * @example\n * applyPack('ecommerce', document.querySelector('main'));\n * // <article data-role=\"product\">… <button data-role=\"add-to-cart\"> … <a data-role=\"cart\">\n */\nexport function applyPack(name: PackName | string, root: HTMLElement | Document = document): Cleanup {\n const pack = PACKS[name];\n if (!pack || typeof document === 'undefined') return () => {};\n const r = (root as Document).documentElement ? (root as Document).body : (root as HTMLElement);\n const reduced = prefersReducedMotion();\n const cleanups: Cleanup[] = [];\n for (const [role, fx] of Object.entries(pack)) {\n r.querySelectorAll<HTMLElement>(`[data-role=\"${role}\"]`).forEach((el, index) => {\n for (const f of fx) {\n const c = PRIMITIVES[f]?.(el, { root: r, index, reduced });\n if (c) cleanups.push(c);\n }\n });\n }\n return () => cleanups.splice(0).forEach((c) => c());\n}\n\n/** Primitive names a pack uses (for docs / tooling). */\nexport const PACK_PRIMITIVES = Object.keys(PRIMITIVES);\n","import { defineElement, type UsaElement } from '../base';\nimport { applyPack, PACKS } from './core';\n\n/**\n * `<usa-pack name=\"ecommerce\">` — applies an effect pack (`ecommerce` ·\n * `portfolio` · `dashboard` · `game` · `landing`) to its subtree:\n * descendants opt in with `data-role` (see `PACKS`). Re-applies when\n * `name` changes; undone on disconnect.\n */\nexport interface UsaPackElement extends UsaElement {\n readonly roles: string[];\n}\n\nexport function definePack(tag = 'usa-pack'): CustomElementConstructor | undefined {\n return defineElement(tag, (Base) =>\n class UsaPack extends Base {\n static get observedAttributes(): string[] {\n return ['name'];\n }\n get roles(): string[] {\n return Object.keys(PACKS[this.str('name', 'landing')] || {});\n }\n mount(): void {\n this.style.display ||= 'block';\n this.onCleanup(applyPack(this.str('name', 'landing'), this));\n }\n }\n );\n}\n","/**\n * motionary/components/packs — effect packs (v3.9).\n * Ready-made motion for e-commerce, portfolio, dashboard, game UI and\n * landing pages: mark elements with `data-role` and apply a pack with\n * `<usa-pack name=\"…\">` or `applyPack(name, root)`. Includes `flyToCart()`\n * and `countUp()`.\n */\nimport { definePack, type UsaPackElement } from './pack-el';\n\nexport { definePack };\nexport { applyPack, flyToCart, countUp, PACKS, PACK_PRIMITIVES } from './core';\nexport type { PackName, PackContext } from './core';\nexport type { UsaPackElement };\n\n/** Register every component of this category under its default tag. */\nexport function definePacksComponents(): void {\n definePack();\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n 'usa-pack': UsaPackElement;\n }\n}\n"],"names":["motionScale","prefersReducedMotion","now","clamp","raf","EASE_SPRING","EASE_OUT","defineElement"],"mappings":"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"}
@@ -1,4 +1,4 @@
1
- import { p as prefersReducedMotion, q as now, m as motionScale, r as raf, D as EASE_OUT, k as clamp, E as EASE_SPRING, u as defineElement } from '../chunks/base-BnRyfuyM.js';
1
+ import { p as prefersReducedMotion, n as now, m as motionScale, r as raf, d as clamp, D as EASE_OUT, E as EASE_SPRING, f as defineElement } from '../chunks/base-BTev8qxg.js';
2
2
 
3
3
  const anim = (el, frames, o) => {
4
4
  if (typeof el.animate !== 'function')