diff --git a/README.md b/README.md index fbb350a..1d83223 100644 --- a/README.md +++ b/README.md @@ -78,6 +78,7 @@ Open [http://localhost:3000/stati](http://localhost:3000/stati) on your browser. ## Dependencies - [Templ](https://github.com/a-h/templ) +- [Alpine.js](https://github.com/alpinejs/alpine) - [Chart.js](https://github.com/chartjs/Chart.js) - [Tailwindcss](https://github.com/tailwindlabs/tailwindcss) diff --git a/assets/alpine.js b/assets/alpine.js new file mode 100644 index 0000000..ea825d8 --- /dev/null +++ b/assets/alpine.js @@ -0,0 +1,9 @@ +(() => { + var rt = !1, nt = !1, U = [], it = -1; function qt(e) { Cn(e) } function Cn(e) { U.includes(e) || U.push(e), Tn() } function Ee(e) { let t = U.indexOf(e); t !== -1 && t > it && U.splice(t, 1) } function Tn() { !nt && !rt && (rt = !0, queueMicrotask(Rn)) } function Rn() { rt = !1, nt = !0; for (let e = 0; e < U.length; e++)U[e](), it = e; U.length = 0, it = -1, nt = !1 } var R, D, L, st, ot = !0; function Ut(e) { ot = !1, e(), ot = !0 } function Wt(e) { R = e.reactive, L = e.release, D = t => e.effect(t, { scheduler: r => { ot ? qt(r) : r() } }), st = e.raw } function at(e) { D = e } function Gt(e) { let t = () => { }; return [n => { let i = D(n); return e._x_effects || (e._x_effects = new Set, e._x_runEffects = () => { e._x_effects.forEach(o => o()) }), e._x_effects.add(i), t = () => { i !== void 0 && (e._x_effects.delete(i), L(i)) }, i }, () => { t() }] } function ve(e, t) { let r = !0, n, i = D(() => { let o = e(); JSON.stringify(o), r ? n = o : queueMicrotask(() => { t(o, n), n = o }), r = !1 }); return () => L(i) } var Jt = [], Yt = [], Xt = []; function Zt(e) { Xt.push(e) } function ee(e, t) { typeof t == "function" ? (e._x_cleanups || (e._x_cleanups = []), e._x_cleanups.push(t)) : (t = e, Yt.push(t)) } function Ae(e) { Jt.push(e) } function Oe(e, t, r) { e._x_attributeCleanups || (e._x_attributeCleanups = {}), e._x_attributeCleanups[t] || (e._x_attributeCleanups[t] = []), e._x_attributeCleanups[t].push(r) } function ct(e, t) { e._x_attributeCleanups && Object.entries(e._x_attributeCleanups).forEach(([r, n]) => { (t === void 0 || t.includes(r)) && (n.forEach(i => i()), delete e._x_attributeCleanups[r]) }) } function Qt(e) { if (e._x_cleanups) for (; e._x_cleanups.length;)e._x_cleanups.pop()() } var lt = new MutationObserver(pt), ut = !1; function le() { lt.observe(document, { subtree: !0, childList: !0, attributes: !0, attributeOldValue: !0 }), ut = !0 } function ft() { Mn(), lt.disconnect(), ut = !1 } var ce = []; function Mn() { let e = lt.takeRecords(); ce.push(() => e.length > 0 && pt(e)); let t = ce.length; queueMicrotask(() => { if (ce.length === t) for (; ce.length > 0;)ce.shift()() }) } function _(e) { if (!ut) return e(); ft(); let t = e(); return le(), t } var dt = !1, Se = []; function er() { dt = !0 } function tr() { dt = !1, pt(Se), Se = [] } function pt(e) { if (dt) { Se = Se.concat(e); return } let t = new Set, r = new Set, n = new Map, i = new Map; for (let o = 0; o < e.length; o++)if (!e[o].target._x_ignoreMutationObserver && (e[o].type === "childList" && (e[o].addedNodes.forEach(s => s.nodeType === 1 && t.add(s)), e[o].removedNodes.forEach(s => s.nodeType === 1 && r.add(s))), e[o].type === "attributes")) { let s = e[o].target, a = e[o].attributeName, c = e[o].oldValue, l = () => { n.has(s) || n.set(s, []), n.get(s).push({ name: a, value: s.getAttribute(a) }) }, u = () => { i.has(s) || i.set(s, []), i.get(s).push(a) }; s.hasAttribute(a) && c === null ? l() : s.hasAttribute(a) ? (u(), l()) : u() } i.forEach((o, s) => { ct(s, o) }), n.forEach((o, s) => { Jt.forEach(a => a(s, o)) }); for (let o of r) t.has(o) || Yt.forEach(s => s(o)); t.forEach(o => { o._x_ignoreSelf = !0, o._x_ignore = !0 }); for (let o of t) r.has(o) || o.isConnected && (delete o._x_ignoreSelf, delete o._x_ignore, Xt.forEach(s => s(o)), o._x_ignore = !0, o._x_ignoreSelf = !0); t.forEach(o => { delete o._x_ignoreSelf, delete o._x_ignore }), t = null, r = null, n = null, i = null } function Ce(e) { return F(j(e)) } function P(e, t, r) { return e._x_dataStack = [t, ...j(r || e)], () => { e._x_dataStack = e._x_dataStack.filter(n => n !== t) } } function j(e) { return e._x_dataStack ? e._x_dataStack : typeof ShadowRoot == "function" && e instanceof ShadowRoot ? j(e.host) : e.parentNode ? j(e.parentNode) : [] } function F(e) { return new Proxy({ objects: e }, Nn) } var Nn = { ownKeys({ objects: e }) { return Array.from(new Set(e.flatMap(t => Object.keys(t)))) }, has({ objects: e }, t) { return t == Symbol.unscopables ? !1 : e.some(r => Object.prototype.hasOwnProperty.call(r, t) || Reflect.has(r, t)) }, get({ objects: e }, t, r) { return t == "toJSON" ? Dn : Reflect.get(e.find(n => Reflect.has(n, t)) || {}, t, r) }, set({ objects: e }, t, r, n) { let i = e.find(s => Object.prototype.hasOwnProperty.call(s, t)) || e[e.length - 1], o = Object.getOwnPropertyDescriptor(i, t); return o?.set && o?.get ? o.set.call(n, r) || !0 : Reflect.set(i, t, r) } }; function Dn() { return Reflect.ownKeys(this).reduce((t, r) => (t[r] = Reflect.get(this, r), t), {}) } function Te(e) { let t = n => typeof n == "object" && !Array.isArray(n) && n !== null, r = (n, i = "") => { Object.entries(Object.getOwnPropertyDescriptors(n)).forEach(([o, { value: s, enumerable: a }]) => { if (a === !1 || s === void 0 || typeof s == "object" && s !== null && s.__v_skip) return; let c = i === "" ? o : `${i}.${o}`; typeof s == "object" && s !== null && s._x_interceptor ? n[o] = s.initialize(e, c, o) : t(s) && s !== n && !(s instanceof Element) && r(s, c) }) }; return r(e) } function Re(e, t = () => { }) { let r = { initialValue: void 0, _x_interceptor: !0, initialize(n, i, o) { return e(this.initialValue, () => Pn(n, i), s => mt(n, i, s), i, o) } }; return t(r), n => { if (typeof n == "object" && n !== null && n._x_interceptor) { let i = r.initialize.bind(r); r.initialize = (o, s, a) => { let c = n.initialize(o, s, a); return r.initialValue = c, i(o, s, a) } } else r.initialValue = n; return r } } function Pn(e, t) { return t.split(".").reduce((r, n) => r[n], e) } function mt(e, t, r) { if (typeof t == "string" && (t = t.split(".")), t.length === 1) e[t[0]] = r; else { if (t.length === 0) throw error; return e[t[0]] || (e[t[0]] = {}), mt(e[t[0]], t.slice(1), r) } } var rr = {}; function y(e, t) { rr[e] = t } function ue(e, t) { return Object.entries(rr).forEach(([r, n]) => { let i = null; function o() { if (i) return i; { let [s, a] = _t(t); return i = { interceptor: Re, ...s }, ee(t, a), i } } Object.defineProperty(e, `$${r}`, { get() { return n(t, o()) }, enumerable: !1 }) }), e } function nr(e, t, r, ...n) { try { return r(...n) } catch (i) { te(i, e, t) } } function te(e, t, r = void 0) { + e = Object.assign(e ?? { message: "No error message given." }, { el: t, expression: r }), console.warn(`Alpine Expression Error: ${e.message} + +${r ? 'Expression: "' + r + `" + +`: ""}`, t), setTimeout(() => { throw e }, 0) + } var Me = !0; function De(e) { let t = Me; Me = !1; let r = e(); return Me = t, r } function M(e, t, r = {}) { let n; return x(e, t)(i => n = i, r), n } function x(...e) { return ir(...e) } var ir = gt; function or(e) { ir = e } function gt(e, t) { let r = {}; ue(r, e); let n = [r, ...j(e)], i = typeof t == "function" ? In(n, t) : Ln(n, t, e); return nr.bind(null, e, t, i) } function In(e, t) { return (r = () => { }, { scope: n = {}, params: i = [] } = {}) => { let o = t.apply(F([n, ...e]), i); Ne(r, o) } } var ht = {}; function kn(e, t) { if (ht[e]) return ht[e]; let r = Object.getPrototypeOf(async function () { }).constructor, n = /^[\n\s]*if.*\(.*\)/.test(e.trim()) || /^(let|const)\s/.test(e.trim()) ? `(async()=>{ ${e} })()` : e, o = (() => { try { let s = new r(["__self", "scope"], `with (scope) { __self.result = ${n} }; __self.finished = true; return __self.result;`); return Object.defineProperty(s, "name", { value: `[Alpine] ${e}` }), s } catch (s) { return te(s, t, e), Promise.resolve() } })(); return ht[e] = o, o } function Ln(e, t, r) { let n = kn(t, r); return (i = () => { }, { scope: o = {}, params: s = [] } = {}) => { n.result = void 0, n.finished = !1; let a = F([o, ...e]); if (typeof n == "function") { let c = n(n, a).catch(l => te(l, r, t)); n.finished ? (Ne(i, n.result, a, s, r), n.result = void 0) : c.then(l => { Ne(i, l, a, s, r) }).catch(l => te(l, r, t)).finally(() => n.result = void 0) } } } function Ne(e, t, r, n, i) { if (Me && typeof t == "function") { let o = t.apply(r, n); o instanceof Promise ? o.then(s => Ne(e, s, r, n)).catch(s => te(s, i, t)) : e(o) } else typeof t == "object" && t instanceof Promise ? t.then(o => e(o)) : e(t) } var bt = "x-"; function C(e = "") { return bt + e } function sr(e) { bt = e } var Pe = {}; function d(e, t) { return Pe[e] = t, { before(r) { if (!Pe[r]) { console.warn(String.raw`Cannot find directive \`${r}\`. \`${e}\` will use the default order of execution`); return } let n = W.indexOf(r); W.splice(n >= 0 ? n : W.indexOf("DEFAULT"), 0, e) } } } function ar(e) { return Object.keys(Pe).includes(e) } function de(e, t, r) { if (t = Array.from(t), e._x_virtualDirectives) { let o = Object.entries(e._x_virtualDirectives).map(([a, c]) => ({ name: a, value: c })), s = wt(o); o = o.map(a => s.find(c => c.name === a.name) ? { name: `x-bind:${a.name}`, value: `"${a.value}"` } : a), t = t.concat(o) } let n = {}; return t.map(ur((o, s) => n[o] = s)).filter(dr).map(jn(n, r)).sort(Fn).map(o => $n(e, o)) } function wt(e) { return Array.from(e).map(ur()).filter(t => !dr(t)) } var xt = !1, fe = new Map, cr = Symbol(); function lr(e) { xt = !0; let t = Symbol(); cr = t, fe.set(t, []); let r = () => { for (; fe.get(t).length;)fe.get(t).shift()(); fe.delete(t) }, n = () => { xt = !1, r() }; e(r), n() } function _t(e) { let t = [], r = a => t.push(a), [n, i] = Gt(e); return t.push(i), [{ Alpine: B, effect: n, cleanup: r, evaluateLater: x.bind(x, e), evaluate: M.bind(M, e) }, () => t.forEach(a => a())] } function $n(e, t) { let r = () => { }, n = Pe[t.type] || r, [i, o] = _t(e); Oe(e, t.original, o); let s = () => { e._x_ignore || e._x_ignoreSelf || (n.inline && n.inline(e, t, i), n = n.bind(n, e, t, i), xt ? fe.get(cr).push(n) : n()) }; return s.runCleanups = o, s } var Ie = (e, t) => ({ name: r, value: n }) => (r.startsWith(e) && (r = r.replace(e, t)), { name: r, value: n }), ke = e => e; function ur(e = () => { }) { return ({ name: t, value: r }) => { let { name: n, value: i } = fr.reduce((o, s) => s(o), { name: t, value: r }); return n !== t && e(n, t), { name: n, value: i } } } var fr = []; function re(e) { fr.push(e) } function dr({ name: e }) { return pr().test(e) } var pr = () => new RegExp(`^${bt}([^:^.]+)\\b`); function jn(e, t) { return ({ name: r, value: n }) => { let i = r.match(pr()), o = r.match(/:([a-zA-Z0-9\-_:]+)/), s = r.match(/\.[^.\]]+(?=[^\]]*$)/g) || [], a = t || e[r] || r; return { type: i ? i[1] : null, value: o ? o[1] : null, modifiers: s.map(c => c.replace(".", "")), expression: n, original: a } } } var yt = "DEFAULT", W = ["ignore", "ref", "data", "id", "anchor", "bind", "init", "for", "model", "modelable", "transition", "show", "if", yt, "teleport"]; function Fn(e, t) { let r = W.indexOf(e.type) === -1 ? yt : e.type, n = W.indexOf(t.type) === -1 ? yt : t.type; return W.indexOf(r) - W.indexOf(n) } function G(e, t, r = {}) { e.dispatchEvent(new CustomEvent(t, { detail: r, bubbles: !0, composed: !0, cancelable: !0 })) } function T(e, t) { if (typeof ShadowRoot == "function" && e instanceof ShadowRoot) { Array.from(e.children).forEach(i => T(i, t)); return } let r = !1; if (t(e, () => r = !0), r) return; let n = e.firstElementChild; for (; n;)T(n, t, !1), n = n.nextElementSibling } function E(e, ...t) { console.warn(`Alpine Warning: ${e}`, ...t) } var mr = !1; function _r() { mr && E("Alpine has already been initialized on this page. Calling Alpine.start() more than once can cause problems."), mr = !0, document.body || E("Unable to initialize. Trying to load Alpine before `
` is available. Did you forget to add `defer` in Alpine's ` + - + @Splash() -