@odoo/owl 2.0.0-beta.2 → 2.0.0

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.
Files changed (45) hide show
  1. package/README.md +3 -1
  2. package/dist/owl.cjs.js +3436 -3016
  3. package/dist/owl.es.js +3435 -3017
  4. package/dist/owl.iife.js +3436 -3016
  5. package/dist/owl.iife.min.js +1 -1
  6. package/dist/types/compiler/code_generator.d.ts +38 -35
  7. package/dist/types/compiler/index.d.ts +3 -2
  8. package/dist/types/compiler/inline_expressions.d.ts +1 -22
  9. package/dist/types/compiler/parser.d.ts +26 -23
  10. package/dist/types/index.d.ts +1 -27
  11. package/dist/types/owl.d.ts +532 -0
  12. package/dist/types/{app → runtime}/app.d.ts +10 -5
  13. package/dist/types/{blockdom → runtime/blockdom}/attributes.d.ts +0 -0
  14. package/dist/types/{blockdom → runtime/blockdom}/block_compiler.d.ts +0 -0
  15. package/dist/types/{blockdom → runtime/blockdom}/config.d.ts +0 -0
  16. package/dist/types/runtime/blockdom/event_catcher.d.ts +7 -0
  17. package/dist/types/{blockdom → runtime/blockdom}/events.d.ts +1 -0
  18. package/dist/types/{blockdom → runtime/blockdom}/html.d.ts +0 -0
  19. package/dist/types/{blockdom → runtime/blockdom}/index.d.ts +1 -0
  20. package/dist/types/{blockdom → runtime/blockdom}/list.d.ts +0 -0
  21. package/dist/types/{blockdom → runtime/blockdom}/multi.d.ts +0 -0
  22. package/dist/types/{blockdom → runtime/blockdom}/text.d.ts +0 -0
  23. package/dist/types/{blockdom → runtime/blockdom}/toggler.d.ts +0 -0
  24. package/dist/types/{component → runtime}/component.d.ts +6 -2
  25. package/dist/types/{component → runtime}/component_node.d.ts +13 -13
  26. package/dist/types/{component → runtime}/error_handling.d.ts +3 -0
  27. package/dist/types/{component/handler.d.ts → runtime/event_handling.d.ts} +0 -0
  28. package/dist/types/{component → runtime}/fibers.d.ts +5 -1
  29. package/dist/types/{hooks.d.ts → runtime/hooks.d.ts} +1 -1
  30. package/dist/types/runtime/index.d.ts +31 -0
  31. package/dist/types/{component → runtime}/lifecycle_hooks.d.ts +0 -0
  32. package/dist/types/runtime/portal.d.ts +15 -0
  33. package/dist/types/{reactivity.d.ts → runtime/reactivity.d.ts} +0 -0
  34. package/dist/types/{component → runtime}/scheduler.d.ts +3 -4
  35. package/dist/types/{component → runtime}/status.d.ts +0 -0
  36. package/dist/types/{app → runtime}/template_helpers.d.ts +18 -4
  37. package/dist/types/runtime/template_set.d.ts +32 -0
  38. package/dist/types/{utils.d.ts → runtime/utils.d.ts} +0 -7
  39. package/dist/types/runtime/validation.d.ts +32 -0
  40. package/package.json +7 -4
  41. package/dist/owl.cjs.min.js +0 -1
  42. package/dist/owl.es.min.js +0 -1
  43. package/dist/types/app/template_set.d.ts +0 -27
  44. package/dist/types/component/props_validation.d.ts +0 -14
  45. package/dist/types/portal.d.ts +0 -11
@@ -0,0 +1,7 @@
1
+ import type { VNode } from "./index";
2
+ declare type EventsSpec = {
3
+ [name: string]: number;
4
+ };
5
+ declare type Catcher = (child: VNode, handlers: any[]) => VNode;
6
+ export declare function createCatcher(eventsSpec: EventsSpec): Catcher;
7
+ export {};
@@ -2,6 +2,7 @@ declare type EventHandlerSetter = (this: HTMLElement, data: any) => void;
2
2
  interface EventHandlerCreator {
3
3
  setup: EventHandlerSetter;
4
4
  update: EventHandlerSetter;
5
+ remove: (this: HTMLElement) => void;
5
6
  }
6
7
  export declare function createEventHandler(rawEvent: string): EventHandlerCreator;
7
8
  export {};
@@ -5,6 +5,7 @@ export { list } from "./list";
5
5
  export { multi } from "./multi";
6
6
  export { text, comment } from "./text";
7
7
  export { html } from "./html";
