@odoo/owl 2.2.9 → 2.2.11
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 +34 -25
- package/dist/owl.es.js +34 -26
- package/dist/owl.iife.js +34 -25
- package/dist/owl.iife.min.js +1 -1
- package/dist/types/compiler/code_generator.d.ts +1 -1
- package/dist/types/owl.d.ts +12 -2
- package/dist/types/runtime/index.d.ts +1 -1
- package/dist/types/runtime/validation.d.ts +3 -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
|
@@ -2626,7 +2626,7 @@ function wrapError(fn, hookName) {
|
|
|
2626
2626
|
result.catch(() => { }),
|
|
2627
2627
|
new Promise((resolve) => setTimeout(() => resolve(TIMEOUT), 3000)),
|
|
2628
2628
|
]).then((res) => {
|
|
2629
|
-
if (res === TIMEOUT && node.fiber === fiber) {
|
|
2629
|
+
if (res === TIMEOUT && node.fiber === fiber && node.status <= 2) {
|
|
2630
2630
|
console.warn(timeoutError);
|
|
2631
2631
|
}
|
|
2632
2632
|
});
|
|
@@ -3516,7 +3516,7 @@ function compileExprToArray(expr) {
|
|
|
3516
3516
|
const localVars = new Set();
|
|
3517
3517
|
const tokens = tokenize(expr);
|
|
3518
3518
|
let i = 0;
|
|
3519
|
-
let stack = []; // to track last opening [ or {
|
|
3519
|
+
let stack = []; // to track last opening (, [ or {
|
|
3520
3520
|
while (i < tokens.length) {
|
|
3521
3521
|
let token = tokens[i];
|
|
3522
3522
|
let prevToken = tokens[i - 1];
|
|
@@ -3525,10 +3525,12 @@ function compileExprToArray(expr) {
|
|
|
3525
3525
|
switch (token.type) {
|
|
3526
3526
|
case "LEFT_BRACE":
|
|
3527
3527
|
case "LEFT_BRACKET":
|
|
3528
|
+
case "LEFT_PAREN":
|
|
3528
3529
|
stack.push(token.type);
|
|
3529
3530
|
break;
|
|
3530
3531
|
case "RIGHT_BRACE":
|
|
3531
3532
|
case "RIGHT_BRACKET":
|
|
3533
|
+
case "RIGHT_PAREN":
|
|
3532
3534
|
stack.pop();
|
|
3533
3535
|
}
|
|
3534
3536
|
let isVar = token.type === "SYMBOL" && !RESERVED_WORDS.includes(token.value);
|
|
@@ -3640,6 +3642,13 @@ function isProp(tag, key) {
|
|
|
3640
3642
|
}
|
|
3641
3643
|
return false;
|
|
3642
3644
|
}
|
|
3645
|
+
/**
|
|
3646
|
+
* Returns a template literal that evaluates to str. You can add interpolation
|
|
3647
|
+
* sigils into the string if required
|
|
3648
|
+
*/
|
|
3649
|
+
function toStringExpression(str) {
|
|
3650
|
+
return `\`${str.replace(/\\/g, "\\\\").replace(/`/g, "\\`").replace(/\$\{/, "\\${")}\``;
|
|
3651
|
+
}
|
|
3643
3652
|
// -----------------------------------------------------------------------------
|
|
3644
3653
|
// BlockDescription
|
|
3645
3654
|
// -----------------------------------------------------------------------------
|
|
@@ -3820,15 +3829,14 @@ class CodeGenerator {
|
|
|
3820
3829
|
mainCode.push(``);
|
|
3821
3830
|
for (let block of this.blocks) {
|
|
3822
3831
|
if (block.dom) {
|
|
3823
|
-
let xmlString = block.asXmlString();
|
|
3824
|
-
xmlString = xmlString.replace(/\\/g, "\\\\").replace(/`/g, "\\`");
|
|
3832
|
+
let xmlString = toStringExpression(block.asXmlString());
|
|
3825
3833
|
if (block.dynamicTagName) {
|
|
3826
|
-
xmlString = xmlString.replace(
|
|
3827
|
-
xmlString = xmlString.replace(/\w
|
|
3828
|
-
mainCode.push(`let ${block.blockName} = tag => createBlock(
|
|
3834
|
+
xmlString = xmlString.replace(/^`<\w+/, `\`<\${tag || '${block.dom.nodeName}'}`);
|
|
3835
|
+
xmlString = xmlString.replace(/\w+>`$/, `\${tag || '${block.dom.nodeName}'}>\``);
|
|
3836
|
+
mainCode.push(`let ${block.blockName} = tag => createBlock(${xmlString});`);
|
|
3829
3837
|
}
|
|
3830
3838
|
else {
|
|
3831
|
-
mainCode.push(`let ${block.blockName} = createBlock(
|
|
3839
|
+
mainCode.push(`let ${block.blockName} = createBlock(${xmlString});`);
|
|
3832
3840
|
}
|
|
3833
3841
|
}
|
|
3834
3842
|
}
|
|
@@ -4006,7 +4014,7 @@ class CodeGenerator {
|
|
|
4006
4014
|
const isNewBlock = !block || forceNewBlock;
|
|
4007
4015
|
if (isNewBlock) {
|
|
4008
4016
|
block = this.createBlock(block, "comment", ctx);
|
|
4009
|
-
this.insertBlock(`comment(
|
|
4017
|
+
this.insertBlock(`comment(${toStringExpression(ast.value)})`, block, {
|
|
4010
4018
|
...ctx,
|
|
4011
4019
|
forceNewBlock: forceNewBlock && !block,
|
|
4012
4020
|
});
|
|
@@ -4028,7 +4036,7 @@ class CodeGenerator {
|
|
|
4028
4036
|
}
|
|
4029
4037
|
if (!block || forceNewBlock) {
|
|
4030
4038
|
block = this.createBlock(block, "text", ctx);
|
|
4031
|
-
this.insertBlock(`text(
|
|
4039
|
+
this.insertBlock(`text(${toStringExpression(value)})`, block, {
|
|
4032
4040
|
...ctx,
|
|
4033
4041
|
forceNewBlock: forceNewBlock && !block,
|
|
4034
4042
|
});
|
|
@@ -4249,7 +4257,8 @@ class CodeGenerator {
|
|
|
4249
4257
|
expr = compileExpr(ast.expr);
|
|
4250
4258
|
if (ast.defaultValue) {
|
|
4251
4259
|
this.helpers.add("withDefault");
|
|
4252
|
-
|
|
4260
|
+
// FIXME: defaultValue is not translated
|
|
4261
|
+
expr = `withDefault(${expr}, ${toStringExpression(ast.defaultValue)})`;
|
|
4253
4262
|
}
|
|
4254
4263
|
}
|
|
4255
4264
|
if (!block || forceNewBlock) {
|
|
@@ -4502,7 +4511,7 @@ class CodeGenerator {
|
|
|
4502
4511
|
this.addLine(`${ctxVar}[zero] = ${bl};`);
|
|
4503
4512
|
}
|
|
4504
4513
|
}
|
|
4505
|
-
const key =
|
|
4514
|
+
const key = this.generateComponentKey();
|
|
4506
4515
|
if (isDynamic) {
|
|
4507
4516
|
const templateVar = generateId("template");
|
|
4508
4517
|
if (!this.staticDefs.find((d) => d.id === "call")) {
|
|
@@ -4554,12 +4563,12 @@ class CodeGenerator {
|
|
|
4554
4563
|
else {
|
|
4555
4564
|
let value;
|
|
4556
4565
|
if (ast.defaultValue) {
|
|
4557
|
-
const defaultValue = ctx.translate ? this.translate(ast.defaultValue) : ast.defaultValue;
|
|
4566
|
+
const defaultValue = toStringExpression(ctx.translate ? this.translate(ast.defaultValue) : ast.defaultValue);
|
|
4558
4567
|
if (ast.value) {
|
|
4559
|
-
value = `withDefault(${expr},
|
|
4568
|
+
value = `withDefault(${expr}, ${defaultValue})`;
|
|
4560
4569
|
}
|
|
4561
4570
|
else {
|
|
4562
|
-
value =
|
|
4571
|
+
value = defaultValue;
|
|
4563
4572
|
}
|
|
4564
4573
|
}
|
|
4565
4574
|
else {
|
|
@@ -4570,12 +4579,12 @@ class CodeGenerator {
|
|
|
4570
4579
|
}
|
|
4571
4580
|
return null;
|
|
4572
4581
|
}
|
|
4573
|
-
generateComponentKey() {
|
|
4582
|
+
generateComponentKey(currentKey = "key") {
|
|
4574
4583
|
const parts = [generateId("__")];
|
|
4575
4584
|
for (let i = 0; i < this.target.loopLevel; i++) {
|
|
4576
4585
|
parts.push(`\${key${i + 1}}`);
|
|
4577
4586
|
}
|
|
4578
|
-
return parts.join("__")
|
|
4587
|
+
return `${currentKey} + \`${parts.join("__")}\``;
|
|
4579
4588
|
}
|
|
4580
4589
|
/**
|
|
4581
4590
|
* Formats a prop name and value into a string suitable to be inserted in the
|
|
@@ -4666,7 +4675,6 @@ class CodeGenerator {
|
|
|
4666
4675
|
this.addLine(`${propVar}.slots = markRaw(Object.assign(${slotDef}, ${propVar}.slots))`);
|
|
4667
4676
|
}
|
|
4668
4677
|
// cmap key
|
|
4669
|
-
const key = this.generateComponentKey();
|
|
4670
4678
|
let expr;
|
|
4671
4679
|
if (ast.isDynamic) {
|
|
4672
4680
|
expr = generateId("Comp");
|
|
@@ -4682,7 +4690,7 @@ class CodeGenerator {
|
|
|
4682
4690
|
// todo: check the forcenewblock condition
|
|
4683
4691
|
this.insertAnchor(block);
|
|
4684
4692
|
}
|
|
4685
|
-
let keyArg =
|
|
4693
|
+
let keyArg = this.generateComponentKey();
|
|
4686
4694
|
if (ctx.tKeyExpr) {
|
|
4687
4695
|
keyArg = `${ctx.tKeyExpr} + ${keyArg}`;
|
|
4688
4696
|
}
|
|
@@ -4755,7 +4763,7 @@ class CodeGenerator {
|
|
|
4755
4763
|
}
|
|
4756
4764
|
let key = this.target.loopLevel ? `key${this.target.loopLevel}` : "key";
|
|
4757
4765
|
if (isMultiple) {
|
|
4758
|
-
key =
|
|
4766
|
+
key = this.generateComponentKey(key);
|
|
4759
4767
|
}
|
|
4760
4768
|
const props = ast.attrs ? this.formatPropObject(ast.attrs) : [];
|
|
4761
4769
|
const scope = this.getPropString(props, dynProps);
|
|
@@ -4796,7 +4804,6 @@ class CodeGenerator {
|
|
|
4796
4804
|
}
|
|
4797
4805
|
let { block } = ctx;
|
|
4798
4806
|
const name = this.compileInNewTarget("slot", ast.content, ctx);
|
|
4799
|
-
const key = this.generateComponentKey();
|
|
4800
4807
|
let ctxStr = "ctx";
|
|
4801
4808
|
if (this.target.loopLevel || !this.hasSafeContext) {
|
|
4802
4809
|
ctxStr = generateId("ctx");
|
|
@@ -4809,7 +4816,8 @@ class CodeGenerator {
|
|
|
4809
4816
|
expr: `app.createComponent(null, false, true, false, false)`,
|
|
4810
4817
|
});
|
|
4811
4818
|
const target = compileExpr(ast.target);
|
|
4812
|
-
const
|
|
4819
|
+
const key = this.generateComponentKey();
|
|
4820
|
+
const blockString = `${id}({target: ${target},slots: {'default': {__render: ${name}.bind(this), __ctx: ${ctxStr}}}}, ${key}, node, ctx, Portal)`;
|
|
4813
4821
|
if (block) {
|
|
4814
4822
|
this.insertAnchor(block);
|
|
4815
4823
|
}
|
|
@@ -5542,7 +5550,7 @@ function compile(template, options = {}) {
|
|
|
5542
5550
|
}
|
|
5543
5551
|
|
|
5544
5552
|
// do not modify manually. This file is generated by the release script.
|
|
5545
|
-
const version = "2.2.
|
|
5553
|
+
const version = "2.2.11";
|
|
5546
5554
|
|
|
5547
5555
|
// -----------------------------------------------------------------------------
|
|
5548
5556
|
// Scheduler
|
|
@@ -5973,6 +5981,7 @@ exports.Component = Component;
|
|
|
5973
5981
|
exports.EventBus = EventBus;
|
|
5974
5982
|
exports.OwlError = OwlError;
|
|
5975
5983
|
exports.__info__ = __info__;
|
|
5984
|
+
exports.batched = batched;
|
|
5976
5985
|
exports.blockDom = blockDom;
|
|
5977
5986
|
exports.loadFile = loadFile;
|
|
5978
5987
|
exports.markRaw = markRaw;
|
|
@@ -6005,6 +6014,6 @@ exports.whenReady = whenReady;
|
|
|
6005
6014
|
exports.xml = xml;
|
|
6006
6015
|
|
|
6007
6016
|
|
|
6008
|
-
__info__.date = '2024-
|
|
6009
|
-
__info__.hash = '
|
|
6017
|
+
__info__.date = '2024-06-17T13:31:12.099Z';
|
|
6018
|
+
__info__.hash = 'e7f405c';
|
|
6010
6019
|
__info__.url = 'https://github.com/odoo/owl';
|
package/dist/owl.es.js
CHANGED
|
@@ -2622,7 +2622,7 @@ function wrapError(fn, hookName) {
|
|
|
2622
2622
|
result.catch(() => { }),
|
|
2623
2623
|
new Promise((resolve) => setTimeout(() => resolve(TIMEOUT), 3000)),
|
|
2624
2624
|
]).then((res) => {
|
|
2625
|
-
if (res === TIMEOUT && node.fiber === fiber) {
|
|
2625
|
+
if (res === TIMEOUT && node.fiber === fiber && node.status <= 2) {
|
|
2626
2626
|
console.warn(timeoutError);
|
|
2627
2627
|
}
|
|
2628
2628
|
});
|
|
@@ -3512,7 +3512,7 @@ function compileExprToArray(expr) {
|
|
|
3512
3512
|
const localVars = new Set();
|
|
3513
3513
|
const tokens = tokenize(expr);
|
|
3514
3514
|
let i = 0;
|
|
3515
|
-
let stack = []; // to track last opening [ or {
|
|
3515
|
+
let stack = []; // to track last opening (, [ or {
|
|
3516
3516
|
while (i < tokens.length) {
|
|
3517
3517
|
let token = tokens[i];
|
|
3518
3518
|
let prevToken = tokens[i - 1];
|
|
@@ -3521,10 +3521,12 @@ function compileExprToArray(expr) {
|
|
|
3521
3521
|
switch (token.type) {
|
|
3522
3522
|
case "LEFT_BRACE":
|
|
3523
3523
|
case "LEFT_BRACKET":
|
|
3524
|
+
case "LEFT_PAREN":
|
|
3524
3525
|
stack.push(token.type);
|
|
3525
3526
|
break;
|
|
3526
3527
|
case "RIGHT_BRACE":
|
|
3527
3528
|
case "RIGHT_BRACKET":
|
|
3529
|
+
case "RIGHT_PAREN":
|
|
3528
3530
|
stack.pop();
|
|
3529
3531
|
}
|
|
3530
3532
|
let isVar = token.type === "SYMBOL" && !RESERVED_WORDS.includes(token.value);
|
|
@@ -3636,6 +3638,13 @@ function isProp(tag, key) {
|
|
|
3636
3638
|
}
|
|
3637
3639
|
return false;
|
|
3638
3640
|
}
|
|
3641
|
+
/**
|
|
3642
|
+
* Returns a template literal that evaluates to str. You can add interpolation
|
|
3643
|
+
* sigils into the string if required
|
|
3644
|
+
*/
|
|
3645
|
+
function toStringExpression(str) {
|
|
3646
|
+
return `\`${str.replace(/\\/g, "\\\\").replace(/`/g, "\\`").replace(/\$\{/, "\\${")}\``;
|
|
3647
|
+
}
|
|
3639
3648
|
// -----------------------------------------------------------------------------
|
|
3640
3649
|
// BlockDescription
|
|
3641
3650
|
// -----------------------------------------------------------------------------
|
|
@@ -3816,15 +3825,14 @@ class CodeGenerator {
|
|
|
3816
3825
|
mainCode.push(``);
|
|
3817
3826
|
for (let block of this.blocks) {
|
|
3818
3827
|
if (block.dom) {
|
|
3819
|
-
let xmlString = block.asXmlString();
|
|
3820
|
-
xmlString = xmlString.replace(/\\/g, "\\\\").replace(/`/g, "\\`");
|
|
3828
|
+
let xmlString = toStringExpression(block.asXmlString());
|
|
3821
3829
|
if (block.dynamicTagName) {
|
|
3822
|
-
xmlString = xmlString.replace(
|
|
3823
|
-
xmlString = xmlString.replace(/\w
|
|
3824
|
-
mainCode.push(`let ${block.blockName} = tag => createBlock(
|
|
3830
|
+
xmlString = xmlString.replace(/^`<\w+/, `\`<\${tag || '${block.dom.nodeName}'}`);
|
|
3831
|
+
xmlString = xmlString.replace(/\w+>`$/, `\${tag || '${block.dom.nodeName}'}>\``);
|
|
3832
|
+
mainCode.push(`let ${block.blockName} = tag => createBlock(${xmlString});`);
|
|
3825
3833
|
}
|
|
3826
3834
|
else {
|
|
3827
|
-
mainCode.push(`let ${block.blockName} = createBlock(
|
|
3835
|
+
mainCode.push(`let ${block.blockName} = createBlock(${xmlString});`);
|
|
3828
3836
|
}
|
|
3829
3837
|
}
|
|
3830
3838
|
}
|
|
@@ -4002,7 +4010,7 @@ class CodeGenerator {
|
|
|
4002
4010
|
const isNewBlock = !block || forceNewBlock;
|
|
4003
4011
|
if (isNewBlock) {
|
|
4004
4012
|
block = this.createBlock(block, "comment", ctx);
|
|
4005
|
-
this.insertBlock(`comment(
|
|
4013
|
+
this.insertBlock(`comment(${toStringExpression(ast.value)})`, block, {
|
|
4006
4014
|
...ctx,
|
|
4007
4015
|
forceNewBlock: forceNewBlock && !block,
|
|
4008
4016
|
});
|
|
@@ -4024,7 +4032,7 @@ class CodeGenerator {
|
|
|
4024
4032
|
}
|
|
4025
4033
|
if (!block || forceNewBlock) {
|
|
4026
4034
|
block = this.createBlock(block, "text", ctx);
|
|
4027
|
-
this.insertBlock(`text(
|
|
4035
|
+
this.insertBlock(`text(${toStringExpression(value)})`, block, {
|
|
4028
4036
|
...ctx,
|
|
4029
4037
|
forceNewBlock: forceNewBlock && !block,
|
|
4030
4038
|
});
|
|
@@ -4245,7 +4253,8 @@ class CodeGenerator {
|
|
|
4245
4253
|
expr = compileExpr(ast.expr);
|
|
4246
4254
|
if (ast.defaultValue) {
|
|
4247
4255
|
this.helpers.add("withDefault");
|
|
4248
|
-
|
|
4256
|
+
// FIXME: defaultValue is not translated
|
|
4257
|
+
expr = `withDefault(${expr}, ${toStringExpression(ast.defaultValue)})`;
|
|
4249
4258
|
}
|
|
4250
4259
|
}
|
|
4251
4260
|
if (!block || forceNewBlock) {
|
|
@@ -4498,7 +4507,7 @@ class CodeGenerator {
|
|
|
4498
4507
|
this.addLine(`${ctxVar}[zero] = ${bl};`);
|
|
4499
4508
|
}
|
|
4500
4509
|
}
|
|
4501
|
-
const key =
|
|
4510
|
+
const key = this.generateComponentKey();
|
|
4502
4511
|
if (isDynamic) {
|
|
4503
4512
|
const templateVar = generateId("template");
|
|
4504
4513
|
if (!this.staticDefs.find((d) => d.id === "call")) {
|
|
@@ -4550,12 +4559,12 @@ class CodeGenerator {
|
|
|
4550
4559
|
else {
|
|
4551
4560
|
let value;
|
|
4552
4561
|
if (ast.defaultValue) {
|
|
4553
|
-
const defaultValue = ctx.translate ? this.translate(ast.defaultValue) : ast.defaultValue;
|
|
4562
|
+
const defaultValue = toStringExpression(ctx.translate ? this.translate(ast.defaultValue) : ast.defaultValue);
|
|
4554
4563
|
if (ast.value) {
|
|
4555
|
-
value = `withDefault(${expr},
|
|
4564
|
+
value = `withDefault(${expr}, ${defaultValue})`;
|
|
4556
4565
|
}
|
|
4557
4566
|
else {
|
|
4558
|
-
value =
|
|
4567
|
+
value = defaultValue;
|
|
4559
4568
|
}
|
|
4560
4569
|
}
|
|
4561
4570
|
else {
|
|
@@ -4566,12 +4575,12 @@ class CodeGenerator {
|
|
|
4566
4575
|
}
|
|
4567
4576
|
return null;
|
|
4568
4577
|
}
|
|
4569
|
-
generateComponentKey() {
|
|
4578
|
+
generateComponentKey(currentKey = "key") {
|
|
4570
4579
|
const parts = [generateId("__")];
|
|
4571
4580
|
for (let i = 0; i < this.target.loopLevel; i++) {
|
|
4572
4581
|
parts.push(`\${key${i + 1}}`);
|
|
4573
4582
|
}
|
|
4574
|
-
return parts.join("__")
|
|
4583
|
+
return `${currentKey} + \`${parts.join("__")}\``;
|
|
4575
4584
|
}
|
|
4576
4585
|
/**
|
|
4577
4586
|
* Formats a prop name and value into a string suitable to be inserted in the
|
|
@@ -4662,7 +4671,6 @@ class CodeGenerator {
|
|
|
4662
4671
|
this.addLine(`${propVar}.slots = markRaw(Object.assign(${slotDef}, ${propVar}.slots))`);
|
|
4663
4672
|
}
|
|
4664
4673
|
// cmap key
|
|
4665
|
-
const key = this.generateComponentKey();
|
|
4666
4674
|
let expr;
|
|
4667
4675
|
if (ast.isDynamic) {
|
|
4668
4676
|
expr = generateId("Comp");
|
|
@@ -4678,7 +4686,7 @@ class CodeGenerator {
|
|
|
4678
4686
|
// todo: check the forcenewblock condition
|
|
4679
4687
|
this.insertAnchor(block);
|
|
4680
4688
|
}
|
|
4681
|
-
let keyArg =
|
|
4689
|
+
let keyArg = this.generateComponentKey();
|
|
4682
4690
|
if (ctx.tKeyExpr) {
|
|
4683
4691
|
keyArg = `${ctx.tKeyExpr} + ${keyArg}`;
|
|
4684
4692
|
}
|
|
@@ -4751,7 +4759,7 @@ class CodeGenerator {
|
|
|
4751
4759
|
}
|
|
4752
4760
|
let key = this.target.loopLevel ? `key${this.target.loopLevel}` : "key";
|
|
4753
4761
|
if (isMultiple) {
|
|
4754
|
-
key =
|
|
4762
|
+
key = this.generateComponentKey(key);
|
|
4755
4763
|
}
|
|
4756
4764
|
const props = ast.attrs ? this.formatPropObject(ast.attrs) : [];
|
|
4757
4765
|
const scope = this.getPropString(props, dynProps);
|
|
@@ -4792,7 +4800,6 @@ class CodeGenerator {
|
|
|
4792
4800
|
}
|
|
4793
4801
|
let { block } = ctx;
|
|
4794
4802
|
const name = this.compileInNewTarget("slot", ast.content, ctx);
|
|
4795
|
-
const key = this.generateComponentKey();
|
|
4796
4803
|
let ctxStr = "ctx";
|
|
4797
4804
|
if (this.target.loopLevel || !this.hasSafeContext) {
|
|
4798
4805
|
ctxStr = generateId("ctx");
|
|
@@ -4805,7 +4812,8 @@ class CodeGenerator {
|
|
|
4805
4812
|
expr: `app.createComponent(null, false, true, false, false)`,
|
|
4806
4813
|
});
|
|
4807
4814
|
const target = compileExpr(ast.target);
|
|
4808
|
-
const
|
|
4815
|
+
const key = this.generateComponentKey();
|
|
4816
|
+
const blockString = `${id}({target: ${target},slots: {'default': {__render: ${name}.bind(this), __ctx: ${ctxStr}}}}, ${key}, node, ctx, Portal)`;
|
|
4809
4817
|
if (block) {
|
|
4810
4818
|
this.insertAnchor(block);
|
|
4811
4819
|
}
|
|
@@ -5538,7 +5546,7 @@ function compile(template, options = {}) {
|
|
|
5538
5546
|
}
|
|
5539
5547
|
|
|
5540
5548
|
// do not modify manually. This file is generated by the release script.
|
|
5541
|
-
const version = "2.2.
|
|
5549
|
+
const version = "2.2.11";
|
|
5542
5550
|
|
|
5543
5551
|
// -----------------------------------------------------------------------------
|
|
5544
5552
|
// Scheduler
|
|
@@ -5964,9 +5972,9 @@ TemplateSet.prototype._compileTemplate = function _compileTemplate(name, templat
|
|
|
5964
5972
|
});
|
|
5965
5973
|
};
|
|
5966
5974
|
|
|
5967
|
-
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 };
|
|
5975
|
+
export { App, Component, EventBus, OwlError, __info__, batched, blockDom, loadFile, markRaw, markup, mount, onError, onMounted, onPatched, onRendered, onWillDestroy, onWillPatch, onWillRender, onWillStart, onWillUnmount, onWillUpdateProps, reactive, status, toRaw, useChildSubEnv, useComponent, useEffect, useEnv, useExternalListener, useRef, useState, useSubEnv, validate, validateType, whenReady, xml };
|
|
5968
5976
|
|
|
5969
5977
|
|
|
5970
|
-
__info__.date = '2024-
|
|
5971
|
-
__info__.hash = '
|
|
5978
|
+
__info__.date = '2024-06-17T13:31:12.099Z';
|
|
5979
|
+
__info__.hash = 'e7f405c';
|
|
5972
5980
|
__info__.url = 'https://github.com/odoo/owl';
|
package/dist/owl.iife.js
CHANGED
|
@@ -2625,7 +2625,7 @@
|
|
|
2625
2625
|
result.catch(() => { }),
|
|
2626
2626
|
new Promise((resolve) => setTimeout(() => resolve(TIMEOUT), 3000)),
|
|
2627
2627
|
]).then((res) => {
|
|
2628
|
-
if (res === TIMEOUT && node.fiber === fiber) {
|
|
2628
|
+
if (res === TIMEOUT && node.fiber === fiber && node.status <= 2) {
|
|
2629
2629
|
console.warn(timeoutError);
|
|
2630
2630
|
}
|
|
2631
2631
|
});
|
|
@@ -3515,7 +3515,7 @@
|
|
|
3515
3515
|
const localVars = new Set();
|
|
3516
3516
|
const tokens = tokenize(expr);
|
|
3517
3517
|
let i = 0;
|
|
3518
|
-
let stack = []; // to track last opening [ or {
|
|
3518
|
+
let stack = []; // to track last opening (, [ or {
|
|
3519
3519
|
while (i < tokens.length) {
|
|
3520
3520
|
let token = tokens[i];
|
|
3521
3521
|
let prevToken = tokens[i - 1];
|
|
@@ -3524,10 +3524,12 @@
|
|
|
3524
3524
|
switch (token.type) {
|
|
3525
3525
|
case "LEFT_BRACE":
|
|
3526
3526
|
case "LEFT_BRACKET":
|
|
3527
|
+
case "LEFT_PAREN":
|
|
3527
3528
|
stack.push(token.type);
|
|
3528
3529
|
break;
|
|
3529
3530
|
case "RIGHT_BRACE":
|
|
3530
3531
|
case "RIGHT_BRACKET":
|
|
3532
|
+
case "RIGHT_PAREN":
|
|
3531
3533
|
stack.pop();
|
|
3532
3534
|
}
|
|
3533
3535
|
let isVar = token.type === "SYMBOL" && !RESERVED_WORDS.includes(token.value);
|
|
@@ -3639,6 +3641,13 @@
|
|
|
3639
3641
|
}
|
|
3640
3642
|
return false;
|
|
3641
3643
|
}
|
|
3644
|
+
/**
|
|
3645
|
+
* Returns a template literal that evaluates to str. You can add interpolation
|
|
3646
|
+
* sigils into the string if required
|
|
3647
|
+
*/
|
|
3648
|
+
function toStringExpression(str) {
|
|
3649
|
+
return `\`${str.replace(/\\/g, "\\\\").replace(/`/g, "\\`").replace(/\$\{/, "\\${")}\``;
|
|
3650
|
+
}
|
|
3642
3651
|
// -----------------------------------------------------------------------------
|
|
3643
3652
|
// BlockDescription
|
|
3644
3653
|
// -----------------------------------------------------------------------------
|
|
@@ -3819,15 +3828,14 @@
|
|
|
3819
3828
|
mainCode.push(``);
|
|
3820
3829
|
for (let block of this.blocks) {
|
|
3821
3830
|
if (block.dom) {
|
|
3822
|
-
let xmlString = block.asXmlString();
|
|
3823
|
-
xmlString = xmlString.replace(/\\/g, "\\\\").replace(/`/g, "\\`");
|
|
3831
|
+
let xmlString = toStringExpression(block.asXmlString());
|
|
3824
3832
|
if (block.dynamicTagName) {
|
|
3825
|
-
xmlString = xmlString.replace(
|
|
3826
|
-
xmlString = xmlString.replace(/\w
|
|
3827
|
-
mainCode.push(`let ${block.blockName} = tag => createBlock(
|
|
3833
|
+
xmlString = xmlString.replace(/^`<\w+/, `\`<\${tag || '${block.dom.nodeName}'}`);
|
|
3834
|
+
xmlString = xmlString.replace(/\w+>`$/, `\${tag || '${block.dom.nodeName}'}>\``);
|
|
3835
|
+
mainCode.push(`let ${block.blockName} = tag => createBlock(${xmlString});`);
|
|
3828
3836
|
}
|
|
3829
3837
|
else {
|
|
3830
|
-
mainCode.push(`let ${block.blockName} = createBlock(
|
|
3838
|
+
mainCode.push(`let ${block.blockName} = createBlock(${xmlString});`);
|
|
3831
3839
|
}
|
|
3832
3840
|
}
|
|
3833
3841
|
}
|
|
@@ -4005,7 +4013,7 @@
|
|
|
4005
4013
|
const isNewBlock = !block || forceNewBlock;
|
|
4006
4014
|
if (isNewBlock) {
|
|
4007
4015
|
block = this.createBlock(block, "comment", ctx);
|
|
4008
|
-
this.insertBlock(`comment(
|
|
4016
|
+
this.insertBlock(`comment(${toStringExpression(ast.value)})`, block, {
|
|
4009
4017
|
...ctx,
|
|
4010
4018
|
forceNewBlock: forceNewBlock && !block,
|
|
4011
4019
|
});
|
|
@@ -4027,7 +4035,7 @@
|
|
|
4027
4035
|
}
|
|
4028
4036
|
if (!block || forceNewBlock) {
|
|
4029
4037
|
block = this.createBlock(block, "text", ctx);
|
|
4030
|
-
this.insertBlock(`text(
|
|
4038
|
+
this.insertBlock(`text(${toStringExpression(value)})`, block, {
|
|
4031
4039
|
...ctx,
|
|
4032
4040
|
forceNewBlock: forceNewBlock && !block,
|
|
4033
4041
|
});
|
|
@@ -4248,7 +4256,8 @@
|
|
|
4248
4256
|
expr = compileExpr(ast.expr);
|
|
4249
4257
|
if (ast.defaultValue) {
|
|
4250
4258
|
this.helpers.add("withDefault");
|
|
4251
|
-
|
|
4259
|
+
// FIXME: defaultValue is not translated
|
|
4260
|
+
expr = `withDefault(${expr}, ${toStringExpression(ast.defaultValue)})`;
|
|
4252
4261
|
}
|
|
4253
4262
|
}
|
|
4254
4263
|
if (!block || forceNewBlock) {
|
|
@@ -4501,7 +4510,7 @@
|
|
|
4501
4510
|
this.addLine(`${ctxVar}[zero] = ${bl};`);
|
|
4502
4511
|
}
|
|
4503
4512
|
}
|
|
4504
|
-
const key =
|
|
4513
|
+
const key = this.generateComponentKey();
|
|
4505
4514
|
if (isDynamic) {
|
|
4506
4515
|
const templateVar = generateId("template");
|
|
4507
4516
|
if (!this.staticDefs.find((d) => d.id === "call")) {
|
|
@@ -4553,12 +4562,12 @@
|
|
|
4553
4562
|
else {
|
|
4554
4563
|
let value;
|
|
4555
4564
|
if (ast.defaultValue) {
|
|
4556
|
-
const defaultValue = ctx.translate ? this.translate(ast.defaultValue) : ast.defaultValue;
|
|
4565
|
+
const defaultValue = toStringExpression(ctx.translate ? this.translate(ast.defaultValue) : ast.defaultValue);
|
|
4557
4566
|
if (ast.value) {
|
|
4558
|
-
value = `withDefault(${expr},
|
|
4567
|
+
value = `withDefault(${expr}, ${defaultValue})`;
|
|
4559
4568
|
}
|
|
4560
4569
|
else {
|
|
4561
|
-
value =
|
|
4570
|
+
value = defaultValue;
|
|
4562
4571
|
}
|
|
4563
4572
|
}
|
|
4564
4573
|
else {
|
|
@@ -4569,12 +4578,12 @@
|
|
|
4569
4578
|
}
|
|
4570
4579
|
return null;
|
|
4571
4580
|
}
|
|
4572
|
-
generateComponentKey() {
|
|
4581
|
+
generateComponentKey(currentKey = "key") {
|
|
4573
4582
|
const parts = [generateId("__")];
|
|
4574
4583
|
for (let i = 0; i < this.target.loopLevel; i++) {
|
|
4575
4584
|
parts.push(`\${key${i + 1}}`);
|
|
4576
4585
|
}
|
|
4577
|
-
return parts.join("__")
|
|
4586
|
+
return `${currentKey} + \`${parts.join("__")}\``;
|
|
4578
4587
|
}
|
|
4579
4588
|
/**
|
|
4580
4589
|
* Formats a prop name and value into a string suitable to be inserted in the
|
|
@@ -4665,7 +4674,6 @@
|
|
|
4665
4674
|
this.addLine(`${propVar}.slots = markRaw(Object.assign(${slotDef}, ${propVar}.slots))`);
|
|
4666
4675
|
}
|
|
4667
4676
|
// cmap key
|
|
4668
|
-
const key = this.generateComponentKey();
|
|
4669
4677
|
let expr;
|
|
4670
4678
|
if (ast.isDynamic) {
|
|
4671
4679
|
expr = generateId("Comp");
|
|
@@ -4681,7 +4689,7 @@
|
|
|
4681
4689
|
// todo: check the forcenewblock condition
|
|
4682
4690
|
this.insertAnchor(block);
|
|
4683
4691
|
}
|
|
4684
|
-
let keyArg =
|
|
4692
|
+
let keyArg = this.generateComponentKey();
|
|
4685
4693
|
if (ctx.tKeyExpr) {
|
|
4686
4694
|
keyArg = `${ctx.tKeyExpr} + ${keyArg}`;
|
|
4687
4695
|
}
|
|
@@ -4754,7 +4762,7 @@
|
|
|
4754
4762
|
}
|
|
4755
4763
|
let key = this.target.loopLevel ? `key${this.target.loopLevel}` : "key";
|
|
4756
4764
|
if (isMultiple) {
|
|
4757
|
-
key =
|
|
4765
|
+
key = this.generateComponentKey(key);
|
|
4758
4766
|
}
|
|
4759
4767
|
const props = ast.attrs ? this.formatPropObject(ast.attrs) : [];
|
|
4760
4768
|
const scope = this.getPropString(props, dynProps);
|
|
@@ -4795,7 +4803,6 @@
|
|
|
4795
4803
|
}
|
|
4796
4804
|
let { block } = ctx;
|
|
4797
4805
|
const name = this.compileInNewTarget("slot", ast.content, ctx);
|
|
4798
|
-
const key = this.generateComponentKey();
|
|
4799
4806
|
let ctxStr = "ctx";
|
|
4800
4807
|
if (this.target.loopLevel || !this.hasSafeContext) {
|
|
4801
4808
|
ctxStr = generateId("ctx");
|
|
@@ -4808,7 +4815,8 @@
|
|
|
4808
4815
|
expr: `app.createComponent(null, false, true, false, false)`,
|
|
4809
4816
|
});
|
|
4810
4817
|
const target = compileExpr(ast.target);
|
|
4811
|
-
const
|
|
4818
|
+
const key = this.generateComponentKey();
|
|
4819
|
+
const blockString = `${id}({target: ${target},slots: {'default': {__render: ${name}.bind(this), __ctx: ${ctxStr}}}}, ${key}, node, ctx, Portal)`;
|
|
4812
4820
|
if (block) {
|
|
4813
4821
|
this.insertAnchor(block);
|
|
4814
4822
|
}
|
|
@@ -5541,7 +5549,7 @@
|
|
|
5541
5549
|
}
|
|
5542
5550
|
|
|
5543
5551
|
// do not modify manually. This file is generated by the release script.
|
|
5544
|
-
const version = "2.2.
|
|
5552
|
+
const version = "2.2.11";
|
|
5545
5553
|
|
|
5546
5554
|
// -----------------------------------------------------------------------------
|
|
5547
5555
|
// Scheduler
|
|
@@ -5972,6 +5980,7 @@ See https://github.com/odoo/owl/blob/${hash}/doc/reference/app.md#configuration
|
|
|
5972
5980
|
exports.EventBus = EventBus;
|
|
5973
5981
|
exports.OwlError = OwlError;
|
|
5974
5982
|
exports.__info__ = __info__;
|
|
5983
|
+
exports.batched = batched;
|
|
5975
5984
|
exports.blockDom = blockDom;
|
|
5976
5985
|
exports.loadFile = loadFile;
|
|
5977
5986
|
exports.markRaw = markRaw;
|
|
@@ -6006,8 +6015,8 @@ See https://github.com/odoo/owl/blob/${hash}/doc/reference/app.md#configuration
|
|
|
6006
6015
|
Object.defineProperty(exports, '__esModule', { value: true });
|
|
6007
6016
|
|
|
6008
6017
|
|
|
6009
|
-
__info__.date = '2024-
|
|
6010
|
-
__info__.hash = '
|
|
6018
|
+
__info__.date = '2024-06-17T13:31:12.099Z';
|
|
6019
|
+
__info__.hash = 'e7f405c';
|
|
6011
6020
|
__info__.url = 'https://github.com/odoo/owl';
|
|
6012
6021
|
|
|
6013
6022
|
|
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 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 C=Node.prototype,O=C.insertBefore,S=(D=C,L="textContent",Object.getOwnPropertyDescriptor(D,L)).set;var D,L;const B=C.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,O.call(t,n,e)}}this.anchors=r,this.parentEl=t}moveBeforeDOMNode(t,e=this.parentEl){this.parentEl=e;const n=this.children,o=this.anchors;for(let r=0,i=n.length;r<i;r++){let i=n[r];if(i)i.moveBeforeDOMNode(t,e);else{const n=o[r];O.call(e,n,t)}}}moveBeforeVNode(t,e){if(t){const n=t.children[0];e=(n?n.firstNode():t.anchors[0])||null}const n=this.children,o=this.parentEl,r=this.anchors;for(let t=0,i=n.length;t<i;t++){let i=n[t];if(i)i.moveBeforeVNode(null,e);else{const n=r[t];O.call(o,n,e)}}}patch(t,e){if(this===t)return;const n=this.children,o=t.children,r=this.anchors,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,O.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)S.call(t,"");else{const e=this.children,n=this.anchors;for(let o=0,r=e.length;o<r;o++){const r=e[o];r?r.remove():B.call(t,n[o])}}}firstNode(){const t=this.children[0];return t?t.firstNode():this.anchors[0]}toString(){return this.children.map((t=>t?t.toString():"")).join("")}}function 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 Ct(){throw new i("Attempted to render cancelled fiber")}function Ot(t){let e=0;for(let n of t){let t=n.node;n.render=Ct,0===t.status&&t.cancel(),t.fiber=null,n.bdom?t.forceNextRender=!0:e++,e+=Ot(n.children)}return e}class St{constructor(t,e){if(this.bdom=null,this.children=[],this.appliedToDom=!1,this.deep=!1,this.childrenMap={},this.node=t,this.parent=e,e){this.deep=e.deep;const t=e.root;t.setCounter(t.counter+1),this.root=t,e.children.push(this)}else this.root=this}render(){let t=this.root.node,e=t.app.scheduler,n=t.parent;for(;n;){if(n.fiber){let o=n.fiber.root;if(0!==o.counter||!(t.parentKey in n.fiber.childrenMap))return void e.delayedRenders.push(this);n=o.node}t=n,n=n.parent}this._render()}_render(){const t=this.node,e=this.root;if(e){try{this.bdom=!0,this.bdom=t.renderFn()}catch(e){t.app.handleError({node:t,error:e})}e.setCounter(e.counter-1)}}}class Dt extends St{constructor(){super(...arguments),this.counter=1,this.willPatch=[],this.patched=[],this.mounted=[],this.locked=!1}complete(){const t=this.node;let e;this.locked=!0;try{for(e of this.willPatch){let t=e.node;if(t.fiber===e){const e=t.component;for(let n of t.willPatch)n.call(e)}}e=void 0,t._patch(),this.locked=!1;let n=this.mounted;for(;e=n.pop();)if(e.appliedToDom)for(let t of e.node.mounted)t();let o=this.patched;for(;e=o.pop();)if(e.appliedToDom)for(let t of e.node.patched)t()}catch(n){this.locked=!1,t.app.handleError({fiber:e||this,error:n})}}setCounter(t){this.counter=t,0===t&&this.node.app.scheduler.flush()}}class 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=["Object","Array","Set","Map","WeakMap"],It=["Set","Map","WeakMap"];function Wt(t){return Pt.call(Ht(t)).slice(8,-1)}function Ft(t){return"object"==typeof t&&Mt.includes(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.includes(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-Ot(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&&(Ot(n.children),n.root=null),new St(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=Ce(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 Ce(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=>!Ce(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=Ce(`${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])=>Ce(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=Ce(t,e,n.type)),"validate"in n&&!o&&(o=n.validate(e)?null:`'${t}' is not valid`),o}const Oe=Object.create;function Se(t){const e=Oe(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=Se(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=Oe(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:Se,withKey:function(t,e){return t.key=e,t},prepareList:function(t){let e,n;if(Array.isArray(t))e=t,n=t;else if(t 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:St,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 St(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.9";function _n(t,e){const n=Object.create(t),o=Object.getOwnPropertyDescriptors(e);return Object.freeze(Object.defineProperties(n,o))}function Cn(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 On={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},Sn={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__=Sn,t.blockDom=On,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=Cn,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),Cn(t)},t.validate=function(t,e){let n=_e(t,e);if(n.length)throw new i("Invalid object: "+n.join(", "))},t.validateType=Ce,t.whenReady=function(t){return new Promise((function(t){"loading"!==document.readyState?t(!0):document.addEventListener("DOMContentLoaded",t,!1)})).then(t||function(){})},t.xml=We,Object.defineProperty(t,"__esModule",{value:!0}),Sn.date="2024-01-12T14:43:56.804Z",Sn.hash="7b3e39b",Sn.url="https://github.com/odoo/owl"}(this.owl=this.owl||{});
|
|
1
|
+
!function(t){"use strict";function e(t){t=t.slice();const e=[];let n;for(;(n=t[0])&&"string"==typeof n;)e.push(t.shift());return{modifiers:e,data:t}}const n={shouldNormalizeDom:!0,mainEventHandler:(t,n,o)=>("function"==typeof t?t(n):Array.isArray(t)&&(t=e(t).data)[0](t[1],n),!1)};class o{constructor(t,e){this.key=t,this.child=e}mount(t,e){this.parentEl=t,this.child.mount(t,e)}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){let e=!1;return async(...n)=>{e||(e=!0,await Promise.resolve(),e=!1,t(...n))}}function N(t){if(!t)return!1;if(t.ownerDocument.contains(t))return!0;const e=t.getRootNode();return e instanceof ShadowRoot&&t.ownerDocument.contains(e.host)}class k extends EventTarget{trigger(t,e){this.dispatchEvent(new CustomEvent(t,{detail:e}))}}class E extends String{}function A(t){const e=t.split(".")[0],o=t.includes(".capture");return t.includes(".synthetic")?function(t,e=!1){let o=`__event__synthetic_${t}`;e&&(o=`${o}_capture`);!function(t,e,o=!1){if(C[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}),C[e]=!0}(t,o,e);const r=_++;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}_${T++}`;e&&(o=`${o}_capture`);function r(t){const e=t.currentTarget;if(!e||!N(e))return;const r=e[o];r&&n.mainEventHandler(r,t,e)}function 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 T=1;let _=1;const C={};const O=Node.prototype,S=O.insertBefore,D=(L=O,R="textContent",Object.getOwnPropertyDescriptor(L,R)).set;var L,R;const B=O.removeChild;class P{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,S.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];S.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];S.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,S.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)D.call(t,"");else{const e=this.children,n=this.anchors;for(let o=0,r=e.length;o<r;o++){const r=e[o];r?r.remove():B.call(t,n[o])}}}firstNode(){const t=this.children[0];return t?t.firstNode():this.anchors[0]}toString(){return this.children.map((t=>t?t.toString():"")).join("")}}function j(t){return new P(t)}const M=Node.prototype,I=CharacterData.prototype,W=M.insertBefore,F=((t,e)=>Object.getOwnPropertyDescriptor(t,e))(I,"data").set,V=M.removeChild;class K{constructor(t){this.text=t}mountNode(t,e,n){this.parentEl=e,W.call(e,t,n),this.el=t}moveBeforeDOMNode(t,e=this.parentEl){this.parentEl=e,W.call(e,this.el,t)}moveBeforeVNode(t,e){W.call(this.parentEl,this.el,t?t.el:e)}beforeRemove(){}remove(){V.call(this.parentEl,this.el)}firstNode(){return this.el}toString(){return this.text}}class z extends K{mount(t,e){this.mountNode(document.createTextNode(G(this.text)),t,e)}patch(t){const e=t.text;this.text!==e&&(F.call(this.el,G(e)),this.text=e)}}class H extends K{mount(t,e){this.mountNode(document.createComment(G(this.text)),t,e)}patch(){}}function U(t){return new z(t)}function q(t){return new H(t)}function G(t){switch(typeof t){case"string":return t;case"number":return String(t);case"boolean":return t?"true":"false";default:return t||""}}const X=(t,e)=>Object.getOwnPropertyDescriptor(t,e),Y=Node.prototype,Z=Element.prototype,J=X(CharacterData.prototype,"data").set,Q=X(Y,"firstChild").get,tt=X(Y,"nextSibling").get,et=()=>{};function nt(t){return function(e){this[t]=0===e?0:e?e.valueOf():""}}const ot={};function rt(t){if(t in ot)return ot[t];const e=(new DOMParser).parseFromString(`<t>${t}</t>`,"text/xml").firstChild.firstChild;n.shouldNormalizeDom&&it(e);const o=st(e),r=ct(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=Y.cloneNode,d=Y.insertBefore,f=Z.remove;class p{constructor(t){this.data=t}beforeRemove(){}remove(){f.call(this.el)}firstNode(){return this.el}moveBeforeDOMNode(t,e=this.parentEl){this.parentEl=e,d.call(e,this.el,t)}moveBeforeVNode(t,e){d.call(this.parentEl,this.el,t?t.el:e)}toString(){const t=document.createElement("div");return this.mount(t,null),t.innerHTML}mount(e,n){const o=u.call(t,!0);d.call(e,o,n),this.el=o,this.parentEl=e}patch(t,e){}}h&&(p.prototype.mount=function(e,r){const h=u.call(t,!0),f=new Array(n);this.refs=f,f[0]=h;for(let t=0;t<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=P.prototype.beforeRemove,(t,e=[])=>new n(t,e);return t=>new n(t)}(o.el,r);return ot[t]=i,i}function it(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)it(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 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||lt(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=st(t.firstChild,l,l),i.appendChild(l.firstChild.el);let e=t.firstChild,n=l.firstChild;for(;e=e.nextSibling;)n.nextSibling=st(e,n,l),i.appendChild(n.nextSibling.el),n=n.nextSibling}}return l.info.length&<(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 lt(t){t.isRef=!0;do{t.refN++}while(t=t.parent)}function at(t){let e=t.parent;for(;e&&e.nextSibling===t;)t=e,e=e.parent;return e}function ct(t,e,n){if(!e){e={collectors:[],locations:[],children:new Array(t.info.filter((t=>"child"===t.type)).length),cbRefs:[],refN:t.refN,refList:[]},n=0}if(t.refN){const o=n,r=t.isRef,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:ht,updateData:ht});break;case"child":n.isOnlyChild?t.children[n.idx]={parentRefIdx:n.refIdx,isOnlyChild:!0}:t.children[n.idx]={parentRefIdx:at(e).refIdx,afterRefIdx:n.refIdx};break;case"property":{const e=n.refIdx,o=nt(n.name);t.locations.push({idx:n.idx,refIdx:e,setData:o,updateData:o});break}case"attribute":{const e=n.refIdx;let o,r;"class"===n.name?(r=w,o=$):(r=b(n.name),o=r),t.locations.push({idx:n.idx,refIdx:e,setData:r,updateData:o});break}case"attributes":t.locations.push({idx:n.idx,refIdx:n.refIdx,setData:g,updateData:y});break;case"handler":{const{setup:e,update:o}=A(n.event);t.locations.push({idx:n.idx,refIdx:n.refIdx,setData:e,updateData:o});break}case"ref":const o=t.cbRefs.push(n.idx)-1;t.locations.push({idx:n.idx,refIdx:n.refIdx,setData:ut(o,t.refList),updateData:et})}}(e,t),n++}if(s){const r=n+i;e.collectors.push({idx:r,prevIdx:o,getVal:tt}),ct(t.nextSibling,e,r)}i&&(e.collectors.push({idx:n,prevIdx:o,getVal:Q}),ct(t.firstChild,e,n))}return e}function ht(t){J.call(this,G(t))}function ut(t,e){return function(n){e[e.length-1][t]=()=>n(this)}}const dt=Node.prototype,ft=dt.insertBefore,pt=dt.appendChild,mt=dt.removeChild,bt=((t,e)=>Object.getOwnPropertyDescriptor(t,e))(dt,"textContent").set;class gt{constructor(t){this.children=t}mount(t,e){const n=this.children,o=document.createTextNode("");this.anchor=o,ft.call(t,o,e);const r=n.length;if(r){const e=n[0].mount;for(let 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 bt.call(f,""),void pt.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||vt(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)bt.call(t,"");else{const n=this.children,o=n.length;if(o){const t=n[0].remove;for(let e=0;e<o;e++)t.call(n[e])}mt.call(t,e)}}firstNode(){const t=this.children[0];return t?t.firstNode():void 0}toString(){return this.children.map((t=>t.toString())).join("")}}function yt(t){return new gt(t)}function vt(t,e,n){let o={};for(let r=e;r<=n;r++)o[t[r].key]=r;return o}const wt=Node.prototype,$t=wt.insertBefore,xt=wt.removeChild;class Nt{constructor(t){this.content=[],this.html=t}mount(t,e){this.parentEl=t;const n=document.createElement("template");n.innerHTML=this.html,this.content=[...n.content.childNodes];for(let n of this.content)$t.call(t,n,e);if(!this.content.length){const n=document.createTextNode("");this.content.push(n),$t.call(t,n,e)}}moveBeforeDOMNode(t,e=this.parentEl){this.parentEl=e;for(let n of this.content)$t.call(e,n,t)}moveBeforeVNode(t,e){const n=t?t.content[0]:e;this.moveBeforeDOMNode(n)}patch(t){if(this===t)return;const e=t.html;if(this.html!==e){const n=this.parentEl,o=this.content[0],r=document.createElement("template");r.innerHTML=e;const i=[...r.content.childNodes];for(let t of i)$t.call(n,t,o);if(!i.length){const t=document.createTextNode("");i.push(t),$t.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)xt.call(t,e)}firstNode(){return this.content[0]}toString(){return this.html}}function kt(t){return new Nt(t)}function Et(t,e,n=null){t.mount(e,n)}const At=new WeakMap,Tt=new WeakMap;function _t(t,e){if(!t)return!1;const n=t.fiber;n&&At.set(n,e);const o=Tt.get(t);if(o){let t=!1;for(let n=o.length-1;n>=0;n--)try{o[n](e),t=!0;break}catch(t){e=t}if(t)return!0}return _t(t.parent,e)}function Ct(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);At.set(o.root,e)}if(!_t(n,e)){console.warn("[Owl] Unhandled error. Destroying the root component");try{n.app.destroy()}catch(t){console.error(t)}throw e}}function Ot(){throw new i("Attempted to render cancelled fiber")}function St(t){let e=0;for(let n of t){let t=n.node;n.render=Ot,0===t.status&&t.cancel(),t.fiber=null,n.bdom?t.forceNextRender=!0:e++,e+=St(n.children)}return e}class Dt{constructor(t,e){if(this.bdom=null,this.children=[],this.appliedToDom=!1,this.deep=!1,this.childrenMap={},this.node=t,this.parent=e,e){this.deep=e.deep;const t=e.root;t.setCounter(t.counter+1),this.root=t,e.children.push(this)}else this.root=this}render(){let t=this.root.node,e=t.app.scheduler,n=t.parent;for(;n;){if(n.fiber){let o=n.fiber.root;if(0!==o.counter||!(t.parentKey in n.fiber.childrenMap))return void e.delayedRenders.push(this);n=o.node}t=n,n=n.parent}this._render()}_render(){const t=this.node,e=this.root;if(e){try{this.bdom=!0,this.bdom=t.renderFn()}catch(e){t.app.handleError({node:t,error:e})}e.setCounter(e.counter-1)}}}class Lt extends Dt{constructor(){super(...arguments),this.counter=1,this.willPatch=[],this.patched=[],this.mounted=[],this.locked=!1}complete(){const t=this.node;let e;this.locked=!0;try{for(e of this.willPatch){let t=e.node;if(t.fiber===e){const e=t.component;for(let n of t.willPatch)n.call(e)}}e=void 0,t._patch(),this.locked=!1;let n=this.mounted;for(;e=n.pop();)if(e.appliedToDom)for(let t of e.node.mounted)t();let o=this.patched;for(;e=o.pop();)if(e.appliedToDom)for(let t of e.node.patched)t()}catch(n){this.locked=!1,t.app.handleError({fiber:e||this,error:n})}}setCounter(t){this.counter=t,0===t&&this.node.app.scheduler.flush()}}class Rt extends Lt{constructor(t,e,n={}){super(t,null),this.target=e,this.position=n.position||"last-child"}complete(){let t=this;try{const e=this.node;if(e.children=this.childrenMap,e.app.constructor.validateTarget(this.target),e.bdom)e.updateDom();else if(e.bdom=this.bdom,"last-child"===this.position||0===this.target.childNodes.length)Et(e.bdom,this.target);else{const t=this.target.childNodes[0];Et(e.bdom,this.target,t)}e.fiber=null,e.status=1,this.appliedToDom=!0;let n=this.mounted;for(;t=n.pop();)if(t.appliedToDom)for(let e of t.node.mounted)e()}catch(e){this.node.app.handleError({fiber:t,error:e})}}}const Bt=Symbol("Key changes"),Pt=()=>{throw new Error("Called NO_CALLBACK. Owl is broken, please report this to the maintainers.")},jt=Object.prototype.toString,Mt=Object.prototype.hasOwnProperty,It=["Object","Array","Set","Map","WeakMap"],Wt=["Set","Map","WeakMap"];function Ft(t){return jt.call(Ut(t)).slice(8,-1)}function Vt(t){return"object"==typeof t&&It.includes(Ft(t))}function Kt(t,e){return Vt(t)?te(t,e):t}const zt=new WeakSet;function Ht(t){return zt.add(t),t}function Ut(t){return Jt.has(t)?Jt.get(t):t}const qt=new WeakMap;function Gt(t,e,n){if(n===Pt)return;qt.get(t)||qt.set(t,new Map);const o=qt.get(t);o.get(e)||o.set(e,new Set),o.get(e).add(n),Yt.has(n)||Yt.set(n,new Set),Yt.get(n).add(t)}function Xt(t,e){const n=qt.get(t);if(!n)return;const o=n.get(e);if(o)for(const t of[...o])Zt(t),t()}const Yt=new WeakMap;function Zt(t){const e=Yt.get(t);if(e){for(const n of e){const e=qt.get(n);if(e)for(const[n,o]of e.entries())o.delete(t),o.size||e.delete(n)}e.clear()}}const Jt=new WeakMap,Qt=new WeakMap;function te(t,e=Pt){if(!Vt(t))throw new i("Cannot make the given value reactive");if(zt.has(t))return t;if(Jt.has(t))return te(Jt.get(t),e);Qt.has(t)||Qt.set(t,new WeakMap);const n=Qt.get(t);if(!n.has(e)){const o=Ft(t),r=Wt.includes(o)?function(t,e,n){const o=le[n](t,e);return Object.assign(ee(e),{get:(t,n)=>Mt.call(o,n)?o[n]:(Gt(t,n,e),Kt(t[n],e))})}(t,e,o):ee(e),i=new Proxy(t,r);n.set(e,i),Jt.set(i,t)}return n.get(e)}function ee(t){return{get(e,n,o){const r=Object.getOwnPropertyDescriptor(e,n);return!r||r.writable||r.configurable?(Gt(e,n,t),Kt(Reflect.get(e,n,o),t)):Reflect.get(e,n,o)},set(t,e,n,o){const r=Mt.call(t,e),i=Reflect.get(t,e,o),s=Reflect.set(t,e,Ut(n),o);return!r&&Mt.call(t,e)&&Xt(t,Bt),(i!==Reflect.get(t,e,o)||"length"===e&&Array.isArray(t))&&Xt(t,e),s},deleteProperty(t,e){const n=Reflect.deleteProperty(t,e);return Xt(t,Bt),Xt(t,e),n},ownKeys:e=>(Gt(e,Bt,t),Reflect.ownKeys(e)),has:(e,n)=>(Gt(e,Bt,t),Reflect.has(e,n))}}function ne(t,e,n){return o=>(o=Ut(o),Gt(e,o,n),Kt(e[t](o),n))}function oe(t,e,n){return function*(){Gt(e,Bt,n);const o=e.keys();for(const r of e[t]()){const t=o.next().value;Gt(e,t,n),yield Kt(r,n)}}}function re(t,e){return function(n,o){Gt(t,Bt,e),t.forEach((function(r,i,s){Gt(t,i,e),n.call(o,Kt(r,e),Kt(i,e),Kt(s,e))}),o)}}function ie(t,e,n){return(o,r)=>{o=Ut(o);const i=n.has(o),s=n[e](o),l=n[t](o,r);return i!==n.has(o)&&Xt(n,Bt),s!==n[e](o)&&Xt(n,o),l}}function se(t){return()=>{const e=[...t.keys()];t.clear(),Xt(t,Bt);for(const n of e)Xt(t,n)}}const le={Set:(t,e)=>({has:ne("has",t,e),add:ie("add","has",t),delete:ie("delete","has",t),keys:oe("keys",t,e),values:oe("values",t,e),entries:oe("entries",t,e),[Symbol.iterator]:oe(Symbol.iterator,t,e),forEach:re(t,e),clear:se(t),get size(){return Gt(t,Bt,e),t.size}}),Map:(t,e)=>({has:ne("has",t,e),get:ne("get",t,e),set:ie("set","get",t),delete:ie("delete","has",t),keys:oe("keys",t,e),values:oe("values",t,e),entries:oe("entries",t,e),[Symbol.iterator]:oe(Symbol.iterator,t,e),forEach:re(t,e),clear:se(t),get size(){return Gt(t,Bt,e),t.size}}),WeakMap:(t,e)=>({has:ne("has",t,e),get:ne("get",t,e),set:ie("set","get",t),delete:ie("delete","has",t)})};let ae=null;function ce(){if(!ae)throw new i("No active component (a hook function should only be called in 'setup')");return ae}function he(t,e){for(let n in e)void 0===t[n]&&(t[n]=e[n])}const ue=new WeakMap;function de(t){const e=ce();let n=ue.get(e);return n||(n=x(e.render.bind(e,!1)),ue.set(e,n),e.willDestroy.push(Zt.bind(null,n))),te(t,n)}class fe{constructor(t,e,n,o,r){this.fiber=null,this.bdom=null,this.status=0,this.forceNextRender=!1,this.nextProps=null,this.children=Object.create(null),this.refs={},this.willStart=[],this.willUpdateProps=[],this.willUnmount=[],this.mounted=[],this.willPatch=[],this.patched=[],this.willDestroy=[],ae=this,this.app=n,this.parent=o,this.props=e,this.parentKey=r;const i=t.defaultProps;e=Object.assign({},e),i&&he(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&&Jt.has(n)&&(e[t]=de(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(),ae=null}mountComponent(t,e){const n=new Rt(this,t,e);this.app.scheduler.addFiber(n),this.initiateRender(n)}async initiateRender(t){this.fiber=t,this.mounted.length&&t.root.mounted.push(t);const e=this.component;try{await Promise.all(this.willStart.map((t=>t.call(e))))}catch(t){return void this.app.handleError({node:this,error:t})}0===this.status&&this.fiber===t&&t.render()}async render(t){if(this.status>=2)return;let e=this.fiber;if(e&&(e.root.locked||!0===e.bdom)&&(await Promise.resolve(),e=this.fiber),e){if(!e.bdom&&!At.has(e))return void(t&&(e.deep=t));t=t||e.deep}else if(!this.bdom)return;const n=function(t){let e=t.fiber;if(e){let t=e.root;return t.locked=!0,t.setCounter(t.counter+1-St(e.children)),t.locked=!1,e.children=[],e.childrenMap={},e.bdom=null,At.has(e)&&(At.delete(e),At.delete(t),e.appliedToDom=!1),e}const n=new Lt(t,null);return t.willPatch.length&&n.willPatch.push(n),t.patched.length&&n.patched.push(n),n}(this);n.deep=t,this.fiber=n,this.app.scheduler.addFiber(n),await Promise.resolve(),this.status>=2||this.fiber!==n||!e&&n.parent||n.render()}cancel(){this._cancel(),delete this.parent.children[this.parentKey],this.app.scheduler.scheduleDestroy(this)}_cancel(){this.status=2;const t=this.children;for(let e in t)t[e]._cancel()}destroy(){let t=1===this.status;this._destroy(),t&&this.bdom.remove()}_destroy(){const t=this.component;if(1===this.status)for(let e of this.willUnmount)e.call(t);for(let t of Object.values(this.children))t._destroy();if(this.willDestroy.length)try{for(let e of this.willDestroy)e.call(t)}catch(t){this.app.handleError({error:t,node:this})}this.status=3}async updateAndRender(t,e){this.nextProps=t,t=Object.assign({},t);const n=function(t,e){let n=t.fiber;return n&&(St(n.children),n.root=null),new Dt(t,e)}(this,e);this.fiber=n;const o=this.component,r=o.constructor.defaultProps;r&&he(t,r),ae=this;for(const e in t){const n=t[e];n&&"object"==typeof n&&Jt.has(n)&&(t[e]=de(n))}ae=null;const 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=ue.get(this);return t?(e=t,[...Yt.get(e)||[]].map((t=>{const n=qt.get(t);let o=[];if(n)for(const[t,r]of n)r.has(e)&&o.push(t);return{target:t,keys:o}}))):[];var e}}const pe=Symbol("timeout");function me(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=ce();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(pe)),3e3)))]).then((e=>{e===pe&&r.fiber===t&&r.status<=2&&console.warn(o)}))}return n.catch(s)}return n}catch(t){s(t)}}}function be(t){const e=ce(),n=e.app.dev?me:t=>t;e.mounted.push(n(t.bind(e.component),"onMounted"))}function ge(t){const e=ce(),n=e.app.dev?me:t=>t;e.patched.push(n(t.bind(e.component),"onPatched"))}function ye(t){const e=ce(),n=e.app.dev?me:t=>t;e.willUnmount.unshift(n(t.bind(e.component),"onWillUnmount"))}class ve{constructor(t,e,n){this.props=t,this.env=e,this.__owl__=n}setup(){}render(t=!1){this.__owl__.render(!0===t)}}ve.template="";const we=U("").constructor;class $e extends we{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 xe extends ve{setup(){const t=this.__owl__;be((()=>{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)}})),ye((()=>{t.bdom.remove()}))}}xe.template="__portal__",xe.props={target:{type:String},slots:!0};const Ne=t=>Array.isArray(t),ke=t=>"object"!=typeof t,Ee=t=>"object"==typeof t&&t&&"value"in t;function Ae(t){return"object"==typeof t&&"optional"in t&&t.optional||!1}function Te(t){return"*"===t||!0===t?"value":t.name.toLowerCase()}function _e(t){return ke(t)?Te(t):Ne(t)?t.map(_e).join(" or "):Ee(t)?String(t.value):"element"in t?`list of ${_e({type:t.element,optional:!1})}s`:"shape"in t?"object":_e(t.type||"*")}function Ce(t,e){var n;Array.isArray(e)&&(n=e,e=Object.fromEntries(n.map((t=>t.endsWith("?")?[t.slice(0,-1),{optional:!0}]:[t,{type:"*",optional:!1}])))),t=Ut(t);let o=[];for(let n in t)if(n in e){let r=Oe(n,t[n],e[n]);r&&o.push(r)}else"*"in e||o.push(`unknown key '${n}'`);for(let n in e){const r=e[n];if("*"!==n&&!Ae(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 ${_e(r)})`;o.push(`'${n}' is missing${e}`)}}return o}function Oe(t,e,n){if(void 0===e)return Ae(n)?null:`'${t}' is undefined (should be a ${_e(n)})`;if(ke(n))return function(t,e,n){if("function"==typeof n)if("object"==typeof e){if(!(e instanceof n))return`'${t}' is not a ${Te(n)}`}else if(typeof e!==n.name.toLowerCase())return`'${t}' is not a ${Te(n)}`;return null}(t,e,n);if(Ee(n))return e===n.value?null:`'${t}' is not equal to '${n.value}'`;if(Ne(n)){let o=n.find((n=>!Oe(t,e,n)));return o?null:`'${t}' is not a ${_e(n)}`}let o=null;if("element"in n)o=function(t,e,n){if(!Array.isArray(e))return`'${t}' is not a list of ${_e(n)}s`;for(let o=0;o<e.length;o++){const r=Oe(`${t}[${o}]`,e[o],n);if(r)return r}return null}(t,e,n.element);else if("shape"in n)if("object"!=typeof e||Array.isArray(e))o=`'${t}' is not an object`;else{const r=Ce(e,n.shape);r.length&&(o=`'${t}' doesn't have the correct shape (${r.join(", ")})`)}else if("values"in n)if("object"!=typeof e||Array.isArray(e))o=`'${t}' is not an object`;else{const r=Object.entries(e).map((([t,e])=>Oe(t,e,n.values))).filter(Boolean);r.length&&(o=`some of the values in '${t}' are invalid (${r.join(", ")})`)}return"type"in n&&!o&&(o=Oe(t,e,n.type)),"validate"in n&&!o&&(o=n.validate(e)?null:`'${t}' is not valid`),o}const Se=Object.create;function De(t){const e=Se(t);for(let n in t)e[n]=t[n];return e}const Le=Symbol("isBoundary");class Re{constructor(t,e,n,o,r){this.fn=t,this.ctx=De(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)&&!Ae(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=Ce(e,r);if(l.length)throw new i(`Invalid props for component '${o.name}': `+l.join(", "))}const Pe={withDefault:function(t,e){return null==t||!1===t?e:t},zero:Symbol("zero"),isBoundary:Le,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=Se(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),j([s,a])}return f||U("")},capture:De,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(Le);){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:Re,safeOutput:function(t,e){if(null==t)return e?r("default",e):r("undefined",U(""));let n,o;switch(typeof t){case"object":t instanceof E?(n="string_safe",o=kt(t)):t instanceof Re?(n="lazy_value",o=t.evaluate()):t instanceof String?(n="string_unsafe",o=U(t)):(n="block_safe",o=t);break;case"string":n="string_unsafe",o=U(t);break;default:n="string_unsafe",o=U(String(t))}return r(n,o)},createCatcher:function(t){const e=Object.keys(t).length;class n{constructor(t,e){this.handlerFns=[],this.afterNode=null,this.child=t,this.handlerData=e}mount(e,n){this.parentEl=e,this.child.mount(e,n),this.afterNode=document.createTextNode(""),e.insertBefore(this.afterNode,n),this.wrapHandlerData();for(let n in t){const o=t[n],r=A(n);this.handlerFns[o]=r,r.setup.call(e,this.handlerData[o])}}wrapHandlerData(){for(let t=0;t<e;t++){let e=this.handlerData[t],n=e.length-2,o=e[n];const r=this;e[n]=function(t){const e=t.target;let n=r.child.firstNode();const 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:Ht,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 je(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 Me={text:U,createBlock:rt,list:yt,multi:j,html:kt,toggler:r,comment:q};class Ie{constructor(t={}){if(this.rawTemplates=Object.create(We),this.templates={},this.Portal=xe,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){We[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:je(t);for(const e of t.querySelectorAll("[t-name]")){const t=e.getAttribute("t-name");this.addTemplate(t,e)}}}getTemplate(t){var e;if(!(t in this.templates)){const n=(null===(e=this.getRawTemplate)||void 0===e?void 0:e.call(this,t))||this.rawTemplates[t];if(void 0===n){let e="";try{e=` (for component "${ce().component.constructor.name}")`}catch{}throw new 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,Me,Pe);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 We={};function Fe(...t){const e="__template__"+Fe.nextId++,n=String.raw(...t);return We[e]=n,e}Fe.nextId=1,Ie.registerTemplate("__portal__",(function(t,e,n){let{callSlot:o}=n;return function(t,e,n=""){return new $e(t.props.target,o(t,e,n,"default",!1,null))}}));const Ve="true,false,NaN,null,undefined,debugger,console,window,in,instanceof,new,function,return,eval,void,Math,RegExp,Array,Object,Date".split(","),Ke=Object.assign(Object.create(null),{and:"&&",or:"||",gt:">",gte:">=",lt:"<",lte:"<="}),ze=Object.assign(Object.create(null),{"{":"LEFT_BRACE","}":"RIGHT_BRACE","[":"LEFT_BRACKET","]":"RIGHT_BRACKET",":":"COLON",",":"COMMA","(":"LEFT_PAREN",")":"RIGHT_PAREN"}),He="...,.,===,==,+,!==,!=,!,||,&&,>=,>,<=,<,?,-,*,/,%,typeof ,=>,=,;,in ,new ,|,&,^,~".split(",");const Ue=[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 He)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 Ke?{type:"OPERATOR",value:Ke[e],size:e.length}:{type:"SYMBOL",value:e}}return!1},function(t){const e=t[0];return!(!e||!(e in ze))&&{type:ze[e],value:e}}];const qe=t=>t&&("LEFT_BRACE"===t.type||"COMMA"===t.type),Ge=t=>t&&("RIGHT_BRACE"===t.type||"COMMA"===t.type);function Xe(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 Ue)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":case"LEFT_PAREN":r.push(t.type);break;case"RIGHT_BRACE":case"RIGHT_BRACKET":case"RIGHT_PAREN":r.pop()}let a="SYMBOL"===t.type&&!Ve.includes(t.value);if("SYMBOL"!==t.type||Ve.includes(t.value)||i&&("LEFT_BRACE"===l&&qe(i)&&Ge(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=>Ze(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 Ye=new Map([["in "," in "]]);function Ze(t){return Xe(t).map((t=>Ye.get(t.value)||t.value)).join("")}const Je=/\{\{.*?\}\}|\#\{.*?\}/g;function Qe(t,e){let n=t.match(Je);if(n&&n[0].length===t.length)return`(${e(t.slice(2,"{"===n[0][0]?-2:-1))})`;let o=t.replace(Je,(t=>"${"+e(t.slice(2,"{"===t[0]?-2:-1))+"}"));return"`"+o+"`"}function tn(t){return Qe(t,Ze)}const en=/\s+/g,nn=document.implementation.createDocument(null,null,null),on=new Set(["stop","capture","prevent","self","synthetic"]);let rn={};function sn(t=""){return rn[t]=(rn[t]||0)+1,t+rn[t]}function ln(t,e){switch(t){case"input":return"checked"===e||"indeterminate"===e||"value"===e||"readonly"===e||"readOnly"===e||"disabled"===e;case"option":return"selected"===e||"disabled"===e;case"textarea":return"value"===e||"readonly"===e||"readOnly"===e||"disabled"===e;case"select":return"value"===e||"disabled"===e;case"button":case"optgroup":return"disabled"===e}return!1}function an(t){return`\`${t.replace(/\\/g,"\\\\").replace(/`/g,"\\`").replace(/\$\{/,"\\${")}\``}class cn{constructor(t,e){this.dynamicTagName=null,this.isRoot=!1,this.hasDynamicChildren=!1,this.children=[],this.data=[],this.childNumber=0,this.parentVar="",this.id=cn.nextBlockId++,this.varName="b"+this.id,this.blockName="block"+this.id,this.target=t,this.type=e}insertData(t,e="d"){const n=sn(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=nn.createElement("t");return t.appendChild(this.dom),t.innerHTML}}function hn(t,e){return Object.assign({block:null,index:0,forceNewBlock:!0,translate:t.translate,tKeyExpr:null,nameSpace:t.nameSpace,tModelSelectedExpr:t.tModelSelectedExpr},e)}cn.nextBlockId=1;class un{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 dn=["label","title","placeholder","alt"],fn=/^(\s*)([\s\S]+?)(\s*)$/;class pn{constructor(t,e){if(this.blocks=[],this.nextBlockId=1,this.isDebug=!1,this.targets=[],this.target=new un("template"),this.translatableAttributes=dn,this.staticDefs=[],this.slotNames=new Set,this.helpers=new Set,this.translateFn=e.translateFn||(t=>t),e.translatableAttributes){const t=new Set(dn);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,cn.nextBlockId=1,rn={},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=an(t.asXmlString());t.dynamicTagName?(n=n.replace(/^`<\w+/,`\`<\${tag || '${t.dom.nodeName}'}`),n=n.replace(/\w+>`$/,`\${tag || '${t.dom.nodeName}'}>\``),e.push(`let ${t.blockName} = tag => createBlock(${n});`)):e.push(`let ${t.blockName} = createBlock(${n});`)}}if(this.targets.length)for(let t of this.targets)e.push(""),e=e.concat(t.generateCode());e.push(""),e=e.concat("return "+this.target.generateCode());const n=e.join("\n ");if(this.isDebug){const t=`[Owl Debug]\n${n}`;console.log(t)}return n}compileInNewTarget(t,e,n,o){const r=sn(t),i=this.target,s=new un(r,o);return this.targets.push(s),this.target=s,this.compileAST(e,hn(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=nn.createElement(n);t.insert(o)}createBlock(t,e,n){const o=this.target.hasRoot,r=new cn(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 Ze(t);const n=Xe(t),o=new Map;return n.map((t=>{if(t.varName&&!t.isLocal){if(!o.has(t.varName)){const e=sn("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=fn.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(${Ze(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(${an(t.value)})`,n,{...e,forceNewBlock:o&&!n});else{const e=nn.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(en," ")),!n||o)n=this.createBlock(n,"text",e),this.insertBlock(`text(${an(r)})`,n,{...e,forceNewBlock:o&&!n});else{const e=0===t.type?nn.createTextNode:nn.createComment;n.insert(e.call(nn,r))}return n.varName}generateHandlerCode(t,e){const n=t.split(".").slice(1).map((t=>{if(!on.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=sn("tag");this.define(e,Ze(t.dynamicTag)),n.dynamicTagName=e}const s={};for(let o in t.attrs){let r,i;if(o.startsWith("t-attf")){r=tn(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=Ze(t.attrs[o]),i&&ln(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=Ze(o),f=sn("bExpr");this.define(f,d);const p=Ze(r),m=sn("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=Ze(n))}g=n.insertData(`${b} === ${e}`,"prop"),s[`block-property-${g}`]=u}else if(e){l=`${sn("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=Je.test(t.ref);let o=`\`${t.ref}\``;e&&(o=Qe(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?nn.createElementNS(a,t.tag):nn.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=hn(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=Ze(t.expr),t.defaultValue&&(this.helpers.add("withDefault"),n=`withDefault(${n}, ${an(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=nn.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=cn.nextBlockId;const r=hn(e);this.compileAST({type:3,content:t.body},r),this.helpers.add("safeOutput"),n=`safeOutput(${Ze(t.expr)}, b${o})`}else this.helpers.add("safeOutput"),n=`safeOutput(${Ze(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,hn(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 (${Ze(t.condition)}) {`),this.compileTIfBranch(t.content,o,e),t.tElif)for(let n of t.tElif)this.addLine(`} else if (${Ze(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(${Ze(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?Ze(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=sn(),this.define(`memo${a}`,Ze(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=hn(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=sn("tKey_");return this.define(n,Ze(t.expr)),e=hn(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=hn(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=sn("ctx"),this.addLine(`let ${r} = ${Ze(t.context)};`));const i=Je.test(t.name),s=i?tn(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=hn(e,{ctxVar:r}),o=this.compileMulti({type:3,content:t.body},n);o&&(this.helpers.add("zero"),this.addLine(`${r}[zero] = ${o};`))}const l=this.generateComponentKey();if(i){const t=sn("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=sn("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(Ze(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?Ze(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=an(e.translate?this.translate(t.defaultValue):t.defaultValue);o=t.value?`withDefault(${n}, ${r})`:r}else o=n;this.helpers.add("setContextValue"),this.addLine(`setContextValue(${e.ctxVar||"ctx"}, "${t.name}", ${o});`)}return null}generateComponentKey(t="key"){const e=[sn("__")];for(let t=0;t<this.target.loopLevel;t++)e.push(`\${key${t+1}}`);return`${t} + \`${e.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({}, ${Ze(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=sn("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,a=this.getPropString(r,t.dynamicProps);(i&&(t.dynamicProps||o)||this.dev)&&(s=sn("props"),this.define(s,a),a=s),i&&(t.dynamicProps||o)&&(this.helpers.add("markRaw"),this.addLine(`${s}.slots = markRaw(Object.assign(${i}, ${s}.slots))`)),t.isDynamic?(l=sn("Comp"),this.define(l,Ze(t.name))):l=`\`${t.name}\``,this.dev&&this.addLine(`helpers.validateProps(${l}, ${s}, this);`),n&&(!1===e.forceNewBlock||e.tKeyExpr)&&this.insertAnchor(n);let c=this.generateComponentKey();e.tKeyExpr&&(c=`${e.tKeyExpr} + ${c}`);let h=sn("comp");const u=[];for(let e in t.props||{}){let[t,n]=e.split(".");n||u.push(`"${t}"`)}this.staticDefs.push({id:h,expr:`app.createComponent(${t.isDynamic?null:l}, ${!t.isDynamic}, ${!!t.slots}, ${!!t.dynamicProps}, [${u}])`}),t.isDynamic&&(c=`(${l}).name + ${c}`);let d=`${h}(${a}, ${c}, node, this, ${t.isDynamic?l:null})`;return t.isDynamic&&(d=`toggler(${l}, ${d})`),t.on&&(d=this.wrapWithEventCatcher(d,t.on)),n=this.createBlock(n,"multi",e),this.insertBlock(d,n,e),n.varName}wrapWithEventCatcher(t,e){this.helpers.add("createCatcher");let n=sn("catcher"),o={},r=[];for(let t in e){let n=sn("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(Je)?(i=!0,s=!0,o=tn(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=this.generateComponentKey(a));const c=t.attrs?this.formatPropObject(t.attrs):[],h=this.getPropString(c,l);if(t.defaultContent){n=`callSlot(ctx, node, ${a}, ${o}, ${i}, ${h}, ${this.compileInNewTarget("defaultContent",t.defaultContent,e)}.bind(this))`}else if(i){let t=sn("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);let r="ctx";!this.target.loopLevel&&this.hasSafeContext||(r=sn("ctx"),this.helpers.add("capture"),this.define(r,"capture(ctx)"));let i=sn("comp");this.staticDefs.push({id:i,expr:"app.createComponent(null, false, true, false, false)"});const s=`${i}({target: ${Ze(t.target)},slots: {'default': {__render: ${o}.bind(this), __ctx: ${r}}}}, ${this.generateComponentKey()}, node, ctx, Portal)`;return n&&this.insertAnchor(n),n=this.createBlock(n,"multi",e),this.insertBlock(s,n,{...e,forceNewBlock:!1}),n.varName}}const mn=new WeakMap;function bn(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 gn(t,{inPreTag:!1})||{type:0,value:""}}function gn(t,e){return t instanceof Element?function(t,e){if(t.hasAttribute("t-debug"))return t.removeAttribute("t-debug"),{type:12,content:gn(t,e)};if(t.hasAttribute("t-log")){const n=t.getAttribute("t-log");return t.removeAttribute("t-log"),{type:13,expr:n,content:gn(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=gn(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=gn(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=gn(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=gn(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=gn(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=gn(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=Nn(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=gn(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=gn(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=gn(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:gn(t,e)}}(t,e)||function(t,e){if(!t.hasAttribute("t-slot"))return null;const n=t.getAttribute("t-slot");t.removeAttribute("t-slot");let o=null,r=null;for(let e of t.getAttributeNames()){const n=t.getAttribute(e);e.startsWith("t-on-")?(r=r||{},r[e.slice(5)]=n):(o=o||{},o[e]=n)}return{type:14,name:n,attrs:o,on:r,defaultContent:kn(t,e)}}(t,e)||function(t,e){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=xn.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=gn(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=kn(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&&$n.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(vn.test(s)){const t=s.lastIndexOf(".");r=s.slice(0,t),l=`'${s.slice(t+1)}'`}else{if(!wn.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=Nn(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=Nn(t,e));return{type:6,name:n,value:o,defaultValue:r,body:i}}(t,e)||function(t,e){if("t"!==t.tagName)return null;return kn(t,e)}(t,e):function(t,e){if(t.nodeType===Node.TEXT_NODE){let n=t.textContent||"";return e.inPreTag||!yn.test(n)||n.trim()?{type:0,value:n}:null}if(t.nodeType===Node.COMMENT_NODE)return{type:1,value:t.textContent||""};return null}(t,e)}const yn=/[\r\n]/;const vn=/\.[\w_]+\s*$/,wn=/\[[^\[]+\]\s*$/,$n=new Set(["svg","g","path"]);const xn=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 Nn(t,e){const n=[];for(let o of t.childNodes){const t=gn(o,e);t&&(3===t.type?n.push(...t.content):n.push(t))}return n}function kn(t,e){const n=Nn(t,e);switch(n.length){case 0:return null;case 1:return n[0];default:return{type:3,content:n}}}function En(t,e={}){const n=function(t){if("string"==typeof t)return bn(je(`<t>${t}</t>`).firstChild);let e=mn.get(t);return e||(e=bn(t.cloneNode(!0)),mn.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 pn(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 An{constructor(){this.tasks=new Set,this.frame=0,this.delayedRenders=[],this.cancelledNodes=new Set,this.requestAnimationFrame=An.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=At.has(t);e&&0!==t.counter?this.tasks.delete(t):3!==t.node.status?0===t.counter&&(e||t.complete(),this.tasks.delete(t)):this.tasks.delete(t)}}An.requestAnimationFrame=window.requestAnimationFrame.bind(window);let Tn=!1;const _n=new Set;window.__OWL_DEVTOOLS__||(window.__OWL_DEVTOOLS__={apps:_n,Fiber:Dt,RootFiber:Lt,toRaw:Ut,reactive:te});class Cn extends Ie{constructor(t,e={}){super(e),this.scheduler=new An,this.root=null,this.name=e.name||"",this.Root=t,_n.add(this),e.test&&(this.dev=!0),this.warnIfNoStaticProps=e.warnIfNoStaticProps||!1,!this.dev||e.test||Tn||(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.`),Tn=!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){Cn.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 fe(t,e,this,null,null)}mountNode(t,e,n){const o=new Promise(((e,n)=>{let o=!1;t.mounted.push((()=>{e(t.component),o=!0}));let r=Tt.get(t);r||(r=[],Tt.set(t,r)),r.unshift((t=>{throw o||n(t),t}))}));return t.mountComponent(e,n),o}destroy(){this.root&&(this.root.destroy(),this.scheduler.processTasks()),_n.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=fe.prototype.updateAndRender,h=fe.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 ve))throw new i(`"${t}" is not a Component. It must inherit from the Component class`)}f=new fe(u,n,this,r,o),d[o]=f,h.call(f,new Dt(f,p))}return p.childrenMap[o]=f,f}}handleError(...t){return Ct(...t)}}Cn.validateTarget=function(t){const e=t&&t.ownerDocument;if(e){const n=e.defaultView.HTMLElement;if(t instanceof n||t instanceof ShadowRoot){if(!e.body.contains(t instanceof n?t:t.host))throw new 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")},Cn.apps=_n,Cn.version="2.2.11";function On(t,e){const n=Object.create(t),o=Object.getOwnPropertyDescriptors(e);return Object.freeze(Object.defineProperties(n,o))}function Sn(t){const e=ce();e.childEnv=On(e.childEnv,t)}n.shouldNormalizeDom=!1,n.mainEventHandler=(t,n,o)=>{const{data:r,modifiers: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 Dn={config:n,mount:Et,patch:function(t,e,n=!1){t.patch(e,n)},remove:function(t,e=!1){e&&t.beforeRemove(),t.remove()},list:yt,multi:j,text:U,toggler:r,createBlock:rt,html:kt,comment:q},Ln={version:Cn.version};Ie.prototype._compileTemplate=function(t,e){return En(e,{name:t,dev:this.dev,translateFn:this.translateFn,translatableAttributes:this.translatableAttributes})},t.App=Cn,t.Component=ve,t.EventBus=k,t.OwlError=i,t.__info__=Ln,t.batched=x,t.blockDom=Dn,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=Ht,t.markup=function(t){return new E(t)},t.mount=async function(t,e,n={}){return new Cn(t,n).mount(e,n)},t.onError=function(t){const e=ce();let n=Tt.get(e);n||(n=[],Tt.set(e,n)),n.push(t.bind(e.component))},t.onMounted=be,t.onPatched=ge,t.onRendered=function(t){const e=ce(),n=e.renderFn,o=e.app.dev?me:t=>t;t=o(t.bind(e.component),"onRendered"),e.renderFn=()=>{const e=n();return t(),e}},t.onWillDestroy=function(t){const e=ce(),n=e.app.dev?me:t=>t;e.willDestroy.push(n(t.bind(e.component),"onWillDestroy"))},t.onWillPatch=function(t){const e=ce(),n=e.app.dev?me:t=>t;e.willPatch.unshift(n(t.bind(e.component),"onWillPatch"))},t.onWillRender=function(t){const e=ce(),n=e.renderFn,o=e.app.dev?me:t=>t;t=o(t.bind(e.component),"onWillRender"),e.renderFn=()=>(t(),n())},t.onWillStart=function(t){const e=ce(),n=e.app.dev?me:t=>t;e.willStart.push(n(t.bind(e.component),"onWillStart"))},t.onWillUnmount=ye,t.onWillUpdateProps=function(t){const e=ce(),n=e.app.dev?me:t=>t;e.willUpdateProps.push(n(t.bind(e.component),"onWillUpdateProps"))},t.reactive=te,t.status=function(t){switch(t.__owl__.status){case 0:return"new";case 2:return"cancelled";case 1:return"mounted";case 3:return"destroyed"}},t.toRaw=Ut,t.useChildSubEnv=Sn,t.useComponent=function(){return ae.component},t.useEffect=function(t,e=(()=>[NaN])){let n,o;be((()=>{o=e(),n=t(...o)})),ge((()=>{const r=e();r.some(((t,e)=>t!==o[e]))&&(o=r,n&&n(),n=t(...o))})),ye((()=>n&&n()))},t.useEnv=function(){return ce().component.env},t.useExternalListener=function(t,e,n,o){const r=ce(),i=n.bind(r.component);be((()=>t.addEventListener(e,i,o))),ye((()=>t.removeEventListener(e,i,o)))},t.useRef=function(t){const e=ce().refs;return{get el(){const n=e[t];return N(n)?n:null}}},t.useState=de,t.useSubEnv=function(t){const e=ce();e.component.env=On(e.component.env,t),Sn(t)},t.validate=function(t,e){let n=Ce(t,e);if(n.length)throw new i("Invalid object: "+n.join(", "))},t.validateType=Oe,t.whenReady=function(t){return new Promise((function(t){"loading"!==document.readyState?t(!0):document.addEventListener("DOMContentLoaded",t,!1)})).then(t||function(){})},t.xml=Fe,Object.defineProperty(t,"__esModule",{value:!0}),Ln.date="2024-06-17T13:31:12.099Z",Ln.hash="e7f405c",Ln.url="https://github.com/odoo/owl"}(this.owl=this.owl||{});
|
|
@@ -119,7 +119,7 @@ export declare class CodeGenerator {
|
|
|
119
119
|
compileTCall(ast: ASTTCall, ctx: Context): string;
|
|
120
120
|
compileTCallBlock(ast: ASTTCallBlock, ctx: Context): string;
|
|
121
121
|
compileTSet(ast: ASTTSet, ctx: Context): null;
|
|
122
|
-
generateComponentKey(): string;
|
|
122
|
+
generateComponentKey(currentKey?: string): string;
|
|
123
123
|
/**
|
|
124
124
|
* Formats a prop name and value into a string suitable to be inserted in the
|
|
125
125
|
* generated code. For example:
|
package/dist/types/owl.d.ts
CHANGED
|
@@ -124,7 +124,9 @@ 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 =
|
|
127
|
+
declare type BaseType = {
|
|
128
|
+
new (...args: any[]): any;
|
|
129
|
+
} | true | "*";
|
|
128
130
|
interface TypeInfo {
|
|
129
131
|
type?: TypeDescription;
|
|
130
132
|
optional?: boolean;
|
|
@@ -184,6 +186,14 @@ declare class MountFiber extends RootFiber {
|
|
|
184
186
|
}
|
|
185
187
|
|
|
186
188
|
declare type Callback = () => void;
|
|
189
|
+
/**
|
|
190
|
+
* Creates a batched version of a callback so that all calls to it in the same
|
|
191
|
+
* microtick will only call the original callback once.
|
|
192
|
+
*
|
|
193
|
+
* @param callback the callback to batch
|
|
194
|
+
* @returns a batched version of the original callback
|
|
195
|
+
*/
|
|
196
|
+
declare function batched(callback: Callback): Callback;
|
|
187
197
|
declare function validateTarget(target: HTMLElement | ShadowRoot): void;
|
|
188
198
|
declare class EventBus extends EventTarget {
|
|
189
199
|
trigger(name: string, payload?: any): void;
|
|
@@ -569,4 +579,4 @@ declare const __info__: {
|
|
|
569
579
|
version: string;
|
|
570
580
|
};
|
|
571
581
|
|
|
572
|
-
export { App, Component, ComponentConstructor, 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 };
|
|
582
|
+
export { App, Component, ComponentConstructor, EventBus, OwlError, __info__, batched, blockDom, loadFile, markRaw, markup, mount, onError, onMounted, onPatched, onRendered, onWillDestroy, onWillPatch, onWillRender, onWillStart, onWillUnmount, onWillUpdateProps, reactive, status, toRaw, useChildSubEnv, useComponent, useEffect, useEnv, useExternalListener, useRef, useState, useSubEnv, validate, validateType, whenReady, xml };
|
|
@@ -23,7 +23,7 @@ export { useComponent, useState } from "./component_node";
|
|
|
23
23
|
export { status } from "./status";
|
|
24
24
|
export { reactive, markRaw, toRaw } from "./reactivity";
|
|
25
25
|
export { useEffect, useEnv, useExternalListener, useRef, useChildSubEnv, useSubEnv } from "./hooks";
|
|
26
|
-
export { EventBus, whenReady, loadFile, markup } from "./utils";
|
|
26
|
+
export { batched, EventBus, whenReady, loadFile, markup } from "./utils";
|
|
27
27
|
export { onWillStart, onMounted, onWillUnmount, onWillUpdateProps, onWillPatch, onPatched, onWillRender, onRendered, onWillDestroy, onError, } from "./lifecycle_hooks";
|
|
28
28
|
export { validate, validateType } from "./validation";
|
|
29
29
|
export { OwlError } from "../common/owl_error";
|
|
@@ -1,4 +1,6 @@
|
|
|
1
|
-
declare type BaseType =
|
|
1
|
+
declare type BaseType = {
|
|
2
|
+
new (...args: any[]): any;
|
|
3
|
+
} | true | "*";
|
|
2
4
|
interface TypeInfo {
|
|
3
5
|
type?: TypeDescription;
|
|
4
6
|
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.11";
|