@odoo/owl 3.0.0-alpha.25 → 3.0.0-alpha.28
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/owl.cjs.js +6648 -6618
- package/dist/owl.es.js +6628 -6577
- package/dist/owl.iife.js +6818 -6790
- package/dist/owl.iife.min.js +27 -1
- package/dist/types/owl.d.ts +679 -624
- package/package.json +9 -95
- package/LICENSE +0 -856
- package/README.md +0 -139
- package/dist/compile_templates.mjs +0 -2458
- package/dist/owl-devtools.zip +0 -0
- package/dist/types/common/owl_error.d.ts +0 -3
- package/dist/types/common/utils.d.ts +0 -8
- package/dist/types/compiler/code_generator.d.ts +0 -133
- package/dist/types/compiler/index.d.ts +0 -13
- package/dist/types/compiler/inline_expressions.d.ts +0 -41
- package/dist/types/compiler/parser.d.ts +0 -170
- package/dist/types/compiler/standalone/index.d.ts +0 -2
- package/dist/types/compiler/standalone/setup_jsdom.d.ts +0 -1
- package/dist/types/index.d.ts +0 -1
- package/dist/types/runtime/app.d.ts +0 -54
- package/dist/types/runtime/blockdom/attributes.d.ts +0 -8
- package/dist/types/runtime/blockdom/block_compiler.d.ts +0 -21
- package/dist/types/runtime/blockdom/config.d.ts +0 -8
- package/dist/types/runtime/blockdom/event_catcher.d.ts +0 -7
- package/dist/types/runtime/blockdom/events.d.ts +0 -8
- package/dist/types/runtime/blockdom/html.d.ts +0 -17
- package/dist/types/runtime/blockdom/index.d.ts +0 -25
- package/dist/types/runtime/blockdom/list.d.ts +0 -18
- package/dist/types/runtime/blockdom/multi.d.ts +0 -17
- package/dist/types/runtime/blockdom/text.d.ts +0 -26
- package/dist/types/runtime/blockdom/toggler.d.ts +0 -17
- package/dist/types/runtime/component.d.ts +0 -17
- package/dist/types/runtime/component_node.d.ts +0 -59
- package/dist/types/runtime/context.d.ts +0 -36
- package/dist/types/runtime/event_handling.d.ts +0 -1
- package/dist/types/runtime/hooks.d.ts +0 -32
- package/dist/types/runtime/index.d.ts +0 -46
- package/dist/types/runtime/lifecycle_hooks.d.ts +0 -10
- package/dist/types/runtime/plugin_hooks.d.ts +0 -6
- package/dist/types/runtime/plugin_manager.d.ts +0 -36
- package/dist/types/runtime/props.d.ts +0 -21
- package/dist/types/runtime/reactivity/computations.d.ts +0 -34
- package/dist/types/runtime/reactivity/computed.d.ts +0 -6
- package/dist/types/runtime/reactivity/effect.d.ts +0 -1
- package/dist/types/runtime/reactivity/proxy.d.ts +0 -47
- package/dist/types/runtime/reactivity/signal.d.ts +0 -31
- package/dist/types/runtime/registry.d.ts +0 -24
- package/dist/types/runtime/rendering/error_handling.d.ts +0 -13
- package/dist/types/runtime/rendering/fibers.d.ts +0 -36
- package/dist/types/runtime/rendering/scheduler.d.ts +0 -20
- package/dist/types/runtime/rendering/template_helpers.d.ts +0 -51
- package/dist/types/runtime/resource.d.ts +0 -18
- package/dist/types/runtime/status.d.ts +0 -11
- package/dist/types/runtime/template_set.d.ts +0 -36
- package/dist/types/runtime/types.d.ts +0 -77
- package/dist/types/runtime/utils.d.ts +0 -24
- package/dist/types/runtime/validation.d.ts +0 -19
- package/dist/types/version.d.ts +0 -1
- package/tools/compile_owl_templates.mjs +0 -31
package/dist/owl.iife.min.js
CHANGED
|
@@ -1 +1,27 @@
|
|
|
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)}let a,c,u,h;if("undefined"!=typeof Element){({setAttribute:a,removeAttribute:c}=Element.prototype);const t=DOMTokenList.prototype;u=t.add,h=t.remove}const d=Array.isArray,{split:f,trim:p}=String.prototype,m=/\s+/;function g(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 b(t){return function(e){g.call(this,t,e)}}function y(t){if(d(t))"class"===t[0]?k.call(this,t[1]):"style"===t[0]?T.call(this,t[1]):g.call(this,t[0],t[1]);else for(let e in t)"class"===e?k.call(this,t[e]):"style"===e?T.call(this,t[e]):g.call(this,e,t[e])}function v(t,e){if(d(t)){const n=t[0],o=t[1];if(n===e[0]){if(o===e[1])return;"class"===n?E.call(this,o,e[1]):"style"===n?A.call(this,o,e[1]):g.call(this,n,o)}else c.call(this,e[0]),g.call(this,n,o)}else{for(let n in e)n in t||("class"===n?E.call(this,"",e[n]):"style"===n?A.call(this,"",e[n]):c.call(this,n));for(let n in t){const o=t[n];o!==e[n]&&("class"===n?E.call(this,o,e[n]):"style"===n?A.call(this,o,e[n]):g.call(this,n,o))}}}function w(t){const e={};switch(typeof t){case"string":const n=p.call(t);if(!n)return{};let o=f.call(n,m);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=p.call(n),!n)continue;const t=f.call(n,m);for(let n of t)e[n]=o}}return e;case"undefined":return{};case"number":return{[t]:!0};default:return{[t]:!0}}}const $={};function x(t){if(t in $)return $[t];const e=t.replace(/[A-Z]/g,t=>"-"+t.toLowerCase());return $[t]=e,e}function N(t){const e={};switch(typeof t){case"string":{const n=p.call(t);if(!n)return{};const o=n.split(";");for(let t of o){if(t=p.call(t),!t)continue;const n=t.indexOf(":");if(-1===n)continue;const o=p.call(t.slice(0,n)),s=p.call(t.slice(n+1));o&&s&&"undefined"!==s&&(e[o]=s)}return e}case"object":for(let n in t){const o=t[n];(o||0===o)&&(e[x(n)]=String(o))}return e;default:return{}}}function k(t){t=""===t?{}:w(t);for(let e in t)u.call(this.classList,e)}function E(t,e){e=""===e?{}:w(e),t=""===t?{}:w(t);for(let n in e)n in t||h.call(this.classList,n);for(let n in t)t[n]!==e[n]&&u.call(this.classList,n)}function T(t){t=""===t?{}:N(t);const e=this.style;for(let n in t)e.setProperty(n,t[n])}function A(t,e){e=""===e?{}:N(e),t=""===t?{}:N(t);const n=this.style;for(let o in e)o in t||n.removeProperty(o);for(let o in t)t[o]!==e[o]&&n.setProperty(o,t[o]);n.cssText||c.call(this,"style")}function C(t){let e=!1;return function(...n){e||(e=!0,queueMicrotask(()=>{e=!1,t(...n)}))}}function _(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 D extends EventTarget{trigger(t,e){this.dispatchEvent(new CustomEvent(t,{detail:e}))}}class S extends String{}function O(t){return t instanceof S?t:void 0===t?R(""):"number"==typeof t?R(String(t)):([["&","&"],["<","<"],[">",">"],["'","'"],['"',"""],["`","`"]].forEach(e=>{t=String(t).replace(new RegExp(e[0],"g"),e[1])}),R(t))}function R(t,...e){if(!Array.isArray(t))return new S(t);const n=t;let o="",s=0;for(;s<e.length;++s)o+=n[s]+O(e[s]);return o+=n[s],new S(o)}function L(t){const e=t.split(".")[0],n=t.includes(".capture"),o=t.includes(".passive");return t.includes(".synthetic")?function(t,e=!1,n=!1){let o=`__event__synthetic_${t}`;e&&(o=`${o}_capture`);!function(t,e,n=!1,o=!1){if(P[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,passive:o}),P[e]=!0}(t,o,e,n);const i=I++;function r(t){const e=this[o]||{};e[i]=t,this[o]=e}function l(){delete this[o]}return{setup:r,update:r,remove:l}}(e,n,o):function(t,e=!1,n=!1){let o=`__event__${t}_${B++}`;e&&(o=`${o}_capture`);function i(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 n=e[o];n&&s.mainEventHandler(n,t,e)}const r={capture:e,passive:n};function l(e){this[o]=e,this.addEventListener(t,i,r)}function a(){delete this[o],this.removeEventListener(t,i,r)}function c(t){this[o]=t}return{setup:l,update:c,remove:a}}(e,n,o)}let B=1;let I=1;const P={};let M,j,V;if("undefined"!=typeof Node){const t=Node.prototype;M=t.insertBefore,j=(W=t,F="textContent",Object.getOwnPropertyDescriptor(W,F)).set,V=t.removeChild}var W,F;class K{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,M.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];M.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];M.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,M.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),V.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)j.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():V.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 U(t){return new K(t)}let z,H,G;if("undefined"!=typeof Node){const t=Node.prototype;z=t.insertBefore,G=t.removeChild,H=((t,e)=>Object.getOwnPropertyDescriptor(t,e))(CharacterData.prototype,"data").set}class q{text;parentEl;el;constructor(t){this.text=t}mountNode(t,e,n){this.parentEl=e,z.call(e,t,n),this.el=t}moveBeforeDOMNode(t,e=this.parentEl){this.parentEl=e,z.call(e,this.el,t)}moveBeforeVNode(t,e){z.call(this.parentEl,this.el,t?t.el:e)}beforeRemove(){}remove(){G.call(this.parentEl,this.el)}firstNode(){return this.el}toString(){return this.text}}class X extends q{mount(t,e){this.mountNode(document.createTextNode(Q(this.text)),t,e)}patch(t){const e=t.text;this.text!==e&&(H.call(this.el,Q(e)),this.text=e)}}class Z extends q{mount(t,e){this.mountNode(document.createComment(Q(this.text)),t,e)}patch(){}}function Y(t){return new X(t)}function J(t){return new Z(t)}function Q(t){switch(typeof t){case"string":return t;case"number":return String(t);case"boolean":return t?"true":"false";default:return t||""}}const tt=(t,e)=>Object.getOwnPropertyDescriptor(t,e);let et,nt,ot,st,it;"undefined"!=typeof Node&&(et=Node.prototype,nt=Element.prototype,ot=tt(CharacterData.prototype,"data").set,st=tt(et,"firstChild").get,it=tt(et,"nextSibling").get);const rt=()=>{};function lt(t){return function(e){this[t]=0===e?0:e?e.valueOf():""}}const at={};function ct(t){if(t in at)return at[t];const e=(new DOMParser).parseFromString(`<t>${t}</t>`,"text/xml").firstChild.firstChild;s.shouldNormalizeDom&&ut(e);const n=ht(e),o=pt(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,u=i.map(t=>t.refIdx),h=i.map(t=>t.setData),d=i.map(t=>t.updateData),f=[it,st],p=o.length,m=o.map(t=>32767&t.idx|(32767&t.prevIdx)<<15|(t.getVal===st?1:0)<<30),g=s.map(t=>32767&t.parentRefIdx|(t.isOnlyChild?1:0)<<15|(32767&(t.afterRefIdx??0))<<16),b=et.cloneNode,y=et.insertBefore,v=nt.remove;class w{el;parentEl;data;children;refs;constructor(t){this.data=t}beforeRemove(){}remove(){v.call(this.el)}firstNode(){return this.el}moveBeforeDOMNode(t,e=this.parentEl){this.parentEl=e,y.call(e,this.el,t)}moveBeforeVNode(t,e){y.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);y.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++)h[e].call(i[u[e]],t[e])}if(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(y.call(e,s,o),this.el=s,this.parentEl=e,r.length){const t=this.data,e=this.refs;for(let n of r){(0,t[n])(e[u[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[u[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[u[n]])}}v.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=K.prototype.beforeRemove,(t,e=[])=>new n(t,e);return t=>new n(t)}(n.el,o);return at[t]=i,i}function ut(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)ut(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||dt(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&&dt(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 dt(t){t.isRef=!0;do{t.refN++}while(t=t.parent)}function ft(t){let e=t.parent;for(;e&&e.nextSibling===t;)t=e,e=e.parent;return e}function pt(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:mt,updateData:mt});break;case"child":n.isOnlyChild?t.children[n.idx]={parentRefIdx:n.refIdx,isOnlyChild:!0}:t.children[n.idx]={parentRefIdx:ft(e).refIdx,afterRefIdx:n.refIdx};break;case"property":{const e=n.refIdx,o=lt(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=k,o=E):"style"===n.name?(s=T,o=A):(s=b(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:v});break;case"handler":{const{setup:e,update:o}=L(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:rt,updateData:rt}),t.cbRefs.push(n.idx)}}(e,t),n++}if(r){const s=n+i;e.collectors.push({idx:s,prevIdx:o,getVal:it}),pt(t.nextSibling,e,s)}i&&(e.collectors.push({idx:n,prevIdx:o,getVal:st}),pt(t.firstChild,e,n))}return e}function mt(t){ot.call(this,Q(t))}let gt,bt,yt,vt,wt,$t;if("undefined"!=typeof Node){const t=Node.prototype;gt=t.insertBefore,bt=t.appendChild,yt=t.removeChild,vt=((t,e)=>Object.getOwnPropertyDescriptor(t,e))(t,"textContent").set}class xt{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 vt.call(f,""),void bt.call(f,h)}let p,m=0,g=0,b=n[0],y=o[0],v=n.length-1,w=o.length-1,$=n[v],x=o[w];for(;m<=v&&g<=w;){if(null===b){b=n[++m];continue}if(null===$){$=n[--v];continue}let t=b.key,s=y.key;if(t===s){r.call(b,y,e),o[g]=b,b=n[++m],y=o[++g];continue}let l=$.key,a=x.key;if(l===a){r.call($,x,e),o[w]=$,$=n[--v],x=o[--w];continue}if(t===a){r.call(b,x,e),o[w]=b;const t=o[w+1];c.call(b,t,h),b=n[++m],x=o[--w];continue}if(l===s){r.call($,y,e),o[g]=$;const t=n[m];c.call($,t,h),$=n[--v],y=o[++g];continue}p=p||kt(n,m,v);let d=p[s];if(void 0===d)i.call(y,f,u.call(b)||null);else{const t=n[d];c.call(t,b,null),r.call(t,y,e),o[g]=t,n[d]=null}y=o[++g]}if(m<=v||g<=w)if(m>v){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<=v;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)vt.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])}yt.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 Nt(t){return new xt(t)}function kt(t,e,n){let o={};for(let s=e;s<=n;s++)o[t[s].key]=s;return o}if("undefined"!=typeof Node){const t=Node.prototype;wt=t.insertBefore,$t=t.removeChild}class Et{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)wt.call(t,n,e);if(!this.content.length){const n=document.createTextNode("");this.content.push(n),wt.call(t,n,e)}}moveBeforeDOMNode(t,e=this.parentEl){this.parentEl=e;for(let n of this.content)wt.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)wt.call(n,t,o);if(!i.length){const t=document.createTextNode("");i.push(t),wt.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)$t.call(t,e)}firstNode(){return this.content[0]}toString(){return this.html}}function Tt(t){return new Et(t)}function At(t,e,n=null){t.mount(e,n)}let Ct=[];function _t(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 Dt(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 St{static template="";__owl__;constructor(t){this.__owl__=t}setup(){}}var Ot;!function(t){t[t.EXECUTED=0]="EXECUTED",t[t.STALE=1]="STALE",t[t.PENDING=2]="PENDING"}(Ot||(Ot={}));const Rt=Symbol("Atom");let Lt,Bt=[];function It(t,e,n=Ot.STALE){return{state:n,value:void 0,compute:t,sources:new Set,observers:new Set,isDerived:e}}function Pt(t){Lt&&(Lt.sources.add(t),t.observers.add(Lt))}function Mt(t){for(const e of t.observers)e.state===Ot.EXECUTED&&(e.isDerived?zt(e):Bt.push(e)),e.state=Ot.STALE;jt()}const jt=C(function(){for(let t=0;t<Bt.length;t++)Ft(Bt[t]);Bt.length=0});function Vt(){return Lt}function Wt(t){Lt=t}function Ft(t){const e=t.state;if(e===Ot.EXECUTED)return;if(e===Ot.PENDING){for(const e of t.sources)"compute"in e&&Ft(e);if(t.state!==Ot.STALE)return void(t.state=Ot.EXECUTED)}Kt(t);const n=Lt;Lt=t,t.value=t.compute(),t.state=Ot.EXECUTED,Lt=n}function Kt(t){const e=t.sources;for(const n of e){n.observers.delete(t)}e.clear()}function Ut(t){for(const e of t.sources)e.observers.delete(t),"compute"in e&&e.isDerived&&0===e.observers.size&&Ut(e);t.sources.clear(),t.state=Ot.STALE}function zt(t){const e=[t];let n;for(;n=e.pop();)for(const t of n.observers)t.state||(t.state=Ot.PENDING,t.isDerived?e.push(t):Bt.push(t))}function Ht(t){const e=Lt;let n;Lt=void 0;try{n=t()}finally{Lt=e}return n}const Gt=new WeakMap,qt=new WeakMap;function Xt(t){let{error:n}=t,o="node"in t?t.node:t.fiber.node;const s="fiber"in t?t.fiber:o.fiber,i=o.app;if(s){let t=s;do{t.node.fiber=t,Gt.set(t,n),t=t.parent}while(t);Gt.set(s.root,n)}const r=()=>{try{i.destroy()}catch(t){}return Object.assign(new e("[Owl] Unhandled error. Destroying the root component"),{cause:n})};for(;o;){const t=o.fiber;t&&Gt.set(t,n);const e=qt.get(o);if(e)for(let t=e.length-1;t>=0;t--)try{return void e[t](n,r)}catch(t){n=t}o=o.parent}const l=r();i._handleError(l)}function Zt(){throw new e("Attempted to render cancelled fiber")}function Yt(t){let e=0;for(let n of t){let t=n.node;n.render=Zt,0===t.status&&t.cancel(),t.fiber=null,n.bdom?t.forceNextRender=!0:e++,e+=Yt(n.children)}return e}class Jt{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}const o=this.node,s=this.root;if(s){const t=Vt();Kt(o.signalComputation),Wt(o.signalComputation);try{this.bdom=!0,this.bdom=o.renderFn()}catch(t){Xt({node:o,error:t})}Wt(t);const e=s.counter-1;s.counter=e,0===e&&this.node.app.scheduler.flush()}}}class Qt extends Jt{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(t){for(let t of n)t.node.willUnmount=[];this.locked=!1,Xt({fiber:e||this,error:t})}}setCounter(t){this.counter=t,0===t&&this.node.app.scheduler.flush()}}class te extends Qt{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){Xt({fiber:t,error:e})}}}class ee{el;app;fiber=null;component;bdom=null;status=0;forceNextRender=!1;parentKey;props;defaultProps={};renderFn;parent;children=Object.create(null);willStart=[];willUpdateProps=[];willUnmount=[];mounted=[];willPatch=[];patched=[];willDestroy=[];signalComputation;computations=[];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=It(()=>this.render(!1),!1,Ot.EXECUTED),this.props=e,Ct.push({type:"component",app:n,componentName:t.name,node:this,get status(){return this.node.status}});const i=Vt();Wt(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(),Wt(i),Ct.length=0}mountComponent(t,e){const n=new te(this,t,e);this.app.scheduler.addFiber(n);let o=Vt();this.initiateRender(n),Wt(o)}async initiateRender(t){this.fiber=t,this.mounted.length&&t.root.mounted.push(t);const e=this.component;let n=Vt();Wt(void 0);try{let t=this.willStart.map(t=>t.call(e));Wt(n),await Promise.all(t)}catch(t){return void Xt({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&&!Gt.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-Yt(e.children)),t.locked=!1,e.children=[],e.childrenMap={},e.bdom=null,Gt.has(e)&&(Gt.delete(e),Gt.delete(t),e.appliedToDom=!1,e instanceof Qt&&(e.mounted=e instanceof te?[e]:[])),e}const n=new Qt(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){Xt({error:t,node:this})}for(const t of this.computations)Ut(t);Ut(this.signalComputation),this.status=3}async updateAndRender(t,e){t=Object.assign({},t);for(const e in this.defaultProps)void 0===t[e]&&(t[e]=this.defaultProps[e]);const n=function(t,e){let n=t.fiber;return n&&(Yt(n.children),n.root=null),new Jt(t,e)}(this,e);this.fiber=n;const o=this.component;let s=Vt();Wt(void 0);let i=this.willUpdateProps.map(e=>e.call(o,t));if(Wt(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 ne=Symbol("Key changes"),oe=Object.prototype.toString,se=Object.prototype.hasOwnProperty;function ie(t){if("object"!=typeof t||null===t)return!1;const e=ce(t);return!!(Array.isArray(e)||e instanceof Set||e instanceof Map||e instanceof WeakMap)||"[object Object]"===oe.call(e)}function re(t,e){return!e&&ie(t)?ge(t):t}const le=new WeakSet;function ae(t){return le.add(t),t}function ce(t){return fe.has(t)?fe.get(t):t}const ue=new WeakMap;function he(t,e,n){Pt(n??function(t,e){let n=ue.get(t);n||(n=new Map,ue.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 de(t,e,n){if(!n){const o=ue.get(t);if(!o)return;if(!o.has(e))return;n=o.get(e)}Mt(n)}const fe=new WeakMap,pe=new WeakMap;function me(t,n){if(!ie(t))throw new e("Cannot make the given value reactive");if(le.has(t))return t;if(fe.has(t))return t;const o=pe.get(t);if(o)return o;let s;s=t instanceof Map?ke(t,"Map",n):t instanceof Set?ke(t,"Set",n):t instanceof WeakMap?ke(t,"WeakMap",n):be(n);const i=new Proxy(t,s);return pe.set(t,i),fe.set(i,t),i}function ge(t){return me(t,null)}function be(t){return{get(e,n,o){he(e,n,t);const s=Reflect.get(e,n,o);if(t||"object"!=typeof s||null===s)return s;if(!ie(s))return s;const i=Object.getOwnPropertyDescriptor(e,n);return!i||i.writable||i.configurable?me(s,null):s},set(e,n,o,s){const i=se.call(e,n),r=Reflect.get(e,n,s),l=Reflect.set(e,n,ce(o),s);return!i&&se.call(e,n)&&de(e,ne,t),(r!==Reflect.get(e,n,s)||"length"===n&&Array.isArray(e))&&de(e,n,t),l},deleteProperty(e,n){const o=Reflect.deleteProperty(e,n);return de(e,ne,t),de(e,n,t),o},ownKeys:e=>(he(e,ne,t),Reflect.ownKeys(e)),has:(e,n)=>(he(e,ne,t),Reflect.has(e,n))}}function ye(t,e,n){return o=>(o=ce(o),he(e,o,n),re(e[t](o),n))}function ve(t,e,n){return function*(){he(e,ne,n);const o=e.keys();for(const s of e[t]()){const t=o.next().value;he(e,t,n),yield re(s,n)}}}function we(t,e){return function(n,o){he(t,ne,e),t.forEach(function(s,i,r){he(t,i,e),n.call(o,re(s,e),re(i,e),re(r,e))},o)}}function $e(t,e,n,o){return(s,i)=>{s=ce(s);const r=n.has(s),l=n[e](s),a=n[t](s,i);return r!==n.has(s)&&de(n,ne,o),l!==n[e](s)&&de(n,s,o),a}}function xe(t,e){return()=>{const n=[...t.keys()];t.clear(),de(t,ne,e);for(const o of n)de(t,o,e)}}const Ne={Set:(t,e)=>({has:ye("has",t,e),add:$e("add","has",t,e),delete:$e("delete","has",t,e),keys:ve("keys",t,e),values:ve("values",t,e),entries:ve("entries",t,e),[Symbol.iterator]:ve(Symbol.iterator,t,e),forEach:we(t,e),clear:xe(t,e),get size(){return he(t,ne,e),t.size}}),Map:(t,e)=>({has:ye("has",t,e),get:ye("get",t,e),set:$e("set","get",t,e),delete:$e("delete","has",t,e),keys:ve("keys",t,e),values:ve("values",t,e),entries:ve("entries",t,e),[Symbol.iterator]:ve(Symbol.iterator,t,e),forEach:we(t,e),clear:xe(t,e),get size(){return he(t,ne,e),t.size}}),WeakMap:(t,e)=>({has:ye("has",t,e),get:ye("get",t,e),set:$e("set","get",t,e),delete:$e("delete","has",t,e)})};function ke(t,e,n){const o=Ne[e](t,n);return Object.assign(be(n),{get:(t,e)=>se.call(o,e)?o[e]:(he(t,e,n),re(t[e],n))})}const Ee=Object.create;class Te{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 Ae={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:u,__scope:h}=a[o]||{},d=Ee(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),U([i,a])}return f||Y("")},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:Te,safeOutput:function(t,e){if(null==t)return e?l("default",e):l("undefined",Y(""));let n,o;return t instanceof S?(n="string_safe",o=Tt(t)):t instanceof Te?(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=L(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:ae,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 u=ee.prototype.updateAndRender,h=ee.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,u.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 St))throw new e(`"${n}" is not a Component. It must inherit from the Component class`)}p=new ee(d,s,t,r,i),f[i]=p;const l=new Jt(p,m);p.willStart.length?h.call(p,l):(p.fiber=l,p.mounted.length&&l.root.mounted.push(l),l.render())}return m.childrenMap[i]=p,p}},callTemplate:function(t,e,n,o,s,i){return l(t,n.getTemplate(t).call(e,o,s,i+t))},callHandler:function(t,n,o){if("function"!=typeof t)throw new e(`Invalid handler expression: the \`t-on\` expression should evaluate to a function, but got '${typeof t}'. Did you mean to use an arrow function? (e.g. \`t-on-click="() => expr"\`)`);t.call(n.this,o)}},Ce={text:Y,createBlock:ct,list:Nt,multi:U,html:Tt,toggler:l,comment:J};class _e{static registerTemplate(t,e){De[t]=e}dev;rawTemplates=Object.create(De);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={...Ae,__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}=_t("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,Ce,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 De={};function Se(...t){const e="__template__"+Se.nextId++,n=String.raw(...t);return De[e]=n,e}Se.nextId=1;const Oe="true,false,NaN,null,undefined,debugger,console,window,in,instanceof,new,function,return,eval,void,Math,RegExp,Array,Object,Date,__globals__".split(","),Re=Object.assign(Object.create(null),{and:"&&",or:"||",gt:">",gte:">=",lt:"<",lte:"<="}),Le=Object.assign(Object.create(null),{"{":"LEFT_BRACE","}":"RIGHT_BRACE","[":"LEFT_BRACKET","]":"RIGHT_BRACKET",":":"COLON",",":"COMMA","(":"LEFT_PAREN",")":"RIGHT_PAREN"}),Be="...,.,===,==,+,!==,!=,!,||,&&,>=,>,<=,<,?,-,*,/,%,typeof ,=>,=,;,in ,new ,|,&,^,~".split(",");const Ie=[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 Be)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 Re?{type:"OPERATOR",value:Re[e],size:e.length}:{type:"SYMBOL",value:e}}return!1},function(t){const e=t[0];return!(!e||!(e in Le))&&{type:Le[e],value:e}}];const Pe=t=>t&&("LEFT_BRACE"===t.type||"COMMA"===t.type),Me=t=>t&&("RIGHT_BRACE"===t.type||"COMMA"===t.type),je=new Map([["in "," in "]]);function Ve(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 Ie)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=[],r=-1;for(;s<o.length;){let t=o[s],e=o[s-1],l=o[s+1],a=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 c="SYMBOL"===t.type&&!Oe.includes(t.value);if(c&&e&&("LEFT_BRACE"===a&&Pe(e)&&Me(l)&&(o.splice(s+1,0,{type:"COLON",value:":"},{...t}),l=o[s+1]),"OPERATOR"===e.type&&"."===e.value?c=!1:"LEFT_BRACE"!==e.type&&"COMMA"!==e.type||l&&"COLON"===l.type&&(c=!1)),"TEMPLATE_STRING"===t.type&&(t.value=t.replace(t=>We(t))),l&&"OPERATOR"===l.type&&"=>"===l.value)if(0===i.length&&(r=s+1),"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);c&&(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);let l=null;if(-1!==r){l=[];const t=new Set;for(let e=r+1;e<o.length;e++){const n=o[e];!n.varName||n.isLocal||"this"===n.varName||t.has(n.varName)||(t.add(n.varName),l.push(n.varName))}}return{expr:o.map(t=>je.get(t.value)||t.value).join(""),freeVariables:l}}function We(t){return Ve(t).expr}const Fe=/\{\{.*?\}\}|\#\{.*?\}/g;function Ke(t){return function(t,e){let n=t.match(Fe);if(n&&n[0].length===t.length)return`(${e(t.slice(2,"{"===n[0][0]?-2:-1))})`;let o=t.replace(Fe,t=>"${"+e(t.slice(2,"{"===t[0]?-2:-1))+"}");return"`"+o+"`"}(t,We)}const Ue=Symbol("zero"),ze=/\s+/g;let He;"undefined"!=typeof document&&(He=document.implementation.createDocument(null,null,null));const Ge=new Set(["stop","capture","prevent","self","synthetic","passive"]);let qe={};function Xe(t=""){return qe[t]=(qe[t]||0)+1,t+qe[t]}function Ze(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 Ye(t){return`\`${t.replace(/\\/g,"\\\\").replace(/`/g,"\\`").replace(/\$\{/,"\\${")}\``}class Je{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=Je.nextBlockId++,this.varName="b"+this.id,this.blockName="block"+this.id,this.target=t,this.type=e}insertData(t,e="d"){const n=Xe(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=He.createElement("t");return t.appendChild(this.dom),t.innerHTML}}function Qe(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 tn{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 en=["alt","aria-label","aria-placeholder","aria-roledescription","aria-valuetext","label","placeholder","title"],nn=/^(\s*)([\s\S]+?)(\s*)$/;class on{blocks=[];nextBlockId=1;isDebug=!1;targets=[];target=new tn("template");templateName;dev;translateFn;translatableAttributes=en;ast;staticDefs=[];slotNames=new Set;helpers=new Set;constructor(t,e){if(this.translateFn=e.translateFn||(t=>t),e.translatableAttributes){const t=new Set(en);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.name&&!e.name.startsWith("__")&&(this.target.name=`template_${e.name.replace(/[^a-zA-Z0-9_$]/g,"_")}`),e.hasGlobalValues&&this.helpers.add("__globals__")}generateCode(){const t=this.ast;this.isDebug=11===t.type,Je.nextBlockId=1,qe={},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=Ye(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=Xe(t),i=this.target,r=new tn(s,o);return this.targets.push(r),this.target=r,this.compileAST(e,Qe(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=He.createElement(n);t.insert(o)}createBlock(t,e,n){const o=this.target.hasRoot,s=new Je(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=nn.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)}}compileDebug(t,e){return this.addLine("debugger;"),t.content?this.compileAST(t.content,e):null}compileLog(t,e){return this.addLine(`console.log(${We(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(${Ye(t.value)})`,n,{...e,forceNewBlock:o&&!n});else{const e=He.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(ze," ")),!n||o)n=this.createBlock(n,"text",e),this.insertBlock(`text(${Ye(s)})`,n,{...e,forceNewBlock:o&&!n});else{const e=0===t.type?He.createTextNode:He.createComment;n.insert(e.call(He,s))}return n.varName}generateHandlerCode(t,n){const o=t.split(".").slice(1).map(t=>{if(!Ge.has(t))throw new e(`Unknown event modifier: '${t}'`);return`"${t}"`});let s="";o.length&&(s=`${o.join(",")}, `);const i=We(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 this.helpers.add("callHandler"),r=`(ctx, ev) => callHandler(${i}, ctx, ev)`;const c=Xe("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=Xe("tag");this.define(e,We(t.dynamicTag)),n.dynamicTagName=e}const r={};for(let o in t.attrs){let s,i;if(o.startsWith("t-attf")){s=Ke(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=We(t.attrs[o]),i&&Ze(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,isProxy:h}=t.model;let d,f,p;if(h){const t=We(o);d=t,f=e=>`${t} = ${e}`}else{const t=Xe("expr"),e=We(o);this.helpers.add("modelExpr"),this.define(t,`modelExpr(${e})`),d=`${t}()`,f=e=>`${t}.set(${e})`}if(u){let e=c in r&&`'${r[c]}'`;if(!e&&t.attrs){const n=t.attrs[`t-att-${c}`];n&&(e=We(n))}p=n.insertData(`${d} === ${e}`,"prop"),r[`block-property-${p}`]=u}else if(e){l=`${Xe("bValue")}`,this.define(l,d)}else p=n.insertData(d,"prop"),r[`block-property-${p}`]=c;this.helpers.add("toNumber");let m=`ev.target.${c}`;m=a?`${m}.trim()`:m,m=i?`toNumber(${m})`:m;const g=`[(ctx, ev) => { ${f(m)}; }, ctx]`;p=n.insertData(g,"hdlr"),r[`block-handler-${p}`]=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=We(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?He.createElementNS(a,t.tag):He.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=Qe(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(Ue);this.slotNames.add(Ue);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=Je.nextBlockId;const s=Qe(e);this.compileAST({type:3,content:t.body},s),this.helpers.add("safeOutput"),n=`safeOutput(${We(t.expr)}, b${o})`}else this.helpers.add("safeOutput"),n=`safeOutput(${We(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,Qe(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 (${We(t.condition)}) {`),this.compileTIfBranch(t.content,o,e),t.tElif)for(let n of t.tElif)this.addLine(`} else if (${We(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=Xe("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(${We(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?We(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=Qe(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=Xe("tKey_");return this.define(n,We(t.expr)),e=Qe(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=Qe(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=Fe.test(t.name)?Ke(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=Xe("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=Xe("ctx");this.addLine(`const ${e} = ${We(t.context)};`),r=s.length?`Object.assign({this: ${e}}, ${l})`:`{this: ${e}}`}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(We(t.name),n,{...e,forceNewBlock:!n}),n.varName}compileTSet(t,e){const n=t.value?We(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=Ye(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=[Xe("__")];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=Ye(this.translateFn(n,e))}else n=We(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({}, ${We(e)}${t.length?", "+n:""})`),n}compileComponent(t,e){let{block:n}=e;const o="slots"in(t.props||{}),s=[],i=[];for(let n in t.props||{}){let[o,r]=n.split(".");if(r){s.push(this.formatProp(n,t.props[n],t.propsTranslationCtx,e.translationCtx));continue}const{expr:l,freeVariables:a}=Ve(t.props[n]),c=/^[a-z_]+$/i.test(o)?o:`'${o}'`;if(s.push(`${c}: ${l||void 0}`),a)for(const t of a){const e=`${o}.${t}`;i.push(`"${e}"`),s.push(`"${e}": ctx['${t}']`)}else i.push(`"${o}"`)}let r="";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}`)}r=`{${n.join(", ")}}`}!r||t.dynamicProps||o||(this.helpers.add("markRaw"),s.push(`slots: markRaw(${r})`));let l,a,c=this.getPropString(s,t.dynamicProps);(r&&(t.dynamicProps||o)||this.dev)&&(l=Xe("props"),this.define(l,c),c=l),r&&(t.dynamicProps||o)&&(this.helpers.add("markRaw"),this.addLine(`${l}.slots = markRaw(Object.assign(${r}, ${l}.slots))`)),t.isDynamic?(a=Xe("Comp"),this.define(a,We(t.name))):a=`\`${t.name}\``,n&&(!1===e.forceNewBlock||e.tKeyExpr)&&this.insertAnchor(n);let u=this.generateComponentKey();e.tKeyExpr&&(u=`${e.tKeyExpr} + ${u}`);let h=Xe("comp");this.helpers.add("createComponent"),this.staticDefs.push({id:h,expr:`createComponent(app, ${t.isDynamic?null:a}, ${!t.isDynamic}, ${!!t.slots}, ${!!t.dynamicProps}, [${i}])`}),t.isDynamic&&(u=`(${a}).name + ${u}`);let d=`${h}(${c}, ${u}, node, this, ${t.isDynamic?a:null})`;return t.isDynamic&&(d=`toggler(${a}, ${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=Xe("catcher"),o={},s=[];for(let t in e){let n=Xe("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(Fe)?(i=!0,r=!0,o=Ke(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=Xe("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}}const sn=new WeakMap;function rn(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),ln(t,n)||{type:0,value:""}}function ln(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 ln(t,n)}}return null}(t,n)||function(t,e){if(t.hasAttribute("t-debug")){t.removeAttribute("t-debug");const n=ln(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=ln(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=ln(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=ln(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=ln(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=ln(s,e),s.remove());return{type:4,condition:n,content:o,tElif:i.length?i:null,tElse:r}}(t,n)||function(t,e){if("off"!==t.getAttribute("t-translation"))return null;t.removeAttribute("t-translation");const n=ln(t,e);if(3===n?.type){return pn(n.content.map(hn))}return hn(n)}(t,n)||function(t,e){const n=t.getAttribute("t-translation-context");if(!n)return null;t.removeAttribute("t-translation-context");const o=ln(t,e);if(3===o?.type){return pn(o.content.map(t=>dn(t,n)))}return dn(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=mn(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=ln(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=ln(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:mn(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=un.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=ln(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=mn(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&&cn.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"),isProxy:s.includes(".proxy")},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=fn(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=fn(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 mn(t,e)}(t,n):function(t,e){if(t.nodeType===Node.TEXT_NODE){let n=t.textContent||"";return e.inPreTag||!an.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 an=/[\r\n]/;const cn=new Set(["svg","g","path"]);const un=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 hn(t){const e={type:15,content:t};return t?.hasNoRepresentation&&(e.hasNoRepresentation=!0),e}function dn(t,e){const n={type:16,content:t,translationCtx:e};return t?.hasNoRepresentation&&(n.hasNoRepresentation=!0),n}function fn(t,e){const n=[];for(let o of t.childNodes){const t=ln(o,e);t&&(3===t.type?n.push(...t.content):n.push(t))}return n}function pn(t){const e={type:3,content:t};return t.every(t=>t.hasNoRepresentation)&&(e.hasNoRepresentation=!0),e}function mn(t,e){const n=fn(t,e);switch(n.length){case 0:return null;case 1:return n[0];default:return pn(n)}}function gn(t,o={hasGlobalValues:!1}){const s=function(t,e){const o={inPreTag:!1,customDirectives:e};if("string"==typeof t)return rn(n(`<t>${t}</t>`).firstChild,o);let s=sn.get(t);return s||(s=rn(t.cloneNode(!0),o),sn.set(t,s)),s}(t,o.customDirectives),i=new on(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 bn(t){const e=It(()=>(Wt(void 0),yn(e),Wt(e),t()),!1);return Vt()?.observers.add(e),Ft(e),function(){const t=Vt();Wt(void 0),yn(e),Wt(t)}}function yn(t){Kt(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=Ot.EXECUTED,Kt(e),yn(e);t.observers.clear()}class vn{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 wn{app;config;onDestroyCb=[];computations=[];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()();for(const t of this.computations)Ut(t);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 $n(t,e){Array.isArray(e)?t.startPlugins(e):t.onDestroyCb.push(bn(()=>{const n=e.items();Ht(()=>t.startPlugins(n))}))}let xn;"undefined"!=typeof window&&(xn=window.requestAnimationFrame.bind(window));class Nn{static requestAnimationFrame=xn;tasks=new Set;requestAnimationFrame;frame=0;delayedRenders=[];cancelledNodes=new Set;processing=!1;constructor(){this.requestAnimationFrame=Nn.requestAnimationFrame,this.processTasks=this.processTasks.bind(this)}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){if(t.root!==t){this.tasks.delete(t);continue}const e=Gt.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)}for(let t of this.tasks)3===t.node.status&&this.tasks.delete(t);this.processing=!1}}}let kn=!1;const En=new Set;"undefined"!=typeof window&&(window.__OWL_DEVTOOLS__||={apps:En,Fiber:Jt,RootFiber:Qt,toRaw:ce,proxy:ge});class Tn extends _e{static validateTarget=_;static apps=En;static version="3.0.0-alpha.25";name;scheduler=new Nn;roots=new Set;pluginManager;constructor(t={}){super(t),this.name=t.name||"",En.add(this),this.pluginManager=new wn(this,{config:t.config}),t.plugins&&$n(this.pluginManager,t.plugins),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=new ee(t,n,this,null,null)}catch(t){a=t,s(t)}finally{r()}const c={node:l,promise:i,mount:(t,e)=>(a||(Tn.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=qt.get(t);i||(i=[],qt.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(),En.delete(this)}_handleError(t){throw t}}function An(t,e,n){if(t.app.dev){const o=t.component,s=`${o?o.constructor.name:"Component"}.${n}`;return{[s]:(...t)=>e.call(o,...t)}[s]}return e.bind(t.component)}function Cn(t){const e=_t();"component"===e.type?e.node.willDestroy.unshift(An(e.node,t,"onWillDestroy")):e.manager.onDestroyCb.push(t)}function _n(t,e={}){const n=It(()=>{const e=t();return Object.is(n.value,e)||Mt(n),e},!0);function o(){return n.state!==Ot.EXECUTED&&Ft(n),Pt(n),n.value}o[Rt]=n,o.set=e.set??(()=>{});const s=Ct.at(-1);return s&&("component"===s.type?s.node.computations.push(n):"plugin"===s.type&&s.manager.computations.push(n)),o}function Dn(t,e){const n={type:"signal",value:t,observers:new Set};let o=e(n);const s=()=>(Pt(n),o);return s[Rt]=n,s.set=function(t){Object.is(n.value,t)||(n.value=t,o=e(n),Mt(n))},s}function Sn(t){return Dn(t,t=>t.value)}function On(t,n,o="Value does not match the type"){const s=Ln(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 Rn(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 Rn(t,this.value,this.path,this)},withKey(e){return Rn(t,this.value[e],this.path.concat(e),this)}}}function Ln(t,e){const n=[];return e(Rn(n,t,[])),n}Sn.invalidate=function(t){if("function"!=typeof t||"signal"!==t[Rt]?.type)throw new e(`Value is not a signal (${t})`);Mt(t[Rt])},Sn.Array=function(t){return Dn(t,t=>me(t.value,t))},Sn.Map=function(t){return Dn(t,t=>me(t.value,t))},Sn.Object=function(t){return Dn(t,t=>me(t.value,t))},Sn.Set=function(t){return Dn(t,t=>me(t.value,t))};function Bn(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`})}}function In(t){return function(e){e.value instanceof t||e.addIssue({message:`value is not an instance of '${t.name}'`})}}function Pn(t){return function(e){e.value!==t&&e.addIssue({message:`value is not equal to ${"string"==typeof t?`'${t}'`:t}`})}}function Mn(t,e,n){if("object"!=typeof t.value||Array.isArray(t.value)||null===t.value)return void t.addIssue({message:"value is not an object"});if(!e)return;const o=!Array.isArray(e);let s=e;if(Array.isArray(e)){s={};for(const t of e)s[t]=null}const i=[];for(const e in s){const n=e.endsWith("?")?e.slice(0,-1):e;void 0!==t.value[n]?o&&t.withKey(n).validate(s[e]):e.endsWith("?")||i.push(n)}if(i.length&&t.addIssue({message:"object value has missing keys",missingKeys:i}),n){const e=[];for(const n in t.value)n in s||`${n}?`in s||e.push(n);e.length&&t.addIssue({message:"object value has unknown keys",unknownKeys:e})}}function jn(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 Vn={and:function(t){return function(e){for(const n of t)e.validate(n)}},any:function(){return 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(){return function(t){"boolean"!=typeof t.value&&t.addIssue({message:"value is not a boolean"})}},component:function(){return Bn(St)},constructor:Bn,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:In,literal:Pn,number:function(){return function(t){"number"!=typeof t.value&&t.addIssue({message:"value is not a number"})}},object:function(t={}){return function(e){Mn(e,t,!1)}},or:jn,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 jn([Pn(null),In(t)])},selection:function(t){return jn(t.map(Pn))},signal:function(t){return function(t){"function"==typeof t.value&&t.value[Rt]||t.addIssue({message:"value is not a reactive value"})}},strictObject:function(t){return function(e){Mn(e,t,!0)}},string:function(){return 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 Wn(t){Cn(bn(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 Fn={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:Nt,multi:U,text:Y,toggler:l,createBlock:ct,html:Tt,comment:J},Kn={version:Tn.version};_e.prototype._compileTemplate=function(t,e){return gn(e,{name:t,dev:this.dev,translateFn:this.translateFn,translatableAttributes:this.translatableAttributes,customDirectives:this.customDirectives,hasGlobalValues:this.hasGlobalValues})},t.App=Tn,t.Component=St,t.EventBus=D,t.OwlError=e,t.Plugin=vn,t.Registry=class{_map=Sn.Object(Object.create(null));_name;_validation;constructor(t={}){this._name=t.name||"registry",this._validation=t.validation}entries=_n(()=>Object.entries(this._map()).sort((t,e)=>t[1][0]-e[1][0]).map(([t,e])=>[t,e[1]]));items=_n(()=>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}')`;On(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=Sn.Array([]);_name;_validation;constructor(t={}){this._name=t.name,this._validation=t.validation}items=_n(()=>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}')`:"";On(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__=Kn,t.assertType=On,t.batched=C,t.blockDom=Fn,t.computed=_n,t.config=function(t,e){const{app:n,manager:o}=_t("plugin");return n.dev&&e&&On(o.config,Vn.object({[t]:e}),"Config does not match the type"),o.config[t.endsWith("?")?t.slice(0,-1):t]},t.effect=bn,t.htmlEscape=O,t.markRaw=ae,t.markup=R,t.mount=async function(t,e,n={}){return new Tn(n).createRoot(t,n).mount(e,n)},t.onError=function(t){const{node:e}=_t("component");let n=qt.get(e);n||(n=[],qt.set(e,n)),n.push(t.bind(e.component))},t.onMounted=function(t){const{node:e}=_t("component");e.mounted.push(An(e,t,"onMounted"))},t.onPatched=function(t){const{node:e}=_t("component");e.patched.push(An(e,t,"onPatched"))},t.onWillDestroy=Cn,t.onWillPatch=function(t){const{node:e}=_t("component");e.willPatch.unshift(An(e,t,"onWillPatch"))},t.onWillStart=function(t){const{node:e}=_t("component");e.willStart.push(An(e,t,"onWillStart"))},t.onWillUnmount=function(t){const{node:e}=_t("component");e.willUnmount.unshift(An(e,t,"onWillUnmount"))},t.onWillUpdateProps=function(t){const{node:e}=_t("component");e.willUpdateProps.push(An(e,t,"onWillUpdateProps"))},t.plugin=function(t){const n=_t(),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=function(t,e){const{node:n,app:o,componentName:s}=_t("component");function i(t){return void 0===n.props[t]&&e?e[t]:n.props[t]}Object.assign(n.defaultProps,e);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(Vn.object(t))}}(t,e):Vn.object(t);On(n.props,o,`Invalid component props (${s})`),n.willUpdateProps.push(t=>{On(t,o,`Invalid component props (${s})`)})}}else{const t=t=>{const n=[];for(const e in t)1!==e.charCodeAt(0)&&n.push(e);if(e)for(const o in e)o in t||n.push(o);return n};let o=t(n.props);l(o),n.willUpdateProps.push(e=>{for(const t of o)Reflect.deleteProperty(r,t);o=t(e),l(o)})}return r},t.providePlugins=function(t,e){const{node:n}=_t("component"),o=new wn(n.app,{parent:n.pluginManager,config:e});n.pluginManager=o,Cn(()=>o.destroy()),$n(o,t)},t.proxy=ge,t.signal=Sn,t.status=function(t){switch(t.__owl__.status){case 0:return"new";case 2:return"cancelled";case 1:return t instanceof vn?"started":"mounted";case 3:return"destroyed"}},t.toRaw=ce,t.types=Vn,t.untrack=Ht,t.useApp=function(){return _t().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=Dt(t,e)),e),runWithAsyncProtection:e=>(t&&(e=Dt(t,e)),e())}},t.useEffect=Wn,t.useListener=function(t,e,n,o){"function"==typeof t?Wn(()=>{const s=t();if(s)return s.addEventListener(e,n,o),()=>s.removeEventListener(e,n,o)}):(t.addEventListener(e,n,o),Cn(()=>t.removeEventListener(e,n,o)))},t.useResource=function(t,e){for(let n of e)t.add(n);Cn(()=>{for(let n of e)t.delete(n)})},t.validateType=Ln,t.whenReady=function(t){return new Promise(function(t){"loading"!==document.readyState?t(!0):document.addEventListener("DOMContentLoaded",t,!1)}).then(t||function(){})},t.xml=Se,Kn.date="2026-04-10T10:35:25.288Z",Kn.hash="a78b72d",Kn.url="https://github.com/odoo/owl"}(this.owl=this.owl||{});
|
|
1
|
+
"use strict";var owl=(()=>{var ht=Object.defineProperty;var Tr=Object.getOwnPropertyDescriptor;var Nr=Object.getOwnPropertyNames;var Er=Object.prototype.hasOwnProperty;var $r=(e,t)=>{for(var n in t)ht(e,n,{get:t[n],enumerable:!0})},Sr=(e,t,n,r)=>{if(t&&typeof t=="object"||typeof t=="function")for(let i of Nr(t))!Er.call(e,i)&&i!==n&&ht(e,i,{get:()=>t[i],enumerable:!(r=Tr(t,i))||r.enumerable});return e};var kr=e=>Sr(ht({},"__esModule",{value:!0}),e);var _o={};$r(_o,{App:()=>zt,Component:()=>Z,ErrorBoundary:()=>ds,EventBus:()=>mi,OwlError:()=>S,Plugin:()=>kn,Portal:()=>bs,Registry:()=>si,Resource:()=>oi,Scope:()=>It,Suspense:()=>ws,TemplateSet:()=>Me,__info__:()=>ks,assertType:()=>ie,asyncComputed:()=>Kr,batched:()=>bn,blockDom:()=>Ss,computed:()=>De,config:()=>Es,effect:()=>et,getScope:()=>Oe,globalTemplates:()=>Ze,htmlEscape:()=>Rn,markRaw:()=>wn,markup:()=>Fe,mount:()=>ss,onError:()=>tr,onMounted:()=>er,onPatched:()=>cs,onWillDestroy:()=>ge,onWillPatch:()=>as,onWillStart:()=>Qn,onWillUnmount:()=>us,onWillUpdateProps:()=>ls,plugin:()=>Ns,prop:()=>Ts,props:()=>rt,providePlugins:()=>$s,proxy:()=>Pt,signal:()=>I,status:()=>Bi,toRaw:()=>me,types:()=>j,untrack:()=>gn,useApp:()=>ms,useEffect:()=>it,useListener:()=>ps,useScope:()=>z,validateType:()=>Nn,whenReady:()=>vi,xml:()=>J});var Cr="3.0.0-alpha.28",S=class extends Error{cause},C={NEW:0,MOUNTED:1,CANCELLED:2,DESTROYED:3};function bn(e){let t=!1;return function(...r){t||(t=!0,queueMicrotask(()=>{t=!1,e(...r)}))}}var xt=(e=>(e[e.EXECUTED=0]="EXECUTED",e[e.STALE=1]="STALE",e[e.PENDING=2]="PENDING",e))(xt||{}),Ae=Symbol("Atom"),ke=[],V;function Ot(e,t,n=1){return{state:n,value:void 0,compute:e,sources:new Set,observers:new Set,isDerived:t}}function Rt(e){V&&(V.sources.add(e),e.observers.add(V))}function Je(e){for(let t of e.observers)t.state===0&&(t.isDerived?_r(t):ke.push(t)),t.state=1;Ar()}var Ar=bn(Dr);function Dr(){for(let e=0;e<ke.length;e++)Qe(ke[e]);ke.length=0}function fe(){return V}function B(e){V=e}function Qe(e){let t=e.state;if(t===0)return;if(t===2){for(let r of e.sources)"compute"in r&&Qe(r);if(e.state!==1){e.state=0;return}}He(e);let n=V;V=e,e.value=e.compute(),e.state=0,V=n}function He(e){let t=e.sources;for(let n of t)n.observers.delete(e);t.clear()}function Mt(e){for(let t of e.sources)t.observers.delete(e),"compute"in t&&t.isDerived&&t.observers.size===0&&Mt(t);e.sources.clear(),e.state=1}function _r(e){let t=[e],n;for(;n=t.pop();)for(let r of n.observers)r.state||(r.state=2,r.isDerived?t.push(r):ke.push(r))}function gn(e){let t=V;V=void 0;let n;try{n=e()}finally{V=t}return n}var Y=[];function z(){let e=Oe();if(!e)throw new S("No active scope");return e}var It=class{app;status=C.NEW;computations=[];willStart=[];_controller=null;_destroyCbs=null;constructor(e){this.app=e}run(e){Y.push(this);try{return e()}finally{Y.pop()}}get abortSignal(){return this.status>C.MOUNTED?(this._controller||(this._controller=new AbortController,this._controller.abort()),this._controller.signal):(this._controller??=new AbortController).signal}async until(e){if(this.status>C.MOUNTED)throw rn();let t=await e;if(this.status>C.MOUNTED)throw rn();return t}onDestroy(e){if(this.status>=C.DESTROYED){e();return}(this._destroyCbs??=[]).push(e)}cancel(){this.status>C.MOUNTED||(this.status=C.CANCELLED,this._controller?.abort())}finalize(e){if(this.status>=C.DESTROYED)return;this._controller&&!this._controller.signal.aborted&&this._controller.abort();let t=this._destroyCbs;if(t){this._destroyCbs=null;for(let n=t.length-1;n>=0;n--)try{t[n]()}catch(r){e(r)}}for(let n of this.computations)Mt(n);this.status=C.DESTROYED}decorate(e,t){return e.bind(void 0,this)}};function Oe(){let e=Y.length;return e?Y[e-1]:null}function vt(e){return typeof e=="object"&&e!==null&&e.name==="AbortError"}function rn(){let e=new Error("The operation was aborted");return e.name="AbortError",e}var W=Symbol("Key changes"),xr=Object.prototype.toString,bt=Object.prototype.hasOwnProperty;function Lt(e){if(typeof e!="object"||e===null)return!1;let t=me(e);return Array.isArray(t)||t instanceof Set||t instanceof Map||t instanceof WeakMap?!0:xr.call(t)==="[object Object]"}function ue(e,t){return!t&&Lt(e)?Pt(e):e}var yn=new WeakSet;function wn(e){return yn.add(e),e}function me(e){return Ge.has(e)?Ge.get(e):e}var gt=new WeakMap;function Or(e,t){let n=gt.get(e);n||(n=new Map,gt.set(e,n));let r=n.get(t);return r||(r={value:void 0,observers:new Set},n.set(t,r)),r}function K(e,t,n){Rt(n??Or(e,t))}function q(e,t,n){if(!n){let r=gt.get(e);if(!r||!r.has(t))return;n=r.get(t)}Je(n)}var Ge=new WeakMap,sn=new WeakMap;function ve(e,t){if(!Lt(e))throw new S("Cannot make the given value reactive");if(yn.has(e)||Ge.has(e))return e;let n=sn.get(e);if(n)return n;let r;e instanceof Map?r=ft(e,"Map",t):e instanceof Set?r=ft(e,"Set",t):e instanceof WeakMap?r=ft(e,"WeakMap",t):r=Tn(t);let i=new Proxy(e,r);return sn.set(e,i),Ge.set(i,e),i}function Pt(e){return ve(e,null)}function Tn(e){return{get(t,n,r){K(t,n,e);let i=Reflect.get(t,n,r);if(e||typeof i!="object"||i===null||!Lt(i))return i;let s=Object.getOwnPropertyDescriptor(t,n);return s&&!s.writable&&!s.configurable?i:ve(i,null)},set(t,n,r,i){let s=bt.call(t,n),o=Reflect.get(t,n,i),l=Reflect.set(t,n,me(r),i);return!s&&bt.call(t,n)&&q(t,W,e),(o!==Reflect.get(t,n,i)||n==="length"&&Array.isArray(t))&&q(t,n,e),l},deleteProperty(t,n){let r=Reflect.deleteProperty(t,n);return q(t,W,e),q(t,n,e),r},ownKeys(t){return K(t,W,e),Reflect.ownKeys(t)},has(t,n){return K(t,W,e),Reflect.has(t,n)}}}function $e(e,t,n){return r=>(r=me(r),K(t,r,n),ue(t[e](r),n))}function G(e,t,n){return function*(){K(t,W,n);let r=t.keys();for(let i of t[e]()){let s=r.next().value;K(t,s,n),yield ue(i,n)}}}function on(e,t){return function(r,i){K(e,W,t),e.forEach(function(s,o,l){K(e,o,t),r.call(i,ue(s,t),ue(o,t),ue(l,t))},i)}}function le(e,t,n,r){return(i,s)=>{i=me(i);let o=n.has(i),l=n[t](i),a=n[e](i,s),u=n.has(i);return o!==u&&q(n,W,r),l!==n[t](i)&&q(n,i,r),a}}function ln(e,t){return()=>{let n=[...e.keys()];e.clear(),q(e,W,t);for(let r of n)q(e,r,t)}}var Rr={Set:(e,t)=>({has:$e("has",e,t),add:le("add","has",e,t),delete:le("delete","has",e,t),keys:G("keys",e,t),values:G("values",e,t),entries:G("entries",e,t),[Symbol.iterator]:G(Symbol.iterator,e,t),forEach:on(e,t),clear:ln(e,t),get size(){return K(e,W,t),e.size}}),Map:(e,t)=>({has:$e("has",e,t),get:$e("get",e,t),set:le("set","get",e,t),delete:le("delete","has",e,t),keys:G("keys",e,t),values:G("values",e,t),entries:G("entries",e,t),[Symbol.iterator]:G(Symbol.iterator,e,t),forEach:on(e,t),clear:ln(e,t),get size(){return K(e,W,t),e.size}}),WeakMap:(e,t)=>({has:$e("has",e,t),get:$e("get",e,t),set:le("set","get",e,t),delete:le("delete","has",e,t)})};function ft(e,t,n){let r=Rr[t](e,n);return Object.assign(Tn(n),{get(i,s){return bt.call(r,s)?r[s]:(K(i,s,n),ue(i[s],n))}})}function Re(e,t){let n={type:"signal",value:e,observers:new Set},r=t(n),i=()=>(Rt(n),r);return i[Ae]=n,i.set=function(o){Object.is(n.value,o)||(n.value=o,r=t(n),Je(n))},i}function Mr(e){if(typeof e!="function"||e[Ae]?.type!=="signal")throw new S(`Value is not a signal (${e})`);Je(e[Ae])}function Ir(e){return Re(e,t=>ve(t.value,t))}function Lr(e){return Re(e,t=>ve(t.value,t))}function Pr(e){return Re(e,t=>ve(t.value,t))}function Br(e){return Re(e,t=>ve(t.value,t))}function I(e){return Re(e,t=>t.value)}I.invalidate=Mr;I.Array=Ir;I.Map=Pr;I.Object=Lr;I.Set=Br;function jr(){throw new S("Cannot write to a read-only computed value. Pass a `set` option to make it writable.")}function De(e,t={}){let n=Ot(()=>{let i=e();return Object.is(n.value,i)||Je(n),i},!0);function r(){return n.state!==0&&Qe(n),Rt(n),n.value}return r[Ae]=n,r.set=t.set??jr,Oe()?.computations.push(n),r}function et(e){let t=Ot(()=>(B(void 0),yt(t),B(t),e()),!1);return fe()?.observers.add(t),Qe(t),function(){let r=fe();B(void 0),yt(t),B(r)}}function yt(e){He(e),Vr(e);for(let t of e.observers)t.state=0,He(t),yt(t);e.observers.clear()}function Vr(e){let t=e.value;t&&typeof t=="function"&&(t(),e.value=void 0)}function Kr(e,t={}){let n=I(t.initial),r=I(!1),i=I(null),s=I(0),o=Oe(),l=0,a=null,u=et(()=>{s();let f=++l;a&&a.abort();let p=new AbortController;a=p;let m=[p.signal];o?.abortSignal&&m.push(o.abortSignal),r.set(!0),i.set(null);let w;try{w=e({abortSignal:AbortSignal.any(m)})}catch(d){if(f!==l)return;if(vt(d)){r.set(!1);return}i.set(d),r.set(!1);return}w.then(d=>{f===l&&(n.set(d),r.set(!1))},d=>{if(f===l){if(vt(d)){r.set(!1);return}i.set(d),r.set(!1)}})});function c(){u(),a?.abort(),a=null}o?.onDestroy(c);let h=(()=>n());return h.loading=()=>r(),h.error=()=>i(),h.refresh=()=>s.set(s()+1),h.dispose=c,h}function ie(e,t,n="Value does not match the type"){let r=Nn(e,t);if(r.length){let i=JSON.stringify(r,(s,o)=>typeof o=="function"?o.name:o,2);throw new S(`${n}
|
|
2
|
+
${i}`)}}function wt(e,t,n,r){return{issueDepth:0,path:n,value:t,get isValid(){return!e.length},addIssue(i){e.push({received:this.value,path:this.path,...i})},mergeIssues(i){e.push(...i)},validate(i){i(this),!this.isValid&&r&&(r.issueDepth=this.issueDepth+1)},withIssues(i){return wt(i,this.value,this.path,this)},withKey(i){return wt(e,this.value[i],this.path.concat(i),this)}}}function Nn(e,t){let n=[];return t(wt(n,e,[])),n}function Fr(){return function(){}}function Wr(){return function(t){typeof t.value!="boolean"&&t.addIssue({message:"value is not a boolean"})}}function Ur(){return function(t){typeof t.value!="number"&&t.addIssue({message:"value is not a number"})}}function zr(){return function(t){typeof t.value!="string"&&t.addIssue({message:"value is not a string"})}}function Hr(e){return function(n){if(!Array.isArray(n.value)){n.addIssue({message:"value is not an array"});return}if(e)for(let r=0;r<n.value.length;r++)n.withKey(r).validate(e)}}function En(e){return function(n){(typeof n.value!="function"||!(n.value===e||n.value.prototype instanceof e))&&n.addIssue({message:`value is not '${e.name}' or an extension`})}}function Gr(e,t,n="value does not match custom validation"){return function(i){i.validate(e),i.isValid&&(t(i.value)||i.addIssue({message:n}))}}function qr(e=[],t=void 0){return function(r){typeof r.value!="function"&&r.addIssue({message:"value is not a function"})}}function $n(e){return function(n){n.value instanceof e||n.addIssue({message:`value is not an instance of '${e.name}'`})}}function Xr(e){return function(n){for(let r of e)n.validate(r)}}function Bt(e){return function(n){n.value!==e&&n.addIssue({message:`value is not equal to ${typeof e=="string"?`'${e}'`:e}`})}}function Yr(e){return jt(e.map(Bt))}function Sn(e,t,n){if(typeof e.value!="object"||Array.isArray(e.value)||e.value===null){e.addIssue({message:"value is not an object"});return}if(!t)return;let r=!Array.isArray(t),i=t;if(Array.isArray(t)){i={};for(let o of t)i[o]=null}let s=[];for(let o in i){let l=o.endsWith("?")?o.slice(0,-1):o;if(e.value[l]===void 0){o.endsWith("?")||s.push(l);continue}r&&e.withKey(l).validate(i[o])}if(s.length&&e.addIssue({message:"object value has missing keys",missingKeys:s}),n){let o=[];for(let l in e.value)!(l in i)&&!(`${l}?`in i)&&o.push(l);o.length&&e.addIssue({message:"object value has unknown keys",unknownKeys:o})}}function Zr(e={}){return function(n){Sn(n,e,!1)}}function Jr(e){return function(n){Sn(n,e,!0)}}function Qr(e){return function(n){n.value instanceof Promise||n.addIssue({message:"value is not a promise"})}}function ei(e){return function(n){if(typeof n.value!="object"||Array.isArray(n.value)||n.value===null){n.addIssue({message:"value is not an object"});return}if(e)for(let r in n.value)n.withKey(r).validate(e)}}function ti(e){return function(n){if(!Array.isArray(n.value)){n.addIssue({message:"value is not an array"});return}if(n.value.length!==e.length){n.addIssue({message:"tuple value does not have the correct length"});return}for(let r=0;r<e.length;r++)n.withKey(r).validate(e[r])}}function jt(e){return function(n){let r=0,i=[];for(let s of e){let o=n.withIssues(i);if(o.validate(s),i.length===r||o.issueDepth>0){n.mergeIssues(i.slice(r));return}r=i.length}n.addIssue({message:"value does not match union type",subIssues:i})}}function ni(e){return function(n){(typeof n.value!="function"||!n.value[Ae])&&n.addIssue({message:"value is not a reactive value"})}}function ri(e){return jt([Bt(null),$n(e)])}var ii={and:Xr,any:Fr,array:Hr,boolean:Wr,constructor:En,customValidator:Gr,function:qr,instanceOf:$n,literal:Bt,number:Ur,object:Zr,or:jt,promise:Qr,record:ei,ref:ri,selection:Yr,signal:ni,strictObject:Jr,string:zr,tuple:ti},si=class{_map=I.Object(Object.create(null));_name;_validation;constructor(e={}){this._name=e.name||"registry",this._validation=e.validation}entries=De(()=>Object.entries(this._map()).sort((t,n)=>t[1][0]-n[1][0]).map(([t,n])=>[t,n[1]]));items=De(()=>this.entries().map(e=>e[1]));addById(e,t={}){if(!e.id)throw new S(`Item should have an id key (registry '${this._name}')`);return this.add(e.id,e,t)}add(e,t,n={}){if(!n.force&&e in this._map())throw new S(`Key "${e}" is already registered (registry '${this._name}'). Use { force: true } to overwrite.`);if(this._validation){let r=this._name?` (registry '${this._name}', key: '${e}')`:` (key: '${e}')`;ie(t,this._validation,`Registry entry does not match the type${r}`)}return this._map()[e]=[n.sequence??50,t],this}get(e,t){let n=e in this._map();if(!n&&arguments.length<2)throw new S(`Cannot find key "${e}" (registry '${this._name}')`);return n?this._map()[e][1]:t}delete(e){delete this._map()[e]}has(e){return e in this._map()}use(e,t,n={}){let r=z();return this.add(e,t,n),r.onDestroy(()=>{this._map()[e]?.[1]===t&&this.delete(e)}),this}useById(e,t={}){if(!e.id)throw new S(`Item should have an id key (registry '${this._name}')`);return this.use(e.id,e,t)}},oi=class{_items=I.Array([]);_name;_validation;constructor(e={}){this._name=e.name,this._validation=e.validation}items=De(()=>this._items().sort((e,t)=>e[0]-t[0]).map(e=>e[1]));add(e,t={}){if(this._validation){let n=this._name?` (resource '${this._name}')`:"";ie(e,this._validation,`Resource item does not match the type${n}`)}return this._items().push([t.sequence??50,e]),this}delete(e){let t=this._items().filter(([n,r])=>r!==e);return this._items.set(t),this}has(e){return this._items().some(([t,n])=>n===e)}use(e,t={}){let n=z();return this.add(e,t),n.onDestroy(()=>this.delete(e)),this}},kn=class{static _shadowId;static get id(){return this._shadowId??this.name}static set id(e){this._shadowId=e}__owl__;constructor(e){this.__owl__=e}setup(){}},tt=class extends It{config;plugins;ready=Promise.resolve();constructor(e,t={}){if(super(e),this.config=t.config??{},t.parent){let n=t.parent;n.onDestroy(()=>this.destroy()),this.plugins=Object.create(n.plugins)}else this.plugins={}}destroy(){this.finalize(e=>console.error(e))}getPluginById(e){return this.plugins[e]||null}getPlugin(e){return this.getPluginById(e.id)}startPlugin(e){if(!e.id)throw new S(`Plugin "${e.name}" has no id`);if(this.plugins.hasOwnProperty(e.id)){let n=this.getPluginById(e.id).constructor;if(n!==e)throw new S(`Trying to start a plugin with the same id as an other plugin (id: '${e.id}', existing plugin: '${n.name}', starting plugin: '${e.name}')`);return null}let t=new e(this);return this.plugins[e.id]=t,t.setup(),t}startPlugins(e){Y.push(this);try{for(let n of e)this.startPlugin(n)}finally{Y.pop()}let t=this.willStart.splice(0);t.length?this.ready=Promise.all(t.map(n=>n())).then(()=>{this.status<C.MOUNTED&&(this.status=C.MOUNTED)}):this.status<C.MOUNTED&&(this.status=C.MOUNTED)}};function Cn(e,t){Array.isArray(t)?e.startPlugins(t):e.onDestroy(et(()=>{let n=t.items();gn(()=>e.startPlugins(n))}))}var X=new WeakMap,se=new WeakMap;function An(e,t,n,r){for(;e;){r&&e.fiber&&X.set(e.fiber,t);let i=se.get(e);if(i)for(let s=i.length-1;s>=0;s--)try{return i[s](t,n),{handled:!0,error:t}}catch(o){t=o}e=e.parent}return{handled:!1,error:t}}function Dn(e){return(t,n)=>{let{handled:r}=An(e,t,n,!1);r||e.app._handleError(n())}}function de(e){let{error:t}=e,n="node"in e?e.node:e.fiber.node,r="fiber"in e?e.fiber:n.fiber,i=n.app;if(r){let l=r;do l.node.fiber=l,X.set(l,t),l=l.parent;while(l);X.set(r.root,t)}let s=()=>{try{i.destroy()}catch{}return Object.assign(new S("[Owl] Unhandled error. Destroying the root component"),{cause:t})},o=An(n,t,s,!0);o.handled||(t=o.error,i._handleError(s()))}function _n(e){e=e.slice();let t=[],n;for(;(n=e[0])&&typeof n=="string";)t.push(e.shift());return{modifiers:t,data:e}}var be={shouldNormalizeDom:!0,mainEventHandler:(e,t,n)=>(typeof e=="function"?e(t):Array.isArray(e)&&(e=_n(e).data,e[0](e[1],t)),!1)},an=document.createTextNode(""),li=class{key;child;parentEl;constructor(e,t){this.key=e,this.child=t}mount(e,t){this.parentEl=e,this.child.mount(e,t)}moveBeforeDOMNode(e,t){this.child.moveBeforeDOMNode(e,t)}moveBeforeVNode(e,t){this.moveBeforeDOMNode(e&&e.firstNode()||t)}patch(e,t){if(this===e)return;let n=this.child,r=e.child;if(this.key===e.key)n.patch(r,t);else{let i=n.firstNode();i.parentElement.insertBefore(an,i),t&&n.beforeRemove(),n.remove(),r.mount(this.parentEl,an),this.child=r,this.key=e.key}}beforeRemove(){this.child.beforeRemove()}remove(){this.child.remove()}firstNode(){return this.child.firstNode()}toString(){return this.child.toString()}};function re(e,t){return new li(e,t)}var Tt,_e,Vt,xn;if(typeof Element<"u"){({setAttribute:Tt,removeAttribute:_e}=Element.prototype);let e=DOMTokenList.prototype;Vt=e.add,xn=e.remove}var On=Array.isArray,{split:cn,trim:ce}=String.prototype,un=/\s+/;function he(e,t){switch(t){case!1:case null:case void 0:_e.call(this,e);break;case!0:Tt.call(this,e,"");break;default:Tt.call(this,e,t)}}function ai(e){return function(t){he.call(this,e,t)}}function ci(e){if(On(e))e[0]==="class"?$t.call(this,e[1]):e[0]==="style"?St.call(this,e[1]):he.call(this,e[0],e[1]);else for(let t in e)t==="class"?$t.call(this,e[t]):t==="style"?St.call(this,e[t]):he.call(this,t,e[t])}function ui(e,t){if(On(e)){let n=e[0],r=e[1];if(n===t[0]){if(r===t[1])return;n==="class"?Ve.call(this,r,t[1]):n==="style"?Ke.call(this,r,t[1]):he.call(this,n,r)}else _e.call(this,t[0]),he.call(this,n,r)}else{for(let n in t)n in e||(n==="class"?Ve.call(this,"",t[n]):n==="style"?Ke.call(this,"",t[n]):_e.call(this,n));for(let n in e){let r=e[n];r!==t[n]&&(n==="class"?Ve.call(this,r,t[n]):n==="style"?Ke.call(this,r,t[n]):he.call(this,n,r))}}}function Nt(e){let t={};switch(typeof e){case"string":let n=ce.call(e);if(!n)return{};let r=cn.call(n,un);for(let i=0,s=r.length;i<s;i++)t[r[i]]=!0;return t;case"object":for(let i in e){let s=e[i];if(s){if(i=ce.call(i),!i)continue;let o=cn.call(i,un);for(let l of o)t[l]=s}}return t;case"undefined":return{};case"number":return{[e]:!0};default:return{[e]:!0}}}var dt={};function hi(e){if(e in dt)return dt[e];let t=e.replace(/[A-Z]/g,n=>"-"+n.toLowerCase());return dt[e]=t,t}function Et(e){let t={};switch(typeof e){case"string":{let n=ce.call(e);if(!n)return{};let r=n.split(";");for(let i of r){if(i=ce.call(i),!i)continue;let s=i.indexOf(":");if(s===-1)continue;let o=ce.call(i.slice(0,s)),l=ce.call(i.slice(s+1));o&&l&&l!=="undefined"&&(t[o]=l)}return t}case"object":for(let n in e){let r=e[n];(r||r===0)&&(t[hi(n)]=String(r))}return t;default:return{}}}function $t(e){e=e===""?{}:Nt(e);for(let t in e)Vt.call(this.classList,t)}function Ve(e,t){t=t===""?{}:Nt(t),e=e===""?{}:Nt(e);for(let n in t)n in e||xn.call(this.classList,n);for(let n in e)e[n]!==t[n]&&Vt.call(this.classList,n)}function St(e){e=e===""?{}:Et(e);let t=this.style;for(let n in e)t.setProperty(n,e[n])}function Ke(e,t){t=t===""?{}:Et(t),e=e===""?{}:Et(e);let n=this.style;for(let r in t)r in e||n.removeProperty(r);for(let r in e)e[r]!==t[r]&&n.setProperty(r,e[r]);n.cssText||_e.call(this,"style")}function fi(e){if(!e)return!1;if(e.ownerDocument.contains(e))return!0;let t=e.getRootNode();return t instanceof ShadowRoot&&e.ownerDocument.contains(t.host)}function di(e,t){let n=e,r=t.defaultView.ShadowRoot;for(;n;){if(n===t)return!0;if(n.parentNode)n=n.parentNode;else if(n instanceof r&&n.host)n=n.host;else return!1}return!1}function pi(e){let t=e&&e.ownerDocument;if(t){if(!t.defaultView)throw new S("Cannot mount a component: the target document is not attached to a window (defaultView is missing)");let n=t.defaultView.HTMLElement;if(e instanceof n||e instanceof ShadowRoot){if(!di(e,t))throw new S("Cannot mount a component on a detached dom node");return}}throw new S("Cannot mount component: the target is not a valid DOM element")}var mi=class extends EventTarget{trigger(e,t){this.dispatchEvent(new CustomEvent(e,{detail:t}))}};function vi(e){return new Promise(function(t){document.readyState!=="loading"?t(!0):document.addEventListener("DOMContentLoaded",t,!1)}).then(e||function(){})}var qe=class extends String{};function Rn(e){return e instanceof qe?e:e===void 0?Fe(""):typeof e=="number"?Fe(String(e)):([["&","&"],["<","<"],[">",">"],["'","'"],['"',"""],["`","`"]].forEach(t=>{e=String(e).replace(new RegExp(t[0],"g"),t[1])}),Fe(e))}function Fe(e,...t){if(!Array.isArray(e))return new qe(e);let n=e,r="",i=0;for(;i<t.length;++i)r+=n[i]+Rn(t[i]);return r+=n[i],new qe(r)}function Mn(e){let t=e.split(".")[0],n=e.includes(".capture"),r=e.includes(".passive");return e.includes(".synthetic")?wi(t,n,r):gi(t,n,r)}var bi=1;function gi(e,t=!1,n=!1){let r=`__event__${e}_${bi++}`;t&&(r=`${r}_capture`);function i(u){let c=u.currentTarget;if(!c||!fi(c))return;let h=c[r];h&&be.mainEventHandler(h,u,c)}let s={capture:t,passive:n};function o(u){this[r]=u,this.addEventListener(e,i,s)}function l(){delete this[r],this.removeEventListener(e,i,s)}function a(u){this[r]=u}return{setup:o,update:a,remove:l}}var yi=1;function wi(e,t=!1,n=!1){let r=`__event__synthetic_${e}`;t&&(r=`${r}_capture`),Ni(e,r,t,n);let i=yi++;function s(l){let a=this[r]||{};a[i]=l,this[r]=a}function o(){delete this[r]}return{setup:s,update:s,remove:o}}function Ti(e,t){let n=t.target;for(;n!==null;){let r=n[e];if(r){for(let i of Object.values(r))if(be.mainEventHandler(i,t,n))return}n=n.parentNode}}var hn={};function Ni(e,t,n=!1,r=!1){hn[t]||(document.addEventListener(e,i=>Ti(t,i),{capture:n,passive:r}),hn[t]=!0)}var Ei=(e,t)=>Object.getOwnPropertyDescriptor(e,t),Se,In,kt;if(typeof Node<"u"){let e=Node.prototype;Se=e.insertBefore,In=Ei(e,"textContent").set,kt=e.removeChild}var Ln=class{children;anchors;parentEl;isOnlyChild;constructor(e){this.children=e}mount(e,t){let n=this.children,r=n.length,i=new Array(r);for(let s=0;s<r;s++){let o=n[s];if(o)o.mount(e,t);else{let l=document.createTextNode("");i[s]=l,Se.call(e,l,t)}}this.anchors=i,this.parentEl=e}moveBeforeDOMNode(e,t=this.parentEl){this.parentEl=t;let n=this.children,r=this.anchors;for(let i=0,s=n.length;i<s;i++){let o=n[i];if(o)o.moveBeforeDOMNode(e,t);else{let l=r[i];Se.call(t,l,e)}}}moveBeforeVNode(e,t){if(e){let s=e.children[0];t=(s?s.firstNode():e.anchors[0])||null}let n=this.children,r=this.parentEl,i=this.anchors;for(let s=0,o=n.length;s<o;s++){let l=n[s];if(l)l.moveBeforeVNode(null,t);else{let a=i[s];Se.call(r,a,t)}}}patch(e,t){if(this===e)return;let n=this.children,r=e.children,i=this.anchors,s=this.parentEl;for(let o=0,l=n.length;o<l;o++){let a=n[o],u=r[o];if(a)if(u)a.patch(u,t);else{let c=a.firstNode(),h=document.createTextNode("");i[o]=h,Se.call(s,h,c),t&&a.beforeRemove(),a.remove(),n[o]=void 0}else if(u){n[o]=u;let c=i[o];u.mount(s,c),kt.call(s,c)}}}beforeRemove(){let e=this.children;for(let t=0,n=e.length;t<n;t++){let r=e[t];r&&r.beforeRemove()}}remove(){let e=this.parentEl;if(this.isOnlyChild)In.call(e,"");else{let t=this.children,n=this.anchors;for(let r=0,i=t.length;r<i;r++){let s=t[r];s?s.remove():kt.call(e,n[r])}}}firstNode(){let e=this.children[0];return e?e.firstNode():this.anchors[0]}toString(){return this.children.map(e=>e?e.toString():"").join("")}};function Kt(e){return new Ln(e)}var $i=(e,t)=>Object.getOwnPropertyDescriptor(e,t),We,Pn,Bn;if(typeof Node<"u"){let e=Node.prototype;We=e.insertBefore,Bn=e.removeChild,Pn=$i(CharacterData.prototype,"data").set}var Si=class{text;parentEl;el;constructor(e){this.text=e}mount(e,t){this.parentEl=e;let n=document.createTextNode(Ct(this.text));We.call(e,n,t),this.el=n}moveBeforeDOMNode(e,t=this.parentEl){this.parentEl=t,We.call(t,this.el,e)}moveBeforeVNode(e,t){We.call(this.parentEl,this.el,e?e.el:t)}beforeRemove(){}remove(){Bn.call(this.parentEl,this.el)}firstNode(){return this.el}patch(e){let t=e.text;this.text!==t&&(Pn.call(this.el,Ct(t)),this.text=t)}toString(){return this.text}};function xe(e){return new Si(e)}function Ct(e){switch(typeof e){case"string":return e;case"number":return String(e);case"boolean":return e?"true":"false";default:return e||""}}var pt=(e,t)=>Object.getOwnPropertyDescriptor(e,t),Ce,jn,Vn,Xe,Ft;typeof Node<"u"&&(Ce=Node.prototype,jn=Element.prototype,Vn=pt(CharacterData.prototype,"data").set,Xe=pt(Ce,"firstChild").get,Ft=pt(Ce,"nextSibling").get);var fn=()=>{};function ki(e){return function(n){this[e]=n===0?0:n?n.valueOf():""}}var mt={};function Kn(e){if(e in mt)return mt[e];let n=new DOMParser().parseFromString(`<t>${e}</t>`,"text/xml").firstChild.firstChild;be.shouldNormalizeDom&&Fn(n);let r=At(n),i=Dt(r),s=r.el,o=Di(s,i);return mt[e]=o,o}function Fn(e){if(e.nodeType===Node.TEXT_NODE&&!/\S/.test(e.textContent)){e.remove();return}if(!(e.nodeType===Node.ELEMENT_NODE&&e.tagName==="pre"))for(let t=e.childNodes.length-1;t>=0;--t)Fn(e.childNodes.item(t))}function At(e,t=null,n=null){switch(e.nodeType){case Node.ELEMENT_NODE:{let r=n&&n.currentNS,i=e.tagName,s,o=[];if(i.startsWith("block-text-")){let a=parseInt(i.slice(11),10);o.push({type:"text",idx:a}),s=document.createTextNode("")}if(i.startsWith("block-child-")){n.isRef||dn(n);let a=parseInt(i.slice(12),10);o.push({type:"child",idx:a}),s=document.createTextNode("")}if(r||=e.namespaceURI,s||(s=r?document.createElementNS(r,i):document.createElement(i)),s instanceof Element){n||document.createElement("template").content.appendChild(s);let a=e.attributes;for(let u=0;u<a.length;u++){let c=a[u].name,h=a[u].value;if(c.startsWith("block-handler-")){let f=parseInt(c.slice(14),10);o.push({type:"handler",idx:f,event:h})}else if(c.startsWith("block-attribute-")){let f=parseInt(c.slice(16),10);o.push({type:"attribute",idx:f,name:h,tag:i})}else if(c.startsWith("block-property-")){let f=parseInt(c.slice(15),10);o.push({type:"property",idx:f,name:h,tag:i})}else c==="block-attributes"?o.push({type:"attributes",idx:parseInt(h,10)}):c==="block-ref"?o.push({type:"ref",idx:parseInt(h,10)}):s.setAttribute(a[u].name,h)}}let l={parent:t,firstChild:null,nextSibling:null,el:s,info:o,refN:0,currentNS:r};if(e.firstChild){let a=e.childNodes[0];if(e.childNodes.length===1&&a.nodeType===Node.ELEMENT_NODE&&a.tagName.startsWith("block-child-")){let u=a.tagName,c=parseInt(u.slice(12),10);o.push({idx:c,type:"child",isOnlyChild:!0})}else{l.firstChild=At(e.firstChild,l,l),s.appendChild(l.firstChild.el);let u=e.firstChild,c=l.firstChild;for(;u=u.nextSibling;)c.nextSibling=At(u,c,l),s.appendChild(c.nextSibling.el),c=c.nextSibling}}return l.info.length&&dn(l),l}case Node.TEXT_NODE:return{parent:t,firstChild:null,nextSibling:null,el:document.createTextNode(e.textContent),info:[],refN:0,currentNS:null}}throw new S("boom")}function dn(e){e.isRef=!0;do e.refN++;while(e=e.parent)}function Ci(e){let t=e.parent;for(;t&&t.nextSibling===e;)e=t,t=t.parent;return t}function Dt(e,t,n){if(!t){let r=new Array(e.info.filter(i=>i.type==="child").length);t={collectors:[],locations:[],children:r,cbRefs:[],refN:e.refN},n=0}if(e.refN){let r=n,i=e.isRef,s=e.firstChild?e.firstChild.refN:0,o=e.nextSibling?e.nextSibling.refN:0;if(i){for(let l of e.info)l.refIdx=r;e.refIdx=r,Ai(t,e),n++}if(o){let l=n+s;t.collectors.push({idx:l,prevIdx:r,getVal:Ft}),Dt(e.nextSibling,t,l)}s&&(t.collectors.push({idx:n,prevIdx:r,getVal:Xe}),Dt(e.firstChild,t,n))}return t}function Ai(e,t){for(let n of t.info)switch(n.type){case"text":e.locations.push({idx:n.idx,refIdx:n.refIdx,setData:pn,updateData:pn});break;case"child":n.isOnlyChild?e.children[n.idx]={parentRefIdx:n.refIdx,isOnlyChild:!0}:e.children[n.idx]={parentRefIdx:Ci(t).refIdx,afterRefIdx:n.refIdx};break;case"property":{let r=n.refIdx,i=ki(n.name);e.locations.push({idx:n.idx,refIdx:r,setData:i,updateData:i});break}case"attribute":{let r=n.refIdx,i,s;n.name==="class"?(s=$t,i=Ve):n.name==="style"?(s=St,i=Ke):(s=ai(n.name),i=s),e.locations.push({idx:n.idx,refIdx:r,setData:s,updateData:i});break}case"attributes":e.locations.push({idx:n.idx,refIdx:n.refIdx,setData:ci,updateData:ui});break;case"handler":{let{setup:r,update:i}=Mn(n.event);e.locations.push({idx:n.idx,refIdx:n.refIdx,setData:r,updateData:i});break}case"ref":{e.locations.push({idx:n.idx,refIdx:n.refIdx,setData:fn,updateData:fn}),e.cbRefs.push(n.idx);break}}}function Di(e,t){let n=_i(e,t);return t.children.length?(n=class extends n{children;constructor(r,i){super(r),this.children=i}},n.prototype.beforeRemove=Ln.prototype.beforeRemove,(r,i=[])=>new n(r,i)):r=>new n(r)}function _i(e,t){let{refN:n,collectors:r,children:i,locations:s,cbRefs:o}=t;s.sort((b,N)=>b.idx-N.idx);let l=s.length,a=i.length,u=n>0,c=s.map(b=>b.refIdx),h=s.map(b=>b.setData),f=s.map(b=>b.updateData),p=[Ft,Xe],m=r.length,w=r.map(b=>b.idx&32767|(b.prevIdx&32767)<<15|(b.getVal===Xe?1:0)<<30),d=i.map(b=>b.parentRefIdx&32767|(b.isOnlyChild?1:0)<<15|((b.afterRefIdx??0)&32767)<<16),A=Ce.cloneNode,T=Ce.insertBefore,g=jn.remove;class ${el;parentEl;data;children;refs;constructor(N){this.data=N}beforeRemove(){}remove(){g.call(this.el)}firstNode(){return this.el}moveBeforeDOMNode(N,v=this.parentEl){this.parentEl=v,T.call(v,this.el,N)}moveBeforeVNode(N,v){T.call(this.parentEl,this.el,N?N.el:v)}toString(){let N=document.createElement("div");return this.mount(N,null),N.innerHTML}mount(N,v){let E=A.call(e,!0);T.call(N,E,v),this.el=E,this.parentEl=N}patch(N,v){}}return u&&($.prototype.mount=function(N,v){let E=A.call(e,!0),D=new Array(n);this.refs=D,D[0]=E;for(let R=0;R<m;R++){let k=w[R];D[k&32767]=p[k>>30&1].call(D[k>>15&32767])}if(l){let R=this.data;for(let k=0;k<l;k++)h[k].call(D[c[k]],R[k])}if(a){let R=this.children;for(let k=0;k<a;k++){let O=R[k];if(O){let L=d[k],Ee=L>>16&32767,je=Ee?D[Ee]:null;O.isOnlyChild=!!(L&32768),O.mount(D[L&32767],je)}}}if(T.call(N,E,v),this.el=E,this.parentEl=N,o.length){let R=this.data,k=this.refs;for(let O of o){let L=R[O];L(k[c[O]],null)}}},$.prototype.patch=function(N,v){if(this===N)return;let E=this.refs;if(l){let D=this.data,R=N.data;for(let k=0;k<l;k++){let O=D[k],L=R[k];O!==L&&f[k].call(E[c[k]],L,O)}this.data=R}if(a){let D=this.children,R=N.children;for(let k=0;k<a;k++){let O=D[k],L=R[k];if(O)L?O.patch(L,v):(v&&O.beforeRemove(),O.remove(),D[k]=void 0);else if(L){let Ee=d[k],je=Ee>>16&32767,wr=je?E[je]:null;L.mount(E[Ee&32767],wr),D[k]=L}}}},$.prototype.remove=function(){if(o.length){let N=this.data,v=this.refs;for(let E of o){let D=N[E];D(null,v[c[E]])}}g.call(this.el)}),$}function pn(e){Vn.call(this,Ct(e))}var xi=(e,t)=>Object.getOwnPropertyDescriptor(e,t),Wn,Un,zn,_t;if(typeof Node<"u"){let e=Node.prototype;Wn=e.insertBefore,Un=e.appendChild,zn=e.removeChild,_t=xi(e,"textContent").set}var Oi=class{children;anchor;parentEl;isOnlyChild;constructor(e){this.children=e}mount(e,t){let n=this.children,r=document.createTextNode("");this.anchor=r,Wn.call(e,r,t);let i=n.length;if(i){let s=n[0].mount;for(let o=0;o<i;o++)s.call(n[o],e,r)}this.parentEl=e}moveBeforeDOMNode(e,t=this.parentEl){this.parentEl=t;let n=this.children;for(let r=0,i=n.length;r<i;r++)n[r].moveBeforeDOMNode(e,t);t.insertBefore(this.anchor,e)}moveBeforeVNode(e,t){if(e){let r=e.children[0];t=(r?r.firstNode():e.anchor)||null}let n=this.children;for(let r=0,i=n.length;r<i;r++)n[r].moveBeforeVNode(null,t);this.parentEl.insertBefore(this.anchor,t)}patch(e,t){if(this===e)return;let n=this.children,r=e.children;if(r.length===0&&n.length===0)return;this.children=r;let i=r[0]||n[0],{mount:s,patch:o,remove:l,beforeRemove:a,moveBeforeVNode:u,firstNode:c}=i,h=this.anchor,f=this.isOnlyChild,p=this.parentEl;if(r.length===0&&f){if(t)for(let v=0,E=n.length;v<E;v++)a.call(n[v]);_t.call(p,""),Un.call(p,h);return}let m=0,w=0,d=n[0],A=r[0],T=n.length-1,g=r.length-1,$=n[T],b=r[g],N;for(;m<=T&&w<=g;){if(d===null){d=n[++m];continue}if($===null){$=n[--T];continue}let v=d.key,E=A.key;if(v===E){o.call(d,A,t),r[w]=d,d=n[++m],A=r[++w];continue}let D=$.key,R=b.key;if(D===R){o.call($,b,t),r[g]=$,$=n[--T],b=r[--g];continue}if(v===R){o.call(d,b,t),r[g]=d;let O=r[g+1];u.call(d,O,h),d=n[++m],b=r[--g];continue}if(D===E){o.call($,A,t),r[w]=$;let O=n[m];u.call($,O,h),$=n[--T],A=r[++w];continue}N=N||Ri(n,m,T);let k=N[E];if(k===void 0)s.call(A,p,c.call(d)||null);else{let O=n[k];u.call(O,d,null),o.call(O,A,t),r[w]=O,n[k]=null}A=r[++w]}if(m<=T||w<=g)if(m>T){let v=r[g+1],E=v?c.call(v)||null:h;for(let D=w;D<=g;D++)s.call(r[D],p,E)}else for(let v=m;v<=T;v++){let E=n[v];E&&(t&&a.call(E),l.call(E))}}beforeRemove(){let e=this.children,t=e.length;if(t){let n=e[0].beforeRemove;for(let r=0;r<t;r++)n.call(e[r])}}remove(){let{parentEl:e,anchor:t}=this;if(this.isOnlyChild)_t.call(e,"");else{let n=this.children,r=n.length;if(r){let i=n[0].remove;for(let s=0;s<r;s++)i.call(n[s])}zn.call(e,t)}}firstNode(){let e=this.children[0];return e?e.firstNode():void 0}toString(){return this.children.map(e=>e.toString()).join("")}};function Hn(e){return new Oi(e)}function Ri(e,t,n){let r={};for(let i=t;i<=n;i++)r[e[i].key]=i;return r}var ae,Gn;if(typeof Node<"u"){let e=Node.prototype;ae=e.insertBefore,Gn=e.removeChild}var Mi=class{html;parentEl;content=[];constructor(e){this.html=e}mount(e,t){this.parentEl=e;let n=document.createElement("template");n.innerHTML=this.html,this.content=[...n.content.childNodes];for(let r of this.content)ae.call(e,r,t);if(!this.content.length){let r=document.createTextNode("");this.content.push(r),ae.call(e,r,t)}}moveBeforeDOMNode(e,t=this.parentEl){this.parentEl=t;for(let n of this.content)ae.call(t,n,e)}moveBeforeVNode(e,t){let n=e?e.content[0]:t;this.moveBeforeDOMNode(n)}patch(e){if(this===e)return;let t=e.html;if(this.html!==t){let n=this.parentEl,r=this.content[0],i=document.createElement("template");i.innerHTML=t;let s=[...i.content.childNodes];for(let o of s)ae.call(n,o,r);if(!s.length){let o=document.createTextNode("");s.push(o),ae.call(n,o,r)}this.remove(),this.content=s,this.html=e.html}}beforeRemove(){}remove(){let e=this.parentEl;for(let t of this.content)Gn.call(e,t)}firstNode(){return this.content[0]}toString(){return this.html}};function Wt(e){return new Mi(e)}function Ii(e){let t=Object.keys(e).length;class n{child;handlerData;handlerFns=[];parentEl;afterNode=null;constructor(i,s){this.child=i,this.handlerData=s}mount(i,s){this.parentEl=i,this.child.mount(i,s),this.afterNode=document.createTextNode(""),i.insertBefore(this.afterNode,s),this.wrapHandlerData();for(let o in e){let l=e[o],a=Mn(o);this.handlerFns[l]=a,a.setup.call(i,this.handlerData[l])}}wrapHandlerData(){for(let i=0;i<t;i++){let s=this.handlerData[i],o=s.length-2,l=s[o],a=this;s[o]=function(u,c){let h=c.target,f=a.child.firstNode(),p=a.afterNode;for(;f&&f!==p;){if(f.contains(h))return l(u,c);f=f.nextSibling}}}}moveBeforeDOMNode(i,s=this.parentEl){this.parentEl=s,this.child.moveBeforeDOMNode(i,s),s.insertBefore(this.afterNode,i)}moveBeforeVNode(i,s){i&&(s=i.firstNode()||s),this.child.moveBeforeVNode(i?i.child:null,s),this.parentEl.insertBefore(this.afterNode,s)}patch(i,s){if(this!==i){this.handlerData=i.handlerData,this.wrapHandlerData();for(let o=0;o<t;o++)this.handlerFns[o].update.call(this.parentEl,this.handlerData[o]);this.child.patch(i.child,s)}}beforeRemove(){this.child.beforeRemove()}remove(){for(let i=0;i<t;i++)this.handlerFns[i].remove.call(this.parentEl);this.child.remove(),this.afterNode.remove()}firstNode(){return this.child.firstNode()}toString(){return this.child.toString()}}return function(r,i){return new n(r,i)}}function Ue(e,t,n=null){e.mount(t,n)}function Li(e,t,n=!1){e.patch(t,n)}function Pi(e,t=!1){t&&e.beforeRemove(),e.remove()}function Bi(e){switch(e.__owl__.status){case C.NEW:return"new";case C.CANCELLED:return"cancelled";case C.MOUNTED:return e instanceof kn?"started":"mounted";case C.DESTROYED:return"destroyed"}}function ji(e,t){let n=e.fiber;return n&&(Ut(n.children),n.root=null),new nt(e,t)}function Vi(e){let t=e.fiber;if(t){let r=t.root;return r.locked=!0,r.setCounter(r.counter+1-Ut(t.children)),r.locked=!1,t.children=[],t.childrenMap={},t.bdom=null,X.has(t)&&(X.delete(t),X.delete(r),t.appliedToDom=!1,t instanceof Ye&&(t.mounted=t instanceof qn?[t]:[])),t}let n=new Ye(e,null);return e.willPatch.length&&n.willPatch.push(n),e.patched.length&&n.patched.push(n),n}function Ki(){throw new S("Attempted to render cancelled fiber")}function Ut(e){let t=0;for(let n of e){let r=n.node;n.render=Ki,r.status===C.NEW&&r.cancel(),r.fiber=null,n.bdom?r.forceNextRender=!0:t++,t+=Ut(n.children)}return t}var nt=class{node;bdom=null;root;parent;children=[];appliedToDom=!1;deep=!1;childrenMap={};constructor(e,t){if(this.node=e,this.parent=t,t){this.deep=t.deep;let n=t.root;n.setCounter(n.counter+1),this.root=n,t.children.push(this)}else this.root=this}render(){let e=this.root.node.app.scheduler;if(e.tasks.size>1){let r=this.root.node,i=r.parent;for(;i;){if(i.fiber){let s=i.fiber.root;if(s.counter===0&&r.parentKey in i.fiber.childrenMap)i=s.node;else{e.delayedRenders.push(this);return}}r=i,i=i.parent}}let t=this.node,n=this.root;if(n){let r=fe();He(t.signalComputation),B(t.signalComputation),t.signalComputation.state=xt.EXECUTED;try{this.bdom=!0,this.bdom=t.renderFn()}catch(s){de({node:t,error:s})}B(r);let i=n.counter-1;n.counter=i,i===0&&e.flush()}}},Ye=class extends nt{counter=1;willPatch=[];patched=[];mounted=[];locked=!1;complete(){let e=this.node;this.locked=!0;let t,n=this.mounted;try{for(t of this.willPatch){let i=t.node;if(i.fiber===t){let s=i.component;for(let o of i.willPatch)o.call(s)}}for(t=void 0,e._patch(),this.locked=!1;t=n.pop();)if(t=t,t.appliedToDom)for(let i of t.node.mounted)i();let r=this.patched;for(;t=r.pop();)if(t=t,t.appliedToDom)for(let i of t.node.patched)i()}catch(r){for(let i of n)i.node.willUnmount=[];this.locked=!1,de({fiber:t||this,error:r})}}setCounter(e){this.counter=e,e===0&&this.node.app.scheduler.flush()}},qn=class extends Ye{target;position;afterNode=null;prepared=!1;onPrepared=null;constructor(e,t,n={}){super(e,null),this.target=t,this.position=n.position||"last-child",this.afterNode=n.afterNode??null}complete(){this.prepared=!0,this.target?this._mount():(this.appliedToDom=!0,this.onPrepared?.())}commit(e,t={}){this.target=e,this.position=t.position||"last-child",this.afterNode=t.afterNode??null,this.prepared&&this._mount()}_mount(){let e=this;try{let t=this.node;if(t.children=this.childrenMap,t.app.constructor.validateTarget(this.target),t.bdom)t.updateDom();else if(t.bdom=this.bdom,this.afterNode)Ue(t.bdom,this.target,this.afterNode);else if(this.position==="last-child"||this.target.childNodes.length===0)Ue(t.bdom,this.target);else{let r=this.target.childNodes[0];Ue(t.bdom,this.target,r)}t.fiber=null,t.status=C.MOUNTED,this.appliedToDom=!0;let n=this.mounted;for(;e=n.pop();)if(e.appliedToDom)for(let r of e.node.mounted)r()}catch(t){de({fiber:e,error:t})}}},pe=class extends It{fiber=null;component;bdom=null;componentName;forceNextRender=!1;parentKey;props;defaultProps=null;renderFn;parent;children=Object.create(null);willUpdateProps=[];willUnmount=[];mounted=[];willPatch=[];patched=[];signalComputation;pluginManager;constructor(e,t,n,r,i){super(n),this.parent=r,this.parentKey=i,this.pluginManager=r?r.pluginManager:n.pluginManager,this.componentName=e.name,this.signalComputation=Ot(()=>this.render(!1),!1,xt.EXECUTED),this.props=t;let s=fe();B(void 0),Y.push(this);try{this.component=new e(this);let o={this:this.component,__owl__:this};this.renderFn=n.getTemplate(e.template).bind(this.component,o,this),this.component.setup()}finally{Y.pop(),B(s)}}decorate(e,t){let n=this.component,r=this;if(this.app.dev){let i=`${this.componentName}.${t}`;return{[i](...o){return e.call(n,r,...o)}}[i]}return e.bind(n,r)}async initiateRender(e){this.fiber=e,this.mounted.length&&e.root.mounted.push(e);let t=this.component,n=fe();B(void 0);try{let r=this.willStart.map(i=>i.call(t));B(n),await Promise.all(r)}catch(r){if(B(n),vt(r)&&this.status>C.MOUNTED)return;de({node:this,error:r});return}this.status===C.NEW&&this.fiber===e&&e.render()}async render(e){if(this.status>=C.CANCELLED)return;let t=this.fiber;if(t&&(t.root.locked||t.bdom===!0)&&(await Promise.resolve(),t=this.fiber),t){if(!t.bdom&&!X.has(t)){e&&(t.deep=e);return}e=e||t.deep}else if(!this.bdom)return;let n=Vi(this);n.deep=e,this.fiber=n,this.app.scheduler.addFiber(n),await Promise.resolve(),!(this.status>=C.CANCELLED)&&this.fiber===n&&(t||!n.parent)&&n.render()}cancel(){this._cancel(),delete this.parent.children[this.parentKey],this.app.scheduler.scheduleDestroy(this)}_cancel(){super.cancel();let e=this.children;for(let t in e)e[t]._cancel()}destroy(){let e=this.status===C.MOUNTED;this._destroy(),e&&this.bdom.remove()}_destroy(){let e=this.component;if(this.status===C.MOUNTED)for(let t of this.willUnmount)t.call(e);for(let t in this.children)this.children[t]._destroy();this.finalize(t=>de({error:t,node:this})),Mt(this.signalComputation)}updateDom(){if(this.fiber)if(this.bdom===this.fiber.bdom)for(let e in this.children)this.children[e].updateDom();else this.bdom.patch(this.fiber.bdom,!1),this.fiber.appliedToDom=!0,this.fiber=null}firstNode(){let e=this.bdom;return e?e.firstNode():void 0}mount(e,t){let n=this.fiber.bdom;this.bdom=n,n.mount(e,t),this.status=C.MOUNTED,this.fiber.appliedToDom=!0,this.children=this.fiber.childrenMap,this.fiber=null}moveBeforeDOMNode(e,t){this.bdom.moveBeforeDOMNode(e,t)}moveBeforeVNode(e,t){this.bdom.moveBeforeVNode(e?e.bdom:null,t)}patch(){this.fiber&&this.fiber.parent&&this._patch()}_patch(){let e=!1;for(let n in this.children){e=!0;break}let t=this.fiber;this.children=t.childrenMap,this.bdom.patch(t.bdom,e),t.appliedToDom=!0,this.fiber=null}beforeRemove(){this._destroy()}remove(){this.bdom.remove()}};function H(){let e=z();if(!(e instanceof pe))throw new S("Expected to be in a component scope");return e}var Xn;typeof window<"u"&&(Xn=window.requestAnimationFrame.bind(window));var Fi=class Yn{static requestAnimationFrame=Xn;tasks=new Set;requestAnimationFrame;frame=0;delayedRenders=[];cancelledNodes=new Set;processing=!1;constructor(){this.requestAnimationFrame=Yn.requestAnimationFrame,this.processTasks=this.processTasks.bind(this)}addFiber(t){this.tasks.add(t.root)}scheduleDestroy(t){this.cancelledNodes.add(t),this.frame===0&&(this.frame=this.requestAnimationFrame(this.processTasks))}flush(){if(this.delayedRenders.length){let t=this.delayedRenders;this.delayedRenders=[];for(let n of t)n.root&&n.node.status!==C.DESTROYED&&n.node.fiber===n&&n.render()}this.frame===0&&(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){if(t.root!==t){this.tasks.delete(t);continue}let n=X.has(t);if(n&&t.counter!==0){this.tasks.delete(t);continue}if(t.node.status===C.DESTROYED){this.tasks.delete(t);continue}t.counter===0&&(n||t.complete(),t.appliedToDom&&this.tasks.delete(t))}for(let t of this.tasks)t.node.status===C.DESTROYED&&this.tasks.delete(t);this.processing=!1}}},Z=class{static template="";__owl__;constructor(e){this.__owl__=e}setup(){}},Wi=Object.create;function Ui(e,t){return e==null||e===!1?t:e}function zi(e,t,n,r,i,s,o){n=n+"__slot_"+r;let l=e.__owl__.props.slots||{},{__render:a,__ctx:u,__scope:c}=l[r]||{},h=Wi(u||{});c&&(h[c]=s);let f=a?a(h,t,n):null;if(o){let p,m;return f?p=i?re(r,f):f:m=o(e,t,n),Kt([p,m])}return f||xe("")}function Hi(e,t){return e.key=t,e}function Gi(e){let t,n;if(Array.isArray(e))t=e,n=e;else if(e instanceof Map)t=[...e.keys()],n=[...e.values()];else if(Symbol.iterator in Object(e))t=[...e],n=t;else if(e&&typeof e=="object")n=Object.values(e),t=Object.keys(e);else throw new S(`Invalid loop expression: "${e}" is not iterable`);let r=n.length;return[t,n,r,new Array(r)]}function qi(e){let t=parseFloat(e);return isNaN(t)?e:t}function Xi(e,t){for(let n=0,r=e.length;n<r;n++)if(e[n]!==t[n])return!1;return!0}var Zn=class{fn;ctx;component;node;key;constructor(e,t,n,r,i){this.fn=e,this.ctx=t,this.component=n,this.node=r,this.key=i}evaluate(){return this.fn.call(this.component,this.ctx,this.node,this.key)}toString(){return this.evaluate().toString()}};function Yi(e,t){if(e==null)return t?re("default",t):re("undefined",xe(""));let n,r;return e instanceof qe?(n="string_safe",r=Wt(e)):e instanceof Zn?(n="lazy_value",r=e.evaluate()):(n="string_unsafe",r=xe(e)),re(n,r)}function Zi(e){if(!e)throw new S("Ref is undefined or null");let t,n;if(e.add&&e.delete)t=e.add.bind(e),n=e.delete.bind(e);else if(e.set)t=e.set.bind(e),n=()=>e.set(null);else throw new S("Ref should implement either a 'set' function or 'add' and 'delete' functions");return(r,i)=>{i&&n(i),r&&t(r)}}function Ji(e,t,n){if(typeof e!="function")throw new S(`Invalid handler expression: the \`t-on\` expression should evaluate to a function, but got '${typeof e}'. Did you mean to use an arrow function? (e.g. \`t-on-click="() => expr"\`)`);e.call(t.this,n)}var mn=new WeakMap;function Qi(e,t,n){let r=mn.get(e);r||(r=new Map,mn.set(e,r));let i=r.get(t);if(i)return i.set(n),i.readonly;let s=I(n);return s.readonly=De(s),r.set(t,s),s.readonly}function es(e){if(typeof e!="function"||typeof e.set!="function")throw new S("Invalid t-model expression: expression should evaluate to a function with a 'set' method defined on it");return e}function ts(e,t,n,r,i,s){let o=!n,l,a=s.length===0;r?l=(c,h)=>!0:i?l=function(c,h){for(let f in c)if(c[f]!==h[f])return!0;return Object.keys(c).length!==Object.keys(h).length}:a?l=(c,h)=>!1:l=function(c,h){for(let f of s)if(c[f]!==h[f])return!0;return!1};let u=pe.prototype.initiateRender;return(c,h,f,p,m)=>{let w=f.children,d=w[h];o&&d&&d.component.constructor!==m&&(d=void 0);let A=f.fiber;if(d){if(l(d.props,c)||A.deep||d.forceNextRender){d.forceNextRender=!1;let T=d.willUpdateProps,g=ji(d,A);d.fiber=g;let $=A.root;d.willPatch.length&&$.willPatch.push(g),d.patched.length&&$.patched.push(g);let b;if(T.length){let N=d.defaultProps;if(N){c=Object.assign({},c);for(let D in N)c[D]===void 0&&(c[D]=N[D])}let v=d.component,E=fe();B(void 0);for(let D of T){let R=D.call(v,c);R&&typeof R.then=="function"&&(b||=[]).push(R)}B(E)}b?(b.length===1?b[0]:Promise.all(b)).then(()=>{g===d.fiber&&(d.props=c,g.render())},v=>{de({node:d,error:v})}):(d.props=c,g.render())}}else{if(n){let g=p.constructor.components;if(!g)throw new S(`Cannot find the definition of component "${t}", missing static components key in parent`);if(m=g[t],m){if(!(m.prototype instanceof Z))throw new S(`"${t}" is not a Component. It must inherit from the Component class`)}else throw new S(`Cannot find the definition of component "${t}"`)}d=new pe(m,c,e,f,h),w[h]=d;let T=new nt(d,A);d.willStart.length?u.call(d,T):(d.fiber=T,d.mounted.length&&T.root.mounted.push(T),T.render())}return A.childrenMap[h]=d,d}}function ns(e,t,n,r,i,s){let o=n.getTemplate(e);return re(e,o.call(t,r,i,s+e))}var rs={withDefault:Ui,zero:Symbol("zero"),callSlot:zi,withKey:Hi,prepareList:Gi,shallowEqual:Xi,toNumber:qi,LazyValue:Zn,safeOutput:Yi,createCatcher:Ii,markRaw:wn,OwlError:S,createRef:Zi,modelExpr:es,createComponent:ts,callTemplate:ns,callHandler:Ji,toSignal:Qi},is={text:xe,createBlock:Kn,list:Hn,multi:Kt,html:Wt,toggler:re},Me=class{static registerTemplate(e,t){Ze[e]=t}dev;rawTemplates=Object.create(Ze);templates={};getRawTemplate;translateFn;translatableAttributes;customDirectives;runtimeUtils;hasGlobalValues;constructor(e={}){if(this.dev=e.dev||!1,this.translateFn=e.translateFn,this.translatableAttributes=e.translatableAttributes,e.templates)if(e.templates instanceof Document||typeof e.templates=="string")this.addTemplates(e.templates);else for(let t in e.templates)this.addTemplate(t,e.templates[t]);this.getRawTemplate=e.getTemplate,this.customDirectives=e.customDirectives||{},this.runtimeUtils={...rs,__globals__:e.globalValues||{}},this.hasGlobalValues=!!(e.globalValues&&Object.keys(e.globalValues).length)}addTemplate(e,t){if(e in this.rawTemplates){if(!this.dev)return;let n=this.rawTemplates[e],r=typeof n=="string"?n:n instanceof Element?n.outerHTML:n.toString(),i=typeof t=="string"?t:t.outerHTML;if(r===i)return;throw new S(`Template ${e} already defined with different content`)}this.rawTemplates[e]=t}addTemplates(e){if(e){e=e instanceof Document?e:this._parseXML(e);for(let t of e.querySelectorAll("[t-name]")){let n=t.getAttribute("t-name");this.addTemplate(n,t)}}}getTemplate(e){let t=e;if(!(t in this.templates)){let n=this.getRawTemplate?.(e)||this.rawTemplates[e];if(n===void 0){let l="",a=Oe();throw a instanceof pe&&(l=` (for component "${a.componentName}")`),new S(`Missing template: "${e}"${l}`)}let i=typeof n=="function"&&!(n instanceof Element)?n:this._compileTemplate(e,n),s=this.templates;this.templates[t]=function(l,a){return s[t].call(this,l,a)};let o=i(this,is,this.runtimeUtils);this.templates[t]=o}return this.templates[t]}_compileTemplate(e,t){throw new S("Unable to compile a template. Please use owl full build instead")}_parseXML(e){throw new S("Unable to parse XML templates. Please use owl full build instead, or pass a Document instance.")}},Ze={};function J(...e){let t=`__template__${J.nextId++}`,n=String.raw(...e);return Ze[t]=n,t}J.nextId=1;var vn=!1,ze=new Set;typeof window<"u"&&(window.__OWL_DEVTOOLS__||={apps:ze,Fiber:nt,RootFiber:Ye,toRaw:me,proxy:Pt});var zt=class Jn extends Me{static validateTarget=pi;static apps=ze;static version=Cr;name;scheduler=new Fi;roots=new Set;pluginManager;constructor(t={}){super(t),this.name=t.name||"",ze.add(this),this.pluginManager=new tt(this,{config:t.config}),t.plugins?Cn(this.pluginManager,t.plugins):this.pluginManager.status=C.MOUNTED,t.test&&(this.dev=!0),this.dev&&!t.test&&!vn&&(console.info("Owl is running in 'dev' mode."),vn=!0)}createRoot(t,n={}){let r=n.props||{},i,s,o=new Promise((m,w)=>{i=m,s=w}),l,a=null;try{l=new pe(t,r,this,null,null)}catch(m){a=m,s(m)}let u=null,c=null,h=()=>{if(c)return c;if(a)return Promise.reject(a);u=new qn(l,null);let m=se.get(l);if(m||(m=[],se.set(l,m)),m.unshift((d,A)=>{let T=A();s(T)}),c=new Promise(d=>{u.onPrepared=()=>d()}),l.mounted.push(()=>{i(l.component),m.shift()}),this.scheduler.addFiber(u),this.pluginManager.status<C.MOUNTED&&l.willStart.unshift(()=>this.pluginManager.ready),l.willStart.length)l.initiateRender(u);else{l.fiber=u,l.mounted.length&&u.root.mounted.push(u);try{u.render()}catch(d){s(d)}}return c},p={node:l,promise:o,prepare:h,mount:(m,w)=>(a||(Jn.validateTarget(m),h(),u.commit(m,w)),o),destroy:()=>{this.roots.delete(p),l?.destroy(),this.scheduler.processTasks()}};return this.roots.add(p),p}destroy(){for(let t of this.roots)t.destroy();this.pluginManager.destroy(),this.scheduler.processTasks(),ze.delete(this)}_handleError(t){throw t}};async function ss(e,t,n={}){return new zt(n).createRoot(e,n).mount(t,n)}var os=(e,t,n)=>{let{data:r,modifiers:i}=_n(e);e=r;let s=!1;if(i.length){let o=!1,l=t.target===n;for(let a of i)switch(a){case"self":if(o=!0,l)continue;return s;case"prevent":(o&&l||!o)&&t.preventDefault();continue;case"stop":(o&&l||!o)&&t.stopPropagation(),s=!0;continue}}if(Object.hasOwnProperty.call(e,0)){let o=e[0];if(typeof o!="function")throw new S(`Invalid handler (expected a function, received: '${o}')`);let l=e[1]?e[1].__owl__:null;(!l||l.status===C.MOUNTED)&&o(e[1],t)}return s};function Qn(e){let t=z();t.willStart.push(t.decorate(e,"onWillStart"))}function ls(e){let t=H();function n(r,i){return e.call(this,i,r)}t.willUpdateProps.push(t.decorate(n,"onWillUpdateProps"))}function er(e){let t=H();t.mounted.push(t.decorate(e,"onMounted"))}function as(e){let t=H();t.willPatch.unshift(t.decorate(e,"onWillPatch"))}function cs(e){let t=H();t.patched.push(t.decorate(e,"onPatched"))}function us(e){let t=H();t.willUnmount.unshift(t.decorate(e,"onWillUnmount"))}function ge(e){let t=z();t.onDestroy(t.decorate(e,"onWillDestroy"))}function tr(e){let t=H(),n=se.get(t);n||(n=[],se.set(t,n)),n.push(e.bind(t.component))}function hs(){return En(Z)}var j={...ii,component:hs};function fs(e,t){let r=(Array.isArray(e)?e:Object.keys(e)).filter(i=>!i.endsWith("?")&&i in t);return i=>{r.length&&i.addIssue({message:"props have default values on mandatory keys",keys:r}),i.validate(j.object(e))}}function rt(e,t){let n=H(),{app:r,componentName:i}=n;t&&(n.defaultProps=Object.assign(n.defaultProps||{},t));function s(a){return n.props[a]===void 0&&t?t[a]:n.props[a]}let o=Object.create(null);function l(a){for(let u of a)Reflect.defineProperty(o,u,{enumerable:!0,get:s.bind(null,u)})}if(e){let a=(Array.isArray(e)?e:Object.keys(e)).map(u=>u.endsWith("?")?u.slice(0,-1):u);if(l(a),r.dev){let u=t?fs(e,t):j.object(e);ie(n.props,u,`Invalid component props (${i})`),n.willUpdateProps.push(c=>{ie(c,u,`Invalid component props (${i})`)})}}else{let a=c=>{let h=[];for(let f in c)f.charCodeAt(0)!==1&&h.push(f);if(t)for(let f in t)f in c||h.push(f);return h},u=a(n.props);l(u),n.willUpdateProps.push(c=>{for(let h of u)Reflect.deleteProperty(o,h);u=a(c),l(u)})}return o}var ds=class extends Z{static template=J`
|
|
3
|
+
<t t-if="this.props.error()">
|
|
4
|
+
<t t-call-slot="fallback"/>
|
|
5
|
+
</t>
|
|
6
|
+
<t t-else="">
|
|
7
|
+
<t t-call-slot="default"/>
|
|
8
|
+
</t>
|
|
9
|
+
`;props=rt({"error?":j.signal()},{error:I(null)});setup(){tr(e=>this.props.error.set(e))}};function it(e){ge(et(e))}function ps(e,t,n,r){typeof e=="function"?it(()=>{let i=e();if(i)return i.addEventListener(t,n,r),()=>i.removeEventListener(t,n,r)}):(e.addEventListener(t,n,r),ge(()=>e.removeEventListener(t,n,r)))}function ms(){return z().app}var vs=class extends Z{static template=J`<t t-call-slot="default"/>`},bs=class extends Z{static template=J``;props=rt({slots:j.object(["default"]),target:j.or([j.string(),j.signal(j.instanceOf(HTMLElement)),j.instanceOf(HTMLElement)])});setup(){let e=this.__owl__,t=e.app,n=this.props.slots,r=null,i=()=>{r&&(r.destroy(),r=null)};it(()=>{let s=gs(this.props.target);if(s)return r=t.createRoot(vs,{props:{slots:n}}),r.node.pluginManager=e.pluginManager,se.set(r.node,[Dn(e)]),r.mount(s),i}),ge(i)}};function gs(e){return typeof e=="function"&&(e=e()),typeof e=="string"?document.querySelector(e):e instanceof HTMLElement?e:null}var ys=class extends Z{static template=J`<t t-call-slot="default"/>`},ws=class extends Z{static template=J`
|
|
10
|
+
<t t-if="!this.prepared()">
|
|
11
|
+
<t t-call-slot="fallback"/>
|
|
12
|
+
</t>
|
|
13
|
+
`;props=rt({slots:j.object(["default","fallback?"])});prepared=I(!1);mounted=I(!1);subRootMounted=!1;setup(){let e=this.__owl__,t=e.app.createRoot(ys,{props:{slots:this.props.slots}});t.node.pluginManager=e.pluginManager,se.set(t.node,[Dn(e)]),t.prepare().then(()=>this.prepared.set(!0));let n=t.node.fiber;n&&n.counter===0&&this.prepared.set(!0),er(()=>this.mounted.set(!0)),it(()=>{if(this.subRootMounted||!this.prepared()||!this.mounted())return;this.subRootMounted=!0;let r=e.bdom.firstNode();t.mount(r.parentElement,{afterNode:r})}),ge(()=>t.destroy())}};function Ts(e,t,...n){let r=H(),i=n.length>0,s=r.props[e];return r.app.dev&&(t!==void 0&&(!i||s!==void 0)&&ie(s,t,`Invalid prop '${e}' in '${r.componentName}'`),r.willUpdateProps.push(o=>{if(o[e]!==r.props[e])throw new S(`Prop '${e}' changed in component '${r.componentName}'. Props declared with \`prop()\` are static and should not change. If the prop is a signal, pass the same signal reference (its inner value may change).`)})),s===void 0&&i?n[0]:s}function Ns(e){let t=z(),n=t instanceof pe?t.pluginManager:t,r=n.getPluginById(e.id);if(!r)if(t instanceof tt)r=n.startPlugin(e);else throw new S(`Unknown plugin "${e.id}"`);return r}function Es(e,t){let n=z();if(!(n instanceof tt))throw new S("Expected to be in a plugin scope");return n.app.dev&&t&&ie(n.config,j.object({[e]:t}),"Config does not match the type"),n.config[e.endsWith("?")?e.slice(0,-1):e]}function $s(e,t){let n=H(),r=new tt(n.app,{parent:n.pluginManager,config:t});n.pluginManager=r,ge(()=>r.destroy()),Cn(r,e),r.status<C.MOUNTED&&Qn(()=>r.ready)}be.shouldNormalizeDom=!1;be.mainEventHandler=os;var Ss={config:be,mount:Ue,patch:Li,remove:Pi,list:Hn,multi:Kt,text:xe,toggler:re,createBlock:Kn,html:Wt},ks={version:zt.version,date:"2026-04-22T14:24:13.298Z",hash:"914a106c",url:"https://github.com/odoo/owl"};var _=class extends Error{cause};function Cs(e){let t=!1;return function(...r){t||(t=!0,queueMicrotask(()=>{t=!1,e(...r)}))}}var Xt=Symbol("Atom"),Le=[],we;function pr(e){we&&(we.sources.add(e),e.observers.add(we))}function Jt(e){for(let t of e.observers)t.state===0&&(t.isDerived?xs(t):Le.push(t)),t.state=1;As()}var As=Cs(Ds);function Ds(){for(let e=0;e<Le.length;e++)mr(Le[e]);Le.length=0}function mr(e){let t=e.state;if(t===0)return;if(t===2){for(let r of e.sources)"compute"in r&&mr(r);if(e.state!==1){e.state=0;return}}_s(e);let n=we;we=e,e.value=e.compute(),e.state=0,we=n}function _s(e){let t=e.sources;for(let n of t)n.observers.delete(e);t.clear()}function xs(e){let t=[e],n;for(;n=t.pop();)for(let r of n.observers)r.state||(r.state=2,r.isDerived?t.push(r):Le.push(r))}var U=Symbol("Key changes"),Os=Object.prototype.toString,Yt=Object.prototype.hasOwnProperty;function Qt(e){if(typeof e!="object"||e===null)return!1;let t=ct(e);return Array.isArray(t)||t instanceof Set||t instanceof Map||t instanceof WeakMap?!0:Os.call(t)==="[object Object]"}function Te(e,t){return!t&&Qt(e)?Is(e):e}var Rs=new WeakSet;function ct(e){return lt.has(e)?lt.get(e):e}var Zt=new WeakMap;function Ms(e,t){let n=Zt.get(e);n||(n=new Map,Zt.set(e,n));let r=n.get(t);return r||(r={value:void 0,observers:new Set},n.set(t,r)),r}function F(e,t,n){pr(n??Ms(e,t))}function te(e,t,n){if(!n){let r=Zt.get(e);if(!r||!r.has(t))return;n=r.get(t)}Jt(n)}var lt=new WeakMap,nr=new WeakMap;function Ne(e,t){if(!Qt(e))throw new _("Cannot make the given value reactive");if(Rs.has(e)||lt.has(e))return e;let n=nr.get(e);if(n)return n;let r;e instanceof Map?r=Ht(e,"Map",t):e instanceof Set?r=Ht(e,"Set",t):e instanceof WeakMap?r=Ht(e,"WeakMap",t):r=vr(t);let i=new Proxy(e,r);return nr.set(e,i),lt.set(i,e),i}function Is(e){return Ne(e,null)}function vr(e){return{get(t,n,r){F(t,n,e);let i=Reflect.get(t,n,r);if(e||typeof i!="object"||i===null||!Qt(i))return i;let s=Object.getOwnPropertyDescriptor(t,n);return s&&!s.writable&&!s.configurable?i:Ne(i,null)},set(t,n,r,i){let s=Yt.call(t,n),o=Reflect.get(t,n,i),l=Reflect.set(t,n,ct(r),i);return!s&&Yt.call(t,n)&&te(t,U,e),(o!==Reflect.get(t,n,i)||n==="length"&&Array.isArray(t))&&te(t,n,e),l},deleteProperty(t,n){let r=Reflect.deleteProperty(t,n);return te(t,U,e),te(t,n,e),r},ownKeys(t){return F(t,U,e),Reflect.ownKeys(t)},has(t,n){return F(t,U,e),Reflect.has(t,n)}}}function Ie(e,t,n){return r=>(r=ct(r),F(t,r,n),Te(t[e](r),n))}function Q(e,t,n){return function*(){F(t,U,n);let r=t.keys();for(let i of t[e]()){let s=r.next().value;F(t,s,n),yield Te(i,n)}}}function rr(e,t){return function(r,i){F(e,U,t),e.forEach(function(s,o,l){F(e,o,t),r.call(i,Te(s,t),Te(o,t),Te(l,t))},i)}}function ye(e,t,n,r){return(i,s)=>{i=ct(i);let o=n.has(i),l=n[t](i),a=n[e](i,s),u=n.has(i);return o!==u&&te(n,U,r),l!==n[t](i)&&te(n,i,r),a}}function ir(e,t){return()=>{let n=[...e.keys()];e.clear(),te(e,U,t);for(let r of n)te(e,r,t)}}var Ls={Set:(e,t)=>({has:Ie("has",e,t),add:ye("add","has",e,t),delete:ye("delete","has",e,t),keys:Q("keys",e,t),values:Q("values",e,t),entries:Q("entries",e,t),[Symbol.iterator]:Q(Symbol.iterator,e,t),forEach:rr(e,t),clear:ir(e,t),get size(){return F(e,U,t),e.size}}),Map:(e,t)=>({has:Ie("has",e,t),get:Ie("get",e,t),set:ye("set","get",e,t),delete:ye("delete","has",e,t),keys:Q("keys",e,t),values:Q("values",e,t),entries:Q("entries",e,t),[Symbol.iterator]:Q(Symbol.iterator,e,t),forEach:rr(e,t),clear:ir(e,t),get size(){return F(e,U,t),e.size}}),WeakMap:(e,t)=>({has:Ie("has",e,t),get:Ie("get",e,t),set:ye("set","get",e,t),delete:ye("delete","has",e,t)})};function Ht(e,t,n){let r=Ls[t](e,n);return Object.assign(vr(n),{get(i,s){return Yt.call(r,s)?r[s]:(F(i,s,n),Te(i[s],n))}})}function Pe(e,t){let n={type:"signal",value:e,observers:new Set},r=t(n),i=()=>(pr(n),r);return i[Xt]=n,i.set=function(o){Object.is(n.value,o)||(n.value=o,r=t(n),Jt(n))},i}function Ps(e){if(typeof e!="function"||e[Xt]?.type!=="signal")throw new _(`Value is not a signal (${e})`);Jt(e[Xt])}function Bs(e){return Pe(e,t=>Ne(t.value,t))}function js(e){return Pe(e,t=>Ne(t.value,t))}function Vs(e){return Pe(e,t=>Ne(t.value,t))}function Ks(e){return Pe(e,t=>Ne(t.value,t))}function Be(e){return Pe(e,t=>t.value)}Be.invalidate=Ps;Be.Array=Bs;Be.Map=Vs;Be.Object=js;Be.Set=Ks;var Fs="true,false,NaN,null,undefined,debugger,console,window,in,instanceof,new,function,return,eval,void,Math,RegExp,Array,Object,Date,__globals__".split(","),sr=Object.assign(Object.create(null),{and:"&&",or:"||",gt:">",gte:">=",lt:"<",lte:"<="}),or=Object.assign(Object.create(null),{"{":"LEFT_BRACE","}":"RIGHT_BRACE","[":"LEFT_BRACKET","]":"RIGHT_BRACKET",":":"COLON",",":"COMMA","(":"LEFT_PAREN",")":"RIGHT_PAREN"}),Ws="...,.,===,==,+,!==,!=,!,||,&&,>=,>,<=,<,?,-,*,/,%,typeof ,=>,=,;,in ,new ,|,&,^,~".split(","),Us=function(e){let t=e[0],n=t;if(t!=="'"&&t!=='"'&&t!=="`")return!1;let r=1,i;for(;e[r]&&e[r]!==n;){if(i=e[r],t+=i,i==="\\"){if(r++,i=e[r],!i)throw new _("Invalid expression");t+=i}r++}if(e[r]!==n)throw new _("Invalid expression");return t+=n,n==="`"?{type:"TEMPLATE_STRING",value:t,replace(s){return t.replace(/\$\{(.*?)\}/g,(o,l)=>"${"+s(l)+"}")}}:{type:"VALUE",value:t}},zs=function(e){let t=e[0];if(t&&t.match(/[0-9]/)){let n=1;for(;e[n]&&e[n].match(/[0-9]|\./);)t+=e[n],n++;return{type:"VALUE",value:t}}else return!1},Hs=function(e){let t=e[0];if(t&&t.match(/[a-zA-Z_\$]/)){let n=1;for(;e[n]&&e[n].match(/[\w\$]/);)t+=e[n],n++;return t in sr?{type:"OPERATOR",value:sr[t],size:t.length}:{type:"SYMBOL",value:t}}else return!1},Gs=function(e){let t=e[0];return t&&t in or?{type:or[t],value:t}:!1},qs=function(e){for(let t of Ws)if(e.startsWith(t))return{type:"OPERATOR",value:t};return!1},Xs=[Us,zs,qs,Hs,Gs];function Ys(e){let t=[],n=!0,r,i=e;try{for(;n;)if(i=i.trim(),i){for(let s of Xs)if(n=s(i),n){t.push(n),i=i.slice(n.size||n.value.length);break}}else n=!1}catch(s){r=s}if(i.length||r)throw new _(`Tokenizer error: could not tokenize \`${e}\``);return t}var Zs=e=>e&&(e.type==="LEFT_BRACE"||e.type==="COMMA"),Js=e=>e&&(e.type==="RIGHT_BRACE"||e.type==="COMMA"),Qs=new Map([["in "," in "]]);function br(e){let t=new Set,n=Ys(e),r=0,i=[],s=-1;for(;r<n.length;){let a=n[r],u=n[r-1],c=n[r+1],h=i[i.length-1];switch(a.type){case"LEFT_BRACE":case"LEFT_BRACKET":case"LEFT_PAREN":i.push(a.type);break;case"RIGHT_BRACE":case"RIGHT_BRACKET":case"RIGHT_PAREN":i.pop()}let f=a.type==="SYMBOL"&&!Fs.includes(a.value);if(f&&u&&(h==="LEFT_BRACE"&&Zs(u)&&Js(c)&&(n.splice(r+1,0,{type:"COLON",value:":"},{...a}),c=n[r+1]),(u.type==="OPERATOR"&&u.value==="."||(u.type==="LEFT_BRACE"||u.type==="COMMA")&&c&&c.type==="COLON")&&(f=!1)),a.type==="TEMPLATE_STRING"&&(a.value=a.replace(p=>x(p))),c&&c.type==="OPERATOR"&&c.value==="=>")if(i.length===0&&(s=r+1),a.type==="RIGHT_PAREN"){let p=r-1;for(;p>0&&n[p].type!=="LEFT_PAREN";)n[p].type==="SYMBOL"&&n[p].originalValue&&(n[p].value=n[p].originalValue,t.add(n[p].value)),p--}else t.add(a.value);f&&(a.varName=a.value,t.has(a.value)||(a.originalValue=a.value,a.value=`ctx['${a.value}']`)),r++}for(let a of n)a.type==="SYMBOL"&&a.varName&&t.has(a.value)&&(a.originalValue=a.value,a.value=`_${a.value}`,a.isLocal=!0);let o=null;if(s!==-1){o=[];let a=new Set;for(let u=s+1;u<n.length;u++){let c=n[u];c.varName&&!c.isLocal&&c.varName!=="this"&&!a.has(c.varName)&&(a.add(c.varName),o.push(c.varName))}}return{expr:n.map(a=>Qs.get(a.value)||a.value).join(""),freeVariables:o}}function x(e){return br(e).expr}var at=/\{\{.*?\}\}|\#\{.*?\}/g;function eo(e,t){let n=e.match(at);return n&&n[0].length===e.length?`(${t(e.slice(2,n[0][0]==="{"?-2:-1))})`:"`"+e.replace(at,i=>"${"+t(i.slice(2,i[0]==="{"?-2:-1))+"}")+"`"}function Gt(e){return eo(e,x)}function en(e){let n=new DOMParser().parseFromString(e,"text/xml");if(n.getElementsByTagName("parsererror").length){let r="Invalid XML in template.",i=n.getElementsByTagName("parsererror")[0].textContent;if(i){r+=`
|
|
14
|
+
The parser has produced the following error message:
|
|
15
|
+
`+i;let s=/\d+/g,o=s.exec(i);if(o){let l=Number(o[0]),a=e.split(`
|
|
16
|
+
`)[l-1],u=s.exec(i);if(a&&u){let c=Number(u[0])-1;a[c]&&(r+=`
|
|
17
|
+
The error might be located at xml line ${l} column ${c}
|
|
18
|
+
${a}
|
|
19
|
+
${"-".repeat(c-1)}^`)}}}throw new _(r)}return n}var y={Text:0,DomNode:2,Multi:3,TIf:4,TSet:5,TCall:6,TOut:7,TForEach:8,TKey:9,TComponent:10,TDebug:11,TLog:12,TCallSlot:13,TCallBlock:14,TTranslation:15,TTranslationContext:16},ne={First:1,Last:2,Index:4,Value:8},lr=new WeakMap;function to(e,t){let n={inPreTag:!1,customDirectives:t};if(typeof e=="string"){let i=en(`<t>${e}</t>`).firstChild;return ar(i,n)}let r=lr.get(e);return r||(r=ar(e.cloneNode(!0),n),lr.set(e,r)),r}function ar(e,t){return $o(e),P(e,t)||{type:y.Text,value:""}}function P(e,t){return e instanceof Element?so(e,t)||oo(e,t)||uo(e,t)||mo(e,t)||wo(e,t)||To(e,t)||fo(e,t)||po(e,t)||ho(e,t)||co(e,t)||yo(e,t)||go(e,t)||ao(e,t)||vo(e,t)||no(e,t):io(e,t)}function no(e,t){return e.tagName!=="t"?null:ut(e,t)}var ro=/[\r\n]/;function io(e,t){if(e.nodeType===Node.TEXT_NODE){let n=e.textContent||"";return!t.inPreTag&&ro.test(n)&&!n.trim()?null:{type:y.Text,value:n}}return null}function so(e,t){if(!t.customDirectives)return null;let n=e.getAttributeNames();for(let r of n){if(r==="t-custom"||r==="t-custom-")throw new _("Missing custom directive name with t-custom directive");if(r.startsWith("t-custom-")){let i=r.split(".")[0].slice(9),s=t.customDirectives[i];if(!s)throw new _(`Custom directive "${i}" is not defined`);let o=e.getAttribute(r),l=r.split(".").slice(1);e.removeAttribute(r);try{s(e,o,l)}catch(a){throw new _(`Custom directive "${i}" throw the following error: ${a}`)}return P(e,t)}}return null}function oo(e,t){if(e.hasAttribute("t-debug")){e.removeAttribute("t-debug");let n=P(e,t),r={type:y.TDebug,content:n};return n?.hasNoRepresentation&&(r.hasNoRepresentation=!0),r}if(e.hasAttribute("t-log")){let n=e.getAttribute("t-log");e.removeAttribute("t-log");let r=P(e,t),i={type:y.TLog,expr:n,content:r};return r?.hasNoRepresentation&&(i.hasNoRepresentation=!0),i}return null}var lo=new Set(["svg","g","path"]);function ao(e,t){let{tagName:n}=e,r=e.getAttribute("t-tag");if(e.removeAttribute("t-tag"),n==="t"&&!r)return null;if(n.startsWith("block-"))throw new _(`Invalid tag name: '${n}'`);t=Object.assign({},t),n==="pre"&&(t.inPreTag=!0);let i=!t.nameSpace&&lo.has(n)?"http://www.w3.org/2000/svg":null,s=e.getAttribute("t-ref");e.removeAttribute("t-ref");let o=e.getAttributeNames(),l=null,a=null,u=null,c=null;for(let f of o){let p=e.getAttribute(f);if(f==="t-on"||f==="t-on-")throw new _("Missing event name with t-on directive");if(f.startsWith("t-on-"))u=u||{},u[f.slice(5)]=p;else if(f.startsWith("t-model")){if(!["input","select","textarea"].includes(n))throw new _("The t-model directive only works with <input>, <textarea> and <select>");let m=e.getAttribute("type"),w=n==="input",d=n==="select",A=w&&m==="checkbox",T=w&&m==="radio",g=f.includes(".trim"),$=g||f.includes(".lazy"),b=f.includes(".number"),N=f.includes(".proxy");c={expr:p,targetAttr:A?"checked":"value",specialInitTargetAttr:T?"checked":null,eventType:T?"click":d||$?"change":"input",hasDynamicChildren:!1,shouldTrim:g,shouldNumberize:b,isProxy:N},d&&(t=Object.assign({},t),t.tModelInfo=c)}else{if(f.startsWith("block-"))throw new _(`Invalid attribute: '${f}'`);if(f==="xmlns")i=p;else if(f.startsWith("t-translation-context-")){let m=f.slice(22);a=a||{},a[m]=p}else if(f!=="t-name"){if(f.startsWith("t-")&&!f.startsWith("t-att"))throw new _(`Unknown QWeb directive: '${f}'`);let m=t.tModelInfo;m&&["t-att-value","t-attf-value"].includes(f)&&(m.hasDynamicChildren=!0),l=l||{},l[f]=p}}}i&&(t.nameSpace=i);let h=tn(e,t);return{type:y.DomNode,tag:n,dynamicTag:r,attrs:l,attrsTranslationCtx:a,on:u,ref:s,content:h,model:c,ns:i}}function co(e,t){if(!e.hasAttribute("t-out")&&!e.hasAttribute("t-esc"))return null;e.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');let n=e.getAttribute("t-out")||e.getAttribute("t-esc");e.removeAttribute("t-out"),e.removeAttribute("t-esc");let r={type:y.TOut,expr:n,body:null},i=e.getAttribute("t-ref");e.removeAttribute("t-ref");let s=P(e,t);return s&&s.type===y.DomNode?(r.body=s.content.length?s.content:null,{...s,ref:i,content:[r]}):r}function uo(e,t){if(!e.hasAttribute("t-foreach"))return null;let n=e.outerHTML,r=e.getAttribute("t-foreach");e.removeAttribute("t-foreach");let i=e.getAttribute("t-as")||"";e.removeAttribute("t-as");let s=e.getAttribute("t-key");if(!s)throw new _(`"Directive t-foreach should always be used with a t-key!" (expression: t-foreach="${r}" t-as="${i}")`);e.removeAttribute("t-key");let o=P(e,t);if(!o)return null;let l=!n.includes("t-call"),a=0;return l&&!n.includes(`${i}_first`)&&(a|=ne.First),l&&!n.includes(`${i}_last`)&&(a|=ne.Last),l&&!n.includes(`${i}_index`)&&(a|=ne.Index),l&&!n.includes(`${i}_value`)&&(a|=ne.Value),{type:y.TForEach,collection:r,elem:i,body:o,key:s,noFlags:a}}function ho(e,t){if(!e.hasAttribute("t-key"))return null;let n=e.getAttribute("t-key");e.removeAttribute("t-key");let r=P(e,t);if(!r)return null;let i={type:y.TKey,expr:n,content:r};return r.hasNoRepresentation&&(i.hasNoRepresentation=!0),i}function fo(e,t){if(!e.hasAttribute("t-call"))return null;if(e.tagName!=="t")throw new _(`Directive 't-call' can only be used on <t> nodes (used on a <${e.tagName}>)`);let n=e.getAttribute("t-call"),r=e.getAttribute("t-call-context");e.removeAttribute("t-call"),e.removeAttribute("t-call-context");let i=null,s=null;for(let l of e.getAttributeNames()){let a=e.getAttribute(l);if(l.startsWith("t-translation-context-")){let u=l.slice(22);s=s||{},s[u]=a}else i=i||{},i[l]=a}let o=ut(e,t);return{type:y.TCall,name:n,attrs:i,attrsTranslationCtx:s,body:o,context:r}}function po(e,t){if(!e.hasAttribute("t-call-block"))return null;let n=e.getAttribute("t-call-block");return{type:y.TCallBlock,name:n}}function mo(e,t){if(!e.hasAttribute("t-if"))return null;let n=e.getAttribute("t-if");e.removeAttribute("t-if");let r=P(e,t)||{type:y.Text,value:""},i=e.nextElementSibling,s=[];for(;i&&i.hasAttribute("t-elif");){let l=i.getAttribute("t-elif");i.removeAttribute("t-elif");let a=P(i,t),u=i.nextElementSibling;i.remove(),i=u,a&&s.push({condition:l,content:a})}let o=null;return i&&i.hasAttribute("t-else")&&(i.removeAttribute("t-else"),o=P(i,t),i.remove()),{type:y.TIf,condition:n,content:r,tElif:s.length?s:null,tElse:o}}function vo(e,t){if(!e.hasAttribute("t-set"))return null;let n=e.getAttribute("t-set"),r=e.getAttribute("t-value")||null,i=e.innerHTML===e.textContent&&e.textContent||null,s=null;return e.textContent!==e.innerHTML&&(s=tn(e,t)),{type:y.TSet,name:n,value:r,defaultValue:i,body:s,hasNoRepresentation:!0}}var bo=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 go(e,t){let n=e.tagName,r=n[0],i=e.hasAttribute("t-component");if(i&&n!=="t")throw new _(`Directive 't-component' can only be used on <t> nodes (used on a <${n}>)`);if(!(r===r.toUpperCase()||i))return null;i&&(n=e.getAttribute("t-component"),e.removeAttribute("t-component"));let s=e.getAttribute("t-props");e.removeAttribute("t-props");let o=e.getAttribute("t-slot-scope");e.removeAttribute("t-slot-scope");let l=null,a=null,u=null;for(let h of e.getAttributeNames()){let f=e.getAttribute(h);if(h.startsWith("t-translation-context-")){let p=h.slice(22);u=u||{},u[p]=f}else if(h.startsWith("t-"))if(h.startsWith("t-on-"))l=l||{},l[h.slice(5)]=f;else{let p=bo.get(h.split("-").slice(0,2).join("-"));throw new _(p||`unsupported directive on Component: ${h}`)}else a=a||{},a[h]=f}let c=null;if(e.hasChildNodes()){let h=e.cloneNode(!0),f=Array.from(h.querySelectorAll("[t-set-slot]"));for(let m of f){if(m.tagName!=="t")throw new _(`Directive 't-set-slot' can only be used on <t> nodes (used on a <${m.tagName}>)`);let w=m.getAttribute("t-set-slot"),d=m.parentElement,A=!1;for(;d&&d!==h;){if(d.hasAttribute("t-component")||d.tagName[0]===d.tagName[0].toUpperCase()){A=!0;break}d=d.parentElement}if(A||!d)continue;m.removeAttribute("t-set-slot"),m.remove();let T=P(m,t),g=null,$=null,b=null,N=null;for(let v of m.getAttributeNames()){let E=m.getAttribute(v);if(v==="t-slot-scope"){N=E;continue}else if(v.startsWith("t-translation-context-")){let D=v.slice(22);b=b||{},b[D]=E}else v.startsWith("t-on-")?(g=g||{},g[v.slice(5)]=E):($=$||{},$[v]=E)}c=c||{},c[w]={content:T,on:g,attrs:$,attrsTranslationCtx:b,scope:N}}let p=ut(h,t);c=c||{},p&&!c.default&&(c.default={content:p,on:l,attrs:null,attrsTranslationCtx:null,scope:o})}return{type:y.TComponent,name:n,isDynamic:i,dynamicProps:s,props:a,propsTranslationCtx:u,slots:c,on:l}}function yo(e,t){if(!e.hasAttribute("t-call-slot")&&!e.hasAttribute("t-slot"))return null;e.hasAttribute("t-slot")&&console.warn("t-slot has been renamed t-call-slot.");let n=e.getAttribute("t-call-slot")||e.getAttribute("t-slot");e.removeAttribute("t-call-slot"),e.removeAttribute("t-slot");let r=null,i=null,s=null;for(let o of e.getAttributeNames()){let l=e.getAttribute(o);if(o.startsWith("t-on-"))s=s||{},s[o.slice(5)]=l;else if(o.startsWith("t-translation-context-")){let a=o.slice(22);i=i||{},i[a]=l}else r=r||{},r[o]=l}return{type:y.TCallSlot,name:n,attrs:r,attrsTranslationCtx:i,on:s,defaultContent:ut(e,t)}}function cr(e){let t={type:y.TTranslation,content:e};return e?.hasNoRepresentation&&(t.hasNoRepresentation=!0),t}function wo(e,t){if(e.getAttribute("t-translation")!=="off")return null;e.removeAttribute("t-translation");let n=P(e,t);if(n?.type===y.Multi){let r=n.content.map(cr);return nn(r)}return cr(n)}function ur(e,t){let n={type:y.TTranslationContext,content:e,translationCtx:t};return e?.hasNoRepresentation&&(n.hasNoRepresentation=!0),n}function To(e,t){let n=e.getAttribute("t-translation-context");if(!n)return null;e.removeAttribute("t-translation-context");let r=P(e,t);if(r?.type===y.Multi){let i=r.content.map(s=>ur(s,n));return nn(i)}return ur(r,n)}function tn(e,t){let n=[];for(let r of e.childNodes){let i=P(r,t);i&&(i.type===y.Multi?n.push(...i.content):n.push(i))}return n}function nn(e){let t={type:y.Multi,content:e};return e.every(n=>n.hasNoRepresentation)&&(t.hasNoRepresentation=!0),t}function ut(e,t){let n=tn(e,t);switch(n.length){case 0:return null;case 1:return n[0];default:return nn(n)}}function No(e){let t=e.querySelectorAll("[t-elif], [t-else]");for(let n=0,r=t.length;n<r;n++){let i=t[n],s=i.previousElementSibling,o=a=>s.getAttribute(a),l=a=>+!!i.getAttribute(a);if(s&&(o("t-if")||o("t-elif"))){if(o("t-foreach"))throw new _("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(l).reduce(function(u,c){return u+c})>1)throw new _("Only one conditional branching directive is allowed per node");let a;for(;(a=i.previousSibling)!==s;){if(a.nodeValue.trim().length&&a.nodeType!==8)throw new _("text is not allowed between branching directives");a.remove()}}else throw new _("t-elif and t-else directives must be preceded by a t-if or t-elif directive")}}function Eo(e){let t=[...e.querySelectorAll("[t-out]")].filter(n=>n.tagName[0]===n.tagName[0].toUpperCase()||n.hasAttribute("t-component"));for(let n of t){if(n.childNodes.length)throw new _("Cannot have t-out on a component that already has content");let r=n.getAttribute("t-out");n.removeAttribute("t-out");let i=n.ownerDocument.createElement("t");r!=null&&i.setAttribute("t-out",r),n.appendChild(i)}}function $o(e){No(e),Eo(e)}var hr=Symbol("zero"),So=/\s+/g,ee;typeof document<"u"&&(ee=document.implementation.createDocument(null,null,null));var ko=new Set(["stop","capture","prevent","self","synthetic","passive"]),ot={};function M(e=""){return ot[e]=(ot[e]||0)+1,e+ot[e]}function Co(e,t){switch(e){case"input":return t==="checked"||t==="indeterminate"||t==="value"||t==="readonly"||t==="readOnly"||t==="disabled";case"option":return t==="selected"||t==="disabled";case"textarea":return t==="value"||t==="readonly"||t==="readOnly"||t==="disabled";case"select":return t==="value"||t==="disabled";case"button":case"optgroup":return t==="disabled"}return!1}function st(e){return`\`${e.replace(/\\/g,"\\\\").replace(/`/g,"\\`").replace(/\$\{/,"\\${")}\``}var qt=class gr{static nextBlockId=1;varName;blockName;dynamicTagName=null;isRoot=!1;hasDynamicChildren=!1;children=[];data=[];dom;currentDom;childNumber=0;target;type;parentVar="";id;constructor(t,n){this.id=gr.nextBlockId++,this.varName="b"+this.id,this.blockName="block"+this.id,this.target=t,this.type=n}insertData(t,n="d"){let r=M(n);return this.target.addLine(`let ${r} = ${t};`),this.data.push(r)-1}insert(t){this.currentDom?this.currentDom.appendChild(t):this.dom=t}generateExpr(t){if(this.type==="block"){let n=this.children.length,r=this.data.length?`[${this.data.join(", ")}]`:n?"[]":"";return n&&(r+=", ["+this.children.map(i=>i.varName).join(", ")+"]"),this.dynamicTagName?`toggler(${this.dynamicTagName}, ${this.blockName}(${this.dynamicTagName})(${r}))`:`${this.blockName}(${r})`}else if(this.type==="list")return`list(c_block${this.id})`;return t}asXmlString(){let t=ee.createElement("t");return t.appendChild(this.dom),t.innerHTML}};function oe(e,t){return Object.assign({block:null,index:0,forceNewBlock:!0,translate:e.translate,translationCtx:e.translationCtx,tKeyExpr:null,nameSpace:e.nameSpace,tModelSelectedExpr:e.tModelSelectedExpr},t)}var fr=class{name;indentLevel=0;loopLevel=0;loopCtxVars=[];tSetVars=new Map;code=[];hasRoot=!1;deferReturn=!1;needsScopeProtection=!1;on;constructor(e,t){this.name=e,this.on=t||null}addLine(e,t){let n=new Array(this.indentLevel+2).join(" ");t===void 0?this.code.push(n+e):this.code.splice(t,0,n+e)}generateCode(){let e=[];e.push(`function ${this.name}(ctx, node, key = "") {`),this.needsScopeProtection&&e.push(" ctx = Object.create(ctx);");for(let t of this.code)e.push(t);return this.hasRoot||e.push("return text('');"),e.push("}"),e.join(`
|
|
20
|
+
`)}currentKey(e){let t=this.loopLevel?`key${this.loopLevel}`:"key";return e.tKeyExpr&&(t=`${e.tKeyExpr} + ${t}`),t}},dr=["alt","aria-label","aria-placeholder","aria-roledescription","aria-valuetext","label","placeholder","title"],Ao=/^(\s*)([\s\S]+?)(\s*)$/,Do=class{blocks=[];nextBlockId=1;isDebug=!1;targets=[];target=new fr("template");templateName;dev;translateFn;translatableAttributes=dr;ast;staticDefs=[];slotNames=new Set;helpers=new Set;constructor(e,t){if(this.translateFn=t.translateFn||(n=>n),t.translatableAttributes){let n=new Set(dr);for(let r of t.translatableAttributes)r.startsWith("-")?n.delete(r.slice(1)):n.add(r);this.translatableAttributes=[...n]}this.dev=t.dev||!1,this.ast=e,this.templateName=t.name,t.name&&(t.name.startsWith("__")?this.target.name=t.name:this.target.name=`template_${t.name.replace(/[^a-zA-Z0-9_$]/g,"_")}`),t.hasGlobalValues&&this.helpers.add("__globals__")}generateCode(){let e=this.ast;this.isDebug=e.type===y.TDebug,qt.nextBlockId=1,ot={},this.compileAST(e,{block:null,index:0,forceNewBlock:!1,translate:!0,translationCtx:"",tKeyExpr:null});let t=[" let { text, createBlock, list, multi, html, toggler } = bdom;"];this.helpers.size&&t.push(`let { ${[...this.helpers].join(", ")} } = helpers;`),this.templateName&&t.push(`// Template name: "${this.templateName}"`);for(let{id:r,expr:i}of this.staticDefs)t.push(`const ${r} = ${i};`);if(this.blocks.length){t.push("");for(let r of this.blocks)if(r.dom){let i=st(r.asXmlString());r.dynamicTagName?(i=i.replace(/^`<\w+/,`\`<\${tag || '${r.dom.nodeName}'}`),i=i.replace(/\w+>`$/,`\${tag || '${r.dom.nodeName}'}>\``),t.push(`let ${r.blockName} = tag => createBlock(${i});`)):t.push(`let ${r.blockName} = createBlock(${i});`)}}if(this.targets.length)for(let r of this.targets)t.push(""),t=t.concat(r.generateCode());t.push(""),t=t.concat("return "+this.target.generateCode());let n=t.join(`
|
|
21
|
+
`);if(this.isDebug){let r=`[Owl Debug]
|
|
22
|
+
${n}`;console.log(r)}return n}compileInNewTarget(e,t,n,r){let i=M(e),s=this.target,o=new fr(i,r);return this.targets.push(o),this.target=o,this.compileAST(t,oe(n)),this.target=s,i}addLine(e,t){this.target.addLine(e,t)}define(e,t){this.addLine(`const ${e} = ${t};`)}insertAnchor(e,t=e.children.length){let n=`block-child-${t}`,r=ee.createElement(n);e.insert(r)}createBlock(e,t,n){let r=this.target.hasRoot,i=new qt(this.target,t);return r||(this.target.hasRoot=!0,i.isRoot=!0),e&&(e.children.push(i),e.type==="list"&&(i.parentVar=`c_block${e.id}`)),i}insertBlock(e,t,n){let r=t.generateExpr(e);if(t.parentVar){let i=this.target.currentKey(n);this.helpers.add("withKey"),this.addLine(`${t.parentVar}[${n.index}] = withKey(${r}, ${i});`);return}n.tKeyExpr&&(r=`toggler(${n.tKeyExpr}, ${r})`),t.isRoot&&!this.target.deferReturn?(this.target.on&&(r=this.wrapWithEventCatcher(r,this.target.on)),this.addLine(`return ${r};`)):this.define(t.varName,r)}translate(e,t){let n=Ao.exec(e);return n[1]+this.translateFn(n[2],t)+n[3]}compileAST(e,t){switch(e.type){case y.Text:return this.compileText(e,t);case y.DomNode:return this.compileTDomNode(e,t);case y.TOut:return this.compileTOut(e,t);case y.TIf:return this.compileTIf(e,t);case y.TForEach:return this.compileTForeach(e,t);case y.TKey:return this.compileTKey(e,t);case y.Multi:return this.compileMulti(e,t);case y.TCall:return this.compileTCall(e,t);case y.TCallBlock:return this.compileTCallBlock(e,t);case y.TSet:return this.compileTSet(e,t);case y.TComponent:return this.compileComponent(e,t);case y.TDebug:return this.compileDebug(e,t);case y.TLog:return this.compileLog(e,t);case y.TCallSlot:return this.compileTCallSlot(e,t);case y.TTranslation:return this.compileTTranslation(e,t);case y.TTranslationContext:return this.compileTTranslationContext(e,t)}}compileDebug(e,t){return this.addLine("debugger;"),e.content?this.compileAST(e.content,t):null}compileLog(e,t){return this.addLine(`console.log(${x(e.expr)});`),e.content?this.compileAST(e.content,t):null}compileText(e,t){let{block:n,forceNewBlock:r}=t,i=e.value;if(i&&t.translate!==!1&&(i=this.translate(i,t.translationCtx)),t.inPreTag||(i=i.replace(So," ")),!n||r)n=this.createBlock(n,"text",t),this.insertBlock(`text(${st(i)})`,n,{...t,forceNewBlock:r&&!n});else{let s=e.type===y.Text?ee.createTextNode:ee.createComment;n.insert(s.call(ee,i))}return n.varName}generateHandlerCode(e,t){let n=e.split(".").slice(1).map(u=>{if(!ko.has(u))throw new _(`Unknown event modifier: '${u}'`);return`"${u}"`}),r="";n.length&&(r=`${n.join(",")}, `);let i=x(t);if(!i.trim())return`[${r}, ctx]`;let s,o=i.match(/^(\([^)]*\))\s*=>/),l=!o&&i.match(/^([a-zA-Z_$][a-zA-Z0-9_$]*)\s*=>/);if(o){let u=o[1].slice(1,-1).trim(),c=i.slice(o[0].length);s=u?`(ctx,${u})=>${c}`:`(ctx)=>${c}`}else if(l){let u=i.slice(l[0].length);s=`(ctx,${l[1]})=>${u}`}else this.helpers.add("callHandler"),s=`(ctx, ev) => callHandler(${i}, ctx, ev)`;let a=M("hdlr_fn");return this.staticDefs.push({id:a,expr:s}),`[${r}${a}, ctx]`}compileTDomNode(e,t){let{block:n,forceNewBlock:r}=t,i=!n||r||e.dynamicTag!==null||e.ns,s=this.target.code.length;if(i&&((e.dynamicTag||t.tKeyExpr||e.ns)&&t.block&&this.insertAnchor(t.block),n=this.createBlock(n,"block",t),this.blocks.push(n),e.dynamicTag)){let c=M("tag");this.define(c,x(e.dynamicTag)),n.dynamicTagName=c}let o={};for(let c in e.attrs){let h,f;if(c.startsWith("t-attf")){h=Gt(e.attrs[c]);let p=n.insertData(h,"attr");f=c.slice(7),o["block-attribute-"+p]=f}else if(c.startsWith("t-att"))if(f=c==="t-att"?null:c.slice(6),h=x(e.attrs[c]),f&&Co(e.tag,f)){f==="readonly"&&(f="readOnly"),f==="value"?h=`new String((${h}) === 0 ? 0 : ((${h}) || ""))`:h=`new Boolean(${h})`;let p=n.insertData(h,"prop");o[`block-property-${p}`]=f}else{let p=n.insertData(h,"attr");c==="t-att"?o["block-attributes"]=String(p):o[`block-attribute-${p}`]=f}else if(this.translatableAttributes.includes(c)){let p=e.attrsTranslationCtx?.[c]||t.translationCtx;o[c]=this.translateFn(e.attrs[c],p)}else h=`"${e.attrs[c]}"`,f=c,o[c]=e.attrs[c];if(f==="value"&&t.tModelSelectedExpr){let p=n.insertData(`${t.tModelSelectedExpr} === ${h}`,"attr");o[`block-attribute-${p}`]="selected"}}let l;if(e.model){let{hasDynamicChildren:c,expr:h,eventType:f,shouldNumberize:p,shouldTrim:m,targetAttr:w,specialInitTargetAttr:d,isProxy:A}=e.model,T,g;if(A){let v=x(h);T=v,g=E=>`${v} = ${E}`}else{let v=M("expr"),E=x(h);this.helpers.add("modelExpr"),this.define(v,`modelExpr(${E})`),T=`${v}()`,g=D=>`${v}.set(${D})`}let $;if(d){let v=w in o&&`'${o[w]}'`;if(!v&&e.attrs){let E=e.attrs[`t-att-${w}`];E&&(v=x(E))}$=n.insertData(`${T} === ${v}`,"prop"),o[`block-property-${$}`]=d}else c?(l=`${M("bValue")}`,this.define(l,T)):($=n.insertData(T,"prop"),o[`block-property-${$}`]=w);this.helpers.add("toNumber");let b=`ev.target.${w}`;b=m?`${b}.trim()`:b,b=p?`toNumber(${b})`:b;let N=`[(ctx, ev) => { ${g(b)}; }, ctx]`;$=n.insertData(N,"hdlr"),o[`block-handler-${$}`]=f}for(let c in e.on){let h=this.generateHandlerCode(c,e.on[c]),f=n.insertData(h,"hdlr");o[`block-handler-${f}`]=c}if(e.ref){let c=x(e.ref);this.helpers.add("createRef");let h=`createRef(${c})`,f=n.insertData(h,"ref");o["block-ref"]=String(f)}let a=e.ns||t.nameSpace,u=a?ee.createElementNS(a,e.tag):ee.createElement(e.tag);for(let[c,h]of Object.entries(o))c==="class"&&h===""||u.setAttribute(c,h);if(n.insert(u),e.content.length){let c=n.currentDom;n.currentDom=u;let h=e.content;for(let f=0;f<h.length;f++){let p=e.content[f],m=oe(t,{block:n,index:n.childNumber,forceNewBlock:!1,tKeyExpr:t.tKeyExpr,nameSpace:a,tModelSelectedExpr:l,inPreTag:t.inPreTag||e.tag==="pre"});this.compileAST(p,m)}n.currentDom=c}if(i&&(this.insertBlock(`${n.blockName}(ddd)`,n,t),n.children.length&&n.hasDynamicChildren)){let c=this.target.code,h=n.children.slice(),f=h.shift();for(let p=s;p<c.length&&!(c[p].trimStart().startsWith(`const ${f.varName} `)&&(c[p]=c[p].replace(`const ${f.varName}`,f.varName),f=h.shift(),!f));p++);this.addLine(`let ${n.children.map(p=>p.varName).join(", ")};`,s)}return n.varName}compileZero(){this.helpers.add("zero");let e=this.slotNames.has(hr);this.slotNames.add(hr);let t=this.target.loopLevel?`key${this.target.loopLevel}`:"key";return e&&(t=this.generateComponentKey(t)),`ctx[zero]?.(node, ${t}) || text("")`}compileTOut(e,t){let{block:n}=t;n&&this.insertAnchor(n),n=this.createBlock(n,"html",t);let r;if(e.expr==="0")r=this.compileZero();else if(e.body){let i=null;i=qt.nextBlockId;let s=oe(t);this.compileAST({type:y.Multi,content:e.body},s),this.helpers.add("safeOutput"),r=`safeOutput(${x(e.expr)}, b${i})`}else this.helpers.add("safeOutput"),r=`safeOutput(${x(e.expr)})`;return this.insertBlock(r,n,t),n.varName}compileTIfBranch(e,t,n){this.target.indentLevel++;let r=t.children.length;this.compileAST(e,oe(n,{block:t,index:n.index})),t.children.length>r&&this.insertAnchor(t,r),this.target.indentLevel--}compileTIf(e,t,n){let{block:r,forceNewBlock:i}=t,s=this.target.code.length,o=!r||r.type!=="multi"&&i;if(r&&(r.hasDynamicChildren=!0),(!r||r.type!=="multi"&&i)&&(r=this.createBlock(r,"multi",t)),this.addLine(`if (${x(e.condition)}) {`),this.compileTIfBranch(e.content,r,t),e.tElif)for(let l of e.tElif)this.addLine(`} else if (${x(l.condition)}) {`),this.compileTIfBranch(l.content,r,t);if(e.tElse&&(this.addLine("} else {"),this.compileTIfBranch(e.tElse,r,t)),this.addLine("}"),o){if(r.children.length){let a=this.target.code,u=r.children.slice(),c=u.shift();for(let h=s;h<a.length&&!(a[h].trimStart().startsWith(`const ${c.varName} `)&&(a[h]=a[h].replace(`const ${c.varName}`,c.varName),c=u.shift(),!c));h++);this.addLine(`let ${r.children.map(h=>h.varName).join(", ")};`,s)}let l=r.children.map(a=>a.varName).join(", ");this.insertBlock(`multi([${l}])`,r,t)}return r.varName}compileTForeach(e,t){let{block:n}=t;n&&this.insertAnchor(n),n=this.createBlock(n,"list",t),this.target.loopLevel++;let r=`i${this.target.loopLevel}`,i=M("ctx");this.addLine(`const ${i} = ctx;`),this.target.loopCtxVars.push(i);let s=`v_block${n.id}`,o=`k_block${n.id}`,l=`l_block${n.id}`,a=`c_block${n.id}`;this.helpers.add("prepareList"),this.define(`[${o}, ${s}, ${l}, ${a}]`,`prepareList(${x(e.collection)});`),this.dev&&this.define(`keys${n.id}`,"new Set()"),this.addLine(`for (let ${r} = 0; ${r} < ${l}; ${r}++) {`),this.target.indentLevel++,this.addLine(`let ctx = Object.create(${i});`),this.addLine(`ctx[\`${e.elem}\`] = ${o}[${r}];`),e.noFlags&ne.First||this.addLine(`ctx[\`${e.elem}_first\`] = ${r} === 0;`),e.noFlags&ne.Last||this.addLine(`ctx[\`${e.elem}_last\`] = ${r} === ${o}.length - 1;`),e.noFlags&ne.Index||this.addLine(`ctx[\`${e.elem}_index\`] = ${r};`),e.noFlags&ne.Value||this.addLine(`ctx[\`${e.elem}_value\`] = ${s}[${r}];`),this.define(`key${this.target.loopLevel}`,e.key?x(e.key):r),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}));`));let u=oe(t,{block:n,index:r});return this.compileAST(e.body,u),this.target.indentLevel--,this.target.loopLevel--,this.target.loopCtxVars.pop(),this.addLine("}"),this.insertBlock("l",n,t),n.varName}compileTKey(e,t){let n=M("tKey_");return this.define(n,x(e.expr)),t=oe(t,{tKeyExpr:n,block:t.block,index:t.index}),this.compileAST(e.content,t)}compileMulti(e,t){let{block:n,forceNewBlock:r}=t,i=!n||r,s=this.target.code.length;if(i){let l=e.content.filter(u=>!u.hasNoRepresentation).length,a=null;if(l<=1){let u=!this.target.hasRoot&&e.content[e.content.length-1].hasNoRepresentation;u&&(this.target.deferReturn=!0);for(let c of e.content){let h=this.compileAST(c,t);a=a||h}return u&&(this.target.deferReturn=!1,this.addLine(`return ${a};`)),a}n=this.createBlock(n,"multi",t)}let o=0;for(let l=0,a=e.content.length;l<a;l++){let u=e.content[l],c=!u.hasNoRepresentation,h=oe(t,{block:n,index:o,forceNewBlock:c});this.compileAST(u,h),c&&o++}if(i){if(n.hasDynamicChildren&&n.children.length){let a=this.target.code,u=n.children.slice(),c=u.shift();for(let h=s;h<a.length&&!(a[h].trimStart().startsWith(`const ${c.varName} `)&&(a[h]=a[h].replace(`const ${c.varName}`,c.varName),c=u.shift(),!c));h++);this.addLine(`let ${n.children.map(h=>h.varName).join(", ")};`,s)}let l=n.children.map(a=>a.varName).join(", ");this.insertBlock(`multi([${l}])`,n,t)}return n.varName}compileTCall(e,t){let{block:n,forceNewBlock:r}=t,i=e.attrs?this.formatPropObject(e.attrs,e.attrsTranslationCtx,t.translationCtx):[],o=at.test(e.name)?Gt(e.name):"`"+e.name+"`";if(n&&!r&&this.insertAnchor(n),n=this.createBlock(n,"multi",t),e.body){let c=this.compileInNewTarget("callBody",e.body,t),h=M("lazyBlock");this.define(h,`${c}.bind(this, ctx)`),this.helpers.add("zero"),i.push(`[zero]: ${h}`)}let l,a=`{${i.join(", ")}}`;if(e.context){let c=M("ctx");this.addLine(`const ${c} = ${x(e.context)};`),i.length?l=`Object.assign({this: ${c}}, ${a})`:l=`{this: ${c}}`}else i.length===0?l="ctx":l=`Object.assign(Object.create(ctx), ${a})`;let u=this.generateComponentKey();return this.helpers.add("callTemplate"),this.insertBlock(`callTemplate(${o}, this, app, ${l}, node, ${u})`,n,{...t,forceNewBlock:!n}),n.varName}compileTCallBlock(e,t){let{block:n,forceNewBlock:r}=t;return n&&(r||this.insertAnchor(n)),n=this.createBlock(n,"multi",t),this.insertBlock(x(e.name),n,{...t,forceNewBlock:!n}),n.varName}compileTSet(e,t){let n=e.value?x(e.value||""):"null",r=this.target.loopLevel===0,i=this.target.tSetVars.get(e.name),s=i!==void 0&&this.target.loopLevel>i;if(e.body){this.helpers.add("LazyValue");let o={type:y.Multi,content:e.body},l=this.compileInNewTarget("value",o,t),a=this.target.currentKey(t),u=`new LazyValue(${l}, ctx, this, node, ${a})`;if(u=e.value?u?`withDefault(${n}, ${u})`:n:u,this.helpers.add("withDefault"),s){let c=this.target.loopCtxVars[i];this.addLine(`${c}[\`${e.name}\`] = ${u};`)}else r?(this.target.needsScopeProtection=!0,this.addLine(`ctx[\`${e.name}\`] = ${u};`),this.target.tSetVars.set(e.name,0)):(this.addLine(`ctx[\`${e.name}\`] = ${u};`),this.target.tSetVars.set(e.name,this.target.loopLevel))}else{let o;if(e.defaultValue){let l=st(t.translate?this.translate(e.defaultValue,t.translationCtx):e.defaultValue);e.value?(this.helpers.add("withDefault"),o=`withDefault(${n}, ${l})`):o=l}else o=n;if(s){let l=this.target.loopCtxVars[i];this.addLine(`${l}["${e.name}"] = ${o};`)}else r?(this.target.needsScopeProtection=!0,this.addLine(`ctx["${e.name}"] = ${o};`),this.target.tSetVars.set(e.name,0)):(this.addLine(`ctx["${e.name}"] = ${o};`),this.target.tSetVars.set(e.name,this.target.loopLevel))}return null}generateComponentKey(e="key"){let t=[M("__")];for(let n=0;n<this.target.loopLevel;n++)t.push(`\${key${n+1}}`);return`${e} + \`${t.join("__")}\``}generateSignalCacheKey(){let e=[M("__sig_")];for(let t=0;t<this.target.loopLevel;t++)e.push(`\${key${t+1}}`);return`\`${e.join("__")}\``}formatProp(e,t,n,r){if(e.endsWith(".translate")){let i=n?.[e]||r;t=st(this.translateFn(t,i))}else t=x(t);if(e.includes(".")){let[i,s]=e.split(".");switch(e=i,s){case"bind":t=`(${t}).bind(this)`;break;case"alike":case"translate":break;default:throw new _(`Invalid prop suffix: ${s}`)}}return e=/^[a-z_]+$/i.test(e)?e:`'${e}'`,`${e}: ${t||void 0}`}formatPropObject(e,t,n){return Object.entries(e).map(([r,i])=>this.formatProp(r,i,t,n))}getPropString(e,t){let n=`{${e.join(",")}}`;return t&&(n=`Object.assign({}, ${x(t)}${e.length?", "+n:""})`),n}compileComponent(e,t){let{block:n}=t,r="slots"in(e.props||{}),i=[],s=[];for(let p in e.props||{}){let[m,w]=p.split(".");if(w==="signal"){let g=x(e.props[p]),$=/^[a-z_]+$/i.test(m)?m:`'${m}'`;this.helpers.add("toSignal");let b=this.generateSignalCacheKey();i.push(`${$}: toSignal(node, ${b}, ${g})`);continue}if(w){i.push(this.formatProp(p,e.props[p],e.propsTranslationCtx,t.translationCtx));continue}let{expr:d,freeVariables:A}=br(e.props[p]),T=/^[a-z_]+$/i.test(m)?m:`'${m}'`;if(i.push(`${T}: ${d||void 0}`),A)for(let g of A){let $=`${m}.${g}`;s.push(`"${$}"`),i.push(`"${$}": ctx['${g}']`)}else s.push(`"${m}"`)}let o="";if(e.slots){let p=[];for(let m in e.slots){let w=e.slots[m],d=[];if(w.content){let g=this.compileInNewTarget("slot",w.content,t,w.on);d.push(`__render: ${g}.bind(this), __ctx: ctx`)}let A=e.slots[m].scope;A&&d.push(`__scope: "${A}"`),e.slots[m].attrs&&d.push(...this.formatPropObject(e.slots[m].attrs,e.slots[m].attrsTranslationCtx,t.translationCtx));let T=`{${d.join(", ")}}`;p.push(`'${m}': ${T}`)}o=`{${p.join(", ")}}`}o&&!(e.dynamicProps||r)&&(this.helpers.add("markRaw"),i.push(`slots: markRaw(${o})`));let l=this.getPropString(i,e.dynamicProps),a;(o&&(e.dynamicProps||r)||this.dev)&&(a=M("props"),this.define(a,l),l=a),o&&(e.dynamicProps||r)&&(this.helpers.add("markRaw"),this.addLine(`${a}.slots = markRaw(Object.assign(${o}, ${a}.slots))`));let u;e.isDynamic?(u=M("Comp"),this.define(u,x(e.name))):u=`\`${e.name}\``,n&&(t.forceNewBlock===!1||t.tKeyExpr)&&this.insertAnchor(n);let c=this.generateComponentKey();t.tKeyExpr&&(c=`${t.tKeyExpr} + ${c}`);let h=M("comp");this.helpers.add("createComponent"),this.staticDefs.push({id:h,expr:`createComponent(app, ${e.isDynamic?null:u}, ${!e.isDynamic}, ${!!e.slots}, ${!!e.dynamicProps}, [${s}])`}),e.isDynamic&&(c=`(${u}).name + ${c}`);let f=`${h}(${l}, ${c}, node, this, ${e.isDynamic?u:null})`;return e.isDynamic&&(f=`toggler(${u}, ${f})`),e.on&&(f=this.wrapWithEventCatcher(f,e.on)),n=this.createBlock(n,"multi",t),this.insertBlock(f,n,t),n.varName}wrapWithEventCatcher(e,t){this.helpers.add("createCatcher");let n=M("catcher"),r={},i=[];for(let s in t){let o=M("hdlr"),l=i.push(o)-1;r[s]=l;let a=this.generateHandlerCode(s,t[s]);this.define(o,a)}return this.staticDefs.push({id:n,expr:`createCatcher(${JSON.stringify(r)})`}),`${n}(${e}, [${i.join(",")}])`}compileTCallSlot(e,t){this.helpers.add("callSlot");let{block:n}=t,r,i,s=!1,o=!1;e.name.match(at)?(s=!0,o=!0,i=Gt(e.name)):(i="'"+e.name+"'",o=o||this.slotNames.has(e.name),this.slotNames.add(e.name));let l={...e.attrs},a=l["t-props"];delete l["t-props"];let u=this.target.loopLevel?`key${this.target.loopLevel}`:"key";o&&(u=this.generateComponentKey(u));let c=e.attrs?this.formatPropObject(l,e.attrsTranslationCtx,t.translationCtx):[],h=this.getPropString(c,a);if(e.defaultContent){let f=this.compileInNewTarget("defaultContent",e.defaultContent,t);r=`callSlot(ctx, node, ${u}, ${i}, ${s}, ${h}, ${f}.bind(this))`}else if(s){let f=M("slot");this.define(f,i),r=`toggler(${f}, callSlot(ctx, node, ${u}, ${f}, ${s}, ${h}))`}else r=`callSlot(ctx, node, ${u}, ${i}, ${s}, ${h})`;return e.on&&(r=this.wrapWithEventCatcher(r,e.on)),n&&this.insertAnchor(n),n=this.createBlock(n,"multi",t),this.insertBlock(r,n,{...t,forceNewBlock:!1}),n.varName}compileTTranslation(e,t){return e.content?this.compileAST(e.content,Object.assign({},t,{translate:!1})):null}compileTTranslationContext(e,t){return e.content?this.compileAST(e.content,Object.assign({},t,{translationCtx:e.translationCtx})):null}};function yr(e,t={hasGlobalValues:!1}){let n=to(e,t.customDirectives),i=new Do(n,t).generateCode();try{return new Function("app, bdom, helpers",i)}catch(s){let{name:o}=t,l=o?`template "${o}"`:"anonymous template",a=new _(`Failed to compile ${l}: ${s.message}
|
|
23
|
+
|
|
24
|
+
generated code:
|
|
25
|
+
function(app, bdom, helpers) {
|
|
26
|
+
${i}
|
|
27
|
+
}`);throw a.cause=s,a}}Me.prototype._compileTemplate=function(t,n){return yr(n,{name:t,dev:this.dev,translateFn:this.translateFn,translatableAttributes:this.translatableAttributes,customDirectives:this.customDirectives,hasGlobalValues:this.hasGlobalValues})};Me.prototype._parseXML=function(t){return en(t)};return kr(_o);})();
|