368 lines
10 KiB
JavaScript
368 lines
10 KiB
JavaScript
import { createContext as K, useRef as l, useState as W, useEffect as M, useLayoutEffect as P, useContext as V, Children as Y, isValidElement as H, Fragment as Q, cloneElement as X, useMemo as Z } from "react";
|
|
import { jsx as R } from "react/jsx-runtime";
|
|
import tt from "reveal.js";
|
|
const x = K(null), et = [];
|
|
function nt(e, t) {
|
|
if (e === t) return !1;
|
|
if (!e || !t) return e !== t;
|
|
const n = Object.keys(e), a = Object.keys(t);
|
|
if (n.length !== a.length) return !0;
|
|
for (const r of n)
|
|
if (!(r in t) || e[r] !== t[r])
|
|
return !0;
|
|
return !1;
|
|
}
|
|
function F(e, t) {
|
|
e && (typeof e == "function" ? e(t) : e.current = t);
|
|
}
|
|
function rt(e) {
|
|
return e.tagName === "SECTION";
|
|
}
|
|
function $(e, t, n) {
|
|
return Array.from(e.children).filter(rt).map((a) => {
|
|
let r = t.get(a);
|
|
r === void 0 && (r = n.current++, t.set(a, r));
|
|
const i = $(a, t, n);
|
|
return i.length > 0 ? [r, i] : r;
|
|
});
|
|
}
|
|
function at(e, t, n) {
|
|
return e ? JSON.stringify($(e, t, n)) : "[]";
|
|
}
|
|
function ht({
|
|
config: e,
|
|
plugins: t = et,
|
|
onReady: n,
|
|
onSync: a,
|
|
onSlideSync: r,
|
|
onSlideChange: i,
|
|
onSlideTransitionEnd: u,
|
|
onFragmentShown: h,
|
|
onFragmentHidden: C,
|
|
onOverviewShown: d,
|
|
onOverviewHidden: y,
|
|
onPaused: w,
|
|
onResumed: E,
|
|
deckRef: b,
|
|
className: N,
|
|
style: I,
|
|
children: T
|
|
}) {
|
|
const v = l(null), p = l(null), s = l(null), [f, o] = W(null), D = l(t), S = l(!1), A = l(e), L = l(null), B = l(/* @__PURE__ */ new WeakMap()), U = l(1), j = l(!1), m = l(0);
|
|
return M(() => {
|
|
if (j.current = !0, m.current += 1, s.current)
|
|
s.current.isReady() && o(s.current);
|
|
else {
|
|
const c = new tt(v.current, {
|
|
...e,
|
|
plugins: D.current
|
|
});
|
|
A.current = e, s.current = c, c.initialize().then(() => {
|
|
!j.current || s.current !== c || (o(c), n?.(c));
|
|
});
|
|
}
|
|
return () => {
|
|
j.current = !1;
|
|
const c = s.current;
|
|
if (!c) return;
|
|
const g = ++m.current;
|
|
Promise.resolve().then(() => {
|
|
if (!(j.current || m.current !== g) && s.current === c) {
|
|
try {
|
|
c.destroy();
|
|
} catch {
|
|
}
|
|
s.current === c && (s.current = null);
|
|
}
|
|
});
|
|
};
|
|
}, []), M(() => (F(b, f), () => F(b, null)), [b, f]), M(() => {
|
|
if (!f) return;
|
|
const g = [
|
|
["sync", a],
|
|
["slidesync", r],
|
|
["slidechanged", i],
|
|
["slidetransitionend", u],
|
|
["fragmentshown", h],
|
|
["fragmenthidden", C],
|
|
["overviewshown", d],
|
|
["overviewhidden", y],
|
|
["paused", w],
|
|
["resumed", E]
|
|
].filter((k) => k[1] != null);
|
|
for (const [k, _] of g)
|
|
f.on(k, _);
|
|
return () => {
|
|
for (const [k, _] of g)
|
|
f.off(k, _);
|
|
};
|
|
}, [
|
|
f,
|
|
a,
|
|
r,
|
|
i,
|
|
u,
|
|
h,
|
|
C,
|
|
d,
|
|
y,
|
|
w,
|
|
E
|
|
]), P(() => {
|
|
!f || !s.current?.isReady() || nt(A.current, e) && (S.current = !0, s.current.configure(e ?? {}), A.current = e);
|
|
}, [f, e]), P(() => {
|
|
const c = S.current;
|
|
S.current = !1;
|
|
const g = at(
|
|
p.current,
|
|
B.current,
|
|
U
|
|
);
|
|
if (c) {
|
|
L.current = g;
|
|
return;
|
|
}
|
|
s.current?.isReady() && L.current !== g && (s.current.sync(), L.current = g);
|
|
}), /* @__PURE__ */ R(x.Provider, { value: f, children: /* @__PURE__ */ R("div", { className: N ? `reveal ${N}` : "reveal", style: I, ref: v, children: /* @__PURE__ */ R("div", { className: "slides", ref: p, children: T }) }) });
|
|
}
|
|
const it = "[]", ot = {
|
|
background: "data-background",
|
|
backgroundImage: "data-background-image",
|
|
backgroundVideo: "data-background-video",
|
|
backgroundVideoLoop: "data-background-video-loop",
|
|
backgroundVideoMuted: "data-background-video-muted",
|
|
backgroundIframe: "data-background-iframe",
|
|
backgroundColor: "data-background-color",
|
|
backgroundGradient: "data-background-gradient",
|
|
backgroundSize: "data-background-size",
|
|
backgroundPosition: "data-background-position",
|
|
backgroundRepeat: "data-background-repeat",
|
|
backgroundOpacity: "data-background-opacity",
|
|
backgroundTransition: "data-background-transition",
|
|
visibility: "data-visibility",
|
|
autoAnimate: "data-auto-animate",
|
|
autoAnimateId: "data-auto-animate-id",
|
|
autoAnimateRestart: "data-auto-animate-restart",
|
|
autoAnimateUnmatched: "data-auto-animate-unmatched",
|
|
autoAnimateEasing: "data-auto-animate-easing",
|
|
autoAnimateDuration: "data-auto-animate-duration",
|
|
autoAnimateDelay: "data-auto-animate-delay",
|
|
transition: "data-transition",
|
|
transitionSpeed: "data-transition-speed",
|
|
autoSlide: "data-autoslide",
|
|
notes: "data-notes",
|
|
backgroundInteractive: "data-background-interactive",
|
|
preload: "data-preload"
|
|
};
|
|
function ut(e) {
|
|
return JSON.stringify(
|
|
Object.entries(e).filter(([t]) => t.startsWith("data-")).sort(([t], [n]) => t.localeCompare(n))
|
|
);
|
|
}
|
|
function st(e, t) {
|
|
const n = { ...e }, a = n;
|
|
for (const [r, i] of Object.entries(ot)) {
|
|
if (a[i] !== void 0) continue;
|
|
const u = t[r];
|
|
if (u !== void 0) {
|
|
if (u === !1) {
|
|
r === "autoAnimateUnmatched" && (a[i] = "false");
|
|
continue;
|
|
}
|
|
a[i] = typeof u == "boolean" ? "" : u;
|
|
}
|
|
}
|
|
return n;
|
|
}
|
|
function bt({
|
|
children: e,
|
|
background: t,
|
|
backgroundImage: n,
|
|
backgroundVideo: a,
|
|
backgroundVideoLoop: r,
|
|
backgroundVideoMuted: i,
|
|
backgroundIframe: u,
|
|
backgroundColor: h,
|
|
backgroundGradient: C,
|
|
backgroundSize: d,
|
|
backgroundPosition: y,
|
|
backgroundRepeat: w,
|
|
backgroundOpacity: E,
|
|
backgroundTransition: b,
|
|
visibility: N,
|
|
autoAnimate: I,
|
|
autoAnimateId: T,
|
|
autoAnimateRestart: v,
|
|
autoAnimateUnmatched: p,
|
|
autoAnimateEasing: s,
|
|
autoAnimateDuration: f,
|
|
autoAnimateDelay: o,
|
|
transition: D,
|
|
transitionSpeed: S,
|
|
autoSlide: A,
|
|
notes: L,
|
|
backgroundInteractive: B,
|
|
preload: U,
|
|
...j
|
|
}) {
|
|
const m = V(x), c = l(null), g = l(null), k = l(null), _ = st(j, {
|
|
background: t,
|
|
backgroundImage: n,
|
|
backgroundVideo: a,
|
|
backgroundVideoLoop: r,
|
|
backgroundVideoMuted: i,
|
|
backgroundIframe: u,
|
|
backgroundColor: h,
|
|
backgroundGradient: C,
|
|
backgroundSize: d,
|
|
backgroundPosition: y,
|
|
backgroundRepeat: w,
|
|
backgroundOpacity: E,
|
|
backgroundTransition: b,
|
|
visibility: N,
|
|
autoAnimate: I,
|
|
autoAnimateId: T,
|
|
autoAnimateRestart: v,
|
|
autoAnimateUnmatched: p,
|
|
autoAnimateEasing: s,
|
|
autoAnimateDuration: f,
|
|
autoAnimateDelay: o,
|
|
transition: D,
|
|
transitionSpeed: S,
|
|
autoSlide: A,
|
|
notes: L,
|
|
backgroundInteractive: B,
|
|
preload: U
|
|
}), O = ut(_);
|
|
return P(() => {
|
|
const z = c.current;
|
|
if (!m || !z || typeof m.syncSlide != "function") return;
|
|
if (g.current !== m) {
|
|
g.current = m, k.current = O;
|
|
return;
|
|
}
|
|
if (O === it) return;
|
|
const q = g.current === m, J = k.current === O;
|
|
q && J || (m.syncSlide(z), g.current = m, k.current = O);
|
|
}, [m, O]), /* @__PURE__ */ R("section", { ref: c, ..._, children: e });
|
|
}
|
|
function pt({ className: e, style: t, children: n }) {
|
|
return /* @__PURE__ */ R("section", { className: e, style: t, children: n });
|
|
}
|
|
function G(...e) {
|
|
return e.filter(Boolean).join(" ");
|
|
}
|
|
function ct(e, t) {
|
|
return e ? t ? {
|
|
...e,
|
|
...t
|
|
} : e : t;
|
|
}
|
|
function kt({
|
|
animation: e,
|
|
index: t,
|
|
as: n,
|
|
asChild: a,
|
|
className: r,
|
|
style: i,
|
|
children: u
|
|
}) {
|
|
const h = G("fragment", e, r);
|
|
if (a) {
|
|
let d;
|
|
try {
|
|
d = Y.only(u);
|
|
} catch {
|
|
throw new Error("Fragment with asChild expects exactly one React element child.");
|
|
}
|
|
if (!H(d) || d.type === Q)
|
|
throw new Error("Fragment with asChild expects exactly one non-Fragment React element child.");
|
|
const y = {
|
|
className: G(d.props.className, h),
|
|
style: ct(d.props.style, i)
|
|
};
|
|
return t !== void 0 && (y["data-fragment-index"] = t), X(d, y);
|
|
}
|
|
return /* @__PURE__ */ R(n ?? "span", { className: h, style: i, "data-fragment-index": t, children: u });
|
|
}
|
|
function lt(e) {
|
|
const t = e.replace(/\r\n/g, `
|
|
`).split(`
|
|
`);
|
|
for (; t.length && t[0].trim().length === 0; ) t.shift();
|
|
for (; t.length && t[t.length - 1].trim().length === 0; ) t.pop();
|
|
if (!t.length) return "";
|
|
const n = t.filter((a) => a.trim().length > 0).reduce(
|
|
(a, r) => Math.min(a, r.match(/^\s*/)?.[0].length ?? 0),
|
|
Number.POSITIVE_INFINITY
|
|
);
|
|
return t.map((a) => a.slice(n)).join(`
|
|
`);
|
|
}
|
|
function dt(e) {
|
|
const t = e.parentElement;
|
|
t && Array.from(t.children).forEach((n) => {
|
|
n !== e && n instanceof HTMLElement && n.tagName === "CODE" && n.classList.contains("fragment") && n.remove();
|
|
});
|
|
}
|
|
function yt({
|
|
children: e,
|
|
code: t,
|
|
language: n,
|
|
trim: a = !0,
|
|
lineNumbers: r,
|
|
startFrom: i,
|
|
noEscape: u,
|
|
codeClassName: h,
|
|
codeStyle: C,
|
|
codeProps: d,
|
|
className: y,
|
|
style: w,
|
|
...E
|
|
}) {
|
|
const b = V(x), N = l(null), I = l(""), T = typeof t == "string" ? t : typeof e == "string" ? e : "", v = Z(() => a ? lt(T) : T, [T, a]), p = r === !0 ? "" : r === !1 || r == null ? void 0 : String(r), s = [n, h].filter(Boolean).join(" "), f = ["code-wrapper", y].filter(Boolean).join(" ");
|
|
return P(() => {
|
|
const o = N.current;
|
|
if (!o || !b) return;
|
|
const D = b.getPlugin?.("highlight");
|
|
if (!D || typeof D.highlightBlock != "function") return;
|
|
const S = [
|
|
v,
|
|
n || "",
|
|
h || "",
|
|
p == null ? "__none__" : `lineNumbers:${p}`,
|
|
i == null ? "" : String(i),
|
|
u ? "1" : "0"
|
|
].join("::");
|
|
if (I.current === S && o.getAttribute("data-highlighted") === "yes")
|
|
return;
|
|
dt(o), o.textContent = v, o.removeAttribute("data-highlighted"), o.classList.remove("hljs"), o.classList.remove("has-highlights"), p == null ? o.removeAttribute("data-line-numbers") : o.setAttribute("data-line-numbers", p), i == null ? o.removeAttribute("data-ln-start-from") : o.setAttribute("data-ln-start-from", String(i)), u ? o.setAttribute("data-noescape", "") : o.removeAttribute("data-noescape"), D.highlightBlock(o);
|
|
const A = typeof o.closest == "function" ? o.closest("section") : null;
|
|
A && typeof b.syncFragments == "function" && b.syncFragments(A), I.current = S;
|
|
}, [b, v, n, h, p, i, u]), /* @__PURE__ */ R("pre", { className: f, style: w, ...E, children: /* @__PURE__ */ R(
|
|
"code",
|
|
{
|
|
...d,
|
|
ref: N,
|
|
className: s || void 0,
|
|
style: C,
|
|
"data-line-numbers": p,
|
|
"data-ln-start-from": i,
|
|
"data-noescape": u ? "" : void 0,
|
|
children: v
|
|
}
|
|
) });
|
|
}
|
|
function vt() {
|
|
return V(x);
|
|
}
|
|
export {
|
|
yt as Code,
|
|
ht as Deck,
|
|
kt as Fragment,
|
|
x as RevealContext,
|
|
bt as Slide,
|
|
pt as Stack,
|
|
vt as useReveal
|
|
};
|