@odoo/owl 3.0.0-alpha.23 → 3.0.0-alpha.24

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.
@@ -554,6 +554,9 @@ class CodeGenerator {
554
554
  this.dev = options.dev || false;
555
555
  this.ast = ast;
556
556
  this.templateName = options.name;
557
+ if (options.name && !options.name.startsWith("__")) {
558
+ this.target.name = `template_${options.name.replace(/\./g, "_")}`;
559
+ }
557
560
  if (options.hasGlobalValues) {
558
561
  this.helpers.add("__globals__");
559
562
  }
Binary file
package/dist/owl.cjs.js CHANGED
@@ -2175,13 +2175,9 @@ class Fiber {
2175
2175
  current = current.parent;
2176
2176
  }
2177
2177
  // there are no current rendering from above => we can render
2178
- this._render();
2179
- }
2180
- _render() {
2181
2178
  const node = this.node;
2182
2179
  const root = this.root;
2183
2180
  if (root) {
2184
- // todo: should use updateComputation somewhere else.
2185
2181
  const c = getCurrentComputation();
2186
2182
  removeSources(node.signalComputation);
2187
2183
  setComputation(node.signalComputation);
@@ -2193,7 +2189,11 @@ class Fiber {
2193
2189
  handleError({ node, error: e });
2194
2190
  }
2195
2191
  setComputation(c);
2196
- root.setCounter(root.counter - 1);
2192
+ const newCounter = root.counter - 1;
2193
+ root.counter = newCounter;
2194
+ if (newCounter === 0) {
2195
+ this.node.app.scheduler.flush();
2196
+ }
2197
2197
  }
2198
2198
  }
2199
2199
  }
@@ -3203,7 +3203,17 @@ function createComponent(app, name, isStatic, hasSlotsProp, hasDynamicPropList,
3203
3203
  }
3204
3204
  node = new ComponentNode(C, props, app, ctx, key);
3205
3205
  children[key] = node;
3206
- initiateRender.call(node, new Fiber(node, parentFiber));
3206
+ const fiber = new Fiber(node, parentFiber);
3207
+ if (node.willStart.length) {
3208
+ initiateRender.call(node, fiber);
3209
+ }
3210
+ else {
3211
+ node.fiber = fiber;
3212
+ if (node.mounted.length) {
3213
+ fiber.root.mounted.push(fiber);
3214
+ }
3215
+ fiber.render();
3216
+ }
3207
3217
  }
3208
3218
  parentFiber.childrenMap[key] = node;
3209
3219
  return node;
