@redot-src/glare 1.2.1 → 1.4.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +45 -51
- package/dist/core/animation.d.ts +12 -1
- package/dist/core/dom.d.ts +17 -3
- package/dist/core/glare.d.ts +4 -2
- package/dist/glare.css +1 -1
- package/dist/glare.esm.js +545 -520
- package/dist/glare.esm.js.map +1 -1
- package/dist/glare.js +4 -17
- package/dist/glare.js.map +1 -1
- package/dist/icons.d.ts +8 -1
- package/dist/index.d.ts +1 -1
- package/dist/templates.d.ts +0 -1
- package/dist/types.d.ts +26 -15
- package/package.json +11 -7
- package/dist/modules/share.d.ts +0 -17
package/dist/glare.esm.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
const
|
|
1
|
+
const at = {
|
|
2
2
|
CLOSE: "Close",
|
|
3
3
|
NEXT: "Next",
|
|
4
4
|
PREV: "Previous",
|
|
@@ -13,26 +13,24 @@ const it = {
|
|
|
13
13
|
FULL_SCREEN_EXIT: "Exit full screen",
|
|
14
14
|
THUMBS: "Thumbnails",
|
|
15
15
|
DOWNLOAD: "Download",
|
|
16
|
-
SHARE: "Share",
|
|
17
16
|
MORE: "More options",
|
|
18
|
-
COPY: "Copy link",
|
|
19
17
|
ZOOM: "Zoom",
|
|
20
18
|
ZOOM_OUT: "Zoom out"
|
|
21
19
|
};
|
|
22
|
-
function
|
|
20
|
+
function xt(e) {
|
|
23
21
|
const t = e.lang ?? "en";
|
|
24
|
-
return { ...
|
|
22
|
+
return { ...at, ...e.i18n?.en, ...e.i18n?.[t] };
|
|
25
23
|
}
|
|
26
|
-
function
|
|
24
|
+
function x(e, t) {
|
|
27
25
|
return e.replace(/\{\{(\w+)\}\}/g, (s, i) => t[i] ?? "");
|
|
28
26
|
}
|
|
29
|
-
function
|
|
27
|
+
function vt(e) {
|
|
30
28
|
return Object.entries(e).map(([t, s]) => `${encodeURIComponent(t)}=${encodeURIComponent(String(s))}`).join("&");
|
|
31
29
|
}
|
|
32
|
-
function
|
|
30
|
+
function wt(e, t) {
|
|
33
31
|
return e.replace(/\$(\d+)/g, (s, i) => t[Number(i)] ?? "");
|
|
34
32
|
}
|
|
35
|
-
const
|
|
33
|
+
const Et = {
|
|
36
34
|
youtube: {
|
|
37
35
|
matcher: /(?:youtube\.com|youtu\.be|youtube-nocookie\.com)\/(?:watch\?(?:.*&)?v=|v\/|u\/\w\/|embed\/|shorts\/)?([\w-]{11})/i,
|
|
38
36
|
type: "embed",
|
|
@@ -50,48 +48,55 @@ const yt = {
|
|
|
50
48
|
matcher: /(?:maps\.)?google\.([a-z]{2,3}(?:\.[a-z]{2})?)\/(?:maps\/(?:place\/[^/]+\/)?@([^/]+)|maps\?q=([^&]+)|maps\/search\/([^/?]+))/i,
|
|
51
49
|
type: "iframe",
|
|
52
50
|
url: (e) => {
|
|
53
|
-
const [, t, s, i,
|
|
51
|
+
const [, t, s, i, n] = e;
|
|
54
52
|
if (s) {
|
|
55
|
-
const [
|
|
56
|
-
return `https://maps.google.${t}/maps?ll=${
|
|
53
|
+
const [r, a, l] = s.split(","), u = l ? Math.floor(parseFloat(l)) : 14;
|
|
54
|
+
return `https://maps.google.${t}/maps?ll=${r},${a}&z=${u}&output=embed`;
|
|
57
55
|
}
|
|
58
|
-
const o = encodeURIComponent(decodeURIComponent(i ||
|
|
56
|
+
const o = encodeURIComponent(decodeURIComponent(i || n || ""));
|
|
59
57
|
return `https://maps.google.${t}/maps?q=${o}&output=embed`;
|
|
60
58
|
}
|
|
61
59
|
}
|
|
62
60
|
};
|
|
63
61
|
function q(e, t, s) {
|
|
64
62
|
if (typeof e == "function") return e(t, s);
|
|
65
|
-
if (typeof e == "string") return
|
|
63
|
+
if (typeof e == "string") return wt(e, t);
|
|
66
64
|
}
|
|
67
|
-
function
|
|
65
|
+
function Tt(e, t) {
|
|
68
66
|
for (const s of Object.values(t ?? {})) {
|
|
69
67
|
const i = e.match(s.matcher);
|
|
70
68
|
if (!i) continue;
|
|
71
|
-
let
|
|
72
|
-
return s.params && (
|
|
73
|
-
src:
|
|
69
|
+
let n = q(s.url, i, e) ?? e;
|
|
70
|
+
return s.params && (n += (n.includes("?") ? "&" : "?") + vt(s.params)), {
|
|
71
|
+
src: n,
|
|
74
72
|
type: s.type ?? "iframe",
|
|
75
73
|
thumb: q(s.thumb, i, e)
|
|
76
74
|
};
|
|
77
75
|
}
|
|
78
76
|
return null;
|
|
79
77
|
}
|
|
80
|
-
const
|
|
81
|
-
close:
|
|
82
|
-
next:
|
|
83
|
-
prev:
|
|
84
|
-
zoomIn:
|
|
85
|
-
zoomOut:
|
|
86
|
-
download:
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
78
|
+
const d = (e) => `<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true">${e}</svg>`, c = {
|
|
79
|
+
close: d('<path d="M18 6 6 18"/><path d="m6 6 12 12"/>'),
|
|
80
|
+
next: d('<path d="m9 18 6-6-6-6"/>'),
|
|
81
|
+
prev: d('<path d="m15 18-6-6 6-6"/>'),
|
|
82
|
+
zoomIn: d('<circle cx="11" cy="11" r="8"/><path d="m21 21-4.3-4.3"/><path d="M11 8v6"/><path d="M8 11h6"/>'),
|
|
83
|
+
zoomOut: d('<circle cx="11" cy="11" r="8"/><path d="m21 21-4.3-4.3"/><path d="M8 11h6"/>'),
|
|
84
|
+
download: d('<path d="M21 15v4a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2v-4"/><polyline points="7 10 12 15 17 10"/><line x1="12" x2="12" y1="15" y2="3"/>'),
|
|
85
|
+
thumbs: d('<rect width="18" height="18" x="3" y="3" rx="2"/><path d="M3 9h18"/><path d="M9 21V9"/>'),
|
|
86
|
+
play: d('<polygon points="6 3 20 12 6 21 6 3"/>'),
|
|
87
|
+
pause: d('<rect width="4" height="16" x="6" y="4"/><rect width="4" height="16" x="14" y="4"/>'),
|
|
88
|
+
fullscreen: d('<path d="M8 3H5a2 2 0 0 0-2 2v3"/><path d="M21 8V5a2 2 0 0 0-2-2h-3"/><path d="M3 16v3a2 2 0 0 0 2 2h3"/><path d="M16 21h3a2 2 0 0 0 2-2v-3"/>'),
|
|
89
|
+
fullscreenExit: d('<path d="M8 3v3a2 2 0 0 1-2 2H3"/><path d="M21 8h-3a2 2 0 0 1-2-2V3"/><path d="M3 16h3a2 2 0 0 1 2 2v3"/><path d="M16 21v-3a2 2 0 0 1 2-2h3"/>'),
|
|
90
|
+
more: d('<circle cx="5" cy="12" r="1" fill="currentColor" stroke="none"/><circle cx="12" cy="12" r="1" fill="currentColor" stroke="none"/><circle cx="19" cy="12" r="1" fill="currentColor" stroke="none"/>'),
|
|
91
|
+
thumbImage: d('<rect x="3" y="4" width="18" height="16" rx="2"/><circle cx="8.5" cy="9" r="1.5"/><path d="m4 17 5-5 4 4 2-2 5 5"/>'),
|
|
92
|
+
thumbVideo: d('<rect x="3" y="5" width="18" height="14" rx="2"/><path d="m10 9 5 3-5 3Z"/>'),
|
|
93
|
+
thumbEmbed: d('<circle cx="12" cy="12" r="9"/><path d="m10 8 6 4-6 4Z"/>'),
|
|
94
|
+
thumbIframe: d('<rect x="3" y="4" width="18" height="16" rx="2"/><path d="M3 8h18"/><circle cx="6" cy="6" r=".5" fill="currentColor" stroke="none"/><circle cx="9" cy="6" r=".5" fill="currentColor" stroke="none"/>'),
|
|
95
|
+
thumbInline: d('<rect x="4" y="4" width="16" height="16" rx="2"/><path d="M8 8h8M8 12h8M8 16h5"/>'),
|
|
96
|
+
thumbAjax: d('<path d="M20 15a4 4 0 0 0-3-3.87A6 6 0 1 0 6 14"/><path d="m9 16 3 3 3-3M12 12v7"/>'),
|
|
97
|
+
thumbHtml: d('<path d="m8 9-3 3 3 3M16 9l3 3-3 3M14 5l-4 14"/>'),
|
|
98
|
+
thumbSlide: d('<path d="M6 3h9l4 4v14H6Z"/><path d="M14 3v5h5M9 13h7M9 17h5"/>')
|
|
99
|
+
}, w = (e, t, s, i = "") => `<button type="button" class="glare-button glare-button--${e}" data-glare-${e} title="{{${t}}}" aria-label="{{${t}}}"${i}>${s}</button>`, St = `
|
|
95
100
|
<div class="glare-container" role="dialog" aria-modal="true" tabindex="-1">
|
|
96
101
|
<div class="glare-bg"></div>
|
|
97
102
|
<div class="glare-progress" hidden></div>
|
|
@@ -100,44 +105,31 @@ const f = (e) => `<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fi
|
|
|
100
105
|
<div class="glare-infobar"><span class="glare-infobar-index"></span></div>
|
|
101
106
|
<div class="glare-toolbar"></div>
|
|
102
107
|
<div class="glare-navigation">
|
|
103
|
-
${
|
|
104
|
-
${
|
|
108
|
+
${w("prev", "PREV", c.prev)}
|
|
109
|
+
${w("next", "NEXT", c.next)}
|
|
105
110
|
</div>
|
|
106
111
|
<div class="glare-stage"></div>
|
|
107
112
|
<div class="glare-caption"></div>
|
|
108
113
|
</div>
|
|
109
|
-
</div>`,
|
|
110
|
-
zoom:
|
|
111
|
-
slideshow:
|
|
112
|
-
thumbs:
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
}, wt = '<div class="glare-spinner" role="status" aria-label="{{LOADING}}"></div>', Et = '<div class="glare-error"><p>{{ERROR}}</p></div>', St = '<video class="glare-video" controls playsinline controlsList="nodownload" poster="{{poster}}"><source src="{{src}}" type="{{format}}"/>{{VIDEO_UNSUPPORTED}}</video>', Tt = '<iframe class="glare-iframe"></iframe>', Lt = `
|
|
120
|
-
<div class="glare-share" role="dialog" aria-label="{{SHARE}}">
|
|
121
|
-
<div class="glare-share-head">
|
|
122
|
-
<h4 class="glare-share-title">{{SHARE}}</h4>
|
|
123
|
-
<button type="button" class="glare-button glare-share-close" data-glare-share-close title="{{CLOSE}}" aria-label="{{CLOSE}}">${u.close}</button>
|
|
124
|
-
</div>
|
|
125
|
-
<p><a class="glare-share-link" href="{{url_facebook}}" target="_blank" rel="noopener">Facebook</a></p>
|
|
126
|
-
<p><a class="glare-share-link" href="{{url_twitter}}" target="_blank" rel="noopener">X / Twitter</a></p>
|
|
127
|
-
<p><a class="glare-share-link" href="{{url_pinterest}}" target="_blank" rel="noopener">Pinterest</a></p>
|
|
128
|
-
<div class="glare-share-row">
|
|
129
|
-
<input class="glare-share-input" type="text" value="{{url_direct}}" readonly />
|
|
130
|
-
<button type="button" class="glare-share-copy" data-glare-share-copy>{{COPY}}</button>
|
|
131
|
-
</div>
|
|
132
|
-
</div>`, rt = {
|
|
114
|
+
</div>`, Mt = {
|
|
115
|
+
zoom: w("zoom", "ZOOM", c.zoomIn),
|
|
116
|
+
slideshow: w("slideshow", "PLAY_START", c.play),
|
|
117
|
+
thumbs: w("thumbs", "THUMBS", c.thumbs, ' aria-expanded="false"'),
|
|
118
|
+
fullscreen: w("fullscreen", "FULL_SCREEN", c.fullscreen),
|
|
119
|
+
more: w("more", "MORE", c.more, ' aria-expanded="false" aria-haspopup="true"'),
|
|
120
|
+
close: w("close", "CLOSE", c.close),
|
|
121
|
+
download: `<a class="glare-button glare-button--download" data-glare-download download target="_blank" rel="noopener" title="{{DOWNLOAD}}" aria-label="{{DOWNLOAD}}">${c.download}</a>`,
|
|
122
|
+
smallBtn: `<button type="button" class="glare-button glare-close-small" data-glare-close title="{{CLOSE}}" aria-label="{{CLOSE}}">${c.close}</button>`
|
|
123
|
+
}, Lt = '<div class="glare-spinner" role="status" aria-label="{{LOADING}}"></div>', Ct = '<div class="glare-error"><p>{{ERROR}}</p></div>', $t = '<video class="glare-video" controls playsinline controlsList="nodownload" poster="{{poster}}"><source src="{{src}}" type="{{format}}"/>{{VIDEO_UNSUPPORTED}}</video>', It = '<iframe class="glare-iframe"></iframe>', lt = {
|
|
133
124
|
autoStart: !1,
|
|
134
|
-
axis: "x"
|
|
135
|
-
|
|
125
|
+
axis: "x",
|
|
126
|
+
fit: "cover"
|
|
127
|
+
}, N = {
|
|
136
128
|
autoStart: !1,
|
|
137
129
|
speed: 3e3
|
|
138
|
-
},
|
|
130
|
+
}, ct = {
|
|
139
131
|
autoStart: !1
|
|
140
|
-
},
|
|
132
|
+
}, R = {
|
|
141
133
|
closeExisting: !1,
|
|
142
134
|
loop: !1,
|
|
143
135
|
keyboard: !0,
|
|
@@ -156,9 +148,10 @@ const f = (e) => `<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fi
|
|
|
156
148
|
infobar: !0,
|
|
157
149
|
toolbar: "auto",
|
|
158
150
|
smallBtn: "auto",
|
|
159
|
-
buttons: ["zoom", "slideshow", "thumbs", "
|
|
151
|
+
buttons: ["zoom", "slideshow", "thumbs", "download", "fullscreen", "close"],
|
|
160
152
|
animationEffect: "zoom",
|
|
161
153
|
animationDuration: 366,
|
|
154
|
+
anchor: "trigger",
|
|
162
155
|
zoomOpacity: !0,
|
|
163
156
|
transitionEffect: "fade",
|
|
164
157
|
transitionDuration: 366,
|
|
@@ -176,66 +169,65 @@ const f = (e) => `<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fi
|
|
|
176
169
|
dblclickSlide: (e) => e.type === "image" ? "zoom" : !1
|
|
177
170
|
},
|
|
178
171
|
image: { preload: !1 },
|
|
179
|
-
video: { tpl:
|
|
172
|
+
video: { tpl: $t, format: "", autoStart: !0 },
|
|
180
173
|
iframe: {
|
|
181
174
|
preload: !0,
|
|
182
175
|
css: {},
|
|
183
176
|
attr: { allowfullscreen: "true", allow: "autoplay; fullscreen; picture-in-picture" },
|
|
184
|
-
tpl:
|
|
177
|
+
tpl: It
|
|
185
178
|
},
|
|
186
179
|
ajax: { settings: { headers: { "X-Requested-With": "XMLHttpRequest" } } },
|
|
187
|
-
media:
|
|
180
|
+
media: Et,
|
|
188
181
|
hash: !0,
|
|
189
|
-
slideshow:
|
|
190
|
-
thumbs:
|
|
191
|
-
fullscreen:
|
|
192
|
-
share: !0,
|
|
182
|
+
slideshow: N,
|
|
183
|
+
thumbs: lt,
|
|
184
|
+
fullscreen: ct,
|
|
193
185
|
lang: "en",
|
|
194
|
-
i18n: { en:
|
|
195
|
-
baseTpl:
|
|
196
|
-
btnTpl:
|
|
197
|
-
spinnerTpl:
|
|
198
|
-
errorTpl:
|
|
199
|
-
},
|
|
200
|
-
function
|
|
201
|
-
return e ?
|
|
202
|
-
}
|
|
203
|
-
function
|
|
186
|
+
i18n: { en: at },
|
|
187
|
+
baseTpl: St,
|
|
188
|
+
btnTpl: Mt,
|
|
189
|
+
spinnerTpl: Lt,
|
|
190
|
+
errorTpl: Ct
|
|
191
|
+
}, Ot = /\.(avif|bmp|gif|jpe?g|png|svg|webp|ico)(\?.*)?$/i, At = /\.(mp4|webm|ogg|ogv|mov|m4v)(\?.*)?$/i, Dt = /\.pdf(\?.*)?$/i, kt = /^(#[\w-]+|\.[\w-]+)$/;
|
|
192
|
+
function Rt(e, t = "image") {
|
|
193
|
+
return e ? kt.test(e) ? "inline" : Ot.test(e) ? "image" : At.test(e) ? "video" : Dt.test(e) ? "iframe" : t : "html";
|
|
194
|
+
}
|
|
195
|
+
function Ft(e) {
|
|
204
196
|
const t = e.match(/\.(\w+)(?:\?|$)/)?.[1]?.toLowerCase();
|
|
205
197
|
return t ? `video/${t === "ogv" ? "ogg" : t}` : "video/mp4";
|
|
206
198
|
}
|
|
207
|
-
function
|
|
199
|
+
function ht(e, t, s) {
|
|
208
200
|
const i = typeof e == "string" ? { src: e } : { ...e };
|
|
209
|
-
let
|
|
210
|
-
const a =
|
|
211
|
-
return a && (
|
|
201
|
+
let n = i.src ?? "", o = i.type, r = i.thumb;
|
|
202
|
+
const a = n ? Tt(n, s.media) : null;
|
|
203
|
+
return a && (n = a.src ?? n, o ??= a.type, r ??= a.thumb), o || (o = i.html || i.content ? "html" : Rt(n, s.defaultType)), {
|
|
212
204
|
...i,
|
|
213
205
|
index: t,
|
|
214
|
-
src:
|
|
206
|
+
src: n,
|
|
215
207
|
type: o,
|
|
216
|
-
thumb:
|
|
208
|
+
thumb: r,
|
|
217
209
|
caption: i.caption ?? i.title ?? "",
|
|
218
210
|
isLoaded: !1,
|
|
219
211
|
hasError: !1
|
|
220
212
|
};
|
|
221
213
|
}
|
|
222
|
-
const
|
|
223
|
-
function
|
|
214
|
+
const p = (e, t) => e.getAttribute(t) || void 0;
|
|
215
|
+
function Ht(e, t) {
|
|
224
216
|
return e.map((s, i) => {
|
|
225
|
-
const
|
|
226
|
-
return
|
|
217
|
+
const n = s.querySelector("img"), o = p(s, "data-caption") ?? p(s, "title") ?? "";
|
|
218
|
+
return ht(
|
|
227
219
|
{
|
|
228
|
-
src:
|
|
229
|
-
type:
|
|
220
|
+
src: p(s, "data-src") ?? p(s, "href") ?? "",
|
|
221
|
+
type: p(s, "data-type"),
|
|
230
222
|
caption: o,
|
|
231
|
-
alt:
|
|
232
|
-
thumb:
|
|
233
|
-
width:
|
|
234
|
-
height:
|
|
235
|
-
ratio:
|
|
236
|
-
poster:
|
|
237
|
-
downloadSrc:
|
|
238
|
-
html:
|
|
223
|
+
alt: n?.getAttribute("alt") || o,
|
|
224
|
+
thumb: p(s, "data-thumb") ?? n?.getAttribute("src") ?? void 0,
|
|
225
|
+
width: p(s, "data-width"),
|
|
226
|
+
height: p(s, "data-height"),
|
|
227
|
+
ratio: p(s, "data-ratio"),
|
|
228
|
+
poster: p(s, "data-poster"),
|
|
229
|
+
downloadSrc: p(s, "data-download-src"),
|
|
230
|
+
html: p(s, "data-html"),
|
|
239
231
|
$trigger: s
|
|
240
232
|
},
|
|
241
233
|
i,
|
|
@@ -243,192 +235,225 @@ function Dt(e, t) {
|
|
|
243
235
|
);
|
|
244
236
|
});
|
|
245
237
|
}
|
|
246
|
-
function
|
|
247
|
-
return e.length && e[0]
|
|
238
|
+
function Pt(e, t) {
|
|
239
|
+
return e.length && e[0].nodeType === 1 ? Ht(e, t) : e.map((s, i) => ht(s, i, t));
|
|
248
240
|
}
|
|
249
|
-
function
|
|
241
|
+
function h(e, t = document) {
|
|
250
242
|
return t.querySelector(e);
|
|
251
243
|
}
|
|
252
|
-
function
|
|
244
|
+
function I(e, t = document) {
|
|
253
245
|
return Array.from(t.querySelectorAll(e));
|
|
254
246
|
}
|
|
255
|
-
function
|
|
247
|
+
function m(e, t = "", s = "") {
|
|
256
248
|
const i = document.createElement(e);
|
|
257
249
|
return t && (i.className = t), s && (i.innerHTML = s), i;
|
|
258
250
|
}
|
|
259
|
-
function
|
|
260
|
-
return
|
|
251
|
+
function zt(e) {
|
|
252
|
+
return m("div", "", e.trim()).firstElementChild;
|
|
261
253
|
}
|
|
262
|
-
function
|
|
254
|
+
function Z(e) {
|
|
263
255
|
return /[<&]/.test(e) ? new DOMParser().parseFromString(e, "text/html").body.textContent?.trim() ?? "" : e.trim();
|
|
264
256
|
}
|
|
265
|
-
function
|
|
266
|
-
return e ? typeof e != "string" ? e :
|
|
257
|
+
function ut(e, t = document) {
|
|
258
|
+
return e ? typeof e != "string" ? e : h(e, t) ?? h(e) : null;
|
|
267
259
|
}
|
|
268
|
-
function
|
|
260
|
+
function W(e) {
|
|
269
261
|
return typeof e == "number" ? `${e}px` : e;
|
|
270
262
|
}
|
|
271
|
-
function
|
|
263
|
+
function f(e, t, s, i) {
|
|
272
264
|
return e.addEventListener(t, s, i), () => e.removeEventListener(t, s, i);
|
|
273
265
|
}
|
|
274
|
-
function
|
|
266
|
+
function dt(e) {
|
|
275
267
|
requestAnimationFrame(() => requestAnimationFrame(e));
|
|
276
268
|
}
|
|
277
|
-
function
|
|
269
|
+
function _t(e, t, s) {
|
|
278
270
|
let i = !1;
|
|
279
|
-
const
|
|
280
|
-
i || (i = !0, clearTimeout(
|
|
271
|
+
const n = () => {
|
|
272
|
+
i || (i = !0, clearTimeout(r), e.removeEventListener("transitionend", o), s());
|
|
281
273
|
}, o = (a) => {
|
|
282
|
-
a.target === e &&
|
|
274
|
+
a.target === e && n();
|
|
283
275
|
};
|
|
284
276
|
e.addEventListener("transitionend", o);
|
|
285
|
-
const
|
|
277
|
+
const r = setTimeout(n, t + 50);
|
|
286
278
|
}
|
|
287
|
-
function
|
|
279
|
+
function Nt() {
|
|
288
280
|
return navigator.maxTouchPoints > 0 && window.matchMedia("(pointer: coarse)").matches;
|
|
289
281
|
}
|
|
290
|
-
function
|
|
282
|
+
function ft() {
|
|
291
283
|
return window.matchMedia("(prefers-reduced-motion: reduce)").matches;
|
|
292
284
|
}
|
|
293
|
-
function
|
|
285
|
+
function pt() {
|
|
294
286
|
const e = document;
|
|
295
287
|
return !!(e.fullscreenEnabled ?? e.webkitFullscreenEnabled);
|
|
296
288
|
}
|
|
297
|
-
const
|
|
298
|
-
function
|
|
289
|
+
const U = "glare-lock";
|
|
290
|
+
function V(e) {
|
|
299
291
|
const t = document.documentElement;
|
|
300
292
|
if (e) {
|
|
301
293
|
const s = window.innerWidth - t.clientWidth;
|
|
302
|
-
t.classList.add(
|
|
294
|
+
t.classList.add(U), s > 0 && (t.style.marginRight = `${s}px`);
|
|
303
295
|
} else
|
|
304
|
-
t.classList.remove(
|
|
296
|
+
t.classList.remove(U), t.style.marginRight = "";
|
|
305
297
|
}
|
|
306
|
-
const
|
|
307
|
-
function
|
|
308
|
-
const
|
|
309
|
-
|
|
310
|
-
const o =
|
|
298
|
+
const T = "glare-hidden";
|
|
299
|
+
function Zt(e, t, s, i) {
|
|
300
|
+
const n = zt(x(e.baseTpl, t));
|
|
301
|
+
n.dataset.glareId = String(s), e.baseClass && n.classList.add(e.baseClass), e.modal && n.classList.add("glare-is-modal");
|
|
302
|
+
const o = h(".glare-stage", n);
|
|
311
303
|
if (!o) throw new Error("baseTpl must contain a .glare-stage element");
|
|
312
|
-
const
|
|
313
|
-
container:
|
|
314
|
-
bg:
|
|
315
|
-
inner:
|
|
304
|
+
const r = {
|
|
305
|
+
container: n,
|
|
306
|
+
bg: h(".glare-bg", n),
|
|
307
|
+
inner: h(".glare-inner", n),
|
|
316
308
|
stage: o,
|
|
317
|
-
caption:
|
|
318
|
-
toolbar:
|
|
319
|
-
infobar:
|
|
320
|
-
navigation:
|
|
309
|
+
caption: h(".glare-caption", n),
|
|
310
|
+
toolbar: h(".glare-toolbar", n),
|
|
311
|
+
infobar: h(".glare-infobar", n),
|
|
312
|
+
navigation: h(".glare-navigation", n)
|
|
321
313
|
}, a = i < 2;
|
|
322
|
-
return
|
|
314
|
+
return r.navigation?.classList.toggle(T, !e.arrows || a), r.infobar?.classList.toggle(T, !e.infobar || a), r.toolbar && jt(r.toolbar, e, t, a), r;
|
|
323
315
|
}
|
|
324
|
-
function
|
|
316
|
+
function jt(e, t, s, i) {
|
|
325
317
|
if (t.toolbar === !1) {
|
|
326
|
-
e.classList.add(
|
|
318
|
+
e.classList.add(T);
|
|
327
319
|
return;
|
|
328
320
|
}
|
|
329
|
-
const
|
|
330
|
-
|
|
321
|
+
const n = m("div", "glare-toolbar-menu");
|
|
322
|
+
n.id = `glare-toolbar-menu-${e.closest(".glare-container")?.dataset.glareId ?? ""}`;
|
|
331
323
|
for (const o of t.buttons) {
|
|
332
|
-
if (
|
|
333
|
-
|
|
334
|
-
|
|
324
|
+
if (typeof o != "string") {
|
|
325
|
+
n.appendChild(Bt(o));
|
|
326
|
+
continue;
|
|
327
|
+
}
|
|
328
|
+
if (i && (o === "thumbs" || o === "slideshow") || o === "fullscreen" && !pt() || o === "more" || o === "close") continue;
|
|
329
|
+
const r = t.btnTpl[o];
|
|
330
|
+
r && n.insertAdjacentHTML("beforeend", x(r, s));
|
|
335
331
|
}
|
|
336
|
-
if (
|
|
337
|
-
e.appendChild(
|
|
332
|
+
if (n.childElementCount) {
|
|
333
|
+
e.appendChild(n);
|
|
338
334
|
const o = t.btnTpl.more;
|
|
339
|
-
o && (e.insertAdjacentHTML("beforeend",
|
|
335
|
+
o && (e.insertAdjacentHTML("beforeend", x(o, s)), e.querySelector("[data-glare-more]")?.setAttribute("aria-controls", n.id));
|
|
340
336
|
}
|
|
341
337
|
if (t.buttons.includes("close")) {
|
|
342
338
|
const o = t.btnTpl.close;
|
|
343
|
-
o && e.insertAdjacentHTML("beforeend",
|
|
339
|
+
o && e.insertAdjacentHTML("beforeend", x(o, s));
|
|
344
340
|
}
|
|
345
341
|
}
|
|
346
|
-
function
|
|
347
|
-
const i =
|
|
348
|
-
|
|
349
|
-
const r = g("div", "glare-content");
|
|
350
|
-
return i.appendChild(r), e.appendChild(i), t.$slide = i, t.$content = r, i;
|
|
342
|
+
function Bt({ name: e, label: t, icon: s }) {
|
|
343
|
+
const i = m("button", `glare-button glare-button--${e}`, s);
|
|
344
|
+
return i.type = "button", i.title = t, i.dataset.glareCustom = e, i.setAttribute("aria-label", t), i;
|
|
351
345
|
}
|
|
352
|
-
function
|
|
353
|
-
|
|
346
|
+
function qt(e, t) {
|
|
347
|
+
let s = 0;
|
|
348
|
+
for (let i = e; i instanceof HTMLElement && i !== t; i = i.offsetParent)
|
|
349
|
+
s += i.offsetTop;
|
|
350
|
+
return s;
|
|
354
351
|
}
|
|
355
|
-
function
|
|
356
|
-
|
|
357
|
-
|
|
352
|
+
function Wt({ container: e, caption: t }) {
|
|
353
|
+
let s = null;
|
|
354
|
+
const i = () => {
|
|
355
|
+
if (!t) return;
|
|
356
|
+
e.style.setProperty("--glare-caption-inset", `${t.offsetHeight}px`);
|
|
357
|
+
const o = s && h(".glare-content", s);
|
|
358
|
+
o && Object.assign(t.style, { top: `${qt(o, t.offsetParent) + o.offsetHeight}px`, bottom: "auto" });
|
|
359
|
+
}, n = new ResizeObserver(i);
|
|
360
|
+
return t && n.observe(t), i(), {
|
|
361
|
+
follow(o) {
|
|
362
|
+
if (s)
|
|
363
|
+
for (const r of [s, h(".glare-content", s)]) r && n.unobserve(r);
|
|
364
|
+
s = o;
|
|
365
|
+
for (const r of [o, h(".glare-content", o)]) r && n.observe(r);
|
|
366
|
+
i();
|
|
367
|
+
},
|
|
368
|
+
destroy: () => n.disconnect()
|
|
369
|
+
};
|
|
358
370
|
}
|
|
359
371
|
function Ut(e, t, s) {
|
|
360
|
-
|
|
372
|
+
const i = m("div", `glare-slide glare-slide--${t.type}`);
|
|
373
|
+
s.slideClass && i.classList.add(s.slideClass);
|
|
374
|
+
const n = m("div", "glare-content");
|
|
375
|
+
return i.appendChild(n), e.appendChild(i), t.$slide = i, t.$content = n, i;
|
|
376
|
+
}
|
|
377
|
+
function Vt(e, t, s) {
|
|
378
|
+
e.style.setProperty("--glare-direction", String(s)), e.classList.add(t ? "glare-slide--opening" : "glare-slide--in"), t && (e.style.transition = "none"), e.offsetWidth, e.classList.add("glare-slide--current"), t && (e.offsetWidth, e.style.transition = "");
|
|
379
|
+
}
|
|
380
|
+
function Xt(e, t, s, i) {
|
|
381
|
+
for (const n of I(".glare-slide", e))
|
|
382
|
+
n !== t && (n.classList.contains("glare-slide--out") || n.style.setProperty("--glare-direction", String(i)), n.classList.remove("glare-slide--current", "glare-slide--in", "glare-slide--opening"), n.classList.add("glare-slide--out"), setTimeout(() => n.remove(), s));
|
|
383
|
+
}
|
|
384
|
+
function Gt(e, t, s) {
|
|
385
|
+
e.insertAdjacentHTML("beforeend", x(t.btnTpl.smallBtn ?? "", s));
|
|
361
386
|
}
|
|
362
|
-
function
|
|
363
|
-
e.querySelector(":scope > .glare-spinner") || e.insertAdjacentHTML("beforeend",
|
|
387
|
+
function Yt(e, t, s) {
|
|
388
|
+
e.querySelector(":scope > .glare-spinner") || e.insertAdjacentHTML("beforeend", x(t.spinnerTpl, s));
|
|
364
389
|
}
|
|
365
|
-
function
|
|
390
|
+
function Kt(e) {
|
|
366
391
|
e.querySelector(":scope > .glare-spinner")?.remove();
|
|
367
392
|
}
|
|
368
|
-
function
|
|
369
|
-
e.hasError = !0, e.error = t, e.$content && (e.$content.className = "glare-content glare-content--error", e.$content.innerHTML =
|
|
393
|
+
function Qt(e, t, s, i) {
|
|
394
|
+
e.hasError = !0, e.error = t, e.$content && (e.$content.className = "glare-content glare-content--error", e.$content.innerHTML = x(s.errorTpl, i));
|
|
370
395
|
}
|
|
371
|
-
function
|
|
396
|
+
function mt(e, t) {
|
|
372
397
|
return typeof e.toolbar == "boolean" ? e.toolbar : t.type === "image";
|
|
373
398
|
}
|
|
374
|
-
function
|
|
375
|
-
return typeof e.smallBtn == "boolean" ? e.smallBtn : !
|
|
399
|
+
function Jt(e, t) {
|
|
400
|
+
return typeof e.smallBtn == "boolean" ? e.smallBtn : !mt(e, t);
|
|
376
401
|
}
|
|
377
|
-
function
|
|
378
|
-
const { container:
|
|
379
|
-
|
|
402
|
+
function te(e, t, s, i, n, o) {
|
|
403
|
+
const { container: r, toolbar: a, infobar: l } = e;
|
|
404
|
+
ae(r, i.type), a && ee(a, t, i), se(r, i), l && ie(l, i.index, n), e.caption && ne(e.caption, o), oe(r, t, i.index, n), re(r, s, i, n);
|
|
380
405
|
}
|
|
381
|
-
function
|
|
406
|
+
function ee(e, t, s) {
|
|
382
407
|
if (t.toolbar === !1) return;
|
|
383
408
|
e.classList.remove("glare-toolbar--expanded"), e.querySelector("[data-glare-more]")?.setAttribute("aria-expanded", "false");
|
|
384
|
-
const i =
|
|
385
|
-
if (e.classList.toggle(
|
|
386
|
-
const
|
|
387
|
-
|
|
409
|
+
const i = mt(t, s);
|
|
410
|
+
if (e.classList.toggle(T, !i), !i) return;
|
|
411
|
+
const n = s.type === "image";
|
|
412
|
+
h("[data-glare-zoom]", e)?.classList.toggle(T, !n);
|
|
388
413
|
}
|
|
389
|
-
function
|
|
414
|
+
function se(e, t) {
|
|
390
415
|
const s = e.querySelector("[data-glare-download]");
|
|
391
416
|
if (!s) return;
|
|
392
417
|
const i = t.downloadSrc || (t.type === "image" ? t.src : "");
|
|
393
|
-
s.classList.toggle(
|
|
418
|
+
s.classList.toggle(T, !i), i && (s.href = i);
|
|
394
419
|
}
|
|
395
|
-
function
|
|
396
|
-
const i =
|
|
420
|
+
function ie(e, t, s) {
|
|
421
|
+
const i = h(".glare-infobar-index", e);
|
|
397
422
|
i && (i.textContent = `${t + 1} / ${s}`);
|
|
398
423
|
}
|
|
399
|
-
function
|
|
400
|
-
e.innerHTML = t, e.classList.toggle(
|
|
424
|
+
function ne(e, t) {
|
|
425
|
+
e.innerHTML = t, e.classList.toggle(T, !t);
|
|
401
426
|
}
|
|
402
|
-
function
|
|
403
|
-
const
|
|
404
|
-
|
|
427
|
+
function oe(e, t, s, i) {
|
|
428
|
+
const n = !t.loop && s === 0, o = !t.loop && s === i - 1;
|
|
429
|
+
X(h("[data-glare-prev]", e), n), X(h("[data-glare-next]", e), o);
|
|
405
430
|
}
|
|
406
|
-
function
|
|
431
|
+
function X(e, t) {
|
|
407
432
|
e && (e.classList.toggle("glare-is-disabled", t), e.setAttribute("aria-disabled", String(t)));
|
|
408
433
|
}
|
|
409
|
-
function
|
|
410
|
-
const
|
|
434
|
+
function re(e, t, s, i) {
|
|
435
|
+
const n = Z(s.caption) || s.alt || t.LIGHTBOX, o = i > 1 ? `${n} (${s.index + 1} of ${i})` : n;
|
|
411
436
|
e.setAttribute("aria-label", o);
|
|
412
|
-
const
|
|
413
|
-
|
|
437
|
+
const r = h(".glare-live", e);
|
|
438
|
+
r && (r.textContent = o);
|
|
414
439
|
}
|
|
415
|
-
function
|
|
440
|
+
function ae(e, t) {
|
|
416
441
|
const s = e.dataset.type;
|
|
417
442
|
s && e.classList.remove(`glare-type-${s}`), e.dataset.type = t, e.classList.add(`glare-type-${t}`);
|
|
418
443
|
}
|
|
419
|
-
function
|
|
444
|
+
function le(e, t, s, i) {
|
|
420
445
|
e.classList.toggle("glare-can-zoom-out", s), e.classList.toggle("glare-can-zoom-in", !s && i);
|
|
421
|
-
const
|
|
422
|
-
!
|
|
446
|
+
const n = h("[data-glare-zoom]", e), o = s ? "out" : "in";
|
|
447
|
+
!n || n.dataset.state === o || (n.dataset.state = o, j(n, s, s ? t.ZOOM_OUT : t.ZOOM, s ? c.zoomOut : c.zoomIn));
|
|
423
448
|
}
|
|
424
|
-
function
|
|
449
|
+
function j(e, t, s, i) {
|
|
425
450
|
e.setAttribute("title", s), e.setAttribute("aria-label", s), e.innerHTML = i, e.classList.toggle("glare-is-active", t);
|
|
426
451
|
}
|
|
427
|
-
class
|
|
452
|
+
class ce {
|
|
428
453
|
constructor(t, s, i) {
|
|
429
454
|
this.glare = t, this.container = s, this.offs = [
|
|
430
|
-
|
|
431
|
-
|
|
455
|
+
f(document, "fullscreenchange", () => this.sync()),
|
|
456
|
+
f(document, "webkitfullscreenchange", () => this.sync())
|
|
432
457
|
], i.autoStart && this.request();
|
|
433
458
|
}
|
|
434
459
|
isFullscreen() {
|
|
@@ -453,43 +478,43 @@ class ie {
|
|
|
453
478
|
sync() {
|
|
454
479
|
const t = this.isFullscreen();
|
|
455
480
|
this.container.classList.toggle("glare-is-fullscreen", t);
|
|
456
|
-
const s =
|
|
481
|
+
const s = h("[data-glare-fullscreen]", this.container);
|
|
457
482
|
if (!s) return;
|
|
458
483
|
const { dict: i } = this.glare;
|
|
459
|
-
|
|
484
|
+
j(
|
|
460
485
|
s,
|
|
461
486
|
t,
|
|
462
487
|
t ? i.FULL_SCREEN_EXIT : i.FULL_SCREEN,
|
|
463
|
-
t ?
|
|
488
|
+
t ? c.fullscreenExit : c.fullscreen
|
|
464
489
|
);
|
|
465
490
|
}
|
|
466
491
|
}
|
|
467
|
-
function
|
|
492
|
+
function G(e) {
|
|
468
493
|
if (typeof e != "object" || e === null) return !1;
|
|
469
494
|
const t = Object.getPrototypeOf(e);
|
|
470
|
-
return t ===
|
|
495
|
+
return t === null || Object.getPrototypeOf(t) === null;
|
|
471
496
|
}
|
|
472
|
-
function
|
|
497
|
+
function F(...e) {
|
|
473
498
|
const t = {};
|
|
474
499
|
for (const s of e)
|
|
475
500
|
if (s)
|
|
476
|
-
for (const [i,
|
|
477
|
-
if (
|
|
501
|
+
for (const [i, n] of Object.entries(s)) {
|
|
502
|
+
if (n === void 0) continue;
|
|
478
503
|
const o = t[i];
|
|
479
|
-
t[i] =
|
|
504
|
+
t[i] = G(n) ? F(G(o) ? o : {}, n) : n;
|
|
480
505
|
}
|
|
481
506
|
return t;
|
|
482
507
|
}
|
|
483
508
|
function E(e, t, s) {
|
|
484
509
|
return Math.min(s, Math.max(t, e));
|
|
485
510
|
}
|
|
486
|
-
const
|
|
487
|
-
class
|
|
511
|
+
const S = 1, H = 5, he = 1.01;
|
|
512
|
+
class ue {
|
|
488
513
|
constructor(t) {
|
|
489
|
-
this.target = t, this.scale =
|
|
514
|
+
this.target = t, this.scale = S, this.x = 0, this.y = 0;
|
|
490
515
|
}
|
|
491
516
|
get isZoomed() {
|
|
492
|
-
return this.scale >
|
|
517
|
+
return this.scale > he;
|
|
493
518
|
}
|
|
494
519
|
get state() {
|
|
495
520
|
return { scale: this.scale, x: this.x, y: this.y };
|
|
@@ -501,43 +526,43 @@ class oe {
|
|
|
501
526
|
const s = t.getBoundingClientRect();
|
|
502
527
|
return { x: s.left + s.width / 2 - this.x, y: s.top + s.height / 2 - this.y };
|
|
503
528
|
}
|
|
504
|
-
apply(t, s, i,
|
|
529
|
+
apply(t, s, i, n = 0) {
|
|
505
530
|
const o = this.target.image();
|
|
506
531
|
if (!o) return;
|
|
507
|
-
this.scale = E(t,
|
|
508
|
-
const
|
|
509
|
-
this.x =
|
|
532
|
+
this.scale = E(t, S, H);
|
|
533
|
+
const r = this.isZoomed ? this.bounded(s, i) : { x: 0, y: 0 };
|
|
534
|
+
this.x = r.x, this.y = r.y, o.style.transitionDuration = `${n}ms`, o.style.transform = `translate3d(${this.x}px, ${this.y}px, 0) scale(${this.scale})`, this.target.onChange(this.isZoomed);
|
|
510
535
|
}
|
|
511
536
|
toFit(t = 300) {
|
|
512
|
-
this.apply(
|
|
537
|
+
this.apply(S, 0, 0, t);
|
|
513
538
|
}
|
|
514
539
|
/** Zooms to the image's natural size (at least 1.5x), keeping `focus` under the pointer. */
|
|
515
540
|
toActual(t, s = 300) {
|
|
516
|
-
const i = this.target.image(),
|
|
517
|
-
if (!i || !
|
|
518
|
-
const o = i.naturalWidth / Math.max(i.offsetWidth, 1),
|
|
519
|
-
this.apply(
|
|
541
|
+
const i = this.target.image(), n = this.center();
|
|
542
|
+
if (!i || !n) return;
|
|
543
|
+
const o = i.naturalWidth / Math.max(i.offsetWidth, 1), r = E(Math.max(o, 1.5), S, H), a = t?.x ?? n.x, l = t?.y ?? n.y;
|
|
544
|
+
this.apply(r, (n.x - a) * (r - 1), (n.y - l) * (r - 1), s);
|
|
520
545
|
}
|
|
521
546
|
reset() {
|
|
522
547
|
const t = this.target.image();
|
|
523
|
-
t && (t.style.transform = "", t.style.transitionDuration = ""), this.scale =
|
|
548
|
+
t && (t.style.transform = "", t.style.transitionDuration = ""), this.scale = S, this.x = 0, this.y = 0, this.target.onChange(!1);
|
|
524
549
|
}
|
|
525
550
|
/** Keeps the scaled image from being dragged fully out of the stage. */
|
|
526
551
|
bounded(t, s) {
|
|
527
|
-
const i = this.target.image(),
|
|
528
|
-
if (!i || !
|
|
529
|
-
const o = Math.max(0, (i.offsetWidth * this.scale -
|
|
530
|
-
return { x: E(t, -o, o), y: E(s, -
|
|
552
|
+
const i = this.target.image(), n = this.target.stage();
|
|
553
|
+
if (!i || !n) return { x: t, y: s };
|
|
554
|
+
const o = Math.max(0, (i.offsetWidth * this.scale - n.clientWidth) / 2), r = Math.max(0, (i.offsetHeight * this.scale - n.clientHeight) / 2);
|
|
555
|
+
return { x: E(t, -o, o), y: E(s, -r, r) };
|
|
531
556
|
}
|
|
532
557
|
}
|
|
533
|
-
const
|
|
534
|
-
class
|
|
558
|
+
const de = 6, Y = 120, fe = 100, pe = 0.5, me = 80, ge = 0.4, be = "a, button, input, textarea, select, video, .glare-thumbs", K = (e, t) => Math.hypot(e.x - t.x, e.y - t.y), Q = (e, t) => ({ x: (e.x + t.x) / 2, y: (e.y + t.y) / 2 }), O = (e) => ({ x: e.clientX, y: e.clientY });
|
|
559
|
+
class ye {
|
|
535
560
|
constructor(t, s) {
|
|
536
561
|
this.stage = t, this.host = s, this.pointers = /* @__PURE__ */ new Map(), this.mode = "idle", this.moved = !1, this.start = [], this.startTime = 0, this.startZoom = { scale: 1, x: 0, y: 0 }, this.startMid = { x: 0, y: 0 }, this.startDistance = 0, this.offs = [
|
|
537
|
-
|
|
538
|
-
|
|
539
|
-
|
|
540
|
-
|
|
562
|
+
f(t, "pointerdown", (i) => this.onDown(i)),
|
|
563
|
+
f(window, "pointermove", (i) => this.onMove(i), { passive: !1 }),
|
|
564
|
+
f(window, "pointerup", (i) => this.onUp(i)),
|
|
565
|
+
f(window, "pointercancel", (i) => this.onUp(i))
|
|
541
566
|
];
|
|
542
567
|
}
|
|
543
568
|
destroy() {
|
|
@@ -549,19 +574,19 @@ class de {
|
|
|
549
574
|
return this.moved = !1, t;
|
|
550
575
|
}
|
|
551
576
|
onDown(t) {
|
|
552
|
-
t.pointerType === "mouse" && t.button !== 0 || t.target.closest(
|
|
577
|
+
t.pointerType === "mouse" && t.button !== 0 || t.target.closest(be) || (this.pointers.set(t.pointerId, O(t)), this.pointers.size <= 2 && this.begin());
|
|
553
578
|
}
|
|
554
579
|
onMove(t) {
|
|
555
|
-
this.pointers.has(t.pointerId) && (this.pointers.set(t.pointerId,
|
|
580
|
+
this.pointers.has(t.pointerId) && (this.pointers.set(t.pointerId, O(t)), this.move(t));
|
|
556
581
|
}
|
|
557
582
|
onUp(t) {
|
|
558
|
-
this.pointers.has(t.pointerId) && (this.pointers.delete(t.pointerId), this.pointers.size === 0 ? this.end(
|
|
583
|
+
this.pointers.has(t.pointerId) && (this.pointers.delete(t.pointerId), this.pointers.size === 0 ? this.end(O(t)) : this.begin());
|
|
559
584
|
}
|
|
560
585
|
/** Anchors a new gesture on the currently pressed pointers. */
|
|
561
586
|
begin() {
|
|
562
587
|
this.mode === "swipe" && this.releaseStage();
|
|
563
588
|
const t = [...this.pointers.values()];
|
|
564
|
-
this.start = t, this.startTime = performance.now(), this.startZoom = this.host.zoom.state, this.mode = t.length >= 2 ? "pinch" : "idle", t.length >= 2 && (this.startDistance =
|
|
589
|
+
this.start = t, this.startTime = performance.now(), this.startZoom = this.host.zoom.state, this.mode = t.length >= 2 ? "pinch" : "idle", t.length >= 2 && (this.startDistance = K(t[0], t[1]), this.startMid = Q(t[0], t[1]));
|
|
565
590
|
}
|
|
566
591
|
move(t) {
|
|
567
592
|
const s = [...this.pointers.values()];
|
|
@@ -570,34 +595,34 @@ class de {
|
|
|
570
595
|
t.preventDefault(), this.moved = !0, this.pinch(s[0], s[1]);
|
|
571
596
|
return;
|
|
572
597
|
}
|
|
573
|
-
const i = s[0].x - this.start[0].x,
|
|
574
|
-
if (!(!this.moved && Math.hypot(i,
|
|
598
|
+
const i = s[0].x - this.start[0].x, n = s[0].y - this.start[0].y;
|
|
599
|
+
if (!(!this.moved && Math.hypot(i, n) < de)) {
|
|
575
600
|
if (this.moved = !0, this.mode === "idle" && (this.mode = this.host.zoom.isZoomed && this.host.canPan() ? "pan" : "swipe"), this.mode === "pan")
|
|
576
|
-
t.preventDefault(), this.host.zoom.apply(this.startZoom.scale, this.startZoom.x + i, this.startZoom.y +
|
|
601
|
+
t.preventDefault(), this.host.zoom.apply(this.startZoom.scale, this.startZoom.x + i, this.startZoom.y + n);
|
|
577
602
|
else if (this.mode === "swipe") {
|
|
578
603
|
const o = this.host.touch.vertical !== !1;
|
|
579
|
-
if (!o && Math.abs(
|
|
580
|
-
t.preventDefault(), this.dragStage(i, o ?
|
|
604
|
+
if (!o && Math.abs(n) > Math.abs(i)) return;
|
|
605
|
+
t.preventDefault(), this.dragStage(i, o ? n : 0);
|
|
581
606
|
}
|
|
582
607
|
}
|
|
583
608
|
}
|
|
584
609
|
/** Scales around the pinch midpoint so the content under the fingers stays put. */
|
|
585
610
|
pinch(t, s) {
|
|
586
|
-
const { zoom: i } = this.host,
|
|
587
|
-
this.startZoom.scale *
|
|
588
|
-
|
|
589
|
-
|
|
611
|
+
const { zoom: i } = this.host, n = Q(t, s), o = i.center() ?? n, r = E(
|
|
612
|
+
this.startZoom.scale * K(t, s) / (this.startDistance || 1),
|
|
613
|
+
S,
|
|
614
|
+
H
|
|
590
615
|
), a = (this.startMid.x - o.x - this.startZoom.x) / this.startZoom.scale, l = (this.startMid.y - o.y - this.startZoom.y) / this.startZoom.scale;
|
|
591
|
-
i.apply(
|
|
616
|
+
i.apply(r, n.x - o.x - r * a, n.y - o.y - r * l);
|
|
592
617
|
}
|
|
593
618
|
end(t) {
|
|
594
619
|
if (!this.start.length) return;
|
|
595
|
-
const s = Math.max(performance.now() - this.startTime, 1), i = t.x - this.start[0].x,
|
|
620
|
+
const s = Math.max(performance.now() - this.startTime, 1), i = t.x - this.start[0].x, n = t.y - this.start[0].y, o = { x: i / s, y: n / s };
|
|
596
621
|
if (this.mode === "swipe")
|
|
597
|
-
this.releaseStage(), this.finishSwipe(i,
|
|
622
|
+
this.releaseStage(), this.finishSwipe(i, n, o);
|
|
598
623
|
else if (this.mode === "pan" && this.host.touch.momentum !== !1) {
|
|
599
|
-
const { zoom:
|
|
600
|
-
|
|
624
|
+
const { zoom: r } = this.host;
|
|
625
|
+
r.apply(r.scale, r.x + o.x * Y, r.y + o.y * Y, 250);
|
|
601
626
|
}
|
|
602
627
|
this.mode = "idle", this.start = [], this.moved && setTimeout(() => this.moved = !1, 0);
|
|
603
628
|
}
|
|
@@ -615,35 +640,35 @@ class de {
|
|
|
615
640
|
/** A long or fast vertical swipe closes; a horizontal one navigates. */
|
|
616
641
|
finishSwipe(t, s, i) {
|
|
617
642
|
if (Math.abs(s) > Math.abs(t)) {
|
|
618
|
-
(Math.abs(s) >
|
|
643
|
+
(Math.abs(s) > fe || Math.abs(i.y) > pe) && this.host.close();
|
|
619
644
|
return;
|
|
620
645
|
}
|
|
621
|
-
(Math.abs(t) >
|
|
646
|
+
(Math.abs(t) > me || Math.abs(i.x) > ge) && (t < 0 ? this.host.next() : this.host.prev());
|
|
622
647
|
}
|
|
623
648
|
}
|
|
624
|
-
const
|
|
625
|
-
function
|
|
626
|
-
const t = e.replace(/^#/, "").match(
|
|
649
|
+
const xe = /^(.+)-(\d+)$/;
|
|
650
|
+
function P(e = window.location.hash) {
|
|
651
|
+
const t = e.replace(/^#/, "").match(xe);
|
|
627
652
|
return t ? { gallery: t[1], index: Math.max(0, parseInt(t[2], 10) - 1) } : null;
|
|
628
653
|
}
|
|
629
|
-
function
|
|
654
|
+
function J(e, t) {
|
|
630
655
|
return `${e}-${t + 1}`;
|
|
631
656
|
}
|
|
632
|
-
class
|
|
657
|
+
class ve {
|
|
633
658
|
constructor(t, s) {
|
|
634
|
-
this.glare = t, this.gallery = s, this.pushed = !1, this.off =
|
|
635
|
-
const i =
|
|
636
|
-
|
|
659
|
+
this.glare = t, this.gallery = s, this.pushed = !1, this.off = f(window, "hashchange", () => this.onHashChange());
|
|
660
|
+
const i = J(s, t.currIndex);
|
|
661
|
+
tt() !== i && (window.history.pushState(null, "", `#${i}`), this.pushed = !0);
|
|
637
662
|
}
|
|
638
663
|
update(t = this.glare.currIndex) {
|
|
639
|
-
const s =
|
|
640
|
-
|
|
664
|
+
const s = J(this.gallery, t);
|
|
665
|
+
tt() !== s && this.replace(`#${s}`);
|
|
641
666
|
}
|
|
642
667
|
destroy() {
|
|
643
|
-
this.off(),
|
|
668
|
+
this.off(), P()?.gallery === this.gallery && (this.pushed ? window.history.back() : this.replace(""));
|
|
644
669
|
}
|
|
645
670
|
onHashChange() {
|
|
646
|
-
const t =
|
|
671
|
+
const t = P();
|
|
647
672
|
!t || t.gallery !== this.gallery ? (this.pushed = !1, this.glare.close()) : t.index !== this.glare.currIndex && this.glare.jumpTo(t.index);
|
|
648
673
|
}
|
|
649
674
|
replace(t) {
|
|
@@ -651,58 +676,10 @@ class pe {
|
|
|
651
676
|
window.history.replaceState(null, "", `${s}${i}${t}`);
|
|
652
677
|
}
|
|
653
678
|
}
|
|
654
|
-
const
|
|
655
|
-
class
|
|
656
|
-
constructor(t, s, i) {
|
|
657
|
-
this.glare = t, this.container = s, this.opts = i, this.overlay = null, this.off = null;
|
|
658
|
-
}
|
|
659
|
-
get isOpen() {
|
|
660
|
-
return this.overlay !== null;
|
|
661
|
-
}
|
|
662
|
-
open() {
|
|
663
|
-
const { current: t, dict: s } = this.glare;
|
|
664
|
-
if (!t) return;
|
|
665
|
-
this.close();
|
|
666
|
-
const i = this.resolveUrl(t), r = encodeURIComponent(i), o = encodeURIComponent(t.thumb || t.src || i), n = encodeURIComponent(O(t.caption)), a = y(this.opts.tpl ?? Lt, {
|
|
667
|
-
...s,
|
|
668
|
-
url_direct: i,
|
|
669
|
-
url_facebook: `https://www.facebook.com/sharer/sharer.php?u=${r}`,
|
|
670
|
-
url_twitter: `https://twitter.com/intent/tweet?url=${r}&text=${n}`,
|
|
671
|
-
url_pinterest: `https://pinterest.com/pin/create/button/?url=${r}&media=${o}&description=${n}`
|
|
672
|
-
});
|
|
673
|
-
this.overlay = g("div", "glare-share-overlay", a), this.container.appendChild(this.overlay);
|
|
674
|
-
const l = c(".glare-share-input", this.overlay);
|
|
675
|
-
l?.select(), this.off = h(this.overlay, "click", (d) => {
|
|
676
|
-
const p = d.target;
|
|
677
|
-
p === this.overlay || p.closest("[data-glare-share-close]") ? this.close() : p.closest("[data-glare-share-copy]") && this.copy(i, l);
|
|
678
|
-
});
|
|
679
|
-
}
|
|
680
|
-
close() {
|
|
681
|
-
if (!this.overlay) return;
|
|
682
|
-
const t = this.overlay.contains(document.activeElement);
|
|
683
|
-
if (this.off?.(), this.off = null, this.overlay.remove(), this.overlay = null, !t) return;
|
|
684
|
-
const s = c("[data-glare-share]", this.container);
|
|
685
|
-
s ? s.focus() : this.glare.focus();
|
|
686
|
-
}
|
|
687
|
-
destroy() {
|
|
688
|
-
this.close();
|
|
689
|
-
}
|
|
690
|
-
async copy(t, s) {
|
|
691
|
-
try {
|
|
692
|
-
await navigator.clipboard.writeText(t);
|
|
693
|
-
} catch {
|
|
694
|
-
s?.select(), document.execCommand("copy");
|
|
695
|
-
}
|
|
696
|
-
s?.select();
|
|
697
|
-
}
|
|
698
|
-
resolveUrl(t) {
|
|
699
|
-
const { url: s } = this.opts;
|
|
700
|
-
return typeof s == "function" ? s(t) : s || (/^https?:\/\//i.test(t.src) ? t.src : window.location.href);
|
|
701
|
-
}
|
|
702
|
-
}
|
|
703
|
-
class ge {
|
|
679
|
+
const tt = () => window.location.hash.replace(/^#/, "");
|
|
680
|
+
class we {
|
|
704
681
|
constructor(t, s, i) {
|
|
705
|
-
this.glare = t, this.container = s, this.opts = i, this.timer = null, this.active = !1, this.bar =
|
|
682
|
+
this.glare = t, this.container = s, this.opts = i, this.timer = null, this.active = !1, this.bar = h(".glare-progress", s), this.button = h("[data-glare-slideshow]", s), i.autoStart && this.start();
|
|
706
683
|
}
|
|
707
684
|
isActive() {
|
|
708
685
|
return this.active;
|
|
@@ -723,13 +700,13 @@ class ge {
|
|
|
723
700
|
this.stop();
|
|
724
701
|
}
|
|
725
702
|
get speed() {
|
|
726
|
-
return this.opts.speed ??
|
|
703
|
+
return this.opts.speed ?? N.speed;
|
|
727
704
|
}
|
|
728
705
|
get atEnd() {
|
|
729
706
|
return !this.glare.opts.loop && this.glare.currIndex === this.glare.group.length - 1;
|
|
730
707
|
}
|
|
731
708
|
schedule() {
|
|
732
|
-
this.clearTimer(), this.setProgress(0),
|
|
709
|
+
this.clearTimer(), this.setProgress(0), ft() || (this.bar?.offsetWidth, this.setProgress(1)), this.timer = setTimeout(() => this.atEnd ? this.stop() : this.glare.next(), this.speed);
|
|
733
710
|
}
|
|
734
711
|
clearTimer() {
|
|
735
712
|
this.timer && clearTimeout(this.timer), this.timer = null;
|
|
@@ -740,17 +717,32 @@ class ge {
|
|
|
740
717
|
syncButton() {
|
|
741
718
|
if (!this.button) return;
|
|
742
719
|
const { dict: t } = this.glare;
|
|
743
|
-
|
|
720
|
+
j(
|
|
744
721
|
this.button,
|
|
745
722
|
this.active,
|
|
746
723
|
this.active ? t.PLAY_STOP : t.PLAY_START,
|
|
747
|
-
this.active ?
|
|
724
|
+
this.active ? c.pause : c.play
|
|
748
725
|
);
|
|
749
726
|
}
|
|
750
727
|
}
|
|
751
|
-
|
|
728
|
+
const Ee = {
|
|
729
|
+
image: c.thumbImage,
|
|
730
|
+
video: c.thumbVideo,
|
|
731
|
+
embed: c.thumbEmbed,
|
|
732
|
+
iframe: c.thumbIframe,
|
|
733
|
+
inline: c.thumbInline,
|
|
734
|
+
ajax: c.thumbAjax,
|
|
735
|
+
html: c.thumbHtml
|
|
736
|
+
};
|
|
737
|
+
function Te(e) {
|
|
738
|
+
return e.thumb || (e.type === "video" ? e.poster : "") || (e.type === "image" ? e.src : "");
|
|
739
|
+
}
|
|
740
|
+
function et(e, t) {
|
|
741
|
+
e.classList.add("glare-thumbs-item--placeholder"), e.innerHTML = Ee[t] ?? c.thumbSlide;
|
|
742
|
+
}
|
|
743
|
+
class Se {
|
|
752
744
|
constructor(t, s, i) {
|
|
753
|
-
this.glare = t, this.container = s, this.opts = i, this.isActive = !1, this.offs = [], this.axis = i.axis === "y" ? "y" : "x", this.list =
|
|
745
|
+
this.glare = t, this.container = s, this.opts = i, this.isActive = !1, this.offs = [], this.axis = i.axis === "y" ? "y" : "x", this.list = m("div", "glare-thumbs-list"), this.strip = m("div", `glare-thumbs glare-thumbs--${this.axis}`), this.strip.style.setProperty("--glare-thumbs-fit", i.fit ?? "cover"), this.strip.appendChild(this.list), this.build();
|
|
754
746
|
}
|
|
755
747
|
show() {
|
|
756
748
|
this.setActive(!0);
|
|
@@ -763,7 +755,7 @@ class ye {
|
|
|
763
755
|
}
|
|
764
756
|
/** Highlights the thumbnail for `index` and scrolls it into view. */
|
|
765
757
|
focus(t = this.glare.currIndex) {
|
|
766
|
-
for (const s of
|
|
758
|
+
for (const s of I(".glare-thumbs-item", this.list))
|
|
767
759
|
s.classList.toggle("glare-is-active", Number(s.dataset.index) === t);
|
|
768
760
|
this.list.querySelector(".glare-is-active")?.scrollIntoView({ block: "nearest", inline: "nearest", behavior: "smooth" });
|
|
769
761
|
}
|
|
@@ -772,36 +764,36 @@ class ye {
|
|
|
772
764
|
}
|
|
773
765
|
setActive(t) {
|
|
774
766
|
this.isActive = t, this.strip.classList.toggle("glare-thumbs--active", t), this.container.classList.toggle("glare-show-thumbs", t);
|
|
775
|
-
const s =
|
|
767
|
+
const s = h("[data-glare-thumbs]", this.container);
|
|
776
768
|
s?.classList.toggle("glare-is-active", t), s?.setAttribute("aria-expanded", String(t));
|
|
777
769
|
}
|
|
778
770
|
build() {
|
|
779
771
|
const { group: t, dict: s } = this.glare;
|
|
780
772
|
if (t.length < 2) return;
|
|
781
773
|
this.container.classList.add(`glare-thumbs-axis-${this.axis}`);
|
|
782
|
-
for (const
|
|
783
|
-
const o =
|
|
784
|
-
o.type = "button", o.dataset.index = String(
|
|
785
|
-
const
|
|
786
|
-
if (
|
|
787
|
-
const a =
|
|
788
|
-
a.src =
|
|
774
|
+
for (const n of t) {
|
|
775
|
+
const o = m("button", "glare-thumbs-item");
|
|
776
|
+
o.type = "button", o.dataset.index = String(n.index), o.setAttribute("aria-label", x(s.GO_TO_SLIDE, { index: String(n.index + 1) }));
|
|
777
|
+
const r = Te(n);
|
|
778
|
+
if (r) {
|
|
779
|
+
const a = m("img");
|
|
780
|
+
a.src = r, a.alt = n.alt || Z(n.caption), a.loading = "lazy", a.onerror = () => et(o, n.type), o.appendChild(a);
|
|
789
781
|
} else
|
|
790
|
-
o
|
|
791
|
-
this.list.appendChild(o), this.offs.push(
|
|
782
|
+
et(o, n.type);
|
|
783
|
+
this.list.appendChild(o), this.offs.push(f(o, "click", () => this.glare.jumpTo(n.index)));
|
|
792
784
|
}
|
|
793
|
-
(
|
|
785
|
+
(ut(this.opts.parentEl, this.container) ?? this.container).appendChild(this.strip), this.opts.autoStart && this.show(), this.focus();
|
|
794
786
|
}
|
|
795
787
|
}
|
|
796
|
-
const
|
|
797
|
-
class
|
|
788
|
+
const Me = 40, Le = 150, Ce = 16;
|
|
789
|
+
class $e {
|
|
798
790
|
constructor(t, s) {
|
|
799
|
-
this.distance = 0, this.fired = !1, this.settle = null, this.off =
|
|
791
|
+
this.distance = 0, this.fired = !1, this.settle = null, this.off = f(
|
|
800
792
|
t,
|
|
801
793
|
"wheel",
|
|
802
794
|
(i) => {
|
|
803
|
-
const
|
|
804
|
-
!
|
|
795
|
+
const n = s.current();
|
|
796
|
+
!n || i.deltaY === 0 || s.mode === "auto" && n.type !== "image" || n.type === "image" && s.isZoomed() || (i.preventDefault(), this.restartSettle(), !this.fired && (this.distance += Ie(i, t), !(Math.abs(this.distance) < Me) && (this.fired = !0, this.distance > 0 ? s.next() : s.prev())));
|
|
805
797
|
},
|
|
806
798
|
{ passive: !1 }
|
|
807
799
|
);
|
|
@@ -812,71 +804,93 @@ class we {
|
|
|
812
804
|
restartSettle() {
|
|
813
805
|
this.settle && clearTimeout(this.settle), this.settle = setTimeout(() => {
|
|
814
806
|
this.distance = 0, this.fired = !1;
|
|
815
|
-
},
|
|
807
|
+
}, Le);
|
|
816
808
|
}
|
|
817
809
|
}
|
|
818
|
-
function
|
|
819
|
-
return e.deltaMode === WheelEvent.DOM_DELTA_LINE ? e.deltaY *
|
|
820
|
-
}
|
|
821
|
-
function Se(e, t) {
|
|
822
|
-
const s = A(), i = s ? !1 : t.animationEffect, r = s ? !1 : t.transitionEffect;
|
|
823
|
-
e.dataset.animation = i || "none", e.style.setProperty("--glare-duration", `${i ? t.animationDuration : 0}ms`), e.style.setProperty("--glare-transition-duration", `${r ? t.transitionDuration : 0}ms`);
|
|
810
|
+
function Ie(e, t) {
|
|
811
|
+
return e.deltaMode === WheelEvent.DOM_DELTA_LINE ? e.deltaY * Ce : e.deltaMode === WheelEvent.DOM_DELTA_PAGE ? e.deltaY * t.clientHeight : e.deltaY;
|
|
824
812
|
}
|
|
825
|
-
function
|
|
826
|
-
const
|
|
827
|
-
|
|
813
|
+
function $(e) {
|
|
814
|
+
const t = ft(), s = t || !e.animationEffect ? 0 : Math.max(0, e.animationDuration), i = t || !e.transitionEffect ? 0 : Math.max(0, e.transitionDuration);
|
|
815
|
+
return {
|
|
816
|
+
animationEffect: s ? e.animationEffect : !1,
|
|
817
|
+
animationDuration: s,
|
|
818
|
+
transitionEffect: i ? e.transitionEffect : !1,
|
|
819
|
+
transitionDuration: i
|
|
820
|
+
};
|
|
828
821
|
}
|
|
829
|
-
function
|
|
830
|
-
const
|
|
831
|
-
|
|
832
|
-
|
|
822
|
+
function Oe(e, t) {
|
|
823
|
+
const s = $(t);
|
|
824
|
+
e.dataset.animation = s.animationEffect || "none", e.style.setProperty("--glare-duration", `${s.animationDuration}ms`), e.style.setProperty("--glare-transition-duration", `${s.transitionDuration}ms`);
|
|
825
|
+
}
|
|
826
|
+
function Ae(e, t) {
|
|
827
|
+
e.dataset.transition = $(t).transitionEffect || "none";
|
|
828
|
+
}
|
|
829
|
+
const De = /^(top|center|bottom)-(left|center|right)$/, st = { top: 0, left: 0, center: 0.5, bottom: 1, right: 1 };
|
|
830
|
+
function ke(e, t, s) {
|
|
831
|
+
const i = typeof s == "string" ? De.exec(s) : null;
|
|
832
|
+
if (i) {
|
|
833
|
+
const u = e.getBoundingClientRect(), g = u.left + u.width * st[i[2]], M = u.top + u.height * st[i[1]];
|
|
834
|
+
return new DOMRect(g, M, 0, 0);
|
|
835
|
+
}
|
|
836
|
+
const n = (u) => u?.getClientRects().length ? u : null, o = s !== "trigger" && n(ut(s)) || n(t.$trigger);
|
|
837
|
+
if (!o) return null;
|
|
838
|
+
const r = o.getBoundingClientRect(), l = (o.ownerDocument === e.ownerDocument ? null : o.ownerDocument.defaultView?.frameElement)?.getBoundingClientRect();
|
|
839
|
+
return l ? new DOMRect(r.x + l.x, r.y + l.y, r.width, r.height) : r;
|
|
840
|
+
}
|
|
841
|
+
function Re(e, t, s) {
|
|
842
|
+
const i = t.$image;
|
|
843
|
+
if (e.dataset.animation !== "zoom" || !i) return;
|
|
844
|
+
const n = ke(e, t, s.anchor);
|
|
845
|
+
if (!n) return;
|
|
846
|
+
const o = i.getBoundingClientRect(), r = Math.max(n.width / Math.max(o.width, 1), n.height / Math.max(o.height, 1)), a = n.left + n.width / 2 - (o.left + o.width / 2), l = n.top + n.height / 2 - (o.top + o.height / 2);
|
|
833
847
|
Object.assign(i.style, {
|
|
834
|
-
transform: `translate3d(${
|
|
848
|
+
transform: `translate3d(${a}px, ${l}px, 0) scale(${r})`,
|
|
835
849
|
opacity: s.zoomOpacity ? "0.2" : "1",
|
|
836
850
|
transitionDuration: "0ms"
|
|
837
|
-
}),
|
|
851
|
+
}), dt(() => {
|
|
838
852
|
Object.assign(i.style, { transform: "", opacity: "", transitionDuration: "" });
|
|
839
853
|
});
|
|
840
854
|
}
|
|
841
|
-
function
|
|
842
|
-
const t = R
|
|
843
|
-
return
|
|
855
|
+
function gt(e) {
|
|
856
|
+
const t = F(R, e);
|
|
857
|
+
return Nt() && t.mobile ? F(t, t.mobile) : t;
|
|
844
858
|
}
|
|
845
|
-
function
|
|
859
|
+
function A(e, t) {
|
|
846
860
|
return e ? e === !0 ? { ...t } : { ...t, ...e } : null;
|
|
847
861
|
}
|
|
848
|
-
const
|
|
849
|
-
function
|
|
850
|
-
return typeof e == "string" ?
|
|
862
|
+
const C = [], z = (e) => e.getAttribute("data-glare") ?? "";
|
|
863
|
+
function Fe(e) {
|
|
864
|
+
return typeof e == "string" ? I(e) : e instanceof HTMLElement ? [e] : Array.from(e);
|
|
851
865
|
}
|
|
852
|
-
function
|
|
853
|
-
const i =
|
|
854
|
-
const l =
|
|
855
|
-
s(
|
|
866
|
+
function He(e, t, s) {
|
|
867
|
+
const i = Fe(e), n = (a) => {
|
|
868
|
+
const l = z(a), u = l ? i.filter((g) => z(g) === l) : [a];
|
|
869
|
+
s(u, u.indexOf(a), l);
|
|
856
870
|
}, o = i.map(
|
|
857
|
-
(a) =>
|
|
858
|
-
l.preventDefault(),
|
|
871
|
+
(a) => f(a, "click", (l) => {
|
|
872
|
+
l.preventDefault(), n(a);
|
|
859
873
|
})
|
|
860
|
-
),
|
|
874
|
+
), r = {
|
|
861
875
|
elements: i,
|
|
862
876
|
destroy() {
|
|
863
877
|
o.forEach((l) => l());
|
|
864
|
-
const a =
|
|
865
|
-
a >= 0 &&
|
|
878
|
+
const a = C.indexOf(r);
|
|
879
|
+
a >= 0 && C.splice(a, 1);
|
|
866
880
|
}
|
|
867
881
|
};
|
|
868
|
-
return
|
|
882
|
+
return C.push(r), gt(t).hash && ze(i, n), r;
|
|
869
883
|
}
|
|
870
|
-
function
|
|
871
|
-
for (const e of [...
|
|
884
|
+
function Pe() {
|
|
885
|
+
for (const e of [...C]) e.destroy();
|
|
872
886
|
}
|
|
873
|
-
function
|
|
874
|
-
const s =
|
|
887
|
+
function ze(e, t) {
|
|
888
|
+
const s = P();
|
|
875
889
|
if (!s) return;
|
|
876
|
-
const
|
|
877
|
-
|
|
890
|
+
const n = e.filter((o) => z(o) === s.gallery)[s.index];
|
|
891
|
+
n && t(n);
|
|
878
892
|
}
|
|
879
|
-
class
|
|
893
|
+
class _e {
|
|
880
894
|
constructor(t, s) {
|
|
881
895
|
this.seconds = t, this.onIdle = s, this.timer = null;
|
|
882
896
|
}
|
|
@@ -887,91 +901,96 @@ class Ae {
|
|
|
887
901
|
this.timer && clearTimeout(this.timer), this.timer = null;
|
|
888
902
|
}
|
|
889
903
|
}
|
|
890
|
-
const
|
|
904
|
+
const v = [], b = {
|
|
891
905
|
add(e) {
|
|
892
|
-
|
|
906
|
+
v.push(e);
|
|
893
907
|
},
|
|
894
908
|
remove(e) {
|
|
895
|
-
const t =
|
|
896
|
-
t >= 0 &&
|
|
909
|
+
const t = v.indexOf(e);
|
|
910
|
+
t >= 0 && v.splice(t, 1);
|
|
897
911
|
},
|
|
898
912
|
top() {
|
|
899
|
-
return
|
|
913
|
+
return v[v.length - 1] ?? null;
|
|
900
914
|
},
|
|
901
915
|
get(e) {
|
|
902
|
-
return
|
|
916
|
+
return v.find((t) => t.id === e) ?? null;
|
|
903
917
|
},
|
|
904
918
|
all() {
|
|
905
|
-
return [...
|
|
919
|
+
return [...v];
|
|
906
920
|
},
|
|
907
921
|
get size() {
|
|
908
|
-
return
|
|
922
|
+
return v.length;
|
|
909
923
|
}
|
|
910
|
-
},
|
|
924
|
+
}, Ne = [
|
|
911
925
|
["[data-glare-close]", (e) => e.close()],
|
|
912
926
|
["[data-glare-next]", (e) => e.next()],
|
|
913
927
|
["[data-glare-prev]", (e) => e.prev()],
|
|
914
928
|
["[data-glare-zoom]", (e) => e.toggleZoom()],
|
|
915
929
|
["[data-glare-slideshow]", (e) => e.slideshow?.toggle()],
|
|
916
930
|
["[data-glare-thumbs]", (e) => e.thumbs?.toggle()],
|
|
917
|
-
["[data-glare-fullscreen]", (e) => e.fullscreen?.toggle()]
|
|
918
|
-
|
|
919
|
-
|
|
920
|
-
function He(e, t, s) {
|
|
931
|
+
["[data-glare-fullscreen]", (e) => e.fullscreen?.toggle()]
|
|
932
|
+
], Ze = ".glare-content", je = ".glare-slide, .glare-stage", Be = 'button, [href], input, select, textarea, [tabindex]:not([tabindex="-1"])', qe = /* @__PURE__ */ new Set(["INPUT", "TEXTAREA", "SELECT"]), We = 300;
|
|
933
|
+
function Ue(e, t, s) {
|
|
921
934
|
let i = null;
|
|
922
|
-
const
|
|
935
|
+
const n = () => {
|
|
923
936
|
i && clearTimeout(i), i = null;
|
|
924
937
|
}, o = [
|
|
925
|
-
|
|
938
|
+
f(t, "click", (r) => {
|
|
926
939
|
if (e.consumeGesture()) return;
|
|
927
|
-
const a =
|
|
940
|
+
const a = r.target, l = a.closest("[data-glare-more]");
|
|
928
941
|
if (l) {
|
|
929
|
-
const L = l.closest(".glare-toolbar"),
|
|
930
|
-
L?.classList.toggle("glare-toolbar--expanded",
|
|
942
|
+
const L = l.closest(".glare-toolbar"), B = !L?.classList.contains("glare-toolbar--expanded");
|
|
943
|
+
L?.classList.toggle("glare-toolbar--expanded", B), l.setAttribute("aria-expanded", String(B));
|
|
931
944
|
return;
|
|
932
945
|
}
|
|
933
|
-
|
|
934
|
-
const
|
|
935
|
-
if (
|
|
946
|
+
yt(t);
|
|
947
|
+
const u = a.closest("[data-glare-custom]");
|
|
948
|
+
if (u) return Ve(e, u.dataset.glareCustom, r);
|
|
949
|
+
const g = Ne.find(([L]) => a.closest(L));
|
|
950
|
+
if (g) return g[1](e);
|
|
936
951
|
if (a.closest(".glare-button")) return;
|
|
937
|
-
const
|
|
938
|
-
if (
|
|
939
|
-
if (!
|
|
940
|
-
return k(e,
|
|
941
|
-
|
|
952
|
+
const M = D(e, a, "click");
|
|
953
|
+
if (M) {
|
|
954
|
+
if (!bt(e, D(e, a, "dblclick"), r))
|
|
955
|
+
return k(e, M, r);
|
|
956
|
+
n(), i = setTimeout(() => k(e, M, r), We);
|
|
942
957
|
}
|
|
943
958
|
}),
|
|
944
|
-
|
|
945
|
-
|
|
946
|
-
const a =
|
|
947
|
-
a.closest(".glare-button") || k(e, D(e, a, "dblclick"),
|
|
959
|
+
f(t, "dblclick", (r) => {
|
|
960
|
+
n();
|
|
961
|
+
const a = r.target;
|
|
962
|
+
a.closest(".glare-button") || k(e, D(e, a, "dblclick"), r);
|
|
948
963
|
}),
|
|
949
|
-
|
|
950
|
-
|
|
951
|
-
|
|
952
|
-
|
|
953
|
-
|
|
964
|
+
f(document, "keydown", (r) => Xe(e, r)),
|
|
965
|
+
f(document, "keydown", s),
|
|
966
|
+
f(document, "click", s, { capture: !0 }),
|
|
967
|
+
f(document, "mousemove", s),
|
|
968
|
+
f(document, "touchstart", s, { passive: !0 })
|
|
954
969
|
];
|
|
955
|
-
return e.opts.trapFocus && o.push(
|
|
956
|
-
|
|
957
|
-
|
|
958
|
-
|
|
970
|
+
return e.opts.trapFocus && o.push(f(t, "keydown", (r) => Ge(t, r))), e.opts.protect && o.push(
|
|
971
|
+
f(t, "contextmenu", (r) => r.preventDefault()),
|
|
972
|
+
f(t, "dragstart", (r) => {
|
|
973
|
+
r.target.tagName === "IMG" && r.preventDefault();
|
|
959
974
|
})
|
|
960
975
|
), () => {
|
|
961
|
-
|
|
976
|
+
n(), o.forEach((r) => r());
|
|
962
977
|
};
|
|
963
978
|
}
|
|
979
|
+
function Ve(e, t, s) {
|
|
980
|
+
const i = e.opts.buttons.find((n) => typeof n != "string" && n.name === t);
|
|
981
|
+
i && e.current && i.click(e, e.current, s);
|
|
982
|
+
}
|
|
964
983
|
function D(e, t, s) {
|
|
965
984
|
const { opts: i } = e;
|
|
966
|
-
if (t.closest(
|
|
967
|
-
if (!(i.modal || !t.closest(
|
|
985
|
+
if (t.closest(Ze)) return s === "click" ? i.clickContent : i.dblclickContent;
|
|
986
|
+
if (!(i.modal || !t.closest(je)))
|
|
968
987
|
return s === "click" ? i.clickSlide : i.dblclickSlide;
|
|
969
988
|
}
|
|
970
|
-
function
|
|
989
|
+
function bt(e, t, s) {
|
|
971
990
|
return !t || !e.current ? !1 : typeof t == "function" ? t(e.current, s) : t;
|
|
972
991
|
}
|
|
973
992
|
function k(e, t, s) {
|
|
974
|
-
switch (
|
|
993
|
+
switch (bt(e, t, s)) {
|
|
975
994
|
case "close":
|
|
976
995
|
return e.close();
|
|
977
996
|
case "next":
|
|
@@ -986,17 +1005,15 @@ function k(e, t, s) {
|
|
|
986
1005
|
}
|
|
987
1006
|
}
|
|
988
1007
|
}
|
|
989
|
-
function
|
|
1008
|
+
function Xe(e, t) {
|
|
990
1009
|
if (b.top() !== e) return;
|
|
991
|
-
if (t.key === "Escape" &&
|
|
1010
|
+
if (t.key === "Escape" && yt(e.$refs?.container ?? null)) {
|
|
992
1011
|
t.preventDefault();
|
|
993
1012
|
return;
|
|
994
1013
|
}
|
|
995
|
-
if (t.key === "Escape" && e.share?.isOpen)
|
|
996
|
-
return t.preventDefault(), e.share.close();
|
|
997
1014
|
if (!e.opts.keyboard || e.opts.modal) return;
|
|
998
1015
|
const s = t.target;
|
|
999
|
-
if (!
|
|
1016
|
+
if (!qe.has(s.tagName) && !(t.key === " " && s.closest("button")))
|
|
1000
1017
|
switch (t.key) {
|
|
1001
1018
|
case "Escape":
|
|
1002
1019
|
return t.preventDefault(), e.close();
|
|
@@ -1013,117 +1030,124 @@ function Pe(e, t) {
|
|
|
1013
1030
|
return e.fullscreen?.toggle();
|
|
1014
1031
|
}
|
|
1015
1032
|
}
|
|
1016
|
-
function
|
|
1033
|
+
function yt(e) {
|
|
1017
1034
|
const t = e?.querySelector(".glare-toolbar--expanded");
|
|
1018
1035
|
return t ? (t.classList.remove("glare-toolbar--expanded"), t.querySelector("[data-glare-more]")?.setAttribute("aria-expanded", "false"), !0) : !1;
|
|
1019
1036
|
}
|
|
1020
|
-
function
|
|
1037
|
+
function Ge(e, t) {
|
|
1021
1038
|
if (t.key !== "Tab") return;
|
|
1022
|
-
const s =
|
|
1039
|
+
const s = I(Be, e).filter(
|
|
1023
1040
|
(o) => !o.hasAttribute("disabled") && o.offsetParent !== null && getComputedStyle(o).visibility !== "hidden"
|
|
1024
1041
|
);
|
|
1025
1042
|
if (!s.length) return;
|
|
1026
|
-
const i = s[0],
|
|
1027
|
-
t.shiftKey && document.activeElement === i ? (t.preventDefault(),
|
|
1043
|
+
const i = s[0], n = s[s.length - 1];
|
|
1044
|
+
t.shiftKey && document.activeElement === i ? (t.preventDefault(), n.focus()) : !t.shiftKey && document.activeElement === n && (t.preventDefault(), i.focus());
|
|
1028
1045
|
}
|
|
1029
|
-
const
|
|
1030
|
-
function
|
|
1046
|
+
const Ye = 1200, it = 16 / 9;
|
|
1047
|
+
function Ke(e, t, s) {
|
|
1031
1048
|
if (t && s) return t / s;
|
|
1032
|
-
const i = String(e.ratio ||
|
|
1033
|
-
return
|
|
1049
|
+
const i = String(e.ratio || it).replace(":", "/"), [n, o = "1"] = i.split("/").map((l) => l.trim()), r = parseFloat(n), a = parseFloat(o);
|
|
1050
|
+
return r > 0 && a > 0 ? r / a : it;
|
|
1034
1051
|
}
|
|
1035
|
-
function
|
|
1052
|
+
function nt(e, t, s) {
|
|
1036
1053
|
if (!e) return 0;
|
|
1037
1054
|
if (typeof e == "number") return e;
|
|
1038
|
-
const i = e.trim(),
|
|
1039
|
-
return
|
|
1055
|
+
const i = e.trim(), n = parseFloat(i);
|
|
1056
|
+
return n > 0 ? i.endsWith("%") ? t * n / 100 : i.endsWith("vw") || i.endsWith("vh") ? s * n / 100 : n : 0;
|
|
1040
1057
|
}
|
|
1041
|
-
function
|
|
1058
|
+
function ot(e, t) {
|
|
1042
1059
|
const s = t.parentElement;
|
|
1043
1060
|
if (!s) return;
|
|
1044
|
-
const i = getComputedStyle(s),
|
|
1045
|
-
if (!(
|
|
1046
|
-
const
|
|
1047
|
-
let a =
|
|
1048
|
-
const
|
|
1049
|
-
a *=
|
|
1050
|
-
}
|
|
1051
|
-
function
|
|
1052
|
-
if (
|
|
1061
|
+
const i = getComputedStyle(s), n = s.clientWidth - parseFloat(i.paddingLeft) - parseFloat(i.paddingRight), o = s.clientHeight - parseFloat(i.paddingTop) - parseFloat(i.paddingBottom);
|
|
1062
|
+
if (!(n > 0 && o > 0)) return;
|
|
1063
|
+
const r = e.width !== void 0 && e.height !== void 0;
|
|
1064
|
+
let a = r ? nt(e.width, n, innerWidth) : n, l = r ? nt(e.height, o, innerHeight) : o;
|
|
1065
|
+
const u = Ke(e, r ? a : void 0, r ? l : void 0), g = Math.min(1, n / a, o / l);
|
|
1066
|
+
a *= g, l *= g, l > a / u ? l = a / u : a > l * u && (a = l * u), t.style.width = `${a}px`, t.style.height = `${l}px`, t.style.aspectRatio = String(u);
|
|
1067
|
+
}
|
|
1068
|
+
function Qe(e, t) {
|
|
1069
|
+
if (ot(e, t), typeof ResizeObserver > "u" || !t.parentElement) return;
|
|
1053
1070
|
const s = new ResizeObserver(() => {
|
|
1054
1071
|
if (!t.isConnected) return s.disconnect();
|
|
1055
|
-
|
|
1072
|
+
ot(e, t);
|
|
1056
1073
|
});
|
|
1057
1074
|
s.observe(t.parentElement);
|
|
1058
1075
|
}
|
|
1059
|
-
const
|
|
1060
|
-
const o =
|
|
1061
|
-
o.alt = e.alt ||
|
|
1076
|
+
const Je = (e, t, s) => new Promise((i, n) => {
|
|
1077
|
+
const o = m("img", "glare-image");
|
|
1078
|
+
o.alt = e.alt || Z(e.caption), o.decoding = "async", o.draggable = !1, s.protect && (o.style.pointerEvents = "none"), o.onload = () => {
|
|
1062
1079
|
e.$image = o, e.contentWidth = o.naturalWidth, e.contentHeight = o.naturalHeight, t.appendChild(o), i();
|
|
1063
|
-
}, o.onerror = () =>
|
|
1064
|
-
}),
|
|
1065
|
-
const
|
|
1066
|
-
t.innerHTML =
|
|
1080
|
+
}, o.onerror = () => n(new Error(`Failed to load image: ${e.src}`)), o.src = e.src;
|
|
1081
|
+
}), ts = (e, t, s, i) => {
|
|
1082
|
+
const n = e.format || s.video.format || Ft(e.src);
|
|
1083
|
+
t.innerHTML = x(s.video.tpl, {
|
|
1067
1084
|
...i,
|
|
1068
1085
|
src: e.src,
|
|
1069
|
-
format:
|
|
1086
|
+
format: n,
|
|
1070
1087
|
poster: e.poster ?? ""
|
|
1071
1088
|
});
|
|
1072
1089
|
const o = t.querySelector("video");
|
|
1073
1090
|
o && (e.autoStart ?? s.video.autoStart) && o.play().catch(() => {
|
|
1074
1091
|
});
|
|
1075
|
-
},
|
|
1076
|
-
const
|
|
1077
|
-
if (!
|
|
1078
|
-
for (const [a, l] of Object.entries(
|
|
1079
|
-
if (Object.assign(
|
|
1080
|
-
|
|
1092
|
+
}, rt = (e, t, s) => new Promise((i) => {
|
|
1093
|
+
const n = s.iframe, o = m("div", "glare-iframe-wrap", n.tpl), r = o.querySelector("iframe");
|
|
1094
|
+
if (!r) throw new Error("Iframe template must contain an <iframe>");
|
|
1095
|
+
for (const [a, l] of Object.entries(n.attr)) r.setAttribute(a, l);
|
|
1096
|
+
if (Object.assign(r.style, n.css), t.appendChild(o), e.type === "embed" ? Qe(e, t) : (e.width && (o.style.width = W(e.width)), e.height && (o.style.height = W(e.height))), !n.preload) {
|
|
1097
|
+
r.src = e.src, i();
|
|
1081
1098
|
return;
|
|
1082
1099
|
}
|
|
1083
|
-
|
|
1084
|
-
}),
|
|
1085
|
-
const s = e.src ?
|
|
1100
|
+
r.onload = () => i(), r.src = e.src, setTimeout(i, Ye);
|
|
1101
|
+
}), es = (e, t) => {
|
|
1102
|
+
const s = e.src ? h(e.src) : null;
|
|
1086
1103
|
if (!s) throw new Error(`Inline target not found: ${e.src}`);
|
|
1087
1104
|
const i = s.cloneNode(!0);
|
|
1088
1105
|
i.removeAttribute("id"), i.hidden = !1, i.style.display = "", t.appendChild(i);
|
|
1089
|
-
},
|
|
1106
|
+
}, ss = async (e, t, s) => {
|
|
1090
1107
|
const i = await fetch(e.src, s.ajax.settings);
|
|
1091
1108
|
if (!i.ok) throw new Error(`Request failed: ${i.status} ${e.src}`);
|
|
1092
1109
|
t.innerHTML = await i.text();
|
|
1093
|
-
},
|
|
1094
|
-
e.content
|
|
1095
|
-
},
|
|
1096
|
-
async function
|
|
1097
|
-
t.innerHTML = "", t.className = `glare-content glare-content--${e.type}`, await
|
|
1110
|
+
}, is = (e, t) => {
|
|
1111
|
+
e.content && typeof e.content == "object" ? t.appendChild(e.content) : t.innerHTML = e.html ?? e.content ?? e.src;
|
|
1112
|
+
}, ns = { image: Je, video: ts, embed: rt, iframe: rt, inline: es, ajax: ss, html: is };
|
|
1113
|
+
async function os(e, t, s, i) {
|
|
1114
|
+
t.innerHTML = "", t.className = `glare-content glare-content--${e.type}`, await ns[e.type](e, t, s, i), e.isLoaded = !0;
|
|
1098
1115
|
}
|
|
1099
|
-
function
|
|
1116
|
+
function rs(e, t) {
|
|
1100
1117
|
for (const s of [e[t - 1], e[t + 1]])
|
|
1101
1118
|
s?.type === "image" && s.src && (new Image().src = s.src);
|
|
1102
1119
|
}
|
|
1103
|
-
let
|
|
1104
|
-
|
|
1105
|
-
|
|
1106
|
-
|
|
1120
|
+
let as = 0;
|
|
1121
|
+
function ls(e) {
|
|
1122
|
+
try {
|
|
1123
|
+
return e?.Glare;
|
|
1124
|
+
} catch {
|
|
1125
|
+
return;
|
|
1126
|
+
}
|
|
1127
|
+
}
|
|
1128
|
+
const y = class y {
|
|
1129
|
+
constructor(t, s = {}, i = 0, n = "") {
|
|
1130
|
+
this.id = ++as, this.current = null, this.currIndex = 0, this.prevIndex = 0, this.isActive = !1, this.isClosing = !1, this.isIdle = !1, this.$refs = null, this.hash = null, this.gestures = null, this.wheel = null, this.cleanups = [], this.captionTracker = null, this.previouslyFocused = null, this.direction = 1, this.opts = gt(s), this.dict = xt(this.opts), this.group = Pt(t, this.opts), this.galleryName = n, this.currIndex = this.clampIndex(i), this.zoom = new ue({
|
|
1107
1131
|
image: () => this.current?.$image ?? null,
|
|
1108
1132
|
stage: () => this.$refs?.stage ?? null,
|
|
1109
1133
|
onChange: (o) => this.syncZoomState(o)
|
|
1110
|
-
}), this.idle = new
|
|
1134
|
+
}), this.idle = new _e(this.opts.modal ? !1 : this.opts.idleTime, () => this.toggleControls(!0));
|
|
1111
1135
|
}
|
|
1112
1136
|
open(t = this.currIndex) {
|
|
1113
1137
|
if (this.isActive) return this.jumpTo(t);
|
|
1114
1138
|
if (!this.group.length) return;
|
|
1115
|
-
this.opts.closeExisting &&
|
|
1116
|
-
const s =
|
|
1117
|
-
this.$refs = s,
|
|
1118
|
-
this.isActive && (i.classList.add("glare-is-open"), this.showSlide(this.currIndex, !0), this.cleanups.push(
|
|
1139
|
+
this.opts.closeExisting && y.close(!0), this.currIndex = this.clampIndex(t), this.current = this.group[this.currIndex], this.previouslyFocused = document.activeElement instanceof HTMLElement ? document.activeElement : null, this.emit("onInit");
|
|
1140
|
+
const s = Zt(this.opts, this.dict, this.id, this.group.length), { container: i } = s;
|
|
1141
|
+
this.$refs = s, Oe(i, this.opts), this.syncChrome(), this.resolveParent().appendChild(i), this.captionTracker = Wt(s), this.cleanups.push(() => this.captionTracker?.destroy()), this.isActive = !0, b.add(this), this.opts.hideScrollbar && V(!0), this.emit("onActivate"), this.emitSlide("beforeShow", this.current), dt(() => {
|
|
1142
|
+
this.isActive && (i.classList.add("glare-is-open"), this.showSlide(this.currIndex, !0), this.cleanups.push(Ue(this, i, () => this.onActivity())), this.startModules(s), this.opts.autoFocus && this.focus(), this.idle.reset());
|
|
1119
1143
|
});
|
|
1120
1144
|
}
|
|
1121
1145
|
close() {
|
|
1122
1146
|
if (!this.isActive || this.isClosing || !this.current || !this.$refs || this.emitSlide("beforeClose", this.current) === !1) return;
|
|
1123
1147
|
this.isClosing = !0, this.slideshow?.stop(), this.idle.stop();
|
|
1124
|
-
const { container: t, bg: s } = this.$refs, i =
|
|
1148
|
+
const { container: t, bg: s } = this.$refs, i = $(this.opts).animationDuration;
|
|
1125
1149
|
if (i === 0) return this.teardown();
|
|
1126
|
-
t.classList.remove("glare-is-open"), t.classList.add("glare-is-closing"),
|
|
1150
|
+
t.classList.remove("glare-is-open"), t.classList.add("glare-is-closing"), _t(s ?? t, i, () => this.teardown());
|
|
1127
1151
|
}
|
|
1128
1152
|
next() {
|
|
1129
1153
|
this.jumpTo(this.currIndex + 1);
|
|
@@ -1134,7 +1158,7 @@ const w = class w {
|
|
|
1134
1158
|
jumpTo(t) {
|
|
1135
1159
|
if (!this.isActive || this.isClosing) return;
|
|
1136
1160
|
const s = this.group.length, i = this.opts.loop ? (t % s + s) % s : E(t, 0, s - 1);
|
|
1137
|
-
i !== this.currIndex && (this.prevIndex = this.currIndex, this.currIndex = i, this.zoom.reset(), this.current = this.group[i], this.syncChrome(), this.showSlide(i, !1), this.thumbs?.focus(i), this.hash?.update(i), this.slideshow?.onIndexChange(), this.emitSlide("onUpdate", this.current));
|
|
1161
|
+
i !== this.currIndex && (this.direction = t > this.currIndex ? 1 : -1, this.prevIndex = this.currIndex, this.currIndex = i, this.zoom.reset(), this.current = this.group[i], this.syncChrome(), this.showSlide(i, !1), this.thumbs?.focus(i), this.hash?.update(i), this.slideshow?.onIndexChange(), this.emitSlide("onUpdate", this.current));
|
|
1138
1162
|
}
|
|
1139
1163
|
toggleZoom(t) {
|
|
1140
1164
|
this.current?.type === "image" && (this.zoom.isZoomed ? this.zoom.toFit() : this.zoom.toActual(t));
|
|
@@ -1155,48 +1179,46 @@ const w = class w {
|
|
|
1155
1179
|
async showSlide(t, s) {
|
|
1156
1180
|
const i = this.group[t];
|
|
1157
1181
|
if (!this.$refs || !i) return;
|
|
1158
|
-
const { container:
|
|
1159
|
-
|
|
1182
|
+
const { container: n, stage: o } = this.$refs, r = Ut(o, i, this.opts);
|
|
1183
|
+
Jt(this.opts, i) && Gt(r, this.opts, this.dict), Yt(o, this.opts, this.dict), this.emitSlide("beforeLoad", i), this.opts.image.preload && rs(this.group, t);
|
|
1160
1184
|
let a = !1;
|
|
1161
1185
|
try {
|
|
1162
|
-
await
|
|
1186
|
+
await os(i, i.$content, this.opts, this.dict);
|
|
1163
1187
|
} catch (l) {
|
|
1164
|
-
a = !0,
|
|
1188
|
+
a = !0, Qt(i, l, this.opts, this.dict), this.emitSlide("onError", i), this.opts.onError || console.warn("[glare]", l);
|
|
1165
1189
|
}
|
|
1166
|
-
if (!this.isActive || this.currIndex !== t) return
|
|
1167
|
-
a || this.emitSlide("afterLoad", i),
|
|
1190
|
+
if (!this.isActive || this.currIndex !== t) return r.remove();
|
|
1191
|
+
a || this.emitSlide("afterLoad", i), Kt(o), s || Ae(n, this.opts), Vt(r, s, this.direction), this.captionTracker?.follow(r), Xt(o, r, $(this.opts).transitionDuration, this.direction), this.syncZoomState(this.zoom.isZoomed), !a && (s && Re(n, i, this.opts), this.emitSlide("afterShow", i));
|
|
1168
1192
|
}
|
|
1169
1193
|
syncChrome() {
|
|
1170
|
-
!this.$refs || !this.current || (
|
|
1194
|
+
!this.$refs || !this.current || (te(this.$refs, this.opts, this.dict, this.current, this.group.length, this.captionFor(this.current)), this.syncZoomState(this.zoom.isZoomed));
|
|
1171
1195
|
}
|
|
1172
1196
|
captionFor(t) {
|
|
1173
1197
|
const { caption: s } = this.opts;
|
|
1174
1198
|
return typeof s == "function" ? s(this, t) : s ?? t.caption;
|
|
1175
1199
|
}
|
|
1176
1200
|
syncZoomState(t) {
|
|
1177
|
-
this.$refs &&
|
|
1201
|
+
this.$refs && le(this.$refs.container, this.dict, t, !!this.current?.$image);
|
|
1178
1202
|
}
|
|
1179
1203
|
resolveParent() {
|
|
1180
1204
|
const { parentEl: t } = this.opts;
|
|
1181
1205
|
return (typeof t == "string" ? document.querySelector(t) : t) ?? document.body;
|
|
1182
1206
|
}
|
|
1183
1207
|
startModules({ container: t, stage: s, bg: i }) {
|
|
1184
|
-
const
|
|
1185
|
-
o && (this.thumbs = new
|
|
1186
|
-
const
|
|
1187
|
-
|
|
1188
|
-
const a =
|
|
1189
|
-
a &&
|
|
1190
|
-
|
|
1191
|
-
l && (this.share = new me(this, t, l)), r.hash && this.galleryName && (this.hash = new pe(this, this.galleryName)), r.wheel && (this.wheel = new we(s, {
|
|
1192
|
-
mode: r.wheel,
|
|
1208
|
+
const n = this.opts, o = A(n.thumbs, lt);
|
|
1209
|
+
o && (this.thumbs = new Se(this, t, o));
|
|
1210
|
+
const r = A(n.slideshow, N);
|
|
1211
|
+
r && (this.slideshow = new we(this, t, r));
|
|
1212
|
+
const a = A(n.fullscreen, ct);
|
|
1213
|
+
a && pt() && (this.fullscreen = new ce(this, t, a)), n.hash && this.galleryName && (this.hash = new ve(this, this.galleryName)), n.wheel && (this.wheel = new $e(s, {
|
|
1214
|
+
mode: n.wheel,
|
|
1193
1215
|
current: () => this.current,
|
|
1194
1216
|
isZoomed: () => this.zoom.isZoomed,
|
|
1195
1217
|
next: () => this.next(),
|
|
1196
1218
|
prev: () => this.prev()
|
|
1197
|
-
})),
|
|
1219
|
+
})), n.touch && (this.gestures = new ye(s, {
|
|
1198
1220
|
zoom: this.zoom,
|
|
1199
|
-
touch:
|
|
1221
|
+
touch: n.touch,
|
|
1200
1222
|
bg: i,
|
|
1201
1223
|
canPan: () => this.current?.type === "image",
|
|
1202
1224
|
close: () => this.close(),
|
|
@@ -1212,13 +1234,12 @@ const w = class w {
|
|
|
1212
1234
|
this.gestures,
|
|
1213
1235
|
this.wheel,
|
|
1214
1236
|
this.hash,
|
|
1215
|
-
this.share,
|
|
1216
1237
|
this.thumbs,
|
|
1217
1238
|
this.slideshow,
|
|
1218
1239
|
this.fullscreen
|
|
1219
1240
|
])
|
|
1220
1241
|
t?.destroy();
|
|
1221
|
-
this.gestures = this.wheel = this.hash = null, this.
|
|
1242
|
+
this.gestures = this.wheel = this.hash = null, this.thumbs = this.slideshow = this.fullscreen = void 0, this.cleanups.forEach((t) => t()), this.cleanups = [], this.$refs?.container.remove(), this.$refs = null, b.remove(this), this.opts.hideScrollbar && b.size === 0 && V(!1), this.opts.backFocus && (this.current?.$trigger ?? this.previouslyFocused)?.focus({ preventScroll: !0 }), this.isActive = !1, this.isClosing = !1, this.current && this.emitSlide("afterClose", this.current);
|
|
1222
1243
|
}
|
|
1223
1244
|
emit(t) {
|
|
1224
1245
|
return this.opts[t]?.(this);
|
|
@@ -1230,14 +1251,18 @@ const w = class w {
|
|
|
1230
1251
|
return E(t, 0, Math.max(0, this.group.length - 1));
|
|
1231
1252
|
}
|
|
1232
1253
|
static open(t, s = {}, i = 0) {
|
|
1233
|
-
const
|
|
1234
|
-
return
|
|
1254
|
+
const n = y.create(t, s, i);
|
|
1255
|
+
return n.open(), n;
|
|
1235
1256
|
}
|
|
1236
1257
|
static bind(t, s = {}) {
|
|
1237
|
-
return
|
|
1238
|
-
|
|
1258
|
+
return He(t, s, (i, n, o) => {
|
|
1259
|
+
y.create(i, s, n, o).open();
|
|
1239
1260
|
});
|
|
1240
1261
|
}
|
|
1262
|
+
/** Builds the instance here, or in the `delegate` window when that window has Glare loaded. */
|
|
1263
|
+
static create(t, { delegate: s = R.delegate, ...i }, n, o = "") {
|
|
1264
|
+
return new (ls(s) ?? y)(t, i, n, o);
|
|
1265
|
+
}
|
|
1241
1266
|
static close(t = !1) {
|
|
1242
1267
|
t ? b.all().reverse().forEach((s) => s.close()) : b.top()?.close();
|
|
1243
1268
|
}
|
|
@@ -1249,20 +1274,20 @@ const w = class w {
|
|
|
1249
1274
|
}
|
|
1250
1275
|
/** Closes every instance and removes all `bind()` handlers. */
|
|
1251
1276
|
static destroy() {
|
|
1252
|
-
|
|
1277
|
+
y.close(!0), Pe();
|
|
1253
1278
|
}
|
|
1254
1279
|
/** Binds every `[data-glare]` element once the DOM is ready. */
|
|
1255
1280
|
static autoBind(t = {}) {
|
|
1256
|
-
const s = () =>
|
|
1281
|
+
const s = () => y.bind("[data-glare]", t);
|
|
1257
1282
|
document.readyState === "loading" ? document.addEventListener("DOMContentLoaded", s, { once: !0 }) : s();
|
|
1258
1283
|
}
|
|
1259
1284
|
};
|
|
1260
|
-
|
|
1261
|
-
let
|
|
1262
|
-
const
|
|
1285
|
+
y.defaults = R;
|
|
1286
|
+
let _ = y;
|
|
1287
|
+
const cs = _.autoBind;
|
|
1263
1288
|
export {
|
|
1264
|
-
|
|
1265
|
-
|
|
1266
|
-
|
|
1289
|
+
_ as Glare,
|
|
1290
|
+
cs as autoBind,
|
|
1291
|
+
_ as default
|
|
1267
1292
|
};
|
|
1268
1293
|
//# sourceMappingURL=glare.esm.js.map
|