@bquery/bquery 1.3.0 → 1.5.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 (138) hide show
  1. package/README.md +546 -501
  2. package/dist/component/component.d.ts.map +1 -1
  3. package/dist/component/index.d.ts +2 -0
  4. package/dist/component/index.d.ts.map +1 -1
  5. package/dist/component/library.d.ts +34 -0
  6. package/dist/component/library.d.ts.map +1 -0
  7. package/dist/component/types.d.ts +10 -6
  8. package/dist/component/types.d.ts.map +1 -1
  9. package/dist/component-CY5MVoYN.js +531 -0
  10. package/dist/component-CY5MVoYN.js.map +1 -0
  11. package/dist/component.es.mjs +6 -184
  12. package/dist/config-DRmZZno3.js +40 -0
  13. package/dist/config-DRmZZno3.js.map +1 -0
  14. package/dist/core/collection.d.ts +19 -3
  15. package/dist/core/collection.d.ts.map +1 -1
  16. package/dist/core/element.d.ts +23 -4
  17. package/dist/core/element.d.ts.map +1 -1
  18. package/dist/core/index.d.ts +1 -0
  19. package/dist/core/index.d.ts.map +1 -1
  20. package/dist/core/utils/function.d.ts +21 -4
  21. package/dist/core/utils/function.d.ts.map +1 -1
  22. package/dist/core-CK2Mfpf4.js +648 -0
  23. package/dist/core-CK2Mfpf4.js.map +1 -0
  24. package/dist/core-DPdbItcq.js +112 -0
  25. package/dist/core-DPdbItcq.js.map +1 -0
  26. package/dist/core.es.mjs +45 -1218
  27. package/dist/full.d.ts +6 -6
  28. package/dist/full.d.ts.map +1 -1
  29. package/dist/full.es.mjs +98 -92
  30. package/dist/full.iife.js +173 -3
  31. package/dist/full.iife.js.map +1 -1
  32. package/dist/full.umd.js +173 -3
  33. package/dist/full.umd.js.map +1 -1
  34. package/dist/index.es.mjs +143 -139
  35. package/dist/motion/transition.d.ts +1 -1
  36. package/dist/motion/transition.d.ts.map +1 -1
  37. package/dist/motion/types.d.ts +11 -1
  38. package/dist/motion/types.d.ts.map +1 -1
  39. package/dist/motion-C5DRdPnO.js +415 -0
  40. package/dist/motion-C5DRdPnO.js.map +1 -0
  41. package/dist/motion.es.mjs +25 -361
  42. package/dist/object-qGpWr6-J.js +38 -0
  43. package/dist/object-qGpWr6-J.js.map +1 -0
  44. package/dist/platform/announcer.d.ts +59 -0
  45. package/dist/platform/announcer.d.ts.map +1 -0
  46. package/dist/platform/config.d.ts +92 -0
  47. package/dist/platform/config.d.ts.map +1 -0
  48. package/dist/platform/cookies.d.ts +45 -0
  49. package/dist/platform/cookies.d.ts.map +1 -0
  50. package/dist/platform/index.d.ts +8 -0
  51. package/dist/platform/index.d.ts.map +1 -1
  52. package/dist/platform/meta.d.ts +62 -0
  53. package/dist/platform/meta.d.ts.map +1 -0
  54. package/dist/platform/storage.d.ts.map +1 -1
  55. package/dist/platform-B7JhGBc7.js +361 -0
  56. package/dist/platform-B7JhGBc7.js.map +1 -0
  57. package/dist/platform.es.mjs +11 -243
  58. package/dist/reactive/async-data.d.ts +114 -0
  59. package/dist/reactive/async-data.d.ts.map +1 -0
  60. package/dist/reactive/core.d.ts +12 -0
  61. package/dist/reactive/core.d.ts.map +1 -1
  62. package/dist/reactive/effect.d.ts.map +1 -1
  63. package/dist/reactive/index.d.ts +2 -2
  64. package/dist/reactive/index.d.ts.map +1 -1
  65. package/dist/reactive/internals.d.ts +6 -0
  66. package/dist/reactive/internals.d.ts.map +1 -1
  67. package/dist/reactive/signal.d.ts +2 -0
  68. package/dist/reactive/signal.d.ts.map +1 -1
  69. package/dist/reactive-BDya-ia8.js +253 -0
  70. package/dist/reactive-BDya-ia8.js.map +1 -0
  71. package/dist/reactive.es.mjs +18 -34
  72. package/dist/router-CijiICxt.js +188 -0
  73. package/dist/router-CijiICxt.js.map +1 -0
  74. package/dist/router.es.mjs +11 -200
  75. package/dist/sanitize-jyJ2ryE2.js +302 -0
  76. package/dist/sanitize-jyJ2ryE2.js.map +1 -0
  77. package/dist/security/constants.d.ts.map +1 -1
  78. package/dist/security/sanitize-core.d.ts.map +1 -1
  79. package/dist/security.es.mjs +10 -56
  80. package/dist/store-CPK9E62U.js +262 -0
  81. package/dist/store-CPK9E62U.js.map +1 -0
  82. package/dist/store.es.mjs +12 -25
  83. package/dist/view/evaluate.d.ts.map +1 -1
  84. package/dist/view-Cdi0g-qo.js +396 -0
  85. package/dist/view-Cdi0g-qo.js.map +1 -0
  86. package/dist/view.es.mjs +10 -424
  87. package/package.json +136 -132
  88. package/src/component/component.ts +319 -289
  89. package/src/component/index.ts +42 -40
  90. package/src/component/library.ts +504 -0
  91. package/src/component/types.ts +91 -85
  92. package/src/core/collection.ts +44 -4
  93. package/src/core/element.ts +33 -5
  94. package/src/core/index.ts +1 -0
  95. package/src/core/utils/function.ts +56 -15
  96. package/src/full.ts +223 -187
  97. package/src/motion/transition.ts +97 -51
  98. package/src/motion/types.ts +208 -198
  99. package/src/platform/announcer.ts +208 -0
  100. package/src/platform/config.ts +163 -0
  101. package/src/platform/cookies.ts +165 -0
  102. package/src/platform/index.ts +39 -18
  103. package/src/platform/meta.ts +168 -0
  104. package/src/platform/storage.ts +8 -1
  105. package/src/reactive/async-data.ts +486 -0
  106. package/src/reactive/core.ts +21 -0
  107. package/src/reactive/effect.ts +18 -7
  108. package/src/reactive/index.ts +37 -23
  109. package/src/reactive/internals.ts +18 -1
  110. package/src/reactive/signal.ts +29 -20
  111. package/src/security/constants.ts +211 -209
  112. package/src/security/sanitize-core.ts +22 -1
  113. package/src/view/evaluate.ts +29 -13
  114. package/dist/batch-4LAvfLE7.js +0 -13
  115. package/dist/batch-4LAvfLE7.js.map +0 -1
  116. package/dist/component.es.mjs.map +0 -1
  117. package/dist/core-COenAZjD.js +0 -145
  118. package/dist/core-COenAZjD.js.map +0 -1
  119. package/dist/core.es.mjs.map +0 -1
  120. package/dist/full.es.mjs.map +0 -1
  121. package/dist/index.es.mjs.map +0 -1
  122. package/dist/motion.es.mjs.map +0 -1
  123. package/dist/persisted-Dz_ryNuC.js +0 -278
  124. package/dist/persisted-Dz_ryNuC.js.map +0 -1
  125. package/dist/platform.es.mjs.map +0 -1
  126. package/dist/reactive.es.mjs.map +0 -1
  127. package/dist/router.es.mjs.map +0 -1
  128. package/dist/sanitize-1FBEPAFH.js +0 -272
  129. package/dist/sanitize-1FBEPAFH.js.map +0 -1
  130. package/dist/security.es.mjs.map +0 -1
  131. package/dist/store.es.mjs.map +0 -1
  132. package/dist/type-guards-DRma3-Kc.js +0 -16
  133. package/dist/type-guards-DRma3-Kc.js.map +0 -1
  134. package/dist/untrack-BuEQKH7_.js +0 -6
  135. package/dist/untrack-BuEQKH7_.js.map +0 -1
  136. package/dist/view.es.mjs.map +0 -1
  137. package/dist/watch-CXyaBC_9.js +0 -58
  138. package/dist/watch-CXyaBC_9.js.map +0 -1
