@livetemplate/client 0.8.19 → 0.8.21

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.
@@ -0,0 +1,12 @@
1
+ /**
2
+ * Polyfill for the HTML Invoker Commands API (command/commandfor).
3
+ * Enables <button command="show-modal" commandfor="dialog-id"> to work
4
+ * cross-browser by calling .showModal()/.close() on the target <dialog>.
5
+ *
6
+ * No-op when native support is detected.
7
+ * Spec: https://developer.mozilla.org/en-US/docs/Web/HTML/Reference/Attributes/command
8
+ */
9
+ export declare function setupInvokerPolyfill(): void;
10
+ /** @internal Reset polyfill state. Test-only — do not call from production code. */
11
+ export declare function teardownInvokerPolyfill(): void;
12
+ //# sourceMappingURL=invoker-polyfill.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"invoker-polyfill.d.ts","sourceRoot":"","sources":["../../dom/invoker-polyfill.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAyBH,wBAAgB,oBAAoB,IAAI,IAAI,CAM3C;AAED,oFAAoF;AACpF,wBAAgB,uBAAuB,IAAI,IAAI,CAK9C"}
@@ -0,0 +1,50 @@
1
+ "use strict";
2
+ /**
3
+ * Polyfill for the HTML Invoker Commands API (command/commandfor).
4
+ * Enables <button command="show-modal" commandfor="dialog-id"> to work
5
+ * cross-browser by calling .showModal()/.close() on the target <dialog>.
6
+ *
7
+ * No-op when native support is detected.
8
+ * Spec: https://developer.mozilla.org/en-US/docs/Web/HTML/Reference/Attributes/command
9
+ */
10
+ Object.defineProperty(exports, "__esModule", { value: true });
11
+ exports.setupInvokerPolyfill = setupInvokerPolyfill;
12
+ exports.teardownInvokerPolyfill = teardownInvokerPolyfill;
13
+ let installed = false;
14
+ function handleClick(e) {
15
+ const el = e.target;
16
+ if (!el || !(el instanceof Element))
17
+ return;
18
+ const button = el.closest("button[commandfor]");
19
+ if (!button || button.disabled)
20
+ return;
21
+ const targetId = button.getAttribute("commandfor");
22
+ if (!targetId)
23
+ return;
24
+ const command = button.getAttribute("command");
25
+ const target = document.getElementById(targetId);
26
+ if (!target || !(target instanceof HTMLDialogElement))
27
+ return;
28
+ if (command === "show-modal" && !target.open) {
29
+ target.showModal();
30
+ }
31
+ else if (command === "close" && target.open) {
32
+ target.close();
33
+ }
34
+ }
35
+ function setupInvokerPolyfill() {
36
+ if ("commandForElement" in HTMLButtonElement.prototype)
37
+ return;
38
+ if (installed)
39
+ return;
40
+ installed = true;
41
+ document.addEventListener("click", handleClick);
42
+ }
43
+ /** @internal Reset polyfill state. Test-only — do not call from production code. */
44
+ function teardownInvokerPolyfill() {
45
+ if (installed) {
46
+ document.removeEventListener("click", handleClick);
47
+ installed = false;
48
+ }
49
+ }
50
+ //# sourceMappingURL=invoker-polyfill.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"invoker-polyfill.js","sourceRoot":"","sources":["../../dom/invoker-polyfill.ts"],"names":[],"mappings":";AAAA;;;;;;;GAOG;;AAyBH,oDAMC;AAGD,0DAKC;AArCD,IAAI,SAAS,GAAG,KAAK,CAAC;AAEtB,SAAS,WAAW,CAAC,CAAQ;IAC3B,MAAM,EAAE,GAAG,CAAC,CAAC,MAAM,CAAC;IACpB,IAAI,CAAC,EAAE,IAAI,CAAC,CAAC,EAAE,YAAY,OAAO,CAAC;QAAE,OAAO;IAE5C,MAAM,MAAM,GAAG,EAAE,CAAC,OAAO,CAAC,oBAAoB,CAA6B,CAAC;IAC5E,IAAI,CAAC,MAAM,IAAI,MAAM,CAAC,QAAQ;QAAE,OAAO;IAEvC,MAAM,QAAQ,GAAG,MAAM,CAAC,YAAY,CAAC,YAAY,CAAC,CAAC;IACnD,IAAI,CAAC,QAAQ;QAAE,OAAO;IAEtB,MAAM,OAAO,GAAG,MAAM,CAAC,YAAY,CAAC,SAAS,CAAC,CAAC;IAC/C,MAAM,MAAM,GAAG,QAAQ,CAAC,cAAc,CAAC,QAAQ,CAAC,CAAC;IACjD,IAAI,CAAC,MAAM,IAAI,CAAC,CAAC,MAAM,YAAY,iBAAiB,CAAC;QAAE,OAAO;IAE9D,IAAI,OAAO,KAAK,YAAY,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC;QAC7C,MAAM,CAAC,SAAS,EAAE,CAAC;IACrB,CAAC;SAAM,IAAI,OAAO,KAAK,OAAO,IAAI,MAAM,CAAC,IAAI,EAAE,CAAC;QAC9C,MAAM,CAAC,KAAK,EAAE,CAAC;IACjB,CAAC;AACH,CAAC;AAED,SAAgB,oBAAoB;IAClC,IAAI,mBAAmB,IAAI,iBAAiB,CAAC,SAAS;QAAE,OAAO;IAC/D,IAAI,SAAS;QAAE,OAAO;IAEtB,SAAS,GAAG,IAAI,CAAC;IACjB,QAAQ,CAAC,gBAAgB,CAAC,OAAO,EAAE,WAAW,CAAC,CAAC;AAClD,CAAC;AAED,oFAAoF;AACpF,SAAgB,uBAAuB;IACrC,IAAI,SAAS,EAAE,CAAC;QACd,QAAQ,CAAC,mBAAmB,CAAC,OAAO,EAAE,WAAW,CAAC,CAAC;QACnD,SAAS,GAAG,KAAK,CAAC;IACpB,CAAC;AACH,CAAC"}
@@ -1,4 +1,4 @@
1
- "use strict";var LiveTemplateClient=(()=>{var ve=Object.defineProperty;var tt=Object.getOwnPropertyDescriptor;var nt=Object.getOwnPropertyNames;var rt=Object.prototype.hasOwnProperty;var st=(o,e)=>{for(var t in e)ve(o,t,{get:e[t],enumerable:!0})},it=(o,e,t,n)=>{if(e&&typeof e=="object"||typeof e=="function")for(let r of nt(e))!rt.call(o,r)&&r!==t&&ve(o,r,{get:()=>e[r],enumerable:!(n=tt(e,r))||n.enumerable});return o};var ot=o=>it(ve({},"__esModule",{value:!0}),o);var Dt={};st(Dt,{LiveTemplateClient:()=>he,compareHTML:()=>et,loadAndApplyUpdate:()=>Ze,setupReactiveAttributeListeners:()=>re});var Ce=11;function at(o,e){var t=e.attributes,n,r,s,a,i;if(!(e.nodeType===Ce||o.nodeType===Ce)){for(var l=t.length-1;l>=0;l--)n=t[l],r=n.name,s=n.namespaceURI,a=n.value,s?(r=n.localName||r,i=o.getAttributeNS(s,r),i!==a&&(n.prefix==="xmlns"&&(r=n.name),o.setAttributeNS(s,r,a))):(i=o.getAttribute(r),i!==a&&o.setAttribute(r,a));for(var c=o.attributes,d=c.length-1;d>=0;d--)n=c[d],r=n.name,s=n.namespaceURI,s?(r=n.localName||r,e.hasAttributeNS(s,r)||o.removeAttributeNS(s,r)):e.hasAttribute(r)||o.removeAttribute(r)}}var Y,lt="http://www.w3.org/1999/xhtml",R=typeof document=="undefined"?void 0:document,ct=!!R&&"content"in R.createElement("template"),dt=!!R&&R.createRange&&"createContextualFragment"in R.createRange();function ut(o){var e=R.createElement("template");return e.innerHTML=o,e.content.childNodes[0]}function pt(o){Y||(Y=R.createRange(),Y.selectNode(R.body));var e=Y.createContextualFragment(o);return e.childNodes[0]}function gt(o){var e=R.createElement("body");return e.innerHTML=o,e.childNodes[0]}function ft(o){return o=o.trim(),ct?ut(o):dt?pt(o):gt(o)}function J(o,e){var t=o.nodeName,n=e.nodeName,r,s;return t===n?!0:(r=t.charCodeAt(0),s=n.charCodeAt(0),r<=90&&s>=97?t===n.toUpperCase():s<=90&&r>=97?n===t.toUpperCase():!1)}function ht(o,e){return!e||e===lt?R.createElement(o):R.createElementNS(e,o)}function mt(o,e){for(var t=o.firstChild;t;){var n=t.nextSibling;e.appendChild(t),t=n}return e}function ye(o,e,t){o[t]!==e[t]&&(o[t]=e[t],o[t]?o.setAttribute(t,""):o.removeAttribute(t))}var Fe={OPTION:function(o,e){var t=o.parentNode;if(t){var n=t.nodeName.toUpperCase();n==="OPTGROUP"&&(t=t.parentNode,n=t&&t.nodeName.toUpperCase()),n==="SELECT"&&!t.hasAttribute("multiple")&&(o.hasAttribute("selected")&&!e.selected&&(o.setAttribute("selected","selected"),o.removeAttribute("selected")),t.selectedIndex=-1)}ye(o,e,"selected")},INPUT:function(o,e){ye(o,e,"checked"),ye(o,e,"disabled"),o.value!==e.value&&(o.value=e.value),e.hasAttribute("value")||o.removeAttribute("value")},TEXTAREA:function(o,e){var t=e.value;o.value!==t&&(o.value=t);var n=o.firstChild;if(n){var r=n.nodeValue;if(r==t||!t&&r==o.placeholder)return;n.nodeValue=t}},SELECT:function(o,e){if(!e.hasAttribute("multiple")){for(var t=-1,n=0,r=o.firstChild,s,a;r;)if(a=r.nodeName&&r.nodeName.toUpperCase(),a==="OPTGROUP")s=r,r=s.firstChild,r||(r=s.nextSibling,s=null);else{if(a==="OPTION"){if(r.hasAttribute("selected")){t=n;break}n++}r=r.nextSibling,!r&&s&&(r=s.nextSibling,s=null)}o.selectedIndex=t}}},K=1,_e=11,He=3,Re=8;function W(){}function vt(o){if(o)return o.getAttribute&&o.getAttribute("id")||o.id}function yt(o){return function(t,n,r){if(r||(r={}),typeof n=="string")if(t.nodeName==="#document"||t.nodeName==="HTML"||t.nodeName==="BODY"){var s=n;n=R.createElement("html"),n.innerHTML=s}else n=ft(n);else n.nodeType===_e&&(n=n.firstElementChild);var a=r.getNodeKey||vt,i=r.onBeforeNodeAdded||W,l=r.onNodeAdded||W,c=r.onBeforeElUpdated||W,d=r.onElUpdated||W,p=r.onBeforeNodeDiscarded||W,u=r.onNodeDiscarded||W,f=r.onBeforeElChildrenUpdated||W,v=r.skipFromChildren||W,C=r.addChild||function(h,m){return h.appendChild(m)},E=r.childrenOnly===!0,y=Object.create(null),F=[];function g(h){F.push(h)}function k(h,m){if(h.nodeType===K)for(var L=h.firstChild;L;){var b=void 0;m&&(b=a(L))?g(b):(u(L),L.firstChild&&k(L,m)),L=L.nextSibling}}function M(h,m,L){p(h)!==!1&&(m&&m.removeChild(h),u(h),k(h,L))}function N(h){if(h.nodeType===K||h.nodeType===_e)for(var m=h.firstChild;m;){var L=a(m);L&&(y[L]=m),N(m),m=m.nextSibling}}N(t);function q(h){l(h);for(var m=h.firstChild;m;){var L=m.nextSibling,b=a(m);if(b){var T=y[b];T&&J(m,T)?(m.parentNode.replaceChild(T,m),A(T,m)):q(m)}else q(m);m=L}}function S(h,m,L){for(;m;){var b=m.nextSibling;(L=a(m))?g(L):M(m,h,!0),m=b}}function A(h,m,L){var b=a(m);if(b&&delete y[b],!L){var T=c(h,m);if(T===!1||(T instanceof HTMLElement&&(h=T,N(h)),o(h,m),d(h),f(h,m)===!1))return}h.nodeName!=="TEXTAREA"?x(h,m):Fe.TEXTAREA(h,m)}function x(h,m){var L=v(h,m),b=m.firstChild,T=h.firstChild,B,O,P,G,U;e:for(;b;){for(G=b.nextSibling,B=a(b);!L&&T;){if(P=T.nextSibling,b.isSameNode&&b.isSameNode(T)){b=G,T=P;continue e}O=a(T);var X=T.nodeType,$=void 0;if(X===b.nodeType&&(X===K?(B?B!==O&&((U=y[B])?P===U?$=!1:(h.insertBefore(U,T),O?g(O):M(T,h,!0),T=U,O=a(T)):$=!1):O&&($=!1),$=$!==!1&&J(T,b),$&&A(T,b)):(X===He||X==Re)&&($=!0,T.nodeValue!==b.nodeValue&&(T.nodeValue=b.nodeValue))),$){b=G,T=P;continue e}O?g(O):M(T,h,!0),T=P}if(B&&(U=y[B])&&J(U,b))L||C(h,U),A(U,b);else{var me=i(b);me!==!1&&(me&&(b=me),b.actualize&&(b=b.actualize(h.ownerDocument||R)),C(h,b),q(b))}b=G,T=P}S(h,T,O);var ke=Fe[h.nodeName];ke&&ke(h,m)}var w=t,_=w.nodeType,D=n.nodeType;if(!E){if(_===K)D===K?J(t,n)||(u(t),w=mt(t,ht(n.nodeName,n.namespaceURI))):w=n;else if(_===He||_===Re){if(D===_)return w.nodeValue!==n.nodeValue&&(w.nodeValue=n.nodeValue),w;w=n}}if(w===n)u(t);else{if(n.isSameNode&&n.isSameNode(w))return;if(A(w,n,E),F)for(var H=0,z=F.length;H<z;H++){var I=y[F[H]];I&&M(I,I.parentNode,!1)}}return!E&&w!==t&&t.parentNode&&(w.actualize&&(w=w.actualize(t.ownerDocument||R)),t.parentNode.replaceChild(w,t)),w}}var bt=yt(at),Ie=bt;var be=["text","textarea","number","email","password","search","tel","url","date","time","datetime-local","color","range"];var Q=class{constructor(e){this.logger=e;this.wrapperElement=null;this.focusableElements=[];this.lastFocusedElement=null;this.lastFocusedSelectionStart=null;this.lastFocusedSelectionEnd=null}attach(e){this.wrapperElement=e,e&&(this.updateFocusableElements(),this.setupFocusTracking())}reset(){this.wrapperElement=null,this.focusableElements=[],this.lastFocusedElement=null,this.lastFocusedSelectionStart=null,this.lastFocusedSelectionEnd=null}updateFocusableElements(){if(!this.wrapperElement)return;let n=`${be.map(r=>r==="textarea"?"textarea:not([disabled])":`input[type="${r}"]:not([disabled])`).join(", ")}, select:not([disabled]), button:not([disabled]), [contenteditable="true"], [tabindex]:not([tabindex="-1"])`;this.focusableElements=Array.from(this.wrapperElement.querySelectorAll(n))}setupFocusTracking(){if(!this.wrapperElement)return;let e=this.wrapperElement.getAttribute("data-lvt-id"),t=`__lvt_focus_tracker_${e}`,n=`__lvt_blur_tracker_${e}`,r=a=>{var l;let i=a.target;!i||!((l=this.wrapperElement)!=null&&l.contains(i))||(this.isTextualInput(i)||i instanceof HTMLSelectElement)&&(this.lastFocusedElement=i,this.logger.debug("[Focus] Tracked focus on:",i.tagName,i.id||i.getAttribute("name")),this.isTextualInput(i)&&(this.lastFocusedSelectionStart=i.selectionStart,this.lastFocusedSelectionEnd=i.selectionEnd))},s=a=>{var l;let i=a.target;!i||!((l=this.wrapperElement)!=null&&l.contains(i))||this.isTextualInput(i)&&i===this.lastFocusedElement&&(this.lastFocusedSelectionStart=i.selectionStart,this.lastFocusedSelectionEnd=i.selectionEnd,this.logger.debug("[Focus] Saved cursor on blur:",this.lastFocusedSelectionStart,"-",this.lastFocusedSelectionEnd))};document[t]&&document.removeEventListener("focus",document[t],!0),document[n]&&document.removeEventListener("blur",document[n],!0),document[t]=r,document[n]=s,document.addEventListener("focus",r,!0),document.addEventListener("blur",s,!0),this.logger.debug("[Focus] Focus tracking set up")}restoreFocusedElement(){var a,i,l;if(this.logger.debug("[Focus] restoreFocusedElement - lastFocusedElement:",(a=this.lastFocusedElement)==null?void 0:a.tagName,((i=this.lastFocusedElement)==null?void 0:i.id)||((l=this.lastFocusedElement)==null?void 0:l.getAttribute("name"))),!this.lastFocusedElement||!this.wrapperElement){this.logger.debug("[Focus] No element to restore");return}let e=this.getElementSelector(this.lastFocusedElement);if(this.logger.debug("[Focus] Selector for last focused:",e),!e){this.logger.debug("[Focus] Could not generate selector");return}let t=null;if(e.startsWith("data-focus-index-")){this.updateFocusableElements();let c=parseInt(e.replace("data-focus-index-",""),10);t=this.focusableElements[c]||null,this.logger.debug("[Focus] Found by index:",c,t==null?void 0:t.tagName)}else t=this.wrapperElement.querySelector(e),this.logger.debug("[Focus] Found by selector:",e,t==null?void 0:t.tagName);if(!t){this.logger.debug("[Focus] Element not found in updated DOM");return}let n=t.matches(":focus");if(this.logger.debug("[Focus] Already focused:",n),n){this.logger.debug("[Focus] Element retained focus \u2014 skipping restoration");return}let r=this.lastFocusedSelectionStart,s=this.lastFocusedSelectionEnd;t.focus(),this.logger.debug("[Focus] Restored focus"),this.isTextualInput(t)&&r!==null&&s!==null&&(t.setSelectionRange(r,s),this.logger.debug("[Focus] Restored cursor:",r,"-",s))}isTextualInput(e){return e instanceof HTMLTextAreaElement?!0:e instanceof HTMLInputElement?be.indexOf(e.type)>=0:!1}shouldSkipUpdate(e){return e!==document.activeElement||e.hasAttribute("data-lvt-force-update")?!1:!!(this.isTextualInput(e)||e instanceof HTMLSelectElement)}getLastFocusedElement(){return this.lastFocusedElement}getElementSelector(e){if(e.id)return`#${e.id}`;if(e.name)return`[name="${e.name}"]`;if(e.getAttribute("data-key"))return`[data-key="${e.getAttribute("data-key")}"]`;let t=this.focusableElements.indexOf(e);return t>=0?`data-focus-index-${t}`:null}};var Ne=["pending","success","error","done"],Ee=new Set(Ne),Z=new Set(["click-away"]),we={reset:"reset",addclass:"addClass",removeclass:"removeClass",toggleclass:"toggleClass",setattr:"setAttr",toggleattr:"toggleAttr"};function Et(o,e){let n=o.toLowerCase().match(/^lvt-el:(\w+):on:(.+)$/);if(n){let r=n[1],s=we[r];if(!s)return null;let a=n[2];if(Z.has(a)||!Ee.has(a)&&!a.includes(":"))return null;let i=a.split(":"),l=i[i.length-1];if(!Ee.has(l))return null;let c=l,d=i.length>1?i.slice(0,-1).join(":"):void 0;return{action:s,lifecycle:c,actionName:d||void 0,param:e||void 0}}return null}function ee(o){let e=o.getAttribute("data-lvt-target");return e?e.startsWith("#")?document.getElementById(e.slice(1))||o:e.startsWith("closest:")&&o.closest(e.slice(8))||o:o}function te(o,e,t){switch(e){case"reset":o instanceof HTMLFormElement&&o.reset();break;case"addClass":if(t){let n=t.split(/\s+/).filter(Boolean);o.classList.add(...n)}break;case"removeClass":if(t){let n=t.split(/\s+/).filter(Boolean);o.classList.remove(...n)}break;case"toggleClass":t&&t.split(/\s+/).filter(Boolean).forEach(r=>o.classList.toggle(r));break;case"setAttr":if(t){let n=t.indexOf(":");if(n>0){let r=t.substring(0,n),s=t.substring(n+1);o.setAttribute(r,s)}}break;case"toggleAttr":t&&o.toggleAttribute(t);break}}function wt(o,e,t){return o.lifecycle!==e?!1:o.actionName?o.actionName===t:!0}function At(o,e){let t=Object.keys(we),n=[],r=e?e.replace(/([^\w-])/g,"\\$1"):void 0;for(let i of t)n.push(`[lvt-el\\:${i}\\:on\\:${o}]`),r&&n.push(`[lvt-el\\:${i}\\:on\\:${r}\\:${o}]`);let s=n.join(", "),a;try{a=document.querySelectorAll(s)}catch(i){let l=t.map(c=>`[lvt-el\\:${c}\\:on\\:${o}]`);try{a=document.querySelectorAll(l.join(", "))}catch(c){return}}a.forEach(i=>{Array.from(i.attributes).forEach(l=>{if(!l.name.startsWith("lvt-el:")||!l.name.includes(":on:"))return;let c=Et(l.name,l.value);c&&wt(c,o,e)&&te(ee(i),c.action,c.param)})})}function ne(o,e){for(let t of o.attributes){let n=t.name.match(/^lvt-el:(\w+):on:([a-z-]+)$/i);if(!n||n[2].toLowerCase()!==e)continue;let r=n[1].toLowerCase(),s=we[r];s&&te(ee(o),s,t.value)}}function De(o){return!Ee.has(o)&&!Z.has(o)}function re(){Ne.forEach(o=>{document.addEventListener(`lvt:${o}`,e=>{var r;let n=(r=e.detail)==null?void 0:r.action;At(o,n)},!0)})}var Ue=new Set(["pending","success","error","done"]);function $e(o){let e=o.match(/^lvt-fx:\w+:on:(.+)$/i);if(!e)return{trigger:null};let t=e[1].split(":");return t.length===1?{trigger:t[0].toLowerCase()}:{trigger:t[t.length-1].toLowerCase(),actionName:t.slice(0,-1).join(":")}}function We(o,e){let t=e||o,n="__lvtFxDirectListeners",r=(t[n]||[]).filter(a=>a.el.isConnected),s=a=>{var i;for(let l of a.attributes){if(!l.name.startsWith("lvt-fx:"))continue;let c=$e(l.name);if(!c.trigger||Ue.has(c.trigger)||Z.has(c.trigger))continue;let d=`__lvt_fx_${l.name}`;if(a[d])continue;let p=(i=l.name.match(/^lvt-fx:(\w+)/i))==null?void 0:i[1];if(!p)continue;let u=l.name,f=()=>{if(!a.hasAttribute(u))return;let v=a.getAttribute(u)||"";V(a,p,v)};a.addEventListener(c.trigger,f),a[d]=f,r.push({el:a,event:c.trigger,handler:f,guardKey:d})}};s(o),o.querySelectorAll("*").forEach(s),t[n]=r}function Be(o){let e="__lvtFxDirectListeners",t=o[e];t&&(t.forEach(({el:n,event:r,handler:s,guardKey:a})=>{n.removeEventListener(r,s),delete n[a]}),delete o[e])}function Tt(o,e,t){let n=r=>{var s;for(let a of r.attributes){if(!a.name.startsWith("lvt-fx:"))continue;let i=$e(a.name);if(!i.trigger||!Ue.has(i.trigger)||i.trigger!==e||i.actionName&&i.actionName!==t)continue;let l=(s=a.name.match(/^lvt-fx:(\w+)/i))==null?void 0:s[1];l&&V(r,l,a.value)}};n(o),o.querySelectorAll("*").forEach(n)}function V(o,e,t){let n=getComputedStyle(o);switch(e){case"highlight":{if(o.__lvtHighlighting)break;o.__lvtHighlighting=!0;let r=parseInt(n.getPropertyValue("--lvt-highlight-duration").trim()||"500",10),s=n.getPropertyValue("--lvt-highlight-color").trim()||"#ffc107",a=o.style.backgroundColor,i=o.style.transition;o.style.transition=`background-color ${r}ms ease-out`,o.style.backgroundColor=s,setTimeout(()=>{if(!o.isConnected){o.style.backgroundColor=a,o.style.transition=i,o.__lvtHighlighting=!1;return}o.style.backgroundColor=a,setTimeout(()=>{o.isConnected&&(o.style.transition=i),o.__lvtHighlighting=!1},r)},50);break}case"animate":{let r=parseInt(n.getPropertyValue("--lvt-animate-duration").trim()||"300",10),s=t||"fade";switch(o.style.setProperty("--lvt-animate-duration",`${r}ms`),s){case"fade":o.style.animation="lvt-fade-in var(--lvt-animate-duration) ease-out";break;case"slide":o.style.animation="lvt-slide-in var(--lvt-animate-duration) ease-out";break;case"scale":o.style.animation="lvt-scale-in var(--lvt-animate-duration) ease-out";break;default:console.warn(`Unknown lvt-fx:animate mode: ${s}`)}o.addEventListener("animationend",()=>{o.style.animation=""},{once:!0});break}case"scroll":{let r=n.getPropertyValue("--lvt-scroll-behavior").trim(),s=St.has(r)?r:"auto",a=parseInt(n.getPropertyValue("--lvt-scroll-threshold").trim()||"100",10),i=t||"bottom";switch(i){case"bottom":o.scrollTo({top:o.scrollHeight,behavior:s});break;case"bottom-sticky":{o.scrollHeight-o.scrollTop-o.clientHeight<=a&&o.scrollTo({top:o.scrollHeight,behavior:s});break}case"top":o.scrollTo({top:0,behavior:s});break;case"preserve":break;default:console.warn(`Unknown lvt-fx:scroll mode: ${i}`)}break}default:console.warn(`Unknown lvt-fx effect: ${e}`)}}function Pe(o){let e="__lvtFxLifecycleSetup";if(o[e])return;o[e]=!0;let t=[];["pending","success","error","done"].forEach(r=>{let s=a=>{var c;let l=(c=a.detail)==null?void 0:c.action;Tt(o,r,l)};document.addEventListener(`lvt:${r}`,s,!0),t.push({event:`lvt:${r}`,handler:s})}),o.__lvtFxLifecycleListeners=t}function Ke(o){let e=o.__lvtFxLifecycleListeners;e&&(e.forEach(({event:t,handler:n})=>{document.removeEventListener(t,n,!0)}),delete o.__lvtFxLifecycleListeners),delete o.__lvtFxLifecycleSetup}var St=new Set(["auto","smooth","instant"]);function Ve(o){o.querySelectorAll("[lvt-fx\\:scroll]").forEach(e=>{let t=e.getAttribute("lvt-fx:scroll");t&&V(e,"scroll",t)})}function je(o){o.querySelectorAll("[lvt-fx\\:highlight]").forEach(e=>{let t=e.getAttribute("lvt-fx:highlight");t&&V(e,"highlight",t)})}function qe(o){o.querySelectorAll("[lvt-fx\\:animate]").forEach(e=>{let t=e.getAttribute("lvt-fx:animate");t&&V(e,"animate",t)}),Lt()}function Lt(){if(!document.getElementById("lvt-animate-styles")){let o=document.createElement("style");o.id="lvt-animate-styles",o.textContent=`
1
+ "use strict";var LiveTemplateClient=(()=>{var ve=Object.defineProperty;var rt=Object.getOwnPropertyDescriptor;var st=Object.getOwnPropertyNames;var it=Object.prototype.hasOwnProperty;var ot=(o,e)=>{for(var t in e)ve(o,t,{get:e[t],enumerable:!0})},at=(o,e,t,n)=>{if(e&&typeof e=="object"||typeof e=="function")for(let r of st(e))!it.call(o,r)&&r!==t&&ve(o,r,{get:()=>e[r],enumerable:!(n=rt(e,r))||n.enumerable});return o};var lt=o=>at(ve({},"__esModule",{value:!0}),o);var $t={};ot($t,{LiveTemplateClient:()=>he,compareHTML:()=>nt,loadAndApplyUpdate:()=>tt,setupReactiveAttributeListeners:()=>re});var Ce=11;function ct(o,e){var t=e.attributes,n,r,s,a,i;if(!(e.nodeType===Ce||o.nodeType===Ce)){for(var l=t.length-1;l>=0;l--)n=t[l],r=n.name,s=n.namespaceURI,a=n.value,s?(r=n.localName||r,i=o.getAttributeNS(s,r),i!==a&&(n.prefix==="xmlns"&&(r=n.name),o.setAttributeNS(s,r,a))):(i=o.getAttribute(r),i!==a&&o.setAttribute(r,a));for(var c=o.attributes,d=c.length-1;d>=0;d--)n=c[d],r=n.name,s=n.namespaceURI,s?(r=n.localName||r,e.hasAttributeNS(s,r)||o.removeAttributeNS(s,r)):e.hasAttribute(r)||o.removeAttribute(r)}}var Y,dt="http://www.w3.org/1999/xhtml",I=typeof document=="undefined"?void 0:document,ut=!!I&&"content"in I.createElement("template"),pt=!!I&&I.createRange&&"createContextualFragment"in I.createRange();function gt(o){var e=I.createElement("template");return e.innerHTML=o,e.content.childNodes[0]}function ft(o){Y||(Y=I.createRange(),Y.selectNode(I.body));var e=Y.createContextualFragment(o);return e.childNodes[0]}function ht(o){var e=I.createElement("body");return e.innerHTML=o,e.childNodes[0]}function mt(o){return o=o.trim(),ut?gt(o):pt?ft(o):ht(o)}function J(o,e){var t=o.nodeName,n=e.nodeName,r,s;return t===n?!0:(r=t.charCodeAt(0),s=n.charCodeAt(0),r<=90&&s>=97?t===n.toUpperCase():s<=90&&r>=97?n===t.toUpperCase():!1)}function vt(o,e){return!e||e===dt?I.createElement(o):I.createElementNS(e,o)}function yt(o,e){for(var t=o.firstChild;t;){var n=t.nextSibling;e.appendChild(t),t=n}return e}function ye(o,e,t){o[t]!==e[t]&&(o[t]=e[t],o[t]?o.setAttribute(t,""):o.removeAttribute(t))}var Fe={OPTION:function(o,e){var t=o.parentNode;if(t){var n=t.nodeName.toUpperCase();n==="OPTGROUP"&&(t=t.parentNode,n=t&&t.nodeName.toUpperCase()),n==="SELECT"&&!t.hasAttribute("multiple")&&(o.hasAttribute("selected")&&!e.selected&&(o.setAttribute("selected","selected"),o.removeAttribute("selected")),t.selectedIndex=-1)}ye(o,e,"selected")},INPUT:function(o,e){ye(o,e,"checked"),ye(o,e,"disabled"),o.value!==e.value&&(o.value=e.value),e.hasAttribute("value")||o.removeAttribute("value")},TEXTAREA:function(o,e){var t=e.value;o.value!==t&&(o.value=t);var n=o.firstChild;if(n){var r=n.nodeValue;if(r==t||!t&&r==o.placeholder)return;n.nodeValue=t}},SELECT:function(o,e){if(!e.hasAttribute("multiple")){for(var t=-1,n=0,r=o.firstChild,s,a;r;)if(a=r.nodeName&&r.nodeName.toUpperCase(),a==="OPTGROUP")s=r,r=s.firstChild,r||(r=s.nextSibling,s=null);else{if(a==="OPTION"){if(r.hasAttribute("selected")){t=n;break}n++}r=r.nextSibling,!r&&s&&(r=s.nextSibling,s=null)}o.selectedIndex=t}}},K=1,_e=11,He=3,Ie=8;function W(){}function bt(o){if(o)return o.getAttribute&&o.getAttribute("id")||o.id}function Et(o){return function(t,n,r){if(r||(r={}),typeof n=="string")if(t.nodeName==="#document"||t.nodeName==="HTML"||t.nodeName==="BODY"){var s=n;n=I.createElement("html"),n.innerHTML=s}else n=mt(n);else n.nodeType===_e&&(n=n.firstElementChild);var a=r.getNodeKey||bt,i=r.onBeforeNodeAdded||W,l=r.onNodeAdded||W,c=r.onBeforeElUpdated||W,d=r.onElUpdated||W,p=r.onBeforeNodeDiscarded||W,u=r.onNodeDiscarded||W,f=r.onBeforeElChildrenUpdated||W,v=r.skipFromChildren||W,C=r.addChild||function(h,m){return h.appendChild(m)},E=r.childrenOnly===!0,y=Object.create(null),F=[];function g(h){F.push(h)}function k(h,m){if(h.nodeType===K)for(var L=h.firstChild;L;){var b=void 0;m&&(b=a(L))?g(b):(u(L),L.firstChild&&k(L,m)),L=L.nextSibling}}function M(h,m,L){p(h)!==!1&&(m&&m.removeChild(h),u(h),k(h,L))}function D(h){if(h.nodeType===K||h.nodeType===_e)for(var m=h.firstChild;m;){var L=a(m);L&&(y[L]=m),D(m),m=m.nextSibling}}D(t);function q(h){l(h);for(var m=h.firstChild;m;){var L=m.nextSibling,b=a(m);if(b){var T=y[b];T&&J(m,T)?(m.parentNode.replaceChild(T,m),A(T,m)):q(m)}else q(m);m=L}}function S(h,m,L){for(;m;){var b=m.nextSibling;(L=a(m))?g(L):M(m,h,!0),m=b}}function A(h,m,L){var b=a(m);if(b&&delete y[b],!L){var T=c(h,m);if(T===!1||(T instanceof HTMLElement&&(h=T,D(h)),o(h,m),d(h),f(h,m)===!1))return}h.nodeName!=="TEXTAREA"?x(h,m):Fe.TEXTAREA(h,m)}function x(h,m){var L=v(h,m),b=m.firstChild,T=h.firstChild,B,O,P,G,U;e:for(;b;){for(G=b.nextSibling,B=a(b);!L&&T;){if(P=T.nextSibling,b.isSameNode&&b.isSameNode(T)){b=G,T=P;continue e}O=a(T);var X=T.nodeType,$=void 0;if(X===b.nodeType&&(X===K?(B?B!==O&&((U=y[B])?P===U?$=!1:(h.insertBefore(U,T),O?g(O):M(T,h,!0),T=U,O=a(T)):$=!1):O&&($=!1),$=$!==!1&&J(T,b),$&&A(T,b)):(X===He||X==Ie)&&($=!0,T.nodeValue!==b.nodeValue&&(T.nodeValue=b.nodeValue))),$){b=G,T=P;continue e}O?g(O):M(T,h,!0),T=P}if(B&&(U=y[B])&&J(U,b))L||C(h,U),A(U,b);else{var me=i(b);me!==!1&&(me&&(b=me),b.actualize&&(b=b.actualize(h.ownerDocument||I)),C(h,b),q(b))}b=G,T=P}S(h,T,O);var ke=Fe[h.nodeName];ke&&ke(h,m)}var w=t,_=w.nodeType,N=n.nodeType;if(!E){if(_===K)N===K?J(t,n)||(u(t),w=yt(t,vt(n.nodeName,n.namespaceURI))):w=n;else if(_===He||_===Ie){if(N===_)return w.nodeValue!==n.nodeValue&&(w.nodeValue=n.nodeValue),w;w=n}}if(w===n)u(t);else{if(n.isSameNode&&n.isSameNode(w))return;if(A(w,n,E),F)for(var H=0,z=F.length;H<z;H++){var R=y[F[H]];R&&M(R,R.parentNode,!1)}}return!E&&w!==t&&t.parentNode&&(w.actualize&&(w=w.actualize(t.ownerDocument||I)),t.parentNode.replaceChild(w,t)),w}}var wt=Et(ct),Re=wt;var be=["text","textarea","number","email","password","search","tel","url","date","time","datetime-local","color","range"];var Q=class{constructor(e){this.logger=e;this.wrapperElement=null;this.focusableElements=[];this.lastFocusedElement=null;this.lastFocusedSelectionStart=null;this.lastFocusedSelectionEnd=null}attach(e){this.wrapperElement=e,e&&(this.updateFocusableElements(),this.setupFocusTracking())}reset(){this.wrapperElement=null,this.focusableElements=[],this.lastFocusedElement=null,this.lastFocusedSelectionStart=null,this.lastFocusedSelectionEnd=null}updateFocusableElements(){if(!this.wrapperElement)return;let n=`${be.map(r=>r==="textarea"?"textarea:not([disabled])":`input[type="${r}"]:not([disabled])`).join(", ")}, select:not([disabled]), button:not([disabled]), [contenteditable="true"], [tabindex]:not([tabindex="-1"])`;this.focusableElements=Array.from(this.wrapperElement.querySelectorAll(n))}setupFocusTracking(){if(!this.wrapperElement)return;let e=this.wrapperElement.getAttribute("data-lvt-id"),t=`__lvt_focus_tracker_${e}`,n=`__lvt_blur_tracker_${e}`,r=a=>{var l;let i=a.target;!i||!((l=this.wrapperElement)!=null&&l.contains(i))||(this.isTextualInput(i)||i instanceof HTMLSelectElement)&&(this.lastFocusedElement=i,this.logger.debug("[Focus] Tracked focus on:",i.tagName,i.id||i.getAttribute("name")),this.isTextualInput(i)&&(this.lastFocusedSelectionStart=i.selectionStart,this.lastFocusedSelectionEnd=i.selectionEnd))},s=a=>{var l;let i=a.target;!i||!((l=this.wrapperElement)!=null&&l.contains(i))||this.isTextualInput(i)&&i===this.lastFocusedElement&&(this.lastFocusedSelectionStart=i.selectionStart,this.lastFocusedSelectionEnd=i.selectionEnd,this.logger.debug("[Focus] Saved cursor on blur:",this.lastFocusedSelectionStart,"-",this.lastFocusedSelectionEnd))};document[t]&&document.removeEventListener("focus",document[t],!0),document[n]&&document.removeEventListener("blur",document[n],!0),document[t]=r,document[n]=s,document.addEventListener("focus",r,!0),document.addEventListener("blur",s,!0),this.logger.debug("[Focus] Focus tracking set up")}restoreFocusedElement(){var a,i,l;if(this.logger.debug("[Focus] restoreFocusedElement - lastFocusedElement:",(a=this.lastFocusedElement)==null?void 0:a.tagName,((i=this.lastFocusedElement)==null?void 0:i.id)||((l=this.lastFocusedElement)==null?void 0:l.getAttribute("name"))),!this.lastFocusedElement||!this.wrapperElement){this.logger.debug("[Focus] No element to restore");return}let e=this.getElementSelector(this.lastFocusedElement);if(this.logger.debug("[Focus] Selector for last focused:",e),!e){this.logger.debug("[Focus] Could not generate selector");return}let t=null;if(e.startsWith("data-focus-index-")){this.updateFocusableElements();let c=parseInt(e.replace("data-focus-index-",""),10);t=this.focusableElements[c]||null,this.logger.debug("[Focus] Found by index:",c,t==null?void 0:t.tagName)}else t=this.wrapperElement.querySelector(e),this.logger.debug("[Focus] Found by selector:",e,t==null?void 0:t.tagName);if(!t){this.logger.debug("[Focus] Element not found in updated DOM");return}let n=t.matches(":focus");if(this.logger.debug("[Focus] Already focused:",n),n){this.logger.debug("[Focus] Element retained focus \u2014 skipping restoration");return}let r=this.lastFocusedSelectionStart,s=this.lastFocusedSelectionEnd;t.focus(),this.logger.debug("[Focus] Restored focus"),this.isTextualInput(t)&&r!==null&&s!==null&&(t.setSelectionRange(r,s),this.logger.debug("[Focus] Restored cursor:",r,"-",s))}isTextualInput(e){return e instanceof HTMLTextAreaElement?!0:e instanceof HTMLInputElement?be.indexOf(e.type)>=0:!1}shouldSkipUpdate(e){return e!==document.activeElement||e.hasAttribute("data-lvt-force-update")?!1:!!(this.isTextualInput(e)||e instanceof HTMLSelectElement)}getLastFocusedElement(){return this.lastFocusedElement}getElementSelector(e){if(e.id)return`#${e.id}`;if(e.name)return`[name="${e.name}"]`;if(e.getAttribute("data-key"))return`[data-key="${e.getAttribute("data-key")}"]`;let t=this.focusableElements.indexOf(e);return t>=0?`data-focus-index-${t}`:null}};var De=["pending","success","error","done"],Ee=new Set(De),Z=new Set(["click-away"]),we={reset:"reset",addclass:"addClass",removeclass:"removeClass",toggleclass:"toggleClass",setattr:"setAttr",toggleattr:"toggleAttr"};function At(o,e){let n=o.toLowerCase().match(/^lvt-el:(\w+):on:(.+)$/);if(n){let r=n[1],s=we[r];if(!s)return null;let a=n[2];if(Z.has(a)||!Ee.has(a)&&!a.includes(":"))return null;let i=a.split(":"),l=i[i.length-1];if(!Ee.has(l))return null;let c=l,d=i.length>1?i.slice(0,-1).join(":"):void 0;return{action:s,lifecycle:c,actionName:d||void 0,param:e||void 0}}return null}function ee(o){let e=o.getAttribute("data-lvt-target");return e?e.startsWith("#")?document.getElementById(e.slice(1))||o:e.startsWith("closest:")&&o.closest(e.slice(8))||o:o}function te(o,e,t){switch(e){case"reset":o instanceof HTMLFormElement&&o.reset();break;case"addClass":if(t){let n=t.split(/\s+/).filter(Boolean);o.classList.add(...n)}break;case"removeClass":if(t){let n=t.split(/\s+/).filter(Boolean);o.classList.remove(...n)}break;case"toggleClass":t&&t.split(/\s+/).filter(Boolean).forEach(r=>o.classList.toggle(r));break;case"setAttr":if(t){let n=t.indexOf(":");if(n>0){let r=t.substring(0,n),s=t.substring(n+1);o.setAttribute(r,s)}}break;case"toggleAttr":t&&o.toggleAttribute(t);break}}function Tt(o,e,t){return o.lifecycle!==e?!1:o.actionName?o.actionName===t:!0}function St(o,e){let t=Object.keys(we),n=[],r=e?e.replace(/([^\w-])/g,"\\$1"):void 0;for(let i of t)n.push(`[lvt-el\\:${i}\\:on\\:${o}]`),r&&n.push(`[lvt-el\\:${i}\\:on\\:${r}\\:${o}]`);let s=n.join(", "),a;try{a=document.querySelectorAll(s)}catch(i){let l=t.map(c=>`[lvt-el\\:${c}\\:on\\:${o}]`);try{a=document.querySelectorAll(l.join(", "))}catch(c){return}}a.forEach(i=>{Array.from(i.attributes).forEach(l=>{if(!l.name.startsWith("lvt-el:")||!l.name.includes(":on:"))return;let c=At(l.name,l.value);c&&Tt(c,o,e)&&te(ee(i),c.action,c.param)})})}function ne(o,e){for(let t of o.attributes){let n=t.name.match(/^lvt-el:(\w+):on:([a-z-]+)$/i);if(!n||n[2].toLowerCase()!==e)continue;let r=n[1].toLowerCase(),s=we[r];s&&te(ee(o),s,t.value)}}function Ne(o){return!Ee.has(o)&&!Z.has(o)}function re(){De.forEach(o=>{document.addEventListener(`lvt:${o}`,e=>{var r;let n=(r=e.detail)==null?void 0:r.action;St(o,n)},!0)})}var Ue=new Set(["pending","success","error","done"]);function $e(o){let e=o.match(/^lvt-fx:\w+:on:(.+)$/i);if(!e)return{trigger:null};let t=e[1].split(":");return t.length===1?{trigger:t[0].toLowerCase()}:{trigger:t[t.length-1].toLowerCase(),actionName:t.slice(0,-1).join(":")}}function We(o,e){let t=e||o,n="__lvtFxDirectListeners",r=(t[n]||[]).filter(a=>a.el.isConnected),s=a=>{var i;for(let l of a.attributes){if(!l.name.startsWith("lvt-fx:"))continue;let c=$e(l.name);if(!c.trigger||Ue.has(c.trigger)||Z.has(c.trigger))continue;let d=`__lvt_fx_${l.name}`;if(a[d])continue;let p=(i=l.name.match(/^lvt-fx:(\w+)/i))==null?void 0:i[1];if(!p)continue;let u=l.name,f=()=>{if(!a.hasAttribute(u))return;let v=a.getAttribute(u)||"";V(a,p,v)};a.addEventListener(c.trigger,f),a[d]=f,r.push({el:a,event:c.trigger,handler:f,guardKey:d})}};s(o),o.querySelectorAll("*").forEach(s),t[n]=r}function Be(o){let e="__lvtFxDirectListeners",t=o[e];t&&(t.forEach(({el:n,event:r,handler:s,guardKey:a})=>{n.removeEventListener(r,s),delete n[a]}),delete o[e])}function Lt(o,e,t){let n=r=>{var s;for(let a of r.attributes){if(!a.name.startsWith("lvt-fx:"))continue;let i=$e(a.name);if(!i.trigger||!Ue.has(i.trigger)||i.trigger!==e||i.actionName&&i.actionName!==t)continue;let l=(s=a.name.match(/^lvt-fx:(\w+)/i))==null?void 0:s[1];l&&V(r,l,a.value)}};n(o),o.querySelectorAll("*").forEach(n)}function V(o,e,t){let n=getComputedStyle(o);switch(e){case"highlight":{if(o.__lvtHighlighting)break;o.__lvtHighlighting=!0;let r=parseInt(n.getPropertyValue("--lvt-highlight-duration").trim()||"500",10),s=n.getPropertyValue("--lvt-highlight-color").trim()||"#ffc107",a=o.style.backgroundColor,i=o.style.transition;o.style.transition=`background-color ${r}ms ease-out`,o.style.backgroundColor=s,setTimeout(()=>{if(!o.isConnected){o.style.backgroundColor=a,o.style.transition=i,o.__lvtHighlighting=!1;return}o.style.backgroundColor=a,setTimeout(()=>{o.isConnected&&(o.style.transition=i),o.__lvtHighlighting=!1},r)},50);break}case"animate":{let r=parseInt(n.getPropertyValue("--lvt-animate-duration").trim()||"300",10),s=t||"fade";switch(o.style.setProperty("--lvt-animate-duration",`${r}ms`),s){case"fade":o.style.animation="lvt-fade-in var(--lvt-animate-duration) ease-out";break;case"slide":o.style.animation="lvt-slide-in var(--lvt-animate-duration) ease-out";break;case"scale":o.style.animation="lvt-scale-in var(--lvt-animate-duration) ease-out";break;default:console.warn(`Unknown lvt-fx:animate mode: ${s}`)}o.addEventListener("animationend",()=>{o.style.animation=""},{once:!0});break}case"scroll":{let r=n.getPropertyValue("--lvt-scroll-behavior").trim(),s=Mt.has(r)?r:"auto",a=parseInt(n.getPropertyValue("--lvt-scroll-threshold").trim()||"100",10),i=t||"bottom";switch(i){case"bottom":o.scrollTo({top:o.scrollHeight,behavior:s});break;case"bottom-sticky":{o.scrollHeight-o.scrollTop-o.clientHeight<=a&&o.scrollTo({top:o.scrollHeight,behavior:s});break}case"top":o.scrollTo({top:0,behavior:s});break;case"preserve":break;default:console.warn(`Unknown lvt-fx:scroll mode: ${i}`)}break}default:console.warn(`Unknown lvt-fx effect: ${e}`)}}function Pe(o){let e="__lvtFxLifecycleSetup";if(o[e])return;o[e]=!0;let t=[];["pending","success","error","done"].forEach(r=>{let s=a=>{var c;let l=(c=a.detail)==null?void 0:c.action;Lt(o,r,l)};document.addEventListener(`lvt:${r}`,s,!0),t.push({event:`lvt:${r}`,handler:s})}),o.__lvtFxLifecycleListeners=t}function Ke(o){let e=o.__lvtFxLifecycleListeners;e&&(e.forEach(({event:t,handler:n})=>{document.removeEventListener(t,n,!0)}),delete o.__lvtFxLifecycleListeners),delete o.__lvtFxLifecycleSetup}var Mt=new Set(["auto","smooth","instant"]);function Ve(o){o.querySelectorAll("[lvt-fx\\:scroll]").forEach(e=>{let t=e.getAttribute("lvt-fx:scroll");t&&V(e,"scroll",t)})}function je(o){o.querySelectorAll("[lvt-fx\\:highlight]").forEach(e=>{let t=e.getAttribute("lvt-fx:highlight");t&&V(e,"highlight",t)})}function qe(o){o.querySelectorAll("[lvt-fx\\:animate]").forEach(e=>{let t=e.getAttribute("lvt-fx:animate");t&&V(e,"animate",t)}),xt()}function xt(){if(!document.getElementById("lvt-animate-styles")){let o=document.createElement("style");o.id="lvt-animate-styles",o.textContent=`
2
2
  @keyframes lvt-fade-in {
3
3
  from { opacity: 0; }
4
4
  to { opacity: 1; }
@@ -11,7 +11,7 @@
11
11
  from { opacity: 0; transform: scale(0.95); }
12
12
  to { opacity: 1; transform: scale(1); }
13
13
  }
14
- `,document.head.appendChild(o)}}var Oe="__lvtPendingProcessed";function ze(o){o.querySelectorAll("[data-toast-trigger]").forEach(e=>{let t=e.getAttribute("data-pending");if(!t||e[Oe]===t)return;e[Oe]=t;let n;try{n=JSON.parse(t)}catch(a){return}if(!Array.isArray(n)||!n.length)return;let r=e.getAttribute("data-position")||"top-right",s=Mt(r);n.forEach(a=>{let i=kt(a);s.appendChild(i),typeof a.dismissMS=="number"&&a.dismissMS>0&&setTimeout(()=>i.remove(),a.dismissMS)})})}function Ge(){let o="__lvt_toast_click_outside",e=document[o];e&&document.removeEventListener("click",e);let t=n=>{let r=document.querySelector("[data-lvt-toast-stack]");!r||r.contains(n.target)||r.querySelectorAll("[data-lvt-toast-item]").forEach(s=>s.remove())};document[o]=t,document.addEventListener("click",t)}function Mt(o){let e=document.querySelector("[data-lvt-toast-stack]");return e||(e=document.createElement("div"),e.setAttribute("data-lvt-toast-stack",""),e.setAttribute("aria-live","polite"),xt(e,o),document.body.appendChild(e)),e}function xt(o,e){let t=o.style;switch(e){case"top-left":t.top="1rem",t.left="1rem";break;case"top-center":t.top="1rem",t.left="50%",t.transform="translateX(-50%)";break;case"bottom-right":t.bottom="1rem",t.right="1rem";break;case"bottom-left":t.bottom="1rem",t.left="1rem";break;case"bottom-center":t.bottom="1rem",t.left="50%",t.transform="translateX(-50%)";break;default:t.top="1rem",t.right="1rem";break}}function kt(o){let e=document.createElement("div");e.setAttribute("role","alert"),e.setAttribute("data-lvt-toast-item",o.id),o.type&&e.setAttribute("data-type",o.type);let t=document.createElement("div");if(t.setAttribute("data-lvt-toast-content",""),o.title){let n=document.createElement("strong");n.textContent=o.title,t.appendChild(n)}if(o.body){let n=document.createElement("p");n.textContent=o.body,t.appendChild(n)}if(e.appendChild(t),o.dismissible){let n=document.createElement("button");n.type="button",n.setAttribute("aria-label","Dismiss"),n.textContent="\xD7",n.addEventListener("click",()=>e.remove()),e.appendChild(n)}return e}function j(o,e){let t=null;return function(...r){let s=this;t!==null&&clearTimeout(t),t=window.setTimeout(()=>{o.apply(s,r)},e)}}function Ae(o,e){let t=!1;return function(...r){let s=this;t||(o.apply(s,r),t=!0,setTimeout(()=>{t=!1},e))}}function Te(o,e){let t=o.replace(/:/g,"\\:");if(e===void 0)return`[${t}]`;let n=e.replace(/\\/g,"\\\\").replace(/"/g,'\\"');return`[${t}="${n}"]`}var Xe={reset:"reset",addclass:"addClass",removeclass:"removeClass",toggleclass:"toggleClass",setattr:"setAttr",toggleattr:"toggleAttr"},Ct=Object.keys(Xe),Ft=new Set(["mouseenter","mouseleave","focus","blur"]),se=class{constructor(e,t){this.context=e;this.logger=t}extractButtonData(e,t){e.value&&(t.value=this.context.parseValue(e.value)),Array.from(e.attributes).forEach(n=>{if(n.name.startsWith("data-")&&n.name!=="data-key"){let r=n.name.slice(5);t[r]=this.context.parseValue(n.value)}})}setupEventDelegation(){let e=this.context.getWrapperElement();if(!e)return;let t=["click","submit","change","input","search","keydown","keyup","focus","blur","mouseenter","mouseleave"],n=e.getAttribute("data-lvt-id"),r=this.context.getRateLimitedHandlers();t.forEach(s=>{let a=`__lvt_delegated_${s}_${n}`,i=document[a];i&&document.removeEventListener(s,i,!1);let l=c=>{var C;let d=this.context.getWrapperElement();if(!d)return;let p=c.target;if(this.logger.debug("Event listener triggered:",s,c.target),!p)return;let u=p,f=!1;for(;u;){if(u===d){f=!0;break}u=u.parentElement}if(!f)return;let v=`lvt-on:${s}`;for(u=p;u&&u!==d.parentElement;){let E=u.getAttribute(v),y=u,F=!1;if(!E&&s==="submit"&&u instanceof HTMLFormElement){let g=u.getAttribute("lvt-persist");g&&(E=`persist:${g}`,y=u)}if(!E&&s==="click"){let g=u instanceof HTMLButtonElement?u:null;g&&g.name&&!g.disabled&&g.type!=="reset"&&g.form===null&&!g.hasAttribute("commandfor")&&(E=g.name,y=g,F=!0)}if(!E&&s==="submit"&&u instanceof HTMLFormElement&&!u.hasAttribute("lvt-form:no-intercept")){let g=u.getAttribute("lvt-form:action"),k=c.submitter;g?E=g:k instanceof HTMLButtonElement&&k.name?E=k.name:u.getAttribute("name")?E=u.getAttribute("name"):E="submit",y=u,k&&(u.__lvtSubmitter=k);let M=u.closest("dialog");M&&((C=u.getAttribute("method"))==null?void 0:C.toLowerCase())==="dialog"&&(u.__lvtCloseDialog=M)}if(E!=null&&y){if(s==="submit"&&c.preventDefault(),(s==="keydown"||s==="keyup")&&y.hasAttribute("lvt-key")){let S=y.getAttribute("lvt-key");if(S&&c.key!==S){u=u.parentElement;continue}}let g=y,k=()=>{this.logger.debug("handleAction called",{action:E,eventType:s,targetElement:g});let S={action:E,data:{}};if(g instanceof HTMLFormElement){this.logger.debug("Processing form element");let A=new FormData(g),x=Array.from(g.querySelectorAll('input[type="checkbox"][name]')),w=new Set(x.map(I=>I.name));w.forEach(I=>{S.data[I]=!1});let _=new Set(Array.from(g.querySelectorAll('input[type="password"][name]')).map(I=>I.name)),D=g.__lvtSubmitter,H=D==null?void 0:D.name;A.forEach((I,h)=>{I instanceof File||H&&h===H||(w.has(h)?(S.data[h]=!0,this.logger.debug("Converted checkbox",h,"to true")):_.has(h)?S.data[h]=I:S.data[h]=this.context.parseValue(I))});let z=g.__lvtSubmitter;z&&(this.extractButtonData(z,S.data),delete g.__lvtSubmitter),this.logger.debug("Form data collected:",S.data)}else if(s==="change"||s==="input"||s==="search"){if(g instanceof HTMLInputElement){let A=g.name||"value";S.data[A]=this.context.parseValue(g.value)}else if(g instanceof HTMLSelectElement){let A=g.name||"value";S.data[A]=this.context.parseValue(g.value)}else if(g instanceof HTMLTextAreaElement){let A=g.name||"value";S.data[A]=this.context.parseValue(g.value)}}if(F&&this.extractButtonData(y,S.data),!(g instanceof HTMLFormElement)&&!F&&Array.from(y.attributes).forEach(A=>{if(A.name.startsWith("data-")&&A.name!=="data-key"&&A.name!=="data-lvt-id"){let x=A.name.slice(5);S.data[x]=this.context.parseValue(A.value)}}),s==="submit"&&g instanceof HTMLFormElement){let x=c.submitter,w=null;x&&x.hasAttribute("lvt-form:disable-with")&&(w=x.textContent,x.disabled=!0,x.textContent=x.getAttribute("lvt-form:disable-with"),this.logger.debug("Disabled submit button")),this.context.setActiveSubmission(g,x||null,w),g.querySelectorAll('input[type="file"][lvt-upload]').forEach(D=>{let H=D.getAttribute("lvt-upload");H&&(this.logger.debug("Triggering pending uploads for:",H),this.context.triggerPendingUploads(H))}),g.dispatchEvent(new CustomEvent("lvt:pending",{detail:S})),this.logger.debug("Emitted lvt:pending event")}if(this.logger.debug("About to send message:",S),this.logger.debug("WebSocket state:",this.context.getWebSocketReadyState()),g instanceof HTMLFormElement){let A=g.querySelectorAll('input[type="file"]:not([lvt-upload])');if(Array.from(A).some(w=>w.files&&w.files.length>0)){this.logger.debug("Tier 1 file upload detected, using HTTP fetch"),this.context.sendHTTPMultipart(g,E);return}}if(this.context.send(S),this.logger.debug("send() called"),g instanceof HTMLFormElement){let A=g.__lvtCloseDialog;A&&(A.close(),delete g.__lvtCloseDialog)}},M=y.getAttribute("lvt-mod:throttle"),N=y.getAttribute("lvt-mod:debounce");if((M||N)&&s!=="search"){r.has(y)||r.set(y,new Map);let S=r.get(y),A=`${s}:${E}`,x=`__lvt_callback_${A}`,w=y;w[x]||(w[x]={current:k}),w[x].current=k;let _=S.get(A);if(!_){let D=()=>w[x].current();if(M){let H=parseInt(M,10);_=Ae(D,H)}else if(N){let H=parseInt(N,10);_=j(D,H)}_&&S.set(A,_)}_&&_()}else k();return}u=u.parentElement}};document[a]=l,document.addEventListener(s,l,!1),this.logger.debug("Registered event listener:",s,"with key:",a)})}setupWindowEventDelegation(){let e=this.context.getWrapperElement();if(!e)return;let t=["keydown","keyup","scroll","resize","focus","blur"],n=e.getAttribute("data-lvt-id"),r=this.context.getRateLimitedHandlers();t.forEach(s=>{let a=`__lvt_window_${s}_${n}`,i=window[a];i&&window.removeEventListener(s,i);let l=c=>{let d=this.context.getWrapperElement();if(!d)return;let p=`lvt-on:window:${s}`;d.querySelectorAll(Te(p)).forEach(f=>{let v=f.getAttribute(p);if(!v)return;if((s==="keydown"||s==="keyup")&&f.hasAttribute("lvt-key")){let g=f.getAttribute("lvt-key");if(g&&c.key!==g)return}let C={action:v,data:{}};Array.from(f.attributes).forEach(g=>{if(g.name.startsWith("data-")&&g.name!=="data-key"&&g.name!=="data-lvt-id"){let k=g.name.slice(5);C.data[k]=this.context.parseValue(g.value)}});let E=f.getAttribute("lvt-mod:throttle"),y=f.getAttribute("lvt-mod:debounce"),F=()=>this.context.send(C);if(E||y){r.has(f)||r.set(f,new Map);let g=r.get(f),k=`window-${s}:${v}`,M=g.get(k);if(!M){if(E){let N=parseInt(E,10);M=Ae(F,N)}else if(y){let N=parseInt(y,10);M=j(F,N)}M&&g.set(k,M)}M&&M()}else F()})};window[a]=l,window.addEventListener(s,l)})}setupClickAwayDelegation(){let e=this.context.getWrapperElement();if(!e)return;let n=`__lvt_click_away_${e.getAttribute("data-lvt-id")}`,r=document[n];r&&document.removeEventListener("click",r);let s=a=>{let i=this.context.getWrapperElement();if(!i)return;let l=a.target,c=Ct.map(p=>Te(`lvt-el:${p}:on:click-away`)).join(", ");i.querySelectorAll(c).forEach(p=>{p.contains(l)||Array.from(p.attributes).forEach(u=>{if(!u.name.includes(":on:click-away"))return;let f=u.name.match(/^lvt-el:(\w+):on:click-away$/);if(!f)return;let v=Xe[f[1].toLowerCase()];v&&te(ee(p),v,u.value)})})};document[n]=s,document.addEventListener("click",s)}setupDOMEventTriggerDelegation(e){let t=this.context.getWrapperElement();if(!t)return;let n=t.getAttribute("data-lvt-id");if(!n)return;let r=`__lvt_el_delegated_${n}`,s=t[r]||new Set,a=`__lvt_el_listeners_${n}`,i=(t[a]||[]).filter(d=>d.el.isConnected),l=e||t,c=d=>{let p=new Set;for(let u of d.attributes){if(!u.name.startsWith("lvt-el:"))continue;let f=u.name.match(/^lvt-el:\w+:on:([a-z-]+)$/i);if(!f)continue;let v=f[1].toLowerCase();De(v)&&p.add(v)}for(let u of p)if(Ft.has(u)){let f=`__lvt_el_${u}`;if(d[f])continue;let v=()=>ne(d,u);d.addEventListener(u,v),d[f]=v,i.push({el:d,event:u,handler:v,guardKey:f})}else if(!s.has(u)){let f=u.replace(/[.*+?^${}()|[\]\\]/g,"\\$&"),v=new RegExp(`^lvt-el:\\w+:on:${f}$`,"i"),C=E=>{let y=E.target;for(;y&&y!==t;){let F=!1;for(let g of y.attributes)if(v.test(g.name)){F=!0;break}if(F){ne(y,u);return}y=y.parentElement}y===t&&ne(t,u)};t.addEventListener(u,C),s.add(u),i.push({el:t,event:u,handler:C})}};c(l),l.querySelectorAll("*").forEach(c),t[a]=i,t[r]=s}teardownDOMEventTriggerDelegation(){let e=this.context.getWrapperElement();if(!e)return;let t=e.getAttribute("data-lvt-id");if(!t)return;let n=`__lvt_el_listeners_${t}`,r=e[n];r&&(r.forEach(({el:a,event:i,handler:l,guardKey:c})=>{a.removeEventListener(i,l),c&&delete a[c]}),delete e[n]);let s=`__lvt_el_delegated_${t}`;delete e[s]}setupFocusTrapDelegation(){let e=this.context.getWrapperElement();if(!e)return;let n=`__lvt_focus_trap_${e.getAttribute("data-lvt-id")}`,r=document[n];r&&document.removeEventListener("keydown",r);let s=i=>{let l=["a[href]:not([disabled])","button:not([disabled])","textarea:not([disabled])",'input:not([disabled]):not([type="hidden"])',"select:not([disabled])",'[tabindex]:not([tabindex="-1"]):not([disabled])','[contenteditable="true"]'].join(", ");return Array.from(i.querySelectorAll(l)).filter(c=>{let d=c,p=window.getComputedStyle(d),u=p.display!=="none",f=p.visibility!=="hidden",v=d.offsetParent!==null||p.position==="fixed"||p.position==="absolute"||typeof process!="undefined"&&!1;return u&&f&&v})},a=i=>{if(i.key!=="Tab")return;let l=this.context.getWrapperElement();if(!l)return;let c=l.querySelectorAll("[lvt-focus-trap]"),d=null;if(c.forEach(v=>{v.contains(document.activeElement)&&(!d||v.contains(d))&&(d=v)}),d||c.forEach(v=>{let C=v,E=window.getComputedStyle(C);E.display!=="none"&&E.visibility!=="hidden"&&(d=v)}),!d)return;let p=s(d);if(p.length===0)return;let u=p[0],f=p[p.length-1];i.shiftKey?document.activeElement===u&&(i.preventDefault(),f.focus()):document.activeElement===f&&(i.preventDefault(),u.focus())};document[n]=a,document.addEventListener("keydown",a),this.logger.debug("Focus trap delegation set up")}setupAutofocusDelegation(){let e=this.context.getWrapperElement();if(!e)return;let n=`__lvt_autofocus_observer_${e.getAttribute("data-lvt-id")}`,r=e[n];r&&r.disconnect();let s=()=>{let i=this.context.getWrapperElement();if(!i)return;i.querySelectorAll("[lvt-autofocus]").forEach(c=>{let d=c,p=window.getComputedStyle(d),u=p.display!=="none",f=p.visibility!=="hidden",v=d.offsetParent!==null||p.position==="fixed"||p.position==="absolute"||d.tagName==="BODY"||typeof process!="undefined"&&!1,C=u&&f&&v,E=d.getAttribute("data-lvt-autofocused")==="true";C&&!E?(d.setAttribute("data-lvt-autofocused","true"),requestAnimationFrame(()=>{d.focus(),this.logger.debug("Autofocused element:",d.tagName,d.id||d.getAttribute("name"))})):!C&&E&&d.removeAttribute("data-lvt-autofocused")})};s();let a=new MutationObserver(i=>{let l=!1;i.forEach(c=>{c.type==="childList"&&c.addedNodes.length>0&&c.addedNodes.forEach(d=>{d instanceof Element&&(d.hasAttribute("lvt-autofocus")||d.querySelector("[lvt-autofocus]"))&&(l=!0)}),c.type==="attributes"&&(c.target.hasAttribute("lvt-autofocus")||c.attributeName==="hidden"||c.attributeName==="style"||c.attributeName==="class")&&(l=!0)}),l&&s()});a.observe(e,{childList:!0,subtree:!0,attributes:!0,attributeFilter:["hidden","style","class","lvt-autofocus"]}),e[n]=a,this.logger.debug("Autofocus delegation set up")}};var ie=class{constructor(e,t){this.context=e;this.logger=t;this.popstateListener=null}setup(e){let n=`__lvt_link_intercept_${e.getAttribute("data-lvt-id")}`,r=document[n];r&&document.removeEventListener("click",r);let s=a=>{var c;let i=(c=a.target)==null?void 0:c.closest("a[href]");if(!i)return;let l=this.context.getWrapperElement();!l||!l.contains(i)||this.shouldSkip(i)||(a.preventDefault(),this.navigate(i.href))};document.addEventListener("click",s),document[n]=s,this.popstateListener||(this.popstateListener=()=>{this.navigate(window.location.href,!1)},window.addEventListener("popstate",this.popstateListener))}shouldSkip(e){if(e.origin!==window.location.origin||e.target&&e.target!=="_self"||e.hasAttribute("download")||e.hasAttribute("lvt-nav:no-intercept")||e.pathname===window.location.pathname&&e.hash)return!0;let t=e.protocol;return t!=="http:"&&t!=="https:"}async navigate(e,t=!0){try{let n=await fetch(e,{credentials:"include",headers:{Accept:"text/html"}});if(!n.ok){window.location.href=e;return}let r=await n.text();this.context.handleNavigationResponse(r),t&&window.history.pushState(null,"",e)}catch(n){window.location.href=e}}};var oe=class{constructor(e,t){this.context=e;this.logger=t;this.infiniteScrollObserver=null;this.mutationObserver=null}setupInfiniteScrollObserver(){if(!this.context.getWrapperElement())return;let t=document.getElementById("scroll-sentinel");t&&(this.infiniteScrollObserver&&this.infiniteScrollObserver.disconnect(),this.infiniteScrollObserver=new IntersectionObserver(n=>{n[0].isIntersecting&&(this.logger.debug("Sentinel visible, sending load_more action"),this.context.send({action:"load_more"}))},{rootMargin:"200px"}),this.infiniteScrollObserver.observe(t),this.logger.debug("Observer set up successfully"))}setupInfiniteScrollMutationObserver(){let e=this.context.getWrapperElement();e&&(this.mutationObserver&&this.mutationObserver.disconnect(),this.mutationObserver=new MutationObserver(()=>{this.setupInfiniteScrollObserver()}),this.mutationObserver.observe(e,{childList:!0,subtree:!0}),this.logger.debug("MutationObserver set up successfully"))}teardown(){this.infiniteScrollObserver&&(this.infiniteScrollObserver.disconnect(),this.infiniteScrollObserver=null),this.mutationObserver&&(this.mutationObserver.disconnect(),this.mutationObserver=null)}};var ae=class{constructor(){this.bar=null}show(){if(this.bar)return;let e=document.createElement("div");if(e.style.cssText=`
14
+ `,document.head.appendChild(o)}}var Oe="__lvtPendingProcessed";function ze(o){o.querySelectorAll("[data-toast-trigger]").forEach(e=>{let t=e.getAttribute("data-pending");if(!t||e[Oe]===t)return;e[Oe]=t;let n;try{n=JSON.parse(t)}catch(a){return}if(!Array.isArray(n)||!n.length)return;let r=e.getAttribute("data-position")||"top-right",s=kt(r);n.forEach(a=>{let i=Ft(a);s.appendChild(i),typeof a.dismissMS=="number"&&a.dismissMS>0&&setTimeout(()=>i.remove(),a.dismissMS)})})}function Ge(){let o="__lvt_toast_click_outside",e=document[o];e&&document.removeEventListener("click",e);let t=n=>{let r=document.querySelector("[data-lvt-toast-stack]");!r||r.contains(n.target)||r.querySelectorAll("[data-lvt-toast-item]").forEach(s=>s.remove())};document[o]=t,document.addEventListener("click",t)}function kt(o){let e=document.querySelector("[data-lvt-toast-stack]");return e||(e=document.createElement("div"),e.setAttribute("data-lvt-toast-stack",""),e.setAttribute("aria-live","polite"),Ct(e,o),document.body.appendChild(e)),e}function Ct(o,e){let t=o.style;switch(e){case"top-left":t.top="1rem",t.left="1rem";break;case"top-center":t.top="1rem",t.left="50%",t.transform="translateX(-50%)";break;case"bottom-right":t.bottom="1rem",t.right="1rem";break;case"bottom-left":t.bottom="1rem",t.left="1rem";break;case"bottom-center":t.bottom="1rem",t.left="50%",t.transform="translateX(-50%)";break;default:t.top="1rem",t.right="1rem";break}}function Ft(o){let e=document.createElement("div");e.setAttribute("role","alert"),e.setAttribute("data-lvt-toast-item",o.id),o.type&&e.setAttribute("data-type",o.type);let t=document.createElement("div");if(t.setAttribute("data-lvt-toast-content",""),o.title){let n=document.createElement("strong");n.textContent=o.title,t.appendChild(n)}if(o.body){let n=document.createElement("p");n.textContent=o.body,t.appendChild(n)}if(e.appendChild(t),o.dismissible){let n=document.createElement("button");n.type="button",n.setAttribute("aria-label","Dismiss"),n.textContent="\xD7",n.addEventListener("click",()=>e.remove()),e.appendChild(n)}return e}function j(o,e){let t=null;return function(...r){let s=this;t!==null&&clearTimeout(t),t=window.setTimeout(()=>{o.apply(s,r)},e)}}function Ae(o,e){let t=!1;return function(...r){let s=this;t||(o.apply(s,r),t=!0,setTimeout(()=>{t=!1},e))}}function Te(o,e){let t=o.replace(/:/g,"\\:");if(e===void 0)return`[${t}]`;let n=e.replace(/\\/g,"\\\\").replace(/"/g,'\\"');return`[${t}="${n}"]`}var Xe={reset:"reset",addclass:"addClass",removeclass:"removeClass",toggleclass:"toggleClass",setattr:"setAttr",toggleattr:"toggleAttr"},_t=Object.keys(Xe),Ht=new Set(["mouseenter","mouseleave","focus","blur"]),se=class{constructor(e,t){this.context=e;this.logger=t}extractButtonData(e,t){e.value&&(t.value=this.context.parseValue(e.value)),Array.from(e.attributes).forEach(n=>{if(n.name.startsWith("data-")&&n.name!=="data-key"){let r=n.name.slice(5);t[r]=this.context.parseValue(n.value)}})}setupEventDelegation(){let e=this.context.getWrapperElement();if(!e)return;let t=["click","submit","change","input","search","keydown","keyup","focus","blur","mouseenter","mouseleave"],n=e.getAttribute("data-lvt-id"),r=this.context.getRateLimitedHandlers();t.forEach(s=>{let a=`__lvt_delegated_${s}_${n}`,i=document[a];i&&document.removeEventListener(s,i,!1);let l=c=>{var C;let d=this.context.getWrapperElement();if(!d)return;let p=c.target;if(this.logger.debug("Event listener triggered:",s,c.target),!p)return;let u=p,f=!1;for(;u;){if(u===d){f=!0;break}u=u.parentElement}if(!f)return;let v=`lvt-on:${s}`;for(u=p;u&&u!==d.parentElement;){let E=u.getAttribute(v),y=u,F=!1;if(!E&&s==="submit"&&u instanceof HTMLFormElement){let g=u.getAttribute("lvt-persist");g&&(E=`persist:${g}`,y=u)}if(!E&&s==="click"){let g=u instanceof HTMLButtonElement?u:null;g&&g.name&&!g.disabled&&g.type!=="reset"&&g.form===null&&!g.hasAttribute("commandfor")&&(E=g.name,y=g,F=!0)}if(!E&&s==="submit"&&u instanceof HTMLFormElement&&!u.hasAttribute("lvt-form:no-intercept")){let g=u.getAttribute("lvt-form:action"),k=c.submitter;g?E=g:k instanceof HTMLButtonElement&&k.name?E=k.name:u.getAttribute("name")?E=u.getAttribute("name"):E="submit",y=u,k&&(u.__lvtSubmitter=k);let M=u.closest("dialog");M&&((C=u.getAttribute("method"))==null?void 0:C.toLowerCase())==="dialog"&&(u.__lvtCloseDialog=M)}if(E!=null&&y){if(s==="submit"&&c.preventDefault(),(s==="keydown"||s==="keyup")&&y.hasAttribute("lvt-key")){let S=y.getAttribute("lvt-key");if(S&&c.key!==S){u=u.parentElement;continue}}let g=y,k=()=>{this.logger.debug("handleAction called",{action:E,eventType:s,targetElement:g});let S={action:E,data:{}};if(g instanceof HTMLFormElement){this.logger.debug("Processing form element");let A=new FormData(g),x=Array.from(g.querySelectorAll('input[type="checkbox"][name]')),w=new Set(x.map(R=>R.name));w.forEach(R=>{S.data[R]=!1});let _=new Set(Array.from(g.querySelectorAll('input[type="password"][name]')).map(R=>R.name)),N=g.__lvtSubmitter,H=N==null?void 0:N.name;A.forEach((R,h)=>{R instanceof File||H&&h===H||(w.has(h)?(S.data[h]=!0,this.logger.debug("Converted checkbox",h,"to true")):_.has(h)?S.data[h]=R:S.data[h]=this.context.parseValue(R))});let z=g.__lvtSubmitter;z&&(this.extractButtonData(z,S.data),delete g.__lvtSubmitter),this.logger.debug("Form data collected:",S.data)}else if(s==="change"||s==="input"||s==="search"){if(g instanceof HTMLInputElement){let A=g.name||"value";S.data[A]=this.context.parseValue(g.value)}else if(g instanceof HTMLSelectElement){let A=g.name||"value";S.data[A]=this.context.parseValue(g.value)}else if(g instanceof HTMLTextAreaElement){let A=g.name||"value";S.data[A]=this.context.parseValue(g.value)}}if(F&&this.extractButtonData(y,S.data),!(g instanceof HTMLFormElement)&&!F&&Array.from(y.attributes).forEach(A=>{if(A.name.startsWith("data-")&&A.name!=="data-key"&&A.name!=="data-lvt-id"){let x=A.name.slice(5);S.data[x]=this.context.parseValue(A.value)}}),s==="submit"&&g instanceof HTMLFormElement){let x=c.submitter,w=null;x&&x.hasAttribute("lvt-form:disable-with")&&(w=x.textContent,x.disabled=!0,x.textContent=x.getAttribute("lvt-form:disable-with"),this.logger.debug("Disabled submit button")),this.context.setActiveSubmission(g,x||null,w),g.querySelectorAll('input[type="file"][lvt-upload]').forEach(N=>{let H=N.getAttribute("lvt-upload");H&&(this.logger.debug("Triggering pending uploads for:",H),this.context.triggerPendingUploads(H))}),g.dispatchEvent(new CustomEvent("lvt:pending",{detail:S})),this.logger.debug("Emitted lvt:pending event")}if(this.logger.debug("About to send message:",S),this.logger.debug("WebSocket state:",this.context.getWebSocketReadyState()),g instanceof HTMLFormElement){let A=g.querySelectorAll('input[type="file"]:not([lvt-upload])');if(Array.from(A).some(w=>w.files&&w.files.length>0)){this.logger.debug("Tier 1 file upload detected, using HTTP fetch"),this.context.sendHTTPMultipart(g,E);return}}if(this.context.send(S),this.logger.debug("send() called"),g instanceof HTMLFormElement){let A=g.__lvtCloseDialog;A&&(A.close(),delete g.__lvtCloseDialog)}},M=y.getAttribute("lvt-mod:throttle"),D=y.getAttribute("lvt-mod:debounce");if((M||D)&&s!=="search"){r.has(y)||r.set(y,new Map);let S=r.get(y),A=`${s}:${E}`,x=`__lvt_callback_${A}`,w=y;w[x]||(w[x]={current:k}),w[x].current=k;let _=S.get(A);if(!_){let N=()=>w[x].current();if(M){let H=parseInt(M,10);_=Ae(N,H)}else if(D){let H=parseInt(D,10);_=j(N,H)}_&&S.set(A,_)}_&&_()}else k();return}u=u.parentElement}};document[a]=l,document.addEventListener(s,l,!1),this.logger.debug("Registered event listener:",s,"with key:",a)})}setupWindowEventDelegation(){let e=this.context.getWrapperElement();if(!e)return;let t=["keydown","keyup","scroll","resize","focus","blur"],n=e.getAttribute("data-lvt-id"),r=this.context.getRateLimitedHandlers();t.forEach(s=>{let a=`__lvt_window_${s}_${n}`,i=window[a];i&&window.removeEventListener(s,i);let l=c=>{let d=this.context.getWrapperElement();if(!d)return;let p=`lvt-on:window:${s}`;d.querySelectorAll(Te(p)).forEach(f=>{let v=f.getAttribute(p);if(!v)return;if((s==="keydown"||s==="keyup")&&f.hasAttribute("lvt-key")){let g=f.getAttribute("lvt-key");if(g&&c.key!==g)return}let C={action:v,data:{}};Array.from(f.attributes).forEach(g=>{if(g.name.startsWith("data-")&&g.name!=="data-key"&&g.name!=="data-lvt-id"){let k=g.name.slice(5);C.data[k]=this.context.parseValue(g.value)}});let E=f.getAttribute("lvt-mod:throttle"),y=f.getAttribute("lvt-mod:debounce"),F=()=>this.context.send(C);if(E||y){r.has(f)||r.set(f,new Map);let g=r.get(f),k=`window-${s}:${v}`,M=g.get(k);if(!M){if(E){let D=parseInt(E,10);M=Ae(F,D)}else if(y){let D=parseInt(y,10);M=j(F,D)}M&&g.set(k,M)}M&&M()}else F()})};window[a]=l,window.addEventListener(s,l)})}setupClickAwayDelegation(){let e=this.context.getWrapperElement();if(!e)return;let n=`__lvt_click_away_${e.getAttribute("data-lvt-id")}`,r=document[n];r&&document.removeEventListener("click",r);let s=a=>{let i=this.context.getWrapperElement();if(!i)return;let l=a.target,c=_t.map(p=>Te(`lvt-el:${p}:on:click-away`)).join(", ");i.querySelectorAll(c).forEach(p=>{p.contains(l)||Array.from(p.attributes).forEach(u=>{if(!u.name.includes(":on:click-away"))return;let f=u.name.match(/^lvt-el:(\w+):on:click-away$/);if(!f)return;let v=Xe[f[1].toLowerCase()];v&&te(ee(p),v,u.value)})})};document[n]=s,document.addEventListener("click",s)}setupDOMEventTriggerDelegation(e){let t=this.context.getWrapperElement();if(!t)return;let n=t.getAttribute("data-lvt-id");if(!n)return;let r=`__lvt_el_delegated_${n}`,s=t[r]||new Set,a=`__lvt_el_listeners_${n}`,i=(t[a]||[]).filter(d=>d.el.isConnected),l=e||t,c=d=>{let p=new Set;for(let u of d.attributes){if(!u.name.startsWith("lvt-el:"))continue;let f=u.name.match(/^lvt-el:\w+:on:([a-z-]+)$/i);if(!f)continue;let v=f[1].toLowerCase();Ne(v)&&p.add(v)}for(let u of p)if(Ht.has(u)){let f=`__lvt_el_${u}`;if(d[f])continue;let v=()=>ne(d,u);d.addEventListener(u,v),d[f]=v,i.push({el:d,event:u,handler:v,guardKey:f})}else if(!s.has(u)){let f=u.replace(/[.*+?^${}()|[\]\\]/g,"\\$&"),v=new RegExp(`^lvt-el:\\w+:on:${f}$`,"i"),C=E=>{let y=E.target;for(;y&&y!==t;){let F=!1;for(let g of y.attributes)if(v.test(g.name)){F=!0;break}if(F){ne(y,u);return}y=y.parentElement}y===t&&ne(t,u)};t.addEventListener(u,C),s.add(u),i.push({el:t,event:u,handler:C})}};c(l),l.querySelectorAll("*").forEach(c),t[a]=i,t[r]=s}teardownDOMEventTriggerDelegation(){let e=this.context.getWrapperElement();if(!e)return;let t=e.getAttribute("data-lvt-id");if(!t)return;let n=`__lvt_el_listeners_${t}`,r=e[n];r&&(r.forEach(({el:a,event:i,handler:l,guardKey:c})=>{a.removeEventListener(i,l),c&&delete a[c]}),delete e[n]);let s=`__lvt_el_delegated_${t}`;delete e[s]}setupFocusTrapDelegation(){let e=this.context.getWrapperElement();if(!e)return;let n=`__lvt_focus_trap_${e.getAttribute("data-lvt-id")}`,r=document[n];r&&document.removeEventListener("keydown",r);let s=i=>{let l=["a[href]:not([disabled])","button:not([disabled])","textarea:not([disabled])",'input:not([disabled]):not([type="hidden"])',"select:not([disabled])",'[tabindex]:not([tabindex="-1"]):not([disabled])','[contenteditable="true"]'].join(", ");return Array.from(i.querySelectorAll(l)).filter(c=>{let d=c,p=window.getComputedStyle(d),u=p.display!=="none",f=p.visibility!=="hidden",v=d.offsetParent!==null||p.position==="fixed"||p.position==="absolute"||typeof process!="undefined"&&!1;return u&&f&&v})},a=i=>{if(i.key!=="Tab")return;let l=this.context.getWrapperElement();if(!l)return;let c=l.querySelectorAll("[lvt-focus-trap]"),d=null;if(c.forEach(v=>{v.contains(document.activeElement)&&(!d||v.contains(d))&&(d=v)}),d||c.forEach(v=>{let C=v,E=window.getComputedStyle(C);E.display!=="none"&&E.visibility!=="hidden"&&(d=v)}),!d)return;let p=s(d);if(p.length===0)return;let u=p[0],f=p[p.length-1];i.shiftKey?document.activeElement===u&&(i.preventDefault(),f.focus()):document.activeElement===f&&(i.preventDefault(),u.focus())};document[n]=a,document.addEventListener("keydown",a),this.logger.debug("Focus trap delegation set up")}setupAutofocusDelegation(){let e=this.context.getWrapperElement();if(!e)return;let n=`__lvt_autofocus_observer_${e.getAttribute("data-lvt-id")}`,r=e[n];r&&r.disconnect();let s=()=>{let i=this.context.getWrapperElement();if(!i)return;i.querySelectorAll("[lvt-autofocus]").forEach(c=>{let d=c,p=window.getComputedStyle(d),u=p.display!=="none",f=p.visibility!=="hidden",v=d.offsetParent!==null||p.position==="fixed"||p.position==="absolute"||d.tagName==="BODY"||typeof process!="undefined"&&!1,C=u&&f&&v,E=d.getAttribute("data-lvt-autofocused")==="true";C&&!E?(d.setAttribute("data-lvt-autofocused","true"),requestAnimationFrame(()=>{d.focus(),this.logger.debug("Autofocused element:",d.tagName,d.id||d.getAttribute("name"))})):!C&&E&&d.removeAttribute("data-lvt-autofocused")})};s();let a=new MutationObserver(i=>{let l=!1;i.forEach(c=>{c.type==="childList"&&c.addedNodes.length>0&&c.addedNodes.forEach(d=>{d instanceof Element&&(d.hasAttribute("lvt-autofocus")||d.querySelector("[lvt-autofocus]"))&&(l=!0)}),c.type==="attributes"&&(c.target.hasAttribute("lvt-autofocus")||c.attributeName==="hidden"||c.attributeName==="style"||c.attributeName==="class")&&(l=!0)}),l&&s()});a.observe(e,{childList:!0,subtree:!0,attributes:!0,attributeFilter:["hidden","style","class","lvt-autofocus"]}),e[n]=a,this.logger.debug("Autofocus delegation set up")}};var ie=class{constructor(e,t){this.context=e;this.logger=t;this.popstateListener=null}setup(e){let n=`__lvt_link_intercept_${e.getAttribute("data-lvt-id")}`,r=document[n];r&&document.removeEventListener("click",r);let s=a=>{var c;let i=(c=a.target)==null?void 0:c.closest("a[href]");if(!i)return;let l=this.context.getWrapperElement();!l||!l.contains(i)||this.shouldSkip(i)||(a.preventDefault(),this.navigate(i.href))};document.addEventListener("click",s),document[n]=s,this.popstateListener||(this.popstateListener=()=>{this.navigate(window.location.href,!1)},window.addEventListener("popstate",this.popstateListener))}shouldSkip(e){if(e.origin!==window.location.origin||e.target&&e.target!=="_self"||e.hasAttribute("download")||e.hasAttribute("lvt-nav:no-intercept")||e.pathname===window.location.pathname&&e.hash)return!0;let t=e.protocol;return t!=="http:"&&t!=="https:"}async navigate(e,t=!0){try{let n=await fetch(e,{credentials:"include",headers:{Accept:"text/html"}});if(!n.ok){window.location.href=e;return}let r=await n.text();this.context.handleNavigationResponse(r),t&&window.history.pushState(null,"",e)}catch(n){window.location.href=e}}};var oe=class{constructor(e,t){this.context=e;this.logger=t;this.infiniteScrollObserver=null;this.mutationObserver=null}setupInfiniteScrollObserver(){if(!this.context.getWrapperElement())return;let t=document.getElementById("scroll-sentinel");t&&(this.infiniteScrollObserver&&this.infiniteScrollObserver.disconnect(),this.infiniteScrollObserver=new IntersectionObserver(n=>{n[0].isIntersecting&&(this.logger.debug("Sentinel visible, sending load_more action"),this.context.send({action:"load_more"}))},{rootMargin:"200px"}),this.infiniteScrollObserver.observe(t),this.logger.debug("Observer set up successfully"))}setupInfiniteScrollMutationObserver(){let e=this.context.getWrapperElement();e&&(this.mutationObserver&&this.mutationObserver.disconnect(),this.mutationObserver=new MutationObserver(()=>{this.setupInfiniteScrollObserver()}),this.mutationObserver.observe(e,{childList:!0,subtree:!0}),this.logger.debug("MutationObserver set up successfully"))}teardown(){this.infiniteScrollObserver&&(this.infiniteScrollObserver.disconnect(),this.infiniteScrollObserver=null),this.mutationObserver&&(this.mutationObserver.disconnect(),this.mutationObserver=null)}};var ae=class{constructor(){this.bar=null}show(){if(this.bar)return;let e=document.createElement("div");if(e.style.cssText=`
15
15
  position: fixed;
16
16
  top: 0;
17
17
  left: 0;
@@ -26,7 +26,7 @@
26
26
  0% { background-position: 200% 0; }
27
27
  100% { background-position: -200% 0; }
28
28
  }
29
- `,document.head.appendChild(t)}document.body.insertBefore(e,document.body.firstChild),this.bar=e}hide(){this.bar&&(this.bar.parentNode&&this.bar.parentNode.removeChild(this.bar),this.bar=null)}};var le=class{disable(e){if(!e)return;e.querySelectorAll("form").forEach(n=>{n.querySelectorAll("input, textarea, select, button").forEach(s=>{s.disabled=!0})})}enable(e){if(!e)return;e.querySelectorAll("form").forEach(n=>{n.querySelectorAll("input, textarea, select, button").forEach(s=>{s.disabled=!1})})}};function Ye(o){return typeof structuredClone=="function"?structuredClone(o):JSON.parse(JSON.stringify(o))}function _t(o){return o!=null&&typeof o=="object"&&Array.isArray(o.d)&&Array.isArray(o.s)}function Se(o,e=0){if(e>50||o==null||typeof o!="object"||Array.isArray(o))return!1;if(_t(o))return!0;for(let n of Object.keys(o))if(/^\d+$/.test(n)){let r=o[n];if(r!=null&&typeof r=="object"&&!Array.isArray(r)&&Se(r,e+1))return!0}return!1}function Ht(o,e){if(!e.s||!Array.isArray(e.s))return!1;if(Se(o)&&!Se(e))return!0;for(let t of Object.keys(o))if(/^\d+$/.test(t)&&!(t in e))return!0;return!1}var ce=class{constructor(e){this.logger=e;this.treeState={};this.rangeState={};this.rangeIdKeys={}}applyUpdate(e){let t=!1;for(let[r,s]of Object.entries(e))if(Array.isArray(s)&&s.length>0&&Array.isArray(s[0])&&typeof s[0][0]=="string"){let i=this.treeState[r];i&&typeof i=="object"&&!Array.isArray(i)&&Array.isArray(i.d)&&Array.isArray(i.s)?(this.treeState[r]=Ye(i),this.applyDifferentialOpsToRange(this.treeState[r],s,r)):this.treeState[r]=s,t=!0}else{let i=this.treeState[r],l=typeof s=="object"&&s!==null&&!Array.isArray(s)?this.deepMergeTreeNodes(i,s,r):s;JSON.stringify(i)!==JSON.stringify(l)&&(this.treeState[r]=l,t=!0)}return{html:this.reconstructFromTree(this.treeState,""),changed:t}}reset(){this.treeState={},this.rangeState={},this.rangeIdKeys={}}getTreeState(){return{...this.treeState}}getStaticStructure(){return this.treeState.s||null}deepMergeTreeNodes(e,t,n=""){var s;if(typeof t!="object"||t===null||Array.isArray(t)||typeof e!="object"||e===null||Array.isArray(e))return t;if(Ht(e,t))return this.logger.debug(`[deepMerge] Structure transition at path ${n}, replacing instead of merging`),t;let r={...e};for(let[a,i]of Object.entries(t)){let l=n?`${n}.${a}`:a,c=Array.isArray(i)&&i.length>0&&Array.isArray(i[0])&&typeof i[0][0]=="string",d=r[a]&&typeof r[a]=="object"&&!Array.isArray(r[a])&&Array.isArray(r[a].d)&&Array.isArray(r[a].s);c&&d?(r[a]=Ye(r[a]),this.logger.debug(`[deepMerge] Applying diff ops at path ${l}`,{ops:i,rangeItems:(s=r[a].d)==null?void 0:s.length}),this.applyDifferentialOpsToRange(r[a],i,l)):typeof i=="object"&&i!==null&&!Array.isArray(i)&&typeof r[a]=="object"&&r[a]!==null&&!Array.isArray(r[a])?r[a]=this.deepMergeTreeNodes(r[a],i,l):r[a]=i}return r}applyDifferentialOpsToRange(e,t,n){if(!e||typeof e!="object"||!Array.isArray(e.d)||!Array.isArray(e.s)){this.logger.error(`[applyDiffOpsToRange] Invalid rangeStructure at path ${n}`,{rangeStructure:e});return}let r=e.d;this.rangeState[n]||(this.rangeState[n]={items:r,statics:e.s,staticsMap:e.sm}),e.m&&typeof e.m=="object"&&typeof e.m.idKey=="string"&&(this.rangeIdKeys[n]=e.m.idKey),this.logger.debug(`[applyDiffOpsToRange] path=${n}, idKey=${this.rangeIdKeys[n]}, items=${r.length}, ops=${t.length}`);for(let s of t){if(!Array.isArray(s)||s.length<2)continue;switch(s[0]){case"r":{let i=s[1],l=this.findItemIndexByKey(r,i,e.s,n);this.logger.debug(`[applyDiffOpsToRange] Remove: key=${i}, index=${l}, total=${r.length}`),l>=0?(r.splice(l,1),this.logger.debug(`[applyDiffOpsToRange] After removal: ${r.length} items`)):this.logger.debug(`[applyDiffOpsToRange] Remove failed: key ${i} not found`);break}case"u":{let i=this.findItemIndexByKey(r,s[1],e.s,n),l=s[2];i>=0&&l&&(r[i]=this.mergeRangeItem(r[i],l,n));break}case"a":{let i=Array.isArray(s[1])?s[1]:[s[1]];s[2]&&(e.s=s[2]),r.push(...i),s[3]&&typeof s[3]=="object"&&s[3].idKey&&(this.rangeIdKeys[n]=s[3].idKey);break}case"p":{let i=Array.isArray(s[1])?s[1]:[s[1]];s[2]&&(e.s=s[2]),r.unshift(...i);break}case"i":{let i=this.findItemIndexByKey(r,s[1],e.s,n);if(i>=0){let l=Array.isArray(s[2])?s[2]:[s[2]];r.splice(i+1,0,...l)}break}case"o":{let i=s[1],l=[],c=new Map;for(let d of r){let p=this.getItemKey(d,e.s,n);p&&c.set(p,d)}for(let d of i){let p=c.get(d);p&&l.push(p)}r.length=0,r.push(...l);break}default:break}}this.rangeState[n]={items:r,statics:e.s,staticsMap:e.sm}}reconstructFromTree(e,t){if(e.s&&Array.isArray(e.s)){let n="";for(let r=0;r<e.s.length;r++){let s=e.s[r];if(n+=s,r<e.s.length-1){let a=r.toString();if(e[a]!==void 0){let i=t?`${t}.${a}`:a;n+=this.renderValue(e[a],a,i)}}}return n=n.replace(/<root>/g,"").replace(/<\/root>/g,""),n}return this.renderValue(e,"",t)}renderValue(e,t,n){if(e==null||typeof e=="string"&&e.startsWith("{{")&&e.endsWith("}}"))return"";if(typeof e=="object"&&!Array.isArray(e)){if(e.d&&Array.isArray(e.d)&&e.s&&Array.isArray(e.s)){let a=n||t||"";return a&&(this.rangeState[a]={items:e.d,statics:e.s,staticsMap:e.sm},e.m&&typeof e.m=="object"&&typeof e.m.idKey=="string"&&(this.rangeIdKeys[a]=e.m.idKey)),this.renderRangeStructure(e,t,n)}if("s"in e&&Array.isArray(e.s))return this.reconstructFromTree(e,n||"");let r=Object.keys(e),s=r.filter(a=>/^\d+$/.test(a)).sort((a,i)=>parseInt(a)-parseInt(i));if(s.length>0&&s.length===r.length)return s.map(a=>{let i=n?`${n}.${a}`:a;return this.renderValue(e[a],a,i)}).join("")}return Array.isArray(e)?e.length>0&&Array.isArray(e[0])&&typeof e[0][0]=="string"?this.applyDifferentialOperations(e,n):e.map((r,s)=>{let a=s.toString(),i=n?`${n}.${a}`:a;return typeof r=="object"&&r&&r.s?this.reconstructFromTree(r,i):this.renderValue(r,a,i)}).join(""):typeof e=="object"?(this.logger.debug("Skipping plain object value (not a tree node) - this is normal for state-only data"),""):String(e)}renderRangeStructure(e,t,n){let{d:r,s,sm:a}=e;if(!r||!Array.isArray(r))return"";if(r.length===0){if(e.else){let l="else",c=n?`${n}.else`:"else";return this.renderValue(e.else,l,c)}return""}let i=a&&typeof a=="object";return s&&Array.isArray(s)?r.map((l,c)=>{let d=s;i&&l._sk&&a[l._sk]&&(d=a[l._sk]);let p="";for(let u=0;u<d.length;u++)if(p+=d[u],u<d.length-1){let f=u.toString();if(l[f]!==void 0){let v=n?`${n}.${c}.${f}`:`${c}.${f}`;p+=this.renderValue(l[f],f,v)}}return p}).join(""):r.map((l,c)=>{let d=c.toString(),p=n?`${n}.${d}`:d;return this.renderValue(l,d,p)}).join("")}applyDifferentialOperations(e,t){if(!t||!this.rangeState[t])return"";let n=this.rangeState[t],r=[...n.items],s=n.statics;for(let i of e){if(!Array.isArray(i)||i.length<2)continue;switch(i[0]){case"r":{let c=this.findItemIndexByKey(r,i[1],s,t);c>=0&&r.splice(c,1);break}case"u":{let c=this.findItemIndexByKey(r,i[1],s,t),d=i[2];c>=0&&d&&(r[c]=this.mergeRangeItem(r[c],d,t||""));break}case"a":{this.addItemsToRange(r,i[1],i[2],n,!1),i[3]&&typeof i[3]=="object"&&i[3].idKey&&(this.rangeIdKeys[t||""]=i[3].idKey);break}case"p":{this.addItemsToRange(r,i[1],i[2],n,!0);break}case"i":{let c=this.findItemIndexByKey(r,i[1],s,t);if(c>=0){let d=Array.isArray(i[2])?i[2]:[i[2]];r.splice(c+1,0,...d)}break}case"o":{let c=i[1],d=[],p=new Map;for(let u of r){let f=this.getItemKey(u,s,t);f&&p.set(f,u)}for(let u of c){let f=p.get(u);f&&d.push(f)}r.length=0,r.push(...d);break}default:break}}this.rangeState[t]={items:r,statics:n.statics,staticsMap:n.staticsMap},this.treeState[t]={d:r,s:n.statics,sm:n.staticsMap};let a=this.getCurrentRangeStructure(t);return a&&a.s?this.renderItemsWithStatics(r,a.s,a.sm,t):r.map(i=>this.renderValue(i)).join("")}getCurrentRangeStructure(e){if(this.rangeState[e])return{d:this.rangeState[e].items,s:this.rangeState[e].statics,sm:this.rangeState[e].staticsMap};let t=this.treeState[e];return t&&typeof t=="object"&&t.s?t:null}renderItemsWithStatics(e,t,n,r){let s=e.map((a,i)=>{let l=t;n&&typeof n=="object"&&a._sk&&n[a._sk]&&(l=n[a._sk]);let c="";for(let d=0;d<l.length;d++)if(c+=l[d],d<l.length-1){let p=d.toString();if(a[p]!==void 0){let u=r?`${r}.${i}.${p}`:`${i}.${p}`;c+=this.renderValue(a[p],p,u)}}return c}).join("");return this.logger.isDebugEnabled()&&(this.logger.debug("[renderItemsWithStatics] statics:",t),this.logger.debug("[renderItemsWithStatics] items count:",e.length),this.logger.debug("[renderItemsWithStatics] result snippet:",s.substring(0,200))),s}addItemsToRange(e,t,n,r,s){if(n&&(r.statics=n),!t)return;let a=Array.isArray(t)?t:[t];s?e.unshift(...a):e.push(...a)}getItemKey(e,t,n){if(e._k&&typeof e._k=="string")return e._k;if(!n||!this.rangeIdKeys[n])return null;let r=this.rangeIdKeys[n];return e[r]||null}findItemIndexByKey(e,t,n,r){return e.findIndex(s=>this.getItemKey(s,n,r)===t)}mergeRangeItem(e,t,n){return this.deepMergeTreeNodes(e,t,`${n}.item`)}};var de=class{constructor(){this.activeForm=null;this.activeButton=null;this.originalButtonText=null}setActiveSubmission(e,t,n){if(this.activeForm=e,this.activeButton=t,this.originalButtonText=n,e){e.setAttribute("aria-busy","true");let r=e.querySelector("fieldset");r&&(r.disabled=!0)}}handleResponse(e){this.activeForm&&this.activeForm.dispatchEvent(new CustomEvent("lvt:done",{detail:e})),e.success?this.handleSuccess(e):this.handleError(e),this.restoreFormState()}reset(){this.restoreFormState()}handleSuccess(e){if(!this.activeForm)return;this.activeForm.dispatchEvent(new CustomEvent("lvt:success",{detail:e}));let t=this.activeForm.closest("dialog");t&&t.open&&t.close(),this.activeForm.hasAttribute("lvt-form:preserve")||this.activeForm.reset()}handleError(e){this.activeForm&&this.activeForm.dispatchEvent(new CustomEvent("lvt:error",{detail:e}))}restoreFormState(){if(this.activeForm){this.activeForm.removeAttribute("aria-busy");let e=this.activeForm.querySelector("fieldset");e&&(e.disabled=!1)}this.activeButton&&this.originalButtonText!==null&&(this.activeButton.disabled=!1,this.activeButton.textContent=this.originalButtonText),this.activeForm=null,this.activeButton=null,this.originalButtonText=null}};var ue=class{constructor(e,t){this.context=e;this.logger=t;this.boundFields=new Map;this.enabled=!1;this.wiredElements=new Set;this.elementCleanups=new Map}setCapabilities(e){this.enabled=e.includes("change"),this.logger.debug("Capabilities received, change auto-wiring:",this.enabled?"enabled":"disabled")}analyzeStatics(e){let t=this.boundFields.size;this.walkTree(e),this.boundFields.size>t&&this.logger.debug(`Detected ${this.boundFields.size} bound field(s):`,Array.from(this.boundFields.keys()))}wireElements(){if(!this.enabled)return;let e=this.context.getWrapperElement();if(!e)return;for(let n of this.elementCleanups.keys())n.isConnected||(this.elementCleanups.get(n)(),this.elementCleanups.delete(n),this.wiredElements.delete(n));for(let[n,r]of this.boundFields){let s=this.escapeCSSSelector(n),a=e.querySelectorAll(`[name="${s}"]`);for(let i of a){if(this.wiredElements.has(i)||i.hasAttribute("lvt-input")||i.hasAttribute("lvt-change"))continue;let l=i.closest("form");l&&(l.hasAttribute("lvt-change")||l.hasAttribute("lvt-form:no-intercept"))||i instanceof HTMLInputElement&&(i.type==="hidden"||i.type==="submit"||i.type==="button")||i instanceof HTMLButtonElement||(this.attachListener(i,n,r),this.wiredElements.add(i))}}let t=e.querySelectorAll("select[name]");for(let n of t){if(this.wiredElements.has(n)||n.hasAttribute("lvt-input")||n.hasAttribute("lvt-change"))continue;let r=n.closest("form");if(r&&(r.hasAttribute("lvt-change")||r.hasAttribute("lvt-form:no-intercept")))continue;let s=n.getAttribute("name");s&&(this.attachListener(n,s,"value"),this.wiredElements.add(n))}}teardown(){for(let e of this.elementCleanups.values())e();this.elementCleanups.clear(),this.wiredElements.clear(),this.boundFields.clear(),this.enabled=!1}getBoundFields(){return this.boundFields}isEnabled(){return this.enabled}walkTree(e){if(!(!e||typeof e!="object"||Array.isArray(e))){e.s&&Array.isArray(e.s)&&this.analyzeStaticsArray(e.s);for(let t of Object.keys(e))if(/^\d+$/.test(t)){let n=e[t];n&&typeof n=="object"&&!Array.isArray(n)&&this.walkTree(n)}if(e.d&&Array.isArray(e.d))for(let t of e.d)t&&typeof t=="object"&&!Array.isArray(t)&&this.walkTree(t)}}analyzeStaticsArray(e){for(let t=0;t<e.length-1;t++){let n=e[t],r=e[t+1],s=this.detectBinding(n,r);s&&!this.boundFields.has(s.fieldName)&&this.boundFields.set(s.fieldName,s.bindingType)}}detectBinding(e,t){let n=this.detectValueBinding(e);return n?{fieldName:n,bindingType:"value"}:(n=this.detectTextareaBinding(e,t),n?{fieldName:n,bindingType:"content"}:(n=this.detectAttributeBinding(e,t),n?{fieldName:n,bindingType:"attribute"}:null))}escapeCSSSelector(e){return typeof CSS!="undefined"&&typeof CSS.escape=="function"?CSS.escape(e):e.replace(/\\/g,"\\\\").replace(/"/g,'\\"')}extractUnclosedTag(e){let t=e.lastIndexOf("<"),n=e.lastIndexOf(">");return t===-1||t<=n?null:e.substring(t)}extractNameFromTag(e){let t=e.match(/\sname="([^"]+)"/);return t?t[1]:null}detectValueBinding(e){if(!e.endsWith('value="'))return null;let t=this.extractUnclosedTag(e);return t?this.extractNameFromTag(t):null}detectTextareaBinding(e,t){if(!t.startsWith("</textarea"))return null;let n=e.match(/<textarea[^>]*\sname="([^"]+)"[^>]*>$/);return n?n[1]:null}detectAttributeBinding(e,t){if(!e.endsWith(" ")||!/^[a-zA-Z>/\s]/.test(t))return null;let n=this.extractUnclosedTag(e);if(!n||!/^<input\s/i.test(n))return null;let r=n.match(/\stype="([^"]+)"/i);if(!r)return null;let s=r[1].toLowerCase();return s!=="checkbox"&&s!=="radio"?null:this.extractNameFromTag(n)}attachListener(e,t,n){let r=e.getAttribute("lvt-debounce"),s=r?parseInt(r,10):NaN,a=Number.isNaN(s)||s<0?300:s,l=j(()=>{if(!this.enabled)return;let d=n==="attribute"&&e.type==="checkbox"?e.checked:e.value;this.context.send({action:"change",data:{[t]:d}})},a),c=n==="attribute"||e instanceof HTMLSelectElement?"change":"input";e.addEventListener(c,l),this.elementCleanups.set(e,()=>{e.removeEventListener(c,l)}),this.logger.debug(`Auto-wired ${c} listener on [name="${t}"] (debounce: ${a}ms)`)}};var Le=class{constructor(e){this.options=e;this.socket=null;this.reconnectTimer=null;this.manuallyClosed=!1;this.reconnectAttempts=0}connect(){this.manuallyClosed=!1,this.clearReconnectTimer(),this.socket=new WebSocket(this.options.url);let e=this.socket;e.onopen=()=>{var t,n;this.reconnectAttempts=0,(n=(t=this.options).onOpen)==null||n.call(t,e)},e.onmessage=t=>{var n,r;(r=(n=this.options).onMessage)==null||r.call(n,t)},e.onclose=t=>{var n,r;(r=(n=this.options).onClose)==null||r.call(n,t),!this.manuallyClosed&&this.options.autoReconnect&&this.scheduleReconnect()},e.onerror=t=>{var n,r;(r=(n=this.options).onError)==null||r.call(n,t)}}send(e){this.socket&&this.socket.readyState===1&&this.socket.send(e)}disconnect(){this.manuallyClosed=!0,this.clearReconnectTimer(),this.socket&&(this.socket.close(),this.socket=null)}getSocket(){return this.socket}scheduleReconnect(){var i,l,c,d,p;this.clearReconnectTimer();let e=(i=this.options.maxReconnectAttempts)!=null?i:10;if(e>0&&this.reconnectAttempts>=e){(c=(l=this.options).onReconnectFailed)==null||c.call(l);return}this.reconnectAttempts++;let t=(d=this.options.reconnectDelay)!=null?d:1e3,n=(p=this.options.maxReconnectDelay)!=null?p:16e3,r=t*Math.pow(2,this.reconnectAttempts-1),s=Math.random()*1e3,a=Math.min(r+s,n);this.reconnectTimer=window.setTimeout(()=>{var u,f;(f=(u=this.options).onReconnectAttempt)==null||f.call(u,this.reconnectAttempts,a),this.connect()},a)}clearReconnectTimer(){this.reconnectTimer!==null&&(clearTimeout(this.reconnectTimer),this.reconnectTimer=null)}},pe=class{constructor(e){this.config=e;this.transport=null}async connect(){let e=this.getLiveUrl();return await It(e,this.config.logger)?(this.transport=new Le({url:this.getWebSocketUrl(),autoReconnect:this.config.options.autoReconnect,reconnectDelay:this.config.options.reconnectDelay,maxReconnectDelay:16e3,maxReconnectAttempts:10,onOpen:()=>{this.config.onConnected()},onMessage:n=>{try{let r=JSON.parse(n.data);this.config.onMessage(r,n)}catch(r){this.config.logger.error("Failed to parse WebSocket message:",r)}},onClose:()=>{this.config.onDisconnected()},onReconnectAttempt:(n,r)=>{var s,a;(a=(s=this.config).onReconnectAttempt)==null||a.call(s,n,r)},onReconnectFailed:()=>{var n,r;(r=(n=this.config).onReconnectFailed)==null||r.call(n)},onError:n=>{var r,s;(s=(r=this.config).onError)==null||s.call(r,n)}}),this.transport.connect(),{usingWebSocket:!0}):{usingWebSocket:!1,initialState:await Nt(e,this.config.logger)}}disconnect(){var e;(e=this.transport)==null||e.disconnect(),this.transport=null}send(e){var t;(t=this.transport)==null||t.send(e)}getReadyState(){var e,t;return(t=(e=this.transport)==null?void 0:e.getSocket())==null?void 0:t.readyState}getSocket(){var e,t;return(t=(e=this.transport)==null?void 0:e.getSocket())!=null?t:null}getWebSocketUrl(){let e=this.config.options.liveUrl||"/live",t=this.config.options.wsUrl;return t||`${window.location.protocol==="https:"?"wss:":"ws:"}//${window.location.host}${e}`}getLiveUrl(){return this.config.options.liveUrl||window.location.pathname+window.location.search}};async function It(o,e){try{let n=(await fetch(o,{method:"HEAD"})).headers.get("X-LiveTemplate-WebSocket");return n?n==="enabled":!0}catch(t){return e==null||e.warn("Failed to check WebSocket availability:",t),!0}}async function Nt(o,e){try{let t=await fetch(o,{method:"GET",credentials:"include",headers:{Accept:"application/json"}});if(!t.ok)throw new Error(`Failed to fetch initial state: ${t.status}`);return await t.json()}catch(t){return e==null||e.warn("Failed to fetch initial state:",t),null}}var ge=class{async upload(e,t,n){let{file:r}=e;e.abortController=new AbortController;try{let s=new XMLHttpRequest;s.upload.addEventListener("progress",i=>{i.lengthComputable&&(e.bytesUploaded=i.loaded,e.progress=Math.round(i.loaded/i.total*100),n&&n(e))}),e.abortController.signal.addEventListener("abort",()=>{s.abort()});let a=new Promise((i,l)=>{s.addEventListener("load",()=>{s.status>=200&&s.status<300?(e.done=!0,e.progress=100,i()):l(new Error(`S3 upload failed with status ${s.status}: ${s.statusText}`))}),s.addEventListener("error",()=>{l(new Error("S3 upload failed: Network error"))}),s.addEventListener("abort",()=>{l(new Error("S3 upload cancelled"))})});if(s.open("PUT",t.url),t.headers)for(let[i,l]of Object.entries(t.headers))s.setRequestHeader(i,l);s.send(r),await a}catch(s){throw e.error=s instanceof Error?s.message:String(s),s}}};var fe=class{constructor(e,t={}){this.sendMessage=e;this.entries=new Map;this.pendingFiles=new Map;this.autoUploadConfig=new Map;this.uploaders=new Map;this.inputHandlers=new WeakMap;this.chunkSize=t.chunkSize||256*1024,this.onProgress=t.onProgress,this.onComplete=t.onComplete,this.onError=t.onError,this.uploaders.set("s3",new ge)}initializeFileInputs(e){e.querySelectorAll('input[type="file"][lvt-upload]').forEach(n=>{let r=n.getAttribute("lvt-upload");if(!r)return;let s=this.inputHandlers.get(n);s&&n.removeEventListener("change",s);let a=i=>{let l=i.target.files;!l||l.length===0||this.startUpload(r,Array.from(l))};n.addEventListener("change",a),this.inputHandlers.set(n,a)})}async startUpload(e,t){this.pendingFiles.set(e,t);let n=t.map(s=>({name:s.name,type:s.type||"application/octet-stream",size:s.size})),r={action:"upload_start",upload_name:e,files:n};this.sendMessage(r)}async handleUploadStartResponse(e){let{upload_name:t,entries:n}=e;n.length>0&&this.autoUploadConfig.set(t,n[0].auto_upload);let r=this.pendingFiles.get(t);if(!r){console.error(`No pending files found for upload: ${t}`);return}this.pendingFiles.delete(t);let s=new Map;for(let i of r)s.set(i.name,i);let a=[];for(let i of n){let l=s.get(i.client_name);if(!l){console.warn(`No file found for entry ${i.entry_id} (client_name: ${i.client_name})`);continue}let c={id:i.entry_id,file:l,uploadName:t,progress:0,bytesUploaded:0,valid:i.valid,done:!1,error:i.error,external:i.external};if(this.entries.set(c.id,c),a.push(c),!i.valid){this.onError&&i.error&&this.onError(c,i.error);continue}i.auto_upload&&(i.external?this.uploadExternal(c,i.external):this.uploadChunked(c))}}async uploadExternal(e,t){try{let n=this.uploaders.get(t.uploader);if(!n)throw new Error(`Unknown uploader: ${t.uploader}`);await n.upload(e,t,this.onProgress);let r={action:"upload_complete",upload_name:e.uploadName,entry_ids:[e.id]};this.sendMessage(r),this.onComplete&&this.onComplete(e.uploadName,[e]),this.clearFileInput(e.uploadName),this.cleanupEntries(e.uploadName)}catch(n){let r=n instanceof Error?n.message:String(n);e.error=r,this.onError&&this.onError(e,r),this.cleanupEntries(e.uploadName)}}async uploadChunked(e){let{file:t,id:n}=e,r=0;e.abortController=new AbortController;try{for(;r<t.size;){if(e.abortController.signal.aborted)throw new Error("Upload cancelled");let a=Math.min(r+this.chunkSize,t.size),i=t.slice(r,a),l=await this.fileToBase64(i),c={action:"upload_chunk",entry_id:n,chunk_base64:l,offset:r,total:t.size};this.sendMessage(c),r=a,e.bytesUploaded=r,e.progress=Math.round(r/t.size*100),this.onProgress&&this.onProgress(e)}e.done=!0;let s={action:"upload_complete",upload_name:e.uploadName,entry_ids:[n]};this.sendMessage(s),this.onComplete&&this.onComplete(e.uploadName,[e]),this.clearFileInput(e.uploadName),this.cleanupEntries(e.uploadName)}catch(s){let a=s instanceof Error?s.message:String(s);e.error=a,this.onError&&this.onError(e,a),this.cleanupEntries(e.uploadName)}}handleProgressMessage(e){let t=this.entries.get(e.entry_id);t&&(t.progress=e.progress,t.bytesUploaded=e.bytes_recv,this.onProgress&&this.onProgress(t))}cancelUpload(e){let t=this.entries.get(e);t&&(t.abortController&&t.abortController.abort(),this.sendMessage({action:"cancel_upload",entry_id:e}),this.entries.delete(e))}getEntries(e){let t=[];for(let n of this.entries.values())n.uploadName===e&&t.push(n);return t}triggerPendingUploads(e){let t=[];for(let n of this.entries.values())n.uploadName===e&&n.progress===0&&!n.done&&!n.error&&t.push(n);for(let n of t)n.external?this.uploadExternal(n,n.external):this.uploadChunked(n)}registerUploader(e,t){this.uploaders.set(e,t)}clearFileInput(e){document.querySelectorAll(`input[type="file"][lvt-upload="${e}"]`).forEach(n=>{n.value=""})}cleanupEntries(e,t=5e3){setTimeout(()=>{let n=[];for(let[r,s]of this.entries)e&&s.uploadName!==e||(s.done||s.error)&&n.push(r);for(let r of n)this.entries.delete(r)},t)}fileToBase64(e){return new Promise((t,n)=>{let r=new FileReader;r.onload=()=>{let a=r.result.split(",")[1];t(a)},r.onerror=n,r.readAsDataURL(e)})}};var Je={silent:0,error:1,warn:2,info:3,debug:4},Qe="LiveTemplate",Me=class o{constructor(e,t=[],n=console){this.state=e;this.scope=t;this.sink=n}setLevel(e){this.state.level=e}getLevel(){return this.state.level}child(e){return new o(this.state,[...this.scope,e],this.sink)}isDebugEnabled(){return this.shouldLog("debug")}error(...e){this.log("error","error",e)}warn(...e){this.log("warn","warn",e)}info(...e){this.log("info","info",e)}debug(...e){this.log("debug","debug",e)}log(e,t,n){if(!this.shouldLog(e))return;(this.sink[t]||console[t]||console.log).apply(this.sink,[this.formatPrefix(),...n])}shouldLog(e){return Je[e]<=Je[this.state.level]}formatPrefix(){return this.scope.length===0?`[${Qe}]`:`[${Qe}:${this.scope.join(":")}]`}};function xe(o={}){var n,r;let e={level:(n=o.level)!=null?n:"info"},t=Array.isArray(o.scope)?o.scope:o.scope?[o.scope]:[];return new Me(e,t,(r=o.sink)!=null?r:console)}async function Ze(o,e){try{let t=globalThis==null?void 0:globalThis.require;if(typeof t=="function"){let s=t("fs"),a=JSON.parse(s.readFileSync(e,"utf8"));return o.applyUpdate(a)}let r=await(await fetch(e)).json();return o.applyUpdate(r)}catch(t){throw new Error(`Failed to load update from ${e}: ${t}`)}}function et(o,e){let t=[],n=c=>c.replace(/\s+/g," ").replace(/>\s+</g,"><").trim(),r=n(o),s=n(e);if(r===s)return{match:!0,differences:[]};let a=r.split(`
29
+ `,document.head.appendChild(t)}document.body.insertBefore(e,document.body.firstChild),this.bar=e}hide(){this.bar&&(this.bar.parentNode&&this.bar.parentNode.removeChild(this.bar),this.bar=null)}};var le=class{disable(e){if(!e)return;e.querySelectorAll("form").forEach(n=>{n.querySelectorAll("input, textarea, select, button").forEach(s=>{s.disabled=!0})})}enable(e){if(!e)return;e.querySelectorAll("form").forEach(n=>{n.querySelectorAll("input, textarea, select, button").forEach(s=>{s.disabled=!1})})}};var Ye=!1;function It(o){let e=o.target;if(!e||!(e instanceof Element))return;let t=e.closest("button[commandfor]");if(!t||t.disabled)return;let n=t.getAttribute("commandfor");if(!n)return;let r=t.getAttribute("command"),s=document.getElementById(n);!s||!(s instanceof HTMLDialogElement)||(r==="show-modal"&&!s.open?s.showModal():r==="close"&&s.open&&s.close())}function Je(){"commandForElement"in HTMLButtonElement.prototype||Ye||(Ye=!0,document.addEventListener("click",It))}function Qe(o){return typeof structuredClone=="function"?structuredClone(o):JSON.parse(JSON.stringify(o))}function Rt(o){return o!=null&&typeof o=="object"&&Array.isArray(o.d)&&Array.isArray(o.s)}function Se(o,e=0){if(e>50||o==null||typeof o!="object"||Array.isArray(o))return!1;if(Rt(o))return!0;for(let n of Object.keys(o))if(/^\d+$/.test(n)){let r=o[n];if(r!=null&&typeof r=="object"&&!Array.isArray(r)&&Se(r,e+1))return!0}return!1}function Dt(o,e){if(!e.s||!Array.isArray(e.s))return!1;if(Se(o)&&!Se(e))return!0;for(let t of Object.keys(o))if(/^\d+$/.test(t)&&!(t in e))return!0;return!1}var ce=class{constructor(e){this.logger=e;this.treeState={};this.rangeState={};this.rangeIdKeys={}}applyUpdate(e){let t=!1;for(let[r,s]of Object.entries(e))if(Array.isArray(s)&&s.length>0&&Array.isArray(s[0])&&typeof s[0][0]=="string"){let i=this.treeState[r];i&&typeof i=="object"&&!Array.isArray(i)&&Array.isArray(i.d)&&Array.isArray(i.s)?(this.treeState[r]=Qe(i),this.applyDifferentialOpsToRange(this.treeState[r],s,r)):this.treeState[r]=s,t=!0}else{let i=this.treeState[r],l=typeof s=="object"&&s!==null&&!Array.isArray(s)?this.deepMergeTreeNodes(i,s,r):s;JSON.stringify(i)!==JSON.stringify(l)&&(this.treeState[r]=l,t=!0)}return{html:this.reconstructFromTree(this.treeState,""),changed:t}}reset(){this.treeState={},this.rangeState={},this.rangeIdKeys={}}getTreeState(){return{...this.treeState}}getStaticStructure(){return this.treeState.s||null}deepMergeTreeNodes(e,t,n=""){var s;if(typeof t!="object"||t===null||Array.isArray(t)||typeof e!="object"||e===null||Array.isArray(e))return t;if(Dt(e,t))return this.logger.debug(`[deepMerge] Structure transition at path ${n}, replacing instead of merging`),t;let r={...e};for(let[a,i]of Object.entries(t)){let l=n?`${n}.${a}`:a,c=Array.isArray(i)&&i.length>0&&Array.isArray(i[0])&&typeof i[0][0]=="string",d=r[a]&&typeof r[a]=="object"&&!Array.isArray(r[a])&&Array.isArray(r[a].d)&&Array.isArray(r[a].s);c&&d?(r[a]=Qe(r[a]),this.logger.debug(`[deepMerge] Applying diff ops at path ${l}`,{ops:i,rangeItems:(s=r[a].d)==null?void 0:s.length}),this.applyDifferentialOpsToRange(r[a],i,l)):typeof i=="object"&&i!==null&&!Array.isArray(i)&&typeof r[a]=="object"&&r[a]!==null&&!Array.isArray(r[a])?r[a]=this.deepMergeTreeNodes(r[a],i,l):r[a]=i}return r}applyDifferentialOpsToRange(e,t,n){if(!e||typeof e!="object"||!Array.isArray(e.d)||!Array.isArray(e.s)){this.logger.error(`[applyDiffOpsToRange] Invalid rangeStructure at path ${n}`,{rangeStructure:e});return}let r=e.d;this.rangeState[n]||(this.rangeState[n]={items:r,statics:e.s,staticsMap:e.sm}),e.m&&typeof e.m=="object"&&typeof e.m.idKey=="string"&&(this.rangeIdKeys[n]=e.m.idKey),this.logger.debug(`[applyDiffOpsToRange] path=${n}, idKey=${this.rangeIdKeys[n]}, items=${r.length}, ops=${t.length}`);for(let s of t){if(!Array.isArray(s)||s.length<2)continue;switch(s[0]){case"r":{let i=s[1],l=this.findItemIndexByKey(r,i,e.s,n);this.logger.debug(`[applyDiffOpsToRange] Remove: key=${i}, index=${l}, total=${r.length}`),l>=0?(r.splice(l,1),this.logger.debug(`[applyDiffOpsToRange] After removal: ${r.length} items`)):this.logger.debug(`[applyDiffOpsToRange] Remove failed: key ${i} not found`);break}case"u":{let i=this.findItemIndexByKey(r,s[1],e.s,n),l=s[2];i>=0&&l&&(r[i]=this.mergeRangeItem(r[i],l,n));break}case"a":{let i=Array.isArray(s[1])?s[1]:[s[1]];s[2]&&(e.s=s[2]),r.push(...i),s[3]&&typeof s[3]=="object"&&s[3].idKey&&(this.rangeIdKeys[n]=s[3].idKey);break}case"p":{let i=Array.isArray(s[1])?s[1]:[s[1]];s[2]&&(e.s=s[2]),r.unshift(...i);break}case"i":{let i=this.findItemIndexByKey(r,s[1],e.s,n);if(i>=0){let l=Array.isArray(s[2])?s[2]:[s[2]];r.splice(i+1,0,...l)}break}case"o":{let i=s[1],l=[],c=new Map;for(let d of r){let p=this.getItemKey(d,e.s,n);p&&c.set(p,d)}for(let d of i){let p=c.get(d);p&&l.push(p)}r.length=0,r.push(...l);break}default:break}}this.rangeState[n]={items:r,statics:e.s,staticsMap:e.sm}}reconstructFromTree(e,t){if(e.s&&Array.isArray(e.s)){let n="";for(let r=0;r<e.s.length;r++){let s=e.s[r];if(n+=s,r<e.s.length-1){let a=r.toString();if(e[a]!==void 0){let i=t?`${t}.${a}`:a;n+=this.renderValue(e[a],a,i)}}}return n=n.replace(/<root>/g,"").replace(/<\/root>/g,""),n}return this.renderValue(e,"",t)}renderValue(e,t,n){if(e==null||typeof e=="string"&&e.startsWith("{{")&&e.endsWith("}}"))return"";if(typeof e=="object"&&!Array.isArray(e)){if(e.d&&Array.isArray(e.d)&&e.s&&Array.isArray(e.s)){let a=n||t||"";return a&&(this.rangeState[a]={items:e.d,statics:e.s,staticsMap:e.sm},e.m&&typeof e.m=="object"&&typeof e.m.idKey=="string"&&(this.rangeIdKeys[a]=e.m.idKey)),this.renderRangeStructure(e,t,n)}if("s"in e&&Array.isArray(e.s))return this.reconstructFromTree(e,n||"");let r=Object.keys(e),s=r.filter(a=>/^\d+$/.test(a)).sort((a,i)=>parseInt(a)-parseInt(i));if(s.length>0&&s.length===r.length)return s.map(a=>{let i=n?`${n}.${a}`:a;return this.renderValue(e[a],a,i)}).join("")}return Array.isArray(e)?e.length>0&&Array.isArray(e[0])&&typeof e[0][0]=="string"?this.applyDifferentialOperations(e,n):e.map((r,s)=>{let a=s.toString(),i=n?`${n}.${a}`:a;return typeof r=="object"&&r&&r.s?this.reconstructFromTree(r,i):this.renderValue(r,a,i)}).join(""):typeof e=="object"?(this.logger.debug("Skipping plain object value (not a tree node) - this is normal for state-only data"),""):String(e)}renderRangeStructure(e,t,n){let{d:r,s,sm:a}=e;if(!r||!Array.isArray(r))return"";if(r.length===0){if(e.else){let l="else",c=n?`${n}.else`:"else";return this.renderValue(e.else,l,c)}return""}let i=a&&typeof a=="object";return s&&Array.isArray(s)?r.map((l,c)=>{let d=s;i&&l._sk&&a[l._sk]&&(d=a[l._sk]);let p="";for(let u=0;u<d.length;u++)if(p+=d[u],u<d.length-1){let f=u.toString();if(l[f]!==void 0){let v=n?`${n}.${c}.${f}`:`${c}.${f}`;p+=this.renderValue(l[f],f,v)}}return p}).join(""):r.map((l,c)=>{let d=c.toString(),p=n?`${n}.${d}`:d;return this.renderValue(l,d,p)}).join("")}applyDifferentialOperations(e,t){if(!t||!this.rangeState[t])return"";let n=this.rangeState[t],r=[...n.items],s=n.statics;for(let i of e){if(!Array.isArray(i)||i.length<2)continue;switch(i[0]){case"r":{let c=this.findItemIndexByKey(r,i[1],s,t);c>=0&&r.splice(c,1);break}case"u":{let c=this.findItemIndexByKey(r,i[1],s,t),d=i[2];c>=0&&d&&(r[c]=this.mergeRangeItem(r[c],d,t||""));break}case"a":{this.addItemsToRange(r,i[1],i[2],n,!1),i[3]&&typeof i[3]=="object"&&i[3].idKey&&(this.rangeIdKeys[t||""]=i[3].idKey);break}case"p":{this.addItemsToRange(r,i[1],i[2],n,!0);break}case"i":{let c=this.findItemIndexByKey(r,i[1],s,t);if(c>=0){let d=Array.isArray(i[2])?i[2]:[i[2]];r.splice(c+1,0,...d)}break}case"o":{let c=i[1],d=[],p=new Map;for(let u of r){let f=this.getItemKey(u,s,t);f&&p.set(f,u)}for(let u of c){let f=p.get(u);f&&d.push(f)}r.length=0,r.push(...d);break}default:break}}this.rangeState[t]={items:r,statics:n.statics,staticsMap:n.staticsMap},this.treeState[t]={d:r,s:n.statics,sm:n.staticsMap};let a=this.getCurrentRangeStructure(t);return a&&a.s?this.renderItemsWithStatics(r,a.s,a.sm,t):r.map(i=>this.renderValue(i)).join("")}getCurrentRangeStructure(e){if(this.rangeState[e])return{d:this.rangeState[e].items,s:this.rangeState[e].statics,sm:this.rangeState[e].staticsMap};let t=this.treeState[e];return t&&typeof t=="object"&&t.s?t:null}renderItemsWithStatics(e,t,n,r){let s=e.map((a,i)=>{let l=t;n&&typeof n=="object"&&a._sk&&n[a._sk]&&(l=n[a._sk]);let c="";for(let d=0;d<l.length;d++)if(c+=l[d],d<l.length-1){let p=d.toString();if(a[p]!==void 0){let u=r?`${r}.${i}.${p}`:`${i}.${p}`;c+=this.renderValue(a[p],p,u)}}return c}).join("");return this.logger.isDebugEnabled()&&(this.logger.debug("[renderItemsWithStatics] statics:",t),this.logger.debug("[renderItemsWithStatics] items count:",e.length),this.logger.debug("[renderItemsWithStatics] result snippet:",s.substring(0,200))),s}addItemsToRange(e,t,n,r,s){if(n&&(r.statics=n),!t)return;let a=Array.isArray(t)?t:[t];s?e.unshift(...a):e.push(...a)}getItemKey(e,t,n){if(e._k&&typeof e._k=="string")return e._k;if(!n||!this.rangeIdKeys[n])return null;let r=this.rangeIdKeys[n];return e[r]||null}findItemIndexByKey(e,t,n,r){return e.findIndex(s=>this.getItemKey(s,n,r)===t)}mergeRangeItem(e,t,n){return this.deepMergeTreeNodes(e,t,`${n}.item`)}};var de=class{constructor(){this.activeForm=null;this.activeButton=null;this.originalButtonText=null}setActiveSubmission(e,t,n){if(this.activeForm=e,this.activeButton=t,this.originalButtonText=n,e){e.setAttribute("aria-busy","true");let r=e.querySelector("fieldset");r&&(r.disabled=!0)}}handleResponse(e){this.activeForm&&this.activeForm.dispatchEvent(new CustomEvent("lvt:done",{detail:e})),e.success?this.handleSuccess(e):this.handleError(e),this.restoreFormState()}reset(){this.restoreFormState()}handleSuccess(e){if(!this.activeForm)return;this.activeForm.dispatchEvent(new CustomEvent("lvt:success",{detail:e}));let t=this.activeForm.closest("dialog");t&&t.open&&t.close(),this.activeForm.hasAttribute("lvt-form:preserve")||this.activeForm.reset()}handleError(e){this.activeForm&&this.activeForm.dispatchEvent(new CustomEvent("lvt:error",{detail:e}))}restoreFormState(){if(this.activeForm){this.activeForm.removeAttribute("aria-busy");let e=this.activeForm.querySelector("fieldset");e&&(e.disabled=!1)}this.activeButton&&this.originalButtonText!==null&&(this.activeButton.disabled=!1,this.activeButton.textContent=this.originalButtonText),this.activeForm=null,this.activeButton=null,this.originalButtonText=null}};var ue=class{constructor(e,t){this.context=e;this.logger=t;this.boundFields=new Map;this.enabled=!1;this.wiredElements=new Set;this.elementCleanups=new Map}setCapabilities(e){this.enabled=e.includes("change"),this.logger.debug("Capabilities received, change auto-wiring:",this.enabled?"enabled":"disabled")}analyzeStatics(e){let t=this.boundFields.size;this.walkTree(e),this.boundFields.size>t&&this.logger.debug(`Detected ${this.boundFields.size} bound field(s):`,Array.from(this.boundFields.keys()))}wireElements(){if(!this.enabled)return;let e=this.context.getWrapperElement();if(!e)return;for(let n of this.elementCleanups.keys())n.isConnected||(this.elementCleanups.get(n)(),this.elementCleanups.delete(n),this.wiredElements.delete(n));for(let[n,r]of this.boundFields){let s=this.escapeCSSSelector(n),a=e.querySelectorAll(`[name="${s}"]`);for(let i of a){if(this.wiredElements.has(i)||i.hasAttribute("lvt-input")||i.hasAttribute("lvt-change"))continue;let l=i.closest("form");l&&(l.hasAttribute("lvt-change")||l.hasAttribute("lvt-form:no-intercept"))||i instanceof HTMLInputElement&&(i.type==="hidden"||i.type==="submit"||i.type==="button")||i instanceof HTMLButtonElement||(this.attachListener(i,n,r),this.wiredElements.add(i))}}let t=e.querySelectorAll("select[name]");for(let n of t){if(this.wiredElements.has(n)||n.hasAttribute("lvt-input")||n.hasAttribute("lvt-change"))continue;let r=n.closest("form");if(r&&(r.hasAttribute("lvt-change")||r.hasAttribute("lvt-form:no-intercept")))continue;let s=n.getAttribute("name");s&&(this.attachListener(n,s,"value"),this.wiredElements.add(n))}}teardown(){for(let e of this.elementCleanups.values())e();this.elementCleanups.clear(),this.wiredElements.clear(),this.boundFields.clear(),this.enabled=!1}getBoundFields(){return this.boundFields}isEnabled(){return this.enabled}walkTree(e){if(!(!e||typeof e!="object"||Array.isArray(e))){e.s&&Array.isArray(e.s)&&this.analyzeStaticsArray(e.s);for(let t of Object.keys(e))if(/^\d+$/.test(t)){let n=e[t];n&&typeof n=="object"&&!Array.isArray(n)&&this.walkTree(n)}if(e.d&&Array.isArray(e.d))for(let t of e.d)t&&typeof t=="object"&&!Array.isArray(t)&&this.walkTree(t)}}analyzeStaticsArray(e){for(let t=0;t<e.length-1;t++){let n=e[t],r=e[t+1],s=this.detectBinding(n,r);s&&!this.boundFields.has(s.fieldName)&&this.boundFields.set(s.fieldName,s.bindingType)}}detectBinding(e,t){let n=this.detectValueBinding(e);return n?{fieldName:n,bindingType:"value"}:(n=this.detectTextareaBinding(e,t),n?{fieldName:n,bindingType:"content"}:(n=this.detectAttributeBinding(e,t),n?{fieldName:n,bindingType:"attribute"}:null))}escapeCSSSelector(e){return typeof CSS!="undefined"&&typeof CSS.escape=="function"?CSS.escape(e):e.replace(/\\/g,"\\\\").replace(/"/g,'\\"')}extractUnclosedTag(e){let t=e.lastIndexOf("<"),n=e.lastIndexOf(">");return t===-1||t<=n?null:e.substring(t)}extractNameFromTag(e){let t=e.match(/\sname="([^"]+)"/);return t?t[1]:null}detectValueBinding(e){if(!e.endsWith('value="'))return null;let t=this.extractUnclosedTag(e);return t?this.extractNameFromTag(t):null}detectTextareaBinding(e,t){if(!t.startsWith("</textarea"))return null;let n=e.match(/<textarea[^>]*\sname="([^"]+)"[^>]*>$/);return n?n[1]:null}detectAttributeBinding(e,t){if(!e.endsWith(" ")||!/^[a-zA-Z>/\s]/.test(t))return null;let n=this.extractUnclosedTag(e);if(!n||!/^<input\s/i.test(n))return null;let r=n.match(/\stype="([^"]+)"/i);if(!r)return null;let s=r[1].toLowerCase();return s!=="checkbox"&&s!=="radio"?null:this.extractNameFromTag(n)}attachListener(e,t,n){let r=e.getAttribute("lvt-debounce"),s=r?parseInt(r,10):NaN,a=Number.isNaN(s)||s<0?300:s,l=j(()=>{if(!this.enabled)return;let d=n==="attribute"&&e.type==="checkbox"?e.checked:e.value;this.context.send({action:"change",data:{[t]:d}})},a),c=n==="attribute"||e instanceof HTMLSelectElement?"change":"input";e.addEventListener(c,l),this.elementCleanups.set(e,()=>{e.removeEventListener(c,l)}),this.logger.debug(`Auto-wired ${c} listener on [name="${t}"] (debounce: ${a}ms)`)}};var Le=class{constructor(e){this.options=e;this.socket=null;this.reconnectTimer=null;this.manuallyClosed=!1;this.reconnectAttempts=0}connect(){this.manuallyClosed=!1,this.clearReconnectTimer(),this.socket=new WebSocket(this.options.url);let e=this.socket;e.onopen=()=>{var t,n;this.reconnectAttempts=0,(n=(t=this.options).onOpen)==null||n.call(t,e)},e.onmessage=t=>{var n,r;(r=(n=this.options).onMessage)==null||r.call(n,t)},e.onclose=t=>{var n,r;(r=(n=this.options).onClose)==null||r.call(n,t),!this.manuallyClosed&&this.options.autoReconnect&&this.scheduleReconnect()},e.onerror=t=>{var n,r;(r=(n=this.options).onError)==null||r.call(n,t)}}send(e){this.socket&&this.socket.readyState===1&&this.socket.send(e)}disconnect(){this.manuallyClosed=!0,this.clearReconnectTimer(),this.socket&&(this.socket.close(),this.socket=null)}getSocket(){return this.socket}scheduleReconnect(){var i,l,c,d,p;this.clearReconnectTimer();let e=(i=this.options.maxReconnectAttempts)!=null?i:10;if(e>0&&this.reconnectAttempts>=e){(c=(l=this.options).onReconnectFailed)==null||c.call(l);return}this.reconnectAttempts++;let t=(d=this.options.reconnectDelay)!=null?d:1e3,n=(p=this.options.maxReconnectDelay)!=null?p:16e3,r=t*Math.pow(2,this.reconnectAttempts-1),s=Math.random()*1e3,a=Math.min(r+s,n);this.reconnectTimer=window.setTimeout(()=>{var u,f;(f=(u=this.options).onReconnectAttempt)==null||f.call(u,this.reconnectAttempts,a),this.connect()},a)}clearReconnectTimer(){this.reconnectTimer!==null&&(clearTimeout(this.reconnectTimer),this.reconnectTimer=null)}},pe=class{constructor(e){this.config=e;this.transport=null}async connect(){let e=this.getLiveUrl();return await Ot(e,this.config.logger)?(this.transport=new Le({url:this.getWebSocketUrl(),autoReconnect:this.config.options.autoReconnect,reconnectDelay:this.config.options.reconnectDelay,maxReconnectDelay:16e3,maxReconnectAttempts:10,onOpen:()=>{this.config.onConnected()},onMessage:n=>{try{let r=JSON.parse(n.data);this.config.onMessage(r,n)}catch(r){this.config.logger.error("Failed to parse WebSocket message:",r)}},onClose:()=>{this.config.onDisconnected()},onReconnectAttempt:(n,r)=>{var s,a;(a=(s=this.config).onReconnectAttempt)==null||a.call(s,n,r)},onReconnectFailed:()=>{var n,r;(r=(n=this.config).onReconnectFailed)==null||r.call(n)},onError:n=>{var r,s;(s=(r=this.config).onError)==null||s.call(r,n)}}),this.transport.connect(),{usingWebSocket:!0}):{usingWebSocket:!1,initialState:await Ut(e,this.config.logger)}}disconnect(){var e;(e=this.transport)==null||e.disconnect(),this.transport=null}send(e){var t;(t=this.transport)==null||t.send(e)}getReadyState(){var e,t;return(t=(e=this.transport)==null?void 0:e.getSocket())==null?void 0:t.readyState}getSocket(){var e,t;return(t=(e=this.transport)==null?void 0:e.getSocket())!=null?t:null}getWebSocketUrl(){let e=this.config.options.liveUrl||"/live",t=this.config.options.wsUrl;return t||`${window.location.protocol==="https:"?"wss:":"ws:"}//${window.location.host}${e}`}getLiveUrl(){return this.config.options.liveUrl||window.location.pathname+window.location.search}};async function Ot(o,e){try{let n=(await fetch(o,{method:"HEAD"})).headers.get("X-LiveTemplate-WebSocket");return n?n==="enabled":!0}catch(t){return e==null||e.warn("Failed to check WebSocket availability:",t),!0}}async function Ut(o,e){try{let t=await fetch(o,{method:"GET",credentials:"include",headers:{Accept:"application/json"}});if(!t.ok)throw new Error(`Failed to fetch initial state: ${t.status}`);return await t.json()}catch(t){return e==null||e.warn("Failed to fetch initial state:",t),null}}var ge=class{async upload(e,t,n){let{file:r}=e;e.abortController=new AbortController;try{let s=new XMLHttpRequest;s.upload.addEventListener("progress",i=>{i.lengthComputable&&(e.bytesUploaded=i.loaded,e.progress=Math.round(i.loaded/i.total*100),n&&n(e))}),e.abortController.signal.addEventListener("abort",()=>{s.abort()});let a=new Promise((i,l)=>{s.addEventListener("load",()=>{s.status>=200&&s.status<300?(e.done=!0,e.progress=100,i()):l(new Error(`S3 upload failed with status ${s.status}: ${s.statusText}`))}),s.addEventListener("error",()=>{l(new Error("S3 upload failed: Network error"))}),s.addEventListener("abort",()=>{l(new Error("S3 upload cancelled"))})});if(s.open("PUT",t.url),t.headers)for(let[i,l]of Object.entries(t.headers))s.setRequestHeader(i,l);s.send(r),await a}catch(s){throw e.error=s instanceof Error?s.message:String(s),s}}};var fe=class{constructor(e,t={}){this.sendMessage=e;this.entries=new Map;this.pendingFiles=new Map;this.autoUploadConfig=new Map;this.uploaders=new Map;this.inputHandlers=new WeakMap;this.chunkSize=t.chunkSize||256*1024,this.onProgress=t.onProgress,this.onComplete=t.onComplete,this.onError=t.onError,this.uploaders.set("s3",new ge)}initializeFileInputs(e){e.querySelectorAll('input[type="file"][lvt-upload]').forEach(n=>{let r=n.getAttribute("lvt-upload");if(!r)return;let s=this.inputHandlers.get(n);s&&n.removeEventListener("change",s);let a=i=>{let l=i.target.files;!l||l.length===0||this.startUpload(r,Array.from(l))};n.addEventListener("change",a),this.inputHandlers.set(n,a)})}async startUpload(e,t){this.pendingFiles.set(e,t);let n=t.map(s=>({name:s.name,type:s.type||"application/octet-stream",size:s.size})),r={action:"upload_start",upload_name:e,files:n};this.sendMessage(r)}async handleUploadStartResponse(e){let{upload_name:t,entries:n}=e;n.length>0&&this.autoUploadConfig.set(t,n[0].auto_upload);let r=this.pendingFiles.get(t);if(!r){console.error(`No pending files found for upload: ${t}`);return}this.pendingFiles.delete(t);let s=new Map;for(let i of r)s.set(i.name,i);let a=[];for(let i of n){let l=s.get(i.client_name);if(!l){console.warn(`No file found for entry ${i.entry_id} (client_name: ${i.client_name})`);continue}let c={id:i.entry_id,file:l,uploadName:t,progress:0,bytesUploaded:0,valid:i.valid,done:!1,error:i.error,external:i.external};if(this.entries.set(c.id,c),a.push(c),!i.valid){this.onError&&i.error&&this.onError(c,i.error);continue}i.auto_upload&&(i.external?this.uploadExternal(c,i.external):this.uploadChunked(c))}}async uploadExternal(e,t){try{let n=this.uploaders.get(t.uploader);if(!n)throw new Error(`Unknown uploader: ${t.uploader}`);await n.upload(e,t,this.onProgress);let r={action:"upload_complete",upload_name:e.uploadName,entry_ids:[e.id]};this.sendMessage(r),this.onComplete&&this.onComplete(e.uploadName,[e]),this.clearFileInput(e.uploadName),this.cleanupEntries(e.uploadName)}catch(n){let r=n instanceof Error?n.message:String(n);e.error=r,this.onError&&this.onError(e,r),this.cleanupEntries(e.uploadName)}}async uploadChunked(e){let{file:t,id:n}=e,r=0;e.abortController=new AbortController;try{for(;r<t.size;){if(e.abortController.signal.aborted)throw new Error("Upload cancelled");let a=Math.min(r+this.chunkSize,t.size),i=t.slice(r,a),l=await this.fileToBase64(i),c={action:"upload_chunk",entry_id:n,chunk_base64:l,offset:r,total:t.size};this.sendMessage(c),r=a,e.bytesUploaded=r,e.progress=Math.round(r/t.size*100),this.onProgress&&this.onProgress(e)}e.done=!0;let s={action:"upload_complete",upload_name:e.uploadName,entry_ids:[n]};this.sendMessage(s),this.onComplete&&this.onComplete(e.uploadName,[e]),this.clearFileInput(e.uploadName),this.cleanupEntries(e.uploadName)}catch(s){let a=s instanceof Error?s.message:String(s);e.error=a,this.onError&&this.onError(e,a),this.cleanupEntries(e.uploadName)}}handleProgressMessage(e){let t=this.entries.get(e.entry_id);t&&(t.progress=e.progress,t.bytesUploaded=e.bytes_recv,this.onProgress&&this.onProgress(t))}cancelUpload(e){let t=this.entries.get(e);t&&(t.abortController&&t.abortController.abort(),this.sendMessage({action:"cancel_upload",entry_id:e}),this.entries.delete(e))}getEntries(e){let t=[];for(let n of this.entries.values())n.uploadName===e&&t.push(n);return t}triggerPendingUploads(e){let t=[];for(let n of this.entries.values())n.uploadName===e&&n.progress===0&&!n.done&&!n.error&&t.push(n);for(let n of t)n.external?this.uploadExternal(n,n.external):this.uploadChunked(n)}registerUploader(e,t){this.uploaders.set(e,t)}clearFileInput(e){document.querySelectorAll(`input[type="file"][lvt-upload="${e}"]`).forEach(n=>{n.value=""})}cleanupEntries(e,t=5e3){setTimeout(()=>{let n=[];for(let[r,s]of this.entries)e&&s.uploadName!==e||(s.done||s.error)&&n.push(r);for(let r of n)this.entries.delete(r)},t)}fileToBase64(e){return new Promise((t,n)=>{let r=new FileReader;r.onload=()=>{let a=r.result.split(",")[1];t(a)},r.onerror=n,r.readAsDataURL(e)})}};var Ze={silent:0,error:1,warn:2,info:3,debug:4},et="LiveTemplate",Me=class o{constructor(e,t=[],n=console){this.state=e;this.scope=t;this.sink=n}setLevel(e){this.state.level=e}getLevel(){return this.state.level}child(e){return new o(this.state,[...this.scope,e],this.sink)}isDebugEnabled(){return this.shouldLog("debug")}error(...e){this.log("error","error",e)}warn(...e){this.log("warn","warn",e)}info(...e){this.log("info","info",e)}debug(...e){this.log("debug","debug",e)}log(e,t,n){if(!this.shouldLog(e))return;(this.sink[t]||console[t]||console.log).apply(this.sink,[this.formatPrefix(),...n])}shouldLog(e){return Ze[e]<=Ze[this.state.level]}formatPrefix(){return this.scope.length===0?`[${et}]`:`[${et}:${this.scope.join(":")}]`}};function xe(o={}){var n,r;let e={level:(n=o.level)!=null?n:"info"},t=Array.isArray(o.scope)?o.scope:o.scope?[o.scope]:[];return new Me(e,t,(r=o.sink)!=null?r:console)}async function tt(o,e){try{let t=globalThis==null?void 0:globalThis.require;if(typeof t=="function"){let s=t("fs"),a=JSON.parse(s.readFileSync(e,"utf8"));return o.applyUpdate(a)}let r=await(await fetch(e)).json();return o.applyUpdate(r)}catch(t){throw new Error(`Failed to load update from ${e}: ${t}`)}}function nt(o,e){let t=[],n=c=>c.replace(/\s+/g," ").replace(/>\s+</g,"><").trim(),r=n(o),s=n(e);if(r===s)return{match:!0,differences:[]};let a=r.split(`
30
30
  `),i=s.split(`
31
- `),l=Math.max(a.length,i.length);for(let c=0;c<l;c++){let d=a[c]||"",p=i[c]||"";d!==p&&(t.push(`Line ${c+1}:`),t.push(` Expected: ${d}`),t.push(` Actual: ${p}`))}return{match:!1,differences:t}}var he=class o{constructor(e={}){this.lvtId=null;this.ws=null;this.wrapperElement=null;this.useHTTP=!1;this.sessionCookie=null;this.rateLimitedHandlers=new WeakMap;this.isInitialized=!1;this.messageCount=0;let{logger:t,logLevel:n,debug:r,...s}=e,a=n!=null?n:r?"debug":"info",i=t!=null?t:xe({level:a});t?n?t.setLevel(n):r&&t.setLevel("debug"):i.setLevel(a),this.logger=i.child("Client"),this.options={autoReconnect:!1,reconnectDelay:1e3,liveUrl:window.location.pathname+window.location.search,...s},this.treeRenderer=new ce(this.logger.child("TreeRenderer")),this.focusManager=new Q(this.logger.child("FocusManager")),this.formLifecycleManager=new de,this.loadingIndicator=new ae,this.formDisabler=new le,this.uploadHandler=new fe(l=>this.send(l),{chunkSize:256*1024,onProgress:l=>{this.wrapperElement&&this.wrapperElement.dispatchEvent(new CustomEvent("lvt:upload:progress",{detail:{entry:l}}))},onComplete:(l,c)=>{this.logger.info(`Upload complete: ${l}`,c),this.wrapperElement&&this.wrapperElement.dispatchEvent(new CustomEvent("lvt:upload:complete",{detail:{uploadName:l,entries:c}}))},onError:(l,c)=>{this.logger.error(`Upload error for ${l.id}:`,c),this.wrapperElement&&this.wrapperElement.dispatchEvent(new CustomEvent("lvt:upload:error",{detail:{entry:l,error:c}}))}}),this.eventDelegator=new se({getWrapperElement:()=>this.wrapperElement,getRateLimitedHandlers:()=>this.rateLimitedHandlers,parseValue:l=>this.parseValue(l),send:l=>this.send(l),sendHTTPMultipart:(l,c)=>this.sendHTTPMultipart(l,c),setActiveSubmission:(l,c,d)=>this.formLifecycleManager.setActiveSubmission(l,c,d),getWebSocketReadyState:()=>this.webSocketManager.getReadyState(),triggerPendingUploads:l=>this.uploadHandler.triggerPendingUploads(l)},this.logger.child("EventDelegator")),this.linkInterceptor=new ie({getWrapperElement:()=>this.wrapperElement,handleNavigationResponse:l=>this.handleNavigationResponse(l)},this.logger.child("LinkInterceptor")),this.observerManager=new oe({getWrapperElement:()=>this.wrapperElement,send:l=>this.send(l)},this.logger.child("ObserverManager")),this.changeAutoWirer=new ue({getWrapperElement:()=>this.wrapperElement,send:l=>this.send(l)},this.logger.child("ChangeAutoWirer")),this.webSocketManager=new pe({options:this.options,logger:this.logger.child("Transport"),onConnected:()=>{var l,c,d;this.ws=this.webSocketManager.getSocket(),this.logger.info("WebSocket connected"),this.clearFlashQueryParams(),(c=(l=this.options).onConnect)==null||c.call(l),(d=this.wrapperElement)==null||d.dispatchEvent(new Event("lvt:connected"))},onDisconnected:()=>{var l,c,d;this.ws=null,this.logger.info("WebSocket disconnected"),(c=(l=this.options).onDisconnect)==null||c.call(l),(d=this.wrapperElement)==null||d.dispatchEvent(new Event("lvt:disconnected"))},onMessage:(l,c)=>{this.handleWebSocketPayload(l,c)},onReconnectAttempt:()=>{this.logger.info("Attempting to reconnect...")},onError:l=>{var c,d;this.logger.error("WebSocket error:",l),(d=(c=this.options).onError)==null||d.call(c,l)}})}static autoInit(){let e=xe({scope:"Client:autoInit"}),t=()=>{let n=document.querySelector("[data-lvt-id]");if(n){let r=new o;r.wrapperElement=n,n.getAttribute("data-lvt-loading")==="true"&&(r.loadingIndicator.show(),r.formDisabler.disable(r.wrapperElement)),r.connect().catch(a=>{e.error("Auto-initialization connect failed:",a)}),window.liveTemplateClient=r}};document.readyState==="loading"?document.addEventListener("DOMContentLoaded",t):t()}handleWebSocketPayload(e,t){var r,s,a;let n=e;if(n.type==="upload_progress"){this.uploadHandler.handleProgressMessage(n);return}if(n.upload_name&&n.entries){let i=n;try{this.handleUploadStartResponse(i)}catch(l){this.logger.error("Error handling upload start response:",l)}return}if(n.upload_name&&n.hasOwnProperty("success")){n.success?this.logger.info(`Upload complete: ${n.upload_name}`):this.logger.error(`Upload failed: ${n.upload_name}`,n.error);return}this.isInitialized||(this.loadingIndicator.hide(),this.formDisabler.enable(this.wrapperElement),this.wrapperElement&&this.wrapperElement.hasAttribute("data-lvt-loading")&&this.wrapperElement.removeAttribute("data-lvt-loading"),this.isInitialized=!0),this.wrapperElement&&((r=e.meta)!=null&&r.capabilities&&this.changeAutoWirer.setCapabilities(e.meta.capabilities),this.changeAutoWirer.analyzeStatics(e.tree),this.updateDOM(this.wrapperElement,e.tree,e.meta),this.messageCount++,this.wrapperElement.dispatchEvent(new CustomEvent("lvt:updated",{detail:{messageCount:this.messageCount,action:(s=e.meta)==null?void 0:s.action,success:(a=e.meta)==null?void 0:a.success}})))}async connect(e="[data-lvt-id]"){var n,r;if(this.wrapperElement=document.querySelector(e),!this.wrapperElement)throw new Error(`LiveTemplate wrapper not found with selector: ${e}`);this.webSocketManager.disconnect();let t=await this.webSocketManager.connect();this.useHTTP=!t.usingWebSocket,this.useHTTP&&(this.ws=null,this.logger.info("WebSocket not available, using HTTP mode"),(r=(n=this.options).onConnect)==null||r.call(n),t.initialState&&this.wrapperElement&&this.handleWebSocketPayload(t.initialState)),this.eventDelegator.setupEventDelegation(),this.eventDelegator.setupWindowEventDelegation(),this.eventDelegator.setupClickAwayDelegation(),this.eventDelegator.setupDOMEventTriggerDelegation(),Ge(),this.eventDelegator.setupFocusTrapDelegation(),this.eventDelegator.setupAutofocusDelegation(),this.linkInterceptor.setup(this.wrapperElement),re(),Pe(this.wrapperElement),this.focusManager.attach(this.wrapperElement),this.observerManager.setupInfiniteScrollObserver(),this.observerManager.setupInfiniteScrollMutationObserver()}disconnect(){this.webSocketManager.disconnect(),this.ws=null,this.useHTTP=!1,this.observerManager.teardown(),this.changeAutoWirer.teardown(),this.formLifecycleManager.reset(),this.loadingIndicator.hide(),this.formDisabler.enable(this.wrapperElement),this.eventDelegator.teardownDOMEventTriggerDelegation(),this.wrapperElement&&(Be(this.wrapperElement),Ke(this.wrapperElement))}clearFlashQueryParams(){let e=new URL(window.location.href),t=["error","success"],n=!1;for(let r of t)e.searchParams.has(r)&&(e.searchParams.delete(r),n=!0);n&&(this.logger.debug("Clearing flash query params from URL"),window.history.replaceState(null,"",e.toString()))}isReady(){let e=this.wrapperElement;return!e||e.hasAttribute("data-lvt-loading")?!1:this.useHTTP?!0:this.webSocketManager.getReadyState()===1}send(e){let t=this.webSocketManager.getReadyState();this.logger.isDebugEnabled()&&this.logger.debug("send() invoked",{message:e,useHTTP:this.useHTTP,hasWebSocket:t!==void 0,readyState:t}),this.useHTTP?(this.logger.debug("Using HTTP mode for send"),this.sendHTTP(e)):t===1?(this.logger.debug("Sending via WebSocket"),this.webSocketManager.send(JSON.stringify(e))):t!==void 0?(this.logger.warn(`WebSocket not ready (state: ${t}), using HTTP fallback`),this.sendHTTP(e)):this.logger.error("No transport available")}async sendHTTP(e){try{let t=this.options.liveUrl||"/live",n=await fetch(t,{method:"POST",credentials:"include",headers:{"Content-Type":"application/json",Accept:"application/json"},body:JSON.stringify(e)});if(!n.ok)throw new Error(`HTTP request failed: ${n.status}`);let r=await n.json();this.wrapperElement&&this.updateDOM(this.wrapperElement,r.tree,r.meta)}catch(t){this.logger.error("Failed to send HTTP request:",t)}}sendHTTPMultipart(e,t){this.doSendHTTPMultipart(e,t)}async doSendHTTPMultipart(e,t){try{let n=this.options.liveUrl||"/live",r=new FormData(e);r.set("lvt-action",t);let s=await fetch(n,{method:"POST",credentials:"include",headers:{Accept:"application/json"},body:r});if(!s.ok)throw new Error(`HTTP multipart request failed: ${s.status}`);let a=await s.json();this.wrapperElement&&this.updateDOM(this.wrapperElement,a.tree,a.meta)}catch(n){this.logger.error("Failed to send HTTP multipart request:",n)}}handleNavigationResponse(e){if(!this.wrapperElement)return;let n=new DOMParser().parseFromString(e,"text/html"),r=this.wrapperElement.getAttribute("data-lvt-id"),s=r?n.querySelector(`[data-lvt-id="${r}"]`):null;if(s)this.wrapperElement.replaceChildren(...Array.from(s.childNodes).map(a=>a.cloneNode(!0)));else{let a=n.querySelector("body");a&&this.wrapperElement.replaceChildren(...Array.from(a.childNodes).map(i=>i.cloneNode(!0)))}this.eventDelegator.setupEventDelegation(),this.linkInterceptor.setup(this.wrapperElement)}parseValue(e){let t=e.trim(),n=parseFloat(t);if(!isNaN(n)){if(Number.isInteger(n)&&Math.abs(n)>Number.MAX_SAFE_INTEGER)return t;if(t===n.toString())return n}return e==="true"?!0:e==="false"?!1:e}applyUpdate(e){return this.treeRenderer.applyUpdate(e)}applyUpdateToHTML(e,t){let n=this.applyUpdate(t);if(!this.lvtId){let c=e.match(/data-lvt-id="([^"]+)"/);c&&(this.lvtId=c[1])}let r=n.html;if(!e.match(/<body>([\s\S]*?)<\/body>/))return e;let l=`<div data-lvt-id="${this.lvtId||"lvt-unknown"}">`+r+"</div>";return e.replace(/<body>[\s\S]*?<\/body>/,`<body>${l}</body>`)}updateDOM(e,t,n){let r=this.applyUpdate(t),s=i=>!i||typeof i!="object"?!1:i.s&&Array.isArray(i.s)?!0:Object.values(i).some(l=>s(l));if(!r.changed&&!s(t))return;let a=document.createElement(e.tagName);this.logger.isDebugEnabled()&&(this.logger.debug("[updateDOM] element.tagName:",e.tagName),this.logger.debug("[updateDOM] result.html (first 500 chars):",r.html.substring(0,500)),this.logger.debug("[updateDOM] Has <table> tag:",r.html.includes("<table>")),this.logger.debug("[updateDOM] Has <tbody> tag:",r.html.includes("<tbody>")),this.logger.debug("[updateDOM] Has <tr> tag:",r.html.includes("<tr"))),a.innerHTML=r.html,this.logger.isDebugEnabled()&&(this.logger.debug("[updateDOM] tempWrapper.innerHTML (first 500 chars):",a.innerHTML.substring(0,500)),this.logger.debug("[updateDOM] tempWrapper has <table>:",a.innerHTML.includes("<table>")),this.logger.debug("[updateDOM] tempWrapper has <tbody>:",a.innerHTML.includes("<tbody>")),this.logger.debug("[updateDOM] tempWrapper has <tr>:",a.innerHTML.includes("<tr"))),Ie(e,a,{childrenOnly:!0,getNodeKey:i=>{if(i.nodeType===1)return i.getAttribute("data-key")||i.getAttribute("data-lvt-key")||void 0},onBeforeElUpdated:(i,l)=>this.focusManager.shouldSkipUpdate(i)||i.isEqualNode(l)?!1:(this.executeLifecycleHook(i,"lvt-updated"),!0),onElUpdated:i=>{var l;i instanceof HTMLTextAreaElement&&(i.value=(l=i.textContent)!=null?l:"")},onNodeAdded:i=>{var l;i instanceof HTMLTextAreaElement&&(i.value=(l=i.textContent)!=null?l:""),i.nodeType===Node.ELEMENT_NODE&&this.executeLifecycleHook(i,"lvt-mounted")},onBeforeNodeDiscarded:i=>(i.nodeType===Node.ELEMENT_NODE&&this.executeLifecycleHook(i,"lvt-destroyed"),!0)}),this.focusManager.restoreFocusedElement(),Ve(e),je(e),qe(e),We(e,this.wrapperElement||void 0),this.eventDelegator.setupDOMEventTriggerDelegation(e),ze(e),this.uploadHandler.initializeFileInputs(e),this.changeAutoWirer.wireElements(),n&&this.formLifecycleManager.handleResponse(n)}handleUploadStartResponse(e){this.uploadHandler.handleUploadStartResponse(e)}executeLifecycleHook(e,t){let n=e.getAttribute(t);if(n)try{new Function("element",n).call(e,e)}catch(r){this.logger.error(`Error executing ${t} hook:`,r)}}reset(){this.treeRenderer.reset(),this.focusManager.reset(),this.observerManager.teardown(),this.changeAutoWirer.teardown(),this.formLifecycleManager.reset(),this.loadingIndicator.hide(),this.formDisabler.enable(this.wrapperElement),this.lvtId=null}getTreeState(){return this.treeRenderer.getTreeState()}getStaticStructure(){return this.treeRenderer.getStaticStructure()}};typeof window!="undefined"&&he.autoInit();return ot(Dt);})();
31
+ `),l=Math.max(a.length,i.length);for(let c=0;c<l;c++){let d=a[c]||"",p=i[c]||"";d!==p&&(t.push(`Line ${c+1}:`),t.push(` Expected: ${d}`),t.push(` Actual: ${p}`))}return{match:!1,differences:t}}var he=class o{constructor(e={}){this.lvtId=null;this.ws=null;this.wrapperElement=null;this.useHTTP=!1;this.sessionCookie=null;this.rateLimitedHandlers=new WeakMap;this.isInitialized=!1;this.messageCount=0;let{logger:t,logLevel:n,debug:r,...s}=e,a=n!=null?n:r?"debug":"info",i=t!=null?t:xe({level:a});t?n?t.setLevel(n):r&&t.setLevel("debug"):i.setLevel(a),this.logger=i.child("Client"),this.options={autoReconnect:!1,reconnectDelay:1e3,liveUrl:window.location.pathname+window.location.search,...s},this.treeRenderer=new ce(this.logger.child("TreeRenderer")),this.focusManager=new Q(this.logger.child("FocusManager")),this.formLifecycleManager=new de,this.loadingIndicator=new ae,this.formDisabler=new le,this.uploadHandler=new fe(l=>this.send(l),{chunkSize:256*1024,onProgress:l=>{this.wrapperElement&&this.wrapperElement.dispatchEvent(new CustomEvent("lvt:upload:progress",{detail:{entry:l}}))},onComplete:(l,c)=>{this.logger.info(`Upload complete: ${l}`,c),this.wrapperElement&&this.wrapperElement.dispatchEvent(new CustomEvent("lvt:upload:complete",{detail:{uploadName:l,entries:c}}))},onError:(l,c)=>{this.logger.error(`Upload error for ${l.id}:`,c),this.wrapperElement&&this.wrapperElement.dispatchEvent(new CustomEvent("lvt:upload:error",{detail:{entry:l,error:c}}))}}),this.eventDelegator=new se({getWrapperElement:()=>this.wrapperElement,getRateLimitedHandlers:()=>this.rateLimitedHandlers,parseValue:l=>this.parseValue(l),send:l=>this.send(l),sendHTTPMultipart:(l,c)=>this.sendHTTPMultipart(l,c),setActiveSubmission:(l,c,d)=>this.formLifecycleManager.setActiveSubmission(l,c,d),getWebSocketReadyState:()=>this.webSocketManager.getReadyState(),triggerPendingUploads:l=>this.uploadHandler.triggerPendingUploads(l)},this.logger.child("EventDelegator")),this.linkInterceptor=new ie({getWrapperElement:()=>this.wrapperElement,handleNavigationResponse:l=>this.handleNavigationResponse(l)},this.logger.child("LinkInterceptor")),this.observerManager=new oe({getWrapperElement:()=>this.wrapperElement,send:l=>this.send(l)},this.logger.child("ObserverManager")),this.changeAutoWirer=new ue({getWrapperElement:()=>this.wrapperElement,send:l=>this.send(l)},this.logger.child("ChangeAutoWirer")),this.webSocketManager=new pe({options:this.options,logger:this.logger.child("Transport"),onConnected:()=>{var l,c,d;this.ws=this.webSocketManager.getSocket(),this.logger.info("WebSocket connected"),this.clearFlashQueryParams(),(c=(l=this.options).onConnect)==null||c.call(l),(d=this.wrapperElement)==null||d.dispatchEvent(new Event("lvt:connected"))},onDisconnected:()=>{var l,c,d;this.ws=null,this.logger.info("WebSocket disconnected"),(c=(l=this.options).onDisconnect)==null||c.call(l),(d=this.wrapperElement)==null||d.dispatchEvent(new Event("lvt:disconnected"))},onMessage:(l,c)=>{this.handleWebSocketPayload(l,c)},onReconnectAttempt:()=>{this.logger.info("Attempting to reconnect...")},onError:l=>{var c,d;this.logger.error("WebSocket error:",l),(d=(c=this.options).onError)==null||d.call(c,l)}})}static autoInit(){let e=xe({scope:"Client:autoInit"}),t=()=>{let n=document.querySelector("[data-lvt-id]");if(n){let r=new o;r.wrapperElement=n,n.getAttribute("data-lvt-loading")==="true"&&(r.loadingIndicator.show(),r.formDisabler.disable(r.wrapperElement)),r.connect().catch(a=>{e.error("Auto-initialization connect failed:",a)}),window.liveTemplateClient=r}};document.readyState==="loading"?document.addEventListener("DOMContentLoaded",t):t()}handleWebSocketPayload(e,t){var r,s,a;let n=e;if(n.type==="upload_progress"){this.uploadHandler.handleProgressMessage(n);return}if(n.upload_name&&n.entries){let i=n;try{this.handleUploadStartResponse(i)}catch(l){this.logger.error("Error handling upload start response:",l)}return}if(n.upload_name&&n.hasOwnProperty("success")){n.success?this.logger.info(`Upload complete: ${n.upload_name}`):this.logger.error(`Upload failed: ${n.upload_name}`,n.error);return}this.isInitialized||(this.loadingIndicator.hide(),this.formDisabler.enable(this.wrapperElement),this.wrapperElement&&this.wrapperElement.hasAttribute("data-lvt-loading")&&this.wrapperElement.removeAttribute("data-lvt-loading"),this.isInitialized=!0),this.wrapperElement&&((r=e.meta)!=null&&r.capabilities&&this.changeAutoWirer.setCapabilities(e.meta.capabilities),this.changeAutoWirer.analyzeStatics(e.tree),this.updateDOM(this.wrapperElement,e.tree,e.meta),this.messageCount++,this.wrapperElement.dispatchEvent(new CustomEvent("lvt:updated",{detail:{messageCount:this.messageCount,action:(s=e.meta)==null?void 0:s.action,success:(a=e.meta)==null?void 0:a.success}})))}async connect(e="[data-lvt-id]"){var n,r;if(this.wrapperElement=document.querySelector(e),!this.wrapperElement)throw new Error(`LiveTemplate wrapper not found with selector: ${e}`);this.webSocketManager.disconnect();let t=await this.webSocketManager.connect();this.useHTTP=!t.usingWebSocket,this.useHTTP&&(this.ws=null,this.logger.info("WebSocket not available, using HTTP mode"),(r=(n=this.options).onConnect)==null||r.call(n),t.initialState&&this.wrapperElement&&this.handleWebSocketPayload(t.initialState)),this.eventDelegator.setupEventDelegation(),this.eventDelegator.setupWindowEventDelegation(),this.eventDelegator.setupClickAwayDelegation(),this.eventDelegator.setupDOMEventTriggerDelegation(),Ge(),this.eventDelegator.setupFocusTrapDelegation(),this.eventDelegator.setupAutofocusDelegation(),this.linkInterceptor.setup(this.wrapperElement),re(),Je(),Pe(this.wrapperElement),this.focusManager.attach(this.wrapperElement),this.observerManager.setupInfiniteScrollObserver(),this.observerManager.setupInfiniteScrollMutationObserver()}disconnect(){this.webSocketManager.disconnect(),this.ws=null,this.useHTTP=!1,this.observerManager.teardown(),this.changeAutoWirer.teardown(),this.formLifecycleManager.reset(),this.loadingIndicator.hide(),this.formDisabler.enable(this.wrapperElement),this.eventDelegator.teardownDOMEventTriggerDelegation(),this.wrapperElement&&(Be(this.wrapperElement),Ke(this.wrapperElement))}clearFlashQueryParams(){let e=new URL(window.location.href),t=["error","success"],n=!1;for(let r of t)e.searchParams.has(r)&&(e.searchParams.delete(r),n=!0);n&&(this.logger.debug("Clearing flash query params from URL"),window.history.replaceState(null,"",e.toString()))}isReady(){let e=this.wrapperElement;return!e||e.hasAttribute("data-lvt-loading")?!1:this.useHTTP?!0:this.webSocketManager.getReadyState()===1}send(e){let t=this.webSocketManager.getReadyState();this.logger.isDebugEnabled()&&this.logger.debug("send() invoked",{message:e,useHTTP:this.useHTTP,hasWebSocket:t!==void 0,readyState:t}),this.useHTTP?(this.logger.debug("Using HTTP mode for send"),this.sendHTTP(e)):t===1?(this.logger.debug("Sending via WebSocket"),this.webSocketManager.send(JSON.stringify(e))):t!==void 0?(this.logger.warn(`WebSocket not ready (state: ${t}), using HTTP fallback`),this.sendHTTP(e)):this.logger.error("No transport available")}async sendHTTP(e){try{let t=this.options.liveUrl||"/live",n=await fetch(t,{method:"POST",credentials:"include",headers:{"Content-Type":"application/json",Accept:"application/json"},body:JSON.stringify(e)});if(!n.ok)throw new Error(`HTTP request failed: ${n.status}`);let r=await n.json();this.wrapperElement&&this.updateDOM(this.wrapperElement,r.tree,r.meta)}catch(t){this.logger.error("Failed to send HTTP request:",t)}}sendHTTPMultipart(e,t){this.doSendHTTPMultipart(e,t)}async doSendHTTPMultipart(e,t){try{let n=this.options.liveUrl||"/live",r=new FormData(e);r.set("lvt-action",t);let s=await fetch(n,{method:"POST",credentials:"include",headers:{Accept:"application/json"},body:r});if(!s.ok)throw new Error(`HTTP multipart request failed: ${s.status}`);let a=await s.json();this.wrapperElement&&this.updateDOM(this.wrapperElement,a.tree,a.meta)}catch(n){this.logger.error("Failed to send HTTP multipart request:",n)}}handleNavigationResponse(e){if(!this.wrapperElement)return;let n=new DOMParser().parseFromString(e,"text/html"),r=this.wrapperElement.getAttribute("data-lvt-id"),s=r?n.querySelector(`[data-lvt-id="${r}"]`):null;if(s)this.wrapperElement.replaceChildren(...Array.from(s.childNodes).map(a=>a.cloneNode(!0)));else{let a=n.querySelector("body");a&&this.wrapperElement.replaceChildren(...Array.from(a.childNodes).map(i=>i.cloneNode(!0)))}this.eventDelegator.setupEventDelegation(),this.linkInterceptor.setup(this.wrapperElement)}parseValue(e){let t=e.trim(),n=parseFloat(t);if(!isNaN(n)){if(Number.isInteger(n)&&Math.abs(n)>Number.MAX_SAFE_INTEGER)return t;if(t===n.toString())return n}return e==="true"?!0:e==="false"?!1:e}applyUpdate(e){return this.treeRenderer.applyUpdate(e)}applyUpdateToHTML(e,t){let n=this.applyUpdate(t);if(!this.lvtId){let c=e.match(/data-lvt-id="([^"]+)"/);c&&(this.lvtId=c[1])}let r=n.html;if(!e.match(/<body>([\s\S]*?)<\/body>/))return e;let l=`<div data-lvt-id="${this.lvtId||"lvt-unknown"}">`+r+"</div>";return e.replace(/<body>[\s\S]*?<\/body>/,`<body>${l}</body>`)}updateDOM(e,t,n){let r=this.applyUpdate(t),s=i=>!i||typeof i!="object"?!1:i.s&&Array.isArray(i.s)?!0:Object.values(i).some(l=>s(l));if(!r.changed&&!s(t))return;let a=document.createElement(e.tagName);this.logger.isDebugEnabled()&&(this.logger.debug("[updateDOM] element.tagName:",e.tagName),this.logger.debug("[updateDOM] result.html (first 500 chars):",r.html.substring(0,500)),this.logger.debug("[updateDOM] Has <table> tag:",r.html.includes("<table>")),this.logger.debug("[updateDOM] Has <tbody> tag:",r.html.includes("<tbody>")),this.logger.debug("[updateDOM] Has <tr> tag:",r.html.includes("<tr"))),a.innerHTML=r.html,this.logger.isDebugEnabled()&&(this.logger.debug("[updateDOM] tempWrapper.innerHTML (first 500 chars):",a.innerHTML.substring(0,500)),this.logger.debug("[updateDOM] tempWrapper has <table>:",a.innerHTML.includes("<table>")),this.logger.debug("[updateDOM] tempWrapper has <tbody>:",a.innerHTML.includes("<tbody>")),this.logger.debug("[updateDOM] tempWrapper has <tr>:",a.innerHTML.includes("<tr"))),Re(e,a,{childrenOnly:!0,getNodeKey:i=>{if(i.nodeType===1)return i.getAttribute("data-key")||i.getAttribute("data-lvt-key")||void 0},onBeforeElUpdated:(i,l)=>this.focusManager.shouldSkipUpdate(i)||i.isEqualNode(l)?!1:(this.executeLifecycleHook(i,"lvt-updated"),!0),onElUpdated:i=>{var l;i instanceof HTMLTextAreaElement&&(i.value=(l=i.textContent)!=null?l:"")},onNodeAdded:i=>{var l;i instanceof HTMLTextAreaElement&&(i.value=(l=i.textContent)!=null?l:""),i.nodeType===Node.ELEMENT_NODE&&this.executeLifecycleHook(i,"lvt-mounted")},onBeforeNodeDiscarded:i=>(i.nodeType===Node.ELEMENT_NODE&&this.executeLifecycleHook(i,"lvt-destroyed"),!0)}),this.focusManager.restoreFocusedElement(),Ve(e),je(e),qe(e),We(e,this.wrapperElement||void 0),this.eventDelegator.setupDOMEventTriggerDelegation(e),ze(e),this.uploadHandler.initializeFileInputs(e),this.changeAutoWirer.wireElements(),n&&this.formLifecycleManager.handleResponse(n)}handleUploadStartResponse(e){this.uploadHandler.handleUploadStartResponse(e)}executeLifecycleHook(e,t){let n=e.getAttribute(t);if(n)try{new Function("element",n).call(e,e)}catch(r){this.logger.error(`Error executing ${t} hook:`,r)}}reset(){this.treeRenderer.reset(),this.focusManager.reset(),this.observerManager.teardown(),this.changeAutoWirer.teardown(),this.formLifecycleManager.reset(),this.loadingIndicator.hide(),this.formDisabler.enable(this.wrapperElement),this.lvtId=null}getTreeState(){return this.treeRenderer.getTreeState()}getStaticStructure(){return this.treeRenderer.getStaticStructure()}};typeof window!="undefined"&&he.autoInit();return lt($t);})();
32
32
  //# sourceMappingURL=livetemplate-client.browser.js.map