@wix/motion 1.671.0 → 2.0.0-dp.20260305184410

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 (679) hide show
  1. package/README.md +26 -13
  2. package/dist/cjs/motion.js +2 -146
  3. package/dist/cjs/motion.js.map +1 -1
  4. package/dist/es/motion.js +941 -0
  5. package/dist/es/motion.js.map +1 -0
  6. package/dist/tsconfig.build.tsbuildinfo +1 -0
  7. package/dist/types/AnimationGroup.d.ts +5 -0
  8. package/dist/types/AnimationGroup.d.ts.map +1 -1
  9. package/dist/types/CustomAnimation.d.ts +2 -2
  10. package/dist/types/CustomAnimation.d.ts.map +1 -1
  11. package/dist/types/Sequence.d.ts +33 -0
  12. package/dist/types/Sequence.d.ts.map +1 -0
  13. package/dist/types/api/common.d.ts +111 -111
  14. package/dist/types/api/common.d.ts.map +1 -1
  15. package/dist/types/api/cssAnimations.d.ts.map +1 -1
  16. package/dist/types/api/prepare.d.ts.map +1 -1
  17. package/dist/types/api/registry.d.ts +4 -0
  18. package/dist/types/api/registry.d.ts.map +1 -0
  19. package/dist/types/api/webAnimations.d.ts.map +1 -1
  20. package/dist/types/easings.d.ts.map +1 -1
  21. package/dist/types/index.d.ts +3 -0
  22. package/dist/types/index.d.ts.map +1 -1
  23. package/dist/types/motion.d.ts +13 -4
  24. package/dist/types/motion.d.ts.map +1 -1
  25. package/dist/types/types.d.ts +43 -402
  26. package/dist/types/types.d.ts.map +1 -1
  27. package/dist/types/utils.d.ts +1 -72
  28. package/dist/types/utils.d.ts.map +1 -1
  29. package/package.json +54 -74
  30. package/dist/cjs/AnimationGroup.js +0 -106
  31. package/dist/cjs/AnimationGroup.js.map +0 -1
  32. package/dist/cjs/CustomAnimation.js +0 -190
  33. package/dist/cjs/CustomAnimation.js.map +0 -1
  34. package/dist/cjs/api/common.js +0 -145
  35. package/dist/cjs/api/common.js.map +0 -1
  36. package/dist/cjs/api/cssAnimations.js +0 -58
  37. package/dist/cjs/api/cssAnimations.js.map +0 -1
  38. package/dist/cjs/api/prepare.js +0 -20
  39. package/dist/cjs/api/prepare.js.map +0 -1
  40. package/dist/cjs/api/webAnimations.js +0 -155
  41. package/dist/cjs/api/webAnimations.js.map +0 -1
  42. package/dist/cjs/easings.js +0 -272
  43. package/dist/cjs/easings.js.map +0 -1
  44. package/dist/cjs/external-types.d.js +0 -2
  45. package/dist/cjs/external-types.d.js.map +0 -1
  46. package/dist/cjs/index.js +0 -16
  47. package/dist/cjs/index.js.map +0 -1
  48. package/dist/cjs/library/backgroundScroll/BgCloseUp.js +0 -95
  49. package/dist/cjs/library/backgroundScroll/BgCloseUp.js.map +0 -1
  50. package/dist/cjs/library/backgroundScroll/BgFade.js +0 -68
  51. package/dist/cjs/library/backgroundScroll/BgFade.js.map +0 -1
  52. package/dist/cjs/library/backgroundScroll/BgFadeBack.js +0 -94
  53. package/dist/cjs/library/backgroundScroll/BgFadeBack.js.map +0 -1
  54. package/dist/cjs/library/backgroundScroll/BgFake3D.js +0 -131
  55. package/dist/cjs/library/backgroundScroll/BgFake3D.js.map +0 -1
  56. package/dist/cjs/library/backgroundScroll/BgPan.js +0 -64
  57. package/dist/cjs/library/backgroundScroll/BgPan.js.map +0 -1
  58. package/dist/cjs/library/backgroundScroll/BgParallax.js +0 -62
  59. package/dist/cjs/library/backgroundScroll/BgParallax.js.map +0 -1
  60. package/dist/cjs/library/backgroundScroll/BgPullBack.js +0 -66
  61. package/dist/cjs/library/backgroundScroll/BgPullBack.js.map +0 -1
  62. package/dist/cjs/library/backgroundScroll/BgReveal.js +0 -28
  63. package/dist/cjs/library/backgroundScroll/BgReveal.js.map +0 -1
  64. package/dist/cjs/library/backgroundScroll/BgRotate.js +0 -51
  65. package/dist/cjs/library/backgroundScroll/BgRotate.js.map +0 -1
  66. package/dist/cjs/library/backgroundScroll/BgSkew.js +0 -63
  67. package/dist/cjs/library/backgroundScroll/BgSkew.js.map +0 -1
  68. package/dist/cjs/library/backgroundScroll/BgZoom.js +0 -163
  69. package/dist/cjs/library/backgroundScroll/BgZoom.js.map +0 -1
  70. package/dist/cjs/library/backgroundScroll/ImageParallax.js +0 -81
  71. package/dist/cjs/library/backgroundScroll/ImageParallax.js.map +0 -1
  72. package/dist/cjs/library/backgroundScroll/index.js +0 -32
  73. package/dist/cjs/library/backgroundScroll/index.js.map +0 -1
  74. package/dist/cjs/library/backgroundScroll/test/testUtils.js +0 -8
  75. package/dist/cjs/library/backgroundScroll/test/testUtils.js.map +0 -1
  76. package/dist/cjs/library/backgroundScroll/utils.js +0 -48
  77. package/dist/cjs/library/backgroundScroll/utils.js.map +0 -1
  78. package/dist/cjs/library/entrance/ArcIn.js +0 -110
  79. package/dist/cjs/library/entrance/ArcIn.js.map +0 -1
  80. package/dist/cjs/library/entrance/BlurIn.js +0 -56
  81. package/dist/cjs/library/entrance/BlurIn.js.map +0 -1
  82. package/dist/cjs/library/entrance/BounceIn.js +0 -143
  83. package/dist/cjs/library/entrance/BounceIn.js.map +0 -1
  84. package/dist/cjs/library/entrance/CircleIn.js +0 -75
  85. package/dist/cjs/library/entrance/CircleIn.js.map +0 -1
  86. package/dist/cjs/library/entrance/CurveIn.js +0 -80
  87. package/dist/cjs/library/entrance/CurveIn.js.map +0 -1
  88. package/dist/cjs/library/entrance/DropIn.js +0 -64
  89. package/dist/cjs/library/entrance/DropIn.js.map +0 -1
  90. package/dist/cjs/library/entrance/ExpandIn.js +0 -121
  91. package/dist/cjs/library/entrance/ExpandIn.js.map +0 -1
  92. package/dist/cjs/library/entrance/FadeIn.js +0 -27
  93. package/dist/cjs/library/entrance/FadeIn.js.map +0 -1
  94. package/dist/cjs/library/entrance/FlipIn.js +0 -107
  95. package/dist/cjs/library/entrance/FlipIn.js.map +0 -1
  96. package/dist/cjs/library/entrance/FloatIn.js +0 -68
  97. package/dist/cjs/library/entrance/FloatIn.js.map +0 -1
  98. package/dist/cjs/library/entrance/FoldIn.js +0 -134
  99. package/dist/cjs/library/entrance/FoldIn.js.map +0 -1
  100. package/dist/cjs/library/entrance/GlideIn.js +0 -89
  101. package/dist/cjs/library/entrance/GlideIn.js.map +0 -1
  102. package/dist/cjs/library/entrance/GlitchIn.js +0 -29
  103. package/dist/cjs/library/entrance/GlitchIn.js.map +0 -1
  104. package/dist/cjs/library/entrance/GrowIn.js +0 -66
  105. package/dist/cjs/library/entrance/GrowIn.js.map +0 -1
  106. package/dist/cjs/library/entrance/PunchIn.js +0 -178
  107. package/dist/cjs/library/entrance/PunchIn.js.map +0 -1
  108. package/dist/cjs/library/entrance/RevealIn.js +0 -72
  109. package/dist/cjs/library/entrance/RevealIn.js.map +0 -1
  110. package/dist/cjs/library/entrance/ShapeIn.js +0 -75
  111. package/dist/cjs/library/entrance/ShapeIn.js.map +0 -1
  112. package/dist/cjs/library/entrance/ShuttersIn.js +0 -48
  113. package/dist/cjs/library/entrance/ShuttersIn.js.map +0 -1
  114. package/dist/cjs/library/entrance/SlideIn.js +0 -140
  115. package/dist/cjs/library/entrance/SlideIn.js.map +0 -1
  116. package/dist/cjs/library/entrance/SpinIn.js +0 -65
  117. package/dist/cjs/library/entrance/SpinIn.js.map +0 -1
  118. package/dist/cjs/library/entrance/TiltIn.js +0 -102
  119. package/dist/cjs/library/entrance/TiltIn.js.map +0 -1
  120. package/dist/cjs/library/entrance/TurnIn.js +0 -85
  121. package/dist/cjs/library/entrance/TurnIn.js.map +0 -1
  122. package/dist/cjs/library/entrance/WinkIn.js +0 -115
  123. package/dist/cjs/library/entrance/WinkIn.js.map +0 -1
  124. package/dist/cjs/library/entrance/index.js +0 -54
  125. package/dist/cjs/library/entrance/index.js.map +0 -1
  126. package/dist/cjs/library/entrance/test/testUtils.js +0 -8
  127. package/dist/cjs/library/entrance/test/testUtils.js.map +0 -1
  128. package/dist/cjs/library/mouse/AiryMouse.js +0 -76
  129. package/dist/cjs/library/mouse/AiryMouse.js.map +0 -1
  130. package/dist/cjs/library/mouse/BlobMouse.js +0 -70
  131. package/dist/cjs/library/mouse/BlobMouse.js.map +0 -1
  132. package/dist/cjs/library/mouse/BlurMouse.js +0 -94
  133. package/dist/cjs/library/mouse/BlurMouse.js.map +0 -1
  134. package/dist/cjs/library/mouse/BounceMouse.js +0 -26
  135. package/dist/cjs/library/mouse/BounceMouse.js.map +0 -1
  136. package/dist/cjs/library/mouse/CustomMouse.js +0 -65
  137. package/dist/cjs/library/mouse/CustomMouse.js.map +0 -1
  138. package/dist/cjs/library/mouse/ScaleMouse.js +0 -98
  139. package/dist/cjs/library/mouse/ScaleMouse.js.map +0 -1
  140. package/dist/cjs/library/mouse/SkewMouse.js +0 -92
  141. package/dist/cjs/library/mouse/SkewMouse.js.map +0 -1
  142. package/dist/cjs/library/mouse/SpinMouse.js +0 -41
  143. package/dist/cjs/library/mouse/SpinMouse.js.map +0 -1
  144. package/dist/cjs/library/mouse/SwivelMouse.js +0 -85
  145. package/dist/cjs/library/mouse/SwivelMouse.js.map +0 -1
  146. package/dist/cjs/library/mouse/Tilt3DMouse.js +0 -65
  147. package/dist/cjs/library/mouse/Tilt3DMouse.js.map +0 -1
  148. package/dist/cjs/library/mouse/Track3DMouse.js +0 -87
  149. package/dist/cjs/library/mouse/Track3DMouse.js.map +0 -1
  150. package/dist/cjs/library/mouse/TrackMouse.js +0 -65
  151. package/dist/cjs/library/mouse/TrackMouse.js.map +0 -1
  152. package/dist/cjs/library/mouse/index.js +0 -32
  153. package/dist/cjs/library/mouse/index.js.map +0 -1
  154. package/dist/cjs/library/ongoing/Blink.js +0 -120
  155. package/dist/cjs/library/ongoing/Blink.js.map +0 -1
  156. package/dist/cjs/library/ongoing/Bounce.js +0 -92
  157. package/dist/cjs/library/ongoing/Bounce.js.map +0 -1
  158. package/dist/cjs/library/ongoing/Breathe.js +0 -124
  159. package/dist/cjs/library/ongoing/Breathe.js.map +0 -1
  160. package/dist/cjs/library/ongoing/Cross.js +0 -262
  161. package/dist/cjs/library/ongoing/Cross.js.map +0 -1
  162. package/dist/cjs/library/ongoing/DVD.js +0 -84
  163. package/dist/cjs/library/ongoing/DVD.js.map +0 -1
  164. package/dist/cjs/library/ongoing/Flash.js +0 -45
  165. package/dist/cjs/library/ongoing/Flash.js.map +0 -1
  166. package/dist/cjs/library/ongoing/Flip.js +0 -67
  167. package/dist/cjs/library/ongoing/Flip.js.map +0 -1
  168. package/dist/cjs/library/ongoing/Fold.js +0 -167
  169. package/dist/cjs/library/ongoing/Fold.js.map +0 -1
  170. package/dist/cjs/library/ongoing/Jello.js +0 -72
  171. package/dist/cjs/library/ongoing/Jello.js.map +0 -1
  172. package/dist/cjs/library/ongoing/Poke.js +0 -102
  173. package/dist/cjs/library/ongoing/Poke.js.map +0 -1
  174. package/dist/cjs/library/ongoing/Pulse.js +0 -75
  175. package/dist/cjs/library/ongoing/Pulse.js.map +0 -1
  176. package/dist/cjs/library/ongoing/Rubber.js +0 -92
  177. package/dist/cjs/library/ongoing/Rubber.js.map +0 -1
  178. package/dist/cjs/library/ongoing/Spin.js +0 -55
  179. package/dist/cjs/library/ongoing/Spin.js.map +0 -1
  180. package/dist/cjs/library/ongoing/Swing.js +0 -130
  181. package/dist/cjs/library/ongoing/Swing.js.map +0 -1
  182. package/dist/cjs/library/ongoing/Wiggle.js +0 -88
  183. package/dist/cjs/library/ongoing/Wiggle.js.map +0 -1
  184. package/dist/cjs/library/ongoing/index.js +0 -40
  185. package/dist/cjs/library/ongoing/index.js.map +0 -1
  186. package/dist/cjs/library/ongoing/test/testUtils.js +0 -8
  187. package/dist/cjs/library/ongoing/test/testUtils.js.map +0 -1
  188. package/dist/cjs/library/scroll/ArcScroll.js +0 -43
  189. package/dist/cjs/library/scroll/ArcScroll.js.map +0 -1
  190. package/dist/cjs/library/scroll/BlurScroll.js +0 -49
  191. package/dist/cjs/library/scroll/BlurScroll.js.map +0 -1
  192. package/dist/cjs/library/scroll/FadeScroll.js +0 -42
  193. package/dist/cjs/library/scroll/FadeScroll.js.map +0 -1
  194. package/dist/cjs/library/scroll/FlipScroll.js +0 -50
  195. package/dist/cjs/library/scroll/FlipScroll.js.map +0 -1
  196. package/dist/cjs/library/scroll/GrowScroll.js +0 -99
  197. package/dist/cjs/library/scroll/GrowScroll.js.map +0 -1
  198. package/dist/cjs/library/scroll/MoveScroll.js +0 -95
  199. package/dist/cjs/library/scroll/MoveScroll.js.map +0 -1
  200. package/dist/cjs/library/scroll/PanScroll.js +0 -77
  201. package/dist/cjs/library/scroll/PanScroll.js.map +0 -1
  202. package/dist/cjs/library/scroll/ParallaxScroll.js +0 -43
  203. package/dist/cjs/library/scroll/ParallaxScroll.js.map +0 -1
  204. package/dist/cjs/library/scroll/RevealScroll.js +0 -59
  205. package/dist/cjs/library/scroll/RevealScroll.js.map +0 -1
  206. package/dist/cjs/library/scroll/ShapeScroll.js +0 -114
  207. package/dist/cjs/library/scroll/ShapeScroll.js.map +0 -1
  208. package/dist/cjs/library/scroll/ShrinkScroll.js +0 -99
  209. package/dist/cjs/library/scroll/ShrinkScroll.js.map +0 -1
  210. package/dist/cjs/library/scroll/ShuttersScroll.js +0 -75
  211. package/dist/cjs/library/scroll/ShuttersScroll.js.map +0 -1
  212. package/dist/cjs/library/scroll/SkewPanScroll.js +0 -76
  213. package/dist/cjs/library/scroll/SkewPanScroll.js.map +0 -1
  214. package/dist/cjs/library/scroll/SlideScroll.js +0 -92
  215. package/dist/cjs/library/scroll/SlideScroll.js.map +0 -1
  216. package/dist/cjs/library/scroll/Spin3dScroll.js +0 -87
  217. package/dist/cjs/library/scroll/Spin3dScroll.js.map +0 -1
  218. package/dist/cjs/library/scroll/SpinScroll.js +0 -55
  219. package/dist/cjs/library/scroll/SpinScroll.js.map +0 -1
  220. package/dist/cjs/library/scroll/StretchScroll.js +0 -121
  221. package/dist/cjs/library/scroll/StretchScroll.js.map +0 -1
  222. package/dist/cjs/library/scroll/TiltScroll.js +0 -88
  223. package/dist/cjs/library/scroll/TiltScroll.js.map +0 -1
  224. package/dist/cjs/library/scroll/TurnScroll.js +0 -98
  225. package/dist/cjs/library/scroll/TurnScroll.js.map +0 -1
  226. package/dist/cjs/library/scroll/index.js +0 -46
  227. package/dist/cjs/library/scroll/index.js.map +0 -1
  228. package/dist/cjs/library/scroll/test/testUtils.js +0 -8
  229. package/dist/cjs/library/scroll/test/testUtils.js.map +0 -1
  230. package/dist/cjs/playground/animationMotionBgScroll.stories.js +0 -369
  231. package/dist/cjs/playground/animationMotionBgScroll.stories.js.map +0 -1
  232. package/dist/cjs/playground/animationsMotion.stories.js +0 -199
  233. package/dist/cjs/playground/animationsMotion.stories.js.map +0 -1
  234. package/dist/cjs/playground/animationsMotionMouse.stories.js +0 -266
  235. package/dist/cjs/playground/animationsMotionMouse.stories.js.map +0 -1
  236. package/dist/cjs/playground/animationsMotionOngoing.stories.js +0 -195
  237. package/dist/cjs/playground/animationsMotionOngoing.stories.js.map +0 -1
  238. package/dist/cjs/playground/animationsMotionScroll.stories.js +0 -270
  239. package/dist/cjs/playground/animationsMotionScroll.stories.js.map +0 -1
  240. package/dist/cjs/playground/controls.js +0 -334
  241. package/dist/cjs/playground/controls.js.map +0 -1
  242. package/dist/cjs/playground/mouse-parallax-components/plastic.jpeg +0 -0
  243. package/dist/cjs/playground/mouse-parallax-components/vector.svg +0 -19
  244. package/dist/cjs/playground/mouseComponent.js +0 -113
  245. package/dist/cjs/playground/mouseComponent.js.map +0 -1
  246. package/dist/cjs/playground/playground-common.js +0 -84
  247. package/dist/cjs/playground/playground-common.js.map +0 -1
  248. package/dist/cjs/playground/playground.module.scss +0 -381
  249. package/dist/cjs/test-types.d.js +0 -2
  250. package/dist/cjs/test-types.d.js.map +0 -1
  251. package/dist/cjs/types.js +0 -4
  252. package/dist/cjs/types.js.map +0 -1
  253. package/dist/cjs/utils.js +0 -338
  254. package/dist/cjs/utils.js.map +0 -1
  255. package/dist/esm/AnimationGroup.js +0 -100
  256. package/dist/esm/AnimationGroup.js.map +0 -1
  257. package/dist/esm/CustomAnimation.js +0 -184
  258. package/dist/esm/CustomAnimation.js.map +0 -1
  259. package/dist/esm/api/common.js +0 -132
  260. package/dist/esm/api/common.js.map +0 -1
  261. package/dist/esm/api/cssAnimations.js +0 -53
  262. package/dist/esm/api/cssAnimations.js.map +0 -1
  263. package/dist/esm/api/prepare.js +0 -16
  264. package/dist/esm/api/prepare.js.map +0 -1
  265. package/dist/esm/api/webAnimations.js +0 -152
  266. package/dist/esm/api/webAnimations.js.map +0 -1
  267. package/dist/esm/easings.js +0 -248
  268. package/dist/esm/easings.js.map +0 -1
  269. package/dist/esm/external-types.d.js +0 -2
  270. package/dist/esm/external-types.d.js.map +0 -1
  271. package/dist/esm/index.js +0 -3
  272. package/dist/esm/index.js.map +0 -1
  273. package/dist/esm/library/backgroundScroll/BgCloseUp.js +0 -91
  274. package/dist/esm/library/backgroundScroll/BgCloseUp.js.map +0 -1
  275. package/dist/esm/library/backgroundScroll/BgFade.js +0 -64
  276. package/dist/esm/library/backgroundScroll/BgFade.js.map +0 -1
  277. package/dist/esm/library/backgroundScroll/BgFadeBack.js +0 -90
  278. package/dist/esm/library/backgroundScroll/BgFadeBack.js.map +0 -1
  279. package/dist/esm/library/backgroundScroll/BgFake3D.js +0 -127
  280. package/dist/esm/library/backgroundScroll/BgFake3D.js.map +0 -1
  281. package/dist/esm/library/backgroundScroll/BgPan.js +0 -60
  282. package/dist/esm/library/backgroundScroll/BgPan.js.map +0 -1
  283. package/dist/esm/library/backgroundScroll/BgParallax.js +0 -58
  284. package/dist/esm/library/backgroundScroll/BgParallax.js.map +0 -1
  285. package/dist/esm/library/backgroundScroll/BgPullBack.js +0 -62
  286. package/dist/esm/library/backgroundScroll/BgPullBack.js.map +0 -1
  287. package/dist/esm/library/backgroundScroll/BgReveal.js +0 -21
  288. package/dist/esm/library/backgroundScroll/BgReveal.js.map +0 -1
  289. package/dist/esm/library/backgroundScroll/BgRotate.js +0 -48
  290. package/dist/esm/library/backgroundScroll/BgRotate.js.map +0 -1
  291. package/dist/esm/library/backgroundScroll/BgSkew.js +0 -59
  292. package/dist/esm/library/backgroundScroll/BgSkew.js.map +0 -1
  293. package/dist/esm/library/backgroundScroll/BgZoom.js +0 -159
  294. package/dist/esm/library/backgroundScroll/BgZoom.js.map +0 -1
  295. package/dist/esm/library/backgroundScroll/ImageParallax.js +0 -77
  296. package/dist/esm/library/backgroundScroll/ImageParallax.js.map +0 -1
  297. package/dist/esm/library/backgroundScroll/index.js +0 -27
  298. package/dist/esm/library/backgroundScroll/index.js.map +0 -1
  299. package/dist/esm/library/backgroundScroll/test/testUtils.js +0 -4
  300. package/dist/esm/library/backgroundScroll/test/testUtils.js.map +0 -1
  301. package/dist/esm/library/backgroundScroll/utils.js +0 -42
  302. package/dist/esm/library/backgroundScroll/utils.js.map +0 -1
  303. package/dist/esm/library/entrance/ArcIn.js +0 -106
  304. package/dist/esm/library/entrance/ArcIn.js.map +0 -1
  305. package/dist/esm/library/entrance/BlurIn.js +0 -53
  306. package/dist/esm/library/entrance/BlurIn.js.map +0 -1
  307. package/dist/esm/library/entrance/BounceIn.js +0 -143
  308. package/dist/esm/library/entrance/BounceIn.js.map +0 -1
  309. package/dist/esm/library/entrance/CircleIn.js +0 -71
  310. package/dist/esm/library/entrance/CircleIn.js.map +0 -1
  311. package/dist/esm/library/entrance/CurveIn.js +0 -76
  312. package/dist/esm/library/entrance/CurveIn.js.map +0 -1
  313. package/dist/esm/library/entrance/DropIn.js +0 -61
  314. package/dist/esm/library/entrance/DropIn.js.map +0 -1
  315. package/dist/esm/library/entrance/ExpandIn.js +0 -117
  316. package/dist/esm/library/entrance/ExpandIn.js.map +0 -1
  317. package/dist/esm/library/entrance/FadeIn.js +0 -21
  318. package/dist/esm/library/entrance/FadeIn.js.map +0 -1
  319. package/dist/esm/library/entrance/FlipIn.js +0 -100
  320. package/dist/esm/library/entrance/FlipIn.js.map +0 -1
  321. package/dist/esm/library/entrance/FloatIn.js +0 -65
  322. package/dist/esm/library/entrance/FloatIn.js.map +0 -1
  323. package/dist/esm/library/entrance/FoldIn.js +0 -127
  324. package/dist/esm/library/entrance/FoldIn.js.map +0 -1
  325. package/dist/esm/library/entrance/GlideIn.js +0 -85
  326. package/dist/esm/library/entrance/GlideIn.js.map +0 -1
  327. package/dist/esm/library/entrance/GlitchIn.js +0 -22
  328. package/dist/esm/library/entrance/GlitchIn.js.map +0 -1
  329. package/dist/esm/library/entrance/GrowIn.js +0 -63
  330. package/dist/esm/library/entrance/GrowIn.js.map +0 -1
  331. package/dist/esm/library/entrance/PunchIn.js +0 -175
  332. package/dist/esm/library/entrance/PunchIn.js.map +0 -1
  333. package/dist/esm/library/entrance/RevealIn.js +0 -65
  334. package/dist/esm/library/entrance/RevealIn.js.map +0 -1
  335. package/dist/esm/library/entrance/ShapeIn.js +0 -72
  336. package/dist/esm/library/entrance/ShapeIn.js.map +0 -1
  337. package/dist/esm/library/entrance/ShuttersIn.js +0 -45
  338. package/dist/esm/library/entrance/ShuttersIn.js.map +0 -1
  339. package/dist/esm/library/entrance/SlideIn.js +0 -133
  340. package/dist/esm/library/entrance/SlideIn.js.map +0 -1
  341. package/dist/esm/library/entrance/SpinIn.js +0 -62
  342. package/dist/esm/library/entrance/SpinIn.js.map +0 -1
  343. package/dist/esm/library/entrance/TiltIn.js +0 -98
  344. package/dist/esm/library/entrance/TiltIn.js.map +0 -1
  345. package/dist/esm/library/entrance/TurnIn.js +0 -82
  346. package/dist/esm/library/entrance/TurnIn.js.map +0 -1
  347. package/dist/esm/library/entrance/WinkIn.js +0 -108
  348. package/dist/esm/library/entrance/WinkIn.js.map +0 -1
  349. package/dist/esm/library/entrance/index.js +0 -49
  350. package/dist/esm/library/entrance/index.js.map +0 -1
  351. package/dist/esm/library/entrance/test/testUtils.js +0 -4
  352. package/dist/esm/library/entrance/test/testUtils.js.map +0 -1
  353. package/dist/esm/library/mouse/AiryMouse.js +0 -73
  354. package/dist/esm/library/mouse/AiryMouse.js.map +0 -1
  355. package/dist/esm/library/mouse/BlobMouse.js +0 -67
  356. package/dist/esm/library/mouse/BlobMouse.js.map +0 -1
  357. package/dist/esm/library/mouse/BlurMouse.js +0 -91
  358. package/dist/esm/library/mouse/BlurMouse.js.map +0 -1
  359. package/dist/esm/library/mouse/BounceMouse.js +0 -21
  360. package/dist/esm/library/mouse/BounceMouse.js.map +0 -1
  361. package/dist/esm/library/mouse/CustomMouse.js +0 -59
  362. package/dist/esm/library/mouse/CustomMouse.js.map +0 -1
  363. package/dist/esm/library/mouse/ScaleMouse.js +0 -95
  364. package/dist/esm/library/mouse/ScaleMouse.js.map +0 -1
  365. package/dist/esm/library/mouse/SkewMouse.js +0 -89
  366. package/dist/esm/library/mouse/SkewMouse.js.map +0 -1
  367. package/dist/esm/library/mouse/SpinMouse.js +0 -38
  368. package/dist/esm/library/mouse/SpinMouse.js.map +0 -1
  369. package/dist/esm/library/mouse/SwivelMouse.js +0 -82
  370. package/dist/esm/library/mouse/SwivelMouse.js.map +0 -1
  371. package/dist/esm/library/mouse/Tilt3DMouse.js +0 -62
  372. package/dist/esm/library/mouse/Tilt3DMouse.js.map +0 -1
  373. package/dist/esm/library/mouse/Track3DMouse.js +0 -84
  374. package/dist/esm/library/mouse/Track3DMouse.js.map +0 -1
  375. package/dist/esm/library/mouse/TrackMouse.js +0 -62
  376. package/dist/esm/library/mouse/TrackMouse.js.map +0 -1
  377. package/dist/esm/library/mouse/index.js +0 -27
  378. package/dist/esm/library/mouse/index.js.map +0 -1
  379. package/dist/esm/library/ongoing/Blink.js +0 -115
  380. package/dist/esm/library/ongoing/Blink.js.map +0 -1
  381. package/dist/esm/library/ongoing/Bounce.js +0 -92
  382. package/dist/esm/library/ongoing/Bounce.js.map +0 -1
  383. package/dist/esm/library/ongoing/Breathe.js +0 -122
  384. package/dist/esm/library/ongoing/Breathe.js.map +0 -1
  385. package/dist/esm/library/ongoing/Cross.js +0 -273
  386. package/dist/esm/library/ongoing/Cross.js.map +0 -1
  387. package/dist/esm/library/ongoing/DVD.js +0 -79
  388. package/dist/esm/library/ongoing/DVD.js.map +0 -1
  389. package/dist/esm/library/ongoing/Flash.js +0 -42
  390. package/dist/esm/library/ongoing/Flash.js.map +0 -1
  391. package/dist/esm/library/ongoing/Flip.js +0 -64
  392. package/dist/esm/library/ongoing/Flip.js.map +0 -1
  393. package/dist/esm/library/ongoing/Fold.js +0 -165
  394. package/dist/esm/library/ongoing/Fold.js.map +0 -1
  395. package/dist/esm/library/ongoing/Jello.js +0 -70
  396. package/dist/esm/library/ongoing/Jello.js.map +0 -1
  397. package/dist/esm/library/ongoing/Poke.js +0 -100
  398. package/dist/esm/library/ongoing/Poke.js.map +0 -1
  399. package/dist/esm/library/ongoing/Pulse.js +0 -73
  400. package/dist/esm/library/ongoing/Pulse.js.map +0 -1
  401. package/dist/esm/library/ongoing/Rubber.js +0 -90
  402. package/dist/esm/library/ongoing/Rubber.js.map +0 -1
  403. package/dist/esm/library/ongoing/Spin.js +0 -52
  404. package/dist/esm/library/ongoing/Spin.js.map +0 -1
  405. package/dist/esm/library/ongoing/Swing.js +0 -128
  406. package/dist/esm/library/ongoing/Swing.js.map +0 -1
  407. package/dist/esm/library/ongoing/Wiggle.js +0 -86
  408. package/dist/esm/library/ongoing/Wiggle.js.map +0 -1
  409. package/dist/esm/library/ongoing/index.js +0 -33
  410. package/dist/esm/library/ongoing/index.js.map +0 -1
  411. package/dist/esm/library/ongoing/test/testUtils.js +0 -4
  412. package/dist/esm/library/ongoing/test/testUtils.js.map +0 -1
  413. package/dist/esm/library/scroll/ArcScroll.js +0 -40
  414. package/dist/esm/library/scroll/ArcScroll.js.map +0 -1
  415. package/dist/esm/library/scroll/BlurScroll.js +0 -46
  416. package/dist/esm/library/scroll/BlurScroll.js.map +0 -1
  417. package/dist/esm/library/scroll/FadeScroll.js +0 -39
  418. package/dist/esm/library/scroll/FadeScroll.js.map +0 -1
  419. package/dist/esm/library/scroll/FlipScroll.js +0 -47
  420. package/dist/esm/library/scroll/FlipScroll.js.map +0 -1
  421. package/dist/esm/library/scroll/GrowScroll.js +0 -96
  422. package/dist/esm/library/scroll/GrowScroll.js.map +0 -1
  423. package/dist/esm/library/scroll/MoveScroll.js +0 -92
  424. package/dist/esm/library/scroll/MoveScroll.js.map +0 -1
  425. package/dist/esm/library/scroll/PanScroll.js +0 -73
  426. package/dist/esm/library/scroll/PanScroll.js.map +0 -1
  427. package/dist/esm/library/scroll/ParallaxScroll.js +0 -40
  428. package/dist/esm/library/scroll/ParallaxScroll.js.map +0 -1
  429. package/dist/esm/library/scroll/RevealScroll.js +0 -52
  430. package/dist/esm/library/scroll/RevealScroll.js.map +0 -1
  431. package/dist/esm/library/scroll/ShapeScroll.js +0 -111
  432. package/dist/esm/library/scroll/ShapeScroll.js.map +0 -1
  433. package/dist/esm/library/scroll/ShrinkScroll.js +0 -96
  434. package/dist/esm/library/scroll/ShrinkScroll.js.map +0 -1
  435. package/dist/esm/library/scroll/ShuttersScroll.js +0 -72
  436. package/dist/esm/library/scroll/ShuttersScroll.js.map +0 -1
  437. package/dist/esm/library/scroll/SkewPanScroll.js +0 -72
  438. package/dist/esm/library/scroll/SkewPanScroll.js.map +0 -1
  439. package/dist/esm/library/scroll/SlideScroll.js +0 -88
  440. package/dist/esm/library/scroll/SlideScroll.js.map +0 -1
  441. package/dist/esm/library/scroll/Spin3dScroll.js +0 -84
  442. package/dist/esm/library/scroll/Spin3dScroll.js.map +0 -1
  443. package/dist/esm/library/scroll/SpinScroll.js +0 -52
  444. package/dist/esm/library/scroll/SpinScroll.js.map +0 -1
  445. package/dist/esm/library/scroll/StretchScroll.js +0 -118
  446. package/dist/esm/library/scroll/StretchScroll.js.map +0 -1
  447. package/dist/esm/library/scroll/TiltScroll.js +0 -85
  448. package/dist/esm/library/scroll/TiltScroll.js.map +0 -1
  449. package/dist/esm/library/scroll/TurnScroll.js +0 -94
  450. package/dist/esm/library/scroll/TurnScroll.js.map +0 -1
  451. package/dist/esm/library/scroll/index.js +0 -41
  452. package/dist/esm/library/scroll/index.js.map +0 -1
  453. package/dist/esm/library/scroll/test/testUtils.js +0 -4
  454. package/dist/esm/library/scroll/test/testUtils.js.map +0 -1
  455. package/dist/esm/motion.js +0 -142
  456. package/dist/esm/motion.js.map +0 -1
  457. package/dist/esm/playground/animationMotionBgScroll.stories.js +0 -284
  458. package/dist/esm/playground/animationMotionBgScroll.stories.js.map +0 -1
  459. package/dist/esm/playground/animationsMotion.stories.js +0 -132
  460. package/dist/esm/playground/animationsMotion.stories.js.map +0 -1
  461. package/dist/esm/playground/animationsMotionMouse.stories.js +0 -187
  462. package/dist/esm/playground/animationsMotionMouse.stories.js.map +0 -1
  463. package/dist/esm/playground/animationsMotionOngoing.stories.js +0 -128
  464. package/dist/esm/playground/animationsMotionOngoing.stories.js.map +0 -1
  465. package/dist/esm/playground/animationsMotionScroll.stories.js +0 -198
  466. package/dist/esm/playground/animationsMotionScroll.stories.js.map +0 -1
  467. package/dist/esm/playground/controls.js +0 -168
  468. package/dist/esm/playground/controls.js.map +0 -1
  469. package/dist/esm/playground/mouse-parallax-components/plastic.jpeg +0 -0
  470. package/dist/esm/playground/mouse-parallax-components/vector.svg +0 -19
  471. package/dist/esm/playground/mouseComponent.js +0 -61
  472. package/dist/esm/playground/mouseComponent.js.map +0 -1
  473. package/dist/esm/playground/playground-common.js +0 -91
  474. package/dist/esm/playground/playground-common.js.map +0 -1
  475. package/dist/esm/playground/playground.module.scss +0 -381
  476. package/dist/esm/test-types.d.js +0 -2
  477. package/dist/esm/test-types.d.js.map +0 -1
  478. package/dist/esm/types.js +0 -2
  479. package/dist/esm/types.js.map +0 -1
  480. package/dist/esm/utils.js +0 -361
  481. package/dist/esm/utils.js.map +0 -1
  482. package/dist/types/library/backgroundScroll/BgCloseUp.d.ts +0 -131
  483. package/dist/types/library/backgroundScroll/BgCloseUp.d.ts.map +0 -1
  484. package/dist/types/library/backgroundScroll/BgFade.d.ts +0 -71
  485. package/dist/types/library/backgroundScroll/BgFade.d.ts.map +0 -1
  486. package/dist/types/library/backgroundScroll/BgFadeBack.d.ts +0 -133
  487. package/dist/types/library/backgroundScroll/BgFadeBack.d.ts.map +0 -1
  488. package/dist/types/library/backgroundScroll/BgFake3D.d.ts +0 -130
  489. package/dist/types/library/backgroundScroll/BgFake3D.d.ts.map +0 -1
  490. package/dist/types/library/backgroundScroll/BgPan.d.ts +0 -68
  491. package/dist/types/library/backgroundScroll/BgPan.d.ts.map +0 -1
  492. package/dist/types/library/backgroundScroll/BgParallax.d.ts +0 -68
  493. package/dist/types/library/backgroundScroll/BgParallax.d.ts.map +0 -1
  494. package/dist/types/library/backgroundScroll/BgPullBack.d.ts +0 -68
  495. package/dist/types/library/backgroundScroll/BgPullBack.d.ts.map +0 -1
  496. package/dist/types/library/backgroundScroll/BgReveal.d.ts +0 -8
  497. package/dist/types/library/backgroundScroll/BgReveal.d.ts.map +0 -1
  498. package/dist/types/library/backgroundScroll/BgRotate.d.ts +0 -53
  499. package/dist/types/library/backgroundScroll/BgRotate.d.ts.map +0 -1
  500. package/dist/types/library/backgroundScroll/BgSkew.d.ts +0 -68
  501. package/dist/types/library/backgroundScroll/BgSkew.d.ts.map +0 -1
  502. package/dist/types/library/backgroundScroll/BgZoom.d.ts +0 -8
  503. package/dist/types/library/backgroundScroll/BgZoom.d.ts.map +0 -1
  504. package/dist/types/library/backgroundScroll/ImageParallax.d.ts +0 -69
  505. package/dist/types/library/backgroundScroll/ImageParallax.d.ts.map +0 -1
  506. package/dist/types/library/backgroundScroll/index.d.ts +0 -3
  507. package/dist/types/library/backgroundScroll/index.d.ts.map +0 -1
  508. package/dist/types/library/backgroundScroll/test/testUtils.d.ts +0 -3
  509. package/dist/types/library/backgroundScroll/test/testUtils.d.ts.map +0 -1
  510. package/dist/types/library/backgroundScroll/utils.d.ts +0 -10
  511. package/dist/types/library/backgroundScroll/utils.d.ts.map +0 -1
  512. package/dist/types/library/entrance/ArcIn.d.ts +0 -102
  513. package/dist/types/library/entrance/ArcIn.d.ts.map +0 -1
  514. package/dist/types/library/entrance/BlurIn.d.ts +0 -91
  515. package/dist/types/library/entrance/BlurIn.d.ts.map +0 -1
  516. package/dist/types/library/entrance/BounceIn.d.ts +0 -111
  517. package/dist/types/library/entrance/BounceIn.d.ts.map +0 -1
  518. package/dist/types/library/entrance/CircleIn.d.ts +0 -122
  519. package/dist/types/library/entrance/CircleIn.d.ts.map +0 -1
  520. package/dist/types/library/entrance/CurveIn.d.ts +0 -74
  521. package/dist/types/library/entrance/CurveIn.d.ts.map +0 -1
  522. package/dist/types/library/entrance/DropIn.d.ts +0 -97
  523. package/dist/types/library/entrance/DropIn.d.ts.map +0 -1
  524. package/dist/types/library/entrance/ExpandIn.d.ts +0 -102
  525. package/dist/types/library/entrance/ExpandIn.d.ts.map +0 -1
  526. package/dist/types/library/entrance/FadeIn.d.ts +0 -47
  527. package/dist/types/library/entrance/FadeIn.d.ts.map +0 -1
  528. package/dist/types/library/entrance/FlipIn.d.ts +0 -100
  529. package/dist/types/library/entrance/FlipIn.d.ts.map +0 -1
  530. package/dist/types/library/entrance/FloatIn.d.ts +0 -73
  531. package/dist/types/library/entrance/FloatIn.d.ts.map +0 -1
  532. package/dist/types/library/entrance/FoldIn.d.ts +0 -104
  533. package/dist/types/library/entrance/FoldIn.d.ts.map +0 -1
  534. package/dist/types/library/entrance/GlideIn.d.ts +0 -74
  535. package/dist/types/library/entrance/GlideIn.d.ts.map +0 -1
  536. package/dist/types/library/entrance/GlitchIn.d.ts +0 -73
  537. package/dist/types/library/entrance/GlitchIn.d.ts.map +0 -1
  538. package/dist/types/library/entrance/GrowIn.d.ts +0 -101
  539. package/dist/types/library/entrance/GrowIn.d.ts.map +0 -1
  540. package/dist/types/library/entrance/PunchIn.d.ts +0 -106
  541. package/dist/types/library/entrance/PunchIn.d.ts.map +0 -1
  542. package/dist/types/library/entrance/RevealIn.d.ts +0 -72
  543. package/dist/types/library/entrance/RevealIn.d.ts.map +0 -1
  544. package/dist/types/library/entrance/ShapeIn.d.ts +0 -99
  545. package/dist/types/library/entrance/ShapeIn.d.ts.map +0 -1
  546. package/dist/types/library/entrance/ShuttersIn.d.ts +0 -73
  547. package/dist/types/library/entrance/ShuttersIn.d.ts.map +0 -1
  548. package/dist/types/library/entrance/SlideIn.d.ts +0 -66
  549. package/dist/types/library/entrance/SlideIn.d.ts.map +0 -1
  550. package/dist/types/library/entrance/SpinIn.d.ts +0 -103
  551. package/dist/types/library/entrance/SpinIn.d.ts.map +0 -1
  552. package/dist/types/library/entrance/TiltIn.d.ts +0 -162
  553. package/dist/types/library/entrance/TiltIn.d.ts.map +0 -1
  554. package/dist/types/library/entrance/TurnIn.d.ts +0 -101
  555. package/dist/types/library/entrance/TurnIn.d.ts.map +0 -1
  556. package/dist/types/library/entrance/WinkIn.d.ts +0 -154
  557. package/dist/types/library/entrance/WinkIn.d.ts.map +0 -1
  558. package/dist/types/library/entrance/index.d.ts +0 -3
  559. package/dist/types/library/entrance/index.d.ts.map +0 -1
  560. package/dist/types/library/entrance/test/testUtils.d.ts +0 -3
  561. package/dist/types/library/entrance/test/testUtils.d.ts.map +0 -1
  562. package/dist/types/library/mouse/AiryMouse.d.ts +0 -9
  563. package/dist/types/library/mouse/AiryMouse.d.ts.map +0 -1
  564. package/dist/types/library/mouse/BlobMouse.d.ts +0 -9
  565. package/dist/types/library/mouse/BlobMouse.d.ts.map +0 -1
  566. package/dist/types/library/mouse/BlurMouse.d.ts +0 -9
  567. package/dist/types/library/mouse/BlurMouse.d.ts.map +0 -1
  568. package/dist/types/library/mouse/BounceMouse.d.ts +0 -11
  569. package/dist/types/library/mouse/BounceMouse.d.ts.map +0 -1
  570. package/dist/types/library/mouse/CustomMouse.d.ts +0 -13
  571. package/dist/types/library/mouse/CustomMouse.d.ts.map +0 -1
  572. package/dist/types/library/mouse/ScaleMouse.d.ts +0 -9
  573. package/dist/types/library/mouse/ScaleMouse.d.ts.map +0 -1
  574. package/dist/types/library/mouse/SkewMouse.d.ts +0 -9
  575. package/dist/types/library/mouse/SkewMouse.d.ts.map +0 -1
  576. package/dist/types/library/mouse/SpinMouse.d.ts +0 -9
  577. package/dist/types/library/mouse/SpinMouse.d.ts.map +0 -1
  578. package/dist/types/library/mouse/SwivelMouse.d.ts +0 -9
  579. package/dist/types/library/mouse/SwivelMouse.d.ts.map +0 -1
  580. package/dist/types/library/mouse/Tilt3DMouse.d.ts +0 -9
  581. package/dist/types/library/mouse/Tilt3DMouse.d.ts.map +0 -1
  582. package/dist/types/library/mouse/Track3DMouse.d.ts +0 -9
  583. package/dist/types/library/mouse/Track3DMouse.d.ts.map +0 -1
  584. package/dist/types/library/mouse/TrackMouse.d.ts +0 -9
  585. package/dist/types/library/mouse/TrackMouse.d.ts.map +0 -1
  586. package/dist/types/library/mouse/index.d.ts +0 -3
  587. package/dist/types/library/mouse/index.d.ts.map +0 -1
  588. package/dist/types/library/ongoing/Blink.d.ts +0 -19
  589. package/dist/types/library/ongoing/Blink.d.ts.map +0 -1
  590. package/dist/types/library/ongoing/Bounce.d.ts +0 -61
  591. package/dist/types/library/ongoing/Bounce.d.ts.map +0 -1
  592. package/dist/types/library/ongoing/Breathe.d.ts +0 -65
  593. package/dist/types/library/ongoing/Breathe.d.ts.map +0 -1
  594. package/dist/types/library/ongoing/Cross.d.ts +0 -34
  595. package/dist/types/library/ongoing/Cross.d.ts.map +0 -1
  596. package/dist/types/library/ongoing/DVD.d.ts +0 -45
  597. package/dist/types/library/ongoing/DVD.d.ts.map +0 -1
  598. package/dist/types/library/ongoing/Flash.d.ts +0 -63
  599. package/dist/types/library/ongoing/Flash.d.ts.map +0 -1
  600. package/dist/types/library/ongoing/Flip.d.ts +0 -71
  601. package/dist/types/library/ongoing/Flip.d.ts.map +0 -1
  602. package/dist/types/library/ongoing/Fold.d.ts +0 -65
  603. package/dist/types/library/ongoing/Fold.d.ts.map +0 -1
  604. package/dist/types/library/ongoing/Jello.d.ts +0 -55
  605. package/dist/types/library/ongoing/Jello.d.ts.map +0 -1
  606. package/dist/types/library/ongoing/Poke.d.ts +0 -55
  607. package/dist/types/library/ongoing/Poke.d.ts.map +0 -1
  608. package/dist/types/library/ongoing/Pulse.d.ts +0 -55
  609. package/dist/types/library/ongoing/Pulse.d.ts.map +0 -1
  610. package/dist/types/library/ongoing/Rubber.d.ts +0 -55
  611. package/dist/types/library/ongoing/Rubber.d.ts.map +0 -1
  612. package/dist/types/library/ongoing/Spin.d.ts +0 -69
  613. package/dist/types/library/ongoing/Spin.d.ts.map +0 -1
  614. package/dist/types/library/ongoing/Swing.d.ts +0 -65
  615. package/dist/types/library/ongoing/Swing.d.ts.map +0 -1
  616. package/dist/types/library/ongoing/Wiggle.d.ts +0 -55
  617. package/dist/types/library/ongoing/Wiggle.d.ts.map +0 -1
  618. package/dist/types/library/ongoing/index.d.ts +0 -3
  619. package/dist/types/library/ongoing/index.d.ts.map +0 -1
  620. package/dist/types/library/ongoing/test/testUtils.d.ts +0 -3
  621. package/dist/types/library/ongoing/test/testUtils.d.ts.map +0 -1
  622. package/dist/types/library/scroll/ArcScroll.d.ts +0 -57
  623. package/dist/types/library/scroll/ArcScroll.d.ts.map +0 -1
  624. package/dist/types/library/scroll/BlurScroll.d.ts +0 -59
  625. package/dist/types/library/scroll/BlurScroll.d.ts.map +0 -1
  626. package/dist/types/library/scroll/FadeScroll.d.ts +0 -57
  627. package/dist/types/library/scroll/FadeScroll.d.ts.map +0 -1
  628. package/dist/types/library/scroll/FlipScroll.d.ts +0 -57
  629. package/dist/types/library/scroll/FlipScroll.d.ts.map +0 -1
  630. package/dist/types/library/scroll/GrowScroll.d.ts +0 -69
  631. package/dist/types/library/scroll/GrowScroll.d.ts.map +0 -1
  632. package/dist/types/library/scroll/MoveScroll.d.ts +0 -65
  633. package/dist/types/library/scroll/MoveScroll.d.ts.map +0 -1
  634. package/dist/types/library/scroll/PanScroll.d.ts +0 -58
  635. package/dist/types/library/scroll/PanScroll.d.ts.map +0 -1
  636. package/dist/types/library/scroll/ParallaxScroll.d.ts +0 -59
  637. package/dist/types/library/scroll/ParallaxScroll.d.ts.map +0 -1
  638. package/dist/types/library/scroll/RevealScroll.d.ts +0 -58
  639. package/dist/types/library/scroll/RevealScroll.d.ts.map +0 -1
  640. package/dist/types/library/scroll/ShapeScroll.d.ts +0 -65
  641. package/dist/types/library/scroll/ShapeScroll.d.ts.map +0 -1
  642. package/dist/types/library/scroll/ShrinkScroll.d.ts +0 -69
  643. package/dist/types/library/scroll/ShrinkScroll.d.ts.map +0 -1
  644. package/dist/types/library/scroll/ShuttersScroll.d.ts +0 -61
  645. package/dist/types/library/scroll/ShuttersScroll.d.ts.map +0 -1
  646. package/dist/types/library/scroll/SkewPanScroll.d.ts +0 -62
  647. package/dist/types/library/scroll/SkewPanScroll.d.ts.map +0 -1
  648. package/dist/types/library/scroll/SlideScroll.d.ts +0 -52
  649. package/dist/types/library/scroll/SlideScroll.d.ts.map +0 -1
  650. package/dist/types/library/scroll/Spin3dScroll.d.ts +0 -73
  651. package/dist/types/library/scroll/Spin3dScroll.d.ts.map +0 -1
  652. package/dist/types/library/scroll/SpinScroll.d.ts +0 -61
  653. package/dist/types/library/scroll/SpinScroll.d.ts.map +0 -1
  654. package/dist/types/library/scroll/StretchScroll.d.ts +0 -125
  655. package/dist/types/library/scroll/StretchScroll.d.ts.map +0 -1
  656. package/dist/types/library/scroll/TiltScroll.d.ts +0 -143
  657. package/dist/types/library/scroll/TiltScroll.d.ts.map +0 -1
  658. package/dist/types/library/scroll/TurnScroll.d.ts +0 -66
  659. package/dist/types/library/scroll/TurnScroll.d.ts.map +0 -1
  660. package/dist/types/library/scroll/index.d.ts +0 -3
  661. package/dist/types/library/scroll/index.d.ts.map +0 -1
  662. package/dist/types/library/scroll/test/testUtils.d.ts +0 -3
  663. package/dist/types/library/scroll/test/testUtils.d.ts.map +0 -1
  664. package/dist/types/playground/animationMotionBgScroll.stories.d.ts +0 -6
  665. package/dist/types/playground/animationMotionBgScroll.stories.d.ts.map +0 -1
  666. package/dist/types/playground/animationsMotion.stories.d.ts +0 -6
  667. package/dist/types/playground/animationsMotion.stories.d.ts.map +0 -1
  668. package/dist/types/playground/animationsMotionMouse.stories.d.ts +0 -6
  669. package/dist/types/playground/animationsMotionMouse.stories.d.ts.map +0 -1
  670. package/dist/types/playground/animationsMotionOngoing.stories.d.ts +0 -6
  671. package/dist/types/playground/animationsMotionOngoing.stories.d.ts.map +0 -1
  672. package/dist/types/playground/animationsMotionScroll.stories.d.ts +0 -6
  673. package/dist/types/playground/animationsMotionScroll.stories.d.ts.map +0 -1
  674. package/dist/types/playground/controls.d.ts +0 -53
  675. package/dist/types/playground/controls.d.ts.map +0 -1
  676. package/dist/types/playground/mouseComponent.d.ts +0 -10
  677. package/dist/types/playground/mouseComponent.d.ts.map +0 -1
  678. package/dist/types/playground/playground-common.d.ts +0 -34
  679. package/dist/types/playground/playground-common.d.ts.map +0 -1