@@ -0,0 +1,415 @@
1
+ import { n as T } from "./config-DRmZZno3.js";
2
+ var E = () => typeof window > "u" || typeof window.matchMedia != "function" ? !1 : window.matchMedia("(prefers-reduced-motion: reduce)").matches, F = (t) => typeof t == "string" || typeof t == "number", $ = (t) => t.replace(/[A-Z]/g, (e) => `-${e.toLowerCase()}`), g = (t, e) => {
3
+ const n = t.style;
4
+ if (Array.isArray(e)) {
5
+ const s = e[e.length - 1];
6
+ if (!s) return;
7
+ for (const [a, i] of Object.entries(s))
8
+ if (!(a === "offset" || a === "easing" || a === "composite") && F(i)) {
9
+ const r = a.startsWith("--") ? a : $(a);
10
+ n.setProperty(r, String(i));
11
+ }
12
+ return;
13
+ }
14
+ for (const [s, a] of Object.entries(e)) {
15
+ if (s === "offset" || s === "easing" || s === "composite") continue;
16
+ const i = Array.isArray(a) ? a[a.length - 1] : a;
17
+ if (F(i)) {
18
+ const r = s.startsWith("--") ? s : $(s);
19
+ n.setProperty(r, String(i));
20
+ }
21
+ }
22
+ }, M = (t, e) => {
23
+ const { keyframes: n, options: s, commitStyles: a = !0, respectReducedMotion: i = !0, onFinish: r } = e;
24
+ if (i && E())
25
+ return a && g(t, n), r?.(), Promise.resolve();
26
+ const c = t;
27
+ return typeof c.animate != "function" ? (a && g(t, n), r?.(), Promise.resolve()) : new Promise((o) => {
28
+ const f = c.animate(n, s);
29
+ let m = !1;
30
+ const p = () => {
31
+ m || (m = !0, a && (typeof f.commitStyles == "function" ? f.commitStyles() : g(t, n)), f.cancel(), r?.(), o());
32
+ };
33
+ f.onfinish = p, f.finished && f.finished.then(p).catch(p);
34
+ });
35
+ }, h = (t) => Math.min(1, Math.max(0, t)), C = (t) => h(t), N = (t) => h(t * t), O = (t) => h(1 - (1 - t) * (1 - t)), k = (t) => h(t < 0.5 ? 2 * t * t : 1 - Math.pow(-2 * t + 2, 2) / 2), D = (t) => h(t * t * t), z = (t) => h(1 - Math.pow(1 - t, 3)), L = (t) => h(t < 0.5 ? 4 * t * t * t : 1 - Math.pow(-2 * t + 2, 3) / 2), X = (t) => h(1 + (1.70158 + 1) * Math.pow(t - 1, 3) + 1.70158 * Math.pow(t - 1, 2)), _ = (t) => h(t === 1 ? 1 : 1 - Math.pow(2, -10 * t)), j = {
36
+ linear: C,
37
+ easeInQuad: N,
38
+ easeOutQuad: O,
39
+ easeInOutQuad: k,
40
+ easeInCubic: D,
41
+ easeOutCubic: z,
42
+ easeInOutCubic: L,
43
+ easeOutBack: X,
44
+ easeOutExpo: _
45
+ }, S = (t) => {
46
+ const e = t.getBoundingClientRect();
47
+ return {
48
+ top: e.top,
49
+ left: e.left,
50
+ width: e.width,
51
+ height: e.height
52
+ };
53
+ }, x = (t, e, n = {}) => {
54
+ const { duration: s = 300, easing: a = "ease-out", onComplete: i } = n, r = S(t);
55
+ if (r.width === 0 || r.height === 0)
56
+ return i?.(), Promise.resolve();
57
+ const c = e.left - r.left, o = e.top - r.top, f = e.width / r.width, m = e.height / r.height;
58
+ if (c === 0 && o === 0 && f === 1 && m === 1)
59
+ return i?.(), Promise.resolve();
60
+ const p = t;
61
+ return typeof p.animate != "function" ? (i?.(), Promise.resolve()) : (p.style.transform = `translate(${c}px, ${o}px) scale(${f}, ${m})`, p.style.transformOrigin = "top left", p.offsetHeight, new Promise((y) => {
62
+ const l = p.animate([{ transform: `translate(${c}px, ${o}px) scale(${f}, ${m})` }, { transform: "translate(0, 0) scale(1, 1)" }], {
63
+ duration: s,
64
+ easing: a,
65
+ fill: "forwards"
66
+ });
67
+ let u = !1;
68
+ const d = () => {
69
+ u || (u = !0, p.style.transform = "", p.style.transformOrigin = "", i?.(), y());
70
+ };
71
+ l.onfinish = d, l.finished && l.finished.then(d).catch(d);
72
+ }));
73
+ }, H = async (t, e, n = {}) => {
74
+ await W(t, e, n);
75
+ }, W = async (t, e, n = {}) => {
76
+ const { stagger: s, ...a } = n, i = /* @__PURE__ */ new Map();
77
+ for (const o of t) i.set(o, S(o));
78
+ e();
79
+ const r = t.length, c = t.map((o, f) => {
80
+ const m = i.get(o);
81
+ if (!m) return Promise.resolve();
82
+ const p = s ? s(f, r) : 0;
83
+ return p > 0 ? new Promise((y) => setTimeout(y, p)).then(() => x(o, m, a)) : x(o, m, a);
84
+ });
85
+ await Promise.all(c);
86
+ }, K = {
87
+ fadeIn: (t = 0, e = 1) => [{ opacity: t }, { opacity: e }],
88
+ fadeOut: (t = 1, e = 0) => [{ opacity: t }, { opacity: e }],
89
+ slideInUp: (t = 16) => [{
90
+ opacity: 0,
91
+ transform: `translateY(${t}px)`
92
+ }, {
93
+ opacity: 1,
94
+ transform: "translateY(0)"
95
+ }],
96
+ slideInDown: (t = 16) => [{
97
+ opacity: 0,
98
+ transform: `translateY(-${t}px)`
99
+ }, {
100
+ opacity: 1,
101
+ transform: "translateY(0)"
102
+ }],
103
+ slideInLeft: (t = 16) => [{
104
+ opacity: 0,
105
+ transform: `translateX(${t}px)`
106
+ }, {
107
+ opacity: 1,
108
+ transform: "translateX(0)"
109
+ }],
110
+ slideInRight: (t = 16) => [{
111
+ opacity: 0,
112
+ transform: `translateX(-${t}px)`
113
+ }, {
114
+ opacity: 1,
115
+ transform: "translateX(0)"
116
+ }],
117
+ scaleIn: (t = 0.95, e = 1) => [{
118
+ opacity: 0,
119
+ transform: `scale(${t})`
120
+ }, {
121
+ opacity: 1,
122
+ transform: `scale(${e})`
123
+ }],
124
+ scaleOut: (t = 1, e = 0.95) => [{
125
+ opacity: 1,
126
+ transform: `scale(${t})`
127
+ }, {
128
+ opacity: 0,
129
+ transform: `scale(${e})`
130
+ }],
131
+ pop: (t = 0.9, e = 1.02, n = 1) => [
132
+ {
133
+ opacity: 0,
134
+ transform: `scale(${t})`
135
+ },
136
+ {
137
+ opacity: 1,
138
+ transform: `scale(${e})`,
139
+ offset: 0.6
140
+ },
141
+ {
142
+ opacity: 1,
143
+ transform: `scale(${n})`
144
+ }
145
+ ],
146
+ rotateIn: (t = 6) => [{
147
+ opacity: 0,
148
+ transform: `rotate(${t}deg) scale(0.98)`
149
+ }, {
150
+ opacity: 1,
151
+ transform: "rotate(0deg) scale(1)"
152
+ }]
153
+ }, Y = (t) => typeof Element < "u" && t instanceof Element ? [t] : Array.from(t), U = (t, e) => {
154
+ const n = Y(t);
155
+ if (!n.length) return () => {
156
+ };
157
+ const { root: s = null, rootMargin: a, threshold: i, once: r = !0, onEnter: c, ...o } = e;
158
+ if (typeof IntersectionObserver > "u")
159
+ return n.forEach((m) => {
160
+ c?.(m), M(m, o);
161
+ }), () => {
162
+ };
163
+ const f = new IntersectionObserver((m) => {
164
+ m.forEach((p) => {
165
+ if (!p.isIntersecting) return;
166
+ const y = p.target;
167
+ c?.(y), M(y, o), r && f.unobserve(y);
168
+ });
169
+ }, {
170
+ root: s,
171
+ rootMargin: a,
172
+ threshold: i
173
+ });
174
+ return n.forEach((m) => f.observe(m)), () => f.disconnect();
175
+ }, q = {
176
+ stiffness: 100,
177
+ damping: 10,
178
+ mass: 1,
179
+ precision: 0.01
180
+ }, B = (t, e = {}) => {
181
+ const { stiffness: n, damping: s, mass: a, precision: i } = {
182
+ ...q,
183
+ ...e
184
+ };
185
+ let r = t, c = 0, o = t, f = null, m = null, p = null;
186
+ const y = /* @__PURE__ */ new Set(), l = () => {
187
+ for (const d of y) d(r);
188
+ }, u = (d) => {
189
+ const w = p !== null ? (d - p) / 1e3 : 0.016666666666666666, v = Math.min(w, 1 / 30);
190
+ p = d;
191
+ const P = r - o, R = (-n * P + -s * c) / a;
192
+ if (c += R * v, r += c * v, l(), Math.abs(c) < i && Math.abs(P) < i) {
193
+ r = o, c = 0, f = null, l(), m?.(), m = null;
194
+ return;
195
+ }
196
+ f = requestAnimationFrame(u);
197
+ };
198
+ return {
199
+ to(d) {
200
+ return o = d, f !== null && cancelAnimationFrame(f), m?.(), p = null, new Promise((w) => {
201
+ m = w, f = requestAnimationFrame(u);
202
+ });
203
+ },
204
+ current() {
205
+ return r;
206
+ },
207
+ stop() {
208
+ f !== null && (cancelAnimationFrame(f), f = null), c = 0, p = null, m?.(), m = null;
209
+ },
210
+ onChange(d) {
211
+ return y.add(d), () => y.delete(d);
212
+ }
213
+ };
214
+ }, Z = {
215
+ gentle: {
216
+ stiffness: 80,
217
+ damping: 15
218
+ },
219
+ snappy: {
220
+ stiffness: 200,
221
+ damping: 20
222
+ },
223
+ bouncy: {
224
+ stiffness: 300,
225
+ damping: 8
226
+ },
227
+ stiff: {
228
+ stiffness: 400,
229
+ damping: 30
230
+ }
231
+ }, J = (t, e = {}) => {
232
+ const { start: n = 0, from: s = "start", easing: a } = e;
233
+ return (i, r = 0) => {
234
+ const c = typeof s == "number" ? s : s === "center" ? (r - 1) / 2 : s === "end" ? r - 1 : 0, o = Math.abs(i - c), f = r > 1 ? Math.max(c, r - 1 - c) : 1, m = f === 0 ? 0 : o / f;
235
+ return n + (a ? a(m) * f : o) * t;
236
+ };
237
+ }, b = (t) => {
238
+ if (typeof t == "number") return t;
239
+ if (typeof t == "string") {
240
+ const e = t.trim();
241
+ if (e.endsWith("ms")) {
242
+ const s = Number.parseFloat(e.slice(0, -2));
243
+ return Number.isFinite(s) ? s : 0;
244
+ }
245
+ if (e.endsWith("s")) {
246
+ const s = Number.parseFloat(e.slice(0, -1));
247
+ return Number.isFinite(s) ? s * 1e3 : 0;
248
+ }
249
+ const n = Number.parseFloat(e);
250
+ return Number.isFinite(n) ? n : 0;
251
+ }
252
+ return 0;
253
+ }, V = (t, e) => {
254
+ if (typeof t == "number") return t;
255
+ if (typeof t == "string") {
256
+ const n = /^([+-])=(\d+(?:\.\d+)?)$/.exec(t);
257
+ if (n) {
258
+ const s = Number.parseFloat(n[2]);
259
+ return Number.isFinite(s) ? n[1] === "+" ? e + s : e - s : e;
260
+ }
261
+ }
262
+ return e;
263
+ }, G = (t) => {
264
+ const e = b(t?.duration), n = b(t?.endDelay), s = t?.iterations ?? 1;
265
+ return s === 1 / 0 ? Number.MAX_SAFE_INTEGER : e * Math.max(0, s) + n;
266
+ }, I = (t) => {
267
+ let e = 0;
268
+ return t.map((n) => {
269
+ const s = V(n.at, e), a = b(n.options?.delay), i = Math.max(0, s + a), r = G(n.options), c = i + r;
270
+ return e = Math.max(e, c), {
271
+ step: n,
272
+ start: i,
273
+ end: c,
274
+ duration: r
275
+ };
276
+ });
277
+ }, tt = async (t, e = {}) => {
278
+ const { stagger: n, onFinish: s } = e, a = t.length;
279
+ for (let i = 0; i < t.length; i += 1) {
280
+ const r = t[i], c = n ? n(i, a) : 0;
281
+ c > 0 && await new Promise((o) => setTimeout(o, c)), await M(r.target, r);
282
+ }
283
+ s?.();
284
+ }, et = (t = [], e = {}) => {
285
+ const n = [...t], s = /* @__PURE__ */ new Set();
286
+ let a = [], i = 0, r = !1, c = !1;
287
+ const { commitStyles: o = !0, respectReducedMotion: f = !0, onFinish: m } = e, p = () => {
288
+ if (!c) {
289
+ if (c = !0, o) for (const l of a) {
290
+ const { animation: u, step: d } = l;
291
+ typeof u.commitStyles == "function" ? u.commitStyles() : g(d.target, d.keyframes), u.cancel();
292
+ }
293
+ s.forEach((l) => l()), m?.();
294
+ }
295
+ }, y = () => {
296
+ a.forEach(({ animation: u }) => u.cancel()), a = [], c = !1;
297
+ const l = I(n);
298
+ if (i = l.length ? Math.max(...l.map((u) => u.end)) : 0, f && E()) {
299
+ o && l.forEach(({ step: u }) => g(u.target, u.keyframes)), r = !0;
300
+ return;
301
+ }
302
+ if (l.some(({ step: u }) => typeof u.target.animate != "function")) {
303
+ o && l.forEach(({ step: u }) => g(u.target, u.keyframes)), r = !0;
304
+ return;
305
+ }
306
+ r = !1, a = l.map(({ step: u, start: d }) => {
307
+ const { delay: w, ...v } = u.options ?? {};
308
+ return {
309
+ animation: u.target.animate(u.keyframes, {
310
+ ...v,
311
+ delay: d,
312
+ fill: v.fill ?? "both"
313
+ }),
314
+ step: u,
315
+ start: d
316
+ };
317
+ });
318
+ };
319
+ return {
320
+ add(l) {
321
+ n.push(l);
322
+ },
323
+ duration() {
324
+ if (!n.length) return 0;
325
+ if (!a.length) {
326
+ const l = I(n);
327
+ return Math.max(...l.map((u) => u.end));
328
+ }
329
+ return i;
330
+ },
331
+ async play() {
332
+ if (y(), r || a.length === 0) {
333
+ p();
334
+ return;
335
+ }
336
+ const l = a.map((u) => u.animation.finished.catch(() => {
337
+ }));
338
+ await Promise.all(l), p();
339
+ },
340
+ pause() {
341
+ r || a.forEach(({ animation: l }) => l.pause());
342
+ },
343
+ resume() {
344
+ r || a.forEach(({ animation: l }) => l.play());
345
+ },
346
+ stop() {
347
+ a.forEach(({ animation: l }) => l.cancel()), a = [], r = !1;
348
+ },
349
+ seek(l) {
350
+ r || a.forEach(({ animation: u }) => {
351
+ u.currentTime = l;
352
+ });
353
+ },
354
+ onFinish(l) {
355
+ return s.add(l), () => s.delete(l);
356
+ }
357
+ };
358
+ }, A = (t) => (t ?? []).map((e) => e.trim()).filter((e) => e.length > 0), nt = async (t) => {
359
+ const e = T().transitions, n = typeof t == "function" ? {
360
+ update: t,
361
+ classes: e?.classes,
362
+ types: e?.types,
363
+ skipOnReducedMotion: e?.skipOnReducedMotion
364
+ } : {
365
+ ...t,
366
+ classes: t.classes ?? e?.classes,
367
+ types: t.types ?? e?.types,
368
+ skipOnReducedMotion: t.skipOnReducedMotion ?? e?.skipOnReducedMotion
369
+ }, s = n.update;
370
+ if (typeof document > "u") {
371
+ await s();
372
+ return;
373
+ }
374
+ const a = document, i = document.documentElement, r = A(n.classes), c = A(n.types);
375
+ if (!a.startViewTransition || n.skipOnReducedMotion && E()) {
376
+ await s(), n.onFinish?.();
377
+ return;
378
+ }
379
+ r.forEach((o) => i.classList.add(o));
380
+ try {
381
+ const o = a.startViewTransition(() => s()), f = o.types;
382
+ if (f) for (const m of c) f.add(m);
383
+ await o.ready, n.onReady?.(), await o.finished, n.onFinish?.();
384
+ } finally {
385
+ r.forEach((o) => i.classList.remove(o));
386
+ }
387
+ };
388
+ export {
389
+ M as C,
390
+ C as S,
391
+ X as _,
392
+ B as a,
393
+ O as b,
394
+ K as c,
395
+ W as d,
396
+ H as f,
397
+ N as g,
398
+ k as h,
399
+ J as i,
400
+ S as l,
401
+ L as m,
402
+ tt as n,
403
+ Z as o,
404
+ D as p,
405
+ et as r,
406
+ U as s,
407
+ nt as t,
408
+ x as u,
409
+ z as v,
410
+ E as w,
411
+ j as x,
412
+ _ as y
413
+ };
414
+
415
+ //# sourceMappingURL=motion-C5DRdPnO.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"motion-C5DRdPnO.js","names":[],"sources":["../src/motion/reduced-motion.ts","../src/motion/animate.ts","../src/motion/easing.ts","../src/motion/flip.ts","../src/motion/keyframes.ts","../src/motion/scroll.ts","../src/motion/spring.ts","../src/motion/stagger.ts","../src/motion/timeline.ts","../src/motion/transition.ts"],"sourcesContent":["/**\n * Reduced motion detection helpers.\n *\n * @module bquery/motion\n */\n\n/**\n * Check whether the user prefers reduced motion.\n *\n * @returns true if the user prefers reduced motion, otherwise false\n */\nexport const prefersReducedMotion = (): boolean => {\n if (typeof window === 'undefined' || typeof window.matchMedia !== 'function') {\n return false;\n }\n return window.matchMedia('(prefers-reduced-motion: reduce)').matches;\n};\n","/**\n * Web Animations helpers.\n *\n * @module bquery/motion\n */\n\nimport { prefersReducedMotion } from './reduced-motion';\nimport type { AnimateOptions } from './types';\n\n/** @internal */\nconst isStyleValue = (value: unknown): value is string | number =>\n typeof value === 'string' || typeof value === 'number';\n\n/**\n * Convert camelCase property names to kebab-case for CSS.\n * @internal\n */\nconst toKebabCase = (str: string): string => {\n return str.replace(/[A-Z]/g, (letter) => `-${letter.toLowerCase()}`);\n};\n\n/** @internal */\nexport const applyFinalKeyframeStyles = (\n element: Element,\n keyframes: Keyframe[] | PropertyIndexedKeyframes\n): void => {\n const htmlElement = element as HTMLElement;\n const style = htmlElement.style;\n\n if (Array.isArray(keyframes)) {\n const last = keyframes[keyframes.length - 1];\n if (!last) return;\n for (const [prop, value] of Object.entries(last)) {\n if (prop === 'offset' || prop === 'easing' || prop === 'composite') continue;\n if (isStyleValue(value)) {\n // Convert camelCase to kebab-case for CSS properties\n const cssProp = prop.startsWith('--') ? prop : toKebabCase(prop);\n style.setProperty(cssProp, String(value));\n }\n }\n return;\n }\n\n for (const [prop, value] of Object.entries(keyframes)) {\n if (prop === 'offset' || prop === 'easing' || prop === 'composite') continue;\n const finalValue = Array.isArray(value) ? value[value.length - 1] : value;\n if (isStyleValue(finalValue)) {\n // Convert camelCase to kebab-case for CSS properties\n const cssProp = prop.startsWith('--') ? prop : toKebabCase(prop);\n style.setProperty(cssProp, String(finalValue));\n }\n }\n};\n\n/**\n * Animate an element using the Web Animations API with reduced-motion fallback.\n *\n * @param element - Element to animate\n * @param config - Animation configuration\n * @returns Promise that resolves when animation completes\n *\n * @example\n * ```ts\n * await animate(element, {\n * keyframes: [{ opacity: 0 }, { opacity: 1 }],\n * options: { duration: 200, easing: 'ease-out' },\n * });\n * ```\n */\nexport const animate = (element: Element, config: AnimateOptions): Promise<void> => {\n const { keyframes, options, commitStyles = true, respectReducedMotion = true, onFinish } = config;\n\n if (respectReducedMotion && prefersReducedMotion()) {\n if (commitStyles) {\n applyFinalKeyframeStyles(element, keyframes);\n }\n onFinish?.();\n return Promise.resolve();\n }\n\n const htmlElement = element as HTMLElement;\n if (typeof htmlElement.animate !== 'function') {\n if (commitStyles) {\n applyFinalKeyframeStyles(element, keyframes);\n }\n onFinish?.();\n return Promise.resolve();\n }\n\n return new Promise((resolve) => {\n const animation = htmlElement.animate(keyframes, options);\n let finalized = false;\n const finalize = () => {\n if (finalized) return;\n finalized = true;\n if (commitStyles) {\n if (typeof animation.commitStyles === 'function') {\n animation.commitStyles();\n } else {\n applyFinalKeyframeStyles(element, keyframes);\n }\n }\n animation.cancel();\n onFinish?.();\n resolve();\n };\n\n animation.onfinish = finalize;\n if (animation.finished) {\n animation.finished.then(finalize).catch(finalize);\n }\n });\n};\n","/**\n * Easing helpers.\n *\n * @module bquery/motion\n */\n\nimport type { EasingFunction } from './types';\n\nconst clamp = (value: number) => Math.min(1, Math.max(0, value));\n\nexport const linear: EasingFunction = (t) => clamp(t);\nexport const easeInQuad: EasingFunction = (t) => clamp(t * t);\nexport const easeOutQuad: EasingFunction = (t) => clamp(1 - (1 - t) * (1 - t));\nexport const easeInOutQuad: EasingFunction = (t) =>\n clamp(t < 0.5 ? 2 * t * t : 1 - Math.pow(-2 * t + 2, 2) / 2);\nexport const easeInCubic: EasingFunction = (t) => clamp(t * t * t);\nexport const easeOutCubic: EasingFunction = (t) => clamp(1 - Math.pow(1 - t, 3));\nexport const easeInOutCubic: EasingFunction = (t) =>\n clamp(t < 0.5 ? 4 * t * t * t : 1 - Math.pow(-2 * t + 2, 3) / 2);\nexport const easeOutBack: EasingFunction = (t) => {\n const c1 = 1.70158;\n const c3 = c1 + 1;\n return clamp(1 + c3 * Math.pow(t - 1, 3) + c1 * Math.pow(t - 1, 2));\n};\nexport const easeOutExpo: EasingFunction = (t) => clamp(t === 1 ? 1 : 1 - Math.pow(2, -10 * t));\n\n/**\n * Named easing presets.\n */\nexport const easingPresets = {\n linear,\n easeInQuad,\n easeOutQuad,\n easeInOutQuad,\n easeInCubic,\n easeOutCubic,\n easeInOutCubic,\n easeOutBack,\n easeOutExpo,\n};\n","/**\n * FLIP animation helpers.\n *\n * @module bquery/motion\n */\n\nimport type { ElementBounds, FlipGroupOptions, FlipOptions } from './types';\n\n/**\n * Capture the current bounds of an element for FLIP animation.\n *\n * @param element - The DOM element to measure\n * @returns The element's current position and size\n */\nexport const capturePosition = (element: Element): ElementBounds => {\n const rect = element.getBoundingClientRect();\n return {\n top: rect.top,\n left: rect.left,\n width: rect.width,\n height: rect.height,\n };\n};\n\n/**\n * Perform a FLIP (First, Last, Invert, Play) animation.\n * Animates an element from its captured position to its current position.\n *\n * @param element - The element to animate\n * @param firstBounds - The previously captured bounds\n * @param options - Animation configuration\n * @returns Promise that resolves when animation completes\n *\n * @example\n * ```ts\n * const first = capturePosition(element);\n * // ... DOM changes that move the element ...\n * await flip(element, first, { duration: 300 });\n * ```\n */\nexport const flip = (\n element: Element,\n firstBounds: ElementBounds,\n options: FlipOptions = {}\n): Promise<void> => {\n const { duration = 300, easing = 'ease-out', onComplete } = options;\n\n // Last: Get current position\n const lastBounds = capturePosition(element);\n\n // Skip animation if element has zero dimensions (avoid division by zero)\n if (lastBounds.width === 0 || lastBounds.height === 0) {\n onComplete?.();\n return Promise.resolve();\n }\n\n // Invert: Calculate the delta\n const deltaX = firstBounds.left - lastBounds.left;\n const deltaY = firstBounds.top - lastBounds.top;\n const deltaW = firstBounds.width / lastBounds.width;\n const deltaH = firstBounds.height / lastBounds.height;\n\n // Skip animation if no change\n if (deltaX === 0 && deltaY === 0 && deltaW === 1 && deltaH === 1) {\n onComplete?.();\n return Promise.resolve();\n }\n\n const htmlElement = element as HTMLElement;\n\n // Feature check: fallback if Web Animations API is unavailable\n if (typeof htmlElement.animate !== 'function') {\n onComplete?.();\n return Promise.resolve();\n }\n\n // Apply inverted transform\n htmlElement.style.transform = `translate(${deltaX}px, ${deltaY}px) scale(${deltaW}, ${deltaH})`;\n htmlElement.style.transformOrigin = 'top left';\n\n // Force reflow\n void htmlElement.offsetHeight;\n\n // Play: Animate back to current position\n return new Promise((resolve) => {\n const animation = htmlElement.animate(\n [\n {\n transform: `translate(${deltaX}px, ${deltaY}px) scale(${deltaW}, ${deltaH})`,\n },\n { transform: 'translate(0, 0) scale(1, 1)' },\n ],\n { duration, easing, fill: 'forwards' }\n );\n\n let finalized = false;\n const finalize = () => {\n if (finalized) return;\n finalized = true;\n htmlElement.style.transform = '';\n htmlElement.style.transformOrigin = '';\n onComplete?.();\n resolve();\n };\n\n animation.onfinish = finalize;\n // Handle cancel/rejection via the finished promise\n if (animation.finished) {\n animation.finished.then(finalize).catch(finalize);\n }\n });\n};\n\n/**\n * FLIP helper for animating a list of elements.\n * Useful for reordering lists with smooth animations.\n *\n * @param elements - Array of elements to animate\n * @param performUpdate - Function that performs the DOM update\n * @param options - Animation configuration\n *\n * @example\n * ```ts\n * await flipList(listItems, () => {\n * container.appendChild(container.firstChild); // Move first to last\n * });\n * ```\n */\nexport const flipList = async (\n elements: Element[],\n performUpdate: () => void,\n options: FlipOptions = {}\n): Promise<void> => {\n await flipElements(elements, performUpdate, options);\n};\n\n/**\n * FLIP helper with optional stagger support.\n *\n * @param elements - Array of elements to animate\n * @param performUpdate - Function that performs the DOM update\n * @param options - Animation configuration\n */\nexport const flipElements = async (\n elements: Element[],\n performUpdate: () => void,\n options: FlipGroupOptions = {}\n): Promise<void> => {\n const { stagger, ...flipOptions } = options;\n\n // First: Capture all positions\n const positions = new Map<Element, ElementBounds>();\n for (const el of elements) {\n positions.set(el, capturePosition(el));\n }\n\n // Perform DOM update\n performUpdate();\n\n const total = elements.length;\n\n // Animate each element\n const animations = elements.map((el, index) => {\n const first = positions.get(el);\n if (!first) return Promise.resolve();\n const delay = stagger ? stagger(index, total) : 0;\n if (delay > 0) {\n return new Promise((resolve) => setTimeout(resolve, delay)).then(() =>\n flip(el, first, flipOptions)\n );\n }\n return flip(el, first, flipOptions);\n });\n\n await Promise.all(animations);\n};\n","/**\n * Keyframe presets.\n *\n * @module bquery/motion\n */\n\n/**\n * Common keyframe presets for quick animations.\n */\nexport const keyframePresets = {\n fadeIn: (from = 0, to = 1): Keyframe[] => [{ opacity: from }, { opacity: to }],\n fadeOut: (from = 1, to = 0): Keyframe[] => [{ opacity: from }, { opacity: to }],\n slideInUp: (distance = 16): Keyframe[] => [\n { opacity: 0, transform: `translateY(${distance}px)` },\n { opacity: 1, transform: 'translateY(0)' },\n ],\n slideInDown: (distance = 16): Keyframe[] => [\n { opacity: 0, transform: `translateY(-${distance}px)` },\n { opacity: 1, transform: 'translateY(0)' },\n ],\n slideInLeft: (distance = 16): Keyframe[] => [\n { opacity: 0, transform: `translateX(${distance}px)` },\n { opacity: 1, transform: 'translateX(0)' },\n ],\n slideInRight: (distance = 16): Keyframe[] => [\n { opacity: 0, transform: `translateX(-${distance}px)` },\n { opacity: 1, transform: 'translateX(0)' },\n ],\n scaleIn: (from = 0.95, to = 1): Keyframe[] => [\n { opacity: 0, transform: `scale(${from})` },\n { opacity: 1, transform: `scale(${to})` },\n ],\n scaleOut: (from = 1, to = 0.95): Keyframe[] => [\n { opacity: 1, transform: `scale(${from})` },\n { opacity: 0, transform: `scale(${to})` },\n ],\n pop: (from = 0.9, mid = 1.02, to = 1): Keyframe[] => [\n { opacity: 0, transform: `scale(${from})` },\n { opacity: 1, transform: `scale(${mid})`, offset: 0.6 },\n { opacity: 1, transform: `scale(${to})` },\n ],\n rotateIn: (degrees = 6): Keyframe[] => [\n { opacity: 0, transform: `rotate(${degrees}deg) scale(0.98)` },\n { opacity: 1, transform: 'rotate(0deg) scale(1)' },\n ],\n};\n","/**\n * Scroll-triggered animation helpers.\n *\n * @module bquery/motion\n */\n\nimport { animate } from './animate';\nimport type { ScrollAnimateCleanup, ScrollAnimateOptions } from './types';\n\nconst resolveElements = (elements: Element | Iterable<Element> | ArrayLike<Element>): Element[] => {\n if (typeof Element !== 'undefined' && elements instanceof Element) return [elements];\n return Array.from(elements as Iterable<Element>);\n};\n\n/**\n * Animate elements when they enter the viewport.\n *\n * @param elements - Target element(s)\n * @param options - Scroll animation configuration\n * @returns Cleanup function to disconnect observers\n */\nexport const scrollAnimate = (\n elements: Element | Iterable<Element> | ArrayLike<Element>,\n options: ScrollAnimateOptions\n): ScrollAnimateCleanup => {\n const targets = resolveElements(elements);\n if (!targets.length) return () => undefined;\n\n const { root = null, rootMargin, threshold, once = true, onEnter, ...animationConfig } = options;\n\n if (typeof IntersectionObserver === 'undefined') {\n targets.forEach((element) => {\n onEnter?.(element);\n void animate(element, animationConfig);\n });\n return () => undefined;\n }\n\n const observer = new IntersectionObserver(\n (entries) => {\n entries.forEach((entry) => {\n if (!entry.isIntersecting) return;\n const element = entry.target as Element;\n onEnter?.(element);\n void animate(element, animationConfig);\n if (once) {\n observer.unobserve(element);\n }\n });\n },\n { root, rootMargin, threshold }\n );\n\n targets.forEach((element) => observer.observe(element));\n\n return () => observer.disconnect();\n};\n","/**\n * Spring physics helpers.\n *\n * @module bquery/motion\n */\n\nimport type { Spring, SpringConfig } from './types';\n\n/**\n * Default spring configuration values.\n */\nconst DEFAULT_SPRING_CONFIG: Required<SpringConfig> = {\n stiffness: 100,\n damping: 10,\n mass: 1,\n precision: 0.01,\n};\n\n/**\n * Create a spring-based animation for smooth, physics-based motion.\n *\n * Uses variable frame rate timing based on `requestAnimationFrame` timestamps\n * to ensure consistent animation speed across different devices and frame rates.\n * Large time deltas (e.g., from tab backgrounding) are clamped to maintain\n * simulation stability.\n *\n * @param initialValue - Starting value for the spring\n * @param config - Spring physics configuration\n * @returns Spring instance for controlling the animation\n *\n * @example\n * ```ts\n * const x = spring(0, { stiffness: 120, damping: 14 });\n * x.onChange((value) => {\n * element.style.transform = `translateX(${value}px)`;\n * });\n * await x.to(100);\n * ```\n */\nexport const spring = (initialValue: number, config: SpringConfig = {}): Spring => {\n const { stiffness, damping, mass, precision } = {\n ...DEFAULT_SPRING_CONFIG,\n ...config,\n };\n\n let current = initialValue;\n let velocity = 0;\n let target = initialValue;\n let animationFrame: number | null = null;\n let resolvePromise: (() => void) | null = null;\n let lastTime: number | null = null;\n const listeners = new Set<(value: number) => void>();\n\n const notifyListeners = () => {\n for (const listener of listeners) {\n listener(current);\n }\n };\n\n const step = (timestamp: number) => {\n // Calculate time delta (in seconds) from last frame\n // If this is the first frame, use a sensible default (1/60s)\n // This ensures the animation speed is independent of frame rate\n const deltaTime = lastTime !== null ? (timestamp - lastTime) / 1000 : 1 / 60;\n // Clamp large deltas to prevent instability (e.g. tab backgrounding)\n // Maximum delta of 1/30s (~33ms) keeps simulation stable\n const clampedDelta = Math.min(deltaTime, 1 / 30);\n lastTime = timestamp;\n\n // Spring physics calculation\n const displacement = current - target;\n const springForce = -stiffness * displacement;\n const dampingForce = -damping * velocity;\n const acceleration = (springForce + dampingForce) / mass;\n\n velocity += acceleration * clampedDelta;\n current += velocity * clampedDelta;\n\n notifyListeners();\n\n // Check if spring has settled\n if (Math.abs(velocity) < precision && Math.abs(displacement) < precision) {\n current = target;\n velocity = 0;\n animationFrame = null;\n notifyListeners();\n resolvePromise?.();\n resolvePromise = null;\n return;\n }\n\n animationFrame = requestAnimationFrame(step);\n };\n\n return {\n to(newTarget: number): Promise<void> {\n target = newTarget;\n\n if (animationFrame !== null) {\n cancelAnimationFrame(animationFrame);\n }\n\n // Resolve any pending promise from a previous to() call\n // This ensures all returned promises eventually settle\n resolvePromise?.();\n\n // Reset lastTime to ensure clean start for new animation\n lastTime = null;\n\n return new Promise((resolve) => {\n resolvePromise = resolve;\n animationFrame = requestAnimationFrame(step);\n });\n },\n\n current(): number {\n return current;\n },\n\n stop(): void {\n if (animationFrame !== null) {\n cancelAnimationFrame(animationFrame);\n animationFrame = null;\n }\n velocity = 0;\n lastTime = null;\n resolvePromise?.();\n resolvePromise = null;\n },\n\n onChange(callback: (value: number) => void): () => void {\n listeners.add(callback);\n return () => listeners.delete(callback);\n },\n };\n};\n\n/**\n * Preset spring configurations for common use cases.\n */\nexport const springPresets = {\n /** Gentle, slow-settling spring */\n gentle: { stiffness: 80, damping: 15 } as SpringConfig,\n /** Responsive, snappy spring */\n snappy: { stiffness: 200, damping: 20 } as SpringConfig,\n /** Bouncy, playful spring */\n bouncy: { stiffness: 300, damping: 8 } as SpringConfig,\n /** Stiff, quick spring with minimal overshoot */\n stiff: { stiffness: 400, damping: 30 } as SpringConfig,\n};\n","/**\n * Stagger helpers.\n *\n * @module bquery/motion\n */\n\nimport type { StaggerFunction, StaggerOptions } from './types';\n\n/**\n * Create a staggered delay function for list animations.\n *\n * @param step - Delay between items in milliseconds\n * @param options - Stagger configuration\n * @returns Function that returns delay for a given index\n *\n * @example\n * ```ts\n * const delay = stagger(50, { from: 'center' });\n * delay(0, 3); // 50\n * delay(1, 3); // 0\n * ```\n */\nexport const stagger = (step: number, options: StaggerOptions = {}): StaggerFunction => {\n const { start = 0, from = 'start', easing } = options;\n\n return (index: number, total = 0): number => {\n const origin =\n typeof from === 'number'\n ? from\n : from === 'center'\n ? (total - 1) / 2\n : from === 'end'\n ? total - 1\n : 0;\n\n const distance = Math.abs(index - origin);\n const maxDistance = total > 1 ? Math.max(origin, total - 1 - origin) : 1;\n const normalized = maxDistance === 0 ? 0 : distance / maxDistance;\n const eased = easing ? easing(normalized) * maxDistance : distance;\n\n return start + eased * step;\n };\n};\n","/**\n * Timeline and sequence helpers.\n *\n * @module bquery/motion\n */\n\nimport { animate, applyFinalKeyframeStyles } from './animate';\nimport { prefersReducedMotion } from './reduced-motion';\nimport type {\n SequenceOptions,\n SequenceStep,\n TimelineConfig,\n TimelineControls,\n TimelineStep,\n} from './types';\n\nconst resolveTimeValue = (value?: number | string): number => {\n if (typeof value === 'number') return value;\n if (typeof value === 'string') {\n const trimmed = value.trim();\n if (trimmed.endsWith('ms')) {\n const parsed = Number.parseFloat(trimmed.slice(0, -2));\n return Number.isFinite(parsed) ? parsed : 0;\n }\n if (trimmed.endsWith('s')) {\n const parsed = Number.parseFloat(trimmed.slice(0, -1));\n return Number.isFinite(parsed) ? parsed * 1000 : 0;\n }\n const parsed = Number.parseFloat(trimmed);\n return Number.isFinite(parsed) ? parsed : 0;\n }\n return 0;\n};\n\nconst resolveAt = (at: TimelineStep['at'], previousEnd: number): number => {\n if (typeof at === 'number') return at;\n if (typeof at === 'string') {\n const match = /^([+-])=(\\d+(?:\\.\\d+)?)$/.exec(at);\n if (match) {\n const delta = Number.parseFloat(match[2]);\n if (!Number.isFinite(delta)) return previousEnd;\n return match[1] === '+' ? previousEnd + delta : previousEnd - delta;\n }\n }\n return previousEnd;\n};\n\nconst normalizeDuration = (options?: KeyframeAnimationOptions): number => {\n const baseDuration = resolveTimeValue(options?.duration as number | string | undefined);\n const endDelay = resolveTimeValue(options?.endDelay as number | string | undefined);\n const rawIterations = options?.iterations ?? 1;\n\n // Handle infinite iterations - treat as a special case with a very large duration\n // In practice, infinite iterations shouldn't be used in timelines as they never end\n if (rawIterations === Infinity) {\n // Return a large sentinel value - timeline calculations will be incorrect,\n // but this at least prevents NaN/Infinity from breaking scheduling\n return Number.MAX_SAFE_INTEGER;\n }\n\n // Per Web Animations spec, iterations must be a non-negative number\n // Treat negative as 0 (only endDelay duration)\n const iterations = Math.max(0, rawIterations);\n\n // Total duration = (baseDuration * iterations) + endDelay\n // Note: endDelay is applied once at the end, after all iterations\n return baseDuration * iterations + endDelay;\n};\n\nconst scheduleSteps = (steps: TimelineStep[]) => {\n let previousEnd = 0;\n return steps.map((step) => {\n const baseStart = resolveAt(step.at, previousEnd);\n const stepDelay = resolveTimeValue(step.options?.delay as number | string | undefined);\n const start = Math.max(0, baseStart + stepDelay);\n const duration = normalizeDuration(step.options);\n const end = start + duration;\n previousEnd = Math.max(previousEnd, end);\n return { step, start, end, duration };\n });\n};\n\n/**\n * Run a list of animations sequentially.\n *\n * @param steps - Steps to run in order\n * @param options - Sequence configuration\n */\nexport const sequence = async (\n steps: SequenceStep[],\n options: SequenceOptions = {}\n): Promise<void> => {\n const { stagger, onFinish } = options;\n const total = steps.length;\n\n for (let index = 0; index < steps.length; index += 1) {\n const step = steps[index];\n const delay = stagger ? stagger(index, total) : 0;\n if (delay > 0) {\n await new Promise((resolve) => setTimeout(resolve, delay));\n }\n await animate(step.target, step);\n }\n\n onFinish?.();\n};\n\n/**\n * Create a timeline controller for multiple animations.\n *\n * @param initialSteps - Steps for the timeline\n * @param config - Timeline configuration\n */\nexport const timeline = (\n initialSteps: TimelineStep[] = [],\n config: TimelineConfig = {}\n): TimelineControls => {\n const steps = [...initialSteps];\n const listeners = new Set<() => void>();\n let animations: Array<{ animation: Animation; step: TimelineStep; start: number }> = [];\n let totalDuration = 0;\n let reducedMotionApplied = false;\n let finalized = false;\n\n const { commitStyles = true, respectReducedMotion = true, onFinish } = config;\n\n const finalize = () => {\n if (finalized) return;\n finalized = true;\n\n if (commitStyles) {\n for (const item of animations) {\n const { animation, step } = item;\n if (typeof animation.commitStyles === 'function') {\n animation.commitStyles();\n } else {\n applyFinalKeyframeStyles(step.target, step.keyframes);\n }\n animation.cancel();\n }\n }\n\n listeners.forEach((listener) => listener());\n onFinish?.();\n };\n\n const buildAnimations = () => {\n animations.forEach(({ animation }) => animation.cancel());\n animations = [];\n finalized = false;\n\n const schedule = scheduleSteps(steps);\n totalDuration = schedule.length ? Math.max(...schedule.map((item) => item.end)) : 0;\n\n if (respectReducedMotion && prefersReducedMotion()) {\n if (commitStyles) {\n schedule.forEach(({ step }) => applyFinalKeyframeStyles(step.target, step.keyframes));\n }\n reducedMotionApplied = true;\n return;\n }\n\n // Check if Web Animations API is available on all targets\n const animateUnavailable = schedule.some(\n ({ step }) => typeof (step.target as HTMLElement).animate !== 'function'\n );\n if (animateUnavailable) {\n if (commitStyles) {\n schedule.forEach(({ step }) => applyFinalKeyframeStyles(step.target, step.keyframes));\n }\n reducedMotionApplied = true;\n return;\n }\n\n reducedMotionApplied = false;\n animations = schedule.map(({ step, start }) => {\n const { delay: _delay, ...options } = step.options ?? {};\n const animation = step.target.animate(step.keyframes, {\n ...options,\n delay: start,\n fill: options.fill ?? 'both',\n });\n return { animation, step, start };\n });\n };\n\n return {\n add(step: TimelineStep): void {\n steps.push(step);\n },\n\n duration(): number {\n if (!steps.length) return 0;\n if (!animations.length) {\n const schedule = scheduleSteps(steps);\n return Math.max(...schedule.map((item) => item.end));\n }\n return totalDuration;\n },\n\n async play(): Promise<void> {\n buildAnimations();\n\n if (reducedMotionApplied || animations.length === 0) {\n finalize();\n return;\n }\n\n const finishPromises = animations.map((item) =>\n item.animation.finished.catch(() => undefined)\n );\n await Promise.all(finishPromises);\n finalize();\n },\n\n pause(): void {\n if (reducedMotionApplied) return;\n animations.forEach(({ animation }) => animation.pause());\n },\n\n resume(): void {\n if (reducedMotionApplied) return;\n animations.forEach(({ animation }) => animation.play());\n },\n\n stop(): void {\n animations.forEach(({ animation }) => animation.cancel());\n animations = [];\n reducedMotionApplied = false;\n },\n\n seek(time: number): void {\n if (reducedMotionApplied) return;\n animations.forEach(({ animation }) => {\n // currentTime is measured from the beginning of the animation including delay,\n // so we set it directly to the requested timeline time\n animation.currentTime = time;\n });\n },\n\n onFinish(callback: () => void): () => void {\n listeners.add(callback);\n return () => listeners.delete(callback);\n },\n };\n};\n","/**\r\n * View transition helpers.\r\n *\r\n * @module bquery/motion\r\n */\r\n\r\nimport type { TransitionOptions } from './types';\r\nimport { prefersReducedMotion } from './reduced-motion';\r\nimport { getBqueryConfig } from '../platform/config';\r\n\r\n/** Extended document type with View Transitions API */\r\ntype DocumentWithTransition = Document & {\r\n startViewTransition?: (callback: () => void | Promise<void>) => {\r\n finished: Promise<void>;\r\n ready: Promise<void>;\r\n updateCallbackDone: Promise<void>;\r\n skipTransition?: () => void;\r\n types?: {\r\n add: (type: string) => void;\r\n };\r\n };\r\n};\r\n\r\nconst sanitizeTokens = (tokens?: string[]): string[] =>\r\n (tokens ?? []).map((token) => token.trim()).filter((token) => token.length > 0);\r\n\r\n/**\r\n * Execute a DOM update with view transition animation.\r\n * Falls back to immediate update when View Transitions API is unavailable.\r\n *\r\n * @param updateOrOptions - Update function or options object\r\n * @returns Promise that resolves when transition completes\r\n *\r\n * @example\r\n * ```ts\r\n * await transition(() => {\r\n * $('#content').text('Updated');\r\n * });\r\n * ```\r\n */\r\nexport const transition = async (\r\n updateOrOptions: (() => void | Promise<void>) | TransitionOptions\r\n): Promise<void> => {\r\n const config = getBqueryConfig().transitions;\r\n const options: TransitionOptions =\r\n typeof updateOrOptions === 'function'\r\n ? {\r\n update: updateOrOptions,\r\n classes: config?.classes,\r\n types: config?.types,\r\n skipOnReducedMotion: config?.skipOnReducedMotion,\r\n }\r\n : {\r\n ...updateOrOptions,\r\n classes: updateOrOptions.classes ?? config?.classes,\r\n types: updateOrOptions.types ?? config?.types,\r\n skipOnReducedMotion: updateOrOptions.skipOnReducedMotion ?? config?.skipOnReducedMotion,\r\n };\r\n const update = options.update;\r\n\r\n // SSR/non-DOM environment fallback\r\n if (typeof document === 'undefined') {\r\n await update();\r\n return;\r\n }\r\n\r\n const doc = document as DocumentWithTransition;\r\n const root = document.documentElement;\r\n const classes = sanitizeTokens(options.classes);\r\n const types = sanitizeTokens(options.types);\r\n\r\n if (!doc.startViewTransition || (options.skipOnReducedMotion && prefersReducedMotion())) {\r\n await update();\r\n options.onFinish?.();\r\n return;\r\n }\r\n\r\n classes.forEach((className: string) => root.classList.add(className));\r\n\r\n try {\r\n const viewTransition = doc.startViewTransition(() => update());\r\n const transitionTypes = viewTransition.types;\r\n\r\n if (transitionTypes) {\r\n for (const type of types) {\r\n transitionTypes.add(type);\r\n }\r\n }\r\n\r\n await viewTransition.ready;\r\n options.onReady?.();\r\n await viewTransition.finished;\r\n options.onFinish?.();\r\n } finally {\r\n classes.forEach((className: string) => root.classList.remove(className));\r\n }\r\n};\r\n"],"mappings":"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"}