@odoo/owl 2.0.0-beta-11 → 2.0.0-beta-12

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 CHANGED
@@ -3678,8 +3678,8 @@ class CodeGenerator {
3678
3678
  define(varName, expr) {
3679
3679
  this.addLine(`const ${varName} = ${expr};`);
3680
3680
  }
3681
- insertAnchor(block) {
3682
- const tag = `block-child-${block.children.length}`;
3681
+ insertAnchor(block, index = block.children.length) {
3682
+ const tag = `block-child-${index}`;
3683
3683
  const anchor = xmlDoc.createElement(tag);
3684
3684
  block.insert(anchor);
3685
3685
  }
@@ -4090,9 +4090,18 @@ class CodeGenerator {
4090
4090
  }
4091
4091
  this.insertBlock(blockStr, block, ctx);
4092
4092
  }
4093
+ compileTIfBranch(content, block, ctx) {
4094
+ this.target.indentLevel++;
4095
+ let childN = block.children.length;
4096
+ this.compileAST(content, createContext(ctx, { block, index: ctx.index }));
4097
+ if (block.children.length > childN) {
4098
+ // we have some content => need to insert an anchor at correct index
4099
+ this.insertAnchor(block, childN);
4100
+ }
4101
+ this.target.indentLevel--;
4102
+ }
4093
4103
  compileTIf(ast, ctx, nextNode) {
4094
- let { block, forceNewBlock, index } = ctx;
4095
- let currentIndex = index;
4104
+ let { block, forceNewBlock } = ctx;
4096
4105
  const codeIdx = this.target.code.length;
4097
4106
  const isNewBlock = !block || (block.type !== "multi" && forceNewBlock);
4098
4107
  if (block) {
@@ -4102,28 +4111,16 @@ class CodeGenerator {
4102
4111
  block = this.createBlock(block, "multi", ctx);
4103
4112
  }
4104
4113
  this.addLine(`if (${compileExpr(ast.condition)}) {`);
4105
- this.target.indentLevel++;
4106
- this.insertAnchor(block);
4107
- const subCtx = createContext(ctx, { block, index: currentIndex });
4108
- this.compileAST(ast.content, subCtx);
4109
- this.target.indentLevel--;
4114
+ this.compileTIfBranch(ast.content, block, ctx);
4110
4115
  if (ast.tElif) {
4111
4116
  for (let clause of ast.tElif) {
4112
4117
  this.addLine(`} else if (${compileExpr(clause.condition)}) {`);
4113
- this.target.indentLevel++;
4114
- this.insertAnchor(block);
4115
- const subCtx = createContext(ctx, { block, index: currentIndex });
4116
- this.compileAST(clause.content, subCtx);
4117
- this.target.indentLevel--;
4118
+ this.compileTIfBranch(clause.content, block, ctx);
4118
4119
  }
4119
4120
  }
4120
4121
  if (ast.tElse) {
4121
4122
  this.addLine(`} else {`);
4122
- this.target.indentLevel++;
4123
- this.insertAnchor(block);
4124
- const subCtx = createContext(ctx, { block, index: currentIndex });
4125
- this.compileAST(ast.tElse, subCtx);
4126
- this.target.indentLevel--;
4123
+ this.compileTIfBranch(ast.tElse, block, ctx);
4127
4124
  }
4128
4125
  this.addLine("}");
4129
4126
  if (isNewBlock) {
@@ -5757,7 +5754,7 @@ exports.whenReady = whenReady;
5757
5754
  exports.xml = xml;
5758
5755
 
5759
5756
 
5760
- __info__.version = '2.0.0-beta-11';
5761
- __info__.date = '2022-06-28T13:28:26.775Z';
5762
- __info__.hash = '76c389a';
5757
+ __info__.version = '2.0.0-beta-12';
5758
+ __info__.date = '2022-06-29T09:13:12.680Z';
5759
+ __info__.hash = '6c72e0a';
5763
5760
  __info__.url = 'https://github.com/odoo/owl';
package/dist/owl.es.js CHANGED
@@ -3674,8 +3674,8 @@ class CodeGenerator {
3674
3674
  define(varName, expr) {
3675
3675
  this.addLine(`const ${varName} = ${expr};`);
3676
3676
  }
3677
- insertAnchor(block) {
3678
- const tag = `block-child-${block.children.length}`;
3677
+ insertAnchor(block, index = block.children.length) {
3678
+ const tag = `block-child-${index}`;
3679
3679
  const anchor = xmlDoc.createElement(tag);
3680
3680
  block.insert(anchor);
3681
3681
  }
@@ -4086,9 +4086,18 @@ class CodeGenerator {
4086
4086
  }
4087
4087
  this.insertBlock(blockStr, block, ctx);
4088
4088
  }
4089
+ compileTIfBranch(content, block, ctx) {
4090
+ this.target.indentLevel++;
4091
+ let childN = block.children.length;
4092
+ this.compileAST(content, createContext(ctx, { block, index: ctx.index }));
4093
+ if (block.children.length > childN) {
4094
+ // we have some content => need to insert an anchor at correct index
4095
+ this.insertAnchor(block, childN);
4096
+ }
4097
+ this.target.indentLevel--;
4098
+ }
4089
4099
  compileTIf(ast, ctx, nextNode) {
4090
- let { block, forceNewBlock, index } = ctx;
4091
- let currentIndex = index;
4100
+ let { block, forceNewBlock } = ctx;
4092
4101
  const codeIdx = this.target.code.length;
4093
4102
  const isNewBlock = !block || (block.type !== "multi" && forceNewBlock);
4094
4103
  if (block) {
@@ -4098,28 +4107,16 @@ class CodeGenerator {
4098
4107
  block = this.createBlock(block, "multi", ctx);
4099
4108
  }
4100
4109
  this.addLine(`if (${compileExpr(ast.condition)}) {`);
4101
- this.target.indentLevel++;
4102
- this.insertAnchor(block);
4103
- const subCtx = createContext(ctx, { block, index: currentIndex });
4104
- this.compileAST(ast.content, subCtx);
4105
- this.target.indentLevel--;
4110
+ this.compileTIfBranch(ast.content, block, ctx);
4106
4111
  if (ast.tElif) {
4107
4112
  for (let clause of ast.tElif) {
4108
4113
  this.addLine(`} else if (${compileExpr(clause.condition)}) {`);
4109
- this.target.indentLevel++;
4110
- this.insertAnchor(block);
4111
- const subCtx = createContext(ctx, { block, index: currentIndex });
4112
- this.compileAST(clause.content, subCtx);
4113
- this.target.indentLevel--;
4114
+ this.compileTIfBranch(clause.content, block, ctx);
4114
4115
  }
4115
4116
  }
4116
4117
  if (ast.tElse) {
4117
4118
  this.addLine(`} else {`);
4118
- this.target.indentLevel++;
4119
- this.insertAnchor(block);
4120
- const subCtx = createContext(ctx, { block, index: currentIndex });
4121
- this.compileAST(ast.tElse, subCtx);
4122
- this.target.indentLevel--;
4119
+ this.compileTIfBranch(ast.tElse, block, ctx);
4123
4120
  }
4124
4121
  this.addLine("}");
4125
4122
  if (isNewBlock) {
@@ -5721,7 +5718,7 @@ TemplateSet.prototype._compileTemplate = function _compileTemplate(name, templat
5721
5718
  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, validate, whenReady, xml };
5722
5719
 
5723
5720
 
5724
- __info__.version = '2.0.0-beta-11';
5725
- __info__.date = '2022-06-28T13:28:26.775Z';
5726
- __info__.hash = '76c389a';
5721
+ __info__.version = '2.0.0-beta-12';
5722
+ __info__.date = '2022-06-29T09:13:12.680Z';
5723
+ __info__.hash = '6c72e0a';
5727
5724
  __info__.url = 'https://github.com/odoo/owl';
package/dist/owl.iife.js CHANGED
@@ -3677,8 +3677,8 @@
3677
3677
  define(varName, expr) {
3678
3678
  this.addLine(`const ${varName} = ${expr};`);
3679
3679
  }
3680
- insertAnchor(block) {
3681
- const tag = `block-child-${block.children.length}`;
3680
+ insertAnchor(block, index = block.children.length) {
3681
+ const tag = `block-child-${index}`;
3682
3682
  const anchor = xmlDoc.createElement(tag);
3683
3683
  block.insert(anchor);
3684
3684
  }
@@ -4089,9 +4089,18 @@
4089
4089
  }
4090
4090
  this.insertBlock(blockStr, block, ctx);
4091
4091
  }
4092
+ compileTIfBranch(content, block, ctx) {
4093
+ this.target.indentLevel++;
4094
+ let childN = block.children.length;
4095
+ this.compileAST(content, createContext(ctx, { block, index: ctx.index }));
4096
+ if (block.children.length > childN) {
4097
+ // we have some content => need to insert an anchor at correct index
4098
+ this.insertAnchor(block, childN);
4099
+ }
4100
+ this.target.indentLevel--;
4101
+ }
4092
4102
  compileTIf(ast, ctx, nextNode) {
4093
- let { block, forceNewBlock, index } = ctx;
4094
- let currentIndex = index;
4103
+ let { block, forceNewBlock } = ctx;
4095
4104
  const codeIdx = this.target.code.length;
4096
4105
  const isNewBlock = !block || (block.type !== "multi" && forceNewBlock);
4097
4106
  if (block) {
@@ -4101,28 +4110,16 @@
4101
4110
  block = this.createBlock(block, "multi", ctx);
4102
4111
  }
4103
4112
  this.addLine(`if (${compileExpr(ast.condition)}) {`);
4104
- this.target.indentLevel++;
4105
- this.insertAnchor(block);
4106
- const subCtx = createContext(ctx, { block, index: currentIndex });
4107
- this.compileAST(ast.content, subCtx);
4108
- this.target.indentLevel--;
4113
+ this.compileTIfBranch(ast.content, block, ctx);
4109
4114
  if (ast.tElif) {
4110
4115
  for (let clause of ast.tElif) {
4111
4116
  this.addLine(`} else if (${compileExpr(clause.condition)}) {`);
4112
- this.target.indentLevel++;
4113
- this.insertAnchor(block);
4114
- const subCtx = createContext(ctx, { block, index: currentIndex });
4115
- this.compileAST(clause.content, subCtx);
4116
- this.target.indentLevel--;
4117
+ this.compileTIfBranch(clause.content, block, ctx);
4117
4118
  }
4118
4119
  }
4119
4120
  if (ast.tElse) {
4120
4121
  this.addLine(`} else {`);
4121
- this.target.indentLevel++;
4122
- this.insertAnchor(block);
4123
- const subCtx = createContext(ctx, { block, index: currentIndex });
4124
- this.compileAST(ast.tElse, subCtx);
4125
- this.target.indentLevel--;
4122
+ this.compileTIfBranch(ast.tElse, block, ctx);
4126
4123
  }
4127
4124
  this.addLine("}");
4128
4125
  if (isNewBlock) {
@@ -5758,9 +5755,9 @@ See https://github.com/odoo/owl/blob/${hash}/doc/reference/app.md#configuration
5758
5755
  Object.defineProperty(exports, '__esModule', { value: true });
5759
5756
 
5760
5757
 
5761
- __info__.version = '2.0.0-beta-11';
5762
- __info__.date = '2022-06-28T13:28:26.775Z';
5763
- __info__.hash = '76c389a';
5758
+ __info__.version = '2.0.0-beta-12';
5759
+ __info__.date = '2022-06-29T09:13:12.680Z';
5760
+ __info__.hash = '6c72e0a';
5764
5761
  __info__.url = 'https://github.com/odoo/owl';
5765
5762
 
5766
5763
 
@@ -1 +1 @@
1
- !function(t){"use strict";function e(t){t=t.slice();const e=[];let n;for(;(n=t[0])&&"string"==typeof n;)e.push(t.shift());return{modifiers:e,data:t}}const n={shouldNormalizeDom:!0,mainEventHandler:(t,n,o)=>("function"==typeof t?t(n):Array.isArray(t)&&(t=e(t).data)[0](t[1],n),!1)};class o{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 r(t,e){return new o(t,e)}const{setAttribute:i,removeAttribute:s}=Element.prototype,l=DOMTokenList.prototype,a=l.add,c=l.remove,h=Array.isArray,{split:u,trim:d}=String.prototype,f=/\s+/;function p(t,e){switch(e){case!1:case void 0:s.call(this,t);break;case!0:i.call(this,t,"");break;default:i.call(this,t,e)}}function m(t){return function(e){p.call(this,t,e)}}function b(t){if(h(t))p.call(this,t[0],t[1]);else for(let e in t)p.call(this,e,t[e])}function g(t,e){if(h(t)){const n=t[0],o=t[1];if(n===e[0]){if(o===e[1])return;p.call(this,n,o)}else s.call(this,e[0]),p.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]&&p.call(this,n,o)}}}function y(t){const e={};switch(typeof t){case"string":const n=d.call(t);if(!n)return{};let o=u.call(n,f);for(let t=0,n=o.length;t<n;t++)e[o[t]]=!0;return e;case"object":for(let n in t){const o=t[n];if(o){if(n=d.call(n),!n)continue;const t=u.call(n,f);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?{}:y(t);const e=this.classList;for(let n in t)a.call(e,n)}function w(t,e){e=""===e?{}:y(e),t=""===t?{}:y(t);const n=this.classList;for(let o in e)o in t||c.call(n,o);for(let o in t)o in e||a.call(n,o)}function x(t){return function(e){this[t]=0===e?0:e||""}}function k(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 $(t){const e=t.split(".")[0],o=t.includes(".capture");return t.includes(".synthetic")?function(t,e=!1){let o="__event__synthetic_"+t;e&&(o+="_capture");!function(t,e,o=!1){if(A[e])return;document.addEventListener(t,(t=>function(t,e){let o=e.target;for(;null!==o;){const r=o[t];if(r)for(const t of Object.values(r)){if(n.mainEventHandler(t,e,o))return}o=o.parentNode}}(e,t)),{capture:o}),A[e]=!0}(t,o,e);const r=E++;function i(t){const e=this[o]||{};e[r]=t,this[o]=e}function s(){delete this[o]}return{setup:i,update:i,remove:s}}(e,o):function(t,e=!1){let o=`__event__${t}_${N++}`;e&&(o+="_capture");function r(t){const e=t.currentTarget;if(!e||!document.contains(e))return;const r=e[o];r&&n.mainEventHandler(r,t,e)}function i(n){this[o]=n,this.addEventListener(t,r,{capture:e})}function s(){delete this[o],this.removeEventListener(t,r,{capture:e})}function l(t){this[o]=t}return{setup:i,update:l,remove:s}}(e,o)}let N=1;let E=1;const A={};const T=Node.prototype,_=T.insertBefore,S=(C=T,D="textContent",Object.getOwnPropertyDescriptor(C,D)).set;var C,D;const L=T.removeChild;class B{constructor(t){this.children=t}mount(t,e){const n=this.children,o=n.length,r=new Array(o);for(let i=0;i<o;i++){let o=n[i];if(o)o.mount(t,e);else{const n=document.createTextNode("");r[i]=n,_.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,i=n.length;t<i;t++){let i=n[t];if(i)i.moveBefore(null,e);else{const n=r[t];_.call(o,n,e)}}}patch(t,e){if(this===t)return;const n=this.children,o=t.children,r=this.anchors,i=this.parentEl;for(let t=0,s=n.length;t<s;t++){const s=n[t],l=o[t];if(s)if(l)s.patch(l,e);else{const o=s.firstNode(),l=document.createTextNode("");r[t]=l,_.call(i,l,o),e&&s.beforeRemove(),s.remove(),n[t]=void 0}else if(l){n[t]=l;const e=r[t];l.mount(i,e),L.call(i,e)}}}beforeRemove(){const t=this.children;for(let e=0,n=t.length;e<n;e++){const n=t[e];n&&n.beforeRemove()}}remove(){const t=this.parentEl;if(this.isOnlyChild)S.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():L.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 B(t)}const R=Node.prototype,P=CharacterData.prototype,I=R.insertBefore,j=((t,e)=>Object.getOwnPropertyDescriptor(t,e))(P,"data").set,M=R.removeChild;class W{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(){M.call(this.parentEl,this.el)}firstNode(){return this.el}toString(){return this.text}}class F extends W{mount(t,e){this.mountNode(document.createTextNode(H(this.text)),t,e)}patch(t){const e=t.text;this.text!==e&&(j.call(this.el,H(e)),this.text=e)}}class V extends W{mount(t,e){this.mountNode(document.createComment(H(this.text)),t,e)}patch(){}}function z(t){return new F(t)}function K(t){return new V(t)}function H(t){switch(typeof t){case"string":return t;case"number":return String(t);case"boolean":return t?"true":"false";default:return t||""}}const U=(t,e)=>Object.getOwnPropertyDescriptor(t,e),q=Node.prototype,G=Element.prototype,X=U(CharacterData.prototype,"data").set,Y=U(q,"firstChild").get,Z=U(q,"nextSibling").get,J=()=>{},Q={};function tt(t){if(t in Q)return Q[t];const e=(new DOMParser).parseFromString(`<t>${t}</t>`,"text/xml").firstChild.firstChild;n.shouldNormalizeDom&&et(e);const o=nt(e),r=it(o),i=function(t,e){let n=function(t,e){const{refN:n,collectors:o,children:r}=e,i=o.length;e.locations.sort(((t,e)=>t.idx-e.idx));const s=e.locations.map((t=>({refIdx:t.refIdx,setData:t.setData,updateData:t.updateData}))),l=s.length,a=r.length,c=r,h=n>0,u=q.cloneNode,d=q.insertBefore,f=G.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<i;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=s[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],i=o[t];if(r!==i){const e=s[t];e.updateData.call(n[e.refIdx],i,r)}}this.data=o}if(a){let o=this.children;const r=t.children;for(let t=0;t<a;t++){const i=o[t],s=r[t];if(i)s?i.patch(s,e):(e&&i.beforeRemove(),i.remove(),o[t]=void 0);else if(s){const e=c[t],r=e.afterRefIdx?n[e.afterRefIdx]:null;s.mount(n[e.parentRefIdx],r),o[t]=s}}}});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=B.prototype.beforeRemove,(t,e=[])=>new n(t,e);return t=>new n(t)}(o.el,r);return Q[t]=i,i}function et(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)et(t.childNodes.item(e))}else t.remove()}function nt(t,e=null,n=null){switch(t.nodeType){case Node.ELEMENT_NODE:{let o=n&&n.currentNS;const r=t.tagName;let i=void 0;const s=[];if(r.startsWith("block-text-")){const t=parseInt(r.slice(11),10);s.push({type:"text",idx:t}),i=document.createTextNode("")}if(r.startsWith("block-child-")){n.isRef||ot(n);const t=parseInt(r.slice(12),10);s.push({type:"child",idx:t}),i=document.createTextNode("")}const l=t.attributes,a=l.getNamedItem("block-ns");if(a&&(l.removeNamedItem("block-ns"),o=a.value),i||(i=o?document.createElementNS(o,r):document.createElement(r)),i 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);s.push({type:"handler",idx:t,event:n})}else if(e.startsWith("block-attribute-")){const t=parseInt(e.slice(16),10);s.push({type:"attribute",idx:t,name:n,tag:r})}else"block-attributes"===e?s.push({type:"attributes",idx:parseInt(n,10)}):"block-ref"===e?s.push({type:"ref",idx:parseInt(n,10)}):i.setAttribute(l[t].name,n)}const c={parent:e,firstChild:null,nextSibling:null,el:i,info:s,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);s.push({idx:n,type:"child",isOnlyChild:!0})}else{c.firstChild=nt(t.firstChild,c,c),i.appendChild(c.firstChild.el);let e=t.firstChild,n=c.firstChild;for(;e=e.nextSibling;)n.nextSibling=nt(e,n,c),i.appendChild(n.nextSibling.el),n=n.nextSibling}}return c.info.length&&ot(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 ot(t){t.isRef=!0;do{t.refN++}while(t=t.parent)}function rt(t){let e=t.parent;for(;e&&e.nextSibling===t;)t=e,e=e.parent;return e}function it(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,i=t.firstChild?t.firstChild.refN:0,s=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:rt(e).refIdx,afterRefIdx:n.refIdx};break;case"attribute":{const e=n.refIdx;let o,r;if(k(n.tag,n.name)){const t=x(n.name);r=t,o=t}else"class"===n.name?(r=v,o=w):(r=m(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:b,updateData:g});break;case"handler":{const{setup:e,update:o}=$(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:lt(o,t.refList),updateData:J})}}(e,t),n++}if(s){const r=n+i;e.collectors.push({idx:r,prevIdx:o,getVal:Z}),it(t.nextSibling,e,r)}i&&(e.collectors.push({idx:n,prevIdx:o,getVal:Y}),it(t.firstChild,e,n))}return e}function st(t){X.call(this,H(t))}function lt(t,e){return function(n){e[e.length-1][t]=()=>n(this)}}const at=Node.prototype,ct=at.insertBefore,ht=at.appendChild,ut=at.removeChild,dt=((t,e)=>Object.getOwnPropertyDescriptor(t,e))(at,"textContent").set;class ft{constructor(t){this.children=t}mount(t,e){const n=this.children,o=document.createTextNode("");this.anchor=o,ct.call(t,o,e);const r=n.length;if(r){const e=n[0].mount;for(let i=0;i<r;i++)e.call(n[i],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:i,patch:s,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 dt.call(f,""),void ht.call(f,u)}let p=0,m=0,b=n[0],g=o[0],y=n.length-1,v=o.length-1,w=n[y],x=o[v],k=void 0;for(;p<=y&&m<=v;){if(null===b){b=n[++p];continue}if(null===w){w=n[--y];continue}let t=b.key,r=g.key;if(t===r){s.call(b,g,e),o[m]=b,b=n[++p],g=o[++m];continue}let l=w.key,a=x.key;if(l===a){s.call(w,x,e),o[v]=w,w=n[--y],x=o[--v];continue}if(t===a){s.call(b,x,e),o[v]=b;const t=o[v+1];c.call(b,t,u),b=n[++p],x=o[--v];continue}if(l===r){s.call(w,g,e),o[m]=w;const t=n[p];c.call(w,t,u),w=n[--y],g=o[++m];continue}k=k||mt(n,p,y);let d=k[r];if(void 0===d)i.call(g,f,h.call(b)||null);else{const t=n[d];c.call(t,b,null),s.call(t,g,e),o[m]=t,n[d]=null}g=o[++m]}if(p<=y||m<=v)if(p>y){const t=o[v+1],e=t?h.call(t)||null:u;for(let t=m;t<=v;t++)i.call(o[t],f,e)}else for(let t=p;t<=y;t++){let o=n[t];o&&(e&&a.call(o),l.call(o))}}beforeRemove(){const t=this.children,e=t.length;if(e){const n=t[0].beforeRemove;for(let o=0;o<e;o++)n.call(t[o])}}remove(){const{parentEl:t,anchor:e}=this;if(this.isOnlyChild)dt.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])}ut.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 pt(t){return new ft(t)}function mt(t,e,n){let o={};for(let r=e;r<=n;r++)o[t[r].key]=r;return o}const bt=Node.prototype,gt=bt.insertBefore,yt=bt.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 i=[...r.content.childNodes];for(let t of i)gt.call(n,t,o);if(!i.length){const t=document.createTextNode("");i.push(t),gt.call(n,t,o)}this.remove(),this.content=i,this.html=t.html}}beforeRemove(){}remove(){const t=this.parentEl;for(let e of this.content)yt.call(t,e)}firstNode(){return this.content[0]}toString(){return this.html}}function wt(t){return new vt(t)}function xt(t,e,n=null){t.mount(e,n)}const kt=new WeakMap,$t=new WeakMap;function Nt(t,e){if(!t)return!1;const n=t.fiber;n&&kt.set(n,e);const o=$t.get(t);if(o){let t=!1;for(let n=o.length-1;n>=0;n--)try{o[n](e),t=!0;break}catch(t){e=t}if(t)return!0}return Nt(t.parent,e)}function Et(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);kt.set(o.root,e);if(!Nt(n,e)){console.warn("[Owl] Unhandled error. Destroying the root component");try{n.app.destroy()}catch(t){console.error(t)}}}function At(){throw new Error("Attempted to render cancelled fiber")}function Tt(t){let e=0;for(let n of t){let t=n.node;n.render=At,0===t.status&&(t.destroy(),delete t.parent.children[t.parentKey]),t.fiber=null,n.bdom?t.forceNextRender=!0:e++,e+=Tt(n.children)}return e}class _t{constructor(t,e){if(this.bdom=null,this.children=[],this.appliedToDom=!1,this.deep=!1,this.childrenMap={},this.node=t,this.parent=e,e){this.deep=e.deep;const t=e.root;t.setCounter(t.counter+1),this.root=t,e.children.push(this)}else this.root=this}render(){let t=this.root.node,e=t.app.scheduler,n=t.parent;for(;n;){if(n.fiber){let o=n.fiber.root;if(0!==o.counter||!(t.parentKey in n.fiber.childrenMap))return void e.delayedRenders.push(this);n=o.node}t=n,n=n.parent}this._render()}_render(){const t=this.node,e=this.root;if(e){try{this.bdom=!0,this.bdom=t.renderFn()}catch(e){Et({node:t,error:e})}e.setCounter(e.counter-1)}}}class St extends _t{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,Et({fiber:e||this,error:t})}}setCounter(t){this.counter=t,0===t&&this.node.app.scheduler.flush()}}class Ct extends St{constructor(t,e,n={}){super(t,null),this.target=e,this.position=n.position||"last-child"}complete(){let t=this;try{const e=this.node;if(e.children=this.childrenMap,e.app.constructor.validateTarget(this.target),e.bdom)e.updateDom();else if(e.bdom=this.bdom,"last-child"===this.position||0===this.target.childNodes.length)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){Et({fiber:t,error:e})}}}const Dt=Symbol("Target"),Lt=Symbol("Skip"),Bt=Symbol("Key changes"),Ot=Object.prototype.toString,Rt=Object.prototype.hasOwnProperty,Pt=new Set(["Object","Array","Set","Map","WeakMap"]),It=new Set(["Set","Map","WeakMap"]);function jt(t){return Ot.call(t).slice(8,-1)}function Mt(t){return"object"==typeof t&&Pt.has(jt(t))}function Wt(t,e){return Mt(t)?Xt(t,e):t}function Ft(t){return t[Lt]=!0,t}function Vt(t){return t[Dt]||t}const zt=new WeakMap;function Kt(t,e,n){zt.get(t)||zt.set(t,new Map);const o=zt.get(t);o.get(e)||o.set(e,new Set),o.get(e).add(n),Ut.has(n)||Ut.set(n,new Set),Ut.get(n).add(t)}function Ht(t,e){const n=zt.get(t);if(!n)return;const o=n.get(e);if(o)for(const t of[...o])qt(t),t()}const Ut=new WeakMap;function qt(t){const e=Ut.get(t);if(e){for(const n of e){const e=zt.get(n);if(e)for(const n of e.values())n.delete(t)}e.clear()}}const Gt=new WeakMap;function Xt(t,e=(()=>{})){if(!Mt(t))throw new Error("Cannot make the given value reactive");if(Lt in t)return t;const n=t[Dt];if(n)return Xt(n,e);Gt.has(t)||Gt.set(t,new WeakMap);const o=Gt.get(t);if(!o.has(e)){const n=jt(t),r=It.has(n)?function(t,e,n){const o=ne[n](t,e);return Object.assign(Yt(e),{get:(t,n)=>n===Dt?t:Rt.call(o,n)?o[n]:(Kt(t,n,e),Wt(t[n],e))})}(t,e,n):Yt(e),i=new Proxy(t,r);o.set(e,i)}return o.get(e)}function Yt(t){return{get(e,n,o){if(n===Dt)return e;const r=Object.getOwnPropertyDescriptor(e,n);return!r||r.writable||r.configurable?(Kt(e,n,t),Wt(Reflect.get(e,n,o),t)):Reflect.get(e,n,o)},set(t,e,n,o){const r=!Rt.call(t,e),i=Reflect.get(t,e,o),s=Reflect.set(t,e,n,o);return r&&Ht(t,Bt),(i!==n||Array.isArray(t)&&"length"===e)&&Ht(t,e),s},deleteProperty(t,e){const n=Reflect.deleteProperty(t,e);return Ht(t,Bt),Ht(t,e),n},ownKeys:e=>(Kt(e,Bt,t),Reflect.ownKeys(e)),has:(e,n)=>(Kt(e,Bt,t),Reflect.has(e,n))}}function Zt(t,e,n){return o=>(o=Vt(o),Kt(e,o,n),Wt(e[t](o),n))}function Jt(t,e,n){return function*(){Kt(e,Bt,n);const o=e.keys();for(const r of e[t]()){const t=o.next().value;Kt(e,t,n),yield Wt(r,n)}}}function Qt(t,e){return function(n,o){Kt(t,Bt,e),t.forEach((function(r,i,s){Kt(t,i,e),n.call(o,Wt(r,e),Wt(i,e),Wt(s,e))}),o)}}function te(t,e,n){return(o,r)=>{o=Vt(o);const i=n.has(o),s=n[e](o),l=n[t](o,r);return i!==n.has(o)&&Ht(n,Bt),s!==r&&Ht(n,o),l}}function ee(t){return()=>{const e=[...t.keys()];t.clear(),Ht(t,Bt);for(const n of e)Ht(t,n)}}const ne={Set:(t,e)=>({has:Zt("has",t,e),add:te("add","has",t),delete:te("delete","has",t),keys:Jt("keys",t,e),values:Jt("values",t,e),entries:Jt("entries",t,e),[Symbol.iterator]:Jt(Symbol.iterator,t,e),forEach:Qt(t,e),clear:ee(t),get size(){return Kt(t,Bt,e),t.size}}),Map:(t,e)=>({has:Zt("has",t,e),get:Zt("get",t,e),set:te("set","get",t),delete:te("delete","has",t),keys:Jt("keys",t,e),values:Jt("values",t,e),entries:Jt("entries",t,e),[Symbol.iterator]:Jt(Symbol.iterator,t,e),forEach:Qt(t,e),clear:ee(t),get size(){return Kt(t,Bt,e),t.size}}),WeakMap:(t,e)=>({has:Zt("has",t,e),get:Zt("get",t,e),set:te("set","get",t),delete:te("delete","has",t)})};class oe extends EventTarget{trigger(t,e){this.dispatchEvent(new CustomEvent(t,{detail:e}))}}class re extends String{}let ie=null;function se(){if(!ie)throw new Error("No active component (a hook function should only be called in 'setup')");return ie}function le(t,e){for(let n in e)void 0===t[n]&&(t[n]=e[n])}const ae=new WeakMap;function ce(t){const e=se();let n=ae.get(e);return n||(n=function(t){let e=!1;return async()=>{await Promise.resolve(),e||(e=!0,Promise.resolve().then((()=>e=!1)),t())}}(e.render.bind(e,!1)),ae.set(e,n),e.willDestroy.push(qt.bind(null,n))),Xt(t,n)}class he{constructor(t,e,n,o,r){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,this.props=e,this.parentKey=r,this.level=o?o.level+1:0;const i=t.defaultProps;e=Object.assign({},e),i&&le(e,i);const s=o&&o.childEnv||n.env;this.childEnv=s;for(const t in e){const n=e[t];n&&"object"==typeof n&&n[Dt]&&(e[t]=ce(n))}this.component=new t(e,s,this),this.renderFn=n.getTemplate(t.template).bind(this.component,this.component,this),this.component.setup(),ie=null}mountComponent(t,e){const n=new Ct(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 Et({node:this,error:t})}0===this.status&&this.fiber===t&&t.render()}async render(t){let e=this.fiber;if(e&&(e.root.locked||!0===e.bdom)&&(await Promise.resolve(),e=this.fiber),e){if(!e.bdom&&!kt.has(e))return void(t&&(e.deep=t));t=t||e.deep}else if(!this.bdom)return;const n=function(t){let e=t.fiber;if(e){let t=e.root;return t.locked=!0,t.setCounter(t.counter+1-Tt(e.children)),t.locked=!1,e.children=[],e.childrenMap={},e.bdom=null,kt.has(e)&&(kt.delete(e),kt.delete(t),e.appliedToDom=!1),e}const n=new St(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||n.render())}destroy(){let t=1===this.status;this._destroy(),t&&this.bdom.remove()}_destroy(){const t=this.component;if(1===this.status)for(let e of this.willUnmount)e.call(t);for(let t of Object.values(this.children))t._destroy();if(this.willDestroy.length)try{for(let e of this.willDestroy)e.call(t)}catch(t){Et({error:t,node:this})}this.status=2}async updateAndRender(t,e){const n=t;t=Object.assign({},t);const o=function(t,e){let n=t.fiber;return n&&(Tt(n.children),n.root=null),new _t(t,e)}(this,e);this.fiber=o;const r=this.component,i=r.constructor.defaultProps;i&&le(t,i),ie=this;for(const e in t){const n=t[e];n&&"object"==typeof n&&n[Dt]&&(t[e]=ce(n))}ie=null;const s=Promise.all(this.willUpdateProps.map((e=>e.call(r,t))));if(await s,o!==this.fiber)return;r.props=t,this.props=n,o.render();const l=e.root;this.willPatch.length&&l.willPatch.push(o),this.patched.length&&l.patched.push(o)}updateDom(){if(this.fiber)if(this.bdom===this.fiber.bdom)for(let t in this.children){this.children[t].updateDom()}else this.bdom.patch(this.fiber.bdom,!1),this.fiber.appliedToDom=!0,this.fiber=null}firstNode(){const t=this.bdom;return t?t.firstNode():void 0}mount(t,e){const n=this.fiber.bdom;this.bdom=n,n.mount(t,e),this.status=1,this.fiber.appliedToDom=!0,this.children=this.fiber.childrenMap,this.fiber=null}moveBefore(t,e){this.bdom.moveBefore(t?t.bdom:null,e)}patch(){this.fiber&&this.fiber.parent&&this._patch()}_patch(){let t=!1;for(let e in this.children){t=!0;break}const e=this.fiber;this.children=e.childrenMap,this.bdom.patch(e.bdom,t),e.appliedToDom=!0,this.fiber=null}beforeRemove(){this._destroy()}remove(){this.bdom.remove()}get name(){return this.component.constructor.name}get subscriptions(){const t=ae.get(this);return t?(e=t,[...Ut.get(e)||[]].map((t=>{const e=zt.get(t);return{target:t,keys:e?[...e.keys()]:[]}}))):[];var e}}const ue=Symbol("timeout");function de(t,e){const n=new Error(`The following error occurred in ${e}: `),o=new Error(e+"'s promise hasn't resolved after 3 seconds"),r=se();return(...i)=>{try{const s=t(...i);if(s instanceof Promise){if("onWillStart"===e||"onWillUpdateProps"===e){const t=r.fiber;Promise.race([s,new Promise((t=>setTimeout((()=>t(ue)),3e3)))]).then((e=>{e===ue&&r.fiber===t&&console.warn(o)}))}return s.catch((t=>{throw n.cause=t,t instanceof Error&&(n.message+=`"${t.message}"`),n}))}return s}catch(t){throw t instanceof Error&&(n.message+=`"${t.message}"`),n}}}function fe(t){const e=se(),n=e.app.dev?de:t=>t;e.mounted.push(n(t.bind(e.component),"onMounted"))}function pe(t){const e=se(),n=e.app.dev?de:t=>t;e.patched.push(n(t.bind(e.component),"onPatched"))}function me(t){const e=se(),n=e.app.dev?de:t=>t;e.willUnmount.unshift(n(t.bind(e.component),"onWillUnmount"))}class be{constructor(t,e,n){this.props=t,this.env=e,this.__owl__=n}setup(){}render(t=!1){this.__owl__.render(!0===t)}}be.template="";const ge=z("").constructor;class ye extends ge{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 ve extends be{setup(){const t=this.__owl__,e=t.renderFn;t.renderFn=()=>new ye(this.props.target,e()),me((()=>{t.bdom&&t.bdom.remove()}))}}ve.template="__portal__",ve.props={target:{type:String},slots:!0};const we=t=>Array.isArray(t),xe=t=>"object"!=typeof t,ke=t=>"object"==typeof t&&t&&"value"in t;function $e(t){return"object"==typeof t&&"optional"in t&&t.optional||!1}function Ne(t){return"*"===t||!0===t?"value":t.name.toLowerCase()}function Ee(t){return xe(t)?Ne(t):we(t)?t.map(Ee).join(" or "):ke(t)?String(t.value):"element"in t?`list of ${Ee({type:t.element,optional:!1})}s`:"shape"in t?"object":Ee(t.type||"*")}function Ae(t,e){var n;Array.isArray(e)&&(n=e,e=Object.fromEntries(n.map((t=>t.endsWith("?")?[t.slice(0,-1),{optional:!0}]:[t,{type:"*",optional:!1}]))));let o=[];for(let n in t)if(n in e){let r=Te(n,t[n],e[n]);r&&o.push(r)}else"*"in e||o.push(`unknown key '${n}'`);for(let n in e){const r=e[n];if("*"!==n&&!$e(r)&&!(n in t)){const t="object"==typeof r&&!Array.isArray(r);let e="*"===r||(t&&"type"in r?"*"===r.type:t)?"":` (should be a ${Ee(r)})`;o.push(`'${n}' is missing${e}`)}}return o}function Te(t,e,n){if(void 0===e)return $e(n)?null:`'${t}' is undefined (should be a ${Ee(n)})`;if(xe(n))return function(t,e,n){if("function"==typeof n)if("object"==typeof e){if(!(e instanceof n))return`'${t}' is not a ${Ne(n)}`}else if(typeof e!==n.name.toLowerCase())return`'${t}' is not a ${Ne(n)}`;return null}(t,e,n);if(ke(n))return e===n.value?null:`'${t}' is not equal to '${n.value}'`;if(we(n)){return n.find((n=>!Te(t,e,n)))?null:`'${t}' is not a ${Ee(n)}`}let o=null;if("element"in n)o=function(t,e,n){if(!Array.isArray(e))return`'${t}' is not a list of ${Ee(n)}s`;for(let o=0;o<e.length;o++){const r=Te(`${t}[${o}]`,e[o],n);if(r)return r}return null}(t,e,n.element);else if("shape"in n&&!o)if("object"!=typeof e||Array.isArray(e))o=`'${t}' is not an object`;else{const r=Ae(e,n.shape);r.length&&(o=`'${t}' has not the correct shape (${r.join(", ")})`)}return"type"in n&&!o&&(o=Te(t,e,n.type)),"validate"in n&&!o&&(o=n.validate(e)?null:`'${t}' is not valid`),o}const _e=Object.create;function Se(t){const e=t.__owl__.component,n=_e(e);for(let e in t)n[e]=t[e];return n}const Ce=Symbol("isBoundary");class De{constructor(t,e,n,o){this.fn=t,this.ctx=Se(e),this.component=n,this.node=o}evaluate(){return this.fn.call(this.component,this.ctx,this.node)}toString(){return this.evaluate().toString()}}let Le=new WeakMap;const Be=WeakMap.prototype.get,Oe=WeakMap.prototype.set;function Re(t,e,n){const o="string"!=typeof t?t:n.constructor.components[t];if(!o)return;const r=o.props;if(!r)return void(n.__owl__.app.warnIfNoStaticProps&&console.warn(`Component '${o.name}' does not have a static props description`));const i=o.defaultProps;if(i){let t=t=>Array.isArray(r)?r.includes(t):t in r&&!("*"in r)&&!$e(r[t]);for(let e in i)if(t(e))throw new Error(`A default value cannot be defined for a mandatory prop (name: '${e}', component: ${o.name})`)}const s=Ae(e,r);if(s.length)throw new Error(`Invalid props for component '${o.name}': `+s.join(", "))}const Pe={withDefault:function(t,e){return null==t||!1===t?e:t},zero:Symbol("zero"),isBoundary:Ce,callSlot:function(t,e,n,o,i,s,l){n=n+"__slot_"+o;const a=t.props.slots||{},{__render:c,__ctx:h,__scope:u}=a[o]||{},d=_e(h||{});u&&(d[u]=s);const f=c?c.call(h.__owl__.component,d,e,n):null;if(l){let s=void 0,a=void 0;return f?s=i?r(o,f):f:a=l.call(t.__owl__.component,t,e,n),O([s,a])}return f||z("")},capture:Se,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(Ce);){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:Re,LazyValue:De,safeOutput:function(t,e){if(void 0===t)return e?r("default",e):r("undefined",z(""));let n,o;switch(typeof t){case"object":t instanceof re?(n="string_safe",o=wt(t)):t instanceof De?(n="lazy_value",o=t.evaluate()):t instanceof String?(n="string_unsafe",o=z(t)):(n="block_safe",o=t);break;case"string":n="string_unsafe",o=z(t);break;default:n="string_unsafe",o=z(String(t))}return r(n,o)},bind:function(t,e){let n=t.__owl__.component,o=Be.call(Le,n);o||(o=new WeakMap,Oe.call(Le,n,o));let r=Be.call(o,e);return r||(r=e.bind(n),Oe.call(o,e,r)),r},createCatcher:function(t){const e=Object.keys(t).length;class n{constructor(t,e){this.handlerFns=[],this.afterNode=null,this.child=t,this.handlerData=e}mount(e,n){this.parentEl=e,this.child.mount(e,n),this.afterNode=document.createTextNode(""),e.insertBefore(this.afterNode,n),this.wrapHandlerData();for(let n in t){const o=t[n],r=$(n);this.handlerFns[o]=r,r.setup.call(e,this.handlerData[o])}}wrapHandlerData(){for(let t=0;t<e;t++){let e=this.handlerData[t],n=e.length-2,o=e[n];const r=this;e[n]=function(t){const e=t.target;let n=r.child.firstNode();const i=r.afterNode;for(;n!==i;){if(n.contains(e))return o.call(this,t);n=n.nextSibling}}}}moveBefore(t,e){this.child.moveBefore(t?t.child:null,e),this.parentEl.insertBefore(this.afterNode,e)}patch(t,n){if(this!==t){this.handlerData=t.handlerData,this.wrapHandlerData();for(let t=0;t<e;t++)this.handlerFns[t].update.call(this.parentEl,this.handlerData[t]);this.child.patch(t.child,n)}}beforeRemove(){this.child.beforeRemove()}remove(){for(let t=0;t<e;t++)this.handlerFns[t].remove.call(this.parentEl);this.child.remove(),this.afterNode.remove()}firstNode(){return this.child.firstNode()}toString(){return this.child.toString()}}return function(t,e){return new n(t,e)}},markRaw:Ft},Ie={text:z,createBlock:tt,list:pt,multi:O,html:wt,toggler:r,comment:K};class je{constructor(t={}){this.rawTemplates=Object.create(Me),this.templates={},this.Portal=ve,this.dev=t.dev||!1,this.translateFn=t.translateFn,this.translatableAttributes=t.translatableAttributes,t.templates&&this.addTemplates(t.templates)}static registerTemplate(t,e){Me[t]=e}addTemplate(t,e){if(t in this.rawTemplates){const n=this.rawTemplates[t];if(("string"==typeof n?n:n instanceof Element?n.outerHTML:n.toString())===("string"==typeof e?e:e.outerHTML))return;throw new Error(`Template ${t} already defined with different content`)}this.rawTemplates[t]=e}addTemplates(t){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 i=Number(r[0]),s=t.split("\n")[i-1],l=e.exec(o);if(s&&l){const t=Number(l[0])-1;s[t]&&(n+=`\nThe error might be located at xml line ${i} column ${t}\n${s}\n${"-".repeat(t-1)}^`)}}}throw new Error(n)}return e}(t);for(const e of t.querySelectorAll("[t-name]")){const t=e.getAttribute("t-name");this.addTemplate(t,e)}}}getTemplate(t){if(!(t in this.templates)){const e=this.rawTemplates[t];if(void 0===e){let e="";try{e=` (for component "${se().component.constructor.name}")`}catch{}throw new Error(`Missing template: "${t}"${e}`)}const n="function"==typeof e&&!(e instanceof Element)?e:this._compileTemplate(t,e),o=this.templates;this.templates[t]=function(e,n){return o[t].call(this,e,n)};const r=n(this,Ie,Pe);this.templates[t]=r}return this.templates[t]}_compileTemplate(t,e){throw new Error("Unable to compile a template. Please use owl full build instead")}callTemplate(t,e,n,o,i){return r(e,this.getTemplate(e).call(t,n,o,i))}}const Me={};function We(...t){const e="__template__"+We.nextId++,n=String.raw(...t);return Me[e]=n,e}We.nextId=1,je.registerTemplate("__portal__",(function(t,e,n){let{callSlot:o}=n;return function(t,e,n=""){return o(t,e,n,"default",!1,null)}}));const Fe="true,false,NaN,null,undefined,debugger,console,window,in,instanceof,new,function,return,this,eval,void,Math,RegExp,Array,Object,Date".split(","),Ve=Object.assign(Object.create(null),{and:"&&",or:"||",gt:">",gte:">=",lt:"<",lte:"<="}),ze=Object.assign(Object.create(null),{"{":"LEFT_BRACE","}":"RIGHT_BRACE","[":"LEFT_BRACKET","]":"RIGHT_BRACKET",":":"COLON",",":"COMMA","(":"LEFT_PAREN",")":"RIGHT_PAREN"}),Ke="...,.,===,==,+,!==,!=,!,||,&&,>=,>,<=,<,?,-,*,/,%,typeof ,=>,=,;,in ,new ,|,&,^,~".split(",");const He=[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 Ke)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 Ve?{type:"OPERATOR",value:Ve[e],size:e.length}:{type:"SYMBOL",value:e}}return!1},function(t){const e=t[0];return!(!e||!(e in ze))&&{type:ze[e],value:e}}];const Ue=t=>t&&("LEFT_BRACE"===t.type||"COMMA"===t.type),qe=t=>t&&("RIGHT_BRACE"===t.type||"COMMA"===t.type);function Ge(t){const e=new Set,n=function(t){const e=[];let n,o=!0,r=t;try{for(;o;)if(r=r.trim(),r){for(let t of He)if(o=t(r),o){e.push(o),r=r.slice(o.size||o.value.length);break}}else o=!1}catch(t){n=t}if(r.length||n)throw new Error(`Tokenizer error: could not tokenize \`${t}\``);return e}(t);let o=0,r=[];for(;o<n.length;){let t=n[o],i=n[o-1],s=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&&!Fe.includes(t.value);if("SYMBOL"!==t.type||Fe.includes(t.value)||i&&("LEFT_BRACE"===l&&Ue(i)&&qe(s)&&(n.splice(o+1,0,{type:"COLON",value:":"},{...t}),s=n[o+1]),"OPERATOR"===i.type&&"."===i.value?a=!1:"LEFT_BRACE"!==i.type&&"COMMA"!==i.type||s&&"COLON"===s.type&&(a=!1)),"TEMPLATE_STRING"===t.type&&(t.value=t.replace((t=>Ye(t)))),s&&"OPERATOR"===s.type&&"=>"===s.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}const Xe=new Map([["in "," in "]]);function Ye(t){return Ge(t).map((t=>Xe.get(t.value)||t.value)).join("")}const Ze=/\{\{.*?\}\}|\#\{.*?\}/g;function Je(t,e){let n=t.match(Ze);return n&&n[0].length===t.length?`(${e(t.slice(2,"{"===n[0][0]?-2:-1))})`:"`"+t.replace(Ze,(t=>"${"+e(t.slice(2,"{"===t[0]?-2:-1))+"}"))+"`"}function Qe(t){return Je(t,Ye)}const tn=document.implementation.createDocument(null,null,null),en=new Set(["stop","capture","prevent","self","synthetic"]);let nn={};function on(t=""){return nn[t]=(nn[t]||0)+1,t+nn[t]}class rn{constructor(t,e){this.dynamicTagName=null,this.isRoot=!1,this.hasDynamicChildren=!1,this.children=[],this.data=[],this.childNumber=0,this.parentVar="",this.id=rn.nextBlockId++,this.varName="b"+this.id,this.blockName="block"+this.id,this.target=t,this.type=e}insertData(t,e="d"){const n=on(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=tn.createElement("t");return t.appendChild(this.dom),t.innerHTML}}function sn(t,e){return Object.assign({block:null,index:0,forceNewBlock:!0,translate:t.translate,tKeyExpr:null,nameSpace:t.nameSpace,tModelSelectedExpr:t.tModelSelectedExpr},e)}rn.nextBlockId=1;class ln{constructor(t,e){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,this.on=e||null}addLine(t,e){const n=new Array(this.indentLevel+2).join(" ");void 0===e?this.code.push(n+t):this.code.splice(e,0,n+t)}generateCode(){let t=[];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 an=["label","title","placeholder","alt"],cn=/^(\s*)([\s\S]+?)(\s*)$/;class hn{constructor(t,e){if(this.blocks=[],this.nextBlockId=1,this.isDebug=!1,this.targets=[],this.target=new ln("template"),this.translatableAttributes=an,this.staticDefs=[],this.helpers=new Set,this.translateFn=e.translateFn||(t=>t),e.translatableAttributes){const t=new Set(an);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,rn.nextBlockId=1,nn={},this.compileAST(t,{block:null,index:0,forceNewBlock:!1,isLast:!0,translate:!0,tKeyExpr:null});let e=[" let { text, createBlock, list, multi, html, toggler, comment } = bdom;"];this.helpers.size&&e.push(`let { ${[...this.helpers].join(", ")} } = helpers;`),this.templateName&&e.push(`// Template name: "${this.templateName}"`);for(let{id:t,expr:n}of this.staticDefs)e.push(`const ${t} = ${n};`);if(this.blocks.length){e.push("");for(let t of this.blocks)if(t.dom){let n=t.asXmlString();n=n.replace(/`/g,"\\`"),t.dynamicTagName?(n=n.replace(/^<\w+/,`<\${tag || '${t.dom.nodeName}'}`),n=n.replace(/\w+>$/,`\${tag || '${t.dom.nodeName}'}>`),e.push(`let ${t.blockName} = tag => createBlock(\`${n}\`);`)):e.push(`let ${t.blockName} = createBlock(\`${n}\`);`)}}if(this.targets.length)for(let t of this.targets)e.push(""),e=e.concat(t.generateCode());e.push(""),e=e.concat("return "+this.target.generateCode());const n=e.join("\n ");if(this.isDebug){const t="[Owl Debug]\n"+n;console.log(t)}return n}compileInNewTarget(t,e,n,o){const r=on(t),i=this.target,s=new ln(r,o);return this.targets.push(s),this.target=s,this.compileAST(e,sn(n)),this.target=i,r}addLine(t,e){this.target.addLine(t,e)}define(t,e){this.addLine(`const ${t} = ${e};`)}insertAnchor(t){const e="block-child-"+t.children.length,n=tn.createElement(e);t.insert(n)}createBlock(t,e,n){const o=this.target.hasRoot,r=new rn(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.target.on&&(o=this.wrapWithEventCatcher(o,this.target.on)),this.addLine(`return ${o};`)):this.define(e.varName,o)}captureExpression(t,e=!1){if(!e&&!t.includes("=>"))return Ye(t);const n=Ge(t),o=new Map;return n.map((t=>{if(t.varName&&!t.isLocal){if(!o.has(t.varName)){const e=on("v");o.set(t.varName,e),this.define(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(${Ye(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=tn.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=cn.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?tn.createTextNode:tn.createComment;n.insert(e.call(tn,r))}}generateHandlerCode(t,e){const n=t.split(".").slice(1).map((t=>{if(!en.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 i=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=on("tag");this.define(e,Ye(t.dynamicTag)),n.dynamicTagName=e}const s={},l=t.ns||e.nameSpace;l&&r&&(s["block-ns"]=l);for(let o in t.attrs){let r,i;if(o.startsWith("t-attf")){r=Qe(t.attrs[o]);const e=n.insertData(r,"attr");i=o.slice(7),s["block-attribute-"+e]=i}else if(o.startsWith("t-att")){r=Ye(t.attrs[o]);const e=n.insertData(r,"attr");"t-att"===o?s["block-attributes"]=String(e):(i=o.slice(6),s["block-attribute-"+e]=i)}else this.translatableAttributes.includes(o)?s[o]=this.translateFn(t.attrs[o]):(r=`"${t.attrs[o]}"`,i=o,s[o]=t.attrs[o]);if("value"===i&&e.tModelSelectedExpr){s["block-attribute-"+n.insertData(`${e.tModelSelectedExpr} === ${r}`,"attr")]="selected"}}for(let e in t.on){const o=this.generateHandlerCode(e,t.on[e]);s["block-handler-"+n.insertData(o,"hdlr")]=e}if(t.ref){this.target.hasRef=!0;if(Ze.test(t.ref)){const e=Je(t.ref,(t=>this.captureExpression(t,!0))),o=n.insertData(`(el) => refs[${e}] = el`,"ref");s["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;s["block-ref"]=String(o),t[1]=`multiRefSetter(refs, \`${e}\`)`}else{let t=on("ref");this.target.refInfo[e]=[t,`(el) => refs[\`${e}\`] = el`];const o=n.data.push(t)-1;s["block-ref"]=String(o)}}}let a;if(t.model){const{hasDynamicChildren:e,baseExpr:o,expr:r,eventType:i,shouldNumberize:l,shouldTrim:c,targetAttr:h,specialInitTargetAttr:u}=t.model,d=Ye(o),f=on("bExpr");this.define(f,d);const p=Ye(r),m=on("expr");this.define(m,p);const b=`${f}[${m}]`;let g;if(u)g=n.insertData(`${b} === '${s[h]}'`,"attr"),s["block-attribute-"+g]=u;else if(e){a=""+on("bValue"),this.define(a,b)}else g=n.insertData(""+b,"attr"),s["block-attribute-"+g]=h;this.helpers.add("toNumber");let y="ev.target."+h;y=c?y+".trim()":y,y=l?`toNumber(${y})`:y;const v=`[(ev) => { ${b} = ${y}; }]`;g=n.insertData(v,"hdlr"),s["block-handler-"+g]=i}const c=tn.createElement(t.tag);for(const[t,e]of Object.entries(s))"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 i=t.content[o],s=sn(e,{block:n,index:n.childNumber,forceNewBlock:!1,isLast:e.isLast&&o===r.length-1,tKeyExpr:e.tKeyExpr,nameSpace:l,tModelSelectedExpr:a});this.compileAST(i,s)}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=i;n<t.length&&(!t[n].trimStart().startsWith(`const ${o.varName} `)||(t[n]=t[n].replace("const "+o.varName,o.varName),o=e.shift(),o));n++);this.addLine(`let ${n.children.map((t=>t.varName))};`,i)}}compileTEsc(t,e){let n,{block:o,forceNewBlock:r}=e;if("0"===t.expr?(this.helpers.add("zero"),n="ctx[zero]"):(n=Ye(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=tn.createElement("block-text-"+t);o.insert(e)}}compileTOut(t,e){let n,{block:o}=e;if(o&&this.insertAnchor(o),o=this.createBlock(o,"html",e),"0"===t.expr)this.helpers.add("zero"),n="ctx[zero]";else if(t.body){let o=null;o=rn.nextBlockId;const r=sn(e);this.compileAST({type:3,content:t.body},r),this.helpers.add("safeOutput"),n=`safeOutput(${Ye(t.expr)}, b${o})`}else this.helpers.add("safeOutput"),n=`safeOutput(${Ye(t.expr)})`;this.insertBlock(n,o,e)}compileTIf(t,e,n){let{block:o,forceNewBlock:r,index:i}=e,s=i;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 (${Ye(t.condition)}) {`),this.target.indentLevel++,this.insertAnchor(o);const c=sn(e,{block:o,index:s});if(this.compileAST(t.content,c),this.target.indentLevel--,t.tElif)for(let n of t.tElif){this.addLine(`} else if (${Ye(n.condition)}) {`),this.target.indentLevel++,this.insertAnchor(o);const t=sn(e,{block:o,index:s});this.compileAST(n.content,t),this.target.indentLevel--}if(t.tElse){this.addLine("} else {"),this.target.indentLevel++,this.insertAnchor(o);const n=sn(e,{block:o,index:s});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(`const ${n.varName} `)||(t[o]=t[o].replace("const "+n.varName,n.varName),n=e.shift(),n));o++);this.addLine(`let ${o.children.map((t=>t.varName))};`,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,i="k_block"+n.id,s="l_block"+n.id,l="c_block"+n.id;let a;this.helpers.add("prepareList"),this.define(`[${i}, ${r}, ${s}, ${l}]`,`prepareList(${Ye(t.collection)});`),this.dev&&this.define("keys"+n.id,"new Set()"),this.addLine(`for (let ${o} = 0; ${o} < ${s}; ${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\`] = ${i}[${o}];`),this.define("key"+this.target.loopLevel,t.key?Ye(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=on(),this.define("memo"+a,Ye(t.memo)),this.define("vnode"+a,`cache[key${this.target.loopLevel}];`),this.addLine(`if (vnode${a}) {`),this.target.indentLevel++,this.addLine(`if (shallowEqual(vnode${a}.memo, memo${a})) {`),this.target.indentLevel++,this.addLine(`${l}[${o}] = vnode${a};`),this.addLine(`nextCache[key${this.target.loopLevel}] = vnode${a};`),this.addLine("continue;"),this.target.indentLevel--,this.addLine("}"),this.target.indentLevel--,this.addLine("}"));const c=sn(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=on("tKey_");this.define(n,Ye(t.expr)),e=sn(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 i=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 s=0;for(let o=0,r=t.content.length;o<r;o++){const i=t.content[o],l=6===i.type,a=sn(e,{block:n,index:s,forceNewBlock:!l,preventRoot:e.preventRoot,isLast:e.isLast&&o===r-1});this.compileAST(i,a),l||s++}if(r){if(n.hasDynamicChildren&&n.children.length){const t=this.target.code,e=n.children.slice();let o=e.shift();for(let n=i;n<t.length&&(!t[n].trimStart().startsWith(`const ${o.varName} `)||(t[n]=t[n].replace("const "+o.varName,o.varName),o=e.shift(),o));n++);this.addLine(`let ${n.children.map((t=>t.varName))};`,i)}const t=n.children.map((t=>t.varName)).join(", ");this.insertBlock(`multi([${t}])`,n,e)}}compileTCall(t,e){let{block:n,forceNewBlock:o}=e,r=e.ctxVar||"ctx";if(t.context&&(r=on("ctx"),this.addLine(`let ${r} = ${Ye(t.context)};`)),t.body){this.addLine(`${r} = Object.create(${r});`),this.addLine(r+"[isBoundary] = 1;"),this.helpers.add("isBoundary");const n=rn.nextBlockId,o=sn(e,{preventRoot:!0,ctxVar:r});this.compileAST({type:3,content:t.body},o),n!==rn.nextBlockId&&(this.helpers.add("zero"),this.addLine(`${r}[zero] = b${n};`))}const i=Ze.test(t.name),s=i?Qe(t.name):"`"+t.name+"`";n&&(o||this.insertAnchor(n));const l=`key + \`${this.generateComponentKey()}\``;if(i){const t=on("template");this.staticDefs.find((t=>"call"===t.id))||this.staticDefs.push({id:"call",expr:"app.callTemplate.bind(app)"}),this.define(t,s),n=this.createBlock(n,"multi",e),this.insertBlock(`call(this, ${t}, ${r}, node, ${l})`,n,{...e,forceNewBlock:!n})}else{const t=on("callTemplate_");this.staticDefs.push({id:t,expr:`app.getTemplate(${s})`}),n=this.createBlock(n,"multi",e),this.insertBlock(`${t}.call(this, ${r}, node, ${l})`,n,{...e,forceNewBlock:!n})}t.body&&!e.isLast&&this.addLine(`${r} = ${r}.__proto__;`)}compileTCallBlock(t,e){let{block:n,forceNewBlock:o}=e;n&&(o||this.insertAnchor(n)),n=this.createBlock(n,"multi",e),this.insertBlock(Ye(t.name),n,{...e,forceNewBlock:!n})}compileTSet(t,e){this.target.shouldProtectScope=!0,this.helpers.add("isBoundary").add("withDefault");const n=t.value?Ye(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, this, node)`;r=t.value?r?`withDefault(${n}, ${r})`:n:r,this.addLine(`ctx[\`${t.name}\`] = ${r};`)}else{let o;o=t.defaultValue?t.value?`withDefault(${n}, \`${t.defaultValue}\`)`:`\`${t.defaultValue}\``:n,this.helpers.add("setContextValue"),this.addLine(`setContextValue(${e.ctxVar||"ctx"}, "${t.name}", ${o});`)}}generateComponentKey(){const t=[on("__")];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){return Object.entries(t).map((([t,e])=>this.formatProp(t,e)))}getPropString(t,e){let n=`{${t.join(",")}}`;return e&&(n=`Object.assign({}, ${Ye(e)}${t.length?", "+n:""})`),n}compileComponent(t,e){let{block:n}=e;const o="slots"in(t.props||{}),r=t.props?this.formatPropObject(t.props):[];let i="";if(t.slots){let n="ctx";!this.target.loopLevel&&this.hasSafeContext||(n=on("ctx"),this.helpers.add("capture"),this.define(n,"capture(ctx)"));let o=[];for(let r in t.slots){const i=t.slots[r],s=[];if(i.content){const t=this.compileInNewTarget("slot",i.content,e,i.on);s.push(`__render: ${t}, __ctx: ${n}`)}const l=t.slots[r].scope;l&&s.push(`__scope: "${l}"`),t.slots[r].attrs&&s.push(...this.formatPropObject(t.slots[r].attrs));const a=`{${s.join(", ")}}`;o.push(`'${r}': ${a}`)}i=`{${o.join(", ")}}`}!i||t.dynamicProps||o||(this.helpers.add("markRaw"),r.push(`slots: markRaw(${i})`));let s,l=this.getPropString(r,t.dynamicProps);(i&&(t.dynamicProps||o)||this.dev)&&(s=on("props"),this.define(s,l),l=s),i&&(t.dynamicProps||o)&&(this.helpers.add("markRaw"),this.addLine(`${s}.slots = markRaw(Object.assign(${i}, ${s}.slots))`));const a=this.generateComponentKey();let c;t.isDynamic?(c=on("Comp"),this.define(c,Ye(t.name))):c=`\`${t.name}\``,this.dev&&this.addLine(`helpers.validateProps(${c}, ${s}, ctx);`),n&&(!1===e.forceNewBlock||e.tKeyExpr)&&this.insertAnchor(n);let h=`key + \`${a}\``;e.tKeyExpr&&(h=`${e.tKeyExpr} + ${h}`);let u=on("comp");this.staticDefs.push({id:u,expr:`app.createComponent(${t.isDynamic?null:c}, ${!t.isDynamic}, ${!!t.slots}, ${!!t.dynamicProps}, ${!t.props&&!t.dynamicProps})`});let d=`${u}(${l}, ${h}, node, this, ${t.isDynamic?c:null})`;t.isDynamic&&(d=`toggler(${c}, ${d})`),t.on&&(d=this.wrapWithEventCatcher(d,t.on)),n=this.createBlock(n,"multi",e),this.insertBlock(d,n,e)}wrapWithEventCatcher(t,e){this.helpers.add("createCatcher");let n=on("catcher"),o={},r=[];for(let t in e){let n=on("hdlr"),i=r.push(n)-1;o[t]=i;const s=this.generateHandlerCode(t,e[t]);this.define(n,s)}return this.staticDefs.push({id:n,expr:`createCatcher(${JSON.stringify(o)})`}),`${n}(${t}, [${r.join(",")}])`}compileTSlot(t,e){this.helpers.add("callSlot");let n,o,{block:r}=e,i=!1;t.name.match(Ze)?(i=!0,o=Qe(t.name)):o="'"+t.name+"'";const s=t.attrs?t.attrs["t-props"]:null;t.attrs&&delete t.attrs["t-props"];const l=t.attrs?this.formatPropObject(t.attrs):[],a=this.getPropString(l,s);if(t.defaultContent){n=`callSlot(ctx, node, key, ${o}, ${i}, ${a}, ${this.compileInNewTarget("defaultContent",t.defaultContent,e)})`}else if(i){let t=on("slot");this.define(t,o),n=`toggler(${t}, callSlot(ctx, node, key, ${t}, ${i}, ${a}))`}else n=`callSlot(ctx, node, key, ${o}, ${i}, ${a})`;t.on&&(n=this.wrapWithEventCatcher(n,t.on)),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.staticDefs.find((t=>"Portal"===t.id))||this.staticDefs.push({id:"Portal",expr:"app.Portal"});let{block:n}=e;const o=this.compileInNewTarget("slot",t.content,e),r=this.generateComponentKey();let i="ctx";!this.target.loopLevel&&this.hasSafeContext||(i=on("ctx"),this.helpers.add("capture"),this.define(i,"capture(ctx)"));let s=on("comp");this.staticDefs.push({id:s,expr:"app.createComponent(null, false, true, false, false)"});const l=`${s}({target: ${Ye(t.target)},slots: {'default': {__render: ${o}, __ctx: ${i}}}}, key + \`${r}\`, node, ctx, Portal)`;n&&this.insertAnchor(n),n=this.createBlock(n,"multi",e),this.insertBlock(l,n,{...e,forceNewBlock:!1})}}const un=new WeakMap;function dn(t){if("string"==typeof t){return fn(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 i=Number(r[0]),s=t.split("\n")[i-1],l=e.exec(o);if(s&&l){const t=Number(l[0])-1;s[t]&&(n+=`\nThe error might be located at xml line ${i} column ${t}\n${s}\n${"-".repeat(t-1)}^`)}}}throw new Error(n)}return e}(`<t>${t}</t>`).firstChild)}let e=un.get(t);return e||(e=fn(t.cloneNode(!0)),un.set(t,e)),e}function fn(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),i=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(i).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 pn(t,{inPreTag:!1,inSVG:!1})||{type:0,value:""}}function pn(t,e){return t instanceof Element?function(t,e){if(t.hasAttribute("t-debug"))return t.removeAttribute("t-debug"),{type:12,content:pn(t,e)};if(t.hasAttribute("t-log")){const n=t.getAttribute("t-log");return t.removeAttribute("t-log"),{type:13,expr:n,content:pn(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 i=t.getAttribute("t-key");if(!i)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 s=t.getAttribute("t-memo")||"";t.removeAttribute("t-memo");const l=pn(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:s,key:i,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=pn(t,e)||{type:0,value:""};let r=t.nextElementSibling;const i=[];for(;r&&r.hasAttribute("t-elif");){const t=r.getAttribute("t-elif");r.removeAttribute("t-elif");const n=pn(r,e),o=r.nextElementSibling;r.remove(),r=o,n&&i.push({condition:t,content:n})}let s=null;r&&r.hasAttribute("t-else")&&(r.removeAttribute("t-else"),s=pn(r,e),r.remove());return{type:5,condition:n,content:o,tElif:i.length?i:null,tElse:s}}(t,e)||function(t,e){if(!t.hasAttribute("t-portal"))return null;const n=t.getAttribute("t-portal");t.removeAttribute("t-portal");const o=pn(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"),o=t.getAttribute("t-call-context");if(t.removeAttribute("t-call"),t.removeAttribute("t-call-context"),"t"!==t.tagName){const r=pn(t,e),i={type:7,name:n,body:null,context:o};if(r&&2===r.type)return r.content=[i],r;if(r&&11===r.type)return{...r,slots:{default:{content:i,scope:null,on:null,attrs:null}}}}const r=xn(t,e);return{type:7,name:n,body:r.length?r:null,context:o}}(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 i=pn(t,e);if(!i)return o;if(2===i.type)return{...i,ref:r,content:[o]};if(11===i.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=pn(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:pn(t,e)}}(t,e)||function(t,e){if(!t.hasAttribute("t-slot"))return null;const n=t.getAttribute("t-slot");t.removeAttribute("t-slot");let o=null,r=null;for(let e of t.getAttributeNames()){const n=t.getAttribute(e);e.startsWith("t-on-")?(r=r||{},r[e.slice(5)]=n):(o=o||{},o[e]=n)}return{type:14,name:n,attrs:o,on:r,defaultContent:kn(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 i=pn(t,e);if(!i)return o;if(2===i.type)return o.body=i.content.length?i.content:null,{...i,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 i=t.getAttribute("t-props");t.removeAttribute("t-props");const s=t.getAttribute("t-slot-scope");t.removeAttribute("t-slot-scope");let l=null,a=null;for(let e of t.getAttributeNames()){const n=t.getAttribute(e);if(e.startsWith("t-")){if(!e.startsWith("t-on-")){const t=wn.get(e.split("-").slice(0,2).join("-"));throw new Error(t||"unsupported directive on Component: "+e)}l=l||{},l[e.slice(5)]=n}else a=a||{},a[e]=n}let c=null;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,i=!1;for(;r!==n;){if(r.hasAttribute("t-component")||r.tagName[0]===r.tagName[0].toUpperCase()){i=!0;break}r=r.parentElement}if(i)continue;t.removeAttribute("t-set-slot"),t.remove();const s=pn(t,e);let l=null,a=null,h=null;for(let e of t.getAttributeNames()){const n=t.getAttribute(e);"t-slot-scope"!==e?e.startsWith("t-on-")?(l=l||{},l[e.slice(5)]=n):(a=a||{},a[e]=n):h=n}c=c||{},c[o]={content:s,on:l,attrs:a,scope:h}}const r=kn(n,e);r&&(c=c||{},c.default={content:r,on:l,attrs:null,scope:s})}return{type:11,name:n,isDynamic:r,dynamicProps:i,props:a,slots:c,on:l}}(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=vn.has(n)&&!e.inSVG;e.inSVG=e.inSVG||r;const i=r?"http://www.w3.org/2000/svg":null,s=t.getAttribute("t-ref");t.removeAttribute("t-ref");const l=t.getAttributeNames();let a=null,c=null,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=c||{},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 i,s;if(gn.test(r)){const t=r.lastIndexOf(".");i=r.slice(0,t),s=`'${r.slice(t+1)}'`}else{if(!yn.test(r))throw new Error(`Invalid t-model expression: "${r}" (it should be assignable)`);{const t=r.lastIndexOf("[");i=r.slice(0,t),s=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"),b=o.includes(".number");h={baseExpr:i,expr:s,targetAttr:d?"checked":"value",specialInitTargetAttr:f?"checked":null,eventType:f?"click":c||m?"change":"input",hasDynamicChildren:!1,shouldTrim:o.includes(".trim")&&(p||u),shouldNumberize:b&&(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=a||{},a[o]=r}}}const u=xn(t,e);return{type:2,tag:n,dynamicTag:o,attrs:a,on:c,ref:s,content:u,model:h,ns:i}}(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 i=null;t.textContent!==t.innerHTML&&(i=xn(t,e));return{type:6,name:n,value:o,defaultValue:r,body:i}}(t,e)||function(t,e){if("t"!==t.tagName)return null;return kn(t,e)}(t,e):function(t,e){if(t.nodeType===Node.TEXT_NODE){let n=t.textContent||"";if(!e.inPreTag){if(mn.test(n)&&!n.trim())return null;n=n.replace(bn," ")}return{type:0,value:n}}if(t.nodeType===Node.COMMENT_NODE)return{type:1,value:t.textContent||""};return null}(t,e)}const mn=/[\r\n]/,bn=/\s+/g;const gn=/\.[\w_]+\s*$/,yn=/\[[^\[]+\]\s*$/,vn=new Set(["svg","g","path"]);const wn=new Map([["t-ref","t-ref is no longer supported on components. Consider exposing only the public part of the component's API through a callback prop."],["t-att","t-att makes no sense on component: props are already treated as expressions"],["t-attf","t-attf is not supported on components: use template strings for string interpolation in props"]]);function xn(t,e){const n=[];for(let o of t.childNodes){const t=pn(o,e);t&&(3===t.type?n.push(...t.content):n.push(t))}return n}function kn(t,e){const n=xn(t,e);switch(n.length){case 0:return null;case 1:return n[0];default:return{type:3,content:n}}}class $n{constructor(){this.tasks=new Set,this.frame=0,this.delayedRenders=[],this.requestAnimationFrame=$n.requestAnimationFrame}addFiber(t){this.tasks.add(t.root)}flush(){if(this.delayedRenders.length){let t=this.delayedRenders;this.delayedRenders=[];for(let e of t)e.root&&2!==e.node.status&&e.node.fiber===e&&e.render()}0===this.frame&&(this.frame=this.requestAnimationFrame((()=>{this.frame=0,this.tasks.forEach((t=>this.processFiber(t)));for(let t of this.tasks)2===t.node.status&&this.tasks.delete(t)})))}processFiber(t){if(t.root!==t)return void this.tasks.delete(t);const e=kt.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)}}$n.requestAnimationFrame=window.requestAnimationFrame.bind(window);let Nn=!1;class En extends je{constructor(t,e={}){super(e),this.scheduler=new $n,this.root=null,this.Root=t,e.test&&(this.dev=!0),this.warnIfNoStaticProps=e.warnIfNoStaticProps||!1,!this.dev||e.test||Nn||(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.`),Nn=!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){En.validateTarget(t),this.dev&&Re(this.Root,this.props,{__owl__:{app:this}});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,null,null)}mountNode(t,e,n){const o=new Promise(((e,n)=>{let o=!1;t.mounted.push((()=>{e(t.component),o=!0}));let r=$t.get(t);r||(r=[],$t.set(t,r)),r.unshift((t=>{throw o?console.error(t):n(t),t}))}));return t.mountComponent(e,n),o}destroy(){this.root&&(this.scheduler.flush(),this.root.destroy())}createComponent(t,e,n,o,r){const i=!e;const s=n?(t,e)=>!0:r?(t,e)=>!1:function(t,e){for(let n in t)if(t[n]!==e[n])return!0;return o&&Object.keys(t).length!==Object.keys(e).length},l=he.prototype.updateAndRender,a=he.prototype.initiateRender;return(n,o,r,c,h)=>{let u=r.children,d=u[o];i&&d&&d.component.constructor!==h&&(d=void 0);const f=r.fiber;if(d)(s(d.props,n)||f.deep||d.forceNextRender)&&(d.forceNextRender=!1,l.call(d,n,f));else{if(e){if(!(h=c.constructor.components[t]))throw new Error(`Cannot find the definition of component "${t}"`);if(!(h.prototype instanceof be))throw new Error(`"${t}" is not a Component. It must inherit from the Component class`)}d=new he(h,n,this,r,o),u[o]=d,a.call(d,new _t(d,f))}return f.childrenMap[o]=d,d}}}function An(t,e){const n=Object.create(t),o=Object.getOwnPropertyDescriptors(e);return Object.freeze(Object.defineProperties(n,o))}function Tn(t){const e=se();e.childEnv=An(e.childEnv,t)}En.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")},n.shouldNormalizeDom=!1,n.mainEventHandler=(t,n,o)=>{const{data:r,modifiers:i}=e(t);t=r;let s=!1;if(i.length){let t=!1;const e=n.target===o;for(const o of i)switch(o){case"self":if(t=!0,e)continue;return s;case"prevent":(t&&e||!t)&&n.preventDefault();continue;case"stop":(t&&e||!t)&&n.stopPropagation(),s=!0;continue}}if(Object.hasOwnProperty.call(t,0)){const e=t[0];if("function"!=typeof e)throw new Error(`Invalid handler (expected a function, received: '${e}')`);let o=t[1]?t[1].__owl__:null;o&&1!==o.status||e.call(o?o.component:null,n)}return s};const _n={config:n,mount:xt,patch:function(t,e,n=!1){t.patch(e,n)},remove:function(t,e=!1){e&&t.beforeRemove(),t.remove()},list:pt,multi:O,text:z,toggler:r,createBlock:tt,html:wt,comment:K},Sn={};je.prototype._compileTemplate=function(t,e){return function(t,e={}){const n=dn(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 hn(n,{...e,hasSafeContext:o}).generateCode();return new Function("app, bdom, helpers",r)}(e,{name:t,dev:this.dev,translateFn:this.translateFn,translatableAttributes:this.translatableAttributes})},t.App=En,t.Component=be,t.EventBus=oe,t.__info__=Sn,t.blockDom=_n,t.loadFile=async function(t){const e=await fetch(t);if(!e.ok)throw new Error("Error while fetching xml templates");return await e.text()},t.markRaw=Ft,t.markup=function(t){return new re(t)},t.mount=async function(t,e,n={}){return new En(t,n).mount(e,n)},t.onError=function(t){const e=se();let n=$t.get(e);n||(n=[],$t.set(e,n)),n.push(t.bind(e.component))},t.onMounted=fe,t.onPatched=pe,t.onRendered=function(t){const e=se(),n=e.renderFn,o=e.app.dev?de:t=>t;t=o(t.bind(e.component),"onRendered"),e.renderFn=()=>{const e=n();return t(),e}},t.onWillDestroy=function(t){const e=se(),n=e.app.dev?de:t=>t;e.willDestroy.push(n(t.bind(e.component),"onWillDestroy"))},t.onWillPatch=function(t){const e=se(),n=e.app.dev?de:t=>t;e.willPatch.unshift(n(t.bind(e.component),"onWillPatch"))},t.onWillRender=function(t){const e=se(),n=e.renderFn,o=e.app.dev?de:t=>t;t=o(t.bind(e.component),"onWillRender"),e.renderFn=()=>(t(),n())},t.onWillStart=function(t){const e=se(),n=e.app.dev?de:t=>t;e.willStart.push(n(t.bind(e.component),"onWillStart"))},t.onWillUnmount=me,t.onWillUpdateProps=function(t){const e=se(),n=e.app.dev?de:t=>t;e.willUpdateProps.push(n(t.bind(e.component),"onWillUpdateProps"))},t.reactive=Xt,t.status=function(t){switch(t.__owl__.status){case 0:return"new";case 1:return"mounted";case 2:return"destroyed"}},t.toRaw=Vt,t.useChildSubEnv=Tn,t.useComponent=function(){return ie.component},t.useEffect=function(t,e=(()=>[NaN])){let n,o;fe((()=>{o=e(),n=t(...o)})),pe((()=>{const r=e();r.some(((t,e)=>t!==o[e]))&&(o=r,n&&n(),n=t(...o))})),me((()=>n&&n()))},t.useEnv=function(){return se().component.env},t.useExternalListener=function(t,e,n,o){const r=se(),i=n.bind(r.component);fe((()=>t.addEventListener(e,i,o))),me((()=>t.removeEventListener(e,i,o)))},t.useRef=function(t){const e=se().refs;return{get el(){return e[t]||null}}},t.useState=ce,t.useSubEnv=function(t){const e=se();e.component.env=An(e.component.env,t),Tn(t)},t.validate=function(t,e){let n=Ae(t,e);if(n.length)throw new Error("Invalid object: "+n.join(", "))},t.whenReady=function(t){return new Promise((function(t){"loading"!==document.readyState?t(!0):document.addEventListener("DOMContentLoaded",t,!1)})).then(t||function(){})},t.xml=We,Object.defineProperty(t,"__esModule",{value:!0}),Sn.version="2.0.0-beta-11",Sn.date="2022-06-28T13:28:26.775Z",Sn.hash="76c389a",Sn.url="https://github.com/odoo/owl"}(this.owl=this.owl||{});
1
+ !function(t){"use strict";function e(t){t=t.slice();const e=[];let n;for(;(n=t[0])&&"string"==typeof n;)e.push(t.shift());return{modifiers:e,data:t}}const n={shouldNormalizeDom:!0,mainEventHandler:(t,n,o)=>("function"==typeof t?t(n):Array.isArray(t)&&(t=e(t).data)[0](t[1],n),!1)};class o{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 r(t,e){return new o(t,e)}const{setAttribute:i,removeAttribute:s}=Element.prototype,l=DOMTokenList.prototype,a=l.add,c=l.remove,h=Array.isArray,{split:u,trim:d}=String.prototype,f=/\s+/;function p(t,e){switch(e){case!1:case void 0:s.call(this,t);break;case!0:i.call(this,t,"");break;default:i.call(this,t,e)}}function m(t){return function(e){p.call(this,t,e)}}function b(t){if(h(t))p.call(this,t[0],t[1]);else for(let e in t)p.call(this,e,t[e])}function g(t,e){if(h(t)){const n=t[0],o=t[1];if(n===e[0]){if(o===e[1])return;p.call(this,n,o)}else s.call(this,e[0]),p.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]&&p.call(this,n,o)}}}function y(t){const e={};switch(typeof t){case"string":const n=d.call(t);if(!n)return{};let o=u.call(n,f);for(let t=0,n=o.length;t<n;t++)e[o[t]]=!0;return e;case"object":for(let n in t){const o=t[n];if(o){if(n=d.call(n),!n)continue;const t=u.call(n,f);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?{}:y(t);const e=this.classList;for(let n in t)a.call(e,n)}function w(t,e){e=""===e?{}:y(e),t=""===t?{}:y(t);const n=this.classList;for(let o in e)o in t||c.call(n,o);for(let o in t)o in e||a.call(n,o)}function x(t){return function(e){this[t]=0===e?0:e||""}}function k(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 $(t){const e=t.split(".")[0],o=t.includes(".capture");return t.includes(".synthetic")?function(t,e=!1){let o="__event__synthetic_"+t;e&&(o+="_capture");!function(t,e,o=!1){if(A[e])return;document.addEventListener(t,(t=>function(t,e){let o=e.target;for(;null!==o;){const r=o[t];if(r)for(const t of Object.values(r)){if(n.mainEventHandler(t,e,o))return}o=o.parentNode}}(e,t)),{capture:o}),A[e]=!0}(t,o,e);const r=E++;function i(t){const e=this[o]||{};e[r]=t,this[o]=e}function s(){delete this[o]}return{setup:i,update:i,remove:s}}(e,o):function(t,e=!1){let o=`__event__${t}_${N++}`;e&&(o+="_capture");function r(t){const e=t.currentTarget;if(!e||!document.contains(e))return;const r=e[o];r&&n.mainEventHandler(r,t,e)}function i(n){this[o]=n,this.addEventListener(t,r,{capture:e})}function s(){delete this[o],this.removeEventListener(t,r,{capture:e})}function l(t){this[o]=t}return{setup:i,update:l,remove:s}}(e,o)}let N=1;let E=1;const A={};const T=Node.prototype,_=T.insertBefore,S=(C=T,D="textContent",Object.getOwnPropertyDescriptor(C,D)).set;var C,D;const L=T.removeChild;class B{constructor(t){this.children=t}mount(t,e){const n=this.children,o=n.length,r=new Array(o);for(let i=0;i<o;i++){let o=n[i];if(o)o.mount(t,e);else{const n=document.createTextNode("");r[i]=n,_.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,i=n.length;t<i;t++){let i=n[t];if(i)i.moveBefore(null,e);else{const n=r[t];_.call(o,n,e)}}}patch(t,e){if(this===t)return;const n=this.children,o=t.children,r=this.anchors,i=this.parentEl;for(let t=0,s=n.length;t<s;t++){const s=n[t],l=o[t];if(s)if(l)s.patch(l,e);else{const o=s.firstNode(),l=document.createTextNode("");r[t]=l,_.call(i,l,o),e&&s.beforeRemove(),s.remove(),n[t]=void 0}else if(l){n[t]=l;const e=r[t];l.mount(i,e),L.call(i,e)}}}beforeRemove(){const t=this.children;for(let e=0,n=t.length;e<n;e++){const n=t[e];n&&n.beforeRemove()}}remove(){const t=this.parentEl;if(this.isOnlyChild)S.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():L.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 B(t)}const R=Node.prototype,I=CharacterData.prototype,P=R.insertBefore,j=((t,e)=>Object.getOwnPropertyDescriptor(t,e))(I,"data").set,M=R.removeChild;class W{constructor(t){this.text=t}mountNode(t,e,n){this.parentEl=e,P.call(e,t,n),this.el=t}moveBefore(t,e){const n=t?t.el:e;P.call(this.parentEl,this.el,n)}beforeRemove(){}remove(){M.call(this.parentEl,this.el)}firstNode(){return this.el}toString(){return this.text}}class F extends W{mount(t,e){this.mountNode(document.createTextNode(H(this.text)),t,e)}patch(t){const e=t.text;this.text!==e&&(j.call(this.el,H(e)),this.text=e)}}class V extends W{mount(t,e){this.mountNode(document.createComment(H(this.text)),t,e)}patch(){}}function z(t){return new F(t)}function K(t){return new V(t)}function H(t){switch(typeof t){case"string":return t;case"number":return String(t);case"boolean":return t?"true":"false";default:return t||""}}const U=(t,e)=>Object.getOwnPropertyDescriptor(t,e),q=Node.prototype,G=Element.prototype,X=U(CharacterData.prototype,"data").set,Y=U(q,"firstChild").get,Z=U(q,"nextSibling").get,J=()=>{},Q={};function tt(t){if(t in Q)return Q[t];const e=(new DOMParser).parseFromString(`<t>${t}</t>`,"text/xml").firstChild.firstChild;n.shouldNormalizeDom&&et(e);const o=nt(e),r=it(o),i=function(t,e){let n=function(t,e){const{refN:n,collectors:o,children:r}=e,i=o.length;e.locations.sort(((t,e)=>t.idx-e.idx));const s=e.locations.map((t=>({refIdx:t.refIdx,setData:t.setData,updateData:t.updateData}))),l=s.length,a=r.length,c=r,h=n>0,u=q.cloneNode,d=q.insertBefore,f=G.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<i;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=s[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],i=o[t];if(r!==i){const e=s[t];e.updateData.call(n[e.refIdx],i,r)}}this.data=o}if(a){let o=this.children;const r=t.children;for(let t=0;t<a;t++){const i=o[t],s=r[t];if(i)s?i.patch(s,e):(e&&i.beforeRemove(),i.remove(),o[t]=void 0);else if(s){const e=c[t],r=e.afterRefIdx?n[e.afterRefIdx]:null;s.mount(n[e.parentRefIdx],r),o[t]=s}}}});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=B.prototype.beforeRemove,(t,e=[])=>new n(t,e);return t=>new n(t)}(o.el,r);return Q[t]=i,i}function et(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)et(t.childNodes.item(e))}else t.remove()}function nt(t,e=null,n=null){switch(t.nodeType){case Node.ELEMENT_NODE:{let o=n&&n.currentNS;const r=t.tagName;let i=void 0;const s=[];if(r.startsWith("block-text-")){const t=parseInt(r.slice(11),10);s.push({type:"text",idx:t}),i=document.createTextNode("")}if(r.startsWith("block-child-")){n.isRef||ot(n);const t=parseInt(r.slice(12),10);s.push({type:"child",idx:t}),i=document.createTextNode("")}const l=t.attributes,a=l.getNamedItem("block-ns");if(a&&(l.removeNamedItem("block-ns"),o=a.value),i||(i=o?document.createElementNS(o,r):document.createElement(r)),i 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);s.push({type:"handler",idx:t,event:n})}else if(e.startsWith("block-attribute-")){const t=parseInt(e.slice(16),10);s.push({type:"attribute",idx:t,name:n,tag:r})}else"block-attributes"===e?s.push({type:"attributes",idx:parseInt(n,10)}):"block-ref"===e?s.push({type:"ref",idx:parseInt(n,10)}):i.setAttribute(l[t].name,n)}const c={parent:e,firstChild:null,nextSibling:null,el:i,info:s,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);s.push({idx:n,type:"child",isOnlyChild:!0})}else{c.firstChild=nt(t.firstChild,c,c),i.appendChild(c.firstChild.el);let e=t.firstChild,n=c.firstChild;for(;e=e.nextSibling;)n.nextSibling=nt(e,n,c),i.appendChild(n.nextSibling.el),n=n.nextSibling}}return c.info.length&&ot(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 ot(t){t.isRef=!0;do{t.refN++}while(t=t.parent)}function rt(t){let e=t.parent;for(;e&&e.nextSibling===t;)t=e,e=e.parent;return e}function it(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,i=t.firstChild?t.firstChild.refN:0,s=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:rt(e).refIdx,afterRefIdx:n.refIdx};break;case"attribute":{const e=n.refIdx;let o,r;if(k(n.tag,n.name)){const t=x(n.name);r=t,o=t}else"class"===n.name?(r=v,o=w):(r=m(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:b,updateData:g});break;case"handler":{const{setup:e,update:o}=$(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:lt(o,t.refList),updateData:J})}}(e,t),n++}if(s){const r=n+i;e.collectors.push({idx:r,prevIdx:o,getVal:Z}),it(t.nextSibling,e,r)}i&&(e.collectors.push({idx:n,prevIdx:o,getVal:Y}),it(t.firstChild,e,n))}return e}function st(t){X.call(this,H(t))}function lt(t,e){return function(n){e[e.length-1][t]=()=>n(this)}}const at=Node.prototype,ct=at.insertBefore,ht=at.appendChild,ut=at.removeChild,dt=((t,e)=>Object.getOwnPropertyDescriptor(t,e))(at,"textContent").set;class ft{constructor(t){this.children=t}mount(t,e){const n=this.children,o=document.createTextNode("");this.anchor=o,ct.call(t,o,e);const r=n.length;if(r){const e=n[0].mount;for(let i=0;i<r;i++)e.call(n[i],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:i,patch:s,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 dt.call(f,""),void ht.call(f,u)}let p=0,m=0,b=n[0],g=o[0],y=n.length-1,v=o.length-1,w=n[y],x=o[v],k=void 0;for(;p<=y&&m<=v;){if(null===b){b=n[++p];continue}if(null===w){w=n[--y];continue}let t=b.key,r=g.key;if(t===r){s.call(b,g,e),o[m]=b,b=n[++p],g=o[++m];continue}let l=w.key,a=x.key;if(l===a){s.call(w,x,e),o[v]=w,w=n[--y],x=o[--v];continue}if(t===a){s.call(b,x,e),o[v]=b;const t=o[v+1];c.call(b,t,u),b=n[++p],x=o[--v];continue}if(l===r){s.call(w,g,e),o[m]=w;const t=n[p];c.call(w,t,u),w=n[--y],g=o[++m];continue}k=k||mt(n,p,y);let d=k[r];if(void 0===d)i.call(g,f,h.call(b)||null);else{const t=n[d];c.call(t,b,null),s.call(t,g,e),o[m]=t,n[d]=null}g=o[++m]}if(p<=y||m<=v)if(p>y){const t=o[v+1],e=t?h.call(t)||null:u;for(let t=m;t<=v;t++)i.call(o[t],f,e)}else for(let t=p;t<=y;t++){let o=n[t];o&&(e&&a.call(o),l.call(o))}}beforeRemove(){const t=this.children,e=t.length;if(e){const n=t[0].beforeRemove;for(let o=0;o<e;o++)n.call(t[o])}}remove(){const{parentEl:t,anchor:e}=this;if(this.isOnlyChild)dt.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])}ut.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 pt(t){return new ft(t)}function mt(t,e,n){let o={};for(let r=e;r<=n;r++)o[t[r].key]=r;return o}const bt=Node.prototype,gt=bt.insertBefore,yt=bt.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 i=[...r.content.childNodes];for(let t of i)gt.call(n,t,o);if(!i.length){const t=document.createTextNode("");i.push(t),gt.call(n,t,o)}this.remove(),this.content=i,this.html=t.html}}beforeRemove(){}remove(){const t=this.parentEl;for(let e of this.content)yt.call(t,e)}firstNode(){return this.content[0]}toString(){return this.html}}function wt(t){return new vt(t)}function xt(t,e,n=null){t.mount(e,n)}const kt=new WeakMap,$t=new WeakMap;function Nt(t,e){if(!t)return!1;const n=t.fiber;n&&kt.set(n,e);const o=$t.get(t);if(o){let t=!1;for(let n=o.length-1;n>=0;n--)try{o[n](e),t=!0;break}catch(t){e=t}if(t)return!0}return Nt(t.parent,e)}function Et(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);kt.set(o.root,e);if(!Nt(n,e)){console.warn("[Owl] Unhandled error. Destroying the root component");try{n.app.destroy()}catch(t){console.error(t)}}}function At(){throw new Error("Attempted to render cancelled fiber")}function Tt(t){let e=0;for(let n of t){let t=n.node;n.render=At,0===t.status&&(t.destroy(),delete t.parent.children[t.parentKey]),t.fiber=null,n.bdom?t.forceNextRender=!0:e++,e+=Tt(n.children)}return e}class _t{constructor(t,e){if(this.bdom=null,this.children=[],this.appliedToDom=!1,this.deep=!1,this.childrenMap={},this.node=t,this.parent=e,e){this.deep=e.deep;const t=e.root;t.setCounter(t.counter+1),this.root=t,e.children.push(this)}else this.root=this}render(){let t=this.root.node,e=t.app.scheduler,n=t.parent;for(;n;){if(n.fiber){let o=n.fiber.root;if(0!==o.counter||!(t.parentKey in n.fiber.childrenMap))return void e.delayedRenders.push(this);n=o.node}t=n,n=n.parent}this._render()}_render(){const t=this.node,e=this.root;if(e){try{this.bdom=!0,this.bdom=t.renderFn()}catch(e){Et({node:t,error:e})}e.setCounter(e.counter-1)}}}class St extends _t{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,Et({fiber:e||this,error:t})}}setCounter(t){this.counter=t,0===t&&this.node.app.scheduler.flush()}}class Ct extends St{constructor(t,e,n={}){super(t,null),this.target=e,this.position=n.position||"last-child"}complete(){let t=this;try{const e=this.node;if(e.children=this.childrenMap,e.app.constructor.validateTarget(this.target),e.bdom)e.updateDom();else if(e.bdom=this.bdom,"last-child"===this.position||0===this.target.childNodes.length)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){Et({fiber:t,error:e})}}}const Dt=Symbol("Target"),Lt=Symbol("Skip"),Bt=Symbol("Key changes"),Ot=Object.prototype.toString,Rt=Object.prototype.hasOwnProperty,It=new Set(["Object","Array","Set","Map","WeakMap"]),Pt=new Set(["Set","Map","WeakMap"]);function jt(t){return Ot.call(t).slice(8,-1)}function Mt(t){return"object"==typeof t&&It.has(jt(t))}function Wt(t,e){return Mt(t)?Xt(t,e):t}function Ft(t){return t[Lt]=!0,t}function Vt(t){return t[Dt]||t}const zt=new WeakMap;function Kt(t,e,n){zt.get(t)||zt.set(t,new Map);const o=zt.get(t);o.get(e)||o.set(e,new Set),o.get(e).add(n),Ut.has(n)||Ut.set(n,new Set),Ut.get(n).add(t)}function Ht(t,e){const n=zt.get(t);if(!n)return;const o=n.get(e);if(o)for(const t of[...o])qt(t),t()}const Ut=new WeakMap;function qt(t){const e=Ut.get(t);if(e){for(const n of e){const e=zt.get(n);if(e)for(const n of e.values())n.delete(t)}e.clear()}}const Gt=new WeakMap;function Xt(t,e=(()=>{})){if(!Mt(t))throw new Error("Cannot make the given value reactive");if(Lt in t)return t;const n=t[Dt];if(n)return Xt(n,e);Gt.has(t)||Gt.set(t,new WeakMap);const o=Gt.get(t);if(!o.has(e)){const n=jt(t),r=Pt.has(n)?function(t,e,n){const o=ne[n](t,e);return Object.assign(Yt(e),{get:(t,n)=>n===Dt?t:Rt.call(o,n)?o[n]:(Kt(t,n,e),Wt(t[n],e))})}(t,e,n):Yt(e),i=new Proxy(t,r);o.set(e,i)}return o.get(e)}function Yt(t){return{get(e,n,o){if(n===Dt)return e;const r=Object.getOwnPropertyDescriptor(e,n);return!r||r.writable||r.configurable?(Kt(e,n,t),Wt(Reflect.get(e,n,o),t)):Reflect.get(e,n,o)},set(t,e,n,o){const r=!Rt.call(t,e),i=Reflect.get(t,e,o),s=Reflect.set(t,e,n,o);return r&&Ht(t,Bt),(i!==n||Array.isArray(t)&&"length"===e)&&Ht(t,e),s},deleteProperty(t,e){const n=Reflect.deleteProperty(t,e);return Ht(t,Bt),Ht(t,e),n},ownKeys:e=>(Kt(e,Bt,t),Reflect.ownKeys(e)),has:(e,n)=>(Kt(e,Bt,t),Reflect.has(e,n))}}function Zt(t,e,n){return o=>(o=Vt(o),Kt(e,o,n),Wt(e[t](o),n))}function Jt(t,e,n){return function*(){Kt(e,Bt,n);const o=e.keys();for(const r of e[t]()){const t=o.next().value;Kt(e,t,n),yield Wt(r,n)}}}function Qt(t,e){return function(n,o){Kt(t,Bt,e),t.forEach((function(r,i,s){Kt(t,i,e),n.call(o,Wt(r,e),Wt(i,e),Wt(s,e))}),o)}}function te(t,e,n){return(o,r)=>{o=Vt(o);const i=n.has(o),s=n[e](o),l=n[t](o,r);return i!==n.has(o)&&Ht(n,Bt),s!==r&&Ht(n,o),l}}function ee(t){return()=>{const e=[...t.keys()];t.clear(),Ht(t,Bt);for(const n of e)Ht(t,n)}}const ne={Set:(t,e)=>({has:Zt("has",t,e),add:te("add","has",t),delete:te("delete","has",t),keys:Jt("keys",t,e),values:Jt("values",t,e),entries:Jt("entries",t,e),[Symbol.iterator]:Jt(Symbol.iterator,t,e),forEach:Qt(t,e),clear:ee(t),get size(){return Kt(t,Bt,e),t.size}}),Map:(t,e)=>({has:Zt("has",t,e),get:Zt("get",t,e),set:te("set","get",t),delete:te("delete","has",t),keys:Jt("keys",t,e),values:Jt("values",t,e),entries:Jt("entries",t,e),[Symbol.iterator]:Jt(Symbol.iterator,t,e),forEach:Qt(t,e),clear:ee(t),get size(){return Kt(t,Bt,e),t.size}}),WeakMap:(t,e)=>({has:Zt("has",t,e),get:Zt("get",t,e),set:te("set","get",t),delete:te("delete","has",t)})};class oe extends EventTarget{trigger(t,e){this.dispatchEvent(new CustomEvent(t,{detail:e}))}}class re extends String{}let ie=null;function se(){if(!ie)throw new Error("No active component (a hook function should only be called in 'setup')");return ie}function le(t,e){for(let n in e)void 0===t[n]&&(t[n]=e[n])}const ae=new WeakMap;function ce(t){const e=se();let n=ae.get(e);return n||(n=function(t){let e=!1;return async()=>{await Promise.resolve(),e||(e=!0,Promise.resolve().then((()=>e=!1)),t())}}(e.render.bind(e,!1)),ae.set(e,n),e.willDestroy.push(qt.bind(null,n))),Xt(t,n)}class he{constructor(t,e,n,o,r){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,this.props=e,this.parentKey=r,this.level=o?o.level+1:0;const i=t.defaultProps;e=Object.assign({},e),i&&le(e,i);const s=o&&o.childEnv||n.env;this.childEnv=s;for(const t in e){const n=e[t];n&&"object"==typeof n&&n[Dt]&&(e[t]=ce(n))}this.component=new t(e,s,this),this.renderFn=n.getTemplate(t.template).bind(this.component,this.component,this),this.component.setup(),ie=null}mountComponent(t,e){const n=new Ct(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 Et({node:this,error:t})}0===this.status&&this.fiber===t&&t.render()}async render(t){let e=this.fiber;if(e&&(e.root.locked||!0===e.bdom)&&(await Promise.resolve(),e=this.fiber),e){if(!e.bdom&&!kt.has(e))return void(t&&(e.deep=t));t=t||e.deep}else if(!this.bdom)return;const n=function(t){let e=t.fiber;if(e){let t=e.root;return t.locked=!0,t.setCounter(t.counter+1-Tt(e.children)),t.locked=!1,e.children=[],e.childrenMap={},e.bdom=null,kt.has(e)&&(kt.delete(e),kt.delete(t),e.appliedToDom=!1),e}const n=new St(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||n.render())}destroy(){let t=1===this.status;this._destroy(),t&&this.bdom.remove()}_destroy(){const t=this.component;if(1===this.status)for(let e of this.willUnmount)e.call(t);for(let t of Object.values(this.children))t._destroy();if(this.willDestroy.length)try{for(let e of this.willDestroy)e.call(t)}catch(t){Et({error:t,node:this})}this.status=2}async updateAndRender(t,e){const n=t;t=Object.assign({},t);const o=function(t,e){let n=t.fiber;return n&&(Tt(n.children),n.root=null),new _t(t,e)}(this,e);this.fiber=o;const r=this.component,i=r.constructor.defaultProps;i&&le(t,i),ie=this;for(const e in t){const n=t[e];n&&"object"==typeof n&&n[Dt]&&(t[e]=ce(n))}ie=null;const s=Promise.all(this.willUpdateProps.map((e=>e.call(r,t))));if(await s,o!==this.fiber)return;r.props=t,this.props=n,o.render();const l=e.root;this.willPatch.length&&l.willPatch.push(o),this.patched.length&&l.patched.push(o)}updateDom(){if(this.fiber)if(this.bdom===this.fiber.bdom)for(let t in this.children){this.children[t].updateDom()}else this.bdom.patch(this.fiber.bdom,!1),this.fiber.appliedToDom=!0,this.fiber=null}firstNode(){const t=this.bdom;return t?t.firstNode():void 0}mount(t,e){const n=this.fiber.bdom;this.bdom=n,n.mount(t,e),this.status=1,this.fiber.appliedToDom=!0,this.children=this.fiber.childrenMap,this.fiber=null}moveBefore(t,e){this.bdom.moveBefore(t?t.bdom:null,e)}patch(){this.fiber&&this.fiber.parent&&this._patch()}_patch(){let t=!1;for(let e in this.children){t=!0;break}const e=this.fiber;this.children=e.childrenMap,this.bdom.patch(e.bdom,t),e.appliedToDom=!0,this.fiber=null}beforeRemove(){this._destroy()}remove(){this.bdom.remove()}get name(){return this.component.constructor.name}get subscriptions(){const t=ae.get(this);return t?(e=t,[...Ut.get(e)||[]].map((t=>{const e=zt.get(t);return{target:t,keys:e?[...e.keys()]:[]}}))):[];var e}}const ue=Symbol("timeout");function de(t,e){const n=new Error(`The following error occurred in ${e}: `),o=new Error(e+"'s promise hasn't resolved after 3 seconds"),r=se();return(...i)=>{try{const s=t(...i);if(s instanceof Promise){if("onWillStart"===e||"onWillUpdateProps"===e){const t=r.fiber;Promise.race([s,new Promise((t=>setTimeout((()=>t(ue)),3e3)))]).then((e=>{e===ue&&r.fiber===t&&console.warn(o)}))}return s.catch((t=>{throw n.cause=t,t instanceof Error&&(n.message+=`"${t.message}"`),n}))}return s}catch(t){throw t instanceof Error&&(n.message+=`"${t.message}"`),n}}}function fe(t){const e=se(),n=e.app.dev?de:t=>t;e.mounted.push(n(t.bind(e.component),"onMounted"))}function pe(t){const e=se(),n=e.app.dev?de:t=>t;e.patched.push(n(t.bind(e.component),"onPatched"))}function me(t){const e=se(),n=e.app.dev?de:t=>t;e.willUnmount.unshift(n(t.bind(e.component),"onWillUnmount"))}class be{constructor(t,e,n){this.props=t,this.env=e,this.__owl__=n}setup(){}render(t=!1){this.__owl__.render(!0===t)}}be.template="";const ge=z("").constructor;class ye extends ge{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 ve extends be{setup(){const t=this.__owl__,e=t.renderFn;t.renderFn=()=>new ye(this.props.target,e()),me((()=>{t.bdom&&t.bdom.remove()}))}}ve.template="__portal__",ve.props={target:{type:String},slots:!0};const we=t=>Array.isArray(t),xe=t=>"object"!=typeof t,ke=t=>"object"==typeof t&&t&&"value"in t;function $e(t){return"object"==typeof t&&"optional"in t&&t.optional||!1}function Ne(t){return"*"===t||!0===t?"value":t.name.toLowerCase()}function Ee(t){return xe(t)?Ne(t):we(t)?t.map(Ee).join(" or "):ke(t)?String(t.value):"element"in t?`list of ${Ee({type:t.element,optional:!1})}s`:"shape"in t?"object":Ee(t.type||"*")}function Ae(t,e){var n;Array.isArray(e)&&(n=e,e=Object.fromEntries(n.map((t=>t.endsWith("?")?[t.slice(0,-1),{optional:!0}]:[t,{type:"*",optional:!1}]))));let o=[];for(let n in t)if(n in e){let r=Te(n,t[n],e[n]);r&&o.push(r)}else"*"in e||o.push(`unknown key '${n}'`);for(let n in e){const r=e[n];if("*"!==n&&!$e(r)&&!(n in t)){const t="object"==typeof r&&!Array.isArray(r);let e="*"===r||(t&&"type"in r?"*"===r.type:t)?"":` (should be a ${Ee(r)})`;o.push(`'${n}' is missing${e}`)}}return o}function Te(t,e,n){if(void 0===e)return $e(n)?null:`'${t}' is undefined (should be a ${Ee(n)})`;if(xe(n))return function(t,e,n){if("function"==typeof n)if("object"==typeof e){if(!(e instanceof n))return`'${t}' is not a ${Ne(n)}`}else if(typeof e!==n.name.toLowerCase())return`'${t}' is not a ${Ne(n)}`;return null}(t,e,n);if(ke(n))return e===n.value?null:`'${t}' is not equal to '${n.value}'`;if(we(n)){return n.find((n=>!Te(t,e,n)))?null:`'${t}' is not a ${Ee(n)}`}let o=null;if("element"in n)o=function(t,e,n){if(!Array.isArray(e))return`'${t}' is not a list of ${Ee(n)}s`;for(let o=0;o<e.length;o++){const r=Te(`${t}[${o}]`,e[o],n);if(r)return r}return null}(t,e,n.element);else if("shape"in n&&!o)if("object"!=typeof e||Array.isArray(e))o=`'${t}' is not an object`;else{const r=Ae(e,n.shape);r.length&&(o=`'${t}' has not the correct shape (${r.join(", ")})`)}return"type"in n&&!o&&(o=Te(t,e,n.type)),"validate"in n&&!o&&(o=n.validate(e)?null:`'${t}' is not valid`),o}const _e=Object.create;function Se(t){const e=t.__owl__.component,n=_e(e);for(let e in t)n[e]=t[e];return n}const Ce=Symbol("isBoundary");class De{constructor(t,e,n,o){this.fn=t,this.ctx=Se(e),this.component=n,this.node=o}evaluate(){return this.fn.call(this.component,this.ctx,this.node)}toString(){return this.evaluate().toString()}}let Le=new WeakMap;const Be=WeakMap.prototype.get,Oe=WeakMap.prototype.set;function Re(t,e,n){const o="string"!=typeof t?t:n.constructor.components[t];if(!o)return;const r=o.props;if(!r)return void(n.__owl__.app.warnIfNoStaticProps&&console.warn(`Component '${o.name}' does not have a static props description`));const i=o.defaultProps;if(i){let t=t=>Array.isArray(r)?r.includes(t):t in r&&!("*"in r)&&!$e(r[t]);for(let e in i)if(t(e))throw new Error(`A default value cannot be defined for a mandatory prop (name: '${e}', component: ${o.name})`)}const s=Ae(e,r);if(s.length)throw new Error(`Invalid props for component '${o.name}': `+s.join(", "))}const Ie={withDefault:function(t,e){return null==t||!1===t?e:t},zero:Symbol("zero"),isBoundary:Ce,callSlot:function(t,e,n,o,i,s,l){n=n+"__slot_"+o;const a=t.props.slots||{},{__render:c,__ctx:h,__scope:u}=a[o]||{},d=_e(h||{});u&&(d[u]=s);const f=c?c.call(h.__owl__.component,d,e,n):null;if(l){let s=void 0,a=void 0;return f?s=i?r(o,f):f:a=l.call(t.__owl__.component,t,e,n),O([s,a])}return f||z("")},capture:Se,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(Ce);){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:Re,LazyValue:De,safeOutput:function(t,e){if(void 0===t)return e?r("default",e):r("undefined",z(""));let n,o;switch(typeof t){case"object":t instanceof re?(n="string_safe",o=wt(t)):t instanceof De?(n="lazy_value",o=t.evaluate()):t instanceof String?(n="string_unsafe",o=z(t)):(n="block_safe",o=t);break;case"string":n="string_unsafe",o=z(t);break;default:n="string_unsafe",o=z(String(t))}return r(n,o)},bind:function(t,e){let n=t.__owl__.component,o=Be.call(Le,n);o||(o=new WeakMap,Oe.call(Le,n,o));let r=Be.call(o,e);return r||(r=e.bind(n),Oe.call(o,e,r)),r},createCatcher:function(t){const e=Object.keys(t).length;class n{constructor(t,e){this.handlerFns=[],this.afterNode=null,this.child=t,this.handlerData=e}mount(e,n){this.parentEl=e,this.child.mount(e,n),this.afterNode=document.createTextNode(""),e.insertBefore(this.afterNode,n),this.wrapHandlerData();for(let n in t){const o=t[n],r=$(n);this.handlerFns[o]=r,r.setup.call(e,this.handlerData[o])}}wrapHandlerData(){for(let t=0;t<e;t++){let e=this.handlerData[t],n=e.length-2,o=e[n];const r=this;e[n]=function(t){const e=t.target;let n=r.child.firstNode();const i=r.afterNode;for(;n!==i;){if(n.contains(e))return o.call(this,t);n=n.nextSibling}}}}moveBefore(t,e){this.child.moveBefore(t?t.child:null,e),this.parentEl.insertBefore(this.afterNode,e)}patch(t,n){if(this!==t){this.handlerData=t.handlerData,this.wrapHandlerData();for(let t=0;t<e;t++)this.handlerFns[t].update.call(this.parentEl,this.handlerData[t]);this.child.patch(t.child,n)}}beforeRemove(){this.child.beforeRemove()}remove(){for(let t=0;t<e;t++)this.handlerFns[t].remove.call(this.parentEl);this.child.remove(),this.afterNode.remove()}firstNode(){return this.child.firstNode()}toString(){return this.child.toString()}}return function(t,e){return new n(t,e)}},markRaw:Ft},Pe={text:z,createBlock:tt,list:pt,multi:O,html:wt,toggler:r,comment:K};class je{constructor(t={}){this.rawTemplates=Object.create(Me),this.templates={},this.Portal=ve,this.dev=t.dev||!1,this.translateFn=t.translateFn,this.translatableAttributes=t.translatableAttributes,t.templates&&this.addTemplates(t.templates)}static registerTemplate(t,e){Me[t]=e}addTemplate(t,e){if(t in this.rawTemplates){const n=this.rawTemplates[t];if(("string"==typeof n?n:n instanceof Element?n.outerHTML:n.toString())===("string"==typeof e?e:e.outerHTML))return;throw new Error(`Template ${t} already defined with different content`)}this.rawTemplates[t]=e}addTemplates(t){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 i=Number(r[0]),s=t.split("\n")[i-1],l=e.exec(o);if(s&&l){const t=Number(l[0])-1;s[t]&&(n+=`\nThe error might be located at xml line ${i} column ${t}\n${s}\n${"-".repeat(t-1)}^`)}}}throw new Error(n)}return e}(t);for(const e of t.querySelectorAll("[t-name]")){const t=e.getAttribute("t-name");this.addTemplate(t,e)}}}getTemplate(t){if(!(t in this.templates)){const e=this.rawTemplates[t];if(void 0===e){let e="";try{e=` (for component "${se().component.constructor.name}")`}catch{}throw new Error(`Missing template: "${t}"${e}`)}const n="function"==typeof e&&!(e instanceof Element)?e:this._compileTemplate(t,e),o=this.templates;this.templates[t]=function(e,n){return o[t].call(this,e,n)};const r=n(this,Pe,Ie);this.templates[t]=r}return this.templates[t]}_compileTemplate(t,e){throw new Error("Unable to compile a template. Please use owl full build instead")}callTemplate(t,e,n,o,i){return r(e,this.getTemplate(e).call(t,n,o,i))}}const Me={};function We(...t){const e="__template__"+We.nextId++,n=String.raw(...t);return Me[e]=n,e}We.nextId=1,je.registerTemplate("__portal__",(function(t,e,n){let{callSlot:o}=n;return function(t,e,n=""){return o(t,e,n,"default",!1,null)}}));const Fe="true,false,NaN,null,undefined,debugger,console,window,in,instanceof,new,function,return,this,eval,void,Math,RegExp,Array,Object,Date".split(","),Ve=Object.assign(Object.create(null),{and:"&&",or:"||",gt:">",gte:">=",lt:"<",lte:"<="}),ze=Object.assign(Object.create(null),{"{":"LEFT_BRACE","}":"RIGHT_BRACE","[":"LEFT_BRACKET","]":"RIGHT_BRACKET",":":"COLON",",":"COMMA","(":"LEFT_PAREN",")":"RIGHT_PAREN"}),Ke="...,.,===,==,+,!==,!=,!,||,&&,>=,>,<=,<,?,-,*,/,%,typeof ,=>,=,;,in ,new ,|,&,^,~".split(",");const He=[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 Ke)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 Ve?{type:"OPERATOR",value:Ve[e],size:e.length}:{type:"SYMBOL",value:e}}return!1},function(t){const e=t[0];return!(!e||!(e in ze))&&{type:ze[e],value:e}}];const Ue=t=>t&&("LEFT_BRACE"===t.type||"COMMA"===t.type),qe=t=>t&&("RIGHT_BRACE"===t.type||"COMMA"===t.type);function Ge(t){const e=new Set,n=function(t){const e=[];let n,o=!0,r=t;try{for(;o;)if(r=r.trim(),r){for(let t of He)if(o=t(r),o){e.push(o),r=r.slice(o.size||o.value.length);break}}else o=!1}catch(t){n=t}if(r.length||n)throw new Error(`Tokenizer error: could not tokenize \`${t}\``);return e}(t);let o=0,r=[];for(;o<n.length;){let t=n[o],i=n[o-1],s=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&&!Fe.includes(t.value);if("SYMBOL"!==t.type||Fe.includes(t.value)||i&&("LEFT_BRACE"===l&&Ue(i)&&qe(s)&&(n.splice(o+1,0,{type:"COLON",value:":"},{...t}),s=n[o+1]),"OPERATOR"===i.type&&"."===i.value?a=!1:"LEFT_BRACE"!==i.type&&"COMMA"!==i.type||s&&"COLON"===s.type&&(a=!1)),"TEMPLATE_STRING"===t.type&&(t.value=t.replace((t=>Ye(t)))),s&&"OPERATOR"===s.type&&"=>"===s.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}const Xe=new Map([["in "," in "]]);function Ye(t){return Ge(t).map((t=>Xe.get(t.value)||t.value)).join("")}const Ze=/\{\{.*?\}\}|\#\{.*?\}/g;function Je(t,e){let n=t.match(Ze);return n&&n[0].length===t.length?`(${e(t.slice(2,"{"===n[0][0]?-2:-1))})`:"`"+t.replace(Ze,(t=>"${"+e(t.slice(2,"{"===t[0]?-2:-1))+"}"))+"`"}function Qe(t){return Je(t,Ye)}const tn=document.implementation.createDocument(null,null,null),en=new Set(["stop","capture","prevent","self","synthetic"]);let nn={};function on(t=""){return nn[t]=(nn[t]||0)+1,t+nn[t]}class rn{constructor(t,e){this.dynamicTagName=null,this.isRoot=!1,this.hasDynamicChildren=!1,this.children=[],this.data=[],this.childNumber=0,this.parentVar="",this.id=rn.nextBlockId++,this.varName="b"+this.id,this.blockName="block"+this.id,this.target=t,this.type=e}insertData(t,e="d"){const n=on(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=tn.createElement("t");return t.appendChild(this.dom),t.innerHTML}}function sn(t,e){return Object.assign({block:null,index:0,forceNewBlock:!0,translate:t.translate,tKeyExpr:null,nameSpace:t.nameSpace,tModelSelectedExpr:t.tModelSelectedExpr},e)}rn.nextBlockId=1;class ln{constructor(t,e){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,this.on=e||null}addLine(t,e){const n=new Array(this.indentLevel+2).join(" ");void 0===e?this.code.push(n+t):this.code.splice(e,0,n+t)}generateCode(){let t=[];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 an=["label","title","placeholder","alt"],cn=/^(\s*)([\s\S]+?)(\s*)$/;class hn{constructor(t,e){if(this.blocks=[],this.nextBlockId=1,this.isDebug=!1,this.targets=[],this.target=new ln("template"),this.translatableAttributes=an,this.staticDefs=[],this.helpers=new Set,this.translateFn=e.translateFn||(t=>t),e.translatableAttributes){const t=new Set(an);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,rn.nextBlockId=1,nn={},this.compileAST(t,{block:null,index:0,forceNewBlock:!1,isLast:!0,translate:!0,tKeyExpr:null});let e=[" let { text, createBlock, list, multi, html, toggler, comment } = bdom;"];this.helpers.size&&e.push(`let { ${[...this.helpers].join(", ")} } = helpers;`),this.templateName&&e.push(`// Template name: "${this.templateName}"`);for(let{id:t,expr:n}of this.staticDefs)e.push(`const ${t} = ${n};`);if(this.blocks.length){e.push("");for(let t of this.blocks)if(t.dom){let n=t.asXmlString();n=n.replace(/`/g,"\\`"),t.dynamicTagName?(n=n.replace(/^<\w+/,`<\${tag || '${t.dom.nodeName}'}`),n=n.replace(/\w+>$/,`\${tag || '${t.dom.nodeName}'}>`),e.push(`let ${t.blockName} = tag => createBlock(\`${n}\`);`)):e.push(`let ${t.blockName} = createBlock(\`${n}\`);`)}}if(this.targets.length)for(let t of this.targets)e.push(""),e=e.concat(t.generateCode());e.push(""),e=e.concat("return "+this.target.generateCode());const n=e.join("\n ");if(this.isDebug){const t="[Owl Debug]\n"+n;console.log(t)}return n}compileInNewTarget(t,e,n,o){const r=on(t),i=this.target,s=new ln(r,o);return this.targets.push(s),this.target=s,this.compileAST(e,sn(n)),this.target=i,r}addLine(t,e){this.target.addLine(t,e)}define(t,e){this.addLine(`const ${t} = ${e};`)}insertAnchor(t,e=t.children.length){const n="block-child-"+e,o=tn.createElement(n);t.insert(o)}createBlock(t,e,n){const o=this.target.hasRoot,r=new rn(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.target.on&&(o=this.wrapWithEventCatcher(o,this.target.on)),this.addLine(`return ${o};`)):this.define(e.varName,o)}captureExpression(t,e=!1){if(!e&&!t.includes("=>"))return Ye(t);const n=Ge(t),o=new Map;return n.map((t=>{if(t.varName&&!t.isLocal){if(!o.has(t.varName)){const e=on("v");o.set(t.varName,e),this.define(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(${Ye(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=tn.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=cn.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?tn.createTextNode:tn.createComment;n.insert(e.call(tn,r))}}generateHandlerCode(t,e){const n=t.split(".").slice(1).map((t=>{if(!en.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 i=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=on("tag");this.define(e,Ye(t.dynamicTag)),n.dynamicTagName=e}const s={},l=t.ns||e.nameSpace;l&&r&&(s["block-ns"]=l);for(let o in t.attrs){let r,i;if(o.startsWith("t-attf")){r=Qe(t.attrs[o]);const e=n.insertData(r,"attr");i=o.slice(7),s["block-attribute-"+e]=i}else if(o.startsWith("t-att")){r=Ye(t.attrs[o]);const e=n.insertData(r,"attr");"t-att"===o?s["block-attributes"]=String(e):(i=o.slice(6),s["block-attribute-"+e]=i)}else this.translatableAttributes.includes(o)?s[o]=this.translateFn(t.attrs[o]):(r=`"${t.attrs[o]}"`,i=o,s[o]=t.attrs[o]);if("value"===i&&e.tModelSelectedExpr){s["block-attribute-"+n.insertData(`${e.tModelSelectedExpr} === ${r}`,"attr")]="selected"}}for(let e in t.on){const o=this.generateHandlerCode(e,t.on[e]);s["block-handler-"+n.insertData(o,"hdlr")]=e}if(t.ref){this.target.hasRef=!0;if(Ze.test(t.ref)){const e=Je(t.ref,(t=>this.captureExpression(t,!0))),o=n.insertData(`(el) => refs[${e}] = el`,"ref");s["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;s["block-ref"]=String(o),t[1]=`multiRefSetter(refs, \`${e}\`)`}else{let t=on("ref");this.target.refInfo[e]=[t,`(el) => refs[\`${e}\`] = el`];const o=n.data.push(t)-1;s["block-ref"]=String(o)}}}let a;if(t.model){const{hasDynamicChildren:e,baseExpr:o,expr:r,eventType:i,shouldNumberize:l,shouldTrim:c,targetAttr:h,specialInitTargetAttr:u}=t.model,d=Ye(o),f=on("bExpr");this.define(f,d);const p=Ye(r),m=on("expr");this.define(m,p);const b=`${f}[${m}]`;let g;if(u)g=n.insertData(`${b} === '${s[h]}'`,"attr"),s["block-attribute-"+g]=u;else if(e){a=""+on("bValue"),this.define(a,b)}else g=n.insertData(""+b,"attr"),s["block-attribute-"+g]=h;this.helpers.add("toNumber");let y="ev.target."+h;y=c?y+".trim()":y,y=l?`toNumber(${y})`:y;const v=`[(ev) => { ${b} = ${y}; }]`;g=n.insertData(v,"hdlr"),s["block-handler-"+g]=i}const c=tn.createElement(t.tag);for(const[t,e]of Object.entries(s))"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 i=t.content[o],s=sn(e,{block:n,index:n.childNumber,forceNewBlock:!1,isLast:e.isLast&&o===r.length-1,tKeyExpr:e.tKeyExpr,nameSpace:l,tModelSelectedExpr:a});this.compileAST(i,s)}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=i;n<t.length&&(!t[n].trimStart().startsWith(`const ${o.varName} `)||(t[n]=t[n].replace("const "+o.varName,o.varName),o=e.shift(),o));n++);this.addLine(`let ${n.children.map((t=>t.varName))};`,i)}}compileTEsc(t,e){let n,{block:o,forceNewBlock:r}=e;if("0"===t.expr?(this.helpers.add("zero"),n="ctx[zero]"):(n=Ye(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=tn.createElement("block-text-"+t);o.insert(e)}}compileTOut(t,e){let n,{block:o}=e;if(o&&this.insertAnchor(o),o=this.createBlock(o,"html",e),"0"===t.expr)this.helpers.add("zero"),n="ctx[zero]";else if(t.body){let o=null;o=rn.nextBlockId;const r=sn(e);this.compileAST({type:3,content:t.body},r),this.helpers.add("safeOutput"),n=`safeOutput(${Ye(t.expr)}, b${o})`}else this.helpers.add("safeOutput"),n=`safeOutput(${Ye(t.expr)})`;this.insertBlock(n,o,e)}compileTIfBranch(t,e,n){this.target.indentLevel++;let o=e.children.length;this.compileAST(t,sn(n,{block:e,index:n.index})),e.children.length>o&&this.insertAnchor(e,o),this.target.indentLevel--}compileTIf(t,e,n){let{block:o,forceNewBlock:r}=e;const i=this.target.code.length,s=!o||"multi"!==o.type&&r;if(o&&(o.hasDynamicChildren=!0),(!o||"multi"!==o.type&&r)&&(o=this.createBlock(o,"multi",e)),this.addLine(`if (${Ye(t.condition)}) {`),this.compileTIfBranch(t.content,o,e),t.tElif)for(let n of t.tElif)this.addLine(`} else if (${Ye(n.condition)}) {`),this.compileTIfBranch(n.content,o,e);if(t.tElse&&(this.addLine("} else {"),this.compileTIfBranch(t.tElse,o,e)),this.addLine("}"),s){if(o.children.length){const t=this.target.code,e=o.children.slice();let n=e.shift();for(let o=i;o<t.length&&(!t[o].trimStart().startsWith(`const ${n.varName} `)||(t[o]=t[o].replace("const "+n.varName,n.varName),n=e.shift(),n));o++);this.addLine(`let ${o.children.map((t=>t.varName))};`,i)}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,i="k_block"+n.id,s="l_block"+n.id,l="c_block"+n.id;let a;this.helpers.add("prepareList"),this.define(`[${i}, ${r}, ${s}, ${l}]`,`prepareList(${Ye(t.collection)});`),this.dev&&this.define("keys"+n.id,"new Set()"),this.addLine(`for (let ${o} = 0; ${o} < ${s}; ${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\`] = ${i}[${o}];`),this.define("key"+this.target.loopLevel,t.key?Ye(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=on(),this.define("memo"+a,Ye(t.memo)),this.define("vnode"+a,`cache[key${this.target.loopLevel}];`),this.addLine(`if (vnode${a}) {`),this.target.indentLevel++,this.addLine(`if (shallowEqual(vnode${a}.memo, memo${a})) {`),this.target.indentLevel++,this.addLine(`${l}[${o}] = vnode${a};`),this.addLine(`nextCache[key${this.target.loopLevel}] = vnode${a};`),this.addLine("continue;"),this.target.indentLevel--,this.addLine("}"),this.target.indentLevel--,this.addLine("}"));const c=sn(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=on("tKey_");this.define(n,Ye(t.expr)),e=sn(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 i=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 s=0;for(let o=0,r=t.content.length;o<r;o++){const i=t.content[o],l=6===i.type,a=sn(e,{block:n,index:s,forceNewBlock:!l,preventRoot:e.preventRoot,isLast:e.isLast&&o===r-1});this.compileAST(i,a),l||s++}if(r){if(n.hasDynamicChildren&&n.children.length){const t=this.target.code,e=n.children.slice();let o=e.shift();for(let n=i;n<t.length&&(!t[n].trimStart().startsWith(`const ${o.varName} `)||(t[n]=t[n].replace("const "+o.varName,o.varName),o=e.shift(),o));n++);this.addLine(`let ${n.children.map((t=>t.varName))};`,i)}const t=n.children.map((t=>t.varName)).join(", ");this.insertBlock(`multi([${t}])`,n,e)}}compileTCall(t,e){let{block:n,forceNewBlock:o}=e,r=e.ctxVar||"ctx";if(t.context&&(r=on("ctx"),this.addLine(`let ${r} = ${Ye(t.context)};`)),t.body){this.addLine(`${r} = Object.create(${r});`),this.addLine(r+"[isBoundary] = 1;"),this.helpers.add("isBoundary");const n=rn.nextBlockId,o=sn(e,{preventRoot:!0,ctxVar:r});this.compileAST({type:3,content:t.body},o),n!==rn.nextBlockId&&(this.helpers.add("zero"),this.addLine(`${r}[zero] = b${n};`))}const i=Ze.test(t.name),s=i?Qe(t.name):"`"+t.name+"`";n&&(o||this.insertAnchor(n));const l=`key + \`${this.generateComponentKey()}\``;if(i){const t=on("template");this.staticDefs.find((t=>"call"===t.id))||this.staticDefs.push({id:"call",expr:"app.callTemplate.bind(app)"}),this.define(t,s),n=this.createBlock(n,"multi",e),this.insertBlock(`call(this, ${t}, ${r}, node, ${l})`,n,{...e,forceNewBlock:!n})}else{const t=on("callTemplate_");this.staticDefs.push({id:t,expr:`app.getTemplate(${s})`}),n=this.createBlock(n,"multi",e),this.insertBlock(`${t}.call(this, ${r}, node, ${l})`,n,{...e,forceNewBlock:!n})}t.body&&!e.isLast&&this.addLine(`${r} = ${r}.__proto__;`)}compileTCallBlock(t,e){let{block:n,forceNewBlock:o}=e;n&&(o||this.insertAnchor(n)),n=this.createBlock(n,"multi",e),this.insertBlock(Ye(t.name),n,{...e,forceNewBlock:!n})}compileTSet(t,e){this.target.shouldProtectScope=!0,this.helpers.add("isBoundary").add("withDefault");const n=t.value?Ye(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, this, node)`;r=t.value?r?`withDefault(${n}, ${r})`:n:r,this.addLine(`ctx[\`${t.name}\`] = ${r};`)}else{let o;o=t.defaultValue?t.value?`withDefault(${n}, \`${t.defaultValue}\`)`:`\`${t.defaultValue}\``:n,this.helpers.add("setContextValue"),this.addLine(`setContextValue(${e.ctxVar||"ctx"}, "${t.name}", ${o});`)}}generateComponentKey(){const t=[on("__")];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){return Object.entries(t).map((([t,e])=>this.formatProp(t,e)))}getPropString(t,e){let n=`{${t.join(",")}}`;return e&&(n=`Object.assign({}, ${Ye(e)}${t.length?", "+n:""})`),n}compileComponent(t,e){let{block:n}=e;const o="slots"in(t.props||{}),r=t.props?this.formatPropObject(t.props):[];let i="";if(t.slots){let n="ctx";!this.target.loopLevel&&this.hasSafeContext||(n=on("ctx"),this.helpers.add("capture"),this.define(n,"capture(ctx)"));let o=[];for(let r in t.slots){const i=t.slots[r],s=[];if(i.content){const t=this.compileInNewTarget("slot",i.content,e,i.on);s.push(`__render: ${t}, __ctx: ${n}`)}const l=t.slots[r].scope;l&&s.push(`__scope: "${l}"`),t.slots[r].attrs&&s.push(...this.formatPropObject(t.slots[r].attrs));const a=`{${s.join(", ")}}`;o.push(`'${r}': ${a}`)}i=`{${o.join(", ")}}`}!i||t.dynamicProps||o||(this.helpers.add("markRaw"),r.push(`slots: markRaw(${i})`));let s,l=this.getPropString(r,t.dynamicProps);(i&&(t.dynamicProps||o)||this.dev)&&(s=on("props"),this.define(s,l),l=s),i&&(t.dynamicProps||o)&&(this.helpers.add("markRaw"),this.addLine(`${s}.slots = markRaw(Object.assign(${i}, ${s}.slots))`));const a=this.generateComponentKey();let c;t.isDynamic?(c=on("Comp"),this.define(c,Ye(t.name))):c=`\`${t.name}\``,this.dev&&this.addLine(`helpers.validateProps(${c}, ${s}, ctx);`),n&&(!1===e.forceNewBlock||e.tKeyExpr)&&this.insertAnchor(n);let h=`key + \`${a}\``;e.tKeyExpr&&(h=`${e.tKeyExpr} + ${h}`);let u=on("comp");this.staticDefs.push({id:u,expr:`app.createComponent(${t.isDynamic?null:c}, ${!t.isDynamic}, ${!!t.slots}, ${!!t.dynamicProps}, ${!t.props&&!t.dynamicProps})`});let d=`${u}(${l}, ${h}, node, this, ${t.isDynamic?c:null})`;t.isDynamic&&(d=`toggler(${c}, ${d})`),t.on&&(d=this.wrapWithEventCatcher(d,t.on)),n=this.createBlock(n,"multi",e),this.insertBlock(d,n,e)}wrapWithEventCatcher(t,e){this.helpers.add("createCatcher");let n=on("catcher"),o={},r=[];for(let t in e){let n=on("hdlr"),i=r.push(n)-1;o[t]=i;const s=this.generateHandlerCode(t,e[t]);this.define(n,s)}return this.staticDefs.push({id:n,expr:`createCatcher(${JSON.stringify(o)})`}),`${n}(${t}, [${r.join(",")}])`}compileTSlot(t,e){this.helpers.add("callSlot");let n,o,{block:r}=e,i=!1;t.name.match(Ze)?(i=!0,o=Qe(t.name)):o="'"+t.name+"'";const s=t.attrs?t.attrs["t-props"]:null;t.attrs&&delete t.attrs["t-props"];const l=t.attrs?this.formatPropObject(t.attrs):[],a=this.getPropString(l,s);if(t.defaultContent){n=`callSlot(ctx, node, key, ${o}, ${i}, ${a}, ${this.compileInNewTarget("defaultContent",t.defaultContent,e)})`}else if(i){let t=on("slot");this.define(t,o),n=`toggler(${t}, callSlot(ctx, node, key, ${t}, ${i}, ${a}))`}else n=`callSlot(ctx, node, key, ${o}, ${i}, ${a})`;t.on&&(n=this.wrapWithEventCatcher(n,t.on)),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.staticDefs.find((t=>"Portal"===t.id))||this.staticDefs.push({id:"Portal",expr:"app.Portal"});let{block:n}=e;const o=this.compileInNewTarget("slot",t.content,e),r=this.generateComponentKey();let i="ctx";!this.target.loopLevel&&this.hasSafeContext||(i=on("ctx"),this.helpers.add("capture"),this.define(i,"capture(ctx)"));let s=on("comp");this.staticDefs.push({id:s,expr:"app.createComponent(null, false, true, false, false)"});const l=`${s}({target: ${Ye(t.target)},slots: {'default': {__render: ${o}, __ctx: ${i}}}}, key + \`${r}\`, node, ctx, Portal)`;n&&this.insertAnchor(n),n=this.createBlock(n,"multi",e),this.insertBlock(l,n,{...e,forceNewBlock:!1})}}const un=new WeakMap;function dn(t){if("string"==typeof t){return fn(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 i=Number(r[0]),s=t.split("\n")[i-1],l=e.exec(o);if(s&&l){const t=Number(l[0])-1;s[t]&&(n+=`\nThe error might be located at xml line ${i} column ${t}\n${s}\n${"-".repeat(t-1)}^`)}}}throw new Error(n)}return e}(`<t>${t}</t>`).firstChild)}let e=un.get(t);return e||(e=fn(t.cloneNode(!0)),un.set(t,e)),e}function fn(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),i=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(i).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 pn(t,{inPreTag:!1,inSVG:!1})||{type:0,value:""}}function pn(t,e){return t instanceof Element?function(t,e){if(t.hasAttribute("t-debug"))return t.removeAttribute("t-debug"),{type:12,content:pn(t,e)};if(t.hasAttribute("t-log")){const n=t.getAttribute("t-log");return t.removeAttribute("t-log"),{type:13,expr:n,content:pn(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 i=t.getAttribute("t-key");if(!i)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 s=t.getAttribute("t-memo")||"";t.removeAttribute("t-memo");const l=pn(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:s,key:i,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=pn(t,e)||{type:0,value:""};let r=t.nextElementSibling;const i=[];for(;r&&r.hasAttribute("t-elif");){const t=r.getAttribute("t-elif");r.removeAttribute("t-elif");const n=pn(r,e),o=r.nextElementSibling;r.remove(),r=o,n&&i.push({condition:t,content:n})}let s=null;r&&r.hasAttribute("t-else")&&(r.removeAttribute("t-else"),s=pn(r,e),r.remove());return{type:5,condition:n,content:o,tElif:i.length?i:null,tElse:s}}(t,e)||function(t,e){if(!t.hasAttribute("t-portal"))return null;const n=t.getAttribute("t-portal");t.removeAttribute("t-portal");const o=pn(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"),o=t.getAttribute("t-call-context");if(t.removeAttribute("t-call"),t.removeAttribute("t-call-context"),"t"!==t.tagName){const r=pn(t,e),i={type:7,name:n,body:null,context:o};if(r&&2===r.type)return r.content=[i],r;if(r&&11===r.type)return{...r,slots:{default:{content:i,scope:null,on:null,attrs:null}}}}const r=xn(t,e);return{type:7,name:n,body:r.length?r:null,context:o}}(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 i=pn(t,e);if(!i)return o;if(2===i.type)return{...i,ref:r,content:[o]};if(11===i.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=pn(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:pn(t,e)}}(t,e)||function(t,e){if(!t.hasAttribute("t-slot"))return null;const n=t.getAttribute("t-slot");t.removeAttribute("t-slot");let o=null,r=null;for(let e of t.getAttributeNames()){const n=t.getAttribute(e);e.startsWith("t-on-")?(r=r||{},r[e.slice(5)]=n):(o=o||{},o[e]=n)}return{type:14,name:n,attrs:o,on:r,defaultContent:kn(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 i=pn(t,e);if(!i)return o;if(2===i.type)return o.body=i.content.length?i.content:null,{...i,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 i=t.getAttribute("t-props");t.removeAttribute("t-props");const s=t.getAttribute("t-slot-scope");t.removeAttribute("t-slot-scope");let l=null,a=null;for(let e of t.getAttributeNames()){const n=t.getAttribute(e);if(e.startsWith("t-")){if(!e.startsWith("t-on-")){const t=wn.get(e.split("-").slice(0,2).join("-"));throw new Error(t||"unsupported directive on Component: "+e)}l=l||{},l[e.slice(5)]=n}else a=a||{},a[e]=n}let c=null;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,i=!1;for(;r!==n;){if(r.hasAttribute("t-component")||r.tagName[0]===r.tagName[0].toUpperCase()){i=!0;break}r=r.parentElement}if(i)continue;t.removeAttribute("t-set-slot"),t.remove();const s=pn(t,e);let l=null,a=null,h=null;for(let e of t.getAttributeNames()){const n=t.getAttribute(e);"t-slot-scope"!==e?e.startsWith("t-on-")?(l=l||{},l[e.slice(5)]=n):(a=a||{},a[e]=n):h=n}c=c||{},c[o]={content:s,on:l,attrs:a,scope:h}}const r=kn(n,e);r&&(c=c||{},c.default={content:r,on:l,attrs:null,scope:s})}return{type:11,name:n,isDynamic:r,dynamicProps:i,props:a,slots:c,on:l}}(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=vn.has(n)&&!e.inSVG;e.inSVG=e.inSVG||r;const i=r?"http://www.w3.org/2000/svg":null,s=t.getAttribute("t-ref");t.removeAttribute("t-ref");const l=t.getAttributeNames();let a=null,c=null,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=c||{},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 i,s;if(gn.test(r)){const t=r.lastIndexOf(".");i=r.slice(0,t),s=`'${r.slice(t+1)}'`}else{if(!yn.test(r))throw new Error(`Invalid t-model expression: "${r}" (it should be assignable)`);{const t=r.lastIndexOf("[");i=r.slice(0,t),s=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"),b=o.includes(".number");h={baseExpr:i,expr:s,targetAttr:d?"checked":"value",specialInitTargetAttr:f?"checked":null,eventType:f?"click":c||m?"change":"input",hasDynamicChildren:!1,shouldTrim:o.includes(".trim")&&(p||u),shouldNumberize:b&&(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=a||{},a[o]=r}}}const u=xn(t,e);return{type:2,tag:n,dynamicTag:o,attrs:a,on:c,ref:s,content:u,model:h,ns:i}}(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 i=null;t.textContent!==t.innerHTML&&(i=xn(t,e));return{type:6,name:n,value:o,defaultValue:r,body:i}}(t,e)||function(t,e){if("t"!==t.tagName)return null;return kn(t,e)}(t,e):function(t,e){if(t.nodeType===Node.TEXT_NODE){let n=t.textContent||"";if(!e.inPreTag){if(mn.test(n)&&!n.trim())return null;n=n.replace(bn," ")}return{type:0,value:n}}if(t.nodeType===Node.COMMENT_NODE)return{type:1,value:t.textContent||""};return null}(t,e)}const mn=/[\r\n]/,bn=/\s+/g;const gn=/\.[\w_]+\s*$/,yn=/\[[^\[]+\]\s*$/,vn=new Set(["svg","g","path"]);const wn=new Map([["t-ref","t-ref is no longer supported on components. Consider exposing only the public part of the component's API through a callback prop."],["t-att","t-att makes no sense on component: props are already treated as expressions"],["t-attf","t-attf is not supported on components: use template strings for string interpolation in props"]]);function xn(t,e){const n=[];for(let o of t.childNodes){const t=pn(o,e);t&&(3===t.type?n.push(...t.content):n.push(t))}return n}function kn(t,e){const n=xn(t,e);switch(n.length){case 0:return null;case 1:return n[0];default:return{type:3,content:n}}}class $n{constructor(){this.tasks=new Set,this.frame=0,this.delayedRenders=[],this.requestAnimationFrame=$n.requestAnimationFrame}addFiber(t){this.tasks.add(t.root)}flush(){if(this.delayedRenders.length){let t=this.delayedRenders;this.delayedRenders=[];for(let e of t)e.root&&2!==e.node.status&&e.node.fiber===e&&e.render()}0===this.frame&&(this.frame=this.requestAnimationFrame((()=>{this.frame=0,this.tasks.forEach((t=>this.processFiber(t)));for(let t of this.tasks)2===t.node.status&&this.tasks.delete(t)})))}processFiber(t){if(t.root!==t)return void this.tasks.delete(t);const e=kt.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)}}$n.requestAnimationFrame=window.requestAnimationFrame.bind(window);let Nn=!1;class En extends je{constructor(t,e={}){super(e),this.scheduler=new $n,this.root=null,this.Root=t,e.test&&(this.dev=!0),this.warnIfNoStaticProps=e.warnIfNoStaticProps||!1,!this.dev||e.test||Nn||(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.`),Nn=!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){En.validateTarget(t),this.dev&&Re(this.Root,this.props,{__owl__:{app:this}});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,null,null)}mountNode(t,e,n){const o=new Promise(((e,n)=>{let o=!1;t.mounted.push((()=>{e(t.component),o=!0}));let r=$t.get(t);r||(r=[],$t.set(t,r)),r.unshift((t=>{throw o?console.error(t):n(t),t}))}));return t.mountComponent(e,n),o}destroy(){this.root&&(this.scheduler.flush(),this.root.destroy())}createComponent(t,e,n,o,r){const i=!e;const s=n?(t,e)=>!0:r?(t,e)=>!1:function(t,e){for(let n in t)if(t[n]!==e[n])return!0;return o&&Object.keys(t).length!==Object.keys(e).length},l=he.prototype.updateAndRender,a=he.prototype.initiateRender;return(n,o,r,c,h)=>{let u=r.children,d=u[o];i&&d&&d.component.constructor!==h&&(d=void 0);const f=r.fiber;if(d)(s(d.props,n)||f.deep||d.forceNextRender)&&(d.forceNextRender=!1,l.call(d,n,f));else{if(e){if(!(h=c.constructor.components[t]))throw new Error(`Cannot find the definition of component "${t}"`);if(!(h.prototype instanceof be))throw new Error(`"${t}" is not a Component. It must inherit from the Component class`)}d=new he(h,n,this,r,o),u[o]=d,a.call(d,new _t(d,f))}return f.childrenMap[o]=d,d}}}function An(t,e){const n=Object.create(t),o=Object.getOwnPropertyDescriptors(e);return Object.freeze(Object.defineProperties(n,o))}function Tn(t){const e=se();e.childEnv=An(e.childEnv,t)}En.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")},n.shouldNormalizeDom=!1,n.mainEventHandler=(t,n,o)=>{const{data:r,modifiers:i}=e(t);t=r;let s=!1;if(i.length){let t=!1;const e=n.target===o;for(const o of i)switch(o){case"self":if(t=!0,e)continue;return s;case"prevent":(t&&e||!t)&&n.preventDefault();continue;case"stop":(t&&e||!t)&&n.stopPropagation(),s=!0;continue}}if(Object.hasOwnProperty.call(t,0)){const e=t[0];if("function"!=typeof e)throw new Error(`Invalid handler (expected a function, received: '${e}')`);let o=t[1]?t[1].__owl__:null;o&&1!==o.status||e.call(o?o.component:null,n)}return s};const _n={config:n,mount:xt,patch:function(t,e,n=!1){t.patch(e,n)},remove:function(t,e=!1){e&&t.beforeRemove(),t.remove()},list:pt,multi:O,text:z,toggler:r,createBlock:tt,html:wt,comment:K},Sn={};je.prototype._compileTemplate=function(t,e){return function(t,e={}){const n=dn(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 hn(n,{...e,hasSafeContext:o}).generateCode();return new Function("app, bdom, helpers",r)}(e,{name:t,dev:this.dev,translateFn:this.translateFn,translatableAttributes:this.translatableAttributes})},t.App=En,t.Component=be,t.EventBus=oe,t.__info__=Sn,t.blockDom=_n,t.loadFile=async function(t){const e=await fetch(t);if(!e.ok)throw new Error("Error while fetching xml templates");return await e.text()},t.markRaw=Ft,t.markup=function(t){return new re(t)},t.mount=async function(t,e,n={}){return new En(t,n).mount(e,n)},t.onError=function(t){const e=se();let n=$t.get(e);n||(n=[],$t.set(e,n)),n.push(t.bind(e.component))},t.onMounted=fe,t.onPatched=pe,t.onRendered=function(t){const e=se(),n=e.renderFn,o=e.app.dev?de:t=>t;t=o(t.bind(e.component),"onRendered"),e.renderFn=()=>{const e=n();return t(),e}},t.onWillDestroy=function(t){const e=se(),n=e.app.dev?de:t=>t;e.willDestroy.push(n(t.bind(e.component),"onWillDestroy"))},t.onWillPatch=function(t){const e=se(),n=e.app.dev?de:t=>t;e.willPatch.unshift(n(t.bind(e.component),"onWillPatch"))},t.onWillRender=function(t){const e=se(),n=e.renderFn,o=e.app.dev?de:t=>t;t=o(t.bind(e.component),"onWillRender"),e.renderFn=()=>(t(),n())},t.onWillStart=function(t){const e=se(),n=e.app.dev?de:t=>t;e.willStart.push(n(t.bind(e.component),"onWillStart"))},t.onWillUnmount=me,t.onWillUpdateProps=function(t){const e=se(),n=e.app.dev?de:t=>t;e.willUpdateProps.push(n(t.bind(e.component),"onWillUpdateProps"))},t.reactive=Xt,t.status=function(t){switch(t.__owl__.status){case 0:return"new";case 1:return"mounted";case 2:return"destroyed"}},t.toRaw=Vt,t.useChildSubEnv=Tn,t.useComponent=function(){return ie.component},t.useEffect=function(t,e=(()=>[NaN])){let n,o;fe((()=>{o=e(),n=t(...o)})),pe((()=>{const r=e();r.some(((t,e)=>t!==o[e]))&&(o=r,n&&n(),n=t(...o))})),me((()=>n&&n()))},t.useEnv=function(){return se().component.env},t.useExternalListener=function(t,e,n,o){const r=se(),i=n.bind(r.component);fe((()=>t.addEventListener(e,i,o))),me((()=>t.removeEventListener(e,i,o)))},t.useRef=function(t){const e=se().refs;return{get el(){return e[t]||null}}},t.useState=ce,t.useSubEnv=function(t){const e=se();e.component.env=An(e.component.env,t),Tn(t)},t.validate=function(t,e){let n=Ae(t,e);if(n.length)throw new Error("Invalid object: "+n.join(", "))},t.whenReady=function(t){return new Promise((function(t){"loading"!==document.readyState?t(!0):document.addEventListener("DOMContentLoaded",t,!1)})).then(t||function(){})},t.xml=We,Object.defineProperty(t,"__esModule",{value:!0}),Sn.version="2.0.0-beta-12",Sn.date="2022-06-29T09:13:12.680Z",Sn.hash="6c72e0a",Sn.url="https://github.com/odoo/owl"}(this.owl=this.owl||{});
@@ -82,7 +82,7 @@ export declare class CodeGenerator {
82
82
  compileInNewTarget(prefix: string, ast: AST, ctx: Context, on?: EventHandlers | null): string;
83
83
  addLine(line: string, idx?: number): void;
84
84
  define(varName: string, expr: string): void;
85
- insertAnchor(block: BlockDescription): void;
85
+ insertAnchor(block: BlockDescription, index?: number): void;
86
86
  createBlock(parentBlock: BlockDescription | null, type: BlockType, ctx: Context): BlockDescription;
87
87
  insertBlock(expression: string, block: BlockDescription, ctx: Context): void;
88
88
  /**
@@ -108,6 +108,7 @@ export declare class CodeGenerator {
108
108
  compileTDomNode(ast: ASTDomNode, ctx: Context): void;
109
109
  compileTEsc(ast: ASTTEsc, ctx: Context): void;
110
110
  compileTOut(ast: ASTTOut, ctx: Context): void;
111
+ compileTIfBranch(content: AST, block: BlockDescription, ctx: Context): void;
111
112
  compileTIf(ast: ASTTif, ctx: Context, nextNode?: ASTDomNode): void;
112
113
  compileTForeach(ast: ASTTForEach, ctx: Context): void;
113
114
  compileTKey(ast: ASTTKey, ctx: Context): void;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@odoo/owl",
3
- "version": "2.0.0-beta-11",
3
+ "version": "2.0.0-beta-12",
4
4
  "description": "Odoo Web Library (OWL)",
5
5
  "main": "dist/owl.cjs.js",
6
6
  "browser": "dist/owl.iife.js",