package/README.md CHANGED
@@ -27,14 +27,11 @@ npm install @wix/motion
27
27
  import { getWebAnimation } from '@wix/motion';
28
28
 
29
29
  // Create a fade-in entrance animation
30
- const animation = getWebAnimation(
31
- document.getElementById('myElement'),
32
- {
33
- namedEffect: { type: 'FadeIn' },
34
- duration: 1000,
35
- easing: 'easeOut'
36
- }
37
- );
30
+ const animation = getWebAnimation(document.getElementById('myElement'), {
31
+ namedEffect: { type: 'FadeIn' },
32
+ duration: 1000,
33
+ easing: 'easeOut',
34
+ });
38
35
 
39
36
  // Play the animation
40
37
  await animation.play();
@@ -49,19 +46,21 @@ import { getScrubScene } from '@wix/motion';
49
46
  const scene = getScrubScene(
50
47
  document.getElementById('scrollElement'),
51
48
  {
52
- namedEffect: {
49
+ namedEffect: {
53
50
  type: 'ParallaxScroll',
54
- speed: 0.5
55
- }
51
+ speed: 0.5,
52
+ },
56
53
  },
57
- { trigger: 'view-progress', element: document.getElementById('viewport') }
54
+ { trigger: 'view-progress', element: document.getElementById('viewport') },
58
55
  );
