@frybynite/image-cloud 0.7.7 → 0.8.1

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.
@@ -1,30 +1,30 @@
1
- const ft = Object.freeze({
1
+ const mt = Object.freeze({
2
2
  none: "none",
3
3
  sm: "0 2px 4px rgba(0,0,0,0.1)",
4
4
  md: "0 4px 16px rgba(0,0,0,0.4)",
5
5
  lg: "0 8px 32px rgba(0,0,0,0.5)",
6
6
  glow: "0 0 30px rgba(255,255,255,0.6)"
7
- }), xt = Object.freeze({
7
+ }), Rt = Object.freeze({
8
8
  energetic: Object.freeze({ overshoot: 0.25, bounces: 2, decayRatio: 0.5 }),
9
9
  playful: Object.freeze({ overshoot: 0.15, bounces: 1, decayRatio: 0.5 }),
10
10
  subtle: Object.freeze({ overshoot: 0.08, bounces: 1, decayRatio: 0.5 })
11
- }), St = Object.freeze({
11
+ }), It = Object.freeze({
12
12
  gentle: Object.freeze({ stiffness: 150, damping: 30, mass: 1, oscillations: 2 }),
13
13
  bouncy: Object.freeze({ stiffness: 300, damping: 15, mass: 1, oscillations: 4 }),
14
14
  wobbly: Object.freeze({ stiffness: 180, damping: 12, mass: 1.5, oscillations: 5 }),
15
15
  snappy: Object.freeze({ stiffness: 400, damping: 25, mass: 0.8, oscillations: 2 })
16
- }), Et = Object.freeze({
16
+ }), Tt = Object.freeze({
17
17
  gentle: Object.freeze({ amplitude: 30, frequency: 1.5, decay: !0, decayRate: 0.9, phase: 0 }),
18
18
  playful: Object.freeze({ amplitude: 50, frequency: 2.5, decay: !0, decayRate: 0.7, phase: 0 }),
19
19
  serpentine: Object.freeze({ amplitude: 60, frequency: 3, decay: !1, decayRate: 1, phase: 0 }),
20
20
  flutter: Object.freeze({ amplitude: 20, frequency: 4, decay: !0, decayRate: 0.5, phase: 0 })
21
- }), bt = Object.freeze({
22
- type: "linear"
23
21
  }), yt = Object.freeze({
24
- mode: "none"
22
+ type: "linear"
25
23
  }), vt = Object.freeze({
26
24
  mode: "none"
27
- }), At = Object.freeze({
25
+ }), wt = Object.freeze({
26
+ mode: "none"
27
+ }), Mt = Object.freeze({
28
28
  default: Object.freeze({
29
29
  border: Object.freeze({
30
30
  width: 0,
@@ -50,17 +50,19 @@ const ft = Object.freeze({
50
50
  focused: Object.freeze({
51
51
  shadow: "none"
52
52
  })
53
- }), $t = Object.freeze({
53
+ }), _t = Object.freeze({
54
54
  rows: 1,
55
55
  amplitude: 100,
56
56
  frequency: 2,
57
57
  phaseShift: 0,
58
58
  synchronization: "offset"
59
59
  // Note: Image rotation along wave is now controlled via image.rotation.mode = 'tangent'
60
- }), Dt = Object.freeze({
60
+ }), Ut = Object.freeze({
61
+ spacing: 0
62
+ }), Ht = Object.freeze({
61
63
  mobile: Object.freeze({ maxWidth: 767 }),
62
64
  tablet: Object.freeze({ maxWidth: 1199 })
63
- }), Pt = Object.freeze({
65
+ }), Nt = Object.freeze({
64
66
  mode: "adaptive",
65
67
  // Default to adaptive sizing
66
68
  minSize: 50,
@@ -72,40 +74,40 @@ const ft = Object.freeze({
72
74
  // No variance by default
73
75
  max: 1
74
76
  })
75
- }), Ut = Object.freeze({
77
+ }), jt = Object.freeze({
76
78
  mode: "none",
77
79
  range: Object.freeze({
78
80
  min: -15,
79
81
  max: 15
80
82
  })
81
- }), Ct = Object.freeze({
82
- sizing: Pt,
83
- rotation: Ut
84
- }), Lt = Object.freeze({
83
+ }), Ft = Object.freeze({
84
+ sizing: Nt,
85
+ rotation: jt
86
+ }), zt = Object.freeze({
85
87
  validateUrls: !0,
86
88
  validationTimeout: 5e3,
87
89
  validationMethod: "head",
88
90
  allowedExtensions: ["jpg", "jpeg", "png", "gif", "webp", "bmp"]
89
- }), Mt = Object.freeze({
91
+ }), Ot = Object.freeze({
90
92
  enabled: !1,
91
93
  centers: !1,
92
94
  loaders: !1
93
- }), y = Object.freeze({
95
+ }), x = Object.freeze({
94
96
  // Loader configuration (always an array, composite behavior is implicit)
95
97
  loaders: [],
96
98
  // Shared loader settings and debug config
97
99
  config: Object.freeze({
98
- loaders: Lt,
99
- debug: Mt
100
+ loaders: zt,
101
+ debug: Ot
100
102
  }),
101
103
  // Image sizing and rotation configuration
102
- image: Ct,
104
+ image: Ft,
103
105
  // Pattern-based layout configuration
104
106
  layout: Object.freeze({
105
107
  algorithm: "radial",
106
108
  scaleDecay: 0,
107
109
  // No decay by default (0-1 for radial/spiral)
108
- responsive: Dt,
110
+ responsive: Ht,
109
111
  targetCoverage: 0.6,
110
112
  // Target 60% of container area
111
113
  densityFactor: 1,
@@ -161,9 +163,9 @@ const ft = Object.freeze({
161
163
  }),
162
164
  easing: "cubic-bezier(0.25, 1, 0.5, 1)",
163
165
  // smooth deceleration
164
- path: bt,
165
- rotation: yt,
166
- scale: vt
166
+ path: yt,
167
+ rotation: vt,
168
+ scale: wt
167
169
  })
168
170
  }),
169
171
  // Pattern-based interaction configuration
@@ -205,18 +207,10 @@ const ft = Object.freeze({
205
207
  ui: Object.freeze({
206
208
  showLoadingSpinner: !1,
207
209
  showImageCounter: !1
208
- }),
209
- performance: Object.freeze({
210
- lazyLoad: void 0,
211
- // STUB: Not implemented yet
212
- preloadCount: void 0,
213
- // STUB: Not implemented yet
214
- imageQuality: void 0
215
- // STUB: Not implemented yet
216
210
  })
217
211
  }),
218
212
  // Image styling
219
- styling: At
213
+ styling: Mt
220
214
  });
221
215
  function Z(o, t) {
222
216
  if (!o) return t || {};
@@ -224,7 +218,7 @@ function Z(o, t) {
224
218
  const i = { ...o };
225
219
  return t.border !== void 0 && (i.border = { ...o.border, ...t.border }), t.borderTop !== void 0 && (i.borderTop = { ...o.borderTop, ...t.borderTop }), t.borderRight !== void 0 && (i.borderRight = { ...o.borderRight, ...t.borderRight }), t.borderBottom !== void 0 && (i.borderBottom = { ...o.borderBottom, ...t.borderBottom }), t.borderLeft !== void 0 && (i.borderLeft = { ...o.borderLeft, ...t.borderLeft }), t.filter !== void 0 && (i.filter = { ...o.filter, ...t.filter }), t.outline !== void 0 && (i.outline = { ...o.outline, ...t.outline }), t.shadow !== void 0 && (i.shadow = t.shadow), t.clipPath !== void 0 && (i.clipPath = t.clipPath), t.opacity !== void 0 && (i.opacity = t.opacity), t.cursor !== void 0 && (i.cursor = t.cursor), t.className !== void 0 && (i.className = t.className), t.objectFit !== void 0 && (i.objectFit = t.objectFit), t.aspectRatio !== void 0 && (i.aspectRatio = t.aspectRatio), t.borderRadiusTopLeft !== void 0 && (i.borderRadiusTopLeft = t.borderRadiusTopLeft), t.borderRadiusTopRight !== void 0 && (i.borderRadiusTopRight = t.borderRadiusTopRight), t.borderRadiusBottomRight !== void 0 && (i.borderRadiusBottomRight = t.borderRadiusBottomRight), t.borderRadiusBottomLeft !== void 0 && (i.borderRadiusBottomLeft = t.borderRadiusBottomLeft), i;
226
220
  }
227
- function _t(o, t) {
221
+ function Wt(o, t) {
228
222
  if (!t) return { ...o };
229
223
  const i = Z(o.default, t.default), e = Z(
230
224
  Z(i, o.hover),
@@ -239,7 +233,7 @@ function _t(o, t) {
239
233
  focused: n
240
234
  };
241
235
  }
242
- function Ht(o, t) {
236
+ function kt(o, t) {
243
237
  if (!t) return { ...o };
244
238
  const i = { ...o };
245
239
  if (t.sizing !== void 0 && (i.sizing = {
@@ -258,7 +252,7 @@ function Ht(o, t) {
258
252
  }
259
253
  return i;
260
254
  }
261
- function jt(o) {
255
+ function Gt(o) {
262
256
  const t = o.layout?.rotation;
263
257
  if (t && "enabled" in t)
264
258
  return {
@@ -268,7 +262,7 @@ function jt(o) {
268
262
  }
269
263
  };
270
264
  }
271
- function Nt(o) {
265
+ function qt(o) {
272
266
  const t = o.layout?.sizing?.variance;
273
267
  if (t)
274
268
  return {
@@ -279,8 +273,8 @@ function Nt(o) {
279
273
  }
280
274
  };
281
275
  }
282
- function Wt(o = {}) {
283
- const t = jt(o), i = Nt(o);
276
+ function Xt(o = {}) {
277
+ const t = Gt(o), i = qt(o);
284
278
  let e = o.image;
285
279
  (t || i) && (e = {
286
280
  ...i || {},
@@ -298,94 +292,100 @@ function Wt(o = {}) {
298
292
  });
299
293
  const r = {
300
294
  loaders: {
301
- ...Lt,
295
+ ...zt,
302
296
  ...o.config?.loaders ?? {}
303
297
  }
304
298
  }, s = {
305
299
  loaders: n,
306
300
  config: r,
307
- image: Ht(Ct, e),
308
- layout: { ...y.layout },
309
- animation: { ...y.animation },
310
- interaction: { ...y.interaction },
311
- rendering: { ...y.rendering },
312
- styling: _t(At, o.styling)
301
+ image: kt(Ft, e),
302
+ layout: { ...x.layout },
303
+ animation: { ...x.animation },
304
+ interaction: { ...x.interaction },
305
+ rendering: { ...x.rendering },
306
+ styling: Wt(Mt, o.styling)
313
307
  };
314
- return o.layout && (s.layout = {
315
- ...y.layout,
308
+ if (o.layout && (s.layout = {
309
+ ...x.layout,
316
310
  ...o.layout
317
311
  }, o.layout.responsive && (s.layout.responsive = {
318
- ...y.layout.responsive,
319
- mobile: o.layout.responsive.mobile ? { ...y.layout.responsive.mobile, ...o.layout.responsive.mobile } : y.layout.responsive.mobile,
320
- tablet: o.layout.responsive.tablet ? { ...y.layout.responsive.tablet, ...o.layout.responsive.tablet } : y.layout.responsive.tablet
312
+ ...x.layout.responsive,
313
+ mobile: o.layout.responsive.mobile ? { ...x.layout.responsive.mobile, ...o.layout.responsive.mobile } : x.layout.responsive.mobile,
314
+ tablet: o.layout.responsive.tablet ? { ...x.layout.responsive.tablet, ...o.layout.responsive.tablet } : x.layout.responsive.tablet
321
315
  }), o.layout.spacing && (s.layout.spacing = {
322
- ...y.layout.spacing,
316
+ ...x.layout.spacing,
323
317
  ...o.layout.spacing
324
318
  })), o.animation && (s.animation = {
325
- ...y.animation,
319
+ ...x.animation,
326
320
  ...o.animation
327
321
  }, o.animation.easing && (s.animation.easing = {
328
- ...y.animation.easing,
322
+ ...x.animation.easing,
329
323
  ...o.animation.easing
330
324
  }), o.animation.queue && (s.animation.queue = {
331
- ...y.animation.queue,
325
+ ...x.animation.queue,
332
326
  ...o.animation.queue
333
327
  }), o.animation.performance && (s.animation.performance = {
334
- ...y.animation.performance,
328
+ ...x.animation.performance,
335
329
  ...o.animation.performance
336
330
  }), o.animation.entry && (s.animation.entry = {
337
- ...y.animation.entry,
331
+ ...x.animation.entry,
338
332
  ...o.animation.entry,
339
333
  start: o.animation.entry.start ? {
340
- ...y.animation.entry.start,
334
+ ...x.animation.entry.start,
341
335
  ...o.animation.entry.start,
342
- circular: o.animation.entry.start.circular ? { ...y.animation.entry.start.circular, ...o.animation.entry.start.circular } : y.animation.entry.start.circular
343
- } : y.animation.entry.start,
344
- timing: o.animation.entry.timing ? { ...y.animation.entry.timing, ...o.animation.entry.timing } : y.animation.entry.timing,
345
- path: o.animation.entry.path ? { ...bt, ...o.animation.entry.path } : y.animation.entry.path,
346
- rotation: o.animation.entry.rotation ? { ...yt, ...o.animation.entry.rotation } : y.animation.entry.rotation,
347
- scale: o.animation.entry.scale ? { ...vt, ...o.animation.entry.scale } : y.animation.entry.scale
336
+ circular: o.animation.entry.start.circular ? { ...x.animation.entry.start.circular, ...o.animation.entry.start.circular } : x.animation.entry.start.circular
337
+ } : x.animation.entry.start,
338
+ timing: o.animation.entry.timing ? { ...x.animation.entry.timing, ...o.animation.entry.timing } : x.animation.entry.timing,
339
+ path: o.animation.entry.path ? { ...yt, ...o.animation.entry.path } : x.animation.entry.path,
340
+ rotation: o.animation.entry.rotation ? { ...vt, ...o.animation.entry.rotation } : x.animation.entry.rotation,
341
+ scale: o.animation.entry.scale ? { ...wt, ...o.animation.entry.scale } : x.animation.entry.scale
348
342
  })), o.interaction && (s.interaction = {
349
- ...y.interaction,
343
+ ...x.interaction,
350
344
  ...o.interaction
351
345
  }, o.interaction.focus && (s.interaction.focus = {
352
- ...y.interaction.focus,
346
+ ...x.interaction.focus,
353
347
  ...o.interaction.focus
354
348
  }), o.interaction.navigation && (s.interaction.navigation = {
355
- ...y.interaction.navigation,
349
+ ...x.interaction.navigation,
356
350
  ...o.interaction.navigation
357
351
  }), o.interaction.gestures && (s.interaction.gestures = {
358
- ...y.interaction.gestures,
352
+ ...x.interaction.gestures,
359
353
  ...o.interaction.gestures
360
354
  })), o.rendering && (s.rendering = {
361
- ...y.rendering,
355
+ ...x.rendering,
362
356
  ...o.rendering
363
357
  }, o.rendering.responsive && (s.rendering.responsive = {
364
- ...y.rendering.responsive,
358
+ ...x.rendering.responsive,
365
359
  ...o.rendering.responsive,
366
- breakpoints: o.rendering.responsive.breakpoints ? { ...y.rendering.responsive.breakpoints, ...o.rendering.responsive.breakpoints } : y.rendering.responsive.breakpoints,
367
- mobileDetection: o.rendering.responsive.mobileDetection ? o.rendering.responsive.mobileDetection : y.rendering.responsive.mobileDetection
360
+ breakpoints: o.rendering.responsive.breakpoints ? { ...x.rendering.responsive.breakpoints, ...o.rendering.responsive.breakpoints } : x.rendering.responsive.breakpoints,
361
+ mobileDetection: o.rendering.responsive.mobileDetection ? o.rendering.responsive.mobileDetection : x.rendering.responsive.mobileDetection
368
362
  }), o.rendering.ui && (s.rendering.ui = {
369
- ...y.rendering.ui,
363
+ ...x.rendering.ui,
370
364
  ...o.rendering.ui
371
- }), o.rendering.performance && (s.rendering.performance = {
372
- ...y.rendering.performance,
373
- ...o.rendering.performance
374
365
  })), s.config.debug = {
375
- ...Mt,
366
+ ...Ot,
376
367
  ...o.config?.debug ?? {}
377
- }, s;
368
+ }, s.layout.algorithm === "honeycomb" && s.styling) {
369
+ const c = { shape: "hexagon", mode: "height-relative" };
370
+ s.styling = {
371
+ ...s.styling,
372
+ default: { ...s.styling.default, clipPath: c },
373
+ hover: { ...s.styling.hover, clipPath: c }
374
+ // focused: untouched — user config respected
375
+ };
376
+ }
377
+ return s;
378
378
  }
379
- function kt(o, t) {
380
- return { ...o ? xt[o] : xt.playful, ...t };
379
+ function Yt(o, t) {
380
+ return { ...o ? Rt[o] : Rt.playful, ...t };
381
381
  }
382
- function Gt(o, t) {
383
- return { ...o ? St[o] : St.gentle, ...t };
382
+ function Bt(o, t) {
383
+ return { ...o ? It[o] : It.gentle, ...t };
384
384
  }
385
- function qt(o, t) {
386
- return { ...o ? Et[o] : Et.gentle, ...t };
385
+ function Vt(o, t) {
386
+ return { ...o ? Tt[o] : Tt.gentle, ...t };
387
387
  }
388
- class Bt {
388
+ class Jt {
389
389
  constructor(t) {
390
390
  this.activeAnimations = /* @__PURE__ */ new Map(), this.animationIdCounter = 0, this.config = t;
391
391
  }
@@ -412,12 +412,12 @@ class Bt {
412
412
  */
413
413
  animateTransformCancellable(t, i, e, n = null, a = null) {
414
414
  this.cancelAllAnimations(t);
415
- const r = n ?? this.config.duration, s = a ?? this.config.easing.default, h = this.buildTransformString(i), c = this.buildTransformString(e);
415
+ const r = n ?? this.config.duration, s = a ?? this.config.easing.default, c = this.buildTransformString(i), l = this.buildTransformString(e);
416
416
  t.style.transition = "none";
417
- const d = t.animate(
417
+ const u = t.animate(
418
418
  [
419
- { transform: h },
420
- { transform: c }
419
+ { transform: c },
420
+ { transform: l }
421
421
  ],
422
422
  {
423
423
  duration: r,
@@ -425,20 +425,20 @@ class Bt {
425
425
  fill: "forwards"
426
426
  // Keep final state after animation
427
427
  }
428
- ), l = {
428
+ ), h = {
429
429
  id: `anim-${++this.animationIdCounter}`,
430
430
  element: t,
431
- animation: d,
431
+ animation: u,
432
432
  fromState: i,
433
433
  toState: e,
434
434
  startTime: performance.now(),
435
435
  duration: r
436
436
  };
437
- return this.activeAnimations.set(t, l), d.finished.then(() => {
438
- t.style.transform = c, this.activeAnimations.delete(t);
437
+ return this.activeAnimations.set(t, h), u.finished.then(() => {
438
+ t.style.transform = l, this.activeAnimations.delete(t);
439
439
  }).catch(() => {
440
440
  this.activeAnimations.delete(t);
441
- }), l;
441
+ }), h;
442
442
  }
443
443
  /**
444
444
  * Cancel an active animation
@@ -481,8 +481,8 @@ class Bt {
481
481
  const e = getComputedStyle(t).transform;
482
482
  if (e === "none" || !e)
483
483
  return { x: 0, y: 0, rotation: 0, scale: 1 };
484
- const n = new DOMMatrix(e), a = Math.sqrt(n.a * n.a + n.b * n.b), r = Math.atan2(n.b, n.a) * (180 / Math.PI), s = n.e, h = n.f;
485
- return { x: s, y: h, rotation: r, scale: a };
484
+ const n = new DOMMatrix(e), a = Math.sqrt(n.a * n.a + n.b * n.b), r = Math.atan2(n.b, n.a) * (180 / Math.PI), s = n.e, c = n.f;
485
+ return { x: s, y: c, rotation: r, scale: a };
486
486
  }
487
487
  /**
488
488
  * Check if an element has an active animation
@@ -544,31 +544,31 @@ class Bt {
544
544
  function J(o, t, i) {
545
545
  return o + (t - o) * i;
546
546
  }
547
- function Yt(o, t, i, e) {
548
- const { overshoot: n, bounces: a, decayRatio: r } = e, s = i.x - t.x, h = i.y - t.y, c = Xt(a, r);
549
- let d = 0, l = 0, u = 1, g = n, p = !1;
550
- for (let f = 0; f < c.length; f++)
551
- if (o <= c[f].time) {
552
- l = f === 0 ? 0 : c[f - 1].time, u = c[f].time, g = c[f].overshoot, p = c[f].isOvershoot;
547
+ function Kt(o, t, i, e) {
548
+ const { overshoot: n, bounces: a, decayRatio: r } = e, s = i.x - t.x, c = i.y - t.y, l = Zt(a, r);
549
+ let u = 0, h = 0, d = 1, g = n, b = !1;
550
+ for (let f = 0; f < l.length; f++)
551
+ if (o <= l[f].time) {
552
+ h = f === 0 ? 0 : l[f - 1].time, d = l[f].time, g = l[f].overshoot, b = l[f].isOvershoot;
553
553
  break;
554
554
  }
555
- const b = (o - l) / (u - l);
556
- if (p)
557
- d = 1 + g * ot(b);
558
- else if (l === 0)
559
- d = ot(b);
555
+ const m = (o - h) / (d - h);
556
+ if (b)
557
+ u = 1 + g * nt(m);
558
+ else if (h === 0)
559
+ u = nt(m);
560
560
  else {
561
- const m = 1 + (c.find(
562
- (S, v) => S.time > l && v > 0 && c[v - 1].isOvershoot
561
+ const p = 1 + (l.find(
562
+ (y, v) => y.time > h && v > 0 && l[v - 1].isOvershoot
563
563
  )?.overshoot || g);
564
- d = J(m, 1, ot(b));
564
+ u = J(p, 1, nt(m));
565
565
  }
566
566
  return {
567
- x: t.x + s * d,
568
- y: t.y + h * d
567
+ x: t.x + s * u,
568
+ y: t.y + c * u
569
569
  };
570
570
  }
571
- function Xt(o, t) {
571
+ function Zt(o, t) {
572
572
  const i = [];
573
573
  let e = 0.6;
574
574
  i.push({ time: e, overshoot: 0, isOvershoot: !1 });
@@ -578,57 +578,57 @@ function Xt(o, t) {
578
578
  e += r, i.push({ time: e, overshoot: n, isOvershoot: !0 }), e += r, i.push({ time: e, overshoot: n * t, isOvershoot: !1 }), n *= t;
579
579
  return i.push({ time: 1, overshoot: 0, isOvershoot: !1 }), i;
580
580
  }
581
- function Vt(o, t, i, e) {
582
- const { stiffness: n, damping: a, mass: r, oscillations: s } = e, h = i.x - t.x, c = i.y - t.y, d = Math.sqrt(n / r), l = a / (2 * Math.sqrt(n * r));
583
- let u;
584
- if (l < 1) {
585
- const g = d * Math.sqrt(1 - l * l), p = Math.exp(-l * d * o * 3), b = Math.cos(g * o * s * Math.PI);
586
- u = 1 - p * b;
581
+ function Qt(o, t, i, e) {
582
+ const { stiffness: n, damping: a, mass: r, oscillations: s } = e, c = i.x - t.x, l = i.y - t.y, u = Math.sqrt(n / r), h = a / (2 * Math.sqrt(n * r));
583
+ let d;
584
+ if (h < 1) {
585
+ const g = u * Math.sqrt(1 - h * h), b = Math.exp(-h * u * o * 3), m = Math.cos(g * o * s * Math.PI);
586
+ d = 1 - b * m;
587
587
  } else
588
- u = 1 - Math.exp(-d * o * 3);
589
- return u = Math.max(0, Math.min(u, 1.3)), {
590
- x: t.x + h * u,
591
- y: t.y + c * u
588
+ d = 1 - Math.exp(-u * o * 3);
589
+ return d = Math.max(0, Math.min(d, 1.3)), {
590
+ x: t.x + c * d,
591
+ y: t.y + l * d
592
592
  };
593
593
  }
594
- function Jt(o, t, i, e) {
595
- const { amplitude: n, frequency: a, decay: r, decayRate: s, phase: h } = e, c = i.x - t.x, d = i.y - t.y, l = Math.sqrt(c * c + d * d), u = l > 0 ? -d / l : 0, g = l > 0 ? c / l : 1, p = a * Math.PI * 2 * o + h, b = r ? Math.pow(1 - o, s) : 1, f = n * Math.sin(p) * b, m = Kt(o);
594
+ function te(o, t, i, e) {
595
+ const { amplitude: n, frequency: a, decay: r, decayRate: s, phase: c } = e, l = i.x - t.x, u = i.y - t.y, h = Math.sqrt(l * l + u * u), d = h > 0 ? -u / h : 0, g = h > 0 ? l / h : 1, b = a * Math.PI * 2 * o + c, m = r ? Math.pow(1 - o, s) : 1, f = n * Math.sin(b) * m, p = ee(o);
596
596
  return {
597
- x: J(t.x, i.x, m) + f * u,
598
- y: J(t.y, i.y, m) + f * g
597
+ x: J(t.x, i.x, p) + f * d,
598
+ y: J(t.y, i.y, p) + f * g
599
599
  };
600
600
  }
601
- function ot(o) {
601
+ function nt(o) {
602
602
  return 1 - (1 - o) * (1 - o);
603
603
  }
604
- function Kt(o) {
604
+ function ee(o) {
605
605
  return 1 - Math.pow(1 - o, 3);
606
606
  }
607
- function Zt(o, t, i) {
608
- const { amplitude: e, frequency: n, decay: a } = i, r = Math.sin(o * n * Math.PI * 2), s = a ? Math.pow(1 - o, 2) : 1, h = e * r * s;
609
- return t + h;
607
+ function ie(o, t, i) {
608
+ const { amplitude: e, frequency: n, decay: a } = i, r = Math.sin(o * n * Math.PI * 2), s = a ? Math.pow(1 - o, 2) : 1, c = e * r * s;
609
+ return t + c;
610
610
  }
611
- function Qt(o, t, i) {
611
+ function oe(o, t, i) {
612
612
  const { overshoot: e, bounces: n } = i, a = [];
613
613
  a.push({ time: 0.5, scale: e });
614
614
  let r = e;
615
- const s = 0.5, c = 0.5 / (n * 2);
616
- let d = 0.5;
617
- for (let u = 0; u < n; u++) {
615
+ const s = 0.5, l = 0.5 / (n * 2);
616
+ let u = 0.5;
617
+ for (let d = 0; d < n; d++) {
618
618
  const g = 1 - (r - 1) * s;
619
- d += c, a.push({ time: d, scale: g }), r = 1 + (r - 1) * s * s, d += c, u < n - 1 && a.push({ time: d, scale: r });
619
+ u += l, a.push({ time: u, scale: g }), r = 1 + (r - 1) * s * s, u += l, d < n - 1 && a.push({ time: u, scale: r });
620
620
  }
621
621
  a.push({ time: 1, scale: 1 });
622
- let l = 1;
623
- for (let u = 0; u < a.length; u++)
624
- if (o <= a[u].time) {
625
- const g = u === 0 ? 0 : a[u - 1].time, p = u === 0 ? 1 : a[u - 1].scale, b = (o - g) / (a[u].time - g), f = ot(b);
626
- l = p + (a[u].scale - p) * f;
622
+ let h = 1;
623
+ for (let d = 0; d < a.length; d++)
624
+ if (o <= a[d].time) {
625
+ const g = d === 0 ? 0 : a[d - 1].time, b = d === 0 ? 1 : a[d - 1].scale, m = (o - g) / (a[d].time - g), f = nt(m);
626
+ h = b + (a[d].scale - b) * f;
627
627
  break;
628
628
  }
629
- return l * t;
629
+ return h * t;
630
630
  }
631
- function te(o) {
631
+ function ne(o) {
632
632
  const {
633
633
  element: t,
634
634
  startPosition: i,
@@ -637,45 +637,45 @@ function te(o) {
637
637
  duration: a,
638
638
  imageWidth: r,
639
639
  imageHeight: s,
640
- rotation: h,
641
- scale: c,
642
- onComplete: d,
643
- rotationConfig: l,
644
- startRotation: u,
640
+ rotation: c,
641
+ scale: l,
642
+ onComplete: u,
643
+ rotationConfig: h,
644
+ startRotation: d,
645
645
  scaleConfig: g,
646
- startScale: p
647
- } = o, b = n.type, f = u !== void 0 && u !== h, m = l?.mode === "wobble", S = l?.wobble || { amplitude: 15, frequency: 3, decay: !0 }, v = f || m, w = p !== void 0 && p !== c, E = g?.mode === "pop", x = g?.pop || { overshoot: 1.2, bounces: 1 };
648
- if ((b === "linear" || b === "arc") && !v && !(w || E)) {
649
- d && d();
646
+ startScale: b
647
+ } = o, m = n.type, f = d !== void 0 && d !== c, p = h?.mode === "wobble", y = h?.wobble || { amplitude: 15, frequency: 3, decay: !0 }, v = f || p, w = b !== void 0 && b !== l, S = g?.mode === "pop", E = g?.pop || { overshoot: 1.2, bounces: 1 };
648
+ if ((m === "linear" || m === "arc") && !v && !(w || S)) {
649
+ u && u();
650
650
  return;
651
651
  }
652
- const M = performance.now(), F = -r / 2, U = -s / 2;
653
- function _(B) {
654
- const j = B - M, T = Math.min(j / a, 1);
652
+ const M = performance.now(), F = -r / 2, _ = -s / 2;
653
+ function U(X) {
654
+ const N = X - M, T = Math.min(N / a, 1);
655
655
  let O;
656
- switch (b) {
656
+ switch (m) {
657
657
  case "bounce": {
658
- const $ = kt(
658
+ const D = Yt(
659
659
  n.bouncePreset,
660
660
  n.bounce
661
661
  );
662
- O = Yt(T, i, e, $);
662
+ O = Kt(T, i, e, D);
663
663
  break;
664
664
  }
665
665
  case "elastic": {
666
- const $ = Gt(
666
+ const D = Bt(
667
667
  n.elasticPreset,
668
668
  n.elastic
669
669
  );
670
- O = Vt(T, i, e, $);
670
+ O = Qt(T, i, e, D);
671
671
  break;
672
672
  }
673
673
  case "wave": {
674
- const $ = qt(
674
+ const D = Vt(
675
675
  n.wavePreset,
676
676
  n.wave
677
677
  );
678
- O = Jt(T, i, e, $);
678
+ O = te(T, i, e, D);
679
679
  break;
680
680
  }
681
681
  default:
@@ -685,33 +685,34 @@ function te(o) {
685
685
  };
686
686
  }
687
687
  const W = O.x - e.x, H = O.y - e.y;
688
- let C;
689
- m ? C = Zt(T, h, S) : f ? C = J(u, h, T) : C = h;
690
688
  let A;
691
- E ? A = Qt(T, c, x) : w ? A = J(p, c, T) : A = c, t.style.transform = `translate(${F}px, ${U}px) translate(${W}px, ${H}px) rotate(${C}deg) scale(${A})`, T < 1 ? requestAnimationFrame(_) : (t.style.transform = `translate(${F}px, ${U}px) rotate(${h}deg) scale(${c})`, d && d());
689
+ p ? A = ie(T, c, y) : f ? A = J(d, c, T) : A = c;
690
+ let C;
691
+ S ? C = oe(T, l, E) : w ? C = J(b, l, T) : C = l, t.style.transform = `translate(${F}px, ${_}px) translate(${W}px, ${H}px) rotate(${A}deg) scale(${C})`, T < 1 ? requestAnimationFrame(U) : (t.style.transform = `translate(${F}px, ${_}px) rotate(${c}deg) scale(${l})`, u && u());
692
692
  }
693
- requestAnimationFrame(_);
693
+ requestAnimationFrame(U);
694
694
  }
695
- function ee(o) {
695
+ function se(o) {
696
696
  return o === "bounce" || o === "elastic" || o === "wave";
697
697
  }
698
- const ie = {
698
+ const ae = {
699
699
  radial: "center",
700
700
  spiral: "center",
701
701
  grid: "top",
702
702
  cluster: "nearest-edge",
703
703
  random: "nearest-edge",
704
- wave: "left"
704
+ wave: "left",
705
+ honeycomb: "center"
705
706
  };
706
- class oe {
707
+ class re {
707
708
  constructor(t, i) {
708
- this.config = t, this.layoutAlgorithm = i, this.resolvedStartPosition = this.resolveStartPosition(), this.pathConfig = t.path || bt, this.rotationConfig = t.rotation || yt, this.scaleConfig = t.scale || vt;
709
+ this.config = t, this.layoutAlgorithm = i, this.resolvedStartPosition = this.resolveStartPosition(), this.pathConfig = t.path || yt, this.rotationConfig = t.rotation || vt, this.scaleConfig = t.scale || wt;
709
710
  }
710
711
  /**
711
712
  * Get the effective start position, considering layout-aware defaults
712
713
  */
713
714
  resolveStartPosition() {
714
- return this.config.start.position ? this.config.start.position : ie[this.layoutAlgorithm] || "nearest-edge";
715
+ return this.config.start.position ? this.config.start.position : ae[this.layoutAlgorithm] || "nearest-edge";
715
716
  }
716
717
  /**
717
718
  * Calculate the starting position for an image's entry animation
@@ -749,9 +750,9 @@ class oe {
749
750
  * Calculate start position from the nearest edge (current default behavior)
750
751
  */
751
752
  calculateNearestEdge(t, i, e, n) {
752
- const a = t.x, r = t.y, s = a, h = e.width - a, c = r, d = e.height - r, l = Math.min(s, h, c, d);
753
- let u = t.x, g = t.y;
754
- return l === s ? u = -(i.width + n) : l === h ? u = e.width + n : l === c ? g = -(i.height + n) : g = e.height + n, { x: u, y: g };
753
+ const a = t.x, r = t.y, s = a, c = e.width - a, l = r, u = e.height - r, h = Math.min(s, c, l, u);
754
+ let d = t.x, g = t.y;
755
+ return h === s ? d = -(i.width + n) : h === c ? d = e.width + n : h === l ? g = -(i.height + n) : g = e.height + n, { x: d, y: g };
755
756
  }
756
757
  /**
757
758
  * Calculate start position from a specific edge
@@ -798,19 +799,19 @@ class oe {
798
799
  */
799
800
  calculateCircularPosition(t, i, e, n, a) {
800
801
  const r = this.config.start.circular || {}, s = r.distribution || "even";
801
- let h;
802
- const c = r.radius || "120%";
803
- if (typeof c == "string" && c.endsWith("%")) {
804
- const b = parseFloat(c) / 100;
805
- h = Math.sqrt(
802
+ let c;
803
+ const l = r.radius || "120%";
804
+ if (typeof l == "string" && l.endsWith("%")) {
805
+ const m = parseFloat(l) / 100;
806
+ c = Math.sqrt(
806
807
  e.width ** 2 + e.height ** 2
807
- ) * b / 2;
808
+ ) * m / 2;
808
809
  } else
809
- h = typeof c == "number" ? c : 500;
810
- let d;
811
- s === "even" ? d = n / a * 2 * Math.PI : d = Math.random() * 2 * Math.PI;
812
- const l = e.width / 2, u = e.height / 2, g = l + Math.cos(d) * h, p = u + Math.sin(d) * h;
813
- return { x: g, y: p };
810
+ c = typeof l == "number" ? l : 500;
811
+ let u;
812
+ s === "even" ? u = n / a * 2 * Math.PI : u = Math.random() * 2 * Math.PI;
813
+ const h = e.width / 2, d = e.height / 2, g = h + Math.cos(u) * c, b = d + Math.sin(u) * c;
814
+ return { x: g, y: b };
814
815
  }
815
816
  /**
816
817
  * Get animation parameters for an image
@@ -829,9 +830,9 @@ class oe {
829
830
  * Build a CSS transform string for the start position
830
831
  * Uses pixel-based centering offset for reliable cross-browser behavior
831
832
  */
832
- buildStartTransform(t, i, e, n, a, r, s, h) {
833
- const c = t.x - i.x, d = t.y - i.y, l = s !== void 0 ? s : e, u = h !== void 0 ? h : n, g = a !== void 0 ? -a / 2 : 0, p = r !== void 0 ? -r / 2 : 0, b = a !== void 0 ? `translate(${g}px, ${p}px)` : "translate(-50%, -50%)";
834
- return t.useScale ? `${b} translate(${c}px, ${d}px) rotate(${l}deg) scale(0)` : `${b} translate(${c}px, ${d}px) rotate(${l}deg) scale(${u})`;
833
+ buildStartTransform(t, i, e, n, a, r, s, c) {
834
+ const l = t.x - i.x, u = t.y - i.y, h = s !== void 0 ? s : e, d = c !== void 0 ? c : n, g = a !== void 0 ? -a / 2 : 0, b = r !== void 0 ? -r / 2 : 0, m = a !== void 0 ? `translate(${g}px, ${b}px)` : "translate(-50%, -50%)";
835
+ return t.useScale ? `${m} translate(${l}px, ${u}px) rotate(${h}deg) scale(0)` : `${m} translate(${l}px, ${u}px) rotate(${h}deg) scale(${d})`;
835
836
  }
836
837
  /**
837
838
  * Build the final CSS transform string
@@ -856,7 +857,7 @@ class oe {
856
857
  * Check if the current path type requires JavaScript animation
857
858
  */
858
859
  requiresJSAnimation() {
859
- return ee(this.pathConfig.type);
860
+ return se(this.pathConfig.type);
860
861
  }
861
862
  /**
862
863
  * Get the path configuration
@@ -958,8 +959,8 @@ class oe {
958
959
  amplitude: 15,
959
960
  frequency: 3,
960
961
  decay: !0
961
- }, { amplitude: n, frequency: a, decay: r } = e, s = Math.sin(t * a * Math.PI * 2), h = r ? Math.pow(1 - t, 2) : 1, c = n * s * h;
962
- return i + c;
962
+ }, { amplitude: n, frequency: a, decay: r } = e, s = Math.sin(t * a * Math.PI * 2), c = r ? Math.pow(1 - t, 2) : 1, l = n * s * c;
963
+ return i + l;
963
964
  }
964
965
  /**
965
966
  * Get the scale configuration
@@ -1017,10 +1018,10 @@ class oe {
1017
1018
  bounces: 1
1018
1019
  }, { overshoot: n, bounces: a } = e, r = this.generateScaleBounceKeyframes(a, n);
1019
1020
  let s = i;
1020
- for (let h = 0; h < r.length; h++)
1021
- if (t <= r[h].time) {
1022
- const c = h === 0 ? 0 : r[h - 1].time, d = h === 0 ? i : r[h - 1].scale, l = (t - c) / (r[h].time - c), u = this.easeOutQuad(l);
1023
- s = d + (r[h].scale - d) * u;
1021
+ for (let c = 0; c < r.length; c++)
1022
+ if (t <= r[c].time) {
1023
+ const l = c === 0 ? 0 : r[c - 1].time, u = c === 0 ? i : r[c - 1].scale, h = (t - l) / (r[c].time - l), d = this.easeOutQuad(h);
1024
+ s = u + (r[c].scale - u) * d;
1024
1025
  break;
1025
1026
  }
1026
1027
  return s * i;
@@ -1033,10 +1034,10 @@ class oe {
1033
1034
  e.push({ time: 0.5, scale: i });
1034
1035
  let n = i;
1035
1036
  const a = 0.5, s = 0.5 / (t * 2);
1036
- let h = 0.5;
1037
- for (let c = 0; c < t; c++) {
1038
- const d = 1 - (n - 1) * a;
1039
- h += s, e.push({ time: h, scale: d }), n = 1 + (n - 1) * a * a, h += s, c < t - 1 && e.push({ time: h, scale: n });
1037
+ let c = 0.5;
1038
+ for (let l = 0; l < t; l++) {
1039
+ const u = 1 - (n - 1) * a;
1040
+ c += s, e.push({ time: c, scale: u }), n = 1 + (n - 1) * a * a, c += s, l < t - 1 && e.push({ time: c, scale: n });
1040
1041
  }
1041
1042
  return e.push({ time: 1, scale: 1 }), e;
1042
1043
  }
@@ -1047,7 +1048,7 @@ class oe {
1047
1048
  return 1 - (1 - t) * (1 - t);
1048
1049
  }
1049
1050
  }
1050
- class ne {
1051
+ class ce {
1051
1052
  constructor(t, i = {}) {
1052
1053
  this.config = t, this.imageConfig = i;
1053
1054
  }
@@ -1059,17 +1060,17 @@ class ne {
1059
1060
  * @returns Array of layout objects with position, rotation, scale
1060
1061
  */
1061
1062
  generate(t, i, e = {}) {
1062
- const n = [], { width: a, height: r } = i, s = this.config.spacing.padding, h = e.fixedHeight ?? 200, c = this.imageConfig.rotation?.mode ?? "none", d = this.imageConfig.rotation?.range?.min ?? -15, l = this.imageConfig.rotation?.range?.max ?? 15, u = this.imageConfig.sizing?.variance?.min ?? 1, g = this.imageConfig.sizing?.variance?.max ?? 1, p = u !== 1 || g !== 1, f = h * 1.5 / 2, m = h / 2, S = a - s - f, v = r - s - m, w = s + f, E = s + m;
1063
- for (let x = 0; x < t; x++) {
1064
- const I = this.random(w, S), M = this.random(E, v), F = c === "random" ? this.random(d, l) : 0, U = p ? this.random(u, g) : 1, _ = h * U, B = {
1065
- id: x,
1063
+ const n = [], { width: a, height: r } = i, s = this.config.spacing.padding, c = e.fixedHeight ?? 200, l = this.imageConfig.rotation?.mode ?? "none", u = this.imageConfig.rotation?.range?.min ?? -15, h = this.imageConfig.rotation?.range?.max ?? 15, d = this.imageConfig.sizing?.variance?.min ?? 1, g = this.imageConfig.sizing?.variance?.max ?? 1, b = d !== 1 || g !== 1, f = c * 1.5 / 2, p = c / 2, y = a - s - f, v = r - s - p, w = s + f, S = s + p;
1064
+ for (let E = 0; E < t; E++) {
1065
+ const I = this.random(w, y), M = this.random(S, v), F = l === "random" ? this.random(u, h) : 0, _ = b ? this.random(d, g) : 1, U = c * _, X = {
1066
+ id: E,
1066
1067
  x: I,
1067
1068
  y: M,
1068
1069
  rotation: F,
1069
- scale: U,
1070
- baseSize: _
1070
+ scale: _,
1071
+ baseSize: U
1071
1072
  };
1072
- n.push(B);
1073
+ n.push(X);
1073
1074
  }
1074
1075
  return n;
1075
1076
  }
@@ -1083,7 +1084,7 @@ class ne {
1083
1084
  return Math.random() * (i - t) + t;
1084
1085
  }
1085
1086
  }
1086
- class se {
1087
+ class le {
1087
1088
  constructor(t, i = {}) {
1088
1089
  this.config = t, this.imageConfig = i;
1089
1090
  }
@@ -1095,42 +1096,42 @@ class se {
1095
1096
  * @returns Array of layout objects with position, rotation, scale
1096
1097
  */
1097
1098
  generate(t, i, e = {}) {
1098
- const n = [], { width: a, height: r } = i, s = e.fixedHeight ?? 200, h = this.imageConfig.rotation?.mode ?? "none", c = this.imageConfig.rotation?.range?.min ?? -15, d = this.imageConfig.rotation?.range?.max ?? 15, l = this.imageConfig.sizing?.variance?.min ?? 1, u = this.imageConfig.sizing?.variance?.max ?? 1, g = l !== 1 || u !== 1, p = this.config.scaleDecay ?? 0, b = e.fixedHeight ?? s, f = a / 2, m = r / 2, S = Math.ceil(Math.sqrt(t));
1099
+ const n = [], { width: a, height: r } = i, s = e.fixedHeight ?? 200, c = this.imageConfig.rotation?.mode ?? "none", l = this.imageConfig.rotation?.range?.min ?? -15, u = this.imageConfig.rotation?.range?.max ?? 15, h = this.imageConfig.sizing?.variance?.min ?? 1, d = this.imageConfig.sizing?.variance?.max ?? 1, g = h !== 1 || d !== 1, b = this.config.scaleDecay ?? 0, m = e.fixedHeight ?? s, f = a / 2, p = r / 2, y = Math.ceil(Math.sqrt(t));
1099
1100
  if (t > 0) {
1100
- const E = g ? this.random(l, u) : 1, x = b * E;
1101
+ const S = g ? this.random(h, d) : 1, E = m * S;
1101
1102
  n.push({
1102
1103
  id: 0,
1103
1104
  x: f,
1104
- y: m,
1105
- rotation: h === "random" ? this.random(c * 0.33, d * 0.33) : 0,
1105
+ y: p,
1106
+ rotation: c === "random" ? this.random(l * 0.33, u * 0.33) : 0,
1106
1107
  // Less rotation for center
1107
- scale: E,
1108
- baseSize: x,
1108
+ scale: S,
1109
+ baseSize: E,
1109
1110
  zIndex: 100
1110
1111
  // Center image is highest
1111
1112
  });
1112
1113
  }
1113
1114
  let v = 1, w = 1;
1114
1115
  for (; v < t; ) {
1115
- const E = w / S, x = p > 0 ? 1 - E * p * 0.5 : 1, I = w * (b * 0.8), M = I * 1.5, F = Math.PI * (3 * (M + I) - Math.sqrt((3 * M + I) * (M + 3 * I))), U = this.estimateWidth(b), _ = Math.floor(F / (U * 0.7));
1116
- if (_ === 0) {
1116
+ const S = w / y, E = b > 0 ? 1 - S * b * 0.5 : 1, I = w * (m * 0.8), M = I * 1.5, F = Math.PI * (3 * (M + I) - Math.sqrt((3 * M + I) * (M + 3 * I))), _ = this.estimateWidth(m), U = Math.floor(F / (_ * 0.7));
1117
+ if (U === 0) {
1117
1118
  w++;
1118
1119
  continue;
1119
1120
  }
1120
- const B = 2 * Math.PI / _, j = w * (20 * Math.PI / 180);
1121
- for (let T = 0; T < _ && v < t; T++) {
1122
- const O = T * B + j, W = g ? this.random(l, u) : 1, H = x * W, C = b * H;
1123
- let A = f + Math.cos(O) * M, $ = m + Math.sin(O) * I;
1124
- const D = this.config.spacing.padding ?? 50, P = C * 1.5 / 2, L = C / 2;
1125
- A - P < D ? A = D + P : A + P > a - D && (A = a - D - P), $ - L < D ? $ = D + L : $ + L > r - D && ($ = r - D - L);
1126
- const k = h === "random" ? this.random(c, d) : 0;
1121
+ const X = 2 * Math.PI / U, N = w * (20 * Math.PI / 180);
1122
+ for (let T = 0; T < U && v < t; T++) {
1123
+ const O = T * X + N, W = g ? this.random(h, d) : 1, H = E * W, A = m * H;
1124
+ let C = f + Math.cos(O) * M, D = p + Math.sin(O) * I;
1125
+ const $ = this.config.spacing.padding ?? 50, P = A * 1.5 / 2, L = A / 2;
1126
+ C - P < $ ? C = $ + P : C + P > a - $ && (C = a - $ - P), D - L < $ ? D = $ + L : D + L > r - $ && (D = r - $ - L);
1127
+ const k = c === "random" ? this.random(l, u) : 0;
1127
1128
  n.push({
1128
1129
  id: v,
1129
- x: A,
1130
- y: $,
1130
+ x: C,
1131
+ y: D,
1131
1132
  rotation: k,
1132
1133
  scale: H,
1133
- baseSize: C,
1134
+ baseSize: A,
1134
1135
  zIndex: Math.max(1, 100 - w)
1135
1136
  // Outer rings have lower z-index
1136
1137
  }), v++;
@@ -1158,7 +1159,7 @@ class se {
1158
1159
  return Math.random() * (i - t) + t;
1159
1160
  }
1160
1161
  }
1161
- const ae = {
1162
+ const he = {
1162
1163
  columns: "auto",
1163
1164
  rows: "auto",
1164
1165
  stagger: "none",
@@ -1168,7 +1169,7 @@ const ae = {
1168
1169
  alignment: "center",
1169
1170
  gap: 10,
1170
1171
  overflowOffset: 0.25
1171
- }, Rt = [
1172
+ }, Ct = [
1172
1173
  { x: 1, y: 1 },
1173
1174
  // bottom-right
1174
1175
  { x: -1, y: -1 },
@@ -1186,7 +1187,7 @@ const ae = {
1186
1187
  { x: 0, y: 1 }
1187
1188
  // down
1188
1189
  ];
1189
- class re {
1190
+ class de {
1190
1191
  constructor(t, i = {}) {
1191
1192
  this.config = t, this.imageConfig = i;
1192
1193
  }
@@ -1198,65 +1199,65 @@ class re {
1198
1199
  * @returns Array of layout objects with position, rotation, scale
1199
1200
  */
1200
1201
  generate(t, i, e = {}) {
1201
- const n = [], { width: a, height: r } = i, s = { ...ae, ...this.config.grid }, h = this.config.spacing.padding, c = e.fixedHeight ?? 200, d = this.imageConfig.rotation?.mode ?? "none", l = this.imageConfig.sizing?.variance?.min ?? 1, u = this.imageConfig.sizing?.variance?.max ?? 1, g = l !== 1 || u !== 1, p = a - 2 * h, b = r - 2 * h, { columns: f, rows: m } = this.calculateGridDimensions(
1202
+ const n = [], { width: a, height: r } = i, s = { ...he, ...this.config.grid }, c = this.config.spacing.padding, l = e.fixedHeight ?? 200, u = this.imageConfig.rotation?.mode ?? "none", h = this.imageConfig.sizing?.variance?.min ?? 1, d = this.imageConfig.sizing?.variance?.max ?? 1, g = h !== 1 || d !== 1, b = a - 2 * c, m = r - 2 * c, { columns: f, rows: p } = this.calculateGridDimensions(
1202
1203
  t,
1203
- p,
1204
1204
  b,
1205
- c,
1205
+ m,
1206
+ l,
1206
1207
  s
1207
- ), S = s.stagger === "row", v = s.stagger === "column", w = S ? f + 0.5 : f, E = v ? m + 0.5 : m, x = (p - s.gap * (f - 1)) / w, I = (b - s.gap * (m - 1)) / E, M = S ? x / 2 : 0, F = v ? I / 2 : 0, U = 1 + s.overlap, _ = Math.min(x, I) * U, B = e.fixedHeight ? Math.min(e.fixedHeight, _) : _, j = f * x + (f - 1) * s.gap + M, T = m * I + (m - 1) * s.gap + F, O = h + (p - j) / 2, W = h + (b - T) / 2, H = f * m, C = s.columns !== "auto" && s.rows !== "auto", A = C && t > H;
1208
+ ), y = s.stagger === "row", v = s.stagger === "column", w = y ? f + 0.5 : f, S = v ? p + 0.5 : p, E = (b - s.gap * (f - 1)) / w, I = (m - s.gap * (p - 1)) / S, M = y ? E / 2 : 0, F = v ? I / 2 : 0, _ = 1 + s.overlap, U = Math.min(E, I) * _, X = e.fixedHeight ? Math.min(e.fixedHeight, U) : U, N = f * E + (f - 1) * s.gap + M, T = p * I + (p - 1) * s.gap + F, O = c + (b - N) / 2, W = c + (m - T) / 2, H = f * p, A = s.columns !== "auto" && s.rows !== "auto", C = A && t > H;
1208
1209
  typeof window < "u" && (window.__gridOverflowDebug = {
1209
1210
  gridConfigColumns: s.columns,
1210
1211
  gridConfigRows: s.rows,
1211
1212
  columns: f,
1212
- rows: m,
1213
+ rows: p,
1213
1214
  cellCount: H,
1214
- hasFixedGrid: C,
1215
+ hasFixedGrid: A,
1215
1216
  imageCount: t,
1216
- isOverflowMode: A
1217
+ isOverflowMode: C
1217
1218
  });
1218
- const $ = A ? new Array(H).fill(0) : [], D = Math.min(x, I) * s.overflowOffset;
1219
+ const D = C ? new Array(H).fill(0) : [], $ = Math.min(E, I) * s.overflowOffset;
1219
1220
  for (let z = 0; z < t; z++) {
1220
1221
  let P, L, k = 0;
1221
- if (A && z >= H) {
1222
- const q = z - H, N = q % H;
1223
- k = Math.floor(q / H) + 1, $[N]++, s.fillDirection === "row" ? (P = N % f, L = Math.floor(N / f)) : (L = N % m, P = Math.floor(N / m));
1222
+ if (C && z >= H) {
1223
+ const q = z - H, j = q % H;
1224
+ k = Math.floor(q / H) + 1, D[j]++, s.fillDirection === "row" ? (P = j % f, L = Math.floor(j / f)) : (L = j % p, P = Math.floor(j / p));
1224
1225
  } else
1225
- s.fillDirection === "row" ? (P = z % f, L = Math.floor(z / f)) : (L = z % m, P = Math.floor(z / m));
1226
- let G = O + P * (x + s.gap) + x / 2, Y = W + L * (I + s.gap) + I / 2;
1227
- if (s.stagger === "row" && L % 2 === 1 ? G += x / 2 : s.stagger === "column" && P % 2 === 1 && (Y += I / 2), k > 0) {
1228
- const q = (k - 1) % Rt.length, N = Rt[q];
1229
- G += N.x * D, Y += N.y * D;
1226
+ s.fillDirection === "row" ? (P = z % f, L = Math.floor(z / f)) : (L = z % p, P = Math.floor(z / p));
1227
+ let G = O + P * (E + s.gap) + E / 2, Y = W + L * (I + s.gap) + I / 2;
1228
+ if (s.stagger === "row" && L % 2 === 1 ? G += E / 2 : s.stagger === "column" && P % 2 === 1 && (Y += I / 2), k > 0) {
1229
+ const q = (k - 1) % Ct.length, j = Ct[q];
1230
+ G += j.x * $, Y += j.y * $;
1230
1231
  }
1231
1232
  if (s.jitter > 0) {
1232
- const q = x / 2 * s.jitter, N = I / 2 * s.jitter;
1233
- G += this.random(-q, q), Y += this.random(-N, N);
1233
+ const q = E / 2 * s.jitter, j = I / 2 * s.jitter;
1234
+ G += this.random(-q, q), Y += this.random(-j, j);
1234
1235
  }
1235
- let X = G, V = Y;
1236
- if (!A && s.fillDirection === "row") {
1236
+ let B = G, V = Y;
1237
+ if (!C && s.fillDirection === "row") {
1237
1238
  const q = t % f || f;
1238
1239
  if (L === Math.floor((t - 1) / f) && q < f) {
1239
- const wt = q * x + (q - 1) * s.gap;
1240
- let ut = 0;
1241
- s.alignment === "center" ? ut = (j - wt) / 2 : s.alignment === "end" && (ut = j - wt), X += ut;
1240
+ const St = q * E + (q - 1) * s.gap;
1241
+ let gt = 0;
1242
+ s.alignment === "center" ? gt = (N - St) / 2 : s.alignment === "end" && (gt = N - St), B += gt;
1242
1243
  }
1243
1244
  }
1244
- const at = g ? this.random(l, u) : 1, K = B * at, et = K * 1.5 / 2, it = K / 2, ct = h + et, lt = a - h - et, zt = h + it, Ot = r - h - it;
1245
- X = Math.max(ct, Math.min(X, lt)), V = Math.max(zt, Math.min(V, Ot));
1246
- let ht = 0;
1247
- if (d === "random") {
1248
- const q = this.imageConfig.rotation?.range?.min ?? -15, N = this.imageConfig.rotation?.range?.max ?? 15;
1249
- s.jitter > 0 ? ht = this.random(q * s.jitter, N * s.jitter) : ht = this.random(q, N);
1245
+ const rt = g ? this.random(h, d) : 1, K = X * rt, it = K * 1.5 / 2, ot = K / 2, lt = c + it, ht = a - c - it, $t = c + ot, Pt = r - c - ot;
1246
+ B = Math.max(lt, Math.min(B, ht)), V = Math.max($t, Math.min(V, Pt));
1247
+ let dt = 0;
1248
+ if (u === "random") {
1249
+ const q = this.imageConfig.rotation?.range?.min ?? -15, j = this.imageConfig.rotation?.range?.max ?? 15;
1250
+ s.jitter > 0 ? dt = this.random(q * s.jitter, j * s.jitter) : dt = this.random(q, j);
1250
1251
  }
1251
- let dt;
1252
- A && k > 0 ? dt = 50 - k : dt = A ? 100 + z : z + 1, n.push({
1252
+ let ut;
1253
+ C && k > 0 ? ut = 50 - k : ut = C ? 100 + z : z + 1, n.push({
1253
1254
  id: z,
1254
- x: X,
1255
+ x: B,
1255
1256
  y: V,
1256
- rotation: ht,
1257
- scale: at,
1257
+ rotation: dt,
1258
+ scale: rt,
1258
1259
  baseSize: K,
1259
- zIndex: dt
1260
+ zIndex: ut
1260
1261
  });
1261
1262
  }
1262
1263
  return n;
@@ -1273,8 +1274,8 @@ class re {
1273
1274
  else if (a.rows !== "auto")
1274
1275
  s = a.rows, r = Math.ceil(t / s);
1275
1276
  else {
1276
- const h = i / e;
1277
- for (r = Math.max(1, Math.round(Math.sqrt(t * h / 1.4))), s = Math.ceil(t / r); r > 1 && (r - 1) * s >= t; )
1277
+ const c = i / e;
1278
+ for (r = Math.max(1, Math.round(Math.sqrt(t * c / 1.4))), s = Math.ceil(t / r); r > 1 && (r - 1) * s >= t; )
1278
1279
  r--;
1279
1280
  }
1280
1281
  return { columns: Math.max(1, r), rows: Math.max(1, s) };
@@ -1286,14 +1287,14 @@ class re {
1286
1287
  return Math.random() * (i - t) + t;
1287
1288
  }
1288
1289
  }
1289
- const ce = Math.PI * (3 - Math.sqrt(5)), le = {
1290
+ const ue = Math.PI * (3 - Math.sqrt(5)), ge = {
1290
1291
  spiralType: "golden",
1291
1292
  direction: "counterclockwise",
1292
1293
  tightness: 1,
1293
1294
  scaleDecay: 0,
1294
1295
  startAngle: 0
1295
1296
  };
1296
- class he {
1297
+ class fe {
1297
1298
  constructor(t, i = {}) {
1298
1299
  this.config = t, this.imageConfig = i;
1299
1300
  }
@@ -1305,34 +1306,34 @@ class he {
1305
1306
  * @returns Array of layout objects with position, rotation, scale
1306
1307
  */
1307
1308
  generate(t, i, e = {}) {
1308
- const n = [], { width: a, height: r } = i, s = { ...le, ...this.config.spiral }, h = this.config.spacing.padding, c = e.fixedHeight ?? 200, d = this.imageConfig.rotation?.mode ?? "none", l = this.imageConfig.rotation?.range?.min ?? -15, u = this.imageConfig.rotation?.range?.max ?? 15, g = this.imageConfig.sizing?.variance?.min ?? 1, p = this.imageConfig.sizing?.variance?.max ?? 1, b = g !== 1 || p !== 1, f = this.config.scaleDecay ?? s.scaleDecay, m = a / 2, S = r / 2, v = Math.min(
1309
- m - h - c / 2,
1310
- S - h - c / 2
1309
+ const n = [], { width: a, height: r } = i, s = { ...ge, ...this.config.spiral }, c = this.config.spacing.padding, l = e.fixedHeight ?? 200, u = this.imageConfig.rotation?.mode ?? "none", h = this.imageConfig.rotation?.range?.min ?? -15, d = this.imageConfig.rotation?.range?.max ?? 15, g = this.imageConfig.sizing?.variance?.min ?? 1, b = this.imageConfig.sizing?.variance?.max ?? 1, m = g !== 1 || b !== 1, f = this.config.scaleDecay ?? s.scaleDecay, p = a / 2, y = r / 2, v = Math.min(
1310
+ p - c - l / 2,
1311
+ y - c - l / 2
1311
1312
  ), w = s.direction === "clockwise" ? -1 : 1;
1312
- for (let E = 0; E < t; E++) {
1313
- let x, I;
1313
+ for (let S = 0; S < t; S++) {
1314
+ let E, I;
1314
1315
  if (s.spiralType === "golden")
1315
- x = E * ce * w + s.startAngle, I = this.calculateGoldenRadius(E, t, v, s.tightness);
1316
+ E = S * ue * w + s.startAngle, I = this.calculateGoldenRadius(S, t, v, s.tightness);
1316
1317
  else if (s.spiralType === "archimedean") {
1317
- const G = E * 0.5 * s.tightness;
1318
- x = G * w + s.startAngle, I = this.calculateArchimedeanRadius(G, t, v, s.tightness);
1318
+ const G = S * 0.5 * s.tightness;
1319
+ E = G * w + s.startAngle, I = this.calculateArchimedeanRadius(G, t, v, s.tightness);
1319
1320
  } else {
1320
- const G = E * 0.3 * s.tightness;
1321
- x = G * w + s.startAngle, I = this.calculateLogarithmicRadius(G, t, v, s.tightness);
1321
+ const G = S * 0.3 * s.tightness;
1322
+ E = G * w + s.startAngle, I = this.calculateLogarithmicRadius(G, t, v, s.tightness);
1322
1323
  }
1323
- const M = m + Math.cos(x) * I, F = S + Math.sin(x) * I, U = I / v, _ = f > 0 ? 1 - U * f * 0.5 : 1, B = b ? this.random(g, p) : 1, j = _ * B, T = c * j, W = T * 1.5 / 2, H = T / 2, C = h + W, A = a - h - W, $ = h + H, D = r - h - H, z = Math.max(C, Math.min(M, A)), P = Math.max($, Math.min(F, D));
1324
+ const M = p + Math.cos(E) * I, F = y + Math.sin(E) * I, _ = I / v, U = f > 0 ? 1 - _ * f * 0.5 : 1, X = m ? this.random(g, b) : 1, N = U * X, T = l * N, W = T * 1.5 / 2, H = T / 2, A = c + W, C = a - c - W, D = c + H, $ = r - c - H, z = Math.max(A, Math.min(M, C)), P = Math.max(D, Math.min(F, $));
1324
1325
  let L = 0;
1325
- if (d === "random") {
1326
- const G = x * 180 / Math.PI % 360, Y = this.random(l, u);
1326
+ if (u === "random") {
1327
+ const G = E * 180 / Math.PI % 360, Y = this.random(h, d);
1327
1328
  L = s.spiralType === "golden" ? Y : G * 0.1 + Y * 0.9;
1328
- } else d === "tangent" && (L = this.calculateSpiralTangent(x, I, s));
1329
- const k = t - E;
1329
+ } else u === "tangent" && (L = this.calculateSpiralTangent(E, I, s));
1330
+ const k = t - S;
1330
1331
  n.push({
1331
- id: E,
1332
+ id: S,
1332
1333
  x: z,
1333
1334
  y: P,
1334
1335
  rotation: L,
1335
- scale: j,
1336
+ scale: N,
1336
1337
  baseSize: T,
1337
1338
  zIndex: k
1338
1339
  });
@@ -1377,8 +1378,8 @@ class he {
1377
1378
  * r = a * e^(b*θ)
1378
1379
  */
1379
1380
  calculateLogarithmicRadius(t, i, e, n) {
1380
- const a = e * 0.05, r = 0.15 / n, s = a * Math.exp(r * t), h = i * 0.3 * n, c = a * Math.exp(r * h);
1381
- return s / c * e;
1381
+ const a = e * 0.05, r = 0.15 / n, s = a * Math.exp(r * t), c = i * 0.3 * n, l = a * Math.exp(r * c);
1382
+ return s / l * e;
1382
1383
  }
1383
1384
  /**
1384
1385
  * Utility: Generate random number between min and max
@@ -1387,7 +1388,7 @@ class he {
1387
1388
  return Math.random() * (i - t) + t;
1388
1389
  }
1389
1390
  }
1390
- const de = {
1391
+ const me = {
1391
1392
  clusterCount: "auto",
1392
1393
  clusterSpread: 150,
1393
1394
  clusterSpacing: 200,
@@ -1395,7 +1396,7 @@ const de = {
1395
1396
  overlap: 0.3,
1396
1397
  distribution: "gaussian"
1397
1398
  };
1398
- class ue {
1399
+ class pe {
1399
1400
  constructor(t, i = {}) {
1400
1401
  this.config = t, this.imageConfig = i;
1401
1402
  }
@@ -1407,45 +1408,45 @@ class ue {
1407
1408
  * @returns Array of layout objects with position, rotation, scale
1408
1409
  */
1409
1410
  generate(t, i, e = {}) {
1410
- const n = [], { width: a, height: r } = i, s = { ...de, ...this.config.cluster }, h = this.config.spacing.padding, c = e.fixedHeight ?? 200, d = this.imageConfig.rotation?.mode ?? "none", l = this.imageConfig.rotation?.range?.min ?? -15, u = this.imageConfig.rotation?.range?.max ?? 15, g = this.imageConfig.sizing?.variance?.min ?? 1, p = this.imageConfig.sizing?.variance?.max ?? 1, b = g !== 1 || p !== 1, f = this.calculateClusterCount(
1411
+ const n = [], { width: a, height: r } = i, s = { ...me, ...this.config.cluster }, c = this.config.spacing.padding, l = e.fixedHeight ?? 200, u = this.imageConfig.rotation?.mode ?? "none", h = this.imageConfig.rotation?.range?.min ?? -15, d = this.imageConfig.rotation?.range?.max ?? 15, g = this.imageConfig.sizing?.variance?.min ?? 1, b = this.imageConfig.sizing?.variance?.max ?? 1, m = g !== 1 || b !== 1, f = this.calculateClusterCount(
1411
1412
  t,
1412
1413
  s.clusterCount,
1413
1414
  a,
1414
1415
  r,
1415
1416
  s.clusterSpacing
1416
- ), m = this.generateClusterCenters(
1417
+ ), p = this.generateClusterCenters(
1417
1418
  f,
1418
1419
  a,
1419
1420
  r,
1420
- h,
1421
+ c,
1421
1422
  s
1422
- ), S = new Array(f).fill(0);
1423
+ ), y = new Array(f).fill(0);
1423
1424
  for (let w = 0; w < t; w++)
1424
- S[w % f]++;
1425
+ y[w % f]++;
1425
1426
  let v = 0;
1426
1427
  for (let w = 0; w < f; w++) {
1427
- const E = m[w], x = S[w];
1428
- for (let I = 0; I < x; I++) {
1428
+ const S = p[w], E = y[w];
1429
+ for (let I = 0; I < E; I++) {
1429
1430
  let M, F;
1430
1431
  if (s.distribution === "gaussian")
1431
- M = this.gaussianRandom() * E.spread, F = this.gaussianRandom() * E.spread;
1432
+ M = this.gaussianRandom() * S.spread, F = this.gaussianRandom() * S.spread;
1432
1433
  else {
1433
- const L = this.random(0, Math.PI * 2), k = this.random(0, E.spread);
1434
+ const L = this.random(0, Math.PI * 2), k = this.random(0, S.spread);
1434
1435
  M = Math.cos(L) * k, F = Math.sin(L) * k;
1435
1436
  }
1436
- const U = 1 + s.overlap * 0.5, _ = 1 + s.overlap * 0.3;
1437
- M /= U, F /= U;
1438
- const B = b ? this.random(g, p) : 1, j = _ * B, T = c * j;
1439
- let O = E.x + M, W = E.y + F;
1440
- const C = T * 1.5 / 2, A = T / 2;
1441
- O = Math.max(h + C, Math.min(O, a - h - C)), W = Math.max(h + A, Math.min(W, r - h - A));
1442
- const $ = d === "random" ? this.random(l, u) : 0, z = Math.sqrt(M * M + F * F) / E.spread, P = Math.round((1 - z) * 50) + 1;
1437
+ const _ = 1 + s.overlap * 0.5, U = 1 + s.overlap * 0.3;
1438
+ M /= _, F /= _;
1439
+ const X = m ? this.random(g, b) : 1, N = U * X, T = l * N;
1440
+ let O = S.x + M, W = S.y + F;
1441
+ const A = T * 1.5 / 2, C = T / 2;
1442
+ O = Math.max(c + A, Math.min(O, a - c - A)), W = Math.max(c + C, Math.min(W, r - c - C));
1443
+ const D = u === "random" ? this.random(h, d) : 0, z = Math.sqrt(M * M + F * F) / S.spread, P = Math.round((1 - z) * 50) + 1;
1443
1444
  n.push({
1444
1445
  id: v,
1445
1446
  x: O,
1446
1447
  y: W,
1447
- rotation: $,
1448
- scale: j,
1448
+ rotation: D,
1449
+ scale: N,
1449
1450
  baseSize: T,
1450
1451
  zIndex: P
1451
1452
  }), v++;
@@ -1459,30 +1460,30 @@ class ue {
1459
1460
  calculateClusterCount(t, i, e, n, a) {
1460
1461
  if (i !== "auto")
1461
1462
  return Math.max(1, Math.min(i, t));
1462
- const s = Math.max(1, Math.ceil(t / 8)), h = Math.floor(
1463
+ const s = Math.max(1, Math.ceil(t / 8)), c = Math.floor(
1463
1464
  e / a * (n / a) * 0.6
1464
1465
  );
1465
- return Math.max(1, Math.min(s, h, 10));
1466
+ return Math.max(1, Math.min(s, c, 10));
1466
1467
  }
1467
1468
  /**
1468
1469
  * Generate cluster center positions with spacing constraints
1469
1470
  */
1470
1471
  generateClusterCenters(t, i, e, n, a) {
1471
- const r = [], h = n + a.clusterSpread, c = i - n - a.clusterSpread, d = n + a.clusterSpread, l = e - n - a.clusterSpread;
1472
- for (let u = 0; u < t; u++) {
1473
- let g = null, p = -1;
1474
- for (let b = 0; b < 100; b++) {
1472
+ const r = [], c = n + a.clusterSpread, l = i - n - a.clusterSpread, u = n + a.clusterSpread, h = e - n - a.clusterSpread;
1473
+ for (let d = 0; d < t; d++) {
1474
+ let g = null, b = -1;
1475
+ for (let m = 0; m < 100; m++) {
1475
1476
  const f = {
1476
- x: this.random(h, c),
1477
- y: this.random(d, l),
1477
+ x: this.random(c, l),
1478
+ y: this.random(u, h),
1478
1479
  spread: this.calculateClusterSpread(a)
1479
1480
  };
1480
- let m = 1 / 0;
1481
- for (const S of r) {
1482
- const v = f.x - S.x, w = f.y - S.y, E = Math.sqrt(v * v + w * w);
1483
- m = Math.min(m, E);
1481
+ let p = 1 / 0;
1482
+ for (const y of r) {
1483
+ const v = f.x - y.x, w = f.y - y.y, S = Math.sqrt(v * v + w * w);
1484
+ p = Math.min(p, S);
1484
1485
  }
1485
- if ((r.length === 0 || m > p) && (g = f, p = m), m >= a.clusterSpacing)
1486
+ if ((r.length === 0 || p > b) && (g = f, b = p), p >= a.clusterSpacing)
1486
1487
  break;
1487
1488
  }
1488
1489
  g && r.push(g);
@@ -1513,7 +1514,7 @@ class ue {
1513
1514
  return Math.random() * (i - t) + t;
1514
1515
  }
1515
1516
  }
1516
- class ge {
1517
+ class be {
1517
1518
  constructor(t, i = {}) {
1518
1519
  this.config = t, this.imageConfig = i;
1519
1520
  }
@@ -1525,29 +1526,29 @@ class ge {
1525
1526
  * @returns Array of layout objects with position, rotation, scale
1526
1527
  */
1527
1528
  generate(t, i, e = {}) {
1528
- const n = [], { width: a, height: r } = i, s = e.fixedHeight ?? 200, h = this.config.spacing.padding ?? 50, c = this.imageConfig.rotation?.mode ?? "none", d = this.imageConfig.rotation?.range?.min ?? -15, l = this.imageConfig.rotation?.range?.max ?? 15, u = this.imageConfig.sizing?.variance?.min ?? 1, g = this.imageConfig.sizing?.variance?.max ?? 1, p = u !== 1 || g !== 1, b = e.fixedHeight ?? s, f = {
1529
- ...$t,
1529
+ const n = [], { width: a, height: r } = i, s = e.fixedHeight ?? 200, c = this.config.spacing.padding ?? 50, l = this.imageConfig.rotation?.mode ?? "none", u = this.imageConfig.rotation?.range?.min ?? -15, h = this.imageConfig.rotation?.range?.max ?? 15, d = this.imageConfig.sizing?.variance?.min ?? 1, g = this.imageConfig.sizing?.variance?.max ?? 1, b = d !== 1 || g !== 1, m = e.fixedHeight ?? s, f = {
1530
+ ..._t,
1530
1531
  ...this.config.wave
1531
- }, { rows: m, amplitude: S, frequency: v, phaseShift: w, synchronization: E } = f, x = Math.ceil(t / m), F = b * 1.5 / 2, U = h + F, _ = a - h - F, B = _ - U, j = x > 1 ? B / (x - 1) : 0, T = h + S + b / 2, O = r - h - S - b / 2, W = O - T, H = m > 1 ? W / (m - 1) : 0;
1532
- let C = 0;
1533
- for (let A = 0; A < m && C < t; A++) {
1534
- const $ = m === 1 ? (T + O) / 2 : T + A * H;
1535
- let D = 0;
1536
- E === "offset" ? D = A * w : E === "alternating" && (D = A * Math.PI);
1537
- for (let z = 0; z < x && C < t; z++) {
1538
- const P = x === 1 ? (U + _) / 2 : U + z * j, L = this.calculateWaveY(P, a, S, v, D), k = P, G = $ + L, Y = p ? this.random(u, g) : 1, X = b * Y;
1532
+ }, { rows: p, amplitude: y, frequency: v, phaseShift: w, synchronization: S } = f, E = Math.ceil(t / p), F = m * 1.5 / 2, _ = c + F, U = a - c - F, X = U - _, N = E > 1 ? X / (E - 1) : 0, T = c + y + m / 2, O = r - c - y - m / 2, W = O - T, H = p > 1 ? W / (p - 1) : 0;
1533
+ let A = 0;
1534
+ for (let C = 0; C < p && A < t; C++) {
1535
+ const D = p === 1 ? (T + O) / 2 : T + C * H;
1536
+ let $ = 0;
1537
+ S === "offset" ? $ = C * w : S === "alternating" && ($ = C * Math.PI);
1538
+ for (let z = 0; z < E && A < t; z++) {
1539
+ const P = E === 1 ? (_ + U) / 2 : _ + z * N, L = this.calculateWaveY(P, a, y, v, $), k = P, G = D + L, Y = b ? this.random(d, g) : 1, B = m * Y;
1539
1540
  let V = 0;
1540
- c === "tangent" ? V = this.calculateRotation(P, a, S, v, D) : c === "random" && (V = this.random(d, l));
1541
- const K = X * 1.5 / 2, rt = X / 2, et = h + K, it = a - h - K, ct = h + rt, lt = r - h - rt;
1541
+ l === "tangent" ? V = this.calculateRotation(P, a, y, v, $) : l === "random" && (V = this.random(u, h));
1542
+ const K = B * 1.5 / 2, ct = B / 2, it = c + K, ot = a - c - K, lt = c + ct, ht = r - c - ct;
1542
1543
  n.push({
1543
- id: C,
1544
- x: Math.max(et, Math.min(k, it)),
1545
- y: Math.max(ct, Math.min(G, lt)),
1544
+ id: A,
1545
+ x: Math.max(it, Math.min(k, ot)),
1546
+ y: Math.max(lt, Math.min(G, ht)),
1546
1547
  rotation: V,
1547
1548
  scale: Y,
1548
- baseSize: X,
1549
- zIndex: C + 1
1550
- }), C++;
1549
+ baseSize: B,
1550
+ zIndex: A + 1
1551
+ }), A++;
1551
1552
  }
1552
1553
  }
1553
1554
  return n;
@@ -1590,7 +1591,84 @@ class ge {
1590
1591
  return Math.random() * (i - t) + t;
1591
1592
  }
1592
1593
  }
1593
- class fe {
1594
+ const xt = 100, Q = 100 / Math.sqrt(3), Et = [
1595
+ [Q / 2, 0],
1596
+ // upper-left
1597
+ [3 * Q / 2, 0],
1598
+ // upper-right
1599
+ [2 * Q, 50],
1600
+ // right ← tiling key vertex
1601
+ [3 * Q / 2, 100],
1602
+ // lower-right
1603
+ [Q / 2, 100],
1604
+ // lower-left
1605
+ [0, 50]
1606
+ // left
1607
+ ], ye = Et[1][0] / xt, ve = Et[2][1] / xt;
1608
+ function we(o) {
1609
+ return {
1610
+ colStep: ye * o,
1611
+ rowOffset: ve * o
1612
+ };
1613
+ }
1614
+ function xe(o, t, i, e, n, a) {
1615
+ const { colStep: r } = we(a);
1616
+ return {
1617
+ px: e + r * o,
1618
+ py: n + a * (t + o / 2)
1619
+ };
1620
+ }
1621
+ const Ee = [
1622
+ [1, 0, -1],
1623
+ [0, 1, -1],
1624
+ [-1, 1, 0],
1625
+ [-1, 0, 1],
1626
+ [0, -1, 1],
1627
+ [1, -1, 0]
1628
+ ];
1629
+ function Se(o) {
1630
+ if (o === 0) return [[0, 0, 0]];
1631
+ const t = [];
1632
+ let [i, e, n] = [0, -o, o];
1633
+ for (const [a, r, s] of Ee)
1634
+ for (let c = 0; c < o; c++)
1635
+ t.push([i, e, n]), i += a, e += r, n += s;
1636
+ return t;
1637
+ }
1638
+ class Re {
1639
+ // imageConfig intentionally not stored — honeycomb forces uniform sizing (rotation/variance
1640
+ // would break hex tiling). Kept as parameter for interface compatibility.
1641
+ constructor(t, i = {}) {
1642
+ this.config = t;
1643
+ }
1644
+ generate(t, i, e = {}) {
1645
+ const n = [], { width: a, height: r } = i, s = a / 2, c = r / 2, l = e.fixedHeight ?? 200, h = {
1646
+ ...Ut,
1647
+ ...this.config.honeycomb
1648
+ }.spacing ?? 0, d = l + h;
1649
+ let g = 0, b = 0;
1650
+ for (; g < t; ) {
1651
+ const m = Se(b);
1652
+ for (const [f, p, y] of m) {
1653
+ if (g >= t) break;
1654
+ const { px: v, py: w } = xe(f, p, y, s, c, d);
1655
+ n.push({
1656
+ id: g,
1657
+ x: v,
1658
+ y: w,
1659
+ rotation: 0,
1660
+ scale: 1,
1661
+ baseSize: l,
1662
+ // Inner rings render above outer rings
1663
+ zIndex: Math.max(1, 100 - b)
1664
+ }), g++;
1665
+ }
1666
+ b++;
1667
+ }
1668
+ return n;
1669
+ }
1670
+ }
1671
+ class Ie {
1594
1672
  constructor(t) {
1595
1673
  this.config = t.layout, this.imageConfig = t.image, this.layouts = /* @__PURE__ */ new Map(), this.placementLayout = this.initLayout();
1596
1674
  }
@@ -1601,17 +1679,19 @@ class fe {
1601
1679
  initLayout() {
1602
1680
  switch (this.config.algorithm) {
1603
1681
  case "radial":
1604
- return new se(this.config, this.imageConfig);
1682
+ return new le(this.config, this.imageConfig);
1605
1683
  case "grid":
1606
- return new re(this.config, this.imageConfig);
1684
+ return new de(this.config, this.imageConfig);
1607
1685
  case "spiral":
1608
- return new he(this.config, this.imageConfig);
1686
+ return new fe(this.config, this.imageConfig);
1609
1687
  case "cluster":
1610
- return new ue(this.config, this.imageConfig);
1688
+ return new pe(this.config, this.imageConfig);
1611
1689
  case "wave":
1612
- return new ge(this.config, this.imageConfig);
1690
+ return new be(this.config, this.imageConfig);
1691
+ case "honeycomb":
1692
+ return new Re(this.config, this.imageConfig);
1613
1693
  default:
1614
- return new ne(this.config, this.imageConfig);
1694
+ return new ce(this.config, this.imageConfig);
1615
1695
  }
1616
1696
  }
1617
1697
  /**
@@ -1693,15 +1773,28 @@ class fe {
1693
1773
  const a = this.imageConfig.sizing, r = this.resolveBaseHeight(n);
1694
1774
  if (r !== void 0)
1695
1775
  return { height: r };
1696
- const s = a?.minSize ?? 50, h = a?.maxSize ?? 400, c = this.config.targetCoverage ?? 0.6, d = this.config.densityFactor ?? 1, { width: l, height: u } = t, b = l * u * c / i;
1697
- let m = Math.sqrt(b / 1.4);
1698
- m *= d, m = Math.min(m, e);
1699
- let S = this.clamp(m, s, h);
1700
- if (S === s && m < s) {
1776
+ const s = a?.minSize ?? 50, c = a?.maxSize ?? 400, l = this.config.targetCoverage ?? 0.6, u = this.config.densityFactor ?? 1, { width: h, height: d } = t, m = h * d * l / i;
1777
+ let p = Math.sqrt(m / 1.4);
1778
+ p *= u, p = Math.min(p, e);
1779
+ let y = this.clamp(p, s, c);
1780
+ if (y === s && p < s) {
1701
1781
  const v = Math.max(s * 0.05, 20);
1702
- S = Math.max(v, m);
1782
+ y = Math.max(v, p);
1703
1783
  }
1704
- return { height: S };
1784
+ return this.config.algorithm === "honeycomb" && (y = Math.min(y, this.honeycombMaxImageHeight(i, t))), { height: y };
1785
+ }
1786
+ /**
1787
+ * Returns the largest image height at which all honeycomb rings fit within the container.
1788
+ * Spacing is 0 for this calculation (user spacing is additive on top of the image height;
1789
+ * any non-zero spacing only makes the constraint tighter).
1790
+ */
1791
+ honeycombMaxImageHeight(t, i) {
1792
+ if (t <= 1) return 1 / 0;
1793
+ let e = 0, n = 1;
1794
+ for (; n < t; )
1795
+ e++, n += 6 * e;
1796
+ const a = this.config.spacing?.padding ?? 50, r = this.config.honeycomb?.spacing ?? 0, s = i.width / 2, c = i.height / 2, l = Math.sqrt(3) / 2, u = 1 / Math.sqrt(3), h = (c - a - r * e) / (e + 0.5), d = (s - a - l * r * e) / (l * e + u);
1797
+ return Math.max(10, Math.min(h, d));
1705
1798
  }
1706
1799
  /**
1707
1800
  * Utility: Clamp a value between min and max
@@ -1711,7 +1804,7 @@ class fe {
1711
1804
  }
1712
1805
  }
1713
1806
  var R = /* @__PURE__ */ ((o) => (o.IDLE = "idle", o.FOCUSING = "focusing", o.FOCUSED = "focused", o.UNFOCUSING = "unfocusing", o.CROSS_ANIMATING = "cross_animating", o))(R || {});
1714
- const It = {
1807
+ const At = {
1715
1808
  // Geometric shapes - uses percentages for responsive sizing
1716
1809
  circle: "circle(50%)",
1717
1810
  square: "polygon(0% 0%, 100% 0%, 100% 100%, 0% 100%)",
@@ -1720,7 +1813,7 @@ const It = {
1720
1813
  hexagon: "polygon(25% 0%, 75% 0%, 100% 50%, 75% 100%, 25% 100%, 0% 50%)",
1721
1814
  octagon: "polygon(30% 0%, 70% 0%, 100% 30%, 100% 70%, 70% 100%, 30% 100%, 0% 70%, 0% 30%)",
1722
1815
  diamond: "polygon(50% 0%, 100% 50%, 50% 100%, 0% 50%)"
1723
- }, me = {
1816
+ }, Te = {
1724
1817
  // Circle - uses radius in pixels (refHeight of 100px = 50px radius)
1725
1818
  circle: {
1726
1819
  refHeight: 100,
@@ -1742,10 +1835,10 @@ const It = {
1742
1835
  refHeight: 100,
1743
1836
  points: [[50, 0], [100, 38], [82, 100], [18, 100], [0, 38]]
1744
1837
  },
1745
- // Hexagon - regular hexagon
1838
+ // Hexagon - regular hexagon (reference points imported from hexagonGeometry)
1746
1839
  hexagon: {
1747
- refHeight: 100,
1748
- points: [[25, 0], [75, 0], [100, 50], [75, 100], [25, 100], [0, 50]]
1840
+ refHeight: xt,
1841
+ points: Et
1749
1842
  },
1750
1843
  // Octagon - regular octagon
1751
1844
  octagon: {
@@ -1758,29 +1851,29 @@ const It = {
1758
1851
  points: [[50, 0], [100, 50], [50, 100], [0, 50]]
1759
1852
  }
1760
1853
  };
1761
- function pe(o) {
1854
+ function Ce(o) {
1762
1855
  if (o)
1763
- return o in It ? It[o] : o;
1856
+ return o in At ? At[o] : o;
1764
1857
  }
1765
- function be(o, t, i) {
1766
- const e = me[o];
1858
+ function Ae(o, t, i) {
1859
+ const e = Te[o];
1767
1860
  if (!e) return "";
1768
1861
  const n = t / e.refHeight;
1769
1862
  if (o === "circle")
1770
1863
  return `circle(${Math.round(50 * n * 100) / 100}px)`;
1771
- const a = e.refHeight * n, r = a / 2, s = a / 2, h = (i ?? a) / 2, c = t / 2, d = h - r, l = c - s;
1772
- return `polygon(${e.points.map(([g, p]) => {
1773
- const b = Math.round((g * n + d) * 100) / 100, f = Math.round((p * n + l) * 100) / 100;
1774
- return `${b}px ${f}px`;
1864
+ const a = e.points.map(([m]) => m), r = e.points.map(([, m]) => m), s = (Math.min(...a) + Math.max(...a)) / 2 * n, c = (Math.min(...r) + Math.max(...r)) / 2 * n, l = (Math.max(...a) - Math.min(...a)) * n, u = (i ?? l) / 2, h = t / 2, d = u - s, g = h - c;
1865
+ return `polygon(${e.points.map(([m, f]) => {
1866
+ const p = Math.round((m * n + d) * 100) / 100, y = Math.round((f * n + g) * 100) / 100;
1867
+ return `${p}px ${y}px`;
1775
1868
  }).join(", ")})`;
1776
1869
  }
1777
- function ye(o) {
1778
- return o in ft;
1870
+ function Le(o) {
1871
+ return o in mt;
1779
1872
  }
1780
- function ve(o) {
1781
- return o ? ye(o) ? ft[o] : o : ft.md;
1873
+ function Me(o) {
1874
+ return o ? Le(o) ? mt[o] : o : mt.md;
1782
1875
  }
1783
- function we(o) {
1876
+ function Fe(o) {
1784
1877
  if (!o) return "";
1785
1878
  const t = [];
1786
1879
  if (o.grayscale !== void 0 && t.push(`grayscale(${o.grayscale})`), o.blur !== void 0 && t.push(`blur(${o.blur}px)`), o.brightness !== void 0 && t.push(`brightness(${o.brightness})`), o.contrast !== void 0 && t.push(`contrast(${o.contrast})`), o.saturate !== void 0 && t.push(`saturate(${o.saturate})`), o.opacity !== void 0 && t.push(`opacity(${o.opacity})`), o.sepia !== void 0 && t.push(`sepia(${o.sepia})`), o.hueRotate !== void 0 && t.push(`hue-rotate(${o.hueRotate}deg)`), o.invert !== void 0 && t.push(`invert(${o.invert})`), o.dropShadow !== void 0)
@@ -1792,13 +1885,13 @@ function we(o) {
1792
1885
  }
1793
1886
  return t.join(" ");
1794
1887
  }
1795
- function Q(o) {
1888
+ function tt(o) {
1796
1889
  if (!o || o.style === "none" || o.width === 0)
1797
1890
  return "none";
1798
1891
  const t = o.width ?? 0, i = o.style ?? "solid", e = o.color ?? "#000000";
1799
1892
  return `${t}px ${i} ${e}`;
1800
1893
  }
1801
- function tt(o, t, i) {
1894
+ function et(o, t, i) {
1802
1895
  if (!o) return {};
1803
1896
  const e = {};
1804
1897
  if (o.borderRadiusTopLeft !== void 0 || o.borderRadiusTopRight !== void 0 || o.borderRadiusBottomRight !== void 0 || o.borderRadiusBottomLeft !== void 0) {
@@ -1806,55 +1899,55 @@ function tt(o, t, i) {
1806
1899
  o.borderRadiusTopLeft !== void 0 ? e.borderTopLeftRadius = `${o.borderRadiusTopLeft}px` : s && (e.borderTopLeftRadius = `${s}px`), o.borderRadiusTopRight !== void 0 ? e.borderTopRightRadius = `${o.borderRadiusTopRight}px` : s && (e.borderTopRightRadius = `${s}px`), o.borderRadiusBottomRight !== void 0 ? e.borderBottomRightRadius = `${o.borderRadiusBottomRight}px` : s && (e.borderBottomRightRadius = `${s}px`), o.borderRadiusBottomLeft !== void 0 ? e.borderBottomLeftRadius = `${o.borderRadiusBottomLeft}px` : s && (e.borderBottomLeftRadius = `${s}px`);
1807
1900
  } else o.border?.radius !== void 0 && (e.borderRadius = `${o.border.radius}px`);
1808
1901
  if (o.borderTop || o.borderRight || o.borderBottom || o.borderLeft) {
1809
- const s = o.border || {}, h = { ...s, ...o.borderTop }, c = { ...s, ...o.borderRight }, d = { ...s, ...o.borderBottom }, l = { ...s, ...o.borderLeft };
1810
- e.borderTop = Q(h), e.borderRight = Q(c), e.borderBottom = Q(d), e.borderLeft = Q(l);
1811
- } else o.border && (e.border = Q(o.border));
1812
- o.shadow !== void 0 && (e.boxShadow = ve(o.shadow));
1813
- const r = we(o.filter);
1902
+ const s = o.border || {}, c = { ...s, ...o.borderTop }, l = { ...s, ...o.borderRight }, u = { ...s, ...o.borderBottom }, h = { ...s, ...o.borderLeft };
1903
+ e.borderTop = tt(c), e.borderRight = tt(l), e.borderBottom = tt(u), e.borderLeft = tt(h);
1904
+ } else o.border && (e.border = tt(o.border));
1905
+ o.shadow !== void 0 && (e.boxShadow = Me(o.shadow));
1906
+ const r = Fe(o.filter);
1814
1907
  if (e.filter = r || "none", o.opacity !== void 0 && (e.opacity = String(o.opacity)), o.cursor !== void 0 && (e.cursor = o.cursor), o.outline && o.outline.style !== "none" && (o.outline.width ?? 0) > 0) {
1815
- const s = o.outline.width ?? 0, h = o.outline.style ?? "solid", c = o.outline.color ?? "#000000";
1816
- e.outline = `${s}px ${h} ${c}`, o.outline.offset !== void 0 && (e.outlineOffset = `${o.outline.offset}px`);
1908
+ const s = o.outline.width ?? 0, c = o.outline.style ?? "solid", l = o.outline.color ?? "#000000";
1909
+ e.outline = `${s}px ${c} ${l}`, o.outline.offset !== void 0 && (e.outlineOffset = `${o.outline.offset}px`);
1817
1910
  }
1818
1911
  if (o.objectFit !== void 0 && (e.objectFit = o.objectFit), o.aspectRatio !== void 0 && (e.aspectRatio = o.aspectRatio), o.clipPath !== void 0) {
1819
1912
  let s;
1820
- const h = typeof o.clipPath == "object" && o.clipPath !== null && "shape" in o.clipPath, c = h ? o.clipPath : void 0;
1821
- if (c?.mode === "height-relative" && t)
1822
- s = be(c.shape, t, i);
1913
+ const c = typeof o.clipPath == "object" && o.clipPath !== null && "shape" in o.clipPath, l = c ? o.clipPath : void 0;
1914
+ if (l?.mode === "height-relative" && t)
1915
+ s = Ae(l.shape, t, i);
1823
1916
  else {
1824
- const d = h && c ? c.shape : o.clipPath;
1825
- s = pe(d);
1917
+ const u = c && l ? l.shape : o.clipPath;
1918
+ s = Ce(u);
1826
1919
  }
1827
1920
  s && (s === "none" ? e.clipPath = "unset" : (e.clipPath = s, e.overflow = "hidden"));
1828
1921
  }
1829
1922
  return e;
1830
1923
  }
1831
- function xe(o, t) {
1924
+ function ze(o, t) {
1832
1925
  t.borderRadius !== void 0 && (o.style.borderRadius = t.borderRadius), t.borderTopLeftRadius !== void 0 && (o.style.borderTopLeftRadius = t.borderTopLeftRadius), t.borderTopRightRadius !== void 0 && (o.style.borderTopRightRadius = t.borderTopRightRadius), t.borderBottomRightRadius !== void 0 && (o.style.borderBottomRightRadius = t.borderBottomRightRadius), t.borderBottomLeftRadius !== void 0 && (o.style.borderBottomLeftRadius = t.borderBottomLeftRadius), t.border !== void 0 && (o.style.border = t.border), t.borderTop !== void 0 && (o.style.borderTop = t.borderTop), t.borderRight !== void 0 && (o.style.borderRight = t.borderRight), t.borderBottom !== void 0 && (o.style.borderBottom = t.borderBottom), t.borderLeft !== void 0 && (o.style.borderLeft = t.borderLeft), t.boxShadow !== void 0 && (o.style.boxShadow = t.boxShadow), t.filter !== void 0 && (o.style.filter = t.filter), t.opacity !== void 0 && (o.style.opacity = t.opacity), t.cursor !== void 0 && (o.style.cursor = t.cursor), t.outline !== void 0 && (o.style.outline = t.outline), t.outlineOffset !== void 0 && (o.style.outlineOffset = t.outlineOffset), t.objectFit !== void 0 && (o.style.objectFit = t.objectFit), t.aspectRatio !== void 0 && (o.style.aspectRatio = t.aspectRatio), t.clipPath !== void 0 && (o.style.clipPath = t.clipPath), t.overflow !== void 0 && (o.style.overflow = t.overflow);
1833
1926
  }
1834
- function gt(o, t, i, e) {
1835
- const n = tt(t, i, e);
1836
- xe(o, n);
1927
+ function ft(o, t, i, e) {
1928
+ const n = et(t, i, e);
1929
+ ze(o, n);
1837
1930
  }
1838
- function Ft(o) {
1931
+ function Dt(o) {
1839
1932
  return o ? Array.isArray(o) ? o.join(" ") : o : "";
1840
1933
  }
1841
- function nt(o, t) {
1842
- const i = Ft(t);
1934
+ function st(o, t) {
1935
+ const i = Dt(t);
1843
1936
  i && i.split(" ").forEach((e) => {
1844
1937
  e.trim() && o.classList.add(e.trim());
1845
1938
  });
1846
1939
  }
1847
- function mt(o, t) {
1848
- const i = Ft(t);
1940
+ function pt(o, t) {
1941
+ const i = Dt(t);
1849
1942
  i && i.split(" ").forEach((e) => {
1850
1943
  e.trim() && o.classList.remove(e.trim());
1851
1944
  });
1852
1945
  }
1853
- const Tt = {
1946
+ const Lt = {
1854
1947
  UNFOCUSING: 999,
1855
1948
  FOCUSING: 1e3
1856
1949
  };
1857
- class Se {
1950
+ class Oe {
1858
1951
  constructor(t, i, e) {
1859
1952
  this.state = R.IDLE, this.currentFocus = null, this.focusData = null, this.outgoing = null, this.incoming = null, this.focusGeneration = 0, this.config = t, this.animationEngine = i, this.styling = e, this.focusedClassName = e?.focused?.className;
1860
1953
  }
@@ -1882,9 +1975,9 @@ class Se {
1882
1975
  */
1883
1976
  calculateFocusDimensions(t, i, e) {
1884
1977
  const n = this.normalizeScalePercent(this.config.scalePercent), a = e.height * n, r = t / i;
1885
- let s = a, h = s * r;
1886
- const c = e.width * n;
1887
- return h > c && (h = c, s = h / r), { width: h, height: s };
1978
+ let s = a, c = s * r;
1979
+ const l = e.width * n;
1980
+ return c > l && (c = l, s = c / r), { width: c, height: s };
1888
1981
  }
1889
1982
  /**
1890
1983
  * Calculate the transform needed to center an image (position only, no scale)
@@ -1915,23 +2008,23 @@ class Se {
1915
2008
  * Create a Web Animation that animates both transform (position) and dimensions
1916
2009
  * This provides sharper zoom by re-rendering at target size instead of scaling pixels
1917
2010
  */
1918
- animateWithDimensions(t, i, e, n, a, r, s, h) {
1919
- const c = this.buildDimensionZoomTransform(i), d = this.buildDimensionZoomTransform(e);
2011
+ animateWithDimensions(t, i, e, n, a, r, s, c) {
2012
+ const l = this.buildDimensionZoomTransform(i), u = this.buildDimensionZoomTransform(e);
1920
2013
  return t.style.transition = "none", t.animate(
1921
2014
  [
1922
2015
  {
1923
- transform: c,
2016
+ transform: l,
1924
2017
  width: `${n}px`,
1925
2018
  height: `${a}px`
1926
2019
  },
1927
2020
  {
1928
- transform: d,
2021
+ transform: u,
1929
2022
  width: `${r}px`,
1930
2023
  height: `${s}px`
1931
2024
  }
1932
2025
  ],
1933
2026
  {
1934
- duration: h,
2027
+ duration: c,
1935
2028
  easing: "cubic-bezier(0.4, 0, 0.2, 1)",
1936
2029
  fill: "forwards"
1937
2030
  }
@@ -1942,8 +2035,8 @@ class Se {
1942
2035
  * Applies all focused styling properties, classes, and z-index
1943
2036
  */
1944
2037
  applyFocusedStyling(t, i) {
1945
- if (t.style.zIndex = String(i), t.classList.add("fbn-ic-focused"), nt(t, this.focusedClassName), this.styling?.focused) {
1946
- const e = tt(this.styling.focused, t.offsetHeight, t.offsetWidth);
2038
+ if (t.style.zIndex = String(i), t.classList.add("fbn-ic-focused"), st(t, this.focusedClassName), this.styling?.focused) {
2039
+ const e = et(this.styling.focused, t.offsetHeight, t.offsetWidth);
1947
2040
  e.borderRadius !== void 0 && (t.style.borderRadius = e.borderRadius), e.borderTopLeftRadius !== void 0 && (t.style.borderTopLeftRadius = e.borderTopLeftRadius), e.borderTopRightRadius !== void 0 && (t.style.borderTopRightRadius = e.borderTopRightRadius), e.borderBottomRightRadius !== void 0 && (t.style.borderBottomRightRadius = e.borderBottomRightRadius), e.borderBottomLeftRadius !== void 0 && (t.style.borderBottomLeftRadius = e.borderBottomLeftRadius), e.border !== void 0 && (t.style.border = e.border), e.borderTop !== void 0 && (t.style.borderTop = e.borderTop), e.borderRight !== void 0 && (t.style.borderRight = e.borderRight), e.borderBottom !== void 0 && (t.style.borderBottom = e.borderBottom), e.borderLeft !== void 0 && (t.style.borderLeft = e.borderLeft), e.boxShadow !== void 0 && (t.style.boxShadow = e.boxShadow), e.filter !== void 0 && (t.style.filter = e.filter), e.opacity !== void 0 && (t.style.opacity = e.opacity), e.cursor !== void 0 && (t.style.cursor = e.cursor), e.outline !== void 0 && (t.style.outline = e.outline), e.outlineOffset !== void 0 && (t.style.outlineOffset = e.outlineOffset), e.objectFit !== void 0 && (t.style.objectFit = e.objectFit), e.aspectRatio !== void 0 && (t.style.aspectRatio = e.aspectRatio);
1948
2041
  }
1949
2042
  }
@@ -1952,8 +2045,8 @@ class Se {
1952
2045
  * Restores default styling properties, removes classes, and resets z-index
1953
2046
  */
1954
2047
  removeFocusedStyling(t, i) {
1955
- if (t.style.zIndex = i, t.classList.remove("fbn-ic-focused"), mt(t, this.focusedClassName), this.styling?.default) {
1956
- const e = tt(this.styling.default, t.offsetHeight, t.offsetWidth);
2048
+ if (t.style.zIndex = i, t.classList.remove("fbn-ic-focused"), pt(t, this.focusedClassName), this.styling?.default) {
2049
+ const e = et(this.styling.default, t.offsetHeight, t.offsetWidth);
1957
2050
  e.borderRadius !== void 0 && (t.style.borderRadius = e.borderRadius), e.borderTopLeftRadius !== void 0 && (t.style.borderTopLeftRadius = e.borderTopLeftRadius), e.borderTopRightRadius !== void 0 && (t.style.borderTopRightRadius = e.borderTopRightRadius), e.borderBottomRightRadius !== void 0 && (t.style.borderBottomRightRadius = e.borderBottomRightRadius), e.borderBottomLeftRadius !== void 0 && (t.style.borderBottomLeftRadius = e.borderBottomLeftRadius), e.border !== void 0 && (t.style.border = e.border), e.borderTop !== void 0 && (t.style.borderTop = e.borderTop), e.borderRight !== void 0 && (t.style.borderRight = e.borderRight), e.borderBottom !== void 0 && (t.style.borderBottom = e.borderBottom), e.borderLeft !== void 0 && (t.style.borderLeft = e.borderLeft), e.boxShadow !== void 0 && (t.style.boxShadow = e.boxShadow), e.filter !== void 0 && (t.style.filter = e.filter), e.opacity !== void 0 && (t.style.opacity = e.opacity), e.cursor !== void 0 && (t.style.cursor = e.cursor), e.outline !== void 0 && (t.style.outline = e.outline), e.outlineOffset !== void 0 && (t.style.outlineOffset = e.outlineOffset), e.objectFit !== void 0 && (t.style.objectFit = e.objectFit), e.aspectRatio !== void 0 && (t.style.aspectRatio = e.aspectRatio);
1958
2051
  }
1959
2052
  }
@@ -1965,8 +2058,8 @@ class Se {
1965
2058
  let n = e ? this.styling?.focused ?? this.styling?.default : this.styling?.default;
1966
2059
  e && this.styling?.focused && this.styling.focused.clipPath === void 0 && (n = { ...n, clipPath: void 0 });
1967
2060
  const a = () => {
1968
- const r = t.offsetHeight, s = t.offsetWidth, h = tt(n, r, s);
1969
- h.clipPath !== void 0 ? t.style.clipPath = h.clipPath : t.style.clipPath = "unset", h.overflow !== void 0 && (t.style.overflow = h.overflow), i.animation.playState === "running" && requestAnimationFrame(a);
2061
+ const r = t.offsetHeight, s = t.offsetWidth, c = et(n, r, s);
2062
+ c.clipPath !== void 0 ? t.style.clipPath = c.clipPath : t.style.clipPath = "unset", c.overflow !== void 0 && (t.style.overflow = c.overflow), i.animation.playState === "running" && requestAnimationFrame(a);
1970
2063
  };
1971
2064
  requestAnimationFrame(a);
1972
2065
  }
@@ -1977,50 +2070,50 @@ class Se {
1977
2070
  * @param fromDimensions - Optional starting dimensions (for mid-animation reversals)
1978
2071
  */
1979
2072
  startFocusAnimation(t, i, e, n, a) {
1980
- const r = t.style.zIndex || "", s = t.offsetWidth, h = t.offsetHeight, c = this.calculateFocusDimensions(s, h, i), d = this.calculateFocusTransform(i, e);
2073
+ const r = t.style.zIndex || "", s = t.offsetWidth, c = t.offsetHeight, l = this.calculateFocusDimensions(s, c, i), u = this.calculateFocusTransform(i, e);
1981
2074
  this.animationEngine.cancelAllAnimations(t);
1982
- const l = this.config.animationDuration ?? 600;
1983
- this.applyFocusedStyling(t, Tt.FOCUSING);
1984
- const u = n ?? {
2075
+ const h = this.config.animationDuration ?? 600;
2076
+ this.applyFocusedStyling(t, Lt.FOCUSING);
2077
+ const d = n ?? {
1985
2078
  x: 0,
1986
2079
  y: 0,
1987
2080
  rotation: e.rotation,
1988
2081
  scale: 1
1989
2082
  // No scale - using dimensions
1990
- }, g = a?.width ?? s, p = a?.height ?? h, b = this.animateWithDimensions(
2083
+ }, g = a?.width ?? s, b = a?.height ?? c, m = this.animateWithDimensions(
1991
2084
  t,
1992
- u,
1993
2085
  d,
2086
+ u,
1994
2087
  g,
1995
- p,
1996
- c.width,
1997
- c.height,
1998
- l
2088
+ b,
2089
+ l.width,
2090
+ l.height,
2091
+ h
1999
2092
  ), f = {
2000
2093
  id: `focus-${Date.now()}`,
2001
2094
  element: t,
2002
- animation: b,
2003
- fromState: u,
2004
- toState: d,
2095
+ animation: m,
2096
+ fromState: d,
2097
+ toState: u,
2005
2098
  startTime: performance.now(),
2006
- duration: l
2099
+ duration: h
2007
2100
  };
2008
2101
  return this.focusData = {
2009
2102
  element: t,
2010
2103
  originalState: e,
2011
- focusTransform: d,
2104
+ focusTransform: u,
2012
2105
  originalZIndex: r,
2013
2106
  originalWidth: s,
2014
- originalHeight: h,
2015
- focusWidth: c.width,
2016
- focusHeight: c.height
2107
+ originalHeight: c,
2108
+ focusWidth: l.width,
2109
+ focusHeight: l.height
2017
2110
  }, this.startClipPathAnimation(t, f, !0), {
2018
2111
  element: t,
2019
2112
  originalState: e,
2020
2113
  animationHandle: f,
2021
2114
  direction: "in",
2022
2115
  originalWidth: s,
2023
- originalHeight: h
2116
+ originalHeight: c
2024
2117
  };
2025
2118
  }
2026
2119
  /**
@@ -2029,30 +2122,30 @@ class Se {
2029
2122
  * @param fromDimensions - Optional starting dimensions (for mid-animation reversals)
2030
2123
  */
2031
2124
  startUnfocusAnimation(t, i, e, n) {
2032
- t.style.zIndex = String(Tt.UNFOCUSING), this.animationEngine.cancelAllAnimations(t);
2125
+ t.style.zIndex = String(Lt.UNFOCUSING), this.animationEngine.cancelAllAnimations(t);
2033
2126
  const a = this.config.animationDuration ?? 600;
2034
- t.classList.remove("fbn-ic-focused"), mt(t, this.focusedClassName);
2035
- const r = e ?? this.focusData?.focusTransform ?? { x: 0, y: 0, rotation: 0, scale: 1 }, s = n?.width ?? this.focusData?.focusWidth ?? t.offsetWidth, h = n?.height ?? this.focusData?.focusHeight ?? t.offsetHeight, c = {
2127
+ t.classList.remove("fbn-ic-focused"), pt(t, this.focusedClassName);
2128
+ const r = e ?? this.focusData?.focusTransform ?? { x: 0, y: 0, rotation: 0, scale: 1 }, s = n?.width ?? this.focusData?.focusWidth ?? t.offsetWidth, c = n?.height ?? this.focusData?.focusHeight ?? t.offsetHeight, l = {
2036
2129
  x: 0,
2037
2130
  y: 0,
2038
2131
  rotation: i.rotation,
2039
2132
  scale: 1
2040
2133
  // No scale - using dimensions
2041
- }, d = this.focusData?.originalWidth ?? t.offsetWidth, l = this.focusData?.originalHeight ?? t.offsetHeight, u = this.animateWithDimensions(
2134
+ }, u = this.focusData?.originalWidth ?? t.offsetWidth, h = this.focusData?.originalHeight ?? t.offsetHeight, d = this.animateWithDimensions(
2042
2135
  t,
2043
2136
  r,
2044
- c,
2137
+ l,
2045
2138
  s,
2139
+ c,
2140
+ u,
2046
2141
  h,
2047
- d,
2048
- l,
2049
2142
  a
2050
2143
  ), g = {
2051
2144
  id: `unfocus-${Date.now()}`,
2052
2145
  element: t,
2053
- animation: u,
2146
+ animation: d,
2054
2147
  fromState: r,
2055
- toState: c,
2148
+ toState: l,
2056
2149
  startTime: performance.now(),
2057
2150
  duration: a
2058
2151
  };
@@ -2061,8 +2154,8 @@ class Se {
2061
2154
  originalState: i,
2062
2155
  animationHandle: g,
2063
2156
  direction: "out",
2064
- originalWidth: d,
2065
- originalHeight: l
2157
+ originalWidth: u,
2158
+ originalHeight: h
2066
2159
  };
2067
2160
  }
2068
2161
  /**
@@ -2080,9 +2173,9 @@ class Se {
2080
2173
  * Caller is responsible for calling animationEngine.cancelAllAnimations() afterwards.
2081
2174
  */
2082
2175
  captureMidAnimationState(t) {
2083
- const i = getComputedStyle(t), e = new DOMMatrix(i.transform), n = t.offsetWidth, a = t.offsetHeight, r = e.e + n * 0.5, s = e.f + a * 0.5, h = Math.atan2(e.b, e.a) * (180 / Math.PI);
2084
- return t.style.width = `${n}px`, t.style.height = `${a}px`, t.style.transform = `translate(-50%, -50%) translate(${r}px, ${s}px) rotate(${h}deg)`, t.style.transition = "none", {
2085
- transform: { x: r, y: s, rotation: h, scale: 1 },
2176
+ const i = getComputedStyle(t), e = new DOMMatrix(i.transform), n = t.offsetWidth, a = t.offsetHeight, r = e.e + n * 0.5, s = e.f + a * 0.5, c = Math.atan2(e.b, e.a) * (180 / Math.PI);
2177
+ return t.style.width = `${n}px`, t.style.height = `${a}px`, t.style.transform = `translate(-50%, -50%) translate(${r}px, ${s}px) rotate(${c}deg)`, t.style.transition = "none", {
2178
+ transform: { x: r, y: s, rotation: c, scale: 1 },
2086
2179
  dimensions: { width: n, height: a }
2087
2180
  };
2088
2181
  }
@@ -2160,12 +2253,12 @@ class Se {
2160
2253
  if (this.outgoing?.element === t) {
2161
2254
  const { transform: a, dimensions: r } = this.captureMidAnimationState(t);
2162
2255
  if (this.animationEngine.cancelAllAnimations(t), this.incoming) {
2163
- const { transform: s, dimensions: h } = this.captureMidAnimationState(this.incoming.element);
2256
+ const { transform: s, dimensions: c } = this.captureMidAnimationState(this.incoming.element);
2164
2257
  this.animationEngine.cancelAllAnimations(this.incoming.element), this.outgoing = this.startUnfocusAnimation(
2165
2258
  this.incoming.element,
2166
2259
  this.incoming.originalState,
2167
2260
  s,
2168
- h
2261
+ c
2169
2262
  );
2170
2263
  } else
2171
2264
  this.outgoing = null;
@@ -2289,10 +2382,10 @@ class Se {
2289
2382
  if (!this.currentFocus || !this.focusData || this.state !== R.FOCUSED) return;
2290
2383
  const e = this.currentFocus, n = this.focusData.focusTransform, a = ["translate(-50%, -50%)"], r = n.x ?? 0, s = n.y ?? 0;
2291
2384
  a.push(`translate(${r}px, ${s}px)`), n.rotation !== void 0 && a.push(`rotate(${n.rotation}deg)`);
2292
- const h = a.join(" ");
2293
- t ? (e.style.transition = `transform ${i}ms ease-out`, e.style.transform = h, setTimeout(() => {
2385
+ const c = a.join(" ");
2386
+ t ? (e.style.transition = `transform ${i}ms ease-out`, e.style.transform = c, setTimeout(() => {
2294
2387
  this.currentFocus === e && (e.style.transition = "none");
2295
- }, i)) : (e.style.transition = "none", e.style.transform = h);
2388
+ }, i)) : (e.style.transition = "none", e.style.transform = c);
2296
2389
  }
2297
2390
  /**
2298
2391
  * Reset zoom state (cancels all animations)
@@ -2319,7 +2412,7 @@ class Se {
2319
2412
  ), this.state = R.IDLE, this.currentFocus = null, this.focusData = null, this.outgoing = null, this.incoming = null;
2320
2413
  }
2321
2414
  }
2322
- const Ee = 50, Re = 0.5, Ie = 20, Te = 0.3, Ae = 150, Ce = 30, st = class st {
2415
+ const De = 50, $e = 0.5, Pe = 20, _e = 0.3, Ue = 150, He = 30, at = class at {
2323
2416
  constructor(t, i) {
2324
2417
  this.enabled = !1, this.touchState = null, this.recentTouchTimestamp = 0, this.container = t, this.callbacks = i, this.boundTouchStart = this.handleTouchStart.bind(this), this.boundTouchMove = this.handleTouchMove.bind(this), this.boundTouchEnd = this.handleTouchEnd.bind(this), this.boundTouchCancel = this.handleTouchCancel.bind(this);
2325
2418
  }
@@ -2346,7 +2439,7 @@ const Ee = 50, Re = 0.5, Ie = 20, Te = 0.3, Ae = 150, Ce = 30, st = class st {
2346
2439
  * Used to prevent click-outside from unfocusing immediately after touch
2347
2440
  */
2348
2441
  hadRecentTouch() {
2349
- return Date.now() - this.recentTouchTimestamp < st.TOUCH_CLICK_DELAY;
2442
+ return Date.now() - this.recentTouchTimestamp < at.TOUCH_CLICK_DELAY;
2350
2443
  }
2351
2444
  handleTouchStart(t) {
2352
2445
  if (t.touches.length !== 1) return;
@@ -2366,11 +2459,11 @@ const Ee = 50, Re = 0.5, Ie = 20, Te = 0.3, Ae = 150, Ce = 30, st = class st {
2366
2459
  const i = t.touches[0], e = i.clientX - this.touchState.startX, n = i.clientY - this.touchState.startY;
2367
2460
  if (this.touchState.isHorizontalSwipe === null && Math.sqrt(e * e + n * n) > 10) {
2368
2461
  const s = Math.atan2(Math.abs(n), Math.abs(e)) * (180 / Math.PI);
2369
- this.touchState.isHorizontalSwipe = s <= Ce;
2462
+ this.touchState.isHorizontalSwipe = s <= He;
2370
2463
  }
2371
2464
  if (this.touchState.isHorizontalSwipe !== !1 && this.touchState.isHorizontalSwipe === !0) {
2372
2465
  t.preventDefault(), this.touchState.isDragging = !0, this.touchState.currentX = i.clientX;
2373
- const a = e * Te;
2466
+ const a = e * _e;
2374
2467
  this.callbacks.onDragOffset(a);
2375
2468
  }
2376
2469
  }
@@ -2379,15 +2472,15 @@ const Ee = 50, Re = 0.5, Ie = 20, Te = 0.3, Ae = 150, Ce = 30, st = class st {
2379
2472
  this.recentTouchTimestamp = Date.now();
2380
2473
  const i = this.touchState.currentX - this.touchState.startX, e = performance.now() - this.touchState.startTime, n = Math.abs(i) / e, a = Math.abs(i);
2381
2474
  let r = !1;
2382
- this.touchState.isHorizontalSwipe === !0 && this.touchState.isDragging && (a >= Ee || n >= Re && a >= Ie) && (r = !0, i < 0 ? this.callbacks.onNext() : this.callbacks.onPrev()), this.touchState.isDragging && this.callbacks.onDragEnd(r), this.touchState = null;
2475
+ this.touchState.isHorizontalSwipe === !0 && this.touchState.isDragging && (a >= De || n >= $e && a >= Pe) && (r = !0, i < 0 ? this.callbacks.onNext() : this.callbacks.onPrev()), this.touchState.isDragging && this.callbacks.onDragEnd(r), this.touchState = null;
2383
2476
  }
2384
2477
  handleTouchCancel(t) {
2385
2478
  this.touchState?.isDragging && this.callbacks.onDragEnd(!1), this.touchState = null;
2386
2479
  }
2387
2480
  };
2388
- st.TOUCH_CLICK_DELAY = 300;
2389
- let pt = st;
2390
- class Le {
2481
+ at.TOUCH_CLICK_DELAY = 300;
2482
+ let bt = at;
2483
+ class Ne {
2391
2484
  constructor(t) {
2392
2485
  if (this._prepared = !1, this._discoveredUrls = [], this.apiKey = t.apiKey ?? "", this.apiEndpoint = t.apiEndpoint ?? "https://www.googleapis.com/drive/v3/files", this.debugLogging = t.debugLogging ?? !1, this.sources = t.sources ?? [], !this.sources || this.sources.length === 0)
2393
2486
  throw new Error("GoogleDriveLoader requires at least one source to be configured");
@@ -2482,11 +2575,11 @@ class Le {
2482
2575
  const e = [], n = `'${t}' in parents and trashed=false`, r = `${this.apiEndpoint}?q=${encodeURIComponent(n)}&fields=files(id,name,mimeType,thumbnailLink)&key=${this.apiKey}`, s = await fetch(r);
2483
2576
  if (!s.ok)
2484
2577
  throw new Error(`API request failed: ${s.status} ${s.statusText}`);
2485
- const c = (await s.json()).files.filter(
2486
- (d) => d.mimeType.startsWith("image/") && i.isAllowed(d.name)
2578
+ const l = (await s.json()).files.filter(
2579
+ (u) => u.mimeType.startsWith("image/") && i.isAllowed(u.name)
2487
2580
  );
2488
- return this.log(`Found ${c.length} images in folder ${t} (non-recursive)`), c.forEach((d) => {
2489
- e.push(`https://lh3.googleusercontent.com/d/${d.id}=s1600`), this.log(`Added file: ${d.name}`);
2581
+ return this.log(`Found ${l.length} images in folder ${t} (non-recursive)`), l.forEach((u) => {
2582
+ e.push(`https://lh3.googleusercontent.com/d/${u.id}=s1600`), this.log(`Added file: ${u.name}`);
2490
2583
  }), e;
2491
2584
  }
2492
2585
  /**
@@ -2507,8 +2600,8 @@ class Le {
2507
2600
  try {
2508
2601
  const r = `${this.apiEndpoint}/${a}?fields=name,mimeType&key=${this.apiKey}`, s = await fetch(r);
2509
2602
  if (s.ok) {
2510
- const h = await s.json();
2511
- h.mimeType.startsWith("image/") && i.isAllowed(h.name) ? (e.push(`https://lh3.googleusercontent.com/d/${a}=s1600`), this.log(`Added file: ${h.name}`)) : this.log(`Skipping non-image file: ${h.name} (${h.mimeType})`);
2603
+ const c = await s.json();
2604
+ c.mimeType.startsWith("image/") && i.isAllowed(c.name) ? (e.push(`https://lh3.googleusercontent.com/d/${a}=s1600`), this.log(`Added file: ${c.name}`)) : this.log(`Skipping non-image file: ${c.name} (${c.mimeType})`);
2512
2605
  } else
2513
2606
  this.log(`Failed to fetch metadata for file ${a}: ${s.status}`);
2514
2607
  } catch (r) {
@@ -2552,18 +2645,18 @@ class Le {
2552
2645
  const e = [], n = `'${t}' in parents and trashed=false`, r = `${this.apiEndpoint}?q=${encodeURIComponent(n)}&fields=files(id,name,mimeType,thumbnailLink)&key=${this.apiKey}`, s = await fetch(r);
2553
2646
  if (!s.ok)
2554
2647
  throw new Error(`API request failed: ${s.status} ${s.statusText}`);
2555
- const h = await s.json(), c = h.files.filter(
2556
- (l) => l.mimeType.startsWith("image/") && i.isAllowed(l.name)
2557
- ), d = h.files.filter(
2558
- (l) => l.mimeType === "application/vnd.google-apps.folder"
2648
+ const c = await s.json(), l = c.files.filter(
2649
+ (h) => h.mimeType.startsWith("image/") && i.isAllowed(h.name)
2650
+ ), u = c.files.filter(
2651
+ (h) => h.mimeType === "application/vnd.google-apps.folder"
2559
2652
  );
2560
- this.log(`Found ${h.files.length} total items in folder ${t}`), h.files.forEach((l) => this.log(` - File: ${l.name} (${l.mimeType})`)), this.log(`- ${c.length} valid files (images only)`), this.log(`- ${d.length} subfolders`), c.forEach((l) => {
2561
- e.push(`https://lh3.googleusercontent.com/d/${l.id}=s1600`), this.log(`Added file: ${l.name}`);
2653
+ this.log(`Found ${c.files.length} total items in folder ${t}`), c.files.forEach((h) => this.log(` - File: ${h.name} (${h.mimeType})`)), this.log(`- ${l.length} valid files (images only)`), this.log(`- ${u.length} subfolders`), l.forEach((h) => {
2654
+ e.push(`https://lh3.googleusercontent.com/d/${h.id}=s1600`), this.log(`Added file: ${h.name}`);
2562
2655
  });
2563
- for (const l of d) {
2564
- this.log(`Loading images from subfolder: ${l.name}`);
2565
- const u = await this.loadImagesRecursively(l.id, i);
2566
- e.push(...u);
2656
+ for (const h of u) {
2657
+ this.log(`Loading images from subfolder: ${h.name}`);
2658
+ const d = await this.loadImagesRecursively(h.id, i);
2659
+ e.push(...d);
2567
2660
  }
2568
2661
  return e;
2569
2662
  }
@@ -2580,8 +2673,8 @@ class Le {
2580
2673
  if (!n.ok)
2581
2674
  throw new Error("Cannot access folder directly (CORS or permissions issue)");
2582
2675
  const a = await n.text(), r = /\/file\/d\/([a-zA-Z0-9_-]+)/g, s = [...a.matchAll(r)];
2583
- return [...new Set(s.map((d) => d[1]))].map(
2584
- (d) => `https://drive.google.com/uc?export=view&id=${d}`
2676
+ return [...new Set(s.map((u) => u[1]))].map(
2677
+ (u) => `https://drive.google.com/uc?export=view&id=${u}`
2585
2678
  );
2586
2679
  } catch (e) {
2587
2680
  throw console.error("Direct loading failed:", e), new Error(
@@ -2608,7 +2701,7 @@ class Le {
2608
2701
  this.debugLogging && typeof console < "u" && console.log(...t);
2609
2702
  }
2610
2703
  }
2611
- class Me {
2704
+ class je {
2612
2705
  constructor(t) {
2613
2706
  if (this._prepared = !1, this._discoveredUrls = [], this.validateUrls = t.validateUrls !== !1, this.validationTimeout = t.validationTimeout ?? 5e3, this.validationMethod = t.validationMethod ?? "head", this.debugLogging = t.debugLogging ?? !1, this.sources = t.sources ?? [], !this.sources || this.sources.length === 0)
2614
2707
  throw new Error("StaticImageLoader requires at least one source to be configured");
@@ -2788,7 +2881,7 @@ class Me {
2788
2881
  this.debugLogging && typeof console < "u" && console.log(...t);
2789
2882
  }
2790
2883
  }
2791
- class Fe {
2884
+ class We {
2792
2885
  constructor(t) {
2793
2886
  if (this._prepared = !1, this._discoveredUrls = [], this.loaders = t.loaders, this.debugLogging = t.debugLogging ?? !1, !this.loaders || this.loaders.length === 0)
2794
2887
  throw new Error("CompositeLoader requires at least one loader to be configured");
@@ -2845,7 +2938,7 @@ class Fe {
2845
2938
  this.debugLogging && typeof console < "u" && console.log("[CompositeLoader]", ...t);
2846
2939
  }
2847
2940
  }
2848
- class ze {
2941
+ class ke {
2849
2942
  /**
2850
2943
  * Create a new ImageFilter
2851
2944
  * @param extensions - Array of allowed file extensions (without dots)
@@ -2882,7 +2975,7 @@ class ze {
2882
2975
  // isAllowedDate(date: Date): boolean
2883
2976
  // isAllowedDimensions(width: number, height: number): boolean
2884
2977
  }
2885
- const Oe = `
2978
+ const Ge = `
2886
2979
  .fbn-ic-gallery {
2887
2980
  position: relative;
2888
2981
  width: 100%;
@@ -2932,21 +3025,21 @@ const Oe = `
2932
3025
  display: none !important;
2933
3026
  }
2934
3027
  `;
2935
- function $e() {
3028
+ function qe() {
2936
3029
  if (typeof document > "u") return;
2937
3030
  const o = "fbn-ic-functional-styles";
2938
3031
  if (document.getElementById(o)) return;
2939
3032
  const t = document.createElement("style");
2940
- t.id = o, t.textContent = Oe, document.head.appendChild(t);
3033
+ t.id = o, t.textContent = Ge, document.head.appendChild(t);
2941
3034
  }
2942
- class De {
3035
+ class Xe {
2943
3036
  constructor(t = {}) {
2944
- this.fullConfig = Wt(t), t.container instanceof HTMLElement ? (this.containerRef = t.container, this.containerId = null) : (this.containerRef = null, this.containerId = t.container || "imageCloud"), this.imagesLoaded = !1, this.imageElements = [], this.imageLayouts = [], this.currentImageHeight = 225, this.currentFocusIndex = null, this.hoveredImage = null, this.resizeTimeout = null, this.displayQueue = [], this.queueInterval = null, this.loadGeneration = 0, this.loadingElAutoCreated = !1, this.errorElAutoCreated = !1, this.counterEl = null, this.counterElAutoCreated = !1, this.animationEngine = new Bt(this.fullConfig.animation), this.layoutEngine = new fe({
3037
+ this.fullConfig = Xt(t), t.container instanceof HTMLElement ? (this.containerRef = t.container, this.containerId = null) : (this.containerRef = null, this.containerId = t.container || "imageCloud"), this.imagesLoaded = !1, this.imageElements = [], this.imageLayouts = [], this.currentImageHeight = 225, this.currentFocusIndex = null, this.hoveredImage = null, this.resizeTimeout = null, this.displayQueue = [], this.queueInterval = null, this.loadGeneration = 0, this.loadingElAutoCreated = !1, this.errorElAutoCreated = !1, this.counterEl = null, this.counterElAutoCreated = !1, this.animationEngine = new Jt(this.fullConfig.animation), this.layoutEngine = new Ie({
2945
3038
  layout: this.fullConfig.layout,
2946
3039
  image: this.fullConfig.image
2947
- }), this.zoomEngine = new Se(this.fullConfig.interaction.focus, this.animationEngine, this.fullConfig.styling), this.defaultStyles = tt(this.fullConfig.styling?.default), this.defaultClassName = this.fullConfig.styling?.default?.className, this.hoverClassName = this.fullConfig.styling?.hover?.className;
2948
- const i = this.fullConfig.animation.entry || y.animation.entry;
2949
- this.entryAnimationEngine = new oe(
3040
+ }), this.zoomEngine = new Oe(this.fullConfig.interaction.focus, this.animationEngine, this.fullConfig.styling), this.defaultStyles = et(this.fullConfig.styling?.default), this.defaultClassName = this.fullConfig.styling?.default?.className, this.hoverClassName = this.fullConfig.styling?.hover?.className;
3041
+ const i = this.fullConfig.animation.entry || x.animation.entry;
3042
+ this.entryAnimationEngine = new re(
2950
3043
  i,
2951
3044
  this.fullConfig.layout.algorithm
2952
3045
  ), this.swipeEngine = null, this.imageFilter = this.createImageFilter(), this.imageLoader = this.createLoader(), this.containerEl = null, this.loadingEl = null, this.errorEl = null;
@@ -2956,7 +3049,7 @@ class De {
2956
3049
  */
2957
3050
  createImageFilter() {
2958
3051
  const t = this.fullConfig.config.loaders?.allowedExtensions;
2959
- return new ze(t);
3052
+ return new ke(t);
2960
3053
  }
2961
3054
  /**
2962
3055
  * Create appropriate image loader based on config
@@ -2967,7 +3060,7 @@ class De {
2967
3060
  if (!t || t.length === 0)
2968
3061
  throw new Error("No loaders configured. Provide `images`, `loaders`, or both.");
2969
3062
  const e = t.map((n) => this.createLoaderFromEntry(n, i));
2970
- return e.length === 1 ? e[0] : new Fe({
3063
+ return e.length === 1 ? e[0] : new We({
2971
3064
  loaders: e,
2972
3065
  debugLogging: this.fullConfig.config.debug?.loaders
2973
3066
  });
@@ -2985,14 +3078,14 @@ class De {
2985
3078
  allowedExtensions: e.allowedExtensions ?? i.allowedExtensions,
2986
3079
  debugLogging: e.debugLogging ?? this.fullConfig.config.debug?.loaders
2987
3080
  };
2988
- return new Me(n);
3081
+ return new je(n);
2989
3082
  } else if ("googleDrive" in t) {
2990
3083
  const e = t.googleDrive, n = {
2991
3084
  ...e,
2992
3085
  allowedExtensions: e.allowedExtensions ?? i.allowedExtensions,
2993
3086
  debugLogging: e.debugLogging ?? this.fullConfig.config.debug?.loaders
2994
3087
  };
2995
- return new Le(n);
3088
+ return new Ne(n);
2996
3089
  } else
2997
3090
  throw new Error(`Unknown loader entry: ${JSON.stringify(t)}`);
2998
3091
  }
@@ -3001,16 +3094,16 @@ class De {
3001
3094
  */
3002
3095
  async init() {
3003
3096
  try {
3004
- if ($e(), this.containerRef)
3097
+ if (qe(), this.containerRef)
3005
3098
  this.containerEl = this.containerRef;
3006
3099
  else if (this.containerEl = document.getElementById(this.containerId), !this.containerEl)
3007
3100
  throw new Error(`Container #${this.containerId} not found`);
3008
- this.containerEl.classList.add("fbn-ic-gallery"), this.swipeEngine = new pt(this.containerEl, {
3101
+ this.containerEl.classList.add("fbn-ic-gallery"), this.swipeEngine = new bt(this.containerEl, {
3009
3102
  onNext: () => this.navigateToNextImage(),
3010
3103
  onPrev: () => this.navigateToPreviousImage(),
3011
3104
  onDragOffset: (t) => this.zoomEngine.setDragOffset(t),
3012
3105
  onDragEnd: (t) => {
3013
- t ? this.zoomEngine.clearDragOffset(!1) : this.zoomEngine.clearDragOffset(!0, Ae);
3106
+ t ? this.zoomEngine.clearDragOffset(!1) : this.zoomEngine.clearDragOffset(!0, Ue);
3014
3107
  }
3015
3108
  }), this.setupUI(), this.setupEventListeners(), this.logDebug("ImageCloud initialized"), await this.loadImages();
3016
3109
  } catch (t) {
@@ -3131,55 +3224,55 @@ class De {
3131
3224
  const n = this.loadGeneration, a = this.layoutEngine.generateLayout(t.length, e, { fixedHeight: i });
3132
3225
  this.imageLayouts = a, this.displayQueue = [];
3133
3226
  let r = 0;
3134
- const s = (c) => {
3135
- this.containerEl && (this.containerEl.appendChild(c), this.imageElements.push(c), requestAnimationFrame(() => {
3136
- if (c.offsetWidth, c.style.opacity = this.defaultStyles.opacity ?? "1", c.dataset.startX && (this.entryAnimationEngine.requiresJSAnimation() || this.entryAnimationEngine.requiresJSRotation() || this.entryAnimationEngine.requiresJSScale() || c.dataset.startRotation !== c.dataset.rotation || c.dataset.startScale !== c.dataset.scale)) {
3137
- const u = {
3138
- x: parseFloat(c.dataset.startX),
3139
- y: parseFloat(c.dataset.startY)
3227
+ const s = (l) => {
3228
+ this.containerEl && (this.containerEl.appendChild(l), this.imageElements.push(l), requestAnimationFrame(() => {
3229
+ if (l.offsetWidth, l.style.opacity = this.defaultStyles.opacity ?? "1", l.dataset.startX && (this.entryAnimationEngine.requiresJSAnimation() || this.entryAnimationEngine.requiresJSRotation() || this.entryAnimationEngine.requiresJSScale() || l.dataset.startRotation !== l.dataset.rotation || l.dataset.startScale !== l.dataset.scale)) {
3230
+ const d = {
3231
+ x: parseFloat(l.dataset.startX),
3232
+ y: parseFloat(l.dataset.startY)
3140
3233
  }, g = {
3141
- x: parseFloat(c.dataset.endX),
3142
- y: parseFloat(c.dataset.endY)
3143
- }, p = parseFloat(c.dataset.imageWidth), b = parseFloat(c.dataset.imageHeight), f = parseFloat(c.dataset.rotation), m = parseFloat(c.dataset.scale), S = c.dataset.startRotation ? parseFloat(c.dataset.startRotation) : f, v = c.dataset.startScale ? parseFloat(c.dataset.startScale) : m, w = this.entryAnimationEngine.getTiming();
3144
- te({
3145
- element: c,
3146
- startPosition: u,
3234
+ x: parseFloat(l.dataset.endX),
3235
+ y: parseFloat(l.dataset.endY)
3236
+ }, b = parseFloat(l.dataset.imageWidth), m = parseFloat(l.dataset.imageHeight), f = parseFloat(l.dataset.rotation), p = parseFloat(l.dataset.scale), y = l.dataset.startRotation ? parseFloat(l.dataset.startRotation) : f, v = l.dataset.startScale ? parseFloat(l.dataset.startScale) : p, w = this.entryAnimationEngine.getTiming();
3237
+ ne({
3238
+ element: l,
3239
+ startPosition: d,
3147
3240
  endPosition: g,
3148
3241
  pathConfig: this.entryAnimationEngine.getPathConfig(),
3149
3242
  duration: w.duration,
3150
- imageWidth: p,
3151
- imageHeight: b,
3243
+ imageWidth: b,
3244
+ imageHeight: m,
3152
3245
  rotation: f,
3153
- scale: m,
3246
+ scale: p,
3154
3247
  rotationConfig: this.entryAnimationEngine.getRotationConfig(),
3155
- startRotation: S,
3248
+ startRotation: y,
3156
3249
  scaleConfig: this.entryAnimationEngine.getScaleConfig(),
3157
3250
  startScale: v
3158
3251
  });
3159
3252
  } else {
3160
- const u = c.dataset.finalTransform || "";
3161
- c.style.transform = u;
3253
+ const d = l.dataset.finalTransform || "";
3254
+ l.style.transform = d;
3162
3255
  }
3163
- const l = parseInt(c.dataset.imageId || "0");
3164
- if (this.fullConfig.config.debug?.enabled && l < 3) {
3165
- const u = c.dataset.finalTransform || "";
3166
- console.log(`Image ${l} final state:`, {
3167
- left: c.style.left,
3168
- top: c.style.top,
3169
- width: c.style.width,
3170
- height: c.style.height,
3171
- computedWidth: c.offsetWidth,
3172
- computedHeight: c.offsetHeight,
3173
- transform: u,
3256
+ const h = parseInt(l.dataset.imageId || "0");
3257
+ if (this.fullConfig.config.debug?.enabled && h < 3) {
3258
+ const d = l.dataset.finalTransform || "";
3259
+ console.log(`Image ${h} final state:`, {
3260
+ left: l.style.left,
3261
+ top: l.style.top,
3262
+ width: l.style.width,
3263
+ height: l.style.height,
3264
+ computedWidth: l.offsetWidth,
3265
+ computedHeight: l.offsetHeight,
3266
+ transform: d,
3174
3267
  pathType: this.entryAnimationEngine.getPathType()
3175
3268
  });
3176
3269
  }
3177
3270
  }), r++);
3178
- }, h = () => {
3271
+ }, c = () => {
3179
3272
  if (this.logDebug("Starting queue processing, enabled:", this.fullConfig.animation.queue.enabled), !this.fullConfig.animation.queue.enabled) {
3180
3273
  for (; this.displayQueue.length > 0; ) {
3181
- const c = this.displayQueue.shift();
3182
- c && s(c);
3274
+ const l = this.displayQueue.shift();
3275
+ l && s(l);
3183
3276
  }
3184
3277
  return;
3185
3278
  }
@@ -3189,78 +3282,78 @@ class De {
3189
3282
  return;
3190
3283
  }
3191
3284
  if (this.displayQueue.length > 0) {
3192
- const c = this.displayQueue.shift();
3193
- c && s(c);
3285
+ const l = this.displayQueue.shift();
3286
+ l && s(l);
3194
3287
  }
3195
3288
  r >= t.length && this.displayQueue.length === 0 && this.queueInterval !== null && (clearInterval(this.queueInterval), this.queueInterval = null);
3196
3289
  }, this.fullConfig.animation.queue.interval);
3197
3290
  };
3198
3291
  if ("IntersectionObserver" in window && this.containerEl) {
3199
- const c = new IntersectionObserver((d) => {
3200
- d.forEach((l) => {
3201
- l.isIntersecting && (h(), c.disconnect());
3292
+ const l = new IntersectionObserver((u) => {
3293
+ u.forEach((h) => {
3294
+ h.isIntersecting && (c(), l.disconnect());
3202
3295
  });
3203
3296
  }, { threshold: 0.1, rootMargin: "50px" });
3204
- c.observe(this.containerEl);
3297
+ l.observe(this.containerEl);
3205
3298
  } else
3206
- h();
3207
- this.fullConfig.config.debug?.centers && this.containerEl && (this.containerEl.querySelectorAll(".fbn-ic-debug-center").forEach((c) => c.remove()), a.forEach((c, d) => {
3208
- const l = document.createElement("div");
3209
- l.className = "fbn-ic-debug-center", l.style.position = "absolute", l.style.width = "12px", l.style.height = "12px", l.style.borderRadius = "50%", l.style.backgroundColor = "red", l.style.border = "2px solid yellow", l.style.zIndex = "9999", l.style.pointerEvents = "none";
3210
- const u = c.x, g = c.y;
3211
- l.style.left = `${u - 6}px`, l.style.top = `${g - 6}px`, l.title = `Image ${d}: center (${Math.round(u)}, ${Math.round(g)})`, this.containerEl.appendChild(l);
3212
- })), t.forEach((c, d) => {
3213
- const l = document.createElement("img");
3214
- l.referrerPolicy = "no-referrer", l.classList.add("fbn-ic-image"), l.dataset.imageId = String(d), l.dataset.createdFlag = "true";
3215
- const u = a[d];
3216
- l.style.position = "absolute", l.style.width = "auto", l.style.height = `${i}px`, l.style.left = `${u.x}px`, l.style.top = `${u.y}px`, u.zIndex && (l.style.zIndex = String(u.zIndex)), nt(l, this.defaultClassName), l.addEventListener("mouseenter", () => {
3217
- if (this.hoveredImage = { element: l, layout: u }, !this.zoomEngine.isInvolved(l)) {
3218
- const g = l.cachedRenderedWidth;
3219
- gt(l, this.fullConfig.styling?.hover, i, g), nt(l, this.hoverClassName);
3299
+ c();
3300
+ this.fullConfig.config.debug?.centers && this.containerEl && (this.containerEl.querySelectorAll(".fbn-ic-debug-center").forEach((l) => l.remove()), a.forEach((l, u) => {
3301
+ const h = document.createElement("div");
3302
+ h.className = "fbn-ic-debug-center", h.style.position = "absolute", h.style.width = "12px", h.style.height = "12px", h.style.borderRadius = "50%", h.style.backgroundColor = "red", h.style.border = "2px solid yellow", h.style.zIndex = "9999", h.style.pointerEvents = "none";
3303
+ const d = l.x, g = l.y;
3304
+ h.style.left = `${d - 6}px`, h.style.top = `${g - 6}px`, h.title = `Image ${u}: center (${Math.round(d)}, ${Math.round(g)})`, this.containerEl.appendChild(h);
3305
+ })), t.forEach((l, u) => {
3306
+ const h = document.createElement("img");
3307
+ h.referrerPolicy = "no-referrer", h.classList.add("fbn-ic-image"), h.dataset.imageId = String(u), h.dataset.createdFlag = "true";
3308
+ const d = a[u];
3309
+ h.style.position = "absolute", h.style.width = "auto", h.style.height = `${i}px`, h.style.left = `${d.x}px`, h.style.top = `${d.y}px`, d.zIndex && (h.style.zIndex = String(d.zIndex)), st(h, this.defaultClassName), h.addEventListener("mouseenter", () => {
3310
+ if (this.hoveredImage = { element: h, layout: d }, !this.zoomEngine.isInvolved(h)) {
3311
+ const g = h.cachedRenderedWidth;
3312
+ ft(h, this.fullConfig.styling?.hover, i, g), st(h, this.hoverClassName);
3220
3313
  }
3221
- }), l.addEventListener("mouseleave", () => {
3222
- if (this.hoveredImage = null, !this.zoomEngine.isInvolved(l)) {
3223
- const g = l.cachedRenderedWidth;
3224
- gt(l, this.fullConfig.styling?.default, i, g), mt(l, this.hoverClassName), nt(l, this.defaultClassName);
3314
+ }), h.addEventListener("mouseleave", () => {
3315
+ if (this.hoveredImage = null, !this.zoomEngine.isInvolved(h)) {
3316
+ const g = h.cachedRenderedWidth;
3317
+ ft(h, this.fullConfig.styling?.default, i, g), pt(h, this.hoverClassName), st(h, this.defaultClassName);
3225
3318
  }
3226
- }), l.addEventListener("click", (g) => {
3227
- g.stopPropagation(), this.handleImageClick(l, u);
3228
- }), l.style.opacity = "0", l.style.transition = this.entryAnimationEngine.getTransitionCSS(), l.onload = () => {
3319
+ }), h.addEventListener("click", (g) => {
3320
+ g.stopPropagation(), this.handleImageClick(h, d);
3321
+ }), h.style.opacity = "0", h.style.transition = this.entryAnimationEngine.getTransitionCSS(), h.onload = () => {
3229
3322
  if (n !== this.loadGeneration)
3230
3323
  return;
3231
- const g = l.naturalWidth / l.naturalHeight, p = i * g;
3232
- l.dataset.onloadCalled = "true", window.DEBUG_CLIPPATH && console.log(`[onload #${d}] Called with imageHeight=${i}, renderedWidth=${p}`), l.style.width = `${p}px`, l.cachedRenderedWidth = p, l.aspectRatio = g, gt(l, this.fullConfig.styling?.default, i, p);
3233
- const b = { x: u.x, y: u.y }, f = { width: p, height: i }, m = this.entryAnimationEngine.calculateStartPosition(
3234
- b,
3324
+ const g = h.naturalWidth / h.naturalHeight, b = i * g;
3325
+ h.dataset.onloadCalled = "true", window.DEBUG_CLIPPATH && console.log(`[onload #${u}] Called with imageHeight=${i}, renderedWidth=${b}`), h.style.width = `${b}px`, h.cachedRenderedWidth = b, h.aspectRatio = g, ft(h, this.fullConfig.styling?.default, i, b);
3326
+ const m = { x: d.x, y: d.y }, f = { width: b, height: i }, p = this.entryAnimationEngine.calculateStartPosition(
3327
+ m,
3235
3328
  f,
3236
3329
  e,
3237
- d,
3330
+ u,
3238
3331
  t.length
3239
- ), S = this.entryAnimationEngine.calculateStartRotation(u.rotation), v = this.entryAnimationEngine.calculateStartScale(u.scale), w = this.entryAnimationEngine.buildFinalTransform(
3240
- u.rotation,
3241
- u.scale,
3242
- p,
3332
+ ), y = this.entryAnimationEngine.calculateStartRotation(d.rotation), v = this.entryAnimationEngine.calculateStartScale(d.scale), w = this.entryAnimationEngine.buildFinalTransform(
3333
+ d.rotation,
3334
+ d.scale,
3335
+ b,
3243
3336
  i
3244
- ), E = this.entryAnimationEngine.buildStartTransform(
3337
+ ), S = this.entryAnimationEngine.buildStartTransform(
3338
+ p,
3245
3339
  m,
3340
+ d.rotation,
3341
+ d.scale,
3246
3342
  b,
3247
- u.rotation,
3248
- u.scale,
3249
- p,
3250
3343
  i,
3251
- S,
3344
+ y,
3252
3345
  v
3253
3346
  );
3254
- this.fullConfig.config.debug?.enabled && d < 3 && console.log(`Image ${d}:`, {
3255
- finalPosition: b,
3347
+ this.fullConfig.config.debug?.enabled && u < 3 && console.log(`Image ${u}:`, {
3348
+ finalPosition: m,
3256
3349
  imageSize: f,
3257
- left: u.x,
3258
- top: u.y,
3350
+ left: d.x,
3351
+ top: d.y,
3259
3352
  finalTransform: w,
3260
- renderedWidth: p,
3353
+ renderedWidth: b,
3261
3354
  renderedHeight: i
3262
- }), l.style.transform = E, l.dataset.finalTransform = w, (this.entryAnimationEngine.requiresJSAnimation() || this.entryAnimationEngine.requiresJSRotation() || this.entryAnimationEngine.requiresJSScale() || S !== u.rotation || v !== u.scale) && (l.dataset.startX = String(m.x), l.dataset.startY = String(m.y), l.dataset.endX = String(b.x), l.dataset.endY = String(b.y), l.dataset.imageWidth = String(p), l.dataset.imageHeight = String(i), l.dataset.rotation = String(u.rotation), l.dataset.scale = String(u.scale), l.dataset.startRotation = String(S), l.dataset.startScale = String(v)), this.displayQueue.push(l);
3263
- }, l.onerror = () => r++, l.src = c;
3355
+ }), h.style.transform = S, h.dataset.finalTransform = w, (this.entryAnimationEngine.requiresJSAnimation() || this.entryAnimationEngine.requiresJSRotation() || this.entryAnimationEngine.requiresJSScale() || y !== d.rotation || v !== d.scale) && (h.dataset.startX = String(p.x), h.dataset.startY = String(p.y), h.dataset.endX = String(m.x), h.dataset.endY = String(m.y), h.dataset.imageWidth = String(b), h.dataset.imageHeight = String(i), h.dataset.rotation = String(d.rotation), h.dataset.scale = String(d.scale), h.dataset.startRotation = String(y), h.dataset.startScale = String(v)), this.displayQueue.push(h);
3356
+ }, h.onerror = () => r++, h.src = l;
3264
3357
  });
3265
3358
  }
3266
3359
  async handleImageClick(t, i) {
@@ -3305,30 +3398,30 @@ class De {
3305
3398
  }
3306
3399
  }
3307
3400
  export {
3308
- Bt as AnimationEngine,
3309
- xt as BOUNCE_PRESETS,
3310
- ue as ClusterPlacementLayout,
3311
- Fe as CompositeLoader,
3312
- y as DEFAULT_CONFIG,
3313
- Lt as DEFAULT_SHARED_LOADER_CONFIG,
3314
- St as ELASTIC_PRESETS,
3315
- oe as EntryAnimationEngine,
3316
- Oe as FUNCTIONAL_CSS,
3317
- Le as GoogleDriveLoader,
3318
- re as GridPlacementLayout,
3319
- De as ImageCloud,
3320
- ze as ImageFilter,
3321
- De as ImageGallery,
3322
- fe as LayoutEngine,
3323
- se as RadialPlacementLayout,
3324
- ne as RandomPlacementLayout,
3325
- he as SpiralPlacementLayout,
3326
- Me as StaticImageLoader,
3327
- Et as WAVE_PATH_PRESETS,
3328
- ge as WavePlacementLayout,
3329
- Se as ZoomEngine,
3330
- te as animatePath,
3331
- $e as injectFunctionalStyles,
3332
- ee as requiresJSAnimation
3401
+ Jt as AnimationEngine,
3402
+ Rt as BOUNCE_PRESETS,
3403
+ pe as ClusterPlacementLayout,
3404
+ We as CompositeLoader,
3405
+ x as DEFAULT_CONFIG,
3406
+ zt as DEFAULT_SHARED_LOADER_CONFIG,
3407
+ It as ELASTIC_PRESETS,
3408
+ re as EntryAnimationEngine,
3409
+ Ge as FUNCTIONAL_CSS,
3410
+ Ne as GoogleDriveLoader,
3411
+ de as GridPlacementLayout,
3412
+ Xe as ImageCloud,
3413
+ ke as ImageFilter,
3414
+ Xe as ImageGallery,
3415
+ Ie as LayoutEngine,
3416
+ le as RadialPlacementLayout,
3417
+ ce as RandomPlacementLayout,
3418
+ fe as SpiralPlacementLayout,
3419
+ je as StaticImageLoader,
3420
+ Tt as WAVE_PATH_PRESETS,
3421
+ be as WavePlacementLayout,
3422
+ Oe as ZoomEngine,
3423
+ ne as animatePath,
3424
+ qe as injectFunctionalStyles,
3425
+ se as requiresJSAnimation
3333
3426
  };
3334
3427
  //# sourceMappingURL=image-cloud.js.map