@bquery/bquery 1.2.0 → 1.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (305) hide show
  1. package/README.md +501 -427
  2. package/dist/batch-4LAvfLE7.js +13 -0
  3. package/dist/batch-4LAvfLE7.js.map +1 -0
  4. package/dist/component/component.d.ts +69 -0
  5. package/dist/component/component.d.ts.map +1 -0
  6. package/dist/component/html.d.ts +35 -0
  7. package/dist/component/html.d.ts.map +1 -0
  8. package/dist/component/index.d.ts +3 -126
  9. package/dist/component/index.d.ts.map +1 -1
  10. package/dist/component/props.d.ts +18 -0
  11. package/dist/component/props.d.ts.map +1 -0
  12. package/dist/component/types.d.ts +77 -0
  13. package/dist/component/types.d.ts.map +1 -0
  14. package/dist/component.es.mjs +90 -59
  15. package/dist/component.es.mjs.map +1 -1
  16. package/dist/core/collection.d.ts +36 -0
  17. package/dist/core/collection.d.ts.map +1 -1
  18. package/dist/core/dom.d.ts +6 -0
  19. package/dist/core/dom.d.ts.map +1 -0
  20. package/dist/core/element.d.ts +8 -0
  21. package/dist/core/element.d.ts.map +1 -1
  22. package/dist/core/index.d.ts +1 -0
  23. package/dist/core/index.d.ts.map +1 -1
  24. package/dist/core/utils/array.d.ts +74 -0
  25. package/dist/core/utils/array.d.ts.map +1 -0
  26. package/dist/core/utils/function.d.ts +70 -0
  27. package/dist/core/utils/function.d.ts.map +1 -0
  28. package/dist/core/utils/index.d.ts +70 -0
  29. package/dist/core/utils/index.d.ts.map +1 -0
  30. package/dist/core/utils/misc.d.ts +63 -0
  31. package/dist/core/utils/misc.d.ts.map +1 -0
  32. package/dist/core/utils/number.d.ts +65 -0
  33. package/dist/core/utils/number.d.ts.map +1 -0
  34. package/dist/core/utils/object.d.ts +133 -0
  35. package/dist/core/utils/object.d.ts.map +1 -0
  36. package/dist/core/utils/string.d.ts +80 -0
  37. package/dist/core/utils/string.d.ts.map +1 -0
  38. package/dist/core/utils/type-guards.d.ts +79 -0
  39. package/dist/core/utils/type-guards.d.ts.map +1 -0
  40. package/dist/core-COenAZjD.js +145 -0
  41. package/dist/core-COenAZjD.js.map +1 -0
  42. package/dist/core.es.mjs +411 -448
  43. package/dist/core.es.mjs.map +1 -1
  44. package/dist/full.d.ts +2 -2
  45. package/dist/full.d.ts.map +1 -1
  46. package/dist/full.es.mjs +87 -64
  47. package/dist/full.es.mjs.map +1 -1
  48. package/dist/full.iife.js +2 -2
  49. package/dist/full.iife.js.map +1 -1
  50. package/dist/full.umd.js +2 -2
  51. package/dist/full.umd.js.map +1 -1
  52. package/dist/index.es.mjs +138 -68
  53. package/dist/index.es.mjs.map +1 -1
  54. package/dist/motion/animate.d.ts +25 -0
  55. package/dist/motion/animate.d.ts.map +1 -0
  56. package/dist/motion/easing.d.ts +30 -0
  57. package/dist/motion/easing.d.ts.map +1 -0
  58. package/dist/motion/flip.d.ts +55 -0
  59. package/dist/motion/flip.d.ts.map +1 -0
  60. package/dist/motion/index.d.ts +11 -138
  61. package/dist/motion/index.d.ts.map +1 -1
  62. package/dist/motion/keyframes.d.ts +21 -0
  63. package/dist/motion/keyframes.d.ts.map +1 -0
  64. package/dist/motion/reduced-motion.d.ts +12 -0
  65. package/dist/motion/reduced-motion.d.ts.map +1 -0
  66. package/dist/motion/scroll.d.ts +15 -0
  67. package/dist/motion/scroll.d.ts.map +1 -0
  68. package/dist/motion/spring.d.ts +42 -0
  69. package/dist/motion/spring.d.ts.map +1 -0
  70. package/dist/motion/stagger.d.ts +22 -0
  71. package/dist/motion/stagger.d.ts.map +1 -0
  72. package/dist/motion/timeline.d.ts +21 -0
  73. package/dist/motion/timeline.d.ts.map +1 -0
  74. package/dist/motion/transition.d.ts +22 -0
  75. package/dist/motion/transition.d.ts.map +1 -0
  76. package/dist/motion/types.d.ts +182 -0
  77. package/dist/motion/types.d.ts.map +1 -0
  78. package/dist/motion.es.mjs +320 -61
  79. package/dist/motion.es.mjs.map +1 -1
  80. package/dist/persisted-Dz_ryNuC.js +278 -0
  81. package/dist/persisted-Dz_ryNuC.js.map +1 -0
  82. package/dist/reactive/batch.d.ts +13 -0
  83. package/dist/reactive/batch.d.ts.map +1 -0
  84. package/dist/reactive/computed.d.ts +50 -0
  85. package/dist/reactive/computed.d.ts.map +1 -0
  86. package/dist/reactive/core.d.ts +60 -0
  87. package/dist/reactive/core.d.ts.map +1 -0
  88. package/dist/reactive/effect.d.ts +15 -0
  89. package/dist/reactive/effect.d.ts.map +1 -0
  90. package/dist/reactive/index.d.ts +2 -2
  91. package/dist/reactive/index.d.ts.map +1 -1
  92. package/dist/reactive/internals.d.ts +36 -0
  93. package/dist/reactive/internals.d.ts.map +1 -0
  94. package/dist/reactive/linked.d.ts +36 -0
  95. package/dist/reactive/linked.d.ts.map +1 -0
  96. package/dist/reactive/persisted.d.ts +14 -0
  97. package/dist/reactive/persisted.d.ts.map +1 -0
  98. package/dist/reactive/readonly.d.ts +26 -0
  99. package/dist/reactive/readonly.d.ts.map +1 -0
  100. package/dist/reactive/signal.d.ts +13 -312
  101. package/dist/reactive/signal.d.ts.map +1 -1
  102. package/dist/reactive/type-guards.d.ts +20 -0
  103. package/dist/reactive/type-guards.d.ts.map +1 -0
  104. package/dist/reactive/untrack.d.ts +29 -0
  105. package/dist/reactive/untrack.d.ts.map +1 -0
  106. package/dist/reactive/watch.d.ts +42 -0
  107. package/dist/reactive/watch.d.ts.map +1 -0
  108. package/dist/reactive.es.mjs +30 -163
  109. package/dist/reactive.es.mjs.map +1 -1
  110. package/dist/router/index.d.ts +6 -252
  111. package/dist/router/index.d.ts.map +1 -1
  112. package/dist/router/links.d.ts +44 -0
  113. package/dist/router/links.d.ts.map +1 -0
  114. package/dist/router/match.d.ts +20 -0
  115. package/dist/router/match.d.ts.map +1 -0
  116. package/dist/router/navigation.d.ts +45 -0
  117. package/dist/router/navigation.d.ts.map +1 -0
  118. package/dist/router/query.d.ts +16 -0
  119. package/dist/router/query.d.ts.map +1 -0
  120. package/dist/router/router.d.ts +34 -0
  121. package/dist/router/router.d.ts.map +1 -0
  122. package/dist/router/state.d.ts +27 -0
  123. package/dist/router/state.d.ts.map +1 -0
  124. package/dist/router/types.d.ts +88 -0
  125. package/dist/router/types.d.ts.map +1 -0
  126. package/dist/router/utils.d.ts +65 -0
  127. package/dist/router/utils.d.ts.map +1 -0
  128. package/dist/router.es.mjs +168 -132
  129. package/dist/router.es.mjs.map +1 -1
  130. package/dist/sanitize-1FBEPAFH.js +272 -0
  131. package/dist/sanitize-1FBEPAFH.js.map +1 -0
  132. package/dist/security/constants.d.ts +42 -0
  133. package/dist/security/constants.d.ts.map +1 -0
  134. package/dist/security/csp.d.ts +24 -0
  135. package/dist/security/csp.d.ts.map +1 -0
  136. package/dist/security/index.d.ts +4 -2
  137. package/dist/security/index.d.ts.map +1 -1
  138. package/dist/security/sanitize-core.d.ts +13 -0
  139. package/dist/security/sanitize-core.d.ts.map +1 -0
  140. package/dist/security/sanitize.d.ts +5 -57
  141. package/dist/security/sanitize.d.ts.map +1 -1
  142. package/dist/security/trusted-types.d.ts +25 -0
  143. package/dist/security/trusted-types.d.ts.map +1 -0
  144. package/dist/security/types.d.ts +36 -0
  145. package/dist/security/types.d.ts.map +1 -0
  146. package/dist/security.es.mjs +50 -277
  147. package/dist/security.es.mjs.map +1 -1
  148. package/dist/store/create-store.d.ts +15 -0
  149. package/dist/store/create-store.d.ts.map +1 -0
  150. package/dist/store/define-store.d.ts +28 -0
  151. package/dist/store/define-store.d.ts.map +1 -0
  152. package/dist/store/devtools.d.ts +22 -0
  153. package/dist/store/devtools.d.ts.map +1 -0
  154. package/dist/store/index.d.ts +10 -286
  155. package/dist/store/index.d.ts.map +1 -1
  156. package/dist/store/mapping.d.ts +28 -0
  157. package/dist/store/mapping.d.ts.map +1 -0
  158. package/dist/store/persisted.d.ts +13 -0
  159. package/dist/store/persisted.d.ts.map +1 -0
  160. package/dist/store/plugins.d.ts +13 -0
  161. package/dist/store/plugins.d.ts.map +1 -0
  162. package/dist/store/registry.d.ts +28 -0
  163. package/dist/store/registry.d.ts.map +1 -0
  164. package/dist/store/types.d.ts +71 -0
  165. package/dist/store/types.d.ts.map +1 -0
  166. package/dist/store/utils.d.ts +28 -0
  167. package/dist/store/utils.d.ts.map +1 -0
  168. package/dist/store/watch.d.ts +23 -0
  169. package/dist/store/watch.d.ts.map +1 -0
  170. package/dist/store.es.mjs +22 -224
  171. package/dist/store.es.mjs.map +1 -1
  172. package/dist/type-guards-DRma3-Kc.js +16 -0
  173. package/dist/type-guards-DRma3-Kc.js.map +1 -0
  174. package/dist/untrack-BuEQKH7_.js +6 -0
  175. package/dist/untrack-BuEQKH7_.js.map +1 -0
  176. package/dist/view/directives/bind.d.ts +7 -0
  177. package/dist/view/directives/bind.d.ts.map +1 -0
  178. package/dist/view/directives/class.d.ts +8 -0
  179. package/dist/view/directives/class.d.ts.map +1 -0
  180. package/dist/view/directives/for.d.ts +23 -0
  181. package/dist/view/directives/for.d.ts.map +1 -0
  182. package/dist/view/directives/html.d.ts +7 -0
  183. package/dist/view/directives/html.d.ts.map +1 -0
  184. package/dist/view/directives/if.d.ts +7 -0
  185. package/dist/view/directives/if.d.ts.map +1 -0
  186. package/dist/view/directives/index.d.ts +12 -0
  187. package/dist/view/directives/index.d.ts.map +1 -0
  188. package/dist/view/directives/model.d.ts +7 -0
  189. package/dist/view/directives/model.d.ts.map +1 -0
  190. package/dist/view/directives/on.d.ts +7 -0
  191. package/dist/view/directives/on.d.ts.map +1 -0
  192. package/dist/view/directives/ref.d.ts +7 -0
  193. package/dist/view/directives/ref.d.ts.map +1 -0
  194. package/dist/view/directives/show.d.ts +7 -0
  195. package/dist/view/directives/show.d.ts.map +1 -0
  196. package/dist/view/directives/style.d.ts +7 -0
  197. package/dist/view/directives/style.d.ts.map +1 -0
  198. package/dist/view/directives/text.d.ts +7 -0
  199. package/dist/view/directives/text.d.ts.map +1 -0
  200. package/dist/view/evaluate.d.ts +43 -0
  201. package/dist/view/evaluate.d.ts.map +1 -0
  202. package/dist/view/index.d.ts +3 -93
  203. package/dist/view/index.d.ts.map +1 -1
  204. package/dist/view/mount.d.ts +69 -0
  205. package/dist/view/mount.d.ts.map +1 -0
  206. package/dist/view/process.d.ts +26 -0
  207. package/dist/view/process.d.ts.map +1 -0
  208. package/dist/view/types.d.ts +36 -0
  209. package/dist/view/types.d.ts.map +1 -0
  210. package/dist/view.es.mjs +368 -267
  211. package/dist/view.es.mjs.map +1 -1
  212. package/dist/watch-CXyaBC_9.js +58 -0
  213. package/dist/watch-CXyaBC_9.js.map +1 -0
  214. package/package.json +132 -132
  215. package/src/component/component.ts +289 -0
  216. package/src/component/html.ts +53 -0
  217. package/src/component/index.ts +40 -414
  218. package/src/component/props.ts +116 -0
  219. package/src/component/types.ts +85 -0
  220. package/src/core/collection.ts +588 -454
  221. package/src/core/dom.ts +38 -0
  222. package/src/core/element.ts +746 -740
  223. package/src/core/index.ts +43 -0
  224. package/src/core/utils/array.ts +102 -0
  225. package/src/core/utils/function.ts +110 -0
  226. package/src/core/utils/index.ts +83 -0
  227. package/src/core/utils/misc.ts +82 -0
  228. package/src/core/utils/number.ts +78 -0
  229. package/src/core/utils/object.ts +206 -0
  230. package/src/core/utils/string.ts +112 -0
  231. package/src/core/utils/type-guards.ts +112 -0
  232. package/src/full.ts +187 -150
  233. package/src/index.ts +36 -36
  234. package/src/motion/animate.ts +113 -0
  235. package/src/motion/easing.ts +40 -0
  236. package/src/motion/flip.ts +176 -0
  237. package/src/motion/index.ts +41 -358
  238. package/src/motion/keyframes.ts +46 -0
  239. package/src/motion/reduced-motion.ts +17 -0
  240. package/src/motion/scroll.ts +57 -0
  241. package/src/motion/spring.ts +150 -0
  242. package/src/motion/stagger.ts +43 -0
  243. package/src/motion/timeline.ts +246 -0
  244. package/src/motion/transition.ts +51 -0
  245. package/src/motion/types.ts +198 -0
  246. package/src/reactive/batch.ts +22 -0
  247. package/src/reactive/computed.ts +92 -0
  248. package/src/reactive/core.ts +93 -0
  249. package/src/reactive/effect.ts +43 -0
  250. package/src/reactive/index.ts +23 -22
  251. package/src/reactive/internals.ts +105 -0
  252. package/src/reactive/linked.ts +56 -0
  253. package/src/reactive/persisted.ts +74 -0
  254. package/src/reactive/readonly.ts +35 -0
  255. package/src/reactive/signal.ts +20 -520
  256. package/src/reactive/type-guards.ts +22 -0
  257. package/src/reactive/untrack.ts +31 -0
  258. package/src/reactive/watch.ts +73 -0
  259. package/src/router/index.ts +41 -718
  260. package/src/router/links.ts +130 -0
  261. package/src/router/match.ts +106 -0
  262. package/src/router/navigation.ts +71 -0
  263. package/src/router/query.ts +35 -0
  264. package/src/router/router.ts +211 -0
  265. package/src/router/state.ts +46 -0
  266. package/src/router/types.ts +93 -0
  267. package/src/router/utils.ts +116 -0
  268. package/src/security/constants.ts +209 -0
  269. package/src/security/csp.ts +77 -0
  270. package/src/security/index.ts +4 -12
  271. package/src/security/sanitize-core.ts +343 -0
  272. package/src/security/sanitize.ts +66 -625
  273. package/src/security/trusted-types.ts +69 -0
  274. package/src/security/types.ts +40 -0
  275. package/src/store/create-store.ts +329 -0
  276. package/src/store/define-store.ts +48 -0
  277. package/src/store/devtools.ts +45 -0
  278. package/src/store/index.ts +22 -848
  279. package/src/store/mapping.ts +73 -0
  280. package/src/store/persisted.ts +61 -0
  281. package/src/store/plugins.ts +32 -0
  282. package/src/store/registry.ts +51 -0
  283. package/src/store/types.ts +94 -0
  284. package/src/store/utils.ts +141 -0
  285. package/src/store/watch.ts +52 -0
  286. package/src/view/directives/bind.ts +23 -0
  287. package/src/view/directives/class.ts +70 -0
  288. package/src/view/directives/for.ts +275 -0
  289. package/src/view/directives/html.ts +19 -0
  290. package/src/view/directives/if.ts +30 -0
  291. package/src/view/directives/index.ts +11 -0
  292. package/src/view/directives/model.ts +56 -0
  293. package/src/view/directives/on.ts +41 -0
  294. package/src/view/directives/ref.ts +41 -0
  295. package/src/view/directives/show.ts +26 -0
  296. package/src/view/directives/style.ts +47 -0
  297. package/src/view/directives/text.ts +15 -0
  298. package/src/view/evaluate.ts +274 -0
  299. package/src/view/index.ts +112 -1041
  300. package/src/view/mount.ts +200 -0
  301. package/src/view/process.ts +92 -0
  302. package/src/view/types.ts +44 -0
  303. package/dist/core/utils.d.ts +0 -313
  304. package/dist/core/utils.d.ts.map +0 -1
  305. package/src/core/utils.ts +0 -444