59
56
  ```
60
57
 
61
58
  ## 📚 Animation Categories
62
59
 
63
60
  ### 🎭 Entrance Animations (24 presets)
61
+
64
62
  Perfect for element reveals and page transitions:
63
+
65
64
  - **FadeIn** - Simple opacity transition
66
65
  - **ArcIn** - Curved motion with 3D rotation
67
66
  - **BounceIn** - Spring-based entrance with bounce effect
@@ -69,8 +68,10 @@ Perfect for element reveals and page transitions:
69
68
  - **FlipIn** - 3D flip transitions
70
69
  - [See all entrance animations →](docs/categories/entrance-animations.md)
71
70
 
72
- ### 🔄 Ongoing Animations (16 presets)
71
+ ### 🔄 Ongoing Animations (16 presets)
72
+
73
73
  Continuous looping animations for attention and delight:
74
+
74
75
  - **Pulse** - Rhythmic scaling effect
75
76
  - **Breathe** - Organic scaling animation
76
77
  - **Spin** - Smooth rotation loops
@@ -79,7 +80,9 @@ Continuous looping animations for attention and delight:
79
80
  - [See all ongoing animations →](docs/categories/ongoing-animations.md)
80
81
 
81
82
  ### 📜 Scroll Animations (19 presets)
83
+
82
84
  Scroll-synchronized effects that respond to viewport position:
85
+
83
86
  - **ParallaxScroll** - Classic parallax movement
84
87
  - **FadeScroll** - Opacity changes on scroll
85
88
  - **GrowScroll** - Scale transformations
@@ -88,7 +91,9 @@ Scroll-synchronized effects that respond to viewport position:
88
91
  - [See all scroll animations →](docs/categories/scroll-animations.md)
89
92
 
90
93
  ### 🖱️ Mouse Animations (12 presets)
94
+
91
95
  Interactive pointer-driven effects:
96
+
92
97
  - **TrackMouse** - Element follows cursor
93
98
  - **Tilt3DMouse** - 3D tilt based on pointer position
94
99
  - **ScaleMouse** - Dynamic scaling on hover
@@ -96,7 +101,9 @@ Interactive pointer-driven effects:
96
101
  - [See all mouse animations →](docs/categories/mouse-animations.md)
97
102
 
98
103
  ### 🖼️ Background Scroll Animations (12 presets)
104
+
99
105
  Specialized effects for background media elements:
106
+
100
107
  - **BgParallax** - Background parallax scrolling
101
108
  - **BgZoom** - Dynamic background scaling
102
109
  - **BgFade** - Background opacity transitions
@@ -106,17 +113,21 @@ Specialized effects for background media elements:
106
113
  ## 🛠️ Core APIs
107
114
 
108
115
  ### Animation Creation
116
+
109
117
  - `getWebAnimation()` - Create Web Animations API instances
110
118
  - `getScrubScene()` - Generate scroll/pointer-driven scenes
111
119
  - `prepareAnimation()` - Pre-calculate measurements for performance
112
120
 
113
121
  ### CSS Integration
122
+
114
123
  - CSS custom properties for dynamic values
115
124
  - CSS Animation API for stylesheet-based animations
116
125
  - Automatic vendor prefixing and fallbacks
117
126
 
118
127
  ### TypeScript Support
128
+
119
129
  Complete type definitions for all animation options:
130
+
120
131
  ```typescript
