@frybynite/image-cloud 0.9.0 → 0.9.2

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.
@@ -11,7 +11,6 @@ export declare interface AnimationConfig {
11
11
  duration: number;
12
12
  easing: AnimationEasingConfig;
13
13
  queue: AnimationQueueConfig;
14
- performance?: AnimationPerformanceConfig;
15
14
  entry?: EntryAnimationConfig;
16
15
  idle?: IdleAnimationConfig;
17
16
  }
@@ -123,15 +122,9 @@ declare interface AnimationParams {
123
122
  easing: string;
124
123
  }
125
124
 
126
- declare interface AnimationPerformanceConfig {
127
- useGPU?: boolean;
128
- reduceMotion?: boolean;
129
- }
130
-
131
125
  declare interface AnimationQueueConfig {
132
126
  enabled: boolean;
133
127
  interval: number;
134
- maxConcurrent?: number;
135
128
  }
136
129
 
137
130
  /**
@@ -563,11 +556,6 @@ export declare const FUNCTIONAL_CSS = "\n.fbn-ic-gallery {\n position: relative
563
556
 
564
557
  export declare type GalleryConfig = ImageCloudConfig;
565
558
 
566
- declare interface GestureInteractionConfig {
567
- pinchToZoom?: boolean;
568
- doubleTapToFocus?: boolean;
569
- }
570
-
571
559
  export declare interface GoogleDriveFilesSource {
572
560
  files: string[];
573
561
  }
@@ -722,6 +710,14 @@ declare interface HoneycombAlgorithmConfig {
722
710
  spacing?: number;
723
711
  }
724
712
 
713
+ export declare class HoneycombPlacementLayout implements PlacementLayout {
714
+ private config;
715
+ constructor(config: LayoutConfig, _imageConfig?: ImageConfig);
716
+ generate(imageCount: number, containerBounds: ContainerBounds, options?: Partial<LayoutConfig> & {
717
+ fixedHeight?: number;
718
+ }): ImageLayout[];
719
+ }
720
+
725
721
  declare interface IdleAnimationConfig {
726
722
  type: IdleAnimationType;
727
723
  wiggle?: IdleWiggleConfig;
@@ -1057,7 +1053,7 @@ export declare function injectFunctionalStyles(): void;
1057
1053
  declare interface InteractionConfig {
1058
1054
  focus: FocusInteractionConfig;
1059
1055
  navigation?: NavigationInteractionConfig;
1060
- gestures?: GestureInteractionConfig;
1056
+ dragging?: boolean;
1061
1057
  }
1062
1058
 
1063
1059
  export declare type LayoutAlgorithm = 'random' | 'radial' | 'grid' | 'spiral' | 'cluster' | 'wave' | 'honeycomb';
@@ -1153,7 +1149,6 @@ declare interface LayoutEngineConfig {
1153
1149
 
1154
1150
  declare interface LayoutSpacingConfig {
1155
1151
  padding: number;
1156
- minGap: number;
1157
1152
  }
1158
1153
 
1159
1154
  export declare type LoaderEntry = StaticLoaderEntry | GoogleDriveLoaderEntry;
@@ -4,11 +4,11 @@ const mt = Object.freeze({
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
- }), Tt = Object.freeze({
7
+ }), At = 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
- }), At = Object.freeze({
11
+ }), Tt = 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 }),
@@ -115,10 +115,8 @@ const mt = Object.freeze({
115
115
  densityFactor: 1,
116
116
  // Default density
117
117
  spacing: Object.freeze({
118
- padding: 50,
118
+ padding: 50
119
119
  // padding from viewport edges
120
- minGap: 20
121
- // minimum spacing between images
122
120
  })
123
121
  }),
124
122
  // Pattern-based animation configuration
@@ -136,16 +134,8 @@ const mt = Object.freeze({
136
134
  queue: Object.freeze({
137
135
  enabled: !0,
138
136
  // When false, all images display simultaneously
139
- interval: 150,
137
+ interval: 150
140
138
  // ms between processing queue items (when enabled)
141
- maxConcurrent: void 0
142
- // STUB: Not implemented yet
143
- }),
144
- performance: Object.freeze({
145
- useGPU: void 0,
146
- // STUB: Not implemented yet
147
- reduceMotion: void 0
148
- // STUB: Not implemented yet
149
139
  }),
150
140
  entry: Object.freeze({
151
141
  start: Object.freeze({
@@ -181,19 +171,12 @@ const mt = Object.freeze({
181
171
  // Use default animation duration
182
172
  }),
183
173
  navigation: Object.freeze({
184
- keyboard: void 0,
185
- // STUB: Not implemented yet
186
- swipe: void 0,
187
- // STUB: Not implemented yet
174
+ keyboard: !0,
175
+ swipe: !0,
188
176
  mouseWheel: void 0
189
177
  // STUB: Not implemented yet
190
178
  }),
191
- gestures: Object.freeze({
192
- pinchToZoom: void 0,
193
- // STUB: Not implemented yet
194
- doubleTapToFocus: void 0
195
- // STUB: Not implemented yet
196
- })
179
+ dragging: !0
197
180
  }),
198
181
  // Pattern-based rendering configuration
199
182
  rendering: Object.freeze({
@@ -327,9 +310,6 @@ function te(o = {}) {
327
310
  }), o.animation.queue && (s.animation.queue = {
328
311
  ...x.animation.queue,
329
312
  ...o.animation.queue
330
- }), o.animation.performance && (s.animation.performance = {
331
- ...x.animation.performance,
332
- ...o.animation.performance
333
313
  }), o.animation.entry && (s.animation.entry = {
334
314
  ...x.animation.entry,
335
315
  ...o.animation.entry,
@@ -354,9 +334,6 @@ function te(o = {}) {
354
334
  }), o.interaction.navigation && (s.interaction.navigation = {
355
335
  ...x.interaction.navigation,
356
336
  ...o.interaction.navigation
357
- }), o.interaction.gestures && (s.interaction.gestures = {
358
- ...x.interaction.gestures,
359
- ...o.interaction.gestures
360
337
  })), o.rendering && (s.rendering = {
361
338
  ...x.rendering,
362
339
  ...o.rendering
@@ -383,10 +360,10 @@ function te(o = {}) {
383
360
  return s;
384
361
  }
385
362
  function ee(o, t) {
386
- return { ...o ? Tt[o] : Tt.playful, ...t };
363
+ return { ...o ? At[o] : At.playful, ...t };
387
364
  }
388
365
  function ie(o, t) {
389
- return { ...o ? At[o] : At.gentle, ...t };
366
+ return { ...o ? Tt[o] : Tt.gentle, ...t };
390
367
  }
391
368
  function ne(o, t) {
392
369
  return { ...o ? Ct[o] : Ct.gentle, ...t };
@@ -657,7 +634,7 @@ function ue(o) {
657
634
  }
658
635
  const O = performance.now(), L = -r / 2, P = -s / 2;
659
636
  function z(H) {
660
- const k = H - O, T = Math.min(k / a, 1);
637
+ const k = H - O, A = Math.min(k / a, 1);
661
638
  let D;
662
639
  switch (p) {
663
640
  case "bounce": {
@@ -665,7 +642,7 @@ function ue(o) {
665
642
  n.bouncePreset,
666
643
  n.bounce
667
644
  );
668
- D = se(T, i, e, N);
645
+ D = se(A, i, e, N);
669
646
  break;
670
647
  }
671
648
  case "elastic": {
@@ -673,7 +650,7 @@ function ue(o) {
673
650
  n.elasticPreset,
674
651
  n.elastic
675
652
  );
676
- D = re(T, i, e, N);
653
+ D = re(A, i, e, N);
677
654
  break;
678
655
  }
679
656
  case "wave": {
@@ -681,20 +658,20 @@ function ue(o) {
681
658
  n.wavePreset,
682
659
  n.wave
683
660
  );
684
- D = ce(T, i, e, N);
661
+ D = ce(A, i, e, N);
685
662
  break;
686
663
  }
687
664
  default:
688
665
  D = {
689
- x: V(i.x, e.x, T),
690
- y: V(i.y, e.y, T)
666
+ x: V(i.x, e.x, A),
667
+ y: V(i.y, e.y, A)
691
668
  };
692
669
  }
693
670
  const G = D.x - e.x, U = D.y - e.y;
694
671
  let M;
695
- m ? M = he(T, c, y) : g ? M = V(d, c, T) : M = c;
696
- let A;
697
- I ? A = de(T, l, E) : v ? A = V(b, l, T) : A = l, t.style.transform = `translate(${L}px, ${P}px) translate(${G}px, ${U}px) rotate(${M}deg) scale(${A})`, T < 1 ? requestAnimationFrame(z) : (t.style.transform = `translate(${L}px, ${P}px) rotate(${c}deg) scale(${l})`, u && u());
672
+ m ? M = he(A, c, y) : g ? M = V(d, c, A) : M = c;
673
+ let T;
674
+ I ? T = de(A, l, E) : v ? T = V(b, l, A) : T = l, t.style.transform = `translate(${L}px, ${P}px) translate(${G}px, ${U}px) rotate(${M}deg) scale(${T})`, A < 1 ? requestAnimationFrame(z) : (t.style.transform = `translate(${L}px, ${P}px) rotate(${c}deg) scale(${l})`, u && u());
698
675
  }
699
676
  requestAnimationFrame(z);
700
677
  }
@@ -1311,15 +1288,15 @@ class ye {
1311
1288
  }
1312
1289
  let E = 1, R = 1;
1313
1290
  for (; E < t; ) {
1314
- const O = R / w, L = b > 0 ? 1 - O * b * 0.5 : 1, P = Math.max(g * 0.8, I / w * 1.5 / p.tightness), z = R * P, H = z * 1.5, k = Math.PI * (3 * (H + z) - Math.sqrt((3 * H + z) * (H + 3 * z))), T = this.estimateWidth(g), D = Math.floor(k / (T * 0.7));
1291
+ const O = R / w, L = b > 0 ? 1 - O * b * 0.5 : 1, P = Math.max(g * 0.8, I / w * 1.5 / p.tightness), z = R * P, H = z * 1.5, k = Math.PI * (3 * (H + z) - Math.sqrt((3 * H + z) * (H + 3 * z))), A = this.estimateWidth(g), D = Math.floor(k / (A * 0.7));
1315
1292
  if (D === 0) {
1316
1293
  R++;
1317
1294
  continue;
1318
1295
  }
1319
1296
  const G = 2 * Math.PI / D, U = R * (20 * Math.PI / 180);
1320
1297
  for (let M = 0; M < D && E < t; M++) {
1321
- const A = M * G + U, N = f ? this.random(h, d) : 1, B = L * N, C = g * B;
1322
- let _ = m + Math.cos(A) * H, F = y + Math.sin(A) * z;
1298
+ const T = M * G + U, N = f ? this.random(h, d) : 1, B = L * N, C = g * B;
1299
+ let _ = m + Math.cos(T) * H, F = y + Math.sin(T) * z;
1323
1300
  const $ = C * 1.5 / 2, j = C / 2;
1324
1301
  _ - $ < v ? _ = v + $ : _ + $ > a - v && (_ = a - v - $), F - j < v ? F = v + j : F + j > r - v && (F = r - v - j);
1325
1302
  const Y = c === "random" ? this.random(l, u) : 0;
@@ -1403,7 +1380,7 @@ class we {
1403
1380
  p,
1404
1381
  l,
1405
1382
  s
1406
- ), y = s.stagger === "row", w = s.stagger === "column", v = y ? g + 0.5 : g, I = w ? m + 0.5 : m, E = (b - s.gap * (g - 1)) / v, R = (p - s.gap * (m - 1)) / I, O = y ? E / 2 : 0, L = w ? R / 2 : 0, P = 1 + s.overlap, z = Math.min(E, R) * P, H = e.fixedHeight ? Math.min(e.fixedHeight, z) : z, k = g * E + (g - 1) * s.gap + O, T = m * R + (m - 1) * s.gap + L, D = c + (b - k) / 2, G = c + (p - T) / 2, U = g * m, M = s.columns !== "auto" && s.rows !== "auto", A = M && t > U;
1383
+ ), y = s.stagger === "row", w = s.stagger === "column", v = y ? g + 0.5 : g, I = w ? m + 0.5 : m, E = (b - s.gap * (g - 1)) / v, R = (p - s.gap * (m - 1)) / I, O = y ? E / 2 : 0, L = w ? R / 2 : 0, P = 1 + s.overlap, z = Math.min(E, R) * P, H = e.fixedHeight ? Math.min(e.fixedHeight, z) : z, k = g * E + (g - 1) * s.gap + O, A = m * R + (m - 1) * s.gap + L, D = c + (b - k) / 2, G = c + (p - A) / 2, U = g * m, M = s.columns !== "auto" && s.rows !== "auto", T = M && t > U;
1407
1384
  typeof window < "u" && (window.__gridOverflowDebug = {
1408
1385
  gridConfigColumns: s.columns,
1409
1386
  gridConfigRows: s.rows,
@@ -1412,12 +1389,12 @@ class we {
1412
1389
  cellCount: U,
1413
1390
  hasFixedGrid: M,
1414
1391
  imageCount: t,
1415
- isOverflowMode: A
1392
+ isOverflowMode: T
1416
1393
  });
1417
- const N = A ? new Array(U).fill(0) : [], B = Math.min(E, R) * s.overflowOffset;
1394
+ const N = T ? new Array(U).fill(0) : [], B = Math.min(E, R) * s.overflowOffset;
1418
1395
  for (let C = 0; C < t; C++) {
1419
1396
  let _, F, X = 0;
1420
- if (A && C >= U) {
1397
+ if (T && C >= U) {
1421
1398
  const q = C - U, W = q % U;
1422
1399
  X = Math.floor(q / U) + 1, N[W]++, s.fillDirection === "row" ? (_ = W % g, F = Math.floor(W / g)) : (F = W % m, _ = Math.floor(W / m));
1423
1400
  } else
@@ -1432,7 +1409,7 @@ class we {
1432
1409
  $ += this.random(-q, q), j += this.random(-W, W);
1433
1410
  }
1434
1411
  let Y = $, J = j;
1435
- if (!A && s.fillDirection === "row") {
1412
+ if (!T && s.fillDirection === "row") {
1436
1413
  const q = t % g || g;
1437
1414
  if (F === Math.floor((t - 1) / g) && q < g) {
1438
1415
  const Rt = q * E + (q - 1) * s.gap;
@@ -1448,7 +1425,7 @@ class we {
1448
1425
  s.jitter > 0 ? dt = this.random(q * s.jitter, W * s.jitter) : dt = this.random(q, W);
1449
1426
  }
1450
1427
  let ut;
1451
- A && X > 0 ? ut = 50 - X : ut = A ? 100 + C : C + 1, n.push({
1428
+ T && X > 0 ? ut = 50 - X : ut = T ? 100 + C : C + 1, n.push({
1452
1429
  id: C,
1453
1430
  x: Y,
1454
1431
  y: J,
@@ -1519,7 +1496,7 @@ class Se {
1519
1496
  const $ = I * 0.3 * s.tightness;
1520
1497
  E = $ * v + s.startAngle, R = this.calculateLogarithmicRadius($, t, w, s.tightness);
1521
1498
  }
1522
- const O = m + Math.cos(E) * R, L = y + Math.sin(E) * R, P = R / w, z = g > 0 ? 1 - P * g * 0.5 : 1, H = p ? this.random(f, b) : 1, k = z * H, T = l * k, G = T * 1.5 / 2, U = T / 2, M = c + G, A = a - c - G, N = c + U, B = r - c - U, C = Math.max(M, Math.min(O, A)), _ = Math.max(N, Math.min(L, B));
1499
+ const O = m + Math.cos(E) * R, L = y + Math.sin(E) * R, P = R / w, z = g > 0 ? 1 - P * g * 0.5 : 1, H = p ? this.random(f, b) : 1, k = z * H, A = l * k, G = A * 1.5 / 2, U = A / 2, M = c + G, T = a - c - G, N = c + U, B = r - c - U, C = Math.max(M, Math.min(O, T)), _ = Math.max(N, Math.min(L, B));
1523
1500
  let F = 0;
1524
1501
  if (u === "random") {
1525
1502
  const $ = E * 180 / Math.PI % 360, j = this.random(h, d);
@@ -1532,7 +1509,7 @@ class Se {
1532
1509
  y: _,
1533
1510
  rotation: F,
1534
1511
  scale: k,
1535
- baseSize: T,
1512
+ baseSize: A,
1536
1513
  zIndex: X
1537
1514
  });
1538
1515
  }
@@ -1634,10 +1611,10 @@ class Re {
1634
1611
  }
1635
1612
  const P = 1 + s.overlap * 0.5, z = 1 + s.overlap * 0.3;
1636
1613
  O /= P, L /= P;
1637
- const H = p ? this.random(f, b) : 1, k = z * H, T = l * k;
1614
+ const H = p ? this.random(f, b) : 1, k = z * H, A = l * k;
1638
1615
  let D = I.x + O, G = I.y + L;
1639
- const M = T * 1.5 / 2, A = T / 2;
1640
- D = Math.max(c + M, Math.min(D, a - c - M)), G = Math.max(c + A, Math.min(G, r - c - A));
1616
+ const M = A * 1.5 / 2, T = A / 2;
1617
+ D = Math.max(c + M, Math.min(D, a - c - M)), G = Math.max(c + T, Math.min(G, r - c - T));
1641
1618
  const N = u === "random" ? this.random(h, d) : 0, C = Math.sqrt(O * O + L * L) / I.spread, _ = Math.round((1 - C) * 50) + 1;
1642
1619
  n.push({
1643
1620
  id: w,
@@ -1645,7 +1622,7 @@ class Re {
1645
1622
  y: G,
1646
1623
  rotation: N,
1647
1624
  scale: k,
1648
- baseSize: T,
1625
+ baseSize: A,
1649
1626
  zIndex: _
1650
1627
  }), w++;
1651
1628
  }
@@ -1712,7 +1689,7 @@ class Re {
1712
1689
  return Math.random() * (i - t) + t;
1713
1690
  }
1714
1691
  }
1715
- class Te {
1692
+ class Ae {
1716
1693
  constructor(t, i = {}) {
1717
1694
  this.config = t, this.imageConfig = i;
1718
1695
  }
@@ -1727,12 +1704,12 @@ class Te {
1727
1704
  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, f = this.imageConfig.sizing?.variance?.max ?? 1, b = d !== 1 || f !== 1, p = e.fixedHeight ?? s, g = {
1728
1705
  ...Nt,
1729
1706
  ...this.config.wave
1730
- }, { rows: m, amplitude: y, frequency: w, phaseShift: v, synchronization: I } = g, E = Math.ceil(t / m), L = p * 1.5 / 2, P = c + L, z = a - c - L, H = z - P, k = E > 1 ? H / (E - 1) : 0, T = c + y + p / 2, D = r - c - y - p / 2, G = D - T, U = m > 1 ? G / (m - 1) : 0;
1707
+ }, { rows: m, amplitude: y, frequency: w, phaseShift: v, synchronization: I } = g, E = Math.ceil(t / m), L = p * 1.5 / 2, P = c + L, z = a - c - L, H = z - P, k = E > 1 ? H / (E - 1) : 0, A = c + y + p / 2, D = r - c - y - p / 2, G = D - A, U = m > 1 ? G / (m - 1) : 0;
1731
1708
  let M = 0;
1732
- for (let A = 0; A < m && M < t; A++) {
1733
- const N = m === 1 ? (T + D) / 2 : T + A * U;
1709
+ for (let T = 0; T < m && M < t; T++) {
1710
+ const N = m === 1 ? (A + D) / 2 : A + T * U;
1734
1711
  let B = 0;
1735
- I === "offset" ? B = A * v : I === "alternating" && (B = A * Math.PI);
1712
+ I === "offset" ? B = T * v : I === "alternating" && (B = T * Math.PI);
1736
1713
  for (let C = 0; C < E && M < t; C++) {
1737
1714
  const _ = E === 1 ? (P + z) / 2 : P + C * k, F = this.calculateWaveY(_, a, y, w, B), X = _, $ = N + F, j = b ? this.random(d, f) : 1, Y = p * j;
1738
1715
  let J = 0;
@@ -1802,10 +1779,10 @@ const xt = 100, Q = 100 / Math.sqrt(3), St = [
1802
1779
  // lower-left
1803
1780
  [0, 50]
1804
1781
  // left
1805
- ], Ae = St[1][0] / xt, Ce = St[2][1] / xt;
1782
+ ], Te = St[1][0] / xt, Ce = St[2][1] / xt;
1806
1783
  function Le(o) {
1807
1784
  return {
1808
- colStep: Ae * o,
1785
+ colStep: Te * o,
1809
1786
  rowOffset: Ce * o
1810
1787
  };
1811
1788
  }
@@ -1885,7 +1862,7 @@ class De {
1885
1862
  case "cluster":
1886
1863
  return new Re(this.config, this.imageConfig);
1887
1864
  case "wave":
1888
- return new Te(this.config, this.imageConfig);
1865
+ return new Ae(this.config, this.imageConfig);
1889
1866
  case "honeycomb":
1890
1867
  return new ze(this.config, this.imageConfig);
1891
1868
  default:
@@ -3329,14 +3306,14 @@ class ei {
3329
3306
  this.containerEl = this.containerRef;
3330
3307
  else if (this.containerEl = document.getElementById(this.containerId), !this.containerEl)
3331
3308
  throw new Error(`Container #${this.containerId} not found`);
3332
- this.containerEl.classList.add("fbn-ic-gallery"), this.swipeEngine = new bt(this.containerEl, {
3309
+ this.containerEl.classList.add("fbn-ic-gallery"), this.containerEl.setAttribute("tabindex", "0"), this.fullConfig.interaction.navigation?.swipe !== !1 && (this.swipeEngine = new bt(this.containerEl, {
3333
3310
  onNext: () => this.navigateToNextImage(),
3334
3311
  onPrev: () => this.navigateToPreviousImage(),
3335
3312
  onDragOffset: (t) => this.zoomEngine.setDragOffset(t),
3336
3313
  onDragEnd: (t) => {
3337
3314
  t ? this.zoomEngine.clearDragOffset(!1) : this.zoomEngine.clearDragOffset(!0, Xe);
3338
3315
  }
3339
- }), this.setupUI(), this.setupEventListeners(), this.logDebug("ImageCloud initialized"), await this.loadImages();
3316
+ })), this.setupUI(), this.setupEventListeners(), this.logDebug("ImageCloud initialized"), await this.loadImages();
3340
3317
  } catch (t) {
3341
3318
  console.error("Gallery initialization failed:", t), this.errorEl && t instanceof Error && this.showError("Gallery failed to initialize: " + t.message);
3342
3319
  }
@@ -3365,7 +3342,7 @@ class ei {
3365
3342
  return t.className = "fbn-ic-counter fbn-ic-hidden", this.containerEl.appendChild(t), t;
3366
3343
  }
3367
3344
  setupEventListeners() {
3368
- document.addEventListener("keydown", (t) => {
3345
+ this.fullConfig.interaction.navigation?.keyboard !== !1 && this.containerEl.addEventListener("keydown", (t) => {
3369
3346
  t.key === "Escape" ? (this.zoomEngine.unfocusImage(), this.currentFocusIndex = null, this.swipeEngine?.disable(), this.hideCounter()) : t.key === "ArrowRight" ? this.navigateToNextImage() : t.key === "ArrowLeft" ? this.navigateToPreviousImage() : (t.key === "Enter" || t.key === " ") && this.hoveredImage && (this.handleImageClick(this.hoveredImage.element, this.hoveredImage.layout), t.preventDefault());
3370
3347
  }), document.addEventListener("click", (t) => {
3371
3348
  this.swipeEngine?.hadRecentTouch() || t.target.closest(".fbn-ic-image") || (this.zoomEngine.unfocusImage(), this.currentFocusIndex = null, this.swipeEngine?.disable(), this.hideCounter());
@@ -3539,7 +3516,7 @@ class ei {
3539
3516
  h.style.left = `${d - 6}px`, h.style.top = `${f - 6}px`, h.title = `Image ${u}: center (${Math.round(d)}, ${Math.round(f)})`, this.containerEl.appendChild(h);
3540
3517
  })), t.forEach((l, u) => {
3541
3518
  const h = document.createElement("img");
3542
- h.referrerPolicy = "no-referrer", h.classList.add("fbn-ic-image"), h.dataset.imageId = String(u), h.dataset.createdFlag = "true";
3519
+ h.referrerPolicy = "no-referrer", h.classList.add("fbn-ic-image"), this.fullConfig.interaction.dragging === !1 && (h.draggable = !1), h.dataset.imageId = String(u), h.dataset.createdFlag = "true";
3543
3520
  const d = a[u];
3544
3521
  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", () => {
3545
3522
  if (this.hoveredImage = { element: h, layout: d }, !this.zoomEngine.isInvolved(h)) {