@livetemplate/client 0.8.35 → 0.8.36
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/dom/scroll-away.d.ts.map +1 -1
- package/dist/dom/scroll-away.js +4 -2
- package/dist/dom/scroll-away.js.map +1 -1
- package/dist/livetemplate-client.browser.js +1 -1
- package/dist/livetemplate-client.browser.js.map +2 -2
- package/dist/tests/scroll-away.test.js +89 -2
- package/dist/tests/scroll-away.test.js.map +1 -1
- package/package.json +1 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"scroll-away.d.ts","sourceRoot":"","sources":["../../dom/scroll-away.ts"],"names":[],"mappings":"AAsBA,wBAAgB,eAAe,CAAC,QAAQ,EAAE,OAAO,GAAG,IAAI,
|
|
1
|
+
{"version":3,"file":"scroll-away.d.ts","sourceRoot":"","sources":["../../dom/scroll-away.ts"],"names":[],"mappings":"AAsBA,wBAAgB,eAAe,CAAC,QAAQ,EAAE,OAAO,GAAG,IAAI,CA8DvD;AAOD,wBAAgB,kBAAkB,CAAC,OAAO,CAAC,EAAE,OAAO,GAAG,IAAI,CAS1D"}
|
package/dist/dom/scroll-away.js
CHANGED
|
@@ -21,7 +21,7 @@ function setupScrollAway(scanRoot) {
|
|
|
21
21
|
const edge = el.getAttribute("lvt-scroll-away");
|
|
22
22
|
if (!edge)
|
|
23
23
|
return;
|
|
24
|
-
if (edge !== "bottom") {
|
|
24
|
+
if (edge !== "bottom" && edge !== "top") {
|
|
25
25
|
console.warn(`Unknown lvt-scroll-away edge: ${edge}`);
|
|
26
26
|
return;
|
|
27
27
|
}
|
|
@@ -52,7 +52,9 @@ function setupScrollAway(scanRoot) {
|
|
|
52
52
|
ticking = true;
|
|
53
53
|
requestAnimationFrame(() => {
|
|
54
54
|
ticking = false;
|
|
55
|
-
const distance =
|
|
55
|
+
const distance = edge === "top"
|
|
56
|
+
? target.scrollTop
|
|
57
|
+
: target.scrollHeight - target.scrollTop - target.clientHeight;
|
|
56
58
|
if (distance > threshold) {
|
|
57
59
|
el.classList.add("visible");
|
|
58
60
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"scroll-away.js","sourceRoot":"","sources":["../../dom/scroll-away.ts"],"names":[],"mappings":";;AAsBA,
|
|
1
|
+
{"version":3,"file":"scroll-away.js","sourceRoot":"","sources":["../../dom/scroll-away.ts"],"names":[],"mappings":"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"}
|
|
@@ -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 ge=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 gt=!1;function nn(i){let e=i.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():s instanceof HTMLElement&&s.hasAttribute("popover")&&(r==="show-popover"&&typeof s.showPopover=="function"?s.showPopover():r==="hide-popover"&&typeof s.hidePopover=="function"?s.hidePopover():r==="toggle-popover"&&typeof s.togglePopover=="function"&&s.togglePopover()))}function ft(){"commandForElement"in HTMLButtonElement.prototype||gt||(gt=!0,document.addEventListener("click",nn))}var z="__lvt_scroll_away",D=[];function rn(){for(let i=D.length-1;i>=0;i--){let e=D[i];e.trigger.isConnected||(e.target.removeEventListener("scroll",e.handler),delete e.trigger[z],D.splice(i,1))}}function mt(i){rn();let e=t=>{let n=t.getAttribute("lvt-scroll-away");if(!n)return;if(n!=="bottom"){console.warn(`Unknown lvt-scroll-away edge: ${n}`);return}let r=B(t);if(!r||r===t){let p=t[z];p&&(p.target.removeEventListener("scroll",p.handler),ht(p),delete t[z]),console.warn("lvt-scroll-away requires data-lvt-target pointing to a scrollable container");return}let s=t[z];if(s){if(s.target===r)return;s.target.removeEventListener("scroll",s.handler),ht(s)}let l=parseInt(getComputedStyle(t).getPropertyValue("--lvt-scroll-threshold").trim(),10),o=isNaN(l)?200:l,a=!1,c=()=>{a||(a=!0,requestAnimationFrame(()=>{a=!1,r.scrollHeight-r.scrollTop-r.clientHeight>o?t.classList.add("visible"):t.classList.remove("visible")}))};r.addEventListener("scroll",c,{passive:!0}),c();let d={trigger:t,target:r,handler:c};t[z]=d,D.push(d)};e(i),i.querySelectorAll("[lvt-scroll-away]").forEach(e)}function ht(i){let e=D.indexOf(i);e!==-1&&D.splice(e,1)}function vt(i){for(let e=D.length-1;e>=0;e--){let t=D[e];i&&t.trigger.isConnected&&!i.contains(t.trigger)||(t.target.removeEventListener("scroll",t.handler),t.trigger.classList.remove("visible"),delete t.trigger[z],D.splice(e,1))}}function yt(i){return typeof structuredClone=="function"?structuredClone(i):JSON.parse(JSON.stringify(i))}function sn(i){return i!=null&&typeof i=="object"&&Array.isArray(i.d)&&Array.isArray(i.s)}function _e(i,e=0){if(e>50||i==null||typeof i!="object"||Array.isArray(i))return!1;if(sn(i))return!0;for(let n of Object.keys(i))if(/^\d+$/.test(n)){let r=i[n];if(r!=null&&typeof r=="object"&&!Array.isArray(r)&&_e(r,e+1))return!0}return!1}function on(i,e){if(!e.s||!Array.isArray(e.s))return!1;if(_e(i)&&!_e(e))return!0;for(let t of Object.keys(i))if(/^\d+$/.test(t)&&!(t in e))return!0;return!1}var fe=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 o=this.treeState[r];o&&typeof o=="object"&&!Array.isArray(o)&&Array.isArray(o.d)&&Array.isArray(o.s)?(this.treeState[r]=yt(o),this.applyDifferentialOpsToRange(this.treeState[r],s,r)):this.treeState[r]=s,t=!0}else{let o=this.treeState[r],a=typeof s=="object"&&s!==null&&!Array.isArray(s)?this.deepMergeTreeNodes(o,s,r):s;JSON.stringify(o)!==JSON.stringify(a)&&(this.treeState[r]=a,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(on(e,t))return this.logger.debug(`[deepMerge] Structure transition at path ${n}, replacing instead of merging`),t;let r={...e};for(let[l,o]of Object.entries(t)){let a=n?`${n}.${l}`:l,c=Array.isArray(o)&&o.length>0&&Array.isArray(o[0])&&typeof o[0][0]=="string",d=r[l]&&typeof r[l]=="object"&&!Array.isArray(r[l])&&Array.isArray(r[l].d)&&Array.isArray(r[l].s);c&&d?(r[l]=yt(r[l]),this.logger.debug(`[deepMerge] Applying diff ops at path ${a}`,{ops:o,rangeItems:(s=r[l].d)==null?void 0:s.length}),this.applyDifferentialOpsToRange(r[l],o,a)):typeof o=="object"&&o!==null&&!Array.isArray(o)&&typeof r[l]=="object"&&r[l]!==null&&!Array.isArray(r[l])?r[l]=this.deepMergeTreeNodes(r[l],o,a):r[l]=o}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 o=s[1],a=this.findItemIndexByKey(r,o,e.s,n);this.logger.debug(`[applyDiffOpsToRange] Remove: key=${o}, index=${a}, total=${r.length}`),a>=0?(r.splice(a,1),this.logger.debug(`[applyDiffOpsToRange] After removal: ${r.length} items`)):this.logger.debug(`[applyDiffOpsToRange] Remove failed: key ${o} not found`);break}case"u":{let o=this.findItemIndexByKey(r,s[1],e.s,n),a=s[2];o>=0&&a&&(r[o]=this.mergeRangeItem(r[o],a,n));break}case"a":{let o=Array.isArray(s[1])?s[1]:[s[1]];s[2]&&(e.s=s[2]),r.push(...o),s[3]&&typeof s[3]=="object"&&s[3].idKey&&(this.rangeIdKeys[n]=s[3].idKey);break}case"p":{let o=Array.isArray(s[1])?s[1]:[s[1]];s[2]&&(e.s=s[2]),r.unshift(...o);break}case"i":{let o=this.findItemIndexByKey(r,s[1],e.s,n);if(o>=0){let a=Array.isArray(s[2])?s[2]:[s[2]];r.splice(o+1,0,...a)}break}case"o":{let o=s[1],a=[],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 o){let p=c.get(d);p&&a.push(p)}r.length=0,r.push(...a);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 l=r.toString();if(e[l]!==void 0){let o=t?`${t}.${l}`:l;n+=this.renderValue(e[l],l,o)}}}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 l=n||t||"";return l&&(this.rangeState[l]={items:e.d,statics:e.s,staticsMap:e.sm},e.m&&typeof e.m=="object"&&typeof e.m.idKey=="string"&&(this.rangeIdKeys[l]=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(l=>/^\d+$/.test(l)).sort((l,o)=>parseInt(l)-parseInt(o));if(s.length>0&&s.length===r.length)return s.map(l=>{let o=n?`${n}.${l}`:l;return this.renderValue(e[l],l,o)}).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 l=s.toString(),o=n?`${n}.${l}`:l;return typeof r=="object"&&r&&r.s?this.reconstructFromTree(r,o):this.renderValue(r,l,o)}).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:l}=e;if(!r||!Array.isArray(r))return"";if(r.length===0){if(e.else){let a="else",c=n?`${n}.else`:"else";return this.renderValue(e.else,a,c)}return""}let o=l&&typeof l=="object";return s&&Array.isArray(s)?r.map((a,c)=>{let d=s;o&&a._sk&&l[a._sk]&&(d=l[a._sk]);let p="";for(let u=0;u<d.length;u++)if(p+=d[u],u<d.length-1){let g=u.toString();if(a[g]!==void 0){let v=n?`${n}.${c}.${g}`:`${c}.${g}`;p+=this.renderValue(a[g],g,v)}}return p}).join(""):r.map((a,c)=>{let d=c.toString(),p=n?`${n}.${d}`:d;return this.renderValue(a,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 o of e){if(!Array.isArray(o)||o.length<2)continue;switch(o[0]){case"r":{let c=this.findItemIndexByKey(r,o[1],s,t);c>=0&&r.splice(c,1);break}case"u":{let c=this.findItemIndexByKey(r,o[1],s,t),d=o[2];c>=0&&d&&(r[c]=this.mergeRangeItem(r[c],d,t||""));break}case"a":{this.addItemsToRange(r,o[1],o[2],n,!1),o[3]&&typeof o[3]=="object"&&o[3].idKey&&(this.rangeIdKeys[t||""]=o[3].idKey);break}case"p":{this.addItemsToRange(r,o[1],o[2],n,!0);break}case"i":{let c=this.findItemIndexByKey(r,o[1],s,t);if(c>=0){let d=Array.isArray(o[2])?o[2]:[o[2]];r.splice(c+1,0,...d)}break}case"o":{let c=o[1],d=[],p=new Map;for(let u of r){let g=this.getItemKey(u,s,t);g&&p.set(g,u)}for(let u of c){let g=p.get(u);g&&d.push(g)}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 l=this.getCurrentRangeStructure(t);return l&&l.s?this.renderItemsWithStatics(r,l.s,l.sm,t):r.map(o=>this.renderValue(o)).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((l,o)=>{let a=t;n&&typeof n=="object"&&l._sk&&n[l._sk]&&(a=n[l._sk]);let c="";for(let d=0;d<a.length;d++)if(c+=a[d],d<a.length-1){let p=d.toString();if(l[p]!==void 0){let u=r?`${r}.${o}.${p}`:`${o}.${p}`;c+=this.renderValue(l[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 l=Array.isArray(t)?t:[t];s?e.unshift(...l):e.push(...l)}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 he=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 me=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),l=e.querySelectorAll(`[name="${s}"]`);for(let o of l){if(this.wiredElements.has(o)||o.hasAttribute("lvt-input")||o.hasAttribute("lvt-change"))continue;let a=o.closest("form");a&&(a.hasAttribute("lvt-change")||a.hasAttribute("lvt-form:no-intercept"))||o instanceof HTMLInputElement&&(o.type==="hidden"||o.type==="submit"||o.type==="button")||o instanceof HTMLButtonElement||(this.attachListener(o,n,r),this.wiredElements.add(o))}}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,l=Number.isNaN(s)||s<0?300:s,a=X(()=>{if(!this.enabled)return;let d=n==="attribute"&&e.type==="checkbox"?e.checked:e.value;this.context.send({action:"change",data:{[t]:d}})},l),c=n==="attribute"||e instanceof HTMLSelectElement?"change":"input";e.addEventListener(c,a),this.elementCleanups.set(e,()=>{e.removeEventListener(c,a)}),this.logger.debug(`Auto-wired ${c} listener on [name="${t}"] (debounce: ${l}ms)`)}};var Re=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===WebSocket.OPEN&&this.socket.send(e)}disconnect(){var e,t;this.manuallyClosed=!0,this.clearReconnectTimer(),this.socket&&(this.socket.readyState!==WebSocket.CLOSED&&((t=(e=this.options).onClose)==null||t.call(e,new CloseEvent("close",{code:1e3,reason:"",wasClean:this.socket.readyState===WebSocket.OPEN}))),this.socket.onopen=null,this.socket.onmessage=null,this.socket.onclose=null,this.socket.onerror=null,this.socket.close(),this.socket=null)}getSocket(){return this.socket}scheduleReconnect(){var o,a,c,d,p;this.clearReconnectTimer();let e=(o=this.options.maxReconnectAttempts)!=null?o:10;if(e>0&&this.reconnectAttempts>=e){(c=(a=this.options).onReconnectFailed)==null||c.call(a);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,l=Math.min(r+s,n);this.reconnectTimer=window.setTimeout(()=>{var u,g;(g=(u=this.options).onReconnectAttempt)==null||g.call(u,this.reconnectAttempts,l),this.connect()},l)}clearReconnectTimer(){this.reconnectTimer!==null&&(clearTimeout(this.reconnectTimer),this.reconnectTimer=null)}},ve=class{constructor(e){this.config=e;this.transport=null;this.liveUrlOverride=null}setLiveUrl(e){this.liveUrlOverride=e}async connect(){var d;let e=this.getLiveUrl();if(!await ln(e,this.config.logger))return{usingWebSocket:!1,initialState:await bt(e,this.config.logger)};let n,r,s=new Promise((p,u)=>{n=p,r=u}),l=!1,o=!1,a=null,c=p=>{l||(l=!0,a!==null&&(clearTimeout(a),a=null),p?r(p):n({usingWebSocket:!0}))};a=setTimeout(()=>{c(new Error("WebSocket open timed out after 10s"))},1e4),this.transport=new Re({url:this.getWebSocketUrl(),autoReconnect:this.config.options.autoReconnect,reconnectDelay:this.config.options.reconnectDelay,maxReconnectDelay:16e3,maxReconnectAttempts:10,onOpen:()=>{o=!0,this.config.onConnected(),c()},onMessage:p=>{try{let u=JSON.parse(p.data);this.config.onMessage(u,p)}catch(u){this.config.logger.error("Failed to parse WebSocket message:",u)}},onClose:()=>{o?this.config.onDisconnected():c(new Error("WebSocket closed before it opened"))},onReconnectAttempt:(p,u)=>{var g,v;(v=(g=this.config).onReconnectAttempt)==null||v.call(g,p,u)},onReconnectFailed:()=>{var p,u;(u=(p=this.config).onReconnectFailed)==null||u.call(p)},onError:p=>{var u,g;(g=(u=this.config).onError)==null||g.call(u,p),c(new Error("WebSocket errored before it opened"))}}),this.transport.connect();try{return await s}catch(p){return this.config.logger.warn("WebSocket open failed, falling back to HTTP",p),(d=this.transport)==null||d.disconnect(),this.transport=null,{usingWebSocket:!1,initialState:await bt(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.liveUrlOverride||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.liveUrlOverride||this.config.options.liveUrl||window.location.pathname+window.location.search}};async function ln(i,e){try{let n=(await fetch(i,{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 bt(i,e){try{let t=await fetch(i,{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 ye=class{async upload(e,t,n){let{file:r}=e;e.abortController=new AbortController;try{let s=new XMLHttpRequest;s.upload.addEventListener("progress",o=>{o.lengthComputable&&(e.bytesUploaded=o.loaded,e.progress=Math.round(o.loaded/o.total*100),n&&n(e))}),e.abortController.signal.addEventListener("abort",()=>{s.abort()});let l=new Promise((o,a)=>{s.addEventListener("load",()=>{s.status>=200&&s.status<300?(e.done=!0,e.progress=100,o()):a(new Error(`S3 upload failed with status ${s.status}: ${s.statusText}`))}),s.addEventListener("error",()=>{a(new Error("S3 upload failed: Network error"))}),s.addEventListener("abort",()=>{a(new Error("S3 upload cancelled"))})});if(s.open("PUT",t.url),t.headers)for(let[o,a]of Object.entries(t.headers))s.setRequestHeader(o,a);s.send(r),await l}catch(s){throw e.error=s instanceof Error?s.message:String(s),s}}};var be=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 ye)}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 l=o=>{let a=o.target.files;!a||a.length===0||this.startUpload(r,Array.from(a))};n.addEventListener("change",l),this.inputHandlers.set(n,l)})}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 o of r)s.set(o.name,o);let l=[];for(let o of n){let a=s.get(o.client_name);if(!a){console.warn(`No file found for entry ${o.entry_id} (client_name: ${o.client_name})`);continue}let c={id:o.entry_id,file:a,uploadName:t,progress:0,bytesUploaded:0,valid:o.valid,done:!1,error:o.error,external:o.external};if(this.entries.set(c.id,c),l.push(c),!o.valid){this.onError&&o.error&&this.onError(c,o.error);continue}o.auto_upload&&(o.external?this.uploadExternal(c,o.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 l=Math.min(r+this.chunkSize,t.size),o=t.slice(r,l),a=await this.fileToBase64(o),c={action:"upload_chunk",entry_id:n,chunk_base64:a,offset:r,total:t.size};this.sendMessage(c),r=l,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 l=s instanceof Error?s.message:String(s);e.error=l,this.onError&&this.onError(e,l),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 l=r.result.split(",")[1];t(l)},r.onerror=n,r.readAsDataURL(e)})}};var Et={silent:0,error:1,warn:2,info:3,debug:4},wt="LiveTemplate",Fe=class i{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 i(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 Et[e]<=Et[this.state.level]}formatPrefix(){return this.scope.length===0?`[${wt}]`:`[${wt}:${this.scope.join(":")}]`}};function Oe(i={}){var n,r;let e={level:(n=i.level)!=null?n:"info"},t=Array.isArray(i.scope)?i.scope:i.scope?[i.scope]:[];return new Fe(e,t,(r=i.sink)!=null?r:console)}async function Tt(i,e){try{let t=globalThis==null?void 0:globalThis.require;if(typeof t=="function"){let s=t("fs"),l=JSON.parse(s.readFileSync(e,"utf8"));return i.applyUpdate(l)}let r=await(await fetch(e)).json();return i.applyUpdate(r)}catch(t){throw new Error(`Failed to load update from ${e}: ${t}`)}}function St(i,e){let t=[],n=c=>c.replace(/\s+/g," ").replace(/>\s+</g,"><").trim(),r=n(i),s=n(e);if(r===s)return{match:!0,differences:[]};let l=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 ge=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 gt=!1;function nn(i){let e=i.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():s instanceof HTMLElement&&s.hasAttribute("popover")&&(r==="show-popover"&&typeof s.showPopover=="function"?s.showPopover():r==="hide-popover"&&typeof s.hidePopover=="function"?s.hidePopover():r==="toggle-popover"&&typeof s.togglePopover=="function"&&s.togglePopover()))}function ft(){"commandForElement"in HTMLButtonElement.prototype||gt||(gt=!0,document.addEventListener("click",nn))}var z="__lvt_scroll_away",D=[];function rn(){for(let i=D.length-1;i>=0;i--){let e=D[i];e.trigger.isConnected||(e.target.removeEventListener("scroll",e.handler),delete e.trigger[z],D.splice(i,1))}}function mt(i){rn();let e=t=>{let n=t.getAttribute("lvt-scroll-away");if(!n)return;if(n!=="bottom"&&n!=="top"){console.warn(`Unknown lvt-scroll-away edge: ${n}`);return}let r=B(t);if(!r||r===t){let p=t[z];p&&(p.target.removeEventListener("scroll",p.handler),ht(p),delete t[z]),console.warn("lvt-scroll-away requires data-lvt-target pointing to a scrollable container");return}let s=t[z];if(s){if(s.target===r)return;s.target.removeEventListener("scroll",s.handler),ht(s)}let l=parseInt(getComputedStyle(t).getPropertyValue("--lvt-scroll-threshold").trim(),10),o=isNaN(l)?200:l,a=!1,c=()=>{a||(a=!0,requestAnimationFrame(()=>{a=!1,(n==="top"?r.scrollTop:r.scrollHeight-r.scrollTop-r.clientHeight)>o?t.classList.add("visible"):t.classList.remove("visible")}))};r.addEventListener("scroll",c,{passive:!0}),c();let d={trigger:t,target:r,handler:c};t[z]=d,D.push(d)};e(i),i.querySelectorAll("[lvt-scroll-away]").forEach(e)}function ht(i){let e=D.indexOf(i);e!==-1&&D.splice(e,1)}function vt(i){for(let e=D.length-1;e>=0;e--){let t=D[e];i&&t.trigger.isConnected&&!i.contains(t.trigger)||(t.target.removeEventListener("scroll",t.handler),t.trigger.classList.remove("visible"),delete t.trigger[z],D.splice(e,1))}}function yt(i){return typeof structuredClone=="function"?structuredClone(i):JSON.parse(JSON.stringify(i))}function sn(i){return i!=null&&typeof i=="object"&&Array.isArray(i.d)&&Array.isArray(i.s)}function _e(i,e=0){if(e>50||i==null||typeof i!="object"||Array.isArray(i))return!1;if(sn(i))return!0;for(let n of Object.keys(i))if(/^\d+$/.test(n)){let r=i[n];if(r!=null&&typeof r=="object"&&!Array.isArray(r)&&_e(r,e+1))return!0}return!1}function on(i,e){if(!e.s||!Array.isArray(e.s))return!1;if(_e(i)&&!_e(e))return!0;for(let t of Object.keys(i))if(/^\d+$/.test(t)&&!(t in e))return!0;return!1}var fe=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 o=this.treeState[r];o&&typeof o=="object"&&!Array.isArray(o)&&Array.isArray(o.d)&&Array.isArray(o.s)?(this.treeState[r]=yt(o),this.applyDifferentialOpsToRange(this.treeState[r],s,r)):this.treeState[r]=s,t=!0}else{let o=this.treeState[r],a=typeof s=="object"&&s!==null&&!Array.isArray(s)?this.deepMergeTreeNodes(o,s,r):s;JSON.stringify(o)!==JSON.stringify(a)&&(this.treeState[r]=a,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(on(e,t))return this.logger.debug(`[deepMerge] Structure transition at path ${n}, replacing instead of merging`),t;let r={...e};for(let[l,o]of Object.entries(t)){let a=n?`${n}.${l}`:l,c=Array.isArray(o)&&o.length>0&&Array.isArray(o[0])&&typeof o[0][0]=="string",d=r[l]&&typeof r[l]=="object"&&!Array.isArray(r[l])&&Array.isArray(r[l].d)&&Array.isArray(r[l].s);c&&d?(r[l]=yt(r[l]),this.logger.debug(`[deepMerge] Applying diff ops at path ${a}`,{ops:o,rangeItems:(s=r[l].d)==null?void 0:s.length}),this.applyDifferentialOpsToRange(r[l],o,a)):typeof o=="object"&&o!==null&&!Array.isArray(o)&&typeof r[l]=="object"&&r[l]!==null&&!Array.isArray(r[l])?r[l]=this.deepMergeTreeNodes(r[l],o,a):r[l]=o}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 o=s[1],a=this.findItemIndexByKey(r,o,e.s,n);this.logger.debug(`[applyDiffOpsToRange] Remove: key=${o}, index=${a}, total=${r.length}`),a>=0?(r.splice(a,1),this.logger.debug(`[applyDiffOpsToRange] After removal: ${r.length} items`)):this.logger.debug(`[applyDiffOpsToRange] Remove failed: key ${o} not found`);break}case"u":{let o=this.findItemIndexByKey(r,s[1],e.s,n),a=s[2];o>=0&&a&&(r[o]=this.mergeRangeItem(r[o],a,n));break}case"a":{let o=Array.isArray(s[1])?s[1]:[s[1]];s[2]&&(e.s=s[2]),r.push(...o),s[3]&&typeof s[3]=="object"&&s[3].idKey&&(this.rangeIdKeys[n]=s[3].idKey);break}case"p":{let o=Array.isArray(s[1])?s[1]:[s[1]];s[2]&&(e.s=s[2]),r.unshift(...o);break}case"i":{let o=this.findItemIndexByKey(r,s[1],e.s,n);if(o>=0){let a=Array.isArray(s[2])?s[2]:[s[2]];r.splice(o+1,0,...a)}break}case"o":{let o=s[1],a=[],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 o){let p=c.get(d);p&&a.push(p)}r.length=0,r.push(...a);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 l=r.toString();if(e[l]!==void 0){let o=t?`${t}.${l}`:l;n+=this.renderValue(e[l],l,o)}}}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 l=n||t||"";return l&&(this.rangeState[l]={items:e.d,statics:e.s,staticsMap:e.sm},e.m&&typeof e.m=="object"&&typeof e.m.idKey=="string"&&(this.rangeIdKeys[l]=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(l=>/^\d+$/.test(l)).sort((l,o)=>parseInt(l)-parseInt(o));if(s.length>0&&s.length===r.length)return s.map(l=>{let o=n?`${n}.${l}`:l;return this.renderValue(e[l],l,o)}).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 l=s.toString(),o=n?`${n}.${l}`:l;return typeof r=="object"&&r&&r.s?this.reconstructFromTree(r,o):this.renderValue(r,l,o)}).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:l}=e;if(!r||!Array.isArray(r))return"";if(r.length===0){if(e.else){let a="else",c=n?`${n}.else`:"else";return this.renderValue(e.else,a,c)}return""}let o=l&&typeof l=="object";return s&&Array.isArray(s)?r.map((a,c)=>{let d=s;o&&a._sk&&l[a._sk]&&(d=l[a._sk]);let p="";for(let u=0;u<d.length;u++)if(p+=d[u],u<d.length-1){let g=u.toString();if(a[g]!==void 0){let v=n?`${n}.${c}.${g}`:`${c}.${g}`;p+=this.renderValue(a[g],g,v)}}return p}).join(""):r.map((a,c)=>{let d=c.toString(),p=n?`${n}.${d}`:d;return this.renderValue(a,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 o of e){if(!Array.isArray(o)||o.length<2)continue;switch(o[0]){case"r":{let c=this.findItemIndexByKey(r,o[1],s,t);c>=0&&r.splice(c,1);break}case"u":{let c=this.findItemIndexByKey(r,o[1],s,t),d=o[2];c>=0&&d&&(r[c]=this.mergeRangeItem(r[c],d,t||""));break}case"a":{this.addItemsToRange(r,o[1],o[2],n,!1),o[3]&&typeof o[3]=="object"&&o[3].idKey&&(this.rangeIdKeys[t||""]=o[3].idKey);break}case"p":{this.addItemsToRange(r,o[1],o[2],n,!0);break}case"i":{let c=this.findItemIndexByKey(r,o[1],s,t);if(c>=0){let d=Array.isArray(o[2])?o[2]:[o[2]];r.splice(c+1,0,...d)}break}case"o":{let c=o[1],d=[],p=new Map;for(let u of r){let g=this.getItemKey(u,s,t);g&&p.set(g,u)}for(let u of c){let g=p.get(u);g&&d.push(g)}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 l=this.getCurrentRangeStructure(t);return l&&l.s?this.renderItemsWithStatics(r,l.s,l.sm,t):r.map(o=>this.renderValue(o)).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((l,o)=>{let a=t;n&&typeof n=="object"&&l._sk&&n[l._sk]&&(a=n[l._sk]);let c="";for(let d=0;d<a.length;d++)if(c+=a[d],d<a.length-1){let p=d.toString();if(l[p]!==void 0){let u=r?`${r}.${o}.${p}`:`${o}.${p}`;c+=this.renderValue(l[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 l=Array.isArray(t)?t:[t];s?e.unshift(...l):e.push(...l)}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 he=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 me=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),l=e.querySelectorAll(`[name="${s}"]`);for(let o of l){if(this.wiredElements.has(o)||o.hasAttribute("lvt-input")||o.hasAttribute("lvt-change"))continue;let a=o.closest("form");a&&(a.hasAttribute("lvt-change")||a.hasAttribute("lvt-form:no-intercept"))||o instanceof HTMLInputElement&&(o.type==="hidden"||o.type==="submit"||o.type==="button")||o instanceof HTMLButtonElement||(this.attachListener(o,n,r),this.wiredElements.add(o))}}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,l=Number.isNaN(s)||s<0?300:s,a=X(()=>{if(!this.enabled)return;let d=n==="attribute"&&e.type==="checkbox"?e.checked:e.value;this.context.send({action:"change",data:{[t]:d}})},l),c=n==="attribute"||e instanceof HTMLSelectElement?"change":"input";e.addEventListener(c,a),this.elementCleanups.set(e,()=>{e.removeEventListener(c,a)}),this.logger.debug(`Auto-wired ${c} listener on [name="${t}"] (debounce: ${l}ms)`)}};var Re=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===WebSocket.OPEN&&this.socket.send(e)}disconnect(){var e,t;this.manuallyClosed=!0,this.clearReconnectTimer(),this.socket&&(this.socket.readyState!==WebSocket.CLOSED&&((t=(e=this.options).onClose)==null||t.call(e,new CloseEvent("close",{code:1e3,reason:"",wasClean:this.socket.readyState===WebSocket.OPEN}))),this.socket.onopen=null,this.socket.onmessage=null,this.socket.onclose=null,this.socket.onerror=null,this.socket.close(),this.socket=null)}getSocket(){return this.socket}scheduleReconnect(){var o,a,c,d,p;this.clearReconnectTimer();let e=(o=this.options.maxReconnectAttempts)!=null?o:10;if(e>0&&this.reconnectAttempts>=e){(c=(a=this.options).onReconnectFailed)==null||c.call(a);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,l=Math.min(r+s,n);this.reconnectTimer=window.setTimeout(()=>{var u,g;(g=(u=this.options).onReconnectAttempt)==null||g.call(u,this.reconnectAttempts,l),this.connect()},l)}clearReconnectTimer(){this.reconnectTimer!==null&&(clearTimeout(this.reconnectTimer),this.reconnectTimer=null)}},ve=class{constructor(e){this.config=e;this.transport=null;this.liveUrlOverride=null}setLiveUrl(e){this.liveUrlOverride=e}async connect(){var d;let e=this.getLiveUrl();if(!await ln(e,this.config.logger))return{usingWebSocket:!1,initialState:await bt(e,this.config.logger)};let n,r,s=new Promise((p,u)=>{n=p,r=u}),l=!1,o=!1,a=null,c=p=>{l||(l=!0,a!==null&&(clearTimeout(a),a=null),p?r(p):n({usingWebSocket:!0}))};a=setTimeout(()=>{c(new Error("WebSocket open timed out after 10s"))},1e4),this.transport=new Re({url:this.getWebSocketUrl(),autoReconnect:this.config.options.autoReconnect,reconnectDelay:this.config.options.reconnectDelay,maxReconnectDelay:16e3,maxReconnectAttempts:10,onOpen:()=>{o=!0,this.config.onConnected(),c()},onMessage:p=>{try{let u=JSON.parse(p.data);this.config.onMessage(u,p)}catch(u){this.config.logger.error("Failed to parse WebSocket message:",u)}},onClose:()=>{o?this.config.onDisconnected():c(new Error("WebSocket closed before it opened"))},onReconnectAttempt:(p,u)=>{var g,v;(v=(g=this.config).onReconnectAttempt)==null||v.call(g,p,u)},onReconnectFailed:()=>{var p,u;(u=(p=this.config).onReconnectFailed)==null||u.call(p)},onError:p=>{var u,g;(g=(u=this.config).onError)==null||g.call(u,p),c(new Error("WebSocket errored before it opened"))}}),this.transport.connect();try{return await s}catch(p){return this.config.logger.warn("WebSocket open failed, falling back to HTTP",p),(d=this.transport)==null||d.disconnect(),this.transport=null,{usingWebSocket:!1,initialState:await bt(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.liveUrlOverride||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.liveUrlOverride||this.config.options.liveUrl||window.location.pathname+window.location.search}};async function ln(i,e){try{let n=(await fetch(i,{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 bt(i,e){try{let t=await fetch(i,{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 ye=class{async upload(e,t,n){let{file:r}=e;e.abortController=new AbortController;try{let s=new XMLHttpRequest;s.upload.addEventListener("progress",o=>{o.lengthComputable&&(e.bytesUploaded=o.loaded,e.progress=Math.round(o.loaded/o.total*100),n&&n(e))}),e.abortController.signal.addEventListener("abort",()=>{s.abort()});let l=new Promise((o,a)=>{s.addEventListener("load",()=>{s.status>=200&&s.status<300?(e.done=!0,e.progress=100,o()):a(new Error(`S3 upload failed with status ${s.status}: ${s.statusText}`))}),s.addEventListener("error",()=>{a(new Error("S3 upload failed: Network error"))}),s.addEventListener("abort",()=>{a(new Error("S3 upload cancelled"))})});if(s.open("PUT",t.url),t.headers)for(let[o,a]of Object.entries(t.headers))s.setRequestHeader(o,a);s.send(r),await l}catch(s){throw e.error=s instanceof Error?s.message:String(s),s}}};var be=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 ye)}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 l=o=>{let a=o.target.files;!a||a.length===0||this.startUpload(r,Array.from(a))};n.addEventListener("change",l),this.inputHandlers.set(n,l)})}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 o of r)s.set(o.name,o);let l=[];for(let o of n){let a=s.get(o.client_name);if(!a){console.warn(`No file found for entry ${o.entry_id} (client_name: ${o.client_name})`);continue}let c={id:o.entry_id,file:a,uploadName:t,progress:0,bytesUploaded:0,valid:o.valid,done:!1,error:o.error,external:o.external};if(this.entries.set(c.id,c),l.push(c),!o.valid){this.onError&&o.error&&this.onError(c,o.error);continue}o.auto_upload&&(o.external?this.uploadExternal(c,o.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 l=Math.min(r+this.chunkSize,t.size),o=t.slice(r,l),a=await this.fileToBase64(o),c={action:"upload_chunk",entry_id:n,chunk_base64:a,offset:r,total:t.size};this.sendMessage(c),r=l,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 l=s instanceof Error?s.message:String(s);e.error=l,this.onError&&this.onError(e,l),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 l=r.result.split(",")[1];t(l)},r.onerror=n,r.readAsDataURL(e)})}};var Et={silent:0,error:1,warn:2,info:3,debug:4},wt="LiveTemplate",Fe=class i{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 i(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 Et[e]<=Et[this.state.level]}formatPrefix(){return this.scope.length===0?`[${wt}]`:`[${wt}:${this.scope.join(":")}]`}};function Oe(i={}){var n,r;let e={level:(n=i.level)!=null?n:"info"},t=Array.isArray(i.scope)?i.scope:i.scope?[i.scope]:[];return new Fe(e,t,(r=i.sink)!=null?r:console)}async function Tt(i,e){try{let t=globalThis==null?void 0:globalThis.require;if(typeof t=="function"){let s=t("fs"),l=JSON.parse(s.readFileSync(e,"utf8"));return i.applyUpdate(l)}let r=await(await fetch(e)).json();return i.applyUpdate(r)}catch(t){throw new Error(`Failed to load update from ${e}: ${t}`)}}function St(i,e){let t=[],n=c=>c.replace(/\s+/g," ").replace(/>\s+</g,"><").trim(),r=n(i),s=n(e);if(r===s)return{match:!0,differences:[]};let l=r.split(`
|
|
30
30
|
`),o=s.split(`
|
|
31
31
|
`),a=Math.max(l.length,o.length);for(let c=0;c<a;c++){let d=l[c]||"",p=o[c]||"";d!==p&&(t.push(`Line ${c+1}:`),t.push(` Expected: ${d}`),t.push(` Actual: ${p}`))}return{match:!1,differences:t}}var Ee=class i{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;this.navigationEpoch=0;this.liveUrlOverride=null;this.visibilityHandlerAttached=!1;this.hiddenAt=0;this.reconnecting=!1;this.visibilityHandler=null;this.pageshowHandler=null;this.visibilityReconnectTimer=null;let{logger:t,logLevel:n,debug:r,...s}=e,l=n!=null?n:r?"debug":"info",o=t!=null?t:Oe({level:l});t?n?t.setLevel(n):r&&t.setLevel("debug"):o.setLevel(l),this.logger=o.child("Client"),this.options={autoReconnect:!1,reconnectDelay:1e3,liveUrl:window.location.pathname+window.location.search,...s},this.treeRenderer=new fe(this.logger.child("TreeRenderer")),this.focusManager=new re(this.logger.child("FocusManager")),this.formLifecycleManager=new he,this.loadingIndicator=new pe,this.formDisabler=new ge,this.uploadHandler=new be(a=>this.send(a),{chunkSize:256*1024,onProgress:a=>{this.wrapperElement&&this.wrapperElement.dispatchEvent(new CustomEvent("lvt:upload:progress",{detail:{entry:a}}))},onComplete:(a,c)=>{this.logger.info(`Upload complete: ${a}`,c),this.wrapperElement&&this.wrapperElement.dispatchEvent(new CustomEvent("lvt:upload:complete",{detail:{uploadName:a,entries:c}}))},onError:(a,c)=>{this.logger.error(`Upload error for ${a.id}:`,c),this.wrapperElement&&this.wrapperElement.dispatchEvent(new CustomEvent("lvt:upload:error",{detail:{entry:a,error:c}}))}}),this.eventDelegator=new le({getWrapperElement:()=>this.wrapperElement,getRateLimitedHandlers:()=>this.rateLimitedHandlers,parseValue:a=>this.parseValue(a),send:a=>this.send(a),sendHTTPMultipart:(a,c,d)=>this.sendHTTPMultipart(a,c,d),setActiveSubmission:(a,c,d)=>this.formLifecycleManager.setActiveSubmission(a,c,d),getWebSocketReadyState:()=>this.webSocketManager.getReadyState(),triggerPendingUploads:a=>this.uploadHandler.triggerPendingUploads(a)},this.logger.child("EventDelegator")),this.linkInterceptor=new de({getWrapperElement:()=>this.wrapperElement,handleNavigationResponse:a=>this.handleNavigationResponse(a),sendNavigate:a=>this.sendNavigate(a),canSendNavigate:()=>!this.useHTTP&&this.webSocketManager.getReadyState()===1},this.logger.child("LinkInterceptor")),this.observerManager=new ue({getWrapperElement:()=>this.wrapperElement,send:a=>this.send(a)},this.logger.child("ObserverManager")),this.changeAutoWirer=new me({getWrapperElement:()=>this.wrapperElement,send:a=>this.send(a)},this.logger.child("ChangeAutoWirer")),this.webSocketManager=new ve({options:this.options,logger:this.logger.child("Transport"),onConnected:()=>{var a,c,d;this.ws=this.webSocketManager.getSocket(),this.logger.info("WebSocket connected"),this.clearFlashQueryParams(),(c=(a=this.options).onConnect)==null||c.call(a),(d=this.wrapperElement)==null||d.dispatchEvent(new Event("lvt:connected"))},onDisconnected:()=>{var a,c,d;this.ws=null,this.logger.info("WebSocket disconnected"),(c=(a=this.options).onDisconnect)==null||c.call(a),(d=this.wrapperElement)==null||d.dispatchEvent(new Event("lvt:disconnected"))},onMessage:(a,c)=>{this.handleWebSocketPayload(a,c)},onReconnectAttempt:()=>{this.logger.info("Attempting to reconnect...")},onError:a=>{var c,d;this.logger.error("WebSocket error:",a),(d=(c=this.options).onError)==null||d.call(c,a)}})}static autoInit(){let e=Oe({scope:"Client:autoInit"}),t=()=>{let n=document.querySelector("[data-lvt-id]");if(n){let r=new i;r.wrapperElement=n,n.getAttribute("data-lvt-loading")==="true"&&(r.loadingIndicator.show(),r.formDisabler.disable(r.wrapperElement)),r.connect().catch(l=>{e.error("Auto-initialization connect failed:",l)}),window.liveTemplateClient=r}};document.readyState==="loading"?document.addEventListener("DOMContentLoaded",t):t()}handleWebSocketPayload(e,t){var r,s,l;let n=e;if(n.type==="upload_progress"){this.uploadHandler.handleProgressMessage(n);return}if(n.upload_name&&n.entries){let o=n;try{this.handleUploadStartResponse(o)}catch(a){this.logger.error("Error handling upload start response:",a)}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,Ce()),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:(l=e.meta)==null?void 0:l.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(),nt(),this.eventDelegator.setupFocusTrapDelegation(),this.eventDelegator.setupAutofocusDelegation(),this.linkInterceptor.setup(this.wrapperElement),ae(),ft(),ut(),Xe(this.wrapperElement),this.focusManager.attach(this.wrapperElement),this.observerManager.setupInfiniteScrollObserver(),this.observerManager.setupInfiniteScrollMutationObserver(),this.setupVisibilityReconnect()}disconnect(){this.webSocketManager.disconnect(),this.ws=null,this.useHTTP=!1,this.hiddenAt=0,this.reconnecting=!1,this.teardownVisibilityReconnect(),this.eventDelegator.teardownDOMEventTriggerDelegation(),pt(),this.wrapperElement&&(Ye(this.wrapperElement),Je(this.wrapperElement),vt(this.wrapperElement)),this.resetSessionState()}resetSessionState(){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,this.isInitialized=!1}setupVisibilityReconnect(){this.visibilityHandlerAttached||typeof document=="undefined"||(this.visibilityHandlerAttached=!0,this.visibilityHandler=()=>{if(document.hidden){!this.useHTTP&&this.webSocketManager.getReadyState()===1&&(this.hiddenAt=Date.now());return}if(this.hiddenAt===0)return;let e=Date.now()-this.hiddenAt;this.hiddenAt=0,!(e<3e3)&&this.scheduleVisibilityReconnect()},this.pageshowHandler=e=>{e.persisted&&this.scheduleVisibilityReconnect()},document.addEventListener("visibilitychange",this.visibilityHandler),window.addEventListener("pageshow",this.pageshowHandler))}teardownVisibilityReconnect(){this.visibilityReconnectTimer!==null&&(clearTimeout(this.visibilityReconnectTimer),this.visibilityReconnectTimer=null),!(!this.visibilityHandlerAttached||typeof document=="undefined")&&(this.visibilityHandler&&(document.removeEventListener("visibilitychange",this.visibilityHandler),this.visibilityHandler=null),this.pageshowHandler&&(window.removeEventListener("pageshow",this.pageshowHandler),this.pageshowHandler=null),this.visibilityHandlerAttached=!1)}scheduleVisibilityReconnect(){this.visibilityReconnectTimer!==null&&clearTimeout(this.visibilityReconnectTimer),this.visibilityReconnectTimer=setTimeout(()=>{this.visibilityReconnectTimer=null,this.wrapperElement&&!this.useHTTP&&!this.reconnecting&&this.webSocketManager.getReadyState()!==void 0&&this.performVisibilityReconnect()},500)}async performVisibilityReconnect(){var e;if(!this.reconnecting){this.reconnecting=!0;try{this.logger.info("Reconnecting after visibility change"),this.webSocketManager.disconnect(),this.ws=null,this.resetSessionState();let t=await this.webSocketManager.connect();if(!this.reconnecting)return;this.useHTTP=!t.usingWebSocket,this.useHTTP&&(this.ws=null,t.initialState&&this.wrapperElement&&this.handleWebSocketPayload(t.initialState)),(e=this.wrapperElement)==null||e.dispatchEvent(new Event("lvt:reconnected"))}catch(t){this.logger.error("Visibility reconnect failed:",t)}finally{this.reconnecting=!1}}}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")}getLiveUrl(){return this.liveUrlOverride||this.options.liveUrl||"/live"}sendNavigate(e){let t=new URL(e,window.location.origin),n={},r=new Set;t.searchParams.forEach((l,o)=>{r.has(o)&&this.logger.warn("sendNavigate: duplicate query param key \u2014 last value wins; server may receive incomplete data",{key:o,href:e}),r.add(o),n[o]=l});let s=t.pathname+t.search;if(this.webSocketManager.getReadyState()!==1){let l=this.webSocketManager.getReadyState();return l===3?this.logger.error("sendNavigate: WebSocket is CLOSED and autoReconnect may be disabled; navigate message dropped. Reload or re-enable autoReconnect.",{href:e}):this.options.autoReconnect?this.logger.warn("sendNavigate: WS not open; browser URL is ahead of server state until reconnect",{href:e,readyState:l}):this.logger.error("sendNavigate: WS not open and autoReconnect is disabled; navigate may be permanently lost",{href:e,readyState:l}),!1}return this.liveUrlOverride=s,this.webSocketManager.setLiveUrl(s),this.logger.debug("sendNavigate",{href:e,data:n}),this.send({action:"__navigate__",data:n}),!0}async sendHTTP(e){try{let t=this.getLiveUrl(),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,n){this.doSendHTTPMultipart(e,t,n)}async doSendHTTPMultipart(e,t,n){try{let r=this.getLiveUrl(),s=await fetch(r,{method:"POST",credentials:"include",headers:{Accept:"application/json"},body:n});if(!s.ok)throw new Error(`HTTP multipart request failed: ${s.status}`);let l=await s.json();this.wrapperElement&&this.updateDOM(this.wrapperElement,l.tree,l.meta)}catch(r){this.logger.error("Failed to send HTTP multipart request:",r)}}handleNavigationResponse(e){var a;if(!this.wrapperElement)return;let n=new DOMParser().parseFromString(e,"text/html"),r=this.wrapperElement.getAttribute("data-lvt-id"),s=(a=n.querySelector("title"))==null?void 0:a.textContent;s&&(document.title=s);let l=n.querySelector("[data-lvt-id]");if(l){let c=l.getAttribute("data-lvt-id");if(!c){this.logger.warn("Cross-handler navigation: new wrapper has empty data-lvt-id"),window.location.reload();return}this.linkInterceptor.teardownForWrapper(r),this.eventDelegator.teardownForWrapper(r);let d=++this.navigationEpoch;this.disconnect(),this.wrapperElement.setAttribute("data-lvt-id",c),this.wrapperElement.replaceChildren(...Array.from(l.childNodes).map(u=>u.cloneNode(!0))),this.eventDelegator.setupEventDelegation(),this.linkInterceptor.setup(this.wrapperElement),window.scrollTo(0,0);let p=window.location.pathname+window.location.search;if(this.liveUrlOverride=p,this.webSocketManager.setLiveUrl(p),!this.useHTTP){let g=`[data-lvt-id="${c.replace(/[\\"]/g,"\\$&")}"]`;this.connect(g).catch(v=>{d===this.navigationEpoch&&(this.logger.error("Cross-handler reconnect failed:",v),window.location.reload())})}return}this.linkInterceptor.teardownForWrapper(r),this.eventDelegator.teardownForWrapper(r),this.disconnect();let o=n.querySelector("body");o&&this.wrapperElement.replaceChildren(...Array.from(o.childNodes).map(c=>c.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 a=`<div data-lvt-id="${this.lvtId||"lvt-unknown"}">`+r+"</div>";return e.replace(/<body>[\s\S]*?<\/body>/,`<body>${a}</body>`)}updateDOM(e,t,n){let r=this.applyUpdate(t),s=a=>!a||typeof a!="object"?!1:a.s&&Array.isArray(a.s)?!0:Object.values(a).some(c=>s(c));if(!r.changed&&!s(t))return;let l=document.createElement(e.tagName);if(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"))),/<script[\s>]/i.test(r.html)){let a=e.tagName.toLowerCase(),c=a==="body"||a==="html"?"div":a,p=new DOMParser().parseFromString(`<${c}>${r.html}</${c}>`,"text/html"),u=p.body.firstElementChild;u?l.replaceChildren(...Array.from(u.childNodes)):(this.logger.warn("[updateDOM] DOMParser: no wrapper root element; using doc.body children"),l.replaceChildren(...Array.from(p.body.childNodes)))}else l.innerHTML=r.html;this.logger.isDebugEnabled()&&(this.logger.debug("[updateDOM] tempWrapper.innerHTML (first 500 chars):",l.innerHTML.substring(0,500)),this.logger.debug("[updateDOM] tempWrapper has <table>:",l.innerHTML.includes("<table>")),this.logger.debug("[updateDOM] tempWrapper has <tbody>:",l.innerHTML.includes("<tbody>")),this.logger.debug("[updateDOM] tempWrapper has <tr>:",l.innerHTML.includes("<tr")));let o=document.activeElement;if(o instanceof HTMLInputElement&&o.list instanceof HTMLDataListElement&&!l.querySelector("[data-lvt-force-update]")){this.logger.debug("[updateDOM] deferred: datalist input focused"),this.focusManager.restoreFocusedElement();return}Pe(e,l,{childrenOnly:!0,getNodeKey:a=>{if(a.nodeType===1)return a.getAttribute("data-key")||a.getAttribute("data-lvt-key")||void 0},onBeforeElUpdated:(a,c)=>{if(a.nodeType===Node.ELEMENT_NODE&&a.hasAttribute("lvt-ignore")&&!c.hasAttribute("data-lvt-force-update"))return!1;if(a.nodeType===Node.ELEMENT_NODE&&a.hasAttribute("lvt-ignore-attrs")&&!c.hasAttribute("data-lvt-force-update")&&c.nodeType===Node.ELEMENT_NODE){let d=a.attributes,p=c;for(let u=0;u<d.length;u++){let g=d[u];p.hasAttributeNS(g.namespaceURI,g.localName)||p.setAttributeNS(g.namespaceURI,g.name,g.value)}}if(a instanceof HTMLDataListElement&&!c.hasAttribute("data-lvt-force-update")){let d=document.activeElement;if(d instanceof HTMLInputElement&&d.list===a)return!1}return a instanceof HTMLDialogElement&&a.hasAttribute("open")&&!c.hasAttribute("data-lvt-force-update")&&c.setAttribute("open",""),!c.hasAttribute("data-lvt-force-update")&&a instanceof HTMLElement&&a.hasAttribute("popover")&&He(a)||(a instanceof HTMLInputElement&&c instanceof HTMLInputElement&&(a.type==="checkbox"||a.type==="radio")&&(c.hasAttribute("data-lvt-force-update")?(a.checked=c.checked,a.type==="checkbox"&&(a.indeterminate=c.indeterminate),a.removeAttribute("data-lvt-force-update")):(c.checked=a.checked,a.checked?c.setAttribute("checked",""):c.removeAttribute("checked"),a.type==="checkbox"&&(c.indeterminate=a.indeterminate))),this.focusManager.shouldSkipUpdate(a))?!1:a.isEqualNode(c)?!(!c.hasAttribute("data-lvt-force-update")&&(c.children.length===0||c.querySelector("[data-lvt-force-update]")===null)):(this.executeLifecycleHook(a,"lvt-updated"),!0)},onElUpdated:a=>{var c;a instanceof HTMLTextAreaElement&&(a.value=(c=a.textContent)!=null?c:""),a instanceof HTMLElement&&a.hasAttribute("data-lvt-force-update")&&a.removeAttribute("data-lvt-force-update")},onNodeAdded:a=>{var c;a instanceof HTMLTextAreaElement&&(a.value=(c=a.textContent)!=null?c:""),a instanceof HTMLElement&&a.hasAttribute("data-lvt-force-update")&&a.removeAttribute("data-lvt-force-update"),a.nodeType===Node.ELEMENT_NODE&&this.executeLifecycleHook(a,"lvt-mounted")},onBeforeNodeDiscarded:a=>(a.nodeType===Node.ELEMENT_NODE&&this.executeLifecycleHook(a,"lvt-destroyed"),!0)}),this.focusManager.restoreFocusedElement(),Qe(e),Ze(e),et(e),Ge(e,this.wrapperElement||void 0),this.eventDelegator.setupDOMEventTriggerDelegation(e),mt(e),tt(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.resetSessionState()}getTreeState(){return this.treeRenderer.getTreeState()}getStaticStructure(){return this.treeRenderer.getStaticStructure()}};typeof window!="undefined"&&Ee.autoInit();return Ht(cn);})();
|
|
32
32
|
//# sourceMappingURL=livetemplate-client.browser.js.map
|