@odoo/owl 2.2.7 → 2.2.8

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.
Binary file
package/dist/owl.cjs.js CHANGED
@@ -3163,8 +3163,14 @@ const helpers = {
3163
3163
  makeRefWrapper,
3164
3164
  };
3165
3165
 
3166
- const bdom = { text, createBlock, list, multi, html, toggler, comment };
3167
- function parseXML$1(xml) {
3166
+ /**
3167
+ * Parses an XML string into an XML document, throwing errors on parser errors
3168
+ * instead of returning an XML document containing the parseerror.
3169
+ *
3170
+ * @param xml the string to parse
3171
+ * @returns an XML document corresponding to the content of the string
3172
+ */
3173
+ function parseXML(xml) {
3168
3174
  const parser = new DOMParser();
3169
3175
  const doc = parser.parseFromString(xml, "text/xml");
3170
3176
  if (doc.getElementsByTagName("parsererror").length) {
@@ -3191,7 +3197,9 @@ function parseXML$1(xml) {
3191
3197
  throw new OwlError(msg);
3192
3198
  }
3193
3199
  return doc;
3194
- }
3200
+ }
3201
+
3202
+ const bdom = { text, createBlock, list, multi, html, toggler, comment };
3195
3203
  class TemplateSet {
3196
3204
  constructor(config = {}) {
3197
3205
  this.rawTemplates = Object.create(globalTemplates);
@@ -3210,6 +3218,7 @@ class TemplateSet {
3210
3218
  }
3211
3219
  }
3212
3220
  }
3221
+ this.getRawTemplate = config.getTemplate;
3213
3222
  }
3214
3223
  static registerTemplate(name, fn) {
3215
3224
  globalTemplates[name] = fn;
@@ -3239,15 +3248,16 @@ class TemplateSet {
3239
3248
  // empty string
3240
3249
  return;
3241
3250
  }
3242
- xml = xml instanceof Document ? xml : parseXML$1(xml);
3251
+ xml = xml instanceof Document ? xml : parseXML(xml);
3243
3252
  for (const template of xml.querySelectorAll("[t-name]")) {
3244
3253
  const name = template.getAttribute("t-name");
3245
3254
  this.addTemplate(name, template);
3246
3255
  }
3247
3256
  }