@@ -3874,6 +3884,9 @@ class CodeGenerator {
3874
3884
  this.dev = options.dev || false;
3875
3885
  this.ast = ast;
3876
3886
  this.templateName = options.name;
3887
+ if (options.name && !options.name.startsWith("__")) {
3888
+ this.target.name = `template_${options.name.replace(/\./g, "_")}`;
3889
+ }
3877
3890
  if (options.hasGlobalValues) {
3878
3891
  this.helpers.add("__globals__");
3879
3892
  }
@@ -5667,7 +5680,7 @@ function compile(template, options = {
5667
5680
  }
5668
5681
 
5669
5682
  // do not modify manually. This file is generated by the release script.
5670
- const version = "3.0.0-alpha.23";
5683
+ const version = "3.0.0-alpha.24";
5671
5684
 
5672
5685
  function effect(fn) {
5673
5686
  const computation = createComputation(() => {
@@ -5827,6 +5840,7 @@ class Scheduler {
5827
5840
  processing = false;
5828
5841
  constructor() {
5829
5842
  this.requestAnimationFrame = Scheduler.requestAnimationFrame;
5843
+ this.processTasks = this.processTasks.bind(this);
5830
5844
  }
5831
5845
  addFiber(fiber) {
5832
5846
  this.tasks.add(fiber.root);
@@ -5834,7 +5848,7 @@ class Scheduler {
5834
5848
  scheduleDestroy(node) {
5835
5849
  this.cancelledNodes.add(node);
5836
5850
  if (this.frame === 0) {
5837
- this.frame = this.requestAnimationFrame(() => this.processTasks());
5851
+ this.frame = this.requestAnimationFrame(this.processTasks);
5838
5852
  }
5839
5853
  }
5840
5854
  /**
@@ -5852,7 +5866,7 @@ class Scheduler {
5852
5866
  }
5853
5867
  }
5854
5868
  if (this.frame === 0) {
5855
- this.frame = this.requestAnimationFrame(() => this.processTasks());
5869
+ this.frame = this.requestAnimationFrame(this.processTasks);
5856
5870
  }
5857
5871
  }
5858
5872
  processTasks() {
@@ -6065,8 +6079,8 @@ function decorate(node, f, hookName) {
6065
6079
  // Create a named wrapper so the name appears in stack traces.
6066
6080
  // V8 uses computed property keys as inferred function names.
6067
6081
  const wrapper = {
6068
- [name]() {
6069
- return f.call(component);
6082
+ [name](...args) {
6083
+ return f.call(component, ...args);
6070
6084
  },
6071
6085
  };
6072
6086
  return wrapper[name];
@@ -6823,6 +6837,6 @@ exports.whenReady = whenReady;
6823
6837
  exports.xml = xml;
6824
6838
 
6825
6839
 
6826
- __info__.date = '2026-04-10T07:28:23.029Z';
6827
- __info__.hash = 'e5e6d92';
6840
+ __info__.date = '2026-04-10T09:24:05.169Z';
6841
+ __info__.hash = 'd325807';
6828
6842
  __info__.url = 'https://github.com/odoo/owl';
package/dist/owl.es.js CHANGED
@@ -2173,13 +2173,9 @@ class Fiber {
2173
2173
  current = current.parent;
2174
2174
  }
2175
2175
  // there are no current rendering from above => we can render
2176
- this._render();
2177
- }
2178
- _render() {
2179
2176
  const node = this.node;
2180
2177
  const root = this.root;
2181
2178
  if (root) {
2182
- // todo: should use updateComputation somewhere else.
2183
2179
  const c = getCurrentComputation();
2184
2180
  removeSources(node.signalComputation);
2185
2181
  setComputation(node.signalComputation);
@@ -2191,7 +2187,11 @@ class Fiber {
2191
2187
  handleError({ node, error: e });
2192
2188
  }
2193
2189
  setComputation(c);
2194
- root.setCounter(root.counter - 1);
2190
+ const newCounter = root.counter - 1;
2191
+ root.counter = newCounter;
2192
+ if (newCounter === 0) {
2193
+ this.node.app.scheduler.flush();
2194
+ }
2195
2195
  }
2196
2196
  }
2197
2197
  }
@@ -3201,7 +3201,17 @@ function createComponent(app, name, isStatic, hasSlotsProp, hasDynamicPropList,
3201
3201
  }
3202
3202
  node = new ComponentNode(C, props, app, ctx, key);
3203
3203
  children[key] = node;
3204
- initiateRender.call(node, new Fiber(node, parentFiber));
3204
+ const fiber = new Fiber(node, parentFiber);
3205
+ if (node.willStart.length) {
3206
+ initiateRender.call(node, fiber);
3207
+ }
3208
+ else {
3209
+ node.fiber = fiber;
3210
+ if (node.mounted.length) {
3211
+ fiber.root.mounted.push(fiber);
3212
+ }
3213
+ fiber.render();
3214
+ }
3205
3215
  }
3206
3216
  parentFiber.childrenMap[key] = node;
3207
3217
  return node;
@@ -3872,6 +3882,9 @@ class CodeGenerator {
3872
3882
  this.dev = options.dev || false;
3873
3883
  this.ast = ast;
3874
3884
  this.templateName = options.name;
3885
+ if (options.name && !options.name.startsWith("__")) {
3886
+ this.target.name = `template_${options.name.replace(/\./g, "_")}`;
3887
+ }
3875
3888
  if (options.hasGlobalValues) {
3876
3889
  this.helpers.add("__globals__");
3877
3890
  }
@@ -5665,7 +5678,7 @@ function compile(template, options = {
5665
5678
  }
5666
5679
 
5667
5680
  // do not modify manually. This file is generated by the release script.
5668
- const version = "3.0.0-alpha.23";
5681
+ const version = "3.0.0-alpha.24";
5669
5682
 
5670
5683
  function effect(fn) {
5671
5684
  const computation = createComputation(() => {
@@ -5825,6 +5838,7 @@ class Scheduler {
5825
5838
  processing = false;
5826
5839
  constructor() {
5827
5840
  this.requestAnimationFrame = Scheduler.requestAnimationFrame;
5841
+ this.processTasks = this.processTasks.bind(this);
5828
5842
  }
5829
5843
  addFiber(fiber) {
5830
5844
  this.tasks.add(fiber.root);
@@ -5832,7 +5846,7 @@ class Scheduler {
5832
5846
  scheduleDestroy(node) {
5833
5847
  this.cancelledNodes.add(node);
5834
5848
  if (this.frame === 0) {
5835
- this.frame = this.requestAnimationFrame(() => this.processTasks());
5849
+ this.frame = this.requestAnimationFrame(this.processTasks);
5836
5850
  }
5837
5851
  }
5838
5852
  /**
@@ -5850,7 +5864,7 @@ class Scheduler {
5850
5864
  }
5851
5865
  }
5852
5866
  if (this.frame === 0) {
5853
- this.frame = this.requestAnimationFrame(() => this.processTasks());
5867
+ this.frame = this.requestAnimationFrame(this.processTasks);
5854
5868
  }
5855
5869
  }
5856
5870
  processTasks() {
@@ -6063,8 +6077,8 @@ function decorate(node, f, hookName) {
6063
6077
  // Create a named wrapper so the name appears in stack traces.
6064
6078
  // V8 uses computed property keys as inferred function names.
6065
6079
  const wrapper = {
6066
- [name]() {
6067
- return f.call(component);
6080
+ [name](...args) {
6081
+ return f.call(component, ...args);
6068
6082
  },
6069
6083
  };
6070
6084
  return wrapper[name];
@@ -6779,6 +6793,6 @@ TemplateSet.prototype._compileTemplate = function _compileTemplate(name, templat
6779
6793
  export { App, Component, EventBus, OwlError, Plugin, Registry, Resource, __info__, assertType, batched, blockDom, computed, config, effect, htmlEscape, markRaw, markup, mount, onError, onMounted, onPatched, onWillDestroy, onWillPatch, onWillStart, onWillUnmount, onWillUpdateProps, plugin, props, providePlugins, proxy, signal, status, toRaw, types, untrack, useApp, useContext, useEffect, useListener, useResource, validateType, whenReady, xml };
6780
6794
 
6781
6795
 
6782
- __info__.date = '2026-04-10T07:28:23.029Z';
6783
- __info__.hash = 'e5e6d92';
6796
+ __info__.date = '2026-04-10T09:24:05.169Z';
6797
+ __info__.hash = 'd325807';
6784
6798
  __info__.url = 'https://github.com/odoo/owl';
package/dist/owl.iife.js CHANGED
@@ -2176,13 +2176,9 @@
2176
2176
  current = current.parent;
2177
2177
  }
2178
2178
  // there are no current rendering from above => we can render
2179
- this._render();
2180
- }
2181
- _render() {
2182
2179
  const node = this.node;
2183
2180
  const root = this.root;
2184
2181
  if (root) {
2185
- // todo: should use updateComputation somewhere else.
2186
2182
  const c = getCurrentComputation();
2187
2183
  removeSources(node.signalComputation);
2188
2184
  setComputation(node.signalComputation);
@@ -2194,7 +2190,11 @@
2194
2190
  handleError({ node, error: e });
2195
2191
  }
2196
2192
  setComputation(c);
2197
- root.setCounter(root.counter - 1);
2193
+ const newCounter = root.counter - 1;
2194
+ root.counter = newCounter;
2195
+ if (newCounter === 0) {
2196
+ this.node.app.scheduler.flush();
2197
+ }
2198
2198
  }
2199
2199
  }
2200
2200
  }
@@ -3204,7 +3204,17 @@
3204
3204
  }
3205
3205
  node = new ComponentNode(C, props, app, ctx, key);
3206
3206
  children[key] = node;
3207
- initiateRender.call(node, new Fiber(node, parentFiber));
3207
+ const fiber = new Fiber(node, parentFiber);
3208
+ if (node.willStart.length) {
3209
+ initiateRender.call(node, fiber);
3210
+ }
3211
+ else {
3212
+ node.fiber = fiber;
3213
+ if (node.mounted.length) {
3214
+ fiber.root.mounted.push(fiber);
3215
+ }
3216
+ fiber.render();
3217
+ }
3208
3218
  }
3209
3219
  parentFiber.childrenMap[key] = node;
3210
3220
  return node;
@@ -3875,6 +3885,9 @@
3875
3885
  this.dev = options.dev || false;
3876
3886
  this.ast = ast;
3877
3887
  this.templateName = options.name;
3888
+ if (options.name && !options.name.startsWith("__")) {
3889
+ this.target.name = `template_${options.name.replace(/\./g, "_")}`;
3890
+ }
3878
3891
  if (options.hasGlobalValues) {
3879
3892
  this.helpers.add("__globals__");
3880
3893
  }
@@ -5668,7 +5681,7 @@
5668
5681
  }
5669
5682
 
5670
5683
  // do not modify manually. This file is generated by the release script.
5671
- const version = "3.0.0-alpha.23";
5684
+ const version = "3.0.0-alpha.24";
5672
5685
 
5673
5686
  function effect(fn) {
5674
5687
  const computation = createComputation(() => {
@@ -5828,6 +5841,7 @@
5828
5841
  processing = false;
5829
5842
  constructor() {
5830
5843
  this.requestAnimationFrame = Scheduler.requestAnimationFrame;
5844
+ this.processTasks = this.processTasks.bind(this);
5831
5845
  }
5832
5846
  addFiber(fiber) {
5833
5847
  this.tasks.add(fiber.root);
@@ -5835,7 +5849,7 @@
5835
5849
  scheduleDestroy(node) {
5836
5850
  this.cancelledNodes.add(node);
5837
5851
  if (this.frame === 0) {
5838
- this.frame = this.requestAnimationFrame(() => this.processTasks());
5852
+ this.frame = this.requestAnimationFrame(this.processTasks);
5839
5853
  }
5840
5854
  }
5841
5855
  /**
@@ -5853,7 +5867,7 @@
5853
5867
  }
5854
5868
  }
5855
5869
  if (this.frame === 0) {
5856
- this.frame = this.requestAnimationFrame(() => this.processTasks());
5870
+ this.frame = this.requestAnimationFrame(this.processTasks);
5857
5871
  }
5858
5872
  }
5859
5873
  processTasks() {
@@ -6066,8 +6080,8 @@
6066
6080
  // Create a named wrapper so the name appears in stack traces.
6067
6081
  // V8 uses computed property keys as inferred function names.
6068
6082
  const wrapper = {
6069
- [name]() {
6070
- return f.call(component);
6083
+ [name](...args) {
6084
+ return f.call(component, ...args);
6071
6085
  },
6072
6086
  };
6073
6087
  return wrapper[name];
@@ -6824,8 +6838,8 @@
6824
6838
  exports.xml = xml;
6825
6839
 
6826
6840
 
6827
- __info__.date = '2026-04-10T07:28:23.029Z';
6828
- __info__.hash = 'e5e6d92';
6841
+ __info__.date = '2026-04-10T09:24:05.169Z';
6842
+ __info__.hash = 'd325807';
6829
6843
  __info__.url = 'https://github.com/odoo/owl';
6830
6844
 
6831
6845
 
@@ -1 +1 @@
1
- !function(t){"use strict";class e extends Error{cause}function n(t){const n=(new DOMParser).parseFromString(t,"text/xml");if(n.getElementsByTagName("parsererror").length){let o="Invalid XML in template.";const s=n.getElementsByTagName("parsererror")[0].textContent;if(s){o+="\nThe parser has produced the following error message:\n"+s;const e=/\d+/g,n=e.exec(s);if(n){const i=Number(n[0]),r=t.split("\n")[i-1],l=e.exec(s);if(r&&l){const t=Number(l[0])-1;r[t]&&(o+=`\nThe error might be located at xml line ${i} column ${t}\n${r}\n${"-".repeat(t-1)}^`)}}}throw new e(o)}return n}function o(t){t=t.slice();const e=[];let n;for(;(n=t[0])&&"string"==typeof n;)e.push(t.shift());return{modifiers:e,data:t}}const s={shouldNormalizeDom:!0,mainEventHandler:(t,e,n)=>("function"==typeof t?t(e):Array.isArray(t)&&(t=o(t).data)[0](t[1],e),!1)},i=document.createTextNode("");class r{key;child;parentEl;constructor(t,e){this.key=t,this.child=e}mount(t,e){this.parentEl=t,this.child.mount(t,e)}moveBeforeDOMNode(t,e){this.child.moveBeforeDOMNode(t,e)}moveBeforeVNode(t,e){this.moveBeforeDOMNode(t&&t.firstNode()||e)}patch(t,e){if(this===t)return;let n=this.child,o=t.child;if(this.key===t.key)n.patch(o,e);else{const s=n.firstNode();s.parentElement.insertBefore(i,s),e&&n.beforeRemove(),n.remove(),o.mount(this.parentEl,i),this.child=o,this.key=t.key}}beforeRemove(){this.child.beforeRemove()}remove(){this.child.remove()}firstNode(){return this.child.firstNode()}toString(){return this.child.toString()}}function l(t,e){return new r(t,e)}let a,c,u,h;if("undefined"!=typeof Element){({setAttribute:a,removeAttribute:c}=Element.prototype);const t=DOMTokenList.prototype;u=t.add,h=t.remove}const d=Array.isArray,{split:f,trim:p}=String.prototype,m=/\s+/;function g(t,e){switch(e){case!1:case void 0:c.call(this,t);break;case!0:a.call(this,t,"");break;default:a.call(this,t,e)}}function y(t){return function(e){g.call(this,t,e)}}function b(t){if(d(t))"class"===t[0]?k.call(this,t[1]):"style"===t[0]?T.call(this,t[1]):g.call(this,t[0],t[1]);else for(let e in t)"class"===e?k.call(this,t[e]):"style"===e?T.call(this,t[e]):g.call(this,e,t[e])}function v(t,e){if(d(t)){const n=t[0],o=t[1];if(n===e[0]){if(o===e[1])return;"class"===n?E.call(this,o,e[1]):"style"===n?A.call(this,o,e[1]):g.call(this,n,o)}else c.call(this,e[0]),g.call(this,n,o)}else{for(let n in e)n in t||("class"===n?E.call(this,"",e[n]):"style"===n?A.call(this,"",e[n]):c.call(this,n));for(let n in t){const o=t[n];o!==e[n]&&("class"===n?E.call(this,o,e[n]):"style"===n?A.call(this,o,e[n]):g.call(this,n,o))}}}function w(t){const e={};switch(typeof t){case"string":const n=p.call(t);if(!n)return{};let o=f.call(n,m);for(let t=0,n=o.length;t<n;t++)e[o[t]]=!0;return e;case"object":for(let n in t){const o=t[n];if(o){if(n=p.call(n),!n)continue;const t=f.call(n,m);for(let n of t)e[n]=o}}return e;case"undefined":return{};case"number":return{[t]:!0};default:return{[t]:!0}}}const $={};function x(t){if(t in $)return $[t];const e=t.replace(/[A-Z]/g,t=>"-"+t.toLowerCase());return $[t]=e,e}function N(t){const e={};switch(typeof t){case"string":{const n=p.call(t);if(!n)return{};const o=n.split(";");for(let t of o){if(t=p.call(t),!t)continue;const n=t.indexOf(":");if(-1===n)continue;const o=p.call(t.slice(0,n)),s=p.call(t.slice(n+1));o&&s&&"undefined"!==s&&(e[o]=s)}return e}case"object":for(let n in t){const o=t[n];(o||0===o)&&(e[x(n)]=String(o))}return e;default:return{}}}function k(t){t=""===t?{}:w(t);for(let e in t)u.call(this.classList,e)}function E(t,e){e=""===e?{}:w(e),t=""===t?{}:w(t);for(let n in e)n in t||h.call(this.classList,n);for(let n in t)t[n]!==e[n]&&u.call(this.classList,n)}function T(t){t=""===t?{}:N(t);const e=this.style;for(let n in t)e.setProperty(n,t[n])}function A(t,e){e=""===e?{}:N(e),t=""===t?{}:N(t);const n=this.style;for(let o in e)o in t||n.removeProperty(o);for(let o in t)t[o]!==e[o]&&n.setProperty(o,t[o]);n.cssText||c.call(this,"style")}function C(t){let e=!1;return function(...n){e||(e=!0,queueMicrotask(()=>{e=!1,t(...n)}))}}function _(t){const n=t&&t.ownerDocument;if(n){if(!n.defaultView)throw new e("Cannot mount a component: the target document is not attached to a window (defaultView is missing)");if(t instanceof n.defaultView.HTMLElement||t instanceof ShadowRoot){if(!function(t,e){let n=t;const o=e.defaultView.ShadowRoot;for(;n;){if(n===e)return!0;if(n.parentNode)n=n.parentNode;else{if(!(n instanceof o&&n.host))return!1;n=n.host}}return!1}(t,n))throw new e("Cannot mount a component on a detached dom node");return}}throw new e("Cannot mount component: the target is not a valid DOM element")}class D extends EventTarget{trigger(t,e){this.dispatchEvent(new CustomEvent(t,{detail:e}))}}class S extends String{}function O(t){return t instanceof S?t:void 0===t?R(""):"number"==typeof t?R(String(t)):([["&","&amp;"],["<","&lt;"],[">","&gt;"],["'","&#x27;"],['"',"&quot;"],["`","&#x60;"]].forEach(e=>{t=String(t).replace(new RegExp(e[0],"g"),e[1])}),R(t))}function R(t,...e){if(!Array.isArray(t))return new S(t);const n=t;let o="",s=0;for(;s<e.length;++s)o+=n[s]+O(e[s]);return o+=n[s],new S(o)}function L(t){const e=t.split(".")[0],n=t.includes(".capture"),o=t.includes(".passive");return t.includes(".synthetic")?function(t,e=!1,n=!1){let o=`__event__synthetic_${t}`;e&&(o=`${o}_capture`);!function(t,e,n=!1,o=!1){if(P[e])return;document.addEventListener(t,t=>function(t,e){let n=e.target;for(;null!==n;){const o=n[t];if(o)for(const t of Object.values(o)){if(s.mainEventHandler(t,e,n))return}n=n.parentNode}}(e,t),{capture:n,passive:o}),P[e]=!0}(t,o,e,n);const i=I++;function r(t){const e=this[o]||{};e[i]=t,this[o]=e}function l(){delete this[o]}return{setup:r,update:r,remove:l}}(e,n,o):function(t,e=!1,n=!1){let o=`__event__${t}_${B++}`;e&&(o=`${o}_capture`);function i(t){const e=t.currentTarget;if(!e||!function(t){if(!t)return!1;if(t.ownerDocument.contains(t))return!0;const e=t.getRootNode();return e instanceof ShadowRoot&&t.ownerDocument.contains(e.host)}(e))return;const n=e[o];n&&s.mainEventHandler(n,t,e)}const r={capture:e,passive:n};function l(e){this[o]=e,this.addEventListener(t,i,r)}function a(){delete this[o],this.removeEventListener(t,i,r)}function c(t){this[o]=t}return{setup:l,update:c,remove:a}}(e,n,o)}let B=1;let I=1;const P={};let M,j,V;if("undefined"!=typeof Node){const t=Node.prototype;M=t.insertBefore,j=(W=t,F="textContent",Object.getOwnPropertyDescriptor(W,F)).set,V=t.removeChild}var W,F;class K{children;anchors;parentEl;isOnlyChild;constructor(t){this.children=t}mount(t,e){const n=this.children,o=n.length,s=new Array(o);for(let i=0;i<o;i++){let o=n[i];if(o)o.mount(t,e);else{const n=document.createTextNode("");s[i]=n,M.call(t,n,e)}}this.anchors=s,this.parentEl=t}moveBeforeDOMNode(t,e=this.parentEl){this.parentEl=e;const n=this.children,o=this.anchors;for(let s=0,i=n.length;s<i;s++){let i=n[s];if(i)i.moveBeforeDOMNode(t,e);else{const n=o[s];M.call(e,n,t)}}}moveBeforeVNode(t,e){if(t){const n=t.children[0];e=(n?n.firstNode():t.anchors[0])||null}const n=this.children,o=this.parentEl,s=this.anchors;for(let t=0,i=n.length;t<i;t++){let i=n[t];if(i)i.moveBeforeVNode(null,e);else{const n=s[t];M.call(o,n,e)}}}patch(t,e){if(this===t)return;const n=this.children,o=t.children,s=this.anchors,i=this.parentEl;for(let t=0,r=n.length;t<r;t++){const r=n[t],l=o[t];if(r)if(l)r.patch(l,e);else{const o=r.firstNode(),l=document.createTextNode("");s[t]=l,M.call(i,l,o),e&&r.beforeRemove(),r.remove(),n[t]=void 0}else if(l){n[t]=l;const e=s[t];l.mount(i,e),V.call(i,e)}}}beforeRemove(){const t=this.children;for(let e=0,n=t.length;e<n;e++){const n=t[e];n&&n.beforeRemove()}}remove(){const t=this.parentEl;if(this.isOnlyChild)j.call(t,"");else{const e=this.children,n=this.anchors;for(let o=0,s=e.length;o<s;o++){const s=e[o];s?s.remove():V.call(t,n[o])}}}firstNode(){const t=this.children[0];return t?t.firstNode():this.anchors[0]}toString(){return this.children.map(t=>t?t.toString():"").join("")}}function U(t){return new K(t)}let z,H,G;if("undefined"!=typeof Node){const t=Node.prototype;z=t.insertBefore,G=t.removeChild,H=((t,e)=>Object.getOwnPropertyDescriptor(t,e))(CharacterData.prototype,"data").set}class q{text;parentEl;el;constructor(t){this.text=t}mountNode(t,e,n){this.parentEl=e,z.call(e,t,n),this.el=t}moveBeforeDOMNode(t,e=this.parentEl){this.parentEl=e,z.call(e,this.el,t)}moveBeforeVNode(t,e){z.call(this.parentEl,this.el,t?t.el:e)}beforeRemove(){}remove(){G.call(this.parentEl,this.el)}firstNode(){return this.el}toString(){return this.text}}class X extends q{mount(t,e){this.mountNode(document.createTextNode(Q(this.text)),t,e)}patch(t){const e=t.text;this.text!==e&&(H.call(this.el,Q(e)),this.text=e)}}class Z extends q{mount(t,e){this.mountNode(document.createComment(Q(this.text)),t,e)}patch(){}}function Y(t){return new X(t)}function J(t){return new Z(t)}function Q(t){switch(typeof t){case"string":return t;case"number":return String(t);case"boolean":return t?"true":"false";default:return t||""}}const tt=(t,e)=>Object.getOwnPropertyDescriptor(t,e);let et,nt,ot,st,it;"undefined"!=typeof Node&&(et=Node.prototype,nt=Element.prototype,ot=tt(CharacterData.prototype,"data").set,st=tt(et,"firstChild").get,it=tt(et,"nextSibling").get);const rt=()=>{};function lt(t){return function(e){this[t]=0===e?0:e?e.valueOf():""}}const at={};function ct(t){if(t in at)return at[t];const e=(new DOMParser).parseFromString(`<t>${t}</t>`,"text/xml").firstChild.firstChild;s.shouldNormalizeDom&&ut(e);const n=ht(e),o=pt(n),i=function(t,e){let n=function(t,e){const{refN:n,collectors:o,children:s,locations:i,cbRefs:r}=e;i.sort((t,e)=>t.idx-e.idx);const l=i.length,a=s.length,c=n>0,u=i.map(t=>t.refIdx),h=i.map(t=>t.setData),d=i.map(t=>t.updateData),f=[it,st],p=o.length,m=o.map(t=>32767&t.idx|(32767&t.prevIdx)<<15|(t.getVal===st?1:0)<<30),g=s.map(t=>32767&t.parentRefIdx|(t.isOnlyChild?1:0)<<15|(32767&(t.afterRefIdx??0))<<16),y=et.cloneNode,b=et.insertBefore,v=nt.remove;class w{el;parentEl;data;children;refs;constructor(t){this.data=t}beforeRemove(){}remove(){v.call(this.el)}firstNode(){return this.el}moveBeforeDOMNode(t,e=this.parentEl){this.parentEl=e,b.call(e,this.el,t)}moveBeforeVNode(t,e){b.call(this.parentEl,this.el,t?t.el:e)}toString(){const t=document.createElement("div");return this.mount(t,null),t.innerHTML}mount(e,n){const o=y.call(t,!0);b.call(e,o,n),this.el=o,this.parentEl=e}patch(t,e){}}c&&(w.prototype.mount=function(e,o){const s=y.call(t,!0),i=new Array(n);this.refs=i,i[0]=s;for(let t=0;t<p;t++){const e=m[t];i[32767&e]=f[e>>30&1].call(i[e>>15&32767])}if(l){const t=this.data;for(let e=0;e<l;e++)h[e].call(i[u[e]],t[e])}if(a){const t=this.children;for(let e=0;e<a;e++){const n=t[e];if(n){const t=g[e],o=t>>16&32767,s=o?i[o]:null;n.isOnlyChild=!!(32768&t),n.mount(i[32767&t],s)}}}if(b.call(e,s,o),this.el=s,this.parentEl=e,r.length){const t=this.data,e=this.refs;for(let n of r){(0,t[n])(e[u[n]],null)}}},w.prototype.patch=function(t,e){if(this===t)return;const n=this.refs;if(l){const e=this.data,o=t.data;for(let t=0;t<l;t++){const s=e[t],i=o[t];s!==i&&d[t].call(n[u[t]],i,s)}this.data=o}if(a){let o=this.children;const s=t.children;for(let t=0;t<a;t++){const i=o[t],r=s[t];if(i)r?i.patch(r,e):(e&&i.beforeRemove(),i.remove(),o[t]=void 0);else if(r){const e=g[t],s=e>>16&32767,i=s?n[s]:null;r.mount(n[32767&e],i),o[t]=r}}}},w.prototype.remove=function(){if(r.length){const t=this.data,e=this.refs;for(let n of r){(0,t[n])(null,e[u[n]])}}v.call(this.el)});return w}(t,e);if(e.children.length)return n=class extends n{children;constructor(t,e){super(t),this.children=e}},n.prototype.beforeRemove=K.prototype.beforeRemove,(t,e=[])=>new n(t,e);return t=>new n(t)}(n.el,o);return at[t]=i,i}function ut(t){if(t.nodeType!==Node.TEXT_NODE||/\S/.test(t.textContent)){if(t.nodeType!==Node.ELEMENT_NODE||"pre"!==t.tagName)for(let e=t.childNodes.length-1;e>=0;--e)ut(t.childNodes.item(e))}else t.remove()}function ht(t,n=null,o=null){switch(t.nodeType){case Node.ELEMENT_NODE:{let e=o&&o.currentNS;const s=t.tagName;let i;const r=[];if(s.startsWith("block-text-")){const t=parseInt(s.slice(11),10);r.push({type:"text",idx:t}),i=document.createTextNode("")}if(s.startsWith("block-child-")){o.isRef||dt(o);const t=parseInt(s.slice(12),10);r.push({type:"child",idx:t}),i=document.createTextNode("")}if(e||=t.namespaceURI,i||(i=e?document.createElementNS(e,s):document.createElement(s)),i instanceof Element){if(!o){document.createElement("template").content.appendChild(i)}const e=t.attributes;for(let t=0;t<e.length;t++){const n=e[t].name,o=e[t].value;if(n.startsWith("block-handler-")){const t=parseInt(n.slice(14),10);r.push({type:"handler",idx:t,event:o})}else if(n.startsWith("block-attribute-")){const t=parseInt(n.slice(16),10);r.push({type:"attribute",idx:t,name:o,tag:s})}else if(n.startsWith("block-property-")){const t=parseInt(n.slice(15),10);r.push({type:"property",idx:t,name:o,tag:s})}else"block-attributes"===n?r.push({type:"attributes",idx:parseInt(o,10)}):"block-ref"===n?r.push({type:"ref",idx:parseInt(o,10)}):i.setAttribute(e[t].name,o)}}const l={parent:n,firstChild:null,nextSibling:null,el:i,info:r,refN:0,currentNS:e};if(t.firstChild){const e=t.childNodes[0];if(1===t.childNodes.length&&e.nodeType===Node.ELEMENT_NODE&&e.tagName.startsWith("block-child-")){const t=e.tagName,n=parseInt(t.slice(12),10);r.push({idx:n,type:"child",isOnlyChild:!0})}else{l.firstChild=ht(t.firstChild,l,l),i.appendChild(l.firstChild.el);let e=t.firstChild,n=l.firstChild;for(;e=e.nextSibling;)n.nextSibling=ht(e,n,l),i.appendChild(n.nextSibling.el),n=n.nextSibling}}return l.info.length&&dt(l),l}case Node.TEXT_NODE:case Node.COMMENT_NODE:return{parent:n,firstChild:null,nextSibling:null,el:t.nodeType===Node.TEXT_NODE?document.createTextNode(t.textContent):document.createComment(t.textContent),info:[],refN:0,currentNS:null}}throw new e("boom")}function dt(t){t.isRef=!0;do{t.refN++}while(t=t.parent)}function ft(t){let e=t.parent;for(;e&&e.nextSibling===t;)t=e,e=e.parent;return e}function pt(t,e,n){if(!e){e={collectors:[],locations:[],children:new Array(t.info.filter(t=>"child"===t.type).length),cbRefs:[],refN:t.refN},n=0}if(t.refN){const o=n,s=t.isRef,i=t.firstChild?t.firstChild.refN:0,r=t.nextSibling?t.nextSibling.refN:0;if(s){for(let e of t.info)e.refIdx=o;t.refIdx=o,function(t,e){for(let n of e.info)switch(n.type){case"text":t.locations.push({idx:n.idx,refIdx:n.refIdx,setData:mt,updateData:mt});break;case"child":n.isOnlyChild?t.children[n.idx]={parentRefIdx:n.refIdx,isOnlyChild:!0}:t.children[n.idx]={parentRefIdx:ft(e).refIdx,afterRefIdx:n.refIdx};break;case"property":{const e=n.refIdx,o=lt(n.name);t.locations.push({idx:n.idx,refIdx:e,setData:o,updateData:o});break}case"attribute":{const e=n.refIdx;let o,s;"class"===n.name?(s=k,o=E):"style"===n.name?(s=T,o=A):(s=y(n.name),o=s),t.locations.push({idx:n.idx,refIdx:e,setData:s,updateData:o});break}case"attributes":t.locations.push({idx:n.idx,refIdx:n.refIdx,setData:b,updateData:v});break;case"handler":{const{setup:e,update:o}=L(n.event);t.locations.push({idx:n.idx,refIdx:n.refIdx,setData:e,updateData:o});break}case"ref":t.locations.push({idx:n.idx,refIdx:n.refIdx,setData:rt,updateData:rt}),t.cbRefs.push(n.idx)}}(e,t),n++}if(r){const s=n+i;e.collectors.push({idx:s,prevIdx:o,getVal:it}),pt(t.nextSibling,e,s)}i&&(e.collectors.push({idx:n,prevIdx:o,getVal:st}),pt(t.firstChild,e,n))}return e}function mt(t){ot.call(this,Q(t))}let gt,yt,bt,vt,wt,$t;if("undefined"!=typeof Node){const t=Node.prototype;gt=t.insertBefore,yt=t.appendChild,bt=t.removeChild,vt=((t,e)=>Object.getOwnPropertyDescriptor(t,e))(t,"textContent").set}class xt{children;anchor;parentEl;isOnlyChild;constructor(t){this.children=t}mount(t,e){const n=this.children,o=document.createTextNode("");this.anchor=o,gt.call(t,o,e);const s=n.length;if(s){const e=n[0].mount;for(let i=0;i<s;i++)e.call(n[i],t,o)}this.parentEl=t}moveBeforeDOMNode(t,e=this.parentEl){this.parentEl=e;const n=this.children;for(let o=0,s=n.length;o<s;o++)n[o].moveBeforeDOMNode(t,e);e.insertBefore(this.anchor,t)}moveBeforeVNode(t,e){if(t){const n=t.children[0];e=(n?n.firstNode():t.anchor)||null}const n=this.children;for(let t=0,o=n.length;t<o;t++)n[t].moveBeforeVNode(null,e);this.parentEl.insertBefore(this.anchor,e)}patch(t,e){if(this===t)return;const n=this.children,o=t.children;if(0===o.length&&0===n.length)return;this.children=o;const s=o[0]||n[0],{mount:i,patch:r,remove:l,beforeRemove:a,moveBeforeVNode:c,firstNode:u}=s,h=this.anchor,d=this.isOnlyChild,f=this.parentEl;if(0===o.length&&d){if(e)for(let t=0,e=n.length;t<e;t++)a.call(n[t]);return vt.call(f,""),void yt.call(f,h)}let p,m=0,g=0,y=n[0],b=o[0],v=n.length-1,w=o.length-1,$=n[v],x=o[w];for(;m<=v&&g<=w;){if(null===y){y=n[++m];continue}if(null===$){$=n[--v];continue}let t=y.key,s=b.key;if(t===s){r.call(y,b,e),o[g]=y,y=n[++m],b=o[++g];continue}let l=$.key,a=x.key;if(l===a){r.call($,x,e),o[w]=$,$=n[--v],x=o[--w];continue}if(t===a){r.call(y,x,e),o[w]=y;const t=o[w+1];c.call(y,t,h),y=n[++m],x=o[--w];continue}if(l===s){r.call($,b,e),o[g]=$;const t=n[m];c.call($,t,h),$=n[--v],b=o[++g];continue}p=p||kt(n,m,v);let d=p[s];if(void 0===d)i.call(b,f,u.call(y)||null);else{const t=n[d];c.call(t,y,null),r.call(t,b,e),o[g]=t,n[d]=null}b=o[++g]}if(m<=v||g<=w)if(m>v){const t=o[w+1],e=t?u.call(t)||null:h;for(let t=g;t<=w;t++)i.call(o[t],f,e)}else for(let t=m;t<=v;t++){let o=n[t];o&&(e&&a.call(o),l.call(o))}}beforeRemove(){const t=this.children,e=t.length;if(e){const n=t[0].beforeRemove;for(let o=0;o<e;o++)n.call(t[o])}}remove(){const{parentEl:t,anchor:e}=this;if(this.isOnlyChild)vt.call(t,"");else{const n=this.children,o=n.length;if(o){const t=n[0].remove;for(let e=0;e<o;e++)t.call(n[e])}bt.call(t,e)}}firstNode(){const t=this.children[0];return t?t.firstNode():void 0}toString(){return this.children.map(t=>t.toString()).join("")}}function Nt(t){return new xt(t)}function kt(t,e,n){let o={};for(let s=e;s<=n;s++)o[t[s].key]=s;return o}if("undefined"!=typeof Node){const t=Node.prototype;wt=t.insertBefore,$t=t.removeChild}class Et{html;parentEl;content=[];constructor(t){this.html=t}mount(t,e){this.parentEl=t;const n=document.createElement("template");n.innerHTML=this.html,this.content=[...n.content.childNodes];for(let n of this.content)wt.call(t,n,e);if(!this.content.length){const n=document.createTextNode("");this.content.push(n),wt.call(t,n,e)}}moveBeforeDOMNode(t,e=this.parentEl){this.parentEl=e;for(let n of this.content)wt.call(e,n,t)}moveBeforeVNode(t,e){const n=t?t.content[0]:e;this.moveBeforeDOMNode(n)}patch(t){if(this===t)return;const e=t.html;if(this.html!==e){const n=this.parentEl,o=this.content[0],s=document.createElement("template");s.innerHTML=e;const i=[...s.content.childNodes];for(let t of i)wt.call(n,t,o);if(!i.length){const t=document.createTextNode("");i.push(t),wt.call(n,t,o)}this.remove(),this.content=i,this.html=t.html}}beforeRemove(){}remove(){const t=this.parentEl;for(let e of this.content)$t.call(t,e)}firstNode(){return this.content[0]}toString(){return this.html}}function Tt(t){return new Et(t)}function At(t,e,n=null){t.mount(e,n)}let Ct=[];function _t(t){const n=Ct.at(-1);if(!n)throw new e("No active context");if(t&&t!==n.type)throw new e(`Expected to be in a ${t} context`);return n}function Dt(t,n){return async function(...o){if(t.status>1)throw new e(`Function called after the end of life of the ${t.type}`);const s=await n.call(this,...o);return t.status>1?new Promise(()=>{}):s}}class St{static template="";__owl__;constructor(t){this.__owl__=t}setup(){}}var Ot;!function(t){t[t.EXECUTED=0]="EXECUTED",t[t.STALE=1]="STALE",t[t.PENDING=2]="PENDING"}(Ot||(Ot={}));const Rt=Symbol("Atom");let Lt,Bt=[];function It(t,e,n=Ot.STALE){return{state:n,value:void 0,compute:t,sources:new Set,observers:new Set,isDerived:e}}function Pt(t){Lt&&(Lt.sources.add(t),t.observers.add(Lt))}function Mt(t){for(const e of t.observers)e.state===Ot.EXECUTED&&(e.isDerived?zt(e):Bt.push(e)),e.state=Ot.STALE;jt()}const jt=C(function(){for(let t=0;t<Bt.length;t++)Ft(Bt[t]);Bt.length=0});function Vt(){return Lt}function Wt(t){Lt=t}function Ft(t){const e=t.state;if(e===Ot.EXECUTED)return;if(e===Ot.PENDING){for(const e of t.sources)"compute"in e&&Ft(e);if(t.state!==Ot.STALE)return void(t.state=Ot.EXECUTED)}Kt(t);const n=Lt;Lt=t,t.value=t.compute(),t.state=Ot.EXECUTED,Lt=n}function Kt(t){const e=t.sources;for(const n of e){n.observers.delete(t)}e.clear()}function Ut(t){for(const e of t.sources)e.observers.delete(t),"compute"in e&&e.isDerived&&0===e.observers.size&&Ut(e);t.sources.clear(),t.state=Ot.STALE}function zt(t){const e=[t];let n;for(;n=e.pop();)for(const t of n.observers)t.state||(t.state=Ot.PENDING,t.isDerived?e.push(t):Bt.push(t))}function Ht(t){const e=Lt;let n;Lt=void 0;try{n=t()}finally{Lt=e}return n}const Gt=new WeakMap,qt=new WeakMap;function Xt(t){let{error:n}=t,o="node"in t?t.node:t.fiber.node;const s="fiber"in t?t.fiber:o.fiber,i=o.app;if(s){let t=s;do{t.node.fiber=t,Gt.set(t,n),t=t.parent}while(t);Gt.set(s.root,n)}const r=()=>{try{i.destroy()}catch(t){}return Object.assign(new e("[Owl] Unhandled error. Destroying the root component"),{cause:n})};for(;o;){const t=o.fiber;t&&Gt.set(t,n);const e=qt.get(o);if(e)for(let t=e.length-1;t>=0;t--)try{return void e[t](n,r)}catch(t){n=t}o=o.parent}const l=r();i._handleError(l)}function Zt(){throw new e("Attempted to render cancelled fiber")}function Yt(t){let e=0;for(let n of t){let t=n.node;n.render=Zt,0===t.status&&t.cancel(),t.fiber=null,n.bdom?t.forceNextRender=!0:e++,e+=Yt(n.children)}return e}class Jt{node;bdom=null;root;parent;children=[];appliedToDom=!1;deep=!1;childrenMap={};constructor(t,e){if(this.node=t,this.parent=e,e){this.deep=e.deep;const t=e.root;t.setCounter(t.counter+1),this.root=t,e.children.push(this)}else this.root=this}render(){let t=this.root.node,e=t.app.scheduler,n=t.parent;for(;n;){if(n.fiber){let o=n.fiber.root;if(0!==o.counter||!(t.parentKey in n.fiber.childrenMap))return void e.delayedRenders.push(this);n=o.node}t=n,n=n.parent}this._render()}_render(){const t=this.node,e=this.root;if(e){const n=Vt();Kt(t.signalComputation),Wt(t.signalComputation);try{this.bdom=!0,this.bdom=t.renderFn()}catch(e){Xt({node:t,error:e})}Wt(n),e.setCounter(e.counter-1)}}}class Qt extends Jt{counter=1;willPatch=[];patched=[];mounted=[];locked=!1;complete(){const t=this.node;let e;this.locked=!0;let n=this.mounted;try{for(e of this.willPatch){let t=e.node;if(t.fiber===e){const e=t.component;for(let n of t.willPatch)n.call(e)}}for(e=void 0,t._patch(),this.locked=!1;e=n.pop();)if(e.appliedToDom)for(let t of e.node.mounted)t();let o=this.patched;for(;e=o.pop();)if(e.appliedToDom)for(let t of e.node.patched)t()}catch(t){for(let t of n)t.node.willUnmount=[];this.locked=!1,Xt({fiber:e||this,error:t})}}setCounter(t){this.counter=t,0===t&&this.node.app.scheduler.flush()}}class te extends Qt{target;position;constructor(t,e,n={}){super(t,null),this.target=e,this.position=n.position||"last-child"}complete(){let t=this;try{const e=this.node;if(e.children=this.childrenMap,e.app.constructor.validateTarget(this.target),e.bdom)e.updateDom();else if(e.bdom=this.bdom,"last-child"===this.position||0===this.target.childNodes.length)At(e.bdom,this.target);else{const t=this.target.childNodes[0];At(e.bdom,this.target,t)}e.fiber=null,e.status=1,this.appliedToDom=!0;let n=this.mounted;for(;t=n.pop();)if(t.appliedToDom)for(let e of t.node.mounted)e()}catch(e){Xt({fiber:t,error:e})}}}class ee{el;app;fiber=null;component;bdom=null;status=0;forceNextRender=!1;parentKey;props;defaultProps={};renderFn;parent;children=Object.create(null);willStart=[];willUpdateProps=[];willUnmount=[];mounted=[];willPatch=[];patched=[];willDestroy=[];signalComputation;computations=[];pluginManager;constructor(t,e,n,o,s){this.app=n,this.parent=o,this.parentKey=s,this.pluginManager=o?o.pluginManager:n.pluginManager,this.signalComputation=It(()=>this.render(!1),!1,Ot.EXECUTED),this.props=e,Ct.push({type:"component",app:n,componentName:t.name,node:this,get status(){return this.node.status}});const i=Vt();Wt(void 0),this.component=new t(this);const r={this:this.component,__owl__:this};this.renderFn=n.getTemplate(t.template).bind(this.component,r,this),this.component.setup(),Wt(i),Ct.length=0}mountComponent(t,e){const n=new te(this,t,e);this.app.scheduler.addFiber(n);let o=Vt();this.initiateRender(n),Wt(o)}async initiateRender(t){this.fiber=t,this.mounted.length&&t.root.mounted.push(t);const e=this.component;let n=Vt();Wt(void 0);try{let t=this.willStart.map(t=>t.call(e));Wt(n),await Promise.all(t)}catch(t){return void Xt({node:this,error:t})}0===this.status&&this.fiber===t&&t.render()}async render(t){if(this.status>=2)return;let e=this.fiber;if(e&&(e.root.locked||!0===e.bdom)&&(await Promise.resolve(),e=this.fiber),e){if(!e.bdom&&!Gt.has(e))return void(t&&(e.deep=t));t=t||e.deep}else if(!this.bdom)return;const n=function(t){let e=t.fiber;if(e){let t=e.root;return t.locked=!0,t.setCounter(t.counter+1-Yt(e.children)),t.locked=!1,e.children=[],e.childrenMap={},e.bdom=null,Gt.has(e)&&(Gt.delete(e),Gt.delete(t),e.appliedToDom=!1,e instanceof Qt&&(e.mounted=e instanceof te?[e]:[])),e}const n=new Qt(t,null);return t.willPatch.length&&n.willPatch.push(n),t.patched.length&&n.patched.push(n),n}(this);n.deep=t,this.fiber=n,this.app.scheduler.addFiber(n),await Promise.resolve(),this.status>=2||this.fiber!==n||!e&&n.parent||n.render()}cancel(){this._cancel(),delete this.parent.children[this.parentKey],this.app.scheduler.scheduleDestroy(this)}_cancel(){this.status=2;const t=this.children;for(let e in t)t[e]._cancel()}destroy(){let t=1===this.status;this._destroy(),t&&this.bdom.remove()}_destroy(){const t=this.component;if(1===this.status)for(let e of this.willUnmount)e.call(t);for(let t in this.children)this.children[t]._destroy();if(this.willDestroy.length)try{for(let e of this.willDestroy)e.call(t)}catch(t){Xt({error:t,node:this})}for(const t of this.computations)Ut(t);Ut(this.signalComputation),this.status=3}async updateAndRender(t,e){t=Object.assign({},t);for(const e in this.defaultProps)void 0===t[e]&&(t[e]=this.defaultProps[e]);const n=function(t,e){let n=t.fiber;return n&&(Yt(n.children),n.root=null),new Jt(t,e)}(this,e);this.fiber=n;const o=this.component;let s=Vt();Wt(void 0);let i=this.willUpdateProps.map(e=>e.call(o,t));if(Wt(s),await Promise.all(i),n!==this.fiber)return;this.props=t,n.render();const r=e.root;this.willPatch.length&&r.willPatch.push(n),this.patched.length&&r.patched.push(n)}updateDom(){if(this.fiber)if(this.bdom===this.fiber.bdom)for(let t in this.children){this.children[t].updateDom()}else this.bdom.patch(this.fiber.bdom,!1),this.fiber.appliedToDom=!0,this.fiber=null}firstNode(){const t=this.bdom;return t?t.firstNode():void 0}mount(t,e){const n=this.fiber.bdom;this.bdom=n,n.mount(t,e),this.status=1,this.fiber.appliedToDom=!0,this.children=this.fiber.childrenMap,this.fiber=null}moveBeforeDOMNode(t,e){this.bdom.moveBeforeDOMNode(t,e)}moveBeforeVNode(t,e){this.bdom.moveBeforeVNode(t?t.bdom:null,e)}patch(){this.fiber&&this.fiber.parent&&this._patch()}_patch(){let t=!1;for(let e in this.children){t=!0;break}const e=this.fiber;this.children=e.childrenMap,this.bdom.patch(e.bdom,t),e.appliedToDom=!0,this.fiber=null}beforeRemove(){this._destroy()}remove(){this.bdom.remove()}}const ne=Symbol("Key changes"),oe=Object.prototype.toString,se=Object.prototype.hasOwnProperty;function ie(t){if("object"!=typeof t||null===t)return!1;const e=ce(t);return!!(Array.isArray(e)||e instanceof Set||e instanceof Map||e instanceof WeakMap)||"[object Object]"===oe.call(e)}function re(t,e){return!e&&ie(t)?ge(t):t}const le=new WeakSet;function ae(t){return le.add(t),t}function ce(t){return fe.has(t)?fe.get(t):t}const ue=new WeakMap;function he(t,e,n){Pt(n??function(t,e){let n=ue.get(t);n||(n=new Map,ue.set(t,n));let o=n.get(e);return o||(o={value:void 0,observers:new Set},n.set(e,o)),o}(t,e))}function de(t,e,n){if(!n){const o=ue.get(t);if(!o)return;if(!o.has(e))return;n=o.get(e)}Mt(n)}const fe=new WeakMap,pe=new WeakMap;function me(t,n){if(!ie(t))throw new e("Cannot make the given value reactive");if(le.has(t))return t;if(fe.has(t))return t;const o=pe.get(t);if(o)return o;let s;s=t instanceof Map?ke(t,"Map",n):t instanceof Set?ke(t,"Set",n):t instanceof WeakMap?ke(t,"WeakMap",n):ye(n);const i=new Proxy(t,s);return pe.set(t,i),fe.set(i,t),i}function ge(t){return me(t,null)}function ye(t){return{get(e,n,o){he(e,n,t);const s=Reflect.get(e,n,o);if(t||"object"!=typeof s||null===s)return s;if(!ie(s))return s;const i=Object.getOwnPropertyDescriptor(e,n);return!i||i.writable||i.configurable?me(s,null):s},set(e,n,o,s){const i=se.call(e,n),r=Reflect.get(e,n,s),l=Reflect.set(e,n,ce(o),s);return!i&&se.call(e,n)&&de(e,ne,t),(r!==Reflect.get(e,n,s)||"length"===n&&Array.isArray(e))&&de(e,n,t),l},deleteProperty(e,n){const o=Reflect.deleteProperty(e,n);return de(e,ne,t),de(e,n,t),o},ownKeys:e=>(he(e,ne,t),Reflect.ownKeys(e)),has:(e,n)=>(he(e,ne,t),Reflect.has(e,n))}}function be(t,e,n){return o=>(o=ce(o),he(e,o,n),re(e[t](o),n))}function ve(t,e,n){return function*(){he(e,ne,n);const o=e.keys();for(const s of e[t]()){const t=o.next().value;he(e,t,n),yield re(s,n)}}}function we(t,e){return function(n,o){he(t,ne,e),t.forEach(function(s,i,r){he(t,i,e),n.call(o,re(s,e),re(i,e),re(r,e))},o)}}function $e(t,e,n,o){return(s,i)=>{s=ce(s);const r=n.has(s),l=n[e](s),a=n[t](s,i);return r!==n.has(s)&&de(n,ne,o),l!==n[e](s)&&de(n,s,o),a}}function xe(t,e){return()=>{const n=[...t.keys()];t.clear(),de(t,ne,e);for(const o of n)de(t,o,e)}}const Ne={Set:(t,e)=>({has:be("has",t,e),add:$e("add","has",t,e),delete:$e("delete","has",t,e),keys:ve("keys",t,e),values:ve("values",t,e),entries:ve("entries",t,e),[Symbol.iterator]:ve(Symbol.iterator,t,e),forEach:we(t,e),clear:xe(t,e),get size(){return he(t,ne,e),t.size}}),Map:(t,e)=>({has:be("has",t,e),get:be("get",t,e),set:$e("set","get",t,e),delete:$e("delete","has",t,e),keys:ve("keys",t,e),values:ve("values",t,e),entries:ve("entries",t,e),[Symbol.iterator]:ve(Symbol.iterator,t,e),forEach:we(t,e),clear:xe(t,e),get size(){return he(t,ne,e),t.size}}),WeakMap:(t,e)=>({has:be("has",t,e),get:be("get",t,e),set:$e("set","get",t,e),delete:$e("delete","has",t,e)})};function ke(t,e,n){const o=Ne[e](t,n);return Object.assign(ye(n),{get:(t,e)=>se.call(o,e)?o[e]:(he(t,e,n),re(t[e],n))})}const Ee=Object.create;class Te{fn;ctx;component;node;key;constructor(t,e,n,o,s){this.fn=t,this.ctx=e,this.component=n,this.node=o,this.key=s}evaluate(){return this.fn.call(this.component,this.ctx,this.node,this.key)}toString(){return this.evaluate().toString()}}const Ae={withDefault:function(t,e){return null==t||!1===t?e:t},zero:Symbol("zero"),callSlot:function(t,e,n,o,s,i,r){n=n+"__slot_"+o;const a=t.__owl__.props.slots||{},{__render:c,__ctx:u,__scope:h}=a[o]||{},d=Ee(u||{});h&&(d[h]=i);const f=c?c(d,e,n):null;if(r){let i,a;return f?i=s?l(o,f):f:a=r(t,e,n),U([i,a])}return f||Y("")},withKey:function(t,e){return t.key=e,t},prepareList:function(t){let n,o;if(Array.isArray(t))n=t,o=t;else if(t instanceof Map)n=[...t.keys()],o=[...t.values()];else if(Symbol.iterator in Object(t))n=[...t],o=n;else{if(!t||"object"!=typeof t)throw new e(`Invalid loop expression: "${t}" is not iterable`);o=Object.values(t),n=Object.keys(t)}const s=o.length;return[n,o,s,new Array(s)]},shallowEqual:function(t,e){for(let n=0,o=t.length;n<o;n++)if(t[n]!==e[n])return!1;return!0},toNumber:function(t){const e=parseFloat(t);return isNaN(e)?t:e},LazyValue:Te,safeOutput:function(t,e){if(null==t)return e?l("default",e):l("undefined",Y(""));let n,o;return t instanceof S?(n="string_safe",o=Tt(t)):t instanceof Te?(n="lazy_value",o=t.evaluate()):(n="string_unsafe",o=Y(t)),l(n,o)},createCatcher:function(t){const e=Object.keys(t).length;class n{child;handlerData;handlerFns=[];parentEl;afterNode=null;constructor(t,e){this.child=t,this.handlerData=e}mount(e,n){this.parentEl=e,this.child.mount(e,n),this.afterNode=document.createTextNode(""),e.insertBefore(this.afterNode,n),this.wrapHandlerData();for(let n in t){const o=t[n],s=L(n);this.handlerFns[o]=s,s.setup.call(e,this.handlerData[o])}}wrapHandlerData(){for(let t=0;t<e;t++){let e=this.handlerData[t],n=e.length-2,o=e[n];const s=this;e[n]=function(t,e){const n=e.target;let i=s.child.firstNode();const r=s.afterNode;for(;i&&i!==r;){if(i.contains(n))return o(t,e);i=i.nextSibling}}}}moveBeforeDOMNode(t,e=this.parentEl){this.parentEl=e,this.child.moveBeforeDOMNode(t,e),e.insertBefore(this.afterNode,t)}moveBeforeVNode(t,e){t&&(e=t.firstNode()||e),this.child.moveBeforeVNode(t?t.child:null,e),this.parentEl.insertBefore(this.afterNode,e)}patch(t,n){if(this!==t){this.handlerData=t.handlerData,this.wrapHandlerData();for(let t=0;t<e;t++)this.handlerFns[t].update.call(this.parentEl,this.handlerData[t]);this.child.patch(t.child,n)}}beforeRemove(){this.child.beforeRemove()}remove(){for(let t=0;t<e;t++)this.handlerFns[t].remove.call(this.parentEl);this.child.remove(),this.afterNode.remove()}firstNode(){return this.child.firstNode()}toString(){return this.child.toString()}}return function(t,e){return new n(t,e)}},markRaw:ae,OwlError:e,createRef:function(t){if(!t)throw new e("Ref is undefined or null");let n,o;if(t.add&&t.delete)n=t.add.bind(t),o=t.delete.bind(t);else{if(!t.set)throw new e("Ref should implement either a 'set' function or 'add' and 'delete' functions");n=t.set.bind(t),o=()=>t.set(null)}return(t,e)=>{e&&o(e),t&&n(t)}},modelExpr:function(t){if("function"!=typeof t||"function"!=typeof t.set)throw new e("Invalid t-model expression: expression should evaluate to a function with a 'set' method defined on it");return t},createComponent:function(t,n,o,s,i,r){const l=!o;let a;const c=0===r.length;a=s?(t,e)=>!0:i?function(t,e){for(let n in t)if(t[n]!==e[n])return!0;return Object.keys(t).length!==Object.keys(e).length}:c?(t,e)=>!1:function(t,e){for(let n of r)if(t[n]!==e[n])return!0;return!1};const u=ee.prototype.updateAndRender,h=ee.prototype.initiateRender;return(s,i,r,c,d)=>{let f=r.children,p=f[i];l&&p&&p.component.constructor!==d&&(p=void 0);const m=r.fiber;if(p)(a(p.props,s)||m.deep||p.forceNextRender)&&(p.forceNextRender=!1,u.call(p,s,m));else{if(o){const t=c.constructor.components;if(!t)throw new e(`Cannot find the definition of component "${n}", missing static components key in parent`);if(!(d=t[n]))throw new e(`Cannot find the definition of component "${n}"`);if(!(d.prototype instanceof St))throw new e(`"${n}" is not a Component. It must inherit from the Component class`)}p=new ee(d,s,t,r,i),f[i]=p,h.call(p,new Jt(p,m))}return m.childrenMap[i]=p,p}},callTemplate:function(t,e,n,o,s,i){return l(t,n.getTemplate(t).call(e,o,s,i+t))},callHandler:function(t,n,o){if("function"!=typeof t)throw new e(`Invalid handler expression: the \`t-on\` expression should evaluate to a function, but got '${typeof t}'. Did you mean to use an arrow function? (e.g. \`t-on-click="() => expr"\`)`);t.call(n.this,o)}},Ce={text:Y,createBlock:ct,list:Nt,multi:U,html:Tt,toggler:l,comment:J};class _e{static registerTemplate(t,e){De[t]=e}dev;rawTemplates=Object.create(De);templates={};getRawTemplate;translateFn;translatableAttributes;customDirectives;runtimeUtils;hasGlobalValues;constructor(t={}){if(this.dev=t.dev||!1,this.translateFn=t.translateFn,this.translatableAttributes=t.translatableAttributes,t.templates)if(t.templates instanceof Document||"string"==typeof t.templates)this.addTemplates(t.templates);else for(const e in t.templates)this.addTemplate(e,t.templates[e]);this.getRawTemplate=t.getTemplate,this.customDirectives=t.customDirectives||{},this.runtimeUtils={...Ae,__globals__:t.globalValues||{}},this.hasGlobalValues=Boolean(t.globalValues&&Object.keys(t.globalValues).length)}addTemplate(t,n){if(t in this.rawTemplates){if(!this.dev)return;const o=this.rawTemplates[t];if(("string"==typeof o?o:o instanceof Element?o.outerHTML:o.toString())===("string"==typeof n?n:n.outerHTML))return;throw new e(`Template ${t} already defined with different content`)}this.rawTemplates[t]=n}addTemplates(t){if(t){t=t instanceof Document?t:n(t);for(const e of t.querySelectorAll("[t-name]")){const t=e.getAttribute("t-name");this.addTemplate(t,e)}}}getTemplate(t){const n=t;if(!(n in this.templates)){const o=this.getRawTemplate?.(t)||this.rawTemplates[t];if(void 0===o){let n="";try{const{componentName:t}=_t("component");n=` (for component "${t}")`}catch{}throw new e(`Missing template: "${t}"${n}`)}const s="function"==typeof o&&!(o instanceof Element)?o:this._compileTemplate(t,o),i=this.templates;this.templates[n]=function(t,e){return i[n].call(this,t,e)};const r=s(this,Ce,this.runtimeUtils);this.templates[n]=r}return this.templates[n]}_compileTemplate(t,n){throw new e("Unable to compile a template. Please use owl full build instead")}}const De={};function Se(...t){const e="__template__"+Se.nextId++,n=String.raw(...t);return De[e]=n,e}Se.nextId=1;const Oe="true,false,NaN,null,undefined,debugger,console,window,in,instanceof,new,function,return,eval,void,Math,RegExp,Array,Object,Date,__globals__".split(","),Re=Object.assign(Object.create(null),{and:"&&",or:"||",gt:">",gte:">=",lt:"<",lte:"<="}),Le=Object.assign(Object.create(null),{"{":"LEFT_BRACE","}":"RIGHT_BRACE","[":"LEFT_BRACKET","]":"RIGHT_BRACKET",":":"COLON",",":"COMMA","(":"LEFT_PAREN",")":"RIGHT_PAREN"}),Be="...,.,===,==,+,!==,!=,!,||,&&,>=,>,<=,<,?,-,*,/,%,typeof ,=>,=,;,in ,new ,|,&,^,~".split(",");const Ie=[function(t){let n=t[0],o=n;if("'"!==n&&'"'!==n&&"`"!==n)return!1;let s,i=1;for(;t[i]&&t[i]!==o;){if(s=t[i],n+=s,"\\"===s){if(i++,s=t[i],!s)throw new e("Invalid expression");n+=s}i++}if(t[i]!==o)throw new e("Invalid expression");return n+=o,"`"===o?{type:"TEMPLATE_STRING",value:n,replace:t=>n.replace(/\$\{(.*?)\}/g,(e,n)=>"${"+t(n)+"}")}:{type:"VALUE",value:n}},function(t){let e=t[0];if(e&&e.match(/[0-9]/)){let n=1;for(;t[n]&&t[n].match(/[0-9]|\./);)e+=t[n],n++;return{type:"VALUE",value:e}}return!1},function(t){for(let e of Be)if(t.startsWith(e))return{type:"OPERATOR",value:e};return!1},function(t){let e=t[0];if(e&&e.match(/[a-zA-Z_\$]/)){let n=1;for(;t[n]&&t[n].match(/[\w\$]/);)e+=t[n],n++;return e in Re?{type:"OPERATOR",value:Re[e],size:e.length}:{type:"SYMBOL",value:e}}return!1},function(t){const e=t[0];return!(!e||!(e in Le))&&{type:Le[e],value:e}}];const Pe=t=>t&&("LEFT_BRACE"===t.type||"COMMA"===t.type),Me=t=>t&&("RIGHT_BRACE"===t.type||"COMMA"===t.type),je=new Map([["in "," in "]]);function Ve(t){const n=new Set,o=function(t){const n=[];let o,s=!0,i=t;try{for(;s;)if(i=i.trim(),i){for(let t of Ie)if(s=t(i),s){n.push(s),i=i.slice(s.size||s.value.length);break}}else s=!1}catch(t){o=t}if(i.length||o)throw new e(`Tokenizer error: could not tokenize \`${t}\``);return n}(t);let s=0,i=[],r=-1;for(;s<o.length;){let t=o[s],e=o[s-1],l=o[s+1],a=i[i.length-1];switch(t.type){case"LEFT_BRACE":case"LEFT_BRACKET":case"LEFT_PAREN":i.push(t.type);break;case"RIGHT_BRACE":case"RIGHT_BRACKET":case"RIGHT_PAREN":i.pop()}let c="SYMBOL"===t.type&&!Oe.includes(t.value);if(c&&e&&("LEFT_BRACE"===a&&Pe(e)&&Me(l)&&(o.splice(s+1,0,{type:"COLON",value:":"},{...t}),l=o[s+1]),"OPERATOR"===e.type&&"."===e.value?c=!1:"LEFT_BRACE"!==e.type&&"COMMA"!==e.type||l&&"COLON"===l.type&&(c=!1)),"TEMPLATE_STRING"===t.type&&(t.value=t.replace(t=>We(t))),l&&"OPERATOR"===l.type&&"=>"===l.value)if(0===i.length&&(r=s+1),"RIGHT_PAREN"===t.type){let t=s-1;for(;t>0&&"LEFT_PAREN"!==o[t].type;)"SYMBOL"===o[t].type&&o[t].originalValue&&(o[t].value=o[t].originalValue,n.add(o[t].value)),t--}else n.add(t.value);c&&(t.varName=t.value,n.has(t.value)||(t.originalValue=t.value,t.value=`ctx['${t.value}']`)),s++}for(const t of o)"SYMBOL"===t.type&&t.varName&&n.has(t.value)&&(t.originalValue=t.value,t.value=`_${t.value}`,t.isLocal=!0);let l=null;if(-1!==r){l=[];const t=new Set;for(let e=r+1;e<o.length;e++){const n=o[e];!n.varName||n.isLocal||"this"===n.varName||t.has(n.varName)||(t.add(n.varName),l.push(n.varName))}}return{expr:o.map(t=>je.get(t.value)||t.value).join(""),freeVariables:l}}function We(t){return Ve(t).expr}const Fe=/\{\{.*?\}\}|\#\{.*?\}/g;function Ke(t){return function(t,e){let n=t.match(Fe);if(n&&n[0].length===t.length)return`(${e(t.slice(2,"{"===n[0][0]?-2:-1))})`;let o=t.replace(Fe,t=>"${"+e(t.slice(2,"{"===t[0]?-2:-1))+"}");return"`"+o+"`"}(t,We)}const Ue=Symbol("zero"),ze=/\s+/g;let He;"undefined"!=typeof document&&(He=document.implementation.createDocument(null,null,null));const Ge=new Set(["stop","capture","prevent","self","synthetic","passive"]);let qe={};function Xe(t=""){return qe[t]=(qe[t]||0)+1,t+qe[t]}function Ze(t,e){switch(t){case"input":return"checked"===e||"indeterminate"===e||"value"===e||"readonly"===e||"readOnly"===e||"disabled"===e;case"option":return"selected"===e||"disabled"===e;case"textarea":return"value"===e||"readonly"===e||"readOnly"===e||"disabled"===e;case"select":return"value"===e||"disabled"===e;case"button":case"optgroup":return"disabled"===e}return!1}function Ye(t){return`\`${t.replace(/\\/g,"\\\\").replace(/`/g,"\\`").replace(/\$\{/,"\\${")}\``}class Je{static nextBlockId=1;varName;blockName;dynamicTagName=null;isRoot=!1;hasDynamicChildren=!1;children=[];data=[];dom;currentDom;childNumber=0;target;type;parentVar="";id;constructor(t,e){this.id=Je.nextBlockId++,this.varName="b"+this.id,this.blockName="block"+this.id,this.target=t,this.type=e}insertData(t,e="d"){const n=Xe(e);return this.target.addLine(`let ${n} = ${t};`),this.data.push(n)-1}insert(t){this.currentDom?this.currentDom.appendChild(t):this.dom=t}generateExpr(t){if("block"===this.type){const t=this.children.length;let e=this.data.length?`[${this.data.join(", ")}]`:t?"[]":"";return t&&(e+=", ["+this.children.map(t=>t.varName).join(", ")+"]"),this.dynamicTagName?`toggler(${this.dynamicTagName}, ${this.blockName}(${this.dynamicTagName})(${e}))`:`${this.blockName}(${e})`}return"list"===this.type?`list(c_block${this.id})`:t}asXmlString(){const t=He.createElement("t");return t.appendChild(this.dom),t.innerHTML}}function Qe(t,e){return Object.assign({block:null,index:0,forceNewBlock:!0,translate:t.translate,translationCtx:t.translationCtx,tKeyExpr:null,nameSpace:t.nameSpace,tModelSelectedExpr:t.tModelSelectedExpr},e)}class tn{name;indentLevel=0;loopLevel=0;loopCtxVars=[];tSetVars=new Map;code=[];hasRoot=!1;needsScopeProtection=!1;on;constructor(t,e){this.name=t,this.on=e||null}addLine(t,e){const n=new Array(this.indentLevel+2).join(" ");void 0===e?this.code.push(n+t):this.code.splice(e,0,n+t)}generateCode(){let t=[];t.push(`function ${this.name}(ctx, node, key = "") {`),this.needsScopeProtection&&t.push(" ctx = Object.create(ctx);");for(let e of this.code)t.push(e);return this.hasRoot||t.push("return text('');"),t.push("}"),t.join("\n ")}currentKey(t){let e=this.loopLevel?`key${this.loopLevel}`:"key";return t.tKeyExpr&&(e=`${t.tKeyExpr} + ${e}`),e}}const en=["alt","aria-label","aria-placeholder","aria-roledescription","aria-valuetext","label","placeholder","title"],nn=/^(\s*)([\s\S]+?)(\s*)$/;class on{blocks=[];nextBlockId=1;isDebug=!1;targets=[];target=new tn("template");templateName;dev;translateFn;translatableAttributes=en;ast;staticDefs=[];slotNames=new Set;helpers=new Set;constructor(t,e){if(this.translateFn=e.translateFn||(t=>t),e.translatableAttributes){const t=new Set(en);for(let n of e.translatableAttributes)n.startsWith("-")?t.delete(n.slice(1)):t.add(n);this.translatableAttributes=[...t]}this.dev=e.dev||!1,this.ast=t,this.templateName=e.name,e.hasGlobalValues&&this.helpers.add("__globals__")}generateCode(){const t=this.ast;this.isDebug=11===t.type,Je.nextBlockId=1,qe={},this.compileAST(t,{block:null,index:0,forceNewBlock:!1,translate:!0,translationCtx:"",tKeyExpr:null});let e=[" let { text, createBlock, list, multi, html, toggler, comment } = bdom;"];this.helpers.size&&e.push(`let { ${[...this.helpers].join(", ")} } = helpers;`),this.templateName&&e.push(`// Template name: "${this.templateName}"`);for(let{id:t,expr:n}of this.staticDefs)e.push(`const ${t} = ${n};`);if(this.blocks.length){e.push("");for(let t of this.blocks)if(t.dom){let n=Ye(t.asXmlString());t.dynamicTagName?(n=n.replace(/^`<\w+/,`\`<\${tag || '${t.dom.nodeName}'}`),n=n.replace(/\w+>`$/,`\${tag || '${t.dom.nodeName}'}>\``),e.push(`let ${t.blockName} = tag => createBlock(${n});`)):e.push(`let ${t.blockName} = createBlock(${n});`)}}if(this.targets.length)for(let t of this.targets)e.push(""),e=e.concat(t.generateCode());e.push(""),e=e.concat("return "+this.target.generateCode());const n=e.join("\n ");if(this.isDebug){const t=`[Owl Debug]\n${n}`;console.log(t)}return n}compileInNewTarget(t,e,n,o){const s=Xe(t),i=this.target,r=new tn(s,o);return this.targets.push(r),this.target=r,this.compileAST(e,Qe(n)),this.target=i,s}addLine(t,e){this.target.addLine(t,e)}define(t,e){this.addLine(`const ${t} = ${e};`)}insertAnchor(t,e=t.children.length){const n=`block-child-${e}`,o=He.createElement(n);t.insert(o)}createBlock(t,e,n){const o=this.target.hasRoot,s=new Je(this.target,e);return o||(this.target.hasRoot=!0,s.isRoot=!0),t&&(t.children.push(s),"list"===t.type&&(s.parentVar=`c_block${t.id}`)),s}insertBlock(t,e,n){let o=e.generateExpr(t);if(e.parentVar){let t=this.target.currentKey(n);return this.helpers.add("withKey"),void this.addLine(`${e.parentVar}[${n.index}] = withKey(${o}, ${t});`)}n.tKeyExpr&&(o=`toggler(${n.tKeyExpr}, ${o})`),e.isRoot?(this.target.on&&(o=this.wrapWithEventCatcher(o,this.target.on)),this.addLine(`return ${o};`)):this.define(e.varName,o)}translate(t,e){const n=nn.exec(t);return n[1]+this.translateFn(n[2],e)+n[3]}compileAST(t,e){switch(t.type){case 1:return this.compileComment(t,e);case 0:return this.compileText(t,e);case 2:return this.compileTDomNode(t,e);case 7:return this.compileTOut(t,e);case 4:return this.compileTIf(t,e);case 8:return this.compileTForeach(t,e);case 9:return this.compileTKey(t,e);case 3:return this.compileMulti(t,e);case 6:return this.compileTCall(t,e);case 14:return this.compileTCallBlock(t,e);case 5:return this.compileTSet(t,e);case 10:return this.compileComponent(t,e);case 11:return this.compileDebug(t,e);case 12:return this.compileLog(t,e);case 13:return this.compileTCallSlot(t,e);case 15:return this.compileTTranslation(t,e);case 16:return this.compileTTranslationContext(t,e)}}compileDebug(t,e){return this.addLine("debugger;"),t.content?this.compileAST(t.content,e):null}compileLog(t,e){return this.addLine(`console.log(${We(t.expr)});`),t.content?this.compileAST(t.content,e):null}compileComment(t,e){let{block:n,forceNewBlock:o}=e;if(!n||o)n=this.createBlock(n,"comment",e),this.insertBlock(`comment(${Ye(t.value)})`,n,{...e,forceNewBlock:o&&!n});else{const e=He.createComment(t.value);n.insert(e)}return n.varName}compileText(t,e){let{block:n,forceNewBlock:o}=e,s=t.value;if(s&&!1!==e.translate&&(s=this.translate(s,e.translationCtx)),e.inPreTag||(s=s.replace(ze," ")),!n||o)n=this.createBlock(n,"text",e),this.insertBlock(`text(${Ye(s)})`,n,{...e,forceNewBlock:o&&!n});else{const e=0===t.type?He.createTextNode:He.createComment;n.insert(e.call(He,s))}return n.varName}generateHandlerCode(t,n){const o=t.split(".").slice(1).map(t=>{if(!Ge.has(t))throw new e(`Unknown event modifier: '${t}'`);return`"${t}"`});let s="";o.length&&(s=`${o.join(",")}, `);const i=We(n);if(!i.trim())return`[${s}, ctx]`;let r;const l=i.match(/^(\([^)]*\))\s*=>/),a=!l&&i.match(/^([a-zA-Z_$][a-zA-Z0-9_$]*)\s*=>/);if(l){const t=l[1].slice(1,-1).trim(),e=i.slice(l[0].length);r=t?`(ctx,${t})=>${e}`:`(ctx)=>${e}`}else if(a){const t=i.slice(a[0].length);r=`(ctx,${a[1]})=>${t}`}else this.helpers.add("callHandler"),r=`(ctx, ev) => callHandler(${i}, ctx, ev)`;const c=Xe("hdlr_fn");return this.staticDefs.push({id:c,expr:r}),`[${s}${c}, ctx]`}compileTDomNode(t,e){let{block:n,forceNewBlock:o}=e;const s=!n||o||null!==t.dynamicTag||t.ns;let i=this.target.code.length;if(s&&((t.dynamicTag||e.tKeyExpr||t.ns)&&e.block&&this.insertAnchor(e.block),n=this.createBlock(n,"block",e),this.blocks.push(n),t.dynamicTag)){const e=Xe("tag");this.define(e,We(t.dynamicTag)),n.dynamicTagName=e}const r={};for(let o in t.attrs){let s,i;if(o.startsWith("t-attf")){s=Ke(t.attrs[o]);const e=n.insertData(s,"attr");i=o.slice(7),r["block-attribute-"+e]=i}else if(o.startsWith("t-att"))if(i="t-att"===o?null:o.slice(6),s=We(t.attrs[o]),i&&Ze(t.tag,i)){"readonly"===i&&(i="readOnly"),s="value"===i?`new String((${s}) === 0 ? 0 : ((${s}) || ""))`:`new Boolean(${s})`;r[`block-property-${n.insertData(s,"prop")}`]=i}else{const t=n.insertData(s,"attr");"t-att"===o?r["block-attributes"]=String(t):r[`block-attribute-${t}`]=i}else if(this.translatableAttributes.includes(o)){const n=t.attrsTranslationCtx?.[o]||e.translationCtx;r[o]=this.translateFn(t.attrs[o],n)}else s=`"${t.attrs[o]}"`,i=o,r[o]=t.attrs[o];if("value"===i&&e.tModelSelectedExpr){r[`block-attribute-${n.insertData(`${e.tModelSelectedExpr} === ${s}`,"attr")}`]="selected"}}let l;if(t.model){const{hasDynamicChildren:e,expr:o,eventType:s,shouldNumberize:i,shouldTrim:a,targetAttr:c,specialInitTargetAttr:u,isProxy:h}=t.model;let d,f,p;if(h){const t=We(o);d=t,f=e=>`${t} = ${e}`}else{const t=Xe("expr"),e=We(o);this.helpers.add("modelExpr"),this.define(t,`modelExpr(${e})`),d=`${t}()`,f=e=>`${t}.set(${e})`}if(u){let e=c in r&&`'${r[c]}'`;if(!e&&t.attrs){const n=t.attrs[`t-att-${c}`];n&&(e=We(n))}p=n.insertData(`${d} === ${e}`,"prop"),r[`block-property-${p}`]=u}else if(e){l=`${Xe("bValue")}`,this.define(l,d)}else p=n.insertData(d,"prop"),r[`block-property-${p}`]=c;this.helpers.add("toNumber");let m=`ev.target.${c}`;m=a?`${m}.trim()`:m,m=i?`toNumber(${m})`:m;const g=`[(ctx, ev) => { ${f(m)}; }, ctx]`;p=n.insertData(g,"hdlr"),r[`block-handler-${p}`]=s}for(let e in t.on){const o=this.generateHandlerCode(e,t.on[e]);r[`block-handler-${n.insertData(o,"hdlr")}`]=e}if(t.ref){const e=We(t.ref);this.helpers.add("createRef");const o=`createRef(${e})`,s=n.insertData(o,"ref");r["block-ref"]=String(s)}const a=t.ns||e.nameSpace,c=a?He.createElementNS(a,t.tag):He.createElement(t.tag);for(const[t,e]of Object.entries(r))"class"===t&&""===e||c.setAttribute(t,e);if(n.insert(c),t.content.length){const o=n.currentDom;n.currentDom=c;const s=t.content;for(let o=0;o<s.length;o++){const s=t.content[o],i=Qe(e,{block:n,index:n.childNumber,forceNewBlock:!1,tKeyExpr:e.tKeyExpr,nameSpace:a,tModelSelectedExpr:l,inPreTag:e.inPreTag||"pre"===t.tag});this.compileAST(s,i)}n.currentDom=o}if(s&&(this.insertBlock(`${n.blockName}(ddd)`,n,e),n.children.length&&n.hasDynamicChildren)){const t=this.target.code,e=n.children.slice();let o=e.shift();for(let n=i;n<t.length&&(!t[n].trimStart().startsWith(`const ${o.varName} `)||(t[n]=t[n].replace(`const ${o.varName}`,o.varName),o=e.shift(),o));n++);this.addLine(`let ${n.children.map(t=>t.varName).join(", ")};`,i)}return n.varName}compileZero(){this.helpers.add("zero");const t=this.slotNames.has(Ue);this.slotNames.add(Ue);let e=this.target.loopLevel?`key${this.target.loopLevel}`:"key";return t&&(e=this.generateComponentKey(e)),`ctx[zero]?.(node, ${e}) || text("")`}compileTOut(t,e){let n,{block:o}=e;if(o&&this.insertAnchor(o),o=this.createBlock(o,"html",e),"0"===t.expr)n=this.compileZero();else if(t.body){let o=null;o=Je.nextBlockId;const s=Qe(e);this.compileAST({type:3,content:t.body},s),this.helpers.add("safeOutput"),n=`safeOutput(${We(t.expr)}, b${o})`}else this.helpers.add("safeOutput"),n=`safeOutput(${We(t.expr)})`;return this.insertBlock(n,o,e),o.varName}compileTIfBranch(t,e,n){this.target.indentLevel++;let o=e.children.length;this.compileAST(t,Qe(n,{block:e,index:n.index})),e.children.length>o&&this.insertAnchor(e,o),this.target.indentLevel--}compileTIf(t,e,n){let{block:o,forceNewBlock:s}=e;const i=this.target.code.length,r=!o||"multi"!==o.type&&s;if(o&&(o.hasDynamicChildren=!0),(!o||"multi"!==o.type&&s)&&(o=this.createBlock(o,"multi",e)),this.addLine(`if (${We(t.condition)}) {`),this.compileTIfBranch(t.content,o,e),t.tElif)for(let n of t.tElif)this.addLine(`} else if (${We(n.condition)}) {`),this.compileTIfBranch(n.content,o,e);if(t.tElse&&(this.addLine("} else {"),this.compileTIfBranch(t.tElse,o,e)),this.addLine("}"),r){if(o.children.length){const t=this.target.code,e=o.children.slice();let n=e.shift();for(let o=i;o<t.length&&(!t[o].trimStart().startsWith(`const ${n.varName} `)||(t[o]=t[o].replace(`const ${n.varName}`,n.varName),n=e.shift(),n));o++);this.addLine(`let ${o.children.map(t=>t.varName).join(", ")};`,i)}const t=o.children.map(t=>t.varName).join(", ");this.insertBlock(`multi([${t}])`,o,e)}return o.varName}compileTForeach(t,e){let{block:n}=e;n&&this.insertAnchor(n),n=this.createBlock(n,"list",e),this.target.loopLevel++;const o=`i${this.target.loopLevel}`,s=Xe("ctx");this.addLine(`const ${s} = ctx;`),this.target.loopCtxVars.push(s);const i=`v_block${n.id}`,r=`k_block${n.id}`,l=`l_block${n.id}`,a=`c_block${n.id}`;this.helpers.add("prepareList"),this.define(`[${r}, ${i}, ${l}, ${a}]`,`prepareList(${We(t.collection)});`),this.dev&&this.define(`keys${n.id}`,"new Set()"),this.addLine(`for (let ${o} = 0; ${o} < ${l}; ${o}++) {`),this.target.indentLevel++,this.addLine(`let ctx = Object.create(${s});`),this.addLine(`ctx[\`${t.elem}\`] = ${r}[${o}];`),1&t.noFlags||this.addLine(`ctx[\`${t.elem}_first\`] = ${o} === 0;`),2&t.noFlags||this.addLine(`ctx[\`${t.elem}_last\`] = ${o} === ${r}.length - 1;`),4&t.noFlags||this.addLine(`ctx[\`${t.elem}_index\`] = ${o};`),8&t.noFlags||this.addLine(`ctx[\`${t.elem}_value\`] = ${i}[${o}];`),this.define(`key${this.target.loopLevel}`,t.key?We(t.key):o),this.dev&&(this.helpers.add("OwlError"),this.addLine(`if (keys${n.id}.has(String(key${this.target.loopLevel}))) { throw new OwlError(\`Got duplicate key in t-foreach: \${key${this.target.loopLevel}}\`)}`),this.addLine(`keys${n.id}.add(String(key${this.target.loopLevel}));`));const c=Qe(e,{block:n,index:o});return this.compileAST(t.body,c),this.target.indentLevel--,this.target.loopLevel--,this.target.loopCtxVars.pop(),this.addLine("}"),this.insertBlock("l",n,e),n.varName}compileTKey(t,e){const n=Xe("tKey_");return this.define(n,We(t.expr)),e=Qe(e,{tKeyExpr:n,block:e.block,index:e.index}),this.compileAST(t.content,e)}compileMulti(t,e){let{block:n,forceNewBlock:o}=e;const s=!n||o;let i=this.target.code.length;if(s){let o=null;if(t.content.filter(t=>!t.hasNoRepresentation).length<=1){for(let n of t.content){const t=this.compileAST(n,e);o=o||t}return o}n=this.createBlock(n,"multi",e)}let r=0;for(let o=0,s=t.content.length;o<s;o++){const s=t.content[o],i=!s.hasNoRepresentation,l=Qe(e,{block:n,index:r,forceNewBlock:i});this.compileAST(s,l),i&&r++}if(s){if(n.hasDynamicChildren&&n.children.length){const t=this.target.code,e=n.children.slice();let o=e.shift();for(let n=i;n<t.length&&(!t[n].trimStart().startsWith(`const ${o.varName} `)||(t[n]=t[n].replace(`const ${o.varName}`,o.varName),o=e.shift(),o));n++);this.addLine(`let ${n.children.map(t=>t.varName).join(", ")};`,i)}const t=n.children.map(t=>t.varName).join(", ");this.insertBlock(`multi([${t}])`,n,e)}return n.varName}compileTCall(t,e){let{block:n,forceNewBlock:o}=e;const s=t.attrs?this.formatPropObject(t.attrs,t.attrsTranslationCtx,e.translationCtx):[],i=Fe.test(t.name)?Ke(t.name):"`"+t.name+"`";if(n&&!o&&this.insertAnchor(n),n=this.createBlock(n,"multi",e),t.body){const n=this.compileInNewTarget("callBody",t.body,e),o=Xe("lazyBlock");this.define(o,`${n}.bind(this, ctx)`),this.helpers.add("zero"),s.push(`[zero]: ${o}`)}let r;const l=`{${s.join(", ")}}`;if(t.context){const e=Xe("ctx");this.addLine(`const ${e} = ${We(t.context)};`),r=s.length?`Object.assign({this: ${e}}, ${l})`:`{this: ${e}}`}else r=0===s.length?"ctx":`Object.assign(Object.create(ctx), ${l})`;const a=this.generateComponentKey();return this.helpers.add("callTemplate"),this.insertBlock(`callTemplate(${i}, this, app, ${r}, node, ${a})`,n,{...e,forceNewBlock:!n}),n.varName}compileTCallBlock(t,e){let{block:n,forceNewBlock:o}=e;return n&&(o||this.insertAnchor(n)),n=this.createBlock(n,"multi",e),this.insertBlock(We(t.name),n,{...e,forceNewBlock:!n}),n.varName}compileTSet(t,e){const n=t.value?We(t.value||""):"null",o=0===this.target.loopLevel,s=this.target.tSetVars.get(t.name),i=void 0!==s&&this.target.loopLevel>s;if(t.body){this.helpers.add("LazyValue");const r={type:3,content:t.body};let l=`new LazyValue(${this.compileInNewTarget("value",r,e)}, ctx, this, node, ${this.target.currentKey(e)})`;if(l=t.value?l?`withDefault(${n}, ${l})`:n:l,this.helpers.add("withDefault"),i){const e=this.target.loopCtxVars[s];this.addLine(`${e}[\`${t.name}\`] = ${l};`)}else o?(this.target.needsScopeProtection=!0,this.addLine(`ctx[\`${t.name}\`] = ${l};`),this.target.tSetVars.set(t.name,0)):(this.addLine(`ctx[\`${t.name}\`] = ${l};`),this.target.tSetVars.set(t.name,this.target.loopLevel))}else{let r;if(t.defaultValue){const o=Ye(e.translate?this.translate(t.defaultValue,e.translationCtx):t.defaultValue);t.value?(this.helpers.add("withDefault"),r=`withDefault(${n}, ${o})`):r=o}else r=n;if(i){const e=this.target.loopCtxVars[s];this.addLine(`${e}["${t.name}"] = ${r};`)}else o?(this.target.needsScopeProtection=!0,this.addLine(`ctx["${t.name}"] = ${r};`),this.target.tSetVars.set(t.name,0)):(this.addLine(`ctx["${t.name}"] = ${r};`),this.target.tSetVars.set(t.name,this.target.loopLevel))}return null}generateComponentKey(t="key"){const e=[Xe("__")];for(let t=0;t<this.target.loopLevel;t++)e.push(`\${key${t+1}}`);return`${t} + \`${e.join("__")}\``}formatProp(t,n,o,s){if(t.endsWith(".translate")){const e=o?.[t]||s;n=Ye(this.translateFn(n,e))}else n=We(n);if(t.includes(".")){let[o,s]=t.split(".");switch(t=o,s){case"bind":n=`(${n}).bind(this)`;break;case"alike":case"translate":break;default:throw new e(`Invalid prop suffix: ${s}`)}}return`${t=/^[a-z_]+$/i.test(t)?t:`'${t}'`}: ${n||void 0}`}formatPropObject(t,e,n){return Object.entries(t).map(([t,o])=>this.formatProp(t,o,e,n))}getPropString(t,e){let n=`{${t.join(",")}}`;return e&&(n=`Object.assign({}, ${We(e)}${t.length?", "+n:""})`),n}compileComponent(t,e){let{block:n}=e;const o="slots"in(t.props||{}),s=[],i=[];for(let n in t.props||{}){let[o,r]=n.split(".");if(r){s.push(this.formatProp(n,t.props[n],t.propsTranslationCtx,e.translationCtx));continue}const{expr:l,freeVariables:a}=Ve(t.props[n]),c=/^[a-z_]+$/i.test(o)?o:`'${o}'`;if(s.push(`${c}: ${l||void 0}`),a)for(const t of a){const e=`${o}.${t}`;i.push(`"${e}"`),s.push(`"${e}": ctx['${t}']`)}else i.push(`"${o}"`)}let r="";if(t.slots){let n=[];for(let o in t.slots){const s=t.slots[o],i=[];if(s.content){const t=this.compileInNewTarget("slot",s.content,e,s.on);i.push(`__render: ${t}.bind(this), __ctx: ctx`)}const r=t.slots[o].scope;r&&i.push(`__scope: "${r}"`),t.slots[o].attrs&&i.push(...this.formatPropObject(t.slots[o].attrs,t.slots[o].attrsTranslationCtx,e.translationCtx));const l=`{${i.join(", ")}}`;n.push(`'${o}': ${l}`)}r=`{${n.join(", ")}}`}!r||t.dynamicProps||o||(this.helpers.add("markRaw"),s.push(`slots: markRaw(${r})`));let l,a,c=this.getPropString(s,t.dynamicProps);(r&&(t.dynamicProps||o)||this.dev)&&(l=Xe("props"),this.define(l,c),c=l),r&&(t.dynamicProps||o)&&(this.helpers.add("markRaw"),this.addLine(`${l}.slots = markRaw(Object.assign(${r}, ${l}.slots))`)),t.isDynamic?(a=Xe("Comp"),this.define(a,We(t.name))):a=`\`${t.name}\``,n&&(!1===e.forceNewBlock||e.tKeyExpr)&&this.insertAnchor(n);let u=this.generateComponentKey();e.tKeyExpr&&(u=`${e.tKeyExpr} + ${u}`);let h=Xe("comp");this.helpers.add("createComponent"),this.staticDefs.push({id:h,expr:`createComponent(app, ${t.isDynamic?null:a}, ${!t.isDynamic}, ${!!t.slots}, ${!!t.dynamicProps}, [${i}])`}),t.isDynamic&&(u=`(${a}).name + ${u}`);let d=`${h}(${c}, ${u}, node, this, ${t.isDynamic?a:null})`;return t.isDynamic&&(d=`toggler(${a}, ${d})`),t.on&&(d=this.wrapWithEventCatcher(d,t.on)),n=this.createBlock(n,"multi",e),this.insertBlock(d,n,e),n.varName}wrapWithEventCatcher(t,e){this.helpers.add("createCatcher");let n=Xe("catcher"),o={},s=[];for(let t in e){let n=Xe("hdlr"),i=s.push(n)-1;o[t]=i;const r=this.generateHandlerCode(t,e[t]);this.define(n,r)}return this.staticDefs.push({id:n,expr:`createCatcher(${JSON.stringify(o)})`}),`${n}(${t}, [${s.join(",")}])`}compileTCallSlot(t,e){this.helpers.add("callSlot");let n,o,{block:s}=e,i=!1,r=!1;t.name.match(Fe)?(i=!0,r=!0,o=Ke(t.name)):(o="'"+t.name+"'",r=r||this.slotNames.has(t.name),this.slotNames.add(t.name));const l={...t.attrs},a=l["t-props"];delete l["t-props"];let c=this.target.loopLevel?`key${this.target.loopLevel}`:"key";r&&(c=this.generateComponentKey(c));const u=t.attrs?this.formatPropObject(l,t.attrsTranslationCtx,e.translationCtx):[],h=this.getPropString(u,a);if(t.defaultContent){n=`callSlot(ctx, node, ${c}, ${o}, ${i}, ${h}, ${this.compileInNewTarget("defaultContent",t.defaultContent,e)}.bind(this))`}else if(i){let t=Xe("slot");this.define(t,o),n=`toggler(${t}, callSlot(ctx, node, ${c}, ${t}, ${i}, ${h}))`}else n=`callSlot(ctx, node, ${c}, ${o}, ${i}, ${h})`;return t.on&&(n=this.wrapWithEventCatcher(n,t.on)),s&&this.insertAnchor(s),s=this.createBlock(s,"multi",e),this.insertBlock(n,s,{...e,forceNewBlock:!1}),s.varName}compileTTranslation(t,e){return t.content?this.compileAST(t.content,Object.assign({},e,{translate:!1})):null}compileTTranslationContext(t,e){return t.content?this.compileAST(t.content,Object.assign({},e,{translationCtx:t.translationCtx})):null}}const sn=new WeakMap;function rn(t,n){var o;return function(t){let n=t.querySelectorAll("[t-elif], [t-else]");for(let t=0,o=n.length;t<o;t++){let o=n[t],s=o.previousElementSibling,i=t=>s.getAttribute(t),r=t=>+!!o.getAttribute(t);if(!s||!i("t-if")&&!i("t-elif"))throw new e("t-elif and t-else directives must be preceded by a t-if or t-elif directive");{if(i("t-foreach"))throw new e("t-if cannot stay at the same level as t-foreach when using t-elif or t-else");if(["t-if","t-elif","t-else"].map(r).reduce(function(t,e){return t+e})>1)throw new e("Only one conditional branching directive is allowed per node");let t;for(;(t=o.previousSibling)!==s;){if(t.nodeValue.trim().length&&8!==t.nodeType)throw new e("text is not allowed between branching directives");t.remove()}}}}(o=t),function(t){const n=[...t.querySelectorAll("[t-out]")].filter(t=>t.tagName[0]===t.tagName[0].toUpperCase()||t.hasAttribute("t-component"));for(const t of n){if(t.childNodes.length)throw new e("Cannot have t-out on a component that already has content");const n=t.getAttribute("t-out");t.removeAttribute("t-out");const o=t.ownerDocument.createElement("t");null!=n&&o.setAttribute("t-out",n),t.appendChild(o)}}(o),ln(t,n)||{type:0,value:""}}function ln(t,n){return t instanceof Element?function(t,n){if(!n.customDirectives)return null;const o=t.getAttributeNames();for(let s of o){if("t-custom"===s||"t-custom-"===s)throw new e("Missing custom directive name with t-custom directive");if(s.startsWith("t-custom-")){const o=s.split(".")[0].slice(9),i=n.customDirectives[o];if(!i)throw new e(`Custom directive "${o}" is not defined`);const r=t.getAttribute(s),l=s.split(".").slice(1);t.removeAttribute(s);try{i(t,r,l)}catch(t){throw new e(`Custom directive "${o}" throw the following error: ${t}`)}return ln(t,n)}}return null}(t,n)||function(t,e){if(t.hasAttribute("t-debug")){t.removeAttribute("t-debug");const n=ln(t,e),o={type:11,content:n};return n?.hasNoRepresentation&&(o.hasNoRepresentation=!0),o}if(t.hasAttribute("t-log")){const n=t.getAttribute("t-log");t.removeAttribute("t-log");const o=ln(t,e),s={type:12,expr:n,content:o};return o?.hasNoRepresentation&&(s.hasNoRepresentation=!0),s}return null}(t,n)||function(t,n){if(!t.hasAttribute("t-foreach"))return null;const o=t.outerHTML,s=t.getAttribute("t-foreach");t.removeAttribute("t-foreach");const i=t.getAttribute("t-as")||"";t.removeAttribute("t-as");const r=t.getAttribute("t-key");if(!r)throw new e(`"Directive t-foreach should always be used with a t-key!" (expression: t-foreach="${s}" t-as="${i}")`);t.removeAttribute("t-key");const l=ln(t,n);if(!l)return null;const a=!o.includes("t-call");let c=0;a&&!o.includes(`${i}_first`)&&(c|=1);a&&!o.includes(`${i}_last`)&&(c|=2);a&&!o.includes(`${i}_index`)&&(c|=4);a&&!o.includes(`${i}_value`)&&(c|=8);return{type:8,collection:s,elem:i,body:l,key:r,noFlags:c}}(t,n)||function(t,e){if(!t.hasAttribute("t-if"))return null;const n=t.getAttribute("t-if");t.removeAttribute("t-if");const o=ln(t,e)||{type:0,value:""};let s=t.nextElementSibling;const i=[];for(;s&&s.hasAttribute("t-elif");){const t=s.getAttribute("t-elif");s.removeAttribute("t-elif");const n=ln(s,e),o=s.nextElementSibling;s.remove(),s=o,n&&i.push({condition:t,content:n})}let r=null;s&&s.hasAttribute("t-else")&&(s.removeAttribute("t-else"),r=ln(s,e),s.remove());return{type:4,condition:n,content:o,tElif:i.length?i:null,tElse:r}}(t,n)||function(t,e){if("off"!==t.getAttribute("t-translation"))return null;t.removeAttribute("t-translation");const n=ln(t,e);if(3===n?.type){return pn(n.content.map(hn))}return hn(n)}(t,n)||function(t,e){const n=t.getAttribute("t-translation-context");if(!n)return null;t.removeAttribute("t-translation-context");const o=ln(t,e);if(3===o?.type){return pn(o.content.map(t=>dn(t,n)))}return dn(o,n)}(t,n)||function(t,n){if(!t.hasAttribute("t-call"))return null;if("t"!==t.tagName)throw new e(`Directive 't-call' can only be used on <t> nodes (used on a <${t.tagName}>)`);const o=t.getAttribute("t-call"),s=t.getAttribute("t-call-context");t.removeAttribute("t-call"),t.removeAttribute("t-call-context");let i=null,r=null;for(let e of t.getAttributeNames()){const n=t.getAttribute(e);if(e.startsWith("t-translation-context-")){r=r||{},r[e.slice(22)]=n}else i=i||{},i[e]=n}const l=mn(t,n);return{type:6,name:o,attrs:i,attrsTranslationCtx:r,body:l,context:s}}(t,n)||function(t){if(!t.hasAttribute("t-call-block"))return null;const e=t.getAttribute("t-call-block");return{type:14,name:e}}(t)||function(t,e){if(!t.hasAttribute("t-key"))return null;const n=t.getAttribute("t-key");t.removeAttribute("t-key");const o=ln(t,e);if(!o)return null;const s={type:9,expr:n,content:o};o.hasNoRepresentation&&(s.hasNoRepresentation=!0);return s}(t,n)||function(t,e){if(!t.hasAttribute("t-out")&&!t.hasAttribute("t-esc"))return null;t.hasAttribute("t-esc")&&console.warn('t-esc has been deprecated in favor of t-out. If the value to render is not wrapped by the "markup" function, it will be escaped');const n=t.getAttribute("t-out")||t.getAttribute("t-esc");t.removeAttribute("t-out"),t.removeAttribute("t-esc");const o={type:7,expr:n,body:null},s=t.getAttribute("t-ref");t.removeAttribute("t-ref");const i=ln(t,e);if(!i)return o;if(2===i.type)return o.body=i.content.length?i.content:null,{...i,ref:s,content:[o]};return o}(t,n)||function(t,e){if(!t.hasAttribute("t-call-slot")&&!t.hasAttribute("t-slot"))return null;t.hasAttribute("t-slot")&&console.warn("t-slot has been renamed t-call-slot.");const n=t.getAttribute("t-call-slot")||t.getAttribute("t-slot");t.removeAttribute("t-call-slot"),t.removeAttribute("t-slot");let o=null,s=null,i=null;for(let e of t.getAttributeNames()){const n=t.getAttribute(e);if(e.startsWith("t-on-"))i=i||{},i[e.slice(5)]=n;else if(e.startsWith("t-translation-context-")){s=s||{},s[e.slice(22)]=n}else o=o||{},o[e]=n}return{type:13,name:n,attrs:o,attrsTranslationCtx:s,on:i,defaultContent:mn(t,e)}}(t,n)||function(t,n){let o=t.tagName;const s=o[0];let i=t.hasAttribute("t-component");if(i&&"t"!==o)throw new e(`Directive 't-component' can only be used on <t> nodes (used on a <${o}>)`);if(s!==s.toUpperCase()&&!i)return null;i&&(o=t.getAttribute("t-component"),t.removeAttribute("t-component"));const r=t.getAttribute("t-props");t.removeAttribute("t-props");const l=t.getAttribute("t-slot-scope");t.removeAttribute("t-slot-scope");let a=null,c=null,u=null;for(let n of t.getAttributeNames()){const o=t.getAttribute(n);if(n.startsWith("t-translation-context-")){u=u||{},u[n.slice(22)]=o}else if(n.startsWith("t-")){if(!n.startsWith("t-on-")){const t=un.get(n.split("-").slice(0,2).join("-"));throw new e(t||`unsupported directive on Component: ${n}`)}a=a||{},a[n.slice(5)]=o}else c=c||{},c[n]=o}let h=null;if(t.hasChildNodes()){const o=t.cloneNode(!0),s=Array.from(o.querySelectorAll("[t-set-slot]"));for(let t of s){if("t"!==t.tagName)throw new e(`Directive 't-set-slot' can only be used on <t> nodes (used on a <${t.tagName}>)`);const s=t.getAttribute("t-set-slot");let i=t.parentElement,r=!1;for(;i&&i!==o;){if(i.hasAttribute("t-component")||i.tagName[0]===i.tagName[0].toUpperCase()){r=!0;break}i=i.parentElement}if(r||!i)continue;t.removeAttribute("t-set-slot"),t.remove();const l=ln(t,n);let a=null,c=null,u=null,d=null;for(let e of t.getAttributeNames()){const n=t.getAttribute(e);if("t-slot-scope"!==e)if(e.startsWith("t-translation-context-")){u=u||{},u[e.slice(22)]=n}else e.startsWith("t-on-")?(a=a||{},a[e.slice(5)]=n):(c=c||{},c[e]=n);else d=n}h=h||{},h[s]={content:l,on:a,attrs:c,attrsTranslationCtx:u,scope:d}}const i=mn(o,n);h=h||{},i&&!h.default&&(h.default={content:i,on:a,attrs:null,attrsTranslationCtx:null,scope:l})}return{type:10,name:o,isDynamic:i,dynamicProps:r,props:c,propsTranslationCtx:u,slots:h,on:a}}(t,n)||function(t,n){const{tagName:o}=t,s=t.getAttribute("t-tag");if(t.removeAttribute("t-tag"),"t"===o&&!s)return null;if(o.startsWith("block-"))throw new e(`Invalid tag name: '${o}'`);n=Object.assign({},n),"pre"===o&&(n.inPreTag=!0);let i=!n.nameSpace&&cn.has(o)?"http://www.w3.org/2000/svg":null;const r=t.getAttribute("t-ref");t.removeAttribute("t-ref");const l=t.getAttributeNames();let a=null,c=null,u=null,h=null;for(let s of l){const r=t.getAttribute(s);if("t-on"===s||"t-on-"===s)throw new e("Missing event name with t-on directive");if(s.startsWith("t-on-"))u=u||{},u[s.slice(5)]=r;else if(s.startsWith("t-model")){if(!["input","select","textarea"].includes(o))throw new e("The t-model directive only works with <input>, <textarea> and <select>");const i=t.getAttribute("type"),l="input"===o,a="select"===o,c=l&&"checkbox"===i,u=l&&"radio"===i,d=s.includes(".trim"),f=d||s.includes(".lazy");h={expr:r,targetAttr:c?"checked":"value",specialInitTargetAttr:u?"checked":null,eventType:u?"click":a||f?"change":"input",hasDynamicChildren:!1,shouldTrim:d,shouldNumberize:s.includes(".number"),isProxy:s.includes(".proxy")},a&&((n=Object.assign({},n)).tModelInfo=h)}else{if(s.startsWith("block-"))throw new e(`Invalid attribute: '${s}'`);if("xmlns"===s)i=r;else if(s.startsWith("t-translation-context-")){c=c||{},c[s.slice(22)]=r}else if("t-name"!==s){if(s.startsWith("t-")&&!s.startsWith("t-att"))throw new e(`Unknown QWeb directive: '${s}'`);const t=n.tModelInfo;t&&["t-att-value","t-attf-value"].includes(s)&&(t.hasDynamicChildren=!0),a=a||{},a[s]=r}}}i&&(n.nameSpace=i);const d=fn(t,n);return{type:2,tag:o,dynamicTag:s,attrs:a,attrsTranslationCtx:c,on:u,ref:r,content:d,model:h,ns:i}}(t,n)||function(t,e){if(!t.hasAttribute("t-set"))return null;const n=t.getAttribute("t-set"),o=t.getAttribute("t-value")||null,s=t.innerHTML===t.textContent&&t.textContent||null;let i=null;t.textContent!==t.innerHTML&&(i=fn(t,e));return{type:5,name:n,value:o,defaultValue:s,body:i,hasNoRepresentation:!0}}(t,n)||function(t,e){if("t"!==t.tagName)return null;return mn(t,e)}(t,n):function(t,e){if(t.nodeType===Node.TEXT_NODE){let n=t.textContent||"";return e.inPreTag||!an.test(n)||n.trim()?{type:0,value:n}:null}if(t.nodeType===Node.COMMENT_NODE)return{type:1,value:t.textContent||""};return null}(t,n)}const an=/[\r\n]/;const cn=new Set(["svg","g","path"]);const un=new Map([["t-ref","t-ref is no longer supported on components. Consider exposing only the public part of the component's API through a callback prop."],["t-att","t-att makes no sense on component: props are already treated as expressions"],["t-attf","t-attf is not supported on components: use template strings for string interpolation in props"]]);function hn(t){const e={type:15,content:t};return t?.hasNoRepresentation&&(e.hasNoRepresentation=!0),e}function dn(t,e){const n={type:16,content:t,translationCtx:e};return t?.hasNoRepresentation&&(n.hasNoRepresentation=!0),n}function fn(t,e){const n=[];for(let o of t.childNodes){const t=ln(o,e);t&&(3===t.type?n.push(...t.content):n.push(t))}return n}function pn(t){const e={type:3,content:t};return t.every(t=>t.hasNoRepresentation)&&(e.hasNoRepresentation=!0),e}function mn(t,e){const n=fn(t,e);switch(n.length){case 0:return null;case 1:return n[0];default:return pn(n)}}function gn(t,o={hasGlobalValues:!1}){const s=function(t,e){const o={inPreTag:!1,customDirectives:e};if("string"==typeof t)return rn(n(`<t>${t}</t>`).firstChild,o);let s=sn.get(t);return s||(s=rn(t.cloneNode(!0),o),sn.set(t,s)),s}(t,o.customDirectives),i=new on(s,o).generateCode();try{return new Function("app, bdom, helpers",i)}catch(t){const{name:n}=o,s=new e(`Failed to compile ${n?`template "${n}"`:"anonymous template"}: ${t.message}\n\ngenerated code:\nfunction(app, bdom, helpers) {\n${i}\n}`);throw s.cause=t,s}}function yn(t){const e=It(()=>(Wt(void 0),bn(e),Wt(e),t()),!1);return Vt()?.observers.add(e),Ft(e),function(){const t=Vt();Wt(void 0),bn(e),Wt(t)}}function bn(t){Kt(t),function(t){const e=t.value;e&&"function"==typeof e&&(e(),t.value=void 0)}(t);for(const e of t.observers)e.state=Ot.EXECUTED,Kt(e),bn(e);t.observers.clear()}class vn{static _shadowId;static get id(){return this._shadowId??this.name}static set id(t){this._shadowId=t}__owl__;constructor(t){this.__owl__=t}setup(){}}class wn{app;config;onDestroyCb=[];computations=[];plugins;status=0;constructor(t,e={}){if(this.app=t,this.config=e.config??{},e.parent){const t=e.parent;t.onDestroyCb.push(()=>this.destroy()),this.plugins=Object.create(t.plugins)}else this.plugins={}}destroy(){const t=this.onDestroyCb;for(;t.length;)t.pop()();for(const t of this.computations)Ut(t);this.status=3}getPluginById(t){return this.plugins[t]||null}getPlugin(t){return this.getPluginById(t.id)}startPlugin(t){if(!t.id)throw new e(`Plugin "${t.name}" has no id`);if(this.plugins.hasOwnProperty(t.id)){const n=this.getPluginById(t.id).constructor;if(n!==t)throw new e(`Trying to start a plugin with the same id as an other plugin (id: '${t.id}', existing plugin: '${n.name}', starting plugin: '${t.name}')`);return null}const n=new t(this);return this.plugins[t.id]=n,n.setup(),n}startPlugins(t){Ct.push({type:"plugin",app:this.app,manager:this,get status(){return this.manager.status}});try{for(const e of t)this.startPlugin(e)}finally{Ct.pop()}this.status=1}}function $n(t,e){Array.isArray(e)?t.startPlugins(e):t.onDestroyCb.push(yn(()=>{const n=e.items();Ht(()=>t.startPlugins(n))}))}let xn;"undefined"!=typeof window&&(xn=window.requestAnimationFrame.bind(window));class Nn{static requestAnimationFrame=xn;tasks=new Set;requestAnimationFrame;frame=0;delayedRenders=[];cancelledNodes=new Set;processing=!1;constructor(){this.requestAnimationFrame=Nn.requestAnimationFrame}addFiber(t){this.tasks.add(t.root)}scheduleDestroy(t){this.cancelledNodes.add(t),0===this.frame&&(this.frame=this.requestAnimationFrame(()=>this.processTasks()))}flush(){if(this.delayedRenders.length){let t=this.delayedRenders;this.delayedRenders=[];for(let e of t)e.root&&3!==e.node.status&&e.node.fiber===e&&e.render()}0===this.frame&&(this.frame=this.requestAnimationFrame(()=>this.processTasks()))}processTasks(){if(!this.processing){this.processing=!0,this.frame=0;for(let t of this.cancelledNodes)t._destroy();this.cancelledNodes.clear();for(let t of this.tasks){if(t.root!==t){this.tasks.delete(t);continue}const e=Gt.has(t);e&&0!==t.counter?this.tasks.delete(t):3!==t.node.status?0===t.counter&&(e||t.complete(),t.appliedToDom&&this.tasks.delete(t)):this.tasks.delete(t)}for(let t of this.tasks)3===t.node.status&&this.tasks.delete(t);this.processing=!1}}}let kn=!1;const En=new Set;"undefined"!=typeof window&&(window.__OWL_DEVTOOLS__||={apps:En,Fiber:Jt,RootFiber:Qt,toRaw:ce,proxy:ge});class Tn extends _e{static validateTarget=_;static apps=En;static version="3.0.0-alpha.23";name;scheduler=new Nn;roots=new Set;pluginManager;constructor(t={}){super(t),this.name=t.name||"",En.add(this),this.pluginManager=new wn(this,{config:t.config}),t.plugins&&$n(this.pluginManager,t.plugins),t.test&&(this.dev=!0),!this.dev||t.test||kn||(console.info("Owl is running in 'dev' mode."),kn=!0)}createRoot(t,e={}){const n=e.props||{};let o,s;const i=new Promise((t,e)=>{o=t,s=e}),r=function(){const t=Ct.slice();return()=>{Ct=t}}();let l,a=null;try{l=new ee(t,n,this,null,null)}catch(t){a=t,s(t)}finally{r()}const c={node:l,promise:i,mount:(t,e)=>(a||(Tn.validateTarget(t),this.mountNode(l,t,o,s,e)),i),destroy:()=>{this.roots.delete(c),l.destroy(),this.scheduler.processTasks()}};return this.roots.add(c),c}mountNode(t,e,n,o,s){let i=qt.get(t);i||(i=[],qt.set(t,i)),i.unshift((t,e)=>{const n=e();o(n)}),t.mounted.push(()=>{n(t.component),i.shift()}),t.mountComponent(e,s)}destroy(){for(let t of this.roots)t.destroy();this.pluginManager.destroy(),this.scheduler.processTasks(),En.delete(this)}_handleError(t){throw t}}function An(t,e,n){if(t.app.dev){const o=t.component,s=`${o?o.constructor.name:"Component"}.${n}`;return{[s]:()=>e.call(o)}[s]}return e.bind(t.component)}function Cn(t){const e=_t();"component"===e.type?e.node.willDestroy.unshift(An(e.node,t,"onWillDestroy")):e.manager.onDestroyCb.push(t)}function _n(t,e={}){const n=It(()=>{const e=t();return Object.is(n.value,e)||Mt(n),e},!0);function o(){return n.state!==Ot.EXECUTED&&Ft(n),Pt(n),n.value}o[Rt]=n,o.set=e.set??(()=>{});const s=Ct.at(-1);return s&&("component"===s.type?s.node.computations.push(n):"plugin"===s.type&&s.manager.computations.push(n)),o}function Dn(t,e){const n={type:"signal",value:t,observers:new Set};let o=e(n);const s=()=>(Pt(n),o);return s[Rt]=n,s.set=function(t){Object.is(n.value,t)||(n.value=t,o=e(n),Mt(n))},s}function Sn(t){return Dn(t,t=>t.value)}function On(t,n,o="Value does not match the type"){const s=Ln(t,n);if(s.length){const t=JSON.stringify(s,(t,e)=>"function"==typeof e?e.name:e,2);throw new e(`${o}\n${t}`)}}function Rn(t,e,n,o){return{issueDepth:0,path:n,value:e,get isValid(){return!t.length},addIssue(e){t.push({received:this.value,path:this.path,...e})},mergeIssues(e){t.push(...e)},validate(t){t(this),!this.isValid&&o&&(o.issueDepth=this.issueDepth+1)},withIssues(t){return Rn(t,this.value,this.path,this)},withKey(e){return Rn(t,this.value[e],this.path.concat(e),this)}}}function Ln(t,e){const n=[];return e(Rn(n,t,[])),n}Sn.invalidate=function(t){if("function"!=typeof t||"signal"!==t[Rt]?.type)throw new e(`Value is not a signal (${t})`);Mt(t[Rt])},Sn.Array=function(t){return Dn(t,t=>me(t.value,t))},Sn.Map=function(t){return Dn(t,t=>me(t.value,t))},Sn.Object=function(t){return Dn(t,t=>me(t.value,t))},Sn.Set=function(t){return Dn(t,t=>me(t.value,t))};function Bn(t){return function(e){"function"==typeof e.value&&(e.value===t||e.value.prototype instanceof t)||e.addIssue({message:`value is not '${t.name}' or an extension`})}}function In(t){return function(e){e.value instanceof t||e.addIssue({message:`value is not an instance of '${t.name}'`})}}function Pn(t){return function(e){e.value!==t&&e.addIssue({message:`value is not equal to ${"string"==typeof t?`'${t}'`:t}`})}}function Mn(t,e,n){if("object"!=typeof t.value||Array.isArray(t.value)||null===t.value)return void t.addIssue({message:"value is not an object"});if(!e)return;const o=!Array.isArray(e);let s=e;if(Array.isArray(e)){s={};for(const t of e)s[t]=null}const i=[];for(const e in s){const n=e.endsWith("?")?e.slice(0,-1):e;void 0!==t.value[n]?o&&t.withKey(n).validate(s[e]):e.endsWith("?")||i.push(n)}if(i.length&&t.addIssue({message:"object value has missing keys",missingKeys:i}),n){const e=[];for(const n in t.value)n in s||`${n}?`in s||e.push(n);e.length&&t.addIssue({message:"object value has unknown keys",unknownKeys:e})}}function jn(t){return function(e){let n=0;const o=[];for(const s of t){const t=e.withIssues(o);if(t.validate(s),o.length===n||t.issueDepth>0)return void e.mergeIssues(o.slice(n));n=o.length}e.addIssue({message:"value does not match union type",subIssues:o})}}const Vn={and:function(t){return function(e){for(const n of t)e.validate(n)}},any:function(){return function(){}},array:function(t){return function(e){if(Array.isArray(e.value)){if(t)for(let n=0;n<e.value.length;n++)e.withKey(n).validate(t)}else e.addIssue({message:"value is not an array"})}},boolean:function(){return function(t){"boolean"!=typeof t.value&&t.addIssue({message:"value is not a boolean"})}},component:function(){return Bn(St)},constructor:Bn,customValidator:function(t,e,n="value does not match custom validation"){return function(o){o.validate(t),o.isValid&&(e(o.value)||o.addIssue({message:n}))}},function:function(t=[],e=void 0){return function(t){"function"!=typeof t.value&&t.addIssue({message:"value is not a function"})}},instanceOf:In,literal:Pn,number:function(){return function(t){"number"!=typeof t.value&&t.addIssue({message:"value is not a number"})}},object:function(t={}){return function(e){Mn(e,t,!1)}},or:jn,promise:function(t){return function(t){t.value instanceof Promise||t.addIssue({message:"value is not a promise"})}},record:function(t){return function(e){if("object"!=typeof e.value||Array.isArray(e.value)||null===e.value)e.addIssue({message:"value is not an object"});else if(t)for(const n in e.value)e.withKey(n).validate(t)}},ref:function(t){return jn([Pn(null),In(t)])},selection:function(t){return jn(t.map(Pn))},signal:function(t){return function(t){"function"==typeof t.value&&t.value[Rt]||t.addIssue({message:"value is not a reactive value"})}},strictObject:function(t){return function(e){Mn(e,t,!0)}},string:function(){return function(t){"string"!=typeof t.value&&t.addIssue({message:"value is not a string"})}},tuple:function(t){return function(e){if(Array.isArray(e.value))if(e.value.length===t.length)for(let n=0;n<t.length;n++)e.withKey(n).validate(t[n]);else e.addIssue({message:"tuple value does not have the correct length"});else e.addIssue({message:"value is not an array"})}}};function Wn(t){Cn(yn(t))}s.shouldNormalizeDom=!1,s.mainEventHandler=(t,n,s)=>{const{data:i,modifiers:r}=o(t);t=i;let l=!1;if(r.length){let t=!1;const e=n.target===s;for(const o of r)switch(o){case"self":if(t=!0,e)continue;return l;case"prevent":(t&&e||!t)&&n.preventDefault();continue;case"stop":(t&&e||!t)&&n.stopPropagation(),l=!0;continue}}if(Object.hasOwnProperty.call(t,0)){const o=t[0];if("function"!=typeof o)throw new e(`Invalid handler (expected a function, received: '${o}')`);let s=t[1]?t[1].__owl__:null;s&&1!==s.status||o(t[1],n)}return l};const Fn={config:s,mount:At,patch:function(t,e,n=!1){t.patch(e,n)},remove:function(t,e=!1){e&&t.beforeRemove(),t.remove()},list:Nt,multi:U,text:Y,toggler:l,createBlock:ct,html:Tt,comment:J},Kn={version:Tn.version};_e.prototype._compileTemplate=function(t,e){return gn(e,{name:t,dev:this.dev,translateFn:this.translateFn,translatableAttributes:this.translatableAttributes,customDirectives:this.customDirectives,hasGlobalValues:this.hasGlobalValues})},t.App=Tn,t.Component=St,t.EventBus=D,t.OwlError=e,t.Plugin=vn,t.Registry=class{_map=Sn.Object(Object.create(null));_name;_validation;constructor(t={}){this._name=t.name||"registry",this._validation=t.validation}entries=_n(()=>Object.entries(this._map()).sort((t,e)=>t[1][0]-e[1][0]).map(([t,e])=>[t,e[1]]));items=_n(()=>this.entries().map(t=>t[1]));addById(t,n={}){if(!t.id)throw new e(`Item should have an id key (registry '${this._name}')`);return this.add(t.id,t,{sequence:n.sequence??50})}add(t,e,n={}){if(this._validation){const n=this._name?` (registry '${this._name}', key: '${t}')`:` (key: '${t}')`;On(e,this._validation,`Registry entry does not match the type${n}`)}return this._map()[t]=[n.sequence??50,e],this}get(t,e){const n=t in this._map();if(!n&&arguments.length<2)throw new Error(`KeyNotFoundError: Cannot find key "${t}" (registry '${this._name}')`);return n?this._map()[t][1]:e}delete(t){delete this._map()[t]}has(t){return t in this._map()}},t.Resource=class{_items=Sn.Array([]);_name;_validation;constructor(t={}){this._name=t.name,this._validation=t.validation}items=_n(()=>this._items().sort((t,e)=>t[0]-e[0]).map(t=>t[1]));add(t,e={}){if(this._validation){const e=this._name?` (resource '${this._name}')`:"";On(t,this._validation,`Resource item does not match the type${e}`)}return this._items().push([e.sequence??50,t]),this}delete(t){const e=this._items().filter(([e,n])=>n!==t);return this._items.set(e),this}has(t){return this._items().some(([e,n])=>n===t)}},t.__info__=Kn,t.assertType=On,t.batched=C,t.blockDom=Fn,t.computed=_n,t.config=function(t,e){const{app:n,manager:o}=_t("plugin");return n.dev&&e&&On(o.config,Vn.object({[t]:e}),"Config does not match the type"),o.config[t.endsWith("?")?t.slice(0,-1):t]},t.effect=yn,t.htmlEscape=O,t.markRaw=ae,t.markup=R,t.mount=async function(t,e,n={}){return new Tn(n).createRoot(t,n).mount(e,n)},t.onError=function(t){const{node:e}=_t("component");let n=qt.get(e);n||(n=[],qt.set(e,n)),n.push(t.bind(e.component))},t.onMounted=function(t){const{node:e}=_t("component");e.mounted.push(An(e,t,"onMounted"))},t.onPatched=function(t){const{node:e}=_t("component");e.patched.push(An(e,t,"onPatched"))},t.onWillDestroy=Cn,t.onWillPatch=function(t){const{node:e}=_t("component");e.willPatch.unshift(An(e,t,"onWillPatch"))},t.onWillStart=function(t){const{node:e}=_t("component");e.willStart.push(An(e,t,"onWillStart"))},t.onWillUnmount=function(t){const{node:e}=_t("component");e.willUnmount.unshift(An(e,t,"onWillUnmount"))},t.onWillUpdateProps=function(t){const{node:e}=_t("component");e.willUpdateProps.push(An(e,t,"onWillUpdateProps"))},t.plugin=function(t){const n=_t(),o="component"===n.type?n.node.pluginManager:n.manager;let s=o.getPluginById(t.id);if(!s){if("plugin"!==n.type)throw new e(`Unknown plugin "${t.id}"`);s=o.startPlugin(t)}return s},t.props=function(t,e){const{node:n,app:o,componentName:s}=_t("component");function i(t){return void 0===n.props[t]&&e?e[t]:n.props[t]}Object.assign(n.defaultProps,e);const r=Object.create(null);function l(t){for(const e of t)Reflect.defineProperty(r,e,{enumerable:!0,get:i.bind(null,e)})}if(t){if(l((Array.isArray(t)?t:Object.keys(t)).map(t=>t.endsWith("?")?t.slice(0,-1):t)),o.dev){const o=e?function(t,e){const n=(Array.isArray(t)?t:Object.keys(t)).filter(t=>!t.endsWith("?")&&t in e);return e=>{n.length&&e.addIssue({message:"props have default values on mandatory keys",keys:n}),e.validate(Vn.object(t))}}(t,e):Vn.object(t);On(n.props,o,`Invalid component props (${s})`),n.willUpdateProps.push(t=>{On(t,o,`Invalid component props (${s})`)})}}else{const t=t=>{const n=[];for(const e in t)1!==e.charCodeAt(0)&&n.push(e);if(e)for(const o in e)o in t||n.push(o);return n};let o=t(n.props);l(o),n.willUpdateProps.push(e=>{for(const t of o)Reflect.deleteProperty(r,t);o=t(e),l(o)})}return r},t.providePlugins=function(t,e){const{node:n}=_t("component"),o=new wn(n.app,{parent:n.pluginManager,config:e});n.pluginManager=o,Cn(()=>o.destroy()),$n(o,t)},t.proxy=ge,t.signal=Sn,t.status=function(t){switch(t.__owl__.status){case 0:return"new";case 2:return"cancelled";case 1:return t instanceof vn?"started":"mounted";case 3:return"destroyed"}},t.toRaw=ce,t.types=Vn,t.untrack=Ht,t.useApp=function(){return _t().app},t.useContext=function(){const t=Ct.at(-1);return{run(e){if(t){let n;Ct.push(t);try{n=e()}finally{Ct.pop()}return n}return e()},protectAsync:e=>(t&&(e=Dt(t,e)),e),runWithAsyncProtection:e=>(t&&(e=Dt(t,e)),e())}},t.useEffect=Wn,t.useListener=function(t,e,n,o){"function"==typeof t?Wn(()=>{const s=t();if(s)return s.addEventListener(e,n,o),()=>s.removeEventListener(e,n,o)}):(t.addEventListener(e,n,o),Cn(()=>t.removeEventListener(e,n,o)))},t.useResource=function(t,e){for(let n of e)t.add(n);Cn(()=>{for(let n of e)t.delete(n)})},t.validateType=Ln,t.whenReady=function(t){return new Promise(function(t){"loading"!==document.readyState?t(!0):document.addEventListener("DOMContentLoaded",t,!1)}).then(t||function(){})},t.xml=Se,Kn.date="2026-04-10T07:28:23.029Z",Kn.hash="e5e6d92",Kn.url="https://github.com/odoo/owl"}(this.owl=this.owl||{});
1
+ !function(t){"use strict";class e extends Error{cause}function n(t){const n=(new DOMParser).parseFromString(t,"text/xml");if(n.getElementsByTagName("parsererror").length){let o="Invalid XML in template.";const s=n.getElementsByTagName("parsererror")[0].textContent;if(s){o+="\nThe parser has produced the following error message:\n"+s;const e=/\d+/g,n=e.exec(s);if(n){const i=Number(n[0]),r=t.split("\n")[i-1],l=e.exec(s);if(r&&l){const t=Number(l[0])-1;r[t]&&(o+=`\nThe error might be located at xml line ${i} column ${t}\n${r}\n${"-".repeat(t-1)}^`)}}}throw new e(o)}return n}function o(t){t=t.slice();const e=[];let n;for(;(n=t[0])&&"string"==typeof n;)e.push(t.shift());return{modifiers:e,data:t}}const s={shouldNormalizeDom:!0,mainEventHandler:(t,e,n)=>("function"==typeof t?t(e):Array.isArray(t)&&(t=o(t).data)[0](t[1],e),!1)},i=document.createTextNode("");class r{key;child;parentEl;constructor(t,e){this.key=t,this.child=e}mount(t,e){this.parentEl=t,this.child.mount(t,e)}moveBeforeDOMNode(t,e){this.child.moveBeforeDOMNode(t,e)}moveBeforeVNode(t,e){this.moveBeforeDOMNode(t&&t.firstNode()||e)}patch(t,e){if(this===t)return;let n=this.child,o=t.child;if(this.key===t.key)n.patch(o,e);else{const s=n.firstNode();s.parentElement.insertBefore(i,s),e&&n.beforeRemove(),n.remove(),o.mount(this.parentEl,i),this.child=o,this.key=t.key}}beforeRemove(){this.child.beforeRemove()}remove(){this.child.remove()}firstNode(){return this.child.firstNode()}toString(){return this.child.toString()}}function l(t,e){return new r(t,e)}let a,c,u,h;if("undefined"!=typeof Element){({setAttribute:a,removeAttribute:c}=Element.prototype);const t=DOMTokenList.prototype;u=t.add,h=t.remove}const d=Array.isArray,{split:f,trim:p}=String.prototype,m=/\s+/;function g(t,e){switch(e){case!1:case void 0:c.call(this,t);break;case!0:a.call(this,t,"");break;default:a.call(this,t,e)}}function b(t){return function(e){g.call(this,t,e)}}function y(t){if(d(t))"class"===t[0]?k.call(this,t[1]):"style"===t[0]?T.call(this,t[1]):g.call(this,t[0],t[1]);else for(let e in t)"class"===e?k.call(this,t[e]):"style"===e?T.call(this,t[e]):g.call(this,e,t[e])}function v(t,e){if(d(t)){const n=t[0],o=t[1];if(n===e[0]){if(o===e[1])return;"class"===n?E.call(this,o,e[1]):"style"===n?A.call(this,o,e[1]):g.call(this,n,o)}else c.call(this,e[0]),g.call(this,n,o)}else{for(let n in e)n in t||("class"===n?E.call(this,"",e[n]):"style"===n?A.call(this,"",e[n]):c.call(this,n));for(let n in t){const o=t[n];o!==e[n]&&("class"===n?E.call(this,o,e[n]):"style"===n?A.call(this,o,e[n]):g.call(this,n,o))}}}function w(t){const e={};switch(typeof t){case"string":const n=p.call(t);if(!n)return{};let o=f.call(n,m);for(let t=0,n=o.length;t<n;t++)e[o[t]]=!0;return e;case"object":for(let n in t){const o=t[n];if(o){if(n=p.call(n),!n)continue;const t=f.call(n,m);for(let n of t)e[n]=o}}return e;case"undefined":return{};case"number":return{[t]:!0};default:return{[t]:!0}}}const $={};function x(t){if(t in $)return $[t];const e=t.replace(/[A-Z]/g,t=>"-"+t.toLowerCase());return $[t]=e,e}function N(t){const e={};switch(typeof t){case"string":{const n=p.call(t);if(!n)return{};const o=n.split(";");for(let t of o){if(t=p.call(t),!t)continue;const n=t.indexOf(":");if(-1===n)continue;const o=p.call(t.slice(0,n)),s=p.call(t.slice(n+1));o&&s&&"undefined"!==s&&(e[o]=s)}return e}case"object":for(let n in t){const o=t[n];(o||0===o)&&(e[x(n)]=String(o))}return e;default:return{}}}function k(t){t=""===t?{}:w(t);for(let e in t)u.call(this.classList,e)}function E(t,e){e=""===e?{}:w(e),t=""===t?{}:w(t);for(let n in e)n in t||h.call(this.classList,n);for(let n in t)t[n]!==e[n]&&u.call(this.classList,n)}function T(t){t=""===t?{}:N(t);const e=this.style;for(let n in t)e.setProperty(n,t[n])}function A(t,e){e=""===e?{}:N(e),t=""===t?{}:N(t);const n=this.style;for(let o in e)o in t||n.removeProperty(o);for(let o in t)t[o]!==e[o]&&n.setProperty(o,t[o]);n.cssText||c.call(this,"style")}function C(t){let e=!1;return function(...n){e||(e=!0,queueMicrotask(()=>{e=!1,t(...n)}))}}function _(t){const n=t&&t.ownerDocument;if(n){if(!n.defaultView)throw new e("Cannot mount a component: the target document is not attached to a window (defaultView is missing)");if(t instanceof n.defaultView.HTMLElement||t instanceof ShadowRoot){if(!function(t,e){let n=t;const o=e.defaultView.ShadowRoot;for(;n;){if(n===e)return!0;if(n.parentNode)n=n.parentNode;else{if(!(n instanceof o&&n.host))return!1;n=n.host}}return!1}(t,n))throw new e("Cannot mount a component on a detached dom node");return}}throw new e("Cannot mount component: the target is not a valid DOM element")}class D extends EventTarget{trigger(t,e){this.dispatchEvent(new CustomEvent(t,{detail:e}))}}class S extends String{}function O(t){return t instanceof S?t:void 0===t?R(""):"number"==typeof t?R(String(t)):([["&","&amp;"],["<","&lt;"],[">","&gt;"],["'","&#x27;"],['"',"&quot;"],["`","&#x60;"]].forEach(e=>{t=String(t).replace(new RegExp(e[0],"g"),e[1])}),R(t))}function R(t,...e){if(!Array.isArray(t))return new S(t);const n=t;let o="",s=0;for(;s<e.length;++s)o+=n[s]+O(e[s]);return o+=n[s],new S(o)}function L(t){const e=t.split(".")[0],n=t.includes(".capture"),o=t.includes(".passive");return t.includes(".synthetic")?function(t,e=!1,n=!1){let o=`__event__synthetic_${t}`;e&&(o=`${o}_capture`);!function(t,e,n=!1,o=!1){if(P[e])return;document.addEventListener(t,t=>function(t,e){let n=e.target;for(;null!==n;){const o=n[t];if(o)for(const t of Object.values(o)){if(s.mainEventHandler(t,e,n))return}n=n.parentNode}}(e,t),{capture:n,passive:o}),P[e]=!0}(t,o,e,n);const i=I++;function r(t){const e=this[o]||{};e[i]=t,this[o]=e}function l(){delete this[o]}return{setup:r,update:r,remove:l}}(e,n,o):function(t,e=!1,n=!1){let o=`__event__${t}_${B++}`;e&&(o=`${o}_capture`);function i(t){const e=t.currentTarget;if(!e||!function(t){if(!t)return!1;if(t.ownerDocument.contains(t))return!0;const e=t.getRootNode();return e instanceof ShadowRoot&&t.ownerDocument.contains(e.host)}(e))return;const n=e[o];n&&s.mainEventHandler(n,t,e)}const r={capture:e,passive:n};function l(e){this[o]=e,this.addEventListener(t,i,r)}function a(){delete this[o],this.removeEventListener(t,i,r)}function c(t){this[o]=t}return{setup:l,update:c,remove:a}}(e,n,o)}let B=1;let I=1;const P={};let M,j,V;if("undefined"!=typeof Node){const t=Node.prototype;M=t.insertBefore,j=(W=t,F="textContent",Object.getOwnPropertyDescriptor(W,F)).set,V=t.removeChild}var W,F;class K{children;anchors;parentEl;isOnlyChild;constructor(t){this.children=t}mount(t,e){const n=this.children,o=n.length,s=new Array(o);for(let i=0;i<o;i++){let o=n[i];if(o)o.mount(t,e);else{const n=document.createTextNode("");s[i]=n,M.call(t,n,e)}}this.anchors=s,this.parentEl=t}moveBeforeDOMNode(t,e=this.parentEl){this.parentEl=e;const n=this.children,o=this.anchors;for(let s=0,i=n.length;s<i;s++){let i=n[s];if(i)i.moveBeforeDOMNode(t,e);else{const n=o[s];M.call(e,n,t)}}}moveBeforeVNode(t,e){if(t){const n=t.children[0];e=(n?n.firstNode():t.anchors[0])||null}const n=this.children,o=this.parentEl,s=this.anchors;for(let t=0,i=n.length;t<i;t++){let i=n[t];if(i)i.moveBeforeVNode(null,e);else{const n=s[t];M.call(o,n,e)}}}patch(t,e){if(this===t)return;const n=this.children,o=t.children,s=this.anchors,i=this.parentEl;for(let t=0,r=n.length;t<r;t++){const r=n[t],l=o[t];if(r)if(l)r.patch(l,e);else{const o=r.firstNode(),l=document.createTextNode("");s[t]=l,M.call(i,l,o),e&&r.beforeRemove(),r.remove(),n[t]=void 0}else if(l){n[t]=l;const e=s[t];l.mount(i,e),V.call(i,e)}}}beforeRemove(){const t=this.children;for(let e=0,n=t.length;e<n;e++){const n=t[e];n&&n.beforeRemove()}}remove(){const t=this.parentEl;if(this.isOnlyChild)j.call(t,"");else{const e=this.children,n=this.anchors;for(let o=0,s=e.length;o<s;o++){const s=e[o];s?s.remove():V.call(t,n[o])}}}firstNode(){const t=this.children[0];return t?t.firstNode():this.anchors[0]}toString(){return this.children.map(t=>t?t.toString():"").join("")}}function U(t){return new K(t)}let z,H,G;if("undefined"!=typeof Node){const t=Node.prototype;z=t.insertBefore,G=t.removeChild,H=((t,e)=>Object.getOwnPropertyDescriptor(t,e))(CharacterData.prototype,"data").set}class q{text;parentEl;el;constructor(t){this.text=t}mountNode(t,e,n){this.parentEl=e,z.call(e,t,n),this.el=t}moveBeforeDOMNode(t,e=this.parentEl){this.parentEl=e,z.call(e,this.el,t)}moveBeforeVNode(t,e){z.call(this.parentEl,this.el,t?t.el:e)}beforeRemove(){}remove(){G.call(this.parentEl,this.el)}firstNode(){return this.el}toString(){return this.text}}class X extends q{mount(t,e){this.mountNode(document.createTextNode(Q(this.text)),t,e)}patch(t){const e=t.text;this.text!==e&&(H.call(this.el,Q(e)),this.text=e)}}class Z extends q{mount(t,e){this.mountNode(document.createComment(Q(this.text)),t,e)}patch(){}}function Y(t){return new X(t)}function J(t){return new Z(t)}function Q(t){switch(typeof t){case"string":return t;case"number":return String(t);case"boolean":return t?"true":"false";default:return t||""}}const tt=(t,e)=>Object.getOwnPropertyDescriptor(t,e);let et,nt,ot,st,it;"undefined"!=typeof Node&&(et=Node.prototype,nt=Element.prototype,ot=tt(CharacterData.prototype,"data").set,st=tt(et,"firstChild").get,it=tt(et,"nextSibling").get);const rt=()=>{};function lt(t){return function(e){this[t]=0===e?0:e?e.valueOf():""}}const at={};function ct(t){if(t in at)return at[t];const e=(new DOMParser).parseFromString(`<t>${t}</t>`,"text/xml").firstChild.firstChild;s.shouldNormalizeDom&&ut(e);const n=ht(e),o=pt(n),i=function(t,e){let n=function(t,e){const{refN:n,collectors:o,children:s,locations:i,cbRefs:r}=e;i.sort((t,e)=>t.idx-e.idx);const l=i.length,a=s.length,c=n>0,u=i.map(t=>t.refIdx),h=i.map(t=>t.setData),d=i.map(t=>t.updateData),f=[it,st],p=o.length,m=o.map(t=>32767&t.idx|(32767&t.prevIdx)<<15|(t.getVal===st?1:0)<<30),g=s.map(t=>32767&t.parentRefIdx|(t.isOnlyChild?1:0)<<15|(32767&(t.afterRefIdx??0))<<16),b=et.cloneNode,y=et.insertBefore,v=nt.remove;class w{el;parentEl;data;children;refs;constructor(t){this.data=t}beforeRemove(){}remove(){v.call(this.el)}firstNode(){return this.el}moveBeforeDOMNode(t,e=this.parentEl){this.parentEl=e,y.call(e,this.el,t)}moveBeforeVNode(t,e){y.call(this.parentEl,this.el,t?t.el:e)}toString(){const t=document.createElement("div");return this.mount(t,null),t.innerHTML}mount(e,n){const o=b.call(t,!0);y.call(e,o,n),this.el=o,this.parentEl=e}patch(t,e){}}c&&(w.prototype.mount=function(e,o){const s=b.call(t,!0),i=new Array(n);this.refs=i,i[0]=s;for(let t=0;t<p;t++){const e=m[t];i[32767&e]=f[e>>30&1].call(i[e>>15&32767])}if(l){const t=this.data;for(let e=0;e<l;e++)h[e].call(i[u[e]],t[e])}if(a){const t=this.children;for(let e=0;e<a;e++){const n=t[e];if(n){const t=g[e],o=t>>16&32767,s=o?i[o]:null;n.isOnlyChild=!!(32768&t),n.mount(i[32767&t],s)}}}if(y.call(e,s,o),this.el=s,this.parentEl=e,r.length){const t=this.data,e=this.refs;for(let n of r){(0,t[n])(e[u[n]],null)}}},w.prototype.patch=function(t,e){if(this===t)return;const n=this.refs;if(l){const e=this.data,o=t.data;for(let t=0;t<l;t++){const s=e[t],i=o[t];s!==i&&d[t].call(n[u[t]],i,s)}this.data=o}if(a){let o=this.children;const s=t.children;for(let t=0;t<a;t++){const i=o[t],r=s[t];if(i)r?i.patch(r,e):(e&&i.beforeRemove(),i.remove(),o[t]=void 0);else if(r){const e=g[t],s=e>>16&32767,i=s?n[s]:null;r.mount(n[32767&e],i),o[t]=r}}}},w.prototype.remove=function(){if(r.length){const t=this.data,e=this.refs;for(let n of r){(0,t[n])(null,e[u[n]])}}v.call(this.el)});return w}(t,e);if(e.children.length)return n=class extends n{children;constructor(t,e){super(t),this.children=e}},n.prototype.beforeRemove=K.prototype.beforeRemove,(t,e=[])=>new n(t,e);return t=>new n(t)}(n.el,o);return at[t]=i,i}function ut(t){if(t.nodeType!==Node.TEXT_NODE||/\S/.test(t.textContent)){if(t.nodeType!==Node.ELEMENT_NODE||"pre"!==t.tagName)for(let e=t.childNodes.length-1;e>=0;--e)ut(t.childNodes.item(e))}else t.remove()}function ht(t,n=null,o=null){switch(t.nodeType){case Node.ELEMENT_NODE:{let e=o&&o.currentNS;const s=t.tagName;let i;const r=[];if(s.startsWith("block-text-")){const t=parseInt(s.slice(11),10);r.push({type:"text",idx:t}),i=document.createTextNode("")}if(s.startsWith("block-child-")){o.isRef||dt(o);const t=parseInt(s.slice(12),10);r.push({type:"child",idx:t}),i=document.createTextNode("")}if(e||=t.namespaceURI,i||(i=e?document.createElementNS(e,s):document.createElement(s)),i instanceof Element){if(!o){document.createElement("template").content.appendChild(i)}const e=t.attributes;for(let t=0;t<e.length;t++){const n=e[t].name,o=e[t].value;if(n.startsWith("block-handler-")){const t=parseInt(n.slice(14),10);r.push({type:"handler",idx:t,event:o})}else if(n.startsWith("block-attribute-")){const t=parseInt(n.slice(16),10);r.push({type:"attribute",idx:t,name:o,tag:s})}else if(n.startsWith("block-property-")){const t=parseInt(n.slice(15),10);r.push({type:"property",idx:t,name:o,tag:s})}else"block-attributes"===n?r.push({type:"attributes",idx:parseInt(o,10)}):"block-ref"===n?r.push({type:"ref",idx:parseInt(o,10)}):i.setAttribute(e[t].name,o)}}const l={parent:n,firstChild:null,nextSibling:null,el:i,info:r,refN:0,currentNS:e};if(t.firstChild){const e=t.childNodes[0];if(1===t.childNodes.length&&e.nodeType===Node.ELEMENT_NODE&&e.tagName.startsWith("block-child-")){const t=e.tagName,n=parseInt(t.slice(12),10);r.push({idx:n,type:"child",isOnlyChild:!0})}else{l.firstChild=ht(t.firstChild,l,l),i.appendChild(l.firstChild.el);let e=t.firstChild,n=l.firstChild;for(;e=e.nextSibling;)n.nextSibling=ht(e,n,l),i.appendChild(n.nextSibling.el),n=n.nextSibling}}return l.info.length&&dt(l),l}case Node.TEXT_NODE:case Node.COMMENT_NODE:return{parent:n,firstChild:null,nextSibling:null,el:t.nodeType===Node.TEXT_NODE?document.createTextNode(t.textContent):document.createComment(t.textContent),info:[],refN:0,currentNS:null}}throw new e("boom")}function dt(t){t.isRef=!0;do{t.refN++}while(t=t.parent)}function ft(t){let e=t.parent;for(;e&&e.nextSibling===t;)t=e,e=e.parent;return e}function pt(t,e,n){if(!e){e={collectors:[],locations:[],children:new Array(t.info.filter(t=>"child"===t.type).length),cbRefs:[],refN:t.refN},n=0}if(t.refN){const o=n,s=t.isRef,i=t.firstChild?t.firstChild.refN:0,r=t.nextSibling?t.nextSibling.refN:0;if(s){for(let e of t.info)e.refIdx=o;t.refIdx=o,function(t,e){for(let n of e.info)switch(n.type){case"text":t.locations.push({idx:n.idx,refIdx:n.refIdx,setData:mt,updateData:mt});break;case"child":n.isOnlyChild?t.children[n.idx]={parentRefIdx:n.refIdx,isOnlyChild:!0}:t.children[n.idx]={parentRefIdx:ft(e).refIdx,afterRefIdx:n.refIdx};break;case"property":{const e=n.refIdx,o=lt(n.name);t.locations.push({idx:n.idx,refIdx:e,setData:o,updateData:o});break}case"attribute":{const e=n.refIdx;let o,s;"class"===n.name?(s=k,o=E):"style"===n.name?(s=T,o=A):(s=b(n.name),o=s),t.locations.push({idx:n.idx,refIdx:e,setData:s,updateData:o});break}case"attributes":t.locations.push({idx:n.idx,refIdx:n.refIdx,setData:y,updateData:v});break;case"handler":{const{setup:e,update:o}=L(n.event);t.locations.push({idx:n.idx,refIdx:n.refIdx,setData:e,updateData:o});break}case"ref":t.locations.push({idx:n.idx,refIdx:n.refIdx,setData:rt,updateData:rt}),t.cbRefs.push(n.idx)}}(e,t),n++}if(r){const s=n+i;e.collectors.push({idx:s,prevIdx:o,getVal:it}),pt(t.nextSibling,e,s)}i&&(e.collectors.push({idx:n,prevIdx:o,getVal:st}),pt(t.firstChild,e,n))}return e}function mt(t){ot.call(this,Q(t))}let gt,bt,yt,vt,wt,$t;if("undefined"!=typeof Node){const t=Node.prototype;gt=t.insertBefore,bt=t.appendChild,yt=t.removeChild,vt=((t,e)=>Object.getOwnPropertyDescriptor(t,e))(t,"textContent").set}class xt{children;anchor;parentEl;isOnlyChild;constructor(t){this.children=t}mount(t,e){const n=this.children,o=document.createTextNode("");this.anchor=o,gt.call(t,o,e);const s=n.length;if(s){const e=n[0].mount;for(let i=0;i<s;i++)e.call(n[i],t,o)}this.parentEl=t}moveBeforeDOMNode(t,e=this.parentEl){this.parentEl=e;const n=this.children;for(let o=0,s=n.length;o<s;o++)n[o].moveBeforeDOMNode(t,e);e.insertBefore(this.anchor,t)}moveBeforeVNode(t,e){if(t){const n=t.children[0];e=(n?n.firstNode():t.anchor)||null}const n=this.children;for(let t=0,o=n.length;t<o;t++)n[t].moveBeforeVNode(null,e);this.parentEl.insertBefore(this.anchor,e)}patch(t,e){if(this===t)return;const n=this.children,o=t.children;if(0===o.length&&0===n.length)return;this.children=o;const s=o[0]||n[0],{mount:i,patch:r,remove:l,beforeRemove:a,moveBeforeVNode:c,firstNode:u}=s,h=this.anchor,d=this.isOnlyChild,f=this.parentEl;if(0===o.length&&d){if(e)for(let t=0,e=n.length;t<e;t++)a.call(n[t]);return vt.call(f,""),void bt.call(f,h)}let p,m=0,g=0,b=n[0],y=o[0],v=n.length-1,w=o.length-1,$=n[v],x=o[w];for(;m<=v&&g<=w;){if(null===b){b=n[++m];continue}if(null===$){$=n[--v];continue}let t=b.key,s=y.key;if(t===s){r.call(b,y,e),o[g]=b,b=n[++m],y=o[++g];continue}let l=$.key,a=x.key;if(l===a){r.call($,x,e),o[w]=$,$=n[--v],x=o[--w];continue}if(t===a){r.call(b,x,e),o[w]=b;const t=o[w+1];c.call(b,t,h),b=n[++m],x=o[--w];continue}if(l===s){r.call($,y,e),o[g]=$;const t=n[m];c.call($,t,h),$=n[--v],y=o[++g];continue}p=p||kt(n,m,v);let d=p[s];if(void 0===d)i.call(y,f,u.call(b)||null);else{const t=n[d];c.call(t,b,null),r.call(t,y,e),o[g]=t,n[d]=null}y=o[++g]}if(m<=v||g<=w)if(m>v){const t=o[w+1],e=t?u.call(t)||null:h;for(let t=g;t<=w;t++)i.call(o[t],f,e)}else for(let t=m;t<=v;t++){let o=n[t];o&&(e&&a.call(o),l.call(o))}}beforeRemove(){const t=this.children,e=t.length;if(e){const n=t[0].beforeRemove;for(let o=0;o<e;o++)n.call(t[o])}}remove(){const{parentEl:t,anchor:e}=this;if(this.isOnlyChild)vt.call(t,"");else{const n=this.children,o=n.length;if(o){const t=n[0].remove;for(let e=0;e<o;e++)t.call(n[e])}yt.call(t,e)}}firstNode(){const t=this.children[0];return t?t.firstNode():void 0}toString(){return this.children.map(t=>t.toString()).join("")}}function Nt(t){return new xt(t)}function kt(t,e,n){let o={};for(let s=e;s<=n;s++)o[t[s].key]=s;return o}if("undefined"!=typeof Node){const t=Node.prototype;wt=t.insertBefore,$t=t.removeChild}class Et{html;parentEl;content=[];constructor(t){this.html=t}mount(t,e){this.parentEl=t;const n=document.createElement("template");n.innerHTML=this.html,this.content=[...n.content.childNodes];for(let n of this.content)wt.call(t,n,e);if(!this.content.length){const n=document.createTextNode("");this.content.push(n),wt.call(t,n,e)}}moveBeforeDOMNode(t,e=this.parentEl){this.parentEl=e;for(let n of this.content)wt.call(e,n,t)}moveBeforeVNode(t,e){const n=t?t.content[0]:e;this.moveBeforeDOMNode(n)}patch(t){if(this===t)return;const e=t.html;if(this.html!==e){const n=this.parentEl,o=this.content[0],s=document.createElement("template");s.innerHTML=e;const i=[...s.content.childNodes];for(let t of i)wt.call(n,t,o);if(!i.length){const t=document.createTextNode("");i.push(t),wt.call(n,t,o)}this.remove(),this.content=i,this.html=t.html}}beforeRemove(){}remove(){const t=this.parentEl;for(let e of this.content)$t.call(t,e)}firstNode(){return this.content[0]}toString(){return this.html}}function Tt(t){return new Et(t)}function At(t,e,n=null){t.mount(e,n)}let Ct=[];function _t(t){const n=Ct.at(-1);if(!n)throw new e("No active context");if(t&&t!==n.type)throw new e(`Expected to be in a ${t} context`);return n}function Dt(t,n){return async function(...o){if(t.status>1)throw new e(`Function called after the end of life of the ${t.type}`);const s=await n.call(this,...o);return t.status>1?new Promise(()=>{}):s}}class St{static template="";__owl__;constructor(t){this.__owl__=t}setup(){}}var Ot;!function(t){t[t.EXECUTED=0]="EXECUTED",t[t.STALE=1]="STALE",t[t.PENDING=2]="PENDING"}(Ot||(Ot={}));const Rt=Symbol("Atom");let Lt,Bt=[];function It(t,e,n=Ot.STALE){return{state:n,value:void 0,compute:t,sources:new Set,observers:new Set,isDerived:e}}function Pt(t){Lt&&(Lt.sources.add(t),t.observers.add(Lt))}function Mt(t){for(const e of t.observers)e.state===Ot.EXECUTED&&(e.isDerived?zt(e):Bt.push(e)),e.state=Ot.STALE;jt()}const jt=C(function(){for(let t=0;t<Bt.length;t++)Ft(Bt[t]);Bt.length=0});function Vt(){return Lt}function Wt(t){Lt=t}function Ft(t){const e=t.state;if(e===Ot.EXECUTED)return;if(e===Ot.PENDING){for(const e of t.sources)"compute"in e&&Ft(e);if(t.state!==Ot.STALE)return void(t.state=Ot.EXECUTED)}Kt(t);const n=Lt;Lt=t,t.value=t.compute(),t.state=Ot.EXECUTED,Lt=n}function Kt(t){const e=t.sources;for(const n of e){n.observers.delete(t)}e.clear()}function Ut(t){for(const e of t.sources)e.observers.delete(t),"compute"in e&&e.isDerived&&0===e.observers.size&&Ut(e);t.sources.clear(),t.state=Ot.STALE}function zt(t){const e=[t];let n;for(;n=e.pop();)for(const t of n.observers)t.state||(t.state=Ot.PENDING,t.isDerived?e.push(t):Bt.push(t))}function Ht(t){const e=Lt;let n;Lt=void 0;try{n=t()}finally{Lt=e}return n}const Gt=new WeakMap,qt=new WeakMap;function Xt(t){let{error:n}=t,o="node"in t?t.node:t.fiber.node;const s="fiber"in t?t.fiber:o.fiber,i=o.app;if(s){let t=s;do{t.node.fiber=t,Gt.set(t,n),t=t.parent}while(t);Gt.set(s.root,n)}const r=()=>{try{i.destroy()}catch(t){}return Object.assign(new e("[Owl] Unhandled error. Destroying the root component"),{cause:n})};for(;o;){const t=o.fiber;t&&Gt.set(t,n);const e=qt.get(o);if(e)for(let t=e.length-1;t>=0;t--)try{return void e[t](n,r)}catch(t){n=t}o=o.parent}const l=r();i._handleError(l)}function Zt(){throw new e("Attempted to render cancelled fiber")}function Yt(t){let e=0;for(let n of t){let t=n.node;n.render=Zt,0===t.status&&t.cancel(),t.fiber=null,n.bdom?t.forceNextRender=!0:e++,e+=Yt(n.children)}return e}class Jt{node;bdom=null;root;parent;children=[];appliedToDom=!1;deep=!1;childrenMap={};constructor(t,e){if(this.node=t,this.parent=e,e){this.deep=e.deep;const t=e.root;t.setCounter(t.counter+1),this.root=t,e.children.push(this)}else this.root=this}render(){let t=this.root.node,e=t.app.scheduler,n=t.parent;for(;n;){if(n.fiber){let o=n.fiber.root;if(0!==o.counter||!(t.parentKey in n.fiber.childrenMap))return void e.delayedRenders.push(this);n=o.node}t=n,n=n.parent}const o=this.node,s=this.root;if(s){const t=Vt();Kt(o.signalComputation),Wt(o.signalComputation);try{this.bdom=!0,this.bdom=o.renderFn()}catch(t){Xt({node:o,error:t})}Wt(t);const e=s.counter-1;s.counter=e,0===e&&this.node.app.scheduler.flush()}}}class Qt extends Jt{counter=1;willPatch=[];patched=[];mounted=[];locked=!1;complete(){const t=this.node;let e;this.locked=!0;let n=this.mounted;try{for(e of this.willPatch){let t=e.node;if(t.fiber===e){const e=t.component;for(let n of t.willPatch)n.call(e)}}for(e=void 0,t._patch(),this.locked=!1;e=n.pop();)if(e.appliedToDom)for(let t of e.node.mounted)t();let o=this.patched;for(;e=o.pop();)if(e.appliedToDom)for(let t of e.node.patched)t()}catch(t){for(let t of n)t.node.willUnmount=[];this.locked=!1,Xt({fiber:e||this,error:t})}}setCounter(t){this.counter=t,0===t&&this.node.app.scheduler.flush()}}class te extends Qt{target;position;constructor(t,e,n={}){super(t,null),this.target=e,this.position=n.position||"last-child"}complete(){let t=this;try{const e=this.node;if(e.children=this.childrenMap,e.app.constructor.validateTarget(this.target),e.bdom)e.updateDom();else if(e.bdom=this.bdom,"last-child"===this.position||0===this.target.childNodes.length)At(e.bdom,this.target);else{const t=this.target.childNodes[0];At(e.bdom,this.target,t)}e.fiber=null,e.status=1,this.appliedToDom=!0;let n=this.mounted;for(;t=n.pop();)if(t.appliedToDom)for(let e of t.node.mounted)e()}catch(e){Xt({fiber:t,error:e})}}}class ee{el;app;fiber=null;component;bdom=null;status=0;forceNextRender=!1;parentKey;props;defaultProps={};renderFn;parent;children=Object.create(null);willStart=[];willUpdateProps=[];willUnmount=[];mounted=[];willPatch=[];patched=[];willDestroy=[];signalComputation;computations=[];pluginManager;constructor(t,e,n,o,s){this.app=n,this.parent=o,this.parentKey=s,this.pluginManager=o?o.pluginManager:n.pluginManager,this.signalComputation=It(()=>this.render(!1),!1,Ot.EXECUTED),this.props=e,Ct.push({type:"component",app:n,componentName:t.name,node:this,get status(){return this.node.status}});const i=Vt();Wt(void 0),this.component=new t(this);const r={this:this.component,__owl__:this};this.renderFn=n.getTemplate(t.template).bind(this.component,r,this),this.component.setup(),Wt(i),Ct.length=0}mountComponent(t,e){const n=new te(this,t,e);this.app.scheduler.addFiber(n);let o=Vt();this.initiateRender(n),Wt(o)}async initiateRender(t){this.fiber=t,this.mounted.length&&t.root.mounted.push(t);const e=this.component;let n=Vt();Wt(void 0);try{let t=this.willStart.map(t=>t.call(e));Wt(n),await Promise.all(t)}catch(t){return void Xt({node:this,error:t})}0===this.status&&this.fiber===t&&t.render()}async render(t){if(this.status>=2)return;let e=this.fiber;if(e&&(e.root.locked||!0===e.bdom)&&(await Promise.resolve(),e=this.fiber),e){if(!e.bdom&&!Gt.has(e))return void(t&&(e.deep=t));t=t||e.deep}else if(!this.bdom)return;const n=function(t){let e=t.fiber;if(e){let t=e.root;return t.locked=!0,t.setCounter(t.counter+1-Yt(e.children)),t.locked=!1,e.children=[],e.childrenMap={},e.bdom=null,Gt.has(e)&&(Gt.delete(e),Gt.delete(t),e.appliedToDom=!1,e instanceof Qt&&(e.mounted=e instanceof te?[e]:[])),e}const n=new Qt(t,null);return t.willPatch.length&&n.willPatch.push(n),t.patched.length&&n.patched.push(n),n}(this);n.deep=t,this.fiber=n,this.app.scheduler.addFiber(n),await Promise.resolve(),this.status>=2||this.fiber!==n||!e&&n.parent||n.render()}cancel(){this._cancel(),delete this.parent.children[this.parentKey],this.app.scheduler.scheduleDestroy(this)}_cancel(){this.status=2;const t=this.children;for(let e in t)t[e]._cancel()}destroy(){let t=1===this.status;this._destroy(),t&&this.bdom.remove()}_destroy(){const t=this.component;if(1===this.status)for(let e of this.willUnmount)e.call(t);for(let t in this.children)this.children[t]._destroy();if(this.willDestroy.length)try{for(let e of this.willDestroy)e.call(t)}catch(t){Xt({error:t,node:this})}for(const t of this.computations)Ut(t);Ut(this.signalComputation),this.status=3}async updateAndRender(t,e){t=Object.assign({},t);for(const e in this.defaultProps)void 0===t[e]&&(t[e]=this.defaultProps[e]);const n=function(t,e){let n=t.fiber;return n&&(Yt(n.children),n.root=null),new Jt(t,e)}(this,e);this.fiber=n;const o=this.component;let s=Vt();Wt(void 0);let i=this.willUpdateProps.map(e=>e.call(o,t));if(Wt(s),await Promise.all(i),n!==this.fiber)return;this.props=t,n.render();const r=e.root;this.willPatch.length&&r.willPatch.push(n),this.patched.length&&r.patched.push(n)}updateDom(){if(this.fiber)if(this.bdom===this.fiber.bdom)for(let t in this.children){this.children[t].updateDom()}else this.bdom.patch(this.fiber.bdom,!1),this.fiber.appliedToDom=!0,this.fiber=null}firstNode(){const t=this.bdom;return t?t.firstNode():void 0}mount(t,e){const n=this.fiber.bdom;this.bdom=n,n.mount(t,e),this.status=1,this.fiber.appliedToDom=!0,this.children=this.fiber.childrenMap,this.fiber=null}moveBeforeDOMNode(t,e){this.bdom.moveBeforeDOMNode(t,e)}moveBeforeVNode(t,e){this.bdom.moveBeforeVNode(t?t.bdom:null,e)}patch(){this.fiber&&this.fiber.parent&&this._patch()}_patch(){let t=!1;for(let e in this.children){t=!0;break}const e=this.fiber;this.children=e.childrenMap,this.bdom.patch(e.bdom,t),e.appliedToDom=!0,this.fiber=null}beforeRemove(){this._destroy()}remove(){this.bdom.remove()}}const ne=Symbol("Key changes"),oe=Object.prototype.toString,se=Object.prototype.hasOwnProperty;function ie(t){if("object"!=typeof t||null===t)return!1;const e=ce(t);return!!(Array.isArray(e)||e instanceof Set||e instanceof Map||e instanceof WeakMap)||"[object Object]"===oe.call(e)}function re(t,e){return!e&&ie(t)?ge(t):t}const le=new WeakSet;function ae(t){return le.add(t),t}function ce(t){return fe.has(t)?fe.get(t):t}const ue=new WeakMap;function he(t,e,n){Pt(n??function(t,e){let n=ue.get(t);n||(n=new Map,ue.set(t,n));let o=n.get(e);return o||(o={value:void 0,observers:new Set},n.set(e,o)),o}(t,e))}function de(t,e,n){if(!n){const o=ue.get(t);if(!o)return;if(!o.has(e))return;n=o.get(e)}Mt(n)}const fe=new WeakMap,pe=new WeakMap;function me(t,n){if(!ie(t))throw new e("Cannot make the given value reactive");if(le.has(t))return t;if(fe.has(t))return t;const o=pe.get(t);if(o)return o;let s;s=t instanceof Map?ke(t,"Map",n):t instanceof Set?ke(t,"Set",n):t instanceof WeakMap?ke(t,"WeakMap",n):be(n);const i=new Proxy(t,s);return pe.set(t,i),fe.set(i,t),i}function ge(t){return me(t,null)}function be(t){return{get(e,n,o){he(e,n,t);const s=Reflect.get(e,n,o);if(t||"object"!=typeof s||null===s)return s;if(!ie(s))return s;const i=Object.getOwnPropertyDescriptor(e,n);return!i||i.writable||i.configurable?me(s,null):s},set(e,n,o,s){const i=se.call(e,n),r=Reflect.get(e,n,s),l=Reflect.set(e,n,ce(o),s);return!i&&se.call(e,n)&&de(e,ne,t),(r!==Reflect.get(e,n,s)||"length"===n&&Array.isArray(e))&&de(e,n,t),l},deleteProperty(e,n){const o=Reflect.deleteProperty(e,n);return de(e,ne,t),de(e,n,t),o},ownKeys:e=>(he(e,ne,t),Reflect.ownKeys(e)),has:(e,n)=>(he(e,ne,t),Reflect.has(e,n))}}function ye(t,e,n){return o=>(o=ce(o),he(e,o,n),re(e[t](o),n))}function ve(t,e,n){return function*(){he(e,ne,n);const o=e.keys();for(const s of e[t]()){const t=o.next().value;he(e,t,n),yield re(s,n)}}}function we(t,e){return function(n,o){he(t,ne,e),t.forEach(function(s,i,r){he(t,i,e),n.call(o,re(s,e),re(i,e),re(r,e))},o)}}function $e(t,e,n,o){return(s,i)=>{s=ce(s);const r=n.has(s),l=n[e](s),a=n[t](s,i);return r!==n.has(s)&&de(n,ne,o),l!==n[e](s)&&de(n,s,o),a}}function xe(t,e){return()=>{const n=[...t.keys()];t.clear(),de(t,ne,e);for(const o of n)de(t,o,e)}}const Ne={Set:(t,e)=>({has:ye("has",t,e),add:$e("add","has",t,e),delete:$e("delete","has",t,e),keys:ve("keys",t,e),values:ve("values",t,e),entries:ve("entries",t,e),[Symbol.iterator]:ve(Symbol.iterator,t,e),forEach:we(t,e),clear:xe(t,e),get size(){return he(t,ne,e),t.size}}),Map:(t,e)=>({has:ye("has",t,e),get:ye("get",t,e),set:$e("set","get",t,e),delete:$e("delete","has",t,e),keys:ve("keys",t,e),values:ve("values",t,e),entries:ve("entries",t,e),[Symbol.iterator]:ve(Symbol.iterator,t,e),forEach:we(t,e),clear:xe(t,e),get size(){return he(t,ne,e),t.size}}),WeakMap:(t,e)=>({has:ye("has",t,e),get:ye("get",t,e),set:$e("set","get",t,e),delete:$e("delete","has",t,e)})};function ke(t,e,n){const o=Ne[e](t,n);return Object.assign(be(n),{get:(t,e)=>se.call(o,e)?o[e]:(he(t,e,n),re(t[e],n))})}const Ee=Object.create;class Te{fn;ctx;component;node;key;constructor(t,e,n,o,s){this.fn=t,this.ctx=e,this.component=n,this.node=o,this.key=s}evaluate(){return this.fn.call(this.component,this.ctx,this.node,this.key)}toString(){return this.evaluate().toString()}}const Ae={withDefault:function(t,e){return null==t||!1===t?e:t},zero:Symbol("zero"),callSlot:function(t,e,n,o,s,i,r){n=n+"__slot_"+o;const a=t.__owl__.props.slots||{},{__render:c,__ctx:u,__scope:h}=a[o]||{},d=Ee(u||{});h&&(d[h]=i);const f=c?c(d,e,n):null;if(r){let i,a;return f?i=s?l(o,f):f:a=r(t,e,n),U([i,a])}return f||Y("")},withKey:function(t,e){return t.key=e,t},prepareList:function(t){let n,o;if(Array.isArray(t))n=t,o=t;else if(t instanceof Map)n=[...t.keys()],o=[...t.values()];else if(Symbol.iterator in Object(t))n=[...t],o=n;else{if(!t||"object"!=typeof t)throw new e(`Invalid loop expression: "${t}" is not iterable`);o=Object.values(t),n=Object.keys(t)}const s=o.length;return[n,o,s,new Array(s)]},shallowEqual:function(t,e){for(let n=0,o=t.length;n<o;n++)if(t[n]!==e[n])return!1;return!0},toNumber:function(t){const e=parseFloat(t);return isNaN(e)?t:e},LazyValue:Te,safeOutput:function(t,e){if(null==t)return e?l("default",e):l("undefined",Y(""));let n,o;return t instanceof S?(n="string_safe",o=Tt(t)):t instanceof Te?(n="lazy_value",o=t.evaluate()):(n="string_unsafe",o=Y(t)),l(n,o)},createCatcher:function(t){const e=Object.keys(t).length;class n{child;handlerData;handlerFns=[];parentEl;afterNode=null;constructor(t,e){this.child=t,this.handlerData=e}mount(e,n){this.parentEl=e,this.child.mount(e,n),this.afterNode=document.createTextNode(""),e.insertBefore(this.afterNode,n),this.wrapHandlerData();for(let n in t){const o=t[n],s=L(n);this.handlerFns[o]=s,s.setup.call(e,this.handlerData[o])}}wrapHandlerData(){for(let t=0;t<e;t++){let e=this.handlerData[t],n=e.length-2,o=e[n];const s=this;e[n]=function(t,e){const n=e.target;let i=s.child.firstNode();const r=s.afterNode;for(;i&&i!==r;){if(i.contains(n))return o(t,e);i=i.nextSibling}}}}moveBeforeDOMNode(t,e=this.parentEl){this.parentEl=e,this.child.moveBeforeDOMNode(t,e),e.insertBefore(this.afterNode,t)}moveBeforeVNode(t,e){t&&(e=t.firstNode()||e),this.child.moveBeforeVNode(t?t.child:null,e),this.parentEl.insertBefore(this.afterNode,e)}patch(t,n){if(this!==t){this.handlerData=t.handlerData,this.wrapHandlerData();for(let t=0;t<e;t++)this.handlerFns[t].update.call(this.parentEl,this.handlerData[t]);this.child.patch(t.child,n)}}beforeRemove(){this.child.beforeRemove()}remove(){for(let t=0;t<e;t++)this.handlerFns[t].remove.call(this.parentEl);this.child.remove(),this.afterNode.remove()}firstNode(){return this.child.firstNode()}toString(){return this.child.toString()}}return function(t,e){return new n(t,e)}},markRaw:ae,OwlError:e,createRef:function(t){if(!t)throw new e("Ref is undefined or null");let n,o;if(t.add&&t.delete)n=t.add.bind(t),o=t.delete.bind(t);else{if(!t.set)throw new e("Ref should implement either a 'set' function or 'add' and 'delete' functions");n=t.set.bind(t),o=()=>t.set(null)}return(t,e)=>{e&&o(e),t&&n(t)}},modelExpr:function(t){if("function"!=typeof t||"function"!=typeof t.set)throw new e("Invalid t-model expression: expression should evaluate to a function with a 'set' method defined on it");return t},createComponent:function(t,n,o,s,i,r){const l=!o;let a;const c=0===r.length;a=s?(t,e)=>!0:i?function(t,e){for(let n in t)if(t[n]!==e[n])return!0;return Object.keys(t).length!==Object.keys(e).length}:c?(t,e)=>!1:function(t,e){for(let n of r)if(t[n]!==e[n])return!0;return!1};const u=ee.prototype.updateAndRender,h=ee.prototype.initiateRender;return(s,i,r,c,d)=>{let f=r.children,p=f[i];l&&p&&p.component.constructor!==d&&(p=void 0);const m=r.fiber;if(p)(a(p.props,s)||m.deep||p.forceNextRender)&&(p.forceNextRender=!1,u.call(p,s,m));else{if(o){const t=c.constructor.components;if(!t)throw new e(`Cannot find the definition of component "${n}", missing static components key in parent`);if(!(d=t[n]))throw new e(`Cannot find the definition of component "${n}"`);if(!(d.prototype instanceof St))throw new e(`"${n}" is not a Component. It must inherit from the Component class`)}p=new ee(d,s,t,r,i),f[i]=p;const l=new Jt(p,m);p.willStart.length?h.call(p,l):(p.fiber=l,p.mounted.length&&l.root.mounted.push(l),l.render())}return m.childrenMap[i]=p,p}},callTemplate:function(t,e,n,o,s,i){return l(t,n.getTemplate(t).call(e,o,s,i+t))},callHandler:function(t,n,o){if("function"!=typeof t)throw new e(`Invalid handler expression: the \`t-on\` expression should evaluate to a function, but got '${typeof t}'. Did you mean to use an arrow function? (e.g. \`t-on-click="() => expr"\`)`);t.call(n.this,o)}},Ce={text:Y,createBlock:ct,list:Nt,multi:U,html:Tt,toggler:l,comment:J};class _e{static registerTemplate(t,e){De[t]=e}dev;rawTemplates=Object.create(De);templates={};getRawTemplate;translateFn;translatableAttributes;customDirectives;runtimeUtils;hasGlobalValues;constructor(t={}){if(this.dev=t.dev||!1,this.translateFn=t.translateFn,this.translatableAttributes=t.translatableAttributes,t.templates)if(t.templates instanceof Document||"string"==typeof t.templates)this.addTemplates(t.templates);else for(const e in t.templates)this.addTemplate(e,t.templates[e]);this.getRawTemplate=t.getTemplate,this.customDirectives=t.customDirectives||{},this.runtimeUtils={...Ae,__globals__:t.globalValues||{}},this.hasGlobalValues=Boolean(t.globalValues&&Object.keys(t.globalValues).length)}addTemplate(t,n){if(t in this.rawTemplates){if(!this.dev)return;const o=this.rawTemplates[t];if(("string"==typeof o?o:o instanceof Element?o.outerHTML:o.toString())===("string"==typeof n?n:n.outerHTML))return;throw new e(`Template ${t} already defined with different content`)}this.rawTemplates[t]=n}addTemplates(t){if(t){t=t instanceof Document?t:n(t);for(const e of t.querySelectorAll("[t-name]")){const t=e.getAttribute("t-name");this.addTemplate(t,e)}}}getTemplate(t){const n=t;if(!(n in this.templates)){const o=this.getRawTemplate?.(t)||this.rawTemplates[t];if(void 0===o){let n="";try{const{componentName:t}=_t("component");n=` (for component "${t}")`}catch{}throw new e(`Missing template: "${t}"${n}`)}const s="function"==typeof o&&!(o instanceof Element)?o:this._compileTemplate(t,o),i=this.templates;this.templates[n]=function(t,e){return i[n].call(this,t,e)};const r=s(this,Ce,this.runtimeUtils);this.templates[n]=r}return this.templates[n]}_compileTemplate(t,n){throw new e("Unable to compile a template. Please use owl full build instead")}}const De={};function Se(...t){const e="__template__"+Se.nextId++,n=String.raw(...t);return De[e]=n,e}Se.nextId=1;const Oe="true,false,NaN,null,undefined,debugger,console,window,in,instanceof,new,function,return,eval,void,Math,RegExp,Array,Object,Date,__globals__".split(","),Re=Object.assign(Object.create(null),{and:"&&",or:"||",gt:">",gte:">=",lt:"<",lte:"<="}),Le=Object.assign(Object.create(null),{"{":"LEFT_BRACE","}":"RIGHT_BRACE","[":"LEFT_BRACKET","]":"RIGHT_BRACKET",":":"COLON",",":"COMMA","(":"LEFT_PAREN",")":"RIGHT_PAREN"}),Be="...,.,===,==,+,!==,!=,!,||,&&,>=,>,<=,<,?,-,*,/,%,typeof ,=>,=,;,in ,new ,|,&,^,~".split(",");const Ie=[function(t){let n=t[0],o=n;if("'"!==n&&'"'!==n&&"`"!==n)return!1;let s,i=1;for(;t[i]&&t[i]!==o;){if(s=t[i],n+=s,"\\"===s){if(i++,s=t[i],!s)throw new e("Invalid expression");n+=s}i++}if(t[i]!==o)throw new e("Invalid expression");return n+=o,"`"===o?{type:"TEMPLATE_STRING",value:n,replace:t=>n.replace(/\$\{(.*?)\}/g,(e,n)=>"${"+t(n)+"}")}:{type:"VALUE",value:n}},function(t){let e=t[0];if(e&&e.match(/[0-9]/)){let n=1;for(;t[n]&&t[n].match(/[0-9]|\./);)e+=t[n],n++;return{type:"VALUE",value:e}}return!1},function(t){for(let e of Be)if(t.startsWith(e))return{type:"OPERATOR",value:e};return!1},function(t){let e=t[0];if(e&&e.match(/[a-zA-Z_\$]/)){let n=1;for(;t[n]&&t[n].match(/[\w\$]/);)e+=t[n],n++;return e in Re?{type:"OPERATOR",value:Re[e],size:e.length}:{type:"SYMBOL",value:e}}return!1},function(t){const e=t[0];return!(!e||!(e in Le))&&{type:Le[e],value:e}}];const Pe=t=>t&&("LEFT_BRACE"===t.type||"COMMA"===t.type),Me=t=>t&&("RIGHT_BRACE"===t.type||"COMMA"===t.type),je=new Map([["in "," in "]]);function Ve(t){const n=new Set,o=function(t){const n=[];let o,s=!0,i=t;try{for(;s;)if(i=i.trim(),i){for(let t of Ie)if(s=t(i),s){n.push(s),i=i.slice(s.size||s.value.length);break}}else s=!1}catch(t){o=t}if(i.length||o)throw new e(`Tokenizer error: could not tokenize \`${t}\``);return n}(t);let s=0,i=[],r=-1;for(;s<o.length;){let t=o[s],e=o[s-1],l=o[s+1],a=i[i.length-1];switch(t.type){case"LEFT_BRACE":case"LEFT_BRACKET":case"LEFT_PAREN":i.push(t.type);break;case"RIGHT_BRACE":case"RIGHT_BRACKET":case"RIGHT_PAREN":i.pop()}let c="SYMBOL"===t.type&&!Oe.includes(t.value);if(c&&e&&("LEFT_BRACE"===a&&Pe(e)&&Me(l)&&(o.splice(s+1,0,{type:"COLON",value:":"},{...t}),l=o[s+1]),"OPERATOR"===e.type&&"."===e.value?c=!1:"LEFT_BRACE"!==e.type&&"COMMA"!==e.type||l&&"COLON"===l.type&&(c=!1)),"TEMPLATE_STRING"===t.type&&(t.value=t.replace(t=>We(t))),l&&"OPERATOR"===l.type&&"=>"===l.value)if(0===i.length&&(r=s+1),"RIGHT_PAREN"===t.type){let t=s-1;for(;t>0&&"LEFT_PAREN"!==o[t].type;)"SYMBOL"===o[t].type&&o[t].originalValue&&(o[t].value=o[t].originalValue,n.add(o[t].value)),t--}else n.add(t.value);c&&(t.varName=t.value,n.has(t.value)||(t.originalValue=t.value,t.value=`ctx['${t.value}']`)),s++}for(const t of o)"SYMBOL"===t.type&&t.varName&&n.has(t.value)&&(t.originalValue=t.value,t.value=`_${t.value}`,t.isLocal=!0);let l=null;if(-1!==r){l=[];const t=new Set;for(let e=r+1;e<o.length;e++){const n=o[e];!n.varName||n.isLocal||"this"===n.varName||t.has(n.varName)||(t.add(n.varName),l.push(n.varName))}}return{expr:o.map(t=>je.get(t.value)||t.value).join(""),freeVariables:l}}function We(t){return Ve(t).expr}const Fe=/\{\{.*?\}\}|\#\{.*?\}/g;function Ke(t){return function(t,e){let n=t.match(Fe);if(n&&n[0].length===t.length)return`(${e(t.slice(2,"{"===n[0][0]?-2:-1))})`;let o=t.replace(Fe,t=>"${"+e(t.slice(2,"{"===t[0]?-2:-1))+"}");return"`"+o+"`"}(t,We)}const Ue=Symbol("zero"),ze=/\s+/g;let He;"undefined"!=typeof document&&(He=document.implementation.createDocument(null,null,null));const Ge=new Set(["stop","capture","prevent","self","synthetic","passive"]);let qe={};function Xe(t=""){return qe[t]=(qe[t]||0)+1,t+qe[t]}function Ze(t,e){switch(t){case"input":return"checked"===e||"indeterminate"===e||"value"===e||"readonly"===e||"readOnly"===e||"disabled"===e;case"option":return"selected"===e||"disabled"===e;case"textarea":return"value"===e||"readonly"===e||"readOnly"===e||"disabled"===e;case"select":return"value"===e||"disabled"===e;case"button":case"optgroup":return"disabled"===e}return!1}function Ye(t){return`\`${t.replace(/\\/g,"\\\\").replace(/`/g,"\\`").replace(/\$\{/,"\\${")}\``}class Je{static nextBlockId=1;varName;blockName;dynamicTagName=null;isRoot=!1;hasDynamicChildren=!1;children=[];data=[];dom;currentDom;childNumber=0;target;type;parentVar="";id;constructor(t,e){this.id=Je.nextBlockId++,this.varName="b"+this.id,this.blockName="block"+this.id,this.target=t,this.type=e}insertData(t,e="d"){const n=Xe(e);return this.target.addLine(`let ${n} = ${t};`),this.data.push(n)-1}insert(t){this.currentDom?this.currentDom.appendChild(t):this.dom=t}generateExpr(t){if("block"===this.type){const t=this.children.length;let e=this.data.length?`[${this.data.join(", ")}]`:t?"[]":"";return t&&(e+=", ["+this.children.map(t=>t.varName).join(", ")+"]"),this.dynamicTagName?`toggler(${this.dynamicTagName}, ${this.blockName}(${this.dynamicTagName})(${e}))`:`${this.blockName}(${e})`}return"list"===this.type?`list(c_block${this.id})`:t}asXmlString(){const t=He.createElement("t");return t.appendChild(this.dom),t.innerHTML}}function Qe(t,e){return Object.assign({block:null,index:0,forceNewBlock:!0,translate:t.translate,translationCtx:t.translationCtx,tKeyExpr:null,nameSpace:t.nameSpace,tModelSelectedExpr:t.tModelSelectedExpr},e)}class tn{name;indentLevel=0;loopLevel=0;loopCtxVars=[];tSetVars=new Map;code=[];hasRoot=!1;needsScopeProtection=!1;on;constructor(t,e){this.name=t,this.on=e||null}addLine(t,e){const n=new Array(this.indentLevel+2).join(" ");void 0===e?this.code.push(n+t):this.code.splice(e,0,n+t)}generateCode(){let t=[];t.push(`function ${this.name}(ctx, node, key = "") {`),this.needsScopeProtection&&t.push(" ctx = Object.create(ctx);");for(let e of this.code)t.push(e);return this.hasRoot||t.push("return text('');"),t.push("}"),t.join("\n ")}currentKey(t){let e=this.loopLevel?`key${this.loopLevel}`:"key";return t.tKeyExpr&&(e=`${t.tKeyExpr} + ${e}`),e}}const en=["alt","aria-label","aria-placeholder","aria-roledescription","aria-valuetext","label","placeholder","title"],nn=/^(\s*)([\s\S]+?)(\s*)$/;class on{blocks=[];nextBlockId=1;isDebug=!1;targets=[];target=new tn("template");templateName;dev;translateFn;translatableAttributes=en;ast;staticDefs=[];slotNames=new Set;helpers=new Set;constructor(t,e){if(this.translateFn=e.translateFn||(t=>t),e.translatableAttributes){const t=new Set(en);for(let n of e.translatableAttributes)n.startsWith("-")?t.delete(n.slice(1)):t.add(n);this.translatableAttributes=[...t]}this.dev=e.dev||!1,this.ast=t,this.templateName=e.name,e.name&&!e.name.startsWith("__")&&(this.target.name=`template_${e.name.replace(/\./g,"_")}`),e.hasGlobalValues&&this.helpers.add("__globals__")}generateCode(){const t=this.ast;this.isDebug=11===t.type,Je.nextBlockId=1,qe={},this.compileAST(t,{block:null,index:0,forceNewBlock:!1,translate:!0,translationCtx:"",tKeyExpr:null});let e=[" let { text, createBlock, list, multi, html, toggler, comment } = bdom;"];this.helpers.size&&e.push(`let { ${[...this.helpers].join(", ")} } = helpers;`),this.templateName&&e.push(`// Template name: "${this.templateName}"`);for(let{id:t,expr:n}of this.staticDefs)e.push(`const ${t} = ${n};`);if(this.blocks.length){e.push("");for(let t of this.blocks)if(t.dom){let n=Ye(t.asXmlString());t.dynamicTagName?(n=n.replace(/^`<\w+/,`\`<\${tag || '${t.dom.nodeName}'}`),n=n.replace(/\w+>`$/,`\${tag || '${t.dom.nodeName}'}>\``),e.push(`let ${t.blockName} = tag => createBlock(${n});`)):e.push(`let ${t.blockName} = createBlock(${n});`)}}if(this.targets.length)for(let t of this.targets)e.push(""),e=e.concat(t.generateCode());e.push(""),e=e.concat("return "+this.target.generateCode());const n=e.join("\n ");if(this.isDebug){const t=`[Owl Debug]\n${n}`;console.log(t)}return n}compileInNewTarget(t,e,n,o){const s=Xe(t),i=this.target,r=new tn(s,o);return this.targets.push(r),this.target=r,this.compileAST(e,Qe(n)),this.target=i,s}addLine(t,e){this.target.addLine(t,e)}define(t,e){this.addLine(`const ${t} = ${e};`)}insertAnchor(t,e=t.children.length){const n=`block-child-${e}`,o=He.createElement(n);t.insert(o)}createBlock(t,e,n){const o=this.target.hasRoot,s=new Je(this.target,e);return o||(this.target.hasRoot=!0,s.isRoot=!0),t&&(t.children.push(s),"list"===t.type&&(s.parentVar=`c_block${t.id}`)),s}insertBlock(t,e,n){let o=e.generateExpr(t);if(e.parentVar){let t=this.target.currentKey(n);return this.helpers.add("withKey"),void this.addLine(`${e.parentVar}[${n.index}] = withKey(${o}, ${t});`)}n.tKeyExpr&&(o=`toggler(${n.tKeyExpr}, ${o})`),e.isRoot?(this.target.on&&(o=this.wrapWithEventCatcher(o,this.target.on)),this.addLine(`return ${o};`)):this.define(e.varName,o)}translate(t,e){const n=nn.exec(t);return n[1]+this.translateFn(n[2],e)+n[3]}compileAST(t,e){switch(t.type){case 1:return this.compileComment(t,e);case 0:return this.compileText(t,e);case 2:return this.compileTDomNode(t,e);case 7:return this.compileTOut(t,e);case 4:return this.compileTIf(t,e);case 8:return this.compileTForeach(t,e);case 9:return this.compileTKey(t,e);case 3:return this.compileMulti(t,e);case 6:return this.compileTCall(t,e);case 14:return this.compileTCallBlock(t,e);case 5:return this.compileTSet(t,e);case 10:return this.compileComponent(t,e);case 11:return this.compileDebug(t,e);case 12:return this.compileLog(t,e);case 13:return this.compileTCallSlot(t,e);case 15:return this.compileTTranslation(t,e);case 16:return this.compileTTranslationContext(t,e)}}compileDebug(t,e){return this.addLine("debugger;"),t.content?this.compileAST(t.content,e):null}compileLog(t,e){return this.addLine(`console.log(${We(t.expr)});`),t.content?this.compileAST(t.content,e):null}compileComment(t,e){let{block:n,forceNewBlock:o}=e;if(!n||o)n=this.createBlock(n,"comment",e),this.insertBlock(`comment(${Ye(t.value)})`,n,{...e,forceNewBlock:o&&!n});else{const e=He.createComment(t.value);n.insert(e)}return n.varName}compileText(t,e){let{block:n,forceNewBlock:o}=e,s=t.value;if(s&&!1!==e.translate&&(s=this.translate(s,e.translationCtx)),e.inPreTag||(s=s.replace(ze," ")),!n||o)n=this.createBlock(n,"text",e),this.insertBlock(`text(${Ye(s)})`,n,{...e,forceNewBlock:o&&!n});else{const e=0===t.type?He.createTextNode:He.createComment;n.insert(e.call(He,s))}return n.varName}generateHandlerCode(t,n){const o=t.split(".").slice(1).map(t=>{if(!Ge.has(t))throw new e(`Unknown event modifier: '${t}'`);return`"${t}"`});let s="";o.length&&(s=`${o.join(",")}, `);const i=We(n);if(!i.trim())return`[${s}, ctx]`;let r;const l=i.match(/^(\([^)]*\))\s*=>/),a=!l&&i.match(/^([a-zA-Z_$][a-zA-Z0-9_$]*)\s*=>/);if(l){const t=l[1].slice(1,-1).trim(),e=i.slice(l[0].length);r=t?`(ctx,${t})=>${e}`:`(ctx)=>${e}`}else if(a){const t=i.slice(a[0].length);r=`(ctx,${a[1]})=>${t}`}else this.helpers.add("callHandler"),r=`(ctx, ev) => callHandler(${i}, ctx, ev)`;const c=Xe("hdlr_fn");return this.staticDefs.push({id:c,expr:r}),`[${s}${c}, ctx]`}compileTDomNode(t,e){let{block:n,forceNewBlock:o}=e;const s=!n||o||null!==t.dynamicTag||t.ns;let i=this.target.code.length;if(s&&((t.dynamicTag||e.tKeyExpr||t.ns)&&e.block&&this.insertAnchor(e.block),n=this.createBlock(n,"block",e),this.blocks.push(n),t.dynamicTag)){const e=Xe("tag");this.define(e,We(t.dynamicTag)),n.dynamicTagName=e}const r={};for(let o in t.attrs){let s,i;if(o.startsWith("t-attf")){s=Ke(t.attrs[o]);const e=n.insertData(s,"attr");i=o.slice(7),r["block-attribute-"+e]=i}else if(o.startsWith("t-att"))if(i="t-att"===o?null:o.slice(6),s=We(t.attrs[o]),i&&Ze(t.tag,i)){"readonly"===i&&(i="readOnly"),s="value"===i?`new String((${s}) === 0 ? 0 : ((${s}) || ""))`:`new Boolean(${s})`;r[`block-property-${n.insertData(s,"prop")}`]=i}else{const t=n.insertData(s,"attr");"t-att"===o?r["block-attributes"]=String(t):r[`block-attribute-${t}`]=i}else if(this.translatableAttributes.includes(o)){const n=t.attrsTranslationCtx?.[o]||e.translationCtx;r[o]=this.translateFn(t.attrs[o],n)}else s=`"${t.attrs[o]}"`,i=o,r[o]=t.attrs[o];if("value"===i&&e.tModelSelectedExpr){r[`block-attribute-${n.insertData(`${e.tModelSelectedExpr} === ${s}`,"attr")}`]="selected"}}let l;if(t.model){const{hasDynamicChildren:e,expr:o,eventType:s,shouldNumberize:i,shouldTrim:a,targetAttr:c,specialInitTargetAttr:u,isProxy:h}=t.model;let d,f,p;if(h){const t=We(o);d=t,f=e=>`${t} = ${e}`}else{const t=Xe("expr"),e=We(o);this.helpers.add("modelExpr"),this.define(t,`modelExpr(${e})`),d=`${t}()`,f=e=>`${t}.set(${e})`}if(u){let e=c in r&&`'${r[c]}'`;if(!e&&t.attrs){const n=t.attrs[`t-att-${c}`];n&&(e=We(n))}p=n.insertData(`${d} === ${e}`,"prop"),r[`block-property-${p}`]=u}else if(e){l=`${Xe("bValue")}`,this.define(l,d)}else p=n.insertData(d,"prop"),r[`block-property-${p}`]=c;this.helpers.add("toNumber");let m=`ev.target.${c}`;m=a?`${m}.trim()`:m,m=i?`toNumber(${m})`:m;const g=`[(ctx, ev) => { ${f(m)}; }, ctx]`;p=n.insertData(g,"hdlr"),r[`block-handler-${p}`]=s}for(let e in t.on){const o=this.generateHandlerCode(e,t.on[e]);r[`block-handler-${n.insertData(o,"hdlr")}`]=e}if(t.ref){const e=We(t.ref);this.helpers.add("createRef");const o=`createRef(${e})`,s=n.insertData(o,"ref");r["block-ref"]=String(s)}const a=t.ns||e.nameSpace,c=a?He.createElementNS(a,t.tag):He.createElement(t.tag);for(const[t,e]of Object.entries(r))"class"===t&&""===e||c.setAttribute(t,e);if(n.insert(c),t.content.length){const o=n.currentDom;n.currentDom=c;const s=t.content;for(let o=0;o<s.length;o++){const s=t.content[o],i=Qe(e,{block:n,index:n.childNumber,forceNewBlock:!1,tKeyExpr:e.tKeyExpr,nameSpace:a,tModelSelectedExpr:l,inPreTag:e.inPreTag||"pre"===t.tag});this.compileAST(s,i)}n.currentDom=o}if(s&&(this.insertBlock(`${n.blockName}(ddd)`,n,e),n.children.length&&n.hasDynamicChildren)){const t=this.target.code,e=n.children.slice();let o=e.shift();for(let n=i;n<t.length&&(!t[n].trimStart().startsWith(`const ${o.varName} `)||(t[n]=t[n].replace(`const ${o.varName}`,o.varName),o=e.shift(),o));n++);this.addLine(`let ${n.children.map(t=>t.varName).join(", ")};`,i)}return n.varName}compileZero(){this.helpers.add("zero");const t=this.slotNames.has(Ue);this.slotNames.add(Ue);let e=this.target.loopLevel?`key${this.target.loopLevel}`:"key";return t&&(e=this.generateComponentKey(e)),`ctx[zero]?.(node, ${e}) || text("")`}compileTOut(t,e){let n,{block:o}=e;if(o&&this.insertAnchor(o),o=this.createBlock(o,"html",e),"0"===t.expr)n=this.compileZero();else if(t.body){let o=null;o=Je.nextBlockId;const s=Qe(e);this.compileAST({type:3,content:t.body},s),this.helpers.add("safeOutput"),n=`safeOutput(${We(t.expr)}, b${o})`}else this.helpers.add("safeOutput"),n=`safeOutput(${We(t.expr)})`;return this.insertBlock(n,o,e),o.varName}compileTIfBranch(t,e,n){this.target.indentLevel++;let o=e.children.length;this.compileAST(t,Qe(n,{block:e,index:n.index})),e.children.length>o&&this.insertAnchor(e,o),this.target.indentLevel--}compileTIf(t,e,n){let{block:o,forceNewBlock:s}=e;const i=this.target.code.length,r=!o||"multi"!==o.type&&s;if(o&&(o.hasDynamicChildren=!0),(!o||"multi"!==o.type&&s)&&(o=this.createBlock(o,"multi",e)),this.addLine(`if (${We(t.condition)}) {`),this.compileTIfBranch(t.content,o,e),t.tElif)for(let n of t.tElif)this.addLine(`} else if (${We(n.condition)}) {`),this.compileTIfBranch(n.content,o,e);if(t.tElse&&(this.addLine("} else {"),this.compileTIfBranch(t.tElse,o,e)),this.addLine("}"),r){if(o.children.length){const t=this.target.code,e=o.children.slice();let n=e.shift();for(let o=i;o<t.length&&(!t[o].trimStart().startsWith(`const ${n.varName} `)||(t[o]=t[o].replace(`const ${n.varName}`,n.varName),n=e.shift(),n));o++);this.addLine(`let ${o.children.map(t=>t.varName).join(", ")};`,i)}const t=o.children.map(t=>t.varName).join(", ");this.insertBlock(`multi([${t}])`,o,e)}return o.varName}compileTForeach(t,e){let{block:n}=e;n&&this.insertAnchor(n),n=this.createBlock(n,"list",e),this.target.loopLevel++;const o=`i${this.target.loopLevel}`,s=Xe("ctx");this.addLine(`const ${s} = ctx;`),this.target.loopCtxVars.push(s);const i=`v_block${n.id}`,r=`k_block${n.id}`,l=`l_block${n.id}`,a=`c_block${n.id}`;this.helpers.add("prepareList"),this.define(`[${r}, ${i}, ${l}, ${a}]`,`prepareList(${We(t.collection)});`),this.dev&&this.define(`keys${n.id}`,"new Set()"),this.addLine(`for (let ${o} = 0; ${o} < ${l}; ${o}++) {`),this.target.indentLevel++,this.addLine(`let ctx = Object.create(${s});`),this.addLine(`ctx[\`${t.elem}\`] = ${r}[${o}];`),1&t.noFlags||this.addLine(`ctx[\`${t.elem}_first\`] = ${o} === 0;`),2&t.noFlags||this.addLine(`ctx[\`${t.elem}_last\`] = ${o} === ${r}.length - 1;`),4&t.noFlags||this.addLine(`ctx[\`${t.elem}_index\`] = ${o};`),8&t.noFlags||this.addLine(`ctx[\`${t.elem}_value\`] = ${i}[${o}];`),this.define(`key${this.target.loopLevel}`,t.key?We(t.key):o),this.dev&&(this.helpers.add("OwlError"),this.addLine(`if (keys${n.id}.has(String(key${this.target.loopLevel}))) { throw new OwlError(\`Got duplicate key in t-foreach: \${key${this.target.loopLevel}}\`)}`),this.addLine(`keys${n.id}.add(String(key${this.target.loopLevel}));`));const c=Qe(e,{block:n,index:o});return this.compileAST(t.body,c),this.target.indentLevel--,this.target.loopLevel--,this.target.loopCtxVars.pop(),this.addLine("}"),this.insertBlock("l",n,e),n.varName}compileTKey(t,e){const n=Xe("tKey_");return this.define(n,We(t.expr)),e=Qe(e,{tKeyExpr:n,block:e.block,index:e.index}),this.compileAST(t.content,e)}compileMulti(t,e){let{block:n,forceNewBlock:o}=e;const s=!n||o;let i=this.target.code.length;if(s){let o=null;if(t.content.filter(t=>!t.hasNoRepresentation).length<=1){for(let n of t.content){const t=this.compileAST(n,e);o=o||t}return o}n=this.createBlock(n,"multi",e)}let r=0;for(let o=0,s=t.content.length;o<s;o++){const s=t.content[o],i=!s.hasNoRepresentation,l=Qe(e,{block:n,index:r,forceNewBlock:i});this.compileAST(s,l),i&&r++}if(s){if(n.hasDynamicChildren&&n.children.length){const t=this.target.code,e=n.children.slice();let o=e.shift();for(let n=i;n<t.length&&(!t[n].trimStart().startsWith(`const ${o.varName} `)||(t[n]=t[n].replace(`const ${o.varName}`,o.varName),o=e.shift(),o));n++);this.addLine(`let ${n.children.map(t=>t.varName).join(", ")};`,i)}const t=n.children.map(t=>t.varName).join(", ");this.insertBlock(`multi([${t}])`,n,e)}return n.varName}compileTCall(t,e){let{block:n,forceNewBlock:o}=e;const s=t.attrs?this.formatPropObject(t.attrs,t.attrsTranslationCtx,e.translationCtx):[],i=Fe.test(t.name)?Ke(t.name):"`"+t.name+"`";if(n&&!o&&this.insertAnchor(n),n=this.createBlock(n,"multi",e),t.body){const n=this.compileInNewTarget("callBody",t.body,e),o=Xe("lazyBlock");this.define(o,`${n}.bind(this, ctx)`),this.helpers.add("zero"),s.push(`[zero]: ${o}`)}let r;const l=`{${s.join(", ")}}`;if(t.context){const e=Xe("ctx");this.addLine(`const ${e} = ${We(t.context)};`),r=s.length?`Object.assign({this: ${e}}, ${l})`:`{this: ${e}}`}else r=0===s.length?"ctx":`Object.assign(Object.create(ctx), ${l})`;const a=this.generateComponentKey();return this.helpers.add("callTemplate"),this.insertBlock(`callTemplate(${i}, this, app, ${r}, node, ${a})`,n,{...e,forceNewBlock:!n}),n.varName}compileTCallBlock(t,e){let{block:n,forceNewBlock:o}=e;return n&&(o||this.insertAnchor(n)),n=this.createBlock(n,"multi",e),this.insertBlock(We(t.name),n,{...e,forceNewBlock:!n}),n.varName}compileTSet(t,e){const n=t.value?We(t.value||""):"null",o=0===this.target.loopLevel,s=this.target.tSetVars.get(t.name),i=void 0!==s&&this.target.loopLevel>s;if(t.body){this.helpers.add("LazyValue");const r={type:3,content:t.body};let l=`new LazyValue(${this.compileInNewTarget("value",r,e)}, ctx, this, node, ${this.target.currentKey(e)})`;if(l=t.value?l?`withDefault(${n}, ${l})`:n:l,this.helpers.add("withDefault"),i){const e=this.target.loopCtxVars[s];this.addLine(`${e}[\`${t.name}\`] = ${l};`)}else o?(this.target.needsScopeProtection=!0,this.addLine(`ctx[\`${t.name}\`] = ${l};`),this.target.tSetVars.set(t.name,0)):(this.addLine(`ctx[\`${t.name}\`] = ${l};`),this.target.tSetVars.set(t.name,this.target.loopLevel))}else{let r;if(t.defaultValue){const o=Ye(e.translate?this.translate(t.defaultValue,e.translationCtx):t.defaultValue);t.value?(this.helpers.add("withDefault"),r=`withDefault(${n}, ${o})`):r=o}else r=n;if(i){const e=this.target.loopCtxVars[s];this.addLine(`${e}["${t.name}"] = ${r};`)}else o?(this.target.needsScopeProtection=!0,this.addLine(`ctx["${t.name}"] = ${r};`),this.target.tSetVars.set(t.name,0)):(this.addLine(`ctx["${t.name}"] = ${r};`),this.target.tSetVars.set(t.name,this.target.loopLevel))}return null}generateComponentKey(t="key"){const e=[Xe("__")];for(let t=0;t<this.target.loopLevel;t++)e.push(`\${key${t+1}}`);return`${t} + \`${e.join("__")}\``}formatProp(t,n,o,s){if(t.endsWith(".translate")){const e=o?.[t]||s;n=Ye(this.translateFn(n,e))}else n=We(n);if(t.includes(".")){let[o,s]=t.split(".");switch(t=o,s){case"bind":n=`(${n}).bind(this)`;break;case"alike":case"translate":break;default:throw new e(`Invalid prop suffix: ${s}`)}}return`${t=/^[a-z_]+$/i.test(t)?t:`'${t}'`}: ${n||void 0}`}formatPropObject(t,e,n){return Object.entries(t).map(([t,o])=>this.formatProp(t,o,e,n))}getPropString(t,e){let n=`{${t.join(",")}}`;return e&&(n=`Object.assign({}, ${We(e)}${t.length?", "+n:""})`),n}compileComponent(t,e){let{block:n}=e;const o="slots"in(t.props||{}),s=[],i=[];for(let n in t.props||{}){let[o,r]=n.split(".");if(r){s.push(this.formatProp(n,t.props[n],t.propsTranslationCtx,e.translationCtx));continue}const{expr:l,freeVariables:a}=Ve(t.props[n]),c=/^[a-z_]+$/i.test(o)?o:`'${o}'`;if(s.push(`${c}: ${l||void 0}`),a)for(const t of a){const e=`${o}.${t}`;i.push(`"${e}"`),s.push(`"${e}": ctx['${t}']`)}else i.push(`"${o}"`)}let r="";if(t.slots){let n=[];for(let o in t.slots){const s=t.slots[o],i=[];if(s.content){const t=this.compileInNewTarget("slot",s.content,e,s.on);i.push(`__render: ${t}.bind(this), __ctx: ctx`)}const r=t.slots[o].scope;r&&i.push(`__scope: "${r}"`),t.slots[o].attrs&&i.push(...this.formatPropObject(t.slots[o].attrs,t.slots[o].attrsTranslationCtx,e.translationCtx));const l=`{${i.join(", ")}}`;n.push(`'${o}': ${l}`)}r=`{${n.join(", ")}}`}!r||t.dynamicProps||o||(this.helpers.add("markRaw"),s.push(`slots: markRaw(${r})`));let l,a,c=this.getPropString(s,t.dynamicProps);(r&&(t.dynamicProps||o)||this.dev)&&(l=Xe("props"),this.define(l,c),c=l),r&&(t.dynamicProps||o)&&(this.helpers.add("markRaw"),this.addLine(`${l}.slots = markRaw(Object.assign(${r}, ${l}.slots))`)),t.isDynamic?(a=Xe("Comp"),this.define(a,We(t.name))):a=`\`${t.name}\``,n&&(!1===e.forceNewBlock||e.tKeyExpr)&&this.insertAnchor(n);let u=this.generateComponentKey();e.tKeyExpr&&(u=`${e.tKeyExpr} + ${u}`);let h=Xe("comp");this.helpers.add("createComponent"),this.staticDefs.push({id:h,expr:`createComponent(app, ${t.isDynamic?null:a}, ${!t.isDynamic}, ${!!t.slots}, ${!!t.dynamicProps}, [${i}])`}),t.isDynamic&&(u=`(${a}).name + ${u}`);let d=`${h}(${c}, ${u}, node, this, ${t.isDynamic?a:null})`;return t.isDynamic&&(d=`toggler(${a}, ${d})`),t.on&&(d=this.wrapWithEventCatcher(d,t.on)),n=this.createBlock(n,"multi",e),this.insertBlock(d,n,e),n.varName}wrapWithEventCatcher(t,e){this.helpers.add("createCatcher");let n=Xe("catcher"),o={},s=[];for(let t in e){let n=Xe("hdlr"),i=s.push(n)-1;o[t]=i;const r=this.generateHandlerCode(t,e[t]);this.define(n,r)}return this.staticDefs.push({id:n,expr:`createCatcher(${JSON.stringify(o)})`}),`${n}(${t}, [${s.join(",")}])`}compileTCallSlot(t,e){this.helpers.add("callSlot");let n,o,{block:s}=e,i=!1,r=!1;t.name.match(Fe)?(i=!0,r=!0,o=Ke(t.name)):(o="'"+t.name+"'",r=r||this.slotNames.has(t.name),this.slotNames.add(t.name));const l={...t.attrs},a=l["t-props"];delete l["t-props"];let c=this.target.loopLevel?`key${this.target.loopLevel}`:"key";r&&(c=this.generateComponentKey(c));const u=t.attrs?this.formatPropObject(l,t.attrsTranslationCtx,e.translationCtx):[],h=this.getPropString(u,a);if(t.defaultContent){n=`callSlot(ctx, node, ${c}, ${o}, ${i}, ${h}, ${this.compileInNewTarget("defaultContent",t.defaultContent,e)}.bind(this))`}else if(i){let t=Xe("slot");this.define(t,o),n=`toggler(${t}, callSlot(ctx, node, ${c}, ${t}, ${i}, ${h}))`}else n=`callSlot(ctx, node, ${c}, ${o}, ${i}, ${h})`;return t.on&&(n=this.wrapWithEventCatcher(n,t.on)),s&&this.insertAnchor(s),s=this.createBlock(s,"multi",e),this.insertBlock(n,s,{...e,forceNewBlock:!1}),s.varName}compileTTranslation(t,e){return t.content?this.compileAST(t.content,Object.assign({},e,{translate:!1})):null}compileTTranslationContext(t,e){return t.content?this.compileAST(t.content,Object.assign({},e,{translationCtx:t.translationCtx})):null}}const sn=new WeakMap;function rn(t,n){var o;return function(t){let n=t.querySelectorAll("[t-elif], [t-else]");for(let t=0,o=n.length;t<o;t++){let o=n[t],s=o.previousElementSibling,i=t=>s.getAttribute(t),r=t=>+!!o.getAttribute(t);if(!s||!i("t-if")&&!i("t-elif"))throw new e("t-elif and t-else directives must be preceded by a t-if or t-elif directive");{if(i("t-foreach"))throw new e("t-if cannot stay at the same level as t-foreach when using t-elif or t-else");if(["t-if","t-elif","t-else"].map(r).reduce(function(t,e){return t+e})>1)throw new e("Only one conditional branching directive is allowed per node");let t;for(;(t=o.previousSibling)!==s;){if(t.nodeValue.trim().length&&8!==t.nodeType)throw new e("text is not allowed between branching directives");t.remove()}}}}(o=t),function(t){const n=[...t.querySelectorAll("[t-out]")].filter(t=>t.tagName[0]===t.tagName[0].toUpperCase()||t.hasAttribute("t-component"));for(const t of n){if(t.childNodes.length)throw new e("Cannot have t-out on a component that already has content");const n=t.getAttribute("t-out");t.removeAttribute("t-out");const o=t.ownerDocument.createElement("t");null!=n&&o.setAttribute("t-out",n),t.appendChild(o)}}(o),ln(t,n)||{type:0,value:""}}function ln(t,n){return t instanceof Element?function(t,n){if(!n.customDirectives)return null;const o=t.getAttributeNames();for(let s of o){if("t-custom"===s||"t-custom-"===s)throw new e("Missing custom directive name with t-custom directive");if(s.startsWith("t-custom-")){const o=s.split(".")[0].slice(9),i=n.customDirectives[o];if(!i)throw new e(`Custom directive "${o}" is not defined`);const r=t.getAttribute(s),l=s.split(".").slice(1);t.removeAttribute(s);try{i(t,r,l)}catch(t){throw new e(`Custom directive "${o}" throw the following error: ${t}`)}return ln(t,n)}}return null}(t,n)||function(t,e){if(t.hasAttribute("t-debug")){t.removeAttribute("t-debug");const n=ln(t,e),o={type:11,content:n};return n?.hasNoRepresentation&&(o.hasNoRepresentation=!0),o}if(t.hasAttribute("t-log")){const n=t.getAttribute("t-log");t.removeAttribute("t-log");const o=ln(t,e),s={type:12,expr:n,content:o};return o?.hasNoRepresentation&&(s.hasNoRepresentation=!0),s}return null}(t,n)||function(t,n){if(!t.hasAttribute("t-foreach"))return null;const o=t.outerHTML,s=t.getAttribute("t-foreach");t.removeAttribute("t-foreach");const i=t.getAttribute("t-as")||"";t.removeAttribute("t-as");const r=t.getAttribute("t-key");if(!r)throw new e(`"Directive t-foreach should always be used with a t-key!" (expression: t-foreach="${s}" t-as="${i}")`);t.removeAttribute("t-key");const l=ln(t,n);if(!l)return null;const a=!o.includes("t-call");let c=0;a&&!o.includes(`${i}_first`)&&(c|=1);a&&!o.includes(`${i}_last`)&&(c|=2);a&&!o.includes(`${i}_index`)&&(c|=4);a&&!o.includes(`${i}_value`)&&(c|=8);return{type:8,collection:s,elem:i,body:l,key:r,noFlags:c}}(t,n)||function(t,e){if(!t.hasAttribute("t-if"))return null;const n=t.getAttribute("t-if");t.removeAttribute("t-if");const o=ln(t,e)||{type:0,value:""};let s=t.nextElementSibling;const i=[];for(;s&&s.hasAttribute("t-elif");){const t=s.getAttribute("t-elif");s.removeAttribute("t-elif");const n=ln(s,e),o=s.nextElementSibling;s.remove(),s=o,n&&i.push({condition:t,content:n})}let r=null;s&&s.hasAttribute("t-else")&&(s.removeAttribute("t-else"),r=ln(s,e),s.remove());return{type:4,condition:n,content:o,tElif:i.length?i:null,tElse:r}}(t,n)||function(t,e){if("off"!==t.getAttribute("t-translation"))return null;t.removeAttribute("t-translation");const n=ln(t,e);if(3===n?.type){return pn(n.content.map(hn))}return hn(n)}(t,n)||function(t,e){const n=t.getAttribute("t-translation-context");if(!n)return null;t.removeAttribute("t-translation-context");const o=ln(t,e);if(3===o?.type){return pn(o.content.map(t=>dn(t,n)))}return dn(o,n)}(t,n)||function(t,n){if(!t.hasAttribute("t-call"))return null;if("t"!==t.tagName)throw new e(`Directive 't-call' can only be used on <t> nodes (used on a <${t.tagName}>)`);const o=t.getAttribute("t-call"),s=t.getAttribute("t-call-context");t.removeAttribute("t-call"),t.removeAttribute("t-call-context");let i=null,r=null;for(let e of t.getAttributeNames()){const n=t.getAttribute(e);if(e.startsWith("t-translation-context-")){r=r||{},r[e.slice(22)]=n}else i=i||{},i[e]=n}const l=mn(t,n);return{type:6,name:o,attrs:i,attrsTranslationCtx:r,body:l,context:s}}(t,n)||function(t){if(!t.hasAttribute("t-call-block"))return null;const e=t.getAttribute("t-call-block");return{type:14,name:e}}(t)||function(t,e){if(!t.hasAttribute("t-key"))return null;const n=t.getAttribute("t-key");t.removeAttribute("t-key");const o=ln(t,e);if(!o)return null;const s={type:9,expr:n,content:o};o.hasNoRepresentation&&(s.hasNoRepresentation=!0);return s}(t,n)||function(t,e){if(!t.hasAttribute("t-out")&&!t.hasAttribute("t-esc"))return null;t.hasAttribute("t-esc")&&console.warn('t-esc has been deprecated in favor of t-out. If the value to render is not wrapped by the "markup" function, it will be escaped');const n=t.getAttribute("t-out")||t.getAttribute("t-esc");t.removeAttribute("t-out"),t.removeAttribute("t-esc");const o={type:7,expr:n,body:null},s=t.getAttribute("t-ref");t.removeAttribute("t-ref");const i=ln(t,e);if(!i)return o;if(2===i.type)return o.body=i.content.length?i.content:null,{...i,ref:s,content:[o]};return o}(t,n)||function(t,e){if(!t.hasAttribute("t-call-slot")&&!t.hasAttribute("t-slot"))return null;t.hasAttribute("t-slot")&&console.warn("t-slot has been renamed t-call-slot.");const n=t.getAttribute("t-call-slot")||t.getAttribute("t-slot");t.removeAttribute("t-call-slot"),t.removeAttribute("t-slot");let o=null,s=null,i=null;for(let e of t.getAttributeNames()){const n=t.getAttribute(e);if(e.startsWith("t-on-"))i=i||{},i[e.slice(5)]=n;else if(e.startsWith("t-translation-context-")){s=s||{},s[e.slice(22)]=n}else o=o||{},o[e]=n}return{type:13,name:n,attrs:o,attrsTranslationCtx:s,on:i,defaultContent:mn(t,e)}}(t,n)||function(t,n){let o=t.tagName;const s=o[0];let i=t.hasAttribute("t-component");if(i&&"t"!==o)throw new e(`Directive 't-component' can only be used on <t> nodes (used on a <${o}>)`);if(s!==s.toUpperCase()&&!i)return null;i&&(o=t.getAttribute("t-component"),t.removeAttribute("t-component"));const r=t.getAttribute("t-props");t.removeAttribute("t-props");const l=t.getAttribute("t-slot-scope");t.removeAttribute("t-slot-scope");let a=null,c=null,u=null;for(let n of t.getAttributeNames()){const o=t.getAttribute(n);if(n.startsWith("t-translation-context-")){u=u||{},u[n.slice(22)]=o}else if(n.startsWith("t-")){if(!n.startsWith("t-on-")){const t=un.get(n.split("-").slice(0,2).join("-"));throw new e(t||`unsupported directive on Component: ${n}`)}a=a||{},a[n.slice(5)]=o}else c=c||{},c[n]=o}let h=null;if(t.hasChildNodes()){const o=t.cloneNode(!0),s=Array.from(o.querySelectorAll("[t-set-slot]"));for(let t of s){if("t"!==t.tagName)throw new e(`Directive 't-set-slot' can only be used on <t> nodes (used on a <${t.tagName}>)`);const s=t.getAttribute("t-set-slot");let i=t.parentElement,r=!1;for(;i&&i!==o;){if(i.hasAttribute("t-component")||i.tagName[0]===i.tagName[0].toUpperCase()){r=!0;break}i=i.parentElement}if(r||!i)continue;t.removeAttribute("t-set-slot"),t.remove();const l=ln(t,n);let a=null,c=null,u=null,d=null;for(let e of t.getAttributeNames()){const n=t.getAttribute(e);if("t-slot-scope"!==e)if(e.startsWith("t-translation-context-")){u=u||{},u[e.slice(22)]=n}else e.startsWith("t-on-")?(a=a||{},a[e.slice(5)]=n):(c=c||{},c[e]=n);else d=n}h=h||{},h[s]={content:l,on:a,attrs:c,attrsTranslationCtx:u,scope:d}}const i=mn(o,n);h=h||{},i&&!h.default&&(h.default={content:i,on:a,attrs:null,attrsTranslationCtx:null,scope:l})}return{type:10,name:o,isDynamic:i,dynamicProps:r,props:c,propsTranslationCtx:u,slots:h,on:a}}(t,n)||function(t,n){const{tagName:o}=t,s=t.getAttribute("t-tag");if(t.removeAttribute("t-tag"),"t"===o&&!s)return null;if(o.startsWith("block-"))throw new e(`Invalid tag name: '${o}'`);n=Object.assign({},n),"pre"===o&&(n.inPreTag=!0);let i=!n.nameSpace&&cn.has(o)?"http://www.w3.org/2000/svg":null;const r=t.getAttribute("t-ref");t.removeAttribute("t-ref");const l=t.getAttributeNames();let a=null,c=null,u=null,h=null;for(let s of l){const r=t.getAttribute(s);if("t-on"===s||"t-on-"===s)throw new e("Missing event name with t-on directive");if(s.startsWith("t-on-"))u=u||{},u[s.slice(5)]=r;else if(s.startsWith("t-model")){if(!["input","select","textarea"].includes(o))throw new e("The t-model directive only works with <input>, <textarea> and <select>");const i=t.getAttribute("type"),l="input"===o,a="select"===o,c=l&&"checkbox"===i,u=l&&"radio"===i,d=s.includes(".trim"),f=d||s.includes(".lazy");h={expr:r,targetAttr:c?"checked":"value",specialInitTargetAttr:u?"checked":null,eventType:u?"click":a||f?"change":"input",hasDynamicChildren:!1,shouldTrim:d,shouldNumberize:s.includes(".number"),isProxy:s.includes(".proxy")},a&&((n=Object.assign({},n)).tModelInfo=h)}else{if(s.startsWith("block-"))throw new e(`Invalid attribute: '${s}'`);if("xmlns"===s)i=r;else if(s.startsWith("t-translation-context-")){c=c||{},c[s.slice(22)]=r}else if("t-name"!==s){if(s.startsWith("t-")&&!s.startsWith("t-att"))throw new e(`Unknown QWeb directive: '${s}'`);const t=n.tModelInfo;t&&["t-att-value","t-attf-value"].includes(s)&&(t.hasDynamicChildren=!0),a=a||{},a[s]=r}}}i&&(n.nameSpace=i);const d=fn(t,n);return{type:2,tag:o,dynamicTag:s,attrs:a,attrsTranslationCtx:c,on:u,ref:r,content:d,model:h,ns:i}}(t,n)||function(t,e){if(!t.hasAttribute("t-set"))return null;const n=t.getAttribute("t-set"),o=t.getAttribute("t-value")||null,s=t.innerHTML===t.textContent&&t.textContent||null;let i=null;t.textContent!==t.innerHTML&&(i=fn(t,e));return{type:5,name:n,value:o,defaultValue:s,body:i,hasNoRepresentation:!0}}(t,n)||function(t,e){if("t"!==t.tagName)return null;return mn(t,e)}(t,n):function(t,e){if(t.nodeType===Node.TEXT_NODE){let n=t.textContent||"";return e.inPreTag||!an.test(n)||n.trim()?{type:0,value:n}:null}if(t.nodeType===Node.COMMENT_NODE)return{type:1,value:t.textContent||""};return null}(t,n)}const an=/[\r\n]/;const cn=new Set(["svg","g","path"]);const un=new Map([["t-ref","t-ref is no longer supported on components. Consider exposing only the public part of the component's API through a callback prop."],["t-att","t-att makes no sense on component: props are already treated as expressions"],["t-attf","t-attf is not supported on components: use template strings for string interpolation in props"]]);function hn(t){const e={type:15,content:t};return t?.hasNoRepresentation&&(e.hasNoRepresentation=!0),e}function dn(t,e){const n={type:16,content:t,translationCtx:e};return t?.hasNoRepresentation&&(n.hasNoRepresentation=!0),n}function fn(t,e){const n=[];for(let o of t.childNodes){const t=ln(o,e);t&&(3===t.type?n.push(...t.content):n.push(t))}return n}function pn(t){const e={type:3,content:t};return t.every(t=>t.hasNoRepresentation)&&(e.hasNoRepresentation=!0),e}function mn(t,e){const n=fn(t,e);switch(n.length){case 0:return null;case 1:return n[0];default:return pn(n)}}function gn(t,o={hasGlobalValues:!1}){const s=function(t,e){const o={inPreTag:!1,customDirectives:e};if("string"==typeof t)return rn(n(`<t>${t}</t>`).firstChild,o);let s=sn.get(t);return s||(s=rn(t.cloneNode(!0),o),sn.set(t,s)),s}(t,o.customDirectives),i=new on(s,o).generateCode();try{return new Function("app, bdom, helpers",i)}catch(t){const{name:n}=o,s=new e(`Failed to compile ${n?`template "${n}"`:"anonymous template"}: ${t.message}\n\ngenerated code:\nfunction(app, bdom, helpers) {\n${i}\n}`);throw s.cause=t,s}}function bn(t){const e=It(()=>(Wt(void 0),yn(e),Wt(e),t()),!1);return Vt()?.observers.add(e),Ft(e),function(){const t=Vt();Wt(void 0),yn(e),Wt(t)}}function yn(t){Kt(t),function(t){const e=t.value;e&&"function"==typeof e&&(e(),t.value=void 0)}(t);for(const e of t.observers)e.state=Ot.EXECUTED,Kt(e),yn(e);t.observers.clear()}class vn{static _shadowId;static get id(){return this._shadowId??this.name}static set id(t){this._shadowId=t}__owl__;constructor(t){this.__owl__=t}setup(){}}class wn{app;config;onDestroyCb=[];computations=[];plugins;status=0;constructor(t,e={}){if(this.app=t,this.config=e.config??{},e.parent){const t=e.parent;t.onDestroyCb.push(()=>this.destroy()),this.plugins=Object.create(t.plugins)}else this.plugins={}}destroy(){const t=this.onDestroyCb;for(;t.length;)t.pop()();for(const t of this.computations)Ut(t);this.status=3}getPluginById(t){return this.plugins[t]||null}getPlugin(t){return this.getPluginById(t.id)}startPlugin(t){if(!t.id)throw new e(`Plugin "${t.name}" has no id`);if(this.plugins.hasOwnProperty(t.id)){const n=this.getPluginById(t.id).constructor;if(n!==t)throw new e(`Trying to start a plugin with the same id as an other plugin (id: '${t.id}', existing plugin: '${n.name}', starting plugin: '${t.name}')`);return null}const n=new t(this);return this.plugins[t.id]=n,n.setup(),n}startPlugins(t){Ct.push({type:"plugin",app:this.app,manager:this,get status(){return this.manager.status}});try{for(const e of t)this.startPlugin(e)}finally{Ct.pop()}this.status=1}}function $n(t,e){Array.isArray(e)?t.startPlugins(e):t.onDestroyCb.push(bn(()=>{const n=e.items();Ht(()=>t.startPlugins(n))}))}let xn;"undefined"!=typeof window&&(xn=window.requestAnimationFrame.bind(window));class Nn{static requestAnimationFrame=xn;tasks=new Set;requestAnimationFrame;frame=0;delayedRenders=[];cancelledNodes=new Set;processing=!1;constructor(){this.requestAnimationFrame=Nn.requestAnimationFrame,this.processTasks=this.processTasks.bind(this)}addFiber(t){this.tasks.add(t.root)}scheduleDestroy(t){this.cancelledNodes.add(t),0===this.frame&&(this.frame=this.requestAnimationFrame(this.processTasks))}flush(){if(this.delayedRenders.length){let t=this.delayedRenders;this.delayedRenders=[];for(let e of t)e.root&&3!==e.node.status&&e.node.fiber===e&&e.render()}0===this.frame&&(this.frame=this.requestAnimationFrame(this.processTasks))}processTasks(){if(!this.processing){this.processing=!0,this.frame=0;for(let t of this.cancelledNodes)t._destroy();this.cancelledNodes.clear();for(let t of this.tasks){if(t.root!==t){this.tasks.delete(t);continue}const e=Gt.has(t);e&&0!==t.counter?this.tasks.delete(t):3!==t.node.status?0===t.counter&&(e||t.complete(),t.appliedToDom&&this.tasks.delete(t)):this.tasks.delete(t)}for(let t of this.tasks)3===t.node.status&&this.tasks.delete(t);this.processing=!1}}}let kn=!1;const En=new Set;"undefined"!=typeof window&&(window.__OWL_DEVTOOLS__||={apps:En,Fiber:Jt,RootFiber:Qt,toRaw:ce,proxy:ge});class Tn extends _e{static validateTarget=_;static apps=En;static version="3.0.0-alpha.24";name;scheduler=new Nn;roots=new Set;pluginManager;constructor(t={}){super(t),this.name=t.name||"",En.add(this),this.pluginManager=new wn(this,{config:t.config}),t.plugins&&$n(this.pluginManager,t.plugins),t.test&&(this.dev=!0),!this.dev||t.test||kn||(console.info("Owl is running in 'dev' mode."),kn=!0)}createRoot(t,e={}){const n=e.props||{};let o,s;const i=new Promise((t,e)=>{o=t,s=e}),r=function(){const t=Ct.slice();return()=>{Ct=t}}();let l,a=null;try{l=new ee(t,n,this,null,null)}catch(t){a=t,s(t)}finally{r()}const c={node:l,promise:i,mount:(t,e)=>(a||(Tn.validateTarget(t),this.mountNode(l,t,o,s,e)),i),destroy:()=>{this.roots.delete(c),l.destroy(),this.scheduler.processTasks()}};return this.roots.add(c),c}mountNode(t,e,n,o,s){let i=qt.get(t);i||(i=[],qt.set(t,i)),i.unshift((t,e)=>{const n=e();o(n)}),t.mounted.push(()=>{n(t.component),i.shift()}),t.mountComponent(e,s)}destroy(){for(let t of this.roots)t.destroy();this.pluginManager.destroy(),this.scheduler.processTasks(),En.delete(this)}_handleError(t){throw t}}function An(t,e,n){if(t.app.dev){const o=t.component,s=`${o?o.constructor.name:"Component"}.${n}`;return{[s]:(...t)=>e.call(o,...t)}[s]}return e.bind(t.component)}function Cn(t){const e=_t();"component"===e.type?e.node.willDestroy.unshift(An(e.node,t,"onWillDestroy")):e.manager.onDestroyCb.push(t)}function _n(t,e={}){const n=It(()=>{const e=t();return Object.is(n.value,e)||Mt(n),e},!0);function o(){return n.state!==Ot.EXECUTED&&Ft(n),Pt(n),n.value}o[Rt]=n,o.set=e.set??(()=>{});const s=Ct.at(-1);return s&&("component"===s.type?s.node.computations.push(n):"plugin"===s.type&&s.manager.computations.push(n)),o}function Dn(t,e){const n={type:"signal",value:t,observers:new Set};let o=e(n);const s=()=>(Pt(n),o);return s[Rt]=n,s.set=function(t){Object.is(n.value,t)||(n.value=t,o=e(n),Mt(n))},s}function Sn(t){return Dn(t,t=>t.value)}function On(t,n,o="Value does not match the type"){const s=Ln(t,n);if(s.length){const t=JSON.stringify(s,(t,e)=>"function"==typeof e?e.name:e,2);throw new e(`${o}\n${t}`)}}function Rn(t,e,n,o){return{issueDepth:0,path:n,value:e,get isValid(){return!t.length},addIssue(e){t.push({received:this.value,path:this.path,...e})},mergeIssues(e){t.push(...e)},validate(t){t(this),!this.isValid&&o&&(o.issueDepth=this.issueDepth+1)},withIssues(t){return Rn(t,this.value,this.path,this)},withKey(e){return Rn(t,this.value[e],this.path.concat(e),this)}}}function Ln(t,e){const n=[];return e(Rn(n,t,[])),n}Sn.invalidate=function(t){if("function"!=typeof t||"signal"!==t[Rt]?.type)throw new e(`Value is not a signal (${t})`);Mt(t[Rt])},Sn.Array=function(t){return Dn(t,t=>me(t.value,t))},Sn.Map=function(t){return Dn(t,t=>me(t.value,t))},Sn.Object=function(t){return Dn(t,t=>me(t.value,t))},Sn.Set=function(t){return Dn(t,t=>me(t.value,t))};function Bn(t){return function(e){"function"==typeof e.value&&(e.value===t||e.value.prototype instanceof t)||e.addIssue({message:`value is not '${t.name}' or an extension`})}}function In(t){return function(e){e.value instanceof t||e.addIssue({message:`value is not an instance of '${t.name}'`})}}function Pn(t){return function(e){e.value!==t&&e.addIssue({message:`value is not equal to ${"string"==typeof t?`'${t}'`:t}`})}}function Mn(t,e,n){if("object"!=typeof t.value||Array.isArray(t.value)||null===t.value)return void t.addIssue({message:"value is not an object"});if(!e)return;const o=!Array.isArray(e);let s=e;if(Array.isArray(e)){s={};for(const t of e)s[t]=null}const i=[];for(const e in s){const n=e.endsWith("?")?e.slice(0,-1):e;void 0!==t.value[n]?o&&t.withKey(n).validate(s[e]):e.endsWith("?")||i.push(n)}if(i.length&&t.addIssue({message:"object value has missing keys",missingKeys:i}),n){const e=[];for(const n in t.value)n in s||`${n}?`in s||e.push(n);e.length&&t.addIssue({message:"object value has unknown keys",unknownKeys:e})}}function jn(t){return function(e){let n=0;const o=[];for(const s of t){const t=e.withIssues(o);if(t.validate(s),o.length===n||t.issueDepth>0)return void e.mergeIssues(o.slice(n));n=o.length}e.addIssue({message:"value does not match union type",subIssues:o})}}const Vn={and:function(t){return function(e){for(const n of t)e.validate(n)}},any:function(){return function(){}},array:function(t){return function(e){if(Array.isArray(e.value)){if(t)for(let n=0;n<e.value.length;n++)e.withKey(n).validate(t)}else e.addIssue({message:"value is not an array"})}},boolean:function(){return function(t){"boolean"!=typeof t.value&&t.addIssue({message:"value is not a boolean"})}},component:function(){return Bn(St)},constructor:Bn,customValidator:function(t,e,n="value does not match custom validation"){return function(o){o.validate(t),o.isValid&&(e(o.value)||o.addIssue({message:n}))}},function:function(t=[],e=void 0){return function(t){"function"!=typeof t.value&&t.addIssue({message:"value is not a function"})}},instanceOf:In,literal:Pn,number:function(){return function(t){"number"!=typeof t.value&&t.addIssue({message:"value is not a number"})}},object:function(t={}){return function(e){Mn(e,t,!1)}},or:jn,promise:function(t){return function(t){t.value instanceof Promise||t.addIssue({message:"value is not a promise"})}},record:function(t){return function(e){if("object"!=typeof e.value||Array.isArray(e.value)||null===e.value)e.addIssue({message:"value is not an object"});else if(t)for(const n in e.value)e.withKey(n).validate(t)}},ref:function(t){return jn([Pn(null),In(t)])},selection:function(t){return jn(t.map(Pn))},signal:function(t){return function(t){"function"==typeof t.value&&t.value[Rt]||t.addIssue({message:"value is not a reactive value"})}},strictObject:function(t){return function(e){Mn(e,t,!0)}},string:function(){return function(t){"string"!=typeof t.value&&t.addIssue({message:"value is not a string"})}},tuple:function(t){return function(e){if(Array.isArray(e.value))if(e.value.length===t.length)for(let n=0;n<t.length;n++)e.withKey(n).validate(t[n]);else e.addIssue({message:"tuple value does not have the correct length"});else e.addIssue({message:"value is not an array"})}}};function Wn(t){Cn(bn(t))}s.shouldNormalizeDom=!1,s.mainEventHandler=(t,n,s)=>{const{data:i,modifiers:r}=o(t);t=i;let l=!1;if(r.length){let t=!1;const e=n.target===s;for(const o of r)switch(o){case"self":if(t=!0,e)continue;return l;case"prevent":(t&&e||!t)&&n.preventDefault();continue;case"stop":(t&&e||!t)&&n.stopPropagation(),l=!0;continue}}if(Object.hasOwnProperty.call(t,0)){const o=t[0];if("function"!=typeof o)throw new e(`Invalid handler (expected a function, received: '${o}')`);let s=t[1]?t[1].__owl__:null;s&&1!==s.status||o(t[1],n)}return l};const Fn={config:s,mount:At,patch:function(t,e,n=!1){t.patch(e,n)},remove:function(t,e=!1){e&&t.beforeRemove(),t.remove()},list:Nt,multi:U,text:Y,toggler:l,createBlock:ct,html:Tt,comment:J},Kn={version:Tn.version};_e.prototype._compileTemplate=function(t,e){return gn(e,{name:t,dev:this.dev,translateFn:this.translateFn,translatableAttributes:this.translatableAttributes,customDirectives:this.customDirectives,hasGlobalValues:this.hasGlobalValues})},t.App=Tn,t.Component=St,t.EventBus=D,t.OwlError=e,t.Plugin=vn,t.Registry=class{_map=Sn.Object(Object.create(null));_name;_validation;constructor(t={}){this._name=t.name||"registry",this._validation=t.validation}entries=_n(()=>Object.entries(this._map()).sort((t,e)=>t[1][0]-e[1][0]).map(([t,e])=>[t,e[1]]));items=_n(()=>this.entries().map(t=>t[1]));addById(t,n={}){if(!t.id)throw new e(`Item should have an id key (registry '${this._name}')`);return this.add(t.id,t,{sequence:n.sequence??50})}add(t,e,n={}){if(this._validation){const n=this._name?` (registry '${this._name}', key: '${t}')`:` (key: '${t}')`;On(e,this._validation,`Registry entry does not match the type${n}`)}return this._map()[t]=[n.sequence??50,e],this}get(t,e){const n=t in this._map();if(!n&&arguments.length<2)throw new Error(`KeyNotFoundError: Cannot find key "${t}" (registry '${this._name}')`);return n?this._map()[t][1]:e}delete(t){delete this._map()[t]}has(t){return t in this._map()}},t.Resource=class{_items=Sn.Array([]);_name;_validation;constructor(t={}){this._name=t.name,this._validation=t.validation}items=_n(()=>this._items().sort((t,e)=>t[0]-e[0]).map(t=>t[1]));add(t,e={}){if(this._validation){const e=this._name?` (resource '${this._name}')`:"";On(t,this._validation,`Resource item does not match the type${e}`)}return this._items().push([e.sequence??50,t]),this}delete(t){const e=this._items().filter(([e,n])=>n!==t);return this._items.set(e),this}has(t){return this._items().some(([e,n])=>n===t)}},t.__info__=Kn,t.assertType=On,t.batched=C,t.blockDom=Fn,t.computed=_n,t.config=function(t,e){const{app:n,manager:o}=_t("plugin");return n.dev&&e&&On(o.config,Vn.object({[t]:e}),"Config does not match the type"),o.config[t.endsWith("?")?t.slice(0,-1):t]},t.effect=bn,t.htmlEscape=O,t.markRaw=ae,t.markup=R,t.mount=async function(t,e,n={}){return new Tn(n).createRoot(t,n).mount(e,n)},t.onError=function(t){const{node:e}=_t("component");let n=qt.get(e);n||(n=[],qt.set(e,n)),n.push(t.bind(e.component))},t.onMounted=function(t){const{node:e}=_t("component");e.mounted.push(An(e,t,"onMounted"))},t.onPatched=function(t){const{node:e}=_t("component");e.patched.push(An(e,t,"onPatched"))},t.onWillDestroy=Cn,t.onWillPatch=function(t){const{node:e}=_t("component");e.willPatch.unshift(An(e,t,"onWillPatch"))},t.onWillStart=function(t){const{node:e}=_t("component");e.willStart.push(An(e,t,"onWillStart"))},t.onWillUnmount=function(t){const{node:e}=_t("component");e.willUnmount.unshift(An(e,t,"onWillUnmount"))},t.onWillUpdateProps=function(t){const{node:e}=_t("component");e.willUpdateProps.push(An(e,t,"onWillUpdateProps"))},t.plugin=function(t){const n=_t(),o="component"===n.type?n.node.pluginManager:n.manager;let s=o.getPluginById(t.id);if(!s){if("plugin"!==n.type)throw new e(`Unknown plugin "${t.id}"`);s=o.startPlugin(t)}return s},t.props=function(t,e){const{node:n,app:o,componentName:s}=_t("component");function i(t){return void 0===n.props[t]&&e?e[t]:n.props[t]}Object.assign(n.defaultProps,e);const r=Object.create(null);function l(t){for(const e of t)Reflect.defineProperty(r,e,{enumerable:!0,get:i.bind(null,e)})}if(t){if(l((Array.isArray(t)?t:Object.keys(t)).map(t=>t.endsWith("?")?t.slice(0,-1):t)),o.dev){const o=e?function(t,e){const n=(Array.isArray(t)?t:Object.keys(t)).filter(t=>!t.endsWith("?")&&t in e);return e=>{n.length&&e.addIssue({message:"props have default values on mandatory keys",keys:n}),e.validate(Vn.object(t))}}(t,e):Vn.object(t);On(n.props,o,`Invalid component props (${s})`),n.willUpdateProps.push(t=>{On(t,o,`Invalid component props (${s})`)})}}else{const t=t=>{const n=[];for(const e in t)1!==e.charCodeAt(0)&&n.push(e);if(e)for(const o in e)o in t||n.push(o);return n};let o=t(n.props);l(o),n.willUpdateProps.push(e=>{for(const t of o)Reflect.deleteProperty(r,t);o=t(e),l(o)})}return r},t.providePlugins=function(t,e){const{node:n}=_t("component"),o=new wn(n.app,{parent:n.pluginManager,config:e});n.pluginManager=o,Cn(()=>o.destroy()),$n(o,t)},t.proxy=ge,t.signal=Sn,t.status=function(t){switch(t.__owl__.status){case 0:return"new";case 2:return"cancelled";case 1:return t instanceof vn?"started":"mounted";case 3:return"destroyed"}},t.toRaw=ce,t.types=Vn,t.untrack=Ht,t.useApp=function(){return _t().app},t.useContext=function(){const t=Ct.at(-1);return{run(e){if(t){let n;Ct.push(t);try{n=e()}finally{Ct.pop()}return n}return e()},protectAsync:e=>(t&&(e=Dt(t,e)),e),runWithAsyncProtection:e=>(t&&(e=Dt(t,e)),e())}},t.useEffect=Wn,t.useListener=function(t,e,n,o){"function"==typeof t?Wn(()=>{const s=t();if(s)return s.addEventListener(e,n,o),()=>s.removeEventListener(e,n,o)}):(t.addEventListener(e,n,o),Cn(()=>t.removeEventListener(e,n,o)))},t.useResource=function(t,e){for(let n of e)t.add(n);Cn(()=>{for(let n of e)t.delete(n)})},t.validateType=Ln,t.whenReady=function(t){return new Promise(function(t){"loading"!==document.readyState?t(!0):document.addEventListener("DOMContentLoaded",t,!1)}).then(t||function(){})},t.xml=Se,Kn.date="2026-04-10T09:24:05.169Z",Kn.hash="d325807",Kn.url="https://github.com/odoo/owl"}(this.owl=this.owl||{});
@@ -243,7 +243,6 @@ declare class Fiber {
243
243
  childrenMap: ComponentNode["children"];
244
244
  constructor(node: ComponentNode, parent: Fiber | null);
245
245
  render(): void;
246
- _render(): void;
247
246
  }
248
247
  declare class RootFiber extends Fiber {
249
248
  counter: number;
@@ -13,7 +13,6 @@ export declare class Fiber {
13
13
  childrenMap: ComponentNode["children"];
14
14
  constructor(node: ComponentNode, parent: Fiber | null);
15
15
  render(): void;
16
- _render(): void;
17
16
  }
18
17
  export declare class RootFiber extends Fiber {
19
18
  counter: number;
@@ -1 +1 @@
1
- export declare const version = "3.0.0-alpha.23";
1
+ export declare const version = "3.0.0-alpha.24";
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@odoo/owl",
3
- "version": "3.0.0-alpha.23",
3
+ "version": "3.0.0-alpha.24",
4
4
  "description": "Odoo Web Library (OWL)",
5
5
  "main": "dist/owl.cjs.js",
6
6
  "module": "dist/owl.es.js",