@ssgoi/core 2.5.6 → 3.1.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 (54) hide show
  1. package/dist/animator/animation.d.ts +57 -0
  2. package/dist/animator/animation.d.ts.map +1 -0
  3. package/dist/animator/index.d.ts +4 -3
  4. package/dist/animator/index.d.ts.map +1 -1
  5. package/dist/animator/multi-animator.d.ts +98 -0
  6. package/dist/animator/multi-animator.d.ts.map +1 -0
  7. package/dist/index.cjs +2 -2
  8. package/dist/index.d.ts +1 -0
  9. package/dist/index.d.ts.map +1 -1
  10. package/dist/index.js +603 -658
  11. package/dist/transition/create-transition-callback.d.ts +2 -1
  12. package/dist/transition/create-transition-callback.d.ts.map +1 -1
  13. package/dist/transition/transition-scope.d.ts +36 -0
  14. package/dist/transition/transition-scope.d.ts.map +1 -0
  15. package/dist/transition/transition-strategy.d.ts +20 -9
  16. package/dist/transition/transition-strategy.d.ts.map +1 -1
  17. package/dist/transition/transition.d.ts.map +1 -1
  18. package/dist/transitions/blur.d.ts +5 -5
  19. package/dist/transitions/blur.d.ts.map +1 -1
  20. package/dist/transitions/bounce.d.ts +5 -5
  21. package/dist/transitions/bounce.d.ts.map +1 -1
  22. package/dist/transitions/fade.d.ts +5 -5
  23. package/dist/transitions/fade.d.ts.map +1 -1
  24. package/dist/transitions/fly.d.ts +5 -5
  25. package/dist/transitions/fly.d.ts.map +1 -1
  26. package/dist/transitions/index.cjs +1 -1
  27. package/dist/transitions/index.js +206 -207
  28. package/dist/transitions/mask.d.ts +5 -5
  29. package/dist/transitions/mask.d.ts.map +1 -1
  30. package/dist/transitions/none.d.ts +3 -3
  31. package/dist/transitions/none.d.ts.map +1 -1
  32. package/dist/transitions/rotate.d.ts +5 -5
  33. package/dist/transitions/rotate.d.ts.map +1 -1
  34. package/dist/transitions/scale.d.ts +5 -5
  35. package/dist/transitions/scale.d.ts.map +1 -1
  36. package/dist/transitions/slide.d.ts +5 -5
  37. package/dist/transitions/slide.d.ts.map +1 -1
  38. package/dist/types.cjs +1 -1
  39. package/dist/types.d.ts +91 -78
  40. package/dist/types.d.ts.map +1 -1
  41. package/dist/types.js +60 -11
  42. package/dist/view-transitions/blind.d.ts +0 -1
  43. package/dist/view-transitions/blind.d.ts.map +1 -1
  44. package/dist/view-transitions/fade.d.ts.map +1 -1
  45. package/dist/view-transitions/index.cjs +13 -13
  46. package/dist/view-transitions/index.js +472 -479
  47. package/dist/view-transitions/scroll.d.ts.map +1 -1
  48. package/dist/view-transitions/slide.d.ts.map +1 -1
  49. package/dist/view-transitions/strip.d.ts.map +1 -1
  50. package/package.json +1 -1
  51. package/dist/animator/animation-scheduler.d.ts +0 -34
  52. package/dist/animator/animation-scheduler.d.ts.map +0 -1
  53. package/dist/test-utils.d.ts +0 -46
  54. package/dist/test-utils.d.ts.map +0 -1
