@odoo/owl 2.0.0-beta-10 → 2.0.0-beta-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.cjs.js +50 -29
- package/dist/owl.es.js +50 -29
- package/dist/owl.iife.js +50 -29
- package/dist/owl.iife.min.js +1 -1
- package/dist/types/compiler/code_generator.d.ts +1 -0
- package/dist/types/compiler/parser.d.ts +1 -0
- package/dist/types/runtime/template_helpers.d.ts +3 -2
- package/package.json +1 -1
package/dist/owl.cjs.js
CHANGED
|
@@ -171,6 +171,10 @@ function toClassObj(expr) {
|
|
|
171
171
|
for (let key in expr) {
|
|
172
172
|
const value = expr[key];
|
|
173
173
|
if (value) {
|
|
174
|
+
key = trim.call(key);
|
|
175
|
+
if (!key) {
|
|
176
|
+
continue;
|
|
177
|
+
}
|
|
174
178
|
const words = split.call(key, wordRegexp);
|
|
175
179
|
for (let word of words) {
|
|
176
180
|
result[word] = value;
|
|
@@ -1487,6 +1491,7 @@ function cancelFibers(fibers) {
|
|
|
1487
1491
|
fiber.render = throwOnRender;
|
|
1488
1492
|
if (node.status === 0 /* NEW */) {
|
|
1489
1493
|
node.destroy();
|
|
1494
|
+
delete node.parent.children[node.parentKey];
|
|
1490
1495
|
}
|
|
1491
1496
|
node.fiber = null;
|
|
1492
1497
|
if (fiber.bdom) {
|
|
@@ -2875,13 +2880,14 @@ function shallowEqual(l1, l2) {
|
|
|
2875
2880
|
return true;
|
|
2876
2881
|
}
|
|
2877
2882
|
class LazyValue {
|
|
2878
|
-
constructor(fn, ctx, node) {
|
|
2883
|
+
constructor(fn, ctx, component, node) {
|
|
2879
2884
|
this.fn = fn;
|
|
2880
2885
|
this.ctx = capture(ctx);
|
|
2886
|
+
this.component = component;
|
|
2881
2887
|
this.node = node;
|
|
2882
2888
|
}
|
|
2883
2889
|
evaluate() {
|
|
2884
|
-
return this.fn(this.ctx, this.node);
|
|
2890
|
+
return this.fn.call(this.component, this.ctx, this.node);
|
|
2885
2891
|
}
|
|
2886
2892
|
toString() {
|
|
2887
2893
|
return this.evaluate().toString();
|
|
@@ -2890,9 +2896,9 @@ class LazyValue {
|
|
|
2890
2896
|
/*
|
|
2891
2897
|
* Safely outputs `value` as a block depending on the nature of `value`
|
|
2892
2898
|
*/
|
|
2893
|
-
function safeOutput(value) {
|
|
2894
|
-
if (
|
|
2895
|
-
return
|
|
2899
|
+
function safeOutput(value, defaultValue) {
|
|
2900
|
+
if (value === undefined) {
|
|
2901
|
+
return defaultValue ? toggler("default", defaultValue) : toggler("undefined", text(""));
|
|
2896
2902
|
}
|
|
2897
2903
|
let safeKey;
|
|
2898
2904
|
let block;
|
|
@@ -3178,7 +3184,7 @@ const STATIC_TOKEN_MAP = Object.assign(Object.create(null), {
|
|
|
3178
3184
|
});
|
|
3179
3185
|
// note that the space after typeof is relevant. It makes sure that the formatted
|
|
3180
3186
|
// expression has a space after typeof. Currently we don't support delete and void
|
|
3181
|
-
const OPERATORS = "...,.,===,==,+,!==,!=,!,||,&&,>=,>,<=,<,?,-,*,/,%,typeof ,=>,=,;,in ,new ".split(",");
|
|
3187
|
+
const OPERATORS = "...,.,===,==,+,!==,!=,!,||,&&,>=,>,<=,<,?,-,*,/,%,typeof ,=>,=,;,in ,new ,|,&,^,~".split(",");
|
|
3182
3188
|
let tokenizeString = function (expr) {
|
|
3183
3189
|
let s = expr[0];
|
|
3184
3190
|
let start = s;
|
|
@@ -4065,16 +4071,24 @@ class CodeGenerator {
|
|
|
4065
4071
|
this.insertAnchor(block);
|
|
4066
4072
|
}
|
|
4067
4073
|
block = this.createBlock(block, "html", ctx);
|
|
4068
|
-
|
|
4069
|
-
|
|
4070
|
-
|
|
4071
|
-
|
|
4074
|
+
let blockStr;
|
|
4075
|
+
if (ast.expr === "0") {
|
|
4076
|
+
this.helpers.add("zero");
|
|
4077
|
+
blockStr = `ctx[zero]`;
|
|
4078
|
+
}
|
|
4079
|
+
else if (ast.body) {
|
|
4080
|
+
let bodyValue = null;
|
|
4081
|
+
bodyValue = BlockDescription.nextBlockId;
|
|
4072
4082
|
const subCtx = createContext(ctx);
|
|
4073
4083
|
this.compileAST({ type: 3 /* Multi */, content: ast.body }, subCtx);
|
|
4074
|
-
this.helpers.add("
|
|
4075
|
-
|
|
4084
|
+
this.helpers.add("safeOutput");
|
|
4085
|
+
blockStr = `safeOutput(${compileExpr(ast.expr)}, b${bodyValue})`;
|
|
4086
|
+
}
|
|
4087
|
+
else {
|
|
4088
|
+
this.helpers.add("safeOutput");
|
|
4089
|
+
blockStr = `safeOutput(${compileExpr(ast.expr)})`;
|
|
4076
4090
|
}
|
|
4077
|
-
this.insertBlock(
|
|
4091
|
+
this.insertBlock(blockStr, block, ctx);
|
|
4078
4092
|
}
|
|
4079
4093
|
compileTIf(ast, ctx, nextNode) {
|
|
4080
4094
|
let { block, forceNewBlock, index } = ctx;
|
|
@@ -4267,16 +4281,21 @@ class CodeGenerator {
|
|
|
4267
4281
|
}
|
|
4268
4282
|
compileTCall(ast, ctx) {
|
|
4269
4283
|
let { block, forceNewBlock } = ctx;
|
|
4284
|
+
let ctxVar = ctx.ctxVar || "ctx";
|
|
4285
|
+
if (ast.context) {
|
|
4286
|
+
ctxVar = generateId("ctx");
|
|
4287
|
+
this.addLine(`let ${ctxVar} = ${compileExpr(ast.context)};`);
|
|
4288
|
+
}
|
|
4270
4289
|
if (ast.body) {
|
|
4271
|
-
this.addLine(
|
|
4272
|
-
this.addLine(
|
|
4290
|
+
this.addLine(`${ctxVar} = Object.create(${ctxVar});`);
|
|
4291
|
+
this.addLine(`${ctxVar}[isBoundary] = 1;`);
|
|
4273
4292
|
this.helpers.add("isBoundary");
|
|
4274
4293
|
const nextId = BlockDescription.nextBlockId;
|
|
4275
|
-
const subCtx = createContext(ctx, { preventRoot: true });
|
|
4294
|
+
const subCtx = createContext(ctx, { preventRoot: true, ctxVar });
|
|
4276
4295
|
this.compileAST({ type: 3 /* Multi */, content: ast.body }, subCtx);
|
|
4277
4296
|
if (nextId !== BlockDescription.nextBlockId) {
|
|
4278
4297
|
this.helpers.add("zero");
|
|
4279
|
-
this.addLine(
|
|
4298
|
+
this.addLine(`${ctxVar}[zero] = b${nextId};`);
|
|
4280
4299
|
}
|
|
4281
4300
|
}
|
|
4282
4301
|
const isDynamic = INTERP_REGEXP.test(ast.name);
|
|
@@ -4294,7 +4313,7 @@ class CodeGenerator {
|
|
|
4294
4313
|
}
|
|
4295
4314
|
this.define(templateVar, subTemplate);
|
|
4296
4315
|
block = this.createBlock(block, "multi", ctx);
|
|
4297
|
-
this.insertBlock(`call(this, ${templateVar},
|
|
4316
|
+
this.insertBlock(`call(this, ${templateVar}, ${ctxVar}, node, ${key})`, block, {
|
|
4298
4317
|
...ctx,
|
|
4299
4318
|
forceNewBlock: !block,
|
|
4300
4319
|
});
|
|
@@ -4303,13 +4322,13 @@ class CodeGenerator {
|
|
|
4303
4322
|
const id = generateId(`callTemplate_`);
|
|
4304
4323
|
this.staticDefs.push({ id, expr: `app.getTemplate(${subTemplate})` });
|
|
4305
4324
|
block = this.createBlock(block, "multi", ctx);
|
|
4306
|
-
this.insertBlock(`${id}.call(this,
|
|
4325
|
+
this.insertBlock(`${id}.call(this, ${ctxVar}, node, ${key})`, block, {
|
|
4307
4326
|
...ctx,
|
|
4308
4327
|
forceNewBlock: !block,
|
|
4309
4328
|
});
|
|
4310
4329
|
}
|
|
4311
4330
|
if (ast.body && !ctx.isLast) {
|
|
4312
|
-
this.addLine(
|
|
4331
|
+
this.addLine(`${ctxVar} = ${ctxVar}.__proto__;`);
|
|
4313
4332
|
}
|
|
4314
4333
|
}
|
|
4315
4334
|
compileTCallBlock(ast, ctx) {
|
|
@@ -4330,7 +4349,7 @@ class CodeGenerator {
|
|
|
4330
4349
|
this.helpers.add("LazyValue");
|
|
4331
4350
|
const bodyAst = { type: 3 /* Multi */, content: ast.body };
|
|
4332
4351
|
const name = this.compileInNewTarget("value", bodyAst, ctx);
|
|
4333
|
-
let value = `new LazyValue(${name}, ctx, node)`;
|
|
4352
|
+
let value = `new LazyValue(${name}, ctx, this, node)`;
|
|
4334
4353
|
value = ast.value ? (value ? `withDefault(${expr}, ${value})` : expr) : value;
|
|
4335
4354
|
this.addLine(`ctx[\`${ast.name}\`] = ${value};`);
|
|
4336
4355
|
}
|
|
@@ -4348,7 +4367,7 @@ class CodeGenerator {
|
|
|
4348
4367
|
value = expr;
|
|
4349
4368
|
}
|
|
4350
4369
|
this.helpers.add("setContextValue");
|
|
4351
|
-
this.addLine(`setContextValue(ctx, "${ast.name}", ${value});`);
|
|
4370
|
+
this.addLine(`setContextValue(${ctx.ctxVar || "ctx"}, "${ast.name}", ${value});`);
|
|
4352
4371
|
}
|
|
4353
4372
|
}
|
|
4354
4373
|
generateComponentKey() {
|
|
@@ -4470,7 +4489,7 @@ class CodeGenerator {
|
|
|
4470
4489
|
id,
|
|
4471
4490
|
expr: `app.createComponent(${ast.isDynamic ? null : expr}, ${!ast.isDynamic}, ${!!ast.slots}, ${!!ast.dynamicProps}, ${!ast.props && !ast.dynamicProps})`,
|
|
4472
4491
|
});
|
|
4473
|
-
let blockExpr = `${id}(${propString}, ${keyArg}, node,
|
|
4492
|
+
let blockExpr = `${id}(${propString}, ${keyArg}, node, this, ${ast.isDynamic ? expr : null})`;
|
|
4474
4493
|
if (ast.isDynamic) {
|
|
4475
4494
|
blockExpr = `toggler(${expr}, ${blockExpr})`;
|
|
4476
4495
|
}
|
|
@@ -4903,10 +4922,12 @@ function parseTCall(node, ctx) {
|
|
|
4903
4922
|
return null;
|
|
4904
4923
|
}
|
|
4905
4924
|
const subTemplate = node.getAttribute("t-call");
|
|
4925
|
+
const context = node.getAttribute("t-call-context");
|
|
4906
4926
|
node.removeAttribute("t-call");
|
|
4927
|
+
node.removeAttribute("t-call-context");
|
|
4907
4928
|
if (node.tagName !== "t") {
|
|
4908
4929
|
const ast = parseNode(node, ctx);
|
|
4909
|
-
const tcall = { type: 7 /* TCall */, name: subTemplate, body: null };
|
|
4930
|
+
const tcall = { type: 7 /* TCall */, name: subTemplate, body: null, context };
|
|
4910
4931
|
if (ast && ast.type === 2 /* DomNode */) {
|
|
4911
4932
|
ast.content = [tcall];
|
|
4912
4933
|
return ast;
|
|
@@ -4923,6 +4944,7 @@ function parseTCall(node, ctx) {
|
|
|
4923
4944
|
type: 7 /* TCall */,
|
|
4924
4945
|
name: subTemplate,
|
|
4925
4946
|
body: body.length ? body : null,
|
|
4947
|
+
context,
|
|
4926
4948
|
};
|
|
4927
4949
|
}
|
|
4928
4950
|
// -----------------------------------------------------------------------------
|
|
@@ -5526,8 +5548,7 @@ class App extends TemplateSet {
|
|
|
5526
5548
|
return (props, key, ctx, parent, C) => {
|
|
5527
5549
|
let children = ctx.children;
|
|
5528
5550
|
let node = children[key];
|
|
5529
|
-
if (node &&
|
|
5530
|
-
(node.status === 2 /* DESTROYED */ || (isDynamic && node.component.constructor !== C))) {
|
|
5551
|
+
if (isDynamic && node && node.component.constructor !== C) {
|
|
5531
5552
|
node = undefined;
|
|
5532
5553
|
}
|
|
5533
5554
|
const parentFiber = ctx.fiber;
|
|
@@ -5736,7 +5757,7 @@ exports.whenReady = whenReady;
|
|
|
5736
5757
|
exports.xml = xml;
|
|
5737
5758
|
|
|
5738
5759
|
|
|
5739
|
-
__info__.version = '2.0.0-beta-
|
|
5740
|
-
__info__.date = '2022-06-
|
|
5741
|
-
__info__.hash = '
|
|
5760
|
+
__info__.version = '2.0.0-beta-11';
|
|
5761
|
+
__info__.date = '2022-06-28T13:28:26.775Z';
|
|
5762
|
+
__info__.hash = '76c389a';
|
|
5742
5763
|
__info__.url = 'https://github.com/odoo/owl';
|
package/dist/owl.es.js
CHANGED
|
@@ -167,6 +167,10 @@ function toClassObj(expr) {
|
|
|
167
167
|
for (let key in expr) {
|
|
168
168
|
const value = expr[key];
|
|
169
169
|
if (value) {
|
|
170
|
+
key = trim.call(key);
|
|
171
|
+
if (!key) {
|
|
172
|
+
continue;
|
|
173
|
+
}
|
|
170
174
|
const words = split.call(key, wordRegexp);
|
|
171
175
|
for (let word of words) {
|
|
172
176
|
result[word] = value;
|
|
@@ -1483,6 +1487,7 @@ function cancelFibers(fibers) {
|
|
|
1483
1487
|
fiber.render = throwOnRender;
|
|
1484
1488
|
if (node.status === 0 /* NEW */) {
|
|
1485
1489
|
node.destroy();
|
|
1490
|
+
delete node.parent.children[node.parentKey];
|
|
1486
1491
|
}
|
|
1487
1492
|
node.fiber = null;
|
|
1488
1493
|
if (fiber.bdom) {
|
|
@@ -2871,13 +2876,14 @@ function shallowEqual(l1, l2) {
|
|
|
2871
2876
|
return true;
|
|
2872
2877
|
}
|
|
2873
2878
|
class LazyValue {
|
|
2874
|
-
constructor(fn, ctx, node) {
|
|
2879
|
+
constructor(fn, ctx, component, node) {
|
|
2875
2880
|
this.fn = fn;
|
|
2876
2881
|
this.ctx = capture(ctx);
|
|
2882
|
+
this.component = component;
|
|
2877
2883
|
this.node = node;
|
|
2878
2884
|
}
|
|
2879
2885
|
evaluate() {
|
|
2880
|
-
return this.fn(this.ctx, this.node);
|
|
2886
|
+
return this.fn.call(this.component, this.ctx, this.node);
|
|
2881
2887
|
}
|
|
2882
2888
|
toString() {
|
|
2883
2889
|
return this.evaluate().toString();
|
|
@@ -2886,9 +2892,9 @@ class LazyValue {
|
|
|
2886
2892
|
/*
|
|
2887
2893
|
* Safely outputs `value` as a block depending on the nature of `value`
|
|
2888
2894
|
*/
|
|
2889
|
-
function safeOutput(value) {
|
|
2890
|
-
if (
|
|
2891
|
-
return
|
|
2895
|
+
function safeOutput(value, defaultValue) {
|
|
2896
|
+
if (value === undefined) {
|
|
2897
|
+
return defaultValue ? toggler("default", defaultValue) : toggler("undefined", text(""));
|
|
2892
2898
|
}
|
|
2893
2899
|
let safeKey;
|
|
2894
2900
|
let block;
|
|
@@ -3174,7 +3180,7 @@ const STATIC_TOKEN_MAP = Object.assign(Object.create(null), {
|
|
|
3174
3180
|
});
|
|
3175
3181
|
// note that the space after typeof is relevant. It makes sure that the formatted
|
|
3176
3182
|
// expression has a space after typeof. Currently we don't support delete and void
|
|
3177
|
-
const OPERATORS = "...,.,===,==,+,!==,!=,!,||,&&,>=,>,<=,<,?,-,*,/,%,typeof ,=>,=,;,in ,new ".split(",");
|
|
3183
|
+
const OPERATORS = "...,.,===,==,+,!==,!=,!,||,&&,>=,>,<=,<,?,-,*,/,%,typeof ,=>,=,;,in ,new ,|,&,^,~".split(",");
|
|
3178
3184
|
let tokenizeString = function (expr) {
|
|
3179
3185
|
let s = expr[0];
|
|
3180
3186
|
let start = s;
|
|
@@ -4061,16 +4067,24 @@ class CodeGenerator {
|
|
|
4061
4067
|
this.insertAnchor(block);
|
|
4062
4068
|
}
|
|
4063
4069
|
block = this.createBlock(block, "html", ctx);
|
|
4064
|
-
|
|
4065
|
-
|
|
4066
|
-
|
|
4067
|
-
|
|
4070
|
+
let blockStr;
|
|
4071
|
+
if (ast.expr === "0") {
|
|
4072
|
+
this.helpers.add("zero");
|
|
4073
|
+
blockStr = `ctx[zero]`;
|
|
4074
|
+
}
|
|
4075
|
+
else if (ast.body) {
|
|
4076
|
+
let bodyValue = null;
|
|
4077
|
+
bodyValue = BlockDescription.nextBlockId;
|
|
4068
4078
|
const subCtx = createContext(ctx);
|
|
4069
4079
|
this.compileAST({ type: 3 /* Multi */, content: ast.body }, subCtx);
|
|
4070
|
-
this.helpers.add("
|
|
4071
|
-
|
|
4080
|
+
this.helpers.add("safeOutput");
|
|
4081
|
+
blockStr = `safeOutput(${compileExpr(ast.expr)}, b${bodyValue})`;
|
|
4082
|
+
}
|
|
4083
|
+
else {
|
|
4084
|
+
this.helpers.add("safeOutput");
|
|
4085
|
+
blockStr = `safeOutput(${compileExpr(ast.expr)})`;
|
|
4072
4086
|
}
|
|
4073
|
-
this.insertBlock(
|
|
4087
|
+
this.insertBlock(blockStr, block, ctx);
|
|
4074
4088
|
}
|
|
4075
4089
|
compileTIf(ast, ctx, nextNode) {
|
|
4076
4090
|
let { block, forceNewBlock, index } = ctx;
|
|
@@ -4263,16 +4277,21 @@ class CodeGenerator {
|
|
|
4263
4277
|
}
|
|
4264
4278
|
compileTCall(ast, ctx) {
|
|
4265
4279
|
let { block, forceNewBlock } = ctx;
|
|
4280
|
+
let ctxVar = ctx.ctxVar || "ctx";
|
|
4281
|
+
if (ast.context) {
|
|
4282
|
+
ctxVar = generateId("ctx");
|
|
4283
|
+
this.addLine(`let ${ctxVar} = ${compileExpr(ast.context)};`);
|
|
4284
|
+
}
|
|
4266
4285
|
if (ast.body) {
|
|
4267
|
-
this.addLine(
|
|
4268
|
-
this.addLine(
|
|
4286
|
+
this.addLine(`${ctxVar} = Object.create(${ctxVar});`);
|
|
4287
|
+
this.addLine(`${ctxVar}[isBoundary] = 1;`);
|
|
4269
4288
|
this.helpers.add("isBoundary");
|
|
4270
4289
|
const nextId = BlockDescription.nextBlockId;
|
|
4271
|
-
const subCtx = createContext(ctx, { preventRoot: true });
|
|
4290
|
+
const subCtx = createContext(ctx, { preventRoot: true, ctxVar });
|
|
4272
4291
|
this.compileAST({ type: 3 /* Multi */, content: ast.body }, subCtx);
|
|
4273
4292
|
if (nextId !== BlockDescription.nextBlockId) {
|
|
4274
4293
|
this.helpers.add("zero");
|
|
4275
|
-
this.addLine(
|
|
4294
|
+
this.addLine(`${ctxVar}[zero] = b${nextId};`);
|
|
4276
4295
|
}
|
|
4277
4296
|
}
|
|
4278
4297
|
const isDynamic = INTERP_REGEXP.test(ast.name);
|
|
@@ -4290,7 +4309,7 @@ class CodeGenerator {
|
|
|
4290
4309
|
}
|
|
4291
4310
|
this.define(templateVar, subTemplate);
|
|
4292
4311
|
block = this.createBlock(block, "multi", ctx);
|
|
4293
|
-
this.insertBlock(`call(this, ${templateVar},
|
|
4312
|
+
this.insertBlock(`call(this, ${templateVar}, ${ctxVar}, node, ${key})`, block, {
|
|
4294
4313
|
...ctx,
|
|
4295
4314
|
forceNewBlock: !block,
|
|
4296
4315
|
});
|
|
@@ -4299,13 +4318,13 @@ class CodeGenerator {
|
|
|
4299
4318
|
const id = generateId(`callTemplate_`);
|
|
4300
4319
|
this.staticDefs.push({ id, expr: `app.getTemplate(${subTemplate})` });
|
|
4301
4320
|
block = this.createBlock(block, "multi", ctx);
|
|
4302
|
-
this.insertBlock(`${id}.call(this,
|
|
4321
|
+
this.insertBlock(`${id}.call(this, ${ctxVar}, node, ${key})`, block, {
|
|
4303
4322
|
...ctx,
|
|
4304
4323
|
forceNewBlock: !block,
|
|
4305
4324
|
});
|
|
4306
4325
|
}
|
|
4307
4326
|
if (ast.body && !ctx.isLast) {
|
|
4308
|
-
this.addLine(
|
|
4327
|
+
this.addLine(`${ctxVar} = ${ctxVar}.__proto__;`);
|
|
4309
4328
|
}
|
|
4310
4329
|
}
|
|
4311
4330
|
compileTCallBlock(ast, ctx) {
|
|
@@ -4326,7 +4345,7 @@ class CodeGenerator {
|
|
|
4326
4345
|
this.helpers.add("LazyValue");
|
|
4327
4346
|
const bodyAst = { type: 3 /* Multi */, content: ast.body };
|
|
4328
4347
|
const name = this.compileInNewTarget("value", bodyAst, ctx);
|
|
4329
|
-
let value = `new LazyValue(${name}, ctx, node)`;
|
|
4348
|
+
let value = `new LazyValue(${name}, ctx, this, node)`;
|
|
4330
4349
|
value = ast.value ? (value ? `withDefault(${expr}, ${value})` : expr) : value;
|
|
4331
4350
|
this.addLine(`ctx[\`${ast.name}\`] = ${value};`);
|
|
4332
4351
|
}
|
|
@@ -4344,7 +4363,7 @@ class CodeGenerator {
|
|
|
4344
4363
|
value = expr;
|
|
4345
4364
|
}
|
|
4346
4365
|
this.helpers.add("setContextValue");
|
|
4347
|
-
this.addLine(`setContextValue(ctx, "${ast.name}", ${value});`);
|
|
4366
|
+
this.addLine(`setContextValue(${ctx.ctxVar || "ctx"}, "${ast.name}", ${value});`);
|
|
4348
4367
|
}
|
|
4349
4368
|
}
|
|
4350
4369
|
generateComponentKey() {
|
|
@@ -4466,7 +4485,7 @@ class CodeGenerator {
|
|
|
4466
4485
|
id,
|
|
4467
4486
|
expr: `app.createComponent(${ast.isDynamic ? null : expr}, ${!ast.isDynamic}, ${!!ast.slots}, ${!!ast.dynamicProps}, ${!ast.props && !ast.dynamicProps})`,
|
|
4468
4487
|
});
|
|
4469
|
-
let blockExpr = `${id}(${propString}, ${keyArg}, node,
|
|
4488
|
+
let blockExpr = `${id}(${propString}, ${keyArg}, node, this, ${ast.isDynamic ? expr : null})`;
|
|
4470
4489
|
if (ast.isDynamic) {
|
|
4471
4490
|
blockExpr = `toggler(${expr}, ${blockExpr})`;
|
|
4472
4491
|
}
|
|
@@ -4899,10 +4918,12 @@ function parseTCall(node, ctx) {
|
|
|
4899
4918
|
return null;
|
|
4900
4919
|
}
|
|
4901
4920
|
const subTemplate = node.getAttribute("t-call");
|
|
4921
|
+
const context = node.getAttribute("t-call-context");
|
|
4902
4922
|
node.removeAttribute("t-call");
|
|
4923
|
+
node.removeAttribute("t-call-context");
|
|
4903
4924
|
if (node.tagName !== "t") {
|
|
4904
4925
|
const ast = parseNode(node, ctx);
|
|
4905
|
-
const tcall = { type: 7 /* TCall */, name: subTemplate, body: null };
|
|
4926
|
+
const tcall = { type: 7 /* TCall */, name: subTemplate, body: null, context };
|
|
4906
4927
|
if (ast && ast.type === 2 /* DomNode */) {
|
|
4907
4928
|
ast.content = [tcall];
|
|
4908
4929
|
return ast;
|
|
@@ -4919,6 +4940,7 @@ function parseTCall(node, ctx) {
|
|
|
4919
4940
|
type: 7 /* TCall */,
|
|
4920
4941
|
name: subTemplate,
|
|
4921
4942
|
body: body.length ? body : null,
|
|
4943
|
+
context,
|
|
4922
4944
|
};
|
|
4923
4945
|
}
|
|
4924
4946
|
// -----------------------------------------------------------------------------
|
|
@@ -5522,8 +5544,7 @@ class App extends TemplateSet {
|
|
|
5522
5544
|
return (props, key, ctx, parent, C) => {
|
|
5523
5545
|
let children = ctx.children;
|
|
5524
5546
|
let node = children[key];
|
|
5525
|
-
if (node &&
|
|
5526
|
-
(node.status === 2 /* DESTROYED */ || (isDynamic && node.component.constructor !== C))) {
|
|
5547
|
+
if (isDynamic && node && node.component.constructor !== C) {
|
|
5527
5548
|
node = undefined;
|
|
5528
5549
|
}
|
|
5529
5550
|
const parentFiber = ctx.fiber;
|
|
@@ -5700,7 +5721,7 @@ TemplateSet.prototype._compileTemplate = function _compileTemplate(name, templat
|
|
|
5700
5721
|
export { App, Component, EventBus, __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, whenReady, xml };
|
|
5701
5722
|
|
|
5702
5723
|
|
|
5703
|
-
__info__.version = '2.0.0-beta-
|
|
5704
|
-
__info__.date = '2022-06-
|
|
5705
|
-
__info__.hash = '
|
|
5724
|
+
__info__.version = '2.0.0-beta-11';
|
|
5725
|
+
__info__.date = '2022-06-28T13:28:26.775Z';
|
|
5726
|
+
__info__.hash = '76c389a';
|
|
5706
5727
|
__info__.url = 'https://github.com/odoo/owl';
|
package/dist/owl.iife.js
CHANGED
|
@@ -170,6 +170,10 @@
|
|
|
170
170
|
for (let key in expr) {
|
|
171
171
|
const value = expr[key];
|
|
172
172
|
if (value) {
|
|
173
|
+
key = trim.call(key);
|
|
174
|
+
if (!key) {
|
|
175
|
+
continue;
|
|
176
|
+
}
|
|
173
177
|
const words = split.call(key, wordRegexp);
|
|
174
178
|
for (let word of words) {
|
|
175
179
|
result[word] = value;
|
|
@@ -1486,6 +1490,7 @@
|
|
|
1486
1490
|
fiber.render = throwOnRender;
|
|
1487
1491
|
if (node.status === 0 /* NEW */) {
|
|
1488
1492
|
node.destroy();
|
|
1493
|
+
delete node.parent.children[node.parentKey];
|
|
1489
1494
|
}
|
|
1490
1495
|
node.fiber = null;
|
|
1491
1496
|
if (fiber.bdom) {
|
|
@@ -2874,13 +2879,14 @@
|
|
|
2874
2879
|
return true;
|
|
2875
2880
|
}
|
|
2876
2881
|
class LazyValue {
|
|
2877
|
-
constructor(fn, ctx, node) {
|
|
2882
|
+
constructor(fn, ctx, component, node) {
|
|
2878
2883
|
this.fn = fn;
|
|
2879
2884
|
this.ctx = capture(ctx);
|
|
2885
|
+
this.component = component;
|
|
2880
2886
|
this.node = node;
|
|
2881
2887
|
}
|
|
2882
2888
|
evaluate() {
|
|
2883
|
-
return this.fn(this.ctx, this.node);
|
|
2889
|
+
return this.fn.call(this.component, this.ctx, this.node);
|
|
2884
2890
|
}
|
|
2885
2891
|
toString() {
|
|
2886
2892
|
return this.evaluate().toString();
|
|
@@ -2889,9 +2895,9 @@
|
|
|
2889
2895
|
/*
|
|
2890
2896
|
* Safely outputs `value` as a block depending on the nature of `value`
|
|
2891
2897
|
*/
|
|
2892
|
-
function safeOutput(value) {
|
|
2893
|
-
if (
|
|
2894
|
-
return
|
|
2898
|
+
function safeOutput(value, defaultValue) {
|
|
2899
|
+
if (value === undefined) {
|
|
2900
|
+
return defaultValue ? toggler("default", defaultValue) : toggler("undefined", text(""));
|
|
2895
2901
|
}
|
|
2896
2902
|
let safeKey;
|
|
2897
2903
|
let block;
|
|
@@ -3177,7 +3183,7 @@
|
|
|
3177
3183
|
});
|
|
3178
3184
|
// note that the space after typeof is relevant. It makes sure that the formatted
|
|
3179
3185
|
// expression has a space after typeof. Currently we don't support delete and void
|
|
3180
|
-
const OPERATORS = "...,.,===,==,+,!==,!=,!,||,&&,>=,>,<=,<,?,-,*,/,%,typeof ,=>,=,;,in ,new ".split(",");
|
|
3186
|
+
const OPERATORS = "...,.,===,==,+,!==,!=,!,||,&&,>=,>,<=,<,?,-,*,/,%,typeof ,=>,=,;,in ,new ,|,&,^,~".split(",");
|
|
3181
3187
|
let tokenizeString = function (expr) {
|
|
3182
3188
|
let s = expr[0];
|
|
3183
3189
|
let start = s;
|
|
@@ -4064,16 +4070,24 @@
|
|
|
4064
4070
|
this.insertAnchor(block);
|
|
4065
4071
|
}
|
|
4066
4072
|
block = this.createBlock(block, "html", ctx);
|
|
4067
|
-
|
|
4068
|
-
|
|
4069
|
-
|
|
4070
|
-
|
|
4073
|
+
let blockStr;
|
|
4074
|
+
if (ast.expr === "0") {
|
|
4075
|
+
this.helpers.add("zero");
|
|
4076
|
+
blockStr = `ctx[zero]`;
|
|
4077
|
+
}
|
|
4078
|
+
else if (ast.body) {
|
|
4079
|
+
let bodyValue = null;
|
|
4080
|
+
bodyValue = BlockDescription.nextBlockId;
|
|
4071
4081
|
const subCtx = createContext(ctx);
|
|
4072
4082
|
this.compileAST({ type: 3 /* Multi */, content: ast.body }, subCtx);
|
|
4073
|
-
this.helpers.add("
|
|
4074
|
-
|
|
4083
|
+
this.helpers.add("safeOutput");
|
|
4084
|
+
blockStr = `safeOutput(${compileExpr(ast.expr)}, b${bodyValue})`;
|
|
4085
|
+
}
|
|
4086
|
+
else {
|
|
4087
|
+
this.helpers.add("safeOutput");
|
|
4088
|
+
blockStr = `safeOutput(${compileExpr(ast.expr)})`;
|
|
4075
4089
|
}
|
|
4076
|
-
this.insertBlock(
|
|
4090
|
+
this.insertBlock(blockStr, block, ctx);
|
|
4077
4091
|
}
|
|
4078
4092
|
compileTIf(ast, ctx, nextNode) {
|
|
4079
4093
|
let { block, forceNewBlock, index } = ctx;
|
|
@@ -4266,16 +4280,21 @@
|
|
|
4266
4280
|
}
|
|
4267
4281
|
compileTCall(ast, ctx) {
|
|
4268
4282
|
let { block, forceNewBlock } = ctx;
|
|
4283
|
+
let ctxVar = ctx.ctxVar || "ctx";
|
|
4284
|
+
if (ast.context) {
|
|
4285
|
+
ctxVar = generateId("ctx");
|
|
4286
|
+
this.addLine(`let ${ctxVar} = ${compileExpr(ast.context)};`);
|
|
4287
|
+
}
|
|
4269
4288
|
if (ast.body) {
|
|
4270
|
-
this.addLine(
|
|
4271
|
-
this.addLine(
|
|
4289
|
+
this.addLine(`${ctxVar} = Object.create(${ctxVar});`);
|
|
4290
|
+
this.addLine(`${ctxVar}[isBoundary] = 1;`);
|
|
4272
4291
|
this.helpers.add("isBoundary");
|
|
4273
4292
|
const nextId = BlockDescription.nextBlockId;
|
|
4274
|
-
const subCtx = createContext(ctx, { preventRoot: true });
|
|
4293
|
+
const subCtx = createContext(ctx, { preventRoot: true, ctxVar });
|
|
4275
4294
|
this.compileAST({ type: 3 /* Multi */, content: ast.body }, subCtx);
|
|
4276
4295
|
if (nextId !== BlockDescription.nextBlockId) {
|
|
4277
4296
|
this.helpers.add("zero");
|
|
4278
|
-
this.addLine(
|
|
4297
|
+
this.addLine(`${ctxVar}[zero] = b${nextId};`);
|
|
4279
4298
|
}
|
|
4280
4299
|
}
|
|
4281
4300
|
const isDynamic = INTERP_REGEXP.test(ast.name);
|
|
@@ -4293,7 +4312,7 @@
|
|
|
4293
4312
|
}
|
|
4294
4313
|
this.define(templateVar, subTemplate);
|
|
4295
4314
|
block = this.createBlock(block, "multi", ctx);
|
|
4296
|
-
this.insertBlock(`call(this, ${templateVar},
|
|
4315
|
+
this.insertBlock(`call(this, ${templateVar}, ${ctxVar}, node, ${key})`, block, {
|
|
4297
4316
|
...ctx,
|
|
4298
4317
|
forceNewBlock: !block,
|
|
4299
4318
|
});
|
|
@@ -4302,13 +4321,13 @@
|
|
|
4302
4321
|
const id = generateId(`callTemplate_`);
|
|
4303
4322
|
this.staticDefs.push({ id, expr: `app.getTemplate(${subTemplate})` });
|
|
4304
4323
|
block = this.createBlock(block, "multi", ctx);
|
|
4305
|
-
this.insertBlock(`${id}.call(this,
|
|
4324
|
+
this.insertBlock(`${id}.call(this, ${ctxVar}, node, ${key})`, block, {
|
|
4306
4325
|
...ctx,
|
|
4307
4326
|
forceNewBlock: !block,
|
|
4308
4327
|
});
|
|
4309
4328
|
}
|
|
4310
4329
|
if (ast.body && !ctx.isLast) {
|
|
4311
|
-
this.addLine(
|
|
4330
|
+
this.addLine(`${ctxVar} = ${ctxVar}.__proto__;`);
|
|
4312
4331
|
}
|
|
4313
4332
|
}
|
|
4314
4333
|
compileTCallBlock(ast, ctx) {
|
|
@@ -4329,7 +4348,7 @@
|
|
|
4329
4348
|
this.helpers.add("LazyValue");
|
|
4330
4349
|
const bodyAst = { type: 3 /* Multi */, content: ast.body };
|
|
4331
4350
|
const name = this.compileInNewTarget("value", bodyAst, ctx);
|
|
4332
|
-
let value = `new LazyValue(${name}, ctx, node)`;
|
|
4351
|
+
let value = `new LazyValue(${name}, ctx, this, node)`;
|
|
4333
4352
|
value = ast.value ? (value ? `withDefault(${expr}, ${value})` : expr) : value;
|
|
4334
4353
|
this.addLine(`ctx[\`${ast.name}\`] = ${value};`);
|
|
4335
4354
|
}
|
|
@@ -4347,7 +4366,7 @@
|
|
|
4347
4366
|
value = expr;
|
|
4348
4367
|
}
|
|
4349
4368
|
this.helpers.add("setContextValue");
|
|
4350
|
-
this.addLine(`setContextValue(ctx, "${ast.name}", ${value});`);
|
|
4369
|
+
this.addLine(`setContextValue(${ctx.ctxVar || "ctx"}, "${ast.name}", ${value});`);
|
|
4351
4370
|
}
|
|
4352
4371
|
}
|
|
4353
4372
|
generateComponentKey() {
|
|
@@ -4469,7 +4488,7 @@
|
|
|
4469
4488
|
id,
|
|
4470
4489
|
expr: `app.createComponent(${ast.isDynamic ? null : expr}, ${!ast.isDynamic}, ${!!ast.slots}, ${!!ast.dynamicProps}, ${!ast.props && !ast.dynamicProps})`,
|
|
4471
4490
|
});
|
|
4472
|
-
let blockExpr = `${id}(${propString}, ${keyArg}, node,
|
|
4491
|
+
let blockExpr = `${id}(${propString}, ${keyArg}, node, this, ${ast.isDynamic ? expr : null})`;
|
|
4473
4492
|
if (ast.isDynamic) {
|
|
4474
4493
|
blockExpr = `toggler(${expr}, ${blockExpr})`;
|
|
4475
4494
|
}
|
|
@@ -4902,10 +4921,12 @@
|
|
|
4902
4921
|
return null;
|
|
4903
4922
|
}
|
|
4904
4923
|
const subTemplate = node.getAttribute("t-call");
|
|
4924
|
+
const context = node.getAttribute("t-call-context");
|
|
4905
4925
|
node.removeAttribute("t-call");
|
|
4926
|
+
node.removeAttribute("t-call-context");
|
|
4906
4927
|
if (node.tagName !== "t") {
|
|
4907
4928
|
const ast = parseNode(node, ctx);
|
|
4908
|
-
const tcall = { type: 7 /* TCall */, name: subTemplate, body: null };
|
|
4929
|
+
const tcall = { type: 7 /* TCall */, name: subTemplate, body: null, context };
|
|
4909
4930
|
if (ast && ast.type === 2 /* DomNode */) {
|
|
4910
4931
|
ast.content = [tcall];
|
|
4911
4932
|
return ast;
|
|
@@ -4922,6 +4943,7 @@
|
|
|
4922
4943
|
type: 7 /* TCall */,
|
|
4923
4944
|
name: subTemplate,
|
|
4924
4945
|
body: body.length ? body : null,
|
|
4946
|
+
context,
|
|
4925
4947
|
};
|
|
4926
4948
|
}
|
|
4927
4949
|
// -----------------------------------------------------------------------------
|
|
@@ -5525,8 +5547,7 @@ See https://github.com/odoo/owl/blob/${hash}/doc/reference/app.md#configuration
|
|
|
5525
5547
|
return (props, key, ctx, parent, C) => {
|
|
5526
5548
|
let children = ctx.children;
|
|
5527
5549
|
let node = children[key];
|
|
5528
|
-
if (node &&
|
|
5529
|
-
(node.status === 2 /* DESTROYED */ || (isDynamic && node.component.constructor !== C))) {
|
|
5550
|
+
if (isDynamic && node && node.component.constructor !== C) {
|
|
5530
5551
|
node = undefined;
|
|
5531
5552
|
}
|
|
5532
5553
|
const parentFiber = ctx.fiber;
|
|
@@ -5737,9 +5758,9 @@ See https://github.com/odoo/owl/blob/${hash}/doc/reference/app.md#configuration
|
|
|
5737
5758
|
Object.defineProperty(exports, '__esModule', { value: true });
|
|
5738
5759
|
|
|
5739
5760
|
|
|
5740
|
-
__info__.version = '2.0.0-beta-
|
|
5741
|
-
__info__.date = '2022-06-
|
|
5742
|
-
__info__.hash = '
|
|
5761
|
+
__info__.version = '2.0.0-beta-11';
|
|
5762
|
+
__info__.date = '2022-06-28T13:28:26.775Z';
|
|
5763
|
+
__info__.hash = '76c389a';
|
|
5743
5764
|
__info__.url = 'https://github.com/odoo/owl';
|
|
5744
5765
|
|
|
5745
5766
|
|
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)}moveBefore(t,e){this.child.moveBefore(t?t.child:null,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)}const{setAttribute:i,removeAttribute:s}=Element.prototype,l=DOMTokenList.prototype,a=l.add,c=l.remove,h=Array.isArray,{split:u,trim:d}=String.prototype,f=/\s+/;function p(t,e){switch(e){case!1:case void 0:s.call(this,t);break;case!0:i.call(this,t,"");break;default:i.call(this,t,e)}}function m(t){return function(e){p.call(this,t,e)}}function b(t){if(h(t))p.call(this,t[0],t[1]);else for(let e in t)p.call(this,e,t[e])}function g(t,e){if(h(t)){const n=t[0],o=t[1];if(n===e[0]){if(o===e[1])return;p.call(this,n,o)}else s.call(this,e[0]),p.call(this,n,o)}else{for(let n in e)n in t||s.call(this,n);for(let n in t){const o=t[n];o!==e[n]&&p.call(this,n,o)}}}function y(t){const e={};switch(typeof t){case"string":const n=d.call(t);if(!n)return{};let o=u.call(n,f);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){const t=u.call(n,f);for(let n of t)e[n]=o}}return e;case"undefined":return{};case"number":return{[t]:!0};default:return{[t]:!0}}}function v(t){t=""===t?{}:y(t);const e=this.classList;for(let n in t)a.call(e,n)}function w(t,e){e=""===e?{}:y(e),t=""===t?{}:y(t);const n=this.classList;for(let o in e)o in t||c.call(n,o);for(let o in t)o in e||a.call(n,o)}function x(t){return function(e){this[t]=0===e?0:e||""}}function k(t,e){switch(t){case"input":return"checked"===e||"indeterminate"===e||"value"===e||"readonly"===e||"disabled"===e;case"option":return"selected"===e||"disabled"===e;case"textarea":return"value"===e||"readonly"===e||"disabled"===e;case"select":return"value"===e||"disabled"===e;case"button":case"optgroup":return"disabled"===e}return!1}function $(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+="_capture");!function(t,e,o=!1){if(A[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}),A[e]=!0}(t,o,e);const r=E++;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}_${N++}`;e&&(o+="_capture");function r(t){const e=t.currentTarget;if(!e||!document.contains(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 N=1;let E=1;const A={};const T=Node.prototype,_=T.insertBefore,S=(C=T,D="textContent",Object.getOwnPropertyDescriptor(C,D)).set;var C,D;const L=T.removeChild;class B{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,_.call(t,n,e)}}this.anchors=r,this.parentEl=t}moveBefore(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.moveBefore(null,e);else{const n=r[t];_.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,_.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),L.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():L.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 R(t){return new B(t)}const O=Node.prototype,P=CharacterData.prototype,I=O.insertBefore,j=((t,e)=>Object.getOwnPropertyDescriptor(t,e))(P,"data").set,M=O.removeChild;class W{constructor(t){this.text=t}mountNode(t,e,n){this.parentEl=e,I.call(e,t,n),this.el=t}moveBefore(t,e){const n=t?t.el:e;I.call(this.parentEl,this.el,n)}beforeRemove(){}remove(){M.call(this.parentEl,this.el)}firstNode(){return this.el}toString(){return this.text}}class F extends W{mount(t,e){this.mountNode(document.createTextNode(H(this.text)),t,e)}patch(t){const e=t.text;this.text!==e&&(j.call(this.el,H(e)),this.text=e)}}class V extends W{mount(t,e){this.mountNode(document.createComment(H(this.text)),t,e)}patch(){}}function z(t){return new F(t)}function K(t){return new V(t)}function H(t){switch(typeof t){case"string":return t;case"number":return String(t);case"boolean":return t?"true":"false";default:return t||""}}const U=(t,e)=>Object.getOwnPropertyDescriptor(t,e),q=Node.prototype,G=Element.prototype,X=U(CharacterData.prototype,"data").set,Y=U(q,"firstChild").get,Z=U(q,"nextSibling").get,J=()=>{},Q={};function tt(t){if(t in Q)return Q[t];const e=(new DOMParser).parseFromString(`<t>${t}</t>`,"text/xml").firstChild.firstChild;n.shouldNormalizeDom&&et(e);const o=nt(e),r=it(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=q.cloneNode,d=q.insertBefore,f=G.remove;class p{constructor(t){this.data=t}beforeRemove(){}remove(){f.call(this.el)}firstNode(){return this.el}moveBefore(t,e){const n=t?t.el:e;d.call(this.parentEl,this.el,n)}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=B.prototype.beforeRemove,(t,e=[])=>new n(t,e);return t=>new n(t)}(o.el,r);return Q[t]=i,i}function et(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)et(t.childNodes.item(e))}else t.remove()}function nt(t,e=null,n=null){switch(t.nodeType){case Node.ELEMENT_NODE:{let o=n&&n.currentNS;const r=t.tagName;let i=void 0;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||ot(n);const t=parseInt(r.slice(12),10);s.push({type:"child",idx:t}),i=document.createTextNode("")}const l=t.attributes,a=l.getNamedItem("block-ns");if(a&&(l.removeNamedItem("block-ns"),o=a.value),i||(i=o?document.createElementNS(o,r):document.createElement(r)),i instanceof Element)for(let t=0;t<l.length;t++){const e=l[t].name,n=l[t].value;if(e.startsWith("block-handler-")){const t=parseInt(e.slice(14),10);s.push({type:"handler",idx:t,event:n})}else if(e.startsWith("block-attribute-")){const t=parseInt(e.slice(16),10);s.push({type:"attribute",idx:t,name:n,tag:r})}else"block-attributes"===e?s.push({type:"attributes",idx:parseInt(n,10)}):"block-ref"===e?s.push({type:"ref",idx:parseInt(n,10)}):i.setAttribute(l[t].name,n)}const c={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{c.firstChild=nt(t.firstChild,c,c),i.appendChild(c.firstChild.el);let e=t.firstChild,n=c.firstChild;for(;e=e.nextSibling;)n.nextSibling=nt(e,n,c),i.appendChild(n.nextSibling.el),n=n.nextSibling}}return c.info.length&&ot(c),c}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 Error("boom")}function ot(t){t.isRef=!0;do{t.refN++}while(t=t.parent)}function rt(t){let e=t.parent;for(;e&&e.nextSibling===t;)t=e,e=e.parent;return e}function it(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:st,updateData:st});break;case"child":n.isOnlyChild?t.children[n.idx]={parentRefIdx:n.refIdx,isOnlyChild:!0}:t.children[n.idx]={parentRefIdx:rt(e).refIdx,afterRefIdx:n.refIdx};break;case"attribute":{const e=n.refIdx;let o,r;if(k(n.tag,n.name)){const t=x(n.name);r=t,o=t}else"class"===n.name?(r=v,o=w):(r=m(n.name),o=r);t.locations.push({idx:n.idx,refIdx:e,setData:r,updateData:o});break}case"attributes":t.locations.push({idx:n.idx,refIdx:n.refIdx,setData:b,updateData:g});break;case"handler":{const{setup:e,update:o}=$(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:lt(o,t.refList),updateData:J})}}(e,t),n++}if(s){const r=n+i;e.collectors.push({idx:r,prevIdx:o,getVal:Z}),it(t.nextSibling,e,r)}i&&(e.collectors.push({idx:n,prevIdx:o,getVal:Y}),it(t.firstChild,e,n))}return e}function st(t){X.call(this,H(t))}function lt(t,e){return function(n){e[e.length-1][t]=()=>n(this)}}const at=Node.prototype,ct=at.insertBefore,ht=at.appendChild,ut=at.removeChild,dt=((t,e)=>Object.getOwnPropertyDescriptor(t,e))(at,"textContent").set;class ft{constructor(t){this.children=t}mount(t,e){const n=this.children,o=document.createTextNode("");this.anchor=o,ct.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}moveBefore(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].moveBefore(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,moveBefore: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 dt.call(f,""),void ht.call(f,u)}let p=0,m=0,b=n[0],g=o[0],y=n.length-1,v=o.length-1,w=n[y],x=o[v],k=void 0;for(;p<=y&&m<=v;){if(null===b){b=n[++p];continue}if(null===w){w=n[--y];continue}let t=b.key,r=g.key;if(t===r){s.call(b,g,e),o[m]=b,b=n[++p],g=o[++m];continue}let l=w.key,a=x.key;if(l===a){s.call(w,x,e),o[v]=w,w=n[--y],x=o[--v];continue}if(t===a){s.call(b,x,e),o[v]=b;const t=o[v+1];c.call(b,t,u),b=n[++p],x=o[--v];continue}if(l===r){s.call(w,g,e),o[m]=w;const t=n[p];c.call(w,t,u),w=n[--y],g=o[++m];continue}k=k||mt(n,p,y);let d=k[r];if(void 0===d)i.call(g,f,h.call(b)||null);else{const t=n[d];c.call(t,b,null),s.call(t,g,e),o[m]=t,n[d]=null}g=o[++m]}if(p<=y||m<=v)if(p>y){const t=o[v+1],e=t?h.call(t)||null:u;for(let t=m;t<=v;t++)i.call(o[t],f,e)}else for(let t=p;t<=y;t++){let o=n[t];o&&(e&&a.call(o),l.call(o))}}beforeRemove(){const t=this.children,e=t.length;if(e){const n=t[0].beforeRemove;for(let o=0;o<e;o++)n.call(t[o])}}remove(){const{parentEl:t,anchor:e}=this;if(this.isOnlyChild)dt.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])}ut.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 pt(t){return new ft(t)}function mt(t,e,n){let o={};for(let r=e;r<=n;r++)o[t[r].key]=r;return o}const bt=Node.prototype,gt=bt.insertBefore,yt=bt.removeChild;class vt{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)gt.call(t,n,e);if(!this.content.length){const n=document.createTextNode("");this.content.push(n),gt.call(t,n,e)}}moveBefore(t,e){const n=t?t.content[0]:e,o=this.parentEl;for(let t of this.content)gt.call(o,t,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)gt.call(n,t,o);if(!i.length){const t=document.createTextNode("");i.push(t),gt.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)yt.call(t,e)}firstNode(){return this.content[0]}toString(){return this.html}}function wt(t){return new vt(t)}function xt(t,e,n=null){t.mount(e,n)}const kt=new WeakMap,$t=new WeakMap;function Nt(t,e){if(!t)return!1;const n=t.fiber;n&&kt.set(n,e);const o=$t.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 Nt(t.parent,e)}function Et(t){const e=t.error,n="node"in t?t.node:t.fiber.node,o="fiber"in t?t.fiber:n.fiber;let r=o;do{r.node.fiber=r,r=r.parent}while(r);kt.set(o.root,e);if(!Nt(n,e)){console.warn("[Owl] Unhandled error. Destroying the root component");try{n.app.destroy()}catch(t){console.error(t)}}}function At(){throw new Error("Attempted to render cancelled fiber")}function Tt(t){let e=0;for(let n of t){let t=n.node;n.render=At,0===t.status&&t.destroy(),t.fiber=null,n.bdom?t.forceNextRender=!0:e++,e+=Tt(n.children)}return e}class _t{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){Et({node:t,error:e})}e.setCounter(e.counter-1)}}}class St extends _t{constructor(){super(...arguments),this.counter=1,this.willPatch=[],this.patched=[],this.mounted=[],this.locked=!1}complete(){const t=this.node;this.locked=!0;let e=void 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=e,e.appliedToDom)for(let t of e.node.mounted)t();let o=this.patched;for(;e=o.pop();)if(e=e,e.appliedToDom)for(let t of e.node.patched)t()}catch(t){this.locked=!1,Et({fiber:e||this,error:t})}}setCounter(t){this.counter=t,0===t&&this.node.app.scheduler.flush()}}class Ct extends St{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)xt(e.bdom,this.target);else{const t=this.target.childNodes[0];xt(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){Et({fiber:t,error:e})}}}const Dt=Symbol("Target"),Lt=Symbol("Skip"),Bt=Symbol("Key changes"),Rt=Object.prototype.toString,Ot=Object.prototype.hasOwnProperty,Pt=new Set(["Object","Array","Set","Map","WeakMap"]),It=new Set(["Set","Map","WeakMap"]);function jt(t){return Rt.call(t).slice(8,-1)}function Mt(t){return"object"==typeof t&&Pt.has(jt(t))}function Wt(t,e){return Mt(t)?Xt(t,e):t}function Ft(t){return t[Lt]=!0,t}function Vt(t){return t[Dt]||t}const zt=new WeakMap;function Kt(t,e,n){zt.get(t)||zt.set(t,new Map);const o=zt.get(t);o.get(e)||o.set(e,new Set),o.get(e).add(n),Ut.has(n)||Ut.set(n,new Set),Ut.get(n).add(t)}function Ht(t,e){const n=zt.get(t);if(!n)return;const o=n.get(e);if(o)for(const t of[...o])qt(t),t()}const Ut=new WeakMap;function qt(t){const e=Ut.get(t);if(e){for(const n of e){const e=zt.get(n);if(e)for(const n of e.values())n.delete(t)}e.clear()}}const Gt=new WeakMap;function Xt(t,e=(()=>{})){if(!Mt(t))throw new Error("Cannot make the given value reactive");if(Lt in t)return t;const n=t[Dt];if(n)return Xt(n,e);Gt.has(t)||Gt.set(t,new WeakMap);const o=Gt.get(t);if(!o.has(e)){const n=jt(t),r=It.has(n)?function(t,e,n){const o=ne[n](t,e);return Object.assign(Yt(e),{get:(t,n)=>n===Dt?t:Ot.call(o,n)?o[n]:(Kt(t,n,e),Wt(t[n],e))})}(t,e,n):Yt(e),i=new Proxy(t,r);o.set(e,i)}return o.get(e)}function Yt(t){return{get(e,n,o){if(n===Dt)return e;const r=Object.getOwnPropertyDescriptor(e,n);return!r||r.writable||r.configurable?(Kt(e,n,t),Wt(Reflect.get(e,n,o),t)):Reflect.get(e,n,o)},set(t,e,n,o){const r=!Ot.call(t,e),i=Reflect.get(t,e,o),s=Reflect.set(t,e,n,o);return r&&Ht(t,Bt),(i!==n||Array.isArray(t)&&"length"===e)&&Ht(t,e),s},deleteProperty(t,e){const n=Reflect.deleteProperty(t,e);return Ht(t,Bt),Ht(t,e),n},ownKeys:e=>(Kt(e,Bt,t),Reflect.ownKeys(e)),has:(e,n)=>(Kt(e,Bt,t),Reflect.has(e,n))}}function Zt(t,e,n){return o=>(o=Vt(o),Kt(e,o,n),Wt(e[t](o),n))}function Jt(t,e,n){return function*(){Kt(e,Bt,n);const o=e.keys();for(const r of e[t]()){const t=o.next().value;Kt(e,t,n),yield Wt(r,n)}}}function Qt(t,e){return function(n,o){Kt(t,Bt,e),t.forEach((function(r,i,s){Kt(t,i,e),n.call(o,Wt(r,e),Wt(i,e),Wt(s,e))}),o)}}function te(t,e,n){return(o,r)=>{o=Vt(o);const i=n.has(o),s=n[e](o),l=n[t](o,r);return i!==n.has(o)&&Ht(n,Bt),s!==r&&Ht(n,o),l}}function ee(t){return()=>{const e=[...t.keys()];t.clear(),Ht(t,Bt);for(const n of e)Ht(t,n)}}const ne={Set:(t,e)=>({has:Zt("has",t,e),add:te("add","has",t),delete:te("delete","has",t),keys:Jt("keys",t,e),values:Jt("values",t,e),entries:Jt("entries",t,e),[Symbol.iterator]:Jt(Symbol.iterator,t,e),forEach:Qt(t,e),clear:ee(t),get size(){return Kt(t,Bt,e),t.size}}),Map:(t,e)=>({has:Zt("has",t,e),get:Zt("get",t,e),set:te("set","get",t),delete:te("delete","has",t),keys:Jt("keys",t,e),values:Jt("values",t,e),entries:Jt("entries",t,e),[Symbol.iterator]:Jt(Symbol.iterator,t,e),forEach:Qt(t,e),clear:ee(t),get size(){return Kt(t,Bt,e),t.size}}),WeakMap:(t,e)=>({has:Zt("has",t,e),get:Zt("get",t,e),set:te("set","get",t),delete:te("delete","has",t)})};class oe extends EventTarget{trigger(t,e){this.dispatchEvent(new CustomEvent(t,{detail:e}))}}class re extends String{}let ie=null;function se(){if(!ie)throw new Error("No active component (a hook function should only be called in 'setup')");return ie}function le(t,e){for(let n in e)void 0===t[n]&&(t[n]=e[n])}const ae=new WeakMap;function ce(t){const e=se();let n=ae.get(e);return n||(n=function(t){let e=!1;return async()=>{await Promise.resolve(),e||(e=!0,Promise.resolve().then((()=>e=!1)),t())}}(e.render.bind(e,!1)),ae.set(e,n),e.willDestroy.push(qt.bind(null,n))),Xt(t,n)}class he{constructor(t,e,n,o,r){this.fiber=null,this.bdom=null,this.status=0,this.forceNextRender=!1,this.children=Object.create(null),this.refs={},this.willStart=[],this.willUpdateProps=[],this.willUnmount=[],this.mounted=[],this.willPatch=[],this.patched=[],this.willDestroy=[],ie=this,this.app=n,this.parent=o,this.props=e,this.parentKey=r,this.level=o?o.level+1:0;const i=t.defaultProps;e=Object.assign({},e),i&&le(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&&n[Dt]&&(e[t]=ce(n))}this.component=new t(e,s,this),this.renderFn=n.getTemplate(t.template).bind(this.component,this.component,this),this.component.setup(),ie=null}mountComponent(t,e){const n=new Ct(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 Et({node:this,error:t})}0===this.status&&this.fiber===t&&t.render()}async render(t){let e=this.fiber;if(e&&(e.root.locked||!0===e.bdom)&&(await Promise.resolve(),e=this.fiber),e){if(!e.bdom&&!kt.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-Tt(e.children)),t.locked=!1,e.children=[],e.childrenMap={},e.bdom=null,kt.has(e)&&(kt.delete(e),kt.delete(t),e.appliedToDom=!1),e}const n=new St(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(),2!==this.status&&(this.fiber!==n||!e&&n.parent||n.render())}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){Et({error:t,node:this})}this.status=2}async updateAndRender(t,e){const n=t;t=Object.assign({},t);const o=function(t,e){let n=t.fiber;return n&&(Tt(n.children),n.root=null),new _t(t,e)}(this,e);this.fiber=o;const r=this.component,i=r.constructor.defaultProps;i&&le(t,i),ie=this;for(const e in t){const n=t[e];n&&"object"==typeof n&&n[Dt]&&(t[e]=ce(n))}ie=null;const s=Promise.all(this.willUpdateProps.map((e=>e.call(r,t))));if(await s,o!==this.fiber)return;r.props=t,this.props=n,o.render();const l=e.root;this.willPatch.length&&l.willPatch.push(o),this.patched.length&&l.patched.push(o)}updateDom(){if(this.fiber)if(this.bdom===this.fiber.bdom)for(let t in this.children){this.children[t].updateDom()}else this.bdom.patch(this.fiber.bdom,!1),this.fiber.appliedToDom=!0,this.fiber=null}firstNode(){const t=this.bdom;return t?t.firstNode():void 0}mount(t,e){const n=this.fiber.bdom;this.bdom=n,n.mount(t,e),this.status=1,this.fiber.appliedToDom=!0,this.children=this.fiber.childrenMap,this.fiber=null}moveBefore(t,e){this.bdom.moveBefore(t?t.bdom:null,e)}patch(){this.fiber&&this.fiber.parent&&this._patch()}_patch(){let t=!1;for(let e in this.children){t=!0;break}const e=this.fiber;this.children=e.childrenMap,this.bdom.patch(e.bdom,t),e.appliedToDom=!0,this.fiber=null}beforeRemove(){this._destroy()}remove(){this.bdom.remove()}get name(){return this.component.constructor.name}get subscriptions(){const t=ae.get(this);return t?(e=t,[...Ut.get(e)||[]].map((t=>{const e=zt.get(t);return{target:t,keys:e?[...e.keys()]:[]}}))):[];var e}}const ue=Symbol("timeout");function de(t,e){const n=new Error(`The following error occurred in ${e}: `),o=new Error(e+"'s promise hasn't resolved after 3 seconds"),r=se();return(...i)=>{try{const s=t(...i);if(s instanceof Promise){if("onWillStart"===e||"onWillUpdateProps"===e){const t=r.fiber;Promise.race([s,new Promise((t=>setTimeout((()=>t(ue)),3e3)))]).then((e=>{e===ue&&r.fiber===t&&console.warn(o)}))}return s.catch((t=>{throw n.cause=t,t instanceof Error&&(n.message+=`"${t.message}"`),n}))}return s}catch(t){throw t instanceof Error&&(n.message+=`"${t.message}"`),n}}}function fe(t){const e=se(),n=e.app.dev?de:t=>t;e.mounted.push(n(t.bind(e.component),"onMounted"))}function pe(t){const e=se(),n=e.app.dev?de:t=>t;e.patched.push(n(t.bind(e.component),"onPatched"))}function me(t){const e=se(),n=e.app.dev?de:t=>t;e.willUnmount.unshift(n(t.bind(e.component),"onWillUnmount"))}class be{constructor(t,e,n){this.props=t,this.env=e,this.__owl__=n}setup(){}render(t=!1){this.__owl__.render(!0===t)}}be.template="";const ge=z("").constructor;class ye extends ge{constructor(t,e){super(""),this.target=null,this.selector=t,this.realBDom=e}mount(t,e){if(super.mount(t,e),this.target=document.querySelector(this.selector),!this.target){let t=this.el;for(;t&&t.parentElement instanceof HTMLElement;)t=t.parentElement;if(this.target=t&&t.querySelector(this.selector),!this.target)throw new Error("invalid portal target")}this.realBDom.mount(this.target,null)}beforeRemove(){this.realBDom.beforeRemove()}remove(){this.realBDom&&(super.remove(),this.realBDom.remove(),this.realBDom=null)}patch(t){super.patch(t),this.realBDom?this.realBDom.patch(t.realBDom,!0):(this.realBDom=t.realBDom,this.realBDom.mount(this.target,null))}}class ve extends be{setup(){const t=this.__owl__,e=t.renderFn;t.renderFn=()=>new ye(this.props.target,e()),me((()=>{t.bdom&&t.bdom.remove()}))}}ve.template="__portal__",ve.props={target:{type:String},slots:!0};const we=t=>Array.isArray(t),xe=t=>"object"!=typeof t,ke=t=>"object"==typeof t&&t&&"value"in t;function $e(t){return"object"==typeof t&&"optional"in t&&t.optional||!1}function Ne(t){return"*"===t||!0===t?"value":t.name.toLowerCase()}function Ee(t){return xe(t)?Ne(t):we(t)?t.map(Ee).join(" or "):ke(t)?String(t.value):"element"in t?`list of ${Ee({type:t.element,optional:!1})}s`:"shape"in t?"object":Ee(t.type||"*")}function Ae(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}]))));let o=[];for(let n in t)if(n in e){let r=Te(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&&!$e(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 ${Ee(r)})`;o.push(`'${n}' is missing${e}`)}}return o}function Te(t,e,n){if(void 0===e)return $e(n)?null:`'${t}' is undefined (should be a ${Ee(n)})`;if(xe(n))return function(t,e,n){if("function"==typeof n)if("object"==typeof e){if(!(e instanceof n))return`'${t}' is not a ${Ne(n)}`}else if(typeof e!==n.name.toLowerCase())return`'${t}' is not a ${Ne(n)}`;return null}(t,e,n);if(ke(n))return e===n.value?null:`'${t}' is not equal to '${n.value}'`;if(we(n)){return n.find((n=>!Te(t,e,n)))?null:`'${t}' is not a ${Ee(n)}`}let o=null;if("element"in n)o=function(t,e,n){if(!Array.isArray(e))return`'${t}' is not a list of ${Ee(n)}s`;for(let o=0;o<e.length;o++){const r=Te(`${t}[${o}]`,e[o],n);if(r)return r}return null}(t,e,n.element);else if("shape"in n&&!o)if("object"!=typeof e||Array.isArray(e))o=`'${t}' is not an object`;else{const r=Ae(e,n.shape);r.length&&(o=`'${t}' has not the correct shape (${r.join(", ")})`)}return"type"in n&&!o&&(o=Te(t,e,n.type)),"validate"in n&&!o&&(o=n.validate(e)?null:`'${t}' is not valid`),o}const _e=Object.create;function Se(t){const e=t.__owl__.component,n=_e(e);for(let e in t)n[e]=t[e];return n}const Ce=Symbol("isBoundary");class De{constructor(t,e,n){this.fn=t,this.ctx=Se(e),this.node=n}evaluate(){return this.fn(this.ctx,this.node)}toString(){return this.evaluate().toString()}}let Le=new WeakMap;const Be=WeakMap.prototype.get,Re=WeakMap.prototype.set;function Oe(t,e,n){const o="string"!=typeof t?t:n.constructor.components[t];if(!o)return;const r=o.props;if(!r)return void(n.__owl__.app.warnIfNoStaticProps&&console.warn(`Component '${o.name}' does not have a static props description`));const i=o.defaultProps;if(i){let t=t=>Array.isArray(r)?r.includes(t):t in r&&!("*"in r)&&!$e(r[t]);for(let e in i)if(t(e))throw new Error(`A default value cannot be defined for a mandatory prop (name: '${e}', component: ${o.name})`)}const s=Ae(e,r);if(s.length)throw new Error(`Invalid props for component '${o.name}': `+s.join(", "))}const Pe={withDefault:function(t,e){return null==t||!1===t?e:t},zero:Symbol("zero"),isBoundary:Ce,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=_e(h||{});u&&(d[u]=s);const f=c?c.call(h.__owl__.component,d,e,n):null;if(l){let s=void 0,a=void 0;return f?s=i?r(o,f):f:a=l.call(t.__owl__.component,t,e,n),R([s,a])}return f||z("")},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)throw new Error("Invalid loop expression");n=Object.keys(t),e=Object.values(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(Ce);){const e=t.__proto__;if(!e){t=o;break}t=e}t[e]=n},multiRefSetter:function(t,e){let n=0;return o=>{if(o&&(n++,n>1))throw new Error("Cannot have 2 elements with same ref name at the same time");(0===n||o)&&(t[e]=o)}},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:Oe,LazyValue:De,safeOutput:function(t){if(!t)return t;let e,n;switch(typeof t){case"object":t instanceof re?(e="string_safe",n=wt(t)):t instanceof De?(e="lazy_value",n=t.evaluate()):t instanceof String?(e="string_unsafe",n=z(t)):(e="block_safe",n=t);break;case"string":e="string_unsafe",n=z(t);break;default:e="string_unsafe",n=z(String(t))}return r(e,n)},bind:function(t,e){let n=t.__owl__.component,o=Be.call(Le,n);o||(o=new WeakMap,Re.call(Le,n,o));let r=Be.call(o,e);return r||(r=e.bind(n),Re.call(o,e,r)),r},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=$(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!==i;){if(n.contains(e))return o.call(this,t);n=n.nextSibling}}}}moveBefore(t,e){this.child.moveBefore(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:Ft},Ie={text:z,createBlock:tt,list:pt,multi:R,html:wt,toggler:r,comment:K};class je{constructor(t={}){this.rawTemplates=Object.create(Me),this.templates={},this.Portal=ve,this.dev=t.dev||!1,this.translateFn=t.translateFn,this.translatableAttributes=t.translatableAttributes,t.templates&&this.addTemplates(t.templates)}static registerTemplate(t,e){Me[t]=e}addTemplate(t,e){if(t in this.rawTemplates){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 Error(`Template ${t} already defined with different content`)}this.rawTemplates[t]=e}addTemplates(t){if(t){t=t instanceof Document?t:function(t){const e=(new DOMParser).parseFromString(t,"text/xml");if(e.getElementsByTagName("parsererror").length){let n="Invalid XML in template.";const o=e.getElementsByTagName("parsererror")[0].textContent;if(o){n+="\nThe parser has produced the following error message:\n"+o;const e=/\d+/g,r=e.exec(o);if(r){const 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 Error(n)}return e}(t);for(const e of t.querySelectorAll("[t-name]")){const t=e.getAttribute("t-name");this.addTemplate(t,e)}}}getTemplate(t){if(!(t in this.templates)){const e=this.rawTemplates[t];if(void 0===e){let e="";try{e=` (for component "${se().component.constructor.name}")`}catch{}throw new Error(`Missing template: "${t}"${e}`)}const n="function"==typeof e&&!(e instanceof Element)?e:this._compileTemplate(t,e),o=this.templates;this.templates[t]=function(e,n){return o[t].call(this,e,n)};const r=n(this,Ie,Pe);this.templates[t]=r}return this.templates[t]}_compileTemplate(t,e){throw new Error("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))}}const Me={};function We(...t){const e="__template__"+We.nextId++,n=String.raw(...t);return Me[e]=n,e}We.nextId=1,je.registerTemplate("__portal__",(function(t,e,n){let{callSlot:o}=n;return function(t,e,n=""){return o(t,e,n,"default",!1,null)}}));const Fe="true,false,NaN,null,undefined,debugger,console,window,in,instanceof,new,function,return,this,eval,void,Math,RegExp,Array,Object,Date".split(","),Ve=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"}),Ke="...,.,===,==,+,!==,!=,!,||,&&,>=,>,<=,<,?,-,*,/,%,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 Error("Invalid expression");e+=o}r++}if(t[r]!==n)throw new Error("Invalid expression");return e+=n,"`"===n?{type:"TEMPLATE_STRING",value:e,replace:t=>e.replace(/\$\{(.*?)\}/g,((e,n)=>"${"+t(n)+"}"))}:{type:"VALUE",value:e}},function(t){let e=t[0];if(e&&e.match(/[0-9]/)){let n=1;for(;t[n]&&t[n].match(/[0-9]|\./);)e+=t[n],n++;return{type:"VALUE",value:e}}return!1},function(t){for(let e of Ke)if(t.startsWith(e))return{type:"OPERATOR",value:e};return!1},function(t){let e=t[0];if(e&&e.match(/[a-zA-Z_\$]/)){let n=1;for(;t[n]&&t[n].match(/\w/);)e+=t[n],n++;return e in 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 ze))&&{type:ze[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 Error(`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);return n&&n[0].length===t.length?`(${e(t.slice(2,"{"===n[0][0]?-2:-1))})`:"`"+t.replace(Ze,(t=>"${"+e(t.slice(2,"{"===t[0]?-2:-1))+"}"))+"`"}function Qe(t){return Je(t,Ye)}const tn=document.implementation.createDocument(null,null,null),en=new Set(["stop","capture","prevent","self","synthetic"]);let nn={};function on(t=""){return nn[t]=(nn[t]||0)+1,t+nn[t]}class rn{constructor(t,e){this.dynamicTagName=null,this.isRoot=!1,this.hasDynamicChildren=!1,this.children=[],this.data=[],this.childNumber=0,this.parentVar="",this.id=rn.nextBlockId++,this.varName="b"+this.id,this.blockName="block"+this.id,this.target=t,this.type=e}insertData(t,e="d"){const n=on(e);return this.target.addLine(`let ${n} = ${t};`),this.data.push(n)-1}insert(t){this.currentDom?this.currentDom.appendChild(t):this.dom=t}generateExpr(t){if("block"===this.type){const t=this.children.length;let e=this.data.length?`[${this.data.join(", ")}]`:t?"[]":"";return t&&(e+=", ["+this.children.map((t=>t.varName)).join(", ")+"]"),this.dynamicTagName?`toggler(${this.dynamicTagName}, ${this.blockName}(${this.dynamicTagName})(${e}))`:`${this.blockName}(${e})`}return"list"===this.type?`list(c_block${this.id})`:t}asXmlString(){const t=tn.createElement("t");return t.appendChild(this.dom),t.innerHTML}}function sn(t,e){return Object.assign({block:null,index:0,forceNewBlock:!0,translate:t.translate,tKeyExpr:null,nameSpace:t.nameSpace,tModelSelectedExpr:t.tModelSelectedExpr},e)}rn.nextBlockId=1;class ln{constructor(t,e){this.indentLevel=0,this.loopLevel=0,this.code=[],this.hasRoot=!1,this.hasCache=!1,this.hasRef=!1,this.refInfo={},this.shouldProtectScope=!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=[];if(t.push(`function ${this.name}(ctx, node, key = "") {`),this.hasRef){t.push(" const refs = ctx.__owl__.refs;");for(let e in this.refInfo){const[n,o]=this.refInfo[e];t.push(` const ${n} = ${o};`)}}this.shouldProtectScope&&(t.push(" ctx = Object.create(ctx);"),t.push(" ctx[isBoundary] = 1")),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 ")}}const an=["label","title","placeholder","alt"],cn=/^(\s*)([\s\S]+?)(\s*)$/;class hn{constructor(t,e){if(this.blocks=[],this.nextBlockId=1,this.isDebug=!1,this.targets=[],this.target=new ln("template"),this.translatableAttributes=an,this.staticDefs=[],this.helpers=new Set,this.translateFn=e.translateFn||(t=>t),e.translatableAttributes){const t=new Set(an);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,rn.nextBlockId=1,nn={},this.compileAST(t,{block:null,index:0,forceNewBlock:!1,isLast:!0,translate:!0,tKeyExpr:null});let e=[" let { text, createBlock, list, multi, html, toggler, comment } = bdom;"];this.helpers.size&&e.push(`let { ${[...this.helpers].join(", ")} } = helpers;`),this.templateName&&e.push(`// Template name: "${this.templateName}"`);for(let{id:t,expr:n}of this.staticDefs)e.push(`const ${t} = ${n};`);if(this.blocks.length){e.push("");for(let t of this.blocks)if(t.dom){let n=t.asXmlString();n=n.replace(/`/g,"\\`"),t.dynamicTagName?(n=n.replace(/^<\w+/,`<\${tag || '${t.dom.nodeName}'}`),n=n.replace(/\w+>$/,`\${tag || '${t.dom.nodeName}'}>`),e.push(`let ${t.blockName} = tag => createBlock(\`${n}\`);`)):e.push(`let ${t.blockName} = createBlock(\`${n}\`);`)}}if(this.targets.length)for(let t of this.targets)e.push(""),e=e.concat(t.generateCode());e.push(""),e=e.concat("return "+this.target.generateCode());const n=e.join("\n ");if(this.isDebug){const t="[Owl Debug]\n"+n;console.log(t)}return n}compileInNewTarget(t,e,n,o){const r=on(t),i=this.target,s=new ln(r,o);return this.targets.push(s),this.target=s,this.compileAST(e,sn(n)),this.target=i,r}addLine(t,e){this.target.addLine(t,e)}define(t,e){this.addLine(`const ${t} = ${e};`)}insertAnchor(t){const e="block-child-"+t.children.length,n=tn.createElement(e);t.insert(n)}createBlock(t,e,n){const o=this.target.hasRoot,r=new rn(this.target,e);return o||n.preventRoot||(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);const r=n.tKeyExpr;if(e.parentVar){let t="key"+this.target.loopLevel;return r&&(t=`${r} + ${t}`),this.helpers.add("withKey"),void this.addLine(`${e.parentVar}[${n.index}] = withKey(${o}, ${t});`)}r&&(o=`toggler(${r}, ${o})`),e.isRoot&&!n.preventRoot?(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=on("v");o.set(t.varName,e),this.define(e,t.value)}t.value=o.get(t.varName)}return t.value})).join("")}compileAST(t,e){switch(t.type){case 1:this.compileComment(t,e);break;case 0:this.compileText(t,e);break;case 2:this.compileTDomNode(t,e);break;case 4:this.compileTEsc(t,e);break;case 8:this.compileTOut(t,e);break;case 5:this.compileTIf(t,e);break;case 9:this.compileTForeach(t,e);break;case 10:this.compileTKey(t,e);break;case 3:this.compileMulti(t,e);break;case 7:this.compileTCall(t,e);break;case 15:this.compileTCallBlock(t,e);break;case 6:this.compileTSet(t,e);break;case 11:this.compileComponent(t,e);break;case 12:this.compileDebug(t,e);break;case 13:this.compileLog(t,e);break;case 14:this.compileTSlot(t,e);break;case 16:this.compileTTranslation(t,e);break;case 17:this.compileTPortal(t,e)}}compileDebug(t,e){this.addLine("debugger;"),t.content&&this.compileAST(t.content,e)}compileLog(t,e){this.addLine(`console.log(${Ye(t.expr)});`),t.content&&this.compileAST(t.content,e)}compileComment(t,e){let{block:n,forceNewBlock:o}=e;if(!n||o)n=this.createBlock(n,"comment",e),this.insertBlock(`comment(\`${t.value}\`)`,n,{...e,forceNewBlock:o&&!n});else{const e=tn.createComment(t.value);n.insert(e)}}compileText(t,e){let{block:n,forceNewBlock:o}=e,r=t.value;if(r&&!1!==e.translate){const t=cn.exec(r);r=t[1]+this.translateFn(t[2])+t[3]}if(!n||o)n=this.createBlock(n,"text",e),this.insertBlock(`text(\`${r}\`)`,n,{...e,forceNewBlock:o&&!n});else{const e=0===t.type?tn.createTextNode:tn.createComment;n.insert(e.call(tn,r))}}generateHandlerCode(t,e){const n=t.split(".").slice(1).map((t=>{if(!en.has(t))throw new Error(`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=on("tag");this.define(e,Ye(t.dynamicTag)),n.dynamicTagName=e}const s={},l=t.ns||e.nameSpace;l&&r&&(s["block-ns"]=l);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")){r=Ye(t.attrs[o]);const e=n.insertData(r,"attr");"t-att"===o?s["block-attributes"]=String(e):(i=o.slice(6),s["block-attribute-"+e]=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"}}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.target.hasRef=!0;if(Ze.test(t.ref)){const e=Je(t.ref,(t=>this.captureExpression(t,!0))),o=n.insertData(`(el) => refs[${e}] = el`,"ref");s["block-ref"]=String(o)}else{let e=t.ref;if(e in this.target.refInfo){this.helpers.add("multiRefSetter");const t=this.target.refInfo[e],o=n.data.push(t[0])-1;s["block-ref"]=String(o),t[1]=`multiRefSetter(refs, \`${e}\`)`}else{let t=on("ref");this.target.refInfo[e]=[t,`(el) => refs[\`${e}\`] = el`];const o=n.data.push(t)-1;s["block-ref"]=String(o)}}}let a;if(t.model){const{hasDynamicChildren:e,baseExpr:o,expr:r,eventType:i,shouldNumberize:l,shouldTrim:c,targetAttr:h,specialInitTargetAttr:u}=t.model,d=Ye(o),f=on("bExpr");this.define(f,d);const p=Ye(r),m=on("expr");this.define(m,p);const b=`${f}[${m}]`;let g;if(u)g=n.insertData(`${b} === '${s[h]}'`,"attr"),s["block-attribute-"+g]=u;else if(e){a=""+on("bValue"),this.define(a,b)}else g=n.insertData(""+b,"attr"),s["block-attribute-"+g]=h;this.helpers.add("toNumber");let y="ev.target."+h;y=c?y+".trim()":y,y=l?`toNumber(${y})`:y;const v=`[(ev) => { ${b} = ${y}; }]`;g=n.insertData(v,"hdlr"),s["block-handler-"+g]=i}const c=tn.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=sn(e,{block:n,index:n.childNumber,forceNewBlock:!1,isLast:e.isLast&&o===r.length-1,tKeyExpr:e.tKeyExpr,nameSpace:l,tModelSelectedExpr:a});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))};`,i)}}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=tn.createElement("block-text-"+t);o.insert(e)}}compileTOut(t,e){let{block:n}=e;n&&this.insertAnchor(n),n=this.createBlock(n,"html",e),this.helpers.add("0"===t.expr?"zero":"safeOutput");let o="0"===t.expr?"ctx[zero]":`safeOutput(${Ye(t.expr)})`;if(t.body){const n=rn.nextBlockId,r=sn(e);this.compileAST({type:3,content:t.body},r),this.helpers.add("withDefault"),o=`withDefault(${o}, b${n})`}this.insertBlock(""+o,n,e)}compileTIf(t,e,n){let{block:o,forceNewBlock:r,index:i}=e,s=i;const l=this.target.code.length,a=!o||"multi"!==o.type&&r;o&&(o.hasDynamicChildren=!0),(!o||"multi"!==o.type&&r)&&(o=this.createBlock(o,"multi",e)),this.addLine(`if (${Ye(t.condition)}) {`),this.target.indentLevel++,this.insertAnchor(o);const c=sn(e,{block:o,index:s});if(this.compileAST(t.content,c),this.target.indentLevel--,t.tElif)for(let n of t.tElif){this.addLine(`} else if (${Ye(n.condition)}) {`),this.target.indentLevel++,this.insertAnchor(o);const t=sn(e,{block:o,index:s});this.compileAST(n.content,t),this.target.indentLevel--}if(t.tElse){this.addLine("} else {"),this.target.indentLevel++,this.insertAnchor(o);const n=sn(e,{block:o,index:s});this.compileAST(t.tElse,n),this.target.indentLevel--}if(this.addLine("}"),a){if(o.children.length){const t=this.target.code,e=o.children.slice();let n=e.shift();for(let o=l;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))};`,l)}const t=o.children.map((t=>t.varName)).join(", ");this.insertBlock(`multi([${t}])`,o,e)}}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}\`] = ${r}[${o}];`),t.hasNoFirst||this.addLine(`ctx[\`${t.elem}_first\`] = ${o} === 0;`),t.hasNoLast||this.addLine(`ctx[\`${t.elem}_last\`] = ${o} === ${r}.length - 1;`),t.hasNoIndex||this.addLine(`ctx[\`${t.elem}_index\`] = ${o};`),t.hasNoValue||this.addLine(`ctx[\`${t.elem}_value\`] = ${i}[${o}];`),this.define("key"+this.target.loopLevel,t.key?Ye(t.key):o),this.dev&&(this.addLine(`if (keys${n.id}.has(key${this.target.loopLevel})) { throw new Error(\`Got duplicate key in t-foreach: \${key${this.target.loopLevel}}\`)}`),this.addLine(`keys${n.id}.add(key${this.target.loopLevel});`)),t.memo&&(this.target.hasCache=!0,a=on(),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=sn(e,{block:n,index:o});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)}compileTKey(t,e){const n=on("tKey_");this.define(n,Ye(t.expr)),e=sn(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){if(t.content.filter((t=>6!==t.type)).length<=1){for(let n of t.content)this.compileAST(n,e);return}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=sn(e,{block:n,index:s,forceNewBlock:!l,preventRoot:e.preventRoot,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))};`,i)}const t=n.children.map((t=>t.varName)).join(", ");this.insertBlock(`multi([${t}])`,n,e)}}compileTCall(t,e){let{block:n,forceNewBlock:o}=e;if(t.body){this.addLine("ctx = Object.create(ctx);"),this.addLine("ctx[isBoundary] = 1;"),this.helpers.add("isBoundary");const n=rn.nextBlockId,o=sn(e,{preventRoot:!0});this.compileAST({type:3,content:t.body},o),n!==rn.nextBlockId&&(this.helpers.add("zero"),this.addLine(`ctx[zero] = b${n};`))}const r=Ze.test(t.name),i=r?Qe(t.name):"`"+t.name+"`";n&&(o||this.insertAnchor(n));const s=`key + \`${this.generateComponentKey()}\``;if(r){const t=on("template");this.staticDefs.find((t=>"call"===t.id))||this.staticDefs.push({id:"call",expr:"app.callTemplate.bind(app)"}),this.define(t,i),n=this.createBlock(n,"multi",e),this.insertBlock(`call(this, ${t}, ctx, node, ${s})`,n,{...e,forceNewBlock:!n})}else{const t=on("callTemplate_");this.staticDefs.push({id:t,expr:`app.getTemplate(${i})`}),n=this.createBlock(n,"multi",e),this.insertBlock(`${t}.call(this, ctx, node, ${s})`,n,{...e,forceNewBlock:!n})}t.body&&!e.isLast&&this.addLine("ctx = ctx.__proto__;")}compileTCallBlock(t,e){let{block:n,forceNewBlock:o}=e;n&&(o||this.insertAnchor(n)),n=this.createBlock(n,"multi",e),this.insertBlock(Ye(t.name),n,{...e,forceNewBlock:!n})}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, node)`;r=t.value?r?`withDefault(${n}, ${r})`:n:r,this.addLine(`ctx[\`${t.name}\`] = ${r};`)}else{let e;e=t.defaultValue?t.value?`withDefault(${n}, \`${t.defaultValue}\`)`:`\`${t.defaultValue}\``:n,this.helpers.add("setContextValue"),this.addLine(`setContextValue(ctx, "${t.name}", ${e});`)}}generateComponentKey(){const t=[on("__")];for(let e=0;e<this.target.loopLevel;e++)t.push(`\${key${e+1}}`);return t.join("__")}formatProp(t,e){if(e=this.captureExpression(e),t.includes(".")){let[n,o]=t.split(".");if("bind"!==o)throw new Error("Invalid prop suffix");this.helpers.add("bind"),t=n,e=`bind(ctx, ${e||void 0})`}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=on("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}, __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=on("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=on("Comp"),this.define(c,Ye(t.name))):c=`\`${t.name}\``,this.dev&&this.addLine(`helpers.validateProps(${c}, ${s}, ctx);`),n&&(!1===e.forceNewBlock||e.tKeyExpr)&&this.insertAnchor(n);let h=`key + \`${a}\``;e.tKeyExpr&&(h=`${e.tKeyExpr} + ${h}`);let u=on("comp");this.staticDefs.push({id:u,expr:`app.createComponent(${t.isDynamic?null:c}, ${!t.isDynamic}, ${!!t.slots}, ${!!t.dynamicProps}, ${!t.props&&!t.dynamicProps})`});let d=`${u}(${l}, ${h}, node, ctx, ${t.isDynamic?c:null})`;t.isDynamic&&(d=`toggler(${c}, ${d})`),t.on&&(d=this.wrapWithEventCatcher(d,t.on)),n=this.createBlock(n,"multi",e),this.insertBlock(d,n,e)}wrapWithEventCatcher(t,e){this.helpers.add("createCatcher");let n=on("catcher"),o={},r=[];for(let t in e){let n=on("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;t.name.match(Ze)?(i=!0,o=Qe(t.name)):o="'"+t.name+"'";const s=t.attrs?t.attrs["t-props"]:null;t.attrs&&delete t.attrs["t-props"];const l=t.attrs?this.formatPropObject(t.attrs):[],a=this.getPropString(l,s);if(t.defaultContent){n=`callSlot(ctx, node, key, ${o}, ${i}, ${a}, ${this.compileInNewTarget("defaultContent",t.defaultContent,e)})`}else if(i){let t=on("slot");this.define(t,o),n=`toggler(${t}, callSlot(ctx, node, key, ${t}, ${i}, ${a}))`}else n=`callSlot(ctx, node, key, ${o}, ${i}, ${a})`;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})}compileTTranslation(t,e){t.content&&this.compileAST(t.content,Object.assign({},e,{translate:!1}))}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=on("ctx"),this.helpers.add("capture"),this.define(i,"capture(ctx)"));let s=on("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}, __ctx: ${i}}}}, key + \`${r}\`, node, ctx, Portal)`;n&&this.insertAnchor(n),n=this.createBlock(n,"multi",e),this.insertBlock(l,n,{...e,forceNewBlock:!1})}}const un=new WeakMap;function dn(t){if("string"==typeof t){return fn(function(t){const e=(new DOMParser).parseFromString(t,"text/xml");if(e.getElementsByTagName("parsererror").length){let n="Invalid XML in template.";const o=e.getElementsByTagName("parsererror")[0].textContent;if(o){n+="\nThe parser has produced the following error message:\n"+o;const e=/\d+/g,r=e.exec(o);if(r){const 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 Error(n)}return e}(`<t>${t}</t>`).firstChild)}let e=un.get(t);return e||(e=fn(t.cloneNode(!0)),un.set(t,e)),e}function fn(t){var e;(function(t){let e=t.querySelectorAll("[t-elif], [t-else]");for(let t=0,n=e.length;t<n;t++){let n=e[t],o=n.previousElementSibling,r=t=>o.getAttribute(t),i=t=>+!!n.getAttribute(t);if(!o||!r("t-if")&&!r("t-elif"))throw new Error("t-elif and t-else directives must be preceded by a t-if or t-elif directive");{if(r("t-foreach"))throw new Error("t-if cannot stay at the same level as t-foreach when using t-elif or t-else");if(["t-if","t-elif","t-else"].map(i).reduce((function(t,e){return t+e}))>1)throw new Error("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 Error("text is not allowed between branching directives");t.remove()}}}})(e=t),function(t){const e=[...t.querySelectorAll("[t-esc]")].filter((t=>t.tagName[0]===t.tagName[0].toUpperCase()||t.hasAttribute("t-component")));for(const t of e){if(t.childNodes.length)throw new Error("Cannot have t-esc on a component that already has content");const e=t.getAttribute("t-esc");t.removeAttribute("t-esc");const n=t.ownerDocument.createElement("t");null!=e&&n.setAttribute("t-esc",e),t.appendChild(n)}}(e);return pn(t,{inPreTag:!1,inSVG:!1})||{type:0,value:""}}function pn(t,e){return t instanceof Element?function(t,e){if(t.hasAttribute("t-debug"))return t.removeAttribute("t-debug"),{type:12,content:pn(t,e)};if(t.hasAttribute("t-log")){const n=t.getAttribute("t-log");return t.removeAttribute("t-log"),{type:13,expr:n,content:pn(t,e)}}return null}(t,e)||function(t,e){if(!t.hasAttribute("t-foreach"))return null;const n=t.outerHTML,o=t.getAttribute("t-foreach");t.removeAttribute("t-foreach");const r=t.getAttribute("t-as")||"";t.removeAttribute("t-as");const i=t.getAttribute("t-key");if(!i)throw new Error(`"Directive t-foreach should always be used with a t-key!" (expression: t-foreach="${o}" t-as="${r}")`);t.removeAttribute("t-key");const s=t.getAttribute("t-memo")||"";t.removeAttribute("t-memo");const l=pn(t,e);if(!l)return null;const a=!n.includes("t-call"),c=a&&!n.includes(r+"_first"),h=a&&!n.includes(r+"_last"),u=a&&!n.includes(r+"_index"),d=a&&!n.includes(r+"_value");return{type:9,collection:o,elem:r,body:l,memo:s,key:i,hasNoFirst:c,hasNoLast:h,hasNoIndex:u,hasNoValue:d}}(t,e)||function(t,e){if(!t.hasAttribute("t-if"))return null;const n=t.getAttribute("t-if");t.removeAttribute("t-if");const o=pn(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=pn(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=pn(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=pn(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");if(t.removeAttribute("t-call"),"t"!==t.tagName){const o=pn(t,e),r={type:7,name:n,body:null};if(o&&2===o.type)return o.content=[r],o;if(o&&11===o.type)return{...o,slots:{default:{content:r,scope:null,on:null,attrs:null}}}}const o=xn(t,e);return{type:7,name:n,body:o.length?o:null}}(t,e)||function(t,e){if(!t.hasAttribute("t-call-block"))return null;return{type:15,name:t.getAttribute("t-call-block")}}(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=pn(t,e);if(!i)return o;if(2===i.type)return{...i,ref:r,content:[o]};if(11===i.type)throw new Error("t-esc is not supported on Component nodes");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=pn(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:pn(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){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=pn(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){let n=t.tagName;const o=n[0];let r=t.hasAttribute("t-component");if(r&&"t"!==n)throw new Error(`Directive 't-component' can only be used on <t> nodes (used on a <${n}>)`);if(o!==o.toUpperCase()&&!r)return null;r&&(n=t.getAttribute("t-component"),t.removeAttribute("t-component"));const i=t.getAttribute("t-props");t.removeAttribute("t-props");const s=t.getAttribute("t-slot-scope");t.removeAttribute("t-slot-scope");let l=null,a=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 Error(t||"unsupported directive on Component: "+e)}l=l||{},l[e.slice(5)]=n}else a=a||{},a[e]=n}let c=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 Error(`Directive 't-set-slot' can only be used on <t> nodes (used on a <${t.tagName}>)`);const o=t.getAttribute("t-set-slot");let r=t.parentElement,i=!1;for(;r!==n;){if(r.hasAttribute("t-component")||r.tagName[0]===r.tagName[0].toUpperCase()){i=!0;break}r=r.parentElement}if(i)continue;t.removeAttribute("t-set-slot"),t.remove();const s=pn(t,e);let l=null,a=null,h=null;for(let e of t.getAttributeNames()){const n=t.getAttribute(e);"t-slot-scope"!==e?e.startsWith("t-on-")?(l=l||{},l[e.slice(5)]=n):(a=a||{},a[e]=n):h=n}c=c||{},c[o]={content:s,on:l,attrs:a,scope:h}}const r=kn(n,e);r&&(c=c||{},c.default={content:r,on:l,attrs:null,scope:s})}return{type:11,name:n,isDynamic:r,dynamicProps:i,props:a,slots:c,on:l}}(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 Error(`Invalid tag name: '${n}'`);e=Object.assign({},e),"pre"===n&&(e.inPreTag=!0);const r=vn.has(n)&&!e.inSVG;e.inSVG=e.inSVG||r;const i=r?"http://www.w3.org/2000/svg":null,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 r=t.getAttribute(o);if(o.startsWith("t-on")){if("t-on"===o)throw new Error("Missing event name with t-on directive");c=c||{},c[o.slice(5)]=r}else if(o.startsWith("t-model")){if(!["input","select","textarea"].includes(n))throw new Error("The t-model directive only works with <input>, <textarea> and <select>");let i,s;if(gn.test(r)){const t=r.lastIndexOf(".");i=r.slice(0,t),s=`'${r.slice(t+1)}'`}else{if(!yn.test(r))throw new Error(`Invalid t-model expression: "${r}" (it should be assignable)`);{const t=r.lastIndexOf("[");i=r.slice(0,t),s=r.slice(t+1,-1)}}const l=t.getAttribute("type"),a="input"===n,c="select"===n,u="textarea"===n,d=a&&"checkbox"===l,f=a&&"radio"===l,p=a&&!d&&!f,m=o.includes(".lazy"),b=o.includes(".number");h={baseExpr:i,expr:s,targetAttr:d?"checked":"value",specialInitTargetAttr:f?"checked":null,eventType:f?"click":c||m?"change":"input",hasDynamicChildren:!1,shouldTrim:o.includes(".trim")&&(p||u),shouldNumberize:b&&(p||u)},c&&((e=Object.assign({},e)).tModelInfo=h)}else{if(o.startsWith("block-"))throw new Error(`Invalid attribute: '${o}'`);if("t-name"!==o){if(o.startsWith("t-")&&!o.startsWith("t-att"))throw new Error(`Unknown QWeb directive: '${o}'`);const t=e.tModelInfo;t&&["t-att-value","t-attf-value"].includes(o)&&(t.hasDynamicChildren=!0),a=a||{},a[o]=r}}}const u=xn(t,e);return{type:2,tag:n,dynamicTag:o,attrs:a,on:c,ref:s,content:u,model:h,ns:i}}(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=xn(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||"";if(!e.inPreTag){if(mn.test(n)&&!n.trim())return null;n=n.replace(bn," ")}return{type:0,value:n}}if(t.nodeType===Node.COMMENT_NODE)return{type:1,value:t.textContent||""};return null}(t,e)}const mn=/[\r\n]/,bn=/\s+/g;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 xn(t,e){const n=[];for(let o of t.childNodes){const t=pn(o,e);t&&(3===t.type?n.push(...t.content):n.push(t))}return n}function kn(t,e){const n=xn(t,e);switch(n.length){case 0:return null;case 1:return n[0];default:return{type:3,content:n}}}class $n{constructor(){this.tasks=new Set,this.frame=0,this.delayedRenders=[],this.requestAnimationFrame=$n.requestAnimationFrame}addFiber(t){this.tasks.add(t.root)}flush(){if(this.delayedRenders.length){let t=this.delayedRenders;this.delayedRenders=[];for(let e of t)e.root&&2!==e.node.status&&e.node.fiber===e&&e.render()}0===this.frame&&(this.frame=this.requestAnimationFrame((()=>{this.frame=0,this.tasks.forEach((t=>this.processFiber(t)));for(let t of this.tasks)2===t.node.status&&this.tasks.delete(t)})))}processFiber(t){if(t.root!==t)return void this.tasks.delete(t);const e=kt.has(t);e&&0!==t.counter?this.tasks.delete(t):2!==t.node.status?0===t.counter&&(e||t.complete(),this.tasks.delete(t)):this.tasks.delete(t)}}$n.requestAnimationFrame=window.requestAnimationFrame.bind(window);let Nn=!1;class En extends je{constructor(t,e={}){super(e),this.scheduler=new $n,this.root=null,this.Root=t,e.test&&(this.dev=!0),this.warnIfNoStaticProps=e.warnIfNoStaticProps||!1,!this.dev||e.test||Nn||(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.`),Nn=!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){En.validateTarget(t),this.dev&&Oe(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 he(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=$t.get(t);r||(r=[],$t.set(t,r)),r.unshift((t=>{throw o?console.error(t):n(t),t}))}));return t.mountComponent(e,n),o}destroy(){this.root&&(this.scheduler.flush(),this.root.destroy())}createComponent(t,e,n,o,r){const i=!e;const s=n?(t,e)=>!0:r?(t,e)=>!1:function(t,e){for(let n in t)if(t[n]!==e[n])return!0;return o&&Object.keys(t).length!==Object.keys(e).length},l=he.prototype.updateAndRender,a=he.prototype.initiateRender;return(n,o,r,c,h)=>{let u=r.children,d=u[o];d&&(2===d.status||i&&d.component.constructor!==h)&&(d=void 0);const f=r.fiber;if(d)(s(d.props,n)||f.deep||d.forceNextRender)&&(d.forceNextRender=!1,l.call(d,n,f));else{if(e){if(!(h=c.constructor.components[t]))throw new Error(`Cannot find the definition of component "${t}"`);if(!(h.prototype instanceof be))throw new Error(`"${t}" is not a Component. It must inherit from the Component class`)}d=new he(h,n,this,r,o),u[o]=d,a.call(d,new _t(d,f))}return f.childrenMap[o]=d,d}}}function An(t,e){const n=Object.create(t),o=Object.getOwnPropertyDescriptors(e);return Object.freeze(Object.defineProperties(n,o))}function Tn(t){const e=se();e.childEnv=An(e.childEnv,t)}En.validateTarget=function(t){if(!(t instanceof HTMLElement))throw new Error("Cannot mount component: the target is not a valid DOM element");if(!document.body.contains(t))throw new Error("Cannot mount a component on a detached dom node")},n.shouldNormalizeDom=!1,n.mainEventHandler=(t,n,o)=>{const{data:r,modifiers:i}=e(t);t=r;let s=!1;if(i.length){let t=!1;const e=n.target===o;for(const o of i)switch(o){case"self":if(t=!0,e)continue;return s;case"prevent":(t&&e||!t)&&n.preventDefault();continue;case"stop":(t&&e||!t)&&n.stopPropagation(),s=!0;continue}}if(Object.hasOwnProperty.call(t,0)){const e=t[0];if("function"!=typeof e)throw new Error(`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 s};const _n={config:n,mount:xt,patch:function(t,e,n=!1){t.patch(e,n)},remove:function(t,e=!1){e&&t.beforeRemove(),t.remove()},list:pt,multi:R,text:z,toggler:r,createBlock:tt,html:wt,comment:K},Sn={};je.prototype._compileTemplate=function(t,e){return function(t,e={}){const n=dn(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 hn(n,{...e,hasSafeContext:o}).generateCode();return new Function("app, bdom, helpers",r)}(e,{name:t,dev:this.dev,translateFn:this.translateFn,translatableAttributes:this.translatableAttributes})},t.App=En,t.Component=be,t.EventBus=oe,t.__info__=Sn,t.blockDom=_n,t.loadFile=async function(t){const e=await fetch(t);if(!e.ok)throw new Error("Error while fetching xml templates");return await e.text()},t.markRaw=Ft,t.markup=function(t){return new re(t)},t.mount=async function(t,e,n={}){return new En(t,n).mount(e,n)},t.onError=function(t){const e=se();let n=$t.get(e);n||(n=[],$t.set(e,n)),n.push(t.bind(e.component))},t.onMounted=fe,t.onPatched=pe,t.onRendered=function(t){const e=se(),n=e.renderFn,o=e.app.dev?de:t=>t;t=o(t.bind(e.component),"onRendered"),e.renderFn=()=>{const e=n();return t(),e}},t.onWillDestroy=function(t){const e=se(),n=e.app.dev?de:t=>t;e.willDestroy.push(n(t.bind(e.component),"onWillDestroy"))},t.onWillPatch=function(t){const e=se(),n=e.app.dev?de:t=>t;e.willPatch.unshift(n(t.bind(e.component),"onWillPatch"))},t.onWillRender=function(t){const e=se(),n=e.renderFn,o=e.app.dev?de:t=>t;t=o(t.bind(e.component),"onWillRender"),e.renderFn=()=>(t(),n())},t.onWillStart=function(t){const e=se(),n=e.app.dev?de:t=>t;e.willStart.push(n(t.bind(e.component),"onWillStart"))},t.onWillUnmount=me,t.onWillUpdateProps=function(t){const e=se(),n=e.app.dev?de:t=>t;e.willUpdateProps.push(n(t.bind(e.component),"onWillUpdateProps"))},t.reactive=Xt,t.status=function(t){switch(t.__owl__.status){case 0:return"new";case 1:return"mounted";case 2:return"destroyed"}},t.toRaw=Vt,t.useChildSubEnv=Tn,t.useComponent=function(){return ie.component},t.useEffect=function(t,e=(()=>[NaN])){let n,o;fe((()=>{o=e(),n=t(...o)})),pe((()=>{const r=e();r.some(((t,e)=>t!==o[e]))&&(o=r,n&&n(),n=t(...o))})),me((()=>n&&n()))},t.useEnv=function(){return se().component.env},t.useExternalListener=function(t,e,n,o){const r=se(),i=n.bind(r.component);fe((()=>t.addEventListener(e,i,o))),me((()=>t.removeEventListener(e,i,o)))},t.useRef=function(t){const e=se().refs;return{get el(){return e[t]||null}}},t.useState=ce,t.useSubEnv=function(t){const e=se();e.component.env=An(e.component.env,t),Tn(t)},t.validate=function(t,e){let n=Ae(t,e);if(n.length)throw new Error("Invalid object: "+n.join(", "))},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.version="2.0.0-beta-10",Sn.date="2022-06-22T08:33:26.205Z",Sn.hash="2e03332",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)}moveBefore(t,e){this.child.moveBefore(t?t.child:null,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)}const{setAttribute:i,removeAttribute:s}=Element.prototype,l=DOMTokenList.prototype,a=l.add,c=l.remove,h=Array.isArray,{split:u,trim:d}=String.prototype,f=/\s+/;function p(t,e){switch(e){case!1:case void 0:s.call(this,t);break;case!0:i.call(this,t,"");break;default:i.call(this,t,e)}}function m(t){return function(e){p.call(this,t,e)}}function b(t){if(h(t))p.call(this,t[0],t[1]);else for(let e in t)p.call(this,e,t[e])}function g(t,e){if(h(t)){const n=t[0],o=t[1];if(n===e[0]){if(o===e[1])return;p.call(this,n,o)}else s.call(this,e[0]),p.call(this,n,o)}else{for(let n in e)n in t||s.call(this,n);for(let n in t){const o=t[n];o!==e[n]&&p.call(this,n,o)}}}function y(t){const e={};switch(typeof t){case"string":const n=d.call(t);if(!n)return{};let o=u.call(n,f);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=d.call(n),!n)continue;const t=u.call(n,f);for(let n of t)e[n]=o}}return e;case"undefined":return{};case"number":return{[t]:!0};default:return{[t]:!0}}}function v(t){t=""===t?{}:y(t);const e=this.classList;for(let n in t)a.call(e,n)}function w(t,e){e=""===e?{}:y(e),t=""===t?{}:y(t);const n=this.classList;for(let o in e)o in t||c.call(n,o);for(let o in t)o in e||a.call(n,o)}function x(t){return function(e){this[t]=0===e?0:e||""}}function k(t,e){switch(t){case"input":return"checked"===e||"indeterminate"===e||"value"===e||"readonly"===e||"disabled"===e;case"option":return"selected"===e||"disabled"===e;case"textarea":return"value"===e||"readonly"===e||"disabled"===e;case"select":return"value"===e||"disabled"===e;case"button":case"optgroup":return"disabled"===e}return!1}function $(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+="_capture");!function(t,e,o=!1){if(A[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}),A[e]=!0}(t,o,e);const r=E++;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}_${N++}`;e&&(o+="_capture");function r(t){const e=t.currentTarget;if(!e||!document.contains(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 N=1;let E=1;const A={};const T=Node.prototype,_=T.insertBefore,S=(C=T,D="textContent",Object.getOwnPropertyDescriptor(C,D)).set;var C,D;const L=T.removeChild;class B{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,_.call(t,n,e)}}this.anchors=r,this.parentEl=t}moveBefore(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.moveBefore(null,e);else{const n=r[t];_.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,_.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),L.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():L.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 O(t){return new B(t)}const R=Node.prototype,P=CharacterData.prototype,I=R.insertBefore,j=((t,e)=>Object.getOwnPropertyDescriptor(t,e))(P,"data").set,M=R.removeChild;class W{constructor(t){this.text=t}mountNode(t,e,n){this.parentEl=e,I.call(e,t,n),this.el=t}moveBefore(t,e){const n=t?t.el:e;I.call(this.parentEl,this.el,n)}beforeRemove(){}remove(){M.call(this.parentEl,this.el)}firstNode(){return this.el}toString(){return this.text}}class F extends W{mount(t,e){this.mountNode(document.createTextNode(H(this.text)),t,e)}patch(t){const e=t.text;this.text!==e&&(j.call(this.el,H(e)),this.text=e)}}class V extends W{mount(t,e){this.mountNode(document.createComment(H(this.text)),t,e)}patch(){}}function z(t){return new F(t)}function K(t){return new V(t)}function H(t){switch(typeof t){case"string":return t;case"number":return String(t);case"boolean":return t?"true":"false";default:return t||""}}const U=(t,e)=>Object.getOwnPropertyDescriptor(t,e),q=Node.prototype,G=Element.prototype,X=U(CharacterData.prototype,"data").set,Y=U(q,"firstChild").get,Z=U(q,"nextSibling").get,J=()=>{},Q={};function tt(t){if(t in Q)return Q[t];const e=(new DOMParser).parseFromString(`<t>${t}</t>`,"text/xml").firstChild.firstChild;n.shouldNormalizeDom&&et(e);const o=nt(e),r=it(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=q.cloneNode,d=q.insertBefore,f=G.remove;class p{constructor(t){this.data=t}beforeRemove(){}remove(){f.call(this.el)}firstNode(){return this.el}moveBefore(t,e){const n=t?t.el:e;d.call(this.parentEl,this.el,n)}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=B.prototype.beforeRemove,(t,e=[])=>new n(t,e);return t=>new n(t)}(o.el,r);return Q[t]=i,i}function et(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)et(t.childNodes.item(e))}else t.remove()}function nt(t,e=null,n=null){switch(t.nodeType){case Node.ELEMENT_NODE:{let o=n&&n.currentNS;const r=t.tagName;let i=void 0;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||ot(n);const t=parseInt(r.slice(12),10);s.push({type:"child",idx:t}),i=document.createTextNode("")}const l=t.attributes,a=l.getNamedItem("block-ns");if(a&&(l.removeNamedItem("block-ns"),o=a.value),i||(i=o?document.createElementNS(o,r):document.createElement(r)),i instanceof Element)for(let t=0;t<l.length;t++){const e=l[t].name,n=l[t].value;if(e.startsWith("block-handler-")){const t=parseInt(e.slice(14),10);s.push({type:"handler",idx:t,event:n})}else if(e.startsWith("block-attribute-")){const t=parseInt(e.slice(16),10);s.push({type:"attribute",idx:t,name:n,tag:r})}else"block-attributes"===e?s.push({type:"attributes",idx:parseInt(n,10)}):"block-ref"===e?s.push({type:"ref",idx:parseInt(n,10)}):i.setAttribute(l[t].name,n)}const c={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{c.firstChild=nt(t.firstChild,c,c),i.appendChild(c.firstChild.el);let e=t.firstChild,n=c.firstChild;for(;e=e.nextSibling;)n.nextSibling=nt(e,n,c),i.appendChild(n.nextSibling.el),n=n.nextSibling}}return c.info.length&&ot(c),c}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 Error("boom")}function ot(t){t.isRef=!0;do{t.refN++}while(t=t.parent)}function rt(t){let e=t.parent;for(;e&&e.nextSibling===t;)t=e,e=e.parent;return e}function it(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:st,updateData:st});break;case"child":n.isOnlyChild?t.children[n.idx]={parentRefIdx:n.refIdx,isOnlyChild:!0}:t.children[n.idx]={parentRefIdx:rt(e).refIdx,afterRefIdx:n.refIdx};break;case"attribute":{const e=n.refIdx;let o,r;if(k(n.tag,n.name)){const t=x(n.name);r=t,o=t}else"class"===n.name?(r=v,o=w):(r=m(n.name),o=r);t.locations.push({idx:n.idx,refIdx:e,setData:r,updateData:o});break}case"attributes":t.locations.push({idx:n.idx,refIdx:n.refIdx,setData:b,updateData:g});break;case"handler":{const{setup:e,update:o}=$(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:lt(o,t.refList),updateData:J})}}(e,t),n++}if(s){const r=n+i;e.collectors.push({idx:r,prevIdx:o,getVal:Z}),it(t.nextSibling,e,r)}i&&(e.collectors.push({idx:n,prevIdx:o,getVal:Y}),it(t.firstChild,e,n))}return e}function st(t){X.call(this,H(t))}function lt(t,e){return function(n){e[e.length-1][t]=()=>n(this)}}const at=Node.prototype,ct=at.insertBefore,ht=at.appendChild,ut=at.removeChild,dt=((t,e)=>Object.getOwnPropertyDescriptor(t,e))(at,"textContent").set;class ft{constructor(t){this.children=t}mount(t,e){const n=this.children,o=document.createTextNode("");this.anchor=o,ct.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}moveBefore(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].moveBefore(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,moveBefore: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 dt.call(f,""),void ht.call(f,u)}let p=0,m=0,b=n[0],g=o[0],y=n.length-1,v=o.length-1,w=n[y],x=o[v],k=void 0;for(;p<=y&&m<=v;){if(null===b){b=n[++p];continue}if(null===w){w=n[--y];continue}let t=b.key,r=g.key;if(t===r){s.call(b,g,e),o[m]=b,b=n[++p],g=o[++m];continue}let l=w.key,a=x.key;if(l===a){s.call(w,x,e),o[v]=w,w=n[--y],x=o[--v];continue}if(t===a){s.call(b,x,e),o[v]=b;const t=o[v+1];c.call(b,t,u),b=n[++p],x=o[--v];continue}if(l===r){s.call(w,g,e),o[m]=w;const t=n[p];c.call(w,t,u),w=n[--y],g=o[++m];continue}k=k||mt(n,p,y);let d=k[r];if(void 0===d)i.call(g,f,h.call(b)||null);else{const t=n[d];c.call(t,b,null),s.call(t,g,e),o[m]=t,n[d]=null}g=o[++m]}if(p<=y||m<=v)if(p>y){const t=o[v+1],e=t?h.call(t)||null:u;for(let t=m;t<=v;t++)i.call(o[t],f,e)}else for(let t=p;t<=y;t++){let o=n[t];o&&(e&&a.call(o),l.call(o))}}beforeRemove(){const t=this.children,e=t.length;if(e){const n=t[0].beforeRemove;for(let o=0;o<e;o++)n.call(t[o])}}remove(){const{parentEl:t,anchor:e}=this;if(this.isOnlyChild)dt.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])}ut.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 pt(t){return new ft(t)}function mt(t,e,n){let o={};for(let r=e;r<=n;r++)o[t[r].key]=r;return o}const bt=Node.prototype,gt=bt.insertBefore,yt=bt.removeChild;class vt{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)gt.call(t,n,e);if(!this.content.length){const n=document.createTextNode("");this.content.push(n),gt.call(t,n,e)}}moveBefore(t,e){const n=t?t.content[0]:e,o=this.parentEl;for(let t of this.content)gt.call(o,t,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)gt.call(n,t,o);if(!i.length){const t=document.createTextNode("");i.push(t),gt.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)yt.call(t,e)}firstNode(){return this.content[0]}toString(){return this.html}}function wt(t){return new vt(t)}function xt(t,e,n=null){t.mount(e,n)}const kt=new WeakMap,$t=new WeakMap;function Nt(t,e){if(!t)return!1;const n=t.fiber;n&&kt.set(n,e);const o=$t.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 Nt(t.parent,e)}function Et(t){const e=t.error,n="node"in t?t.node:t.fiber.node,o="fiber"in t?t.fiber:n.fiber;let r=o;do{r.node.fiber=r,r=r.parent}while(r);kt.set(o.root,e);if(!Nt(n,e)){console.warn("[Owl] Unhandled error. Destroying the root component");try{n.app.destroy()}catch(t){console.error(t)}}}function At(){throw new Error("Attempted to render cancelled fiber")}function Tt(t){let e=0;for(let n of t){let t=n.node;n.render=At,0===t.status&&(t.destroy(),delete t.parent.children[t.parentKey]),t.fiber=null,n.bdom?t.forceNextRender=!0:e++,e+=Tt(n.children)}return e}class _t{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){Et({node:t,error:e})}e.setCounter(e.counter-1)}}}class St extends _t{constructor(){super(...arguments),this.counter=1,this.willPatch=[],this.patched=[],this.mounted=[],this.locked=!1}complete(){const t=this.node;this.locked=!0;let e=void 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=e,e.appliedToDom)for(let t of e.node.mounted)t();let o=this.patched;for(;e=o.pop();)if(e=e,e.appliedToDom)for(let t of e.node.patched)t()}catch(t){this.locked=!1,Et({fiber:e||this,error:t})}}setCounter(t){this.counter=t,0===t&&this.node.app.scheduler.flush()}}class Ct extends St{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)xt(e.bdom,this.target);else{const t=this.target.childNodes[0];xt(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){Et({fiber:t,error:e})}}}const Dt=Symbol("Target"),Lt=Symbol("Skip"),Bt=Symbol("Key changes"),Ot=Object.prototype.toString,Rt=Object.prototype.hasOwnProperty,Pt=new Set(["Object","Array","Set","Map","WeakMap"]),It=new Set(["Set","Map","WeakMap"]);function jt(t){return Ot.call(t).slice(8,-1)}function Mt(t){return"object"==typeof t&&Pt.has(jt(t))}function Wt(t,e){return Mt(t)?Xt(t,e):t}function Ft(t){return t[Lt]=!0,t}function Vt(t){return t[Dt]||t}const zt=new WeakMap;function Kt(t,e,n){zt.get(t)||zt.set(t,new Map);const o=zt.get(t);o.get(e)||o.set(e,new Set),o.get(e).add(n),Ut.has(n)||Ut.set(n,new Set),Ut.get(n).add(t)}function Ht(t,e){const n=zt.get(t);if(!n)return;const o=n.get(e);if(o)for(const t of[...o])qt(t),t()}const Ut=new WeakMap;function qt(t){const e=Ut.get(t);if(e){for(const n of e){const e=zt.get(n);if(e)for(const n of e.values())n.delete(t)}e.clear()}}const Gt=new WeakMap;function Xt(t,e=(()=>{})){if(!Mt(t))throw new Error("Cannot make the given value reactive");if(Lt in t)return t;const n=t[Dt];if(n)return Xt(n,e);Gt.has(t)||Gt.set(t,new WeakMap);const o=Gt.get(t);if(!o.has(e)){const n=jt(t),r=It.has(n)?function(t,e,n){const o=ne[n](t,e);return Object.assign(Yt(e),{get:(t,n)=>n===Dt?t:Rt.call(o,n)?o[n]:(Kt(t,n,e),Wt(t[n],e))})}(t,e,n):Yt(e),i=new Proxy(t,r);o.set(e,i)}return o.get(e)}function Yt(t){return{get(e,n,o){if(n===Dt)return e;const r=Object.getOwnPropertyDescriptor(e,n);return!r||r.writable||r.configurable?(Kt(e,n,t),Wt(Reflect.get(e,n,o),t)):Reflect.get(e,n,o)},set(t,e,n,o){const r=!Rt.call(t,e),i=Reflect.get(t,e,o),s=Reflect.set(t,e,n,o);return r&&Ht(t,Bt),(i!==n||Array.isArray(t)&&"length"===e)&&Ht(t,e),s},deleteProperty(t,e){const n=Reflect.deleteProperty(t,e);return Ht(t,Bt),Ht(t,e),n},ownKeys:e=>(Kt(e,Bt,t),Reflect.ownKeys(e)),has:(e,n)=>(Kt(e,Bt,t),Reflect.has(e,n))}}function Zt(t,e,n){return o=>(o=Vt(o),Kt(e,o,n),Wt(e[t](o),n))}function Jt(t,e,n){return function*(){Kt(e,Bt,n);const o=e.keys();for(const r of e[t]()){const t=o.next().value;Kt(e,t,n),yield Wt(r,n)}}}function Qt(t,e){return function(n,o){Kt(t,Bt,e),t.forEach((function(r,i,s){Kt(t,i,e),n.call(o,Wt(r,e),Wt(i,e),Wt(s,e))}),o)}}function te(t,e,n){return(o,r)=>{o=Vt(o);const i=n.has(o),s=n[e](o),l=n[t](o,r);return i!==n.has(o)&&Ht(n,Bt),s!==r&&Ht(n,o),l}}function ee(t){return()=>{const e=[...t.keys()];t.clear(),Ht(t,Bt);for(const n of e)Ht(t,n)}}const ne={Set:(t,e)=>({has:Zt("has",t,e),add:te("add","has",t),delete:te("delete","has",t),keys:Jt("keys",t,e),values:Jt("values",t,e),entries:Jt("entries",t,e),[Symbol.iterator]:Jt(Symbol.iterator,t,e),forEach:Qt(t,e),clear:ee(t),get size(){return Kt(t,Bt,e),t.size}}),Map:(t,e)=>({has:Zt("has",t,e),get:Zt("get",t,e),set:te("set","get",t),delete:te("delete","has",t),keys:Jt("keys",t,e),values:Jt("values",t,e),entries:Jt("entries",t,e),[Symbol.iterator]:Jt(Symbol.iterator,t,e),forEach:Qt(t,e),clear:ee(t),get size(){return Kt(t,Bt,e),t.size}}),WeakMap:(t,e)=>({has:Zt("has",t,e),get:Zt("get",t,e),set:te("set","get",t),delete:te("delete","has",t)})};class oe extends EventTarget{trigger(t,e){this.dispatchEvent(new CustomEvent(t,{detail:e}))}}class re extends String{}let ie=null;function se(){if(!ie)throw new Error("No active component (a hook function should only be called in 'setup')");return ie}function le(t,e){for(let n in e)void 0===t[n]&&(t[n]=e[n])}const ae=new WeakMap;function ce(t){const e=se();let n=ae.get(e);return n||(n=function(t){let e=!1;return async()=>{await Promise.resolve(),e||(e=!0,Promise.resolve().then((()=>e=!1)),t())}}(e.render.bind(e,!1)),ae.set(e,n),e.willDestroy.push(qt.bind(null,n))),Xt(t,n)}class he{constructor(t,e,n,o,r){this.fiber=null,this.bdom=null,this.status=0,this.forceNextRender=!1,this.children=Object.create(null),this.refs={},this.willStart=[],this.willUpdateProps=[],this.willUnmount=[],this.mounted=[],this.willPatch=[],this.patched=[],this.willDestroy=[],ie=this,this.app=n,this.parent=o,this.props=e,this.parentKey=r,this.level=o?o.level+1:0;const i=t.defaultProps;e=Object.assign({},e),i&&le(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&&n[Dt]&&(e[t]=ce(n))}this.component=new t(e,s,this),this.renderFn=n.getTemplate(t.template).bind(this.component,this.component,this),this.component.setup(),ie=null}mountComponent(t,e){const n=new Ct(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 Et({node:this,error:t})}0===this.status&&this.fiber===t&&t.render()}async render(t){let e=this.fiber;if(e&&(e.root.locked||!0===e.bdom)&&(await Promise.resolve(),e=this.fiber),e){if(!e.bdom&&!kt.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-Tt(e.children)),t.locked=!1,e.children=[],e.childrenMap={},e.bdom=null,kt.has(e)&&(kt.delete(e),kt.delete(t),e.appliedToDom=!1),e}const n=new St(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(),2!==this.status&&(this.fiber!==n||!e&&n.parent||n.render())}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){Et({error:t,node:this})}this.status=2}async updateAndRender(t,e){const n=t;t=Object.assign({},t);const o=function(t,e){let n=t.fiber;return n&&(Tt(n.children),n.root=null),new _t(t,e)}(this,e);this.fiber=o;const r=this.component,i=r.constructor.defaultProps;i&&le(t,i),ie=this;for(const e in t){const n=t[e];n&&"object"==typeof n&&n[Dt]&&(t[e]=ce(n))}ie=null;const s=Promise.all(this.willUpdateProps.map((e=>e.call(r,t))));if(await s,o!==this.fiber)return;r.props=t,this.props=n,o.render();const l=e.root;this.willPatch.length&&l.willPatch.push(o),this.patched.length&&l.patched.push(o)}updateDom(){if(this.fiber)if(this.bdom===this.fiber.bdom)for(let t in this.children){this.children[t].updateDom()}else this.bdom.patch(this.fiber.bdom,!1),this.fiber.appliedToDom=!0,this.fiber=null}firstNode(){const t=this.bdom;return t?t.firstNode():void 0}mount(t,e){const n=this.fiber.bdom;this.bdom=n,n.mount(t,e),this.status=1,this.fiber.appliedToDom=!0,this.children=this.fiber.childrenMap,this.fiber=null}moveBefore(t,e){this.bdom.moveBefore(t?t.bdom:null,e)}patch(){this.fiber&&this.fiber.parent&&this._patch()}_patch(){let t=!1;for(let e in this.children){t=!0;break}const e=this.fiber;this.children=e.childrenMap,this.bdom.patch(e.bdom,t),e.appliedToDom=!0,this.fiber=null}beforeRemove(){this._destroy()}remove(){this.bdom.remove()}get name(){return this.component.constructor.name}get subscriptions(){const t=ae.get(this);return t?(e=t,[...Ut.get(e)||[]].map((t=>{const e=zt.get(t);return{target:t,keys:e?[...e.keys()]:[]}}))):[];var e}}const ue=Symbol("timeout");function de(t,e){const n=new Error(`The following error occurred in ${e}: `),o=new Error(e+"'s promise hasn't resolved after 3 seconds"),r=se();return(...i)=>{try{const s=t(...i);if(s instanceof Promise){if("onWillStart"===e||"onWillUpdateProps"===e){const t=r.fiber;Promise.race([s,new Promise((t=>setTimeout((()=>t(ue)),3e3)))]).then((e=>{e===ue&&r.fiber===t&&console.warn(o)}))}return s.catch((t=>{throw n.cause=t,t instanceof Error&&(n.message+=`"${t.message}"`),n}))}return s}catch(t){throw t instanceof Error&&(n.message+=`"${t.message}"`),n}}}function fe(t){const e=se(),n=e.app.dev?de:t=>t;e.mounted.push(n(t.bind(e.component),"onMounted"))}function pe(t){const e=se(),n=e.app.dev?de:t=>t;e.patched.push(n(t.bind(e.component),"onPatched"))}function me(t){const e=se(),n=e.app.dev?de:t=>t;e.willUnmount.unshift(n(t.bind(e.component),"onWillUnmount"))}class be{constructor(t,e,n){this.props=t,this.env=e,this.__owl__=n}setup(){}render(t=!1){this.__owl__.render(!0===t)}}be.template="";const ge=z("").constructor;class ye extends ge{constructor(t,e){super(""),this.target=null,this.selector=t,this.realBDom=e}mount(t,e){if(super.mount(t,e),this.target=document.querySelector(this.selector),!this.target){let t=this.el;for(;t&&t.parentElement instanceof HTMLElement;)t=t.parentElement;if(this.target=t&&t.querySelector(this.selector),!this.target)throw new Error("invalid portal target")}this.realBDom.mount(this.target,null)}beforeRemove(){this.realBDom.beforeRemove()}remove(){this.realBDom&&(super.remove(),this.realBDom.remove(),this.realBDom=null)}patch(t){super.patch(t),this.realBDom?this.realBDom.patch(t.realBDom,!0):(this.realBDom=t.realBDom,this.realBDom.mount(this.target,null))}}class ve extends be{setup(){const t=this.__owl__,e=t.renderFn;t.renderFn=()=>new ye(this.props.target,e()),me((()=>{t.bdom&&t.bdom.remove()}))}}ve.template="__portal__",ve.props={target:{type:String},slots:!0};const we=t=>Array.isArray(t),xe=t=>"object"!=typeof t,ke=t=>"object"==typeof t&&t&&"value"in t;function $e(t){return"object"==typeof t&&"optional"in t&&t.optional||!1}function Ne(t){return"*"===t||!0===t?"value":t.name.toLowerCase()}function Ee(t){return xe(t)?Ne(t):we(t)?t.map(Ee).join(" or "):ke(t)?String(t.value):"element"in t?`list of ${Ee({type:t.element,optional:!1})}s`:"shape"in t?"object":Ee(t.type||"*")}function Ae(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}]))));let o=[];for(let n in t)if(n in e){let r=Te(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&&!$e(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 ${Ee(r)})`;o.push(`'${n}' is missing${e}`)}}return o}function Te(t,e,n){if(void 0===e)return $e(n)?null:`'${t}' is undefined (should be a ${Ee(n)})`;if(xe(n))return function(t,e,n){if("function"==typeof n)if("object"==typeof e){if(!(e instanceof n))return`'${t}' is not a ${Ne(n)}`}else if(typeof e!==n.name.toLowerCase())return`'${t}' is not a ${Ne(n)}`;return null}(t,e,n);if(ke(n))return e===n.value?null:`'${t}' is not equal to '${n.value}'`;if(we(n)){return n.find((n=>!Te(t,e,n)))?null:`'${t}' is not a ${Ee(n)}`}let o=null;if("element"in n)o=function(t,e,n){if(!Array.isArray(e))return`'${t}' is not a list of ${Ee(n)}s`;for(let o=0;o<e.length;o++){const r=Te(`${t}[${o}]`,e[o],n);if(r)return r}return null}(t,e,n.element);else if("shape"in n&&!o)if("object"!=typeof e||Array.isArray(e))o=`'${t}' is not an object`;else{const r=Ae(e,n.shape);r.length&&(o=`'${t}' has not the correct shape (${r.join(", ")})`)}return"type"in n&&!o&&(o=Te(t,e,n.type)),"validate"in n&&!o&&(o=n.validate(e)?null:`'${t}' is not valid`),o}const _e=Object.create;function Se(t){const e=t.__owl__.component,n=_e(e);for(let e in t)n[e]=t[e];return n}const Ce=Symbol("isBoundary");class De{constructor(t,e,n,o){this.fn=t,this.ctx=Se(e),this.component=n,this.node=o}evaluate(){return this.fn.call(this.component,this.ctx,this.node)}toString(){return this.evaluate().toString()}}let Le=new WeakMap;const Be=WeakMap.prototype.get,Oe=WeakMap.prototype.set;function Re(t,e,n){const o="string"!=typeof t?t:n.constructor.components[t];if(!o)return;const r=o.props;if(!r)return void(n.__owl__.app.warnIfNoStaticProps&&console.warn(`Component '${o.name}' does not have a static props description`));const i=o.defaultProps;if(i){let t=t=>Array.isArray(r)?r.includes(t):t in r&&!("*"in r)&&!$e(r[t]);for(let e in i)if(t(e))throw new Error(`A default value cannot be defined for a mandatory prop (name: '${e}', component: ${o.name})`)}const s=Ae(e,r);if(s.length)throw new Error(`Invalid props for component '${o.name}': `+s.join(", "))}const Pe={withDefault:function(t,e){return null==t||!1===t?e:t},zero:Symbol("zero"),isBoundary:Ce,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=_e(h||{});u&&(d[u]=s);const f=c?c.call(h.__owl__.component,d,e,n):null;if(l){let s=void 0,a=void 0;return f?s=i?r(o,f):f:a=l.call(t.__owl__.component,t,e,n),O([s,a])}return f||z("")},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)throw new Error("Invalid loop expression");n=Object.keys(t),e=Object.values(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(Ce);){const e=t.__proto__;if(!e){t=o;break}t=e}t[e]=n},multiRefSetter:function(t,e){let n=0;return o=>{if(o&&(n++,n>1))throw new Error("Cannot have 2 elements with same ref name at the same time");(0===n||o)&&(t[e]=o)}},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:Re,LazyValue:De,safeOutput:function(t,e){if(void 0===t)return e?r("default",e):r("undefined",z(""));let n,o;switch(typeof t){case"object":t instanceof re?(n="string_safe",o=wt(t)):t instanceof De?(n="lazy_value",o=t.evaluate()):t instanceof String?(n="string_unsafe",o=z(t)):(n="block_safe",o=t);break;case"string":n="string_unsafe",o=z(t);break;default:n="string_unsafe",o=z(String(t))}return r(n,o)},bind:function(t,e){let n=t.__owl__.component,o=Be.call(Le,n);o||(o=new WeakMap,Oe.call(Le,n,o));let r=Be.call(o,e);return r||(r=e.bind(n),Oe.call(o,e,r)),r},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=$(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!==i;){if(n.contains(e))return o.call(this,t);n=n.nextSibling}}}}moveBefore(t,e){this.child.moveBefore(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:Ft},Ie={text:z,createBlock:tt,list:pt,multi:O,html:wt,toggler:r,comment:K};class je{constructor(t={}){this.rawTemplates=Object.create(Me),this.templates={},this.Portal=ve,this.dev=t.dev||!1,this.translateFn=t.translateFn,this.translatableAttributes=t.translatableAttributes,t.templates&&this.addTemplates(t.templates)}static registerTemplate(t,e){Me[t]=e}addTemplate(t,e){if(t in this.rawTemplates){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 Error(`Template ${t} already defined with different content`)}this.rawTemplates[t]=e}addTemplates(t){if(t){t=t instanceof Document?t:function(t){const e=(new DOMParser).parseFromString(t,"text/xml");if(e.getElementsByTagName("parsererror").length){let n="Invalid XML in template.";const o=e.getElementsByTagName("parsererror")[0].textContent;if(o){n+="\nThe parser has produced the following error message:\n"+o;const e=/\d+/g,r=e.exec(o);if(r){const 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 Error(n)}return e}(t);for(const e of t.querySelectorAll("[t-name]")){const t=e.getAttribute("t-name");this.addTemplate(t,e)}}}getTemplate(t){if(!(t in this.templates)){const e=this.rawTemplates[t];if(void 0===e){let e="";try{e=` (for component "${se().component.constructor.name}")`}catch{}throw new Error(`Missing template: "${t}"${e}`)}const n="function"==typeof e&&!(e instanceof Element)?e:this._compileTemplate(t,e),o=this.templates;this.templates[t]=function(e,n){return o[t].call(this,e,n)};const r=n(this,Ie,Pe);this.templates[t]=r}return this.templates[t]}_compileTemplate(t,e){throw new Error("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))}}const Me={};function We(...t){const e="__template__"+We.nextId++,n=String.raw(...t);return Me[e]=n,e}We.nextId=1,je.registerTemplate("__portal__",(function(t,e,n){let{callSlot:o}=n;return function(t,e,n=""){return o(t,e,n,"default",!1,null)}}));const Fe="true,false,NaN,null,undefined,debugger,console,window,in,instanceof,new,function,return,this,eval,void,Math,RegExp,Array,Object,Date".split(","),Ve=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"}),Ke="...,.,===,==,+,!==,!=,!,||,&&,>=,>,<=,<,?,-,*,/,%,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 Error("Invalid expression");e+=o}r++}if(t[r]!==n)throw new Error("Invalid expression");return e+=n,"`"===n?{type:"TEMPLATE_STRING",value:e,replace:t=>e.replace(/\$\{(.*?)\}/g,((e,n)=>"${"+t(n)+"}"))}:{type:"VALUE",value:e}},function(t){let e=t[0];if(e&&e.match(/[0-9]/)){let n=1;for(;t[n]&&t[n].match(/[0-9]|\./);)e+=t[n],n++;return{type:"VALUE",value:e}}return!1},function(t){for(let e of Ke)if(t.startsWith(e))return{type:"OPERATOR",value:e};return!1},function(t){let e=t[0];if(e&&e.match(/[a-zA-Z_\$]/)){let n=1;for(;t[n]&&t[n].match(/\w/);)e+=t[n],n++;return e in 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 ze))&&{type:ze[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 Error(`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);return n&&n[0].length===t.length?`(${e(t.slice(2,"{"===n[0][0]?-2:-1))})`:"`"+t.replace(Ze,(t=>"${"+e(t.slice(2,"{"===t[0]?-2:-1))+"}"))+"`"}function Qe(t){return Je(t,Ye)}const tn=document.implementation.createDocument(null,null,null),en=new Set(["stop","capture","prevent","self","synthetic"]);let nn={};function on(t=""){return nn[t]=(nn[t]||0)+1,t+nn[t]}class rn{constructor(t,e){this.dynamicTagName=null,this.isRoot=!1,this.hasDynamicChildren=!1,this.children=[],this.data=[],this.childNumber=0,this.parentVar="",this.id=rn.nextBlockId++,this.varName="b"+this.id,this.blockName="block"+this.id,this.target=t,this.type=e}insertData(t,e="d"){const n=on(e);return this.target.addLine(`let ${n} = ${t};`),this.data.push(n)-1}insert(t){this.currentDom?this.currentDom.appendChild(t):this.dom=t}generateExpr(t){if("block"===this.type){const t=this.children.length;let e=this.data.length?`[${this.data.join(", ")}]`:t?"[]":"";return t&&(e+=", ["+this.children.map((t=>t.varName)).join(", ")+"]"),this.dynamicTagName?`toggler(${this.dynamicTagName}, ${this.blockName}(${this.dynamicTagName})(${e}))`:`${this.blockName}(${e})`}return"list"===this.type?`list(c_block${this.id})`:t}asXmlString(){const t=tn.createElement("t");return t.appendChild(this.dom),t.innerHTML}}function sn(t,e){return Object.assign({block:null,index:0,forceNewBlock:!0,translate:t.translate,tKeyExpr:null,nameSpace:t.nameSpace,tModelSelectedExpr:t.tModelSelectedExpr},e)}rn.nextBlockId=1;class ln{constructor(t,e){this.indentLevel=0,this.loopLevel=0,this.code=[],this.hasRoot=!1,this.hasCache=!1,this.hasRef=!1,this.refInfo={},this.shouldProtectScope=!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=[];if(t.push(`function ${this.name}(ctx, node, key = "") {`),this.hasRef){t.push(" const refs = ctx.__owl__.refs;");for(let e in this.refInfo){const[n,o]=this.refInfo[e];t.push(` const ${n} = ${o};`)}}this.shouldProtectScope&&(t.push(" ctx = Object.create(ctx);"),t.push(" ctx[isBoundary] = 1")),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 ")}}const an=["label","title","placeholder","alt"],cn=/^(\s*)([\s\S]+?)(\s*)$/;class hn{constructor(t,e){if(this.blocks=[],this.nextBlockId=1,this.isDebug=!1,this.targets=[],this.target=new ln("template"),this.translatableAttributes=an,this.staticDefs=[],this.helpers=new Set,this.translateFn=e.translateFn||(t=>t),e.translatableAttributes){const t=new Set(an);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,rn.nextBlockId=1,nn={},this.compileAST(t,{block:null,index:0,forceNewBlock:!1,isLast:!0,translate:!0,tKeyExpr:null});let e=[" let { text, createBlock, list, multi, html, toggler, comment } = bdom;"];this.helpers.size&&e.push(`let { ${[...this.helpers].join(", ")} } = helpers;`),this.templateName&&e.push(`// Template name: "${this.templateName}"`);for(let{id:t,expr:n}of this.staticDefs)e.push(`const ${t} = ${n};`);if(this.blocks.length){e.push("");for(let t of this.blocks)if(t.dom){let n=t.asXmlString();n=n.replace(/`/g,"\\`"),t.dynamicTagName?(n=n.replace(/^<\w+/,`<\${tag || '${t.dom.nodeName}'}`),n=n.replace(/\w+>$/,`\${tag || '${t.dom.nodeName}'}>`),e.push(`let ${t.blockName} = tag => createBlock(\`${n}\`);`)):e.push(`let ${t.blockName} = createBlock(\`${n}\`);`)}}if(this.targets.length)for(let t of this.targets)e.push(""),e=e.concat(t.generateCode());e.push(""),e=e.concat("return "+this.target.generateCode());const n=e.join("\n ");if(this.isDebug){const t="[Owl Debug]\n"+n;console.log(t)}return n}compileInNewTarget(t,e,n,o){const r=on(t),i=this.target,s=new ln(r,o);return this.targets.push(s),this.target=s,this.compileAST(e,sn(n)),this.target=i,r}addLine(t,e){this.target.addLine(t,e)}define(t,e){this.addLine(`const ${t} = ${e};`)}insertAnchor(t){const e="block-child-"+t.children.length,n=tn.createElement(e);t.insert(n)}createBlock(t,e,n){const o=this.target.hasRoot,r=new rn(this.target,e);return o||n.preventRoot||(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);const r=n.tKeyExpr;if(e.parentVar){let t="key"+this.target.loopLevel;return r&&(t=`${r} + ${t}`),this.helpers.add("withKey"),void this.addLine(`${e.parentVar}[${n.index}] = withKey(${o}, ${t});`)}r&&(o=`toggler(${r}, ${o})`),e.isRoot&&!n.preventRoot?(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=on("v");o.set(t.varName,e),this.define(e,t.value)}t.value=o.get(t.varName)}return t.value})).join("")}compileAST(t,e){switch(t.type){case 1:this.compileComment(t,e);break;case 0:this.compileText(t,e);break;case 2:this.compileTDomNode(t,e);break;case 4:this.compileTEsc(t,e);break;case 8:this.compileTOut(t,e);break;case 5:this.compileTIf(t,e);break;case 9:this.compileTForeach(t,e);break;case 10:this.compileTKey(t,e);break;case 3:this.compileMulti(t,e);break;case 7:this.compileTCall(t,e);break;case 15:this.compileTCallBlock(t,e);break;case 6:this.compileTSet(t,e);break;case 11:this.compileComponent(t,e);break;case 12:this.compileDebug(t,e);break;case 13:this.compileLog(t,e);break;case 14:this.compileTSlot(t,e);break;case 16:this.compileTTranslation(t,e);break;case 17:this.compileTPortal(t,e)}}compileDebug(t,e){this.addLine("debugger;"),t.content&&this.compileAST(t.content,e)}compileLog(t,e){this.addLine(`console.log(${Ye(t.expr)});`),t.content&&this.compileAST(t.content,e)}compileComment(t,e){let{block:n,forceNewBlock:o}=e;if(!n||o)n=this.createBlock(n,"comment",e),this.insertBlock(`comment(\`${t.value}\`)`,n,{...e,forceNewBlock:o&&!n});else{const e=tn.createComment(t.value);n.insert(e)}}compileText(t,e){let{block:n,forceNewBlock:o}=e,r=t.value;if(r&&!1!==e.translate){const t=cn.exec(r);r=t[1]+this.translateFn(t[2])+t[3]}if(!n||o)n=this.createBlock(n,"text",e),this.insertBlock(`text(\`${r}\`)`,n,{...e,forceNewBlock:o&&!n});else{const e=0===t.type?tn.createTextNode:tn.createComment;n.insert(e.call(tn,r))}}generateHandlerCode(t,e){const n=t.split(".").slice(1).map((t=>{if(!en.has(t))throw new Error(`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=on("tag");this.define(e,Ye(t.dynamicTag)),n.dynamicTagName=e}const s={},l=t.ns||e.nameSpace;l&&r&&(s["block-ns"]=l);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")){r=Ye(t.attrs[o]);const e=n.insertData(r,"attr");"t-att"===o?s["block-attributes"]=String(e):(i=o.slice(6),s["block-attribute-"+e]=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"}}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.target.hasRef=!0;if(Ze.test(t.ref)){const e=Je(t.ref,(t=>this.captureExpression(t,!0))),o=n.insertData(`(el) => refs[${e}] = el`,"ref");s["block-ref"]=String(o)}else{let e=t.ref;if(e in this.target.refInfo){this.helpers.add("multiRefSetter");const t=this.target.refInfo[e],o=n.data.push(t[0])-1;s["block-ref"]=String(o),t[1]=`multiRefSetter(refs, \`${e}\`)`}else{let t=on("ref");this.target.refInfo[e]=[t,`(el) => refs[\`${e}\`] = el`];const o=n.data.push(t)-1;s["block-ref"]=String(o)}}}let a;if(t.model){const{hasDynamicChildren:e,baseExpr:o,expr:r,eventType:i,shouldNumberize:l,shouldTrim:c,targetAttr:h,specialInitTargetAttr:u}=t.model,d=Ye(o),f=on("bExpr");this.define(f,d);const p=Ye(r),m=on("expr");this.define(m,p);const b=`${f}[${m}]`;let g;if(u)g=n.insertData(`${b} === '${s[h]}'`,"attr"),s["block-attribute-"+g]=u;else if(e){a=""+on("bValue"),this.define(a,b)}else g=n.insertData(""+b,"attr"),s["block-attribute-"+g]=h;this.helpers.add("toNumber");let y="ev.target."+h;y=c?y+".trim()":y,y=l?`toNumber(${y})`:y;const v=`[(ev) => { ${b} = ${y}; }]`;g=n.insertData(v,"hdlr"),s["block-handler-"+g]=i}const c=tn.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=sn(e,{block:n,index:n.childNumber,forceNewBlock:!1,isLast:e.isLast&&o===r.length-1,tKeyExpr:e.tKeyExpr,nameSpace:l,tModelSelectedExpr:a});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))};`,i)}}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=tn.createElement("block-text-"+t);o.insert(e)}}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=rn.nextBlockId;const r=sn(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)})`;this.insertBlock(n,o,e)}compileTIf(t,e,n){let{block:o,forceNewBlock:r,index:i}=e,s=i;const l=this.target.code.length,a=!o||"multi"!==o.type&&r;o&&(o.hasDynamicChildren=!0),(!o||"multi"!==o.type&&r)&&(o=this.createBlock(o,"multi",e)),this.addLine(`if (${Ye(t.condition)}) {`),this.target.indentLevel++,this.insertAnchor(o);const c=sn(e,{block:o,index:s});if(this.compileAST(t.content,c),this.target.indentLevel--,t.tElif)for(let n of t.tElif){this.addLine(`} else if (${Ye(n.condition)}) {`),this.target.indentLevel++,this.insertAnchor(o);const t=sn(e,{block:o,index:s});this.compileAST(n.content,t),this.target.indentLevel--}if(t.tElse){this.addLine("} else {"),this.target.indentLevel++,this.insertAnchor(o);const n=sn(e,{block:o,index:s});this.compileAST(t.tElse,n),this.target.indentLevel--}if(this.addLine("}"),a){if(o.children.length){const t=this.target.code,e=o.children.slice();let n=e.shift();for(let o=l;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))};`,l)}const t=o.children.map((t=>t.varName)).join(", ");this.insertBlock(`multi([${t}])`,o,e)}}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}\`] = ${r}[${o}];`),t.hasNoFirst||this.addLine(`ctx[\`${t.elem}_first\`] = ${o} === 0;`),t.hasNoLast||this.addLine(`ctx[\`${t.elem}_last\`] = ${o} === ${r}.length - 1;`),t.hasNoIndex||this.addLine(`ctx[\`${t.elem}_index\`] = ${o};`),t.hasNoValue||this.addLine(`ctx[\`${t.elem}_value\`] = ${i}[${o}];`),this.define("key"+this.target.loopLevel,t.key?Ye(t.key):o),this.dev&&(this.addLine(`if (keys${n.id}.has(key${this.target.loopLevel})) { throw new Error(\`Got duplicate key in t-foreach: \${key${this.target.loopLevel}}\`)}`),this.addLine(`keys${n.id}.add(key${this.target.loopLevel});`)),t.memo&&(this.target.hasCache=!0,a=on(),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=sn(e,{block:n,index:o});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)}compileTKey(t,e){const n=on("tKey_");this.define(n,Ye(t.expr)),e=sn(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){if(t.content.filter((t=>6!==t.type)).length<=1){for(let n of t.content)this.compileAST(n,e);return}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=sn(e,{block:n,index:s,forceNewBlock:!l,preventRoot:e.preventRoot,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))};`,i)}const t=n.children.map((t=>t.varName)).join(", ");this.insertBlock(`multi([${t}])`,n,e)}}compileTCall(t,e){let{block:n,forceNewBlock:o}=e,r=e.ctxVar||"ctx";if(t.context&&(r=on("ctx"),this.addLine(`let ${r} = ${Ye(t.context)};`)),t.body){this.addLine(`${r} = Object.create(${r});`),this.addLine(r+"[isBoundary] = 1;"),this.helpers.add("isBoundary");const n=rn.nextBlockId,o=sn(e,{preventRoot:!0,ctxVar:r});this.compileAST({type:3,content:t.body},o),n!==rn.nextBlockId&&(this.helpers.add("zero"),this.addLine(`${r}[zero] = b${n};`))}const i=Ze.test(t.name),s=i?Qe(t.name):"`"+t.name+"`";n&&(o||this.insertAnchor(n));const l=`key + \`${this.generateComponentKey()}\``;if(i){const t=on("template");this.staticDefs.find((t=>"call"===t.id))||this.staticDefs.push({id:"call",expr:"app.callTemplate.bind(app)"}),this.define(t,s),n=this.createBlock(n,"multi",e),this.insertBlock(`call(this, ${t}, ${r}, node, ${l})`,n,{...e,forceNewBlock:!n})}else{const t=on("callTemplate_");this.staticDefs.push({id:t,expr:`app.getTemplate(${s})`}),n=this.createBlock(n,"multi",e),this.insertBlock(`${t}.call(this, ${r}, node, ${l})`,n,{...e,forceNewBlock:!n})}t.body&&!e.isLast&&this.addLine(`${r} = ${r}.__proto__;`)}compileTCallBlock(t,e){let{block:n,forceNewBlock:o}=e;n&&(o||this.insertAnchor(n)),n=this.createBlock(n,"multi",e),this.insertBlock(Ye(t.name),n,{...e,forceNewBlock:!n})}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)`;r=t.value?r?`withDefault(${n}, ${r})`:n:r,this.addLine(`ctx[\`${t.name}\`] = ${r};`)}else{let o;o=t.defaultValue?t.value?`withDefault(${n}, \`${t.defaultValue}\`)`:`\`${t.defaultValue}\``:n,this.helpers.add("setContextValue"),this.addLine(`setContextValue(${e.ctxVar||"ctx"}, "${t.name}", ${o});`)}}generateComponentKey(){const t=[on("__")];for(let e=0;e<this.target.loopLevel;e++)t.push(`\${key${e+1}}`);return t.join("__")}formatProp(t,e){if(e=this.captureExpression(e),t.includes(".")){let[n,o]=t.split(".");if("bind"!==o)throw new Error("Invalid prop suffix");this.helpers.add("bind"),t=n,e=`bind(ctx, ${e||void 0})`}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=on("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}, __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=on("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=on("Comp"),this.define(c,Ye(t.name))):c=`\`${t.name}\``,this.dev&&this.addLine(`helpers.validateProps(${c}, ${s}, ctx);`),n&&(!1===e.forceNewBlock||e.tKeyExpr)&&this.insertAnchor(n);let h=`key + \`${a}\``;e.tKeyExpr&&(h=`${e.tKeyExpr} + ${h}`);let u=on("comp");this.staticDefs.push({id:u,expr:`app.createComponent(${t.isDynamic?null:c}, ${!t.isDynamic}, ${!!t.slots}, ${!!t.dynamicProps}, ${!t.props&&!t.dynamicProps})`});let d=`${u}(${l}, ${h}, node, this, ${t.isDynamic?c:null})`;t.isDynamic&&(d=`toggler(${c}, ${d})`),t.on&&(d=this.wrapWithEventCatcher(d,t.on)),n=this.createBlock(n,"multi",e),this.insertBlock(d,n,e)}wrapWithEventCatcher(t,e){this.helpers.add("createCatcher");let n=on("catcher"),o={},r=[];for(let t in e){let n=on("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;t.name.match(Ze)?(i=!0,o=Qe(t.name)):o="'"+t.name+"'";const s=t.attrs?t.attrs["t-props"]:null;t.attrs&&delete t.attrs["t-props"];const l=t.attrs?this.formatPropObject(t.attrs):[],a=this.getPropString(l,s);if(t.defaultContent){n=`callSlot(ctx, node, key, ${o}, ${i}, ${a}, ${this.compileInNewTarget("defaultContent",t.defaultContent,e)})`}else if(i){let t=on("slot");this.define(t,o),n=`toggler(${t}, callSlot(ctx, node, key, ${t}, ${i}, ${a}))`}else n=`callSlot(ctx, node, key, ${o}, ${i}, ${a})`;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})}compileTTranslation(t,e){t.content&&this.compileAST(t.content,Object.assign({},e,{translate:!1}))}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=on("ctx"),this.helpers.add("capture"),this.define(i,"capture(ctx)"));let s=on("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}, __ctx: ${i}}}}, key + \`${r}\`, node, ctx, Portal)`;n&&this.insertAnchor(n),n=this.createBlock(n,"multi",e),this.insertBlock(l,n,{...e,forceNewBlock:!1})}}const un=new WeakMap;function dn(t){if("string"==typeof t){return fn(function(t){const e=(new DOMParser).parseFromString(t,"text/xml");if(e.getElementsByTagName("parsererror").length){let n="Invalid XML in template.";const o=e.getElementsByTagName("parsererror")[0].textContent;if(o){n+="\nThe parser has produced the following error message:\n"+o;const e=/\d+/g,r=e.exec(o);if(r){const 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 Error(n)}return e}(`<t>${t}</t>`).firstChild)}let e=un.get(t);return e||(e=fn(t.cloneNode(!0)),un.set(t,e)),e}function fn(t){var e;(function(t){let e=t.querySelectorAll("[t-elif], [t-else]");for(let t=0,n=e.length;t<n;t++){let n=e[t],o=n.previousElementSibling,r=t=>o.getAttribute(t),i=t=>+!!n.getAttribute(t);if(!o||!r("t-if")&&!r("t-elif"))throw new Error("t-elif and t-else directives must be preceded by a t-if or t-elif directive");{if(r("t-foreach"))throw new Error("t-if cannot stay at the same level as t-foreach when using t-elif or t-else");if(["t-if","t-elif","t-else"].map(i).reduce((function(t,e){return t+e}))>1)throw new Error("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 Error("text is not allowed between branching directives");t.remove()}}}})(e=t),function(t){const e=[...t.querySelectorAll("[t-esc]")].filter((t=>t.tagName[0]===t.tagName[0].toUpperCase()||t.hasAttribute("t-component")));for(const t of e){if(t.childNodes.length)throw new Error("Cannot have t-esc on a component that already has content");const e=t.getAttribute("t-esc");t.removeAttribute("t-esc");const n=t.ownerDocument.createElement("t");null!=e&&n.setAttribute("t-esc",e),t.appendChild(n)}}(e);return pn(t,{inPreTag:!1,inSVG:!1})||{type:0,value:""}}function pn(t,e){return t instanceof Element?function(t,e){if(t.hasAttribute("t-debug"))return t.removeAttribute("t-debug"),{type:12,content:pn(t,e)};if(t.hasAttribute("t-log")){const n=t.getAttribute("t-log");return t.removeAttribute("t-log"),{type:13,expr:n,content:pn(t,e)}}return null}(t,e)||function(t,e){if(!t.hasAttribute("t-foreach"))return null;const n=t.outerHTML,o=t.getAttribute("t-foreach");t.removeAttribute("t-foreach");const r=t.getAttribute("t-as")||"";t.removeAttribute("t-as");const i=t.getAttribute("t-key");if(!i)throw new Error(`"Directive t-foreach should always be used with a t-key!" (expression: t-foreach="${o}" t-as="${r}")`);t.removeAttribute("t-key");const s=t.getAttribute("t-memo")||"";t.removeAttribute("t-memo");const l=pn(t,e);if(!l)return null;const a=!n.includes("t-call"),c=a&&!n.includes(r+"_first"),h=a&&!n.includes(r+"_last"),u=a&&!n.includes(r+"_index"),d=a&&!n.includes(r+"_value");return{type:9,collection:o,elem:r,body:l,memo:s,key:i,hasNoFirst:c,hasNoLast:h,hasNoIndex:u,hasNoValue:d}}(t,e)||function(t,e){if(!t.hasAttribute("t-if"))return null;const n=t.getAttribute("t-if");t.removeAttribute("t-if");const o=pn(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=pn(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=pn(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=pn(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=pn(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=xn(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;return{type:15,name:t.getAttribute("t-call-block")}}(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=pn(t,e);if(!i)return o;if(2===i.type)return{...i,ref:r,content:[o]};if(11===i.type)throw new Error("t-esc is not supported on Component nodes");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=pn(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:pn(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){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=pn(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){let n=t.tagName;const o=n[0];let r=t.hasAttribute("t-component");if(r&&"t"!==n)throw new Error(`Directive 't-component' can only be used on <t> nodes (used on a <${n}>)`);if(o!==o.toUpperCase()&&!r)return null;r&&(n=t.getAttribute("t-component"),t.removeAttribute("t-component"));const i=t.getAttribute("t-props");t.removeAttribute("t-props");const s=t.getAttribute("t-slot-scope");t.removeAttribute("t-slot-scope");let l=null,a=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 Error(t||"unsupported directive on Component: "+e)}l=l||{},l[e.slice(5)]=n}else a=a||{},a[e]=n}let c=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 Error(`Directive 't-set-slot' can only be used on <t> nodes (used on a <${t.tagName}>)`);const o=t.getAttribute("t-set-slot");let r=t.parentElement,i=!1;for(;r!==n;){if(r.hasAttribute("t-component")||r.tagName[0]===r.tagName[0].toUpperCase()){i=!0;break}r=r.parentElement}if(i)continue;t.removeAttribute("t-set-slot"),t.remove();const s=pn(t,e);let l=null,a=null,h=null;for(let e of t.getAttributeNames()){const n=t.getAttribute(e);"t-slot-scope"!==e?e.startsWith("t-on-")?(l=l||{},l[e.slice(5)]=n):(a=a||{},a[e]=n):h=n}c=c||{},c[o]={content:s,on:l,attrs:a,scope:h}}const r=kn(n,e);r&&(c=c||{},c.default={content:r,on:l,attrs:null,scope:s})}return{type:11,name:n,isDynamic:r,dynamicProps:i,props:a,slots:c,on:l}}(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 Error(`Invalid tag name: '${n}'`);e=Object.assign({},e),"pre"===n&&(e.inPreTag=!0);const r=vn.has(n)&&!e.inSVG;e.inSVG=e.inSVG||r;const i=r?"http://www.w3.org/2000/svg":null,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 r=t.getAttribute(o);if(o.startsWith("t-on")){if("t-on"===o)throw new Error("Missing event name with t-on directive");c=c||{},c[o.slice(5)]=r}else if(o.startsWith("t-model")){if(!["input","select","textarea"].includes(n))throw new Error("The t-model directive only works with <input>, <textarea> and <select>");let i,s;if(gn.test(r)){const t=r.lastIndexOf(".");i=r.slice(0,t),s=`'${r.slice(t+1)}'`}else{if(!yn.test(r))throw new Error(`Invalid t-model expression: "${r}" (it should be assignable)`);{const t=r.lastIndexOf("[");i=r.slice(0,t),s=r.slice(t+1,-1)}}const l=t.getAttribute("type"),a="input"===n,c="select"===n,u="textarea"===n,d=a&&"checkbox"===l,f=a&&"radio"===l,p=a&&!d&&!f,m=o.includes(".lazy"),b=o.includes(".number");h={baseExpr:i,expr:s,targetAttr:d?"checked":"value",specialInitTargetAttr:f?"checked":null,eventType:f?"click":c||m?"change":"input",hasDynamicChildren:!1,shouldTrim:o.includes(".trim")&&(p||u),shouldNumberize:b&&(p||u)},c&&((e=Object.assign({},e)).tModelInfo=h)}else{if(o.startsWith("block-"))throw new Error(`Invalid attribute: '${o}'`);if("t-name"!==o){if(o.startsWith("t-")&&!o.startsWith("t-att"))throw new Error(`Unknown QWeb directive: '${o}'`);const t=e.tModelInfo;t&&["t-att-value","t-attf-value"].includes(o)&&(t.hasDynamicChildren=!0),a=a||{},a[o]=r}}}const u=xn(t,e);return{type:2,tag:n,dynamicTag:o,attrs:a,on:c,ref:s,content:u,model:h,ns:i}}(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=xn(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||"";if(!e.inPreTag){if(mn.test(n)&&!n.trim())return null;n=n.replace(bn," ")}return{type:0,value:n}}if(t.nodeType===Node.COMMENT_NODE)return{type:1,value:t.textContent||""};return null}(t,e)}const mn=/[\r\n]/,bn=/\s+/g;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 xn(t,e){const n=[];for(let o of t.childNodes){const t=pn(o,e);t&&(3===t.type?n.push(...t.content):n.push(t))}return n}function kn(t,e){const n=xn(t,e);switch(n.length){case 0:return null;case 1:return n[0];default:return{type:3,content:n}}}class $n{constructor(){this.tasks=new Set,this.frame=0,this.delayedRenders=[],this.requestAnimationFrame=$n.requestAnimationFrame}addFiber(t){this.tasks.add(t.root)}flush(){if(this.delayedRenders.length){let t=this.delayedRenders;this.delayedRenders=[];for(let e of t)e.root&&2!==e.node.status&&e.node.fiber===e&&e.render()}0===this.frame&&(this.frame=this.requestAnimationFrame((()=>{this.frame=0,this.tasks.forEach((t=>this.processFiber(t)));for(let t of this.tasks)2===t.node.status&&this.tasks.delete(t)})))}processFiber(t){if(t.root!==t)return void this.tasks.delete(t);const e=kt.has(t);e&&0!==t.counter?this.tasks.delete(t):2!==t.node.status?0===t.counter&&(e||t.complete(),this.tasks.delete(t)):this.tasks.delete(t)}}$n.requestAnimationFrame=window.requestAnimationFrame.bind(window);let Nn=!1;class En extends je{constructor(t,e={}){super(e),this.scheduler=new $n,this.root=null,this.Root=t,e.test&&(this.dev=!0),this.warnIfNoStaticProps=e.warnIfNoStaticProps||!1,!this.dev||e.test||Nn||(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.`),Nn=!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){En.validateTarget(t),this.dev&&Re(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 he(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=$t.get(t);r||(r=[],$t.set(t,r)),r.unshift((t=>{throw o?console.error(t):n(t),t}))}));return t.mountComponent(e,n),o}destroy(){this.root&&(this.scheduler.flush(),this.root.destroy())}createComponent(t,e,n,o,r){const i=!e;const s=n?(t,e)=>!0:r?(t,e)=>!1:function(t,e){for(let n in t)if(t[n]!==e[n])return!0;return o&&Object.keys(t).length!==Object.keys(e).length},l=he.prototype.updateAndRender,a=he.prototype.initiateRender;return(n,o,r,c,h)=>{let u=r.children,d=u[o];i&&d&&d.component.constructor!==h&&(d=void 0);const f=r.fiber;if(d)(s(d.props,n)||f.deep||d.forceNextRender)&&(d.forceNextRender=!1,l.call(d,n,f));else{if(e){if(!(h=c.constructor.components[t]))throw new Error(`Cannot find the definition of component "${t}"`);if(!(h.prototype instanceof be))throw new Error(`"${t}" is not a Component. It must inherit from the Component class`)}d=new he(h,n,this,r,o),u[o]=d,a.call(d,new _t(d,f))}return f.childrenMap[o]=d,d}}}function An(t,e){const n=Object.create(t),o=Object.getOwnPropertyDescriptors(e);return Object.freeze(Object.defineProperties(n,o))}function Tn(t){const e=se();e.childEnv=An(e.childEnv,t)}En.validateTarget=function(t){if(!(t instanceof HTMLElement))throw new Error("Cannot mount component: the target is not a valid DOM element");if(!document.body.contains(t))throw new Error("Cannot mount a component on a detached dom node")},n.shouldNormalizeDom=!1,n.mainEventHandler=(t,n,o)=>{const{data:r,modifiers:i}=e(t);t=r;let s=!1;if(i.length){let t=!1;const e=n.target===o;for(const o of i)switch(o){case"self":if(t=!0,e)continue;return s;case"prevent":(t&&e||!t)&&n.preventDefault();continue;case"stop":(t&&e||!t)&&n.stopPropagation(),s=!0;continue}}if(Object.hasOwnProperty.call(t,0)){const e=t[0];if("function"!=typeof e)throw new Error(`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 s};const _n={config:n,mount:xt,patch:function(t,e,n=!1){t.patch(e,n)},remove:function(t,e=!1){e&&t.beforeRemove(),t.remove()},list:pt,multi:O,text:z,toggler:r,createBlock:tt,html:wt,comment:K},Sn={};je.prototype._compileTemplate=function(t,e){return function(t,e={}){const n=dn(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 hn(n,{...e,hasSafeContext:o}).generateCode();return new Function("app, bdom, helpers",r)}(e,{name:t,dev:this.dev,translateFn:this.translateFn,translatableAttributes:this.translatableAttributes})},t.App=En,t.Component=be,t.EventBus=oe,t.__info__=Sn,t.blockDom=_n,t.loadFile=async function(t){const e=await fetch(t);if(!e.ok)throw new Error("Error while fetching xml templates");return await e.text()},t.markRaw=Ft,t.markup=function(t){return new re(t)},t.mount=async function(t,e,n={}){return new En(t,n).mount(e,n)},t.onError=function(t){const e=se();let n=$t.get(e);n||(n=[],$t.set(e,n)),n.push(t.bind(e.component))},t.onMounted=fe,t.onPatched=pe,t.onRendered=function(t){const e=se(),n=e.renderFn,o=e.app.dev?de:t=>t;t=o(t.bind(e.component),"onRendered"),e.renderFn=()=>{const e=n();return t(),e}},t.onWillDestroy=function(t){const e=se(),n=e.app.dev?de:t=>t;e.willDestroy.push(n(t.bind(e.component),"onWillDestroy"))},t.onWillPatch=function(t){const e=se(),n=e.app.dev?de:t=>t;e.willPatch.unshift(n(t.bind(e.component),"onWillPatch"))},t.onWillRender=function(t){const e=se(),n=e.renderFn,o=e.app.dev?de:t=>t;t=o(t.bind(e.component),"onWillRender"),e.renderFn=()=>(t(),n())},t.onWillStart=function(t){const e=se(),n=e.app.dev?de:t=>t;e.willStart.push(n(t.bind(e.component),"onWillStart"))},t.onWillUnmount=me,t.onWillUpdateProps=function(t){const e=se(),n=e.app.dev?de:t=>t;e.willUpdateProps.push(n(t.bind(e.component),"onWillUpdateProps"))},t.reactive=Xt,t.status=function(t){switch(t.__owl__.status){case 0:return"new";case 1:return"mounted";case 2:return"destroyed"}},t.toRaw=Vt,t.useChildSubEnv=Tn,t.useComponent=function(){return ie.component},t.useEffect=function(t,e=(()=>[NaN])){let n,o;fe((()=>{o=e(),n=t(...o)})),pe((()=>{const r=e();r.some(((t,e)=>t!==o[e]))&&(o=r,n&&n(),n=t(...o))})),me((()=>n&&n()))},t.useEnv=function(){return se().component.env},t.useExternalListener=function(t,e,n,o){const r=se(),i=n.bind(r.component);fe((()=>t.addEventListener(e,i,o))),me((()=>t.removeEventListener(e,i,o)))},t.useRef=function(t){const e=se().refs;return{get el(){return e[t]||null}}},t.useState=ce,t.useSubEnv=function(t){const e=se();e.component.env=An(e.component.env,t),Tn(t)},t.validate=function(t,e){let n=Ae(t,e);if(n.length)throw new Error("Invalid object: "+n.join(", "))},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.version="2.0.0-beta-11",Sn.date="2022-06-28T13:28:26.775Z",Sn.hash="76c389a",Sn.url="https://github.com/odoo/owl"}(this.owl=this.owl||{});
|
|
@@ -18,12 +18,13 @@ declare function shallowEqual(l1: any[], l2: any[]): boolean;
|
|
|
18
18
|
declare class LazyValue {
|
|
19
19
|
fn: any;
|
|
20
20
|
ctx: any;
|
|
21
|
+
component: any;
|
|
21
22
|
node: any;
|
|
22
|
-
constructor(fn: any, ctx: any, node: any);
|
|
23
|
+
constructor(fn: any, ctx: any, component: any, node: any);
|
|
23
24
|
evaluate(): any;
|
|
24
25
|
toString(): any;
|
|
25
26
|
}
|
|
26
|
-
export declare function safeOutput(value: any): ReturnType<typeof toggler>;
|
|
27
|
+
export declare function safeOutput(value: any, defaultValue?: any): ReturnType<typeof toggler>;
|
|
27
28
|
declare function bind(ctx: any, fn: Function): Function;
|
|
28
29
|
declare type RefMap = {
|
|
29
30
|
[key: string]: HTMLElement | null;
|