@odoo/owl 2.0.0-beta.1 → 2.0.0-beta.2
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 +46 -9
- package/dist/owl.cjs.min.js +1 -1
- package/dist/owl.es.js +46 -9
- package/dist/owl.es.min.js +1 -1
- package/dist/owl.iife.js +46 -9
- package/dist/owl.iife.min.js +1 -1
- package/dist/types/component/component_node.d.ts +1 -0
- package/dist/types/reactivity.d.ts +4 -0
- package/package.json +1 -1
package/dist/owl.cjs.js
CHANGED
|
@@ -1473,6 +1473,16 @@ function clearReactivesForCallback(callback) {
|
|
|
1473
1473
|
}
|
|
1474
1474
|
targetsToClear.clear();
|
|
1475
1475
|
}
|
|
1476
|
+
function getSubscriptions(callback) {
|
|
1477
|
+
const targets = callbacksToTargets.get(callback) || [];
|
|
1478
|
+
return [...targets].map((target) => {
|
|
1479
|
+
const keysToCallbacks = targetToKeysToCallbacks.get(target);
|
|
1480
|
+
return {
|
|
1481
|
+
target,
|
|
1482
|
+
keys: keysToCallbacks ? [...keysToCallbacks.keys()] : [],
|
|
1483
|
+
};
|
|
1484
|
+
});
|
|
1485
|
+
}
|
|
1476
1486
|
const reactiveCache = new WeakMap();
|
|
1477
1487
|
/**
|
|
1478
1488
|
* Creates a reactive proxy for an object. Reading data on the reactive object
|
|
@@ -1896,7 +1906,16 @@ function cancelFibers(fibers) {
|
|
|
1896
1906
|
let result = 0;
|
|
1897
1907
|
for (let fiber of fibers) {
|
|
1898
1908
|
fiber.node.fiber = null;
|
|
1899
|
-
if (
|
|
1909
|
+
if (fiber.bdom) {
|
|
1910
|
+
// if fiber has been rendered, this means that the component props have
|
|
1911
|
+
// been updated. however, this fiber will not be patched to the dom, so
|
|
1912
|
+
// it could happen that the next render compare the current props with
|
|
1913
|
+
// the same props, and skip the render completely. With the next line,
|
|
1914
|
+
// we kindly request the component code to force a render, so it works as
|
|
1915
|
+
// expected.
|
|
1916
|
+
fiber.node.forceNextRender = true;
|
|
1917
|
+
}
|
|
1918
|
+
else {
|
|
1900
1919
|
result++;
|
|
1901
1920
|
}
|
|
1902
1921
|
result += cancelFibers(fiber.children);
|
|
@@ -2203,6 +2222,13 @@ function useState(state) {
|
|
|
2203
2222
|
batchedRenderFunctions.set(node, render);
|
|
2204
2223
|
// manual implementation of onWillDestroy to break cyclic dependency
|
|
2205
2224
|
node.willDestroy.push(clearReactivesForCallback.bind(null, render));
|
|
2225
|
+
if (node.app.dev) {
|
|
2226
|
+
Object.defineProperty(node, "subscriptions", {
|
|
2227
|
+
get() {
|
|
2228
|
+
return getSubscriptions(render);
|
|
2229
|
+
},
|
|
2230
|
+
});
|
|
2231
|
+
}
|
|
2206
2232
|
}
|
|
2207
2233
|
return reactive(state, render);
|
|
2208
2234
|
}
|
|
@@ -2231,8 +2257,15 @@ function component(name, props, key, ctx, parent) {
|
|
|
2231
2257
|
}
|
|
2232
2258
|
const parentFiber = ctx.fiber;
|
|
2233
2259
|
if (node) {
|
|
2234
|
-
|
|
2235
|
-
if (
|
|
2260
|
+
let shouldRender = node.forceNextRender;
|
|
2261
|
+
if (shouldRender) {
|
|
2262
|
+
node.forceNextRender = false;
|
|
2263
|
+
}
|
|
2264
|
+
else {
|
|
2265
|
+
const currentProps = node.component.props[TARGET];
|
|
2266
|
+
shouldRender = parentFiber.deep || arePropsDifferent(currentProps, props);
|
|
2267
|
+
}
|
|
2268
|
+
if (shouldRender) {
|
|
2236
2269
|
node.updateAndRender(props, parentFiber);
|
|
2237
2270
|
}
|
|
2238
2271
|
}
|
|
@@ -2259,6 +2292,7 @@ class ComponentNode {
|
|
|
2259
2292
|
this.fiber = null;
|
|
2260
2293
|
this.bdom = null;
|
|
2261
2294
|
this.status = 0 /* NEW */;
|
|
2295
|
+
this.forceNextRender = false;
|
|
2262
2296
|
this.children = Object.create(null);
|
|
2263
2297
|
this.refs = {};
|
|
2264
2298
|
this.willStart = [];
|
|
@@ -5114,6 +5148,7 @@ class TemplateSet {
|
|
|
5114
5148
|
}
|
|
5115
5149
|
}
|
|
5116
5150
|
|
|
5151
|
+
let hasBeenLogged = false;
|
|
5117
5152
|
const DEV_MSG = () => {
|
|
5118
5153
|
const hash = window.owl ? window.owl.__info__.hash : "master";
|
|
5119
5154
|
return `Owl is running in 'dev' mode.
|
|
@@ -5130,11 +5165,13 @@ class App extends TemplateSet {
|
|
|
5130
5165
|
if (config.test) {
|
|
5131
5166
|
this.dev = true;
|
|
5132
5167
|
}
|
|
5133
|
-
if (this.dev && !config.test) {
|
|
5168
|
+
if (this.dev && !config.test && !hasBeenLogged) {
|
|
5134
5169
|
console.info(DEV_MSG());
|
|
5170
|
+
hasBeenLogged = true;
|
|
5135
5171
|
}
|
|
5136
|
-
const
|
|
5137
|
-
|
|
5172
|
+
const env = config.env || {};
|
|
5173
|
+
const descrs = Object.getOwnPropertyDescriptors(env);
|
|
5174
|
+
this.env = Object.freeze(Object.create(Object.getPrototypeOf(env), descrs));
|
|
5138
5175
|
this.props = config.props || {};
|
|
5139
5176
|
}
|
|
5140
5177
|
mount(target, options) {
|
|
@@ -5352,7 +5389,7 @@ exports.whenReady = whenReady;
|
|
|
5352
5389
|
exports.xml = xml;
|
|
5353
5390
|
|
|
5354
5391
|
|
|
5355
|
-
__info__.version = '2.0.0-beta.
|
|
5356
|
-
__info__.date = '2022-03-
|
|
5357
|
-
__info__.hash = '
|
|
5392
|
+
__info__.version = '2.0.0-beta.2';
|
|
5393
|
+
__info__.date = '2022-03-03T15:22:11.176Z';
|
|
5394
|
+
__info__.hash = 'e4fdd32';
|
|
5358
5395
|
__info__.url = 'https://github.com/odoo/owl';
|
package/dist/owl.cjs.min.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
"use strict";function t(t){t=t.slice();const e=[];let n;for(;(n=t[0])&&"string"==typeof n;)e.push(t.shift());return{modifiers:e,data:t}}Object.defineProperty(exports,"__esModule",{value:!0});const e={shouldNormalizeDom:!0,mainEventHandler:(e,n,o)=>("function"==typeof e?e(n):Array.isArray(e)&&(e=t(e).data)[0](e[1],n),!1)};class n{constructor(t,e){this.key=t,this.child=e}mount(t,e){this.parentEl=t,this.child.mount(t,e)}moveBefore(t,e){this.child.moveBefore(t?t.child:null,e)}patch(t,e){if(this===t)return;let n=this.child,o=t.child;this.key===t.key?n.patch(o,e):(o.mount(this.parentEl,n.firstNode()),e&&n.beforeRemove(),n.remove(),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 o(t,e){return new n(t,e)}const{setAttribute:r,removeAttribute:s}=Element.prototype,i=DOMTokenList.prototype,l=i.add,a=i.remove,c=Array.isArray,{split:h,trim:u}=String.prototype,d=/\s+/;function f(t,e){switch(e){case!1:case void 0:s.call(this,t);break;case!0:r.call(this,t,"");break;default:r.call(this,t,e)}}function p(t){return function(e){f.call(this,t,e)}}function m(t){if(c(t))f.call(this,t[0],t[1]);else for(let e in t)f.call(this,e,t[e])}function g(t,e){if(c(t)){const n=t[0],o=t[1];if(n===e[0]){if(o===e[1])return;f.call(this,n,o)}else s.call(this,e[0]),f.call(this,n,o)}else{for(let n in e)n in t||s.call(this,n);for(let n in t){const o=t[n];o!==e[n]&&f.call(this,n,o)}}}function b(t){const e={};switch(typeof t){case"string":const n=u.call(t);if(!n)return{};let o=h.call(n,d);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){const t=h.call(n,d);for(let n of t)e[n]=o}}return e;case"undefined":return{};case"number":return{[t]:!0};default:return{[t]:!0}}}function v(t){t=""===t?{}:b(t);const e=this.classList;for(let n in t)l.call(e,n)}function y(t,e){e=""===e?{}:b(e),t=""===t?{}:b(t);const n=this.classList;for(let o in e)o in t||a.call(n,o);for(let o in t)o in e||l.call(n,o)}function w(t){return function(e){this[t]=e||""}}function x(t,e){switch(t){case"input":return"checked"===e||"indeterminate"===e||"value"===e||"readonly"===e||"disabled"===e;case"option":return"selected"===e||"disabled"===e;case"textarea":return"value"===e||"readonly"===e||"disabled"===e;case"select":return"value"===e||"disabled"===e;case"button":case"optgroup":return"disabled"===e}return!1}function k(t){const n=t.split(".")[0],o=t.includes(".capture");return t.includes(".synthetic")?function(t,n=!1){let o="__event__synthetic_"+t;n&&(o+="_capture");!function(t,n,o=!1){if(E[n])return;document.addEventListener(t,(t=>function(t,n){let o=n.target;for(;null!==o;){const r=o[t];if(r)for(const t of Object.values(r)){if(e.mainEventHandler(t,n,o))return}o=o.parentNode}}(n,t)),{capture:o}),E[n]=!0}(t,o,n);const r=N++;function s(t){const e=this[o]||{};e[r]=t,this[o]=e}return{setup:s,update:s}}(n,o):function(t,n=!1){let o=`__event__${t}_${$++}`;n&&(o+="_capture");function r(t){const n=t.currentTarget;if(!n||!document.contains(n))return;const r=n[o];r&&e.mainEventHandler(r,t,n)}function s(e){this[o]=e,this.addEventListener(t,r,{capture:n})}function i(t){this[o]=t}return{setup:s,update:i}}(n,o)}let $=1;let N=1;const E={};const A=Node.prototype,T=A.insertBefore,_=(L=A,S="textContent",Object.getOwnPropertyDescriptor(L,S)).set;var L,S;const C=A.removeChild;class D{constructor(t){this.children=t}mount(t,e){const n=this.children,o=n.length,r=new Array(o);for(let s=0;s<o;s++){let o=n[s];if(o)o.mount(t,e);else{const n=document.createTextNode("");r[s]=n,T.call(t,n,e)}}this.anchors=r,this.parentEl=t}moveBefore(t,e){if(t){const n=t.children[0];e=(n?n.firstNode():t.anchors[0])||null}const n=this.children,o=this.parentEl,r=this.anchors;for(let t=0,s=n.length;t<s;t++){let s=n[t];if(s)s.moveBefore(null,e);else{const n=r[t];T.call(o,n,e)}}}patch(t,e){if(this===t)return;const n=this.children,o=t.children,r=this.anchors,s=this.parentEl;for(let t=0,i=n.length;t<i;t++){const i=n[t],l=o[t];if(i)if(l)i.patch(l,e);else{const o=i.firstNode(),l=document.createTextNode("");r[t]=l,T.call(s,l,o),e&&i.beforeRemove(),i.remove(),n[t]=void 0}else if(l){n[t]=l;const e=r[t];l.mount(s,e),C.call(s,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)_.call(t,"");else{const e=this.children,n=this.anchors;for(let o=0,r=e.length;o<r;o++){const r=e[o];r?r.remove():C.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 O(t){return new D(t)}const B=Node.prototype,I=CharacterData.prototype,R=B.insertBefore,P=((t,e)=>Object.getOwnPropertyDescriptor(t,e))(I,"data").set,j=B.removeChild;class M{constructor(t){this.text=t}mountNode(t,e,n){this.parentEl=e,R.call(e,t,n),this.el=t}moveBefore(t,e){const n=t?t.el:e;R.call(this.parentEl,this.el,n)}beforeRemove(){}remove(){j.call(this.parentEl,this.el)}firstNode(){return this.el}toString(){return this.text}}class W extends M{mount(t,e){this.mountNode(document.createTextNode(K(this.text)),t,e)}patch(t){const e=t.text;this.text!==e&&(P.call(this.el,K(e)),this.text=e)}}class F extends M{mount(t,e){this.mountNode(document.createComment(K(this.text)),t,e)}patch(){}}function V(t){return new W(t)}function z(t){return new F(t)}function K(t){switch(typeof t){case"string":return t;case"number":return String(t);case"boolean":return t?"true":"false";default:return t||""}}const H=(t,e)=>Object.getOwnPropertyDescriptor(t,e),U=Node.prototype,q=Element.prototype,G=H(CharacterData.prototype,"data").set,X=H(U,"firstChild").get,Y=H(U,"nextSibling").get,Z=()=>{},Q={};function J(t){if(t in Q)return Q[t];const n=(new DOMParser).parseFromString(`<t>${t}</t>`,"text/xml").firstChild.firstChild;e.shouldNormalizeDom&&tt(n);const o=et(n),r=rt(o),s=function(t,e){let n=function(t,e){const{refN:n,collectors:o,children:r}=e,s=o.length;e.locations.sort(((t,e)=>t.idx-e.idx));const i=e.locations.map((t=>({refIdx:t.refIdx,setData:t.setData,updateData:t.updateData}))),l=i.length,a=r.length,c=r,h=n>0,u=U.cloneNode,d=U.insertBefore,f=q.remove;class p{constructor(t){this.data=t}beforeRemove(){}remove(){f.call(this.el)}firstNode(){return this.el}moveBefore(t,e){const n=t?t.el:e;d.call(this.parentEl,this.el,n)}toString(){const t=document.createElement("div");return this.mount(t,null),t.innerHTML}mount(e,n){const o=u.call(t,!0);d.call(e,o,n),this.el=o,this.parentEl=e}patch(t,e){}}h&&(p.prototype.mount=function(e,r){const h=u.call(t,!0),f=new Array(n);this.refs=f,f[0]=h;for(let t=0;t<s;t++){const e=o[t];f[e.idx]=e.getVal.call(f[e.prevIdx])}if(l){const t=this.data;for(let e=0;e<l;e++){const n=i[e];n.setData.call(f[n.refIdx],t[e])}}if(d.call(e,h,r),a){const t=this.children;for(let e=0;e<a;e++){const n=t[e];if(n){const t=c[e],o=t.afterRefIdx?f[t.afterRefIdx]:null;n.isOnlyChild=t.isOnlyChild,n.mount(f[t.parentRefIdx],o)}}}this.el=h,this.parentEl=e},p.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 r=e[t],s=o[t];if(r!==s){const e=i[t];e.updateData.call(n[e.refIdx],s,r)}}this.data=o}if(a){let o=this.children;const r=t.children;for(let t=0;t<a;t++){const s=o[t],i=r[t];if(s)i?s.patch(i,e):(e&&s.beforeRemove(),s.remove(),o[t]=void 0);else if(i){const e=c[t],r=e.afterRefIdx?n[e.afterRefIdx]:null;i.mount(n[e.parentRefIdx],r),o[t]=i}}}});return p}(t,e);if(e.cbRefs.length){const t=e.cbRefs,o=e.refList;let r=t.length;n=class extends n{mount(t,e){o.push(new Array(r)),super.mount(t,e);for(let t of o.pop())t()}remove(){super.remove();for(let e of t){(0,this.data[e])(null)}}}}if(e.children.length)return n=class extends n{constructor(t,e){super(t),this.children=e}},n.prototype.beforeRemove=D.prototype.beforeRemove,(t,e=[])=>new n(t,e);return t=>new n(t)}(o.el,r);return Q[t]=s,s}function tt(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)tt(t.childNodes.item(e))}else t.remove()}function et(t,e=null,n=null){switch(t.nodeType){case Node.ELEMENT_NODE:{let o=n&&n.currentNS;const r=t.tagName;let s=void 0;const i=[];if(r.startsWith("block-text-")){const t=parseInt(r.slice(11),10);i.push({type:"text",idx:t}),s=document.createTextNode("")}if(r.startsWith("block-child-")){n.isRef||nt(n);const t=parseInt(r.slice(12),10);i.push({type:"child",idx:t}),s=document.createTextNode("")}const l=t.attributes,a=l.getNamedItem("block-ns");if(a&&(l.removeNamedItem("block-ns"),o=a.value),s||(s=o?document.createElementNS(o,r):document.createElement(r)),s instanceof Element)for(let t=0;t<l.length;t++){const e=l[t].name,n=l[t].value;if(e.startsWith("block-handler-")){const t=parseInt(e.slice(14),10);i.push({type:"handler",idx:t,event:n})}else if(e.startsWith("block-attribute-")){const t=parseInt(e.slice(16),10);i.push({type:"attribute",idx:t,name:n,tag:r})}else"block-attributes"===e?i.push({type:"attributes",idx:parseInt(n,10)}):"block-ref"===e?i.push({type:"ref",idx:parseInt(n,10)}):s.setAttribute(l[t].name,n)}const c={parent:e,firstChild:null,nextSibling:null,el:s,info:i,refN:0,currentNS:o};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);i.push({idx:n,type:"child",isOnlyChild:!0})}else{c.firstChild=et(t.firstChild,c,c),s.appendChild(c.firstChild.el);let e=t.firstChild,n=c.firstChild;for(;e=e.nextSibling;)n.nextSibling=et(e,n,c),s.appendChild(n.nextSibling.el),n=n.nextSibling}}return c.info.length&&nt(c),c}case Node.TEXT_NODE:case Node.COMMENT_NODE:return{parent:e,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 Error("boom")}function nt(t){t.isRef=!0;do{t.refN++}while(t=t.parent)}function ot(t){let e=t.parent;for(;e&&e.nextSibling===t;)t=e,e=e.parent;return e}function rt(t,e,n){if(!e){e={collectors:[],locations:[],children:new Array(t.info.filter((t=>"child"===t.type)).length),cbRefs:[],refN:t.refN,refList:[]},n=0}if(t.refN){const o=n,r=t.isRef,s=t.firstChild?t.firstChild.refN:0,i=t.nextSibling?t.nextSibling.refN:0;if(r){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:st,updateData:st});break;case"child":n.isOnlyChild?t.children[n.idx]={parentRefIdx:n.refIdx,isOnlyChild:!0}:t.children[n.idx]={parentRefIdx:ot(e).refIdx,afterRefIdx:n.refIdx};break;case"attribute":{const e=n.refIdx;let o,r;if(x(n.tag,n.name)){const t=w(n.name);r=t,o=t}else"class"===n.name?(r=v,o=y):(r=p(n.name),o=r);t.locations.push({idx:n.idx,refIdx:e,setData:r,updateData:o});break}case"attributes":t.locations.push({idx:n.idx,refIdx:n.refIdx,setData:m,updateData:g});break;case"handler":{const{setup:e,update:o}=k(n.event);t.locations.push({idx:n.idx,refIdx:n.refIdx,setData:e,updateData:o});break}case"ref":const o=t.cbRefs.push(n.idx)-1;t.locations.push({idx:n.idx,refIdx:n.refIdx,setData:it(o,t.refList),updateData:Z})}}(e,t),n++}if(i){const r=n+s;e.collectors.push({idx:r,prevIdx:o,getVal:Y}),rt(t.nextSibling,e,r)}s&&(e.collectors.push({idx:n,prevIdx:o,getVal:X}),rt(t.firstChild,e,n))}return e}function st(t){G.call(this,K(t))}function it(t,e){return function(n){e[e.length-1][t]=()=>n(this)}}const lt=Node.prototype,at=lt.insertBefore,ct=lt.appendChild,ht=lt.removeChild,ut=((t,e)=>Object.getOwnPropertyDescriptor(t,e))(lt,"textContent").set;class dt{constructor(t){this.children=t}mount(t,e){const n=this.children,o=document.createTextNode("");this.anchor=o,at.call(t,o,e);const r=n.length;if(r){const e=n[0].mount;for(let s=0;s<r;s++)e.call(n[s],t,o)}this.parentEl=t}moveBefore(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].moveBefore(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 r=o[0]||n[0],{mount:s,patch:i,remove:l,beforeRemove:a,moveBefore:c,firstNode:h}=r,u=this.anchor,d=this.isOnlyChild,f=this.parentEl;if(0===o.length&&d){if(e)for(let t=0,e=n.length;t<e;t++)a.call(n[t]);return ut.call(f,""),void ct.call(f,u)}let p=0,m=0,g=n[0],b=o[0],v=n.length-1,y=o.length-1,w=n[v],x=o[y],k=void 0;for(;p<=v&&m<=y;){if(null===g){g=n[++p];continue}if(null===w){w=n[--v];continue}let t=g.key,r=b.key;if(t===r){i.call(g,b,e),o[m]=g,g=n[++p],b=o[++m];continue}let l=w.key,a=x.key;if(l===a){i.call(w,x,e),o[y]=w,w=n[--v],x=o[--y];continue}if(t===a){i.call(g,x,e),o[y]=g;const t=o[y+1];c.call(g,t,u),g=n[++p],x=o[--y];continue}if(l===r){i.call(w,b,e),o[m]=w;const t=n[p];c.call(w,t,u),w=n[--v],b=o[++m];continue}k=k||pt(n,p,v);let d=k[r];if(void 0===d)s.call(b,f,h.call(g)||null);else{const t=n[d];c.call(t,g,null),i.call(t,b,e),o[m]=t,n[d]=null}b=o[++m]}if(p<=v||m<=y)if(p>v){const t=o[y+1],e=t?h.call(t)||null:u;for(let t=m;t<=y;t++)s.call(o[t],f,e)}else for(let t=p;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)ut.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])}ht.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 ft(t){return new dt(t)}function pt(t,e,n){let o={};for(let r=e;r<=n;r++)o[t[r].key]=r;return o}const mt=Node.prototype,gt=mt.insertBefore,bt=mt.removeChild;class vt{constructor(t){this.content=[],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)gt.call(t,n,e);if(!this.content.length){const n=document.createTextNode("");this.content.push(n),gt.call(t,n,e)}}moveBefore(t,e){const n=t?t.content[0]:e,o=this.parentEl;for(let t of this.content)gt.call(o,t,n)}patch(t){if(this===t)return;const e=t.html;if(this.html!==e){const n=this.parentEl,o=this.content[0],r=document.createElement("template");r.innerHTML=e;const s=[...r.content.childNodes];for(let t of s)gt.call(n,t,o);if(!s.length){const t=document.createTextNode("");s.push(t),gt.call(n,t,o)}this.remove(),this.content=s,this.html=t.html}}beforeRemove(){}remove(){const t=this.parentEl;for(let e of this.content)bt.call(t,e)}firstNode(){return this.content[0]}toString(){return this.html}}function yt(t){return new vt(t)}function wt(t,e,n=null){t.mount(e,n)}const xt=Symbol("Target"),kt=Symbol("Skip"),$t=Symbol("Key changes"),Nt=Object.prototype.toString,Et=Object.prototype.hasOwnProperty,At=new Set(["Object","Array","Set","Map","WeakMap"]),Tt=new Set(["Set","Map","WeakMap"]);function _t(t){return Nt.call(t).slice(8,-1)}function Lt(t){return"object"==typeof t&&At.has(_t(t))}function St(t,e){return Lt(t)?Mt(t,e):t}function Ct(t){return t[kt]=!0,t}function Dt(t){return t[xt]||t}const Ot=new WeakMap;function Bt(t,e,n){Ot.get(t)||Ot.set(t,new Map);const o=Ot.get(t);o.get(e)||o.set(e,new Set),o.get(e).add(n),Rt.has(n)||Rt.set(n,new Set),Rt.get(n).add(t)}function It(t,e){const n=Ot.get(t);if(!n)return;const o=n.get(e);if(o)for(const t of[...o])Pt(t),t()}const Rt=new WeakMap;function Pt(t){const e=Rt.get(t);if(e){for(const n of e){const e=Ot.get(n);if(e)for(const n of e.values())n.delete(t)}e.clear()}}const jt=new WeakMap;function Mt(t,e=(()=>{})){if(!Lt(t))throw new Error("Cannot make the given value reactive");if(kt in t)return t;const n=t[xt];if(n)return Mt(n,e);jt.has(t)||jt.set(t,new Map);const o=jt.get(t);if(!o.has(e)){const n=_t(t),r=Tt.has(n)?function(t,e,n){const o=Ht[n](t,e);return Object.assign(Wt(e),{get:(t,n)=>n===xt?t:Et.call(o,n)?o[n]:(Bt(t,n,e),St(t[n],e))})}(t,e,n):Wt(e),s=new Proxy(t,r);o.set(e,s)}return o.get(e)}function Wt(t){return{get:(e,n,o)=>n===xt?e:(Bt(e,n,t),St(Reflect.get(e,n,o),t)),set(t,e,n,o){const r=!Et.call(t,e),s=Reflect.get(t,e,o),i=Reflect.set(t,e,n,o);return r&&It(t,$t),(s!==n||Array.isArray(t)&&"length"===e)&&It(t,e),i},deleteProperty(t,e){const n=Reflect.deleteProperty(t,e);return It(t,$t),It(t,e),n},ownKeys:e=>(Bt(e,$t,t),Reflect.ownKeys(e)),has:(e,n)=>(Bt(e,$t,t),Reflect.has(e,n))}}function Ft(t,e,n){return o=>(o=Dt(o),Bt(e,o,n),St(e[t](o),n))}function Vt(t,e,n){return function*(){Bt(e,$t,n);const o=e.keys();for(const r of e[t]()){const t=o.next().value;Bt(e,t,n),yield St(r,n)}}}function zt(t,e,n){return(o,r)=>{o=Dt(o);const s=n.has(o),i=n[e](o),l=n[t](o,r);return s!==n.has(o)&&It(n,$t),i!==r&&It(n,o),l}}function Kt(t){return()=>{const e=[...t.keys()];t.clear(),It(t,$t);for(const n of e)It(t,n)}}const Ht={Set:(t,e)=>({has:Ft("has",t,e),add:zt("add","has",t),delete:zt("delete","has",t),keys:Vt("keys",t,e),values:Vt("values",t,e),entries:Vt("entries",t,e),[Symbol.iterator]:Vt(Symbol.iterator,t,e),clear:Kt(t),get size(){return Bt(t,$t,e),t.size}}),Map:(t,e)=>({has:Ft("has",t,e),get:Ft("get",t,e),set:zt("set","get",t),delete:zt("delete","has",t),keys:Vt("keys",t,e),values:Vt("values",t,e),entries:Vt("entries",t,e),[Symbol.iterator]:Vt(Symbol.iterator,t,e),clear:Kt(t),get size(){return Bt(t,$t,e),t.size}}),WeakMap:(t,e)=>({has:Ft("has",t,e),get:Ft("get",t,e),set:zt("set","get",t),delete:zt("delete","has",t)})};class Ut extends EventTarget{trigger(t,e){this.dispatchEvent(new CustomEvent(t,{detail:e}))}}class qt extends String{}const Gt={};function Xt(...t){const e="__template__"+Xt.nextId++,n=String.raw(...t);return Gt[e]=n,e}Xt.nextId=1;const Yt=new WeakMap,Zt=new WeakMap;function Qt(t,e,n=!1){if(!t)return!1;const o=t.fiber;o&&Yt.set(o,e);const r=Zt.get(t);if(r){let t=!1;for(let n=r.length-1;n>=0;n--)try{r[n](e),t=!0;break}catch(t){e=t}if(t)return n&&o&&o.node.fiber&&o.root.counter--,!0}return Qt(t.parent,e)}function Jt(t){const e=t.error,n="node"in t?t.node:t.fiber.node,o="fiber"in t?t.fiber:n.fiber;let r=o;do{r.node.fiber=r,r=r.parent}while(r);Yt.set(o.root,e);if(!Qt(n,e,!0)){console.warn("[Owl] Unhandled error. Destroying the root component");try{n.app.destroy()}catch(t){console.error(t)}}}function te(t){let e=0;for(let n of t)n.node.fiber=null,n.bdom||e++,e+=te(n.children);return e}class ee{constructor(t,e){if(this.bdom=null,this.children=[],this.appliedToDom=!1,this.deep=!1,this.node=t,this.parent=e,e){this.deep=e.deep;const t=e.root;t.counter++,this.root=t,e.children.push(this)}else this.root=this}}class ne extends ee{constructor(){super(...arguments),this.counter=1,this.willPatch=[],this.patched=[],this.mounted=[],this.locked=!1}complete(){const t=this.node;this.locked=!0;let e=void 0;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)}}e=void 0,t._patch(),this.locked=!1;let n=this.mounted;for(;e=n.pop();)if(e=e,e.appliedToDom)for(let t of e.node.mounted)t();let o=this.patched;for(;e=o.pop();)if(e=e,e.appliedToDom)for(let t of e.node.patched)t()}catch(t){this.locked=!1,Jt({fiber:e||this,error:t})}}}class oe extends ne{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.app.constructor.validateTarget(this.target),e.bdom)e.updateDom();else if(e.bdom=this.bdom,"last-child"===this.position||0===this.target.childNodes.length)wt(e.bdom,this.target);else{const t=this.target.childNodes[0];wt(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){Jt({fiber:t,error:e})}}}function re(t,e){const n=e.defaultProps;if(n)for(let e in n)void 0===t[e]&&(t[e]=n[e])}function se(t,e){if(!0===e)return!0;if("function"==typeof e)return"object"==typeof t?t instanceof e:typeof t===e.name.toLowerCase();if(e instanceof Array){let n=!1;for(let o=0,r=e.length;o<r;o++)n=n||se(t,e[o]);return n}if(e.optional&&void 0===t)return!0;let n=!e.type||se(t,e.type);if(e.validate&&(n=n&&e.validate(t)),e.type===Array&&e.element)for(let o=0,r=t.length;o<r;o++)n=n&&se(t[o],e.element);if(e.type===Object&&e.shape){const o=e.shape;for(let e in o)n=n&&se(t[e],o[e]);if(n)for(let e in t)if(!(e in o))throw new Error(`unknown prop '${e}'`)}return n}let ie=null;function le(){if(!ie)throw new Error("No active component (a hook function should only be called in 'setup')");return ie}const ae=new WeakMap;function ce(t){const e=le();let n=ae.get(e);return n||(n=function(t){let e=!1;return async()=>{await Promise.resolve(),e||(e=!0,t(),await Promise.resolve(),e=!1)}}(e.render.bind(e)),ae.set(e,n),e.willDestroy.push(Pt.bind(null,n))),Mt(t,n)}class he{constructor(t,e,n,o){this.fiber=null,this.bdom=null,this.status=0,this.children=Object.create(null),this.refs={},this.willStart=[],this.willUpdateProps=[],this.willUnmount=[],this.mounted=[],this.willPatch=[],this.patched=[],this.willDestroy=[],ie=this,this.app=n,this.parent=o||null,this.level=o?o.level+1:0,re(e,t);const r=o&&o.childEnv||n.env;this.childEnv=r,e=ce(e),this.component=new t(e,r,this),this.renderFn=n.getTemplate(t.template).bind(this.component,this.component,this),this.component.setup(),ie=null}mountComponent(t,e){const n=new oe(this,t,e);this.app.scheduler.addFiber(n),this.initiateRender(n)}async initiateRender(t){this.fiber=t,this.mounted.length&&t.root.mounted.push(t);const e=this.component;try{await Promise.all(this.willStart.map((t=>t.call(e))))}catch(t){return void Jt({node:this,error:t})}0===this.status&&this.fiber===t&&this._render(t)}async render(t=!1){let e=this.fiber;if(e&&e.root.locked&&(await Promise.resolve(),e=this.fiber),e){if(!e.bdom&&!Yt.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.counter=t.counter+1-te(e.children),e.children=[],e.bdom=null,Yt.has(e)&&(Yt.delete(e),Yt.delete(t),e.appliedToDom=!1),e}const n=new ne(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(),2!==this.status&&(this.fiber!==n||!e&&n.parent||this._render(n))}_render(t){try{t.bdom=this.renderFn(),t.root.counter--}catch(t){Jt({node:this,error:t})}}destroy(){let t=1===this.status;this._destroy(),t&&this.bdom.remove()}_destroy(){const t=this.component;if(1===this.status)for(let e of this.willUnmount)e.call(t);for(let t of Object.values(this.children))t._destroy();for(let e of this.willDestroy)e.call(t);this.status=2}async updateAndRender(t,e){const n=function(t,e){let n=t.fiber;return n&&(te(n.children),n.root=null),new ee(t,e)}(this,e);this.fiber=n;const o=this.component;re(t,o.constructor),ie=this,t=ce(t),ie=null;const r=Promise.all(this.willUpdateProps.map((e=>e.call(o,t))));if(await r,n!==this.fiber)return;o.props=t,this._render(n);const s=e.root;this.willPatch.length&&s.willPatch.push(n),this.patched.length&&s.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.fiber=null}moveBefore(t,e){this.bdom.moveBefore(t?t.bdom:null,e)}patch(){this.fiber&&this.fiber.parent&&this._patch()}_patch(){const t=Object.keys(this.children).length>0;this.bdom.patch(this.fiber.bdom,t),t&&this.cleanOutdatedChildren(),this.fiber.appliedToDom=!0,this.fiber=null}beforeRemove(){this._destroy()}remove(){this.bdom.remove()}cleanOutdatedChildren(){const t=this.children;for(const e in t){const n=t[e],o=n.status;1!==o&&(delete t[e],2!==o&&n.destroy())}}}class ue{constructor(){this.tasks=new Set,this.isRunning=!1,this.requestAnimationFrame=ue.requestAnimationFrame}start(){this.isRunning=!0,this.scheduleTasks()}stop(){this.isRunning=!1}addFiber(t){this.tasks.add(t.root),this.isRunning||this.start()}flush(){this.tasks.forEach((t=>{if(t.root!==t)return void this.tasks.delete(t);const e=Yt.has(t);e&&0!==t.counter?this.tasks.delete(t):2!==t.node.status?0===t.counter&&(e||t.complete(),this.tasks.delete(t)):this.tasks.delete(t)})),0===this.tasks.size&&this.stop()}scheduleTasks(){this.requestAnimationFrame((()=>{this.flush(),this.isRunning&&this.scheduleTasks()}))}}ue.requestAnimationFrame=window.requestAnimationFrame.bind(window);const de="true,false,NaN,null,undefined,debugger,console,window,in,instanceof,new,function,return,this,eval,void,Math,RegExp,Array,Object,Date".split(","),fe=Object.assign(Object.create(null),{and:"&&",or:"||",gt:">",gte:">=",lt:"<",lte:"<="}),pe=Object.assign(Object.create(null),{"{":"LEFT_BRACE","}":"RIGHT_BRACE","[":"LEFT_BRACKET","]":"RIGHT_BRACKET",":":"COLON",",":"COMMA","(":"LEFT_PAREN",")":"RIGHT_PAREN"}),me="...,.,===,==,+,!==,!=,!,||,&&,>=,>,<=,<,?,-,*,/,%,typeof ,=>,=,;,in ".split(",");const ge=[function(t){let e=t[0],n=e;if("'"!==e&&'"'!==e&&"`"!==e)return!1;let o,r=1;for(;t[r]&&t[r]!==n;){if(o=t[r],e+=o,"\\"===o){if(r++,o=t[r],!o)throw new Error("Invalid expression");e+=o}r++}if(t[r]!==n)throw new Error("Invalid expression");return e+=n,"`"===n?{type:"TEMPLATE_STRING",value:e,replace:t=>e.replace(/\$\{(.*?)\}/g,((e,n)=>"${"+t(n)+"}"))}:{type:"VALUE",value:e}},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 me)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 fe?{type:"OPERATOR",value:fe[e],size:e.length}:{type:"SYMBOL",value:e}}return!1},function(t){const e=t[0];return!(!e||!(e in pe))&&{type:pe[e],value:e}}];const be=t=>t&&("LEFT_BRACE"===t.type||"COMMA"===t.type),ve=t=>t&&("RIGHT_BRACE"===t.type||"COMMA"===t.type);function ye(t){const e=new Set,n=function(t){const e=[];let n=!0;for(;n;)if(t=t.trim()){for(let o of ge)if(n=o(t),n){e.push(n),t=t.slice(n.size||n.value.length);break}}else n=!1;if(t.length)throw new Error(`Tokenizer error: could not tokenize "${t}"`);return e}(t);let o=0,r=[];for(;o<n.length;){let t=n[o],s=n[o-1],i=n[o+1],l=r[r.length-1];switch(t.type){case"LEFT_BRACE":case"LEFT_BRACKET":r.push(t.type);break;case"RIGHT_BRACE":case"RIGHT_BRACKET":r.pop()}let a="SYMBOL"===t.type&&!de.includes(t.value);if("SYMBOL"!==t.type||de.includes(t.value)||s&&("LEFT_BRACE"===l&&be(s)&&ve(i)&&(n.splice(o+1,0,{type:"COLON",value:":"},{...t}),i=n[o+1]),"OPERATOR"===s.type&&"."===s.value?a=!1:"LEFT_BRACE"!==s.type&&"COMMA"!==s.type||i&&"COLON"===i.type&&(a=!1)),"TEMPLATE_STRING"===t.type&&(t.value=t.replace((t=>we(t)))),i&&"OPERATOR"===i.type&&"=>"===i.value)if("RIGHT_PAREN"===t.type){let t=o-1;for(;t>0&&"LEFT_PAREN"!==n[t].type;)"SYMBOL"===n[t].type&&n[t].originalValue&&(n[t].value=n[t].originalValue,e.add(n[t].value)),t--}else e.add(t.value);a&&(t.varName=t.value,e.has(t.value)||(t.originalValue=t.value,t.value=`ctx['${t.value}']`)),o++}for(const t of n)"SYMBOL"===t.type&&t.varName&&e.has(t.value)&&(t.originalValue=t.value,t.value="_"+t.value,t.isLocal=!0);return n}function we(t){return ye(t).map((t=>t.value)).join("")}const xe=/\{\{.*?\}\}/g,ke=/\{\{.*?\}\}/g;function $e(t){let e=t.match(xe);return e&&e[0].length===t.length?`(${we(t.slice(2,-2))})`:"`"+t.replace(ke,(t=>"${"+we(t.slice(2,-2))+"}"))+"`"}const Ne=document.implementation.createDocument(null,null,null),Ee=new Set(["stop","capture","prevent","self","synthetic"]);class Ae{constructor(t,e){this.dynamicTagName=null,this.isRoot=!1,this.hasDynamicChildren=!1,this.children=[],this.data=[],this.childNumber=0,this.parentVar="",this.id=Ae.nextBlockId++,this.varName="b"+this.id,this.blockName="block"+this.id,this.target=t,this.type=e}static generateId(t){return this.nextDataIds[t]=(this.nextDataIds[t]||0)+1,t+this.nextDataIds[t]}insertData(t,e="d"){const n=Ae.generateId(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=Ne.createElement("t");return t.appendChild(this.dom),t.innerHTML}}function Te(t,e){return Object.assign({block:null,index:0,forceNewBlock:!0,translate:t.translate,tKeyExpr:null,nameSpace:t.nameSpace,tModelSelectedExpr:t.tModelSelectedExpr},e)}Ae.nextBlockId=1,Ae.nextDataIds={};class _e{constructor(t){this.indentLevel=0,this.loopLevel=0,this.code=[],this.hasRoot=!1,this.hasCache=!1,this.hasRef=!1,this.refInfo={},this.shouldProtectScope=!1,this.name=t}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=[];if(t.push(`function ${this.name}(ctx, node, key = "") {`),this.hasRef){t.push(" const refs = ctx.__owl__.refs;");for(let e in this.refInfo){const[n,o]=this.refInfo[e];t.push(` const ${n} = ${o};`)}}this.shouldProtectScope&&(t.push(" ctx = Object.create(ctx);"),t.push(" ctx[isBoundary] = 1")),this.hasCache&&(t.push(" let cache = ctx.cache || {};"),t.push(" let nextCache = ctx.cache = {};"));for(let e of this.code)t.push(e);return this.hasRoot||t.push("return text('');"),t.push("}"),t.join("\n ")}}const Le=["label","title","placeholder","alt"],Se=/^(\s*)([\s\S]+?)(\s*)$/;class Ce{constructor(t,e){if(this.blocks=[],this.ids={},this.nextBlockId=1,this.isDebug=!1,this.targets=[],this.target=new _e("template"),this.translatableAttributes=Le,this.staticCalls=[],this.helpers=new Set,this.translateFn=e.translateFn||(t=>t),e.translatableAttributes){const t=new Set(Le);for(let n of e.translatableAttributes)n.startsWith("-")?t.delete(n.slice(1)):t.add(n);this.translatableAttributes=[...t]}this.hasSafeContext=e.hasSafeContext||!1,this.dev=e.dev||!1,this.ast=t,this.templateName=e.name}generateCode(){const t=this.ast;this.isDebug=12===t.type,Ae.nextBlockId=1,Ae.nextDataIds={},this.compileAST(t,{block:null,index:0,forceNewBlock:!1,isLast:!0,translate:!0,tKeyExpr:null});let e=[" let { text, createBlock, list, multi, html, toggler, component, comment } = bdom;"];this.helpers.size&&e.push(`let { ${[...this.helpers].join(", ")} } = helpers;`),this.templateName&&e.push(`// Template name: "${this.templateName}"`);for(let{id:t,template:n}of this.staticCalls)e.push(`const ${t} = getTemplate(${n});`);if(this.blocks.length){e.push("");for(let t of this.blocks)if(t.dom){let n=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){const o=this.generateId(t),r=this.target,s=new _e(o);this.targets.push(s),this.target=s;const i=Te(n);return this.compileAST(e,i),this.target=r,o}addLine(t){this.target.addLine(t)}generateId(t=""){return this.ids[t]=(this.ids[t]||0)+1,t+this.ids[t]}insertAnchor(t){const e="block-child-"+t.children.length,n=Ne.createElement(e);t.insert(n)}createBlock(t,e,n){const o=this.target.hasRoot,r=new Ae(this.target,e);return o||n.preventRoot||(this.target.hasRoot=!0,r.isRoot=!0),t&&(t.children.push(r),"list"===t.type&&(r.parentVar="c_block"+t.id)),r}insertBlock(t,e,n){let o=e.generateExpr(t);const r=n.tKeyExpr;if(e.parentVar){let t="key"+this.target.loopLevel;return r&&(t=`${r} + ${t}`),this.helpers.add("withKey"),void this.addLine(`${e.parentVar}[${n.index}] = withKey(${o}, ${t});`)}r&&(o=`toggler(${r}, ${o})`),e.isRoot&&!n.preventRoot?this.addLine(`return ${o};`):this.addLine(`let ${e.varName} = ${o};`)}captureExpression(t,e=!1){if(!e&&!t.includes("=>"))return we(t);const n=ye(t),o=new Map;return n.map((t=>{if(t.varName&&!t.isLocal){if(!o.has(t.varName)){const e=this.generateId("v");o.set(t.varName,e),this.addLine(`const ${e} = ${t.value};`)}t.value=o.get(t.varName)}return t.value})).join("")}compileAST(t,e){switch(t.type){case 1:this.compileComment(t,e);break;case 0:this.compileText(t,e);break;case 2:this.compileTDomNode(t,e);break;case 4:this.compileTEsc(t,e);break;case 8:this.compileTOut(t,e);break;case 5:this.compileTIf(t,e);break;case 9:this.compileTForeach(t,e);break;case 10:this.compileTKey(t,e);break;case 3:this.compileMulti(t,e);break;case 7:this.compileTCall(t,e);break;case 15:this.compileTCallBlock(t,e);break;case 6:this.compileTSet(t,e);break;case 11:this.compileComponent(t,e);break;case 12:this.compileDebug(t,e);break;case 13:this.compileLog(t,e);break;case 14:this.compileTSlot(t,e);break;case 16:this.compileTTranslation(t,e);break;case 17:this.compileTPortal(t,e)}}compileDebug(t,e){this.addLine("debugger;"),t.content&&this.compileAST(t.content,e)}compileLog(t,e){this.addLine(`console.log(${we(t.expr)});`),t.content&&this.compileAST(t.content,e)}compileComment(t,e){let{block:n,forceNewBlock:o}=e;if(!n||o)n=this.createBlock(n,"comment",e),this.insertBlock(`comment(\`${t.value}\`)`,n,{...e,forceNewBlock:o&&!n});else{const e=Ne.createComment(t.value);n.insert(e)}}compileText(t,e){let{block:n,forceNewBlock:o}=e,r=t.value;if(r&&!1!==e.translate){const t=Se.exec(r);r=t[1]+this.translateFn(t[2])+t[3]}if(!n||o)n=this.createBlock(n,"text",e),this.insertBlock(`text(\`${r}\`)`,n,{...e,forceNewBlock:o&&!n});else{const e=0===t.type?Ne.createTextNode:Ne.createComment;n.insert(e.call(Ne,r))}}generateHandlerCode(t,e){const n=t.split(".").slice(1).map((t=>{if(!Ee.has(t))throw new Error(`Unknown event modifier: '${t}'`);return`"${t}"`}));let o="";return n.length&&(o=n.join(",")+", "),`[${o}${this.captureExpression(e)}, ctx]`}compileTDomNode(t,e){let{block:n,forceNewBlock:o}=e;const r=!n||o||null!==t.dynamicTag||t.ns;let s=this.target.code.length;if(r&&((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=this.generateId("tag");this.addLine(`let ${e} = ${we(t.dynamicTag)};`),n.dynamicTagName=e}const i={},l=t.ns||e.nameSpace;l&&r&&(i["block-ns"]=l);for(let o in t.attrs){let r,s;if(o.startsWith("t-attf")){r=$e(t.attrs[o]);const e=n.insertData(r,"attr");s=o.slice(7),i["block-attribute-"+e]=s}else if(o.startsWith("t-att")){r=we(t.attrs[o]);const e=n.insertData(r,"attr");"t-att"===o?i["block-attributes"]=String(e):(s=o.slice(6),i["block-attribute-"+e]=s)}else this.translatableAttributes.includes(o)?i[o]=this.translateFn(t.attrs[o]):(r=`"${t.attrs[o]}"`,s=o,i[o]=t.attrs[o]);if("value"===s&&e.tModelSelectedExpr){i["block-attribute-"+n.insertData(`${e.tModelSelectedExpr} === ${r}`,"attr")]="selected"}}for(let e in t.on){const o=this.generateHandlerCode(e,t.on[e]);i["block-handler-"+n.insertData(o,"hdlr")]=e}if(t.ref){this.target.hasRef=!0;if(xe.test(t.ref)){const e=t.ref.replace(xe,(t=>"${"+this.captureExpression(t.slice(2,-2),!0)+"}")),o=n.insertData(`(el) => refs[\`${e}\`] = el`,"ref");i["block-ref"]=String(o)}else{let e=t.ref;if(e in this.target.refInfo){this.helpers.add("multiRefSetter");const t=this.target.refInfo[e],o=n.data.push(t[0])-1;i["block-ref"]=String(o),t[1]=`multiRefSetter(refs, \`${e}\`)`}else{let t=this.generateId("ref");this.target.refInfo[e]=[t,`(el) => refs[\`${e}\`] = el`];const o=n.data.push(t)-1;i["block-ref"]=String(o)}}}let a;if(t.model){const{hasDynamicChildren:e,baseExpr:o,expr:r,eventType:s,shouldNumberize:l,shouldTrim:c,targetAttr:h,specialInitTargetAttr:u}=t.model,d=we(o),f=this.generateId("bExpr");this.addLine(`const ${f} = ${d};`);const p=we(r),m=this.generateId("expr");this.addLine(`const ${m} = ${p};`);const g=`${f}[${m}]`;let b;if(u)b=n.insertData(`${g} === '${i[h]}'`,"attr"),i["block-attribute-"+b]=u;else if(e){a=""+this.generateId("bValue"),this.addLine(`let ${a} = ${g}`)}else b=n.insertData(""+g,"attr"),i["block-attribute-"+b]=h;this.helpers.add("toNumber");let v="ev.target."+h;v=c?v+".trim()":v,v=l?`toNumber(${v})`:v;const y=`[(ev) => { ${g} = ${v}; }]`;b=n.insertData(y,"hdlr"),i["block-handler-"+b]=s}const c=Ne.createElement(t.tag);for(const[t,e]of Object.entries(i))"class"===t&&""===e||c.setAttribute(t,e);if(n.insert(c),t.content.length){const o=n.currentDom;n.currentDom=c;const r=t.content;for(let o=0;o<r.length;o++){const s=t.content[o],i=Te(e,{block:n,index:n.childNumber,forceNewBlock:!1,isLast:e.isLast&&o===r.length-1,tKeyExpr:e.tKeyExpr,nameSpace:l,tModelSelectedExpr:a});this.compileAST(s,i)}n.currentDom=o}if(r&&(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=s;n<t.length&&(!t[n].trimStart().startsWith(`let ${o.varName} `)||(t[n]=t[n].replace("let "+o.varName,o.varName),o=e.shift(),o));n++);this.target.addLine(`let ${n.children.map((t=>t.varName))};`,s)}}compileTEsc(t,e){let n,{block:o,forceNewBlock:r}=e;if("0"===t.expr?(this.helpers.add("zero"),n="ctx[zero]"):(n=we(t.expr),t.defaultValue&&(this.helpers.add("withDefault"),n=`withDefault(${n}, \`${t.defaultValue}\`)`)),!o||r)o=this.createBlock(o,"text",e),this.insertBlock(`text(${n})`,o,{...e,forceNewBlock:r&&!o});else{const t=o.insertData(n,"txt"),e=Ne.createElement("block-text-"+t);o.insert(e)}}compileTOut(t,e){let{block:n}=e;n&&this.insertAnchor(n),n=this.createBlock(n,"html",e),this.helpers.add("0"===t.expr?"zero":"safeOutput");let o="0"===t.expr?"ctx[zero]":`safeOutput(${we(t.expr)})`;if(t.body){const n=Ae.nextBlockId,r=Te(e);this.compileAST({type:3,content:t.body},r),this.helpers.add("withDefault"),o=`withDefault(${o}, b${n})`}this.insertBlock(""+o,n,e)}compileTIf(t,e,n){let{block:o,forceNewBlock:r,index:s}=e,i=s;const l=this.target.code.length,a=!o||"multi"!==o.type&&r;o&&(o.hasDynamicChildren=!0),(!o||"multi"!==o.type&&r)&&(o=this.createBlock(o,"multi",e)),this.addLine(`if (${we(t.condition)}) {`),this.target.indentLevel++,this.insertAnchor(o);const c=Te(e,{block:o,index:i});if(this.compileAST(t.content,c),this.target.indentLevel--,t.tElif)for(let n of t.tElif){this.addLine(`} else if (${we(n.condition)}) {`),this.target.indentLevel++,this.insertAnchor(o);const t=Te(e,{block:o,index:i});this.compileAST(n.content,t),this.target.indentLevel--}if(t.tElse){this.addLine("} else {"),this.target.indentLevel++,this.insertAnchor(o);const n=Te(e,{block:o,index:i});this.compileAST(t.tElse,n),this.target.indentLevel--}if(this.addLine("}"),a){if(o.children.length){const t=this.target.code,e=o.children.slice();let n=e.shift();for(let o=l;o<t.length&&(!t[o].trimStart().startsWith(`let ${n.varName} `)||(t[o]=t[o].replace("let "+n.varName,n.varName),n=e.shift(),n));o++);this.target.addLine(`let ${o.children.map((t=>t.varName))};`,l)}const t=o.children.map((t=>t.varName)).join(", ");this.insertBlock(`multi([${t}])`,o,e)}}compileTForeach(t,e){let{block:n}=e;n&&this.insertAnchor(n),n=this.createBlock(n,"list",e),this.target.loopLevel++;const o="i"+this.target.loopLevel;this.addLine("ctx = Object.create(ctx);");const r="v_block"+n.id,s="k_block"+n.id,i="l_block"+n.id,l="c_block"+n.id;let a;this.helpers.add("prepareList"),this.addLine(`const [${s}, ${r}, ${i}, ${l}] = prepareList(${we(t.collection)});`),this.dev&&this.addLine(`const keys${n.id} = new Set();`),this.addLine(`for (let ${o} = 0; ${o} < ${i}; ${o}++) {`),this.target.indentLevel++,this.addLine(`ctx[\`${t.elem}\`] = ${r}[${o}];`),t.hasNoFirst||this.addLine(`ctx[\`${t.elem}_first\`] = ${o} === 0;`),t.hasNoLast||this.addLine(`ctx[\`${t.elem}_last\`] = ${o} === ${r}.length - 1;`),t.hasNoIndex||this.addLine(`ctx[\`${t.elem}_index\`] = ${o};`),t.hasNoValue||this.addLine(`ctx[\`${t.elem}_value\`] = ${s}[${o}];`),this.addLine(`let key${this.target.loopLevel} = ${t.key?we(t.key):o};`),this.dev&&(this.addLine(`if (keys${n.id}.has(key${this.target.loopLevel})) { throw new Error(\`Got duplicate key in t-foreach: \${key${this.target.loopLevel}}\`)}`),this.addLine(`keys${n.id}.add(key${this.target.loopLevel});`)),t.memo&&(this.target.hasCache=!0,a=this.generateId(),this.addLine(`let memo${a} = ${we(t.memo)}`),this.addLine(`let vnode${a} = cache[key${this.target.loopLevel}];`),this.addLine(`if (vnode${a}) {`),this.target.indentLevel++,this.addLine(`if (shallowEqual(vnode${a}.memo, memo${a})) {`),this.target.indentLevel++,this.addLine(`${l}[${o}] = vnode${a};`),this.addLine(`nextCache[key${this.target.loopLevel}] = vnode${a};`),this.addLine("continue;"),this.target.indentLevel--,this.addLine("}"),this.target.indentLevel--,this.addLine("}"));const c=Te(e,{block:n,index:o});this.compileAST(t.body,c),t.memo&&this.addLine(`nextCache[key${this.target.loopLevel}] = Object.assign(${l}[${o}], {memo: memo${a}});`),this.target.indentLevel--,this.target.loopLevel--,this.addLine("}"),e.isLast||this.addLine("ctx = ctx.__proto__;"),this.insertBlock("l",n,e)}compileTKey(t,e){const n=this.generateId("tKey_");this.addLine(`const ${n} = ${we(t.expr)};`),e=Te(e,{tKeyExpr:n,block:e.block,index:e.index}),this.compileAST(t.content,e)}compileMulti(t,e){let{block:n,forceNewBlock:o}=e;const r=!n||o;let s=this.target.code.length;if(r){if(t.content.filter((t=>6!==t.type)).length<=1){for(let n of t.content)this.compileAST(n,e);return}n=this.createBlock(n,"multi",e)}let i=0;for(let o=0,r=t.content.length;o<r;o++){const s=t.content[o],l=6===s.type,a=Te(e,{block:n,index:i,forceNewBlock:!l,preventRoot:e.preventRoot,isLast:e.isLast&&o===r-1});this.compileAST(s,a),l||i++}if(r){if(n.hasDynamicChildren&&n.children.length){const t=this.target.code,e=n.children.slice();let o=e.shift();for(let n=s;n<t.length&&(!t[n].trimStart().startsWith(`let ${o.varName} `)||(t[n]=t[n].replace("let "+o.varName,o.varName),o=e.shift(),o));n++);this.target.addLine(`let ${n.children.map((t=>t.varName))};`,s)}const t=n.children.map((t=>t.varName)).join(", ");this.insertBlock(`multi([${t}])`,n,e)}}compileTCall(t,e){let{block:n,forceNewBlock:o}=e;if(t.body){this.addLine("ctx = Object.create(ctx);"),this.addLine("ctx[isBoundary] = 1;"),this.helpers.add("isBoundary");const n=Ae.nextBlockId,o=Te(e,{preventRoot:!0});this.compileAST({type:3,content:t.body},o),n!==Ae.nextBlockId&&(this.helpers.add("zero"),this.addLine(`ctx[zero] = b${n};`))}const r=xe.test(t.name),s=r?$e(t.name):"`"+t.name+"`";n&&(o||this.insertAnchor(n));const i=`key + \`${this.generateComponentKey()}\``;if(r){const t=this.generateId("template");this.addLine(`const ${t} = ${s};`),n=this.createBlock(n,"multi",e),this.helpers.add("call"),this.insertBlock(`call(this, ${t}, ctx, node, ${i})`,n,{...e,forceNewBlock:!n})}else{const t=this.generateId("callTemplate_");this.helpers.add("getTemplate"),this.staticCalls.push({id:t,template:s}),n=this.createBlock(n,"multi",e),this.insertBlock(`${t}.call(this, ctx, node, ${i})`,n,{...e,forceNewBlock:!n})}t.body&&!e.isLast&&this.addLine("ctx = ctx.__proto__;")}compileTCallBlock(t,e){let{block:n,forceNewBlock:o}=e;n&&(o||this.insertAnchor(n)),n=this.createBlock(n,"multi",e),this.insertBlock(we(t.name),n,{...e,forceNewBlock:!n})}compileTSet(t,e){this.target.shouldProtectScope=!0,this.helpers.add("isBoundary").add("withDefault");const n=t.value?we(t.value||""):"null";if(t.body){this.helpers.add("LazyValue");const o={type:3,content:t.body};let r=`new LazyValue(${this.compileInNewTarget("value",o,e)}, ctx, node)`;r=t.value?r?`withDefault(${n}, ${r})`:n:r,this.addLine(`ctx[\`${t.name}\`] = ${r};`)}else{let e;e=t.defaultValue?t.value?`withDefault(${n}, \`${t.defaultValue}\`)`:`\`${t.defaultValue}\``:n,this.helpers.add("setContextValue"),this.addLine(`setContextValue(ctx, "${t.name}", ${e});`)}}generateComponentKey(){const t=[this.generateId("__")];for(let e=0;e<this.target.loopLevel;e++)t.push(`\${key${e+1}}`);return t.join("__")}formatProp(t,e){if(e=this.captureExpression(e),t.includes(".")){let[n,o]=t.split(".");if("bind"!==o)throw new Error("Invalid prop suffix");this.helpers.add("bind"),t=n,e=`bind(ctx, ${e||void 0})`}return`${t=/^[a-z_]+$/i.test(t)?t:`'${t}'`}: ${e||void 0}`}formatPropObject(t){const e=[];for(const[n,o]of Object.entries(t))e.push(this.formatProp(n,o));return e.join(", ")}compileComponent(t,e){let{block:n}=e;const o="slots"in t.props,r=[],s=this.formatPropObject(t.props);s&&r.push(s);let i="";if(!!Object.keys(t.slots).length){let n="ctx";!this.target.loopLevel&&this.hasSafeContext||(n=this.generateId("ctx"),this.helpers.add("capture"),this.addLine(`const ${n} = capture(ctx);`));let o=[];for(let r in t.slots){const s=t.slots[r].content,i=[`__render: ${this.compileInNewTarget("slot",s,e)}, __ctx: ${n}`],l=t.slots[r].scope;l&&i.push(`__scope: "${l}"`),t.slots[r].attrs&&i.push(this.formatPropObject(t.slots[r].attrs));const a=`{${i.join(", ")}}`;o.push(`'${r}': ${a}`)}i=`{${o.join(", ")}}`}!i||t.dynamicProps||o||(this.helpers.add("markRaw"),r.push(`slots: markRaw(${i})`));const l=`{${r.join(",")}}`;let a,c=l;t.dynamicProps&&(c=`Object.assign({}, ${we(t.dynamicProps)}${r.length?", "+l:""})`),(i&&(t.dynamicProps||o)||this.dev)&&(a=this.generateId("props"),this.addLine(`const ${a} = ${c};`),c=a),i&&(t.dynamicProps||o)&&(this.helpers.add("markRaw"),this.addLine(`${a}.slots = markRaw(Object.assign(${i}, ${a}.slots))`));const h=this.generateComponentKey();let u;t.isDynamic?(u=this.generateId("Comp"),this.addLine(`let ${u} = ${we(t.name)};`)):u=`\`${t.name}\``,this.dev&&this.addLine(`helpers.validateProps(${u}, ${a}, ctx);`),n&&(!1===e.forceNewBlock||e.tKeyExpr)&&this.insertAnchor(n);let d=`key + \`${h}\``;e.tKeyExpr&&(d=`${e.tKeyExpr} + ${d}`);let f=`component(${`${u}, ${c}, ${d}, node, ctx`})`;t.isDynamic&&(f=`toggler(${u}, ${f})`),n=this.createBlock(n,"multi",e),this.insertBlock(f,n,e)}compileTSlot(t,e){this.helpers.add("callSlot");let n,o,{block:r}=e,s=!1;t.name.match(xe)?(s=!0,o=$e(t.name)):o="'"+t.name+"'";const i=t.attrs?`{${this.formatPropObject(t.attrs)}}`:null;if(t.defaultContent){n=`callSlot(ctx, node, key, ${o}, ${s}, ${i}, ${this.compileInNewTarget("defaultContent",t.defaultContent,e)})`}else if(s){let t=this.generateId("slot");this.addLine(`const ${t} = ${o};`),n=`toggler(${t}, callSlot(ctx, node, key, ${t}), ${s}, ${i})`}else n=`callSlot(ctx, node, key, ${o}, ${s}, ${i})`;r&&this.insertAnchor(r),r=this.createBlock(r,"multi",e),this.insertBlock(n,r,{...e,forceNewBlock:!1})}compileTTranslation(t,e){t.content&&this.compileAST(t.content,Object.assign({},e,{translate:!1}))}compileTPortal(t,e){this.helpers.add("Portal");let{block:n}=e;const o=this.compileInNewTarget("slot",t.content,e),r=this.generateComponentKey();let s="ctx";!this.target.loopLevel&&this.hasSafeContext||(s=this.generateId("ctx"),this.helpers.add("capture"),this.addLine(`const ${s} = capture(ctx);`));const i=`component(Portal, {target: ${t.target},slots: {'default': {__render: ${o}, __ctx: ${s}}}}, key + \`${r}\`, node, ctx)`;n&&this.insertAnchor(n),n=this.createBlock(n,"multi",e),this.insertBlock(i,n,{...e,forceNewBlock:!1})}}const De=new WeakMap;function Oe(t){if("string"==typeof t){return Be(function(t){const e=(new DOMParser).parseFromString(t,"text/xml");if(e.getElementsByTagName("parsererror").length){let n="Invalid XML in template.";const o=e.getElementsByTagName("parsererror")[0].textContent;if(o){n+="\nThe parser has produced the following error message:\n"+o;const e=/\d+/g,r=e.exec(o);if(r){const s=Number(r[0]),i=t.split("\n")[s-1],l=e.exec(o);if(i&&l){const t=Number(l[0])-1;i[t]&&(n+=`\nThe error might be located at xml line ${s} column ${t}\n${i}\n${"-".repeat(t-1)}^`)}}}throw new Error(n)}return e}(`<t>${t}</t>`).firstChild)}let e=De.get(t);return e||(e=Be(t.cloneNode(!0)),De.set(t,e)),e}function Be(t){var e;(function(t){let e=t.querySelectorAll("[t-elif], [t-else]");for(let t=0,n=e.length;t<n;t++){let n=e[t],o=n.previousElementSibling,r=t=>o.getAttribute(t),s=t=>+!!n.getAttribute(t);if(!o||!r("t-if")&&!r("t-elif"))throw new Error("t-elif and t-else directives must be preceded by a t-if or t-elif directive");{if(r("t-foreach"))throw new Error("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(s).reduce((function(t,e){return t+e}))>1)throw new Error("Only one conditional branching directive is allowed per node");let t;for(;(t=n.previousSibling)!==o;){if(t.nodeValue.trim().length&&8!==t.nodeType)throw new Error("text is not allowed between branching directives");t.remove()}}}})(e=t),function(t){const e=[...t.querySelectorAll("[t-esc]")].filter((t=>t.tagName[0]===t.tagName[0].toUpperCase()||t.hasAttribute("t-component")));for(const t of e){if(t.childNodes.length)throw new Error("Cannot have t-esc on a component that already has content");const e=t.getAttribute("t-esc");t.removeAttribute("t-esc");const n=t.ownerDocument.createElement("t");null!=e&&n.setAttribute("t-esc",e),t.appendChild(n)}}(e);return Ie(t,{inPreTag:!1,inSVG:!1})||{type:0,value:""}}function Ie(t,e){return t instanceof Element?function(t,e){if(t.hasAttribute("t-debug"))return t.removeAttribute("t-debug"),{type:12,content:Ie(t,e)};if(t.hasAttribute("t-log")){const n=t.getAttribute("t-log");return t.removeAttribute("t-log"),{type:13,expr:n,content:Ie(t,e)}}return null}(t,e)||function(t,e){if(!t.hasAttribute("t-foreach"))return null;const n=t.outerHTML,o=t.getAttribute("t-foreach");t.removeAttribute("t-foreach");const r=t.getAttribute("t-as")||"";t.removeAttribute("t-as");const s=t.getAttribute("t-key");if(!s)throw new Error(`"Directive t-foreach should always be used with a t-key!" (expression: t-foreach="${o}" t-as="${r}")`);t.removeAttribute("t-key");const i=t.getAttribute("t-memo")||"";t.removeAttribute("t-memo");const l=Ie(t,e);if(!l)return null;const a=!n.includes("t-call"),c=a&&!n.includes(r+"_first"),h=a&&!n.includes(r+"_last"),u=a&&!n.includes(r+"_index"),d=a&&!n.includes(r+"_value");return{type:9,collection:o,elem:r,body:l,memo:i,key:s,hasNoFirst:c,hasNoLast:h,hasNoIndex:u,hasNoValue:d}}(t,e)||function(t,e){if(!t.hasAttribute("t-if"))return null;const n=t.getAttribute("t-if");t.removeAttribute("t-if");const o=Ie(t,e)||{type:0,value:""};let r=t.nextElementSibling;const s=[];for(;r&&r.hasAttribute("t-elif");){const t=r.getAttribute("t-elif");r.removeAttribute("t-elif");const n=Ie(r,e),o=r.nextElementSibling;r.remove(),r=o,n&&s.push({condition:t,content:n})}let i=null;r&&r.hasAttribute("t-else")&&(r.removeAttribute("t-else"),i=Ie(r,e),r.remove());return{type:5,condition:n,content:o,tElif:s.length?s:null,tElse:i}}(t,e)||function(t,e){if(!t.hasAttribute("t-portal"))return null;const n=t.getAttribute("t-portal");t.removeAttribute("t-portal");const o=Ie(t,e);if(!o)return{type:0,value:""};return{type:17,target:n,content:o}}(t,e)||function(t,e){if(!t.hasAttribute("t-call"))return null;const n=t.getAttribute("t-call");if(t.removeAttribute("t-call"),"t"!==t.tagName){const o=Ie(t,e),r={type:7,name:n,body:null};if(o&&2===o.type)return o.content=[r],o;if(o&&11===o.type)return{...o,slots:{default:{content:r}}}}const o=Ve(t,e);return{type:7,name:n,body:o.length?o:null}}(t,e)||function(t,e){if(!t.hasAttribute("t-call-block"))return null;return{type:15,name:t.getAttribute("t-call-block")}}(t)||function(t,e){if(!t.hasAttribute("t-esc"))return null;const n=t.getAttribute("t-esc");t.removeAttribute("t-esc");const o={type:4,expr:n,defaultValue:t.textContent||""};let r=t.getAttribute("t-ref");t.removeAttribute("t-ref");const s=Ie(t,e);if(!s)return o;if(2===s.type)return{...s,ref:r,content:[o]};if(11===s.type)throw new Error("t-esc is not supported on Component nodes");return o}(t,e)||function(t,e){if(!t.hasAttribute("t-key"))return null;const n=t.getAttribute("t-key");t.removeAttribute("t-key");const o=Ie(t,e);if(!o)return null;return{type:10,expr:n,content:o}}(t,e)||function(t,e){if("off"!==t.getAttribute("t-translation"))return null;return t.removeAttribute("t-translation"),{type:16,content:Ie(t,e)}}(t,e)||function(t,e){if(!t.hasAttribute("t-slot"))return null;const n=t.getAttribute("t-slot");t.removeAttribute("t-slot");const o={};for(let e of t.getAttributeNames()){const n=t.getAttribute(e);o[e]=n}return{type:14,name:n,attrs:o,defaultContent:ze(t,e)}}(t,e)||function(t,e){if(!t.hasAttribute("t-out")&&!t.hasAttribute("t-raw"))return null;t.hasAttribute("t-raw")&&console.warn('t-raw 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-raw");t.removeAttribute("t-out"),t.removeAttribute("t-raw");const o={type:8,expr:n,body:null},r=t.getAttribute("t-ref");t.removeAttribute("t-ref");const s=Ie(t,e);if(!s)return o;if(2===s.type)return o.body=s.content.length?s.content:null,{...s,ref:r,content:[o]};return o}(t,e)||function(t,e){let n=t.tagName;const o=n[0];let r=t.hasAttribute("t-component");if(r&&"t"!==n)throw new Error(`Directive 't-component' can only be used on <t> nodes (used on a <${n}>)`);if(o!==o.toUpperCase()&&!r)return null;r&&(n=t.getAttribute("t-component"),t.removeAttribute("t-component"));const s=t.getAttribute("t-props");t.removeAttribute("t-props");const i=t.getAttribute("t-slot-scope");t.removeAttribute("t-slot-scope");const l={};for(let e of t.getAttributeNames()){const n=t.getAttribute(e);if(e.startsWith("t-")){const t=Fe.get(e.split("-").slice(0,2).join("-"));throw new Error(t||"unsupported directive on Component: "+e)}l[e]=n}const a={};if(t.hasChildNodes()){const n=t.cloneNode(!0),o=Array.from(n.querySelectorAll("[t-set-slot]"));for(let t of o){if("t"!==t.tagName)throw new Error(`Directive 't-set-slot' can only be used on <t> nodes (used on a <${t.tagName}>)`);const o=t.getAttribute("t-set-slot");let r=t.parentElement,s=!1;for(;r!==n;){if(r.hasAttribute("t-component")||r.tagName[0]===r.tagName[0].toUpperCase()){s=!0;break}r=r.parentElement}if(s)continue;t.removeAttribute("t-set-slot"),t.remove();const i=Ie(t,e);if(i){const e={content:i},n={};for(let o of t.getAttributeNames()){const r=t.getAttribute(o);"t-slot-scope"!==o?n[o]=r:e.scope=r}Object.keys(n).length&&(e.attrs=n),a[o]=e}}const r=ze(n,e);r&&(a.default={content:r},i&&(a.default.scope=i))}return{type:11,name:n,isDynamic:r,dynamicProps:s,props:l,slots:a}}(t,e)||function(t,e){const{tagName:n}=t,o=t.getAttribute("t-tag");if(t.removeAttribute("t-tag"),"t"===n&&!o)return null;if(n.startsWith("block-"))throw new Error(`Invalid tag name: '${n}'`);e=Object.assign({},e),"pre"===n&&(e.inPreTag=!0);const r=We.has(n)&&!e.inSVG;e.inSVG=e.inSVG||r;const s=r?"http://www.w3.org/2000/svg":null,i=t.getAttribute("t-ref");t.removeAttribute("t-ref");const l=t.getAttributeNames(),a={},c={};let h=null;for(let o of l){const r=t.getAttribute(o);if(o.startsWith("t-on")){if("t-on"===o)throw new Error("Missing event name with t-on directive");c[o.slice(5)]=r}else if(o.startsWith("t-model")){if(!["input","select","textarea"].includes(n))throw new Error("The t-model directive only works with <input>, <textarea> and <select>");let s,i;if(je.test(r)){const t=r.lastIndexOf(".");s=r.slice(0,t),i=`'${r.slice(t+1)}'`}else{if(!Me.test(r))throw new Error(`Invalid t-model expression: "${r}" (it should be assignable)`);{const t=r.lastIndexOf("[");s=r.slice(0,t),i=r.slice(t+1,-1)}}const l=t.getAttribute("type"),a="input"===n,c="select"===n,u="textarea"===n,d=a&&"checkbox"===l,f=a&&"radio"===l,p=a&&!d&&!f,m=o.includes(".lazy"),g=o.includes(".number");h={baseExpr:s,expr:i,targetAttr:d?"checked":"value",specialInitTargetAttr:f?"checked":null,eventType:f?"click":c||m?"change":"input",shouldTrim:o.includes(".trim")&&(p||u),shouldNumberize:g&&(p||u)},c&&((e=Object.assign({},e)).tModelInfo=h)}else{if(o.startsWith("block-"))throw new Error(`Invalid attribute: '${o}'`);if("t-name"!==o){if(o.startsWith("t-")&&!o.startsWith("t-att"))throw new Error(`Unknown QWeb directive: '${o}'`);const t=e.tModelInfo;t&&["t-att-value","t-attf-value"].includes(o)&&(t.hasDynamicChildren=!0),a[o]=r}}}const u=Ve(t,e);return{type:2,tag:n,dynamicTag:o,attrs:a,on:c,ref:i,content:u,model:h,ns:s}}(t,e)||function(t,e){if(!t.hasAttribute("t-set"))return null;const n=t.getAttribute("t-set"),o=t.getAttribute("t-value")||null,r=t.innerHTML===t.textContent&&t.textContent||null;let s=null;t.textContent!==t.innerHTML&&(s=Ve(t,e));return{type:6,name:n,value:o,defaultValue:r,body:s}}(t,e)||function(t,e){if("t"!==t.tagName)return null;return ze(t,e)}(t,e):function(t,e){if(t.nodeType===Node.TEXT_NODE){let n=t.textContent||"";if(!e.inPreTag){if(Re.test(n)&&!n.trim())return null;n=n.replace(Pe," ")}return{type:0,value:n}}if(t.nodeType===Node.COMMENT_NODE)return{type:1,value:t.textContent||""};return null}(t,e)}const Re=/[\r\n]/,Pe=/\s+/g;const je=/\.[\w_]+\s*$/,Me=/\[[^\[]+\]\s*$/,We=new Set(["svg","g","path"]);const Fe=new Map([["t-on","t-on is no longer supported on components. Consider passing a callback in props."],["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 Ve(t,e){const n=[];for(let o of t.childNodes){const t=Ie(o,e);t&&(3===t.type?n.push(...t.content):n.push(t))}return n}function ze(t,e){const n=Ve(t,e);switch(n.length){case 0:return null;case 1:return n[0];default:return{type:3,content:n}}}function Ke(t,e){const n=new Error(`The following error occurred in ${e}: `);return(...e)=>{try{const o=t(...e);return o instanceof Promise?o.catch((t=>{throw n.cause=t,t instanceof Error&&(n.message+=`"${t.message}"`),n})):o}catch(t){throw t instanceof Error&&(n.message+=`"${t.message}"`),n}}}function He(t){const e=le(),n=e.app.dev?Ke:t=>t;e.mounted.push(n(t.bind(e.component),"onMounted"))}function Ue(t){const e=le(),n=e.app.dev?Ke:t=>t;e.patched.push(n(t.bind(e.component),"onPatched"))}function qe(t){const e=le(),n=e.app.dev?Ke:t=>t;e.willUnmount.unshift(n(t.bind(e.component),"onWillUnmount"))}class Ge{constructor(t,e,n){this.props=t,this.env=e,this.__owl__=n}setup(){}render(t=!1){this.__owl__.render(t)}}Ge.template="";const Xe=V("").constructor;class Ye extends Xe{constructor(t,e){super(""),this.target=null,this.selector=t,this.realBDom=e}mount(t,e){if(super.mount(t,e),this.target=document.querySelector(this.selector),!this.target){let t=this.el;for(;t&&t.parentElement instanceof HTMLElement;)t=t.parentElement;if(this.target=t&&t.querySelector(this.selector),!this.target)throw new Error("invalid portal target")}this.realBDom.mount(this.target,null)}beforeRemove(){this.realBDom.beforeRemove()}remove(){this.realBDom&&(super.remove(),this.realBDom.remove(),this.realBDom=null)}patch(t){super.patch(t),this.realBDom?this.realBDom.patch(t.realBDom,!0):(this.realBDom=t.realBDom,this.realBDom.mount(this.target,null))}}class Ze extends Ge{setup(){const t=this.__owl__,e=t.renderFn;t.renderFn=()=>new Ye(this.props.target,e()),qe((()=>{t.bdom&&t.bdom.remove()}))}}function Qe(t){const e=t.__owl__.component,n=Object.create(e);for(let e in t)n[e]=t[e];return n}Ze.template=Xt`<t t-slot="default"/>`,Ze.props={target:{type:String},slots:!0};const Je=Symbol("isBoundary");class tn{constructor(t,e,n){this.fn=t,this.ctx=Qe(e),this.node=n}evaluate(){return this.fn(this.ctx,this.node)}toString(){return this.evaluate().toString()}}let en=new WeakMap;const nn={withDefault:function(t,e){return null==t||!1===t?e:t},zero:Symbol("zero"),isBoundary:Je,callSlot:function(t,e,n,r,s,i,l){n=n+"__slot_"+r;const a=t.props[xt].slots||{},{__render:c,__ctx:h,__scope:u}=a[r]||{},d=Object.create(h||{});u&&(d[u]=i||{});const f=c?c.call(h.__owl__.component,d,e,n):null;if(l){let i=void 0,a=void 0;return f?i=s?o(r,f):f:a=l.call(t.__owl__.component,t,e,n),O([i,a])}return f||V("")},capture:Qe,withKey:function(t,e){return t.key=e,t},prepareList:function(t){let e,n;if(Array.isArray(t))e=t,n=t;else{if(!t)throw new Error("Invalid loop expression");n=Object.keys(t),e=Object.values(t)}const o=n.length;return[e,n,o,new Array(o)]},setContextValue:function(t,e,n){const o=t;for(;!t.hasOwnProperty(e)&&!t.hasOwnProperty(Je);){const e=t.__proto__;if(!e){t=o;break}t=e}t[e]=n},multiRefSetter:function(t,e){let n=0;return o=>{if(o&&(n++,n>1))throw new Error("Cannot have 2 elements with same ref name at the same time");(0===n||o)&&(t[e]=o)}},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},validateProps:function(t,e,n){const o="string"!=typeof t?t:n.constructor.components[t];if(!o)return;re(e,o);const r=o.defaultProps||{};let s=(i=o.props)instanceof Array?Object.fromEntries(i.map((t=>t.endsWith("?")?[t.slice(0,-1),!1]:[t,!0]))):i||{"*":!0};var i;const l="*"in s;for(let t in s){if("*"===t)continue;const n=s[t];let i,l=!!n;if("object"==typeof n&&"optional"in n&&(l=!n.optional),l&&t in r)throw new Error(`A default value cannot be defined for a mandatory prop (name: '${t}', component: ${o.name})`);if(void 0!==e[t]){try{i=se(e[t],n)}catch(e){throw e.message=`Invalid prop '${t}' in component ${o.name} (${e.message})`,e}if(!i)throw new Error(`Invalid Prop '${t}' in component '${o.name}'`)}else if(l)throw new Error(`Missing props '${t}' (component '${o.name}')`)}if(!l)for(let t in e)if(!(t in s))throw new Error(`Unknown prop '${t}' given to component '${o.name}'`)},LazyValue:tn,safeOutput:function(t){if(!t)return t;let e,n;return t instanceof qt?(e="string_safe",n=yt(t)):t instanceof tn?(e="lazy_value",n=t.evaluate()):t instanceof String||"string"==typeof t?(e="string_unsafe",n=V(t)):(e="block_safe",n=t),o(e,n)},bind:function(t,e){let n=t.__owl__.component,o=en.get(n);o||(o=new WeakMap,en.set(n,o));let r=o.get(e);return r||(r=e.bind(n),o.set(e,r)),r}},on={text:V,createBlock:J,list:ft,multi:O,html:yt,toggler:o,component:function(t,e,n,o,r){let s=o.children[n],i="string"!=typeof t;s&&(s.status<1?(s.destroy(),s=void 0):2===s.status&&(s=void 0)),i&&s&&s.component.constructor!==t&&(s=void 0);const l=o.fiber;if(s){const t=s.component.props[xt];(l.deep||function(t,e){for(let n in t)if(t[n]!==e[n])return!0;return Object.keys(t).length!==Object.keys(e).length}(t,e))&&s.updateAndRender(e,l)}else{let a;if(i)a=t;else if(a=r.constructor.components[t],!a)throw new Error(`Cannot find the definition of component "${t}"`);s=new he(a,e,o.app,o),o.children[n]=s,s.initiateRender(new ee(s,l))}return s},comment:z};class rn extends class{constructor(t={}){var e;this.rawTemplates=Object.create(Gt),this.templates={},this.dev=t.dev||!1,this.translateFn=t.translateFn,this.translatableAttributes=t.translatableAttributes,t.templates&&this.addTemplates(t.templates),this.helpers=(e=this.getTemplate.bind(this),Object.assign({},nn,{Portal:Ze,markRaw:Ct,getTemplate:e,call:(t,n,r,s,i)=>o(n,e(n).call(t,r,s,i))}))}addTemplate(t,e,n={}){if(t in this.rawTemplates&&!n.allowDuplicate)throw new Error(`Template ${t} already defined`);this.rawTemplates[t]=e}addTemplates(t,e={}){if(t){t=t instanceof Document?t:function(t){const e=(new DOMParser).parseFromString(t,"text/xml");if(e.getElementsByTagName("parsererror").length){let n="Invalid XML in template.";const o=e.getElementsByTagName("parsererror")[0].textContent;if(o){n+="\nThe parser has produced the following error message:\n"+o;const e=/\d+/g,r=e.exec(o);if(r){const s=Number(r[0]),i=t.split("\n")[s-1],l=e.exec(o);if(i&&l){const t=Number(l[0])-1;i[t]&&(n+=`\nThe error might be located at xml line ${s} column ${t}\n${i}\n${"-".repeat(t-1)}^`)}}}throw new Error(n)}return e}(t);for(const n of t.querySelectorAll("[t-name]")){const t=n.getAttribute("t-name");this.addTemplate(t,n,e)}}}getTemplate(t){if(!(t in this.templates)){const e=this.rawTemplates[t];if(void 0===e){let e="";try{e=` (for component "${le().component.constructor.name}")`}catch{}throw new Error(`Missing template: "${t}"${e}`)}const n=this._compileTemplate(t,e),o=this.templates;this.templates[t]=function(e,n){return o[t].call(this,e,n)};const r=n(on,this.helpers);this.templates[t]=r}return this.templates[t]}_compileTemplate(t,e){return function(t,e={}){const n=Oe(t),o=t instanceof Node?!(t instanceof Element)||null===t.querySelector("[t-set], [t-call]"):!t.includes("t-set")&&!t.includes("t-call"),r=new Ce(n,{...e,hasSafeContext:o}).generateCode();return new Function("bdom, helpers",r)}(e,{name:t,dev:this.dev,translateFn:this.translateFn,translatableAttributes:this.translatableAttributes})}}{constructor(t,e={}){super(e),this.scheduler=new ue,this.root=null,this.Root=t,e.test&&(this.dev=!0),this.dev&&!e.test&&console.info(`Owl is running in 'dev' mode.\n\nThis is not suitable for production use.\nSee https://github.com/odoo/owl/blob/${window.owl?window.owl.__info__.hash:"master"}/doc/reference/app.md#configuration for more information.`);const n=Object.getOwnPropertyDescriptors(e.env||{});this.env=Object.freeze(Object.defineProperties({},n)),this.props=e.props||{}}mount(t,e){rn.validateTarget(t);const n=this.makeNode(this.Root,this.props),o=this.mountNode(n,t,e);return this.root=n,o}makeNode(t,e){return new he(t,e,this)}mountNode(t,e,n){const o=new Promise(((e,n)=>{let o=!1;t.mounted.push((()=>{e(t.component),o=!0}));let r=Zt.get(t);r||(r=[],Zt.set(t,r)),r.unshift((t=>{throw o?console.error(t):n(t),t}))}));return t.mountComponent(e,n),o}destroy(){this.root&&this.root.destroy()}}function sn(t,e){const n=Object.create(t),o=Object.getOwnPropertyDescriptors(e);return Object.freeze(Object.defineProperties(n,o))}function ln(t){const e=le();e.childEnv=sn(e.childEnv,t)}rn.validateTarget=function(t){if(!(t instanceof HTMLElement))throw new Error("Cannot mount component: the target is not a valid DOM element");if(!document.body.contains(t))throw new Error("Cannot mount a component on a detached dom node")};const an=()=>{};e.shouldNormalizeDom=!1,e.mainEventHandler=(e,n,o)=>{const{data:r,modifiers:s}=t(e);e=r;let i=!1;if(s.length){let t=!1;const e=n.target===o;for(const o of s)switch(o){case"self":if(t=!0,e)continue;return i;case"prevent":(t&&e||!t)&&n.preventDefault();continue;case"stop":(t&&e||!t)&&n.stopPropagation(),i=!0;continue}}if(Object.hasOwnProperty.call(e,0)){const t=e[0];if("function"!=typeof t)throw new Error(`Invalid handler (expected a function, received: '${t}')`);let o=e[1]?e[1].__owl__:null;o&&1!==o.status||t.call(o?o.component:null,n)}return i};const cn={config:e,mount:wt,patch:function(t,e,n=!1){t.patch(e,n)},remove:function(t,e=!1){e&&t.beforeRemove(),t.remove()},list:ft,multi:O,text:V,toggler:o,createBlock:J,html:yt,comment:z},hn={};exports.App=rn,exports.Component=Ge,exports.EventBus=Ut,exports.__info__=hn,exports.blockDom=cn,exports.loadFile=async function(t){const e=await fetch(t);if(!e.ok)throw new Error("Error while fetching xml templates");return await e.text()},exports.markRaw=Ct,exports.markup=function(t){return new qt(t)},exports.mount=async function(t,e,n={}){return new rn(t,n).mount(e,n)},exports.onError=function(t){const e=le();let n=Zt.get(e);n||(n=[],Zt.set(e,n)),n.push(t.bind(e.component))},exports.onMounted=He,exports.onPatched=Ue,exports.onRendered=function(t){const e=le(),n=e.renderFn,o=e.app.dev?Ke:t=>t;e.renderFn=o((()=>{const o=n();return t.call(e.component),o}),"onRendered")},exports.onWillDestroy=function(t){const e=le(),n=e.app.dev?Ke:t=>t;e.willDestroy.push(n(t.bind(e.component),"onWillDestroy"))},exports.onWillPatch=function(t){const e=le(),n=e.app.dev?Ke:t=>t;e.willPatch.unshift(n(t.bind(e.component),"onWillPatch"))},exports.onWillRender=function(t){const e=le(),n=e.renderFn,o=e.app.dev?Ke:t=>t;e.renderFn=o((()=>(t.call(e.component),n())),"onWillRender")},exports.onWillStart=function(t){const e=le(),n=e.app.dev?Ke:t=>t;e.willStart.push(n(t.bind(e.component),"onWillStart"))},exports.onWillUnmount=qe,exports.onWillUpdateProps=function(t){const e=le(),n=e.app.dev?Ke:t=>t;e.willUpdateProps.push(n(t.bind(e.component),"onWillUpdateProps"))},exports.reactive=Mt,exports.status=function(t){switch(t.__owl__.status){case 0:return"new";case 1:return"mounted";case 2:return"destroyed"}},exports.toRaw=Dt,exports.useChildSubEnv=ln,exports.useComponent=function(){return ie.component},exports.useEffect=function(t,e=(()=>[NaN])){let n,o;He((()=>{o=e(),n=t(...o)||an})),Ue((()=>{const r=e();r.some(((t,e)=>t!==o[e]))&&(o=r,n(),n=t(...o)||an)})),qe((()=>n()))},exports.useEnv=function(){return le().component.env},exports.useExternalListener=function(t,e,n,o){const r=le(),s=n.bind(r.component);He((()=>t.addEventListener(e,s,o))),qe((()=>t.removeEventListener(e,s,o)))},exports.useRef=function(t){const e=le().refs;return{get el(){return e[t]||null}}},exports.useState=ce,exports.useSubEnv=function(t){const e=le();e.component.env=sn(e.component.env,t),ln(t)},exports.whenReady=function(t){return new Promise((function(t){"loading"!==document.readyState?t(!0):document.addEventListener("DOMContentLoaded",t,!1)})).then(t||function(){})},exports.xml=Xt,hn.version="2.0.0-beta.1",hn.date="2022-03-02T12:29:06.886Z",hn.hash="d6348b8",hn.url="https://github.com/odoo/owl";
|
|
1
|
+
"use strict";function t(t){t=t.slice();const e=[];let n;for(;(n=t[0])&&"string"==typeof n;)e.push(t.shift());return{modifiers:e,data:t}}Object.defineProperty(exports,"__esModule",{value:!0});const e={shouldNormalizeDom:!0,mainEventHandler:(e,n,o)=>("function"==typeof e?e(n):Array.isArray(e)&&(e=t(e).data)[0](e[1],n),!1)};class n{constructor(t,e){this.key=t,this.child=e}mount(t,e){this.parentEl=t,this.child.mount(t,e)}moveBefore(t,e){this.child.moveBefore(t?t.child:null,e)}patch(t,e){if(this===t)return;let n=this.child,o=t.child;this.key===t.key?n.patch(o,e):(o.mount(this.parentEl,n.firstNode()),e&&n.beforeRemove(),n.remove(),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 o(t,e){return new n(t,e)}const{setAttribute:r,removeAttribute:s}=Element.prototype,i=DOMTokenList.prototype,l=i.add,a=i.remove,c=Array.isArray,{split:h,trim:u}=String.prototype,d=/\s+/;function f(t,e){switch(e){case!1:case void 0:s.call(this,t);break;case!0:r.call(this,t,"");break;default:r.call(this,t,e)}}function p(t){return function(e){f.call(this,t,e)}}function m(t){if(c(t))f.call(this,t[0],t[1]);else for(let e in t)f.call(this,e,t[e])}function g(t,e){if(c(t)){const n=t[0],o=t[1];if(n===e[0]){if(o===e[1])return;f.call(this,n,o)}else s.call(this,e[0]),f.call(this,n,o)}else{for(let n in e)n in t||s.call(this,n);for(let n in t){const o=t[n];o!==e[n]&&f.call(this,n,o)}}}function b(t){const e={};switch(typeof t){case"string":const n=u.call(t);if(!n)return{};let o=h.call(n,d);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){const t=h.call(n,d);for(let n of t)e[n]=o}}return e;case"undefined":return{};case"number":return{[t]:!0};default:return{[t]:!0}}}function v(t){t=""===t?{}:b(t);const e=this.classList;for(let n in t)l.call(e,n)}function y(t,e){e=""===e?{}:b(e),t=""===t?{}:b(t);const n=this.classList;for(let o in e)o in t||a.call(n,o);for(let o in t)o in e||l.call(n,o)}function x(t){return function(e){this[t]=e||""}}function w(t,e){switch(t){case"input":return"checked"===e||"indeterminate"===e||"value"===e||"readonly"===e||"disabled"===e;case"option":return"selected"===e||"disabled"===e;case"textarea":return"value"===e||"readonly"===e||"disabled"===e;case"select":return"value"===e||"disabled"===e;case"button":case"optgroup":return"disabled"===e}return!1}function k(t){const n=t.split(".")[0],o=t.includes(".capture");return t.includes(".synthetic")?function(t,n=!1){let o="__event__synthetic_"+t;n&&(o+="_capture");!function(t,n,o=!1){if(E[n])return;document.addEventListener(t,(t=>function(t,n){let o=n.target;for(;null!==o;){const r=o[t];if(r)for(const t of Object.values(r)){if(e.mainEventHandler(t,n,o))return}o=o.parentNode}}(n,t)),{capture:o}),E[n]=!0}(t,o,n);const r=N++;function s(t){const e=this[o]||{};e[r]=t,this[o]=e}return{setup:s,update:s}}(n,o):function(t,n=!1){let o=`__event__${t}_${$++}`;n&&(o+="_capture");function r(t){const n=t.currentTarget;if(!n||!document.contains(n))return;const r=n[o];r&&e.mainEventHandler(r,t,n)}function s(e){this[o]=e,this.addEventListener(t,r,{capture:n})}function i(t){this[o]=t}return{setup:s,update:i}}(n,o)}let $=1;let N=1;const E={};const A=Node.prototype,T=A.insertBefore,_=(L=A,S="textContent",Object.getOwnPropertyDescriptor(L,S)).set;var L,S;const C=A.removeChild;class D{constructor(t){this.children=t}mount(t,e){const n=this.children,o=n.length,r=new Array(o);for(let s=0;s<o;s++){let o=n[s];if(o)o.mount(t,e);else{const n=document.createTextNode("");r[s]=n,T.call(t,n,e)}}this.anchors=r,this.parentEl=t}moveBefore(t,e){if(t){const n=t.children[0];e=(n?n.firstNode():t.anchors[0])||null}const n=this.children,o=this.parentEl,r=this.anchors;for(let t=0,s=n.length;t<s;t++){let s=n[t];if(s)s.moveBefore(null,e);else{const n=r[t];T.call(o,n,e)}}}patch(t,e){if(this===t)return;const n=this.children,o=t.children,r=this.anchors,s=this.parentEl;for(let t=0,i=n.length;t<i;t++){const i=n[t],l=o[t];if(i)if(l)i.patch(l,e);else{const o=i.firstNode(),l=document.createTextNode("");r[t]=l,T.call(s,l,o),e&&i.beforeRemove(),i.remove(),n[t]=void 0}else if(l){n[t]=l;const e=r[t];l.mount(s,e),C.call(s,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)_.call(t,"");else{const e=this.children,n=this.anchors;for(let o=0,r=e.length;o<r;o++){const r=e[o];r?r.remove():C.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 O(t){return new D(t)}const B=Node.prototype,R=CharacterData.prototype,I=B.insertBefore,P=((t,e)=>Object.getOwnPropertyDescriptor(t,e))(R,"data").set,j=B.removeChild;class M{constructor(t){this.text=t}mountNode(t,e,n){this.parentEl=e,I.call(e,t,n),this.el=t}moveBefore(t,e){const n=t?t.el:e;I.call(this.parentEl,this.el,n)}beforeRemove(){}remove(){j.call(this.parentEl,this.el)}firstNode(){return this.el}toString(){return this.text}}class W extends M{mount(t,e){this.mountNode(document.createTextNode(K(this.text)),t,e)}patch(t){const e=t.text;this.text!==e&&(P.call(this.el,K(e)),this.text=e)}}class F extends M{mount(t,e){this.mountNode(document.createComment(K(this.text)),t,e)}patch(){}}function V(t){return new W(t)}function z(t){return new F(t)}function K(t){switch(typeof t){case"string":return t;case"number":return String(t);case"boolean":return t?"true":"false";default:return t||""}}const H=(t,e)=>Object.getOwnPropertyDescriptor(t,e),U=Node.prototype,q=Element.prototype,G=H(CharacterData.prototype,"data").set,X=H(U,"firstChild").get,Y=H(U,"nextSibling").get,Z=()=>{},Q={};function J(t){if(t in Q)return Q[t];const n=(new DOMParser).parseFromString(`<t>${t}</t>`,"text/xml").firstChild.firstChild;e.shouldNormalizeDom&&tt(n);const o=et(n),r=rt(o),s=function(t,e){let n=function(t,e){const{refN:n,collectors:o,children:r}=e,s=o.length;e.locations.sort(((t,e)=>t.idx-e.idx));const i=e.locations.map((t=>({refIdx:t.refIdx,setData:t.setData,updateData:t.updateData}))),l=i.length,a=r.length,c=r,h=n>0,u=U.cloneNode,d=U.insertBefore,f=q.remove;class p{constructor(t){this.data=t}beforeRemove(){}remove(){f.call(this.el)}firstNode(){return this.el}moveBefore(t,e){const n=t?t.el:e;d.call(this.parentEl,this.el,n)}toString(){const t=document.createElement("div");return this.mount(t,null),t.innerHTML}mount(e,n){const o=u.call(t,!0);d.call(e,o,n),this.el=o,this.parentEl=e}patch(t,e){}}h&&(p.prototype.mount=function(e,r){const h=u.call(t,!0),f=new Array(n);this.refs=f,f[0]=h;for(let t=0;t<s;t++){const e=o[t];f[e.idx]=e.getVal.call(f[e.prevIdx])}if(l){const t=this.data;for(let e=0;e<l;e++){const n=i[e];n.setData.call(f[n.refIdx],t[e])}}if(d.call(e,h,r),a){const t=this.children;for(let e=0;e<a;e++){const n=t[e];if(n){const t=c[e],o=t.afterRefIdx?f[t.afterRefIdx]:null;n.isOnlyChild=t.isOnlyChild,n.mount(f[t.parentRefIdx],o)}}}this.el=h,this.parentEl=e},p.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 r=e[t],s=o[t];if(r!==s){const e=i[t];e.updateData.call(n[e.refIdx],s,r)}}this.data=o}if(a){let o=this.children;const r=t.children;for(let t=0;t<a;t++){const s=o[t],i=r[t];if(s)i?s.patch(i,e):(e&&s.beforeRemove(),s.remove(),o[t]=void 0);else if(i){const e=c[t],r=e.afterRefIdx?n[e.afterRefIdx]:null;i.mount(n[e.parentRefIdx],r),o[t]=i}}}});return p}(t,e);if(e.cbRefs.length){const t=e.cbRefs,o=e.refList;let r=t.length;n=class extends n{mount(t,e){o.push(new Array(r)),super.mount(t,e);for(let t of o.pop())t()}remove(){super.remove();for(let e of t){(0,this.data[e])(null)}}}}if(e.children.length)return n=class extends n{constructor(t,e){super(t),this.children=e}},n.prototype.beforeRemove=D.prototype.beforeRemove,(t,e=[])=>new n(t,e);return t=>new n(t)}(o.el,r);return Q[t]=s,s}function tt(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)tt(t.childNodes.item(e))}else t.remove()}function et(t,e=null,n=null){switch(t.nodeType){case Node.ELEMENT_NODE:{let o=n&&n.currentNS;const r=t.tagName;let s=void 0;const i=[];if(r.startsWith("block-text-")){const t=parseInt(r.slice(11),10);i.push({type:"text",idx:t}),s=document.createTextNode("")}if(r.startsWith("block-child-")){n.isRef||nt(n);const t=parseInt(r.slice(12),10);i.push({type:"child",idx:t}),s=document.createTextNode("")}const l=t.attributes,a=l.getNamedItem("block-ns");if(a&&(l.removeNamedItem("block-ns"),o=a.value),s||(s=o?document.createElementNS(o,r):document.createElement(r)),s instanceof Element)for(let t=0;t<l.length;t++){const e=l[t].name,n=l[t].value;if(e.startsWith("block-handler-")){const t=parseInt(e.slice(14),10);i.push({type:"handler",idx:t,event:n})}else if(e.startsWith("block-attribute-")){const t=parseInt(e.slice(16),10);i.push({type:"attribute",idx:t,name:n,tag:r})}else"block-attributes"===e?i.push({type:"attributes",idx:parseInt(n,10)}):"block-ref"===e?i.push({type:"ref",idx:parseInt(n,10)}):s.setAttribute(l[t].name,n)}const c={parent:e,firstChild:null,nextSibling:null,el:s,info:i,refN:0,currentNS:o};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);i.push({idx:n,type:"child",isOnlyChild:!0})}else{c.firstChild=et(t.firstChild,c,c),s.appendChild(c.firstChild.el);let e=t.firstChild,n=c.firstChild;for(;e=e.nextSibling;)n.nextSibling=et(e,n,c),s.appendChild(n.nextSibling.el),n=n.nextSibling}}return c.info.length&&nt(c),c}case Node.TEXT_NODE:case Node.COMMENT_NODE:return{parent:e,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 Error("boom")}function nt(t){t.isRef=!0;do{t.refN++}while(t=t.parent)}function ot(t){let e=t.parent;for(;e&&e.nextSibling===t;)t=e,e=e.parent;return e}function rt(t,e,n){if(!e){e={collectors:[],locations:[],children:new Array(t.info.filter((t=>"child"===t.type)).length),cbRefs:[],refN:t.refN,refList:[]},n=0}if(t.refN){const o=n,r=t.isRef,s=t.firstChild?t.firstChild.refN:0,i=t.nextSibling?t.nextSibling.refN:0;if(r){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:st,updateData:st});break;case"child":n.isOnlyChild?t.children[n.idx]={parentRefIdx:n.refIdx,isOnlyChild:!0}:t.children[n.idx]={parentRefIdx:ot(e).refIdx,afterRefIdx:n.refIdx};break;case"attribute":{const e=n.refIdx;let o,r;if(w(n.tag,n.name)){const t=x(n.name);r=t,o=t}else"class"===n.name?(r=v,o=y):(r=p(n.name),o=r);t.locations.push({idx:n.idx,refIdx:e,setData:r,updateData:o});break}case"attributes":t.locations.push({idx:n.idx,refIdx:n.refIdx,setData:m,updateData:g});break;case"handler":{const{setup:e,update:o}=k(n.event);t.locations.push({idx:n.idx,refIdx:n.refIdx,setData:e,updateData:o});break}case"ref":const o=t.cbRefs.push(n.idx)-1;t.locations.push({idx:n.idx,refIdx:n.refIdx,setData:it(o,t.refList),updateData:Z})}}(e,t),n++}if(i){const r=n+s;e.collectors.push({idx:r,prevIdx:o,getVal:Y}),rt(t.nextSibling,e,r)}s&&(e.collectors.push({idx:n,prevIdx:o,getVal:X}),rt(t.firstChild,e,n))}return e}function st(t){G.call(this,K(t))}function it(t,e){return function(n){e[e.length-1][t]=()=>n(this)}}const lt=Node.prototype,at=lt.insertBefore,ct=lt.appendChild,ht=lt.removeChild,ut=((t,e)=>Object.getOwnPropertyDescriptor(t,e))(lt,"textContent").set;class dt{constructor(t){this.children=t}mount(t,e){const n=this.children,o=document.createTextNode("");this.anchor=o,at.call(t,o,e);const r=n.length;if(r){const e=n[0].mount;for(let s=0;s<r;s++)e.call(n[s],t,o)}this.parentEl=t}moveBefore(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].moveBefore(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 r=o[0]||n[0],{mount:s,patch:i,remove:l,beforeRemove:a,moveBefore:c,firstNode:h}=r,u=this.anchor,d=this.isOnlyChild,f=this.parentEl;if(0===o.length&&d){if(e)for(let t=0,e=n.length;t<e;t++)a.call(n[t]);return ut.call(f,""),void ct.call(f,u)}let p=0,m=0,g=n[0],b=o[0],v=n.length-1,y=o.length-1,x=n[v],w=o[y],k=void 0;for(;p<=v&&m<=y;){if(null===g){g=n[++p];continue}if(null===x){x=n[--v];continue}let t=g.key,r=b.key;if(t===r){i.call(g,b,e),o[m]=g,g=n[++p],b=o[++m];continue}let l=x.key,a=w.key;if(l===a){i.call(x,w,e),o[y]=x,x=n[--v],w=o[--y];continue}if(t===a){i.call(g,w,e),o[y]=g;const t=o[y+1];c.call(g,t,u),g=n[++p],w=o[--y];continue}if(l===r){i.call(x,b,e),o[m]=x;const t=n[p];c.call(x,t,u),x=n[--v],b=o[++m];continue}k=k||pt(n,p,v);let d=k[r];if(void 0===d)s.call(b,f,h.call(g)||null);else{const t=n[d];c.call(t,g,null),i.call(t,b,e),o[m]=t,n[d]=null}b=o[++m]}if(p<=v||m<=y)if(p>v){const t=o[y+1],e=t?h.call(t)||null:u;for(let t=m;t<=y;t++)s.call(o[t],f,e)}else for(let t=p;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)ut.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])}ht.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 ft(t){return new dt(t)}function pt(t,e,n){let o={};for(let r=e;r<=n;r++)o[t[r].key]=r;return o}const mt=Node.prototype,gt=mt.insertBefore,bt=mt.removeChild;class vt{constructor(t){this.content=[],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)gt.call(t,n,e);if(!this.content.length){const n=document.createTextNode("");this.content.push(n),gt.call(t,n,e)}}moveBefore(t,e){const n=t?t.content[0]:e,o=this.parentEl;for(let t of this.content)gt.call(o,t,n)}patch(t){if(this===t)return;const e=t.html;if(this.html!==e){const n=this.parentEl,o=this.content[0],r=document.createElement("template");r.innerHTML=e;const s=[...r.content.childNodes];for(let t of s)gt.call(n,t,o);if(!s.length){const t=document.createTextNode("");s.push(t),gt.call(n,t,o)}this.remove(),this.content=s,this.html=t.html}}beforeRemove(){}remove(){const t=this.parentEl;for(let e of this.content)bt.call(t,e)}firstNode(){return this.content[0]}toString(){return this.html}}function yt(t){return new vt(t)}function xt(t,e,n=null){t.mount(e,n)}const wt=Symbol("Target"),kt=Symbol("Skip"),$t=Symbol("Key changes"),Nt=Object.prototype.toString,Et=Object.prototype.hasOwnProperty,At=new Set(["Object","Array","Set","Map","WeakMap"]),Tt=new Set(["Set","Map","WeakMap"]);function _t(t){return Nt.call(t).slice(8,-1)}function Lt(t){return"object"==typeof t&&At.has(_t(t))}function St(t,e){return Lt(t)?Mt(t,e):t}function Ct(t){return t[kt]=!0,t}function Dt(t){return t[wt]||t}const Ot=new WeakMap;function Bt(t,e,n){Ot.get(t)||Ot.set(t,new Map);const o=Ot.get(t);o.get(e)||o.set(e,new Set),o.get(e).add(n),It.has(n)||It.set(n,new Set),It.get(n).add(t)}function Rt(t,e){const n=Ot.get(t);if(!n)return;const o=n.get(e);if(o)for(const t of[...o])Pt(t),t()}const It=new WeakMap;function Pt(t){const e=It.get(t);if(e){for(const n of e){const e=Ot.get(n);if(e)for(const n of e.values())n.delete(t)}e.clear()}}const jt=new WeakMap;function Mt(t,e=(()=>{})){if(!Lt(t))throw new Error("Cannot make the given value reactive");if(kt in t)return t;const n=t[wt];if(n)return Mt(n,e);jt.has(t)||jt.set(t,new Map);const o=jt.get(t);if(!o.has(e)){const n=_t(t),r=Tt.has(n)?function(t,e,n){const o=Ht[n](t,e);return Object.assign(Wt(e),{get:(t,n)=>n===wt?t:Et.call(o,n)?o[n]:(Bt(t,n,e),St(t[n],e))})}(t,e,n):Wt(e),s=new Proxy(t,r);o.set(e,s)}return o.get(e)}function Wt(t){return{get:(e,n,o)=>n===wt?e:(Bt(e,n,t),St(Reflect.get(e,n,o),t)),set(t,e,n,o){const r=!Et.call(t,e),s=Reflect.get(t,e,o),i=Reflect.set(t,e,n,o);return r&&Rt(t,$t),(s!==n||Array.isArray(t)&&"length"===e)&&Rt(t,e),i},deleteProperty(t,e){const n=Reflect.deleteProperty(t,e);return Rt(t,$t),Rt(t,e),n},ownKeys:e=>(Bt(e,$t,t),Reflect.ownKeys(e)),has:(e,n)=>(Bt(e,$t,t),Reflect.has(e,n))}}function Ft(t,e,n){return o=>(o=Dt(o),Bt(e,o,n),St(e[t](o),n))}function Vt(t,e,n){return function*(){Bt(e,$t,n);const o=e.keys();for(const r of e[t]()){const t=o.next().value;Bt(e,t,n),yield St(r,n)}}}function zt(t,e,n){return(o,r)=>{o=Dt(o);const s=n.has(o),i=n[e](o),l=n[t](o,r);return s!==n.has(o)&&Rt(n,$t),i!==r&&Rt(n,o),l}}function Kt(t){return()=>{const e=[...t.keys()];t.clear(),Rt(t,$t);for(const n of e)Rt(t,n)}}const Ht={Set:(t,e)=>({has:Ft("has",t,e),add:zt("add","has",t),delete:zt("delete","has",t),keys:Vt("keys",t,e),values:Vt("values",t,e),entries:Vt("entries",t,e),[Symbol.iterator]:Vt(Symbol.iterator,t,e),clear:Kt(t),get size(){return Bt(t,$t,e),t.size}}),Map:(t,e)=>({has:Ft("has",t,e),get:Ft("get",t,e),set:zt("set","get",t),delete:zt("delete","has",t),keys:Vt("keys",t,e),values:Vt("values",t,e),entries:Vt("entries",t,e),[Symbol.iterator]:Vt(Symbol.iterator,t,e),clear:Kt(t),get size(){return Bt(t,$t,e),t.size}}),WeakMap:(t,e)=>({has:Ft("has",t,e),get:Ft("get",t,e),set:zt("set","get",t),delete:zt("delete","has",t)})};class Ut extends EventTarget{trigger(t,e){this.dispatchEvent(new CustomEvent(t,{detail:e}))}}class qt extends String{}const Gt={};function Xt(...t){const e="__template__"+Xt.nextId++,n=String.raw(...t);return Gt[e]=n,e}Xt.nextId=1;const Yt=new WeakMap,Zt=new WeakMap;function Qt(t,e,n=!1){if(!t)return!1;const o=t.fiber;o&&Yt.set(o,e);const r=Zt.get(t);if(r){let t=!1;for(let n=r.length-1;n>=0;n--)try{r[n](e),t=!0;break}catch(t){e=t}if(t)return n&&o&&o.node.fiber&&o.root.counter--,!0}return Qt(t.parent,e)}function Jt(t){const e=t.error,n="node"in t?t.node:t.fiber.node,o="fiber"in t?t.fiber:n.fiber;let r=o;do{r.node.fiber=r,r=r.parent}while(r);Yt.set(o.root,e);if(!Qt(n,e,!0)){console.warn("[Owl] Unhandled error. Destroying the root component");try{n.app.destroy()}catch(t){console.error(t)}}}function te(t){let e=0;for(let n of t)n.node.fiber=null,n.bdom?n.node.forceNextRender=!0:e++,e+=te(n.children);return e}class ee{constructor(t,e){if(this.bdom=null,this.children=[],this.appliedToDom=!1,this.deep=!1,this.node=t,this.parent=e,e){this.deep=e.deep;const t=e.root;t.counter++,this.root=t,e.children.push(this)}else this.root=this}}class ne extends ee{constructor(){super(...arguments),this.counter=1,this.willPatch=[],this.patched=[],this.mounted=[],this.locked=!1}complete(){const t=this.node;this.locked=!0;let e=void 0;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)}}e=void 0,t._patch(),this.locked=!1;let n=this.mounted;for(;e=n.pop();)if(e=e,e.appliedToDom)for(let t of e.node.mounted)t();let o=this.patched;for(;e=o.pop();)if(e=e,e.appliedToDom)for(let t of e.node.patched)t()}catch(t){this.locked=!1,Jt({fiber:e||this,error:t})}}}class oe extends ne{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.app.constructor.validateTarget(this.target),e.bdom)e.updateDom();else if(e.bdom=this.bdom,"last-child"===this.position||0===this.target.childNodes.length)xt(e.bdom,this.target);else{const t=this.target.childNodes[0];xt(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){Jt({fiber:t,error:e})}}}function re(t,e){const n=e.defaultProps;if(n)for(let e in n)void 0===t[e]&&(t[e]=n[e])}function se(t,e){if(!0===e)return!0;if("function"==typeof e)return"object"==typeof t?t instanceof e:typeof t===e.name.toLowerCase();if(e instanceof Array){let n=!1;for(let o=0,r=e.length;o<r;o++)n=n||se(t,e[o]);return n}if(e.optional&&void 0===t)return!0;let n=!e.type||se(t,e.type);if(e.validate&&(n=n&&e.validate(t)),e.type===Array&&e.element)for(let o=0,r=t.length;o<r;o++)n=n&&se(t[o],e.element);if(e.type===Object&&e.shape){const o=e.shape;for(let e in o)n=n&&se(t[e],o[e]);if(n)for(let e in t)if(!(e in o))throw new Error(`unknown prop '${e}'`)}return n}let ie=null;function le(){if(!ie)throw new Error("No active component (a hook function should only be called in 'setup')");return ie}const ae=new WeakMap;function ce(t){const e=le();let n=ae.get(e);return n||(n=function(t){let e=!1;return async()=>{await Promise.resolve(),e||(e=!0,t(),await Promise.resolve(),e=!1)}}(e.render.bind(e)),ae.set(e,n),e.willDestroy.push(Pt.bind(null,n)),e.app.dev&&Object.defineProperty(e,"subscriptions",{get(){return t=n,[...It.get(t)||[]].map((t=>{const e=Ot.get(t);return{target:t,keys:e?[...e.keys()]:[]}}));var t}})),Mt(t,n)}class he{constructor(t,e,n,o){this.fiber=null,this.bdom=null,this.status=0,this.forceNextRender=!1,this.children=Object.create(null),this.refs={},this.willStart=[],this.willUpdateProps=[],this.willUnmount=[],this.mounted=[],this.willPatch=[],this.patched=[],this.willDestroy=[],ie=this,this.app=n,this.parent=o||null,this.level=o?o.level+1:0,re(e,t);const r=o&&o.childEnv||n.env;this.childEnv=r,e=ce(e),this.component=new t(e,r,this),this.renderFn=n.getTemplate(t.template).bind(this.component,this.component,this),this.component.setup(),ie=null}mountComponent(t,e){const n=new oe(this,t,e);this.app.scheduler.addFiber(n),this.initiateRender(n)}async initiateRender(t){this.fiber=t,this.mounted.length&&t.root.mounted.push(t);const e=this.component;try{await Promise.all(this.willStart.map((t=>t.call(e))))}catch(t){return void Jt({node:this,error:t})}0===this.status&&this.fiber===t&&this._render(t)}async render(t=!1){let e=this.fiber;if(e&&e.root.locked&&(await Promise.resolve(),e=this.fiber),e){if(!e.bdom&&!Yt.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.counter=t.counter+1-te(e.children),e.children=[],e.bdom=null,Yt.has(e)&&(Yt.delete(e),Yt.delete(t),e.appliedToDom=!1),e}const n=new ne(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(),2!==this.status&&(this.fiber!==n||!e&&n.parent||this._render(n))}_render(t){try{t.bdom=this.renderFn(),t.root.counter--}catch(t){Jt({node:this,error:t})}}destroy(){let t=1===this.status;this._destroy(),t&&this.bdom.remove()}_destroy(){const t=this.component;if(1===this.status)for(let e of this.willUnmount)e.call(t);for(let t of Object.values(this.children))t._destroy();for(let e of this.willDestroy)e.call(t);this.status=2}async updateAndRender(t,e){const n=function(t,e){let n=t.fiber;return n&&(te(n.children),n.root=null),new ee(t,e)}(this,e);this.fiber=n;const o=this.component;re(t,o.constructor),ie=this,t=ce(t),ie=null;const r=Promise.all(this.willUpdateProps.map((e=>e.call(o,t))));if(await r,n!==this.fiber)return;o.props=t,this._render(n);const s=e.root;this.willPatch.length&&s.willPatch.push(n),this.patched.length&&s.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.fiber=null}moveBefore(t,e){this.bdom.moveBefore(t?t.bdom:null,e)}patch(){this.fiber&&this.fiber.parent&&this._patch()}_patch(){const t=Object.keys(this.children).length>0;this.bdom.patch(this.fiber.bdom,t),t&&this.cleanOutdatedChildren(),this.fiber.appliedToDom=!0,this.fiber=null}beforeRemove(){this._destroy()}remove(){this.bdom.remove()}cleanOutdatedChildren(){const t=this.children;for(const e in t){const n=t[e],o=n.status;1!==o&&(delete t[e],2!==o&&n.destroy())}}}class ue{constructor(){this.tasks=new Set,this.isRunning=!1,this.requestAnimationFrame=ue.requestAnimationFrame}start(){this.isRunning=!0,this.scheduleTasks()}stop(){this.isRunning=!1}addFiber(t){this.tasks.add(t.root),this.isRunning||this.start()}flush(){this.tasks.forEach((t=>{if(t.root!==t)return void this.tasks.delete(t);const e=Yt.has(t);e&&0!==t.counter?this.tasks.delete(t):2!==t.node.status?0===t.counter&&(e||t.complete(),this.tasks.delete(t)):this.tasks.delete(t)})),0===this.tasks.size&&this.stop()}scheduleTasks(){this.requestAnimationFrame((()=>{this.flush(),this.isRunning&&this.scheduleTasks()}))}}ue.requestAnimationFrame=window.requestAnimationFrame.bind(window);const de="true,false,NaN,null,undefined,debugger,console,window,in,instanceof,new,function,return,this,eval,void,Math,RegExp,Array,Object,Date".split(","),fe=Object.assign(Object.create(null),{and:"&&",or:"||",gt:">",gte:">=",lt:"<",lte:"<="}),pe=Object.assign(Object.create(null),{"{":"LEFT_BRACE","}":"RIGHT_BRACE","[":"LEFT_BRACKET","]":"RIGHT_BRACKET",":":"COLON",",":"COMMA","(":"LEFT_PAREN",")":"RIGHT_PAREN"}),me="...,.,===,==,+,!==,!=,!,||,&&,>=,>,<=,<,?,-,*,/,%,typeof ,=>,=,;,in ".split(",");const ge=[function(t){let e=t[0],n=e;if("'"!==e&&'"'!==e&&"`"!==e)return!1;let o,r=1;for(;t[r]&&t[r]!==n;){if(o=t[r],e+=o,"\\"===o){if(r++,o=t[r],!o)throw new Error("Invalid expression");e+=o}r++}if(t[r]!==n)throw new Error("Invalid expression");return e+=n,"`"===n?{type:"TEMPLATE_STRING",value:e,replace:t=>e.replace(/\$\{(.*?)\}/g,((e,n)=>"${"+t(n)+"}"))}:{type:"VALUE",value:e}},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 me)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 fe?{type:"OPERATOR",value:fe[e],size:e.length}:{type:"SYMBOL",value:e}}return!1},function(t){const e=t[0];return!(!e||!(e in pe))&&{type:pe[e],value:e}}];const be=t=>t&&("LEFT_BRACE"===t.type||"COMMA"===t.type),ve=t=>t&&("RIGHT_BRACE"===t.type||"COMMA"===t.type);function ye(t){const e=new Set,n=function(t){const e=[];let n=!0;for(;n;)if(t=t.trim()){for(let o of ge)if(n=o(t),n){e.push(n),t=t.slice(n.size||n.value.length);break}}else n=!1;if(t.length)throw new Error(`Tokenizer error: could not tokenize "${t}"`);return e}(t);let o=0,r=[];for(;o<n.length;){let t=n[o],s=n[o-1],i=n[o+1],l=r[r.length-1];switch(t.type){case"LEFT_BRACE":case"LEFT_BRACKET":r.push(t.type);break;case"RIGHT_BRACE":case"RIGHT_BRACKET":r.pop()}let a="SYMBOL"===t.type&&!de.includes(t.value);if("SYMBOL"!==t.type||de.includes(t.value)||s&&("LEFT_BRACE"===l&&be(s)&&ve(i)&&(n.splice(o+1,0,{type:"COLON",value:":"},{...t}),i=n[o+1]),"OPERATOR"===s.type&&"."===s.value?a=!1:"LEFT_BRACE"!==s.type&&"COMMA"!==s.type||i&&"COLON"===i.type&&(a=!1)),"TEMPLATE_STRING"===t.type&&(t.value=t.replace((t=>xe(t)))),i&&"OPERATOR"===i.type&&"=>"===i.value)if("RIGHT_PAREN"===t.type){let t=o-1;for(;t>0&&"LEFT_PAREN"!==n[t].type;)"SYMBOL"===n[t].type&&n[t].originalValue&&(n[t].value=n[t].originalValue,e.add(n[t].value)),t--}else e.add(t.value);a&&(t.varName=t.value,e.has(t.value)||(t.originalValue=t.value,t.value=`ctx['${t.value}']`)),o++}for(const t of n)"SYMBOL"===t.type&&t.varName&&e.has(t.value)&&(t.originalValue=t.value,t.value="_"+t.value,t.isLocal=!0);return n}function xe(t){return ye(t).map((t=>t.value)).join("")}const we=/\{\{.*?\}\}/g,ke=/\{\{.*?\}\}/g;function $e(t){let e=t.match(we);return e&&e[0].length===t.length?`(${xe(t.slice(2,-2))})`:"`"+t.replace(ke,(t=>"${"+xe(t.slice(2,-2))+"}"))+"`"}const Ne=document.implementation.createDocument(null,null,null),Ee=new Set(["stop","capture","prevent","self","synthetic"]);class Ae{constructor(t,e){this.dynamicTagName=null,this.isRoot=!1,this.hasDynamicChildren=!1,this.children=[],this.data=[],this.childNumber=0,this.parentVar="",this.id=Ae.nextBlockId++,this.varName="b"+this.id,this.blockName="block"+this.id,this.target=t,this.type=e}static generateId(t){return this.nextDataIds[t]=(this.nextDataIds[t]||0)+1,t+this.nextDataIds[t]}insertData(t,e="d"){const n=Ae.generateId(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=Ne.createElement("t");return t.appendChild(this.dom),t.innerHTML}}function Te(t,e){return Object.assign({block:null,index:0,forceNewBlock:!0,translate:t.translate,tKeyExpr:null,nameSpace:t.nameSpace,tModelSelectedExpr:t.tModelSelectedExpr},e)}Ae.nextBlockId=1,Ae.nextDataIds={};class _e{constructor(t){this.indentLevel=0,this.loopLevel=0,this.code=[],this.hasRoot=!1,this.hasCache=!1,this.hasRef=!1,this.refInfo={},this.shouldProtectScope=!1,this.name=t}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=[];if(t.push(`function ${this.name}(ctx, node, key = "") {`),this.hasRef){t.push(" const refs = ctx.__owl__.refs;");for(let e in this.refInfo){const[n,o]=this.refInfo[e];t.push(` const ${n} = ${o};`)}}this.shouldProtectScope&&(t.push(" ctx = Object.create(ctx);"),t.push(" ctx[isBoundary] = 1")),this.hasCache&&(t.push(" let cache = ctx.cache || {};"),t.push(" let nextCache = ctx.cache = {};"));for(let e of this.code)t.push(e);return this.hasRoot||t.push("return text('');"),t.push("}"),t.join("\n ")}}const Le=["label","title","placeholder","alt"],Se=/^(\s*)([\s\S]+?)(\s*)$/;class Ce{constructor(t,e){if(this.blocks=[],this.ids={},this.nextBlockId=1,this.isDebug=!1,this.targets=[],this.target=new _e("template"),this.translatableAttributes=Le,this.staticCalls=[],this.helpers=new Set,this.translateFn=e.translateFn||(t=>t),e.translatableAttributes){const t=new Set(Le);for(let n of e.translatableAttributes)n.startsWith("-")?t.delete(n.slice(1)):t.add(n);this.translatableAttributes=[...t]}this.hasSafeContext=e.hasSafeContext||!1,this.dev=e.dev||!1,this.ast=t,this.templateName=e.name}generateCode(){const t=this.ast;this.isDebug=12===t.type,Ae.nextBlockId=1,Ae.nextDataIds={},this.compileAST(t,{block:null,index:0,forceNewBlock:!1,isLast:!0,translate:!0,tKeyExpr:null});let e=[" let { text, createBlock, list, multi, html, toggler, component, comment } = bdom;"];this.helpers.size&&e.push(`let { ${[...this.helpers].join(", ")} } = helpers;`),this.templateName&&e.push(`// Template name: "${this.templateName}"`);for(let{id:t,template:n}of this.staticCalls)e.push(`const ${t} = getTemplate(${n});`);if(this.blocks.length){e.push("");for(let t of this.blocks)if(t.dom){let n=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){const o=this.generateId(t),r=this.target,s=new _e(o);this.targets.push(s),this.target=s;const i=Te(n);return this.compileAST(e,i),this.target=r,o}addLine(t){this.target.addLine(t)}generateId(t=""){return this.ids[t]=(this.ids[t]||0)+1,t+this.ids[t]}insertAnchor(t){const e="block-child-"+t.children.length,n=Ne.createElement(e);t.insert(n)}createBlock(t,e,n){const o=this.target.hasRoot,r=new Ae(this.target,e);return o||n.preventRoot||(this.target.hasRoot=!0,r.isRoot=!0),t&&(t.children.push(r),"list"===t.type&&(r.parentVar="c_block"+t.id)),r}insertBlock(t,e,n){let o=e.generateExpr(t);const r=n.tKeyExpr;if(e.parentVar){let t="key"+this.target.loopLevel;return r&&(t=`${r} + ${t}`),this.helpers.add("withKey"),void this.addLine(`${e.parentVar}[${n.index}] = withKey(${o}, ${t});`)}r&&(o=`toggler(${r}, ${o})`),e.isRoot&&!n.preventRoot?this.addLine(`return ${o};`):this.addLine(`let ${e.varName} = ${o};`)}captureExpression(t,e=!1){if(!e&&!t.includes("=>"))return xe(t);const n=ye(t),o=new Map;return n.map((t=>{if(t.varName&&!t.isLocal){if(!o.has(t.varName)){const e=this.generateId("v");o.set(t.varName,e),this.addLine(`const ${e} = ${t.value};`)}t.value=o.get(t.varName)}return t.value})).join("")}compileAST(t,e){switch(t.type){case 1:this.compileComment(t,e);break;case 0:this.compileText(t,e);break;case 2:this.compileTDomNode(t,e);break;case 4:this.compileTEsc(t,e);break;case 8:this.compileTOut(t,e);break;case 5:this.compileTIf(t,e);break;case 9:this.compileTForeach(t,e);break;case 10:this.compileTKey(t,e);break;case 3:this.compileMulti(t,e);break;case 7:this.compileTCall(t,e);break;case 15:this.compileTCallBlock(t,e);break;case 6:this.compileTSet(t,e);break;case 11:this.compileComponent(t,e);break;case 12:this.compileDebug(t,e);break;case 13:this.compileLog(t,e);break;case 14:this.compileTSlot(t,e);break;case 16:this.compileTTranslation(t,e);break;case 17:this.compileTPortal(t,e)}}compileDebug(t,e){this.addLine("debugger;"),t.content&&this.compileAST(t.content,e)}compileLog(t,e){this.addLine(`console.log(${xe(t.expr)});`),t.content&&this.compileAST(t.content,e)}compileComment(t,e){let{block:n,forceNewBlock:o}=e;if(!n||o)n=this.createBlock(n,"comment",e),this.insertBlock(`comment(\`${t.value}\`)`,n,{...e,forceNewBlock:o&&!n});else{const e=Ne.createComment(t.value);n.insert(e)}}compileText(t,e){let{block:n,forceNewBlock:o}=e,r=t.value;if(r&&!1!==e.translate){const t=Se.exec(r);r=t[1]+this.translateFn(t[2])+t[3]}if(!n||o)n=this.createBlock(n,"text",e),this.insertBlock(`text(\`${r}\`)`,n,{...e,forceNewBlock:o&&!n});else{const e=0===t.type?Ne.createTextNode:Ne.createComment;n.insert(e.call(Ne,r))}}generateHandlerCode(t,e){const n=t.split(".").slice(1).map((t=>{if(!Ee.has(t))throw new Error(`Unknown event modifier: '${t}'`);return`"${t}"`}));let o="";return n.length&&(o=n.join(",")+", "),`[${o}${this.captureExpression(e)}, ctx]`}compileTDomNode(t,e){let{block:n,forceNewBlock:o}=e;const r=!n||o||null!==t.dynamicTag||t.ns;let s=this.target.code.length;if(r&&((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=this.generateId("tag");this.addLine(`let ${e} = ${xe(t.dynamicTag)};`),n.dynamicTagName=e}const i={},l=t.ns||e.nameSpace;l&&r&&(i["block-ns"]=l);for(let o in t.attrs){let r,s;if(o.startsWith("t-attf")){r=$e(t.attrs[o]);const e=n.insertData(r,"attr");s=o.slice(7),i["block-attribute-"+e]=s}else if(o.startsWith("t-att")){r=xe(t.attrs[o]);const e=n.insertData(r,"attr");"t-att"===o?i["block-attributes"]=String(e):(s=o.slice(6),i["block-attribute-"+e]=s)}else this.translatableAttributes.includes(o)?i[o]=this.translateFn(t.attrs[o]):(r=`"${t.attrs[o]}"`,s=o,i[o]=t.attrs[o]);if("value"===s&&e.tModelSelectedExpr){i["block-attribute-"+n.insertData(`${e.tModelSelectedExpr} === ${r}`,"attr")]="selected"}}for(let e in t.on){const o=this.generateHandlerCode(e,t.on[e]);i["block-handler-"+n.insertData(o,"hdlr")]=e}if(t.ref){this.target.hasRef=!0;if(we.test(t.ref)){const e=t.ref.replace(we,(t=>"${"+this.captureExpression(t.slice(2,-2),!0)+"}")),o=n.insertData(`(el) => refs[\`${e}\`] = el`,"ref");i["block-ref"]=String(o)}else{let e=t.ref;if(e in this.target.refInfo){this.helpers.add("multiRefSetter");const t=this.target.refInfo[e],o=n.data.push(t[0])-1;i["block-ref"]=String(o),t[1]=`multiRefSetter(refs, \`${e}\`)`}else{let t=this.generateId("ref");this.target.refInfo[e]=[t,`(el) => refs[\`${e}\`] = el`];const o=n.data.push(t)-1;i["block-ref"]=String(o)}}}let a;if(t.model){const{hasDynamicChildren:e,baseExpr:o,expr:r,eventType:s,shouldNumberize:l,shouldTrim:c,targetAttr:h,specialInitTargetAttr:u}=t.model,d=xe(o),f=this.generateId("bExpr");this.addLine(`const ${f} = ${d};`);const p=xe(r),m=this.generateId("expr");this.addLine(`const ${m} = ${p};`);const g=`${f}[${m}]`;let b;if(u)b=n.insertData(`${g} === '${i[h]}'`,"attr"),i["block-attribute-"+b]=u;else if(e){a=""+this.generateId("bValue"),this.addLine(`let ${a} = ${g}`)}else b=n.insertData(""+g,"attr"),i["block-attribute-"+b]=h;this.helpers.add("toNumber");let v="ev.target."+h;v=c?v+".trim()":v,v=l?`toNumber(${v})`:v;const y=`[(ev) => { ${g} = ${v}; }]`;b=n.insertData(y,"hdlr"),i["block-handler-"+b]=s}const c=Ne.createElement(t.tag);for(const[t,e]of Object.entries(i))"class"===t&&""===e||c.setAttribute(t,e);if(n.insert(c),t.content.length){const o=n.currentDom;n.currentDom=c;const r=t.content;for(let o=0;o<r.length;o++){const s=t.content[o],i=Te(e,{block:n,index:n.childNumber,forceNewBlock:!1,isLast:e.isLast&&o===r.length-1,tKeyExpr:e.tKeyExpr,nameSpace:l,tModelSelectedExpr:a});this.compileAST(s,i)}n.currentDom=o}if(r&&(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=s;n<t.length&&(!t[n].trimStart().startsWith(`let ${o.varName} `)||(t[n]=t[n].replace("let "+o.varName,o.varName),o=e.shift(),o));n++);this.target.addLine(`let ${n.children.map((t=>t.varName))};`,s)}}compileTEsc(t,e){let n,{block:o,forceNewBlock:r}=e;if("0"===t.expr?(this.helpers.add("zero"),n="ctx[zero]"):(n=xe(t.expr),t.defaultValue&&(this.helpers.add("withDefault"),n=`withDefault(${n}, \`${t.defaultValue}\`)`)),!o||r)o=this.createBlock(o,"text",e),this.insertBlock(`text(${n})`,o,{...e,forceNewBlock:r&&!o});else{const t=o.insertData(n,"txt"),e=Ne.createElement("block-text-"+t);o.insert(e)}}compileTOut(t,e){let{block:n}=e;n&&this.insertAnchor(n),n=this.createBlock(n,"html",e),this.helpers.add("0"===t.expr?"zero":"safeOutput");let o="0"===t.expr?"ctx[zero]":`safeOutput(${xe(t.expr)})`;if(t.body){const n=Ae.nextBlockId,r=Te(e);this.compileAST({type:3,content:t.body},r),this.helpers.add("withDefault"),o=`withDefault(${o}, b${n})`}this.insertBlock(""+o,n,e)}compileTIf(t,e,n){let{block:o,forceNewBlock:r,index:s}=e,i=s;const l=this.target.code.length,a=!o||"multi"!==o.type&&r;o&&(o.hasDynamicChildren=!0),(!o||"multi"!==o.type&&r)&&(o=this.createBlock(o,"multi",e)),this.addLine(`if (${xe(t.condition)}) {`),this.target.indentLevel++,this.insertAnchor(o);const c=Te(e,{block:o,index:i});if(this.compileAST(t.content,c),this.target.indentLevel--,t.tElif)for(let n of t.tElif){this.addLine(`} else if (${xe(n.condition)}) {`),this.target.indentLevel++,this.insertAnchor(o);const t=Te(e,{block:o,index:i});this.compileAST(n.content,t),this.target.indentLevel--}if(t.tElse){this.addLine("} else {"),this.target.indentLevel++,this.insertAnchor(o);const n=Te(e,{block:o,index:i});this.compileAST(t.tElse,n),this.target.indentLevel--}if(this.addLine("}"),a){if(o.children.length){const t=this.target.code,e=o.children.slice();let n=e.shift();for(let o=l;o<t.length&&(!t[o].trimStart().startsWith(`let ${n.varName} `)||(t[o]=t[o].replace("let "+n.varName,n.varName),n=e.shift(),n));o++);this.target.addLine(`let ${o.children.map((t=>t.varName))};`,l)}const t=o.children.map((t=>t.varName)).join(", ");this.insertBlock(`multi([${t}])`,o,e)}}compileTForeach(t,e){let{block:n}=e;n&&this.insertAnchor(n),n=this.createBlock(n,"list",e),this.target.loopLevel++;const o="i"+this.target.loopLevel;this.addLine("ctx = Object.create(ctx);");const r="v_block"+n.id,s="k_block"+n.id,i="l_block"+n.id,l="c_block"+n.id;let a;this.helpers.add("prepareList"),this.addLine(`const [${s}, ${r}, ${i}, ${l}] = prepareList(${xe(t.collection)});`),this.dev&&this.addLine(`const keys${n.id} = new Set();`),this.addLine(`for (let ${o} = 0; ${o} < ${i}; ${o}++) {`),this.target.indentLevel++,this.addLine(`ctx[\`${t.elem}\`] = ${r}[${o}];`),t.hasNoFirst||this.addLine(`ctx[\`${t.elem}_first\`] = ${o} === 0;`),t.hasNoLast||this.addLine(`ctx[\`${t.elem}_last\`] = ${o} === ${r}.length - 1;`),t.hasNoIndex||this.addLine(`ctx[\`${t.elem}_index\`] = ${o};`),t.hasNoValue||this.addLine(`ctx[\`${t.elem}_value\`] = ${s}[${o}];`),this.addLine(`let key${this.target.loopLevel} = ${t.key?xe(t.key):o};`),this.dev&&(this.addLine(`if (keys${n.id}.has(key${this.target.loopLevel})) { throw new Error(\`Got duplicate key in t-foreach: \${key${this.target.loopLevel}}\`)}`),this.addLine(`keys${n.id}.add(key${this.target.loopLevel});`)),t.memo&&(this.target.hasCache=!0,a=this.generateId(),this.addLine(`let memo${a} = ${xe(t.memo)}`),this.addLine(`let vnode${a} = cache[key${this.target.loopLevel}];`),this.addLine(`if (vnode${a}) {`),this.target.indentLevel++,this.addLine(`if (shallowEqual(vnode${a}.memo, memo${a})) {`),this.target.indentLevel++,this.addLine(`${l}[${o}] = vnode${a};`),this.addLine(`nextCache[key${this.target.loopLevel}] = vnode${a};`),this.addLine("continue;"),this.target.indentLevel--,this.addLine("}"),this.target.indentLevel--,this.addLine("}"));const c=Te(e,{block:n,index:o});this.compileAST(t.body,c),t.memo&&this.addLine(`nextCache[key${this.target.loopLevel}] = Object.assign(${l}[${o}], {memo: memo${a}});`),this.target.indentLevel--,this.target.loopLevel--,this.addLine("}"),e.isLast||this.addLine("ctx = ctx.__proto__;"),this.insertBlock("l",n,e)}compileTKey(t,e){const n=this.generateId("tKey_");this.addLine(`const ${n} = ${xe(t.expr)};`),e=Te(e,{tKeyExpr:n,block:e.block,index:e.index}),this.compileAST(t.content,e)}compileMulti(t,e){let{block:n,forceNewBlock:o}=e;const r=!n||o;let s=this.target.code.length;if(r){if(t.content.filter((t=>6!==t.type)).length<=1){for(let n of t.content)this.compileAST(n,e);return}n=this.createBlock(n,"multi",e)}let i=0;for(let o=0,r=t.content.length;o<r;o++){const s=t.content[o],l=6===s.type,a=Te(e,{block:n,index:i,forceNewBlock:!l,preventRoot:e.preventRoot,isLast:e.isLast&&o===r-1});this.compileAST(s,a),l||i++}if(r){if(n.hasDynamicChildren&&n.children.length){const t=this.target.code,e=n.children.slice();let o=e.shift();for(let n=s;n<t.length&&(!t[n].trimStart().startsWith(`let ${o.varName} `)||(t[n]=t[n].replace("let "+o.varName,o.varName),o=e.shift(),o));n++);this.target.addLine(`let ${n.children.map((t=>t.varName))};`,s)}const t=n.children.map((t=>t.varName)).join(", ");this.insertBlock(`multi([${t}])`,n,e)}}compileTCall(t,e){let{block:n,forceNewBlock:o}=e;if(t.body){this.addLine("ctx = Object.create(ctx);"),this.addLine("ctx[isBoundary] = 1;"),this.helpers.add("isBoundary");const n=Ae.nextBlockId,o=Te(e,{preventRoot:!0});this.compileAST({type:3,content:t.body},o),n!==Ae.nextBlockId&&(this.helpers.add("zero"),this.addLine(`ctx[zero] = b${n};`))}const r=we.test(t.name),s=r?$e(t.name):"`"+t.name+"`";n&&(o||this.insertAnchor(n));const i=`key + \`${this.generateComponentKey()}\``;if(r){const t=this.generateId("template");this.addLine(`const ${t} = ${s};`),n=this.createBlock(n,"multi",e),this.helpers.add("call"),this.insertBlock(`call(this, ${t}, ctx, node, ${i})`,n,{...e,forceNewBlock:!n})}else{const t=this.generateId("callTemplate_");this.helpers.add("getTemplate"),this.staticCalls.push({id:t,template:s}),n=this.createBlock(n,"multi",e),this.insertBlock(`${t}.call(this, ctx, node, ${i})`,n,{...e,forceNewBlock:!n})}t.body&&!e.isLast&&this.addLine("ctx = ctx.__proto__;")}compileTCallBlock(t,e){let{block:n,forceNewBlock:o}=e;n&&(o||this.insertAnchor(n)),n=this.createBlock(n,"multi",e),this.insertBlock(xe(t.name),n,{...e,forceNewBlock:!n})}compileTSet(t,e){this.target.shouldProtectScope=!0,this.helpers.add("isBoundary").add("withDefault");const n=t.value?xe(t.value||""):"null";if(t.body){this.helpers.add("LazyValue");const o={type:3,content:t.body};let r=`new LazyValue(${this.compileInNewTarget("value",o,e)}, ctx, node)`;r=t.value?r?`withDefault(${n}, ${r})`:n:r,this.addLine(`ctx[\`${t.name}\`] = ${r};`)}else{let e;e=t.defaultValue?t.value?`withDefault(${n}, \`${t.defaultValue}\`)`:`\`${t.defaultValue}\``:n,this.helpers.add("setContextValue"),this.addLine(`setContextValue(ctx, "${t.name}", ${e});`)}}generateComponentKey(){const t=[this.generateId("__")];for(let e=0;e<this.target.loopLevel;e++)t.push(`\${key${e+1}}`);return t.join("__")}formatProp(t,e){if(e=this.captureExpression(e),t.includes(".")){let[n,o]=t.split(".");if("bind"!==o)throw new Error("Invalid prop suffix");this.helpers.add("bind"),t=n,e=`bind(ctx, ${e||void 0})`}return`${t=/^[a-z_]+$/i.test(t)?t:`'${t}'`}: ${e||void 0}`}formatPropObject(t){const e=[];for(const[n,o]of Object.entries(t))e.push(this.formatProp(n,o));return e.join(", ")}compileComponent(t,e){let{block:n}=e;const o="slots"in t.props,r=[],s=this.formatPropObject(t.props);s&&r.push(s);let i="";if(!!Object.keys(t.slots).length){let n="ctx";!this.target.loopLevel&&this.hasSafeContext||(n=this.generateId("ctx"),this.helpers.add("capture"),this.addLine(`const ${n} = capture(ctx);`));let o=[];for(let r in t.slots){const s=t.slots[r].content,i=[`__render: ${this.compileInNewTarget("slot",s,e)}, __ctx: ${n}`],l=t.slots[r].scope;l&&i.push(`__scope: "${l}"`),t.slots[r].attrs&&i.push(this.formatPropObject(t.slots[r].attrs));const a=`{${i.join(", ")}}`;o.push(`'${r}': ${a}`)}i=`{${o.join(", ")}}`}!i||t.dynamicProps||o||(this.helpers.add("markRaw"),r.push(`slots: markRaw(${i})`));const l=`{${r.join(",")}}`;let a,c=l;t.dynamicProps&&(c=`Object.assign({}, ${xe(t.dynamicProps)}${r.length?", "+l:""})`),(i&&(t.dynamicProps||o)||this.dev)&&(a=this.generateId("props"),this.addLine(`const ${a} = ${c};`),c=a),i&&(t.dynamicProps||o)&&(this.helpers.add("markRaw"),this.addLine(`${a}.slots = markRaw(Object.assign(${i}, ${a}.slots))`));const h=this.generateComponentKey();let u;t.isDynamic?(u=this.generateId("Comp"),this.addLine(`let ${u} = ${xe(t.name)};`)):u=`\`${t.name}\``,this.dev&&this.addLine(`helpers.validateProps(${u}, ${a}, ctx);`),n&&(!1===e.forceNewBlock||e.tKeyExpr)&&this.insertAnchor(n);let d=`key + \`${h}\``;e.tKeyExpr&&(d=`${e.tKeyExpr} + ${d}`);let f=`component(${`${u}, ${c}, ${d}, node, ctx`})`;t.isDynamic&&(f=`toggler(${u}, ${f})`),n=this.createBlock(n,"multi",e),this.insertBlock(f,n,e)}compileTSlot(t,e){this.helpers.add("callSlot");let n,o,{block:r}=e,s=!1;t.name.match(we)?(s=!0,o=$e(t.name)):o="'"+t.name+"'";const i=t.attrs?`{${this.formatPropObject(t.attrs)}}`:null;if(t.defaultContent){n=`callSlot(ctx, node, key, ${o}, ${s}, ${i}, ${this.compileInNewTarget("defaultContent",t.defaultContent,e)})`}else if(s){let t=this.generateId("slot");this.addLine(`const ${t} = ${o};`),n=`toggler(${t}, callSlot(ctx, node, key, ${t}), ${s}, ${i})`}else n=`callSlot(ctx, node, key, ${o}, ${s}, ${i})`;r&&this.insertAnchor(r),r=this.createBlock(r,"multi",e),this.insertBlock(n,r,{...e,forceNewBlock:!1})}compileTTranslation(t,e){t.content&&this.compileAST(t.content,Object.assign({},e,{translate:!1}))}compileTPortal(t,e){this.helpers.add("Portal");let{block:n}=e;const o=this.compileInNewTarget("slot",t.content,e),r=this.generateComponentKey();let s="ctx";!this.target.loopLevel&&this.hasSafeContext||(s=this.generateId("ctx"),this.helpers.add("capture"),this.addLine(`const ${s} = capture(ctx);`));const i=`component(Portal, {target: ${t.target},slots: {'default': {__render: ${o}, __ctx: ${s}}}}, key + \`${r}\`, node, ctx)`;n&&this.insertAnchor(n),n=this.createBlock(n,"multi",e),this.insertBlock(i,n,{...e,forceNewBlock:!1})}}const De=new WeakMap;function Oe(t){if("string"==typeof t){return Be(function(t){const e=(new DOMParser).parseFromString(t,"text/xml");if(e.getElementsByTagName("parsererror").length){let n="Invalid XML in template.";const o=e.getElementsByTagName("parsererror")[0].textContent;if(o){n+="\nThe parser has produced the following error message:\n"+o;const e=/\d+/g,r=e.exec(o);if(r){const s=Number(r[0]),i=t.split("\n")[s-1],l=e.exec(o);if(i&&l){const t=Number(l[0])-1;i[t]&&(n+=`\nThe error might be located at xml line ${s} column ${t}\n${i}\n${"-".repeat(t-1)}^`)}}}throw new Error(n)}return e}(`<t>${t}</t>`).firstChild)}let e=De.get(t);return e||(e=Be(t.cloneNode(!0)),De.set(t,e)),e}function Be(t){var e;(function(t){let e=t.querySelectorAll("[t-elif], [t-else]");for(let t=0,n=e.length;t<n;t++){let n=e[t],o=n.previousElementSibling,r=t=>o.getAttribute(t),s=t=>+!!n.getAttribute(t);if(!o||!r("t-if")&&!r("t-elif"))throw new Error("t-elif and t-else directives must be preceded by a t-if or t-elif directive");{if(r("t-foreach"))throw new Error("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(s).reduce((function(t,e){return t+e}))>1)throw new Error("Only one conditional branching directive is allowed per node");let t;for(;(t=n.previousSibling)!==o;){if(t.nodeValue.trim().length&&8!==t.nodeType)throw new Error("text is not allowed between branching directives");t.remove()}}}})(e=t),function(t){const e=[...t.querySelectorAll("[t-esc]")].filter((t=>t.tagName[0]===t.tagName[0].toUpperCase()||t.hasAttribute("t-component")));for(const t of e){if(t.childNodes.length)throw new Error("Cannot have t-esc on a component that already has content");const e=t.getAttribute("t-esc");t.removeAttribute("t-esc");const n=t.ownerDocument.createElement("t");null!=e&&n.setAttribute("t-esc",e),t.appendChild(n)}}(e);return Re(t,{inPreTag:!1,inSVG:!1})||{type:0,value:""}}function Re(t,e){return t instanceof Element?function(t,e){if(t.hasAttribute("t-debug"))return t.removeAttribute("t-debug"),{type:12,content:Re(t,e)};if(t.hasAttribute("t-log")){const n=t.getAttribute("t-log");return t.removeAttribute("t-log"),{type:13,expr:n,content:Re(t,e)}}return null}(t,e)||function(t,e){if(!t.hasAttribute("t-foreach"))return null;const n=t.outerHTML,o=t.getAttribute("t-foreach");t.removeAttribute("t-foreach");const r=t.getAttribute("t-as")||"";t.removeAttribute("t-as");const s=t.getAttribute("t-key");if(!s)throw new Error(`"Directive t-foreach should always be used with a t-key!" (expression: t-foreach="${o}" t-as="${r}")`);t.removeAttribute("t-key");const i=t.getAttribute("t-memo")||"";t.removeAttribute("t-memo");const l=Re(t,e);if(!l)return null;const a=!n.includes("t-call"),c=a&&!n.includes(r+"_first"),h=a&&!n.includes(r+"_last"),u=a&&!n.includes(r+"_index"),d=a&&!n.includes(r+"_value");return{type:9,collection:o,elem:r,body:l,memo:i,key:s,hasNoFirst:c,hasNoLast:h,hasNoIndex:u,hasNoValue:d}}(t,e)||function(t,e){if(!t.hasAttribute("t-if"))return null;const n=t.getAttribute("t-if");t.removeAttribute("t-if");const o=Re(t,e)||{type:0,value:""};let r=t.nextElementSibling;const s=[];for(;r&&r.hasAttribute("t-elif");){const t=r.getAttribute("t-elif");r.removeAttribute("t-elif");const n=Re(r,e),o=r.nextElementSibling;r.remove(),r=o,n&&s.push({condition:t,content:n})}let i=null;r&&r.hasAttribute("t-else")&&(r.removeAttribute("t-else"),i=Re(r,e),r.remove());return{type:5,condition:n,content:o,tElif:s.length?s:null,tElse:i}}(t,e)||function(t,e){if(!t.hasAttribute("t-portal"))return null;const n=t.getAttribute("t-portal");t.removeAttribute("t-portal");const o=Re(t,e);if(!o)return{type:0,value:""};return{type:17,target:n,content:o}}(t,e)||function(t,e){if(!t.hasAttribute("t-call"))return null;const n=t.getAttribute("t-call");if(t.removeAttribute("t-call"),"t"!==t.tagName){const o=Re(t,e),r={type:7,name:n,body:null};if(o&&2===o.type)return o.content=[r],o;if(o&&11===o.type)return{...o,slots:{default:{content:r}}}}const o=Ve(t,e);return{type:7,name:n,body:o.length?o:null}}(t,e)||function(t,e){if(!t.hasAttribute("t-call-block"))return null;return{type:15,name:t.getAttribute("t-call-block")}}(t)||function(t,e){if(!t.hasAttribute("t-esc"))return null;const n=t.getAttribute("t-esc");t.removeAttribute("t-esc");const o={type:4,expr:n,defaultValue:t.textContent||""};let r=t.getAttribute("t-ref");t.removeAttribute("t-ref");const s=Re(t,e);if(!s)return o;if(2===s.type)return{...s,ref:r,content:[o]};if(11===s.type)throw new Error("t-esc is not supported on Component nodes");return o}(t,e)||function(t,e){if(!t.hasAttribute("t-key"))return null;const n=t.getAttribute("t-key");t.removeAttribute("t-key");const o=Re(t,e);if(!o)return null;return{type:10,expr:n,content:o}}(t,e)||function(t,e){if("off"!==t.getAttribute("t-translation"))return null;return t.removeAttribute("t-translation"),{type:16,content:Re(t,e)}}(t,e)||function(t,e){if(!t.hasAttribute("t-slot"))return null;const n=t.getAttribute("t-slot");t.removeAttribute("t-slot");const o={};for(let e of t.getAttributeNames()){const n=t.getAttribute(e);o[e]=n}return{type:14,name:n,attrs:o,defaultContent:ze(t,e)}}(t,e)||function(t,e){if(!t.hasAttribute("t-out")&&!t.hasAttribute("t-raw"))return null;t.hasAttribute("t-raw")&&console.warn('t-raw 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-raw");t.removeAttribute("t-out"),t.removeAttribute("t-raw");const o={type:8,expr:n,body:null},r=t.getAttribute("t-ref");t.removeAttribute("t-ref");const s=Re(t,e);if(!s)return o;if(2===s.type)return o.body=s.content.length?s.content:null,{...s,ref:r,content:[o]};return o}(t,e)||function(t,e){let n=t.tagName;const o=n[0];let r=t.hasAttribute("t-component");if(r&&"t"!==n)throw new Error(`Directive 't-component' can only be used on <t> nodes (used on a <${n}>)`);if(o!==o.toUpperCase()&&!r)return null;r&&(n=t.getAttribute("t-component"),t.removeAttribute("t-component"));const s=t.getAttribute("t-props");t.removeAttribute("t-props");const i=t.getAttribute("t-slot-scope");t.removeAttribute("t-slot-scope");const l={};for(let e of t.getAttributeNames()){const n=t.getAttribute(e);if(e.startsWith("t-")){const t=Fe.get(e.split("-").slice(0,2).join("-"));throw new Error(t||"unsupported directive on Component: "+e)}l[e]=n}const a={};if(t.hasChildNodes()){const n=t.cloneNode(!0),o=Array.from(n.querySelectorAll("[t-set-slot]"));for(let t of o){if("t"!==t.tagName)throw new Error(`Directive 't-set-slot' can only be used on <t> nodes (used on a <${t.tagName}>)`);const o=t.getAttribute("t-set-slot");let r=t.parentElement,s=!1;for(;r!==n;){if(r.hasAttribute("t-component")||r.tagName[0]===r.tagName[0].toUpperCase()){s=!0;break}r=r.parentElement}if(s)continue;t.removeAttribute("t-set-slot"),t.remove();const i=Re(t,e);if(i){const e={content:i},n={};for(let o of t.getAttributeNames()){const r=t.getAttribute(o);"t-slot-scope"!==o?n[o]=r:e.scope=r}Object.keys(n).length&&(e.attrs=n),a[o]=e}}const r=ze(n,e);r&&(a.default={content:r},i&&(a.default.scope=i))}return{type:11,name:n,isDynamic:r,dynamicProps:s,props:l,slots:a}}(t,e)||function(t,e){const{tagName:n}=t,o=t.getAttribute("t-tag");if(t.removeAttribute("t-tag"),"t"===n&&!o)return null;if(n.startsWith("block-"))throw new Error(`Invalid tag name: '${n}'`);e=Object.assign({},e),"pre"===n&&(e.inPreTag=!0);const r=We.has(n)&&!e.inSVG;e.inSVG=e.inSVG||r;const s=r?"http://www.w3.org/2000/svg":null,i=t.getAttribute("t-ref");t.removeAttribute("t-ref");const l=t.getAttributeNames(),a={},c={};let h=null;for(let o of l){const r=t.getAttribute(o);if(o.startsWith("t-on")){if("t-on"===o)throw new Error("Missing event name with t-on directive");c[o.slice(5)]=r}else if(o.startsWith("t-model")){if(!["input","select","textarea"].includes(n))throw new Error("The t-model directive only works with <input>, <textarea> and <select>");let s,i;if(je.test(r)){const t=r.lastIndexOf(".");s=r.slice(0,t),i=`'${r.slice(t+1)}'`}else{if(!Me.test(r))throw new Error(`Invalid t-model expression: "${r}" (it should be assignable)`);{const t=r.lastIndexOf("[");s=r.slice(0,t),i=r.slice(t+1,-1)}}const l=t.getAttribute("type"),a="input"===n,c="select"===n,u="textarea"===n,d=a&&"checkbox"===l,f=a&&"radio"===l,p=a&&!d&&!f,m=o.includes(".lazy"),g=o.includes(".number");h={baseExpr:s,expr:i,targetAttr:d?"checked":"value",specialInitTargetAttr:f?"checked":null,eventType:f?"click":c||m?"change":"input",shouldTrim:o.includes(".trim")&&(p||u),shouldNumberize:g&&(p||u)},c&&((e=Object.assign({},e)).tModelInfo=h)}else{if(o.startsWith("block-"))throw new Error(`Invalid attribute: '${o}'`);if("t-name"!==o){if(o.startsWith("t-")&&!o.startsWith("t-att"))throw new Error(`Unknown QWeb directive: '${o}'`);const t=e.tModelInfo;t&&["t-att-value","t-attf-value"].includes(o)&&(t.hasDynamicChildren=!0),a[o]=r}}}const u=Ve(t,e);return{type:2,tag:n,dynamicTag:o,attrs:a,on:c,ref:i,content:u,model:h,ns:s}}(t,e)||function(t,e){if(!t.hasAttribute("t-set"))return null;const n=t.getAttribute("t-set"),o=t.getAttribute("t-value")||null,r=t.innerHTML===t.textContent&&t.textContent||null;let s=null;t.textContent!==t.innerHTML&&(s=Ve(t,e));return{type:6,name:n,value:o,defaultValue:r,body:s}}(t,e)||function(t,e){if("t"!==t.tagName)return null;return ze(t,e)}(t,e):function(t,e){if(t.nodeType===Node.TEXT_NODE){let n=t.textContent||"";if(!e.inPreTag){if(Ie.test(n)&&!n.trim())return null;n=n.replace(Pe," ")}return{type:0,value:n}}if(t.nodeType===Node.COMMENT_NODE)return{type:1,value:t.textContent||""};return null}(t,e)}const Ie=/[\r\n]/,Pe=/\s+/g;const je=/\.[\w_]+\s*$/,Me=/\[[^\[]+\]\s*$/,We=new Set(["svg","g","path"]);const Fe=new Map([["t-on","t-on is no longer supported on components. Consider passing a callback in props."],["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 Ve(t,e){const n=[];for(let o of t.childNodes){const t=Re(o,e);t&&(3===t.type?n.push(...t.content):n.push(t))}return n}function ze(t,e){const n=Ve(t,e);switch(n.length){case 0:return null;case 1:return n[0];default:return{type:3,content:n}}}function Ke(t,e){const n=new Error(`The following error occurred in ${e}: `);return(...e)=>{try{const o=t(...e);return o instanceof Promise?o.catch((t=>{throw n.cause=t,t instanceof Error&&(n.message+=`"${t.message}"`),n})):o}catch(t){throw t instanceof Error&&(n.message+=`"${t.message}"`),n}}}function He(t){const e=le(),n=e.app.dev?Ke:t=>t;e.mounted.push(n(t.bind(e.component),"onMounted"))}function Ue(t){const e=le(),n=e.app.dev?Ke:t=>t;e.patched.push(n(t.bind(e.component),"onPatched"))}function qe(t){const e=le(),n=e.app.dev?Ke:t=>t;e.willUnmount.unshift(n(t.bind(e.component),"onWillUnmount"))}class Ge{constructor(t,e,n){this.props=t,this.env=e,this.__owl__=n}setup(){}render(t=!1){this.__owl__.render(t)}}Ge.template="";const Xe=V("").constructor;class Ye extends Xe{constructor(t,e){super(""),this.target=null,this.selector=t,this.realBDom=e}mount(t,e){if(super.mount(t,e),this.target=document.querySelector(this.selector),!this.target){let t=this.el;for(;t&&t.parentElement instanceof HTMLElement;)t=t.parentElement;if(this.target=t&&t.querySelector(this.selector),!this.target)throw new Error("invalid portal target")}this.realBDom.mount(this.target,null)}beforeRemove(){this.realBDom.beforeRemove()}remove(){this.realBDom&&(super.remove(),this.realBDom.remove(),this.realBDom=null)}patch(t){super.patch(t),this.realBDom?this.realBDom.patch(t.realBDom,!0):(this.realBDom=t.realBDom,this.realBDom.mount(this.target,null))}}class Ze extends Ge{setup(){const t=this.__owl__,e=t.renderFn;t.renderFn=()=>new Ye(this.props.target,e()),qe((()=>{t.bdom&&t.bdom.remove()}))}}function Qe(t){const e=t.__owl__.component,n=Object.create(e);for(let e in t)n[e]=t[e];return n}Ze.template=Xt`<t t-slot="default"/>`,Ze.props={target:{type:String},slots:!0};const Je=Symbol("isBoundary");class tn{constructor(t,e,n){this.fn=t,this.ctx=Qe(e),this.node=n}evaluate(){return this.fn(this.ctx,this.node)}toString(){return this.evaluate().toString()}}let en=new WeakMap;const nn={withDefault:function(t,e){return null==t||!1===t?e:t},zero:Symbol("zero"),isBoundary:Je,callSlot:function(t,e,n,r,s,i,l){n=n+"__slot_"+r;const a=t.props[wt].slots||{},{__render:c,__ctx:h,__scope:u}=a[r]||{},d=Object.create(h||{});u&&(d[u]=i||{});const f=c?c.call(h.__owl__.component,d,e,n):null;if(l){let i=void 0,a=void 0;return f?i=s?o(r,f):f:a=l.call(t.__owl__.component,t,e,n),O([i,a])}return f||V("")},capture:Qe,withKey:function(t,e){return t.key=e,t},prepareList:function(t){let e,n;if(Array.isArray(t))e=t,n=t;else{if(!t)throw new Error("Invalid loop expression");n=Object.keys(t),e=Object.values(t)}const o=n.length;return[e,n,o,new Array(o)]},setContextValue:function(t,e,n){const o=t;for(;!t.hasOwnProperty(e)&&!t.hasOwnProperty(Je);){const e=t.__proto__;if(!e){t=o;break}t=e}t[e]=n},multiRefSetter:function(t,e){let n=0;return o=>{if(o&&(n++,n>1))throw new Error("Cannot have 2 elements with same ref name at the same time");(0===n||o)&&(t[e]=o)}},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},validateProps:function(t,e,n){const o="string"!=typeof t?t:n.constructor.components[t];if(!o)return;re(e,o);const r=o.defaultProps||{};let s=(i=o.props)instanceof Array?Object.fromEntries(i.map((t=>t.endsWith("?")?[t.slice(0,-1),!1]:[t,!0]))):i||{"*":!0};var i;const l="*"in s;for(let t in s){if("*"===t)continue;const n=s[t];let i,l=!!n;if("object"==typeof n&&"optional"in n&&(l=!n.optional),l&&t in r)throw new Error(`A default value cannot be defined for a mandatory prop (name: '${t}', component: ${o.name})`);if(void 0!==e[t]){try{i=se(e[t],n)}catch(e){throw e.message=`Invalid prop '${t}' in component ${o.name} (${e.message})`,e}if(!i)throw new Error(`Invalid Prop '${t}' in component '${o.name}'`)}else if(l)throw new Error(`Missing props '${t}' (component '${o.name}')`)}if(!l)for(let t in e)if(!(t in s))throw new Error(`Unknown prop '${t}' given to component '${o.name}'`)},LazyValue:tn,safeOutput:function(t){if(!t)return t;let e,n;return t instanceof qt?(e="string_safe",n=yt(t)):t instanceof tn?(e="lazy_value",n=t.evaluate()):t instanceof String||"string"==typeof t?(e="string_unsafe",n=V(t)):(e="block_safe",n=t),o(e,n)},bind:function(t,e){let n=t.__owl__.component,o=en.get(n);o||(o=new WeakMap,en.set(n,o));let r=o.get(e);return r||(r=e.bind(n),o.set(e,r)),r}},on={text:V,createBlock:J,list:ft,multi:O,html:yt,toggler:o,component:function(t,e,n,o,r){let s=o.children[n],i="string"!=typeof t;s&&(s.status<1?(s.destroy(),s=void 0):2===s.status&&(s=void 0)),i&&s&&s.component.constructor!==t&&(s=void 0);const l=o.fiber;if(s){let t=s.forceNextRender;if(t)s.forceNextRender=!1;else{const n=s.component.props[wt];t=l.deep||function(t,e){for(let n in t)if(t[n]!==e[n])return!0;return Object.keys(t).length!==Object.keys(e).length}(n,e)}t&&s.updateAndRender(e,l)}else{let a;if(i)a=t;else if(a=r.constructor.components[t],!a)throw new Error(`Cannot find the definition of component "${t}"`);s=new he(a,e,o.app,o),o.children[n]=s,s.initiateRender(new ee(s,l))}return s},comment:z};let rn=!1;class sn extends class{constructor(t={}){var e;this.rawTemplates=Object.create(Gt),this.templates={},this.dev=t.dev||!1,this.translateFn=t.translateFn,this.translatableAttributes=t.translatableAttributes,t.templates&&this.addTemplates(t.templates),this.helpers=(e=this.getTemplate.bind(this),Object.assign({},nn,{Portal:Ze,markRaw:Ct,getTemplate:e,call:(t,n,r,s,i)=>o(n,e(n).call(t,r,s,i))}))}addTemplate(t,e,n={}){if(t in this.rawTemplates&&!n.allowDuplicate)throw new Error(`Template ${t} already defined`);this.rawTemplates[t]=e}addTemplates(t,e={}){if(t){t=t instanceof Document?t:function(t){const e=(new DOMParser).parseFromString(t,"text/xml");if(e.getElementsByTagName("parsererror").length){let n="Invalid XML in template.";const o=e.getElementsByTagName("parsererror")[0].textContent;if(o){n+="\nThe parser has produced the following error message:\n"+o;const e=/\d+/g,r=e.exec(o);if(r){const s=Number(r[0]),i=t.split("\n")[s-1],l=e.exec(o);if(i&&l){const t=Number(l[0])-1;i[t]&&(n+=`\nThe error might be located at xml line ${s} column ${t}\n${i}\n${"-".repeat(t-1)}^`)}}}throw new Error(n)}return e}(t);for(const n of t.querySelectorAll("[t-name]")){const t=n.getAttribute("t-name");this.addTemplate(t,n,e)}}}getTemplate(t){if(!(t in this.templates)){const e=this.rawTemplates[t];if(void 0===e){let e="";try{e=` (for component "${le().component.constructor.name}")`}catch{}throw new Error(`Missing template: "${t}"${e}`)}const n=this._compileTemplate(t,e),o=this.templates;this.templates[t]=function(e,n){return o[t].call(this,e,n)};const r=n(on,this.helpers);this.templates[t]=r}return this.templates[t]}_compileTemplate(t,e){return function(t,e={}){const n=Oe(t),o=t instanceof Node?!(t instanceof Element)||null===t.querySelector("[t-set], [t-call]"):!t.includes("t-set")&&!t.includes("t-call"),r=new Ce(n,{...e,hasSafeContext:o}).generateCode();return new Function("bdom, helpers",r)}(e,{name:t,dev:this.dev,translateFn:this.translateFn,translatableAttributes:this.translatableAttributes})}}{constructor(t,e={}){super(e),this.scheduler=new ue,this.root=null,this.Root=t,e.test&&(this.dev=!0),!this.dev||e.test||rn||(console.info(`Owl is running in 'dev' mode.\n\nThis is not suitable for production use.\nSee https://github.com/odoo/owl/blob/${window.owl?window.owl.__info__.hash:"master"}/doc/reference/app.md#configuration for more information.`),rn=!0);const n=e.env||{},o=Object.getOwnPropertyDescriptors(n);this.env=Object.freeze(Object.create(Object.getPrototypeOf(n),o)),this.props=e.props||{}}mount(t,e){sn.validateTarget(t);const n=this.makeNode(this.Root,this.props),o=this.mountNode(n,t,e);return this.root=n,o}makeNode(t,e){return new he(t,e,this)}mountNode(t,e,n){const o=new Promise(((e,n)=>{let o=!1;t.mounted.push((()=>{e(t.component),o=!0}));let r=Zt.get(t);r||(r=[],Zt.set(t,r)),r.unshift((t=>{throw o?console.error(t):n(t),t}))}));return t.mountComponent(e,n),o}destroy(){this.root&&this.root.destroy()}}function ln(t,e){const n=Object.create(t),o=Object.getOwnPropertyDescriptors(e);return Object.freeze(Object.defineProperties(n,o))}function an(t){const e=le();e.childEnv=ln(e.childEnv,t)}sn.validateTarget=function(t){if(!(t instanceof HTMLElement))throw new Error("Cannot mount component: the target is not a valid DOM element");if(!document.body.contains(t))throw new Error("Cannot mount a component on a detached dom node")};const cn=()=>{};e.shouldNormalizeDom=!1,e.mainEventHandler=(e,n,o)=>{const{data:r,modifiers:s}=t(e);e=r;let i=!1;if(s.length){let t=!1;const e=n.target===o;for(const o of s)switch(o){case"self":if(t=!0,e)continue;return i;case"prevent":(t&&e||!t)&&n.preventDefault();continue;case"stop":(t&&e||!t)&&n.stopPropagation(),i=!0;continue}}if(Object.hasOwnProperty.call(e,0)){const t=e[0];if("function"!=typeof t)throw new Error(`Invalid handler (expected a function, received: '${t}')`);let o=e[1]?e[1].__owl__:null;o&&1!==o.status||t.call(o?o.component:null,n)}return i};const hn={config:e,mount:xt,patch:function(t,e,n=!1){t.patch(e,n)},remove:function(t,e=!1){e&&t.beforeRemove(),t.remove()},list:ft,multi:O,text:V,toggler:o,createBlock:J,html:yt,comment:z},un={};exports.App=sn,exports.Component=Ge,exports.EventBus=Ut,exports.__info__=un,exports.blockDom=hn,exports.loadFile=async function(t){const e=await fetch(t);if(!e.ok)throw new Error("Error while fetching xml templates");return await e.text()},exports.markRaw=Ct,exports.markup=function(t){return new qt(t)},exports.mount=async function(t,e,n={}){return new sn(t,n).mount(e,n)},exports.onError=function(t){const e=le();let n=Zt.get(e);n||(n=[],Zt.set(e,n)),n.push(t.bind(e.component))},exports.onMounted=He,exports.onPatched=Ue,exports.onRendered=function(t){const e=le(),n=e.renderFn,o=e.app.dev?Ke:t=>t;e.renderFn=o((()=>{const o=n();return t.call(e.component),o}),"onRendered")},exports.onWillDestroy=function(t){const e=le(),n=e.app.dev?Ke:t=>t;e.willDestroy.push(n(t.bind(e.component),"onWillDestroy"))},exports.onWillPatch=function(t){const e=le(),n=e.app.dev?Ke:t=>t;e.willPatch.unshift(n(t.bind(e.component),"onWillPatch"))},exports.onWillRender=function(t){const e=le(),n=e.renderFn,o=e.app.dev?Ke:t=>t;e.renderFn=o((()=>(t.call(e.component),n())),"onWillRender")},exports.onWillStart=function(t){const e=le(),n=e.app.dev?Ke:t=>t;e.willStart.push(n(t.bind(e.component),"onWillStart"))},exports.onWillUnmount=qe,exports.onWillUpdateProps=function(t){const e=le(),n=e.app.dev?Ke:t=>t;e.willUpdateProps.push(n(t.bind(e.component),"onWillUpdateProps"))},exports.reactive=Mt,exports.status=function(t){switch(t.__owl__.status){case 0:return"new";case 1:return"mounted";case 2:return"destroyed"}},exports.toRaw=Dt,exports.useChildSubEnv=an,exports.useComponent=function(){return ie.component},exports.useEffect=function(t,e=(()=>[NaN])){let n,o;He((()=>{o=e(),n=t(...o)||cn})),Ue((()=>{const r=e();r.some(((t,e)=>t!==o[e]))&&(o=r,n(),n=t(...o)||cn)})),qe((()=>n()))},exports.useEnv=function(){return le().component.env},exports.useExternalListener=function(t,e,n,o){const r=le(),s=n.bind(r.component);He((()=>t.addEventListener(e,s,o))),qe((()=>t.removeEventListener(e,s,o)))},exports.useRef=function(t){const e=le().refs;return{get el(){return e[t]||null}}},exports.useState=ce,exports.useSubEnv=function(t){const e=le();e.component.env=ln(e.component.env,t),an(t)},exports.whenReady=function(t){return new Promise((function(t){"loading"!==document.readyState?t(!0):document.addEventListener("DOMContentLoaded",t,!1)})).then(t||function(){})},exports.xml=Xt,un.version="2.0.0-beta.2",un.date="2022-03-03T15:22:11.176Z",un.hash="e4fdd32",un.url="https://github.com/odoo/owl";
|
package/dist/owl.es.js
CHANGED
|
@@ -1469,6 +1469,16 @@ function clearReactivesForCallback(callback) {
|
|
|
1469
1469
|
}
|
|
1470
1470
|
targetsToClear.clear();
|
|
1471
1471
|
}
|
|
1472
|
+
function getSubscriptions(callback) {
|
|
1473
|
+
const targets = callbacksToTargets.get(callback) || [];
|
|
1474
|
+
return [...targets].map((target) => {
|
|
1475
|
+
const keysToCallbacks = targetToKeysToCallbacks.get(target);
|
|
1476
|
+
return {
|
|
1477
|
+
target,
|
|
1478
|
+
keys: keysToCallbacks ? [...keysToCallbacks.keys()] : [],
|
|
1479
|
+
};
|
|
1480
|
+
});
|
|
1481
|
+
}
|
|
1472
1482
|
const reactiveCache = new WeakMap();
|
|
1473
1483
|
/**
|
|
1474
1484
|
* Creates a reactive proxy for an object. Reading data on the reactive object
|
|
@@ -1892,7 +1902,16 @@ function cancelFibers(fibers) {
|
|
|
1892
1902
|
let result = 0;
|
|
1893
1903
|
for (let fiber of fibers) {
|
|
1894
1904
|
fiber.node.fiber = null;
|
|
1895
|
-
if (
|
|
1905
|
+
if (fiber.bdom) {
|
|
1906
|
+
// if fiber has been rendered, this means that the component props have
|
|
1907
|
+
// been updated. however, this fiber will not be patched to the dom, so
|
|
1908
|
+
// it could happen that the next render compare the current props with
|
|
1909
|
+
// the same props, and skip the render completely. With the next line,
|
|
1910
|
+
// we kindly request the component code to force a render, so it works as
|
|
1911
|
+
// expected.
|
|
1912
|
+
fiber.node.forceNextRender = true;
|
|
1913
|
+
}
|
|
1914
|
+
else {
|
|
1896
1915
|
result++;
|
|
1897
1916
|
}
|
|
1898
1917
|
result += cancelFibers(fiber.children);
|
|
@@ -2199,6 +2218,13 @@ function useState(state) {
|
|
|
2199
2218
|
batchedRenderFunctions.set(node, render);
|
|
2200
2219
|
// manual implementation of onWillDestroy to break cyclic dependency
|
|
2201
2220
|
node.willDestroy.push(clearReactivesForCallback.bind(null, render));
|
|
2221
|
+
if (node.app.dev) {
|
|
2222
|
+
Object.defineProperty(node, "subscriptions", {
|
|
2223
|
+
get() {
|
|
2224
|
+
return getSubscriptions(render);
|
|
2225
|
+
},
|
|
2226
|
+
});
|
|
2227
|
+
}
|
|
2202
2228
|
}
|
|
2203
2229
|
return reactive(state, render);
|
|
2204
2230
|
}
|
|
@@ -2227,8 +2253,15 @@ function component(name, props, key, ctx, parent) {
|
|
|
2227
2253
|
}
|
|
2228
2254
|
const parentFiber = ctx.fiber;
|
|
2229
2255
|
if (node) {
|
|
2230
|
-
|
|
2231
|
-
if (
|
|
2256
|
+
let shouldRender = node.forceNextRender;
|
|
2257
|
+
if (shouldRender) {
|
|
2258
|
+
node.forceNextRender = false;
|
|
2259
|
+
}
|
|
2260
|
+
else {
|
|
2261
|
+
const currentProps = node.component.props[TARGET];
|
|
2262
|
+
shouldRender = parentFiber.deep || arePropsDifferent(currentProps, props);
|
|
2263
|
+
}
|
|
2264
|
+
if (shouldRender) {
|
|
2232
2265
|
node.updateAndRender(props, parentFiber);
|
|
2233
2266
|
}
|
|
2234
2267
|
}
|
|
@@ -2255,6 +2288,7 @@ class ComponentNode {
|
|
|
2255
2288
|
this.fiber = null;
|
|
2256
2289
|
this.bdom = null;
|
|
2257
2290
|
this.status = 0 /* NEW */;
|
|
2291
|
+
this.forceNextRender = false;
|
|
2258
2292
|
this.children = Object.create(null);
|
|
2259
2293
|
this.refs = {};
|
|
2260
2294
|
this.willStart = [];
|
|
@@ -5110,6 +5144,7 @@ class TemplateSet {
|
|
|
5110
5144
|
}
|
|
5111
5145
|
}
|
|
5112
5146
|
|
|
5147
|
+
let hasBeenLogged = false;
|
|
5113
5148
|
const DEV_MSG = () => {
|
|
5114
5149
|
const hash = window.owl ? window.owl.__info__.hash : "master";
|
|
5115
5150
|
return `Owl is running in 'dev' mode.
|
|
@@ -5126,11 +5161,13 @@ class App extends TemplateSet {
|
|
|
5126
5161
|
if (config.test) {
|
|
5127
5162
|
this.dev = true;
|
|
5128
5163
|
}
|
|
5129
|
-
if (this.dev && !config.test) {
|
|
5164
|
+
if (this.dev && !config.test && !hasBeenLogged) {
|
|
5130
5165
|
console.info(DEV_MSG());
|
|
5166
|
+
hasBeenLogged = true;
|
|
5131
5167
|
}
|
|
5132
|
-
const
|
|
5133
|
-
|
|
5168
|
+
const env = config.env || {};
|
|
5169
|
+
const descrs = Object.getOwnPropertyDescriptors(env);
|
|
5170
|
+
this.env = Object.freeze(Object.create(Object.getPrototypeOf(env), descrs));
|
|
5134
5171
|
this.props = config.props || {};
|
|
5135
5172
|
}
|
|
5136
5173
|
mount(target, options) {
|
|
@@ -5317,7 +5354,7 @@ const __info__ = {};
|
|
|
5317
5354
|
export { App, Component, EventBus, __info__, blockDom, loadFile, markRaw, markup, mount, onError, onMounted, onPatched, onRendered, onWillDestroy, onWillPatch, onWillRender, onWillStart, onWillUnmount, onWillUpdateProps, reactive, status, toRaw, useChildSubEnv, useComponent, useEffect, useEnv, useExternalListener, useRef, useState, useSubEnv, whenReady, xml };
|
|
5318
5355
|
|
|
5319
5356
|
|
|
5320
|
-
__info__.version = '2.0.0-beta.
|
|
5321
|
-
__info__.date = '2022-03-
|
|
5322
|
-
__info__.hash = '
|
|
5357
|
+
__info__.version = '2.0.0-beta.2';
|
|
5358
|
+
__info__.date = '2022-03-03T15:22:11.176Z';
|
|
5359
|
+
__info__.hash = 'e4fdd32';
|
|
5323
5360
|
__info__.url = 'https://github.com/odoo/owl';
|