3248
3257
  getTemplate(name) {
3258
+ var _a;
3249
3259
  if (!(name in this.templates)) {
3250
- const rawTemplate = this.rawTemplates[name];
3260
+ const rawTemplate = ((_a = this.getRawTemplate) === null || _a === void 0 ? void 0 : _a.call(this, name)) || this.rawTemplates[name];
3251
3261
  if (rawTemplate === undefined) {
3252
3262
  let extraInfo = "";
3253
3263
  try {
@@ -4957,9 +4967,9 @@ function parseDOMNode(node, ctx) {
4957
4967
  const isSelect = tagName === "select";
4958
4968
  const isCheckboxInput = isInput && typeAttr === "checkbox";
4959
4969
  const isRadioInput = isInput && typeAttr === "radio";
4960
- const hasLazyMod = attr.includes(".lazy");
4961
- const hasNumberMod = attr.includes(".number");
4962
4970
  const hasTrimMod = attr.includes(".trim");
4971
+ const hasLazyMod = hasTrimMod || attr.includes(".lazy");
4972
+ const hasNumberMod = attr.includes(".number");
4963
4973
  const eventType = isRadioInput ? "click" : isSelect || hasLazyMod ? "change" : "input";
4964
4974
  model = {
4965
4975
  baseExpr,
@@ -5505,41 +5515,6 @@ function normalizeTEscTOut(el) {
5505
5515
  function normalizeXML(el) {
5506
5516
  normalizeTIf(el);
5507
5517
  normalizeTEscTOut(el);
5508
- }
5509
- /**
5510
- * Parses an XML string into an XML document, throwing errors on parser errors
5511
- * instead of returning an XML document containing the parseerror.
5512
- *
5513
- * @param xml the string to parse
5514
- * @returns an XML document corresponding to the content of the string
5515
- */
5516
- function parseXML(xml) {
5517
- const parser = new DOMParser();
5518
- const doc = parser.parseFromString(xml, "text/xml");
5519
- if (doc.getElementsByTagName("parsererror").length) {
5520
- let msg = "Invalid XML in template.";
5521
- const parsererrorText = doc.getElementsByTagName("parsererror")[0].textContent;
5522
- if (parsererrorText) {
5523
- msg += "\nThe parser has produced the following error message:\n" + parsererrorText;
5524
- const re = /\d+/g;
5525
- const firstMatch = re.exec(parsererrorText);
5526
- if (firstMatch) {
5527
- const lineNumber = Number(firstMatch[0]);
5528
- const line = xml.split("\n")[lineNumber - 1];
5529
- const secondMatch = re.exec(parsererrorText);
5530
- if (line && secondMatch) {
5531
- const columnIndex = Number(secondMatch[0]) - 1;
5532
- if (line[columnIndex]) {
5533
- msg +=
5534
- `\nThe error might be located at xml line ${lineNumber} column ${columnIndex}\n` +
5535
- `${line}\n${"-".repeat(columnIndex - 1)}^`;
5536
- }
5537
- }
5538
- }
5539
- }
5540
- throw new OwlError(msg);
5541
- }
5542
- return doc;
5543
5518
  }
5544
5519
 
5545
5520
  function compile(template, options = {}) {
@@ -5566,7 +5541,7 @@ function compile(template, options = {}) {
5566
5541
  }
5567
5542
 
5568
5543
  // do not modify manually. This file is generated by the release script.
5569
- const version = "2.2.7";
5544
+ const version = "2.2.8";
5570
5545
 
5571
5546
  // -----------------------------------------------------------------------------
5572
5547
  // Scheduler
@@ -6029,6 +6004,6 @@ exports.whenReady = whenReady;
6029
6004
  exports.xml = xml;
6030
6005
 
6031
6006
 
6032
- __info__.date = '2023-12-06T13:56:01.636Z';
6033
- __info__.hash = 'e94428a';
6007
+ __info__.date = '2024-01-12T10:02:46.131Z';
6008
+ __info__.hash = '7b454da';
6034
6009
  __info__.url = 'https://github.com/odoo/owl';
package/dist/owl.es.js CHANGED
@@ -3159,8 +3159,14 @@ const helpers = {
3159
3159
  makeRefWrapper,
3160
3160
  };
3161
3161
 
3162
- const bdom = { text, createBlock, list, multi, html, toggler, comment };
3163
- function parseXML$1(xml) {
3162
+ /**
3163
+ * Parses an XML string into an XML document, throwing errors on parser errors
3164
+ * instead of returning an XML document containing the parseerror.
3165
+ *
3166
+ * @param xml the string to parse
3167
+ * @returns an XML document corresponding to the content of the string
3168
+ */
3169
+ function parseXML(xml) {
3164
3170
  const parser = new DOMParser();
3165
3171
  const doc = parser.parseFromString(xml, "text/xml");
3166
3172
  if (doc.getElementsByTagName("parsererror").length) {
@@ -3187,7 +3193,9 @@ function parseXML$1(xml) {
3187
3193
  throw new OwlError(msg);
3188
3194
  }
3189
3195
  return doc;
3190
- }
3196
+ }
3197
+
3198
+ const bdom = { text, createBlock, list, multi, html, toggler, comment };
3191
3199
  class TemplateSet {
3192
3200
  constructor(config = {}) {
3193
3201
  this.rawTemplates = Object.create(globalTemplates);
@@ -3206,6 +3214,7 @@ class TemplateSet {
3206
3214
  }
3207
3215
  }
3208
3216
  }
3217
+ this.getRawTemplate = config.getTemplate;
3209
3218
  }
3210
3219
  static registerTemplate(name, fn) {
3211
3220
  globalTemplates[name] = fn;
@@ -3235,15 +3244,16 @@ class TemplateSet {
3235
3244
  // empty string
3236
3245
  return;
3237
3246
  }
3238
- xml = xml instanceof Document ? xml : parseXML$1(xml);
3247
+ xml = xml instanceof Document ? xml : parseXML(xml);
3239
3248
  for (const template of xml.querySelectorAll("[t-name]")) {
3240
3249
  const name = template.getAttribute("t-name");
3241
3250
  this.addTemplate(name, template);
3242
3251
  }
3243
3252
  }
3244
3253
  getTemplate(name) {
3254
+ var _a;
3245
3255
  if (!(name in this.templates)) {
3246
- const rawTemplate = this.rawTemplates[name];
3256
+ const rawTemplate = ((_a = this.getRawTemplate) === null || _a === void 0 ? void 0 : _a.call(this, name)) || this.rawTemplates[name];
3247
3257
  if (rawTemplate === undefined) {
3248
3258
  let extraInfo = "";
3249
3259
  try {
@@ -4953,9 +4963,9 @@ function parseDOMNode(node, ctx) {
4953
4963
  const isSelect = tagName === "select";
4954
4964
  const isCheckboxInput = isInput && typeAttr === "checkbox";
4955
4965
  const isRadioInput = isInput && typeAttr === "radio";
4956
- const hasLazyMod = attr.includes(".lazy");
4957
- const hasNumberMod = attr.includes(".number");
4958
4966
  const hasTrimMod = attr.includes(".trim");
4967
+ const hasLazyMod = hasTrimMod || attr.includes(".lazy");
4968
+ const hasNumberMod = attr.includes(".number");
4959
4969
  const eventType = isRadioInput ? "click" : isSelect || hasLazyMod ? "change" : "input";
4960
4970
  model = {
4961
4971
  baseExpr,
@@ -5501,41 +5511,6 @@ function normalizeTEscTOut(el) {
5501
5511
  function normalizeXML(el) {
5502
5512
  normalizeTIf(el);
5503
5513
  normalizeTEscTOut(el);
5504
- }
5505
- /**
5506
- * Parses an XML string into an XML document, throwing errors on parser errors
5507
- * instead of returning an XML document containing the parseerror.
5508
- *
5509
- * @param xml the string to parse
5510
- * @returns an XML document corresponding to the content of the string
5511
- */
5512
- function parseXML(xml) {
5513
- const parser = new DOMParser();
5514
- const doc = parser.parseFromString(xml, "text/xml");
5515
- if (doc.getElementsByTagName("parsererror").length) {
5516
- let msg = "Invalid XML in template.";
5517
- const parsererrorText = doc.getElementsByTagName("parsererror")[0].textContent;
5518
- if (parsererrorText) {
5519
- msg += "\nThe parser has produced the following error message:\n" + parsererrorText;
5520
- const re = /\d+/g;
5521
- const firstMatch = re.exec(parsererrorText);
5522
- if (firstMatch) {
5523
- const lineNumber = Number(firstMatch[0]);
5524
- const line = xml.split("\n")[lineNumber - 1];
5525
- const secondMatch = re.exec(parsererrorText);
5526
- if (line && secondMatch) {
5527
- const columnIndex = Number(secondMatch[0]) - 1;
5528
- if (line[columnIndex]) {
5529
- msg +=
5530
- `\nThe error might be located at xml line ${lineNumber} column ${columnIndex}\n` +
5531
- `${line}\n${"-".repeat(columnIndex - 1)}^`;
5532
- }
5533
- }
5534
- }
5535
- }
5536
- throw new OwlError(msg);
5537
- }
5538
- return doc;
5539
5514
  }
5540
5515
 
5541
5516
  function compile(template, options = {}) {
@@ -5562,7 +5537,7 @@ function compile(template, options = {}) {
5562
5537
  }
5563
5538
 
5564
5539
  // do not modify manually. This file is generated by the release script.
5565
- const version = "2.2.7";
5540
+ const version = "2.2.8";
5566
5541
 
5567
5542
  // -----------------------------------------------------------------------------
5568
5543
  // Scheduler
@@ -5991,6 +5966,6 @@ TemplateSet.prototype._compileTemplate = function _compileTemplate(name, templat
5991
5966
  export { App, Component, EventBus, OwlError, __info__, blockDom, loadFile, markRaw, markup, mount, onError, onMounted, onPatched, onRendered, onWillDestroy, onWillPatch, onWillRender, onWillStart, onWillUnmount, onWillUpdateProps, reactive, status, toRaw, useChildSubEnv, useComponent, useEffect, useEnv, useExternalListener, useRef, useState, useSubEnv, validate, validateType, whenReady, xml };
5992
5967
 
5993
5968
 
5994
- __info__.date = '2023-12-06T13:56:01.636Z';
5995
- __info__.hash = 'e94428a';
5969
+ __info__.date = '2024-01-12T10:02:46.131Z';
5970
+ __info__.hash = '7b454da';
5996
5971
  __info__.url = 'https://github.com/odoo/owl';
package/dist/owl.iife.js CHANGED
@@ -3162,8 +3162,14 @@
3162
3162
  makeRefWrapper,
3163
3163
  };
3164
3164
 
3165
- const bdom = { text, createBlock, list, multi, html, toggler, comment };
3166
- function parseXML$1(xml) {
3165
+ /**
3166
+ * Parses an XML string into an XML document, throwing errors on parser errors
3167
+ * instead of returning an XML document containing the parseerror.
3168
+ *
3169
+ * @param xml the string to parse
3170
+ * @returns an XML document corresponding to the content of the string
3171
+ */
3172
+ function parseXML(xml) {
3167
3173
  const parser = new DOMParser();
3168
3174
  const doc = parser.parseFromString(xml, "text/xml");
3169
3175
  if (doc.getElementsByTagName("parsererror").length) {
@@ -3190,7 +3196,9 @@
3190
3196
  throw new OwlError(msg);
3191
3197
  }
3192
3198
  return doc;
3193
- }
3199
+ }
3200
+
3201
+ const bdom = { text, createBlock, list, multi, html, toggler, comment };
3194
3202
  class TemplateSet {
3195
3203
  constructor(config = {}) {
3196
3204
  this.rawTemplates = Object.create(globalTemplates);
@@ -3209,6 +3217,7 @@
3209
3217
  }
3210
3218
  }
3211
3219
  }
3220
+ this.getRawTemplate = config.getTemplate;
3212
3221
  }
3213
3222
  static registerTemplate(name, fn) {
3214
3223
  globalTemplates[name] = fn;
@@ -3238,15 +3247,16 @@
3238
3247
  // empty string
3239
3248
  return;
3240
3249
  }
3241
- xml = xml instanceof Document ? xml : parseXML$1(xml);
3250
+ xml = xml instanceof Document ? xml : parseXML(xml);
3242
3251
  for (const template of xml.querySelectorAll("[t-name]")) {
3243
3252
  const name = template.getAttribute("t-name");
3244
3253
  this.addTemplate(name, template);
3245
3254
  }
3246
3255
  }
3247
3256
  getTemplate(name) {
3257
+ var _a;
3248
3258
  if (!(name in this.templates)) {
3249
- const rawTemplate = this.rawTemplates[name];
3259
+ const rawTemplate = ((_a = this.getRawTemplate) === null || _a === void 0 ? void 0 : _a.call(this, name)) || this.rawTemplates[name];
3250
3260
  if (rawTemplate === undefined) {
3251
3261
  let extraInfo = "";
3252
3262
  try {
@@ -4956,9 +4966,9 @@
4956
4966
  const isSelect = tagName === "select";
4957
4967
  const isCheckboxInput = isInput && typeAttr === "checkbox";
4958
4968
  const isRadioInput = isInput && typeAttr === "radio";
4959
- const hasLazyMod = attr.includes(".lazy");
4960
- const hasNumberMod = attr.includes(".number");
4961
4969
  const hasTrimMod = attr.includes(".trim");
4970
+ const hasLazyMod = hasTrimMod || attr.includes(".lazy");
4971
+ const hasNumberMod = attr.includes(".number");
4962
4972
  const eventType = isRadioInput ? "click" : isSelect || hasLazyMod ? "change" : "input";
4963
4973
  model = {
4964
4974
  baseExpr,
@@ -5504,41 +5514,6 @@
5504
5514
  function normalizeXML(el) {
5505
5515
  normalizeTIf(el);
5506
5516
  normalizeTEscTOut(el);
5507
- }
5508
- /**
5509
- * Parses an XML string into an XML document, throwing errors on parser errors
5510
- * instead of returning an XML document containing the parseerror.
5511
- *
5512
- * @param xml the string to parse
5513
- * @returns an XML document corresponding to the content of the string
5514
- */
5515
- function parseXML(xml) {
5516
- const parser = new DOMParser();
5517
- const doc = parser.parseFromString(xml, "text/xml");
5518
- if (doc.getElementsByTagName("parsererror").length) {
5519
- let msg = "Invalid XML in template.";
5520
- const parsererrorText = doc.getElementsByTagName("parsererror")[0].textContent;
5521
- if (parsererrorText) {
5522
- msg += "\nThe parser has produced the following error message:\n" + parsererrorText;
5523
- const re = /\d+/g;
5524
- const firstMatch = re.exec(parsererrorText);
5525
- if (firstMatch) {
5526
- const lineNumber = Number(firstMatch[0]);
5527
- const line = xml.split("\n")[lineNumber - 1];
5528
- const secondMatch = re.exec(parsererrorText);
5529
- if (line && secondMatch) {
5530
- const columnIndex = Number(secondMatch[0]) - 1;
5531
- if (line[columnIndex]) {
5532
- msg +=
5533
- `\nThe error might be located at xml line ${lineNumber} column ${columnIndex}\n` +
5534
- `${line}\n${"-".repeat(columnIndex - 1)}^`;
5535
- }
5536
- }
5537
- }
5538
- }
5539
- throw new OwlError(msg);
5540
- }
5541
- return doc;
5542
5517
  }
5543
5518
 
5544
5519
  function compile(template, options = {}) {
@@ -5565,7 +5540,7 @@
5565
5540
  }
5566
5541
 
5567
5542
  // do not modify manually. This file is generated by the release script.
5568
- const version = "2.2.7";
5543
+ const version = "2.2.8";
5569
5544
 
5570
5545
  // -----------------------------------------------------------------------------
5571
5546
  // Scheduler
@@ -6030,8 +6005,8 @@ See https://github.com/odoo/owl/blob/${hash}/doc/reference/app.md#configuration
6030
6005
  Object.defineProperty(exports, '__esModule', { value: true });
6031
6006
 
6032
6007
 
6033
- __info__.date = '2023-12-06T13:56:01.636Z';
6034
- __info__.hash = 'e94428a';
6008
+ __info__.date = '2024-01-12T10:02:46.131Z';
6009
+ __info__.hash = '7b454da';
6035
6010
  __info__.url = 'https://github.com/odoo/owl';
6036
6011
 
6037
6012
 
@@ -1 +1 @@
1
- !function(t){"use strict";function e(t){t=t.slice();const e=[];let n;for(;(n=t[0])&&"string"==typeof n;)e.push(t.shift());return{modifiers:e,data:t}}const n={shouldNormalizeDom:!0,mainEventHandler:(t,n,o)=>("function"==typeof t?t(n):Array.isArray(t)&&(t=e(t).data)[0](t[1],n),!1)};class o{constructor(t,e){this.key=t,this.child=e}mount(t,e){this.parentEl=t,this.child.mount(t,e)}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;this.key===t.key?n.patch(o,e):(o.mount(this.parentEl,n.firstNode()),e&&n.beforeRemove(),n.remove(),this.child=o,this.key=t.key)}beforeRemove(){this.child.beforeRemove()}remove(){this.child.remove()}firstNode(){return this.child.firstNode()}toString(){return this.child.toString()}}function r(t,e){return new o(t,e)}class s extends Error{}const{setAttribute:i,removeAttribute:l}=Element.prototype,a=DOMTokenList.prototype,c=a.add,h=a.remove,u=Array.isArray,{split:d,trim:f}=String.prototype,p=/\s+/;function m(t,e){switch(e){case!1:case void 0:l.call(this,t);break;case!0:i.call(this,t,"");break;default:i.call(this,t,e)}}function g(t){return function(e){m.call(this,t,e)}}function b(t){if(u(t))"class"===t[0]?w.call(this,t[1]):m.call(this,t[0],t[1]);else for(let e in t)"class"===e?w.call(this,t[e]):m.call(this,e,t[e])}function y(t,e){if(u(t)){const n=t[0],o=t[1];if(n===e[0]){if(o===e[1])return;"class"===n?$.call(this,o,e[1]):m.call(this,n,o)}else l.call(this,e[0]),m.call(this,n,o)}else{for(let n in e)n in t||("class"===n?$.call(this,"",e[n]):l.call(this,n));for(let n in t){const o=t[n];o!==e[n]&&("class"===n?$.call(this,o,e[n]):m.call(this,n,o))}}}function v(t){const e={};switch(typeof t){case"string":const n=f.call(t);if(!n)return{};let o=d.call(n,p);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=f.call(n),!n)continue;const t=d.call(n,p);for(let n of t)e[n]=o}}return e;case"undefined":return{};case"number":return{[t]:!0};default:return{[t]:!0}}}function w(t){t=""===t?{}:v(t);const e=this.classList;for(let n in t)c.call(e,n)}function $(t,e){e=""===e?{}:v(e),t=""===t?{}:v(t);const n=this.classList;for(let o in e)o in t||h.call(n,o);for(let o in t)o in e||c.call(n,o)}function x(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)}class N extends EventTarget{trigger(t,e){this.dispatchEvent(new CustomEvent(t,{detail:e}))}}class k extends String{}function E(t){const e=t.split(".")[0],o=t.includes(".capture");return t.includes(".synthetic")?function(t,e=!1){let o=`__event__synthetic_${t}`;e&&(o=`${o}_capture`);!function(t,e,o=!1){if(_[e])return;document.addEventListener(t,(t=>function(t,e){let o=e.target;for(;null!==o;){const r=o[t];if(r)for(const t of Object.values(r)){if(n.mainEventHandler(t,e,o))return}o=o.parentNode}}(e,t)),{capture:o}),_[e]=!0}(t,o,e);const r=T++;function s(t){const e=this[o]||{};e[r]=t,this[o]=e}function i(){delete this[o]}return{setup:s,update:s,remove:i}}(e,o):function(t,e=!1){let o=`__event__${t}_${A++}`;e&&(o=`${o}_capture`);function r(t){const e=t.currentTarget;if(!e||!x(e))return;const r=e[o];r&&n.mainEventHandler(r,t,e)}function s(n){this[o]=n,this.addEventListener(t,r,{capture:e})}function i(){delete this[o],this.removeEventListener(t,r,{capture:e})}function l(t){this[o]=t}return{setup:s,update:l,remove:i}}(e,o)}let A=1;let T=1;const _={};const S=Node.prototype,C=S.insertBefore,O=(D=S,L="textContent",Object.getOwnPropertyDescriptor(D,L)).set;var D,L;const B=S.removeChild;class R{constructor(t){this.children=t}mount(t,e){const n=this.children,o=n.length,r=new Array(o);for(let s=0;s<o;s++){let o=n[s];if(o)o.mount(t,e);else{const n=document.createTextNode("");r[s]=n,C.call(t,n,e)}}this.anchors=r,this.parentEl=t}moveBeforeDOMNode(t,e=this.parentEl){this.parentEl=e;const n=this.children,o=this.anchors;for(let r=0,s=n.length;r<s;r++){let s=n[r];if(s)s.moveBeforeDOMNode(t,e);else{const n=o[r];C.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,r=this.anchors;for(let t=0,s=n.length;t<s;t++){let s=n[t];if(s)s.moveBeforeVNode(null,e);else{const n=r[t];C.call(o,n,e)}}}patch(t,e){if(this===t)return;const n=this.children,o=t.children,r=this.anchors,s=this.parentEl;for(let t=0,i=n.length;t<i;t++){const i=n[t],l=o[t];if(i)if(l)i.patch(l,e);else{const o=i.firstNode(),l=document.createTextNode("");r[t]=l,C.call(s,l,o),e&&i.beforeRemove(),i.remove(),n[t]=void 0}else if(l){n[t]=l;const e=r[t];l.mount(s,e),B.call(s,e)}}}beforeRemove(){const t=this.children;for(let e=0,n=t.length;e<n;e++){const n=t[e];n&&n.beforeRemove()}}remove(){const t=this.parentEl;if(this.isOnlyChild)O.call(t,"");else{const e=this.children,n=this.anchors;for(let o=0,r=e.length;o<r;o++){const r=e[o];r?r.remove():B.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 P(t){return new R(t)}const j=Node.prototype,M=CharacterData.prototype,I=j.insertBefore,W=((t,e)=>Object.getOwnPropertyDescriptor(t,e))(M,"data").set,F=j.removeChild;class V{constructor(t){this.text=t}mountNode(t,e,n){this.parentEl=e,I.call(e,t,n),this.el=t}moveBeforeDOMNode(t,e=this.parentEl){this.parentEl=e,I.call(e,this.el,t)}moveBeforeVNode(t,e){I.call(this.parentEl,this.el,t?t.el:e)}beforeRemove(){}remove(){F.call(this.parentEl,this.el)}firstNode(){return this.el}toString(){return this.text}}class K extends V{mount(t,e){this.mountNode(document.createTextNode(q(this.text)),t,e)}patch(t){const e=t.text;this.text!==e&&(W.call(this.el,q(e)),this.text=e)}}class z extends V{mount(t,e){this.mountNode(document.createComment(q(this.text)),t,e)}patch(){}}function H(t){return new K(t)}function U(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 G=(t,e)=>Object.getOwnPropertyDescriptor(t,e),X=Node.prototype,Y=Element.prototype,Z=G(CharacterData.prototype,"data").set,J=G(X,"firstChild").get,Q=G(X,"nextSibling").get,tt=()=>{};function et(t){return function(e){this[t]=0===e?0:e?e.valueOf():""}}const nt={};function ot(t){if(t in nt)return nt[t];const e=(new DOMParser).parseFromString(`<t>${t}</t>`,"text/xml").firstChild.firstChild;n.shouldNormalizeDom&&rt(e);const o=st(e),r=at(o),s=function(t,e){let n=function(t,e){const{refN:n,collectors:o,children:r}=e,s=o.length;e.locations.sort(((t,e)=>t.idx-e.idx));const i=e.locations.map((t=>({refIdx:t.refIdx,setData:t.setData,updateData:t.updateData}))),l=i.length,a=r.length,c=r,h=n>0,u=X.cloneNode,d=X.insertBefore,f=Y.remove;class p{constructor(t){this.data=t}beforeRemove(){}remove(){f.call(this.el)}firstNode(){return this.el}moveBeforeDOMNode(t,e=this.parentEl){this.parentEl=e,d.call(e,this.el,t)}moveBeforeVNode(t,e){d.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=u.call(t,!0);d.call(e,o,n),this.el=o,this.parentEl=e}patch(t,e){}}h&&(p.prototype.mount=function(e,r){const h=u.call(t,!0),f=new Array(n);this.refs=f,f[0]=h;for(let t=0;t<s;t++){const e=o[t];f[e.idx]=e.getVal.call(f[e.prevIdx])}if(l){const t=this.data;for(let e=0;e<l;e++){const n=i[e];n.setData.call(f[n.refIdx],t[e])}}if(d.call(e,h,r),a){const t=this.children;for(let e=0;e<a;e++){const n=t[e];if(n){const t=c[e],o=t.afterRefIdx?f[t.afterRefIdx]:null;n.isOnlyChild=t.isOnlyChild,n.mount(f[t.parentRefIdx],o)}}}this.el=h,this.parentEl=e},p.prototype.patch=function(t,e){if(this===t)return;const n=this.refs;if(l){const e=this.data,o=t.data;for(let t=0;t<l;t++){const r=e[t],s=o[t];if(r!==s){const e=i[t];e.updateData.call(n[e.refIdx],s,r)}}this.data=o}if(a){let o=this.children;const r=t.children;for(let t=0;t<a;t++){const s=o[t],i=r[t];if(s)i?s.patch(i,e):(e&&s.beforeRemove(),s.remove(),o[t]=void 0);else if(i){const e=c[t],r=e.afterRefIdx?n[e.afterRefIdx]:null;i.mount(n[e.parentRefIdx],r),o[t]=i}}}});return p}(t,e);if(e.cbRefs.length){const t=e.cbRefs,o=e.refList;let r=t.length;n=class extends n{mount(t,e){o.push(new Array(r)),super.mount(t,e);for(let t of o.pop())t()}remove(){super.remove();for(let e of t){(0,this.data[e])(null)}}}}if(e.children.length)return n=class extends n{constructor(t,e){super(t),this.children=e}},n.prototype.beforeRemove=R.prototype.beforeRemove,(t,e=[])=>new n(t,e);return t=>new n(t)}(o.el,r);return nt[t]=s,s}function rt(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)rt(t.childNodes.item(e))}else t.remove()}function st(t,e=null,n=null){switch(t.nodeType){case Node.ELEMENT_NODE:{let o=n&&n.currentNS;const r=t.tagName;let s;const i=[];if(r.startsWith("block-text-")){const t=parseInt(r.slice(11),10);i.push({type:"text",idx:t}),s=document.createTextNode("")}if(r.startsWith("block-child-")){n.isRef||it(n);const t=parseInt(r.slice(12),10);i.push({type:"child",idx:t}),s=document.createTextNode("")}if(o||(o=t.namespaceURI),s||(s=o?document.createElementNS(o,r):document.createElement(r)),s instanceof Element){if(!n){document.createElement("template").content.appendChild(s)}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);i.push({type:"handler",idx:t,event:o})}else if(n.startsWith("block-attribute-")){const t=parseInt(n.slice(16),10);i.push({type:"attribute",idx:t,name:o,tag:r})}else if(n.startsWith("block-property-")){const t=parseInt(n.slice(15),10);i.push({type:"property",idx:t,name:o,tag:r})}else"block-attributes"===n?i.push({type:"attributes",idx:parseInt(o,10)}):"block-ref"===n?i.push({type:"ref",idx:parseInt(o,10)}):s.setAttribute(e[t].name,o)}}const l={parent:e,firstChild:null,nextSibling:null,el:s,info:i,refN:0,currentNS:o};if(t.firstChild){const e=t.childNodes[0];if(1===t.childNodes.length&&e.nodeType===Node.ELEMENT_NODE&&e.tagName.startsWith("block-child-")){const t=e.tagName,n=parseInt(t.slice(12),10);i.push({idx:n,type:"child",isOnlyChild:!0})}else{l.firstChild=st(t.firstChild,l,l),s.appendChild(l.firstChild.el);let e=t.firstChild,n=l.firstChild;for(;e=e.nextSibling;)n.nextSibling=st(e,n,l),s.appendChild(n.nextSibling.el),n=n.nextSibling}}return l.info.length&&it(l),l}case Node.TEXT_NODE:case Node.COMMENT_NODE:return{parent:e,firstChild:null,nextSibling:null,el:t.nodeType===Node.TEXT_NODE?document.createTextNode(t.textContent):document.createComment(t.textContent),info:[],refN:0,currentNS:null}}throw new s("boom")}function it(t){t.isRef=!0;do{t.refN++}while(t=t.parent)}function lt(t){let e=t.parent;for(;e&&e.nextSibling===t;)t=e,e=e.parent;return e}function at(t,e,n){if(!e){e={collectors:[],locations:[],children:new Array(t.info.filter((t=>"child"===t.type)).length),cbRefs:[],refN:t.refN,refList:[]},n=0}if(t.refN){const o=n,r=t.isRef,s=t.firstChild?t.firstChild.refN:0,i=t.nextSibling?t.nextSibling.refN:0;if(r){for(let e of t.info)e.refIdx=o;t.refIdx=o,function(t,e){for(let n of e.info)switch(n.type){case"text":t.locations.push({idx:n.idx,refIdx:n.refIdx,setData:ct,updateData:ct});break;case"child":n.isOnlyChild?t.children[n.idx]={parentRefIdx:n.refIdx,isOnlyChild:!0}:t.children[n.idx]={parentRefIdx:lt(e).refIdx,afterRefIdx:n.refIdx};break;case"property":{const e=n.refIdx,o=et(n.name);t.locations.push({idx:n.idx,refIdx:e,setData:o,updateData:o});break}case"attribute":{const e=n.refIdx;let o,r;"class"===n.name?(r=w,o=$):(r=g(n.name),o=r),t.locations.push({idx:n.idx,refIdx:e,setData:r,updateData:o});break}case"attributes":t.locations.push({idx:n.idx,refIdx:n.refIdx,setData:b,updateData:y});break;case"handler":{const{setup:e,update:o}=E(n.event);t.locations.push({idx:n.idx,refIdx:n.refIdx,setData:e,updateData:o});break}case"ref":const o=t.cbRefs.push(n.idx)-1;t.locations.push({idx:n.idx,refIdx:n.refIdx,setData:ht(o,t.refList),updateData:tt})}}(e,t),n++}if(i){const r=n+s;e.collectors.push({idx:r,prevIdx:o,getVal:Q}),at(t.nextSibling,e,r)}s&&(e.collectors.push({idx:n,prevIdx:o,getVal:J}),at(t.firstChild,e,n))}return e}function ct(t){Z.call(this,q(t))}function ht(t,e){return function(n){e[e.length-1][t]=()=>n(this)}}const ut=Node.prototype,dt=ut.insertBefore,ft=ut.appendChild,pt=ut.removeChild,mt=((t,e)=>Object.getOwnPropertyDescriptor(t,e))(ut,"textContent").set;class gt{constructor(t){this.children=t}mount(t,e){const n=this.children,o=document.createTextNode("");this.anchor=o,dt.call(t,o,e);const r=n.length;if(r){const e=n[0].mount;for(let s=0;s<r;s++)e.call(n[s],t,o)}this.parentEl=t}moveBeforeDOMNode(t,e=this.parentEl){this.parentEl=e;const n=this.children;for(let o=0,r=n.length;o<r;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 r=o[0]||n[0],{mount:s,patch:i,remove:l,beforeRemove:a,moveBeforeVNode:c,firstNode:h}=r,u=this.anchor,d=this.isOnlyChild,f=this.parentEl;if(0===o.length&&d){if(e)for(let t=0,e=n.length;t<e;t++)a.call(n[t]);return mt.call(f,""),void ft.call(f,u)}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,r=y.key;if(t===r){i.call(b,y,e),o[g]=b,b=n[++m],y=o[++g];continue}let l=$.key,a=x.key;if(l===a){i.call($,x,e),o[w]=$,$=n[--v],x=o[--w];continue}if(t===a){i.call(b,x,e),o[w]=b;const t=o[w+1];c.call(b,t,u),b=n[++m],x=o[--w];continue}if(l===r){i.call($,y,e),o[g]=$;const t=n[m];c.call($,t,u),$=n[--v],y=o[++g];continue}p=p||yt(n,m,v);let d=p[r];if(void 0===d)s.call(y,f,h.call(b)||null);else{const t=n[d];c.call(t,b,null),i.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?h.call(t)||null:u;for(let t=g;t<=w;t++)s.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)mt.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])}pt.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 bt(t){return new gt(t)}function yt(t,e,n){let o={};for(let r=e;r<=n;r++)o[t[r].key]=r;return o}const vt=Node.prototype,wt=vt.insertBefore,$t=vt.removeChild;class xt{constructor(t){this.content=[],this.html=t}mount(t,e){this.parentEl=t;const n=document.createElement("template");n.innerHTML=this.html,this.content=[...n.content.childNodes];for(let n of this.content)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],r=document.createElement("template");r.innerHTML=e;const s=[...r.content.childNodes];for(let t of s)wt.call(n,t,o);if(!s.length){const t=document.createTextNode("");s.push(t),wt.call(n,t,o)}this.remove(),this.content=s,this.html=t.html}}beforeRemove(){}remove(){const t=this.parentEl;for(let e of this.content)$t.call(t,e)}firstNode(){return this.content[0]}toString(){return this.html}}function Nt(t){return new xt(t)}function kt(t,e,n=null){t.mount(e,n)}const Et=new WeakMap,At=new WeakMap;function Tt(t,e){if(!t)return!1;const n=t.fiber;n&&Et.set(n,e);const o=At.get(t);if(o){let t=!1;for(let n=o.length-1;n>=0;n--)try{o[n](e),t=!0;break}catch(t){e=t}if(t)return!0}return Tt(t.parent,e)}function _t(t){let{error:e}=t;e instanceof s||(e=Object.assign(new s('An error occured in the owl lifecycle (see this Error\'s "cause" property)'),{cause:e}));const n="node"in t?t.node:t.fiber.node,o="fiber"in t?t.fiber:n.fiber;if(o){let t=o;do{t.node.fiber=t,t=t.parent}while(t);Et.set(o.root,e)}if(!Tt(n,e)){console.warn("[Owl] Unhandled error. Destroying the root component");try{n.app.destroy()}catch(t){console.error(t)}throw e}}function St(){throw new s("Attempted to render cancelled fiber")}function Ct(t){let e=0;for(let n of t){let t=n.node;n.render=St,0===t.status&&t.cancel(),t.fiber=null,n.bdom?t.forceNextRender=!0:e++,e+=Ct(n.children)}return e}class Ot{constructor(t,e){if(this.bdom=null,this.children=[],this.appliedToDom=!1,this.deep=!1,this.childrenMap={},this.node=t,this.parent=e,e){this.deep=e.deep;const t=e.root;t.setCounter(t.counter+1),this.root=t,e.children.push(this)}else this.root=this}render(){let t=this.root.node,e=t.app.scheduler,n=t.parent;for(;n;){if(n.fiber){let o=n.fiber.root;if(0!==o.counter||!(t.parentKey in n.fiber.childrenMap))return void e.delayedRenders.push(this);n=o.node}t=n,n=n.parent}this._render()}_render(){const t=this.node,e=this.root;if(e){try{this.bdom=!0,this.bdom=t.renderFn()}catch(e){t.app.handleError({node:t,error:e})}e.setCounter(e.counter-1)}}}class Dt extends Ot{constructor(){super(...arguments),this.counter=1,this.willPatch=[],this.patched=[],this.mounted=[],this.locked=!1}complete(){const t=this.node;let e;this.locked=!0;try{for(e of this.willPatch){let t=e.node;if(t.fiber===e){const e=t.component;for(let n of t.willPatch)n.call(e)}}e=void 0,t._patch(),this.locked=!1;let n=this.mounted;for(;e=n.pop();)if(e.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(n){this.locked=!1,t.app.handleError({fiber:e||this,error:n})}}setCounter(t){this.counter=t,0===t&&this.node.app.scheduler.flush()}}class Lt extends Dt{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)kt(e.bdom,this.target);else{const t=this.target.childNodes[0];kt(e.bdom,this.target,t)}e.fiber=null,e.status=1,this.appliedToDom=!0;let n=this.mounted;for(;t=n.pop();)if(t.appliedToDom)for(let e of t.node.mounted)e()}catch(e){this.node.app.handleError({fiber:t,error:e})}}}const Bt=Symbol("Key changes"),Rt=()=>{throw new Error("Called NO_CALLBACK. Owl is broken, please report this to the maintainers.")},Pt=Object.prototype.toString,jt=Object.prototype.hasOwnProperty,Mt=new Set(["Object","Array","Set","Map","WeakMap"]),It=new Set(["Set","Map","WeakMap"]);function Wt(t){return Pt.call(Ht(t)).slice(8,-1)}function Ft(t){return"object"==typeof t&&Mt.has(Wt(t))}function Vt(t,e){return Ft(t)?Qt(t,e):t}const Kt=new WeakSet;function zt(t){return Kt.add(t),t}function Ht(t){return Zt.has(t)?Zt.get(t):t}const Ut=new WeakMap;function qt(t,e,n){if(n===Rt)return;Ut.get(t)||Ut.set(t,new Map);const o=Ut.get(t);o.get(e)||o.set(e,new Set),o.get(e).add(n),Xt.has(n)||Xt.set(n,new Set),Xt.get(n).add(t)}function Gt(t,e){const n=Ut.get(t);if(!n)return;const o=n.get(e);if(o)for(const t of[...o])Yt(t),t()}const Xt=new WeakMap;function Yt(t){const e=Xt.get(t);if(e){for(const n of e){const e=Ut.get(n);if(e)for(const[n,o]of e.entries())o.delete(t),o.size||e.delete(n)}e.clear()}}const Zt=new WeakMap,Jt=new WeakMap;function Qt(t,e=Rt){if(!Ft(t))throw new s("Cannot make the given value reactive");if(Kt.has(t))return t;if(Zt.has(t))return Qt(Zt.get(t),e);Jt.has(t)||Jt.set(t,new WeakMap);const n=Jt.get(t);if(!n.has(e)){const o=Wt(t),r=It.has(o)?function(t,e,n){const o=ie[n](t,e);return Object.assign(te(e),{get:(t,n)=>jt.call(o,n)?o[n]:(qt(t,n,e),Vt(t[n],e))})}(t,e,o):te(e),s=new Proxy(t,r);n.set(e,s),Zt.set(s,t)}return n.get(e)}function te(t){return{get(e,n,o){const r=Object.getOwnPropertyDescriptor(e,n);return!r||r.writable||r.configurable?(qt(e,n,t),Vt(Reflect.get(e,n,o),t)):Reflect.get(e,n,o)},set(t,e,n,o){const r=jt.call(t,e),s=Reflect.get(t,e,o),i=Reflect.set(t,e,Ht(n),o);return!r&&jt.call(t,e)&&Gt(t,Bt),(s!==Reflect.get(t,e,o)||"length"===e&&Array.isArray(t))&&Gt(t,e),i},deleteProperty(t,e){const n=Reflect.deleteProperty(t,e);return Gt(t,Bt),Gt(t,e),n},ownKeys:e=>(qt(e,Bt,t),Reflect.ownKeys(e)),has:(e,n)=>(qt(e,Bt,t),Reflect.has(e,n))}}function ee(t,e,n){return o=>(o=Ht(o),qt(e,o,n),Vt(e[t](o),n))}function ne(t,e,n){return function*(){qt(e,Bt,n);const o=e.keys();for(const r of e[t]()){const t=o.next().value;qt(e,t,n),yield Vt(r,n)}}}function oe(t,e){return function(n,o){qt(t,Bt,e),t.forEach((function(r,s,i){qt(t,s,e),n.call(o,Vt(r,e),Vt(s,e),Vt(i,e))}),o)}}function re(t,e,n){return(o,r)=>{o=Ht(o);const s=n.has(o),i=n[e](o),l=n[t](o,r);return s!==n.has(o)&&Gt(n,Bt),i!==n[e](o)&&Gt(n,o),l}}function se(t){return()=>{const e=[...t.keys()];t.clear(),Gt(t,Bt);for(const n of e)Gt(t,n)}}const ie={Set:(t,e)=>({has:ee("has",t,e),add:re("add","has",t),delete:re("delete","has",t),keys:ne("keys",t,e),values:ne("values",t,e),entries:ne("entries",t,e),[Symbol.iterator]:ne(Symbol.iterator,t,e),forEach:oe(t,e),clear:se(t),get size(){return qt(t,Bt,e),t.size}}),Map:(t,e)=>({has:ee("has",t,e),get:ee("get",t,e),set:re("set","get",t),delete:re("delete","has",t),keys:ne("keys",t,e),values:ne("values",t,e),entries:ne("entries",t,e),[Symbol.iterator]:ne(Symbol.iterator,t,e),forEach:oe(t,e),clear:se(t),get size(){return qt(t,Bt,e),t.size}}),WeakMap:(t,e)=>({has:ee("has",t,e),get:ee("get",t,e),set:re("set","get",t),delete:re("delete","has",t)})};let le=null;function ae(){if(!le)throw new s("No active component (a hook function should only be called in 'setup')");return le}function ce(t,e){for(let n in e)void 0===t[n]&&(t[n]=e[n])}const he=new WeakMap;function ue(t){const e=ae();let n=he.get(e);return n||(n=function(t){let e=!1;return async(...n)=>{e||(e=!0,await Promise.resolve(),e=!1,t(...n))}}(e.render.bind(e,!1)),he.set(e,n),e.willDestroy.push(Yt.bind(null,n))),Qt(t,n)}class de{constructor(t,e,n,o,r){this.fiber=null,this.bdom=null,this.status=0,this.forceNextRender=!1,this.nextProps=null,this.children=Object.create(null),this.refs={},this.willStart=[],this.willUpdateProps=[],this.willUnmount=[],this.mounted=[],this.willPatch=[],this.patched=[],this.willDestroy=[],le=this,this.app=n,this.parent=o,this.props=e,this.parentKey=r;const s=t.defaultProps;e=Object.assign({},e),s&&ce(e,s);const i=o&&o.childEnv||n.env;this.childEnv=i;for(const t in e){const n=e[t];n&&"object"==typeof n&&Zt.has(n)&&(e[t]=ue(n))}this.component=new t(e,i,this);const l=Object.assign(Object.create(this.component),{this:this.component});this.renderFn=n.getTemplate(t.template).bind(this.component,l,this),this.component.setup(),le=null}mountComponent(t,e){const n=new Lt(this,t,e);this.app.scheduler.addFiber(n),this.initiateRender(n)}async initiateRender(t){this.fiber=t,this.mounted.length&&t.root.mounted.push(t);const e=this.component;try{await Promise.all(this.willStart.map((t=>t.call(e))))}catch(t){return void this.app.handleError({node:this,error:t})}0===this.status&&this.fiber===t&&t.render()}async render(t){if(this.status>=2)return;let e=this.fiber;if(e&&(e.root.locked||!0===e.bdom)&&(await Promise.resolve(),e=this.fiber),e){if(!e.bdom&&!Et.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-Ct(e.children)),t.locked=!1,e.children=[],e.childrenMap={},e.bdom=null,Et.has(e)&&(Et.delete(e),Et.delete(t),e.appliedToDom=!1),e}const n=new Dt(t,null);return t.willPatch.length&&n.willPatch.push(n),t.patched.length&&n.patched.push(n),n}(this);n.deep=t,this.fiber=n,this.app.scheduler.addFiber(n),await Promise.resolve(),this.status>=2||this.fiber!==n||!e&&n.parent||n.render()}cancel(){this._cancel(),delete this.parent.children[this.parentKey],this.app.scheduler.scheduleDestroy(this)}_cancel(){this.status=2;const t=this.children;for(let e in t)t[e]._cancel()}destroy(){let t=1===this.status;this._destroy(),t&&this.bdom.remove()}_destroy(){const t=this.component;if(1===this.status)for(let e of this.willUnmount)e.call(t);for(let t of Object.values(this.children))t._destroy();if(this.willDestroy.length)try{for(let e of this.willDestroy)e.call(t)}catch(t){this.app.handleError({error:t,node:this})}this.status=3}async updateAndRender(t,e){this.nextProps=t,t=Object.assign({},t);const n=function(t,e){let n=t.fiber;return n&&(Ct(n.children),n.root=null),new Ot(t,e)}(this,e);this.fiber=n;const o=this.component,r=o.constructor.defaultProps;r&&ce(t,r),le=this;for(const e in t){const n=t[e];n&&"object"==typeof n&&Zt.has(n)&&(t[e]=ue(n))}le=null;const s=Promise.all(this.willUpdateProps.map((e=>e.call(o,t))));if(await s,n!==this.fiber)return;o.props=t,n.render();const i=e.root;this.willPatch.length&&i.willPatch.push(n),this.patched.length&&i.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}setRef(t,e){e&&(this.refs[t]=e)}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(),this.props=this.nextProps)}_patch(){let t=!1;for(let e in this.children){t=!0;break}const e=this.fiber;this.children=e.childrenMap,this.bdom.patch(e.bdom,t),e.appliedToDom=!0,this.fiber=null}beforeRemove(){this._destroy()}remove(){this.bdom.remove()}get name(){return this.component.constructor.name}get subscriptions(){const t=he.get(this);return t?(e=t,[...Xt.get(e)||[]].map((t=>{const n=Ut.get(t);let o=[];if(n)for(const[t,r]of n)r.has(e)&&o.push(t);return{target:t,keys:o}}))):[];var e}}const fe=Symbol("timeout");function pe(t,e){const n=new s(`The following error occurred in ${e}: `),o=new s(`${e}'s promise hasn't resolved after 3 seconds`),r=ae();return(...s)=>{const i=t=>{throw n.cause=t,t instanceof Error?n.message+=`"${t.message}"`:n.message=`Something that is not an Error was thrown in ${e} (see this Error's "cause" property)`,n};try{const n=t(...s);if(n instanceof Promise){if("onWillStart"===e||"onWillUpdateProps"===e){const t=r.fiber;Promise.race([n.catch((()=>{})),new Promise((t=>setTimeout((()=>t(fe)),3e3)))]).then((e=>{e===fe&&r.fiber===t&&console.warn(o)}))}return n.catch(i)}return n}catch(t){i(t)}}}function me(t){const e=ae(),n=e.app.dev?pe:t=>t;e.mounted.push(n(t.bind(e.component),"onMounted"))}function ge(t){const e=ae(),n=e.app.dev?pe:t=>t;e.patched.push(n(t.bind(e.component),"onPatched"))}function be(t){const e=ae(),n=e.app.dev?pe:t=>t;e.willUnmount.unshift(n(t.bind(e.component),"onWillUnmount"))}class ye{constructor(t,e,n){this.props=t,this.env=e,this.__owl__=n}setup(){}render(t=!1){this.__owl__.render(!0===t)}}ye.template="";const ve=H("").constructor;class we extends ve{constructor(t,e){super(""),this.target=null,this.selector=t,this.content=e}mount(t,e){super.mount(t,e),this.target=document.querySelector(this.selector),this.target?this.content.mount(this.target,null):this.content.mount(t,e)}beforeRemove(){this.content.beforeRemove()}remove(){this.content&&(super.remove(),this.content.remove(),this.content=null)}patch(t){super.patch(t),this.content?this.content.patch(t.content,!0):(this.content=t.content,this.content.mount(this.target,null))}}class $e extends ye{setup(){const t=this.__owl__;me((()=>{const e=t.bdom;if(!e.target){const t=document.querySelector(this.props.target);if(!t)throw new s("invalid portal target");e.content.moveBeforeDOMNode(t.firstChild,t)}})),be((()=>{t.bdom.remove()}))}}$e.template="__portal__",$e.props={target:{type:String},slots:!0};const xe=t=>Array.isArray(t),Ne=t=>"object"!=typeof t,ke=t=>"object"==typeof t&&t&&"value"in t;function Ee(t){return"object"==typeof t&&"optional"in t&&t.optional||!1}function Ae(t){return"*"===t||!0===t?"value":t.name.toLowerCase()}function Te(t){return Ne(t)?Ae(t):xe(t)?t.map(Te).join(" or "):ke(t)?String(t.value):"element"in t?`list of ${Te({type:t.element,optional:!1})}s`:"shape"in t?"object":Te(t.type||"*")}function _e(t,e){var n;Array.isArray(e)&&(n=e,e=Object.fromEntries(n.map((t=>t.endsWith("?")?[t.slice(0,-1),{optional:!0}]:[t,{type:"*",optional:!1}])))),t=Ht(t);let o=[];for(let n in t)if(n in e){let r=Se(n,t[n],e[n]);r&&o.push(r)}else"*"in e||o.push(`unknown key '${n}'`);for(let n in e){const r=e[n];if("*"!==n&&!Ee(r)&&!(n in t)){const t="object"==typeof r&&!Array.isArray(r);let e="*"===r||(t&&"type"in r?"*"===r.type:t)?"":` (should be a ${Te(r)})`;o.push(`'${n}' is missing${e}`)}}return o}function Se(t,e,n){if(void 0===e)return Ee(n)?null:`'${t}' is undefined (should be a ${Te(n)})`;if(Ne(n))return function(t,e,n){if("function"==typeof n)if("object"==typeof e){if(!(e instanceof n))return`'${t}' is not a ${Ae(n)}`}else if(typeof e!==n.name.toLowerCase())return`'${t}' is not a ${Ae(n)}`;return null}(t,e,n);if(ke(n))return e===n.value?null:`'${t}' is not equal to '${n.value}'`;if(xe(n)){let o=n.find((n=>!Se(t,e,n)));return o?null:`'${t}' is not a ${Te(n)}`}let o=null;if("element"in n)o=function(t,e,n){if(!Array.isArray(e))return`'${t}' is not a list of ${Te(n)}s`;for(let o=0;o<e.length;o++){const r=Se(`${t}[${o}]`,e[o],n);if(r)return r}return null}(t,e,n.element);else if("shape"in n)if("object"!=typeof e||Array.isArray(e))o=`'${t}' is not an object`;else{const r=_e(e,n.shape);r.length&&(o=`'${t}' doesn't have the correct shape (${r.join(", ")})`)}else if("values"in n)if("object"!=typeof e||Array.isArray(e))o=`'${t}' is not an object`;else{const r=Object.entries(e).map((([t,e])=>Se(t,e,n.values))).filter(Boolean);r.length&&(o=`some of the values in '${t}' are invalid (${r.join(", ")})`)}return"type"in n&&!o&&(o=Se(t,e,n.type)),"validate"in n&&!o&&(o=n.validate(e)?null:`'${t}' is not valid`),o}const Ce=Object.create;function Oe(t){const e=Ce(t);for(let n in t)e[n]=t[n];return e}const De=Symbol("isBoundary");class Le{constructor(t,e,n,o,r){this.fn=t,this.ctx=Oe(e),this.component=n,this.node=o,this.key=r}evaluate(){return this.fn.call(this.component,this.ctx,this.node,this.key)}toString(){return this.evaluate().toString()}}function Be(t,e,n){const o="string"!=typeof t?t:n.constructor.components[t];if(!o)return;const r=o.props;if(!r)return void(n.__owl__.app.warnIfNoStaticProps&&console.warn(`Component '${o.name}' does not have a static props description`));const i=o.defaultProps;if(i){let t=t=>Array.isArray(r)?r.includes(t):t in r&&!("*"in r)&&!Ee(r[t]);for(let e in i)if(t(e))throw new s(`A default value cannot be defined for a mandatory prop (name: '${e}', component: ${o.name})`)}const l=_e(e,r);if(l.length)throw new s(`Invalid props for component '${o.name}': `+l.join(", "))}const Re={withDefault:function(t,e){return null==t||!1===t?e:t},zero:Symbol("zero"),isBoundary:De,callSlot:function(t,e,n,o,s,i,l){n=n+"__slot_"+o;const a=t.props.slots||{},{__render:c,__ctx:h,__scope:u}=a[o]||{},d=Ce(h||{});u&&(d[u]=i);const f=c?c(d,e,n):null;if(l){let i,a;return f?i=s?r(o,f):f:a=l(t,e,n),P([i,a])}return f||H("")},capture:Oe,withKey:function(t,e){return t.key=e,t},prepareList:function(t){let e,n;if(Array.isArray(t))e=t,n=t;else if(t instanceof Map)e=[...t.keys()],n=[...t.values()];else if(Symbol.iterator in Object(t))e=[...t],n=e;else{if(!t||"object"!=typeof t)throw new s(`Invalid loop expression: "${t}" is not iterable`);n=Object.values(t),e=Object.keys(t)}const o=n.length;return[e,n,o,new Array(o)]},setContextValue:function(t,e,n){const o=t;for(;!t.hasOwnProperty(e)&&!t.hasOwnProperty(De);){const e=t.__proto__;if(!e){t=o;break}t=e}t[e]=n},shallowEqual:function(t,e){for(let n=0,o=t.length;n<o;n++)if(t[n]!==e[n])return!1;return!0},toNumber:function(t){const e=parseFloat(t);return isNaN(e)?t:e},validateProps:Be,LazyValue:Le,safeOutput:function(t,e){if(null==t)return e?r("default",e):r("undefined",H(""));let n,o;switch(typeof t){case"object":t instanceof k?(n="string_safe",o=Nt(t)):t instanceof Le?(n="lazy_value",o=t.evaluate()):t instanceof String?(n="string_unsafe",o=H(t)):(n="block_safe",o=t);break;case"string":n="string_unsafe",o=H(t);break;default:n="string_unsafe",o=H(String(t))}return r(n,o)},createCatcher:function(t){const e=Object.keys(t).length;class n{constructor(t,e){this.handlerFns=[],this.afterNode=null,this.child=t,this.handlerData=e}mount(e,n){this.parentEl=e,this.child.mount(e,n),this.afterNode=document.createTextNode(""),e.insertBefore(this.afterNode,n),this.wrapHandlerData();for(let n in t){const o=t[n],r=E(n);this.handlerFns[o]=r,r.setup.call(e,this.handlerData[o])}}wrapHandlerData(){for(let t=0;t<e;t++){let e=this.handlerData[t],n=e.length-2,o=e[n];const r=this;e[n]=function(t){const e=t.target;let n=r.child.firstNode();const s=r.afterNode;for(;n&&n!==s;){if(n.contains(e))return o.call(this,t);n=n.nextSibling}}}}moveBeforeDOMNode(t,e=this.parentEl){this.parentEl=e,this.child.moveBeforeDOMNode(t,e),e.insertBefore(this.afterNode,t)}moveBeforeVNode(t,e){t&&(e=t.firstNode()||e),this.child.moveBeforeVNode(t?t.child:null,e),this.parentEl.insertBefore(this.afterNode,e)}patch(t,n){if(this!==t){this.handlerData=t.handlerData,this.wrapHandlerData();for(let t=0;t<e;t++)this.handlerFns[t].update.call(this.parentEl,this.handlerData[t]);this.child.patch(t.child,n)}}beforeRemove(){this.child.beforeRemove()}remove(){for(let t=0;t<e;t++)this.handlerFns[t].remove.call(this.parentEl);this.child.remove(),this.afterNode.remove()}firstNode(){return this.child.firstNode()}toString(){return this.child.toString()}}return function(t,e){return new n(t,e)}},markRaw:zt,OwlError:s,makeRefWrapper:function(t){let e=new Set;return(n,o)=>{if(e.has(n))throw new s(`Cannot set the same ref more than once in the same component, ref "${n}" was set multiple times in ${t.name}`);return e.add(n),o}}},Pe={text:H,createBlock:ot,list:bt,multi:P,html:Nt,toggler:r,comment:U};class je{constructor(t={}){if(this.rawTemplates=Object.create(Me),this.templates={},this.Portal=$e,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])}static registerTemplate(t,e){Me[t]=e}addTemplate(t,e){if(t in this.rawTemplates){if(!this.dev)return;const n=this.rawTemplates[t];if(("string"==typeof n?n:n instanceof Element?n.outerHTML:n.toString())===("string"==typeof e?e:e.outerHTML))return;throw new s(`Template ${t} already defined with different content`)}this.rawTemplates[t]=e}addTemplates(t){if(t){t=t instanceof Document?t:function(t){const e=(new DOMParser).parseFromString(t,"text/xml");if(e.getElementsByTagName("parsererror").length){let n="Invalid XML in template.";const o=e.getElementsByTagName("parsererror")[0].textContent;if(o){n+="\nThe parser has produced the following error message:\n"+o;const e=/\d+/g,r=e.exec(o);if(r){const s=Number(r[0]),i=t.split("\n")[s-1],l=e.exec(o);if(i&&l){const t=Number(l[0])-1;i[t]&&(n+=`\nThe error might be located at xml line ${s} column ${t}\n${i}\n${"-".repeat(t-1)}^`)}}}throw new s(n)}return e}(t);for(const e of t.querySelectorAll("[t-name]")){const t=e.getAttribute("t-name");this.addTemplate(t,e)}}}getTemplate(t){if(!(t in this.templates)){const e=this.rawTemplates[t];if(void 0===e){let e="";try{e=` (for component "${ae().component.constructor.name}")`}catch{}throw new s(`Missing template: "${t}"${e}`)}const n="function"==typeof e&&!(e instanceof Element)?e:this._compileTemplate(t,e),o=this.templates;this.templates[t]=function(e,n){return o[t].call(this,e,n)};const r=n(this,Pe,Re);this.templates[t]=r}return this.templates[t]}_compileTemplate(t,e){throw new s("Unable to compile a template. Please use owl full build instead")}callTemplate(t,e,n,o,s){return r(e,this.getTemplate(e).call(t,n,o,s+e))}}const Me={};function Ie(...t){const e="__template__"+Ie.nextId++,n=String.raw(...t);return Me[e]=n,e}Ie.nextId=1,je.registerTemplate("__portal__",(function(t,e,n){let{callSlot:o}=n;return function(t,e,n=""){return new we(t.props.target,o(t,e,n,"default",!1,null))}}));const We="true,false,NaN,null,undefined,debugger,console,window,in,instanceof,new,function,return,eval,void,Math,RegExp,Array,Object,Date".split(","),Fe=Object.assign(Object.create(null),{and:"&&",or:"||",gt:">",gte:">=",lt:"<",lte:"<="}),Ve=Object.assign(Object.create(null),{"{":"LEFT_BRACE","}":"RIGHT_BRACE","[":"LEFT_BRACKET","]":"RIGHT_BRACKET",":":"COLON",",":"COMMA","(":"LEFT_PAREN",")":"RIGHT_PAREN"}),Ke="...,.,===,==,+,!==,!=,!,||,&&,>=,>,<=,<,?,-,*,/,%,typeof ,=>,=,;,in ,new ,|,&,^,~".split(",");const ze=[function(t){let e=t[0],n=e;if("'"!==e&&'"'!==e&&"`"!==e)return!1;let o,r=1;for(;t[r]&&t[r]!==n;){if(o=t[r],e+=o,"\\"===o){if(r++,o=t[r],!o)throw new s("Invalid expression");e+=o}r++}if(t[r]!==n)throw new s("Invalid expression");return e+=n,"`"===n?{type:"TEMPLATE_STRING",value:e,replace:t=>e.replace(/\$\{(.*?)\}/g,((e,n)=>"${"+t(n)+"}"))}:{type:"VALUE",value:e}},function(t){let e=t[0];if(e&&e.match(/[0-9]/)){let n=1;for(;t[n]&&t[n].match(/[0-9]|\./);)e+=t[n],n++;return{type:"VALUE",value:e}}return!1},function(t){for(let e of Ke)if(t.startsWith(e))return{type:"OPERATOR",value:e};return!1},function(t){let e=t[0];if(e&&e.match(/[a-zA-Z_\$]/)){let n=1;for(;t[n]&&t[n].match(/\w/);)e+=t[n],n++;return e in Fe?{type:"OPERATOR",value:Fe[e],size:e.length}:{type:"SYMBOL",value:e}}return!1},function(t){const e=t[0];return!(!e||!(e in Ve))&&{type:Ve[e],value:e}}];const He=t=>t&&("LEFT_BRACE"===t.type||"COMMA"===t.type),Ue=t=>t&&("RIGHT_BRACE"===t.type||"COMMA"===t.type);function qe(t){const e=new Set,n=function(t){const e=[];let n,o=!0,r=t;try{for(;o;)if(r=r.trim(),r){for(let t of ze)if(o=t(r),o){e.push(o),r=r.slice(o.size||o.value.length);break}}else o=!1}catch(t){n=t}if(r.length||n)throw new s(`Tokenizer error: could not tokenize \`${t}\``);return e}(t);let o=0,r=[];for(;o<n.length;){let t=n[o],s=n[o-1],i=n[o+1],l=r[r.length-1];switch(t.type){case"LEFT_BRACE":case"LEFT_BRACKET":r.push(t.type);break;case"RIGHT_BRACE":case"RIGHT_BRACKET":r.pop()}let a="SYMBOL"===t.type&&!We.includes(t.value);if("SYMBOL"!==t.type||We.includes(t.value)||s&&("LEFT_BRACE"===l&&He(s)&&Ue(i)&&(n.splice(o+1,0,{type:"COLON",value:":"},{...t}),i=n[o+1]),"OPERATOR"===s.type&&"."===s.value?a=!1:"LEFT_BRACE"!==s.type&&"COMMA"!==s.type||i&&"COLON"===i.type&&(a=!1)),"TEMPLATE_STRING"===t.type&&(t.value=t.replace((t=>Xe(t)))),i&&"OPERATOR"===i.type&&"=>"===i.value)if("RIGHT_PAREN"===t.type){let t=o-1;for(;t>0&&"LEFT_PAREN"!==n[t].type;)"SYMBOL"===n[t].type&&n[t].originalValue&&(n[t].value=n[t].originalValue,e.add(n[t].value)),t--}else e.add(t.value);a&&(t.varName=t.value,e.has(t.value)||(t.originalValue=t.value,t.value=`ctx['${t.value}']`)),o++}for(const t of n)"SYMBOL"===t.type&&t.varName&&e.has(t.value)&&(t.originalValue=t.value,t.value=`_${t.value}`,t.isLocal=!0);return n}const Ge=new Map([["in "," in "]]);function Xe(t){return qe(t).map((t=>Ge.get(t.value)||t.value)).join("")}const Ye=/\{\{.*?\}\}|\#\{.*?\}/g;function Ze(t,e){let n=t.match(Ye);if(n&&n[0].length===t.length)return`(${e(t.slice(2,"{"===n[0][0]?-2:-1))})`;let o=t.replace(Ye,(t=>"${"+e(t.slice(2,"{"===t[0]?-2:-1))+"}"));return"`"+o+"`"}function Je(t){return Ze(t,Xe)}const Qe=/\s+/g,tn=document.implementation.createDocument(null,null,null),en=new Set(["stop","capture","prevent","self","synthetic"]);let nn={};function on(t=""){return nn[t]=(nn[t]||0)+1,t+nn[t]}function rn(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}class sn{constructor(t,e){this.dynamicTagName=null,this.isRoot=!1,this.hasDynamicChildren=!1,this.children=[],this.data=[],this.childNumber=0,this.parentVar="",this.id=sn.nextBlockId++,this.varName="b"+this.id,this.blockName="block"+this.id,this.target=t,this.type=e}insertData(t,e="d"){const n=on(e);return this.target.addLine(`let ${n} = ${t};`),this.data.push(n)-1}insert(t){this.currentDom?this.currentDom.appendChild(t):this.dom=t}generateExpr(t){if("block"===this.type){const t=this.children.length;let e=this.data.length?`[${this.data.join(", ")}]`:t?"[]":"";return t&&(e+=", ["+this.children.map((t=>t.varName)).join(", ")+"]"),this.dynamicTagName?`toggler(${this.dynamicTagName}, ${this.blockName}(${this.dynamicTagName})(${e}))`:`${this.blockName}(${e})`}return"list"===this.type?`list(c_block${this.id})`:t}asXmlString(){const t=tn.createElement("t");return t.appendChild(this.dom),t.innerHTML}}function ln(t,e){return Object.assign({block:null,index:0,forceNewBlock:!0,translate:t.translate,tKeyExpr:null,nameSpace:t.nameSpace,tModelSelectedExpr:t.tModelSelectedExpr},e)}sn.nextBlockId=1;class an{constructor(t,e){this.indentLevel=0,this.loopLevel=0,this.code=[],this.hasRoot=!1,this.hasCache=!1,this.shouldProtectScope=!1,this.hasRefWrapper=!1,this.name=t,this.on=e||null}addLine(t,e){const n=new Array(this.indentLevel+2).join(" ");void 0===e?this.code.push(n+t):this.code.splice(e,0,n+t)}generateCode(){let t=[];t.push(`function ${this.name}(ctx, node, key = "") {`),this.shouldProtectScope&&(t.push(" ctx = Object.create(ctx);"),t.push(" ctx[isBoundary] = 1")),this.hasRefWrapper&&t.push(" let refWrapper = makeRefWrapper(this.__owl__);"),this.hasCache&&(t.push(" let cache = ctx.cache || {};"),t.push(" let nextCache = ctx.cache = {};"));for(let e of this.code)t.push(e);return this.hasRoot||t.push("return text('');"),t.push("}"),t.join("\n ")}currentKey(t){let e=this.loopLevel?`key${this.loopLevel}`:"key";return t.tKeyExpr&&(e=`${t.tKeyExpr} + ${e}`),e}}const cn=["label","title","placeholder","alt"],hn=/^(\s*)([\s\S]+?)(\s*)$/;class un{constructor(t,e){if(this.blocks=[],this.nextBlockId=1,this.isDebug=!1,this.targets=[],this.target=new an("template"),this.translatableAttributes=cn,this.staticDefs=[],this.slotNames=new Set,this.helpers=new Set,this.translateFn=e.translateFn||(t=>t),e.translatableAttributes){const t=new Set(cn);for(let n of e.translatableAttributes)n.startsWith("-")?t.delete(n.slice(1)):t.add(n);this.translatableAttributes=[...t]}this.hasSafeContext=e.hasSafeContext||!1,this.dev=e.dev||!1,this.ast=t,this.templateName=e.name}generateCode(){const t=this.ast;this.isDebug=12===t.type,sn.nextBlockId=1,nn={},this.compileAST(t,{block:null,index:0,forceNewBlock:!1,isLast:!0,translate:!0,tKeyExpr:null});let e=[" let { text, createBlock, list, multi, html, toggler, comment } = bdom;"];this.helpers.size&&e.push(`let { ${[...this.helpers].join(", ")} } = helpers;`),this.templateName&&e.push(`// Template name: "${this.templateName}"`);for(let{id:t,expr:n}of this.staticDefs)e.push(`const ${t} = ${n};`);if(this.blocks.length){e.push("");for(let t of this.blocks)if(t.dom){let n=t.asXmlString();n=n.replace(/\\/g,"\\\\").replace(/`/g,"\\`"),t.dynamicTagName?(n=n.replace(/^<\w+/,`<\${tag || '${t.dom.nodeName}'}`),n=n.replace(/\w+>$/,`\${tag || '${t.dom.nodeName}'}>`),e.push(`let ${t.blockName} = tag => createBlock(\`${n}\`);`)):e.push(`let ${t.blockName} = createBlock(\`${n}\`);`)}}if(this.targets.length)for(let t of this.targets)e.push(""),e=e.concat(t.generateCode());e.push(""),e=e.concat("return "+this.target.generateCode());const n=e.join("\n ");if(this.isDebug){const t=`[Owl Debug]\n${n}`;console.log(t)}return n}compileInNewTarget(t,e,n,o){const r=on(t),s=this.target,i=new an(r,o);return this.targets.push(i),this.target=i,this.compileAST(e,ln(n)),this.target=s,r}addLine(t,e){this.target.addLine(t,e)}define(t,e){this.addLine(`const ${t} = ${e};`)}insertAnchor(t,e=t.children.length){const n=`block-child-${e}`,o=tn.createElement(n);t.insert(o)}createBlock(t,e,n){const o=this.target.hasRoot,r=new sn(this.target,e);return o||(this.target.hasRoot=!0,r.isRoot=!0),t&&(t.children.push(r),"list"===t.type&&(r.parentVar=`c_block${t.id}`)),r}insertBlock(t,e,n){let o=e.generateExpr(t);if(e.parentVar){let t=this.target.currentKey(n);return this.helpers.add("withKey"),void this.addLine(`${e.parentVar}[${n.index}] = withKey(${o}, ${t});`)}n.tKeyExpr&&(o=`toggler(${n.tKeyExpr}, ${o})`),e.isRoot?(this.target.on&&(o=this.wrapWithEventCatcher(o,this.target.on)),this.addLine(`return ${o};`)):this.define(e.varName,o)}captureExpression(t,e=!1){if(!e&&!t.includes("=>"))return Xe(t);const n=qe(t),o=new Map;return n.map((t=>{if(t.varName&&!t.isLocal){if(!o.has(t.varName)){const e=on("v");o.set(t.varName,e),this.define(e,t.value)}t.value=o.get(t.varName)}return t.value})).join("")}translate(t){const e=hn.exec(t);return e[1]+this.translateFn(e[2])+e[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 4:return this.compileTEsc(t,e);case 8:return this.compileTOut(t,e);case 5:return this.compileTIf(t,e);case 9:return this.compileTForeach(t,e);case 10:return this.compileTKey(t,e);case 3:return this.compileMulti(t,e);case 7:return this.compileTCall(t,e);case 15:return this.compileTCallBlock(t,e);case 6:return this.compileTSet(t,e);case 11:return this.compileComponent(t,e);case 12:return this.compileDebug(t,e);case 13:return this.compileLog(t,e);case 14:return this.compileTSlot(t,e);case 16:return this.compileTTranslation(t,e);case 17:return this.compileTPortal(t,e)}}compileDebug(t,e){return this.addLine("debugger;"),t.content?this.compileAST(t.content,e):null}compileLog(t,e){return this.addLine(`console.log(${Xe(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(\`${t.value}\`)`,n,{...e,forceNewBlock:o&&!n});else{const e=tn.createComment(t.value);n.insert(e)}return n.varName}compileText(t,e){let{block:n,forceNewBlock:o}=e,r=t.value;if(r&&!1!==e.translate&&(r=this.translate(r)),e.inPreTag||(r=r.replace(Qe," ")),!n||o)n=this.createBlock(n,"text",e),this.insertBlock(`text(\`${r}\`)`,n,{...e,forceNewBlock:o&&!n});else{const e=0===t.type?tn.createTextNode:tn.createComment;n.insert(e.call(tn,r))}return n.varName}generateHandlerCode(t,e){const n=t.split(".").slice(1).map((t=>{if(!en.has(t))throw new s(`Unknown event modifier: '${t}'`);return`"${t}"`}));let o="";return n.length&&(o=`${n.join(",")}, `),`[${o}${this.captureExpression(e)}, ctx]`}compileTDomNode(t,e){let{block:n,forceNewBlock:o}=e;const r=!n||o||null!==t.dynamicTag||t.ns;let s=this.target.code.length;if(r&&((t.dynamicTag||e.tKeyExpr||t.ns)&&e.block&&this.insertAnchor(e.block),n=this.createBlock(n,"block",e),this.blocks.push(n),t.dynamicTag)){const e=on("tag");this.define(e,Xe(t.dynamicTag)),n.dynamicTagName=e}const i={};for(let o in t.attrs){let r,s;if(o.startsWith("t-attf")){r=Je(t.attrs[o]);const e=n.insertData(r,"attr");s=o.slice(7),i["block-attribute-"+e]=s}else if(o.startsWith("t-att"))if(s="t-att"===o?null:o.slice(6),r=Xe(t.attrs[o]),s&&rn(t.tag,s)){"readonly"===s&&(s="readOnly"),r="value"===s?`new String((${r}) === 0 ? 0 : ((${r}) || ""))`:`new Boolean(${r})`;i[`block-property-${n.insertData(r,"prop")}`]=s}else{const t=n.insertData(r,"attr");"t-att"===o?i["block-attributes"]=String(t):i[`block-attribute-${t}`]=s}else this.translatableAttributes.includes(o)?i[o]=this.translateFn(t.attrs[o]):(r=`"${t.attrs[o]}"`,s=o,i[o]=t.attrs[o]);if("value"===s&&e.tModelSelectedExpr){i[`block-attribute-${n.insertData(`${e.tModelSelectedExpr} === ${r}`,"attr")}`]="selected"}}let l;if(t.model){const{hasDynamicChildren:e,baseExpr:o,expr:r,eventType:s,shouldNumberize:a,shouldTrim:c,targetAttr:h,specialInitTargetAttr:u}=t.model,d=Xe(o),f=on("bExpr");this.define(f,d);const p=Xe(r),m=on("expr");this.define(m,p);const g=`${f}[${m}]`;let b;if(u){let e=h in i&&`'${i[h]}'`;if(!e&&t.attrs){const n=t.attrs[`t-att-${h}`];n&&(e=Xe(n))}b=n.insertData(`${g} === ${e}`,"prop"),i[`block-property-${b}`]=u}else if(e){l=`${on("bValue")}`,this.define(l,g)}else b=n.insertData(`${g}`,"prop"),i[`block-property-${b}`]=h;this.helpers.add("toNumber");let y=`ev.target.${h}`;y=c?`${y}.trim()`:y,y=a?`toNumber(${y})`:y;const v=`[(ev) => { ${g} = ${y}; }]`;b=n.insertData(v,"hdlr"),i[`block-handler-${b}`]=s}for(let e in t.on){const o=this.generateHandlerCode(e,t.on[e]);i[`block-handler-${n.insertData(o,"hdlr")}`]=e}if(t.ref){this.dev&&(this.helpers.add("makeRefWrapper"),this.target.hasRefWrapper=!0);const e=Ye.test(t.ref);let o=`\`${t.ref}\``;e&&(o=Ze(t.ref,(t=>this.captureExpression(t,!0))));let r=`(el) => this.__owl__.setRef((${o}), el)`;this.dev&&(r=`refWrapper(${o}, ${r})`);const s=n.insertData(r,"ref");i["block-ref"]=String(s)}const a=t.ns||e.nameSpace,c=a?tn.createElementNS(a,t.tag):tn.createElement(t.tag);for(const[t,e]of Object.entries(i))"class"===t&&""===e||c.setAttribute(t,e);if(n.insert(c),t.content.length){const o=n.currentDom;n.currentDom=c;const r=t.content;for(let o=0;o<r.length;o++){const s=t.content[o],i=ln(e,{block:n,index:n.childNumber,forceNewBlock:!1,isLast:e.isLast&&o===r.length-1,tKeyExpr:e.tKeyExpr,nameSpace:a,tModelSelectedExpr:l,inPreTag:e.inPreTag||"pre"===t.tag});this.compileAST(s,i)}n.currentDom=o}if(r&&(this.insertBlock(`${n.blockName}(ddd)`,n,e),n.children.length&&n.hasDynamicChildren)){const t=this.target.code,e=n.children.slice();let o=e.shift();for(let n=s;n<t.length&&(!t[n].trimStart().startsWith(`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(", ")};`,s)}return n.varName}compileTEsc(t,e){let n,{block:o,forceNewBlock:r}=e;if("0"===t.expr?(this.helpers.add("zero"),n="ctx[zero]"):(n=Xe(t.expr),t.defaultValue&&(this.helpers.add("withDefault"),n=`withDefault(${n}, \`${t.defaultValue}\`)`)),!o||r)o=this.createBlock(o,"text",e),this.insertBlock(`text(${n})`,o,{...e,forceNewBlock:r&&!o});else{const t=o.insertData(n,"txt"),e=tn.createElement(`block-text-${t}`);o.insert(e)}return o.varName}compileTOut(t,e){let n,{block:o}=e;if(o&&this.insertAnchor(o),o=this.createBlock(o,"html",e),"0"===t.expr)this.helpers.add("zero"),n="ctx[zero]";else if(t.body){let o=null;o=sn.nextBlockId;const r=ln(e);this.compileAST({type:3,content:t.body},r),this.helpers.add("safeOutput"),n=`safeOutput(${Xe(t.expr)}, b${o})`}else this.helpers.add("safeOutput"),n=`safeOutput(${Xe(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,ln(n,{block:e,index:n.index})),e.children.length>o&&this.insertAnchor(e,o),this.target.indentLevel--}compileTIf(t,e,n){let{block:o,forceNewBlock:r}=e;const s=this.target.code.length,i=!o||"multi"!==o.type&&r;if(o&&(o.hasDynamicChildren=!0),(!o||"multi"!==o.type&&r)&&(o=this.createBlock(o,"multi",e)),this.addLine(`if (${Xe(t.condition)}) {`),this.compileTIfBranch(t.content,o,e),t.tElif)for(let n of t.tElif)this.addLine(`} else if (${Xe(n.condition)}) {`),this.compileTIfBranch(n.content,o,e);if(t.tElse&&(this.addLine("} else {"),this.compileTIfBranch(t.tElse,o,e)),this.addLine("}"),i){if(o.children.length){const t=this.target.code,e=o.children.slice();let n=e.shift();for(let o=s;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(", ")};`,s)}const t=o.children.map((t=>t.varName)).join(", ");this.insertBlock(`multi([${t}])`,o,e)}return o.varName}compileTForeach(t,e){let{block:n}=e;n&&this.insertAnchor(n),n=this.createBlock(n,"list",e),this.target.loopLevel++;const o=`i${this.target.loopLevel}`;this.addLine("ctx = Object.create(ctx);");const r=`v_block${n.id}`,s=`k_block${n.id}`,i=`l_block${n.id}`,l=`c_block${n.id}`;let a;this.helpers.add("prepareList"),this.define(`[${s}, ${r}, ${i}, ${l}]`,`prepareList(${Xe(t.collection)});`),this.dev&&this.define(`keys${n.id}`,"new Set()"),this.addLine(`for (let ${o} = 0; ${o} < ${i}; ${o}++) {`),this.target.indentLevel++,this.addLine(`ctx[\`${t.elem}\`] = ${s}[${o}];`),t.hasNoFirst||this.addLine(`ctx[\`${t.elem}_first\`] = ${o} === 0;`),t.hasNoLast||this.addLine(`ctx[\`${t.elem}_last\`] = ${o} === ${s}.length - 1;`),t.hasNoIndex||this.addLine(`ctx[\`${t.elem}_index\`] = ${o};`),t.hasNoValue||this.addLine(`ctx[\`${t.elem}_value\`] = ${r}[${o}];`),this.define(`key${this.target.loopLevel}`,t.key?Xe(t.key):o),this.dev&&(this.helpers.add("OwlError"),this.addLine(`if (keys${n.id}.has(String(key${this.target.loopLevel}))) { throw new OwlError(\`Got duplicate key in t-foreach: \${key${this.target.loopLevel}}\`)}`),this.addLine(`keys${n.id}.add(String(key${this.target.loopLevel}));`)),t.memo&&(this.target.hasCache=!0,a=on(),this.define(`memo${a}`,Xe(t.memo)),this.define(`vnode${a}`,`cache[key${this.target.loopLevel}];`),this.addLine(`if (vnode${a}) {`),this.target.indentLevel++,this.addLine(`if (shallowEqual(vnode${a}.memo, memo${a})) {`),this.target.indentLevel++,this.addLine(`${l}[${o}] = vnode${a};`),this.addLine(`nextCache[key${this.target.loopLevel}] = vnode${a};`),this.addLine("continue;"),this.target.indentLevel--,this.addLine("}"),this.target.indentLevel--,this.addLine("}"));const c=ln(e,{block:n,index:o});return this.compileAST(t.body,c),t.memo&&this.addLine(`nextCache[key${this.target.loopLevel}] = Object.assign(${l}[${o}], {memo: memo${a}});`),this.target.indentLevel--,this.target.loopLevel--,this.addLine("}"),e.isLast||this.addLine("ctx = ctx.__proto__;"),this.insertBlock("l",n,e),n.varName}compileTKey(t,e){const n=on("tKey_");return this.define(n,Xe(t.expr)),e=ln(e,{tKeyExpr:n,block:e.block,index:e.index}),this.compileAST(t.content,e)}compileMulti(t,e){let{block:n,forceNewBlock:o}=e;const r=!n||o;let s=this.target.code.length;if(r){let o=null;if(t.content.filter((t=>6!==t.type)).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 i=0;for(let o=0,r=t.content.length;o<r;o++){const s=t.content[o],l=6===s.type,a=ln(e,{block:n,index:i,forceNewBlock:!l,isLast:e.isLast&&o===r-1});this.compileAST(s,a),l||i++}if(r){if(n.hasDynamicChildren&&n.children.length){const t=this.target.code,e=n.children.slice();let o=e.shift();for(let n=s;n<t.length&&(!t[n].trimStart().startsWith(`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(", ")};`,s)}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,r=e.ctxVar||"ctx";t.context&&(r=on("ctx"),this.addLine(`let ${r} = ${Xe(t.context)};`));const s=Ye.test(t.name),i=s?Je(t.name):"`"+t.name+"`";if(n&&!o&&this.insertAnchor(n),n=this.createBlock(n,"multi",e),t.body){this.addLine(`${r} = Object.create(${r});`),this.addLine(`${r}[isBoundary] = 1;`),this.helpers.add("isBoundary");const n=ln(e,{ctxVar:r}),o=this.compileMulti({type:3,content:t.body},n);o&&(this.helpers.add("zero"),this.addLine(`${r}[zero] = ${o};`))}const l=`key + \`${this.generateComponentKey()}\``;if(s){const t=on("template");this.staticDefs.find((t=>"call"===t.id))||this.staticDefs.push({id:"call",expr:"app.callTemplate.bind(app)"}),this.define(t,i),this.insertBlock(`call(this, ${t}, ${r}, node, ${l})`,n,{...e,forceNewBlock:!n})}else{const t=on("callTemplate_");this.staticDefs.push({id:t,expr:`app.getTemplate(${i})`}),this.insertBlock(`${t}.call(this, ${r}, node, ${l})`,n,{...e,forceNewBlock:!n})}return t.body&&!e.isLast&&this.addLine(`${r} = ${r}.__proto__;`),n.varName}compileTCallBlock(t,e){let{block:n,forceNewBlock:o}=e;return n&&(o||this.insertAnchor(n)),n=this.createBlock(n,"multi",e),this.insertBlock(Xe(t.name),n,{...e,forceNewBlock:!n}),n.varName}compileTSet(t,e){this.target.shouldProtectScope=!0,this.helpers.add("isBoundary").add("withDefault");const n=t.value?Xe(t.value||""):"null";if(t.body){this.helpers.add("LazyValue");const o={type:3,content:t.body};let r=`new LazyValue(${this.compileInNewTarget("value",o,e)}, ctx, this, node, ${this.target.currentKey(e)})`;r=t.value?r?`withDefault(${n}, ${r})`:n:r,this.addLine(`ctx[\`${t.name}\`] = ${r};`)}else{let o;if(t.defaultValue){const r=e.translate?this.translate(t.defaultValue):t.defaultValue;o=t.value?`withDefault(${n}, \`${r}\`)`:`\`${r}\``}else o=n;this.helpers.add("setContextValue"),this.addLine(`setContextValue(${e.ctxVar||"ctx"}, "${t.name}", ${o});`)}return null}generateComponentKey(){const t=[on("__")];for(let e=0;e<this.target.loopLevel;e++)t.push(`\${key${e+1}}`);return t.join("__")}formatProp(t,e){if(e=this.captureExpression(e),t.includes(".")){let[n,o]=t.split(".");switch(t=n,o){case"bind":e=`(${e}).bind(this)`;break;case"alike":break;default:throw new s("Invalid prop suffix")}}return`${t=/^[a-z_]+$/i.test(t)?t:`'${t}'`}: ${e||void 0}`}formatPropObject(t){return Object.entries(t).map((([t,e])=>this.formatProp(t,e)))}getPropString(t,e){let n=`{${t.join(",")}}`;return e&&(n=`Object.assign({}, ${Xe(e)}${t.length?", "+n:""})`),n}compileComponent(t,e){let{block:n}=e;const o="slots"in(t.props||{}),r=t.props?this.formatPropObject(t.props):[];let s="";if(t.slots){let n="ctx";!this.target.loopLevel&&this.hasSafeContext||(n=on("ctx"),this.helpers.add("capture"),this.define(n,"capture(ctx)"));let o=[];for(let r in t.slots){const s=t.slots[r],i=[];if(s.content){const t=this.compileInNewTarget("slot",s.content,e,s.on);i.push(`__render: ${t}.bind(this), __ctx: ${n}`)}const l=t.slots[r].scope;l&&i.push(`__scope: "${l}"`),t.slots[r].attrs&&i.push(...this.formatPropObject(t.slots[r].attrs));const a=`{${i.join(", ")}}`;o.push(`'${r}': ${a}`)}s=`{${o.join(", ")}}`}!s||t.dynamicProps||o||(this.helpers.add("markRaw"),r.push(`slots: markRaw(${s})`));let i,l=this.getPropString(r,t.dynamicProps);(s&&(t.dynamicProps||o)||this.dev)&&(i=on("props"),this.define(i,l),l=i),s&&(t.dynamicProps||o)&&(this.helpers.add("markRaw"),this.addLine(`${i}.slots = markRaw(Object.assign(${s}, ${i}.slots))`));const a=this.generateComponentKey();let c;t.isDynamic?(c=on("Comp"),this.define(c,Xe(t.name))):c=`\`${t.name}\``,this.dev&&this.addLine(`helpers.validateProps(${c}, ${i}, this);`),n&&(!1===e.forceNewBlock||e.tKeyExpr)&&this.insertAnchor(n);let h=`key + \`${a}\``;e.tKeyExpr&&(h=`${e.tKeyExpr} + ${h}`);let u=on("comp");const d=[];for(let e in t.props||{}){let[t,n]=e.split(".");n||d.push(`"${t}"`)}this.staticDefs.push({id:u,expr:`app.createComponent(${t.isDynamic?null:c}, ${!t.isDynamic}, ${!!t.slots}, ${!!t.dynamicProps}, [${d}])`}),t.isDynamic&&(h=`(${c}).name + ${h}`);let f=`${u}(${l}, ${h}, node, this, ${t.isDynamic?c:null})`;return t.isDynamic&&(f=`toggler(${c}, ${f})`),t.on&&(f=this.wrapWithEventCatcher(f,t.on)),n=this.createBlock(n,"multi",e),this.insertBlock(f,n,e),n.varName}wrapWithEventCatcher(t,e){this.helpers.add("createCatcher");let n=on("catcher"),o={},r=[];for(let t in e){let n=on("hdlr"),s=r.push(n)-1;o[t]=s;const i=this.generateHandlerCode(t,e[t]);this.define(n,i)}return this.staticDefs.push({id:n,expr:`createCatcher(${JSON.stringify(o)})`}),`${n}(${t}, [${r.join(",")}])`}compileTSlot(t,e){this.helpers.add("callSlot");let n,o,{block:r}=e,s=!1,i=!1;t.name.match(Ye)?(s=!0,i=!0,o=Je(t.name)):(o="'"+t.name+"'",i=i||this.slotNames.has(t.name),this.slotNames.add(t.name));const l=t.attrs?t.attrs["t-props"]:null;t.attrs&&delete t.attrs["t-props"];let a=this.target.loopLevel?`key${this.target.loopLevel}`:"key";i&&(a=`${a} + \`${this.generateComponentKey()}\``);const c=t.attrs?this.formatPropObject(t.attrs):[],h=this.getPropString(c,l);if(t.defaultContent){n=`callSlot(ctx, node, ${a}, ${o}, ${s}, ${h}, ${this.compileInNewTarget("defaultContent",t.defaultContent,e)}.bind(this))`}else if(s){let t=on("slot");this.define(t,o),n=`toggler(${t}, callSlot(ctx, node, ${a}, ${t}, ${s}, ${h}))`}else n=`callSlot(ctx, node, ${a}, ${o}, ${s}, ${h})`;return t.on&&(n=this.wrapWithEventCatcher(n,t.on)),r&&this.insertAnchor(r),r=this.createBlock(r,"multi",e),this.insertBlock(n,r,{...e,forceNewBlock:!1}),r.varName}compileTTranslation(t,e){return t.content?this.compileAST(t.content,Object.assign({},e,{translate:!1})):null}compileTPortal(t,e){this.staticDefs.find((t=>"Portal"===t.id))||this.staticDefs.push({id:"Portal",expr:"app.Portal"});let{block:n}=e;const o=this.compileInNewTarget("slot",t.content,e),r=this.generateComponentKey();let s="ctx";!this.target.loopLevel&&this.hasSafeContext||(s=on("ctx"),this.helpers.add("capture"),this.define(s,"capture(ctx)"));let i=on("comp");this.staticDefs.push({id:i,expr:"app.createComponent(null, false, true, false, false)"});const l=`${i}({target: ${Xe(t.target)},slots: {'default': {__render: ${o}.bind(this), __ctx: ${s}}}}, key + \`${r}\`, node, ctx, Portal)`;return n&&this.insertAnchor(n),n=this.createBlock(n,"multi",e),this.insertBlock(l,n,{...e,forceNewBlock:!1}),n.varName}}const dn=new WeakMap;function fn(t){if("string"==typeof t){const e=function(t){const e=(new DOMParser).parseFromString(t,"text/xml");if(e.getElementsByTagName("parsererror").length){let n="Invalid XML in template.";const o=e.getElementsByTagName("parsererror")[0].textContent;if(o){n+="\nThe parser has produced the following error message:\n"+o;const e=/\d+/g,r=e.exec(o);if(r){const s=Number(r[0]),i=t.split("\n")[s-1],l=e.exec(o);if(i&&l){const t=Number(l[0])-1;i[t]&&(n+=`\nThe error might be located at xml line ${s} column ${t}\n${i}\n${"-".repeat(t-1)}^`)}}}throw new s(n)}return e}(`<t>${t}</t>`).firstChild;return pn(e)}let e=dn.get(t);return e||(e=pn(t.cloneNode(!0)),dn.set(t,e)),e}function pn(t){var e;(function(t){let e=t.querySelectorAll("[t-elif], [t-else]");for(let t=0,n=e.length;t<n;t++){let n=e[t],o=n.previousElementSibling,r=t=>o.getAttribute(t),i=t=>+!!n.getAttribute(t);if(!o||!r("t-if")&&!r("t-elif"))throw new s("t-elif and t-else directives must be preceded by a t-if or t-elif directive");{if(r("t-foreach"))throw new s("t-if cannot stay at the same level as t-foreach when using t-elif or t-else");if(["t-if","t-elif","t-else"].map(i).reduce((function(t,e){return t+e}))>1)throw new s("Only one conditional branching directive is allowed per node");let t;for(;(t=n.previousSibling)!==o;){if(t.nodeValue.trim().length&&8!==t.nodeType)throw new s("text is not allowed between branching directives");t.remove()}}}})(e=t),function(t){for(const e of["t-esc","t-out"]){const n=[...t.querySelectorAll(`[${e}]`)].filter((t=>t.tagName[0]===t.tagName[0].toUpperCase()||t.hasAttribute("t-component")));for(const t of n){if(t.childNodes.length)throw new s(`Cannot have ${e} on a component that already has content`);const n=t.getAttribute(e);t.removeAttribute(e);const o=t.ownerDocument.createElement("t");null!=n&&o.setAttribute(e,n),t.appendChild(o)}}}(e);return mn(t,{inPreTag:!1})||{type:0,value:""}}function mn(t,e){return t instanceof Element?function(t,e){if(t.hasAttribute("t-debug"))return t.removeAttribute("t-debug"),{type:12,content:mn(t,e)};if(t.hasAttribute("t-log")){const n=t.getAttribute("t-log");return t.removeAttribute("t-log"),{type:13,expr:n,content:mn(t,e)}}return null}(t,e)||function(t,e){if(!t.hasAttribute("t-foreach"))return null;const n=t.outerHTML,o=t.getAttribute("t-foreach");t.removeAttribute("t-foreach");const r=t.getAttribute("t-as")||"";t.removeAttribute("t-as");const i=t.getAttribute("t-key");if(!i)throw new s(`"Directive t-foreach should always be used with a t-key!" (expression: t-foreach="${o}" t-as="${r}")`);t.removeAttribute("t-key");const l=t.getAttribute("t-memo")||"";t.removeAttribute("t-memo");const a=mn(t,e);if(!a)return null;const c=!n.includes("t-call"),h=c&&!n.includes(`${r}_first`),u=c&&!n.includes(`${r}_last`),d=c&&!n.includes(`${r}_index`),f=c&&!n.includes(`${r}_value`);return{type:9,collection:o,elem:r,body:a,memo:l,key:i,hasNoFirst:h,hasNoLast:u,hasNoIndex:d,hasNoValue:f}}(t,e)||function(t,e){if(!t.hasAttribute("t-if"))return null;const n=t.getAttribute("t-if");t.removeAttribute("t-if");const o=mn(t,e)||{type:0,value:""};let r=t.nextElementSibling;const s=[];for(;r&&r.hasAttribute("t-elif");){const t=r.getAttribute("t-elif");r.removeAttribute("t-elif");const n=mn(r,e),o=r.nextElementSibling;r.remove(),r=o,n&&s.push({condition:t,content:n})}let i=null;r&&r.hasAttribute("t-else")&&(r.removeAttribute("t-else"),i=mn(r,e),r.remove());return{type:5,condition:n,content:o,tElif:s.length?s:null,tElse:i}}(t,e)||function(t,e){if(!t.hasAttribute("t-portal"))return null;const n=t.getAttribute("t-portal");t.removeAttribute("t-portal");const o=mn(t,e);if(!o)return{type:0,value:""};return{type:17,target:n,content:o}}(t,e)||function(t,e){if(!t.hasAttribute("t-call"))return null;const n=t.getAttribute("t-call"),o=t.getAttribute("t-call-context");if(t.removeAttribute("t-call"),t.removeAttribute("t-call-context"),"t"!==t.tagName){const r=mn(t,e),s={type:7,name:n,body:null,context:o};if(r&&2===r.type)return r.content=[s],r;if(r&&11===r.type)return{...r,slots:{default:{content:s,scope:null,on:null,attrs:null}}}}const r=$n(t,e);return{type:7,name:n,body:r.length?r:null,context:o}}(t,e)||function(t,e){if(!t.hasAttribute("t-call-block"))return null;const n=t.getAttribute("t-call-block");return{type:15,name:n}}(t)||function(t,e){if(!t.hasAttribute("t-esc"))return null;const n=t.getAttribute("t-esc");t.removeAttribute("t-esc");const o={type:4,expr:n,defaultValue:t.textContent||""};let r=t.getAttribute("t-ref");t.removeAttribute("t-ref");const s=mn(t,e);if(!s)return o;if(2===s.type)return{...s,ref:r,content:[o]};return o}(t,e)||function(t,e){if(!t.hasAttribute("t-out")&&!t.hasAttribute("t-raw"))return null;t.hasAttribute("t-raw")&&console.warn('t-raw has been deprecated in favor of t-out. If the value to render is not wrapped by the "markup" function, it will be escaped');const n=t.getAttribute("t-out")||t.getAttribute("t-raw");t.removeAttribute("t-out"),t.removeAttribute("t-raw");const o={type:8,expr:n,body:null},r=t.getAttribute("t-ref");t.removeAttribute("t-ref");const s=mn(t,e);if(!s)return o;if(2===s.type)return o.body=s.content.length?s.content:null,{...s,ref:r,content:[o]};return o}(t,e)||function(t,e){if(!t.hasAttribute("t-key"))return null;const n=t.getAttribute("t-key");t.removeAttribute("t-key");const o=mn(t,e);if(!o)return null;return{type:10,expr:n,content:o}}(t,e)||function(t,e){if("off"!==t.getAttribute("t-translation"))return null;return t.removeAttribute("t-translation"),{type:16,content:mn(t,e)}}(t,e)||function(t,e){if(!t.hasAttribute("t-slot"))return null;const n=t.getAttribute("t-slot");t.removeAttribute("t-slot");let o=null,r=null;for(let e of t.getAttributeNames()){const n=t.getAttribute(e);e.startsWith("t-on-")?(r=r||{},r[e.slice(5)]=n):(o=o||{},o[e]=n)}return{type:14,name:n,attrs:o,on:r,defaultContent:xn(t,e)}}(t,e)||function(t,e){let n=t.tagName;const o=n[0];let r=t.hasAttribute("t-component");if(r&&"t"!==n)throw new s(`Directive 't-component' can only be used on <t> nodes (used on a <${n}>)`);if(o!==o.toUpperCase()&&!r)return null;r&&(n=t.getAttribute("t-component"),t.removeAttribute("t-component"));const i=t.getAttribute("t-props");t.removeAttribute("t-props");const l=t.getAttribute("t-slot-scope");t.removeAttribute("t-slot-scope");let a=null,c=null;for(let e of t.getAttributeNames()){const n=t.getAttribute(e);if(e.startsWith("t-")){if(!e.startsWith("t-on-")){const t=wn.get(e.split("-").slice(0,2).join("-"));throw new s(t||`unsupported directive on Component: ${e}`)}a=a||{},a[e.slice(5)]=n}else c=c||{},c[e]=n}let h=null;if(t.hasChildNodes()){const n=t.cloneNode(!0),o=Array.from(n.querySelectorAll("[t-set-slot]"));for(let t of o){if("t"!==t.tagName)throw new s(`Directive 't-set-slot' can only be used on <t> nodes (used on a <${t.tagName}>)`);const o=t.getAttribute("t-set-slot");let r=t.parentElement,i=!1;for(;r&&r!==n;){if(r.hasAttribute("t-component")||r.tagName[0]===r.tagName[0].toUpperCase()){i=!0;break}r=r.parentElement}if(i||!r)continue;t.removeAttribute("t-set-slot"),t.remove();const l=mn(t,e);let a=null,c=null,u=null;for(let e of t.getAttributeNames()){const n=t.getAttribute(e);"t-slot-scope"!==e?e.startsWith("t-on-")?(a=a||{},a[e.slice(5)]=n):(c=c||{},c[e]=n):u=n}h=h||{},h[o]={content:l,on:a,attrs:c,scope:u}}const r=xn(n,e);h=h||{},r&&!h.default&&(h.default={content:r,on:a,attrs:null,scope:l})}return{type:11,name:n,isDynamic:r,dynamicProps:i,props:c,slots:h,on:a}}(t,e)||function(t,e){const{tagName:n}=t,o=t.getAttribute("t-tag");if(t.removeAttribute("t-tag"),"t"===n&&!o)return null;if(n.startsWith("block-"))throw new s(`Invalid tag name: '${n}'`);e=Object.assign({},e),"pre"===n&&(e.inPreTag=!0);let r=!e.nameSpace&&vn.has(n)?"http://www.w3.org/2000/svg":null;const i=t.getAttribute("t-ref");t.removeAttribute("t-ref");const l=t.getAttributeNames();let a=null,c=null,h=null;for(let o of l){const i=t.getAttribute(o);if("t-on"===o||"t-on-"===o)throw new s("Missing event name with t-on directive");if(o.startsWith("t-on-"))c=c||{},c[o.slice(5)]=i;else if(o.startsWith("t-model")){if(!["input","select","textarea"].includes(n))throw new s("The t-model directive only works with <input>, <textarea> and <select>");let r,l;if(bn.test(i)){const t=i.lastIndexOf(".");r=i.slice(0,t),l=`'${i.slice(t+1)}'`}else{if(!yn.test(i))throw new s(`Invalid t-model expression: "${i}" (it should be assignable)`);{const t=i.lastIndexOf("[");r=i.slice(0,t),l=i.slice(t+1,-1)}}const a=t.getAttribute("type"),c="input"===n,u="select"===n,d=c&&"checkbox"===a,f=c&&"radio"===a,p=o.includes(".lazy"),m=o.includes(".number");h={baseExpr:r,expr:l,targetAttr:d?"checked":"value",specialInitTargetAttr:f?"checked":null,eventType:f?"click":u||p?"change":"input",hasDynamicChildren:!1,shouldTrim:o.includes(".trim"),shouldNumberize:m},u&&((e=Object.assign({},e)).tModelInfo=h)}else{if(o.startsWith("block-"))throw new s(`Invalid attribute: '${o}'`);if("xmlns"===o)r=i;else if("t-name"!==o){if(o.startsWith("t-")&&!o.startsWith("t-att"))throw new s(`Unknown QWeb directive: '${o}'`);const t=e.tModelInfo;t&&["t-att-value","t-attf-value"].includes(o)&&(t.hasDynamicChildren=!0),a=a||{},a[o]=i}}}r&&(e.nameSpace=r);const u=$n(t,e);return{type:2,tag:n,dynamicTag:o,attrs:a,on:c,ref:i,content:u,model:h,ns:r}}(t,e)||function(t,e){if(!t.hasAttribute("t-set"))return null;const n=t.getAttribute("t-set"),o=t.getAttribute("t-value")||null,r=t.innerHTML===t.textContent&&t.textContent||null;let s=null;t.textContent!==t.innerHTML&&(s=$n(t,e));return{type:6,name:n,value:o,defaultValue:r,body:s}}(t,e)||function(t,e){if("t"!==t.tagName)return null;return xn(t,e)}(t,e):function(t,e){if(t.nodeType===Node.TEXT_NODE){let n=t.textContent||"";return e.inPreTag||!gn.test(n)||n.trim()?{type:0,value:n}:null}if(t.nodeType===Node.COMMENT_NODE)return{type:1,value:t.textContent||""};return null}(t,e)}const gn=/[\r\n]/;const bn=/\.[\w_]+\s*$/,yn=/\[[^\[]+\]\s*$/,vn=new Set(["svg","g","path"]);const wn=new Map([["t-ref","t-ref is no longer supported on components. Consider exposing only the public part of the component's API through a callback prop."],["t-att","t-att makes no sense on component: props are already treated as expressions"],["t-attf","t-attf is not supported on components: use template strings for string interpolation in props"]]);function $n(t,e){const n=[];for(let o of t.childNodes){const t=mn(o,e);t&&(3===t.type?n.push(...t.content):n.push(t))}return n}function xn(t,e){const n=$n(t,e);switch(n.length){case 0:return null;case 1:return n[0];default:return{type:3,content:n}}}class Nn{constructor(){this.tasks=new Set,this.frame=0,this.delayedRenders=[],this.cancelledNodes=new Set,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(){this.frame=0;for(let t of this.cancelledNodes)t._destroy();this.cancelledNodes.clear();for(let t of this.tasks)this.processFiber(t);for(let t of this.tasks)3===t.node.status&&this.tasks.delete(t)}processFiber(t){if(t.root!==t)return void this.tasks.delete(t);const e=Et.has(t);e&&0!==t.counter?this.tasks.delete(t):3!==t.node.status?0===t.counter&&(e||t.complete(),this.tasks.delete(t)):this.tasks.delete(t)}}Nn.requestAnimationFrame=window.requestAnimationFrame.bind(window);let kn=!1;const En=new Set;window.__OWL_DEVTOOLS__||(window.__OWL_DEVTOOLS__={apps:En,Fiber:Ot,RootFiber:Dt,toRaw:Ht,reactive:Qt});class An extends je{constructor(t,e={}){super(e),this.scheduler=new Nn,this.root=null,this.name=e.name||"",this.Root=t,En.add(this),e.test&&(this.dev=!0),this.warnIfNoStaticProps=e.warnIfNoStaticProps||!1,!this.dev||e.test||kn||(console.info(`Owl is running in 'dev' mode.\n\nThis is not suitable for production use.\nSee https://github.com/odoo/owl/blob/${window.owl?window.owl.__info__.hash:"master"}/doc/reference/app.md#configuration for more information.`),kn=!0);const n=e.env||{},o=Object.getOwnPropertyDescriptors(n);this.env=Object.freeze(Object.create(Object.getPrototypeOf(n),o)),this.props=e.props||{}}mount(t,e){An.validateTarget(t),this.dev&&Be(this.Root,this.props,{__owl__:{app:this}});const n=this.makeNode(this.Root,this.props),o=this.mountNode(n,t,e);return this.root=n,o}makeNode(t,e){return new de(t,e,this,null,null)}mountNode(t,e,n){const o=new Promise(((e,n)=>{let o=!1;t.mounted.push((()=>{e(t.component),o=!0}));let r=At.get(t);r||(r=[],At.set(t,r)),r.unshift((t=>{throw o||n(t),t}))}));return t.mountComponent(e,n),o}destroy(){this.root&&(this.root.destroy(),this.scheduler.processTasks()),En.delete(this)}createComponent(t,e,n,o,r){const i=!e;let l;const a=0===r.length;l=n?(t,e)=>!0:o?function(t,e){for(let n in t)if(t[n]!==e[n])return!0;return Object.keys(t).length!==Object.keys(e).length}:a?(t,e)=>!1:function(t,e){for(let n of r)if(t[n]!==e[n])return!0;return!1};const c=de.prototype.updateAndRender,h=de.prototype.initiateRender;return(n,o,r,a,u)=>{let d=r.children,f=d[o];i&&f&&f.component.constructor!==u&&(f=void 0);const p=r.fiber;if(f)(l(f.props,n)||p.deep||f.forceNextRender)&&(f.forceNextRender=!1,c.call(f,n,p));else{if(e){const e=a.constructor.components;if(!e)throw new s(`Cannot find the definition of component "${t}", missing static components key in parent`);if(!(u=e[t]))throw new s(`Cannot find the definition of component "${t}"`);if(!(u.prototype instanceof ye))throw new s(`"${t}" is not a Component. It must inherit from the Component class`)}f=new de(u,n,this,r,o),d[o]=f,h.call(f,new Ot(f,p))}return p.childrenMap[o]=f,f}}handleError(...t){return _t(...t)}}An.validateTarget=function(t){const e=t&&t.ownerDocument;if(e){const n=e.defaultView.HTMLElement;if(t instanceof n||t instanceof ShadowRoot){if(!e.body.contains(t instanceof n?t:t.host))throw new s("Cannot mount a component on a detached dom node");return}}throw new s("Cannot mount component: the target is not a valid DOM element")},An.apps=En,An.version="2.2.7";function Tn(t,e){const n=Object.create(t),o=Object.getOwnPropertyDescriptors(e);return Object.freeze(Object.defineProperties(n,o))}function _n(t){const e=ae();e.childEnv=Tn(e.childEnv,t)}n.shouldNormalizeDom=!1,n.mainEventHandler=(t,n,o)=>{const{data:r,modifiers:i}=e(t);t=r;let l=!1;if(i.length){let t=!1;const e=n.target===o;for(const o of i)switch(o){case"self":if(t=!0,e)continue;return 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 e=t[0];if("function"!=typeof e)throw new s(`Invalid handler (expected a function, received: '${e}')`);let o=t[1]?t[1].__owl__:null;o&&1!==o.status||e.call(o?o.component:null,n)}return l};const Sn={config:n,mount:kt,patch:function(t,e,n=!1){t.patch(e,n)},remove:function(t,e=!1){e&&t.beforeRemove(),t.remove()},list:bt,multi:P,text:H,toggler:r,createBlock:ot,html:Nt,comment:U},Cn={version:An.version};je.prototype._compileTemplate=function(t,e){return function(t,e={}){const n=fn(t),o=t instanceof Node?!(t instanceof Element)||null===t.querySelector("[t-set], [t-call]"):!t.includes("t-set")&&!t.includes("t-call"),r=new un(n,{...e,hasSafeContext:o}).generateCode();try{return new Function("app, bdom, helpers",r)}catch(t){const{name:n}=e,o=new s(`Failed to compile ${n?`template "${n}"`:"anonymous template"}: ${t.message}\n\ngenerated code:\nfunction(app, bdom, helpers) {\n${r}\n}`);throw o.cause=t,o}}(e,{name:t,dev:this.dev,translateFn:this.translateFn,translatableAttributes:this.translatableAttributes})},t.App=An,t.Component=ye,t.EventBus=N,t.OwlError=s,t.__info__=Cn,t.blockDom=Sn,t.loadFile=async function(t){const e=await fetch(t);if(!e.ok)throw new s("Error while fetching xml templates");return await e.text()},t.markRaw=zt,t.markup=function(t){return new k(t)},t.mount=async function(t,e,n={}){return new An(t,n).mount(e,n)},t.onError=function(t){const e=ae();let n=At.get(e);n||(n=[],At.set(e,n)),n.push(t.bind(e.component))},t.onMounted=me,t.onPatched=ge,t.onRendered=function(t){const e=ae(),n=e.renderFn,o=e.app.dev?pe:t=>t;t=o(t.bind(e.component),"onRendered"),e.renderFn=()=>{const e=n();return t(),e}},t.onWillDestroy=function(t){const e=ae(),n=e.app.dev?pe:t=>t;e.willDestroy.push(n(t.bind(e.component),"onWillDestroy"))},t.onWillPatch=function(t){const e=ae(),n=e.app.dev?pe:t=>t;e.willPatch.unshift(n(t.bind(e.component),"onWillPatch"))},t.onWillRender=function(t){const e=ae(),n=e.renderFn,o=e.app.dev?pe:t=>t;t=o(t.bind(e.component),"onWillRender"),e.renderFn=()=>(t(),n())},t.onWillStart=function(t){const e=ae(),n=e.app.dev?pe:t=>t;e.willStart.push(n(t.bind(e.component),"onWillStart"))},t.onWillUnmount=be,t.onWillUpdateProps=function(t){const e=ae(),n=e.app.dev?pe:t=>t;e.willUpdateProps.push(n(t.bind(e.component),"onWillUpdateProps"))},t.reactive=Qt,t.status=function(t){switch(t.__owl__.status){case 0:return"new";case 2:return"cancelled";case 1:return"mounted";case 3:return"destroyed"}},t.toRaw=Ht,t.useChildSubEnv=_n,t.useComponent=function(){return le.component},t.useEffect=function(t,e=(()=>[NaN])){let n,o;me((()=>{o=e(),n=t(...o)})),ge((()=>{const r=e();r.some(((t,e)=>t!==o[e]))&&(o=r,n&&n(),n=t(...o))})),be((()=>n&&n()))},t.useEnv=function(){return ae().component.env},t.useExternalListener=function(t,e,n,o){const r=ae(),s=n.bind(r.component);me((()=>t.addEventListener(e,s,o))),be((()=>t.removeEventListener(e,s,o)))},t.useRef=function(t){const e=ae().refs;return{get el(){const n=e[t];return x(n)?n:null}}},t.useState=ue,t.useSubEnv=function(t){const e=ae();e.component.env=Tn(e.component.env,t),_n(t)},t.validate=function(t,e){let n=_e(t,e);if(n.length)throw new s("Invalid object: "+n.join(", "))},t.validateType=Se,t.whenReady=function(t){return new Promise((function(t){"loading"!==document.readyState?t(!0):document.addEventListener("DOMContentLoaded",t,!1)})).then(t||function(){})},t.xml=Ie,Object.defineProperty(t,"__esModule",{value:!0}),Cn.date="2023-12-06T13:56:01.636Z",Cn.hash="e94428a",Cn.url="https://github.com/odoo/owl"}(this.owl=this.owl||{});
1
+ !function(t){"use strict";function e(t){t=t.slice();const e=[];let n;for(;(n=t[0])&&"string"==typeof n;)e.push(t.shift());return{modifiers:e,data:t}}const n={shouldNormalizeDom:!0,mainEventHandler:(t,n,o)=>("function"==typeof t?t(n):Array.isArray(t)&&(t=e(t).data)[0](t[1],n),!1)};class o{constructor(t,e){this.key=t,this.child=e}mount(t,e){this.parentEl=t,this.child.mount(t,e)}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;this.key===t.key?n.patch(o,e):(o.mount(this.parentEl,n.firstNode()),e&&n.beforeRemove(),n.remove(),this.child=o,this.key=t.key)}beforeRemove(){this.child.beforeRemove()}remove(){this.child.remove()}firstNode(){return this.child.firstNode()}toString(){return this.child.toString()}}function r(t,e){return new o(t,e)}class i extends Error{}const{setAttribute:s,removeAttribute:l}=Element.prototype,a=DOMTokenList.prototype,c=a.add,h=a.remove,u=Array.isArray,{split:d,trim:f}=String.prototype,p=/\s+/;function m(t,e){switch(e){case!1:case void 0:l.call(this,t);break;case!0:s.call(this,t,"");break;default:s.call(this,t,e)}}function b(t){return function(e){m.call(this,t,e)}}function g(t){if(u(t))"class"===t[0]?w.call(this,t[1]):m.call(this,t[0],t[1]);else for(let e in t)"class"===e?w.call(this,t[e]):m.call(this,e,t[e])}function y(t,e){if(u(t)){const n=t[0],o=t[1];if(n===e[0]){if(o===e[1])return;"class"===n?$.call(this,o,e[1]):m.call(this,n,o)}else l.call(this,e[0]),m.call(this,n,o)}else{for(let n in e)n in t||("class"===n?$.call(this,"",e[n]):l.call(this,n));for(let n in t){const o=t[n];o!==e[n]&&("class"===n?$.call(this,o,e[n]):m.call(this,n,o))}}}function v(t){const e={};switch(typeof t){case"string":const n=f.call(t);if(!n)return{};let o=d.call(n,p);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=f.call(n),!n)continue;const t=d.call(n,p);for(let n of t)e[n]=o}}return e;case"undefined":return{};case"number":return{[t]:!0};default:return{[t]:!0}}}function w(t){t=""===t?{}:v(t);const e=this.classList;for(let n in t)c.call(e,n)}function $(t,e){e=""===e?{}:v(e),t=""===t?{}:v(t);const n=this.classList;for(let o in e)o in t||h.call(n,o);for(let o in t)o in e||c.call(n,o)}function x(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)}class N extends EventTarget{trigger(t,e){this.dispatchEvent(new CustomEvent(t,{detail:e}))}}class k extends String{}function E(t){const e=t.split(".")[0],o=t.includes(".capture");return t.includes(".synthetic")?function(t,e=!1){let o=`__event__synthetic_${t}`;e&&(o=`${o}_capture`);!function(t,e,o=!1){if(_[e])return;document.addEventListener(t,(t=>function(t,e){let o=e.target;for(;null!==o;){const r=o[t];if(r)for(const t of Object.values(r)){if(n.mainEventHandler(t,e,o))return}o=o.parentNode}}(e,t)),{capture:o}),_[e]=!0}(t,o,e);const r=T++;function i(t){const e=this[o]||{};e[r]=t,this[o]=e}function s(){delete this[o]}return{setup:i,update:i,remove:s}}(e,o):function(t,e=!1){let o=`__event__${t}_${A++}`;e&&(o=`${o}_capture`);function r(t){const e=t.currentTarget;if(!e||!x(e))return;const r=e[o];r&&n.mainEventHandler(r,t,e)}function i(n){this[o]=n,this.addEventListener(t,r,{capture:e})}function s(){delete this[o],this.removeEventListener(t,r,{capture:e})}function l(t){this[o]=t}return{setup:i,update:l,remove:s}}(e,o)}let A=1;let T=1;const _={};const S=Node.prototype,C=S.insertBefore,O=(D=S,L="textContent",Object.getOwnPropertyDescriptor(D,L)).set;var D,L;const B=S.removeChild;class R{constructor(t){this.children=t}mount(t,e){const n=this.children,o=n.length,r=new Array(o);for(let i=0;i<o;i++){let o=n[i];if(o)o.mount(t,e);else{const n=document.createTextNode("");r[i]=n,C.call(t,n,e)}}this.anchors=r,this.parentEl=t}moveBeforeDOMNode(t,e=this.parentEl){this.parentEl=e;const n=this.children,o=this.anchors;for(let r=0,i=n.length;r<i;r++){let i=n[r];if(i)i.moveBeforeDOMNode(t,e);else{const n=o[r];C.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,r=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=r[t];C.call(o,n,e)}}}patch(t,e){if(this===t)return;const n=this.children,o=t.children,r=this.anchors,i=this.parentEl;for(let t=0,s=n.length;t<s;t++){const s=n[t],l=o[t];if(s)if(l)s.patch(l,e);else{const o=s.firstNode(),l=document.createTextNode("");r[t]=l,C.call(i,l,o),e&&s.beforeRemove(),s.remove(),n[t]=void 0}else if(l){n[t]=l;const e=r[t];l.mount(i,e),B.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)O.call(t,"");else{const e=this.children,n=this.anchors;for(let o=0,r=e.length;o<r;o++){const r=e[o];r?r.remove():B.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 P(t){return new R(t)}const j=Node.prototype,M=CharacterData.prototype,I=j.insertBefore,W=((t,e)=>Object.getOwnPropertyDescriptor(t,e))(M,"data").set,F=j.removeChild;class V{constructor(t){this.text=t}mountNode(t,e,n){this.parentEl=e,I.call(e,t,n),this.el=t}moveBeforeDOMNode(t,e=this.parentEl){this.parentEl=e,I.call(e,this.el,t)}moveBeforeVNode(t,e){I.call(this.parentEl,this.el,t?t.el:e)}beforeRemove(){}remove(){F.call(this.parentEl,this.el)}firstNode(){return this.el}toString(){return this.text}}class K extends V{mount(t,e){this.mountNode(document.createTextNode(q(this.text)),t,e)}patch(t){const e=t.text;this.text!==e&&(W.call(this.el,q(e)),this.text=e)}}class z extends V{mount(t,e){this.mountNode(document.createComment(q(this.text)),t,e)}patch(){}}function H(t){return new K(t)}function U(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 G=(t,e)=>Object.getOwnPropertyDescriptor(t,e),X=Node.prototype,Y=Element.prototype,Z=G(CharacterData.prototype,"data").set,J=G(X,"firstChild").get,Q=G(X,"nextSibling").get,tt=()=>{};function et(t){return function(e){this[t]=0===e?0:e?e.valueOf():""}}const nt={};function ot(t){if(t in nt)return nt[t];const e=(new DOMParser).parseFromString(`<t>${t}</t>`,"text/xml").firstChild.firstChild;n.shouldNormalizeDom&&rt(e);const o=it(e),r=at(o),i=function(t,e){let n=function(t,e){const{refN:n,collectors:o,children:r}=e,i=o.length;e.locations.sort(((t,e)=>t.idx-e.idx));const s=e.locations.map((t=>({refIdx:t.refIdx,setData:t.setData,updateData:t.updateData}))),l=s.length,a=r.length,c=r,h=n>0,u=X.cloneNode,d=X.insertBefore,f=Y.remove;class p{constructor(t){this.data=t}beforeRemove(){}remove(){f.call(this.el)}firstNode(){return this.el}moveBeforeDOMNode(t,e=this.parentEl){this.parentEl=e,d.call(e,this.el,t)}moveBeforeVNode(t,e){d.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=u.call(t,!0);d.call(e,o,n),this.el=o,this.parentEl=e}patch(t,e){}}h&&(p.prototype.mount=function(e,r){const h=u.call(t,!0),f=new Array(n);this.refs=f,f[0]=h;for(let t=0;t<i;t++){const e=o[t];f[e.idx]=e.getVal.call(f[e.prevIdx])}if(l){const t=this.data;for(let e=0;e<l;e++){const n=s[e];n.setData.call(f[n.refIdx],t[e])}}if(d.call(e,h,r),a){const t=this.children;for(let e=0;e<a;e++){const n=t[e];if(n){const t=c[e],o=t.afterRefIdx?f[t.afterRefIdx]:null;n.isOnlyChild=t.isOnlyChild,n.mount(f[t.parentRefIdx],o)}}}this.el=h,this.parentEl=e},p.prototype.patch=function(t,e){if(this===t)return;const n=this.refs;if(l){const e=this.data,o=t.data;for(let t=0;t<l;t++){const r=e[t],i=o[t];if(r!==i){const e=s[t];e.updateData.call(n[e.refIdx],i,r)}}this.data=o}if(a){let o=this.children;const r=t.children;for(let t=0;t<a;t++){const i=o[t],s=r[t];if(i)s?i.patch(s,e):(e&&i.beforeRemove(),i.remove(),o[t]=void 0);else if(s){const e=c[t],r=e.afterRefIdx?n[e.afterRefIdx]:null;s.mount(n[e.parentRefIdx],r),o[t]=s}}}});return p}(t,e);if(e.cbRefs.length){const t=e.cbRefs,o=e.refList;let r=t.length;n=class extends n{mount(t,e){o.push(new Array(r)),super.mount(t,e);for(let t of o.pop())t()}remove(){super.remove();for(let e of t){(0,this.data[e])(null)}}}}if(e.children.length)return n=class extends n{constructor(t,e){super(t),this.children=e}},n.prototype.beforeRemove=R.prototype.beforeRemove,(t,e=[])=>new n(t,e);return t=>new n(t)}(o.el,r);return nt[t]=i,i}function rt(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)rt(t.childNodes.item(e))}else t.remove()}function it(t,e=null,n=null){switch(t.nodeType){case Node.ELEMENT_NODE:{let o=n&&n.currentNS;const r=t.tagName;let i;const s=[];if(r.startsWith("block-text-")){const t=parseInt(r.slice(11),10);s.push({type:"text",idx:t}),i=document.createTextNode("")}if(r.startsWith("block-child-")){n.isRef||st(n);const t=parseInt(r.slice(12),10);s.push({type:"child",idx:t}),i=document.createTextNode("")}if(o||(o=t.namespaceURI),i||(i=o?document.createElementNS(o,r):document.createElement(r)),i instanceof Element){if(!n){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);s.push({type:"handler",idx:t,event:o})}else if(n.startsWith("block-attribute-")){const t=parseInt(n.slice(16),10);s.push({type:"attribute",idx:t,name:o,tag:r})}else if(n.startsWith("block-property-")){const t=parseInt(n.slice(15),10);s.push({type:"property",idx:t,name:o,tag:r})}else"block-attributes"===n?s.push({type:"attributes",idx:parseInt(o,10)}):"block-ref"===n?s.push({type:"ref",idx:parseInt(o,10)}):i.setAttribute(e[t].name,o)}}const l={parent:e,firstChild:null,nextSibling:null,el:i,info:s,refN:0,currentNS:o};if(t.firstChild){const e=t.childNodes[0];if(1===t.childNodes.length&&e.nodeType===Node.ELEMENT_NODE&&e.tagName.startsWith("block-child-")){const t=e.tagName,n=parseInt(t.slice(12),10);s.push({idx:n,type:"child",isOnlyChild:!0})}else{l.firstChild=it(t.firstChild,l,l),i.appendChild(l.firstChild.el);let e=t.firstChild,n=l.firstChild;for(;e=e.nextSibling;)n.nextSibling=it(e,n,l),i.appendChild(n.nextSibling.el),n=n.nextSibling}}return l.info.length&&st(l),l}case Node.TEXT_NODE:case Node.COMMENT_NODE:return{parent:e,firstChild:null,nextSibling:null,el:t.nodeType===Node.TEXT_NODE?document.createTextNode(t.textContent):document.createComment(t.textContent),info:[],refN:0,currentNS:null}}throw new i("boom")}function st(t){t.isRef=!0;do{t.refN++}while(t=t.parent)}function lt(t){let e=t.parent;for(;e&&e.nextSibling===t;)t=e,e=e.parent;return e}function at(t,e,n){if(!e){e={collectors:[],locations:[],children:new Array(t.info.filter((t=>"child"===t.type)).length),cbRefs:[],refN:t.refN,refList:[]},n=0}if(t.refN){const o=n,r=t.isRef,i=t.firstChild?t.firstChild.refN:0,s=t.nextSibling?t.nextSibling.refN:0;if(r){for(let e of t.info)e.refIdx=o;t.refIdx=o,function(t,e){for(let n of e.info)switch(n.type){case"text":t.locations.push({idx:n.idx,refIdx:n.refIdx,setData:ct,updateData:ct});break;case"child":n.isOnlyChild?t.children[n.idx]={parentRefIdx:n.refIdx,isOnlyChild:!0}:t.children[n.idx]={parentRefIdx:lt(e).refIdx,afterRefIdx:n.refIdx};break;case"property":{const e=n.refIdx,o=et(n.name);t.locations.push({idx:n.idx,refIdx:e,setData:o,updateData:o});break}case"attribute":{const e=n.refIdx;let o,r;"class"===n.name?(r=w,o=$):(r=b(n.name),o=r),t.locations.push({idx:n.idx,refIdx:e,setData:r,updateData:o});break}case"attributes":t.locations.push({idx:n.idx,refIdx:n.refIdx,setData:g,updateData:y});break;case"handler":{const{setup:e,update:o}=E(n.event);t.locations.push({idx:n.idx,refIdx:n.refIdx,setData:e,updateData:o});break}case"ref":const o=t.cbRefs.push(n.idx)-1;t.locations.push({idx:n.idx,refIdx:n.refIdx,setData:ht(o,t.refList),updateData:tt})}}(e,t),n++}if(s){const r=n+i;e.collectors.push({idx:r,prevIdx:o,getVal:Q}),at(t.nextSibling,e,r)}i&&(e.collectors.push({idx:n,prevIdx:o,getVal:J}),at(t.firstChild,e,n))}return e}function ct(t){Z.call(this,q(t))}function ht(t,e){return function(n){e[e.length-1][t]=()=>n(this)}}const ut=Node.prototype,dt=ut.insertBefore,ft=ut.appendChild,pt=ut.removeChild,mt=((t,e)=>Object.getOwnPropertyDescriptor(t,e))(ut,"textContent").set;class bt{constructor(t){this.children=t}mount(t,e){const n=this.children,o=document.createTextNode("");this.anchor=o,dt.call(t,o,e);const r=n.length;if(r){const e=n[0].mount;for(let i=0;i<r;i++)e.call(n[i],t,o)}this.parentEl=t}moveBeforeDOMNode(t,e=this.parentEl){this.parentEl=e;const n=this.children;for(let o=0,r=n.length;o<r;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 r=o[0]||n[0],{mount:i,patch:s,remove:l,beforeRemove:a,moveBeforeVNode:c,firstNode:h}=r,u=this.anchor,d=this.isOnlyChild,f=this.parentEl;if(0===o.length&&d){if(e)for(let t=0,e=n.length;t<e;t++)a.call(n[t]);return mt.call(f,""),void ft.call(f,u)}let p,m=0,b=0,g=n[0],y=o[0],v=n.length-1,w=o.length-1,$=n[v],x=o[w];for(;m<=v&&b<=w;){if(null===g){g=n[++m];continue}if(null===$){$=n[--v];continue}let t=g.key,r=y.key;if(t===r){s.call(g,y,e),o[b]=g,g=n[++m],y=o[++b];continue}let l=$.key,a=x.key;if(l===a){s.call($,x,e),o[w]=$,$=n[--v],x=o[--w];continue}if(t===a){s.call(g,x,e),o[w]=g;const t=o[w+1];c.call(g,t,u),g=n[++m],x=o[--w];continue}if(l===r){s.call($,y,e),o[b]=$;const t=n[m];c.call($,t,u),$=n[--v],y=o[++b];continue}p=p||yt(n,m,v);let d=p[r];if(void 0===d)i.call(y,f,h.call(g)||null);else{const t=n[d];c.call(t,g,null),s.call(t,y,e),o[b]=t,n[d]=null}y=o[++b]}if(m<=v||b<=w)if(m>v){const t=o[w+1],e=t?h.call(t)||null:u;for(let t=b;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)mt.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])}pt.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 gt(t){return new bt(t)}function yt(t,e,n){let o={};for(let r=e;r<=n;r++)o[t[r].key]=r;return o}const vt=Node.prototype,wt=vt.insertBefore,$t=vt.removeChild;class xt{constructor(t){this.content=[],this.html=t}mount(t,e){this.parentEl=t;const n=document.createElement("template");n.innerHTML=this.html,this.content=[...n.content.childNodes];for(let n of this.content)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],r=document.createElement("template");r.innerHTML=e;const i=[...r.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 Nt(t){return new xt(t)}function kt(t,e,n=null){t.mount(e,n)}const Et=new WeakMap,At=new WeakMap;function Tt(t,e){if(!t)return!1;const n=t.fiber;n&&Et.set(n,e);const o=At.get(t);if(o){let t=!1;for(let n=o.length-1;n>=0;n--)try{o[n](e),t=!0;break}catch(t){e=t}if(t)return!0}return Tt(t.parent,e)}function _t(t){let{error:e}=t;e instanceof i||(e=Object.assign(new i('An error occured in the owl lifecycle (see this Error\'s "cause" property)'),{cause:e}));const n="node"in t?t.node:t.fiber.node,o="fiber"in t?t.fiber:n.fiber;if(o){let t=o;do{t.node.fiber=t,t=t.parent}while(t);Et.set(o.root,e)}if(!Tt(n,e)){console.warn("[Owl] Unhandled error. Destroying the root component");try{n.app.destroy()}catch(t){console.error(t)}throw e}}function St(){throw new i("Attempted to render cancelled fiber")}function Ct(t){let e=0;for(let n of t){let t=n.node;n.render=St,0===t.status&&t.cancel(),t.fiber=null,n.bdom?t.forceNextRender=!0:e++,e+=Ct(n.children)}return e}class Ot{constructor(t,e){if(this.bdom=null,this.children=[],this.appliedToDom=!1,this.deep=!1,this.childrenMap={},this.node=t,this.parent=e,e){this.deep=e.deep;const t=e.root;t.setCounter(t.counter+1),this.root=t,e.children.push(this)}else this.root=this}render(){let t=this.root.node,e=t.app.scheduler,n=t.parent;for(;n;){if(n.fiber){let o=n.fiber.root;if(0!==o.counter||!(t.parentKey in n.fiber.childrenMap))return void e.delayedRenders.push(this);n=o.node}t=n,n=n.parent}this._render()}_render(){const t=this.node,e=this.root;if(e){try{this.bdom=!0,this.bdom=t.renderFn()}catch(e){t.app.handleError({node:t,error:e})}e.setCounter(e.counter-1)}}}class Dt extends Ot{constructor(){super(...arguments),this.counter=1,this.willPatch=[],this.patched=[],this.mounted=[],this.locked=!1}complete(){const t=this.node;let e;this.locked=!0;try{for(e of this.willPatch){let t=e.node;if(t.fiber===e){const e=t.component;for(let n of t.willPatch)n.call(e)}}e=void 0,t._patch(),this.locked=!1;let n=this.mounted;for(;e=n.pop();)if(e.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(n){this.locked=!1,t.app.handleError({fiber:e||this,error:n})}}setCounter(t){this.counter=t,0===t&&this.node.app.scheduler.flush()}}class Lt extends Dt{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)kt(e.bdom,this.target);else{const t=this.target.childNodes[0];kt(e.bdom,this.target,t)}e.fiber=null,e.status=1,this.appliedToDom=!0;let n=this.mounted;for(;t=n.pop();)if(t.appliedToDom)for(let e of t.node.mounted)e()}catch(e){this.node.app.handleError({fiber:t,error:e})}}}const Bt=Symbol("Key changes"),Rt=()=>{throw new Error("Called NO_CALLBACK. Owl is broken, please report this to the maintainers.")},Pt=Object.prototype.toString,jt=Object.prototype.hasOwnProperty,Mt=new Set(["Object","Array","Set","Map","WeakMap"]),It=new Set(["Set","Map","WeakMap"]);function Wt(t){return Pt.call(Ht(t)).slice(8,-1)}function Ft(t){return"object"==typeof t&&Mt.has(Wt(t))}function Vt(t,e){return Ft(t)?Qt(t,e):t}const Kt=new WeakSet;function zt(t){return Kt.add(t),t}function Ht(t){return Zt.has(t)?Zt.get(t):t}const Ut=new WeakMap;function qt(t,e,n){if(n===Rt)return;Ut.get(t)||Ut.set(t,new Map);const o=Ut.get(t);o.get(e)||o.set(e,new Set),o.get(e).add(n),Xt.has(n)||Xt.set(n,new Set),Xt.get(n).add(t)}function Gt(t,e){const n=Ut.get(t);if(!n)return;const o=n.get(e);if(o)for(const t of[...o])Yt(t),t()}const Xt=new WeakMap;function Yt(t){const e=Xt.get(t);if(e){for(const n of e){const e=Ut.get(n);if(e)for(const[n,o]of e.entries())o.delete(t),o.size||e.delete(n)}e.clear()}}const Zt=new WeakMap,Jt=new WeakMap;function Qt(t,e=Rt){if(!Ft(t))throw new i("Cannot make the given value reactive");if(Kt.has(t))return t;if(Zt.has(t))return Qt(Zt.get(t),e);Jt.has(t)||Jt.set(t,new WeakMap);const n=Jt.get(t);if(!n.has(e)){const o=Wt(t),r=It.has(o)?function(t,e,n){const o=se[n](t,e);return Object.assign(te(e),{get:(t,n)=>jt.call(o,n)?o[n]:(qt(t,n,e),Vt(t[n],e))})}(t,e,o):te(e),i=new Proxy(t,r);n.set(e,i),Zt.set(i,t)}return n.get(e)}function te(t){return{get(e,n,o){const r=Object.getOwnPropertyDescriptor(e,n);return!r||r.writable||r.configurable?(qt(e,n,t),Vt(Reflect.get(e,n,o),t)):Reflect.get(e,n,o)},set(t,e,n,o){const r=jt.call(t,e),i=Reflect.get(t,e,o),s=Reflect.set(t,e,Ht(n),o);return!r&&jt.call(t,e)&&Gt(t,Bt),(i!==Reflect.get(t,e,o)||"length"===e&&Array.isArray(t))&&Gt(t,e),s},deleteProperty(t,e){const n=Reflect.deleteProperty(t,e);return Gt(t,Bt),Gt(t,e),n},ownKeys:e=>(qt(e,Bt,t),Reflect.ownKeys(e)),has:(e,n)=>(qt(e,Bt,t),Reflect.has(e,n))}}function ee(t,e,n){return o=>(o=Ht(o),qt(e,o,n),Vt(e[t](o),n))}function ne(t,e,n){return function*(){qt(e,Bt,n);const o=e.keys();for(const r of e[t]()){const t=o.next().value;qt(e,t,n),yield Vt(r,n)}}}function oe(t,e){return function(n,o){qt(t,Bt,e),t.forEach((function(r,i,s){qt(t,i,e),n.call(o,Vt(r,e),Vt(i,e),Vt(s,e))}),o)}}function re(t,e,n){return(o,r)=>{o=Ht(o);const i=n.has(o),s=n[e](o),l=n[t](o,r);return i!==n.has(o)&&Gt(n,Bt),s!==n[e](o)&&Gt(n,o),l}}function ie(t){return()=>{const e=[...t.keys()];t.clear(),Gt(t,Bt);for(const n of e)Gt(t,n)}}const se={Set:(t,e)=>({has:ee("has",t,e),add:re("add","has",t),delete:re("delete","has",t),keys:ne("keys",t,e),values:ne("values",t,e),entries:ne("entries",t,e),[Symbol.iterator]:ne(Symbol.iterator,t,e),forEach:oe(t,e),clear:ie(t),get size(){return qt(t,Bt,e),t.size}}),Map:(t,e)=>({has:ee("has",t,e),get:ee("get",t,e),set:re("set","get",t),delete:re("delete","has",t),keys:ne("keys",t,e),values:ne("values",t,e),entries:ne("entries",t,e),[Symbol.iterator]:ne(Symbol.iterator,t,e),forEach:oe(t,e),clear:ie(t),get size(){return qt(t,Bt,e),t.size}}),WeakMap:(t,e)=>({has:ee("has",t,e),get:ee("get",t,e),set:re("set","get",t),delete:re("delete","has",t)})};let le=null;function ae(){if(!le)throw new i("No active component (a hook function should only be called in 'setup')");return le}function ce(t,e){for(let n in e)void 0===t[n]&&(t[n]=e[n])}const he=new WeakMap;function ue(t){const e=ae();let n=he.get(e);return n||(n=function(t){let e=!1;return async(...n)=>{e||(e=!0,await Promise.resolve(),e=!1,t(...n))}}(e.render.bind(e,!1)),he.set(e,n),e.willDestroy.push(Yt.bind(null,n))),Qt(t,n)}class de{constructor(t,e,n,o,r){this.fiber=null,this.bdom=null,this.status=0,this.forceNextRender=!1,this.nextProps=null,this.children=Object.create(null),this.refs={},this.willStart=[],this.willUpdateProps=[],this.willUnmount=[],this.mounted=[],this.willPatch=[],this.patched=[],this.willDestroy=[],le=this,this.app=n,this.parent=o,this.props=e,this.parentKey=r;const i=t.defaultProps;e=Object.assign({},e),i&&ce(e,i);const s=o&&o.childEnv||n.env;this.childEnv=s;for(const t in e){const n=e[t];n&&"object"==typeof n&&Zt.has(n)&&(e[t]=ue(n))}this.component=new t(e,s,this);const l=Object.assign(Object.create(this.component),{this:this.component});this.renderFn=n.getTemplate(t.template).bind(this.component,l,this),this.component.setup(),le=null}mountComponent(t,e){const n=new Lt(this,t,e);this.app.scheduler.addFiber(n),this.initiateRender(n)}async initiateRender(t){this.fiber=t,this.mounted.length&&t.root.mounted.push(t);const e=this.component;try{await Promise.all(this.willStart.map((t=>t.call(e))))}catch(t){return void this.app.handleError({node:this,error:t})}0===this.status&&this.fiber===t&&t.render()}async render(t){if(this.status>=2)return;let e=this.fiber;if(e&&(e.root.locked||!0===e.bdom)&&(await Promise.resolve(),e=this.fiber),e){if(!e.bdom&&!Et.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-Ct(e.children)),t.locked=!1,e.children=[],e.childrenMap={},e.bdom=null,Et.has(e)&&(Et.delete(e),Et.delete(t),e.appliedToDom=!1),e}const n=new Dt(t,null);return t.willPatch.length&&n.willPatch.push(n),t.patched.length&&n.patched.push(n),n}(this);n.deep=t,this.fiber=n,this.app.scheduler.addFiber(n),await Promise.resolve(),this.status>=2||this.fiber!==n||!e&&n.parent||n.render()}cancel(){this._cancel(),delete this.parent.children[this.parentKey],this.app.scheduler.scheduleDestroy(this)}_cancel(){this.status=2;const t=this.children;for(let e in t)t[e]._cancel()}destroy(){let t=1===this.status;this._destroy(),t&&this.bdom.remove()}_destroy(){const t=this.component;if(1===this.status)for(let e of this.willUnmount)e.call(t);for(let t of Object.values(this.children))t._destroy();if(this.willDestroy.length)try{for(let e of this.willDestroy)e.call(t)}catch(t){this.app.handleError({error:t,node:this})}this.status=3}async updateAndRender(t,e){this.nextProps=t,t=Object.assign({},t);const n=function(t,e){let n=t.fiber;return n&&(Ct(n.children),n.root=null),new Ot(t,e)}(this,e);this.fiber=n;const o=this.component,r=o.constructor.defaultProps;r&&ce(t,r),le=this;for(const e in t){const n=t[e];n&&"object"==typeof n&&Zt.has(n)&&(t[e]=ue(n))}le=null;const i=Promise.all(this.willUpdateProps.map((e=>e.call(o,t))));if(await i,n!==this.fiber)return;o.props=t,n.render();const s=e.root;this.willPatch.length&&s.willPatch.push(n),this.patched.length&&s.patched.push(n)}updateDom(){if(this.fiber)if(this.bdom===this.fiber.bdom)for(let t in this.children){this.children[t].updateDom()}else this.bdom.patch(this.fiber.bdom,!1),this.fiber.appliedToDom=!0,this.fiber=null}setRef(t,e){e&&(this.refs[t]=e)}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(),this.props=this.nextProps)}_patch(){let t=!1;for(let e in this.children){t=!0;break}const e=this.fiber;this.children=e.childrenMap,this.bdom.patch(e.bdom,t),e.appliedToDom=!0,this.fiber=null}beforeRemove(){this._destroy()}remove(){this.bdom.remove()}get name(){return this.component.constructor.name}get subscriptions(){const t=he.get(this);return t?(e=t,[...Xt.get(e)||[]].map((t=>{const n=Ut.get(t);let o=[];if(n)for(const[t,r]of n)r.has(e)&&o.push(t);return{target:t,keys:o}}))):[];var e}}const fe=Symbol("timeout");function pe(t,e){const n=new i(`The following error occurred in ${e}: `),o=new i(`${e}'s promise hasn't resolved after 3 seconds`),r=ae();return(...i)=>{const s=t=>{throw n.cause=t,t instanceof Error?n.message+=`"${t.message}"`:n.message=`Something that is not an Error was thrown in ${e} (see this Error's "cause" property)`,n};try{const n=t(...i);if(n instanceof Promise){if("onWillStart"===e||"onWillUpdateProps"===e){const t=r.fiber;Promise.race([n.catch((()=>{})),new Promise((t=>setTimeout((()=>t(fe)),3e3)))]).then((e=>{e===fe&&r.fiber===t&&console.warn(o)}))}return n.catch(s)}return n}catch(t){s(t)}}}function me(t){const e=ae(),n=e.app.dev?pe:t=>t;e.mounted.push(n(t.bind(e.component),"onMounted"))}function be(t){const e=ae(),n=e.app.dev?pe:t=>t;e.patched.push(n(t.bind(e.component),"onPatched"))}function ge(t){const e=ae(),n=e.app.dev?pe:t=>t;e.willUnmount.unshift(n(t.bind(e.component),"onWillUnmount"))}class ye{constructor(t,e,n){this.props=t,this.env=e,this.__owl__=n}setup(){}render(t=!1){this.__owl__.render(!0===t)}}ye.template="";const ve=H("").constructor;class we extends ve{constructor(t,e){super(""),this.target=null,this.selector=t,this.content=e}mount(t,e){super.mount(t,e),this.target=document.querySelector(this.selector),this.target?this.content.mount(this.target,null):this.content.mount(t,e)}beforeRemove(){this.content.beforeRemove()}remove(){this.content&&(super.remove(),this.content.remove(),this.content=null)}patch(t){super.patch(t),this.content?this.content.patch(t.content,!0):(this.content=t.content,this.content.mount(this.target,null))}}class $e extends ye{setup(){const t=this.__owl__;me((()=>{const e=t.bdom;if(!e.target){const t=document.querySelector(this.props.target);if(!t)throw new i("invalid portal target");e.content.moveBeforeDOMNode(t.firstChild,t)}})),ge((()=>{t.bdom.remove()}))}}$e.template="__portal__",$e.props={target:{type:String},slots:!0};const xe=t=>Array.isArray(t),Ne=t=>"object"!=typeof t,ke=t=>"object"==typeof t&&t&&"value"in t;function Ee(t){return"object"==typeof t&&"optional"in t&&t.optional||!1}function Ae(t){return"*"===t||!0===t?"value":t.name.toLowerCase()}function Te(t){return Ne(t)?Ae(t):xe(t)?t.map(Te).join(" or "):ke(t)?String(t.value):"element"in t?`list of ${Te({type:t.element,optional:!1})}s`:"shape"in t?"object":Te(t.type||"*")}function _e(t,e){var n;Array.isArray(e)&&(n=e,e=Object.fromEntries(n.map((t=>t.endsWith("?")?[t.slice(0,-1),{optional:!0}]:[t,{type:"*",optional:!1}])))),t=Ht(t);let o=[];for(let n in t)if(n in e){let r=Se(n,t[n],e[n]);r&&o.push(r)}else"*"in e||o.push(`unknown key '${n}'`);for(let n in e){const r=e[n];if("*"!==n&&!Ee(r)&&!(n in t)){const t="object"==typeof r&&!Array.isArray(r);let e="*"===r||(t&&"type"in r?"*"===r.type:t)?"":` (should be a ${Te(r)})`;o.push(`'${n}' is missing${e}`)}}return o}function Se(t,e,n){if(void 0===e)return Ee(n)?null:`'${t}' is undefined (should be a ${Te(n)})`;if(Ne(n))return function(t,e,n){if("function"==typeof n)if("object"==typeof e){if(!(e instanceof n))return`'${t}' is not a ${Ae(n)}`}else if(typeof e!==n.name.toLowerCase())return`'${t}' is not a ${Ae(n)}`;return null}(t,e,n);if(ke(n))return e===n.value?null:`'${t}' is not equal to '${n.value}'`;if(xe(n)){let o=n.find((n=>!Se(t,e,n)));return o?null:`'${t}' is not a ${Te(n)}`}let o=null;if("element"in n)o=function(t,e,n){if(!Array.isArray(e))return`'${t}' is not a list of ${Te(n)}s`;for(let o=0;o<e.length;o++){const r=Se(`${t}[${o}]`,e[o],n);if(r)return r}return null}(t,e,n.element);else if("shape"in n)if("object"!=typeof e||Array.isArray(e))o=`'${t}' is not an object`;else{const r=_e(e,n.shape);r.length&&(o=`'${t}' doesn't have the correct shape (${r.join(", ")})`)}else if("values"in n)if("object"!=typeof e||Array.isArray(e))o=`'${t}' is not an object`;else{const r=Object.entries(e).map((([t,e])=>Se(t,e,n.values))).filter(Boolean);r.length&&(o=`some of the values in '${t}' are invalid (${r.join(", ")})`)}return"type"in n&&!o&&(o=Se(t,e,n.type)),"validate"in n&&!o&&(o=n.validate(e)?null:`'${t}' is not valid`),o}const Ce=Object.create;function Oe(t){const e=Ce(t);for(let n in t)e[n]=t[n];return e}const De=Symbol("isBoundary");class Le{constructor(t,e,n,o,r){this.fn=t,this.ctx=Oe(e),this.component=n,this.node=o,this.key=r}evaluate(){return this.fn.call(this.component,this.ctx,this.node,this.key)}toString(){return this.evaluate().toString()}}function Be(t,e,n){const o="string"!=typeof t?t:n.constructor.components[t];if(!o)return;const r=o.props;if(!r)return void(n.__owl__.app.warnIfNoStaticProps&&console.warn(`Component '${o.name}' does not have a static props description`));const s=o.defaultProps;if(s){let t=t=>Array.isArray(r)?r.includes(t):t in r&&!("*"in r)&&!Ee(r[t]);for(let e in s)if(t(e))throw new i(`A default value cannot be defined for a mandatory prop (name: '${e}', component: ${o.name})`)}const l=_e(e,r);if(l.length)throw new i(`Invalid props for component '${o.name}': `+l.join(", "))}const Re={withDefault:function(t,e){return null==t||!1===t?e:t},zero:Symbol("zero"),isBoundary:De,callSlot:function(t,e,n,o,i,s,l){n=n+"__slot_"+o;const a=t.props.slots||{},{__render:c,__ctx:h,__scope:u}=a[o]||{},d=Ce(h||{});u&&(d[u]=s);const f=c?c(d,e,n):null;if(l){let s,a;return f?s=i?r(o,f):f:a=l(t,e,n),P([s,a])}return f||H("")},capture:Oe,withKey:function(t,e){return t.key=e,t},prepareList:function(t){let e,n;if(Array.isArray(t))e=t,n=t;else if(t instanceof Map)e=[...t.keys()],n=[...t.values()];else if(Symbol.iterator in Object(t))e=[...t],n=e;else{if(!t||"object"!=typeof t)throw new i(`Invalid loop expression: "${t}" is not iterable`);n=Object.values(t),e=Object.keys(t)}const o=n.length;return[e,n,o,new Array(o)]},setContextValue:function(t,e,n){const o=t;for(;!t.hasOwnProperty(e)&&!t.hasOwnProperty(De);){const e=t.__proto__;if(!e){t=o;break}t=e}t[e]=n},shallowEqual:function(t,e){for(let n=0,o=t.length;n<o;n++)if(t[n]!==e[n])return!1;return!0},toNumber:function(t){const e=parseFloat(t);return isNaN(e)?t:e},validateProps:Be,LazyValue:Le,safeOutput:function(t,e){if(null==t)return e?r("default",e):r("undefined",H(""));let n,o;switch(typeof t){case"object":t instanceof k?(n="string_safe",o=Nt(t)):t instanceof Le?(n="lazy_value",o=t.evaluate()):t instanceof String?(n="string_unsafe",o=H(t)):(n="block_safe",o=t);break;case"string":n="string_unsafe",o=H(t);break;default:n="string_unsafe",o=H(String(t))}return r(n,o)},createCatcher:function(t){const e=Object.keys(t).length;class n{constructor(t,e){this.handlerFns=[],this.afterNode=null,this.child=t,this.handlerData=e}mount(e,n){this.parentEl=e,this.child.mount(e,n),this.afterNode=document.createTextNode(""),e.insertBefore(this.afterNode,n),this.wrapHandlerData();for(let n in t){const o=t[n],r=E(n);this.handlerFns[o]=r,r.setup.call(e,this.handlerData[o])}}wrapHandlerData(){for(let t=0;t<e;t++){let e=this.handlerData[t],n=e.length-2,o=e[n];const r=this;e[n]=function(t){const e=t.target;let n=r.child.firstNode();const i=r.afterNode;for(;n&&n!==i;){if(n.contains(e))return o.call(this,t);n=n.nextSibling}}}}moveBeforeDOMNode(t,e=this.parentEl){this.parentEl=e,this.child.moveBeforeDOMNode(t,e),e.insertBefore(this.afterNode,t)}moveBeforeVNode(t,e){t&&(e=t.firstNode()||e),this.child.moveBeforeVNode(t?t.child:null,e),this.parentEl.insertBefore(this.afterNode,e)}patch(t,n){if(this!==t){this.handlerData=t.handlerData,this.wrapHandlerData();for(let t=0;t<e;t++)this.handlerFns[t].update.call(this.parentEl,this.handlerData[t]);this.child.patch(t.child,n)}}beforeRemove(){this.child.beforeRemove()}remove(){for(let t=0;t<e;t++)this.handlerFns[t].remove.call(this.parentEl);this.child.remove(),this.afterNode.remove()}firstNode(){return this.child.firstNode()}toString(){return this.child.toString()}}return function(t,e){return new n(t,e)}},markRaw:zt,OwlError:i,makeRefWrapper:function(t){let e=new Set;return(n,o)=>{if(e.has(n))throw new i(`Cannot set the same ref more than once in the same component, ref "${n}" was set multiple times in ${t.name}`);return e.add(n),o}}};function Pe(t){const e=(new DOMParser).parseFromString(t,"text/xml");if(e.getElementsByTagName("parsererror").length){let n="Invalid XML in template.";const o=e.getElementsByTagName("parsererror")[0].textContent;if(o){n+="\nThe parser has produced the following error message:\n"+o;const e=/\d+/g,r=e.exec(o);if(r){const i=Number(r[0]),s=t.split("\n")[i-1],l=e.exec(o);if(s&&l){const t=Number(l[0])-1;s[t]&&(n+=`\nThe error might be located at xml line ${i} column ${t}\n${s}\n${"-".repeat(t-1)}^`)}}}throw new i(n)}return e}const je={text:H,createBlock:ot,list:gt,multi:P,html:Nt,toggler:r,comment:U};class Me{constructor(t={}){if(this.rawTemplates=Object.create(Ie),this.templates={},this.Portal=$e,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}static registerTemplate(t,e){Ie[t]=e}addTemplate(t,e){if(t in this.rawTemplates){if(!this.dev)return;const n=this.rawTemplates[t];if(("string"==typeof n?n:n instanceof Element?n.outerHTML:n.toString())===("string"==typeof e?e:e.outerHTML))return;throw new i(`Template ${t} already defined with different content`)}this.rawTemplates[t]=e}addTemplates(t){if(t){t=t instanceof Document?t:Pe(t);for(const e of t.querySelectorAll("[t-name]")){const t=e.getAttribute("t-name");this.addTemplate(t,e)}}}getTemplate(t){var e;if(!(t in this.templates)){const n=(null===(e=this.getRawTemplate)||void 0===e?void 0:e.call(this,t))||this.rawTemplates[t];if(void 0===n){let e="";try{e=` (for component "${ae().component.constructor.name}")`}catch{}throw new i(`Missing template: "${t}"${e}`)}const o="function"==typeof n&&!(n instanceof Element)?n:this._compileTemplate(t,n),r=this.templates;this.templates[t]=function(e,n){return r[t].call(this,e,n)};const s=o(this,je,Re);this.templates[t]=s}return this.templates[t]}_compileTemplate(t,e){throw new i("Unable to compile a template. Please use owl full build instead")}callTemplate(t,e,n,o,i){return r(e,this.getTemplate(e).call(t,n,o,i+e))}}const Ie={};function We(...t){const e="__template__"+We.nextId++,n=String.raw(...t);return Ie[e]=n,e}We.nextId=1,Me.registerTemplate("__portal__",(function(t,e,n){let{callSlot:o}=n;return function(t,e,n=""){return new we(t.props.target,o(t,e,n,"default",!1,null))}}));const Fe="true,false,NaN,null,undefined,debugger,console,window,in,instanceof,new,function,return,eval,void,Math,RegExp,Array,Object,Date".split(","),Ve=Object.assign(Object.create(null),{and:"&&",or:"||",gt:">",gte:">=",lt:"<",lte:"<="}),Ke=Object.assign(Object.create(null),{"{":"LEFT_BRACE","}":"RIGHT_BRACE","[":"LEFT_BRACKET","]":"RIGHT_BRACKET",":":"COLON",",":"COMMA","(":"LEFT_PAREN",")":"RIGHT_PAREN"}),ze="...,.,===,==,+,!==,!=,!,||,&&,>=,>,<=,<,?,-,*,/,%,typeof ,=>,=,;,in ,new ,|,&,^,~".split(",");const He=[function(t){let e=t[0],n=e;if("'"!==e&&'"'!==e&&"`"!==e)return!1;let o,r=1;for(;t[r]&&t[r]!==n;){if(o=t[r],e+=o,"\\"===o){if(r++,o=t[r],!o)throw new i("Invalid expression");e+=o}r++}if(t[r]!==n)throw new i("Invalid expression");return e+=n,"`"===n?{type:"TEMPLATE_STRING",value:e,replace:t=>e.replace(/\$\{(.*?)\}/g,((e,n)=>"${"+t(n)+"}"))}:{type:"VALUE",value:e}},function(t){let e=t[0];if(e&&e.match(/[0-9]/)){let n=1;for(;t[n]&&t[n].match(/[0-9]|\./);)e+=t[n],n++;return{type:"VALUE",value:e}}return!1},function(t){for(let e of ze)if(t.startsWith(e))return{type:"OPERATOR",value:e};return!1},function(t){let e=t[0];if(e&&e.match(/[a-zA-Z_\$]/)){let n=1;for(;t[n]&&t[n].match(/\w/);)e+=t[n],n++;return e in Ve?{type:"OPERATOR",value:Ve[e],size:e.length}:{type:"SYMBOL",value:e}}return!1},function(t){const e=t[0];return!(!e||!(e in Ke))&&{type:Ke[e],value:e}}];const Ue=t=>t&&("LEFT_BRACE"===t.type||"COMMA"===t.type),qe=t=>t&&("RIGHT_BRACE"===t.type||"COMMA"===t.type);function Ge(t){const e=new Set,n=function(t){const e=[];let n,o=!0,r=t;try{for(;o;)if(r=r.trim(),r){for(let t of He)if(o=t(r),o){e.push(o),r=r.slice(o.size||o.value.length);break}}else o=!1}catch(t){n=t}if(r.length||n)throw new i(`Tokenizer error: could not tokenize \`${t}\``);return e}(t);let o=0,r=[];for(;o<n.length;){let t=n[o],i=n[o-1],s=n[o+1],l=r[r.length-1];switch(t.type){case"LEFT_BRACE":case"LEFT_BRACKET":r.push(t.type);break;case"RIGHT_BRACE":case"RIGHT_BRACKET":r.pop()}let a="SYMBOL"===t.type&&!Fe.includes(t.value);if("SYMBOL"!==t.type||Fe.includes(t.value)||i&&("LEFT_BRACE"===l&&Ue(i)&&qe(s)&&(n.splice(o+1,0,{type:"COLON",value:":"},{...t}),s=n[o+1]),"OPERATOR"===i.type&&"."===i.value?a=!1:"LEFT_BRACE"!==i.type&&"COMMA"!==i.type||s&&"COLON"===s.type&&(a=!1)),"TEMPLATE_STRING"===t.type&&(t.value=t.replace((t=>Ye(t)))),s&&"OPERATOR"===s.type&&"=>"===s.value)if("RIGHT_PAREN"===t.type){let t=o-1;for(;t>0&&"LEFT_PAREN"!==n[t].type;)"SYMBOL"===n[t].type&&n[t].originalValue&&(n[t].value=n[t].originalValue,e.add(n[t].value)),t--}else e.add(t.value);a&&(t.varName=t.value,e.has(t.value)||(t.originalValue=t.value,t.value=`ctx['${t.value}']`)),o++}for(const t of n)"SYMBOL"===t.type&&t.varName&&e.has(t.value)&&(t.originalValue=t.value,t.value=`_${t.value}`,t.isLocal=!0);return n}const Xe=new Map([["in "," in "]]);function Ye(t){return Ge(t).map((t=>Xe.get(t.value)||t.value)).join("")}const Ze=/\{\{.*?\}\}|\#\{.*?\}/g;function Je(t,e){let n=t.match(Ze);if(n&&n[0].length===t.length)return`(${e(t.slice(2,"{"===n[0][0]?-2:-1))})`;let o=t.replace(Ze,(t=>"${"+e(t.slice(2,"{"===t[0]?-2:-1))+"}"));return"`"+o+"`"}function Qe(t){return Je(t,Ye)}const tn=/\s+/g,en=document.implementation.createDocument(null,null,null),nn=new Set(["stop","capture","prevent","self","synthetic"]);let on={};function rn(t=""){return on[t]=(on[t]||0)+1,t+on[t]}function sn(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}class ln{constructor(t,e){this.dynamicTagName=null,this.isRoot=!1,this.hasDynamicChildren=!1,this.children=[],this.data=[],this.childNumber=0,this.parentVar="",this.id=ln.nextBlockId++,this.varName="b"+this.id,this.blockName="block"+this.id,this.target=t,this.type=e}insertData(t,e="d"){const n=rn(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=en.createElement("t");return t.appendChild(this.dom),t.innerHTML}}function an(t,e){return Object.assign({block:null,index:0,forceNewBlock:!0,translate:t.translate,tKeyExpr:null,nameSpace:t.nameSpace,tModelSelectedExpr:t.tModelSelectedExpr},e)}ln.nextBlockId=1;class cn{constructor(t,e){this.indentLevel=0,this.loopLevel=0,this.code=[],this.hasRoot=!1,this.hasCache=!1,this.shouldProtectScope=!1,this.hasRefWrapper=!1,this.name=t,this.on=e||null}addLine(t,e){const n=new Array(this.indentLevel+2).join(" ");void 0===e?this.code.push(n+t):this.code.splice(e,0,n+t)}generateCode(){let t=[];t.push(`function ${this.name}(ctx, node, key = "") {`),this.shouldProtectScope&&(t.push(" ctx = Object.create(ctx);"),t.push(" ctx[isBoundary] = 1")),this.hasRefWrapper&&t.push(" let refWrapper = makeRefWrapper(this.__owl__);"),this.hasCache&&(t.push(" let cache = ctx.cache || {};"),t.push(" let nextCache = ctx.cache = {};"));for(let e of this.code)t.push(e);return this.hasRoot||t.push("return text('');"),t.push("}"),t.join("\n ")}currentKey(t){let e=this.loopLevel?`key${this.loopLevel}`:"key";return t.tKeyExpr&&(e=`${t.tKeyExpr} + ${e}`),e}}const hn=["label","title","placeholder","alt"],un=/^(\s*)([\s\S]+?)(\s*)$/;class dn{constructor(t,e){if(this.blocks=[],this.nextBlockId=1,this.isDebug=!1,this.targets=[],this.target=new cn("template"),this.translatableAttributes=hn,this.staticDefs=[],this.slotNames=new Set,this.helpers=new Set,this.translateFn=e.translateFn||(t=>t),e.translatableAttributes){const t=new Set(hn);for(let n of e.translatableAttributes)n.startsWith("-")?t.delete(n.slice(1)):t.add(n);this.translatableAttributes=[...t]}this.hasSafeContext=e.hasSafeContext||!1,this.dev=e.dev||!1,this.ast=t,this.templateName=e.name}generateCode(){const t=this.ast;this.isDebug=12===t.type,ln.nextBlockId=1,on={},this.compileAST(t,{block:null,index:0,forceNewBlock:!1,isLast:!0,translate:!0,tKeyExpr:null});let e=[" let { text, createBlock, list, multi, html, toggler, comment } = bdom;"];this.helpers.size&&e.push(`let { ${[...this.helpers].join(", ")} } = helpers;`),this.templateName&&e.push(`// Template name: "${this.templateName}"`);for(let{id:t,expr:n}of this.staticDefs)e.push(`const ${t} = ${n};`);if(this.blocks.length){e.push("");for(let t of this.blocks)if(t.dom){let n=t.asXmlString();n=n.replace(/\\/g,"\\\\").replace(/`/g,"\\`"),t.dynamicTagName?(n=n.replace(/^<\w+/,`<\${tag || '${t.dom.nodeName}'}`),n=n.replace(/\w+>$/,`\${tag || '${t.dom.nodeName}'}>`),e.push(`let ${t.blockName} = tag => createBlock(\`${n}\`);`)):e.push(`let ${t.blockName} = createBlock(\`${n}\`);`)}}if(this.targets.length)for(let t of this.targets)e.push(""),e=e.concat(t.generateCode());e.push(""),e=e.concat("return "+this.target.generateCode());const n=e.join("\n ");if(this.isDebug){const t=`[Owl Debug]\n${n}`;console.log(t)}return n}compileInNewTarget(t,e,n,o){const r=rn(t),i=this.target,s=new cn(r,o);return this.targets.push(s),this.target=s,this.compileAST(e,an(n)),this.target=i,r}addLine(t,e){this.target.addLine(t,e)}define(t,e){this.addLine(`const ${t} = ${e};`)}insertAnchor(t,e=t.children.length){const n=`block-child-${e}`,o=en.createElement(n);t.insert(o)}createBlock(t,e,n){const o=this.target.hasRoot,r=new ln(this.target,e);return o||(this.target.hasRoot=!0,r.isRoot=!0),t&&(t.children.push(r),"list"===t.type&&(r.parentVar=`c_block${t.id}`)),r}insertBlock(t,e,n){let o=e.generateExpr(t);if(e.parentVar){let t=this.target.currentKey(n);return this.helpers.add("withKey"),void this.addLine(`${e.parentVar}[${n.index}] = withKey(${o}, ${t});`)}n.tKeyExpr&&(o=`toggler(${n.tKeyExpr}, ${o})`),e.isRoot?(this.target.on&&(o=this.wrapWithEventCatcher(o,this.target.on)),this.addLine(`return ${o};`)):this.define(e.varName,o)}captureExpression(t,e=!1){if(!e&&!t.includes("=>"))return Ye(t);const n=Ge(t),o=new Map;return n.map((t=>{if(t.varName&&!t.isLocal){if(!o.has(t.varName)){const e=rn("v");o.set(t.varName,e),this.define(e,t.value)}t.value=o.get(t.varName)}return t.value})).join("")}translate(t){const e=un.exec(t);return e[1]+this.translateFn(e[2])+e[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 4:return this.compileTEsc(t,e);case 8:return this.compileTOut(t,e);case 5:return this.compileTIf(t,e);case 9:return this.compileTForeach(t,e);case 10:return this.compileTKey(t,e);case 3:return this.compileMulti(t,e);case 7:return this.compileTCall(t,e);case 15:return this.compileTCallBlock(t,e);case 6:return this.compileTSet(t,e);case 11:return this.compileComponent(t,e);case 12:return this.compileDebug(t,e);case 13:return this.compileLog(t,e);case 14:return this.compileTSlot(t,e);case 16:return this.compileTTranslation(t,e);case 17:return this.compileTPortal(t,e)}}compileDebug(t,e){return this.addLine("debugger;"),t.content?this.compileAST(t.content,e):null}compileLog(t,e){return this.addLine(`console.log(${Ye(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(\`${t.value}\`)`,n,{...e,forceNewBlock:o&&!n});else{const e=en.createComment(t.value);n.insert(e)}return n.varName}compileText(t,e){let{block:n,forceNewBlock:o}=e,r=t.value;if(r&&!1!==e.translate&&(r=this.translate(r)),e.inPreTag||(r=r.replace(tn," ")),!n||o)n=this.createBlock(n,"text",e),this.insertBlock(`text(\`${r}\`)`,n,{...e,forceNewBlock:o&&!n});else{const e=0===t.type?en.createTextNode:en.createComment;n.insert(e.call(en,r))}return n.varName}generateHandlerCode(t,e){const n=t.split(".").slice(1).map((t=>{if(!nn.has(t))throw new i(`Unknown event modifier: '${t}'`);return`"${t}"`}));let o="";return n.length&&(o=`${n.join(",")}, `),`[${o}${this.captureExpression(e)}, ctx]`}compileTDomNode(t,e){let{block:n,forceNewBlock:o}=e;const r=!n||o||null!==t.dynamicTag||t.ns;let i=this.target.code.length;if(r&&((t.dynamicTag||e.tKeyExpr||t.ns)&&e.block&&this.insertAnchor(e.block),n=this.createBlock(n,"block",e),this.blocks.push(n),t.dynamicTag)){const e=rn("tag");this.define(e,Ye(t.dynamicTag)),n.dynamicTagName=e}const s={};for(let o in t.attrs){let r,i;if(o.startsWith("t-attf")){r=Qe(t.attrs[o]);const e=n.insertData(r,"attr");i=o.slice(7),s["block-attribute-"+e]=i}else if(o.startsWith("t-att"))if(i="t-att"===o?null:o.slice(6),r=Ye(t.attrs[o]),i&&sn(t.tag,i)){"readonly"===i&&(i="readOnly"),r="value"===i?`new String((${r}) === 0 ? 0 : ((${r}) || ""))`:`new Boolean(${r})`;s[`block-property-${n.insertData(r,"prop")}`]=i}else{const t=n.insertData(r,"attr");"t-att"===o?s["block-attributes"]=String(t):s[`block-attribute-${t}`]=i}else this.translatableAttributes.includes(o)?s[o]=this.translateFn(t.attrs[o]):(r=`"${t.attrs[o]}"`,i=o,s[o]=t.attrs[o]);if("value"===i&&e.tModelSelectedExpr){s[`block-attribute-${n.insertData(`${e.tModelSelectedExpr} === ${r}`,"attr")}`]="selected"}}let l;if(t.model){const{hasDynamicChildren:e,baseExpr:o,expr:r,eventType:i,shouldNumberize:a,shouldTrim:c,targetAttr:h,specialInitTargetAttr:u}=t.model,d=Ye(o),f=rn("bExpr");this.define(f,d);const p=Ye(r),m=rn("expr");this.define(m,p);const b=`${f}[${m}]`;let g;if(u){let e=h in s&&`'${s[h]}'`;if(!e&&t.attrs){const n=t.attrs[`t-att-${h}`];n&&(e=Ye(n))}g=n.insertData(`${b} === ${e}`,"prop"),s[`block-property-${g}`]=u}else if(e){l=`${rn("bValue")}`,this.define(l,b)}else g=n.insertData(`${b}`,"prop"),s[`block-property-${g}`]=h;this.helpers.add("toNumber");let y=`ev.target.${h}`;y=c?`${y}.trim()`:y,y=a?`toNumber(${y})`:y;const v=`[(ev) => { ${b} = ${y}; }]`;g=n.insertData(v,"hdlr"),s[`block-handler-${g}`]=i}for(let e in t.on){const o=this.generateHandlerCode(e,t.on[e]);s[`block-handler-${n.insertData(o,"hdlr")}`]=e}if(t.ref){this.dev&&(this.helpers.add("makeRefWrapper"),this.target.hasRefWrapper=!0);const e=Ze.test(t.ref);let o=`\`${t.ref}\``;e&&(o=Je(t.ref,(t=>this.captureExpression(t,!0))));let r=`(el) => this.__owl__.setRef((${o}), el)`;this.dev&&(r=`refWrapper(${o}, ${r})`);const i=n.insertData(r,"ref");s["block-ref"]=String(i)}const a=t.ns||e.nameSpace,c=a?en.createElementNS(a,t.tag):en.createElement(t.tag);for(const[t,e]of Object.entries(s))"class"===t&&""===e||c.setAttribute(t,e);if(n.insert(c),t.content.length){const o=n.currentDom;n.currentDom=c;const r=t.content;for(let o=0;o<r.length;o++){const i=t.content[o],s=an(e,{block:n,index:n.childNumber,forceNewBlock:!1,isLast:e.isLast&&o===r.length-1,tKeyExpr:e.tKeyExpr,nameSpace:a,tModelSelectedExpr:l,inPreTag:e.inPreTag||"pre"===t.tag});this.compileAST(i,s)}n.currentDom=o}if(r&&(this.insertBlock(`${n.blockName}(ddd)`,n,e),n.children.length&&n.hasDynamicChildren)){const t=this.target.code,e=n.children.slice();let o=e.shift();for(let n=i;n<t.length&&(!t[n].trimStart().startsWith(`const ${o.varName} `)||(t[n]=t[n].replace(`const ${o.varName}`,o.varName),o=e.shift(),o));n++);this.addLine(`let ${n.children.map((t=>t.varName)).join(", ")};`,i)}return n.varName}compileTEsc(t,e){let n,{block:o,forceNewBlock:r}=e;if("0"===t.expr?(this.helpers.add("zero"),n="ctx[zero]"):(n=Ye(t.expr),t.defaultValue&&(this.helpers.add("withDefault"),n=`withDefault(${n}, \`${t.defaultValue}\`)`)),!o||r)o=this.createBlock(o,"text",e),this.insertBlock(`text(${n})`,o,{...e,forceNewBlock:r&&!o});else{const t=o.insertData(n,"txt"),e=en.createElement(`block-text-${t}`);o.insert(e)}return o.varName}compileTOut(t,e){let n,{block:o}=e;if(o&&this.insertAnchor(o),o=this.createBlock(o,"html",e),"0"===t.expr)this.helpers.add("zero"),n="ctx[zero]";else if(t.body){let o=null;o=ln.nextBlockId;const r=an(e);this.compileAST({type:3,content:t.body},r),this.helpers.add("safeOutput"),n=`safeOutput(${Ye(t.expr)}, b${o})`}else this.helpers.add("safeOutput"),n=`safeOutput(${Ye(t.expr)})`;return this.insertBlock(n,o,e),o.varName}compileTIfBranch(t,e,n){this.target.indentLevel++;let o=e.children.length;this.compileAST(t,an(n,{block:e,index:n.index})),e.children.length>o&&this.insertAnchor(e,o),this.target.indentLevel--}compileTIf(t,e,n){let{block:o,forceNewBlock:r}=e;const i=this.target.code.length,s=!o||"multi"!==o.type&&r;if(o&&(o.hasDynamicChildren=!0),(!o||"multi"!==o.type&&r)&&(o=this.createBlock(o,"multi",e)),this.addLine(`if (${Ye(t.condition)}) {`),this.compileTIfBranch(t.content,o,e),t.tElif)for(let n of t.tElif)this.addLine(`} else if (${Ye(n.condition)}) {`),this.compileTIfBranch(n.content,o,e);if(t.tElse&&(this.addLine("} else {"),this.compileTIfBranch(t.tElse,o,e)),this.addLine("}"),s){if(o.children.length){const t=this.target.code,e=o.children.slice();let n=e.shift();for(let o=i;o<t.length&&(!t[o].trimStart().startsWith(`const ${n.varName} `)||(t[o]=t[o].replace(`const ${n.varName}`,n.varName),n=e.shift(),n));o++);this.addLine(`let ${o.children.map((t=>t.varName)).join(", ")};`,i)}const t=o.children.map((t=>t.varName)).join(", ");this.insertBlock(`multi([${t}])`,o,e)}return o.varName}compileTForeach(t,e){let{block:n}=e;n&&this.insertAnchor(n),n=this.createBlock(n,"list",e),this.target.loopLevel++;const o=`i${this.target.loopLevel}`;this.addLine("ctx = Object.create(ctx);");const r=`v_block${n.id}`,i=`k_block${n.id}`,s=`l_block${n.id}`,l=`c_block${n.id}`;let a;this.helpers.add("prepareList"),this.define(`[${i}, ${r}, ${s}, ${l}]`,`prepareList(${Ye(t.collection)});`),this.dev&&this.define(`keys${n.id}`,"new Set()"),this.addLine(`for (let ${o} = 0; ${o} < ${s}; ${o}++) {`),this.target.indentLevel++,this.addLine(`ctx[\`${t.elem}\`] = ${i}[${o}];`),t.hasNoFirst||this.addLine(`ctx[\`${t.elem}_first\`] = ${o} === 0;`),t.hasNoLast||this.addLine(`ctx[\`${t.elem}_last\`] = ${o} === ${i}.length - 1;`),t.hasNoIndex||this.addLine(`ctx[\`${t.elem}_index\`] = ${o};`),t.hasNoValue||this.addLine(`ctx[\`${t.elem}_value\`] = ${r}[${o}];`),this.define(`key${this.target.loopLevel}`,t.key?Ye(t.key):o),this.dev&&(this.helpers.add("OwlError"),this.addLine(`if (keys${n.id}.has(String(key${this.target.loopLevel}))) { throw new OwlError(\`Got duplicate key in t-foreach: \${key${this.target.loopLevel}}\`)}`),this.addLine(`keys${n.id}.add(String(key${this.target.loopLevel}));`)),t.memo&&(this.target.hasCache=!0,a=rn(),this.define(`memo${a}`,Ye(t.memo)),this.define(`vnode${a}`,`cache[key${this.target.loopLevel}];`),this.addLine(`if (vnode${a}) {`),this.target.indentLevel++,this.addLine(`if (shallowEqual(vnode${a}.memo, memo${a})) {`),this.target.indentLevel++,this.addLine(`${l}[${o}] = vnode${a};`),this.addLine(`nextCache[key${this.target.loopLevel}] = vnode${a};`),this.addLine("continue;"),this.target.indentLevel--,this.addLine("}"),this.target.indentLevel--,this.addLine("}"));const c=an(e,{block:n,index:o});return this.compileAST(t.body,c),t.memo&&this.addLine(`nextCache[key${this.target.loopLevel}] = Object.assign(${l}[${o}], {memo: memo${a}});`),this.target.indentLevel--,this.target.loopLevel--,this.addLine("}"),e.isLast||this.addLine("ctx = ctx.__proto__;"),this.insertBlock("l",n,e),n.varName}compileTKey(t,e){const n=rn("tKey_");return this.define(n,Ye(t.expr)),e=an(e,{tKeyExpr:n,block:e.block,index:e.index}),this.compileAST(t.content,e)}compileMulti(t,e){let{block:n,forceNewBlock:o}=e;const r=!n||o;let i=this.target.code.length;if(r){let o=null;if(t.content.filter((t=>6!==t.type)).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 s=0;for(let o=0,r=t.content.length;o<r;o++){const i=t.content[o],l=6===i.type,a=an(e,{block:n,index:s,forceNewBlock:!l,isLast:e.isLast&&o===r-1});this.compileAST(i,a),l||s++}if(r){if(n.hasDynamicChildren&&n.children.length){const t=this.target.code,e=n.children.slice();let o=e.shift();for(let n=i;n<t.length&&(!t[n].trimStart().startsWith(`const ${o.varName} `)||(t[n]=t[n].replace(`const ${o.varName}`,o.varName),o=e.shift(),o));n++);this.addLine(`let ${n.children.map((t=>t.varName)).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,r=e.ctxVar||"ctx";t.context&&(r=rn("ctx"),this.addLine(`let ${r} = ${Ye(t.context)};`));const i=Ze.test(t.name),s=i?Qe(t.name):"`"+t.name+"`";if(n&&!o&&this.insertAnchor(n),n=this.createBlock(n,"multi",e),t.body){this.addLine(`${r} = Object.create(${r});`),this.addLine(`${r}[isBoundary] = 1;`),this.helpers.add("isBoundary");const n=an(e,{ctxVar:r}),o=this.compileMulti({type:3,content:t.body},n);o&&(this.helpers.add("zero"),this.addLine(`${r}[zero] = ${o};`))}const l=`key + \`${this.generateComponentKey()}\``;if(i){const t=rn("template");this.staticDefs.find((t=>"call"===t.id))||this.staticDefs.push({id:"call",expr:"app.callTemplate.bind(app)"}),this.define(t,s),this.insertBlock(`call(this, ${t}, ${r}, node, ${l})`,n,{...e,forceNewBlock:!n})}else{const t=rn("callTemplate_");this.staticDefs.push({id:t,expr:`app.getTemplate(${s})`}),this.insertBlock(`${t}.call(this, ${r}, node, ${l})`,n,{...e,forceNewBlock:!n})}return t.body&&!e.isLast&&this.addLine(`${r} = ${r}.__proto__;`),n.varName}compileTCallBlock(t,e){let{block:n,forceNewBlock:o}=e;return n&&(o||this.insertAnchor(n)),n=this.createBlock(n,"multi",e),this.insertBlock(Ye(t.name),n,{...e,forceNewBlock:!n}),n.varName}compileTSet(t,e){this.target.shouldProtectScope=!0,this.helpers.add("isBoundary").add("withDefault");const n=t.value?Ye(t.value||""):"null";if(t.body){this.helpers.add("LazyValue");const o={type:3,content:t.body};let r=`new LazyValue(${this.compileInNewTarget("value",o,e)}, ctx, this, node, ${this.target.currentKey(e)})`;r=t.value?r?`withDefault(${n}, ${r})`:n:r,this.addLine(`ctx[\`${t.name}\`] = ${r};`)}else{let o;if(t.defaultValue){const r=e.translate?this.translate(t.defaultValue):t.defaultValue;o=t.value?`withDefault(${n}, \`${r}\`)`:`\`${r}\``}else o=n;this.helpers.add("setContextValue"),this.addLine(`setContextValue(${e.ctxVar||"ctx"}, "${t.name}", ${o});`)}return null}generateComponentKey(){const t=[rn("__")];for(let e=0;e<this.target.loopLevel;e++)t.push(`\${key${e+1}}`);return t.join("__")}formatProp(t,e){if(e=this.captureExpression(e),t.includes(".")){let[n,o]=t.split(".");switch(t=n,o){case"bind":e=`(${e}).bind(this)`;break;case"alike":break;default:throw new i("Invalid prop suffix")}}return`${t=/^[a-z_]+$/i.test(t)?t:`'${t}'`}: ${e||void 0}`}formatPropObject(t){return Object.entries(t).map((([t,e])=>this.formatProp(t,e)))}getPropString(t,e){let n=`{${t.join(",")}}`;return e&&(n=`Object.assign({}, ${Ye(e)}${t.length?", "+n:""})`),n}compileComponent(t,e){let{block:n}=e;const o="slots"in(t.props||{}),r=t.props?this.formatPropObject(t.props):[];let i="";if(t.slots){let n="ctx";!this.target.loopLevel&&this.hasSafeContext||(n=rn("ctx"),this.helpers.add("capture"),this.define(n,"capture(ctx)"));let o=[];for(let r in t.slots){const i=t.slots[r],s=[];if(i.content){const t=this.compileInNewTarget("slot",i.content,e,i.on);s.push(`__render: ${t}.bind(this), __ctx: ${n}`)}const l=t.slots[r].scope;l&&s.push(`__scope: "${l}"`),t.slots[r].attrs&&s.push(...this.formatPropObject(t.slots[r].attrs));const a=`{${s.join(", ")}}`;o.push(`'${r}': ${a}`)}i=`{${o.join(", ")}}`}!i||t.dynamicProps||o||(this.helpers.add("markRaw"),r.push(`slots: markRaw(${i})`));let s,l=this.getPropString(r,t.dynamicProps);(i&&(t.dynamicProps||o)||this.dev)&&(s=rn("props"),this.define(s,l),l=s),i&&(t.dynamicProps||o)&&(this.helpers.add("markRaw"),this.addLine(`${s}.slots = markRaw(Object.assign(${i}, ${s}.slots))`));const a=this.generateComponentKey();let c;t.isDynamic?(c=rn("Comp"),this.define(c,Ye(t.name))):c=`\`${t.name}\``,this.dev&&this.addLine(`helpers.validateProps(${c}, ${s}, this);`),n&&(!1===e.forceNewBlock||e.tKeyExpr)&&this.insertAnchor(n);let h=`key + \`${a}\``;e.tKeyExpr&&(h=`${e.tKeyExpr} + ${h}`);let u=rn("comp");const d=[];for(let e in t.props||{}){let[t,n]=e.split(".");n||d.push(`"${t}"`)}this.staticDefs.push({id:u,expr:`app.createComponent(${t.isDynamic?null:c}, ${!t.isDynamic}, ${!!t.slots}, ${!!t.dynamicProps}, [${d}])`}),t.isDynamic&&(h=`(${c}).name + ${h}`);let f=`${u}(${l}, ${h}, node, this, ${t.isDynamic?c:null})`;return t.isDynamic&&(f=`toggler(${c}, ${f})`),t.on&&(f=this.wrapWithEventCatcher(f,t.on)),n=this.createBlock(n,"multi",e),this.insertBlock(f,n,e),n.varName}wrapWithEventCatcher(t,e){this.helpers.add("createCatcher");let n=rn("catcher"),o={},r=[];for(let t in e){let n=rn("hdlr"),i=r.push(n)-1;o[t]=i;const s=this.generateHandlerCode(t,e[t]);this.define(n,s)}return this.staticDefs.push({id:n,expr:`createCatcher(${JSON.stringify(o)})`}),`${n}(${t}, [${r.join(",")}])`}compileTSlot(t,e){this.helpers.add("callSlot");let n,o,{block:r}=e,i=!1,s=!1;t.name.match(Ze)?(i=!0,s=!0,o=Qe(t.name)):(o="'"+t.name+"'",s=s||this.slotNames.has(t.name),this.slotNames.add(t.name));const l=t.attrs?t.attrs["t-props"]:null;t.attrs&&delete t.attrs["t-props"];let a=this.target.loopLevel?`key${this.target.loopLevel}`:"key";s&&(a=`${a} + \`${this.generateComponentKey()}\``);const c=t.attrs?this.formatPropObject(t.attrs):[],h=this.getPropString(c,l);if(t.defaultContent){n=`callSlot(ctx, node, ${a}, ${o}, ${i}, ${h}, ${this.compileInNewTarget("defaultContent",t.defaultContent,e)}.bind(this))`}else if(i){let t=rn("slot");this.define(t,o),n=`toggler(${t}, callSlot(ctx, node, ${a}, ${t}, ${i}, ${h}))`}else n=`callSlot(ctx, node, ${a}, ${o}, ${i}, ${h})`;return t.on&&(n=this.wrapWithEventCatcher(n,t.on)),r&&this.insertAnchor(r),r=this.createBlock(r,"multi",e),this.insertBlock(n,r,{...e,forceNewBlock:!1}),r.varName}compileTTranslation(t,e){return t.content?this.compileAST(t.content,Object.assign({},e,{translate:!1})):null}compileTPortal(t,e){this.staticDefs.find((t=>"Portal"===t.id))||this.staticDefs.push({id:"Portal",expr:"app.Portal"});let{block:n}=e;const o=this.compileInNewTarget("slot",t.content,e),r=this.generateComponentKey();let i="ctx";!this.target.loopLevel&&this.hasSafeContext||(i=rn("ctx"),this.helpers.add("capture"),this.define(i,"capture(ctx)"));let s=rn("comp");this.staticDefs.push({id:s,expr:"app.createComponent(null, false, true, false, false)"});const l=`${s}({target: ${Ye(t.target)},slots: {'default': {__render: ${o}.bind(this), __ctx: ${i}}}}, key + \`${r}\`, node, ctx, Portal)`;return n&&this.insertAnchor(n),n=this.createBlock(n,"multi",e),this.insertBlock(l,n,{...e,forceNewBlock:!1}),n.varName}}const fn=new WeakMap;function pn(t){var e;(function(t){let e=t.querySelectorAll("[t-elif], [t-else]");for(let t=0,n=e.length;t<n;t++){let n=e[t],o=n.previousElementSibling,r=t=>o.getAttribute(t),s=t=>+!!n.getAttribute(t);if(!o||!r("t-if")&&!r("t-elif"))throw new i("t-elif and t-else directives must be preceded by a t-if or t-elif directive");{if(r("t-foreach"))throw new i("t-if cannot stay at the same level as t-foreach when using t-elif or t-else");if(["t-if","t-elif","t-else"].map(s).reduce((function(t,e){return t+e}))>1)throw new i("Only one conditional branching directive is allowed per node");let t;for(;(t=n.previousSibling)!==o;){if(t.nodeValue.trim().length&&8!==t.nodeType)throw new i("text is not allowed between branching directives");t.remove()}}}})(e=t),function(t){for(const e of["t-esc","t-out"]){const n=[...t.querySelectorAll(`[${e}]`)].filter((t=>t.tagName[0]===t.tagName[0].toUpperCase()||t.hasAttribute("t-component")));for(const t of n){if(t.childNodes.length)throw new i(`Cannot have ${e} on a component that already has content`);const n=t.getAttribute(e);t.removeAttribute(e);const o=t.ownerDocument.createElement("t");null!=n&&o.setAttribute(e,n),t.appendChild(o)}}}(e);return mn(t,{inPreTag:!1})||{type:0,value:""}}function mn(t,e){return t instanceof Element?function(t,e){if(t.hasAttribute("t-debug"))return t.removeAttribute("t-debug"),{type:12,content:mn(t,e)};if(t.hasAttribute("t-log")){const n=t.getAttribute("t-log");return t.removeAttribute("t-log"),{type:13,expr:n,content:mn(t,e)}}return null}(t,e)||function(t,e){if(!t.hasAttribute("t-foreach"))return null;const n=t.outerHTML,o=t.getAttribute("t-foreach");t.removeAttribute("t-foreach");const r=t.getAttribute("t-as")||"";t.removeAttribute("t-as");const s=t.getAttribute("t-key");if(!s)throw new i(`"Directive t-foreach should always be used with a t-key!" (expression: t-foreach="${o}" t-as="${r}")`);t.removeAttribute("t-key");const l=t.getAttribute("t-memo")||"";t.removeAttribute("t-memo");const a=mn(t,e);if(!a)return null;const c=!n.includes("t-call"),h=c&&!n.includes(`${r}_first`),u=c&&!n.includes(`${r}_last`),d=c&&!n.includes(`${r}_index`),f=c&&!n.includes(`${r}_value`);return{type:9,collection:o,elem:r,body:a,memo:l,key:s,hasNoFirst:h,hasNoLast:u,hasNoIndex:d,hasNoValue:f}}(t,e)||function(t,e){if(!t.hasAttribute("t-if"))return null;const n=t.getAttribute("t-if");t.removeAttribute("t-if");const o=mn(t,e)||{type:0,value:""};let r=t.nextElementSibling;const i=[];for(;r&&r.hasAttribute("t-elif");){const t=r.getAttribute("t-elif");r.removeAttribute("t-elif");const n=mn(r,e),o=r.nextElementSibling;r.remove(),r=o,n&&i.push({condition:t,content:n})}let s=null;r&&r.hasAttribute("t-else")&&(r.removeAttribute("t-else"),s=mn(r,e),r.remove());return{type:5,condition:n,content:o,tElif:i.length?i:null,tElse:s}}(t,e)||function(t,e){if(!t.hasAttribute("t-portal"))return null;const n=t.getAttribute("t-portal");t.removeAttribute("t-portal");const o=mn(t,e);if(!o)return{type:0,value:""};return{type:17,target:n,content:o}}(t,e)||function(t,e){if(!t.hasAttribute("t-call"))return null;const n=t.getAttribute("t-call"),o=t.getAttribute("t-call-context");if(t.removeAttribute("t-call"),t.removeAttribute("t-call-context"),"t"!==t.tagName){const r=mn(t,e),i={type:7,name:n,body:null,context:o};if(r&&2===r.type)return r.content=[i],r;if(r&&11===r.type)return{...r,slots:{default:{content:i,scope:null,on:null,attrs:null}}}}const r=$n(t,e);return{type:7,name:n,body:r.length?r:null,context:o}}(t,e)||function(t,e){if(!t.hasAttribute("t-call-block"))return null;const n=t.getAttribute("t-call-block");return{type:15,name:n}}(t)||function(t,e){if(!t.hasAttribute("t-esc"))return null;const n=t.getAttribute("t-esc");t.removeAttribute("t-esc");const o={type:4,expr:n,defaultValue:t.textContent||""};let r=t.getAttribute("t-ref");t.removeAttribute("t-ref");const i=mn(t,e);if(!i)return o;if(2===i.type)return{...i,ref:r,content:[o]};return o}(t,e)||function(t,e){if(!t.hasAttribute("t-out")&&!t.hasAttribute("t-raw"))return null;t.hasAttribute("t-raw")&&console.warn('t-raw has been deprecated in favor of t-out. If the value to render is not wrapped by the "markup" function, it will be escaped');const n=t.getAttribute("t-out")||t.getAttribute("t-raw");t.removeAttribute("t-out"),t.removeAttribute("t-raw");const o={type:8,expr:n,body:null},r=t.getAttribute("t-ref");t.removeAttribute("t-ref");const i=mn(t,e);if(!i)return o;if(2===i.type)return o.body=i.content.length?i.content:null,{...i,ref:r,content:[o]};return o}(t,e)||function(t,e){if(!t.hasAttribute("t-key"))return null;const n=t.getAttribute("t-key");t.removeAttribute("t-key");const o=mn(t,e);if(!o)return null;return{type:10,expr:n,content:o}}(t,e)||function(t,e){if("off"!==t.getAttribute("t-translation"))return null;return t.removeAttribute("t-translation"),{type:16,content:mn(t,e)}}(t,e)||function(t,e){if(!t.hasAttribute("t-slot"))return null;const n=t.getAttribute("t-slot");t.removeAttribute("t-slot");let o=null,r=null;for(let e of t.getAttributeNames()){const n=t.getAttribute(e);e.startsWith("t-on-")?(r=r||{},r[e.slice(5)]=n):(o=o||{},o[e]=n)}return{type:14,name:n,attrs:o,on:r,defaultContent:xn(t,e)}}(t,e)||function(t,e){let n=t.tagName;const o=n[0];let r=t.hasAttribute("t-component");if(r&&"t"!==n)throw new i(`Directive 't-component' can only be used on <t> nodes (used on a <${n}>)`);if(o!==o.toUpperCase()&&!r)return null;r&&(n=t.getAttribute("t-component"),t.removeAttribute("t-component"));const s=t.getAttribute("t-props");t.removeAttribute("t-props");const l=t.getAttribute("t-slot-scope");t.removeAttribute("t-slot-scope");let a=null,c=null;for(let e of t.getAttributeNames()){const n=t.getAttribute(e);if(e.startsWith("t-")){if(!e.startsWith("t-on-")){const t=wn.get(e.split("-").slice(0,2).join("-"));throw new i(t||`unsupported directive on Component: ${e}`)}a=a||{},a[e.slice(5)]=n}else c=c||{},c[e]=n}let h=null;if(t.hasChildNodes()){const n=t.cloneNode(!0),o=Array.from(n.querySelectorAll("[t-set-slot]"));for(let t of o){if("t"!==t.tagName)throw new i(`Directive 't-set-slot' can only be used on <t> nodes (used on a <${t.tagName}>)`);const o=t.getAttribute("t-set-slot");let r=t.parentElement,s=!1;for(;r&&r!==n;){if(r.hasAttribute("t-component")||r.tagName[0]===r.tagName[0].toUpperCase()){s=!0;break}r=r.parentElement}if(s||!r)continue;t.removeAttribute("t-set-slot"),t.remove();const l=mn(t,e);let a=null,c=null,u=null;for(let e of t.getAttributeNames()){const n=t.getAttribute(e);"t-slot-scope"!==e?e.startsWith("t-on-")?(a=a||{},a[e.slice(5)]=n):(c=c||{},c[e]=n):u=n}h=h||{},h[o]={content:l,on:a,attrs:c,scope:u}}const r=xn(n,e);h=h||{},r&&!h.default&&(h.default={content:r,on:a,attrs:null,scope:l})}return{type:11,name:n,isDynamic:r,dynamicProps:s,props:c,slots:h,on:a}}(t,e)||function(t,e){const{tagName:n}=t,o=t.getAttribute("t-tag");if(t.removeAttribute("t-tag"),"t"===n&&!o)return null;if(n.startsWith("block-"))throw new i(`Invalid tag name: '${n}'`);e=Object.assign({},e),"pre"===n&&(e.inPreTag=!0);let r=!e.nameSpace&&vn.has(n)?"http://www.w3.org/2000/svg":null;const s=t.getAttribute("t-ref");t.removeAttribute("t-ref");const l=t.getAttributeNames();let a=null,c=null,h=null;for(let o of l){const s=t.getAttribute(o);if("t-on"===o||"t-on-"===o)throw new i("Missing event name with t-on directive");if(o.startsWith("t-on-"))c=c||{},c[o.slice(5)]=s;else if(o.startsWith("t-model")){if(!["input","select","textarea"].includes(n))throw new i("The t-model directive only works with <input>, <textarea> and <select>");let r,l;if(gn.test(s)){const t=s.lastIndexOf(".");r=s.slice(0,t),l=`'${s.slice(t+1)}'`}else{if(!yn.test(s))throw new i(`Invalid t-model expression: "${s}" (it should be assignable)`);{const t=s.lastIndexOf("[");r=s.slice(0,t),l=s.slice(t+1,-1)}}const a=t.getAttribute("type"),c="input"===n,u="select"===n,d=c&&"checkbox"===a,f=c&&"radio"===a,p=o.includes(".trim"),m=p||o.includes(".lazy");h={baseExpr:r,expr:l,targetAttr:d?"checked":"value",specialInitTargetAttr:f?"checked":null,eventType:f?"click":u||m?"change":"input",hasDynamicChildren:!1,shouldTrim:p,shouldNumberize:o.includes(".number")},u&&((e=Object.assign({},e)).tModelInfo=h)}else{if(o.startsWith("block-"))throw new i(`Invalid attribute: '${o}'`);if("xmlns"===o)r=s;else if("t-name"!==o){if(o.startsWith("t-")&&!o.startsWith("t-att"))throw new i(`Unknown QWeb directive: '${o}'`);const t=e.tModelInfo;t&&["t-att-value","t-attf-value"].includes(o)&&(t.hasDynamicChildren=!0),a=a||{},a[o]=s}}}r&&(e.nameSpace=r);const u=$n(t,e);return{type:2,tag:n,dynamicTag:o,attrs:a,on:c,ref:s,content:u,model:h,ns:r}}(t,e)||function(t,e){if(!t.hasAttribute("t-set"))return null;const n=t.getAttribute("t-set"),o=t.getAttribute("t-value")||null,r=t.innerHTML===t.textContent&&t.textContent||null;let i=null;t.textContent!==t.innerHTML&&(i=$n(t,e));return{type:6,name:n,value:o,defaultValue:r,body:i}}(t,e)||function(t,e){if("t"!==t.tagName)return null;return xn(t,e)}(t,e):function(t,e){if(t.nodeType===Node.TEXT_NODE){let n=t.textContent||"";return e.inPreTag||!bn.test(n)||n.trim()?{type:0,value:n}:null}if(t.nodeType===Node.COMMENT_NODE)return{type:1,value:t.textContent||""};return null}(t,e)}const bn=/[\r\n]/;const gn=/\.[\w_]+\s*$/,yn=/\[[^\[]+\]\s*$/,vn=new Set(["svg","g","path"]);const wn=new Map([["t-ref","t-ref is no longer supported on components. Consider exposing only the public part of the component's API through a callback prop."],["t-att","t-att makes no sense on component: props are already treated as expressions"],["t-attf","t-attf is not supported on components: use template strings for string interpolation in props"]]);function $n(t,e){const n=[];for(let o of t.childNodes){const t=mn(o,e);t&&(3===t.type?n.push(...t.content):n.push(t))}return n}function xn(t,e){const n=$n(t,e);switch(n.length){case 0:return null;case 1:return n[0];default:return{type:3,content:n}}}function Nn(t,e={}){const n=function(t){if("string"==typeof t)return pn(Pe(`<t>${t}</t>`).firstChild);let e=fn.get(t);return e||(e=pn(t.cloneNode(!0)),fn.set(t,e)),e}(t),o=t instanceof Node?!(t instanceof Element)||null===t.querySelector("[t-set], [t-call]"):!t.includes("t-set")&&!t.includes("t-call"),r=new dn(n,{...e,hasSafeContext:o}).generateCode();try{return new Function("app, bdom, helpers",r)}catch(t){const{name:n}=e,o=new i(`Failed to compile ${n?`template "${n}"`:"anonymous template"}: ${t.message}\n\ngenerated code:\nfunction(app, bdom, helpers) {\n${r}\n}`);throw o.cause=t,o}}class kn{constructor(){this.tasks=new Set,this.frame=0,this.delayedRenders=[],this.cancelledNodes=new Set,this.requestAnimationFrame=kn.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(){this.frame=0;for(let t of this.cancelledNodes)t._destroy();this.cancelledNodes.clear();for(let t of this.tasks)this.processFiber(t);for(let t of this.tasks)3===t.node.status&&this.tasks.delete(t)}processFiber(t){if(t.root!==t)return void this.tasks.delete(t);const e=Et.has(t);e&&0!==t.counter?this.tasks.delete(t):3!==t.node.status?0===t.counter&&(e||t.complete(),this.tasks.delete(t)):this.tasks.delete(t)}}kn.requestAnimationFrame=window.requestAnimationFrame.bind(window);let En=!1;const An=new Set;window.__OWL_DEVTOOLS__||(window.__OWL_DEVTOOLS__={apps:An,Fiber:Ot,RootFiber:Dt,toRaw:Ht,reactive:Qt});class Tn extends Me{constructor(t,e={}){super(e),this.scheduler=new kn,this.root=null,this.name=e.name||"",this.Root=t,An.add(this),e.test&&(this.dev=!0),this.warnIfNoStaticProps=e.warnIfNoStaticProps||!1,!this.dev||e.test||En||(console.info(`Owl is running in 'dev' mode.\n\nThis is not suitable for production use.\nSee https://github.com/odoo/owl/blob/${window.owl?window.owl.__info__.hash:"master"}/doc/reference/app.md#configuration for more information.`),En=!0);const n=e.env||{},o=Object.getOwnPropertyDescriptors(n);this.env=Object.freeze(Object.create(Object.getPrototypeOf(n),o)),this.props=e.props||{}}mount(t,e){Tn.validateTarget(t),this.dev&&Be(this.Root,this.props,{__owl__:{app:this}});const n=this.makeNode(this.Root,this.props),o=this.mountNode(n,t,e);return this.root=n,o}makeNode(t,e){return new de(t,e,this,null,null)}mountNode(t,e,n){const o=new Promise(((e,n)=>{let o=!1;t.mounted.push((()=>{e(t.component),o=!0}));let r=At.get(t);r||(r=[],At.set(t,r)),r.unshift((t=>{throw o||n(t),t}))}));return t.mountComponent(e,n),o}destroy(){this.root&&(this.root.destroy(),this.scheduler.processTasks()),An.delete(this)}createComponent(t,e,n,o,r){const s=!e;let l;const a=0===r.length;l=n?(t,e)=>!0:o?function(t,e){for(let n in t)if(t[n]!==e[n])return!0;return Object.keys(t).length!==Object.keys(e).length}:a?(t,e)=>!1:function(t,e){for(let n of r)if(t[n]!==e[n])return!0;return!1};const c=de.prototype.updateAndRender,h=de.prototype.initiateRender;return(n,o,r,a,u)=>{let d=r.children,f=d[o];s&&f&&f.component.constructor!==u&&(f=void 0);const p=r.fiber;if(f)(l(f.props,n)||p.deep||f.forceNextRender)&&(f.forceNextRender=!1,c.call(f,n,p));else{if(e){const e=a.constructor.components;if(!e)throw new i(`Cannot find the definition of component "${t}", missing static components key in parent`);if(!(u=e[t]))throw new i(`Cannot find the definition of component "${t}"`);if(!(u.prototype instanceof ye))throw new i(`"${t}" is not a Component. It must inherit from the Component class`)}f=new de(u,n,this,r,o),d[o]=f,h.call(f,new Ot(f,p))}return p.childrenMap[o]=f,f}}handleError(...t){return _t(...t)}}Tn.validateTarget=function(t){const e=t&&t.ownerDocument;if(e){const n=e.defaultView.HTMLElement;if(t instanceof n||t instanceof ShadowRoot){if(!e.body.contains(t instanceof n?t:t.host))throw new i("Cannot mount a component on a detached dom node");return}}throw new i("Cannot mount component: the target is not a valid DOM element")},Tn.apps=An,Tn.version="2.2.8";function _n(t,e){const n=Object.create(t),o=Object.getOwnPropertyDescriptors(e);return Object.freeze(Object.defineProperties(n,o))}function Sn(t){const e=ae();e.childEnv=_n(e.childEnv,t)}n.shouldNormalizeDom=!1,n.mainEventHandler=(t,n,o)=>{const{data:r,modifiers:s}=e(t);t=r;let l=!1;if(s.length){let t=!1;const e=n.target===o;for(const o of s)switch(o){case"self":if(t=!0,e)continue;return 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 e=t[0];if("function"!=typeof e)throw new i(`Invalid handler (expected a function, received: '${e}')`);let o=t[1]?t[1].__owl__:null;o&&1!==o.status||e.call(o?o.component:null,n)}return l};const Cn={config:n,mount:kt,patch:function(t,e,n=!1){t.patch(e,n)},remove:function(t,e=!1){e&&t.beforeRemove(),t.remove()},list:gt,multi:P,text:H,toggler:r,createBlock:ot,html:Nt,comment:U},On={version:Tn.version};Me.prototype._compileTemplate=function(t,e){return Nn(e,{name:t,dev:this.dev,translateFn:this.translateFn,translatableAttributes:this.translatableAttributes})},t.App=Tn,t.Component=ye,t.EventBus=N,t.OwlError=i,t.__info__=On,t.blockDom=Cn,t.loadFile=async function(t){const e=await fetch(t);if(!e.ok)throw new i("Error while fetching xml templates");return await e.text()},t.markRaw=zt,t.markup=function(t){return new k(t)},t.mount=async function(t,e,n={}){return new Tn(t,n).mount(e,n)},t.onError=function(t){const e=ae();let n=At.get(e);n||(n=[],At.set(e,n)),n.push(t.bind(e.component))},t.onMounted=me,t.onPatched=be,t.onRendered=function(t){const e=ae(),n=e.renderFn,o=e.app.dev?pe:t=>t;t=o(t.bind(e.component),"onRendered"),e.renderFn=()=>{const e=n();return t(),e}},t.onWillDestroy=function(t){const e=ae(),n=e.app.dev?pe:t=>t;e.willDestroy.push(n(t.bind(e.component),"onWillDestroy"))},t.onWillPatch=function(t){const e=ae(),n=e.app.dev?pe:t=>t;e.willPatch.unshift(n(t.bind(e.component),"onWillPatch"))},t.onWillRender=function(t){const e=ae(),n=e.renderFn,o=e.app.dev?pe:t=>t;t=o(t.bind(e.component),"onWillRender"),e.renderFn=()=>(t(),n())},t.onWillStart=function(t){const e=ae(),n=e.app.dev?pe:t=>t;e.willStart.push(n(t.bind(e.component),"onWillStart"))},t.onWillUnmount=ge,t.onWillUpdateProps=function(t){const e=ae(),n=e.app.dev?pe:t=>t;e.willUpdateProps.push(n(t.bind(e.component),"onWillUpdateProps"))},t.reactive=Qt,t.status=function(t){switch(t.__owl__.status){case 0:return"new";case 2:return"cancelled";case 1:return"mounted";case 3:return"destroyed"}},t.toRaw=Ht,t.useChildSubEnv=Sn,t.useComponent=function(){return le.component},t.useEffect=function(t,e=(()=>[NaN])){let n,o;me((()=>{o=e(),n=t(...o)})),be((()=>{const r=e();r.some(((t,e)=>t!==o[e]))&&(o=r,n&&n(),n=t(...o))})),ge((()=>n&&n()))},t.useEnv=function(){return ae().component.env},t.useExternalListener=function(t,e,n,o){const r=ae(),i=n.bind(r.component);me((()=>t.addEventListener(e,i,o))),ge((()=>t.removeEventListener(e,i,o)))},t.useRef=function(t){const e=ae().refs;return{get el(){const n=e[t];return x(n)?n:null}}},t.useState=ue,t.useSubEnv=function(t){const e=ae();e.component.env=_n(e.component.env,t),Sn(t)},t.validate=function(t,e){let n=_e(t,e);if(n.length)throw new i("Invalid object: "+n.join(", "))},t.validateType=Se,t.whenReady=function(t){return new Promise((function(t){"loading"!==document.readyState?t(!0):document.addEventListener("DOMContentLoaded",t,!1)})).then(t||function(){})},t.xml=We,Object.defineProperty(t,"__esModule",{value:!0}),On.date="2024-01-12T10:02:46.131Z",On.hash="7b454da",On.url="https://github.com/odoo/owl"}(this.owl=this.owl||{});
@@ -0,0 +1,8 @@
1
+ /**
2
+ * Parses an XML string into an XML document, throwing errors on parser errors
3
+ * instead of returning an XML document containing the parseerror.
4
+ *
5
+ * @param xml the string to parse
6
+ * @returns an XML document corresponding to the content of the string
7
+ */
8
+ export declare function parseXML(xml: string): XMLDocument;
@@ -406,6 +406,7 @@ interface TemplateSetConfig {
406
406
  translatableAttributes?: string[];
407
407
  translateFn?: (s: string) => string;
408
408
  templates?: string | Document | Record<string, string>;
409
+ getTemplate?: (s: string) => Element | Function | string | void;
409
410
  }
410
411
  declare class TemplateSet {
411
412
  static registerTemplate(name: string, fn: TemplateFunction): void;
@@ -414,6 +415,7 @@ declare class TemplateSet {
414
415
  templates: {
415
416
  [name: string]: Template;
416
417
  };
418
+ getRawTemplate?: (s: string) => Element | Function | string | void;
417
419
  translateFn?: (s: string) => string;
418
420
  translatableAttributes?: string[];
419
421
  Portal: typeof Portal;
@@ -5,6 +5,7 @@ export interface TemplateSetConfig {
5
5
  translatableAttributes?: string[];
6
6
  translateFn?: (s: string) => string;
7
7
  templates?: string | Document | Record<string, string>;
8
+ getTemplate?: (s: string) => Element | Function | string | void;
8
9
  }
9
10
  export declare class TemplateSet {
10
11
  static registerTemplate(name: string, fn: TemplateFunction): void;
@@ -13,6 +14,7 @@ export declare class TemplateSet {
13
14
  templates: {
14
15
  [name: string]: Template;
15
16
  };
17
+ getRawTemplate?: (s: string) => Element | Function | string | void;
16
18
  translateFn?: (s: string) => string;
17
19
  translatableAttributes?: string[];
18
20
  Portal: typeof Portal;
@@ -1 +1 @@
1
- export declare const version = "2.2.7";
1
+ export declare const version = "2.2.8";
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@odoo/owl",
3
- "version": "2.2.7",
3
+ "version": "2.2.8",
4
4
  "description": "Odoo Web Library (OWL)",
5
5
  "main": "dist/owl.cjs.js",
6
6
  "module": "dist/owl.es.js",