@odoo/owl 2.2.6 → 2.2.8
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/owl-devtools.zip +0 -0
- package/dist/owl.cjs.js +32 -50
- package/dist/owl.es.js +32 -50
- package/dist/owl.iife.js +32 -50
- package/dist/owl.iife.min.js +1 -1
- package/dist/types/common/utils.d.ts +8 -0
- package/dist/types/owl.d.ts +12 -10
- package/dist/types/runtime/component.d.ts +1 -1
- package/dist/types/runtime/hooks.d.ts +4 -4
- package/dist/types/runtime/portal.d.ts +3 -3
- package/dist/types/runtime/template_set.d.ts +3 -1
- package/dist/types/runtime/validation.d.ts +1 -1
- package/dist/types/version.d.ts +1 -1
- package/package.json +1 -1
package/dist/owl-devtools.zip
CHANGED
|
Binary file
|
package/dist/owl.cjs.js
CHANGED
|
@@ -2077,7 +2077,7 @@ function basicProxyHandler(callback) {
|
|
|
2077
2077
|
set(target, key, value, receiver) {
|
|
2078
2078
|
const hadKey = objectHasOwnProperty.call(target, key);
|
|
2079
2079
|
const originalValue = Reflect.get(target, key, receiver);
|
|
2080
|
-
const ret = Reflect.set(target, key, value, receiver);
|
|
2080
|
+
const ret = Reflect.set(target, key, toRaw(value), receiver);
|
|
2081
2081
|
if (!hadKey && objectHasOwnProperty.call(target, key)) {
|
|
2082
2082
|
notifyReactives(target, KEYCHANGES);
|
|
2083
2083
|
}
|
|
@@ -3163,8 +3163,14 @@ const helpers = {
|
|
|
3163
3163
|
makeRefWrapper,
|
|
3164
3164
|
};
|
|
3165
3165
|
|
|
3166
|
-
|
|
3167
|
-
|
|
3166
|
+
/**
|
|
3167
|
+
* Parses an XML string into an XML document, throwing errors on parser errors
|
|
3168
|
+
* instead of returning an XML document containing the parseerror.
|
|
3169
|
+
*
|
|
3170
|
+
* @param xml the string to parse
|
|
3171
|
+
* @returns an XML document corresponding to the content of the string
|
|
3172
|
+
*/
|
|
3173
|
+
function parseXML(xml) {
|
|
3168
3174
|
const parser = new DOMParser();
|
|
3169
3175
|
const doc = parser.parseFromString(xml, "text/xml");
|
|
3170
3176
|
if (doc.getElementsByTagName("parsererror").length) {
|
|
@@ -3191,7 +3197,9 @@ function parseXML$1(xml) {
|
|
|
3191
3197
|
throw new OwlError(msg);
|
|
3192
3198
|
}
|
|
3193
3199
|
return doc;
|
|
3194
|
-
}
|
|
3200
|
+
}
|
|
3201
|
+
|
|
3202
|
+
const bdom = { text, createBlock, list, multi, html, toggler, comment };
|
|
3195
3203
|
class TemplateSet {
|
|
3196
3204
|
constructor(config = {}) {
|
|
3197
3205
|
this.rawTemplates = Object.create(globalTemplates);
|
|
@@ -3201,8 +3209,16 @@ class TemplateSet {
|
|
|
3201
3209
|
this.translateFn = config.translateFn;
|
|
3202
3210
|
this.translatableAttributes = config.translatableAttributes;
|
|
3203
3211
|
if (config.templates) {
|
|
3204
|
-
|
|
3212
|
+
if (config.templates instanceof Document || typeof config.templates === "string") {
|
|
3213
|
+
this.addTemplates(config.templates);
|
|
3214
|
+
}
|
|
3215
|
+
else {
|
|
3216
|
+
for (const name in config.templates) {
|
|
3217
|
+
this.addTemplate(name, config.templates[name]);
|
|
3218
|
+
}
|
|
3219
|
+
}
|
|
3205
3220
|
}
|
|
3221
|
+
this.getRawTemplate = config.getTemplate;
|
|
3206
3222
|
}
|
|
3207
3223
|
static registerTemplate(name, fn) {
|
|
3208
3224
|
globalTemplates[name] = fn;
|
|
@@ -3232,15 +3248,16 @@ class TemplateSet {
|
|
|
3232
3248
|
// empty string
|
|
3233
3249
|
return;
|
|
3234
3250
|
}
|
|
3235
|
-
xml = xml instanceof Document ? xml : parseXML
|
|
3251
|
+
xml = xml instanceof Document ? xml : parseXML(xml);
|
|
3236
3252
|
for (const template of xml.querySelectorAll("[t-name]")) {
|
|
3237
3253
|
const name = template.getAttribute("t-name");
|
|
3238
3254
|
this.addTemplate(name, template);
|
|
3239
3255
|
}
|
|
3240
3256
|
}
|
|
3241
3257
|
getTemplate(name) {
|
|
3258
|
+
var _a;
|
|
3242
3259
|
if (!(name in this.templates)) {
|
|
3243
|
-
const rawTemplate = this.rawTemplates[name];
|
|
3260
|
+
const rawTemplate = ((_a = this.getRawTemplate) === null || _a === void 0 ? void 0 : _a.call(this, name)) || this.rawTemplates[name];
|
|
3244
3261
|
if (rawTemplate === undefined) {
|
|
3245
3262
|
let extraInfo = "";
|
|
3246
3263
|
try {
|
|
@@ -4950,9 +4967,9 @@ function parseDOMNode(node, ctx) {
|
|
|
4950
4967
|
const isSelect = tagName === "select";
|
|
4951
4968
|
const isCheckboxInput = isInput && typeAttr === "checkbox";
|
|
4952
4969
|
const isRadioInput = isInput && typeAttr === "radio";
|
|
4953
|
-
const hasLazyMod = attr.includes(".lazy");
|
|
4954
|
-
const hasNumberMod = attr.includes(".number");
|
|
4955
4970
|
const hasTrimMod = attr.includes(".trim");
|
|
4971
|
+
const hasLazyMod = hasTrimMod || attr.includes(".lazy");
|
|
4972
|
+
const hasNumberMod = attr.includes(".number");
|
|
4956
4973
|
const eventType = isRadioInput ? "click" : isSelect || hasLazyMod ? "change" : "input";
|
|
4957
4974
|
model = {
|
|
4958
4975
|
baseExpr,
|
|
@@ -5283,14 +5300,14 @@ function parseComponent(node, ctx) {
|
|
|
5283
5300
|
// be ignored)
|
|
5284
5301
|
let el = slotNode.parentElement;
|
|
5285
5302
|
let isInSubComponent = false;
|
|
5286
|
-
while (el !== clone) {
|
|
5303
|
+
while (el && el !== clone) {
|
|
5287
5304
|
if (el.hasAttribute("t-component") || el.tagName[0] === el.tagName[0].toUpperCase()) {
|
|
5288
5305
|
isInSubComponent = true;
|
|
5289
5306
|
break;
|
|
5290
5307
|
}
|
|
5291
5308
|
el = el.parentElement;
|
|
5292
5309
|
}
|
|
5293
|
-
if (isInSubComponent) {
|
|
5310
|
+
if (isInSubComponent || !el) {
|
|
5294
5311
|
continue;
|
|
5295
5312
|
}
|
|
5296
5313
|
slotNode.removeAttribute("t-set-slot");
|
|
@@ -5498,41 +5515,6 @@ function normalizeTEscTOut(el) {
|
|
|
5498
5515
|
function normalizeXML(el) {
|
|
5499
5516
|
normalizeTIf(el);
|
|
5500
5517
|
normalizeTEscTOut(el);
|
|
5501
|
-
}
|
|
5502
|
-
/**
|
|
5503
|
-
* Parses an XML string into an XML document, throwing errors on parser errors
|
|
5504
|
-
* instead of returning an XML document containing the parseerror.
|
|
5505
|
-
*
|
|
5506
|
-
* @param xml the string to parse
|
|
5507
|
-
* @returns an XML document corresponding to the content of the string
|
|
5508
|
-
*/
|
|
5509
|
-
function parseXML(xml) {
|
|
5510
|
-
const parser = new DOMParser();
|
|
5511
|
-
const doc = parser.parseFromString(xml, "text/xml");
|
|
5512
|
-
if (doc.getElementsByTagName("parsererror").length) {
|
|
5513
|
-
let msg = "Invalid XML in template.";
|
|
5514
|
-
const parsererrorText = doc.getElementsByTagName("parsererror")[0].textContent;
|
|
5515
|
-
if (parsererrorText) {
|
|
5516
|
-
msg += "\nThe parser has produced the following error message:\n" + parsererrorText;
|
|
5517
|
-
const re = /\d+/g;
|
|
5518
|
-
const firstMatch = re.exec(parsererrorText);
|
|
5519
|
-
if (firstMatch) {
|
|
5520
|
-
const lineNumber = Number(firstMatch[0]);
|
|
5521
|
-
const line = xml.split("\n")[lineNumber - 1];
|
|
5522
|
-
const secondMatch = re.exec(parsererrorText);
|
|
5523
|
-
if (line && secondMatch) {
|
|
5524
|
-
const columnIndex = Number(secondMatch[0]) - 1;
|
|
5525
|
-
if (line[columnIndex]) {
|
|
5526
|
-
msg +=
|
|
5527
|
-
`\nThe error might be located at xml line ${lineNumber} column ${columnIndex}\n` +
|
|
5528
|
-
`${line}\n${"-".repeat(columnIndex - 1)}^`;
|
|
5529
|
-
}
|
|
5530
|
-
}
|
|
5531
|
-
}
|
|
5532
|
-
}
|
|
5533
|
-
throw new OwlError(msg);
|
|
5534
|
-
}
|
|
5535
|
-
return doc;
|
|
5536
5518
|
}
|
|
5537
5519
|
|
|
5538
5520
|
function compile(template, options = {}) {
|
|
@@ -5559,7 +5541,7 @@ function compile(template, options = {}) {
|
|
|
5559
5541
|
}
|
|
5560
5542
|
|
|
5561
5543
|
// do not modify manually. This file is generated by the release script.
|
|
5562
|
-
const version = "2.2.
|
|
5544
|
+
const version = "2.2.8";
|
|
5563
5545
|
|
|
5564
5546
|
// -----------------------------------------------------------------------------
|
|
5565
5547
|
// Scheduler
|
|
@@ -5906,7 +5888,7 @@ function useChildSubEnv(envExtension) {
|
|
|
5906
5888
|
*
|
|
5907
5889
|
* @template T
|
|
5908
5890
|
* @param {Effect<T>} effect the effect to run on component mount and/or patch
|
|
5909
|
-
* @param {()=>T} [computeDependencies=()=>[NaN]] a callback to compute
|
|
5891
|
+
* @param {()=>[...T]} [computeDependencies=()=>[NaN]] a callback to compute
|
|
5910
5892
|
* dependencies that will decide if the effect needs to be cleaned up and
|
|
5911
5893
|
* run again. If the dependencies did not change, the effect will not run
|
|
5912
5894
|
* again. The default value returns an array containing only NaN because
|
|
@@ -6022,6 +6004,6 @@ exports.whenReady = whenReady;
|
|
|
6022
6004
|
exports.xml = xml;
|
|
6023
6005
|
|
|
6024
6006
|
|
|
6025
|
-
__info__.date = '
|
|
6026
|
-
__info__.hash = '
|
|
6007
|
+
__info__.date = '2024-01-12T10:02:46.131Z';
|
|
6008
|
+
__info__.hash = '7b454da';
|
|
6027
6009
|
__info__.url = 'https://github.com/odoo/owl';
|
package/dist/owl.es.js
CHANGED
|
@@ -2073,7 +2073,7 @@ function basicProxyHandler(callback) {
|
|
|
2073
2073
|
set(target, key, value, receiver) {
|
|
2074
2074
|
const hadKey = objectHasOwnProperty.call(target, key);
|
|
2075
2075
|
const originalValue = Reflect.get(target, key, receiver);
|
|
2076
|
-
const ret = Reflect.set(target, key, value, receiver);
|
|
2076
|
+
const ret = Reflect.set(target, key, toRaw(value), receiver);
|
|
2077
2077
|
if (!hadKey && objectHasOwnProperty.call(target, key)) {
|
|
2078
2078
|
notifyReactives(target, KEYCHANGES);
|
|
2079
2079
|
}
|
|
@@ -3159,8 +3159,14 @@ const helpers = {
|
|
|
3159
3159
|
makeRefWrapper,
|
|
3160
3160
|
};
|
|
3161
3161
|
|
|
3162
|
-
|
|
3163
|
-
|
|
3162
|
+
/**
|
|
3163
|
+
* Parses an XML string into an XML document, throwing errors on parser errors
|
|
3164
|
+
* instead of returning an XML document containing the parseerror.
|
|
3165
|
+
*
|
|
3166
|
+
* @param xml the string to parse
|
|
3167
|
+
* @returns an XML document corresponding to the content of the string
|
|
3168
|
+
*/
|
|
3169
|
+
function parseXML(xml) {
|
|
3164
3170
|
const parser = new DOMParser();
|
|
3165
3171
|
const doc = parser.parseFromString(xml, "text/xml");
|
|
3166
3172
|
if (doc.getElementsByTagName("parsererror").length) {
|
|
@@ -3187,7 +3193,9 @@ function parseXML$1(xml) {
|
|
|
3187
3193
|
throw new OwlError(msg);
|
|
3188
3194
|
}
|
|
3189
3195
|
return doc;
|
|
3190
|
-
}
|
|
3196
|
+
}
|
|
3197
|
+
|
|
3198
|
+
const bdom = { text, createBlock, list, multi, html, toggler, comment };
|
|
3191
3199
|
class TemplateSet {
|
|
3192
3200
|
constructor(config = {}) {
|
|
3193
3201
|
this.rawTemplates = Object.create(globalTemplates);
|
|
@@ -3197,8 +3205,16 @@ class TemplateSet {
|
|
|
3197
3205
|
this.translateFn = config.translateFn;
|
|
3198
3206
|
this.translatableAttributes = config.translatableAttributes;
|
|
3199
3207
|
if (config.templates) {
|
|
3200
|
-
|
|
3208
|
+
if (config.templates instanceof Document || typeof config.templates === "string") {
|
|
3209
|
+
this.addTemplates(config.templates);
|
|
3210
|
+
}
|
|
3211
|
+
else {
|
|
3212
|
+
for (const name in config.templates) {
|
|
3213
|
+
this.addTemplate(name, config.templates[name]);
|
|
3214
|
+
}
|
|
3215
|
+
}
|
|
3201
3216
|
}
|
|
3217
|
+
this.getRawTemplate = config.getTemplate;
|
|
3202
3218
|
}
|
|
3203
3219
|
static registerTemplate(name, fn) {
|
|
3204
3220
|
globalTemplates[name] = fn;
|
|
@@ -3228,15 +3244,16 @@ class TemplateSet {
|
|
|
3228
3244
|
// empty string
|
|
3229
3245
|
return;
|
|
3230
3246
|
}
|
|
3231
|
-
xml = xml instanceof Document ? xml : parseXML
|
|
3247
|
+
xml = xml instanceof Document ? xml : parseXML(xml);
|
|
3232
3248
|
for (const template of xml.querySelectorAll("[t-name]")) {
|
|
3233
3249
|
const name = template.getAttribute("t-name");
|
|
3234
3250
|
this.addTemplate(name, template);
|
|
3235
3251
|
}
|
|
3236
3252
|
}
|
|
3237
3253
|
getTemplate(name) {
|
|
3254
|
+
var _a;
|
|
3238
3255
|
if (!(name in this.templates)) {
|
|
3239
|
-
const rawTemplate = this.rawTemplates[name];
|
|
3256
|
+
const rawTemplate = ((_a = this.getRawTemplate) === null || _a === void 0 ? void 0 : _a.call(this, name)) || this.rawTemplates[name];
|
|
3240
3257
|
if (rawTemplate === undefined) {
|
|
3241
3258
|
let extraInfo = "";
|
|
3242
3259
|
try {
|
|
@@ -4946,9 +4963,9 @@ function parseDOMNode(node, ctx) {
|
|
|
4946
4963
|
const isSelect = tagName === "select";
|
|
4947
4964
|
const isCheckboxInput = isInput && typeAttr === "checkbox";
|
|
4948
4965
|
const isRadioInput = isInput && typeAttr === "radio";
|
|
4949
|
-
const hasLazyMod = attr.includes(".lazy");
|
|
4950
|
-
const hasNumberMod = attr.includes(".number");
|
|
4951
4966
|
const hasTrimMod = attr.includes(".trim");
|
|
4967
|
+
const hasLazyMod = hasTrimMod || attr.includes(".lazy");
|
|
4968
|
+
const hasNumberMod = attr.includes(".number");
|
|
4952
4969
|
const eventType = isRadioInput ? "click" : isSelect || hasLazyMod ? "change" : "input";
|
|
4953
4970
|
model = {
|
|
4954
4971
|
baseExpr,
|
|
@@ -5279,14 +5296,14 @@ function parseComponent(node, ctx) {
|
|
|
5279
5296
|
// be ignored)
|
|
5280
5297
|
let el = slotNode.parentElement;
|
|
5281
5298
|
let isInSubComponent = false;
|
|
5282
|
-
while (el !== clone) {
|
|
5299
|
+
while (el && el !== clone) {
|
|
5283
5300
|
if (el.hasAttribute("t-component") || el.tagName[0] === el.tagName[0].toUpperCase()) {
|
|
5284
5301
|
isInSubComponent = true;
|
|
5285
5302
|
break;
|
|
5286
5303
|
}
|
|
5287
5304
|
el = el.parentElement;
|
|
5288
5305
|
}
|
|
5289
|
-
if (isInSubComponent) {
|
|
5306
|
+
if (isInSubComponent || !el) {
|
|
5290
5307
|
continue;
|
|
5291
5308
|
}
|
|
5292
5309
|
slotNode.removeAttribute("t-set-slot");
|
|
@@ -5494,41 +5511,6 @@ function normalizeTEscTOut(el) {
|
|
|
5494
5511
|
function normalizeXML(el) {
|
|
5495
5512
|
normalizeTIf(el);
|
|
5496
5513
|
normalizeTEscTOut(el);
|
|
5497
|
-
}
|
|
5498
|
-
/**
|
|
5499
|
-
* Parses an XML string into an XML document, throwing errors on parser errors
|
|
5500
|
-
* instead of returning an XML document containing the parseerror.
|
|
5501
|
-
*
|
|
5502
|
-
* @param xml the string to parse
|
|
5503
|
-
* @returns an XML document corresponding to the content of the string
|
|
5504
|
-
*/
|
|
5505
|
-
function parseXML(xml) {
|
|
5506
|
-
const parser = new DOMParser();
|
|
5507
|
-
const doc = parser.parseFromString(xml, "text/xml");
|
|
5508
|
-
if (doc.getElementsByTagName("parsererror").length) {
|
|
5509
|
-
let msg = "Invalid XML in template.";
|
|
5510
|
-
const parsererrorText = doc.getElementsByTagName("parsererror")[0].textContent;
|
|
5511
|
-
if (parsererrorText) {
|
|
5512
|
-
msg += "\nThe parser has produced the following error message:\n" + parsererrorText;
|
|
5513
|
-
const re = /\d+/g;
|
|
5514
|
-
const firstMatch = re.exec(parsererrorText);
|
|
5515
|
-
if (firstMatch) {
|
|
5516
|
-
const lineNumber = Number(firstMatch[0]);
|
|
5517
|
-
const line = xml.split("\n")[lineNumber - 1];
|
|
5518
|
-
const secondMatch = re.exec(parsererrorText);
|
|
5519
|
-
if (line && secondMatch) {
|
|
5520
|
-
const columnIndex = Number(secondMatch[0]) - 1;
|
|
5521
|
-
if (line[columnIndex]) {
|
|
5522
|
-
msg +=
|
|
5523
|
-
`\nThe error might be located at xml line ${lineNumber} column ${columnIndex}\n` +
|
|
5524
|
-
`${line}\n${"-".repeat(columnIndex - 1)}^`;
|
|
5525
|
-
}
|
|
5526
|
-
}
|
|
5527
|
-
}
|
|
5528
|
-
}
|
|
5529
|
-
throw new OwlError(msg);
|
|
5530
|
-
}
|
|
5531
|
-
return doc;
|
|
5532
5514
|
}
|
|
5533
5515
|
|
|
5534
5516
|
function compile(template, options = {}) {
|
|
@@ -5555,7 +5537,7 @@ function compile(template, options = {}) {
|
|
|
5555
5537
|
}
|
|
5556
5538
|
|
|
5557
5539
|
// do not modify manually. This file is generated by the release script.
|
|
5558
|
-
const version = "2.2.
|
|
5540
|
+
const version = "2.2.8";
|
|
5559
5541
|
|
|
5560
5542
|
// -----------------------------------------------------------------------------
|
|
5561
5543
|
// Scheduler
|
|
@@ -5902,7 +5884,7 @@ function useChildSubEnv(envExtension) {
|
|
|
5902
5884
|
*
|
|
5903
5885
|
* @template T
|
|
5904
5886
|
* @param {Effect<T>} effect the effect to run on component mount and/or patch
|
|
5905
|
-
* @param {()=>T} [computeDependencies=()=>[NaN]] a callback to compute
|
|
5887
|
+
* @param {()=>[...T]} [computeDependencies=()=>[NaN]] a callback to compute
|
|
5906
5888
|
* dependencies that will decide if the effect needs to be cleaned up and
|
|
5907
5889
|
* run again. If the dependencies did not change, the effect will not run
|
|
5908
5890
|
* again. The default value returns an array containing only NaN because
|
|
@@ -5984,6 +5966,6 @@ TemplateSet.prototype._compileTemplate = function _compileTemplate(name, templat
|
|
|
5984
5966
|
export { App, Component, EventBus, OwlError, __info__, blockDom, loadFile, markRaw, markup, mount, onError, onMounted, onPatched, onRendered, onWillDestroy, onWillPatch, onWillRender, onWillStart, onWillUnmount, onWillUpdateProps, reactive, status, toRaw, useChildSubEnv, useComponent, useEffect, useEnv, useExternalListener, useRef, useState, useSubEnv, validate, validateType, whenReady, xml };
|
|
5985
5967
|
|
|
5986
5968
|
|
|
5987
|
-
__info__.date = '
|
|
5988
|
-
__info__.hash = '
|
|
5969
|
+
__info__.date = '2024-01-12T10:02:46.131Z';
|
|
5970
|
+
__info__.hash = '7b454da';
|
|
5989
5971
|
__info__.url = 'https://github.com/odoo/owl';
|
package/dist/owl.iife.js
CHANGED
|
@@ -2076,7 +2076,7 @@
|
|
|
2076
2076
|
set(target, key, value, receiver) {
|
|
2077
2077
|
const hadKey = objectHasOwnProperty.call(target, key);
|
|
2078
2078
|
const originalValue = Reflect.get(target, key, receiver);
|
|
2079
|
-
const ret = Reflect.set(target, key, value, receiver);
|
|
2079
|
+
const ret = Reflect.set(target, key, toRaw(value), receiver);
|
|
2080
2080
|
if (!hadKey && objectHasOwnProperty.call(target, key)) {
|
|
2081
2081
|
notifyReactives(target, KEYCHANGES);
|
|
2082
2082
|
}
|
|
@@ -3162,8 +3162,14 @@
|
|
|
3162
3162
|
makeRefWrapper,
|
|
3163
3163
|
};
|
|
3164
3164
|
|
|
3165
|
-
|
|
3166
|
-
|
|
3165
|
+
/**
|
|
3166
|
+
* Parses an XML string into an XML document, throwing errors on parser errors
|
|
3167
|
+
* instead of returning an XML document containing the parseerror.
|
|
3168
|
+
*
|
|
3169
|
+
* @param xml the string to parse
|
|
3170
|
+
* @returns an XML document corresponding to the content of the string
|
|
3171
|
+
*/
|
|
3172
|
+
function parseXML(xml) {
|
|
3167
3173
|
const parser = new DOMParser();
|
|
3168
3174
|
const doc = parser.parseFromString(xml, "text/xml");
|
|
3169
3175
|
if (doc.getElementsByTagName("parsererror").length) {
|
|
@@ -3190,7 +3196,9 @@
|
|
|
3190
3196
|
throw new OwlError(msg);
|
|
3191
3197
|
}
|
|
3192
3198
|
return doc;
|
|
3193
|
-
}
|
|
3199
|
+
}
|
|
3200
|
+
|
|
3201
|
+
const bdom = { text, createBlock, list, multi, html, toggler, comment };
|
|
3194
3202
|
class TemplateSet {
|
|
3195
3203
|
constructor(config = {}) {
|
|
3196
3204
|
this.rawTemplates = Object.create(globalTemplates);
|
|
@@ -3200,8 +3208,16 @@
|
|
|
3200
3208
|
this.translateFn = config.translateFn;
|
|
3201
3209
|
this.translatableAttributes = config.translatableAttributes;
|
|
3202
3210
|
if (config.templates) {
|
|
3203
|
-
|
|
3211
|
+
if (config.templates instanceof Document || typeof config.templates === "string") {
|
|
3212
|
+
this.addTemplates(config.templates);
|
|
3213
|
+
}
|
|
3214
|
+
else {
|
|
3215
|
+
for (const name in config.templates) {
|
|
3216
|
+
this.addTemplate(name, config.templates[name]);
|
|
3217
|
+
}
|
|
3218
|
+
}
|
|
3204
3219
|
}
|
|
3220
|
+
this.getRawTemplate = config.getTemplate;
|
|
3205
3221
|
}
|
|
3206
3222
|
static registerTemplate(name, fn) {
|
|
3207
3223
|
globalTemplates[name] = fn;
|
|
@@ -3231,15 +3247,16 @@
|
|
|
3231
3247
|
// empty string
|
|
3232
3248
|
return;
|
|
3233
3249
|
}
|
|
3234
|
-
xml = xml instanceof Document ? xml : parseXML
|
|
3250
|
+
xml = xml instanceof Document ? xml : parseXML(xml);
|
|
3235
3251
|
for (const template of xml.querySelectorAll("[t-name]")) {
|
|
3236
3252
|
const name = template.getAttribute("t-name");
|
|
3237
3253
|
this.addTemplate(name, template);
|
|
3238
3254
|
}
|
|
3239
3255
|
}
|
|
3240
3256
|
getTemplate(name) {
|
|
3257
|
+
var _a;
|
|
3241
3258
|
if (!(name in this.templates)) {
|
|
3242
|
-
const rawTemplate = this.rawTemplates[name];
|
|
3259
|
+
const rawTemplate = ((_a = this.getRawTemplate) === null || _a === void 0 ? void 0 : _a.call(this, name)) || this.rawTemplates[name];
|
|
3243
3260
|
if (rawTemplate === undefined) {
|
|
3244
3261
|
let extraInfo = "";
|
|
3245
3262
|
try {
|
|
@@ -4949,9 +4966,9 @@
|
|
|
4949
4966
|
const isSelect = tagName === "select";
|
|
4950
4967
|
const isCheckboxInput = isInput && typeAttr === "checkbox";
|
|
4951
4968
|
const isRadioInput = isInput && typeAttr === "radio";
|
|
4952
|
-
const hasLazyMod = attr.includes(".lazy");
|
|
4953
|
-
const hasNumberMod = attr.includes(".number");
|
|
4954
4969
|
const hasTrimMod = attr.includes(".trim");
|
|
4970
|
+
const hasLazyMod = hasTrimMod || attr.includes(".lazy");
|
|
4971
|
+
const hasNumberMod = attr.includes(".number");
|
|
4955
4972
|
const eventType = isRadioInput ? "click" : isSelect || hasLazyMod ? "change" : "input";
|
|
4956
4973
|
model = {
|
|
4957
4974
|
baseExpr,
|
|
@@ -5282,14 +5299,14 @@
|
|
|
5282
5299
|
// be ignored)
|
|
5283
5300
|
let el = slotNode.parentElement;
|
|
5284
5301
|
let isInSubComponent = false;
|
|
5285
|
-
while (el !== clone) {
|
|
5302
|
+
while (el && el !== clone) {
|
|
5286
5303
|
if (el.hasAttribute("t-component") || el.tagName[0] === el.tagName[0].toUpperCase()) {
|
|
5287
5304
|
isInSubComponent = true;
|
|
5288
5305
|
break;
|
|
5289
5306
|
}
|
|
5290
5307
|
el = el.parentElement;
|
|
5291
5308
|
}
|
|
5292
|
-
if (isInSubComponent) {
|
|
5309
|
+
if (isInSubComponent || !el) {
|
|
5293
5310
|
continue;
|
|
5294
5311
|
}
|
|
5295
5312
|
slotNode.removeAttribute("t-set-slot");
|
|
@@ -5497,41 +5514,6 @@
|
|
|
5497
5514
|
function normalizeXML(el) {
|
|
5498
5515
|
normalizeTIf(el);
|
|
5499
5516
|
normalizeTEscTOut(el);
|
|
5500
|
-
}
|
|
5501
|
-
/**
|
|
5502
|
-
* Parses an XML string into an XML document, throwing errors on parser errors
|
|
5503
|
-
* instead of returning an XML document containing the parseerror.
|
|
5504
|
-
*
|
|
5505
|
-
* @param xml the string to parse
|
|
5506
|
-
* @returns an XML document corresponding to the content of the string
|
|
5507
|
-
*/
|
|
5508
|
-
function parseXML(xml) {
|
|
5509
|
-
const parser = new DOMParser();
|
|
5510
|
-
const doc = parser.parseFromString(xml, "text/xml");
|
|
5511
|
-
if (doc.getElementsByTagName("parsererror").length) {
|
|
5512
|
-
let msg = "Invalid XML in template.";
|
|
5513
|
-
const parsererrorText = doc.getElementsByTagName("parsererror")[0].textContent;
|
|
5514
|
-
if (parsererrorText) {
|
|
5515
|
-
msg += "\nThe parser has produced the following error message:\n" + parsererrorText;
|
|
5516
|
-
const re = /\d+/g;
|
|
5517
|
-
const firstMatch = re.exec(parsererrorText);
|
|
5518
|
-
if (firstMatch) {
|
|
5519
|
-
const lineNumber = Number(firstMatch[0]);
|
|
5520
|
-
const line = xml.split("\n")[lineNumber - 1];
|
|
5521
|
-
const secondMatch = re.exec(parsererrorText);
|
|
5522
|
-
if (line && secondMatch) {
|
|
5523
|
-
const columnIndex = Number(secondMatch[0]) - 1;
|
|
5524
|
-
if (line[columnIndex]) {
|
|
5525
|
-
msg +=
|
|
5526
|
-
`\nThe error might be located at xml line ${lineNumber} column ${columnIndex}\n` +
|
|
5527
|
-
`${line}\n${"-".repeat(columnIndex - 1)}^`;
|
|
5528
|
-
}
|
|
5529
|
-
}
|
|
5530
|
-
}
|
|
5531
|
-
}
|
|
5532
|
-
throw new OwlError(msg);
|
|
5533
|
-
}
|
|
5534
|
-
return doc;
|
|
5535
5517
|
}
|
|
5536
5518
|
|
|
5537
5519
|
function compile(template, options = {}) {
|
|
@@ -5558,7 +5540,7 @@
|
|
|
5558
5540
|
}
|
|
5559
5541
|
|
|
5560
5542
|
// do not modify manually. This file is generated by the release script.
|
|
5561
|
-
const version = "2.2.
|
|
5543
|
+
const version = "2.2.8";
|
|
5562
5544
|
|
|
5563
5545
|
// -----------------------------------------------------------------------------
|
|
5564
5546
|
// Scheduler
|
|
@@ -5905,7 +5887,7 @@ See https://github.com/odoo/owl/blob/${hash}/doc/reference/app.md#configuration
|
|
|
5905
5887
|
*
|
|
5906
5888
|
* @template T
|
|
5907
5889
|
* @param {Effect<T>} effect the effect to run on component mount and/or patch
|
|
5908
|
-
* @param {()=>T} [computeDependencies=()=>[NaN]] a callback to compute
|
|
5890
|
+
* @param {()=>[...T]} [computeDependencies=()=>[NaN]] a callback to compute
|
|
5909
5891
|
* dependencies that will decide if the effect needs to be cleaned up and
|
|
5910
5892
|
* run again. If the dependencies did not change, the effect will not run
|
|
5911
5893
|
* again. The default value returns an array containing only NaN because
|
|
@@ -6023,8 +6005,8 @@ See https://github.com/odoo/owl/blob/${hash}/doc/reference/app.md#configuration
|
|
|
6023
6005
|
Object.defineProperty(exports, '__esModule', { value: true });
|
|
6024
6006
|
|
|
6025
6007
|
|
|
6026
|
-
__info__.date = '
|
|
6027
|
-
__info__.hash = '
|
|
6008
|
+
__info__.date = '2024-01-12T10:02:46.131Z';
|
|
6009
|
+
__info__.hash = '7b454da';
|
|
6028
6010
|
__info__.url = 'https://github.com/odoo/owl';
|
|
6029
6011
|
|
|
6030
6012
|
|
package/dist/owl.iife.min.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
!function(t){"use strict";function e(t){t=t.slice();const e=[];let n;for(;(n=t[0])&&"string"==typeof n;)e.push(t.shift());return{modifiers:e,data:t}}const n={shouldNormalizeDom:!0,mainEventHandler:(t,n,o)=>("function"==typeof t?t(n):Array.isArray(t)&&(t=e(t).data)[0](t[1],n),!1)};class o{constructor(t,e){this.key=t,this.child=e}mount(t,e){this.parentEl=t,this.child.mount(t,e)}moveBeforeDOMNode(t,e){this.child.moveBeforeDOMNode(t,e)}moveBeforeVNode(t,e){this.moveBeforeDOMNode(t&&t.firstNode()||e)}patch(t,e){if(this===t)return;let n=this.child,o=t.child;this.key===t.key?n.patch(o,e):(o.mount(this.parentEl,n.firstNode()),e&&n.beforeRemove(),n.remove(),this.child=o,this.key=t.key)}beforeRemove(){this.child.beforeRemove()}remove(){this.child.remove()}firstNode(){return this.child.firstNode()}toString(){return this.child.toString()}}function r(t,e){return new o(t,e)}class s extends Error{}const{setAttribute:i,removeAttribute:l}=Element.prototype,a=DOMTokenList.prototype,c=a.add,h=a.remove,u=Array.isArray,{split:d,trim:f}=String.prototype,p=/\s+/;function m(t,e){switch(e){case!1:case void 0:l.call(this,t);break;case!0:i.call(this,t,"");break;default:i.call(this,t,e)}}function g(t){return function(e){m.call(this,t,e)}}function b(t){if(u(t))"class"===t[0]?w.call(this,t[1]):m.call(this,t[0],t[1]);else for(let e in t)"class"===e?w.call(this,t[e]):m.call(this,e,t[e])}function y(t,e){if(u(t)){const n=t[0],o=t[1];if(n===e[0]){if(o===e[1])return;"class"===n?$.call(this,o,e[1]):m.call(this,n,o)}else l.call(this,e[0]),m.call(this,n,o)}else{for(let n in e)n in t||("class"===n?$.call(this,"",e[n]):l.call(this,n));for(let n in t){const o=t[n];o!==e[n]&&("class"===n?$.call(this,o,e[n]):m.call(this,n,o))}}}function v(t){const e={};switch(typeof t){case"string":const n=f.call(t);if(!n)return{};let o=d.call(n,p);for(let t=0,n=o.length;t<n;t++)e[o[t]]=!0;return e;case"object":for(let n in t){const o=t[n];if(o){if(n=f.call(n),!n)continue;const t=d.call(n,p);for(let n of t)e[n]=o}}return e;case"undefined":return{};case"number":return{[t]:!0};default:return{[t]:!0}}}function w(t){t=""===t?{}:v(t);const e=this.classList;for(let n in t)c.call(e,n)}function $(t,e){e=""===e?{}:v(e),t=""===t?{}:v(t);const n=this.classList;for(let o in e)o in t||h.call(n,o);for(let o in t)o in e||c.call(n,o)}function x(t){if(!t)return!1;if(t.ownerDocument.contains(t))return!0;const e=t.getRootNode();return e instanceof ShadowRoot&&t.ownerDocument.contains(e.host)}class N extends EventTarget{trigger(t,e){this.dispatchEvent(new CustomEvent(t,{detail:e}))}}class k extends String{}function E(t){const e=t.split(".")[0],o=t.includes(".capture");return t.includes(".synthetic")?function(t,e=!1){let o=`__event__synthetic_${t}`;e&&(o=`${o}_capture`);!function(t,e,o=!1){if(_[e])return;document.addEventListener(t,(t=>function(t,e){let o=e.target;for(;null!==o;){const r=o[t];if(r)for(const t of Object.values(r)){if(n.mainEventHandler(t,e,o))return}o=o.parentNode}}(e,t)),{capture:o}),_[e]=!0}(t,o,e);const r=T++;function s(t){const e=this[o]||{};e[r]=t,this[o]=e}function i(){delete this[o]}return{setup:s,update:s,remove:i}}(e,o):function(t,e=!1){let o=`__event__${t}_${A++}`;e&&(o=`${o}_capture`);function r(t){const e=t.currentTarget;if(!e||!x(e))return;const r=e[o];r&&n.mainEventHandler(r,t,e)}function s(n){this[o]=n,this.addEventListener(t,r,{capture:e})}function i(){delete this[o],this.removeEventListener(t,r,{capture:e})}function l(t){this[o]=t}return{setup:s,update:l,remove:i}}(e,o)}let A=1;let T=1;const _={};const S=Node.prototype,C=S.insertBefore,O=(D=S,L="textContent",Object.getOwnPropertyDescriptor(D,L)).set;var D,L;const B=S.removeChild;class R{constructor(t){this.children=t}mount(t,e){const n=this.children,o=n.length,r=new Array(o);for(let s=0;s<o;s++){let o=n[s];if(o)o.mount(t,e);else{const n=document.createTextNode("");r[s]=n,C.call(t,n,e)}}this.anchors=r,this.parentEl=t}moveBeforeDOMNode(t,e=this.parentEl){this.parentEl=e;const n=this.children,o=this.anchors;for(let r=0,s=n.length;r<s;r++){let s=n[r];if(s)s.moveBeforeDOMNode(t,e);else{const n=o[r];C.call(e,n,t)}}}moveBeforeVNode(t,e){if(t){const n=t.children[0];e=(n?n.firstNode():t.anchors[0])||null}const n=this.children,o=this.parentEl,r=this.anchors;for(let t=0,s=n.length;t<s;t++){let s=n[t];if(s)s.moveBeforeVNode(null,e);else{const n=r[t];C.call(o,n,e)}}}patch(t,e){if(this===t)return;const n=this.children,o=t.children,r=this.anchors,s=this.parentEl;for(let t=0,i=n.length;t<i;t++){const i=n[t],l=o[t];if(i)if(l)i.patch(l,e);else{const o=i.firstNode(),l=document.createTextNode("");r[t]=l,C.call(s,l,o),e&&i.beforeRemove(),i.remove(),n[t]=void 0}else if(l){n[t]=l;const e=r[t];l.mount(s,e),B.call(s,e)}}}beforeRemove(){const t=this.children;for(let e=0,n=t.length;e<n;e++){const n=t[e];n&&n.beforeRemove()}}remove(){const t=this.parentEl;if(this.isOnlyChild)O.call(t,"");else{const e=this.children,n=this.anchors;for(let o=0,r=e.length;o<r;o++){const r=e[o];r?r.remove():B.call(t,n[o])}}}firstNode(){const t=this.children[0];return t?t.firstNode():this.anchors[0]}toString(){return this.children.map((t=>t?t.toString():"")).join("")}}function P(t){return new R(t)}const j=Node.prototype,M=CharacterData.prototype,I=j.insertBefore,W=((t,e)=>Object.getOwnPropertyDescriptor(t,e))(M,"data").set,F=j.removeChild;class V{constructor(t){this.text=t}mountNode(t,e,n){this.parentEl=e,I.call(e,t,n),this.el=t}moveBeforeDOMNode(t,e=this.parentEl){this.parentEl=e,I.call(e,this.el,t)}moveBeforeVNode(t,e){I.call(this.parentEl,this.el,t?t.el:e)}beforeRemove(){}remove(){F.call(this.parentEl,this.el)}firstNode(){return this.el}toString(){return this.text}}class K extends V{mount(t,e){this.mountNode(document.createTextNode(q(this.text)),t,e)}patch(t){const e=t.text;this.text!==e&&(W.call(this.el,q(e)),this.text=e)}}class z extends V{mount(t,e){this.mountNode(document.createComment(q(this.text)),t,e)}patch(){}}function H(t){return new K(t)}function U(t){return new z(t)}function q(t){switch(typeof t){case"string":return t;case"number":return String(t);case"boolean":return t?"true":"false";default:return t||""}}const G=(t,e)=>Object.getOwnPropertyDescriptor(t,e),X=Node.prototype,Y=Element.prototype,Z=G(CharacterData.prototype,"data").set,J=G(X,"firstChild").get,Q=G(X,"nextSibling").get,tt=()=>{};function et(t){return function(e){this[t]=0===e?0:e?e.valueOf():""}}const nt={};function ot(t){if(t in nt)return nt[t];const e=(new DOMParser).parseFromString(`<t>${t}</t>`,"text/xml").firstChild.firstChild;n.shouldNormalizeDom&&rt(e);const o=st(e),r=at(o),s=function(t,e){let n=function(t,e){const{refN:n,collectors:o,children:r}=e,s=o.length;e.locations.sort(((t,e)=>t.idx-e.idx));const i=e.locations.map((t=>({refIdx:t.refIdx,setData:t.setData,updateData:t.updateData}))),l=i.length,a=r.length,c=r,h=n>0,u=X.cloneNode,d=X.insertBefore,f=Y.remove;class p{constructor(t){this.data=t}beforeRemove(){}remove(){f.call(this.el)}firstNode(){return this.el}moveBeforeDOMNode(t,e=this.parentEl){this.parentEl=e,d.call(e,this.el,t)}moveBeforeVNode(t,e){d.call(this.parentEl,this.el,t?t.el:e)}toString(){const t=document.createElement("div");return this.mount(t,null),t.innerHTML}mount(e,n){const o=u.call(t,!0);d.call(e,o,n),this.el=o,this.parentEl=e}patch(t,e){}}h&&(p.prototype.mount=function(e,r){const h=u.call(t,!0),f=new Array(n);this.refs=f,f[0]=h;for(let t=0;t<s;t++){const e=o[t];f[e.idx]=e.getVal.call(f[e.prevIdx])}if(l){const t=this.data;for(let e=0;e<l;e++){const n=i[e];n.setData.call(f[n.refIdx],t[e])}}if(d.call(e,h,r),a){const t=this.children;for(let e=0;e<a;e++){const n=t[e];if(n){const t=c[e],o=t.afterRefIdx?f[t.afterRefIdx]:null;n.isOnlyChild=t.isOnlyChild,n.mount(f[t.parentRefIdx],o)}}}this.el=h,this.parentEl=e},p.prototype.patch=function(t,e){if(this===t)return;const n=this.refs;if(l){const e=this.data,o=t.data;for(let t=0;t<l;t++){const r=e[t],s=o[t];if(r!==s){const e=i[t];e.updateData.call(n[e.refIdx],s,r)}}this.data=o}if(a){let o=this.children;const r=t.children;for(let t=0;t<a;t++){const s=o[t],i=r[t];if(s)i?s.patch(i,e):(e&&s.beforeRemove(),s.remove(),o[t]=void 0);else if(i){const e=c[t],r=e.afterRefIdx?n[e.afterRefIdx]:null;i.mount(n[e.parentRefIdx],r),o[t]=i}}}});return p}(t,e);if(e.cbRefs.length){const t=e.cbRefs,o=e.refList;let r=t.length;n=class extends n{mount(t,e){o.push(new Array(r)),super.mount(t,e);for(let t of o.pop())t()}remove(){super.remove();for(let e of t){(0,this.data[e])(null)}}}}if(e.children.length)return n=class extends n{constructor(t,e){super(t),this.children=e}},n.prototype.beforeRemove=R.prototype.beforeRemove,(t,e=[])=>new n(t,e);return t=>new n(t)}(o.el,r);return nt[t]=s,s}function rt(t){if(t.nodeType!==Node.TEXT_NODE||/\S/.test(t.textContent)){if(t.nodeType!==Node.ELEMENT_NODE||"pre"!==t.tagName)for(let e=t.childNodes.length-1;e>=0;--e)rt(t.childNodes.item(e))}else t.remove()}function st(t,e=null,n=null){switch(t.nodeType){case Node.ELEMENT_NODE:{let o=n&&n.currentNS;const r=t.tagName;let s;const i=[];if(r.startsWith("block-text-")){const t=parseInt(r.slice(11),10);i.push({type:"text",idx:t}),s=document.createTextNode("")}if(r.startsWith("block-child-")){n.isRef||it(n);const t=parseInt(r.slice(12),10);i.push({type:"child",idx:t}),s=document.createTextNode("")}if(o||(o=t.namespaceURI),s||(s=o?document.createElementNS(o,r):document.createElement(r)),s instanceof Element){if(!n){document.createElement("template").content.appendChild(s)}const e=t.attributes;for(let t=0;t<e.length;t++){const n=e[t].name,o=e[t].value;if(n.startsWith("block-handler-")){const t=parseInt(n.slice(14),10);i.push({type:"handler",idx:t,event:o})}else if(n.startsWith("block-attribute-")){const t=parseInt(n.slice(16),10);i.push({type:"attribute",idx:t,name:o,tag:r})}else if(n.startsWith("block-property-")){const t=parseInt(n.slice(15),10);i.push({type:"property",idx:t,name:o,tag:r})}else"block-attributes"===n?i.push({type:"attributes",idx:parseInt(o,10)}):"block-ref"===n?i.push({type:"ref",idx:parseInt(o,10)}):s.setAttribute(e[t].name,o)}}const l={parent:e,firstChild:null,nextSibling:null,el:s,info:i,refN:0,currentNS:o};if(t.firstChild){const e=t.childNodes[0];if(1===t.childNodes.length&&e.nodeType===Node.ELEMENT_NODE&&e.tagName.startsWith("block-child-")){const t=e.tagName,n=parseInt(t.slice(12),10);i.push({idx:n,type:"child",isOnlyChild:!0})}else{l.firstChild=st(t.firstChild,l,l),s.appendChild(l.firstChild.el);let e=t.firstChild,n=l.firstChild;for(;e=e.nextSibling;)n.nextSibling=st(e,n,l),s.appendChild(n.nextSibling.el),n=n.nextSibling}}return l.info.length&&it(l),l}case Node.TEXT_NODE:case Node.COMMENT_NODE:return{parent:e,firstChild:null,nextSibling:null,el:t.nodeType===Node.TEXT_NODE?document.createTextNode(t.textContent):document.createComment(t.textContent),info:[],refN:0,currentNS:null}}throw new s("boom")}function it(t){t.isRef=!0;do{t.refN++}while(t=t.parent)}function lt(t){let e=t.parent;for(;e&&e.nextSibling===t;)t=e,e=e.parent;return e}function at(t,e,n){if(!e){e={collectors:[],locations:[],children:new Array(t.info.filter((t=>"child"===t.type)).length),cbRefs:[],refN:t.refN,refList:[]},n=0}if(t.refN){const o=n,r=t.isRef,s=t.firstChild?t.firstChild.refN:0,i=t.nextSibling?t.nextSibling.refN:0;if(r){for(let e of t.info)e.refIdx=o;t.refIdx=o,function(t,e){for(let n of e.info)switch(n.type){case"text":t.locations.push({idx:n.idx,refIdx:n.refIdx,setData:ct,updateData:ct});break;case"child":n.isOnlyChild?t.children[n.idx]={parentRefIdx:n.refIdx,isOnlyChild:!0}:t.children[n.idx]={parentRefIdx:lt(e).refIdx,afterRefIdx:n.refIdx};break;case"property":{const e=n.refIdx,o=et(n.name);t.locations.push({idx:n.idx,refIdx:e,setData:o,updateData:o});break}case"attribute":{const e=n.refIdx;let o,r;"class"===n.name?(r=w,o=$):(r=g(n.name),o=r),t.locations.push({idx:n.idx,refIdx:e,setData:r,updateData:o});break}case"attributes":t.locations.push({idx:n.idx,refIdx:n.refIdx,setData:b,updateData:y});break;case"handler":{const{setup:e,update:o}=E(n.event);t.locations.push({idx:n.idx,refIdx:n.refIdx,setData:e,updateData:o});break}case"ref":const o=t.cbRefs.push(n.idx)-1;t.locations.push({idx:n.idx,refIdx:n.refIdx,setData:ht(o,t.refList),updateData:tt})}}(e,t),n++}if(i){const r=n+s;e.collectors.push({idx:r,prevIdx:o,getVal:Q}),at(t.nextSibling,e,r)}s&&(e.collectors.push({idx:n,prevIdx:o,getVal:J}),at(t.firstChild,e,n))}return e}function ct(t){Z.call(this,q(t))}function ht(t,e){return function(n){e[e.length-1][t]=()=>n(this)}}const ut=Node.prototype,dt=ut.insertBefore,ft=ut.appendChild,pt=ut.removeChild,mt=((t,e)=>Object.getOwnPropertyDescriptor(t,e))(ut,"textContent").set;class gt{constructor(t){this.children=t}mount(t,e){const n=this.children,o=document.createTextNode("");this.anchor=o,dt.call(t,o,e);const r=n.length;if(r){const e=n[0].mount;for(let s=0;s<r;s++)e.call(n[s],t,o)}this.parentEl=t}moveBeforeDOMNode(t,e=this.parentEl){this.parentEl=e;const n=this.children;for(let o=0,r=n.length;o<r;o++)n[o].moveBeforeDOMNode(t,e);e.insertBefore(this.anchor,t)}moveBeforeVNode(t,e){if(t){const n=t.children[0];e=(n?n.firstNode():t.anchor)||null}const n=this.children;for(let t=0,o=n.length;t<o;t++)n[t].moveBeforeVNode(null,e);this.parentEl.insertBefore(this.anchor,e)}patch(t,e){if(this===t)return;const n=this.children,o=t.children;if(0===o.length&&0===n.length)return;this.children=o;const r=o[0]||n[0],{mount:s,patch:i,remove:l,beforeRemove:a,moveBeforeVNode:c,firstNode:h}=r,u=this.anchor,d=this.isOnlyChild,f=this.parentEl;if(0===o.length&&d){if(e)for(let t=0,e=n.length;t<e;t++)a.call(n[t]);return mt.call(f,""),void ft.call(f,u)}let p,m=0,g=0,b=n[0],y=o[0],v=n.length-1,w=o.length-1,$=n[v],x=o[w];for(;m<=v&&g<=w;){if(null===b){b=n[++m];continue}if(null===$){$=n[--v];continue}let t=b.key,r=y.key;if(t===r){i.call(b,y,e),o[g]=b,b=n[++m],y=o[++g];continue}let l=$.key,a=x.key;if(l===a){i.call($,x,e),o[w]=$,$=n[--v],x=o[--w];continue}if(t===a){i.call(b,x,e),o[w]=b;const t=o[w+1];c.call(b,t,u),b=n[++m],x=o[--w];continue}if(l===r){i.call($,y,e),o[g]=$;const t=n[m];c.call($,t,u),$=n[--v],y=o[++g];continue}p=p||yt(n,m,v);let d=p[r];if(void 0===d)s.call(y,f,h.call(b)||null);else{const t=n[d];c.call(t,b,null),i.call(t,y,e),o[g]=t,n[d]=null}y=o[++g]}if(m<=v||g<=w)if(m>v){const t=o[w+1],e=t?h.call(t)||null:u;for(let t=g;t<=w;t++)s.call(o[t],f,e)}else for(let t=m;t<=v;t++){let o=n[t];o&&(e&&a.call(o),l.call(o))}}beforeRemove(){const t=this.children,e=t.length;if(e){const n=t[0].beforeRemove;for(let o=0;o<e;o++)n.call(t[o])}}remove(){const{parentEl:t,anchor:e}=this;if(this.isOnlyChild)mt.call(t,"");else{const n=this.children,o=n.length;if(o){const t=n[0].remove;for(let e=0;e<o;e++)t.call(n[e])}pt.call(t,e)}}firstNode(){const t=this.children[0];return t?t.firstNode():void 0}toString(){return this.children.map((t=>t.toString())).join("")}}function bt(t){return new gt(t)}function yt(t,e,n){let o={};for(let r=e;r<=n;r++)o[t[r].key]=r;return o}const vt=Node.prototype,wt=vt.insertBefore,$t=vt.removeChild;class xt{constructor(t){this.content=[],this.html=t}mount(t,e){this.parentEl=t;const n=document.createElement("template");n.innerHTML=this.html,this.content=[...n.content.childNodes];for(let n of this.content)wt.call(t,n,e);if(!this.content.length){const n=document.createTextNode("");this.content.push(n),wt.call(t,n,e)}}moveBeforeDOMNode(t,e=this.parentEl){this.parentEl=e;for(let n of this.content)wt.call(e,n,t)}moveBeforeVNode(t,e){const n=t?t.content[0]:e;this.moveBeforeDOMNode(n)}patch(t){if(this===t)return;const e=t.html;if(this.html!==e){const n=this.parentEl,o=this.content[0],r=document.createElement("template");r.innerHTML=e;const s=[...r.content.childNodes];for(let t of s)wt.call(n,t,o);if(!s.length){const t=document.createTextNode("");s.push(t),wt.call(n,t,o)}this.remove(),this.content=s,this.html=t.html}}beforeRemove(){}remove(){const t=this.parentEl;for(let e of this.content)$t.call(t,e)}firstNode(){return this.content[0]}toString(){return this.html}}function Nt(t){return new xt(t)}function kt(t,e,n=null){t.mount(e,n)}const Et=new WeakMap,At=new WeakMap;function Tt(t,e){if(!t)return!1;const n=t.fiber;n&&Et.set(n,e);const o=At.get(t);if(o){let t=!1;for(let n=o.length-1;n>=0;n--)try{o[n](e),t=!0;break}catch(t){e=t}if(t)return!0}return Tt(t.parent,e)}function _t(t){let{error:e}=t;e instanceof s||(e=Object.assign(new s('An error occured in the owl lifecycle (see this Error\'s "cause" property)'),{cause:e}));const n="node"in t?t.node:t.fiber.node,o="fiber"in t?t.fiber:n.fiber;if(o){let t=o;do{t.node.fiber=t,t=t.parent}while(t);Et.set(o.root,e)}if(!Tt(n,e)){console.warn("[Owl] Unhandled error. Destroying the root component");try{n.app.destroy()}catch(t){console.error(t)}throw e}}function St(){throw new s("Attempted to render cancelled fiber")}function Ct(t){let e=0;for(let n of t){let t=n.node;n.render=St,0===t.status&&t.cancel(),t.fiber=null,n.bdom?t.forceNextRender=!0:e++,e+=Ct(n.children)}return e}class Ot{constructor(t,e){if(this.bdom=null,this.children=[],this.appliedToDom=!1,this.deep=!1,this.childrenMap={},this.node=t,this.parent=e,e){this.deep=e.deep;const t=e.root;t.setCounter(t.counter+1),this.root=t,e.children.push(this)}else this.root=this}render(){let t=this.root.node,e=t.app.scheduler,n=t.parent;for(;n;){if(n.fiber){let o=n.fiber.root;if(0!==o.counter||!(t.parentKey in n.fiber.childrenMap))return void e.delayedRenders.push(this);n=o.node}t=n,n=n.parent}this._render()}_render(){const t=this.node,e=this.root;if(e){try{this.bdom=!0,this.bdom=t.renderFn()}catch(e){t.app.handleError({node:t,error:e})}e.setCounter(e.counter-1)}}}class Dt extends Ot{constructor(){super(...arguments),this.counter=1,this.willPatch=[],this.patched=[],this.mounted=[],this.locked=!1}complete(){const t=this.node;let e;this.locked=!0;try{for(e of this.willPatch){let t=e.node;if(t.fiber===e){const e=t.component;for(let n of t.willPatch)n.call(e)}}e=void 0,t._patch(),this.locked=!1;let n=this.mounted;for(;e=n.pop();)if(e.appliedToDom)for(let t of e.node.mounted)t();let o=this.patched;for(;e=o.pop();)if(e.appliedToDom)for(let t of e.node.patched)t()}catch(n){this.locked=!1,t.app.handleError({fiber:e||this,error:n})}}setCounter(t){this.counter=t,0===t&&this.node.app.scheduler.flush()}}class Lt extends Dt{constructor(t,e,n={}){super(t,null),this.target=e,this.position=n.position||"last-child"}complete(){let t=this;try{const e=this.node;if(e.children=this.childrenMap,e.app.constructor.validateTarget(this.target),e.bdom)e.updateDom();else if(e.bdom=this.bdom,"last-child"===this.position||0===this.target.childNodes.length)kt(e.bdom,this.target);else{const t=this.target.childNodes[0];kt(e.bdom,this.target,t)}e.fiber=null,e.status=1,this.appliedToDom=!0;let n=this.mounted;for(;t=n.pop();)if(t.appliedToDom)for(let e of t.node.mounted)e()}catch(e){this.node.app.handleError({fiber:t,error:e})}}}const Bt=Symbol("Key changes"),Rt=()=>{throw new Error("Called NO_CALLBACK. Owl is broken, please report this to the maintainers.")},Pt=Object.prototype.toString,jt=Object.prototype.hasOwnProperty,Mt=new Set(["Object","Array","Set","Map","WeakMap"]),It=new Set(["Set","Map","WeakMap"]);function Wt(t){return Pt.call(Ht(t)).slice(8,-1)}function Ft(t){return"object"==typeof t&&Mt.has(Wt(t))}function Vt(t,e){return Ft(t)?Qt(t,e):t}const Kt=new WeakSet;function zt(t){return Kt.add(t),t}function Ht(t){return Zt.has(t)?Zt.get(t):t}const Ut=new WeakMap;function qt(t,e,n){if(n===Rt)return;Ut.get(t)||Ut.set(t,new Map);const o=Ut.get(t);o.get(e)||o.set(e,new Set),o.get(e).add(n),Xt.has(n)||Xt.set(n,new Set),Xt.get(n).add(t)}function Gt(t,e){const n=Ut.get(t);if(!n)return;const o=n.get(e);if(o)for(const t of[...o])Yt(t),t()}const Xt=new WeakMap;function Yt(t){const e=Xt.get(t);if(e){for(const n of e){const e=Ut.get(n);if(e)for(const[n,o]of e.entries())o.delete(t),o.size||e.delete(n)}e.clear()}}const Zt=new WeakMap,Jt=new WeakMap;function Qt(t,e=Rt){if(!Ft(t))throw new s("Cannot make the given value reactive");if(Kt.has(t))return t;if(Zt.has(t))return Qt(Zt.get(t),e);Jt.has(t)||Jt.set(t,new WeakMap);const n=Jt.get(t);if(!n.has(e)){const o=Wt(t),r=It.has(o)?function(t,e,n){const o=ie[n](t,e);return Object.assign(te(e),{get:(t,n)=>jt.call(o,n)?o[n]:(qt(t,n,e),Vt(t[n],e))})}(t,e,o):te(e),s=new Proxy(t,r);n.set(e,s),Zt.set(s,t)}return n.get(e)}function te(t){return{get(e,n,o){const r=Object.getOwnPropertyDescriptor(e,n);return!r||r.writable||r.configurable?(qt(e,n,t),Vt(Reflect.get(e,n,o),t)):Reflect.get(e,n,o)},set(t,e,n,o){const r=jt.call(t,e),s=Reflect.get(t,e,o),i=Reflect.set(t,e,n,o);return!r&&jt.call(t,e)&&Gt(t,Bt),(s!==Reflect.get(t,e,o)||"length"===e&&Array.isArray(t))&&Gt(t,e),i},deleteProperty(t,e){const n=Reflect.deleteProperty(t,e);return Gt(t,Bt),Gt(t,e),n},ownKeys:e=>(qt(e,Bt,t),Reflect.ownKeys(e)),has:(e,n)=>(qt(e,Bt,t),Reflect.has(e,n))}}function ee(t,e,n){return o=>(o=Ht(o),qt(e,o,n),Vt(e[t](o),n))}function ne(t,e,n){return function*(){qt(e,Bt,n);const o=e.keys();for(const r of e[t]()){const t=o.next().value;qt(e,t,n),yield Vt(r,n)}}}function oe(t,e){return function(n,o){qt(t,Bt,e),t.forEach((function(r,s,i){qt(t,s,e),n.call(o,Vt(r,e),Vt(s,e),Vt(i,e))}),o)}}function re(t,e,n){return(o,r)=>{o=Ht(o);const s=n.has(o),i=n[e](o),l=n[t](o,r);return s!==n.has(o)&&Gt(n,Bt),i!==n[e](o)&&Gt(n,o),l}}function se(t){return()=>{const e=[...t.keys()];t.clear(),Gt(t,Bt);for(const n of e)Gt(t,n)}}const ie={Set:(t,e)=>({has:ee("has",t,e),add:re("add","has",t),delete:re("delete","has",t),keys:ne("keys",t,e),values:ne("values",t,e),entries:ne("entries",t,e),[Symbol.iterator]:ne(Symbol.iterator,t,e),forEach:oe(t,e),clear:se(t),get size(){return qt(t,Bt,e),t.size}}),Map:(t,e)=>({has:ee("has",t,e),get:ee("get",t,e),set:re("set","get",t),delete:re("delete","has",t),keys:ne("keys",t,e),values:ne("values",t,e),entries:ne("entries",t,e),[Symbol.iterator]:ne(Symbol.iterator,t,e),forEach:oe(t,e),clear:se(t),get size(){return qt(t,Bt,e),t.size}}),WeakMap:(t,e)=>({has:ee("has",t,e),get:ee("get",t,e),set:re("set","get",t),delete:re("delete","has",t)})};let le=null;function ae(){if(!le)throw new s("No active component (a hook function should only be called in 'setup')");return le}function ce(t,e){for(let n in e)void 0===t[n]&&(t[n]=e[n])}const he=new WeakMap;function ue(t){const e=ae();let n=he.get(e);return n||(n=function(t){let e=!1;return async(...n)=>{e||(e=!0,await Promise.resolve(),e=!1,t(...n))}}(e.render.bind(e,!1)),he.set(e,n),e.willDestroy.push(Yt.bind(null,n))),Qt(t,n)}class de{constructor(t,e,n,o,r){this.fiber=null,this.bdom=null,this.status=0,this.forceNextRender=!1,this.nextProps=null,this.children=Object.create(null),this.refs={},this.willStart=[],this.willUpdateProps=[],this.willUnmount=[],this.mounted=[],this.willPatch=[],this.patched=[],this.willDestroy=[],le=this,this.app=n,this.parent=o,this.props=e,this.parentKey=r;const s=t.defaultProps;e=Object.assign({},e),s&&ce(e,s);const i=o&&o.childEnv||n.env;this.childEnv=i;for(const t in e){const n=e[t];n&&"object"==typeof n&&Zt.has(n)&&(e[t]=ue(n))}this.component=new t(e,i,this);const l=Object.assign(Object.create(this.component),{this:this.component});this.renderFn=n.getTemplate(t.template).bind(this.component,l,this),this.component.setup(),le=null}mountComponent(t,e){const n=new Lt(this,t,e);this.app.scheduler.addFiber(n),this.initiateRender(n)}async initiateRender(t){this.fiber=t,this.mounted.length&&t.root.mounted.push(t);const e=this.component;try{await Promise.all(this.willStart.map((t=>t.call(e))))}catch(t){return void this.app.handleError({node:this,error:t})}0===this.status&&this.fiber===t&&t.render()}async render(t){if(this.status>=2)return;let e=this.fiber;if(e&&(e.root.locked||!0===e.bdom)&&(await Promise.resolve(),e=this.fiber),e){if(!e.bdom&&!Et.has(e))return void(t&&(e.deep=t));t=t||e.deep}else if(!this.bdom)return;const n=function(t){let e=t.fiber;if(e){let t=e.root;return t.locked=!0,t.setCounter(t.counter+1-Ct(e.children)),t.locked=!1,e.children=[],e.childrenMap={},e.bdom=null,Et.has(e)&&(Et.delete(e),Et.delete(t),e.appliedToDom=!1),e}const n=new Dt(t,null);return t.willPatch.length&&n.willPatch.push(n),t.patched.length&&n.patched.push(n),n}(this);n.deep=t,this.fiber=n,this.app.scheduler.addFiber(n),await Promise.resolve(),this.status>=2||this.fiber!==n||!e&&n.parent||n.render()}cancel(){this._cancel(),delete this.parent.children[this.parentKey],this.app.scheduler.scheduleDestroy(this)}_cancel(){this.status=2;const t=this.children;for(let e in t)t[e]._cancel()}destroy(){let t=1===this.status;this._destroy(),t&&this.bdom.remove()}_destroy(){const t=this.component;if(1===this.status)for(let e of this.willUnmount)e.call(t);for(let t of Object.values(this.children))t._destroy();if(this.willDestroy.length)try{for(let e of this.willDestroy)e.call(t)}catch(t){this.app.handleError({error:t,node:this})}this.status=3}async updateAndRender(t,e){this.nextProps=t,t=Object.assign({},t);const n=function(t,e){let n=t.fiber;return n&&(Ct(n.children),n.root=null),new Ot(t,e)}(this,e);this.fiber=n;const o=this.component,r=o.constructor.defaultProps;r&&ce(t,r),le=this;for(const e in t){const n=t[e];n&&"object"==typeof n&&Zt.has(n)&&(t[e]=ue(n))}le=null;const s=Promise.all(this.willUpdateProps.map((e=>e.call(o,t))));if(await s,n!==this.fiber)return;o.props=t,n.render();const i=e.root;this.willPatch.length&&i.willPatch.push(n),this.patched.length&&i.patched.push(n)}updateDom(){if(this.fiber)if(this.bdom===this.fiber.bdom)for(let t in this.children){this.children[t].updateDom()}else this.bdom.patch(this.fiber.bdom,!1),this.fiber.appliedToDom=!0,this.fiber=null}setRef(t,e){e&&(this.refs[t]=e)}firstNode(){const t=this.bdom;return t?t.firstNode():void 0}mount(t,e){const n=this.fiber.bdom;this.bdom=n,n.mount(t,e),this.status=1,this.fiber.appliedToDom=!0,this.children=this.fiber.childrenMap,this.fiber=null}moveBeforeDOMNode(t,e){this.bdom.moveBeforeDOMNode(t,e)}moveBeforeVNode(t,e){this.bdom.moveBeforeVNode(t?t.bdom:null,e)}patch(){this.fiber&&this.fiber.parent&&(this._patch(),this.props=this.nextProps)}_patch(){let t=!1;for(let e in this.children){t=!0;break}const e=this.fiber;this.children=e.childrenMap,this.bdom.patch(e.bdom,t),e.appliedToDom=!0,this.fiber=null}beforeRemove(){this._destroy()}remove(){this.bdom.remove()}get name(){return this.component.constructor.name}get subscriptions(){const t=he.get(this);return t?(e=t,[...Xt.get(e)||[]].map((t=>{const n=Ut.get(t);let o=[];if(n)for(const[t,r]of n)r.has(e)&&o.push(t);return{target:t,keys:o}}))):[];var e}}const fe=Symbol("timeout");function pe(t,e){const n=new s(`The following error occurred in ${e}: `),o=new s(`${e}'s promise hasn't resolved after 3 seconds`),r=ae();return(...s)=>{const i=t=>{throw n.cause=t,t instanceof Error?n.message+=`"${t.message}"`:n.message=`Something that is not an Error was thrown in ${e} (see this Error's "cause" property)`,n};try{const n=t(...s);if(n instanceof Promise){if("onWillStart"===e||"onWillUpdateProps"===e){const t=r.fiber;Promise.race([n.catch((()=>{})),new Promise((t=>setTimeout((()=>t(fe)),3e3)))]).then((e=>{e===fe&&r.fiber===t&&console.warn(o)}))}return n.catch(i)}return n}catch(t){i(t)}}}function me(t){const e=ae(),n=e.app.dev?pe:t=>t;e.mounted.push(n(t.bind(e.component),"onMounted"))}function ge(t){const e=ae(),n=e.app.dev?pe:t=>t;e.patched.push(n(t.bind(e.component),"onPatched"))}function be(t){const e=ae(),n=e.app.dev?pe:t=>t;e.willUnmount.unshift(n(t.bind(e.component),"onWillUnmount"))}class ye{constructor(t,e,n){this.props=t,this.env=e,this.__owl__=n}setup(){}render(t=!1){this.__owl__.render(!0===t)}}ye.template="";const ve=H("").constructor;class we extends ve{constructor(t,e){super(""),this.target=null,this.selector=t,this.content=e}mount(t,e){super.mount(t,e),this.target=document.querySelector(this.selector),this.target?this.content.mount(this.target,null):this.content.mount(t,e)}beforeRemove(){this.content.beforeRemove()}remove(){this.content&&(super.remove(),this.content.remove(),this.content=null)}patch(t){super.patch(t),this.content?this.content.patch(t.content,!0):(this.content=t.content,this.content.mount(this.target,null))}}class $e extends ye{setup(){const t=this.__owl__;me((()=>{const e=t.bdom;if(!e.target){const t=document.querySelector(this.props.target);if(!t)throw new s("invalid portal target");e.content.moveBeforeDOMNode(t.firstChild,t)}})),be((()=>{t.bdom.remove()}))}}$e.template="__portal__",$e.props={target:{type:String},slots:!0};const xe=t=>Array.isArray(t),Ne=t=>"object"!=typeof t,ke=t=>"object"==typeof t&&t&&"value"in t;function Ee(t){return"object"==typeof t&&"optional"in t&&t.optional||!1}function Ae(t){return"*"===t||!0===t?"value":t.name.toLowerCase()}function Te(t){return Ne(t)?Ae(t):xe(t)?t.map(Te).join(" or "):ke(t)?String(t.value):"element"in t?`list of ${Te({type:t.element,optional:!1})}s`:"shape"in t?"object":Te(t.type||"*")}function _e(t,e){var n;Array.isArray(e)&&(n=e,e=Object.fromEntries(n.map((t=>t.endsWith("?")?[t.slice(0,-1),{optional:!0}]:[t,{type:"*",optional:!1}])))),t=Ht(t);let o=[];for(let n in t)if(n in e){let r=Se(n,t[n],e[n]);r&&o.push(r)}else"*"in e||o.push(`unknown key '${n}'`);for(let n in e){const r=e[n];if("*"!==n&&!Ee(r)&&!(n in t)){const t="object"==typeof r&&!Array.isArray(r);let e="*"===r||(t&&"type"in r?"*"===r.type:t)?"":` (should be a ${Te(r)})`;o.push(`'${n}' is missing${e}`)}}return o}function Se(t,e,n){if(void 0===e)return Ee(n)?null:`'${t}' is undefined (should be a ${Te(n)})`;if(Ne(n))return function(t,e,n){if("function"==typeof n)if("object"==typeof e){if(!(e instanceof n))return`'${t}' is not a ${Ae(n)}`}else if(typeof e!==n.name.toLowerCase())return`'${t}' is not a ${Ae(n)}`;return null}(t,e,n);if(ke(n))return e===n.value?null:`'${t}' is not equal to '${n.value}'`;if(xe(n)){let o=n.find((n=>!Se(t,e,n)));return o?null:`'${t}' is not a ${Te(n)}`}let o=null;if("element"in n)o=function(t,e,n){if(!Array.isArray(e))return`'${t}' is not a list of ${Te(n)}s`;for(let o=0;o<e.length;o++){const r=Se(`${t}[${o}]`,e[o],n);if(r)return r}return null}(t,e,n.element);else if("shape"in n)if("object"!=typeof e||Array.isArray(e))o=`'${t}' is not an object`;else{const r=_e(e,n.shape);r.length&&(o=`'${t}' doesn't have the correct shape (${r.join(", ")})`)}else if("values"in n)if("object"!=typeof e||Array.isArray(e))o=`'${t}' is not an object`;else{const r=Object.entries(e).map((([t,e])=>Se(t,e,n.values))).filter(Boolean);r.length&&(o=`some of the values in '${t}' are invalid (${r.join(", ")})`)}return"type"in n&&!o&&(o=Se(t,e,n.type)),"validate"in n&&!o&&(o=n.validate(e)?null:`'${t}' is not valid`),o}const Ce=Object.create;function Oe(t){const e=Ce(t);for(let n in t)e[n]=t[n];return e}const De=Symbol("isBoundary");class Le{constructor(t,e,n,o,r){this.fn=t,this.ctx=Oe(e),this.component=n,this.node=o,this.key=r}evaluate(){return this.fn.call(this.component,this.ctx,this.node,this.key)}toString(){return this.evaluate().toString()}}function Be(t,e,n){const o="string"!=typeof t?t:n.constructor.components[t];if(!o)return;const r=o.props;if(!r)return void(n.__owl__.app.warnIfNoStaticProps&&console.warn(`Component '${o.name}' does not have a static props description`));const i=o.defaultProps;if(i){let t=t=>Array.isArray(r)?r.includes(t):t in r&&!("*"in r)&&!Ee(r[t]);for(let e in i)if(t(e))throw new s(`A default value cannot be defined for a mandatory prop (name: '${e}', component: ${o.name})`)}const l=_e(e,r);if(l.length)throw new s(`Invalid props for component '${o.name}': `+l.join(", "))}const Re={withDefault:function(t,e){return null==t||!1===t?e:t},zero:Symbol("zero"),isBoundary:De,callSlot:function(t,e,n,o,s,i,l){n=n+"__slot_"+o;const a=t.props.slots||{},{__render:c,__ctx:h,__scope:u}=a[o]||{},d=Ce(h||{});u&&(d[u]=i);const f=c?c(d,e,n):null;if(l){let i,a;return f?i=s?r(o,f):f:a=l(t,e,n),P([i,a])}return f||H("")},capture:Oe,withKey:function(t,e){return t.key=e,t},prepareList:function(t){let e,n;if(Array.isArray(t))e=t,n=t;else if(t instanceof Map)e=[...t.keys()],n=[...t.values()];else if(Symbol.iterator in Object(t))e=[...t],n=e;else{if(!t||"object"!=typeof t)throw new s(`Invalid loop expression: "${t}" is not iterable`);n=Object.values(t),e=Object.keys(t)}const o=n.length;return[e,n,o,new Array(o)]},setContextValue:function(t,e,n){const o=t;for(;!t.hasOwnProperty(e)&&!t.hasOwnProperty(De);){const e=t.__proto__;if(!e){t=o;break}t=e}t[e]=n},shallowEqual:function(t,e){for(let n=0,o=t.length;n<o;n++)if(t[n]!==e[n])return!1;return!0},toNumber:function(t){const e=parseFloat(t);return isNaN(e)?t:e},validateProps:Be,LazyValue:Le,safeOutput:function(t,e){if(null==t)return e?r("default",e):r("undefined",H(""));let n,o;switch(typeof t){case"object":t instanceof k?(n="string_safe",o=Nt(t)):t instanceof Le?(n="lazy_value",o=t.evaluate()):t instanceof String?(n="string_unsafe",o=H(t)):(n="block_safe",o=t);break;case"string":n="string_unsafe",o=H(t);break;default:n="string_unsafe",o=H(String(t))}return r(n,o)},createCatcher:function(t){const e=Object.keys(t).length;class n{constructor(t,e){this.handlerFns=[],this.afterNode=null,this.child=t,this.handlerData=e}mount(e,n){this.parentEl=e,this.child.mount(e,n),this.afterNode=document.createTextNode(""),e.insertBefore(this.afterNode,n),this.wrapHandlerData();for(let n in t){const o=t[n],r=E(n);this.handlerFns[o]=r,r.setup.call(e,this.handlerData[o])}}wrapHandlerData(){for(let t=0;t<e;t++){let e=this.handlerData[t],n=e.length-2,o=e[n];const r=this;e[n]=function(t){const e=t.target;let n=r.child.firstNode();const s=r.afterNode;for(;n&&n!==s;){if(n.contains(e))return o.call(this,t);n=n.nextSibling}}}}moveBeforeDOMNode(t,e=this.parentEl){this.parentEl=e,this.child.moveBeforeDOMNode(t,e),e.insertBefore(this.afterNode,t)}moveBeforeVNode(t,e){t&&(e=t.firstNode()||e),this.child.moveBeforeVNode(t?t.child:null,e),this.parentEl.insertBefore(this.afterNode,e)}patch(t,n){if(this!==t){this.handlerData=t.handlerData,this.wrapHandlerData();for(let t=0;t<e;t++)this.handlerFns[t].update.call(this.parentEl,this.handlerData[t]);this.child.patch(t.child,n)}}beforeRemove(){this.child.beforeRemove()}remove(){for(let t=0;t<e;t++)this.handlerFns[t].remove.call(this.parentEl);this.child.remove(),this.afterNode.remove()}firstNode(){return this.child.firstNode()}toString(){return this.child.toString()}}return function(t,e){return new n(t,e)}},markRaw:zt,OwlError:s,makeRefWrapper:function(t){let e=new Set;return(n,o)=>{if(e.has(n))throw new s(`Cannot set the same ref more than once in the same component, ref "${n}" was set multiple times in ${t.name}`);return e.add(n),o}}},Pe={text:H,createBlock:ot,list:bt,multi:P,html:Nt,toggler:r,comment:U};class je{constructor(t={}){this.rawTemplates=Object.create(Me),this.templates={},this.Portal=$e,this.dev=t.dev||!1,this.translateFn=t.translateFn,this.translatableAttributes=t.translatableAttributes,t.templates&&this.addTemplates(t.templates)}static registerTemplate(t,e){Me[t]=e}addTemplate(t,e){if(t in this.rawTemplates){if(!this.dev)return;const n=this.rawTemplates[t];if(("string"==typeof n?n:n instanceof Element?n.outerHTML:n.toString())===("string"==typeof e?e:e.outerHTML))return;throw new s(`Template ${t} already defined with different content`)}this.rawTemplates[t]=e}addTemplates(t){if(t){t=t instanceof Document?t:function(t){const e=(new DOMParser).parseFromString(t,"text/xml");if(e.getElementsByTagName("parsererror").length){let n="Invalid XML in template.";const o=e.getElementsByTagName("parsererror")[0].textContent;if(o){n+="\nThe parser has produced the following error message:\n"+o;const e=/\d+/g,r=e.exec(o);if(r){const s=Number(r[0]),i=t.split("\n")[s-1],l=e.exec(o);if(i&&l){const t=Number(l[0])-1;i[t]&&(n+=`\nThe error might be located at xml line ${s} column ${t}\n${i}\n${"-".repeat(t-1)}^`)}}}throw new s(n)}return e}(t);for(const e of t.querySelectorAll("[t-name]")){const t=e.getAttribute("t-name");this.addTemplate(t,e)}}}getTemplate(t){if(!(t in this.templates)){const e=this.rawTemplates[t];if(void 0===e){let e="";try{e=` (for component "${ae().component.constructor.name}")`}catch{}throw new s(`Missing template: "${t}"${e}`)}const n="function"==typeof e&&!(e instanceof Element)?e:this._compileTemplate(t,e),o=this.templates;this.templates[t]=function(e,n){return o[t].call(this,e,n)};const r=n(this,Pe,Re);this.templates[t]=r}return this.templates[t]}_compileTemplate(t,e){throw new s("Unable to compile a template. Please use owl full build instead")}callTemplate(t,e,n,o,s){return r(e,this.getTemplate(e).call(t,n,o,s+e))}}const Me={};function Ie(...t){const e="__template__"+Ie.nextId++,n=String.raw(...t);return Me[e]=n,e}Ie.nextId=1,je.registerTemplate("__portal__",(function(t,e,n){let{callSlot:o}=n;return function(t,e,n=""){return new we(t.props.target,o(t,e,n,"default",!1,null))}}));const We="true,false,NaN,null,undefined,debugger,console,window,in,instanceof,new,function,return,eval,void,Math,RegExp,Array,Object,Date".split(","),Fe=Object.assign(Object.create(null),{and:"&&",or:"||",gt:">",gte:">=",lt:"<",lte:"<="}),Ve=Object.assign(Object.create(null),{"{":"LEFT_BRACE","}":"RIGHT_BRACE","[":"LEFT_BRACKET","]":"RIGHT_BRACKET",":":"COLON",",":"COMMA","(":"LEFT_PAREN",")":"RIGHT_PAREN"}),Ke="...,.,===,==,+,!==,!=,!,||,&&,>=,>,<=,<,?,-,*,/,%,typeof ,=>,=,;,in ,new ,|,&,^,~".split(",");const ze=[function(t){let e=t[0],n=e;if("'"!==e&&'"'!==e&&"`"!==e)return!1;let o,r=1;for(;t[r]&&t[r]!==n;){if(o=t[r],e+=o,"\\"===o){if(r++,o=t[r],!o)throw new s("Invalid expression");e+=o}r++}if(t[r]!==n)throw new s("Invalid expression");return e+=n,"`"===n?{type:"TEMPLATE_STRING",value:e,replace:t=>e.replace(/\$\{(.*?)\}/g,((e,n)=>"${"+t(n)+"}"))}:{type:"VALUE",value:e}},function(t){let e=t[0];if(e&&e.match(/[0-9]/)){let n=1;for(;t[n]&&t[n].match(/[0-9]|\./);)e+=t[n],n++;return{type:"VALUE",value:e}}return!1},function(t){for(let e of Ke)if(t.startsWith(e))return{type:"OPERATOR",value:e};return!1},function(t){let e=t[0];if(e&&e.match(/[a-zA-Z_\$]/)){let n=1;for(;t[n]&&t[n].match(/\w/);)e+=t[n],n++;return e in Fe?{type:"OPERATOR",value:Fe[e],size:e.length}:{type:"SYMBOL",value:e}}return!1},function(t){const e=t[0];return!(!e||!(e in Ve))&&{type:Ve[e],value:e}}];const He=t=>t&&("LEFT_BRACE"===t.type||"COMMA"===t.type),Ue=t=>t&&("RIGHT_BRACE"===t.type||"COMMA"===t.type);function qe(t){const e=new Set,n=function(t){const e=[];let n,o=!0,r=t;try{for(;o;)if(r=r.trim(),r){for(let t of ze)if(o=t(r),o){e.push(o),r=r.slice(o.size||o.value.length);break}}else o=!1}catch(t){n=t}if(r.length||n)throw new s(`Tokenizer error: could not tokenize \`${t}\``);return e}(t);let o=0,r=[];for(;o<n.length;){let t=n[o],s=n[o-1],i=n[o+1],l=r[r.length-1];switch(t.type){case"LEFT_BRACE":case"LEFT_BRACKET":r.push(t.type);break;case"RIGHT_BRACE":case"RIGHT_BRACKET":r.pop()}let a="SYMBOL"===t.type&&!We.includes(t.value);if("SYMBOL"!==t.type||We.includes(t.value)||s&&("LEFT_BRACE"===l&&He(s)&&Ue(i)&&(n.splice(o+1,0,{type:"COLON",value:":"},{...t}),i=n[o+1]),"OPERATOR"===s.type&&"."===s.value?a=!1:"LEFT_BRACE"!==s.type&&"COMMA"!==s.type||i&&"COLON"===i.type&&(a=!1)),"TEMPLATE_STRING"===t.type&&(t.value=t.replace((t=>Xe(t)))),i&&"OPERATOR"===i.type&&"=>"===i.value)if("RIGHT_PAREN"===t.type){let t=o-1;for(;t>0&&"LEFT_PAREN"!==n[t].type;)"SYMBOL"===n[t].type&&n[t].originalValue&&(n[t].value=n[t].originalValue,e.add(n[t].value)),t--}else e.add(t.value);a&&(t.varName=t.value,e.has(t.value)||(t.originalValue=t.value,t.value=`ctx['${t.value}']`)),o++}for(const t of n)"SYMBOL"===t.type&&t.varName&&e.has(t.value)&&(t.originalValue=t.value,t.value=`_${t.value}`,t.isLocal=!0);return n}const Ge=new Map([["in "," in "]]);function Xe(t){return qe(t).map((t=>Ge.get(t.value)||t.value)).join("")}const Ye=/\{\{.*?\}\}|\#\{.*?\}/g;function Ze(t,e){let n=t.match(Ye);if(n&&n[0].length===t.length)return`(${e(t.slice(2,"{"===n[0][0]?-2:-1))})`;let o=t.replace(Ye,(t=>"${"+e(t.slice(2,"{"===t[0]?-2:-1))+"}"));return"`"+o+"`"}function Je(t){return Ze(t,Xe)}const Qe=/\s+/g,tn=document.implementation.createDocument(null,null,null),en=new Set(["stop","capture","prevent","self","synthetic"]);let nn={};function on(t=""){return nn[t]=(nn[t]||0)+1,t+nn[t]}function rn(t,e){switch(t){case"input":return"checked"===e||"indeterminate"===e||"value"===e||"readonly"===e||"readOnly"===e||"disabled"===e;case"option":return"selected"===e||"disabled"===e;case"textarea":return"value"===e||"readonly"===e||"readOnly"===e||"disabled"===e;case"select":return"value"===e||"disabled"===e;case"button":case"optgroup":return"disabled"===e}return!1}class sn{constructor(t,e){this.dynamicTagName=null,this.isRoot=!1,this.hasDynamicChildren=!1,this.children=[],this.data=[],this.childNumber=0,this.parentVar="",this.id=sn.nextBlockId++,this.varName="b"+this.id,this.blockName="block"+this.id,this.target=t,this.type=e}insertData(t,e="d"){const n=on(e);return this.target.addLine(`let ${n} = ${t};`),this.data.push(n)-1}insert(t){this.currentDom?this.currentDom.appendChild(t):this.dom=t}generateExpr(t){if("block"===this.type){const t=this.children.length;let e=this.data.length?`[${this.data.join(", ")}]`:t?"[]":"";return t&&(e+=", ["+this.children.map((t=>t.varName)).join(", ")+"]"),this.dynamicTagName?`toggler(${this.dynamicTagName}, ${this.blockName}(${this.dynamicTagName})(${e}))`:`${this.blockName}(${e})`}return"list"===this.type?`list(c_block${this.id})`:t}asXmlString(){const t=tn.createElement("t");return t.appendChild(this.dom),t.innerHTML}}function ln(t,e){return Object.assign({block:null,index:0,forceNewBlock:!0,translate:t.translate,tKeyExpr:null,nameSpace:t.nameSpace,tModelSelectedExpr:t.tModelSelectedExpr},e)}sn.nextBlockId=1;class an{constructor(t,e){this.indentLevel=0,this.loopLevel=0,this.code=[],this.hasRoot=!1,this.hasCache=!1,this.shouldProtectScope=!1,this.hasRefWrapper=!1,this.name=t,this.on=e||null}addLine(t,e){const n=new Array(this.indentLevel+2).join(" ");void 0===e?this.code.push(n+t):this.code.splice(e,0,n+t)}generateCode(){let t=[];t.push(`function ${this.name}(ctx, node, key = "") {`),this.shouldProtectScope&&(t.push(" ctx = Object.create(ctx);"),t.push(" ctx[isBoundary] = 1")),this.hasRefWrapper&&t.push(" let refWrapper = makeRefWrapper(this.__owl__);"),this.hasCache&&(t.push(" let cache = ctx.cache || {};"),t.push(" let nextCache = ctx.cache = {};"));for(let e of this.code)t.push(e);return this.hasRoot||t.push("return text('');"),t.push("}"),t.join("\n ")}currentKey(t){let e=this.loopLevel?`key${this.loopLevel}`:"key";return t.tKeyExpr&&(e=`${t.tKeyExpr} + ${e}`),e}}const cn=["label","title","placeholder","alt"],hn=/^(\s*)([\s\S]+?)(\s*)$/;class un{constructor(t,e){if(this.blocks=[],this.nextBlockId=1,this.isDebug=!1,this.targets=[],this.target=new an("template"),this.translatableAttributes=cn,this.staticDefs=[],this.slotNames=new Set,this.helpers=new Set,this.translateFn=e.translateFn||(t=>t),e.translatableAttributes){const t=new Set(cn);for(let n of e.translatableAttributes)n.startsWith("-")?t.delete(n.slice(1)):t.add(n);this.translatableAttributes=[...t]}this.hasSafeContext=e.hasSafeContext||!1,this.dev=e.dev||!1,this.ast=t,this.templateName=e.name}generateCode(){const t=this.ast;this.isDebug=12===t.type,sn.nextBlockId=1,nn={},this.compileAST(t,{block:null,index:0,forceNewBlock:!1,isLast:!0,translate:!0,tKeyExpr:null});let e=[" let { text, createBlock, list, multi, html, toggler, comment } = bdom;"];this.helpers.size&&e.push(`let { ${[...this.helpers].join(", ")} } = helpers;`),this.templateName&&e.push(`// Template name: "${this.templateName}"`);for(let{id:t,expr:n}of this.staticDefs)e.push(`const ${t} = ${n};`);if(this.blocks.length){e.push("");for(let t of this.blocks)if(t.dom){let n=t.asXmlString();n=n.replace(/\\/g,"\\\\").replace(/`/g,"\\`"),t.dynamicTagName?(n=n.replace(/^<\w+/,`<\${tag || '${t.dom.nodeName}'}`),n=n.replace(/\w+>$/,`\${tag || '${t.dom.nodeName}'}>`),e.push(`let ${t.blockName} = tag => createBlock(\`${n}\`);`)):e.push(`let ${t.blockName} = createBlock(\`${n}\`);`)}}if(this.targets.length)for(let t of this.targets)e.push(""),e=e.concat(t.generateCode());e.push(""),e=e.concat("return "+this.target.generateCode());const n=e.join("\n ");if(this.isDebug){const t=`[Owl Debug]\n${n}`;console.log(t)}return n}compileInNewTarget(t,e,n,o){const r=on(t),s=this.target,i=new an(r,o);return this.targets.push(i),this.target=i,this.compileAST(e,ln(n)),this.target=s,r}addLine(t,e){this.target.addLine(t,e)}define(t,e){this.addLine(`const ${t} = ${e};`)}insertAnchor(t,e=t.children.length){const n=`block-child-${e}`,o=tn.createElement(n);t.insert(o)}createBlock(t,e,n){const o=this.target.hasRoot,r=new sn(this.target,e);return o||(this.target.hasRoot=!0,r.isRoot=!0),t&&(t.children.push(r),"list"===t.type&&(r.parentVar=`c_block${t.id}`)),r}insertBlock(t,e,n){let o=e.generateExpr(t);if(e.parentVar){let t=this.target.currentKey(n);return this.helpers.add("withKey"),void this.addLine(`${e.parentVar}[${n.index}] = withKey(${o}, ${t});`)}n.tKeyExpr&&(o=`toggler(${n.tKeyExpr}, ${o})`),e.isRoot?(this.target.on&&(o=this.wrapWithEventCatcher(o,this.target.on)),this.addLine(`return ${o};`)):this.define(e.varName,o)}captureExpression(t,e=!1){if(!e&&!t.includes("=>"))return Xe(t);const n=qe(t),o=new Map;return n.map((t=>{if(t.varName&&!t.isLocal){if(!o.has(t.varName)){const e=on("v");o.set(t.varName,e),this.define(e,t.value)}t.value=o.get(t.varName)}return t.value})).join("")}translate(t){const e=hn.exec(t);return e[1]+this.translateFn(e[2])+e[3]}compileAST(t,e){switch(t.type){case 1:return this.compileComment(t,e);case 0:return this.compileText(t,e);case 2:return this.compileTDomNode(t,e);case 4:return this.compileTEsc(t,e);case 8:return this.compileTOut(t,e);case 5:return this.compileTIf(t,e);case 9:return this.compileTForeach(t,e);case 10:return this.compileTKey(t,e);case 3:return this.compileMulti(t,e);case 7:return this.compileTCall(t,e);case 15:return this.compileTCallBlock(t,e);case 6:return this.compileTSet(t,e);case 11:return this.compileComponent(t,e);case 12:return this.compileDebug(t,e);case 13:return this.compileLog(t,e);case 14:return this.compileTSlot(t,e);case 16:return this.compileTTranslation(t,e);case 17:return this.compileTPortal(t,e)}}compileDebug(t,e){return this.addLine("debugger;"),t.content?this.compileAST(t.content,e):null}compileLog(t,e){return this.addLine(`console.log(${Xe(t.expr)});`),t.content?this.compileAST(t.content,e):null}compileComment(t,e){let{block:n,forceNewBlock:o}=e;if(!n||o)n=this.createBlock(n,"comment",e),this.insertBlock(`comment(\`${t.value}\`)`,n,{...e,forceNewBlock:o&&!n});else{const e=tn.createComment(t.value);n.insert(e)}return n.varName}compileText(t,e){let{block:n,forceNewBlock:o}=e,r=t.value;if(r&&!1!==e.translate&&(r=this.translate(r)),e.inPreTag||(r=r.replace(Qe," ")),!n||o)n=this.createBlock(n,"text",e),this.insertBlock(`text(\`${r}\`)`,n,{...e,forceNewBlock:o&&!n});else{const e=0===t.type?tn.createTextNode:tn.createComment;n.insert(e.call(tn,r))}return n.varName}generateHandlerCode(t,e){const n=t.split(".").slice(1).map((t=>{if(!en.has(t))throw new s(`Unknown event modifier: '${t}'`);return`"${t}"`}));let o="";return n.length&&(o=`${n.join(",")}, `),`[${o}${this.captureExpression(e)}, ctx]`}compileTDomNode(t,e){let{block:n,forceNewBlock:o}=e;const r=!n||o||null!==t.dynamicTag||t.ns;let s=this.target.code.length;if(r&&((t.dynamicTag||e.tKeyExpr||t.ns)&&e.block&&this.insertAnchor(e.block),n=this.createBlock(n,"block",e),this.blocks.push(n),t.dynamicTag)){const e=on("tag");this.define(e,Xe(t.dynamicTag)),n.dynamicTagName=e}const i={};for(let o in t.attrs){let r,s;if(o.startsWith("t-attf")){r=Je(t.attrs[o]);const e=n.insertData(r,"attr");s=o.slice(7),i["block-attribute-"+e]=s}else if(o.startsWith("t-att"))if(s="t-att"===o?null:o.slice(6),r=Xe(t.attrs[o]),s&&rn(t.tag,s)){"readonly"===s&&(s="readOnly"),r="value"===s?`new String((${r}) === 0 ? 0 : ((${r}) || ""))`:`new Boolean(${r})`;i[`block-property-${n.insertData(r,"prop")}`]=s}else{const t=n.insertData(r,"attr");"t-att"===o?i["block-attributes"]=String(t):i[`block-attribute-${t}`]=s}else this.translatableAttributes.includes(o)?i[o]=this.translateFn(t.attrs[o]):(r=`"${t.attrs[o]}"`,s=o,i[o]=t.attrs[o]);if("value"===s&&e.tModelSelectedExpr){i[`block-attribute-${n.insertData(`${e.tModelSelectedExpr} === ${r}`,"attr")}`]="selected"}}let l;if(t.model){const{hasDynamicChildren:e,baseExpr:o,expr:r,eventType:s,shouldNumberize:a,shouldTrim:c,targetAttr:h,specialInitTargetAttr:u}=t.model,d=Xe(o),f=on("bExpr");this.define(f,d);const p=Xe(r),m=on("expr");this.define(m,p);const g=`${f}[${m}]`;let b;if(u){let e=h in i&&`'${i[h]}'`;if(!e&&t.attrs){const n=t.attrs[`t-att-${h}`];n&&(e=Xe(n))}b=n.insertData(`${g} === ${e}`,"prop"),i[`block-property-${b}`]=u}else if(e){l=`${on("bValue")}`,this.define(l,g)}else b=n.insertData(`${g}`,"prop"),i[`block-property-${b}`]=h;this.helpers.add("toNumber");let y=`ev.target.${h}`;y=c?`${y}.trim()`:y,y=a?`toNumber(${y})`:y;const v=`[(ev) => { ${g} = ${y}; }]`;b=n.insertData(v,"hdlr"),i[`block-handler-${b}`]=s}for(let e in t.on){const o=this.generateHandlerCode(e,t.on[e]);i[`block-handler-${n.insertData(o,"hdlr")}`]=e}if(t.ref){this.dev&&(this.helpers.add("makeRefWrapper"),this.target.hasRefWrapper=!0);const e=Ye.test(t.ref);let o=`\`${t.ref}\``;e&&(o=Ze(t.ref,(t=>this.captureExpression(t,!0))));let r=`(el) => this.__owl__.setRef((${o}), el)`;this.dev&&(r=`refWrapper(${o}, ${r})`);const s=n.insertData(r,"ref");i["block-ref"]=String(s)}const a=t.ns||e.nameSpace,c=a?tn.createElementNS(a,t.tag):tn.createElement(t.tag);for(const[t,e]of Object.entries(i))"class"===t&&""===e||c.setAttribute(t,e);if(n.insert(c),t.content.length){const o=n.currentDom;n.currentDom=c;const r=t.content;for(let o=0;o<r.length;o++){const s=t.content[o],i=ln(e,{block:n,index:n.childNumber,forceNewBlock:!1,isLast:e.isLast&&o===r.length-1,tKeyExpr:e.tKeyExpr,nameSpace:a,tModelSelectedExpr:l,inPreTag:e.inPreTag||"pre"===t.tag});this.compileAST(s,i)}n.currentDom=o}if(r&&(this.insertBlock(`${n.blockName}(ddd)`,n,e),n.children.length&&n.hasDynamicChildren)){const t=this.target.code,e=n.children.slice();let o=e.shift();for(let n=s;n<t.length&&(!t[n].trimStart().startsWith(`const ${o.varName} `)||(t[n]=t[n].replace(`const ${o.varName}`,o.varName),o=e.shift(),o));n++);this.addLine(`let ${n.children.map((t=>t.varName)).join(", ")};`,s)}return n.varName}compileTEsc(t,e){let n,{block:o,forceNewBlock:r}=e;if("0"===t.expr?(this.helpers.add("zero"),n="ctx[zero]"):(n=Xe(t.expr),t.defaultValue&&(this.helpers.add("withDefault"),n=`withDefault(${n}, \`${t.defaultValue}\`)`)),!o||r)o=this.createBlock(o,"text",e),this.insertBlock(`text(${n})`,o,{...e,forceNewBlock:r&&!o});else{const t=o.insertData(n,"txt"),e=tn.createElement(`block-text-${t}`);o.insert(e)}return o.varName}compileTOut(t,e){let n,{block:o}=e;if(o&&this.insertAnchor(o),o=this.createBlock(o,"html",e),"0"===t.expr)this.helpers.add("zero"),n="ctx[zero]";else if(t.body){let o=null;o=sn.nextBlockId;const r=ln(e);this.compileAST({type:3,content:t.body},r),this.helpers.add("safeOutput"),n=`safeOutput(${Xe(t.expr)}, b${o})`}else this.helpers.add("safeOutput"),n=`safeOutput(${Xe(t.expr)})`;return this.insertBlock(n,o,e),o.varName}compileTIfBranch(t,e,n){this.target.indentLevel++;let o=e.children.length;this.compileAST(t,ln(n,{block:e,index:n.index})),e.children.length>o&&this.insertAnchor(e,o),this.target.indentLevel--}compileTIf(t,e,n){let{block:o,forceNewBlock:r}=e;const s=this.target.code.length,i=!o||"multi"!==o.type&&r;if(o&&(o.hasDynamicChildren=!0),(!o||"multi"!==o.type&&r)&&(o=this.createBlock(o,"multi",e)),this.addLine(`if (${Xe(t.condition)}) {`),this.compileTIfBranch(t.content,o,e),t.tElif)for(let n of t.tElif)this.addLine(`} else if (${Xe(n.condition)}) {`),this.compileTIfBranch(n.content,o,e);if(t.tElse&&(this.addLine("} else {"),this.compileTIfBranch(t.tElse,o,e)),this.addLine("}"),i){if(o.children.length){const t=this.target.code,e=o.children.slice();let n=e.shift();for(let o=s;o<t.length&&(!t[o].trimStart().startsWith(`const ${n.varName} `)||(t[o]=t[o].replace(`const ${n.varName}`,n.varName),n=e.shift(),n));o++);this.addLine(`let ${o.children.map((t=>t.varName)).join(", ")};`,s)}const t=o.children.map((t=>t.varName)).join(", ");this.insertBlock(`multi([${t}])`,o,e)}return o.varName}compileTForeach(t,e){let{block:n}=e;n&&this.insertAnchor(n),n=this.createBlock(n,"list",e),this.target.loopLevel++;const o=`i${this.target.loopLevel}`;this.addLine("ctx = Object.create(ctx);");const r=`v_block${n.id}`,s=`k_block${n.id}`,i=`l_block${n.id}`,l=`c_block${n.id}`;let a;this.helpers.add("prepareList"),this.define(`[${s}, ${r}, ${i}, ${l}]`,`prepareList(${Xe(t.collection)});`),this.dev&&this.define(`keys${n.id}`,"new Set()"),this.addLine(`for (let ${o} = 0; ${o} < ${i}; ${o}++) {`),this.target.indentLevel++,this.addLine(`ctx[\`${t.elem}\`] = ${s}[${o}];`),t.hasNoFirst||this.addLine(`ctx[\`${t.elem}_first\`] = ${o} === 0;`),t.hasNoLast||this.addLine(`ctx[\`${t.elem}_last\`] = ${o} === ${s}.length - 1;`),t.hasNoIndex||this.addLine(`ctx[\`${t.elem}_index\`] = ${o};`),t.hasNoValue||this.addLine(`ctx[\`${t.elem}_value\`] = ${r}[${o}];`),this.define(`key${this.target.loopLevel}`,t.key?Xe(t.key):o),this.dev&&(this.helpers.add("OwlError"),this.addLine(`if (keys${n.id}.has(String(key${this.target.loopLevel}))) { throw new OwlError(\`Got duplicate key in t-foreach: \${key${this.target.loopLevel}}\`)}`),this.addLine(`keys${n.id}.add(String(key${this.target.loopLevel}));`)),t.memo&&(this.target.hasCache=!0,a=on(),this.define(`memo${a}`,Xe(t.memo)),this.define(`vnode${a}`,`cache[key${this.target.loopLevel}];`),this.addLine(`if (vnode${a}) {`),this.target.indentLevel++,this.addLine(`if (shallowEqual(vnode${a}.memo, memo${a})) {`),this.target.indentLevel++,this.addLine(`${l}[${o}] = vnode${a};`),this.addLine(`nextCache[key${this.target.loopLevel}] = vnode${a};`),this.addLine("continue;"),this.target.indentLevel--,this.addLine("}"),this.target.indentLevel--,this.addLine("}"));const c=ln(e,{block:n,index:o});return this.compileAST(t.body,c),t.memo&&this.addLine(`nextCache[key${this.target.loopLevel}] = Object.assign(${l}[${o}], {memo: memo${a}});`),this.target.indentLevel--,this.target.loopLevel--,this.addLine("}"),e.isLast||this.addLine("ctx = ctx.__proto__;"),this.insertBlock("l",n,e),n.varName}compileTKey(t,e){const n=on("tKey_");return this.define(n,Xe(t.expr)),e=ln(e,{tKeyExpr:n,block:e.block,index:e.index}),this.compileAST(t.content,e)}compileMulti(t,e){let{block:n,forceNewBlock:o}=e;const r=!n||o;let s=this.target.code.length;if(r){let o=null;if(t.content.filter((t=>6!==t.type)).length<=1){for(let n of t.content){const t=this.compileAST(n,e);o=o||t}return o}n=this.createBlock(n,"multi",e)}let i=0;for(let o=0,r=t.content.length;o<r;o++){const s=t.content[o],l=6===s.type,a=ln(e,{block:n,index:i,forceNewBlock:!l,isLast:e.isLast&&o===r-1});this.compileAST(s,a),l||i++}if(r){if(n.hasDynamicChildren&&n.children.length){const t=this.target.code,e=n.children.slice();let o=e.shift();for(let n=s;n<t.length&&(!t[n].trimStart().startsWith(`const ${o.varName} `)||(t[n]=t[n].replace(`const ${o.varName}`,o.varName),o=e.shift(),o));n++);this.addLine(`let ${n.children.map((t=>t.varName)).join(", ")};`,s)}const t=n.children.map((t=>t.varName)).join(", ");this.insertBlock(`multi([${t}])`,n,e)}return n.varName}compileTCall(t,e){let{block:n,forceNewBlock:o}=e,r=e.ctxVar||"ctx";t.context&&(r=on("ctx"),this.addLine(`let ${r} = ${Xe(t.context)};`));const s=Ye.test(t.name),i=s?Je(t.name):"`"+t.name+"`";if(n&&!o&&this.insertAnchor(n),n=this.createBlock(n,"multi",e),t.body){this.addLine(`${r} = Object.create(${r});`),this.addLine(`${r}[isBoundary] = 1;`),this.helpers.add("isBoundary");const n=ln(e,{ctxVar:r}),o=this.compileMulti({type:3,content:t.body},n);o&&(this.helpers.add("zero"),this.addLine(`${r}[zero] = ${o};`))}const l=`key + \`${this.generateComponentKey()}\``;if(s){const t=on("template");this.staticDefs.find((t=>"call"===t.id))||this.staticDefs.push({id:"call",expr:"app.callTemplate.bind(app)"}),this.define(t,i),this.insertBlock(`call(this, ${t}, ${r}, node, ${l})`,n,{...e,forceNewBlock:!n})}else{const t=on("callTemplate_");this.staticDefs.push({id:t,expr:`app.getTemplate(${i})`}),this.insertBlock(`${t}.call(this, ${r}, node, ${l})`,n,{...e,forceNewBlock:!n})}return t.body&&!e.isLast&&this.addLine(`${r} = ${r}.__proto__;`),n.varName}compileTCallBlock(t,e){let{block:n,forceNewBlock:o}=e;return n&&(o||this.insertAnchor(n)),n=this.createBlock(n,"multi",e),this.insertBlock(Xe(t.name),n,{...e,forceNewBlock:!n}),n.varName}compileTSet(t,e){this.target.shouldProtectScope=!0,this.helpers.add("isBoundary").add("withDefault");const n=t.value?Xe(t.value||""):"null";if(t.body){this.helpers.add("LazyValue");const o={type:3,content:t.body};let r=`new LazyValue(${this.compileInNewTarget("value",o,e)}, ctx, this, node, ${this.target.currentKey(e)})`;r=t.value?r?`withDefault(${n}, ${r})`:n:r,this.addLine(`ctx[\`${t.name}\`] = ${r};`)}else{let o;if(t.defaultValue){const r=e.translate?this.translate(t.defaultValue):t.defaultValue;o=t.value?`withDefault(${n}, \`${r}\`)`:`\`${r}\``}else o=n;this.helpers.add("setContextValue"),this.addLine(`setContextValue(${e.ctxVar||"ctx"}, "${t.name}", ${o});`)}return null}generateComponentKey(){const t=[on("__")];for(let e=0;e<this.target.loopLevel;e++)t.push(`\${key${e+1}}`);return t.join("__")}formatProp(t,e){if(e=this.captureExpression(e),t.includes(".")){let[n,o]=t.split(".");switch(t=n,o){case"bind":e=`(${e}).bind(this)`;break;case"alike":break;default:throw new s("Invalid prop suffix")}}return`${t=/^[a-z_]+$/i.test(t)?t:`'${t}'`}: ${e||void 0}`}formatPropObject(t){return Object.entries(t).map((([t,e])=>this.formatProp(t,e)))}getPropString(t,e){let n=`{${t.join(",")}}`;return e&&(n=`Object.assign({}, ${Xe(e)}${t.length?", "+n:""})`),n}compileComponent(t,e){let{block:n}=e;const o="slots"in(t.props||{}),r=t.props?this.formatPropObject(t.props):[];let s="";if(t.slots){let n="ctx";!this.target.loopLevel&&this.hasSafeContext||(n=on("ctx"),this.helpers.add("capture"),this.define(n,"capture(ctx)"));let o=[];for(let r in t.slots){const s=t.slots[r],i=[];if(s.content){const t=this.compileInNewTarget("slot",s.content,e,s.on);i.push(`__render: ${t}.bind(this), __ctx: ${n}`)}const l=t.slots[r].scope;l&&i.push(`__scope: "${l}"`),t.slots[r].attrs&&i.push(...this.formatPropObject(t.slots[r].attrs));const a=`{${i.join(", ")}}`;o.push(`'${r}': ${a}`)}s=`{${o.join(", ")}}`}!s||t.dynamicProps||o||(this.helpers.add("markRaw"),r.push(`slots: markRaw(${s})`));let i,l=this.getPropString(r,t.dynamicProps);(s&&(t.dynamicProps||o)||this.dev)&&(i=on("props"),this.define(i,l),l=i),s&&(t.dynamicProps||o)&&(this.helpers.add("markRaw"),this.addLine(`${i}.slots = markRaw(Object.assign(${s}, ${i}.slots))`));const a=this.generateComponentKey();let c;t.isDynamic?(c=on("Comp"),this.define(c,Xe(t.name))):c=`\`${t.name}\``,this.dev&&this.addLine(`helpers.validateProps(${c}, ${i}, this);`),n&&(!1===e.forceNewBlock||e.tKeyExpr)&&this.insertAnchor(n);let h=`key + \`${a}\``;e.tKeyExpr&&(h=`${e.tKeyExpr} + ${h}`);let u=on("comp");const d=[];for(let e in t.props||{}){let[t,n]=e.split(".");n||d.push(`"${t}"`)}this.staticDefs.push({id:u,expr:`app.createComponent(${t.isDynamic?null:c}, ${!t.isDynamic}, ${!!t.slots}, ${!!t.dynamicProps}, [${d}])`}),t.isDynamic&&(h=`(${c}).name + ${h}`);let f=`${u}(${l}, ${h}, node, this, ${t.isDynamic?c:null})`;return t.isDynamic&&(f=`toggler(${c}, ${f})`),t.on&&(f=this.wrapWithEventCatcher(f,t.on)),n=this.createBlock(n,"multi",e),this.insertBlock(f,n,e),n.varName}wrapWithEventCatcher(t,e){this.helpers.add("createCatcher");let n=on("catcher"),o={},r=[];for(let t in e){let n=on("hdlr"),s=r.push(n)-1;o[t]=s;const i=this.generateHandlerCode(t,e[t]);this.define(n,i)}return this.staticDefs.push({id:n,expr:`createCatcher(${JSON.stringify(o)})`}),`${n}(${t}, [${r.join(",")}])`}compileTSlot(t,e){this.helpers.add("callSlot");let n,o,{block:r}=e,s=!1,i=!1;t.name.match(Ye)?(s=!0,i=!0,o=Je(t.name)):(o="'"+t.name+"'",i=i||this.slotNames.has(t.name),this.slotNames.add(t.name));const l=t.attrs?t.attrs["t-props"]:null;t.attrs&&delete t.attrs["t-props"];let a=this.target.loopLevel?`key${this.target.loopLevel}`:"key";i&&(a=`${a} + \`${this.generateComponentKey()}\``);const c=t.attrs?this.formatPropObject(t.attrs):[],h=this.getPropString(c,l);if(t.defaultContent){n=`callSlot(ctx, node, ${a}, ${o}, ${s}, ${h}, ${this.compileInNewTarget("defaultContent",t.defaultContent,e)}.bind(this))`}else if(s){let t=on("slot");this.define(t,o),n=`toggler(${t}, callSlot(ctx, node, ${a}, ${t}, ${s}, ${h}))`}else n=`callSlot(ctx, node, ${a}, ${o}, ${s}, ${h})`;return t.on&&(n=this.wrapWithEventCatcher(n,t.on)),r&&this.insertAnchor(r),r=this.createBlock(r,"multi",e),this.insertBlock(n,r,{...e,forceNewBlock:!1}),r.varName}compileTTranslation(t,e){return t.content?this.compileAST(t.content,Object.assign({},e,{translate:!1})):null}compileTPortal(t,e){this.staticDefs.find((t=>"Portal"===t.id))||this.staticDefs.push({id:"Portal",expr:"app.Portal"});let{block:n}=e;const o=this.compileInNewTarget("slot",t.content,e),r=this.generateComponentKey();let s="ctx";!this.target.loopLevel&&this.hasSafeContext||(s=on("ctx"),this.helpers.add("capture"),this.define(s,"capture(ctx)"));let i=on("comp");this.staticDefs.push({id:i,expr:"app.createComponent(null, false, true, false, false)"});const l=`${i}({target: ${Xe(t.target)},slots: {'default': {__render: ${o}.bind(this), __ctx: ${s}}}}, key + \`${r}\`, node, ctx, Portal)`;return n&&this.insertAnchor(n),n=this.createBlock(n,"multi",e),this.insertBlock(l,n,{...e,forceNewBlock:!1}),n.varName}}const dn=new WeakMap;function fn(t){if("string"==typeof t){const e=function(t){const e=(new DOMParser).parseFromString(t,"text/xml");if(e.getElementsByTagName("parsererror").length){let n="Invalid XML in template.";const o=e.getElementsByTagName("parsererror")[0].textContent;if(o){n+="\nThe parser has produced the following error message:\n"+o;const e=/\d+/g,r=e.exec(o);if(r){const s=Number(r[0]),i=t.split("\n")[s-1],l=e.exec(o);if(i&&l){const t=Number(l[0])-1;i[t]&&(n+=`\nThe error might be located at xml line ${s} column ${t}\n${i}\n${"-".repeat(t-1)}^`)}}}throw new s(n)}return e}(`<t>${t}</t>`).firstChild;return pn(e)}let e=dn.get(t);return e||(e=pn(t.cloneNode(!0)),dn.set(t,e)),e}function pn(t){var e;(function(t){let e=t.querySelectorAll("[t-elif], [t-else]");for(let t=0,n=e.length;t<n;t++){let n=e[t],o=n.previousElementSibling,r=t=>o.getAttribute(t),i=t=>+!!n.getAttribute(t);if(!o||!r("t-if")&&!r("t-elif"))throw new s("t-elif and t-else directives must be preceded by a t-if or t-elif directive");{if(r("t-foreach"))throw new s("t-if cannot stay at the same level as t-foreach when using t-elif or t-else");if(["t-if","t-elif","t-else"].map(i).reduce((function(t,e){return t+e}))>1)throw new s("Only one conditional branching directive is allowed per node");let t;for(;(t=n.previousSibling)!==o;){if(t.nodeValue.trim().length&&8!==t.nodeType)throw new s("text is not allowed between branching directives");t.remove()}}}})(e=t),function(t){for(const e of["t-esc","t-out"]){const n=[...t.querySelectorAll(`[${e}]`)].filter((t=>t.tagName[0]===t.tagName[0].toUpperCase()||t.hasAttribute("t-component")));for(const t of n){if(t.childNodes.length)throw new s(`Cannot have ${e} on a component that already has content`);const n=t.getAttribute(e);t.removeAttribute(e);const o=t.ownerDocument.createElement("t");null!=n&&o.setAttribute(e,n),t.appendChild(o)}}}(e);return mn(t,{inPreTag:!1})||{type:0,value:""}}function mn(t,e){return t instanceof Element?function(t,e){if(t.hasAttribute("t-debug"))return t.removeAttribute("t-debug"),{type:12,content:mn(t,e)};if(t.hasAttribute("t-log")){const n=t.getAttribute("t-log");return t.removeAttribute("t-log"),{type:13,expr:n,content:mn(t,e)}}return null}(t,e)||function(t,e){if(!t.hasAttribute("t-foreach"))return null;const n=t.outerHTML,o=t.getAttribute("t-foreach");t.removeAttribute("t-foreach");const r=t.getAttribute("t-as")||"";t.removeAttribute("t-as");const i=t.getAttribute("t-key");if(!i)throw new s(`"Directive t-foreach should always be used with a t-key!" (expression: t-foreach="${o}" t-as="${r}")`);t.removeAttribute("t-key");const l=t.getAttribute("t-memo")||"";t.removeAttribute("t-memo");const a=mn(t,e);if(!a)return null;const c=!n.includes("t-call"),h=c&&!n.includes(`${r}_first`),u=c&&!n.includes(`${r}_last`),d=c&&!n.includes(`${r}_index`),f=c&&!n.includes(`${r}_value`);return{type:9,collection:o,elem:r,body:a,memo:l,key:i,hasNoFirst:h,hasNoLast:u,hasNoIndex:d,hasNoValue:f}}(t,e)||function(t,e){if(!t.hasAttribute("t-if"))return null;const n=t.getAttribute("t-if");t.removeAttribute("t-if");const o=mn(t,e)||{type:0,value:""};let r=t.nextElementSibling;const s=[];for(;r&&r.hasAttribute("t-elif");){const t=r.getAttribute("t-elif");r.removeAttribute("t-elif");const n=mn(r,e),o=r.nextElementSibling;r.remove(),r=o,n&&s.push({condition:t,content:n})}let i=null;r&&r.hasAttribute("t-else")&&(r.removeAttribute("t-else"),i=mn(r,e),r.remove());return{type:5,condition:n,content:o,tElif:s.length?s:null,tElse:i}}(t,e)||function(t,e){if(!t.hasAttribute("t-portal"))return null;const n=t.getAttribute("t-portal");t.removeAttribute("t-portal");const o=mn(t,e);if(!o)return{type:0,value:""};return{type:17,target:n,content:o}}(t,e)||function(t,e){if(!t.hasAttribute("t-call"))return null;const n=t.getAttribute("t-call"),o=t.getAttribute("t-call-context");if(t.removeAttribute("t-call"),t.removeAttribute("t-call-context"),"t"!==t.tagName){const r=mn(t,e),s={type:7,name:n,body:null,context:o};if(r&&2===r.type)return r.content=[s],r;if(r&&11===r.type)return{...r,slots:{default:{content:s,scope:null,on:null,attrs:null}}}}const r=$n(t,e);return{type:7,name:n,body:r.length?r:null,context:o}}(t,e)||function(t,e){if(!t.hasAttribute("t-call-block"))return null;const n=t.getAttribute("t-call-block");return{type:15,name:n}}(t)||function(t,e){if(!t.hasAttribute("t-esc"))return null;const n=t.getAttribute("t-esc");t.removeAttribute("t-esc");const o={type:4,expr:n,defaultValue:t.textContent||""};let r=t.getAttribute("t-ref");t.removeAttribute("t-ref");const s=mn(t,e);if(!s)return o;if(2===s.type)return{...s,ref:r,content:[o]};return o}(t,e)||function(t,e){if(!t.hasAttribute("t-out")&&!t.hasAttribute("t-raw"))return null;t.hasAttribute("t-raw")&&console.warn('t-raw has been deprecated in favor of t-out. If the value to render is not wrapped by the "markup" function, it will be escaped');const n=t.getAttribute("t-out")||t.getAttribute("t-raw");t.removeAttribute("t-out"),t.removeAttribute("t-raw");const o={type:8,expr:n,body:null},r=t.getAttribute("t-ref");t.removeAttribute("t-ref");const s=mn(t,e);if(!s)return o;if(2===s.type)return o.body=s.content.length?s.content:null,{...s,ref:r,content:[o]};return o}(t,e)||function(t,e){if(!t.hasAttribute("t-key"))return null;const n=t.getAttribute("t-key");t.removeAttribute("t-key");const o=mn(t,e);if(!o)return null;return{type:10,expr:n,content:o}}(t,e)||function(t,e){if("off"!==t.getAttribute("t-translation"))return null;return t.removeAttribute("t-translation"),{type:16,content:mn(t,e)}}(t,e)||function(t,e){if(!t.hasAttribute("t-slot"))return null;const n=t.getAttribute("t-slot");t.removeAttribute("t-slot");let o=null,r=null;for(let e of t.getAttributeNames()){const n=t.getAttribute(e);e.startsWith("t-on-")?(r=r||{},r[e.slice(5)]=n):(o=o||{},o[e]=n)}return{type:14,name:n,attrs:o,on:r,defaultContent:xn(t,e)}}(t,e)||function(t,e){let n=t.tagName;const o=n[0];let r=t.hasAttribute("t-component");if(r&&"t"!==n)throw new s(`Directive 't-component' can only be used on <t> nodes (used on a <${n}>)`);if(o!==o.toUpperCase()&&!r)return null;r&&(n=t.getAttribute("t-component"),t.removeAttribute("t-component"));const i=t.getAttribute("t-props");t.removeAttribute("t-props");const l=t.getAttribute("t-slot-scope");t.removeAttribute("t-slot-scope");let a=null,c=null;for(let e of t.getAttributeNames()){const n=t.getAttribute(e);if(e.startsWith("t-")){if(!e.startsWith("t-on-")){const t=wn.get(e.split("-").slice(0,2).join("-"));throw new s(t||`unsupported directive on Component: ${e}`)}a=a||{},a[e.slice(5)]=n}else c=c||{},c[e]=n}let h=null;if(t.hasChildNodes()){const n=t.cloneNode(!0),o=Array.from(n.querySelectorAll("[t-set-slot]"));for(let t of o){if("t"!==t.tagName)throw new s(`Directive 't-set-slot' can only be used on <t> nodes (used on a <${t.tagName}>)`);const o=t.getAttribute("t-set-slot");let r=t.parentElement,i=!1;for(;r!==n;){if(r.hasAttribute("t-component")||r.tagName[0]===r.tagName[0].toUpperCase()){i=!0;break}r=r.parentElement}if(i)continue;t.removeAttribute("t-set-slot"),t.remove();const l=mn(t,e);let a=null,c=null,u=null;for(let e of t.getAttributeNames()){const n=t.getAttribute(e);"t-slot-scope"!==e?e.startsWith("t-on-")?(a=a||{},a[e.slice(5)]=n):(c=c||{},c[e]=n):u=n}h=h||{},h[o]={content:l,on:a,attrs:c,scope:u}}const r=xn(n,e);h=h||{},r&&!h.default&&(h.default={content:r,on:a,attrs:null,scope:l})}return{type:11,name:n,isDynamic:r,dynamicProps:i,props:c,slots:h,on:a}}(t,e)||function(t,e){const{tagName:n}=t,o=t.getAttribute("t-tag");if(t.removeAttribute("t-tag"),"t"===n&&!o)return null;if(n.startsWith("block-"))throw new s(`Invalid tag name: '${n}'`);e=Object.assign({},e),"pre"===n&&(e.inPreTag=!0);let r=!e.nameSpace&&vn.has(n)?"http://www.w3.org/2000/svg":null;const i=t.getAttribute("t-ref");t.removeAttribute("t-ref");const l=t.getAttributeNames();let a=null,c=null,h=null;for(let o of l){const i=t.getAttribute(o);if("t-on"===o||"t-on-"===o)throw new s("Missing event name with t-on directive");if(o.startsWith("t-on-"))c=c||{},c[o.slice(5)]=i;else if(o.startsWith("t-model")){if(!["input","select","textarea"].includes(n))throw new s("The t-model directive only works with <input>, <textarea> and <select>");let r,l;if(bn.test(i)){const t=i.lastIndexOf(".");r=i.slice(0,t),l=`'${i.slice(t+1)}'`}else{if(!yn.test(i))throw new s(`Invalid t-model expression: "${i}" (it should be assignable)`);{const t=i.lastIndexOf("[");r=i.slice(0,t),l=i.slice(t+1,-1)}}const a=t.getAttribute("type"),c="input"===n,u="select"===n,d=c&&"checkbox"===a,f=c&&"radio"===a,p=o.includes(".lazy"),m=o.includes(".number");h={baseExpr:r,expr:l,targetAttr:d?"checked":"value",specialInitTargetAttr:f?"checked":null,eventType:f?"click":u||p?"change":"input",hasDynamicChildren:!1,shouldTrim:o.includes(".trim"),shouldNumberize:m},u&&((e=Object.assign({},e)).tModelInfo=h)}else{if(o.startsWith("block-"))throw new s(`Invalid attribute: '${o}'`);if("xmlns"===o)r=i;else if("t-name"!==o){if(o.startsWith("t-")&&!o.startsWith("t-att"))throw new s(`Unknown QWeb directive: '${o}'`);const t=e.tModelInfo;t&&["t-att-value","t-attf-value"].includes(o)&&(t.hasDynamicChildren=!0),a=a||{},a[o]=i}}}r&&(e.nameSpace=r);const u=$n(t,e);return{type:2,tag:n,dynamicTag:o,attrs:a,on:c,ref:i,content:u,model:h,ns:r}}(t,e)||function(t,e){if(!t.hasAttribute("t-set"))return null;const n=t.getAttribute("t-set"),o=t.getAttribute("t-value")||null,r=t.innerHTML===t.textContent&&t.textContent||null;let s=null;t.textContent!==t.innerHTML&&(s=$n(t,e));return{type:6,name:n,value:o,defaultValue:r,body:s}}(t,e)||function(t,e){if("t"!==t.tagName)return null;return xn(t,e)}(t,e):function(t,e){if(t.nodeType===Node.TEXT_NODE){let n=t.textContent||"";return e.inPreTag||!gn.test(n)||n.trim()?{type:0,value:n}:null}if(t.nodeType===Node.COMMENT_NODE)return{type:1,value:t.textContent||""};return null}(t,e)}const gn=/[\r\n]/;const bn=/\.[\w_]+\s*$/,yn=/\[[^\[]+\]\s*$/,vn=new Set(["svg","g","path"]);const wn=new Map([["t-ref","t-ref is no longer supported on components. Consider exposing only the public part of the component's API through a callback prop."],["t-att","t-att makes no sense on component: props are already treated as expressions"],["t-attf","t-attf is not supported on components: use template strings for string interpolation in props"]]);function $n(t,e){const n=[];for(let o of t.childNodes){const t=mn(o,e);t&&(3===t.type?n.push(...t.content):n.push(t))}return n}function xn(t,e){const n=$n(t,e);switch(n.length){case 0:return null;case 1:return n[0];default:return{type:3,content:n}}}class Nn{constructor(){this.tasks=new Set,this.frame=0,this.delayedRenders=[],this.cancelledNodes=new Set,this.requestAnimationFrame=Nn.requestAnimationFrame}addFiber(t){this.tasks.add(t.root)}scheduleDestroy(t){this.cancelledNodes.add(t),0===this.frame&&(this.frame=this.requestAnimationFrame((()=>this.processTasks())))}flush(){if(this.delayedRenders.length){let t=this.delayedRenders;this.delayedRenders=[];for(let e of t)e.root&&3!==e.node.status&&e.node.fiber===e&&e.render()}0===this.frame&&(this.frame=this.requestAnimationFrame((()=>this.processTasks())))}processTasks(){this.frame=0;for(let t of this.cancelledNodes)t._destroy();this.cancelledNodes.clear();for(let t of this.tasks)this.processFiber(t);for(let t of this.tasks)3===t.node.status&&this.tasks.delete(t)}processFiber(t){if(t.root!==t)return void this.tasks.delete(t);const e=Et.has(t);e&&0!==t.counter?this.tasks.delete(t):3!==t.node.status?0===t.counter&&(e||t.complete(),this.tasks.delete(t)):this.tasks.delete(t)}}Nn.requestAnimationFrame=window.requestAnimationFrame.bind(window);let kn=!1;const En=new Set;window.__OWL_DEVTOOLS__||(window.__OWL_DEVTOOLS__={apps:En,Fiber:Ot,RootFiber:Dt,toRaw:Ht,reactive:Qt});class An extends je{constructor(t,e={}){super(e),this.scheduler=new Nn,this.root=null,this.name=e.name||"",this.Root=t,En.add(this),e.test&&(this.dev=!0),this.warnIfNoStaticProps=e.warnIfNoStaticProps||!1,!this.dev||e.test||kn||(console.info(`Owl is running in 'dev' mode.\n\nThis is not suitable for production use.\nSee https://github.com/odoo/owl/blob/${window.owl?window.owl.__info__.hash:"master"}/doc/reference/app.md#configuration for more information.`),kn=!0);const n=e.env||{},o=Object.getOwnPropertyDescriptors(n);this.env=Object.freeze(Object.create(Object.getPrototypeOf(n),o)),this.props=e.props||{}}mount(t,e){An.validateTarget(t),this.dev&&Be(this.Root,this.props,{__owl__:{app:this}});const n=this.makeNode(this.Root,this.props),o=this.mountNode(n,t,e);return this.root=n,o}makeNode(t,e){return new de(t,e,this,null,null)}mountNode(t,e,n){const o=new Promise(((e,n)=>{let o=!1;t.mounted.push((()=>{e(t.component),o=!0}));let r=At.get(t);r||(r=[],At.set(t,r)),r.unshift((t=>{throw o||n(t),t}))}));return t.mountComponent(e,n),o}destroy(){this.root&&(this.root.destroy(),this.scheduler.processTasks()),En.delete(this)}createComponent(t,e,n,o,r){const i=!e;let l;const a=0===r.length;l=n?(t,e)=>!0:o?function(t,e){for(let n in t)if(t[n]!==e[n])return!0;return Object.keys(t).length!==Object.keys(e).length}:a?(t,e)=>!1:function(t,e){for(let n of r)if(t[n]!==e[n])return!0;return!1};const c=de.prototype.updateAndRender,h=de.prototype.initiateRender;return(n,o,r,a,u)=>{let d=r.children,f=d[o];i&&f&&f.component.constructor!==u&&(f=void 0);const p=r.fiber;if(f)(l(f.props,n)||p.deep||f.forceNextRender)&&(f.forceNextRender=!1,c.call(f,n,p));else{if(e){const e=a.constructor.components;if(!e)throw new s(`Cannot find the definition of component "${t}", missing static components key in parent`);if(!(u=e[t]))throw new s(`Cannot find the definition of component "${t}"`);if(!(u.prototype instanceof ye))throw new s(`"${t}" is not a Component. It must inherit from the Component class`)}f=new de(u,n,this,r,o),d[o]=f,h.call(f,new Ot(f,p))}return p.childrenMap[o]=f,f}}handleError(...t){return _t(...t)}}An.validateTarget=function(t){const e=t&&t.ownerDocument;if(e){const n=e.defaultView.HTMLElement;if(t instanceof n||t instanceof ShadowRoot){if(!e.body.contains(t instanceof n?t:t.host))throw new s("Cannot mount a component on a detached dom node");return}}throw new s("Cannot mount component: the target is not a valid DOM element")},An.apps=En,An.version="2.2.6";function Tn(t,e){const n=Object.create(t),o=Object.getOwnPropertyDescriptors(e);return Object.freeze(Object.defineProperties(n,o))}function _n(t){const e=ae();e.childEnv=Tn(e.childEnv,t)}n.shouldNormalizeDom=!1,n.mainEventHandler=(t,n,o)=>{const{data:r,modifiers:i}=e(t);t=r;let l=!1;if(i.length){let t=!1;const e=n.target===o;for(const o of i)switch(o){case"self":if(t=!0,e)continue;return l;case"prevent":(t&&e||!t)&&n.preventDefault();continue;case"stop":(t&&e||!t)&&n.stopPropagation(),l=!0;continue}}if(Object.hasOwnProperty.call(t,0)){const e=t[0];if("function"!=typeof e)throw new s(`Invalid handler (expected a function, received: '${e}')`);let o=t[1]?t[1].__owl__:null;o&&1!==o.status||e.call(o?o.component:null,n)}return l};const Sn={config:n,mount:kt,patch:function(t,e,n=!1){t.patch(e,n)},remove:function(t,e=!1){e&&t.beforeRemove(),t.remove()},list:bt,multi:P,text:H,toggler:r,createBlock:ot,html:Nt,comment:U},Cn={version:An.version};je.prototype._compileTemplate=function(t,e){return function(t,e={}){const n=fn(t),o=t instanceof Node?!(t instanceof Element)||null===t.querySelector("[t-set], [t-call]"):!t.includes("t-set")&&!t.includes("t-call"),r=new un(n,{...e,hasSafeContext:o}).generateCode();try{return new Function("app, bdom, helpers",r)}catch(t){const{name:n}=e,o=new s(`Failed to compile ${n?`template "${n}"`:"anonymous template"}: ${t.message}\n\ngenerated code:\nfunction(app, bdom, helpers) {\n${r}\n}`);throw o.cause=t,o}}(e,{name:t,dev:this.dev,translateFn:this.translateFn,translatableAttributes:this.translatableAttributes})},t.App=An,t.Component=ye,t.EventBus=N,t.OwlError=s,t.__info__=Cn,t.blockDom=Sn,t.loadFile=async function(t){const e=await fetch(t);if(!e.ok)throw new s("Error while fetching xml templates");return await e.text()},t.markRaw=zt,t.markup=function(t){return new k(t)},t.mount=async function(t,e,n={}){return new An(t,n).mount(e,n)},t.onError=function(t){const e=ae();let n=At.get(e);n||(n=[],At.set(e,n)),n.push(t.bind(e.component))},t.onMounted=me,t.onPatched=ge,t.onRendered=function(t){const e=ae(),n=e.renderFn,o=e.app.dev?pe:t=>t;t=o(t.bind(e.component),"onRendered"),e.renderFn=()=>{const e=n();return t(),e}},t.onWillDestroy=function(t){const e=ae(),n=e.app.dev?pe:t=>t;e.willDestroy.push(n(t.bind(e.component),"onWillDestroy"))},t.onWillPatch=function(t){const e=ae(),n=e.app.dev?pe:t=>t;e.willPatch.unshift(n(t.bind(e.component),"onWillPatch"))},t.onWillRender=function(t){const e=ae(),n=e.renderFn,o=e.app.dev?pe:t=>t;t=o(t.bind(e.component),"onWillRender"),e.renderFn=()=>(t(),n())},t.onWillStart=function(t){const e=ae(),n=e.app.dev?pe:t=>t;e.willStart.push(n(t.bind(e.component),"onWillStart"))},t.onWillUnmount=be,t.onWillUpdateProps=function(t){const e=ae(),n=e.app.dev?pe:t=>t;e.willUpdateProps.push(n(t.bind(e.component),"onWillUpdateProps"))},t.reactive=Qt,t.status=function(t){switch(t.__owl__.status){case 0:return"new";case 2:return"cancelled";case 1:return"mounted";case 3:return"destroyed"}},t.toRaw=Ht,t.useChildSubEnv=_n,t.useComponent=function(){return le.component},t.useEffect=function(t,e=(()=>[NaN])){let n,o;me((()=>{o=e(),n=t(...o)})),ge((()=>{const r=e();r.some(((t,e)=>t!==o[e]))&&(o=r,n&&n(),n=t(...o))})),be((()=>n&&n()))},t.useEnv=function(){return ae().component.env},t.useExternalListener=function(t,e,n,o){const r=ae(),s=n.bind(r.component);me((()=>t.addEventListener(e,s,o))),be((()=>t.removeEventListener(e,s,o)))},t.useRef=function(t){const e=ae().refs;return{get el(){const n=e[t];return x(n)?n:null}}},t.useState=ue,t.useSubEnv=function(t){const e=ae();e.component.env=Tn(e.component.env,t),_n(t)},t.validate=function(t,e){let n=_e(t,e);if(n.length)throw new s("Invalid object: "+n.join(", "))},t.validateType=Se,t.whenReady=function(t){return new Promise((function(t){"loading"!==document.readyState?t(!0):document.addEventListener("DOMContentLoaded",t,!1)})).then(t||function(){})},t.xml=Ie,Object.defineProperty(t,"__esModule",{value:!0}),Cn.date="2023-09-25T11:48:01.531Z",Cn.hash="752160f",Cn.url="https://github.com/odoo/owl"}(this.owl=this.owl||{});
|
|
1
|
+
!function(t){"use strict";function e(t){t=t.slice();const e=[];let n;for(;(n=t[0])&&"string"==typeof n;)e.push(t.shift());return{modifiers:e,data:t}}const n={shouldNormalizeDom:!0,mainEventHandler:(t,n,o)=>("function"==typeof t?t(n):Array.isArray(t)&&(t=e(t).data)[0](t[1],n),!1)};class o{constructor(t,e){this.key=t,this.child=e}mount(t,e){this.parentEl=t,this.child.mount(t,e)}moveBeforeDOMNode(t,e){this.child.moveBeforeDOMNode(t,e)}moveBeforeVNode(t,e){this.moveBeforeDOMNode(t&&t.firstNode()||e)}patch(t,e){if(this===t)return;let n=this.child,o=t.child;this.key===t.key?n.patch(o,e):(o.mount(this.parentEl,n.firstNode()),e&&n.beforeRemove(),n.remove(),this.child=o,this.key=t.key)}beforeRemove(){this.child.beforeRemove()}remove(){this.child.remove()}firstNode(){return this.child.firstNode()}toString(){return this.child.toString()}}function r(t,e){return new o(t,e)}class i extends Error{}const{setAttribute:s,removeAttribute:l}=Element.prototype,a=DOMTokenList.prototype,c=a.add,h=a.remove,u=Array.isArray,{split:d,trim:f}=String.prototype,p=/\s+/;function m(t,e){switch(e){case!1:case void 0:l.call(this,t);break;case!0:s.call(this,t,"");break;default:s.call(this,t,e)}}function b(t){return function(e){m.call(this,t,e)}}function g(t){if(u(t))"class"===t[0]?w.call(this,t[1]):m.call(this,t[0],t[1]);else for(let e in t)"class"===e?w.call(this,t[e]):m.call(this,e,t[e])}function y(t,e){if(u(t)){const n=t[0],o=t[1];if(n===e[0]){if(o===e[1])return;"class"===n?$.call(this,o,e[1]):m.call(this,n,o)}else l.call(this,e[0]),m.call(this,n,o)}else{for(let n in e)n in t||("class"===n?$.call(this,"",e[n]):l.call(this,n));for(let n in t){const o=t[n];o!==e[n]&&("class"===n?$.call(this,o,e[n]):m.call(this,n,o))}}}function v(t){const e={};switch(typeof t){case"string":const n=f.call(t);if(!n)return{};let o=d.call(n,p);for(let t=0,n=o.length;t<n;t++)e[o[t]]=!0;return e;case"object":for(let n in t){const o=t[n];if(o){if(n=f.call(n),!n)continue;const t=d.call(n,p);for(let n of t)e[n]=o}}return e;case"undefined":return{};case"number":return{[t]:!0};default:return{[t]:!0}}}function w(t){t=""===t?{}:v(t);const e=this.classList;for(let n in t)c.call(e,n)}function $(t,e){e=""===e?{}:v(e),t=""===t?{}:v(t);const n=this.classList;for(let o in e)o in t||h.call(n,o);for(let o in t)o in e||c.call(n,o)}function x(t){if(!t)return!1;if(t.ownerDocument.contains(t))return!0;const e=t.getRootNode();return e instanceof ShadowRoot&&t.ownerDocument.contains(e.host)}class N extends EventTarget{trigger(t,e){this.dispatchEvent(new CustomEvent(t,{detail:e}))}}class k extends String{}function E(t){const e=t.split(".")[0],o=t.includes(".capture");return t.includes(".synthetic")?function(t,e=!1){let o=`__event__synthetic_${t}`;e&&(o=`${o}_capture`);!function(t,e,o=!1){if(_[e])return;document.addEventListener(t,(t=>function(t,e){let o=e.target;for(;null!==o;){const r=o[t];if(r)for(const t of Object.values(r)){if(n.mainEventHandler(t,e,o))return}o=o.parentNode}}(e,t)),{capture:o}),_[e]=!0}(t,o,e);const r=T++;function i(t){const e=this[o]||{};e[r]=t,this[o]=e}function s(){delete this[o]}return{setup:i,update:i,remove:s}}(e,o):function(t,e=!1){let o=`__event__${t}_${A++}`;e&&(o=`${o}_capture`);function r(t){const e=t.currentTarget;if(!e||!x(e))return;const r=e[o];r&&n.mainEventHandler(r,t,e)}function i(n){this[o]=n,this.addEventListener(t,r,{capture:e})}function s(){delete this[o],this.removeEventListener(t,r,{capture:e})}function l(t){this[o]=t}return{setup:i,update:l,remove:s}}(e,o)}let A=1;let T=1;const _={};const S=Node.prototype,C=S.insertBefore,O=(D=S,L="textContent",Object.getOwnPropertyDescriptor(D,L)).set;var D,L;const B=S.removeChild;class R{constructor(t){this.children=t}mount(t,e){const n=this.children,o=n.length,r=new Array(o);for(let i=0;i<o;i++){let o=n[i];if(o)o.mount(t,e);else{const n=document.createTextNode("");r[i]=n,C.call(t,n,e)}}this.anchors=r,this.parentEl=t}moveBeforeDOMNode(t,e=this.parentEl){this.parentEl=e;const n=this.children,o=this.anchors;for(let r=0,i=n.length;r<i;r++){let i=n[r];if(i)i.moveBeforeDOMNode(t,e);else{const n=o[r];C.call(e,n,t)}}}moveBeforeVNode(t,e){if(t){const n=t.children[0];e=(n?n.firstNode():t.anchors[0])||null}const n=this.children,o=this.parentEl,r=this.anchors;for(let t=0,i=n.length;t<i;t++){let i=n[t];if(i)i.moveBeforeVNode(null,e);else{const n=r[t];C.call(o,n,e)}}}patch(t,e){if(this===t)return;const n=this.children,o=t.children,r=this.anchors,i=this.parentEl;for(let t=0,s=n.length;t<s;t++){const s=n[t],l=o[t];if(s)if(l)s.patch(l,e);else{const o=s.firstNode(),l=document.createTextNode("");r[t]=l,C.call(i,l,o),e&&s.beforeRemove(),s.remove(),n[t]=void 0}else if(l){n[t]=l;const e=r[t];l.mount(i,e),B.call(i,e)}}}beforeRemove(){const t=this.children;for(let e=0,n=t.length;e<n;e++){const n=t[e];n&&n.beforeRemove()}}remove(){const t=this.parentEl;if(this.isOnlyChild)O.call(t,"");else{const e=this.children,n=this.anchors;for(let o=0,r=e.length;o<r;o++){const r=e[o];r?r.remove():B.call(t,n[o])}}}firstNode(){const t=this.children[0];return t?t.firstNode():this.anchors[0]}toString(){return this.children.map((t=>t?t.toString():"")).join("")}}function P(t){return new R(t)}const j=Node.prototype,M=CharacterData.prototype,I=j.insertBefore,W=((t,e)=>Object.getOwnPropertyDescriptor(t,e))(M,"data").set,F=j.removeChild;class V{constructor(t){this.text=t}mountNode(t,e,n){this.parentEl=e,I.call(e,t,n),this.el=t}moveBeforeDOMNode(t,e=this.parentEl){this.parentEl=e,I.call(e,this.el,t)}moveBeforeVNode(t,e){I.call(this.parentEl,this.el,t?t.el:e)}beforeRemove(){}remove(){F.call(this.parentEl,this.el)}firstNode(){return this.el}toString(){return this.text}}class K extends V{mount(t,e){this.mountNode(document.createTextNode(q(this.text)),t,e)}patch(t){const e=t.text;this.text!==e&&(W.call(this.el,q(e)),this.text=e)}}class z extends V{mount(t,e){this.mountNode(document.createComment(q(this.text)),t,e)}patch(){}}function H(t){return new K(t)}function U(t){return new z(t)}function q(t){switch(typeof t){case"string":return t;case"number":return String(t);case"boolean":return t?"true":"false";default:return t||""}}const G=(t,e)=>Object.getOwnPropertyDescriptor(t,e),X=Node.prototype,Y=Element.prototype,Z=G(CharacterData.prototype,"data").set,J=G(X,"firstChild").get,Q=G(X,"nextSibling").get,tt=()=>{};function et(t){return function(e){this[t]=0===e?0:e?e.valueOf():""}}const nt={};function ot(t){if(t in nt)return nt[t];const e=(new DOMParser).parseFromString(`<t>${t}</t>`,"text/xml").firstChild.firstChild;n.shouldNormalizeDom&&rt(e);const o=it(e),r=at(o),i=function(t,e){let n=function(t,e){const{refN:n,collectors:o,children:r}=e,i=o.length;e.locations.sort(((t,e)=>t.idx-e.idx));const s=e.locations.map((t=>({refIdx:t.refIdx,setData:t.setData,updateData:t.updateData}))),l=s.length,a=r.length,c=r,h=n>0,u=X.cloneNode,d=X.insertBefore,f=Y.remove;class p{constructor(t){this.data=t}beforeRemove(){}remove(){f.call(this.el)}firstNode(){return this.el}moveBeforeDOMNode(t,e=this.parentEl){this.parentEl=e,d.call(e,this.el,t)}moveBeforeVNode(t,e){d.call(this.parentEl,this.el,t?t.el:e)}toString(){const t=document.createElement("div");return this.mount(t,null),t.innerHTML}mount(e,n){const o=u.call(t,!0);d.call(e,o,n),this.el=o,this.parentEl=e}patch(t,e){}}h&&(p.prototype.mount=function(e,r){const h=u.call(t,!0),f=new Array(n);this.refs=f,f[0]=h;for(let t=0;t<i;t++){const e=o[t];f[e.idx]=e.getVal.call(f[e.prevIdx])}if(l){const t=this.data;for(let e=0;e<l;e++){const n=s[e];n.setData.call(f[n.refIdx],t[e])}}if(d.call(e,h,r),a){const t=this.children;for(let e=0;e<a;e++){const n=t[e];if(n){const t=c[e],o=t.afterRefIdx?f[t.afterRefIdx]:null;n.isOnlyChild=t.isOnlyChild,n.mount(f[t.parentRefIdx],o)}}}this.el=h,this.parentEl=e},p.prototype.patch=function(t,e){if(this===t)return;const n=this.refs;if(l){const e=this.data,o=t.data;for(let t=0;t<l;t++){const r=e[t],i=o[t];if(r!==i){const e=s[t];e.updateData.call(n[e.refIdx],i,r)}}this.data=o}if(a){let o=this.children;const r=t.children;for(let t=0;t<a;t++){const i=o[t],s=r[t];if(i)s?i.patch(s,e):(e&&i.beforeRemove(),i.remove(),o[t]=void 0);else if(s){const e=c[t],r=e.afterRefIdx?n[e.afterRefIdx]:null;s.mount(n[e.parentRefIdx],r),o[t]=s}}}});return p}(t,e);if(e.cbRefs.length){const t=e.cbRefs,o=e.refList;let r=t.length;n=class extends n{mount(t,e){o.push(new Array(r)),super.mount(t,e);for(let t of o.pop())t()}remove(){super.remove();for(let e of t){(0,this.data[e])(null)}}}}if(e.children.length)return n=class extends n{constructor(t,e){super(t),this.children=e}},n.prototype.beforeRemove=R.prototype.beforeRemove,(t,e=[])=>new n(t,e);return t=>new n(t)}(o.el,r);return nt[t]=i,i}function rt(t){if(t.nodeType!==Node.TEXT_NODE||/\S/.test(t.textContent)){if(t.nodeType!==Node.ELEMENT_NODE||"pre"!==t.tagName)for(let e=t.childNodes.length-1;e>=0;--e)rt(t.childNodes.item(e))}else t.remove()}function it(t,e=null,n=null){switch(t.nodeType){case Node.ELEMENT_NODE:{let o=n&&n.currentNS;const r=t.tagName;let i;const s=[];if(r.startsWith("block-text-")){const t=parseInt(r.slice(11),10);s.push({type:"text",idx:t}),i=document.createTextNode("")}if(r.startsWith("block-child-")){n.isRef||st(n);const t=parseInt(r.slice(12),10);s.push({type:"child",idx:t}),i=document.createTextNode("")}if(o||(o=t.namespaceURI),i||(i=o?document.createElementNS(o,r):document.createElement(r)),i instanceof Element){if(!n){document.createElement("template").content.appendChild(i)}const e=t.attributes;for(let t=0;t<e.length;t++){const n=e[t].name,o=e[t].value;if(n.startsWith("block-handler-")){const t=parseInt(n.slice(14),10);s.push({type:"handler",idx:t,event:o})}else if(n.startsWith("block-attribute-")){const t=parseInt(n.slice(16),10);s.push({type:"attribute",idx:t,name:o,tag:r})}else if(n.startsWith("block-property-")){const t=parseInt(n.slice(15),10);s.push({type:"property",idx:t,name:o,tag:r})}else"block-attributes"===n?s.push({type:"attributes",idx:parseInt(o,10)}):"block-ref"===n?s.push({type:"ref",idx:parseInt(o,10)}):i.setAttribute(e[t].name,o)}}const l={parent:e,firstChild:null,nextSibling:null,el:i,info:s,refN:0,currentNS:o};if(t.firstChild){const e=t.childNodes[0];if(1===t.childNodes.length&&e.nodeType===Node.ELEMENT_NODE&&e.tagName.startsWith("block-child-")){const t=e.tagName,n=parseInt(t.slice(12),10);s.push({idx:n,type:"child",isOnlyChild:!0})}else{l.firstChild=it(t.firstChild,l,l),i.appendChild(l.firstChild.el);let e=t.firstChild,n=l.firstChild;for(;e=e.nextSibling;)n.nextSibling=it(e,n,l),i.appendChild(n.nextSibling.el),n=n.nextSibling}}return l.info.length&&st(l),l}case Node.TEXT_NODE:case Node.COMMENT_NODE:return{parent:e,firstChild:null,nextSibling:null,el:t.nodeType===Node.TEXT_NODE?document.createTextNode(t.textContent):document.createComment(t.textContent),info:[],refN:0,currentNS:null}}throw new i("boom")}function st(t){t.isRef=!0;do{t.refN++}while(t=t.parent)}function lt(t){let e=t.parent;for(;e&&e.nextSibling===t;)t=e,e=e.parent;return e}function at(t,e,n){if(!e){e={collectors:[],locations:[],children:new Array(t.info.filter((t=>"child"===t.type)).length),cbRefs:[],refN:t.refN,refList:[]},n=0}if(t.refN){const o=n,r=t.isRef,i=t.firstChild?t.firstChild.refN:0,s=t.nextSibling?t.nextSibling.refN:0;if(r){for(let e of t.info)e.refIdx=o;t.refIdx=o,function(t,e){for(let n of e.info)switch(n.type){case"text":t.locations.push({idx:n.idx,refIdx:n.refIdx,setData:ct,updateData:ct});break;case"child":n.isOnlyChild?t.children[n.idx]={parentRefIdx:n.refIdx,isOnlyChild:!0}:t.children[n.idx]={parentRefIdx:lt(e).refIdx,afterRefIdx:n.refIdx};break;case"property":{const e=n.refIdx,o=et(n.name);t.locations.push({idx:n.idx,refIdx:e,setData:o,updateData:o});break}case"attribute":{const e=n.refIdx;let o,r;"class"===n.name?(r=w,o=$):(r=b(n.name),o=r),t.locations.push({idx:n.idx,refIdx:e,setData:r,updateData:o});break}case"attributes":t.locations.push({idx:n.idx,refIdx:n.refIdx,setData:g,updateData:y});break;case"handler":{const{setup:e,update:o}=E(n.event);t.locations.push({idx:n.idx,refIdx:n.refIdx,setData:e,updateData:o});break}case"ref":const o=t.cbRefs.push(n.idx)-1;t.locations.push({idx:n.idx,refIdx:n.refIdx,setData:ht(o,t.refList),updateData:tt})}}(e,t),n++}if(s){const r=n+i;e.collectors.push({idx:r,prevIdx:o,getVal:Q}),at(t.nextSibling,e,r)}i&&(e.collectors.push({idx:n,prevIdx:o,getVal:J}),at(t.firstChild,e,n))}return e}function ct(t){Z.call(this,q(t))}function ht(t,e){return function(n){e[e.length-1][t]=()=>n(this)}}const ut=Node.prototype,dt=ut.insertBefore,ft=ut.appendChild,pt=ut.removeChild,mt=((t,e)=>Object.getOwnPropertyDescriptor(t,e))(ut,"textContent").set;class bt{constructor(t){this.children=t}mount(t,e){const n=this.children,o=document.createTextNode("");this.anchor=o,dt.call(t,o,e);const r=n.length;if(r){const e=n[0].mount;for(let i=0;i<r;i++)e.call(n[i],t,o)}this.parentEl=t}moveBeforeDOMNode(t,e=this.parentEl){this.parentEl=e;const n=this.children;for(let o=0,r=n.length;o<r;o++)n[o].moveBeforeDOMNode(t,e);e.insertBefore(this.anchor,t)}moveBeforeVNode(t,e){if(t){const n=t.children[0];e=(n?n.firstNode():t.anchor)||null}const n=this.children;for(let t=0,o=n.length;t<o;t++)n[t].moveBeforeVNode(null,e);this.parentEl.insertBefore(this.anchor,e)}patch(t,e){if(this===t)return;const n=this.children,o=t.children;if(0===o.length&&0===n.length)return;this.children=o;const r=o[0]||n[0],{mount:i,patch:s,remove:l,beforeRemove:a,moveBeforeVNode:c,firstNode:h}=r,u=this.anchor,d=this.isOnlyChild,f=this.parentEl;if(0===o.length&&d){if(e)for(let t=0,e=n.length;t<e;t++)a.call(n[t]);return mt.call(f,""),void ft.call(f,u)}let p,m=0,b=0,g=n[0],y=o[0],v=n.length-1,w=o.length-1,$=n[v],x=o[w];for(;m<=v&&b<=w;){if(null===g){g=n[++m];continue}if(null===$){$=n[--v];continue}let t=g.key,r=y.key;if(t===r){s.call(g,y,e),o[b]=g,g=n[++m],y=o[++b];continue}let l=$.key,a=x.key;if(l===a){s.call($,x,e),o[w]=$,$=n[--v],x=o[--w];continue}if(t===a){s.call(g,x,e),o[w]=g;const t=o[w+1];c.call(g,t,u),g=n[++m],x=o[--w];continue}if(l===r){s.call($,y,e),o[b]=$;const t=n[m];c.call($,t,u),$=n[--v],y=o[++b];continue}p=p||yt(n,m,v);let d=p[r];if(void 0===d)i.call(y,f,h.call(g)||null);else{const t=n[d];c.call(t,g,null),s.call(t,y,e),o[b]=t,n[d]=null}y=o[++b]}if(m<=v||b<=w)if(m>v){const t=o[w+1],e=t?h.call(t)||null:u;for(let t=b;t<=w;t++)i.call(o[t],f,e)}else for(let t=m;t<=v;t++){let o=n[t];o&&(e&&a.call(o),l.call(o))}}beforeRemove(){const t=this.children,e=t.length;if(e){const n=t[0].beforeRemove;for(let o=0;o<e;o++)n.call(t[o])}}remove(){const{parentEl:t,anchor:e}=this;if(this.isOnlyChild)mt.call(t,"");else{const n=this.children,o=n.length;if(o){const t=n[0].remove;for(let e=0;e<o;e++)t.call(n[e])}pt.call(t,e)}}firstNode(){const t=this.children[0];return t?t.firstNode():void 0}toString(){return this.children.map((t=>t.toString())).join("")}}function gt(t){return new bt(t)}function yt(t,e,n){let o={};for(let r=e;r<=n;r++)o[t[r].key]=r;return o}const vt=Node.prototype,wt=vt.insertBefore,$t=vt.removeChild;class xt{constructor(t){this.content=[],this.html=t}mount(t,e){this.parentEl=t;const n=document.createElement("template");n.innerHTML=this.html,this.content=[...n.content.childNodes];for(let n of this.content)wt.call(t,n,e);if(!this.content.length){const n=document.createTextNode("");this.content.push(n),wt.call(t,n,e)}}moveBeforeDOMNode(t,e=this.parentEl){this.parentEl=e;for(let n of this.content)wt.call(e,n,t)}moveBeforeVNode(t,e){const n=t?t.content[0]:e;this.moveBeforeDOMNode(n)}patch(t){if(this===t)return;const e=t.html;if(this.html!==e){const n=this.parentEl,o=this.content[0],r=document.createElement("template");r.innerHTML=e;const i=[...r.content.childNodes];for(let t of i)wt.call(n,t,o);if(!i.length){const t=document.createTextNode("");i.push(t),wt.call(n,t,o)}this.remove(),this.content=i,this.html=t.html}}beforeRemove(){}remove(){const t=this.parentEl;for(let e of this.content)$t.call(t,e)}firstNode(){return this.content[0]}toString(){return this.html}}function Nt(t){return new xt(t)}function kt(t,e,n=null){t.mount(e,n)}const Et=new WeakMap,At=new WeakMap;function Tt(t,e){if(!t)return!1;const n=t.fiber;n&&Et.set(n,e);const o=At.get(t);if(o){let t=!1;for(let n=o.length-1;n>=0;n--)try{o[n](e),t=!0;break}catch(t){e=t}if(t)return!0}return Tt(t.parent,e)}function _t(t){let{error:e}=t;e instanceof i||(e=Object.assign(new i('An error occured in the owl lifecycle (see this Error\'s "cause" property)'),{cause:e}));const n="node"in t?t.node:t.fiber.node,o="fiber"in t?t.fiber:n.fiber;if(o){let t=o;do{t.node.fiber=t,t=t.parent}while(t);Et.set(o.root,e)}if(!Tt(n,e)){console.warn("[Owl] Unhandled error. Destroying the root component");try{n.app.destroy()}catch(t){console.error(t)}throw e}}function St(){throw new i("Attempted to render cancelled fiber")}function Ct(t){let e=0;for(let n of t){let t=n.node;n.render=St,0===t.status&&t.cancel(),t.fiber=null,n.bdom?t.forceNextRender=!0:e++,e+=Ct(n.children)}return e}class Ot{constructor(t,e){if(this.bdom=null,this.children=[],this.appliedToDom=!1,this.deep=!1,this.childrenMap={},this.node=t,this.parent=e,e){this.deep=e.deep;const t=e.root;t.setCounter(t.counter+1),this.root=t,e.children.push(this)}else this.root=this}render(){let t=this.root.node,e=t.app.scheduler,n=t.parent;for(;n;){if(n.fiber){let o=n.fiber.root;if(0!==o.counter||!(t.parentKey in n.fiber.childrenMap))return void e.delayedRenders.push(this);n=o.node}t=n,n=n.parent}this._render()}_render(){const t=this.node,e=this.root;if(e){try{this.bdom=!0,this.bdom=t.renderFn()}catch(e){t.app.handleError({node:t,error:e})}e.setCounter(e.counter-1)}}}class Dt extends Ot{constructor(){super(...arguments),this.counter=1,this.willPatch=[],this.patched=[],this.mounted=[],this.locked=!1}complete(){const t=this.node;let e;this.locked=!0;try{for(e of this.willPatch){let t=e.node;if(t.fiber===e){const e=t.component;for(let n of t.willPatch)n.call(e)}}e=void 0,t._patch(),this.locked=!1;let n=this.mounted;for(;e=n.pop();)if(e.appliedToDom)for(let t of e.node.mounted)t();let o=this.patched;for(;e=o.pop();)if(e.appliedToDom)for(let t of e.node.patched)t()}catch(n){this.locked=!1,t.app.handleError({fiber:e||this,error:n})}}setCounter(t){this.counter=t,0===t&&this.node.app.scheduler.flush()}}class Lt extends Dt{constructor(t,e,n={}){super(t,null),this.target=e,this.position=n.position||"last-child"}complete(){let t=this;try{const e=this.node;if(e.children=this.childrenMap,e.app.constructor.validateTarget(this.target),e.bdom)e.updateDom();else if(e.bdom=this.bdom,"last-child"===this.position||0===this.target.childNodes.length)kt(e.bdom,this.target);else{const t=this.target.childNodes[0];kt(e.bdom,this.target,t)}e.fiber=null,e.status=1,this.appliedToDom=!0;let n=this.mounted;for(;t=n.pop();)if(t.appliedToDom)for(let e of t.node.mounted)e()}catch(e){this.node.app.handleError({fiber:t,error:e})}}}const Bt=Symbol("Key changes"),Rt=()=>{throw new Error("Called NO_CALLBACK. Owl is broken, please report this to the maintainers.")},Pt=Object.prototype.toString,jt=Object.prototype.hasOwnProperty,Mt=new Set(["Object","Array","Set","Map","WeakMap"]),It=new Set(["Set","Map","WeakMap"]);function Wt(t){return Pt.call(Ht(t)).slice(8,-1)}function Ft(t){return"object"==typeof t&&Mt.has(Wt(t))}function Vt(t,e){return Ft(t)?Qt(t,e):t}const Kt=new WeakSet;function zt(t){return Kt.add(t),t}function Ht(t){return Zt.has(t)?Zt.get(t):t}const Ut=new WeakMap;function qt(t,e,n){if(n===Rt)return;Ut.get(t)||Ut.set(t,new Map);const o=Ut.get(t);o.get(e)||o.set(e,new Set),o.get(e).add(n),Xt.has(n)||Xt.set(n,new Set),Xt.get(n).add(t)}function Gt(t,e){const n=Ut.get(t);if(!n)return;const o=n.get(e);if(o)for(const t of[...o])Yt(t),t()}const Xt=new WeakMap;function Yt(t){const e=Xt.get(t);if(e){for(const n of e){const e=Ut.get(n);if(e)for(const[n,o]of e.entries())o.delete(t),o.size||e.delete(n)}e.clear()}}const Zt=new WeakMap,Jt=new WeakMap;function Qt(t,e=Rt){if(!Ft(t))throw new i("Cannot make the given value reactive");if(Kt.has(t))return t;if(Zt.has(t))return Qt(Zt.get(t),e);Jt.has(t)||Jt.set(t,new WeakMap);const n=Jt.get(t);if(!n.has(e)){const o=Wt(t),r=It.has(o)?function(t,e,n){const o=se[n](t,e);return Object.assign(te(e),{get:(t,n)=>jt.call(o,n)?o[n]:(qt(t,n,e),Vt(t[n],e))})}(t,e,o):te(e),i=new Proxy(t,r);n.set(e,i),Zt.set(i,t)}return n.get(e)}function te(t){return{get(e,n,o){const r=Object.getOwnPropertyDescriptor(e,n);return!r||r.writable||r.configurable?(qt(e,n,t),Vt(Reflect.get(e,n,o),t)):Reflect.get(e,n,o)},set(t,e,n,o){const r=jt.call(t,e),i=Reflect.get(t,e,o),s=Reflect.set(t,e,Ht(n),o);return!r&&jt.call(t,e)&&Gt(t,Bt),(i!==Reflect.get(t,e,o)||"length"===e&&Array.isArray(t))&&Gt(t,e),s},deleteProperty(t,e){const n=Reflect.deleteProperty(t,e);return Gt(t,Bt),Gt(t,e),n},ownKeys:e=>(qt(e,Bt,t),Reflect.ownKeys(e)),has:(e,n)=>(qt(e,Bt,t),Reflect.has(e,n))}}function ee(t,e,n){return o=>(o=Ht(o),qt(e,o,n),Vt(e[t](o),n))}function ne(t,e,n){return function*(){qt(e,Bt,n);const o=e.keys();for(const r of e[t]()){const t=o.next().value;qt(e,t,n),yield Vt(r,n)}}}function oe(t,e){return function(n,o){qt(t,Bt,e),t.forEach((function(r,i,s){qt(t,i,e),n.call(o,Vt(r,e),Vt(i,e),Vt(s,e))}),o)}}function re(t,e,n){return(o,r)=>{o=Ht(o);const i=n.has(o),s=n[e](o),l=n[t](o,r);return i!==n.has(o)&&Gt(n,Bt),s!==n[e](o)&&Gt(n,o),l}}function ie(t){return()=>{const e=[...t.keys()];t.clear(),Gt(t,Bt);for(const n of e)Gt(t,n)}}const se={Set:(t,e)=>({has:ee("has",t,e),add:re("add","has",t),delete:re("delete","has",t),keys:ne("keys",t,e),values:ne("values",t,e),entries:ne("entries",t,e),[Symbol.iterator]:ne(Symbol.iterator,t,e),forEach:oe(t,e),clear:ie(t),get size(){return qt(t,Bt,e),t.size}}),Map:(t,e)=>({has:ee("has",t,e),get:ee("get",t,e),set:re("set","get",t),delete:re("delete","has",t),keys:ne("keys",t,e),values:ne("values",t,e),entries:ne("entries",t,e),[Symbol.iterator]:ne(Symbol.iterator,t,e),forEach:oe(t,e),clear:ie(t),get size(){return qt(t,Bt,e),t.size}}),WeakMap:(t,e)=>({has:ee("has",t,e),get:ee("get",t,e),set:re("set","get",t),delete:re("delete","has",t)})};let le=null;function ae(){if(!le)throw new i("No active component (a hook function should only be called in 'setup')");return le}function ce(t,e){for(let n in e)void 0===t[n]&&(t[n]=e[n])}const he=new WeakMap;function ue(t){const e=ae();let n=he.get(e);return n||(n=function(t){let e=!1;return async(...n)=>{e||(e=!0,await Promise.resolve(),e=!1,t(...n))}}(e.render.bind(e,!1)),he.set(e,n),e.willDestroy.push(Yt.bind(null,n))),Qt(t,n)}class de{constructor(t,e,n,o,r){this.fiber=null,this.bdom=null,this.status=0,this.forceNextRender=!1,this.nextProps=null,this.children=Object.create(null),this.refs={},this.willStart=[],this.willUpdateProps=[],this.willUnmount=[],this.mounted=[],this.willPatch=[],this.patched=[],this.willDestroy=[],le=this,this.app=n,this.parent=o,this.props=e,this.parentKey=r;const i=t.defaultProps;e=Object.assign({},e),i&&ce(e,i);const s=o&&o.childEnv||n.env;this.childEnv=s;for(const t in e){const n=e[t];n&&"object"==typeof n&&Zt.has(n)&&(e[t]=ue(n))}this.component=new t(e,s,this);const l=Object.assign(Object.create(this.component),{this:this.component});this.renderFn=n.getTemplate(t.template).bind(this.component,l,this),this.component.setup(),le=null}mountComponent(t,e){const n=new Lt(this,t,e);this.app.scheduler.addFiber(n),this.initiateRender(n)}async initiateRender(t){this.fiber=t,this.mounted.length&&t.root.mounted.push(t);const e=this.component;try{await Promise.all(this.willStart.map((t=>t.call(e))))}catch(t){return void this.app.handleError({node:this,error:t})}0===this.status&&this.fiber===t&&t.render()}async render(t){if(this.status>=2)return;let e=this.fiber;if(e&&(e.root.locked||!0===e.bdom)&&(await Promise.resolve(),e=this.fiber),e){if(!e.bdom&&!Et.has(e))return void(t&&(e.deep=t));t=t||e.deep}else if(!this.bdom)return;const n=function(t){let e=t.fiber;if(e){let t=e.root;return t.locked=!0,t.setCounter(t.counter+1-Ct(e.children)),t.locked=!1,e.children=[],e.childrenMap={},e.bdom=null,Et.has(e)&&(Et.delete(e),Et.delete(t),e.appliedToDom=!1),e}const n=new Dt(t,null);return t.willPatch.length&&n.willPatch.push(n),t.patched.length&&n.patched.push(n),n}(this);n.deep=t,this.fiber=n,this.app.scheduler.addFiber(n),await Promise.resolve(),this.status>=2||this.fiber!==n||!e&&n.parent||n.render()}cancel(){this._cancel(),delete this.parent.children[this.parentKey],this.app.scheduler.scheduleDestroy(this)}_cancel(){this.status=2;const t=this.children;for(let e in t)t[e]._cancel()}destroy(){let t=1===this.status;this._destroy(),t&&this.bdom.remove()}_destroy(){const t=this.component;if(1===this.status)for(let e of this.willUnmount)e.call(t);for(let t of Object.values(this.children))t._destroy();if(this.willDestroy.length)try{for(let e of this.willDestroy)e.call(t)}catch(t){this.app.handleError({error:t,node:this})}this.status=3}async updateAndRender(t,e){this.nextProps=t,t=Object.assign({},t);const n=function(t,e){let n=t.fiber;return n&&(Ct(n.children),n.root=null),new Ot(t,e)}(this,e);this.fiber=n;const o=this.component,r=o.constructor.defaultProps;r&&ce(t,r),le=this;for(const e in t){const n=t[e];n&&"object"==typeof n&&Zt.has(n)&&(t[e]=ue(n))}le=null;const i=Promise.all(this.willUpdateProps.map((e=>e.call(o,t))));if(await i,n!==this.fiber)return;o.props=t,n.render();const s=e.root;this.willPatch.length&&s.willPatch.push(n),this.patched.length&&s.patched.push(n)}updateDom(){if(this.fiber)if(this.bdom===this.fiber.bdom)for(let t in this.children){this.children[t].updateDom()}else this.bdom.patch(this.fiber.bdom,!1),this.fiber.appliedToDom=!0,this.fiber=null}setRef(t,e){e&&(this.refs[t]=e)}firstNode(){const t=this.bdom;return t?t.firstNode():void 0}mount(t,e){const n=this.fiber.bdom;this.bdom=n,n.mount(t,e),this.status=1,this.fiber.appliedToDom=!0,this.children=this.fiber.childrenMap,this.fiber=null}moveBeforeDOMNode(t,e){this.bdom.moveBeforeDOMNode(t,e)}moveBeforeVNode(t,e){this.bdom.moveBeforeVNode(t?t.bdom:null,e)}patch(){this.fiber&&this.fiber.parent&&(this._patch(),this.props=this.nextProps)}_patch(){let t=!1;for(let e in this.children){t=!0;break}const e=this.fiber;this.children=e.childrenMap,this.bdom.patch(e.bdom,t),e.appliedToDom=!0,this.fiber=null}beforeRemove(){this._destroy()}remove(){this.bdom.remove()}get name(){return this.component.constructor.name}get subscriptions(){const t=he.get(this);return t?(e=t,[...Xt.get(e)||[]].map((t=>{const n=Ut.get(t);let o=[];if(n)for(const[t,r]of n)r.has(e)&&o.push(t);return{target:t,keys:o}}))):[];var e}}const fe=Symbol("timeout");function pe(t,e){const n=new i(`The following error occurred in ${e}: `),o=new i(`${e}'s promise hasn't resolved after 3 seconds`),r=ae();return(...i)=>{const s=t=>{throw n.cause=t,t instanceof Error?n.message+=`"${t.message}"`:n.message=`Something that is not an Error was thrown in ${e} (see this Error's "cause" property)`,n};try{const n=t(...i);if(n instanceof Promise){if("onWillStart"===e||"onWillUpdateProps"===e){const t=r.fiber;Promise.race([n.catch((()=>{})),new Promise((t=>setTimeout((()=>t(fe)),3e3)))]).then((e=>{e===fe&&r.fiber===t&&console.warn(o)}))}return n.catch(s)}return n}catch(t){s(t)}}}function me(t){const e=ae(),n=e.app.dev?pe:t=>t;e.mounted.push(n(t.bind(e.component),"onMounted"))}function be(t){const e=ae(),n=e.app.dev?pe:t=>t;e.patched.push(n(t.bind(e.component),"onPatched"))}function ge(t){const e=ae(),n=e.app.dev?pe:t=>t;e.willUnmount.unshift(n(t.bind(e.component),"onWillUnmount"))}class ye{constructor(t,e,n){this.props=t,this.env=e,this.__owl__=n}setup(){}render(t=!1){this.__owl__.render(!0===t)}}ye.template="";const ve=H("").constructor;class we extends ve{constructor(t,e){super(""),this.target=null,this.selector=t,this.content=e}mount(t,e){super.mount(t,e),this.target=document.querySelector(this.selector),this.target?this.content.mount(this.target,null):this.content.mount(t,e)}beforeRemove(){this.content.beforeRemove()}remove(){this.content&&(super.remove(),this.content.remove(),this.content=null)}patch(t){super.patch(t),this.content?this.content.patch(t.content,!0):(this.content=t.content,this.content.mount(this.target,null))}}class $e extends ye{setup(){const t=this.__owl__;me((()=>{const e=t.bdom;if(!e.target){const t=document.querySelector(this.props.target);if(!t)throw new i("invalid portal target");e.content.moveBeforeDOMNode(t.firstChild,t)}})),ge((()=>{t.bdom.remove()}))}}$e.template="__portal__",$e.props={target:{type:String},slots:!0};const xe=t=>Array.isArray(t),Ne=t=>"object"!=typeof t,ke=t=>"object"==typeof t&&t&&"value"in t;function Ee(t){return"object"==typeof t&&"optional"in t&&t.optional||!1}function Ae(t){return"*"===t||!0===t?"value":t.name.toLowerCase()}function Te(t){return Ne(t)?Ae(t):xe(t)?t.map(Te).join(" or "):ke(t)?String(t.value):"element"in t?`list of ${Te({type:t.element,optional:!1})}s`:"shape"in t?"object":Te(t.type||"*")}function _e(t,e){var n;Array.isArray(e)&&(n=e,e=Object.fromEntries(n.map((t=>t.endsWith("?")?[t.slice(0,-1),{optional:!0}]:[t,{type:"*",optional:!1}])))),t=Ht(t);let o=[];for(let n in t)if(n in e){let r=Se(n,t[n],e[n]);r&&o.push(r)}else"*"in e||o.push(`unknown key '${n}'`);for(let n in e){const r=e[n];if("*"!==n&&!Ee(r)&&!(n in t)){const t="object"==typeof r&&!Array.isArray(r);let e="*"===r||(t&&"type"in r?"*"===r.type:t)?"":` (should be a ${Te(r)})`;o.push(`'${n}' is missing${e}`)}}return o}function Se(t,e,n){if(void 0===e)return Ee(n)?null:`'${t}' is undefined (should be a ${Te(n)})`;if(Ne(n))return function(t,e,n){if("function"==typeof n)if("object"==typeof e){if(!(e instanceof n))return`'${t}' is not a ${Ae(n)}`}else if(typeof e!==n.name.toLowerCase())return`'${t}' is not a ${Ae(n)}`;return null}(t,e,n);if(ke(n))return e===n.value?null:`'${t}' is not equal to '${n.value}'`;if(xe(n)){let o=n.find((n=>!Se(t,e,n)));return o?null:`'${t}' is not a ${Te(n)}`}let o=null;if("element"in n)o=function(t,e,n){if(!Array.isArray(e))return`'${t}' is not a list of ${Te(n)}s`;for(let o=0;o<e.length;o++){const r=Se(`${t}[${o}]`,e[o],n);if(r)return r}return null}(t,e,n.element);else if("shape"in n)if("object"!=typeof e||Array.isArray(e))o=`'${t}' is not an object`;else{const r=_e(e,n.shape);r.length&&(o=`'${t}' doesn't have the correct shape (${r.join(", ")})`)}else if("values"in n)if("object"!=typeof e||Array.isArray(e))o=`'${t}' is not an object`;else{const r=Object.entries(e).map((([t,e])=>Se(t,e,n.values))).filter(Boolean);r.length&&(o=`some of the values in '${t}' are invalid (${r.join(", ")})`)}return"type"in n&&!o&&(o=Se(t,e,n.type)),"validate"in n&&!o&&(o=n.validate(e)?null:`'${t}' is not valid`),o}const Ce=Object.create;function Oe(t){const e=Ce(t);for(let n in t)e[n]=t[n];return e}const De=Symbol("isBoundary");class Le{constructor(t,e,n,o,r){this.fn=t,this.ctx=Oe(e),this.component=n,this.node=o,this.key=r}evaluate(){return this.fn.call(this.component,this.ctx,this.node,this.key)}toString(){return this.evaluate().toString()}}function Be(t,e,n){const o="string"!=typeof t?t:n.constructor.components[t];if(!o)return;const r=o.props;if(!r)return void(n.__owl__.app.warnIfNoStaticProps&&console.warn(`Component '${o.name}' does not have a static props description`));const s=o.defaultProps;if(s){let t=t=>Array.isArray(r)?r.includes(t):t in r&&!("*"in r)&&!Ee(r[t]);for(let e in s)if(t(e))throw new i(`A default value cannot be defined for a mandatory prop (name: '${e}', component: ${o.name})`)}const l=_e(e,r);if(l.length)throw new i(`Invalid props for component '${o.name}': `+l.join(", "))}const Re={withDefault:function(t,e){return null==t||!1===t?e:t},zero:Symbol("zero"),isBoundary:De,callSlot:function(t,e,n,o,i,s,l){n=n+"__slot_"+o;const a=t.props.slots||{},{__render:c,__ctx:h,__scope:u}=a[o]||{},d=Ce(h||{});u&&(d[u]=s);const f=c?c(d,e,n):null;if(l){let s,a;return f?s=i?r(o,f):f:a=l(t,e,n),P([s,a])}return f||H("")},capture:Oe,withKey:function(t,e){return t.key=e,t},prepareList:function(t){let e,n;if(Array.isArray(t))e=t,n=t;else if(t instanceof Map)e=[...t.keys()],n=[...t.values()];else if(Symbol.iterator in Object(t))e=[...t],n=e;else{if(!t||"object"!=typeof t)throw new i(`Invalid loop expression: "${t}" is not iterable`);n=Object.values(t),e=Object.keys(t)}const o=n.length;return[e,n,o,new Array(o)]},setContextValue:function(t,e,n){const o=t;for(;!t.hasOwnProperty(e)&&!t.hasOwnProperty(De);){const e=t.__proto__;if(!e){t=o;break}t=e}t[e]=n},shallowEqual:function(t,e){for(let n=0,o=t.length;n<o;n++)if(t[n]!==e[n])return!1;return!0},toNumber:function(t){const e=parseFloat(t);return isNaN(e)?t:e},validateProps:Be,LazyValue:Le,safeOutput:function(t,e){if(null==t)return e?r("default",e):r("undefined",H(""));let n,o;switch(typeof t){case"object":t instanceof k?(n="string_safe",o=Nt(t)):t instanceof Le?(n="lazy_value",o=t.evaluate()):t instanceof String?(n="string_unsafe",o=H(t)):(n="block_safe",o=t);break;case"string":n="string_unsafe",o=H(t);break;default:n="string_unsafe",o=H(String(t))}return r(n,o)},createCatcher:function(t){const e=Object.keys(t).length;class n{constructor(t,e){this.handlerFns=[],this.afterNode=null,this.child=t,this.handlerData=e}mount(e,n){this.parentEl=e,this.child.mount(e,n),this.afterNode=document.createTextNode(""),e.insertBefore(this.afterNode,n),this.wrapHandlerData();for(let n in t){const o=t[n],r=E(n);this.handlerFns[o]=r,r.setup.call(e,this.handlerData[o])}}wrapHandlerData(){for(let t=0;t<e;t++){let e=this.handlerData[t],n=e.length-2,o=e[n];const r=this;e[n]=function(t){const e=t.target;let n=r.child.firstNode();const i=r.afterNode;for(;n&&n!==i;){if(n.contains(e))return o.call(this,t);n=n.nextSibling}}}}moveBeforeDOMNode(t,e=this.parentEl){this.parentEl=e,this.child.moveBeforeDOMNode(t,e),e.insertBefore(this.afterNode,t)}moveBeforeVNode(t,e){t&&(e=t.firstNode()||e),this.child.moveBeforeVNode(t?t.child:null,e),this.parentEl.insertBefore(this.afterNode,e)}patch(t,n){if(this!==t){this.handlerData=t.handlerData,this.wrapHandlerData();for(let t=0;t<e;t++)this.handlerFns[t].update.call(this.parentEl,this.handlerData[t]);this.child.patch(t.child,n)}}beforeRemove(){this.child.beforeRemove()}remove(){for(let t=0;t<e;t++)this.handlerFns[t].remove.call(this.parentEl);this.child.remove(),this.afterNode.remove()}firstNode(){return this.child.firstNode()}toString(){return this.child.toString()}}return function(t,e){return new n(t,e)}},markRaw:zt,OwlError:i,makeRefWrapper:function(t){let e=new Set;return(n,o)=>{if(e.has(n))throw new i(`Cannot set the same ref more than once in the same component, ref "${n}" was set multiple times in ${t.name}`);return e.add(n),o}}};function Pe(t){const e=(new DOMParser).parseFromString(t,"text/xml");if(e.getElementsByTagName("parsererror").length){let n="Invalid XML in template.";const o=e.getElementsByTagName("parsererror")[0].textContent;if(o){n+="\nThe parser has produced the following error message:\n"+o;const e=/\d+/g,r=e.exec(o);if(r){const i=Number(r[0]),s=t.split("\n")[i-1],l=e.exec(o);if(s&&l){const t=Number(l[0])-1;s[t]&&(n+=`\nThe error might be located at xml line ${i} column ${t}\n${s}\n${"-".repeat(t-1)}^`)}}}throw new i(n)}return e}const je={text:H,createBlock:ot,list:gt,multi:P,html:Nt,toggler:r,comment:U};class Me{constructor(t={}){if(this.rawTemplates=Object.create(Ie),this.templates={},this.Portal=$e,this.dev=t.dev||!1,this.translateFn=t.translateFn,this.translatableAttributes=t.translatableAttributes,t.templates)if(t.templates instanceof Document||"string"==typeof t.templates)this.addTemplates(t.templates);else for(const e in t.templates)this.addTemplate(e,t.templates[e]);this.getRawTemplate=t.getTemplate}static registerTemplate(t,e){Ie[t]=e}addTemplate(t,e){if(t in this.rawTemplates){if(!this.dev)return;const n=this.rawTemplates[t];if(("string"==typeof n?n:n instanceof Element?n.outerHTML:n.toString())===("string"==typeof e?e:e.outerHTML))return;throw new i(`Template ${t} already defined with different content`)}this.rawTemplates[t]=e}addTemplates(t){if(t){t=t instanceof Document?t:Pe(t);for(const e of t.querySelectorAll("[t-name]")){const t=e.getAttribute("t-name");this.addTemplate(t,e)}}}getTemplate(t){var e;if(!(t in this.templates)){const n=(null===(e=this.getRawTemplate)||void 0===e?void 0:e.call(this,t))||this.rawTemplates[t];if(void 0===n){let e="";try{e=` (for component "${ae().component.constructor.name}")`}catch{}throw new i(`Missing template: "${t}"${e}`)}const o="function"==typeof n&&!(n instanceof Element)?n:this._compileTemplate(t,n),r=this.templates;this.templates[t]=function(e,n){return r[t].call(this,e,n)};const s=o(this,je,Re);this.templates[t]=s}return this.templates[t]}_compileTemplate(t,e){throw new i("Unable to compile a template. Please use owl full build instead")}callTemplate(t,e,n,o,i){return r(e,this.getTemplate(e).call(t,n,o,i+e))}}const Ie={};function We(...t){const e="__template__"+We.nextId++,n=String.raw(...t);return Ie[e]=n,e}We.nextId=1,Me.registerTemplate("__portal__",(function(t,e,n){let{callSlot:o}=n;return function(t,e,n=""){return new we(t.props.target,o(t,e,n,"default",!1,null))}}));const Fe="true,false,NaN,null,undefined,debugger,console,window,in,instanceof,new,function,return,eval,void,Math,RegExp,Array,Object,Date".split(","),Ve=Object.assign(Object.create(null),{and:"&&",or:"||",gt:">",gte:">=",lt:"<",lte:"<="}),Ke=Object.assign(Object.create(null),{"{":"LEFT_BRACE","}":"RIGHT_BRACE","[":"LEFT_BRACKET","]":"RIGHT_BRACKET",":":"COLON",",":"COMMA","(":"LEFT_PAREN",")":"RIGHT_PAREN"}),ze="...,.,===,==,+,!==,!=,!,||,&&,>=,>,<=,<,?,-,*,/,%,typeof ,=>,=,;,in ,new ,|,&,^,~".split(",");const He=[function(t){let e=t[0],n=e;if("'"!==e&&'"'!==e&&"`"!==e)return!1;let o,r=1;for(;t[r]&&t[r]!==n;){if(o=t[r],e+=o,"\\"===o){if(r++,o=t[r],!o)throw new i("Invalid expression");e+=o}r++}if(t[r]!==n)throw new i("Invalid expression");return e+=n,"`"===n?{type:"TEMPLATE_STRING",value:e,replace:t=>e.replace(/\$\{(.*?)\}/g,((e,n)=>"${"+t(n)+"}"))}:{type:"VALUE",value:e}},function(t){let e=t[0];if(e&&e.match(/[0-9]/)){let n=1;for(;t[n]&&t[n].match(/[0-9]|\./);)e+=t[n],n++;return{type:"VALUE",value:e}}return!1},function(t){for(let e of ze)if(t.startsWith(e))return{type:"OPERATOR",value:e};return!1},function(t){let e=t[0];if(e&&e.match(/[a-zA-Z_\$]/)){let n=1;for(;t[n]&&t[n].match(/\w/);)e+=t[n],n++;return e in Ve?{type:"OPERATOR",value:Ve[e],size:e.length}:{type:"SYMBOL",value:e}}return!1},function(t){const e=t[0];return!(!e||!(e in Ke))&&{type:Ke[e],value:e}}];const Ue=t=>t&&("LEFT_BRACE"===t.type||"COMMA"===t.type),qe=t=>t&&("RIGHT_BRACE"===t.type||"COMMA"===t.type);function Ge(t){const e=new Set,n=function(t){const e=[];let n,o=!0,r=t;try{for(;o;)if(r=r.trim(),r){for(let t of He)if(o=t(r),o){e.push(o),r=r.slice(o.size||o.value.length);break}}else o=!1}catch(t){n=t}if(r.length||n)throw new i(`Tokenizer error: could not tokenize \`${t}\``);return e}(t);let o=0,r=[];for(;o<n.length;){let t=n[o],i=n[o-1],s=n[o+1],l=r[r.length-1];switch(t.type){case"LEFT_BRACE":case"LEFT_BRACKET":r.push(t.type);break;case"RIGHT_BRACE":case"RIGHT_BRACKET":r.pop()}let a="SYMBOL"===t.type&&!Fe.includes(t.value);if("SYMBOL"!==t.type||Fe.includes(t.value)||i&&("LEFT_BRACE"===l&&Ue(i)&&qe(s)&&(n.splice(o+1,0,{type:"COLON",value:":"},{...t}),s=n[o+1]),"OPERATOR"===i.type&&"."===i.value?a=!1:"LEFT_BRACE"!==i.type&&"COMMA"!==i.type||s&&"COLON"===s.type&&(a=!1)),"TEMPLATE_STRING"===t.type&&(t.value=t.replace((t=>Ye(t)))),s&&"OPERATOR"===s.type&&"=>"===s.value)if("RIGHT_PAREN"===t.type){let t=o-1;for(;t>0&&"LEFT_PAREN"!==n[t].type;)"SYMBOL"===n[t].type&&n[t].originalValue&&(n[t].value=n[t].originalValue,e.add(n[t].value)),t--}else e.add(t.value);a&&(t.varName=t.value,e.has(t.value)||(t.originalValue=t.value,t.value=`ctx['${t.value}']`)),o++}for(const t of n)"SYMBOL"===t.type&&t.varName&&e.has(t.value)&&(t.originalValue=t.value,t.value=`_${t.value}`,t.isLocal=!0);return n}const Xe=new Map([["in "," in "]]);function Ye(t){return Ge(t).map((t=>Xe.get(t.value)||t.value)).join("")}const Ze=/\{\{.*?\}\}|\#\{.*?\}/g;function Je(t,e){let n=t.match(Ze);if(n&&n[0].length===t.length)return`(${e(t.slice(2,"{"===n[0][0]?-2:-1))})`;let o=t.replace(Ze,(t=>"${"+e(t.slice(2,"{"===t[0]?-2:-1))+"}"));return"`"+o+"`"}function Qe(t){return Je(t,Ye)}const tn=/\s+/g,en=document.implementation.createDocument(null,null,null),nn=new Set(["stop","capture","prevent","self","synthetic"]);let on={};function rn(t=""){return on[t]=(on[t]||0)+1,t+on[t]}function sn(t,e){switch(t){case"input":return"checked"===e||"indeterminate"===e||"value"===e||"readonly"===e||"readOnly"===e||"disabled"===e;case"option":return"selected"===e||"disabled"===e;case"textarea":return"value"===e||"readonly"===e||"readOnly"===e||"disabled"===e;case"select":return"value"===e||"disabled"===e;case"button":case"optgroup":return"disabled"===e}return!1}class ln{constructor(t,e){this.dynamicTagName=null,this.isRoot=!1,this.hasDynamicChildren=!1,this.children=[],this.data=[],this.childNumber=0,this.parentVar="",this.id=ln.nextBlockId++,this.varName="b"+this.id,this.blockName="block"+this.id,this.target=t,this.type=e}insertData(t,e="d"){const n=rn(e);return this.target.addLine(`let ${n} = ${t};`),this.data.push(n)-1}insert(t){this.currentDom?this.currentDom.appendChild(t):this.dom=t}generateExpr(t){if("block"===this.type){const t=this.children.length;let e=this.data.length?`[${this.data.join(", ")}]`:t?"[]":"";return t&&(e+=", ["+this.children.map((t=>t.varName)).join(", ")+"]"),this.dynamicTagName?`toggler(${this.dynamicTagName}, ${this.blockName}(${this.dynamicTagName})(${e}))`:`${this.blockName}(${e})`}return"list"===this.type?`list(c_block${this.id})`:t}asXmlString(){const t=en.createElement("t");return t.appendChild(this.dom),t.innerHTML}}function an(t,e){return Object.assign({block:null,index:0,forceNewBlock:!0,translate:t.translate,tKeyExpr:null,nameSpace:t.nameSpace,tModelSelectedExpr:t.tModelSelectedExpr},e)}ln.nextBlockId=1;class cn{constructor(t,e){this.indentLevel=0,this.loopLevel=0,this.code=[],this.hasRoot=!1,this.hasCache=!1,this.shouldProtectScope=!1,this.hasRefWrapper=!1,this.name=t,this.on=e||null}addLine(t,e){const n=new Array(this.indentLevel+2).join(" ");void 0===e?this.code.push(n+t):this.code.splice(e,0,n+t)}generateCode(){let t=[];t.push(`function ${this.name}(ctx, node, key = "") {`),this.shouldProtectScope&&(t.push(" ctx = Object.create(ctx);"),t.push(" ctx[isBoundary] = 1")),this.hasRefWrapper&&t.push(" let refWrapper = makeRefWrapper(this.__owl__);"),this.hasCache&&(t.push(" let cache = ctx.cache || {};"),t.push(" let nextCache = ctx.cache = {};"));for(let e of this.code)t.push(e);return this.hasRoot||t.push("return text('');"),t.push("}"),t.join("\n ")}currentKey(t){let e=this.loopLevel?`key${this.loopLevel}`:"key";return t.tKeyExpr&&(e=`${t.tKeyExpr} + ${e}`),e}}const hn=["label","title","placeholder","alt"],un=/^(\s*)([\s\S]+?)(\s*)$/;class dn{constructor(t,e){if(this.blocks=[],this.nextBlockId=1,this.isDebug=!1,this.targets=[],this.target=new cn("template"),this.translatableAttributes=hn,this.staticDefs=[],this.slotNames=new Set,this.helpers=new Set,this.translateFn=e.translateFn||(t=>t),e.translatableAttributes){const t=new Set(hn);for(let n of e.translatableAttributes)n.startsWith("-")?t.delete(n.slice(1)):t.add(n);this.translatableAttributes=[...t]}this.hasSafeContext=e.hasSafeContext||!1,this.dev=e.dev||!1,this.ast=t,this.templateName=e.name}generateCode(){const t=this.ast;this.isDebug=12===t.type,ln.nextBlockId=1,on={},this.compileAST(t,{block:null,index:0,forceNewBlock:!1,isLast:!0,translate:!0,tKeyExpr:null});let e=[" let { text, createBlock, list, multi, html, toggler, comment } = bdom;"];this.helpers.size&&e.push(`let { ${[...this.helpers].join(", ")} } = helpers;`),this.templateName&&e.push(`// Template name: "${this.templateName}"`);for(let{id:t,expr:n}of this.staticDefs)e.push(`const ${t} = ${n};`);if(this.blocks.length){e.push("");for(let t of this.blocks)if(t.dom){let n=t.asXmlString();n=n.replace(/\\/g,"\\\\").replace(/`/g,"\\`"),t.dynamicTagName?(n=n.replace(/^<\w+/,`<\${tag || '${t.dom.nodeName}'}`),n=n.replace(/\w+>$/,`\${tag || '${t.dom.nodeName}'}>`),e.push(`let ${t.blockName} = tag => createBlock(\`${n}\`);`)):e.push(`let ${t.blockName} = createBlock(\`${n}\`);`)}}if(this.targets.length)for(let t of this.targets)e.push(""),e=e.concat(t.generateCode());e.push(""),e=e.concat("return "+this.target.generateCode());const n=e.join("\n ");if(this.isDebug){const t=`[Owl Debug]\n${n}`;console.log(t)}return n}compileInNewTarget(t,e,n,o){const r=rn(t),i=this.target,s=new cn(r,o);return this.targets.push(s),this.target=s,this.compileAST(e,an(n)),this.target=i,r}addLine(t,e){this.target.addLine(t,e)}define(t,e){this.addLine(`const ${t} = ${e};`)}insertAnchor(t,e=t.children.length){const n=`block-child-${e}`,o=en.createElement(n);t.insert(o)}createBlock(t,e,n){const o=this.target.hasRoot,r=new ln(this.target,e);return o||(this.target.hasRoot=!0,r.isRoot=!0),t&&(t.children.push(r),"list"===t.type&&(r.parentVar=`c_block${t.id}`)),r}insertBlock(t,e,n){let o=e.generateExpr(t);if(e.parentVar){let t=this.target.currentKey(n);return this.helpers.add("withKey"),void this.addLine(`${e.parentVar}[${n.index}] = withKey(${o}, ${t});`)}n.tKeyExpr&&(o=`toggler(${n.tKeyExpr}, ${o})`),e.isRoot?(this.target.on&&(o=this.wrapWithEventCatcher(o,this.target.on)),this.addLine(`return ${o};`)):this.define(e.varName,o)}captureExpression(t,e=!1){if(!e&&!t.includes("=>"))return Ye(t);const n=Ge(t),o=new Map;return n.map((t=>{if(t.varName&&!t.isLocal){if(!o.has(t.varName)){const e=rn("v");o.set(t.varName,e),this.define(e,t.value)}t.value=o.get(t.varName)}return t.value})).join("")}translate(t){const e=un.exec(t);return e[1]+this.translateFn(e[2])+e[3]}compileAST(t,e){switch(t.type){case 1:return this.compileComment(t,e);case 0:return this.compileText(t,e);case 2:return this.compileTDomNode(t,e);case 4:return this.compileTEsc(t,e);case 8:return this.compileTOut(t,e);case 5:return this.compileTIf(t,e);case 9:return this.compileTForeach(t,e);case 10:return this.compileTKey(t,e);case 3:return this.compileMulti(t,e);case 7:return this.compileTCall(t,e);case 15:return this.compileTCallBlock(t,e);case 6:return this.compileTSet(t,e);case 11:return this.compileComponent(t,e);case 12:return this.compileDebug(t,e);case 13:return this.compileLog(t,e);case 14:return this.compileTSlot(t,e);case 16:return this.compileTTranslation(t,e);case 17:return this.compileTPortal(t,e)}}compileDebug(t,e){return this.addLine("debugger;"),t.content?this.compileAST(t.content,e):null}compileLog(t,e){return this.addLine(`console.log(${Ye(t.expr)});`),t.content?this.compileAST(t.content,e):null}compileComment(t,e){let{block:n,forceNewBlock:o}=e;if(!n||o)n=this.createBlock(n,"comment",e),this.insertBlock(`comment(\`${t.value}\`)`,n,{...e,forceNewBlock:o&&!n});else{const e=en.createComment(t.value);n.insert(e)}return n.varName}compileText(t,e){let{block:n,forceNewBlock:o}=e,r=t.value;if(r&&!1!==e.translate&&(r=this.translate(r)),e.inPreTag||(r=r.replace(tn," ")),!n||o)n=this.createBlock(n,"text",e),this.insertBlock(`text(\`${r}\`)`,n,{...e,forceNewBlock:o&&!n});else{const e=0===t.type?en.createTextNode:en.createComment;n.insert(e.call(en,r))}return n.varName}generateHandlerCode(t,e){const n=t.split(".").slice(1).map((t=>{if(!nn.has(t))throw new i(`Unknown event modifier: '${t}'`);return`"${t}"`}));let o="";return n.length&&(o=`${n.join(",")}, `),`[${o}${this.captureExpression(e)}, ctx]`}compileTDomNode(t,e){let{block:n,forceNewBlock:o}=e;const r=!n||o||null!==t.dynamicTag||t.ns;let i=this.target.code.length;if(r&&((t.dynamicTag||e.tKeyExpr||t.ns)&&e.block&&this.insertAnchor(e.block),n=this.createBlock(n,"block",e),this.blocks.push(n),t.dynamicTag)){const e=rn("tag");this.define(e,Ye(t.dynamicTag)),n.dynamicTagName=e}const s={};for(let o in t.attrs){let r,i;if(o.startsWith("t-attf")){r=Qe(t.attrs[o]);const e=n.insertData(r,"attr");i=o.slice(7),s["block-attribute-"+e]=i}else if(o.startsWith("t-att"))if(i="t-att"===o?null:o.slice(6),r=Ye(t.attrs[o]),i&&sn(t.tag,i)){"readonly"===i&&(i="readOnly"),r="value"===i?`new String((${r}) === 0 ? 0 : ((${r}) || ""))`:`new Boolean(${r})`;s[`block-property-${n.insertData(r,"prop")}`]=i}else{const t=n.insertData(r,"attr");"t-att"===o?s["block-attributes"]=String(t):s[`block-attribute-${t}`]=i}else this.translatableAttributes.includes(o)?s[o]=this.translateFn(t.attrs[o]):(r=`"${t.attrs[o]}"`,i=o,s[o]=t.attrs[o]);if("value"===i&&e.tModelSelectedExpr){s[`block-attribute-${n.insertData(`${e.tModelSelectedExpr} === ${r}`,"attr")}`]="selected"}}let l;if(t.model){const{hasDynamicChildren:e,baseExpr:o,expr:r,eventType:i,shouldNumberize:a,shouldTrim:c,targetAttr:h,specialInitTargetAttr:u}=t.model,d=Ye(o),f=rn("bExpr");this.define(f,d);const p=Ye(r),m=rn("expr");this.define(m,p);const b=`${f}[${m}]`;let g;if(u){let e=h in s&&`'${s[h]}'`;if(!e&&t.attrs){const n=t.attrs[`t-att-${h}`];n&&(e=Ye(n))}g=n.insertData(`${b} === ${e}`,"prop"),s[`block-property-${g}`]=u}else if(e){l=`${rn("bValue")}`,this.define(l,b)}else g=n.insertData(`${b}`,"prop"),s[`block-property-${g}`]=h;this.helpers.add("toNumber");let y=`ev.target.${h}`;y=c?`${y}.trim()`:y,y=a?`toNumber(${y})`:y;const v=`[(ev) => { ${b} = ${y}; }]`;g=n.insertData(v,"hdlr"),s[`block-handler-${g}`]=i}for(let e in t.on){const o=this.generateHandlerCode(e,t.on[e]);s[`block-handler-${n.insertData(o,"hdlr")}`]=e}if(t.ref){this.dev&&(this.helpers.add("makeRefWrapper"),this.target.hasRefWrapper=!0);const e=Ze.test(t.ref);let o=`\`${t.ref}\``;e&&(o=Je(t.ref,(t=>this.captureExpression(t,!0))));let r=`(el) => this.__owl__.setRef((${o}), el)`;this.dev&&(r=`refWrapper(${o}, ${r})`);const i=n.insertData(r,"ref");s["block-ref"]=String(i)}const a=t.ns||e.nameSpace,c=a?en.createElementNS(a,t.tag):en.createElement(t.tag);for(const[t,e]of Object.entries(s))"class"===t&&""===e||c.setAttribute(t,e);if(n.insert(c),t.content.length){const o=n.currentDom;n.currentDom=c;const r=t.content;for(let o=0;o<r.length;o++){const i=t.content[o],s=an(e,{block:n,index:n.childNumber,forceNewBlock:!1,isLast:e.isLast&&o===r.length-1,tKeyExpr:e.tKeyExpr,nameSpace:a,tModelSelectedExpr:l,inPreTag:e.inPreTag||"pre"===t.tag});this.compileAST(i,s)}n.currentDom=o}if(r&&(this.insertBlock(`${n.blockName}(ddd)`,n,e),n.children.length&&n.hasDynamicChildren)){const t=this.target.code,e=n.children.slice();let o=e.shift();for(let n=i;n<t.length&&(!t[n].trimStart().startsWith(`const ${o.varName} `)||(t[n]=t[n].replace(`const ${o.varName}`,o.varName),o=e.shift(),o));n++);this.addLine(`let ${n.children.map((t=>t.varName)).join(", ")};`,i)}return n.varName}compileTEsc(t,e){let n,{block:o,forceNewBlock:r}=e;if("0"===t.expr?(this.helpers.add("zero"),n="ctx[zero]"):(n=Ye(t.expr),t.defaultValue&&(this.helpers.add("withDefault"),n=`withDefault(${n}, \`${t.defaultValue}\`)`)),!o||r)o=this.createBlock(o,"text",e),this.insertBlock(`text(${n})`,o,{...e,forceNewBlock:r&&!o});else{const t=o.insertData(n,"txt"),e=en.createElement(`block-text-${t}`);o.insert(e)}return o.varName}compileTOut(t,e){let n,{block:o}=e;if(o&&this.insertAnchor(o),o=this.createBlock(o,"html",e),"0"===t.expr)this.helpers.add("zero"),n="ctx[zero]";else if(t.body){let o=null;o=ln.nextBlockId;const r=an(e);this.compileAST({type:3,content:t.body},r),this.helpers.add("safeOutput"),n=`safeOutput(${Ye(t.expr)}, b${o})`}else this.helpers.add("safeOutput"),n=`safeOutput(${Ye(t.expr)})`;return this.insertBlock(n,o,e),o.varName}compileTIfBranch(t,e,n){this.target.indentLevel++;let o=e.children.length;this.compileAST(t,an(n,{block:e,index:n.index})),e.children.length>o&&this.insertAnchor(e,o),this.target.indentLevel--}compileTIf(t,e,n){let{block:o,forceNewBlock:r}=e;const i=this.target.code.length,s=!o||"multi"!==o.type&&r;if(o&&(o.hasDynamicChildren=!0),(!o||"multi"!==o.type&&r)&&(o=this.createBlock(o,"multi",e)),this.addLine(`if (${Ye(t.condition)}) {`),this.compileTIfBranch(t.content,o,e),t.tElif)for(let n of t.tElif)this.addLine(`} else if (${Ye(n.condition)}) {`),this.compileTIfBranch(n.content,o,e);if(t.tElse&&(this.addLine("} else {"),this.compileTIfBranch(t.tElse,o,e)),this.addLine("}"),s){if(o.children.length){const t=this.target.code,e=o.children.slice();let n=e.shift();for(let o=i;o<t.length&&(!t[o].trimStart().startsWith(`const ${n.varName} `)||(t[o]=t[o].replace(`const ${n.varName}`,n.varName),n=e.shift(),n));o++);this.addLine(`let ${o.children.map((t=>t.varName)).join(", ")};`,i)}const t=o.children.map((t=>t.varName)).join(", ");this.insertBlock(`multi([${t}])`,o,e)}return o.varName}compileTForeach(t,e){let{block:n}=e;n&&this.insertAnchor(n),n=this.createBlock(n,"list",e),this.target.loopLevel++;const o=`i${this.target.loopLevel}`;this.addLine("ctx = Object.create(ctx);");const r=`v_block${n.id}`,i=`k_block${n.id}`,s=`l_block${n.id}`,l=`c_block${n.id}`;let a;this.helpers.add("prepareList"),this.define(`[${i}, ${r}, ${s}, ${l}]`,`prepareList(${Ye(t.collection)});`),this.dev&&this.define(`keys${n.id}`,"new Set()"),this.addLine(`for (let ${o} = 0; ${o} < ${s}; ${o}++) {`),this.target.indentLevel++,this.addLine(`ctx[\`${t.elem}\`] = ${i}[${o}];`),t.hasNoFirst||this.addLine(`ctx[\`${t.elem}_first\`] = ${o} === 0;`),t.hasNoLast||this.addLine(`ctx[\`${t.elem}_last\`] = ${o} === ${i}.length - 1;`),t.hasNoIndex||this.addLine(`ctx[\`${t.elem}_index\`] = ${o};`),t.hasNoValue||this.addLine(`ctx[\`${t.elem}_value\`] = ${r}[${o}];`),this.define(`key${this.target.loopLevel}`,t.key?Ye(t.key):o),this.dev&&(this.helpers.add("OwlError"),this.addLine(`if (keys${n.id}.has(String(key${this.target.loopLevel}))) { throw new OwlError(\`Got duplicate key in t-foreach: \${key${this.target.loopLevel}}\`)}`),this.addLine(`keys${n.id}.add(String(key${this.target.loopLevel}));`)),t.memo&&(this.target.hasCache=!0,a=rn(),this.define(`memo${a}`,Ye(t.memo)),this.define(`vnode${a}`,`cache[key${this.target.loopLevel}];`),this.addLine(`if (vnode${a}) {`),this.target.indentLevel++,this.addLine(`if (shallowEqual(vnode${a}.memo, memo${a})) {`),this.target.indentLevel++,this.addLine(`${l}[${o}] = vnode${a};`),this.addLine(`nextCache[key${this.target.loopLevel}] = vnode${a};`),this.addLine("continue;"),this.target.indentLevel--,this.addLine("}"),this.target.indentLevel--,this.addLine("}"));const c=an(e,{block:n,index:o});return this.compileAST(t.body,c),t.memo&&this.addLine(`nextCache[key${this.target.loopLevel}] = Object.assign(${l}[${o}], {memo: memo${a}});`),this.target.indentLevel--,this.target.loopLevel--,this.addLine("}"),e.isLast||this.addLine("ctx = ctx.__proto__;"),this.insertBlock("l",n,e),n.varName}compileTKey(t,e){const n=rn("tKey_");return this.define(n,Ye(t.expr)),e=an(e,{tKeyExpr:n,block:e.block,index:e.index}),this.compileAST(t.content,e)}compileMulti(t,e){let{block:n,forceNewBlock:o}=e;const r=!n||o;let i=this.target.code.length;if(r){let o=null;if(t.content.filter((t=>6!==t.type)).length<=1){for(let n of t.content){const t=this.compileAST(n,e);o=o||t}return o}n=this.createBlock(n,"multi",e)}let s=0;for(let o=0,r=t.content.length;o<r;o++){const i=t.content[o],l=6===i.type,a=an(e,{block:n,index:s,forceNewBlock:!l,isLast:e.isLast&&o===r-1});this.compileAST(i,a),l||s++}if(r){if(n.hasDynamicChildren&&n.children.length){const t=this.target.code,e=n.children.slice();let o=e.shift();for(let n=i;n<t.length&&(!t[n].trimStart().startsWith(`const ${o.varName} `)||(t[n]=t[n].replace(`const ${o.varName}`,o.varName),o=e.shift(),o));n++);this.addLine(`let ${n.children.map((t=>t.varName)).join(", ")};`,i)}const t=n.children.map((t=>t.varName)).join(", ");this.insertBlock(`multi([${t}])`,n,e)}return n.varName}compileTCall(t,e){let{block:n,forceNewBlock:o}=e,r=e.ctxVar||"ctx";t.context&&(r=rn("ctx"),this.addLine(`let ${r} = ${Ye(t.context)};`));const i=Ze.test(t.name),s=i?Qe(t.name):"`"+t.name+"`";if(n&&!o&&this.insertAnchor(n),n=this.createBlock(n,"multi",e),t.body){this.addLine(`${r} = Object.create(${r});`),this.addLine(`${r}[isBoundary] = 1;`),this.helpers.add("isBoundary");const n=an(e,{ctxVar:r}),o=this.compileMulti({type:3,content:t.body},n);o&&(this.helpers.add("zero"),this.addLine(`${r}[zero] = ${o};`))}const l=`key + \`${this.generateComponentKey()}\``;if(i){const t=rn("template");this.staticDefs.find((t=>"call"===t.id))||this.staticDefs.push({id:"call",expr:"app.callTemplate.bind(app)"}),this.define(t,s),this.insertBlock(`call(this, ${t}, ${r}, node, ${l})`,n,{...e,forceNewBlock:!n})}else{const t=rn("callTemplate_");this.staticDefs.push({id:t,expr:`app.getTemplate(${s})`}),this.insertBlock(`${t}.call(this, ${r}, node, ${l})`,n,{...e,forceNewBlock:!n})}return t.body&&!e.isLast&&this.addLine(`${r} = ${r}.__proto__;`),n.varName}compileTCallBlock(t,e){let{block:n,forceNewBlock:o}=e;return n&&(o||this.insertAnchor(n)),n=this.createBlock(n,"multi",e),this.insertBlock(Ye(t.name),n,{...e,forceNewBlock:!n}),n.varName}compileTSet(t,e){this.target.shouldProtectScope=!0,this.helpers.add("isBoundary").add("withDefault");const n=t.value?Ye(t.value||""):"null";if(t.body){this.helpers.add("LazyValue");const o={type:3,content:t.body};let r=`new LazyValue(${this.compileInNewTarget("value",o,e)}, ctx, this, node, ${this.target.currentKey(e)})`;r=t.value?r?`withDefault(${n}, ${r})`:n:r,this.addLine(`ctx[\`${t.name}\`] = ${r};`)}else{let o;if(t.defaultValue){const r=e.translate?this.translate(t.defaultValue):t.defaultValue;o=t.value?`withDefault(${n}, \`${r}\`)`:`\`${r}\``}else o=n;this.helpers.add("setContextValue"),this.addLine(`setContextValue(${e.ctxVar||"ctx"}, "${t.name}", ${o});`)}return null}generateComponentKey(){const t=[rn("__")];for(let e=0;e<this.target.loopLevel;e++)t.push(`\${key${e+1}}`);return t.join("__")}formatProp(t,e){if(e=this.captureExpression(e),t.includes(".")){let[n,o]=t.split(".");switch(t=n,o){case"bind":e=`(${e}).bind(this)`;break;case"alike":break;default:throw new i("Invalid prop suffix")}}return`${t=/^[a-z_]+$/i.test(t)?t:`'${t}'`}: ${e||void 0}`}formatPropObject(t){return Object.entries(t).map((([t,e])=>this.formatProp(t,e)))}getPropString(t,e){let n=`{${t.join(",")}}`;return e&&(n=`Object.assign({}, ${Ye(e)}${t.length?", "+n:""})`),n}compileComponent(t,e){let{block:n}=e;const o="slots"in(t.props||{}),r=t.props?this.formatPropObject(t.props):[];let i="";if(t.slots){let n="ctx";!this.target.loopLevel&&this.hasSafeContext||(n=rn("ctx"),this.helpers.add("capture"),this.define(n,"capture(ctx)"));let o=[];for(let r in t.slots){const i=t.slots[r],s=[];if(i.content){const t=this.compileInNewTarget("slot",i.content,e,i.on);s.push(`__render: ${t}.bind(this), __ctx: ${n}`)}const l=t.slots[r].scope;l&&s.push(`__scope: "${l}"`),t.slots[r].attrs&&s.push(...this.formatPropObject(t.slots[r].attrs));const a=`{${s.join(", ")}}`;o.push(`'${r}': ${a}`)}i=`{${o.join(", ")}}`}!i||t.dynamicProps||o||(this.helpers.add("markRaw"),r.push(`slots: markRaw(${i})`));let s,l=this.getPropString(r,t.dynamicProps);(i&&(t.dynamicProps||o)||this.dev)&&(s=rn("props"),this.define(s,l),l=s),i&&(t.dynamicProps||o)&&(this.helpers.add("markRaw"),this.addLine(`${s}.slots = markRaw(Object.assign(${i}, ${s}.slots))`));const a=this.generateComponentKey();let c;t.isDynamic?(c=rn("Comp"),this.define(c,Ye(t.name))):c=`\`${t.name}\``,this.dev&&this.addLine(`helpers.validateProps(${c}, ${s}, this);`),n&&(!1===e.forceNewBlock||e.tKeyExpr)&&this.insertAnchor(n);let h=`key + \`${a}\``;e.tKeyExpr&&(h=`${e.tKeyExpr} + ${h}`);let u=rn("comp");const d=[];for(let e in t.props||{}){let[t,n]=e.split(".");n||d.push(`"${t}"`)}this.staticDefs.push({id:u,expr:`app.createComponent(${t.isDynamic?null:c}, ${!t.isDynamic}, ${!!t.slots}, ${!!t.dynamicProps}, [${d}])`}),t.isDynamic&&(h=`(${c}).name + ${h}`);let f=`${u}(${l}, ${h}, node, this, ${t.isDynamic?c:null})`;return t.isDynamic&&(f=`toggler(${c}, ${f})`),t.on&&(f=this.wrapWithEventCatcher(f,t.on)),n=this.createBlock(n,"multi",e),this.insertBlock(f,n,e),n.varName}wrapWithEventCatcher(t,e){this.helpers.add("createCatcher");let n=rn("catcher"),o={},r=[];for(let t in e){let n=rn("hdlr"),i=r.push(n)-1;o[t]=i;const s=this.generateHandlerCode(t,e[t]);this.define(n,s)}return this.staticDefs.push({id:n,expr:`createCatcher(${JSON.stringify(o)})`}),`${n}(${t}, [${r.join(",")}])`}compileTSlot(t,e){this.helpers.add("callSlot");let n,o,{block:r}=e,i=!1,s=!1;t.name.match(Ze)?(i=!0,s=!0,o=Qe(t.name)):(o="'"+t.name+"'",s=s||this.slotNames.has(t.name),this.slotNames.add(t.name));const l=t.attrs?t.attrs["t-props"]:null;t.attrs&&delete t.attrs["t-props"];let a=this.target.loopLevel?`key${this.target.loopLevel}`:"key";s&&(a=`${a} + \`${this.generateComponentKey()}\``);const c=t.attrs?this.formatPropObject(t.attrs):[],h=this.getPropString(c,l);if(t.defaultContent){n=`callSlot(ctx, node, ${a}, ${o}, ${i}, ${h}, ${this.compileInNewTarget("defaultContent",t.defaultContent,e)}.bind(this))`}else if(i){let t=rn("slot");this.define(t,o),n=`toggler(${t}, callSlot(ctx, node, ${a}, ${t}, ${i}, ${h}))`}else n=`callSlot(ctx, node, ${a}, ${o}, ${i}, ${h})`;return t.on&&(n=this.wrapWithEventCatcher(n,t.on)),r&&this.insertAnchor(r),r=this.createBlock(r,"multi",e),this.insertBlock(n,r,{...e,forceNewBlock:!1}),r.varName}compileTTranslation(t,e){return t.content?this.compileAST(t.content,Object.assign({},e,{translate:!1})):null}compileTPortal(t,e){this.staticDefs.find((t=>"Portal"===t.id))||this.staticDefs.push({id:"Portal",expr:"app.Portal"});let{block:n}=e;const o=this.compileInNewTarget("slot",t.content,e),r=this.generateComponentKey();let i="ctx";!this.target.loopLevel&&this.hasSafeContext||(i=rn("ctx"),this.helpers.add("capture"),this.define(i,"capture(ctx)"));let s=rn("comp");this.staticDefs.push({id:s,expr:"app.createComponent(null, false, true, false, false)"});const l=`${s}({target: ${Ye(t.target)},slots: {'default': {__render: ${o}.bind(this), __ctx: ${i}}}}, key + \`${r}\`, node, ctx, Portal)`;return n&&this.insertAnchor(n),n=this.createBlock(n,"multi",e),this.insertBlock(l,n,{...e,forceNewBlock:!1}),n.varName}}const fn=new WeakMap;function pn(t){var e;(function(t){let e=t.querySelectorAll("[t-elif], [t-else]");for(let t=0,n=e.length;t<n;t++){let n=e[t],o=n.previousElementSibling,r=t=>o.getAttribute(t),s=t=>+!!n.getAttribute(t);if(!o||!r("t-if")&&!r("t-elif"))throw new i("t-elif and t-else directives must be preceded by a t-if or t-elif directive");{if(r("t-foreach"))throw new i("t-if cannot stay at the same level as t-foreach when using t-elif or t-else");if(["t-if","t-elif","t-else"].map(s).reduce((function(t,e){return t+e}))>1)throw new i("Only one conditional branching directive is allowed per node");let t;for(;(t=n.previousSibling)!==o;){if(t.nodeValue.trim().length&&8!==t.nodeType)throw new i("text is not allowed between branching directives");t.remove()}}}})(e=t),function(t){for(const e of["t-esc","t-out"]){const n=[...t.querySelectorAll(`[${e}]`)].filter((t=>t.tagName[0]===t.tagName[0].toUpperCase()||t.hasAttribute("t-component")));for(const t of n){if(t.childNodes.length)throw new i(`Cannot have ${e} on a component that already has content`);const n=t.getAttribute(e);t.removeAttribute(e);const o=t.ownerDocument.createElement("t");null!=n&&o.setAttribute(e,n),t.appendChild(o)}}}(e);return mn(t,{inPreTag:!1})||{type:0,value:""}}function mn(t,e){return t instanceof Element?function(t,e){if(t.hasAttribute("t-debug"))return t.removeAttribute("t-debug"),{type:12,content:mn(t,e)};if(t.hasAttribute("t-log")){const n=t.getAttribute("t-log");return t.removeAttribute("t-log"),{type:13,expr:n,content:mn(t,e)}}return null}(t,e)||function(t,e){if(!t.hasAttribute("t-foreach"))return null;const n=t.outerHTML,o=t.getAttribute("t-foreach");t.removeAttribute("t-foreach");const r=t.getAttribute("t-as")||"";t.removeAttribute("t-as");const s=t.getAttribute("t-key");if(!s)throw new i(`"Directive t-foreach should always be used with a t-key!" (expression: t-foreach="${o}" t-as="${r}")`);t.removeAttribute("t-key");const l=t.getAttribute("t-memo")||"";t.removeAttribute("t-memo");const a=mn(t,e);if(!a)return null;const c=!n.includes("t-call"),h=c&&!n.includes(`${r}_first`),u=c&&!n.includes(`${r}_last`),d=c&&!n.includes(`${r}_index`),f=c&&!n.includes(`${r}_value`);return{type:9,collection:o,elem:r,body:a,memo:l,key:s,hasNoFirst:h,hasNoLast:u,hasNoIndex:d,hasNoValue:f}}(t,e)||function(t,e){if(!t.hasAttribute("t-if"))return null;const n=t.getAttribute("t-if");t.removeAttribute("t-if");const o=mn(t,e)||{type:0,value:""};let r=t.nextElementSibling;const i=[];for(;r&&r.hasAttribute("t-elif");){const t=r.getAttribute("t-elif");r.removeAttribute("t-elif");const n=mn(r,e),o=r.nextElementSibling;r.remove(),r=o,n&&i.push({condition:t,content:n})}let s=null;r&&r.hasAttribute("t-else")&&(r.removeAttribute("t-else"),s=mn(r,e),r.remove());return{type:5,condition:n,content:o,tElif:i.length?i:null,tElse:s}}(t,e)||function(t,e){if(!t.hasAttribute("t-portal"))return null;const n=t.getAttribute("t-portal");t.removeAttribute("t-portal");const o=mn(t,e);if(!o)return{type:0,value:""};return{type:17,target:n,content:o}}(t,e)||function(t,e){if(!t.hasAttribute("t-call"))return null;const n=t.getAttribute("t-call"),o=t.getAttribute("t-call-context");if(t.removeAttribute("t-call"),t.removeAttribute("t-call-context"),"t"!==t.tagName){const r=mn(t,e),i={type:7,name:n,body:null,context:o};if(r&&2===r.type)return r.content=[i],r;if(r&&11===r.type)return{...r,slots:{default:{content:i,scope:null,on:null,attrs:null}}}}const r=$n(t,e);return{type:7,name:n,body:r.length?r:null,context:o}}(t,e)||function(t,e){if(!t.hasAttribute("t-call-block"))return null;const n=t.getAttribute("t-call-block");return{type:15,name:n}}(t)||function(t,e){if(!t.hasAttribute("t-esc"))return null;const n=t.getAttribute("t-esc");t.removeAttribute("t-esc");const o={type:4,expr:n,defaultValue:t.textContent||""};let r=t.getAttribute("t-ref");t.removeAttribute("t-ref");const i=mn(t,e);if(!i)return o;if(2===i.type)return{...i,ref:r,content:[o]};return o}(t,e)||function(t,e){if(!t.hasAttribute("t-out")&&!t.hasAttribute("t-raw"))return null;t.hasAttribute("t-raw")&&console.warn('t-raw has been deprecated in favor of t-out. If the value to render is not wrapped by the "markup" function, it will be escaped');const n=t.getAttribute("t-out")||t.getAttribute("t-raw");t.removeAttribute("t-out"),t.removeAttribute("t-raw");const o={type:8,expr:n,body:null},r=t.getAttribute("t-ref");t.removeAttribute("t-ref");const i=mn(t,e);if(!i)return o;if(2===i.type)return o.body=i.content.length?i.content:null,{...i,ref:r,content:[o]};return o}(t,e)||function(t,e){if(!t.hasAttribute("t-key"))return null;const n=t.getAttribute("t-key");t.removeAttribute("t-key");const o=mn(t,e);if(!o)return null;return{type:10,expr:n,content:o}}(t,e)||function(t,e){if("off"!==t.getAttribute("t-translation"))return null;return t.removeAttribute("t-translation"),{type:16,content:mn(t,e)}}(t,e)||function(t,e){if(!t.hasAttribute("t-slot"))return null;const n=t.getAttribute("t-slot");t.removeAttribute("t-slot");let o=null,r=null;for(let e of t.getAttributeNames()){const n=t.getAttribute(e);e.startsWith("t-on-")?(r=r||{},r[e.slice(5)]=n):(o=o||{},o[e]=n)}return{type:14,name:n,attrs:o,on:r,defaultContent:xn(t,e)}}(t,e)||function(t,e){let n=t.tagName;const o=n[0];let r=t.hasAttribute("t-component");if(r&&"t"!==n)throw new i(`Directive 't-component' can only be used on <t> nodes (used on a <${n}>)`);if(o!==o.toUpperCase()&&!r)return null;r&&(n=t.getAttribute("t-component"),t.removeAttribute("t-component"));const s=t.getAttribute("t-props");t.removeAttribute("t-props");const l=t.getAttribute("t-slot-scope");t.removeAttribute("t-slot-scope");let a=null,c=null;for(let e of t.getAttributeNames()){const n=t.getAttribute(e);if(e.startsWith("t-")){if(!e.startsWith("t-on-")){const t=wn.get(e.split("-").slice(0,2).join("-"));throw new i(t||`unsupported directive on Component: ${e}`)}a=a||{},a[e.slice(5)]=n}else c=c||{},c[e]=n}let h=null;if(t.hasChildNodes()){const n=t.cloneNode(!0),o=Array.from(n.querySelectorAll("[t-set-slot]"));for(let t of o){if("t"!==t.tagName)throw new i(`Directive 't-set-slot' can only be used on <t> nodes (used on a <${t.tagName}>)`);const o=t.getAttribute("t-set-slot");let r=t.parentElement,s=!1;for(;r&&r!==n;){if(r.hasAttribute("t-component")||r.tagName[0]===r.tagName[0].toUpperCase()){s=!0;break}r=r.parentElement}if(s||!r)continue;t.removeAttribute("t-set-slot"),t.remove();const l=mn(t,e);let a=null,c=null,u=null;for(let e of t.getAttributeNames()){const n=t.getAttribute(e);"t-slot-scope"!==e?e.startsWith("t-on-")?(a=a||{},a[e.slice(5)]=n):(c=c||{},c[e]=n):u=n}h=h||{},h[o]={content:l,on:a,attrs:c,scope:u}}const r=xn(n,e);h=h||{},r&&!h.default&&(h.default={content:r,on:a,attrs:null,scope:l})}return{type:11,name:n,isDynamic:r,dynamicProps:s,props:c,slots:h,on:a}}(t,e)||function(t,e){const{tagName:n}=t,o=t.getAttribute("t-tag");if(t.removeAttribute("t-tag"),"t"===n&&!o)return null;if(n.startsWith("block-"))throw new i(`Invalid tag name: '${n}'`);e=Object.assign({},e),"pre"===n&&(e.inPreTag=!0);let r=!e.nameSpace&&vn.has(n)?"http://www.w3.org/2000/svg":null;const s=t.getAttribute("t-ref");t.removeAttribute("t-ref");const l=t.getAttributeNames();let a=null,c=null,h=null;for(let o of l){const s=t.getAttribute(o);if("t-on"===o||"t-on-"===o)throw new i("Missing event name with t-on directive");if(o.startsWith("t-on-"))c=c||{},c[o.slice(5)]=s;else if(o.startsWith("t-model")){if(!["input","select","textarea"].includes(n))throw new i("The t-model directive only works with <input>, <textarea> and <select>");let r,l;if(gn.test(s)){const t=s.lastIndexOf(".");r=s.slice(0,t),l=`'${s.slice(t+1)}'`}else{if(!yn.test(s))throw new i(`Invalid t-model expression: "${s}" (it should be assignable)`);{const t=s.lastIndexOf("[");r=s.slice(0,t),l=s.slice(t+1,-1)}}const a=t.getAttribute("type"),c="input"===n,u="select"===n,d=c&&"checkbox"===a,f=c&&"radio"===a,p=o.includes(".trim"),m=p||o.includes(".lazy");h={baseExpr:r,expr:l,targetAttr:d?"checked":"value",specialInitTargetAttr:f?"checked":null,eventType:f?"click":u||m?"change":"input",hasDynamicChildren:!1,shouldTrim:p,shouldNumberize:o.includes(".number")},u&&((e=Object.assign({},e)).tModelInfo=h)}else{if(o.startsWith("block-"))throw new i(`Invalid attribute: '${o}'`);if("xmlns"===o)r=s;else if("t-name"!==o){if(o.startsWith("t-")&&!o.startsWith("t-att"))throw new i(`Unknown QWeb directive: '${o}'`);const t=e.tModelInfo;t&&["t-att-value","t-attf-value"].includes(o)&&(t.hasDynamicChildren=!0),a=a||{},a[o]=s}}}r&&(e.nameSpace=r);const u=$n(t,e);return{type:2,tag:n,dynamicTag:o,attrs:a,on:c,ref:s,content:u,model:h,ns:r}}(t,e)||function(t,e){if(!t.hasAttribute("t-set"))return null;const n=t.getAttribute("t-set"),o=t.getAttribute("t-value")||null,r=t.innerHTML===t.textContent&&t.textContent||null;let i=null;t.textContent!==t.innerHTML&&(i=$n(t,e));return{type:6,name:n,value:o,defaultValue:r,body:i}}(t,e)||function(t,e){if("t"!==t.tagName)return null;return xn(t,e)}(t,e):function(t,e){if(t.nodeType===Node.TEXT_NODE){let n=t.textContent||"";return e.inPreTag||!bn.test(n)||n.trim()?{type:0,value:n}:null}if(t.nodeType===Node.COMMENT_NODE)return{type:1,value:t.textContent||""};return null}(t,e)}const bn=/[\r\n]/;const gn=/\.[\w_]+\s*$/,yn=/\[[^\[]+\]\s*$/,vn=new Set(["svg","g","path"]);const wn=new Map([["t-ref","t-ref is no longer supported on components. Consider exposing only the public part of the component's API through a callback prop."],["t-att","t-att makes no sense on component: props are already treated as expressions"],["t-attf","t-attf is not supported on components: use template strings for string interpolation in props"]]);function $n(t,e){const n=[];for(let o of t.childNodes){const t=mn(o,e);t&&(3===t.type?n.push(...t.content):n.push(t))}return n}function xn(t,e){const n=$n(t,e);switch(n.length){case 0:return null;case 1:return n[0];default:return{type:3,content:n}}}function Nn(t,e={}){const n=function(t){if("string"==typeof t)return pn(Pe(`<t>${t}</t>`).firstChild);let e=fn.get(t);return e||(e=pn(t.cloneNode(!0)),fn.set(t,e)),e}(t),o=t instanceof Node?!(t instanceof Element)||null===t.querySelector("[t-set], [t-call]"):!t.includes("t-set")&&!t.includes("t-call"),r=new dn(n,{...e,hasSafeContext:o}).generateCode();try{return new Function("app, bdom, helpers",r)}catch(t){const{name:n}=e,o=new i(`Failed to compile ${n?`template "${n}"`:"anonymous template"}: ${t.message}\n\ngenerated code:\nfunction(app, bdom, helpers) {\n${r}\n}`);throw o.cause=t,o}}class kn{constructor(){this.tasks=new Set,this.frame=0,this.delayedRenders=[],this.cancelledNodes=new Set,this.requestAnimationFrame=kn.requestAnimationFrame}addFiber(t){this.tasks.add(t.root)}scheduleDestroy(t){this.cancelledNodes.add(t),0===this.frame&&(this.frame=this.requestAnimationFrame((()=>this.processTasks())))}flush(){if(this.delayedRenders.length){let t=this.delayedRenders;this.delayedRenders=[];for(let e of t)e.root&&3!==e.node.status&&e.node.fiber===e&&e.render()}0===this.frame&&(this.frame=this.requestAnimationFrame((()=>this.processTasks())))}processTasks(){this.frame=0;for(let t of this.cancelledNodes)t._destroy();this.cancelledNodes.clear();for(let t of this.tasks)this.processFiber(t);for(let t of this.tasks)3===t.node.status&&this.tasks.delete(t)}processFiber(t){if(t.root!==t)return void this.tasks.delete(t);const e=Et.has(t);e&&0!==t.counter?this.tasks.delete(t):3!==t.node.status?0===t.counter&&(e||t.complete(),this.tasks.delete(t)):this.tasks.delete(t)}}kn.requestAnimationFrame=window.requestAnimationFrame.bind(window);let En=!1;const An=new Set;window.__OWL_DEVTOOLS__||(window.__OWL_DEVTOOLS__={apps:An,Fiber:Ot,RootFiber:Dt,toRaw:Ht,reactive:Qt});class Tn extends Me{constructor(t,e={}){super(e),this.scheduler=new kn,this.root=null,this.name=e.name||"",this.Root=t,An.add(this),e.test&&(this.dev=!0),this.warnIfNoStaticProps=e.warnIfNoStaticProps||!1,!this.dev||e.test||En||(console.info(`Owl is running in 'dev' mode.\n\nThis is not suitable for production use.\nSee https://github.com/odoo/owl/blob/${window.owl?window.owl.__info__.hash:"master"}/doc/reference/app.md#configuration for more information.`),En=!0);const n=e.env||{},o=Object.getOwnPropertyDescriptors(n);this.env=Object.freeze(Object.create(Object.getPrototypeOf(n),o)),this.props=e.props||{}}mount(t,e){Tn.validateTarget(t),this.dev&&Be(this.Root,this.props,{__owl__:{app:this}});const n=this.makeNode(this.Root,this.props),o=this.mountNode(n,t,e);return this.root=n,o}makeNode(t,e){return new de(t,e,this,null,null)}mountNode(t,e,n){const o=new Promise(((e,n)=>{let o=!1;t.mounted.push((()=>{e(t.component),o=!0}));let r=At.get(t);r||(r=[],At.set(t,r)),r.unshift((t=>{throw o||n(t),t}))}));return t.mountComponent(e,n),o}destroy(){this.root&&(this.root.destroy(),this.scheduler.processTasks()),An.delete(this)}createComponent(t,e,n,o,r){const s=!e;let l;const a=0===r.length;l=n?(t,e)=>!0:o?function(t,e){for(let n in t)if(t[n]!==e[n])return!0;return Object.keys(t).length!==Object.keys(e).length}:a?(t,e)=>!1:function(t,e){for(let n of r)if(t[n]!==e[n])return!0;return!1};const c=de.prototype.updateAndRender,h=de.prototype.initiateRender;return(n,o,r,a,u)=>{let d=r.children,f=d[o];s&&f&&f.component.constructor!==u&&(f=void 0);const p=r.fiber;if(f)(l(f.props,n)||p.deep||f.forceNextRender)&&(f.forceNextRender=!1,c.call(f,n,p));else{if(e){const e=a.constructor.components;if(!e)throw new i(`Cannot find the definition of component "${t}", missing static components key in parent`);if(!(u=e[t]))throw new i(`Cannot find the definition of component "${t}"`);if(!(u.prototype instanceof ye))throw new i(`"${t}" is not a Component. It must inherit from the Component class`)}f=new de(u,n,this,r,o),d[o]=f,h.call(f,new Ot(f,p))}return p.childrenMap[o]=f,f}}handleError(...t){return _t(...t)}}Tn.validateTarget=function(t){const e=t&&t.ownerDocument;if(e){const n=e.defaultView.HTMLElement;if(t instanceof n||t instanceof ShadowRoot){if(!e.body.contains(t instanceof n?t:t.host))throw new i("Cannot mount a component on a detached dom node");return}}throw new i("Cannot mount component: the target is not a valid DOM element")},Tn.apps=An,Tn.version="2.2.8";function _n(t,e){const n=Object.create(t),o=Object.getOwnPropertyDescriptors(e);return Object.freeze(Object.defineProperties(n,o))}function Sn(t){const e=ae();e.childEnv=_n(e.childEnv,t)}n.shouldNormalizeDom=!1,n.mainEventHandler=(t,n,o)=>{const{data:r,modifiers:s}=e(t);t=r;let l=!1;if(s.length){let t=!1;const e=n.target===o;for(const o of s)switch(o){case"self":if(t=!0,e)continue;return l;case"prevent":(t&&e||!t)&&n.preventDefault();continue;case"stop":(t&&e||!t)&&n.stopPropagation(),l=!0;continue}}if(Object.hasOwnProperty.call(t,0)){const e=t[0];if("function"!=typeof e)throw new i(`Invalid handler (expected a function, received: '${e}')`);let o=t[1]?t[1].__owl__:null;o&&1!==o.status||e.call(o?o.component:null,n)}return l};const Cn={config:n,mount:kt,patch:function(t,e,n=!1){t.patch(e,n)},remove:function(t,e=!1){e&&t.beforeRemove(),t.remove()},list:gt,multi:P,text:H,toggler:r,createBlock:ot,html:Nt,comment:U},On={version:Tn.version};Me.prototype._compileTemplate=function(t,e){return Nn(e,{name:t,dev:this.dev,translateFn:this.translateFn,translatableAttributes:this.translatableAttributes})},t.App=Tn,t.Component=ye,t.EventBus=N,t.OwlError=i,t.__info__=On,t.blockDom=Cn,t.loadFile=async function(t){const e=await fetch(t);if(!e.ok)throw new i("Error while fetching xml templates");return await e.text()},t.markRaw=zt,t.markup=function(t){return new k(t)},t.mount=async function(t,e,n={}){return new Tn(t,n).mount(e,n)},t.onError=function(t){const e=ae();let n=At.get(e);n||(n=[],At.set(e,n)),n.push(t.bind(e.component))},t.onMounted=me,t.onPatched=be,t.onRendered=function(t){const e=ae(),n=e.renderFn,o=e.app.dev?pe:t=>t;t=o(t.bind(e.component),"onRendered"),e.renderFn=()=>{const e=n();return t(),e}},t.onWillDestroy=function(t){const e=ae(),n=e.app.dev?pe:t=>t;e.willDestroy.push(n(t.bind(e.component),"onWillDestroy"))},t.onWillPatch=function(t){const e=ae(),n=e.app.dev?pe:t=>t;e.willPatch.unshift(n(t.bind(e.component),"onWillPatch"))},t.onWillRender=function(t){const e=ae(),n=e.renderFn,o=e.app.dev?pe:t=>t;t=o(t.bind(e.component),"onWillRender"),e.renderFn=()=>(t(),n())},t.onWillStart=function(t){const e=ae(),n=e.app.dev?pe:t=>t;e.willStart.push(n(t.bind(e.component),"onWillStart"))},t.onWillUnmount=ge,t.onWillUpdateProps=function(t){const e=ae(),n=e.app.dev?pe:t=>t;e.willUpdateProps.push(n(t.bind(e.component),"onWillUpdateProps"))},t.reactive=Qt,t.status=function(t){switch(t.__owl__.status){case 0:return"new";case 2:return"cancelled";case 1:return"mounted";case 3:return"destroyed"}},t.toRaw=Ht,t.useChildSubEnv=Sn,t.useComponent=function(){return le.component},t.useEffect=function(t,e=(()=>[NaN])){let n,o;me((()=>{o=e(),n=t(...o)})),be((()=>{const r=e();r.some(((t,e)=>t!==o[e]))&&(o=r,n&&n(),n=t(...o))})),ge((()=>n&&n()))},t.useEnv=function(){return ae().component.env},t.useExternalListener=function(t,e,n,o){const r=ae(),i=n.bind(r.component);me((()=>t.addEventListener(e,i,o))),ge((()=>t.removeEventListener(e,i,o)))},t.useRef=function(t){const e=ae().refs;return{get el(){const n=e[t];return x(n)?n:null}}},t.useState=ue,t.useSubEnv=function(t){const e=ae();e.component.env=_n(e.component.env,t),Sn(t)},t.validate=function(t,e){let n=_e(t,e);if(n.length)throw new i("Invalid object: "+n.join(", "))},t.validateType=Se,t.whenReady=function(t){return new Promise((function(t){"loading"!==document.readyState?t(!0):document.addEventListener("DOMContentLoaded",t,!1)})).then(t||function(){})},t.xml=We,Object.defineProperty(t,"__esModule",{value:!0}),On.date="2024-01-12T10:02:46.131Z",On.hash="7b454da",On.url="https://github.com/odoo/owl"}(this.owl=this.owl||{});
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Parses an XML string into an XML document, throwing errors on parser errors
|
|
3
|
+
* instead of returning an XML document containing the parseerror.
|
|
4
|
+
*
|
|
5
|
+
* @param xml the string to parse
|
|
6
|
+
* @returns an XML document corresponding to the content of the string
|
|
7
|
+
*/
|
|
8
|
+
export declare function parseXML(xml: string): XMLDocument;
|
package/dist/types/owl.d.ts
CHANGED
|
@@ -124,7 +124,7 @@ declare function mount$1(vnode: VNode, fixture: HTMLElement, afterNode?: Node |
|
|
|
124
124
|
declare function patch(vnode1: VNode, vnode2: VNode, withBeforeRemove?: boolean): void;
|
|
125
125
|
declare function remove(vnode: VNode, withBeforeRemove?: boolean): void;
|
|
126
126
|
|
|
127
|
-
declare type BaseType = typeof String | typeof Boolean | typeof Number | typeof Date | typeof Object | typeof Array | true | "*";
|
|
127
|
+
declare type BaseType = typeof String | typeof Boolean | typeof Number | typeof Date | typeof Object | typeof Array | typeof Function | true | "*";
|
|
128
128
|
interface TypeInfo {
|
|
129
129
|
type?: TypeDescription;
|
|
130
130
|
optional?: boolean;
|
|
@@ -339,7 +339,7 @@ interface StaticComponentProperties {
|
|
|
339
339
|
declare type ComponentConstructor<P extends Props = any, E = any> = (new (props: P, env: E, node: ComponentNode) => Component<P, E>) & StaticComponentProperties;
|
|
340
340
|
declare class Component<Props = any, Env = any> {
|
|
341
341
|
static template: string;
|
|
342
|
-
static props?:
|
|
342
|
+
static props?: Schema;
|
|
343
343
|
static defaultProps?: any;
|
|
344
344
|
props: Props;
|
|
345
345
|
env: Env;
|
|
@@ -393,10 +393,10 @@ declare function compile(template: string | Element, options?: CompileOptions):
|
|
|
393
393
|
declare class Portal extends Component {
|
|
394
394
|
static template: string;
|
|
395
395
|
static props: {
|
|
396
|
-
target: {
|
|
397
|
-
type: StringConstructor;
|
|
396
|
+
readonly target: {
|
|
397
|
+
readonly type: StringConstructor;
|
|
398
398
|
};
|
|
399
|
-
slots:
|
|
399
|
+
readonly slots: true;
|
|
400
400
|
};
|
|
401
401
|
setup(): void;
|
|
402
402
|
}
|
|
@@ -405,7 +405,8 @@ interface TemplateSetConfig {
|
|
|
405
405
|
dev?: boolean;
|
|
406
406
|
translatableAttributes?: string[];
|
|
407
407
|
translateFn?: (s: string) => string;
|
|
408
|
-
templates?: string | Document
|
|
408
|
+
templates?: string | Document | Record<string, string>;
|
|
409
|
+
getTemplate?: (s: string) => Element | Function | string | void;
|
|
409
410
|
}
|
|
410
411
|
declare class TemplateSet {
|
|
411
412
|
static registerTemplate(name: string, fn: TemplateFunction): void;
|
|
@@ -414,6 +415,7 @@ declare class TemplateSet {
|
|
|
414
415
|
templates: {
|
|
415
416
|
[name: string]: Template;
|
|
416
417
|
};
|
|
418
|
+
getRawTemplate?: (s: string) => Element | Function | string | void;
|
|
417
419
|
translateFn?: (s: string) => string;
|
|
418
420
|
translatableAttributes?: string[];
|
|
419
421
|
Portal: typeof Portal;
|
|
@@ -493,14 +495,14 @@ declare function useEnv<E extends Env>(): E;
|
|
|
493
495
|
*/
|
|
494
496
|
declare function useSubEnv(envExtension: Env): void;
|
|
495
497
|
declare function useChildSubEnv(envExtension: Env): void;
|
|
496
|
-
declare type EffectDeps<T extends
|
|
498
|
+
declare type EffectDeps<T extends unknown[]> = T | (T extends [...infer H, never] ? EffectDeps<H> : never);
|
|
497
499
|
/**
|
|
498
500
|
* @template T
|
|
499
501
|
* @param {...T} dependencies the dependencies computed by computeDependencies
|
|
500
502
|
* @returns {void|(()=>void)} a cleanup function that reverses the side
|
|
501
503
|
* effects of the effect callback.
|
|
502
504
|
*/
|
|
503
|
-
declare type Effect<T extends [
|
|
505
|
+
declare type Effect<T extends unknown[]> = (...dependencies: EffectDeps<T>) => void | (() => void);
|
|
504
506
|
/**
|
|
505
507
|
* This hook will run a callback when a component is mounted and patched, and
|
|
506
508
|
* will run a cleanup function before patching and before unmounting the
|
|
@@ -508,13 +510,13 @@ declare type Effect<T extends [...T]> = (...dependencies: EffectDeps<T>) => void
|
|
|
508
510
|
*
|
|
509
511
|
* @template T
|
|
510
512
|
* @param {Effect<T>} effect the effect to run on component mount and/or patch
|
|
511
|
-
* @param {()=>T} [computeDependencies=()=>[NaN]] a callback to compute
|
|
513
|
+
* @param {()=>[...T]} [computeDependencies=()=>[NaN]] a callback to compute
|
|
512
514
|
* dependencies that will decide if the effect needs to be cleaned up and
|
|
513
515
|
* run again. If the dependencies did not change, the effect will not run
|
|
514
516
|
* again. The default value returns an array containing only NaN because
|
|
515
517
|
* NaN !== NaN, which will cause the effect to rerun on every patch.
|
|
516
518
|
*/
|
|
517
|
-
declare function useEffect<T extends [
|
|
519
|
+
declare function useEffect<T extends unknown[]>(effect: Effect<T>, computeDependencies?: () => [...T]): void;
|
|
518
520
|
/**
|
|
519
521
|
* When a component needs to listen to DOM Events on element(s) that are not
|
|
520
522
|
* part of his hierarchy, we can use the `useExternalListener` hook.
|
|
@@ -14,7 +14,7 @@ interface StaticComponentProperties {
|
|
|
14
14
|
export declare type ComponentConstructor<P extends Props = any, E = any> = (new (props: P, env: E, node: ComponentNode) => Component<P, E>) & StaticComponentProperties;
|
|
15
15
|
export declare class Component<Props = any, Env = any> {
|
|
16
16
|
static template: string;
|
|
17
|
-
static props?:
|
|
17
|
+
static props?: Schema;
|
|
18
18
|
static defaultProps?: any;
|
|
19
19
|
props: Props;
|
|
20
20
|
env: Env;
|
|
@@ -18,14 +18,14 @@ export declare function useEnv<E extends Env>(): E;
|
|
|
18
18
|
*/
|
|
19
19
|
export declare function useSubEnv(envExtension: Env): void;
|
|
20
20
|
export declare function useChildSubEnv(envExtension: Env): void;
|
|
21
|
-
declare type EffectDeps<T extends
|
|
21
|
+
declare type EffectDeps<T extends unknown[]> = T | (T extends [...infer H, never] ? EffectDeps<H> : never);
|
|
22
22
|
/**
|
|
23
23
|
* @template T
|
|
24
24
|
* @param {...T} dependencies the dependencies computed by computeDependencies
|
|
25
25
|
* @returns {void|(()=>void)} a cleanup function that reverses the side
|
|
26
26
|
* effects of the effect callback.
|
|
27
27
|
*/
|
|
28
|
-
declare type Effect<T extends [
|
|
28
|
+
declare type Effect<T extends unknown[]> = (...dependencies: EffectDeps<T>) => void | (() => void);
|
|
29
29
|
/**
|
|
30
30
|
* This hook will run a callback when a component is mounted and patched, and
|
|
31
31
|
* will run a cleanup function before patching and before unmounting the
|
|
@@ -33,13 +33,13 @@ declare type Effect<T extends [...T]> = (...dependencies: EffectDeps<T>) => void
|
|
|
33
33
|
*
|
|
34
34
|
* @template T
|
|
35
35
|
* @param {Effect<T>} effect the effect to run on component mount and/or patch
|
|
36
|
-
* @param {()=>T} [computeDependencies=()=>[NaN]] a callback to compute
|
|
36
|
+
* @param {()=>[...T]} [computeDependencies=()=>[NaN]] a callback to compute
|
|
37
37
|
* dependencies that will decide if the effect needs to be cleaned up and
|
|
38
38
|
* run again. If the dependencies did not change, the effect will not run
|
|
39
39
|
* again. The default value returns an array containing only NaN because
|
|
40
40
|
* NaN !== NaN, which will cause the effect to rerun on every patch.
|
|
41
41
|
*/
|
|
42
|
-
export declare function useEffect<T extends [
|
|
42
|
+
export declare function useEffect<T extends unknown[]>(effect: Effect<T>, computeDependencies?: () => [...T]): void;
|
|
43
43
|
/**
|
|
44
44
|
* When a component needs to listen to DOM Events on element(s) that are not
|
|
45
45
|
* part of his hierarchy, we can use the `useExternalListener` hook.
|
|
@@ -6,10 +6,10 @@ export declare function portalTemplate(app: any, bdom: any, helpers: any): (ctx:
|
|
|
6
6
|
export declare class Portal extends Component {
|
|
7
7
|
static template: string;
|
|
8
8
|
static props: {
|
|
9
|
-
target: {
|
|
10
|
-
type: StringConstructor;
|
|
9
|
+
readonly target: {
|
|
10
|
+
readonly type: StringConstructor;
|
|
11
11
|
};
|
|
12
|
-
slots:
|
|
12
|
+
readonly slots: true;
|
|
13
13
|
};
|
|
14
14
|
setup(): void;
|
|
15
15
|
}
|
|
@@ -4,7 +4,8 @@ export interface TemplateSetConfig {
|
|
|
4
4
|
dev?: boolean;
|
|
5
5
|
translatableAttributes?: string[];
|
|
6
6
|
translateFn?: (s: string) => string;
|
|
7
|
-
templates?: string | Document
|
|
7
|
+
templates?: string | Document | Record<string, string>;
|
|
8
|
+
getTemplate?: (s: string) => Element | Function | string | void;
|
|
8
9
|
}
|
|
9
10
|
export declare class TemplateSet {
|
|
10
11
|
static registerTemplate(name: string, fn: TemplateFunction): void;
|
|
@@ -13,6 +14,7 @@ export declare class TemplateSet {
|
|
|
13
14
|
templates: {
|
|
14
15
|
[name: string]: Template;
|
|
15
16
|
};
|
|
17
|
+
getRawTemplate?: (s: string) => Element | Function | string | void;
|
|
16
18
|
translateFn?: (s: string) => string;
|
|
17
19
|
translatableAttributes?: string[];
|
|
18
20
|
Portal: typeof Portal;
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
declare type BaseType = typeof String | typeof Boolean | typeof Number | typeof Date | typeof Object | typeof Array | true | "*";
|
|
1
|
+
declare type BaseType = typeof String | typeof Boolean | typeof Number | typeof Date | typeof Object | typeof Array | typeof Function | true | "*";
|
|
2
2
|
interface TypeInfo {
|
|
3
3
|
type?: TypeDescription;
|
|
4
4
|
optional?: boolean;
|
package/dist/types/version.d.ts
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
export declare const version = "2.2.
|
|
1
|
+
export declare const version = "2.2.8";
|