@odoo/owl 2.4.1 → 2.5.1

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
@@ -3231,6 +3231,9 @@ class TemplateSet {
3231
3231
  }
3232
3232
  }
3233
3233
  this.getRawTemplate = config.getTemplate;
3234
+ this.customDirectives = config.customDirectives || {};
3235
+ this.runtimeUtils = { ...helpers, __globals__: config.globalValues || {} };
3236
+ this.hasGlobalValues = Boolean(config.globalValues && Object.keys(config.globalValues).length);
3234
3237
  }
3235
3238
  static registerTemplate(name, fn) {
3236
3239
  globalTemplates[name] = fn;
@@ -3287,7 +3290,7 @@ class TemplateSet {
3287
3290
  this.templates[name] = function (context, parent) {
3288
3291
  return templates[name].call(this, context, parent);
3289
3292
  };
3290
- const template = templateFn(this, bdom, helpers);
3293
+ const template = templateFn(this, bdom, this.runtimeUtils);
3291
3294
  this.templates[name] = template;
3292
3295
  }
3293
3296
  return this.templates[name];
@@ -3338,7 +3341,7 @@ TemplateSet.registerTemplate("__portal__", portalTemplate);
3338
3341
  //------------------------------------------------------------------------------
3339
3342
  // Misc types, constants and helpers
3340
3343
  //------------------------------------------------------------------------------
3341
- const RESERVED_WORDS = "true,false,NaN,null,undefined,debugger,console,window,in,instanceof,new,function,return,eval,void,Math,RegExp,Array,Object,Date".split(",");
3344
+ const RESERVED_WORDS = "true,false,NaN,null,undefined,debugger,console,window,in,instanceof,new,function,return,eval,void,Math,RegExp,Array,Object,Date,__globals__".split(",");
3342
3345
  const WORD_REPLACEMENT = Object.assign(Object.create(null), {
3343
3346
  and: "&&",
3344
3347
  or: "||",
@@ -3810,6 +3813,9 @@ class CodeGenerator {
3810
3813
  this.dev = options.dev || false;
3811
3814
  this.ast = ast;
3812
3815
  this.templateName = options.name;
3816
+ if (options.hasGlobalValues) {
3817
+ this.helpers.add("__globals__");
3818
+ }
3813
3819
  }
3814
3820
  generateCode() {
3815
3821
  const ast = this.ast;
@@ -4848,29 +4854,33 @@ class CodeGenerator {
4848
4854
  // Parser
4849
4855
  // -----------------------------------------------------------------------------
4850
4856
  const cache = new WeakMap();
4851
- function parse(xml) {
4857
+ function parse(xml, customDir) {
4858
+ const ctx = {
4859
+ inPreTag: false,
4860
+ customDirectives: customDir,
4861
+ };
4852
4862
  if (typeof xml === "string") {
4853
4863
  const elem = parseXML(`<t>${xml}</t>`).firstChild;
4854
- return _parse(elem);
4864
+ return _parse(elem, ctx);
4855
4865
  }
4856
4866
  let ast = cache.get(xml);
4857
4867
  if (!ast) {
4858
4868
  // we clone here the xml to prevent modifying it in place
4859
- ast = _parse(xml.cloneNode(true));
4869
+ ast = _parse(xml.cloneNode(true), ctx);
4860
4870
  cache.set(xml, ast);
4861
4871
  }
4862
4872
  return ast;
4863
4873
  }
4864
- function _parse(xml) {
4874
+ function _parse(xml, ctx) {
4865
4875
  normalizeXML(xml);
4866
- const ctx = { inPreTag: false };
4867
4876
  return parseNode(xml, ctx) || { type: 0 /* Text */, value: "" };
4868
4877
  }
4869
4878
  function parseNode(node, ctx) {
4870
4879
  if (!(node instanceof Element)) {
4871
4880
  return parseTextCommentNode(node, ctx);
4872
4881
  }
4873
- return (parseTDebugLog(node, ctx) ||
4882
+ return (parseTCustom(node, ctx) ||
4883
+ parseTDebugLog(node, ctx) ||
4874
4884
  parseTForEach(node, ctx) ||
4875
4885
  parseTIf(node, ctx) ||
4876
4886
  parseTPortal(node, ctx) ||
@@ -4912,6 +4922,35 @@ function parseTextCommentNode(node, ctx) {
4912
4922
  }
4913
4923
  return null;
4914
4924
  }
4925
+ function parseTCustom(node, ctx) {
4926
+ if (!ctx.customDirectives) {
4927
+ return null;
4928
+ }
4929
+ const nodeAttrsNames = node.getAttributeNames();
4930
+ for (let attr of nodeAttrsNames) {
4931
+ if (attr === "t-custom" || attr === "t-custom-") {
4932
+ throw new OwlError("Missing custom directive name with t-custom directive");
4933
+ }
4934
+ if (attr.startsWith("t-custom-")) {
4935
+ const directiveName = attr.split(".")[0].slice(9);
4936
+ const customDirective = ctx.customDirectives[directiveName];
4937
+ if (!customDirective) {
4938
+ throw new OwlError(`Custom directive "${directiveName}" is not defined`);
4939
+ }
4940
+ const value = node.getAttribute(attr);
4941
+ const modifiers = attr.split(".").slice(1);
4942
+ node.removeAttribute(attr);
4943
+ try {
4944
+ customDirective(node, value, modifiers);
4945
+ }
4946
+ catch (error) {
4947
+ throw new OwlError(`Custom directive "${directiveName}" throw the following error: ${error}`);
4948
+ }
4949
+ return parseNode(node, ctx);
4950
+ }
4951
+ }
4952
+ return null;
4953
+ }
4915
4954
  // -----------------------------------------------------------------------------
4916
4955
  // debugging
4917
4956
  // -----------------------------------------------------------------------------
@@ -5543,9 +5582,11 @@ function normalizeXML(el) {
5543
5582
  normalizeTEscTOut(el);
5544
5583
  }
5545
5584
 
5546
- function compile(template, options = {}) {
5585
+ function compile(template, options = {
5586
+ hasGlobalValues: false,
5587
+ }) {
5547
5588
  // parsing
5548
- const ast = parse(template);
5589
+ const ast = parse(template, options.customDirectives);
5549
5590
  // some work
5550
5591
  const hasSafeContext = template instanceof Node
5551
5592
  ? !(template instanceof Element) || template.querySelector("[t-set], [t-call]") === null
@@ -5567,7 +5608,7 @@ function compile(template, options = {}) {
5567
5608
  }
5568
5609
 
5569
5610
  // do not modify manually. This file is generated by the release script.
5570
- const version = "2.4.1";
5611
+ const version = "2.5.1";
5571
5612
 
5572
5613
  // -----------------------------------------------------------------------------
5573
5614
  // Scheduler
@@ -5646,7 +5687,14 @@ class Scheduler {
5646
5687
  if (!hasError) {
5647
5688
  fiber.complete();
5648
5689
  }
5649
- this.tasks.delete(fiber);
5690
+ // at this point, the fiber should have been applied to the DOM, so we can
5691
+ // remove it from the task list. If it is not the case, it means that there
5692
+ // was an error and an error handler triggered a new rendering that recycled
5693
+ // the fiber, so in that case, we actually want to keep the fiber around,
5694
+ // otherwise it will just be ignored.
5695
+ if (fiber.appliedToDom) {
5696
+ this.tasks.delete(fiber);
5697
+ }
5650
5698
  }
5651
5699
  }
5652
5700
  }
@@ -6030,6 +6078,8 @@ TemplateSet.prototype._compileTemplate = function _compileTemplate(name, templat
6030
6078
  dev: this.dev,
6031
6079
  translateFn: this.translateFn,
6032
6080
  translatableAttributes: this.translatableAttributes,
6081
+ customDirectives: this.customDirectives,
6082
+ hasGlobalValues: this.hasGlobalValues,
6033
6083
  });
6034
6084
  };
6035
6085
 
@@ -6071,6 +6121,6 @@ exports.whenReady = whenReady;
6071
6121
  exports.xml = xml;
6072
6122
 
6073
6123
 
6074
- __info__.date = '2024-10-31T09:42:30.824Z';
6075
- __info__.hash = 'b8d09e5';
6124
+ __info__.date = '2024-11-26T08:42:41.633Z';
6125
+ __info__.hash = '7fc552e';
6076
6126
  __info__.url = 'https://github.com/odoo/owl';
package/dist/owl.es.js CHANGED
@@ -3227,6 +3227,9 @@ class TemplateSet {
3227
3227
  }
3228
3228
  }
3229
3229
  this.getRawTemplate = config.getTemplate;
3230
+ this.customDirectives = config.customDirectives || {};
3231
+ this.runtimeUtils = { ...helpers, __globals__: config.globalValues || {} };
3232
+ this.hasGlobalValues = Boolean(config.globalValues && Object.keys(config.globalValues).length);
3230
3233
  }
3231
3234
  static registerTemplate(name, fn) {
3232
3235
  globalTemplates[name] = fn;
@@ -3283,7 +3286,7 @@ class TemplateSet {
3283
3286
  this.templates[name] = function (context, parent) {
3284
3287
  return templates[name].call(this, context, parent);
3285
3288
  };
3286
- const template = templateFn(this, bdom, helpers);
3289
+ const template = templateFn(this, bdom, this.runtimeUtils);
3287
3290
  this.templates[name] = template;
3288
3291
  }
3289
3292
  return this.templates[name];
@@ -3334,7 +3337,7 @@ TemplateSet.registerTemplate("__portal__", portalTemplate);
3334
3337
  //------------------------------------------------------------------------------
3335
3338
  // Misc types, constants and helpers
3336
3339
  //------------------------------------------------------------------------------
3337
- const RESERVED_WORDS = "true,false,NaN,null,undefined,debugger,console,window,in,instanceof,new,function,return,eval,void,Math,RegExp,Array,Object,Date".split(",");
3340
+ const RESERVED_WORDS = "true,false,NaN,null,undefined,debugger,console,window,in,instanceof,new,function,return,eval,void,Math,RegExp,Array,Object,Date,__globals__".split(",");
3338
3341
  const WORD_REPLACEMENT = Object.assign(Object.create(null), {
3339
3342
  and: "&&",
3340
3343
  or: "||",
@@ -3806,6 +3809,9 @@ class CodeGenerator {
3806
3809
  this.dev = options.dev || false;
3807
3810
  this.ast = ast;
3808
3811
  this.templateName = options.name;
3812
+ if (options.hasGlobalValues) {
3813
+ this.helpers.add("__globals__");
3814
+ }
3809
3815
  }
3810
3816
  generateCode() {
3811
3817
  const ast = this.ast;
@@ -4844,29 +4850,33 @@ class CodeGenerator {
4844
4850
  // Parser
4845
4851
  // -----------------------------------------------------------------------------
4846
4852
  const cache = new WeakMap();
4847
- function parse(xml) {
4853
+ function parse(xml, customDir) {
4854
+ const ctx = {
4855
+ inPreTag: false,
4856
+ customDirectives: customDir,
4857
+ };
4848
4858
  if (typeof xml === "string") {
4849
4859
  const elem = parseXML(`<t>${xml}</t>`).firstChild;
4850
- return _parse(elem);
4860
+ return _parse(elem, ctx);
4851
4861
  }
4852
4862
  let ast = cache.get(xml);
4853
4863
  if (!ast) {
4854
4864
  // we clone here the xml to prevent modifying it in place
4855
- ast = _parse(xml.cloneNode(true));
4865
+ ast = _parse(xml.cloneNode(true), ctx);
4856
4866
  cache.set(xml, ast);
4857
4867
  }
4858
4868
  return ast;
4859
4869
  }
4860
- function _parse(xml) {
4870
+ function _parse(xml, ctx) {
4861
4871
  normalizeXML(xml);
4862
- const ctx = { inPreTag: false };
4863
4872
  return parseNode(xml, ctx) || { type: 0 /* Text */, value: "" };
4864
4873
  }
4865
4874
  function parseNode(node, ctx) {
4866
4875
  if (!(node instanceof Element)) {
4867
4876
  return parseTextCommentNode(node, ctx);
4868
4877
  }
4869
- return (parseTDebugLog(node, ctx) ||
4878
+ return (parseTCustom(node, ctx) ||
4879
+ parseTDebugLog(node, ctx) ||
4870
4880
  parseTForEach(node, ctx) ||
4871
4881
  parseTIf(node, ctx) ||
4872
4882
  parseTPortal(node, ctx) ||
@@ -4908,6 +4918,35 @@ function parseTextCommentNode(node, ctx) {
4908
4918
  }
4909
4919
  return null;
4910
4920
  }
4921
+ function parseTCustom(node, ctx) {
4922
+ if (!ctx.customDirectives) {
4923
+ return null;
4924
+ }
4925
+ const nodeAttrsNames = node.getAttributeNames();
4926
+ for (let attr of nodeAttrsNames) {
4927
+ if (attr === "t-custom" || attr === "t-custom-") {
4928
+ throw new OwlError("Missing custom directive name with t-custom directive");
4929
+ }
4930
+ if (attr.startsWith("t-custom-")) {
4931
+ const directiveName = attr.split(".")[0].slice(9);
4932
+ const customDirective = ctx.customDirectives[directiveName];
4933
+ if (!customDirective) {
4934
+ throw new OwlError(`Custom directive "${directiveName}" is not defined`);
4935
+ }
4936
+ const value = node.getAttribute(attr);
4937
+ const modifiers = attr.split(".").slice(1);
4938
+ node.removeAttribute(attr);
4939
+ try {
4940
+ customDirective(node, value, modifiers);
4941
+ }
4942
+ catch (error) {
4943
+ throw new OwlError(`Custom directive "${directiveName}" throw the following error: ${error}`);
4944
+ }
4945
+ return parseNode(node, ctx);
4946
+ }
4947
+ }
4948
+ return null;
4949
+ }
4911
4950
  // -----------------------------------------------------------------------------
4912
4951
  // debugging
4913
4952
  // -----------------------------------------------------------------------------
@@ -5539,9 +5578,11 @@ function normalizeXML(el) {
5539
5578
  normalizeTEscTOut(el);
5540
5579
  }
5541
5580
 
5542
- function compile(template, options = {}) {
5581
+ function compile(template, options = {
5582
+ hasGlobalValues: false,
5583
+ }) {
5543
5584
  // parsing
5544
- const ast = parse(template);
5585
+ const ast = parse(template, options.customDirectives);
5545
5586
  // some work
5546
5587
  const hasSafeContext = template instanceof Node
5547
5588
  ? !(template instanceof Element) || template.querySelector("[t-set], [t-call]") === null
@@ -5563,7 +5604,7 @@ function compile(template, options = {}) {
5563
5604
  }
5564
5605
 
5565
5606
  // do not modify manually. This file is generated by the release script.
5566
- const version = "2.4.1";
5607
+ const version = "2.5.1";
5567
5608
 
5568
5609
  // -----------------------------------------------------------------------------
5569
5610
  // Scheduler
@@ -5642,7 +5683,14 @@ class Scheduler {
5642
5683
  if (!hasError) {
5643
5684
  fiber.complete();
5644
5685
  }
5645
- this.tasks.delete(fiber);
5686
+ // at this point, the fiber should have been applied to the DOM, so we can
5687
+ // remove it from the task list. If it is not the case, it means that there
5688
+ // was an error and an error handler triggered a new rendering that recycled
5689
+ // the fiber, so in that case, we actually want to keep the fiber around,
5690
+ // otherwise it will just be ignored.
5691
+ if (fiber.appliedToDom) {
5692
+ this.tasks.delete(fiber);
5693
+ }
5646
5694
  }
5647
5695
  }
5648
5696
  }
@@ -6026,12 +6074,14 @@ TemplateSet.prototype._compileTemplate = function _compileTemplate(name, templat
6026
6074
  dev: this.dev,
6027
6075
  translateFn: this.translateFn,
6028
6076
  translatableAttributes: this.translatableAttributes,
6077
+ customDirectives: this.customDirectives,
6078
+ hasGlobalValues: this.hasGlobalValues,
6029
6079
  });
6030
6080
  };
6031
6081
 
6032
6082
  export { App, Component, EventBus, OwlError, __info__, batched, 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 };
6033
6083
 
6034
6084
 
6035
- __info__.date = '2024-10-31T09:42:30.824Z';
6036
- __info__.hash = 'b8d09e5';
6085
+ __info__.date = '2024-11-26T08:42:41.633Z';
6086
+ __info__.hash = '7fc552e';
6037
6087
  __info__.url = 'https://github.com/odoo/owl';
package/dist/owl.iife.js CHANGED
@@ -3230,6 +3230,9 @@
3230
3230
  }
3231
3231
  }
3232
3232
  this.getRawTemplate = config.getTemplate;
3233
+ this.customDirectives = config.customDirectives || {};
3234
+ this.runtimeUtils = { ...helpers, __globals__: config.globalValues || {} };
3235
+ this.hasGlobalValues = Boolean(config.globalValues && Object.keys(config.globalValues).length);
3233
3236
  }
3234
3237
  static registerTemplate(name, fn) {
3235
3238
  globalTemplates[name] = fn;
@@ -3286,7 +3289,7 @@
3286
3289
  this.templates[name] = function (context, parent) {
3287
3290
  return templates[name].call(this, context, parent);
3288
3291
  };
3289
- const template = templateFn(this, bdom, helpers);
3292
+ const template = templateFn(this, bdom, this.runtimeUtils);
3290
3293
  this.templates[name] = template;
3291
3294
  }
3292
3295
  return this.templates[name];
@@ -3337,7 +3340,7 @@
3337
3340
  //------------------------------------------------------------------------------
3338
3341
  // Misc types, constants and helpers
3339
3342
  //------------------------------------------------------------------------------
3340
- const RESERVED_WORDS = "true,false,NaN,null,undefined,debugger,console,window,in,instanceof,new,function,return,eval,void,Math,RegExp,Array,Object,Date".split(",");
3343
+ const RESERVED_WORDS = "true,false,NaN,null,undefined,debugger,console,window,in,instanceof,new,function,return,eval,void,Math,RegExp,Array,Object,Date,__globals__".split(",");
3341
3344
  const WORD_REPLACEMENT = Object.assign(Object.create(null), {
3342
3345
  and: "&&",
3343
3346
  or: "||",
@@ -3809,6 +3812,9 @@
3809
3812
  this.dev = options.dev || false;
3810
3813
  this.ast = ast;
3811
3814
  this.templateName = options.name;
3815
+ if (options.hasGlobalValues) {
3816
+ this.helpers.add("__globals__");
3817
+ }
3812
3818
  }
3813
3819
  generateCode() {
3814
3820
  const ast = this.ast;
@@ -4847,29 +4853,33 @@
4847
4853
  // Parser
4848
4854
  // -----------------------------------------------------------------------------
4849
4855
  const cache = new WeakMap();
4850
- function parse(xml) {
4856
+ function parse(xml, customDir) {
4857
+ const ctx = {
4858
+ inPreTag: false,
4859
+ customDirectives: customDir,
4860
+ };
4851
4861
  if (typeof xml === "string") {
4852
4862
  const elem = parseXML(`<t>${xml}</t>`).firstChild;
4853
- return _parse(elem);
4863
+ return _parse(elem, ctx);
4854
4864
  }
4855
4865
  let ast = cache.get(xml);
4856
4866
  if (!ast) {
4857
4867
  // we clone here the xml to prevent modifying it in place
4858
- ast = _parse(xml.cloneNode(true));
4868
+ ast = _parse(xml.cloneNode(true), ctx);
4859
4869
  cache.set(xml, ast);
4860
4870
  }
4861
4871
  return ast;
4862
4872
  }
4863
- function _parse(xml) {
4873
+ function _parse(xml, ctx) {
4864
4874
  normalizeXML(xml);
4865
- const ctx = { inPreTag: false };
4866
4875
  return parseNode(xml, ctx) || { type: 0 /* Text */, value: "" };
4867
4876
  }
4868
4877
  function parseNode(node, ctx) {
4869
4878
  if (!(node instanceof Element)) {
4870
4879
  return parseTextCommentNode(node, ctx);
4871
4880
  }
4872
- return (parseTDebugLog(node, ctx) ||
4881
+ return (parseTCustom(node, ctx) ||
4882
+ parseTDebugLog(node, ctx) ||
4873
4883
  parseTForEach(node, ctx) ||
4874
4884
  parseTIf(node, ctx) ||
4875
4885
  parseTPortal(node, ctx) ||
@@ -4911,6 +4921,35 @@
4911
4921
  }
4912
4922
  return null;
4913
4923
  }
4924
+ function parseTCustom(node, ctx) {
4925
+ if (!ctx.customDirectives) {
4926
+ return null;
4927
+ }
4928
+ const nodeAttrsNames = node.getAttributeNames();
4929
+ for (let attr of nodeAttrsNames) {
4930
+ if (attr === "t-custom" || attr === "t-custom-") {
4931
+ throw new OwlError("Missing custom directive name with t-custom directive");
4932
+ }
4933
+ if (attr.startsWith("t-custom-")) {
4934
+ const directiveName = attr.split(".")[0].slice(9);
4935
+ const customDirective = ctx.customDirectives[directiveName];
4936
+ if (!customDirective) {
4937
+ throw new OwlError(`Custom directive "${directiveName}" is not defined`);
4938
+ }
4939
+ const value = node.getAttribute(attr);
4940
+ const modifiers = attr.split(".").slice(1);
4941
+ node.removeAttribute(attr);
4942
+ try {
4943
+ customDirective(node, value, modifiers);
4944
+ }
4945
+ catch (error) {
4946
+ throw new OwlError(`Custom directive "${directiveName}" throw the following error: ${error}`);
4947
+ }
4948
+ return parseNode(node, ctx);
4949
+ }
4950
+ }
4951
+ return null;
4952
+ }
4914
4953
  // -----------------------------------------------------------------------------
4915
4954
  // debugging
4916
4955
  // -----------------------------------------------------------------------------
@@ -5542,9 +5581,11 @@
5542
5581
  normalizeTEscTOut(el);
5543
5582
  }
5544
5583
 
5545
- function compile(template, options = {}) {
5584
+ function compile(template, options = {
5585
+ hasGlobalValues: false,
5586
+ }) {
5546
5587
  // parsing
5547
- const ast = parse(template);
5588
+ const ast = parse(template, options.customDirectives);
5548
5589
  // some work
5549
5590
  const hasSafeContext = template instanceof Node
5550
5591
  ? !(template instanceof Element) || template.querySelector("[t-set], [t-call]") === null
@@ -5566,7 +5607,7 @@
5566
5607
  }
5567
5608
 
5568
5609
  // do not modify manually. This file is generated by the release script.
5569
- const version = "2.4.1";
5610
+ const version = "2.5.1";
5570
5611
 
5571
5612
  // -----------------------------------------------------------------------------
5572
5613
  // Scheduler
@@ -5645,7 +5686,14 @@
5645
5686
  if (!hasError) {
5646
5687
  fiber.complete();
5647
5688
  }
5648
- this.tasks.delete(fiber);
5689
+ // at this point, the fiber should have been applied to the DOM, so we can
5690
+ // remove it from the task list. If it is not the case, it means that there
5691
+ // was an error and an error handler triggered a new rendering that recycled
5692
+ // the fiber, so in that case, we actually want to keep the fiber around,
5693
+ // otherwise it will just be ignored.
5694
+ if (fiber.appliedToDom) {
5695
+ this.tasks.delete(fiber);
5696
+ }
5649
5697
  }
5650
5698
  }
5651
5699
  }
@@ -6029,6 +6077,8 @@ See https://github.com/odoo/owl/blob/${hash}/doc/reference/app.md#configuration
6029
6077
  dev: this.dev,
6030
6078
  translateFn: this.translateFn,
6031
6079
  translatableAttributes: this.translatableAttributes,
6080
+ customDirectives: this.customDirectives,
6081
+ hasGlobalValues: this.hasGlobalValues,
6032
6082
  });
6033
6083
  };
6034
6084
 
@@ -6072,8 +6122,8 @@ See https://github.com/odoo/owl/blob/${hash}/doc/reference/app.md#configuration
6072
6122
  Object.defineProperty(exports, '__esModule', { value: true });
6073
6123
 
6074
6124
 
6075
- __info__.date = '2024-10-31T09:42:30.824Z';
6076
- __info__.hash = 'b8d09e5';
6125
+ __info__.date = '2024-11-26T08:42:41.633Z';
6126
+ __info__.hash = '7fc552e';
6077
6127
  __info__.url = 'https://github.com/odoo/owl';
6078
6128
 
6079
6129
 
@@ -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 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 v(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 y(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?{}:y(t);const e=this.classList;for(let n in t)c.call(e,n)}function $(t,e){e=""===e?{}:y(e),t=""===t?{}:y(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){let e=!1;return async(...n)=>{e||(e=!0,await Promise.resolve(),e=!1,t(...n))}}function N(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 k extends EventTarget{trigger(t,e){this.dispatchEvent(new CustomEvent(t,{detail:e}))}}class E extends String{}function A(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(S[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}),S[e]=!0}(t,o,e);const r=_++;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}_${T++}`;e&&(o=`${o}_capture`);function r(t){const e=t.currentTarget;if(!e||!N(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 T=1;let _=1;const S={};const C=Node.prototype,O=C.insertBefore,D=(L=C,R="textContent",Object.getOwnPropertyDescriptor(L,R)).set;var L,R;const B=C.removeChild;class P{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,O.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];O.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];O.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,O.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)D.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 j(t){return new P(t)}const M=Node.prototype,I=CharacterData.prototype,W=M.insertBefore,F=((t,e)=>Object.getOwnPropertyDescriptor(t,e))(I,"data").set,V=M.removeChild;class K{constructor(t){this.text=t}mountNode(t,e,n){this.parentEl=e,W.call(e,t,n),this.el=t}moveBeforeDOMNode(t,e=this.parentEl){this.parentEl=e,W.call(e,this.el,t)}moveBeforeVNode(t,e){W.call(this.parentEl,this.el,t?t.el:e)}beforeRemove(){}remove(){V.call(this.parentEl,this.el)}firstNode(){return this.el}toString(){return this.text}}class z extends K{mount(t,e){this.mountNode(document.createTextNode(G(this.text)),t,e)}patch(t){const e=t.text;this.text!==e&&(F.call(this.el,G(e)),this.text=e)}}class H extends K{mount(t,e){this.mountNode(document.createComment(G(this.text)),t,e)}patch(){}}function U(t){return new z(t)}function q(t){return new H(t)}function G(t){switch(typeof t){case"string":return t;case"number":return String(t);case"boolean":return t?"true":"false";default:return t||""}}const X=(t,e)=>Object.getOwnPropertyDescriptor(t,e),Y=Node.prototype,Z=Element.prototype,J=X(CharacterData.prototype,"data").set,Q=X(Y,"firstChild").get,tt=X(Y,"nextSibling").get,et=()=>{};function nt(t){return function(e){this[t]=0===e?0:e?e.valueOf():""}}const ot={};function rt(t){if(t in ot)return ot[t];const e=(new DOMParser).parseFromString(`<t>${t}</t>`,"text/xml").firstChild.firstChild;n.shouldNormalizeDom&&st(e);const o=it(e),r=ct(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=Y.cloneNode,d=Y.insertBefore,f=Z.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=P.prototype.beforeRemove,(t,e=[])=>new n(t,e);return t=>new n(t)}(o.el,r);return ot[t]=s,s}function st(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)st(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 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||lt(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=it(t.firstChild,l,l),s.appendChild(l.firstChild.el);let e=t.firstChild,n=l.firstChild;for(;e=e.nextSibling;)n.nextSibling=it(e,n,l),s.appendChild(n.nextSibling.el),n=n.nextSibling}}return l.info.length&&lt(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 lt(t){t.isRef=!0;do{t.refN++}while(t=t.parent)}function at(t){let e=t.parent;for(;e&&e.nextSibling===t;)t=e,e=e.parent;return e}function ct(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:ht,updateData:ht});break;case"child":n.isOnlyChild?t.children[n.idx]={parentRefIdx:n.refIdx,isOnlyChild:!0}:t.children[n.idx]={parentRefIdx:at(e).refIdx,afterRefIdx:n.refIdx};break;case"property":{const e=n.refIdx,o=nt(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:v});break;case"handler":{const{setup:e,update:o}=A(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:ut(o,t.refList),updateData:et})}}(e,t),n++}if(i){const r=n+s;e.collectors.push({idx:r,prevIdx:o,getVal:tt}),ct(t.nextSibling,e,r)}s&&(e.collectors.push({idx:n,prevIdx:o,getVal:Q}),ct(t.firstChild,e,n))}return e}function ht(t){J.call(this,G(t))}function ut(t,e){return function(n){e[e.length-1][t]=()=>n(this)}}const dt=Node.prototype,ft=dt.insertBefore,pt=dt.appendChild,mt=dt.removeChild,bt=((t,e)=>Object.getOwnPropertyDescriptor(t,e))(dt,"textContent").set;class gt{constructor(t){this.children=t}mount(t,e){const n=this.children,o=document.createTextNode("");this.anchor=o,ft.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 bt.call(f,""),void pt.call(f,u)}let p,m=0,b=0,g=n[0],v=o[0],y=n.length-1,w=o.length-1,$=n[y],x=o[w];for(;m<=y&&b<=w;){if(null===g){g=n[++m];continue}if(null===$){$=n[--y];continue}let t=g.key,r=v.key;if(t===r){i.call(g,v,e),o[b]=g,g=n[++m],v=o[++b];continue}let l=$.key,a=x.key;if(l===a){i.call($,x,e),o[w]=$,$=n[--y],x=o[--w];continue}if(t===a){i.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){i.call($,v,e),o[b]=$;const t=n[m];c.call($,t,u),$=n[--y],v=o[++b];continue}p=p||yt(n,m,y);let d=p[r];if(void 0===d)s.call(v,f,h.call(g)||null);else{const t=n[d];c.call(t,g,null),i.call(t,v,e),o[b]=t,n[d]=null}v=o[++b]}if(m<=y||b<=w)if(m>y){const t=o[w+1],e=t?h.call(t)||null:u;for(let t=b;t<=w;t++)s.call(o[t],f,e)}else for(let t=m;t<=y;t++){let o=n[t];o&&(e&&a.call(o),l.call(o))}}beforeRemove(){const t=this.children,e=t.length;if(e){const n=t[0].beforeRemove;for(let o=0;o<e;o++)n.call(t[o])}}remove(){const{parentEl:t,anchor:e}=this;if(this.isOnlyChild)bt.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])}mt.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 vt(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 wt=Node.prototype,$t=wt.insertBefore,xt=wt.removeChild;class Nt{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)$t.call(t,n,e);if(!this.content.length){const n=document.createTextNode("");this.content.push(n),$t.call(t,n,e)}}moveBeforeDOMNode(t,e=this.parentEl){this.parentEl=e;for(let n of this.content)$t.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)$t.call(n,t,o);if(!s.length){const t=document.createTextNode("");s.push(t),$t.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)xt.call(t,e)}firstNode(){return this.content[0]}toString(){return this.html}}function kt(t){return new Nt(t)}function Et(t,e,n=null){t.mount(e,n)}const At=new WeakMap,Tt=new WeakMap;function _t(t,e){if(!t)return!1;const n=t.fiber;n&&At.set(n,e);const o=Tt.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 _t(t.parent,e)}function St(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);At.set(o.root,e)}if(!_t(n,e)){console.warn("[Owl] Unhandled error. Destroying the root component");try{n.app.destroy()}catch(t){console.error(t)}throw e}}function Ct(){throw new s("Attempted to render cancelled fiber")}function Ot(t){let e=0;for(let n of t){let t=n.node;n.render=Ct,0===t.status&&t.cancel(),t.fiber=null,n.bdom?t.forceNextRender=!0:e++,e+=Ot(n.children)}return e}class Dt{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 Lt extends Dt{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 Rt extends Lt{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)Et(e.bdom,this.target);else{const t=this.target.childNodes[0];Et(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"),Pt=()=>{throw new Error("Called NO_CALLBACK. Owl is broken, please report this to the maintainers.")},jt=Object.prototype.toString,Mt=Object.prototype.hasOwnProperty,It=["Object","Array","Set","Map","WeakMap"],Wt=["Set","Map","WeakMap"];function Ft(t){return jt.call(Ut(t)).slice(8,-1)}function Vt(t){return"object"==typeof t&&It.includes(Ft(t))}function Kt(t,e){return Vt(t)?te(t,e):t}const zt=new WeakSet;function Ht(t){return zt.add(t),t}function Ut(t){return Jt.has(t)?Jt.get(t):t}const qt=new WeakMap;function Gt(t,e,n){if(n===Pt)return;qt.get(t)||qt.set(t,new Map);const o=qt.get(t);o.get(e)||o.set(e,new Set),o.get(e).add(n),Yt.has(n)||Yt.set(n,new Set),Yt.get(n).add(t)}function Xt(t,e){const n=qt.get(t);if(!n)return;const o=n.get(e);if(o)for(const t of[...o])Zt(t),t()}const Yt=new WeakMap;function Zt(t){const e=Yt.get(t);if(e){for(const n of e){const e=qt.get(n);if(e)for(const[n,o]of e.entries())o.delete(t),o.size||e.delete(n)}e.clear()}}const Jt=new WeakMap,Qt=new WeakMap;function te(t,e=Pt){if(!Vt(t))throw new s("Cannot make the given value reactive");if(zt.has(t))return t;if(Jt.has(t))return te(Jt.get(t),e);Qt.has(t)||Qt.set(t,new WeakMap);const n=Qt.get(t);if(!n.has(e)){const o=Ft(t),r=Wt.includes(o)?function(t,e,n){const o=le[n](t,e);return Object.assign(ee(e),{get:(t,n)=>Mt.call(o,n)?o[n]:(Gt(t,n,e),Kt(t[n],e))})}(t,e,o):ee(e),s=new Proxy(t,r);n.set(e,s),Jt.set(s,t)}return n.get(e)}function ee(t){return{get(e,n,o){const r=Object.getOwnPropertyDescriptor(e,n);return!r||r.writable||r.configurable?(Gt(e,n,t),Kt(Reflect.get(e,n,o),t)):Reflect.get(e,n,o)},set(t,e,n,o){const r=Mt.call(t,e),s=Reflect.get(t,e,o),i=Reflect.set(t,e,Ut(n),o);return!r&&Mt.call(t,e)&&Xt(t,Bt),(s!==Reflect.get(t,e,o)||"length"===e&&Array.isArray(t))&&Xt(t,e),i},deleteProperty(t,e){const n=Reflect.deleteProperty(t,e);return Xt(t,Bt),Xt(t,e),n},ownKeys:e=>(Gt(e,Bt,t),Reflect.ownKeys(e)),has:(e,n)=>(Gt(e,Bt,t),Reflect.has(e,n))}}function ne(t,e,n){return o=>(o=Ut(o),Gt(e,o,n),Kt(e[t](o),n))}function oe(t,e,n){return function*(){Gt(e,Bt,n);const o=e.keys();for(const r of e[t]()){const t=o.next().value;Gt(e,t,n),yield Kt(r,n)}}}function re(t,e){return function(n,o){Gt(t,Bt,e),t.forEach((function(r,s,i){Gt(t,s,e),n.call(o,Kt(r,e),Kt(s,e),Kt(i,e))}),o)}}function se(t,e,n){return(o,r)=>{o=Ut(o);const s=n.has(o),i=n[e](o),l=n[t](o,r);return s!==n.has(o)&&Xt(n,Bt),i!==n[e](o)&&Xt(n,o),l}}function ie(t){return()=>{const e=[...t.keys()];t.clear(),Xt(t,Bt);for(const n of e)Xt(t,n)}}const le={Set:(t,e)=>({has:ne("has",t,e),add:se("add","has",t),delete:se("delete","has",t),keys:oe("keys",t,e),values:oe("values",t,e),entries:oe("entries",t,e),[Symbol.iterator]:oe(Symbol.iterator,t,e),forEach:re(t,e),clear:ie(t),get size(){return Gt(t,Bt,e),t.size}}),Map:(t,e)=>({has:ne("has",t,e),get:ne("get",t,e),set:se("set","get",t),delete:se("delete","has",t),keys:oe("keys",t,e),values:oe("values",t,e),entries:oe("entries",t,e),[Symbol.iterator]:oe(Symbol.iterator,t,e),forEach:re(t,e),clear:ie(t),get size(){return Gt(t,Bt,e),t.size}}),WeakMap:(t,e)=>({has:ne("has",t,e),get:ne("get",t,e),set:se("set","get",t),delete:se("delete","has",t)})};let ae=null;function ce(){if(!ae)throw new s("No active component (a hook function should only be called in 'setup')");return ae}function he(t,e){for(let n in e)void 0===t[n]&&(t[n]=e[n])}const ue=new WeakMap;function de(t){const e=ce();let n=ue.get(e);return n||(n=x(e.render.bind(e,!1)),ue.set(e,n),e.willDestroy.push(Zt.bind(null,n))),te(t,n)}class fe{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=[],ae=this,this.app=n,this.parent=o,this.props=e,this.parentKey=r;const s=t.defaultProps;e=Object.assign({},e),s&&he(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&&Jt.has(n)&&(e[t]=de(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(),ae=null}mountComponent(t,e){const n=new Rt(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&&!At.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-Ot(e.children)),t.locked=!1,e.children=[],e.childrenMap={},e.bdom=null,At.has(e)&&(At.delete(e),At.delete(t),e.appliedToDom=!1),e}const n=new Lt(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&&(Ot(n.children),n.root=null),new Dt(t,e)}(this,e);this.fiber=n;const o=this.component,r=o.constructor.defaultProps;r&&he(t,r),ae=this;for(const e in t){const n=t[e];n&&"object"==typeof n&&Jt.has(n)&&(t[e]=de(n))}ae=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=ue.get(this);return t?(e=t,[...Yt.get(e)||[]].map((t=>{const n=qt.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 pe=Symbol("timeout"),me={onWillStart:3e3,onWillUpdateProps:3e3};function be(t,e){const n=new s,o=new s,r=ce();return(...s)=>{const i=t=>{throw n.cause=t,n.message=t instanceof Error?`The following error occurred in ${e}: "${t.message}"`:`Something that is not an Error was thrown in ${e} (see this Error's "cause" property)`,n};let l;try{l=t(...s)}catch(t){i(t)}if(!(l instanceof Promise))return l;const a=me[e];if(a){const t=r.fiber;Promise.race([l.catch((()=>{})),new Promise((t=>setTimeout((()=>t(pe)),a)))]).then((n=>{n===pe&&r.fiber===t&&r.status<=2&&(o.message=`${e}'s promise hasn't resolved after ${a/1e3} seconds`,console.log(o))}))}return l.catch(i)}}function ge(t){const e=ce(),n=e.app.dev?be:t=>t;e.mounted.push(n(t.bind(e.component),"onMounted"))}function ve(t){const e=ce(),n=e.app.dev?be:t=>t;e.patched.push(n(t.bind(e.component),"onPatched"))}function ye(t){const e=ce(),n=e.app.dev?be:t=>t;e.willUnmount.unshift(n(t.bind(e.component),"onWillUnmount"))}class we{constructor(t,e,n){this.props=t,this.env=e,this.__owl__=n}setup(){}render(t=!1){this.__owl__.render(!0===t)}}we.template="";const $e=U("").constructor;class xe extends $e{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 Ne extends we{setup(){const t=this.__owl__;ge((()=>{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)}})),ye((()=>{t.bdom.remove()}))}}Ne.template="__portal__",Ne.props={target:{type:String},slots:!0};const ke=t=>Array.isArray(t),Ee=t=>"object"!=typeof t,Ae=t=>"object"==typeof t&&t&&"value"in t;function Te(t){return"object"==typeof t&&"optional"in t&&t.optional||!1}function _e(t){return"*"===t||!0===t?"value":t.name.toLowerCase()}function Se(t){return Ee(t)?_e(t):ke(t)?t.map(Se).join(" or "):Ae(t)?String(t.value):"element"in t?`list of ${Se({type:t.element,optional:!1})}s`:"shape"in t?"object":Se(t.type||"*")}function Ce(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=Ut(t);let o=[];for(let n in t)if(n in e){let r=Oe(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&&!Te(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 ${Se(r)})`;o.push(`'${n}' is missing${e}`)}}return o}function Oe(t,e,n){if(void 0===e)return Te(n)?null:`'${t}' is undefined (should be a ${Se(n)})`;if(Ee(n))return function(t,e,n){if("function"==typeof n)if("object"==typeof e){if(!(e instanceof n))return`'${t}' is not a ${_e(n)}`}else if(typeof e!==n.name.toLowerCase())return`'${t}' is not a ${_e(n)}`;return null}(t,e,n);if(Ae(n))return e===n.value?null:`'${t}' is not equal to '${n.value}'`;if(ke(n)){let o=n.find((n=>!Oe(t,e,n)));return o?null:`'${t}' is not a ${Se(n)}`}let o=null;if("element"in n)o=function(t,e,n){if(!Array.isArray(e))return`'${t}' is not a list of ${Se(n)}s`;for(let o=0;o<e.length;o++){const r=Oe(`${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=Ce(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])=>Oe(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=Oe(t,e,n.type)),"validate"in n&&!o&&(o=n.validate(e)?null:`'${t}' is not valid`),o}const De=Object.create;function Le(t){const e=De(t);for(let n in t)e[n]=t[n];return e}const Re=Symbol("isBoundary");class Be{constructor(t,e,n,o,r){this.fn=t,this.ctx=Le(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 Pe(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)&&!Te(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=Ce(e,r);if(l.length)throw new s(`Invalid props for component '${o.name}': `+l.join(", "))}const je={withDefault:function(t,e){return null==t||!1===t?e:t},zero:Symbol("zero"),isBoundary:Re,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=De(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),j([i,a])}return f||U("")},capture:Le,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(Re);){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:Pe,LazyValue:Be,safeOutput:function(t,e){if(null==t)return e?r("default",e):r("undefined",U(""));let n,o;switch(typeof t){case"object":t instanceof E?(n="string_safe",o=kt(t)):t instanceof Be?(n="lazy_value",o=t.evaluate()):t instanceof String?(n="string_unsafe",o=U(t)):(n="block_safe",o=t);break;case"string":n="string_unsafe",o=U(t);break;default:n="string_unsafe",o=U(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=A(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:Ht,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}}};function Me(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}const Ie={text:U,createBlock:rt,list:vt,multi:j,html:kt,toggler:r,comment:q};class We{constructor(t={}){if(this.rawTemplates=Object.create(Fe),this.templates={},this.Portal=Ne,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){Fe[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:Me(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 "${ce().component.constructor.name}")`}catch{}throw new s(`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 i=o(this,Ie,je);this.templates[t]=i}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 Fe={};function Ve(...t){const e="__template__"+Ve.nextId++,n=String.raw(...t);return Fe[e]=n,e}Ve.nextId=1,We.registerTemplate("__portal__",(function(t,e,n){let{callSlot:o}=n;return function(t,e,n=""){return new xe(t.props.target,o(t,e,n,"default",!1,null))}}));const Ke="true,false,NaN,null,undefined,debugger,console,window,in,instanceof,new,function,return,eval,void,Math,RegExp,Array,Object,Date".split(","),ze=Object.assign(Object.create(null),{and:"&&",or:"||",gt:">",gte:">=",lt:"<",lte:"<="}),He=Object.assign(Object.create(null),{"{":"LEFT_BRACE","}":"RIGHT_BRACE","[":"LEFT_BRACKET","]":"RIGHT_BRACKET",":":"COLON",",":"COMMA","(":"LEFT_PAREN",")":"RIGHT_PAREN"}),Ue="...,.,===,==,+,!==,!=,!,||,&&,>=,>,<=,<,?,-,*,/,%,typeof ,=>,=,;,in ,new ,|,&,^,~".split(",");const qe=[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 Ue)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 ze?{type:"OPERATOR",value:ze[e],size:e.length}:{type:"SYMBOL",value:e}}return!1},function(t){const e=t[0];return!(!e||!(e in He))&&{type:He[e],value:e}}];const Ge=t=>t&&("LEFT_BRACE"===t.type||"COMMA"===t.type),Xe=t=>t&&("RIGHT_BRACE"===t.type||"COMMA"===t.type);function Ye(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 qe)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":case"LEFT_PAREN":r.push(t.type);break;case"RIGHT_BRACE":case"RIGHT_BRACKET":case"RIGHT_PAREN":r.pop()}let a="SYMBOL"===t.type&&!Ke.includes(t.value);if("SYMBOL"!==t.type||Ke.includes(t.value)||s&&("LEFT_BRACE"===l&&Ge(s)&&Xe(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=>Je(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 Ze=new Map([["in "," in "]]);function Je(t){return Ye(t).map((t=>Ze.get(t.value)||t.value)).join("")}const Qe=/\{\{.*?\}\}|\#\{.*?\}/g;function tn(t,e){let n=t.match(Qe);if(n&&n[0].length===t.length)return`(${e(t.slice(2,"{"===n[0][0]?-2:-1))})`;let o=t.replace(Qe,(t=>"${"+e(t.slice(2,"{"===t[0]?-2:-1))+"}"));return"`"+o+"`"}function en(t){return tn(t,Je)}const nn=/\s+/g,on=document.implementation.createDocument(null,null,null),rn=new Set(["stop","capture","prevent","self","synthetic"]);let sn={};function ln(t=""){return sn[t]=(sn[t]||0)+1,t+sn[t]}function an(t,e){switch(t){case"input":return"checked"===e||"indeterminate"===e||"value"===e||"readonly"===e||"readOnly"===e||"disabled"===e;case"option":return"selected"===e||"disabled"===e;case"textarea":return"value"===e||"readonly"===e||"readOnly"===e||"disabled"===e;case"select":return"value"===e||"disabled"===e;case"button":case"optgroup":return"disabled"===e}return!1}function cn(t){return`\`${t.replace(/\\/g,"\\\\").replace(/`/g,"\\`").replace(/\$\{/,"\\${")}\``}class hn{constructor(t,e){this.dynamicTagName=null,this.isRoot=!1,this.hasDynamicChildren=!1,this.children=[],this.data=[],this.childNumber=0,this.parentVar="",this.id=hn.nextBlockId++,this.varName="b"+this.id,this.blockName="block"+this.id,this.target=t,this.type=e}insertData(t,e="d"){const n=ln(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=on.createElement("t");return t.appendChild(this.dom),t.innerHTML}}function un(t,e){return Object.assign({block:null,index:0,forceNewBlock:!0,translate:t.translate,tKeyExpr:null,nameSpace:t.nameSpace,tModelSelectedExpr:t.tModelSelectedExpr},e)}hn.nextBlockId=1;class dn{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 fn=["label","title","placeholder","alt"],pn=/^(\s*)([\s\S]+?)(\s*)$/;class mn{constructor(t,e){if(this.blocks=[],this.nextBlockId=1,this.isDebug=!1,this.targets=[],this.target=new dn("template"),this.translatableAttributes=fn,this.staticDefs=[],this.slotNames=new Set,this.helpers=new Set,this.translateFn=e.translateFn||(t=>t),e.translatableAttributes){const t=new Set(fn);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,hn.nextBlockId=1,sn={},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=cn(t.asXmlString());t.dynamicTagName?(n=n.replace(/^`<\w+/,`\`<\${tag || '${t.dom.nodeName}'}`),n=n.replace(/\w+>`$/,`\${tag || '${t.dom.nodeName}'}>\``),e.push(`let ${t.blockName} = tag => createBlock(${n});`)):e.push(`let ${t.blockName} = createBlock(${n});`)}}if(this.targets.length)for(let t of this.targets)e.push(""),e=e.concat(t.generateCode());e.push(""),e=e.concat("return "+this.target.generateCode());const n=e.join("\n ");if(this.isDebug){const t=`[Owl Debug]\n${n}`;console.log(t)}return n}compileInNewTarget(t,e,n,o){const r=ln(t),s=this.target,i=new dn(r,o);return this.targets.push(i),this.target=i,this.compileAST(e,un(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=on.createElement(n);t.insert(o)}createBlock(t,e,n){const o=this.target.hasRoot,r=new hn(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 Je(t);const n=Ye(t),o=new Map;return n.map((t=>{if(t.varName&&!t.isLocal){if(!o.has(t.varName)){const e=ln("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=pn.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(${Je(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(${cn(t.value)})`,n,{...e,forceNewBlock:o&&!n});else{const e=on.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(nn," ")),!n||o)n=this.createBlock(n,"text",e),this.insertBlock(`text(${cn(r)})`,n,{...e,forceNewBlock:o&&!n});else{const e=0===t.type?on.createTextNode:on.createComment;n.insert(e.call(on,r))}return n.varName}generateHandlerCode(t,e){const n=t.split(".").slice(1).map((t=>{if(!rn.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=ln("tag");this.define(e,Je(t.dynamicTag)),n.dynamicTagName=e}const i={};for(let o in t.attrs){let r,s;if(o.startsWith("t-attf")){r=en(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=Je(t.attrs[o]),s&&an(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=Je(o),f=ln("bExpr");this.define(f,d);const p=Je(r),m=ln("expr");this.define(m,p);const b=`${f}[${m}]`;let g;if(u){let e=h in i&&`'${i[h]}'`;if(!e&&t.attrs){const n=t.attrs[`t-att-${h}`];n&&(e=Je(n))}g=n.insertData(`${b} === ${e}`,"prop"),i[`block-property-${g}`]=u}else if(e){l=`${ln("bValue")}`,this.define(l,b)}else g=n.insertData(`${b}`,"prop"),i[`block-property-${g}`]=h;this.helpers.add("toNumber");let v=`ev.target.${h}`;v=c?`${v}.trim()`:v,v=a?`toNumber(${v})`:v;const y=`[(ev) => { ${b} = ${v}; }]`;g=n.insertData(y,"hdlr"),i[`block-handler-${g}`]=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=Qe.test(t.ref);let o=`\`${t.ref}\``;e&&(o=tn(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?on.createElementNS(a,t.tag):on.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=un(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=Je(t.expr),t.defaultValue&&(this.helpers.add("withDefault"),n=`withDefault(${n}, ${cn(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=on.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=hn.nextBlockId;const r=un(e);this.compileAST({type:3,content:t.body},r),this.helpers.add("safeOutput"),n=`safeOutput(${Je(t.expr)}, b${o})`}else this.helpers.add("safeOutput"),n=`safeOutput(${Je(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,un(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 (${Je(t.condition)}) {`),this.compileTIfBranch(t.content,o,e),t.tElif)for(let n of t.tElif)this.addLine(`} else if (${Je(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(${Je(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?Je(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=ln(),this.define(`memo${a}`,Je(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=un(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=ln("tKey_");return this.define(n,Je(t.expr)),e=un(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=un(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=ln("ctx"),this.addLine(`let ${r} = ${Je(t.context)};`));const s=Qe.test(t.name),i=s?en(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=un(e,{ctxVar:r}),o=this.compileMulti({type:3,content:t.body},n);o&&(this.helpers.add("zero"),this.addLine(`${r}[zero] = ${o};`))}const l=this.generateComponentKey();if(s){const t=ln("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=ln("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(Je(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?Je(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=cn(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(t="key"){const e=[ln("__")];for(let t=0;t<this.target.loopLevel;t++)e.push(`\${key${t+1}}`);return`${t} + \`${e.join("__")}\``}formatProp(t,e){if(e=t.endsWith(".translate")?cn(this.translateFn(e)):this.captureExpression(e),t.includes(".")){let[n,o]=t.split(".");switch(t=n,o){case"bind":e=`(${e}).bind(this)`;break;case"alike":case"translate":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({}, ${Je(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=ln("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,a=this.getPropString(r,t.dynamicProps);(s&&(t.dynamicProps||o)||this.dev)&&(i=ln("props"),this.define(i,a),a=i),s&&(t.dynamicProps||o)&&(this.helpers.add("markRaw"),this.addLine(`${i}.slots = markRaw(Object.assign(${s}, ${i}.slots))`)),t.isDynamic?(l=ln("Comp"),this.define(l,Je(t.name))):l=`\`${t.name}\``,this.dev&&this.addLine(`helpers.validateProps(${l}, ${i}, this);`),n&&(!1===e.forceNewBlock||e.tKeyExpr)&&this.insertAnchor(n);let c=this.generateComponentKey();e.tKeyExpr&&(c=`${e.tKeyExpr} + ${c}`);let h=ln("comp");const u=[];for(let e in t.props||{}){let[t,n]=e.split(".");n||u.push(`"${t}"`)}this.staticDefs.push({id:h,expr:`app.createComponent(${t.isDynamic?null:l}, ${!t.isDynamic}, ${!!t.slots}, ${!!t.dynamicProps}, [${u}])`}),t.isDynamic&&(c=`(${l}).name + ${c}`);let d=`${h}(${a}, ${c}, node, this, ${t.isDynamic?l:null})`;return t.isDynamic&&(d=`toggler(${l}, ${d})`),t.on&&(d=this.wrapWithEventCatcher(d,t.on)),n=this.createBlock(n,"multi",e),this.insertBlock(d,n,e),n.varName}wrapWithEventCatcher(t,e){this.helpers.add("createCatcher");let n=ln("catcher"),o={},r=[];for(let t in e){let n=ln("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(Qe)?(s=!0,i=!0,o=en(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=this.generateComponentKey(a));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=ln("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);let r="ctx";!this.target.loopLevel&&this.hasSafeContext||(r=ln("ctx"),this.helpers.add("capture"),this.define(r,"capture(ctx)"));let s=ln("comp");this.staticDefs.push({id:s,expr:"app.createComponent(null, false, true, false, false)"});const i=`${s}({target: ${Je(t.target)},slots: {'default': {__render: ${o}.bind(this), __ctx: ${r}}}}, ${this.generateComponentKey()}, node, ctx, Portal)`;return n&&this.insertAnchor(n),n=this.createBlock(n,"multi",e),this.insertBlock(i,n,{...e,forceNewBlock:!1}),n.varName}}const bn=new WeakMap;function gn(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 vn(t,{inPreTag:!1})||{type:0,value:""}}function vn(t,e){return t instanceof Element?function(t,e){if(t.hasAttribute("t-debug"))return t.removeAttribute("t-debug"),{type:12,content:vn(t,e)};if(t.hasAttribute("t-log")){const n=t.getAttribute("t-log");return t.removeAttribute("t-log"),{type:13,expr:n,content:vn(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=vn(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=vn(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=vn(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=vn(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=vn(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=vn(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=kn(t,e);return{type:7,name:n,body:r.length?r:null,context:o}}(t,e)||function(t){if(!t.hasAttribute("t-call-block"))return null;const e=t.getAttribute("t-call-block");return{type:15,name:e}}(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=vn(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=vn(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=vn(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:vn(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:En(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=Nn.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=vn(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=En(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&&xn.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(wn.test(i)){const t=i.lastIndexOf(".");r=i.slice(0,t),l=`'${i.slice(t+1)}'`}else{if(!$n.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(".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 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=kn(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=kn(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 En(t,e)}(t,e):function(t,e){if(t.nodeType===Node.TEXT_NODE){let n=t.textContent||"";return e.inPreTag||!yn.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 yn=/[\r\n]/;const wn=/\.[\w_]+\s*$/,$n=/\[[^\[]+\]\s*$/,xn=new Set(["svg","g","path"]);const Nn=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 kn(t,e){const n=[];for(let o of t.childNodes){const t=vn(o,e);t&&(3===t.type?n.push(...t.content):n.push(t))}return n}function En(t,e){const n=kn(t,e);switch(n.length){case 0:return null;case 1:return n[0];default:return{type:3,content:n}}}function An(t,e={}){const n=function(t){if("string"==typeof t)return gn(Me(`<t>${t}</t>`).firstChild);let e=bn.get(t);return e||(e=gn(t.cloneNode(!0)),bn.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 mn(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}}class Tn{constructor(){this.tasks=new Set,this.frame=0,this.delayedRenders=[],this.cancelledNodes=new Set,this.processing=!1,this.requestAnimationFrame=Tn.requestAnimationFrame}addFiber(t){this.tasks.add(t.root)}scheduleDestroy(t){this.cancelledNodes.add(t),0===this.frame&&(this.frame=this.requestAnimationFrame((()=>this.processTasks())))}flush(){if(this.delayedRenders.length){let t=this.delayedRenders;this.delayedRenders=[];for(let e of t)e.root&&3!==e.node.status&&e.node.fiber===e&&e.render()}0===this.frame&&(this.frame=this.requestAnimationFrame((()=>this.processTasks())))}processTasks(){if(!this.processing){this.processing=!0,this.frame=0;for(let t of this.cancelledNodes)t._destroy();this.cancelledNodes.clear();for(let t of this.tasks)this.processFiber(t);for(let t of this.tasks)3===t.node.status&&this.tasks.delete(t);this.processing=!1}}processFiber(t){if(t.root!==t)return void this.tasks.delete(t);const e=At.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)}}Tn.requestAnimationFrame=window.requestAnimationFrame.bind(window);let _n=!1;const Sn=new Set;window.__OWL_DEVTOOLS__||(window.__OWL_DEVTOOLS__={apps:Sn,Fiber:Dt,RootFiber:Lt,toRaw:Ut,reactive:te});class Cn extends We{constructor(t,e={}){super(e),this.scheduler=new Tn,this.subRoots=new Set,this.root=null,this.name=e.name||"",this.Root=t,Sn.add(this),e.test&&(this.dev=!0),this.warnIfNoStaticProps=e.warnIfNoStaticProps||!1,!this.dev||e.test||_n||(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.`),_n=!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){const n=this.createRoot(this.Root,{props:this.props});return this.root=n.node,this.subRoots.delete(n.node),n.mount(t,e)}createRoot(t,e={}){const n=e.props||{},o=this.env;e.env&&(this.env=e.env);const r=function(){let t=ae;return()=>{ae=t}}(),s=this.makeNode(t,n);return r(),e.env&&(this.env=o),this.subRoots.add(s),{node:s,mount:(e,o)=>{Cn.validateTarget(e),this.dev&&Pe(t,n,{__owl__:{app:this}});return this.mountNode(s,e,o)},destroy:()=>{this.subRoots.delete(s),s.destroy(),this.scheduler.processTasks()}}}makeNode(t,e){return new fe(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=Tt.get(t);r||(r=[],Tt.set(t,r)),r.unshift((t=>{throw o||n(t),t}))}));return t.mountComponent(e,n),o}destroy(){if(this.root){for(let t of this.subRoots)t.destroy();this.root.destroy(),this.scheduler.processTasks()}Sn.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=fe.prototype.updateAndRender,h=fe.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 we))throw new s(`"${t}" is not a Component. It must inherit from the Component class`)}f=new fe(u,n,this,r,o),d[o]=f,h.call(f,new Dt(f,p))}return p.childrenMap[o]=f,f}}handleError(...t){return St(...t)}}Cn.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")},Cn.apps=Sn,Cn.version="2.4.1";function On(t,e){const n=Object.create(t),o=Object.getOwnPropertyDescriptors(e);return Object.freeze(Object.defineProperties(n,o))}function Dn(t){const e=ce();e.childEnv=On(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 Ln={config:n,mount:Et,patch:function(t,e,n=!1){t.patch(e,n)},remove:function(t,e=!1){e&&t.beforeRemove(),t.remove()},list:vt,multi:j,text:U,toggler:r,createBlock:rt,html:kt,comment:q},Rn={version:Cn.version};We.prototype._compileTemplate=function(t,e){return An(e,{name:t,dev:this.dev,translateFn:this.translateFn,translatableAttributes:this.translatableAttributes})},t.App=Cn,t.Component=we,t.EventBus=k,t.OwlError=s,t.__info__=Rn,t.batched=x,t.blockDom=Ln,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=Ht,t.markup=function(t){return new E(t)},t.mount=async function(t,e,n={}){return new Cn(t,n).mount(e,n)},t.onError=function(t){const e=ce();let n=Tt.get(e);n||(n=[],Tt.set(e,n)),n.push(t.bind(e.component))},t.onMounted=ge,t.onPatched=ve,t.onRendered=function(t){const e=ce(),n=e.renderFn,o=e.app.dev?be:t=>t;t=o(t.bind(e.component),"onRendered"),e.renderFn=()=>{const e=n();return t(),e}},t.onWillDestroy=function(t){const e=ce(),n=e.app.dev?be:t=>t;e.willDestroy.push(n(t.bind(e.component),"onWillDestroy"))},t.onWillPatch=function(t){const e=ce(),n=e.app.dev?be:t=>t;e.willPatch.unshift(n(t.bind(e.component),"onWillPatch"))},t.onWillRender=function(t){const e=ce(),n=e.renderFn,o=e.app.dev?be:t=>t;t=o(t.bind(e.component),"onWillRender"),e.renderFn=()=>(t(),n())},t.onWillStart=function(t){const e=ce(),n=e.app.dev?be:t=>t;e.willStart.push(n(t.bind(e.component),"onWillStart"))},t.onWillUnmount=ye,t.onWillUpdateProps=function(t){const e=ce(),n=e.app.dev?be:t=>t;e.willUpdateProps.push(n(t.bind(e.component),"onWillUpdateProps"))},t.reactive=te,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=Ut,t.useChildSubEnv=Dn,t.useComponent=function(){return ae.component},t.useEffect=function(t,e=()=>[NaN]){let n,o;ge((()=>{o=e(),n=t(...o)})),ve((()=>{const r=e();r.some(((t,e)=>t!==o[e]))&&(o=r,n&&n(),n=t(...o))})),ye((()=>n&&n()))},t.useEnv=function(){return ce().component.env},t.useExternalListener=function(t,e,n,o){const r=ce(),s=n.bind(r.component);ge((()=>t.addEventListener(e,s,o))),ye((()=>t.removeEventListener(e,s,o)))},t.useRef=function(t){const e=ce().refs;return{get el(){const n=e[t];return N(n)?n:null}}},t.useState=de,t.useSubEnv=function(t){const e=ce();e.component.env=On(e.component.env,t),Dn(t)},t.validate=function(t,e){let n=Ce(t,e);if(n.length)throw new s("Invalid object: "+n.join(", "))},t.validateType=Oe,t.whenReady=function(t){return new Promise((function(t){"loading"!==document.readyState?t(!0):document.addEventListener("DOMContentLoaded",t,!1)})).then(t||function(){})},t.xml=Ve,Object.defineProperty(t,"__esModule",{value:!0}),Rn.date="2024-10-31T09:42:30.824Z",Rn.hash="b8d09e5",Rn.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 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 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 v(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 y(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?{}:y(t);const e=this.classList;for(let n in t)c.call(e,n)}function $(t,e){e=""===e?{}:y(e),t=""===t?{}:y(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){let e=!1;return async(...n)=>{e||(e=!0,await Promise.resolve(),e=!1,t(...n))}}function N(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 k extends EventTarget{trigger(t,e){this.dispatchEvent(new CustomEvent(t,{detail:e}))}}class E extends String{}function A(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(D[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}),D[e]=!0}(t,o,e);const r=_++;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}_${T++}`;e&&(o=`${o}_capture`);function r(t){const e=t.currentTarget;if(!e||!N(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 T=1;let _=1;const D={};const C=Node.prototype,O=C.insertBefore,S=(L=C,R="textContent",Object.getOwnPropertyDescriptor(L,R)).set;var L,R;const B=C.removeChild;class P{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,O.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];O.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];O.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,O.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)S.call(t,"");else{const e=this.children,n=this.anchors;for(let o=0,r=e.length;o<r;o++){const r=e[o];r?r.remove():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 j(t){return new P(t)}const M=Node.prototype,I=CharacterData.prototype,W=M.insertBefore,V=((t,e)=>Object.getOwnPropertyDescriptor(t,e))(I,"data").set,F=M.removeChild;class K{constructor(t){this.text=t}mountNode(t,e,n){this.parentEl=e,W.call(e,t,n),this.el=t}moveBeforeDOMNode(t,e=this.parentEl){this.parentEl=e,W.call(e,this.el,t)}moveBeforeVNode(t,e){W.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 z extends K{mount(t,e){this.mountNode(document.createTextNode(G(this.text)),t,e)}patch(t){const e=t.text;this.text!==e&&(V.call(this.el,G(e)),this.text=e)}}class H extends K{mount(t,e){this.mountNode(document.createComment(G(this.text)),t,e)}patch(){}}function U(t){return new z(t)}function q(t){return new H(t)}function G(t){switch(typeof t){case"string":return t;case"number":return String(t);case"boolean":return t?"true":"false";default:return t||""}}const X=(t,e)=>Object.getOwnPropertyDescriptor(t,e),Y=Node.prototype,Z=Element.prototype,J=X(CharacterData.prototype,"data").set,Q=X(Y,"firstChild").get,tt=X(Y,"nextSibling").get,et=()=>{};function nt(t){return function(e){this[t]=0===e?0:e?e.valueOf():""}}const ot={};function rt(t){if(t in ot)return ot[t];const e=(new DOMParser).parseFromString(`<t>${t}</t>`,"text/xml").firstChild.firstChild;n.shouldNormalizeDom&&st(e);const o=it(e),r=ct(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=Y.cloneNode,d=Y.insertBefore,f=Z.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=P.prototype.beforeRemove,(t,e=[])=>new n(t,e);return t=>new n(t)}(o.el,r);return ot[t]=s,s}function st(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)st(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 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||lt(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=it(t.firstChild,l,l),s.appendChild(l.firstChild.el);let e=t.firstChild,n=l.firstChild;for(;e=e.nextSibling;)n.nextSibling=it(e,n,l),s.appendChild(n.nextSibling.el),n=n.nextSibling}}return l.info.length&&lt(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 lt(t){t.isRef=!0;do{t.refN++}while(t=t.parent)}function at(t){let e=t.parent;for(;e&&e.nextSibling===t;)t=e,e=e.parent;return e}function ct(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:ht,updateData:ht});break;case"child":n.isOnlyChild?t.children[n.idx]={parentRefIdx:n.refIdx,isOnlyChild:!0}:t.children[n.idx]={parentRefIdx:at(e).refIdx,afterRefIdx:n.refIdx};break;case"property":{const e=n.refIdx,o=nt(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:v});break;case"handler":{const{setup:e,update:o}=A(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:ut(o,t.refList),updateData:et})}}(e,t),n++}if(i){const r=n+s;e.collectors.push({idx:r,prevIdx:o,getVal:tt}),ct(t.nextSibling,e,r)}s&&(e.collectors.push({idx:n,prevIdx:o,getVal:Q}),ct(t.firstChild,e,n))}return e}function ht(t){J.call(this,G(t))}function ut(t,e){return function(n){e[e.length-1][t]=()=>n(this)}}const dt=Node.prototype,ft=dt.insertBefore,pt=dt.appendChild,mt=dt.removeChild,bt=((t,e)=>Object.getOwnPropertyDescriptor(t,e))(dt,"textContent").set;class gt{constructor(t){this.children=t}mount(t,e){const n=this.children,o=document.createTextNode("");this.anchor=o,ft.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 bt.call(f,""),void pt.call(f,u)}let p,m=0,b=0,g=n[0],v=o[0],y=n.length-1,w=o.length-1,$=n[y],x=o[w];for(;m<=y&&b<=w;){if(null===g){g=n[++m];continue}if(null===$){$=n[--y];continue}let t=g.key,r=v.key;if(t===r){i.call(g,v,e),o[b]=g,g=n[++m],v=o[++b];continue}let l=$.key,a=x.key;if(l===a){i.call($,x,e),o[w]=$,$=n[--y],x=o[--w];continue}if(t===a){i.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){i.call($,v,e),o[b]=$;const t=n[m];c.call($,t,u),$=n[--y],v=o[++b];continue}p=p||yt(n,m,y);let d=p[r];if(void 0===d)s.call(v,f,h.call(g)||null);else{const t=n[d];c.call(t,g,null),i.call(t,v,e),o[b]=t,n[d]=null}v=o[++b]}if(m<=y||b<=w)if(m>y){const t=o[w+1],e=t?h.call(t)||null:u;for(let t=b;t<=w;t++)s.call(o[t],f,e)}else for(let t=m;t<=y;t++){let o=n[t];o&&(e&&a.call(o),l.call(o))}}beforeRemove(){const t=this.children,e=t.length;if(e){const n=t[0].beforeRemove;for(let o=0;o<e;o++)n.call(t[o])}}remove(){const{parentEl:t,anchor:e}=this;if(this.isOnlyChild)bt.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])}mt.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 vt(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 wt=Node.prototype,$t=wt.insertBefore,xt=wt.removeChild;class Nt{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)$t.call(t,n,e);if(!this.content.length){const n=document.createTextNode("");this.content.push(n),$t.call(t,n,e)}}moveBeforeDOMNode(t,e=this.parentEl){this.parentEl=e;for(let n of this.content)$t.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)$t.call(n,t,o);if(!s.length){const t=document.createTextNode("");s.push(t),$t.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)xt.call(t,e)}firstNode(){return this.content[0]}toString(){return this.html}}function kt(t){return new Nt(t)}function Et(t,e,n=null){t.mount(e,n)}const At=new WeakMap,Tt=new WeakMap;function _t(t,e){if(!t)return!1;const n=t.fiber;n&&At.set(n,e);const o=Tt.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 _t(t.parent,e)}function Dt(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);At.set(o.root,e)}if(!_t(n,e)){console.warn("[Owl] Unhandled error. Destroying the root component");try{n.app.destroy()}catch(t){console.error(t)}throw e}}function Ct(){throw new s("Attempted to render cancelled fiber")}function Ot(t){let e=0;for(let n of t){let t=n.node;n.render=Ct,0===t.status&&t.cancel(),t.fiber=null,n.bdom?t.forceNextRender=!0:e++,e+=Ot(n.children)}return e}class St{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 Lt extends St{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 Rt extends Lt{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)Et(e.bdom,this.target);else{const t=this.target.childNodes[0];Et(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"),Pt=()=>{throw new Error("Called NO_CALLBACK. Owl is broken, please report this to the maintainers.")},jt=Object.prototype.toString,Mt=Object.prototype.hasOwnProperty,It=["Object","Array","Set","Map","WeakMap"],Wt=["Set","Map","WeakMap"];function Vt(t){return jt.call(Ut(t)).slice(8,-1)}function Ft(t){return"object"==typeof t&&It.includes(Vt(t))}function Kt(t,e){return Ft(t)?te(t,e):t}const zt=new WeakSet;function Ht(t){return zt.add(t),t}function Ut(t){return Jt.has(t)?Jt.get(t):t}const qt=new WeakMap;function Gt(t,e,n){if(n===Pt)return;qt.get(t)||qt.set(t,new Map);const o=qt.get(t);o.get(e)||o.set(e,new Set),o.get(e).add(n),Yt.has(n)||Yt.set(n,new Set),Yt.get(n).add(t)}function Xt(t,e){const n=qt.get(t);if(!n)return;const o=n.get(e);if(o)for(const t of[...o])Zt(t),t()}const Yt=new WeakMap;function Zt(t){const e=Yt.get(t);if(e){for(const n of e){const e=qt.get(n);if(e)for(const[n,o]of e.entries())o.delete(t),o.size||e.delete(n)}e.clear()}}const Jt=new WeakMap,Qt=new WeakMap;function te(t,e=Pt){if(!Ft(t))throw new s("Cannot make the given value reactive");if(zt.has(t))return t;if(Jt.has(t))return te(Jt.get(t),e);Qt.has(t)||Qt.set(t,new WeakMap);const n=Qt.get(t);if(!n.has(e)){const o=Vt(t),r=Wt.includes(o)?function(t,e,n){const o=le[n](t,e);return Object.assign(ee(e),{get:(t,n)=>Mt.call(o,n)?o[n]:(Gt(t,n,e),Kt(t[n],e))})}(t,e,o):ee(e),s=new Proxy(t,r);n.set(e,s),Jt.set(s,t)}return n.get(e)}function ee(t){return{get(e,n,o){const r=Object.getOwnPropertyDescriptor(e,n);return!r||r.writable||r.configurable?(Gt(e,n,t),Kt(Reflect.get(e,n,o),t)):Reflect.get(e,n,o)},set(t,e,n,o){const r=Mt.call(t,e),s=Reflect.get(t,e,o),i=Reflect.set(t,e,Ut(n),o);return!r&&Mt.call(t,e)&&Xt(t,Bt),(s!==Reflect.get(t,e,o)||"length"===e&&Array.isArray(t))&&Xt(t,e),i},deleteProperty(t,e){const n=Reflect.deleteProperty(t,e);return Xt(t,Bt),Xt(t,e),n},ownKeys:e=>(Gt(e,Bt,t),Reflect.ownKeys(e)),has:(e,n)=>(Gt(e,Bt,t),Reflect.has(e,n))}}function ne(t,e,n){return o=>(o=Ut(o),Gt(e,o,n),Kt(e[t](o),n))}function oe(t,e,n){return function*(){Gt(e,Bt,n);const o=e.keys();for(const r of e[t]()){const t=o.next().value;Gt(e,t,n),yield Kt(r,n)}}}function re(t,e){return function(n,o){Gt(t,Bt,e),t.forEach((function(r,s,i){Gt(t,s,e),n.call(o,Kt(r,e),Kt(s,e),Kt(i,e))}),o)}}function se(t,e,n){return(o,r)=>{o=Ut(o);const s=n.has(o),i=n[e](o),l=n[t](o,r);return s!==n.has(o)&&Xt(n,Bt),i!==n[e](o)&&Xt(n,o),l}}function ie(t){return()=>{const e=[...t.keys()];t.clear(),Xt(t,Bt);for(const n of e)Xt(t,n)}}const le={Set:(t,e)=>({has:ne("has",t,e),add:se("add","has",t),delete:se("delete","has",t),keys:oe("keys",t,e),values:oe("values",t,e),entries:oe("entries",t,e),[Symbol.iterator]:oe(Symbol.iterator,t,e),forEach:re(t,e),clear:ie(t),get size(){return Gt(t,Bt,e),t.size}}),Map:(t,e)=>({has:ne("has",t,e),get:ne("get",t,e),set:se("set","get",t),delete:se("delete","has",t),keys:oe("keys",t,e),values:oe("values",t,e),entries:oe("entries",t,e),[Symbol.iterator]:oe(Symbol.iterator,t,e),forEach:re(t,e),clear:ie(t),get size(){return Gt(t,Bt,e),t.size}}),WeakMap:(t,e)=>({has:ne("has",t,e),get:ne("get",t,e),set:se("set","get",t),delete:se("delete","has",t)})};let ae=null;function ce(){if(!ae)throw new s("No active component (a hook function should only be called in 'setup')");return ae}function he(t,e){for(let n in e)void 0===t[n]&&(t[n]=e[n])}const ue=new WeakMap;function de(t){const e=ce();let n=ue.get(e);return n||(n=x(e.render.bind(e,!1)),ue.set(e,n),e.willDestroy.push(Zt.bind(null,n))),te(t,n)}class fe{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=[],ae=this,this.app=n,this.parent=o,this.props=e,this.parentKey=r;const s=t.defaultProps;e=Object.assign({},e),s&&he(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&&Jt.has(n)&&(e[t]=de(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(),ae=null}mountComponent(t,e){const n=new Rt(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&&!At.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-Ot(e.children)),t.locked=!1,e.children=[],e.childrenMap={},e.bdom=null,At.has(e)&&(At.delete(e),At.delete(t),e.appliedToDom=!1),e}const n=new Lt(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&&(Ot(n.children),n.root=null),new St(t,e)}(this,e);this.fiber=n;const o=this.component,r=o.constructor.defaultProps;r&&he(t,r),ae=this;for(const e in t){const n=t[e];n&&"object"==typeof n&&Jt.has(n)&&(t[e]=de(n))}ae=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=ue.get(this);return t?(e=t,[...Yt.get(e)||[]].map((t=>{const n=qt.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 pe=Symbol("timeout"),me={onWillStart:3e3,onWillUpdateProps:3e3};function be(t,e){const n=new s,o=new s,r=ce();return(...s)=>{const i=t=>{throw n.cause=t,n.message=t instanceof Error?`The following error occurred in ${e}: "${t.message}"`:`Something that is not an Error was thrown in ${e} (see this Error's "cause" property)`,n};let l;try{l=t(...s)}catch(t){i(t)}if(!(l instanceof Promise))return l;const a=me[e];if(a){const t=r.fiber;Promise.race([l.catch((()=>{})),new Promise((t=>setTimeout((()=>t(pe)),a)))]).then((n=>{n===pe&&r.fiber===t&&r.status<=2&&(o.message=`${e}'s promise hasn't resolved after ${a/1e3} seconds`,console.log(o))}))}return l.catch(i)}}function ge(t){const e=ce(),n=e.app.dev?be:t=>t;e.mounted.push(n(t.bind(e.component),"onMounted"))}function ve(t){const e=ce(),n=e.app.dev?be:t=>t;e.patched.push(n(t.bind(e.component),"onPatched"))}function ye(t){const e=ce(),n=e.app.dev?be:t=>t;e.willUnmount.unshift(n(t.bind(e.component),"onWillUnmount"))}class we{constructor(t,e,n){this.props=t,this.env=e,this.__owl__=n}setup(){}render(t=!1){this.__owl__.render(!0===t)}}we.template="";const $e=U("").constructor;class xe extends $e{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 Ne extends we{setup(){const t=this.__owl__;ge((()=>{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)}})),ye((()=>{t.bdom.remove()}))}}Ne.template="__portal__",Ne.props={target:{type:String},slots:!0};const ke=t=>Array.isArray(t),Ee=t=>"object"!=typeof t,Ae=t=>"object"==typeof t&&t&&"value"in t;function Te(t){return"object"==typeof t&&"optional"in t&&t.optional||!1}function _e(t){return"*"===t||!0===t?"value":t.name.toLowerCase()}function De(t){return Ee(t)?_e(t):ke(t)?t.map(De).join(" or "):Ae(t)?String(t.value):"element"in t?`list of ${De({type:t.element,optional:!1})}s`:"shape"in t?"object":De(t.type||"*")}function Ce(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=Ut(t);let o=[];for(let n in t)if(n in e){let r=Oe(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&&!Te(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 ${De(r)})`;o.push(`'${n}' is missing${e}`)}}return o}function Oe(t,e,n){if(void 0===e)return Te(n)?null:`'${t}' is undefined (should be a ${De(n)})`;if(Ee(n))return function(t,e,n){if("function"==typeof n)if("object"==typeof e){if(!(e instanceof n))return`'${t}' is not a ${_e(n)}`}else if(typeof e!==n.name.toLowerCase())return`'${t}' is not a ${_e(n)}`;return null}(t,e,n);if(Ae(n))return e===n.value?null:`'${t}' is not equal to '${n.value}'`;if(ke(n)){let o=n.find((n=>!Oe(t,e,n)));return o?null:`'${t}' is not a ${De(n)}`}let o=null;if("element"in n)o=function(t,e,n){if(!Array.isArray(e))return`'${t}' is not a list of ${De(n)}s`;for(let o=0;o<e.length;o++){const r=Oe(`${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=Ce(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])=>Oe(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=Oe(t,e,n.type)),"validate"in n&&!o&&(o=n.validate(e)?null:`'${t}' is not valid`),o}const Se=Object.create;function Le(t){const e=Se(t);for(let n in t)e[n]=t[n];return e}const Re=Symbol("isBoundary");class Be{constructor(t,e,n,o,r){this.fn=t,this.ctx=Le(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 Pe(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)&&!Te(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=Ce(e,r);if(l.length)throw new s(`Invalid props for component '${o.name}': `+l.join(", "))}const je={withDefault:function(t,e){return null==t||!1===t?e:t},zero:Symbol("zero"),isBoundary:Re,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=Se(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),j([i,a])}return f||U("")},capture:Le,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(Re);){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:Pe,LazyValue:Be,safeOutput:function(t,e){if(null==t)return e?r("default",e):r("undefined",U(""));let n,o;switch(typeof t){case"object":t instanceof E?(n="string_safe",o=kt(t)):t instanceof Be?(n="lazy_value",o=t.evaluate()):t instanceof String?(n="string_unsafe",o=U(t)):(n="block_safe",o=t);break;case"string":n="string_unsafe",o=U(t);break;default:n="string_unsafe",o=U(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=A(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:Ht,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}}};function Me(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}const Ie={text:U,createBlock:rt,list:vt,multi:j,html:kt,toggler:r,comment:q};class We{constructor(t={}){if(this.rawTemplates=Object.create(Ve),this.templates={},this.Portal=Ne,this.dev=t.dev||!1,this.translateFn=t.translateFn,this.translatableAttributes=t.translatableAttributes,t.templates)if(t.templates instanceof Document||"string"==typeof t.templates)this.addTemplates(t.templates);else for(const e in t.templates)this.addTemplate(e,t.templates[e]);this.getRawTemplate=t.getTemplate,this.customDirectives=t.customDirectives||{},this.runtimeUtils={...je,__globals__:t.globalValues||{}},this.hasGlobalValues=Boolean(t.globalValues&&Object.keys(t.globalValues).length)}static registerTemplate(t,e){Ve[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:Me(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 "${ce().component.constructor.name}")`}catch{}throw new s(`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 i=o(this,Ie,this.runtimeUtils);this.templates[t]=i}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 Ve={};function Fe(...t){const e="__template__"+Fe.nextId++,n=String.raw(...t);return Ve[e]=n,e}Fe.nextId=1,We.registerTemplate("__portal__",(function(t,e,n){let{callSlot:o}=n;return function(t,e,n=""){return new xe(t.props.target,o(t,e,n,"default",!1,null))}}));const Ke="true,false,NaN,null,undefined,debugger,console,window,in,instanceof,new,function,return,eval,void,Math,RegExp,Array,Object,Date,__globals__".split(","),ze=Object.assign(Object.create(null),{and:"&&",or:"||",gt:">",gte:">=",lt:"<",lte:"<="}),He=Object.assign(Object.create(null),{"{":"LEFT_BRACE","}":"RIGHT_BRACE","[":"LEFT_BRACKET","]":"RIGHT_BRACKET",":":"COLON",",":"COMMA","(":"LEFT_PAREN",")":"RIGHT_PAREN"}),Ue="...,.,===,==,+,!==,!=,!,||,&&,>=,>,<=,<,?,-,*,/,%,typeof ,=>,=,;,in ,new ,|,&,^,~".split(",");const qe=[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 Ue)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 ze?{type:"OPERATOR",value:ze[e],size:e.length}:{type:"SYMBOL",value:e}}return!1},function(t){const e=t[0];return!(!e||!(e in He))&&{type:He[e],value:e}}];const Ge=t=>t&&("LEFT_BRACE"===t.type||"COMMA"===t.type),Xe=t=>t&&("RIGHT_BRACE"===t.type||"COMMA"===t.type);function Ye(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 qe)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":case"LEFT_PAREN":r.push(t.type);break;case"RIGHT_BRACE":case"RIGHT_BRACKET":case"RIGHT_PAREN":r.pop()}let a="SYMBOL"===t.type&&!Ke.includes(t.value);if("SYMBOL"!==t.type||Ke.includes(t.value)||s&&("LEFT_BRACE"===l&&Ge(s)&&Xe(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=>Je(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 Ze=new Map([["in "," in "]]);function Je(t){return Ye(t).map((t=>Ze.get(t.value)||t.value)).join("")}const Qe=/\{\{.*?\}\}|\#\{.*?\}/g;function tn(t,e){let n=t.match(Qe);if(n&&n[0].length===t.length)return`(${e(t.slice(2,"{"===n[0][0]?-2:-1))})`;let o=t.replace(Qe,(t=>"${"+e(t.slice(2,"{"===t[0]?-2:-1))+"}"));return"`"+o+"`"}function en(t){return tn(t,Je)}const nn=/\s+/g,on=document.implementation.createDocument(null,null,null),rn=new Set(["stop","capture","prevent","self","synthetic"]);let sn={};function ln(t=""){return sn[t]=(sn[t]||0)+1,t+sn[t]}function an(t,e){switch(t){case"input":return"checked"===e||"indeterminate"===e||"value"===e||"readonly"===e||"readOnly"===e||"disabled"===e;case"option":return"selected"===e||"disabled"===e;case"textarea":return"value"===e||"readonly"===e||"readOnly"===e||"disabled"===e;case"select":return"value"===e||"disabled"===e;case"button":case"optgroup":return"disabled"===e}return!1}function cn(t){return`\`${t.replace(/\\/g,"\\\\").replace(/`/g,"\\`").replace(/\$\{/,"\\${")}\``}class hn{constructor(t,e){this.dynamicTagName=null,this.isRoot=!1,this.hasDynamicChildren=!1,this.children=[],this.data=[],this.childNumber=0,this.parentVar="",this.id=hn.nextBlockId++,this.varName="b"+this.id,this.blockName="block"+this.id,this.target=t,this.type=e}insertData(t,e="d"){const n=ln(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=on.createElement("t");return t.appendChild(this.dom),t.innerHTML}}function un(t,e){return Object.assign({block:null,index:0,forceNewBlock:!0,translate:t.translate,tKeyExpr:null,nameSpace:t.nameSpace,tModelSelectedExpr:t.tModelSelectedExpr},e)}hn.nextBlockId=1;class dn{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 fn=["label","title","placeholder","alt"],pn=/^(\s*)([\s\S]+?)(\s*)$/;class mn{constructor(t,e){if(this.blocks=[],this.nextBlockId=1,this.isDebug=!1,this.targets=[],this.target=new dn("template"),this.translatableAttributes=fn,this.staticDefs=[],this.slotNames=new Set,this.helpers=new Set,this.translateFn=e.translateFn||(t=>t),e.translatableAttributes){const t=new Set(fn);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,e.hasGlobalValues&&this.helpers.add("__globals__")}generateCode(){const t=this.ast;this.isDebug=12===t.type,hn.nextBlockId=1,sn={},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=cn(t.asXmlString());t.dynamicTagName?(n=n.replace(/^`<\w+/,`\`<\${tag || '${t.dom.nodeName}'}`),n=n.replace(/\w+>`$/,`\${tag || '${t.dom.nodeName}'}>\``),e.push(`let ${t.blockName} = tag => createBlock(${n});`)):e.push(`let ${t.blockName} = createBlock(${n});`)}}if(this.targets.length)for(let t of this.targets)e.push(""),e=e.concat(t.generateCode());e.push(""),e=e.concat("return "+this.target.generateCode());const n=e.join("\n ");if(this.isDebug){const t=`[Owl Debug]\n${n}`;console.log(t)}return n}compileInNewTarget(t,e,n,o){const r=ln(t),s=this.target,i=new dn(r,o);return this.targets.push(i),this.target=i,this.compileAST(e,un(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=on.createElement(n);t.insert(o)}createBlock(t,e,n){const o=this.target.hasRoot,r=new hn(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 Je(t);const n=Ye(t),o=new Map;return n.map((t=>{if(t.varName&&!t.isLocal){if(!o.has(t.varName)){const e=ln("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=pn.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(${Je(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(${cn(t.value)})`,n,{...e,forceNewBlock:o&&!n});else{const e=on.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(nn," ")),!n||o)n=this.createBlock(n,"text",e),this.insertBlock(`text(${cn(r)})`,n,{...e,forceNewBlock:o&&!n});else{const e=0===t.type?on.createTextNode:on.createComment;n.insert(e.call(on,r))}return n.varName}generateHandlerCode(t,e){const n=t.split(".").slice(1).map((t=>{if(!rn.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=ln("tag");this.define(e,Je(t.dynamicTag)),n.dynamicTagName=e}const i={};for(let o in t.attrs){let r,s;if(o.startsWith("t-attf")){r=en(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=Je(t.attrs[o]),s&&an(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=Je(o),f=ln("bExpr");this.define(f,d);const p=Je(r),m=ln("expr");this.define(m,p);const b=`${f}[${m}]`;let g;if(u){let e=h in i&&`'${i[h]}'`;if(!e&&t.attrs){const n=t.attrs[`t-att-${h}`];n&&(e=Je(n))}g=n.insertData(`${b} === ${e}`,"prop"),i[`block-property-${g}`]=u}else if(e){l=`${ln("bValue")}`,this.define(l,b)}else g=n.insertData(`${b}`,"prop"),i[`block-property-${g}`]=h;this.helpers.add("toNumber");let v=`ev.target.${h}`;v=c?`${v}.trim()`:v,v=a?`toNumber(${v})`:v;const y=`[(ev) => { ${b} = ${v}; }]`;g=n.insertData(y,"hdlr"),i[`block-handler-${g}`]=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=Qe.test(t.ref);let o=`\`${t.ref}\``;e&&(o=tn(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?on.createElementNS(a,t.tag):on.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=un(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=Je(t.expr),t.defaultValue&&(this.helpers.add("withDefault"),n=`withDefault(${n}, ${cn(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=on.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=hn.nextBlockId;const r=un(e);this.compileAST({type:3,content:t.body},r),this.helpers.add("safeOutput"),n=`safeOutput(${Je(t.expr)}, b${o})`}else this.helpers.add("safeOutput"),n=`safeOutput(${Je(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,un(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 (${Je(t.condition)}) {`),this.compileTIfBranch(t.content,o,e),t.tElif)for(let n of t.tElif)this.addLine(`} else if (${Je(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(${Je(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?Je(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=ln(),this.define(`memo${a}`,Je(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=un(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=ln("tKey_");return this.define(n,Je(t.expr)),e=un(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=un(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=ln("ctx"),this.addLine(`let ${r} = ${Je(t.context)};`));const s=Qe.test(t.name),i=s?en(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=un(e,{ctxVar:r}),o=this.compileMulti({type:3,content:t.body},n);o&&(this.helpers.add("zero"),this.addLine(`${r}[zero] = ${o};`))}const l=this.generateComponentKey();if(s){const t=ln("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=ln("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(Je(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?Je(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=cn(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(t="key"){const e=[ln("__")];for(let t=0;t<this.target.loopLevel;t++)e.push(`\${key${t+1}}`);return`${t} + \`${e.join("__")}\``}formatProp(t,e){if(e=t.endsWith(".translate")?cn(this.translateFn(e)):this.captureExpression(e),t.includes(".")){let[n,o]=t.split(".");switch(t=n,o){case"bind":e=`(${e}).bind(this)`;break;case"alike":case"translate":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({}, ${Je(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=ln("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,a=this.getPropString(r,t.dynamicProps);(s&&(t.dynamicProps||o)||this.dev)&&(i=ln("props"),this.define(i,a),a=i),s&&(t.dynamicProps||o)&&(this.helpers.add("markRaw"),this.addLine(`${i}.slots = markRaw(Object.assign(${s}, ${i}.slots))`)),t.isDynamic?(l=ln("Comp"),this.define(l,Je(t.name))):l=`\`${t.name}\``,this.dev&&this.addLine(`helpers.validateProps(${l}, ${i}, this);`),n&&(!1===e.forceNewBlock||e.tKeyExpr)&&this.insertAnchor(n);let c=this.generateComponentKey();e.tKeyExpr&&(c=`${e.tKeyExpr} + ${c}`);let h=ln("comp");const u=[];for(let e in t.props||{}){let[t,n]=e.split(".");n||u.push(`"${t}"`)}this.staticDefs.push({id:h,expr:`app.createComponent(${t.isDynamic?null:l}, ${!t.isDynamic}, ${!!t.slots}, ${!!t.dynamicProps}, [${u}])`}),t.isDynamic&&(c=`(${l}).name + ${c}`);let d=`${h}(${a}, ${c}, node, this, ${t.isDynamic?l:null})`;return t.isDynamic&&(d=`toggler(${l}, ${d})`),t.on&&(d=this.wrapWithEventCatcher(d,t.on)),n=this.createBlock(n,"multi",e),this.insertBlock(d,n,e),n.varName}wrapWithEventCatcher(t,e){this.helpers.add("createCatcher");let n=ln("catcher"),o={},r=[];for(let t in e){let n=ln("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(Qe)?(s=!0,i=!0,o=en(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=this.generateComponentKey(a));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=ln("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);let r="ctx";!this.target.loopLevel&&this.hasSafeContext||(r=ln("ctx"),this.helpers.add("capture"),this.define(r,"capture(ctx)"));let s=ln("comp");this.staticDefs.push({id:s,expr:"app.createComponent(null, false, true, false, false)"});const i=`${s}({target: ${Je(t.target)},slots: {'default': {__render: ${o}.bind(this), __ctx: ${r}}}}, ${this.generateComponentKey()}, node, ctx, Portal)`;return n&&this.insertAnchor(n),n=this.createBlock(n,"multi",e),this.insertBlock(i,n,{...e,forceNewBlock:!1}),n.varName}}const bn=new WeakMap;function gn(t,e){var n;return 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()}}}}(n=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)}}}(n),vn(t,e)||{type:0,value:""}}function vn(t,e){return t instanceof Element?function(t,e){if(!e.customDirectives)return null;const n=t.getAttributeNames();for(let o of n){if("t-custom"===o||"t-custom-"===o)throw new s("Missing custom directive name with t-custom directive");if(o.startsWith("t-custom-")){const n=o.split(".")[0].slice(9),r=e.customDirectives[n];if(!r)throw new s(`Custom directive "${n}" is not defined`);const i=t.getAttribute(o),l=o.split(".").slice(1);t.removeAttribute(o);try{r(t,i,l)}catch(t){throw new s(`Custom directive "${n}" throw the following error: ${t}`)}return vn(t,e)}}return null}(t,e)||function(t,e){if(t.hasAttribute("t-debug"))return t.removeAttribute("t-debug"),{type:12,content:vn(t,e)};if(t.hasAttribute("t-log")){const n=t.getAttribute("t-log");return t.removeAttribute("t-log"),{type:13,expr:n,content:vn(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=vn(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=vn(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=vn(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=vn(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=vn(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=vn(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=kn(t,e);return{type:7,name:n,body:r.length?r:null,context:o}}(t,e)||function(t){if(!t.hasAttribute("t-call-block"))return null;const e=t.getAttribute("t-call-block");return{type:15,name:e}}(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=vn(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=vn(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=vn(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:vn(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:En(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=Nn.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=vn(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=En(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&&xn.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(wn.test(i)){const t=i.lastIndexOf(".");r=i.slice(0,t),l=`'${i.slice(t+1)}'`}else{if(!$n.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(".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 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=kn(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=kn(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 En(t,e)}(t,e):function(t,e){if(t.nodeType===Node.TEXT_NODE){let n=t.textContent||"";return e.inPreTag||!yn.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 yn=/[\r\n]/;const wn=/\.[\w_]+\s*$/,$n=/\[[^\[]+\]\s*$/,xn=new Set(["svg","g","path"]);const Nn=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 kn(t,e){const n=[];for(let o of t.childNodes){const t=vn(o,e);t&&(3===t.type?n.push(...t.content):n.push(t))}return n}function En(t,e){const n=kn(t,e);switch(n.length){case 0:return null;case 1:return n[0];default:return{type:3,content:n}}}function An(t,e={hasGlobalValues:!1}){const n=function(t,e){const n={inPreTag:!1,customDirectives:e};if("string"==typeof t)return gn(Me(`<t>${t}</t>`).firstChild,n);let o=bn.get(t);return o||(o=gn(t.cloneNode(!0),n),bn.set(t,o)),o}(t,e.customDirectives),o=t instanceof Node?!(t instanceof Element)||null===t.querySelector("[t-set], [t-call]"):!t.includes("t-set")&&!t.includes("t-call"),r=new mn(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}}class Tn{constructor(){this.tasks=new Set,this.frame=0,this.delayedRenders=[],this.cancelledNodes=new Set,this.processing=!1,this.requestAnimationFrame=Tn.requestAnimationFrame}addFiber(t){this.tasks.add(t.root)}scheduleDestroy(t){this.cancelledNodes.add(t),0===this.frame&&(this.frame=this.requestAnimationFrame((()=>this.processTasks())))}flush(){if(this.delayedRenders.length){let t=this.delayedRenders;this.delayedRenders=[];for(let e of t)e.root&&3!==e.node.status&&e.node.fiber===e&&e.render()}0===this.frame&&(this.frame=this.requestAnimationFrame((()=>this.processTasks())))}processTasks(){if(!this.processing){this.processing=!0,this.frame=0;for(let t of this.cancelledNodes)t._destroy();this.cancelledNodes.clear();for(let t of this.tasks)this.processFiber(t);for(let t of this.tasks)3===t.node.status&&this.tasks.delete(t);this.processing=!1}}processFiber(t){if(t.root!==t)return void this.tasks.delete(t);const e=At.has(t);e&&0!==t.counter?this.tasks.delete(t):3!==t.node.status?0===t.counter&&(e||t.complete(),t.appliedToDom&&this.tasks.delete(t)):this.tasks.delete(t)}}Tn.requestAnimationFrame=window.requestAnimationFrame.bind(window);let _n=!1;const Dn=new Set;window.__OWL_DEVTOOLS__||(window.__OWL_DEVTOOLS__={apps:Dn,Fiber:St,RootFiber:Lt,toRaw:Ut,reactive:te});class Cn extends We{constructor(t,e={}){super(e),this.scheduler=new Tn,this.subRoots=new Set,this.root=null,this.name=e.name||"",this.Root=t,Dn.add(this),e.test&&(this.dev=!0),this.warnIfNoStaticProps=e.warnIfNoStaticProps||!1,!this.dev||e.test||_n||(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.`),_n=!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){const n=this.createRoot(this.Root,{props:this.props});return this.root=n.node,this.subRoots.delete(n.node),n.mount(t,e)}createRoot(t,e={}){const n=e.props||{},o=this.env;e.env&&(this.env=e.env);const r=function(){let t=ae;return()=>{ae=t}}(),s=this.makeNode(t,n);return r(),e.env&&(this.env=o),this.subRoots.add(s),{node:s,mount:(e,o)=>{Cn.validateTarget(e),this.dev&&Pe(t,n,{__owl__:{app:this}});return this.mountNode(s,e,o)},destroy:()=>{this.subRoots.delete(s),s.destroy(),this.scheduler.processTasks()}}}makeNode(t,e){return new fe(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=Tt.get(t);r||(r=[],Tt.set(t,r)),r.unshift((t=>{throw o||n(t),t}))}));return t.mountComponent(e,n),o}destroy(){if(this.root){for(let t of this.subRoots)t.destroy();this.root.destroy(),this.scheduler.processTasks()}Dn.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=fe.prototype.updateAndRender,h=fe.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 we))throw new s(`"${t}" is not a Component. It must inherit from the Component class`)}f=new fe(u,n,this,r,o),d[o]=f,h.call(f,new St(f,p))}return p.childrenMap[o]=f,f}}handleError(...t){return Dt(...t)}}Cn.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")},Cn.apps=Dn,Cn.version="2.5.1";function On(t,e){const n=Object.create(t),o=Object.getOwnPropertyDescriptors(e);return Object.freeze(Object.defineProperties(n,o))}function Sn(t){const e=ce();e.childEnv=On(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 Ln={config:n,mount:Et,patch:function(t,e,n=!1){t.patch(e,n)},remove:function(t,e=!1){e&&t.beforeRemove(),t.remove()},list:vt,multi:j,text:U,toggler:r,createBlock:rt,html:kt,comment:q},Rn={version:Cn.version};We.prototype._compileTemplate=function(t,e){return An(e,{name:t,dev:this.dev,translateFn:this.translateFn,translatableAttributes:this.translatableAttributes,customDirectives:this.customDirectives,hasGlobalValues:this.hasGlobalValues})},t.App=Cn,t.Component=we,t.EventBus=k,t.OwlError=s,t.__info__=Rn,t.batched=x,t.blockDom=Ln,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=Ht,t.markup=function(t){return new E(t)},t.mount=async function(t,e,n={}){return new Cn(t,n).mount(e,n)},t.onError=function(t){const e=ce();let n=Tt.get(e);n||(n=[],Tt.set(e,n)),n.push(t.bind(e.component))},t.onMounted=ge,t.onPatched=ve,t.onRendered=function(t){const e=ce(),n=e.renderFn,o=e.app.dev?be:t=>t;t=o(t.bind(e.component),"onRendered"),e.renderFn=()=>{const e=n();return t(),e}},t.onWillDestroy=function(t){const e=ce(),n=e.app.dev?be:t=>t;e.willDestroy.push(n(t.bind(e.component),"onWillDestroy"))},t.onWillPatch=function(t){const e=ce(),n=e.app.dev?be:t=>t;e.willPatch.unshift(n(t.bind(e.component),"onWillPatch"))},t.onWillRender=function(t){const e=ce(),n=e.renderFn,o=e.app.dev?be:t=>t;t=o(t.bind(e.component),"onWillRender"),e.renderFn=()=>(t(),n())},t.onWillStart=function(t){const e=ce(),n=e.app.dev?be:t=>t;e.willStart.push(n(t.bind(e.component),"onWillStart"))},t.onWillUnmount=ye,t.onWillUpdateProps=function(t){const e=ce(),n=e.app.dev?be:t=>t;e.willUpdateProps.push(n(t.bind(e.component),"onWillUpdateProps"))},t.reactive=te,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=Ut,t.useChildSubEnv=Sn,t.useComponent=function(){return ae.component},t.useEffect=function(t,e=()=>[NaN]){let n,o;ge((()=>{o=e(),n=t(...o)})),ve((()=>{const r=e();r.some(((t,e)=>t!==o[e]))&&(o=r,n&&n(),n=t(...o))})),ye((()=>n&&n()))},t.useEnv=function(){return ce().component.env},t.useExternalListener=function(t,e,n,o){const r=ce(),s=n.bind(r.component);ge((()=>t.addEventListener(e,s,o))),ye((()=>t.removeEventListener(e,s,o)))},t.useRef=function(t){const e=ce().refs;return{get el(){const n=e[t];return N(n)?n:null}}},t.useState=de,t.useSubEnv=function(t){const e=ce();e.component.env=On(e.component.env,t),Sn(t)},t.validate=function(t,e){let n=Ce(t,e);if(n.length)throw new s("Invalid object: "+n.join(", "))},t.validateType=Oe,t.whenReady=function(t){return new Promise((function(t){"loading"!==document.readyState?t(!0):document.addEventListener("DOMContentLoaded",t,!1)})).then(t||function(){})},t.xml=Fe,Object.defineProperty(t,"__esModule",{value:!0}),Rn.date="2024-11-26T08:42:41.633Z",Rn.hash="7fc552e",Rn.url="https://github.com/odoo/owl"}(this.owl=this.owl||{});
@@ -0,0 +1 @@
1
+ export declare type customDirectives = Record<string, (node: Element, value: string, modifier: string[]) => void>;
@@ -8,6 +8,7 @@ export interface Config {
8
8
  export interface CodeGenOptions extends Config {
9
9
  hasSafeContext?: boolean;
10
10
  name?: string;
11
+ hasGlobalValues: boolean;
11
12
  }
12
13
  declare class BlockDescription {
13
14
  static nextBlockId: number;
@@ -1,3 +1,4 @@
1
+ import type { customDirectives } from "../common/types";
1
2
  import type { TemplateSet } from "../runtime/template_set";
2
3
  import type { BDom } from "../runtime/blockdom";
3
4
  import { Config } from "./code_generator";
@@ -5,6 +6,8 @@ export declare type Template = (context: any, vnode: any, key?: string) => BDom;
5
6
  export declare type TemplateFunction = (app: TemplateSet, bdom: any, helpers: any) => Template;
6
7
  interface CompileOptions extends Config {
7
8
  name?: string;
9
+ customDirectives?: customDirectives;
10
+ hasGlobalValues: boolean;
8
11
  }
9
12
  export declare function compile(template: string | Element, options?: CompileOptions): TemplateFunction;
10
13
  export {};
@@ -1,3 +1,4 @@
1
+ import type { customDirectives } from "../common/types";
1
2
  export declare type EventHandlers = {
2
3
  [eventName: string]: string;
3
4
  };
@@ -156,5 +157,5 @@ export interface ASTTPortal {
156
157
  content: AST;
157
158
  }
158
159
  export declare type AST = ASTText | ASTComment | ASTDomNode | ASTMulti | ASTTEsc | ASTTif | ASTTSet | ASTTCall | ASTTOut | ASTTForEach | ASTTKey | ASTComponent | ASTSlot | ASTTCallBlock | ASTLog | ASTDebug | ASTTranslation | ASTTPortal;
159
- export declare function parse(xml: string | Element): AST;
160
+ export declare function parse(xml: string | Element, customDir?: customDirectives): AST;
160
161
  export {};
@@ -388,6 +388,8 @@ declare class Scheduler {
388
388
  processFiber(fiber: RootFiber): void;
389
389
  }
390
390
 
391
+ declare type customDirectives = Record<string, (node: Element, value: string, modifier: string[]) => void>;
392
+
391
393
  interface Config {
392
394
  translateFn?: (s: string) => string;
393
395
  translatableAttributes?: string[];
@@ -398,6 +400,8 @@ declare type Template = (context: any, vnode: any, key?: string) => BDom;
398
400
  declare type TemplateFunction = (app: TemplateSet, bdom: any, helpers: any) => Template;
399
401
  interface CompileOptions extends Config {
400
402
  name?: string;
403
+ customDirectives?: customDirectives;
404
+ hasGlobalValues: boolean;
401
405
  }
402
406
  declare function compile(template: string | Element, options?: CompileOptions): TemplateFunction;
403
407
 
@@ -418,6 +422,8 @@ interface TemplateSetConfig {
418
422
  translateFn?: (s: string) => string;
419
423
  templates?: string | Document | Record<string, string>;
420
424
  getTemplate?: (s: string) => Element | Function | string | void;
425
+ customDirectives?: customDirectives;
426
+ globalValues?: object;
421
427
  }
422
428
  declare class TemplateSet {
423
429
  static registerTemplate(name: string, fn: TemplateFunction): void;
@@ -430,6 +436,9 @@ declare class TemplateSet {
430
436
  translateFn?: (s: string) => string;
431
437
  translatableAttributes?: string[];
432
438
  Portal: typeof Portal;
439
+ customDirectives: customDirectives;
440
+ runtimeUtils: object;
441
+ hasGlobalValues: boolean;
433
442
  constructor(config?: TemplateSetConfig);
434
443
  addTemplate(name: string, template: string | Element): void;
435
444
  addTemplates(xml: string | Document): void;
@@ -1,11 +1,14 @@
1
1
  import { compile, Template, TemplateFunction } from "../compiler";
2
2
  import { Portal } from "./portal";
3
+ import type { customDirectives } from "../common/types";
3
4
  export interface TemplateSetConfig {
4
5
  dev?: boolean;
5
6
  translatableAttributes?: string[];
6
7
  translateFn?: (s: string) => string;
7
8
  templates?: string | Document | Record<string, string>;
8
9
  getTemplate?: (s: string) => Element | Function | string | void;
10
+ customDirectives?: customDirectives;
11
+ globalValues?: object;
9
12
  }
10
13
  export declare class TemplateSet {
11
14
  static registerTemplate(name: string, fn: TemplateFunction): void;
@@ -18,6 +21,9 @@ export declare class TemplateSet {
18
21
  translateFn?: (s: string) => string;
19
22
  translatableAttributes?: string[];
20
23
  Portal: typeof Portal;
24
+ customDirectives: customDirectives;
25
+ runtimeUtils: object;
26
+ hasGlobalValues: boolean;
21
27
  constructor(config?: TemplateSetConfig);
22
28
  addTemplate(name: string, template: string | Element): void;
23
29
  addTemplates(xml: string | Document): void;
@@ -1 +1 @@
1
- export declare const version = "2.4.1";
1
+ export declare const version = "2.5.1";
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@odoo/owl",
3
- "version": "2.4.1",
3
+ "version": "2.5.1",
4
4
  "description": "Odoo Web Library (OWL)",
5
5
  "main": "dist/owl.cjs.js",
6
6
  "module": "dist/owl.es.js",