8
+ export { createCatcher } from "./event_catcher";
8
9
  export interface VNode<T = any> {
9
10
  mount(parent: HTMLElement, afterNode: Node | null): void;
10
11
  moveBefore(other: T | null, afterNode: Node | null): void;
@@ -1,11 +1,15 @@
1
+ import { Schema } from "./validation";
1
2
  import type { ComponentNode } from "./component_node";
2
- declare type Props = {
3
+ export declare type Props = {
3
4
  [key: string]: any;
4
5
  };
5
6
  interface StaticComponentProperties {
6
7
  template: string;
7
8
  defaultProps?: any;
8
- props?: any;
9
+ props?: Schema;
10
+ components?: {
11
+ [componentName: string]: ComponentConstructor;
12
+ };
9
13
  }
10
14
  export declare type ComponentConstructor<P extends Props = any, E = any> = (new (props: P, env: E, node: ComponentNode) => Component<P, E>) & StaticComponentProperties;
11
15
  export declare class Component<Props = any, Env = any> {
@@ -1,8 +1,8 @@
1
- import type { App, Env } from "../app/app";
2
- import { BDom, VNode } from "../blockdom";
3
- import { Reactive, NonReactive } from "../reactivity";
4
- import { Component, ComponentConstructor } from "./component";
5
- import { Fiber, MountFiber, MountOptions, RootFiber } from "./fibers";
1
+ import type { App, Env } from "./app";
2
+ import { BDom, VNode } from "./blockdom";
3
+ import { Component, ComponentConstructor, Props } from "./component";
4
+ import { Fiber, MountFiber, MountOptions } from "./fibers";
5
+ import { getSubscriptions, NonReactive, Reactive } from "./reactivity";
6
6
  import { STATUS } from "./status";
7
7
  export declare function getCurrent(): ComponentNode;
8
8
  export declare function useComponent(): Component;
@@ -17,9 +17,8 @@ export declare function useComponent(): Component;
17
17
  * @see reactive
18
18
  */
19
19
  export declare function useState<T extends object>(state: T): Reactive<T> | NonReactive<T>;
20
- export declare function component<P extends object>(name: string | ComponentConstructor<P>, props: P, key: string, ctx: ComponentNode, parent: any): ComponentNode<P>;
21
20
  declare type LifecycleHook = Function;
22
- export declare class ComponentNode<P extends object = any, E = any> implements VNode<ComponentNode<P, E>> {
21
+ export declare class ComponentNode<P extends Props = any, E = any> implements VNode<ComponentNode<P, E>> {
23
22
  el?: HTMLElement | Text | undefined;
24
23
  app: App;
25
24
  fiber: Fiber | null;
@@ -27,9 +26,10 @@ export declare class ComponentNode<P extends object = any, E = any> implements V
27
26
  bdom: BDom | null;
28
27
  status: STATUS;
29
28
  forceNextRender: boolean;
29
+ parentKey: string | null;
30
+ props: P;
30
31
  renderFn: Function;
31
32
  parent: ComponentNode | null;
32
- level: number;
33
33
  childEnv: Env;
34
34
  children: {
35
35
  [key: string]: ComponentNode;
@@ -42,14 +42,13 @@ export declare class ComponentNode<P extends object = any, E = any> implements V
42
42
  willPatch: LifecycleHook[];
43
43
  patched: LifecycleHook[];
44
44
  willDestroy: LifecycleHook[];
45
- constructor(C: ComponentConstructor<P, E>, props: P, app: App, parent?: ComponentNode);
45
+ constructor(C: ComponentConstructor<P, E>, props: P, app: App, parent: ComponentNode | null, parentKey: string | null);
46
46
  mountComponent(target: any, options?: MountOptions): void;
47
47
  initiateRender(fiber: Fiber | MountFiber): Promise<void>;
48
- render(deep?: boolean): Promise<void>;
49
- _render(fiber: Fiber | RootFiber): void;
48
+ render(deep: boolean): Promise<void>;
50
49
  destroy(): void;
51
50
  _destroy(): void;
52
- updateAndRender(props: any, parentFiber: Fiber): Promise<void>;
51
+ updateAndRender(props: P, parentFiber: Fiber): Promise<void>;
53
52
  /**
54
53
  * Finds a child that has dom that is not yet updated, and update it. This
55
54
  * method is meant to be used only in the context of repatching the dom after
@@ -63,6 +62,7 @@ export declare class ComponentNode<P extends object = any, E = any> implements V
63
62
  _patch(): void;
64
63
  beforeRemove(): void;
65
64
  remove(): void;
66
- cleanOutdatedChildren(): void;
65
+ get name(): string;
66
+ get subscriptions(): ReturnType<typeof getSubscriptions>;
67
67
  }
68
68
  export {};
@@ -1,5 +1,8 @@
1
1
  import type { ComponentNode } from "./component_node";
2
2
  import type { Fiber } from "./fibers";
3
+ export declare class OwlError extends Error {
4
+ cause?: any;
5
+ }
3
6
  export declare const fibersInError: WeakMap<Fiber, any>;
4
7
  export declare const nodeErrorHandlers: WeakMap<ComponentNode, ((error: any) => void)[]>;
5
8
  declare type ErrorParams = {
@@ -1,4 +1,4 @@
1
- import { BDom } from "../blockdom";
1
+ import { BDom } from "./blockdom";
2
2
  import type { ComponentNode } from "./component_node";
3
3
  export declare function makeChildFiber(node: ComponentNode, parent: Fiber): Fiber;
4
4
  export declare function makeRootFiber(node: ComponentNode): Fiber;
@@ -10,7 +10,10 @@ export declare class Fiber {
10
10
  children: Fiber[];
11
11
  appliedToDom: boolean;
12
12
  deep: boolean;
13
+ childrenMap: ComponentNode["children"];
13
14
  constructor(node: ComponentNode, parent: Fiber | null);
15
+ render(): void;
16
+ _render(): void;
14
17
  }
15
18
  export declare class RootFiber extends Fiber {
16
19
  counter: number;
@@ -19,6 +22,7 @@ export declare class RootFiber extends Fiber {
19
22
  mounted: Fiber[];
20
23
  locked: boolean;
21
24
  complete(): void;
25
+ setCounter(newValue: number): void;
22
26
  }
23
27
  declare type Position = "first-child" | "last-child";
24
28
  export interface MountOptions {
@@ -1,4 +1,4 @@
1
- import type { Env } from "./app/app";
1
+ import type { Env } from "./app";
2
2
  /**
3
3
  * The purpose of this hook is to allow components to get a reference to a sub
4
4
  * html node or component.
@@ -0,0 +1,31 @@
1
+ import { createBlock, html, list, mount as blockMount, multi, patch, remove, text, toggler, comment } from "./blockdom";
2
+ export type { Reactive } from "./reactivity";
3
+ export declare const blockDom: {
4
+ config: {
5
+ shouldNormalizeDom: boolean;
6
+ mainEventHandler: (data: any, ev: Event, currentTarget?: EventTarget | null | undefined) => boolean;
7
+ };
8
+ mount: typeof blockMount;
9
+ patch: typeof patch;
10
+ remove: typeof remove;
11
+ list: typeof list;
12
+ multi: typeof multi;
13
+ text: typeof text;
14
+ toggler: typeof toggler;
15
+ createBlock: typeof createBlock;
16
+ html: typeof html;
17
+ comment: typeof comment;
18
+ };
19
+ export { App, mount } from "./app";
20
+ export { xml } from "./template_set";
21
+ export { Component } from "./component";
22
+ export type { ComponentConstructor } from "./component";
23
+ export { useComponent, useState } from "./component_node";
24
+ export { status } from "./status";
25
+ export { reactive, markRaw, toRaw } from "./reactivity";
26
+ export { useEffect, useEnv, useExternalListener, useRef, useChildSubEnv, useSubEnv } from "./hooks";
27
+ export { EventBus, whenReady, loadFile, markup } from "./utils";
28
+ export { onWillStart, onMounted, onWillUnmount, onWillUpdateProps, onWillPatch, onPatched, onWillRender, onRendered, onWillDestroy, onError, } from "./lifecycle_hooks";
29
+ export { validate } from "./validation";
30
+ export { OwlError } from "./error_handling";
31
+ export declare const __info__: {};
@@ -0,0 +1,15 @@
1
+ import { Component } from "./component";
2
+ /**
3
+ * kind of similar to <t t-slot="default"/>, but it wraps it around a VPortal
4
+ */
5
+ export declare function portalTemplate(app: any, bdom: any, helpers: any): (ctx: any, node: any, key?: string) => any;
6
+ export declare class Portal extends Component {
7
+ static template: string;
8
+ static props: {
9
+ target: {
10
+ type: StringConstructor;
11
+ };
12
+ slots: boolean;
13
+ };
14
+ setup(): void;
15
+ }
@@ -2,16 +2,15 @@ import { Fiber, RootFiber } from "./fibers";
2
2
  export declare class Scheduler {
3
3
  static requestAnimationFrame: ((callback: FrameRequestCallback) => number) & typeof requestAnimationFrame;
4
4
  tasks: Set<RootFiber>;
5
- isRunning: boolean;
6
5
  requestAnimationFrame: Window["requestAnimationFrame"];
6
+ frame: number;
7
+ delayedRenders: Fiber[];
7
8
  constructor();
8
- start(): void;
9
- stop(): void;
10
9
  addFiber(fiber: Fiber): void;
11
10
  /**
12
11
  * Process all current tasks. This only applies to the fibers that are ready.
13
12
  * Other tasks are left unchanged.
14
13
  */
15
14
  flush(): void;
16
- scheduleTasks(): void;
15
+ processFiber(fiber: RootFiber): void;
17
16
  }
File without changes
@@ -1,5 +1,7 @@
1
- import { BDom, toggler } from "../blockdom";
2
- import { validateProps } from "../component/props_validation";
1
+ import { BDom, toggler, createCatcher } from "./blockdom";
2
+ import type { ComponentConstructor } from "./component";
3
+ import { markRaw } from "./reactivity";
4
+ import { OwlError } from "./error_handling";
3
5
  /**
4
6
  * This file contains utility functions that will be injected in each template,
5
7
  * to perform various useful tasks in the compiled code.
@@ -17,18 +19,27 @@ declare function shallowEqual(l1: any[], l2: any[]): boolean;
17
19
  declare class LazyValue {
18
20
  fn: any;
19
21
  ctx: any;
22
+ component: any;
20
23
  node: any;
21
- constructor(fn: any, ctx: any, node: any);
24
+ key: any;
25
+ constructor(fn: any, ctx: any, component: any, node: any, key: any);
22
26
  evaluate(): any;
23
27
  toString(): any;
24
28
  }
25
- export declare function safeOutput(value: any): ReturnType<typeof toggler>;
29
+ export declare function safeOutput(value: any, defaultValue?: any): ReturnType<typeof toggler>;
26
30
  declare function bind(ctx: any, fn: Function): Function;
27
31
  declare type RefMap = {
28
32
  [key: string]: HTMLElement | null;
29
33
  };
30
34
  declare type RefSetter = (el: HTMLElement | null) => void;
31
35
  declare function multiRefSetter(refs: RefMap, name: string): RefSetter;
36
+ /**
37
+ * Validate the component props (or next props) against the (static) props
38
+ * description. This is potentially an expensive operation: it may needs to
39
+ * visit recursively the props and all the children to check if they are valid.
40
+ * This is why it is only done in 'dev' mode.
41
+ */
42
+ export declare function validateProps<P>(name: string | ComponentConstructor<P>, props: P, comp?: any): void;
32
43
  export declare const helpers: {
33
44
  withDefault: typeof withDefault;
34
45
  zero: symbol;
@@ -45,5 +56,8 @@ export declare const helpers: {
45
56
  LazyValue: typeof LazyValue;
46
57
  safeOutput: typeof safeOutput;
47
58
  bind: typeof bind;
59
+ createCatcher: typeof createCatcher;
60
+ markRaw: typeof markRaw;
61
+ OwlError: typeof OwlError;
48
62
  };
49
63
  export {};
@@ -0,0 +1,32 @@
1
+ import { compile, Template, TemplateFunction } from "../compiler";
2
+ import { Portal } from "./portal";
3
+ export interface TemplateSetConfig {
4
+ dev?: boolean;
5
+ translatableAttributes?: string[];
6
+ translateFn?: (s: string) => string;
7
+ templates?: string | Document;
8
+ }
9
+ export declare class TemplateSet {
10
+ static registerTemplate(name: string, fn: TemplateFunction): void;
11
+ dev: boolean;
12
+ rawTemplates: typeof globalTemplates;
13
+ templates: {
14
+ [name: string]: Template;
15
+ };
16
+ translateFn?: (s: string) => string;
17
+ translatableAttributes?: string[];
18
+ Portal: typeof Portal;
19
+ constructor(config?: TemplateSetConfig);
20
+ addTemplate(name: string, template: string | Element): void;
21
+ addTemplates(xml: string | Document): void;
22
+ getTemplate(name: string): Template;
23
+ _compileTemplate(name: string, template: string | Element): ReturnType<typeof compile>;
24
+ callTemplate(owner: any, subTemplate: string, ctx: any, parent: any, key: any): any;
25
+ }
26
+ export declare const globalTemplates: {
27
+ [key: string]: string | Element | TemplateFunction;
28
+ };
29
+ export declare function xml(...args: Parameters<typeof String.raw>): string;
30
+ export declare namespace xml {
31
+ var nextId: number;
32
+ }
@@ -16,10 +16,3 @@ export declare function loadFile(url: string): Promise<string>;
16
16
  export declare class Markup extends String {
17
17
  }
18
18
  export declare function markup(value: any): Markup;
19
- export declare const globalTemplates: {
20
- [key: string]: string | Element;
21
- };
22
- export declare function xml(...args: Parameters<typeof String.raw>): string;
23
- export declare namespace xml {
24
- var nextId: number;
25
- }
@@ -0,0 +1,32 @@
1
+ declare type BaseType = typeof String | typeof Boolean | typeof Number | typeof Date | typeof Object | typeof Array | true | "*";
2
+ interface TypeInfo {
3
+ type?: TypeDescription;
4
+ optional?: boolean;
5
+ validate?: Function;
6
+ shape?: Schema;
7
+ element?: TypeDescription;
8
+ }
9
+ declare type ValueType = {
10
+ value: any;
11
+ };
12
+ declare type TypeDescription = BaseType | TypeInfo | ValueType | TypeDescription[];
13
+ declare type SimplifiedSchema = string[];
14
+ declare type NormalizedSchema = {
15
+ [key: string]: TypeDescription;
16
+ };
17
+ export declare type Schema = SimplifiedSchema | NormalizedSchema;
18
+ export declare function isOptional(t: TypeDescription): Boolean;
19
+ /**
20
+ * Main validate function
21
+ */
22
+ export declare function validate(obj: {
23
+ [key: string]: any;
24
+ }, spec: Schema): void;
25
+ /**
26
+ * Helper validate function, to get the list of errors. useful if one want to
27
+ * manipulate the errors without parsing an error object
28
+ */
29
+ export declare function validateSchema(obj: {
30
+ [key: string]: any;
31
+ }, schema: Schema): string[];
32
+ export {};
package/package.json CHANGED
@@ -1,11 +1,10 @@
1
1
  {
2
2
  "name": "@odoo/owl",
3
- "version": "2.0.0-beta.2",
3
+ "version": "2.0.0",
4
4
  "description": "Odoo Web Library (OWL)",
5
5
  "main": "dist/owl.cjs.js",
6
- "browser": "dist/owl.iife.js",
7
6
  "module": "dist/owl.es.js",
8
- "types": "dist/types/index.d.ts",
7
+ "types": "dist/types/owl.d.ts",
9
8
  "files": [
10
9
  "dist"
11
10
  ],
@@ -14,6 +13,8 @@
14
13
  },
15
14
  "scripts": {
16
15
  "build:bundle": "rollup -c --failAfterWarnings",
16
+ "build:runtime": "rollup -c --failAfterWarnings runtime",
17
+ "build:compiler": "rollup -c --failAfterWarnings compiler",
17
18
  "build": "npm run build:bundle",
18
19
  "test": "jest",
19
20
  "test:debug": "node --inspect-brk node_modules/.bin/jest --runInBand --watch --testTimeout=5000000",
@@ -25,7 +26,8 @@
25
26
  "prettier": "prettier {src/*.ts,src/**/*.ts,tests/*.ts,tests/**/*.ts,doc/*.md,doc/**/*.md} --write",
26
27
  "check-formatting": "prettier {src/*.ts,src/**/*.ts,tests/*.ts,tests/**/*.ts,doc/*.md,doc/**/*.md} --check",
27
28
  "publish": "npm run build && npm publish",
28
- "release": "node tools/release.js"
29
+ "release": "node tools/release.js",
30
+ "compile_templates": "node tools/compile_xml.js"
29
31
  },
30
32
  "repository": {
31
33
  "type": "git",
@@ -52,6 +54,7 @@
52
54
  "npm-run-all": "^4.1.5",
53
55
  "prettier": "2.4.1",
54
56
  "rollup": "^2.56.3",
57
+ "rollup-plugin-dts": "^4.2.2",
55
58
  "rollup-plugin-terser": "^7.0.2",
56
59
  "rollup-plugin-typescript2": "^0.31.1",
57
60
  "sass": "^1.16.1",
@@ -1 +0,0 @@
1
- "use strict";function t(t){t=t.slice();const e=[];let n;for(;(n=t[0])&&"string"==typeof n;)e.push(t.shift());return{modifiers:e,data:t}}Object.defineProperty(exports,"__esModule",{value:!0});const e={shouldNormalizeDom:!0,mainEventHandler:(e,n,o)=>("function"==typeof e?e(n):Array.isArray(e)&&(e=t(e).data)[0](e[1],n),!1)};class n{constructor(t,e){this.key=t,this.child=e}mount(t,e){this.parentEl=t,this.child.mount(t,e)}moveBefore(t,e){this.child.moveBefore(t?t.child:null,e)}patch(t,e){if(this===t)return;let n=this.child,o=t.child;this.key===t.key?n.patch(o,e):(o.mount(this.parentEl,n.firstNode()),e&&n.beforeRemove(),n.remove(),this.child=o,this.key=t.key)}beforeRemove(){this.child.beforeRemove()}remove(){this.child.remove()}firstNode(){return this.child.firstNode()}toString(){return this.child.toString()}}function o(t,e){return new n(t,e)}const{setAttribute:r,removeAttribute:s}=Element.prototype,i=DOMTokenList.prototype,l=i.add,a=i.remove,c=Array.isArray,{split:h,trim:u}=String.prototype,d=/\s+/;function f(t,e){switch(e){case!1:case void 0:s.call(this,t);break;case!0:r.call(this,t,"");break;default:r.call(this,t,e)}}function p(t){return function(e){f.call(this,t,e)}}function m(t){if(c(t))f.call(this,t[0],t[1]);else for(let e in t)f.call(this,e,t[e])}function g(t,e){if(c(t)){const n=t[0],o=t[1];if(n===e[0]){if(o===e[1])return;f.call(this,n,o)}else s.call(this,e[0]),f.call(this,n,o)}else{for(let n in e)n in t||s.call(this,n);for(let n in t){const o=t[n];o!==e[n]&&f.call(this,n,o)}}}function b(t){const e={};switch(typeof t){case"string":const n=u.call(t);if(!n)return{};let o=h.call(n,d);for(let t=0,n=o.length;t<n;t++)e[o[t]]=!0;return e;case"object":for(let n in t){const o=t[n];if(o){const t=h.call(n,d);for(let n of t)e[n]=o}}return e;case"undefined":return{};case"number":return{[t]:!0};default:return{[t]:!0}}}function v(t){t=""===t?{}:b(t);const e=this.classList;for(let n in t)l.call(e,n)}function y(t,e){e=""===e?{}:b(e),t=""===t?{}:b(t);const n=this.classList;for(let o in e)o in t||a.call(n,o);for(let o in t)o in e||l.call(n,o)}function x(t){return function(e){this[t]=e||""}}function w(t,e){switch(t){case"input":return"checked"===e||"indeterminate"===e||"value"===e||"readonly"===e||"disabled"===e;case"option":return"selected"===e||"disabled"===e;case"textarea":return"value"===e||"readonly"===e||"disabled"===e;case"select":return"value"===e||"disabled"===e;case"button":case"optgroup":return"disabled"===e}return!1}function k(t){const n=t.split(".")[0],o=t.includes(".capture");return t.includes(".synthetic")?function(t,n=!1){let o="__event__synthetic_"+t;n&&(o+="_capture");!function(t,n,o=!1){if(E[n])return;document.addEventListener(t,(t=>function(t,n){let o=n.target;for(;null!==o;){const r=o[t];if(r)for(const t of Object.values(r)){if(e.mainEventHandler(t,n,o))return}o=o.parentNode}}(n,t)),{capture:o}),E[n]=!0}(t,o,n);const r=N++;function s(t){const e=this[o]||{};e[r]=t,this[o]=e}return{setup:s,update:s}}(n,o):function(t,n=!1){let o=`__event__${t}_${$++}`;n&&(o+="_capture");function r(t){const n=t.currentTarget;if(!n||!document.contains(n))return;const r=n[o];r&&e.mainEventHandler(r,t,n)}function s(e){this[o]=e,this.addEventListener(t,r,{capture:n})}function i(t){this[o]=t}return{setup:s,update:i}}(n,o)}let $=1;let N=1;const E={};const A=Node.prototype,T=A.insertBefore,_=(L=A,S="textContent",Object.getOwnPropertyDescriptor(L,S)).set;var L,S;const C=A.removeChild;class D{constructor(t){this.children=t}mount(t,e){const n=this.children,o=n.length,r=new Array(o);for(let s=0;s<o;s++){let o=n[s];if(o)o.mount(t,e);else{const n=document.createTextNode("");r[s]=n,T.call(t,n,e)}}this.anchors=r,this.parentEl=t}moveBefore(t,e){if(t){const n=t.children[0];e=(n?n.firstNode():t.anchors[0])||null}const n=this.children,o=this.parentEl,r=this.anchors;for(let t=0,s=n.length;t<s;t++){let s=n[t];if(s)s.moveBefore(null,e);else{const n=r[t];T.call(o,n,e)}}}patch(t,e){if(this===t)return;const n=this.children,o=t.children,r=this.anchors,s=this.parentEl;for(let t=0,i=n.length;t<i;t++){const i=n[t],l=o[t];if(i)if(l)i.patch(l,e);else{const o=i.firstNode(),l=document.createTextNode("");r[t]=l,T.call(s,l,o),e&&i.beforeRemove(),i.remove(),n[t]=void 0}else if(l){n[t]=l;const e=r[t];l.mount(s,e),C.call(s,e)}}}beforeRemove(){const t=this.children;for(let e=0,n=t.length;e<n;e++){const n=t[e];n&&n.beforeRemove()}}remove(){const t=this.parentEl;if(this.isOnlyChild)_.call(t,"");else{const e=this.children,n=this.anchors;for(let o=0,r=e.length;o<r;o++){const r=e[o];r?r.remove():C.call(t,n[o])}}}firstNode(){const t=this.children[0];return t?t.firstNode():this.anchors[0]}toString(){return this.children.map((t=>t?t.toString():"")).join("")}}function O(t){return new D(t)}const B=Node.prototype,R=CharacterData.prototype,I=B.insertBefore,P=((t,e)=>Object.getOwnPropertyDescriptor(t,e))(R,"data").set,j=B.removeChild;class M{constructor(t){this.text=t}mountNode(t,e,n){this.parentEl=e,I.call(e,t,n),this.el=t}moveBefore(t,e){const n=t?t.el:e;I.call(this.parentEl,this.el,n)}beforeRemove(){}remove(){j.call(this.parentEl,this.el)}firstNode(){return this.el}toString(){return this.text}}class W extends M{mount(t,e){this.mountNode(document.createTextNode(K(this.text)),t,e)}patch(t){const e=t.text;this.text!==e&&(P.call(this.el,K(e)),this.text=e)}}class F extends M{mount(t,e){this.mountNode(document.createComment(K(this.text)),t,e)}patch(){}}function V(t){return new W(t)}function z(t){return new F(t)}function K(t){switch(typeof t){case"string":return t;case"number":return String(t);case"boolean":return t?"true":"false";default:return t||""}}const H=(t,e)=>Object.getOwnPropertyDescriptor(t,e),U=Node.prototype,q=Element.prototype,G=H(CharacterData.prototype,"data").set,X=H(U,"firstChild").get,Y=H(U,"nextSibling").get,Z=()=>{},Q={};function J(t){if(t in Q)return Q[t];const n=(new DOMParser).parseFromString(`<t>${t}</t>`,"text/xml").firstChild.firstChild;e.shouldNormalizeDom&&tt(n);const o=et(n),r=rt(o),s=function(t,e){let n=function(t,e){const{refN:n,collectors:o,children:r}=e,s=o.length;e.locations.sort(((t,e)=>t.idx-e.idx));const i=e.locations.map((t=>({refIdx:t.refIdx,setData:t.setData,updateData:t.updateData}))),l=i.length,a=r.length,c=r,h=n>0,u=U.cloneNode,d=U.insertBefore,f=q.remove;class p{constructor(t){this.data=t}beforeRemove(){}remove(){f.call(this.el)}firstNode(){return this.el}moveBefore(t,e){const n=t?t.el:e;d.call(this.parentEl,this.el,n)}toString(){const t=document.createElement("div");return this.mount(t,null),t.innerHTML}mount(e,n){const o=u.call(t,!0);d.call(e,o,n),this.el=o,this.parentEl=e}patch(t,e){}}h&&(p.prototype.mount=function(e,r){const h=u.call(t,!0),f=new Array(n);this.refs=f,f[0]=h;for(let t=0;t<s;t++){const e=o[t];f[e.idx]=e.getVal.call(f[e.prevIdx])}if(l){const t=this.data;for(let e=0;e<l;e++){const n=i[e];n.setData.call(f[n.refIdx],t[e])}}if(d.call(e,h,r),a){const t=this.children;for(let e=0;e<a;e++){const n=t[e];if(n){const t=c[e],o=t.afterRefIdx?f[t.afterRefIdx]:null;n.isOnlyChild=t.isOnlyChild,n.mount(f[t.parentRefIdx],o)}}}this.el=h,this.parentEl=e},p.prototype.patch=function(t,e){if(this===t)return;const n=this.refs;if(l){const e=this.data,o=t.data;for(let t=0;t<l;t++){const r=e[t],s=o[t];if(r!==s){const e=i[t];e.updateData.call(n[e.refIdx],s,r)}}this.data=o}if(a){let o=this.children;const r=t.children;for(let t=0;t<a;t++){const s=o[t],i=r[t];if(s)i?s.patch(i,e):(e&&s.beforeRemove(),s.remove(),o[t]=void 0);else if(i){const e=c[t],r=e.afterRefIdx?n[e.afterRefIdx]:null;i.mount(n[e.parentRefIdx],r),o[t]=i}}}});return p}(t,e);if(e.cbRefs.length){const t=e.cbRefs,o=e.refList;let r=t.length;n=class extends n{mount(t,e){o.push(new Array(r)),super.mount(t,e);for(let t of o.pop())t()}remove(){super.remove();for(let e of t){(0,this.data[e])(null)}}}}if(e.children.length)return n=class extends n{constructor(t,e){super(t),this.children=e}},n.prototype.beforeRemove=D.prototype.beforeRemove,(t,e=[])=>new n(t,e);return t=>new n(t)}(o.el,r);return Q[t]=s,s}function tt(t){if(t.nodeType!==Node.TEXT_NODE||/\S/.test(t.textContent)){if(t.nodeType!==Node.ELEMENT_NODE||"pre"!==t.tagName)for(let e=t.childNodes.length-1;e>=0;--e)tt(t.childNodes.item(e))}else t.remove()}function et(t,e=null,n=null){switch(t.nodeType){case Node.ELEMENT_NODE:{let o=n&&n.currentNS;const r=t.tagName;let s=void 0;const i=[];if(r.startsWith("block-text-")){const t=parseInt(r.slice(11),10);i.push({type:"text",idx:t}),s=document.createTextNode("")}if(r.startsWith("block-child-")){n.isRef||nt(n);const t=parseInt(r.slice(12),10);i.push({type:"child",idx:t}),s=document.createTextNode("")}const l=t.attributes,a=l.getNamedItem("block-ns");if(a&&(l.removeNamedItem("block-ns"),o=a.value),s||(s=o?document.createElementNS(o,r):document.createElement(r)),s instanceof Element)for(let t=0;t<l.length;t++){const e=l[t].name,n=l[t].value;if(e.startsWith("block-handler-")){const t=parseInt(e.slice(14),10);i.push({type:"handler",idx:t,event:n})}else if(e.startsWith("block-attribute-")){const t=parseInt(e.slice(16),10);i.push({type:"attribute",idx:t,name:n,tag:r})}else"block-attributes"===e?i.push({type:"attributes",idx:parseInt(n,10)}):"block-ref"===e?i.push({type:"ref",idx:parseInt(n,10)}):s.setAttribute(l[t].name,n)}const c={parent:e,firstChild:null,nextSibling:null,el:s,info:i,refN:0,currentNS:o};if(t.firstChild){const e=t.childNodes[0];if(1===t.childNodes.length&&e.nodeType===Node.ELEMENT_NODE&&e.tagName.startsWith("block-child-")){const t=e.tagName,n=parseInt(t.slice(12),10);i.push({idx:n,type:"child",isOnlyChild:!0})}else{c.firstChild=et(t.firstChild,c,c),s.appendChild(c.firstChild.el);let e=t.firstChild,n=c.firstChild;for(;e=e.nextSibling;)n.nextSibling=et(e,n,c),s.appendChild(n.nextSibling.el),n=n.nextSibling}}return c.info.length&&nt(c),c}case Node.TEXT_NODE:case Node.COMMENT_NODE:return{parent:e,firstChild:null,nextSibling:null,el:t.nodeType===Node.TEXT_NODE?document.createTextNode(t.textContent):document.createComment(t.textContent),info:[],refN:0,currentNS:null}}throw new Error("boom")}function nt(t){t.isRef=!0;do{t.refN++}while(t=t.parent)}function ot(t){let e=t.parent;for(;e&&e.nextSibling===t;)t=e,e=e.parent;return e}function rt(t,e,n){if(!e){e={collectors:[],locations:[],children:new Array(t.info.filter((t=>"child"===t.type)).length),cbRefs:[],refN:t.refN,refList:[]},n=0}if(t.refN){const o=n,r=t.isRef,s=t.firstChild?t.firstChild.refN:0,i=t.nextSibling?t.nextSibling.refN:0;if(r){for(let e of t.info)e.refIdx=o;t.refIdx=o,function(t,e){for(let n of e.info)switch(n.type){case"text":t.locations.push({idx:n.idx,refIdx:n.refIdx,setData:st,updateData:st});break;case"child":n.isOnlyChild?t.children[n.idx]={parentRefIdx:n.refIdx,isOnlyChild:!0}:t.children[n.idx]={parentRefIdx:ot(e).refIdx,afterRefIdx:n.refIdx};break;case"attribute":{const e=n.refIdx;let o,r;if(w(n.tag,n.name)){const t=x(n.name);r=t,o=t}else"class"===n.name?(r=v,o=y):(r=p(n.name),o=r);t.locations.push({idx:n.idx,refIdx:e,setData:r,updateData:o});break}case"attributes":t.locations.push({idx:n.idx,refIdx:n.refIdx,setData:m,updateData:g});break;case"handler":{const{setup:e,update:o}=k(n.event);t.locations.push({idx:n.idx,refIdx:n.refIdx,setData:e,updateData:o});break}case"ref":const o=t.cbRefs.push(n.idx)-1;t.locations.push({idx:n.idx,refIdx:n.refIdx,setData:it(o,t.refList),updateData:Z})}}(e,t),n++}if(i){const r=n+s;e.collectors.push({idx:r,prevIdx:o,getVal:Y}),rt(t.nextSibling,e,r)}s&&(e.collectors.push({idx:n,prevIdx:o,getVal:X}),rt(t.firstChild,e,n))}return e}function st(t){G.call(this,K(t))}function it(t,e){return function(n){e[e.length-1][t]=()=>n(this)}}const lt=Node.prototype,at=lt.insertBefore,ct=lt.appendChild,ht=lt.removeChild,ut=((t,e)=>Object.getOwnPropertyDescriptor(t,e))(lt,"textContent").set;class dt{constructor(t){this.children=t}mount(t,e){const n=this.children,o=document.createTextNode("");this.anchor=o,at.call(t,o,e);const r=n.length;if(r){const e=n[0].mount;for(let s=0;s<r;s++)e.call(n[s],t,o)}this.parentEl=t}moveBefore(t,e){if(t){const n=t.children[0];e=(n?n.firstNode():t.anchor)||null}const n=this.children;for(let t=0,o=n.length;t<o;t++)n[t].moveBefore(null,e);this.parentEl.insertBefore(this.anchor,e)}patch(t,e){if(this===t)return;const n=this.children,o=t.children;if(0===o.length&&0===n.length)return;this.children=o;const r=o[0]||n[0],{mount:s,patch:i,remove:l,beforeRemove:a,moveBefore:c,firstNode:h}=r,u=this.anchor,d=this.isOnlyChild,f=this.parentEl;if(0===o.length&&d){if(e)for(let t=0,e=n.length;t<e;t++)a.call(n[t]);return ut.call(f,""),void ct.call(f,u)}let p=0,m=0,g=n[0],b=o[0],v=n.length-1,y=o.length-1,x=n[v],w=o[y],k=void 0;for(;p<=v&&m<=y;){if(null===g){g=n[++p];continue}if(null===x){x=n[--v];continue}let t=g.key,r=b.key;if(t===r){i.call(g,b,e),o[m]=g,g=n[++p],b=o[++m];continue}let l=x.key,a=w.key;if(l===a){i.call(x,w,e),o[y]=x,x=n[--v],w=o[--y];continue}if(t===a){i.call(g,w,e),o[y]=g;const t=o[y+1];c.call(g,t,u),g=n[++p],w=o[--y];continue}if(l===r){i.call(x,b,e),o[m]=x;const t=n[p];c.call(x,t,u),x=n[--v],b=o[++m];continue}k=k||pt(n,p,v);let d=k[r];if(void 0===d)s.call(b,f,h.call(g)||null);else{const t=n[d];c.call(t,g,null),i.call(t,b,e),o[m]=t,n[d]=null}b=o[++m]}if(p<=v||m<=y)if(p>v){const t=o[y+1],e=t?h.call(t)||null:u;for(let t=m;t<=y;t++)s.call(o[t],f,e)}else for(let t=p;t<=v;t++){let o=n[t];o&&(e&&a.call(o),l.call(o))}}beforeRemove(){const t=this.children,e=t.length;if(e){const n=t[0].beforeRemove;for(let o=0;o<e;o++)n.call(t[o])}}remove(){const{parentEl:t,anchor:e}=this;if(this.isOnlyChild)ut.call(t,"");else{const n=this.children,o=n.length;if(o){const t=n[0].remove;for(let e=0;e<o;e++)t.call(n[e])}ht.call(t,e)}}firstNode(){const t=this.children[0];return t?t.firstNode():void 0}toString(){return this.children.map((t=>t.toString())).join("")}}function ft(t){return new dt(t)}function pt(t,e,n){let o={};for(let r=e;r<=n;r++)o[t[r].key]=r;return o}const mt=Node.prototype,gt=mt.insertBefore,bt=mt.removeChild;class vt{constructor(t){this.content=[],this.html=t}mount(t,e){this.parentEl=t;const n=document.createElement("template");n.innerHTML=this.html,this.content=[...n.content.childNodes];for(let n of this.content)gt.call(t,n,e);if(!this.content.length){const n=document.createTextNode("");this.content.push(n),gt.call(t,n,e)}}moveBefore(t,e){const n=t?t.content[0]:e,o=this.parentEl;for(let t of this.content)gt.call(o,t,n)}patch(t){if(this===t)return;const e=t.html;if(this.html!==e){const n=this.parentEl,o=this.content[0],r=document.createElement("template");r.innerHTML=e;const s=[...r.content.childNodes];for(let t of s)gt.call(n,t,o);if(!s.length){const t=document.createTextNode("");s.push(t),gt.call(n,t,o)}this.remove(),this.content=s,this.html=t.html}}beforeRemove(){}remove(){const t=this.parentEl;for(let e of this.content)bt.call(t,e)}firstNode(){return this.content[0]}toString(){return this.html}}function yt(t){return new vt(t)}function xt(t,e,n=null){t.mount(e,n)}const wt=Symbol("Target"),kt=Symbol("Skip"),$t=Symbol("Key changes"),Nt=Object.prototype.toString,Et=Object.prototype.hasOwnProperty,At=new Set(["Object","Array","Set","Map","WeakMap"]),Tt=new Set(["Set","Map","WeakMap"]);function _t(t){return Nt.call(t).slice(8,-1)}function Lt(t){return"object"==typeof t&&At.has(_t(t))}function St(t,e){return Lt(t)?Mt(t,e):t}function Ct(t){return t[kt]=!0,t}function Dt(t){return t[wt]||t}const Ot=new WeakMap;function Bt(t,e,n){Ot.get(t)||Ot.set(t,new Map);const o=Ot.get(t);o.get(e)||o.set(e,new Set),o.get(e).add(n),It.has(n)||It.set(n,new Set),It.get(n).add(t)}function Rt(t,e){const n=Ot.get(t);if(!n)return;const o=n.get(e);if(o)for(const t of[...o])Pt(t),t()}const It=new WeakMap;function Pt(t){const e=It.get(t);if(e){for(const n of e){const e=Ot.get(n);if(e)for(const n of e.values())n.delete(t)}e.clear()}}const jt=new WeakMap;function Mt(t,e=(()=>{})){if(!Lt(t))throw new Error("Cannot make the given value reactive");if(kt in t)return t;const n=t[wt];if(n)return Mt(n,e);jt.has(t)||jt.set(t,new Map);const o=jt.get(t);if(!o.has(e)){const n=_t(t),r=Tt.has(n)?function(t,e,n){const o=Ht[n](t,e);return Object.assign(Wt(e),{get:(t,n)=>n===wt?t:Et.call(o,n)?o[n]:(Bt(t,n,e),St(t[n],e))})}(t,e,n):Wt(e),s=new Proxy(t,r);o.set(e,s)}return o.get(e)}function Wt(t){return{get:(e,n,o)=>n===wt?e:(Bt(e,n,t),St(Reflect.get(e,n,o),t)),set(t,e,n,o){const r=!Et.call(t,e),s=Reflect.get(t,e,o),i=Reflect.set(t,e,n,o);return r&&Rt(t,$t),(s!==n||Array.isArray(t)&&"length"===e)&&Rt(t,e),i},deleteProperty(t,e){const n=Reflect.deleteProperty(t,e);return Rt(t,$t),Rt(t,e),n},ownKeys:e=>(Bt(e,$t,t),Reflect.ownKeys(e)),has:(e,n)=>(Bt(e,$t,t),Reflect.has(e,n))}}function Ft(t,e,n){return o=>(o=Dt(o),Bt(e,o,n),St(e[t](o),n))}function Vt(t,e,n){return function*(){Bt(e,$t,n);const o=e.keys();for(const r of e[t]()){const t=o.next().value;Bt(e,t,n),yield St(r,n)}}}function zt(t,e,n){return(o,r)=>{o=Dt(o);const s=n.has(o),i=n[e](o),l=n[t](o,r);return s!==n.has(o)&&Rt(n,$t),i!==r&&Rt(n,o),l}}function Kt(t){return()=>{const e=[...t.keys()];t.clear(),Rt(t,$t);for(const n of e)Rt(t,n)}}const Ht={Set:(t,e)=>({has:Ft("has",t,e),add:zt("add","has",t),delete:zt("delete","has",t),keys:Vt("keys",t,e),values:Vt("values",t,e),entries:Vt("entries",t,e),[Symbol.iterator]:Vt(Symbol.iterator,t,e),clear:Kt(t),get size(){return Bt(t,$t,e),t.size}}),Map:(t,e)=>({has:Ft("has",t,e),get:Ft("get",t,e),set:zt("set","get",t),delete:zt("delete","has",t),keys:Vt("keys",t,e),values:Vt("values",t,e),entries:Vt("entries",t,e),[Symbol.iterator]:Vt(Symbol.iterator,t,e),clear:Kt(t),get size(){return Bt(t,$t,e),t.size}}),WeakMap:(t,e)=>({has:Ft("has",t,e),get:Ft("get",t,e),set:zt("set","get",t),delete:zt("delete","has",t)})};class Ut extends EventTarget{trigger(t,e){this.dispatchEvent(new CustomEvent(t,{detail:e}))}}class qt extends String{}const Gt={};function Xt(...t){const e="__template__"+Xt.nextId++,n=String.raw(...t);return Gt[e]=n,e}Xt.nextId=1;const Yt=new WeakMap,Zt=new WeakMap;function Qt(t,e,n=!1){if(!t)return!1;const o=t.fiber;o&&Yt.set(o,e);const r=Zt.get(t);if(r){let t=!1;for(let n=r.length-1;n>=0;n--)try{r[n](e),t=!0;break}catch(t){e=t}if(t)return n&&o&&o.node.fiber&&o.root.counter--,!0}return Qt(t.parent,e)}function Jt(t){const e=t.error,n="node"in t?t.node:t.fiber.node,o="fiber"in t?t.fiber:n.fiber;let r=o;do{r.node.fiber=r,r=r.parent}while(r);Yt.set(o.root,e);if(!Qt(n,e,!0)){console.warn("[Owl] Unhandled error. Destroying the root component");try{n.app.destroy()}catch(t){console.error(t)}}}function te(t){let e=0;for(let n of t)n.node.fiber=null,n.bdom?n.node.forceNextRender=!0:e++,e+=te(n.children);return e}class ee{constructor(t,e){if(this.bdom=null,this.children=[],this.appliedToDom=!1,this.deep=!1,this.node=t,this.parent=e,e){this.deep=e.deep;const t=e.root;t.counter++,this.root=t,e.children.push(this)}else this.root=this}}class ne extends ee{constructor(){super(...arguments),this.counter=1,this.willPatch=[],this.patched=[],this.mounted=[],this.locked=!1}complete(){const t=this.node;this.locked=!0;let e=void 0;try{for(e of this.willPatch){let t=e.node;if(t.fiber===e){const e=t.component;for(let n of t.willPatch)n.call(e)}}e=void 0,t._patch(),this.locked=!1;let n=this.mounted;for(;e=n.pop();)if(e=e,e.appliedToDom)for(let t of e.node.mounted)t();let o=this.patched;for(;e=o.pop();)if(e=e,e.appliedToDom)for(let t of e.node.patched)t()}catch(t){this.locked=!1,Jt({fiber:e||this,error:t})}}}class oe extends ne{constructor(t,e,n={}){super(t,null),this.target=e,this.position=n.position||"last-child"}complete(){let t=this;try{const e=this.node;if(e.app.constructor.validateTarget(this.target),e.bdom)e.updateDom();else if(e.bdom=this.bdom,"last-child"===this.position||0===this.target.childNodes.length)xt(e.bdom,this.target);else{const t=this.target.childNodes[0];xt(e.bdom,this.target,t)}e.fiber=null,e.status=1,this.appliedToDom=!0;let n=this.mounted;for(;t=n.pop();)if(t.appliedToDom)for(let e of t.node.mounted)e()}catch(e){Jt({fiber:t,error:e})}}}function re(t,e){const n=e.defaultProps;if(n)for(let e in n)void 0===t[e]&&(t[e]=n[e])}function se(t,e){if(!0===e)return!0;if("function"==typeof e)return"object"==typeof t?t instanceof e:typeof t===e.name.toLowerCase();if(e instanceof Array){let n=!1;for(let o=0,r=e.length;o<r;o++)n=n||se(t,e[o]);return n}if(e.optional&&void 0===t)return!0;let n=!e.type||se(t,e.type);if(e.validate&&(n=n&&e.validate(t)),e.type===Array&&e.element)for(let o=0,r=t.length;o<r;o++)n=n&&se(t[o],e.element);if(e.type===Object&&e.shape){const o=e.shape;for(let e in o)n=n&&se(t[e],o[e]);if(n)for(let e in t)if(!(e in o))throw new Error(`unknown prop '${e}'`)}return n}let ie=null;function le(){if(!ie)throw new Error("No active component (a hook function should only be called in 'setup')");return ie}const ae=new WeakMap;function ce(t){const e=le();let n=ae.get(e);return n||(n=function(t){let e=!1;return async()=>{await Promise.resolve(),e||(e=!0,t(),await Promise.resolve(),e=!1)}}(e.render.bind(e)),ae.set(e,n),e.willDestroy.push(Pt.bind(null,n)),e.app.dev&&Object.defineProperty(e,"subscriptions",{get(){return t=n,[...It.get(t)||[]].map((t=>{const e=Ot.get(t);return{target:t,keys:e?[...e.keys()]:[]}}));var t}})),Mt(t,n)}class he{constructor(t,e,n,o){this.fiber=null,this.bdom=null,this.status=0,this.forceNextRender=!1,this.children=Object.create(null),this.refs={},this.willStart=[],this.willUpdateProps=[],this.willUnmount=[],this.mounted=[],this.willPatch=[],this.patched=[],this.willDestroy=[],ie=this,this.app=n,this.parent=o||null,this.level=o?o.level+1:0,re(e,t);const r=o&&o.childEnv||n.env;this.childEnv=r,e=ce(e),this.component=new t(e,r,this),this.renderFn=n.getTemplate(t.template).bind(this.component,this.component,this),this.component.setup(),ie=null}mountComponent(t,e){const n=new oe(this,t,e);this.app.scheduler.addFiber(n),this.initiateRender(n)}async initiateRender(t){this.fiber=t,this.mounted.length&&t.root.mounted.push(t);const e=this.component;try{await Promise.all(this.willStart.map((t=>t.call(e))))}catch(t){return void Jt({node:this,error:t})}0===this.status&&this.fiber===t&&this._render(t)}async render(t=!1){let e=this.fiber;if(e&&e.root.locked&&(await Promise.resolve(),e=this.fiber),e){if(!e.bdom&&!Yt.has(e))return void(t&&(e.deep=t));t=t||e.deep}else if(!this.bdom)return;const n=function(t){let e=t.fiber;if(e){let t=e.root;return t.counter=t.counter+1-te(e.children),e.children=[],e.bdom=null,Yt.has(e)&&(Yt.delete(e),Yt.delete(t),e.appliedToDom=!1),e}const n=new ne(t,null);return t.willPatch.length&&n.willPatch.push(n),t.patched.length&&n.patched.push(n),n}(this);n.deep=t,this.fiber=n,this.app.scheduler.addFiber(n),await Promise.resolve(),2!==this.status&&(this.fiber!==n||!e&&n.parent||this._render(n))}_render(t){try{t.bdom=this.renderFn(),t.root.counter--}catch(t){Jt({node:this,error:t})}}destroy(){let t=1===this.status;this._destroy(),t&&this.bdom.remove()}_destroy(){const t=this.component;if(1===this.status)for(let e of this.willUnmount)e.call(t);for(let t of Object.values(this.children))t._destroy();for(let e of this.willDestroy)e.call(t);this.status=2}async updateAndRender(t,e){const n=function(t,e){let n=t.fiber;return n&&(te(n.children),n.root=null),new ee(t,e)}(this,e);this.fiber=n;const o=this.component;re(t,o.constructor),ie=this,t=ce(t),ie=null;const r=Promise.all(this.willUpdateProps.map((e=>e.call(o,t))));if(await r,n!==this.fiber)return;o.props=t,this._render(n);const s=e.root;this.willPatch.length&&s.willPatch.push(n),this.patched.length&&s.patched.push(n)}updateDom(){if(this.fiber)if(this.bdom===this.fiber.bdom)for(let t in this.children){this.children[t].updateDom()}else this.bdom.patch(this.fiber.bdom,!1),this.fiber.appliedToDom=!0,this.fiber=null}firstNode(){const t=this.bdom;return t?t.firstNode():void 0}mount(t,e){const n=this.fiber.bdom;this.bdom=n,n.mount(t,e),this.status=1,this.fiber.appliedToDom=!0,this.fiber=null}moveBefore(t,e){this.bdom.moveBefore(t?t.bdom:null,e)}patch(){this.fiber&&this.fiber.parent&&this._patch()}_patch(){const t=Object.keys(this.children).length>0;this.bdom.patch(this.fiber.bdom,t),t&&this.cleanOutdatedChildren(),this.fiber.appliedToDom=!0,this.fiber=null}beforeRemove(){this._destroy()}remove(){this.bdom.remove()}cleanOutdatedChildren(){const t=this.children;for(const e in t){const n=t[e],o=n.status;1!==o&&(delete t[e],2!==o&&n.destroy())}}}class ue{constructor(){this.tasks=new Set,this.isRunning=!1,this.requestAnimationFrame=ue.requestAnimationFrame}start(){this.isRunning=!0,this.scheduleTasks()}stop(){this.isRunning=!1}addFiber(t){this.tasks.add(t.root),this.isRunning||this.start()}flush(){this.tasks.forEach((t=>{if(t.root!==t)return void this.tasks.delete(t);const e=Yt.has(t);e&&0!==t.counter?this.tasks.delete(t):2!==t.node.status?0===t.counter&&(e||t.complete(),this.tasks.delete(t)):this.tasks.delete(t)})),0===this.tasks.size&&this.stop()}scheduleTasks(){this.requestAnimationFrame((()=>{this.flush(),this.isRunning&&this.scheduleTasks()}))}}ue.requestAnimationFrame=window.requestAnimationFrame.bind(window);const de="true,false,NaN,null,undefined,debugger,console,window,in,instanceof,new,function,return,this,eval,void,Math,RegExp,Array,Object,Date".split(","),fe=Object.assign(Object.create(null),{and:"&&",or:"||",gt:">",gte:">=",lt:"<",lte:"<="}),pe=Object.assign(Object.create(null),{"{":"LEFT_BRACE","}":"RIGHT_BRACE","[":"LEFT_BRACKET","]":"RIGHT_BRACKET",":":"COLON",",":"COMMA","(":"LEFT_PAREN",")":"RIGHT_PAREN"}),me="...,.,===,==,+,!==,!=,!,||,&&,>=,>,<=,<,?,-,*,/,%,typeof ,=>,=,;,in ".split(",");const ge=[function(t){let e=t[0],n=e;if("'"!==e&&'"'!==e&&"`"!==e)return!1;let o,r=1;for(;t[r]&&t[r]!==n;){if(o=t[r],e+=o,"\\"===o){if(r++,o=t[r],!o)throw new Error("Invalid expression");e+=o}r++}if(t[r]!==n)throw new Error("Invalid expression");return e+=n,"`"===n?{type:"TEMPLATE_STRING",value:e,replace:t=>e.replace(/\$\{(.*?)\}/g,((e,n)=>"${"+t(n)+"}"))}:{type:"VALUE",value:e}},function(t){let e=t[0];if(e&&e.match(/[0-9]/)){let n=1;for(;t[n]&&t[n].match(/[0-9]|\./);)e+=t[n],n++;return{type:"VALUE",value:e}}return!1},function(t){for(let e of me)if(t.startsWith(e))return{type:"OPERATOR",value:e};return!1},function(t){let e=t[0];if(e&&e.match(/[a-zA-Z_\$]/)){let n=1;for(;t[n]&&t[n].match(/\w/);)e+=t[n],n++;return e in fe?{type:"OPERATOR",value:fe[e],size:e.length}:{type:"SYMBOL",value:e}}return!1},function(t){const e=t[0];return!(!e||!(e in pe))&&{type:pe[e],value:e}}];const be=t=>t&&("LEFT_BRACE"===t.type||"COMMA"===t.type),ve=t=>t&&("RIGHT_BRACE"===t.type||"COMMA"===t.type);function ye(t){const e=new Set,n=function(t){const e=[];let n=!0;for(;n;)if(t=t.trim()){for(let o of ge)if(n=o(t),n){e.push(n),t=t.slice(n.size||n.value.length);break}}else n=!1;if(t.length)throw new Error(`Tokenizer error: could not tokenize "${t}"`);return e}(t);let o=0,r=[];for(;o<n.length;){let t=n[o],s=n[o-1],i=n[o+1],l=r[r.length-1];switch(t.type){case"LEFT_BRACE":case"LEFT_BRACKET":r.push(t.type);break;case"RIGHT_BRACE":case"RIGHT_BRACKET":r.pop()}let a="SYMBOL"===t.type&&!de.includes(t.value);if("SYMBOL"!==t.type||de.includes(t.value)||s&&("LEFT_BRACE"===l&&be(s)&&ve(i)&&(n.splice(o+1,0,{type:"COLON",value:":"},{...t}),i=n[o+1]),"OPERATOR"===s.type&&"."===s.value?a=!1:"LEFT_BRACE"!==s.type&&"COMMA"!==s.type||i&&"COLON"===i.type&&(a=!1)),"TEMPLATE_STRING"===t.type&&(t.value=t.replace((t=>xe(t)))),i&&"OPERATOR"===i.type&&"=>"===i.value)if("RIGHT_PAREN"===t.type){let t=o-1;for(;t>0&&"LEFT_PAREN"!==n[t].type;)"SYMBOL"===n[t].type&&n[t].originalValue&&(n[t].value=n[t].originalValue,e.add(n[t].value)),t--}else e.add(t.value);a&&(t.varName=t.value,e.has(t.value)||(t.originalValue=t.value,t.value=`ctx['${t.value}']`)),o++}for(const t of n)"SYMBOL"===t.type&&t.varName&&e.has(t.value)&&(t.originalValue=t.value,t.value="_"+t.value,t.isLocal=!0);return n}function xe(t){return ye(t).map((t=>t.value)).join("")}const we=/\{\{.*?\}\}/g,ke=/\{\{.*?\}\}/g;function $e(t){let e=t.match(we);return e&&e[0].length===t.length?`(${xe(t.slice(2,-2))})`:"`"+t.replace(ke,(t=>"${"+xe(t.slice(2,-2))+"}"))+"`"}const Ne=document.implementation.createDocument(null,null,null),Ee=new Set(["stop","capture","prevent","self","synthetic"]);class Ae{constructor(t,e){this.dynamicTagName=null,this.isRoot=!1,this.hasDynamicChildren=!1,this.children=[],this.data=[],this.childNumber=0,this.parentVar="",this.id=Ae.nextBlockId++,this.varName="b"+this.id,this.blockName="block"+this.id,this.target=t,this.type=e}static generateId(t){return this.nextDataIds[t]=(this.nextDataIds[t]||0)+1,t+this.nextDataIds[t]}insertData(t,e="d"){const n=Ae.generateId(e);return this.target.addLine(`let ${n} = ${t};`),this.data.push(n)-1}insert(t){this.currentDom?this.currentDom.appendChild(t):this.dom=t}generateExpr(t){if("block"===this.type){const t=this.children.length;let e=this.data.length?`[${this.data.join(", ")}]`:t?"[]":"";return t&&(e+=", ["+this.children.map((t=>t.varName)).join(", ")+"]"),this.dynamicTagName?`toggler(${this.dynamicTagName}, ${this.blockName}(${this.dynamicTagName})(${e}))`:`${this.blockName}(${e})`}return"list"===this.type?`list(c_block${this.id})`:t}asXmlString(){const t=Ne.createElement("t");return t.appendChild(this.dom),t.innerHTML}}function Te(t,e){return Object.assign({block:null,index:0,forceNewBlock:!0,translate:t.translate,tKeyExpr:null,nameSpace:t.nameSpace,tModelSelectedExpr:t.tModelSelectedExpr},e)}Ae.nextBlockId=1,Ae.nextDataIds={};class _e{constructor(t){this.indentLevel=0,this.loopLevel=0,this.code=[],this.hasRoot=!1,this.hasCache=!1,this.hasRef=!1,this.refInfo={},this.shouldProtectScope=!1,this.name=t}addLine(t,e){const n=new Array(this.indentLevel+2).join(" ");void 0===e?this.code.push(n+t):this.code.splice(e,0,n+t)}generateCode(){let t=[];if(t.push(`function ${this.name}(ctx, node, key = "") {`),this.hasRef){t.push(" const refs = ctx.__owl__.refs;");for(let e in this.refInfo){const[n,o]=this.refInfo[e];t.push(` const ${n} = ${o};`)}}this.shouldProtectScope&&(t.push(" ctx = Object.create(ctx);"),t.push(" ctx[isBoundary] = 1")),this.hasCache&&(t.push(" let cache = ctx.cache || {};"),t.push(" let nextCache = ctx.cache = {};"));for(let e of this.code)t.push(e);return this.hasRoot||t.push("return text('');"),t.push("}"),t.join("\n ")}}const Le=["label","title","placeholder","alt"],Se=/^(\s*)([\s\S]+?)(\s*)$/;class Ce{constructor(t,e){if(this.blocks=[],this.ids={},this.nextBlockId=1,this.isDebug=!1,this.targets=[],this.target=new _e("template"),this.translatableAttributes=Le,this.staticCalls=[],this.helpers=new Set,this.translateFn=e.translateFn||(t=>t),e.translatableAttributes){const t=new Set(Le);for(let n of e.translatableAttributes)n.startsWith("-")?t.delete(n.slice(1)):t.add(n);this.translatableAttributes=[...t]}this.hasSafeContext=e.hasSafeContext||!1,this.dev=e.dev||!1,this.ast=t,this.templateName=e.name}generateCode(){const t=this.ast;this.isDebug=12===t.type,Ae.nextBlockId=1,Ae.nextDataIds={},this.compileAST(t,{block:null,index:0,forceNewBlock:!1,isLast:!0,translate:!0,tKeyExpr:null});let e=[" let { text, createBlock, list, multi, html, toggler, component, comment } = bdom;"];this.helpers.size&&e.push(`let { ${[...this.helpers].join(", ")} } = helpers;`),this.templateName&&e.push(`// Template name: "${this.templateName}"`);for(let{id:t,template:n}of this.staticCalls)e.push(`const ${t} = getTemplate(${n});`);if(this.blocks.length){e.push("");for(let t of this.blocks)if(t.dom){let n=t.asXmlString();t.dynamicTagName?(n=n.replace(/^<\w+/,`<\${tag || '${t.dom.nodeName}'}`),n=n.replace(/\w+>$/,`\${tag || '${t.dom.nodeName}'}>`),e.push(`let ${t.blockName} = tag => createBlock(\`${n}\`);`)):e.push(`let ${t.blockName} = createBlock(\`${n}\`);`)}}if(this.targets.length)for(let t of this.targets)e.push(""),e=e.concat(t.generateCode());e.push(""),e=e.concat("return "+this.target.generateCode());const n=e.join("\n ");if(this.isDebug){const t="[Owl Debug]\n"+n;console.log(t)}return n}compileInNewTarget(t,e,n){const o=this.generateId(t),r=this.target,s=new _e(o);this.targets.push(s),this.target=s;const i=Te(n);return this.compileAST(e,i),this.target=r,o}addLine(t){this.target.addLine(t)}generateId(t=""){return this.ids[t]=(this.ids[t]||0)+1,t+this.ids[t]}insertAnchor(t){const e="block-child-"+t.children.length,n=Ne.createElement(e);t.insert(n)}createBlock(t,e,n){const o=this.target.hasRoot,r=new Ae(this.target,e);return o||n.preventRoot||(this.target.hasRoot=!0,r.isRoot=!0),t&&(t.children.push(r),"list"===t.type&&(r.parentVar="c_block"+t.id)),r}insertBlock(t,e,n){let o=e.generateExpr(t);const r=n.tKeyExpr;if(e.parentVar){let t="key"+this.target.loopLevel;return r&&(t=`${r} + ${t}`),this.helpers.add("withKey"),void this.addLine(`${e.parentVar}[${n.index}] = withKey(${o}, ${t});`)}r&&(o=`toggler(${r}, ${o})`),e.isRoot&&!n.preventRoot?this.addLine(`return ${o};`):this.addLine(`let ${e.varName} = ${o};`)}captureExpression(t,e=!1){if(!e&&!t.includes("=>"))return xe(t);const n=ye(t),o=new Map;return n.map((t=>{if(t.varName&&!t.isLocal){if(!o.has(t.varName)){const e=this.generateId("v");o.set(t.varName,e),this.addLine(`const ${e} = ${t.value};`)}t.value=o.get(t.varName)}return t.value})).join("")}compileAST(t,e){switch(t.type){case 1:this.compileComment(t,e);break;case 0:this.compileText(t,e);break;case 2:this.compileTDomNode(t,e);break;case 4:this.compileTEsc(t,e);break;case 8:this.compileTOut(t,e);break;case 5:this.compileTIf(t,e);break;case 9:this.compileTForeach(t,e);break;case 10:this.compileTKey(t,e);break;case 3:this.compileMulti(t,e);break;case 7:this.compileTCall(t,e);break;case 15:this.compileTCallBlock(t,e);break;case 6:this.compileTSet(t,e);break;case 11:this.compileComponent(t,e);break;case 12:this.compileDebug(t,e);break;case 13:this.compileLog(t,e);break;case 14:this.compileTSlot(t,e);break;case 16:this.compileTTranslation(t,e);break;case 17:this.compileTPortal(t,e)}}compileDebug(t,e){this.addLine("debugger;"),t.content&&this.compileAST(t.content,e)}compileLog(t,e){this.addLine(`console.log(${xe(t.expr)});`),t.content&&this.compileAST(t.content,e)}compileComment(t,e){let{block:n,forceNewBlock:o}=e;if(!n||o)n=this.createBlock(n,"comment",e),this.insertBlock(`comment(\`${t.value}\`)`,n,{...e,forceNewBlock:o&&!n});else{const e=Ne.createComment(t.value);n.insert(e)}}compileText(t,e){let{block:n,forceNewBlock:o}=e,r=t.value;if(r&&!1!==e.translate){const t=Se.exec(r);r=t[1]+this.translateFn(t[2])+t[3]}if(!n||o)n=this.createBlock(n,"text",e),this.insertBlock(`text(\`${r}\`)`,n,{...e,forceNewBlock:o&&!n});else{const e=0===t.type?Ne.createTextNode:Ne.createComment;n.insert(e.call(Ne,r))}}generateHandlerCode(t,e){const n=t.split(".").slice(1).map((t=>{if(!Ee.has(t))throw new Error(`Unknown event modifier: '${t}'`);return`"${t}"`}));let o="";return n.length&&(o=n.join(",")+", "),`[${o}${this.captureExpression(e)}, ctx]`}compileTDomNode(t,e){let{block:n,forceNewBlock:o}=e;const r=!n||o||null!==t.dynamicTag||t.ns;let s=this.target.code.length;if(r&&((t.dynamicTag||e.tKeyExpr||t.ns)&&e.block&&this.insertAnchor(e.block),n=this.createBlock(n,"block",e),this.blocks.push(n),t.dynamicTag)){const e=this.generateId("tag");this.addLine(`let ${e} = ${xe(t.dynamicTag)};`),n.dynamicTagName=e}const i={},l=t.ns||e.nameSpace;l&&r&&(i["block-ns"]=l);for(let o in t.attrs){let r,s;if(o.startsWith("t-attf")){r=$e(t.attrs[o]);const e=n.insertData(r,"attr");s=o.slice(7),i["block-attribute-"+e]=s}else if(o.startsWith("t-att")){r=xe(t.attrs[o]);const e=n.insertData(r,"attr");"t-att"===o?i["block-attributes"]=String(e):(s=o.slice(6),i["block-attribute-"+e]=s)}else this.translatableAttributes.includes(o)?i[o]=this.translateFn(t.attrs[o]):(r=`"${t.attrs[o]}"`,s=o,i[o]=t.attrs[o]);if("value"===s&&e.tModelSelectedExpr){i["block-attribute-"+n.insertData(`${e.tModelSelectedExpr} === ${r}`,"attr")]="selected"}}for(let e in t.on){const o=this.generateHandlerCode(e,t.on[e]);i["block-handler-"+n.insertData(o,"hdlr")]=e}if(t.ref){this.target.hasRef=!0;if(we.test(t.ref)){const e=t.ref.replace(we,(t=>"${"+this.captureExpression(t.slice(2,-2),!0)+"}")),o=n.insertData(`(el) => refs[\`${e}\`] = el`,"ref");i["block-ref"]=String(o)}else{let e=t.ref;if(e in this.target.refInfo){this.helpers.add("multiRefSetter");const t=this.target.refInfo[e],o=n.data.push(t[0])-1;i["block-ref"]=String(o),t[1]=`multiRefSetter(refs, \`${e}\`)`}else{let t=this.generateId("ref");this.target.refInfo[e]=[t,`(el) => refs[\`${e}\`] = el`];const o=n.data.push(t)-1;i["block-ref"]=String(o)}}}let a;if(t.model){const{hasDynamicChildren:e,baseExpr:o,expr:r,eventType:s,shouldNumberize:l,shouldTrim:c,targetAttr:h,specialInitTargetAttr:u}=t.model,d=xe(o),f=this.generateId("bExpr");this.addLine(`const ${f} = ${d};`);const p=xe(r),m=this.generateId("expr");this.addLine(`const ${m} = ${p};`);const g=`${f}[${m}]`;let b;if(u)b=n.insertData(`${g} === '${i[h]}'`,"attr"),i["block-attribute-"+b]=u;else if(e){a=""+this.generateId("bValue"),this.addLine(`let ${a} = ${g}`)}else b=n.insertData(""+g,"attr"),i["block-attribute-"+b]=h;this.helpers.add("toNumber");let v="ev.target."+h;v=c?v+".trim()":v,v=l?`toNumber(${v})`:v;const y=`[(ev) => { ${g} = ${v}; }]`;b=n.insertData(y,"hdlr"),i["block-handler-"+b]=s}const c=Ne.createElement(t.tag);for(const[t,e]of Object.entries(i))"class"===t&&""===e||c.setAttribute(t,e);if(n.insert(c),t.content.length){const o=n.currentDom;n.currentDom=c;const r=t.content;for(let o=0;o<r.length;o++){const s=t.content[o],i=Te(e,{block:n,index:n.childNumber,forceNewBlock:!1,isLast:e.isLast&&o===r.length-1,tKeyExpr:e.tKeyExpr,nameSpace:l,tModelSelectedExpr:a});this.compileAST(s,i)}n.currentDom=o}if(r&&(this.insertBlock(n.blockName+"(ddd)",n,e),n.children.length&&n.hasDynamicChildren)){const t=this.target.code,e=n.children.slice();let o=e.shift();for(let n=s;n<t.length&&(!t[n].trimStart().startsWith(`let ${o.varName} `)||(t[n]=t[n].replace("let "+o.varName,o.varName),o=e.shift(),o));n++);this.target.addLine(`let ${n.children.map((t=>t.varName))};`,s)}}compileTEsc(t,e){let n,{block:o,forceNewBlock:r}=e;if("0"===t.expr?(this.helpers.add("zero"),n="ctx[zero]"):(n=xe(t.expr),t.defaultValue&&(this.helpers.add("withDefault"),n=`withDefault(${n}, \`${t.defaultValue}\`)`)),!o||r)o=this.createBlock(o,"text",e),this.insertBlock(`text(${n})`,o,{...e,forceNewBlock:r&&!o});else{const t=o.insertData(n,"txt"),e=Ne.createElement("block-text-"+t);o.insert(e)}}compileTOut(t,e){let{block:n}=e;n&&this.insertAnchor(n),n=this.createBlock(n,"html",e),this.helpers.add("0"===t.expr?"zero":"safeOutput");let o="0"===t.expr?"ctx[zero]":`safeOutput(${xe(t.expr)})`;if(t.body){const n=Ae.nextBlockId,r=Te(e);this.compileAST({type:3,content:t.body},r),this.helpers.add("withDefault"),o=`withDefault(${o}, b${n})`}this.insertBlock(""+o,n,e)}compileTIf(t,e,n){let{block:o,forceNewBlock:r,index:s}=e,i=s;const l=this.target.code.length,a=!o||"multi"!==o.type&&r;o&&(o.hasDynamicChildren=!0),(!o||"multi"!==o.type&&r)&&(o=this.createBlock(o,"multi",e)),this.addLine(`if (${xe(t.condition)}) {`),this.target.indentLevel++,this.insertAnchor(o);const c=Te(e,{block:o,index:i});if(this.compileAST(t.content,c),this.target.indentLevel--,t.tElif)for(let n of t.tElif){this.addLine(`} else if (${xe(n.condition)}) {`),this.target.indentLevel++,this.insertAnchor(o);const t=Te(e,{block:o,index:i});this.compileAST(n.content,t),this.target.indentLevel--}if(t.tElse){this.addLine("} else {"),this.target.indentLevel++,this.insertAnchor(o);const n=Te(e,{block:o,index:i});this.compileAST(t.tElse,n),this.target.indentLevel--}if(this.addLine("}"),a){if(o.children.length){const t=this.target.code,e=o.children.slice();let n=e.shift();for(let o=l;o<t.length&&(!t[o].trimStart().startsWith(`let ${n.varName} `)||(t[o]=t[o].replace("let "+n.varName,n.varName),n=e.shift(),n));o++);this.target.addLine(`let ${o.children.map((t=>t.varName))};`,l)}const t=o.children.map((t=>t.varName)).join(", ");this.insertBlock(`multi([${t}])`,o,e)}}compileTForeach(t,e){let{block:n}=e;n&&this.insertAnchor(n),n=this.createBlock(n,"list",e),this.target.loopLevel++;const o="i"+this.target.loopLevel;this.addLine("ctx = Object.create(ctx);");const r="v_block"+n.id,s="k_block"+n.id,i="l_block"+n.id,l="c_block"+n.id;let a;this.helpers.add("prepareList"),this.addLine(`const [${s}, ${r}, ${i}, ${l}] = prepareList(${xe(t.collection)});`),this.dev&&this.addLine(`const keys${n.id} = new Set();`),this.addLine(`for (let ${o} = 0; ${o} < ${i}; ${o}++) {`),this.target.indentLevel++,this.addLine(`ctx[\`${t.elem}\`] = ${r}[${o}];`),t.hasNoFirst||this.addLine(`ctx[\`${t.elem}_first\`] = ${o} === 0;`),t.hasNoLast||this.addLine(`ctx[\`${t.elem}_last\`] = ${o} === ${r}.length - 1;`),t.hasNoIndex||this.addLine(`ctx[\`${t.elem}_index\`] = ${o};`),t.hasNoValue||this.addLine(`ctx[\`${t.elem}_value\`] = ${s}[${o}];`),this.addLine(`let key${this.target.loopLevel} = ${t.key?xe(t.key):o};`),this.dev&&(this.addLine(`if (keys${n.id}.has(key${this.target.loopLevel})) { throw new Error(\`Got duplicate key in t-foreach: \${key${this.target.loopLevel}}\`)}`),this.addLine(`keys${n.id}.add(key${this.target.loopLevel});`)),t.memo&&(this.target.hasCache=!0,a=this.generateId(),this.addLine(`let memo${a} = ${xe(t.memo)}`),this.addLine(`let vnode${a} = cache[key${this.target.loopLevel}];`),this.addLine(`if (vnode${a}) {`),this.target.indentLevel++,this.addLine(`if (shallowEqual(vnode${a}.memo, memo${a})) {`),this.target.indentLevel++,this.addLine(`${l}[${o}] = vnode${a};`),this.addLine(`nextCache[key${this.target.loopLevel}] = vnode${a};`),this.addLine("continue;"),this.target.indentLevel--,this.addLine("}"),this.target.indentLevel--,this.addLine("}"));const c=Te(e,{block:n,index:o});this.compileAST(t.body,c),t.memo&&this.addLine(`nextCache[key${this.target.loopLevel}] = Object.assign(${l}[${o}], {memo: memo${a}});`),this.target.indentLevel--,this.target.loopLevel--,this.addLine("}"),e.isLast||this.addLine("ctx = ctx.__proto__;"),this.insertBlock("l",n,e)}compileTKey(t,e){const n=this.generateId("tKey_");this.addLine(`const ${n} = ${xe(t.expr)};`),e=Te(e,{tKeyExpr:n,block:e.block,index:e.index}),this.compileAST(t.content,e)}compileMulti(t,e){let{block:n,forceNewBlock:o}=e;const r=!n||o;let s=this.target.code.length;if(r){if(t.content.filter((t=>6!==t.type)).length<=1){for(let n of t.content)this.compileAST(n,e);return}n=this.createBlock(n,"multi",e)}let i=0;for(let o=0,r=t.content.length;o<r;o++){const s=t.content[o],l=6===s.type,a=Te(e,{block:n,index:i,forceNewBlock:!l,preventRoot:e.preventRoot,isLast:e.isLast&&o===r-1});this.compileAST(s,a),l||i++}if(r){if(n.hasDynamicChildren&&n.children.length){const t=this.target.code,e=n.children.slice();let o=e.shift();for(let n=s;n<t.length&&(!t[n].trimStart().startsWith(`let ${o.varName} `)||(t[n]=t[n].replace("let "+o.varName,o.varName),o=e.shift(),o));n++);this.target.addLine(`let ${n.children.map((t=>t.varName))};`,s)}const t=n.children.map((t=>t.varName)).join(", ");this.insertBlock(`multi([${t}])`,n,e)}}compileTCall(t,e){let{block:n,forceNewBlock:o}=e;if(t.body){this.addLine("ctx = Object.create(ctx);"),this.addLine("ctx[isBoundary] = 1;"),this.helpers.add("isBoundary");const n=Ae.nextBlockId,o=Te(e,{preventRoot:!0});this.compileAST({type:3,content:t.body},o),n!==Ae.nextBlockId&&(this.helpers.add("zero"),this.addLine(`ctx[zero] = b${n};`))}const r=we.test(t.name),s=r?$e(t.name):"`"+t.name+"`";n&&(o||this.insertAnchor(n));const i=`key + \`${this.generateComponentKey()}\``;if(r){const t=this.generateId("template");this.addLine(`const ${t} = ${s};`),n=this.createBlock(n,"multi",e),this.helpers.add("call"),this.insertBlock(`call(this, ${t}, ctx, node, ${i})`,n,{...e,forceNewBlock:!n})}else{const t=this.generateId("callTemplate_");this.helpers.add("getTemplate"),this.staticCalls.push({id:t,template:s}),n=this.createBlock(n,"multi",e),this.insertBlock(`${t}.call(this, ctx, node, ${i})`,n,{...e,forceNewBlock:!n})}t.body&&!e.isLast&&this.addLine("ctx = ctx.__proto__;")}compileTCallBlock(t,e){let{block:n,forceNewBlock:o}=e;n&&(o||this.insertAnchor(n)),n=this.createBlock(n,"multi",e),this.insertBlock(xe(t.name),n,{...e,forceNewBlock:!n})}compileTSet(t,e){this.target.shouldProtectScope=!0,this.helpers.add("isBoundary").add("withDefault");const n=t.value?xe(t.value||""):"null";if(t.body){this.helpers.add("LazyValue");const o={type:3,content:t.body};let r=`new LazyValue(${this.compileInNewTarget("value",o,e)}, ctx, node)`;r=t.value?r?`withDefault(${n}, ${r})`:n:r,this.addLine(`ctx[\`${t.name}\`] = ${r};`)}else{let e;e=t.defaultValue?t.value?`withDefault(${n}, \`${t.defaultValue}\`)`:`\`${t.defaultValue}\``:n,this.helpers.add("setContextValue"),this.addLine(`setContextValue(ctx, "${t.name}", ${e});`)}}generateComponentKey(){const t=[this.generateId("__")];for(let e=0;e<this.target.loopLevel;e++)t.push(`\${key${e+1}}`);return t.join("__")}formatProp(t,e){if(e=this.captureExpression(e),t.includes(".")){let[n,o]=t.split(".");if("bind"!==o)throw new Error("Invalid prop suffix");this.helpers.add("bind"),t=n,e=`bind(ctx, ${e||void 0})`}return`${t=/^[a-z_]+$/i.test(t)?t:`'${t}'`}: ${e||void 0}`}formatPropObject(t){const e=[];for(const[n,o]of Object.entries(t))e.push(this.formatProp(n,o));return e.join(", ")}compileComponent(t,e){let{block:n}=e;const o="slots"in t.props,r=[],s=this.formatPropObject(t.props);s&&r.push(s);let i="";if(!!Object.keys(t.slots).length){let n="ctx";!this.target.loopLevel&&this.hasSafeContext||(n=this.generateId("ctx"),this.helpers.add("capture"),this.addLine(`const ${n} = capture(ctx);`));let o=[];for(let r in t.slots){const s=t.slots[r].content,i=[`__render: ${this.compileInNewTarget("slot",s,e)}, __ctx: ${n}`],l=t.slots[r].scope;l&&i.push(`__scope: "${l}"`),t.slots[r].attrs&&i.push(this.formatPropObject(t.slots[r].attrs));const a=`{${i.join(", ")}}`;o.push(`'${r}': ${a}`)}i=`{${o.join(", ")}}`}!i||t.dynamicProps||o||(this.helpers.add("markRaw"),r.push(`slots: markRaw(${i})`));const l=`{${r.join(",")}}`;let a,c=l;t.dynamicProps&&(c=`Object.assign({}, ${xe(t.dynamicProps)}${r.length?", "+l:""})`),(i&&(t.dynamicProps||o)||this.dev)&&(a=this.generateId("props"),this.addLine(`const ${a} = ${c};`),c=a),i&&(t.dynamicProps||o)&&(this.helpers.add("markRaw"),this.addLine(`${a}.slots = markRaw(Object.assign(${i}, ${a}.slots))`));const h=this.generateComponentKey();let u;t.isDynamic?(u=this.generateId("Comp"),this.addLine(`let ${u} = ${xe(t.name)};`)):u=`\`${t.name}\``,this.dev&&this.addLine(`helpers.validateProps(${u}, ${a}, ctx);`),n&&(!1===e.forceNewBlock||e.tKeyExpr)&&this.insertAnchor(n);let d=`key + \`${h}\``;e.tKeyExpr&&(d=`${e.tKeyExpr} + ${d}`);let f=`component(${`${u}, ${c}, ${d}, node, ctx`})`;t.isDynamic&&(f=`toggler(${u}, ${f})`),n=this.createBlock(n,"multi",e),this.insertBlock(f,n,e)}compileTSlot(t,e){this.helpers.add("callSlot");let n,o,{block:r}=e,s=!1;t.name.match(we)?(s=!0,o=$e(t.name)):o="'"+t.name+"'";const i=t.attrs?`{${this.formatPropObject(t.attrs)}}`:null;if(t.defaultContent){n=`callSlot(ctx, node, key, ${o}, ${s}, ${i}, ${this.compileInNewTarget("defaultContent",t.defaultContent,e)})`}else if(s){let t=this.generateId("slot");this.addLine(`const ${t} = ${o};`),n=`toggler(${t}, callSlot(ctx, node, key, ${t}), ${s}, ${i})`}else n=`callSlot(ctx, node, key, ${o}, ${s}, ${i})`;r&&this.insertAnchor(r),r=this.createBlock(r,"multi",e),this.insertBlock(n,r,{...e,forceNewBlock:!1})}compileTTranslation(t,e){t.content&&this.compileAST(t.content,Object.assign({},e,{translate:!1}))}compileTPortal(t,e){this.helpers.add("Portal");let{block:n}=e;const o=this.compileInNewTarget("slot",t.content,e),r=this.generateComponentKey();let s="ctx";!this.target.loopLevel&&this.hasSafeContext||(s=this.generateId("ctx"),this.helpers.add("capture"),this.addLine(`const ${s} = capture(ctx);`));const i=`component(Portal, {target: ${t.target},slots: {'default': {__render: ${o}, __ctx: ${s}}}}, key + \`${r}\`, node, ctx)`;n&&this.insertAnchor(n),n=this.createBlock(n,"multi",e),this.insertBlock(i,n,{...e,forceNewBlock:!1})}}const De=new WeakMap;function Oe(t){if("string"==typeof t){return Be(function(t){const e=(new DOMParser).parseFromString(t,"text/xml");if(e.getElementsByTagName("parsererror").length){let n="Invalid XML in template.";const o=e.getElementsByTagName("parsererror")[0].textContent;if(o){n+="\nThe parser has produced the following error message:\n"+o;const e=/\d+/g,r=e.exec(o);if(r){const s=Number(r[0]),i=t.split("\n")[s-1],l=e.exec(o);if(i&&l){const t=Number(l[0])-1;i[t]&&(n+=`\nThe error might be located at xml line ${s} column ${t}\n${i}\n${"-".repeat(t-1)}^`)}}}throw new Error(n)}return e}(`<t>${t}</t>`).firstChild)}let e=De.get(t);return e||(e=Be(t.cloneNode(!0)),De.set(t,e)),e}function Be(t){var e;(function(t){let e=t.querySelectorAll("[t-elif], [t-else]");for(let t=0,n=e.length;t<n;t++){let n=e[t],o=n.previousElementSibling,r=t=>o.getAttribute(t),s=t=>+!!n.getAttribute(t);if(!o||!r("t-if")&&!r("t-elif"))throw new Error("t-elif and t-else directives must be preceded by a t-if or t-elif directive");{if(r("t-foreach"))throw new Error("t-if cannot stay at the same level as t-foreach when using t-elif or t-else");if(["t-if","t-elif","t-else"].map(s).reduce((function(t,e){return t+e}))>1)throw new Error("Only one conditional branching directive is allowed per node");let t;for(;(t=n.previousSibling)!==o;){if(t.nodeValue.trim().length&&8!==t.nodeType)throw new Error("text is not allowed between branching directives");t.remove()}}}})(e=t),function(t){const e=[...t.querySelectorAll("[t-esc]")].filter((t=>t.tagName[0]===t.tagName[0].toUpperCase()||t.hasAttribute("t-component")));for(const t of e){if(t.childNodes.length)throw new Error("Cannot have t-esc on a component that already has content");const e=t.getAttribute("t-esc");t.removeAttribute("t-esc");const n=t.ownerDocument.createElement("t");null!=e&&n.setAttribute("t-esc",e),t.appendChild(n)}}(e);return Re(t,{inPreTag:!1,inSVG:!1})||{type:0,value:""}}function Re(t,e){return t instanceof Element?function(t,e){if(t.hasAttribute("t-debug"))return t.removeAttribute("t-debug"),{type:12,content:Re(t,e)};if(t.hasAttribute("t-log")){const n=t.getAttribute("t-log");return t.removeAttribute("t-log"),{type:13,expr:n,content:Re(t,e)}}return null}(t,e)||function(t,e){if(!t.hasAttribute("t-foreach"))return null;const n=t.outerHTML,o=t.getAttribute("t-foreach");t.removeAttribute("t-foreach");const r=t.getAttribute("t-as")||"";t.removeAttribute("t-as");const s=t.getAttribute("t-key");if(!s)throw new Error(`"Directive t-foreach should always be used with a t-key!" (expression: t-foreach="${o}" t-as="${r}")`);t.removeAttribute("t-key");const i=t.getAttribute("t-memo")||"";t.removeAttribute("t-memo");const l=Re(t,e);if(!l)return null;const a=!n.includes("t-call"),c=a&&!n.includes(r+"_first"),h=a&&!n.includes(r+"_last"),u=a&&!n.includes(r+"_index"),d=a&&!n.includes(r+"_value");return{type:9,collection:o,elem:r,body:l,memo:i,key:s,hasNoFirst:c,hasNoLast:h,hasNoIndex:u,hasNoValue:d}}(t,e)||function(t,e){if(!t.hasAttribute("t-if"))return null;const n=t.getAttribute("t-if");t.removeAttribute("t-if");const o=Re(t,e)||{type:0,value:""};let r=t.nextElementSibling;const s=[];for(;r&&r.hasAttribute("t-elif");){const t=r.getAttribute("t-elif");r.removeAttribute("t-elif");const n=Re(r,e),o=r.nextElementSibling;r.remove(),r=o,n&&s.push({condition:t,content:n})}let i=null;r&&r.hasAttribute("t-else")&&(r.removeAttribute("t-else"),i=Re(r,e),r.remove());return{type:5,condition:n,content:o,tElif:s.length?s:null,tElse:i}}(t,e)||function(t,e){if(!t.hasAttribute("t-portal"))return null;const n=t.getAttribute("t-portal");t.removeAttribute("t-portal");const o=Re(t,e);if(!o)return{type:0,value:""};return{type:17,target:n,content:o}}(t,e)||function(t,e){if(!t.hasAttribute("t-call"))return null;const n=t.getAttribute("t-call");if(t.removeAttribute("t-call"),"t"!==t.tagName){const o=Re(t,e),r={type:7,name:n,body:null};if(o&&2===o.type)return o.content=[r],o;if(o&&11===o.type)return{...o,slots:{default:{content:r}}}}const o=Ve(t,e);return{type:7,name:n,body:o.length?o:null}}(t,e)||function(t,e){if(!t.hasAttribute("t-call-block"))return null;return{type:15,name:t.getAttribute("t-call-block")}}(t)||function(t,e){if(!t.hasAttribute("t-esc"))return null;const n=t.getAttribute("t-esc");t.removeAttribute("t-esc");const o={type:4,expr:n,defaultValue:t.textContent||""};let r=t.getAttribute("t-ref");t.removeAttribute("t-ref");const s=Re(t,e);if(!s)return o;if(2===s.type)return{...s,ref:r,content:[o]};if(11===s.type)throw new Error("t-esc is not supported on Component nodes");return o}(t,e)||function(t,e){if(!t.hasAttribute("t-key"))return null;const n=t.getAttribute("t-key");t.removeAttribute("t-key");const o=Re(t,e);if(!o)return null;return{type:10,expr:n,content:o}}(t,e)||function(t,e){if("off"!==t.getAttribute("t-translation"))return null;return t.removeAttribute("t-translation"),{type:16,content:Re(t,e)}}(t,e)||function(t,e){if(!t.hasAttribute("t-slot"))return null;const n=t.getAttribute("t-slot");t.removeAttribute("t-slot");const o={};for(let e of t.getAttributeNames()){const n=t.getAttribute(e);o[e]=n}return{type:14,name:n,attrs:o,defaultContent:ze(t,e)}}(t,e)||function(t,e){if(!t.hasAttribute("t-out")&&!t.hasAttribute("t-raw"))return null;t.hasAttribute("t-raw")&&console.warn('t-raw has been deprecated in favor of t-out. If the value to render is not wrapped by the "markup" function, it will be escaped');const n=t.getAttribute("t-out")||t.getAttribute("t-raw");t.removeAttribute("t-out"),t.removeAttribute("t-raw");const o={type:8,expr:n,body:null},r=t.getAttribute("t-ref");t.removeAttribute("t-ref");const s=Re(t,e);if(!s)return o;if(2===s.type)return o.body=s.content.length?s.content:null,{...s,ref:r,content:[o]};return o}(t,e)||function(t,e){let n=t.tagName;const o=n[0];let r=t.hasAttribute("t-component");if(r&&"t"!==n)throw new Error(`Directive 't-component' can only be used on <t> nodes (used on a <${n}>)`);if(o!==o.toUpperCase()&&!r)return null;r&&(n=t.getAttribute("t-component"),t.removeAttribute("t-component"));const s=t.getAttribute("t-props");t.removeAttribute("t-props");const i=t.getAttribute("t-slot-scope");t.removeAttribute("t-slot-scope");const l={};for(let e of t.getAttributeNames()){const n=t.getAttribute(e);if(e.startsWith("t-")){const t=Fe.get(e.split("-").slice(0,2).join("-"));throw new Error(t||"unsupported directive on Component: "+e)}l[e]=n}const a={};if(t.hasChildNodes()){const n=t.cloneNode(!0),o=Array.from(n.querySelectorAll("[t-set-slot]"));for(let t of o){if("t"!==t.tagName)throw new Error(`Directive 't-set-slot' can only be used on <t> nodes (used on a <${t.tagName}>)`);const o=t.getAttribute("t-set-slot");let r=t.parentElement,s=!1;for(;r!==n;){if(r.hasAttribute("t-component")||r.tagName[0]===r.tagName[0].toUpperCase()){s=!0;break}r=r.parentElement}if(s)continue;t.removeAttribute("t-set-slot"),t.remove();const i=Re(t,e);if(i){const e={content:i},n={};for(let o of t.getAttributeNames()){const r=t.getAttribute(o);"t-slot-scope"!==o?n[o]=r:e.scope=r}Object.keys(n).length&&(e.attrs=n),a[o]=e}}const r=ze(n,e);r&&(a.default={content:r},i&&(a.default.scope=i))}return{type:11,name:n,isDynamic:r,dynamicProps:s,props:l,slots:a}}(t,e)||function(t,e){const{tagName:n}=t,o=t.getAttribute("t-tag");if(t.removeAttribute("t-tag"),"t"===n&&!o)return null;if(n.startsWith("block-"))throw new Error(`Invalid tag name: '${n}'`);e=Object.assign({},e),"pre"===n&&(e.inPreTag=!0);const r=We.has(n)&&!e.inSVG;e.inSVG=e.inSVG||r;const s=r?"http://www.w3.org/2000/svg":null,i=t.getAttribute("t-ref");t.removeAttribute("t-ref");const l=t.getAttributeNames(),a={},c={};let h=null;for(let o of l){const r=t.getAttribute(o);if(o.startsWith("t-on")){if("t-on"===o)throw new Error("Missing event name with t-on directive");c[o.slice(5)]=r}else if(o.startsWith("t-model")){if(!["input","select","textarea"].includes(n))throw new Error("The t-model directive only works with <input>, <textarea> and <select>");let s,i;if(je.test(r)){const t=r.lastIndexOf(".");s=r.slice(0,t),i=`'${r.slice(t+1)}'`}else{if(!Me.test(r))throw new Error(`Invalid t-model expression: "${r}" (it should be assignable)`);{const t=r.lastIndexOf("[");s=r.slice(0,t),i=r.slice(t+1,-1)}}const l=t.getAttribute("type"),a="input"===n,c="select"===n,u="textarea"===n,d=a&&"checkbox"===l,f=a&&"radio"===l,p=a&&!d&&!f,m=o.includes(".lazy"),g=o.includes(".number");h={baseExpr:s,expr:i,targetAttr:d?"checked":"value",specialInitTargetAttr:f?"checked":null,eventType:f?"click":c||m?"change":"input",shouldTrim:o.includes(".trim")&&(p||u),shouldNumberize:g&&(p||u)},c&&((e=Object.assign({},e)).tModelInfo=h)}else{if(o.startsWith("block-"))throw new Error(`Invalid attribute: '${o}'`);if("t-name"!==o){if(o.startsWith("t-")&&!o.startsWith("t-att"))throw new Error(`Unknown QWeb directive: '${o}'`);const t=e.tModelInfo;t&&["t-att-value","t-attf-value"].includes(o)&&(t.hasDynamicChildren=!0),a[o]=r}}}const u=Ve(t,e);return{type:2,tag:n,dynamicTag:o,attrs:a,on:c,ref:i,content:u,model:h,ns:s}}(t,e)||function(t,e){if(!t.hasAttribute("t-set"))return null;const n=t.getAttribute("t-set"),o=t.getAttribute("t-value")||null,r=t.innerHTML===t.textContent&&t.textContent||null;let s=null;t.textContent!==t.innerHTML&&(s=Ve(t,e));return{type:6,name:n,value:o,defaultValue:r,body:s}}(t,e)||function(t,e){if("t"!==t.tagName)return null;return ze(t,e)}(t,e):function(t,e){if(t.nodeType===Node.TEXT_NODE){let n=t.textContent||"";if(!e.inPreTag){if(Ie.test(n)&&!n.trim())return null;n=n.replace(Pe," ")}return{type:0,value:n}}if(t.nodeType===Node.COMMENT_NODE)return{type:1,value:t.textContent||""};return null}(t,e)}const Ie=/[\r\n]/,Pe=/\s+/g;const je=/\.[\w_]+\s*$/,Me=/\[[^\[]+\]\s*$/,We=new Set(["svg","g","path"]);const Fe=new Map([["t-on","t-on is no longer supported on components. Consider passing a callback in props."],["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 Ve(t,e){const n=[];for(let o of t.childNodes){const t=Re(o,e);t&&(3===t.type?n.push(...t.content):n.push(t))}return n}function ze(t,e){const n=Ve(t,e);switch(n.length){case 0:return null;case 1:return n[0];default:return{type:3,content:n}}}function Ke(t,e){const n=new Error(`The following error occurred in ${e}: `);return(...e)=>{try{const o=t(...e);return o instanceof Promise?o.catch((t=>{throw n.cause=t,t instanceof Error&&(n.message+=`"${t.message}"`),n})):o}catch(t){throw t instanceof Error&&(n.message+=`"${t.message}"`),n}}}function He(t){const e=le(),n=e.app.dev?Ke:t=>t;e.mounted.push(n(t.bind(e.component),"onMounted"))}function Ue(t){const e=le(),n=e.app.dev?Ke:t=>t;e.patched.push(n(t.bind(e.component),"onPatched"))}function qe(t){const e=le(),n=e.app.dev?Ke:t=>t;e.willUnmount.unshift(n(t.bind(e.component),"onWillUnmount"))}class Ge{constructor(t,e,n){this.props=t,this.env=e,this.__owl__=n}setup(){}render(t=!1){this.__owl__.render(t)}}Ge.template="";const Xe=V("").constructor;class Ye extends Xe{constructor(t,e){super(""),this.target=null,this.selector=t,this.realBDom=e}mount(t,e){if(super.mount(t,e),this.target=document.querySelector(this.selector),!this.target){let t=this.el;for(;t&&t.parentElement instanceof HTMLElement;)t=t.parentElement;if(this.target=t&&t.querySelector(this.selector),!this.target)throw new Error("invalid portal target")}this.realBDom.mount(this.target,null)}beforeRemove(){this.realBDom.beforeRemove()}remove(){this.realBDom&&(super.remove(),this.realBDom.remove(),this.realBDom=null)}patch(t){super.patch(t),this.realBDom?this.realBDom.patch(t.realBDom,!0):(this.realBDom=t.realBDom,this.realBDom.mount(this.target,null))}}class Ze extends Ge{setup(){const t=this.__owl__,e=t.renderFn;t.renderFn=()=>new Ye(this.props.target,e()),qe((()=>{t.bdom&&t.bdom.remove()}))}}function Qe(t){const e=t.__owl__.component,n=Object.create(e);for(let e in t)n[e]=t[e];return n}Ze.template=Xt`<t t-slot="default"/>`,Ze.props={target:{type:String},slots:!0};const Je=Symbol("isBoundary");class tn{constructor(t,e,n){this.fn=t,this.ctx=Qe(e),this.node=n}evaluate(){return this.fn(this.ctx,this.node)}toString(){return this.evaluate().toString()}}let en=new WeakMap;const nn={withDefault:function(t,e){return null==t||!1===t?e:t},zero:Symbol("zero"),isBoundary:Je,callSlot:function(t,e,n,r,s,i,l){n=n+"__slot_"+r;const a=t.props[wt].slots||{},{__render:c,__ctx:h,__scope:u}=a[r]||{},d=Object.create(h||{});u&&(d[u]=i||{});const f=c?c.call(h.__owl__.component,d,e,n):null;if(l){let i=void 0,a=void 0;return f?i=s?o(r,f):f:a=l.call(t.__owl__.component,t,e,n),O([i,a])}return f||V("")},capture:Qe,withKey:function(t,e){return t.key=e,t},prepareList:function(t){let e,n;if(Array.isArray(t))e=t,n=t;else{if(!t)throw new Error("Invalid loop expression");n=Object.keys(t),e=Object.values(t)}const o=n.length;return[e,n,o,new Array(o)]},setContextValue:function(t,e,n){const o=t;for(;!t.hasOwnProperty(e)&&!t.hasOwnProperty(Je);){const e=t.__proto__;if(!e){t=o;break}t=e}t[e]=n},multiRefSetter:function(t,e){let n=0;return o=>{if(o&&(n++,n>1))throw new Error("Cannot have 2 elements with same ref name at the same time");(0===n||o)&&(t[e]=o)}},shallowEqual:function(t,e){for(let n=0,o=t.length;n<o;n++)if(t[n]!==e[n])return!1;return!0},toNumber:function(t){const e=parseFloat(t);return isNaN(e)?t:e},validateProps:function(t,e,n){const o="string"!=typeof t?t:n.constructor.components[t];if(!o)return;re(e,o);const r=o.defaultProps||{};let s=(i=o.props)instanceof Array?Object.fromEntries(i.map((t=>t.endsWith("?")?[t.slice(0,-1),!1]:[t,!0]))):i||{"*":!0};var i;const l="*"in s;for(let t in s){if("*"===t)continue;const n=s[t];let i,l=!!n;if("object"==typeof n&&"optional"in n&&(l=!n.optional),l&&t in r)throw new Error(`A default value cannot be defined for a mandatory prop (name: '${t}', component: ${o.name})`);if(void 0!==e[t]){try{i=se(e[t],n)}catch(e){throw e.message=`Invalid prop '${t}' in component ${o.name} (${e.message})`,e}if(!i)throw new Error(`Invalid Prop '${t}' in component '${o.name}'`)}else if(l)throw new Error(`Missing props '${t}' (component '${o.name}')`)}if(!l)for(let t in e)if(!(t in s))throw new Error(`Unknown prop '${t}' given to component '${o.name}'`)},LazyValue:tn,safeOutput:function(t){if(!t)return t;let e,n;return t instanceof qt?(e="string_safe",n=yt(t)):t instanceof tn?(e="lazy_value",n=t.evaluate()):t instanceof String||"string"==typeof t?(e="string_unsafe",n=V(t)):(e="block_safe",n=t),o(e,n)},bind:function(t,e){let n=t.__owl__.component,o=en.get(n);o||(o=new WeakMap,en.set(n,o));let r=o.get(e);return r||(r=e.bind(n),o.set(e,r)),r}},on={text:V,createBlock:J,list:ft,multi:O,html:yt,toggler:o,component:function(t,e,n,o,r){let s=o.children[n],i="string"!=typeof t;s&&(s.status<1?(s.destroy(),s=void 0):2===s.status&&(s=void 0)),i&&s&&s.component.constructor!==t&&(s=void 0);const l=o.fiber;if(s){let t=s.forceNextRender;if(t)s.forceNextRender=!1;else{const n=s.component.props[wt];t=l.deep||function(t,e){for(let n in t)if(t[n]!==e[n])return!0;return Object.keys(t).length!==Object.keys(e).length}(n,e)}t&&s.updateAndRender(e,l)}else{let a;if(i)a=t;else if(a=r.constructor.components[t],!a)throw new Error(`Cannot find the definition of component "${t}"`);s=new he(a,e,o.app,o),o.children[n]=s,s.initiateRender(new ee(s,l))}return s},comment:z};let rn=!1;class sn extends class{constructor(t={}){var e;this.rawTemplates=Object.create(Gt),this.templates={},this.dev=t.dev||!1,this.translateFn=t.translateFn,this.translatableAttributes=t.translatableAttributes,t.templates&&this.addTemplates(t.templates),this.helpers=(e=this.getTemplate.bind(this),Object.assign({},nn,{Portal:Ze,markRaw:Ct,getTemplate:e,call:(t,n,r,s,i)=>o(n,e(n).call(t,r,s,i))}))}addTemplate(t,e,n={}){if(t in this.rawTemplates&&!n.allowDuplicate)throw new Error(`Template ${t} already defined`);this.rawTemplates[t]=e}addTemplates(t,e={}){if(t){t=t instanceof Document?t:function(t){const e=(new DOMParser).parseFromString(t,"text/xml");if(e.getElementsByTagName("parsererror").length){let n="Invalid XML in template.";const o=e.getElementsByTagName("parsererror")[0].textContent;if(o){n+="\nThe parser has produced the following error message:\n"+o;const e=/\d+/g,r=e.exec(o);if(r){const s=Number(r[0]),i=t.split("\n")[s-1],l=e.exec(o);if(i&&l){const t=Number(l[0])-1;i[t]&&(n+=`\nThe error might be located at xml line ${s} column ${t}\n${i}\n${"-".repeat(t-1)}^`)}}}throw new Error(n)}return e}(t);for(const n of t.querySelectorAll("[t-name]")){const t=n.getAttribute("t-name");this.addTemplate(t,n,e)}}}getTemplate(t){if(!(t in this.templates)){const e=this.rawTemplates[t];if(void 0===e){let e="";try{e=` (for component "${le().component.constructor.name}")`}catch{}throw new Error(`Missing template: "${t}"${e}`)}const n=this._compileTemplate(t,e),o=this.templates;this.templates[t]=function(e,n){return o[t].call(this,e,n)};const r=n(on,this.helpers);this.templates[t]=r}return this.templates[t]}_compileTemplate(t,e){return function(t,e={}){const n=Oe(t),o=t instanceof Node?!(t instanceof Element)||null===t.querySelector("[t-set], [t-call]"):!t.includes("t-set")&&!t.includes("t-call"),r=new Ce(n,{...e,hasSafeContext:o}).generateCode();return new Function("bdom, helpers",r)}(e,{name:t,dev:this.dev,translateFn:this.translateFn,translatableAttributes:this.translatableAttributes})}}{constructor(t,e={}){super(e),this.scheduler=new ue,this.root=null,this.Root=t,e.test&&(this.dev=!0),!this.dev||e.test||rn||(console.info(`Owl is running in 'dev' mode.\n\nThis is not suitable for production use.\nSee https://github.com/odoo/owl/blob/${window.owl?window.owl.__info__.hash:"master"}/doc/reference/app.md#configuration for more information.`),rn=!0);const n=e.env||{},o=Object.getOwnPropertyDescriptors(n);this.env=Object.freeze(Object.create(Object.getPrototypeOf(n),o)),this.props=e.props||{}}mount(t,e){sn.validateTarget(t);const n=this.makeNode(this.Root,this.props),o=this.mountNode(n,t,e);return this.root=n,o}makeNode(t,e){return new he(t,e,this)}mountNode(t,e,n){const o=new Promise(((e,n)=>{let o=!1;t.mounted.push((()=>{e(t.component),o=!0}));let r=Zt.get(t);r||(r=[],Zt.set(t,r)),r.unshift((t=>{throw o?console.error(t):n(t),t}))}));return t.mountComponent(e,n),o}destroy(){this.root&&this.root.destroy()}}function ln(t,e){const n=Object.create(t),o=Object.getOwnPropertyDescriptors(e);return Object.freeze(Object.defineProperties(n,o))}function an(t){const e=le();e.childEnv=ln(e.childEnv,t)}sn.validateTarget=function(t){if(!(t instanceof HTMLElement))throw new Error("Cannot mount component: the target is not a valid DOM element");if(!document.body.contains(t))throw new Error("Cannot mount a component on a detached dom node")};const cn=()=>{};e.shouldNormalizeDom=!1,e.mainEventHandler=(e,n,o)=>{const{data:r,modifiers:s}=t(e);e=r;let i=!1;if(s.length){let t=!1;const e=n.target===o;for(const o of s)switch(o){case"self":if(t=!0,e)continue;return i;case"prevent":(t&&e||!t)&&n.preventDefault();continue;case"stop":(t&&e||!t)&&n.stopPropagation(),i=!0;continue}}if(Object.hasOwnProperty.call(e,0)){const t=e[0];if("function"!=typeof t)throw new Error(`Invalid handler (expected a function, received: '${t}')`);let o=e[1]?e[1].__owl__:null;o&&1!==o.status||t.call(o?o.component:null,n)}return i};const hn={config:e,mount:xt,patch:function(t,e,n=!1){t.patch(e,n)},remove:function(t,e=!1){e&&t.beforeRemove(),t.remove()},list:ft,multi:O,text:V,toggler:o,createBlock:J,html:yt,comment:z},un={};exports.App=sn,exports.Component=Ge,exports.EventBus=Ut,exports.__info__=un,exports.blockDom=hn,exports.loadFile=async function(t){const e=await fetch(t);if(!e.ok)throw new Error("Error while fetching xml templates");return await e.text()},exports.markRaw=Ct,exports.markup=function(t){return new qt(t)},exports.mount=async function(t,e,n={}){return new sn(t,n).mount(e,n)},exports.onError=function(t){const e=le();let n=Zt.get(e);n||(n=[],Zt.set(e,n)),n.push(t.bind(e.component))},exports.onMounted=He,exports.onPatched=Ue,exports.onRendered=function(t){const e=le(),n=e.renderFn,o=e.app.dev?Ke:t=>t;e.renderFn=o((()=>{const o=n();return t.call(e.component),o}),"onRendered")},exports.onWillDestroy=function(t){const e=le(),n=e.app.dev?Ke:t=>t;e.willDestroy.push(n(t.bind(e.component),"onWillDestroy"))},exports.onWillPatch=function(t){const e=le(),n=e.app.dev?Ke:t=>t;e.willPatch.unshift(n(t.bind(e.component),"onWillPatch"))},exports.onWillRender=function(t){const e=le(),n=e.renderFn,o=e.app.dev?Ke:t=>t;e.renderFn=o((()=>(t.call(e.component),n())),"onWillRender")},exports.onWillStart=function(t){const e=le(),n=e.app.dev?Ke:t=>t;e.willStart.push(n(t.bind(e.component),"onWillStart"))},exports.onWillUnmount=qe,exports.onWillUpdateProps=function(t){const e=le(),n=e.app.dev?Ke:t=>t;e.willUpdateProps.push(n(t.bind(e.component),"onWillUpdateProps"))},exports.reactive=Mt,exports.status=function(t){switch(t.__owl__.status){case 0:return"new";case 1:return"mounted";case 2:return"destroyed"}},exports.toRaw=Dt,exports.useChildSubEnv=an,exports.useComponent=function(){return ie.component},exports.useEffect=function(t,e=(()=>[NaN])){let n,o;He((()=>{o=e(),n=t(...o)||cn})),Ue((()=>{const r=e();r.some(((t,e)=>t!==o[e]))&&(o=r,n(),n=t(...o)||cn)})),qe((()=>n()))},exports.useEnv=function(){return le().component.env},exports.useExternalListener=function(t,e,n,o){const r=le(),s=n.bind(r.component);He((()=>t.addEventListener(e,s,o))),qe((()=>t.removeEventListener(e,s,o)))},exports.useRef=function(t){const e=le().refs;return{get el(){return e[t]||null}}},exports.useState=ce,exports.useSubEnv=function(t){const e=le();e.component.env=ln(e.component.env,t),an(t)},exports.whenReady=function(t){return new Promise((function(t){"loading"!==document.readyState?t(!0):document.addEventListener("DOMContentLoaded",t,!1)})).then(t||function(){})},exports.xml=Xt,un.version="2.0.0-beta.2",un.date="2022-03-03T15:22:11.176Z",un.hash="e4fdd32",un.url="https://github.com/odoo/owl";