121
132
  interface TimeAnimationOptions {
122
133
  namedEffect: EntranceAnimation | OngoingAnimation;
@@ -138,6 +149,7 @@ interface TimeAnimationOptions {
138
149
  ## 🎮 Interactive Playground
139
150
 
140
151
  Explore animations interactively in our Storybook playground:
152
+
141
153
  ```bash
142
154
  yarn start # Opens interactive documentation
143
155
  ```
@@ -145,6 +157,7 @@ yarn start # Opens interactive documentation
145
157
  ## 🔧 Framework Integration
146
158
 
147
159
  Works seamlessly with popular frameworks:
160
+
148
161
  - React/Vue/Angular components
149
162
  - GSAP and Framer Motion compatibility
150
163
  - CSS-in-JS libraries
@@ -1,146 +1,2 @@
1
- "use strict";
2
-
3
- exports.__esModule = true;
4
- exports.getAnimation = getAnimation;
5
- exports.getElementAnimation = getElementAnimation;
6
- exports.getElementCSSAnimation = getElementCSSAnimation;
7
- exports.getScrubScene = getScrubScene;
8
- var _AnimationGroup = require("./AnimationGroup");
9
- var _utils = require("./utils");
10
- exports.getEasing = _utils.getEasing;
11
- var _webAnimations = require("./api/webAnimations");
12
- exports.getWebAnimation = _webAnimations.getWebAnimation;
13
- var _cssAnimations = require("./api/cssAnimations");
14
- exports.getCSSAnimation = _cssAnimations.getCSSAnimation;
15
- var _prepare = require("./api/prepare");
16
- exports.prepareAnimation = _prepare.prepareAnimation;
17
- var _common = require("./api/common");
18
- function getElementCSSAnimation(target, animationOptions) {
19
- const namedEffect = (0, _common.getNamedEffect)(animationOptions);
20
- if (!namedEffect) {
21
- return null;
22
- }
23
- if (!namedEffect.style) {
24
- // if this named effect does not have a style method, attempt to get group of Web Animations
25
- if (animationOptions.effectId && target) {
26
- return getElementAnimation(target, animationOptions.effectId);
27
- }
28
- return null;
29
- }
30
- const effectNames = namedEffect.getNames(animationOptions);
31
- const element = typeof target === 'string' ? (0, _common.getElement)(target) : target;
32
- const animations = element == null ? void 0 : element.getAnimations();
33
- const animationNames = (animations == null ? void 0 : animations.map(anim => anim.animationName)) || [];
34
- const filteredAnimations = [];
35
- effectNames.forEach(name => {
36
- if (animationNames.includes(name)) {
37
- filteredAnimations.push(animations == null ? void 0 : animations.find(anim => anim.animationName === name));
38
- }
39
- });
40
- return filteredAnimations != null && filteredAnimations.length ? new _AnimationGroup.AnimationGroup(filteredAnimations) : null;
41
- }
42
- function getElementAnimation(target, effectId) {
43
- const element = typeof target === 'string' ? (0, _common.getElement)(target) : target;
44
- // somehow get the right animations
45
- const animations = element == null ? void 0 : element.getAnimations().filter(anim => {
46
- const id = anim.id || anim.animationName;
47
- // if no id/name just return all animations
48
- return id ? id.startsWith(effectId) : true;
49
- });
50
- return animations != null && animations.length ? new _AnimationGroup.AnimationGroup(animations) : null;
51
- }
52
- function getScrubScene(target, animationOptions, trigger, sceneOptions = {}) {
53
- const {
54
- disabled,
55
- allowActiveEvent,
56
- ...rest
57
- } = sceneOptions;
58
- const animation = (0, _webAnimations.getWebAnimation)(target, animationOptions, trigger, rest);
59
- if (!animation) {
60
- return null;
61
- }
62
- let typeSpecificOptions = {};
63
- if (trigger.trigger === 'view-progress' && !window.ViewTimeline) {
64
- // TODO(ameerf): consider doing this only for bgscrub to not affect the other scroll effects
65
- const viewSource = trigger.element || (0, _common.getElement)(trigger.componentId);
66
- const {
67
- ready
68
- } = animation;
69
- return animation.animations.map(partialAnimation => {
70
- return {
71
- /* we use getters for start and end in order to access the animation's start and end
72
- only when initializing the scrub scene rather than immediately */
73
- get start() {
74
- return partialAnimation.start;
75
- },
76
- get end() {
77
- return partialAnimation.end;
78
- },
79
- viewSource,
80
- ready,
81
- getProgress() {
82
- return animation.getProgress();
83
- },
84
- effect(__, p) {
85
- const {
86
- activeDuration
87
- } = partialAnimation.effect.getComputedTiming();
88
- const {
89
- delay
90
- } = partialAnimation.effect.getTiming();
91
- partialAnimation.currentTime = ((delay || 0) + (activeDuration || 0)) * p;
92
- },
93
- disabled,
94
- destroy() {
95
- partialAnimation.cancel();
96
- }
97
- };
98
- });
99
- } else if (trigger.trigger === 'pointer-move') {
100
- const {
101
- centeredToTarget,
102
- transitionDuration,
103
- transitionEasing
104
- } = animationOptions;
105
- typeSpecificOptions = {
106
- target: animation.target,
107
- centeredToTarget,
108
- allowActiveEvent
109
- };
110
- if (animationOptions.customEffect && transitionDuration) {
111
- typeSpecificOptions.transitionDuration = transitionDuration;
112
- typeSpecificOptions.transitionEasing = (0, _utils.getJsEasing)(transitionEasing);
113
- }
114
- }
115
- return {
116
- ...typeSpecificOptions,
117
- getProgress() {
118
- return animation.getProgress();
119
- },
120
- effect(__, p, v, active) {
121
- animation.progress(v ? {
122
- // @ts-expect-error spread error on p
123
- ...p,
124
- v,
125
- active
126
- } : p);
127
- },
128
- disabled,
129
- destroy() {
130
- animation.cancel();
131
- }
132
- };
133
- }
134
- function getAnimation(target, animationOptions, trigger, reducedMotion = false) {
135
- const animation = getElementCSSAnimation(target, animationOptions);
136
- if (animation) {
137
- animation.ready = new Promise(resolve => {
138
- (0, _prepare.prepareAnimation)(target, animationOptions, resolve);
139
- });
140
- return animation;
141
- }
142
- return (0, _webAnimations.getWebAnimation)(target, animationOptions, trigger, {
143
- reducedMotion
144
- });
145
- }
146
- //# sourceMappingURL=motion.js.map
1
+ "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});class w{animations;options;ready;isCSS;constructor(e,n){this.animations=e,this.options=n,this.ready=n?.measured||Promise.resolve(),this.isCSS=e[0]instanceof CSSAnimation}getProgress(){return this.animations[0]?.effect?.getComputedTiming().progress||0}async play(e){await this.ready;for(const n of this.animations)n.play();await Promise.all(this.animations.map(n=>n.ready)),e&&e()}pause(){for(const e of this.animations)e.pause()}async reverse(e){await this.ready;for(const n of this.animations)n.reverse();await Promise.all(this.animations.map(n=>n.ready)),e&&e()}progress(e){for(const n of this.animations){const{delay:i,duration:s,iterations:r}=n.effect.getTiming(),u=(Number.isFinite(s)?s:0)*(Number.isFinite(r)?r:1);n.currentTime=((i||0)+u)*e}}cancel(){for(const e of this.animations)e.cancel()}setPlaybackRate(e){for(const n of this.animations)n.playbackRate=e}async onFinish(e){try{await Promise.all(this.animations.map(i=>i.finished));const n=this.animations[0];if(n&&!this.isCSS){const i=n.effect?.target;if(i){const s=new Event("animationend");i.dispatchEvent(s)}}e()}catch(n){console.warn("animation was interrupted - aborting onFinish callback - ",n)}}get finished(){return Promise.all(this.animations.map(e=>e.finished))}get playState(){return this.animations[0]?.playState}getTimingOptions(){return this.animations.map(e=>{const n=e.effect?.getTiming(),i=n?.delay??0,s=Number(n?.duration)||0,r=n?.iterations??1;return{delay:i,duration:s,iterations:r}})}}const P=t=>t,L=t=>1-Math.cos(t*Math.PI/2),j=t=>Math.sin(t*Math.PI/2),H=t=>-(Math.cos(Math.PI*t)-1)/2,W=t=>t**2,V=t=>1-(1-t)**2,B=t=>t<.5?2*t**2:1-(-2*t+2)**2/2,K=t=>t**3,J=t=>1-(1-t)**3,U=t=>t<.5?4*t**3:1-(-2*t+2)**3/2,X=t=>t**4,Y=t=>1-(1-t)**4,Q=t=>t<.5?8*t**4:1-(-2*t+2)**4/2,Z=t=>t**5,tt=t=>1-(1-t)**5,et=t=>t<.5?16*t**5:1-(-2*t+2)**5/2,nt=t=>t===0?0:2**(10*t-10),it=t=>t===1?1:1-2**(-10*t),st=t=>t===0?0:t===1?1:t<.5?2**(20*t-10)/2:(2-2**(-20*t+10))/2,rt=t=>1-Math.sqrt(1-t**2),ot=t=>Math.sqrt(1-(t-1)**2),at=t=>t<.5?(1-Math.sqrt(1-4*t**2))/2:(Math.sqrt(-(2*t-3)*(2*t-1))+1)/2,ct=t=>2.70158*t**3-1.70158*t**2,ut=t=>1+2.70158*(t-1)**3+1.70158*(t-1)**2,ft=(t,e=1.70158*1.525)=>t<.5?(2*t)**2*((e+1)*2*t-e)/2:((2*t-2)**2*((e+1)*(t*2-2)+e)+2)/2,S={linear:P,sineIn:L,sineOut:j,sineInOut:H,quadIn:W,quadOut:V,quadInOut:B,cubicIn:K,cubicOut:J,cubicInOut:U,quartIn:X,quartOut:Y,quartInOut:Q,quintIn:Z,quintOut:tt,quintInOut:et,expoIn:nt,expoOut:it,expoInOut:st,circIn:rt,circOut:ot,circInOut:at,backIn:ct,backOut:ut,backInOut:ft},T={linear:"linear",ease:"ease",easeIn:"ease-in",easeOut:"ease-out",easeInOut:"ease-in-out",sineIn:"cubic-bezier(0.47, 0, 0.745, 0.715)",sineOut:"cubic-bezier(0.39, 0.575, 0.565, 1)",sineInOut:"cubic-bezier(0.445, 0.05, 0.55, 0.95)",quadIn:"cubic-bezier(0.55, 0.085, 0.68, 0.53)",quadOut:"cubic-bezier(0.25, 0.46, 0.45, 0.94)",quadInOut:"cubic-bezier(0.455, 0.03, 0.515, 0.955)",cubicIn:"cubic-bezier(0.55, 0.055, 0.675, 0.19)",cubicOut:"cubic-bezier(0.215, 0.61, 0.355, 1)",cubicInOut:"cubic-bezier(0.645, 0.045, 0.355, 1)",quartIn:"cubic-bezier(0.895, 0.03, 0.685, 0.22)",quartOut:"cubic-bezier(0.165, 0.84, 0.44, 1)",quartInOut:"cubic-bezier(0.77, 0, 0.175, 1)",quintIn:"cubic-bezier(0.755, 0.05, 0.855, 0.06)",quintOut:"cubic-bezier(0.23, 1, 0.32, 1)",quintInOut:"cubic-bezier(0.86, 0, 0.07, 1)",expoIn:"cubic-bezier(0.95, 0.05, 0.795, 0.035)",expoOut:"cubic-bezier(0.19, 1, 0.22, 1)",expoInOut:"cubic-bezier(1, 0, 0, 1)",circIn:"cubic-bezier(0.6, 0.04, 0.98, 0.335)",circOut:"cubic-bezier(0.075, 0.82, 0.165, 1)",circInOut:"cubic-bezier(0.785, 0.135, 0.15, 0.86)",backIn:"cubic-bezier(0.6, -0.28, 0.735, 0.045)",backOut:"cubic-bezier(0.175, 0.885, 0.32, 1.275)",backInOut:"cubic-bezier(0.68, -0.55, 0.265, 1.55)"};function lt(t){return t==="percentage"?"%":t||"px"}function mt(t){return t?T[t]||t:T.linear}function Ot(t,e,n,i){const s=3*t,r=3*(n-t)-s,u=1-s-r,a=3*e,l=3*(i-e)-a,m=1-a-l,o=d=>((u*d+r)*d+s)*d,c=d=>((m*d+l)*d+a)*d,f=d=>(3*u*d+2*r)*d+s;function p(d){let h=d;for(let b=0;b<8;b++){const y=o(h)-d;if(Math.abs(y)<1e-7)return h;const I=f(h);if(Math.abs(I)<1e-6)break;h-=y/I}let v=0,g=1;for(h=(v+g)/2;g-v>1e-7;){const b=o(h);if(Math.abs(b-d)<1e-7)return h;d>b?v=h:g=h,h=(v+g)/2}return h}return d=>d<=0?0:d>=1?1:c(p(d))}function _t(t){const e=t.match(/^cubic-bezier\(\s*(-?[\d.]+)\s*,\s*(-?[\d.]+)\s*,\s*(-?[\d.]+)\s*,\s*(-?[\d.]+)\s*\)$/);if(!e)return;const n=parseFloat(e[1]),i=parseFloat(e[2]),s=parseFloat(e[3]),r=parseFloat(e[4]);if(![n,i,s,r].some(isNaN))return Ot(n,i,s,r)}function wt(t){const e=t.match(/^linear\((.+)\)$/);if(!e)return;const n=e[1].split(",").map(u=>u.trim()).filter(Boolean);if(n.length===0)return;const i=[];for(const u of n){const a=u.split(/\s+/),l=parseFloat(a[0]);if(isNaN(l))return;const m=[];for(let o=1;o<a.length;o++)if(a[o].endsWith("%")){const c=parseFloat(a[o])/100;if(isNaN(c))return;m.push(c)}m.length===0?i.push({output:l,pos:null}):m.length===1?i.push({output:l,pos:m[0]}):(i.push({output:l,pos:m[0]}),i.push({output:l,pos:m[1]}))}if(i.length===0)return;i[0].pos===null&&(i[0].pos=0),i[i.length-1].pos===null&&(i[i.length-1].pos=1);let s=0;for(;s<i.length;)if(i[s].pos===null){const u=s-1;let a=s;for(;a<i.length&&i[a].pos===null;)a++;const l=i[u].pos,m=i[a].pos,o=a-u;for(let c=u+1;c<a;c++)i[c].pos=l+(m-l)*(c-u)/o;s=a+1}else s++;for(let u=1;u<i.length;u++)i[u].pos<i[u-1].pos&&(i[u].pos=i[u-1].pos);const r=i;return u=>{if(u<=r[0].pos)return r[0].output;const a=r[r.length-1];if(u>=a.pos)return a.output;let l=0,m=r.length-1;for(;l<m-1;){const f=l+m>>>1;r[f].pos<=u?l=f:m=f}const o=r[l],c=r[m];return c.pos===o.pos?c.output:o.output+(c.output-o.output)*(u-o.pos)/(c.pos-o.pos)}}function C(t){if(!t)return;const e=S[t];return e||(_t(t)??wt(t)??S.linear)}class At extends w{animationGroups;delay;offset;offsetEasing;timingOptions;constructor(e,n={}){const i=e.flatMap(s=>[...s.animations]);super(i),this.animationGroups=e,this.delay=n.delay??0,this.offset=n.offset??0,this.offsetEasing=typeof n.offsetEasing=="function"?n.offsetEasing:C(n.offsetEasing)??P,this.timingOptions=this.animationGroups.map(s=>s.getTimingOptions().map(({delay:r,duration:u,iterations:a})=>({delay:r,duration:Number.isFinite(u)?u:0,iterations:Number.isFinite(a)?a:1}))),this.applyOffsets(),this.ready=Promise.all(e.map(s=>s.ready)).then(()=>{})}calculateOffsets(){const e=this.animationGroups.length;if(e<=1)return[0];const n=e-1;return Array.from({length:e},(i,s)=>this.offsetEasing(s/n)*n*this.offset|0)}applyOffsets(){const e=this.calculateOffsets(),n=this.getSequenceActiveDuration(e);this.animationGroups.forEach((i,s)=>{i.animations.forEach((r,u)=>{const a=r.effect;if(!a)return;const{delay:l,duration:m,iterations:o}=this.timingOptions[s][u],c=l+e[s],f=n-(c+m*o);a.updateTiming({delay:c+this.delay,endDelay:f})})})}getSequenceActiveDuration(e){const n=[];for(let i=0;i<this.timingOptions.length;i++){const s=this.timingOptions[i].reduce((r,u)=>{if(!u)return r;const{delay:a,duration:l,iterations:m}=u;return Math.max(r,a+l*m)},0);n.push(e[i]+s)}return Math.max(...n)}addGroups(e){if(e.length===0)return;const n=[...e].sort((i,s)=>s.index-i.index);for(const{index:i,group:s}of n){const r=Math.min(i,this.animationGroups.length);this.animationGroups.splice(r,0,s),this.timingOptions.splice(r,0,s.getTimingOptions());const u=[...s.animations],a=this.animationGroups.slice(0,r).reduce((l,m)=>l+m.animations.length,0);this.animations.splice(a,0,...u)}this.applyOffsets(),this.ready=Promise.all(this.animationGroups.map(i=>i.ready)).then(()=>{})}async onFinish(e){try{await Promise.all(this.animationGroups.map(n=>n.finished)),e()}catch(n){console.warn("animation was interrupted - aborting onFinish callback - ",n)}}}class qt{_animation;customEffect;progress;_tickCbId;_finishHandler;constructor(e,n,i,s){const r=new KeyframeEffect(n,[],{...i,composite:"add"}),{timeline:u}=s;this._animation=new Animation(r,u),this._tickCbId=null,this.progress=null,this.customEffect=a=>e(r.target,a),this._finishHandler=a=>{this.effect.target?.getAnimations().find(l=>l===this._animation)||this.cancel()},this.addEventListener("finish",this._finishHandler),this.addEventListener("remove",this._finishHandler)}_tick(){try{const e=this.effect?.getComputedTiming().progress??null;e!==this.progress&&(this.customEffect?.(e),this.progress=e),this._tickCbId=requestAnimationFrame(()=>{this._tick()})}catch(e){this._tickCbId=null,console.error(`failed to run customEffect! effectId: ${this.id}, error: ${e instanceof Error?e.message:e}`)}}get currentTime(){return this._animation.currentTime}set currentTime(e){this._animation.currentTime=e}get startTime(){return this._animation.startTime}set startTime(e){this._animation.startTime=e}get playbackRate(){return this._animation.playbackRate}set playbackRate(e){this._animation.playbackRate=e}get id(){return this._animation.id}set id(e){this._animation.id=e}get effect(){return this._animation.effect}set effect(e){this._animation.effect=e}get timeline(){return this._animation.timeline}set timeline(e){this._animation.timeline=e}get finished(){return this._animation.finished}get pending(){return this._animation.pending}get playState(){return this._animation.playState}get ready(){return this._animation.ready}get replaceState(){return this._animation.replaceState}get oncancel(){return this._animation.oncancel}set oncancel(e){this._animation.oncancel=e}get onfinish(){return this._animation.onfinish}set onfinish(e){this._animation.onfinish=e}get onremove(){return this._animation.onremove}set onremove(e){this._animation.onremove=e}play(){this._animation.play(),cancelAnimationFrame(this._tickCbId),this._tickCbId=requestAnimationFrame(()=>this._tick())}pause(){this._animation.pause(),cancelAnimationFrame(this._tickCbId),this._tickCbId=null}cancel(){this.removeEventListener("finish",this._finishHandler),this.removeEventListener("remove",this._finishHandler),this._animation.cancel(),this.customEffect(null),cancelAnimationFrame(this._tickCbId),this._tickCbId=null}commitStyles(){console.warn("CustomEffect animations do not support commitStyles method as they have no style to commit")}finish(){this._animation.finish()}persist(){this._animation.persist()}reverse(){this._animation.reverse()}updatePlaybackRate(e){this._animation.updatePlaybackRate(e)}addEventListener(e,n,i){this._animation.addEventListener(e,n,i)}removeEventListener(e,n,i){this._animation.removeEventListener(e,n,i)}dispatchEvent(e){return this._animation.dispatchEvent(e)}}function kt(t){return t&&t.__esModule&&Object.prototype.hasOwnProperty.call(t,"default")?t.default:t}var A={exports:{}},N=A.exports,D;function St(){return D||(D=1,(function(t){(function(e){var n=function(){},i=e.requestAnimationFrame||e.webkitRequestAnimationFrame||e.mozRequestAnimationFrame||e.msRequestAnimationFrame||function(o){return setTimeout(o,16)};function s(){var o=this;o.reads=[],o.writes=[],o.raf=i.bind(e)}s.prototype={constructor:s,runTasks:function(o){for(var c;c=o.shift();)c()},measure:function(o,c){var f=c?o.bind(c):o;return this.reads.push(f),r(this),f},mutate:function(o,c){var f=c?o.bind(c):o;return this.writes.push(f),r(this),f},clear:function(o){return a(this.reads,o)||a(this.writes,o)},extend:function(o){if(typeof o!="object")throw new Error("expected object");var c=Object.create(this);return l(c,o),c.fastdom=this,c.initialize&&c.initialize(),c},catch:null};function r(o){o.scheduled||(o.scheduled=!0,o.raf(u.bind(null,o)))}function u(o){var c=o.writes,f=o.reads,p;try{n("flushing reads",f.length),o.runTasks(f),n("flushing writes",c.length),o.runTasks(c)}catch(d){p=d}if(o.scheduled=!1,(f.length||c.length)&&r(o),p)if(n("task errored",p.message),o.catch)o.catch(p);else throw p}function a(o,c){var f=o.indexOf(c);return!!~f&&!!o.splice(f,1)}function l(o,c){for(var f in c)c.hasOwnProperty(f)&&(o[f]=c[f])}var m=e.fastdom=e.fastdom||new s;t.exports=m})(typeof window<"u"?window:typeof N<"u"?N:globalThis)})(A)),A.exports}var Tt=St();const E=kt(Tt),$={};function $t(t){Object.assign($,t)}function Pt(t){return t in $?$[t]:(console.warn(`${t} not found in registry. Please make sure to import and register the preset.`),null)}function O(t,e){return t?(e||document).getElementById(t):null}function Ct(t,e){return t?.matches(`[data-motion-part~="${e}"]`)?t:t?.querySelector(`[data-motion-part~="${e}"]`)}function zt(t){const e=t.alternate?"alternate":"";return t.reversed?`${e?`${e}-`:""}reverse`:e||"normal"}function k(t){return`${t.value}${lt(t.unit)}`}function R(t,e,n){return`${t.name||"cover"} ${n&&t.offset.unit!=="percentage"?`calc(100% + ${k(t.offset)}${e?` + ${e}`:""})`:e?`calc(${k(t.offset)} + ${e})`:k(t.offset)}`}function dt(t){return{start:R(t.startOffset,t.startOffsetAdd),end:R(t.endOffset,t.endOffsetAdd,!0)}}function ht(t){return e=>E.measure(()=>e(t))}function pt(t){return e=>E.mutate(()=>e(t))}function _(t){if(t.namedEffect){const e=t.namedEffect.type;return typeof e=="string"?Pt(e):null}else if(t.keyframeEffect){const e=i=>{const{name:s,keyframes:r}=i.keyframeEffect;return[{...i,name:s,keyframes:r}]};return{web:e,style:e,getNames:i=>{const{effectId:s}=i,{name:r}=i.keyframeEffect,u=r||s;return u?[u]:[]}}}else if(t.customEffect)return e=>[{...e,keyframes:[]}];return null}function gt(t,e,n){return t.map((i,s)=>{const r={fill:i.fill,easing:mt(i.easing),iterations:i.iterations===0?1/0:i.iterations||1,composite:i.composite,direction:zt(i)};return z(e)?(r.duration=i.duration,r.delay=i.delay||0):window.ViewTimeline&&e?.trigger==="view-progress"?r.duration="auto":(r.duration=99.99,r.delay=.01),{effect:i,options:r,id:n&&`${n}-${s+1}`,part:i.part}})}function z(t){return!t||t.trigger!=="pointer-move"&&t.trigger!=="view-progress"}function G(t,e,n,i,s){if(t){if(z(i)&&(e.duration=e.duration||1,s?.reducedMotion))if(e.iterations===1||e.iterations==null)e={...e,duration:1};else return[];let r;return n instanceof HTMLElement&&(r={measure:ht(n),mutate:pt(n)}),t.web?t.web(e,r,s):t(e,r,s)}return[]}function x(t,e,n,i,s){const r=t instanceof HTMLElement?t:O(t,s);if(n?.trigger==="pointer-move"&&!e.keyframeEffect){let f=e;e.customEffect&&(f={...e,namedEffect:{id:"",type:"CustomMouse"}});const p=_(f),d=G(p,e,r,n,i);return typeof d!="function"?null:d(r)}const u=_(e),a=G(u,e,r,n,i);if(!a||a.length===0)return null;const l=gt(a,n,e.effectId);let m;const o=n?.trigger==="view-progress";o&&window.ViewTimeline&&(m=new ViewTimeline({subject:n.element||O(n.componentId)}));const c=l.map(({effect:f,options:p,id:d,part:h})=>{const v=h?Ct(r,h):r,g=new KeyframeEffect(v||null,[],p);E.mutate(()=>{"timing"in f&&g.updateTiming(f.timing),g.setKeyframes(f.keyframes)});const b=o&&m?{timeline:m}:{},y=typeof f.customEffect=="function"?new qt(f.customEffect,v||null,p,b):new Animation(g,b.timeline);if(o)if(m)E.mutate(()=>{const{start:I,end:q}=dt(f);y.rangeStart=I,y.rangeEnd=q,y.play()});else{const{startOffset:I,endOffset:q}=e;E.mutate(()=>{const F=f.startOffset||I,M=f.endOffset||q;Object.assign(y,{start:{name:F.name,offset:F.offset?.value,add:f.startOffsetAdd},end:{name:M.name,offset:M.offset?.value,add:f.endOffsetAdd}})})}return d&&(y.id=d),y});return new w(c,{...e,trigger:{...n||{}},measured:new Promise(f=>E.mutate(f))})}function xt(t,e){return t?`#${t}${e?`[data-motion-part~="${e}"]`:""}`:""}function Ft(t,e){const{duration:n,delay:i,iterations:s=1,fill:r,easing:u="linear",direction:a}=t.options,l=t.effect.name,m=n==="auto";return`${l} ${m?"auto":`${n}ms`}${m?" ":` ${i||1}ms `}${u}${r&&r!=="none"?` ${r}`:""} ${!s||s===1/0?"infinite":s}${a==="normal"?"":` ${a}`} ${e?"":"paused"}`}function Mt(t,e,n){return t?.style?(z(n)&&(e.duration=e.duration||1),t.style(e)):[]}function Nt(t,e,n){const i=_(e),s=Mt(i,e),r=gt(s,n,e.effectId),u=n?.trigger==="view-progress";return r.map((a,l)=>{const{start:m,end:o}=u?dt(a.effect):{};return{target:xt(t,a.part),animation:Ft(a,u),composition:a.options.composite,custom:a.effect.custom,name:a.effect.name,keyframes:a.effect.keyframes,id:a.id&&`${a.id}-${l+1}`,animationTimeline:u?`--${n?.id}`:"",animationRange:m||o?`${m} ${o}`:""}})}function bt(t,e,n){const i=_(e),s=t instanceof HTMLElement?t:O(t);if(i&&i.prepare&&s){const r={measure:ht(s),mutate:pt(s)};i.prepare(e,r)}n&&E.mutate(n)}function yt(t,e){const n=_(e);if(!n)return null;if(!n.style)return e.effectId&&t?vt(t,e.effectId):null;const i=n.getNames(e),r=(typeof t=="string"?O(t):t)?.getAnimations(),u=r?.map(l=>l.animationName)||[],a=[];return i.forEach(l=>{u.includes(l)&&a.push(r?.find(m=>m.animationName===l))}),a?.length?new w(a):null}function vt(t,e){const i=(typeof t=="string"?O(t):t)?.getAnimations().filter(s=>{const r=s.id||s.animationName;return r?r.startsWith(e):!0});return i?.length?new w(i):null}function Dt(t,e,n,i={}){const{disabled:s,allowActiveEvent:r,...u}=i,a=x(t,e,n,u);if(!a)return null;let l={};if(n.trigger==="view-progress"&&!window.ViewTimeline){const m=n.element||O(n.componentId),{ready:o}=a;return a.animations.map(c=>({get start(){return c.start},get end(){return c.end},viewSource:m,ready:o,getProgress(){return a.getProgress()},effect(f,p){const{activeDuration:d}=c.effect.getComputedTiming(),{delay:h}=c.effect.getTiming();c.currentTime=((h||0)+(d||0))*p},disabled:s,destroy(){c.cancel()}}))}else if(n.trigger==="pointer-move"){const m=e,{centeredToTarget:o,transitionDuration:c,transitionEasing:f}=m,p=n.axis;if(m.keyframeEffect){const d=a;return d.animations?.length===0?null:{target:void 0,centeredToTarget:o,ready:d.ready,_currentProgress:0,getProgress(){return this._currentProgress},effect(v,g){const b=p==="x"?g.x:g.y;this._currentProgress=b,d.progress(b)},disabled:s??!1,destroy(){d.cancel()}}}l={centeredToTarget:o,allowActiveEvent:r},e.customEffect&&c&&(l.transitionDuration=c,l.transitionEasing=C(f)),l.target=a.target}return{...l,getProgress(){return a.getProgress()},effect(m,o,c,f){a.progress(c?{...o,v:c,active:f}:o)},disabled:s,destroy(){a.cancel()}}}function Et(t,e,n,i=!1){const s=yt(t,e);return s?(s.ready=new Promise(r=>{bt(t,e,r)}),s):x(t,e,n,{reducedMotion:i})}function Rt(t){return t===null?[null]:typeof t=="string"?Array.from(document.querySelectorAll(t)):Array.isArray(t)?t:[t]}function It(t,e){const n=[];for(const{target:i,options:s}of t){const r=Rt(i);for(const u of r){const a=Et(u,s,void 0,e?.reducedMotion);a instanceof w&&n.push(a)}}return n}function Gt(t,e,n){const i=It(e,n);return new At(i,t)}exports.backIn=ct;exports.backInOut=ft;exports.backOut=ut;exports.circIn=rt;exports.circInOut=at;exports.circOut=ot;exports.createAnimationGroups=It;exports.cssEasings=T;exports.cubicIn=K;exports.cubicInOut=U;exports.cubicOut=J;exports.expoIn=nt;exports.expoInOut=st;exports.expoOut=it;exports.getAnimation=Et;exports.getCSSAnimation=Nt;exports.getCssUnits=lt;exports.getEasing=mt;exports.getElementAnimation=vt;exports.getElementCSSAnimation=yt;exports.getJsEasing=C;exports.getScrubScene=Dt;exports.getSequence=Gt;exports.getWebAnimation=x;exports.jsEasings=S;exports.linear=P;exports.prepareAnimation=bt;exports.quadIn=W;exports.quadInOut=B;exports.quadOut=V;exports.quartIn=X;exports.quartInOut=Q;exports.quartOut=Y;exports.quintIn=Z;exports.quintInOut=et;exports.quintOut=tt;exports.registerEffects=$t;exports.sineIn=L;exports.sineInOut=H;exports.sineOut=j;
2
+ //# sourceMappingURL=motion.js.map
@@ -1 +1 @@
1
- {"version":3,"names":["_AnimationGroup","require","_utils","exports","getEasing","_webAnimations","getWebAnimation","_cssAnimations","getCSSAnimation","_prepare","prepareAnimation","_common","getElementCSSAnimation","target","animationOptions","namedEffect","getNamedEffect","style","effectId","getElementAnimation","effectNames","getNames","element","getElement","animations","getAnimations","animationNames","map","anim","animationName","filteredAnimations","forEach","name","includes","push","find","length","AnimationGroup","filter","id","startsWith","getScrubScene","trigger","sceneOptions","disabled","allowActiveEvent","rest","animation","typeSpecificOptions","window","ViewTimeline","viewSource","componentId","ready","partialAnimation","start","end","getProgress","effect","__","p","activeDuration","getComputedTiming","delay","getTiming","currentTime","destroy","cancel","centeredToTarget","transitionDuration","transitionEasing","customEffect","getJsEasing","v","active","progress","getAnimation","reducedMotion","Promise","resolve"],"sources":["../../src/motion.ts"],"sourcesContent":["import type {\n AnimationOptions,\n ScrubAnimationOptions,\n TriggerVariant,\n MouseAnimationInstance,\n AnimationEffectAPI,\n CustomMouseAnimationInstance,\n ScrubScrollScene,\n ScrubPointerScene,\n} from './types';\nimport { AnimationGroup } from './AnimationGroup';\nimport { getEasing, getJsEasing } from './utils';\nimport { getWebAnimation } from './api/webAnimations';\nimport { getCSSAnimation } from './api/cssAnimations';\nimport { prepareAnimation } from './api/prepare';\nimport { getElement, getNamedEffect } from './api/common';\n\nfunction getElementCSSAnimation(\n target: HTMLElement | string | null,\n animationOptions: AnimationOptions,\n): AnimationGroup | null {\n const namedEffect = getNamedEffect(\n animationOptions,\n ) as AnimationEffectAPI<any> | null;\n\n if (!namedEffect) {\n return null;\n }\n\n if (!namedEffect.style) {\n // if this named effect does not have a style method, attempt to get group of Web Animations\n if (animationOptions.effectId && target) {\n return getElementAnimation(target, animationOptions.effectId);\n }\n\n return null;\n }\n\n const effectNames = namedEffect.getNames(animationOptions);\n const element = typeof target === 'string' ? getElement(target) : target;\n const animations = element?.getAnimations();\n const animationNames =\n animations?.map((anim) => (anim as CSSAnimation).animationName) ||\n ([] as string[]);\n const filteredAnimations: CSSAnimation[] = [];\n\n effectNames.forEach((name) => {\n if (animationNames.includes(name)) {\n filteredAnimations.push(\n animations?.find(\n (anim) => (anim as CSSAnimation).animationName === name,\n ) as CSSAnimation,\n );\n }\n });\n\n return filteredAnimations?.length\n ? new AnimationGroup(filteredAnimations)\n : null;\n}\n\nfunction getElementAnimation(\n target: HTMLElement | string,\n effectId: string,\n): AnimationGroup | null {\n const element = typeof target === 'string' ? getElement(target) : target;\n // somehow get the right animations\n const animations = element\n ?.getAnimations()\n .filter((anim: Animation | CSSAnimation) => {\n const id = anim.id || (anim as CSSAnimation).animationName;\n // if no id/name just return all animations\n return id ? id.startsWith(effectId) : true;\n });\n\n return animations?.length ? new AnimationGroup(animations) : null;\n}\n\nfunction getScrubScene(\n target: HTMLElement | string | null,\n animationOptions: AnimationOptions,\n trigger: Partial<TriggerVariant> & { element?: HTMLElement },\n sceneOptions: Record<string, any> = {},\n): ScrubScrollScene[] | ScrubPointerScene | null {\n const { disabled, allowActiveEvent, ...rest } = sceneOptions;\n const animation = getWebAnimation(target, animationOptions, trigger, rest);\n\n if (!animation) {\n return null;\n }\n\n let typeSpecificOptions = {} as Record<string, any>;\n\n if (trigger.trigger === 'view-progress' && !window.ViewTimeline) {\n // TODO(ameerf): consider doing this only for bgscrub to not affect the other scroll effects\n const viewSource = trigger.element || getElement(trigger.componentId!);\n const { ready } = animation as AnimationGroup;\n\n return (animation as AnimationGroup).animations.map((partialAnimation) => {\n return {\n /* we use getters for start and end in order to access the animation's start and end\n only when initializing the scrub scene rather than immediately */\n get start() {\n return partialAnimation.start;\n },\n get end() {\n return partialAnimation.end;\n },\n viewSource,\n ready,\n getProgress() {\n return (animation as AnimationGroup).getProgress();\n },\n effect(__: any, p: number) {\n const { activeDuration } =\n partialAnimation.effect!.getComputedTiming();\n const { delay } = partialAnimation.effect!.getTiming();\n\n partialAnimation.currentTime =\n ((delay || 0) + ((activeDuration as number) || 0)) * p;\n },\n disabled,\n destroy() {\n partialAnimation.cancel();\n },\n } as ScrubScrollScene;\n });\n } else if (trigger.trigger === 'pointer-move') {\n const { centeredToTarget, transitionDuration, transitionEasing } =\n animationOptions as ScrubAnimationOptions;\n\n typeSpecificOptions = {\n target: (animation as MouseAnimationInstance).target,\n centeredToTarget,\n allowActiveEvent,\n };\n\n if (animationOptions.customEffect && transitionDuration) {\n typeSpecificOptions.transitionDuration = transitionDuration;\n typeSpecificOptions.transitionEasing = getJsEasing(transitionEasing);\n }\n }\n\n return {\n ...typeSpecificOptions,\n getProgress() {\n return (\n animation as AnimationGroup | CustomMouseAnimationInstance\n ).getProgress();\n },\n effect(\n __: any,\n p: number | { x: number; y: number },\n v?: { x: number; y: number },\n active?: boolean,\n ) {\n animation.progress(\n v\n ? {\n // @ts-expect-error spread error on p\n ...p,\n v,\n active,\n }\n : p,\n );\n },\n disabled,\n destroy() {\n animation.cancel();\n },\n } as ScrubPointerScene;\n}\n\nfunction getAnimation(\n target: HTMLElement | string | null,\n animationOptions: AnimationOptions,\n trigger?: Partial<TriggerVariant> & { element?: HTMLElement },\n reducedMotion: boolean = false,\n): AnimationGroup | MouseAnimationInstance | null {\n const animation = getElementCSSAnimation(target, animationOptions);\n\n if (animation) {\n animation.ready = new Promise((resolve) => {\n prepareAnimation(target, animationOptions, resolve);\n });\n\n return animation;\n }\n\n return getWebAnimation(target, animationOptions, trigger, { reducedMotion });\n}\n\nexport {\n getCSSAnimation,\n getWebAnimation,\n getElementCSSAnimation,\n getElementAnimation,\n getScrubScene,\n prepareAnimation,\n getAnimation,\n getEasing,\n};\n\nexport type { AnimationGroup };\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"file":"motion.js","sources":["../../src/AnimationGroup.ts","../../src/easings.ts","../../src/utils.ts","../../src/Sequence.ts","../../src/CustomAnimation.ts","../../../../node_modules/fastdom/fastdom.js","../../src/api/registry.ts","../../src/api/common.ts","../../src/api/webAnimations.ts","../../src/api/cssAnimations.ts","../../src/api/prepare.ts","../../src/motion.ts"],"sourcesContent":["import { AnimationGroupOptions, RangeOffset } from './types';\n\n/**\n * @class AnimationGroup\n *\n * A wrapper object for simulating a GroupEffect and managing multiple animations.\n * See: https://www.w3.org/TR/web-animations-2/#grouping-and-synchronization\n */\nexport class AnimationGroup {\n animations: (Animation & {\n start?: RangeOffset;\n end?: RangeOffset;\n })[];\n options?: AnimationGroupOptions;\n ready: Promise<void>;\n isCSS: boolean;\n\n constructor(animations: Animation[], options?: AnimationGroupOptions) {\n this.animations = animations;\n this.options = options;\n this.ready = options?.measured || Promise.resolve();\n this.isCSS = animations[0] instanceof CSSAnimation;\n }\n\n getProgress() {\n return this.animations[0]?.effect?.getComputedTiming().progress || 0;\n }\n\n async play(callback?: () => void): Promise<void> {\n await this.ready;\n\n for (const animation of this.animations) {\n animation.play();\n }\n\n // TODO: Wait for all animations to be ready, using allSettled to handle rejections gracefully\n // await Promise.allSettled(\n await Promise.all(this.animations.map((animation) => animation.ready));\n\n if (callback) {\n callback();\n }\n }\n\n pause() {\n for (const animation of this.animations) {\n animation.pause();\n }\n }\n\n async reverse(callback?: () => void): Promise<void> {\n await this.ready;\n\n for (const animation of this.animations) {\n animation.reverse();\n }\n\n // TODO: Wait for all animations to be ready, using allSettled to handle rejections gracefully\n // await Promise.allSettled(\n await Promise.all(this.animations.map((animation) => animation.ready));\n\n if (callback) {\n callback();\n }\n }\n\n progress(p: number) {\n for (const animation of this.animations) {\n const { delay, duration, iterations } = animation.effect!.getTiming();\n const time =\n (Number.isFinite(duration) ? (duration as number) : 0) *\n (Number.isFinite(iterations) ? (iterations as number) : 1);\n animation.currentTime = ((delay || 0) + time) * p;\n }\n }\n\n cancel() {\n for (const animation of this.animations) {\n animation.cancel();\n }\n }\n\n setPlaybackRate(rate: number) {\n for (const animation of this.animations) {\n animation.playbackRate = rate;\n }\n }\n\n async onFinish(callback: () => void): Promise<void> {\n try {\n await Promise.all(this.animations.map((animation) => animation.finished));\n\n const a = this.animations[0];\n\n if (a && !this.isCSS) {\n const target = (a.effect as KeyframeEffect)?.target;\n\n if (target) {\n const endEvent = new Event('animationend');\n target.dispatchEvent(endEvent);\n }\n }\n\n callback();\n } catch (_error) {\n console.warn('animation was interrupted - aborting onFinish callback - ', _error);\n }\n }\n\n get finished() {\n return Promise.all(this.animations.map((animation) => animation.finished));\n }\n\n get playState() {\n return this.animations[0]?.playState;\n }\n\n getTimingOptions() {\n return this.animations.map((a) => {\n const timing = a.effect?.getTiming();\n const delay = timing?.delay ?? 0;\n const duration = Number(timing?.duration) || 0;\n const iterations = timing?.iterations ?? 1;\n\n return {\n delay,\n duration,\n iterations,\n };\n });\n }\n}\n","/**\n * @file Easing functions as defined by Robert Penner.\n * @example A playground I made https://codepen.io/tombigel/pen/eYLLVRg\n */\n\n/**\n * Linear easing function.\n * @param t - The time value (between 0 and 1).\n * @returns The eased value.\n */\nexport const linear = (t: number) => t;\n\n/**\n * Sine-in easing function.\n * @param t - The time value (between 0 and 1).\n * @returns The eased value.\n */\nexport const sineIn = (t: number) => 1 - Math.cos((t * Math.PI) / 2);\n\n/**\n * Sine-out easing function.\n * @param t - The time value (between 0 and 1).\n * @returns The eased value.\n */\nexport const sineOut = (t: number) => Math.sin((t * Math.PI) / 2);\n\n/**\n * Sine-in-out easing function.\n * @param t - The time value (between 0 and 1).\n * @returns The eased value.\n */\nexport const sineInOut = (t: number) => -(Math.cos(Math.PI * t) - 1) / 2;\n\n/**\n * Quadratic-in easing function.\n * @param t - The time value (between 0 and 1).\n * @returns The eased value.\n */\nexport const quadIn = (t: number) => t ** 2;\n\n/**\n * Quadratic-out easing function.\n * @param t - The time value (between 0 and 1).\n * @returns The eased value.\n */\nexport const quadOut = (t: number) => 1 - (1 - t) ** 2;\n\n/**\n * Quadratic-in-out easing function.\n * @param t - The time value (between 0 and 1).\n * @returns The eased value.\n */\nexport const quadInOut = (t: number) => (t < 0.5 ? 2 * t ** 2 : 1 - (-2 * t + 2) ** 2 / 2);\n\n/**\n * Cubic-in easing function.\n * @param t - The time value (between 0 and 1).\n * @returns The eased value.\n */\nexport const cubicIn = (t: number) => t ** 3;\n\n/**\n * Cubic-out easing function.\n * @param t - The time value (between 0 and 1).\n * @returns The eased value.\n */\nexport const cubicOut = (t: number) => 1 - (1 - t) ** 3;\n\n/**\n * Cubic-in-out easing function.\n * @param t - The time value (between 0 and 1).\n * @returns The eased value.\n */\nexport const cubicInOut = (t: number) => (t < 0.5 ? 4 * t ** 3 : 1 - (-2 * t + 2) ** 3 / 2);\n\n/**\n * Quartic-in easing function.\n * @param t - The time value (between 0 and 1).\n * @returns The eased value.\n */\nexport const quartIn = (t: number) => t ** 4;\n\n/**\n * Quartic-out easing function.\n * @param t - The time value (between 0 and 1).\n * @returns The eased value.\n */\nexport const quartOut = (t: number) => 1 - (1 - t) ** 4;\n\n/**\n * Quartic-in-out easing function.\n * @param t - The time value (between 0 and 1).\n * @returns The eased value.\n */\nexport const quartInOut = (t: number) => (t < 0.5 ? 8 * t ** 4 : 1 - (-2 * t + 2) ** 4 / 2);\n\n/**\n * Quintic-in easing function.\n * @param t - The time value (between 0 and 1).\n * @returns The eased value.\n */\nexport const quintIn = (t: number) => t ** 5;\n\n/**\n * Quintic-out easing function.\n * @param t - The time value (between 0 and 1).\n * @returns The eased value.\n */\nexport const quintOut = (t: number) => 1 - (1 - t) ** 5;\n\n/**\n * Quintic-in-out easing function.\n * @param t - The time value (between 0 and 1).\n * @returns The eased value.\n */\nexport const quintInOut = (t: number) => (t < 0.5 ? 16 * t ** 5 : 1 - (-2 * t + 2) ** 5 / 2);\n\n/**\n * Exponential-in easing function.\n * @param t - The time value (between 0 and 1).\n * @returns The eased value.\n */\nexport const expoIn = (t: number) => (t === 0 ? 0 : 2 ** (10 * t - 10));\n\n/**\n * Exponential-out easing function.\n * @param t - The time value (between 0 and 1).\n * @returns The eased value.\n */\nexport const expoOut = (t: number) => (t === 1 ? 1 : 1 - 2 ** (-10 * t));\n\n/**\n * Exponential-in-out easing function.\n * @param t - The time value (between 0 and 1).\n * @returns The eased value.\n */\nexport const expoInOut = (t: number) =>\n t === 0 ? 0 : t === 1 ? 1 : t < 0.5 ? 2 ** (20 * t - 10) / 2 : (2 - 2 ** (-20 * t + 10)) / 2;\n\n/**\n * Circular-in easing function.\n * @param t - The time value (between 0 and 1).\n * @returns The eased value.\n */\nexport const circIn = (t: number) => 1 - Math.sqrt(1 - t ** 2);\n\n/**\n * Circular-out easing function.\n * @param t - The time value (between 0 and 1).\n * @returns The eased value.\n */\nexport const circOut = (t: number) => Math.sqrt(1 - (t - 1) ** 2);\n\n/**\n * Circular-in-out easing function.\n * @param t - The time value (between 0 and 1).\n * @returns The eased value.\n */\nexport const circInOut = (t: number) =>\n t < 0.5 ? (1 - Math.sqrt(1 - 4 * t ** 2)) / 2 : (Math.sqrt(-(2 * t - 3) * (2 * t - 1)) + 1) / 2;\n\n/**\n * Back-in easing function.\n * @param t - The time value (between 0 and 1).\n * @returns The eased value.\n */\nexport const backIn = (t: number) => 2.70158 * t ** 3 - 1.70158 * t ** 2;\n\n/**\n * Back-out easing function.\n * @param t - The time value (between 0 and 1).\n * @returns The eased value.\n */\nexport const backOut = (t: number) => 1 + 2.70158 * (t - 1) ** 3 + 1.70158 * (t - 1) ** 2;\n\n/**\n * Back-in-out easing function.\n * @param t - The time value (between 0 and 1).\n * @param k - The back factor (optional, default is 1.70158 * 1.525).\n * @returns The eased value.\n */\nexport const backInOut = (t: number, k = 1.70158 * 1.525) =>\n t < 0.5\n ? ((2 * t) ** 2 * ((k + 1) * 2 * t - k)) / 2\n : ((2 * t - 2) ** 2 * ((k + 1) * (t * 2 - 2) + k) + 2) / 2;\n\nexport const jsEasings = {\n linear,\n sineIn,\n sineOut,\n sineInOut,\n quadIn,\n quadOut,\n quadInOut,\n cubicIn,\n cubicOut,\n cubicInOut,\n quartIn,\n quartOut,\n quartInOut,\n quintIn,\n quintOut,\n quintInOut,\n expoIn,\n expoOut,\n expoInOut,\n circIn,\n circOut,\n circInOut,\n backIn,\n backOut,\n backInOut,\n};\n\n/**\n * CSS cubic-bezier easings based on PostCSS Easings\n */\nexport const cssEasings = {\n linear: 'linear',\n ease: 'ease',\n easeIn: 'ease-in',\n easeOut: 'ease-out',\n easeInOut: 'ease-in-out',\n sineIn: 'cubic-bezier(0.47, 0, 0.745, 0.715)',\n sineOut: 'cubic-bezier(0.39, 0.575, 0.565, 1)',\n sineInOut: 'cubic-bezier(0.445, 0.05, 0.55, 0.95)',\n quadIn: 'cubic-bezier(0.55, 0.085, 0.68, 0.53)',\n quadOut: 'cubic-bezier(0.25, 0.46, 0.45, 0.94)',\n quadInOut: 'cubic-bezier(0.455, 0.03, 0.515, 0.955)',\n cubicIn: 'cubic-bezier(0.55, 0.055, 0.675, 0.19)',\n cubicOut: 'cubic-bezier(0.215, 0.61, 0.355, 1)',\n cubicInOut: 'cubic-bezier(0.645, 0.045, 0.355, 1)',\n quartIn: 'cubic-bezier(0.895, 0.03, 0.685, 0.22)',\n quartOut: 'cubic-bezier(0.165, 0.84, 0.44, 1)',\n quartInOut: 'cubic-bezier(0.77, 0, 0.175, 1)',\n quintIn: 'cubic-bezier(0.755, 0.05, 0.855, 0.06)',\n quintOut: 'cubic-bezier(0.23, 1, 0.32, 1)',\n quintInOut: 'cubic-bezier(0.86, 0, 0.07, 1)',\n expoIn: 'cubic-bezier(0.95, 0.05, 0.795, 0.035)',\n expoOut: 'cubic-bezier(0.19, 1, 0.22, 1)',\n expoInOut: 'cubic-bezier(1, 0, 0, 1)',\n circIn: 'cubic-bezier(0.6, 0.04, 0.98, 0.335)',\n circOut: 'cubic-bezier(0.075, 0.82, 0.165, 1)',\n circInOut: 'cubic-bezier(0.785, 0.135, 0.15, 0.86)',\n backIn: 'cubic-bezier(0.6, -0.28, 0.735, 0.045)',\n backOut: 'cubic-bezier(0.175, 0.885, 0.32, 1.275)',\n backInOut: 'cubic-bezier(0.68, -0.55, 0.265, 1.55)',\n} as const;\n","import { cssEasings, jsEasings } from './easings';\n\nexport function getCssUnits(unit: 'percentage' | string) {\n return unit === 'percentage' ? '%' : unit || 'px';\n}\n\nexport function getEasing(easing?: keyof typeof cssEasings | string): string {\n return easing ? cssEasings[easing as keyof typeof cssEasings] || easing : cssEasings.linear;\n}\n\nfunction cubicBezierEasing(x1: number, y1: number, x2: number, y2: number): (t: number) => number {\n const cx = 3 * x1;\n const bx = 3 * (x2 - x1) - cx;\n const ax = 1 - cx - bx;\n const cy = 3 * y1;\n const by = 3 * (y2 - y1) - cy;\n const ay = 1 - cy - by;\n\n const sampleX = (t: number) => ((ax * t + bx) * t + cx) * t;\n const sampleY = (t: number) => ((ay * t + by) * t + cy) * t;\n const sampleDX = (t: number) => (3 * ax * t + 2 * bx) * t + cx;\n\n function solveT(x: number): number {\n let t = x;\n\n for (let i = 0; i < 8; i++) {\n const dx = sampleX(t) - x;\n\n if (Math.abs(dx) < 1e-7) return t;\n\n const d = sampleDX(t);\n\n if (Math.abs(d) < 1e-6) break;\n\n t -= dx / d;\n }\n // Bisection fallback\n let lo = 0,\n hi = 1;\n t = (lo + hi) / 2;\n\n while (hi - lo > 1e-7) {\n const xMid = sampleX(t);\n if (Math.abs(xMid - x) < 1e-7) return t;\n if (x > xMid) lo = t;\n else hi = t;\n t = (lo + hi) / 2;\n }\n\n return t;\n }\n\n return (t: number) => {\n if (t <= 0) return 0;\n if (t >= 1) return 1;\n return sampleY(solveT(t));\n };\n}\n\nfunction parseCubicBezier(str: string): ((t: number) => number) | undefined {\n const m = str.match(\n /^cubic-bezier\\(\\s*(-?[\\d.]+)\\s*,\\s*(-?[\\d.]+)\\s*,\\s*(-?[\\d.]+)\\s*,\\s*(-?[\\d.]+)\\s*\\)$/,\n );\n\n if (!m) return undefined;\n\n const x1 = parseFloat(m[1]);\n const y1 = parseFloat(m[2]);\n const x2 = parseFloat(m[3]);\n const y2 = parseFloat(m[4]);\n\n if ([x1, y1, x2, y2].some(isNaN)) return undefined;\n\n return cubicBezierEasing(x1, y1, x2, y2);\n}\n\nfunction parseCssLinear(str: string): ((t: number) => number) | undefined {\n const m = str.match(/^linear\\((.+)\\)$/);\n if (!m) return undefined;\n\n const parts = m[1]\n .split(',')\n .map((s) => s.trim())\n .filter(Boolean);\n\n if (parts.length === 0) return undefined;\n\n type Stop = { output: number; pos: number | null };\n const stops: Stop[] = [];\n\n for (const part of parts) {\n const tokens = part.split(/\\s+/);\n const output = parseFloat(tokens[0]);\n\n if (isNaN(output)) return undefined;\n\n const pcts: number[] = [];\n\n for (let i = 1; i < tokens.length; i++) {\n if (tokens[i].endsWith('%')) {\n const v = parseFloat(tokens[i]) / 100;\n if (isNaN(v)) return undefined;\n pcts.push(v);\n }\n }\n\n if (pcts.length === 0) {\n stops.push({ output, pos: null });\n } else if (pcts.length === 1) {\n stops.push({ output, pos: pcts[0] });\n } else {\n // Two percentages: creates a plateau between the two positions\n stops.push({ output, pos: pcts[0] });\n stops.push({ output, pos: pcts[1] });\n }\n }\n\n if (stops.length === 0) return undefined;\n if (stops[0].pos === null) stops[0].pos = 0;\n if (stops[stops.length - 1].pos === null) stops[stops.length - 1].pos = 1;\n\n // Distribute positions for stops without an explicit position\n let i = 0;\n\n while (i < stops.length) {\n if (stops[i].pos === null) {\n const start = i - 1;\n let end = i;\n\n while (end < stops.length && stops[end].pos === null) end++;\n\n const startPos = stops[start].pos!;\n const endPos = stops[end].pos!;\n const span = end - start;\n\n for (let k = start + 1; k < end; k++) {\n stops[k].pos = startPos + ((endPos - startPos) * (k - start)) / span;\n }\n\n i = end + 1;\n } else {\n i++;\n }\n }\n\n // Clamp: each stop must be no earlier than the previous one\n for (let j = 1; j < stops.length; j++) {\n if (stops[j].pos! < stops[j - 1].pos!) stops[j].pos = stops[j - 1].pos;\n }\n\n const resolved = stops as Array<{ output: number; pos: number }>;\n\n return (t: number) => {\n if (t <= resolved[0].pos) return resolved[0].output;\n\n const last = resolved[resolved.length - 1];\n\n if (t >= last.pos) return last.output;\n\n let lo = 0,\n hi = resolved.length - 1;\n\n while (lo < hi - 1) {\n const mid = (lo + hi) >>> 1;\n\n if (resolved[mid].pos <= t) lo = mid;\n else hi = mid;\n }\n\n const a = resolved[lo];\n const b = resolved[hi];\n if (b.pos === a.pos) return b.output;\n return a.output + ((b.output - a.output) * (t - a.pos)) / (b.pos - a.pos);\n };\n}\n\nexport function getJsEasing(\n easing?: keyof typeof jsEasings | string,\n): ((t: number) => number) | undefined {\n if (!easing) return undefined;\n\n const named = jsEasings[easing as keyof typeof jsEasings];\n\n if (named) return named;\n\n return parseCubicBezier(easing) ?? parseCssLinear(easing) ?? jsEasings.linear;\n}\n","import { AnimationGroup } from './AnimationGroup';\nimport type { IndexedGroup, SequenceOptions } from './types';\nimport { linear } from './easings';\nimport { getJsEasing } from './utils';\n\n/**\n * @class Sequence\n *\n * Manages multiple AnimationGroups as a coordinated timeline with staggered delays.\n * Extends AnimationGroup to inherit the playback control API while delegating\n * to child AnimationGroup instances.\n */\nexport class Sequence extends AnimationGroup {\n animationGroups: AnimationGroup[];\n delay: number;\n offset: number;\n offsetEasing: (p: number) => number;\n private timingOptions: { delay: number; duration: number; iterations: number }[][];\n\n constructor(animationGroups: AnimationGroup[], options: SequenceOptions = {}) {\n const allAnimations = animationGroups.flatMap((group) => [...group.animations]);\n super(allAnimations);\n\n this.animationGroups = animationGroups;\n this.delay = options.delay ?? 0;\n this.offset = options.offset ?? 0;\n this.offsetEasing =\n typeof options.offsetEasing === 'function'\n ? options.offsetEasing\n : (getJsEasing(options.offsetEasing) ?? linear);\n\n this.timingOptions = this.animationGroups.map((g) => {\n return g.getTimingOptions().map(({ delay, duration, iterations }) => {\n return {\n delay,\n duration: Number.isFinite(duration) ? duration : 0,\n iterations: Number.isFinite(iterations) ? iterations : 1,\n };\n });\n });\n\n this.applyOffsets();\n\n this.ready = Promise.all(animationGroups.map((g) => g.ready)).then(() => {});\n }\n\n /**\n * Calculates stagger delay offsets for each animation group using the formula:\n * easing(i / last) * last * offset\n * where i is the group index and last is the index of the final group.\n */\n private calculateOffsets(): number[] {\n const count = this.animationGroups.length;\n if (count <= 1) return [0];\n\n const last = count - 1;\n\n return Array.from(\n { length: count },\n (_, i) => (this.offsetEasing(i / last) * last * this.offset) | 0,\n );\n }\n\n private applyOffsets(): void {\n const offsets = this.calculateOffsets();\n const sequenceDuration = this.getSequenceActiveDuration(offsets);\n\n this.animationGroups.forEach((group, groupIdx) => {\n group.animations.forEach((animation, animIdx) => {\n const effect = animation.effect;\n\n if (!effect) return;\n\n const { delay: baseDelay, duration, iterations } = this.timingOptions[groupIdx][animIdx];\n const delay = baseDelay + offsets[groupIdx];\n const endDelay = sequenceDuration - (delay + duration * iterations);\n\n // add the sequence delay to the animation delay at the end - it doesn't need to affect the endDelay\n effect.updateTiming({ delay: delay + this.delay, endDelay });\n });\n });\n }\n\n private getSequenceActiveDuration(offsets: number[]): number {\n const result: number[] = [];\n\n for (let i = 0; i < this.timingOptions.length; i++) {\n const activeDuration = this.timingOptions[i].reduce((max, options) => {\n if (!options) return max;\n\n const { delay, duration, iterations } = options;\n\n return Math.max(max, delay + duration * iterations);\n }, 0);\n\n result.push(offsets[i] + activeDuration);\n }\n\n return Math.max(...result);\n }\n\n /**\n * Inserts new AnimationGroups at specified indices, then recalculates\n * stagger offsets for all groups. Each entry specifies the target index\n * in the animationGroups array where the group should be inserted.\n */\n addGroups(entries: IndexedGroup[]): void {\n if (entries.length === 0) return;\n\n const sorted = [...entries].sort((a, b) => b.index - a.index);\n\n for (const { index, group } of sorted) {\n const clampedIndex = Math.min(index, this.animationGroups.length);\n this.animationGroups.splice(clampedIndex, 0, group);\n this.timingOptions.splice(clampedIndex, 0, group.getTimingOptions());\n\n const flatAnimations = [...group.animations];\n const insertAt = this.animationGroups\n .slice(0, clampedIndex)\n .reduce((sum, g) => sum + g.animations.length, 0);\n this.animations.splice(insertAt, 0, ...flatAnimations);\n }\n\n this.applyOffsets();\n this.ready = Promise.all(this.animationGroups.map((g) => g.ready)).then(() => {});\n }\n\n async onFinish(callback: () => void): Promise<void> {\n try {\n await Promise.all(this.animationGroups.map((group) => group.finished));\n callback();\n } catch (_error) {\n console.warn('animation was interrupted - aborting onFinish callback - ', _error);\n }\n }\n}\n","/**\n * @class CustomAnimation\n *\n * A wrapper object for Animation that mimics the same interface but implements CustomEffect that runs JS code instead of KeyframeEffect.\n * The class is implemented by holding an inner Animation object instead of inheritance due to some browsers not allowing extension of built-in objects.\n */\nexport class CustomAnimation {\n _animation: Animation;\n customEffect: (progress: number | null) => void;\n progress: number | null;\n _tickCbId: number | null;\n _finishHandler: (_: any) => void;\n\n constructor(\n customEffect: (element: Element | null, progress: number | null) => void,\n target: Element | null,\n effectOptions: KeyframeEffectOptions,\n timingOptions: { timeline?: AnimationTimeline | null },\n ) {\n // overriding composite so that animation is not replaced and removed\n const effect = new KeyframeEffect(target, [], {\n ...effectOptions,\n composite: 'add',\n });\n const { timeline } = timingOptions;\n this._animation = new Animation(effect, timeline);\n\n this._tickCbId = null;\n this.progress = null;\n this.customEffect = (progress: number | null) => customEffect(effect.target, progress);\n\n // stop loop if animation is removed from the DOM after finish (does not fire 'remove' event)\n this._finishHandler = (_: any) => {\n if (\n !(this.effect as KeyframeEffect).target?.getAnimations().find((a) => a === this._animation)\n ) {\n this.cancel();\n }\n };\n this.addEventListener('finish', this._finishHandler);\n this.addEventListener('remove', this._finishHandler);\n }\n\n // private tick method for customEffect loop implementation\n private _tick() {\n try {\n const progress = this.effect?.getComputedTiming().progress ?? null;\n if (progress !== this.progress) {\n this.customEffect?.(progress);\n this.progress = progress;\n }\n this._tickCbId = requestAnimationFrame(() => {\n this._tick();\n });\n } catch (error) {\n this._tickCbId = null;\n console.error(\n `failed to run customEffect! effectId: ${this.id}, error: ${\n error instanceof Error ? error.message : error\n }`,\n );\n }\n }\n\n // Animation timing properties\n get currentTime() {\n return this._animation.currentTime;\n }\n set currentTime(time: CSSNumberish | null) {\n this._animation.currentTime = time;\n }\n get startTime() {\n return this._animation.startTime;\n }\n set startTime(time: CSSNumberish | null) {\n this._animation.startTime = time;\n }\n get playbackRate() {\n return this._animation.playbackRate;\n }\n set playbackRate(speed: number) {\n this._animation.playbackRate = speed;\n }\n\n // Animation basic properties\n get id() {\n return this._animation.id;\n }\n set id(uid: string) {\n this._animation.id = uid;\n }\n get effect() {\n return this._animation.effect;\n }\n set effect(e: AnimationEffect | null) {\n this._animation.effect = e;\n }\n get timeline() {\n return this._animation.timeline;\n }\n set timeline(tl: AnimationTimeline | null) {\n this._animation.timeline = tl;\n }\n\n // Animation readonly state properties\n get finished() {\n return this._animation.finished;\n }\n get pending() {\n return this._animation.pending;\n }\n get playState() {\n return this._animation.playState;\n }\n get ready() {\n return this._animation.ready;\n }\n get replaceState() {\n return this._animation.replaceState;\n }\n\n // Animation event handlers\n get oncancel() {\n return this._animation.oncancel;\n }\n set oncancel(cb: ((this: Animation, ev: AnimationPlaybackEvent) => any) | null) {\n this._animation.oncancel = cb;\n }\n get onfinish() {\n return this._animation.onfinish;\n }\n set onfinish(cb: ((this: Animation, ev: AnimationPlaybackEvent) => any) | null) {\n this._animation.onfinish = cb;\n }\n get onremove() {\n return this._animation.onremove;\n }\n set onremove(cb: ((this: Animation, ev: AnimationPlaybackEvent) => any) | null) {\n this._animation.onremove = cb;\n }\n\n // CustomAnimation overridden methods\n play() {\n this._animation.play();\n cancelAnimationFrame(this._tickCbId!);\n this._tickCbId = requestAnimationFrame(() => this._tick());\n }\n\n pause() {\n this._animation.pause();\n cancelAnimationFrame(this._tickCbId!);\n this._tickCbId = null;\n }\n\n cancel() {\n this.removeEventListener('finish', this._finishHandler);\n this.removeEventListener('remove', this._finishHandler);\n this._animation.cancel();\n // signaling cancelation for customEffect to handle it as desired\n this.customEffect(null);\n cancelAnimationFrame(this._tickCbId!);\n this._tickCbId = null;\n }\n\n commitStyles() {\n console.warn(\n 'CustomEffect animations do not support commitStyles method as they have no style to commit',\n );\n }\n\n // Animation methods without override\n finish() {\n this._animation.finish();\n }\n persist() {\n this._animation.persist();\n }\n reverse() {\n this._animation.reverse();\n }\n updatePlaybackRate(playbackRate: number) {\n this._animation.updatePlaybackRate(playbackRate);\n }\n\n // Animation events API\n addEventListener(\n type: string,\n listener: EventListenerOrEventListenerObject,\n options?: boolean | AddEventListenerOptions,\n ) {\n this._animation.addEventListener(type, listener, options);\n }\n removeEventListener(\n type: string,\n listener: EventListenerOrEventListenerObject,\n options?: boolean | AddEventListenerOptions,\n ) {\n this._animation.removeEventListener(type, listener, options);\n }\n dispatchEvent(event: Event) {\n return this._animation.dispatchEvent(event);\n }\n}\n","!(function(win) {\n\n/**\n * FastDom\n *\n * Eliminates layout thrashing\n * by batching DOM read/write\n * interactions.\n *\n * @author Wilson Page <wilsonpage@me.com>\n * @author Kornel Lesinski <kornel.lesinski@ft.com>\n */\n\n'use strict';\n\n/**\n * Mini logger\n *\n * @return {Function}\n */\nvar debug = 0 ? console.log.bind(console, '[fastdom]') : function() {};\n\n/**\n * Normalized rAF\n *\n * @type {Function}\n */\nvar raf = win.requestAnimationFrame\n || win.webkitRequestAnimationFrame\n || win.mozRequestAnimationFrame\n || win.msRequestAnimationFrame\n || function(cb) { return setTimeout(cb, 16); };\n\n/**\n * Initialize a `FastDom`.\n *\n * @constructor\n */\nfunction FastDom() {\n var self = this;\n self.reads = [];\n self.writes = [];\n self.raf = raf.bind(win); // test hook\n debug('initialized', self);\n}\n\nFastDom.prototype = {\n constructor: FastDom,\n\n /**\n * We run this inside a try catch\n * so that if any jobs error, we\n * are able to recover and continue\n * to flush the batch until it's empty.\n *\n * @param {Array} tasks\n */\n runTasks: function(tasks) {\n debug('run tasks');\n var task; while (task = tasks.shift()) task();\n },\n\n /**\n * Adds a job to the read batch and\n * schedules a new frame if need be.\n *\n * @param {Function} fn\n * @param {Object} ctx the context to be bound to `fn` (optional).\n * @public\n */\n measure: function(fn, ctx) {\n debug('measure');\n var task = !ctx ? fn : fn.bind(ctx);\n this.reads.push(task);\n scheduleFlush(this);\n return task;\n },\n\n /**\n * Adds a job to the\n * write batch and schedules\n * a new frame if need be.\n *\n * @param {Function} fn\n * @param {Object} ctx the context to be bound to `fn` (optional).\n * @public\n */\n mutate: function(fn, ctx) {\n debug('mutate');\n var task = !ctx ? fn : fn.bind(ctx);\n this.writes.push(task);\n scheduleFlush(this);\n return task;\n },\n\n /**\n * Clears a scheduled 'read' or 'write' task.\n *\n * @param {Object} task\n * @return {Boolean} success\n * @public\n */\n clear: function(task) {\n debug('clear', task);\n return remove(this.reads, task) || remove(this.writes, task);\n },\n\n /**\n * Extend this FastDom with some\n * custom functionality.\n *\n * Because fastdom must *always* be a\n * singleton, we're actually extending\n * the fastdom instance. This means tasks\n * scheduled by an extension still enter\n * fastdom's global task queue.\n *\n * The 'super' instance can be accessed\n * from `this.fastdom`.\n *\n * @example\n *\n * var myFastdom = fastdom.extend({\n * initialize: function() {\n * // runs on creation\n * },\n *\n * // override a method\n * measure: function(fn) {\n * // do extra stuff ...\n *\n * // then call the original\n * return this.fastdom.measure(fn);\n * },\n *\n * ...\n * });\n *\n * @param {Object} props properties to mixin\n * @return {FastDom}\n */\n extend: function(props) {\n debug('extend', props);\n if (typeof props != 'object') throw new Error('expected object');\n\n var child = Object.create(this);\n mixin(child, props);\n child.fastdom = this;\n\n // run optional creation hook\n if (child.initialize) child.initialize();\n\n return child;\n },\n\n // override this with a function\n // to prevent Errors in console\n // when tasks throw\n catch: null\n};\n\n/**\n * Schedules a new read/write\n * batch if one isn't pending.\n *\n * @private\n */\nfunction scheduleFlush(fastdom) {\n if (!fastdom.scheduled) {\n fastdom.scheduled = true;\n fastdom.raf(flush.bind(null, fastdom));\n debug('flush scheduled');\n }\n}\n\n/**\n * Runs queued `read` and `write` tasks.\n *\n * Errors are caught and thrown by default.\n * If a `.catch` function has been defined\n * it is called instead.\n *\n * @private\n */\nfunction flush(fastdom) {\n debug('flush');\n\n var writes = fastdom.writes;\n var reads = fastdom.reads;\n var error;\n\n try {\n debug('flushing reads', reads.length);\n fastdom.runTasks(reads);\n debug('flushing writes', writes.length);\n fastdom.runTasks(writes);\n } catch (e) { error = e; }\n\n fastdom.scheduled = false;\n\n // If the batch errored we may still have tasks queued\n if (reads.length || writes.length) scheduleFlush(fastdom);\n\n if (error) {\n debug('task errored', error.message);\n if (fastdom.catch) fastdom.catch(error);\n else throw error;\n }\n}\n\n/**\n * Remove an item from an Array.\n *\n * @param {Array} array\n * @param {*} item\n * @return {Boolean}\n */\nfunction remove(array, item) {\n var index = array.indexOf(item);\n return !!~index && !!array.splice(index, 1);\n}\n\n/**\n * Mixin own properties of source\n * object into the target.\n *\n * @param {Object} target\n * @param {Object} source\n */\nfunction mixin(target, source) {\n for (var key in source) {\n if (source.hasOwnProperty(key)) target[key] = source[key];\n }\n}\n\n// There should never be more than\n// one instance of `FastDom` in an app\nvar exports = win.fastdom = (win.fastdom || new FastDom()); // jshint ignore:line\n\n// Expose to CJS & AMD\nif ((typeof define) == 'function') define(function() { return exports; });\nelse if ((typeof module) == 'object') module.exports = exports;\n\n})( typeof window !== 'undefined' ? window : typeof this != 'undefined' ? this : globalThis);\n","import type { EffectModule } from '../types';\n\nconst registry: Record<string, EffectModule> = {};\n\nexport function registerEffects(effects: Record<string, EffectModule>) {\n Object.assign(registry, effects);\n}\n\nexport function getRegisteredEffect(name: string) {\n if (name in registry) {\n return registry[name];\n } else {\n console.warn(\n `${name} not found in registry. Please make sure to import and register the preset.`,\n );\n return null;\n }\n}\n","import type {\n AnimationData,\n AnimationDataForScrub,\n AnimationOptions,\n MeasureCallback,\n RangeOffset,\n TimeAnimationOptions,\n TriggerVariant,\n UnitLengthPercentage,\n} from '../types';\nimport { getCssUnits, getEasing } from '../utils';\nimport fastdom from 'fastdom';\nimport { getRegisteredEffect } from './registry';\n\nfunction getElement(id: string | null, ownerDocument?: Document): HTMLElement | null {\n return id ? (ownerDocument || document).getElementById(id) : null;\n}\n\nfunction getElementMotionPart(element: Element | null, part: string) {\n if (element?.matches(`[data-motion-part~=\"${part}\"]`)) {\n return element;\n }\n return element?.querySelector(`[data-motion-part~=\"${part}\"]`);\n}\n\nfunction getDirection(effect: AnimationData): KeyframeEffectOptions['direction'] {\n const alternate = effect.alternate ? 'alternate' : '';\n return effect.reversed\n ? (`${alternate ? `${alternate}-` : ''}reverse` as 'reverse' | 'alternate-reverse')\n : alternate || 'normal';\n}\n\nfunction getLength(length: UnitLengthPercentage): string {\n return `${length.value}${getCssUnits(length.unit)}`;\n}\n\nfunction getRange(range: RangeOffset, add: string | undefined, isEnd?: boolean) {\n // according to the CSS spec if the end range is a <length> then it is calculated from the start of the named range\n // our model assumes that <length> in end range is calculated from the end of the named range\n return `${range.name || 'cover'} ${\n isEnd && range.offset!.unit !== 'percentage'\n ? `calc(100% + ${getLength(range.offset!)}${add ? ` + ${add}` : ''})`\n : add\n ? `calc(${getLength(range.offset!)} + ${add})`\n : getLength(range.offset!)\n }`;\n}\n\nfunction getRanges(effect: AnimationDataForScrub) {\n return {\n start: getRange(effect.startOffset!, effect.startOffsetAdd),\n end: getRange(effect.endOffset!, effect.endOffsetAdd, true),\n };\n}\n\nfunction measure(target: HTMLElement | null): MeasureCallback {\n return (fn) => fastdom.measure(() => fn(target));\n}\n\nfunction mutate(target: HTMLElement | null): MeasureCallback {\n return (fn) => fastdom.mutate(() => fn(target));\n}\n\nfunction getNamedEffect(animation: AnimationOptions) {\n if (animation.namedEffect) {\n const effectName = animation.namedEffect.type;\n return typeof effectName === 'string' ? getRegisteredEffect(effectName) : null;\n } else if (animation.keyframeEffect) {\n const effect = (animation_: AnimationOptions) => {\n const { name, keyframes } = animation_.keyframeEffect!;\n\n return [{ ...animation_, name, keyframes }];\n };\n const getNames = (animation_: AnimationOptions) => {\n const { effectId } = animation_;\n const { name } = animation_.keyframeEffect!;\n const uid = name || effectId;\n\n return uid ? [uid] : [];\n };\n return { web: effect, style: effect, getNames };\n } else if (animation.customEffect) {\n return (animation_: AnimationOptions) => [{ ...animation_, keyframes: [] }];\n }\n return null;\n}\n\nfunction getEffectsData(\n animations: AnimationData[],\n trigger?: Partial<TriggerVariant>,\n effectId?: string,\n) {\n // process each AnimationData object into a KeyframeEffect object\n return animations.map((effect, index) => {\n // prepare the KeyframeEffectOptions object\n const effectOptions = {\n fill: effect.fill,\n easing: getEasing(effect.easing),\n iterations: effect.iterations === 0 ? Infinity : effect.iterations || 1,\n composite: effect.composite,\n direction: getDirection(effect),\n } as KeyframeEffectOptions & { rangeStart: string; rangeEnd: string };\n\n // if this is a time-based animation then set the duration and delay as time values\n if (isNotAScrubTrigger(trigger)) {\n effectOptions.duration = effect.duration as number;\n effectOptions.delay = (effect as TimeAnimationOptions).delay || 0;\n } else {\n // if ViewTimeline is supported AND this is a view-progress trigger\n if (window.ViewTimeline && trigger?.trigger === 'view-progress') {\n // set duration to 'auto'\n effectOptions.duration = 'auto';\n } else {\n // if ViewTimeline not supported then put a 100ms value in duration get a progress we can easily relate to\n // we split the duration to 99.99ms and delay of 0.01ms to get the fill-mode effect working\n effectOptions.duration = 99.99;\n effectOptions.delay = 0.01;\n }\n }\n\n return {\n effect,\n options: effectOptions,\n id: effectId && `${effectId}-${index + 1}`,\n part: effect.part,\n };\n });\n}\n\nfunction isNotAScrubTrigger(trigger?: Partial<TriggerVariant>) {\n return !trigger || (trigger.trigger !== 'pointer-move' && trigger.trigger !== 'view-progress');\n}\n\nexport {\n isNotAScrubTrigger,\n getElement,\n getElementMotionPart,\n getNamedEffect,\n getEffectsData,\n measure,\n mutate,\n getDirection,\n getLength,\n getRanges,\n};\n","import type {\n AnimationData,\n AnimationDataForScrub,\n AnimationEffectAPI,\n AnimationOptions,\n MouseAnimationFactory,\n MouseAnimationInstance,\n ScrubAnimationOptions,\n TriggerVariant,\n WebAnimationEffectFactory,\n} from '../types';\nimport { CustomAnimation } from '../CustomAnimation';\nimport { AnimationGroup } from '../AnimationGroup';\nimport {\n getElement,\n getElementMotionPart,\n measure,\n mutate,\n getRanges,\n getNamedEffect,\n getEffectsData,\n isNotAScrubTrigger,\n} from './common';\nimport fastdom from 'fastdom';\n\nfunction getWebAnimationEffect(\n preset: AnimationEffectAPI<any> | WebAnimationEffectFactory<any> | null,\n animation: AnimationOptions,\n target: HTMLElement | string | null,\n trigger?: Partial<TriggerVariant>,\n options?: Record<string, any>,\n): AnimationData[] | MouseAnimationFactory {\n if (preset) {\n // validate duration is a number over 0\n if (isNotAScrubTrigger(trigger)) {\n animation.duration = animation.duration || 1;\n\n if (options?.reducedMotion) {\n if (animation.iterations === 1 || animation.iterations == undefined) {\n animation = { ...animation, duration: 1 };\n } else {\n return [];\n }\n }\n }\n\n let domApi;\n if (target instanceof HTMLElement) {\n domApi = { measure: measure(target), mutate: mutate(target) };\n }\n\n return (preset as AnimationEffectAPI<any>).web\n ? (preset as AnimationEffectAPI<any>).web(animation, domApi, options)\n : (preset as WebAnimationEffectFactory<any>)(animation, domApi, options);\n }\n\n return [];\n}\n\nfunction getWebAnimation(\n target: HTMLElement | string | null,\n animationOptions: AnimationOptions,\n trigger?: Partial<TriggerVariant> & { element?: HTMLElement },\n options?: Record<string, any>,\n ownerDocument?: Document,\n): AnimationGroup | MouseAnimationInstance | null {\n const element = target instanceof HTMLElement ? target : getElement(target, ownerDocument);\n\n if (trigger?.trigger === 'pointer-move' && !animationOptions.keyframeEffect) {\n let effectOptions = animationOptions;\n\n if (animationOptions.customEffect) {\n effectOptions = {\n ...animationOptions,\n namedEffect: { id: '', type: 'CustomMouse' },\n };\n }\n\n // TODO: need to fix the type here, currently lying about the returned type to be WebAnimationEffectFactory instead of MouseAnimationFactoryCreate\n const mouseAnimationPreset = getNamedEffect(\n effectOptions,\n ) as WebAnimationEffectFactory<'scrub'>;\n const mouseAnimationFactory = getWebAnimationEffect(\n mouseAnimationPreset,\n animationOptions,\n element,\n trigger,\n options,\n ) as MouseAnimationFactory;\n\n if (typeof mouseAnimationFactory !== 'function') {\n return null;\n }\n\n return mouseAnimationFactory(element as HTMLElement);\n }\n\n // get the preset for the given animation options\n const namedEffect = getNamedEffect(animationOptions) as AnimationEffectAPI<any> | null;\n\n const animationsData = getWebAnimationEffect(\n namedEffect,\n animationOptions,\n element,\n trigger,\n options,\n ) as AnimationData[];\n\n // Return null if animation data cannot be generated\n if (!animationsData || animationsData.length === 0) {\n return null;\n }\n\n const data = getEffectsData(animationsData, trigger, animationOptions.effectId);\n\n let timeline: typeof window.ViewTimeline | undefined;\n const isViewProgress = trigger?.trigger === 'view-progress';\n\n // if this is a ScrubAnimation with view-progress trigger and the browser supports the ViewTimeline API\n if (isViewProgress && window.ViewTimeline) {\n // generate the timeline object\n // @ts-expect-error\n timeline = new ViewTimeline({\n subject: trigger.element || getElement(trigger.componentId!),\n });\n }\n\n // generate an Animation object for each data object\n const animations = data.map(({ effect, options: effectOptions, id, part }) => {\n const effectTarget = part ? getElementMotionPart(element, part) : element;\n\n const keyframeEffect = new KeyframeEffect(effectTarget || null, [], effectOptions);\n\n // set the keyframes for the KeyframeEffect after measurements and mutations\n fastdom.mutate(() => {\n if ('timing' in effect) {\n keyframeEffect.updateTiming(effect.timing as OptionalEffectTiming);\n }\n\n keyframeEffect.setKeyframes(effect.keyframes);\n });\n\n const timingOptions =\n isViewProgress && timeline ? { timeline: timeline as AnimationTimeline } : {};\n const animation: Animation | CustomAnimation =\n typeof effect.customEffect === 'function'\n ? (new CustomAnimation(\n effect.customEffect,\n effectTarget || null,\n effectOptions,\n timingOptions,\n ) as Animation)\n : new Animation(keyframeEffect, timingOptions.timeline);\n\n // if this is a ScrubAnimation with view-progress trigger and the browser supports the ViewTimeline API\n if (isViewProgress) {\n if (timeline) {\n // set the ranges for the animation after measurements and mutations\n fastdom.mutate(() => {\n const { start, end } = getRanges(effect as AnimationDataForScrub);\n // @ts-expect-error\n animation.rangeStart = start;\n // @ts-expect-error\n animation.rangeEnd = end;\n\n animation.play();\n });\n } else {\n const { startOffset, endOffset } = animationOptions as ScrubAnimationOptions;\n\n // set the ranges for the animation after measurements and mutations\n fastdom.mutate(() => {\n const startOffsetToWrite = (effect as AnimationDataForScrub).startOffset || startOffset;\n const endOffsetToWrite = (effect as AnimationDataForScrub).endOffset || endOffset;\n\n Object.assign(animation, {\n start: {\n name: startOffsetToWrite!.name,\n offset: startOffsetToWrite!.offset?.value,\n add: (effect as AnimationDataForScrub)!.startOffsetAdd,\n },\n end: {\n name: endOffsetToWrite!.name,\n offset: endOffsetToWrite!.offset?.value,\n add: (effect as AnimationDataForScrub)!.endOffsetAdd,\n },\n });\n });\n }\n }\n\n if (id) {\n animation.id = id;\n }\n\n return animation;\n });\n\n // create an AnimationGroup with the generate animations\n return new AnimationGroup(animations, {\n ...animationOptions,\n trigger: { ...(trigger || ({} as Partial<TriggerVariant>)) },\n // make sure the group is ready after all animation targets are measured and mutated\n measured: new Promise((resolve) => fastdom.mutate(resolve)),\n });\n}\n\nexport { getWebAnimation };\n","import type {\n AnimationData,\n AnimationDataForScrub,\n AnimationEffectAPI,\n AnimationOptions,\n TriggerVariant,\n} from '../types';\nimport { getEffectsData, getRanges, getNamedEffect, isNotAScrubTrigger } from './common';\n\nfunction getAnimationTarget(target: string | null, part: string | undefined) {\n return target ? `#${target}${part ? `[data-motion-part~=\"${part}\"]` : ''}` : '';\n}\n\nfunction getAnimationAsCSS(\n data: {\n effect: AnimationData;\n options: KeyframeEffectOptions;\n id: string | undefined;\n part: string | undefined;\n },\n isRunning?: boolean,\n) {\n const { duration, delay, iterations = 1, fill, easing = 'linear', direction } = data.options;\n const animationName = data.effect.name;\n const isAutoDuration = duration === 'auto';\n\n return `${animationName} ${isAutoDuration ? 'auto' : `${duration}ms`}${\n isAutoDuration ? ' ' : ` ${delay || 1}ms `\n }${easing}${fill && fill !== 'none' ? ` ${fill}` : ''} ${\n !iterations || iterations === Infinity ? 'infinite' : iterations\n }${direction === 'normal' ? '' : ` ${direction}`} ${isRunning ? '' : 'paused'}`;\n}\n\nfunction getCSSAnimationEffect(\n preset: AnimationEffectAPI<any> | null,\n animation: AnimationOptions,\n trigger?: Partial<TriggerVariant>,\n): AnimationData[] {\n if (preset?.style) {\n // validate duration is a number over 0\n if (isNotAScrubTrigger(trigger)) {\n animation.duration = animation.duration || 1;\n }\n\n return preset.style(animation);\n }\n\n return [];\n}\n\nfunction getCSSAnimation(\n target: string | null,\n animationOptions: AnimationOptions,\n trigger?: TriggerVariant,\n) {\n // get the preset for the given animation options\n const namedEffect = getNamedEffect(animationOptions) as AnimationEffectAPI<any> | null;\n\n const animationsData = getCSSAnimationEffect(namedEffect, animationOptions);\n const data = getEffectsData(animationsData, trigger, animationOptions.effectId);\n const isViewProgress = trigger?.trigger === 'view-progress';\n\n return data.map((item, index) => {\n const { start, end }: { start?: string; end?: string } = isViewProgress\n ? getRanges(item.effect as AnimationDataForScrub)\n : {};\n\n return {\n target: getAnimationTarget(target, item.part),\n animation: getAnimationAsCSS(item, isViewProgress),\n composition: item.options.composite,\n custom: item.effect.custom,\n name: item.effect.name,\n keyframes: item.effect.keyframes,\n id: item.id && `${item.id}-${index + 1}`,\n animationTimeline: isViewProgress ? `--${trigger?.id}` : '',\n animationRange: start || end ? `${start} ${end}` : '',\n };\n });\n}\n\nexport { getCSSAnimation, getCSSAnimationEffect, getAnimationAsCSS };\n","import type { AnimationEffectAPI, AnimationOptions, TimeAnimationOptions } from '../types';\nimport { getElement, getNamedEffect, measure, mutate } from './common';\nimport fastdom from 'fastdom';\n\nfunction prepareAnimation(\n target: HTMLElement | string | null,\n animation: AnimationOptions,\n callback?: () => void,\n) {\n const preset = getNamedEffect(animation);\n const element = target instanceof HTMLElement ? target : getElement(target);\n\n if (preset && (preset as AnimationEffectAPI<'time'>).prepare && element) {\n const domApi = { measure: measure(element), mutate: mutate(element) };\n\n (preset as AnimationEffectAPI<'time'>).prepare!(animation as TimeAnimationOptions, domApi);\n }\n\n if (callback) {\n fastdom.mutate(callback);\n }\n}\n\nexport { prepareAnimation };\n","import type {\n AnimationOptions,\n ScrubAnimationOptions,\n TriggerVariant,\n MouseAnimationInstance,\n AnimationEffectAPI,\n CustomMouseAnimationInstance,\n ScrubScrollScene,\n ScrubPointerScene,\n PointerMoveAxis,\n SequenceOptions,\n AnimationGroupArgs,\n} from './types';\nimport { AnimationGroup } from './AnimationGroup';\nimport { Sequence } from './Sequence';\nimport { getEasing, getJsEasing } from './utils';\nimport { getWebAnimation } from './api/webAnimations';\nimport { getCSSAnimation } from './api/cssAnimations';\nimport { prepareAnimation } from './api/prepare';\nimport { getElement, getNamedEffect } from './api/common';\n\nfunction getElementCSSAnimation(\n target: HTMLElement | string | null,\n animationOptions: AnimationOptions,\n): AnimationGroup | null {\n const namedEffect = getNamedEffect(animationOptions) as AnimationEffectAPI<any> | null;\n\n if (!namedEffect) {\n return null;\n }\n\n if (!namedEffect.style) {\n // if this named effect does not have a style method, attempt to get group of Web Animations\n if (animationOptions.effectId && target) {\n return getElementAnimation(target, animationOptions.effectId);\n }\n\n return null;\n }\n\n const effectNames = namedEffect.getNames(animationOptions);\n const element = typeof target === 'string' ? getElement(target) : target;\n const animations = element?.getAnimations();\n const animationNames =\n animations?.map((anim) => (anim as CSSAnimation).animationName) || ([] as string[]);\n const filteredAnimations: CSSAnimation[] = [];\n\n effectNames.forEach((name) => {\n if (animationNames.includes(name)) {\n filteredAnimations.push(\n animations?.find((anim) => (anim as CSSAnimation).animationName === name) as CSSAnimation,\n );\n }\n });\n\n return filteredAnimations?.length ? new AnimationGroup(filteredAnimations) : null;\n}\n\nfunction getElementAnimation(\n target: HTMLElement | string,\n effectId: string,\n): AnimationGroup | null {\n const element = typeof target === 'string' ? getElement(target) : target;\n // somehow get the right animations\n const animations = element?.getAnimations().filter((anim: Animation | CSSAnimation) => {\n const id = anim.id || (anim as CSSAnimation).animationName;\n // if no id/name just return all animations\n return id ? id.startsWith(effectId) : true;\n });\n\n return animations?.length ? new AnimationGroup(animations) : null;\n}\n\nfunction getScrubScene(\n target: HTMLElement | string | null,\n animationOptions: AnimationOptions,\n trigger: Partial<TriggerVariant> & { element?: HTMLElement },\n sceneOptions: Record<string, any> = {},\n): ScrubScrollScene[] | ScrubPointerScene | ScrubPointerScene[] | null {\n const { disabled, allowActiveEvent, ...rest } = sceneOptions;\n const animation = getWebAnimation(target, animationOptions, trigger, rest);\n\n // Return null if animation could not be created\n if (!animation) {\n return null;\n }\n\n let typeSpecificOptions = {} as Record<string, any>;\n\n if (trigger.trigger === 'view-progress' && !window.ViewTimeline) {\n // TODO(ameerf): consider doing this only for bgscrub to not affect the other scroll effects\n const viewSource = trigger.element || getElement(trigger.componentId!);\n const { ready } = animation as AnimationGroup;\n\n return (animation as AnimationGroup).animations.map((partialAnimation) => {\n return {\n /* we use getters for start and end in order to access the animation's start and end\n only when initializing the scrub scene rather than immediately */\n get start() {\n return partialAnimation.start;\n },\n get end() {\n return partialAnimation.end;\n },\n viewSource,\n ready,\n getProgress() {\n return (animation as AnimationGroup).getProgress();\n },\n effect(__: any, p: number) {\n const { activeDuration } = partialAnimation.effect!.getComputedTiming();\n const { delay } = partialAnimation.effect!.getTiming();\n\n partialAnimation.currentTime = ((delay || 0) + ((activeDuration as number) || 0)) * p;\n },\n disabled,\n destroy() {\n partialAnimation.cancel();\n },\n } as ScrubScrollScene;\n });\n } else if (trigger.trigger === 'pointer-move') {\n const scrubOptions = animationOptions as ScrubAnimationOptions;\n const { centeredToTarget, transitionDuration, transitionEasing } = scrubOptions;\n const axis = (trigger as { axis?: PointerMoveAxis }).axis;\n\n if (scrubOptions.keyframeEffect) {\n const animationGroup = animation as AnimationGroup;\n\n if (animationGroup.animations?.length === 0) {\n return null;\n }\n\n const scene: ScrubPointerScene & { _currentProgress: number } = {\n target: undefined,\n centeredToTarget,\n ready: animationGroup.ready,\n _currentProgress: 0,\n getProgress() {\n return this._currentProgress;\n },\n effect(__: any, p: { x: number; y: number }) {\n const linearProgress = axis === 'x' ? p.x : p.y;\n this._currentProgress = linearProgress;\n animationGroup.progress(linearProgress);\n },\n disabled: disabled ?? false,\n destroy() {\n animationGroup.cancel();\n },\n };\n\n return scene;\n }\n\n typeSpecificOptions = {\n centeredToTarget,\n allowActiveEvent,\n };\n\n if (animationOptions.customEffect && transitionDuration) {\n typeSpecificOptions.transitionDuration = transitionDuration;\n // TODO: refactor js easings\n typeSpecificOptions.transitionEasing = getJsEasing(transitionEasing);\n }\n typeSpecificOptions.target = (animation as MouseAnimationInstance).target;\n }\n\n return {\n ...typeSpecificOptions,\n getProgress() {\n return (animation as AnimationGroup | CustomMouseAnimationInstance).getProgress();\n },\n effect(\n __: any,\n p: number | { x: number; y: number },\n v?: { x: number; y: number },\n active?: boolean,\n ) {\n animation.progress(\n v\n ? {\n // @ts-expect-error spread error on p\n ...p,\n v,\n active,\n }\n : p,\n );\n },\n disabled,\n destroy() {\n animation.cancel();\n },\n } as ScrubPointerScene;\n}\n\nfunction getAnimation(\n target: HTMLElement | string | null,\n animationOptions: AnimationOptions,\n trigger?: Partial<TriggerVariant> & { element?: HTMLElement },\n reducedMotion: boolean = false,\n): AnimationGroup | MouseAnimationInstance | null {\n const animation = getElementCSSAnimation(target, animationOptions);\n\n if (animation) {\n animation.ready = new Promise((resolve) => {\n prepareAnimation(target, animationOptions, resolve);\n });\n\n return animation;\n }\n\n return getWebAnimation(target, animationOptions, trigger, { reducedMotion });\n}\n\nfunction resolveTargets(\n target: HTMLElement | HTMLElement[] | string | null,\n): (HTMLElement | null)[] {\n if (target === null) return [null];\n if (typeof target === 'string') {\n return Array.from(document.querySelectorAll<HTMLElement>(target));\n }\n if (Array.isArray(target)) return target;\n\n return [target];\n}\n\n/**\n * Creates AnimationGroup instances from AnimationGroupArgs without wrapping them in a Sequence.\n */\nfunction createAnimationGroups(\n animationGroupArgs: AnimationGroupArgs[],\n context?: Record<string, any>,\n): AnimationGroup[] {\n const groups: AnimationGroup[] = [];\n\n for (const { target, options: animationGroupOptions } of animationGroupArgs) {\n const elements = resolveTargets(target);\n\n for (const element of elements) {\n const result = getAnimation(\n element,\n animationGroupOptions,\n undefined,\n context?.reducedMotion,\n );\n\n if (result instanceof AnimationGroup) {\n groups.push(result);\n }\n }\n }\n\n return groups;\n}\n\n/**\n * Creates a Sequence that coordinates multiple AnimationGroups with staggered delays.\n */\nfunction getSequence(\n options: SequenceOptions,\n animationGroups: AnimationGroupArgs[],\n context?: Record<string, any>,\n): Sequence {\n const groups = createAnimationGroups(animationGroups, context);\n return new Sequence(groups, options);\n}\n\nexport {\n getCSSAnimation,\n getWebAnimation,\n getElementCSSAnimation,\n getElementAnimation,\n getScrubScene,\n prepareAnimation,\n getAnimation,\n getSequence,\n createAnimationGroups,\n getEasing,\n};\n\nexport type { AnimationGroup, Sequence };\n"],"names":["AnimationGroup","animations","options","callback","animation","p","delay","duration","iterations","time","rate","a","target","endEvent","_error","timing","linear","sineIn","sineOut","sineInOut","quadIn","quadOut","quadInOut","cubicIn","cubicOut","cubicInOut","quartIn","quartOut","quartInOut","quintIn","quintOut","quintInOut","expoIn","expoOut","expoInOut","circIn","circOut","circInOut","backIn","backOut","backInOut","k","jsEasings","cssEasings","getCssUnits","unit","getEasing","easing","cubicBezierEasing","x1","y1","x2","y2","cx","bx","ax","cy","by","ay","sampleX","t","sampleY","sampleDX","solveT","x","i","dx","d","lo","hi","xMid","parseCubicBezier","str","m","parseCssLinear","parts","s","stops","part","tokens","output","pcts","v","start","end","startPos","endPos","span","j","resolved","last","mid","b","getJsEasing","named","Sequence","animationGroups","allAnimations","group","g","count","_","offsets","sequenceDuration","groupIdx","animIdx","effect","baseDelay","endDelay","result","activeDuration","max","entries","sorted","index","clampedIndex","flatAnimations","insertAt","sum","CustomAnimation","customEffect","effectOptions","timingOptions","timeline","progress","error","speed","uid","tl","cb","playbackRate","type","listener","event","getDefaultExportFromCjs","win","debug","raf","FastDom","self","tasks","task","fn","ctx","scheduleFlush","remove","props","child","mixin","fastdom","flush","writes","reads","e","array","item","source","key","exports","module","this","registry","registerEffects","effects","getRegisteredEffect","name","getElement","id","ownerDocument","getElementMotionPart","element","getDirection","alternate","getLength","length","getRange","range","add","isEnd","getRanges","measure","mutate","getNamedEffect","effectName","animation_","keyframes","effectId","getEffectsData","trigger","isNotAScrubTrigger","getWebAnimationEffect","preset","domApi","getWebAnimation","animationOptions","mouseAnimationPreset","mouseAnimationFactory","namedEffect","animationsData","data","isViewProgress","effectTarget","keyframeEffect","startOffset","endOffset","startOffsetToWrite","endOffsetToWrite","resolve","getAnimationTarget","getAnimationAsCSS","isRunning","fill","direction","animationName","isAutoDuration","getCSSAnimationEffect","getCSSAnimation","prepareAnimation","getElementCSSAnimation","getElementAnimation","effectNames","animationNames","anim","filteredAnimations","getScrubScene","sceneOptions","disabled","allowActiveEvent","rest","typeSpecificOptions","viewSource","ready","partialAnimation","__","scrubOptions","centeredToTarget","transitionDuration","transitionEasing","axis","animationGroup","linearProgress","active","getAnimation","reducedMotion","resolveTargets","createAnimationGroups","animationGroupArgs","context","groups","animationGroupOptions","elements","getSequence"],"mappings":"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","x_google_ignoreList":[5]}