@odoo/owl 3.0.0-alpha.19 → 3.0.0-alpha.20

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.
@@ -1 +1 @@
1
- !function(t){"use strict";class e extends Error{cause}function n(t){const n=(new DOMParser).parseFromString(t,"text/xml");if(n.getElementsByTagName("parsererror").length){let o="Invalid XML in template.";const s=n.getElementsByTagName("parsererror")[0].textContent;if(s){o+="\nThe parser has produced the following error message:\n"+s;const e=/\d+/g,n=e.exec(s);if(n){const i=Number(n[0]),r=t.split("\n")[i-1],l=e.exec(s);if(r&&l){const t=Number(l[0])-1;r[t]&&(o+=`\nThe error might be located at xml line ${i} column ${t}\n${r}\n${"-".repeat(t-1)}^`)}}}throw new e(o)}return n}function o(t){t=t.slice();const e=[];let n;for(;(n=t[0])&&"string"==typeof n;)e.push(t.shift());return{modifiers:e,data:t}}const s={shouldNormalizeDom:!0,mainEventHandler:(t,e,n)=>("function"==typeof t?t(e):Array.isArray(t)&&(t=o(t).data)[0](t[1],e),!1)},i=document.createTextNode("");class r{key;child;parentEl;constructor(t,e){this.key=t,this.child=e}mount(t,e){this.parentEl=t,this.child.mount(t,e)}moveBeforeDOMNode(t,e){this.child.moveBeforeDOMNode(t,e)}moveBeforeVNode(t,e){this.moveBeforeDOMNode(t&&t.firstNode()||e)}patch(t,e){if(this===t)return;let n=this.child,o=t.child;if(this.key===t.key)n.patch(o,e);else{const s=n.firstNode();s.parentElement.insertBefore(i,s),e&&n.beforeRemove(),n.remove(),o.mount(this.parentEl,i),this.child=o,this.key=t.key}}beforeRemove(){this.child.beforeRemove()}remove(){this.child.remove()}firstNode(){return this.child.firstNode()}toString(){return this.child.toString()}}function l(t,e){return new r(t,e)}const{setAttribute:a,removeAttribute:c}=Element.prototype,u=DOMTokenList.prototype,h=u.add,d=u.remove,f=Array.isArray,{split:p,trim:m}=String.prototype,g=/\s+/;function b(t,e){switch(e){case!1:case void 0:c.call(this,t);break;case!0:a.call(this,t,"");break;default:a.call(this,t,e)}}function v(t){return function(e){b.call(this,t,e)}}function y(t){if(f(t))"class"===t[0]?N.call(this,t[1]):b.call(this,t[0],t[1]);else for(let e in t)"class"===e?N.call(this,t[e]):b.call(this,e,t[e])}function w(t,e){if(f(t)){const n=t[0],o=t[1];if(n===e[0]){if(o===e[1])return;"class"===n?$.call(this,o,e[1]):b.call(this,n,o)}else c.call(this,e[0]),b.call(this,n,o)}else{for(let n in e)n in t||("class"===n?$.call(this,"",e[n]):c.call(this,n));for(let n in t){const o=t[n];o!==e[n]&&("class"===n?$.call(this,o,e[n]):b.call(this,n,o))}}}function x(t){const e={};switch(typeof t){case"string":const n=m.call(t);if(!n)return{};let o=p.call(n,g);for(let t=0,n=o.length;t<n;t++)e[o[t]]=!0;return e;case"object":for(let n in t){const o=t[n];if(o){if(n=m.call(n),!n)continue;const t=p.call(n,g);for(let n of t)e[n]=o}}return e;case"undefined":return{};case"number":return{[t]:!0};default:return{[t]:!0}}}function N(t){t=""===t?{}:x(t);const e=this.classList;for(let n in t)h.call(e,n)}function $(t,e){e=""===e?{}:x(e),t=""===t?{}:x(t);const n=this.classList;for(let o in e)o in t||d.call(n,o);for(let o in t)o in e||h.call(n,o)}function k(t){let e=!1;return async function(...n){e||(e=!0,await Promise.resolve(),e=!1,t(...n))}}function E(t){const n=t&&t.ownerDocument;if(n){if(!n.defaultView)throw new e("Cannot mount a component: the target document is not attached to a window (defaultView is missing)");if(t instanceof n.defaultView.HTMLElement||t instanceof ShadowRoot){if(!function(t,e){let n=t;const o=e.defaultView.ShadowRoot;for(;n;){if(n===e)return!0;if(n.parentNode)n=n.parentNode;else{if(!(n instanceof o&&n.host))return!1;n=n.host}}return!1}(t,n))throw new e("Cannot mount a component on a detached dom node");return}}throw new e("Cannot mount component: the target is not a valid DOM element")}class T extends EventTarget{trigger(t,e){this.dispatchEvent(new CustomEvent(t,{detail:e}))}}class _ extends String{}function A(t){return t instanceof _?t:void 0===t?C(""):"number"==typeof t?C(String(t)):([["&","&amp;"],["<","&lt;"],[">","&gt;"],["'","&#x27;"],['"',"&quot;"],["`","&#x60;"]].forEach(e=>{t=String(t).replace(new RegExp(e[0],"g"),e[1])}),C(t))}function C(t,...e){if(!Array.isArray(t))return new _(t);const n=t;let o="",s=0;for(;s<e.length;++s)o+=n[s]+A(e[s]);return o+=n[s],new _(o)}function D(t){const e=t.split(".")[0],n=t.includes(".capture");return t.includes(".synthetic")?function(t,e=!1){let n=`__event__synthetic_${t}`;e&&(n=`${n}_capture`);!function(t,e,n=!1){if(R[e])return;document.addEventListener(t,t=>function(t,e){let n=e.target;for(;null!==n;){const o=n[t];if(o)for(const t of Object.values(o)){if(s.mainEventHandler(t,e,n))return}n=n.parentNode}}(e,t),{capture:n}),R[e]=!0}(t,n,e);const o=O++;function i(t){const e=this[n]||{};e[o]=t,this[n]=e}function r(){delete this[n]}return{setup:i,update:i,remove:r}}(e,n):function(t,e=!1){let n=`__event__${t}_${S++}`;e&&(n=`${n}_capture`);function o(t){const e=t.currentTarget;if(!e||!function(t){if(!t)return!1;if(t.ownerDocument.contains(t))return!0;const e=t.getRootNode();return e instanceof ShadowRoot&&t.ownerDocument.contains(e.host)}(e))return;const o=e[n];o&&s.mainEventHandler(o,t,e)}function i(s){this[n]=s,this.addEventListener(t,o,{capture:e})}function r(){delete this[n],this.removeEventListener(t,o,{capture:e})}function l(t){this[n]=t}return{setup:i,update:l,remove:r}}(e,n)}let S=1;let O=1;const R={};const L=Node.prototype,B=L.insertBefore,I=(P=L,M="textContent",Object.getOwnPropertyDescriptor(P,M)).set;var P,M;const j=L.removeChild;class V{children;anchors;parentEl;isOnlyChild;constructor(t){this.children=t}mount(t,e){const n=this.children,o=n.length,s=new Array(o);for(let i=0;i<o;i++){let o=n[i];if(o)o.mount(t,e);else{const n=document.createTextNode("");s[i]=n,B.call(t,n,e)}}this.anchors=s,this.parentEl=t}moveBeforeDOMNode(t,e=this.parentEl){this.parentEl=e;const n=this.children,o=this.anchors;for(let s=0,i=n.length;s<i;s++){let i=n[s];if(i)i.moveBeforeDOMNode(t,e);else{const n=o[s];B.call(e,n,t)}}}moveBeforeVNode(t,e){if(t){const n=t.children[0];e=(n?n.firstNode():t.anchors[0])||null}const n=this.children,o=this.parentEl,s=this.anchors;for(let t=0,i=n.length;t<i;t++){let i=n[t];if(i)i.moveBeforeVNode(null,e);else{const n=s[t];B.call(o,n,e)}}}patch(t,e){if(this===t)return;const n=this.children,o=t.children,s=this.anchors,i=this.parentEl;for(let t=0,r=n.length;t<r;t++){const r=n[t],l=o[t];if(r)if(l)r.patch(l,e);else{const o=r.firstNode(),l=document.createTextNode("");s[t]=l,B.call(i,l,o),e&&r.beforeRemove(),r.remove(),n[t]=void 0}else if(l){n[t]=l;const e=s[t];l.mount(i,e),j.call(i,e)}}}beforeRemove(){const t=this.children;for(let e=0,n=t.length;e<n;e++){const n=t[e];n&&n.beforeRemove()}}remove(){const t=this.parentEl;if(this.isOnlyChild)I.call(t,"");else{const e=this.children,n=this.anchors;for(let o=0,s=e.length;o<s;o++){const s=e[o];s?s.remove():j.call(t,n[o])}}}firstNode(){const t=this.children[0];return t?t.firstNode():this.anchors[0]}toString(){return this.children.map(t=>t?t.toString():"").join("")}}function W(t){return new V(t)}const F=Node.prototype,K=CharacterData.prototype,U=F.insertBefore,H=((t,e)=>Object.getOwnPropertyDescriptor(t,e))(K,"data").set,z=F.removeChild;class q{text;parentEl;el;constructor(t){this.text=t}mountNode(t,e,n){this.parentEl=e,U.call(e,t,n),this.el=t}moveBeforeDOMNode(t,e=this.parentEl){this.parentEl=e,U.call(e,this.el,t)}moveBeforeVNode(t,e){U.call(this.parentEl,this.el,t?t.el:e)}beforeRemove(){}remove(){z.call(this.parentEl,this.el)}firstNode(){return this.el}toString(){return this.text}}let G=class extends q{mount(t,e){this.mountNode(document.createTextNode(Z(this.text)),t,e)}patch(t){const e=t.text;this.text!==e&&(H.call(this.el,Z(e)),this.text=e)}};class X extends q{mount(t,e){this.mountNode(document.createComment(Z(this.text)),t,e)}patch(){}}function Y(t){return new G(t)}function J(t){return new X(t)}function Z(t){switch(typeof t){case"string":return t;case"number":return String(t);case"boolean":return t?"true":"false";default:return t||""}}const Q=(t,e)=>Object.getOwnPropertyDescriptor(t,e),tt=Node.prototype,et=Element.prototype,nt=Q(CharacterData.prototype,"data").set,ot=Q(tt,"firstChild").get,st=Q(tt,"nextSibling").get,it=()=>{};function rt(t){return function(e){this[t]=0===e?0:e?e.valueOf():""}}const lt={};function at(t){if(t in lt)return lt[t];const e=(new DOMParser).parseFromString(`<t>${t}</t>`,"text/xml").firstChild.firstChild;s.shouldNormalizeDom&&ct(e);const n=ut(e),o=ft(n),i=function(t,e){let n=function(t,e){const{refN:n,collectors:o,children:s,locations:i,cbRefs:r}=e,l=o.length;i.sort((t,e)=>t.idx-e.idx);const a=i.length,c=s.length,u=s,h=n>0,d=tt.cloneNode,f=tt.insertBefore,p=et.remove;class m{el;parentEl;data;children;refs;constructor(t){this.data=t}beforeRemove(){}remove(){p.call(this.el)}firstNode(){return this.el}moveBeforeDOMNode(t,e=this.parentEl){this.parentEl=e,f.call(e,this.el,t)}moveBeforeVNode(t,e){f.call(this.parentEl,this.el,t?t.el:e)}toString(){const t=document.createElement("div");return this.mount(t,null),t.innerHTML}mount(e,n){const o=d.call(t,!0);f.call(e,o,n),this.el=o,this.parentEl=e}patch(t,e){}}h&&(m.prototype.mount=function(e,s){const h=d.call(t,!0),p=new Array(n);this.refs=p,p[0]=h;for(let t=0;t<l;t++){const e=o[t];p[e.idx]=e.getVal.call(p[e.prevIdx])}if(a){const t=this.data;for(let e=0;e<a;e++){const n=i[e];n.setData.call(p[n.refIdx],t[e])}}if(f.call(e,h,s),c){const t=this.children;for(let e=0;e<c;e++){const n=t[e];if(n){const t=u[e],o=t.afterRefIdx?p[t.afterRefIdx]:null;n.isOnlyChild=t.isOnlyChild,n.mount(p[t.parentRefIdx],o)}}}if(this.el=h,this.parentEl=e,r.length){const t=this.data,e=this.refs;for(let n of r){const{idx:o,refIdx:s}=i[n];(0,t[o])(e[s],null)}}},m.prototype.patch=function(t,e){if(this===t)return;const n=this.refs;if(a){const e=this.data,o=t.data;for(let t=0;t<a;t++){const s=e[t],r=o[t];if(s!==r){const e=i[t];e.updateData.call(n[e.refIdx],r,s)}}this.data=o}if(c){let o=this.children;const s=t.children;for(let t=0;t<c;t++){const i=o[t],r=s[t];if(i)r?i.patch(r,e):(e&&i.beforeRemove(),i.remove(),o[t]=void 0);else if(r){const e=u[t],s=e.afterRefIdx?n[e.afterRefIdx]:null;r.mount(n[e.parentRefIdx],s),o[t]=r}}}},m.prototype.remove=function(){if(r.length){const t=this.data,e=this.refs;for(let n of r){const{idx:o,refIdx:s}=i[n];(0,t[o])(null,e[s])}}p.call(this.el)});return m}(t,e);if(e.children.length)return n=class extends n{children;constructor(t,e){super(t),this.children=e}},n.prototype.beforeRemove=V.prototype.beforeRemove,(t,e=[])=>new n(t,e);return t=>new n(t)}(n.el,o);return lt[t]=i,i}function ct(t){if(t.nodeType!==Node.TEXT_NODE||/\S/.test(t.textContent)){if(t.nodeType!==Node.ELEMENT_NODE||"pre"!==t.tagName)for(let e=t.childNodes.length-1;e>=0;--e)ct(t.childNodes.item(e))}else t.remove()}function ut(t,n=null,o=null){switch(t.nodeType){case Node.ELEMENT_NODE:{let e=o&&o.currentNS;const s=t.tagName;let i;const r=[];if(s.startsWith("block-text-")){const t=parseInt(s.slice(11),10);r.push({type:"text",idx:t}),i=document.createTextNode("")}if(s.startsWith("block-child-")){o.isRef||ht(o);const t=parseInt(s.slice(12),10);r.push({type:"child",idx:t}),i=document.createTextNode("")}if(e||=t.namespaceURI,i||(i=e?document.createElementNS(e,s):document.createElement(s)),i instanceof Element){if(!o){document.createElement("template").content.appendChild(i)}const e=t.attributes;for(let t=0;t<e.length;t++){const n=e[t].name,o=e[t].value;if(n.startsWith("block-handler-")){const t=parseInt(n.slice(14),10);r.push({type:"handler",idx:t,event:o})}else if(n.startsWith("block-attribute-")){const t=parseInt(n.slice(16),10);r.push({type:"attribute",idx:t,name:o,tag:s})}else if(n.startsWith("block-property-")){const t=parseInt(n.slice(15),10);r.push({type:"property",idx:t,name:o,tag:s})}else"block-attributes"===n?r.push({type:"attributes",idx:parseInt(o,10)}):"block-ref"===n?r.push({type:"ref",idx:parseInt(o,10)}):i.setAttribute(e[t].name,o)}}const l={parent:n,firstChild:null,nextSibling:null,el:i,info:r,refN:0,currentNS:e};if(t.firstChild){const e=t.childNodes[0];if(1===t.childNodes.length&&e.nodeType===Node.ELEMENT_NODE&&e.tagName.startsWith("block-child-")){const t=e.tagName,n=parseInt(t.slice(12),10);r.push({idx:n,type:"child",isOnlyChild:!0})}else{l.firstChild=ut(t.firstChild,l,l),i.appendChild(l.firstChild.el);let e=t.firstChild,n=l.firstChild;for(;e=e.nextSibling;)n.nextSibling=ut(e,n,l),i.appendChild(n.nextSibling.el),n=n.nextSibling}}return l.info.length&&ht(l),l}case Node.TEXT_NODE:case Node.COMMENT_NODE:return{parent:n,firstChild:null,nextSibling:null,el:t.nodeType===Node.TEXT_NODE?document.createTextNode(t.textContent):document.createComment(t.textContent),info:[],refN:0,currentNS:null}}throw new e("boom")}function ht(t){t.isRef=!0;do{t.refN++}while(t=t.parent)}function dt(t){let e=t.parent;for(;e&&e.nextSibling===t;)t=e,e=e.parent;return e}function ft(t,e,n){if(!e){e={collectors:[],locations:[],children:new Array(t.info.filter(t=>"child"===t.type).length),cbRefs:[],refN:t.refN},n=0}if(t.refN){const o=n,s=t.isRef,i=t.firstChild?t.firstChild.refN:0,r=t.nextSibling?t.nextSibling.refN:0;if(s){for(let e of t.info)e.refIdx=o;t.refIdx=o,function(t,e){for(let n of e.info)switch(n.type){case"text":t.locations.push({idx:n.idx,refIdx:n.refIdx,setData:pt,updateData:pt});break;case"child":n.isOnlyChild?t.children[n.idx]={parentRefIdx:n.refIdx,isOnlyChild:!0}:t.children[n.idx]={parentRefIdx:dt(e).refIdx,afterRefIdx:n.refIdx};break;case"property":{const e=n.refIdx,o=rt(n.name);t.locations.push({idx:n.idx,refIdx:e,setData:o,updateData:o});break}case"attribute":{const e=n.refIdx;let o,s;"class"===n.name?(s=N,o=$):(s=v(n.name),o=s),t.locations.push({idx:n.idx,refIdx:e,setData:s,updateData:o});break}case"attributes":t.locations.push({idx:n.idx,refIdx:n.refIdx,setData:y,updateData:w});break;case"handler":{const{setup:e,update:o}=D(n.event);t.locations.push({idx:n.idx,refIdx:n.refIdx,setData:e,updateData:o});break}case"ref":t.locations.push({idx:n.idx,refIdx:n.refIdx,setData:it,updateData:it}),t.cbRefs.push(n.idx)}}(e,t),n++}if(r){const s=n+i;e.collectors.push({idx:s,prevIdx:o,getVal:st}),ft(t.nextSibling,e,s)}i&&(e.collectors.push({idx:n,prevIdx:o,getVal:ot}),ft(t.firstChild,e,n))}return e}function pt(t){nt.call(this,Z(t))}const mt=Node.prototype,gt=mt.insertBefore,bt=mt.appendChild,vt=mt.removeChild,yt=((t,e)=>Object.getOwnPropertyDescriptor(t,e))(mt,"textContent").set;class wt{children;anchor;parentEl;isOnlyChild;constructor(t){this.children=t}mount(t,e){const n=this.children,o=document.createTextNode("");this.anchor=o,gt.call(t,o,e);const s=n.length;if(s){const e=n[0].mount;for(let i=0;i<s;i++)e.call(n[i],t,o)}this.parentEl=t}moveBeforeDOMNode(t,e=this.parentEl){this.parentEl=e;const n=this.children;for(let o=0,s=n.length;o<s;o++)n[o].moveBeforeDOMNode(t,e);e.insertBefore(this.anchor,t)}moveBeforeVNode(t,e){if(t){const n=t.children[0];e=(n?n.firstNode():t.anchor)||null}const n=this.children;for(let t=0,o=n.length;t<o;t++)n[t].moveBeforeVNode(null,e);this.parentEl.insertBefore(this.anchor,e)}patch(t,e){if(this===t)return;const n=this.children,o=t.children;if(0===o.length&&0===n.length)return;this.children=o;const s=o[0]||n[0],{mount:i,patch:r,remove:l,beforeRemove:a,moveBeforeVNode:c,firstNode:u}=s,h=this.anchor,d=this.isOnlyChild,f=this.parentEl;if(0===o.length&&d){if(e)for(let t=0,e=n.length;t<e;t++)a.call(n[t]);return yt.call(f,""),void bt.call(f,h)}let p,m=0,g=0,b=n[0],v=o[0],y=n.length-1,w=o.length-1,x=n[y],N=o[w];for(;m<=y&&g<=w;){if(null===b){b=n[++m];continue}if(null===x){x=n[--y];continue}let t=b.key,s=v.key;if(t===s){r.call(b,v,e),o[g]=b,b=n[++m],v=o[++g];continue}let l=x.key,a=N.key;if(l===a){r.call(x,N,e),o[w]=x,x=n[--y],N=o[--w];continue}if(t===a){r.call(b,N,e),o[w]=b;const t=o[w+1];c.call(b,t,h),b=n[++m],N=o[--w];continue}if(l===s){r.call(x,v,e),o[g]=x;const t=n[m];c.call(x,t,h),x=n[--y],v=o[++g];continue}p=p||Nt(n,m,y);let d=p[s];if(void 0===d)i.call(v,f,u.call(b)||null);else{const t=n[d];c.call(t,b,null),r.call(t,v,e),o[g]=t,n[d]=null}v=o[++g]}if(m<=y||g<=w)if(m>y){const t=o[w+1],e=t?u.call(t)||null:h;for(let t=g;t<=w;t++)i.call(o[t],f,e)}else for(let t=m;t<=y;t++){let o=n[t];o&&(e&&a.call(o),l.call(o))}}beforeRemove(){const t=this.children,e=t.length;if(e){const n=t[0].beforeRemove;for(let o=0;o<e;o++)n.call(t[o])}}remove(){const{parentEl:t,anchor:e}=this;if(this.isOnlyChild)yt.call(t,"");else{const n=this.children,o=n.length;if(o){const t=n[0].remove;for(let e=0;e<o;e++)t.call(n[e])}vt.call(t,e)}}firstNode(){const t=this.children[0];return t?t.firstNode():void 0}toString(){return this.children.map(t=>t.toString()).join("")}}function xt(t){return new wt(t)}function Nt(t,e,n){let o={};for(let s=e;s<=n;s++)o[t[s].key]=s;return o}const $t=Node.prototype,kt=$t.insertBefore,Et=$t.removeChild;class Tt{html;parentEl;content=[];constructor(t){this.html=t}mount(t,e){this.parentEl=t;const n=document.createElement("template");n.innerHTML=this.html,this.content=[...n.content.childNodes];for(let n of this.content)kt.call(t,n,e);if(!this.content.length){const n=document.createTextNode("");this.content.push(n),kt.call(t,n,e)}}moveBeforeDOMNode(t,e=this.parentEl){this.parentEl=e;for(let n of this.content)kt.call(e,n,t)}moveBeforeVNode(t,e){const n=t?t.content[0]:e;this.moveBeforeDOMNode(n)}patch(t){if(this===t)return;const e=t.html;if(this.html!==e){const n=this.parentEl,o=this.content[0],s=document.createElement("template");s.innerHTML=e;const i=[...s.content.childNodes];for(let t of i)kt.call(n,t,o);if(!i.length){const t=document.createTextNode("");i.push(t),kt.call(n,t,o)}this.remove(),this.content=i,this.html=t.html}}beforeRemove(){}remove(){const t=this.parentEl;for(let e of this.content)Et.call(t,e)}firstNode(){return this.content[0]}toString(){return this.html}}function _t(t){return new Tt(t)}function At(t,e,n=null){t.mount(e,n)}let Ct=[];function Dt(t){const n=Ct.at(-1);if(!n)throw new e("No active context");if(t&&t!==n.type)throw new e(`Expected to be in a ${t} context`);return n}function St(t,n){return async function(...o){if(t.status>1)throw new e(`Function called after the end of life of the ${t.type}`);const s=await n.call(this,...o);return t.status>1?new Promise(()=>{}):s}}class Ot{static template="";__owl__;constructor(t){this.__owl__=t}setup(){}}const Rt=new WeakMap,Lt=new WeakMap;function Bt(t,n){try{t.destroy()}catch(t){}return Object.assign(new e("[Owl] Unhandled error. Destroying the root component"),{cause:n})}function It(t,e){if(!t)return!1;const n=t.fiber;n&&Rt.set(n,e);const o=Lt.get(t);if(o){let n=!1;const s=()=>Bt(t.app,e);for(let t=o.length-1;t>=0;t--)try{o[t](e,s),n=!0;break}catch(t){e=t}if(n)return!0}return It(t.parent,e)}function Pt(t){let{error:e}=t;const n="node"in t?t.node:t.fiber.node,o="fiber"in t?t.fiber:n.fiber;if(o){let t=o;do{t.node.fiber=t,Rt.set(t,e),t=t.parent}while(t);Rt.set(o.root,e)}if(!It(n,e))throw Bt(n.app,e)}function Mt(t,e,n){const o=e.bind(t.component);if(t.app.dev){const t=e.name?` <${e.name}>`:"";Reflect.defineProperty(o,"name",{value:n+t})}return o}function jt(t){const{node:e}=Dt("component");e.mounted.push(Mt(e,t,"onMounted"))}function Vt(t){const{node:e}=Dt("component");e.willUnmount.unshift(Mt(e,t,"onWillUnmount"))}function Wt(t){const e=Dt();"component"===e.type?e.node.willDestroy.unshift(Mt(e.node,t,"onWillDestroy")):e.manager.onDestroyCb.push(t)}var Ft;!function(t){t[t.EXECUTED=0]="EXECUTED",t[t.STALE=1]="STALE",t[t.PENDING=2]="PENDING"}(Ft||(Ft={}));const Kt=Symbol("Atom");let Ut,Ht=[];function zt(t={}){return{state:Ft.STALE,value:void 0,compute(){},sources:new Set,observers:new Set,isDerived:!1,...t}}function qt(t){Ut&&(Ut.sources.add(t),t.observers.add(Ut))}function Gt(t){for(const e of t.observers)e.state===Ft.EXECUTED&&(e.isDerived?te(e):Ht.push(e)),e.state=Ft.STALE;Xt()}const Xt=k(function(){for(let t=0;t<Ht.length;t++)Zt(Ht[t]);Ht=[]});function Yt(){return Ut}function Jt(t){Ut=t}function Zt(t){const e=t.state;if(e===Ft.EXECUTED)return;if(e===Ft.PENDING){for(const e of t.sources)"compute"in e&&Zt(e);if(t.state!==Ft.STALE)return void(t.state=Ft.EXECUTED)}Qt(t);const n=Ut;Ut=t,t.value=t.compute(),t.state=Ft.EXECUTED,Ut=n}function Qt(t){const e=t.sources;for(const n of e){n.observers.delete(t)}e.clear()}function te(t){for(const e of t.observers)e.state||(e.state=Ft.PENDING,e.isDerived?te(e):Ht.push(e))}function ee(t){const e=Ut;let n;Ut=void 0;try{n=t()}finally{Ut=e}return n}const ne={any:function(){},array:function(t){return function(e){if(Array.isArray(e.value)){if(t)for(let n=0;n<e.value.length;n++)e.withKey(n).validate(t)}else e.addIssue({message:"value is not an array"})}},boolean:function(t){"boolean"!=typeof t.value&&t.addIssue({message:"value is not a boolean"})},constructor:function(t){return function(e){"function"==typeof e.value&&(e.value===t||e.value.prototype instanceof t)||e.addIssue({message:`value is not '${t.name}' or an extension`})}},customValidator:function(t,e,n="value does not match custom validation"){return function(o){o.validate(t),o.isValid&&(e(o.value)||o.addIssue({message:n}))}},function:function(t=[],e=void 0){return function(t){"function"!=typeof t.value&&t.addIssue({message:"value is not a function"})}},instanceOf:function(t){return function(e){e.value instanceof t||e.addIssue({message:`value is not an instance of '${t.name}'`})}},literal:function(t){return function(e){e.value!==t&&e.addIssue({message:`value is not equal to ${"string"==typeof t?`'${t}'`:t}`})}},number:function(t){"number"!=typeof t.value&&t.addIssue({message:"value is not a number"})},object:function(t={}){return function(e){"object"!=typeof e.value||Array.isArray(e.value)||null===e.value?e.addIssue({message:"value is not an object"}):t&&(Array.isArray(t)?function(t,e){const n=e.filter(e=>!e.endsWith("?")&&!(e in t.value));n.length&&t.addIssue({message:"object value have missing keys",missingKeys:n})}(e,t):function(t,e){const n=[];for(const o in e){const s=o.endsWith("?")?o.slice(0,-1):o;void 0!==t.value[s]?t.withKey(s).validate(e[o]):o.endsWith("?")||n.push(s)}n.length&&t.addIssue({message:"object value have missing keys",missingKeys:n})}(e,t))}},promise:function(t){return function(t){t.value instanceof Promise||t.addIssue({message:"value is not a promise"})}},signal:function(t){return function(t){"function"==typeof t.value&&t.value[Kt]||t.addIssue({message:"value is not a reactive value"})}},record:function(t){return function(e){if("object"!=typeof e.value||Array.isArray(e.value)||null===e.value)e.addIssue({message:"value is not an object"});else if(t)for(const n in e.value)e.withKey(n).validate(t)}},string:function(t){"string"!=typeof t.value&&t.addIssue({message:"value is not a string"})},tuple:function(t){return function(e){if(Array.isArray(e.value))if(e.value.length===t.length)for(let n=0;n<t.length;n++)e.withKey(n).validate(t[n]);else e.addIssue({message:"tuple value does not have the correct length"});else e.addIssue({message:"value is not an array"})}},and:function(t){return function(e){for(const n of t)e.validate(n)}},or:function(t){return function(e){let n=0;const o=[];for(const s of t){const t=e.withIssues(o);if(t.validate(s),o.length===n||t.issueDepth>0)return void e.mergeIssues(o.slice(n));n=o.length}e.addIssue({message:"value does not match union type",subIssues:o})}}};function oe(t,n,o="Value does not match the type"){const s=ie(t,n);if(s.length){const t=JSON.stringify(s,(t,e)=>"function"==typeof e?e.name:e,2);throw new e(`${o}\n${t}`)}}function se(t,e,n,o){return{issueDepth:0,path:n,value:e,get isValid(){return!t.length},addIssue(e){t.push({received:this.value,path:this.path,...e})},mergeIssues(e){t.push(...e)},validate(t){t(this),!this.isValid&&o&&(o.issueDepth=this.issueDepth+1)},withIssues(t){return se(t,this.value,this.path,this)},withKey(e){return se(t,this.value[e],this.path.concat(e),this)}}}function ie(t,e){const n=[];return e(se(n,t,[])),n}function re(t,e){const{node:n,app:o,componentName:s}=Dt("component");function i(t){return void 0===n.props[t]&&e?e[t]:n.props[t]}const r=Object.create(null);function l(t){for(const e of t)Reflect.defineProperty(r,e,{enumerable:!0,get:i.bind(null,e)})}if(t){if(l((Array.isArray(t)?t:Object.keys(t)).map(t=>t.endsWith("?")?t.slice(0,-1):t)),o.dev){const o=e?function(t,e){const n=(Array.isArray(t)?t:Object.keys(t)).filter(t=>!t.endsWith("?")&&t in e);return e=>{n.length&&e.addIssue({message:"props have default values on mandatory keys",keys:n}),e.validate(ne.object(t))}}(t,e):ne.object(t);oe(n.props,o,`Invalid component props (${s})`),n.willUpdateProps.push(t=>{oe(t,o,`Invalid component props (${s})`)})}}else l(Object.keys(n.props)),n.willUpdateProps.push(t=>{for(let t in r)Reflect.deleteProperty(r,t);l(Object.keys(t))});return r}const le=Y("").constructor;class ae extends le{content;selector;target=null;constructor(t,e){super(""),this.selector=t,this.content=e}mount(t,e){super.mount(t,e),this.target=document.querySelector(this.selector),this.target?this.content.mount(this.target,null):this.content.mount(t,e)}beforeRemove(){this.content.beforeRemove()}remove(){this.content&&(super.remove(),this.content.remove(),this.content=null)}patch(t){super.patch(t),this.content?this.content.patch(t.content,!0):(this.content=t.content,this.content.mount(this.target,null))}}class ce extends Ot{static template="__portal__";props=re({target:ne.string});setup(){const t=this.__owl__;jt(()=>{const n=t.bdom;if(!n.target){const o=document.querySelector(t.props.target);if(!o)throw new e("invalid portal target");n.content.moveBeforeDOMNode(o.firstChild,o)}}),Vt(()=>{t.bdom.remove()})}}const ue=Symbol("Key changes"),he=Object.prototype.toString,de=Object.prototype.hasOwnProperty,fe=["Object","Array","Set","Map","WeakMap"],pe=["Set","Map","WeakMap"];function me(t){return he.call(we(t)).slice(8,-1)}function ge(t){return"object"==typeof t&&fe.includes(me(t))}function be(t,e){return!e&&ge(t)?_e(t):t}const ve=new WeakSet;function ye(t){return ve.add(t),t}function we(t){return ke.has(t)?ke.get(t):t}const xe=new WeakMap;function Ne(t,e,n){qt(n??function(t,e){let n=xe.get(t);n||(n=new Map,xe.set(t,n));let o=n.get(e);return o||(o={value:void 0,observers:new Set},n.set(e,o)),o}(t,e))}function $e(t,e,n){if(!n){const o=xe.get(t);if(!o)return;if(!o.has(e))return;n=o.get(e)}Gt(n)}const ke=new WeakMap,Ee=new WeakMap;function Te(t,n){if(!ge(t))throw new e("Cannot make the given value reactive");if(ve.has(t))return t;if(ke.has(t))return t;const o=Ee.get(t);if(o)return o;const s=me(t),i=pe.includes(s)?function(t,e,n){const o=Le[e](t,n);return Object.assign(Ae(n),{get:(t,e)=>de.call(o,e)?o[e]:(Ne(t,e,n),be(t[e],n))})}(t,s,n):Ae(n),r=new Proxy(t,i);return Ee.set(t,r),ke.set(r,t),r}function _e(t){return Te(t,null)}function Ae(t){return{get(e,n,o){const s=Object.getOwnPropertyDescriptor(e,n);return!s||s.writable||s.configurable?(Ne(e,n,t),be(Reflect.get(e,n,o),t)):Reflect.get(e,n,o)},set(e,n,o,s){const i=de.call(e,n),r=Reflect.get(e,n,s),l=Reflect.set(e,n,we(o),s);return!i&&de.call(e,n)&&$e(e,ue,t),(r!==Reflect.get(e,n,s)||"length"===n&&Array.isArray(e))&&$e(e,n,t),l},deleteProperty(e,n){const o=Reflect.deleteProperty(e,n);return $e(e,ue,t),$e(e,n,t),o},ownKeys:e=>(Ne(e,ue,t),Reflect.ownKeys(e)),has:(e,n)=>(Ne(e,ue,t),Reflect.has(e,n))}}function Ce(t,e,n){return o=>(o=we(o),Ne(e,o,n),be(e[t](o),n))}function De(t,e,n){return function*(){Ne(e,ue,n);const o=e.keys();for(const s of e[t]()){const t=o.next().value;Ne(e,t,n),yield be(s,n)}}}function Se(t,e){return function(n,o){Ne(t,ue,e),t.forEach(function(s,i,r){Ne(t,i,e),n.call(o,be(s,e),be(i,e),be(r,e))},o)}}function Oe(t,e,n,o){return(s,i)=>{s=we(s);const r=n.has(s),l=n[e](s),a=n[t](s,i);return r!==n.has(s)&&$e(n,ue,o),l!==n[e](s)&&$e(n,s,o),a}}function Re(t,e){return()=>{const n=[...t.keys()];t.clear(),$e(t,ue,e);for(const o of n)$e(t,o,e)}}const Le={Set:(t,e)=>({has:Ce("has",t,e),add:Oe("add","has",t,e),delete:Oe("delete","has",t,e),keys:De("keys",t,e),values:De("values",t,e),entries:De("entries",t,e),[Symbol.iterator]:De(Symbol.iterator,t,e),forEach:Se(t,e),clear:Re(t,e),get size(){return Ne(t,ue,e),t.size}}),Map:(t,e)=>({has:Ce("has",t,e),get:Ce("get",t,e),set:Oe("set","get",t,e),delete:Oe("delete","has",t,e),keys:De("keys",t,e),values:De("values",t,e),entries:De("entries",t,e),[Symbol.iterator]:De(Symbol.iterator,t,e),forEach:Se(t,e),clear:Re(t,e),get size(){return Ne(t,ue,e),t.size}}),WeakMap:(t,e)=>({has:Ce("has",t,e),get:Ce("get",t,e),set:Oe("set","get",t,e),delete:Oe("delete","has",t,e)})};const Be=Object.create;function Ie(t){const e=Be(t);for(let n in t)e[n]=t[n];return e}const Pe=Symbol("isBoundary");class Me{fn;ctx;component;node;key;constructor(t,e,n,o,s){this.fn=t,this.ctx=Ie(e),this.component=n,this.node=o,this.key=s}evaluate(){return this.fn.call(this.component,this.ctx,this.node,this.key)}toString(){return this.evaluate().toString()}}const je={withDefault:function(t,e){return null==t||!1===t?e:t},zero:Symbol("zero"),isBoundary:Pe,callSlot:function(t,e,n,o,s,i,r){n=n+"__slot_"+o;const a=t.__owl__.props.slots||{},{__render:c,__ctx:u,__scope:h}=a[o]||{},d=Be(u||{});h&&(d[h]=i);const f=c?c(d,e,n):null;if(r){let i,a;return f?i=s?l(o,f):f:a=r(t,e,n),W([i,a])}return f||Y("")},capture:Ie,withKey:function(t,e){return t.key=e,t},prepareList:function(t){let n,o;if(Array.isArray(t))n=t,o=t;else if(t instanceof Map)n=[...t.keys()],o=[...t.values()];else if(Symbol.iterator in Object(t))n=[...t],o=n;else{if(!t||"object"!=typeof t)throw new e(`Invalid loop expression: "${t}" is not iterable`);o=Object.values(t),n=Object.keys(t)}const s=o.length;return[n,o,s,new Array(s)]},setContextValue:function(t,e,n){const o=t;for(;!t.hasOwnProperty(e)&&!t.hasOwnProperty(Pe);){const e=t.__proto__;if(!e){t=o;break}t=e}t[e]=n},shallowEqual:function(t,e){for(let n=0,o=t.length;n<o;n++)if(t[n]!==e[n])return!1;return!0},toNumber:function(t){const e=parseFloat(t);return isNaN(e)?t:e},LazyValue:Me,safeOutput:function(t,e){if(null==t)return e?l("default",e):l("undefined",Y(""));let n,o;return t instanceof _?(n="string_safe",o=_t(t)):t instanceof Me?(n="lazy_value",o=t.evaluate()):(n="string_unsafe",o=Y(t)),l(n,o)},createCatcher:function(t){const e=Object.keys(t).length;class n{child;handlerData;handlerFns=[];parentEl;afterNode=null;constructor(t,e){this.child=t,this.handlerData=e}mount(e,n){this.parentEl=e,this.child.mount(e,n),this.afterNode=document.createTextNode(""),e.insertBefore(this.afterNode,n),this.wrapHandlerData();for(let n in t){const o=t[n],s=D(n);this.handlerFns[o]=s,s.setup.call(e,this.handlerData[o])}}wrapHandlerData(){for(let t=0;t<e;t++){let e=this.handlerData[t],n=e.length-2,o=e[n];const s=this;e[n]=function(t){const e=t.target;let n=s.child.firstNode();const i=s.afterNode;for(;n&&n!==i;){if(n.contains(e))return o.call(this,t);n=n.nextSibling}}}}moveBeforeDOMNode(t,e=this.parentEl){this.parentEl=e,this.child.moveBeforeDOMNode(t,e),e.insertBefore(this.afterNode,t)}moveBeforeVNode(t,e){t&&(e=t.firstNode()||e),this.child.moveBeforeVNode(t?t.child:null,e),this.parentEl.insertBefore(this.afterNode,e)}patch(t,n){if(this!==t){this.handlerData=t.handlerData,this.wrapHandlerData();for(let t=0;t<e;t++)this.handlerFns[t].update.call(this.parentEl,this.handlerData[t]);this.child.patch(t.child,n)}}beforeRemove(){this.child.beforeRemove()}remove(){for(let t=0;t<e;t++)this.handlerFns[t].remove.call(this.parentEl);this.child.remove(),this.afterNode.remove()}firstNode(){return this.child.firstNode()}toString(){return this.child.toString()}}return function(t,e){return new n(t,e)}},markRaw:ye,OwlError:e,createRef:function(t){if(!t)throw new e("Ref is undefined or null");let n,o;if(t.add&&t.delete)n=t.add.bind(t),o=t.delete.bind(t);else{if(!t.set)throw new e("Ref should implement either a 'set' function or 'add' and 'delete' functions");n=t.set.bind(t),o=()=>t.set(null)}return(t,e)=>{e&&o(e),t&&n(t)}},modelExpr:function(t){if("function"!=typeof t||"function"!=typeof t.set)throw new e("Invalid t-model expression: expression should evaluate to a function with a 'set' method defined on it");return t}},Ve={text:Y,createBlock:at,list:xt,multi:W,html:_t,toggler:l,comment:J};class We{static registerTemplate(t,e){Fe[t]=e}dev;rawTemplates=Object.create(Fe);templates={};getRawTemplate;translateFn;translatableAttributes;Portal=ce;customDirectives;runtimeUtils;hasGlobalValues;constructor(t={}){if(this.dev=t.dev||!1,this.translateFn=t.translateFn,this.translatableAttributes=t.translatableAttributes,t.templates)if(t.templates instanceof Document||"string"==typeof t.templates)this.addTemplates(t.templates);else for(const e in t.templates)this.addTemplate(e,t.templates[e]);this.getRawTemplate=t.getTemplate,this.customDirectives=t.customDirectives||{},this.runtimeUtils={...je,__globals__:t.globalValues||{}},this.hasGlobalValues=Boolean(t.globalValues&&Object.keys(t.globalValues).length)}addTemplate(t,n){if(t in this.rawTemplates){if(!this.dev)return;const o=this.rawTemplates[t];if(("string"==typeof o?o:o instanceof Element?o.outerHTML:o.toString())===("string"==typeof n?n:n.outerHTML))return;throw new e(`Template ${t} already defined with different content`)}this.rawTemplates[t]=n}addTemplates(t){if(t){t=t instanceof Document?t:n(t);for(const e of t.querySelectorAll("[t-name]")){const t=e.getAttribute("t-name");this.addTemplate(t,e)}}}getTemplate(t){if(!(t in this.templates)){const n=this.getRawTemplate?.(t)||this.rawTemplates[t];if(void 0===n){let n="";try{const{componentName:t}=Dt("component");n=` (for component "${t}")`}catch{}throw new e(`Missing template: "${t}"${n}`)}const o="function"==typeof n&&!(n instanceof Element)?n:this._compileTemplate(t,n),s=this.templates;this.templates[t]=function(e,n){return s[t].call(this,e,n)};const i=o(this,Ve,this.runtimeUtils);this.templates[t]=i}return this.templates[t]}_compileTemplate(t,n){throw new e("Unable to compile a template. Please use owl full build instead")}callTemplate(t,e,n,o,s){return l(e,this.getTemplate(e).call(t,n,o,s+e))}}const Fe={};function Ke(...t){const e="__template__"+Ke.nextId++,n=String.raw(...t);return Fe[e]=n,e}Ke.nextId=1,We.registerTemplate("__portal__",function(t,e,n){let{callSlot:o}=n;return function(t,e,n=""){return new ae(t.this.props.target,o(t,e,n,"default",!1,null))}});const Ue="true,false,NaN,null,undefined,debugger,console,window,in,instanceof,new,function,return,eval,void,Math,RegExp,Array,Object,Date,__globals__".split(","),He=Object.assign(Object.create(null),{and:"&&",or:"||",gt:">",gte:">=",lt:"<",lte:"<="}),ze=Object.assign(Object.create(null),{"{":"LEFT_BRACE","}":"RIGHT_BRACE","[":"LEFT_BRACKET","]":"RIGHT_BRACKET",":":"COLON",",":"COMMA","(":"LEFT_PAREN",")":"RIGHT_PAREN"}),qe="...,.,===,==,+,!==,!=,!,||,&&,>=,>,<=,<,?,-,*,/,%,typeof ,=>,=,;,in ,new ,|,&,^,~".split(",");const Ge=[function(t){let n=t[0],o=n;if("'"!==n&&'"'!==n&&"`"!==n)return!1;let s,i=1;for(;t[i]&&t[i]!==o;){if(s=t[i],n+=s,"\\"===s){if(i++,s=t[i],!s)throw new e("Invalid expression");n+=s}i++}if(t[i]!==o)throw new e("Invalid expression");return n+=o,"`"===o?{type:"TEMPLATE_STRING",value:n,replace:t=>n.replace(/\$\{(.*?)\}/g,(e,n)=>"${"+t(n)+"}")}:{type:"VALUE",value:n}},function(t){let e=t[0];if(e&&e.match(/[0-9]/)){let n=1;for(;t[n]&&t[n].match(/[0-9]|\./);)e+=t[n],n++;return{type:"VALUE",value:e}}return!1},function(t){for(let e of qe)if(t.startsWith(e))return{type:"OPERATOR",value:e};return!1},function(t){let e=t[0];if(e&&e.match(/[a-zA-Z_\$]/)){let n=1;for(;t[n]&&t[n].match(/[\w\$]/);)e+=t[n],n++;return e in He?{type:"OPERATOR",value:He[e],size:e.length}:{type:"SYMBOL",value:e}}return!1},function(t){const e=t[0];return!(!e||!(e in ze))&&{type:ze[e],value:e}}];const Xe=t=>t&&("LEFT_BRACE"===t.type||"COMMA"===t.type),Ye=t=>t&&("RIGHT_BRACE"===t.type||"COMMA"===t.type);function Je(t){const n=new Set,o=function(t){const n=[];let o,s=!0,i=t;try{for(;s;)if(i=i.trim(),i){for(let t of Ge)if(s=t(i),s){n.push(s),i=i.slice(s.size||s.value.length);break}}else s=!1}catch(t){o=t}if(i.length||o)throw new e(`Tokenizer error: could not tokenize \`${t}\``);return n}(t);let s=0,i=[];for(;s<o.length;){let t=o[s],e=o[s-1],r=o[s+1],l=i[i.length-1];switch(t.type){case"LEFT_BRACE":case"LEFT_BRACKET":case"LEFT_PAREN":i.push(t.type);break;case"RIGHT_BRACE":case"RIGHT_BRACKET":case"RIGHT_PAREN":i.pop()}let a="SYMBOL"===t.type&&!Ue.includes(t.value);if(a&&e&&("LEFT_BRACE"===l&&Xe(e)&&Ye(r)&&(o.splice(s+1,0,{type:"COLON",value:":"},{...t}),r=o[s+1]),"OPERATOR"===e.type&&"."===e.value?a=!1:"LEFT_BRACE"!==e.type&&"COMMA"!==e.type||r&&"COLON"===r.type&&(a=!1)),"TEMPLATE_STRING"===t.type&&(t.value=t.replace(t=>Qe(t))),r&&"OPERATOR"===r.type&&"=>"===r.value)if("RIGHT_PAREN"===t.type){let t=s-1;for(;t>0&&"LEFT_PAREN"!==o[t].type;)"SYMBOL"===o[t].type&&o[t].originalValue&&(o[t].value=o[t].originalValue,n.add(o[t].value)),t--}else n.add(t.value);a&&(t.varName=t.value,n.has(t.value)||(t.originalValue=t.value,t.value=`ctx['${t.value}']`)),s++}for(const t of o)"SYMBOL"===t.type&&t.varName&&n.has(t.value)&&(t.originalValue=t.value,t.value=`_${t.value}`,t.isLocal=!0);return o}const Ze=new Map([["in "," in "]]);function Qe(t){return Je(t).map(t=>Ze.get(t.value)||t.value).join("")}const tn=/\{\{.*?\}\}|\#\{.*?\}/g;function en(t){return function(t,e){let n=t.match(tn);if(n&&n[0].length===t.length)return`(${e(t.slice(2,"{"===n[0][0]?-2:-1))})`;let o=t.replace(tn,t=>"${"+e(t.slice(2,"{"===t[0]?-2:-1))+"}");return"`"+o+"`"}(t,Qe)}const nn=/\s+/g,on=document.implementation.createDocument(null,null,null),sn=new Set(["stop","capture","prevent","self","synthetic"]);let rn={};function ln(t=""){return rn[t]=(rn[t]||0)+1,t+rn[t]}function an(t,e){switch(t){case"input":return"checked"===e||"indeterminate"===e||"value"===e||"readonly"===e||"readOnly"===e||"disabled"===e;case"option":return"selected"===e||"disabled"===e;case"textarea":return"value"===e||"readonly"===e||"readOnly"===e||"disabled"===e;case"select":return"value"===e||"disabled"===e;case"button":case"optgroup":return"disabled"===e}return!1}function cn(t){return`\`${t.replace(/\\/g,"\\\\").replace(/`/g,"\\`").replace(/\$\{/,"\\${")}\``}class un{static nextBlockId=1;varName;blockName;dynamicTagName=null;isRoot=!1;hasDynamicChildren=!1;children=[];data=[];dom;currentDom;childNumber=0;target;type;parentVar="";id;constructor(t,e){this.id=un.nextBlockId++,this.varName="b"+this.id,this.blockName="block"+this.id,this.target=t,this.type=e}insertData(t,e="d"){const n=ln(e);return this.target.addLine(`let ${n} = ${t};`),this.data.push(n)-1}insert(t){this.currentDom?this.currentDom.appendChild(t):this.dom=t}generateExpr(t){if("block"===this.type){const t=this.children.length;let e=this.data.length?`[${this.data.join(", ")}]`:t?"[]":"";return t&&(e+=", ["+this.children.map(t=>t.varName).join(", ")+"]"),this.dynamicTagName?`toggler(${this.dynamicTagName}, ${this.blockName}(${this.dynamicTagName})(${e}))`:`${this.blockName}(${e})`}return"list"===this.type?`list(c_block${this.id})`:t}asXmlString(){const t=on.createElement("t");return t.appendChild(this.dom),t.innerHTML}}function hn(t,e){return Object.assign({block:null,index:0,forceNewBlock:!0,translate:t.translate,translationCtx:t.translationCtx,tKeyExpr:null,nameSpace:t.nameSpace,tModelSelectedExpr:t.tModelSelectedExpr},e)}class dn{name;indentLevel=0;loopLevel=0;code=[];hasRoot=!1;hasCache=!1;shouldProtectScope=!1;on;constructor(t,e){this.name=t,this.on=e||null}addLine(t,e){const n=new Array(this.indentLevel+2).join(" ");void 0===e?this.code.push(n+t):this.code.splice(e,0,n+t)}generateCode(){let t=[];t.push(`function ${this.name}(ctx, node, key = "") {`),this.shouldProtectScope&&(t.push(" ctx = Object.create(ctx);"),t.push(" ctx[isBoundary] = 1")),this.hasCache&&(t.push(" let cache = ctx.cache || {};"),t.push(" let nextCache = ctx.cache = {};"));for(let e of this.code)t.push(e);return this.hasRoot||t.push("return text('');"),t.push("}"),t.join("\n ")}currentKey(t){let e=this.loopLevel?`key${this.loopLevel}`:"key";return t.tKeyExpr&&(e=`${t.tKeyExpr} + ${e}`),e}}const fn=["alt","aria-label","aria-placeholder","aria-roledescription","aria-valuetext","label","placeholder","title"],pn=/^(\s*)([\s\S]+?)(\s*)$/;class mn{blocks=[];nextBlockId=1;hasSafeContext;isDebug=!1;targets=[];target=new dn("template");templateName;dev;translateFn;translatableAttributes=fn;ast;staticDefs=[];slotNames=new Set;helpers=new Set;constructor(t,e){if(this.translateFn=e.translateFn||(t=>t),e.translatableAttributes){const t=new Set(fn);for(let n of e.translatableAttributes)n.startsWith("-")?t.delete(n.slice(1)):t.add(n);this.translatableAttributes=[...t]}this.hasSafeContext=e.hasSafeContext||!1,this.dev=e.dev||!1,this.ast=t,this.templateName=e.name,e.hasGlobalValues&&this.helpers.add("__globals__")}generateCode(){const t=this.ast;this.isDebug=11===t.type,un.nextBlockId=1,rn={},this.compileAST(t,{block:null,index:0,forceNewBlock:!1,isLast:!0,translate:!0,translationCtx:"",tKeyExpr:null});let e=[" let { text, createBlock, list, multi, html, toggler, comment } = bdom;"];this.helpers.size&&e.push(`let { ${[...this.helpers].join(", ")} } = helpers;`),this.templateName&&e.push(`// Template name: "${this.templateName}"`);for(let{id:t,expr:n}of this.staticDefs)e.push(`const ${t} = ${n};`);if(this.blocks.length){e.push("");for(let t of this.blocks)if(t.dom){let n=cn(t.asXmlString());t.dynamicTagName?(n=n.replace(/^`<\w+/,`\`<\${tag || '${t.dom.nodeName}'}`),n=n.replace(/\w+>`$/,`\${tag || '${t.dom.nodeName}'}>\``),e.push(`let ${t.blockName} = tag => createBlock(${n});`)):e.push(`let ${t.blockName} = createBlock(${n});`)}}if(this.targets.length)for(let t of this.targets)e.push(""),e=e.concat(t.generateCode());e.push(""),e=e.concat("return "+this.target.generateCode());const n=e.join("\n ");if(this.isDebug){const t=`[Owl Debug]\n${n}`;console.log(t)}return n}compileInNewTarget(t,e,n,o){const s=ln(t),i=this.target,r=new dn(s,o);return this.targets.push(r),this.target=r,this.compileAST(e,hn(n)),this.target=i,s}addLine(t,e){this.target.addLine(t,e)}define(t,e){this.addLine(`const ${t} = ${e};`)}insertAnchor(t,e=t.children.length){const n=`block-child-${e}`,o=on.createElement(n);t.insert(o)}createBlock(t,e,n){const o=this.target.hasRoot,s=new un(this.target,e);return o||(this.target.hasRoot=!0,s.isRoot=!0),t&&(t.children.push(s),"list"===t.type&&(s.parentVar=`c_block${t.id}`)),s}insertBlock(t,e,n){let o=e.generateExpr(t);if(e.parentVar){let t=this.target.currentKey(n);return this.helpers.add("withKey"),void this.addLine(`${e.parentVar}[${n.index}] = withKey(${o}, ${t});`)}n.tKeyExpr&&(o=`toggler(${n.tKeyExpr}, ${o})`),e.isRoot?(this.target.on&&(o=this.wrapWithEventCatcher(o,this.target.on)),this.addLine(`return ${o};`)):this.define(e.varName,o)}captureExpression(t,e=!1){if(!e&&!t.includes("=>"))return Qe(t);const n=Je(t),o=new Map;return n.map(t=>{if(t.varName&&!t.isLocal){if(!o.has(t.varName)){const e=ln("v");o.set(t.varName,e),this.define(e,t.value)}t.value=o.get(t.varName)}return t.value}).join("")}translate(t,e){const n=pn.exec(t);return n[1]+this.translateFn(n[2],e)+n[3]}compileAST(t,e){switch(t.type){case 1:return this.compileComment(t,e);case 0:return this.compileText(t,e);case 2:return this.compileTDomNode(t,e);case 7:return this.compileTOut(t,e);case 4:return this.compileTIf(t,e);case 8:return this.compileTForeach(t,e);case 9:return this.compileTKey(t,e);case 3:return this.compileMulti(t,e);case 6:return this.compileTCall(t,e);case 14:return this.compileTCallBlock(t,e);case 5:return this.compileTSet(t,e);case 10:return this.compileComponent(t,e);case 11:return this.compileDebug(t,e);case 12:return this.compileLog(t,e);case 13:return this.compileTCallSlot(t,e);case 15:return this.compileTTranslation(t,e);case 16:return this.compileTTranslationContext(t,e);case 17:return this.compileTPortal(t,e)}}compileDebug(t,e){return this.addLine("debugger;"),t.content?this.compileAST(t.content,e):null}compileLog(t,e){return this.addLine(`console.log(${Qe(t.expr)});`),t.content?this.compileAST(t.content,e):null}compileComment(t,e){let{block:n,forceNewBlock:o}=e;if(!n||o)n=this.createBlock(n,"comment",e),this.insertBlock(`comment(${cn(t.value)})`,n,{...e,forceNewBlock:o&&!n});else{const e=on.createComment(t.value);n.insert(e)}return n.varName}compileText(t,e){let{block:n,forceNewBlock:o}=e,s=t.value;if(s&&!1!==e.translate&&(s=this.translate(s,e.translationCtx)),e.inPreTag||(s=s.replace(nn," ")),!n||o)n=this.createBlock(n,"text",e),this.insertBlock(`text(${cn(s)})`,n,{...e,forceNewBlock:o&&!n});else{const e=0===t.type?on.createTextNode:on.createComment;n.insert(e.call(on,s))}return n.varName}generateHandlerCode(t,n){const o=t.split(".").slice(1).map(t=>{if(!sn.has(t))throw new e(`Unknown event modifier: '${t}'`);return`"${t}"`});let s="";return o.length&&(s=`${o.join(",")}, `),`[${s}${this.captureExpression(n)}, ctx]`}compileTDomNode(t,e){let{block:n,forceNewBlock:o}=e;const s=!n||o||null!==t.dynamicTag||t.ns;let i=this.target.code.length;if(s&&((t.dynamicTag||e.tKeyExpr||t.ns)&&e.block&&this.insertAnchor(e.block),n=this.createBlock(n,"block",e),this.blocks.push(n),t.dynamicTag)){const e=ln("tag");this.define(e,Qe(t.dynamicTag)),n.dynamicTagName=e}const r={};for(let o in t.attrs){let s,i;if(o.startsWith("t-attf")){s=en(t.attrs[o]);const e=n.insertData(s,"attr");i=o.slice(7),r["block-attribute-"+e]=i}else if(o.startsWith("t-att"))if(i="t-att"===o?null:o.slice(6),s=Qe(t.attrs[o]),i&&an(t.tag,i)){"readonly"===i&&(i="readOnly"),s="value"===i?`new String((${s}) === 0 ? 0 : ((${s}) || ""))`:`new Boolean(${s})`;r[`block-property-${n.insertData(s,"prop")}`]=i}else{const t=n.insertData(s,"attr");"t-att"===o?r["block-attributes"]=String(t):r[`block-attribute-${t}`]=i}else if(this.translatableAttributes.includes(o)){const n=t.attrsTranslationCtx?.[o]||e.translationCtx;r[o]=this.translateFn(t.attrs[o],n)}else s=`"${t.attrs[o]}"`,i=o,r[o]=t.attrs[o];if("value"===i&&e.tModelSelectedExpr){r[`block-attribute-${n.insertData(`${e.tModelSelectedExpr} === ${s}`,"attr")}`]="selected"}}let l;if(t.model){const{hasDynamicChildren:e,expr:o,eventType:s,shouldNumberize:i,shouldTrim:a,targetAttr:c,specialInitTargetAttr:u}=t.model,h=Qe(o),d=ln("expr");let f;if(this.helpers.add("modelExpr"),this.define(d,`modelExpr(${h})`),u){let e=c in r&&`'${r[c]}'`;if(!e&&t.attrs){const n=t.attrs[`t-att-${c}`];n&&(e=Qe(n))}f=n.insertData(`${d}() === ${e}`,"prop"),r[`block-property-${f}`]=u}else if(e){l=`${ln("bValue")}`,this.define(l,`${d}()`)}else f=n.insertData(`${d}()`,"prop"),r[`block-property-${f}`]=c;this.helpers.add("toNumber");let p=`ev.target.${c}`;p=a?`${p}.trim()`:p,p=i?`toNumber(${p})`:p;const m=`[(ev) => { ${d}.set(${p}); }]`;f=n.insertData(m,"hdlr"),r[`block-handler-${f}`]=s}for(let e in t.on){const o=this.generateHandlerCode(e,t.on[e]);r[`block-handler-${n.insertData(o,"hdlr")}`]=e}if(t.ref){const e=Qe(t.ref);this.helpers.add("createRef");const o=`createRef(${e})`,s=n.insertData(o,"ref");r["block-ref"]=String(s)}const a=t.ns||e.nameSpace,c=a?on.createElementNS(a,t.tag):on.createElement(t.tag);for(const[t,e]of Object.entries(r))"class"===t&&""===e||c.setAttribute(t,e);if(n.insert(c),t.content.length){const o=n.currentDom;n.currentDom=c;const s=t.content;for(let o=0;o<s.length;o++){const i=t.content[o],r=hn(e,{block:n,index:n.childNumber,forceNewBlock:!1,isLast:e.isLast&&o===s.length-1,tKeyExpr:e.tKeyExpr,nameSpace:a,tModelSelectedExpr:l,inPreTag:e.inPreTag||"pre"===t.tag});this.compileAST(i,r)}n.currentDom=o}if(s&&(this.insertBlock(`${n.blockName}(ddd)`,n,e),n.children.length&&n.hasDynamicChildren)){const t=this.target.code,e=n.children.slice();let o=e.shift();for(let n=i;n<t.length&&(!t[n].trimStart().startsWith(`const ${o.varName} `)||(t[n]=t[n].replace(`const ${o.varName}`,o.varName),o=e.shift(),o));n++);this.addLine(`let ${n.children.map(t=>t.varName).join(", ")};`,i)}return n.varName}compileTOut(t,e){let n,{block:o}=e;if(o&&this.insertAnchor(o),o=this.createBlock(o,"html",e),"0"===t.expr)this.helpers.add("zero"),n="ctx[zero]";else if(t.body){let o=null;o=un.nextBlockId;const s=hn(e);this.compileAST({type:3,content:t.body},s),this.helpers.add("safeOutput"),n=`safeOutput(${Qe(t.expr)}, b${o})`}else this.helpers.add("safeOutput"),n=`safeOutput(${Qe(t.expr)})`;return this.insertBlock(n,o,e),o.varName}compileTIfBranch(t,e,n){this.target.indentLevel++;let o=e.children.length;this.compileAST(t,hn(n,{block:e,index:n.index})),e.children.length>o&&this.insertAnchor(e,o),this.target.indentLevel--}compileTIf(t,e,n){let{block:o,forceNewBlock:s}=e;const i=this.target.code.length,r=!o||"multi"!==o.type&&s;if(o&&(o.hasDynamicChildren=!0),(!o||"multi"!==o.type&&s)&&(o=this.createBlock(o,"multi",e)),this.addLine(`if (${Qe(t.condition)}) {`),this.compileTIfBranch(t.content,o,e),t.tElif)for(let n of t.tElif)this.addLine(`} else if (${Qe(n.condition)}) {`),this.compileTIfBranch(n.content,o,e);if(t.tElse&&(this.addLine("} else {"),this.compileTIfBranch(t.tElse,o,e)),this.addLine("}"),r){if(o.children.length){const t=this.target.code,e=o.children.slice();let n=e.shift();for(let o=i;o<t.length&&(!t[o].trimStart().startsWith(`const ${n.varName} `)||(t[o]=t[o].replace(`const ${n.varName}`,n.varName),n=e.shift(),n));o++);this.addLine(`let ${o.children.map(t=>t.varName).join(", ")};`,i)}const t=o.children.map(t=>t.varName).join(", ");this.insertBlock(`multi([${t}])`,o,e)}return o.varName}compileTForeach(t,e){let{block:n}=e;n&&this.insertAnchor(n),n=this.createBlock(n,"list",e),this.target.loopLevel++;const o=`i${this.target.loopLevel}`;this.addLine("ctx = Object.create(ctx);");const s=`v_block${n.id}`,i=`k_block${n.id}`,r=`l_block${n.id}`,l=`c_block${n.id}`;let a;this.helpers.add("prepareList"),this.define(`[${i}, ${s}, ${r}, ${l}]`,`prepareList(${Qe(t.collection)});`),this.dev&&this.define(`keys${n.id}`,"new Set()"),this.addLine(`for (let ${o} = 0; ${o} < ${r}; ${o}++) {`),this.target.indentLevel++,this.addLine(`ctx[\`${t.elem}\`] = ${i}[${o}];`),t.hasNoFirst||this.addLine(`ctx[\`${t.elem}_first\`] = ${o} === 0;`),t.hasNoLast||this.addLine(`ctx[\`${t.elem}_last\`] = ${o} === ${i}.length - 1;`),t.hasNoIndex||this.addLine(`ctx[\`${t.elem}_index\`] = ${o};`),t.hasNoValue||this.addLine(`ctx[\`${t.elem}_value\`] = ${s}[${o}];`),this.define(`key${this.target.loopLevel}`,t.key?Qe(t.key):o),this.dev&&(this.helpers.add("OwlError"),this.addLine(`if (keys${n.id}.has(String(key${this.target.loopLevel}))) { throw new OwlError(\`Got duplicate key in t-foreach: \${key${this.target.loopLevel}}\`)}`),this.addLine(`keys${n.id}.add(String(key${this.target.loopLevel}));`)),t.memo&&(this.target.hasCache=!0,a=ln(),this.define(`memo${a}`,Qe(t.memo)),this.define(`vnode${a}`,`cache[key${this.target.loopLevel}];`),this.addLine(`if (vnode${a}) {`),this.target.indentLevel++,this.addLine(`if (shallowEqual(vnode${a}.memo, memo${a})) {`),this.target.indentLevel++,this.addLine(`${l}[${o}] = vnode${a};`),this.addLine(`nextCache[key${this.target.loopLevel}] = vnode${a};`),this.addLine("continue;"),this.target.indentLevel--,this.addLine("}"),this.target.indentLevel--,this.addLine("}"));const c=hn(e,{block:n,index:o});return this.compileAST(t.body,c),t.memo&&this.addLine(`nextCache[key${this.target.loopLevel}] = Object.assign(${l}[${o}], {memo: memo${a}});`),this.target.indentLevel--,this.target.loopLevel--,this.addLine("}"),e.isLast||this.addLine("ctx = ctx.__proto__;"),this.insertBlock("l",n,e),n.varName}compileTKey(t,e){const n=ln("tKey_");return this.define(n,Qe(t.expr)),e=hn(e,{tKeyExpr:n,block:e.block,index:e.index}),this.compileAST(t.content,e)}compileMulti(t,e){let{block:n,forceNewBlock:o}=e;const s=!n||o;let i=this.target.code.length;if(s){let o=null;if(t.content.filter(t=>!t.hasNoRepresentation).length<=1){for(let n of t.content){const t=this.compileAST(n,e);o=o||t}return o}n=this.createBlock(n,"multi",e)}let r=0;for(let o=0,s=t.content.length;o<s;o++){const i=t.content[o],l=!i.hasNoRepresentation,a=hn(e,{block:n,index:r,forceNewBlock:l,isLast:e.isLast&&o===s-1});this.compileAST(i,a),l&&r++}if(s){if(n.hasDynamicChildren&&n.children.length){const t=this.target.code,e=n.children.slice();let o=e.shift();for(let n=i;n<t.length&&(!t[n].trimStart().startsWith(`const ${o.varName} `)||(t[n]=t[n].replace(`const ${o.varName}`,o.varName),o=e.shift(),o));n++);this.addLine(`let ${n.children.map(t=>t.varName).join(", ")};`,i)}const t=n.children.map(t=>t.varName).join(", ");this.insertBlock(`multi([${t}])`,n,e)}return n.varName}compileTCall(t,e){let{block:n,forceNewBlock:o}=e,s=e.ctxVar||"ctx";t.context&&(s=ln("ctx"),this.addLine(`let ${s} = {this: ${Qe(t.context)}, __owl__: this.__owl__};`));const i=tn.test(t.name),r=i?en(t.name):"`"+t.name+"`";if(n&&!o&&this.insertAnchor(n),n=this.createBlock(n,"multi",e),t.body){this.addLine(`${s} = Object.create(${s});`),this.addLine(`${s}[isBoundary] = 1;`),this.helpers.add("isBoundary");const n=hn(e,{ctxVar:s}),o=this.compileMulti({type:3,content:t.body},n);o&&(this.helpers.add("zero"),this.addLine(`${s}[zero] = ${o};`))}const l=this.generateComponentKey();if(i){const t=ln("template");this.staticDefs.find(t=>"call"===t.id)||this.staticDefs.push({id:"call",expr:"app.callTemplate.bind(app)"}),this.define(t,r),this.insertBlock(`call(this, ${t}, ${s}, node, ${l})`,n,{...e,forceNewBlock:!n})}else{const t=ln("callTemplate_");this.staticDefs.push({id:t,expr:`app.getTemplate(${r})`}),this.insertBlock(`${t}.call(this, ${s}, node, ${l})`,n,{...e,forceNewBlock:!n})}return t.body&&!e.isLast&&this.addLine(`${s} = ${s}.__proto__;`),n.varName}compileTCallBlock(t,e){let{block:n,forceNewBlock:o}=e;return n&&(o||this.insertAnchor(n)),n=this.createBlock(n,"multi",e),this.insertBlock(Qe(t.name),n,{...e,forceNewBlock:!n}),n.varName}compileTSet(t,e){this.target.shouldProtectScope=!0,this.helpers.add("isBoundary").add("withDefault");const n=t.value?Qe(t.value||""):"null";if(t.body){this.helpers.add("LazyValue");const o={type:3,content:t.body};let s=`new LazyValue(${this.compileInNewTarget("value",o,e)}, ctx, this, node, ${this.target.currentKey(e)})`;s=t.value?s?`withDefault(${n}, ${s})`:n:s,this.addLine(`ctx[\`${t.name}\`] = ${s};`)}else{let o;if(t.defaultValue){const s=cn(e.translate?this.translate(t.defaultValue,e.translationCtx):t.defaultValue);o=t.value?`withDefault(${n}, ${s})`:s}else o=n;this.helpers.add("setContextValue"),this.addLine(`setContextValue(${e.ctxVar||"ctx"}, "${t.name}", ${o});`)}return null}generateComponentKey(t="key"){const e=[ln("__")];for(let t=0;t<this.target.loopLevel;t++)e.push(`\${key${t+1}}`);return`${t} + \`${e.join("__")}\``}formatProp(t,n,o,s){if(t.endsWith(".translate")){const e=o?.[t]||s;n=cn(this.translateFn(n,e))}else n=this.captureExpression(n);if(t.includes(".")){let[o,s]=t.split(".");switch(t=o,s){case"bind":n=`(${n}).bind(this)`;break;case"alike":case"translate":break;default:throw new e(`Invalid prop suffix: ${s}`)}}return`${t=/^[a-z_]+$/i.test(t)?t:`'${t}'`}: ${n||void 0}`}formatPropObject(t,e,n){return Object.entries(t).map(([t,o])=>this.formatProp(t,o,e,n))}getPropString(t,e){let n=`{${t.join(",")}}`;return e&&(n=`Object.assign({}, ${Qe(e)}${t.length?", "+n:""})`),n}compileComponent(t,e){let{block:n}=e;const o="slots"in(t.props||{}),s=t.props?this.formatPropObject(t.props,t.propsTranslationCtx,e.translationCtx):[];let i="";if(t.slots){let n="ctx";!this.target.loopLevel&&this.hasSafeContext||(n=ln("ctx"),this.helpers.add("capture"),this.define(n,"capture(ctx)"));let o=[];for(let s in t.slots){const i=t.slots[s],r=[];if(i.content){const t=this.compileInNewTarget("slot",i.content,e,i.on);r.push(`__render: ${t}.bind(this), __ctx: ${n}`)}const l=t.slots[s].scope;l&&r.push(`__scope: "${l}"`),t.slots[s].attrs&&r.push(...this.formatPropObject(t.slots[s].attrs,t.slots[s].attrsTranslationCtx,e.translationCtx));const a=`{${r.join(", ")}}`;o.push(`'${s}': ${a}`)}i=`{${o.join(", ")}}`}!i||t.dynamicProps||o||(this.helpers.add("markRaw"),s.push(`slots: markRaw(${i})`));let r,l,a=this.getPropString(s,t.dynamicProps);(i&&(t.dynamicProps||o)||this.dev)&&(r=ln("props"),this.define(r,a),a=r),i&&(t.dynamicProps||o)&&(this.helpers.add("markRaw"),this.addLine(`${r}.slots = markRaw(Object.assign(${i}, ${r}.slots))`)),t.isDynamic?(l=ln("Comp"),this.define(l,Qe(t.name))):l=`\`${t.name}\``,n&&(!1===e.forceNewBlock||e.tKeyExpr)&&this.insertAnchor(n);let c=this.generateComponentKey();e.tKeyExpr&&(c=`${e.tKeyExpr} + ${c}`);let u=ln("comp");const h=[];for(let e in t.props||{}){let[t,n]=e.split(".");n||h.push(`"${t}"`)}this.staticDefs.push({id:u,expr:`app.createComponent(${t.isDynamic?null:l}, ${!t.isDynamic}, ${!!t.slots}, ${!!t.dynamicProps}, [${h}])`}),t.isDynamic&&(c=`(${l}).name + ${c}`);let d=`${u}(${a}, ${c}, node, this, ${t.isDynamic?l:null})`;return t.isDynamic&&(d=`toggler(${l}, ${d})`),t.on&&(d=this.wrapWithEventCatcher(d,t.on)),n=this.createBlock(n,"multi",e),this.insertBlock(d,n,e),n.varName}wrapWithEventCatcher(t,e){this.helpers.add("createCatcher");let n=ln("catcher"),o={},s=[];for(let t in e){let n=ln("hdlr"),i=s.push(n)-1;o[t]=i;const r=this.generateHandlerCode(t,e[t]);this.define(n,r)}return this.staticDefs.push({id:n,expr:`createCatcher(${JSON.stringify(o)})`}),`${n}(${t}, [${s.join(",")}])`}compileTCallSlot(t,e){this.helpers.add("callSlot");let n,o,{block:s}=e,i=!1,r=!1;t.name.match(tn)?(i=!0,r=!0,o=en(t.name)):(o="'"+t.name+"'",r=r||this.slotNames.has(t.name),this.slotNames.add(t.name));const l={...t.attrs},a=l["t-props"];delete l["t-props"];let c=this.target.loopLevel?`key${this.target.loopLevel}`:"key";r&&(c=this.generateComponentKey(c));const u=t.attrs?this.formatPropObject(l,t.attrsTranslationCtx,e.translationCtx):[],h=this.getPropString(u,a);if(t.defaultContent){n=`callSlot(ctx, node, ${c}, ${o}, ${i}, ${h}, ${this.compileInNewTarget("defaultContent",t.defaultContent,e)}.bind(this))`}else if(i){let t=ln("slot");this.define(t,o),n=`toggler(${t}, callSlot(ctx, node, ${c}, ${t}, ${i}, ${h}))`}else n=`callSlot(ctx, node, ${c}, ${o}, ${i}, ${h})`;return t.on&&(n=this.wrapWithEventCatcher(n,t.on)),s&&this.insertAnchor(s),s=this.createBlock(s,"multi",e),this.insertBlock(n,s,{...e,forceNewBlock:!1}),s.varName}compileTTranslation(t,e){return t.content?this.compileAST(t.content,Object.assign({},e,{translate:!1})):null}compileTTranslationContext(t,e){return t.content?this.compileAST(t.content,Object.assign({},e,{translationCtx:t.translationCtx})):null}compileTPortal(t,e){this.staticDefs.find(t=>"Portal"===t.id)||this.staticDefs.push({id:"Portal",expr:"app.Portal"});let{block:n}=e;const o=this.compileInNewTarget("slot",t.content,e);let s="ctx";!this.target.loopLevel&&this.hasSafeContext||(s=ln("ctx"),this.helpers.add("capture"),this.define(s,"capture(ctx)"));let i=ln("comp");this.staticDefs.push({id:i,expr:"app.createComponent(null, false, true, false, false)"});const r=`${i}({target: ${Qe(t.target)},slots: {'default': {__render: ${o}.bind(this), __ctx: ${s}}}}, ${this.generateComponentKey()}, node, ctx, Portal)`;return n&&this.insertAnchor(n),n=this.createBlock(n,"multi",e),this.insertBlock(r,n,{...e,forceNewBlock:!1}),n.varName}}const gn=new WeakMap;function bn(t,n){var o;return function(t){let n=t.querySelectorAll("[t-elif], [t-else]");for(let t=0,o=n.length;t<o;t++){let o=n[t],s=o.previousElementSibling,i=t=>s.getAttribute(t),r=t=>+!!o.getAttribute(t);if(!s||!i("t-if")&&!i("t-elif"))throw new e("t-elif and t-else directives must be preceded by a t-if or t-elif directive");{if(i("t-foreach"))throw new e("t-if cannot stay at the same level as t-foreach when using t-elif or t-else");if(["t-if","t-elif","t-else"].map(r).reduce(function(t,e){return t+e})>1)throw new e("Only one conditional branching directive is allowed per node");let t;for(;(t=o.previousSibling)!==s;){if(t.nodeValue.trim().length&&8!==t.nodeType)throw new e("text is not allowed between branching directives");t.remove()}}}}(o=t),function(t){const n=[...t.querySelectorAll("[t-out]")].filter(t=>t.tagName[0]===t.tagName[0].toUpperCase()||t.hasAttribute("t-component"));for(const t of n){if(t.childNodes.length)throw new e("Cannot have t-out on a component that already has content");const n=t.getAttribute("t-out");t.removeAttribute("t-out");const o=t.ownerDocument.createElement("t");null!=n&&o.setAttribute("t-out",n),t.appendChild(o)}}(o),vn(t,n)||{type:0,value:""}}function vn(t,n){return t instanceof Element?function(t,n){if(!n.customDirectives)return null;const o=t.getAttributeNames();for(let s of o){if("t-custom"===s||"t-custom-"===s)throw new e("Missing custom directive name with t-custom directive");if(s.startsWith("t-custom-")){const o=s.split(".")[0].slice(9),i=n.customDirectives[o];if(!i)throw new e(`Custom directive "${o}" is not defined`);const r=t.getAttribute(s),l=s.split(".").slice(1);t.removeAttribute(s);try{i(t,r,l)}catch(t){throw new e(`Custom directive "${o}" throw the following error: ${t}`)}return vn(t,n)}}return null}(t,n)||function(t,e){if(t.hasAttribute("t-debug")){t.removeAttribute("t-debug");const n=vn(t,e),o={type:11,content:n};return n?.hasNoRepresentation&&(o.hasNoRepresentation=!0),o}if(t.hasAttribute("t-log")){const n=t.getAttribute("t-log");t.removeAttribute("t-log");const o=vn(t,e),s={type:12,expr:n,content:o};return o?.hasNoRepresentation&&(s.hasNoRepresentation=!0),s}return null}(t,n)||function(t,n){if(!t.hasAttribute("t-foreach"))return null;const o=t.outerHTML,s=t.getAttribute("t-foreach");t.removeAttribute("t-foreach");const i=t.getAttribute("t-as")||"";t.removeAttribute("t-as");const r=t.getAttribute("t-key");if(!r)throw new e(`"Directive t-foreach should always be used with a t-key!" (expression: t-foreach="${s}" t-as="${i}")`);t.removeAttribute("t-key");const l=t.getAttribute("t-memo")||"";t.removeAttribute("t-memo");const a=vn(t,n);if(!a)return null;const c=!o.includes("t-call"),u=c&&!o.includes(`${i}_first`),h=c&&!o.includes(`${i}_last`),d=c&&!o.includes(`${i}_index`),f=c&&!o.includes(`${i}_value`);return{type:8,collection:s,elem:i,body:a,memo:l,key:r,hasNoFirst:u,hasNoLast:h,hasNoIndex:d,hasNoValue:f}}(t,n)||function(t,e){if(!t.hasAttribute("t-if"))return null;const n=t.getAttribute("t-if");t.removeAttribute("t-if");const o=vn(t,e)||{type:0,value:""};let s=t.nextElementSibling;const i=[];for(;s&&s.hasAttribute("t-elif");){const t=s.getAttribute("t-elif");s.removeAttribute("t-elif");const n=vn(s,e),o=s.nextElementSibling;s.remove(),s=o,n&&i.push({condition:t,content:n})}let r=null;s&&s.hasAttribute("t-else")&&(s.removeAttribute("t-else"),r=vn(s,e),s.remove());return{type:4,condition:n,content:o,tElif:i.length?i:null,tElse:r}}(t,n)||function(t,e){if(!t.hasAttribute("t-portal"))return null;const n=t.getAttribute("t-portal");t.removeAttribute("t-portal");const o=vn(t,e);if(!o)return{type:0,value:""};return{type:17,target:n,content:o}}(t,n)||function(t,e){if(!t.hasAttribute("t-call"))return null;const n=t.getAttribute("t-call"),o=t.getAttribute("t-call-context");if(t.removeAttribute("t-call"),t.removeAttribute("t-call-context"),"t"!==t.tagName){const s=vn(t,e),i={type:6,name:n,body:null,context:o};if(s&&2===s.type)return s.content=[i],s;if(s&&10===s.type)return{...s,slots:{default:{content:i,scope:null,on:null,attrs:null,attrsTranslationCtx:null}}}}const s=kn(t,e);return{type:6,name:n,body:s.length?s:null,context:o}}(t,n)||function(t){if(!t.hasAttribute("t-call-block"))return null;const e=t.getAttribute("t-call-block");return{type:14,name:e}}(t)||function(t,e){if("off"!==t.getAttribute("t-translation"))return null;t.removeAttribute("t-translation");const n=vn(t,e);if(3===n?.type){return En(n.content.map(Nn))}return Nn(n)}(t,n)||function(t,e){const n=t.getAttribute("t-translation-context");if(!n)return null;t.removeAttribute("t-translation-context");const o=vn(t,e);if(3===o?.type){return En(o.content.map(t=>$n(t,n)))}return $n(o,n)}(t,n)||function(t,e){if(!t.hasAttribute("t-key"))return null;const n=t.getAttribute("t-key");t.removeAttribute("t-key");const o=vn(t,e);if(!o)return null;const s={type:9,expr:n,content:o};o.hasNoRepresentation&&(s.hasNoRepresentation=!0);return s}(t,n)||function(t,e){if(!t.hasAttribute("t-out")&&!t.hasAttribute("t-esc"))return null;t.hasAttribute("t-esc")&&console.warn('t-esc has been deprecated in favor of t-out. If the value to render is not wrapped by the "markup" function, it will be escaped');const n=t.getAttribute("t-out")||t.getAttribute("t-esc");t.removeAttribute("t-out"),t.removeAttribute("t-esc");const o={type:7,expr:n,body:null},s=t.getAttribute("t-ref");t.removeAttribute("t-ref");const i=vn(t,e);if(!i)return o;if(2===i.type)return o.body=i.content.length?i.content:null,{...i,ref:s,content:[o]};return o}(t,n)||function(t,e){if(!t.hasAttribute("t-call-slot")&&!t.hasAttribute("t-slot"))return null;t.hasAttribute("t-slot")&&console.warn("t-slot has been renamed t-call-slot.");const n=t.getAttribute("t-call-slot")||t.getAttribute("t-slot");t.removeAttribute("t-call-slot"),t.removeAttribute("t-slot");let o=null,s=null,i=null;for(let e of t.getAttributeNames()){const n=t.getAttribute(e);if(e.startsWith("t-on-"))i=i||{},i[e.slice(5)]=n;else if(e.startsWith("t-translation-context-")){s=s||{},s[e.slice(22)]=n}else o=o||{},o[e]=n}return{type:13,name:n,attrs:o,attrsTranslationCtx:s,on:i,defaultContent:Tn(t,e)}}(t,n)||function(t,n){let o=t.tagName;const s=o[0];let i=t.hasAttribute("t-component");if(i&&"t"!==o)throw new e(`Directive 't-component' can only be used on <t> nodes (used on a <${o}>)`);if(s!==s.toUpperCase()&&!i)return null;i&&(o=t.getAttribute("t-component"),t.removeAttribute("t-component"));const r=t.getAttribute("t-props");t.removeAttribute("t-props");const l=t.getAttribute("t-slot-scope");t.removeAttribute("t-slot-scope");let a=null,c=null,u=null;for(let n of t.getAttributeNames()){const o=t.getAttribute(n);if(n.startsWith("t-translation-context-")){u=u||{},u[n.slice(22)]=o}else if(n.startsWith("t-")){if(!n.startsWith("t-on-")){const t=xn.get(n.split("-").slice(0,2).join("-"));throw new e(t||`unsupported directive on Component: ${n}`)}a=a||{},a[n.slice(5)]=o}else c=c||{},c[n]=o}let h=null;if(t.hasChildNodes()){const o=t.cloneNode(!0),s=Array.from(o.querySelectorAll("[t-set-slot]"));for(let t of s){if("t"!==t.tagName)throw new e(`Directive 't-set-slot' can only be used on <t> nodes (used on a <${t.tagName}>)`);const s=t.getAttribute("t-set-slot");let i=t.parentElement,r=!1;for(;i&&i!==o;){if(i.hasAttribute("t-component")||i.tagName[0]===i.tagName[0].toUpperCase()){r=!0;break}i=i.parentElement}if(r||!i)continue;t.removeAttribute("t-set-slot"),t.remove();const l=vn(t,n);let a=null,c=null,u=null,d=null;for(let e of t.getAttributeNames()){const n=t.getAttribute(e);if("t-slot-scope"!==e)if(e.startsWith("t-translation-context-")){u=u||{},u[e.slice(22)]=n}else e.startsWith("t-on-")?(a=a||{},a[e.slice(5)]=n):(c=c||{},c[e]=n);else d=n}h=h||{},h[s]={content:l,on:a,attrs:c,attrsTranslationCtx:u,scope:d}}const i=Tn(o,n);h=h||{},i&&!h.default&&(h.default={content:i,on:a,attrs:null,attrsTranslationCtx:null,scope:l})}return{type:10,name:o,isDynamic:i,dynamicProps:r,props:c,propsTranslationCtx:u,slots:h,on:a}}(t,n)||function(t,n){const{tagName:o}=t,s=t.getAttribute("t-tag");if(t.removeAttribute("t-tag"),"t"===o&&!s)return null;if(o.startsWith("block-"))throw new e(`Invalid tag name: '${o}'`);n=Object.assign({},n),"pre"===o&&(n.inPreTag=!0);let i=!n.nameSpace&&wn.has(o)?"http://www.w3.org/2000/svg":null;const r=t.getAttribute("t-ref");t.removeAttribute("t-ref");const l=t.getAttributeNames();let a=null,c=null,u=null,h=null;for(let s of l){const r=t.getAttribute(s);if("t-on"===s||"t-on-"===s)throw new e("Missing event name with t-on directive");if(s.startsWith("t-on-"))u=u||{},u[s.slice(5)]=r;else if(s.startsWith("t-model")){if(!["input","select","textarea"].includes(o))throw new e("The t-model directive only works with <input>, <textarea> and <select>");const i=t.getAttribute("type"),l="input"===o,a="select"===o,c=l&&"checkbox"===i,u=l&&"radio"===i,d=s.includes(".trim"),f=d||s.includes(".lazy");h={expr:r,targetAttr:c?"checked":"value",specialInitTargetAttr:u?"checked":null,eventType:u?"click":a||f?"change":"input",hasDynamicChildren:!1,shouldTrim:d,shouldNumberize:s.includes(".number")},a&&((n=Object.assign({},n)).tModelInfo=h)}else{if(s.startsWith("block-"))throw new e(`Invalid attribute: '${s}'`);if("xmlns"===s)i=r;else if(s.startsWith("t-translation-context-")){c=c||{},c[s.slice(22)]=r}else if("t-name"!==s){if(s.startsWith("t-")&&!s.startsWith("t-att"))throw new e(`Unknown QWeb directive: '${s}'`);const t=n.tModelInfo;t&&["t-att-value","t-attf-value"].includes(s)&&(t.hasDynamicChildren=!0),a=a||{},a[s]=r}}}i&&(n.nameSpace=i);const d=kn(t,n);return{type:2,tag:o,dynamicTag:s,attrs:a,attrsTranslationCtx:c,on:u,ref:r,content:d,model:h,ns:i}}(t,n)||function(t,e){if(!t.hasAttribute("t-set"))return null;const n=t.getAttribute("t-set"),o=t.getAttribute("t-value")||null,s=t.innerHTML===t.textContent&&t.textContent||null;let i=null;t.textContent!==t.innerHTML&&(i=kn(t,e));return{type:5,name:n,value:o,defaultValue:s,body:i,hasNoRepresentation:!0}}(t,n)||function(t,e){if("t"!==t.tagName)return null;return Tn(t,e)}(t,n):function(t,e){if(t.nodeType===Node.TEXT_NODE){let n=t.textContent||"";return e.inPreTag||!yn.test(n)||n.trim()?{type:0,value:n}:null}if(t.nodeType===Node.COMMENT_NODE)return{type:1,value:t.textContent||""};return null}(t,n)}const yn=/[\r\n]/;const wn=new Set(["svg","g","path"]);const xn=new Map([["t-ref","t-ref is no longer supported on components. Consider exposing only the public part of the component's API through a callback prop."],["t-att","t-att makes no sense on component: props are already treated as expressions"],["t-attf","t-attf is not supported on components: use template strings for string interpolation in props"]]);function Nn(t){const e={type:15,content:t};return t?.hasNoRepresentation&&(e.hasNoRepresentation=!0),e}function $n(t,e){const n={type:16,content:t,translationCtx:e};return t?.hasNoRepresentation&&(n.hasNoRepresentation=!0),n}function kn(t,e){const n=[];for(let o of t.childNodes){const t=vn(o,e);t&&(3===t.type?n.push(...t.content):n.push(t))}return n}function En(t){const e={type:3,content:t};return t.every(t=>t.hasNoRepresentation)&&(e.hasNoRepresentation=!0),e}function Tn(t,e){const n=kn(t,e);switch(n.length){case 0:return null;case 1:return n[0];default:return En(n)}}function _n(t,o={hasGlobalValues:!1}){const s=function(t,e){const o={inPreTag:!1,customDirectives:e};if("string"==typeof t)return bn(n(`<t>${t}</t>`).firstChild,o);let s=gn.get(t);return s||(s=bn(t.cloneNode(!0),o),gn.set(t,s)),s}(t,o.customDirectives),i=t instanceof Node?!(t instanceof Element)||null===t.querySelector("[t-set], [t-call]"):!t.includes("t-set=")&&!t.includes("t-call="),r=new mn(s,{...o,hasSafeContext:i}).generateCode();try{return new Function("app, bdom, helpers",r)}catch(t){const{name:n}=o,s=new e(`Failed to compile ${n?`template "${n}"`:"anonymous template"}: ${t.message}\n\ngenerated code:\nfunction(app, bdom, helpers) {\n${r}\n}`);throw s.cause=t,s}}function An(){throw new e("Attempted to render cancelled fiber")}function Cn(t){let e=0;for(let n of t){let t=n.node;n.render=An,0===t.status&&t.cancel(),t.fiber=null,n.bdom?t.forceNextRender=!0:e++,e+=Cn(n.children)}return e}class Dn{node;bdom=null;root;parent;children=[];appliedToDom=!1;deep=!1;childrenMap={};constructor(t,e){if(this.node=t,this.parent=e,e){this.deep=e.deep;const t=e.root;t.setCounter(t.counter+1),this.root=t,e.children.push(this)}else this.root=this}render(){let t=this.root.node,e=t.app.scheduler,n=t.parent;for(;n;){if(n.fiber){let o=n.fiber.root;if(0!==o.counter||!(t.parentKey in n.fiber.childrenMap))return void e.delayedRenders.push(this);n=o.node}t=n,n=n.parent}this._render()}_render(){const t=this.node,e=this.root;if(e){const n=Yt();Jt(t.signalComputation);try{this.bdom=!0,this.bdom=t.renderFn()}catch(e){t.app.handleError({node:t,error:e})}Jt(n),e.setCounter(e.counter-1)}}}class Sn extends Dn{counter=1;willPatch=[];patched=[];mounted=[];locked=!1;complete(){const t=this.node;let e;this.locked=!0;let n=this.mounted;try{for(e of this.willPatch){let t=e.node;if(t.fiber===e){const e=t.component;for(let n of t.willPatch)n.call(e)}}for(e=void 0,t._patch(),this.locked=!1;e=n.pop();)if(e.appliedToDom)for(let t of e.node.mounted)t();let o=this.patched;for(;e=o.pop();)if(e.appliedToDom)for(let t of e.node.patched)t()}catch(o){for(let t of n)t.node.willUnmount=[];this.locked=!1,t.app.handleError({fiber:e||this,error:o})}}setCounter(t){this.counter=t,0===t&&this.node.app.scheduler.flush()}}class On extends Sn{target;position;constructor(t,e,n={}){super(t,null),this.target=e,this.position=n.position||"last-child"}complete(){let t=this;try{const e=this.node;if(e.children=this.childrenMap,e.app.constructor.validateTarget(this.target),e.bdom)e.updateDom();else if(e.bdom=this.bdom,"last-child"===this.position||0===this.target.childNodes.length)At(e.bdom,this.target);else{const t=this.target.childNodes[0];At(e.bdom,this.target,t)}e.fiber=null,e.status=1,this.appliedToDom=!0;let n=this.mounted;for(;t=n.pop();)if(t.appliedToDom)for(let e of t.node.mounted)e()}catch(e){this.node.app.handleError({fiber:t,error:e})}}}class Rn{el;app;fiber=null;component;bdom=null;status=0;forceNextRender=!1;parentKey;props;renderFn;parent;children=Object.create(null);willStart=[];willUpdateProps=[];willUnmount=[];mounted=[];willPatch=[];patched=[];willDestroy=[];signalComputation;pluginManager;constructor(t,e,n,o,s){this.app=n,this.parent=o,this.parentKey=s,this.pluginManager=o?o.pluginManager:n.pluginManager,this.signalComputation=zt({compute:()=>this.render(!1),state:Ft.EXECUTED,isDerived:!1}),this.props=Object.assign({},e),Ct.push({type:"component",app:n,componentName:t.name,node:this,get status(){return this.node.status}});const i=Yt();Jt(void 0),this.component=new t(this);const r={this:this.component,__owl__:this};this.renderFn=n.getTemplate(t.template).bind(this.component,r,this),this.component.setup(),Jt(i),Ct.length=0}mountComponent(t,e){const n=new On(this,t,e);this.app.scheduler.addFiber(n);let o=Yt();this.initiateRender(n),Jt(o)}async initiateRender(t){this.fiber=t,this.mounted.length&&t.root.mounted.push(t);const e=this.component;let n=Yt();Jt(void 0);try{let t=this.willStart.map(t=>t.call(e));Jt(n),await Promise.all(t)}catch(t){return void this.app.handleError({node:this,error:t})}0===this.status&&this.fiber===t&&t.render()}async render(t){if(this.status>=2)return;let e=this.fiber;if(e&&(e.root.locked||!0===e.bdom)&&(await Promise.resolve(),e=this.fiber),e){if(!e.bdom&&!Rt.has(e))return void(t&&(e.deep=t));t=t||e.deep}else if(!this.bdom)return;const n=function(t){let e=t.fiber;if(e){let t=e.root;return t.locked=!0,t.setCounter(t.counter+1-Cn(e.children)),t.locked=!1,e.children=[],e.childrenMap={},e.bdom=null,Rt.has(e)&&(Rt.delete(e),Rt.delete(t),e.appliedToDom=!1,e instanceof Sn&&(e.mounted=e instanceof On?[e]:[])),e}const n=new Sn(t,null);return t.willPatch.length&&n.willPatch.push(n),t.patched.length&&n.patched.push(n),n}(this);n.deep=t,this.fiber=n,this.app.scheduler.addFiber(n),await Promise.resolve(),this.status>=2||this.fiber!==n||!e&&n.parent||n.render()}cancel(){this._cancel(),delete this.parent.children[this.parentKey],this.app.scheduler.scheduleDestroy(this)}_cancel(){this.status=2;const t=this.children;for(let e in t)t[e]._cancel()}destroy(){let t=1===this.status;this._destroy(),t&&this.bdom.remove()}_destroy(){const t=this.component;if(1===this.status)for(let e of this.willUnmount)e.call(t);for(let t of Object.values(this.children))t._destroy();if(this.willDestroy.length)try{for(let e of this.willDestroy)e.call(t)}catch(t){this.app.handleError({error:t,node:this})}this.status=3}async updateAndRender(t,e){t=Object.assign({},t);const n=function(t,e){let n=t.fiber;return n&&(Cn(n.children),n.root=null),new Dn(t,e)}(this,e);this.fiber=n;const o=this.component;let s=Yt();Jt(void 0);let i=this.willUpdateProps.map(e=>e.call(o,t));if(Jt(s),await Promise.all(i),n!==this.fiber)return;this.props=t,n.render();const r=e.root;this.willPatch.length&&r.willPatch.push(n),this.patched.length&&r.patched.push(n)}updateDom(){if(this.fiber)if(this.bdom===this.fiber.bdom)for(let t in this.children){this.children[t].updateDom()}else this.bdom.patch(this.fiber.bdom,!1),this.fiber.appliedToDom=!0,this.fiber=null}firstNode(){const t=this.bdom;return t?t.firstNode():void 0}mount(t,e){const n=this.fiber.bdom;this.bdom=n,n.mount(t,e),this.status=1,this.fiber.appliedToDom=!0,this.children=this.fiber.childrenMap,this.fiber=null}moveBeforeDOMNode(t,e){this.bdom.moveBeforeDOMNode(t,e)}moveBeforeVNode(t,e){this.bdom.moveBeforeVNode(t?t.bdom:null,e)}patch(){this.fiber&&this.fiber.parent&&this._patch()}_patch(){let t=!1;for(let e in this.children){t=!0;break}const e=this.fiber;this.children=e.childrenMap,this.bdom.patch(e.bdom,t),e.appliedToDom=!0,this.fiber=null}beforeRemove(){this._destroy()}remove(){this.bdom.remove()}}function Ln(t){const e=zt({compute:()=>(Jt(void 0),Bn(e),Jt(e),t()),isDerived:!1});return Yt()?.observers.add(e),Zt(e),function(){const t=Yt();Jt(void 0),Bn(e),Jt(t)}}function Bn(t){Qt(t),function(t){const e=t.value;e&&"function"==typeof e&&(e(),t.value=void 0)}(t);for(const e of t.observers)e.state=Ft.EXECUTED,Qt(e),Bn(e);t.observers.clear()}class In{static _shadowId;static get id(){return this._shadowId??this.name}static set id(t){this._shadowId=t}__owl__;constructor(t){this.__owl__=t}setup(){}}class Pn{app;config;onDestroyCb=[];plugins;status=0;constructor(t,e={}){if(this.app=t,this.config=e.config??{},e.parent){const t=e.parent;t.onDestroyCb.push(()=>this.destroy()),this.plugins=Object.create(t.plugins)}else this.plugins={};if(e.plugins){const t=e.plugins;this.onDestroyCb.push(Ln(()=>{const e=t();ee(()=>this.startPlugins(e))}))}else this.status=1}destroy(){const t=this.onDestroyCb;for(;t.length;)t.pop()();this.status=3}getPluginById(t){return this.plugins[t]||null}getPlugin(t){return this.getPluginById(t.id)}startPlugin(t){if(!t.id)throw new e(`Plugin "${t.name}" has no id`);if(this.plugins.hasOwnProperty(t.id)){const n=this.getPluginById(t.id).constructor;if(n!==t)throw new e(`Trying to start a plugin with the same id as an other plugin (id: '${t.id}', existing plugin: '${n.name}', starting plugin: '${t.name}')`);return null}const n=new t(this);return n.setup(),this.plugins[t.id]=n,n}startPlugins(t){Ct.push({type:"plugin",app:this.app,manager:this,get status(){return this.manager.status}});try{for(const e of t)this.startPlugin(e)}finally{Ct.pop()}this.status=1}}function Mn(t,e={}){const n=zt({compute:()=>(Gt(n),t()),isDerived:!0});function o(){return Zt(n),qt(n),n.value}return o[Kt]=n,o.set=e.set??(()=>{}),o}class jn{static requestAnimationFrame=window.requestAnimationFrame.bind(window);tasks=new Set;requestAnimationFrame;frame=0;delayedRenders=[];cancelledNodes=new Set;processing=!1;constructor(){this.requestAnimationFrame=jn.requestAnimationFrame}addFiber(t){this.tasks.add(t.root)}scheduleDestroy(t){this.cancelledNodes.add(t),0===this.frame&&(this.frame=this.requestAnimationFrame(()=>this.processTasks()))}flush(){if(this.delayedRenders.length){let t=this.delayedRenders;this.delayedRenders=[];for(let e of t)e.root&&3!==e.node.status&&e.node.fiber===e&&e.render()}0===this.frame&&(this.frame=this.requestAnimationFrame(()=>this.processTasks()))}processTasks(){if(!this.processing){this.processing=!0,this.frame=0;for(let t of this.cancelledNodes)t._destroy();this.cancelledNodes.clear();for(let t of this.tasks)this.processFiber(t);for(let t of this.tasks)3===t.node.status&&this.tasks.delete(t);this.processing=!1}}processFiber(t){if(t.root!==t)return void this.tasks.delete(t);const e=Rt.has(t);e&&0!==t.counter?this.tasks.delete(t):3!==t.node.status?0===t.counter&&(e||t.complete(),t.appliedToDom&&this.tasks.delete(t)):this.tasks.delete(t)}}function Vn(t,e,n){const o={type:"signal",value:t,observers:new Set};let s=e(o);const i=()=>(qt(o),s);return i[Kt]=o,i.set=function(t){Object.is(o.value,t)||(o.value=t,s=e(o),Gt(o))},i}function Wn(t,e={}){return Vn(t,t=>t.value)}Wn.invalidate=function(t){if("function"!=typeof t||"signal"!==t[Kt]?.type)throw new e(`Value is not a signal (${t})`);Gt(t[Kt])},Wn.Array=function(t,e={}){return Vn(t,t=>Te(t.value,t))},Wn.Object=function(t,e){return Vn(t,t=>Te(t.value,t))},Wn.Map=function(t,e){return Vn(t,t=>Te(t.value,t))},Wn.Set=function(t,e){return Vn(t,t=>Te(t.value,t))};class Fn{_items=Wn.Array([]);_name;_validation;constructor(t={}){this._name=t.name,this._validation=t.validation}items=Mn(()=>this._items().sort((t,e)=>t[0]-e[0]).map(t=>t[1]));add(t,e={}){if(this._validation){const e=this._name?` (resource '${this._name}')`:"";oe(t,this._validation,`Resource item does not match the type${e}`)}return this._items().push([e.sequence??50,t]),this}delete(t){const e=this._items().filter(([e,n])=>n!==t);return this._items.set(e),this}has(t){return this._items().some(([e,n])=>n===t)}}let Kn=!1;const Un=new Set;window.__OWL_DEVTOOLS__||={apps:Un,Fiber:Dn,RootFiber:Sn,toRaw:we,proxy:_e};class Hn extends We{static validateTarget=E;static apps=Un;static version="3.0.0-alpha";name;scheduler=new jn;roots=new Set;pluginManager;constructor(t={}){let e;super(t),this.name=t.name||"",Un.add(this),t.plugins&&(e=t.plugins instanceof Fn?t.plugins.items:Mn(()=>t.plugins)),this.pluginManager=new Pn(this,{plugins:e,config:t.config}),t.test&&(this.dev=!0),!this.dev||t.test||Kn||(console.info("Owl is running in 'dev' mode."),Kn=!0)}createRoot(t,e={}){const n=e.props||{};let o,s;const i=new Promise((t,e)=>{o=t,s=e}),r=function(){const t=Ct.slice();return()=>{Ct=t}}();let l,a=null;try{l=this.makeNode(t,n)}catch(t){a=t,s(t)}finally{r()}const c={node:l,promise:i,mount:(t,e)=>(a||(Hn.validateTarget(t),this.mountNode(l,t,o,s,e)),i),destroy:()=>{this.roots.delete(c),l.destroy(),this.scheduler.processTasks()}};return this.roots.add(c),c}makeNode(t,e){return new Rn(t,e,this,null,null)}mountNode(t,e,n,o,s){let i=Lt.get(t);i||(i=[],Lt.set(t,i)),i.unshift((t,e)=>{const n=e();o(n)}),t.mounted.push(()=>{n(t.component),i.shift()}),t.mountComponent(e,s)}destroy(){for(let t of this.roots)t.destroy();this.pluginManager.destroy(),this.scheduler.processTasks(),Un.delete(this)}createComponent(t,n,o,s,i){const r=!n;let l;const a=0===i.length;l=o?(t,e)=>!0:s?function(t,e){for(let n in t)if(t[n]!==e[n])return!0;return Object.keys(t).length!==Object.keys(e).length}:a?(t,e)=>!1:function(t,e){for(let n of i)if(t[n]!==e[n])return!0;return!1};const c=Rn.prototype.updateAndRender,u=Rn.prototype.initiateRender;return(o,s,i,a,h)=>{let d=i.children,f=d[s];r&&f&&f.component.constructor!==h&&(f=void 0);const p=i.fiber;if(f)(l(f.props,o)||p.deep||f.forceNextRender)&&(f.forceNextRender=!1,c.call(f,o,p));else{if(n){const n=a.constructor.components;if(!n)throw new e(`Cannot find the definition of component "${t}", missing static components key in parent`);if(!(h=n[t]))throw new e(`Cannot find the definition of component "${t}"`);if(!(h.prototype instanceof Ot))throw new e(`"${t}" is not a Component. It must inherit from the Component class`)}f=new Rn(h,o,this,i,s),d[s]=f,u.call(f,new Dn(f,p))}return p.childrenMap[s]=f,f}}handleError(...t){return Pt(...t)}}function zn(t){Wt(Ln(t))}s.shouldNormalizeDom=!1,s.mainEventHandler=(t,n,s)=>{const{data:i,modifiers:r}=o(t);t=i;let l=!1;if(r.length){let t=!1;const e=n.target===s;for(const o of r)switch(o){case"self":if(t=!0,e)continue;return l;case"prevent":(t&&e||!t)&&n.preventDefault();continue;case"stop":(t&&e||!t)&&n.stopPropagation(),l=!0;continue}}if(Object.hasOwnProperty.call(t,0)){const o=t[0];if("function"!=typeof o)throw new e(`Invalid handler (expected a function, received: '${o}')`);let s=t[1]?t[1].__owl__:null;s&&1!==s.status||o.call(s?s.component:null,n)}return l};const qn={config:s,mount:At,patch:function(t,e,n=!1){t.patch(e,n)},remove:function(t,e=!1){e&&t.beforeRemove(),t.remove()},list:xt,multi:W,text:Y,toggler:l,createBlock:at,html:_t,comment:J},Gn={version:Hn.version};We.prototype._compileTemplate=function(t,e){return _n(e,{name:t,dev:this.dev,translateFn:this.translateFn,translatableAttributes:this.translatableAttributes,customDirectives:this.customDirectives,hasGlobalValues:this.hasGlobalValues})},t.App=Hn,t.Component=Ot,t.EventBus=T,t.OwlError=e,t.Plugin=In,t.Registry=class{_map=Wn.Object(Object.create(null));_name;_validation;constructor(t={}){this._name=t.name||"registry",this._validation=t.validation}entries=Mn(()=>Object.entries(this._map()).sort((t,e)=>t[1][0]-e[1][0]).map(([t,e])=>[t,e[1]]));items=Mn(()=>this.entries().map(t=>t[1]));addById(t,n={}){if(!t.id)throw new e(`Item should have an id key (registry '${this._name}')`);return this.add(t.id,t,{sequence:n.sequence??50})}add(t,e,n={}){if(this._validation){const n=this._name?` (registry '${this._name}', key: '${t}')`:` (key: '${t}')`;oe(e,this._validation,`Registry entry does not match the type${n}`)}return this._map()[t]=[n.sequence??50,e],this}get(t,e){const n=t in this._map();if(!n&&arguments.length<2)throw new Error(`KeyNotFoundError: Cannot find key "${t}" (registry '${this._name}')`);return n?this._map()[t][1]:e}delete(t){delete this._map()[t]}has(t){return t in this._map()}},t.Resource=Fn,t.__info__=Gn,t.assertType=oe,t.batched=k,t.blockDom=qn,t.computed=Mn,t.config=function(t,e){const{app:n,manager:o}=Dt("plugin");return n.dev&&e&&oe(o.config,ne.object({[t]:e}),"Config does not match the type"),o.config[t.endsWith("?")?t.slice(0,-1):t]},t.effect=Ln,t.htmlEscape=A,t.markRaw=ye,t.markup=C,t.mount=async function(t,e,n={}){return new Hn(n).createRoot(t,n).mount(e,n)},t.onError=function(t){const{node:e}=Dt("component");let n=Lt.get(e);n||(n=[],Lt.set(e,n)),n.push(t.bind(e.component))},t.onMounted=jt,t.onPatched=function(t){const{node:e}=Dt("component");e.patched.push(Mt(e,t,"onPatched"))},t.onWillDestroy=Wt,t.onWillPatch=function(t){const{node:e}=Dt("component");e.willPatch.unshift(Mt(e,t,"onWillPatch"))},t.onWillStart=function(t){const{node:e}=Dt("component");e.willStart.push(Mt(e,t,"onWillStart"))},t.onWillUnmount=Vt,t.onWillUpdateProps=function(t){const{node:e}=Dt("component");e.willUpdateProps.push(Mt(e,t,"onWillUpdateProps"))},t.plugin=function(t){const n=Dt(),o="component"===n.type?n.node.pluginManager:n.manager;let s=o.getPluginById(t.id);if(!s){if("plugin"!==n.type)throw new e(`Unknown plugin "${t.id}"`);s=o.startPlugin(t)}return s},t.props=re,t.providePlugins=function(t,e){const{node:n}=Dt("component"),o=new Pn(n.app,{parent:n.pluginManager,config:e});n.pluginManager=o,Wt(()=>o.destroy()),o.startPlugins(t)},t.proxy=_e,t.signal=Wn,t.status=function(t){switch(t.__owl__.status){case 0:return"new";case 2:return"cancelled";case 1:return t instanceof In?"started":"mounted";case 3:return"destroyed"}},t.toRaw=we,t.types=ne,t.untrack=ee,t.useApp=function(){return Dt().app},t.useContext=function(){const t=Ct.at(-1);return{run(e){if(t){let n;Ct.push(t);try{n=e()}finally{Ct.pop()}return n}return e()},protectAsync:e=>(t&&(e=St(t,e)),e),runWithAsyncProtection:e=>(t&&(e=St(t,e)),e())}},t.useEffect=zn,t.useListener=function(t,e,n,o){"function"==typeof t?zn(()=>{const s=t();if(s)return s.addEventListener(e,n,o),()=>s.removeEventListener(e,n,o)}):(t.addEventListener(e,n,o),Wt(()=>t.removeEventListener(e,n,o)))},t.useResource=function(t,e){for(let n of e)t.add(n);Wt(()=>{for(let n of e)t.delete(n)})},t.validateType=ie,t.whenReady=function(t){return new Promise(function(t){"loading"!==document.readyState?t(!0):document.addEventListener("DOMContentLoaded",t,!1)}).then(t||function(){})},t.xml=Ke,Gn.date="2026-02-15T19:27:47.742Z",Gn.hash="bba628b",Gn.url="https://github.com/odoo/owl"}(this.owl=this.owl||{});
1
+ !function(t){"use strict";class e extends Error{cause}function n(t){const n=(new DOMParser).parseFromString(t,"text/xml");if(n.getElementsByTagName("parsererror").length){let o="Invalid XML in template.";const s=n.getElementsByTagName("parsererror")[0].textContent;if(s){o+="\nThe parser has produced the following error message:\n"+s;const e=/\d+/g,n=e.exec(s);if(n){const i=Number(n[0]),r=t.split("\n")[i-1],l=e.exec(s);if(r&&l){const t=Number(l[0])-1;r[t]&&(o+=`\nThe error might be located at xml line ${i} column ${t}\n${r}\n${"-".repeat(t-1)}^`)}}}throw new e(o)}return n}function o(t){t=t.slice();const e=[];let n;for(;(n=t[0])&&"string"==typeof n;)e.push(t.shift());return{modifiers:e,data:t}}const s={shouldNormalizeDom:!0,mainEventHandler:(t,e,n)=>("function"==typeof t?t(e):Array.isArray(t)&&(t=o(t).data)[0](t[1],e),!1)},i=document.createTextNode("");class r{key;child;parentEl;constructor(t,e){this.key=t,this.child=e}mount(t,e){this.parentEl=t,this.child.mount(t,e)}moveBeforeDOMNode(t,e){this.child.moveBeforeDOMNode(t,e)}moveBeforeVNode(t,e){this.moveBeforeDOMNode(t&&t.firstNode()||e)}patch(t,e){if(this===t)return;let n=this.child,o=t.child;if(this.key===t.key)n.patch(o,e);else{const s=n.firstNode();s.parentElement.insertBefore(i,s),e&&n.beforeRemove(),n.remove(),o.mount(this.parentEl,i),this.child=o,this.key=t.key}}beforeRemove(){this.child.beforeRemove()}remove(){this.child.remove()}firstNode(){return this.child.firstNode()}toString(){return this.child.toString()}}function l(t,e){return new r(t,e)}const{setAttribute:a,removeAttribute:c}=Element.prototype,h=DOMTokenList.prototype,u=h.add,d=h.remove,f=Array.isArray,{split:p,trim:m}=String.prototype,g=/\s+/;function b(t,e){switch(e){case!1:case void 0:c.call(this,t);break;case!0:a.call(this,t,"");break;default:a.call(this,t,e)}}function v(t){return function(e){b.call(this,t,e)}}function y(t){if(f(t))"class"===t[0]?x.call(this,t[1]):b.call(this,t[0],t[1]);else for(let e in t)"class"===e?x.call(this,t[e]):b.call(this,e,t[e])}function w(t,e){if(f(t)){const n=t[0],o=t[1];if(n===e[0]){if(o===e[1])return;"class"===n?N.call(this,o,e[1]):b.call(this,n,o)}else c.call(this,e[0]),b.call(this,n,o)}else{for(let n in e)n in t||("class"===n?N.call(this,"",e[n]):c.call(this,n));for(let n in t){const o=t[n];o!==e[n]&&("class"===n?N.call(this,o,e[n]):b.call(this,n,o))}}}function $(t){const e={};switch(typeof t){case"string":const n=m.call(t);if(!n)return{};let o=p.call(n,g);for(let t=0,n=o.length;t<n;t++)e[o[t]]=!0;return e;case"object":for(let n in t){const o=t[n];if(o){if(n=m.call(n),!n)continue;const t=p.call(n,g);for(let n of t)e[n]=o}}return e;case"undefined":return{};case"number":return{[t]:!0};default:return{[t]:!0}}}function x(t){t=""===t?{}:$(t);const e=this.classList;for(let n in t)u.call(e,n)}function N(t,e){e=""===e?{}:$(e),t=""===t?{}:$(t);const n=this.classList;for(let o in e)o in t||d.call(n,o);for(let o in t)o in e||u.call(n,o)}function k(t){let e=!1;return function(...n){e||(e=!0,queueMicrotask(()=>{e=!1,t(...n)}))}}function E(t){const n=t&&t.ownerDocument;if(n){if(!n.defaultView)throw new e("Cannot mount a component: the target document is not attached to a window (defaultView is missing)");if(t instanceof n.defaultView.HTMLElement||t instanceof ShadowRoot){if(!function(t,e){let n=t;const o=e.defaultView.ShadowRoot;for(;n;){if(n===e)return!0;if(n.parentNode)n=n.parentNode;else{if(!(n instanceof o&&n.host))return!1;n=n.host}}return!1}(t,n))throw new e("Cannot mount a component on a detached dom node");return}}throw new e("Cannot mount component: the target is not a valid DOM element")}class T extends EventTarget{trigger(t,e){this.dispatchEvent(new CustomEvent(t,{detail:e}))}}class A extends String{}function _(t){return t instanceof A?t:void 0===t?C(""):"number"==typeof t?C(String(t)):([["&","&amp;"],["<","&lt;"],[">","&gt;"],["'","&#x27;"],['"',"&quot;"],["`","&#x60;"]].forEach(e=>{t=String(t).replace(new RegExp(e[0],"g"),e[1])}),C(t))}function C(t,...e){if(!Array.isArray(t))return new A(t);const n=t;let o="",s=0;for(;s<e.length;++s)o+=n[s]+_(e[s]);return o+=n[s],new A(o)}function D(t){const e=t.split(".")[0],n=t.includes(".capture");return t.includes(".synthetic")?function(t,e=!1){let n=`__event__synthetic_${t}`;e&&(n=`${n}_capture`);!function(t,e,n=!1){if(R[e])return;document.addEventListener(t,t=>function(t,e){let n=e.target;for(;null!==n;){const o=n[t];if(o)for(const t of Object.values(o)){if(s.mainEventHandler(t,e,n))return}n=n.parentNode}}(e,t),{capture:n}),R[e]=!0}(t,n,e);const o=O++;function i(t){const e=this[n]||{};e[o]=t,this[n]=e}function r(){delete this[n]}return{setup:i,update:i,remove:r}}(e,n):function(t,e=!1){let n=`__event__${t}_${S++}`;e&&(n=`${n}_capture`);function o(t){const e=t.currentTarget;if(!e||!function(t){if(!t)return!1;if(t.ownerDocument.contains(t))return!0;const e=t.getRootNode();return e instanceof ShadowRoot&&t.ownerDocument.contains(e.host)}(e))return;const o=e[n];o&&s.mainEventHandler(o,t,e)}function i(s){this[n]=s,this.addEventListener(t,o,{capture:e})}function r(){delete this[n],this.removeEventListener(t,o,{capture:e})}function l(t){this[n]=t}return{setup:i,update:l,remove:r}}(e,n)}let S=1;let O=1;const R={};const B=Node.prototype,L=B.insertBefore,I=(P=B,M="textContent",Object.getOwnPropertyDescriptor(P,M)).set;var P,M;const j=B.removeChild;class V{children;anchors;parentEl;isOnlyChild;constructor(t){this.children=t}mount(t,e){const n=this.children,o=n.length,s=new Array(o);for(let i=0;i<o;i++){let o=n[i];if(o)o.mount(t,e);else{const n=document.createTextNode("");s[i]=n,L.call(t,n,e)}}this.anchors=s,this.parentEl=t}moveBeforeDOMNode(t,e=this.parentEl){this.parentEl=e;const n=this.children,o=this.anchors;for(let s=0,i=n.length;s<i;s++){let i=n[s];if(i)i.moveBeforeDOMNode(t,e);else{const n=o[s];L.call(e,n,t)}}}moveBeforeVNode(t,e){if(t){const n=t.children[0];e=(n?n.firstNode():t.anchors[0])||null}const n=this.children,o=this.parentEl,s=this.anchors;for(let t=0,i=n.length;t<i;t++){let i=n[t];if(i)i.moveBeforeVNode(null,e);else{const n=s[t];L.call(o,n,e)}}}patch(t,e){if(this===t)return;const n=this.children,o=t.children,s=this.anchors,i=this.parentEl;for(let t=0,r=n.length;t<r;t++){const r=n[t],l=o[t];if(r)if(l)r.patch(l,e);else{const o=r.firstNode(),l=document.createTextNode("");s[t]=l,L.call(i,l,o),e&&r.beforeRemove(),r.remove(),n[t]=void 0}else if(l){n[t]=l;const e=s[t];l.mount(i,e),j.call(i,e)}}}beforeRemove(){const t=this.children;for(let e=0,n=t.length;e<n;e++){const n=t[e];n&&n.beforeRemove()}}remove(){const t=this.parentEl;if(this.isOnlyChild)I.call(t,"");else{const e=this.children,n=this.anchors;for(let o=0,s=e.length;o<s;o++){const s=e[o];s?s.remove():j.call(t,n[o])}}}firstNode(){const t=this.children[0];return t?t.firstNode():this.anchors[0]}toString(){return this.children.map(t=>t?t.toString():"").join("")}}function W(t){return new V(t)}const F=Node.prototype,K=CharacterData.prototype,U=F.insertBefore,z=((t,e)=>Object.getOwnPropertyDescriptor(t,e))(K,"data").set,H=F.removeChild;class q{text;parentEl;el;constructor(t){this.text=t}mountNode(t,e,n){this.parentEl=e,U.call(e,t,n),this.el=t}moveBeforeDOMNode(t,e=this.parentEl){this.parentEl=e,U.call(e,this.el,t)}moveBeforeVNode(t,e){U.call(this.parentEl,this.el,t?t.el:e)}beforeRemove(){}remove(){H.call(this.parentEl,this.el)}firstNode(){return this.el}toString(){return this.text}}let G=class extends q{mount(t,e){this.mountNode(document.createTextNode(J(this.text)),t,e)}patch(t){const e=t.text;this.text!==e&&(z.call(this.el,J(e)),this.text=e)}};class X extends q{mount(t,e){this.mountNode(document.createComment(J(this.text)),t,e)}patch(){}}function Z(t){return new G(t)}function Y(t){return new X(t)}function J(t){switch(typeof t){case"string":return t;case"number":return String(t);case"boolean":return t?"true":"false";default:return t||""}}const Q=(t,e)=>Object.getOwnPropertyDescriptor(t,e),tt=Node.prototype,et=Element.prototype,nt=Q(CharacterData.prototype,"data").set,ot=Q(tt,"firstChild").get,st=Q(tt,"nextSibling").get,it=()=>{};function rt(t){return function(e){this[t]=0===e?0:e?e.valueOf():""}}const lt={};function at(t){if(t in lt)return lt[t];const e=(new DOMParser).parseFromString(`<t>${t}</t>`,"text/xml").firstChild.firstChild;s.shouldNormalizeDom&&ct(e);const n=ht(e),o=ft(n),i=function(t,e){let n=function(t,e){const{refN:n,collectors:o,children:s,locations:i,cbRefs:r}=e;i.sort((t,e)=>t.idx-e.idx);const l=i.length,a=s.length,c=n>0,h=i.map(t=>t.refIdx),u=i.map(t=>t.setData),d=i.map(t=>t.updateData),f=[st,ot],p=o.length,m=o.map(t=>32767&t.idx|(32767&t.prevIdx)<<15|(t.getVal===ot?1:0)<<30),g=s.map(t=>32767&t.parentRefIdx|(t.isOnlyChild?1:0)<<15|(32767&(t.afterRefIdx??0))<<16),b=tt.cloneNode,v=tt.insertBefore,y=et.remove;class w{el;parentEl;data;children;refs;constructor(t){this.data=t}beforeRemove(){}remove(){y.call(this.el)}firstNode(){return this.el}moveBeforeDOMNode(t,e=this.parentEl){this.parentEl=e,v.call(e,this.el,t)}moveBeforeVNode(t,e){v.call(this.parentEl,this.el,t?t.el:e)}toString(){const t=document.createElement("div");return this.mount(t,null),t.innerHTML}mount(e,n){const o=b.call(t,!0);v.call(e,o,n),this.el=o,this.parentEl=e}patch(t,e){}}c&&(w.prototype.mount=function(e,o){const s=b.call(t,!0),i=new Array(n);this.refs=i,i[0]=s;for(let t=0;t<p;t++){const e=m[t];i[32767&e]=f[e>>30&1].call(i[e>>15&32767])}if(l){const t=this.data;for(let e=0;e<l;e++)u[e].call(i[h[e]],t[e])}if(v.call(e,s,o),a){const t=this.children;for(let e=0;e<a;e++){const n=t[e];if(n){const t=g[e],o=t>>16&32767,s=o?i[o]:null;n.isOnlyChild=!!(32768&t),n.mount(i[32767&t],s)}}}if(this.el=s,this.parentEl=e,r.length){const t=this.data,e=this.refs;for(let n of r){(0,t[n])(e[h[n]],null)}}},w.prototype.patch=function(t,e){if(this===t)return;const n=this.refs;if(l){const e=this.data,o=t.data;for(let t=0;t<l;t++){const s=e[t],i=o[t];s!==i&&d[t].call(n[h[t]],i,s)}this.data=o}if(a){let o=this.children;const s=t.children;for(let t=0;t<a;t++){const i=o[t],r=s[t];if(i)r?i.patch(r,e):(e&&i.beforeRemove(),i.remove(),o[t]=void 0);else if(r){const e=g[t],s=e>>16&32767,i=s?n[s]:null;r.mount(n[32767&e],i),o[t]=r}}}},w.prototype.remove=function(){if(r.length){const t=this.data,e=this.refs;for(let n of r){(0,t[n])(null,e[h[n]])}}y.call(this.el)});return w}(t,e);if(e.children.length)return n=class extends n{children;constructor(t,e){super(t),this.children=e}},n.prototype.beforeRemove=V.prototype.beforeRemove,(t,e=[])=>new n(t,e);return t=>new n(t)}(n.el,o);return lt[t]=i,i}function ct(t){if(t.nodeType!==Node.TEXT_NODE||/\S/.test(t.textContent)){if(t.nodeType!==Node.ELEMENT_NODE||"pre"!==t.tagName)for(let e=t.childNodes.length-1;e>=0;--e)ct(t.childNodes.item(e))}else t.remove()}function ht(t,n=null,o=null){switch(t.nodeType){case Node.ELEMENT_NODE:{let e=o&&o.currentNS;const s=t.tagName;let i;const r=[];if(s.startsWith("block-text-")){const t=parseInt(s.slice(11),10);r.push({type:"text",idx:t}),i=document.createTextNode("")}if(s.startsWith("block-child-")){o.isRef||ut(o);const t=parseInt(s.slice(12),10);r.push({type:"child",idx:t}),i=document.createTextNode("")}if(e||=t.namespaceURI,i||(i=e?document.createElementNS(e,s):document.createElement(s)),i instanceof Element){if(!o){document.createElement("template").content.appendChild(i)}const e=t.attributes;for(let t=0;t<e.length;t++){const n=e[t].name,o=e[t].value;if(n.startsWith("block-handler-")){const t=parseInt(n.slice(14),10);r.push({type:"handler",idx:t,event:o})}else if(n.startsWith("block-attribute-")){const t=parseInt(n.slice(16),10);r.push({type:"attribute",idx:t,name:o,tag:s})}else if(n.startsWith("block-property-")){const t=parseInt(n.slice(15),10);r.push({type:"property",idx:t,name:o,tag:s})}else"block-attributes"===n?r.push({type:"attributes",idx:parseInt(o,10)}):"block-ref"===n?r.push({type:"ref",idx:parseInt(o,10)}):i.setAttribute(e[t].name,o)}}const l={parent:n,firstChild:null,nextSibling:null,el:i,info:r,refN:0,currentNS:e};if(t.firstChild){const e=t.childNodes[0];if(1===t.childNodes.length&&e.nodeType===Node.ELEMENT_NODE&&e.tagName.startsWith("block-child-")){const t=e.tagName,n=parseInt(t.slice(12),10);r.push({idx:n,type:"child",isOnlyChild:!0})}else{l.firstChild=ht(t.firstChild,l,l),i.appendChild(l.firstChild.el);let e=t.firstChild,n=l.firstChild;for(;e=e.nextSibling;)n.nextSibling=ht(e,n,l),i.appendChild(n.nextSibling.el),n=n.nextSibling}}return l.info.length&&ut(l),l}case Node.TEXT_NODE:case Node.COMMENT_NODE:return{parent:n,firstChild:null,nextSibling:null,el:t.nodeType===Node.TEXT_NODE?document.createTextNode(t.textContent):document.createComment(t.textContent),info:[],refN:0,currentNS:null}}throw new e("boom")}function ut(t){t.isRef=!0;do{t.refN++}while(t=t.parent)}function dt(t){let e=t.parent;for(;e&&e.nextSibling===t;)t=e,e=e.parent;return e}function ft(t,e,n){if(!e){e={collectors:[],locations:[],children:new Array(t.info.filter(t=>"child"===t.type).length),cbRefs:[],refN:t.refN},n=0}if(t.refN){const o=n,s=t.isRef,i=t.firstChild?t.firstChild.refN:0,r=t.nextSibling?t.nextSibling.refN:0;if(s){for(let e of t.info)e.refIdx=o;t.refIdx=o,function(t,e){for(let n of e.info)switch(n.type){case"text":t.locations.push({idx:n.idx,refIdx:n.refIdx,setData:pt,updateData:pt});break;case"child":n.isOnlyChild?t.children[n.idx]={parentRefIdx:n.refIdx,isOnlyChild:!0}:t.children[n.idx]={parentRefIdx:dt(e).refIdx,afterRefIdx:n.refIdx};break;case"property":{const e=n.refIdx,o=rt(n.name);t.locations.push({idx:n.idx,refIdx:e,setData:o,updateData:o});break}case"attribute":{const e=n.refIdx;let o,s;"class"===n.name?(s=x,o=N):(s=v(n.name),o=s),t.locations.push({idx:n.idx,refIdx:e,setData:s,updateData:o});break}case"attributes":t.locations.push({idx:n.idx,refIdx:n.refIdx,setData:y,updateData:w});break;case"handler":{const{setup:e,update:o}=D(n.event);t.locations.push({idx:n.idx,refIdx:n.refIdx,setData:e,updateData:o});break}case"ref":t.locations.push({idx:n.idx,refIdx:n.refIdx,setData:it,updateData:it}),t.cbRefs.push(n.idx)}}(e,t),n++}if(r){const s=n+i;e.collectors.push({idx:s,prevIdx:o,getVal:st}),ft(t.nextSibling,e,s)}i&&(e.collectors.push({idx:n,prevIdx:o,getVal:ot}),ft(t.firstChild,e,n))}return e}function pt(t){nt.call(this,J(t))}const mt=Node.prototype,gt=mt.insertBefore,bt=mt.appendChild,vt=mt.removeChild,yt=((t,e)=>Object.getOwnPropertyDescriptor(t,e))(mt,"textContent").set;class wt{children;anchor;parentEl;isOnlyChild;constructor(t){this.children=t}mount(t,e){const n=this.children,o=document.createTextNode("");this.anchor=o,gt.call(t,o,e);const s=n.length;if(s){const e=n[0].mount;for(let i=0;i<s;i++)e.call(n[i],t,o)}this.parentEl=t}moveBeforeDOMNode(t,e=this.parentEl){this.parentEl=e;const n=this.children;for(let o=0,s=n.length;o<s;o++)n[o].moveBeforeDOMNode(t,e);e.insertBefore(this.anchor,t)}moveBeforeVNode(t,e){if(t){const n=t.children[0];e=(n?n.firstNode():t.anchor)||null}const n=this.children;for(let t=0,o=n.length;t<o;t++)n[t].moveBeforeVNode(null,e);this.parentEl.insertBefore(this.anchor,e)}patch(t,e){if(this===t)return;const n=this.children,o=t.children;if(0===o.length&&0===n.length)return;this.children=o;const s=o[0]||n[0],{mount:i,patch:r,remove:l,beforeRemove:a,moveBeforeVNode:c,firstNode:h}=s,u=this.anchor,d=this.isOnlyChild,f=this.parentEl;if(0===o.length&&d){if(e)for(let t=0,e=n.length;t<e;t++)a.call(n[t]);return yt.call(f,""),void bt.call(f,u)}let p,m=0,g=0,b=n[0],v=o[0],y=n.length-1,w=o.length-1,$=n[y],x=o[w];for(;m<=y&&g<=w;){if(null===b){b=n[++m];continue}if(null===$){$=n[--y];continue}let t=b.key,s=v.key;if(t===s){r.call(b,v,e),o[g]=b,b=n[++m],v=o[++g];continue}let l=$.key,a=x.key;if(l===a){r.call($,x,e),o[w]=$,$=n[--y],x=o[--w];continue}if(t===a){r.call(b,x,e),o[w]=b;const t=o[w+1];c.call(b,t,u),b=n[++m],x=o[--w];continue}if(l===s){r.call($,v,e),o[g]=$;const t=n[m];c.call($,t,u),$=n[--y],v=o[++g];continue}p=p||xt(n,m,y);let d=p[s];if(void 0===d)i.call(v,f,h.call(b)||null);else{const t=n[d];c.call(t,b,null),r.call(t,v,e),o[g]=t,n[d]=null}v=o[++g]}if(m<=y||g<=w)if(m>y){const t=o[w+1],e=t?h.call(t)||null:u;for(let t=g;t<=w;t++)i.call(o[t],f,e)}else for(let t=m;t<=y;t++){let o=n[t];o&&(e&&a.call(o),l.call(o))}}beforeRemove(){const t=this.children,e=t.length;if(e){const n=t[0].beforeRemove;for(let o=0;o<e;o++)n.call(t[o])}}remove(){const{parentEl:t,anchor:e}=this;if(this.isOnlyChild)yt.call(t,"");else{const n=this.children,o=n.length;if(o){const t=n[0].remove;for(let e=0;e<o;e++)t.call(n[e])}vt.call(t,e)}}firstNode(){const t=this.children[0];return t?t.firstNode():void 0}toString(){return this.children.map(t=>t.toString()).join("")}}function $t(t){return new wt(t)}function xt(t,e,n){let o={};for(let s=e;s<=n;s++)o[t[s].key]=s;return o}const Nt=Node.prototype,kt=Nt.insertBefore,Et=Nt.removeChild;class Tt{html;parentEl;content=[];constructor(t){this.html=t}mount(t,e){this.parentEl=t;const n=document.createElement("template");n.innerHTML=this.html,this.content=[...n.content.childNodes];for(let n of this.content)kt.call(t,n,e);if(!this.content.length){const n=document.createTextNode("");this.content.push(n),kt.call(t,n,e)}}moveBeforeDOMNode(t,e=this.parentEl){this.parentEl=e;for(let n of this.content)kt.call(e,n,t)}moveBeforeVNode(t,e){const n=t?t.content[0]:e;this.moveBeforeDOMNode(n)}patch(t){if(this===t)return;const e=t.html;if(this.html!==e){const n=this.parentEl,o=this.content[0],s=document.createElement("template");s.innerHTML=e;const i=[...s.content.childNodes];for(let t of i)kt.call(n,t,o);if(!i.length){const t=document.createTextNode("");i.push(t),kt.call(n,t,o)}this.remove(),this.content=i,this.html=t.html}}beforeRemove(){}remove(){const t=this.parentEl;for(let e of this.content)Et.call(t,e)}firstNode(){return this.content[0]}toString(){return this.html}}function At(t){return new Tt(t)}function _t(t,e,n=null){t.mount(e,n)}let Ct=[];function Dt(t){const n=Ct.at(-1);if(!n)throw new e("No active context");if(t&&t!==n.type)throw new e(`Expected to be in a ${t} context`);return n}function St(t,n){return async function(...o){if(t.status>1)throw new e(`Function called after the end of life of the ${t.type}`);const s=await n.call(this,...o);return t.status>1?new Promise(()=>{}):s}}class Ot{static template="";__owl__;constructor(t){this.__owl__=t}setup(){}}const Rt=new WeakMap,Bt=new WeakMap;function Lt(t,n){try{t.destroy()}catch(t){}return Object.assign(new e("[Owl] Unhandled error. Destroying the root component"),{cause:n})}function It(t,e){if(!t)return!1;const n=t.fiber;n&&Rt.set(n,e);const o=Bt.get(t);if(o){let n=!1;const s=()=>Lt(t.app,e);for(let t=o.length-1;t>=0;t--)try{o[t](e,s),n=!0;break}catch(t){e=t}if(n)return!0}return It(t.parent,e)}function Pt(t){let{error:e}=t;const n="node"in t?t.node:t.fiber.node,o="fiber"in t?t.fiber:n.fiber;if(o){let t=o;do{t.node.fiber=t,Rt.set(t,e),t=t.parent}while(t);Rt.set(o.root,e)}if(!It(n,e))throw Lt(n.app,e)}function Mt(t,e,n){const o=e.bind(t.component);if(t.app.dev){const t=e.name?` <${e.name}>`:"";Reflect.defineProperty(o,"name",{value:n+t})}return o}function jt(t){const{node:e}=Dt("component");e.mounted.push(Mt(e,t,"onMounted"))}function Vt(t){const{node:e}=Dt("component");e.willUnmount.unshift(Mt(e,t,"onWillUnmount"))}function Wt(t){const e=Dt();"component"===e.type?e.node.willDestroy.unshift(Mt(e.node,t,"onWillDestroy")):e.manager.onDestroyCb.push(t)}var Ft;!function(t){t[t.EXECUTED=0]="EXECUTED",t[t.STALE=1]="STALE",t[t.PENDING=2]="PENDING"}(Ft||(Ft={}));const Kt=Symbol("Atom");let Ut,zt=[];function Ht(t,e,n=Ft.STALE){return{state:n,value:void 0,compute:t,sources:new Set,observers:new Set,isDerived:e}}function qt(t){Ut&&(Ut.sources.add(t),t.observers.add(Ut))}function Gt(t){for(const e of t.observers)e.state===Ft.EXECUTED&&(e.isDerived?te(e):zt.push(e)),e.state=Ft.STALE;Xt()}const Xt=k(function(){for(let t=0;t<zt.length;t++)Jt(zt[t]);zt.length=0});function Zt(){return Ut}function Yt(t){Ut=t}function Jt(t){const e=t.state;if(e===Ft.EXECUTED)return;if(e===Ft.PENDING){for(const e of t.sources)"compute"in e&&Jt(e);if(t.state!==Ft.STALE)return void(t.state=Ft.EXECUTED)}Qt(t);const n=Ut;Ut=t,t.value=t.compute(),t.state=Ft.EXECUTED,Ut=n}function Qt(t){const e=t.sources;for(const n of e){n.observers.delete(t)}e.clear()}function te(t){const e=[t];let n;for(;n=e.pop();)for(const t of n.observers)t.state||(t.state=Ft.PENDING,t.isDerived?e.push(t):zt.push(t))}function ee(t){const e=Ut;let n;Ut=void 0;try{n=t()}finally{Ut=e}return n}function ne(t){return function(e){e.value instanceof t||e.addIssue({message:`value is not an instance of '${t.name}'`})}}function oe(t){return function(e){e.value!==t&&e.addIssue({message:`value is not equal to ${"string"==typeof t?`'${t}'`:t}`})}}function se(t){return function(e){let n=0;const o=[];for(const s of t){const t=e.withIssues(o);if(t.validate(s),o.length===n||t.issueDepth>0)return void e.mergeIssues(o.slice(n));n=o.length}e.addIssue({message:"value does not match union type",subIssues:o})}}const ie={and:function(t){return function(e){for(const n of t)e.validate(n)}},any:function(){},array:function(t){return function(e){if(Array.isArray(e.value)){if(t)for(let n=0;n<e.value.length;n++)e.withKey(n).validate(t)}else e.addIssue({message:"value is not an array"})}},boolean:function(t){"boolean"!=typeof t.value&&t.addIssue({message:"value is not a boolean"})},constructor:function(t){return function(e){"function"==typeof e.value&&(e.value===t||e.value.prototype instanceof t)||e.addIssue({message:`value is not '${t.name}' or an extension`})}},customValidator:function(t,e,n="value does not match custom validation"){return function(o){o.validate(t),o.isValid&&(e(o.value)||o.addIssue({message:n}))}},function:function(t=[],e=void 0){return function(t){"function"!=typeof t.value&&t.addIssue({message:"value is not a function"})}},instanceOf:ne,literal:oe,number:function(t){"number"!=typeof t.value&&t.addIssue({message:"value is not a number"})},object:function(t={}){return function(e){"object"!=typeof e.value||Array.isArray(e.value)||null===e.value?e.addIssue({message:"value is not an object"}):t&&(Array.isArray(t)?function(t,e){const n=e.filter(e=>!e.endsWith("?")&&!(e in t.value));n.length&&t.addIssue({message:"object value have missing keys",missingKeys:n})}(e,t):function(t,e){const n=[];for(const o in e){const s=o.endsWith("?")?o.slice(0,-1):o;void 0!==t.value[s]?t.withKey(s).validate(e[o]):o.endsWith("?")||n.push(s)}n.length&&t.addIssue({message:"object value have missing keys",missingKeys:n})}(e,t))}},or:se,promise:function(t){return function(t){t.value instanceof Promise||t.addIssue({message:"value is not a promise"})}},record:function(t){return function(e){if("object"!=typeof e.value||Array.isArray(e.value)||null===e.value)e.addIssue({message:"value is not an object"});else if(t)for(const n in e.value)e.withKey(n).validate(t)}},ref:function(t){return se([oe(null),ne(t)])},selection:function(t){return se(t.map(oe))},signal:function(t){return function(t){"function"==typeof t.value&&t.value[Kt]||t.addIssue({message:"value is not a reactive value"})}},string:function(t){"string"!=typeof t.value&&t.addIssue({message:"value is not a string"})},tuple:function(t){return function(e){if(Array.isArray(e.value))if(e.value.length===t.length)for(let n=0;n<t.length;n++)e.withKey(n).validate(t[n]);else e.addIssue({message:"tuple value does not have the correct length"});else e.addIssue({message:"value is not an array"})}}};function re(t,n,o="Value does not match the type"){const s=ae(t,n);if(s.length){const t=JSON.stringify(s,(t,e)=>"function"==typeof e?e.name:e,2);throw new e(`${o}\n${t}`)}}function le(t,e,n,o){return{issueDepth:0,path:n,value:e,get isValid(){return!t.length},addIssue(e){t.push({received:this.value,path:this.path,...e})},mergeIssues(e){t.push(...e)},validate(t){t(this),!this.isValid&&o&&(o.issueDepth=this.issueDepth+1)},withIssues(t){return le(t,this.value,this.path,this)},withKey(e){return le(t,this.value[e],this.path.concat(e),this)}}}function ae(t,e){const n=[];return e(le(n,t,[])),n}function ce(t,e){const{node:n,app:o,componentName:s}=Dt("component");function i(t){return void 0===n.props[t]&&e?e[t]:n.props[t]}const r=Object.create(null);function l(t){for(const e of t)Reflect.defineProperty(r,e,{enumerable:!0,get:i.bind(null,e)})}if(t){if(l((Array.isArray(t)?t:Object.keys(t)).map(t=>t.endsWith("?")?t.slice(0,-1):t)),o.dev){const o=e?function(t,e){const n=(Array.isArray(t)?t:Object.keys(t)).filter(t=>!t.endsWith("?")&&t in e);return e=>{n.length&&e.addIssue({message:"props have default values on mandatory keys",keys:n}),e.validate(ie.object(t))}}(t,e):ie.object(t);re(n.props,o,`Invalid component props (${s})`),n.willUpdateProps.push(t=>{re(t,o,`Invalid component props (${s})`)})}}else l(Object.keys(n.props)),n.willUpdateProps.push(t=>{for(let t in r)Reflect.deleteProperty(r,t);l(Object.keys(t))});return r}const he=Z("").constructor;class ue extends he{content;selector;target=null;constructor(t,e){super(""),this.selector=t,this.content=e}mount(t,e){super.mount(t,e),this.target=document.querySelector(this.selector),this.target?this.content.mount(this.target,null):this.content.mount(t,e)}beforeRemove(){this.content.beforeRemove()}remove(){this.content&&(super.remove(),this.content.remove(),this.content=null)}patch(t){super.patch(t),this.content?this.content.patch(t.content,!0):(this.content=t.content,this.content.mount(this.target,null))}}function de(){throw new e("Attempted to render cancelled fiber")}function fe(t){let e=0;for(let n of t){let t=n.node;n.render=de,0===t.status&&t.cancel(),t.fiber=null,n.bdom?t.forceNextRender=!0:e++,e+=fe(n.children)}return e}class pe{node;bdom=null;root;parent;children=[];appliedToDom=!1;deep=!1;childrenMap={};constructor(t,e){if(this.node=t,this.parent=e,e){this.deep=e.deep;const t=e.root;t.setCounter(t.counter+1),this.root=t,e.children.push(this)}else this.root=this}render(){let t=this.root.node,e=t.app.scheduler,n=t.parent;for(;n;){if(n.fiber){let o=n.fiber.root;if(0!==o.counter||!(t.parentKey in n.fiber.childrenMap))return void e.delayedRenders.push(this);n=o.node}t=n,n=n.parent}this._render()}_render(){const t=this.node,e=this.root;if(e){const n=Zt();Yt(t.signalComputation);try{this.bdom=!0,this.bdom=t.renderFn()}catch(e){t.app.handleError({node:t,error:e})}Yt(n),e.setCounter(e.counter-1)}}}class me extends pe{counter=1;willPatch=[];patched=[];mounted=[];locked=!1;complete(){const t=this.node;let e;this.locked=!0;let n=this.mounted;try{for(e of this.willPatch){let t=e.node;if(t.fiber===e){const e=t.component;for(let n of t.willPatch)n.call(e)}}for(e=void 0,t._patch(),this.locked=!1;e=n.pop();)if(e.appliedToDom)for(let t of e.node.mounted)t();let o=this.patched;for(;e=o.pop();)if(e.appliedToDom)for(let t of e.node.patched)t()}catch(o){for(let t of n)t.node.willUnmount=[];this.locked=!1,t.app.handleError({fiber:e||this,error:o})}}setCounter(t){this.counter=t,0===t&&this.node.app.scheduler.flush()}}class ge extends me{target;position;constructor(t,e,n={}){super(t,null),this.target=e,this.position=n.position||"last-child"}complete(){let t=this;try{const e=this.node;if(e.children=this.childrenMap,e.app.constructor.validateTarget(this.target),e.bdom)e.updateDom();else if(e.bdom=this.bdom,"last-child"===this.position||0===this.target.childNodes.length)_t(e.bdom,this.target);else{const t=this.target.childNodes[0];_t(e.bdom,this.target,t)}e.fiber=null,e.status=1,this.appliedToDom=!0;let n=this.mounted;for(;t=n.pop();)if(t.appliedToDom)for(let e of t.node.mounted)e()}catch(e){this.node.app.handleError({fiber:t,error:e})}}}class be{el;app;fiber=null;component;bdom=null;status=0;forceNextRender=!1;parentKey;props;renderFn;parent;children=Object.create(null);willStart=[];willUpdateProps=[];willUnmount=[];mounted=[];willPatch=[];patched=[];willDestroy=[];signalComputation;pluginManager;constructor(t,e,n,o,s){this.app=n,this.parent=o,this.parentKey=s,this.pluginManager=o?o.pluginManager:n.pluginManager,this.signalComputation=Ht(()=>this.render(!1),!1,Ft.EXECUTED),this.props=Object.assign({},e),Ct.push({type:"component",app:n,componentName:t.name,node:this,get status(){return this.node.status}});const i=Zt();Yt(void 0),this.component=new t(this);const r={this:this.component,__owl__:this};this.renderFn=n.getTemplate(t.template).bind(this.component,r,this),this.component.setup(),Yt(i),Ct.length=0}mountComponent(t,e){const n=new ge(this,t,e);this.app.scheduler.addFiber(n);let o=Zt();this.initiateRender(n),Yt(o)}async initiateRender(t){this.fiber=t,this.mounted.length&&t.root.mounted.push(t);const e=this.component;let n=Zt();Yt(void 0);try{let t=this.willStart.map(t=>t.call(e));Yt(n),await Promise.all(t)}catch(t){return void this.app.handleError({node:this,error:t})}0===this.status&&this.fiber===t&&t.render()}async render(t){if(this.status>=2)return;let e=this.fiber;if(e&&(e.root.locked||!0===e.bdom)&&(await Promise.resolve(),e=this.fiber),e){if(!e.bdom&&!Rt.has(e))return void(t&&(e.deep=t));t=t||e.deep}else if(!this.bdom)return;const n=function(t){let e=t.fiber;if(e){let t=e.root;return t.locked=!0,t.setCounter(t.counter+1-fe(e.children)),t.locked=!1,e.children=[],e.childrenMap={},e.bdom=null,Rt.has(e)&&(Rt.delete(e),Rt.delete(t),e.appliedToDom=!1,e instanceof me&&(e.mounted=e instanceof ge?[e]:[])),e}const n=new me(t,null);return t.willPatch.length&&n.willPatch.push(n),t.patched.length&&n.patched.push(n),n}(this);n.deep=t,this.fiber=n,this.app.scheduler.addFiber(n),await Promise.resolve(),this.status>=2||this.fiber!==n||!e&&n.parent||n.render()}cancel(){this._cancel(),delete this.parent.children[this.parentKey],this.app.scheduler.scheduleDestroy(this)}_cancel(){this.status=2;const t=this.children;for(let e in t)t[e]._cancel()}destroy(){let t=1===this.status;this._destroy(),t&&this.bdom.remove()}_destroy(){const t=this.component;if(1===this.status)for(let e of this.willUnmount)e.call(t);for(let t in this.children)this.children[t]._destroy();if(this.willDestroy.length)try{for(let e of this.willDestroy)e.call(t)}catch(t){this.app.handleError({error:t,node:this})}this.status=3}async updateAndRender(t,e){t=Object.assign({},t);const n=function(t,e){let n=t.fiber;return n&&(fe(n.children),n.root=null),new pe(t,e)}(this,e);this.fiber=n;const o=this.component;let s=Zt();Yt(void 0);let i=this.willUpdateProps.map(e=>e.call(o,t));if(Yt(s),await Promise.all(i),n!==this.fiber)return;this.props=t,n.render();const r=e.root;this.willPatch.length&&r.willPatch.push(n),this.patched.length&&r.patched.push(n)}updateDom(){if(this.fiber)if(this.bdom===this.fiber.bdom)for(let t in this.children){this.children[t].updateDom()}else this.bdom.patch(this.fiber.bdom,!1),this.fiber.appliedToDom=!0,this.fiber=null}firstNode(){const t=this.bdom;return t?t.firstNode():void 0}mount(t,e){const n=this.fiber.bdom;this.bdom=n,n.mount(t,e),this.status=1,this.fiber.appliedToDom=!0,this.children=this.fiber.childrenMap,this.fiber=null}moveBeforeDOMNode(t,e){this.bdom.moveBeforeDOMNode(t,e)}moveBeforeVNode(t,e){this.bdom.moveBeforeVNode(t?t.bdom:null,e)}patch(){this.fiber&&this.fiber.parent&&this._patch()}_patch(){let t=!1;for(let e in this.children){t=!0;break}const e=this.fiber;this.children=e.childrenMap,this.bdom.patch(e.bdom,t),e.appliedToDom=!0,this.fiber=null}beforeRemove(){this._destroy()}remove(){this.bdom.remove()}}const ve=Symbol("Key changes"),ye=Object.prototype.toString,we=Object.prototype.hasOwnProperty;function $e(t){if("object"!=typeof t||null===t)return!1;const e=Ee(t);return!!(Array.isArray(e)||e instanceof Set||e instanceof Map||e instanceof WeakMap)||"[object Object]"===ye.call(e)}function xe(t,e){return!e&&$e(t)?Oe(t):t}const Ne=new WeakSet;function ke(t){return Ne.add(t),t}function Ee(t){return Ce.has(t)?Ce.get(t):t}const Te=new WeakMap;function Ae(t,e,n){qt(n??function(t,e){let n=Te.get(t);n||(n=new Map,Te.set(t,n));let o=n.get(e);return o||(o={value:void 0,observers:new Set},n.set(e,o)),o}(t,e))}function _e(t,e,n){if(!n){const o=Te.get(t);if(!o)return;if(!o.has(e))return;n=o.get(e)}Gt(n)}const Ce=new WeakMap,De=new WeakMap;function Se(t,n){if(!$e(t))throw new e("Cannot make the given value reactive");if(Ne.has(t))return t;if(Ce.has(t))return t;const o=De.get(t);if(o)return o;let s;s=t instanceof Map?Ve(t,"Map",n):t instanceof Set?Ve(t,"Set",n):t instanceof WeakMap?Ve(t,"WeakMap",n):Re(n);const i=new Proxy(t,s);return De.set(t,i),Ce.set(i,t),i}function Oe(t){return Se(t,null)}function Re(t){return{get(e,n,o){Ae(e,n,t);const s=Reflect.get(e,n,o);if(t||"object"!=typeof s||null===s)return s;if(!$e(s))return s;const i=Object.getOwnPropertyDescriptor(e,n);return!i||i.writable||i.configurable?Se(s,null):s},set(e,n,o,s){const i=we.call(e,n),r=Reflect.get(e,n,s),l=Reflect.set(e,n,Ee(o),s);return!i&&we.call(e,n)&&_e(e,ve,t),(r!==Reflect.get(e,n,s)||"length"===n&&Array.isArray(e))&&_e(e,n,t),l},deleteProperty(e,n){const o=Reflect.deleteProperty(e,n);return _e(e,ve,t),_e(e,n,t),o},ownKeys:e=>(Ae(e,ve,t),Reflect.ownKeys(e)),has:(e,n)=>(Ae(e,ve,t),Reflect.has(e,n))}}function Be(t,e,n){return o=>(o=Ee(o),Ae(e,o,n),xe(e[t](o),n))}function Le(t,e,n){return function*(){Ae(e,ve,n);const o=e.keys();for(const s of e[t]()){const t=o.next().value;Ae(e,t,n),yield xe(s,n)}}}function Ie(t,e){return function(n,o){Ae(t,ve,e),t.forEach(function(s,i,r){Ae(t,i,e),n.call(o,xe(s,e),xe(i,e),xe(r,e))},o)}}function Pe(t,e,n,o){return(s,i)=>{s=Ee(s);const r=n.has(s),l=n[e](s),a=n[t](s,i);return r!==n.has(s)&&_e(n,ve,o),l!==n[e](s)&&_e(n,s,o),a}}function Me(t,e){return()=>{const n=[...t.keys()];t.clear(),_e(t,ve,e);for(const o of n)_e(t,o,e)}}const je={Set:(t,e)=>({has:Be("has",t,e),add:Pe("add","has",t,e),delete:Pe("delete","has",t,e),keys:Le("keys",t,e),values:Le("values",t,e),entries:Le("entries",t,e),[Symbol.iterator]:Le(Symbol.iterator,t,e),forEach:Ie(t,e),clear:Me(t,e),get size(){return Ae(t,ve,e),t.size}}),Map:(t,e)=>({has:Be("has",t,e),get:Be("get",t,e),set:Pe("set","get",t,e),delete:Pe("delete","has",t,e),keys:Le("keys",t,e),values:Le("values",t,e),entries:Le("entries",t,e),[Symbol.iterator]:Le(Symbol.iterator,t,e),forEach:Ie(t,e),clear:Me(t,e),get size(){return Ae(t,ve,e),t.size}}),WeakMap:(t,e)=>({has:Be("has",t,e),get:Be("get",t,e),set:Pe("set","get",t,e),delete:Pe("delete","has",t,e)})};function Ve(t,e,n){const o=je[e](t,n);return Object.assign(Re(n),{get:(t,e)=>we.call(o,e)?o[e]:(Ae(t,e,n),xe(t[e],n))})}const We=Object.create;class Fe{fn;ctx;component;node;key;constructor(t,e,n,o,s){this.fn=t,this.ctx=e,this.component=n,this.node=o,this.key=s}evaluate(){return this.fn.call(this.component,this.ctx,this.node,this.key)}toString(){return this.evaluate().toString()}}const Ke={withDefault:function(t,e){return null==t||!1===t?e:t},zero:Symbol("zero"),callSlot:function(t,e,n,o,s,i,r){n=n+"__slot_"+o;const a=t.__owl__.props.slots||{},{__render:c,__ctx:h,__scope:u}=a[o]||{},d=We(h||{});u&&(d[u]=i);const f=c?c(d,e,n):null;if(r){let i,a;return f?i=s?l(o,f):f:a=r(t,e,n),W([i,a])}return f||Z("")},withKey:function(t,e){return t.key=e,t},prepareList:function(t){let n,o;if(Array.isArray(t))n=t,o=t;else if(t instanceof Map)n=[...t.keys()],o=[...t.values()];else if(Symbol.iterator in Object(t))n=[...t],o=n;else{if(!t||"object"!=typeof t)throw new e(`Invalid loop expression: "${t}" is not iterable`);o=Object.values(t),n=Object.keys(t)}const s=o.length;return[n,o,s,new Array(s)]},shallowEqual:function(t,e){for(let n=0,o=t.length;n<o;n++)if(t[n]!==e[n])return!1;return!0},toNumber:function(t){const e=parseFloat(t);return isNaN(e)?t:e},LazyValue:Fe,safeOutput:function(t,e){if(null==t)return e?l("default",e):l("undefined",Z(""));let n,o;return t instanceof A?(n="string_safe",o=At(t)):t instanceof Fe?(n="lazy_value",o=t.evaluate()):(n="string_unsafe",o=Z(t)),l(n,o)},createCatcher:function(t){const e=Object.keys(t).length;class n{child;handlerData;handlerFns=[];parentEl;afterNode=null;constructor(t,e){this.child=t,this.handlerData=e}mount(e,n){this.parentEl=e,this.child.mount(e,n),this.afterNode=document.createTextNode(""),e.insertBefore(this.afterNode,n),this.wrapHandlerData();for(let n in t){const o=t[n],s=D(n);this.handlerFns[o]=s,s.setup.call(e,this.handlerData[o])}}wrapHandlerData(){for(let t=0;t<e;t++){let e=this.handlerData[t],n=e.length-2,o=e[n];const s=this;e[n]=function(t,e){const n=e.target;let i=s.child.firstNode();const r=s.afterNode;for(;i&&i!==r;){if(i.contains(n))return o(t,e);i=i.nextSibling}}}}moveBeforeDOMNode(t,e=this.parentEl){this.parentEl=e,this.child.moveBeforeDOMNode(t,e),e.insertBefore(this.afterNode,t)}moveBeforeVNode(t,e){t&&(e=t.firstNode()||e),this.child.moveBeforeVNode(t?t.child:null,e),this.parentEl.insertBefore(this.afterNode,e)}patch(t,n){if(this!==t){this.handlerData=t.handlerData,this.wrapHandlerData();for(let t=0;t<e;t++)this.handlerFns[t].update.call(this.parentEl,this.handlerData[t]);this.child.patch(t.child,n)}}beforeRemove(){this.child.beforeRemove()}remove(){for(let t=0;t<e;t++)this.handlerFns[t].remove.call(this.parentEl);this.child.remove(),this.afterNode.remove()}firstNode(){return this.child.firstNode()}toString(){return this.child.toString()}}return function(t,e){return new n(t,e)}},markRaw:ke,OwlError:e,createRef:function(t){if(!t)throw new e("Ref is undefined or null");let n,o;if(t.add&&t.delete)n=t.add.bind(t),o=t.delete.bind(t);else{if(!t.set)throw new e("Ref should implement either a 'set' function or 'add' and 'delete' functions");n=t.set.bind(t),o=()=>t.set(null)}return(t,e)=>{e&&o(e),t&&n(t)}},modelExpr:function(t){if("function"!=typeof t||"function"!=typeof t.set)throw new e("Invalid t-model expression: expression should evaluate to a function with a 'set' method defined on it");return t},createComponent:function(t,n,o,s,i,r){const l=!o;let a;const c=0===r.length;a=s?(t,e)=>!0:i?function(t,e){for(let n in t)if(t[n]!==e[n])return!0;return Object.keys(t).length!==Object.keys(e).length}:c?(t,e)=>!1:function(t,e){for(let n of r)if(t[n]!==e[n])return!0;return!1};const h=be.prototype.updateAndRender,u=be.prototype.initiateRender;return(s,i,r,c,d)=>{let f=r.children,p=f[i];l&&p&&p.component.constructor!==d&&(p=void 0);const m=r.fiber;if(p)(a(p.props,s)||m.deep||p.forceNextRender)&&(p.forceNextRender=!1,h.call(p,s,m));else{if(o){const t=c.constructor.components;if(!t)throw new e(`Cannot find the definition of component "${n}", missing static components key in parent`);if(!(d=t[n]))throw new e(`Cannot find the definition of component "${n}"`);if(!(d.prototype instanceof Ot))throw new e(`"${n}" is not a Component. It must inherit from the Component class`)}p=new be(d,s,t,r,i),f[i]=p,u.call(p,new pe(p,m))}return m.childrenMap[i]=p,p}},Portal:class extends Ot{static template="__portal__";props=ce({target:ie.string});setup(){const t=this.__owl__;jt(()=>{const n=t.bdom;if(!n.target){const o=document.querySelector(t.props.target);if(!o)throw new e("invalid portal target");n.content.moveBeforeDOMNode(o.firstChild,o)}}),Vt(()=>{t.bdom.remove()})}},callTemplate:function(t,e,n,o,s,i){return l(t,n.getTemplate(t).call(e,o,s,i+t))}},Ue={text:Z,createBlock:at,list:$t,multi:W,html:At,toggler:l,comment:Y};class ze{static registerTemplate(t,e){He[t]=e}dev;rawTemplates=Object.create(He);templates={};getRawTemplate;translateFn;translatableAttributes;customDirectives;runtimeUtils;hasGlobalValues;constructor(t={}){if(this.dev=t.dev||!1,this.translateFn=t.translateFn,this.translatableAttributes=t.translatableAttributes,t.templates)if(t.templates instanceof Document||"string"==typeof t.templates)this.addTemplates(t.templates);else for(const e in t.templates)this.addTemplate(e,t.templates[e]);this.getRawTemplate=t.getTemplate,this.customDirectives=t.customDirectives||{},this.runtimeUtils={...Ke,__globals__:t.globalValues||{}},this.hasGlobalValues=Boolean(t.globalValues&&Object.keys(t.globalValues).length)}addTemplate(t,n){if(t in this.rawTemplates){if(!this.dev)return;const o=this.rawTemplates[t];if(("string"==typeof o?o:o instanceof Element?o.outerHTML:o.toString())===("string"==typeof n?n:n.outerHTML))return;throw new e(`Template ${t} already defined with different content`)}this.rawTemplates[t]=n}addTemplates(t){if(t){t=t instanceof Document?t:n(t);for(const e of t.querySelectorAll("[t-name]")){const t=e.getAttribute("t-name");this.addTemplate(t,e)}}}getTemplate(t){const n=t;if(!(n in this.templates)){const o=this.getRawTemplate?.(t)||this.rawTemplates[t];if(void 0===o){let n="";try{const{componentName:t}=Dt("component");n=` (for component "${t}")`}catch{}throw new e(`Missing template: "${t}"${n}`)}const s="function"==typeof o&&!(o instanceof Element)?o:this._compileTemplate(t,o),i=this.templates;this.templates[n]=function(t,e){return i[n].call(this,t,e)};const r=s(this,Ue,this.runtimeUtils);this.templates[n]=r}return this.templates[n]}_compileTemplate(t,n){throw new e("Unable to compile a template. Please use owl full build instead")}}const He={};function qe(...t){const e="__template__"+qe.nextId++,n=String.raw(...t);return He[e]=n,e}qe.nextId=1,ze.registerTemplate("__portal__",function(t,e,n){let{callSlot:o}=n;return function(t,e,n=""){return new ue(t.this.props.target,o(t,e,n,"default",!1,null))}});const Ge="true,false,NaN,null,undefined,debugger,console,window,in,instanceof,new,function,return,eval,void,Math,RegExp,Array,Object,Date,__globals__".split(","),Xe=Object.assign(Object.create(null),{and:"&&",or:"||",gt:">",gte:">=",lt:"<",lte:"<="}),Ze=Object.assign(Object.create(null),{"{":"LEFT_BRACE","}":"RIGHT_BRACE","[":"LEFT_BRACKET","]":"RIGHT_BRACKET",":":"COLON",",":"COMMA","(":"LEFT_PAREN",")":"RIGHT_PAREN"}),Ye="...,.,===,==,+,!==,!=,!,||,&&,>=,>,<=,<,?,-,*,/,%,typeof ,=>,=,;,in ,new ,|,&,^,~".split(",");const Je=[function(t){let n=t[0],o=n;if("'"!==n&&'"'!==n&&"`"!==n)return!1;let s,i=1;for(;t[i]&&t[i]!==o;){if(s=t[i],n+=s,"\\"===s){if(i++,s=t[i],!s)throw new e("Invalid expression");n+=s}i++}if(t[i]!==o)throw new e("Invalid expression");return n+=o,"`"===o?{type:"TEMPLATE_STRING",value:n,replace:t=>n.replace(/\$\{(.*?)\}/g,(e,n)=>"${"+t(n)+"}")}:{type:"VALUE",value:n}},function(t){let e=t[0];if(e&&e.match(/[0-9]/)){let n=1;for(;t[n]&&t[n].match(/[0-9]|\./);)e+=t[n],n++;return{type:"VALUE",value:e}}return!1},function(t){for(let e of Ye)if(t.startsWith(e))return{type:"OPERATOR",value:e};return!1},function(t){let e=t[0];if(e&&e.match(/[a-zA-Z_\$]/)){let n=1;for(;t[n]&&t[n].match(/[\w\$]/);)e+=t[n],n++;return e in Xe?{type:"OPERATOR",value:Xe[e],size:e.length}:{type:"SYMBOL",value:e}}return!1},function(t){const e=t[0];return!(!e||!(e in Ze))&&{type:Ze[e],value:e}}];const Qe=t=>t&&("LEFT_BRACE"===t.type||"COMMA"===t.type),tn=t=>t&&("RIGHT_BRACE"===t.type||"COMMA"===t.type);function en(t){const n=new Set,o=function(t){const n=[];let o,s=!0,i=t;try{for(;s;)if(i=i.trim(),i){for(let t of Je)if(s=t(i),s){n.push(s),i=i.slice(s.size||s.value.length);break}}else s=!1}catch(t){o=t}if(i.length||o)throw new e(`Tokenizer error: could not tokenize \`${t}\``);return n}(t);let s=0,i=[];for(;s<o.length;){let t=o[s],e=o[s-1],r=o[s+1],l=i[i.length-1];switch(t.type){case"LEFT_BRACE":case"LEFT_BRACKET":case"LEFT_PAREN":i.push(t.type);break;case"RIGHT_BRACE":case"RIGHT_BRACKET":case"RIGHT_PAREN":i.pop()}let a="SYMBOL"===t.type&&!Ge.includes(t.value);if(a&&e&&("LEFT_BRACE"===l&&Qe(e)&&tn(r)&&(o.splice(s+1,0,{type:"COLON",value:":"},{...t}),r=o[s+1]),"OPERATOR"===e.type&&"."===e.value?a=!1:"LEFT_BRACE"!==e.type&&"COMMA"!==e.type||r&&"COLON"===r.type&&(a=!1)),"TEMPLATE_STRING"===t.type&&(t.value=t.replace(t=>on(t))),r&&"OPERATOR"===r.type&&"=>"===r.value)if("RIGHT_PAREN"===t.type){let t=s-1;for(;t>0&&"LEFT_PAREN"!==o[t].type;)"SYMBOL"===o[t].type&&o[t].originalValue&&(o[t].value=o[t].originalValue,n.add(o[t].value)),t--}else n.add(t.value);a&&(t.varName=t.value,n.has(t.value)||(t.originalValue=t.value,t.value=`ctx['${t.value}']`)),s++}for(const t of o)"SYMBOL"===t.type&&t.varName&&n.has(t.value)&&(t.originalValue=t.value,t.value=`_${t.value}`,t.isLocal=!0);return o}const nn=new Map([["in "," in "]]);function on(t){return en(t).map(t=>nn.get(t.value)||t.value).join("")}const sn=/\{\{.*?\}\}|\#\{.*?\}/g;function rn(t){return function(t,e){let n=t.match(sn);if(n&&n[0].length===t.length)return`(${e(t.slice(2,"{"===n[0][0]?-2:-1))})`;let o=t.replace(sn,t=>"${"+e(t.slice(2,"{"===t[0]?-2:-1))+"}");return"`"+o+"`"}(t,on)}const ln=Symbol("zero"),an=/\s+/g,cn=document.implementation.createDocument(null,null,null),hn=new Set(["stop","capture","prevent","self","synthetic"]);let un={};function dn(t=""){return un[t]=(un[t]||0)+1,t+un[t]}function fn(t,e){switch(t){case"input":return"checked"===e||"indeterminate"===e||"value"===e||"readonly"===e||"readOnly"===e||"disabled"===e;case"option":return"selected"===e||"disabled"===e;case"textarea":return"value"===e||"readonly"===e||"readOnly"===e||"disabled"===e;case"select":return"value"===e||"disabled"===e;case"button":case"optgroup":return"disabled"===e}return!1}function pn(t){return`\`${t.replace(/\\/g,"\\\\").replace(/`/g,"\\`").replace(/\$\{/,"\\${")}\``}class mn{static nextBlockId=1;varName;blockName;dynamicTagName=null;isRoot=!1;hasDynamicChildren=!1;children=[];data=[];dom;currentDom;childNumber=0;target;type;parentVar="";id;constructor(t,e){this.id=mn.nextBlockId++,this.varName="b"+this.id,this.blockName="block"+this.id,this.target=t,this.type=e}insertData(t,e="d"){const n=dn(e);return this.target.addLine(`let ${n} = ${t};`),this.data.push(n)-1}insert(t){this.currentDom?this.currentDom.appendChild(t):this.dom=t}generateExpr(t){if("block"===this.type){const t=this.children.length;let e=this.data.length?`[${this.data.join(", ")}]`:t?"[]":"";return t&&(e+=", ["+this.children.map(t=>t.varName).join(", ")+"]"),this.dynamicTagName?`toggler(${this.dynamicTagName}, ${this.blockName}(${this.dynamicTagName})(${e}))`:`${this.blockName}(${e})`}return"list"===this.type?`list(c_block${this.id})`:t}asXmlString(){const t=cn.createElement("t");return t.appendChild(this.dom),t.innerHTML}}function gn(t,e){return Object.assign({block:null,index:0,forceNewBlock:!0,translate:t.translate,translationCtx:t.translationCtx,tKeyExpr:null,nameSpace:t.nameSpace,tModelSelectedExpr:t.tModelSelectedExpr},e)}class bn{name;indentLevel=0;loopLevel=0;loopCtxVars=[];tSetVars=new Map;code=[];hasRoot=!1;needsScopeProtection=!1;on;constructor(t,e){this.name=t,this.on=e||null}addLine(t,e){const n=new Array(this.indentLevel+2).join(" ");void 0===e?this.code.push(n+t):this.code.splice(e,0,n+t)}generateCode(){let t=[];t.push(`function ${this.name}(ctx, node, key = "") {`),this.needsScopeProtection&&t.push(" ctx = Object.create(ctx);");for(let e of this.code)t.push(e);return this.hasRoot||t.push("return text('');"),t.push("}"),t.join("\n ")}currentKey(t){let e=this.loopLevel?`key${this.loopLevel}`:"key";return t.tKeyExpr&&(e=`${t.tKeyExpr} + ${e}`),e}}const vn=["alt","aria-label","aria-placeholder","aria-roledescription","aria-valuetext","label","placeholder","title"],yn=/^(\s*)([\s\S]+?)(\s*)$/;class wn{blocks=[];nextBlockId=1;isDebug=!1;targets=[];target=new bn("template");templateName;dev;translateFn;translatableAttributes=vn;ast;staticDefs=[];slotNames=new Set;helpers=new Set;constructor(t,e){if(this.translateFn=e.translateFn||(t=>t),e.translatableAttributes){const t=new Set(vn);for(let n of e.translatableAttributes)n.startsWith("-")?t.delete(n.slice(1)):t.add(n);this.translatableAttributes=[...t]}this.dev=e.dev||!1,this.ast=t,this.templateName=e.name,e.hasGlobalValues&&this.helpers.add("__globals__")}generateCode(){const t=this.ast;this.isDebug=11===t.type,mn.nextBlockId=1,un={},this.compileAST(t,{block:null,index:0,forceNewBlock:!1,translate:!0,translationCtx:"",tKeyExpr:null});let e=[" let { text, createBlock, list, multi, html, toggler, comment } = bdom;"];this.helpers.size&&e.push(`let { ${[...this.helpers].join(", ")} } = helpers;`),this.templateName&&e.push(`// Template name: "${this.templateName}"`);for(let{id:t,expr:n}of this.staticDefs)e.push(`const ${t} = ${n};`);if(this.blocks.length){e.push("");for(let t of this.blocks)if(t.dom){let n=pn(t.asXmlString());t.dynamicTagName?(n=n.replace(/^`<\w+/,`\`<\${tag || '${t.dom.nodeName}'}`),n=n.replace(/\w+>`$/,`\${tag || '${t.dom.nodeName}'}>\``),e.push(`let ${t.blockName} = tag => createBlock(${n});`)):e.push(`let ${t.blockName} = createBlock(${n});`)}}if(this.targets.length)for(let t of this.targets)e.push(""),e=e.concat(t.generateCode());e.push(""),e=e.concat("return "+this.target.generateCode());const n=e.join("\n ");if(this.isDebug){const t=`[Owl Debug]\n${n}`;console.log(t)}return n}compileInNewTarget(t,e,n,o){const s=dn(t),i=this.target,r=new bn(s,o);return this.targets.push(r),this.target=r,this.compileAST(e,gn(n)),this.target=i,s}addLine(t,e){this.target.addLine(t,e)}define(t,e){this.addLine(`const ${t} = ${e};`)}insertAnchor(t,e=t.children.length){const n=`block-child-${e}`,o=cn.createElement(n);t.insert(o)}createBlock(t,e,n){const o=this.target.hasRoot,s=new mn(this.target,e);return o||(this.target.hasRoot=!0,s.isRoot=!0),t&&(t.children.push(s),"list"===t.type&&(s.parentVar=`c_block${t.id}`)),s}insertBlock(t,e,n){let o=e.generateExpr(t);if(e.parentVar){let t=this.target.currentKey(n);return this.helpers.add("withKey"),void this.addLine(`${e.parentVar}[${n.index}] = withKey(${o}, ${t});`)}n.tKeyExpr&&(o=`toggler(${n.tKeyExpr}, ${o})`),e.isRoot?(this.target.on&&(o=this.wrapWithEventCatcher(o,this.target.on)),this.addLine(`return ${o};`)):this.define(e.varName,o)}translate(t,e){const n=yn.exec(t);return n[1]+this.translateFn(n[2],e)+n[3]}compileAST(t,e){switch(t.type){case 1:return this.compileComment(t,e);case 0:return this.compileText(t,e);case 2:return this.compileTDomNode(t,e);case 7:return this.compileTOut(t,e);case 4:return this.compileTIf(t,e);case 8:return this.compileTForeach(t,e);case 9:return this.compileTKey(t,e);case 3:return this.compileMulti(t,e);case 6:return this.compileTCall(t,e);case 14:return this.compileTCallBlock(t,e);case 5:return this.compileTSet(t,e);case 10:return this.compileComponent(t,e);case 11:return this.compileDebug(t,e);case 12:return this.compileLog(t,e);case 13:return this.compileTCallSlot(t,e);case 15:return this.compileTTranslation(t,e);case 16:return this.compileTTranslationContext(t,e);case 17:return this.compileTPortal(t,e)}}compileDebug(t,e){return this.addLine("debugger;"),t.content?this.compileAST(t.content,e):null}compileLog(t,e){return this.addLine(`console.log(${on(t.expr)});`),t.content?this.compileAST(t.content,e):null}compileComment(t,e){let{block:n,forceNewBlock:o}=e;if(!n||o)n=this.createBlock(n,"comment",e),this.insertBlock(`comment(${pn(t.value)})`,n,{...e,forceNewBlock:o&&!n});else{const e=cn.createComment(t.value);n.insert(e)}return n.varName}compileText(t,e){let{block:n,forceNewBlock:o}=e,s=t.value;if(s&&!1!==e.translate&&(s=this.translate(s,e.translationCtx)),e.inPreTag||(s=s.replace(an," ")),!n||o)n=this.createBlock(n,"text",e),this.insertBlock(`text(${pn(s)})`,n,{...e,forceNewBlock:o&&!n});else{const e=0===t.type?cn.createTextNode:cn.createComment;n.insert(e.call(cn,s))}return n.varName}generateHandlerCode(t,n){const o=t.split(".").slice(1).map(t=>{if(!hn.has(t))throw new e(`Unknown event modifier: '${t}'`);return`"${t}"`});let s="";o.length&&(s=`${o.join(",")}, `);const i=on(n);if(!i.trim())return`[${s}, ctx]`;let r;const l=i.match(/^(\([^)]*\))\s*=>/),a=!l&&i.match(/^([a-zA-Z_$][a-zA-Z0-9_$]*)\s*=>/);if(l){const t=l[1].slice(1,-1).trim(),e=i.slice(l[0].length);r=t?`(ctx,${t})=>${e}`:`(ctx)=>${e}`}else if(a){const t=i.slice(a[0].length);r=`(ctx,${a[1]})=>${t}`}else r=`(ctx, ev) => (${i}).call(ctx['this'], ev)`;const c=dn("hdlr_fn");return this.staticDefs.push({id:c,expr:r}),`[${s}${c}, ctx]`}compileTDomNode(t,e){let{block:n,forceNewBlock:o}=e;const s=!n||o||null!==t.dynamicTag||t.ns;let i=this.target.code.length;if(s&&((t.dynamicTag||e.tKeyExpr||t.ns)&&e.block&&this.insertAnchor(e.block),n=this.createBlock(n,"block",e),this.blocks.push(n),t.dynamicTag)){const e=dn("tag");this.define(e,on(t.dynamicTag)),n.dynamicTagName=e}const r={};for(let o in t.attrs){let s,i;if(o.startsWith("t-attf")){s=rn(t.attrs[o]);const e=n.insertData(s,"attr");i=o.slice(7),r["block-attribute-"+e]=i}else if(o.startsWith("t-att"))if(i="t-att"===o?null:o.slice(6),s=on(t.attrs[o]),i&&fn(t.tag,i)){"readonly"===i&&(i="readOnly"),s="value"===i?`new String((${s}) === 0 ? 0 : ((${s}) || ""))`:`new Boolean(${s})`;r[`block-property-${n.insertData(s,"prop")}`]=i}else{const t=n.insertData(s,"attr");"t-att"===o?r["block-attributes"]=String(t):r[`block-attribute-${t}`]=i}else if(this.translatableAttributes.includes(o)){const n=t.attrsTranslationCtx?.[o]||e.translationCtx;r[o]=this.translateFn(t.attrs[o],n)}else s=`"${t.attrs[o]}"`,i=o,r[o]=t.attrs[o];if("value"===i&&e.tModelSelectedExpr){r[`block-attribute-${n.insertData(`${e.tModelSelectedExpr} === ${s}`,"attr")}`]="selected"}}let l;if(t.model){const{hasDynamicChildren:e,expr:o,eventType:s,shouldNumberize:i,shouldTrim:a,targetAttr:c,specialInitTargetAttr:h}=t.model,u=on(o),d=dn("expr");let f;if(this.helpers.add("modelExpr"),this.define(d,`modelExpr(${u})`),h){let e=c in r&&`'${r[c]}'`;if(!e&&t.attrs){const n=t.attrs[`t-att-${c}`];n&&(e=on(n))}f=n.insertData(`${d}() === ${e}`,"prop"),r[`block-property-${f}`]=h}else if(e){l=`${dn("bValue")}`,this.define(l,`${d}()`)}else f=n.insertData(`${d}()`,"prop"),r[`block-property-${f}`]=c;this.helpers.add("toNumber");let p=`ev.target.${c}`;p=a?`${p}.trim()`:p,p=i?`toNumber(${p})`:p;const m=`[(ctx, ev) => { ${d}.set(${p}); }, ctx]`;f=n.insertData(m,"hdlr"),r[`block-handler-${f}`]=s}for(let e in t.on){const o=this.generateHandlerCode(e,t.on[e]);r[`block-handler-${n.insertData(o,"hdlr")}`]=e}if(t.ref){const e=on(t.ref);this.helpers.add("createRef");const o=`createRef(${e})`,s=n.insertData(o,"ref");r["block-ref"]=String(s)}const a=t.ns||e.nameSpace,c=a?cn.createElementNS(a,t.tag):cn.createElement(t.tag);for(const[t,e]of Object.entries(r))"class"===t&&""===e||c.setAttribute(t,e);if(n.insert(c),t.content.length){const o=n.currentDom;n.currentDom=c;const s=t.content;for(let o=0;o<s.length;o++){const s=t.content[o],i=gn(e,{block:n,index:n.childNumber,forceNewBlock:!1,tKeyExpr:e.tKeyExpr,nameSpace:a,tModelSelectedExpr:l,inPreTag:e.inPreTag||"pre"===t.tag});this.compileAST(s,i)}n.currentDom=o}if(s&&(this.insertBlock(`${n.blockName}(ddd)`,n,e),n.children.length&&n.hasDynamicChildren)){const t=this.target.code,e=n.children.slice();let o=e.shift();for(let n=i;n<t.length&&(!t[n].trimStart().startsWith(`const ${o.varName} `)||(t[n]=t[n].replace(`const ${o.varName}`,o.varName),o=e.shift(),o));n++);this.addLine(`let ${n.children.map(t=>t.varName).join(", ")};`,i)}return n.varName}compileZero(){this.helpers.add("zero");const t=this.slotNames.has(ln);this.slotNames.add(ln);let e=this.target.loopLevel?`key${this.target.loopLevel}`:"key";return t&&(e=this.generateComponentKey(e)),`ctx[zero]?.(node, ${e}) || text("")`}compileTOut(t,e){let n,{block:o}=e;if(o&&this.insertAnchor(o),o=this.createBlock(o,"html",e),"0"===t.expr)n=this.compileZero();else if(t.body){let o=null;o=mn.nextBlockId;const s=gn(e);this.compileAST({type:3,content:t.body},s),this.helpers.add("safeOutput"),n=`safeOutput(${on(t.expr)}, b${o})`}else this.helpers.add("safeOutput"),n=`safeOutput(${on(t.expr)})`;return this.insertBlock(n,o,e),o.varName}compileTIfBranch(t,e,n){this.target.indentLevel++;let o=e.children.length;this.compileAST(t,gn(n,{block:e,index:n.index})),e.children.length>o&&this.insertAnchor(e,o),this.target.indentLevel--}compileTIf(t,e,n){let{block:o,forceNewBlock:s}=e;const i=this.target.code.length,r=!o||"multi"!==o.type&&s;if(o&&(o.hasDynamicChildren=!0),(!o||"multi"!==o.type&&s)&&(o=this.createBlock(o,"multi",e)),this.addLine(`if (${on(t.condition)}) {`),this.compileTIfBranch(t.content,o,e),t.tElif)for(let n of t.tElif)this.addLine(`} else if (${on(n.condition)}) {`),this.compileTIfBranch(n.content,o,e);if(t.tElse&&(this.addLine("} else {"),this.compileTIfBranch(t.tElse,o,e)),this.addLine("}"),r){if(o.children.length){const t=this.target.code,e=o.children.slice();let n=e.shift();for(let o=i;o<t.length&&(!t[o].trimStart().startsWith(`const ${n.varName} `)||(t[o]=t[o].replace(`const ${n.varName}`,n.varName),n=e.shift(),n));o++);this.addLine(`let ${o.children.map(t=>t.varName).join(", ")};`,i)}const t=o.children.map(t=>t.varName).join(", ");this.insertBlock(`multi([${t}])`,o,e)}return o.varName}compileTForeach(t,e){let{block:n}=e;n&&this.insertAnchor(n),n=this.createBlock(n,"list",e),this.target.loopLevel++;const o=`i${this.target.loopLevel}`,s=dn("ctx");this.addLine(`const ${s} = ctx;`),this.target.loopCtxVars.push(s);const i=`v_block${n.id}`,r=`k_block${n.id}`,l=`l_block${n.id}`,a=`c_block${n.id}`;this.helpers.add("prepareList"),this.define(`[${r}, ${i}, ${l}, ${a}]`,`prepareList(${on(t.collection)});`),this.dev&&this.define(`keys${n.id}`,"new Set()"),this.addLine(`for (let ${o} = 0; ${o} < ${l}; ${o}++) {`),this.target.indentLevel++,this.addLine(`let ctx = Object.create(${s});`),this.addLine(`ctx[\`${t.elem}\`] = ${r}[${o}];`),1&t.noFlags||this.addLine(`ctx[\`${t.elem}_first\`] = ${o} === 0;`),2&t.noFlags||this.addLine(`ctx[\`${t.elem}_last\`] = ${o} === ${r}.length - 1;`),4&t.noFlags||this.addLine(`ctx[\`${t.elem}_index\`] = ${o};`),8&t.noFlags||this.addLine(`ctx[\`${t.elem}_value\`] = ${i}[${o}];`),this.define(`key${this.target.loopLevel}`,t.key?on(t.key):o),this.dev&&(this.helpers.add("OwlError"),this.addLine(`if (keys${n.id}.has(String(key${this.target.loopLevel}))) { throw new OwlError(\`Got duplicate key in t-foreach: \${key${this.target.loopLevel}}\`)}`),this.addLine(`keys${n.id}.add(String(key${this.target.loopLevel}));`));const c=gn(e,{block:n,index:o});return this.compileAST(t.body,c),this.target.indentLevel--,this.target.loopLevel--,this.target.loopCtxVars.pop(),this.addLine("}"),this.insertBlock("l",n,e),n.varName}compileTKey(t,e){const n=dn("tKey_");return this.define(n,on(t.expr)),e=gn(e,{tKeyExpr:n,block:e.block,index:e.index}),this.compileAST(t.content,e)}compileMulti(t,e){let{block:n,forceNewBlock:o}=e;const s=!n||o;let i=this.target.code.length;if(s){let o=null;if(t.content.filter(t=>!t.hasNoRepresentation).length<=1){for(let n of t.content){const t=this.compileAST(n,e);o=o||t}return o}n=this.createBlock(n,"multi",e)}let r=0;for(let o=0,s=t.content.length;o<s;o++){const s=t.content[o],i=!s.hasNoRepresentation,l=gn(e,{block:n,index:r,forceNewBlock:i});this.compileAST(s,l),i&&r++}if(s){if(n.hasDynamicChildren&&n.children.length){const t=this.target.code,e=n.children.slice();let o=e.shift();for(let n=i;n<t.length&&(!t[n].trimStart().startsWith(`const ${o.varName} `)||(t[n]=t[n].replace(`const ${o.varName}`,o.varName),o=e.shift(),o));n++);this.addLine(`let ${n.children.map(t=>t.varName).join(", ")};`,i)}const t=n.children.map(t=>t.varName).join(", ");this.insertBlock(`multi([${t}])`,n,e)}return n.varName}compileTCall(t,e){let{block:n,forceNewBlock:o}=e;const s=t.attrs?this.formatPropObject(t.attrs,t.attrsTranslationCtx,e.translationCtx):[],i=sn.test(t.name)?rn(t.name):"`"+t.name+"`";if(n&&!o&&this.insertAnchor(n),n=this.createBlock(n,"multi",e),t.body){const n=this.compileInNewTarget("callBody",t.body,e),o=dn("lazyBlock");this.define(o,`${n}.bind(this, ctx)`),this.helpers.add("zero"),s.push(`[zero]: ${o}`)}let r;const l=`{${s.join(", ")}}`;if(t.context){const e=dn("ctx");if(this.addLine(`const ${e} = ${on(t.context)};`),t.attrs)r=`Object.assign({}, ${e}${s.length?", "+l:""})`;else{r=`Object.assign({}, ${e}, ${`{this: ${e}, __owl__: this.__owl__}`}${s.length?", "+l:""})`}}else r=0===s.length?"ctx":`Object.assign(Object.create(ctx), ${l})`;const a=this.generateComponentKey();return this.helpers.add("callTemplate"),this.insertBlock(`callTemplate(${i}, this, app, ${r}, node, ${a})`,n,{...e,forceNewBlock:!n}),n.varName}compileTCallBlock(t,e){let{block:n,forceNewBlock:o}=e;return n&&(o||this.insertAnchor(n)),n=this.createBlock(n,"multi",e),this.insertBlock(on(t.name),n,{...e,forceNewBlock:!n}),n.varName}compileTSet(t,e){const n=t.value?on(t.value||""):"null",o=0===this.target.loopLevel,s=this.target.tSetVars.get(t.name),i=void 0!==s&&this.target.loopLevel>s;if(t.body){this.helpers.add("LazyValue");const r={type:3,content:t.body};let l=`new LazyValue(${this.compileInNewTarget("value",r,e)}, ctx, this, node, ${this.target.currentKey(e)})`;if(l=t.value?l?`withDefault(${n}, ${l})`:n:l,this.helpers.add("withDefault"),i){const e=this.target.loopCtxVars[s];this.addLine(`${e}[\`${t.name}\`] = ${l};`)}else o?(this.target.needsScopeProtection=!0,this.addLine(`ctx[\`${t.name}\`] = ${l};`),this.target.tSetVars.set(t.name,0)):(this.addLine(`ctx[\`${t.name}\`] = ${l};`),this.target.tSetVars.set(t.name,this.target.loopLevel))}else{let r;if(t.defaultValue){const o=pn(e.translate?this.translate(t.defaultValue,e.translationCtx):t.defaultValue);t.value?(this.helpers.add("withDefault"),r=`withDefault(${n}, ${o})`):r=o}else r=n;if(i){const e=this.target.loopCtxVars[s];this.addLine(`${e}["${t.name}"] = ${r};`)}else o?(this.target.needsScopeProtection=!0,this.addLine(`ctx["${t.name}"] = ${r};`),this.target.tSetVars.set(t.name,0)):(this.addLine(`ctx["${t.name}"] = ${r};`),this.target.tSetVars.set(t.name,this.target.loopLevel))}return null}generateComponentKey(t="key"){const e=[dn("__")];for(let t=0;t<this.target.loopLevel;t++)e.push(`\${key${t+1}}`);return`${t} + \`${e.join("__")}\``}formatProp(t,n,o,s){if(t.endsWith(".translate")){const e=o?.[t]||s;n=pn(this.translateFn(n,e))}else n=on(n);if(t.includes(".")){let[o,s]=t.split(".");switch(t=o,s){case"bind":n=`(${n}).bind(this)`;break;case"alike":case"translate":break;default:throw new e(`Invalid prop suffix: ${s}`)}}return`${t=/^[a-z_]+$/i.test(t)?t:`'${t}'`}: ${n||void 0}`}formatPropObject(t,e,n){return Object.entries(t).map(([t,o])=>this.formatProp(t,o,e,n))}getPropString(t,e){let n=`{${t.join(",")}}`;return e&&(n=`Object.assign({}, ${on(e)}${t.length?", "+n:""})`),n}compileComponent(t,e){let{block:n}=e;const o="slots"in(t.props||{}),s=t.props?this.formatPropObject(t.props,t.propsTranslationCtx,e.translationCtx):[];let i="";if(t.slots){let n=[];for(let o in t.slots){const s=t.slots[o],i=[];if(s.content){const t=this.compileInNewTarget("slot",s.content,e,s.on);i.push(`__render: ${t}.bind(this), __ctx: ctx`)}const r=t.slots[o].scope;r&&i.push(`__scope: "${r}"`),t.slots[o].attrs&&i.push(...this.formatPropObject(t.slots[o].attrs,t.slots[o].attrsTranslationCtx,e.translationCtx));const l=`{${i.join(", ")}}`;n.push(`'${o}': ${l}`)}i=`{${n.join(", ")}}`}!i||t.dynamicProps||o||(this.helpers.add("markRaw"),s.push(`slots: markRaw(${i})`));let r,l,a=this.getPropString(s,t.dynamicProps);(i&&(t.dynamicProps||o)||this.dev)&&(r=dn("props"),this.define(r,a),a=r),i&&(t.dynamicProps||o)&&(this.helpers.add("markRaw"),this.addLine(`${r}.slots = markRaw(Object.assign(${i}, ${r}.slots))`)),t.isDynamic?(l=dn("Comp"),this.define(l,on(t.name))):l=`\`${t.name}\``,n&&(!1===e.forceNewBlock||e.tKeyExpr)&&this.insertAnchor(n);let c=this.generateComponentKey();e.tKeyExpr&&(c=`${e.tKeyExpr} + ${c}`);let h=dn("comp");const u=[];for(let e in t.props||{}){let[t,n]=e.split(".");n||u.push(`"${t}"`)}this.helpers.add("createComponent"),this.staticDefs.push({id:h,expr:`createComponent(app, ${t.isDynamic?null:l}, ${!t.isDynamic}, ${!!t.slots}, ${!!t.dynamicProps}, [${u}])`}),t.isDynamic&&(c=`(${l}).name + ${c}`);let d=`${h}(${a}, ${c}, node, this, ${t.isDynamic?l:null})`;return t.isDynamic&&(d=`toggler(${l}, ${d})`),t.on&&(d=this.wrapWithEventCatcher(d,t.on)),n=this.createBlock(n,"multi",e),this.insertBlock(d,n,e),n.varName}wrapWithEventCatcher(t,e){this.helpers.add("createCatcher");let n=dn("catcher"),o={},s=[];for(let t in e){let n=dn("hdlr"),i=s.push(n)-1;o[t]=i;const r=this.generateHandlerCode(t,e[t]);this.define(n,r)}return this.staticDefs.push({id:n,expr:`createCatcher(${JSON.stringify(o)})`}),`${n}(${t}, [${s.join(",")}])`}compileTCallSlot(t,e){this.helpers.add("callSlot");let n,o,{block:s}=e,i=!1,r=!1;t.name.match(sn)?(i=!0,r=!0,o=rn(t.name)):(o="'"+t.name+"'",r=r||this.slotNames.has(t.name),this.slotNames.add(t.name));const l={...t.attrs},a=l["t-props"];delete l["t-props"];let c=this.target.loopLevel?`key${this.target.loopLevel}`:"key";r&&(c=this.generateComponentKey(c));const h=t.attrs?this.formatPropObject(l,t.attrsTranslationCtx,e.translationCtx):[],u=this.getPropString(h,a);if(t.defaultContent){n=`callSlot(ctx, node, ${c}, ${o}, ${i}, ${u}, ${this.compileInNewTarget("defaultContent",t.defaultContent,e)}.bind(this))`}else if(i){let t=dn("slot");this.define(t,o),n=`toggler(${t}, callSlot(ctx, node, ${c}, ${t}, ${i}, ${u}))`}else n=`callSlot(ctx, node, ${c}, ${o}, ${i}, ${u})`;return t.on&&(n=this.wrapWithEventCatcher(n,t.on)),s&&this.insertAnchor(s),s=this.createBlock(s,"multi",e),this.insertBlock(n,s,{...e,forceNewBlock:!1}),s.varName}compileTTranslation(t,e){return t.content?this.compileAST(t.content,Object.assign({},e,{translate:!1})):null}compileTTranslationContext(t,e){return t.content?this.compileAST(t.content,Object.assign({},e,{translationCtx:t.translationCtx})):null}compileTPortal(t,e){this.helpers.add("Portal");let{block:n}=e;const o=this.compileInNewTarget("slot",t.content,e);let s=dn("comp");this.helpers.add("createComponent"),this.staticDefs.push({id:s,expr:"createComponent(app, null, false, true, false, false)"});const i=`${s}({target: ${on(t.target)},slots: {'default': {__render: ${o}.bind(this), __ctx: ctx}}}, ${this.generateComponentKey()}, node, ctx, Portal)`;return n&&this.insertAnchor(n),n=this.createBlock(n,"multi",e),this.insertBlock(i,n,{...e,forceNewBlock:!1}),n.varName}}const $n=new WeakMap;function xn(t,n){var o;return function(t){let n=t.querySelectorAll("[t-elif], [t-else]");for(let t=0,o=n.length;t<o;t++){let o=n[t],s=o.previousElementSibling,i=t=>s.getAttribute(t),r=t=>+!!o.getAttribute(t);if(!s||!i("t-if")&&!i("t-elif"))throw new e("t-elif and t-else directives must be preceded by a t-if or t-elif directive");{if(i("t-foreach"))throw new e("t-if cannot stay at the same level as t-foreach when using t-elif or t-else");if(["t-if","t-elif","t-else"].map(r).reduce(function(t,e){return t+e})>1)throw new e("Only one conditional branching directive is allowed per node");let t;for(;(t=o.previousSibling)!==s;){if(t.nodeValue.trim().length&&8!==t.nodeType)throw new e("text is not allowed between branching directives");t.remove()}}}}(o=t),function(t){const n=[...t.querySelectorAll("[t-out]")].filter(t=>t.tagName[0]===t.tagName[0].toUpperCase()||t.hasAttribute("t-component"));for(const t of n){if(t.childNodes.length)throw new e("Cannot have t-out on a component that already has content");const n=t.getAttribute("t-out");t.removeAttribute("t-out");const o=t.ownerDocument.createElement("t");null!=n&&o.setAttribute("t-out",n),t.appendChild(o)}}(o),Nn(t,n)||{type:0,value:""}}function Nn(t,n){return t instanceof Element?function(t,n){if(!n.customDirectives)return null;const o=t.getAttributeNames();for(let s of o){if("t-custom"===s||"t-custom-"===s)throw new e("Missing custom directive name with t-custom directive");if(s.startsWith("t-custom-")){const o=s.split(".")[0].slice(9),i=n.customDirectives[o];if(!i)throw new e(`Custom directive "${o}" is not defined`);const r=t.getAttribute(s),l=s.split(".").slice(1);t.removeAttribute(s);try{i(t,r,l)}catch(t){throw new e(`Custom directive "${o}" throw the following error: ${t}`)}return Nn(t,n)}}return null}(t,n)||function(t,e){if(t.hasAttribute("t-debug")){t.removeAttribute("t-debug");const n=Nn(t,e),o={type:11,content:n};return n?.hasNoRepresentation&&(o.hasNoRepresentation=!0),o}if(t.hasAttribute("t-log")){const n=t.getAttribute("t-log");t.removeAttribute("t-log");const o=Nn(t,e),s={type:12,expr:n,content:o};return o?.hasNoRepresentation&&(s.hasNoRepresentation=!0),s}return null}(t,n)||function(t,n){if(!t.hasAttribute("t-foreach"))return null;const o=t.outerHTML,s=t.getAttribute("t-foreach");t.removeAttribute("t-foreach");const i=t.getAttribute("t-as")||"";t.removeAttribute("t-as");const r=t.getAttribute("t-key");if(!r)throw new e(`"Directive t-foreach should always be used with a t-key!" (expression: t-foreach="${s}" t-as="${i}")`);t.removeAttribute("t-key");const l=Nn(t,n);if(!l)return null;const a=!o.includes("t-call");let c=0;a&&!o.includes(`${i}_first`)&&(c|=1);a&&!o.includes(`${i}_last`)&&(c|=2);a&&!o.includes(`${i}_index`)&&(c|=4);a&&!o.includes(`${i}_value`)&&(c|=8);return{type:8,collection:s,elem:i,body:l,key:r,noFlags:c}}(t,n)||function(t,e){if(!t.hasAttribute("t-if"))return null;const n=t.getAttribute("t-if");t.removeAttribute("t-if");const o=Nn(t,e)||{type:0,value:""};let s=t.nextElementSibling;const i=[];for(;s&&s.hasAttribute("t-elif");){const t=s.getAttribute("t-elif");s.removeAttribute("t-elif");const n=Nn(s,e),o=s.nextElementSibling;s.remove(),s=o,n&&i.push({condition:t,content:n})}let r=null;s&&s.hasAttribute("t-else")&&(s.removeAttribute("t-else"),r=Nn(s,e),s.remove());return{type:4,condition:n,content:o,tElif:i.length?i:null,tElse:r}}(t,n)||function(t,e){if(!t.hasAttribute("t-portal"))return null;const n=t.getAttribute("t-portal");t.removeAttribute("t-portal");const o=Nn(t,e);if(!o)return{type:0,value:""};return{type:17,target:n,content:o}}(t,n)||function(t,e){if("off"!==t.getAttribute("t-translation"))return null;t.removeAttribute("t-translation");const n=Nn(t,e);if(3===n?.type){return Dn(n.content.map(An))}return An(n)}(t,n)||function(t,e){const n=t.getAttribute("t-translation-context");if(!n)return null;t.removeAttribute("t-translation-context");const o=Nn(t,e);if(3===o?.type){return Dn(o.content.map(t=>_n(t,n)))}return _n(o,n)}(t,n)||function(t,n){if(!t.hasAttribute("t-call"))return null;if("t"!==t.tagName)throw new e(`Directive 't-call' can only be used on <t> nodes (used on a <${t.tagName}>)`);const o=t.getAttribute("t-call"),s=t.getAttribute("t-call-context");t.removeAttribute("t-call"),t.removeAttribute("t-call-context");let i=null,r=null;for(let e of t.getAttributeNames()){const n=t.getAttribute(e);if(e.startsWith("t-translation-context-")){r=r||{},r[e.slice(22)]=n}else i=i||{},i[e]=n}const l=Sn(t,n);return{type:6,name:o,attrs:i,attrsTranslationCtx:r,body:l,context:s}}(t,n)||function(t){if(!t.hasAttribute("t-call-block"))return null;const e=t.getAttribute("t-call-block");return{type:14,name:e}}(t)||function(t,e){if(!t.hasAttribute("t-key"))return null;const n=t.getAttribute("t-key");t.removeAttribute("t-key");const o=Nn(t,e);if(!o)return null;const s={type:9,expr:n,content:o};o.hasNoRepresentation&&(s.hasNoRepresentation=!0);return s}(t,n)||function(t,e){if(!t.hasAttribute("t-out")&&!t.hasAttribute("t-esc"))return null;t.hasAttribute("t-esc")&&console.warn('t-esc has been deprecated in favor of t-out. If the value to render is not wrapped by the "markup" function, it will be escaped');const n=t.getAttribute("t-out")||t.getAttribute("t-esc");t.removeAttribute("t-out"),t.removeAttribute("t-esc");const o={type:7,expr:n,body:null},s=t.getAttribute("t-ref");t.removeAttribute("t-ref");const i=Nn(t,e);if(!i)return o;if(2===i.type)return o.body=i.content.length?i.content:null,{...i,ref:s,content:[o]};return o}(t,n)||function(t,e){if(!t.hasAttribute("t-call-slot")&&!t.hasAttribute("t-slot"))return null;t.hasAttribute("t-slot")&&console.warn("t-slot has been renamed t-call-slot.");const n=t.getAttribute("t-call-slot")||t.getAttribute("t-slot");t.removeAttribute("t-call-slot"),t.removeAttribute("t-slot");let o=null,s=null,i=null;for(let e of t.getAttributeNames()){const n=t.getAttribute(e);if(e.startsWith("t-on-"))i=i||{},i[e.slice(5)]=n;else if(e.startsWith("t-translation-context-")){s=s||{},s[e.slice(22)]=n}else o=o||{},o[e]=n}return{type:13,name:n,attrs:o,attrsTranslationCtx:s,on:i,defaultContent:Sn(t,e)}}(t,n)||function(t,n){let o=t.tagName;const s=o[0];let i=t.hasAttribute("t-component");if(i&&"t"!==o)throw new e(`Directive 't-component' can only be used on <t> nodes (used on a <${o}>)`);if(s!==s.toUpperCase()&&!i)return null;i&&(o=t.getAttribute("t-component"),t.removeAttribute("t-component"));const r=t.getAttribute("t-props");t.removeAttribute("t-props");const l=t.getAttribute("t-slot-scope");t.removeAttribute("t-slot-scope");let a=null,c=null,h=null;for(let n of t.getAttributeNames()){const o=t.getAttribute(n);if(n.startsWith("t-translation-context-")){h=h||{},h[n.slice(22)]=o}else if(n.startsWith("t-")){if(!n.startsWith("t-on-")){const t=Tn.get(n.split("-").slice(0,2).join("-"));throw new e(t||`unsupported directive on Component: ${n}`)}a=a||{},a[n.slice(5)]=o}else c=c||{},c[n]=o}let u=null;if(t.hasChildNodes()){const o=t.cloneNode(!0),s=Array.from(o.querySelectorAll("[t-set-slot]"));for(let t of s){if("t"!==t.tagName)throw new e(`Directive 't-set-slot' can only be used on <t> nodes (used on a <${t.tagName}>)`);const s=t.getAttribute("t-set-slot");let i=t.parentElement,r=!1;for(;i&&i!==o;){if(i.hasAttribute("t-component")||i.tagName[0]===i.tagName[0].toUpperCase()){r=!0;break}i=i.parentElement}if(r||!i)continue;t.removeAttribute("t-set-slot"),t.remove();const l=Nn(t,n);let a=null,c=null,h=null,d=null;for(let e of t.getAttributeNames()){const n=t.getAttribute(e);if("t-slot-scope"!==e)if(e.startsWith("t-translation-context-")){h=h||{},h[e.slice(22)]=n}else e.startsWith("t-on-")?(a=a||{},a[e.slice(5)]=n):(c=c||{},c[e]=n);else d=n}u=u||{},u[s]={content:l,on:a,attrs:c,attrsTranslationCtx:h,scope:d}}const i=Sn(o,n);u=u||{},i&&!u.default&&(u.default={content:i,on:a,attrs:null,attrsTranslationCtx:null,scope:l})}return{type:10,name:o,isDynamic:i,dynamicProps:r,props:c,propsTranslationCtx:h,slots:u,on:a}}(t,n)||function(t,n){const{tagName:o}=t,s=t.getAttribute("t-tag");if(t.removeAttribute("t-tag"),"t"===o&&!s)return null;if(o.startsWith("block-"))throw new e(`Invalid tag name: '${o}'`);n=Object.assign({},n),"pre"===o&&(n.inPreTag=!0);let i=!n.nameSpace&&En.has(o)?"http://www.w3.org/2000/svg":null;const r=t.getAttribute("t-ref");t.removeAttribute("t-ref");const l=t.getAttributeNames();let a=null,c=null,h=null,u=null;for(let s of l){const r=t.getAttribute(s);if("t-on"===s||"t-on-"===s)throw new e("Missing event name with t-on directive");if(s.startsWith("t-on-"))h=h||{},h[s.slice(5)]=r;else if(s.startsWith("t-model")){if(!["input","select","textarea"].includes(o))throw new e("The t-model directive only works with <input>, <textarea> and <select>");const i=t.getAttribute("type"),l="input"===o,a="select"===o,c=l&&"checkbox"===i,h=l&&"radio"===i,d=s.includes(".trim"),f=d||s.includes(".lazy");u={expr:r,targetAttr:c?"checked":"value",specialInitTargetAttr:h?"checked":null,eventType:h?"click":a||f?"change":"input",hasDynamicChildren:!1,shouldTrim:d,shouldNumberize:s.includes(".number")},a&&((n=Object.assign({},n)).tModelInfo=u)}else{if(s.startsWith("block-"))throw new e(`Invalid attribute: '${s}'`);if("xmlns"===s)i=r;else if(s.startsWith("t-translation-context-")){c=c||{},c[s.slice(22)]=r}else if("t-name"!==s){if(s.startsWith("t-")&&!s.startsWith("t-att"))throw new e(`Unknown QWeb directive: '${s}'`);const t=n.tModelInfo;t&&["t-att-value","t-attf-value"].includes(s)&&(t.hasDynamicChildren=!0),a=a||{},a[s]=r}}}i&&(n.nameSpace=i);const d=Cn(t,n);return{type:2,tag:o,dynamicTag:s,attrs:a,attrsTranslationCtx:c,on:h,ref:r,content:d,model:u,ns:i}}(t,n)||function(t,e){if(!t.hasAttribute("t-set"))return null;const n=t.getAttribute("t-set"),o=t.getAttribute("t-value")||null,s=t.innerHTML===t.textContent&&t.textContent||null;let i=null;t.textContent!==t.innerHTML&&(i=Cn(t,e));return{type:5,name:n,value:o,defaultValue:s,body:i,hasNoRepresentation:!0}}(t,n)||function(t,e){if("t"!==t.tagName)return null;return Sn(t,e)}(t,n):function(t,e){if(t.nodeType===Node.TEXT_NODE){let n=t.textContent||"";return e.inPreTag||!kn.test(n)||n.trim()?{type:0,value:n}:null}if(t.nodeType===Node.COMMENT_NODE)return{type:1,value:t.textContent||""};return null}(t,n)}const kn=/[\r\n]/;const En=new Set(["svg","g","path"]);const Tn=new Map([["t-ref","t-ref is no longer supported on components. Consider exposing only the public part of the component's API through a callback prop."],["t-att","t-att makes no sense on component: props are already treated as expressions"],["t-attf","t-attf is not supported on components: use template strings for string interpolation in props"]]);function An(t){const e={type:15,content:t};return t?.hasNoRepresentation&&(e.hasNoRepresentation=!0),e}function _n(t,e){const n={type:16,content:t,translationCtx:e};return t?.hasNoRepresentation&&(n.hasNoRepresentation=!0),n}function Cn(t,e){const n=[];for(let o of t.childNodes){const t=Nn(o,e);t&&(3===t.type?n.push(...t.content):n.push(t))}return n}function Dn(t){const e={type:3,content:t};return t.every(t=>t.hasNoRepresentation)&&(e.hasNoRepresentation=!0),e}function Sn(t,e){const n=Cn(t,e);switch(n.length){case 0:return null;case 1:return n[0];default:return Dn(n)}}function On(t,o={hasGlobalValues:!1}){const s=function(t,e){const o={inPreTag:!1,customDirectives:e};if("string"==typeof t)return xn(n(`<t>${t}</t>`).firstChild,o);let s=$n.get(t);return s||(s=xn(t.cloneNode(!0),o),$n.set(t,s)),s}(t,o.customDirectives),i=new wn(s,o).generateCode();try{return new Function("app, bdom, helpers",i)}catch(t){const{name:n}=o,s=new e(`Failed to compile ${n?`template "${n}"`:"anonymous template"}: ${t.message}\n\ngenerated code:\nfunction(app, bdom, helpers) {\n${i}\n}`);throw s.cause=t,s}}function Rn(t){const e=Ht(()=>(Yt(void 0),Bn(e),Yt(e),t()),!1);return Zt()?.observers.add(e),Jt(e),function(){const t=Zt();Yt(void 0),Bn(e),Yt(t)}}function Bn(t){Qt(t),function(t){const e=t.value;e&&"function"==typeof e&&(e(),t.value=void 0)}(t);for(const e of t.observers)e.state=Ft.EXECUTED,Qt(e),Bn(e);t.observers.clear()}class Ln{static _shadowId;static get id(){return this._shadowId??this.name}static set id(t){this._shadowId=t}__owl__;constructor(t){this.__owl__=t}setup(){}}class In{app;config;onDestroyCb=[];plugins;status=0;constructor(t,e={}){if(this.app=t,this.config=e.config??{},e.parent){const t=e.parent;t.onDestroyCb.push(()=>this.destroy()),this.plugins=Object.create(t.plugins)}else this.plugins={}}destroy(){const t=this.onDestroyCb;for(;t.length;)t.pop()();this.status=3}getPluginById(t){return this.plugins[t]||null}getPlugin(t){return this.getPluginById(t.id)}startPlugin(t){if(!t.id)throw new e(`Plugin "${t.name}" has no id`);if(this.plugins.hasOwnProperty(t.id)){const n=this.getPluginById(t.id).constructor;if(n!==t)throw new e(`Trying to start a plugin with the same id as an other plugin (id: '${t.id}', existing plugin: '${n.name}', starting plugin: '${t.name}')`);return null}const n=new t(this);return this.plugins[t.id]=n,n.setup(),n}startPlugins(t){Ct.push({type:"plugin",app:this.app,manager:this,get status(){return this.manager.status}});try{for(const e of t)this.startPlugin(e)}finally{Ct.pop()}this.status=1}}function Pn(t,e){Array.isArray(e)?t.startPlugins(e):t.onDestroyCb.push(Rn(()=>{const n=e.items();ee(()=>t.startPlugins(n))}))}class Mn{static requestAnimationFrame=window.requestAnimationFrame.bind(window);tasks=new Set;requestAnimationFrame;frame=0;delayedRenders=[];cancelledNodes=new Set;processing=!1;constructor(){this.requestAnimationFrame=Mn.requestAnimationFrame}addFiber(t){this.tasks.add(t.root)}scheduleDestroy(t){this.cancelledNodes.add(t),0===this.frame&&(this.frame=this.requestAnimationFrame(()=>this.processTasks()))}flush(){if(this.delayedRenders.length){let t=this.delayedRenders;this.delayedRenders=[];for(let e of t)e.root&&3!==e.node.status&&e.node.fiber===e&&e.render()}0===this.frame&&(this.frame=this.requestAnimationFrame(()=>this.processTasks()))}processTasks(){if(!this.processing){this.processing=!0,this.frame=0;for(let t of this.cancelledNodes)t._destroy();this.cancelledNodes.clear();for(let t of this.tasks)this.processFiber(t);for(let t of this.tasks)3===t.node.status&&this.tasks.delete(t);this.processing=!1}}processFiber(t){if(t.root!==t)return void this.tasks.delete(t);const e=Rt.has(t);e&&0!==t.counter?this.tasks.delete(t):3!==t.node.status?0===t.counter&&(e||t.complete(),t.appliedToDom&&this.tasks.delete(t)):this.tasks.delete(t)}}let jn=!1;const Vn=new Set;window.__OWL_DEVTOOLS__||={apps:Vn,Fiber:pe,RootFiber:me,toRaw:Ee,proxy:Oe};class Wn extends ze{static validateTarget=E;static apps=Vn;static version="3.0.0-alpha";name;scheduler=new Mn;roots=new Set;pluginManager;constructor(t={}){super(t),this.name=t.name||"",Vn.add(this),this.pluginManager=new In(this,{config:t.config}),t.plugins&&Pn(this.pluginManager,t.plugins),t.test&&(this.dev=!0),!this.dev||t.test||jn||(console.info("Owl is running in 'dev' mode."),jn=!0)}createRoot(t,e={}){const n=e.props||{};let o,s;const i=new Promise((t,e)=>{o=t,s=e}),r=function(){const t=Ct.slice();return()=>{Ct=t}}();let l,a=null;try{l=new be(t,n,this,null,null)}catch(t){a=t,s(t)}finally{r()}const c={node:l,promise:i,mount:(t,e)=>(a||(Wn.validateTarget(t),this.mountNode(l,t,o,s,e)),i),destroy:()=>{this.roots.delete(c),l.destroy(),this.scheduler.processTasks()}};return this.roots.add(c),c}mountNode(t,e,n,o,s){let i=Bt.get(t);i||(i=[],Bt.set(t,i)),i.unshift((t,e)=>{const n=e();o(n)}),t.mounted.push(()=>{n(t.component),i.shift()}),t.mountComponent(e,s)}destroy(){for(let t of this.roots)t.destroy();this.pluginManager.destroy(),this.scheduler.processTasks(),Vn.delete(this)}handleError(...t){return Pt(...t)}}function Fn(t,e={}){const n=Ht(()=>(Gt(n),t()),!0);function o(){return n.state!==Ft.EXECUTED&&Jt(n),qt(n),n.value}return o[Kt]=n,o.set=e.set??(()=>{}),o}function Kn(t,e){const n={type:"signal",value:t,observers:new Set};let o=e(n);const s=()=>(qt(n),o);return s[Kt]=n,s.set=function(t){Object.is(n.value,t)||(n.value=t,o=e(n),Gt(n))},s}function Un(t){return Kn(t,t=>t.value)}Un.invalidate=function(t){if("function"!=typeof t||"signal"!==t[Kt]?.type)throw new e(`Value is not a signal (${t})`);Gt(t[Kt])},Un.Array=function(t){return Kn(t,t=>Se(t.value,t))},Un.Map=function(t){return Kn(t,t=>Se(t.value,t))},Un.Object=function(t){return Kn(t,t=>Se(t.value,t))},Un.Set=function(t){return Kn(t,t=>Se(t.value,t))};function zn(t){Wt(Rn(t))}s.shouldNormalizeDom=!1,s.mainEventHandler=(t,n,s)=>{const{data:i,modifiers:r}=o(t);t=i;let l=!1;if(r.length){let t=!1;const e=n.target===s;for(const o of r)switch(o){case"self":if(t=!0,e)continue;return l;case"prevent":(t&&e||!t)&&n.preventDefault();continue;case"stop":(t&&e||!t)&&n.stopPropagation(),l=!0;continue}}if(Object.hasOwnProperty.call(t,0)){const o=t[0];if("function"!=typeof o)throw new e(`Invalid handler (expected a function, received: '${o}')`);let s=t[1]?t[1].__owl__:null;s&&1!==s.status||o(t[1],n)}return l};const Hn={config:s,mount:_t,patch:function(t,e,n=!1){t.patch(e,n)},remove:function(t,e=!1){e&&t.beforeRemove(),t.remove()},list:$t,multi:W,text:Z,toggler:l,createBlock:at,html:At,comment:Y},qn={version:Wn.version};ze.prototype._compileTemplate=function(t,e){return On(e,{name:t,dev:this.dev,translateFn:this.translateFn,translatableAttributes:this.translatableAttributes,customDirectives:this.customDirectives,hasGlobalValues:this.hasGlobalValues})},t.App=Wn,t.Component=Ot,t.EventBus=T,t.OwlError=e,t.Plugin=Ln,t.Registry=class{_map=Un.Object(Object.create(null));_name;_validation;constructor(t={}){this._name=t.name||"registry",this._validation=t.validation}entries=Fn(()=>Object.entries(this._map()).sort((t,e)=>t[1][0]-e[1][0]).map(([t,e])=>[t,e[1]]));items=Fn(()=>this.entries().map(t=>t[1]));addById(t,n={}){if(!t.id)throw new e(`Item should have an id key (registry '${this._name}')`);return this.add(t.id,t,{sequence:n.sequence??50})}add(t,e,n={}){if(this._validation){const n=this._name?` (registry '${this._name}', key: '${t}')`:` (key: '${t}')`;re(e,this._validation,`Registry entry does not match the type${n}`)}return this._map()[t]=[n.sequence??50,e],this}get(t,e){const n=t in this._map();if(!n&&arguments.length<2)throw new Error(`KeyNotFoundError: Cannot find key "${t}" (registry '${this._name}')`);return n?this._map()[t][1]:e}delete(t){delete this._map()[t]}has(t){return t in this._map()}},t.Resource=class{_items=Un.Array([]);_name;_validation;constructor(t={}){this._name=t.name,this._validation=t.validation}items=Fn(()=>this._items().sort((t,e)=>t[0]-e[0]).map(t=>t[1]));add(t,e={}){if(this._validation){const e=this._name?` (resource '${this._name}')`:"";re(t,this._validation,`Resource item does not match the type${e}`)}return this._items().push([e.sequence??50,t]),this}delete(t){const e=this._items().filter(([e,n])=>n!==t);return this._items.set(e),this}has(t){return this._items().some(([e,n])=>n===t)}},t.__info__=qn,t.assertType=re,t.batched=k,t.blockDom=Hn,t.computed=Fn,t.config=function(t,e){const{app:n,manager:o}=Dt("plugin");return n.dev&&e&&re(o.config,ie.object({[t]:e}),"Config does not match the type"),o.config[t.endsWith("?")?t.slice(0,-1):t]},t.effect=Rn,t.htmlEscape=_,t.markRaw=ke,t.markup=C,t.mount=async function(t,e,n={}){return new Wn(n).createRoot(t,n).mount(e,n)},t.onError=function(t){const{node:e}=Dt("component");let n=Bt.get(e);n||(n=[],Bt.set(e,n)),n.push(t.bind(e.component))},t.onMounted=jt,t.onPatched=function(t){const{node:e}=Dt("component");e.patched.push(Mt(e,t,"onPatched"))},t.onWillDestroy=Wt,t.onWillPatch=function(t){const{node:e}=Dt("component");e.willPatch.unshift(Mt(e,t,"onWillPatch"))},t.onWillStart=function(t){const{node:e}=Dt("component");e.willStart.push(Mt(e,t,"onWillStart"))},t.onWillUnmount=Vt,t.onWillUpdateProps=function(t){const{node:e}=Dt("component");e.willUpdateProps.push(Mt(e,t,"onWillUpdateProps"))},t.plugin=function(t){const n=Dt(),o="component"===n.type?n.node.pluginManager:n.manager;let s=o.getPluginById(t.id);if(!s){if("plugin"!==n.type)throw new e(`Unknown plugin "${t.id}"`);s=o.startPlugin(t)}return s},t.props=ce,t.providePlugins=function(t,e){const{node:n}=Dt("component"),o=new In(n.app,{parent:n.pluginManager,config:e});n.pluginManager=o,Wt(()=>o.destroy()),Pn(o,t)},t.proxy=Oe,t.signal=Un,t.status=function(t){switch(t.__owl__.status){case 0:return"new";case 2:return"cancelled";case 1:return t instanceof Ln?"started":"mounted";case 3:return"destroyed"}},t.toRaw=Ee,t.types=ie,t.untrack=ee,t.useApp=function(){return Dt().app},t.useContext=function(){const t=Ct.at(-1);return{run(e){if(t){let n;Ct.push(t);try{n=e()}finally{Ct.pop()}return n}return e()},protectAsync:e=>(t&&(e=St(t,e)),e),runWithAsyncProtection:e=>(t&&(e=St(t,e)),e())}},t.useEffect=zn,t.useListener=function(t,e,n,o){"function"==typeof t?zn(()=>{const s=t();if(s)return s.addEventListener(e,n,o),()=>s.removeEventListener(e,n,o)}):(t.addEventListener(e,n,o),Wt(()=>t.removeEventListener(e,n,o)))},t.useResource=function(t,e){for(let n of e)t.add(n);Wt(()=>{for(let n of e)t.delete(n)})},t.validateType=ae,t.whenReady=function(t){return new Promise(function(t){"loading"!==document.readyState?t(!0):document.addEventListener("DOMContentLoaded",t,!1)}).then(t||function(){})},t.xml=qe,qn.date="2026-02-20T08:37:22.309Z",qn.hash="b348815",qn.url="https://github.com/odoo/owl"}(this.owl=this.owl||{});
@@ -1,4 +1,4 @@
1
- import { AST, ASTComment, ASTComponent, ASTDebug, ASTDomNode, ASTLog, ASTMulti, ASTTCallSlot, ASTTCall, ASTTCallBlock, ASTText, ASTTForEach, ASTTif, ASTTKey, ASTTOut, ASTTPortal, ASTTranslation, ASTTranslationContext, ASTTSet, EventHandlers } from "./parser";
1
+ import { AST, ASTComment, ASTComponent, ASTDebug, ASTDomNode, ASTLog, ASTMulti, ASTTCall, ASTTCallBlock, ASTTCallSlot, ASTText, ASTTForEach, ASTTif, ASTTKey, ASTTOut, ASTTPortal, ASTTranslation, ASTTranslationContext, ASTTSet, EventHandlers } from "./parser";
2
2
  type BlockType = "block" | "text" | "multi" | "list" | "html" | "comment";
3
3
  export interface Config {
4
4
  translateFn?: (s: string, translationCtx: string) => string;
@@ -6,7 +6,6 @@ export interface Config {
6
6
  dev?: boolean;
7
7
  }
8
8
  export interface CodeGenOptions extends Config {
9
- hasSafeContext?: boolean;
10
9
  name?: string;
11
10
  hasGlobalValues: boolean;
12
11
  }
@@ -36,23 +35,22 @@ interface Context {
36
35
  block: BlockDescription | null;
37
36
  index: number | string;
38
37
  forceNewBlock: boolean;
39
- isLast?: boolean;
40
38
  translate: boolean;
41
39
  translationCtx: string;
42
40
  tKeyExpr: string | null;
43
41
  nameSpace?: string;
44
42
  tModelSelectedExpr?: string;
45
- ctxVar?: string;
46
43
  inPreTag?: boolean;
47
44
  }
48
45
  declare class CodeTarget {
49
46
  name: string;
50
47
  indentLevel: number;
51
48
  loopLevel: number;
49
+ loopCtxVars: string[];
50
+ tSetVars: Map<string, number>;
52
51
  code: string[];
53
52
  hasRoot: boolean;
54
- hasCache: boolean;
55
- shouldProtectScope: boolean;
53
+ needsScopeProtection: boolean;
56
54
  on: EventHandlers | null;
57
55
  constructor(name: string, on?: EventHandlers | null);
58
56
  addLine(line: string, idx?: number): void;
@@ -62,7 +60,6 @@ declare class CodeTarget {
62
60
  export declare class CodeGenerator {
63
61
  blocks: BlockDescription[];
64
62
  nextBlockId: number;
65
- hasSafeContext: boolean;
66
63
  isDebug: boolean;
67
64
  targets: CodeTarget[];
68
65
  target: CodeTarget;
@@ -75,7 +72,7 @@ export declare class CodeGenerator {
75
72
  id: string;
76
73
  expr: string;
77
74
  }[];
78
- slotNames: Set<String>;
75
+ slotNames: Set<String | Symbol>;
79
76
  helpers: Set<string>;
80
77
  constructor(ast: AST, options: CodeGenOptions);
81
78
  generateCode(): string;
@@ -85,20 +82,6 @@ export declare class CodeGenerator {
85
82
  insertAnchor(block: BlockDescription, index?: number): void;
86
83
  createBlock(parentBlock: BlockDescription | null, type: BlockType, ctx: Context): BlockDescription;
87
84
  insertBlock(expression: string, block: BlockDescription, ctx: Context): void;
88
- /**
89
- * Captures variables that are used inside of an expression. This is useful
90
- * because in compiled code, almost all variables are accessed through the ctx
91
- * object. In the case of functions, that lookup in the context can be delayed
92
- * which can cause issues if the value has changed since the function was
93
- * defined.
94
- *
95
- * @param expr the expression to capture
96
- * @param forceCapture whether the expression should capture its scope even if
97
- * it doesn't contain a function. Useful when the expression will be used as
98
- * a function body.
99
- * @returns a new expression that uses the captured values
100
- */
101
- captureExpression(expr: string, forceCapture?: boolean): string;
102
85
  translate(str: string, translationCtx: string): string;
103
86
  /**
104
87
  * @returns the newly created block name, if any
@@ -110,6 +93,7 @@ export declare class CodeGenerator {
110
93
  compileText(ast: ASTText, ctx: Context): string;
111
94
  generateHandlerCode(rawEvent: string, handler: string): string;
112
95
  compileTDomNode(ast: ASTDomNode, ctx: Context): string;
96
+ compileZero(): string;
113
97
  compileTOut(ast: ASTTOut, ctx: Context): string;
114
98
  compileTIfBranch(content: AST, block: BlockDescription, ctx: Context): void;
115
99
  compileTIf(ast: ASTTif, ctx: Context, nextNode?: ASTDomNode): string;
@@ -1,5 +1,5 @@
1
- import type { TemplateSet } from "../runtime/template_set";
2
1
  import type { BDom } from "../runtime/blockdom";
2
+ import type { TemplateSet } from "../runtime/template_set";
3
3
  import { Config } from "./code_generator";
4
4
  export type CustomDirectives = Record<string, (node: Element, value: string, modifier: string[]) => void>;
5
5
  export type Template = (context: any, vnode: any, key?: string) => BDom;
@@ -54,6 +54,5 @@ export declare function tokenize(expr: string): Token[];
54
54
  export declare function compileExprToArray(expr: string): Token[];
55
55
  export declare function compileExpr(expr: string): string;
56
56
  export declare const INTERP_REGEXP: RegExp;
57
- export declare function replaceDynamicParts(s: string, replacer: (s: string) => string): string;
58
57
  export declare function interpolate(s: string): string;
59
58
  export {};
@@ -85,16 +85,18 @@ export interface ASTTSet extends BaseAST {
85
85
  body: AST[] | null;
86
86
  hasNoRepresentation: true;
87
87
  }
88
+ export declare const enum ForEachNoFlag {
89
+ First = 1,
90
+ Last = 2,
91
+ Index = 4,
92
+ Value = 8
93
+ }
88
94
  export interface ASTTForEach extends BaseAST {
89
95
  type: ASTType.TForEach;
90
96
  collection: string;
91
97
  elem: string;
92
98
  body: AST;
93
- memo: string;
94
- hasNoFirst: boolean;
95
- hasNoLast: boolean;
96
- hasNoIndex: boolean;
97
- hasNoValue: boolean;
99
+ noFlags: number;
98
100
  key: string | null;
99
101
  }
100
102
  export interface ASTTKey extends BaseAST {
@@ -105,7 +107,9 @@ export interface ASTTKey extends BaseAST {
105
107
  export interface ASTTCall extends BaseAST {
106
108
  type: ASTType.TCall;
107
109
  name: string;
108
- body: AST[] | null;
110
+ attrs: Attrs | null;
111
+ attrsTranslationCtx: Attrs | null;
112
+ body: AST | null;
109
113
  context: string | null;
110
114
  }
111
115
  interface SlotDefinition {