@odoo/owl 3.0.0-alpha.41 → 3.0.0-alpha.42

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 CHANGED
@@ -417,18 +417,15 @@ function getTargetKeyAtom(target, key) {
417
417
  function onReadTargetKey(target, key, atom) {
418
418
  onReadAtom(atom ?? getTargetKeyAtom(target, key));
419
419
  }
420
- function onWriteTargetKey(target, key, atom) {
421
- if (!atom) {
422
- const keyToAtomItem = targetToKeysToAtomItem.get(target);
423
- if (!keyToAtomItem) {
424
- return;
425
- }
426
- if (!keyToAtomItem.has(key)) {
427
- return;
428
- }
429
- atom = keyToAtomItem.get(key);
420
+ function onWriteTargetKey(target, key) {
421
+ const keyToAtomItem = targetToKeysToAtomItem.get(target);
422
+ if (!keyToAtomItem) {
423
+ return;
424
+ }
425
+ if (!keyToAtomItem.has(key)) {
426
+ return;
430
427
  }
431
- onWriteAtom(atom);
428
+ onWriteAtom(keyToAtomItem.get(key));
432
429
  }
433
430
  var targets = /* @__PURE__ */ new WeakMap();
434
431
  var proxyCache = /* @__PURE__ */ new WeakMap();
@@ -485,18 +482,30 @@ function basicProxyHandler(atom) {
485
482
  const hadKey = objectHasOwnProperty.call(target, key);
486
483
  const originalValue = Reflect.get(target, key, receiver);
487
484
  const ret = Reflect.set(target, key, toRaw(value), receiver);
488
- if (!hadKey && objectHasOwnProperty.call(target, key)) {
489
- onWriteTargetKey(target, KEYCHANGES, atom);
490
- }
491
- if (originalValue !== Reflect.get(target, key, receiver) || key === "length" && Array.isArray(target)) {
492
- onWriteTargetKey(target, key, atom);
485
+ const keyCreated = !hadKey && objectHasOwnProperty.call(target, key);
486
+ const valueChanged = originalValue !== Reflect.get(target, key, receiver);
487
+ if (atom) {
488
+ if (keyCreated || valueChanged) {
489
+ onWriteAtom(atom);
490
+ }
491
+ } else {
492
+ if (keyCreated) {
493
+ onWriteTargetKey(target, KEYCHANGES);
494
+ }
495
+ if (valueChanged || key === "length" && Array.isArray(target)) {
496
+ onWriteTargetKey(target, key);
497
+ }
493
498
  }
494
499
  return ret;
495
500
  },
496
501
  deleteProperty(target, key) {
497
502
  const ret = Reflect.deleteProperty(target, key);
498
- onWriteTargetKey(target, KEYCHANGES, atom);
499
- onWriteTargetKey(target, key, atom);
503
+ if (atom) {
504
+ onWriteAtom(atom);
505
+ } else {
506
+ onWriteTargetKey(target, KEYCHANGES);
507
+ onWriteTargetKey(target, key);
508
+ }
500
509
  return ret;
501
510
  },
502
511
  ownKeys(target) {
@@ -549,10 +558,10 @@ function delegateAndNotify(setterName, getterName, target) {
549
558
  const ret = target[setterName](key, value);
550
559
  const hasKey = target.has(key);
551
560
  if (hadKey !== hasKey) {
552
- onWriteTargetKey(target, KEYCHANGES, null);
561
+ onWriteTargetKey(target, KEYCHANGES);
553
562
  }
554
563
  if (originalValue !== target[getterName](key)) {
555
- onWriteTargetKey(target, key, null);
564
+ onWriteTargetKey(target, key);
556
565
  }
557
566
  return ret;
558
567
  };
@@ -561,9 +570,9 @@ function makeClearNotifier(target) {
561
570
  return () => {
562
571
  const allKeys = [...target.keys()];
563
572
  target.clear();
564
- onWriteTargetKey(target, KEYCHANGES, null);
573
+ onWriteTargetKey(target, KEYCHANGES);
565
574
  for (const key of allKeys) {
566
- onWriteTargetKey(target, key, null);
575
+ onWriteTargetKey(target, key);
567
576
  }
568
577
  };
569
578
  }
@@ -1054,6 +1063,16 @@ function intersection(types22) {
1054
1063
  }
1055
1064
  });
1056
1065
  validate[intersectionSymbol] = types22;
1066
+ validate.toShape = () => {
1067
+ const shape = {};
1068
+ for (const member of types22) {
1069
+ const memberShape = typeof member.toShape === "function" ? member.toShape() : void 0;
1070
+ if (memberShape && !Array.isArray(memberShape)) {
1071
+ Object.assign(shape, memberShape);
1072
+ }
1073
+ }
1074
+ return shape;
1075
+ };
1057
1076
  return validate;
1058
1077
  }
1059
1078
  function literalType(literal) {
@@ -1129,6 +1148,7 @@ function objectType(schema = {}) {
1129
1148
  if (!Array.isArray(schema)) {
1130
1149
  validate[shapeSymbol] = schema;
1131
1150
  }
1151
+ validate.toShape = () => schema;
1132
1152
  return validate;
1133
1153
  }
1134
1154
  function strictObjectType(schema) {
@@ -1138,6 +1158,7 @@ function strictObjectType(schema) {
1138
1158
  if (!Array.isArray(schema)) {
1139
1159
  validate[shapeSymbol] = schema;
1140
1160
  }
1161
+ validate.toShape = () => schema;
1141
1162
  return validate;
1142
1163
  }
1143
1164
  function promiseType(type) {
@@ -1565,7 +1586,7 @@ function markup(valueOrStrings, ...placeholders) {
1565
1586
  }
1566
1587
 
1567
1588
  // ../owl-runtime/dist/owl-runtime.es.js
1568
- var version = "3.0.0-alpha.41";
1589
+ var version = "3.0.0-alpha.42";
1569
1590
  var fibersInError = /* @__PURE__ */ new WeakMap();
1570
1591
  var nodeErrorHandlers = /* @__PURE__ */ new WeakMap();
1571
1592
  function invokeErrorHandlers(node, error, finalize, markFibers) {
@@ -4312,6 +4333,13 @@ var App = class _App extends TemplateSet {
4312
4333
  let error = null;
4313
4334
  try {
4314
4335
  node = new ComponentNode(Root, props2, this, null, null);
4336
+ const subConfig = config3;
4337
+ if (subConfig.pluginManager) {
4338
+ node.pluginManager = subConfig.pluginManager;
4339
+ }
4340
+ if (subConfig.onError) {
4341
+ nodeErrorHandlers.set(node, [subConfig.onError]);
4342
+ }
4315
4343
  } catch (e) {
4316
4344
  error = e;
4317
4345
  reject(e);
@@ -4372,7 +4400,9 @@ var App = class _App extends TemplateSet {
4372
4400
  return promise;
4373
4401
  };
4374
4402
  const root = {
4375
- node,
4403
+ get prepared() {
4404
+ return fiber ? fiber.counter === 0 : false;
4405
+ },
4376
4406
  promise,
4377
4407
  prepare,
4378
4408
  mount: mount3,
@@ -4402,6 +4432,9 @@ var App = class _App extends TemplateSet {
4402
4432
  };
4403
4433
  async function mount2(C, target, config3 = {}) {
4404
4434
  const app = new App(config3);
4435
+ if (app.pluginManager.status < STATUS.MOUNTED) {
4436
+ await app.pluginManager.ready;
4437
+ }
4405
4438
  const root = app.createRoot(C, config3);
4406
4439
  return root.mount(target, config3);
4407
4440
  }
@@ -4638,9 +4671,18 @@ var Portal = class extends Component {
4638
4671
  if (!target) {
4639
4672
  return;
4640
4673
  }
4641
- root = app.createRoot(PortalContent, { props: { slots } });
4642
- root.node.pluginManager = portalNode.pluginManager;
4643
- nodeErrorHandlers.set(root.node, [forwardErrorToParent(portalNode)]);
4674
+ root = app.createRoot(PortalContent, {
4675
+ props: { slots },
4676
+ // Forward the plugin chain from this Portal (createRoot defaults
4677
+ // sub-roots to the app-level plugin manager) so `providePlugins`
4678
+ // contributions from ancestors are visible inside the portaled content.
4679
+ pluginManager: portalNode.pluginManager,
4680
+ // Route errors from the portaled subtree back through Portal's parent
4681
+ // chain so consumer `onError` handlers still catch them. Without this,
4682
+ // sub-root errors would propagate to app._handleError and tear down
4683
+ // the whole app.
4684
+ onError: forwardErrorToParent(portalNode)
4685
+ });
4644
4686
  root.mount(target);
4645
4687
  return tearDown;
4646
4688
  });
@@ -4675,13 +4717,18 @@ var Suspense = class extends Component {
4675
4717
  setup() {
4676
4718
  const suspenseNode = this.__owl__;
4677
4719
  const root = suspenseNode.app.createRoot(SuspenseHost, {
4678
- props: { slots: this.props.slots }
4720
+ props: { slots: this.props.slots },
4721
+ // Thread the plugin manager so `providePlugins` contributions from
4722
+ // ancestors are visible inside the default slot. (createRoot defaults
4723
+ // sub-roots to the app-level plugin manager; override here.) Destroy
4724
+ // cascade is handled explicitly below via `onWillDestroy`.
4725
+ pluginManager: suspenseNode.pluginManager,
4726
+ // Route errors from the sub-root back into Suspense's parent chain so
4727
+ // consumer `onError` handlers still catch descendant failures.
4728
+ onError: forwardErrorToParent(suspenseNode)
4679
4729
  });
4680
- root.node.pluginManager = suspenseNode.pluginManager;
4681
- nodeErrorHandlers.set(root.node, [forwardErrorToParent(suspenseNode)]);
4682
4730
  root.prepare().then(() => this.prepared.set(true));
4683
- const fiber = root.node.fiber;
4684
- if (fiber && fiber.counter === 0) {
4731
+ if (root.prepared) {
4685
4732
  this.prepared.set(true);
4686
4733
  }
4687
4734
  onMounted(() => this.mounted.set(true));
@@ -4724,8 +4771,8 @@ var blockDom = {
4724
4771
  };
4725
4772
  var __info__ = {
4726
4773
  version: App.version,
4727
- date: "2026-07-02T07:16:12.339Z",
4728
- hash: "84aea7c6",
4774
+ date: "2026-07-07T08:36:25.562Z",
4775
+ hash: "1d192035",
4729
4776
  url: "https://github.com/odoo/owl"
4730
4777
  };
4731
4778
 
package/dist/owl.es.js CHANGED
@@ -339,18 +339,15 @@ function getTargetKeyAtom(target, key) {
339
339
  function onReadTargetKey(target, key, atom) {
340
340
  onReadAtom(atom ?? getTargetKeyAtom(target, key));
341
341
  }
342
- function onWriteTargetKey(target, key, atom) {
343
- if (!atom) {
344
- const keyToAtomItem = targetToKeysToAtomItem.get(target);
345
- if (!keyToAtomItem) {
346
- return;
347
- }
348
- if (!keyToAtomItem.has(key)) {
349
- return;
350
- }
351
- atom = keyToAtomItem.get(key);
342
+ function onWriteTargetKey(target, key) {
343
+ const keyToAtomItem = targetToKeysToAtomItem.get(target);
344
+ if (!keyToAtomItem) {
345
+ return;
346
+ }
347
+ if (!keyToAtomItem.has(key)) {
348
+ return;
352
349
  }
353
- onWriteAtom(atom);
350
+ onWriteAtom(keyToAtomItem.get(key));
354
351
  }
355
352
  var targets = /* @__PURE__ */ new WeakMap();
356
353
  var proxyCache = /* @__PURE__ */ new WeakMap();
@@ -407,18 +404,30 @@ function basicProxyHandler(atom) {
407
404
  const hadKey = objectHasOwnProperty.call(target, key);
408
405
  const originalValue = Reflect.get(target, key, receiver);
409
406
  const ret = Reflect.set(target, key, toRaw(value), receiver);
410
- if (!hadKey && objectHasOwnProperty.call(target, key)) {
411
- onWriteTargetKey(target, KEYCHANGES, atom);
412
- }
413
- if (originalValue !== Reflect.get(target, key, receiver) || key === "length" && Array.isArray(target)) {
414
- onWriteTargetKey(target, key, atom);
407
+ const keyCreated = !hadKey && objectHasOwnProperty.call(target, key);
408
+ const valueChanged = originalValue !== Reflect.get(target, key, receiver);
409
+ if (atom) {
410
+ if (keyCreated || valueChanged) {
411
+ onWriteAtom(atom);
412
+ }
413
+ } else {
414
+ if (keyCreated) {
415
+ onWriteTargetKey(target, KEYCHANGES);
416
+ }
417
+ if (valueChanged || key === "length" && Array.isArray(target)) {
418
+ onWriteTargetKey(target, key);
419
+ }
415
420
  }
416
421
  return ret;
417
422
  },
418
423
  deleteProperty(target, key) {
419
424
  const ret = Reflect.deleteProperty(target, key);
420
- onWriteTargetKey(target, KEYCHANGES, atom);
421
- onWriteTargetKey(target, key, atom);
425
+ if (atom) {
426
+ onWriteAtom(atom);
427
+ } else {
428
+ onWriteTargetKey(target, KEYCHANGES);
429
+ onWriteTargetKey(target, key);
430
+ }
422
431
  return ret;
423
432
  },
424
433
  ownKeys(target) {
@@ -471,10 +480,10 @@ function delegateAndNotify(setterName, getterName, target) {
471
480
  const ret = target[setterName](key, value);
472
481
  const hasKey = target.has(key);
473
482
  if (hadKey !== hasKey) {
474
- onWriteTargetKey(target, KEYCHANGES, null);
483
+ onWriteTargetKey(target, KEYCHANGES);
475
484
  }
476
485
  if (originalValue !== target[getterName](key)) {
477
- onWriteTargetKey(target, key, null);
486
+ onWriteTargetKey(target, key);
478
487
  }
479
488
  return ret;
480
489
  };
@@ -483,9 +492,9 @@ function makeClearNotifier(target) {
483
492
  return () => {
484
493
  const allKeys = [...target.keys()];
485
494
  target.clear();
486
- onWriteTargetKey(target, KEYCHANGES, null);
495
+ onWriteTargetKey(target, KEYCHANGES);
487
496
  for (const key of allKeys) {
488
- onWriteTargetKey(target, key, null);
497
+ onWriteTargetKey(target, key);
489
498
  }
490
499
  };
491
500
  }
@@ -976,6 +985,16 @@ function intersection(types22) {
976
985
  }
977
986
  });
978
987
  validate[intersectionSymbol] = types22;
988
+ validate.toShape = () => {
989
+ const shape = {};
990
+ for (const member of types22) {
991
+ const memberShape = typeof member.toShape === "function" ? member.toShape() : void 0;
992
+ if (memberShape && !Array.isArray(memberShape)) {
993
+ Object.assign(shape, memberShape);
994
+ }
995
+ }
996
+ return shape;
997
+ };
979
998
  return validate;
980
999
  }
981
1000
  function literalType(literal) {
@@ -1051,6 +1070,7 @@ function objectType(schema = {}) {
1051
1070
  if (!Array.isArray(schema)) {
1052
1071
  validate[shapeSymbol] = schema;
1053
1072
  }
1073
+ validate.toShape = () => schema;
1054
1074
  return validate;
1055
1075
  }
1056
1076
  function strictObjectType(schema) {
@@ -1060,6 +1080,7 @@ function strictObjectType(schema) {
1060
1080
  if (!Array.isArray(schema)) {
1061
1081
  validate[shapeSymbol] = schema;
1062
1082
  }
1083
+ validate.toShape = () => schema;
1063
1084
  return validate;
1064
1085
  }
1065
1086
  function promiseType(type) {
@@ -1487,7 +1508,7 @@ function markup(valueOrStrings, ...placeholders) {
1487
1508
  }
1488
1509
 
1489
1510
  // ../owl-runtime/dist/owl-runtime.es.js
1490
- var version = "3.0.0-alpha.41";
1511
+ var version = "3.0.0-alpha.42";
1491
1512
  var fibersInError = /* @__PURE__ */ new WeakMap();
1492
1513
  var nodeErrorHandlers = /* @__PURE__ */ new WeakMap();
1493
1514
  function invokeErrorHandlers(node, error, finalize, markFibers) {
@@ -4234,6 +4255,13 @@ var App = class _App extends TemplateSet {
4234
4255
  let error = null;
4235
4256
  try {
4236
4257
  node = new ComponentNode(Root, props2, this, null, null);
4258
+ const subConfig = config3;
4259
+ if (subConfig.pluginManager) {
4260
+ node.pluginManager = subConfig.pluginManager;
4261
+ }
4262
+ if (subConfig.onError) {
4263
+ nodeErrorHandlers.set(node, [subConfig.onError]);
4264
+ }
4237
4265
  } catch (e) {
4238
4266
  error = e;
4239
4267
  reject(e);
@@ -4294,7 +4322,9 @@ var App = class _App extends TemplateSet {
4294
4322
  return promise;
4295
4323
  };
4296
4324
  const root = {
4297
- node,
4325
+ get prepared() {
4326
+ return fiber ? fiber.counter === 0 : false;
4327
+ },
4298
4328
  promise,
4299
4329
  prepare,
4300
4330
  mount: mount3,
@@ -4324,6 +4354,9 @@ var App = class _App extends TemplateSet {
4324
4354
  };
4325
4355
  async function mount2(C, target, config3 = {}) {
4326
4356
  const app = new App(config3);
4357
+ if (app.pluginManager.status < STATUS.MOUNTED) {
4358
+ await app.pluginManager.ready;
4359
+ }
4327
4360
  const root = app.createRoot(C, config3);
4328
4361
  return root.mount(target, config3);
4329
4362
  }
@@ -4560,9 +4593,18 @@ var Portal = class extends Component {
4560
4593
  if (!target) {
4561
4594
  return;
4562
4595
  }
4563
- root = app.createRoot(PortalContent, { props: { slots } });
4564
- root.node.pluginManager = portalNode.pluginManager;
4565
- nodeErrorHandlers.set(root.node, [forwardErrorToParent(portalNode)]);
4596
+ root = app.createRoot(PortalContent, {
4597
+ props: { slots },
4598
+ // Forward the plugin chain from this Portal (createRoot defaults
4599
+ // sub-roots to the app-level plugin manager) so `providePlugins`
4600
+ // contributions from ancestors are visible inside the portaled content.
4601
+ pluginManager: portalNode.pluginManager,
4602
+ // Route errors from the portaled subtree back through Portal's parent
4603
+ // chain so consumer `onError` handlers still catch them. Without this,
4604
+ // sub-root errors would propagate to app._handleError and tear down
4605
+ // the whole app.
4606
+ onError: forwardErrorToParent(portalNode)
4607
+ });
4566
4608
  root.mount(target);
4567
4609
  return tearDown;
4568
4610
  });
@@ -4597,13 +4639,18 @@ var Suspense = class extends Component {
4597
4639
  setup() {
4598
4640
  const suspenseNode = this.__owl__;
4599
4641
  const root = suspenseNode.app.createRoot(SuspenseHost, {
4600
- props: { slots: this.props.slots }
4642
+ props: { slots: this.props.slots },
4643
+ // Thread the plugin manager so `providePlugins` contributions from
4644
+ // ancestors are visible inside the default slot. (createRoot defaults
4645
+ // sub-roots to the app-level plugin manager; override here.) Destroy
4646
+ // cascade is handled explicitly below via `onWillDestroy`.
4647
+ pluginManager: suspenseNode.pluginManager,
4648
+ // Route errors from the sub-root back into Suspense's parent chain so
4649
+ // consumer `onError` handlers still catch descendant failures.
4650
+ onError: forwardErrorToParent(suspenseNode)
4601
4651
  });
4602
- root.node.pluginManager = suspenseNode.pluginManager;
4603
- nodeErrorHandlers.set(root.node, [forwardErrorToParent(suspenseNode)]);
4604
4652
  root.prepare().then(() => this.prepared.set(true));
4605
- const fiber = root.node.fiber;
4606
- if (fiber && fiber.counter === 0) {
4653
+ if (root.prepared) {
4607
4654
  this.prepared.set(true);
4608
4655
  }
4609
4656
  onMounted(() => this.mounted.set(true));
@@ -4646,8 +4693,8 @@ var blockDom = {
4646
4693
  };
4647
4694
  var __info__ = {
4648
4695
  version: App.version,
4649
- date: "2026-07-02T07:16:12.339Z",
4650
- hash: "84aea7c6",
4696
+ date: "2026-07-07T08:36:25.562Z",
4697
+ hash: "1d192035",
4651
4698
  url: "https://github.com/odoo/owl"
4652
4699
  };
4653
4700
 
package/dist/owl.iife.js CHANGED
@@ -417,18 +417,15 @@ var owl = (() => {
417
417
  function onReadTargetKey(target, key, atom) {
418
418
  onReadAtom(atom ?? getTargetKeyAtom(target, key));
419
419
  }
420
- function onWriteTargetKey(target, key, atom) {
421
- if (!atom) {
422
- const keyToAtomItem = targetToKeysToAtomItem.get(target);
423
- if (!keyToAtomItem) {
424
- return;
425
- }
426
- if (!keyToAtomItem.has(key)) {
427
- return;
428
- }
429
- atom = keyToAtomItem.get(key);
420
+ function onWriteTargetKey(target, key) {
421
+ const keyToAtomItem = targetToKeysToAtomItem.get(target);
422
+ if (!keyToAtomItem) {
423
+ return;
424
+ }
425
+ if (!keyToAtomItem.has(key)) {
426
+ return;
430
427
  }
431
- onWriteAtom(atom);
428
+ onWriteAtom(keyToAtomItem.get(key));
432
429
  }
433
430
  var targets = /* @__PURE__ */ new WeakMap();
434
431
  var proxyCache = /* @__PURE__ */ new WeakMap();
@@ -485,18 +482,30 @@ var owl = (() => {
485
482
  const hadKey = objectHasOwnProperty.call(target, key);
486
483
  const originalValue = Reflect.get(target, key, receiver);
487
484
  const ret = Reflect.set(target, key, toRaw(value), receiver);
488
- if (!hadKey && objectHasOwnProperty.call(target, key)) {
489
- onWriteTargetKey(target, KEYCHANGES, atom);
490
- }
491
- if (originalValue !== Reflect.get(target, key, receiver) || key === "length" && Array.isArray(target)) {
492
- onWriteTargetKey(target, key, atom);
485
+ const keyCreated = !hadKey && objectHasOwnProperty.call(target, key);
486
+ const valueChanged = originalValue !== Reflect.get(target, key, receiver);
487
+ if (atom) {
488
+ if (keyCreated || valueChanged) {
489
+ onWriteAtom(atom);
490
+ }
491
+ } else {
492
+ if (keyCreated) {
493
+ onWriteTargetKey(target, KEYCHANGES);
494
+ }
495
+ if (valueChanged || key === "length" && Array.isArray(target)) {
496
+ onWriteTargetKey(target, key);
497
+ }
493
498
  }
494
499
  return ret;
495
500
  },
496
501
  deleteProperty(target, key) {
497
502
  const ret = Reflect.deleteProperty(target, key);
498
- onWriteTargetKey(target, KEYCHANGES, atom);
499
- onWriteTargetKey(target, key, atom);
503
+ if (atom) {
504
+ onWriteAtom(atom);
505
+ } else {
506
+ onWriteTargetKey(target, KEYCHANGES);
507
+ onWriteTargetKey(target, key);
508
+ }
500
509
  return ret;
501
510
  },
502
511
  ownKeys(target) {
@@ -549,10 +558,10 @@ var owl = (() => {
549
558
  const ret = target[setterName](key, value);
550
559
  const hasKey = target.has(key);
551
560
  if (hadKey !== hasKey) {
552
- onWriteTargetKey(target, KEYCHANGES, null);
561
+ onWriteTargetKey(target, KEYCHANGES);
553
562
  }
554
563
  if (originalValue !== target[getterName](key)) {
555
- onWriteTargetKey(target, key, null);
564
+ onWriteTargetKey(target, key);
556
565
  }
557
566
  return ret;
558
567
  };
@@ -561,9 +570,9 @@ var owl = (() => {
561
570
  return () => {
562
571
  const allKeys = [...target.keys()];
563
572
  target.clear();
564
- onWriteTargetKey(target, KEYCHANGES, null);
573
+ onWriteTargetKey(target, KEYCHANGES);
565
574
  for (const key of allKeys) {
566
- onWriteTargetKey(target, key, null);
575
+ onWriteTargetKey(target, key);
567
576
  }
568
577
  };
569
578
  }
@@ -1054,6 +1063,16 @@ ${issueStrings}`);
1054
1063
  }
1055
1064
  });
1056
1065
  validate[intersectionSymbol] = types22;
1066
+ validate.toShape = () => {
1067
+ const shape = {};
1068
+ for (const member of types22) {
1069
+ const memberShape = typeof member.toShape === "function" ? member.toShape() : void 0;
1070
+ if (memberShape && !Array.isArray(memberShape)) {
1071
+ Object.assign(shape, memberShape);
1072
+ }
1073
+ }
1074
+ return shape;
1075
+ };
1057
1076
  return validate;
1058
1077
  }
1059
1078
  function literalType(literal) {
@@ -1129,6 +1148,7 @@ ${issueStrings}`);
1129
1148
  if (!Array.isArray(schema)) {
1130
1149
  validate[shapeSymbol] = schema;
1131
1150
  }
1151
+ validate.toShape = () => schema;
1132
1152
  return validate;
1133
1153
  }
1134
1154
  function strictObjectType(schema) {
@@ -1138,6 +1158,7 @@ ${issueStrings}`);
1138
1158
  if (!Array.isArray(schema)) {
1139
1159
  validate[shapeSymbol] = schema;
1140
1160
  }
1161
+ validate.toShape = () => schema;
1141
1162
  return validate;
1142
1163
  }
1143
1164
  function promiseType(type) {
@@ -1565,7 +1586,7 @@ ${issueStrings}`);
1565
1586
  }
1566
1587
 
1567
1588
  // ../owl-runtime/dist/owl-runtime.es.js
1568
- var version = "3.0.0-alpha.41";
1589
+ var version = "3.0.0-alpha.42";
1569
1590
  var fibersInError = /* @__PURE__ */ new WeakMap();
1570
1591
  var nodeErrorHandlers = /* @__PURE__ */ new WeakMap();
1571
1592
  function invokeErrorHandlers(node, error, finalize, markFibers) {
@@ -4312,6 +4333,13 @@ ${issueStrings}`);
4312
4333
  let error = null;
4313
4334
  try {
4314
4335
  node = new ComponentNode(Root, props2, this, null, null);
4336
+ const subConfig = config3;
4337
+ if (subConfig.pluginManager) {
4338
+ node.pluginManager = subConfig.pluginManager;
4339
+ }
4340
+ if (subConfig.onError) {
4341
+ nodeErrorHandlers.set(node, [subConfig.onError]);
4342
+ }
4315
4343
  } catch (e) {
4316
4344
  error = e;
4317
4345
  reject(e);
@@ -4372,7 +4400,9 @@ ${issueStrings}`);
4372
4400
  return promise;
4373
4401
  };
4374
4402
  const root = {
4375
- node,
4403
+ get prepared() {
4404
+ return fiber ? fiber.counter === 0 : false;
4405
+ },
4376
4406
  promise,
4377
4407
  prepare,
4378
4408
  mount: mount3,
@@ -4402,6 +4432,9 @@ ${issueStrings}`);
4402
4432
  };
4403
4433
  async function mount2(C, target, config3 = {}) {
4404
4434
  const app = new App(config3);
4435
+ if (app.pluginManager.status < STATUS.MOUNTED) {
4436
+ await app.pluginManager.ready;
4437
+ }
4405
4438
  const root = app.createRoot(C, config3);
4406
4439
  return root.mount(target, config3);
4407
4440
  }
@@ -4638,9 +4671,18 @@ ${issueStrings}`);
4638
4671
  if (!target) {
4639
4672
  return;
4640
4673
  }
4641
- root = app.createRoot(PortalContent, { props: { slots } });
4642
- root.node.pluginManager = portalNode.pluginManager;
4643
- nodeErrorHandlers.set(root.node, [forwardErrorToParent(portalNode)]);
4674
+ root = app.createRoot(PortalContent, {
4675
+ props: { slots },
4676
+ // Forward the plugin chain from this Portal (createRoot defaults
4677
+ // sub-roots to the app-level plugin manager) so `providePlugins`
4678
+ // contributions from ancestors are visible inside the portaled content.
4679
+ pluginManager: portalNode.pluginManager,
4680
+ // Route errors from the portaled subtree back through Portal's parent
4681
+ // chain so consumer `onError` handlers still catch them. Without this,
4682
+ // sub-root errors would propagate to app._handleError and tear down
4683
+ // the whole app.
4684
+ onError: forwardErrorToParent(portalNode)
4685
+ });
4644
4686
  root.mount(target);
4645
4687
  return tearDown;
4646
4688
  });
@@ -4675,13 +4717,18 @@ ${issueStrings}`);
4675
4717
  setup() {
4676
4718
  const suspenseNode = this.__owl__;
4677
4719
  const root = suspenseNode.app.createRoot(SuspenseHost, {
4678
- props: { slots: this.props.slots }
4720
+ props: { slots: this.props.slots },
4721
+ // Thread the plugin manager so `providePlugins` contributions from
4722
+ // ancestors are visible inside the default slot. (createRoot defaults
4723
+ // sub-roots to the app-level plugin manager; override here.) Destroy
4724
+ // cascade is handled explicitly below via `onWillDestroy`.
4725
+ pluginManager: suspenseNode.pluginManager,
4726
+ // Route errors from the sub-root back into Suspense's parent chain so
4727
+ // consumer `onError` handlers still catch descendant failures.
4728
+ onError: forwardErrorToParent(suspenseNode)
4679
4729
  });
4680
- root.node.pluginManager = suspenseNode.pluginManager;
4681
- nodeErrorHandlers.set(root.node, [forwardErrorToParent(suspenseNode)]);
4682
4730
  root.prepare().then(() => this.prepared.set(true));
4683
- const fiber = root.node.fiber;
4684
- if (fiber && fiber.counter === 0) {
4731
+ if (root.prepared) {
4685
4732
  this.prepared.set(true);
4686
4733
  }
4687
4734
  onMounted(() => this.mounted.set(true));
@@ -4724,8 +4771,8 @@ ${issueStrings}`);
4724
4771
  };
4725
4772
  var __info__ = {
4726
4773
  version: App.version,
4727
- date: "2026-07-02T07:16:12.339Z",
4728
- hash: "84aea7c6",
4774
+ date: "2026-07-07T08:36:25.562Z",
4775
+ hash: "1d192035",
4729
4776
  url: "https://github.com/odoo/owl"
4730
4777
  };
4731
4778
 
@@ -1,27 +1,27 @@
1
- "use strict";var owl=(()=>{var ht=Object.defineProperty;var yr=Object.getOwnPropertyDescriptor;var wr=Object.getOwnPropertyNames;var Tr=Object.prototype.hasOwnProperty;var Nr=(e,t)=>{for(var n in t)ht(e,n,{get:t[n],enumerable:!0})},Er=(e,t,n,r)=>{if(t&&typeof t=="object"||typeof t=="function")for(let i of wr(t))!Tr.call(e,i)&&i!==n&&ht(e,i,{get:()=>t[i],enumerable:!(r=yr(t,i))||r.enumerable});return e};var $r=e=>Er(ht({},"__esModule",{value:!0}),e);var co={};Nr(co,{App:()=>qt,Component:()=>ee,ErrorBoundary:()=>hs,EventBus:()=>Tn,OwlError:()=>g,Plugin:()=>qe,Portal:()=>ms,Registry:()=>mn,Resource:()=>gn,Scope:()=>Ce,Suspense:()=>vs,TemplateSet:()=>Pe,__info__:()=>Ts,applyDefaults:()=>hn,assertType:()=>W,asyncComputed:()=>ln,batched:()=>vt,blockDom:()=>ws,computed:()=>se,config:()=>wn,effect:()=>Ae,getDefault:()=>le,getScope:()=>oe,globalTemplates:()=>st,htmlEscape:()=>At,markRaw:()=>He,markup:()=>Ne,mount:()=>rs,onError:()=>sr,onMounted:()=>ir,onPatched:()=>ls,onWillDestroy:()=>Z,onWillPatch:()=>os,onWillStart:()=>Ye,onWillUnmount:()=>as,onWillUpdateProps:()=>ss,plugin:()=>yn,props:()=>lt,providePlugins:()=>ys,proxy:()=>ke,signal:()=>x,status:()=>Ii,t:()=>j,toRaw:()=>Y,types:()=>j,untrack:()=>wt,useApp:()=>ds,useEffect:()=>De,useListener:()=>bn,useScope:()=>K,validateType:()=>Nt,whenReady:()=>di,xml:()=>te});var g=class extends Error{cause},A={NEW:0,MOUNTED:1,CANCELLED:2,DESTROYED:3};function vt(e){let t=!1;return function(...r){t||(t=!0,Promise.resolve().then(()=>{t=!1,e(...r)}))}}var $e=(e=>(e[e.EXECUTED=0]="EXECUTED",e[e.STALE=1]="STALE",e[e.PENDING=2]="PENDING",e))($e||{}),ie=Symbol("Atom"),je=[],V;function Ke(e,t,n=1){return{state:n,value:void 0,compute:e,sources:new Set,observers:new Set,isDerived:t}}function yt(e){V&&(V.sources.add(e),e.observers.add(V))}function We(e){for(let t of e.observers)t.state===0&&(t.isDerived?kr(t):je.push(t)),t.state=1;Sr()}var Sr=vt(Cr);function Cr(){let e=je;je=[];for(let t=0;t<e.length;t++)Ue(e[t])}function z(){return V}function P(e){V=e}function Ue(e){let t=e.state;if(t===0)return;if(t===2){for(let r of e.sources)if("compute"in r&&(Ue(r),e.state===1))break;if(e.state!==1){e.state=0;return}}Se(e);let n=V;V=e;try{e.value=e.compute(),e.state=0}finally{V=n}}function Se(e){let t=e.sources;for(let n of t)n.observers.delete(e);t.clear()}function ze(e){let t=e.sources;for(let n of t){n.observers.delete(e);let r=n;r.isDerived&&r.observers.size===0&&ze(r)}t.clear(),e.state=1}function kr(e){let t=[e],n;for(;n=t.pop();)for(let r of n.observers)r.state||(r.state=2,r.isDerived?t.push(r):je.push(r))}function wt(e){let t=V;V=void 0;let n;try{n=e()}finally{V=t}return n}var H=[];function K(){let e=oe();if(!e)throw new g("No active scope");return e}var Ce=class{app;pluginManager;status=A.NEW;computations=[];willStart=[];_controller=null;_destroyCbs=null;constructor(e){this.app=e,this.pluginManager=e.pluginManager}run(e){H.push(this);try{return e()}finally{H.pop()}}get abortSignal(){return this.status>A.MOUNTED?(this._controller||(this._controller=new AbortController,this._controller.abort()),this._controller.signal):(this._controller??=new AbortController).signal}async until(e){if(this.status>A.MOUNTED)throw en();let t=await e;if(this.status>A.MOUNTED)throw en();return t}onDestroy(e){if(this.status>=A.DESTROYED){e();return}(this._destroyCbs??=[]).push(e)}cancel(){this.status>A.MOUNTED||(this.status=A.CANCELLED,this._controller?.abort())}finalize(e){if(this.status>=A.DESTROYED)return;this._controller&&!this._controller.signal.aborted&&this._controller.abort();let t=this._destroyCbs;if(t){this._destroyCbs=null;for(let n=t.length-1;n>=0;n--)try{t[n]()}catch(r){e(r)}}for(let n of this.computations)ze(n);this.status=A.DESTROYED}decorate(e,t){return e.bind(void 0,this)}};function oe(){let e=H.length;return e?H[e-1]:null}function Ve(e){return typeof e=="object"&&e!==null&&e.name==="AbortError"}function en(){let e=new Error("The operation was aborted");return e.name="AbortError",e}var U=Symbol("Key changes"),Ar=Object.prototype.toString,pt=Object.prototype.hasOwnProperty;function Tt(e){if(typeof e!="object"||e===null)return!1;let t=Y(e);return Array.isArray(t)||t instanceof Set||t instanceof Map||t instanceof WeakMap?!0:Ar.call(t)==="[object Object]"}function de(e,t){return!t&&Tt(e)?ke(e):e}var sn=new WeakSet;function He(e){return sn.add(e),e}function Y(e){return Fe.has(e)?Fe.get(e):e}var mt=new WeakMap;function Dr(e,t){let n=mt.get(e);n||(n=new Map,mt.set(e,n));let r=n.get(t);return r||(r={value:void 0,observers:new Set},n.set(t,r)),r}function F(e,t,n){yt(n??Dr(e,t))}function X(e,t,n){if(!n){let r=mt.get(e);if(!r||!r.has(t))return;n=r.get(t)}We(n)}var Fe=new WeakMap,tn=new WeakMap;function pe(e,t){if(!Tt(e))throw new g("Cannot make the given value reactive");if(sn.has(e)||Fe.has(e))return e;let n=tn.get(e);if(n)return n;let r;e instanceof Map?r=dt(e,"Map",t):e instanceof Set?r=dt(e,"Set",t):e instanceof WeakMap?r=dt(e,"WeakMap",t):r=on(t);let i=new Proxy(e,r);return tn.set(e,i),Fe.set(i,e),i}function ke(e){return pe(e,null)}function on(e){return{get(t,n,r){F(t,n,e);let i=Reflect.get(t,n,r);if(e||typeof i!="object"||i===null||!Tt(i))return i;let s=Object.getOwnPropertyDescriptor(t,n);return s&&!s.writable&&!s.configurable?i:pe(i,null)},set(t,n,r,i){let s=pt.call(t,n),o=Reflect.get(t,n,i),l=Reflect.set(t,n,Y(r),i);return!s&&pt.call(t,n)&&X(t,U,e),(o!==Reflect.get(t,n,i)||n==="length"&&Array.isArray(t))&&X(t,n,e),l},deleteProperty(t,n){let r=Reflect.deleteProperty(t,n);return X(t,U,e),X(t,n,e),r},ownKeys(t){return F(t,U,e),Reflect.ownKeys(t)},has(t,n){return F(t,U,e),Reflect.has(t,n)}}}function Te(e,t,n){return r=>(r=Y(r),F(t,r,null),de(t[e](r),n))}function q(e,t,n){return function*(){F(t,U,null);let r=t.keys();for(let i of t[e]()){let s=r.next().value;F(t,s,null),yield de(i,n)}}}function nn(e,t){return function(r,i){F(e,U,null),e.forEach(function(s,o,l){F(e,o,null),r.call(i,de(s,t),de(o,t),de(l,t))},i)}}function he(e,t,n){return(r,i)=>{r=Y(r);let s=n.has(r),o=n[t](r),l=n[e](r,i),c=n.has(r);return s!==c&&X(n,U,null),o!==n[t](r)&&X(n,r,null),l}}function rn(e){return()=>{let t=[...e.keys()];e.clear(),X(e,U,null);for(let n of t)X(e,n,null)}}var _r={Set:(e,t)=>({has:Te("has",e,t),add:he("add","has",e),delete:he("delete","has",e),keys:q("keys",e,t),values:q("values",e,t),entries:q("entries",e,t),[Symbol.iterator]:q(Symbol.iterator,e,t),forEach:nn(e,t),clear:rn(e),get size(){return F(e,U,null),e.size}}),Map:(e,t)=>({has:Te("has",e,t),get:Te("get",e,t),set:he("set","get",e),delete:he("delete","has",e),keys:q("keys",e,t),values:q("values",e,t),entries:q("entries",e,t),[Symbol.iterator]:q(Symbol.iterator,e,t),forEach:nn(e,t),clear:rn(e),get size(){return F(e,U,null),e.size}}),WeakMap:(e,t)=>({has:Te("has",e,t),get:Te("get",e,t),set:he("set","get",e),delete:he("delete","has",e)})};function dt(e,t,n){let r=_r[t](e,n);return Object.assign(on(n),{get(i,s){return pt.call(r,s)?r[s]:(F(i,s,n),de(i[s],n))}})}function me(e,t){let n={type:"signal",value:e,observers:new Set},r=t(n),i=()=>(yt(n),r);return i[ie]=n,i.set=function(o){Object.is(n.value,o)||(n.value=o,r=t(n),We(n))},i}function Or(e){if(typeof e!="function"||e[ie]?.type!=="signal")throw new g(`Value is not a signal (${e})`);We(e[ie])}function xr(){return me(null,e=>e.value)}function Rr(e=[]){return me(e,t=>pe(t.value,t))}function Mr(e={}){return me(e,t=>pe(t.value,t))}function Ir(e=new Map){return me(e,t=>pe(t.value,t))}function Pr(e=new Set){return me(e,t=>pe(t.value,t))}function x(e){return me(e,t=>t.value)}x.trigger=Or;x.ref=xr;x.Array=Rr;x.Map=Ir;x.Object=Mr;x.Set=Pr;function Lr(){throw new g("Cannot write to a read-only computed value. Pass a `set` option to make it writable.")}function se(e,t={}){let n=Ke(()=>{let i=e();return Object.is(n.value,i)||We(n),i},!0);function r(){return n.state!==0&&Ue(n),yt(n),n.value}return r[ie]=n,r.set=t.set??Lr,oe()?.computations.push(n),r}function Ae(e){let t=Ke(()=>(t.value||t.observers.size?(P(void 0),gt(t),P(t)):Se(t),e()),!1);return z()?.observers.add(t),Ue(t),function(){t.state=0;let r=z();P(void 0),gt(t),P(r)}}function gt(e){Se(e),Br(e);for(let t of e.observers)t.state=0,gt(t);e.observers.clear()}function Br(e){let t=e.value;t&&typeof t=="function"&&(t(),e.value=void 0)}function ln(e,t={}){let n=x(t.initial),r=x(!1),i=x(null),s=x(0),o=oe(),l=0,c=null,h=!1,a=null;function u(){r.set(!0),h=!0}function f(){r.set(!1),h=!1,a?.resolve(),a=null}let m=Ae(()=>{s();let d=++l;c&&c.abort();let S=new AbortController;c=S;let N=[S.signal];o?.abortSignal&&N.push(o.abortSignal),u(),i.set(null);let w;try{w=e({abortSignal:AbortSignal.any(N)})}catch(T){if(d!==l)return;if(Ve(T)){f();return}i.set(T),f();return}w.then(T=>{d===l&&(n.set(T),f())},T=>{if(d===l){if(Ve(T)){f();return}i.set(T),f()}})});function p(){m(),c?.abort(),c=null,h=!1,a?.resolve(),a=null}o?.onDestroy(p);let b=(()=>n());return b.loading=()=>r(),b.error=()=>i(),b.refresh=()=>s.set(s()+1),b.dispose=p,b.currentPromise=()=>{if(!h)return Promise.resolve();if(!a){let d;a={promise:new Promise(S=>d=S),resolve:d}}return a.promise},b}function jr(e,t,n){if(typeof n=="function")return n.name||"[Function]";if(n&&typeof n=="object"){let r=n.constructor;if(r&&r!==Object&&r!==Array)return`[Instance of ${r.name||"anonymous"}]`;if(e.includes(n))return"[Known object]";e.push(n)}return n}function W(e,t,n="Value does not match the type"){let r=Nt(e,t);if(r.length){let i=[],s=JSON.stringify(r,jr.bind(null,i),2);throw new g(`${n}
2
- ${s}`)}}function bt(e,t,n,r,i=1){return{issueDepth:0,path:n,value:t,get isValid(){return!e.length},addIssue(s){e.push({received:this.value,path:this.path.join(" > "),...s})},mergeIssues(s){e.push(...s)},validate(s){s(this),!this.isValid&&r&&(r.issueDepth=this.issueDepth+i)},withIssues(s){return bt(s,this.value,this.path,this,0)},withKey(s){return bt(e,this.value[s],this.path.concat(s),this)}}}function Nt(e,t){let n=[];return t(bt(n,e,[])),n}var Et=Symbol("default"),an=Symbol("innerType"),Ge=Symbol("shape"),cn=Symbol("elementType"),un=Symbol("optional"),fn=Symbol("intersection");function le(e){return typeof e=="function"?e[Et]:void 0}function Vr(e,t){let n=function(i){i.value!==void 0&&i.validate(e)};return n[un]=!0,n[an]=e,t!==void 0&&(n[Et]=typeof t=="function"?t:()=>t),n}function Fr(e){return typeof e=="function"&&un in e}function M(e){return e.optional=t=>Vr(e,t),e}function hn(e,t){return Be(e,t)}function Be(e,t){if(typeof t!="function")return e;if(e===void 0){let l=t[Et];if(!l)return e;e=l()}let n=t[an]||t;if(typeof n!="function"||!e||typeof e!="object")return e;let r=n[fn];if(r){let l=e;for(let c of r)l=Be(l,c);return l}let i=n[cn];if(i&&Array.isArray(e)){let l=e;for(let c=0;c<e.length;c++){let h=Be(e[c],i);h!==e[c]&&(l===e&&(l=[...e]),l[c]=h)}return l}let s=n[Ge];if(!s)return e;let o=e;for(let l in s){let c=o[l],h=Be(c,s[l]);h!==c&&(o===e&&(o=Array.isArray(e)?[...e]:{...e}),o[l]=h)}return o}function Kr(){return M(function(){})}function Wr(){return M(function(t){typeof t.value!="boolean"&&t.addIssue({message:"value is not a boolean"})})}function Ur(){return M(function(t){typeof t.value!="number"&&t.addIssue({message:"value is not a number"})})}function zr(){return M(function(t){typeof t.value!="string"&&!(t.value instanceof String)&&t.addIssue({message:"value is not a string"})})}function Hr(e){let t=M(function(r){if(!Array.isArray(r.value)){r.addIssue({message:"value is not an array"});return}if(e)for(let i=0;i<r.value.length;i++)r.withKey(i).validate(e)});return e&&(t[cn]=e),t}function $t(e){return M(function(n){(typeof n.value!="function"||!(n.value===e||n.value.prototype instanceof e))&&n.addIssue({message:`value is not '${e.name}' or an extension`})})}function Gr(e,t,n="value does not match custom validation"){return M(function(i){i.validate(e),i.isValid&&(t(i.value)||i.addIssue({message:n}))})}function qr(e=[],t=void 0){return M(function(r){typeof r.value!="function"&&r.addIssue({message:"value is not a function"})})}function dn(e){return M(function(n){n.value instanceof e||n.addIssue({message:`value is not an instance of '${e.name}'`})})}function Xr(e){let t=M(function(r){for(let i of e)r.validate(i)});return t[fn]=e,t}function St(e){return M(function(n){n.value!==e&&n.addIssue({message:`value is not equal to ${typeof e=="string"?`'${e}'`:e}`})})}function Yr(e){return Ct(e.map(St))}function pn(e,t,n){if(typeof e.value!="object"||Array.isArray(e.value)||e.value===null){e.addIssue({message:"value is not an object"});return}if(!t)return;let r=!Array.isArray(t),i,s;if(r)s=Object.keys(t),i=t;else{s=t,i={};for(let l of s)i[l]=null}let o=[];for(let l of s){if(e.value[l]===void 0){Fr(i[l])||o.push(l);continue}r&&e.withKey(l).validate(i[l])}if(o.length&&e.addIssue({message:"object value has missing keys",missingKeys:o}),n){let l=[];for(let c in e.value)s.includes(c)||l.push(c);l.length&&e.addIssue({message:"object value has unknown keys",unknownKeys:l})}}function Zr(e={}){let t=M(function(r){pn(r,e,!1)});return Array.isArray(e)||(t[Ge]=e),t}function Jr(e){let t=M(function(r){pn(r,e,!0)});return Array.isArray(e)||(t[Ge]=e),t}function Qr(e){return M(function(n){n.value instanceof Promise||n.addIssue({message:"value is not a promise"})})}function ei(e){return M(function(n){if(typeof n.value!="object"||Array.isArray(n.value)||n.value===null){n.addIssue({message:"value is not an object"});return}if(e)for(let r in n.value)n.withKey(r).validate(e)})}function ti(e){let t=M(function(r){if(!Array.isArray(r.value)){r.addIssue({message:"value is not an array"});return}if(r.value.length!==e.length){r.addIssue({message:"tuple value does not have the correct length"});return}for(let i=0;i<e.length;i++)r.withKey(i).validate(e[i])});return t[Ge]=e,t}function Ct(e){return M(function(n){let r=0,i=[];for(let s of e){let o=n.withIssues(i);if(o.validate(s),i.length===r||o.issueDepth>0){n.mergeIssues(i.slice(r));return}r=i.length}n.addIssue({message:"value does not match union type",subIssues:i})})}function ni(e){return M(function(n){(typeof n.value!="function"||!n.value[ie])&&n.addIssue({message:"value is not a reactive value"})})}function ri(e){if(typeof HTMLElement>"u")throw new Error("Cannot use ref in a non-DOM environment");return Ct([St(null),dn(e||HTMLElement)])}var kt={and:Xr,any:Kr,array:Hr,boolean:Wr,constructor:$t,customValidator:Gr,function:qr,instanceOf:dn,literal:St,number:Ur,object:Zr,or:Ct,promise:Qr,record:ei,ref:ri,selection:Yr,signal:ni,strictObject:Jr,string:zr,tuple:ti},mn=class{_map=x.Object(Object.create(null));_name;_validation;constructor(e={}){this._name=e.name||"registry",this._validation=e.validation}entries=se(()=>Object.entries(this._map()).sort((t,n)=>t[1][0]-n[1][0]).map(([t,n])=>[t,n[1]]));items=se(()=>this.entries().map(e=>e[1]));addById(e,t={}){if(!e.id)throw new g(`Item should have an id key (registry '${this._name}')`);return this.add(e.id,e,t)}add(e,t,n={}){if(!n.force&&e in this._map())throw new g(`Key "${e}" is already registered (registry '${this._name}'). Use { force: true } to overwrite.`);if(this._validation){let r=this._name?` (registry '${this._name}', key: '${e}')`:` (key: '${e}')`;W(t,this._validation,`Registry entry does not match the type${r}`)}return this._map()[e]=[n.sequence??50,t],this}get(e,t){let n=e in this._map();if(!n&&arguments.length<2)throw new g(`Cannot find key "${e}" (registry '${this._name}')`);return n?this._map()[e][1]:t}delete(e){delete this._map()[e]}has(e){return e in this._map()}use(e,t,n={}){let r=K();return this.add(e,t,n),r.onDestroy(()=>{this._map()[e]?.[1]===t&&this.delete(e)}),this}useById(e,t={}){if(!e.id)throw new g(`Item should have an id key (registry '${this._name}')`);return this.use(e.id,e,t)}},gn=class{_items=x.Array([]);_name;_validation;constructor(e={}){this._name=e.name,this._validation=e.validation}items=se(()=>this._items().sort((e,t)=>e[0]-t[0]).map(e=>e[1]));add(e,t={}){if(this._validation){let n=this._name?` (resource '${this._name}')`:"";W(e,this._validation,`Resource item does not match the type${n}`)}return this._items().push([t.sequence??50,e]),this}delete(e){let t=this._items().filter(([n,r])=>r!==e);return this._items.set(t),this}has(e){return this._items().some(([t,n])=>n===e)}use(e,t={}){let n=K();return this.add(e,t),n.onDestroy(()=>this.delete(e)),this}},qe=class{static _shadowId;static get id(){return this._shadowId??this.name}static set id(e){this._shadowId=e}static sequence=50;__owl__;constructor(e){this.__owl__=e}setup(){}},ge=class extends Ce{config;plugins;ready=Promise.resolve();hasPendingReady=!1;constructor(e,t={}){if(super(e),this.config=t.config??{},this.pluginManager=this,t.parent){let n=t.parent;n.onDestroy(()=>this.destroy()),this.plugins=Object.create(n.plugins)}else this.plugins={}}destroy(){this.finalize(e=>console.error(e))}getPluginById(e){return this.plugins[e]||null}getPlugin(e){return this.getPluginById(e.id)}startPlugin(e){if(!e.id)throw new g(`Plugin "${e.name}" has no id`);if(this.plugins.hasOwnProperty(e.id)){let n=this.getPluginById(e.id).constructor;if(n!==e)throw new g(`Trying to start a plugin with the same id as an other plugin (id: '${e.id}', existing plugin: '${n.name}', starting plugin: '${e.name}')`);return null}let t=new e(this);return this.plugins[e.id]=t,t.setup(),t}startPlugins(e){let t=e.filter(o=>!o.id||this.plugins.hasOwnProperty(o.id)?(this.startPlugin(o),!1):!0);if(!t.length)return;t.sort((o,l)=>o.sequence-l.sequence);let n=[];for(let o of t){let l=n[n.length-1];l&&l[0].sequence===o.sequence?l.push(o):n.push([o])}let r=o=>{H.push(this);try{for(let c of o)this.startPlugin(c)}finally{H.pop()}let l=this.willStart.splice(0);return l.length?Promise.all(l.map(c=>c())):null},i=this.hasPendingReady?this.ready:null;for(let o of n)i?i=i.then(()=>r(o)):i=r(o);if(!i){this.status<A.MOUNTED&&(this.status=A.MOUNTED);return}this.hasPendingReady=!0;let s=this.ready=i.then(()=>{this.status<A.MOUNTED&&(this.status=A.MOUNTED),this.ready===s&&(this.hasPendingReady=!1)})}};function Xe(e,t){Array.isArray(t)?e.startPlugins(t):e.onDestroy(Ae(()=>{let n=t.items();wt(()=>e.startPlugins(n))}))}function Ye(e){let t=K();t.willStart.push(t.decorate(e,"onWillStart"))}function Z(e){let t=K();t.onDestroy(t.decorate(e,"onWillDestroy"))}function De(e){Z(Ae(e))}function bn(e,t,n,r){typeof e=="function"?De(()=>{let i=e();if(i)return i.addEventListener(t,n,r),()=>i.removeEventListener(t,n,r)}):(e.addEventListener(t,n,r),Z(()=>e.removeEventListener(t,n,r)))}function vn(){return K().app}function yn(e){let t=K(),n=t.pluginManager.getPluginById(e.id);if(!n)if(t instanceof ge)n=t.pluginManager.startPlugin(e);else throw new g(`Unknown plugin "${e.id}"`);return n}function wn(e,t){let n=K();if(!(n instanceof ge))throw new g("Expected to be in a plugin scope");n.app.dev&&t&&W(n.config,kt.object({[e]:t}),"Config does not match the type");let r=n.config[e];return r===void 0?le(t)?.():r}var Tn=class extends EventTarget{trigger(e,t){this.dispatchEvent(new CustomEvent(e,{detail:t}))}},Ee=class extends String{};function At(e){return e instanceof Ee?e:e===void 0?Ne(""):typeof e=="number"?Ne(String(e)):([["&","&amp;"],["<","&lt;"],[">","&gt;"],["'","&#x27;"],['"',"&quot;"],["`","&#x60;"]].forEach(t=>{e=String(e).replace(new RegExp(t[0],"g"),t[1])}),Ne(e))}function Ne(e,...t){if(!Array.isArray(e))return new Ee(e);let n=e,r="",i=0;for(;i<t.length;++i)r+=n[i]+At(t[i]);return r+=n[i],new Ee(r)}var ii="3.0.0-alpha.41",Q=new WeakMap,ce=new WeakMap;function Rn(e,t,n,r){for(;e;){r&&e.fiber&&Q.set(e.fiber,t);let i=ce.get(e);if(i)for(let s=i.length-1;s>=0;s--)try{return i[s](t,n),{handled:!0,error:t}}catch(o){t=o}e=e.parent}return{handled:!1,error:t}}function Mn(e){return(t,n)=>{if(e.app.destroyed)throw t;let{handled:r}=Rn(e,t,n,!1);r||e.app._handleError(n())}}function ue(e){let{error:t}=e,n="node"in e?e.node:e.fiber.node,r="fiber"in e?e.fiber:n.fiber,i=n.app;if(i.destroyed)throw t;if(r){let l=r;do l.node.fiber=l,Q.set(l,t),l=l.parent;while(l);Q.set(r.root,t)}let s=()=>{try{i.destroy()}catch{}return t},o=Rn(n,t,s,!0);o.handled||(t=o.error,i._handleError(s()))}function In(e){e=e.slice();let t=[],n;for(;(n=e[0])&&typeof n=="string";)t.push(e.shift());return{modifiers:t,data:e}}var ye={shouldNormalizeDom:!0,mainEventHandler:(e,t,n)=>(typeof e=="function"?e(t):Array.isArray(e)&&(e=In(e).data,e[0](e[1],t)),!1)},Nn=globalThis.document?.createTextNode(""),si=class{key;child;parentEl;constructor(e,t){this.key=e,this.child=t}mount(e,t){this.parentEl=e,this.child.mount(e,t)}moveBeforeDOMNode(e,t){this.child.moveBeforeDOMNode(e,t)}moveBeforeVNode(e,t){this.moveBeforeDOMNode(e&&e.firstNode()||t)}patch(e,t){if(this===e)return;let n=this.child,r=e.child;if(this.key===e.key)n.patch(r,t);else{let i=n.firstNode();i.parentElement.insertBefore(Nn,i),t&&n.beforeRemove(),n.remove(),r.mount(this.parentEl,Nn),this.child=r,this.key=e.key}}beforeRemove(){this.child.beforeRemove()}remove(){this.child.remove()}firstNode(){return this.child.firstNode()}toString(){return this.child.toString()}};function ae(e,t){return new si(e,t)}var Rt,Re,Wt,Pn;if(typeof Element<"u"){({setAttribute:Rt,removeAttribute:Re}=Element.prototype);let e=DOMTokenList.prototype;Wt=e.add,Pn=e.remove}var Ln=Array.isArray,{split:En,trim:Oe}=String.prototype,$n=/\s+/;function ve(e,t){switch(t){case!1:case null:case void 0:Re.call(this,e);break;case!0:Rt.call(this,e,"");break;default:Rt.call(this,e,t)}}function oi(e){return function(t){ve.call(this,e,t)}}function li(e){if(Ln(e))e[0]==="class"?Pt.call(this,e[1]):e[0]==="style"?Lt.call(this,e[1]):ve.call(this,e[0],e[1]);else for(let t in e)t==="class"?Pt.call(this,e[t]):t==="style"?Lt.call(this,e[t]):ve.call(this,t,e[t])}function ai(e,t){if(Ln(e)){let n=e[0],r=e[1];if(n===t[0]){if(r===t[1])return;n==="class"?Ze.call(this,r,t[1]):n==="style"?Je.call(this,r,t[1]):ve.call(this,n,r)}else Re.call(this,t[0]),ve.call(this,n,r)}else{for(let n in t)n in e||(n==="class"?Ze.call(this,"",t[n]):n==="style"?Je.call(this,"",t[n]):Re.call(this,n));for(let n in e){let r=e[n];r!==t[n]&&(n==="class"?Ze.call(this,r,t[n]):n==="style"?Je.call(this,r,t[n]):ve.call(this,n,r))}}}function Mt(e){let t={};switch(typeof e){case"string":let n=Oe.call(e);if(!n)return{};let r=En.call(n,$n);for(let i=0,s=r.length;i<s;i++)t[r[i]]=!0;return t;case"object":for(let i in e){let s=e[i];if(s){if(i=Oe.call(i),!i)continue;let o=En.call(i,$n);for(let l of o)t[l]=s}}return t;case"undefined":return{};case"number":return{[e]:!0};default:return{[e]:!0}}}var Dt={};function ci(e){if(e in Dt)return Dt[e];let t=e.replace(/[A-Z]/g,n=>"-"+n.toLowerCase());return Dt[e]=t,t}var Sn=/\s*!\s*important\s*$/i;function Bn(e,t,n){Sn.test(n)?e.setProperty(t,n.replace(Sn,""),"important"):e.setProperty(t,n)}function It(e){let t={};switch(typeof e){case"string":{let n=e,r=n.length,i=0;for(;i<r;){let s=i,o=0,l=0;for(;i<r;){let f=n.charCodeAt(i);if(l){if(f===92){i+=2;continue}f===l&&(l=0)}else if(f===34||f===39)l=f;else if(f===40)o++;else if(f===41)o>0&&o--;else if(f===59&&o===0)break;i++}let c=Oe.call(n.slice(s,i));if(i++,!c)continue;let h=c.indexOf(":");if(h===-1)continue;let a=Oe.call(c.slice(0,h)),u=Oe.call(c.slice(h+1));a&&u&&u!=="undefined"&&(t[a]=u)}return t}case"object":for(let n in e){let r=e[n];(r||r===0)&&(t[ci(n)]=String(r))}return t;default:return{}}}function Pt(e){e=e===""?{}:Mt(e);for(let t in e)Wt.call(this.classList,t)}function Ze(e,t){t=t===""?{}:Mt(t),e=e===""?{}:Mt(e);for(let n in t)n in e||Pn.call(this.classList,n);for(let n in e)e[n]!==t[n]&&Wt.call(this.classList,n)}function Lt(e){e=e===""?{}:It(e);let t=this.style;for(let n in e)Bn(t,n,e[n])}function Je(e,t){t=t===""?{}:It(t),e=e===""?{}:It(e);let n=this.style;for(let i in t)i in e||n.removeProperty(i);let r=!1;for(let i in e)(r||e[i]!==t[i])&&(Bn(n,i,e[i]),r=!0);n.cssText||Re.call(this,"style")}function ui(e){if(!e)return!1;if(e.ownerDocument.contains(e))return!0;let t=e.getRootNode();return t instanceof ShadowRoot&&e.ownerDocument.contains(t.host)}function fi(e,t){let n=e,r=t.defaultView.ShadowRoot;for(;n;){if(n===t)return!0;if(n.parentNode)n=n.parentNode;else if(n instanceof r&&n.host)n=n.host;else return!1}return!1}function hi(e){let t=e&&e.ownerDocument;if(t){if(!t.defaultView)throw new g("Cannot mount a component: the target document is not attached to a window (defaultView is missing)");let n=t.defaultView.HTMLElement;if(e instanceof n||e instanceof ShadowRoot){if(!fi(e,t))throw new g("Cannot mount a component on a detached dom node");return}}throw new g("Cannot mount component: the target is not a valid DOM element")}function di(e){return new Promise(function(t){document.readyState!=="loading"?t(!0):document.addEventListener("DOMContentLoaded",t,!1)}).then(e||function(){})}function jn(e){let t=e.split(".")[0],n=e.includes(".capture"),r=e.includes(".passive");return e.includes(".synthetic")?bi(t,n,r):mi(t,n,r)}var pi=1;function mi(e,t=!1,n=!1){let r=`__event__${e}_${pi++}`;t&&(r=`${r}_capture`);function i(h){let a=h.currentTarget;if(!a||!ui(a))return;let u=a[r];u&&ye.mainEventHandler(u,h,a)}let s={capture:t,passive:n};function o(h){this[r]=h,this.addEventListener(e,i,s)}function l(){delete this[r],this.removeEventListener(e,i,s)}function c(h){this[r]=h}return{setup:o,update:c,remove:l}}var gi=1;function bi(e,t=!1,n=!1){let r=`__event__synthetic_${e}`;t&&(r=`${r}_capture`),yi(e,r,t,n);let i=gi++;function s(l){let c=this[r]||{};c[i]=l,this[r]=c}function o(){delete this[r]}return{setup:s,update:s,remove:o}}function vi(e,t){let n=t.target;for(;n!==null;){let r=n[e];if(r){for(let i of Object.values(r))if(ye.mainEventHandler(i,t,n))return}n=n.parentNode}}var Cn={};function yi(e,t,n=!1,r=!1){Cn[t]||(document.addEventListener(e,i=>vi(t,i),{capture:n,passive:r}),Cn[t]=!0)}var wi=(e,t)=>Object.getOwnPropertyDescriptor(e,t),_e,Vn,Bt;if(typeof Node<"u"){let e=Node.prototype;_e=e.insertBefore,Vn=wi(e,"textContent").set,Bt=e.removeChild}var Fn=class{children;anchors;parentEl;isOnlyChild;constructor(e){this.children=e}mount(e,t){let n=this.children,r=n.length,i=new Array(r);for(let s=0;s<r;s++){let o=n[s];if(o)o.mount(e,t);else{let l=document.createTextNode("");i[s]=l,_e.call(e,l,t)}}this.anchors=i,this.parentEl=e}moveBeforeDOMNode(e,t=this.parentEl){this.parentEl=t;let n=this.children,r=this.anchors;for(let i=0,s=n.length;i<s;i++){let o=n[i];if(o)o.moveBeforeDOMNode(e,t);else{let l=r[i];_e.call(t,l,e)}}}moveBeforeVNode(e,t){if(e){let s=e.children[0];t=(s?s.firstNode():e.anchors[0])||null}let n=this.children,r=this.parentEl,i=this.anchors;for(let s=0,o=n.length;s<o;s++){let l=n[s];if(l)l.moveBeforeVNode(null,t);else{let c=i[s];_e.call(r,c,t)}}}patch(e,t){if(this===e)return;let n=this.children,r=e.children,i=this.anchors,s=this.parentEl;for(let o=0,l=n.length;o<l;o++){let c=n[o],h=r[o];if(c)if(h)c.patch(h,t);else{let a=c.firstNode(),u=document.createTextNode("");i[o]=u,_e.call(s,u,a),t&&c.beforeRemove(),c.remove(),n[o]=void 0}else if(h){n[o]=h;let a=i[o];h.mount(s,a),Bt.call(s,a)}}}beforeRemove(){let e=this.children;for(let t=0,n=e.length;t<n;t++){let r=e[t];r&&r.beforeRemove()}}remove(){let e=this.parentEl;if(this.isOnlyChild)Vn.call(e,"");else{let t=this.children,n=this.anchors;for(let r=0,i=t.length;r<i;r++){let s=t[r];s?s.remove():Bt.call(e,n[r])}}}firstNode(){let e=this.children[0];return e?e.firstNode():this.anchors[0]}toString(){return this.children.map(e=>e?e.toString():"").join("")}};function Ut(e){return new Fn(e)}var Ti=(e,t)=>Object.getOwnPropertyDescriptor(e,t),Qe,Kn,Wn;if(typeof Node<"u"){let e=Node.prototype;Qe=e.insertBefore,Wn=e.removeChild,Kn=Ti(CharacterData.prototype,"data").set}var Ni=class{text;parentEl;el;constructor(e){this.text=e}mount(e,t){this.parentEl=e;let n=document.createTextNode(jt(this.text));Qe.call(e,n,t),this.el=n}moveBeforeDOMNode(e,t=this.parentEl){this.parentEl=t,Qe.call(t,this.el,e)}moveBeforeVNode(e,t){Qe.call(this.parentEl,this.el,e?e.el:t)}beforeRemove(){}remove(){Wn.call(this.parentEl,this.el)}firstNode(){return this.el}patch(e){let t=e.text;this.text!==t&&(Kn.call(this.el,jt(t)),this.text=t)}toString(){return this.text}};function Me(e){return new Ni(e)}function jt(e){switch(typeof e){case"string":return e;case"number":return String(e);case"boolean":return e?"true":"false";default:return e||""}}var _t=(e,t)=>Object.getOwnPropertyDescriptor(e,t),xe,Un,zn,rt,zt;typeof Node<"u"&&(xe=Node.prototype,Un=Element.prototype,zn=_t(CharacterData.prototype,"data").set,rt=_t(xe,"firstChild").get,zt=_t(xe,"nextSibling").get);var kn=()=>{};function Ei(e){return function(n){this[e]=n===0?0:n?n.valueOf():""}}var Ot={};function Hn(e){if(e in Ot)return Ot[e];let n=new DOMParser().parseFromString(`<t>${e}</t>`,"text/xml").firstChild.firstChild;ye.shouldNormalizeDom&&Gn(n);let r=Vt(n),i=Ft(r),s=r.el,o=Ci(s,i);return Ot[e]=o,o}function Gn(e){if(e.nodeType===Node.TEXT_NODE&&!/\S/.test(e.textContent)){e.remove();return}if(!(e.nodeType===Node.ELEMENT_NODE&&e.tagName==="pre"))for(let t=e.childNodes.length-1;t>=0;--t)Gn(e.childNodes.item(t))}function Vt(e,t=null,n=null){switch(e.nodeType){case Node.ELEMENT_NODE:{let r=n&&n.currentNS,i=e.tagName,s,o=[];if(i.startsWith("block-text-")){let c=parseInt(i.slice(11),10);o.push({type:"text",idx:c}),s=document.createTextNode("")}if(i.startsWith("block-child-")){n.isRef||An(n);let c=parseInt(i.slice(12),10);o.push({type:"child",idx:c}),s=document.createTextNode("")}if(r||=e.namespaceURI,s||(s=r?document.createElementNS(r,i):document.createElement(i)),s instanceof Element){n||document.createElement("template").content.appendChild(s);let c=e.attributes;for(let h=0;h<c.length;h++){let a=c[h].name,u=c[h].value;if(a.startsWith("block-handler-")){let f=parseInt(a.slice(14),10);o.push({type:"handler",idx:f,event:u})}else if(a.startsWith("block-attribute-")){let f=parseInt(a.slice(16),10);o.push({type:"attribute",idx:f,name:u,tag:i})}else if(a.startsWith("block-property-")){let f=parseInt(a.slice(15),10);o.push({type:"property",idx:f,name:u,tag:i})}else a==="block-attributes"?o.push({type:"attributes",idx:parseInt(u,10)}):a==="block-ref"?o.push({type:"ref",idx:parseInt(u,10)}):s.setAttribute(c[h].name,u)}}let l={parent:t,firstChild:null,nextSibling:null,el:s,info:o,refN:0,currentNS:r};if(e.firstChild){let c=e.childNodes[0];if(e.childNodes.length===1&&c.nodeType===Node.ELEMENT_NODE&&c.tagName.startsWith("block-child-")){let h=c.tagName,a=parseInt(h.slice(12),10);o.push({idx:a,type:"child",isOnlyChild:!0})}else{l.firstChild=Vt(e.firstChild,l,l),s.appendChild(l.firstChild.el);let h=e.firstChild,a=l.firstChild;for(;h=h.nextSibling;)a.nextSibling=Vt(h,a,l),s.appendChild(a.nextSibling.el),a=a.nextSibling}}return l.info.length&&An(l),l}case Node.TEXT_NODE:return{parent:t,firstChild:null,nextSibling:null,el:document.createTextNode(e.textContent),info:[],refN:0,currentNS:null}}throw new g("boom")}function An(e){e.isRef=!0;do e.refN++;while(e=e.parent)}function $i(e){let t=e.parent;for(;t&&t.nextSibling===e;)e=t,t=t.parent;return t}function Ft(e,t,n){if(!t){let r=new Array(e.info.filter(i=>i.type==="child").length);t={collectors:[],locations:[],children:r,cbRefs:[],refN:e.refN},n=0}if(e.refN){let r=n,i=e.isRef,s=e.firstChild?e.firstChild.refN:0,o=e.nextSibling?e.nextSibling.refN:0;if(i){for(let l of e.info)l.refIdx=r;e.refIdx=r,Si(t,e),n++}if(o){let l=n+s;t.collectors.push({idx:l,prevIdx:r,getVal:zt}),Ft(e.nextSibling,t,l)}s&&(t.collectors.push({idx:n,prevIdx:r,getVal:rt}),Ft(e.firstChild,t,n))}return t}function Si(e,t){for(let n of t.info)switch(n.type){case"text":e.locations.push({idx:n.idx,refIdx:n.refIdx,setData:Dn,updateData:Dn});break;case"child":n.isOnlyChild?e.children[n.idx]={parentRefIdx:n.refIdx,isOnlyChild:!0}:e.children[n.idx]={parentRefIdx:$i(t).refIdx,afterRefIdx:n.refIdx};break;case"property":{let r=n.refIdx,i=Ei(n.name);e.locations.push({idx:n.idx,refIdx:r,setData:i,updateData:i});break}case"attribute":{let r=n.refIdx,i,s;n.name==="class"?(s=Pt,i=Ze):n.name==="style"?(s=Lt,i=Je):(s=oi(n.name),i=s),e.locations.push({idx:n.idx,refIdx:r,setData:s,updateData:i});break}case"attributes":e.locations.push({idx:n.idx,refIdx:n.refIdx,setData:li,updateData:ai});break;case"handler":{let{setup:r,update:i}=jn(n.event);e.locations.push({idx:n.idx,refIdx:n.refIdx,setData:r,updateData:i});break}case"ref":{e.locations.push({idx:n.idx,refIdx:n.refIdx,setData:kn,updateData:kn}),e.cbRefs.push(n.idx);break}}}function Ci(e,t){let n=ki(e,t);return t.children.length?(n=class extends n{children;constructor(r,i){super(r),this.children=i}},n.prototype.beforeRemove=Fn.prototype.beforeRemove,(r,i=[])=>new n(r,i)):r=>new n(r)}function ki(e,t){let{refN:n,collectors:r,children:i,locations:s,cbRefs:o}=t;s.sort((y,E)=>y.idx-E.idx);let l=s.length,c=i.length,h=n>0,a=s.map(y=>y.refIdx),u=s.map(y=>y.setData),f=s.map(y=>y.updateData),m=[zt,rt],p=r.length,b=r.map(y=>y.idx&32767|(y.prevIdx&32767)<<15|(y.getVal===rt?1:0)<<30),d=i.map(y=>y.parentRefIdx&32767|(y.isOnlyChild?1:0)<<15|((y.afterRefIdx??0)&32767)<<16),S=xe.cloneNode,N=xe.insertBefore,w=Un.remove;class T{el;parentEl;data;children;refs;constructor(E){this.data=E}beforeRemove(){}remove(){w.call(this.el)}firstNode(){return this.el}moveBeforeDOMNode(E,v=this.parentEl){this.parentEl=v,N.call(v,this.el,E)}moveBeforeVNode(E,v){N.call(this.parentEl,this.el,E?E.el:v)}toString(){let E=document.createElement("div");return this.mount(E,null),E.innerHTML}mount(E,v){let C=S.call(e,!0);N.call(E,C,v),this.el=C,this.parentEl=E}patch(E,v){}}return h&&(T.prototype.mount=function(E,v){let C=S.call(e,!0),D=new Array(n);this.refs=D,D[0]=C;for(let O=0;O<p;O++){let k=b[O];D[k&32767]=m[k>>30&1].call(D[k>>15&32767])}if(l){let O=this.data;for(let k=0;k<l;k++)u[k].call(D[a[k]],O[k])}if(c){let O=this.children;for(let k=0;k<c;k++){let R=O[k];if(R){let L=d[k],we=L>>16&32767,Le=we?D[we]:null;R.isOnlyChild=!!(L&32768),R.mount(D[L&32767],Le)}}}if(N.call(E,C,v),this.el=C,this.parentEl=E,o.length){let O=this.data,k=this.refs;for(let R of o){let L=O[R];L(k[a[R]],null)}}},T.prototype.patch=function(E,v){if(this===E)return;let C=this.refs;if(l){let D=this.data,O=E.data;for(let k=0;k<l;k++){let R=D[k],L=O[k];R!==L&&f[k].call(C[a[k]],L,R)}this.data=O}if(c){let D=this.children,O=E.children;for(let k=0;k<c;k++){let R=D[k],L=O[k];if(R)L?R.patch(L,v):(v&&R.beforeRemove(),R.remove(),D[k]=void 0);else if(L){let we=d[k],Le=we>>16&32767,vr=Le?C[Le]:null;L.mount(C[we&32767],vr),D[k]=L}}}},T.prototype.remove=function(){if(o.length){let E=this.data,v=this.refs;for(let C of o){let D=E[C];D(null,v[a[C]])}}w.call(this.el)}),T}function Dn(e){zn.call(this,jt(e))}var Ai=(e,t)=>Object.getOwnPropertyDescriptor(e,t),qn,Xn,Yn,Kt;if(typeof Node<"u"){let e=Node.prototype;qn=e.insertBefore,Xn=e.appendChild,Yn=e.removeChild,Kt=Ai(e,"textContent").set}var Di=class{children;anchor;parentEl;isOnlyChild;constructor(e){this.children=e}mount(e,t){let n=this.children,r=document.createTextNode("");this.anchor=r,qn.call(e,r,t);let i=n.length;if(i){let s=n[0].mount;for(let o=0;o<i;o++)s.call(n[o],e,r)}this.parentEl=e}moveBeforeDOMNode(e,t=this.parentEl){this.parentEl=t;let n=this.children;for(let r=0,i=n.length;r<i;r++)n[r].moveBeforeDOMNode(e,t);t.insertBefore(this.anchor,e)}moveBeforeVNode(e,t){if(e){let r=e.children[0];t=(r?r.firstNode():e.anchor)||null}let n=this.children;for(let r=0,i=n.length;r<i;r++)n[r].moveBeforeVNode(null,t);this.parentEl.insertBefore(this.anchor,t)}patch(e,t){if(this===e)return;let n=this.children,r=e.children;if(r.length===0&&n.length===0)return;this.children=r;let i=r[0]||n[0],{mount:s,patch:o,remove:l,beforeRemove:c,moveBeforeVNode:h,firstNode:a}=i,u=this.anchor,f=this.isOnlyChild,m=this.parentEl;if(r.length===0&&f){if(t)for(let v=0,C=n.length;v<C;v++)c.call(n[v]);Kt.call(m,""),Xn.call(m,u);return}let p=0,b=0,d=n[0],S=r[0],N=n.length-1,w=r.length-1,T=n[N],y=r[w],E;for(;p<=N&&b<=w;){if(d===null){d=n[++p];continue}if(T===null){T=n[--N];continue}let v=d.key,C=S.key;if(v===C){o.call(d,S,t),r[b]=d,d=n[++p],S=r[++b];continue}let D=T.key,O=y.key;if(D===O){o.call(T,y,t),r[w]=T,T=n[--N],y=r[--w];continue}if(v===O){o.call(d,y,t),r[w]=d;let R=r[w+1];h.call(d,R,u),d=n[++p],y=r[--w];continue}if(D===C){o.call(T,S,t),r[b]=T;let R=n[p];h.call(T,R,u),T=n[--N],S=r[++b];continue}E=E||_i(n,p,N);let k=E[C];if(k===void 0)s.call(S,m,a.call(d)||null);else{let R=n[k];h.call(R,d,null),o.call(R,S,t),r[b]=R,n[k]=null}S=r[++b]}if(p<=N||b<=w)if(p>N){let v=r[w+1],C=v?a.call(v)||null:u;for(let D=b;D<=w;D++)s.call(r[D],m,C)}else for(let v=p;v<=N;v++){let C=n[v];C&&(t&&c.call(C),l.call(C))}}beforeRemove(){let e=this.children,t=e.length;if(t){let n=e[0].beforeRemove;for(let r=0;r<t;r++)n.call(e[r])}}remove(){let{parentEl:e,anchor:t}=this;if(this.isOnlyChild)Kt.call(e,"");else{let n=this.children,r=n.length;if(r){let i=n[0].remove;for(let s=0;s<r;s++)i.call(n[s])}Yn.call(e,t)}}firstNode(){let e=this.children[0];return e?e.firstNode():void 0}toString(){return this.children.map(e=>e.toString()).join("")}};function Zn(e){return new Di(e)}function _i(e,t,n){let r={};for(let i=t;i<=n;i++)r[e[i].key]=i;return r}var be,Jn;if(typeof Node<"u"){let e=Node.prototype;be=e.insertBefore,Jn=e.removeChild}var Oi=class{html;parentEl;content=[];constructor(e){this.html=e}mount(e,t){this.parentEl=e;let n=document.createElement("template");n.innerHTML=this.html,this.content=[...n.content.childNodes];for(let r of this.content)be.call(e,r,t);if(!this.content.length){let r=document.createTextNode("");this.content.push(r),be.call(e,r,t)}}moveBeforeDOMNode(e,t=this.parentEl){this.parentEl=t;for(let n of this.content)be.call(t,n,e)}moveBeforeVNode(e,t){let n=e?e.content[0]:t;this.moveBeforeDOMNode(n)}patch(e){if(this===e)return;let t=e.html;if(this.html!==t){let n=this.parentEl,r=this.content[0],i=document.createElement("template");i.innerHTML=t;let s=[...i.content.childNodes];for(let o of s)be.call(n,o,r);if(!s.length){let o=document.createTextNode("");s.push(o),be.call(n,o,r)}this.remove(),this.content=s,this.html=e.html}}beforeRemove(){}remove(){let e=this.parentEl;for(let t of this.content)Jn.call(e,t)}firstNode(){return this.content[0]}toString(){return this.html}};function Ht(e){return new Oi(e)}function xi(e){let t=Object.keys(e).length;class n{child;handlerData;handlerFns=[];parentEl;afterNode=null;constructor(i,s){this.child=i,this.handlerData=s}mount(i,s){this.parentEl=i,this.child.mount(i,s),this.afterNode=document.createTextNode(""),i.insertBefore(this.afterNode,s),this.wrapHandlerData();for(let o in e){let l=e[o],c=jn(o);this.handlerFns[l]=c,c.setup.call(i,this.handlerData[l])}}wrapHandlerData(){for(let i=0;i<t;i++){let s=this.handlerData[i],o=s.length-2,l=s[o],c=this;s[o]=function(h,a){let u=a.target,f=c.child.firstNode(),m=c.afterNode;for(;f&&f!==m;){if(f.contains(u))return l(h,a);f=f.nextSibling}}}}moveBeforeDOMNode(i,s=this.parentEl){this.parentEl=s,this.child.moveBeforeDOMNode(i,s),s.insertBefore(this.afterNode,i)}moveBeforeVNode(i,s){i&&(s=i.firstNode()||s),this.child.moveBeforeVNode(i?i.child:null,s),this.parentEl.insertBefore(this.afterNode,s)}patch(i,s){if(this!==i){this.handlerData=i.handlerData,this.wrapHandlerData();for(let o=0;o<t;o++)this.handlerFns[o].update.call(this.parentEl,this.handlerData[o]);this.child.patch(i.child,s)}}beforeRemove(){this.child.beforeRemove()}remove(){for(let i=0;i<t;i++)this.handlerFns[i].remove.call(this.parentEl);this.child.remove(),this.afterNode.remove()}firstNode(){return this.child.firstNode()}toString(){return this.child.toString()}}return function(r,i){return new n(r,i)}}function et(e,t,n=null){e.mount(t,n)}function Ri(e,t,n=!1){e.patch(t,n)}function Mi(e,t=!1){t&&e.beforeRemove(),e.remove()}function Ii(e){switch(e.__owl__.status){case A.NEW:return"new";case A.CANCELLED:return"cancelled";case A.MOUNTED:return e instanceof qe?"started":"mounted";case A.DESTROYED:return"destroyed"}}var _n=1e3;function Pi(e,t){let n=e.fiber;return n&&(Gt(n.children),n.root=null),new ot(e,t)}function Li(e){let t=e.fiber;if(t){let r=t.root;return r.renderCount++,r.locked=!0,r.setCounter(r.counter+1-Gt(t.children)),r.locked=!1,t.children=[],t.childrenMap={},t.bdom=null,Q.has(t)&&(Q.delete(t),Q.delete(r),t.appliedToDom=!1,t instanceof it&&(t.mounted=t instanceof Qn?[t]:[])),t}let n=new it(e,null);return e.willPatch.length&&n.willPatch.push(n),e.patched.length&&n.patched.push(n),n}function Bi(){throw new g("Attempted to render cancelled fiber")}function Gt(e){let t=0;for(let n of e){let r=n.node;n.render=Bi,r.status===A.NEW&&r.cancel(),r.fiber=null,n.bdom?r.forceNextRender=!0:(t++,r.bdom&&(r.forceNextRender=!0)),t+=Gt(n.children)}return t}var ot=class{node;bdom=null;root;parent;children=[];appliedToDom=!1;deep=!1;childrenMap={};constructor(e,t){if(this.node=e,this.parent=t,t){this.deep=t.deep;let n=t.root;n.setCounter(n.counter+1),this.root=n,t.children.push(this)}else this.root=this}render(){let e=this.root.node.app.scheduler;if(e.tasks.size>1){let r=this.root.node,i=r.parent;for(;i;){if(i.fiber){let s=i.fiber.root;if(s.counter===0&&r.parentKey in i.fiber.childrenMap)i=s.node;else{e.delayedRenders.push(this);return}}r=i,i=i.parent}}let t=this.node,n=this.root;if(n){if(n.renderCount>_n){ue({node:t,error:new g(`Maximum render iterations (${_n}) exceeded. Component "${t.componentName}" is stuck in a render loop: rendering it keeps triggering another render before the DOM is updated. A common cause is updating reactive state during render or setup() \u2014 e.g. calling a parent's state setter from a child's setup().`)});return}let r=z();Se(t.signalComputation),P(t.signalComputation),t.signalComputation.state=$e.EXECUTED;try{this.bdom=!0,this.bdom=t.renderFn()}catch(s){ue({node:t,error:s})}finally{P(r)}let i=n.counter-1;n.counter=i,i===0&&e.flush()}}},it=class extends ot{counter=1;renderCount=0;willPatch=[];patched=[];mounted=[];locked=!1;complete(){let e=this.node;this.locked=!0;let t,n=this.mounted;try{for(t of this.willPatch){let i=t.node;if(i.fiber===t){let s=i.component;for(let o of i.willPatch)o.call(s)}}for(t=void 0,e._patch(),this.locked=!1;t=n.pop();)if(t=t,t.appliedToDom)for(let i of t.node.mounted)i();let r=this.patched;for(;t=r.pop();)if(t=t,t.appliedToDom)for(let i of t.node.patched)i()}catch(r){for(let i of n)i.node.willUnmount=[];this.locked=!1,ue({fiber:t||this,error:r})}}setCounter(e){this.counter=e,e===0&&this.node.app.scheduler.flush()}},Qn=class extends it{target;position;afterNode=null;prepared=!1;onPrepared=null;constructor(e,t,n={}){super(e,null),this.target=t,this.position=n.position||"last-child",this.afterNode=n.afterNode??null}complete(){this.prepared=!0,this.target?this._mount():(this.appliedToDom=!0,this.onPrepared?.())}commit(e,t={}){this.target=e,this.position=t.position||"last-child",this.afterNode=t.afterNode??null,this.prepared&&this._mount()}_mount(){let e=this;try{let t=this.node;if(t.children=this.childrenMap,t.app.constructor.validateTarget(this.target),t.bdom)t.updateDom();else if(t.bdom=this.bdom,this.afterNode)et(t.bdom,this.target,this.afterNode);else if(this.position==="last-child"||this.target.childNodes.length===0)et(t.bdom,this.target);else{let r=this.target.childNodes[0];et(t.bdom,this.target,r)}t.fiber=null,t.status=A.MOUNTED,this.appliedToDom=!0;let n=this.mounted;for(;e=n.pop();)if(e.appliedToDom)for(let r of e.node.mounted)r()}catch(t){ue({fiber:e,error:t})}}},Ie=class extends Ce{fiber=null;component;bdom=null;componentName;forceNextRender=!1;parentKey;props;defaultProps=null;renderFn;parent;children=Object.create(null);willUpdateProps=[];propsUpdated=[];willUnmount=[];mounted=[];willPatch=[];patched=[];signalComputation;trackedRefs=null;constructor(e,t,n,r,i){super(n),this.parent=r,this.parentKey=i,this.pluginManager=r?r.pluginManager:n.pluginManager,this.componentName=e.name,this.signalComputation=Ke(()=>this.render(!1),!1,$e.EXECUTED),this.props=t;let s=z();P(void 0),H.push(this);try{this.component=new e(this);let o={this:this.component,__owl__:this};this.renderFn=n.getTemplate(e.template).bind(this.component,o,this),this.component.setup()}finally{H.pop(),P(s)}}decorate(e,t){let n=this.component,r=this;if(this.app.dev){let i=`${this.componentName}.${t}`;return{[i](...o){return e.call(n,r,...o)}}[i]}return e.bind(n,r)}async initiateRender(e){this.fiber=e,this.mounted.length&&e.root.mounted.push(e);let t=this.component,n=z();P(void 0);try{let r=this.willStart.map(i=>i.call(t));P(n),await Promise.all(r)}catch(r){if(Ve(r)&&this.status>A.MOUNTED)return;ue({node:this,error:r});return}this.status===A.NEW&&this.fiber===e&&e.render()}async render(e){if(this.status>=A.CANCELLED)return;let t=this.fiber;if(t&&(t.root.locked||t.bdom===!0)&&(await Promise.resolve(),t=this.fiber),t){if(!t.bdom&&!Q.has(t)){e&&(t.deep=e);return}e=e||t.deep}else if(!this.bdom)return;let n=Li(this);n.deep=e,this.fiber=n,this.app.scheduler.addFiber(n),await Promise.resolve(),!(this.status>=A.CANCELLED)&&this.fiber===n&&(t||!n.parent)&&n.render()}cancel(){this._cancel(),delete this.parent.children[this.parentKey],this.app.scheduler.scheduleDestroy(this)}_cancel(){super.cancel();let e=this.children;for(let t in e)e[t]._cancel()}destroy(){let e=this.status===A.MOUNTED;J++;try{this._destroy()}finally{J--}e&&(this.bdom.remove(),xt())}_destroy(){let e=this.component;if(this.status===A.MOUNTED)for(let t of this.willUnmount)t.call(e);J&&this.trackedRefs&&(tt||=[]).push(this);for(let t in this.children)this.children[t]._destroy();this.finalize(t=>ue({error:t,node:this})),ze(this.signalComputation)}sweepRefs(){let e=this.trackedRefs;if(e)for(let[t,n]of e){let r=n.value;r?r.isConnected||(t.set(null),e.delete(t)):e.delete(t)}}updateDom(){if(this.fiber)if(this.bdom===this.fiber.bdom)for(let e in this.children)this.children[e].updateDom();else{J++;try{this.bdom.patch(this.fiber.bdom,!1)}finally{J--}this.sweepRefs(),xt(),this.fiber.appliedToDom=!0,this.fiber=null}}firstNode(){let e=this.bdom;return e?e.firstNode():void 0}mount(e,t){let n=this.fiber.bdom;this.bdom=n,n.mount(e,t),this.status=A.MOUNTED,this.fiber.appliedToDom=!0,this.children=this.fiber.childrenMap,this.fiber=null}moveBeforeDOMNode(e,t){this.bdom.moveBeforeDOMNode(e,t)}moveBeforeVNode(e,t){this.bdom.moveBeforeVNode(e?e.bdom:null,t)}trackRef(e,t){(this.trackedRefs||=new Map).set(e,t)}patch(){this.fiber&&this.fiber.parent&&this._patch()}_patch(){let e=!1;for(let n in this.children){e=!0;break}let t=this.fiber;this.children=t.childrenMap,J++;try{this.bdom.patch(t.bdom,e)}finally{J--}this.sweepRefs(),xt(),t.appliedToDom=!0,this.fiber=null}beforeRemove(){this._destroy()}remove(){this.bdom.remove()}},J=0,tt=null;function xt(){if(J===0&&tt){let e=tt;tt=null;for(let t=0;t<e.length;t++)e[t].sweepRefs()}}function G(){let e=K();if(!(e instanceof Ie))throw new g("Expected to be in a component scope");return e}var er;typeof window<"u"&&(er=window.requestAnimationFrame.bind(window));var ji=class tr{static requestAnimationFrame=er;tasks=new Set;requestAnimationFrame;frame=0;delayedRenders=[];cancelledNodes=new Set;processing=!1;constructor(){this.requestAnimationFrame=tr.requestAnimationFrame,this.processTasks=this.processTasks.bind(this)}addFiber(t){this.tasks.add(t.root)}scheduleDestroy(t){this.cancelledNodes.add(t),this.frame===0&&(this.frame=this.requestAnimationFrame(this.processTasks))}flush(){if(this.delayedRenders.length){let t=this.delayedRenders;this.delayedRenders=[];for(let n of t)n.root&&n.node.status!==A.DESTROYED&&n.node.fiber===n&&n.render()}this.frame===0&&(this.frame=this.requestAnimationFrame(this.processTasks))}processTasks(){if(!this.processing){this.processing=!0,this.frame=0,this.processCancelledNodes();for(let t of this.tasks){if(t.root!==t){this.tasks.delete(t);continue}let n=Q.has(t);if(n&&t.counter!==0){this.tasks.delete(t);continue}if(t.node.status===A.DESTROYED){this.tasks.delete(t);continue}t.counter===0&&(n||t.complete(),t.appliedToDom&&this.tasks.delete(t))}for(let t of this.tasks)t.node.status===A.DESTROYED&&this.tasks.delete(t);this.processing=!1}}processCancelledNodes(){for(let t of this.cancelledNodes)t._destroy();this.cancelledNodes.clear();for(let t of this.tasks)t.node.status===A.DESTROYED&&this.tasks.delete(t)}},ee=class{static template="";__owl__;constructor(e){this.__owl__=e}setup(){}},Vi=Object.create;function Fi(e,t){return e==null||e===!1?t:e}function Ki(e,t,n,r,i,s,o){n=n+"__slot_"+r;let l=e.__owl__.props.slots||{},{__render:c,__ctx:h,__scope:a}=l[r]||{},u=Vi(h||{});a&&(u[a]=s);let f=c?c(u,t,n):null;if(o){let m,p;return f?m=i?ae(r,f):f:p=o(e,t,n),Ut([m,p])}return f||Me("")}function Wi(e,t){return e.key=t,e}function Ui(e){let t,n;if(Array.isArray(e))t=e,n=e;else if(e instanceof Map)t=[...e.keys()],n=[...e.values()];else if(Symbol.iterator in Object(e))t=[...e],n=t;else if(e&&typeof e=="object")n=Object.values(e),t=Object.keys(e);else throw new g(`Invalid loop expression: "${e}" is not iterable`);let r=n.length;return[t,n,r,new Array(r)]}function zi(e){let t=parseFloat(e);return isNaN(t)?e:t}function Hi(e,t){for(let n=0,r=e.length;n<r;n++)if(e[n]!==t[n])return!1;return!0}var nr=class{fn;ctx;component;node;key;constructor(e,t,n,r,i){this.fn=e,this.ctx=t,this.component=n,this.node=r,this.key=i}evaluate(){return this.fn.call(this.component,this.ctx,this.node,this.key)}toString(){return this.evaluate().toString()}};function Gi(e,t){if(e==null)return t?ae("default",t):ae("undefined",Me(""));let n,r;return e instanceof Ee?(n="string_safe",r=Ht(e)):e instanceof nr?(n="lazy_value",r=e.evaluate()):(n="string_unsafe",r=Me(e)),ae(n,r)}function qi(e,t){if(!e)throw new g("Ref is undefined or null");let n,r;if(e.add&&e.delete)n=e.add.bind(e),r=e.delete.bind(e);else if(e.set){n=e.set.bind(e);let i=e[ie];r=i?s=>{i.value===s&&e.set(null)}:()=>e.set(null),i&&t.trackRef(e,i)}else throw new g("Ref should implement either a 'set' function or 'add' and 'delete' functions");return(i,s)=>{s&&r(s),i&&n(i)}}function Xi(e,t,n){if(typeof e!="function")throw new g(`Invalid handler expression: the \`t-on\` expression should evaluate to a function, but got '${typeof e}'. Did you mean to use an arrow function? (e.g. \`t-on-click="() => expr"\`)`);e.call(t.this,n)}var On=new WeakMap;function Yi(e,t,n){let r=On.get(e);r||(r=new Map,On.set(e,r));let i=r.get(t);if(i)return i.set(n),i.readonly;let s=x(n);return s.readonly=se(s),r.set(t,s),s.readonly}function Zi(e){if(typeof e!="function"||typeof e.set!="function")throw new g("Invalid t-model expression: expression should evaluate to a function with a 'set' method defined on it");return e}function Ji(e,t,n,r,i,s){let o=!n,l,c=s.length===0;r?l=(a,u)=>!0:i?l=function(a,u){for(let f in a)if(a[f]!==u[f])return!0;return Object.keys(a).length!==Object.keys(u).length}:c?l=(a,u)=>!1:l=function(a,u){for(let f of s)if(a[f]!==u[f])return!0;return!1};let h=Ie.prototype.initiateRender;return(a,u,f,m,p)=>{let b=f.children,d=b[u];o&&d&&d.component.constructor!==p&&(d=void 0);let S=f.fiber;if(d){if(l(d.props,a)||S.deep||d.forceNextRender){d.forceNextRender=!1;let N=d.willUpdateProps,w=Pi(d,S);d.fiber=w;let T=S.root;d.willPatch.length&&T.willPatch.push(w),d.patched.length&&T.patched.push(w);let y;if(N.length){let E=a,v=d.defaultProps;if(v){E=Object.assign({},a);for(let O in v)E[O]===void 0&&(E[O]=v[O])}let C=d.component,D=z();P(void 0);for(let O of N){let k=O.call(C,E);k&&typeof k.then=="function"&&(y||=[]).push(k)}P(D)}if(y)(y.length===1?y[0]:Promise.all(y)).then(()=>{if(w===d.fiber){d.props=a;for(let v of d.propsUpdated)v();w.render()}},v=>{ue({node:d,error:v})});else{d.props=a;for(let E of d.propsUpdated)E();w.render()}}}else{if(n){let w=m.constructor.components;if(!w)throw new g(`Cannot find the definition of component "${t}", missing static components key in parent`);if(p=w[t],p){if(!(p.prototype instanceof ee))throw new g(`"${t}" is not a Component. It must inherit from the Component class`)}else throw new g(`Cannot find the definition of component "${t}"`)}d=new Ie(p,a,e,f,u),b[u]=d;let N=new ot(d,S);d.willStart.length?h.call(d,N):(d.fiber=N,d.mounted.length&&N.root.mounted.push(N),N.render())}return S.childrenMap[u]=d,d}}function Qi(e,t,n,r,i,s){let o=n.getTemplate(e);return ae(e,o.call(t,r,i,s+e))}var es={withDefault:Fi,zero:Symbol("zero"),callSlot:Ki,withKey:Wi,prepareList:Ui,shallowEqual:Hi,toNumber:zi,LazyValue:nr,safeOutput:Gi,createCatcher:xi,markRaw:He,OwlError:g,createRef:qi,modelExpr:Zi,createComponent:Ji,callTemplate:Qi,callHandler:Xi,toSignal:Yi},ts={text:Me,createBlock:Hn,list:Zn,multi:Ut,html:Ht,toggler:ae},Pe=class{static registerTemplate(e,t){st[e]=t}dev;rawTemplates=Object.create(st);templates={};getRawTemplate;translateFn;translatableAttributes;customDirectives;runtimeUtils;hasGlobalValues;constructor(e={}){if(this.dev=e.dev||!1,this.translateFn=e.translateFn,this.translatableAttributes=e.translatableAttributes,e.templates)if(e.templates instanceof Document||typeof e.templates=="string")this.addTemplates(e.templates);else for(let t in e.templates)this.addTemplate(t,e.templates[t]);this.getRawTemplate=e.getTemplate,this.customDirectives=e.customDirectives||{},this.runtimeUtils={...es,__globals__:e.globalValues||{}},this.hasGlobalValues=!!(e.globalValues&&Object.keys(e.globalValues).length)}addTemplate(e,t){if(e in this.rawTemplates){if(!this.dev)return;let n=this.rawTemplates[e];if(ns(n,t))return;throw new g(`Template ${e} already defined with different content`)}this.rawTemplates[e]=t}addTemplates(e){if(e){e=e instanceof Document?e:this._parseXML(e);for(let t of e.querySelectorAll("[t-name]")){let n=t.getAttribute("t-name");this.addTemplate(n,t)}}}getTemplate(e){let t=e;if(!(t in this.templates)){let n=this.getRawTemplate?.(e)||this.rawTemplates[e];if(n===void 0){let l="",c=oe();throw c instanceof Ie&&(l=` (for component "${c.componentName}")`),new g(`Missing template: "${e}"${l}`)}let i=typeof n=="function"&&!(n instanceof Element)?n:this._compileTemplate(e,n),s=this.templates;this.templates[t]=function(l,c){return s[t].call(this,l,c)};let o=i(this,ts,this.runtimeUtils);this.templates[t]=o}return this.templates[t]}_compileTemplate(e,t){throw new g("Unable to compile a template. Please use owl full build instead")}_parseXML(e){throw new g("Unable to parse XML templates. Please use owl full build instead, or pass a Document instance.")}},st={};function te(...e){let t=`__template__${te.nextId++}`,n=String.raw(...e);return st[t]=n,t}te.nextId=1;function ns(e,t){if(e===t)return!0;if(typeof e=="function"!=(typeof t=="function"))return!1;let n=e instanceof Element?e.outerHTML:String(e),r=t instanceof Element?t.outerHTML:String(t);return n===r}var xn=!1,nt=new Set;typeof window<"u"&&(window.__OWL_DEVTOOLS__||={apps:nt,Fiber:ot,RootFiber:it,toRaw:Y,proxy:ke});var qt=class rr extends Pe{static validateTarget=hi;static apps=nt;static version=ii;name;scheduler=new ji;roots=new Set;pluginManager;destroyed=!1;constructor(t={}){super(t),this.name=t.name||"",nt.add(this),this.pluginManager=new ge(this,{config:t.config}),t.plugins?Xe(this.pluginManager,t.plugins):this.pluginManager.status=A.MOUNTED,t.test&&(this.dev=!0),this.dev&&!t.test&&!xn&&(console.info("Owl is running in 'dev' mode."),xn=!0)}createRoot(t,n={}){let r=n.props||{},i,s,o=new Promise((p,b)=>{i=p,s=b}),l,c=null;try{l=new Ie(t,r,this,null,null)}catch(p){c=p,s(p)}let h=null,a=null,u=()=>{if(a)return a;if(c)return Promise.reject(c);h=new Qn(l,null);let p=ce.get(l);if(p||(p=[],ce.set(l,p)),p.unshift((d,S)=>{let N=S();s(N)}),a=new Promise(d=>{h.onPrepared=()=>d()}),l.mounted.push(()=>{i(l.component),p.shift()}),this.scheduler.addFiber(h),this.pluginManager.status<A.MOUNTED&&l.willStart.unshift(()=>this.pluginManager.ready),l.willStart.length)l.initiateRender(h);else{l.fiber=h,l.mounted.length&&h.root.mounted.push(h);try{h.render()}catch(d){s(d)}}return a},m={node:l,promise:o,prepare:u,mount:(p,b)=>(c||(rr.validateTarget(p),u(),h.commit(p,b)),o),destroy:()=>{this.roots.delete(m),l?.destroy(),this.scheduler.processCancelledNodes()}};return this.roots.add(m),m}destroy(){for(let t of this.roots)t.destroy();this.pluginManager.destroy(),this.scheduler.processCancelledNodes(),this.scheduler.tasks.clear(),this.scheduler.delayedRenders=[],nt.delete(this),this.destroyed=!0}_handleError(t){throw t}};async function rs(e,t,n={}){return new qt(n).createRoot(e,n).mount(t,n)}var is=(e,t,n)=>{let{data:r,modifiers:i}=In(e);e=r;let s=!1;if(i.length){let o=!1,l=t.target===n;for(let c of i)switch(c){case"self":if(o=!0,l)continue;return s;case"prevent":(o&&l||!o)&&t.preventDefault();continue;case"stop":(o&&l||!o)&&t.stopPropagation(),s=!0;continue}}if(Object.hasOwnProperty.call(e,0)){let o=e[0];if(typeof o!="function")throw new g(`Invalid handler (expected a function, received: '${o}')`);let l=e[1]?e[1].__owl__:null;(!l||l.status===A.MOUNTED)&&o(e[1],t)}return s};function ss(e){let t=G();function n(r,i){return e.call(this,i,r)}t.willUpdateProps.push(t.decorate(n,"onWillUpdateProps"))}function ir(e){let t=G();t.mounted.push(t.decorate(e,"onMounted"))}function os(e){let t=G();t.willPatch.unshift(t.decorate(e,"onWillPatch"))}function ls(e){let t=G();t.patched.push(t.decorate(e,"onPatched"))}function as(e){let t=G();t.willUnmount.unshift(t.decorate(e,"onWillUnmount"))}function sr(e){let t=G(),n=ce.get(t);n||(n=[],ce.set(t,n)),n.push(e.bind(t.component))}function cs(e,t){let n=G(),r=le(t),i=n.props[e];return n.app.dev&&(t!==void 0&&(!r||i!==void 0)&&W(i,t,`Invalid prop '${e}' in '${n.componentName}'`),n.willUpdateProps.push(s=>{if(s[e]!==n.props[e])throw new g(`Prop '${e}' changed in component '${n.componentName}'. Props declared with \`props.static()\` are static and should not change. If the prop is a signal, pass the same signal reference (its inner value may change).`)})),i===void 0&&r?r():i}function us(){return $t(ee)}var j={...kt,component:us};function fs(e){let t=G(),{app:n,componentName:r}=t,i=null;if(e&&!Array.isArray(e))for(let u in e){let f=le(e[u]);f&&((i||={})[u]=f())}i&&(t.defaultProps=Object.assign(t.defaultProps||{},i));function s(u,f){return u[f]===void 0&&i&&f in i?i[f]:u[f]}let o=Object.create(null),l=Object.create(null);function c(u){o[u]=x(s(t.props,u)),Reflect.defineProperty(l,u,{enumerable:!0,configurable:!0,get:o[u]})}function h(u){for(let f of u)c(f)}function a(u){for(let f of u)o[f].set(s(t.props,f))}if(e){let u=Array.isArray(e)?e:Object.keys(e);if(h(u),t.propsUpdated.push(()=>a(u)),n.dev){if(i){let m={};for(let p in e)p in i&&(m[p]=e[p]);W(i,j.object(m),`Invalid component default props (${r})`)}let f=j.object(e);W(t.props,f,`Invalid component props (${r})`),t.willUpdateProps.push(m=>{W(m,f,`Invalid component props (${r})`)})}}else{let u=m=>{let p=[];for(let b in m)b.charCodeAt(0)!==1&&p.push(b);return p},f=u(t.props);h(f),t.propsUpdated.push(()=>{let m=u(t.props),p=new Set(m);for(let b of f)p.has(b)||(Reflect.deleteProperty(l,b),delete o[b]);for(let b of m)b in o||c(b);a(m),f=m})}return l}var lt=Object.assign(fs,{static:cs}),hs=class extends ee{static template=te`
1
+ "use strict";var owl=(()=>{var ht=Object.defineProperty;var yr=Object.getOwnPropertyDescriptor;var wr=Object.getOwnPropertyNames;var Tr=Object.prototype.hasOwnProperty;var Nr=(e,t)=>{for(var n in t)ht(e,n,{get:t[n],enumerable:!0})},Er=(e,t,n,r)=>{if(t&&typeof t=="object"||typeof t=="function")for(let i of wr(t))!Tr.call(e,i)&&i!==n&&ht(e,i,{get:()=>t[i],enumerable:!(r=yr(t,i))||r.enumerable});return e};var $r=e=>Er(ht({},"__esModule",{value:!0}),e);var co={};Nr(co,{App:()=>qt,Component:()=>ee,ErrorBoundary:()=>hs,EventBus:()=>Tn,OwlError:()=>g,Plugin:()=>qe,Portal:()=>ms,Registry:()=>mn,Resource:()=>gn,Scope:()=>ke,Suspense:()=>vs,TemplateSet:()=>Le,__info__:()=>Ts,applyDefaults:()=>hn,assertType:()=>W,asyncComputed:()=>ln,batched:()=>vt,blockDom:()=>ws,computed:()=>se,config:()=>wn,effect:()=>De,getDefault:()=>le,getScope:()=>oe,globalTemplates:()=>st,htmlEscape:()=>At,markRaw:()=>He,markup:()=>Ee,mount:()=>rs,onError:()=>sr,onMounted:()=>ir,onPatched:()=>ls,onWillDestroy:()=>Z,onWillPatch:()=>os,onWillStart:()=>Ye,onWillUnmount:()=>as,onWillUpdateProps:()=>ss,plugin:()=>yn,props:()=>lt,providePlugins:()=>ys,proxy:()=>Ae,signal:()=>x,status:()=>Ii,t:()=>j,toRaw:()=>Y,types:()=>j,untrack:()=>wt,useApp:()=>ds,useEffect:()=>_e,useListener:()=>bn,useScope:()=>K,validateType:()=>Nt,whenReady:()=>di,xml:()=>te});var g=class extends Error{cause},A={NEW:0,MOUNTED:1,CANCELLED:2,DESTROYED:3};function vt(e){let t=!1;return function(...r){t||(t=!0,Promise.resolve().then(()=>{t=!1,e(...r)}))}}var Se=(e=>(e[e.EXECUTED=0]="EXECUTED",e[e.STALE=1]="STALE",e[e.PENDING=2]="PENDING",e))(Se||{}),ie=Symbol("Atom"),Ve=[],V;function We(e,t,n=1){return{state:n,value:void 0,compute:e,sources:new Set,observers:new Set,isDerived:t}}function yt(e){V&&(V.sources.add(e),e.observers.add(V))}function de(e){for(let t of e.observers)t.state===0&&(t.isDerived?kr(t):Ve.push(t)),t.state=1;Sr()}var Sr=vt(Cr);function Cr(){let e=Ve;Ve=[];for(let t=0;t<e.length;t++)Ue(e[t])}function z(){return V}function P(e){V=e}function Ue(e){let t=e.state;if(t===0)return;if(t===2){for(let r of e.sources)if("compute"in r&&(Ue(r),e.state===1))break;if(e.state!==1){e.state=0;return}}Ce(e);let n=V;V=e;try{e.value=e.compute(),e.state=0}finally{V=n}}function Ce(e){let t=e.sources;for(let n of t)n.observers.delete(e);t.clear()}function ze(e){let t=e.sources;for(let n of t){n.observers.delete(e);let r=n;r.isDerived&&r.observers.size===0&&ze(r)}t.clear(),e.state=1}function kr(e){let t=[e],n;for(;n=t.pop();)for(let r of n.observers)r.state||(r.state=2,r.isDerived?t.push(r):Ve.push(r))}function wt(e){let t=V;V=void 0;let n;try{n=e()}finally{V=t}return n}var H=[];function K(){let e=oe();if(!e)throw new g("No active scope");return e}var ke=class{app;pluginManager;status=A.NEW;computations=[];willStart=[];_controller=null;_destroyCbs=null;constructor(e){this.app=e,this.pluginManager=e.pluginManager}run(e){H.push(this);try{return e()}finally{H.pop()}}get abortSignal(){return this.status>A.MOUNTED?(this._controller||(this._controller=new AbortController,this._controller.abort()),this._controller.signal):(this._controller??=new AbortController).signal}async until(e){if(this.status>A.MOUNTED)throw en();let t=await e;if(this.status>A.MOUNTED)throw en();return t}onDestroy(e){if(this.status>=A.DESTROYED){e();return}(this._destroyCbs??=[]).push(e)}cancel(){this.status>A.MOUNTED||(this.status=A.CANCELLED,this._controller?.abort())}finalize(e){if(this.status>=A.DESTROYED)return;this._controller&&!this._controller.signal.aborted&&this._controller.abort();let t=this._destroyCbs;if(t){this._destroyCbs=null;for(let n=t.length-1;n>=0;n--)try{t[n]()}catch(r){e(r)}}for(let n of this.computations)ze(n);this.status=A.DESTROYED}decorate(e,t){return e.bind(void 0,this)}};function oe(){let e=H.length;return e?H[e-1]:null}function Fe(e){return typeof e=="object"&&e!==null&&e.name==="AbortError"}function en(){let e=new Error("The operation was aborted");return e.name="AbortError",e}var U=Symbol("Key changes"),Ar=Object.prototype.toString,pt=Object.prototype.hasOwnProperty;function Tt(e){if(typeof e!="object"||e===null)return!1;let t=Y(e);return Array.isArray(t)||t instanceof Set||t instanceof Map||t instanceof WeakMap?!0:Ar.call(t)==="[object Object]"}function he(e,t){return!t&&Tt(e)?Ae(e):e}var sn=new WeakSet;function He(e){return sn.add(e),e}function Y(e){return Ke.has(e)?Ke.get(e):e}var mt=new WeakMap;function Dr(e,t){let n=mt.get(e);n||(n=new Map,mt.set(e,n));let r=n.get(t);return r||(r={value:void 0,observers:new Set},n.set(t,r)),r}function F(e,t,n){yt(n??Dr(e,t))}function X(e,t){let n=mt.get(e);n&&n.has(t)&&de(n.get(t))}var Ke=new WeakMap,tn=new WeakMap;function pe(e,t){if(!Tt(e))throw new g("Cannot make the given value reactive");if(sn.has(e)||Ke.has(e))return e;let n=tn.get(e);if(n)return n;let r;e instanceof Map?r=dt(e,"Map",t):e instanceof Set?r=dt(e,"Set",t):e instanceof WeakMap?r=dt(e,"WeakMap",t):r=on(t);let i=new Proxy(e,r);return tn.set(e,i),Ke.set(i,e),i}function Ae(e){return pe(e,null)}function on(e){return{get(t,n,r){F(t,n,e);let i=Reflect.get(t,n,r);if(e||typeof i!="object"||i===null||!Tt(i))return i;let s=Object.getOwnPropertyDescriptor(t,n);return s&&!s.writable&&!s.configurable?i:pe(i,null)},set(t,n,r,i){let s=pt.call(t,n),o=Reflect.get(t,n,i),l=Reflect.set(t,n,Y(r),i),c=!s&&pt.call(t,n),h=o!==Reflect.get(t,n,i);return e?(c||h)&&de(e):(c&&X(t,U),(h||n==="length"&&Array.isArray(t))&&X(t,n)),l},deleteProperty(t,n){let r=Reflect.deleteProperty(t,n);return e?de(e):(X(t,U),X(t,n)),r},ownKeys(t){return F(t,U,e),Reflect.ownKeys(t)},has(t,n){return F(t,U,e),Reflect.has(t,n)}}}function Ne(e,t,n){return r=>(r=Y(r),F(t,r,null),he(t[e](r),n))}function q(e,t,n){return function*(){F(t,U,null);let r=t.keys();for(let i of t[e]()){let s=r.next().value;F(t,s,null),yield he(i,n)}}}function nn(e,t){return function(r,i){F(e,U,null),e.forEach(function(s,o,l){F(e,o,null),r.call(i,he(s,t),he(o,t),he(l,t))},i)}}function fe(e,t,n){return(r,i)=>{r=Y(r);let s=n.has(r),o=n[t](r),l=n[e](r,i),c=n.has(r);return s!==c&&X(n,U),o!==n[t](r)&&X(n,r),l}}function rn(e){return()=>{let t=[...e.keys()];e.clear(),X(e,U);for(let n of t)X(e,n)}}var _r={Set:(e,t)=>({has:Ne("has",e,t),add:fe("add","has",e),delete:fe("delete","has",e),keys:q("keys",e,t),values:q("values",e,t),entries:q("entries",e,t),[Symbol.iterator]:q(Symbol.iterator,e,t),forEach:nn(e,t),clear:rn(e),get size(){return F(e,U,null),e.size}}),Map:(e,t)=>({has:Ne("has",e,t),get:Ne("get",e,t),set:fe("set","get",e),delete:fe("delete","has",e),keys:q("keys",e,t),values:q("values",e,t),entries:q("entries",e,t),[Symbol.iterator]:q(Symbol.iterator,e,t),forEach:nn(e,t),clear:rn(e),get size(){return F(e,U,null),e.size}}),WeakMap:(e,t)=>({has:Ne("has",e,t),get:Ne("get",e,t),set:fe("set","get",e),delete:fe("delete","has",e)})};function dt(e,t,n){let r=_r[t](e,n);return Object.assign(on(n),{get(i,s){return pt.call(r,s)?r[s]:(F(i,s,n),he(i[s],n))}})}function me(e,t){let n={type:"signal",value:e,observers:new Set},r=t(n),i=()=>(yt(n),r);return i[ie]=n,i.set=function(o){Object.is(n.value,o)||(n.value=o,r=t(n),de(n))},i}function Or(e){if(typeof e!="function"||e[ie]?.type!=="signal")throw new g(`Value is not a signal (${e})`);de(e[ie])}function xr(){return me(null,e=>e.value)}function Rr(e=[]){return me(e,t=>pe(t.value,t))}function Mr(e={}){return me(e,t=>pe(t.value,t))}function Ir(e=new Map){return me(e,t=>pe(t.value,t))}function Pr(e=new Set){return me(e,t=>pe(t.value,t))}function x(e){return me(e,t=>t.value)}x.trigger=Or;x.ref=xr;x.Array=Rr;x.Map=Ir;x.Object=Mr;x.Set=Pr;function Lr(){throw new g("Cannot write to a read-only computed value. Pass a `set` option to make it writable.")}function se(e,t={}){let n=We(()=>{let i=e();return Object.is(n.value,i)||de(n),i},!0);function r(){return n.state!==0&&Ue(n),yt(n),n.value}return r[ie]=n,r.set=t.set??Lr,oe()?.computations.push(n),r}function De(e){let t=We(()=>(t.value||t.observers.size?(P(void 0),gt(t),P(t)):Ce(t),e()),!1);return z()?.observers.add(t),Ue(t),function(){t.state=0;let r=z();P(void 0),gt(t),P(r)}}function gt(e){Ce(e),Br(e);for(let t of e.observers)t.state=0,gt(t);e.observers.clear()}function Br(e){let t=e.value;t&&typeof t=="function"&&(t(),e.value=void 0)}function ln(e,t={}){let n=x(t.initial),r=x(!1),i=x(null),s=x(0),o=oe(),l=0,c=null,h=!1,a=null;function u(){r.set(!0),h=!0}function f(){r.set(!1),h=!1,a?.resolve(),a=null}let m=De(()=>{s();let p=++l;c&&c.abort();let S=new AbortController;c=S;let N=[S.signal];o?.abortSignal&&N.push(o.abortSignal),u(),i.set(null);let w;try{w=e({abortSignal:AbortSignal.any(N)})}catch(T){if(p!==l)return;if(Fe(T)){f();return}i.set(T),f();return}w.then(T=>{p===l&&(n.set(T),f())},T=>{if(p===l){if(Fe(T)){f();return}i.set(T),f()}})});function d(){m(),c?.abort(),c=null,h=!1,a?.resolve(),a=null}o?.onDestroy(d);let b=(()=>n());return b.loading=()=>r(),b.error=()=>i(),b.refresh=()=>s.set(s()+1),b.dispose=d,b.currentPromise=()=>{if(!h)return Promise.resolve();if(!a){let p;a={promise:new Promise(S=>p=S),resolve:p}}return a.promise},b}function jr(e,t,n){if(typeof n=="function")return n.name||"[Function]";if(n&&typeof n=="object"){let r=n.constructor;if(r&&r!==Object&&r!==Array)return`[Instance of ${r.name||"anonymous"}]`;if(e.includes(n))return"[Known object]";e.push(n)}return n}function W(e,t,n="Value does not match the type"){let r=Nt(e,t);if(r.length){let i=[],s=JSON.stringify(r,jr.bind(null,i),2);throw new g(`${n}
2
+ ${s}`)}}function bt(e,t,n,r,i=1){return{issueDepth:0,path:n,value:t,get isValid(){return!e.length},addIssue(s){e.push({received:this.value,path:this.path.join(" > "),...s})},mergeIssues(s){e.push(...s)},validate(s){s(this),!this.isValid&&r&&(r.issueDepth=this.issueDepth+i)},withIssues(s){return bt(s,this.value,this.path,this,0)},withKey(s){return bt(e,this.value[s],this.path.concat(s),this)}}}function Nt(e,t){let n=[];return t(bt(n,e,[])),n}var Et=Symbol("default"),an=Symbol("innerType"),Ge=Symbol("shape"),cn=Symbol("elementType"),un=Symbol("optional"),fn=Symbol("intersection");function le(e){return typeof e=="function"?e[Et]:void 0}function Vr(e,t){let n=function(i){i.value!==void 0&&i.validate(e)};return n[un]=!0,n[an]=e,t!==void 0&&(n[Et]=typeof t=="function"?t:()=>t),n}function Fr(e){return typeof e=="function"&&un in e}function M(e){return e.optional=t=>Vr(e,t),e}function hn(e,t){return je(e,t)}function je(e,t){if(typeof t!="function")return e;if(e===void 0){let l=t[Et];if(!l)return e;e=l()}let n=t[an]||t;if(typeof n!="function"||!e||typeof e!="object")return e;let r=n[fn];if(r){let l=e;for(let c of r)l=je(l,c);return l}let i=n[cn];if(i&&Array.isArray(e)){let l=e;for(let c=0;c<e.length;c++){let h=je(e[c],i);h!==e[c]&&(l===e&&(l=[...e]),l[c]=h)}return l}let s=n[Ge];if(!s)return e;let o=e;for(let l in s){let c=o[l],h=je(c,s[l]);h!==c&&(o===e&&(o=Array.isArray(e)?[...e]:{...e}),o[l]=h)}return o}function Kr(){return M(function(){})}function Wr(){return M(function(t){typeof t.value!="boolean"&&t.addIssue({message:"value is not a boolean"})})}function Ur(){return M(function(t){typeof t.value!="number"&&t.addIssue({message:"value is not a number"})})}function zr(){return M(function(t){typeof t.value!="string"&&!(t.value instanceof String)&&t.addIssue({message:"value is not a string"})})}function Hr(e){let t=M(function(r){if(!Array.isArray(r.value)){r.addIssue({message:"value is not an array"});return}if(e)for(let i=0;i<r.value.length;i++)r.withKey(i).validate(e)});return e&&(t[cn]=e),t}function $t(e){return M(function(n){(typeof n.value!="function"||!(n.value===e||n.value.prototype instanceof e))&&n.addIssue({message:`value is not '${e.name}' or an extension`})})}function Gr(e,t,n="value does not match custom validation"){return M(function(i){i.validate(e),i.isValid&&(t(i.value)||i.addIssue({message:n}))})}function qr(e=[],t=void 0){return M(function(r){typeof r.value!="function"&&r.addIssue({message:"value is not a function"})})}function dn(e){return M(function(n){n.value instanceof e||n.addIssue({message:`value is not an instance of '${e.name}'`})})}function Xr(e){let t=M(function(r){for(let i of e)r.validate(i)});return t[fn]=e,t.toShape=()=>{let n={};for(let r of e){let i=typeof r.toShape=="function"?r.toShape():void 0;i&&!Array.isArray(i)&&Object.assign(n,i)}return n},t}function St(e){return M(function(n){n.value!==e&&n.addIssue({message:`value is not equal to ${typeof e=="string"?`'${e}'`:e}`})})}function Yr(e){return Ct(e.map(St))}function pn(e,t,n){if(typeof e.value!="object"||Array.isArray(e.value)||e.value===null){e.addIssue({message:"value is not an object"});return}if(!t)return;let r=!Array.isArray(t),i,s;if(r)s=Object.keys(t),i=t;else{s=t,i={};for(let l of s)i[l]=null}let o=[];for(let l of s){if(e.value[l]===void 0){Fr(i[l])||o.push(l);continue}r&&e.withKey(l).validate(i[l])}if(o.length&&e.addIssue({message:"object value has missing keys",missingKeys:o}),n){let l=[];for(let c in e.value)s.includes(c)||l.push(c);l.length&&e.addIssue({message:"object value has unknown keys",unknownKeys:l})}}function Zr(e={}){let t=M(function(r){pn(r,e,!1)});return Array.isArray(e)||(t[Ge]=e),t.toShape=()=>e,t}function Jr(e){let t=M(function(r){pn(r,e,!0)});return Array.isArray(e)||(t[Ge]=e),t.toShape=()=>e,t}function Qr(e){return M(function(n){n.value instanceof Promise||n.addIssue({message:"value is not a promise"})})}function ei(e){return M(function(n){if(typeof n.value!="object"||Array.isArray(n.value)||n.value===null){n.addIssue({message:"value is not an object"});return}if(e)for(let r in n.value)n.withKey(r).validate(e)})}function ti(e){let t=M(function(r){if(!Array.isArray(r.value)){r.addIssue({message:"value is not an array"});return}if(r.value.length!==e.length){r.addIssue({message:"tuple value does not have the correct length"});return}for(let i=0;i<e.length;i++)r.withKey(i).validate(e[i])});return t[Ge]=e,t}function Ct(e){return M(function(n){let r=0,i=[];for(let s of e){let o=n.withIssues(i);if(o.validate(s),i.length===r||o.issueDepth>0){n.mergeIssues(i.slice(r));return}r=i.length}n.addIssue({message:"value does not match union type",subIssues:i})})}function ni(e){return M(function(n){(typeof n.value!="function"||!n.value[ie])&&n.addIssue({message:"value is not a reactive value"})})}function ri(e){if(typeof HTMLElement>"u")throw new Error("Cannot use ref in a non-DOM environment");return Ct([St(null),dn(e||HTMLElement)])}var kt={and:Xr,any:Kr,array:Hr,boolean:Wr,constructor:$t,customValidator:Gr,function:qr,instanceOf:dn,literal:St,number:Ur,object:Zr,or:Ct,promise:Qr,record:ei,ref:ri,selection:Yr,signal:ni,strictObject:Jr,string:zr,tuple:ti},mn=class{_map=x.Object(Object.create(null));_name;_validation;constructor(e={}){this._name=e.name||"registry",this._validation=e.validation}entries=se(()=>Object.entries(this._map()).sort((t,n)=>t[1][0]-n[1][0]).map(([t,n])=>[t,n[1]]));items=se(()=>this.entries().map(e=>e[1]));addById(e,t={}){if(!e.id)throw new g(`Item should have an id key (registry '${this._name}')`);return this.add(e.id,e,t)}add(e,t,n={}){if(!n.force&&e in this._map())throw new g(`Key "${e}" is already registered (registry '${this._name}'). Use { force: true } to overwrite.`);if(this._validation){let r=this._name?` (registry '${this._name}', key: '${e}')`:` (key: '${e}')`;W(t,this._validation,`Registry entry does not match the type${r}`)}return this._map()[e]=[n.sequence??50,t],this}get(e,t){let n=e in this._map();if(!n&&arguments.length<2)throw new g(`Cannot find key "${e}" (registry '${this._name}')`);return n?this._map()[e][1]:t}delete(e){delete this._map()[e]}has(e){return e in this._map()}use(e,t,n={}){let r=K();return this.add(e,t,n),r.onDestroy(()=>{this._map()[e]?.[1]===t&&this.delete(e)}),this}useById(e,t={}){if(!e.id)throw new g(`Item should have an id key (registry '${this._name}')`);return this.use(e.id,e,t)}},gn=class{_items=x.Array([]);_name;_validation;constructor(e={}){this._name=e.name,this._validation=e.validation}items=se(()=>this._items().sort((e,t)=>e[0]-t[0]).map(e=>e[1]));add(e,t={}){if(this._validation){let n=this._name?` (resource '${this._name}')`:"";W(e,this._validation,`Resource item does not match the type${n}`)}return this._items().push([t.sequence??50,e]),this}delete(e){let t=this._items().filter(([n,r])=>r!==e);return this._items.set(t),this}has(e){return this._items().some(([t,n])=>n===e)}use(e,t={}){let n=K();return this.add(e,t),n.onDestroy(()=>this.delete(e)),this}},qe=class{static _shadowId;static get id(){return this._shadowId??this.name}static set id(e){this._shadowId=e}static sequence=50;__owl__;constructor(e){this.__owl__=e}setup(){}},ge=class extends ke{config;plugins;ready=Promise.resolve();hasPendingReady=!1;constructor(e,t={}){if(super(e),this.config=t.config??{},this.pluginManager=this,t.parent){let n=t.parent;n.onDestroy(()=>this.destroy()),this.plugins=Object.create(n.plugins)}else this.plugins={}}destroy(){this.finalize(e=>console.error(e))}getPluginById(e){return this.plugins[e]||null}getPlugin(e){return this.getPluginById(e.id)}startPlugin(e){if(!e.id)throw new g(`Plugin "${e.name}" has no id`);if(this.plugins.hasOwnProperty(e.id)){let n=this.getPluginById(e.id).constructor;if(n!==e)throw new g(`Trying to start a plugin with the same id as an other plugin (id: '${e.id}', existing plugin: '${n.name}', starting plugin: '${e.name}')`);return null}let t=new e(this);return this.plugins[e.id]=t,t.setup(),t}startPlugins(e){let t=e.filter(o=>!o.id||this.plugins.hasOwnProperty(o.id)?(this.startPlugin(o),!1):!0);if(!t.length)return;t.sort((o,l)=>o.sequence-l.sequence);let n=[];for(let o of t){let l=n[n.length-1];l&&l[0].sequence===o.sequence?l.push(o):n.push([o])}let r=o=>{H.push(this);try{for(let c of o)this.startPlugin(c)}finally{H.pop()}let l=this.willStart.splice(0);return l.length?Promise.all(l.map(c=>c())):null},i=this.hasPendingReady?this.ready:null;for(let o of n)i?i=i.then(()=>r(o)):i=r(o);if(!i){this.status<A.MOUNTED&&(this.status=A.MOUNTED);return}this.hasPendingReady=!0;let s=this.ready=i.then(()=>{this.status<A.MOUNTED&&(this.status=A.MOUNTED),this.ready===s&&(this.hasPendingReady=!1)})}};function Xe(e,t){Array.isArray(t)?e.startPlugins(t):e.onDestroy(De(()=>{let n=t.items();wt(()=>e.startPlugins(n))}))}function Ye(e){let t=K();t.willStart.push(t.decorate(e,"onWillStart"))}function Z(e){let t=K();t.onDestroy(t.decorate(e,"onWillDestroy"))}function _e(e){Z(De(e))}function bn(e,t,n,r){typeof e=="function"?_e(()=>{let i=e();if(i)return i.addEventListener(t,n,r),()=>i.removeEventListener(t,n,r)}):(e.addEventListener(t,n,r),Z(()=>e.removeEventListener(t,n,r)))}function vn(){return K().app}function yn(e){let t=K(),n=t.pluginManager.getPluginById(e.id);if(!n)if(t instanceof ge)n=t.pluginManager.startPlugin(e);else throw new g(`Unknown plugin "${e.id}"`);return n}function wn(e,t){let n=K();if(!(n instanceof ge))throw new g("Expected to be in a plugin scope");n.app.dev&&t&&W(n.config,kt.object({[e]:t}),"Config does not match the type");let r=n.config[e];return r===void 0?le(t)?.():r}var Tn=class extends EventTarget{trigger(e,t){this.dispatchEvent(new CustomEvent(e,{detail:t}))}},$e=class extends String{};function At(e){return e instanceof $e?e:e===void 0?Ee(""):typeof e=="number"?Ee(String(e)):([["&","&amp;"],["<","&lt;"],[">","&gt;"],["'","&#x27;"],['"',"&quot;"],["`","&#x60;"]].forEach(t=>{e=String(e).replace(new RegExp(t[0],"g"),t[1])}),Ee(e))}function Ee(e,...t){if(!Array.isArray(e))return new $e(e);let n=e,r="",i=0;for(;i<t.length;++i)r+=n[i]+At(t[i]);return r+=n[i],new $e(r)}var ii="3.0.0-alpha.42",Q=new WeakMap,ve=new WeakMap;function Rn(e,t,n,r){for(;e;){r&&e.fiber&&Q.set(e.fiber,t);let i=ve.get(e);if(i)for(let s=i.length-1;s>=0;s--)try{return i[s](t,n),{handled:!0,error:t}}catch(o){t=o}e=e.parent}return{handled:!1,error:t}}function Mn(e){return(t,n)=>{if(e.app.destroyed)throw t;let{handled:r}=Rn(e,t,n,!1);r||e.app._handleError(n())}}function ce(e){let{error:t}=e,n="node"in e?e.node:e.fiber.node,r="fiber"in e?e.fiber:n.fiber,i=n.app;if(i.destroyed)throw t;if(r){let l=r;do l.node.fiber=l,Q.set(l,t),l=l.parent;while(l);Q.set(r.root,t)}let s=()=>{try{i.destroy()}catch{}return t},o=Rn(n,t,s,!0);o.handled||(t=o.error,i._handleError(s()))}function In(e){e=e.slice();let t=[],n;for(;(n=e[0])&&typeof n=="string";)t.push(e.shift());return{modifiers:t,data:e}}var we={shouldNormalizeDom:!0,mainEventHandler:(e,t,n)=>(typeof e=="function"?e(t):Array.isArray(e)&&(e=In(e).data,e[0](e[1],t)),!1)},Nn=globalThis.document?.createTextNode(""),si=class{key;child;parentEl;constructor(e,t){this.key=e,this.child=t}mount(e,t){this.parentEl=e,this.child.mount(e,t)}moveBeforeDOMNode(e,t){this.child.moveBeforeDOMNode(e,t)}moveBeforeVNode(e,t){this.moveBeforeDOMNode(e&&e.firstNode()||t)}patch(e,t){if(this===e)return;let n=this.child,r=e.child;if(this.key===e.key)n.patch(r,t);else{let i=n.firstNode();i.parentElement.insertBefore(Nn,i),t&&n.beforeRemove(),n.remove(),r.mount(this.parentEl,Nn),this.child=r,this.key=e.key}}beforeRemove(){this.child.beforeRemove()}remove(){this.child.remove()}firstNode(){return this.child.firstNode()}toString(){return this.child.toString()}};function ae(e,t){return new si(e,t)}var Rt,Me,Wt,Pn;if(typeof Element<"u"){({setAttribute:Rt,removeAttribute:Me}=Element.prototype);let e=DOMTokenList.prototype;Wt=e.add,Pn=e.remove}var Ln=Array.isArray,{split:En,trim:xe}=String.prototype,$n=/\s+/;function ye(e,t){switch(t){case!1:case null:case void 0:Me.call(this,e);break;case!0:Rt.call(this,e,"");break;default:Rt.call(this,e,t)}}function oi(e){return function(t){ye.call(this,e,t)}}function li(e){if(Ln(e))e[0]==="class"?Pt.call(this,e[1]):e[0]==="style"?Lt.call(this,e[1]):ye.call(this,e[0],e[1]);else for(let t in e)t==="class"?Pt.call(this,e[t]):t==="style"?Lt.call(this,e[t]):ye.call(this,t,e[t])}function ai(e,t){if(Ln(e)){let n=e[0],r=e[1];if(n===t[0]){if(r===t[1])return;n==="class"?Ze.call(this,r,t[1]):n==="style"?Je.call(this,r,t[1]):ye.call(this,n,r)}else Me.call(this,t[0]),ye.call(this,n,r)}else{for(let n in t)n in e||(n==="class"?Ze.call(this,"",t[n]):n==="style"?Je.call(this,"",t[n]):Me.call(this,n));for(let n in e){let r=e[n];r!==t[n]&&(n==="class"?Ze.call(this,r,t[n]):n==="style"?Je.call(this,r,t[n]):ye.call(this,n,r))}}}function Mt(e){let t={};switch(typeof e){case"string":let n=xe.call(e);if(!n)return{};let r=En.call(n,$n);for(let i=0,s=r.length;i<s;i++)t[r[i]]=!0;return t;case"object":for(let i in e){let s=e[i];if(s){if(i=xe.call(i),!i)continue;let o=En.call(i,$n);for(let l of o)t[l]=s}}return t;case"undefined":return{};case"number":return{[e]:!0};default:return{[e]:!0}}}var Dt={};function ci(e){if(e in Dt)return Dt[e];let t=e.replace(/[A-Z]/g,n=>"-"+n.toLowerCase());return Dt[e]=t,t}var Sn=/\s*!\s*important\s*$/i;function Bn(e,t,n){Sn.test(n)?e.setProperty(t,n.replace(Sn,""),"important"):e.setProperty(t,n)}function It(e){let t={};switch(typeof e){case"string":{let n=e,r=n.length,i=0;for(;i<r;){let s=i,o=0,l=0;for(;i<r;){let f=n.charCodeAt(i);if(l){if(f===92){i+=2;continue}f===l&&(l=0)}else if(f===34||f===39)l=f;else if(f===40)o++;else if(f===41)o>0&&o--;else if(f===59&&o===0)break;i++}let c=xe.call(n.slice(s,i));if(i++,!c)continue;let h=c.indexOf(":");if(h===-1)continue;let a=xe.call(c.slice(0,h)),u=xe.call(c.slice(h+1));a&&u&&u!=="undefined"&&(t[a]=u)}return t}case"object":for(let n in e){let r=e[n];(r||r===0)&&(t[ci(n)]=String(r))}return t;default:return{}}}function Pt(e){e=e===""?{}:Mt(e);for(let t in e)Wt.call(this.classList,t)}function Ze(e,t){t=t===""?{}:Mt(t),e=e===""?{}:Mt(e);for(let n in t)n in e||Pn.call(this.classList,n);for(let n in e)e[n]!==t[n]&&Wt.call(this.classList,n)}function Lt(e){e=e===""?{}:It(e);let t=this.style;for(let n in e)Bn(t,n,e[n])}function Je(e,t){t=t===""?{}:It(t),e=e===""?{}:It(e);let n=this.style;for(let i in t)i in e||n.removeProperty(i);let r=!1;for(let i in e)(r||e[i]!==t[i])&&(Bn(n,i,e[i]),r=!0);n.cssText||Me.call(this,"style")}function ui(e){if(!e)return!1;if(e.ownerDocument.contains(e))return!0;let t=e.getRootNode();return t instanceof ShadowRoot&&e.ownerDocument.contains(t.host)}function fi(e,t){let n=e,r=t.defaultView.ShadowRoot;for(;n;){if(n===t)return!0;if(n.parentNode)n=n.parentNode;else if(n instanceof r&&n.host)n=n.host;else return!1}return!1}function hi(e){let t=e&&e.ownerDocument;if(t){if(!t.defaultView)throw new g("Cannot mount a component: the target document is not attached to a window (defaultView is missing)");let n=t.defaultView.HTMLElement;if(e instanceof n||e instanceof ShadowRoot){if(!fi(e,t))throw new g("Cannot mount a component on a detached dom node");return}}throw new g("Cannot mount component: the target is not a valid DOM element")}function di(e){return new Promise(function(t){document.readyState!=="loading"?t(!0):document.addEventListener("DOMContentLoaded",t,!1)}).then(e||function(){})}function jn(e){let t=e.split(".")[0],n=e.includes(".capture"),r=e.includes(".passive");return e.includes(".synthetic")?bi(t,n,r):mi(t,n,r)}var pi=1;function mi(e,t=!1,n=!1){let r=`__event__${e}_${pi++}`;t&&(r=`${r}_capture`);function i(h){let a=h.currentTarget;if(!a||!ui(a))return;let u=a[r];u&&we.mainEventHandler(u,h,a)}let s={capture:t,passive:n};function o(h){this[r]=h,this.addEventListener(e,i,s)}function l(){delete this[r],this.removeEventListener(e,i,s)}function c(h){this[r]=h}return{setup:o,update:c,remove:l}}var gi=1;function bi(e,t=!1,n=!1){let r=`__event__synthetic_${e}`;t&&(r=`${r}_capture`),yi(e,r,t,n);let i=gi++;function s(l){let c=this[r]||{};c[i]=l,this[r]=c}function o(){delete this[r]}return{setup:s,update:s,remove:o}}function vi(e,t){let n=t.target;for(;n!==null;){let r=n[e];if(r){for(let i of Object.values(r))if(we.mainEventHandler(i,t,n))return}n=n.parentNode}}var Cn={};function yi(e,t,n=!1,r=!1){Cn[t]||(document.addEventListener(e,i=>vi(t,i),{capture:n,passive:r}),Cn[t]=!0)}var wi=(e,t)=>Object.getOwnPropertyDescriptor(e,t),Oe,Vn,Bt;if(typeof Node<"u"){let e=Node.prototype;Oe=e.insertBefore,Vn=wi(e,"textContent").set,Bt=e.removeChild}var Fn=class{children;anchors;parentEl;isOnlyChild;constructor(e){this.children=e}mount(e,t){let n=this.children,r=n.length,i=new Array(r);for(let s=0;s<r;s++){let o=n[s];if(o)o.mount(e,t);else{let l=document.createTextNode("");i[s]=l,Oe.call(e,l,t)}}this.anchors=i,this.parentEl=e}moveBeforeDOMNode(e,t=this.parentEl){this.parentEl=t;let n=this.children,r=this.anchors;for(let i=0,s=n.length;i<s;i++){let o=n[i];if(o)o.moveBeforeDOMNode(e,t);else{let l=r[i];Oe.call(t,l,e)}}}moveBeforeVNode(e,t){if(e){let s=e.children[0];t=(s?s.firstNode():e.anchors[0])||null}let n=this.children,r=this.parentEl,i=this.anchors;for(let s=0,o=n.length;s<o;s++){let l=n[s];if(l)l.moveBeforeVNode(null,t);else{let c=i[s];Oe.call(r,c,t)}}}patch(e,t){if(this===e)return;let n=this.children,r=e.children,i=this.anchors,s=this.parentEl;for(let o=0,l=n.length;o<l;o++){let c=n[o],h=r[o];if(c)if(h)c.patch(h,t);else{let a=c.firstNode(),u=document.createTextNode("");i[o]=u,Oe.call(s,u,a),t&&c.beforeRemove(),c.remove(),n[o]=void 0}else if(h){n[o]=h;let a=i[o];h.mount(s,a),Bt.call(s,a)}}}beforeRemove(){let e=this.children;for(let t=0,n=e.length;t<n;t++){let r=e[t];r&&r.beforeRemove()}}remove(){let e=this.parentEl;if(this.isOnlyChild)Vn.call(e,"");else{let t=this.children,n=this.anchors;for(let r=0,i=t.length;r<i;r++){let s=t[r];s?s.remove():Bt.call(e,n[r])}}}firstNode(){let e=this.children[0];return e?e.firstNode():this.anchors[0]}toString(){return this.children.map(e=>e?e.toString():"").join("")}};function Ut(e){return new Fn(e)}var Ti=(e,t)=>Object.getOwnPropertyDescriptor(e,t),Qe,Kn,Wn;if(typeof Node<"u"){let e=Node.prototype;Qe=e.insertBefore,Wn=e.removeChild,Kn=Ti(CharacterData.prototype,"data").set}var Ni=class{text;parentEl;el;constructor(e){this.text=e}mount(e,t){this.parentEl=e;let n=document.createTextNode(jt(this.text));Qe.call(e,n,t),this.el=n}moveBeforeDOMNode(e,t=this.parentEl){this.parentEl=t,Qe.call(t,this.el,e)}moveBeforeVNode(e,t){Qe.call(this.parentEl,this.el,e?e.el:t)}beforeRemove(){}remove(){Wn.call(this.parentEl,this.el)}firstNode(){return this.el}patch(e){let t=e.text;this.text!==t&&(Kn.call(this.el,jt(t)),this.text=t)}toString(){return this.text}};function Ie(e){return new Ni(e)}function jt(e){switch(typeof e){case"string":return e;case"number":return String(e);case"boolean":return e?"true":"false";default:return e||""}}var _t=(e,t)=>Object.getOwnPropertyDescriptor(e,t),Re,Un,zn,rt,zt;typeof Node<"u"&&(Re=Node.prototype,Un=Element.prototype,zn=_t(CharacterData.prototype,"data").set,rt=_t(Re,"firstChild").get,zt=_t(Re,"nextSibling").get);var kn=()=>{};function Ei(e){return function(n){this[e]=n===0?0:n?n.valueOf():""}}var Ot={};function Hn(e){if(e in Ot)return Ot[e];let n=new DOMParser().parseFromString(`<t>${e}</t>`,"text/xml").firstChild.firstChild;we.shouldNormalizeDom&&Gn(n);let r=Vt(n),i=Ft(r),s=r.el,o=Ci(s,i);return Ot[e]=o,o}function Gn(e){if(e.nodeType===Node.TEXT_NODE&&!/\S/.test(e.textContent)){e.remove();return}if(!(e.nodeType===Node.ELEMENT_NODE&&e.tagName==="pre"))for(let t=e.childNodes.length-1;t>=0;--t)Gn(e.childNodes.item(t))}function Vt(e,t=null,n=null){switch(e.nodeType){case Node.ELEMENT_NODE:{let r=n&&n.currentNS,i=e.tagName,s,o=[];if(i.startsWith("block-text-")){let c=parseInt(i.slice(11),10);o.push({type:"text",idx:c}),s=document.createTextNode("")}if(i.startsWith("block-child-")){n.isRef||An(n);let c=parseInt(i.slice(12),10);o.push({type:"child",idx:c}),s=document.createTextNode("")}if(r||=e.namespaceURI,s||(s=r?document.createElementNS(r,i):document.createElement(i)),s instanceof Element){n||document.createElement("template").content.appendChild(s);let c=e.attributes;for(let h=0;h<c.length;h++){let a=c[h].name,u=c[h].value;if(a.startsWith("block-handler-")){let f=parseInt(a.slice(14),10);o.push({type:"handler",idx:f,event:u})}else if(a.startsWith("block-attribute-")){let f=parseInt(a.slice(16),10);o.push({type:"attribute",idx:f,name:u,tag:i})}else if(a.startsWith("block-property-")){let f=parseInt(a.slice(15),10);o.push({type:"property",idx:f,name:u,tag:i})}else a==="block-attributes"?o.push({type:"attributes",idx:parseInt(u,10)}):a==="block-ref"?o.push({type:"ref",idx:parseInt(u,10)}):s.setAttribute(c[h].name,u)}}let l={parent:t,firstChild:null,nextSibling:null,el:s,info:o,refN:0,currentNS:r};if(e.firstChild){let c=e.childNodes[0];if(e.childNodes.length===1&&c.nodeType===Node.ELEMENT_NODE&&c.tagName.startsWith("block-child-")){let h=c.tagName,a=parseInt(h.slice(12),10);o.push({idx:a,type:"child",isOnlyChild:!0})}else{l.firstChild=Vt(e.firstChild,l,l),s.appendChild(l.firstChild.el);let h=e.firstChild,a=l.firstChild;for(;h=h.nextSibling;)a.nextSibling=Vt(h,a,l),s.appendChild(a.nextSibling.el),a=a.nextSibling}}return l.info.length&&An(l),l}case Node.TEXT_NODE:return{parent:t,firstChild:null,nextSibling:null,el:document.createTextNode(e.textContent),info:[],refN:0,currentNS:null}}throw new g("boom")}function An(e){e.isRef=!0;do e.refN++;while(e=e.parent)}function $i(e){let t=e.parent;for(;t&&t.nextSibling===e;)e=t,t=t.parent;return t}function Ft(e,t,n){if(!t){let r=new Array(e.info.filter(i=>i.type==="child").length);t={collectors:[],locations:[],children:r,cbRefs:[],refN:e.refN},n=0}if(e.refN){let r=n,i=e.isRef,s=e.firstChild?e.firstChild.refN:0,o=e.nextSibling?e.nextSibling.refN:0;if(i){for(let l of e.info)l.refIdx=r;e.refIdx=r,Si(t,e),n++}if(o){let l=n+s;t.collectors.push({idx:l,prevIdx:r,getVal:zt}),Ft(e.nextSibling,t,l)}s&&(t.collectors.push({idx:n,prevIdx:r,getVal:rt}),Ft(e.firstChild,t,n))}return t}function Si(e,t){for(let n of t.info)switch(n.type){case"text":e.locations.push({idx:n.idx,refIdx:n.refIdx,setData:Dn,updateData:Dn});break;case"child":n.isOnlyChild?e.children[n.idx]={parentRefIdx:n.refIdx,isOnlyChild:!0}:e.children[n.idx]={parentRefIdx:$i(t).refIdx,afterRefIdx:n.refIdx};break;case"property":{let r=n.refIdx,i=Ei(n.name);e.locations.push({idx:n.idx,refIdx:r,setData:i,updateData:i});break}case"attribute":{let r=n.refIdx,i,s;n.name==="class"?(s=Pt,i=Ze):n.name==="style"?(s=Lt,i=Je):(s=oi(n.name),i=s),e.locations.push({idx:n.idx,refIdx:r,setData:s,updateData:i});break}case"attributes":e.locations.push({idx:n.idx,refIdx:n.refIdx,setData:li,updateData:ai});break;case"handler":{let{setup:r,update:i}=jn(n.event);e.locations.push({idx:n.idx,refIdx:n.refIdx,setData:r,updateData:i});break}case"ref":{e.locations.push({idx:n.idx,refIdx:n.refIdx,setData:kn,updateData:kn}),e.cbRefs.push(n.idx);break}}}function Ci(e,t){let n=ki(e,t);return t.children.length?(n=class extends n{children;constructor(r,i){super(r),this.children=i}},n.prototype.beforeRemove=Fn.prototype.beforeRemove,(r,i=[])=>new n(r,i)):r=>new n(r)}function ki(e,t){let{refN:n,collectors:r,children:i,locations:s,cbRefs:o}=t;s.sort((y,E)=>y.idx-E.idx);let l=s.length,c=i.length,h=n>0,a=s.map(y=>y.refIdx),u=s.map(y=>y.setData),f=s.map(y=>y.updateData),m=[zt,rt],d=r.length,b=r.map(y=>y.idx&32767|(y.prevIdx&32767)<<15|(y.getVal===rt?1:0)<<30),p=i.map(y=>y.parentRefIdx&32767|(y.isOnlyChild?1:0)<<15|((y.afterRefIdx??0)&32767)<<16),S=Re.cloneNode,N=Re.insertBefore,w=Un.remove;class T{el;parentEl;data;children;refs;constructor(E){this.data=E}beforeRemove(){}remove(){w.call(this.el)}firstNode(){return this.el}moveBeforeDOMNode(E,v=this.parentEl){this.parentEl=v,N.call(v,this.el,E)}moveBeforeVNode(E,v){N.call(this.parentEl,this.el,E?E.el:v)}toString(){let E=document.createElement("div");return this.mount(E,null),E.innerHTML}mount(E,v){let C=S.call(e,!0);N.call(E,C,v),this.el=C,this.parentEl=E}patch(E,v){}}return h&&(T.prototype.mount=function(E,v){let C=S.call(e,!0),D=new Array(n);this.refs=D,D[0]=C;for(let O=0;O<d;O++){let k=b[O];D[k&32767]=m[k>>30&1].call(D[k>>15&32767])}if(l){let O=this.data;for(let k=0;k<l;k++)u[k].call(D[a[k]],O[k])}if(c){let O=this.children;for(let k=0;k<c;k++){let R=O[k];if(R){let L=p[k],Te=L>>16&32767,Be=Te?D[Te]:null;R.isOnlyChild=!!(L&32768),R.mount(D[L&32767],Be)}}}if(N.call(E,C,v),this.el=C,this.parentEl=E,o.length){let O=this.data,k=this.refs;for(let R of o){let L=O[R];L(k[a[R]],null)}}},T.prototype.patch=function(E,v){if(this===E)return;let C=this.refs;if(l){let D=this.data,O=E.data;for(let k=0;k<l;k++){let R=D[k],L=O[k];R!==L&&f[k].call(C[a[k]],L,R)}this.data=O}if(c){let D=this.children,O=E.children;for(let k=0;k<c;k++){let R=D[k],L=O[k];if(R)L?R.patch(L,v):(v&&R.beforeRemove(),R.remove(),D[k]=void 0);else if(L){let Te=p[k],Be=Te>>16&32767,vr=Be?C[Be]:null;L.mount(C[Te&32767],vr),D[k]=L}}}},T.prototype.remove=function(){if(o.length){let E=this.data,v=this.refs;for(let C of o){let D=E[C];D(null,v[a[C]])}}w.call(this.el)}),T}function Dn(e){zn.call(this,jt(e))}var Ai=(e,t)=>Object.getOwnPropertyDescriptor(e,t),qn,Xn,Yn,Kt;if(typeof Node<"u"){let e=Node.prototype;qn=e.insertBefore,Xn=e.appendChild,Yn=e.removeChild,Kt=Ai(e,"textContent").set}var Di=class{children;anchor;parentEl;isOnlyChild;constructor(e){this.children=e}mount(e,t){let n=this.children,r=document.createTextNode("");this.anchor=r,qn.call(e,r,t);let i=n.length;if(i){let s=n[0].mount;for(let o=0;o<i;o++)s.call(n[o],e,r)}this.parentEl=e}moveBeforeDOMNode(e,t=this.parentEl){this.parentEl=t;let n=this.children;for(let r=0,i=n.length;r<i;r++)n[r].moveBeforeDOMNode(e,t);t.insertBefore(this.anchor,e)}moveBeforeVNode(e,t){if(e){let r=e.children[0];t=(r?r.firstNode():e.anchor)||null}let n=this.children;for(let r=0,i=n.length;r<i;r++)n[r].moveBeforeVNode(null,t);this.parentEl.insertBefore(this.anchor,t)}patch(e,t){if(this===e)return;let n=this.children,r=e.children;if(r.length===0&&n.length===0)return;this.children=r;let i=r[0]||n[0],{mount:s,patch:o,remove:l,beforeRemove:c,moveBeforeVNode:h,firstNode:a}=i,u=this.anchor,f=this.isOnlyChild,m=this.parentEl;if(r.length===0&&f){if(t)for(let v=0,C=n.length;v<C;v++)c.call(n[v]);Kt.call(m,""),Xn.call(m,u);return}let d=0,b=0,p=n[0],S=r[0],N=n.length-1,w=r.length-1,T=n[N],y=r[w],E;for(;d<=N&&b<=w;){if(p===null){p=n[++d];continue}if(T===null){T=n[--N];continue}let v=p.key,C=S.key;if(v===C){o.call(p,S,t),r[b]=p,p=n[++d],S=r[++b];continue}let D=T.key,O=y.key;if(D===O){o.call(T,y,t),r[w]=T,T=n[--N],y=r[--w];continue}if(v===O){o.call(p,y,t),r[w]=p;let R=r[w+1];h.call(p,R,u),p=n[++d],y=r[--w];continue}if(D===C){o.call(T,S,t),r[b]=T;let R=n[d];h.call(T,R,u),T=n[--N],S=r[++b];continue}E=E||_i(n,d,N);let k=E[C];if(k===void 0)s.call(S,m,a.call(p)||null);else{let R=n[k];h.call(R,p,null),o.call(R,S,t),r[b]=R,n[k]=null}S=r[++b]}if(d<=N||b<=w)if(d>N){let v=r[w+1],C=v?a.call(v)||null:u;for(let D=b;D<=w;D++)s.call(r[D],m,C)}else for(let v=d;v<=N;v++){let C=n[v];C&&(t&&c.call(C),l.call(C))}}beforeRemove(){let e=this.children,t=e.length;if(t){let n=e[0].beforeRemove;for(let r=0;r<t;r++)n.call(e[r])}}remove(){let{parentEl:e,anchor:t}=this;if(this.isOnlyChild)Kt.call(e,"");else{let n=this.children,r=n.length;if(r){let i=n[0].remove;for(let s=0;s<r;s++)i.call(n[s])}Yn.call(e,t)}}firstNode(){let e=this.children[0];return e?e.firstNode():void 0}toString(){return this.children.map(e=>e.toString()).join("")}};function Zn(e){return new Di(e)}function _i(e,t,n){let r={};for(let i=t;i<=n;i++)r[e[i].key]=i;return r}var be,Jn;if(typeof Node<"u"){let e=Node.prototype;be=e.insertBefore,Jn=e.removeChild}var Oi=class{html;parentEl;content=[];constructor(e){this.html=e}mount(e,t){this.parentEl=e;let n=document.createElement("template");n.innerHTML=this.html,this.content=[...n.content.childNodes];for(let r of this.content)be.call(e,r,t);if(!this.content.length){let r=document.createTextNode("");this.content.push(r),be.call(e,r,t)}}moveBeforeDOMNode(e,t=this.parentEl){this.parentEl=t;for(let n of this.content)be.call(t,n,e)}moveBeforeVNode(e,t){let n=e?e.content[0]:t;this.moveBeforeDOMNode(n)}patch(e){if(this===e)return;let t=e.html;if(this.html!==t){let n=this.parentEl,r=this.content[0],i=document.createElement("template");i.innerHTML=t;let s=[...i.content.childNodes];for(let o of s)be.call(n,o,r);if(!s.length){let o=document.createTextNode("");s.push(o),be.call(n,o,r)}this.remove(),this.content=s,this.html=e.html}}beforeRemove(){}remove(){let e=this.parentEl;for(let t of this.content)Jn.call(e,t)}firstNode(){return this.content[0]}toString(){return this.html}};function Ht(e){return new Oi(e)}function xi(e){let t=Object.keys(e).length;class n{child;handlerData;handlerFns=[];parentEl;afterNode=null;constructor(i,s){this.child=i,this.handlerData=s}mount(i,s){this.parentEl=i,this.child.mount(i,s),this.afterNode=document.createTextNode(""),i.insertBefore(this.afterNode,s),this.wrapHandlerData();for(let o in e){let l=e[o],c=jn(o);this.handlerFns[l]=c,c.setup.call(i,this.handlerData[l])}}wrapHandlerData(){for(let i=0;i<t;i++){let s=this.handlerData[i],o=s.length-2,l=s[o],c=this;s[o]=function(h,a){let u=a.target,f=c.child.firstNode(),m=c.afterNode;for(;f&&f!==m;){if(f.contains(u))return l(h,a);f=f.nextSibling}}}}moveBeforeDOMNode(i,s=this.parentEl){this.parentEl=s,this.child.moveBeforeDOMNode(i,s),s.insertBefore(this.afterNode,i)}moveBeforeVNode(i,s){i&&(s=i.firstNode()||s),this.child.moveBeforeVNode(i?i.child:null,s),this.parentEl.insertBefore(this.afterNode,s)}patch(i,s){if(this!==i){this.handlerData=i.handlerData,this.wrapHandlerData();for(let o=0;o<t;o++)this.handlerFns[o].update.call(this.parentEl,this.handlerData[o]);this.child.patch(i.child,s)}}beforeRemove(){this.child.beforeRemove()}remove(){for(let i=0;i<t;i++)this.handlerFns[i].remove.call(this.parentEl);this.child.remove(),this.afterNode.remove()}firstNode(){return this.child.firstNode()}toString(){return this.child.toString()}}return function(r,i){return new n(r,i)}}function et(e,t,n=null){e.mount(t,n)}function Ri(e,t,n=!1){e.patch(t,n)}function Mi(e,t=!1){t&&e.beforeRemove(),e.remove()}function Ii(e){switch(e.__owl__.status){case A.NEW:return"new";case A.CANCELLED:return"cancelled";case A.MOUNTED:return e instanceof qe?"started":"mounted";case A.DESTROYED:return"destroyed"}}var _n=1e3;function Pi(e,t){let n=e.fiber;return n&&(Gt(n.children),n.root=null),new ot(e,t)}function Li(e){let t=e.fiber;if(t){let r=t.root;return r.renderCount++,r.locked=!0,r.setCounter(r.counter+1-Gt(t.children)),r.locked=!1,t.children=[],t.childrenMap={},t.bdom=null,Q.has(t)&&(Q.delete(t),Q.delete(r),t.appliedToDom=!1,t instanceof it&&(t.mounted=t instanceof Qn?[t]:[])),t}let n=new it(e,null);return e.willPatch.length&&n.willPatch.push(n),e.patched.length&&n.patched.push(n),n}function Bi(){throw new g("Attempted to render cancelled fiber")}function Gt(e){let t=0;for(let n of e){let r=n.node;n.render=Bi,r.status===A.NEW&&r.cancel(),r.fiber=null,n.bdom?r.forceNextRender=!0:(t++,r.bdom&&(r.forceNextRender=!0)),t+=Gt(n.children)}return t}var ot=class{node;bdom=null;root;parent;children=[];appliedToDom=!1;deep=!1;childrenMap={};constructor(e,t){if(this.node=e,this.parent=t,t){this.deep=t.deep;let n=t.root;n.setCounter(n.counter+1),this.root=n,t.children.push(this)}else this.root=this}render(){let e=this.root.node.app.scheduler;if(e.tasks.size>1){let r=this.root.node,i=r.parent;for(;i;){if(i.fiber){let s=i.fiber.root;if(s.counter===0&&r.parentKey in i.fiber.childrenMap)i=s.node;else{e.delayedRenders.push(this);return}}r=i,i=i.parent}}let t=this.node,n=this.root;if(n){if(n.renderCount>_n){ce({node:t,error:new g(`Maximum render iterations (${_n}) exceeded. Component "${t.componentName}" is stuck in a render loop: rendering it keeps triggering another render before the DOM is updated. A common cause is updating reactive state during render or setup() \u2014 e.g. calling a parent's state setter from a child's setup().`)});return}let r=z();Ce(t.signalComputation),P(t.signalComputation),t.signalComputation.state=Se.EXECUTED;try{this.bdom=!0,this.bdom=t.renderFn()}catch(s){ce({node:t,error:s})}finally{P(r)}let i=n.counter-1;n.counter=i,i===0&&e.flush()}}},it=class extends ot{counter=1;renderCount=0;willPatch=[];patched=[];mounted=[];locked=!1;complete(){let e=this.node;this.locked=!0;let t,n=this.mounted;try{for(t of this.willPatch){let i=t.node;if(i.fiber===t){let s=i.component;for(let o of i.willPatch)o.call(s)}}for(t=void 0,e._patch(),this.locked=!1;t=n.pop();)if(t=t,t.appliedToDom)for(let i of t.node.mounted)i();let r=this.patched;for(;t=r.pop();)if(t=t,t.appliedToDom)for(let i of t.node.patched)i()}catch(r){for(let i of n)i.node.willUnmount=[];this.locked=!1,ce({fiber:t||this,error:r})}}setCounter(e){this.counter=e,e===0&&this.node.app.scheduler.flush()}},Qn=class extends it{target;position;afterNode=null;prepared=!1;onPrepared=null;constructor(e,t,n={}){super(e,null),this.target=t,this.position=n.position||"last-child",this.afterNode=n.afterNode??null}complete(){this.prepared=!0,this.target?this._mount():(this.appliedToDom=!0,this.onPrepared?.())}commit(e,t={}){this.target=e,this.position=t.position||"last-child",this.afterNode=t.afterNode??null,this.prepared&&this._mount()}_mount(){let e=this;try{let t=this.node;if(t.children=this.childrenMap,t.app.constructor.validateTarget(this.target),t.bdom)t.updateDom();else if(t.bdom=this.bdom,this.afterNode)et(t.bdom,this.target,this.afterNode);else if(this.position==="last-child"||this.target.childNodes.length===0)et(t.bdom,this.target);else{let r=this.target.childNodes[0];et(t.bdom,this.target,r)}t.fiber=null,t.status=A.MOUNTED,this.appliedToDom=!0;let n=this.mounted;for(;e=n.pop();)if(e.appliedToDom)for(let r of e.node.mounted)r()}catch(t){ce({fiber:e,error:t})}}},Pe=class extends ke{fiber=null;component;bdom=null;componentName;forceNextRender=!1;parentKey;props;defaultProps=null;renderFn;parent;children=Object.create(null);willUpdateProps=[];propsUpdated=[];willUnmount=[];mounted=[];willPatch=[];patched=[];signalComputation;trackedRefs=null;constructor(e,t,n,r,i){super(n),this.parent=r,this.parentKey=i,this.pluginManager=r?r.pluginManager:n.pluginManager,this.componentName=e.name,this.signalComputation=We(()=>this.render(!1),!1,Se.EXECUTED),this.props=t;let s=z();P(void 0),H.push(this);try{this.component=new e(this);let o={this:this.component,__owl__:this};this.renderFn=n.getTemplate(e.template).bind(this.component,o,this),this.component.setup()}finally{H.pop(),P(s)}}decorate(e,t){let n=this.component,r=this;if(this.app.dev){let i=`${this.componentName}.${t}`;return{[i](...o){return e.call(n,r,...o)}}[i]}return e.bind(n,r)}async initiateRender(e){this.fiber=e,this.mounted.length&&e.root.mounted.push(e);let t=this.component,n=z();P(void 0);try{let r=this.willStart.map(i=>i.call(t));P(n),await Promise.all(r)}catch(r){if(Fe(r)&&this.status>A.MOUNTED)return;ce({node:this,error:r});return}this.status===A.NEW&&this.fiber===e&&e.render()}async render(e){if(this.status>=A.CANCELLED)return;let t=this.fiber;if(t&&(t.root.locked||t.bdom===!0)&&(await Promise.resolve(),t=this.fiber),t){if(!t.bdom&&!Q.has(t)){e&&(t.deep=e);return}e=e||t.deep}else if(!this.bdom)return;let n=Li(this);n.deep=e,this.fiber=n,this.app.scheduler.addFiber(n),await Promise.resolve(),!(this.status>=A.CANCELLED)&&this.fiber===n&&(t||!n.parent)&&n.render()}cancel(){this._cancel(),delete this.parent.children[this.parentKey],this.app.scheduler.scheduleDestroy(this)}_cancel(){super.cancel();let e=this.children;for(let t in e)e[t]._cancel()}destroy(){let e=this.status===A.MOUNTED;J++;try{this._destroy()}finally{J--}e&&(this.bdom.remove(),xt())}_destroy(){let e=this.component;if(this.status===A.MOUNTED)for(let t of this.willUnmount)t.call(e);J&&this.trackedRefs&&(tt||=[]).push(this);for(let t in this.children)this.children[t]._destroy();this.finalize(t=>ce({error:t,node:this})),ze(this.signalComputation)}sweepRefs(){let e=this.trackedRefs;if(e)for(let[t,n]of e){let r=n.value;r?r.isConnected||(t.set(null),e.delete(t)):e.delete(t)}}updateDom(){if(this.fiber)if(this.bdom===this.fiber.bdom)for(let e in this.children)this.children[e].updateDom();else{J++;try{this.bdom.patch(this.fiber.bdom,!1)}finally{J--}this.sweepRefs(),xt(),this.fiber.appliedToDom=!0,this.fiber=null}}firstNode(){let e=this.bdom;return e?e.firstNode():void 0}mount(e,t){let n=this.fiber.bdom;this.bdom=n,n.mount(e,t),this.status=A.MOUNTED,this.fiber.appliedToDom=!0,this.children=this.fiber.childrenMap,this.fiber=null}moveBeforeDOMNode(e,t){this.bdom.moveBeforeDOMNode(e,t)}moveBeforeVNode(e,t){this.bdom.moveBeforeVNode(e?e.bdom:null,t)}trackRef(e,t){(this.trackedRefs||=new Map).set(e,t)}patch(){this.fiber&&this.fiber.parent&&this._patch()}_patch(){let e=!1;for(let n in this.children){e=!0;break}let t=this.fiber;this.children=t.childrenMap,J++;try{this.bdom.patch(t.bdom,e)}finally{J--}this.sweepRefs(),xt(),t.appliedToDom=!0,this.fiber=null}beforeRemove(){this._destroy()}remove(){this.bdom.remove()}},J=0,tt=null;function xt(){if(J===0&&tt){let e=tt;tt=null;for(let t=0;t<e.length;t++)e[t].sweepRefs()}}function G(){let e=K();if(!(e instanceof Pe))throw new g("Expected to be in a component scope");return e}var er;typeof window<"u"&&(er=window.requestAnimationFrame.bind(window));var ji=class tr{static requestAnimationFrame=er;tasks=new Set;requestAnimationFrame;frame=0;delayedRenders=[];cancelledNodes=new Set;processing=!1;constructor(){this.requestAnimationFrame=tr.requestAnimationFrame,this.processTasks=this.processTasks.bind(this)}addFiber(t){this.tasks.add(t.root)}scheduleDestroy(t){this.cancelledNodes.add(t),this.frame===0&&(this.frame=this.requestAnimationFrame(this.processTasks))}flush(){if(this.delayedRenders.length){let t=this.delayedRenders;this.delayedRenders=[];for(let n of t)n.root&&n.node.status!==A.DESTROYED&&n.node.fiber===n&&n.render()}this.frame===0&&(this.frame=this.requestAnimationFrame(this.processTasks))}processTasks(){if(!this.processing){this.processing=!0,this.frame=0,this.processCancelledNodes();for(let t of this.tasks){if(t.root!==t){this.tasks.delete(t);continue}let n=Q.has(t);if(n&&t.counter!==0){this.tasks.delete(t);continue}if(t.node.status===A.DESTROYED){this.tasks.delete(t);continue}t.counter===0&&(n||t.complete(),t.appliedToDom&&this.tasks.delete(t))}for(let t of this.tasks)t.node.status===A.DESTROYED&&this.tasks.delete(t);this.processing=!1}}processCancelledNodes(){for(let t of this.cancelledNodes)t._destroy();this.cancelledNodes.clear();for(let t of this.tasks)t.node.status===A.DESTROYED&&this.tasks.delete(t)}},ee=class{static template="";__owl__;constructor(e){this.__owl__=e}setup(){}},Vi=Object.create;function Fi(e,t){return e==null||e===!1?t:e}function Ki(e,t,n,r,i,s,o){n=n+"__slot_"+r;let l=e.__owl__.props.slots||{},{__render:c,__ctx:h,__scope:a}=l[r]||{},u=Vi(h||{});a&&(u[a]=s);let f=c?c(u,t,n):null;if(o){let m,d;return f?m=i?ae(r,f):f:d=o(e,t,n),Ut([m,d])}return f||Ie("")}function Wi(e,t){return e.key=t,e}function Ui(e){let t,n;if(Array.isArray(e))t=e,n=e;else if(e instanceof Map)t=[...e.keys()],n=[...e.values()];else if(Symbol.iterator in Object(e))t=[...e],n=t;else if(e&&typeof e=="object")n=Object.values(e),t=Object.keys(e);else throw new g(`Invalid loop expression: "${e}" is not iterable`);let r=n.length;return[t,n,r,new Array(r)]}function zi(e){let t=parseFloat(e);return isNaN(t)?e:t}function Hi(e,t){for(let n=0,r=e.length;n<r;n++)if(e[n]!==t[n])return!1;return!0}var nr=class{fn;ctx;component;node;key;constructor(e,t,n,r,i){this.fn=e,this.ctx=t,this.component=n,this.node=r,this.key=i}evaluate(){return this.fn.call(this.component,this.ctx,this.node,this.key)}toString(){return this.evaluate().toString()}};function Gi(e,t){if(e==null)return t?ae("default",t):ae("undefined",Ie(""));let n,r;return e instanceof $e?(n="string_safe",r=Ht(e)):e instanceof nr?(n="lazy_value",r=e.evaluate()):(n="string_unsafe",r=Ie(e)),ae(n,r)}function qi(e,t){if(!e)throw new g("Ref is undefined or null");let n,r;if(e.add&&e.delete)n=e.add.bind(e),r=e.delete.bind(e);else if(e.set){n=e.set.bind(e);let i=e[ie];r=i?s=>{i.value===s&&e.set(null)}:()=>e.set(null),i&&t.trackRef(e,i)}else throw new g("Ref should implement either a 'set' function or 'add' and 'delete' functions");return(i,s)=>{s&&r(s),i&&n(i)}}function Xi(e,t,n){if(typeof e!="function")throw new g(`Invalid handler expression: the \`t-on\` expression should evaluate to a function, but got '${typeof e}'. Did you mean to use an arrow function? (e.g. \`t-on-click="() => expr"\`)`);e.call(t.this,n)}var On=new WeakMap;function Yi(e,t,n){let r=On.get(e);r||(r=new Map,On.set(e,r));let i=r.get(t);if(i)return i.set(n),i.readonly;let s=x(n);return s.readonly=se(s),r.set(t,s),s.readonly}function Zi(e){if(typeof e!="function"||typeof e.set!="function")throw new g("Invalid t-model expression: expression should evaluate to a function with a 'set' method defined on it");return e}function Ji(e,t,n,r,i,s){let o=!n,l,c=s.length===0;r?l=(a,u)=>!0:i?l=function(a,u){for(let f in a)if(a[f]!==u[f])return!0;return Object.keys(a).length!==Object.keys(u).length}:c?l=(a,u)=>!1:l=function(a,u){for(let f of s)if(a[f]!==u[f])return!0;return!1};let h=Pe.prototype.initiateRender;return(a,u,f,m,d)=>{let b=f.children,p=b[u];o&&p&&p.component.constructor!==d&&(p=void 0);let S=f.fiber;if(p){if(l(p.props,a)||S.deep||p.forceNextRender){p.forceNextRender=!1;let N=p.willUpdateProps,w=Pi(p,S);p.fiber=w;let T=S.root;p.willPatch.length&&T.willPatch.push(w),p.patched.length&&T.patched.push(w);let y;if(N.length){let E=a,v=p.defaultProps;if(v){E=Object.assign({},a);for(let O in v)E[O]===void 0&&(E[O]=v[O])}let C=p.component,D=z();P(void 0);for(let O of N){let k=O.call(C,E);k&&typeof k.then=="function"&&(y||=[]).push(k)}P(D)}if(y)(y.length===1?y[0]:Promise.all(y)).then(()=>{if(w===p.fiber){p.props=a;for(let v of p.propsUpdated)v();w.render()}},v=>{ce({node:p,error:v})});else{p.props=a;for(let E of p.propsUpdated)E();w.render()}}}else{if(n){let w=m.constructor.components;if(!w)throw new g(`Cannot find the definition of component "${t}", missing static components key in parent`);if(d=w[t],d){if(!(d.prototype instanceof ee))throw new g(`"${t}" is not a Component. It must inherit from the Component class`)}else throw new g(`Cannot find the definition of component "${t}"`)}p=new Pe(d,a,e,f,u),b[u]=p;let N=new ot(p,S);p.willStart.length?h.call(p,N):(p.fiber=N,p.mounted.length&&N.root.mounted.push(N),N.render())}return S.childrenMap[u]=p,p}}function Qi(e,t,n,r,i,s){let o=n.getTemplate(e);return ae(e,o.call(t,r,i,s+e))}var es={withDefault:Fi,zero:Symbol("zero"),callSlot:Ki,withKey:Wi,prepareList:Ui,shallowEqual:Hi,toNumber:zi,LazyValue:nr,safeOutput:Gi,createCatcher:xi,markRaw:He,OwlError:g,createRef:qi,modelExpr:Zi,createComponent:Ji,callTemplate:Qi,callHandler:Xi,toSignal:Yi},ts={text:Ie,createBlock:Hn,list:Zn,multi:Ut,html:Ht,toggler:ae},Le=class{static registerTemplate(e,t){st[e]=t}dev;rawTemplates=Object.create(st);templates={};getRawTemplate;translateFn;translatableAttributes;customDirectives;runtimeUtils;hasGlobalValues;constructor(e={}){if(this.dev=e.dev||!1,this.translateFn=e.translateFn,this.translatableAttributes=e.translatableAttributes,e.templates)if(e.templates instanceof Document||typeof e.templates=="string")this.addTemplates(e.templates);else for(let t in e.templates)this.addTemplate(t,e.templates[t]);this.getRawTemplate=e.getTemplate,this.customDirectives=e.customDirectives||{},this.runtimeUtils={...es,__globals__:e.globalValues||{}},this.hasGlobalValues=!!(e.globalValues&&Object.keys(e.globalValues).length)}addTemplate(e,t){if(e in this.rawTemplates){if(!this.dev)return;let n=this.rawTemplates[e];if(ns(n,t))return;throw new g(`Template ${e} already defined with different content`)}this.rawTemplates[e]=t}addTemplates(e){if(e){e=e instanceof Document?e:this._parseXML(e);for(let t of e.querySelectorAll("[t-name]")){let n=t.getAttribute("t-name");this.addTemplate(n,t)}}}getTemplate(e){let t=e;if(!(t in this.templates)){let n=this.getRawTemplate?.(e)||this.rawTemplates[e];if(n===void 0){let l="",c=oe();throw c instanceof Pe&&(l=` (for component "${c.componentName}")`),new g(`Missing template: "${e}"${l}`)}let i=typeof n=="function"&&!(n instanceof Element)?n:this._compileTemplate(e,n),s=this.templates;this.templates[t]=function(l,c){return s[t].call(this,l,c)};let o=i(this,ts,this.runtimeUtils);this.templates[t]=o}return this.templates[t]}_compileTemplate(e,t){throw new g("Unable to compile a template. Please use owl full build instead")}_parseXML(e){throw new g("Unable to parse XML templates. Please use owl full build instead, or pass a Document instance.")}},st={};function te(...e){let t=`__template__${te.nextId++}`,n=String.raw(...e);return st[t]=n,t}te.nextId=1;function ns(e,t){if(e===t)return!0;if(typeof e=="function"!=(typeof t=="function"))return!1;let n=e instanceof Element?e.outerHTML:String(e),r=t instanceof Element?t.outerHTML:String(t);return n===r}var xn=!1,nt=new Set;typeof window<"u"&&(window.__OWL_DEVTOOLS__||={apps:nt,Fiber:ot,RootFiber:it,toRaw:Y,proxy:Ae});var qt=class rr extends Le{static validateTarget=hi;static apps=nt;static version=ii;name;scheduler=new ji;roots=new Set;pluginManager;destroyed=!1;constructor(t={}){super(t),this.name=t.name||"",nt.add(this),this.pluginManager=new ge(this,{config:t.config}),t.plugins?Xe(this.pluginManager,t.plugins):this.pluginManager.status=A.MOUNTED,t.test&&(this.dev=!0),this.dev&&!t.test&&!xn&&(console.info("Owl is running in 'dev' mode."),xn=!0)}createRoot(t,n={}){let r=n.props||{},i,s,o=new Promise((d,b)=>{i=d,s=b}),l,c=null;try{l=new Pe(t,r,this,null,null);let d=n;d.pluginManager&&(l.pluginManager=d.pluginManager),d.onError&&ve.set(l,[d.onError])}catch(d){c=d,s(d)}let h=null,a=null,u=()=>{if(a)return a;if(c)return Promise.reject(c);h=new Qn(l,null);let d=ve.get(l);if(d||(d=[],ve.set(l,d)),d.unshift((p,S)=>{let N=S();s(N)}),a=new Promise(p=>{h.onPrepared=()=>p()}),l.mounted.push(()=>{i(l.component),d.shift()}),this.scheduler.addFiber(h),this.pluginManager.status<A.MOUNTED&&l.willStart.unshift(()=>this.pluginManager.ready),l.willStart.length)l.initiateRender(h);else{l.fiber=h,l.mounted.length&&h.root.mounted.push(h);try{h.render()}catch(p){s(p)}}return a},m={get prepared(){return h?h.counter===0:!1},promise:o,prepare:u,mount:(d,b)=>(c||(rr.validateTarget(d),u(),h.commit(d,b)),o),destroy:()=>{this.roots.delete(m),l?.destroy(),this.scheduler.processCancelledNodes()}};return this.roots.add(m),m}destroy(){for(let t of this.roots)t.destroy();this.pluginManager.destroy(),this.scheduler.processCancelledNodes(),this.scheduler.tasks.clear(),this.scheduler.delayedRenders=[],nt.delete(this),this.destroyed=!0}_handleError(t){throw t}};async function rs(e,t,n={}){let r=new qt(n);return r.pluginManager.status<A.MOUNTED&&await r.pluginManager.ready,r.createRoot(e,n).mount(t,n)}var is=(e,t,n)=>{let{data:r,modifiers:i}=In(e);e=r;let s=!1;if(i.length){let o=!1,l=t.target===n;for(let c of i)switch(c){case"self":if(o=!0,l)continue;return s;case"prevent":(o&&l||!o)&&t.preventDefault();continue;case"stop":(o&&l||!o)&&t.stopPropagation(),s=!0;continue}}if(Object.hasOwnProperty.call(e,0)){let o=e[0];if(typeof o!="function")throw new g(`Invalid handler (expected a function, received: '${o}')`);let l=e[1]?e[1].__owl__:null;(!l||l.status===A.MOUNTED)&&o(e[1],t)}return s};function ss(e){let t=G();function n(r,i){return e.call(this,i,r)}t.willUpdateProps.push(t.decorate(n,"onWillUpdateProps"))}function ir(e){let t=G();t.mounted.push(t.decorate(e,"onMounted"))}function os(e){let t=G();t.willPatch.unshift(t.decorate(e,"onWillPatch"))}function ls(e){let t=G();t.patched.push(t.decorate(e,"onPatched"))}function as(e){let t=G();t.willUnmount.unshift(t.decorate(e,"onWillUnmount"))}function sr(e){let t=G(),n=ve.get(t);n||(n=[],ve.set(t,n)),n.push(e.bind(t.component))}function cs(e,t){let n=G(),r=le(t),i=n.props[e];return n.app.dev&&(t!==void 0&&(!r||i!==void 0)&&W(i,t,`Invalid prop '${e}' in '${n.componentName}'`),n.willUpdateProps.push(s=>{if(s[e]!==n.props[e])throw new g(`Prop '${e}' changed in component '${n.componentName}'. Props declared with \`props.static()\` are static and should not change. If the prop is a signal, pass the same signal reference (its inner value may change).`)})),i===void 0&&r?r():i}function us(){return $t(ee)}var j={...kt,component:us};function fs(e){let t=G(),{app:n,componentName:r}=t,i=null;if(e&&!Array.isArray(e))for(let u in e){let f=le(e[u]);f&&((i||={})[u]=f())}i&&(t.defaultProps=Object.assign(t.defaultProps||{},i));function s(u,f){return u[f]===void 0&&i&&f in i?i[f]:u[f]}let o=Object.create(null),l=Object.create(null);function c(u){o[u]=x(s(t.props,u)),Reflect.defineProperty(l,u,{enumerable:!0,configurable:!0,get:o[u]})}function h(u){for(let f of u)c(f)}function a(u){for(let f of u)o[f].set(s(t.props,f))}if(e){let u=Array.isArray(e)?e:Object.keys(e);if(h(u),t.propsUpdated.push(()=>a(u)),n.dev){if(i){let m={};for(let d in e)d in i&&(m[d]=e[d]);W(i,j.object(m),`Invalid component default props (${r})`)}let f=j.object(e);W(t.props,f,`Invalid component props (${r})`),t.willUpdateProps.push(m=>{W(m,f,`Invalid component props (${r})`)})}}else{let u=m=>{let d=[];for(let b in m)b.charCodeAt(0)!==1&&d.push(b);return d},f=u(t.props);h(f),t.propsUpdated.push(()=>{let m=u(t.props),d=new Set(m);for(let b of f)d.has(b)||(Reflect.deleteProperty(l,b),delete o[b]);for(let b of m)b in o||c(b);a(m),f=m})}return l}var lt=Object.assign(fs,{static:cs}),hs=class extends ee{static template=te`
3
3
  <t t-if="this.props.error()">
4
4
  <t t-call-slot="fallback"/>
5
5
  </t>
6
6
  <t t-else="">
7
7
  <t t-call-slot="default"/>
8
8
  </t>
9
- `;props=lt({error:j.signal().optional(()=>x(null))});setup(){sr(e=>this.props.error.set(e))}},ds=vn,ps=class extends ee{static template=te`<t t-call-slot="default"/>`},ms=class extends ee{static template=te``;props=lt({slots:j.object(["default"]),target:j.or([j.string(),j.signal(j.instanceOf(HTMLElement)),j.instanceOf(HTMLElement)])});setup(){let e=this.__owl__,t=e.app,n=this.props.slots,r=null,i=()=>{r&&(r.destroy(),r=null)};De(()=>{let s=gs(this.props.target);if(s)return r=t.createRoot(ps,{props:{slots:n}}),r.node.pluginManager=e.pluginManager,ce.set(r.node,[Mn(e)]),r.mount(s),i}),Z(i)}};function gs(e){return typeof e=="function"&&(e=e()),typeof e=="string"?document.querySelector(e):e instanceof HTMLElement?e:null}var bs=class extends ee{static template=te`<t t-call-slot="default"/>`},vs=class extends ee{static template=te`
9
+ `;props=lt({error:j.signal().optional(()=>x(null))});setup(){sr(e=>this.props.error.set(e))}},ds=vn,ps=class extends ee{static template=te`<t t-call-slot="default"/>`},ms=class extends ee{static template=te``;props=lt({slots:j.object(["default"]),target:j.or([j.string(),j.signal(j.instanceOf(HTMLElement)),j.instanceOf(HTMLElement)])});setup(){let e=this.__owl__,t=e.app,n=this.props.slots,r=null,i=()=>{r&&(r.destroy(),r=null)};_e(()=>{let s=gs(this.props.target);if(s)return r=t.createRoot(ps,{props:{slots:n},pluginManager:e.pluginManager,onError:Mn(e)}),r.mount(s),i}),Z(i)}};function gs(e){return typeof e=="function"&&(e=e()),typeof e=="string"?document.querySelector(e):e instanceof HTMLElement?e:null}var bs=class extends ee{static template=te`<t t-call-slot="default"/>`},vs=class extends ee{static template=te`
10
10
  <t t-if="!this.prepared()">
11
11
  <t t-call-slot="fallback"/>
12
12
  </t>
13
- `;props=lt({slots:j.object({default:j.any(),fallback:j.any().optional()})});prepared=x(!1);mounted=x(!1);subRootMounted=!1;setup(){let e=this.__owl__,t=e.app.createRoot(bs,{props:{slots:this.props.slots}});t.node.pluginManager=e.pluginManager,ce.set(t.node,[Mn(e)]),t.prepare().then(()=>this.prepared.set(!0));let n=t.node.fiber;n&&n.counter===0&&this.prepared.set(!0),ir(()=>this.mounted.set(!0)),De(()=>{if(this.subRootMounted||!this.prepared()||!this.mounted())return;this.subRootMounted=!0;let r=e.bdom.firstNode();t.mount(r.parentElement,{afterNode:r})}),Z(()=>t.destroy())}};function ys(e,t){let n=G(),r=new ge(n.app,{parent:n.pluginManager,config:t});n.pluginManager=r,Z(()=>r.destroy()),Xe(r,e),r.status<A.MOUNTED&&Ye(()=>r.ready)}ye.shouldNormalizeDom=!1;ye.mainEventHandler=is;var ws={config:ye,mount:et,patch:Ri,remove:Mi,list:Zn,multi:Ut,text:Me,toggler:ae,createBlock:Hn,html:Ht},Ts={version:qt.version,date:"2026-07-02T07:16:12.339Z",hash:"84aea7c6",url:"https://github.com/odoo/owl"};var Ns="true,false,NaN,null,undefined,debugger,console,window,in,instanceof,new,function,return,eval,void,Math,RegExp,Array,Object,Date,__globals__".split(","),or=Object.assign(Object.create(null),{and:"&&",or:"||",gt:">",gte:">=",lt:"<",lte:"<="}),lr=Object.assign(Object.create(null),{"{":"LEFT_BRACE","}":"RIGHT_BRACE","[":"LEFT_BRACKET","]":"RIGHT_BRACKET",":":"COLON",",":"COMMA","(":"LEFT_PAREN",")":"RIGHT_PAREN"}),Es="...,.,===,==,+,!==,!=,!,||,&&,>=,>,<=,<,?,-,*,/,%,typeof ,=>,=,;,in ,new ,|,&,^,~".split(","),$s=function(e){let t=e[0],n=t;if(t!=="'"&&t!=='"'&&t!=="`")return!1;let r=1,i;for(;e[r]&&e[r]!==n;){if(i=e[r],t+=i,i==="\\"){if(r++,i=e[r],!i)throw new g("Invalid expression");t+=i}r++}if(e[r]!==n)throw new g("Invalid expression");return t+=n,n==="`"?{type:"TEMPLATE_STRING",value:t,replace(s){return t.replace(/\$\{(.*?)\}/g,(o,l)=>"${"+s(l)+"}")}}:{type:"VALUE",value:t}},Ss=function(e){let t=e[0];if(t&&t.match(/[0-9]/)){let n=1;for(;e[n]&&e[n].match(/[0-9]|\./);)t+=e[n],n++;return{type:"VALUE",value:t}}else return!1},Cs=function(e){let t=e[0];if(t&&t.match(/[a-zA-Z_\$]/)){let n=1;for(;e[n]&&e[n].match(/[\w\$]/);)t+=e[n],n++;return t in or?{type:"OPERATOR",value:or[t],size:t.length}:{type:"SYMBOL",value:t}}else return!1},ks=function(e){let t=e[0];return t&&t in lr?{type:lr[t],value:t}:!1},As=function(e){for(let t of Es)if(e.startsWith(t))return{type:"OPERATOR",value:t};return!1},Ds=[$s,Ss,As,Cs,ks];function _s(e){let t=[],n=!0,r,i=e;try{for(;n;)if(i=i.trim(),i){for(let s of Ds)if(n=s(i),n){t.push(n),i=i.slice(n.size||n.value.length);break}}else n=!1}catch(s){r=s}if(i.length||r)throw new g(`Tokenizer error: could not tokenize \`${e}\``);return t}var Os=e=>e&&(e.type==="LEFT_BRACE"||e.type==="COMMA"),xs=e=>e&&(e.type==="RIGHT_BRACE"||e.type==="COMMA"),Rs=new Map([["in "," in "]]);function mr(e,t){let n=[];t?.size&&n.push({vars:t,depth:-1/0});let r=_s(e),i=0,s=[],o=-1;function l(a){return n.some(u=>u.vars.has(a))}for(;i<r.length;){let a=r[i],u=r[i-1],f=r[i+1],m=s[s.length-1];switch(a.type){case"LEFT_BRACE":case"LEFT_BRACKET":case"LEFT_PAREN":s.push(a.type);break;case"RIGHT_BRACE":case"RIGHT_BRACKET":case"RIGHT_PAREN":for(s.pop();n.length>0&&s.length<n[n.length-1].depth;)n.pop();break}let p=a.type==="SYMBOL"&&!Ns.includes(a.value);if(p&&u&&(m==="LEFT_BRACE"&&Os(u)&&xs(f)&&(r.splice(i+1,0,{type:"COLON",value:":"},{...a}),f=r[i+1]),(u.type==="OPERATOR"&&u.value==="."||(u.type==="LEFT_BRACE"||u.type==="COMMA")&&f&&f.type==="COLON")&&(p=!1)),a.type==="TEMPLATE_STRING"){let b=new Set;for(let d of n)for(let S of d.vars)b.add(S);a.value=a.replace(d=>_(d,b))}if(f&&f.type==="OPERATOR"&&f.value==="=>"){let b=new Set;if(s.length===0&&(o=i+1),a.type==="RIGHT_PAREN"){let d=i-1;for(;d>0&&r[d].type!=="LEFT_PAREN";)r[d].type==="SYMBOL"&&r[d].originalValue&&(b.add(r[d].originalValue),r[d].value=`_${r[d].originalValue}`,r[d].isLocal=!0),d--}else b.add(a.value);n.push({vars:b,depth:s.length})}p&&(a.varName=a.value,l(a.value)?(a.value=`_${a.value}`,a.isLocal=!0):(a.originalValue=a.value,a.value=`ctx['${a.value}']`)),i++}let c=null;if(o!==-1){c=[];let a=new Set;for(let u=o+1;u<r.length;u++){let f=r[u];f.varName&&!f.isLocal&&f.varName!=="this"&&!a.has(f.varName)&&(a.add(f.varName),c.push(f.varName))}}return{expr:r.map(a=>Rs.get(a.value)||a.value).join(""),freeVariables:c}}function _(e,t){return mr(e,t).expr}var ut=/\{\{.*?\}\}|\#\{.*?\}/g;function Ms(e,t){let n=e.match(ut);return n&&n[0].length===e.length?`(${t(e.slice(2,n[0][0]==="{"?-2:-1))})`:"`"+e.replace(ut,i=>"${"+t(i.slice(2,i[0]==="{"?-2:-1))+"}")+"`"}function Xt(e){return Ms(e,_)}function Zt(e){let n=new DOMParser().parseFromString(e,"text/xml");if(n.getElementsByTagName("parsererror").length){let r="Invalid XML in template.",i=n.getElementsByTagName("parsererror")[0].textContent;if(i){r+=`
13
+ `;props=lt({slots:j.object({default:j.any(),fallback:j.any().optional()})});prepared=x(!1);mounted=x(!1);subRootMounted=!1;setup(){let e=this.__owl__,t=e.app.createRoot(bs,{props:{slots:this.props.slots},pluginManager:e.pluginManager,onError:Mn(e)});t.prepare().then(()=>this.prepared.set(!0)),t.prepared&&this.prepared.set(!0),ir(()=>this.mounted.set(!0)),_e(()=>{if(this.subRootMounted||!this.prepared()||!this.mounted())return;this.subRootMounted=!0;let n=e.bdom.firstNode();t.mount(n.parentElement,{afterNode:n})}),Z(()=>t.destroy())}};function ys(e,t){let n=G(),r=new ge(n.app,{parent:n.pluginManager,config:t});n.pluginManager=r,Z(()=>r.destroy()),Xe(r,e),r.status<A.MOUNTED&&Ye(()=>r.ready)}we.shouldNormalizeDom=!1;we.mainEventHandler=is;var ws={config:we,mount:et,patch:Ri,remove:Mi,list:Zn,multi:Ut,text:Ie,toggler:ae,createBlock:Hn,html:Ht},Ts={version:qt.version,date:"2026-07-07T08:36:25.562Z",hash:"1d192035",url:"https://github.com/odoo/owl"};var Ns="true,false,NaN,null,undefined,debugger,console,window,in,instanceof,new,function,return,eval,void,Math,RegExp,Array,Object,Date,__globals__".split(","),or=Object.assign(Object.create(null),{and:"&&",or:"||",gt:">",gte:">=",lt:"<",lte:"<="}),lr=Object.assign(Object.create(null),{"{":"LEFT_BRACE","}":"RIGHT_BRACE","[":"LEFT_BRACKET","]":"RIGHT_BRACKET",":":"COLON",",":"COMMA","(":"LEFT_PAREN",")":"RIGHT_PAREN"}),Es="...,.,===,==,+,!==,!=,!,||,&&,>=,>,<=,<,?,-,*,/,%,typeof ,=>,=,;,in ,new ,|,&,^,~".split(","),$s=function(e){let t=e[0],n=t;if(t!=="'"&&t!=='"'&&t!=="`")return!1;let r=1,i;for(;e[r]&&e[r]!==n;){if(i=e[r],t+=i,i==="\\"){if(r++,i=e[r],!i)throw new g("Invalid expression");t+=i}r++}if(e[r]!==n)throw new g("Invalid expression");return t+=n,n==="`"?{type:"TEMPLATE_STRING",value:t,replace(s){return t.replace(/\$\{(.*?)\}/g,(o,l)=>"${"+s(l)+"}")}}:{type:"VALUE",value:t}},Ss=function(e){let t=e[0];if(t&&t.match(/[0-9]/)){let n=1;for(;e[n]&&e[n].match(/[0-9]|\./);)t+=e[n],n++;return{type:"VALUE",value:t}}else return!1},Cs=function(e){let t=e[0];if(t&&t.match(/[a-zA-Z_\$]/)){let n=1;for(;e[n]&&e[n].match(/[\w\$]/);)t+=e[n],n++;return t in or?{type:"OPERATOR",value:or[t],size:t.length}:{type:"SYMBOL",value:t}}else return!1},ks=function(e){let t=e[0];return t&&t in lr?{type:lr[t],value:t}:!1},As=function(e){for(let t of Es)if(e.startsWith(t))return{type:"OPERATOR",value:t};return!1},Ds=[$s,Ss,As,Cs,ks];function _s(e){let t=[],n=!0,r,i=e;try{for(;n;)if(i=i.trim(),i){for(let s of Ds)if(n=s(i),n){t.push(n),i=i.slice(n.size||n.value.length);break}}else n=!1}catch(s){r=s}if(i.length||r)throw new g(`Tokenizer error: could not tokenize \`${e}\``);return t}var Os=e=>e&&(e.type==="LEFT_BRACE"||e.type==="COMMA"),xs=e=>e&&(e.type==="RIGHT_BRACE"||e.type==="COMMA"),Rs=new Map([["in "," in "]]);function mr(e,t){let n=[];t?.size&&n.push({vars:t,depth:-1/0});let r=_s(e),i=0,s=[],o=-1;function l(a){return n.some(u=>u.vars.has(a))}for(;i<r.length;){let a=r[i],u=r[i-1],f=r[i+1],m=s[s.length-1];switch(a.type){case"LEFT_BRACE":case"LEFT_BRACKET":case"LEFT_PAREN":s.push(a.type);break;case"RIGHT_BRACE":case"RIGHT_BRACKET":case"RIGHT_PAREN":for(s.pop();n.length>0&&s.length<n[n.length-1].depth;)n.pop();break}let d=a.type==="SYMBOL"&&!Ns.includes(a.value);if(d&&u&&(m==="LEFT_BRACE"&&Os(u)&&xs(f)&&(r.splice(i+1,0,{type:"COLON",value:":"},{...a}),f=r[i+1]),(u.type==="OPERATOR"&&u.value==="."||(u.type==="LEFT_BRACE"||u.type==="COMMA")&&f&&f.type==="COLON")&&(d=!1)),a.type==="TEMPLATE_STRING"){let b=new Set;for(let p of n)for(let S of p.vars)b.add(S);a.value=a.replace(p=>_(p,b))}if(f&&f.type==="OPERATOR"&&f.value==="=>"){let b=new Set;if(s.length===0&&(o=i+1),a.type==="RIGHT_PAREN"){let p=i-1;for(;p>0&&r[p].type!=="LEFT_PAREN";)r[p].type==="SYMBOL"&&r[p].originalValue&&(b.add(r[p].originalValue),r[p].value=`_${r[p].originalValue}`,r[p].isLocal=!0),p--}else b.add(a.value);n.push({vars:b,depth:s.length})}d&&(a.varName=a.value,l(a.value)?(a.value=`_${a.value}`,a.isLocal=!0):(a.originalValue=a.value,a.value=`ctx['${a.value}']`)),i++}let c=null;if(o!==-1){c=[];let a=new Set;for(let u=o+1;u<r.length;u++){let f=r[u];f.varName&&!f.isLocal&&f.varName!=="this"&&!a.has(f.varName)&&(a.add(f.varName),c.push(f.varName))}}return{expr:r.map(a=>Rs.get(a.value)||a.value).join(""),freeVariables:c}}function _(e,t){return mr(e,t).expr}var ut=/\{\{.*?\}\}|\#\{.*?\}/g;function Ms(e,t){let n=e.match(ut);return n&&n[0].length===e.length?`(${t(e.slice(2,n[0][0]==="{"?-2:-1))})`:"`"+e.replace(ut,i=>"${"+t(i.slice(2,i[0]==="{"?-2:-1))+"}")+"`"}function Xt(e){return Ms(e,_)}function Zt(e){let n=new DOMParser().parseFromString(e,"text/xml");if(n.getElementsByTagName("parsererror").length){let r="Invalid XML in template.",i=n.getElementsByTagName("parsererror")[0].textContent;if(i){r+=`
14
14
  The parser has produced the following error message:
15
15
  `+i;let s=/\d+/g,o=s.exec(i);if(o){let l=Number(o[0]),c=e.split(`
16
16
  `)[l-1],h=s.exec(i);if(c&&h){let a=Number(h[0])-1;c[a]&&(r+=`
17
17
  The error might be located at xml line ${l} column ${a}
18
18
  ${c}
19
- ${"-".repeat(a-1)}^`)}}}throw new g(r)}return n}var $={Text:0,DomNode:2,Multi:3,TIf:4,TSet:5,TCall:6,TOut:7,TForEach:8,TKey:9,TComponent:10,TDebug:11,TLog:12,TCallSlot:13,TCallBlock:14,TTranslation:15,TTranslationContext:16},re={First:1,Last:2,Index:4,Value:8},ar=new WeakMap;function Is(e,t){let n={inPreTag:!1,customDirectives:t};if(typeof e=="string"){let i=Zt(`<t>${e}</t>`).firstChild;return cr(i,n)}let r=ar.get(e);return r||(r=cr(e.cloneNode(!0),n),ar.set(e,r)),r}function cr(e,t){return ro(e),B(e,t)||{type:$.Text,value:""}}function B(e,t){return e instanceof Element?js(e,t)||Vs(e,t)||Us(e,t)||qs(e,t)||Qs(e,t)||eo(e,t)||Hs(e,t)||Gs(e,t)||zs(e,t)||Ws(e,t)||Js(e,t)||Zs(e,t)||Ks(e,t)||Xs(e,t)||Ps(e,t):Bs(e,t)}function Ps(e,t){return e.tagName!=="t"?null:ft(e,t)}var Ls=/[\r\n]/;function Bs(e,t){if(e.nodeType===Node.TEXT_NODE){let n=e.textContent||"";return!t.inPreTag&&Ls.test(n)&&!n.trim()?null:{type:$.Text,value:n}}return null}function js(e,t){if(!t.customDirectives)return null;let n=e.getAttributeNames();for(let r of n){if(r==="t-custom"||r==="t-custom-")throw new g("Missing custom directive name with t-custom directive");if(r.startsWith("t-custom-")){let i=r.split(".")[0].slice(9),s=t.customDirectives[i];if(!s)throw new g(`Custom directive "${i}" is not defined`);let o=e.getAttribute(r),l=r.split(".").slice(1);e.removeAttribute(r);try{s(e,o,l)}catch(c){throw new g(`Custom directive "${i}" throw the following error: ${c}`)}return B(e,t)}}return null}function Vs(e,t){if(e.hasAttribute("t-debug")){e.removeAttribute("t-debug");let n=B(e,t),r={type:$.TDebug,content:n};return n?.hasNoRepresentation&&(r.hasNoRepresentation=!0),r}if(e.hasAttribute("t-log")){let n=e.getAttribute("t-log");e.removeAttribute("t-log");let r=B(e,t),i={type:$.TLog,expr:n,content:r};return r?.hasNoRepresentation&&(i.hasNoRepresentation=!0),i}return null}var Fs=new Set(["svg","g","path"]);function Ks(e,t){let{tagName:n}=e,r=e.getAttribute("t-tag");if(e.removeAttribute("t-tag"),n==="t"&&!r)return null;if(n.startsWith("block-"))throw new g(`Invalid tag name: '${n}'`);t=Object.assign({},t),n==="pre"&&(t.inPreTag=!0);let i=!t.nameSpace&&Fs.has(n)?"http://www.w3.org/2000/svg":null,s=e.getAttribute("t-ref");e.removeAttribute("t-ref");let o=e.getAttributeNames(),l=null,c=null,h=null,a=null;for(let f of o){let m=e.getAttribute(f);if(f==="t-on"||f==="t-on-")throw new g("Missing event name with t-on directive");if(f.startsWith("t-on-"))h=h||{},h[f.slice(5)]=m;else if(f.startsWith("t-model")){if(!["input","select","textarea"].includes(n))throw new g("The t-model directive only works with <input>, <textarea> and <select>");let p=e.getAttribute("type"),b=n==="input",d=n==="select",S=b&&p==="checkbox",N=b&&p==="radio",w=f.includes(".trim"),T=w||f.includes(".lazy"),y=f.includes(".number"),E=f.includes(".proxy");a={expr:m,targetAttr:S?"checked":"value",specialInitTargetAttr:N?"checked":null,eventType:N?"click":d||T?"change":"input",hasDynamicChildren:!1,shouldTrim:w,shouldNumberize:y,isProxy:E},d&&(t=Object.assign({},t),t.tModelInfo=a)}else{if(f.startsWith("block-"))throw new g(`Invalid attribute: '${f}'`);if(f==="xmlns")i=m;else if(f.startsWith("t-translation-context-")){let p=f.slice(22);c=c||{},c[p]=m}else if(f!=="t-name"){if(f.startsWith("t-")&&!f.startsWith("t-att"))throw new g(`Unknown QWeb directive: '${f}'`);let p=t.tModelInfo;p&&["t-att-value","t-attf-value"].includes(f)&&(p.hasDynamicChildren=!0),l=l||{},l[f]=m}}}i&&(t.nameSpace=i);let u=Jt(e,t);return{type:$.DomNode,tag:n,dynamicTag:r,attrs:l,attrsTranslationCtx:c,on:h,ref:s,content:u,model:a,ns:i}}function Ws(e,t){if(!e.hasAttribute("t-out")&&!e.hasAttribute("t-esc"))return null;e.hasAttribute("t-esc")&&console.warn('t-esc has been deprecated in favor of t-out. If the value to render is not wrapped by the "markup" function, it will be escaped');let n=e.getAttribute("t-out")||e.getAttribute("t-esc");e.removeAttribute("t-out"),e.removeAttribute("t-esc");let r={type:$.TOut,expr:n,body:null},i=e.getAttribute("t-ref");e.removeAttribute("t-ref");let s=B(e,t);return s&&s.type===$.DomNode?(r.body=s.content.length?s.content:null,{...s,ref:i,content:[r]}):r}function Us(e,t){if(!e.hasAttribute("t-foreach"))return null;let n=e.outerHTML,r=e.getAttribute("t-foreach");e.removeAttribute("t-foreach");let i=e.getAttribute("t-as")||"";e.removeAttribute("t-as");let s=e.getAttribute("t-key");if(!s)throw new g(`"Directive t-foreach should always be used with a t-key!" (expression: t-foreach="${r}" t-as="${i}")`);e.removeAttribute("t-key");let o=B(e,t);if(!o)return null;let l=!n.includes("t-call"),c=0;return l&&!n.includes(`${i}_first`)&&(c|=re.First),l&&!n.includes(`${i}_last`)&&(c|=re.Last),l&&!n.includes(`${i}_index`)&&(c|=re.Index),l&&!n.includes(`${i}_value`)&&(c|=re.Value),{type:$.TForEach,collection:r,elem:i,body:o,key:s,noFlags:c}}function zs(e,t){if(!e.hasAttribute("t-key"))return null;let n=e.getAttribute("t-key");e.removeAttribute("t-key");let r=B(e,t);if(!r)return null;let i={type:$.TKey,expr:n,content:r};return r.hasNoRepresentation&&(i.hasNoRepresentation=!0),i}function Hs(e,t){if(!e.hasAttribute("t-call"))return null;if(e.tagName!=="t")throw new g(`Directive 't-call' can only be used on <t> nodes (used on a <${e.tagName}>)`);let n=e.getAttribute("t-call"),r=e.getAttribute("t-call-context");e.removeAttribute("t-call"),e.removeAttribute("t-call-context");let i=null,s=null;for(let l of e.getAttributeNames()){let c=e.getAttribute(l);if(l.startsWith("t-translation-context-")){let h=l.slice(22);s=s||{},s[h]=c}else i=i||{},i[l]=c}let o=ft(e,t);return{type:$.TCall,name:n,attrs:i,attrsTranslationCtx:s,body:o,context:r}}function Gs(e,t){if(!e.hasAttribute("t-call-block"))return null;let n=e.getAttribute("t-call-block");return{type:$.TCallBlock,name:n}}function qs(e,t){if(!e.hasAttribute("t-if"))return null;let n=e.getAttribute("t-if");e.removeAttribute("t-if");let r=B(e,t)||{type:$.Text,value:""},i=e.nextElementSibling,s=[];for(;i&&i.hasAttribute("t-elif");){let l=i.getAttribute("t-elif");i.removeAttribute("t-elif");let c=B(i,t),h=i.nextElementSibling;i.remove(),i=h,c&&s.push({condition:l,content:c})}let o=null;return i&&i.hasAttribute("t-else")&&(i.removeAttribute("t-else"),o=B(i,t),i.remove()),{type:$.TIf,condition:n,content:r,tElif:s.length?s:null,tElse:o}}function Xs(e,t){if(!e.hasAttribute("t-set"))return null;let n=e.getAttribute("t-set"),r=e.getAttribute("t-value")||null,i=e.innerHTML===e.textContent&&e.textContent||null,s=null;return e.textContent!==e.innerHTML&&(s=Jt(e,t)),{type:$.TSet,name:n,value:r,defaultValue:i,body:s,hasNoRepresentation:!0}}var Ys=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 Zs(e,t){let n=e.tagName,r=n[0],i=e.hasAttribute("t-component");if(i&&n!=="t")throw new g(`Directive 't-component' can only be used on <t> nodes (used on a <${n}>)`);if(!(r===r.toUpperCase()||i))return null;i&&(n=e.getAttribute("t-component"),e.removeAttribute("t-component"));let s=e.getAttribute("t-props");e.removeAttribute("t-props");let o=e.getAttribute("t-slot-scope");e.removeAttribute("t-slot-scope");let l=null,c=null,h=null;for(let u of e.getAttributeNames()){let f=e.getAttribute(u);if(u.startsWith("t-translation-context-")){let m=u.slice(22);h=h||{},h[m]=f}else if(u.startsWith("t-"))if(u.startsWith("t-on-"))l=l||{},l[u.slice(5)]=f;else{let m=Ys.get(u.split("-").slice(0,2).join("-"));throw new g(m||`unsupported directive on Component: ${u}`)}else c=c||{},c[u]=f}let a=null;if(e.hasChildNodes()){let u=e.cloneNode(!0),f=Array.from(u.querySelectorAll("[t-set-slot]"));for(let p of f){if(p.tagName!=="t")throw new g(`Directive 't-set-slot' can only be used on <t> nodes (used on a <${p.tagName}>)`);let b=p.getAttribute("t-set-slot"),d=p.parentElement,S=!1;for(;d&&d!==u;){if(d.hasAttribute("t-component")||d.tagName[0]===d.tagName[0].toUpperCase()){S=!0;break}d=d.parentElement}if(S||!d)continue;p.removeAttribute("t-set-slot"),p.remove();let N=B(p,t),w=null,T=null,y=null,E=null;for(let v of p.getAttributeNames()){let C=p.getAttribute(v);if(v==="t-slot-scope"){E=C;continue}else if(v.startsWith("t-translation-context-")){let D=v.slice(22);y=y||{},y[D]=C}else v.startsWith("t-on-")?(w=w||{},w[v.slice(5)]=C):(T=T||{},T[v]=C)}a=a||{},a[b]={content:N,on:w,attrs:T,attrsTranslationCtx:y,scope:E}}let m=ft(u,t);a=a||{},m&&!a.default&&(a.default={content:m,on:null,attrs:null,attrsTranslationCtx:null,scope:o})}return{type:$.TComponent,name:n,isDynamic:i,dynamicProps:s,props:c,propsTranslationCtx:h,slots:a,on:l}}function Js(e,t){if(!e.hasAttribute("t-call-slot")&&!e.hasAttribute("t-slot"))return null;e.hasAttribute("t-slot")&&console.warn("t-slot has been renamed t-call-slot.");let n=e.getAttribute("t-call-slot")||e.getAttribute("t-slot");e.removeAttribute("t-call-slot"),e.removeAttribute("t-slot");let r=null,i=null,s=null;for(let o of e.getAttributeNames()){let l=e.getAttribute(o);if(o.startsWith("t-on-"))s=s||{},s[o.slice(5)]=l;else if(o.startsWith("t-translation-context-")){let c=o.slice(22);i=i||{},i[c]=l}else r=r||{},r[o]=l}return{type:$.TCallSlot,name:n,attrs:r,attrsTranslationCtx:i,on:s,defaultContent:ft(e,t)}}function ur(e){let t={type:$.TTranslation,content:e};return e?.hasNoRepresentation&&(t.hasNoRepresentation=!0),t}function Qs(e,t){if(e.getAttribute("t-translation")!=="off")return null;e.removeAttribute("t-translation");let n=B(e,t);if(n?.type===$.Multi){let r=n.content.map(ur);return Qt(r)}return ur(n)}function fr(e,t){let n={type:$.TTranslationContext,content:e,translationCtx:t};return e?.hasNoRepresentation&&(n.hasNoRepresentation=!0),n}function eo(e,t){let n=e.getAttribute("t-translation-context");if(!n)return null;e.removeAttribute("t-translation-context");let r=B(e,t);if(r?.type===$.Multi){let i=r.content.map(s=>fr(s,n));return Qt(i)}return fr(r,n)}function Jt(e,t){let n=[];for(let r of e.childNodes){let i=B(r,t);i&&(i.type===$.Multi?n.push(...i.content):n.push(i))}return n}function Qt(e){let t={type:$.Multi,content:e};return e.every(n=>n.hasNoRepresentation)&&(t.hasNoRepresentation=!0),t}function ft(e,t){let n=Jt(e,t);switch(n.length){case 0:return null;case 1:return n[0];default:return Qt(n)}}function to(e){let t=e.querySelectorAll("[t-elif], [t-else]");for(let n=0,r=t.length;n<r;n++){let i=t[n],s=i.previousElementSibling,o=c=>s.getAttribute(c),l=c=>+!!i.getAttribute(c);if(s&&(o("t-if")||o("t-elif"))){if(o("t-foreach"))throw new g("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(l).reduce(function(h,a){return h+a})>1)throw new g("Only one conditional branching directive is allowed per node");let c;for(;(c=i.previousSibling)!==s;){if(c.nodeValue.trim().length&&c.nodeType!==8)throw new g("text is not allowed between branching directives");c.remove()}}else throw new g("t-elif and t-else directives must be preceded by a t-if or t-elif directive")}}function no(e){let t=[...e.querySelectorAll("[t-out]")].filter(n=>n.tagName[0]===n.tagName[0].toUpperCase()||n.hasAttribute("t-component"));for(let n of t){if(n.childNodes.length)throw new g("Cannot have t-out on a component that already has content");let r=n.getAttribute("t-out");n.removeAttribute("t-out");let i=n.ownerDocument.createElement("t");r!=null&&i.setAttribute("t-out",r),n.appendChild(i)}}function ro(e){to(e),no(e)}var hr=Symbol("zero"),io=/\s+/g,ne;typeof document<"u"&&(ne=document.implementation.createDocument(null,null,null));var so=new Set(["stop","capture","prevent","self","synthetic","passive"]),ct={};function I(e=""){return ct[e]=(ct[e]||0)+1,e+ct[e]}function oo(e,t){switch(e){case"input":return t==="checked"||t==="indeterminate"||t==="value"||t==="readonly"||t==="readOnly"||t==="disabled";case"option":return t==="selected"||t==="disabled";case"textarea":return t==="value"||t==="readonly"||t==="readOnly"||t==="disabled";case"select":return t==="value"||t==="disabled";case"button":case"optgroup":return t==="disabled"}return!1}function at(e){return`\`${e.replace(/\\/g,"\\\\").replace(/`/g,"\\`").replace(/\$\{/,"\\${")}\``}var Yt=class gr{static nextBlockId=1;varName;blockName;dynamicTagName=null;isRoot=!1;hasDynamicChildren=!1;children=[];data=[];dom;currentDom;childNumber=0;target;type;parentVar="";id;constructor(t,n){this.id=gr.nextBlockId++,this.varName="b"+this.id,this.blockName="block"+this.id,this.target=t,this.type=n}insertData(t,n="d"){let r=I(n);return this.target.addLine(`let ${r} = ${t};`),this.data.push(r)-1}insert(t){this.currentDom?this.currentDom.appendChild(t):this.dom=t}generateExpr(t){if(this.type==="block"){let n=this.children.length,r=this.data.length?`[${this.data.join(", ")}]`:n?"[]":"";return n&&(r+=", ["+this.children.map(i=>i.varName).join(", ")+"]"),this.dynamicTagName?`toggler(${this.dynamicTagName}, ${this.blockName}(${this.dynamicTagName})(${r}))`:`${this.blockName}(${r})`}else if(this.type==="list")return`list(c_block${this.id})`;return t}asXmlString(){let t=ne.createElement("t");return t.appendChild(this.dom),t.innerHTML}};function fe(e,t){return Object.assign({block:null,index:0,forceNewBlock:!0,translate:e.translate,translationCtx:e.translationCtx,tKeyExpr:null,nameSpace:e.nameSpace,tModelSelectedExpr:e.tModelSelectedExpr},t)}var dr=class{name;indentLevel=0;loopLevel=0;loopCtxVars=[];tSetVars=new Map;code=[];hasRoot=!1;deferReturn=!1;needsScopeProtection=!1;on;constructor(e,t){this.name=e,this.on=t||null}addLine(e,t){let n=new Array(this.indentLevel+2).join(" ");t===void 0?this.code.push(n+e):this.code.splice(t,0,n+e)}generateCode(){let e=[];e.push(`function ${this.name}(ctx, node, key = "") {`),this.needsScopeProtection&&e.push(" ctx = Object.create(ctx);");for(let t of this.code)e.push(t);return this.hasRoot||e.push("return text('');"),e.push("}"),e.join(`
19
+ ${"-".repeat(a-1)}^`)}}}throw new g(r)}return n}var $={Text:0,DomNode:2,Multi:3,TIf:4,TSet:5,TCall:6,TOut:7,TForEach:8,TKey:9,TComponent:10,TDebug:11,TLog:12,TCallSlot:13,TCallBlock:14,TTranslation:15,TTranslationContext:16},re={First:1,Last:2,Index:4,Value:8},ar=new WeakMap;function Is(e,t){let n={inPreTag:!1,customDirectives:t};if(typeof e=="string"){let i=Zt(`<t>${e}</t>`).firstChild;return cr(i,n)}let r=ar.get(e);return r||(r=cr(e.cloneNode(!0),n),ar.set(e,r)),r}function cr(e,t){return ro(e),B(e,t)||{type:$.Text,value:""}}function B(e,t){return e instanceof Element?js(e,t)||Vs(e,t)||Us(e,t)||qs(e,t)||Qs(e,t)||eo(e,t)||Hs(e,t)||Gs(e,t)||zs(e,t)||Ws(e,t)||Js(e,t)||Zs(e,t)||Ks(e,t)||Xs(e,t)||Ps(e,t):Bs(e,t)}function Ps(e,t){return e.tagName!=="t"?null:ft(e,t)}var Ls=/[\r\n]/;function Bs(e,t){if(e.nodeType===Node.TEXT_NODE){let n=e.textContent||"";return!t.inPreTag&&Ls.test(n)&&!n.trim()?null:{type:$.Text,value:n}}return null}function js(e,t){if(!t.customDirectives)return null;let n=e.getAttributeNames();for(let r of n){if(r==="t-custom"||r==="t-custom-")throw new g("Missing custom directive name with t-custom directive");if(r.startsWith("t-custom-")){let i=r.split(".")[0].slice(9),s=t.customDirectives[i];if(!s)throw new g(`Custom directive "${i}" is not defined`);let o=e.getAttribute(r),l=r.split(".").slice(1);e.removeAttribute(r);try{s(e,o,l)}catch(c){throw new g(`Custom directive "${i}" throw the following error: ${c}`)}return B(e,t)}}return null}function Vs(e,t){if(e.hasAttribute("t-debug")){e.removeAttribute("t-debug");let n=B(e,t),r={type:$.TDebug,content:n};return n?.hasNoRepresentation&&(r.hasNoRepresentation=!0),r}if(e.hasAttribute("t-log")){let n=e.getAttribute("t-log");e.removeAttribute("t-log");let r=B(e,t),i={type:$.TLog,expr:n,content:r};return r?.hasNoRepresentation&&(i.hasNoRepresentation=!0),i}return null}var Fs=new Set(["svg","g","path"]);function Ks(e,t){let{tagName:n}=e,r=e.getAttribute("t-tag");if(e.removeAttribute("t-tag"),n==="t"&&!r)return null;if(n.startsWith("block-"))throw new g(`Invalid tag name: '${n}'`);t=Object.assign({},t),n==="pre"&&(t.inPreTag=!0);let i=!t.nameSpace&&Fs.has(n)?"http://www.w3.org/2000/svg":null,s=e.getAttribute("t-ref");e.removeAttribute("t-ref");let o=e.getAttributeNames(),l=null,c=null,h=null,a=null;for(let f of o){let m=e.getAttribute(f);if(f==="t-on"||f==="t-on-")throw new g("Missing event name with t-on directive");if(f.startsWith("t-on-"))h=h||{},h[f.slice(5)]=m;else if(f.startsWith("t-model")){if(!["input","select","textarea"].includes(n))throw new g("The t-model directive only works with <input>, <textarea> and <select>");let d=e.getAttribute("type"),b=n==="input",p=n==="select",S=b&&d==="checkbox",N=b&&d==="radio",w=f.includes(".trim"),T=w||f.includes(".lazy"),y=f.includes(".number"),E=f.includes(".proxy");a={expr:m,targetAttr:S?"checked":"value",specialInitTargetAttr:N?"checked":null,eventType:N?"click":p||T?"change":"input",hasDynamicChildren:!1,shouldTrim:w,shouldNumberize:y,isProxy:E},p&&(t=Object.assign({},t),t.tModelInfo=a)}else{if(f.startsWith("block-"))throw new g(`Invalid attribute: '${f}'`);if(f==="xmlns")i=m;else if(f.startsWith("t-translation-context-")){let d=f.slice(22);c=c||{},c[d]=m}else if(f!=="t-name"){if(f.startsWith("t-")&&!f.startsWith("t-att"))throw new g(`Unknown QWeb directive: '${f}'`);let d=t.tModelInfo;d&&["t-att-value","t-attf-value"].includes(f)&&(d.hasDynamicChildren=!0),l=l||{},l[f]=m}}}i&&(t.nameSpace=i);let u=Jt(e,t);return{type:$.DomNode,tag:n,dynamicTag:r,attrs:l,attrsTranslationCtx:c,on:h,ref:s,content:u,model:a,ns:i}}function Ws(e,t){if(!e.hasAttribute("t-out")&&!e.hasAttribute("t-esc"))return null;e.hasAttribute("t-esc")&&console.warn('t-esc has been deprecated in favor of t-out. If the value to render is not wrapped by the "markup" function, it will be escaped');let n=e.getAttribute("t-out")||e.getAttribute("t-esc");e.removeAttribute("t-out"),e.removeAttribute("t-esc");let r={type:$.TOut,expr:n,body:null},i=e.getAttribute("t-ref");e.removeAttribute("t-ref");let s=B(e,t);return s&&s.type===$.DomNode?(r.body=s.content.length?s.content:null,{...s,ref:i,content:[r]}):r}function Us(e,t){if(!e.hasAttribute("t-foreach"))return null;let n=e.outerHTML,r=e.getAttribute("t-foreach");e.removeAttribute("t-foreach");let i=e.getAttribute("t-as")||"";e.removeAttribute("t-as");let s=e.getAttribute("t-key");if(!s)throw new g(`"Directive t-foreach should always be used with a t-key!" (expression: t-foreach="${r}" t-as="${i}")`);e.removeAttribute("t-key");let o=B(e,t);if(!o)return null;let l=!n.includes("t-call"),c=0;return l&&!n.includes(`${i}_first`)&&(c|=re.First),l&&!n.includes(`${i}_last`)&&(c|=re.Last),l&&!n.includes(`${i}_index`)&&(c|=re.Index),l&&!n.includes(`${i}_value`)&&(c|=re.Value),{type:$.TForEach,collection:r,elem:i,body:o,key:s,noFlags:c}}function zs(e,t){if(!e.hasAttribute("t-key"))return null;let n=e.getAttribute("t-key");e.removeAttribute("t-key");let r=B(e,t);if(!r)return null;let i={type:$.TKey,expr:n,content:r};return r.hasNoRepresentation&&(i.hasNoRepresentation=!0),i}function Hs(e,t){if(!e.hasAttribute("t-call"))return null;if(e.tagName!=="t")throw new g(`Directive 't-call' can only be used on <t> nodes (used on a <${e.tagName}>)`);let n=e.getAttribute("t-call"),r=e.getAttribute("t-call-context");e.removeAttribute("t-call"),e.removeAttribute("t-call-context");let i=null,s=null;for(let l of e.getAttributeNames()){let c=e.getAttribute(l);if(l.startsWith("t-translation-context-")){let h=l.slice(22);s=s||{},s[h]=c}else i=i||{},i[l]=c}let o=ft(e,t);return{type:$.TCall,name:n,attrs:i,attrsTranslationCtx:s,body:o,context:r}}function Gs(e,t){if(!e.hasAttribute("t-call-block"))return null;let n=e.getAttribute("t-call-block");return{type:$.TCallBlock,name:n}}function qs(e,t){if(!e.hasAttribute("t-if"))return null;let n=e.getAttribute("t-if");e.removeAttribute("t-if");let r=B(e,t)||{type:$.Text,value:""},i=e.nextElementSibling,s=[];for(;i&&i.hasAttribute("t-elif");){let l=i.getAttribute("t-elif");i.removeAttribute("t-elif");let c=B(i,t),h=i.nextElementSibling;i.remove(),i=h,c&&s.push({condition:l,content:c})}let o=null;return i&&i.hasAttribute("t-else")&&(i.removeAttribute("t-else"),o=B(i,t),i.remove()),{type:$.TIf,condition:n,content:r,tElif:s.length?s:null,tElse:o}}function Xs(e,t){if(!e.hasAttribute("t-set"))return null;let n=e.getAttribute("t-set"),r=e.getAttribute("t-value")||null,i=e.innerHTML===e.textContent&&e.textContent||null,s=null;return e.textContent!==e.innerHTML&&(s=Jt(e,t)),{type:$.TSet,name:n,value:r,defaultValue:i,body:s,hasNoRepresentation:!0}}var Ys=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 Zs(e,t){let n=e.tagName,r=n[0],i=e.hasAttribute("t-component");if(i&&n!=="t")throw new g(`Directive 't-component' can only be used on <t> nodes (used on a <${n}>)`);if(!(r===r.toUpperCase()||i))return null;i&&(n=e.getAttribute("t-component"),e.removeAttribute("t-component"));let s=e.getAttribute("t-props");e.removeAttribute("t-props");let o=e.getAttribute("t-slot-scope");e.removeAttribute("t-slot-scope");let l=null,c=null,h=null;for(let u of e.getAttributeNames()){let f=e.getAttribute(u);if(u.startsWith("t-translation-context-")){let m=u.slice(22);h=h||{},h[m]=f}else if(u.startsWith("t-"))if(u.startsWith("t-on-"))l=l||{},l[u.slice(5)]=f;else{let m=Ys.get(u.split("-").slice(0,2).join("-"));throw new g(m||`unsupported directive on Component: ${u}`)}else c=c||{},c[u]=f}let a=null;if(e.hasChildNodes()){let u=e.cloneNode(!0),f=Array.from(u.querySelectorAll("[t-set-slot]"));for(let d of f){if(d.tagName!=="t")throw new g(`Directive 't-set-slot' can only be used on <t> nodes (used on a <${d.tagName}>)`);let b=d.getAttribute("t-set-slot"),p=d.parentElement,S=!1;for(;p&&p!==u;){if(p.hasAttribute("t-component")||p.tagName[0]===p.tagName[0].toUpperCase()){S=!0;break}p=p.parentElement}if(S||!p)continue;d.removeAttribute("t-set-slot"),d.remove();let N=B(d,t),w=null,T=null,y=null,E=null;for(let v of d.getAttributeNames()){let C=d.getAttribute(v);if(v==="t-slot-scope"){E=C;continue}else if(v.startsWith("t-translation-context-")){let D=v.slice(22);y=y||{},y[D]=C}else v.startsWith("t-on-")?(w=w||{},w[v.slice(5)]=C):(T=T||{},T[v]=C)}a=a||{},a[b]={content:N,on:w,attrs:T,attrsTranslationCtx:y,scope:E}}let m=ft(u,t);a=a||{},m&&!a.default&&(a.default={content:m,on:null,attrs:null,attrsTranslationCtx:null,scope:o})}return{type:$.TComponent,name:n,isDynamic:i,dynamicProps:s,props:c,propsTranslationCtx:h,slots:a,on:l}}function Js(e,t){if(!e.hasAttribute("t-call-slot")&&!e.hasAttribute("t-slot"))return null;e.hasAttribute("t-slot")&&console.warn("t-slot has been renamed t-call-slot.");let n=e.getAttribute("t-call-slot")||e.getAttribute("t-slot");e.removeAttribute("t-call-slot"),e.removeAttribute("t-slot");let r=null,i=null,s=null;for(let o of e.getAttributeNames()){let l=e.getAttribute(o);if(o.startsWith("t-on-"))s=s||{},s[o.slice(5)]=l;else if(o.startsWith("t-translation-context-")){let c=o.slice(22);i=i||{},i[c]=l}else r=r||{},r[o]=l}return{type:$.TCallSlot,name:n,attrs:r,attrsTranslationCtx:i,on:s,defaultContent:ft(e,t)}}function ur(e){let t={type:$.TTranslation,content:e};return e?.hasNoRepresentation&&(t.hasNoRepresentation=!0),t}function Qs(e,t){if(e.getAttribute("t-translation")!=="off")return null;e.removeAttribute("t-translation");let n=B(e,t);if(n?.type===$.Multi){let r=n.content.map(ur);return Qt(r)}return ur(n)}function fr(e,t){let n={type:$.TTranslationContext,content:e,translationCtx:t};return e?.hasNoRepresentation&&(n.hasNoRepresentation=!0),n}function eo(e,t){let n=e.getAttribute("t-translation-context");if(!n)return null;e.removeAttribute("t-translation-context");let r=B(e,t);if(r?.type===$.Multi){let i=r.content.map(s=>fr(s,n));return Qt(i)}return fr(r,n)}function Jt(e,t){let n=[];for(let r of e.childNodes){let i=B(r,t);i&&(i.type===$.Multi?n.push(...i.content):n.push(i))}return n}function Qt(e){let t={type:$.Multi,content:e};return e.every(n=>n.hasNoRepresentation)&&(t.hasNoRepresentation=!0),t}function ft(e,t){let n=Jt(e,t);switch(n.length){case 0:return null;case 1:return n[0];default:return Qt(n)}}function to(e){let t=e.querySelectorAll("[t-elif], [t-else]");for(let n=0,r=t.length;n<r;n++){let i=t[n],s=i.previousElementSibling,o=c=>s.getAttribute(c),l=c=>+!!i.getAttribute(c);if(s&&(o("t-if")||o("t-elif"))){if(o("t-foreach"))throw new g("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(l).reduce(function(h,a){return h+a})>1)throw new g("Only one conditional branching directive is allowed per node");let c;for(;(c=i.previousSibling)!==s;){if(c.nodeValue.trim().length&&c.nodeType!==8)throw new g("text is not allowed between branching directives");c.remove()}}else throw new g("t-elif and t-else directives must be preceded by a t-if or t-elif directive")}}function no(e){let t=[...e.querySelectorAll("[t-out]")].filter(n=>n.tagName[0]===n.tagName[0].toUpperCase()||n.hasAttribute("t-component"));for(let n of t){if(n.childNodes.length)throw new g("Cannot have t-out on a component that already has content");let r=n.getAttribute("t-out");n.removeAttribute("t-out");let i=n.ownerDocument.createElement("t");r!=null&&i.setAttribute("t-out",r),n.appendChild(i)}}function ro(e){to(e),no(e)}var hr=Symbol("zero"),io=/\s+/g,ne;typeof document<"u"&&(ne=document.implementation.createDocument(null,null,null));var so=new Set(["stop","capture","prevent","self","synthetic","passive"]),ct={};function I(e=""){return ct[e]=(ct[e]||0)+1,e+ct[e]}function oo(e,t){switch(e){case"input":return t==="checked"||t==="indeterminate"||t==="value"||t==="readonly"||t==="readOnly"||t==="disabled";case"option":return t==="selected"||t==="disabled";case"textarea":return t==="value"||t==="readonly"||t==="readOnly"||t==="disabled";case"select":return t==="value"||t==="disabled";case"button":case"optgroup":return t==="disabled"}return!1}function at(e){return`\`${e.replace(/\\/g,"\\\\").replace(/`/g,"\\`").replace(/\$\{/,"\\${")}\``}var Yt=class gr{static nextBlockId=1;varName;blockName;dynamicTagName=null;isRoot=!1;hasDynamicChildren=!1;children=[];data=[];dom;currentDom;childNumber=0;target;type;parentVar="";id;constructor(t,n){this.id=gr.nextBlockId++,this.varName="b"+this.id,this.blockName="block"+this.id,this.target=t,this.type=n}insertData(t,n="d"){let r=I(n);return this.target.addLine(`let ${r} = ${t};`),this.data.push(r)-1}insert(t){this.currentDom?this.currentDom.appendChild(t):this.dom=t}generateExpr(t){if(this.type==="block"){let n=this.children.length,r=this.data.length?`[${this.data.join(", ")}]`:n?"[]":"";return n&&(r+=", ["+this.children.map(i=>i.varName).join(", ")+"]"),this.dynamicTagName?`toggler(${this.dynamicTagName}, ${this.blockName}(${this.dynamicTagName})(${r}))`:`${this.blockName}(${r})`}else if(this.type==="list")return`list(c_block${this.id})`;return t}asXmlString(){let t=ne.createElement("t");return t.appendChild(this.dom),t.innerHTML}};function ue(e,t){return Object.assign({block:null,index:0,forceNewBlock:!0,translate:e.translate,translationCtx:e.translationCtx,tKeyExpr:null,nameSpace:e.nameSpace,tModelSelectedExpr:e.tModelSelectedExpr},t)}var dr=class{name;indentLevel=0;loopLevel=0;loopCtxVars=[];tSetVars=new Map;code=[];hasRoot=!1;deferReturn=!1;needsScopeProtection=!1;on;constructor(e,t){this.name=e,this.on=t||null}addLine(e,t){let n=new Array(this.indentLevel+2).join(" ");t===void 0?this.code.push(n+e):this.code.splice(t,0,n+e)}generateCode(){let e=[];e.push(`function ${this.name}(ctx, node, key = "") {`),this.needsScopeProtection&&e.push(" ctx = Object.create(ctx);");for(let t of this.code)e.push(t);return this.hasRoot||e.push("return text('');"),e.push("}"),e.join(`
20
20
  `)}currentKey(e){let t=this.loopLevel?`key${this.loopLevel}`:"key";return e.tKeyExpr&&(t=`${e.tKeyExpr} + ${t}`),t}},pr=["alt","aria-label","aria-placeholder","aria-roledescription","aria-valuetext","label","placeholder","title"],lo=/^(\s*)([\s\S]+?)(\s*)$/,ao=class{blocks=[];nextBlockId=1;isDebug=!1;targets=[];target=new dr("template");templateName;dev;translateFn;translatableAttributes=pr;ast;staticDefs=[];slotNames=new Set;helpers=new Set;constructor(e,t){if(this.translateFn=t.translateFn||(n=>n),t.translatableAttributes){let n=new Set(pr);for(let r of t.translatableAttributes)r.startsWith("-")?n.delete(r.slice(1)):n.add(r);this.translatableAttributes=[...n]}this.dev=t.dev||!1,this.ast=e,this.templateName=t.name,t.name&&(t.name.startsWith("__")?this.target.name=t.name:this.target.name=`template_${t.name.replace(/[^a-zA-Z0-9_$]/g,"_")}`),t.hasGlobalValues&&this.helpers.add("__globals__")}generateCode(){let e=this.ast;this.isDebug=e.type===$.TDebug,Yt.nextBlockId=1,ct={},this.compileAST(e,{block:null,index:0,forceNewBlock:!1,translate:!0,translationCtx:"",tKeyExpr:null});let t=[" let { text, createBlock, list, multi, html, toggler } = bdom;"];this.helpers.size&&t.push(`let { ${[...this.helpers].join(", ")} } = helpers;`),this.templateName&&t.push(`// Template name: "${this.templateName}"`);for(let{id:r,expr:i}of this.staticDefs)t.push(`const ${r} = ${i};`);if(this.blocks.length){t.push("");for(let r of this.blocks)if(r.dom){let i=at(r.asXmlString());r.dynamicTagName?(i=i.replace(/^`<\w+/,`\`<\${tag || '${r.dom.nodeName}'}`),i=i.replace(/\w+>`$/,`\${tag || '${r.dom.nodeName}'}>\``),t.push(`let ${r.blockName} = tag => createBlock(${i});`)):t.push(`let ${r.blockName} = createBlock(${i});`)}}if(this.targets.length)for(let r of this.targets)t.push(""),t=t.concat(r.generateCode());t.push(""),t=t.concat("return "+this.target.generateCode());let n=t.join(`
21
21
  `);if(this.isDebug){let r=`[Owl Debug]
22
- ${n}`;console.log(r)}return n}compileInNewTarget(e,t,n,r){let i=I(e),s=this.target,o=new dr(i,r);return this.targets.push(o),this.target=o,this.compileAST(t,fe(n)),this.target=s,i}addLine(e,t){this.target.addLine(e,t)}define(e,t){this.addLine(`const ${e} = ${t};`)}insertAnchor(e,t=e.children.length){let n=`block-child-${t}`,r=ne.createElement(n);e.insert(r)}createBlock(e,t,n){let r=this.target.hasRoot,i=new Yt(this.target,t);return r||(this.target.hasRoot=!0,i.isRoot=!0),e&&(e.children.push(i),e.type==="list"&&(i.parentVar=`c_block${e.id}`)),i}insertBlock(e,t,n){let r=t.generateExpr(e);if(t.parentVar){let i=this.target.currentKey(n);this.helpers.add("withKey"),this.addLine(`${t.parentVar}[${n.index}] = withKey(${r}, ${i});`);return}n.tKeyExpr&&(r=`toggler(${n.tKeyExpr}, ${r})`),t.isRoot&&!this.target.deferReturn?(this.target.on&&(r=this.wrapWithEventCatcher(r,this.target.on)),this.addLine(`return ${r};`)):this.define(t.varName,r)}translate(e,t){let n=lo.exec(e);return n[1]+this.translateFn(n[2],t)+n[3]}compileAST(e,t){switch(e.type){case $.Text:return this.compileText(e,t);case $.DomNode:return this.compileTDomNode(e,t);case $.TOut:return this.compileTOut(e,t);case $.TIf:return this.compileTIf(e,t);case $.TForEach:return this.compileTForeach(e,t);case $.TKey:return this.compileTKey(e,t);case $.Multi:return this.compileMulti(e,t);case $.TCall:return this.compileTCall(e,t);case $.TCallBlock:return this.compileTCallBlock(e,t);case $.TSet:return this.compileTSet(e,t);case $.TComponent:return this.compileComponent(e,t);case $.TDebug:return this.compileDebug(e,t);case $.TLog:return this.compileLog(e,t);case $.TCallSlot:return this.compileTCallSlot(e,t);case $.TTranslation:return this.compileTTranslation(e,t);case $.TTranslationContext:return this.compileTTranslationContext(e,t)}}compileDebug(e,t){return this.addLine("debugger;"),e.content?this.compileAST(e.content,t):null}compileLog(e,t){return this.addLine(`console.log(${_(e.expr)});`),e.content?this.compileAST(e.content,t):null}compileText(e,t){let{block:n,forceNewBlock:r}=t,i=e.value;if(i&&t.translate!==!1&&(i=this.translate(i,t.translationCtx)),t.inPreTag||(i=i.replace(io," ")),!n||r)n=this.createBlock(n,"text",t),this.insertBlock(`text(${at(i)})`,n,{...t,forceNewBlock:r&&!n});else{let s=e.type===$.Text?ne.createTextNode:ne.createComment;n.insert(s.call(ne,i))}return n.varName}generateHandlerCode(e,t){let n=e.split(".").slice(1).map(h=>{if(!so.has(h))throw new g(`Unknown event modifier: '${h}'`);return`"${h}"`}),r="";n.length&&(r=`${n.join(",")}, `);let i=_(t);if(!i.trim())return`[${r}, ctx]`;let s,o=i.match(/^(\([^)]*\))\s*=>/),l=!o&&i.match(/^([a-zA-Z_$][a-zA-Z0-9_$]*)\s*=>/);if(o){let h=o[1].slice(1,-1).trim(),a=i.slice(o[0].length);s=h?`(ctx,${h})=>${a}`:`(ctx)=>${a}`}else if(l){let h=i.slice(l[0].length);s=`(ctx,${l[1]})=>${h}`}else this.helpers.add("callHandler"),s=`(ctx, ev) => callHandler(${i}, ctx, ev)`;let c=I("hdlr_fn");return this.staticDefs.push({id:c,expr:s}),`[${r}${c}, ctx]`}compileTDomNode(e,t){let{block:n,forceNewBlock:r}=t,i=!n||r||e.dynamicTag!==null||e.ns,s=this.target.code.length;if(i&&((e.dynamicTag||t.tKeyExpr||e.ns)&&t.block&&this.insertAnchor(t.block),n=this.createBlock(n,"block",t),this.blocks.push(n),e.dynamicTag)){let a=I("tag");this.define(a,_(e.dynamicTag)),n.dynamicTagName=a}let o={};for(let a in e.attrs){let u,f;if(a.startsWith("t-attf")){u=Xt(e.attrs[a]);let m=n.insertData(u,"attr");f=a.slice(7),o["block-attribute-"+m]=f}else if(a.startsWith("t-att"))if(f=a==="t-att"?null:a.slice(6),u=_(e.attrs[a]),f&&oo(e.tag,f)){f==="readonly"&&(f="readOnly"),f==="value"?u=`new String((${u}) === 0 ? 0 : ((${u}) || ""))`:u=`new Boolean(${u})`;let m=n.insertData(u,"prop");o[`block-property-${m}`]=f}else{let m=n.insertData(u,"attr");a==="t-att"?o["block-attributes"]=String(m):o[`block-attribute-${m}`]=f}else if(this.translatableAttributes.includes(a)){let m=e.attrsTranslationCtx?.[a]||t.translationCtx;o[a]=this.translateFn(e.attrs[a],m)}else u=`"${e.attrs[a]}"`,f=a,o[a]=e.attrs[a];if(f==="value"&&t.tModelSelectedExpr){let m=n.insertData(`${t.tModelSelectedExpr} === ${u}`,"attr");o[`block-attribute-${m}`]="selected"}}let l;if(e.model){let{hasDynamicChildren:a,expr:u,eventType:f,shouldNumberize:m,shouldTrim:p,targetAttr:b,specialInitTargetAttr:d,isProxy:S}=e.model,N,w;if(S){let v=_(u);N=v,w=C=>`${v} = ${C}`}else{let v=I("expr"),C=_(u);this.helpers.add("modelExpr"),this.define(v,`modelExpr(${C})`),N=`${v}()`,w=D=>`${v}.set(${D})`}let T;if(d){let v=b in o&&`'${o[b]}'`;if(!v&&e.attrs){let C=e.attrs[`t-att-${b}`];C&&(v=_(C))}T=n.insertData(`${N} === ${v}`,"prop"),o[`block-property-${T}`]=d}else a?(l=`${I("bValue")}`,this.define(l,N)):(T=n.insertData(N,"prop"),o[`block-property-${T}`]=b);this.helpers.add("toNumber");let y=`ev.target.${b}`;y=p?`${y}.trim()`:y,y=m?`toNumber(${y})`:y;let E=`[(ctx, ev) => { ${w(y)}; }, ctx]`;T=n.insertData(E,"hdlr"),o[`block-handler-${T}`]=f}for(let a in e.on){let u=this.generateHandlerCode(a,e.on[a]),f=n.insertData(u,"hdlr");o[`block-handler-${f}`]=a}if(e.ref){let a=_(e.ref);this.helpers.add("createRef");let u=`createRef(${a}, node)`,f=n.insertData(u,"ref");o["block-ref"]=String(f)}let c=e.ns||t.nameSpace,h=c?ne.createElementNS(c,e.tag):ne.createElement(e.tag);for(let[a,u]of Object.entries(o))a==="class"&&u===""||h.setAttribute(a,u);if(n.insert(h),e.content.length){let a=n.currentDom;n.currentDom=h;let u=e.content;for(let f=0;f<u.length;f++){let m=e.content[f],p=fe(t,{block:n,index:n.childNumber,forceNewBlock:!1,tKeyExpr:t.tKeyExpr,nameSpace:c,tModelSelectedExpr:l,inPreTag:t.inPreTag||e.tag==="pre"});this.compileAST(m,p)}n.currentDom=a}if(i&&(this.insertBlock(`${n.blockName}(ddd)`,n,t),n.children.length&&n.hasDynamicChildren)){let a=this.target.code,u=n.children.slice(),f=u.shift();for(let m=s;m<a.length&&!(a[m].trimStart().startsWith(`const ${f.varName} `)&&(a[m]=a[m].replace(`const ${f.varName}`,f.varName),f=u.shift(),!f));m++);this.addLine(`let ${n.children.map(m=>m.varName).join(", ")};`,s)}return n.varName}compileZero(){this.helpers.add("zero");let e=this.slotNames.has(hr);this.slotNames.add(hr);let t=this.target.loopLevel?`key${this.target.loopLevel}`:"key";return e&&(t=this.generateComponentKey(t)),`ctx[zero]?.(node, ${t}) || text("")`}compileTOut(e,t){let{block:n}=t;n&&this.insertAnchor(n),n=this.createBlock(n,"html",t);let r;if(e.expr==="0")r=this.compileZero();else if(e.body){let i=null;i=Yt.nextBlockId;let s=fe(t);this.compileAST({type:$.Multi,content:e.body},s),this.helpers.add("safeOutput"),r=`safeOutput(${_(e.expr)}, b${i})`}else this.helpers.add("safeOutput"),r=`safeOutput(${_(e.expr)})`;return this.insertBlock(r,n,t),n.varName}compileTIfBranch(e,t,n){this.target.indentLevel++;let r=t.children.length;this.compileAST(e,fe(n,{block:t,index:n.index})),t.children.length>r&&this.insertAnchor(t,r),this.target.indentLevel--}compileTIf(e,t,n){let{block:r,forceNewBlock:i}=t,s=this.target.code.length,o=!r||r.type!=="multi"&&i;if(r&&(r.hasDynamicChildren=!0),(!r||r.type!=="multi"&&i)&&(r=this.createBlock(r,"multi",t)),this.addLine(`if (${_(e.condition)}) {`),this.compileTIfBranch(e.content,r,t),e.tElif)for(let l of e.tElif)this.addLine(`} else if (${_(l.condition)}) {`),this.compileTIfBranch(l.content,r,t);if(e.tElse&&(this.addLine("} else {"),this.compileTIfBranch(e.tElse,r,t)),this.addLine("}"),o){if(r.children.length){let c=this.target.code,h=r.children.slice(),a=h.shift();for(let u=s;u<c.length&&!(c[u].trimStart().startsWith(`const ${a.varName} `)&&(c[u]=c[u].replace(`const ${a.varName}`,a.varName),a=h.shift(),!a));u++);this.addLine(`let ${r.children.map(u=>u.varName).join(", ")};`,s)}let l=r.children.map(c=>c.varName).join(", ");this.insertBlock(`multi([${l}])`,r,t)}return r.varName}compileTForeach(e,t){let{block:n}=t;n&&this.insertAnchor(n),n=this.createBlock(n,"list",t),this.target.loopLevel++;let r=`i${this.target.loopLevel}`,i=I("ctx");this.addLine(`const ${i} = ctx;`),this.target.loopCtxVars.push(i);let s=`v_block${n.id}`,o=`k_block${n.id}`,l=`l_block${n.id}`,c=`c_block${n.id}`;this.helpers.add("prepareList"),this.define(`[${o}, ${s}, ${l}, ${c}]`,`prepareList(${_(e.collection)});`),this.dev&&this.define(`keys${n.id}`,"new Set()"),this.addLine(`for (let ${r} = 0; ${r} < ${l}; ${r}++) {`),this.target.indentLevel++,this.addLine(`let ctx = Object.create(${i});`),this.addLine(`ctx[\`${e.elem}\`] = ${o}[${r}];`),e.noFlags&re.First||this.addLine(`ctx[\`${e.elem}_first\`] = ${r} === 0;`),e.noFlags&re.Last||this.addLine(`ctx[\`${e.elem}_last\`] = ${r} === ${o}.length - 1;`),e.noFlags&re.Index||this.addLine(`ctx[\`${e.elem}_index\`] = ${r};`),e.noFlags&re.Value||this.addLine(`ctx[\`${e.elem}_value\`] = ${s}[${r}];`),this.define(`key${this.target.loopLevel}`,e.key?_(e.key):r),this.dev&&(this.helpers.add("OwlError"),this.addLine(`if (keys${n.id}.has(String(key${this.target.loopLevel}))) { throw new OwlError(\`Got duplicate key in t-foreach: \${key${this.target.loopLevel}}\`)}`),this.addLine(`keys${n.id}.add(String(key${this.target.loopLevel}));`));let h=fe(t,{block:n,index:r});return this.compileAST(e.body,h),this.target.indentLevel--,this.target.loopLevel--,this.target.loopCtxVars.pop(),this.addLine("}"),this.insertBlock("l",n,t),n.varName}compileTKey(e,t){let n=I("tKey_");return this.define(n,_(e.expr)),t=fe(t,{tKeyExpr:n,block:t.block,index:t.index}),this.compileAST(e.content,t)}compileMulti(e,t){let{block:n,forceNewBlock:r}=t,i=!n||r,s=this.target.code.length;if(i){let l=e.content.filter(h=>!h.hasNoRepresentation).length,c=null;if(l<=1){let h=!this.target.hasRoot&&e.content[e.content.length-1].hasNoRepresentation;h&&(this.target.deferReturn=!0);for(let a of e.content){let u=this.compileAST(a,t);c=c||u}return h&&(this.target.deferReturn=!1,this.addLine(`return ${c};`)),c}n=this.createBlock(n,"multi",t)}let o=0;for(let l=0,c=e.content.length;l<c;l++){let h=e.content[l],a=!h.hasNoRepresentation,u=fe(t,{block:n,index:o,forceNewBlock:a});this.compileAST(h,u),a&&o++}if(i){if(n.hasDynamicChildren&&n.children.length){let c=this.target.code,h=n.children.slice(),a=h.shift();for(let u=s;u<c.length&&!(c[u].trimStart().startsWith(`const ${a.varName} `)&&(c[u]=c[u].replace(`const ${a.varName}`,a.varName),a=h.shift(),!a));u++);this.addLine(`let ${n.children.map(u=>u.varName).join(", ")};`,s)}let l=n.children.map(c=>c.varName).join(", ");this.insertBlock(`multi([${l}])`,n,t)}return n.varName}compileTCall(e,t){let{block:n,forceNewBlock:r}=t,i=e.attrs?this.formatPropObject(e.attrs,e.attrsTranslationCtx,t.translationCtx):[],o=ut.test(e.name)?Xt(e.name):"`"+e.name+"`";if(n&&!r&&this.insertAnchor(n),n=this.createBlock(n,"multi",t),e.body){let a=this.compileInNewTarget("callBody",e.body,t),u=I("lazyBlock");this.define(u,`${a}.bind(this, ctx)`),this.helpers.add("zero"),i.push(`[zero]: ${u}`)}let l,c=`{${i.join(", ")}}`;if(e.context){let a=I("ctx");this.addLine(`const ${a} = ${_(e.context)};`),i.length?l=`Object.assign({this: ${a}}, ${c})`:l=`{this: ${a}}`}else i.length===0?l="ctx":l=`Object.assign(Object.create(ctx), ${c})`;let h=this.generateComponentKey();return this.helpers.add("callTemplate"),this.insertBlock(`callTemplate(${o}, this, app, ${l}, node, ${h})`,n,{...t,forceNewBlock:!n}),n.varName}compileTCallBlock(e,t){let{block:n,forceNewBlock:r}=t;return n&&(r||this.insertAnchor(n)),n=this.createBlock(n,"multi",t),this.insertBlock(_(e.name),n,{...t,forceNewBlock:!n}),n.varName}compileTSet(e,t){let n=e.value?_(e.value||""):"null",r=this.target.loopLevel===0,i=this.target.tSetVars.get(e.name),s=i!==void 0&&this.target.loopLevel>i;if(e.body){this.helpers.add("LazyValue");let o={type:$.Multi,content:e.body},l=this.compileInNewTarget("value",o,t),c=this.target.currentKey(t),h=`new LazyValue(${l}, ctx, this, node, ${c})`;if(h=e.value?h?`withDefault(${n}, ${h})`:n:h,this.helpers.add("withDefault"),s){let a=this.target.loopCtxVars[i];this.addLine(`${a}[\`${e.name}\`] = ${h};`)}else r?(this.target.needsScopeProtection=!0,this.addLine(`ctx[\`${e.name}\`] = ${h};`),this.target.tSetVars.set(e.name,0)):(this.addLine(`ctx[\`${e.name}\`] = ${h};`),this.target.tSetVars.set(e.name,this.target.loopLevel))}else{let o;if(e.defaultValue){let l=at(t.translate?this.translate(e.defaultValue,t.translationCtx):e.defaultValue);e.value?(this.helpers.add("withDefault"),o=`withDefault(${n}, ${l})`):o=l}else o=n;if(s){let l=this.target.loopCtxVars[i];this.addLine(`${l}["${e.name}"] = ${o};`)}else r?(this.target.needsScopeProtection=!0,this.addLine(`ctx["${e.name}"] = ${o};`),this.target.tSetVars.set(e.name,0)):(this.addLine(`ctx["${e.name}"] = ${o};`),this.target.tSetVars.set(e.name,this.target.loopLevel))}return null}generateComponentKey(e="key"){let t=[I("__")];for(let n=0;n<this.target.loopLevel;n++)t.push(`\${key${n+1}}`);return`${e} + \`${t.join("__")}\``}generateSignalCacheKey(){let e=[I("__sig_")];for(let t=0;t<this.target.loopLevel;t++)e.push(`\${key${t+1}}`);return`\`${e.join("__")}\``}formatProp(e,t,n,r){if(e.endsWith(".translate")){let i=n?.[e]||r;t=at(this.translateFn(t,i))}else t=_(t);if(e.includes(".")){let[i,s]=e.split(".");switch(e=i,s){case"bind":t=`(${t}).bind(this)`;break;case"alike":case"translate":break;default:throw new g(`Invalid prop suffix: ${s}`)}}return e=/^[a-z_]+$/i.test(e)?e:`'${e}'`,`${e}: ${t||void 0}`}formatPropObject(e,t,n){return Object.entries(e).map(([r,i])=>this.formatProp(r,i,t,n))}getPropString(e,t){let n=`{${e.join(",")}}`;return t&&(n=`Object.assign({}, ${_(t)}${e.length?", "+n:""})`),n}compileComponent(e,t){let{block:n}=t,r="slots"in(e.props||{}),i=[],s=[];for(let m in e.props||{}){let[p,b]=m.split(".");if(b==="signal"){let w=_(e.props[m]),T=/^[a-z_]+$/i.test(p)?p:`'${p}'`;this.helpers.add("toSignal");let y=this.generateSignalCacheKey();i.push(`${T}: toSignal(node, ${y}, ${w})`);continue}if(b){i.push(this.formatProp(m,e.props[m],e.propsTranslationCtx,t.translationCtx));continue}let{expr:d,freeVariables:S}=mr(e.props[m]),N=/^[a-z_]+$/i.test(p)?p:`'${p}'`;if(i.push(`${N}: ${d||void 0}`),S)for(let w of S){let T=`${p}.${w}`;s.push(`"${T}"`),i.push(`"${T}": ctx['${w}']`)}else s.push(`"${p}"`)}let o="";if(e.slots){let m=[];for(let p in e.slots){let b=e.slots[p],d=[];if(b.content){let w=this.compileInNewTarget("slot",b.content,t,b.on);d.push(`__render: ${w}.bind(this), __ctx: ctx`)}let S=e.slots[p].scope;S&&d.push(`__scope: "${S}"`),e.slots[p].attrs&&d.push(...this.formatPropObject(e.slots[p].attrs,e.slots[p].attrsTranslationCtx,t.translationCtx));let N=`{${d.join(", ")}}`;m.push(`'${p}': ${N}`)}o=`{${m.join(", ")}}`}o&&!(e.dynamicProps||r)&&(this.helpers.add("markRaw"),i.push(`slots: markRaw(${o})`));let l=this.getPropString(i,e.dynamicProps),c;(o&&(e.dynamicProps||r)||this.dev)&&(c=I("props"),this.define(c,l),l=c),o&&(e.dynamicProps||r)&&(this.helpers.add("markRaw"),this.addLine(`${c}.slots = markRaw(Object.assign(${o}, ${c}.slots))`));let h;e.isDynamic?(h=I("Comp"),this.define(h,_(e.name))):h=`\`${e.name}\``,n&&(t.forceNewBlock===!1||t.tKeyExpr)&&this.insertAnchor(n);let a=this.generateComponentKey();t.tKeyExpr&&(a=`${t.tKeyExpr} + ${a}`);let u=I("comp");this.helpers.add("createComponent"),this.staticDefs.push({id:u,expr:`createComponent(app, ${e.isDynamic?null:h}, ${!e.isDynamic}, ${!!e.slots}, ${!!e.dynamicProps}, [${s}])`}),e.isDynamic&&(a=`(${h}).name + ${a}`);let f=`${u}(${l}, ${a}, node, this, ${e.isDynamic?h:null})`;return e.isDynamic&&(f=`toggler(${h}, ${f})`),e.on&&(f=this.wrapWithEventCatcher(f,e.on)),n=this.createBlock(n,"multi",t),this.insertBlock(f,n,t),n.varName}wrapWithEventCatcher(e,t){this.helpers.add("createCatcher");let n=I("catcher"),r={},i=[];for(let s in t){let o=I("hdlr"),l=i.push(o)-1;r[s]=l;let c=this.generateHandlerCode(s,t[s]);this.define(o,c)}return this.staticDefs.push({id:n,expr:`createCatcher(${JSON.stringify(r)})`}),`${n}(${e}, [${i.join(",")}])`}compileTCallSlot(e,t){this.helpers.add("callSlot");let{block:n}=t,r,i,s=!1,o=!1;e.name.match(ut)?(s=!0,o=!0,i=Xt(e.name)):(i="'"+e.name+"'",o=o||this.slotNames.has(e.name),this.slotNames.add(e.name));let l={...e.attrs},c=l["t-props"];delete l["t-props"];let h=this.target.loopLevel?`key${this.target.loopLevel}`:"key";o&&(h=this.generateComponentKey(h));let a=e.attrs?this.formatPropObject(l,e.attrsTranslationCtx,t.translationCtx):[],u=this.getPropString(a,c);if(e.defaultContent){let f=this.compileInNewTarget("defaultContent",e.defaultContent,t);r=`callSlot(ctx, node, ${h}, ${i}, ${s}, ${u}, ${f}.bind(this))`}else if(s){let f=I("slot");this.define(f,i),r=`toggler(${f}, callSlot(ctx, node, ${h}, ${f}, ${s}, ${u}))`}else r=`callSlot(ctx, node, ${h}, ${i}, ${s}, ${u})`;return e.on&&(r=this.wrapWithEventCatcher(r,e.on)),n&&this.insertAnchor(n),n=this.createBlock(n,"multi",t),this.insertBlock(r,n,{...t,forceNewBlock:!1}),n.varName}compileTTranslation(e,t){return e.content?this.compileAST(e.content,Object.assign({},t,{translate:!1})):null}compileTTranslationContext(e,t){return e.content?this.compileAST(e.content,Object.assign({},t,{translationCtx:e.translationCtx})):null}};function br(e,t={hasGlobalValues:!1}){let n=Is(e,t.customDirectives),i=new ao(n,t).generateCode();try{return new Function("app, bdom, helpers",i)}catch(s){let{name:o}=t,l=o?`template "${o}"`:"anonymous template",c=new g(`Failed to compile ${l}: ${s.message}
22
+ ${n}`;console.log(r)}return n}compileInNewTarget(e,t,n,r){let i=I(e),s=this.target,o=new dr(i,r);return this.targets.push(o),this.target=o,this.compileAST(t,ue(n)),this.target=s,i}addLine(e,t){this.target.addLine(e,t)}define(e,t){this.addLine(`const ${e} = ${t};`)}insertAnchor(e,t=e.children.length){let n=`block-child-${t}`,r=ne.createElement(n);e.insert(r)}createBlock(e,t,n){let r=this.target.hasRoot,i=new Yt(this.target,t);return r||(this.target.hasRoot=!0,i.isRoot=!0),e&&(e.children.push(i),e.type==="list"&&(i.parentVar=`c_block${e.id}`)),i}insertBlock(e,t,n){let r=t.generateExpr(e);if(t.parentVar){let i=this.target.currentKey(n);this.helpers.add("withKey"),this.addLine(`${t.parentVar}[${n.index}] = withKey(${r}, ${i});`);return}n.tKeyExpr&&(r=`toggler(${n.tKeyExpr}, ${r})`),t.isRoot&&!this.target.deferReturn?(this.target.on&&(r=this.wrapWithEventCatcher(r,this.target.on)),this.addLine(`return ${r};`)):this.define(t.varName,r)}translate(e,t){let n=lo.exec(e);return n[1]+this.translateFn(n[2],t)+n[3]}compileAST(e,t){switch(e.type){case $.Text:return this.compileText(e,t);case $.DomNode:return this.compileTDomNode(e,t);case $.TOut:return this.compileTOut(e,t);case $.TIf:return this.compileTIf(e,t);case $.TForEach:return this.compileTForeach(e,t);case $.TKey:return this.compileTKey(e,t);case $.Multi:return this.compileMulti(e,t);case $.TCall:return this.compileTCall(e,t);case $.TCallBlock:return this.compileTCallBlock(e,t);case $.TSet:return this.compileTSet(e,t);case $.TComponent:return this.compileComponent(e,t);case $.TDebug:return this.compileDebug(e,t);case $.TLog:return this.compileLog(e,t);case $.TCallSlot:return this.compileTCallSlot(e,t);case $.TTranslation:return this.compileTTranslation(e,t);case $.TTranslationContext:return this.compileTTranslationContext(e,t)}}compileDebug(e,t){return this.addLine("debugger;"),e.content?this.compileAST(e.content,t):null}compileLog(e,t){return this.addLine(`console.log(${_(e.expr)});`),e.content?this.compileAST(e.content,t):null}compileText(e,t){let{block:n,forceNewBlock:r}=t,i=e.value;if(i&&t.translate!==!1&&(i=this.translate(i,t.translationCtx)),t.inPreTag||(i=i.replace(io," ")),!n||r)n=this.createBlock(n,"text",t),this.insertBlock(`text(${at(i)})`,n,{...t,forceNewBlock:r&&!n});else{let s=e.type===$.Text?ne.createTextNode:ne.createComment;n.insert(s.call(ne,i))}return n.varName}generateHandlerCode(e,t){let n=e.split(".").slice(1).map(h=>{if(!so.has(h))throw new g(`Unknown event modifier: '${h}'`);return`"${h}"`}),r="";n.length&&(r=`${n.join(",")}, `);let i=_(t);if(!i.trim())return`[${r}, ctx]`;let s,o=i.match(/^(\([^)]*\))\s*=>/),l=!o&&i.match(/^([a-zA-Z_$][a-zA-Z0-9_$]*)\s*=>/);if(o){let h=o[1].slice(1,-1).trim(),a=i.slice(o[0].length);s=h?`(ctx,${h})=>${a}`:`(ctx)=>${a}`}else if(l){let h=i.slice(l[0].length);s=`(ctx,${l[1]})=>${h}`}else this.helpers.add("callHandler"),s=`(ctx, ev) => callHandler(${i}, ctx, ev)`;let c=I("hdlr_fn");return this.staticDefs.push({id:c,expr:s}),`[${r}${c}, ctx]`}compileTDomNode(e,t){let{block:n,forceNewBlock:r}=t,i=!n||r||e.dynamicTag!==null||e.ns,s=this.target.code.length;if(i&&((e.dynamicTag||t.tKeyExpr||e.ns)&&t.block&&this.insertAnchor(t.block),n=this.createBlock(n,"block",t),this.blocks.push(n),e.dynamicTag)){let a=I("tag");this.define(a,_(e.dynamicTag)),n.dynamicTagName=a}let o={};for(let a in e.attrs){let u,f;if(a.startsWith("t-attf")){u=Xt(e.attrs[a]);let m=n.insertData(u,"attr");f=a.slice(7),o["block-attribute-"+m]=f}else if(a.startsWith("t-att"))if(f=a==="t-att"?null:a.slice(6),u=_(e.attrs[a]),f&&oo(e.tag,f)){f==="readonly"&&(f="readOnly"),f==="value"?u=`new String((${u}) === 0 ? 0 : ((${u}) || ""))`:u=`new Boolean(${u})`;let m=n.insertData(u,"prop");o[`block-property-${m}`]=f}else{let m=n.insertData(u,"attr");a==="t-att"?o["block-attributes"]=String(m):o[`block-attribute-${m}`]=f}else if(this.translatableAttributes.includes(a)){let m=e.attrsTranslationCtx?.[a]||t.translationCtx;o[a]=this.translateFn(e.attrs[a],m)}else u=`"${e.attrs[a]}"`,f=a,o[a]=e.attrs[a];if(f==="value"&&t.tModelSelectedExpr){let m=n.insertData(`${t.tModelSelectedExpr} === ${u}`,"attr");o[`block-attribute-${m}`]="selected"}}let l;if(e.model){let{hasDynamicChildren:a,expr:u,eventType:f,shouldNumberize:m,shouldTrim:d,targetAttr:b,specialInitTargetAttr:p,isProxy:S}=e.model,N,w;if(S){let v=_(u);N=v,w=C=>`${v} = ${C}`}else{let v=I("expr"),C=_(u);this.helpers.add("modelExpr"),this.define(v,`modelExpr(${C})`),N=`${v}()`,w=D=>`${v}.set(${D})`}let T;if(p){let v=b in o&&`'${o[b]}'`;if(!v&&e.attrs){let C=e.attrs[`t-att-${b}`];C&&(v=_(C))}T=n.insertData(`${N} === ${v}`,"prop"),o[`block-property-${T}`]=p}else a?(l=`${I("bValue")}`,this.define(l,N)):(T=n.insertData(N,"prop"),o[`block-property-${T}`]=b);this.helpers.add("toNumber");let y=`ev.target.${b}`;y=d?`${y}.trim()`:y,y=m?`toNumber(${y})`:y;let E=`[(ctx, ev) => { ${w(y)}; }, ctx]`;T=n.insertData(E,"hdlr"),o[`block-handler-${T}`]=f}for(let a in e.on){let u=this.generateHandlerCode(a,e.on[a]),f=n.insertData(u,"hdlr");o[`block-handler-${f}`]=a}if(e.ref){let a=_(e.ref);this.helpers.add("createRef");let u=`createRef(${a}, node)`,f=n.insertData(u,"ref");o["block-ref"]=String(f)}let c=e.ns||t.nameSpace,h=c?ne.createElementNS(c,e.tag):ne.createElement(e.tag);for(let[a,u]of Object.entries(o))a==="class"&&u===""||h.setAttribute(a,u);if(n.insert(h),e.content.length){let a=n.currentDom;n.currentDom=h;let u=e.content;for(let f=0;f<u.length;f++){let m=e.content[f],d=ue(t,{block:n,index:n.childNumber,forceNewBlock:!1,tKeyExpr:t.tKeyExpr,nameSpace:c,tModelSelectedExpr:l,inPreTag:t.inPreTag||e.tag==="pre"});this.compileAST(m,d)}n.currentDom=a}if(i&&(this.insertBlock(`${n.blockName}(ddd)`,n,t),n.children.length&&n.hasDynamicChildren)){let a=this.target.code,u=n.children.slice(),f=u.shift();for(let m=s;m<a.length&&!(a[m].trimStart().startsWith(`const ${f.varName} `)&&(a[m]=a[m].replace(`const ${f.varName}`,f.varName),f=u.shift(),!f));m++);this.addLine(`let ${n.children.map(m=>m.varName).join(", ")};`,s)}return n.varName}compileZero(){this.helpers.add("zero");let e=this.slotNames.has(hr);this.slotNames.add(hr);let t=this.target.loopLevel?`key${this.target.loopLevel}`:"key";return e&&(t=this.generateComponentKey(t)),`ctx[zero]?.(node, ${t}) || text("")`}compileTOut(e,t){let{block:n}=t;n&&this.insertAnchor(n),n=this.createBlock(n,"html",t);let r;if(e.expr==="0")r=this.compileZero();else if(e.body){let i=null;i=Yt.nextBlockId;let s=ue(t);this.compileAST({type:$.Multi,content:e.body},s),this.helpers.add("safeOutput"),r=`safeOutput(${_(e.expr)}, b${i})`}else this.helpers.add("safeOutput"),r=`safeOutput(${_(e.expr)})`;return this.insertBlock(r,n,t),n.varName}compileTIfBranch(e,t,n){this.target.indentLevel++;let r=t.children.length;this.compileAST(e,ue(n,{block:t,index:n.index})),t.children.length>r&&this.insertAnchor(t,r),this.target.indentLevel--}compileTIf(e,t,n){let{block:r,forceNewBlock:i}=t,s=this.target.code.length,o=!r||r.type!=="multi"&&i;if(r&&(r.hasDynamicChildren=!0),(!r||r.type!=="multi"&&i)&&(r=this.createBlock(r,"multi",t)),this.addLine(`if (${_(e.condition)}) {`),this.compileTIfBranch(e.content,r,t),e.tElif)for(let l of e.tElif)this.addLine(`} else if (${_(l.condition)}) {`),this.compileTIfBranch(l.content,r,t);if(e.tElse&&(this.addLine("} else {"),this.compileTIfBranch(e.tElse,r,t)),this.addLine("}"),o){if(r.children.length){let c=this.target.code,h=r.children.slice(),a=h.shift();for(let u=s;u<c.length&&!(c[u].trimStart().startsWith(`const ${a.varName} `)&&(c[u]=c[u].replace(`const ${a.varName}`,a.varName),a=h.shift(),!a));u++);this.addLine(`let ${r.children.map(u=>u.varName).join(", ")};`,s)}let l=r.children.map(c=>c.varName).join(", ");this.insertBlock(`multi([${l}])`,r,t)}return r.varName}compileTForeach(e,t){let{block:n}=t;n&&this.insertAnchor(n),n=this.createBlock(n,"list",t),this.target.loopLevel++;let r=`i${this.target.loopLevel}`,i=I("ctx");this.addLine(`const ${i} = ctx;`),this.target.loopCtxVars.push(i);let s=`v_block${n.id}`,o=`k_block${n.id}`,l=`l_block${n.id}`,c=`c_block${n.id}`;this.helpers.add("prepareList"),this.define(`[${o}, ${s}, ${l}, ${c}]`,`prepareList(${_(e.collection)});`),this.dev&&this.define(`keys${n.id}`,"new Set()"),this.addLine(`for (let ${r} = 0; ${r} < ${l}; ${r}++) {`),this.target.indentLevel++,this.addLine(`let ctx = Object.create(${i});`),this.addLine(`ctx[\`${e.elem}\`] = ${o}[${r}];`),e.noFlags&re.First||this.addLine(`ctx[\`${e.elem}_first\`] = ${r} === 0;`),e.noFlags&re.Last||this.addLine(`ctx[\`${e.elem}_last\`] = ${r} === ${o}.length - 1;`),e.noFlags&re.Index||this.addLine(`ctx[\`${e.elem}_index\`] = ${r};`),e.noFlags&re.Value||this.addLine(`ctx[\`${e.elem}_value\`] = ${s}[${r}];`),this.define(`key${this.target.loopLevel}`,e.key?_(e.key):r),this.dev&&(this.helpers.add("OwlError"),this.addLine(`if (keys${n.id}.has(String(key${this.target.loopLevel}))) { throw new OwlError(\`Got duplicate key in t-foreach: \${key${this.target.loopLevel}}\`)}`),this.addLine(`keys${n.id}.add(String(key${this.target.loopLevel}));`));let h=ue(t,{block:n,index:r});return this.compileAST(e.body,h),this.target.indentLevel--,this.target.loopLevel--,this.target.loopCtxVars.pop(),this.addLine("}"),this.insertBlock("l",n,t),n.varName}compileTKey(e,t){let n=I("tKey_");return this.define(n,_(e.expr)),t=ue(t,{tKeyExpr:n,block:t.block,index:t.index}),this.compileAST(e.content,t)}compileMulti(e,t){let{block:n,forceNewBlock:r}=t,i=!n||r,s=this.target.code.length;if(i){let l=e.content.filter(h=>!h.hasNoRepresentation).length,c=null;if(l<=1){let h=!this.target.hasRoot&&e.content[e.content.length-1].hasNoRepresentation;h&&(this.target.deferReturn=!0);for(let a of e.content){let u=this.compileAST(a,t);c=c||u}return h&&(this.target.deferReturn=!1,this.addLine(`return ${c};`)),c}n=this.createBlock(n,"multi",t)}let o=0;for(let l=0,c=e.content.length;l<c;l++){let h=e.content[l],a=!h.hasNoRepresentation,u=ue(t,{block:n,index:o,forceNewBlock:a});this.compileAST(h,u),a&&o++}if(i){if(n.hasDynamicChildren&&n.children.length){let c=this.target.code,h=n.children.slice(),a=h.shift();for(let u=s;u<c.length&&!(c[u].trimStart().startsWith(`const ${a.varName} `)&&(c[u]=c[u].replace(`const ${a.varName}`,a.varName),a=h.shift(),!a));u++);this.addLine(`let ${n.children.map(u=>u.varName).join(", ")};`,s)}let l=n.children.map(c=>c.varName).join(", ");this.insertBlock(`multi([${l}])`,n,t)}return n.varName}compileTCall(e,t){let{block:n,forceNewBlock:r}=t,i=e.attrs?this.formatPropObject(e.attrs,e.attrsTranslationCtx,t.translationCtx):[],o=ut.test(e.name)?Xt(e.name):"`"+e.name+"`";if(n&&!r&&this.insertAnchor(n),n=this.createBlock(n,"multi",t),e.body){let a=this.compileInNewTarget("callBody",e.body,t),u=I("lazyBlock");this.define(u,`${a}.bind(this, ctx)`),this.helpers.add("zero"),i.push(`[zero]: ${u}`)}let l,c=`{${i.join(", ")}}`;if(e.context){let a=I("ctx");this.addLine(`const ${a} = ${_(e.context)};`),i.length?l=`Object.assign({this: ${a}}, ${c})`:l=`{this: ${a}}`}else i.length===0?l="ctx":l=`Object.assign(Object.create(ctx), ${c})`;let h=this.generateComponentKey();return this.helpers.add("callTemplate"),this.insertBlock(`callTemplate(${o}, this, app, ${l}, node, ${h})`,n,{...t,forceNewBlock:!n}),n.varName}compileTCallBlock(e,t){let{block:n,forceNewBlock:r}=t;return n&&(r||this.insertAnchor(n)),n=this.createBlock(n,"multi",t),this.insertBlock(_(e.name),n,{...t,forceNewBlock:!n}),n.varName}compileTSet(e,t){let n=e.value?_(e.value||""):"null",r=this.target.loopLevel===0,i=this.target.tSetVars.get(e.name),s=i!==void 0&&this.target.loopLevel>i;if(e.body){this.helpers.add("LazyValue");let o={type:$.Multi,content:e.body},l=this.compileInNewTarget("value",o,t),c=this.target.currentKey(t),h=`new LazyValue(${l}, ctx, this, node, ${c})`;if(h=e.value?h?`withDefault(${n}, ${h})`:n:h,this.helpers.add("withDefault"),s){let a=this.target.loopCtxVars[i];this.addLine(`${a}[\`${e.name}\`] = ${h};`)}else r?(this.target.needsScopeProtection=!0,this.addLine(`ctx[\`${e.name}\`] = ${h};`),this.target.tSetVars.set(e.name,0)):(this.addLine(`ctx[\`${e.name}\`] = ${h};`),this.target.tSetVars.set(e.name,this.target.loopLevel))}else{let o;if(e.defaultValue){let l=at(t.translate?this.translate(e.defaultValue,t.translationCtx):e.defaultValue);e.value?(this.helpers.add("withDefault"),o=`withDefault(${n}, ${l})`):o=l}else o=n;if(s){let l=this.target.loopCtxVars[i];this.addLine(`${l}["${e.name}"] = ${o};`)}else r?(this.target.needsScopeProtection=!0,this.addLine(`ctx["${e.name}"] = ${o};`),this.target.tSetVars.set(e.name,0)):(this.addLine(`ctx["${e.name}"] = ${o};`),this.target.tSetVars.set(e.name,this.target.loopLevel))}return null}generateComponentKey(e="key"){let t=[I("__")];for(let n=0;n<this.target.loopLevel;n++)t.push(`\${key${n+1}}`);return`${e} + \`${t.join("__")}\``}generateSignalCacheKey(){let e=[I("__sig_")];for(let t=0;t<this.target.loopLevel;t++)e.push(`\${key${t+1}}`);return`\`${e.join("__")}\``}formatProp(e,t,n,r){if(e.endsWith(".translate")){let i=n?.[e]||r;t=at(this.translateFn(t,i))}else t=_(t);if(e.includes(".")){let[i,s]=e.split(".");switch(e=i,s){case"bind":t=`(${t}).bind(this)`;break;case"alike":case"translate":break;default:throw new g(`Invalid prop suffix: ${s}`)}}return e=/^[a-z_]+$/i.test(e)?e:`'${e}'`,`${e}: ${t||void 0}`}formatPropObject(e,t,n){return Object.entries(e).map(([r,i])=>this.formatProp(r,i,t,n))}getPropString(e,t){let n=`{${e.join(",")}}`;return t&&(n=`Object.assign({}, ${_(t)}${e.length?", "+n:""})`),n}compileComponent(e,t){let{block:n}=t,r="slots"in(e.props||{}),i=[],s=[];for(let m in e.props||{}){let[d,b]=m.split(".");if(b==="signal"){let w=_(e.props[m]),T=/^[a-z_]+$/i.test(d)?d:`'${d}'`;this.helpers.add("toSignal");let y=this.generateSignalCacheKey();i.push(`${T}: toSignal(node, ${y}, ${w})`);continue}if(b){i.push(this.formatProp(m,e.props[m],e.propsTranslationCtx,t.translationCtx));continue}let{expr:p,freeVariables:S}=mr(e.props[m]),N=/^[a-z_]+$/i.test(d)?d:`'${d}'`;if(i.push(`${N}: ${p||void 0}`),S)for(let w of S){let T=`${d}.${w}`;s.push(`"${T}"`),i.push(`"${T}": ctx['${w}']`)}else s.push(`"${d}"`)}let o="";if(e.slots){let m=[];for(let d in e.slots){let b=e.slots[d],p=[];if(b.content){let w=this.compileInNewTarget("slot",b.content,t,b.on);p.push(`__render: ${w}.bind(this), __ctx: ctx`)}let S=e.slots[d].scope;S&&p.push(`__scope: "${S}"`),e.slots[d].attrs&&p.push(...this.formatPropObject(e.slots[d].attrs,e.slots[d].attrsTranslationCtx,t.translationCtx));let N=`{${p.join(", ")}}`;m.push(`'${d}': ${N}`)}o=`{${m.join(", ")}}`}o&&!(e.dynamicProps||r)&&(this.helpers.add("markRaw"),i.push(`slots: markRaw(${o})`));let l=this.getPropString(i,e.dynamicProps),c;(o&&(e.dynamicProps||r)||this.dev)&&(c=I("props"),this.define(c,l),l=c),o&&(e.dynamicProps||r)&&(this.helpers.add("markRaw"),this.addLine(`${c}.slots = markRaw(Object.assign(${o}, ${c}.slots))`));let h;e.isDynamic?(h=I("Comp"),this.define(h,_(e.name))):h=`\`${e.name}\``,n&&(t.forceNewBlock===!1||t.tKeyExpr)&&this.insertAnchor(n);let a=this.generateComponentKey();t.tKeyExpr&&(a=`${t.tKeyExpr} + ${a}`);let u=I("comp");this.helpers.add("createComponent"),this.staticDefs.push({id:u,expr:`createComponent(app, ${e.isDynamic?null:h}, ${!e.isDynamic}, ${!!e.slots}, ${!!e.dynamicProps}, [${s}])`}),e.isDynamic&&(a=`(${h}).name + ${a}`);let f=`${u}(${l}, ${a}, node, this, ${e.isDynamic?h:null})`;return e.isDynamic&&(f=`toggler(${h}, ${f})`),e.on&&(f=this.wrapWithEventCatcher(f,e.on)),n=this.createBlock(n,"multi",t),this.insertBlock(f,n,t),n.varName}wrapWithEventCatcher(e,t){this.helpers.add("createCatcher");let n=I("catcher"),r={},i=[];for(let s in t){let o=I("hdlr"),l=i.push(o)-1;r[s]=l;let c=this.generateHandlerCode(s,t[s]);this.define(o,c)}return this.staticDefs.push({id:n,expr:`createCatcher(${JSON.stringify(r)})`}),`${n}(${e}, [${i.join(",")}])`}compileTCallSlot(e,t){this.helpers.add("callSlot");let{block:n}=t,r,i,s=!1,o=!1;e.name.match(ut)?(s=!0,o=!0,i=Xt(e.name)):(i="'"+e.name+"'",o=o||this.slotNames.has(e.name),this.slotNames.add(e.name));let l={...e.attrs},c=l["t-props"];delete l["t-props"];let h=this.target.loopLevel?`key${this.target.loopLevel}`:"key";o&&(h=this.generateComponentKey(h));let a=e.attrs?this.formatPropObject(l,e.attrsTranslationCtx,t.translationCtx):[],u=this.getPropString(a,c);if(e.defaultContent){let f=this.compileInNewTarget("defaultContent",e.defaultContent,t);r=`callSlot(ctx, node, ${h}, ${i}, ${s}, ${u}, ${f}.bind(this))`}else if(s){let f=I("slot");this.define(f,i),r=`toggler(${f}, callSlot(ctx, node, ${h}, ${f}, ${s}, ${u}))`}else r=`callSlot(ctx, node, ${h}, ${i}, ${s}, ${u})`;return e.on&&(r=this.wrapWithEventCatcher(r,e.on)),n&&this.insertAnchor(n),n=this.createBlock(n,"multi",t),this.insertBlock(r,n,{...t,forceNewBlock:!1}),n.varName}compileTTranslation(e,t){return e.content?this.compileAST(e.content,Object.assign({},t,{translate:!1})):null}compileTTranslationContext(e,t){return e.content?this.compileAST(e.content,Object.assign({},t,{translationCtx:e.translationCtx})):null}};function br(e,t={hasGlobalValues:!1}){let n=Is(e,t.customDirectives),i=new ao(n,t).generateCode();try{return new Function("app, bdom, helpers",i)}catch(s){let{name:o}=t,l=o?`template "${o}"`:"anonymous template",c=new g(`Failed to compile ${l}: ${s.message}
23
23
 
24
24
  generated code:
25
25
  function(app, bdom, helpers) {
26
26
  ${i}
27
- }`);throw c.cause=s,c}}Pe.prototype._compileTemplate=function(t,n){return br(n,{name:t,dev:this.dev,translateFn:this.translateFn,translatableAttributes:this.translatableAttributes,customDirectives:this.customDirectives,hasGlobalValues:this.hasGlobalValues})};Pe.prototype._parseXML=function(t){return Zt(t)};return $r(co);})();
27
+ }`);throw c.cause=s,c}}Le.prototype._compileTemplate=function(t,n){return br(n,{name:t,dev:this.dev,translateFn:this.translateFn,translatableAttributes:this.translatableAttributes,customDirectives:this.customDirectives,hasGlobalValues:this.hasGlobalValues})};Le.prototype._parseXML=function(t){return Zt(t)};return $r(co);})();
@@ -171,6 +171,20 @@ export type Type<T> = T & {
171
171
  optional(value: T extends Function ? () => T : T | (() => T)): WithDefault<T>;
172
172
  type: T;
173
173
  };
174
+ /**
175
+ * A {@link Type} that also carries the object shape it was built from, exposed
176
+ * through `toShape()`: `t.object`/`t.strictObject` return their own shape, and
177
+ * `t.and` merges the shapes of the members that have one. The shape is the
178
+ * `{ key: type }` map (with `.optional()` brands intact), so it can be reused —
179
+ * most notably to drive component props: `props(schema.toShape())`.
180
+ */
181
+ export type ShapeType<Shape, T> = Type<T> & {
182
+ toShape(): Shape;
183
+ };
184
+ export type MemberShape<M> = M extends {
185
+ toShape(): infer S;
186
+ } ? S : never;
187
+ export type MergedShape<T extends any[]> = UnionToIntersection<MemberShape<T[number]>>;
174
188
  export type IsAny<T> = 0 extends 1 & T ? true : false;
175
189
  export type HasDefault<T> = IsAny<T> extends true ? false : T extends {
176
190
  [hasDefault]: any;
@@ -244,16 +258,16 @@ declare function functionType<const P extends unknown[]>(parameters: P): Type<(.
244
258
  declare function functionType<const P extends unknown[], R>(): Type<(...parameters: P) => R>;
245
259
  declare function functionType<const P extends unknown[], R>(parameters: P, result: R): Type<(...parameters: StripBrandsAll<P>) => StripBrands<R>>;
246
260
  declare function instanceType<T extends Constructor>(constructor: T): Type<InstanceType<T>>;
247
- declare function intersection<T extends any[]>(types: T): Type<UnionToIntersection<StripBrands<T[number]>>>;
261
+ declare function intersection<T extends any[]>(types: T): ShapeType<MergedShape<T>, UnionToIntersection<StripBrands<T[number]>>>;
248
262
  export type LiteralTypes = number | string | boolean | null | undefined;
249
263
  declare function literalType<const T extends LiteralTypes>(literal: T): Type<T>;
250
264
  declare function literalSelection<const T extends LiteralTypes>(literals: T[]): Type<T>;
251
- declare function objectType(): Type<Record<string, any>>;
252
- declare function objectType<const Keys extends string[]>(keys: Keys): Type<ResolveOptionalEntries<KeyedObject<Keys>>>;
253
- declare function objectType<Shape extends {}>(): Type<ResolveOptionalEntries<Shape>>;
254
- declare function objectType<Shape extends {}>(shape: Shape): Type<ResolveOptionalEntries<Shape>>;
255
- declare function strictObjectType<const Keys extends string[]>(keys: Keys): Type<ResolveOptionalEntries<KeyedObject<Keys>>>;
256
- declare function strictObjectType<Shape extends {}>(shape: Shape): Type<ResolveOptionalEntries<Shape>>;
265
+ declare function objectType(): ShapeType<Record<string, any>, Record<string, any>>;
266
+ declare function objectType<const Keys extends string[]>(keys: Keys): ShapeType<Keys, ResolveOptionalEntries<KeyedObject<Keys>>>;
267
+ declare function objectType<Shape extends {}>(): ShapeType<Shape, ResolveOptionalEntries<Shape>>;
268
+ declare function objectType<Shape extends {}>(shape: Shape): ShapeType<Shape, ResolveOptionalEntries<Shape>>;
269
+ declare function strictObjectType<const Keys extends string[]>(keys: Keys): ShapeType<Keys, ResolveOptionalEntries<KeyedObject<Keys>>>;
270
+ declare function strictObjectType<Shape extends {}>(shape: Shape): ShapeType<Shape, ResolveOptionalEntries<Shape>>;
257
271
  declare function promiseType(): Type<Promise<void>>;
258
272
  declare function promiseType<T>(type: T): Type<Promise<StripBrands<T>>>;
259
273
  declare function recordType(): Type<Record<PropertyKey, any>>;
@@ -819,8 +833,8 @@ export interface AppConfig extends TemplateSetConfig {
819
833
  test?: boolean;
820
834
  }
821
835
  export interface Root<T extends ComponentConstructor> {
822
- node: ComponentNode;
823
836
  promise: Promise<ComponentInstance<T>>;
837
+ readonly prepared: boolean;
824
838
  prepare(): Promise<void>;
825
839
  mount(target: MountTarget, options?: MountOptions): Promise<ComponentInstance<T>>;
826
840
  destroy(): void;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@odoo/owl",
3
- "version": "3.0.0-alpha.41",
3
+ "version": "3.0.0-alpha.42",
4
4
  "description": "Odoo Web Library (OWL)",
5
5
  "main": "dist/owl.cjs",
6
6
  "module": "dist/owl.es.js",
@@ -43,9 +43,9 @@
43
43
  },
44
44
  "homepage": "https://github.com/odoo/owl#readme",
45
45
  "devDependencies": {
46
- "@odoo/owl-compiler": "3.0.0-alpha.41",
47
- "@odoo/owl-core": "3.0.0-alpha.41",
48
- "@odoo/owl-runtime": "3.0.0-alpha.41",
46
+ "@odoo/owl-compiler": "3.0.0-alpha.42",
47
+ "@odoo/owl-core": "3.0.0-alpha.42",
48
+ "@odoo/owl-runtime": "3.0.0-alpha.42",
49
49
  "jsdom": "^25.0.1"
50
50
  }
51
51
  }