2025-11-11 06:33:53 +01:00

48 lines
38 KiB
JavaScript

// Datastar v1.0.0-RC.11
var pt = /🖕JS_DS🚀/.source, Me = pt.slice(0, 5), ie = pt.slice(4), O = "datastar", dt = "Datastar-Request", mt = 1e3, gt = "type module", yt = !1, vt = !1, ht = !0, je = "morph", bt = "inner", Et = "outer", St = "prepend", Tt = "append", xt = "before", At = "after", Rt = "upsertAttributes", Mt = je, ge = "datastar-merge-fragments", ye = "datastar-merge-signals", Ue = "datastar-remove-fragments", Ke = "datastar-remove-signals", ve = "datastar-execute-script"; var J = e => e.trim() === "true", q = e => e.replace(/([a-z0-9])([A-Z])/g, "$1-$2").replace(/([a-z])([0-9]+)/gi, "$1-$2").replace(/([0-9]+)([a-z])/gi, "$1-$2").toLowerCase(), he = e => q(e).replace(/-./g, t => t[1].toUpperCase()), be = e => q(e).replace(/-/g, "_"), Xn = e => he(e).replace(/^./, t => t[0].toUpperCase()), wt = e => Function(`return Object.assign({}, ${e})`)(), Q = e => e.startsWith("$") ? e.slice(1) : e, Jn = { kebab: q, snake: be, pascal: Xn }; function k(e, t) { for (let n of t.get("case") || []) { let r = Jn[n]; r && (e = r(e)) } return e } var Qn = "computed", Dt = { type: "attribute", name: Qn, keyReq: "must", valReq: "must", isExpr: !0, onLoad: ({ key: e, mods: t, genRX: n, computed: r, batch: s }) => { e = k(e, t); let { deps: o, rxFn: i } = n(); s(() => { r(o, i, e) }) } }; var U = `${O}-signal-change`; var De = new Set, Ce = new Set, Ee = new Set; function Pe(e) { De.clear(), Ce.clear(), Ee.clear(); let t = e(); return (De.size || Ce.size || Ee.size) && document.dispatchEvent(new CustomEvent(U, { detail: { added: [...De], removed: [...Ce], updated: [...Ee] } })), t } var H = [], Y = new Map; function oe() { return H } function Xe(e) { return Y.get(e) } function Yn(e) { let t = [], n = 0, r = H.length - 1, s = o => o !== e && !o.startsWith(`${e}.`); for (; n <= r;) { let o = Math.floor((n + r) / 2), i = H[o]; if (i < e) n = o + 1; else if (i > e) r = o - 1; else { let a = o; do { let c = H[a]; if (s(c)) break; a-- } while (a >= 0); let l = o; do { let c = H[l]; if (s(c)) break; l++ } while (l < H.length); for (let c = a + 1; c < l; c++)t.push(H[c]); return t } } return t } function Ft(e, t) { Je(e), H.push(e), Y.set(e, t), H.sort((n, r) => r.length - n.length), De.add(e) } function j(e, t) { let n = Y.get(e); n ? Qe(n) && (n.value = t) : Se(t, e) } function ae(e) { return Y.get(e)?.value } function le(e, t) { let n = !1, r = Y.get(e); return r || (n = !0, r = Se(t, e)), { dep: r, inserted: n } } function ke(e, t = !1) { let n = Lt(e); for (let [r, s] of Object.entries(n)) Y.has(r) && t || j(r, s) } function Je(...e) { for (let t of e) { let n = Yn(t); for (let r of n) { Y.delete(r); let s = H.indexOf(r); s > -1 && H.splice(s, 1), Ce?.add(r) } } } function Ne(e = !0, t = !1) { return JSON.stringify(Zn(t), null, e ? 2 : 0) } function Zn(e, ...t) { let n = new Map; for (let s of H) if (!(e && s.match(/^_|\._/))) { if (t.length > 0) { let o = !1; for (let i of t) if (s.startsWith(i)) { o = !0; break } if (!o) continue } n.set(s, Y.get(s)?.value) } return tr(n) } function er(e) { return Object.prototype.toString.call(e) === "[object Object]" } function Lt(e, t = [], n = ".") { return Object.keys(e).reduce((r, s) => Object.assign({}, r, er(e[s]) ? Lt(e[s], t.concat([s]), n) : { [t.concat([s]).join(n)]: e[s] }), {}) } function tr(e, t = ".") { let n = {}; for (let [r, s] of e.entries()) { let o = r.split(t), i = n; for (let a = 0; a < o.length - 1; a++) { let l = o[a]; i[l] || (i[l] = {}), i = i[l] } i[o[o.length - 1]] = s } return n } function Pt(e, t, n, ...r) { return Pe(() => e(...r, ...n.map((s, o) => t[o] ? s : s.value))) } var Fe = [], Be = [], we = 0, ze = 0, nr = (e, t) => t(e[0].value), rr = (e, t) => t(e[0].value, e[1].value), sr = (e, t) => t(e[0].value, e[1].value, e[2].value), ir = (e, t) => t(e[0].value, e[1].value, e[2].value, e[3].value), or = (e, t, n) => { for (let r = 0; r < n; r++)Fe[n][r] = e[r].value; return t(...Fe[n]) }; function kt(e, t) { let n = e.length; return n === 0 ? t : n === 1 ? nr.bind(null, e, t) : n === 2 ? rr.bind(null, e, t) : n === 3 ? sr.bind(null, e, t) : n === 4 ? ir.bind(null, e, t) : (Fe[n] || (Fe[n] = Array(n)), or.bind(null, e, t, n)) } function Qe(e) { return e.type === "signal" } function Ye(e) { return e.type === "computed" } function Se(e, t) { let n = { type: "signal", path: t, previousValue: e, _value: e, flags: 1 }; return Object.defineProperty(n, "value", { get: ar.bind(n), set: lr.bind(n) }), t && Ft(t, n), n } function Ze(e, t, n) { let r = { type: "computed", path: n, flags: 17, getter: kt(e, t) }; Object.defineProperty(r, "value", { get: cr.bind(r) }); for (let s of e) Ht(s, r); return n && Ft(n, r), r } function et(e, t) { let n = { type: "effect", fn: kt(e, t), flags: 2 }; for (let r of e) Ht(r, n); return n.fn(), ur.bind(n) } function ar() { let e = this._value; if (this.flags & 16 && Ot(this, e)) { let t = this.subs; t && Le(t) } return e } function lr(e) { if (this._value !== (this._value = e)) { this.path && Ee.add(this.path), this.flags = 17; let t = this.subs; if (t) { let n = t, r = n.nextSub, s; e: do { let o = n.sub, i = o.flags; if (i & 3 && (i & 60 ? i & 12 ? i & 4 ? !(i & 48) && qt(n, o) ? (o.flags = i | 40, i &= 1) : i = 0 : o.flags = i & -9 | 32 : i = 0 : o.flags = i | 32, i & 2 && Vt(o), i & 1 && Ye(o))) { let a = o.subs; if (a) { n = a, a.nextSub && (s = { value: r, prev: s }, r = n.nextSub); continue } } if (n = r) { r = n.nextSub; continue } for (; s;)if (n = s.value, s = s.prev, n) { r = n.nextSub; continue e } break } while (!0); for (; we < ze;) { let o = Be[we]; Be[we++] = void 0, It(o, o.flags &= -65) } we = 0, ze = 0 } } } function cr() { let e = this.flags; if (e & 16 || e & 32 && Wt(this.deps, this)) { if (Nt(this)) { let t = this.subs; t && Le(t) } } else e & 32 && (this.flags = e & -33); return this._value } function ur() { let e = this.deps; for (; e;)e = $t(e, this); this.flags = 0 } function Nt(e) { Gt(e); try { return e._value !== (e._value = e.getter()) ? (e.path && Ee.add(e.path), !0) : !1 } finally { _t(e) } } function Ot(e, t) { return e.flags = 1, e.previousValue !== (e.previousValue = t) } function Ct(e) { return Ye(e) ? Nt(e) : Ot(e, e._value) } function Vt(e) { let t = e.flags; t & 64 || (e.flags = t | 64, Be[ze++] = e) } function It(e, t) { if (t & 16 || t & 32 && Wt(e.deps, e)) { Gt(e); try { e.fn() } finally { _t(e) } return } t & 32 && (e.flags = t & -33); let n = e.deps; for (; n;) { let r = n.dep, s = r.flags; s & 64 && It(r, r.flags = s & -65), n = n.nextDep } } function Ht(e, t) { let n = t.depsTail; if (n && n.dep === e) return; let r, s = t.flags & 4; if (s && (r = n ? n.nextDep : t.deps, r && r.dep === e)) { t.depsTail = r; return } let o = e.subsTail; if (o && o.sub === t && (!s || qt(o, t))) return; let i = t.depsTail = e.subsTail = { dep: e, sub: t, prevDep: n, nextDep: r, prevSub: o, nextSub: void 0 }; r && (r.prevDep = i), n ? n.nextDep = i : t.deps = i, o ? o.nextSub = i : e.subs = i } function $t(e, t = e.sub) { let n = e.dep, r = e.prevDep, s = e.nextDep, o = e.nextSub, i = e.prevSub; if (s ? s.prevDep = r : t.depsTail = r, r ? r.nextDep = s : t.deps = s, o ? o.prevSub = i : n.subsTail = i, i) i.nextSub = o; else if ((n.subs = o) === void 0 && Ye(n)) { let a = n.deps; if (a) { n.flags = 17; do a = $t(a, n); while (a) } } return s } function Gt(e) { e.depsTail = void 0, e.flags = e.flags & -57 | 4 } function _t(e) { e.flags &= -5 } function Wt(e, t) { let n, r = 0; e: do { let s = e.dep, o = s.flags, i = !1; if (t.flags & 16) i = !0; else if ((o & 17) === 17) { if (Ct(s)) { let a = s.subs; a.nextSub && Le(a), i = !0 } } else if ((o & 33) === 33) { (e.nextSub || e.prevSub) && (n = { value: e, prev: n }); let a = s; e = a.deps, t = a, ++r; continue } if (!i && e.nextDep) { e = e.nextDep; continue } for (; r;) { --r; let a = t, l = a.subs, c = l.nextSub; if (c ? (e = n.value, n = n.prev) : e = l, i) { if (Ct(a)) { c && Le(l), t = e.sub; continue } } else t.flags &= -33; if (t = e.sub, e.nextDep) { e = e.nextDep; continue e } i = !1 } return i } while (!0) } function Le(e) { do { let t = e.sub, n = e.nextSub, r = t.flags; (r & 48) === 32 && (t.flags = r | 16, r & 2 && Vt(t)), e = n } while (e) } function qt(e, t) { let n = t.depsTail; if (n) { let r = t.deps; do { if (r === e) return !0; if (r === n) break; r = r.nextDep } while (r) } return !1 } var jt = { type: "attribute", name: "signals", isExpr: !0, onLoad: e => { let { key: t, mods: n, value: r, genRX: s, evalRX: o, batch: i } = e, { deps: a, dm: l, rxFn: c } = s(), u = n.has("ifmissing"); if (t !== "") { let f = k(t, n), y = r === "" ? r : o(c, l, a); i(() => { u ? le(f, y) : j(f, y) }) } else { let f = o(c, l, a); i(() => { ke(f, u) }) } } }; function Oe(e) { return e instanceof HTMLElement || e instanceof SVGElement } function ce(e, t) { let n = te("ignore"), r = `${n}__self`; if (!Oe(e) || e.closest(`[${n}]`)) return; let s = document.createTreeWalker(e, 1); for (; e;) { if (Oe(e)) { if (e.hasAttribute(n)) { e = s.nextSibling(); continue } e.hasAttribute(r) || t(e) } e = s.nextNode() } } var fr = "https://data-star.dev/errors"; function Ut(e, t, n = {}) {
let r = new Error; r.name = `${O} ${e} error`; let s = be(t), o = new URLSearchParams({ metadata: JSON.stringify(n) }).toString(), i = JSON.stringify(n, null, 2); return r.message = `${t}
More info: ${fr}/${e}/${s}?${o}
Context: ${i}`, r
} function $(e, t, n = {}) { let r = { plugin: { name: t.plugin.name, type: t.plugin.type } }; return Ut("init", e, Object.assign(r, n)) } function h(e, t, n = {}) { let r = { plugin: { name: t.plugin.name, type: t.plugin.type }, element: { id: t.el.id, tag: t.el.tagName }, expression: { rawKey: t.rawKey, key: t.key, value: t.value, validSignals: oe(), fnContent: t.fnContent } }; return Ut("runtime", e, Object.assign(r, n)) } var Te = {}, nt = [], ue = new Map, tt = null, xe = ""; function Kt(e) { xe = e } function te(e) { return xe ? `data-${xe}-${e}` : `data-${e}` } function Ve(...e) { for (let t of e) { let n = { plugin: t, actions: Te, removals: ue, applyToElement: Ie, batch: Pe, signal: Se, computed: Ze, effect: et }, r = t.type; if (r === "action") Te[t.name] = t; else if (r === "attribute") nt.push(t), t.onGlobalInit?.(n); else if (r === "watcher") t.onGlobalInit?.(n); else throw $("InvalidPluginType", n) } nt.sort((t, n) => { let r = n.name.length - t.name.length; return r !== 0 ? r : t.name.localeCompare(n.name) }) } function rt(e = document.documentElement) { queueMicrotask(() => { if (ce(e, Ie), !tt) { let t = e === document.documentElement ? document.body : e; tt = new MutationObserver(pr), tt.observe(t, { subtree: !0, childList: !0, attributes: !0 }) } }) } function pr(e) { let t = `[${te("ignore")}]`, n = new Set; for (let { target: s, type: o, addedNodes: i, removedNodes: a } of e) switch (o) { case "childList": { for (let l of a) ce(l, c => { let u = ue.get(c); if (ue.delete(c)) { for (let f of u.values()) f(); u.clear() } }); for (let l of i) ce(l, c => n.add(c)) } break; case "attributes": { if (!Oe(s) || s.closest(t)) continue; n.add(s); break } }let r = Array.from(n); r.sort((s, o) => s.compareDocumentPosition(o) & Node.DOCUMENT_POSITION_FOLLOWING ? -1 : 1); for (let s of r) Ie(s) } function Bt(e) { let t = 5831, n = e.length; for (; n--;)t += (t << 5) + e.charCodeAt(n); return (t >>> 0).toString(36) } function Ie(e) { let t = [], n = ue.get(e) || new Map, r = new Map(n); for (let [s, o] of Object.entries(e.dataset)) { if (!s.startsWith(xe)) continue; let i = Bt(`${s}${o}`); r.delete(i) || t.push({ key: s, value: o, hash: i }) } for (let [s, o] of r) o(), n.delete(s); for (let { key: s, value: o, hash: i } of t) { let a = dr(e, s, o); a && n.set(i, a) } n.size && ue.set(e, n) } function dr(e, t, n) { let r = he(t.slice(xe.length)), s = nt.find(y => RegExp(`^${y.name}([A-Z]|_|$)`).test(r)); if (!s) return; let [o, ...i] = r.slice(s.name.length).split(/\_\_+/), a = !!o; a && (o = he(o)); let l = !!n, c = { applyToElement: Ie, actions: Te, removals: ue, genRX: () => mr(c, ...s.argNames || []), plugin: s, el: e, rawKey: r, key: o, value: n, mods: new Map, batch: Pe, signal: Se, computed: Ze, effect: et, evalRX: Pt }, u = s.keyReq || "allowed"; if (a) { if (u === "denied") throw h(`${s.name}KeyNotAllowed`, c) } else if (u === "must") throw h(`${s.name}KeyRequired`, c); let f = s.valReq || "allowed"; if (l) { if (f === "denied") throw h(`${s.name}ValueNotAllowed`, c) } else if (f === "must") throw h(`${s.name}ValueRequired`, c); if (u === "exclusive" || f === "exclusive") { if (a && l) throw h(`${s.name}KeyAndValueProvided`, c); if (!a && !l) throw h(`${s.name}KeyOrValueRequired`, c) } for (let y of i) { let [v, ...p] = y.split("."); c.mods.set(he(v), new Set(p.map(g => g.toLowerCase()))) } return s.onLoad(c) || (() => { }) } function mr(e, ...t) {
let n = [], r = new Set, s = ""; if (e.plugin.isExpr) {
let p = /(\/(\\\/|[^\/])*\/|"(\\"|[^\"])*"|'(\\'|[^'])*'|`(\\`|[^`])*`|\(\s*((function)\s*\(\s*\)|(\(\s*\))\s*=>)\s*(?:\{[\s\S]*?\}|[^;)\{]*)\s*\)\s*\(\s*\)|[^;])+/gm, g = e.value.trim().match(p); if (g) {
let b = g.length - 1, D = g[b].trim(); D.startsWith("return") || (g[b] = `return (${D});`), s = g.join(`;
`)
}
} else s = e.value.trim(); let o = new Map, i = RegExp(`(?:${Me})(.*?)(?:${ie})`, "gm"); for (let p of s.matchAll(i)) { let g = p[1], b = `dsEscaped${Bt(g)}`; o.set(b, g), s = s.replace(Me + g + ie, b) } let a = (p, g) => `${p}${be(g).replaceAll(/\./g, "_")}`, l = new Set(t), c = oe(); if (c.length) { let p = c.join("|"), g = RegExp(`\\$(${p})(\\s*[+&^\\/*|-]?=[^=]|\\+\\+|--)`, "gm"), b = [...s.matchAll(g)], D = (N, w, E = "") => { let x = RegExp(`\\$${N[1]}(?!\\w)`, "gm"); s = s.replaceAll(x, w + E) }; if (b.length) { let N = `${O}Mut_`, w = new Set; for (let E of b) { let x = E[1], m = Xe(x), A = a(N, x); m && !w.has(m) && (r.add(m), w.add(m), n.push(!0), l.add(A)), D(E, A, ".value") } } let C = RegExp(`\\$(${p})(\\W|$)`, "gm"), M = [...s.matchAll(C)]; if (M.length) { let N = `${O}Pure_`, w = new Set; for (let E of M) { let x = E[1], m = Xe(x), A = a(N, x); m && !w.has(m) && (r.add(m), w.add(m), n.push(!1), l.add(A)), D(E, A) } } } let u = new Set, f = RegExp(`@(${Object.keys(Te).join("|")})\\(`, "gm"), y = [...s.matchAll(f)], v = new Set; if (y.length) { let p = `${O}Act_`; for (let g of y) { let b = g[1], D = Te[b]; if (!D) continue; u.add(b); let C = a(p, b); l.add(C), s = s.replace(`@${b}(`, `${C}(`), v.add((...M) => D.fn(e, ...M)) } } for (let [p, g] of o) s = s.replace(p, g); e.fnContent = s; try { let p = Function("el", ...l, s); return { dm: n, deps: [...r], rxFn: (...g) => { try { return p(e.el, ...g, ...v) } catch (b) { throw h("ExecuteExpression", e, { error: b.message }) } } } } catch (p) { throw h("GenerateExpression", e, { error: p.message }) }
} Ve(jt, Dt); var Z = `${O}-sse`, He = "started", $e = "finished", zt = "error", Xt = "retrying", Jt = "retrying"; function K(e, t) { document.addEventListener(Z, n => { if (n.detail.type !== e) return; let { argsRaw: r } = n.detail; t(r) }) } function ne(e, t, n) { document.dispatchEvent(new CustomEvent(Z, { detail: { type: e, el: t, argsRaw: n } })) } var Qt = e => `${e}`.includes("text/event-stream"), Yt = e => e === "GET", tn = "text/event-stream", nn = "text/html", rn = "application/json", sn = "application/javascript", gr = [tn, nn, rn, sn], B = async (e, t, n, r) => {
let { el: s, evt: o } = e, { headers: i, contentType: a, includeLocal: l, excludeSignals: c, selector: u, openWhenHidden: f, retryInterval: y, retryScaler: v, retryMaxWaitMs: p, retryMaxCount: g, abort: b } = Object.assign({ headers: {}, contentType: "json", includeLocal: !1, excludeSignals: !1, selector: null, openWhenHidden: !1, retryInterval: mt, retryScaler: 2, retryMaxWaitMs: 3e4, retryMaxCount: 10, abort: void 0 }, r), D = t.toLowerCase(), C = () => { }; try {
if (!n?.length) throw h("SseNoUrlProvided", e, { action: D }); let M = { Accept: gr.join(", ") }; M[dt] = !0, a === "json" && (M["Content-Type"] = "application/json"); let N = Object.assign({}, M, i), w = {
method: t, headers: N, openWhenHidden: f, retryInterval: y, retryScaler: v, retryMaxWaitMs: p, retryMaxCount: g, signal: b, onopen: async m => { if (m.status >= 400) { let A = m.status.toString(); ne(zt, s, { status: A }) } }, onmessage: m => {
if (!m.event.startsWith(O)) return; let A = m.event, P = {}, _ = m.data.split(`
`); for (let d of _) { let S = d.indexOf(" "), R = d.slice(0, S), T = P[R]; T || (T = [], P[R] = T); let L = d.slice(S + 1); T.push(L) } let F = {}; for (let [d, S] of Object.entries(P)) F[d] = S.join(`
`); ne(A, s, F)
}, onerror: m => { if (Qt(m)) throw h("InvalidContentType", e, { url: n }); m && (console.error(m.message), ne(Xt, s, { message: m.message })) }
}, E = new URL(n, window.location.href), x = new URLSearchParams(E.search); if (a === "json") { if (!c) { let m = Ne(!1, !l); Yt(t) ? x.set(O, m) : w.body = m } } else if (a === "form") { let m = u ? document.querySelector(u) : s.closest("form"); if (m === null) throw u ? h("SseFormNotFound", e, { action: D, selector: u }) : h("SseClosestFormNotFound", e, { action: D }); if (!m.checkValidity()) { m.reportValidity(), C(); return } let A = new FormData(m), P = s; if (s === m) o instanceof SubmitEvent && (P = o.submitter); else { let d = S => S.preventDefault(); m.addEventListener("submit", d), C = () => m.removeEventListener("submit", d) } if (P instanceof HTMLButtonElement) { let d = P.getAttribute("name"); d && A.append(d, P.value) } let _ = m.getAttribute("enctype") === "multipart/form-data"; _ || (N["Content-Type"] = "application/x-www-form-urlencoded"); let F = new URLSearchParams(A); if (Yt(t)) for (let [d, S] of F) x.append(d, S); else _ ? w.body = A : w.body = F } else throw h("SseInvalidContentType", e, { action: D, contentType: a }); ne(He, s, {}), E.search = x.toString(); try { await Er(E.toString(), s, w) } catch (m) { if (!Qt(m)) throw h("SseFetchFailed", e, { method: t, url: n, error: m }) }
} finally { ne($e, s, {}), C() }
}; async function yr(e, t) { let n = e.getReader(), r; for (r = await n.read(); !r.done;)t(r.value), r = await n.read() } function vr(e) { let t, n, r, s = !1; return function (i) { t === void 0 ? (t = i, n = 0, r = -1) : t = br(t, i); let a = t.length, l = 0; for (; n < a;) { s && (t[n] === 10 && (l = ++n), s = !1); let c = -1; for (; n < a && c === -1; ++n)switch (t[n]) { case 58: r === -1 && (r = n - l); break; case 13: s = !0; case 10: c = n; break }if (c === -1) break; e(t.subarray(l, c), r), l = n, r = -1 } l === a ? t = void 0 : l !== 0 && (t = t.subarray(l), n -= l) } } function hr(e, t, n) {
let r = Zt(), s = new TextDecoder; return function (i, a) {
if (i.length === 0) n?.(r), r = Zt(); else if (a > 0) {
let l = s.decode(i.subarray(0, a)), c = a + (i[a + 1] === 32 ? 2 : 1), u = s.decode(i.subarray(c)); switch (l) {
case "data": r.data = r.data ? `${r.data}
${u}` : u; break; case "event": r.event = u; break; case "id": e(r.id = u); break; case "retry": { let f = Number.parseInt(u, 10); Number.isNaN(f) || t(r.retry = f); break }
}
}
}
} function br(e, t) { let n = new Uint8Array(e.length + t.length); return n.set(e), n.set(t, e.length), n } function Zt() { return { data: "", event: "", id: "", retry: void 0 } } var en = "last-event-id"; function Er(e, t, { signal: n, headers: r, onopen: s, onmessage: o, onclose: i, onerror: a, openWhenHidden: l, fetch: c, retryInterval: u = 1e3, retryScaler: f = 2, retryMaxWaitMs: y = 3e4, retryMaxCount: v = 10, overrides: p, ...g }) { return new Promise((b, D) => { let C = { ...r }; C.accept || (C.accept = tn); let M; function N() { M.abort(), document.hidden || _() } l || document.addEventListener("visibilitychange", N); let w = 0; function E() { document.removeEventListener("visibilitychange", N), window.clearTimeout(w), M.abort() } n?.addEventListener("abort", () => { E(), b() }); let x = c ?? window.fetch, m = s ?? function () { }, A = 0, P = u; async function _() { M = new AbortController; try { let F = await x(e, { ...g, headers: C, signal: M.signal }); A = 0, u = P, await m(F); let d = async (R, T, L, W, ...V) => { let me = { [L]: await T.text() }; for (let se of V) { let qe = `datastar-${q(se)}`, I = T.headers.get(qe); if (W) { let X = W[se]; X && (typeof X == "string" ? I = X : I = JSON.stringify(X)) } I && (me[se] = I) } ne(R, t, me), E() }, S = F.headers.get("Content-Type"); if (S?.includes(nn)) return await d(ge, F, "fragments", p, "selector", "mergeMode", "useViewTransition"); if (S?.includes(rn)) return await d(ye, F, "signals", p, "onlyIfMissing", "mergeMode", "useViewTransition"); if (S?.includes(sn)) return await d(ve, F, "script", p, "autoRemove", "attributes"); await yr(F.body, vr(hr(R => { R ? C[en] = R : delete C[en] }, R => { P = R, u = R }, o))), i?.(), E(), b() } catch (F) { if (!M.signal.aborted) try { let d = a?.(F) ?? u; window.clearTimeout(w), w = window.setTimeout(_, d), u *= f, u = Math.min(u, y), A++, A >= v ? (ne(Jt, t, {}), E(), D("Max retries reached.")) : console.error(`Datastar failed to reach ${e.toString()} retrying in ${d}ms.`) } catch (d) { E(), D(d) } } } _() }) } var on = { type: "action", name: "delete", fn: async (e, t, n) => B(e, "DELETE", t, { ...n }) }; var an = { type: "action", name: "get", fn: async (e, t, n) => B(e, "GET", t, { ...n }) }; var ln = { type: "action", name: "patch", fn: async (e, t, n) => B(e, "PATCH", t, { ...n }) }; var cn = { type: "action", name: "post", fn: async (e, t, n) => B(e, "POST", t, { ...n }) }; var un = { type: "action", name: "put", fn: async (e, t, n) => B(e, "PUT", t, { ...n }) }; var fn = {
type: "watcher", name: ve, onGlobalInit: async e => {
K(ve, ({ autoRemove: t = `${ht}`, attributes: n = gt, script: r }) => {
let s = J(t); if (!r?.length) throw $("NoScriptProvided", e); let o = document.createElement("script"); for (let i of n.split(`
`)) { let a = i.indexOf(" "), l = a ? i.slice(0, a) : i, c = a ? i.slice(a) : ""; o.setAttribute(l.trim(), c.trim()) } o.text = r, document.head.appendChild(o), s && o.remove()
})
}
}; var Ae = document, Re = !!Ae.startViewTransition; function z(e, t) { if (t.has("viewtransition") && Re) { let n = e; e = (...r) => document.startViewTransition(() => n(...r)) } return e } var Sn = "div", st = "value", at = e => document.createElement(e), Tn = () => at(Sn), Sr = e => `<${e}></${e}>`, pn = e => [...e.querySelectorAll("[id]")], xn = e => e instanceof Element, dn = e => e instanceof HTMLTemplateElement, mn = e => e instanceof HTMLInputElement, gn = e => e instanceof HTMLTextAreaElement, yn = e => e instanceof HTMLOptionElement, An = { type: "watcher", name: ge, onGlobalInit: async e => { let t = at("template"); K(ge, ({ fragments: n = Sr(Sn), selector: r = "", mergeMode: s = Mt, useViewTransition: o = "false" }) => { let i = J(o); t.innerHTML = n.trim(); for (let a of [...t.content.childNodes]) { if (!xn(a)) { if (a.nodeType === 3 && !a.nodeValue?.trim()) continue; throw $("NoFragmentsFound", e) } let l = r || `#${a.getAttribute("id")}`, c = document.querySelectorAll(l); if (!c.length) throw $("NoTargetsFound", e, { selectorOrID: l }); i && Re ? Ae.startViewTransition(() => vn(e, s, a, c)) : vn(e, s, a, c) } }) } }; function vn(e, t, n, r) { let s = `[${te("ignore-morph")}]`; for (let o of r) { let i = n.cloneNode(!0); switch (t) { case je: { xr(o, i), ce(o, a => { if (o.closest(s)) return; let l = e.removals.get(a); if (e.removals.delete(a)) { for (let c of l.values()) c(); l.clear() } e.applyToElement(a) }); break } case bt: o.innerHTML = i.outerHTML; break; case Et: o.replaceWith(i); break; case St: o.prepend(i); break; case Tt: o.append(i); break; case xt: o.before(i); break; case At: o.after(i); break; case Rt: for (let a of i.getAttributeNames()) { let l = i.getAttribute(a); o.setAttribute(a, l) } break; default: throw $("InvalidMergeMode", e, { mergeMode: t }) } } } var pe = Tn(); pe.hidden = !0; var Ge, G = new Map, fe = new Set, Tr = pe.moveBefore !== void 0; function xr(e, t) { let n = te("ignore-morph"), r = `[${n}]`; if (e.hasAttribute(n) && t.hasAttribute(n) || e.parentElement?.closest(r)) return [e]; let s = Tn(); s.append(t); let o = pn(s), i = pn(e); e.id && i.push(e); let a = new Set, l = new Map; for (let { id: p, tagName: g } of i) l.has(p) ? a.add(p) : l.set(p, g); fe.clear(); for (let { id: p, tagName: g } of o) fe.has(p) ? a.add(p) : l.get(p) === g && fe.add(p); for (let p of a) fe.delete(p); G.clear(), En(e.parentElement, i), En(s, o), document.body.insertAdjacentElement("afterend", pe), Ge = e; let c = e.parentNode, u = e.previousSibling, f = e.nextSibling; Rn(c, s, e, f); let y = [], v = u?.nextSibling || c.firstChild; for (; v && v !== f;)y.push(v), v = v.nextSibling; return pe.remove(), y } function Rn(e, t, n = null, r = null) { dn(e) && dn(t) && (e = e.content, t = t.content), n ??= e.firstChild; for (let s of t.childNodes) { if (n && n !== r) { let i = Ar(s, n, r); if (i) { if (i !== n) { let a = n; for (; a && a !== i;) { let l = a; a = a.nextSibling, bn(l) } } it(i, s), n = i.nextSibling; continue } } if (xn(s) && fe.has(s.id)) { let i = s.id, a = `[id="${i}"]`, l = f => f.querySelector(a), c = Ge.id === i && Ge || l(Ge) || l(pe), u = c; for (; u = u.parentNode;) { let f = G.get(u); f && (f.delete(c.id), f.size || G.delete(u)) } Mn(e, c, n), it(c, s), n = c.nextSibling; continue } if (G.has(s)) { let i = at(s.tagName); return e.insertBefore(i, n), it(i, s), i } let o = document.importNode(s, !0); e.insertBefore(o, n) } for (; n && n !== r;) { let s = n; n = n.nextSibling, bn(s) } } function Ar(e, t, n) { let r = null, s = e.nextSibling, o = 0, i = 0, a = G.get(e)?.size || 0, l = t; for (; l && l !== n;) { if (hn(l, e)) { let c = !1, u = G.get(l), f = G.get(e); if (f && u) { for (let y of u) if (f.has(y)) { c = !0; break } } if (c) return l; if (!r && !G.has(l)) { if (!a) return l; r = l } } if (i += G.get(l)?.size || 0, i > a || (r === null && s && hn(l, s) && (o++, s = s.nextSibling, o >= 2 && (r = void 0)), l.contains(document.activeElement))) break; l = l.nextSibling } return r || null } function hn(e, t) { let n = e, r = t; return n.nodeType === r.nodeType && n.tagName === r.tagName && (!n.id || n.id === r.id) } function bn(e) { G.has(e) ? Mn(pe, e, null) : e.parentNode?.removeChild(e) } function Mn(e, t, n = null) { Tr ? e.moveBefore(t, n) : e.insertBefore(t, n) } function it(e, t) { let n = t.nodeType, r = e, s = t; if (n === 1) { let o = te("ignore-morph"); if (r.hasAttribute(o) && s.hasAttribute(o)) return e; let i = r.attributes, a = s.attributes; for (let l of a) r.getAttribute(l.name) !== l.value && r.setAttribute(l.name, l.value); for (let l = i.length - 1; 0 <= l; l--) { let c = i[l]; c && (s.hasAttribute(c.name) || r.removeAttribute(c.name)) } if (mn(r) && mn(s) && s.type !== "file") { let l = s.value, c = r.value; ot(r, s, "checked"), ot(r, s, "disabled"), Object.keys(s.dataset || {}).some(f => f.startsWith("bind")) || (s.hasAttribute(st) ? c !== l && (r.setAttribute(st, l), r.value = l) : (r.value = "", r.removeAttribute(st))) } else if (yn(r) && yn(s)) ot(r, s, "selected"); else if (gn(r) && gn(s)) { let l = s.value, c = r.value; l !== c && (r.value = l), r.firstChild && r.firstChild.nodeValue !== l && (r.firstChild.nodeValue = l) } } return (n === 8 || n === 3) && e.nodeValue !== t.nodeValue && (e.nodeValue = t.nodeValue), r.isEqualNode(s) || Rn(r, s), e } function ot(e, t, n) { let r = t, s = e, o = r[n], i = s[n]; o !== i && (s[n] = r[n], o ? e.setAttribute(n, "") : e.removeAttribute(n)) } function En(e, t) { for (let n of t) if (fe.has(n.id)) { let r = n; for (; r && r !== e;) { let s = G.get(r); s || (s = new Set, G.set(r, s)), s.add(n.id), r = r.parentElement } } } var wn = { type: "watcher", name: ye, onGlobalInit: async ({ batch: e }) => { K(ye, ({ signals: t = "{}", onlyIfMissing: n = `${vt}` }) => { let r = J(n), s = wt(t); e(() => ke(s, r)) }) } }; var Dn = { type: "watcher", name: Ue, onGlobalInit: async e => { K(Ue, ({ selector: t, useViewTransition: n = `${yt}` }) => { if (!t.length) throw $("NoSelectorProvided", e); let r = J(n), s = document.querySelectorAll(t), o = () => { for (let i of s) i.remove() }; r && Re ? Ae.startViewTransition(() => o()) : o() }) } }; var Cn = {
type: "watcher", name: Ke, onGlobalInit: async e => {
let { batch: t } = e; K(Ke, ({ paths: n = "" }) => {
let r = n.split(`
`).map(s => s.trim()); if (!r?.length) throw $("NoPathsProvided", e); t(() => { Je(...r) })
})
}
}; var Fn = { type: "attribute", name: "attr", valReq: "must", isExpr: !0, onLoad: ({ el: e, key: t, genRX: n, computed: r, effect: s }) => { let { deps: o, rxFn: i } = n(), a = (c, u) => { u === "" || u === !0 ? e.setAttribute(c, "") : u === !1 || u === null || u === void 0 ? e.removeAttribute(c) : e.setAttribute(c, u) }; if (t === "") { let c = r(o, i); return s([c], u => { for (let [f, y] of Object.entries(u)) a(f, y) }) } t = q(t); let l = r(o, i); return s([l], c => { a(t, c) }) } }; var Rr = /^data:(?<mime>[^;]+);base64,(?<contents>.*)$/, Ln = ["change", "input", "keydown"], Pn = { type: "attribute", name: "bind", keyReq: "exclusive", valReq: "exclusive", onLoad: e => { let { el: t, key: n, mods: r, value: s, effect: o, batch: i } = e, a = t, l = n ? k(n, r) : Q(s), c = t.tagName.toLowerCase(), u = c.includes("input"), f = c.includes("select"), y = t.getAttribute("type"), v = t.hasAttribute("value"), p = "", g = u && y === "checkbox"; g && (a.hasAttribute("checked") ? p = v ? a.value : !0 : p = v ? "" : !1); let b = u && y === "number"; (b || u && y === "range") && (p = v ? Number(a.value) : 0); let C = u && y === "radio"; C && (t.getAttribute("name")?.length || t.setAttribute("name", l)); let M = u && y === "file", { dep: N, inserted: w } = i(() => le(l, p)), E = -1; Array.isArray(N.value) && (t.getAttribute("name") === null && t.setAttribute("name", l), E = [...document.querySelectorAll(`[name="${l}"]`)].findIndex(d => d === e.el)); let x = E >= 0, m = () => [...ae(l)], A = () => { let d = ae(l); x && !f && (d = d[E] || p); let S = `${d}`; if (g || C) typeof d == "boolean" ? a.checked = d : a.checked = S === a.value; else if (f) { let R = t; if (R.multiple) { if (!x) throw h("BindSelectMultiple", e); for (let T of R.options) { if (T?.disabled) continue; let L = b ? Number(T.value) : T.value; T.selected = d.includes(L) } } else R.value = S } else M || ("value" in t ? t.value = S : t.setAttribute("value", S)) }, P = async () => { let d = ae(l); if (x) { let L = d; for (; E >= L.length;)L.push(p); d = L[E] || p } let S = (L, W) => { let V = W; x && !f && !M && (V = m(), V[E] = W), j(L, V) }; if (M) { let L = [...a?.files || []], W = [], V = [], me = []; await Promise.all(L.map(se => new Promise(qe => { let I = new FileReader; I.onload = () => { if (typeof I.result != "string") throw h("InvalidFileResultType", e, { resultType: typeof I.result }); let X = I.result.match(Rr); if (!X?.groups) throw h("InvalidDataUri", e, { result: I.result }); W.push(X.groups.contents), V.push(X.groups.mime), me.push(se.name) }, I.onloadend = () => qe(void 0), I.readAsDataURL(se) }))), i(() => { S(l, W), S(`${l}Mimes`, V), S(`${l}Names`, me) }); return } let R = a.value || "", T; if (g) { let L = a.checked; v ? T = L ? R : "" : T = L } else if (f) { let W = [...t.selectedOptions]; x ? T = W.filter(V => V.selected).map(V => V.value) : T = W[0]?.value || p } else typeof d == "boolean" ? T = !!R : typeof d == "number" ? T = Number(R) : T = R || ""; i(() => { S(l, T) }) }; w && P(); for (let d of Ln) t.addEventListener(d, P); let _ = d => { d.persisted && P() }; window.addEventListener("pageshow", _); let F = o([N], () => A()); return () => { F(); for (let d of Ln) t.removeEventListener(d, P); window.removeEventListener("pageshow", _) } } }; var kn = { type: "attribute", name: "class", valReq: "must", isExpr: !0, onLoad: ({ el: e, key: t, mods: n, genRX: r, computed: s, effect: o }) => { let i = e.classList, { deps: a, rxFn: l } = r(), c = s(a, l); return o([c], u => { if (t === "") { let f = u; for (let [y, v] of Object.entries(f)) { let p = y.split(/\s+/); v ? i.add(...p) : i.remove(...p) } } else { let f = q(t); f = k(f, n), u ? i.add(f) : i.remove(f) } }) } }; var Nn = { type: "attribute", name: "indicator", keyReq: "exclusive", valReq: "exclusive", onLoad: e => { let { el: t, key: n, mods: r, value: s, batch: o } = e, i = n ? k(n, r) : Q(s), { dep: a } = o(() => le(i, !1)); if (!Qe(a)) throw h("not_signal", e, { signalName: i }); let l = c => { let { type: u, el: f } = c.detail; f === t && o(() => { switch (u) { case He: a.value = !0; break; case $e: a.value = !1; break } }) }; return document.addEventListener(Z, l), () => { a.value = !1, document.removeEventListener(Z, l) } } }; var On = { type: "attribute", name: "jsonSignals", keyReq: "denied", valReq: "denied", onLoad: e => { let { el: t } = e; t instanceof HTMLElement || h("JsonSignalsInvalidElement", e); let n = () => { t.textContent = Ne(!0) }; return n(), document.addEventListener(U, n), () => { document.removeEventListener(U, n) } } }; function ee(e) { if (!e || e.size <= 0) return 0; for (let t of e) { if (t.endsWith("ms")) return Number(t.replace("ms", "")); if (t.endsWith("s")) return Number(t.replace("s", "")) * 1e3; try { return Number.parseFloat(t) } catch { } } return 0 } function re(e, t, n = !1) { return e ? e.has(t.toLowerCase()) : n } function lt(e, t) { return (...n) => { setTimeout(() => { e(...n) }, t) } } function Mr(e, t, n = !1, r = !0) { let s = 0, o = () => s && clearTimeout(s); return (...i) => { o(), n && !s && e(...i), s = setTimeout(() => { r && e(...i), o() }, t) } } function wr(e, t, n = !0, r = !1) { let s = !1; return (...o) => { s || (n && e(...o), s = !0, setTimeout(() => { s = !1, r && e(...o) }, t)) } } function de(e, t) { let n = t.get("delay"); if (n) { let o = ee(n); e = lt(e, o) } let r = t.get("debounce"); if (r) { let o = ee(r), i = re(r, "leading", !1), a = !re(r, "notrail", !1); e = Mr(e, o, i, a) } let s = t.get("throttle"); if (s) { let o = ee(s), i = !re(s, "noleading", !1), a = re(s, "trail", !1); e = wr(e, o, i, a) } return e } var Vn = { type: "attribute", name: "on", keyReq: "must", valReq: "must", argNames: ["evt"], onLoad: e => { let { el: t, key: n, mods: r, genRX: s, evalRX: o } = e, i = t; r.has("window") && (i = window); let { dm: a, deps: l, rxFn: c } = s(), u = p => { if (p) { if (r.has("prevent") && p.preventDefault(), r.has("stop") && p.stopPropagation(), !(p.isTrusted || p instanceof CustomEvent || r.has("trust"))) return; e.evt = p } o(c, a, l, p) }; u = de(u, r), u = z(u, r); let f = { capture: !1, passive: !1, once: !1 }; if (r.has("capture") && (f.capture = !0), r.has("passive") && (f.passive = !0), r.has("once") && (f.once = !0), r.has("outside")) { i = document; let p = u; u = g => { let b = g?.target; t.contains(b) || p(g) } } let v = q(n); if (v = k(v, r), (v === Z || v === U) && (i = document), t instanceof HTMLFormElement && v === "submit") { let p = u; u = g => { g?.preventDefault(), p(g) } } return i.addEventListener(v, u, f), () => { i.removeEventListener(v, u) } } }; var ct = new WeakSet, In = { type: "attribute", name: "onIntersect", keyReq: "denied", onLoad: ({ el: e, mods: t, genRX: n, evalRX: r }) => { let { dm: s, deps: o, rxFn: i } = n(), a = () => r(i, s, o); a = de(a, t), a = z(a, t); let l = { threshold: 0 }; t.has("full") ? l.threshold = 1 : t.has("half") && (l.threshold = .5); let c = new IntersectionObserver(u => { for (let f of u) f.isIntersecting && (a(), c && ct.has(e) && c.disconnect()) }, l); return c.observe(e), t.has("once") && ct.add(e), () => { t.has("once") || ct.delete(e), c && (c.disconnect(), c = null) } } }; var Hn = { type: "attribute", name: "onInterval", keyReq: "denied", valReq: "must", onLoad: ({ mods: e, genRX: t, evalRX: n }) => { let { dm: r, deps: s, rxFn: o } = t(), i = () => n(o, r, s); i = z(i, e); let a = 1e3, l = e.get("duration"); l && (a = ee(l), re(l, "leading", !1) && i()); let c = setInterval(i, a); return () => { clearInterval(c) } } }; var ut = new WeakSet, $n = { type: "attribute", name: "onLoad", keyReq: "denied", valReq: "must", onLoad: ({ el: e, mods: t, genRX: n, evalRX: r }) => { let { dm: s, deps: o, rxFn: i } = n(), a = () => r(i, s, o); a = z(a, t); let l = 0, c = t.get("delay"); return c && (l = ee(c)), a = lt(a, l), ut.has(e) || a(), t.has("once") && ut.add(e), () => { t.has("once") || ut.delete(e) } } }; function ft(e, t) { return t = t.replaceAll(".", "\\.").replaceAll("**", ie).replaceAll("*", "[^\\.]*").replaceAll(ie, ".*"), RegExp(`^${t}$`).test(e) } function _e(e) { let t = [], n = e.split(/\s+/).filter(r => r !== ""); n = n.map(r => Q(r)); for (let r of n) for (let s of oe()) ft(s, r) && t.push(s); return t } var Gn = { type: "attribute", name: "onSignalChange", valReq: "must", argNames: ["evt"], onLoad: ({ key: e, mods: t, genRX: n, evalRX: r }) => { let { dm: s, deps: o, rxFn: i } = n(), a = c => r(i, s, o, c); a = de(a, t), a = z(a, t); let l = c => { if (e !== "") { let u = k(e, t), { added: f, removed: y, updated: v } = c.detail; if (![...f, ...y, ...v].some(p => ft(p, u))) return } a(c) }; return document.addEventListener(U, l), () => { document.removeEventListener(U, l) } } }; var _n = { type: "attribute", name: "ref", keyReq: "exclusive", valReq: "exclusive", onLoad: ({ el: e, key: t, mods: n, value: r, batch: s }) => { let o = t ? k(t, n) : Q(r); s(() => { j(o, e) }) } }; var Wn = "none", qn = "display", jn = { type: "attribute", name: "show", keyReq: "denied", valReq: "must", isExpr: !0, onLoad: ({ el: { style: e }, genRX: t, computed: n, effect: r }) => { let { deps: s, rxFn: o } = t(), i = n(s, o); return r([i], async a => { a ? e.display === Wn && e.removeProperty(qn) : e.setProperty(qn, Wn) }) } }; var Un = { type: "attribute", name: "text", keyReq: "denied", valReq: "must", isExpr: !0, onLoad: e => { let { el: t, genRX: n, computed: r, effect: s } = e, { deps: o, rxFn: i } = n(); t instanceof HTMLElement || h("TextInvalidElement", e); let a = r(o, i); return s([a], l => { t.textContent = `${l}` }) } }; var Kn = { type: "action", name: "setAll", fn: ({ batch: e }, t, n) => { e(() => { let r = _e(t); for (let s of r) j(s, n) }) } }; var Bn = { type: "action", name: "toggleAll", fn: ({ batch: e }, t) => { e(() => { let n = _e(t); for (let r of n) j(r, !ae(r)) }) } }; var We = new WeakMap, zn = { type: "attribute", name: "preserveAttr", valReq: "exclusive", keyReq: "exclusive", onLoad: ({ el: e, key: t, value: n }) => { let r = t ? [t] : n.trim().split(" "); if (We.has(e)) { let o = We.get(e); for (let i of r) { let a = o[i]; a !== void 0 ? e.setAttribute(i, a) : e.removeAttribute(i) } } else { let o = {}; for (let i of r) { let a = e.getAttribute(i); a !== null && (o[i] = a) } We.set(e, o) } let s = new MutationObserver(o => { for (let { attributeName: i, target: a } of o) { let l = a, c = We.get(l); if (c) { let u = i, f = l.getAttribute(u); f !== null ? c[u] = f : delete c[u] } } }); return s.observe(e, { attributes: !0, attributeFilter: r }), () => { s && (s.disconnect(), s = null) } } }; Ve(an, cn, un, ln, on, An, wn, Dn, Cn, fn, Fn, Pn, kn, Nn, On, Vn, In, Hn, $n, Gn, zn, _n, jn, Un, Kn, Bn); rt(); export { rt as apply, Ve as load, Kt as setAlias };
//# sourceMappingURL=datastar.js.map