htmx.org 4.0.0-alpha3 → 4.0.0-alpha4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/ext/hx-compat.js +37 -0
- package/dist/ext/hx-compat.min.js +1 -0
- package/dist/ext/hx-compat.min.js.map +1 -0
- package/dist/ext/hx-optimistic.js +1 -1
- package/dist/ext/hx-optimistic.min.js +1 -1
- package/dist/ext/hx-optimistic.min.js.map +1 -1
- package/dist/ext/hx-preload.js +1 -1
- package/dist/ext/hx-preload.min.js +1 -1
- package/dist/ext/hx-preload.min.js.map +1 -1
- package/dist/ext/hx-ws.js +588 -0
- package/dist/ext/hx-ws.min.js +1 -0
- package/dist/ext/hx-ws.min.js.map +1 -0
- package/dist/htmx.d.ts +52 -0
- package/dist/htmx.esm.js +47 -39
- package/dist/htmx.esm.min.js +1 -1
- package/dist/htmx.esm.min.js.map +1 -1
- package/dist/htmx.js +45 -38
- package/dist/htmx.min.js +1 -1
- package/dist/htmx.min.js.map +1 -1
- package/package.json +9 -6
package/dist/htmx.esm.js
CHANGED
|
@@ -104,11 +104,12 @@ var htmx = (() => {
|
|
|
104
104
|
defaultTimeout: 60000, /* 60 second default timeout */
|
|
105
105
|
extensions: '',
|
|
106
106
|
sse: {
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
107
|
+
reconnect: false,
|
|
108
|
+
reconnectDelay: 500,
|
|
109
|
+
reconnectMaxDelay: 60000,
|
|
110
|
+
reconnectMaxAttempts: 10,
|
|
111
|
+
reconnectJitter: 0.3,
|
|
112
|
+
pauseInBackground: false
|
|
112
113
|
},
|
|
113
114
|
morphIgnore: ["data-htmx-powered"],
|
|
114
115
|
noSwap: [204, 304],
|
|
@@ -147,7 +148,7 @@ var htmx = (() => {
|
|
|
147
148
|
}
|
|
148
149
|
}
|
|
149
150
|
|
|
150
|
-
|
|
151
|
+
registerExtension(name, extension) {
|
|
151
152
|
if (this.#approvedExt && !this.#approvedExt.split(/,\s*/).includes(name)) return false;
|
|
152
153
|
if (this.#registeredExt.has(name)) return false;
|
|
153
154
|
this.#registeredExt.add(name);
|
|
@@ -296,6 +297,8 @@ var htmx = (() => {
|
|
|
296
297
|
|
|
297
298
|
#createRequestContext(sourceElement, sourceEvent) {
|
|
298
299
|
let {action, method} = this.#determineMethodAndAction(sourceElement, sourceEvent);
|
|
300
|
+
let [fullAction, anchor] = (action || '').split('#');
|
|
301
|
+
let ac = new AbortController();
|
|
299
302
|
let ctx = {
|
|
300
303
|
sourceElement,
|
|
301
304
|
sourceEvent,
|
|
@@ -310,9 +313,14 @@ var htmx = (() => {
|
|
|
310
313
|
confirm: this.#attributeValue(sourceElement, "hx-confirm"),
|
|
311
314
|
request: {
|
|
312
315
|
validate: "true" === this.#attributeValue(sourceElement, "hx-validate", sourceElement.matches('form') ? "true" : "false"),
|
|
313
|
-
action,
|
|
316
|
+
action: fullAction,
|
|
317
|
+
anchor,
|
|
314
318
|
method,
|
|
315
|
-
headers: this.#determineHeaders(sourceElement)
|
|
319
|
+
headers: this.#determineHeaders(sourceElement),
|
|
320
|
+
abort: ac.abort.bind(ac),
|
|
321
|
+
credentials: "same-origin",
|
|
322
|
+
signal: ac.signal,
|
|
323
|
+
mode: this.config.mode
|
|
316
324
|
}
|
|
317
325
|
};
|
|
318
326
|
|
|
@@ -399,20 +407,11 @@ var htmx = (() => {
|
|
|
399
407
|
}
|
|
400
408
|
}
|
|
401
409
|
|
|
402
|
-
// Setup
|
|
403
|
-
let ac = new AbortController()
|
|
404
|
-
let action = ctx.request.action.replace?.(/#.*$/, '')
|
|
405
|
-
// TODO - consider how this works with hx-config, move most to #createRequestContext?
|
|
410
|
+
// Setup event-dependent request details
|
|
406
411
|
Object.assign(ctx.request, {
|
|
407
|
-
originalAction: ctx.request.action,
|
|
408
|
-
action,
|
|
409
412
|
form,
|
|
410
413
|
submitter: evt.submitter,
|
|
411
|
-
|
|
412
|
-
body,
|
|
413
|
-
credentials: "same-origin",
|
|
414
|
-
signal: ac.signal,
|
|
415
|
-
mode: this.config.mode
|
|
414
|
+
body
|
|
416
415
|
})
|
|
417
416
|
|
|
418
417
|
if (!this.#trigger(elt, "htmx:config:request", {ctx: ctx})) return
|
|
@@ -420,14 +419,22 @@ var htmx = (() => {
|
|
|
420
419
|
if (ctx.request.validate && ctx.request.form && !ctx.request.form.reportValidity()) return
|
|
421
420
|
|
|
422
421
|
let javascriptContent = this.#extractJavascriptContent(ctx.request.action);
|
|
423
|
-
if (javascriptContent) {
|
|
422
|
+
if (javascriptContent != null) {
|
|
424
423
|
let data = Object.fromEntries(ctx.request.body);
|
|
425
424
|
await this.#executeJavaScriptAsync(ctx.sourceElement, data, javascriptContent, false);
|
|
426
425
|
return
|
|
427
426
|
} else if (/GET|DELETE/.test(ctx.request.method)) {
|
|
428
|
-
let
|
|
429
|
-
|
|
430
|
-
ctx.request.body
|
|
427
|
+
let url = new URL(ctx.request.action, document.baseURI);
|
|
428
|
+
|
|
429
|
+
for (let key of ctx.request.body.keys()) {
|
|
430
|
+
url.searchParams.delete(key);
|
|
431
|
+
}
|
|
432
|
+
for (let [key, value] of ctx.request.body) {
|
|
433
|
+
url.searchParams.append(key, value);
|
|
434
|
+
}
|
|
435
|
+
|
|
436
|
+
ctx.request.action = url.pathname + url.search;
|
|
437
|
+
ctx.request.body = null;
|
|
431
438
|
} else if (this.#attributeValue(elt, "hx-encoding") !== "multipart/form-data") {
|
|
432
439
|
ctx.request.body = new URLSearchParams(ctx.request.body);
|
|
433
440
|
}
|
|
@@ -559,9 +566,7 @@ var htmx = (() => {
|
|
|
559
566
|
}
|
|
560
567
|
|
|
561
568
|
async #handleSSE(ctx, elt, response) {
|
|
562
|
-
let config = {...this.config.sse, ...ctx.request.sse}
|
|
563
|
-
if (config.once) config.mode = 'once';
|
|
564
|
-
if (config.continuous) config.mode = 'continuous';
|
|
569
|
+
let config = {...this.config.sse, ...ctx.request.sse}
|
|
565
570
|
|
|
566
571
|
let waitForVisible = () => new Promise(r => {
|
|
567
572
|
let onVisible = () => !document.hidden && (document.removeEventListener('visibilitychange', onVisible), r());
|
|
@@ -573,14 +578,19 @@ var htmx = (() => {
|
|
|
573
578
|
while (elt.isConnected) {
|
|
574
579
|
// Handle reconnection for subsequent iterations
|
|
575
580
|
if (attempt > 0) {
|
|
576
|
-
if (config.
|
|
581
|
+
if (!config.reconnect || attempt > config.reconnectMaxAttempts) break;
|
|
577
582
|
|
|
578
|
-
if (config.
|
|
583
|
+
if (config.pauseInBackground && document.hidden) {
|
|
579
584
|
await waitForVisible();
|
|
580
585
|
if (!elt.isConnected) break;
|
|
581
586
|
}
|
|
582
587
|
|
|
583
|
-
let delay = Math.min(this.parseInterval(config.
|
|
588
|
+
let delay = Math.min(this.parseInterval(config.reconnectDelay) * Math.pow(2, attempt - 1), this.parseInterval(config.reconnectMaxDelay));
|
|
589
|
+
if (config.reconnectJitter > 0) {
|
|
590
|
+
let jitterRange = delay * config.reconnectJitter;
|
|
591
|
+
let jitter = (Math.random() * 2 - 1) * jitterRange;
|
|
592
|
+
delay = Math.max(0, delay + jitter);
|
|
593
|
+
}
|
|
584
594
|
let reconnect = {attempt, delay, lastEventId, cancelled: false};
|
|
585
595
|
|
|
586
596
|
ctx.status = "reconnecting to stream";
|
|
@@ -613,7 +623,7 @@ var htmx = (() => {
|
|
|
613
623
|
for await (const sseMessage of this.#parseSSE(currentResponse)) {
|
|
614
624
|
if (!elt.isConnected) break;
|
|
615
625
|
|
|
616
|
-
if (config.
|
|
626
|
+
if (config.pauseInBackground && document.hidden) {
|
|
617
627
|
await waitForVisible();
|
|
618
628
|
if (!elt.isConnected) break;
|
|
619
629
|
}
|
|
@@ -910,8 +920,6 @@ var htmx = (() => {
|
|
|
910
920
|
}
|
|
911
921
|
}
|
|
912
922
|
|
|
913
|
-
|
|
914
|
-
|
|
915
923
|
#extractFilter(str) {
|
|
916
924
|
let match = str.match(/^([^\[]*)\[([^\]]*)]/);
|
|
917
925
|
if (!match) return [str, null];
|
|
@@ -1218,9 +1226,8 @@ var htmx = (() => {
|
|
|
1218
1226
|
}
|
|
1219
1227
|
|
|
1220
1228
|
#handleAnchorScroll(ctx) {
|
|
1221
|
-
|
|
1222
|
-
|
|
1223
|
-
document.getElementById(anchor)?.scrollIntoView({block: 'start', behavior: 'auto'});
|
|
1229
|
+
if (ctx.request?.anchor) {
|
|
1230
|
+
document.getElementById(ctx.request.anchor)?.scrollIntoView({block: 'start', behavior: 'auto'});
|
|
1224
1231
|
}
|
|
1225
1232
|
}
|
|
1226
1233
|
|
|
@@ -1401,7 +1408,7 @@ var htmx = (() => {
|
|
|
1401
1408
|
console.log(eventName, detail, on)
|
|
1402
1409
|
}
|
|
1403
1410
|
on = this.#normalizeElement(on)
|
|
1404
|
-
this.#triggerExtensions(on,
|
|
1411
|
+
this.#triggerExtensions(on, eventName, detail);
|
|
1405
1412
|
return this.trigger(on, eventName, detail, bubbles)
|
|
1406
1413
|
}
|
|
1407
1414
|
|
|
@@ -1443,7 +1450,7 @@ var htmx = (() => {
|
|
|
1443
1450
|
}
|
|
1444
1451
|
|
|
1445
1452
|
onLoad(callback) {
|
|
1446
|
-
this.on("htmx:after:
|
|
1453
|
+
this.on("htmx:after:process", (evt) => {
|
|
1447
1454
|
callback(evt.target)
|
|
1448
1455
|
})
|
|
1449
1456
|
}
|
|
@@ -1588,7 +1595,7 @@ var htmx = (() => {
|
|
|
1588
1595
|
if (!path || path === 'false' || path === false) return;
|
|
1589
1596
|
|
|
1590
1597
|
if (path === 'true') {
|
|
1591
|
-
path = ctx.request.
|
|
1598
|
+
path = ctx.request.action + (ctx.request.anchor ? '#' + ctx.request.anchor : '');
|
|
1592
1599
|
}
|
|
1593
1600
|
|
|
1594
1601
|
let type = push ? 'push' : 'replace';
|
|
@@ -2146,4 +2153,5 @@ var htmx = (() => {
|
|
|
2146
2153
|
return new Htmx()
|
|
2147
2154
|
})()
|
|
2148
2155
|
|
|
2149
|
-
|
|
2156
|
+
if (typeof window !== "undefined") window.htmx = htmx;
|
|
2157
|
+
export default htmx;
|
package/dist/htmx.esm.min.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
var htmx=(()=>{class e{#e=null;#t=[];issue(e,t){return this.#e?"replace"===t?(this.#t.map(e=>e.status="dropped"),this.#t=[],this.#e&&this.#e.abort(),!0):("queue all"===t?(this.#t.push(e),e.status="queued"):"drop"===t?e.status="dropped":"queue last"===t?(this.#t.map(e=>e.status="dropped"),this.#t=[e],e.status="queued"):0===this.#t.length?(this.#t.push(e),e.status="queued"):e.status="dropped",!1):(this.#e=e,!0)}finish(){this.#e=null}next(){return this.#t.shift()}abort(){this.#e?.abort?.()}more(){return this.#t?.length}}return new class{#r=new Map;#i="";#s=new Set;#n;#a;#o="a,form";#l=["get","post","put","patch","delete"];#h;#c;#u;constructor(){this.#d(),this.#p(),this.#a=`[${this.#f("hx-action")}],[${this.#f("hx-get")}],[${this.#f("hx-post")}],[${this.#f("hx-put")}],[${this.#f("hx-patch")}],[${this.#f("hx-delete")}]`,this.#h=(new XPathEvaluator).createExpression(`.//*[@*[ starts-with(name(), "${this.#f("hx-on")}")]]`),this.#n={attributeValue:this.#m.bind(this),parseTriggerSpecs:this.#g.bind(this),determineMethodAndAction:this.#x.bind(this),createRequestContext:this.#b.bind(this),collectFormData:this.#y.bind(this),handleHxVals:this.#v.bind(this)},document.addEventListener("DOMContentLoaded",()=>{this.#S(),this.process(document.body)})}#d(){this.config={version:"4.0.0-alpha3",logAll:!1,prefix:"",transitions:!0,history:!0,historyReload:!1,mode:"same-origin",defaultSwap:"innerHTML",indicatorClass:"htmx-indicator",requestClass:"htmx-request",includeIndicatorCSS:!0,defaultTimeout:6e4,extensions:"",sse:{mode:"once",maxRetries:1/0,initialDelay:500,maxDelay:3e4,pauseHidden:!1},morphIgnore:["data-htmx-powered"],noSwap:[204,304],implicitInheritance:!1};let e=document.querySelector('meta[name="htmx:config"]');if(e){let t=e.content,r=this.#E(t);for(let e in r){let t=r[e];t&&"object"==typeof t&&!Array.isArray(t)&&this.config[e]?Object.assign(this.config[e],t):this.config[e]=t}}this.#i=this.config.extensions}#p(){if(!1!==this.config.includeIndicatorCSS){let e="";this.config.inlineStyleNonce&&(e=` nonce="${this.config.inlineStyleNonce}"`);let t=this.config.indicatorClass,r=this.config.requestClass;document.head.insertAdjacentHTML("beforeend",`<style${e}>.${t}{opacity:0;visibility: hidden} .${r} .${t}, .${r}.${t}{opacity:1;visibility: visible;transition: opacity 200ms ease-in}</style>`)}}defineExtension(e,t){return!(this.#i&&!this.#i.split(/,\s*/).includes(e))&&(!this.#s.has(e)&&(this.#s.add(e),t.init&&t.init(this.#n),void Object.entries(t).forEach(([e,t])=>{this.#r.get(e)?.push(t)||this.#r.set(e,[t])})))}#w(e){return!e.closest||null!=e.closest(`[${this.#f("hx-ignore")}]`)}#f(e){return this.config.prefix?e.replace("hx-",this.config.prefix):e}#C(e,t){let r=[...e.querySelectorAll(t)];return e.matches?.(t)&&r.unshift(e),r}#A(e){return"before"===e?"beforebegin":"after"===e?"afterend":"prepend"===e?"afterbegin":"append"===e?"beforeend":e}#m(e,t,r,i){let s=(t=this.#f(t))+this.#q(":append"),n=t+(this.config.implicitInheritance?"":this.#q(":inherited")),a=t+this.#q(":inherited:append");if(e.hasAttribute(t))return i?e:e.getAttribute(t);if(e.hasAttribute(n))return i?e:e.getAttribute(n);if(e.hasAttribute(s)||e.hasAttribute(a)){let r=e.getAttribute(s)||e.getAttribute(a),o=e.parentNode?.closest?.(`[${CSS.escape(n)}],[${CSS.escape(a)}]`);if(o){let e=this.#m(o,t,void 0,i);return i?e:e?e+","+r:r}return i?e:r}let o=e.parentNode?.closest?.(`[${CSS.escape(n)}],[${CSS.escape(a)}]`);if(o){let r=this.#m(o,t,void 0,i);return!i&&r&&this.config.implicitInheritance&&this.#T(e,"htmx:after:implicitInheritance",{elt:e,parent:o}),r}return i?e:r}#E(e){if("{"===e[0])return JSON.parse(e);return[...e.matchAll(/([^\s,]+?)(?:\s*:\s*(?:"([^"]*)"|'([^']*)'|<([^>]+)\/>|([^\s,]+)))?(?=\s|,|$)/g)].reduce((e,t)=>{let r=t[1].split("."),i=(t[2]??t[3]??t[4]??t[5]??"true").trim();return"true"===i?i=!0:"false"===i?i=!1:/^\d+$/.test(i)&&(i=parseInt(i)),r.slice(0,-1).reduce((e,t)=>e[t]??={},e)[r.at(-1)]=i,e},{})}#g(e){return e.split(",").map(e=>{let t=e.match(/^\s*(\S+\[[^\]]*\]|\S+)\s*(.*?)\s*$/);if(!t||!t[1])return null;if(t[1].includes("[")&&!t[1].includes("]"))throw"unterminated:"+t[1];let r=t[2]?this.#E(t[2]):{};return r.name=t[1],r}).filter(e=>e)}#x(e,t){if(this.#M(e))return this.#N(e,t);{let t=this.#m(e,"hx-method")||"GET",r=this.#m(e,"hx-action");if(!r)for(let i of this.#l){let s=this.#m(e,"hx-"+i);if(s){r=s,t=i;break}}return t=t.toUpperCase(),{action:r,method:t}}}#N(e,t){if(e.matches("a"))return{action:e.getAttribute("href"),method:"GET"};return{action:t.submitter?.getAttribute?.("formAction")||e.getAttribute("action"),method:t.submitter?.getAttribute?.("formMethod")||e.getAttribute("method")||"GET"}}#I(e){this.#H(e)&&this.#O(e,"htmx:before:init",{},!0)&&(e._htmx={eventHandler:this.#L(e)},e.setAttribute("data-htmx-powered","true"),this.#R(e),this.#k(e),this.#O(e,"htmx:after:init",{},!0),this.#O(e,"load",{},!1))}#L(e){return async t=>{try{let r=this.#b(e,t);await this.#V(r)}catch(e){console.error(e)}}}#b(e,t){let{action:r,method:i}=this.#x(e,t),s={sourceElement:e,sourceEvent:t,status:"created",select:this.#m(e,"hx-select"),selectOOB:this.#m(e,"hx-select-oob"),target:this.#j(e,this.#m(e,"hx-target")),swap:this.#m(e,"hx-swap",this.config.defaultSwap),push:this.#m(e,"hx-push-url"),replace:this.#m(e,"hx-replace-url"),transition:this.config.transitions,confirm:this.#m(e,"hx-confirm"),request:{validate:"true"===this.#m(e,"hx-validate",e.matches("form")?"true":"false"),action:r,method:i,headers:this.#_(e)}},n=this.#m(e,"hx-config");if(n){let t=this.#E(n),r=s.request;for(let e in t)if(e.startsWith("+")){let i=e.substring(1);r[i]&&"object"==typeof r[i]?Object.assign(r[i],t[e]):r[i]=t[e]}else r[e]=t[e];r.etag&&((e._htmx||={}).etag||=r.etag)}return e._htmx?.etag&&(s.request.headers["If-none-match"]=e._htmx.etag),s}#_(e){let t={"HX-Request":"true","HX-Source":e.id||e.name,"HX-Current-URL":location.href,Accept:"text/html, text/event-stream"};this.#M(e)&&(t["HX-Boosted"]="true");let r=this.#m(e,"hx-headers");return r&&Object.assign(t,this.#E(r)),t}#j(e,t){return t instanceof Element?t:"this"===t?this.#m(e,"hx-target",void 0,!0):null!=t?this.find(e,t):this.#M(e)?document.body:e}#M(e){return e?._htmx?.boosted}async#V(e){let t=e.sourceElement,r=e.sourceEvent;if(!t.isConnected)return;if(this.#D(r))return;this.#B(r)&&r.preventDefault();let i=t.form||t.closest("form"),s=this.#y(t,i,r.submitter),n=this.#v(t,s);if(n&&await n,e.values)for(let t in e.values)s.delete(t),s.append(t,e.values[t]);let a=new AbortController,o=e.request.action.replace?.(/#.*$/,"");if(Object.assign(e.request,{originalAction:e.request.action,action:o,form:i,submitter:r.submitter,abort:a.abort.bind(a),body:s,credentials:"same-origin",signal:a.signal,mode:this.config.mode}),!this.#O(t,"htmx:config:request",{ctx:e}))return;if(!this.#l.includes(e.request.method.toLowerCase()))return;if(e.request.validate&&e.request.form&&!e.request.form.reportValidity())return;let l=this.#$(e.request.action);if(l){let t=Object.fromEntries(e.request.body);return void await this.#P(e.sourceElement,t,l,!1)}if(/GET|DELETE/.test(e.request.method)){let t=new URLSearchParams(e.request.body);t.size&&(e.request.action+=(/\?/.test(e.request.action)?"&":"?")+t),e.request.body=null}else"multipart/form-data"!==this.#m(t,"hx-encoding")&&(e.request.body=new URLSearchParams(e.request.body));await this.#F(e)}async#F(e){let t=e.sourceElement,r=this.#z(t),i=this.#W(t);if(!i.issue(e,r))return;e.status="issuing",this.#U(e);let s=this.#m(t,"hx-indicator"),n=this.#Q(t,s),a=this.#m(t,"hx-disable"),o=this.#J(t,a);try{if(e.confirm){let r=null;if(!await new Promise(i=>{if(r=i,this.#O(t,"htmx:confirm",{ctx:e,issueRequest:e=>r?.(!1!==e)})){let r=this.#$(e.confirm);i(r?this.#P(t,{},r,!0):window.confirm(e.confirm))}}))return}if(e.fetch||=window.fetch.bind(window),!this.#O(t,"htmx:before:request",{ctx:e}))return;let r=await e.fetch(e.request.action,e.request);if(e.response={raw:r,status:r.status,headers:r.headers},this.#G(e),e.isSSE=r.headers.get("Content-Type")?.includes("text/event-stream"),e.isSSE||(e.text=await r.text()),!this.#O(t,"htmx:after:request",{ctx:e}))return;if(this.#X(e))return;let i=r.headers.get("Content-Type")?.includes("text/event-stream");i?await this.#K(e,t,r):"issuing"===e.status&&(e.hx.retarget&&(e.target=e.hx.retarget),e.hx.reswap&&(e.swap=e.hx.reswap),e.hx.reselect&&(e.select=e.hx.reselect),e.status="response received",this.#Y(e),await this.swap(e),e.status="swapped")}catch(r){e.status="error: "+r,this.#O(t,"htmx:error",{ctx:e,error:r})}finally{this.#Z(n),this.#ee(o),this.#O(t,"htmx:finally:request",{ctx:e}),i.finish(),i.more()&&this.#F(i.next())}}#G(e){e.hx={};for(let[t,r]of e.response.raw.headers)t.toLowerCase().startsWith("hx-")&&(e.hx[t.slice(3).toLowerCase().replace(/-/g,"")]=r)}#X(e){if(e.hx.trigger&&this.#te(e.hx.trigger,e.sourceElement),"true"===e.hx.refresh)return location.reload(),!0;if(e.hx.redirect)return location.href=e.hx.redirect,!0;if(e.hx.location){let t=e.hx.location,r={};return("{"===t[0]||/[\s,]/.test(t))&&(r=this.#E(t),t=r.path,delete r.path),r.push=r.push||"true",this.ajax("GET",t,r),!0}e.response?.headers?.get?.("Etag")&&(e.sourceElement._htmx||={},e.sourceElement._htmx.etag=e.response.headers.get("Etag"))}async#K(e,t,r){let i={...this.config.sse,...e.request.sse};i.once&&(i.mode="once"),i.continuous&&(i.mode="continuous");let s=()=>new Promise(e=>{let t=()=>!document.hidden&&(document.removeEventListener("visibilitychange",t),e());document.addEventListener("visibilitychange",t)}),n=null,a=0,o=r;for(;t.isConnected;){if(a>0){if("continuous"!==i.mode||a>i.maxRetries)break;if(i.pauseHidden&&document.hidden&&(await s(),!t.isConnected))break;let r={attempt:a,delay:Math.min(this.parseInterval(i.initialDelay)*Math.pow(2,a-1),this.parseInterval(i.maxDelay)),lastEventId:n,cancelled:!1};if(e.status="reconnecting to stream",!this.#O(t,"htmx:before:sse:reconnect",{ctx:e,reconnect:r})||r.cancelled)break;if(await new Promise(e=>setTimeout(e,r.delay)),!t.isConnected)break;try{n&&((e.request.headers=e.request.headers||{})["Last-Event-ID"]=n),o=await fetch(e.request.action,e.request)}catch(r){e.status="stream error",this.#O(t,"htmx:error",{ctx:e,error:r}),a++;continue}}if(!this.#O(t,"htmx:before:sse:stream",{ctx:e}))break;e.status="streaming",a=0;try{for await(const r of this.#re(o)){if(!t.isConnected)break;if(i.pauseHidden&&document.hidden&&(await s(),!t.isConnected))break;let a={data:r.data,event:r.event,id:r.id,cancelled:!1};this.#O(t,"htmx:before:sse:message",{ctx:e,message:a})&&!a.cancelled&&(r.id&&(n=r.id),r.event?(this.#O(t,r.event,{data:r.data,id:r.id}),this.#O(t,"htmx:after:sse:message",{ctx:e,message:a})):(e.text=r.data,e.status="stream message received",e.response.cancelled||(await this.swap(e),e.status="swapped"),this.#O(t,"htmx:after:sse:message",{ctx:e,message:a})))}}catch(r){e.status="stream error",this.#O(t,"htmx:error",{ctx:e,error:r})}if(!t.isConnected)break;this.#O(t,"htmx:after:sse:stream",{ctx:e}),a++}}async*#re(e){let t=e.body.getReader(),r=new TextDecoder,i="",s={data:"",event:"",id:"",retry:null};try{for(;;){let{done:e,value:n}=await t.read();if(e)break;i+=r.decode(n,{stream:!0});let a=i.split("\n");i=a.pop()||"";for(let e of a){if(!e||"\r"===e){s.data&&(yield s,s={data:"",event:"",id:"",retry:null});continue}let t=e.indexOf(":");if(t<=0)continue;let r=e.slice(0,t),i=e.slice(t+1).trimStart();if("data"===r)s.data+=(s.data?"\n":"")+i;else if("event"===r)s.event=i;else if("id"===r)s.id=i;else if("retry"===r){let e=parseInt(i,10);isNaN(e)||(s.retry=e)}}}}finally{t.releaseLock()}}#U(e){let t;t=e.request.timeout?this.parseInterval(e.request.timeout):this.config.defaultTimeout,e.requestTimeout=setTimeout(()=>e.abort?.(),t)}#z(e){let t=this.#m(e,"hx-sync");return t?.split(":")[1]||"queue first"}#W(t){let r=this.#m(t,"hx-sync"),i=t;if(r&&r.includes(":")){let e=r.split(":")[0];i=this.#ie(e)}return i._htmxRequestQueue||=new e}#D(e){return"click"===e.type&&(e.ctrlKey||e.metaKey||e.shiftKey)}#B(e){let t=e.currentTarget;if("submit"===e.type&&"FORM"===t?.tagName)return!0;if(!("click"===e.type&&0===e.button))return!1;let r=t?.closest?.('button, input[type="submit"], input[type="image"]'),i=r?.form||r?.closest("form");if(r&&!r.disabled&&i&&("submit"===r.type||"image"===r.type||!r.type&&"BUTTON"===r.tagName))return!0;let s=t?.closest?.("a");if(!s||!s.href)return!1;let n=s.getAttribute("href");return!(n&&n.startsWith("#")&&n.length>1)}#R(e,t=e._htmx.eventHandler){let r=this.#m(e,"hx-trigger");r||(r=e.matches("form")?"submit":e.matches("input:not([type=button]),select,textarea")?"change":"click"),e._htmx.triggerSpecs=this.#g(r),e._htmx.listeners=[];for(let r of e._htmx.triggerSpecs){r.handler=t,r.listeners=[],r.values={};let[i,s]=this.#se(r.name);if(r.once){let e=r.handler;r.handler=t=>{e(t);for(let e of r.listeners)e.fromElt.removeEventListener(e.eventName,e.handler)}}if("intersect"===i||"revealed"===i){let t={};r.opts?.root&&(t.root=this.#ie(e,r.opts.root)),r.opts?.threshold&&(t.threshold=parseFloat(r.opts.threshold));let s="revealed"===i;r.observer=new IntersectionObserver(t=>{for(let i=0;i<t.length;i++){if(t[i].isIntersecting){this.trigger(e,"intersect",{},!1),s&&r.observer.disconnect();break}}},t),i="intersect",r.observer.observe(e)}if(r.delay){let e=r.handler;r.handler=t=>{clearTimeout(r.timeout),r.timeout=setTimeout(()=>e(t),this.parseInterval(r.delay))}}if(r.throttle){let e=r.handler;r.handler=t=>{r.throttled?r.throttledEvent=t:(r.throttled=!0,e(t),r.throttleTimeout=setTimeout(()=>{if(r.throttled=!1,r.throttledEvent){let e=r.throttledEvent;r.throttledEvent=null,r.handler(e)}},this.parseInterval(r.throttle)))}}if(r.target){let e=r.handler;r.handler=t=>{t.target?.matches?.(r.target)&&e(t)}}if("every"===i){let t=Object.keys(r).find(e=>"name"!==e);r.interval=setInterval(()=>{e.isConnected?this.#O(e,"every",{},!1):clearInterval(r.interval)},this.parseInterval(t))}if(s){let t=r.handler;r.handler=r=>{this.#B(r)&&r.preventDefault(),this.#ne(e,r,s)&&t(r)}}let n=[e];if(r.from&&(n=this.#ae(e,r.from)),r.consume){let e=r.handler;r.handler=t=>{t.stopPropagation(),e(t)}}if(r.changed){let e=r.handler;r.handler=t=>{let i=!1;for(let e of n)r.values[e]!==e.value&&(i=!0,r.values[e]=e.value);i&&e(t)}}for(let t of n){let s={fromElt:t,eventName:i,handler:r.handler};e._htmx.listeners.push(s),r.listeners.push(s),t.addEventListener(i,r.handler)}}}#se(e){let t=e.match(/^([^\[]*)\[([^\]]*)]/);return t?[t[1],t[2]]:[e,null]}#te(e,t){if("{"===e[0]){let r=this.#E(e);for(let e in r){let i=r[e];i?.target&&(t=this.find(i.target)||t),this.trigger(t,e,"object"==typeof i?i:{value:i})}}else e.split(",").forEach(e=>this.trigger(t,e.trim(),{}))}#oe(e){let t={},r=Object.getPrototypeOf(this);for(let i of Object.getOwnPropertyNames(r))"constructor"!==i&&"function"==typeof this[i]&&(["find","findAll"].includes(i)?t[i]=(t,r)=>void 0===r?this[i](e,t):this[i](t,r):t[i]=this[i].bind(this));return t}async#P(e,t,r,i=!0){let s={};Object.assign(s,this.#oe(e)),Object.assign(s,t);let n=Object.keys(s),a=Object.values(s),o=new(0,Object.getPrototypeOf(async function(){}).constructor)(...n,i?`return (${r})`:r);return await o.call(e,...a)}#ne(e,t,r){let i={};Object.assign(i,this.#oe(e));for(let e in t)i[e]=t[e];let s=Object.keys(i),n=Object.values(i);return new Function(...s,`return (${r})`).call(e,...n)}process(e){if(!e||this.#w(e))return;if(!this.#O(e,"htmx:before:process"))return;for(let t of this.#C(e,this.#a))this.#I(t);for(let t of this.#C(e,this.#o))this.#le(t);this.#he(e);let t=this.#h.evaluate(e),r=null;for(;r=t.iterateNext();)this.#he(r);this.#O(e,"htmx:after:process")}#le(e){"true"===this.#m(e,"hx-boost")&&this.#ce(e)&&(e._htmx={eventHandler:this.#L(e),requests:[],boosted:!0},e.setAttribute("data-htmx-powered","true"),e.matches("a")&&!e.hasAttribute("target")?e.addEventListener("click",t=>{e._htmx.eventHandler(t)}):e.addEventListener("submit",t=>{e._htmx.eventHandler(t)}),this.#O(e,"htmx:after:init",{},!0))}#ce(e){if(this.#H(e))if("A"===e.tagName){if(""===e.target||"_self"===e.target)return!e.getAttribute("href")?.startsWith?.("#")&&this.#ue(e.href)}else if("FORM"===e.tagName)return"dialog"!==e.method&&this.#ue(e.action)}#ue(e){try{return new URL(e,window.location.href).origin===window.location.origin}catch(e){return!1}}#H(e){return!e._htmx&&!this.#w(e)}#de(e){if(e._htmx){this.#O(e,"htmx:before:cleanup"),e._htmx.interval&&clearInterval(e._htmx.interval);for(let t of e._htmx.triggerSpecs||[])t.interval&&clearInterval(t.interval),t.timeout&&clearTimeout(t.timeout);for(let t of e._htmx.listeners||[])t.fromElt.removeEventListener(t.eventName,t.handler);this.#O(e,"htmx:after:cleanup")}for(let t of e.querySelectorAll("[data-htmx-powered]"))this.#de(t)}#pe(e){let t=document.createElement("div");t.style.display="none",document.body.appendChild(t);let r=e.querySelectorAll?.(`[${this.#f("hx-preserve")}]`)||[];for(let e of r){let r=document.getElementById(e.id);t.moveBefore?t.moveBefore(r,null):t.appendChild(r)}return t}#fe(e){for(let t of e.children){let e=document.getElementById(t.id);e.parentNode.moveBefore?e.parentNode.moveBefore(t,e):e.replaceWith(t),this.#de(e),e.remove()}e.remove()}#me(e){return Document.parseHTMLUnsafe?.(e)||(new DOMParser).parseFromString(e,"text/html")}#ge(e){let t=e.replace(/<hx-([a-z]+)(\s+|>)/gi,'<template hx type="$1"$2').replace(/<\/hx-[a-z]+>/gi,"</template>"),r="";t=t.replace(/<title[^>]*>[\s\S]*?<\/title>/i,e=>(r=this.#me(e).title,""));let i,s,n=t.replace(/<head(\s[^>]*)?>[\s\S]*?<\/head>/i,""),a=n.match(/<([a-z][^\/>\x20\t\r\n\f]*)/i)?.[1]?.toLowerCase();return"html"===a?(i=this.#me(t),s=i.body):"body"===a?(i=this.#me(n),s=i.body):(i=this.#me(`<template>${n}</template>`),s=i.querySelector("template").content),this.#xe(s),{fragment:s,title:r}}#be(e,t,r,i){let s=t.id?"#"+CSS.escape(t.id):null;"true"!==r&&r&&!r.includes(" ")&&([r,s=s]=r.split(/:(.*)/)),"true"!==r&&r||(r="outerHTML");let n=this.#ye(r);if(s=n.target||s,n.strip??=!n.style.startsWith("outer"),!s)return;let a=document.createDocumentFragment();a.append(t),e.push({type:"oob",fragment:a,target:s,swapSpec:n,sourceElement:i})}#ve(e,t,r){let i=[];if(r)for(let s of r.split(",")){let[r,n="true"]=s.split(/:(.*)/);for(let s of e.querySelectorAll(r))this.#be(i,s,n,t)}for(let r of e.querySelectorAll(`[${this.#f("hx-swap-oob")}]`)){let e=r.getAttribute(this.#f("hx-swap-oob"));r.removeAttribute(this.#f("hx-swap-oob")),this.#be(i,r,e,t)}return i}#Se(e,t,r){t?t.before(...r.childNodes):e.append(...r.childNodes)}#ye(e){e=e.trim();let t=this.config.defaultSwap;if(e&&!/^\S*:/.test(e)){let r=e.match(/^(\S+)\s*(.*)$/);t=r[1],e=r[2]}return{style:this.#A(t),...this.#E(e)}}#Ee(e,t){let r=[];for(let i of e.querySelectorAll("template[hx]")){let e=i.getAttribute("type");if("partial"===e){let e=this.#ye(i.getAttribute(this.#f("hx-swap"))||this.config.defaultSwap);r.push({type:"partial",fragment:i.content.cloneNode(!0),target:i.getAttribute(this.#f("hx-target")),swapSpec:e,sourceElement:t.sourceElement})}else this.#T(i,"htmx:process:"+e,{ctx:t,tasks:r});i.remove()}return r}#we(e){let t=this.find(e,"[autofocus]");t?.focus?.()}#Ce(e){if(e.swapSpec.scroll){let t=e.swapSpec.scrollTarget?this.#ie(e.swapSpec.scrollTarget):e.target;"top"===e.swapSpec.scroll?t.scrollTop=0:"bottom"===e.swapSpec.scroll&&(t.scrollTop=t.scrollHeight)}if(e.swapSpec.show){(e.swapSpec.showTarget?this.#ie(e.swapSpec.showTarget):e.target).scrollIntoView("top"===e.swapSpec.show)}}#Ae(e){let t=e.request?.originalAction?.split("#")[1];t&&document.getElementById(t)?.scrollIntoView({block:"start",behavior:"auto"})}#xe(e){let t=this.#C(e,"script");for(let e of t){let t=document.createElement("script");for(let r of e.attributes)t.setAttribute(r.name,r.value);this.config.inlineScriptNonce&&(t.nonce=this.config.inlineScriptNonce),t.textContent=e.textContent,e.replaceWith(t)}}async swap(e){this.#qe(e);let{fragment:t,title:r}=this.#ge(e.text);e.title=r;let i=[],s=this.#ve(t,e.sourceElement,e.selectOOB),n=this.#Ee(t,e);i.push(...s,...n);let a=this.#Te(e,t,n);if(a&&i.push(a),0===i.length)return;let o=i.filter(e=>e.transition),l=i.filter(e=>!e.transition);if(this.#O(document,"htmx:before:swap",{ctx:e,tasks:i})){for(let e of l)e.swapSpec?.swap?setTimeout(()=>this.#Me(e),this.parseInterval(e.swapSpec.swap)):this.#Me(e);if(o.length>0){let e=()=>{for(let e of o)this.#Me(e)};await this.#Ne(e)}this.#O(document,"htmx:after:swap",{ctx:e}),e.title&&!a?.swapSpec?.ignoreTitle&&(document.title=e.title),await this.timeout(1);for(let e of i)for(let t of e.restoreTasks||[])t();this.#O(document,"htmx:after:restore",{ctx:e}),this.#Ae(e)}}#Te(e,t,r){let i=this.#ye(e.swap||this.config.defaultSwap);if("delete"===i.style||/\S/.test(t.innerHTML||"")||!r.length){if(e.select){let r=t.querySelectorAll(e.select);(t=document.createDocumentFragment()).append(...r)}return this.#M(e.sourceElement)&&(i.show||="top"),{type:"main",fragment:t,target:this.#j(e.sourceElement||document.body,i.target||e.target),swapSpec:i,sourceElement:e.sourceElement,transition:!1!==e.transition&&!1!==i.transition}}}#Me(e){let{target:t,swapSpec:r,fragment:i}=e;if("string"==typeof t&&(t=document.querySelector(t)),!t)return;r.strip&&i.firstElementChild&&(e.unstripped=i,i=document.createDocumentFragment(),i.append(...(e.fragment.firstElementChild.content||e.fragment.firstElementChild).childNodes));let s=this.#pe(i),n=t.parentNode,a=[...i.childNodes];if("innerHTML"===r.style){this.#Ie(e,t);for(const e of t.children)this.#de(e);t.replaceChildren(...i.childNodes)}else if("outerHTML"===r.style)n&&(this.#Ie(e,n),this.#Se(n,t,i),this.#de(t),n.removeChild(t));else if("innerMorph"===r.style)this.#He(t,i,!0);else if("outerMorph"===r.style)this.#He(t,i,!1);else if("beforebegin"===r.style)n&&this.#Se(n,t,i);else if("afterbegin"===r.style)this.#Se(t,t.firstChild,i);else if("beforeend"===r.style)this.#Se(t,null,i);else{if("afterend"!==r.style){if("delete"===r.style)return void(n&&(this.#de(t),n.removeChild(t)));if("none"===r.style)return;if(e.target=t,e.fragment=i,!this.#T(t,"htmx:handle:swap",e))return;throw new Error(`Unknown swap style: ${r.style}`)}n&&this.#Se(n,t.nextSibling,i)}this.#fe(s);for(const e of a)this.process(e),this.#we(e);this.#Ce(e)}#O(e,t,r={},i=!0){return this.config.logAll&&console.log(t,r,e),e=this.#Oe(e),this.#T(e,this.#q(t),r),this.trigger(e,t,r,i)}#T(e,t,r={}){let i=this.#r.get(t.replace(/:/g,"_"));if(i){r.cancelled=!1;for(const t of i)if(!1===t(e,r)||r.cancelled)return r.cancelled=!0,!1}return!0}timeout(e){if((e=this.parseInterval(e))>0)return new Promise(t=>setTimeout(t,e))}forEvent(e,t,r=document){return new Promise((i,s)=>{let n=e=>{clearTimeout(a),i(e)},a=t&&setTimeout(()=>{r.removeEventListener(e,n),i(null)},t);r.addEventListener(e,n,{once:!0})})}onLoad(e){this.on("htmx:after:init",t=>{e(t.target)})}takeClass(e,t,r=e.parentElement){for(let e of this.findAll(this.#Oe(r),"."+t))e.classList.remove(t);e.classList.add(t)}on(e,t,r){let i,s=document;return void 0===r?(i=e,r=t):(s=this.#Oe(e),i=t),s.addEventListener(i,r),r}find(e,t){return this.#ie(e,t)}findAll(e,t){return this.#ae(e,t)}parseInterval(e){if("number"==typeof e)return e;let[,t,r]=e?.match(/^([\d.]+)(ms|s|m)?$/)||[],i=parseFloat(t)*({ms:1,s:1e3,m:6e4}[r]||1);return isNaN(i)?void 0:i}trigger(e,t,r={},i=!0){e=this.#Oe(e);let s=new CustomEvent(t,{detail:r,cancelable:!0,bubbles:i,composed:!0,originalTarget:e}),n=e.isConnected?e:document;return!r.cancelled&&n.dispatchEvent(s)}ajax(e,t,r){(!r||r instanceof Element||"string"==typeof r)&&(r={target:r});let i="string"==typeof r.source?document.querySelector(r.source):r.source;if("string"==typeof r.source&&!i)return Promise.reject(new Error("Source not found"));let s=this.#j(document.body,r.target||i);if(!s)return Promise.reject(new Error("Target not found"));i||=s;let n=this.#b(i,r.event||{});return Object.assign(n,r,{target:s}),Object.assign(n.request,{action:t,method:e.toUpperCase()}),r.headers&&Object.assign(n.request.headers,r.headers),this.#V(n)}#S(){this.config.history&&(history.state||history.replaceState({htmx:!0},"",location.pathname+location.search),window.addEventListener("popstate",e=>{e.state&&e.state.htmx&&this.#Le()}))}#Re(e){this.config.history&&(history.pushState({htmx:!0},"",e),this.#O(document,"htmx:after:push:into:history",{path:e}))}#ke(e){this.config.history&&(history.replaceState({htmx:!0},"",e),this.#O(document,"htmx:after:replace:into:history",{path:e}))}#Le(e){if(e=e||location.pathname+location.search,this.#O(document,"htmx:before:restore:history",{path:e,cacheMiss:!0}))this.config.historyReload?location.reload():this.ajax("GET",e,{target:"body",request:{headers:{"HX-History-Restore-Request":"true"}}});else if("FORM"===elt.tagName)return"dialog"!==elt.method&&this.#ue(elt.action)}#qe(e){let{sourceElement:t,push:r,replace:i,hx:s,response:n}=e;(s?.push||s?.pushurl||s?.replaceurl)&&(r=s.push||s.pushurl,i=s.replaceurl),r||i||!this.#M(t)||(r="true");let a=r||i;if(!a||"false"===a||!1===a)return;"true"===a&&(a=e.request.originalAction);let o=r?"push":"replace",l={history:{type:o,path:a},sourceElement:t,response:n};this.#O(document,"htmx:before:history:update",l)&&("push"===o?this.#Re(a):this.#ke(a),this.#O(document,"htmx:after:history:update",l))}#he(e){for(let r of e.getAttributeNames()){var t=this.#q(this.#f("hx-on:"));if(r.startsWith(t)){let i=r.substring(t.length),s=e.getAttribute(r);e.addEventListener(i,async t=>{try{await this.#P(e,{event:t},s,!1)}catch(e){console.log(e)}})}}}#Q(e,t){let r=[];if(t){r=[e,...this.#C(e,t)];for(const e of r)e._htmxReqCount||=0,e._htmxReqCount++,e.classList.add(this.config.requestClass)}return r}#Z(e){for(let t of e)t._htmxReqCount&&(t._htmxReqCount--,t._htmxReqCount<=0&&(t.classList.remove(this.config.requestClass),delete t._htmxReqCount))}#J(e,t){let r=[];if(t){r=this.#C(e,t);for(let e of r)e._htmxDisableCount||=0,e._htmxDisableCount++,e.disabled=!0}return r}#ee(e){for(const t of e)t._htmxDisableCount&&(t._htmxDisableCount--,t._htmxDisableCount<=0&&(t.disabled=!1,delete t._htmxDisableCount))}#y(e,t,r){let i=t?new FormData(t):new FormData,s=t?new Set(t.elements):new Set;!t&&e.name&&(i.append(e.name,e.value),s.add(e)),r&&r.name&&(i.append(r.name,r.value),s.add(r));let n=this.#m(e,"hx-include");if(n){let t=this.#ae(e,n);for(let e of t)this.#Ve(e,s,i)}return i}#Ve(e,t,r){let i=this.#C(e,"input:not([disabled]), select:not([disabled]), textarea:not([disabled])");for(let e of i){if(!e.name||t.has(e))continue;t.add(e);let i=e.type;if("checkbox"===i||"radio"===i)e.checked&&r.append(e.name,e.value);else if("file"===i)for(let t of e.files)r.append(e.name,t);else if("select-multiple"===i)for(let t of e.selectedOptions)r.append(e.name,t.value);else e.matches("select, textarea, input")&&r.append(e.name,e.value)}}#v(e,t){let r=this.#m(e,"hx-vals");if(r){let i=this.#$(r);if(i)return this.#P(e,{},i,!0).then(e=>{for(let r in e)t.append(r,e[r])});{let e=this.#E(r);for(let r in e)t.append(r,e[r])}}}#je(e){let t=e.trim();return t.startsWith("<")&&t.endsWith("/>")?t.slice(1,-2):t}#ae(e,t,r){let i=t??e,s=t?this.#Oe(e):document;if(i.startsWith("global "))return this.#ae(s,i.slice(7),!0);let n=i?i.replace(/<[^>]+\/>/g,e=>e.replace(/,/g,"%2C")).split(",").map(e=>e.replace(/%2C/g,",")):[],a=[],o=[];for(const e of n){let t,i=this.#je(e);i.startsWith("closest ")?t=s.closest(i.slice(8)):i.startsWith("find ")?t=document.querySelector(s,i.slice(5)):"next"===i||"nextElementSibling"===i?t=s.nextElementSibling:i.startsWith("next ")?t=this.#_e(s,i.slice(5),!!r):"previous"===i||"previousElementSibling"===i?t=s.previousElementSibling:i.startsWith("previous ")?t=this.#De(s,i.slice(9),!!r):"document"===i?t=document:"window"===i?t=window:"body"===i?t=document.body:"root"===i?t=this.#Be(s,!!r):"host"===i?t=s.getRootNode().host:o.push(i),t&&a.push(t)}if(o.length>0){let e=o.join(","),t=this.#Be(s,!!r);a.push(...t.querySelectorAll(e))}return a}#_e(e,t,r){return this.#$e(this.#Be(e,r).querySelectorAll(t),e,Node.DOCUMENT_POSITION_PRECEDING)}#De(e,t,r){let i=[...this.#Be(e,r).querySelectorAll(t)].reverse();return this.#$e(i,e,Node.DOCUMENT_POSITION_FOLLOWING)}#$e(e,t,r){for(const i of e)if(i.compareDocumentPosition(t)===r)return i}#Be(e,t){return e.isConnected&&e.getRootNode?e.getRootNode?.({composed:t}):document}#ie(e,t){return this.#ae(e,t)[0]}#$(e){if(null!=e){if(e.startsWith("js:"))return e.substring(3);if(e.startsWith("javascript:"))return e.substring(11)}}#k(e){e.addEventListener("htmx:abort",()=>{this.#W(e).abort()})}#He(e,t,r){let{persistentIds:i,idMap:s}=this.#Pe(e,t),n=document.createElement("div");n.hidden=!0,document.body.after(n);let a={target:e,idMap:s,persistentIds:i,pantry:n};r?this.#Fe(a,e,t):this.#Fe(a,e.parentNode,t,e,e.nextSibling),this.#de(n),n.remove()}#Fe(e,t,r,i=null,s=null){t instanceof HTMLTemplateElement&&r instanceof HTMLTemplateElement&&(t=t.content,r=r.content),i||=t.firstChild;for(const n of r.childNodes){if(i&&i!=s){let t=this.#ze(e,n,i,s);if(t){if(t!==i){let r=i;for(;r&&r!==t;){let t=r;r=r.nextSibling,this.#We(e,t)}}this.#Ue(t,n,e),i=t.nextSibling;continue}}if(n instanceof Element&&e.persistentIds.has(n.id)){let r=e.target.id===n.id&&e.target||e.target.querySelector(`[id="${n.id}"]`)||e.pantry.querySelector(`[id="${n.id}"]`),s=r.id,a=r;for(;a=a.parentNode;){let t=e.idMap.get(a);t&&(t.delete(s),t.size||e.idMap.delete(a))}this.#Qe(t,r,i),this.#Ue(r,n,e),i=r.nextSibling;continue}let r;e.idMap.has(n)?(r=document.createElement(n.tagName),t.insertBefore(r,i),this.#Ue(r,n,e)):(r=document.importNode(n,!0),t.insertBefore(r,i)),i=r.nextSibling}for(;i&&i!=s;){let t=i;i=i.nextSibling,this.#We(e,t)}}#ze(e,t,r,i){let s=null,n=t.nextSibling,a=0,o=0,l=e.idMap.get(t),h=l?.size||0,c=r;for(;c&&c!=i;){let r=e.idMap.get(c);if(this.#Je(c,t)){if(r&&l&&[...r].some(e=>l.has(e)))return c;if(null===s&&!r){if(!h)return c;s=c}}if(o+=r?.size||0,o>h)break;if(null===s&&n&&this.#Je(c,n)&&(a++,n=n.nextSibling,a>=2&&(s=void 0)),c.contains(document.activeElement))break;c=c.nextSibling}return s||null}#Je(e,t){return e.nodeType===t.nodeType&&e.tagName===t.tagName&&(!e.id||e.id===t.id)}#We(e,t){e.idMap.has(t)?this.#Qe(e.pantry,t,null):(this.#de(t),t.remove())}#Qe(e,t,r){if(e.moveBefore)try{return void e.moveBefore(t,r)}catch(e){}e.insertBefore(t,r)}#Ue(e,t,r){let i=t.nodeType;if(1===i){let r=this.config.morphIgnore||[];this.#Ge(e,t,r),e instanceof HTMLTextAreaElement&&e.defaultValue!=t.defaultValue&&(e.value=t.value)}8!==i&&3!==i||e.nodeValue===t.nodeValue||(e.nodeValue=t.nodeValue),e.isEqualNode(t)||this.#Fe(r,e,t)}#Ge(e,t,r=[]){for(const i of t.attributes)r.includes(i.name)||e.getAttribute(i.name)===i.value||(e.setAttribute(i.name,i.value),"value"===i.name&&e instanceof HTMLInputElement&&"file"!==e.type&&(e.value=i.value));for(let i=e.attributes.length-1;i>=0;i--){let s=e.attributes[i];!s||t.hasAttribute(s.name)||r.includes(s.name)||e.removeAttribute(s.name)}}#Xe(e,t,r,i){for(const s of i)if(t.has(s.id)){let t=s;for(;t&&t!==r;){let r=e.get(t);null==r&&(r=new Set,e.set(t,r)),r.add(s.id),t=t.parentElement}}}#Pe(e,t){let r=this.#C(e,"[id]"),i=t.querySelectorAll("[id]"),s=this.#Ke(r,i),n=new Map;return this.#Xe(n,s,e.parentElement,r),this.#Xe(n,s,t,i),{persistentIds:s,idMap:n}}#Ke(e,t){let r=new Set,i=new Map;for(const{id:t,tagName:s}of e)i.has(t)?r.add(t):i.set(t,s);let s=new Set;for(const{id:e,tagName:n}of t)s.has(e)?r.add(e):i.get(e)===n&&s.add(e);for(const e of r)s.delete(e);return s}#Y(e){let t=e.response.raw.status,r=this.config.noSwap.map(e=>e+""),i=t+"";for(let t of[i,i.slice(0,2)+"x",i[0]+"xx"]){if(r.includes(t))return void(e.swap="none");let i=this.#m(e.sourceElement,"hx-status:"+t);if(i)return void Object.assign(e,this.#E(i))}}#Ne(e){return new Promise(t=>{this.#c||=[],this.#c.push({task:e,resolve:t}),this.#u||this.#Ye()})}async#Ye(){if(0===this.#c.length||this.#u)return;this.#u=!0;let{task:e,resolve:t}=this.#c.shift();try{document.startViewTransition?(this.#O(document,"htmx:before:viewTransition",{task:e}),await document.startViewTransition(e).finished,this.#O(document,"htmx:after:viewTransition",{task:e})):e()}catch(e){}finally{this.#u=!1,t(),this.#Ye()}}#Ie(e,t){let r=t.querySelectorAll("[id]"),i=Object.fromEntries([...r].map(e=>[e.id,e])),s=e.fragment.querySelectorAll("[id]");e.restoreTasks=[];for(let t of s){let r=i[t.id];if(r?.tagName===t.tagName){let i=t.cloneNode(!1);this.#Ge(t,r,this.config.morphIgnore),e.restoreTasks.push(()=>{this.#Ge(t,i,this.config.morphIgnore)})}}}#Oe(e){return"string"==typeof e?this.find(e):e}#q(e){return this.config.metaCharacter?e.replace(/:/g,this.config.metaCharacter):e}}})();export default htmx;
|
|
1
|
+
var htmx=(()=>{class e{#e=null;#t=[];issue(e,t){return this.#e?"replace"===t?(this.#t.map(e=>e.status="dropped"),this.#t=[],this.#e&&this.#e.abort(),!0):("queue all"===t?(this.#t.push(e),e.status="queued"):"drop"===t?e.status="dropped":"queue last"===t?(this.#t.map(e=>e.status="dropped"),this.#t=[e],e.status="queued"):0===this.#t.length?(this.#t.push(e),e.status="queued"):e.status="dropped",!1):(this.#e=e,!0)}finish(){this.#e=null}next(){return this.#t.shift()}abort(){this.#e?.abort?.()}more(){return this.#t?.length}}return new class{#r=new Map;#i="";#s=new Set;#n;#a;#o="a,form";#l=["get","post","put","patch","delete"];#h;#c;#u;constructor(){this.#d(),this.#p(),this.#a=`[${this.#f("hx-action")}],[${this.#f("hx-get")}],[${this.#f("hx-post")}],[${this.#f("hx-put")}],[${this.#f("hx-patch")}],[${this.#f("hx-delete")}]`,this.#h=(new XPathEvaluator).createExpression(`.//*[@*[ starts-with(name(), "${this.#f("hx-on")}")]]`),this.#n={attributeValue:this.#m.bind(this),parseTriggerSpecs:this.#g.bind(this),determineMethodAndAction:this.#x.bind(this),createRequestContext:this.#b.bind(this),collectFormData:this.#y.bind(this),handleHxVals:this.#v.bind(this)},document.addEventListener("DOMContentLoaded",()=>{this.#S(),this.process(document.body)})}#d(){this.config={version:"4.0.0-alpha3",logAll:!1,prefix:"",transitions:!0,history:!0,historyReload:!1,mode:"same-origin",defaultSwap:"innerHTML",indicatorClass:"htmx-indicator",requestClass:"htmx-request",includeIndicatorCSS:!0,defaultTimeout:6e4,extensions:"",sse:{reconnect:!1,reconnectDelay:500,reconnectMaxDelay:6e4,reconnectMaxAttempts:10,reconnectJitter:.3,pauseInBackground:!1},morphIgnore:["data-htmx-powered"],noSwap:[204,304],implicitInheritance:!1};let e=document.querySelector('meta[name="htmx:config"]');if(e){let t=e.content,r=this.#w(t);for(let e in r){let t=r[e];t&&"object"==typeof t&&!Array.isArray(t)&&this.config[e]?Object.assign(this.config[e],t):this.config[e]=t}}this.#i=this.config.extensions}#p(){if(!1!==this.config.includeIndicatorCSS){let e="";this.config.inlineStyleNonce&&(e=` nonce="${this.config.inlineStyleNonce}"`);let t=this.config.indicatorClass,r=this.config.requestClass;document.head.insertAdjacentHTML("beforeend",`<style${e}>.${t}{opacity:0;visibility: hidden} .${r} .${t}, .${r}.${t}{opacity:1;visibility: visible;transition: opacity 200ms ease-in}</style>`)}}registerExtension(e,t){return!(this.#i&&!this.#i.split(/,\s*/).includes(e))&&(!this.#s.has(e)&&(this.#s.add(e),t.init&&t.init(this.#n),void Object.entries(t).forEach(([e,t])=>{this.#r.get(e)?.push(t)||this.#r.set(e,[t])})))}#E(e){return!e.closest||null!=e.closest(`[${this.#f("hx-ignore")}]`)}#f(e){return this.config.prefix?e.replace("hx-",this.config.prefix):e}#C(e,t){let r=[...e.querySelectorAll(t)];return e.matches?.(t)&&r.unshift(e),r}#q(e){return"before"===e?"beforebegin":"after"===e?"afterend":"prepend"===e?"afterbegin":"append"===e?"beforeend":e}#m(e,t,r,i){let s=(t=this.#f(t))+this.#A(":append"),n=t+(this.config.implicitInheritance?"":this.#A(":inherited")),a=t+this.#A(":inherited:append");if(e.hasAttribute(t))return i?e:e.getAttribute(t);if(e.hasAttribute(n))return i?e:e.getAttribute(n);if(e.hasAttribute(s)||e.hasAttribute(a)){let r=e.getAttribute(s)||e.getAttribute(a),o=e.parentNode?.closest?.(`[${CSS.escape(n)}],[${CSS.escape(a)}]`);if(o){let e=this.#m(o,t,void 0,i);return i?e:e?e+","+r:r}return i?e:r}let o=e.parentNode?.closest?.(`[${CSS.escape(n)}],[${CSS.escape(a)}]`);if(o){let r=this.#m(o,t,void 0,i);return!i&&r&&this.config.implicitInheritance&&this.#T(e,"htmx:after:implicitInheritance",{elt:e,parent:o}),r}return i?e:r}#w(e){if("{"===e[0])return JSON.parse(e);return[...e.matchAll(/([^\s,]+?)(?:\s*:\s*(?:"([^"]*)"|'([^']*)'|<([^>]+)\/>|([^\s,]+)))?(?=\s|,|$)/g)].reduce((e,t)=>{let r=t[1].split("."),i=(t[2]??t[3]??t[4]??t[5]??"true").trim();return"true"===i?i=!0:"false"===i?i=!1:/^\d+$/.test(i)&&(i=parseInt(i)),r.slice(0,-1).reduce((e,t)=>e[t]??={},e)[r.at(-1)]=i,e},{})}#g(e){return e.split(",").map(e=>{let t=e.match(/^\s*(\S+\[[^\]]*\]|\S+)\s*(.*?)\s*$/);if(!t||!t[1])return null;if(t[1].includes("[")&&!t[1].includes("]"))throw"unterminated:"+t[1];let r=t[2]?this.#w(t[2]):{};return r.name=t[1],r}).filter(e=>e)}#x(e,t){if(this.#M(e))return this.#I(e,t);{let t=this.#m(e,"hx-method")||"GET",r=this.#m(e,"hx-action");if(!r)for(let i of this.#l){let s=this.#m(e,"hx-"+i);if(s){r=s,t=i;break}}return t=t.toUpperCase(),{action:r,method:t}}}#I(e,t){if(e.matches("a"))return{action:e.getAttribute("href"),method:"GET"};return{action:t.submitter?.getAttribute?.("formAction")||e.getAttribute("action"),method:t.submitter?.getAttribute?.("formMethod")||e.getAttribute("method")||"GET"}}#N(e){this.#H(e)&&this.#O(e,"htmx:before:init",{},!0)&&(e._htmx={eventHandler:this.#L(e)},e.setAttribute("data-htmx-powered","true"),this.#k(e),this.#R(e),this.#O(e,"htmx:after:init",{},!0),this.#O(e,"load",{},!1))}#L(e){return async t=>{try{let r=this.#b(e,t);await this.#V(r)}catch(e){console.error(e)}}}#b(e,t){let{action:r,method:i}=this.#x(e,t),[s,n]=(r||"").split("#"),a=new AbortController,o={sourceElement:e,sourceEvent:t,status:"created",select:this.#m(e,"hx-select"),selectOOB:this.#m(e,"hx-select-oob"),target:this.#B(e,this.#m(e,"hx-target")),swap:this.#m(e,"hx-swap",this.config.defaultSwap),push:this.#m(e,"hx-push-url"),replace:this.#m(e,"hx-replace-url"),transition:this.config.transitions,confirm:this.#m(e,"hx-confirm"),request:{validate:"true"===this.#m(e,"hx-validate",e.matches("form")?"true":"false"),action:s,anchor:n,method:i,headers:this.#_(e),abort:a.abort.bind(a),credentials:"same-origin",signal:a.signal,mode:this.config.mode}},l=this.#m(e,"hx-config");if(l){let t=this.#w(l),r=o.request;for(let e in t)if(e.startsWith("+")){let i=e.substring(1);r[i]&&"object"==typeof r[i]?Object.assign(r[i],t[e]):r[i]=t[e]}else r[e]=t[e];r.etag&&((e._htmx||={}).etag||=r.etag)}return e._htmx?.etag&&(o.request.headers["If-none-match"]=e._htmx.etag),o}#_(e){let t={"HX-Request":"true","HX-Source":e.id||e.name,"HX-Current-URL":location.href,Accept:"text/html, text/event-stream"};this.#M(e)&&(t["HX-Boosted"]="true");let r=this.#m(e,"hx-headers");return r&&Object.assign(t,this.#w(r)),t}#B(e,t){return t instanceof Element?t:"this"===t?this.#m(e,"hx-target",void 0,!0):null!=t?this.find(e,t):this.#M(e)?document.body:e}#M(e){return e?._htmx?.boosted}async#V(e){let t=e.sourceElement,r=e.sourceEvent;if(!t.isConnected)return;if(this.#j(r))return;this.#D(r)&&r.preventDefault();let i=t.form||t.closest("form"),s=this.#y(t,i,r.submitter),n=this.#v(t,s);if(n&&await n,e.values)for(let t in e.values)s.delete(t),s.append(t,e.values[t]);if(Object.assign(e.request,{form:i,submitter:r.submitter,body:s}),!this.#O(t,"htmx:config:request",{ctx:e}))return;if(!this.#l.includes(e.request.method.toLowerCase()))return;if(e.request.validate&&e.request.form&&!e.request.form.reportValidity())return;let a=this.#$(e.request.action);if(null!=a){let t=Object.fromEntries(e.request.body);return void await this.#P(e.sourceElement,t,a,!1)}if(/GET|DELETE/.test(e.request.method)){let t=new URL(e.request.action,document.baseURI);for(let r of e.request.body.keys())t.searchParams.delete(r);for(let[r,i]of e.request.body)t.searchParams.append(r,i);e.request.action=t.pathname+t.search,e.request.body=null}else"multipart/form-data"!==this.#m(t,"hx-encoding")&&(e.request.body=new URLSearchParams(e.request.body));await this.#F(e)}async#F(e){let t=e.sourceElement,r=this.#z(t),i=this.#U(t);if(!i.issue(e,r))return;e.status="issuing",this.#W(e);let s=this.#m(t,"hx-indicator"),n=this.#Q(t,s),a=this.#m(t,"hx-disable"),o=this.#J(t,a);try{if(e.confirm){let r=null;if(!await new Promise(i=>{if(r=i,this.#O(t,"htmx:confirm",{ctx:e,issueRequest:e=>r?.(!1!==e)})){let r=this.#$(e.confirm);i(r?this.#P(t,{},r,!0):window.confirm(e.confirm))}}))return}if(e.fetch||=window.fetch.bind(window),!this.#O(t,"htmx:before:request",{ctx:e}))return;let r=await e.fetch(e.request.action,e.request);if(e.response={raw:r,status:r.status,headers:r.headers},this.#G(e),e.isSSE=r.headers.get("Content-Type")?.includes("text/event-stream"),e.isSSE||(e.text=await r.text()),!this.#O(t,"htmx:after:request",{ctx:e}))return;if(this.#X(e))return;let i=r.headers.get("Content-Type")?.includes("text/event-stream");i?await this.#K(e,t,r):"issuing"===e.status&&(e.hx.retarget&&(e.target=e.hx.retarget),e.hx.reswap&&(e.swap=e.hx.reswap),e.hx.reselect&&(e.select=e.hx.reselect),e.status="response received",this.#Y(e),await this.swap(e),e.status="swapped")}catch(r){e.status="error: "+r,this.#O(t,"htmx:error",{ctx:e,error:r})}finally{this.#Z(n),this.#ee(o),this.#O(t,"htmx:finally:request",{ctx:e}),i.finish(),i.more()&&this.#F(i.next())}}#G(e){e.hx={};for(let[t,r]of e.response.raw.headers)t.toLowerCase().startsWith("hx-")&&(e.hx[t.slice(3).toLowerCase().replace(/-/g,"")]=r)}#X(e){if(e.hx.trigger&&this.#te(e.hx.trigger,e.sourceElement),"true"===e.hx.refresh)return location.reload(),!0;if(e.hx.redirect)return location.href=e.hx.redirect,!0;if(e.hx.location){let t=e.hx.location,r={};return("{"===t[0]||/[\s,]/.test(t))&&(r=this.#w(t),t=r.path,delete r.path),r.push=r.push||"true",this.ajax("GET",t,r),!0}e.response?.headers?.get?.("Etag")&&(e.sourceElement._htmx||={},e.sourceElement._htmx.etag=e.response.headers.get("Etag"))}async#K(e,t,r){let i={...this.config.sse,...e.request.sse},s=()=>new Promise(e=>{let t=()=>!document.hidden&&(document.removeEventListener("visibilitychange",t),e());document.addEventListener("visibilitychange",t)}),n=null,a=0,o=r;for(;t.isConnected;){if(a>0){if(!i.reconnect||a>i.reconnectMaxAttempts)break;if(i.pauseInBackground&&document.hidden&&(await s(),!t.isConnected))break;let r=Math.min(this.parseInterval(i.reconnectDelay)*Math.pow(2,a-1),this.parseInterval(i.reconnectMaxDelay));if(i.reconnectJitter>0){let e=r*i.reconnectJitter,t=(2*Math.random()-1)*e;r=Math.max(0,r+t)}let l={attempt:a,delay:r,lastEventId:n,cancelled:!1};if(e.status="reconnecting to stream",!this.#O(t,"htmx:before:sse:reconnect",{ctx:e,reconnect:l})||l.cancelled)break;if(await new Promise(e=>setTimeout(e,l.delay)),!t.isConnected)break;try{n&&((e.request.headers=e.request.headers||{})["Last-Event-ID"]=n),o=await fetch(e.request.action,e.request)}catch(r){e.status="stream error",this.#O(t,"htmx:error",{ctx:e,error:r}),a++;continue}}if(!this.#O(t,"htmx:before:sse:stream",{ctx:e}))break;e.status="streaming",a=0;try{for await(const r of this.#re(o)){if(!t.isConnected)break;if(i.pauseInBackground&&document.hidden&&(await s(),!t.isConnected))break;let a={data:r.data,event:r.event,id:r.id,cancelled:!1};this.#O(t,"htmx:before:sse:message",{ctx:e,message:a})&&!a.cancelled&&(r.id&&(n=r.id),r.event?(this.#O(t,r.event,{data:r.data,id:r.id}),this.#O(t,"htmx:after:sse:message",{ctx:e,message:a})):(e.text=r.data,e.status="stream message received",e.response.cancelled||(await this.swap(e),e.status="swapped"),this.#O(t,"htmx:after:sse:message",{ctx:e,message:a})))}}catch(r){e.status="stream error",this.#O(t,"htmx:error",{ctx:e,error:r})}if(!t.isConnected)break;this.#O(t,"htmx:after:sse:stream",{ctx:e}),a++}}async*#re(e){let t=e.body.getReader(),r=new TextDecoder,i="",s={data:"",event:"",id:"",retry:null};try{for(;;){let{done:e,value:n}=await t.read();if(e)break;i+=r.decode(n,{stream:!0});let a=i.split("\n");i=a.pop()||"";for(let e of a){if(!e||"\r"===e){s.data&&(yield s,s={data:"",event:"",id:"",retry:null});continue}let t=e.indexOf(":");if(t<=0)continue;let r=e.slice(0,t),i=e.slice(t+1).trimStart();if("data"===r)s.data+=(s.data?"\n":"")+i;else if("event"===r)s.event=i;else if("id"===r)s.id=i;else if("retry"===r){let e=parseInt(i,10);isNaN(e)||(s.retry=e)}}}}finally{t.releaseLock()}}#W(e){let t;t=e.request.timeout?this.parseInterval(e.request.timeout):this.config.defaultTimeout,e.requestTimeout=setTimeout(()=>e.abort?.(),t)}#z(e){let t=this.#m(e,"hx-sync");return t?.split(":")[1]||"queue first"}#U(t){let r=this.#m(t,"hx-sync"),i=t;if(r&&r.includes(":")){let e=r.split(":")[0];i=this.#ie(e)}return i._htmxRequestQueue||=new e}#j(e){return"click"===e.type&&(e.ctrlKey||e.metaKey||e.shiftKey)}#D(e){let t=e.currentTarget;if("submit"===e.type&&"FORM"===t?.tagName)return!0;if(!("click"===e.type&&0===e.button))return!1;let r=t?.closest?.('button, input[type="submit"], input[type="image"]'),i=r?.form||r?.closest("form");if(r&&!r.disabled&&i&&("submit"===r.type||"image"===r.type||!r.type&&"BUTTON"===r.tagName))return!0;let s=t?.closest?.("a");if(!s||!s.href)return!1;let n=s.getAttribute("href");return!(n&&n.startsWith("#")&&n.length>1)}#k(e,t=e._htmx.eventHandler){let r=this.#m(e,"hx-trigger");r||(r=e.matches("form")?"submit":e.matches("input:not([type=button]),select,textarea")?"change":"click"),e._htmx.triggerSpecs=this.#g(r),e._htmx.listeners=[];for(let r of e._htmx.triggerSpecs){r.handler=t,r.listeners=[],r.values={};let[i,s]=this.#se(r.name);if(r.once){let e=r.handler;r.handler=t=>{e(t);for(let e of r.listeners)e.fromElt.removeEventListener(e.eventName,e.handler)}}if("intersect"===i||"revealed"===i){let t={};r.opts?.root&&(t.root=this.#ie(e,r.opts.root)),r.opts?.threshold&&(t.threshold=parseFloat(r.opts.threshold));let s="revealed"===i;r.observer=new IntersectionObserver(t=>{for(let i=0;i<t.length;i++){if(t[i].isIntersecting){this.trigger(e,"intersect",{},!1),s&&r.observer.disconnect();break}}},t),i="intersect",r.observer.observe(e)}if(r.delay){let e=r.handler;r.handler=t=>{clearTimeout(r.timeout),r.timeout=setTimeout(()=>e(t),this.parseInterval(r.delay))}}if(r.throttle){let e=r.handler;r.handler=t=>{r.throttled?r.throttledEvent=t:(r.throttled=!0,e(t),r.throttleTimeout=setTimeout(()=>{if(r.throttled=!1,r.throttledEvent){let e=r.throttledEvent;r.throttledEvent=null,r.handler(e)}},this.parseInterval(r.throttle)))}}if(r.target){let e=r.handler;r.handler=t=>{t.target?.matches?.(r.target)&&e(t)}}if("every"===i){let t=Object.keys(r).find(e=>"name"!==e);r.interval=setInterval(()=>{e.isConnected?this.#O(e,"every",{},!1):clearInterval(r.interval)},this.parseInterval(t))}if(s){let t=r.handler;r.handler=r=>{this.#D(r)&&r.preventDefault(),this.#ne(e,r,s)&&t(r)}}let n=[e];if(r.from&&(n=this.#ae(e,r.from)),r.consume){let e=r.handler;r.handler=t=>{t.stopPropagation(),e(t)}}if(r.changed){let e=r.handler;r.handler=t=>{let i=!1;for(let e of n)r.values[e]!==e.value&&(i=!0,r.values[e]=e.value);i&&e(t)}}for(let t of n){let s={fromElt:t,eventName:i,handler:r.handler};e._htmx.listeners.push(s),r.listeners.push(s),t.addEventListener(i,r.handler)}}}#se(e){let t=e.match(/^([^\[]*)\[([^\]]*)]/);return t?[t[1],t[2]]:[e,null]}#te(e,t){if("{"===e[0]){let r=this.#w(e);for(let e in r){let i=r[e];i?.target&&(t=this.find(i.target)||t),this.trigger(t,e,"object"==typeof i?i:{value:i})}}else e.split(",").forEach(e=>this.trigger(t,e.trim(),{}))}#oe(e){let t={},r=Object.getPrototypeOf(this);for(let i of Object.getOwnPropertyNames(r))"constructor"!==i&&"function"==typeof this[i]&&(["find","findAll"].includes(i)?t[i]=(t,r)=>void 0===r?this[i](e,t):this[i](t,r):t[i]=this[i].bind(this));return t}async#P(e,t,r,i=!0){let s={};Object.assign(s,this.#oe(e)),Object.assign(s,t);let n=Object.keys(s),a=Object.values(s),o=new(0,Object.getPrototypeOf(async function(){}).constructor)(...n,i?`return (${r})`:r);return await o.call(e,...a)}#ne(e,t,r){let i={};Object.assign(i,this.#oe(e));for(let e in t)i[e]=t[e];let s=Object.keys(i),n=Object.values(i);return new Function(...s,`return (${r})`).call(e,...n)}process(e){if(!e||this.#E(e))return;if(!this.#O(e,"htmx:before:process"))return;for(let t of this.#C(e,this.#a))this.#N(t);for(let t of this.#C(e,this.#o))this.#le(t);this.#he(e);let t=this.#h.evaluate(e),r=null;for(;r=t.iterateNext();)this.#he(r);this.#O(e,"htmx:after:process")}#le(e){"true"===this.#m(e,"hx-boost")&&this.#ce(e)&&(e._htmx={eventHandler:this.#L(e),requests:[],boosted:!0},e.setAttribute("data-htmx-powered","true"),e.matches("a")&&!e.hasAttribute("target")?e.addEventListener("click",t=>{e._htmx.eventHandler(t)}):e.addEventListener("submit",t=>{e._htmx.eventHandler(t)}),this.#O(e,"htmx:after:init",{},!0))}#ce(e){if(this.#H(e))if("A"===e.tagName){if(""===e.target||"_self"===e.target)return!e.getAttribute("href")?.startsWith?.("#")&&this.#ue(e.href)}else if("FORM"===e.tagName)return"dialog"!==e.method&&this.#ue(e.action)}#ue(e){try{return new URL(e,window.location.href).origin===window.location.origin}catch(e){return!1}}#H(e){return!e._htmx&&!this.#E(e)}#de(e){if(e._htmx){this.#O(e,"htmx:before:cleanup"),e._htmx.interval&&clearInterval(e._htmx.interval);for(let t of e._htmx.triggerSpecs||[])t.interval&&clearInterval(t.interval),t.timeout&&clearTimeout(t.timeout);for(let t of e._htmx.listeners||[])t.fromElt.removeEventListener(t.eventName,t.handler);this.#O(e,"htmx:after:cleanup")}for(let t of e.querySelectorAll("[data-htmx-powered]"))this.#de(t)}#pe(e){let t=document.createElement("div");t.style.display="none",document.body.appendChild(t);let r=e.querySelectorAll?.(`[${this.#f("hx-preserve")}]`)||[];for(let e of r){let r=document.getElementById(e.id);t.moveBefore?t.moveBefore(r,null):t.appendChild(r)}return t}#fe(e){for(let t of e.children){let e=document.getElementById(t.id);e.parentNode.moveBefore?e.parentNode.moveBefore(t,e):e.replaceWith(t),this.#de(e),e.remove()}e.remove()}#me(e){return Document.parseHTMLUnsafe?.(e)||(new DOMParser).parseFromString(e,"text/html")}#ge(e){let t=e.replace(/<hx-([a-z]+)(\s+|>)/gi,'<template hx type="$1"$2').replace(/<\/hx-[a-z]+>/gi,"</template>"),r="";t=t.replace(/<title[^>]*>[\s\S]*?<\/title>/i,e=>(r=this.#me(e).title,""));let i,s,n=t.replace(/<head(\s[^>]*)?>[\s\S]*?<\/head>/i,""),a=n.match(/<([a-z][^\/>\x20\t\r\n\f]*)/i)?.[1]?.toLowerCase();return"html"===a?(i=this.#me(t),s=i.body):"body"===a?(i=this.#me(n),s=i.body):(i=this.#me(`<template>${n}</template>`),s=i.querySelector("template").content),this.#xe(s),{fragment:s,title:r}}#be(e,t,r,i){let s=t.id?"#"+CSS.escape(t.id):null;"true"!==r&&r&&!r.includes(" ")&&([r,s=s]=r.split(/:(.*)/)),"true"!==r&&r||(r="outerHTML");let n=this.#ye(r);if(s=n.target||s,n.strip??=!n.style.startsWith("outer"),!s)return;let a=document.createDocumentFragment();a.append(t),e.push({type:"oob",fragment:a,target:s,swapSpec:n,sourceElement:i})}#ve(e,t,r){let i=[];if(r)for(let s of r.split(",")){let[r,n="true"]=s.split(/:(.*)/);for(let s of e.querySelectorAll(r))this.#be(i,s,n,t)}for(let r of e.querySelectorAll(`[${this.#f("hx-swap-oob")}]`)){let e=r.getAttribute(this.#f("hx-swap-oob"));r.removeAttribute(this.#f("hx-swap-oob")),this.#be(i,r,e,t)}return i}#Se(e,t,r){t?t.before(...r.childNodes):e.append(...r.childNodes)}#ye(e){e=e.trim();let t=this.config.defaultSwap;if(e&&!/^\S*:/.test(e)){let r=e.match(/^(\S+)\s*(.*)$/);t=r[1],e=r[2]}return{style:this.#q(t),...this.#w(e)}}#we(e,t){let r=[];for(let i of e.querySelectorAll("template[hx]")){let e=i.getAttribute("type");if("partial"===e){let e=this.#ye(i.getAttribute(this.#f("hx-swap"))||this.config.defaultSwap);r.push({type:"partial",fragment:i.content.cloneNode(!0),target:i.getAttribute(this.#f("hx-target")),swapSpec:e,sourceElement:t.sourceElement})}else this.#T(i,"htmx:process:"+e,{ctx:t,tasks:r});i.remove()}return r}#Ee(e){let t=this.find(e,"[autofocus]");t?.focus?.()}#Ce(e){if(e.swapSpec.scroll){let t=e.swapSpec.scrollTarget?this.#ie(e.swapSpec.scrollTarget):e.target;"top"===e.swapSpec.scroll?t.scrollTop=0:"bottom"===e.swapSpec.scroll&&(t.scrollTop=t.scrollHeight)}if(e.swapSpec.show){(e.swapSpec.showTarget?this.#ie(e.swapSpec.showTarget):e.target).scrollIntoView("top"===e.swapSpec.show)}}#qe(e){e.request?.anchor&&document.getElementById(e.request.anchor)?.scrollIntoView({block:"start",behavior:"auto"})}#xe(e){let t=this.#C(e,"script");for(let e of t){let t=document.createElement("script");for(let r of e.attributes)t.setAttribute(r.name,r.value);this.config.inlineScriptNonce&&(t.nonce=this.config.inlineScriptNonce),t.textContent=e.textContent,e.replaceWith(t)}}async swap(e){this.#Ae(e);let{fragment:t,title:r}=this.#ge(e.text);e.title=r;let i=[],s=this.#ve(t,e.sourceElement,e.selectOOB),n=this.#we(t,e);i.push(...s,...n);let a=this.#Te(e,t,n);if(a&&i.push(a),0===i.length)return;let o=i.filter(e=>e.transition),l=i.filter(e=>!e.transition);if(this.#O(document,"htmx:before:swap",{ctx:e,tasks:i})){for(let e of l)e.swapSpec?.swap?setTimeout(()=>this.#Me(e),this.parseInterval(e.swapSpec.swap)):this.#Me(e);if(o.length>0){let e=()=>{for(let e of o)this.#Me(e)};await this.#Ie(e)}this.#O(document,"htmx:after:swap",{ctx:e}),e.title&&!a?.swapSpec?.ignoreTitle&&(document.title=e.title),await this.timeout(1);for(let e of i)for(let t of e.restoreTasks||[])t();this.#O(document,"htmx:after:restore",{ctx:e}),this.#qe(e)}}#Te(e,t,r){let i=this.#ye(e.swap||this.config.defaultSwap);if("delete"===i.style||/\S/.test(t.innerHTML||"")||!r.length){if(e.select){let r=t.querySelectorAll(e.select);(t=document.createDocumentFragment()).append(...r)}return this.#M(e.sourceElement)&&(i.show||="top"),{type:"main",fragment:t,target:this.#B(e.sourceElement||document.body,i.target||e.target),swapSpec:i,sourceElement:e.sourceElement,transition:!1!==e.transition&&!1!==i.transition}}}#Me(e){let{target:t,swapSpec:r,fragment:i}=e;if("string"==typeof t&&(t=document.querySelector(t)),!t)return;r.strip&&i.firstElementChild&&(e.unstripped=i,i=document.createDocumentFragment(),i.append(...(e.fragment.firstElementChild.content||e.fragment.firstElementChild).childNodes));let s=this.#pe(i),n=t.parentNode,a=[...i.childNodes];if("innerHTML"===r.style){this.#Ne(e,t);for(const e of t.children)this.#de(e);t.replaceChildren(...i.childNodes)}else if("outerHTML"===r.style)n&&(this.#Ne(e,n),this.#Se(n,t,i),this.#de(t),n.removeChild(t));else if("innerMorph"===r.style)this.#He(t,i,!0);else if("outerMorph"===r.style)this.#He(t,i,!1);else if("beforebegin"===r.style)n&&this.#Se(n,t,i);else if("afterbegin"===r.style)this.#Se(t,t.firstChild,i);else if("beforeend"===r.style)this.#Se(t,null,i);else{if("afterend"!==r.style){if("delete"===r.style)return void(n&&(this.#de(t),n.removeChild(t)));if("none"===r.style)return;if(e.target=t,e.fragment=i,!this.#T(t,"htmx:handle:swap",e))return;throw new Error(`Unknown swap style: ${r.style}`)}n&&this.#Se(n,t.nextSibling,i)}this.#fe(s);for(const e of a)this.process(e),this.#Ee(e);this.#Ce(e)}#O(e,t,r={},i=!0){return this.config.logAll&&console.log(t,r,e),e=this.#Oe(e),this.#T(e,t,r),this.trigger(e,t,r,i)}#T(e,t,r={}){let i=this.#r.get(t.replace(/:/g,"_"));if(i){r.cancelled=!1;for(const t of i)if(!1===t(e,r)||r.cancelled)return r.cancelled=!0,!1}return!0}timeout(e){if((e=this.parseInterval(e))>0)return new Promise(t=>setTimeout(t,e))}forEvent(e,t,r=document){return new Promise((i,s)=>{let n=e=>{clearTimeout(a),i(e)},a=t&&setTimeout(()=>{r.removeEventListener(e,n),i(null)},t);r.addEventListener(e,n,{once:!0})})}onLoad(e){this.on("htmx:after:process",t=>{e(t.target)})}takeClass(e,t,r=e.parentElement){for(let e of this.findAll(this.#Oe(r),"."+t))e.classList.remove(t);e.classList.add(t)}on(e,t,r){let i,s=document;return void 0===r?(i=e,r=t):(s=this.#Oe(e),i=t),s.addEventListener(i,r),r}find(e,t){return this.#ie(e,t)}findAll(e,t){return this.#ae(e,t)}parseInterval(e){if("number"==typeof e)return e;let[,t,r]=e?.match(/^([\d.]+)(ms|s|m)?$/)||[],i=parseFloat(t)*({ms:1,s:1e3,m:6e4}[r]||1);return isNaN(i)?void 0:i}trigger(e,t,r={},i=!0){e=this.#Oe(e);let s=new CustomEvent(t,{detail:r,cancelable:!0,bubbles:i,composed:!0,originalTarget:e}),n=e.isConnected?e:document;return!r.cancelled&&n.dispatchEvent(s)}ajax(e,t,r){(!r||r instanceof Element||"string"==typeof r)&&(r={target:r});let i="string"==typeof r.source?document.querySelector(r.source):r.source;if("string"==typeof r.source&&!i)return Promise.reject(new Error("Source not found"));let s=this.#B(document.body,r.target||i);if(!s)return Promise.reject(new Error("Target not found"));i||=s;let n=this.#b(i,r.event||{});return Object.assign(n,r,{target:s}),Object.assign(n.request,{action:t,method:e.toUpperCase()}),r.headers&&Object.assign(n.request.headers,r.headers),this.#V(n)}#S(){this.config.history&&(history.state||history.replaceState({htmx:!0},"",location.pathname+location.search),window.addEventListener("popstate",e=>{e.state&&e.state.htmx&&this.#Le()}))}#ke(e){this.config.history&&(history.pushState({htmx:!0},"",e),this.#O(document,"htmx:after:push:into:history",{path:e}))}#Re(e){this.config.history&&(history.replaceState({htmx:!0},"",e),this.#O(document,"htmx:after:replace:into:history",{path:e}))}#Le(e){if(e=e||location.pathname+location.search,this.#O(document,"htmx:before:restore:history",{path:e,cacheMiss:!0}))this.config.historyReload?location.reload():this.ajax("GET",e,{target:"body",request:{headers:{"HX-History-Restore-Request":"true"}}});else if("FORM"===elt.tagName)return"dialog"!==elt.method&&this.#ue(elt.action)}#Ae(e){let{sourceElement:t,push:r,replace:i,hx:s,response:n}=e;(s?.push||s?.pushurl||s?.replaceurl)&&(r=s.push||s.pushurl,i=s.replaceurl),r||i||!this.#M(t)||(r="true");let a=r||i;if(!a||"false"===a||!1===a)return;"true"===a&&(a=e.request.action+(e.request.anchor?"#"+e.request.anchor:""));let o=r?"push":"replace",l={history:{type:o,path:a},sourceElement:t,response:n};this.#O(document,"htmx:before:history:update",l)&&("push"===o?this.#ke(a):this.#Re(a),this.#O(document,"htmx:after:history:update",l))}#he(e){for(let r of e.getAttributeNames()){var t=this.#A(this.#f("hx-on:"));if(r.startsWith(t)){let i=r.substring(t.length),s=e.getAttribute(r);e.addEventListener(i,async t=>{try{await this.#P(e,{event:t},s,!1)}catch(e){console.log(e)}})}}}#Q(e,t){let r=[];if(t){r=[e,...this.#C(e,t)];for(const e of r)e._htmxReqCount||=0,e._htmxReqCount++,e.classList.add(this.config.requestClass)}return r}#Z(e){for(let t of e)t._htmxReqCount&&(t._htmxReqCount--,t._htmxReqCount<=0&&(t.classList.remove(this.config.requestClass),delete t._htmxReqCount))}#J(e,t){let r=[];if(t){r=this.#C(e,t);for(let e of r)e._htmxDisableCount||=0,e._htmxDisableCount++,e.disabled=!0}return r}#ee(e){for(const t of e)t._htmxDisableCount&&(t._htmxDisableCount--,t._htmxDisableCount<=0&&(t.disabled=!1,delete t._htmxDisableCount))}#y(e,t,r){let i=t?new FormData(t):new FormData,s=t?new Set(t.elements):new Set;!t&&e.name&&(i.append(e.name,e.value),s.add(e)),r&&r.name&&(i.append(r.name,r.value),s.add(r));let n=this.#m(e,"hx-include");if(n){let t=this.#ae(e,n);for(let e of t)this.#Ve(e,s,i)}return i}#Ve(e,t,r){let i=this.#C(e,"input:not([disabled]), select:not([disabled]), textarea:not([disabled])");for(let e of i){if(!e.name||t.has(e))continue;t.add(e);let i=e.type;if("checkbox"===i||"radio"===i)e.checked&&r.append(e.name,e.value);else if("file"===i)for(let t of e.files)r.append(e.name,t);else if("select-multiple"===i)for(let t of e.selectedOptions)r.append(e.name,t.value);else e.matches("select, textarea, input")&&r.append(e.name,e.value)}}#v(e,t){let r=this.#m(e,"hx-vals");if(r){let i=this.#$(r);if(i)return this.#P(e,{},i,!0).then(e=>{for(let r in e)t.append(r,e[r])});{let e=this.#w(r);for(let r in e)t.append(r,e[r])}}}#Be(e){let t=e.trim();return t.startsWith("<")&&t.endsWith("/>")?t.slice(1,-2):t}#ae(e,t,r){let i=t??e,s=t?this.#Oe(e):document;if(i.startsWith("global "))return this.#ae(s,i.slice(7),!0);let n=i?i.replace(/<[^>]+\/>/g,e=>e.replace(/,/g,"%2C")).split(",").map(e=>e.replace(/%2C/g,",")):[],a=[],o=[];for(const e of n){let t,i=this.#Be(e);i.startsWith("closest ")?t=s.closest(i.slice(8)):i.startsWith("find ")?t=document.querySelector(s,i.slice(5)):"next"===i||"nextElementSibling"===i?t=s.nextElementSibling:i.startsWith("next ")?t=this.#_e(s,i.slice(5),!!r):"previous"===i||"previousElementSibling"===i?t=s.previousElementSibling:i.startsWith("previous ")?t=this.#je(s,i.slice(9),!!r):"document"===i?t=document:"window"===i?t=window:"body"===i?t=document.body:"root"===i?t=this.#De(s,!!r):"host"===i?t=s.getRootNode().host:o.push(i),t&&a.push(t)}if(o.length>0){let e=o.join(","),t=this.#De(s,!!r);a.push(...t.querySelectorAll(e))}return a}#_e(e,t,r){return this.#$e(this.#De(e,r).querySelectorAll(t),e,Node.DOCUMENT_POSITION_PRECEDING)}#je(e,t,r){let i=[...this.#De(e,r).querySelectorAll(t)].reverse();return this.#$e(i,e,Node.DOCUMENT_POSITION_FOLLOWING)}#$e(e,t,r){for(const i of e)if(i.compareDocumentPosition(t)===r)return i}#De(e,t){return e.isConnected&&e.getRootNode?e.getRootNode?.({composed:t}):document}#ie(e,t){return this.#ae(e,t)[0]}#$(e){if(null!=e){if(e.startsWith("js:"))return e.substring(3);if(e.startsWith("javascript:"))return e.substring(11)}}#R(e){e.addEventListener("htmx:abort",()=>{this.#U(e).abort()})}#He(e,t,r){let{persistentIds:i,idMap:s}=this.#Pe(e,t),n=document.createElement("div");n.hidden=!0,document.body.after(n);let a={target:e,idMap:s,persistentIds:i,pantry:n};r?this.#Fe(a,e,t):this.#Fe(a,e.parentNode,t,e,e.nextSibling),this.#de(n),n.remove()}#Fe(e,t,r,i=null,s=null){t instanceof HTMLTemplateElement&&r instanceof HTMLTemplateElement&&(t=t.content,r=r.content),i||=t.firstChild;for(const n of r.childNodes){if(i&&i!=s){let t=this.#ze(e,n,i,s);if(t){if(t!==i){let r=i;for(;r&&r!==t;){let t=r;r=r.nextSibling,this.#Ue(e,t)}}this.#We(t,n,e),i=t.nextSibling;continue}}if(n instanceof Element&&e.persistentIds.has(n.id)){let r=e.target.id===n.id&&e.target||e.target.querySelector(`[id="${n.id}"]`)||e.pantry.querySelector(`[id="${n.id}"]`),s=r.id,a=r;for(;a=a.parentNode;){let t=e.idMap.get(a);t&&(t.delete(s),t.size||e.idMap.delete(a))}this.#Qe(t,r,i),this.#We(r,n,e),i=r.nextSibling;continue}let r;e.idMap.has(n)?(r=document.createElement(n.tagName),t.insertBefore(r,i),this.#We(r,n,e)):(r=document.importNode(n,!0),t.insertBefore(r,i)),i=r.nextSibling}for(;i&&i!=s;){let t=i;i=i.nextSibling,this.#Ue(e,t)}}#ze(e,t,r,i){let s=null,n=t.nextSibling,a=0,o=0,l=e.idMap.get(t),h=l?.size||0,c=r;for(;c&&c!=i;){let r=e.idMap.get(c);if(this.#Je(c,t)){if(r&&l&&[...r].some(e=>l.has(e)))return c;if(null===s&&!r){if(!h)return c;s=c}}if(o+=r?.size||0,o>h)break;if(null===s&&n&&this.#Je(c,n)&&(a++,n=n.nextSibling,a>=2&&(s=void 0)),c.contains(document.activeElement))break;c=c.nextSibling}return s||null}#Je(e,t){return e.nodeType===t.nodeType&&e.tagName===t.tagName&&(!e.id||e.id===t.id)}#Ue(e,t){e.idMap.has(t)?this.#Qe(e.pantry,t,null):(this.#de(t),t.remove())}#Qe(e,t,r){if(e.moveBefore)try{return void e.moveBefore(t,r)}catch(e){}e.insertBefore(t,r)}#We(e,t,r){let i=t.nodeType;if(1===i){let r=this.config.morphIgnore||[];this.#Ge(e,t,r),e instanceof HTMLTextAreaElement&&e.defaultValue!=t.defaultValue&&(e.value=t.value)}8!==i&&3!==i||e.nodeValue===t.nodeValue||(e.nodeValue=t.nodeValue),e.isEqualNode(t)||this.#Fe(r,e,t)}#Ge(e,t,r=[]){for(const i of t.attributes)r.includes(i.name)||e.getAttribute(i.name)===i.value||(e.setAttribute(i.name,i.value),"value"===i.name&&e instanceof HTMLInputElement&&"file"!==e.type&&(e.value=i.value));for(let i=e.attributes.length-1;i>=0;i--){let s=e.attributes[i];!s||t.hasAttribute(s.name)||r.includes(s.name)||e.removeAttribute(s.name)}}#Xe(e,t,r,i){for(const s of i)if(t.has(s.id)){let t=s;for(;t&&t!==r;){let r=e.get(t);null==r&&(r=new Set,e.set(t,r)),r.add(s.id),t=t.parentElement}}}#Pe(e,t){let r=this.#C(e,"[id]"),i=t.querySelectorAll("[id]"),s=this.#Ke(r,i),n=new Map;return this.#Xe(n,s,e.parentElement,r),this.#Xe(n,s,t,i),{persistentIds:s,idMap:n}}#Ke(e,t){let r=new Set,i=new Map;for(const{id:t,tagName:s}of e)i.has(t)?r.add(t):i.set(t,s);let s=new Set;for(const{id:e,tagName:n}of t)s.has(e)?r.add(e):i.get(e)===n&&s.add(e);for(const e of r)s.delete(e);return s}#Y(e){let t=e.response.raw.status,r=this.config.noSwap.map(e=>e+""),i=t+"";for(let t of[i,i.slice(0,2)+"x",i[0]+"xx"]){if(r.includes(t))return void(e.swap="none");let i=this.#m(e.sourceElement,"hx-status:"+t);if(i)return void Object.assign(e,this.#w(i))}}#Ie(e){return new Promise(t=>{this.#c||=[],this.#c.push({task:e,resolve:t}),this.#u||this.#Ye()})}async#Ye(){if(0===this.#c.length||this.#u)return;this.#u=!0;let{task:e,resolve:t}=this.#c.shift();try{document.startViewTransition?(this.#O(document,"htmx:before:viewTransition",{task:e}),await document.startViewTransition(e).finished,this.#O(document,"htmx:after:viewTransition",{task:e})):e()}catch(e){}finally{this.#u=!1,t(),this.#Ye()}}#Ne(e,t){let r=t.querySelectorAll("[id]"),i=Object.fromEntries([...r].map(e=>[e.id,e])),s=e.fragment.querySelectorAll("[id]");e.restoreTasks=[];for(let t of s){let r=i[t.id];if(r?.tagName===t.tagName){let i=t.cloneNode(!1);this.#Ge(t,r,this.config.morphIgnore),e.restoreTasks.push(()=>{this.#Ge(t,i,this.config.morphIgnore)})}}}#Oe(e){return"string"==typeof e?this.find(e):e}#A(e){return this.config.metaCharacter?e.replace(/:/g,this.config.metaCharacter):e}}})();"undefined"!=typeof window&&(window.htmx=htmx);export default htmx;
|