@@ -0,0 +1,21 @@
1
+ /**
2
+ * Timeline and sequence helpers.
3
+ *
4
+ * @module bquery/motion
5
+ */
6
+ import type { SequenceOptions, SequenceStep, TimelineConfig, TimelineControls, TimelineStep } from './types';
7
+ /**
8
+ * Run a list of animations sequentially.
9
+ *
10
+ * @param steps - Steps to run in order
11
+ * @param options - Sequence configuration
12
+ */
13
+ export declare const sequence: (steps: SequenceStep[], options?: SequenceOptions) => Promise<void>;
14
+ /**
15
+ * Create a timeline controller for multiple animations.
16
+ *
17
+ * @param initialSteps - Steps for the timeline
18
+ * @param config - Timeline configuration
19
+ */
20
+ export declare const timeline: (initialSteps?: TimelineStep[], config?: TimelineConfig) => TimelineControls;
21
+ //# sourceMappingURL=timeline.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"timeline.d.ts","sourceRoot":"","sources":["../../src/motion/timeline.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAIH,OAAO,KAAK,EACV,eAAe,EACf,YAAY,EACZ,cAAc,EACd,gBAAgB,EAChB,YAAY,EACb,MAAM,SAAS,CAAC;AAoEjB;;;;;GAKG;AACH,eAAO,MAAM,QAAQ,GACnB,OAAO,YAAY,EAAE,EACrB,UAAS,eAAoB,KAC5B,OAAO,CAAC,IAAI,CAcd,CAAC;AAEF;;;;;GAKG;AACH,eAAO,MAAM,QAAQ,GACnB,eAAc,YAAY,EAAO,EACjC,SAAQ,cAAmB,KAC1B,gBAiIF,CAAC"}
@@ -0,0 +1,22 @@
1
+ /**
2
+ * View transition helpers.
3
+ *
4
+ * @module bquery/motion
5
+ */
6
+ import type { TransitionOptions } from './types';
7
+ /**
8
+ * Execute a DOM update with view transition animation.
9
+ * Falls back to immediate update when View Transitions API is unavailable.
10
+ *
11
+ * @param updateOrOptions - Update function or options object
12
+ * @returns Promise that resolves when transition completes
13
+ *
14
+ * @example
15
+ * ```ts
16
+ * await transition(() => {
17
+ * $('#content').text('Updated');
18
+ * });
19
+ * ```
20
+ */
21
+ export declare const transition: (updateOrOptions: (() => void) | TransitionOptions) => Promise<void>;
22
+ //# sourceMappingURL=transition.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"transition.d.ts","sourceRoot":"","sources":["../../src/motion/transition.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,SAAS,CAAC;AAWjD;;;;;;;;;;;;;GAaG;AACH,eAAO,MAAM,UAAU,GACrB,iBAAiB,CAAC,MAAM,IAAI,CAAC,GAAG,iBAAiB,KAChD,OAAO,CAAC,IAAI,CAiBd,CAAC"}
@@ -0,0 +1,182 @@
1
+ /**
2
+ * Shared Motion module types.
3
+ *
4
+ * @module bquery/motion
5
+ */
6
+ /**
7
+ * Options for view transitions.
8
+ */
9
+ export interface TransitionOptions {
10
+ /** The DOM update function to execute during transition */
11
+ update: () => void;
12
+ }
13
+ /**
14
+ * Captured element bounds for FLIP animations.
15
+ */
16
+ export interface ElementBounds {
17
+ top: number;
18
+ left: number;
19
+ width: number;
20
+ height: number;
21
+ }
22
+ /**
23
+ * FLIP animation configuration options.
24
+ */
25
+ export interface FlipOptions {
26
+ /** Animation duration in milliseconds */
27
+ duration?: number;
28
+ /** CSS easing function */
29
+ easing?: string;
30
+ /** Callback when animation completes */
31
+ onComplete?: () => void;
32
+ }
33
+ /**
34
+ * Stagger delay function signature.
35
+ */
36
+ export type StaggerFunction = (index: number, total: number) => number;
37
+ /**
38
+ * Extended options for group FLIP animations.
39
+ */
40
+ export interface FlipGroupOptions extends FlipOptions {
41
+ /** Optional stagger delay function */
42
+ stagger?: StaggerFunction;
43
+ }
44
+ /**
45
+ * Spring physics configuration.
46
+ */
47
+ export interface SpringConfig {
48
+ /** Spring stiffness (default: 100) */
49
+ stiffness?: number;
50
+ /** Damping coefficient (default: 10) */
51
+ damping?: number;
52
+ /** Mass of the object (default: 1) */
53
+ mass?: number;
54
+ /** Velocity threshold for completion (default: 0.01) */
55
+ precision?: number;
56
+ }
57
+ /**
58
+ * Spring instance for animating values.
59
+ */
60
+ export interface Spring {
61
+ /** Start animating to target value */
62
+ to(target: number): Promise<void>;
63
+ /** Get current animated value */
64
+ current(): number;
65
+ /** Stop the animation */
66
+ stop(): void;
67
+ /** Subscribe to value changes */
68
+ onChange(callback: (value: number) => void): () => void;
69
+ }
70
+ /**
71
+ * Web Animations helper configuration.
72
+ */
73
+ export interface AnimateOptions {
74
+ /** Keyframes to animate */
75
+ keyframes: Keyframe[] | PropertyIndexedKeyframes;
76
+ /** Animation options (duration, easing, etc.) */
77
+ options?: KeyframeAnimationOptions;
78
+ /** Commit final styles to the element (default: true) */
79
+ commitStyles?: boolean;
80
+ /** Respect prefers-reduced-motion (default: true) */
81
+ respectReducedMotion?: boolean;
82
+ /** Callback when animation completes */
83
+ onFinish?: () => void;
84
+ }
85
+ /**
86
+ * Stagger helper configuration.
87
+ */
88
+ export interface StaggerOptions {
89
+ /** Start delay in milliseconds (default: 0) */
90
+ start?: number;
91
+ /** Origin index or keyword (default: 'start') */
92
+ from?: 'start' | 'center' | 'end' | number;
93
+ /** Optional easing function for normalized distance */
94
+ easing?: EasingFunction;
95
+ }
96
+ /**
97
+ * Easing function signature.
98
+ */
99
+ export type EasingFunction = (t: number) => number;
100
+ /**
101
+ * Sequence step configuration.
102
+ */
103
+ export interface SequenceStep extends AnimateOptions {
104
+ /** Target element to animate */
105
+ target: Element;
106
+ }
107
+ /**
108
+ * Sequence run configuration.
109
+ */
110
+ export interface SequenceOptions {
111
+ /** Optional stagger delay between steps */
112
+ stagger?: StaggerFunction;
113
+ /** Callback when sequence completes */
114
+ onFinish?: () => void;
115
+ }
116
+ /**
117
+ * Timeline step configuration.
118
+ */
119
+ export interface TimelineStep {
120
+ /** Target element to animate */
121
+ target: Element;
122
+ /** Keyframes to animate */
123
+ keyframes: Keyframe[] | PropertyIndexedKeyframes;
124
+ /** Animation options for this step */
125
+ options?: KeyframeAnimationOptions;
126
+ /** Absolute or relative start time in milliseconds */
127
+ at?: number | `+=${number}` | `-=${number}`;
128
+ /** Optional label for debugging */
129
+ label?: string;
130
+ }
131
+ /**
132
+ * Timeline configuration.
133
+ */
134
+ export interface TimelineConfig {
135
+ /** Commit final styles when timeline completes (default: true) */
136
+ commitStyles?: boolean;
137
+ /** Respect prefers-reduced-motion (default: true) */
138
+ respectReducedMotion?: boolean;
139
+ /** Callback when timeline completes */
140
+ onFinish?: () => void;
141
+ }
142
+ /**
143
+ * Timeline controls.
144
+ */
145
+ export interface TimelineControls {
146
+ /** Play all steps */
147
+ play(): Promise<void>;
148
+ /** Pause animations */
149
+ pause(): void;
150
+ /** Resume animations */
151
+ resume(): void;
152
+ /** Stop and cancel animations */
153
+ stop(): void;
154
+ /** Seek to a specific time in milliseconds */
155
+ seek(time: number): void;
156
+ /** Add a step to the timeline */
157
+ add(step: TimelineStep): void;
158
+ /** Total timeline duration in milliseconds */
159
+ duration(): number;
160
+ /** Subscribe to finish events */
161
+ onFinish(callback: () => void): () => void;
162
+ }
163
+ /**
164
+ * Scroll animation configuration.
165
+ */
166
+ export interface ScrollAnimateOptions extends AnimateOptions {
167
+ /** IntersectionObserver root */
168
+ root?: Element | Document | null;
169
+ /** Root margin for observer */
170
+ rootMargin?: string;
171
+ /** Intersection thresholds */
172
+ threshold?: number | number[];
173
+ /** Trigger only once (default: true) */
174
+ once?: boolean;
175
+ /** Callback when element enters the viewport */
176
+ onEnter?: (element: Element) => void;
177
+ }
178
+ /**
179
+ * Cleanup function for scroll animations.
180
+ */
181
+ export type ScrollAnimateCleanup = () => void;
182
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/motion/types.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH;;GAEG;AACH,MAAM,WAAW,iBAAiB;IAChC,2DAA2D;IAC3D,MAAM,EAAE,MAAM,IAAI,CAAC;CACpB;AAED;;GAEG;AACH,MAAM,WAAW,aAAa;IAC5B,GAAG,EAAE,MAAM,CAAC;IACZ,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;CAChB;AAED;;GAEG;AACH,MAAM,WAAW,WAAW;IAC1B,yCAAyC;IACzC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,0BAA0B;IAC1B,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,wCAAwC;IACxC,UAAU,CAAC,EAAE,MAAM,IAAI,CAAC;CACzB;AAED;;GAEG;AACH,MAAM,MAAM,eAAe,GAAG,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,KAAK,MAAM,CAAC;AAEvE;;GAEG;AACH,MAAM,WAAW,gBAAiB,SAAQ,WAAW;IACnD,sCAAsC;IACtC,OAAO,CAAC,EAAE,eAAe,CAAC;CAC3B;AAED;;GAEG;AACH,MAAM,WAAW,YAAY;IAC3B,sCAAsC;IACtC,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,wCAAwC;IACxC,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,sCAAsC;IACtC,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,wDAAwD;IACxD,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED;;GAEG;AACH,MAAM,WAAW,MAAM;IACrB,sCAAsC;IACtC,EAAE,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAClC,iCAAiC;IACjC,OAAO,IAAI,MAAM,CAAC;IAClB,yBAAyB;IACzB,IAAI,IAAI,IAAI,CAAC;IACb,iCAAiC;IACjC,QAAQ,CAAC,QAAQ,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,GAAG,MAAM,IAAI,CAAC;CACzD;AAED;;GAEG;AACH,MAAM,WAAW,cAAc;IAC7B,2BAA2B;IAC3B,SAAS,EAAE,QAAQ,EAAE,GAAG,wBAAwB,CAAC;IACjD,iDAAiD;IACjD,OAAO,CAAC,EAAE,wBAAwB,CAAC;IACnC,yDAAyD;IACzD,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,qDAAqD;IACrD,oBAAoB,CAAC,EAAE,OAAO,CAAC;IAC/B,wCAAwC;IACxC,QAAQ,CAAC,EAAE,MAAM,IAAI,CAAC;CACvB;AAED;;GAEG;AACH,MAAM,WAAW,cAAc;IAC7B,+CAA+C;IAC/C,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,iDAAiD;IACjD,IAAI,CAAC,EAAE,OAAO,GAAG,QAAQ,GAAG,KAAK,GAAG,MAAM,CAAC;IAC3C,uDAAuD;IACvD,MAAM,CAAC,EAAE,cAAc,CAAC;CACzB;AAED;;GAEG;AACH,MAAM,MAAM,cAAc,GAAG,CAAC,CAAC,EAAE,MAAM,KAAK,MAAM,CAAC;AAEnD;;GAEG;AACH,MAAM,WAAW,YAAa,SAAQ,cAAc;IAClD,gCAAgC;IAChC,MAAM,EAAE,OAAO,CAAC;CACjB;AAED;;GAEG;AACH,MAAM,WAAW,eAAe;IAC9B,2CAA2C;IAC3C,OAAO,CAAC,EAAE,eAAe,CAAC;IAC1B,uCAAuC;IACvC,QAAQ,CAAC,EAAE,MAAM,IAAI,CAAC;CACvB;AAED;;GAEG;AACH,MAAM,WAAW,YAAY;IAC3B,gCAAgC;IAChC,MAAM,EAAE,OAAO,CAAC;IAChB,2BAA2B;IAC3B,SAAS,EAAE,QAAQ,EAAE,GAAG,wBAAwB,CAAC;IACjD,sCAAsC;IACtC,OAAO,CAAC,EAAE,wBAAwB,CAAC;IACnC,sDAAsD;IACtD,EAAE,CAAC,EAAE,MAAM,GAAG,KAAK,MAAM,EAAE,GAAG,KAAK,MAAM,EAAE,CAAC;IAC5C,mCAAmC;IACnC,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED;;GAEG;AACH,MAAM,WAAW,cAAc;IAC7B,kEAAkE;IAClE,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,qDAAqD;IACrD,oBAAoB,CAAC,EAAE,OAAO,CAAC;IAC/B,uCAAuC;IACvC,QAAQ,CAAC,EAAE,MAAM,IAAI,CAAC;CACvB;AAED;;GAEG;AACH,MAAM,WAAW,gBAAgB;IAC/B,qBAAqB;IACrB,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;IACtB,uBAAuB;IACvB,KAAK,IAAI,IAAI,CAAC;IACd,wBAAwB;IACxB,MAAM,IAAI,IAAI,CAAC;IACf,iCAAiC;IACjC,IAAI,IAAI,IAAI,CAAC;IACb,8CAA8C;IAC9C,IAAI,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,iCAAiC;IACjC,GAAG,CAAC,IAAI,EAAE,YAAY,GAAG,IAAI,CAAC;IAC9B,8CAA8C;IAC9C,QAAQ,IAAI,MAAM,CAAC;IACnB,iCAAiC;IACjC,QAAQ,CAAC,QAAQ,EAAE,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC;CAC5C;AAED;;GAEG;AACH,MAAM,WAAW,oBAAqB,SAAQ,cAAc;IAC1D,gCAAgC;IAChC,IAAI,CAAC,EAAE,OAAO,GAAG,QAAQ,GAAG,IAAI,CAAC;IACjC,+BAA+B;IAC/B,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,8BAA8B;IAC9B,SAAS,CAAC,EAAE,MAAM,GAAG,MAAM,EAAE,CAAC;IAC9B,wCAAwC;IACxC,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,gDAAgD;IAChD,OAAO,CAAC,EAAE,CAAC,OAAO,EAAE,OAAO,KAAK,IAAI,CAAC;CACtC;AAED;;GAEG;AACH,MAAM,MAAM,oBAAoB,GAAG,MAAM,IAAI,CAAC"}
@@ -1,89 +1,192 @@
1
- const $ = async (e) => {
2
- const t = typeof e == "function" ? e : e.update, c = document;
3
- if (c.startViewTransition) {
4
- await c.startViewTransition(() => t()).finished;
1
+ const A = () => typeof window > "u" || typeof window.matchMedia != "function" ? !1 : window.matchMedia("(prefers-reduced-motion: reduce)").matches, $ = (t) => typeof t == "string" || typeof t == "number", v = (t) => t.replace(/[A-Z]/g, (e) => `-${e.toLowerCase()}`), w = (t, e) => {
2
+ const r = t.style;
3
+ if (Array.isArray(e)) {
4
+ const o = e[e.length - 1];
5
+ if (!o) return;
6
+ for (const [i, s] of Object.entries(o))
7
+ if (!(i === "offset" || i === "easing" || i === "composite") && $(s)) {
8
+ const a = i.startsWith("--") ? i : v(i);
9
+ r.setProperty(a, String(s));
10
+ }
5
11
  return;
6
12
  }
7
- t();
8
- }, h = (e) => {
9
- const t = e.getBoundingClientRect();
13
+ for (const [o, i] of Object.entries(e)) {
14
+ if (o === "offset" || o === "easing" || o === "composite") continue;
15
+ const s = Array.isArray(i) ? i[i.length - 1] : i;
16
+ if ($(s)) {
17
+ const a = o.startsWith("--") ? o : v(o);
18
+ r.setProperty(a, String(s));
19
+ }
20
+ }
21
+ }, P = (t, e) => {
22
+ const { keyframes: n, options: r, commitStyles: o = !0, respectReducedMotion: i = !0, onFinish: s } = e;
23
+ if (i && A())
24
+ return o && w(t, n), s?.(), Promise.resolve();
25
+ const a = t;
26
+ return typeof a.animate != "function" ? (o && w(t, n), s?.(), Promise.resolve()) : new Promise((m) => {
27
+ const f = a.animate(n, r);
28
+ let u = !1;
29
+ const p = () => {
30
+ u || (u = !0, o && (typeof f.commitStyles == "function" ? f.commitStyles() : w(t, n)), f.cancel(), s?.(), m());
31
+ };
32
+ f.onfinish = p, f.finished && f.finished.then(p).catch(p);
33
+ });
34
+ }, y = (t) => Math.min(1, Math.max(0, t)), C = (t) => y(t), D = (t) => y(t * t), T = (t) => y(1 - (1 - t) * (1 - t)), z = (t) => y(t < 0.5 ? 2 * t * t : 1 - Math.pow(-2 * t + 2, 2) / 2), R = (t) => y(t * t * t), X = (t) => y(1 - Math.pow(1 - t, 3)), L = (t) => y(t < 0.5 ? 4 * t * t * t : 1 - Math.pow(-2 * t + 2, 3) / 2), W = (t) => y(1 + 2.70158 * Math.pow(t - 1, 3) + 1.70158 * Math.pow(t - 1, 2)), Y = (t) => y(t === 1 ? 1 : 1 - Math.pow(2, -10 * t)), G = {
35
+ linear: C,
36
+ easeInQuad: D,
37
+ easeOutQuad: T,
38
+ easeInOutQuad: z,
39
+ easeInCubic: R,
40
+ easeOutCubic: X,
41
+ easeInOutCubic: L,
42
+ easeOutBack: W,
43
+ easeOutExpo: Y
44
+ }, S = (t) => {
45
+ const e = t.getBoundingClientRect();
10
46
  return {
11
- top: t.top,
12
- left: t.left,
13
- width: t.width,
14
- height: t.height
47
+ top: e.top,
48
+ left: e.left,
49
+ width: e.width,
50
+ height: e.height
15
51
  };
16
- }, P = (e, t, c = {}) => {
17
- const { duration: m = 300, easing: p = "ease-out", onComplete: i } = c, n = h(e);
18
- if (n.width === 0 || n.height === 0)
19
- return Promise.resolve();
20
- const o = t.left - n.left, f = t.top - n.top, s = t.width / n.width, a = t.height / n.height;
21
- if (o === 0 && f === 0 && s === 1 && a === 1)
22
- return Promise.resolve();
23
- const r = e;
24
- return r.style.transform = `translate(${o}px, ${f}px) scale(${s}, ${a})`, r.style.transformOrigin = "top left", r.offsetHeight, new Promise((u) => {
25
- const d = r.animate(
52
+ }, x = (t, e, n = {}) => {
53
+ const { duration: r = 300, easing: o = "ease-out", onComplete: i } = n, s = S(t);
54
+ if (s.width === 0 || s.height === 0)
55
+ return i?.(), Promise.resolve();
56
+ const a = e.left - s.left, m = e.top - s.top, f = e.width / s.width, u = e.height / s.height;
57
+ if (a === 0 && m === 0 && f === 1 && u === 1)
58
+ return i?.(), Promise.resolve();
59
+ const p = t;
60
+ return typeof p.animate != "function" ? (i?.(), Promise.resolve()) : (p.style.transform = `translate(${a}px, ${m}px) scale(${f}, ${u})`, p.style.transformOrigin = "top left", p.offsetHeight, new Promise((h) => {
61
+ const c = p.animate(
26
62
  [
27
63
  {
28
- transform: `translate(${o}px, ${f}px) scale(${s}, ${a})`
64
+ transform: `translate(${a}px, ${m}px) scale(${f}, ${u})`
29
65
  },
30
66
  { transform: "translate(0, 0) scale(1, 1)" }
31
67
  ],
32
- { duration: m, easing: p, fill: "forwards" }
68
+ { duration: r, easing: o, fill: "forwards" }
33
69
  );
34
- d.onfinish = () => {
35
- r.style.transform = "", r.style.transformOrigin = "", i?.(), u();
70
+ let d = !1;
71
+ const l = () => {
72
+ d || (d = !0, p.style.transform = "", p.style.transformOrigin = "", i?.(), h());
36
73
  };
74
+ c.onfinish = l, c.finished && c.finished.then(l).catch(l);
75
+ }));
76
+ }, Q = async (t, e, n = {}) => {
77
+ await _(t, e, n);
78
+ }, _ = async (t, e, n = {}) => {
79
+ const { stagger: r, ...o } = n, i = /* @__PURE__ */ new Map();
80
+ for (const m of t)
81
+ i.set(m, S(m));
82
+ e();
83
+ const s = t.length, a = t.map((m, f) => {
84
+ const u = i.get(m);
85
+ if (!u) return Promise.resolve();
86
+ const p = r ? r(f, s) : 0;
87
+ return p > 0 ? new Promise((h) => setTimeout(h, p)).then(
88
+ () => x(m, u, o)
89
+ ) : x(m, u, o);
37
90
  });
38
- }, v = async (e, t, c = {}) => {
39
- const m = /* @__PURE__ */ new Map();
40
- for (const i of e)
41
- m.set(i, h(i));
42
- t();
43
- const p = e.map((i) => {
44
- const n = m.get(i);
45
- return n ? P(i, n, c) : Promise.resolve();
46
- });
47
- await Promise.all(p);
48
- }, F = {
91
+ await Promise.all(a);
92
+ }, j = {
93
+ fadeIn: (t = 0, e = 1) => [{ opacity: t }, { opacity: e }],
94
+ fadeOut: (t = 1, e = 0) => [{ opacity: t }, { opacity: e }],
95
+ slideInUp: (t = 16) => [
96
+ { opacity: 0, transform: `translateY(${t}px)` },
97
+ { opacity: 1, transform: "translateY(0)" }
98
+ ],
99
+ slideInDown: (t = 16) => [
100
+ { opacity: 0, transform: `translateY(-${t}px)` },
101
+ { opacity: 1, transform: "translateY(0)" }
102
+ ],
103
+ slideInLeft: (t = 16) => [
104
+ { opacity: 0, transform: `translateX(${t}px)` },
105
+ { opacity: 1, transform: "translateX(0)" }
106
+ ],
107
+ slideInRight: (t = 16) => [
108
+ { opacity: 0, transform: `translateX(-${t}px)` },
109
+ { opacity: 1, transform: "translateX(0)" }
110
+ ],
111
+ scaleIn: (t = 0.95, e = 1) => [
112
+ { opacity: 0, transform: `scale(${t})` },
113
+ { opacity: 1, transform: `scale(${e})` }
114
+ ],
115
+ scaleOut: (t = 1, e = 0.95) => [
116
+ { opacity: 1, transform: `scale(${t})` },
117
+ { opacity: 0, transform: `scale(${e})` }
118
+ ],
119
+ pop: (t = 0.9, e = 1.02, n = 1) => [
120
+ { opacity: 0, transform: `scale(${t})` },
121
+ { opacity: 1, transform: `scale(${e})`, offset: 0.6 },
122
+ { opacity: 1, transform: `scale(${n})` }
123
+ ],
124
+ rotateIn: (t = 6) => [
125
+ { opacity: 0, transform: `rotate(${t}deg) scale(0.98)` },
126
+ { opacity: 1, transform: "rotate(0deg) scale(1)" }
127
+ ]
128
+ }, U = (t) => typeof Element < "u" && t instanceof Element ? [t] : Array.from(t), H = (t, e) => {
129
+ const n = U(t);
130
+ if (!n.length) return () => {
131
+ };
132
+ const { root: r = null, rootMargin: o, threshold: i, once: s = !0, onEnter: a, ...m } = e;
133
+ if (typeof IntersectionObserver > "u")
134
+ return n.forEach((u) => {
135
+ a?.(u), P(u, m);
136
+ }), () => {
137
+ };
138
+ const f = new IntersectionObserver(
139
+ (u) => {
140
+ u.forEach((p) => {
141
+ if (!p.isIntersecting) return;
142
+ const h = p.target;
143
+ a?.(h), P(h, m), s && f.unobserve(h);
144
+ });
145
+ },
146
+ { root: r, rootMargin: o, threshold: i }
147
+ );
148
+ return n.forEach((u) => f.observe(u)), () => f.disconnect();
149
+ }, V = {
49
150
  stiffness: 100,
50
151
  damping: 10,
51
152
  mass: 1,
52
153
  precision: 0.01
53
- }, x = (e, t = {}) => {
54
- const { stiffness: c, damping: m, mass: p, precision: i } = {
55
- ...F,
56
- ...t
154
+ }, K = (t, e = {}) => {
155
+ const { stiffness: n, damping: r, mass: o, precision: i } = {
156
+ ...V,
157
+ ...e
57
158
  };
58
- let n = e, o = 0, f = e, s = null, a = null;
59
- const r = /* @__PURE__ */ new Set(), u = () => {
60
- for (const l of r)
61
- l(n);
62
- }, d = () => {
63
- const l = n - f, g = -c * l, w = -m * o, y = (g + w) / p;
64
- if (o += y * (1 / 60), n += o * (1 / 60), u(), Math.abs(o) < i && Math.abs(l) < i) {
65
- n = f, o = 0, s = null, u(), a?.(), a = null;
159
+ let s = t, a = 0, m = t, f = null, u = null, p = null;
160
+ const h = /* @__PURE__ */ new Set(), c = () => {
161
+ for (const l of h)
162
+ l(s);
163
+ }, d = (l) => {
164
+ const g = p !== null ? (l - p) / 1e3 : 0.016666666666666666, M = Math.min(g, 1 / 30);
165
+ p = l;
166
+ const b = s - m, F = -n * b, N = -r * a, O = (F + N) / o;
167
+ if (a += O * M, s += a * M, c(), Math.abs(a) < i && Math.abs(b) < i) {
168
+ s = m, a = 0, f = null, c(), u?.(), u = null;
66
169
  return;
67
170
  }
68
- s = requestAnimationFrame(d);
171
+ f = requestAnimationFrame(d);
69
172
  };
70
173
  return {
71
174
  to(l) {
72
- return f = l, s !== null && cancelAnimationFrame(s), new Promise((g) => {
73
- a = g, s = requestAnimationFrame(d);
175
+ return m = l, f !== null && cancelAnimationFrame(f), u?.(), p = null, new Promise((g) => {
176
+ u = g, f = requestAnimationFrame(d);
74
177
  });
75
178
  },
76
179
  current() {
77
- return n;
180
+ return s;
78
181
  },
79
182
  stop() {
80
- s !== null && (cancelAnimationFrame(s), s = null), o = 0, a?.(), a = null;
183
+ f !== null && (cancelAnimationFrame(f), f = null), a = 0, p = null, u?.(), u = null;
81
184
  },
82
185
  onChange(l) {
83
- return r.add(l), () => r.delete(l);
186
+ return h.add(l), () => h.delete(l);
84
187
  }
85
188
  };
86
- }, A = {
189
+ }, Z = {
87
190
  /** Gentle, slow-settling spring */
88
191
  gentle: { stiffness: 80, damping: 15 },
89
192
  /** Responsive, snappy spring */
@@ -92,13 +195,169 @@ const $ = async (e) => {
92
195
  bouncy: { stiffness: 300, damping: 8 },
93
196
  /** Stiff, quick spring with minimal overshoot */
94
197
  stiff: { stiffness: 400, damping: 30 }
198
+ }, B = (t, e = {}) => {
199
+ const { start: n = 0, from: r = "start", easing: o } = e;
200
+ return (i, s = 0) => {
201
+ const a = typeof r == "number" ? r : r === "center" ? (s - 1) / 2 : r === "end" ? s - 1 : 0, m = Math.abs(i - a), f = s > 1 ? Math.max(a, s - 1 - a) : 1, u = f === 0 ? 0 : m / f, p = o ? o(u) * f : m;
202
+ return n + p * t;
203
+ };
204
+ }, E = (t) => {
205
+ if (typeof t == "number") return t;
206
+ if (typeof t == "string") {
207
+ const e = t.trim();
208
+ if (e.endsWith("ms")) {
209
+ const r = Number.parseFloat(e.slice(0, -2));
210
+ return Number.isFinite(r) ? r : 0;
211
+ }
212
+ if (e.endsWith("s")) {
213
+ const r = Number.parseFloat(e.slice(0, -1));
214
+ return Number.isFinite(r) ? r * 1e3 : 0;
215
+ }
216
+ const n = Number.parseFloat(e);
217
+ return Number.isFinite(n) ? n : 0;
218
+ }
219
+ return 0;
220
+ }, k = (t, e) => {
221
+ if (typeof t == "number") return t;
222
+ if (typeof t == "string") {
223
+ const n = /^([+-])=(\d+(?:\.\d+)?)$/.exec(t);
224
+ if (n) {
225
+ const r = Number.parseFloat(n[2]);
226
+ return Number.isFinite(r) ? n[1] === "+" ? e + r : e - r : e;
227
+ }
228
+ }
229
+ return e;
230
+ }, q = (t) => {
231
+ const e = E(t?.duration), n = E(t?.endDelay), r = t?.iterations ?? 1;
232
+ if (r === 1 / 0)
233
+ return Number.MAX_SAFE_INTEGER;
234
+ const o = Math.max(0, r);
235
+ return e * o + n;
236
+ }, I = (t) => {
237
+ let e = 0;
238
+ return t.map((n) => {
239
+ const r = k(n.at, e), o = E(n.options?.delay), i = Math.max(0, r + o), s = q(n.options), a = i + s;
240
+ return e = Math.max(e, a), { step: n, start: i, end: a, duration: s };
241
+ });
242
+ }, J = async (t, e = {}) => {
243
+ const { stagger: n, onFinish: r } = e, o = t.length;
244
+ for (let i = 0; i < t.length; i += 1) {
245
+ const s = t[i], a = n ? n(i, o) : 0;
246
+ a > 0 && await new Promise((m) => setTimeout(m, a)), await P(s.target, s);
247
+ }
248
+ r?.();
249
+ }, tt = (t = [], e = {}) => {
250
+ const n = [...t], r = /* @__PURE__ */ new Set();
251
+ let o = [], i = 0, s = !1, a = !1;
252
+ const { commitStyles: m = !0, respectReducedMotion: f = !0, onFinish: u } = e, p = () => {
253
+ if (!a) {
254
+ if (a = !0, m)
255
+ for (const c of o) {
256
+ const { animation: d, step: l } = c;
257
+ typeof d.commitStyles == "function" ? d.commitStyles() : w(l.target, l.keyframes), d.cancel();
258
+ }
259
+ r.forEach((c) => c()), u?.();
260
+ }
261
+ }, h = () => {
262
+ o.forEach(({ animation: l }) => l.cancel()), o = [], a = !1;
263
+ const c = I(n);
264
+ if (i = c.length ? Math.max(...c.map((l) => l.end)) : 0, f && A()) {
265
+ m && c.forEach(({ step: l }) => w(l.target, l.keyframes)), s = !0;
266
+ return;
267
+ }
268
+ if (c.some(
269
+ ({ step: l }) => typeof l.target.animate != "function"
270
+ )) {
271
+ m && c.forEach(({ step: l }) => w(l.target, l.keyframes)), s = !0;
272
+ return;
273
+ }
274
+ s = !1, o = c.map(({ step: l, start: g }) => {
275
+ const { delay: M, ...b } = l.options ?? {};
276
+ return { animation: l.target.animate(l.keyframes, {
277
+ ...b,
278
+ delay: g,
279
+ fill: b.fill ?? "both"
280
+ }), step: l, start: g };
281
+ });
282
+ };
283
+ return {
284
+ add(c) {
285
+ n.push(c);
286
+ },
287
+ duration() {
288
+ if (!n.length) return 0;
289
+ if (!o.length) {
290
+ const c = I(n);
291
+ return Math.max(...c.map((d) => d.end));
292
+ }
293
+ return i;
294
+ },
295
+ async play() {
296
+ if (h(), s || o.length === 0) {
297
+ p();
298
+ return;
299
+ }
300
+ const c = o.map(
301
+ (d) => d.animation.finished.catch(() => {
302
+ })
303
+ );
304
+ await Promise.all(c), p();
305
+ },
306
+ pause() {
307
+ s || o.forEach(({ animation: c }) => c.pause());
308
+ },
309
+ resume() {
310
+ s || o.forEach(({ animation: c }) => c.play());
311
+ },
312
+ stop() {
313
+ o.forEach(({ animation: c }) => c.cancel()), o = [], s = !1;
314
+ },
315
+ seek(c) {
316
+ s || o.forEach(({ animation: d }) => {
317
+ d.currentTime = c;
318
+ });
319
+ },
320
+ onFinish(c) {
321
+ return r.add(c), () => r.delete(c);
322
+ }
323
+ };
324
+ }, et = async (t) => {
325
+ const e = typeof t == "function" ? t : t.update;
326
+ if (typeof document > "u") {
327
+ e();
328
+ return;
329
+ }
330
+ const n = document;
331
+ if (n.startViewTransition) {
332
+ await n.startViewTransition(() => e()).finished;
333
+ return;
334
+ }
335
+ e();
95
336
  };
96
337
  export {
97
- h as capturePosition,
98
- P as flip,
99
- v as flipList,
100
- x as spring,
101
- A as springPresets,
102
- $ as transition
338
+ P as animate,
339
+ S as capturePosition,
340
+ R as easeInCubic,
341
+ L as easeInOutCubic,
342
+ z as easeInOutQuad,
343
+ D as easeInQuad,
344
+ W as easeOutBack,
345
+ X as easeOutCubic,
346
+ Y as easeOutExpo,
347
+ T as easeOutQuad,
348
+ G as easingPresets,
349
+ x as flip,
350
+ _ as flipElements,
351
+ Q as flipList,
352
+ j as keyframePresets,
353
+ C as linear,
354
+ A as prefersReducedMotion,
355
+ H as scrollAnimate,
356
+ J as sequence,
357
+ K as spring,
358
+ Z as springPresets,
359
+ B as stagger,
360
+ tt as timeline,
361
+ et as transition
103
362
  };
104
363
  //# sourceMappingURL=motion.es.mjs.map