返回 reveal.js
reveal.mjs
根目录 / dist / reveal.mjs
1 //#region js/utils/util.ts
2 var e = (e, t) => {
3 for (let n in t) e[n] = t[n];
4 return e;
5 }, t = (e, t) => Array.from(e.querySelectorAll(t)), n = (e, t, n) => {
6 n ? e.classList.add(t) : e.classList.remove(t);
7 }, r = (e) => {
8 if (typeof e == "string") {
9 if (e === "null") return null;
10 if (e === "true") return !0;
11 if (e === "false") return !1;
12 if (e.match(/^-?[\d\.]+$/)) return parseFloat(e);
13 }
14 return e;
15 }, i = (e, t) => {
16 e.style.transform = t;
17 }, a = (e, t) => {
18 let n = e.matches || e.matchesSelector || e.msMatchesSelector;
19 return !!(n && n.call(e, t));
20 }, o = (e, t) => {
21 if (e && typeof e.closest == "function") return e.closest(t);
22 for (; e;) {
23 if (a(e, t)) return e;
24 e = e.parentElement;
25 }
26 return null;
27 }, s = (e) => {
28 e = e || document.documentElement;
29 let t = e.requestFullscreen || e.webkitRequestFullscreen || e.webkitRequestFullScreen || e.mozRequestFullScreen || e.msRequestFullscreen;
30 t && t.apply(e);
31 }, c = (e, t, n, r = "") => {
32 let i = e.querySelectorAll("." + n);
33 for (let t = 0; t < i.length; t++) {
34 let n = i[t];
35 if (n.parentNode === e) return n;
36 }
37 let a = document.createElement(t);
38 return a.className = n, a.innerHTML = r, e.appendChild(a), a;
39 }, l = (e) => {
40 let t = document.createElement("style");
41 return e && e.length > 0 && t.appendChild(document.createTextNode(e)), document.head.appendChild(t), t;
42 }, u = () => {
43 let e = {};
44 location.search.replace(/[A-Z0-9]+?=([\w\.%-]*)/gi, (t) => {
45 let n = t.split("=").shift(), r = t.split("=").pop();
46 return n && r !== void 0 && (e[n] = r), t;
47 });
48 for (let t in e) {
49 let n = e[t];
50 e[t] = r(unescape(n));
51 }
52 return e.dependencies !== void 0 && delete e.dependencies, e;
53 }, d = (e, t = 0) => {
54 if (e) {
55 var n;
56 let r, i = e.style.height;
57 return e.style.height = "0px", e.parentElement && (e.parentElement.style.height = "auto"), r = t - (((n = e.parentElement) == null ? void 0 : n.offsetHeight) || 0), e.style.height = i + "px", e.parentElement && e.parentElement.style.removeProperty("height"), r;
58 }
59 return t;
60 }, f = {
61 mp4: "video/mp4",
62 m4a: "video/mp4",
63 ogv: "video/ogg",
64 mpeg: "video/mpeg",
65 webm: "video/webm"
66 }, p = (e = "") => {
67 let t = e.split(".").pop();
68 return t ? f[t] : void 0;
69 }, m = (e = "") => encodeURI(e).replace(/%5B/g, "[").replace(/%5D/g, "]").replace(/[!'()*]/g, (e) => `%${e.charCodeAt(0).toString(16).toUpperCase()}`), h = navigator.userAgent, g = /(iphone|ipod|ipad|android)/gi.test(h) || navigator.platform === "MacIntel" && navigator.maxTouchPoints > 1;
70 /chrome/i.test(h) && /edge/i.test(h);
71 var _ = /android/gi.test(h), v = function(e) {
72 if (e) {
73 var t = function(e) {
74 return [].slice.call(e);
75 }, n = 0, r = 1, i = 2, a = 3, o = [], s = null, c = "requestAnimationFrame" in e ? function() {
76 var t = arguments.length > 0 && arguments[0] !== void 0 ? arguments[0] : { sync: !1 };
77 e.cancelAnimationFrame(s);
78 var n = function() {
79 return u(o.filter((function(e) {
80 return e.dirty && e.active;
81 })));
82 };
83 if (t.sync) return n();
84 s = e.requestAnimationFrame(n);
85 } : function() {}, l = function(e) {
86 return function(t) {
87 o.forEach((function(t) {
88 return t.dirty = e;
89 })), c(t);
90 };
91 }, u = function(e) {
92 e.filter((function(e) {
93 return !e.styleComputed;
94 })).forEach((function(e) {
95 e.styleComputed = m(e);
96 })), e.filter(h).forEach(g);
97 var t = e.filter(p);
98 t.forEach(f), t.forEach((function(e) {
99 g(e), d(e);
100 })), t.forEach(_);
101 }, d = function(e) {
102 return e.dirty = n;
103 }, f = function(e) {
104 e.availableWidth = e.element.parentNode.clientWidth, e.currentWidth = e.element.scrollWidth, e.previousFontSize = e.currentFontSize, e.currentFontSize = Math.min(Math.max(e.minSize, e.availableWidth / e.currentWidth * e.previousFontSize), e.maxSize), e.whiteSpace = e.multiLine && e.currentFontSize === e.minSize ? "normal" : "nowrap";
105 }, p = function(e) {
106 return e.dirty !== i || e.dirty === i && e.element.parentNode.clientWidth !== e.availableWidth;
107 }, m = function(t) {
108 var n = e.getComputedStyle(t.element, null);
109 return t.currentFontSize = parseFloat(n.getPropertyValue("font-size")), t.display = n.getPropertyValue("display"), t.whiteSpace = n.getPropertyValue("white-space"), !0;
110 }, h = function(e) {
111 var t = !1;
112 return !e.preStyleTestCompleted && (/inline-/.test(e.display) || (t = !0, e.display = "inline-block"), e.whiteSpace !== "nowrap" && (t = !0, e.whiteSpace = "nowrap"), e.preStyleTestCompleted = !0, t);
113 }, g = function(e) {
114 e.element.style.whiteSpace = e.whiteSpace, e.element.style.display = e.display, e.element.style.fontSize = e.currentFontSize + "px";
115 }, _ = function(e) {
116 e.element.dispatchEvent(new CustomEvent("fit", { detail: {
117 oldValue: e.previousFontSize,
118 newValue: e.currentFontSize,
119 scaleFactor: e.currentFontSize / e.previousFontSize
120 } }));
121 }, v = function(e, t) {
122 return function(n) {
123 e.dirty = t, e.active && c(n);
124 };
125 }, y = function(e) {
126 return function() {
127 o = o.filter((function(t) {
128 return t.element !== e.element;
129 })), e.observeMutations && e.observer.disconnect(), e.element.style.whiteSpace = e.originalStyle.whiteSpace, e.element.style.display = e.originalStyle.display, e.element.style.fontSize = e.originalStyle.fontSize;
130 };
131 }, b = function(e) {
132 return function() {
133 e.active || (e.active = !0, c());
134 };
135 }, x = function(e) {
136 return function() {
137 return e.active = !1;
138 };
139 }, S = function(e) {
140 e.observeMutations && (e.observer = new MutationObserver(v(e, r)), e.observer.observe(e.element, e.observeMutations));
141 }, ee = {
142 minSize: 16,
143 maxSize: 512,
144 multiLine: !0,
145 observeMutations: "MutationObserver" in e && {
146 subtree: !0,
147 childList: !0,
148 characterData: !0
149 }
150 }, C = null, w = function() {
151 e.clearTimeout(C), C = e.setTimeout(l(i), E.observeWindowDelay);
152 }, te = ["resize", "orientationchange"];
153 return Object.defineProperty(E, "observeWindow", { set: function(t) {
154 var n = `${t ? "add" : "remove"}EventListener`;
155 te.forEach((function(t) {
156 e[n](t, w);
157 }));
158 } }), E.observeWindow = !0, E.observeWindowDelay = 100, E.fitAll = l(a), E;
159 }
160 function T(e, t) {
161 var n = Object.assign({}, ee, t), r = e.map((function(e) {
162 var t = Object.assign({}, n, {
163 element: e,
164 active: !0
165 });
166 return function(e) {
167 e.originalStyle = {
168 whiteSpace: e.element.style.whiteSpace,
169 display: e.element.style.display,
170 fontSize: e.element.style.fontSize
171 }, S(e), e.newbie = !0, e.dirty = !0, o.push(e);
172 }(t), {
173 element: e,
174 fit: v(t, a),
175 unfreeze: b(t),
176 freeze: x(t),
177 unsubscribe: y(t)
178 };
179 }));
180 return c(), r;
181 }
182 function E(e) {
183 var n = arguments.length > 1 && arguments[1] !== void 0 ? arguments[1] : {};
184 return typeof e == "string" ? T(t(document.querySelectorAll(e)), n) : T([e], n)[0];
185 }
186 }(typeof window > "u" ? null : window);
187 //#endregion
188 //#region \0@oxc-project+runtime@0.124.0/helpers/typeof.js
189 function y(e) {
190 "@babel/helpers - typeof";
191 return y = typeof Symbol == "function" && typeof Symbol.iterator == "symbol" ? function(e) {
192 return typeof e;
193 } : function(e) {
194 return e && typeof Symbol == "function" && e.constructor === Symbol && e !== Symbol.prototype ? "symbol" : typeof e;
195 }, y(e);
196 }
197 //#endregion
198 //#region \0@oxc-project+runtime@0.124.0/helpers/toPrimitive.js
199 function b(e, t) {
200 if (y(e) != "object" || !e) return e;
201 var n = e[Symbol.toPrimitive];
202 if (n !== void 0) {
203 var r = n.call(e, t || "default");
204 if (y(r) != "object") return r;
205 throw TypeError("@@toPrimitive must return a primitive value.");
206 }
207 return (t === "string" ? String : Number)(e);
208 }
209 //#endregion
210 //#region \0@oxc-project+runtime@0.124.0/helpers/toPropertyKey.js
211 function x(e) {
212 var t = b(e, "string");
213 return y(t) == "symbol" ? t : t + "";
214 }
215 //#endregion
216 //#region \0@oxc-project+runtime@0.124.0/helpers/defineProperty.js
217 function S(e, t, n) {
218 return (t = x(t)) in e ? Object.defineProperty(e, t, {
219 value: n,
220 enumerable: !0,
221 configurable: !0,
222 writable: !0
223 }) : e[t] = n, e;
224 }
225 //#endregion
226 //#region js/controllers/slidecontent.js
227 var ee = class {
228 constructor(e) {
229 S(this, "allowedToPlayAudio", null), this.Reveal = e, this.startEmbeddedMedia = this.startEmbeddedMedia.bind(this), this.startEmbeddedIframe = this.startEmbeddedIframe.bind(this), this.preventIframeAutoFocus = this.preventIframeAutoFocus.bind(this), this.ensureMobileMediaPlaying = this.ensureMobileMediaPlaying.bind(this), this.failedAudioPlaybackTargets = /* @__PURE__ */ new Set(), this.failedVideoPlaybackTargets = /* @__PURE__ */ new Set(), this.failedMutedVideoPlaybackTargets = /* @__PURE__ */ new Set(), this.renderMediaPlayButton();
230 }
231 renderMediaPlayButton() {
232 this.mediaPlayButton = document.createElement("button"), this.mediaPlayButton.className = "r-overlay-button r-media-play-button", this.mediaPlayButton.addEventListener("click", () => {
233 this.resetTemporarilyMutedMedia(), new Set([
234 ...this.failedAudioPlaybackTargets,
235 ...this.failedVideoPlaybackTargets,
236 ...this.failedMutedVideoPlaybackTargets
237 ]).forEach((e) => {
238 this.startEmbeddedMedia({ target: e });
239 }), this.clearMediaPlaybackErrors();
240 });
241 }
242 shouldPreload(e) {
243 if (this.Reveal.isScrollView()) return !0;
244 let t = this.Reveal.getConfig().preloadIframes;
245 return typeof t != "boolean" && (t = e.hasAttribute("data-preload")), t;
246 }
247 load(e, n = {}) {
248 let r = this.Reveal.getConfig().display;
249 if (r.includes("!important")) {
250 let t = r.replace(/\s*!important\s*$/, "").trim();
251 e.style.setProperty("display", t, "important");
252 } else e.style.display = r;
253 t(e, "img[data-src], video[data-src], audio[data-src], iframe[data-src]").forEach((e) => {
254 let t = e.tagName === "IFRAME";
255 (!t || this.shouldPreload(e)) && (e.setAttribute("src", e.getAttribute("data-src")), e.setAttribute("data-lazy-loaded", ""), e.removeAttribute("data-src"), t && e.addEventListener("load", this.preventIframeAutoFocus));
256 }), t(e, "video, audio").forEach((e) => {
257 let n = 0;
258 t(e, "source[data-src]").forEach((e) => {
259 e.setAttribute("src", e.getAttribute("data-src")), e.removeAttribute("data-src"), e.setAttribute("data-lazy-loaded", ""), n += 1;
260 }), g && e.tagName === "VIDEO" && e.setAttribute("playsinline", ""), n > 0 && e.load();
261 });
262 let i = e.slideBackgroundElement;
263 if (i) {
264 i.style.display = "block";
265 let t = e.slideBackgroundContentElement, r = e.getAttribute("data-background-iframe");
266 if (i.hasAttribute("data-loaded") === !1) {
267 i.setAttribute("data-loaded", "true");
268 let a = e.getAttribute("data-background-image"), o = e.getAttribute("data-background-video"), s = e.hasAttribute("data-background-video-loop"), c = e.hasAttribute("data-background-video-muted");
269 if (a) /^data:/.test(a.trim()) ? t.style.backgroundImage = `url(${a.trim()})` : t.style.backgroundImage = a.split(",").map((e) => `url(${m(decodeURI(e.trim()))})`).join(",");
270 else if (o) {
271 let e = document.createElement("video");
272 s && e.setAttribute("loop", ""), (c || this.Reveal.isSpeakerNotes()) && (e.muted = !0), g && e.setAttribute("playsinline", ""), o.split(",").forEach((t) => {
273 let n = document.createElement("source");
274 n.setAttribute("src", t);
275 let r = p(t);
276 r && n.setAttribute("type", r), e.appendChild(n);
277 }), t.appendChild(e);
278 } else if (r && n.excludeIframes !== !0) {
279 let e = document.createElement("iframe");
280 e.setAttribute("allowfullscreen", ""), e.setAttribute("mozallowfullscreen", ""), e.setAttribute("webkitallowfullscreen", ""), e.setAttribute("allow", "autoplay"), e.setAttribute("data-src", r), e.style.width = "100%", e.style.height = "100%", e.style.maxHeight = "100%", e.style.maxWidth = "100%", t.appendChild(e);
281 }
282 }
283 let a = t.querySelector("iframe[data-src]");
284 a && this.shouldPreload(i) && !/autoplay=(1|true|yes)/gi.test(r) && a.getAttribute("src") !== r && a.setAttribute("src", r);
285 }
286 this.layout(e);
287 }
288 layout(e) {
289 Array.from(e.querySelectorAll(".r-fit-text")).forEach((e) => {
290 v(e, {
291 minSize: 24,
292 maxSize: this.Reveal.getConfig().height * .8,
293 observeMutations: !1,
294 observeWindow: !1
295 });
296 });
297 }
298 unload(e) {
299 e.style.display = "none";
300 let n = this.Reveal.getSlideBackground(e);
301 n && (n.style.display = "none", t(n, "iframe[src]").forEach((e) => {
302 e.removeAttribute("src");
303 })), t(e, "video[data-lazy-loaded][src], audio[data-lazy-loaded][src], iframe[data-lazy-loaded][src]").forEach((e) => {
304 e.setAttribute("data-src", e.getAttribute("src")), e.removeAttribute("src");
305 }), t(e, "video[data-lazy-loaded] source[src], audio source[src]").forEach((e) => {
306 e.setAttribute("data-src", e.getAttribute("src")), e.removeAttribute("src");
307 });
308 }
309 formatEmbeddedContent() {
310 let e = (e, n, r) => {
311 t(this.Reveal.getSlidesElement(), "iframe[" + e + "*=\"" + n + "\"]").forEach((t) => {
312 let n = t.getAttribute(e);
313 n && n.indexOf(r) === -1 && t.setAttribute(e, n + (/\?/.test(n) ? "&" : "?") + r);
314 });
315 };
316 e("src", "youtube.com/embed/", "enablejsapi=1"), e("data-src", "youtube.com/embed/", "enablejsapi=1"), e("src", "player.vimeo.com/", "api=1"), e("data-src", "player.vimeo.com/", "api=1");
317 }
318 startEmbeddedContent(e) {
319 if (e) {
320 let n = this.Reveal.isSpeakerNotes();
321 t(e, "img[src$=\".gif\"]").forEach((e) => {
322 e.setAttribute("src", e.getAttribute("src"));
323 }), t(e, "video, audio").forEach((e) => {
324 if (o(e, ".fragment") && !o(e, ".fragment.visible")) return;
325 let t = this.Reveal.getConfig().autoPlayMedia;
326 if (typeof t != "boolean" && (t = e.hasAttribute("data-autoplay") || !!o(e, ".slide-background")), t && typeof e.play == "function") {
327 if (n && !e.muted) return;
328 e.readyState > 1 ? this.startEmbeddedMedia({ target: e }) : g ? (e.addEventListener("canplay", this.ensureMobileMediaPlaying), this.playMediaElement(e)) : (e.removeEventListener("loadeddata", this.startEmbeddedMedia), e.addEventListener("loadeddata", this.startEmbeddedMedia));
329 }
330 }), n || (t(e, "iframe[src]").forEach((e) => {
331 o(e, ".fragment") && !o(e, ".fragment.visible") || this.startEmbeddedIframe({ target: e });
332 }), t(e, "iframe[data-src]").forEach((e) => {
333 o(e, ".fragment") && !o(e, ".fragment.visible") || e.getAttribute("src") !== e.getAttribute("data-src") && (e.removeEventListener("load", this.startEmbeddedIframe), e.addEventListener("load", this.startEmbeddedIframe), e.setAttribute("src", e.getAttribute("data-src")));
334 }));
335 }
336 }
337 ensureMobileMediaPlaying(e) {
338 let t = e.target;
339 typeof t.getVideoPlaybackQuality == "function" && setTimeout(() => {
340 let e = t.paused === !1, n = t.getVideoPlaybackQuality().totalVideoFrames;
341 e && n === 0 && (t.load(), t.play());
342 }, 1e3);
343 }
344 startEmbeddedMedia(e) {
345 let t = !!o(e.target, "html"), n = !!o(e.target, ".present");
346 t && n && (e.target.paused || e.target.ended) && (e.target.currentTime = 0, this.playMediaElement(e.target)), e.target.removeEventListener("loadeddata", this.startEmbeddedMedia);
347 }
348 playMediaElement(e) {
349 let t = e.play();
350 t && typeof t.catch == "function" && t.then(() => {
351 e.muted || (this.allowedToPlayAudio = !0);
352 }).catch((t) => {
353 if (t.name === "NotAllowedError") if (this.allowedToPlayAudio = !1, e.tagName === "VIDEO") {
354 this.onVideoPlaybackNotAllowed(e);
355 let t = !!o(e, "html"), n = !!o(e, ".present"), r = e.muted;
356 t && n && !r && (e.setAttribute("data-muted-by-reveal", "true"), e.muted = !0, e.play().catch(() => {
357 this.onMutedVideoPlaybackNotAllowed(e);
358 }));
359 } else e.tagName === "AUDIO" && this.onAudioPlaybackNotAllowed(e);
360 });
361 }
362 startEmbeddedIframe(e) {
363 let t = e.target;
364 if (this.preventIframeAutoFocus(e), t && t.contentWindow) {
365 let n = !!o(e.target, "html"), r = !!o(e.target, ".present");
366 if (n && r) {
367 let e = this.Reveal.getConfig().autoPlayMedia;
368 typeof e != "boolean" && (e = t.hasAttribute("data-autoplay") || !!o(t, ".slide-background")), /youtube\.com\/embed\//.test(t.getAttribute("src")) && e ? t.contentWindow.postMessage("{\"event\":\"command\",\"func\":\"playVideo\",\"args\":\"\"}", "*") : /player\.vimeo\.com\//.test(t.getAttribute("src")) && e ? t.contentWindow.postMessage("{\"method\":\"play\"}", "*") : t.contentWindow.postMessage("slide:start", "*");
369 }
370 }
371 }
372 stopEmbeddedContent(n, r = {}) {
373 r = e({ unloadIframes: !0 }, r), n && n.parentNode && (t(n, "video, audio").forEach((e) => {
374 !e.hasAttribute("data-ignore") && typeof e.pause == "function" && (e.setAttribute("data-paused-by-reveal", ""), e.pause(), g && e.removeEventListener("canplay", this.ensureMobileMediaPlaying));
375 }), t(n, "iframe").forEach((e) => {
376 e.contentWindow && e.contentWindow.postMessage("slide:stop", "*"), e.removeEventListener("load", this.preventIframeAutoFocus), e.removeEventListener("load", this.startEmbeddedIframe);
377 }), t(n, "iframe[src*=\"youtube.com/embed/\"]").forEach((e) => {
378 !e.hasAttribute("data-ignore") && e.contentWindow && typeof e.contentWindow.postMessage == "function" && e.contentWindow.postMessage("{\"event\":\"command\",\"func\":\"pauseVideo\",\"args\":\"\"}", "*");
379 }), t(n, "iframe[src*=\"player.vimeo.com/\"]").forEach((e) => {
380 !e.hasAttribute("data-ignore") && e.contentWindow && typeof e.contentWindow.postMessage == "function" && e.contentWindow.postMessage("{\"method\":\"pause\"}", "*");
381 }), r.unloadIframes === !0 && t(n, "iframe[data-src]").forEach((e) => {
382 e.setAttribute("src", "about:blank"), e.removeAttribute("src");
383 }));
384 }
385 isAllowedToPlayAudio() {
386 return this.allowedToPlayAudio;
387 }
388 showPlayOrUnmuteButton() {
389 let e = this.failedAudioPlaybackTargets.size, t = this.failedVideoPlaybackTargets.size, n = this.failedMutedVideoPlaybackTargets.size, r = "Play media";
390 n > 0 ? r = "Play video" : t > 0 ? r = "Unmute video" : e > 0 && (r = "Play audio"), this.mediaPlayButton.textContent = r, this.Reveal.getRevealElement().appendChild(this.mediaPlayButton);
391 }
392 onAudioPlaybackNotAllowed(e) {
393 this.failedAudioPlaybackTargets.add(e), this.showPlayOrUnmuteButton(e);
394 }
395 onVideoPlaybackNotAllowed(e) {
396 this.failedVideoPlaybackTargets.add(e), this.showPlayOrUnmuteButton();
397 }
398 onMutedVideoPlaybackNotAllowed(e) {
399 this.failedMutedVideoPlaybackTargets.add(e), this.showPlayOrUnmuteButton();
400 }
401 resetTemporarilyMutedMedia() {
402 new Set([
403 ...this.failedAudioPlaybackTargets,
404 ...this.failedVideoPlaybackTargets,
405 ...this.failedMutedVideoPlaybackTargets
406 ]).forEach((e) => {
407 e.hasAttribute("data-muted-by-reveal") && (e.muted = !1, e.removeAttribute("data-muted-by-reveal"));
408 });
409 }
410 clearMediaPlaybackErrors() {
411 this.resetTemporarilyMutedMedia(), this.failedAudioPlaybackTargets.clear(), this.failedVideoPlaybackTargets.clear(), this.failedMutedVideoPlaybackTargets.clear(), this.mediaPlayButton && this.mediaPlayButton.parentNode && this.mediaPlayButton.remove();
412 }
413 preventIframeAutoFocus(e) {
414 let t = e.target;
415 if (t && this.Reveal.getConfig().preventIframeAutoFocus) {
416 let e = 0, n = () => {
417 document.activeElement === t ? document.activeElement.blur() : e < 1e3 && (e += 100, setTimeout(n, 100));
418 };
419 setTimeout(n, 100);
420 }
421 }
422 afterSlideChanged() {
423 this.clearMediaPlaybackErrors();
424 }
425 }, C = ".slides section", w = ".slides>section", te = ".slides>section.present>section", T = ".backgrounds>.slide-background", E = /registerPlugin|registerKeyboardShortcut|addKeyBinding|addEventListener|showPreview|previewIframe/, ne = class {
426 constructor(e) {
427 this.Reveal = e;
428 }
429 render() {
430 this.element = document.createElement("div"), this.element.className = "slide-number", this.Reveal.getRevealElement().appendChild(this.element);
431 }
432 configure(e, t) {
433 let n = "none";
434 e.slideNumber && !this.Reveal.isPrintView() && (e.showSlideNumber === "all" || e.showSlideNumber === "speaker" && this.Reveal.isSpeakerNotes()) && (n = "block"), this.element.style.display = n;
435 }
436 update() {
437 this.Reveal.getConfig().slideNumber && this.element && (this.element.innerHTML = this.getSlideNumber());
438 }
439 getSlideNumber(e = this.Reveal.getCurrentSlide()) {
440 let t = this.Reveal.getConfig(), n, r = "h.v";
441 if (typeof t.slideNumber == "function") n = t.slideNumber(e);
442 else {
443 typeof t.slideNumber == "string" && (r = t.slideNumber), !/c/.test(r) && this.Reveal.getHorizontalSlides().length === 1 && (r = "c");
444 let i = e && e.dataset.visibility === "uncounted" ? 0 : 1;
445 switch (n = [], r) {
446 case "c":
447 n.push(this.Reveal.getSlidePastCount(e) + i);
448 break;
449 case "c/t":
450 n.push(this.Reveal.getSlidePastCount(e) + i, "/", this.Reveal.getTotalSlides());
451 break;
452 default:
453 let t = this.Reveal.getIndices(e);
454 n.push(t.h + i);
455 let a = r === "h/v" ? "/" : ".";
456 this.Reveal.isVerticalSlide(e) && n.push(a, t.v + 1);
457 }
458 }
459 let i = "#" + this.Reveal.location.getHash(e);
460 return this.formatNumber(n[0], n[1], n[2], i);
461 }
462 formatNumber(e, t, n, r = "#" + this.Reveal.location.getHash()) {
463 return typeof n == "number" && !isNaN(n) ? `<a href="${r}">
464 <span class="slide-number-a">${e}</span>
465 <span class="slide-number-delimiter">${t}</span>
466 <span class="slide-number-b">${n}</span>
467 </a>` : `<a href="${r}">
468 <span class="slide-number-a">${e}</span>
469 </a>`;
470 }
471 destroy() {
472 this.element.remove();
473 }
474 }, re = class {
475 constructor(e) {
476 this.Reveal = e, this.onInput = this.onInput.bind(this), this.onBlur = this.onBlur.bind(this), this.onKeyDown = this.onKeyDown.bind(this);
477 }
478 render() {
479 this.element = document.createElement("div"), this.element.className = "jump-to-slide", this.jumpInput = document.createElement("input"), this.jumpInput.type = "text", this.jumpInput.className = "jump-to-slide-input", this.jumpInput.placeholder = "Jump to slide", this.jumpInput.addEventListener("input", this.onInput), this.jumpInput.addEventListener("keydown", this.onKeyDown), this.jumpInput.addEventListener("blur", this.onBlur), this.element.appendChild(this.jumpInput);
480 }
481 show() {
482 this.indicesOnShow = this.Reveal.getIndices(), this.Reveal.getRevealElement().appendChild(this.element), this.jumpInput.focus();
483 }
484 hide() {
485 this.isVisible() && (this.element.remove(), this.jumpInput.value = "", clearTimeout(this.jumpTimeout), delete this.jumpTimeout);
486 }
487 isVisible() {
488 return !!this.element.parentNode;
489 }
490 jump() {
491 clearTimeout(this.jumpTimeout), delete this.jumpTimeout;
492 let e = this.jumpInput.value.trim(""), t;
493 if (/^\d+$/.test(e)) {
494 let n = this.Reveal.getConfig().slideNumber;
495 if (n === "c" || n === "c/t") {
496 let n = this.Reveal.getSlides()[parseInt(e, 10) - 1];
497 n && (t = this.Reveal.getIndices(n));
498 }
499 }
500 return t || (/^\d+\.\d+$/.test(e) && (e = e.replace(".", "/")), t = this.Reveal.location.getIndicesFromHash(e, { oneBasedIndex: !0 })), !t && /\S+/i.test(e) && e.length > 1 && (t = this.search(e)), t && e !== "" ? (this.Reveal.slide(t.h, t.v, t.f), !0) : (this.Reveal.slide(this.indicesOnShow.h, this.indicesOnShow.v, this.indicesOnShow.f), !1);
501 }
502 jumpAfter(e) {
503 clearTimeout(this.jumpTimeout), this.jumpTimeout = setTimeout(() => this.jump(), e);
504 }
505 search(e) {
506 let t = RegExp("\\b" + e.trim() + "\\b", "i"), n = this.Reveal.getSlides().find((e) => t.test(e.innerText));
507 return n ? this.Reveal.getIndices(n) : null;
508 }
509 cancel() {
510 this.Reveal.slide(this.indicesOnShow.h, this.indicesOnShow.v, this.indicesOnShow.f), this.hide();
511 }
512 confirm() {
513 this.jump(), this.hide();
514 }
515 destroy() {
516 this.jumpInput.removeEventListener("input", this.onInput), this.jumpInput.removeEventListener("keydown", this.onKeyDown), this.jumpInput.removeEventListener("blur", this.onBlur), this.element.remove();
517 }
518 onKeyDown(e) {
519 e.keyCode === 13 ? this.confirm() : e.keyCode === 27 && (this.cancel(), e.stopImmediatePropagation());
520 }
521 onInput(e) {
522 this.jumpAfter(200);
523 }
524 onBlur() {
525 setTimeout(() => this.hide(), 1);
526 }
527 }, D = (e) => {
528 let t = e.match(/^#([0-9a-f]{3})$/i);
529 if (t && t[1]) {
530 let e = t[1];
531 return {
532 r: parseInt(e.charAt(0), 16) * 17,
533 g: parseInt(e.charAt(1), 16) * 17,
534 b: parseInt(e.charAt(2), 16) * 17
535 };
536 }
537 let n = e.match(/^#([0-9a-f]{6})$/i);
538 if (n && n[1]) {
539 let e = n[1];
540 return {
541 r: parseInt(e.slice(0, 2), 16),
542 g: parseInt(e.slice(2, 4), 16),
543 b: parseInt(e.slice(4, 6), 16)
544 };
545 }
546 let r = e.match(/^rgb\s*\(\s*(\d+)\s*,\s*(\d+)\s*,\s*(\d+)\s*\)$/i);
547 if (r) return {
548 r: parseInt(r[1], 10),
549 g: parseInt(r[2], 10),
550 b: parseInt(r[3], 10)
551 };
552 let i = e.match(/^rgba\s*\(\s*(\d+)\s*,\s*(\d+)\s*,\s*(\d+)\s*,\s*([\d]+|[\d]*.[\d]+)\s*\)$/i);
553 return i ? {
554 r: parseInt(i[1], 10),
555 g: parseInt(i[2], 10),
556 b: parseInt(i[3], 10),
557 a: parseFloat(i[4])
558 } : null;
559 }, ie = (e) => (typeof e == "string" && (e = D(e)), e ? (e.r * 299 + e.g * 587 + e.b * 114) / 1e3 : null), ae = class {
560 constructor(e) {
561 this.Reveal = e;
562 }
563 render() {
564 this.element = document.createElement("div"), this.element.className = "backgrounds", this.Reveal.getRevealElement().appendChild(this.element);
565 }
566 create() {
567 this.element.innerHTML = "", this.element.classList.add("no-transition"), this.Reveal.getHorizontalSlides().forEach((e) => {
568 let n = this.createBackground(e, this.element);
569 t(e, "section").forEach((e) => {
570 this.createBackground(e, n), n.classList.add("stack");
571 });
572 }), this.Reveal.getConfig().parallaxBackgroundImage ? (this.element.style.backgroundImage = "url(\"" + this.Reveal.getConfig().parallaxBackgroundImage + "\")", this.element.style.backgroundSize = this.Reveal.getConfig().parallaxBackgroundSize, this.element.style.backgroundRepeat = this.Reveal.getConfig().parallaxBackgroundRepeat, this.element.style.backgroundPosition = this.Reveal.getConfig().parallaxBackgroundPosition, setTimeout(() => {
573 this.Reveal.getRevealElement().classList.add("has-parallax-background");
574 }, 1)) : (this.element.style.backgroundImage = "", this.Reveal.getRevealElement().classList.remove("has-parallax-background"));
575 }
576 createBackground(e, t) {
577 let n = document.createElement("div");
578 n.className = "slide-background " + e.className.replace(/present|past|future/, "");
579 let r = document.createElement("div");
580 return r.className = "slide-background-content", n.appendChild(r), t.appendChild(n), e.slideBackgroundElement = n, e.slideBackgroundContentElement = r, this.sync(e), n;
581 }
582 sync(e) {
583 let t = e.slideBackgroundElement, n = e.slideBackgroundContentElement, r = {
584 background: e.getAttribute("data-background"),
585 backgroundSize: e.getAttribute("data-background-size"),
586 backgroundImage: e.getAttribute("data-background-image"),
587 backgroundVideo: e.getAttribute("data-background-video"),
588 backgroundIframe: e.getAttribute("data-background-iframe"),
589 backgroundColor: e.getAttribute("data-background-color"),
590 backgroundGradient: e.getAttribute("data-background-gradient"),
591 backgroundRepeat: e.getAttribute("data-background-repeat"),
592 backgroundPosition: e.getAttribute("data-background-position"),
593 backgroundTransition: e.getAttribute("data-background-transition"),
594 backgroundOpacity: e.getAttribute("data-background-opacity")
595 }, i = e.hasAttribute("data-preload");
596 e.classList.remove("has-dark-background"), e.classList.remove("has-light-background"), t.removeAttribute("data-loaded"), t.removeAttribute("data-background-hash"), t.removeAttribute("data-background-size"), t.removeAttribute("data-background-transition"), t.style.backgroundColor = "", n.style.backgroundSize = "", n.style.backgroundRepeat = "", n.style.backgroundPosition = "", n.style.backgroundImage = "", n.style.opacity = "", n.innerHTML = "", r.background && (/^(http|file|\/\/)/gi.test(r.background) || /\.(svg|png|jpg|jpeg|gif|bmp|webp)([?#\s]|$)/gi.test(r.background) ? e.setAttribute("data-background-image", r.background) : t.style.background = r.background), (r.background || r.backgroundColor || r.backgroundGradient || r.backgroundImage || r.backgroundVideo || r.backgroundIframe) && t.setAttribute("data-background-hash", r.background + r.backgroundSize + r.backgroundImage + r.backgroundVideo + r.backgroundIframe + r.backgroundColor + r.backgroundGradient + r.backgroundRepeat + r.backgroundPosition + r.backgroundTransition + r.backgroundOpacity), r.backgroundSize && t.setAttribute("data-background-size", r.backgroundSize), r.backgroundColor && (t.style.backgroundColor = r.backgroundColor), r.backgroundGradient && (t.style.backgroundImage = r.backgroundGradient), r.backgroundTransition && t.setAttribute("data-background-transition", r.backgroundTransition), i && t.setAttribute("data-preload", ""), r.backgroundSize && (n.style.backgroundSize = r.backgroundSize), r.backgroundRepeat && (n.style.backgroundRepeat = r.backgroundRepeat), r.backgroundPosition && (n.style.backgroundPosition = r.backgroundPosition), r.backgroundOpacity && (n.style.opacity = r.backgroundOpacity);
597 let a = this.getContrastClass(e);
598 typeof a == "string" && e.classList.add(a);
599 }
600 getContrastClass(e) {
601 let t = e.slideBackgroundElement, n = e.getAttribute("data-background-color");
602 if (!n || !D(n)) {
603 let e = window.getComputedStyle(t);
604 e && e.backgroundColor && (n = e.backgroundColor);
605 }
606 if (n) {
607 let e = D(n);
608 if (e && e.a !== 0) return ie(n) < 128 ? "has-dark-background" : "has-light-background";
609 }
610 return null;
611 }
612 bubbleSlideContrastClassToElement(e, t) {
613 ["has-light-background", "has-dark-background"].forEach((n) => {
614 e.classList.contains(n) ? t.classList.add(n) : t.classList.remove(n);
615 }, this);
616 }
617 update(e = !1) {
618 let n = this.Reveal.getConfig(), r = this.Reveal.getCurrentSlide(), i = this.Reveal.getIndices(), a = null, o = n.rtl ? "future" : "past", s = n.rtl ? "past" : "future";
619 if (Array.from(this.element.childNodes).forEach((n, r) => {
620 n.classList.remove("past", "present", "future"), r < i.h ? n.classList.add(o) : r > i.h ? n.classList.add(s) : (n.classList.add("present"), a = n), (e || r === i.h) && t(n, ".slide-background").forEach((e, t) => {
621 e.classList.remove("past", "present", "future");
622 let n = typeof i.v == "number" ? i.v : 0;
623 t < n ? e.classList.add("past") : t > n ? e.classList.add("future") : (e.classList.add("present"), r === i.h && (a = e));
624 });
625 }), this.previousBackground && !this.previousBackground.closest("body") && (this.previousBackground = null), a && this.previousBackground) {
626 let e = this.previousBackground.getAttribute("data-background-hash"), t = a.getAttribute("data-background-hash");
627 if (t && t === e && a !== this.previousBackground) {
628 this.element.classList.add("no-transition");
629 let e = a.querySelector("video"), t = this.previousBackground.querySelector("video");
630 if (e && t) {
631 let n = e.parentNode;
632 t.parentNode.appendChild(e), n.appendChild(t);
633 }
634 }
635 }
636 let c = a !== this.previousBackground;
637 if (c && this.previousBackground && this.Reveal.slideContent.stopEmbeddedContent(this.previousBackground, { unloadIframes: !this.Reveal.slideContent.shouldPreload(this.previousBackground) }), c && a) {
638 this.Reveal.slideContent.startEmbeddedContent(a);
639 let e = a.querySelector(".slide-background-content");
640 if (e) {
641 let t = e.style.backgroundImage || "";
642 /\.gif/i.test(t) && (e.style.backgroundImage = "", window.getComputedStyle(e).opacity, e.style.backgroundImage = t);
643 }
644 this.previousBackground = a;
645 }
646 r && this.bubbleSlideContrastClassToElement(r, this.Reveal.getRevealElement()), setTimeout(() => {
647 this.element.classList.remove("no-transition");
648 }, 10);
649 }
650 updateParallax() {
651 let e = this.Reveal.getIndices();
652 if (this.Reveal.getConfig().parallaxBackgroundImage) {
653 let t = this.Reveal.getHorizontalSlides(), n = this.Reveal.getVerticalSlides(), r = this.element.style.backgroundSize.split(" "), i, a;
654 r.length === 1 ? i = a = parseInt(r[0], 10) : (i = parseInt(r[0], 10), a = parseInt(r[1], 10));
655 let o = this.element.offsetWidth, s = t.length, c, l;
656 c = typeof this.Reveal.getConfig().parallaxBackgroundHorizontal == "number" ? this.Reveal.getConfig().parallaxBackgroundHorizontal : s > 1 ? (i - o) / (s - 1) : 0, l = c * e.h * -1;
657 let u = this.element.offsetHeight, d = n.length, f, p;
658 f = typeof this.Reveal.getConfig().parallaxBackgroundVertical == "number" ? this.Reveal.getConfig().parallaxBackgroundVertical : (a - u) / (d - 1), p = d > 0 ? f * e.v : 0, this.element.style.backgroundPosition = l + "px " + -p + "px";
659 }
660 }
661 destroy() {
662 this.element.remove();
663 }
664 }, O = 0, oe = class {
665 constructor(e) {
666 this.Reveal = e;
667 }
668 run(e, t) {
669 this.reset();
670 let n = this.Reveal.getSlides(), r = n.indexOf(t), i = n.indexOf(e);
671 if (e && t && e.hasAttribute("data-auto-animate") && t.hasAttribute("data-auto-animate") && e.getAttribute("data-auto-animate-id") === t.getAttribute("data-auto-animate-id") && !(r > i ? t : e).hasAttribute("data-auto-animate-restart")) {
672 this.autoAnimateStyleSheet = this.autoAnimateStyleSheet || l();
673 let n = this.getAutoAnimateOptions(t);
674 e.dataset.autoAnimate = "pending", t.dataset.autoAnimate = "pending", n.slideDirection = r > i ? "forward" : "backward";
675 let a = e.style.display === "none";
676 a && (e.style.display = this.Reveal.getConfig().display);
677 let o = this.getAutoAnimatableElements(e, t).map((e) => this.autoAnimateElements(e.from, e.to, e.options || {}, n, O++));
678 if (a && (e.style.display = "none"), t.dataset.autoAnimateUnmatched !== "false" && this.Reveal.getConfig().autoAnimateUnmatched === !0) {
679 let e = n.duration * .8, r = n.duration * .2;
680 this.getUnmatchedAutoAnimateElements(t).forEach((e) => {
681 let t = this.getAutoAnimateOptions(e, n), r = "unmatched";
682 (t.duration !== n.duration || t.delay !== n.delay) && (r = "unmatched-" + O++, o.push(`[data-auto-animate="running"] [data-auto-animate-target="${r}"] { transition: opacity ${t.duration}s ease ${t.delay}s; }`)), e.dataset.autoAnimateTarget = r;
683 }, this), o.push(`[data-auto-animate="running"] [data-auto-animate-target="unmatched"] { transition: opacity ${e}s ease ${r}s; }`);
684 }
685 this.autoAnimateStyleSheet.innerHTML = o.join(""), requestAnimationFrame(() => {
686 this.autoAnimateStyleSheet && (getComputedStyle(this.autoAnimateStyleSheet).fontWeight, t.dataset.autoAnimate = "running");
687 }), this.Reveal.dispatchEvent({
688 type: "autoanimate",
689 data: {
690 fromSlide: e,
691 toSlide: t,
692 sheet: this.autoAnimateStyleSheet
693 }
694 });
695 }
696 }
697 reset() {
698 t(this.Reveal.getRevealElement(), "[data-auto-animate]:not([data-auto-animate=\"\"])").forEach((e) => {
699 e.dataset.autoAnimate = "";
700 }), t(this.Reveal.getRevealElement(), "[data-auto-animate-target]").forEach((e) => {
701 delete e.dataset.autoAnimateTarget;
702 }), this.autoAnimateStyleSheet && this.autoAnimateStyleSheet.parentNode && (this.autoAnimateStyleSheet.parentNode.removeChild(this.autoAnimateStyleSheet), this.autoAnimateStyleSheet = null);
703 }
704 autoAnimateElements(e, t, n, r, i) {
705 e.dataset.autoAnimateTarget = "", t.dataset.autoAnimateTarget = i;
706 let a = this.getAutoAnimateOptions(t, r);
707 n.delay !== void 0 && (a.delay = n.delay), n.duration !== void 0 && (a.duration = n.duration), n.easing !== void 0 && (a.easing = n.easing);
708 let o = this.getAutoAnimatableProperties("from", e, n), s = this.getAutoAnimatableProperties("to", t, n);
709 if (t.classList.contains("fragment") && delete s.styles.opacity, n.translate !== !1 || n.scale !== !1) {
710 let e = this.Reveal.getScale(), t = {
711 x: (o.x - s.x) / e,
712 y: (o.y - s.y) / e,
713 scaleX: o.width / s.width,
714 scaleY: o.height / s.height
715 };
716 t.x = Math.round(t.x * 1e3) / 1e3, t.y = Math.round(t.y * 1e3) / 1e3, t.scaleX = Math.round(t.scaleX * 1e3) / 1e3, t.scaleX = Math.round(t.scaleX * 1e3) / 1e3;
717 let r = n.translate !== !1 && (t.x !== 0 || t.y !== 0), i = n.scale !== !1 && (t.scaleX !== 0 || t.scaleY !== 0);
718 if (r || i) {
719 let e = [];
720 r && e.push(`translate(${t.x}px, ${t.y}px)`), i && e.push(`scale(${t.scaleX}, ${t.scaleY})`), o.styles.transform = e.join(" "), o.styles["transform-origin"] = "top left", s.styles.transform = "none";
721 }
722 }
723 for (let e in s.styles) {
724 let t = s.styles[e], n = o.styles[e];
725 t === n ? delete s.styles[e] : (t.explicitValue === !0 && (s.styles[e] = t.value), n.explicitValue === !0 && (o.styles[e] = n.value));
726 }
727 let c = "", l = Object.keys(s.styles);
728 if (l.length > 0) {
729 o.styles.transition = "none", s.styles.transition = `all ${a.duration}s ${a.easing} ${a.delay}s`, s.styles["transition-property"] = l.join(", "), s.styles["will-change"] = l.join(", ");
730 let e = Object.keys(o.styles).map((e) => e + ": " + o.styles[e] + " !important;").join(""), t = Object.keys(s.styles).map((e) => e + ": " + s.styles[e] + " !important;").join("");
731 c = "[data-auto-animate-target=\"" + i + "\"] {" + e + "}[data-auto-animate=\"running\"] [data-auto-animate-target=\"" + i + "\"] {" + t + "}";
732 }
733 return c;
734 }
735 getAutoAnimateOptions(t, n) {
736 let r = {
737 easing: this.Reveal.getConfig().autoAnimateEasing,
738 duration: this.Reveal.getConfig().autoAnimateDuration,
739 delay: 0
740 };
741 if (r = e(r, n), t.parentNode) {
742 let e = o(t.parentNode, "[data-auto-animate-target]");
743 e && (r = this.getAutoAnimateOptions(e, r));
744 }
745 return t.dataset.autoAnimateEasing && (r.easing = t.dataset.autoAnimateEasing), t.dataset.autoAnimateDuration && (r.duration = parseFloat(t.dataset.autoAnimateDuration)), t.dataset.autoAnimateDelay && (r.delay = parseFloat(t.dataset.autoAnimateDelay)), r;
746 }
747 getAutoAnimatableProperties(e, t, n) {
748 let r = this.Reveal.getConfig(), i = { styles: [] };
749 if (n.translate !== !1 || n.scale !== !1) {
750 let e;
751 if (typeof n.measure == "function") e = n.measure(t);
752 else if (r.center) e = t.getBoundingClientRect();
753 else {
754 let n = this.Reveal.getScale();
755 e = {
756 x: t.offsetLeft * n,
757 y: t.offsetTop * n,
758 width: t.offsetWidth * n,
759 height: t.offsetHeight * n
760 };
761 }
762 i.x = e.x, i.y = e.y, i.width = e.width, i.height = e.height;
763 }
764 let a = getComputedStyle(t);
765 return (n.styles || r.autoAnimateStyles).forEach((t) => {
766 let n;
767 typeof t == "string" && (t = { property: t }), t.from !== void 0 && e === "from" ? n = {
768 value: t.from,
769 explicitValue: !0
770 } : t.to !== void 0 && e === "to" ? n = {
771 value: t.to,
772 explicitValue: !0
773 } : (t.property === "line-height" && (n = parseFloat(a["line-height"]) / parseFloat(a["font-size"])), isNaN(n) && (n = a[t.property])), n !== "" && (i.styles[t.property] = n);
774 }), i;
775 }
776 getAutoAnimatableElements(e, t) {
777 let n = (typeof this.Reveal.getConfig().autoAnimateMatcher == "function" ? this.Reveal.getConfig().autoAnimateMatcher : this.getAutoAnimatePairs).call(this, e, t), r = [];
778 return n.filter((e, t) => {
779 if (r.indexOf(e.to) === -1) return r.push(e.to), !0;
780 });
781 }
782 getAutoAnimatePairs(e, t) {
783 let n = [], r = "h1, h2, h3, h4, h5, h6, p, li";
784 return this.findAutoAnimateMatches(n, e, t, "[data-id]", (e) => e.nodeName + ":::" + e.getAttribute("data-id")), this.findAutoAnimateMatches(n, e, t, r, (e) => e.nodeName + ":::" + e.textContent.trim()), this.findAutoAnimateMatches(n, e, t, "img, video, iframe", (e) => e.nodeName + ":::" + (e.getAttribute("src") || e.getAttribute("data-src"))), this.findAutoAnimateMatches(n, e, t, "pre", (e) => e.nodeName + ":::" + e.textContent.trim()), n.forEach((e) => {
785 a(e.from, r) ? e.options = { scale: !1 } : a(e.from, "pre") && (e.options = {
786 scale: !1,
787 styles: ["width", "height"]
788 }, this.findAutoAnimateMatches(n, e.from, e.to, ".hljs .hljs-ln-code", (e) => e.textContent, {
789 scale: !1,
790 styles: [],
791 measure: this.getLocalBoundingBox.bind(this)
792 }), this.findAutoAnimateMatches(n, e.from, e.to, ".hljs .hljs-ln-numbers[data-line-number]", (e) => e.getAttribute("data-line-number"), {
793 scale: !1,
794 styles: ["width"],
795 measure: this.getLocalBoundingBox.bind(this)
796 }));
797 }, this), n;
798 }
799 getLocalBoundingBox(e) {
800 let t = this.Reveal.getScale();
801 return {
802 x: Math.round(e.offsetLeft * t * 100) / 100,
803 y: Math.round(e.offsetTop * t * 100) / 100,
804 width: Math.round(e.offsetWidth * t * 100) / 100,
805 height: Math.round(e.offsetHeight * t * 100) / 100
806 };
807 }
808 findAutoAnimateMatches(e, t, n, r, i, a) {
809 let o = {}, s = {};
810 [].slice.call(t.querySelectorAll(r)).forEach((e, t) => {
811 let n = i(e);
812 typeof n == "string" && n.length && (o[n] = o[n] || [], o[n].push(e));
813 }), [].slice.call(n.querySelectorAll(r)).forEach((t, n) => {
814 let r = i(t);
815 s[r] = s[r] || [], s[r].push(t);
816 let c;
817 if (o[r]) {
818 let e = s[r].length - 1, t = o[r].length - 1;
819 o[r][e] ? (c = o[r][e], o[r][e] = null) : o[r][t] && (c = o[r][t], o[r][t] = null);
820 }
821 c && e.push({
822 from: c,
823 to: t,
824 options: a
825 });
826 });
827 }
828 getUnmatchedAutoAnimateElements(e) {
829 return [].slice.call(e.children).reduce((e, t) => {
830 let n = t.querySelector("[data-auto-animate-target]");
831 return !t.hasAttribute("data-auto-animate-target") && !n && e.push(t), t.querySelector("[data-auto-animate-target]") && (e = e.concat(this.getUnmatchedAutoAnimateElements(t))), e;
832 }, []);
833 }
834 }, k = 500, A = 4, se = 6, j = 8, ce = class {
835 constructor(e) {
836 this.Reveal = e, this.active = !1, this.activeProgressBarPage = null, this.activeProgressBarTrigger = null, this.activatedCallbacks = [], this.onScroll = this.onScroll.bind(this);
837 }
838 activate() {
839 if (this.active) return;
840 let e = this.Reveal.getState();
841 this.active = !0, this.slideHTMLBeforeActivation = this.Reveal.getSlidesElement().innerHTML;
842 let n = t(this.Reveal.getRevealElement(), w), r = t(this.Reveal.getRevealElement(), T);
843 this.viewportElement.classList.add("loading-scroll-mode", "reveal-scroll");
844 let i, a = window.getComputedStyle(this.viewportElement);
845 a && a.background && (i = a.background);
846 let o = [], s = n[0].parentNode, c, l = (e, t, n, a) => {
847 let s;
848 if (c && this.Reveal.shouldAutoAnimateBetween(c, e)) s = document.createElement("div"), s.className = "scroll-page-content scroll-auto-animate-page", s.style.display = "none", c.closest(".scroll-page-content").parentNode.appendChild(s);
849 else {
850 let e = document.createElement("div");
851 if (e.className = "scroll-page", o.push(e), a && r.length > t) {
852 let n = r[t], a = window.getComputedStyle(n);
853 a && a.background ? e.style.background = a.background : i && (e.style.background = i);
854 } else i && (e.style.background = i);
855 let n = document.createElement("div");
856 n.className = "scroll-page-sticky", e.appendChild(n), s = document.createElement("div"), s.className = "scroll-page-content", n.appendChild(s);
857 }
858 s.appendChild(e), e.classList.remove("past", "future"), e.setAttribute("data-index-h", t), e.setAttribute("data-index-v", n), e.slideBackgroundElement && (e.slideBackgroundElement.remove("past", "future"), s.insertBefore(e.slideBackgroundElement, e)), c = e;
859 };
860 n.forEach((e, t) => {
861 this.Reveal.isVerticalStack(e) ? e.querySelectorAll("section").forEach((e, n) => {
862 l(e, t, n, !0);
863 }) : l(e, t, 0);
864 }, this), this.createProgressBar(), t(this.Reveal.getRevealElement(), ".stack").forEach((e) => e.remove()), o.forEach((e) => s.appendChild(e)), this.Reveal.slideContent.layout(this.Reveal.getSlidesElement()), this.Reveal.layout(), this.Reveal.setState(e), this.activatedCallbacks.forEach((e) => e()), this.activatedCallbacks = [], this.restoreScrollPosition(), this.viewportElement.classList.remove("loading-scroll-mode"), this.viewportElement.addEventListener("scroll", this.onScroll, { passive: !0 });
865 }
866 deactivate() {
867 if (!this.active) return;
868 let e = this.Reveal.getState();
869 this.active = !1, this.viewportElement.removeEventListener("scroll", this.onScroll), this.viewportElement.classList.remove("reveal-scroll"), this.pendingScrollRaf && (cancelAnimationFrame(this.pendingScrollRaf), this.pendingScrollRaf = 0), this.removeProgressBar(), this.Reveal.getSlidesElement().innerHTML = this.slideHTMLBeforeActivation, this.Reveal.sync(), this.Reveal.setState(e), this.slideHTMLBeforeActivation = null;
870 }
871 toggle(e) {
872 typeof e == "boolean" ? e ? this.activate() : this.deactivate() : this.isActive() ? this.deactivate() : this.activate();
873 }
874 isActive() {
875 return this.active;
876 }
877 createProgressBar() {
878 this.progressBar = document.createElement("div"), this.progressBar.className = "scrollbar", this.progressBarInner = document.createElement("div"), this.progressBarInner.className = "scrollbar-inner", this.progressBar.appendChild(this.progressBarInner), this.progressBarPlayhead = document.createElement("div"), this.progressBarPlayhead.className = "scrollbar-playhead", this.progressBarInner.appendChild(this.progressBarPlayhead), this.viewportElement.insertBefore(this.progressBar, this.viewportElement.firstChild);
879 let e = (e) => {
880 let t = (e.clientY - this.progressBarInner.getBoundingClientRect().top) / this.progressBarHeight;
881 t = Math.max(Math.min(t, 1), 0), this.viewportElement.scrollTop = t * (this.viewportElement.scrollHeight - this.viewportElement.offsetHeight);
882 }, t = (n) => {
883 this.draggingProgressBar = !1, this.showProgressBar(), document.removeEventListener("mousemove", e), document.removeEventListener("mouseup", t);
884 };
885 this.progressBarInner.addEventListener("mousedown", (n) => {
886 n.preventDefault(), this.draggingProgressBar = !0, document.addEventListener("mousemove", e), document.addEventListener("mouseup", t), e(n);
887 });
888 }
889 removeProgressBar() {
890 this.progressBar && (this.progressBar.remove(), this.progressBar = null), this.activeProgressBarPage = null, this.activeProgressBarTrigger = null;
891 }
892 layout() {
893 this.isActive() && (this.syncPages(), this.syncScrollPosition());
894 }
895 syncPages() {
896 let e = this.Reveal.getConfig(), t = this.Reveal.getComputedSlideSize(window.innerWidth, window.innerHeight), n = this.Reveal.getScale(), r = e.scrollLayout === "compact", i = this.viewportElement.offsetHeight, a = t.height * n, o = r ? a : i;
897 this.scrollTriggerHeight = r ? a : i, this.viewportElement.style.setProperty("--page-height", o + "px"), this.viewportElement.style.scrollSnapType = typeof e.scrollSnap == "string" ? `y ${e.scrollSnap}` : "", this.slideTriggers = [], this.pages = Array.from(this.Reveal.getRevealElement().querySelectorAll(".scroll-page")).map((n) => {
898 let a = this.createPage({
899 pageElement: n,
900 slideElement: n.querySelector("section"),
901 stickyElement: n.querySelector(".scroll-page-sticky"),
902 contentElement: n.querySelector(".scroll-page-content"),
903 backgroundElement: n.querySelector(".slide-background"),
904 autoAnimateElements: n.querySelectorAll(".scroll-auto-animate-page"),
905 autoAnimatePages: []
906 });
907 a.pageElement.style.setProperty("--slide-height", e.center === !0 ? "auto" : t.height + "px"), this.slideTriggers.push({
908 page: a,
909 activate: () => this.activatePage(a),
910 deactivate: () => this.deactivatePage(a)
911 }), this.createFragmentTriggersForPage(a), a.autoAnimateElements.length > 0 && this.createAutoAnimateTriggersForPage(a);
912 let s = Math.max(a.scrollTriggers.length - 1, 0);
913 s += a.autoAnimatePages.reduce((e, t) => e + Math.max(t.scrollTriggers.length - 1, 0), a.autoAnimatePages.length), a.pageElement.querySelectorAll(".scroll-snap-point").forEach((e) => e.remove());
914 for (let e = 0; e < s + 1; e++) {
915 let t = document.createElement("div");
916 t.className = "scroll-snap-point", t.style.height = this.scrollTriggerHeight + "px", t.style.scrollSnapAlign = r ? "center" : "start", a.pageElement.appendChild(t), e === 0 && (t.style.marginTop = -this.scrollTriggerHeight + "px");
917 }
918 return r && a.scrollTriggers.length > 0 ? (a.pageHeight = i, a.pageElement.style.setProperty("--page-height", i + "px")) : (a.pageHeight = o, a.pageElement.style.removeProperty("--page-height")), a.scrollPadding = this.scrollTriggerHeight * s, a.totalHeight = a.pageHeight + a.scrollPadding, a.pageElement.style.setProperty("--page-scroll-padding", a.scrollPadding + "px"), s > 0 ? (a.stickyElement.style.position = "sticky", a.stickyElement.style.top = Math.max((i - a.pageHeight) / 2, 0) + "px") : (a.stickyElement.style.position = "relative", a.pageElement.style.scrollSnapAlign = a.pageHeight < i ? "center" : "start"), a;
919 }), this.setTriggerRanges(), this.viewportElement.setAttribute("data-scrollbar", e.scrollProgress), e.scrollProgress && this.totalScrollTriggerCount > 1 ? (this.progressBar || this.createProgressBar(), this.syncProgressBar()) : this.removeProgressBar();
920 }
921 setTriggerRanges() {
922 this.totalScrollTriggerCount = this.slideTriggers.reduce((e, t) => e + Math.max(t.page.scrollTriggers.length, 1), 0);
923 let e = 0;
924 this.slideTriggers.forEach((t, n) => {
925 t.range = [e, e + Math.max(t.page.scrollTriggers.length, 1) / this.totalScrollTriggerCount];
926 let r = (t.range[1] - t.range[0]) / t.page.scrollTriggers.length;
927 t.page.scrollTriggers.forEach((t, n) => {
928 t.range = [e + n * r, e + (n + 1) * r];
929 }), e = t.range[1];
930 }), this.slideTriggers[this.slideTriggers.length - 1].range[1] = 1;
931 }
932 createFragmentTriggersForPage(e, t) {
933 t = t || e.slideElement;
934 let n = this.Reveal.fragments.sort(t.querySelectorAll(".fragment"), !0);
935 return n.length && (e.fragments = this.Reveal.fragments.sort(t.querySelectorAll(".fragment:not(.disabled)")), e.scrollTriggers.push({ activate: () => {
936 this.Reveal.fragments.update(-1, e.fragments, t);
937 } }), n.forEach((n, r) => {
938 e.scrollTriggers.push({ activate: () => {
939 this.Reveal.fragments.update(r, e.fragments, t);
940 } });
941 })), e.scrollTriggers.length;
942 }
943 createAutoAnimateTriggersForPage(e) {
944 e.autoAnimateElements.length > 0 && this.slideTriggers.push(...Array.from(e.autoAnimateElements).map((t, n) => {
945 let r = this.createPage({
946 slideElement: t.querySelector("section"),
947 contentElement: t,
948 backgroundElement: t.querySelector(".slide-background")
949 });
950 return this.createFragmentTriggersForPage(r, r.slideElement), e.autoAnimatePages.push(r), {
951 page: r,
952 activate: () => this.activatePage(r),
953 deactivate: () => this.deactivatePage(r)
954 };
955 }));
956 }
957 createPage(e) {
958 return e.scrollTriggers = [], e.indexh = parseInt(e.slideElement.getAttribute("data-index-h"), 10), e.indexv = parseInt(e.slideElement.getAttribute("data-index-v"), 10), e;
959 }
960 syncProgressBar() {
961 this.progressBarInner.querySelectorAll(".scrollbar-slide").forEach((e) => e.remove()), this.activeProgressBarPage = null, this.activeProgressBarTrigger = null, this.getAllPages().forEach((e) => {
962 e.progressBarSlide = null, e.scrollTriggers.forEach((e) => e.progressBarElement = null);
963 });
964 let e = this.viewportElement.scrollHeight, t = this.viewportElement.offsetHeight, n = t / e;
965 this.progressBarHeight = this.progressBarInner.offsetHeight, this.playheadHeight = Math.max(n * this.progressBarHeight, j), this.progressBarScrollableHeight = this.progressBarHeight - this.playheadHeight;
966 let r = t / e * this.progressBarHeight, i = Math.min(r / 8, A);
967 this.progressBarPlayhead.style.height = this.playheadHeight - i + "px", r > se && this.slideTriggers.forEach((e) => {
968 let { page: t } = e;
969 t.progressBarSlide = document.createElement("div"), t.progressBarSlide.className = "scrollbar-slide", t.progressBarSlide.style.top = e.range[0] * this.progressBarHeight + "px", t.progressBarSlide.style.height = (e.range[1] - e.range[0]) * this.progressBarHeight - i + "px", t.progressBarSlide.classList.toggle("has-triggers", t.scrollTriggers.length > 0), this.progressBarInner.appendChild(t.progressBarSlide), t.scrollTriggers.forEach((n, r) => {
970 let a = document.createElement("div");
971 a.className = "scrollbar-trigger", a.style.top = (n.range[0] - e.range[0]) * this.progressBarHeight + "px", a.style.height = (n.range[1] - n.range[0]) * this.progressBarHeight - i + "px", t.progressBarSlide.appendChild(a), r === 0 && (a.style.display = "none"), n.progressBarElement = a;
972 });
973 });
974 }
975 syncScrollPosition() {
976 let e = this.viewportElement.offsetHeight, t = e / this.viewportElement.scrollHeight, n = this.viewportElement.scrollTop, r = this.viewportElement.scrollHeight - e, i = Math.max(Math.min(n / r, 1), 0), a = Math.max(Math.min((n + e / 2) / this.viewportElement.scrollHeight, 1), 0), o, s = null;
977 this.slideTriggers.forEach((e) => {
978 let { page: n } = e;
979 i >= e.range[0] - t * 2 && i <= e.range[1] + t * 2 && !n.loaded ? (n.loaded = !0, this.Reveal.slideContent.load(n.slideElement)) : n.loaded && (n.loaded = !1, this.Reveal.slideContent.unload(n.slideElement)), i >= e.range[0] && i <= e.range[1] ? (this.activateTrigger(e), o = e.page) : e.active && this.deactivateTrigger(e);
980 }), o && o.scrollTriggers.forEach((e) => {
981 a >= e.range[0] && a <= e.range[1] ? (this.activateTrigger(e), s = e) : e.active && this.deactivateTrigger(e);
982 }), this.setProgressBarValue(n / (this.viewportElement.scrollHeight - e), o, s);
983 }
984 setProgressBarValue(e, t = null, n = null) {
985 if (this.progressBar) {
986 if (this.progressBarPlayhead.style.transform = `translateY(${e * this.progressBarScrollableHeight}px)`, this.activeProgressBarPage !== t) {
987 var r, i;
988 (r = this.activeProgressBarPage) == null || (r = r.progressBarSlide) == null || r.classList.remove("active"), t == null || (i = t.progressBarSlide) == null || i.classList.add("active"), this.activeProgressBarPage = t;
989 }
990 if (this.activeProgressBarTrigger !== n) {
991 var a, o;
992 (a = this.activeProgressBarTrigger) == null || (a = a.progressBarElement) == null || a.classList.remove("active"), n == null || (o = n.progressBarElement) == null || o.classList.add("active"), this.activeProgressBarTrigger = n;
993 }
994 this.showProgressBar();
995 }
996 }
997 showProgressBar() {
998 this.progressBar.classList.add("visible"), clearTimeout(this.hideProgressBarTimeout), this.Reveal.getConfig().scrollProgress === "auto" && !this.draggingProgressBar && (this.hideProgressBarTimeout = setTimeout(() => {
999 this.progressBar && this.progressBar.classList.remove("visible");
1000 }, k));
1001 }
1002 prev() {
1003 this.viewportElement.scrollTop -= this.scrollTriggerHeight;
1004 }
1005 next() {
1006 this.viewportElement.scrollTop += this.scrollTriggerHeight;
1007 }
1008 scrollToSlide(e) {
1009 if (!this.active) this.activatedCallbacks.push(() => this.scrollToSlide(e));
1010 else {
1011 let t = this.getScrollTriggerBySlide(e);
1012 t && (this.viewportElement.scrollTop = t.range[0] * (this.viewportElement.scrollHeight - this.viewportElement.offsetHeight));
1013 }
1014 }
1015 storeScrollPosition() {
1016 clearTimeout(this.storeScrollPositionTimeout), this.storeScrollPositionTimeout = setTimeout(() => {
1017 sessionStorage.setItem("reveal-scroll-top", this.viewportElement.scrollTop), sessionStorage.setItem("reveal-scroll-origin", location.origin + location.pathname), this.storeScrollPositionTimeout = null;
1018 }, 50);
1019 }
1020 restoreScrollPosition() {
1021 let e = sessionStorage.getItem("reveal-scroll-top"), t = sessionStorage.getItem("reveal-scroll-origin");
1022 e && t === location.origin + location.pathname && (this.viewportElement.scrollTop = parseInt(e, 10));
1023 }
1024 activatePage(e) {
1025 if (!e.active) {
1026 e.active = !0;
1027 let { slideElement: t, backgroundElement: n, contentElement: r, indexh: i, indexv: a } = e;
1028 r.style.display = "block", t.classList.add("present"), n && n.classList.add("present"), this.Reveal.setCurrentScrollPage(t, i, a), this.Reveal.backgrounds.bubbleSlideContrastClassToElement(t, this.viewportElement), Array.from(r.parentNode.querySelectorAll(".scroll-page-content")).forEach((e) => {
1029 e !== r && (e.style.display = "none");
1030 });
1031 }
1032 }
1033 deactivatePage(e) {
1034 e.active && (e.active = !1, e.slideElement && e.slideElement.classList.remove("present"), e.backgroundElement && e.backgroundElement.classList.remove("present"));
1035 }
1036 activateTrigger(e) {
1037 e.active || (e.active = !0, e.activate());
1038 }
1039 deactivateTrigger(e) {
1040 e.active && (e.active = !1, e.deactivate && e.deactivate());
1041 }
1042 getSlideByIndices(e, t) {
1043 let n = this.getAllPages().find((n) => n.indexh === e && n.indexv === t);
1044 return n ? n.slideElement : null;
1045 }
1046 getScrollTriggerBySlide(e) {
1047 return this.slideTriggers.find((t) => t.page.slideElement === e);
1048 }
1049 getAllPages() {
1050 return this.pages.flatMap((e) => [e, ...e.autoAnimatePages || []]);
1051 }
1052 onScroll() {
1053 this.pendingScrollRaf || (this.pendingScrollRaf = requestAnimationFrame(() => {
1054 this.pendingScrollRaf = 0, this.syncScrollPosition(), this.storeScrollPosition();
1055 }));
1056 }
1057 get viewportElement() {
1058 return this.Reveal.getViewportElement();
1059 }
1060 };
1061 //#endregion
1062 //#region \0@oxc-project+runtime@0.124.0/helpers/asyncToGenerator.js
1063 function M(e, t, n, r, i, a, o) {
1064 try {
1065 var s = e[a](o), c = s.value;
1066 } catch (e) {
1067 n(e);
1068 return;
1069 }
1070 s.done ? t(c) : Promise.resolve(c).then(r, i);
1071 }
1072 function N(e) {
1073 return function() {
1074 var t = this, n = arguments;
1075 return new Promise(function(r, i) {
1076 var a = e.apply(t, n);
1077 function o(e) {
1078 M(a, r, i, o, s, "next", e);
1079 }
1080 function s(e) {
1081 M(a, r, i, o, s, "throw", e);
1082 }
1083 o(void 0);
1084 });
1085 };
1086 }
1087 //#endregion
1088 //#region js/controllers/printview.js
1089 var le = class {
1090 constructor(e) {
1091 this.Reveal = e;
1092 }
1093 activate() {
1094 var e = this;
1095 return N(function* () {
1096 let n = e.Reveal.getConfig(), r = t(e.Reveal.getRevealElement(), C), i = n.slideNumber && /all|print/i.test(n.showSlideNumber), a = e.Reveal.getComputedSlideSize(window.innerWidth, window.innerHeight), o = Math.floor(a.width * (1 + n.margin)), s = Math.floor(a.height * (1 + n.margin)), c = a.width, u = a.height;
1097 yield new Promise(requestAnimationFrame), l("@page{size:" + o + "px " + s + "px; margin: 0px;}"), l(".reveal section>img, .reveal section>video, .reveal section>iframe{max-width: " + c + "px; max-height:" + u + "px}"), document.documentElement.classList.add("reveal-print", "print-pdf"), document.body.style.width = o + "px", document.body.style.height = s + "px";
1098 let d = e.Reveal.getViewportElement(), f;
1099 if (d) {
1100 let e = window.getComputedStyle(d);
1101 e && e.background && (f = e.background);
1102 }
1103 yield new Promise(requestAnimationFrame), e.Reveal.layoutSlideContents(c, u), yield new Promise(requestAnimationFrame);
1104 let p = r.map((e) => e.scrollHeight), m = [], h = r[0].parentNode, g = 1;
1105 r.forEach(function(e, r) {
1106 if (e.classList.contains("stack") === !1) {
1107 let a = (o - c) / 2, l = (s - u) / 2, d = p[r], h = Math.max(Math.ceil(d / s), 1);
1108 h = Math.min(h, n.pdfMaxPagesPerSlide), (h === 1 && n.center || e.classList.contains("center")) && (l = Math.max((s - d) / 2, 0));
1109 let _ = document.createElement("div");
1110 if (m.push(_), _.className = "pdf-page", _.style.height = (s + n.pdfPageHeightOffset) * h + "px", f && (_.style.background = f), _.appendChild(e), e.style.left = a + "px", e.style.top = l + "px", e.style.width = c + "px", this.Reveal.slideContent.layout(e), e.slideBackgroundElement && _.insertBefore(e.slideBackgroundElement, e), n.showNotes) {
1111 let t = this.Reveal.getSlideNotes(e);
1112 if (t) {
1113 let e = typeof n.showNotes == "string" ? n.showNotes : "inline", r = document.createElement("div");
1114 r.classList.add("speaker-notes"), r.classList.add("speaker-notes-pdf"), r.setAttribute("data-layout", e), r.innerHTML = t, e === "separate-page" ? m.push(r) : (r.style.left = "8px", r.style.bottom = "8px", r.style.width = o - 16 + "px", _.appendChild(r));
1115 }
1116 }
1117 if (i) {
1118 let e = document.createElement("div");
1119 e.classList.add("slide-number"), e.classList.add("slide-number-pdf"), e.innerHTML = g++, _.appendChild(e);
1120 }
1121 if (n.pdfSeparateFragments) {
1122 let e = this.Reveal.fragments.sort(_.querySelectorAll(".fragment"), !0), t;
1123 e.forEach(function(e, n) {
1124 t && t.forEach(function(e) {
1125 e.classList.remove("current-fragment");
1126 }), e.forEach(function(e) {
1127 e.classList.add("visible", "current-fragment");
1128 }, this);
1129 let r = _.cloneNode(!0);
1130 if (i) {
1131 let e = r.querySelector(".slide-number-pdf"), t = n + 1;
1132 e.innerHTML += "." + t;
1133 }
1134 m.push(r), t = e;
1135 }, this), e.forEach(function(e) {
1136 e.forEach(function(e) {
1137 e.classList.remove("visible", "current-fragment");
1138 });
1139 });
1140 } else t(_, ".fragment:not(.fade-out)").forEach(function(e) {
1141 e.classList.add("visible");
1142 });
1143 }
1144 }, e), yield new Promise(requestAnimationFrame), m.forEach((e) => h.appendChild(e)), e.Reveal.slideContent.layout(e.Reveal.getSlidesElement()), e.Reveal.dispatchEvent({ type: "pdf-ready" }), d.classList.remove("loading-scroll-mode");
1145 })();
1146 }
1147 isActive() {
1148 return this.Reveal.getConfig().view === "print";
1149 }
1150 }, ue = class {
1151 constructor(e) {
1152 this.Reveal = e;
1153 }
1154 configure(e, t) {
1155 e.fragments === !1 ? this.disable() : t.fragments === !1 && this.enable();
1156 }
1157 disable() {
1158 t(this.Reveal.getSlidesElement(), ".fragment").forEach((e) => {
1159 e.classList.add("visible"), e.classList.remove("current-fragment");
1160 });
1161 }
1162 enable() {
1163 t(this.Reveal.getSlidesElement(), ".fragment").forEach((e) => {
1164 e.classList.remove("visible"), e.classList.remove("current-fragment");
1165 });
1166 }
1167 availableRoutes() {
1168 let e = this.Reveal.getCurrentSlide();
1169 if (e && this.Reveal.getConfig().fragments) {
1170 let t = e.querySelectorAll(".fragment:not(.disabled)"), n = e.querySelectorAll(".fragment:not(.disabled):not(.visible)");
1171 return {
1172 prev: t.length - n.length > 0,
1173 next: !!n.length
1174 };
1175 } else return {
1176 prev: !1,
1177 next: !1
1178 };
1179 }
1180 sort(e, t = !1) {
1181 e = Array.from(e);
1182 let n = [], r = [], i = [];
1183 e.forEach((e) => {
1184 if (e.hasAttribute("data-fragment-index")) {
1185 let t = parseInt(e.getAttribute("data-fragment-index"), 10);
1186 n[t] || (n[t] = []), n[t].push(e);
1187 } else r.push([e]);
1188 }), n = n.concat(r);
1189 let a = 0;
1190 return n.forEach((e) => {
1191 e.forEach((e) => {
1192 i.push(e), e.setAttribute("data-fragment-index", a);
1193 }), a++;
1194 }), t === !0 ? n : i;
1195 }
1196 sortAll() {
1197 this.Reveal.getHorizontalSlides().forEach((e) => {
1198 let n = t(e, "section");
1199 n.forEach((e, t) => {
1200 this.sort(e.querySelectorAll(".fragment"));
1201 }, this), n.length === 0 && this.sort(e.querySelectorAll(".fragment"));
1202 });
1203 }
1204 update(e, t, n = this.Reveal.getCurrentSlide()) {
1205 let r = {
1206 shown: [],
1207 hidden: []
1208 };
1209 if (n && this.Reveal.getConfig().fragments && (t = t || this.sort(n.querySelectorAll(".fragment")), t.length)) {
1210 let i = 0;
1211 if (typeof e != "number") {
1212 let t = this.sort(n.querySelectorAll(".fragment.visible")).pop();
1213 t && (e = parseInt(t.getAttribute("data-fragment-index") || 0, 10));
1214 }
1215 Array.from(t).forEach((t, n) => {
1216 if (t.hasAttribute("data-fragment-index") && (n = parseInt(t.getAttribute("data-fragment-index"), 10)), i = Math.max(i, n), n <= e) {
1217 let i = t.classList.contains("visible");
1218 t.classList.add("visible"), t.classList.remove("current-fragment"), n === e && (this.Reveal.announceStatus(this.Reveal.getStatusText(t)), t.classList.add("current-fragment"), this.Reveal.slideContent.startEmbeddedContent(t)), i || (r.shown.push(t), this.Reveal.dispatchEvent({
1219 target: t,
1220 type: "visible",
1221 bubbles: !1
1222 }));
1223 } else {
1224 let e = t.classList.contains("visible");
1225 t.classList.remove("visible"), t.classList.remove("current-fragment"), e && (this.Reveal.slideContent.stopEmbeddedContent(t), r.hidden.push(t), this.Reveal.dispatchEvent({
1226 target: t,
1227 type: "hidden",
1228 bubbles: !1
1229 }));
1230 }
1231 }), e = typeof e == "number" ? e : -1, e = Math.max(Math.min(e, i), -1), n.setAttribute("data-fragment", e);
1232 }
1233 return r.hidden.length && this.Reveal.dispatchEvent({
1234 type: "fragmenthidden",
1235 data: {
1236 fragment: r.hidden[0],
1237 fragments: r.hidden
1238 }
1239 }), r.shown.length && this.Reveal.dispatchEvent({
1240 type: "fragmentshown",
1241 data: {
1242 fragment: r.shown[0],
1243 fragments: r.shown
1244 }
1245 }), r;
1246 }
1247 sync(e = this.Reveal.getCurrentSlide()) {
1248 return this.sort(e.querySelectorAll(".fragment"));
1249 }
1250 goto(e, t = 0) {
1251 let n = this.Reveal.getCurrentSlide();
1252 if (n && this.Reveal.getConfig().fragments) {
1253 let r = this.sort(n.querySelectorAll(".fragment:not(.disabled)"));
1254 if (r.length) {
1255 if (typeof e != "number") {
1256 let t = this.sort(n.querySelectorAll(".fragment:not(.disabled).visible")).pop();
1257 e = t ? parseInt(t.getAttribute("data-fragment-index") || 0, 10) : -1;
1258 }
1259 e += t;
1260 let i = this.update(e, r);
1261 return this.Reveal.controls.update(), this.Reveal.progress.update(), this.Reveal.getConfig().fragmentInURL && this.Reveal.location.writeURL(), !!(i.shown.length || i.hidden.length);
1262 }
1263 }
1264 return !1;
1265 }
1266 next() {
1267 return this.goto(null, 1);
1268 }
1269 prev() {
1270 return this.goto(null, -1);
1271 }
1272 }, de = class {
1273 constructor(e) {
1274 this.Reveal = e, this.active = !1, this.onSlideClicked = this.onSlideClicked.bind(this);
1275 }
1276 activate() {
1277 if (this.Reveal.getConfig().overview && !this.Reveal.isScrollView() && !this.isActive()) {
1278 this.active = !0, this.Reveal.getRevealElement().classList.add("overview"), this.Reveal.cancelAutoSlide(), this.Reveal.getSlidesElement().appendChild(this.Reveal.getBackgroundsElement()), t(this.Reveal.getRevealElement(), C).forEach((e) => {
1279 e.classList.contains("stack") || e.addEventListener("click", this.onSlideClicked, !0);
1280 });
1281 let e = this.Reveal.getComputedSlideSize();
1282 this.overviewSlideWidth = e.width + 70, this.overviewSlideHeight = e.height + 70, this.Reveal.getConfig().rtl && (this.overviewSlideWidth = -this.overviewSlideWidth), this.Reveal.updateSlidesVisibility(), this.layout(), this.update(), this.Reveal.layout();
1283 let n = this.Reveal.getIndices();
1284 this.Reveal.dispatchEvent({
1285 type: "overviewshown",
1286 data: {
1287 indexh: n.h,
1288 indexv: n.v,
1289 currentSlide: this.Reveal.getCurrentSlide()
1290 }
1291 });
1292 }
1293 }
1294 layout() {
1295 this.Reveal.getHorizontalSlides().forEach((e, n) => {
1296 e.setAttribute("data-index-h", n), i(e, "translate3d(" + n * this.overviewSlideWidth + "px, 0, 0)"), e.classList.contains("stack") && t(e, "section").forEach((e, t) => {
1297 e.setAttribute("data-index-h", n), e.setAttribute("data-index-v", t), i(e, "translate3d(0, " + t * this.overviewSlideHeight + "px, 0)");
1298 });
1299 }), Array.from(this.Reveal.getBackgroundsElement().childNodes).forEach((e, n) => {
1300 i(e, "translate3d(" + n * this.overviewSlideWidth + "px, 0, 0)"), t(e, ".slide-background").forEach((e, t) => {
1301 i(e, "translate3d(0, " + t * this.overviewSlideHeight + "px, 0)");
1302 });
1303 });
1304 }
1305 update() {
1306 let e = Math.min(window.innerWidth, window.innerHeight), t = Math.max(e / 5, 150) / e, n = this.Reveal.getIndices();
1307 this.Reveal.transformSlides({ overview: [
1308 "scale(" + t + ")",
1309 "translateX(" + -n.h * this.overviewSlideWidth + "px)",
1310 "translateY(" + -n.v * this.overviewSlideHeight + "px)"
1311 ].join(" ") });
1312 }
1313 deactivate() {
1314 if (this.Reveal.getConfig().overview) {
1315 this.active = !1, this.Reveal.getRevealElement().classList.remove("overview"), this.Reveal.getRevealElement().classList.add("overview-deactivating"), setTimeout(() => {
1316 this.Reveal.getRevealElement().classList.remove("overview-deactivating");
1317 }, 1), this.Reveal.getRevealElement().appendChild(this.Reveal.getBackgroundsElement()), t(this.Reveal.getRevealElement(), C).forEach((e) => {
1318 i(e, ""), e.removeEventListener("click", this.onSlideClicked, !0);
1319 }), t(this.Reveal.getBackgroundsElement(), ".slide-background").forEach((e) => {
1320 i(e, "");
1321 }), this.Reveal.transformSlides({ overview: "" });
1322 let e = this.Reveal.getIndices();
1323 this.Reveal.slide(e.h, e.v), this.Reveal.layout(), this.Reveal.cueAutoSlide(), this.Reveal.dispatchEvent({
1324 type: "overviewhidden",
1325 data: {
1326 indexh: e.h,
1327 indexv: e.v,
1328 currentSlide: this.Reveal.getCurrentSlide()
1329 }
1330 });
1331 }
1332 }
1333 toggle(e) {
1334 typeof e == "boolean" ? e ? this.activate() : this.deactivate() : this.isActive() ? this.deactivate() : this.activate();
1335 }
1336 isActive() {
1337 return this.active;
1338 }
1339 onSlideClicked(e) {
1340 if (this.isActive()) {
1341 e.preventDefault();
1342 let t = e.target;
1343 for (; t && !t.nodeName.match(/section/gi);) t = t.parentNode;
1344 if (t && !t.classList.contains("disabled") && (this.deactivate(), t.nodeName.match(/section/gi))) {
1345 let e = parseInt(t.getAttribute("data-index-h"), 10), n = parseInt(t.getAttribute("data-index-v"), 10);
1346 this.Reveal.slide(e, n);
1347 }
1348 }
1349 }
1350 }, fe = class {
1351 constructor(e) {
1352 this.Reveal = e, this.shortcuts = {}, this.bindings = {}, this.onDocumentKeyDown = this.onDocumentKeyDown.bind(this);
1353 }
1354 configure(e, t) {
1355 e.navigationMode === "linear" ? (this.shortcuts["&#8594; , &#8595; , SPACE , N , L , J"] = "Next slide", this.shortcuts["&#8592; , &#8593; , P , H , K"] = "Previous slide") : (this.shortcuts["N , SPACE"] = "Next slide", this.shortcuts["P , Shift SPACE"] = "Previous slide", this.shortcuts["&#8592; , H"] = "Navigate left", this.shortcuts["&#8594; , L"] = "Navigate right", this.shortcuts["&#8593; , K"] = "Navigate up", this.shortcuts["&#8595; , J"] = "Navigate down"), this.shortcuts["Alt + &#8592;/&#8593/&#8594;/&#8595;"] = "Navigate without fragments", this.shortcuts["Shift + &#8592;/&#8593/&#8594;/&#8595;"] = "Jump to first/last slide", this.shortcuts["B , ."] = "Pause", this.shortcuts.F = "Fullscreen", this.shortcuts.G = "Jump to slide", this.shortcuts["ESC, O"] = "Slide overview";
1356 }
1357 bind() {
1358 document.addEventListener("keydown", this.onDocumentKeyDown, !1);
1359 }
1360 unbind() {
1361 document.removeEventListener("keydown", this.onDocumentKeyDown, !1);
1362 }
1363 addKeyBinding(e, t) {
1364 typeof e == "object" && e.keyCode ? this.bindings[e.keyCode] = {
1365 callback: t,
1366 key: e.key,
1367 description: e.description
1368 } : this.bindings[e] = {
1369 callback: t,
1370 key: null,
1371 description: null
1372 };
1373 }
1374 removeKeyBinding(e) {
1375 delete this.bindings[e];
1376 }
1377 triggerKey(e) {
1378 this.onDocumentKeyDown({ keyCode: e });
1379 }
1380 registerKeyboardShortcut(e, t) {
1381 this.shortcuts[e] = t;
1382 }
1383 getShortcuts() {
1384 return this.shortcuts;
1385 }
1386 getBindings() {
1387 return this.bindings;
1388 }
1389 onDocumentKeyDown(e) {
1390 let t = this.Reveal.getConfig();
1391 if (typeof t.keyboardCondition == "function" && t.keyboardCondition(e) === !1 || t.keyboardCondition === "focused" && !this.Reveal.isFocused()) return !0;
1392 let n = e.keyCode, r = !this.Reveal.isAutoSliding();
1393 this.Reveal.onUserInput(e);
1394 let i = document.activeElement && document.activeElement.isContentEditable === !0, a = document.activeElement && document.activeElement.tagName && /input|textarea/i.test(document.activeElement.tagName), o = document.activeElement && document.activeElement.className && /speaker-notes/i.test(document.activeElement.className), c = !([
1395 32,
1396 37,
1397 38,
1398 39,
1399 40,
1400 63,
1401 78,
1402 80,
1403 191
1404 ].indexOf(e.keyCode) !== -1 && e.shiftKey || e.altKey) && (e.shiftKey || e.altKey || e.ctrlKey || e.metaKey);
1405 if (i || a || o || c) return;
1406 let l = [
1407 66,
1408 86,
1409 190,
1410 191,
1411 112
1412 ], u;
1413 if (typeof t.keyboard == "object") for (u in t.keyboard) t.keyboard[u] === "togglePause" && l.push(parseInt(u, 10));
1414 if (this.Reveal.isOverlayOpen() && ![
1415 "Escape",
1416 "f",
1417 "c",
1418 "b",
1419 "."
1420 ].includes(e.key) || this.Reveal.isPaused() && l.indexOf(n) === -1) return !1;
1421 let d = t.navigationMode === "linear" || !this.Reveal.hasHorizontalSlides() || !this.Reveal.hasVerticalSlides(), f = !1;
1422 if (typeof t.keyboard == "object") {
1423 for (u in t.keyboard) if (parseInt(u, 10) === n) {
1424 let n = t.keyboard[u];
1425 typeof n == "function" ? n.apply(null, [e]) : typeof n == "string" && typeof this.Reveal[n] == "function" && this.Reveal[n].call(), f = !0;
1426 }
1427 }
1428 if (f === !1) {
1429 for (u in this.bindings) if (parseInt(u, 10) === n) {
1430 let t = this.bindings[u].callback;
1431 typeof t == "function" ? t.apply(null, [e]) : typeof t == "string" && typeof this.Reveal[t] == "function" && this.Reveal[t].call(), f = !0;
1432 }
1433 }
1434 f === !1 && (f = !0, n === 80 || n === 33 ? this.Reveal.prev({ skipFragments: e.altKey }) : n === 78 || n === 34 ? this.Reveal.next({ skipFragments: e.altKey }) : n === 72 || n === 37 ? e.shiftKey ? this.Reveal.slide(0) : !this.Reveal.overview.isActive() && d ? t.rtl ? this.Reveal.next({ skipFragments: e.altKey }) : this.Reveal.prev({ skipFragments: e.altKey }) : this.Reveal.left({ skipFragments: e.altKey }) : n === 76 || n === 39 ? e.shiftKey ? this.Reveal.slide(this.Reveal.getHorizontalSlides().length - 1) : !this.Reveal.overview.isActive() && d ? t.rtl ? this.Reveal.prev({ skipFragments: e.altKey }) : this.Reveal.next({ skipFragments: e.altKey }) : this.Reveal.right({ skipFragments: e.altKey }) : n === 75 || n === 38 ? e.shiftKey ? this.Reveal.slide(void 0, 0) : !this.Reveal.overview.isActive() && d ? this.Reveal.prev({ skipFragments: e.altKey }) : this.Reveal.up({ skipFragments: e.altKey }) : n === 74 || n === 40 ? e.shiftKey ? this.Reveal.slide(void 0, Number.MAX_VALUE) : !this.Reveal.overview.isActive() && d ? this.Reveal.next({ skipFragments: e.altKey }) : this.Reveal.down({ skipFragments: e.altKey }) : n === 36 ? this.Reveal.slide(0) : n === 35 ? this.Reveal.slide(this.Reveal.getHorizontalSlides().length - 1) : n === 32 ? (this.Reveal.overview.isActive() && this.Reveal.overview.deactivate(), e.shiftKey ? this.Reveal.prev({ skipFragments: e.altKey }) : this.Reveal.next({ skipFragments: e.altKey })) : [
1435 58,
1436 59,
1437 66,
1438 86,
1439 190
1440 ].includes(n) || n === 191 && !e.shiftKey ? this.Reveal.togglePause() : n === 70 ? s(t.embedded ? this.Reveal.getViewportElement() : document.documentElement) : n === 65 ? t.autoSlideStoppable && this.Reveal.toggleAutoSlide(r) : n === 71 ? t.jumpToSlide && this.Reveal.toggleJumpToSlide() : n === 67 && this.Reveal.isOverlayOpen() ? this.Reveal.closeOverlay() : (n === 63 || n === 191) && e.shiftKey || n === 112 ? this.Reveal.toggleHelp() : f = !1), f ? e.preventDefault && e.preventDefault() : n === 27 || n === 79 ? (this.Reveal.closeOverlay() === !1 && this.Reveal.overview.toggle(), e.preventDefault && e.preventDefault()) : n === 13 && this.Reveal.overview.isActive() && (this.Reveal.overview.deactivate(), e.preventDefault && e.preventDefault()), this.Reveal.cueAutoSlide();
1441 }
1442 };
1443 //#endregion
1444 //#region \0@oxc-project+runtime@0.124.0/helpers/objectSpread2.js
1445 function P(e, t) {
1446 var n = Object.keys(e);
1447 if (Object.getOwnPropertySymbols) {
1448 var r = Object.getOwnPropertySymbols(e);
1449 t && (r = r.filter(function(t) {
1450 return Object.getOwnPropertyDescriptor(e, t).enumerable;
1451 })), n.push.apply(n, r);
1452 }
1453 return n;
1454 }
1455 function F(e) {
1456 for (var t = 1; t < arguments.length; t++) {
1457 var n = arguments[t] == null ? {} : arguments[t];
1458 t % 2 ? P(Object(n), !0).forEach(function(t) {
1459 S(e, t, n[t]);
1460 }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(n)) : P(Object(n)).forEach(function(t) {
1461 Object.defineProperty(e, t, Object.getOwnPropertyDescriptor(n, t));
1462 });
1463 }
1464 return e;
1465 }
1466 //#endregion
1467 //#region js/controllers/location.js
1468 var pe = class {
1469 constructor(e) {
1470 S(this, "MAX_REPLACE_STATE_FREQUENCY", 1e3), this.Reveal = e, this.writeURLTimeout = 0, this.replaceStateTimestamp = 0, this.onWindowHashChange = this.onWindowHashChange.bind(this);
1471 }
1472 bind() {
1473 window.addEventListener("hashchange", this.onWindowHashChange, !1);
1474 }
1475 unbind() {
1476 window.removeEventListener("hashchange", this.onWindowHashChange, !1);
1477 }
1478 getIndicesFromHash(e = window.location.hash, t = {}) {
1479 let n = e.replace(/^#\/?/, ""), r = n.split("/");
1480 if (!/^[0-9]*$/.test(r[0]) && n.length) {
1481 let e, t;
1482 /\/[-\d]+$/g.test(n) && (t = parseInt(n.split("/").pop(), 10), t = isNaN(t) ? void 0 : t, n = n.split("/").shift());
1483 try {
1484 let t = decodeURIComponent(n);
1485 e = (document.getElementById(t) || document.querySelector(`[data-id="${t}"]`)).closest(".slides section");
1486 } catch (e) {}
1487 if (e) return F(F({}, this.Reveal.getIndices(e)), {}, { f: t });
1488 } else {
1489 let e = this.Reveal.getConfig(), n = e.hashOneBasedIndex || t.oneBasedIndex ? 1 : 0, i = parseInt(r[0], 10) - n || 0, a = parseInt(r[1], 10) - n || 0, o;
1490 return e.fragmentInURL && (o = parseInt(r[2], 10), isNaN(o) && (o = void 0)), {
1491 h: i,
1492 v: a,
1493 f: o
1494 };
1495 }
1496 return null;
1497 }
1498 readURL() {
1499 let e = this.Reveal.getIndices(), t = this.getIndicesFromHash();
1500 t ? (t.h !== e.h || t.v !== e.v || t.f !== void 0) && this.Reveal.slide(t.h, t.v, t.f) : this.Reveal.slide(e.h || 0, e.v || 0);
1501 }
1502 writeURL(e) {
1503 let t = this.Reveal.getConfig(), n = this.Reveal.getCurrentSlide();
1504 if (clearTimeout(this.writeURLTimeout), typeof e == "number") this.writeURLTimeout = setTimeout(this.writeURL, e);
1505 else if (n) {
1506 let e = this.getHash();
1507 t.history ? window.location.hash = e : t.hash && (e === "/" ? this.debouncedReplaceState(window.location.pathname + window.location.search) : this.debouncedReplaceState("#" + e));
1508 }
1509 }
1510 replaceState(e) {
1511 window.history.replaceState(null, null, e), this.replaceStateTimestamp = Date.now();
1512 }
1513 debouncedReplaceState(e) {
1514 clearTimeout(this.replaceStateTimeout), Date.now() - this.replaceStateTimestamp > this.MAX_REPLACE_STATE_FREQUENCY ? this.replaceState(e) : this.replaceStateTimeout = setTimeout(() => this.replaceState(e), this.MAX_REPLACE_STATE_FREQUENCY);
1515 }
1516 getHash(e) {
1517 let t = "/", n = e || this.Reveal.getCurrentSlide(), r = n ? n.getAttribute("id") : null;
1518 r && (r = encodeURIComponent(r));
1519 let i = this.Reveal.getIndices(e);
1520 if (this.Reveal.getConfig().fragmentInURL || (i.f = void 0), typeof r == "string" && r.length) t = "/" + r, i.f >= 0 && (t += "/" + i.f);
1521 else {
1522 let e = +!!this.Reveal.getConfig().hashOneBasedIndex;
1523 (i.h > 0 || i.v > 0 || i.f >= 0) && (t += i.h + e), (i.v > 0 || i.f >= 0) && (t += "/" + (i.v + e)), i.f >= 0 && (t += "/" + i.f);
1524 }
1525 return t;
1526 }
1527 onWindowHashChange(e) {
1528 this.readURL();
1529 }
1530 }, me = class {
1531 constructor(e) {
1532 this.Reveal = e, this.onNavigateLeftClicked = this.onNavigateLeftClicked.bind(this), this.onNavigateRightClicked = this.onNavigateRightClicked.bind(this), this.onNavigateUpClicked = this.onNavigateUpClicked.bind(this), this.onNavigateDownClicked = this.onNavigateDownClicked.bind(this), this.onNavigatePrevClicked = this.onNavigatePrevClicked.bind(this), this.onNavigateNextClicked = this.onNavigateNextClicked.bind(this), this.onEnterFullscreen = this.onEnterFullscreen.bind(this);
1533 }
1534 render() {
1535 let e = this.Reveal.getConfig().rtl, n = this.Reveal.getRevealElement();
1536 this.element = document.createElement("aside"), this.element.className = "controls", this.element.innerHTML = `<button class="navigate-left" aria-label="${e ? "next slide" : "previous slide"}"><div class="controls-arrow"></div></button>
1537 <button class="navigate-right" aria-label="${e ? "previous slide" : "next slide"}"><div class="controls-arrow"></div></button>
1538 <button class="navigate-up" aria-label="above slide"><div class="controls-arrow"></div></button>
1539 <button class="navigate-down" aria-label="below slide"><div class="controls-arrow"></div></button>`, this.Reveal.getRevealElement().appendChild(this.element), this.controlsLeft = t(n, ".navigate-left"), this.controlsRight = t(n, ".navigate-right"), this.controlsUp = t(n, ".navigate-up"), this.controlsDown = t(n, ".navigate-down"), this.controlsPrev = t(n, ".navigate-prev"), this.controlsNext = t(n, ".navigate-next"), this.controlsFullscreen = t(n, ".enter-fullscreen"), this.controlsRightArrow = this.element.querySelector(".navigate-right"), this.controlsLeftArrow = this.element.querySelector(".navigate-left"), this.controlsDownArrow = this.element.querySelector(".navigate-down");
1540 }
1541 configure(e, t) {
1542 let n = e.controls === "speaker" || e.controls === "speaker-only";
1543 this.element.style.display = e.controls && (!n || this.Reveal.isSpeakerNotes()) ? "block" : "none", this.element.setAttribute("data-controls-layout", e.controlsLayout), this.element.setAttribute("data-controls-back-arrows", e.controlsBackArrows);
1544 }
1545 bind() {
1546 let e = ["touchstart", "click"];
1547 _ && (e = ["touchend"]), e.forEach((e) => {
1548 this.controlsLeft.forEach((t) => t.addEventListener(e, this.onNavigateLeftClicked, !1)), this.controlsRight.forEach((t) => t.addEventListener(e, this.onNavigateRightClicked, !1)), this.controlsUp.forEach((t) => t.addEventListener(e, this.onNavigateUpClicked, !1)), this.controlsDown.forEach((t) => t.addEventListener(e, this.onNavigateDownClicked, !1)), this.controlsPrev.forEach((t) => t.addEventListener(e, this.onNavigatePrevClicked, !1)), this.controlsNext.forEach((t) => t.addEventListener(e, this.onNavigateNextClicked, !1)), this.controlsFullscreen.forEach((t) => t.addEventListener(e, this.onEnterFullscreen, !1));
1549 });
1550 }
1551 unbind() {
1552 [
1553 "touchstart",
1554 "touchend",
1555 "click"
1556 ].forEach((e) => {
1557 this.controlsLeft.forEach((t) => t.removeEventListener(e, this.onNavigateLeftClicked, !1)), this.controlsRight.forEach((t) => t.removeEventListener(e, this.onNavigateRightClicked, !1)), this.controlsUp.forEach((t) => t.removeEventListener(e, this.onNavigateUpClicked, !1)), this.controlsDown.forEach((t) => t.removeEventListener(e, this.onNavigateDownClicked, !1)), this.controlsPrev.forEach((t) => t.removeEventListener(e, this.onNavigatePrevClicked, !1)), this.controlsNext.forEach((t) => t.removeEventListener(e, this.onNavigateNextClicked, !1)), this.controlsFullscreen.forEach((t) => t.removeEventListener(e, this.onEnterFullscreen, !1));
1558 });
1559 }
1560 update() {
1561 let e = this.Reveal.availableRoutes();
1562 [
1563 ...this.controlsLeft,
1564 ...this.controlsRight,
1565 ...this.controlsUp,
1566 ...this.controlsDown,
1567 ...this.controlsPrev,
1568 ...this.controlsNext
1569 ].forEach((e) => {
1570 e.classList.remove("enabled", "fragmented"), e.setAttribute("disabled", "disabled");
1571 }), e.left && this.controlsLeft.forEach((e) => {
1572 e.classList.add("enabled"), e.removeAttribute("disabled");
1573 }), e.right && this.controlsRight.forEach((e) => {
1574 e.classList.add("enabled"), e.removeAttribute("disabled");
1575 }), e.up && this.controlsUp.forEach((e) => {
1576 e.classList.add("enabled"), e.removeAttribute("disabled");
1577 }), e.down && this.controlsDown.forEach((e) => {
1578 e.classList.add("enabled"), e.removeAttribute("disabled");
1579 }), (e.left || e.up) && this.controlsPrev.forEach((e) => {
1580 e.classList.add("enabled"), e.removeAttribute("disabled");
1581 }), (e.right || e.down) && this.controlsNext.forEach((e) => {
1582 e.classList.add("enabled"), e.removeAttribute("disabled");
1583 });
1584 let t = this.Reveal.getCurrentSlide();
1585 if (t) {
1586 let e = this.Reveal.fragments.availableRoutes();
1587 e.prev && this.controlsPrev.forEach((e) => {
1588 e.classList.add("fragmented", "enabled"), e.removeAttribute("disabled");
1589 }), e.next && this.controlsNext.forEach((e) => {
1590 e.classList.add("fragmented", "enabled"), e.removeAttribute("disabled");
1591 });
1592 let n = this.Reveal.isVerticalSlide(t), r = n && t.parentElement && t.parentElement.querySelectorAll(":scope > section").length > 1;
1593 n && r ? (e.prev && this.controlsUp.forEach((e) => {
1594 e.classList.add("fragmented", "enabled"), e.removeAttribute("disabled");
1595 }), e.next && this.controlsDown.forEach((e) => {
1596 e.classList.add("fragmented", "enabled"), e.removeAttribute("disabled");
1597 })) : (e.prev && this.controlsLeft.forEach((e) => {
1598 e.classList.add("fragmented", "enabled"), e.removeAttribute("disabled");
1599 }), e.next && this.controlsRight.forEach((e) => {
1600 e.classList.add("fragmented", "enabled"), e.removeAttribute("disabled");
1601 }));
1602 }
1603 if (this.Reveal.getConfig().controlsTutorial) {
1604 let t = this.Reveal.getIndices();
1605 !this.Reveal.hasNavigatedVertically() && e.down ? this.controlsDownArrow.classList.add("highlight") : (this.controlsDownArrow.classList.remove("highlight"), this.Reveal.getConfig().rtl ? !this.Reveal.hasNavigatedHorizontally() && e.left && t.v === 0 ? this.controlsLeftArrow.classList.add("highlight") : this.controlsLeftArrow.classList.remove("highlight") : !this.Reveal.hasNavigatedHorizontally() && e.right && t.v === 0 ? this.controlsRightArrow.classList.add("highlight") : this.controlsRightArrow.classList.remove("highlight"));
1606 }
1607 }
1608 destroy() {
1609 this.unbind(), this.element.remove();
1610 }
1611 onNavigateLeftClicked(e) {
1612 e.preventDefault(), this.Reveal.onUserInput(), this.Reveal.getConfig().navigationMode === "linear" ? this.Reveal.prev() : this.Reveal.left();
1613 }
1614 onNavigateRightClicked(e) {
1615 e.preventDefault(), this.Reveal.onUserInput(), this.Reveal.getConfig().navigationMode === "linear" ? this.Reveal.next() : this.Reveal.right();
1616 }
1617 onNavigateUpClicked(e) {
1618 e.preventDefault(), this.Reveal.onUserInput(), this.Reveal.up();
1619 }
1620 onNavigateDownClicked(e) {
1621 e.preventDefault(), this.Reveal.onUserInput(), this.Reveal.down();
1622 }
1623 onNavigatePrevClicked(e) {
1624 e.preventDefault(), this.Reveal.onUserInput(), this.Reveal.prev();
1625 }
1626 onNavigateNextClicked(e) {
1627 e.preventDefault(), this.Reveal.onUserInput(), this.Reveal.next();
1628 }
1629 onEnterFullscreen(e) {
1630 let t = this.Reveal.getConfig(), n = this.Reveal.getViewportElement();
1631 s(t.embedded ? n : n.parentElement);
1632 }
1633 }, he = class {
1634 constructor(e) {
1635 this.Reveal = e, this.onProgressClicked = this.onProgressClicked.bind(this);
1636 }
1637 render() {
1638 this.element = document.createElement("div"), this.element.className = "progress", this.Reveal.getRevealElement().appendChild(this.element), this.bar = document.createElement("span"), this.element.appendChild(this.bar);
1639 }
1640 configure(e, t) {
1641 this.element.style.display = e.progress ? "block" : "none";
1642 }
1643 bind() {
1644 this.Reveal.getConfig().progress && this.element && this.element.addEventListener("click", this.onProgressClicked, !1);
1645 }
1646 unbind() {
1647 this.Reveal.getConfig().progress && this.element && this.element.removeEventListener("click", this.onProgressClicked, !1);
1648 }
1649 update() {
1650 if (this.Reveal.getConfig().progress && this.bar) {
1651 let e = this.Reveal.getProgress();
1652 this.Reveal.getTotalSlides() < 2 && (e = 0), this.bar.style.transform = "scaleX(" + e + ")";
1653 }
1654 }
1655 getMaxWidth() {
1656 return this.Reveal.getRevealElement().offsetWidth;
1657 }
1658 onProgressClicked(e) {
1659 this.Reveal.onUserInput(e), e.preventDefault();
1660 let t = this.Reveal.getSlides(), n = t.length, r = Math.floor(e.clientX / this.getMaxWidth() * n);
1661 this.Reveal.getConfig().rtl && (r = n - r);
1662 let i = this.Reveal.getIndices(t[r]);
1663 this.Reveal.slide(i.h, i.v);
1664 }
1665 destroy() {
1666 this.element.remove();
1667 }
1668 }, ge = class {
1669 constructor(e) {
1670 this.Reveal = e, this.lastMouseWheelStep = 0, this.cursorHidden = !1, this.cursorInactiveTimeout = 0, this.onDocumentCursorActive = this.onDocumentCursorActive.bind(this), this.onDocumentMouseScroll = this.onDocumentMouseScroll.bind(this);
1671 }
1672 configure(e, t) {
1673 e.mouseWheel ? document.addEventListener("wheel", this.onDocumentMouseScroll, !1) : document.removeEventListener("wheel", this.onDocumentMouseScroll, !1), e.hideInactiveCursor ? (document.addEventListener("mousemove", this.onDocumentCursorActive, !1), document.addEventListener("mousedown", this.onDocumentCursorActive, !1)) : (this.showCursor(), document.removeEventListener("mousemove", this.onDocumentCursorActive, !1), document.removeEventListener("mousedown", this.onDocumentCursorActive, !1));
1674 }
1675 showCursor() {
1676 this.cursorHidden && (this.cursorHidden = !1, this.Reveal.getRevealElement().style.cursor = "");
1677 }
1678 hideCursor() {
1679 this.cursorHidden === !1 && (this.cursorHidden = !0, this.Reveal.getRevealElement().style.cursor = "none");
1680 }
1681 destroy() {
1682 this.showCursor(), document.removeEventListener("wheel", this.onDocumentMouseScroll, !1), document.removeEventListener("mousemove", this.onDocumentCursorActive, !1), document.removeEventListener("mousedown", this.onDocumentCursorActive, !1);
1683 }
1684 onDocumentCursorActive(e) {
1685 this.showCursor(), clearTimeout(this.cursorInactiveTimeout), this.cursorInactiveTimeout = setTimeout(this.hideCursor.bind(this), this.Reveal.getConfig().hideCursorTime);
1686 }
1687 onDocumentMouseScroll(e) {
1688 if (Date.now() - this.lastMouseWheelStep > 1e3) {
1689 this.lastMouseWheelStep = Date.now();
1690 let t = e.detail || -e.wheelDelta;
1691 t > 0 ? this.Reveal.next() : t < 0 && this.Reveal.prev();
1692 }
1693 }
1694 }, _e = (e, t) => {
1695 let n = document.createElement("script");
1696 n.type = "text/javascript", n.async = !1, n.defer = !1, n.src = e, typeof t == "function" && (n.onload = (e) => {
1697 e.type === "load" && (n.onload = n.onerror = null, t());
1698 }, n.onerror = (e) => {
1699 n.onload = n.onerror = null, t(/* @__PURE__ */ Error("Failed loading script: " + n.src + "\n" + e));
1700 });
1701 let r = document.querySelector("head");
1702 r && r.insertBefore(n, r.lastChild);
1703 }, ve = class {
1704 constructor(e) {
1705 this.Reveal = e, this.state = "idle", this.registeredPlugins = {}, this.asyncDependencies = [];
1706 }
1707 load(e, t) {
1708 return this.state = "loading", e.forEach(this.registerPlugin.bind(this)), new Promise((e) => {
1709 let n = [], r = 0;
1710 if (t.forEach((e) => {
1711 (!e.condition || e.condition()) && (e.async ? this.asyncDependencies.push(e) : n.push(e));
1712 }), n.length) {
1713 r = n.length;
1714 let t = (t) => {
1715 t && typeof t.callback == "function" && t.callback(), --r === 0 && this.initPlugins().then(e);
1716 };
1717 n.forEach((e) => {
1718 typeof e.id == "string" ? (this.registerPlugin(e), t(e)) : typeof e.src == "string" ? _e(e.src, () => t(e)) : (console.warn("Unrecognized plugin format", e), t());
1719 });
1720 } else this.initPlugins().then(e);
1721 });
1722 }
1723 initPlugins() {
1724 return new Promise((e) => {
1725 let t = Object.values(this.registeredPlugins), n = t.length;
1726 if (n === 0) this.loadAsync().then(e);
1727 else {
1728 let r, i = () => {
1729 --n === 0 ? this.loadAsync().then(e) : r();
1730 }, a = 0;
1731 r = () => {
1732 let e = t[a++];
1733 if (typeof e.init == "function") {
1734 let t = e.init(this.Reveal);
1735 t && typeof t.then == "function" ? t.then(i) : i();
1736 } else i();
1737 }, r();
1738 }
1739 });
1740 }
1741 loadAsync() {
1742 return this.state = "loaded", this.asyncDependencies.length && this.asyncDependencies.forEach((e) => {
1743 _e(e.src, e.callback);
1744 }), Promise.resolve();
1745 }
1746 registerPlugin(e) {
1747 arguments.length === 2 && typeof arguments[0] == "string" ? (e = arguments[1], e.id = arguments[0]) : typeof e == "function" && (e = e());
1748 let t = e.id;
1749 typeof t == "string" ? this.registeredPlugins[t] === void 0 ? (this.registeredPlugins[t] = e, this.state === "loaded" && typeof e.init == "function" && e.init(this.Reveal)) : console.warn("reveal.js: \"" + t + "\" plugin has already been registered") : console.warn("Unrecognized plugin format; can't find plugin.id", e);
1750 }
1751 hasPlugin(e) {
1752 return !!this.registeredPlugins[e];
1753 }
1754 getPlugin(e) {
1755 return this.registeredPlugins[e];
1756 }
1757 getRegisteredPlugins() {
1758 return this.registeredPlugins;
1759 }
1760 destroy() {
1761 Object.values(this.registeredPlugins).forEach((e) => {
1762 typeof e.destroy == "function" && e.destroy();
1763 }), this.registeredPlugins = {}, this.asyncDependencies = [];
1764 }
1765 }, ye = class {
1766 constructor(e) {
1767 this.Reveal = e, this.onSlidesClicked = this.onSlidesClicked.bind(this), this.iframeTriggerSelector = null, this.mediaTriggerSelector = "[data-preview-image], [data-preview-video]", this.stateProps = [
1768 "previewIframe",
1769 "previewImage",
1770 "previewVideo",
1771 "previewFit"
1772 ], this.state = {};
1773 }
1774 update() {
1775 this.Reveal.getConfig().previewLinks ? this.iframeTriggerSelector = "a[href]:not([data-preview-link=false]), [data-preview-link]:not(a):not([data-preview-link=false])" : this.iframeTriggerSelector = "[data-preview-link]:not([data-preview-link=false])";
1776 let e = this.Reveal.getSlidesElement().querySelectorAll(this.iframeTriggerSelector).length > 0, t = this.Reveal.getSlidesElement().querySelectorAll(this.mediaTriggerSelector).length > 0;
1777 e || t ? this.Reveal.getSlidesElement().addEventListener("click", this.onSlidesClicked, !1) : this.Reveal.getSlidesElement().removeEventListener("click", this.onSlidesClicked, !1);
1778 }
1779 createOverlay(e) {
1780 this.dom = document.createElement("div"), this.dom.classList.add("r-overlay"), this.dom.classList.add(e), this.viewport = document.createElement("div"), this.viewport.classList.add("r-overlay-viewport"), this.dom.appendChild(this.viewport), this.Reveal.getRevealElement().appendChild(this.dom);
1781 }
1782 previewIframe(e) {
1783 this.close(), this.state = { previewIframe: e }, this.createOverlay("r-overlay-preview"), this.dom.dataset.state = "loading", this.viewport.innerHTML = `<header class="r-overlay-header">
1784 <a class="r-overlay-header-button r-overlay-external" href="${e}" target="_blank"><span class="icon"></span></a>
1785 <button class="r-overlay-header-button r-overlay-close"><span class="icon"></span></button>
1786 </header>
1787 <div class="r-overlay-spinner"></div>
1788 <div class="r-overlay-content">
1789 <iframe src="${e}"></iframe>
1790 <small class="r-overlay-content-inner">
1791 <span class="r-overlay-error x-frame-error">Unable to load iframe. This is likely due to the site's policy (x-frame-options).</span>
1792 </small>
1793 </div>`, this.dom.querySelector("iframe").addEventListener("load", (e) => {
1794 this.dom.dataset.state = "loaded";
1795 }, !1), this.dom.querySelector(".r-overlay-close").addEventListener("click", (e) => {
1796 this.close(), e.preventDefault();
1797 }, !1), this.dom.querySelector(".r-overlay-external").addEventListener("click", (e) => {
1798 this.close();
1799 }, !1), this.Reveal.dispatchEvent({
1800 type: "previewiframe",
1801 data: { url: e }
1802 });
1803 }
1804 previewMedia(e, t, n) {
1805 if (t !== "image" && t !== "video") {
1806 console.warn("Please specify a valid media type to preview (image|video)");
1807 return;
1808 }
1809 this.close(), n = n || "scale-down", this.createOverlay("r-overlay-preview"), this.dom.dataset.state = "loading", this.dom.dataset.previewFit = n, this.viewport.innerHTML = "<header class=\"r-overlay-header\">\n <button class=\"r-overlay-header-button r-overlay-close\">Esc <span class=\"icon\"></span></button>\n </header>\n <div class=\"r-overlay-spinner\"></div>\n <div class=\"r-overlay-content\"></div>";
1810 let r = this.dom.querySelector(".r-overlay-content");
1811 if (t === "image") {
1812 this.state = {
1813 previewImage: e,
1814 previewFit: n
1815 };
1816 let t = document.createElement("img", {});
1817 t.src = e, r.appendChild(t), t.addEventListener("load", () => {
1818 this.dom.dataset.state = "loaded";
1819 }, !1), t.addEventListener("error", () => {
1820 this.dom.dataset.state = "error", r.innerHTML = "<span class=\"r-overlay-error\">Unable to load image.</span>";
1821 }, !1), this.dom.style.cursor = "zoom-out", this.dom.addEventListener("click", (e) => {
1822 this.close();
1823 }, !1), this.Reveal.dispatchEvent({
1824 type: "previewimage",
1825 data: { url: e }
1826 });
1827 } else if (t === "video") {
1828 this.state = {
1829 previewVideo: e,
1830 previewFit: n
1831 };
1832 let t = document.createElement("video");
1833 t.autoplay = this.dom.dataset.previewAutoplay !== "false", t.controls = this.dom.dataset.previewControls !== "false", t.loop = this.dom.dataset.previewLoop === "true", t.muted = this.dom.dataset.previewMuted === "true", t.playsInline = !0, t.src = e, r.appendChild(t), t.addEventListener("loadeddata", () => {
1834 this.dom.dataset.state = "loaded";
1835 }, !1), t.addEventListener("error", () => {
1836 this.dom.dataset.state = "error", r.innerHTML = "<span class=\"r-overlay-error\">Unable to load video.</span>";
1837 }, !1), this.Reveal.dispatchEvent({
1838 type: "previewvideo",
1839 data: { url: e }
1840 });
1841 } else throw Error("Please specify a valid media type to preview");
1842 this.dom.querySelector(".r-overlay-close").addEventListener("click", (e) => {
1843 this.close(), e.preventDefault();
1844 }, !1);
1845 }
1846 previewImage(e, t) {
1847 this.previewMedia(e, "image", t);
1848 }
1849 previewVideo(e, t) {
1850 this.previewMedia(e, "video", t);
1851 }
1852 toggleHelp(e) {
1853 typeof e == "boolean" ? e ? this.showHelp() : this.close() : this.dom ? this.close() : this.showHelp();
1854 }
1855 showHelp() {
1856 if (this.Reveal.getConfig().help) {
1857 this.close(), this.createOverlay("r-overlay-help");
1858 let e = "<p class=\"title\">Keyboard Shortcuts</p>", t = this.Reveal.keyboard.getShortcuts(), n = this.Reveal.keyboard.getBindings();
1859 e += "<table><th>KEY</th><th>ACTION</th>";
1860 for (let n in t) e += `<tr><td>${n}</td><td>${t[n]}</td></tr>`;
1861 for (let t in n) n[t].key && n[t].description && (e += `<tr><td>${n[t].key}</td><td>${n[t].description}</td></tr>`);
1862 e += "</table>", this.viewport.innerHTML = `
1863 <header class="r-overlay-header">
1864 <button class="r-overlay-header-button r-overlay-close">Esc <span class="icon"></span></button>
1865 </header>
1866 <div class="r-overlay-content">
1867 <div class="r-overlay-help-content">${e}</div>
1868 </div>
1869 `, this.dom.querySelector(".r-overlay-close").addEventListener("click", (e) => {
1870 this.close(), e.preventDefault();
1871 }, !1), this.Reveal.dispatchEvent({ type: "showhelp" });
1872 }
1873 }
1874 isOpen() {
1875 return !!this.dom;
1876 }
1877 close() {
1878 return this.dom ? (this.dom.remove(), this.dom = null, this.state = {}, this.Reveal.dispatchEvent({ type: "closeoverlay" }), !0) : !1;
1879 }
1880 getState() {
1881 return this.state;
1882 }
1883 setState(e) {
1884 this.stateProps.every((t) => this.state[t] === e[t]) || (e.previewIframe ? this.previewIframe(e.previewIframe) : e.previewImage ? this.previewImage(e.previewImage, e.previewFit) : e.previewVideo ? this.previewVideo(e.previewVideo, e.previewFit) : this.close());
1885 }
1886 onSlidesClicked(e) {
1887 let t = e.target, n = t.closest(this.iframeTriggerSelector), r = t.closest(this.mediaTriggerSelector);
1888 if (n) {
1889 if (e.metaKey || e.shiftKey || e.altKey) return;
1890 let t = n.getAttribute("data-preview-link"), r = typeof t == "string" && t.startsWith("http") ? t : n.getAttribute("href");
1891 r && (this.previewIframe(r), e.preventDefault());
1892 } else if (r) {
1893 if (r.hasAttribute("data-preview-image")) {
1894 let t = r.dataset.previewImage || r.getAttribute("src");
1895 t && (this.previewImage(t, r.dataset.previewFit), e.preventDefault());
1896 } else if (r.hasAttribute("data-preview-video")) {
1897 let t = r.dataset.previewVideo || r.getAttribute("src");
1898 if (!t) {
1899 let e = r.querySelector("source");
1900 e && (t = e.getAttribute("src"));
1901 }
1902 t && (this.previewVideo(t, r.dataset.previewFit), e.preventDefault());
1903 }
1904 }
1905 }
1906 destroy() {
1907 this.close();
1908 }
1909 }, I = 40, be = class {
1910 constructor(e) {
1911 this.Reveal = e, this.touchStartX = 0, this.touchStartY = 0, this.touchStartCount = 0, this.touchCaptured = !1, this.activePointers = /* @__PURE__ */ new Map(), this.onPointerDown = this.onPointerDown.bind(this), this.onPointerMove = this.onPointerMove.bind(this), this.onPointerUp = this.onPointerUp.bind(this), this.onPointerCancel = this.onPointerCancel.bind(this), this.onTouchStart = this.onTouchStart.bind(this), this.onTouchMove = this.onTouchMove.bind(this), this.onTouchEnd = this.onTouchEnd.bind(this);
1912 }
1913 bind() {
1914 let e = this.Reveal.getRevealElement();
1915 "onpointerdown" in window ? (e.addEventListener("pointerdown", this.onPointerDown, !1), e.addEventListener("pointermove", this.onPointerMove, !1), e.addEventListener("pointerup", this.onPointerUp, !1), e.addEventListener("pointercancel", this.onPointerCancel, !1)) : (e.addEventListener("touchstart", this.onTouchStart, !1), e.addEventListener("touchmove", this.onTouchMove, !1), e.addEventListener("touchend", this.onTouchEnd, !1));
1916 }
1917 unbind() {
1918 let e = this.Reveal.getRevealElement();
1919 e.removeEventListener("pointerdown", this.onPointerDown, !1), e.removeEventListener("pointermove", this.onPointerMove, !1), e.removeEventListener("pointerup", this.onPointerUp, !1), e.removeEventListener("pointercancel", this.onPointerCancel, !1), e.removeEventListener("touchstart", this.onTouchStart, !1), e.removeEventListener("touchmove", this.onTouchMove, !1), e.removeEventListener("touchend", this.onTouchEnd, !1);
1920 }
1921 isSwipePrevented(e) {
1922 if (a(e, "video[controls], audio[controls]")) return !0;
1923 for (; e && typeof e.hasAttribute == "function";) {
1924 if (e.hasAttribute("data-prevent-swipe")) return !0;
1925 e = e.parentNode;
1926 }
1927 return !1;
1928 }
1929 onTouchStart(e) {
1930 if (this.touchCaptured = !1, this.isSwipePrevented(e.target)) return !0;
1931 this.touchStartX = e.touches[0].clientX, this.touchStartY = e.touches[0].clientY, this.touchStartCount = e.touches.length;
1932 }
1933 onTouchMove(e) {
1934 if (this.isSwipePrevented(e.target)) return !0;
1935 let t = this.Reveal.getConfig();
1936 if (this.touchCaptured) _ && e.preventDefault();
1937 else {
1938 this.Reveal.onUserInput(e);
1939 let n = e.touches[0].clientX, r = e.touches[0].clientY;
1940 if (e.touches.length === 1 && this.touchStartCount !== 2) {
1941 let i = this.Reveal.availableRoutes({ includeFragments: !0 }), a = n - this.touchStartX, o = r - this.touchStartY;
1942 a > I && Math.abs(a) > Math.abs(o) ? (this.touchCaptured = !0, t.navigationMode === "linear" ? t.rtl ? this.Reveal.next() : this.Reveal.prev() : this.Reveal.left()) : a < -I && Math.abs(a) > Math.abs(o) ? (this.touchCaptured = !0, t.navigationMode === "linear" ? t.rtl ? this.Reveal.prev() : this.Reveal.next() : this.Reveal.right()) : o > I && i.up ? (this.touchCaptured = !0, t.navigationMode === "linear" ? this.Reveal.prev() : this.Reveal.up()) : o < -I && i.down && (this.touchCaptured = !0, t.navigationMode === "linear" ? this.Reveal.next() : this.Reveal.down()), t.embedded ? (this.touchCaptured || this.Reveal.isVerticalSlide()) && e.preventDefault() : e.preventDefault();
1943 }
1944 }
1945 }
1946 onTouchEnd(e) {
1947 this.touchCaptured && !this.Reveal.slideContent.isAllowedToPlayAudio() && this.Reveal.startEmbeddedContent(this.Reveal.getCurrentSlide()), this.touchCaptured = !1;
1948 }
1949 getActiveTouches() {
1950 return Array.from(this.activePointers.values(), (e) => ({
1951 clientX: e.clientX,
1952 clientY: e.clientY
1953 }));
1954 }
1955 onPointerDown(e) {
1956 e.pointerType === "touch" && (this.activePointers.set(e.pointerId, e), e.touches = this.getActiveTouches(), this.onTouchStart(e));
1957 }
1958 onPointerMove(e) {
1959 e.pointerType === "touch" && (this.activePointers.set(e.pointerId, e), e.touches = this.getActiveTouches(), this.onTouchMove(e));
1960 }
1961 onPointerUp(e) {
1962 e.pointerType === "touch" && (this.activePointers.delete(e.pointerId), e.touches = this.getActiveTouches(), this.onTouchEnd(e));
1963 }
1964 onPointerCancel(e) {
1965 e.pointerType === "touch" && (this.activePointers.delete(e.pointerId), e.touches = this.getActiveTouches(), this.onTouchEnd(e));
1966 }
1967 }, L = "focus", R = "blur", xe = class {
1968 constructor(e) {
1969 this.Reveal = e, this.onRevealPointerDown = this.onRevealPointerDown.bind(this), this.onDocumentPointerDown = this.onDocumentPointerDown.bind(this);
1970 }
1971 configure(e, t) {
1972 e.embedded ? this.blur() : (this.focus(), this.unbind());
1973 }
1974 bind() {
1975 this.Reveal.getConfig().embedded && this.Reveal.getRevealElement().addEventListener("pointerdown", this.onRevealPointerDown, !1);
1976 }
1977 unbind() {
1978 this.Reveal.getRevealElement().removeEventListener("pointerdown", this.onRevealPointerDown, !1), document.removeEventListener("pointerdown", this.onDocumentPointerDown, !1);
1979 }
1980 focus() {
1981 this.state !== L && (this.Reveal.getRevealElement().classList.add("focused"), document.addEventListener("pointerdown", this.onDocumentPointerDown, !1)), this.state = L;
1982 }
1983 blur() {
1984 this.state !== R && (this.Reveal.getRevealElement().classList.remove("focused"), document.removeEventListener("pointerdown", this.onDocumentPointerDown, !1)), this.state = R;
1985 }
1986 isFocused() {
1987 return this.state === L;
1988 }
1989 destroy() {
1990 this.Reveal.getRevealElement().classList.remove("focused");
1991 }
1992 onRevealPointerDown(e) {
1993 this.focus();
1994 }
1995 onDocumentPointerDown(e) {
1996 let t = o(e.target, ".reveal");
1997 (!t || t !== this.Reveal.getRevealElement()) && this.blur();
1998 }
1999 }, Se = class {
2000 constructor(e) {
2001 this.Reveal = e;
2002 }
2003 render() {
2004 this.element = document.createElement("div"), this.element.className = "speaker-notes", this.element.setAttribute("data-prevent-swipe", ""), this.element.setAttribute("tabindex", "0"), this.Reveal.getRevealElement().appendChild(this.element);
2005 }
2006 configure(e, t) {
2007 e.showNotes && this.element.setAttribute("data-layout", typeof e.showNotes == "string" ? e.showNotes : "inline");
2008 }
2009 update() {
2010 this.Reveal.getConfig().showNotes && this.element && this.Reveal.getCurrentSlide() && !this.Reveal.isScrollView() && !this.Reveal.isPrintView() && (this.element.innerHTML = this.getSlideNotes() || "<span class=\"notes-placeholder\">No notes on this slide.</span>");
2011 }
2012 updateVisibility() {
2013 this.Reveal.getConfig().showNotes && this.hasNotes() && !this.Reveal.isScrollView() && !this.Reveal.isPrintView() ? this.Reveal.getRevealElement().classList.add("show-notes") : this.Reveal.getRevealElement().classList.remove("show-notes");
2014 }
2015 hasNotes() {
2016 return this.Reveal.getSlidesElement().querySelectorAll("[data-notes], aside.notes").length > 0;
2017 }
2018 isSpeakerNotesWindow() {
2019 return !!window.location.search.match(/receiver/gi);
2020 }
2021 getSlideNotes(e = this.Reveal.getCurrentSlide()) {
2022 if (e.hasAttribute("data-notes")) return e.getAttribute("data-notes");
2023 let t = e.querySelectorAll("aside.notes");
2024 return t ? Array.from(t).map((e) => e.innerHTML).join("\n") : null;
2025 }
2026 destroy() {
2027 this.element.remove();
2028 }
2029 }, Ce = class {
2030 constructor(e, t) {
2031 this.diameter = 100, this.diameter2 = this.diameter / 2, this.thickness = 6, this.playing = !1, this.progress = 0, this.progressOffset = 1, this.container = e, this.progressCheck = t, this.canvas = document.createElement("canvas"), this.canvas.className = "playback", this.canvas.width = this.diameter, this.canvas.height = this.diameter, this.canvas.style.width = this.diameter2 + "px", this.canvas.style.height = this.diameter2 + "px", this.context = this.canvas.getContext("2d"), this.container.appendChild(this.canvas), this.render();
2032 }
2033 setPlaying(e) {
2034 let t = this.playing;
2035 this.playing = e, !t && this.playing ? this.animate() : this.render();
2036 }
2037 animate() {
2038 let e = this.progress;
2039 this.progress = this.progressCheck(), e > .8 && this.progress < .2 && (this.progressOffset = this.progress), this.render(), this.playing && requestAnimationFrame(this.animate.bind(this));
2040 }
2041 render() {
2042 let e = this.playing ? this.progress : 0, t = this.diameter2 - this.thickness, n = this.diameter2, r = this.diameter2;
2043 this.progressOffset += (1 - this.progressOffset) * .1;
2044 let i = -Math.PI / 2 + Math.PI * 2 * e, a = -Math.PI / 2 + this.progressOffset * (Math.PI * 2);
2045 this.context.save(), this.context.clearRect(0, 0, this.diameter, this.diameter), this.context.beginPath(), this.context.arc(n, r, t + 4, 0, Math.PI * 2, !1), this.context.fillStyle = "rgba( 0, 0, 0, 0.4 )", this.context.fill(), this.context.beginPath(), this.context.arc(n, r, t, 0, Math.PI * 2, !1), this.context.lineWidth = this.thickness, this.context.strokeStyle = "rgba( 255, 255, 255, 0.2 )", this.context.stroke(), this.playing && (this.context.beginPath(), this.context.arc(n, r, t, a, i, !1), this.context.lineWidth = this.thickness, this.context.strokeStyle = "#fff", this.context.stroke()), this.context.translate(n - 28 / 2, r - 28 / 2), this.playing ? (this.context.fillStyle = "#fff", this.context.fillRect(0, 0, 28 / 2 - 4, 28), this.context.fillRect(18, 0, 28 / 2 - 4, 28)) : (this.context.beginPath(), this.context.translate(4, 0), this.context.moveTo(0, 0), this.context.lineTo(24, 28 / 2), this.context.lineTo(0, 28), this.context.fillStyle = "#fff", this.context.fill()), this.context.restore();
2046 }
2047 on(e, t) {
2048 this.canvas.addEventListener(e, t, !1);
2049 }
2050 off(e, t) {
2051 this.canvas.removeEventListener(e, t, !1);
2052 }
2053 destroy() {
2054 this.playing = !1, this.canvas.parentNode && this.container.removeChild(this.canvas);
2055 }
2056 }, we = {
2057 width: 960,
2058 height: 700,
2059 margin: .04,
2060 minScale: .2,
2061 maxScale: 2,
2062 controls: !0,
2063 controlsTutorial: !0,
2064 controlsLayout: "bottom-right",
2065 controlsBackArrows: "faded",
2066 progress: !0,
2067 slideNumber: !1,
2068 showSlideNumber: "all",
2069 hashOneBasedIndex: !1,
2070 hash: !1,
2071 respondToHashChanges: !0,
2072 jumpToSlide: !0,
2073 history: !1,
2074 keyboard: !0,
2075 keyboardCondition: null,
2076 disableLayout: !1,
2077 overview: !0,
2078 center: !0,
2079 touch: !0,
2080 loop: !1,
2081 rtl: !1,
2082 navigationMode: "default",
2083 shuffle: !1,
2084 fragments: !0,
2085 fragmentInURL: !0,
2086 embedded: !1,
2087 help: !0,
2088 pause: !0,
2089 showNotes: !1,
2090 showHiddenSlides: !1,
2091 autoPlayMedia: null,
2092 preloadIframes: null,
2093 mouseWheel: !1,
2094 previewLinks: !1,
2095 viewDistance: 3,
2096 mobileViewDistance: 2,
2097 display: "block",
2098 hideInactiveCursor: !0,
2099 hideCursorTime: 5e3,
2100 sortFragmentsOnSync: !0,
2101 autoAnimate: !0,
2102 autoAnimateMatcher: null,
2103 autoAnimateEasing: "ease",
2104 autoAnimateDuration: 1,
2105 autoAnimateUnmatched: !0,
2106 autoAnimateStyles: [
2107 "opacity",
2108 "color",
2109 "background-color",
2110 "padding",
2111 "font-size",
2112 "line-height",
2113 "letter-spacing",
2114 "border-width",
2115 "border-color",
2116 "border-radius",
2117 "outline",
2118 "outline-offset"
2119 ],
2120 autoSlide: 0,
2121 autoSlideStoppable: !0,
2122 autoSlideMethod: null,
2123 defaultTiming: null,
2124 postMessage: !0,
2125 postMessageEvents: !1,
2126 focusBodyOnPageVisibilityChange: !0,
2127 transition: "slide",
2128 transitionSpeed: "default",
2129 backgroundTransition: "fade",
2130 parallaxBackgroundImage: "",
2131 parallaxBackgroundSize: "",
2132 parallaxBackgroundRepeat: "",
2133 parallaxBackgroundPosition: "",
2134 parallaxBackgroundHorizontal: null,
2135 parallaxBackgroundVertical: null,
2136 view: null,
2137 scrollLayout: "full",
2138 scrollSnap: "mandatory",
2139 scrollProgress: "auto",
2140 scrollActivationWidth: 435,
2141 pdfMaxPagesPerSlide: Infinity,
2142 pdfSeparateFragments: !0,
2143 pdfPageHeightOffset: -1,
2144 dependencies: [],
2145 plugins: []
2146 }, Te = "6.0.1";
2147 //#endregion
2148 //#region js/reveal.js
2149 function z(a, s) {
2150 arguments.length < 2 && (s = arguments[0], a = document.querySelector(".reveal"));
2151 let l = {}, f = {}, p = !1, m = !1, h, _, v, y, b = {
2152 hasNavigatedHorizontally: !1,
2153 hasNavigatedVertically: !1
2154 }, x = [], S = 1, T = {
2155 layout: "",
2156 overview: ""
2157 }, D = {}, ie = "idle", O = 0, k, A = 0, se = -1, j = !1, M = new ee(l), N = new ne(l), P = new re(l), _e = new oe(l), I = new ae(l), L = new ce(l), R = new le(l), z = new ue(l), B = new de(l), V = new fe(l), H = new pe(l), U = new me(l), W = new he(l), Ee = new ge(l), G = new ve(l), K = new ye(l), q = new xe(l), De = new be(l), J = new Se(l);
2158 function Oe(e) {
2159 if (!a) throw "Unable to find presentation root (<div class=\"reveal\">).";
2160 if (p) throw "Reveal.js has already been initialized.";
2161 if (p = !0, D.wrapper = a, D.slides = a.querySelector(".slides"), !D.slides) throw "Unable to find slides container (<div class=\"slides\">).";
2162 return f = F(F(F(F(F({}, we), f), s), e), u()), /print-pdf/gi.test(window.location.search) && (f.view = "print"), ke(), window.addEventListener("load", X, !1), G.load(f.plugins, f.dependencies).then(Ae), new Promise((e) => l.on("ready", e));
2163 }
2164 function ke() {
2165 f.embedded === !0 ? D.viewport = o(a, ".reveal-viewport") || a : (D.viewport = document.body, document.documentElement.classList.add("reveal-full-page")), D.viewport.classList.add("reveal-viewport");
2166 }
2167 function Ae() {
2168 p !== !1 && (m = !0, Me(), Ne(), Be(), Re(), ze(), _t(), Ve(), I.update(!0), je(), H.readURL(), setTimeout(() => {
2169 D.slides.classList.remove("no-transition"), D.wrapper.classList.add("ready"), Y({
2170 type: "ready",
2171 data: {
2172 indexh: h,
2173 indexv: _,
2174 currentSlide: y
2175 }
2176 });
2177 }, 1));
2178 }
2179 function je() {
2180 let e = f.view === "print", t = f.view === "scroll" || f.view === "reader";
2181 (e || t) && (e ? Ue() : De.unbind(), D.viewport.classList.add("loading-scroll-mode"), e ? document.readyState === "complete" ? R.activate() : window.addEventListener("load", () => R.activate()) : L.activate());
2182 }
2183 function Me() {
2184 f.showHiddenSlides || t(D.wrapper, "section[data-visibility=\"hidden\"]").forEach((e) => {
2185 let t = e.parentNode;
2186 t.childElementCount === 1 && /section/i.test(t.nodeName) ? t.remove() : e.remove();
2187 });
2188 }
2189 function Ne() {
2190 D.slides.classList.add("no-transition"), g ? D.wrapper.classList.add("no-hover") : D.wrapper.classList.remove("no-hover"), I.render(), N.render(), P.render(), U.render(), W.render(), J.render(), D.pauseOverlay = c(D.wrapper, "div", "pause-overlay", f.controls ? "<button class=\"resume-button\">Resume presentation</button>" : null), D.statusElement = Pe(), D.wrapper.setAttribute("role", "application");
2191 }
2192 function Pe() {
2193 let e = D.wrapper.querySelector(".aria-status");
2194 return e || (e = document.createElement("div"), e.style.position = "absolute", e.style.height = "1px", e.style.width = "1px", e.style.overflow = "hidden", e.style.clip = "rect( 1px, 1px, 1px, 1px )", e.classList.add("aria-status"), e.setAttribute("aria-live", "polite"), e.setAttribute("aria-atomic", "true"), D.wrapper.appendChild(e)), e;
2195 }
2196 function Fe(e) {
2197 D.statusElement.textContent = e;
2198 }
2199 function Ie(e) {
2200 let t = "";
2201 if (e.nodeType === 3) t += e.textContent.trim();
2202 else if (e.nodeType === 1) {
2203 let n = e.getAttribute("aria-hidden"), r = window.getComputedStyle(e).display === "none";
2204 if (n !== "true" && !r) {
2205 if (e.tagName === "IMG" || e.tagName === "VIDEO") {
2206 let n = e.getAttribute("alt");
2207 n && (t += Le(n));
2208 }
2209 Array.from(e.childNodes).forEach((e) => {
2210 t += Ie(e);
2211 }), [
2212 "P",
2213 "DIV",
2214 "UL",
2215 "OL",
2216 "LI",
2217 "H1",
2218 "H2",
2219 "H3",
2220 "H4",
2221 "H5",
2222 "H6",
2223 "BLOCKQUOTE"
2224 ].includes(e.tagName) && t.trim() !== "" && (t = Le(t));
2225 }
2226 }
2227 return t = t.trim(), t === "" ? "" : t + " ";
2228 }
2229 function Le(e) {
2230 let t = e.trim();
2231 return t === "" ? e : /[.!?]$/.test(t) ? t : t + ".";
2232 }
2233 function Re() {
2234 setInterval(() => {
2235 (!L.isActive() && D.wrapper.scrollTop !== 0 || D.wrapper.scrollLeft !== 0) && (D.wrapper.scrollTop = 0, D.wrapper.scrollLeft = 0);
2236 }, 1e3);
2237 }
2238 function ze() {
2239 document.addEventListener("fullscreenchange", $t), document.addEventListener("webkitfullscreenchange", $t);
2240 }
2241 function Be() {
2242 f.postMessage && window.addEventListener("message", Jt, !1);
2243 }
2244 function Ve(t) {
2245 let r = F({}, f);
2246 if (typeof t == "object" && e(f, t), l.isReady() === !1) return;
2247 let i = D.wrapper.querySelectorAll(C).length;
2248 D.wrapper.classList.remove(r.transition), D.wrapper.classList.add(f.transition), D.wrapper.setAttribute("data-transition-speed", f.transitionSpeed), D.wrapper.setAttribute("data-background-transition", f.backgroundTransition), D.viewport.style.setProperty("--slide-width", typeof f.width == "string" ? f.width : f.width + "px"), D.viewport.style.setProperty("--slide-height", typeof f.height == "string" ? f.height : f.height + "px"), f.shuffle && vt(), n(D.wrapper, "embedded", f.embedded), n(D.wrapper, "rtl", f.rtl), n(D.wrapper, "center", f.center), f.pause === !1 && st(), _e.reset(), k && (k.destroy(), k = null), i > 1 && f.autoSlide && f.autoSlideStoppable && (k = new Ce(D.wrapper, () => Math.min(Math.max((Date.now() - se) / O, 0), 1)), k.on("click", en), j = !1), f.navigationMode === "default" ? D.wrapper.removeAttribute("data-navigation-mode") : D.wrapper.setAttribute("data-navigation-mode", f.navigationMode), J.configure(f, r), q.configure(f, r), Ee.configure(f, r), U.configure(f, r), W.configure(f, r), V.configure(f, r), z.configure(f, r), N.configure(f, r), ht();
2249 }
2250 function He() {
2251 window.addEventListener("resize", Zt, !1), f.touch && De.bind(), f.keyboard && V.bind(), f.progress && W.bind(), f.respondToHashChanges && H.bind(), U.bind(), q.bind(), D.slides.addEventListener("click", Xt, !1), D.slides.addEventListener("transitionend", Yt, !1), D.pauseOverlay.addEventListener("click", st, !1), f.focusBodyOnPageVisibilityChange && document.addEventListener("visibilitychange", Qt, !1);
2252 }
2253 function Ue() {
2254 De.unbind(), q.unbind(), V.unbind(), U.unbind(), W.unbind(), H.unbind(), window.removeEventListener("resize", Zt, !1), D.slides.removeEventListener("click", Xt, !1), D.slides.removeEventListener("transitionend", Yt, !1), D.pauseOverlay.removeEventListener("click", st, !1);
2255 }
2256 function We() {
2257 p = !1, m !== !1 && (Ue(), Rt(), J.destroy(), q.destroy(), K.destroy(), G.destroy(), Ee.destroy(), U.destroy(), W.destroy(), I.destroy(), N.destroy(), P.destroy(), document.removeEventListener("fullscreenchange", $t), document.removeEventListener("webkitfullscreenchange", $t), document.removeEventListener("visibilitychange", Qt, !1), window.removeEventListener("message", Jt, !1), window.removeEventListener("load", X, !1), D.pauseOverlay && D.pauseOverlay.remove(), D.statusElement && D.statusElement.remove(), document.documentElement.classList.remove("reveal-full-page"), D.wrapper.classList.remove("ready", "center", "has-horizontal-slides", "has-vertical-slides"), D.wrapper.removeAttribute("data-transition-speed"), D.wrapper.removeAttribute("data-background-transition"), D.viewport.classList.remove("reveal-viewport"), D.viewport.style.removeProperty("--slide-width"), D.viewport.style.removeProperty("--slide-height"), D.slides.style.removeProperty("width"), D.slides.style.removeProperty("height"), D.slides.style.removeProperty("zoom"), D.slides.style.removeProperty("left"), D.slides.style.removeProperty("top"), D.slides.style.removeProperty("bottom"), D.slides.style.removeProperty("right"), D.slides.style.removeProperty("transform"), Array.from(D.wrapper.querySelectorAll(C)).forEach((e) => {
2258 e.style.removeProperty("display"), e.style.removeProperty("top"), e.removeAttribute("hidden"), e.removeAttribute("aria-hidden");
2259 }));
2260 }
2261 function Ge(e, t, n) {
2262 a.addEventListener(e, t, n);
2263 }
2264 function Ke(e, t, n) {
2265 a.removeEventListener(e, t, n);
2266 }
2267 function qe(e) {
2268 typeof e.layout == "string" && (T.layout = e.layout), typeof e.overview == "string" && (T.overview = e.overview), T.layout ? i(D.slides, T.layout + " " + T.overview) : i(D.slides, T.overview);
2269 }
2270 function Y({ target: t = D.wrapper, type: n, data: r, bubbles: i = !0 }) {
2271 let a = document.createEvent("HTMLEvents", 1, 2);
2272 return a.initEvent(n, i, !0), e(a, r), t.dispatchEvent(a), t === D.wrapper && Ye(n), a;
2273 }
2274 function Je(e) {
2275 Y({
2276 type: "slidechanged",
2277 data: {
2278 indexh: h,
2279 indexv: _,
2280 previousSlide: v,
2281 currentSlide: y,
2282 origin: e
2283 }
2284 });
2285 }
2286 function Ye(t, n) {
2287 if (f.postMessageEvents && window.parent !== window.self) {
2288 let r = {
2289 namespace: "reveal",
2290 eventName: t,
2291 state: Ft()
2292 };
2293 e(r, n), window.parent.postMessage(JSON.stringify(r), "*");
2294 }
2295 }
2296 function X() {
2297 if (D.wrapper && !R.isActive()) {
2298 let e = D.viewport.offsetWidth, t = D.viewport.offsetHeight;
2299 if (!f.disableLayout) {
2300 g && !f.embedded && document.documentElement.style.setProperty("--vh", window.innerHeight * .01 + "px");
2301 let n = L.isActive() ? Qe(e, t) : Qe(), r = S;
2302 Xe(f.width, f.height), D.slides.style.width = n.width + "px", D.slides.style.height = n.height + "px", S = Math.min(n.presentationWidth / n.width, n.presentationHeight / n.height), S = Math.max(S, f.minScale), S = Math.min(S, f.maxScale), S === 1 || L.isActive() ? (D.slides.style.zoom = "", D.slides.style.left = "", D.slides.style.top = "", D.slides.style.bottom = "", D.slides.style.right = "", qe({ layout: "" })) : (D.slides.style.zoom = "", D.slides.style.left = "50%", D.slides.style.top = "50%", D.slides.style.bottom = "auto", D.slides.style.right = "auto", qe({ layout: "translate(-50%, -50%) scale(" + S + ")" }));
2303 let i = Array.from(D.wrapper.querySelectorAll(C)).filter((e) => e.style.display !== "none"), a = Array(i.length);
2304 for (let e = 0, t = i.length; e < t; e++) {
2305 let t = i[e];
2306 f.center || t.classList.contains("center") ? t.classList.contains("stack") ? a[e] = 0 : a[e] = Math.max((n.height - t.scrollHeight) / 2, 0) + "px" : a[e] = "";
2307 }
2308 for (let e = 0, t = i.length; e < t; e++) i[e].style.top = a[e];
2309 r !== S && Y({
2310 type: "resize",
2311 data: {
2312 oldScale: r,
2313 scale: S,
2314 size: n
2315 }
2316 });
2317 }
2318 Ze(), D.viewport.style.setProperty("--slide-scale", S), D.viewport.style.setProperty("--viewport-width", e + "px"), D.viewport.style.setProperty("--viewport-height", t + "px"), L.layout(), W.update(), I.updateParallax(), B.isActive() && B.update();
2319 }
2320 }
2321 function Xe(e, n) {
2322 t(D.slides, "section > .stretch, section > .r-stretch").forEach((t) => {
2323 let r = d(t, n);
2324 if (/(img|video)/gi.test(t.nodeName)) {
2325 let n = t.naturalWidth || t.videoWidth, i = t.naturalHeight || t.videoHeight, a = Math.min(e / n, r / i);
2326 t.style.width = n * a + "px", t.style.height = i * a + "px";
2327 } else t.style.width = e + "px", t.style.height = r + "px";
2328 });
2329 }
2330 function Ze() {
2331 if (D.wrapper && !f.disableLayout && !R.isActive() && typeof f.scrollActivationWidth == "number" && f.view !== "scroll") {
2332 let e = Qe();
2333 e.presentationWidth > 0 && e.presentationWidth <= f.scrollActivationWidth ? L.isActive() || (I.create(), L.activate()) : L.isActive() && L.deactivate();
2334 }
2335 }
2336 function Qe(e, t) {
2337 let n = f.width, r = f.height;
2338 f.disableLayout && (n = D.slides.offsetWidth, r = D.slides.offsetHeight);
2339 let i = {
2340 width: n,
2341 height: r,
2342 presentationWidth: e || D.wrapper.offsetWidth,
2343 presentationHeight: t || D.wrapper.offsetHeight
2344 };
2345 return i.presentationWidth -= i.presentationWidth * f.margin, i.presentationHeight -= i.presentationHeight * f.margin, typeof i.width == "string" && /%$/.test(i.width) && (i.width = parseInt(i.width, 10) / 100 * i.presentationWidth), typeof i.height == "string" && /%$/.test(i.height) && (i.height = parseInt(i.height, 10) / 100 * i.presentationHeight), i;
2346 }
2347 function $e(e, t) {
2348 typeof e == "object" && typeof e.setAttribute == "function" && e.setAttribute("data-previous-indexv", t || 0);
2349 }
2350 function et(e) {
2351 if (typeof e == "object" && typeof e.setAttribute == "function" && e.classList.contains("stack")) {
2352 let t = e.hasAttribute("data-start-indexv") ? "data-start-indexv" : "data-previous-indexv";
2353 return parseInt(e.getAttribute(t) || 0, 10);
2354 }
2355 return 0;
2356 }
2357 function tt(e = y) {
2358 return e && e.parentNode && !!e.parentNode.nodeName.match(/section/i);
2359 }
2360 function nt(e = y) {
2361 return e.classList.contains(".stack") || e.querySelector("section") !== null;
2362 }
2363 function rt() {
2364 return y && tt(y) ? !y.nextElementSibling : !1;
2365 }
2366 function it() {
2367 return h === 0 && _ === 0;
2368 }
2369 function at() {
2370 return y ? !(y.nextElementSibling || tt(y) && y.parentNode.nextElementSibling) : !1;
2371 }
2372 function ot() {
2373 if (f.pause) {
2374 let e = D.wrapper.classList.contains("paused");
2375 Rt(), D.wrapper.classList.add("paused"), e === !1 && Y({ type: "paused" });
2376 }
2377 }
2378 function st() {
2379 let e = D.wrapper.classList.contains("paused");
2380 D.wrapper.classList.remove("paused"), Lt(), e && Y({ type: "resumed" });
2381 }
2382 function ct(e) {
2383 typeof e == "boolean" ? e ? ot() : st() : lt() ? st() : ot();
2384 }
2385 function lt() {
2386 return D.wrapper.classList.contains("paused");
2387 }
2388 function ut(e) {
2389 typeof e == "boolean" ? e ? P.show() : P.hide() : P.isVisible() ? P.hide() : P.show();
2390 }
2391 function dt(e) {
2392 typeof e == "boolean" ? e ? Bt() : zt() : j ? Bt() : zt();
2393 }
2394 function ft() {
2395 return !!(O && !j);
2396 }
2397 function Z(e, t, n, r) {
2398 if (Y({
2399 type: "beforeslidechange",
2400 data: {
2401 indexh: e === void 0 ? h : e,
2402 indexv: t === void 0 ? _ : t,
2403 origin: r
2404 }
2405 }).defaultPrevented) return;
2406 v = y;
2407 let i = D.wrapper.querySelectorAll(w);
2408 if (L.isActive()) {
2409 let n = L.getSlideByIndices(e, t);
2410 n && L.scrollToSlide(n);
2411 return;
2412 }
2413 if (i.length === 0) return;
2414 t === void 0 && !B.isActive() && (t = et(i[e])), v && v.parentNode && v.parentNode.classList.contains("stack") && $e(v.parentNode, _);
2415 let o = x.concat();
2416 x.length = 0;
2417 let s = h || 0, c = _ || 0;
2418 h = yt(w, e === void 0 ? h : e), _ = yt(te, t === void 0 ? _ : t);
2419 let l = h !== s || _ !== c;
2420 l || (v = null);
2421 let u = i[h], d = u.querySelectorAll("section");
2422 a.classList.toggle("is-vertical-slide", d.length > 1), y = d[_] || u;
2423 let p = !1;
2424 l && v && y && !B.isActive() && (ie = "running", p = pt(v, y, s, c), p && D.slides.classList.add("disable-slide-transitions")), St(), X(), B.isActive() && B.update(), n !== void 0 && z.goto(n), v && v !== y && (v.classList.remove("present"), v.setAttribute("aria-hidden", "true"), it() && setTimeout(() => {
2425 Ot().forEach((e) => {
2426 $e(e, 0);
2427 });
2428 }, 0));
2429 stateLoop: for (let e = 0, t = x.length; e < t; e++) {
2430 for (let t = 0; t < o.length; t++) if (o[t] === x[e]) {
2431 o.splice(t, 1);
2432 continue stateLoop;
2433 }
2434 D.viewport.classList.add(x[e]), Y({ type: x[e] });
2435 }
2436 for (; o.length;) D.viewport.classList.remove(o.pop());
2437 l && (M.afterSlideChanged(), Je(r)), (l || !v) && (M.stopEmbeddedContent(v), M.startEmbeddedContent(y)), requestAnimationFrame(() => {
2438 Fe(Ie(y));
2439 }), W.update(), U.update(), J.update(), I.update(), I.updateParallax(), N.update(), z.update(), H.writeURL(), Lt(), p && (setTimeout(() => {
2440 D.slides.classList.remove("disable-slide-transitions");
2441 }, 0), f.autoAnimate && _e.run(v, y));
2442 }
2443 function pt(e, t, n, r) {
2444 return e.hasAttribute("data-auto-animate") && t.hasAttribute("data-auto-animate") && e.getAttribute("data-auto-animate-id") === t.getAttribute("data-auto-animate-id") && !(h > n || _ > r ? t : e).hasAttribute("data-auto-animate-restart");
2445 }
2446 function mt(e, t, n) {
2447 let r = h || 0;
2448 h = t, _ = n;
2449 let i = y !== e;
2450 v = y, y = e, y && v && f.autoAnimate && pt(v, y, r, _) && _e.run(v, y), i && (M.afterSlideChanged(), v && (M.stopEmbeddedContent(v), M.stopEmbeddedContent(v.slideBackgroundElement)), M.startEmbeddedContent(y), M.startEmbeddedContent(y.slideBackgroundElement)), requestAnimationFrame(() => {
2451 Fe(Ie(y));
2452 }), Je();
2453 }
2454 function ht() {
2455 Ue(), He(), X(), O = f.autoSlide, Lt(), I.create(), H.writeURL(), f.sortFragmentsOnSync === !0 && z.sortAll(), h !== void 0 && (h = yt(w, h), _ = yt(te, _)), U.update(), W.update(), St(), J.update(), J.updateVisibility(), K.update(), I.update(!0), N.update(), M.formatEmbeddedContent(), f.autoPlayMedia === !1 ? M.stopEmbeddedContent(y, { unloadIframes: !1 }) : M.startEmbeddedContent(y), B.isActive() && B.layout(), Y({ type: "sync" });
2456 }
2457 function gt(e = y) {
2458 I.sync(e), z.sync(e), M.load(e), I.update(), J.update(), Y({
2459 type: "slidesync",
2460 data: { slide: e }
2461 });
2462 }
2463 function _t() {
2464 $().forEach((e) => {
2465 t(e, "section").forEach((e, t) => {
2466 t > 0 && (e.classList.remove("present"), e.classList.remove("past"), e.classList.add("future"), e.setAttribute("aria-hidden", "true"));
2467 });
2468 });
2469 }
2470 function vt(e = $()) {
2471 e.forEach((t, n) => {
2472 let r = e[Math.floor(Math.random() * e.length)];
2473 r.parentNode === t.parentNode && t.parentNode.insertBefore(t, r);
2474 let i = t.querySelectorAll("section");
2475 i.length && vt(i);
2476 });
2477 }
2478 function yt(e, n) {
2479 let r = t(D.wrapper, e), i = r.length, a = L.isActive() || R.isActive(), o = !1, s = !1;
2480 if (i) {
2481 f.loop && (n >= i && (o = !0), n %= i, n < 0 && (n = i + n, s = !0)), n = Math.max(Math.min(n, i - 1), 0);
2482 for (let e = 0; e < i; e++) {
2483 let t = r[e], i = f.rtl && !tt(t);
2484 if (t.classList.remove("past"), t.classList.remove("present"), t.classList.remove("future"), t.setAttribute("hidden", ""), t.setAttribute("aria-hidden", "true"), t.querySelector("section") && t.classList.add("stack"), a) {
2485 t.classList.add("present");
2486 continue;
2487 }
2488 e < n ? (t.classList.add(i ? "future" : "past"), f.fragments && bt(t)) : e > n ? (t.classList.add(i ? "past" : "future"), f.fragments && xt(t)) : e === n && f.fragments && (o ? xt(t) : s && bt(t));
2489 }
2490 let e = r[n], t = e.classList.contains("present");
2491 e.classList.add("present"), e.removeAttribute("hidden"), e.removeAttribute("aria-hidden"), t || Y({
2492 target: e,
2493 type: "visible",
2494 bubbles: !1
2495 });
2496 let c = e.getAttribute("data-state");
2497 c && (x = x.concat(c.split(" ")));
2498 } else n = 0;
2499 return n;
2500 }
2501 function bt(e) {
2502 t(e, ".fragment").forEach((e) => {
2503 e.classList.add("visible"), e.classList.remove("current-fragment");
2504 });
2505 }
2506 function xt(e) {
2507 t(e, ".fragment.visible").forEach((e) => {
2508 e.classList.remove("visible", "current-fragment");
2509 });
2510 }
2511 function St() {
2512 let e = $(), n = e.length, r, i;
2513 if (n && h !== void 0) {
2514 let a = B.isActive(), o = a ? 10 : f.viewDistance;
2515 g && (o = a ? 6 : f.mobileViewDistance), R.isActive() && (o = Number.MAX_VALUE);
2516 for (let s = 0; s < n; s++) {
2517 let c = e[s], l = t(c, "section"), u = l.length;
2518 if (r = Math.abs((h || 0) - s) || 0, f.loop && (r = Math.abs(((h || 0) - s) % (n - o)) || 0), r < o ? M.load(c) : M.unload(c), u) {
2519 let e = a ? 0 : et(c);
2520 for (let t = 0; t < u; t++) {
2521 let n = l[t];
2522 i = Math.abs(s === (h || 0) ? (_ || 0) - t : t - e), r + i < o ? M.load(n) : M.unload(n);
2523 }
2524 }
2525 }
2526 At() ? D.wrapper.classList.add("has-vertical-slides") : D.wrapper.classList.remove("has-vertical-slides"), kt() ? D.wrapper.classList.add("has-horizontal-slides") : D.wrapper.classList.remove("has-horizontal-slides");
2527 }
2528 }
2529 function Q({ includeFragments: e = !1 } = {}) {
2530 let t = D.wrapper.querySelectorAll(w), n = D.wrapper.querySelectorAll(te), r = {
2531 left: h > 0,
2532 right: h < t.length - 1,
2533 up: _ > 0,
2534 down: _ < n.length - 1
2535 };
2536 if (f.loop && (t.length > 1 && (r.left = !0, r.right = !0), n.length > 1 && (r.up = !0, r.down = !0)), t.length > 1 && f.navigationMode === "linear" && (r.right = r.right || r.down, r.left = r.left || r.up), e === !0) {
2537 let e = z.availableRoutes();
2538 r.left = r.left || e.prev, r.up = r.up || e.prev, r.down = r.down || e.next, r.right = r.right || e.next;
2539 }
2540 if (f.rtl) {
2541 let e = r.left;
2542 r.left = r.right, r.right = e;
2543 }
2544 return r;
2545 }
2546 function Ct(e = y) {
2547 let t = $(), n = 0;
2548 mainLoop: for (let r = 0; r < t.length; r++) {
2549 let i = t[r], a = i.querySelectorAll("section");
2550 for (let t = 0; t < a.length; t++) {
2551 if (a[t] === e) break mainLoop;
2552 a[t].dataset.visibility !== "uncounted" && n++;
2553 }
2554 if (i === e) break;
2555 i.classList.contains("stack") === !1 && i.dataset.visibility !== "uncounted" && n++;
2556 }
2557 return n;
2558 }
2559 function wt() {
2560 let e = Mt(), t = Ct();
2561 if (y) {
2562 let e = y.querySelectorAll(".fragment");
2563 if (e.length > 0) {
2564 let n = y.querySelectorAll(".fragment.visible");
2565 t += n.length / e.length * .9;
2566 }
2567 }
2568 return Math.min(t / (e - 1), 1);
2569 }
2570 function Tt(e) {
2571 let n = h, r = _, i;
2572 if (e) if (L.isActive()) n = parseInt(e.getAttribute("data-index-h"), 10), e.getAttribute("data-index-v") && (r = parseInt(e.getAttribute("data-index-v"), 10));
2573 else {
2574 let i = tt(e), a = i ? e.parentNode : e, o = $();
2575 n = Math.max(o.indexOf(a), 0), r = void 0, i && (r = Math.max(t(e.parentNode, "section").indexOf(e), 0));
2576 }
2577 if (!e && y && y.querySelectorAll(".fragment").length > 0) {
2578 let e = y.querySelector(".current-fragment");
2579 i = e && e.hasAttribute("data-fragment-index") ? parseInt(e.getAttribute("data-fragment-index"), 10) : y.querySelectorAll(".fragment.visible").length - 1;
2580 }
2581 return {
2582 h: n,
2583 v: r,
2584 f: i
2585 };
2586 }
2587 function Et() {
2588 return t(D.wrapper, C + ":not(.stack):not([data-visibility=\"uncounted\"])");
2589 }
2590 function $() {
2591 return t(D.wrapper, w);
2592 }
2593 function Dt() {
2594 return t(D.wrapper, ".slides>section>section");
2595 }
2596 function Ot() {
2597 return t(D.wrapper, w + ".stack");
2598 }
2599 function kt() {
2600 return $().length > 1;
2601 }
2602 function At() {
2603 return Dt().length > 1;
2604 }
2605 function jt() {
2606 return Et().map((e) => {
2607 let t = {};
2608 for (let n = 0; n < e.attributes.length; n++) {
2609 let r = e.attributes[n];
2610 t[r.name] = r.value;
2611 }
2612 return t;
2613 });
2614 }
2615 function Mt() {
2616 return Et().length;
2617 }
2618 function Nt(e, t) {
2619 let n = $()[e], r = n && n.querySelectorAll("section");
2620 return r && r.length && typeof t == "number" ? r ? r[t] : void 0 : n;
2621 }
2622 function Pt(e, t) {
2623 let n = typeof e == "number" ? Nt(e, t) : e;
2624 if (n) return n.slideBackgroundElement;
2625 }
2626 function Ft() {
2627 let e = Tt();
2628 return F({
2629 indexh: e.h,
2630 indexv: e.v,
2631 indexf: e.f,
2632 paused: lt(),
2633 overview: B.isActive()
2634 }, K.getState());
2635 }
2636 function It(e) {
2637 if (typeof e == "object") {
2638 Z(r(e.indexh), r(e.indexv), r(e.indexf));
2639 let t = r(e.paused), n = r(e.overview);
2640 typeof t == "boolean" && t !== lt() && ct(t), typeof n == "boolean" && n !== B.isActive() && B.toggle(n), K.setState(e);
2641 }
2642 }
2643 function Lt() {
2644 if (Rt(), y && f.autoSlide !== !1) {
2645 let e = y.querySelector(".current-fragment[data-autoslide]"), n = e ? e.getAttribute("data-autoslide") : null, r = y.parentNode ? y.parentNode.getAttribute("data-autoslide") : null, i = y.getAttribute("data-autoslide");
2646 n ? O = parseInt(n, 10) : i ? O = parseInt(i, 10) : r ? O = parseInt(r, 10) : (O = f.autoSlide, y.querySelectorAll(".fragment").length === 0 && t(y, "video, audio").forEach((e) => {
2647 e.hasAttribute("data-autoplay") && O && e.duration * 1e3 / e.playbackRate > O && (O = e.duration * 1e3 / e.playbackRate + 1e3);
2648 })), O && !j && !lt() && !B.isActive() && (!at() || z.availableRoutes().next || f.loop === !0) && (A = setTimeout(() => {
2649 typeof f.autoSlideMethod == "function" ? f.autoSlideMethod() : Kt(), Lt();
2650 }, O), se = Date.now()), k && k.setPlaying(A !== -1);
2651 }
2652 }
2653 function Rt() {
2654 clearTimeout(A), A = -1;
2655 }
2656 function zt() {
2657 O && !j && (j = !0, Y({ type: "autoslidepaused" }), clearTimeout(A), k && k.setPlaying(!1));
2658 }
2659 function Bt() {
2660 O && j && (j = !1, Y({ type: "autoslideresumed" }), Lt());
2661 }
2662 function Vt({ skipFragments: e = !1 } = {}) {
2663 if (b.hasNavigatedHorizontally = !0, L.isActive()) return L.prev();
2664 f.rtl ? (B.isActive() || e || z.next() === !1) && Q().left && Z(h + 1, f.navigationMode === "grid" ? _ : void 0) : (B.isActive() || e || z.prev() === !1) && Q().left && Z(h - 1, f.navigationMode === "grid" ? _ : void 0);
2665 }
2666 function Ht({ skipFragments: e = !1 } = {}) {
2667 if (b.hasNavigatedHorizontally = !0, L.isActive()) return L.next();
2668 f.rtl ? (B.isActive() || e || z.prev() === !1) && Q().right && Z(h - 1, f.navigationMode === "grid" ? _ : void 0) : (B.isActive() || e || z.next() === !1) && Q().right && Z(h + 1, f.navigationMode === "grid" ? _ : void 0);
2669 }
2670 function Ut({ skipFragments: e = !1 } = {}) {
2671 if (L.isActive()) return L.prev();
2672 (B.isActive() || e || z.prev() === !1) && Q().up && Z(h, _ - 1);
2673 }
2674 function Wt({ skipFragments: e = !1 } = {}) {
2675 if (b.hasNavigatedVertically = !0, L.isActive()) return L.next();
2676 (B.isActive() || e || z.next() === !1) && Q().down && Z(h, _ + 1);
2677 }
2678 function Gt({ skipFragments: e = !1 } = {}) {
2679 if (L.isActive()) return L.prev();
2680 if (e || z.prev() === !1) if (Q().up) Ut({ skipFragments: e });
2681 else {
2682 let n;
2683 if (n = f.rtl ? t(D.wrapper, w + ".future").pop() : t(D.wrapper, w + ".past").pop(), n && n.classList.contains("stack")) {
2684 let e = n.querySelectorAll("section").length - 1 || void 0;
2685 Z(h - 1, e);
2686 } else f.rtl ? Ht({ skipFragments: e }) : Vt({ skipFragments: e });
2687 }
2688 }
2689 function Kt({ skipFragments: e = !1 } = {}) {
2690 if (b.hasNavigatedHorizontally = !0, b.hasNavigatedVertically = !0, L.isActive()) return L.next();
2691 if (e || z.next() === !1) {
2692 let t = Q();
2693 t.down && t.right && f.loop && rt() && (t.down = !1), t.down ? Wt({ skipFragments: e }) : f.rtl ? Vt({ skipFragments: e }) : Ht({ skipFragments: e });
2694 }
2695 }
2696 function qt(e) {
2697 f.autoSlideStoppable && zt();
2698 }
2699 function Jt(e) {
2700 let t = e.data;
2701 if (typeof t == "string" && t.charAt(0) === "{" && t.charAt(t.length - 1) === "}" && (t = JSON.parse(t), t.method && typeof l[t.method] == "function")) if (E.test(t.method) === !1) {
2702 let e = l[t.method].apply(l, t.args);
2703 Ye("callback", {
2704 method: t.method,
2705 result: e
2706 });
2707 } else console.warn("reveal.js: \"" + t.method + "\" is is blacklisted from the postMessage API");
2708 }
2709 function Yt(e) {
2710 ie === "running" && /section/gi.test(e.target.nodeName) && (ie = "idle", Y({
2711 type: "slidetransitionend",
2712 data: {
2713 indexh: h,
2714 indexv: _,
2715 previousSlide: v,
2716 currentSlide: y
2717 }
2718 }));
2719 }
2720 function Xt(e) {
2721 let t = o(e.target, "a[href^=\"#\"]");
2722 if (t) {
2723 let n = t.getAttribute("href"), r = H.getIndicesFromHash(n);
2724 r && (l.slide(r.h, r.v, r.f), e.preventDefault());
2725 }
2726 }
2727 function Zt(e) {
2728 X();
2729 }
2730 function Qt(e) {
2731 document.hidden === !1 && document.activeElement !== document.body && (typeof document.activeElement.blur == "function" && document.activeElement.blur(), document.body.focus());
2732 }
2733 function $t(e) {
2734 (document.fullscreenElement || document.webkitFullscreenElement) === D.wrapper && (e.stopImmediatePropagation(), setTimeout(() => {
2735 l.layout(), l.focus.focus();
2736 }, 1));
2737 }
2738 function en(e) {
2739 at() && f.loop === !1 ? (Z(0, 0), Bt()) : j ? Bt() : zt();
2740 }
2741 let tn = {
2742 VERSION: Te,
2743 initialize: Oe,
2744 configure: Ve,
2745 destroy: We,
2746 sync: ht,
2747 syncSlide: gt,
2748 syncFragments: z.sync.bind(z),
2749 slide: Z,
2750 left: Vt,
2751 right: Ht,
2752 up: Ut,
2753 down: Wt,
2754 prev: Gt,
2755 next: Kt,
2756 navigateLeft: Vt,
2757 navigateRight: Ht,
2758 navigateUp: Ut,
2759 navigateDown: Wt,
2760 navigatePrev: Gt,
2761 navigateNext: Kt,
2762 navigateFragment: z.goto.bind(z),
2763 prevFragment: z.prev.bind(z),
2764 nextFragment: z.next.bind(z),
2765 on: Ge,
2766 off: Ke,
2767 addEventListener: Ge,
2768 removeEventListener: Ke,
2769 layout: X,
2770 shuffle: vt,
2771 availableRoutes: Q,
2772 availableFragments: z.availableRoutes.bind(z),
2773 toggleHelp: K.toggleHelp.bind(K),
2774 toggleOverview: B.toggle.bind(B),
2775 toggleScrollView: L.toggle.bind(L),
2776 togglePause: ct,
2777 toggleAutoSlide: dt,
2778 toggleJumpToSlide: ut,
2779 isFirstSlide: it,
2780 isLastSlide: at,
2781 isLastVerticalSlide: rt,
2782 isVerticalSlide: tt,
2783 isVerticalStack: nt,
2784 isPaused: lt,
2785 isAutoSliding: ft,
2786 isSpeakerNotes: J.isSpeakerNotesWindow.bind(J),
2787 isOverview: B.isActive.bind(B),
2788 isFocused: q.isFocused.bind(q),
2789 isOverlayOpen: K.isOpen.bind(K),
2790 isScrollView: L.isActive.bind(L),
2791 isPrintView: R.isActive.bind(R),
2792 isReady: () => m,
2793 loadSlide: M.load.bind(M),
2794 unloadSlide: M.unload.bind(M),
2795 startEmbeddedContent: () => M.startEmbeddedContent(y),
2796 stopEmbeddedContent: () => M.stopEmbeddedContent(y, { unloadIframes: !1 }),
2797 previewIframe: K.previewIframe.bind(K),
2798 previewImage: K.previewImage.bind(K),
2799 previewVideo: K.previewVideo.bind(K),
2800 showPreview: K.previewIframe.bind(K),
2801 hidePreview: K.close.bind(K),
2802 addEventListeners: He,
2803 removeEventListeners: Ue,
2804 dispatchEvent: Y,
2805 getState: Ft,
2806 setState: It,
2807 getProgress: wt,
2808 getIndices: Tt,
2809 getSlidesAttributes: jt,
2810 getSlidePastCount: Ct,
2811 getTotalSlides: Mt,
2812 getSlide: Nt,
2813 getPreviousSlide: () => v,
2814 getCurrentSlide: () => y,
2815 getSlideBackground: Pt,
2816 getSlideNotes: J.getSlideNotes.bind(J),
2817 getSlides: Et,
2818 getHorizontalSlides: $,
2819 getVerticalSlides: Dt,
2820 hasHorizontalSlides: kt,
2821 hasVerticalSlides: At,
2822 hasNavigatedHorizontally: () => b.hasNavigatedHorizontally,
2823 hasNavigatedVertically: () => b.hasNavigatedVertically,
2824 shouldAutoAnimateBetween: pt,
2825 addKeyBinding: V.addKeyBinding.bind(V),
2826 removeKeyBinding: V.removeKeyBinding.bind(V),
2827 triggerKey: V.triggerKey.bind(V),
2828 registerKeyboardShortcut: V.registerKeyboardShortcut.bind(V),
2829 getComputedSlideSize: Qe,
2830 setCurrentScrollPage: mt,
2831 removeHiddenSlides: Me,
2832 getScale: () => S,
2833 getConfig: () => f,
2834 getQueryHash: u,
2835 getSlidePath: H.getHash.bind(H),
2836 getRevealElement: () => a,
2837 getSlidesElement: () => D.slides,
2838 getViewportElement: () => D.viewport,
2839 getBackgroundsElement: () => I.element,
2840 registerPlugin: G.registerPlugin.bind(G),
2841 hasPlugin: G.hasPlugin.bind(G),
2842 getPlugin: G.getPlugin.bind(G),
2843 getPlugins: G.getRegisteredPlugins.bind(G)
2844 };
2845 return e(l, F(F({}, tn), {}, {
2846 announceStatus: Fe,
2847 getStatusText: Ie,
2848 focus: q,
2849 scroll: L,
2850 progress: W,
2851 controls: U,
2852 location: H,
2853 overview: B,
2854 keyboard: V,
2855 fragments: z,
2856 backgrounds: I,
2857 slideContent: M,
2858 slideNumber: N,
2859 onUserInput: qt,
2860 closeOverlay: K.close.bind(K),
2861 updateSlidesVisibility: St,
2862 layoutSlideContents: Xe,
2863 transformSlides: qe,
2864 cueAutoSlide: Lt,
2865 cancelAutoSlide: Rt
2866 })), tn;
2867 }
2868 //#endregion
2869 //#region js/index.ts
2870 var B = z, V = [];
2871 B.initialize = (e) => {
2872 let t = document.querySelector(".reveal");
2873 if (!(t instanceof HTMLElement)) throw Error("Unable to find presentation root (<div class=\"reveal\">).");
2874 return Object.assign(B, new z(t, e)), V.map((e) => e(B)), B.initialize();
2875 }, [
2876 "configure",
2877 "on",
2878 "off",
2879 "addEventListener",
2880 "removeEventListener",
2881 "registerPlugin"
2882 ].forEach((e) => {
2883 B[e] = (...t) => {
2884 V.push((n) => n[e].call(null, ...t));
2885 };
2886 }), B.isReady = () => !1, B.VERSION = Te;
2887 //#endregion
2888 export { B as default };
2889
2889 lines Plain Text