package/dist/index.js CHANGED
@@ -1,65 +1,65 @@
1
- var $ = Object.defineProperty;
2
- var j = (n, t, i) => t in n ? $(n, t, { enumerable: !0, configurable: !0, writable: !0, value: i }) : n[t] = i;
3
- var p = (n, t, i) => j(n, typeof t != "symbol" ? t + "" : t, i);
4
- import { isMultiSpring as M } from "./types.js";
5
- import { isCssAnimation as vt, isSingleSpring as St, isTickAnimation as Ct, validateAnimationMode as Et } from "./types.js";
6
- import { j as At } from "./jaemin-BWkrXq0V.js";
7
- class B {
1
+ var K = Object.defineProperty;
2
+ var U = (n, e, t) => e in n ? K(n, e, { enumerable: !0, configurable: !0, writable: !0, value: t }) : n[e] = t;
3
+ var d = (n, e, t) => U(n, typeof e != "symbol" ? e + "" : e, t);
4
+ import { normalizeToMultiSpring as k, normalizeMultiSpringSchedule as F } from "./types.js";
5
+ import { isCssAnimation as kt, isMultiSpring as Vt, isSingleSpring as bt, isTickAnimation as It, validateAnimationMode as Rt, validateSpringItem as Pt } from "./types.js";
6
+ import { j as Mt } from "./jaemin-BWkrXq0V.js";
7
+ class G {
8
8
  constructor() {
9
- p(this, "listeners", /* @__PURE__ */ new Set());
10
- p(this, "rafId", null);
11
- p(this, "isRunning", !1);
9
+ d(this, "listeners", /* @__PURE__ */ new Set());
10
+ d(this, "rafId", null);
11
+ d(this, "isRunning", !1);
12
12
  // Timing
13
- p(this, "startTime", Date.now());
14
- p(this, "lastUpdate", this.startTime);
15
- p(this, "elapsed", 0);
13
+ d(this, "startTime", Date.now());
14
+ d(this, "lastUpdate", this.startTime);
15
+ d(this, "elapsed", 0);
16
16
  // Lag smoothing (mobile optimization)
17
- p(this, "lagThreshold", 500);
17
+ d(this, "lagThreshold", 500);
18
18
  // ms - detect tab switches, backgrounding
19
- p(this, "adjustedLag", 33);
19
+ d(this, "adjustedLag", 33);
20
20
  // ms - max time jump to prevent animation skip
21
- p(this, "maxDeltaTime", 33);
21
+ d(this, "maxDeltaTime", 33);
22
22
  // ms - clamp for physics stability (30fps minimum)
23
23
  // FPS throttling
24
- p(this, "gap", 1e3 / 240);
24
+ d(this, "gap", 1e3 / 240);
25
25
  // max 240fps
26
- p(this, "nextTime", this.gap);
27
- p(this, "tick", () => {
28
- const t = Date.now();
29
- let e = t - this.lastUpdate;
30
- e > this.lagThreshold || e < 0 ? (this.startTime += e - this.adjustedLag, e = this.adjustedLag) : e > this.maxDeltaTime && (e = this.maxDeltaTime), this.lastUpdate = t;
31
- const o = t - this.startTime, r = o - this.nextTime;
32
- if (r > 0) {
33
- const s = e / 1e3;
34
- this.elapsed = o / 1e3, this.nextTime += r + (r >= this.gap ? 4 : this.gap - r), this.listeners.forEach((a) => {
26
+ d(this, "nextTime", this.gap);
27
+ d(this, "tick", () => {
28
+ const e = Date.now();
29
+ let i = e - this.lastUpdate;
30
+ i > this.lagThreshold || i < 0 ? (this.startTime += i - this.adjustedLag, i = this.adjustedLag) : i > this.maxDeltaTime && (i = this.maxDeltaTime), this.lastUpdate = e;
31
+ const r = e - this.startTime, o = r - this.nextTime;
32
+ if (o > 0) {
33
+ const s = i / 1e3;
34
+ this.elapsed = r / 1e3, this.nextTime += o + (o >= this.gap ? 4 : this.gap - o), this.listeners.forEach((a) => {
35
35
  a(s, this.elapsed);
36
36
  });
37
37
  }
38
38
  this.listeners.size > 0 ? this.rafId = requestAnimationFrame(this.tick) : (this.isRunning = !1, this.rafId = null);
39
39
  });
40
40
  }
41
- subscribe(t) {
42
- return this.listeners.add(t), this.isRunning || (this.isRunning = !0, this.rafId = requestAnimationFrame(this.tick)), () => {
43
- this.unsubscribe(t);
41
+ subscribe(e) {
42
+ return this.listeners.add(e), this.isRunning || (this.isRunning = !0, this.rafId = requestAnimationFrame(this.tick)), () => {
43
+ this.unsubscribe(e);
44
44
  };
45
45
  }
46
- unsubscribe(t) {
47
- this.listeners.delete(t), this.listeners.size === 0 && this.rafId !== null && (cancelAnimationFrame(this.rafId), this.isRunning = !1, this.rafId = null);
46
+ unsubscribe(e) {
47
+ this.listeners.delete(e), this.listeners.size === 0 && this.rafId !== null && (cancelAnimationFrame(this.rafId), this.isRunning = !1, this.rafId = null);
48
48
  }
49
49
  /**
50
50
  * Configure lag smoothing behavior
51
51
  * @param threshold - Time threshold to detect lag (default: 500ms)
52
52
  * @param adjustedLag - Max time jump when lag detected (default: 33ms)
53
53
  */
54
- lagSmoothing(t, i) {
55
- this.lagThreshold = t, this.adjustedLag = Math.min(i, t);
54
+ lagSmoothing(e, t) {
55
+ this.lagThreshold = e, this.adjustedLag = Math.min(t, e);
56
56
  }
57
57
  /**
58
58
  * Set maximum FPS
59
59
  * @param fps - Target FPS (default: 240)
60
60
  */
61
- fps(t) {
62
- this.gap = 1e3 / t, this.nextTime = this.elapsed * 1e3 + this.gap;
61
+ fps(e) {
62
+ this.gap = 1e3 / e, this.nextTime = this.elapsed * 1e3 + this.gap;
63
63
  }
64
64
  getListenerCount() {
65
65
  return this.listeners.size;
@@ -68,71 +68,71 @@ class B {
68
68
  return this.elapsed;
69
69
  }
70
70
  }
71
- const I = new B();
71
+ const P = new G();
72
72
  function z(n) {
73
- const t = n.stiffness, i = n.damping, e = 1, o = Math.sqrt(t / e), r = i / (2 * Math.sqrt(t * e));
74
- return { omega: o, zeta: r };
73
+ const e = n.stiffness, t = n.damping, i = 1, r = Math.sqrt(e / i), o = t / (2 * Math.sqrt(e * i));
74
+ return { omega: r, zeta: o };
75
75
  }
76
- function H(n, t, i, e) {
77
- const { omega: o, zeta: r } = i, { position: s, velocity: a } = n, c = Math.min(e, 0.033), m = -2 * c * r * o * a, h = c * o * o * (t - s), u = a + m + h;
76
+ function q(n, e, t, i) {
77
+ const { omega: r, zeta: o } = t, { position: s, velocity: a } = n, c = Math.min(i, 0.033), l = -2 * c * o * r * a, f = c * r * r * (e - s), w = a + l + f;
78
78
  return {
79
- position: s + c * u,
80
- velocity: u
79
+ position: s + c * w,
80
+ velocity: w
81
81
  };
82
82
  }
83
- const K = 0.01, U = 0.01, N = 0.05;
84
- function W(n, t) {
85
- const i = Math.abs(t - n.position), e = Math.abs(n.velocity);
86
- return i < K && e < U;
83
+ const B = 0.01, J = 0.01, H = 0.05;
84
+ function N(n, e) {
85
+ const t = Math.abs(e - n.position), i = Math.abs(n.velocity);
86
+ return t < B && i < J;
87
87
  }
88
- function q(n) {
88
+ function Q(n) {
89
89
  const {
90
- from: t,
91
- to: i,
92
- spring: e,
93
- velocity: o = 0,
94
- onUpdate: r,
90
+ from: e,
91
+ to: t,
92
+ spring: i,
93
+ velocity: r = 0,
94
+ onUpdate: o,
95
95
  onComplete: s,
96
96
  onStart: a
97
97
  } = n;
98
- let c = { position: t, velocity: o }, m = !0, h = 0, u = !1;
99
- const g = z(e), l = (w) => {
100
- if (m) {
101
- if (u || (u = !0, a == null || a()), c = H(c, i, g, w), W(c, i)) {
102
- if (h += Math.min(w, 0.033), h >= N) {
103
- c = { position: i, velocity: 0 }, m = !1, r(c.position), I.unsubscribe(l), s();
98
+ let c = { position: e, velocity: r }, l = !0, f = 0, w = !1;
99
+ const u = z(i), h = (p) => {
100
+ if (l) {
101
+ if (w || (w = !0, a == null || a()), c = q(c, t, u, p), N(c, t)) {
102
+ if (f += Math.min(p, 0.033), f >= H) {
103
+ c = { position: t, velocity: 0 }, l = !1, o(c.position), P.unsubscribe(h), s();
104
104
  return;
105
105
  }
106
106
  } else
107
- h = 0;
108
- r(c.position);
107
+ f = 0;
108
+ o(c.position);
109
109
  }
110
110
  };
111
- return I.subscribe(l), {
111
+ return P.subscribe(h), {
112
112
  stop: () => {
113
- m && (m = !1, I.unsubscribe(l));
113
+ l && (l = !1, P.unsubscribe(h));
114
114
  },
115
115
  getPosition: () => c.position,
116
116
  getVelocity: () => c.velocity,
117
- isRunning: () => m
117
+ isRunning: () => l
118
118
  };
119
119
  }
120
- const x = 1e3 / 60;
121
- function G(n, t, i, e = 0) {
122
- const o = z(i), r = 600;
123
- let s = { position: n, velocity: e }, a = 0;
120
+ const V = 1e3 / 60;
121
+ function Z(n, e, t, i = 0) {
122
+ const r = z(t), o = 600;
123
+ let s = { position: n, velocity: i }, a = 0;
124
124
  const c = [];
125
- for (let m = 0; m < r; m++) {
126
- const h = m * x;
125
+ for (let l = 0; l < o; l++) {
126
+ const f = l * V;
127
127
  if (c.push({
128
- time: h,
128
+ time: f,
129
129
  position: s.position,
130
130
  velocity: s.velocity
131
- }), s = H(s, t, o, x / 1e3), W(s, t)) {
132
- if (a += x / 1e3, a >= N) {
131
+ }), s = q(s, e, r, V / 1e3), N(s, e)) {
132
+ if (a += V / 1e3, a >= H) {
133
133
  c.push({
134
- time: (m + 1) * x,
135
- position: t,
134
+ time: (l + 1) * V,
135
+ position: e,
136
136
  velocity: 0
137
137
  });
138
138
  break;
@@ -142,112 +142,115 @@ function G(n, t, i, e = 0) {
142
142
  }
143
143
  return c;
144
144
  }
145
- function D(n, t) {
145
+ function D(n, e) {
146
146
  if (n.length === 0)
147
147
  return { position: 0, velocity: 0 };
148
- const i = n[0], e = n[n.length - 1];
149
- if (t <= 0)
148
+ const t = n[0], i = n[n.length - 1];
149
+ if (e <= 0)
150
+ return { position: t.position, velocity: t.velocity };
151
+ if (e >= i.time)
150
152
  return { position: i.position, velocity: i.velocity };
151
- if (t >= e.time)
152
- return { position: e.position, velocity: e.velocity };
153
- let o = 0, r = n.length - 1;
154
- for (; o < r - 1; ) {
155
- const m = Math.floor((o + r) / 2);
156
- n[m].time <= t ? o = m : r = m;
153
+ let r = 0, o = n.length - 1;
154
+ for (; r < o - 1; ) {
155
+ const l = Math.floor((r + o) / 2);
156
+ n[l].time <= e ? r = l : o = l;
157
157
  }
158
- const s = n[o], a = n[r], c = (t - s.time) / (a.time - s.time);
158
+ const s = n[r], a = n[o], c = (e - s.time) / (a.time - s.time);
159
159
  return {
160
160
  position: s.position + (a.position - s.position) * c,
161
161
  velocity: s.velocity + (a.velocity - s.velocity) * c
162
162
  };
163
163
  }
164
- function J(n, t) {
165
- return n.map((i) => t(i.position));
164
+ function tt(n, e) {
165
+ return n.map((t) => e(t.position));
166
166
  }
167
- function Q(n) {
167
+ function et(n) {
168
168
  const {
169
- element: t,
170
- from: i,
171
- to: e,
172
- spring: o,
173
- velocity: r = 0,
169
+ element: e,
170
+ from: t,
171
+ to: i,
172
+ spring: r,
173
+ velocity: o = 0,
174
174
  style: s,
175
175
  onComplete: a,
176
176
  onStart: c
177
- } = n, m = G(i, e, o, r);
178
- if (m.length === 0)
177
+ } = n, l = Z(t, i, r, o);
178
+ if (l.length === 0)
179
179
  return c == null || c(), a(), {
180
180
  stop: () => {
181
181
  },
182
- getPosition: () => e,
182
+ getPosition: () => i,
183
183
  getVelocity: () => 0,
184
184
  isRunning: () => !1
185
185
  };
186
- const h = J(m, s), u = m[m.length - 1], g = u.time, l = t.animate(h, {
187
- duration: g,
186
+ const f = tt(l, s), w = l[l.length - 1], u = w.time, h = e.animate(f, {
187
+ duration: u,
188
188
  fill: "forwards",
189
189
  easing: "linear"
190
190
  // Spring physics already applied in keyframes
191
191
  });
192
- let w = !0;
193
- const d = performance.now();
194
- return c == null || c(), l.onfinish = () => {
195
- w && (w = !1, a());
192
+ let p = !0;
193
+ const v = performance.now();
194
+ return c == null || c(), h.onfinish = () => {
195
+ p && (p = !1, a());
196
196
  }, {
197
197
  stop: () => {
198
- w && (w = !1, l.cancel());
198
+ p && (p = !1, h.cancel());
199
199
  },
200
200
  getPosition: () => {
201
- if (!w)
202
- return u.position;
203
- const f = performance.now() - d;
204
- return D(m, f).position;
201
+ if (!p)
202
+ return w.position;
203
+ const y = performance.now() - v;
204
+ return D(l, y).position;
205
205
  },
206
206
  getVelocity: () => {
207
- if (!w)
207
+ if (!p)
208
208
  return 0;
209
- const f = performance.now() - d;
210
- return D(m, f).velocity;
209
+ const y = performance.now() - v;
210
+ return D(l, y).velocity;
211
211
  },
212
- isRunning: () => w
212
+ isRunning: () => p
213
213
  };
214
214
  }
215
- function Z(n) {
216
- const { from: t, to: i, spring: e, velocity: o, onComplete: r, onStart: s, tick: a, css: c } = n;
215
+ function it(n) {
216
+ const { from: e, to: t, spring: i, velocity: r, onComplete: o, onStart: s, tick: a, css: c } = n;
217
217
  if (a && c)
218
218
  throw new Error("Cannot use both 'tick' and 'css' options together");
219
- return !a && !c ? (s == null || s(), r(), {
219
+ return !a && !c ? (s == null || s(), o(), {
220
220
  stop: () => {
221
221
  },
222
- getPosition: () => i,
222
+ getPosition: () => t,
223
223
  getVelocity: () => 0,
224
224
  isRunning: () => !1
225
- }) : c ? Q({
225
+ }) : c ? et({
226
226
  element: c.element,
227
- from: t,
228
- to: i,
229
- spring: e,
230
- velocity: o,
227
+ from: e,
228
+ to: t,
229
+ spring: i,
230
+ velocity: r,
231
231
  style: c.style,
232
- onComplete: r,
232
+ onComplete: o,
233
233
  onStart: s
234
- }) : q({
235
- from: t,
236
- to: i,
237
- spring: e,
238
- velocity: o,
234
+ }) : Q({
235
+ from: e,
236
+ to: t,
237
+ spring: i,
238
+ velocity: r,
239
239
  onUpdate: a,
240
- onComplete: r,
240
+ onComplete: o,
241
241
  onStart: s
242
242
  });
243
243
  }
244
- class k {
244
+ class Y {
245
+ }
246
+ class I extends Y {
245
247
  constructor(t) {
246
- p(this, "options");
247
- p(this, "controls", null);
248
- p(this, "isAnimating", !1);
249
- p(this, "currentValue");
250
- p(this, "currentVelocity", 0);
248
+ super();
249
+ d(this, "options");
250
+ d(this, "controls", null);
251
+ d(this, "isAnimating", !1);
252
+ d(this, "currentValue");
253
+ d(this, "currentVelocity", 0);
251
254
  if (t.tick && t.css)
252
255
  throw new Error("Cannot use both 'tick' and 'css' options together");
253
256
  this.options = {
@@ -262,7 +265,7 @@ class k {
262
265
  }, this.currentValue = this.options.from;
263
266
  }
264
267
  runAnimation(t) {
265
- this.isAnimating = !0, this.controls = Z({
268
+ this.isAnimating = !0, this.controls = it({
266
269
  from: this.currentValue,
267
270
  to: t,
268
271
  spring: this.options.spring,
@@ -301,7 +304,6 @@ class k {
301
304
  }
302
305
  getCurrentState() {
303
306
  return {
304
- type: "single",
305
307
  position: this.getCurrentValue(),
306
308
  velocity: this.getVelocity(),
307
309
  from: this.options.from,
@@ -318,723 +320,666 @@ class k {
318
320
  this.options = { ...this.options, ...t };
319
321
  }
320
322
  static fromState(t, i) {
321
- const e = new k(i);
322
- return e.setValue(t.position), e.setVelocity(t.velocity), e;
323
+ const r = new I(i);
324
+ return r.setValue(t.position), r.setVelocity(t.velocity), r;
323
325
  }
324
326
  }
325
- class L {
327
+ class R extends Y {
326
328
  constructor(t) {
327
- p(this, "config");
328
- p(this, "animators", /* @__PURE__ */ new Map());
329
- p(this, "springOrder", []);
330
- p(this, "completedCount", 0);
331
- p(this, "completedAnimators", /* @__PURE__ */ new Set());
332
- p(this, "direction", "forward");
333
- p(this, "idCounter", 0);
334
- p(this, "timeoutIds", []);
335
- this.config = t, this.initializeAnimators();
329
+ super();
330
+ d(this, "config");
331
+ d(this, "animators", /* @__PURE__ */ new Map());
332
+ d(this, "springOrder", []);
333
+ d(this, "completedCount", 0);
334
+ d(this, "completedAnimators", /* @__PURE__ */ new Set());
335
+ d(this, "direction", "forward");
336
+ d(this, "idCounter", 0);
337
+ d(this, "rafId", null);
338
+ d(this, "element");
339
+ d(this, "from");
340
+ d(this, "to");
341
+ this.config = t.config, this.from = t.from, this.to = t.to, this.element = t.element, this.initializeAnimators();
336
342
  }
337
343
  generateId() {
338
344
  return `spring_${this.idCounter++}`;
339
345
  }
340
346
  initializeAnimators() {
341
347
  this.config.springs.forEach((t) => {
342
- const i = this.generateId(), e = new k({
343
- from: t.from,
344
- to: t.to,
348
+ const i = this.generateId(), r = new I({
349
+ from: this.from,
350
+ to: this.to,
345
351
  spring: t.spring,
346
352
  tick: t.tick,
353
+ css: t.css && this.element ? { element: this.element, style: t.css } : void 0,
347
354
  onComplete: () => this.onAnimatorComplete(i),
348
355
  onStart: t.onStart
349
356
  });
350
357
  this.animators.set(i, {
351
358
  id: i,
352
359
  item: t,
353
- animator: e,
354
- startTime: null
360
+ animator: r,
361
+ started: !1
355
362
  }), this.springOrder.push(i);
356
363
  });
357
364
  }
358
- normalizeSchedule(t) {
359
- const i = this.config.schedule ?? "overlap";
360
- return this.springOrder.map((e, o) => {
361
- const r = this.animators.get(e);
362
- if (!r)
363
- throw new Error(
364
- `AnimationScheduler: animator with id "${e}" not found`
365
- );
366
- if (i === "overlap")
367
- return { type: "offset", id: e, delay: 0 };
368
- if (i === "wait")
369
- return t === "forward" && o === 0 ? { type: "offset", id: e, delay: 0 } : t === "backward" && o === this.springOrder.length - 1 ? { type: "offset", id: e, delay: 0 } : { type: "wait", id: e };
370
- const s = r.item.offset ?? 0;
371
- if (t === "forward")
372
- return { type: "offset", id: e, delay: s };
373
- const a = Math.max(
374
- ...Array.from(this.animators.values()).map((c) => c.item.offset ?? 0)
375
- );
376
- return { type: "offset", id: e, delay: a - s };
377
- });
365
+ /**
366
+ * Calculate progress of an animator (0-1)
367
+ * Progress = |position - from| / |to - from|
368
+ */
369
+ getAnimatorProgress(t) {
370
+ const i = t.animator.getCurrentState(), r = Math.abs(i.to - i.from);
371
+ return r === 0 ? 1 : Math.abs(i.position - i.from) / r;
372
+ }
373
+ /**
374
+ * Get order of springs based on direction
375
+ * Forward: 0, 1, 2, ...
376
+ * Backward: n-1, n-2, ..., 0
377
+ */
378
+ getOrderedIds() {
379
+ return this.direction === "forward" ? this.springOrder : [...this.springOrder].reverse();
378
380
  }
379
381
  onAnimatorComplete(t) {
380
- var e, o, r, s, a, c;
382
+ var r, o, s, a, c, l;
381
383
  const i = this.animators.get(t);
382
- !i || this.completedAnimators.has(t) || (this.completedAnimators.add(t), this.completedCount++, (o = (e = i.item).onComplete) == null || o.call(e), (s = (r = this.config).onProgress) == null || s.call(r, this.completedCount, this.config.springs.length), this.handleWaitModeChaining(t), this.completedCount === this.config.springs.length && ((c = (a = this.config).onEnd) == null || c.call(a)));
384
+ !i || this.completedAnimators.has(t) || (this.completedAnimators.add(t), this.completedCount++, (o = (r = i.item).onComplete) == null || o.call(r), (a = (s = this.config).onProgress) == null || a.call(s, this.completedCount, this.config.springs.length), this.completedCount === this.config.springs.length && (this.stopScheduler(), (l = (c = this.config).onEnd) == null || l.call(c)));
383
385
  }
384
- handleWaitModeChaining(t) {
385
- if (this.config.schedule !== "wait")
386
- return;
387
- const i = this.springOrder.indexOf(t);
388
- if (this.direction === "forward") {
389
- const e = this.springOrder[i + 1];
390
- if (e) {
391
- const o = this.animators.get(e);
392
- o && o.startTime === null && this.startAnimator(e);
393
- }
394
- } else {
395
- const e = this.springOrder[i - 1];
396
- if (e) {
397
- const o = this.animators.get(e);
398
- o && o.startTime === null && this.startBackwardAnimator(e);
386
+ /**
387
+ * Check and start springs based on previous spring's progress
388
+ * Called on each frame while animation is running
389
+ */
390
+ checkAndStartSprings() {
391
+ const t = this.getOrderedIds();
392
+ for (let i = 0; i < t.length; i++) {
393
+ const r = t[i], o = this.animators.get(r);
394
+ if (!o || o.started) continue;
395
+ if (i === 0) {
396
+ this.startAnimator(r);
397
+ continue;
399
398
  }
399
+ const s = t[i - 1], a = this.animators.get(s);
400
+ if (!a || !a.started) continue;
401
+ const c = this.getAnimatorProgress(a), l = o.item.normalizedOffset;
402
+ c >= l && this.startAnimator(r);
400
403
  }
401
404
  }
402
405
  startAnimator(t) {
403
406
  const i = this.animators.get(t);
404
- !i || i.startTime !== null || (i.startTime = Date.now(), i.animator.forward());
407
+ !i || i.started || (i.started = !0, this.direction === "forward" ? i.animator.forward() : i.animator.backward());
405
408
  }
406
- startBackwardAnimator(t) {
407
- const i = this.animators.get(t);
408
- !i || i.startTime !== null || (i.startTime = Date.now(), i.animator.backward());
409
+ /**
410
+ * Start the scheduler loop that checks spring progress
411
+ */
412
+ startScheduler() {
413
+ const t = () => {
414
+ this.checkAndStartSprings(), this.getIsAnimating() && (this.rafId = requestAnimationFrame(t));
415
+ };
416
+ this.rafId = requestAnimationFrame(t);
417
+ }
418
+ stopScheduler() {
419
+ this.rafId !== null && (cancelAnimationFrame(this.rafId), this.rafId = null);
420
+ }
421
+ getFirstAnimator() {
422
+ var i;
423
+ const t = this.springOrder[0];
424
+ return t ? ((i = this.animators.get(t)) == null ? void 0 : i.animator) ?? null : null;
409
425
  }
410
426
  forward() {
411
- var i, e;
412
- this.stop(), this.direction = "forward", this.completedCount = 0, this.completedAnimators.clear(), (e = (i = this.config).onStart) == null || e.call(i), this.normalizeSchedule("forward").forEach((o) => {
413
- if (o.type !== "wait")
414
- if (o.delay === 0)
415
- this.startAnimator(o.id);
416
- else {
417
- const r = window.setTimeout(
418
- () => this.startAnimator(o.id),
419
- o.delay
420
- );
421
- this.timeoutIds.push(r);
422
- }
423
- });
427
+ var t, i;
428
+ this.stop(), this.direction = "forward", this.completedCount = 0, this.completedAnimators.clear(), this.resetStartedFlags(), (i = (t = this.config).onStart) == null || i.call(t), this.startScheduler();
424
429
  }
425
430
  backward() {
426
- var i, e;
427
- this.stop(), this.direction = "backward", this.completedCount = 0, this.completedAnimators.clear(), (e = (i = this.config).onStart) == null || e.call(i), this.normalizeSchedule("backward").forEach((o) => {
428
- if (o.type !== "wait")
429
- if (o.delay === 0)
430
- this.startBackwardAnimator(o.id);
431
- else {
432
- const r = window.setTimeout(
433
- () => this.startBackwardAnimator(o.id),
434
- o.delay
435
- );
436
- this.timeoutIds.push(r);
437
- }
431
+ var t, i;
432
+ this.stop(), this.direction = "backward", this.completedCount = 0, this.completedAnimators.clear(), this.resetStartedFlags(), (i = (t = this.config).onStart) == null || i.call(t), this.startScheduler();
433
+ }
434
+ resetStartedFlags() {
435
+ this.animators.forEach((t) => {
436
+ t.started = !1;
438
437
  });
439
438
  }
440
439
  stop() {
441
- this.timeoutIds.forEach((t) => clearTimeout(t)), this.timeoutIds = [], this.animators.forEach((t) => {
442
- t.animator.stop(), t.startTime = null;
440
+ this.stopScheduler(), this.animators.forEach((t) => {
441
+ t.animator.stop(), t.started = !1;
443
442
  });
444
443
  }
445
444
  reverse() {
446
445
  this.direction = this.direction === "forward" ? "backward" : "forward", this.animators.forEach((t) => {
447
- if (t.startTime === null)
446
+ if (!t.started)
448
447
  return;
449
448
  const i = t.animator.getCurrentState();
450
- if (i.type !== "single")
451
- return;
452
449
  if (i.position === i.to) {
453
- const o = k.fromState(
454
- { position: 1, velocity: 0 },
450
+ const o = t.item.css && this.element ? { element: this.element, style: t.item.css } : void 0, s = I.fromState(
451
+ { position: this.to, velocity: 0 },
455
452
  {
456
- from: t.item.to ?? 1,
457
- to: t.item.from ?? 0,
453
+ from: this.to,
454
+ to: this.from,
458
455
  spring: t.item.spring,
459
456
  tick: t.item.tick,
457
+ css: o,
460
458
  onComplete: () => this.onAnimatorComplete(t.id),
461
459
  onStart: t.item.onStart
462
460
  }
463
461
  );
464
- o.forward(), t.animator = o;
462
+ s.forward(), t.animator = s;
465
463
  } else
466
464
  t.animator.reverse();
467
465
  });
468
466
  }
469
467
  getCurrentState() {
470
- return {
471
- type: "multi",
472
- completed: this.completedCount,
473
- total: this.config.springs.length,
474
- direction: this.direction
468
+ const t = this.getFirstAnimator();
469
+ return t ? t.getCurrentState() : {
470
+ position: 0,
471
+ velocity: 0,
472
+ from: 0,
473
+ to: 1
475
474
  };
476
475
  }
476
+ /**
477
+ * Get current position value from first animator
478
+ */
479
+ getCurrentValue() {
480
+ const t = this.getFirstAnimator();
481
+ return (t == null ? void 0 : t.getCurrentValue()) ?? 0;
482
+ }
483
+ /**
484
+ * Get current velocity from first animator
485
+ */
486
+ getVelocity() {
487
+ const t = this.getFirstAnimator();
488
+ return (t == null ? void 0 : t.getVelocity()) ?? 0;
489
+ }
490
+ /**
491
+ * Set position value on first animator
492
+ * TODO: Support per-spring control
493
+ */
494
+ setValue(t) {
495
+ const i = this.getFirstAnimator();
496
+ i == null || i.setValue(t);
497
+ }
498
+ /**
499
+ * Set velocity on first animator
500
+ * TODO: Support per-spring control
501
+ */
502
+ setVelocity(t) {
503
+ const i = this.getFirstAnimator();
504
+ i == null || i.setVelocity(t);
505
+ }
506
+ /**
507
+ * Check if any animation is currently running
508
+ */
509
+ getIsAnimating() {
510
+ for (const t of this.animators.values())
511
+ if (t.animator.getIsAnimating())
512
+ return !0;
513
+ return !1;
514
+ }
515
+ /**
516
+ * Create MultiAnimator from existing state
517
+ * Uses first animator's state for initialization
518
+ */
519
+ static fromState(t, i) {
520
+ const r = new R(i);
521
+ return r.setValue(t.position), r.setVelocity(t.velocity), r;
522
+ }
477
523
  }
478
- const X = Symbol.for("TRANSITION_STRATEGY"), tt = (n) => ({
479
- runIn: async (t) => {
480
- const { currentAnimation: i } = n;
481
- if (i && i.direction === "out") {
482
- const s = i.controller.getCurrentState();
483
- if (i.controller.stop(), s.type === "multi")
484
- return i.controller.reverse(), {
485
- state: {
486
- position: 0,
487
- velocity: 0
488
- },
489
- from: 0,
490
- to: 1,
491
- direction: "forward"
492
- };
493
- if (t.out) {
494
- const a = await t.out, { from: c = 1, to: m = 0 } = a;
524
+ const X = Symbol.for("TRANSITION_STRATEGY"), nt = (n) => ({
525
+ runIn: async (e) => {
526
+ const { currentAnimation: t } = n;
527
+ if (t && t.direction === "out") {
528
+ const r = t.controller.getCurrentValue(), o = t.controller.getVelocity();
529
+ if (t.controller.stop(), e.out)
495
530
  return {
496
- config: a,
497
- state: {
498
- position: s.position,
499
- velocity: s.velocity
500
- },
501
- from: c,
502
- // OUT animation's from
503
- to: m,
504
- // OUT animation's to
531
+ config: await e.out,
532
+ state: { position: r, velocity: o },
533
+ from: 1,
534
+ to: 0,
505
535
  direction: "backward"
506
536
  // Will actually go 0→1 (backward means toward 'from')
507
537
  };
508
- }
509
538
  }
510
- const e = await t.in;
511
- if (!e)
512
- return {
513
- state: {
514
- position: 0,
515
- velocity: 0
516
- },
517
- from: 0,
518
- to: 1,
519
- direction: "forward"
520
- };
521
- if ("springs" in e)
522
- return {
523
- config: e,
524
- state: {
525
- position: 0,
526
- velocity: 0
527
- },
528
- from: 0,
529
- to: 1,
530
- direction: "forward"
531
- };
532
- const { from: o = 0, to: r = 1 } = e;
533
- return {
534
- config: e,
539
+ return e.in ? {
540
+ config: await e.in,
541
+ state: {
542
+ position: 0,
543
+ velocity: 0
544
+ },
545
+ from: 0,
546
+ to: 1,
547
+ direction: "forward"
548
+ } : {
535
549
  state: {
536
- position: o,
550
+ position: 0,
537
551
  velocity: 0
538
552
  },
539
- from: o,
540
- to: r,
553
+ from: 0,
554
+ to: 1,
541
555
  direction: "forward"
542
556
  };
543
557
  },
544
- runOut: async (t) => {
545
- const { currentAnimation: i } = n;
546
- if (i && i.direction === "in") {
547
- const s = i.controller.getCurrentState();
548
- if (i.controller.stop(), s.type === "multi")
549
- return i.controller.reverse(), {
550
- state: {
551
- position: 1,
552
- velocity: 0
553
- },
554
- from: 1,
555
- to: 0,
556
- direction: "forward"
557
- };
558
- if (t.in) {
559
- const a = await t.in, { from: c = 0, to: m = 1 } = a;
558
+ runOut: async (e) => {
559
+ const { currentAnimation: t } = n;
560
+ if (t && t.direction === "in") {
561
+ const r = t.controller.getCurrentValue(), o = t.controller.getVelocity();
562
+ if (t.controller.stop(), e.in)
560
563
  return {
561
- config: a,
562
- state: {
563
- position: s.position,
564
- velocity: s.velocity
565
- },
566
- from: c,
567
- // IN animation's from
568
- to: m,
569
- // IN animation's to
564
+ config: await e.in,
565
+ state: { position: r, velocity: o },
566
+ from: 0,
567
+ to: 1,
570
568
  direction: "backward"
571
569
  // Will actually go 1→0 (backward means toward 'from')
572
570
  };
573
- }
574
571
  }
575
- const e = await t.out;
576
- if (!e)
577
- return {
578
- state: {
579
- position: 1,
580
- velocity: 0
581
- },
582
- from: 1,
583
- to: 0,
584
- direction: "forward"
585
- };
586
- if ("springs" in e)
587
- return {
588
- config: e,
589
- state: {
590
- position: 1,
591
- velocity: 0
592
- },
593
- from: 1,
594
- to: 0,
595
- direction: "forward"
596
- };
597
- const { from: o = 1, to: r = 0 } = e;
598
- return {
599
- config: e,
572
+ return e.out ? {
573
+ config: await e.out,
600
574
  state: {
601
- position: o,
575
+ position: 1,
602
576
  velocity: 0
603
577
  },
604
- from: o,
605
- to: r,
578
+ from: 1,
579
+ to: 0,
606
580
  direction: "forward"
607
- };
608
- }
609
- }), it = () => ({
610
- runIn: async (n) => {
611
- const t = await n.in;
612
- if (!t)
613
- return {
614
- state: {
615
- position: 0,
616
- velocity: 0
617
- },
618
- from: 0,
619
- to: 1,
620
- direction: "forward"
621
- };
622
- if ("springs" in t)
623
- return {
624
- config: t,
625
- state: {
626
- position: 0,
627
- velocity: 0
628
- },
629
- from: 0,
630
- to: 1,
631
- direction: "forward"
632
- };
633
- const { from: i = 0, to: e = 1 } = t;
634
- return {
635
- config: t,
581
+ } : {
636
582
  state: {
637
- position: i,
583
+ position: 1,
638
584
  velocity: 0
639
585
  },
640
- from: i,
641
- to: e,
586
+ from: 1,
587
+ to: 0,
642
588
  direction: "forward"
643
589
  };
590
+ }
591
+ }), ot = () => ({
592
+ runIn: async (n) => n.in ? {
593
+ config: await n.in,
594
+ state: {
595
+ position: 0,
596
+ velocity: 0
597
+ },
598
+ from: 0,
599
+ to: 1,
600
+ direction: "forward"
601
+ } : {
602
+ state: {
603
+ position: 0,
604
+ velocity: 0
605
+ },
606
+ from: 0,
607
+ to: 1,
608
+ direction: "forward"
644
609
  },
645
- runOut: async (n) => {
646
- const t = await n.out;
647
- if (!t)
648
- return {
649
- state: {
650
- position: 1,
651
- velocity: 0
652
- },
653
- from: 1,
654
- to: 0,
655
- direction: "forward"
656
- };
657
- if ("springs" in t)
658
- return {
659
- config: t,
660
- state: {
661
- position: 1,
662
- velocity: 0
663
- },
664
- from: 1,
665
- to: 0,
666
- direction: "forward"
610
+ runOut: async (n) => n.out ? {
611
+ config: await n.out,
612
+ state: {
613
+ position: 1,
614
+ velocity: 0
615
+ },
616
+ from: 1,
617
+ to: 0,
618
+ direction: "forward"
619
+ } : {
620
+ state: {
621
+ position: 1,
622
+ velocity: 0
623
+ },
624
+ from: 1,
625
+ to: 0,
626
+ direction: "forward"
627
+ }
628
+ }), $ = "data-ssgoi-scope", j = "data-ssgoi-scope-ready";
629
+ function St() {
630
+ return (n) => {
631
+ if (n)
632
+ return n.setAttribute($, ""), queueMicrotask(() => {
633
+ queueMicrotask(() => {
634
+ n.setAttribute(j, "true");
635
+ });
636
+ }), () => {
667
637
  };
668
- const { from: i = 1, to: e = 0 } = t;
669
- return {
670
- config: t,
671
- state: {
672
- position: i,
673
- velocity: 0
674
- },
675
- from: i,
676
- to: e,
677
- direction: "forward"
678
- };
679
- }
680
- });
681
- function et(n, t) {
682
- var h;
683
- let i = null, e = null, o = null, r = null;
638
+ };
639
+ }
640
+ function rt(n) {
641
+ return n.hasAttribute(j);
642
+ }
643
+ function st(n) {
644
+ return n.closest(`[${$}]`);
645
+ }
646
+ function ct(n, e) {
647
+ var w;
648
+ let t = null, i = null, r = null, o = null;
684
649
  const s = {
685
650
  get currentAnimation() {
686
- return i;
651
+ return t;
687
652
  }
688
- }, a = ((h = t == null ? void 0 : t.strategy) == null ? void 0 : h.call(t, s)) || tt(s), c = async (u) => {
689
- var S, E, A;
690
- e && (e.remove(), e = null);
691
- const g = n(), l = g.in && await g.in(u), w = !(t != null && t.strategy) && g.out ? g.out(u) : void 0;
692
- if (!l)
653
+ }, a = ((w = e == null ? void 0 : e.strategy) == null ? void 0 : w.call(e, s)) || nt(s), c = async (u) => {
654
+ var E;
655
+ i && (i.remove(), i = null);
656
+ const h = n(), p = h.in && h.in(u), v = !(e != null && e.strategy) && h.out ? h.out(u) : void 0;
657
+ if (!p)
693
658
  return;
694
- if (M(l)) {
695
- const v = {
696
- in: Promise.resolve(l),
697
- out: w && Promise.resolve(w)
698
- };
699
- if (!(await a.runIn(v)).config) {
700
- i && (i.direction = "in");
701
- return;
702
- }
703
- (S = l.prepare) == null || S.call(l, u), l.wait && await l.wait();
704
- const C = new L({
705
- ...l,
706
- onEnd: () => {
707
- var b;
708
- i = null, (b = l.onEnd) == null || b.call(l);
709
- }
710
- });
711
- i = { controller: C, direction: "in" }, C.forward();
659
+ const y = {
660
+ in: k(p),
661
+ out: v ? k(v) : void 0
662
+ }, m = await a.runIn(y);
663
+ if (!m.config) {
664
+ t && (t.direction = "in");
712
665
  return;
713
666
  }
714
- const d = {
715
- in: Promise.resolve(l),
716
- out: w && Promise.resolve(w)
717
- }, f = await a.runIn(d);
718
- if (!f.config || "springs" in f.config)
719
- return;
720
- (A = (E = f.config).prepare) == null || A.call(E, u), f.config.wait && await f.config.wait();
721
- const y = k.fromState(f.state, {
722
- from: f.from,
723
- to: f.to,
724
- spring: f.config.spring,
725
- tick: f.config.tick,
726
- css: f.config.css ? { element: u, style: f.config.css } : void 0,
727
- onStart: f.config.onStart,
728
- onComplete: () => {
729
- var v, T;
730
- i = null, (T = (v = f.config) == null ? void 0 : v.onEnd) == null || T.call(v);
667
+ const g = m.config;
668
+ (E = g.prepare) == null || E.call(g, u), g.wait && await g.wait();
669
+ const C = F({
670
+ ...g,
671
+ onEnd: () => {
672
+ var A;
673
+ t = null, (A = g.onEnd) == null || A.call(g);
731
674
  }
675
+ }), S = R.fromState(m.state, {
676
+ config: C,
677
+ from: m.from,
678
+ to: m.to,
679
+ element: u
732
680
  });
733
- i = { controller: y, direction: "in" }, f.direction === "forward" ? y.forward() : y.backward();
734
- }, m = async (u) => {
735
- var S, E, A;
736
- e = u;
737
- const g = n(), l = g.out && await g.out(u);
738
- if (!l)
681
+ t = { controller: S, direction: "in" }, m.direction === "forward" ? S.forward() : S.backward();
682
+ }, l = async (u) => {
683
+ var A;
684
+ i = u;
685
+ const h = n(), p = !(e != null && e.strategy) && h.in ? h.in(u) : void 0, v = h.out && h.out(u);
686
+ if (!v)
739
687
  return;
740
- if (M(l)) {
741
- const v = {
742
- in: void 0,
743
- out: Promise.resolve(l)
744
- };
745
- if (!(await a.runOut(v)).config) {
746
- i && (i.direction = "out"), e && (e.remove(), e = null);
747
- return;
748
- }
749
- (S = l.prepare) == null || S.call(l, u), y(), l.wait && await l.wait();
750
- const C = new L({
751
- ...l,
752
- onEnd: () => {
753
- var b, O;
754
- (b = l.onEnd) == null || b.call(l), e && (e.remove(), e = null), i = null, (O = t == null ? void 0 : t.onCleanupEnd) == null || O.call(t);
755
- }
756
- });
757
- i = { controller: C, direction: "out" }, C.forward();
688
+ const y = {
689
+ in: p ? k(p) : void 0,
690
+ out: k(v)
691
+ }, m = await a.runOut(y);
692
+ if (!m.config) {
693
+ t && (t.direction = "out"), i && (i.remove(), i = null);
758
694
  return;
759
695
  }
760
- const w = {
761
- in: void 0,
762
- out: Promise.resolve(l)
763
- }, d = await a.runOut(w);
764
- if (!d.config || "springs" in d.config)
765
- return;
766
- (A = (E = d.config).prepare) == null || A.call(E, u), y(), d.config.wait && await d.config.wait();
767
- const f = k.fromState(d.state, {
768
- from: d.from,
769
- to: d.to,
770
- spring: d.config.spring,
771
- tick: d.config.tick,
772
- css: d.config.css ? { element: u, style: d.config.css } : void 0,
773
- onStart: d.config.onStart,
774
- onComplete: () => {
775
- var v, T, C;
776
- (T = (v = d.config) == null ? void 0 : v.onEnd) == null || T.call(v), e && (e.remove(), e = null), i = null, (C = t == null ? void 0 : t.onCleanupEnd) == null || C.call(t);
696
+ const g = m.config;
697
+ (A = g.prepare) == null || A.call(g, u), E(), g.wait && await g.wait();
698
+ const C = F({
699
+ ...g,
700
+ onEnd: () => {
701
+ var T, O;
702
+ (T = g.onEnd) == null || T.call(g), i && (i.remove(), i = null), t = null, (O = e == null ? void 0 : e.onCleanupEnd) == null || O.call(e);
777
703
  }
704
+ }), S = R.fromState(m.state, {
705
+ config: C,
706
+ from: m.from,
707
+ to: m.to,
708
+ element: u
778
709
  });
779
- i = { controller: f, direction: "out" }, d.direction === "forward" ? f.forward() : f.backward();
780
- function y() {
781
- !o || !e || (r && o.contains(r) ? o.insertBefore(e, r) : o.appendChild(e));
710
+ t = { controller: S, direction: "out" }, m.direction === "forward" ? S.forward() : S.backward();
711
+ function E() {
712
+ !r || !i || (o && r.contains(o) ? r.insertBefore(i, o) : r.appendChild(i));
782
713
  }
783
714
  };
715
+ let f = null;
784
716
  return (u) => {
785
717
  if (u)
786
- return o = u.parentElement, r = u.nextElementSibling, c(u), () => {
787
- if (u.isConnected) {
788
- const g = u.cloneNode(!0);
789
- m(g);
790
- } else
791
- m(u);
718
+ return r = u.parentElement, o = u.nextElementSibling, (e == null ? void 0 : e.scope) === "local" ? queueMicrotask(() => {
719
+ f = st(u), !(f && !rt(f)) && c(u);
720
+ }) : c(u), () => {
721
+ const h = u.isConnected ? u.cloneNode(!0) : u;
722
+ f ? queueMicrotask(() => {
723
+ document.contains(f) && l(h);
724
+ }) : l(h);
792
725
  };
793
726
  };
794
727
  }
795
- const nt = 3, ot = (n) => {
728
+ const at = 3, lt = (n) => {
796
729
  if (!n) return null;
797
- const t = n.split(`
798
- `).map((i) => i.trim());
799
- for (let i = nt; i < Math.min(t.length, 6); i++) {
800
- const e = t[i], o = e == null ? void 0 : e.match(/\(?([^):]+):(\d+):(\d+)\)?$/);
801
- if (!o)
730
+ const e = n.split(`
731
+ `).map((t) => t.trim());
732
+ for (let t = at; t < Math.min(e.length, 6); t++) {
733
+ const i = e[t], r = i == null ? void 0 : i.match(/\(?([^):]+):(\d+):(\d+)\)?$/);
734
+ if (!r)
802
735
  continue;
803
- const r = o[1] ?? "", s = o[2] ?? "0", a = o[3] ?? "0";
804
- return { file: r.split(/[\\/]/).pop() || r, line: s, column: a };
736
+ const o = r[1] ?? "", s = r[2] ?? "0", a = r[3] ?? "0";
737
+ return { file: o.split(/[\\/]/).pop() || o, line: s, column: a };
805
738
  }
806
739
  return null;
807
- }, R = /* @__PURE__ */ new Map(), V = /* @__PURE__ */ new Map();
808
- function rt(n, t, i) {
809
- R.set(n, t);
810
- let e = V.get(n);
811
- return e || (e = et(
740
+ }, x = /* @__PURE__ */ new Map(), M = /* @__PURE__ */ new Map();
741
+ function ut(n, e, t) {
742
+ x.set(n, e);
743
+ let i = M.get(n);
744
+ return i || (i = ct(
812
745
  () => {
813
- const o = R.get(n);
814
- return o || (console.warn(`Transition "${String(n)}" not found`), {});
746
+ const r = x.get(n);
747
+ return r || (console.warn(`Transition "${String(n)}" not found`), {});
815
748
  },
816
749
  {
817
- strategy: i,
818
- onCleanupEnd: () => Y(n)
750
+ strategy: t == null ? void 0 : t.strategy,
751
+ scope: t == null ? void 0 : t.scope,
752
+ onCleanupEnd: () => W(n)
819
753
  }
820
- ), V.set(n, e), e);
754
+ ), M.set(n, i), i);
821
755
  }
822
- function Y(n) {
823
- R.delete(n), V.delete(n);
756
+ function W(n) {
757
+ x.delete(n), M.delete(n);
824
758
  }
825
- function st() {
826
- const n = ot(new Error().stack);
759
+ function ft() {
760
+ const n = lt(new Error().stack);
827
761
  return n ? `auto_${n.file}_${n.line}_${n.column}` : Symbol(`ssgoi_auto_${Date.now()}`);
828
762
  }
829
- const _ = globalThis.FinalizationRegistry, F = _ ? (
763
+ const L = globalThis.FinalizationRegistry, _ = L ? (
830
764
  // eslint-disable-next-line @typescript-eslint/no-explicit-any
831
- new _((n) => {
765
+ new L((n) => {
832
766
  try {
833
- Y(n);
767
+ W(n);
834
768
  } catch {
835
769
  }
836
770
  })
837
771
  ) : void 0;
838
- function gt(n) {
839
- const t = n.key ?? st();
840
- if (n.ref && F)
772
+ function Ct(n) {
773
+ const e = n.key ?? ft();
774
+ if (n.ref && _)
841
775
  try {
842
- F.register(n.ref, t);
776
+ _.register(n.ref, e);
843
777
  } catch {
844
778
  }
845
- return rt(
846
- t,
779
+ return ut(
780
+ e,
847
781
  {
848
782
  in: n.in,
849
783
  out: n.out
850
784
  },
851
- n[X]
785
+ {
786
+ strategy: n[X],
787
+ scope: n.scope
788
+ }
852
789
  );
853
790
  }
854
- function ct(n) {
855
- const t = n.filter((i) => i.symmetric).map((i) => ({
856
- from: i.to,
857
- to: i.from,
858
- transition: i.transition
791
+ function dt(n) {
792
+ const e = n.filter((t) => t.symmetric).map((t) => ({
793
+ from: t.to,
794
+ to: t.from,
795
+ transition: t.transition
859
796
  }));
860
- return [...n, ...t];
797
+ return [...n, ...e];
861
798
  }
862
- function at(n) {
863
- let t = !1, i = 0, e = 0, o = !1;
864
- const r = 50, s = (w) => {
799
+ function mt(n) {
800
+ let e = !1, t = 0, i = 0, r = !1;
801
+ const o = 50, s = (p) => {
865
802
  if (!n) return;
866
- const d = w.touches[0];
867
- d && (o = d.clientX < r, o && (i = d.clientX, e = d.clientY));
868
- }, a = (w) => {
869
- if (!n || !o) return;
870
- const d = w.touches[0];
871
- if (!d) return;
872
- const f = d.clientX - i, y = d.clientY - e;
873
- f > window.outerWidth / 2 - 5 && Math.abs(f) > Math.abs(y) ? t = !0 : t = !1;
803
+ const v = p.touches[0];
804
+ v && (r = v.clientX < o, r && (t = v.clientX, i = v.clientY));
805
+ }, a = (p) => {
806
+ if (!n || !r) return;
807
+ const v = p.touches[0];
808
+ if (!v) return;
809
+ const y = v.clientX - t, m = v.clientY - i;
810
+ y > window.outerWidth / 2 - 5 && Math.abs(y) > Math.abs(m) ? e = !0 : e = !1;
874
811
  }, c = () => {
875
- n && (o = !1, i = 0, e = 0);
876
- }, m = () => t, h = () => {
812
+ n && (r = !1, t = 0, i = 0);
813
+ }, l = () => e, f = () => {
877
814
  typeof window > "u" || n && (window.addEventListener("touchstart", s, { passive: !0 }), window.addEventListener("touchmove", a, { passive: !0 }), window.addEventListener("touchend", c, { passive: !0 }));
878
- }, u = () => {
815
+ }, w = () => {
879
816
  typeof window > "u" || (window.removeEventListener("touchstart", s), window.removeEventListener("touchmove", a), window.removeEventListener("touchend", c));
880
817
  };
881
- let g = 0;
818
+ let u = 0;
882
819
  return {
883
- initialize: h,
884
- cleanup: u,
885
- isSwipePending: m,
820
+ initialize: f,
821
+ cleanup: w,
822
+ isSwipePending: l,
886
823
  resetSwipeDetection: () => {
887
- g++, g > 1 && (g = 0, t = !1);
824
+ u++, u > 1 && (u = 0, e = !1);
888
825
  }
889
826
  };
890
827
  }
891
- const lt = (n) => {
892
- let t = n.parentElement;
893
- for (; t && t !== document.body; ) {
894
- const i = window.getComputedStyle(t), e = i.overflow + i.overflowY + i.overflowX;
895
- if (e.includes("auto") || e.includes("scroll") || t.scrollHeight > t.clientHeight || t.scrollWidth > t.clientWidth)
896
- return t;
897
- t = t.parentElement;
828
+ const ht = (n) => {
829
+ let e = n.parentElement;
830
+ for (; e && e !== document.body; ) {
831
+ const t = window.getComputedStyle(e), i = t.overflow + t.overflowY + t.overflowX;
832
+ if (i.includes("auto") || i.includes("scroll") || e.scrollHeight > e.clientHeight || e.scrollWidth > e.clientWidth)
833
+ return e;
834
+ e = e.parentElement;
898
835
  }
899
836
  return document.documentElement;
900
- }, ut = (n) => {
901
- let t = n.parentElement;
902
- for (; t && t !== document.body; ) {
903
- const i = window.getComputedStyle(t).position;
904
- if (i === "relative" || i === "absolute" || i === "fixed" || i === "sticky")
905
- return t;
906
- t = t.parentElement;
837
+ }, gt = (n) => {
838
+ let e = n.parentElement;
839
+ for (; e && e !== document.body; ) {
840
+ const t = window.getComputedStyle(e).position;
841
+ if (t === "relative" || t === "absolute" || t === "fixed" || t === "sticky")
842
+ return e;
843
+ e = e.parentElement;
907
844
  }
908
845
  return document.body;
909
846
  };
910
- function ft() {
911
- let n = null, t = null;
912
- const i = /* @__PURE__ */ new Map();
913
- let e = null;
914
- const o = () => {
915
- n && e && i.set(e, {
847
+ function pt() {
848
+ let n = null, e = null;
849
+ const t = /* @__PURE__ */ new Map();
850
+ let i = null;
851
+ const r = () => {
852
+ n && i && t.set(i, {
916
853
  x: n.scrollLeft,
917
854
  y: n.scrollTop
918
855
  });
919
856
  };
920
857
  return {
921
- initializeContext: (h, u) => {
922
- t = h, n || (n = lt(h), (n === document.documentElement ? window : n).addEventListener("scroll", o, {
858
+ initializeContext: (f, w) => {
859
+ e = f, n || (n = ht(f), (n === document.documentElement ? window : n).addEventListener("scroll", r, {
923
860
  passive: !0
924
- })), e = u;
861
+ })), i = w;
925
862
  },
926
- calculateScrollOffset: (h, u) => {
927
- const g = h && i.has(h) ? i.get(h) : { x: 0, y: 0 }, l = u && i.has(u) ? i.get(u) : { x: 0, y: 0 };
863
+ calculateScrollOffset: (f, w) => {
864
+ const u = f && t.has(f) ? t.get(f) : { x: 0, y: 0 }, h = w && t.has(w) ? t.get(w) : { x: 0, y: 0 };
928
865
  return {
929
- x: -l.x + g.x,
930
- y: -l.y + g.y
866
+ x: -h.x + u.x,
867
+ y: -h.y + u.y
931
868
  };
932
869
  },
933
870
  getScrollContainer: () => n,
934
- getPositionedParentElement: () => t ? ut(t) : document.body,
935
- getScrollPosition: (h) => h && i.has(h) ? i.get(h) : { x: 0, y: 0 }
871
+ getPositionedParentElement: () => e ? gt(e) : document.body,
872
+ getScrollPosition: (f) => f && t.has(f) ? t.get(f) : { x: 0, y: 0 }
936
873
  };
937
874
  }
938
- function P(n, t) {
939
- if (t === "*")
875
+ function b(n, e) {
876
+ if (e === "*")
940
877
  return !0;
941
- if (t.endsWith("/*")) {
942
- const i = t.slice(0, -2);
943
- return n === i || n.startsWith(i + "/");
878
+ if (e.endsWith("/*")) {
879
+ const t = e.slice(0, -2);
880
+ return n === t || n.startsWith(t + "/");
944
881
  }
945
- return n === t;
882
+ return n === e;
946
883
  }
947
- function mt(n, t, i) {
948
- for (const e of i)
949
- if (P(n, e.from) && P(t, e.to))
950
- return e.transition;
951
- for (const e of i)
952
- if ((e.from === "*" || P(n, e.from)) && (e.to === "*" || P(t, e.to)))
953
- return e.transition;
884
+ function wt(n, e, t) {
885
+ for (const i of t)
886
+ if (b(n, i.from) && b(e, i.to))
887
+ return i.transition;
888
+ for (const i of t)
889
+ if ((i.from === "*" || b(n, i.from)) && (i.to === "*" || b(e, i.to)))
890
+ return i.transition;
954
891
  return null;
955
892
  }
956
- function pt(n) {
893
+ function At(n) {
957
894
  const {
958
- transitions: t = [],
959
- defaultTransition: i,
960
- middleware: e = (f, y) => ({ from: f, to: y }),
895
+ transitions: e = [],
896
+ defaultTransition: t,
897
+ middleware: i = (y, m) => ({ from: y, to: m }),
961
898
  // Identity function as default
962
- skipOnIosSwipe: o = !0
899
+ skipOnIosSwipe: r = !0
963
900
  // Default to true - skip animations on iOS swipe
964
901
  } = n;
965
- let r = null;
966
- const s = ct(t), {
902
+ let o = null;
903
+ const s = dt(e), {
967
904
  initializeContext: a,
968
905
  calculateScrollOffset: c,
969
- getScrollContainer: m,
970
- getPositionedParentElement: h,
971
- getScrollPosition: u
972
- } = ft(), g = at(o);
973
- g.initialize();
974
- function l() {
975
- if (r != null && r.from && (r != null && r.to)) {
976
- const { from: f, to: y } = e(
977
- r.from,
978
- r.to
979
- ), E = mt(
980
- f,
906
+ getScrollContainer: l,
907
+ getPositionedParentElement: f,
908
+ getScrollPosition: w
909
+ } = pt(), u = mt(r);
910
+ u.initialize();
911
+ function h() {
912
+ if (o != null && o.from && (o != null && o.to)) {
913
+ const { from: y, to: m } = i(
914
+ o.from,
915
+ o.to
916
+ ), C = wt(
981
917
  y,
918
+ m,
982
919
  s
983
- ) || i, A = c(
984
- r.from,
985
- r.to
986
- ), v = {
987
- scrollOffset: A,
988
- scroll: u(r.from),
920
+ ) || t, S = c(
921
+ o.from,
922
+ o.to
923
+ ), E = {
924
+ scrollOffset: S,
925
+ scroll: w(o.from),
989
926
  get scrollingElement() {
990
- return m() || document.documentElement;
927
+ return l() || document.documentElement;
991
928
  },
992
929
  get positionedParent() {
993
- return h();
930
+ return f();
994
931
  }
995
- }, T = {
996
- scrollOffset: A,
932
+ }, A = {
933
+ scrollOffset: S,
997
934
  get scroll() {
998
- return r ? u(r.to) : { x: 0, y: 0 };
935
+ return o ? w(o.to) : { x: 0, y: 0 };
999
936
  },
1000
937
  get scrollingElement() {
1001
- return m() || document.documentElement;
938
+ return l() || document.documentElement;
1002
939
  },
1003
940
  get positionedParent() {
1004
- return h();
941
+ return f();
1005
942
  }
1006
943
  };
1007
- E && (E.out && r.outResolve && r.outResolve(
1008
- (C) => E.out(C, v)
1009
- ), E.in && r.inResolve && r.inResolve(
1010
- (C) => E.in(C, T)
1011
- )), r = null;
944
+ C && (C.out && o.outResolve && o.outResolve(
945
+ (T) => C.out(T, E)
946
+ ), C.in && o.inResolve && o.inResolve(
947
+ (T) => C.in(T, A)
948
+ )), o = null;
1012
949
  }
1013
950
  }
1014
- const w = async (f, y) => g.isSwipePending() ? (g.resetSwipeDetection(), () => ({})) : y === "in" && (!r || !r.from) ? () => ({}) : (r || (r = {}), y === "out" ? (r.from = f, new Promise((S) => {
1015
- r.outResolve = S, l();
1016
- })) : (r.to = f, new Promise((S) => {
1017
- r.inResolve = S, l();
951
+ const p = async (y, m) => u.isSwipePending() ? (u.resetSwipeDetection(), () => ({})) : m === "in" && (!o || !o.from) ? () => ({}) : (o || (o = {}), m === "out" ? (o.from = y, new Promise((g) => {
952
+ o.outResolve = g, h();
953
+ })) : (o.to = y, new Promise((g) => {
954
+ o.inResolve = g, h();
1018
955
  })));
1019
- return (f) => ({
1020
- key: f,
1021
- in: async (y) => (a(y, f), (await w(f, "in"))(y)),
1022
- out: async (y) => (await w(f, "out"))(y),
956
+ return (y) => ({
957
+ key: y,
958
+ in: async (m) => (a(m, y), (await p(y, "in"))(m)),
959
+ out: async (m) => (await p(y, "out"))(m),
1023
960
  // Add page transition strategy for page-level transitions
1024
- [X]: it
961
+ [X]: ot
1025
962
  });
1026
963
  }
1027
964
  export {
965
+ $ as SCOPE_ATTR,
966
+ j as SCOPE_READY_ATTR,
1028
967
  X as TRANSITION_STRATEGY,
1029
- tt as createDefaultStrategy,
1030
- it as createPageTransitionStrategy,
1031
- pt as createSggoiTransitionContext,
1032
- st as generateAutoKey,
1033
- vt as isCssAnimation,
1034
- M as isMultiSpring,
1035
- St as isSingleSpring,
1036
- Ct as isTickAnimation,
1037
- At as jaeminInternal,
1038
- gt as transition,
1039
- Et as validateAnimationMode
968
+ nt as createDefaultStrategy,
969
+ ot as createPageTransitionStrategy,
970
+ At as createSggoiTransitionContext,
971
+ St as createTransitionScope,
972
+ st as findScope,
973
+ ft as generateAutoKey,
974
+ kt as isCssAnimation,
975
+ Vt as isMultiSpring,
976
+ rt as isScopeReady,
977
+ bt as isSingleSpring,
978
+ It as isTickAnimation,
979
+ Mt as jaeminInternal,
980
+ F as normalizeMultiSpringSchedule,
981
+ k as normalizeToMultiSpring,
982
+ Ct as transition,
983
+ Rt as validateAnimationMode,
984
+ Pt as validateSpringItem
1040
985
  };