@relax.js/core 1.0.1 → 1.0.3

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.
@@ -0,0 +1,51 @@
1
+ /**
2
+ * Interface for loading paginated data from a data source.
3
+ * Implement this interface to provide data to table or list components
4
+ * that support pagination and sorting.
5
+ *
6
+ * Used by components like `r-table` to fetch data on demand as users
7
+ * navigate through pages or change sort order.
8
+ *
9
+ * @example
10
+ * // Implement for an API-backed data source
11
+ * class UserDataLoader implements DataLoader {
12
+ * async load(options) {
13
+ * const params = new URLSearchParams({
14
+ * page: options.page.toString(),
15
+ * pageSize: options.pageSize.toString(),
16
+ * sort: JSON.stringify(options.sort)
17
+ * });
18
+ *
19
+ * const response = await fetch(`/api/users?${params}`);
20
+ * return response.json();
21
+ * }
22
+ * }
23
+ *
24
+ * @example
25
+ * // Use with a table component
26
+ * const loader: DataLoader = new UserDataLoader();
27
+ * const result = await loader.load({ page: 1, pageSize: 25, sort: [] });
28
+ * table.render(result.rows);
29
+ */
30
+ export interface DataLoader {
31
+ /**
32
+ * Loads a page of data with optional sorting.
33
+ *
34
+ * @param options - The loading options
35
+ * @param options.page - The 1-based page number to load
36
+ * @param options.pageSize - Number of rows per page
37
+ * @param options.sort - Array of sort specifications
38
+ * @returns Promise resolving to rows and total count for pagination
39
+ */
40
+ load(options: {
41
+ page: number;
42
+ pageSize: number;
43
+ sort: {
44
+ column: string;
45
+ direction: 'asc' | 'desc';
46
+ }[];
47
+ }): Promise<{
48
+ rows: Record<string, any>[];
49
+ totalCount: number;
50
+ }>;
51
+ }
@@ -1 +1,3 @@
1
1
  export { LinkedList, Node } from "./LinkedList";
2
+ export { Pager, PageSelectedEvent } from "./Pager";
3
+ export { type DataLoader } from "./DataLoader";
@@ -1,2 +1,2 @@
1
- var h=Object.defineProperty;var a=Object.getOwnPropertyDescriptor;var _=Object.getOwnPropertyNames;var u=Object.prototype.hasOwnProperty;var o=(s,t)=>{for(var e in t)h(s,e,{get:t[e],enumerable:!0})},f=(s,t,e,n)=>{if(t&&typeof t=="object"||typeof t=="function")for(let r of _(t))!u.call(s,r)&&r!==e&&h(s,r,{get:()=>t[r],enumerable:!(n=a(t,r))||n.enumerable});return s};var v=s=>f(h({},"__esModule",{value:!0}),s);var d={};o(d,{LinkedList:()=>l,Node:()=>i});module.exports=v(d);var i=class{constructor(t,e){this.value=t;this.removeCallback=e;this.next=null;this.prev=null}remove(){this.prev.next=this.next,this.next.prev=this.prev,this.removeCallback()}},l=class{constructor(){this._length=0}addFirst(t){let e=new i(t,()=>this._length--);this._first?(e.next=this._first,this._first.prev=e,this._first=e):(this._first=e,this._last=this._first),this._length++}addLast(t){let e=new i(t,()=>this._length--);this._first?(e.prev=this._last,this._last.next=e,this._last=e):(this._first=e,this._last=this._first),this._length++}removeFirst(){if(!this.first)throw new Error("The list is empty.");let t=this._first.value;return this._first=this._first.next,this._length--,t}removeLast(){if(!this.last)throw new Error("The list is empty.");let t=this._last.value;return this._last=this._last.prev,this._length--,t}get length(){return this._length}get first(){return this._first}get firstValue(){return this._first?.value}get last(){return this._last}get lastValue(){return this._last?.value}};
1
+ var u=Object.defineProperty;var p=Object.getOwnPropertyDescriptor;var d=Object.getOwnPropertyNames;var g=Object.prototype.hasOwnProperty;var v=(i,t)=>{for(var e in t)u(i,e,{get:t[e],enumerable:!0})},f=(i,t,e,r)=>{if(t&&typeof t=="object"||typeof t=="function")for(let s of d(t))!g.call(i,s)&&s!==e&&u(i,s,{get:()=>t[s],enumerable:!(r=p(t,s))||r.enumerable});return i};var _=i=>f(u({},"__esModule",{value:!0}),i);var m={};v(m,{LinkedList:()=>l,Node:()=>n,PageSelectedEvent:()=>a,Pager:()=>o});module.exports=_(m);var n=class{constructor(t,e){this.value=t;this.removeCallback=e;this.next=null;this.prev=null}remove(){this.prev.next=this.next,this.next.prev=this.prev,this.removeCallback()}},l=class{constructor(){this._length=0}addFirst(t){let e=new n(t,()=>this._length--);this._first?(e.next=this._first,this._first.prev=e,this._first=e):(this._first=e,this._last=this._first),this._length++}addLast(t){let e=new n(t,()=>this._length--);this._first?(e.prev=this._last,this._last.next=e,this._last=e):(this._first=e,this._last=this._first),this._length++}removeFirst(){if(!this.first)throw new Error("The list is empty.");let t=this._first.value;return this._first=this._first.next,this._length--,t}removeLast(){if(!this.last)throw new Error("The list is empty.");let t=this._last.value;return this._last=this._last.prev,this._length--,t}get length(){return this._length}get first(){return this._first}get firstValue(){return this._first?.value}get last(){return this._last}get lastValue(){return this._last?.value}};var a=class extends Event{constructor(e){super("pageselected",{bubbles:!0,composed:!0});this.page=e}},o=class{constructor(t,e,r){this.currentPage=1;this.container=t,this.totalCount=e,this.pageSize=r,this.render()}render(){this.container.innerHTML="";let t=Math.max(1,Math.ceil(this.totalCount/this.pageSize)),e=(r,s,c=!1)=>{let h=document.createElement("button");return h.textContent=r,h.disabled=c,h.addEventListener("click",()=>this.selectPage(s)),h};this.container.appendChild(e("Previous",this.currentPage-1,this.currentPage===1));for(let r=1;r<=t;r++){let s=e(r.toString(),r);r===this.currentPage&&s.classList.add("selected"),this.container.appendChild(s)}this.container.appendChild(e("Next",this.currentPage+1,this.currentPage===t))}selectPage(t){let e=Math.max(1,Math.ceil(this.totalCount/this.pageSize));t<1||t>e||t===this.currentPage||(this.currentPage=t,this.render(),this.container.dispatchEvent(new a(this.currentPage)))}update(t){this.totalCount=t;let e=Math.max(1,Math.ceil(this.totalCount/this.pageSize));this.currentPage>e&&(this.currentPage=e),this.render()}getCurrentPage(){return this.currentPage}};
2
2
  //# sourceMappingURL=index.js.map
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
- "sources": ["../../src/collections/Index.ts", "../../src/collections/LinkedList.ts"],
4
- "sourcesContent": ["export {LinkedList, Node} from \"./LinkedList\";", "/**\r\n * A node in the @see LinkedList.\r\n */\r\nexport class Node<T> {\r\n /**\r\n * Next node unless last one.\r\n */\r\n public next: Node<T> | null = null;\r\n /**\r\n * Previous node unless first one.\r\n */\r\n public prev: Node<T> | null = null;\r\n\r\n /**\r\n * Constructor.\r\n * @param value Value contained in the node.\r\n */\r\n constructor(public value: T, private removeCallback: () => void) {}\r\n\r\n /**\r\n * Remove this node.\r\n * Will notify the list of the update to ensure correct element count.\r\n */\r\n remove() {\r\n this.prev.next = this.next;\r\n this.next.prev = this.prev;\r\n this.removeCallback();\r\n }\r\n}\r\n\r\n/**\r\n * A trivial linked list implementation.\r\n */\r\nexport class LinkedList<T> {\r\n private _first?: Node<T>;\r\n private _last?: Node<T>;\r\n private _length = 0;\r\n\r\n /**\r\n * Add a value to the beginning of the list.\r\n * @param value Value that should be contained in the node.\r\n */\r\n addFirst(value: T) {\r\n const newNode = new Node(value, () => this._length--);\r\n if (!this._first) {\r\n this._first = newNode;\r\n this._last = this._first;\r\n } else {\r\n newNode.next = this._first;\r\n this._first.prev = newNode;\r\n this._first = newNode;\r\n }\r\n\r\n this._length++;\r\n }\r\n\r\n /**\r\n * Add a value to the end of the list.\r\n * @param value Value that should be contained in a node.\r\n */\r\n addLast(value: T) {\r\n const newNode = new Node(value, () => this._length--);\r\n if (!this._first) {\r\n this._first = newNode;\r\n this._last = this._first;\r\n } else {\r\n newNode.prev = this._last;\r\n this._last.next = newNode;\r\n this._last = newNode;\r\n }\r\n\r\n this._length++;\r\n }\r\n\r\n /**\r\n * Remove a node from the beginning of the list.\r\n * @returns Value contained in the first node.\r\n */\r\n removeFirst(): T {\r\n if (!this.first) {\r\n throw new Error('The list is empty.');\r\n }\r\n\r\n const value = this._first.value;\r\n this._first = this._first.next;\r\n this._length--;\r\n return value;\r\n }\r\n\r\n /**\r\n * Remove a node from the end of the list.\r\n * @returns Value contained in the last node.\r\n */\r\n removeLast(): T {\r\n if (!this.last) {\r\n throw new Error('The list is empty.');\r\n }\r\n\r\n const value = this._last.value;\r\n this._last = this._last.prev;\r\n this._length--;\r\n return value;\r\n }\r\n\r\n /**\r\n * Number of nodes in the list.\r\n *\r\n * The count works as long as you do not manually remove nodes (by assigning next/prev to the neighbors).\r\n */\r\n get length(): number {\r\n return this._length;\r\n }\r\n\r\n /**\r\n * First ndoe.\r\n */\r\n get first(): Node<T> | undefined {\r\n return this._first;\r\n }\r\n\r\n /**\r\n * Contained value of the first node.\r\n */\r\n get firstValue(): T | undefined {\r\n return this._first?.value;\r\n }\r\n\r\n /**\r\n * Last node.\r\n */\r\n get last(): Node<T> | undefined {\r\n return this._last;\r\n }\r\n\r\n /**\r\n * Contained value of the last node.\r\n */\r\n get lastValue(): T | undefined {\r\n return this._last?.value;\r\n }\r\n}\r\n"],
5
- "mappings": "4ZAAA,IAAAA,EAAA,GAAAC,EAAAD,EAAA,gBAAAE,EAAA,SAAAC,IAAA,eAAAC,EAAAJ,GCGO,IAAMK,EAAN,KAAc,CAcjB,YAAmBC,EAAkBC,EAA4B,CAA9C,WAAAD,EAAkB,oBAAAC,EAVrC,KAAO,KAAuB,KAI9B,KAAO,KAAuB,IAMoC,CAMlE,QAAS,CACL,KAAK,KAAK,KAAO,KAAK,KACtB,KAAK,KAAK,KAAO,KAAK,KACtB,KAAK,eAAe,CACxB,CACJ,EAKaC,EAAN,KAAoB,CAApB,cAGH,KAAQ,QAAU,EAMlB,SAASF,EAAU,CACf,IAAMG,EAAU,IAAIJ,EAAKC,EAAO,IAAM,KAAK,SAAS,EAC/C,KAAK,QAING,EAAQ,KAAO,KAAK,OACpB,KAAK,OAAO,KAAOA,EACnB,KAAK,OAASA,IALd,KAAK,OAASA,EACd,KAAK,MAAQ,KAAK,QAOtB,KAAK,SACT,CAMA,QAAQH,EAAU,CACd,IAAMG,EAAU,IAAIJ,EAAKC,EAAO,IAAM,KAAK,SAAS,EAC/C,KAAK,QAING,EAAQ,KAAO,KAAK,MACpB,KAAK,MAAM,KAAOA,EAClB,KAAK,MAAQA,IALb,KAAK,OAASA,EACd,KAAK,MAAQ,KAAK,QAOtB,KAAK,SACT,CAMA,aAAiB,CACb,GAAI,CAAC,KAAK,MACN,MAAM,IAAI,MAAM,oBAAoB,EAGxC,IAAMH,EAAQ,KAAK,OAAO,MAC1B,YAAK,OAAS,KAAK,OAAO,KAC1B,KAAK,UACEA,CACX,CAMA,YAAgB,CACZ,GAAI,CAAC,KAAK,KACN,MAAM,IAAI,MAAM,oBAAoB,EAGxC,IAAMA,EAAQ,KAAK,MAAM,MACzB,YAAK,MAAQ,KAAK,MAAM,KACxB,KAAK,UACEA,CACX,CAOA,IAAI,QAAiB,CACjB,OAAO,KAAK,OAChB,CAKA,IAAI,OAA6B,CAC7B,OAAO,KAAK,MAChB,CAKA,IAAI,YAA4B,CAC5B,OAAO,KAAK,QAAQ,KACxB,CAKA,IAAI,MAA4B,CAC5B,OAAO,KAAK,KAChB,CAKA,IAAI,WAA2B,CAC3B,OAAO,KAAK,OAAO,KACvB,CACJ",
6
- "names": ["Index_exports", "__export", "LinkedList", "Node", "__toCommonJS", "Node", "value", "removeCallback", "LinkedList", "newNode"]
3
+ "sources": ["../../src/collections/Index.ts", "../../src/collections/LinkedList.ts", "../../src/collections/Pager.ts"],
4
+ "sourcesContent": ["export {LinkedList, Node} from \"./LinkedList\";\nexport { Pager, PageSelectedEvent } from \"./Pager\";\nexport { type DataLoader } from \"./DataLoader\";", "/**\r\n * A node in the @see LinkedList.\r\n */\r\nexport class Node<T> {\r\n /**\r\n * Next node unless last one.\r\n */\r\n public next: Node<T> | null = null;\r\n /**\r\n * Previous node unless first one.\r\n */\r\n public prev: Node<T> | null = null;\r\n\r\n /**\r\n * Constructor.\r\n * @param value Value contained in the node.\r\n */\r\n constructor(public value: T, private removeCallback: () => void) {}\r\n\r\n /**\r\n * Remove this node.\r\n * Will notify the list of the update to ensure correct element count.\r\n */\r\n remove() {\r\n this.prev.next = this.next;\r\n this.next.prev = this.prev;\r\n this.removeCallback();\r\n }\r\n}\r\n\r\n/**\r\n * A trivial linked list implementation.\r\n */\r\nexport class LinkedList<T> {\r\n private _first?: Node<T>;\r\n private _last?: Node<T>;\r\n private _length = 0;\r\n\r\n /**\r\n * Add a value to the beginning of the list.\r\n * @param value Value that should be contained in the node.\r\n */\r\n addFirst(value: T) {\r\n const newNode = new Node(value, () => this._length--);\r\n if (!this._first) {\r\n this._first = newNode;\r\n this._last = this._first;\r\n } else {\r\n newNode.next = this._first;\r\n this._first.prev = newNode;\r\n this._first = newNode;\r\n }\r\n\r\n this._length++;\r\n }\r\n\r\n /**\r\n * Add a value to the end of the list.\r\n * @param value Value that should be contained in a node.\r\n */\r\n addLast(value: T) {\r\n const newNode = new Node(value, () => this._length--);\r\n if (!this._first) {\r\n this._first = newNode;\r\n this._last = this._first;\r\n } else {\r\n newNode.prev = this._last;\r\n this._last.next = newNode;\r\n this._last = newNode;\r\n }\r\n\r\n this._length++;\r\n }\r\n\r\n /**\r\n * Remove a node from the beginning of the list.\r\n * @returns Value contained in the first node.\r\n */\r\n removeFirst(): T {\r\n if (!this.first) {\r\n throw new Error('The list is empty.');\r\n }\r\n\r\n const value = this._first.value;\r\n this._first = this._first.next;\r\n this._length--;\r\n return value;\r\n }\r\n\r\n /**\r\n * Remove a node from the end of the list.\r\n * @returns Value contained in the last node.\r\n */\r\n removeLast(): T {\r\n if (!this.last) {\r\n throw new Error('The list is empty.');\r\n }\r\n\r\n const value = this._last.value;\r\n this._last = this._last.prev;\r\n this._length--;\r\n return value;\r\n }\r\n\r\n /**\r\n * Number of nodes in the list.\r\n *\r\n * The count works as long as you do not manually remove nodes (by assigning next/prev to the neighbors).\r\n */\r\n get length(): number {\r\n return this._length;\r\n }\r\n\r\n /**\r\n * First ndoe.\r\n */\r\n get first(): Node<T> | undefined {\r\n return this._first;\r\n }\r\n\r\n /**\r\n * Contained value of the first node.\r\n */\r\n get firstValue(): T | undefined {\r\n return this._first?.value;\r\n }\r\n\r\n /**\r\n * Last node.\r\n */\r\n get last(): Node<T> | undefined {\r\n return this._last;\r\n }\r\n\r\n /**\r\n * Contained value of the last node.\r\n */\r\n get lastValue(): T | undefined {\r\n return this._last?.value;\r\n }\r\n}\r\n", "export class PageSelectedEvent extends Event {\r\n constructor(public page: number) {\r\n super('pageselected', {\r\n bubbles: true,\r\n composed: true,\r\n });\r\n }\r\n}\r\n\r\ndeclare global {\r\n interface HTMLElementEventMap {\r\n 'pageselected': PageSelectedEvent;\r\n }\r\n}\r\n\r\nexport class Pager {\r\n private container: HTMLElement;\r\n private totalCount: number;\r\n private pageSize: number;\r\n private currentPage: number = 1;\r\n\r\n constructor(container: HTMLElement, totalCount: number, pageSize: number) {\r\n this.container = container;\r\n this.totalCount = totalCount;\r\n this.pageSize = pageSize;\r\n\r\n this.render();\r\n }\r\n\r\n private render() {\r\n this.container.innerHTML = '';\r\n\r\n const pageCount = Math.max(1, Math.ceil(this.totalCount / this.pageSize));\r\n\r\n const createButton = (label: string, page: number, disabled: boolean = false) => {\r\n const btn = document.createElement('button');\r\n btn.textContent = label;\r\n btn.disabled = disabled;\r\n btn.addEventListener('click', () => this.selectPage(page));\r\n return btn;\r\n };\r\n\r\n this.container.appendChild(\r\n createButton('Previous', this.currentPage - 1, this.currentPage === 1)\r\n );\r\n\r\n for (let i = 1; i <= pageCount; i++) {\r\n const btn = createButton(i.toString(), i);\r\n if (i === this.currentPage) {\r\n btn.classList.add('selected');\r\n }\r\n this.container.appendChild(btn);\r\n }\r\n\r\n this.container.appendChild(\r\n createButton('Next', this.currentPage + 1, this.currentPage === pageCount)\r\n );\r\n }\r\n\r\n private selectPage(page: number) {\r\n const pageCount = Math.max(1, Math.ceil(this.totalCount / this.pageSize));\r\n if (page < 1 || page > pageCount || page === this.currentPage) return;\r\n\r\n this.currentPage = page;\r\n this.render();\r\n\r\n this.container.dispatchEvent(new PageSelectedEvent(this.currentPage));\r\n }\r\n\r\n public update(totalCount: number) {\r\n this.totalCount = totalCount;\r\n const pageCount = Math.max(1, Math.ceil(this.totalCount / this.pageSize));\r\n if (this.currentPage > pageCount) {\r\n this.currentPage = pageCount;\r\n }\r\n this.render();\r\n }\r\n\r\n public getCurrentPage(): number {\r\n return this.currentPage;\r\n }\r\n}\r\n"],
5
+ "mappings": "4ZAAA,IAAAA,EAAA,GAAAC,EAAAD,EAAA,gBAAAE,EAAA,SAAAC,EAAA,sBAAAC,EAAA,UAAAC,IAAA,eAAAC,EAAAN,GCGO,IAAMO,EAAN,KAAc,CAcjB,YAAmBC,EAAkBC,EAA4B,CAA9C,WAAAD,EAAkB,oBAAAC,EAVrC,KAAO,KAAuB,KAI9B,KAAO,KAAuB,IAMoC,CAMlE,QAAS,CACL,KAAK,KAAK,KAAO,KAAK,KACtB,KAAK,KAAK,KAAO,KAAK,KACtB,KAAK,eAAe,CACxB,CACJ,EAKaC,EAAN,KAAoB,CAApB,cAGH,KAAQ,QAAU,EAMlB,SAASF,EAAU,CACf,IAAMG,EAAU,IAAIJ,EAAKC,EAAO,IAAM,KAAK,SAAS,EAC/C,KAAK,QAING,EAAQ,KAAO,KAAK,OACpB,KAAK,OAAO,KAAOA,EACnB,KAAK,OAASA,IALd,KAAK,OAASA,EACd,KAAK,MAAQ,KAAK,QAOtB,KAAK,SACT,CAMA,QAAQH,EAAU,CACd,IAAMG,EAAU,IAAIJ,EAAKC,EAAO,IAAM,KAAK,SAAS,EAC/C,KAAK,QAING,EAAQ,KAAO,KAAK,MACpB,KAAK,MAAM,KAAOA,EAClB,KAAK,MAAQA,IALb,KAAK,OAASA,EACd,KAAK,MAAQ,KAAK,QAOtB,KAAK,SACT,CAMA,aAAiB,CACb,GAAI,CAAC,KAAK,MACN,MAAM,IAAI,MAAM,oBAAoB,EAGxC,IAAMH,EAAQ,KAAK,OAAO,MAC1B,YAAK,OAAS,KAAK,OAAO,KAC1B,KAAK,UACEA,CACX,CAMA,YAAgB,CACZ,GAAI,CAAC,KAAK,KACN,MAAM,IAAI,MAAM,oBAAoB,EAGxC,IAAMA,EAAQ,KAAK,MAAM,MACzB,YAAK,MAAQ,KAAK,MAAM,KACxB,KAAK,UACEA,CACX,CAOA,IAAI,QAAiB,CACjB,OAAO,KAAK,OAChB,CAKA,IAAI,OAA6B,CAC7B,OAAO,KAAK,MAChB,CAKA,IAAI,YAA4B,CAC5B,OAAO,KAAK,QAAQ,KACxB,CAKA,IAAI,MAA4B,CAC5B,OAAO,KAAK,KAChB,CAKA,IAAI,WAA2B,CAC3B,OAAO,KAAK,OAAO,KACvB,CACJ,EC5IO,IAAMI,EAAN,cAAgC,KAAM,CAC3C,YAAmBC,EAAc,CAC/B,MAAM,eAAgB,CACpB,QAAS,GACT,SAAU,EACZ,CAAC,EAJgB,UAAAA,CAKnB,CACF,EAQaC,EAAN,KAAY,CAMjB,YAAYC,EAAwBC,EAAoBC,EAAkB,CAF1E,KAAQ,YAAsB,EAG5B,KAAK,UAAYF,EACjB,KAAK,WAAaC,EAClB,KAAK,SAAWC,EAEhB,KAAK,OAAO,CACd,CAEQ,QAAS,CACf,KAAK,UAAU,UAAY,GAE3B,IAAMC,EAAY,KAAK,IAAI,EAAG,KAAK,KAAK,KAAK,WAAa,KAAK,QAAQ,CAAC,EAElEC,EAAe,CAACC,EAAeP,EAAcQ,EAAoB,KAAU,CAC/E,IAAMC,EAAM,SAAS,cAAc,QAAQ,EAC3C,OAAAA,EAAI,YAAcF,EAClBE,EAAI,SAAWD,EACfC,EAAI,iBAAiB,QAAS,IAAM,KAAK,WAAWT,CAAI,CAAC,EAClDS,CACT,EAEA,KAAK,UAAU,YACbH,EAAa,WAAY,KAAK,YAAc,EAAG,KAAK,cAAgB,CAAC,CACvE,EAEA,QAASI,EAAI,EAAGA,GAAKL,EAAWK,IAAK,CACnC,IAAMD,EAAMH,EAAaI,EAAE,SAAS,EAAGA,CAAC,EACpCA,IAAM,KAAK,aACbD,EAAI,UAAU,IAAI,UAAU,EAE9B,KAAK,UAAU,YAAYA,CAAG,CAChC,CAEA,KAAK,UAAU,YACbH,EAAa,OAAQ,KAAK,YAAc,EAAG,KAAK,cAAgBD,CAAS,CAC3E,CACF,CAEQ,WAAWL,EAAc,CAC/B,IAAMK,EAAY,KAAK,IAAI,EAAG,KAAK,KAAK,KAAK,WAAa,KAAK,QAAQ,CAAC,EACpEL,EAAO,GAAKA,EAAOK,GAAaL,IAAS,KAAK,cAElD,KAAK,YAAcA,EACnB,KAAK,OAAO,EAEZ,KAAK,UAAU,cAAc,IAAID,EAAkB,KAAK,WAAW,CAAC,EACtE,CAEO,OAAOI,EAAoB,CAChC,KAAK,WAAaA,EAClB,IAAME,EAAY,KAAK,IAAI,EAAG,KAAK,KAAK,KAAK,WAAa,KAAK,QAAQ,CAAC,EACpE,KAAK,YAAcA,IACrB,KAAK,YAAcA,GAErB,KAAK,OAAO,CACd,CAEO,gBAAyB,CAC9B,OAAO,KAAK,WACd,CACF",
6
+ "names": ["Index_exports", "__export", "LinkedList", "Node", "PageSelectedEvent", "Pager", "__toCommonJS", "Node", "value", "removeCallback", "LinkedList", "newNode", "PageSelectedEvent", "page", "Pager", "container", "totalCount", "pageSize", "pageCount", "createButton", "label", "disabled", "btn", "i"]
7
7
  }
@@ -1,2 +1,2 @@
1
- var s=class{constructor(e,t){this.value=e;this.removeCallback=t;this.next=null;this.prev=null}remove(){this.prev.next=this.next,this.next.prev=this.prev,this.removeCallback()}},i=class{constructor(){this._length=0}addFirst(e){let t=new s(e,()=>this._length--);this._first?(t.next=this._first,this._first.prev=t,this._first=t):(this._first=t,this._last=this._first),this._length++}addLast(e){let t=new s(e,()=>this._length--);this._first?(t.prev=this._last,this._last.next=t,this._last=t):(this._first=t,this._last=this._first),this._length++}removeFirst(){if(!this.first)throw new Error("The list is empty.");let e=this._first.value;return this._first=this._first.next,this._length--,e}removeLast(){if(!this.last)throw new Error("The list is empty.");let e=this._last.value;return this._last=this._last.prev,this._length--,e}get length(){return this._length}get first(){return this._first}get firstValue(){return this._first?.value}get last(){return this._last}get lastValue(){return this._last?.value}};export{i as LinkedList,s as Node};
1
+ var i=class{constructor(e,t){this.value=e;this.removeCallback=t;this.next=null;this.prev=null}remove(){this.prev.next=this.next,this.next.prev=this.prev,this.removeCallback()}},l=class{constructor(){this._length=0}addFirst(e){let t=new i(e,()=>this._length--);this._first?(t.next=this._first,this._first.prev=t,this._first=t):(this._first=t,this._last=this._first),this._length++}addLast(e){let t=new i(e,()=>this._length--);this._first?(t.prev=this._last,this._last.next=t,this._last=t):(this._first=t,this._last=this._first),this._length++}removeFirst(){if(!this.first)throw new Error("The list is empty.");let e=this._first.value;return this._first=this._first.next,this._length--,e}removeLast(){if(!this.last)throw new Error("The list is empty.");let e=this._last.value;return this._last=this._last.prev,this._length--,e}get length(){return this._length}get first(){return this._first}get firstValue(){return this._first?.value}get last(){return this._last}get lastValue(){return this._last?.value}};var a=class extends Event{constructor(t){super("pageselected",{bubbles:!0,composed:!0});this.page=t}},o=class{constructor(e,t,r){this.currentPage=1;this.container=e,this.totalCount=t,this.pageSize=r,this.render()}render(){this.container.innerHTML="";let e=Math.max(1,Math.ceil(this.totalCount/this.pageSize)),t=(r,s,u=!1)=>{let n=document.createElement("button");return n.textContent=r,n.disabled=u,n.addEventListener("click",()=>this.selectPage(s)),n};this.container.appendChild(t("Previous",this.currentPage-1,this.currentPage===1));for(let r=1;r<=e;r++){let s=t(r.toString(),r);r===this.currentPage&&s.classList.add("selected"),this.container.appendChild(s)}this.container.appendChild(t("Next",this.currentPage+1,this.currentPage===e))}selectPage(e){let t=Math.max(1,Math.ceil(this.totalCount/this.pageSize));e<1||e>t||e===this.currentPage||(this.currentPage=e,this.render(),this.container.dispatchEvent(new a(this.currentPage)))}update(e){this.totalCount=e;let t=Math.max(1,Math.ceil(this.totalCount/this.pageSize));this.currentPage>t&&(this.currentPage=t),this.render()}getCurrentPage(){return this.currentPage}};export{l as LinkedList,i as Node,a as PageSelectedEvent,o as Pager};
2
2
  //# sourceMappingURL=index.mjs.map
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
- "sources": ["../../src/collections/LinkedList.ts"],
4
- "sourcesContent": ["/**\r\n * A node in the @see LinkedList.\r\n */\r\nexport class Node<T> {\r\n /**\r\n * Next node unless last one.\r\n */\r\n public next: Node<T> | null = null;\r\n /**\r\n * Previous node unless first one.\r\n */\r\n public prev: Node<T> | null = null;\r\n\r\n /**\r\n * Constructor.\r\n * @param value Value contained in the node.\r\n */\r\n constructor(public value: T, private removeCallback: () => void) {}\r\n\r\n /**\r\n * Remove this node.\r\n * Will notify the list of the update to ensure correct element count.\r\n */\r\n remove() {\r\n this.prev.next = this.next;\r\n this.next.prev = this.prev;\r\n this.removeCallback();\r\n }\r\n}\r\n\r\n/**\r\n * A trivial linked list implementation.\r\n */\r\nexport class LinkedList<T> {\r\n private _first?: Node<T>;\r\n private _last?: Node<T>;\r\n private _length = 0;\r\n\r\n /**\r\n * Add a value to the beginning of the list.\r\n * @param value Value that should be contained in the node.\r\n */\r\n addFirst(value: T) {\r\n const newNode = new Node(value, () => this._length--);\r\n if (!this._first) {\r\n this._first = newNode;\r\n this._last = this._first;\r\n } else {\r\n newNode.next = this._first;\r\n this._first.prev = newNode;\r\n this._first = newNode;\r\n }\r\n\r\n this._length++;\r\n }\r\n\r\n /**\r\n * Add a value to the end of the list.\r\n * @param value Value that should be contained in a node.\r\n */\r\n addLast(value: T) {\r\n const newNode = new Node(value, () => this._length--);\r\n if (!this._first) {\r\n this._first = newNode;\r\n this._last = this._first;\r\n } else {\r\n newNode.prev = this._last;\r\n this._last.next = newNode;\r\n this._last = newNode;\r\n }\r\n\r\n this._length++;\r\n }\r\n\r\n /**\r\n * Remove a node from the beginning of the list.\r\n * @returns Value contained in the first node.\r\n */\r\n removeFirst(): T {\r\n if (!this.first) {\r\n throw new Error('The list is empty.');\r\n }\r\n\r\n const value = this._first.value;\r\n this._first = this._first.next;\r\n this._length--;\r\n return value;\r\n }\r\n\r\n /**\r\n * Remove a node from the end of the list.\r\n * @returns Value contained in the last node.\r\n */\r\n removeLast(): T {\r\n if (!this.last) {\r\n throw new Error('The list is empty.');\r\n }\r\n\r\n const value = this._last.value;\r\n this._last = this._last.prev;\r\n this._length--;\r\n return value;\r\n }\r\n\r\n /**\r\n * Number of nodes in the list.\r\n *\r\n * The count works as long as you do not manually remove nodes (by assigning next/prev to the neighbors).\r\n */\r\n get length(): number {\r\n return this._length;\r\n }\r\n\r\n /**\r\n * First ndoe.\r\n */\r\n get first(): Node<T> | undefined {\r\n return this._first;\r\n }\r\n\r\n /**\r\n * Contained value of the first node.\r\n */\r\n get firstValue(): T | undefined {\r\n return this._first?.value;\r\n }\r\n\r\n /**\r\n * Last node.\r\n */\r\n get last(): Node<T> | undefined {\r\n return this._last;\r\n }\r\n\r\n /**\r\n * Contained value of the last node.\r\n */\r\n get lastValue(): T | undefined {\r\n return this._last?.value;\r\n }\r\n}\r\n"],
5
- "mappings": "AAGO,IAAMA,EAAN,KAAc,CAcjB,YAAmBC,EAAkBC,EAA4B,CAA9C,WAAAD,EAAkB,oBAAAC,EAVrC,KAAO,KAAuB,KAI9B,KAAO,KAAuB,IAMoC,CAMlE,QAAS,CACL,KAAK,KAAK,KAAO,KAAK,KACtB,KAAK,KAAK,KAAO,KAAK,KACtB,KAAK,eAAe,CACxB,CACJ,EAKaC,EAAN,KAAoB,CAApB,cAGH,KAAQ,QAAU,EAMlB,SAASF,EAAU,CACf,IAAMG,EAAU,IAAIJ,EAAKC,EAAO,IAAM,KAAK,SAAS,EAC/C,KAAK,QAING,EAAQ,KAAO,KAAK,OACpB,KAAK,OAAO,KAAOA,EACnB,KAAK,OAASA,IALd,KAAK,OAASA,EACd,KAAK,MAAQ,KAAK,QAOtB,KAAK,SACT,CAMA,QAAQH,EAAU,CACd,IAAMG,EAAU,IAAIJ,EAAKC,EAAO,IAAM,KAAK,SAAS,EAC/C,KAAK,QAING,EAAQ,KAAO,KAAK,MACpB,KAAK,MAAM,KAAOA,EAClB,KAAK,MAAQA,IALb,KAAK,OAASA,EACd,KAAK,MAAQ,KAAK,QAOtB,KAAK,SACT,CAMA,aAAiB,CACb,GAAI,CAAC,KAAK,MACN,MAAM,IAAI,MAAM,oBAAoB,EAGxC,IAAMH,EAAQ,KAAK,OAAO,MAC1B,YAAK,OAAS,KAAK,OAAO,KAC1B,KAAK,UACEA,CACX,CAMA,YAAgB,CACZ,GAAI,CAAC,KAAK,KACN,MAAM,IAAI,MAAM,oBAAoB,EAGxC,IAAMA,EAAQ,KAAK,MAAM,MACzB,YAAK,MAAQ,KAAK,MAAM,KACxB,KAAK,UACEA,CACX,CAOA,IAAI,QAAiB,CACjB,OAAO,KAAK,OAChB,CAKA,IAAI,OAA6B,CAC7B,OAAO,KAAK,MAChB,CAKA,IAAI,YAA4B,CAC5B,OAAO,KAAK,QAAQ,KACxB,CAKA,IAAI,MAA4B,CAC5B,OAAO,KAAK,KAChB,CAKA,IAAI,WAA2B,CAC3B,OAAO,KAAK,OAAO,KACvB,CACJ",
6
- "names": ["Node", "value", "removeCallback", "LinkedList", "newNode"]
3
+ "sources": ["../../src/collections/LinkedList.ts", "../../src/collections/Pager.ts"],
4
+ "sourcesContent": ["/**\r\n * A node in the @see LinkedList.\r\n */\r\nexport class Node<T> {\r\n /**\r\n * Next node unless last one.\r\n */\r\n public next: Node<T> | null = null;\r\n /**\r\n * Previous node unless first one.\r\n */\r\n public prev: Node<T> | null = null;\r\n\r\n /**\r\n * Constructor.\r\n * @param value Value contained in the node.\r\n */\r\n constructor(public value: T, private removeCallback: () => void) {}\r\n\r\n /**\r\n * Remove this node.\r\n * Will notify the list of the update to ensure correct element count.\r\n */\r\n remove() {\r\n this.prev.next = this.next;\r\n this.next.prev = this.prev;\r\n this.removeCallback();\r\n }\r\n}\r\n\r\n/**\r\n * A trivial linked list implementation.\r\n */\r\nexport class LinkedList<T> {\r\n private _first?: Node<T>;\r\n private _last?: Node<T>;\r\n private _length = 0;\r\n\r\n /**\r\n * Add a value to the beginning of the list.\r\n * @param value Value that should be contained in the node.\r\n */\r\n addFirst(value: T) {\r\n const newNode = new Node(value, () => this._length--);\r\n if (!this._first) {\r\n this._first = newNode;\r\n this._last = this._first;\r\n } else {\r\n newNode.next = this._first;\r\n this._first.prev = newNode;\r\n this._first = newNode;\r\n }\r\n\r\n this._length++;\r\n }\r\n\r\n /**\r\n * Add a value to the end of the list.\r\n * @param value Value that should be contained in a node.\r\n */\r\n addLast(value: T) {\r\n const newNode = new Node(value, () => this._length--);\r\n if (!this._first) {\r\n this._first = newNode;\r\n this._last = this._first;\r\n } else {\r\n newNode.prev = this._last;\r\n this._last.next = newNode;\r\n this._last = newNode;\r\n }\r\n\r\n this._length++;\r\n }\r\n\r\n /**\r\n * Remove a node from the beginning of the list.\r\n * @returns Value contained in the first node.\r\n */\r\n removeFirst(): T {\r\n if (!this.first) {\r\n throw new Error('The list is empty.');\r\n }\r\n\r\n const value = this._first.value;\r\n this._first = this._first.next;\r\n this._length--;\r\n return value;\r\n }\r\n\r\n /**\r\n * Remove a node from the end of the list.\r\n * @returns Value contained in the last node.\r\n */\r\n removeLast(): T {\r\n if (!this.last) {\r\n throw new Error('The list is empty.');\r\n }\r\n\r\n const value = this._last.value;\r\n this._last = this._last.prev;\r\n this._length--;\r\n return value;\r\n }\r\n\r\n /**\r\n * Number of nodes in the list.\r\n *\r\n * The count works as long as you do not manually remove nodes (by assigning next/prev to the neighbors).\r\n */\r\n get length(): number {\r\n return this._length;\r\n }\r\n\r\n /**\r\n * First ndoe.\r\n */\r\n get first(): Node<T> | undefined {\r\n return this._first;\r\n }\r\n\r\n /**\r\n * Contained value of the first node.\r\n */\r\n get firstValue(): T | undefined {\r\n return this._first?.value;\r\n }\r\n\r\n /**\r\n * Last node.\r\n */\r\n get last(): Node<T> | undefined {\r\n return this._last;\r\n }\r\n\r\n /**\r\n * Contained value of the last node.\r\n */\r\n get lastValue(): T | undefined {\r\n return this._last?.value;\r\n }\r\n}\r\n", "export class PageSelectedEvent extends Event {\r\n constructor(public page: number) {\r\n super('pageselected', {\r\n bubbles: true,\r\n composed: true,\r\n });\r\n }\r\n}\r\n\r\ndeclare global {\r\n interface HTMLElementEventMap {\r\n 'pageselected': PageSelectedEvent;\r\n }\r\n}\r\n\r\nexport class Pager {\r\n private container: HTMLElement;\r\n private totalCount: number;\r\n private pageSize: number;\r\n private currentPage: number = 1;\r\n\r\n constructor(container: HTMLElement, totalCount: number, pageSize: number) {\r\n this.container = container;\r\n this.totalCount = totalCount;\r\n this.pageSize = pageSize;\r\n\r\n this.render();\r\n }\r\n\r\n private render() {\r\n this.container.innerHTML = '';\r\n\r\n const pageCount = Math.max(1, Math.ceil(this.totalCount / this.pageSize));\r\n\r\n const createButton = (label: string, page: number, disabled: boolean = false) => {\r\n const btn = document.createElement('button');\r\n btn.textContent = label;\r\n btn.disabled = disabled;\r\n btn.addEventListener('click', () => this.selectPage(page));\r\n return btn;\r\n };\r\n\r\n this.container.appendChild(\r\n createButton('Previous', this.currentPage - 1, this.currentPage === 1)\r\n );\r\n\r\n for (let i = 1; i <= pageCount; i++) {\r\n const btn = createButton(i.toString(), i);\r\n if (i === this.currentPage) {\r\n btn.classList.add('selected');\r\n }\r\n this.container.appendChild(btn);\r\n }\r\n\r\n this.container.appendChild(\r\n createButton('Next', this.currentPage + 1, this.currentPage === pageCount)\r\n );\r\n }\r\n\r\n private selectPage(page: number) {\r\n const pageCount = Math.max(1, Math.ceil(this.totalCount / this.pageSize));\r\n if (page < 1 || page > pageCount || page === this.currentPage) return;\r\n\r\n this.currentPage = page;\r\n this.render();\r\n\r\n this.container.dispatchEvent(new PageSelectedEvent(this.currentPage));\r\n }\r\n\r\n public update(totalCount: number) {\r\n this.totalCount = totalCount;\r\n const pageCount = Math.max(1, Math.ceil(this.totalCount / this.pageSize));\r\n if (this.currentPage > pageCount) {\r\n this.currentPage = pageCount;\r\n }\r\n this.render();\r\n }\r\n\r\n public getCurrentPage(): number {\r\n return this.currentPage;\r\n }\r\n}\r\n"],
5
+ "mappings": "AAGO,IAAMA,EAAN,KAAc,CAcjB,YAAmBC,EAAkBC,EAA4B,CAA9C,WAAAD,EAAkB,oBAAAC,EAVrC,KAAO,KAAuB,KAI9B,KAAO,KAAuB,IAMoC,CAMlE,QAAS,CACL,KAAK,KAAK,KAAO,KAAK,KACtB,KAAK,KAAK,KAAO,KAAK,KACtB,KAAK,eAAe,CACxB,CACJ,EAKaC,EAAN,KAAoB,CAApB,cAGH,KAAQ,QAAU,EAMlB,SAASF,EAAU,CACf,IAAMG,EAAU,IAAIJ,EAAKC,EAAO,IAAM,KAAK,SAAS,EAC/C,KAAK,QAING,EAAQ,KAAO,KAAK,OACpB,KAAK,OAAO,KAAOA,EACnB,KAAK,OAASA,IALd,KAAK,OAASA,EACd,KAAK,MAAQ,KAAK,QAOtB,KAAK,SACT,CAMA,QAAQH,EAAU,CACd,IAAMG,EAAU,IAAIJ,EAAKC,EAAO,IAAM,KAAK,SAAS,EAC/C,KAAK,QAING,EAAQ,KAAO,KAAK,MACpB,KAAK,MAAM,KAAOA,EAClB,KAAK,MAAQA,IALb,KAAK,OAASA,EACd,KAAK,MAAQ,KAAK,QAOtB,KAAK,SACT,CAMA,aAAiB,CACb,GAAI,CAAC,KAAK,MACN,MAAM,IAAI,MAAM,oBAAoB,EAGxC,IAAMH,EAAQ,KAAK,OAAO,MAC1B,YAAK,OAAS,KAAK,OAAO,KAC1B,KAAK,UACEA,CACX,CAMA,YAAgB,CACZ,GAAI,CAAC,KAAK,KACN,MAAM,IAAI,MAAM,oBAAoB,EAGxC,IAAMA,EAAQ,KAAK,MAAM,MACzB,YAAK,MAAQ,KAAK,MAAM,KACxB,KAAK,UACEA,CACX,CAOA,IAAI,QAAiB,CACjB,OAAO,KAAK,OAChB,CAKA,IAAI,OAA6B,CAC7B,OAAO,KAAK,MAChB,CAKA,IAAI,YAA4B,CAC5B,OAAO,KAAK,QAAQ,KACxB,CAKA,IAAI,MAA4B,CAC5B,OAAO,KAAK,KAChB,CAKA,IAAI,WAA2B,CAC3B,OAAO,KAAK,OAAO,KACvB,CACJ,EC5IO,IAAMI,EAAN,cAAgC,KAAM,CAC3C,YAAmBC,EAAc,CAC/B,MAAM,eAAgB,CACpB,QAAS,GACT,SAAU,EACZ,CAAC,EAJgB,UAAAA,CAKnB,CACF,EAQaC,EAAN,KAAY,CAMjB,YAAYC,EAAwBC,EAAoBC,EAAkB,CAF1E,KAAQ,YAAsB,EAG5B,KAAK,UAAYF,EACjB,KAAK,WAAaC,EAClB,KAAK,SAAWC,EAEhB,KAAK,OAAO,CACd,CAEQ,QAAS,CACf,KAAK,UAAU,UAAY,GAE3B,IAAMC,EAAY,KAAK,IAAI,EAAG,KAAK,KAAK,KAAK,WAAa,KAAK,QAAQ,CAAC,EAElEC,EAAe,CAACC,EAAeP,EAAcQ,EAAoB,KAAU,CAC/E,IAAMC,EAAM,SAAS,cAAc,QAAQ,EAC3C,OAAAA,EAAI,YAAcF,EAClBE,EAAI,SAAWD,EACfC,EAAI,iBAAiB,QAAS,IAAM,KAAK,WAAWT,CAAI,CAAC,EAClDS,CACT,EAEA,KAAK,UAAU,YACbH,EAAa,WAAY,KAAK,YAAc,EAAG,KAAK,cAAgB,CAAC,CACvE,EAEA,QAASI,EAAI,EAAGA,GAAKL,EAAWK,IAAK,CACnC,IAAMD,EAAMH,EAAaI,EAAE,SAAS,EAAGA,CAAC,EACpCA,IAAM,KAAK,aACbD,EAAI,UAAU,IAAI,UAAU,EAE9B,KAAK,UAAU,YAAYA,CAAG,CAChC,CAEA,KAAK,UAAU,YACbH,EAAa,OAAQ,KAAK,YAAc,EAAG,KAAK,cAAgBD,CAAS,CAC3E,CACF,CAEQ,WAAWL,EAAc,CAC/B,IAAMK,EAAY,KAAK,IAAI,EAAG,KAAK,KAAK,KAAK,WAAa,KAAK,QAAQ,CAAC,EACpEL,EAAO,GAAKA,EAAOK,GAAaL,IAAS,KAAK,cAElD,KAAK,YAAcA,EACnB,KAAK,OAAO,EAEZ,KAAK,UAAU,cAAc,IAAID,EAAkB,KAAK,WAAW,CAAC,EACtE,CAEO,OAAOI,EAAoB,CAChC,KAAK,WAAaA,EAClB,IAAME,EAAY,KAAK,IAAI,EAAG,KAAK,KAAK,KAAK,WAAa,KAAK,QAAQ,CAAC,EACpE,KAAK,YAAcA,IACrB,KAAK,YAAcA,GAErB,KAAK,OAAO,CACd,CAEO,gBAAyB,CAC9B,OAAO,KAAK,WACd,CACF",
6
+ "names": ["Node", "value", "removeCallback", "LinkedList", "newNode", "PageSelectedEvent", "page", "Pager", "container", "totalCount", "pageSize", "pageCount", "createButton", "label", "disabled", "btn", "i"]
7
7
  }
package/dist/index.d.ts CHANGED
@@ -14,5 +14,3 @@ export * from "./http/http";
14
14
  export * from "./http/ServerSentEvents";
15
15
  export * from './pipes';
16
16
  export * from './tools';
17
- export * from './collections/Pager';
18
- export * from './DataLoader';
package/dist/index.js CHANGED
@@ -1,5 +1,5 @@
1
- var Ye=Object.create;var M=Object.defineProperty;var Qe=Object.getOwnPropertyDescriptor;var sn=Object.getOwnPropertyNames;var an=Object.getPrototypeOf,cn=Object.prototype.hasOwnProperty;var et=(n,t)=>(t=Symbol[n])?t:Symbol.for("Symbol."+n),q=n=>{throw TypeError(n)};var ln=(n,t,e)=>t in n?M(n,t,{enumerable:!0,configurable:!0,writable:!0,value:e}):n[t]=e;var Xe=(n,t)=>M(n,"name",{value:t,configurable:!0});var tt=n=>t=>{var e=n[t];if(e)return e();throw new Error("Module not found in bundle: "+t)};var A=(n,t)=>()=>(t||n((t={exports:{}}).exports,t),t.exports),un=(n,t)=>{for(var e in t)M(n,e,{get:t[e],enumerable:!0})},nt=(n,t,e,r)=>{if(t&&typeof t=="object"||typeof t=="function")for(let o of sn(t))!cn.call(n,o)&&o!==e&&M(n,o,{get:()=>t[o],enumerable:!(r=Qe(t,o))||r.enumerable});return n};var $=(n,t,e)=>(e=n!=null?Ye(an(n)):{},nt(t||!n||!n.__esModule?M(e,"default",{value:n,enumerable:!0}):e,n)),pn=n=>nt(M({},"__esModule",{value:!0}),n);var X=n=>[,,,Ye(n?.[et("metadata")]??null)],rt=["class","method","getter","setter","accessor","field","value","get","set"],V=n=>n!==void 0&&typeof n!="function"?q("Function expected"):n,dn=(n,t,e,r,o)=>({kind:rt[n],name:t,metadata:r,addInitializer:s=>e._?q("Already initialized"):o.push(V(s||null))}),mn=(n,t)=>ln(t,et("metadata"),n[3]),K=(n,t,e,r)=>{for(var o=0,s=n[t>>1],i=s&&s.length;o<i;o++)t&1?s[o].call(e):r=s[o].call(e,r);return r},Z=(n,t,e,r,o,s)=>{var i,a,c,l,p,u=t&7,d=!!(t&8),m=!!(t&16),f=u>3?n.length+1:u?d?1:2:0,x=rt[u+5],g=u>3&&(n[f-1]=[]),b=n[f]||(n[f]=[]),h=u&&(!m&&!d&&(o=o.prototype),u<5&&(u>3||!m)&&Qe(u<4?o:{get[e](){return Ke(this,s)},set[e](y){return Ze(this,s,y)}},e));u?m&&u<4&&Xe(s,(u>2?"set ":u>1?"get ":"")+e):Xe(o,e);for(var T=r.length-1;T>=0;T--)l=dn(u,e,c={},n[3],b),u&&(l.static=d,l.private=m,p=l.access={has:m?y=>fn(o,y):y=>e in y},u^3&&(p.get=m?y=>(u^1?Ke:gn)(y,o,u^4?s:h.get):y=>y[e]),u>2&&(p.set=m?(y,L)=>Ze(y,o,L,u^4?s:h.set):(y,L)=>y[e]=L)),a=(0,r[T])(u?u<4?m?s:h[x]:u>4?void 0:{get:h.get,set:h.set}:o,l),c._=1,u^4||a===void 0?V(a)&&(u>4?g.unshift(a):u?m?s=a:h[x]=a:o=a):typeof a!="object"||a===null?q("Object expected"):(V(i=a.get)&&(h.get=i),V(i=a.set)&&(h.set=i),V(i=a.init)&&g.unshift(i));return u||mn(n,o),h&&M(o,e,h),m?u^4?s:h:o};var be=(n,t,e)=>t.has(n)||q("Cannot "+e),fn=(n,t)=>Object(t)!==t?q('Cannot use the "in" operator on this value'):n.has(t),Ke=(n,t,e)=>(be(n,t,"read from private field"),e?e.call(n):t.get(n));var Ze=(n,t,e,r)=>(be(n,t,"write to private field"),r?r.call(n,e):t.set(n,e),e),gn=(n,t,e)=>(be(n,t,"access private method"),e);var it=A((Sr,xn)=>{xn.exports={greeting:"Hello, {name}!",items:"{count, plural, one {# item} other {# items}}"}});var at=A((Mr,Tn)=>{Tn.exports={today:"today",yesterday:"yesterday",daysAgo:"{count, plural, one {# day ago} other {# days ago}}",pieces:"{count, plural, =0 {none} one {one} other {# pcs}}"}});var ct=A((kr,bn)=>{bn.exports={required:"This field is required.",range:"Number must be between {min} and {max}, was {actual}.",digits:"Please enter only digits."}});var lt=A((Pr,wn)=>{wn.exports={greeting:"Hej, {name}!",items:"{count, plural, one {# sak} other {# saker}}"}});var ut=A((Lr,Cn)=>{Cn.exports={today:"idag",yesterday:"ig\xE5r",daysAgo:"{count, plural, one {# dag sedan} other {# dagar sedan}}",pieces:"{count, plural, =0 {inga} one {en} other {# st}}"}});var pt=A((Ar,Rn)=>{Rn.exports={required:"Detta f\xE4lt \xE4r obligatoriskt.",range:"Talet m\xE5ste vara mellan {min} och {max}, var {actual}.",digits:"Ange endast siffror."}});var Er={};un(Er,{Blueprint:()=>ie,BooleanConverter:()=>ee,BoundNode:()=>se,ContainerService:()=>lr,DateConverter:()=>Me,DigitsValidation:()=>Fe,FormValidator:()=>Ce,GuardResult:()=>le,HttpError:()=>We,Inject:()=>cr,LinkedList:()=>Y,NavigateRouteEvent:()=>C,Node:()=>F,NumberConverter:()=>Se,PageSelectedEvent:()=>Te,Pager:()=>Je,RangeValidation:()=>$e,RegisterValidator:()=>te,RelaxError:()=>R,RequiredValidation:()=>Ae,RouteError:()=>k,RouteGuardError:()=>P,RouteLink:()=>B,RouteTarget:()=>O,SSEClient:()=>Ge,SSEDataEvent:()=>xe,ServiceCollection:()=>he,ServiceContainer:()=>ye,SortChangeEvent:()=>z,TableRenderer:()=>ae,TableSorter:()=>ce,applyPipes:()=>He,capitalizePipe:()=>Nt,clearPendingNavigations:()=>Xt,compileTemplate:()=>Ut,configure:()=>mr,container:()=>tn,createBluePrint:()=>tr,createConverterFromDataType:()=>ft,createConverterFromInputType:()=>gt,createPipeRegistry:()=>Bt,currencyPipe:()=>Mt,datePipe:()=>kt,daysAgoPipe:()=>Pt,defaultPipe:()=>It,defaultPipes:()=>N,defineRoutes:()=>Zt,del:()=>yr,findRouteByName:()=>Ue,findRouteByUrl:()=>ze,firstPipe:()=>$t,generateSequentialId:()=>rn,get:()=>fr,getDataConverter:()=>mt,getParentComponent:()=>ur,getValidator:()=>An,html:()=>Ot,internalRoutes:()=>_,joinPipe:()=>At,keysPipe:()=>Ht,lastPipe:()=>Ft,lowercasePipe:()=>Rt,mapFormToClass:()=>Mn,matchRoute:()=>me,navigate:()=>G,onError:()=>hn,piecesPipe:()=>Lt,post:()=>gr,printRoutes:()=>fe,put:()=>hr,readData:()=>kn,registerRouteTarget:()=>pe,reportError:()=>v,request:()=>J,resolveValue:()=>vr,serviceCollection:()=>ve,setFetch:()=>dr,setFormData:()=>$n,shortenPipe:()=>St,startRouting:()=>Yt,ternaryPipe:()=>Dt,trimPipe:()=>Ct,unregisterRouteTarget:()=>de,uppercasePipe:()=>wt});module.exports=pn(Er);var R=class extends Error{constructor(e,r){super(e);this.context=r}},we=null;function hn(n){we=n}function v(n,t){let e=new R(n,t);if(we){let r=!1;if(we(e,{suppress(){r=!0}}),r)return null}return e}var F=class{constructor(t,e){this.value=t;this.removeCallback=e;this.next=null;this.prev=null}remove(){this.prev.next=this.next,this.next.prev=this.prev,this.removeCallback()}},Y=class{constructor(){this._length=0}addFirst(t){let e=new F(t,()=>this._length--);this._first?(e.next=this._first,this._first.prev=e,this._first=e):(this._first=e,this._last=this._first),this._length++}addLast(t){let e=new F(t,()=>this._length--);this._first?(e.prev=this._last,this._last.next=e,this._last=e):(this._first=e,this._last=this._first),this._length++}removeFirst(){if(!this.first)throw new Error("The list is empty.");let t=this._first.value;return this._first=this._first.next,this._length--,t}removeLast(){if(!this.last)throw new Error("The list is empty.");let t=this._last.value;return this._last=this._last.prev,this._length--,t}get length(){return this._length}get first(){return this._first}get firstValue(){return this._first?.value}get last(){return this._last}get lastValue(){return this._last?.value}};function yn(n){let t=n.getAttribute("id");if(t){let e=n.closest("form");if(e){let r=e.querySelector(`label[for="${t}"]`);if(r)return r.textContent?.trim()||null}}return null}var Ce=class{constructor(t,e){this.form=t;this.options=e;if(!this.form)throw new Error("Form must be specified.");this.form.addEventListener("submit",r=>{(e?.preventDefault||this.options?.submitCallback!=null)&&r.preventDefault(),this.options?.customChecks&&this.options.customChecks(t),this.validateForm()?this.options?.submitCallback?.apply(this):e?.preventDefaultOnFailed!==!1&&r.preventDefault()}),e?.autoValidate&&t.addEventListener("input",()=>{this.validateForm()})}validateForm(){let t=Array.from(this.form.querySelectorAll("input,textarea,select")),e=!0;if(this.options?.useSummary!==!0)return this.form.checkValidity()?!0:(this.form.reportValidity(),this.focusFirstErrorElement(),!1);let r=[];return t.forEach(o=>{if(!o.checkValidity()){e=!1;let s=yn.call(this,o)||o.name||"Unnamed Field";r.push(`${s}: ${o.validationMessage}`)}}),e?this.clearErrorSummary():(this.displayErrorSummary(r),this.focusFirstErrorElement()),e}displayErrorSummary(t){this.clearErrorSummary(),this.errorSummary||this.createErrorSummary();let e=this.errorSummary.querySelector("ul");t.forEach(r=>{let o=document.createElement("li");o.textContent=r,e.appendChild(o)})}createErrorSummary(){let t=document.createElement("div");t.className="error-summary",t.style.color="red",t.setAttribute("role","alert"),t.setAttribute("aria-live","assertive"),t.setAttribute("aria-atomic","true"),this.errorSummary=t;let e=document.createElement("ul");this.errorSummary.appendChild(e),this.form.prepend(t)}addErrorToSummary(t,e){this.errorSummary||this.createErrorSummary();let r=this.errorSummary.querySelector("ul"),o=document.createElement("li");o.textContent=`${t}: ${e}`,r.appendChild(o)}clearErrorSummary(){this.errorSummary&&(this.errorSummary.querySelector("ul").innerHTML="")}focusFirstErrorElement(){let t=this.form.querySelector(":invalid");t instanceof HTMLElement&&document.activeElement!==t&&t.focus()}static FindForm(t){if(t.parentElement?.tagName=="FORM")return t.parentElement;for(let e=0;e<t.children.length;e++){let r=t.children[e];if(r.tagName=="FORM")return r}throw new Error("Parent or a direct child must be a FORM for class "+t.constructor.name)}};var Re=new Map;function vn(n){return Re.has(n)||Re.set(n,new Intl.PluralRules(n)),Re.get(n)}function ot(n){return n.replace(/[.*+?^${}()|[\]\\]/g,"\\$&")}function En(n,t,e="en"){return n.replace(/\{(\w+)(?:, (plural|select),((?:[^{}]*\{[^{}]*\})+))?\}/g,(r,o,s,i)=>{let a=t[o];if(s==="plural"){let c=new RegExp(`=${ot(String(a))}\\s*\\{([^{}]*)\\}`).exec(i);if(c)return c[1].replace(`{${o}}`,String(a)).replace("#",String(a));let p=vn(e).select(a),u=new RegExp(`${p}\\s*\\{([^{}]*)\\}`).exec(i)||new RegExp("other\\s*\\{([^{}]*)\\}").exec(i);return u?u[1].replace(`{${o}}`,String(a)).replace("#",String(a)):String(a)}if(s==="select"){let c=ot(String(a)),l=new RegExp(`\\b${c}\\s*\\{([^{}]*)\\}`).exec(i)||new RegExp("\\bother\\s*\\{([^{}]*)\\}").exec(i);return l?l[1]:String(a)}return a!==void 0?String(a):`{${o}}`})}var st=En;var Hr=tt({"./locales/en/r-common.json":()=>Promise.resolve().then(()=>$(it())),"./locales/en/r-pipes.json":()=>Promise.resolve().then(()=>$(at())),"./locales/en/r-validation.json":()=>Promise.resolve().then(()=>$(ct())),"./locales/sv/r-common.json":()=>Promise.resolve().then(()=>$(lt())),"./locales/sv/r-pipes.json":()=>Promise.resolve().then(()=>$(ut())),"./locales/sv/r-validation.json":()=>Promise.resolve().then(()=>$(pt()))});var Nn="en",Ne=Nn;var Sn={},dt=null;function w(n,t){let[e,r]=n.includes(":")?n.split(":"):["r-common",n],o=Sn[e]?.[r];if(!o)return dt&&dt(r,e,Ne),n;try{return st(o,t,Ne)}catch{return n}}function U(){return Ne}function Mn(n,t,e={}){let r=n.querySelectorAll("input, select, textarea");if(r.forEach(o=>{if(!o.hasAttribute("name")||Q(o,"disabled"))return;let s=o.getAttribute("name");if(!(s in t)){if(e.throwOnMissingProperty)throw new Error(`Form field "${s}" has no matching property in class instance`);return}let i=Ln(o);i!==ht&&(t[s]=i)}),e.throwOnMissingField){let o=new Set;r.forEach(s=>{s.hasAttribute("name")&&o.add(s.getAttribute("name"))});for(let s in t)if(typeof t[s]!="function"&&Object.prototype.hasOwnProperty.call(t,s)&&!o.has(s))throw new Error(`Class property "${s}" has no matching form field`)}return t}function mt(n){let t=n.getAttribute("data-type");return t?ft(t):n instanceof HTMLInputElement?gt(n.type):"checked"in n&&typeof n.checked=="boolean"?ee:e=>e}function kn(n){let t={},e=new FormData(n),r=new Set;e.forEach((o,s)=>{if(r.has(s))return;r.add(s);let i=e.getAll(s),a=n.elements.namedItem(s),c=a?mt(a):l=>l;if(i.length===1){let l=i[0];t[s]=typeof l=="string"?c(l):l}else t[s]=i.map(l=>typeof l=="string"?c(l):l)});for(let o=0;o<n.elements.length;o++){let s=n.elements[o];s.type==="checkbox"&&s.name&&!r.has(s.name)&&(r.add(s.name),t[s.name]=!1)}return t}function ee(n){if(!n||n=="")return;let t=n.toLowerCase();if(t==="true"||t==="on"||Number(n)>0)return!0;if(t==="false"||t==="off"||Number(n)<=0)return!1;throw new Error("Could not convert value '"+n+"' to boolean.")}function Se(n){if(!n||n=="")return;let t=Number(n);if(!isNaN(t))return t;throw new Error("Could not convert value '"+n+"' to number.")}function Pn(n){return new Intl.DateTimeFormat(n).formatToParts(new Date(2024,0,15)).filter(e=>e.type==="day"||e.type==="month"||e.type==="year").map(e=>e.type)}function Me(n){if(!n||n==="")return;if(/^\d{4}-\d{2}-\d{2}(T|$)/.test(n)){let r=new Date(n);if(!isNaN(r.getTime()))return r}let t=n.split(/[\/.\-\s]/);if(t.length>=3&&t.every(r=>/^\d+$/.test(r))){let r=U(),o=Pn(r),s={};if(o.forEach((i,a)=>{s[i]=parseInt(t[a],10)}),s.year!==void 0&&s.month!==void 0&&s.day!==void 0){s.year<100&&(s.year+=2e3);let i=new Date(s.year,s.month-1,s.day);if(!isNaN(i.getTime()))return i}}let e=new Date(n);if(isNaN(e.getTime()))throw new Error("Invalid date format");return e}function ft(n){switch(n){case"boolean":return ee;case"number":return Se;case"Date":return Me;case"string":return t=>!t||t==""?void 0:t;default:throw new Error(`Unknown data-type "${n}".`)}}function gt(n){switch(n){case"checkbox":return ee;case"number":return Se;case"date":case"datetime-local":return Me;case"month":return t=>{let[e,r]=t.split("-").map(Number);return new Date(e,r-1)};case"week":return t=>{let[e,r]=t.split("-W").map(Number);return{year:e,week:r}};case"time":return t=>{let[e,r,o=0]=t.split(":").map(Number);return{hours:e,minutes:r,seconds:o}};default:return t=>!t||t==""?void 0:t}}function Q(n,t){let e=n;if(t in e&&typeof e[t]=="boolean")return e[t];let r=n.getAttribute(t);return r===null?!1:r===""||r.toLowerCase()==="true"||r.toLowerCase()===t}var ht=Symbol("skip");function Ln(n){let t=n,e=t.type||n.getAttribute("type")||"";if(e==="checkbox")return Q(n,"checked");if(e==="radio")return Q(n,"checked")?t.value:ht;if(e==="number")return t.value?Number(t.value):null;if(e==="date")return t.value?new Date(t.value):null;if("selectedOptions"in t&&Q(n,"multiple"))return Array.from(t.selectedOptions).map(r=>r.value);if("value"in t)return t.value}var xt=new Map;function te(n,t=[]){return function(e){xt.set(n,{validator:e,validInputTypes:t})}}function An(n){return xt.get(n)}var yt,ke;yt=[te("required")];var H=class H{static create(t){return t==="required"?new H:null}validate(t,e){t.trim()===""&&e.addError(this.getMessage())}getMessage(){return w("r-validation:required")}};ke=X(null),H=Z(ke,0,"RequiredValidation",yt,H),K(ke,1,H);var Ae=H,vt,Pe;vt=[te("range",["number"])];var I=class I{constructor(t,e){this.min=void 0;this.max=void 0;this.min=t,this.max=e}static create(t){let e=t.match(/^range\((-?\d+(?:\.\d+)?)-(-?\d+(?:\.\d+)?)\)$/);if(e){let[,r,o]=e;return new I(parseFloat(r),parseFloat(o))}return null}validate(t,e){if(t.trim()==="")return;let r=parseFloat(t);!isNaN(r)&&r>=this.min&&r<=this.max||e.addError(this.getMessage(t))}getMessage(t){return w("r-validation:range",{min:this.min,max:this.max,actual:t})}};Pe=X(null),I=Z(Pe,0,"RangeValidation",vt,I),K(Pe,1,I);var $e=I,Et,Le;Et=[te("digits",["number"])];var D=class D{static create(t){return t==="digits"?new D:null}validate(t,e){/^\d+$/.test(t)||e.addError(this.getMessage())}getMessage(){return w("r-validation:digits")}};Le=X(null),D=Z(Le,0,"DigitsValidation",Et,D),K(Le,1,D);var Fe=D;function $n(n,t){n.querySelectorAll("[name]").forEach(r=>{let o=r.getAttribute("name");if(!o)return;if(o.endsWith("[]")){let i=o.slice(0,-2),a=Tt(t,i);if(Array.isArray(a)){let c=r,l=c.type||r.getAttribute("type")||"";if(l==="checkbox"||l==="radio")c.checked=a.includes(c.value);else if("options"in c&&bt(r,"multiple"))a.forEach(p=>{let u=Array.from(c.options).find(d=>d.value===String(p));u&&(u.selected=!0)});else if("value"in c){let p=n.querySelectorAll(`[name="${o}"]`),u=Array.from(p).indexOf(r);u>=0&&u<a.length&&(c.value=String(a[u]))}}return}let s=Tt(t,o);s!=null&&Fn(r,s)})}function Tt(n,t){let e=[],r="",o=!1;for(let s=0;s<t.length;s++){let i=t[s];i==="["&&!o?(r&&(e.push(r),r=""),o=!0,r+=i):i==="]"&&o?(r+=i,e.push(r),r="",o=!1):i==="."&&!o?r&&(e.push(r),r=""):r+=i}return r&&e.push(r),e.reduce((s,i)=>{if(!(!s||typeof s!="object")){if(i.startsWith("[")&&i.endsWith("]")){let a=i.slice(1,-1);return s[a]}return s[i]}},n)}function Fn(n,t){let e=n,r=e.type||n.getAttribute("type")||"";if(r==="checkbox")e.checked=!!t;else if(r==="radio")e.checked=e.value===String(t);else if(r==="date"&&t instanceof Date)e.value=t.toISOString().split("T")[0];else if(r==="datetime-local"&&t instanceof Date){let o=s=>String(s).padStart(2,"0");e.value=`${t.getFullYear()}-${o(t.getMonth()+1)}-${o(t.getDate())}T${o(t.getHours())}:${o(t.getMinutes())}`}else if("options"in e&&bt(n,"multiple")&&Array.isArray(t)){let o=Array.from(e.options),s=t.map(String);o.forEach(i=>{i.selected=s.includes(i.value)})}else"value"in e&&(e.value=String(t))}function bt(n,t){let e=n;if(t in e&&typeof e[t]=="boolean")return e[t];let r=n.getAttribute(t);return r===null?!1:r===""||r.toLowerCase()==="true"||r.toLowerCase()===t}function wt(n){return String(n).toUpperCase()}function Ct(n){return String(n).trimEnd().trimStart()}function Rt(n){return String(n).toLowerCase()}function Nt(n){let t=String(n);return t.charAt(0).toUpperCase()+t.slice(1)}function St(n,t){let e=String(n),r=parseInt(t,10);return e.length>r?e.substring(0,r-3)+"...":e}function Mt(n,t="USD"){let e=U();return new Intl.NumberFormat(e,{style:"currency",currency:t}).format(n)}function kt(n,t){let e=new Date(n),r=U();return t==="short"?e.toLocaleDateString(r):t==="long"?e.toLocaleDateString(r,{weekday:"long",year:"numeric",month:"long",day:"numeric"}):e.toISOString()}function Pt(n){if(!n)return"n/a";let t=new Date(n),e=new Date;t.setHours(0,0,0,0),e.setHours(0,0,0,0);let r=e.getTime()-t.getTime(),o=Math.round(r/(1e3*60*60*24));return o===0?w("r-pipes:today"):o===1?w("r-pipes:yesterday"):w("r-pipes:daysAgo",{count:o})}function Lt(n){if(n==null)return"n/a";let t=Number(n);return w("r-pipes:pieces",{count:t})}function At(n,t=","){return Array.isArray(n)?n.join(t):n}function $t(n){return!Array.isArray(n)||n.length===0?"":n[0]}function Ft(n){return!Array.isArray(n)||n.length===0?"":n[n.length-1]}function Ht(n){return typeof n!="object"||n===null?[]:Object.keys(n)}function It(n,t){return n||t}function Dt(n,t,e){return n?t:e}function Bt(){let n=new Map;return n.set("uppercase",wt),n.set("lowercase",Rt),n.set("capitalize",Nt),n.set("trim",Ct),n.set("shorten",St),n.set("currency",Mt),n.set("date",kt),n.set("daysAgo",Pt),n.set("pieces",Lt),n.set("join",At),n.set("first",$t),n.set("last",Ft),n.set("keys",Ht),n.set("default",It),n.set("ternary",Dt),{lookup(t){return n.get(t)},get(t){var e=n.get(t);if(!e)throw Error("Pipe '"+t+"' not found.");return e},has(t){return n.has(t)}}}var N=Bt();function He(n,t,e=N){return t.reduce((r,o)=>{let[s,...i]=o.split(":").map(a=>a.trim());if(!e.has(s))return`[Pipe ${s} not found]`;try{return e.get(s)(r,...i)}catch(a){return`[Pipe ${s}, value: ${n}, error: ${a}]`}},n)}var Hn=N;function Ot(n,...t){let e=document.createElement("template"),r=In(n);e.innerHTML=r;let o=[],s=document.createTreeWalker(e.content,NodeFilter.SHOW_ALL),i;for(;i=s.nextNode();)if(i.nodeType===Node.ELEMENT_NODE){let a=i;Dn(a,t,o),customElements.get(a.tagName.toLowerCase())&&customElements.upgrade(a)}else if(i.nodeType===Node.TEXT_NODE){let a=i,c=a.textContent,l=jt(c,t);if(l)if(/€€\d+€€/.test(c)){let u=null,d=null,m=[];o.push({originalValue:c,setter(f){var x=l(f);u||(u=document.createComment(""),d=document.createComment(""),a.parentNode?.replaceChild(d,a),d.parentNode?.insertBefore(u,d)),m.forEach(T=>T.parentNode?.removeChild(T)),m=[];let g=document.createElement("template");g.innerHTML=x;let b=Array.from(g.content.childNodes),h=d.parentNode;b.forEach(T=>{h.insertBefore(T,d),m.push(T)})}})}else o.push({originalValue:c,setter(u){var d=l(u);a.textContent=d}})}return function(c){return o.forEach(l=>{l.setter(c)}),{fragment:e.content,update(l){o.forEach(p=>{p.setter(l)})}}}}function In(n){return n.raw.map((t,e)=>e<n.raw.length-1?`${t}\u20AC\u20AC${e}\u20AC\u20AC`:t).join("")}function Dn(n,t,e){let r=[];for(let i of Array.from(n.attributes)){var o=i.value;if(o=="")continue;let a=/€€(\d+)€€/,c=o.match(a);if(c){let l=parseInt(c[1],10),p=t[l];if(typeof p=="function"){r.push({setter(u){let d=p.bind(u);n.removeAttribute(i.name),n[i.name]=d}});continue}}var s=jt(o,t);s!=null&&r.push({originalValue:o,setter(l){let p=s(l)??o;i.name in n?n[i.name]=p:i.value=p}})}r.length>0&&e.push({originalValue:n.tagName,setter(i){r.forEach(a=>a.setter(i))}})}function Bn(n,t){return n.split(",").map(e=>{if(e=e.trim(),e.startsWith('"')&&e.endsWith('"')||e.startsWith("'")&&e.endsWith("'"))return e.slice(1,-1);if(!isNaN(Number(e)))return Number(e);if(e.includes(".")){let r=e.split("."),o=t;for(let s of r){if(o==null)return;o=o[s]}return o}return t[e]})}function jt(n,t){let e=/€€(\d+)€€|{{\s*([^|]+?)(?:\|([\w|]+))?\s*}}/g,r=0,o,s=[];for(;(o=e.exec(n))!==null;){var i=n.slice(r,o.index);if(i.length>0&&s.push(c=>i),o[1]){let c=parseInt(o[1],10),l=t[c];if(!l)continue;if(typeof l=="function"){let p=l;s.push(u=>{var d=p.apply(u);return d})}else l&&l.length>0&&s.push(p=>l)}else if(o[2]){let c=o[2].trim(),l=o[3]?o[3].trim():null,p=o[4]?o[4].split("|").map(u=>u.trim()):[];s.push(u=>{var d=u[c];if(typeof d=="function")if(l){let m=Bn(l,u);d=d.apply(u,m)}else d=d.call(u);return p.forEach(m=>{d=Hn[m](d)}),d})}r=e.lastIndex}if(s.length==0)return null;var a=n.slice(r);return a.length>0&&s.push(c=>a),c=>{var l="";return s.forEach(p=>{var u=p(c);l+=u}),l}}function _t(n){let t=n.split("|").map(s=>s.trim()),e=t[0],r=t.slice(1),o=e.match(/^(\w+)\s*\((.*)\)$/);if(o){let[,s,i]=o,a=i?i.split(",").map(c=>c.trim()):[];return{type:"function",fnName:s,fnArgs:a,pipes:r}}return{type:"path",path:e,pipes:r}}function ne(n,t){let r=t.replace(/\[(\d+)\]/g,".$1").split("."),o=n;for(let s of r)if(o&&typeof o=="object"&&s in o)o=o[s];else return;return o}function S(n,t,e,r=!1){let o=`[template error] ${t} (at ${e})`;if(n.onError&&n.onError(o),n.strict||r)throw new Error(o)}function On(n){return function(e,r,o=""){try{let s=ne(e,r);return s===void 0?(S(n,`Cannot resolve "${r}"`,o),""):s===null?"":Array.isArray(s)?s.length>0?JSON.stringify(s):"":typeof s=="object"?JSON.stringify(s):s}catch(s){let i=s instanceof Error?s.message:String(s);return S(n,`Exception resolving "${r}": ${i}`,o,!0),""}}}function Vt(n,t,e,r,o){let s,i=r.pipeRegistry??N;if(n.type==="function"){let a=e?.[n.fnName];if(typeof a!="function")return S(r,`Function "${n.fnName}" not found`,o),"";let c=(n.fnArgs??[]).map(l=>l.startsWith('"')&&l.endsWith('"')||l.startsWith("'")&&l.endsWith("'")?l.slice(1,-1):isNaN(Number(l))?ne(t,l):Number(l));try{s=a(...c)}catch(l){let p=l instanceof Error?l.message:String(l);return S(r,`Error calling "${n.fnName}": ${p}`,o),""}}else{let a=ne(t,n.path);if(a===void 0)return S(r,`Cannot resolve "${n.path}"`,o),"";a===null?s="":typeof a=="object"?s=JSON.stringify(a):s=a}return n.pipes.length>0&&(s=He(s,n.pipes,i)),s}var Ie=new Map;function jn(n,t,e){if(n.nodeType!==Node.TEXT_NODE||!n.textContent?.includes("{{"))return;let r=n.textContent;if(!Ie.has(r)){let a=r.split(/(\{\{.*?\}\})/).map(c=>{if(c.startsWith("{{")){let l=c.slice(2,-2).trim();return{parsed:_t(l),literal:""}}else return{parsed:null,literal:c}});Ie.set(r,a)}let o=Ie.get(r),s=`TextNode: "${r}"`;return(i,a)=>{let c=o.map(({parsed:l,literal:p})=>l?String(Vt(l,i,a,e,s)):p).join("");n.textContent=c}}function _n(n,t,e){if(n.nodeType!==Node.ELEMENT_NODE)return;let r=n,o=[],s=Array.from(r.attributes);for(let i of s){let a=i.value.match(/\{\{(.+?)\}\}/);if(a){let c=a[1].trim(),l=_t(c),p=i.name,u=`Attribute: ${p} on <${r.tagName.toLowerCase()}>`;o.push((d,m)=>{let f=Vt(l,d,m,e,u);r.setAttribute(p,String(f))})}}if(o.length>0)return(i,a)=>o.forEach(c=>c(i,a))}function qt(n,t,e,r,o){if(n.nodeType!==Node.ELEMENT_NODE||!n.hasAttribute(r))return;let s=n,i=s.getAttribute(r),a=s.cloneNode(!0),c=document.createComment(`${r}: ${i}`),l=s.parentNode;l.insertBefore(c,s),s.remove();let p=null,u=null,d=null,m=null;return(f,x)=>{let g=t(f,i,`${r}="${i}"`),b=o(g);if(b&&!p){if(d&&m)p=d,u=m,d=null,m=null;else{let h=a.cloneNode(!0);h.removeAttribute(r),p=h,u=De(h,e)}u(f,x),l.insertBefore(p,c.nextSibling)}else b&&u&&u(f,x);!b&&p&&(p.remove(),d=p,m=u,p=null,u=null)}}function Vn(n,t,e){return qt(n,t,e,"if",r=>!!r)}function qn(n,t,e){return qt(n,t,e,"unless",r=>!r)}function Un(n,t,e){if(n.nodeType!==Node.ELEMENT_NODE||!n.hasAttribute("loop"))return;let r=n,o=r.getAttribute("loop"),s=o.match(/(\w+)\s+in\s+(.+)/);if(!s){S(e,`Invalid loop syntax: "${o}"`,`Element: <${r.tagName.toLowerCase()}>`);return}let[,i,a]=s,c=r.cloneNode(!0);c.removeAttribute("loop");let l=r.parentNode,p=document.createComment(`loop: ${o}`);l.insertBefore(p,r),r.remove();let u=[];return(d,m)=>{let f=ne(d,a);if(f===void 0){S(e,`Cannot resolve "${a}"`,`Loop source: "${o}"`);return}if(!Array.isArray(f)){S(e,`"${a}" is not an array in loop: "${o}"`,`Element: <${c.tagName.toLowerCase()}>`);return}let x=Math.min(u.length,f.length);for(let g=0;g<x;g++)u[g].renderer({...d,[i]:f[g]},m);for(let g=u.length-1;g>=f.length;g--)u[g].element.remove();if(f.length>x){let g=document.createDocumentFragment(),b=[];for(let T=x;T<f.length;T++){let y=c.cloneNode(!0),L=De(y,e);L({...d,[i]:f[T]},m),g.appendChild(y),b.push({element:y,renderer:L})}let h=x>0?u[x-1].element:p;l.insertBefore(g,h.nextSibling),u=u.slice(0,x).concat(b)}else u.length=f.length}}var zn=[Un,Vn,qn],Wn=[jn,_n];function De(n,t){let e=[],r=On(t);function o(a){for(let c of zn){let l=c(a,r,t);if(l){e.push(l);return}}for(let c of Wn){let l=c(a,r,t);l&&e.push(l)}for(let c of Array.from(a.childNodes))o(c)}o(n);let s=null,i;return(a,c)=>{(s!==a||i!==c)&&(e.forEach(l=>l(a,c)),s=a,i=c)}}function Ut(n,t={strict:!1}){let o=new DOMParser().parseFromString(`<template><div>${n}</div></template>`,"text/html").querySelector("template").content.firstElementChild,s=De(o,t);return{content:o,render:s}}function Gn(n,t={}){let{delimiter:e=".",escapeChar:r="\\"}=t;if(!n||typeof n!="string")throw new Error("Notation must be a non-empty string");let o=[],s="",i=0,a=!1,c="";for(;i<n.length;){let l=n[i],p=n.substring(i,e.length+i),u=n[i+1],d=n.substring(i+1,e.length+i+1);if(l===r&&(d===e||u==="["||u==="]"))a?c+=u:s+=u,i+=2;else if(l==="["&&!a)s&&(o.push({type:"property",key:s}),s=""),a=!0,c="",i++;else if(l==="]"&&a){if(!/^\d+$/.test(c.trim()))throw new Error(`Invalid array index: [${c}]. Only numeric indices are supported.`);o.push({type:"index",key:c.trim()}),a=!1,c="",i++}else p===e&&!a?(s&&(o.push({type:"property",key:s}),s=""),i+=e.length):a?(c+=l,i++):(s+=l,i++)}if(a)throw new Error("Unclosed bracket in notation");if(s&&o.push({type:"property",key:s}),o.length===0)throw new Error("Invalid notation: must contain at least one property or index");return o}function Jn(n){return t=>{let e=t;for(let r of n){if(e==null)return;if(r.type==="property"){if(typeof e!="object")return;e=e[r.key]}else if(r.type==="index"){if(!Array.isArray(e))return;let o=parseInt(r.key,10);if(o<0||o>=e.length)return;e=e[o]}}return e}}function re(n,t={}){let e=Gn(n,t);return Jn(e)}function Wt(n){let t=[],e=0;for(;e<n.length;){let r=n[e];if(/\s/.test(r)){e++;continue}if(r==="|"){for(e++;e<n.length&&/\s/.test(n[e]);)e++;let o="";for(;e<n.length&&!/[\s\(\)\[\]\{\}\|\+\-\*\/\=\;\,\.]/.test(n[e]);)o+=n[e],e++;t.push({type:3,value:o});continue}if(r==='"'||r==="'"){let o=r,s=o;for(e++;e<n.length&&n[e]!==o;)n[e]==="\\"&&e+1<n.length&&n[e+1]===o?(s+="\\"+o,e+=2):(s+=n[e],e++);e<n.length&&(s+=o,e++),t.push({type:0,value:s});continue}if(/[0-9]/.test(r)){let o="",s=!1;for(;e<n.length&&(/[0-9]/.test(n[e])||n[e]==="."&&!s);)n[e]==="."&&(s=!0),o+=n[e],e++;t.push({type:0,value:o});continue}if(/[a-zA-Z_$]/.test(r)){let o="",s=!1;for(;e<n.length;)if(/[a-zA-Z0-9_$.]/.test(n[e]))o+=n[e],e++;else if(n[e]==="["){let l=1;for(o+=n[e++];e<n.length&&l>0;)n[e]==="["&&l++,n[e]==="]"&&l--,o+=n[e++]}else break;let i=0;for(;e<n.length&&/\s/.test(n[e]);)i++,e++;if(e<n.length&&n[e]==="("){s=!0,o+="(",e++;let l=1;for(;e<n.length&&l>0;)n[e]==="("&&l++,n[e]===")"&&l--,o+=n[e++]}else e-=i;let a=t[t.length-1],c=n[e-o.length-1]==="."&&a?.type===0;t.push({type:s||c?1:2,value:o});continue}e++}return t}function oe(n){let t=[],e=n.indexOf("("),r=n.lastIndexOf(")");if(e===-1||r===-1||r<=e)throw new Error("Invalid function call syntax");let o=n.slice(e+1,r),s=0;for(;s<o.length;){let i=o[s];if(/\s/.test(i)){s++;continue}if(i==='"'||i==="'"){let a=i,c="";for(s++;s<o.length&&o[s]!==a;)o[s]==="\\"?(s++,s<o.length&&(c+=o[s])):c+=o[s],s++;if(s>=o.length)throw new Error("Unterminated string in arguments");s++,t.push({type:"string",value:c});continue}if(/[0-9]/.test(i)){let a="";for(;s<o.length&&/[0-9.]/.test(o[s]);)a+=o[s],s++;t.push({type:"number",value:parseFloat(a)});continue}if(/[a-zA-Z_]/.test(i)){let a="";for(;s<o.length&&/[a-zA-Z0-9_\.]/.test(o[s]);)a+=o[s],s++;t.push({type:"identifier",value:a});continue}if(i===","){s++;continue}throw new Error(`Unexpected character in arguments: ${i}`)}return t}function Gt(n){let t=[],e=0;for(;e<n.length;){let r=n.indexOf("{{",e);if(r===-1){t.push(zt(n.slice(e)));break}r>e&&t.push(zt(n.slice(e,r)));let{value:o,endIndex:s,balanced:i}=Kn(n,r);if(!i)throw new Error(`Unclosed mustache tag starting at index ${r}, template: ${n}`);t.push(Xn(o)),e=s}return t}function zt(n){return{type:"string",value:n}}function Xn(n){return{type:"mustache",value:n}}function Kn(n,t){let e="{{",r="}}",o=t+e.length,s=1;for(;o<n.length&&s>0;)n.slice(o,o+e.length)===e?(s++,o+=e.length):n.slice(o,o+r.length)===r?(s--,o+=r.length):o++;let i=s===0,a=i?o:n.length;return{value:n.slice(t,a),endIndex:a,balanced:i}}function Be(n,t){let e=Gt(n).map(r=>r.type==="string"?(o,s)=>r.value:Zn(r,t));return(r,o)=>e.map(s=>s(r,o)).join("")}function Zn(n,t){let e=Wt(n.value),r=Yn(e,n.value,t?.pipeRegistry);return Qn(r)}function Yn(n,t,e){let r=null;e||(e=N);for(let o of n)switch(o.type){case 0:throw Error(`Constants not supported: ${o.value}`);case 2:{r={source:re(o.value),pipes:[]};break}case 1:{r={source:er(o.value),pipes:[]};break}case 3:{if(!r)throw Error(`Pipe '${o.value}' has no input expression in: ${t}`);if(!o.value||o.value==="")throw Error("Pipe symbol was provided, but no pipes. Template: "+t);let[s,...i]=o.value.split(":").map(c=>c.trim()),a=e.lookup(s);if(!a)throw Error(`Pipe not found: ${s}`);r.pipes.push(c=>a(c,i));break}}if(!r)throw Error(`Invalid expression: ${t}`);return r}function Qn(n){return(t,e)=>{let r=n.source(t,e),o=n.pipes.reduce((s,i)=>i(s),r);return o!=null?o.toString():""}}function er(n){let t=n.indexOf("(");if(t===-1)throw Error(`Invalid function: ${n}`);let r=oe(n).map(i=>{if(i.type==="number"||i.type==="string")return()=>i.value;if(i.type==="identifier")return a=>re(i.value)(a);throw Error(`Unsupported argument type: ${i.type}`)}),o=n.substring(0,t),s=re(o);return(i,a)=>{if(!a)throw Error(`Component context is required for calling '${o}'`);let c=s(a);if(typeof c!="function")throw Error(`Resolved '${o}' is not a function`);let l=r.map(p=>p(i));return c.apply(a,l)}}var se=class{constructor(t,e,r,o){this.root=t;this.bindings=e;this.clickBindings=r;this.component=o}render(t){for(let e of this.bindings)e.type==="text"?e.func(t,e.node):e.func(t,e.element);for(let e of this.clickBindings){let r=this.getNodeAtPath(this.root,e.path),o=this.component?.[e.methodName];r instanceof HTMLElement&&typeof o=="function"&&(r.onclick=s=>{let i=e.argTokens.map(a=>{if(a.type==="number"||a.type==="string")return a.value;if(a.type==="identifier")return a.value==="event"?s:a.value.split(".").reduce((l,p)=>l?.[p],t)});o.apply(this.component,i)})}return this.root}getNodeAtPath(t,e){return e.reduce((r,o)=>r.childNodes[o],t)}};function tr(n){var t=new ie(n);return t}var ie=class{constructor(t){if(typeof t=="string"){let r=t.trim();if(r.startsWith("<template")){let o=document.createElement("div");o.innerHTML=r;let s=o.querySelector("template");if(!s)throw new Error("Could not find <template> in input string");this.template=s}else this.template=document.createElement("template"),this.template.innerHTML=r}else this.template=t;let e=this.getRootElement();this.bindings=this.collectBindings(e),this.clickBindings=this.collectClickBindings(e)}createInstance(t){let e=this.getRootElement().cloneNode(!0),r=this.bindings.map(o=>{let s=this.getNodeAtPath(e,o.path);return o.type==="text"?{type:"text",node:s,func:(i,a)=>o.func(i,t,a)}:{type:"attribute",element:s,name:o.name,func:(i,a)=>o.func(i,t,a)}});return new se(e,r,this.clickBindings,t)}getRootElement(){let t=Array.from(this.template.content.childNodes).find(e=>e.nodeType===Node.ELEMENT_NODE);if(!(t instanceof HTMLElement))throw new Error("Template must contain a single root element");return t}collectBindings(t){let e=[],r=(o,s=[])=>{if(o.nodeType===Node.TEXT_NODE&&o.textContent&&o.textContent.match(/\{\{\s*(.*?)\s*\}\}/g)){let i=Be(o.textContent);e.push({type:"text",path:[...s],func:(a,c,l)=>{l.textContent=i(a,c)}})}if(o.nodeType===Node.ELEMENT_NODE){let i=o;if(i.tagName==="TEMPLATE")return;for(let a=0;a<i.attributes.length;a++){let c=i.attributes[a];if(c.value.match(/\{\{\s*(.*?)\s*\}\}/g)){let l=Be(c.value);e.push({type:"attribute",path:[...s],name:c.name,func:(p,u,d)=>{d.setAttribute(c.name,l(p,u))}})}}Array.from(o.childNodes).forEach((a,c)=>{r(a,[...s,c])})}};return r(t),e}collectClickBindings(t){let e=[],r=(o,s=[])=>{if(o.nodeType===Node.ELEMENT_NODE){let a=o.getAttribute("click");if(a?.trim()){let c=a.trim(),l=c.match(/^([a-zA-Z_$][\w$]*)\s*\((.*)\)$/);if(l){let p=l[1],u=oe(c);e.push({path:[...s],methodName:p,argTokens:u})}else e.push({path:[...s],methodName:c,argTokens:[]})}Array.from(o.childNodes).forEach((c,l)=>{r(c,[...s,l])})}};return r(t),e}getNodeAtPath(t,e){return e.reduce((r,o)=>r.childNodes[o],t)}};var ae=class{constructor(t,e,r,o){this.dataMap=new Map;this.rowMap=new Map;this.table=t,this.template=e,this.IdColumn=r,this.component=o}render(t){this.clearRows();for(let e of t)this.renderRow(e)}clearRows(){this.table.tBodies[0].innerHTML="",this.dataMap.clear(),this.rowMap.clear()}renderRow(t){let e=t[this.IdColumn];if(e==null)throw new Error(`Missing IdColumn '${this.IdColumn}' in data`);let r=this.template.content.firstElementChild?.cloneNode(!0);if(!r)throw new Error("Template must have a <tr> as its first child");this.populateRow(r,t),this.attachEventHandlers(r,t),this.table.tBodies[0].appendChild(r),this.dataMap.set(e,t),this.rowMap.set(e,r)}populateRow(t,e){t.querySelectorAll("[data-field]").forEach(o=>{let s=o.dataset.field;s&&s in e&&(o.textContent=String(e[s]))})}attachEventHandlers(t,e){t.querySelectorAll("[onclick]").forEach(o=>{let s=o,i=s.getAttribute("onclick");if(!i)return;let a=i.match(/^(\w+)(\(([^)]*)\))?$/);if(!a)return;let[,c,,l]=a,p=l?l.split(",").map(u=>u.trim().replace(/^['"]|['"]$/g,"")):[];typeof this.component[c]=="function"&&(s.removeAttribute("onclick"),s.addEventListener("click",u=>{this.component[c](...p,e,u)}))})}update(t){let e=t[this.IdColumn];if(e==null)throw new Error(`Missing IdColumn '${this.IdColumn}' in update data`);let r=this.rowMap.get(e);r?(this.populateRow(r,t),this.attachEventHandlers(r,t),this.dataMap.set(e,t)):this.renderRow(t)}},z=class extends CustomEvent{constructor(t){super("sortchange",{detail:t,bubbles:!0,composed:!0})}},ce=class{constructor(t,e){this.sortColumns=[];this.table=t,this.component=e,this.setupListeners()}setupListeners(){this.table.tHead?.querySelectorAll("th[name]")?.forEach(e=>{e.addEventListener("click",()=>{let r=e.getAttribute("name");this.toggle(r),this.updateSortIndicators(),this.emit()})})}toggle(t){let e=this.sortColumns.findIndex(r=>r.column===t);e===-1?this.sortColumns.push({column:t,direction:"asc"}):this.sortColumns[e].direction==="asc"?this.sortColumns[e].direction="desc":this.sortColumns.splice(e,1)}emit(){let t=new z(this.sortColumns);this.component.dispatchEvent(t)}updateSortIndicators(){this.table.tHead?.querySelectorAll("th[name]")?.forEach(e=>{let r=e.querySelector(".sort-indicator");r&&e.removeChild(r);let o=e.getAttribute("name"),s=this.sortColumns.find(i=>i.column===o);if(s){let i=document.createElement("span");i.className="sort-indicator",i.textContent=s.direction==="asc"?"\u2191":"\u2193",i.style.float="right",i.style.marginLeft="5px",e.appendChild(i)}e.style.position||(e.style.position="relative")})}getSortColumns(){return[...this.sortColumns]}clear(){this.sortColumns=[],this.updateSortIndicators(),this.emit()}};var le=(o=>(o[o.Allow=0]="Allow",o[o.Deny=1]="Deny",o[o.Continue=2]="Continue",o[o.Stop=3]="Stop",o))(le||{}),k=class extends Error{},P=class extends k{};var C=class n extends Event{constructor(e,r,o,s,i){super(n.NAME,i);this.route=e;this.urlSegments=r;this.routeData=o;this.routeTarget=s}static{this.NAME="rlx.navigateRoute"}};var W=new Map,ue=new Map;function pe(n,t){if(Oe(),W.has(n)){let r=v("Duplicate route target",{target:n??"default"});if(r)throw r;return}W.set(n,t);let e=ue.get(n);e&&(ue.delete(n),t(e))}function de(n){W.delete(n)}function Xt(){ue.clear(),W.clear()}function nr(n){let t=W.get(n.routeTarget);t?t(n):ue.set(n.routeTarget,n)}var Jt=!1;function Oe(){Jt||(Jt=!0,document.addEventListener(C.NAME,n=>{nr(n)}))}var je=class{constructor(t){this.paramName=t}isMatch(t){return!!/^\d+$/.test(t)}getValue(t){if(/^\d+$/.test(t)===!1)throw new Error(`Path is not a number, parameter name '${this.paramName}', value: '${t}'.`);return parseInt(t)}},_e=class{constructor(t){this.paramName=t}isMatch(t){return!0}getValue(t){return t}},Ve=class{constructor(t){this.value=t}isMatch(t){return t==this.value}getValue(t){return this.value}},qe=class{constructor(t,e){this.route=t;this.segments=e}match(t){if(t.length!=this.segments.length)return null;let e=[];var r={};for(let o=0;o<t.length;o++){let s=t[o],i=this.segments[o];if(!i.isMatch(s))return null;if(i.paramName){let a=i.getValue(s);r[i.paramName]=a,e.push(a.toString())}else e.push(s)}return{route:this.route,params:r,urlSegments:e}}buildUrl(t){let e=[];for(let o=0;o<this.segments.length;o++){let s=this.segments[o];if(s.paramName){var r=t[s.paramName];if(!r)throw new Error(`Route "${this.route.name}" did not get value for parameter "${s.paramName} from the provided routeData: "${JSON.stringify(t)}".`);e.push(r.toString())}else e.push(s.getValue("").toString())}return{route:this.route,params:t,urlSegments:e}}parseParameters(t){let e={};return this.segments.forEach(r=>{if(r.paramName){if(!r.isMatch(o))throw new Error(`Failed to convert parameter ${r.paramName}, or missing value: ${o}, route: ${this.route.name}.`);var o=t[r.paramName];if(!o)throw new Error(`Parameter ${r.paramName} was not provided, route: ${this.route.name}.`);var s=r.getValue(o);e[r.paramName]=s}}),e}};function me(n,t,e){return t===""||t.indexOf("/")>=0?ze(n,t||"/"):Ue(n,t,e)}function Ue(n,t,e){var r=n.find(i=>i.name===t);if(!r)return null;var o=Kt(r),s=o.buildUrl(e);return s}function ze(n,t){let e=t.replace(/^\/|\/$/g,"").split("/"),r=rr(n);for(let o=0;o<r.length;o++){let i=r[o].match(e);if(i)return i}return null}function rr(n){let t=[];return n.forEach(e=>{var r=Kt(e);t.push(r)}),t}function Kt(n){var t=[];n.path.replace(/^\/|\/$/g,"").split("/").forEach(o=>{o.substring(0,1)==":"?t.push(new _e(o.substring(1))):o.substring(0,1)===";"?t.push(new je(o.substring(1))):o.substring(0,1)==="{"||t.push(new Ve(o))});var r=new qe(n,t);return r}var B=class extends HTMLElement{static get observedAttributes(){return["name","target","params"]}constructor(){super(),this.addEventListener("click",t=>this.handleClick(t))}handleClick(t){t.preventDefault();let e=this.getAttribute("name");if(!e)return;console.log("Calling printRoutes from RouteLink in relaxjs/components"),fe();let r={};for(let a of Array.from(this.attributes))if(a.name.startsWith("param-")){let c=a.name.substring(6);r[c]=a.value}let o=this.getAttribute("params"),s;if(o)try{s=JSON.parse(o)}catch(a){let c=v("Failed to parse route params",{element:"r-link",params:o,cause:a});if(c)throw c}let i=this.getAttribute("target");s&&Object.assign(r,s);try{G(e,{params:r,target:i||void 0})}catch(a){if(a instanceof R)throw a;let c=v("Navigation failed",{element:"r-link",route:e,params:r,target:i,cause:a});if(c)throw c}}connectedCallback(){this.hasAttribute("tabindex")||this.setAttribute("tabindex","0"),this.style.cursor="pointer",this.role="link"}disconnectedCallback(){this.removeEventListener("click",this.handleClick)}};var O=class extends HTMLElement{constructor(){super(...arguments);this.name=void 0}connectedCallback(){this.name=this.getAttribute("name")??void 0,this.hasAttribute("dialog")&&(this.dialog=document.createElement("dialog"),this.dialog.addEventListener("close",()=>{this.dialog.replaceChildren()}),this.appendChild(this.dialog)),pe(this.name,e=>this.onNavigate(e)),console.log("registered")}disconnectedCallback(){de(this.name)}onNavigate(e){console.log("got nav",e),this.loadComponent(e).catch(r=>{r instanceof R||(r=v("Route navigation failed",{route:e.route.name,routeTarget:e.routeTarget,cause:r})),r&&console.error(r)})}async loadComponent(e){let r=e.route.componentTagName??customElements.getName(e.route.component);if(!r){let s=v("Failed to find component for route",{route:e.route.name,componentTagName:e.route.componentTagName,component:e.route.component?.name,routeData:e.routeData});if(s)throw s;return}await customElements.whenDefined(r);let o=document.createElement(r);await this.applyRouteData(o,e.routeData),this.dialog?(this.dialog.replaceChildren(o),this.dialog.open||this.dialog.showModal()):document.startViewTransition?document.startViewTransition(()=>this.replaceChildren(o)):this.replaceChildren(o)}close(){this.dialog?.close()}async applyRouteData(e,r){if("loadRoute"in e){let o=r??{error:"loadRoute function without mapped route data in the routes"};await e.loadRoute(o)}r&&(e.routeData=r)}};var j=or()??"default";function or(){let n=window.location.pathname;return n=="/index.html"?"default":n.endsWith(".html")?n.slice(1,-5):null}var _=[];function fe(){console.log(_)}function Zt(n){console.log("defining routes1",n),Oe(),customElements.get("r-route-target")||customElements.define("r-route-target",O),customElements.get("r-link")||customElements.define("r-link",B),console.log("defining routes",n),_.length=0,_.push(...n);var t=[];if(n.forEach(e=>{e.componentTagName&&!customElements.get(e.componentTagName)&&t.push(`Component with tagName '${e.componentTagName}' is not defined in customElements.`),e.component&&!customElements.getName(e.component)&&t.push(`Component '${e.component.name}' is not defined in customElements. Used in route '${JSON.stringify(e)}'.`),e.layout===""&&(console.log("should not use empty string layout.",e),e.layout=void 0)}),t.length>0)throw new Error(t.join(`
2
- `))}function Yt(){let n=!1;if(j==""){let i=window.location.pathname.match(/\/([^\/]+)\.html$/);i&&i[1]!==""?(console.log("setting current layut",i[1]),j=i[1],n=!0):(console.log("Setting default layout name"),j="default")}if(sr())return;let t=window.location.pathname.replace(/^\/|\/$/g,"")||"/",e=Qt(t,{}),r=new URLSearchParams(window.location.search);if(r.size>0&&(e.params??={},r.forEach((s,i)=>{e.params[i]=s})),en(e))return;history.replaceState(e.urlSegments,"","/"+e.urlSegments.join("/"));let o=new C(e.route,e.urlSegments,e.params,e.route.target);document.dispatchEvent(o)}function G(n,t){console.log("navigating to ",n,t);let e=Qt(n,t);if(en(e))return;let r=t?.target??e.route.target,o=e.urlSegments.join("/");window.location.pathname.replace(/^\/|\/$/g,"")!=o&&history.pushState(e.urlSegments,"","/"+e.urlSegments.join("/"));let i=new C(e.route,e.urlSegments,e.params,r);document.dispatchEvent(i)}function Qt(n,t){let e=t?.routes??_,r=t?.params,o=me(e,n,r);if(!o){let s=ir(n,r,e);throw console.error(s),new k(s)}if(!ar(o))throw new P("Route guards stopped navigation for route "+n);return o}function en(n){n||console.error("Route result is null, cannot navigate to layout.");let t=(n.route.layout??"default").replace(/\.html?$/,"");if(t===j)return!1;if(console.log("Current layout: "+j,"Wanted layout: "+t),window.location.hash)throw Error('A redirect failed, does the requsted layout exist? "'+t+'"?');console.log(`requires layout switch from ${j} to ${t}`);let e={routeName:n.route.name,params:n.params||{}};sessionStorage.setItem("layoutNavigation",JSON.stringify(e));let r=t.indexOf(".htm")>-1?`/${t}#layout`:`/${t}.html#layout`;return console.log("redirecting to ",r),window.location.href=r,!0}function sr(){try{let n=sessionStorage.getItem("layoutNavigation");if(!n)return!1;let t=JSON.parse(n);return sessionStorage.removeItem("layoutNavigation"),console.log("session store navigation ",t),G(t.routeName,{params:t.params}),!0}catch(n){return sessionStorage.removeItem("layoutNavigation"),v("Failed to navigate from session storage",{cause:n}),!1}}function ir(n,t,e){var r="";t?r+=Object.entries(t).map(([s,i])=>`${s}=${i}`).join(", "):r=".";var o=e.map(s=>` * Name: '${s.name}', path: '${s.path}', target: ${s.target??"default"}
1
+ var Ye=Object.create;var M=Object.defineProperty;var Qe=Object.getOwnPropertyDescriptor;var sn=Object.getOwnPropertyNames;var an=Object.getPrototypeOf,cn=Object.prototype.hasOwnProperty;var et=(n,t)=>(t=Symbol[n])?t:Symbol.for("Symbol."+n),q=n=>{throw TypeError(n)};var ln=(n,t,e)=>t in n?M(n,t,{enumerable:!0,configurable:!0,writable:!0,value:e}):n[t]=e;var Xe=(n,t)=>M(n,"name",{value:t,configurable:!0});var tt=n=>t=>{var e=n[t];if(e)return e();throw new Error("Module not found in bundle: "+t)};var A=(n,t)=>()=>(t||n((t={exports:{}}).exports,t),t.exports),un=(n,t)=>{for(var e in t)M(n,e,{get:t[e],enumerable:!0})},nt=(n,t,e,r)=>{if(t&&typeof t=="object"||typeof t=="function")for(let o of sn(t))!cn.call(n,o)&&o!==e&&M(n,o,{get:()=>t[o],enumerable:!(r=Qe(t,o))||r.enumerable});return n};var $=(n,t,e)=>(e=n!=null?Ye(an(n)):{},nt(t||!n||!n.__esModule?M(e,"default",{value:n,enumerable:!0}):e,n)),pn=n=>nt(M({},"__esModule",{value:!0}),n);var K=n=>[,,,Ye(n?.[et("metadata")]??null)],rt=["class","method","getter","setter","accessor","field","value","get","set"],V=n=>n!==void 0&&typeof n!="function"?q("Function expected"):n,dn=(n,t,e,r,o)=>({kind:rt[n],name:t,metadata:r,addInitializer:s=>e._?q("Already initialized"):o.push(V(s||null))}),mn=(n,t)=>ln(t,et("metadata"),n[3]),Z=(n,t,e,r)=>{for(var o=0,s=n[t>>1],i=s&&s.length;o<i;o++)t&1?s[o].call(e):r=s[o].call(e,r);return r},Y=(n,t,e,r,o,s)=>{var i,a,c,l,p,u=t&7,d=!!(t&8),m=!!(t&16),f=u>3?n.length+1:u?d?1:2:0,x=rt[u+5],g=u>3&&(n[f-1]=[]),b=n[f]||(n[f]=[]),h=u&&(!m&&!d&&(o=o.prototype),u<5&&(u>3||!m)&&Qe(u<4?o:{get[e](){return Ke(this,s)},set[e](y){return Ze(this,s,y)}},e));u?m&&u<4&&Xe(s,(u>2?"set ":u>1?"get ":"")+e):Xe(o,e);for(var T=r.length-1;T>=0;T--)l=dn(u,e,c={},n[3],b),u&&(l.static=d,l.private=m,p=l.access={has:m?y=>fn(o,y):y=>e in y},u^3&&(p.get=m?y=>(u^1?Ke:gn)(y,o,u^4?s:h.get):y=>y[e]),u>2&&(p.set=m?(y,L)=>Ze(y,o,L,u^4?s:h.set):(y,L)=>y[e]=L)),a=(0,r[T])(u?u<4?m?s:h[x]:u>4?void 0:{get:h.get,set:h.set}:o,l),c._=1,u^4||a===void 0?V(a)&&(u>4?g.unshift(a):u?m?s=a:h[x]=a:o=a):typeof a!="object"||a===null?q("Object expected"):(V(i=a.get)&&(h.get=i),V(i=a.set)&&(h.set=i),V(i=a.init)&&g.unshift(i));return u||mn(n,o),h&&M(o,e,h),m?u^4?s:h:o};var we=(n,t,e)=>t.has(n)||q("Cannot "+e),fn=(n,t)=>Object(t)!==t?q('Cannot use the "in" operator on this value'):n.has(t),Ke=(n,t,e)=>(we(n,t,"read from private field"),e?e.call(n):t.get(n));var Ze=(n,t,e,r)=>(we(n,t,"write to private field"),r?r.call(n,e):t.set(n,e),e),gn=(n,t,e)=>(we(n,t,"access private method"),e);var it=A((kr,xn)=>{xn.exports={greeting:"Hello, {name}!",items:"{count, plural, one {# item} other {# items}}"}});var at=A((Pr,Tn)=>{Tn.exports={today:"today",yesterday:"yesterday",daysAgo:"{count, plural, one {# day ago} other {# days ago}}",pieces:"{count, plural, =0 {none} one {one} other {# pcs}}"}});var ct=A((Lr,bn)=>{bn.exports={required:"This field is required.",range:"Number must be between {min} and {max}, was {actual}.",digits:"Please enter only digits."}});var lt=A((Ar,wn)=>{wn.exports={greeting:"Hej, {name}!",items:"{count, plural, one {# sak} other {# saker}}"}});var ut=A(($r,Cn)=>{Cn.exports={today:"idag",yesterday:"ig\xE5r",daysAgo:"{count, plural, one {# dag sedan} other {# dagar sedan}}",pieces:"{count, plural, =0 {inga} one {en} other {# st}}"}});var pt=A((Fr,Rn)=>{Rn.exports={required:"Detta f\xE4lt \xE4r obligatoriskt.",range:"Talet m\xE5ste vara mellan {min} och {max}, var {actual}.",digits:"Ange endast siffror."}});var Er={};un(Er,{Blueprint:()=>ce,BooleanConverter:()=>ne,BoundNode:()=>ae,ContainerService:()=>lr,DateConverter:()=>ke,DigitsValidation:()=>He,FormValidator:()=>Re,GuardResult:()=>pe,HttpError:()=>Ge,Inject:()=>cr,LinkedList:()=>Q,NavigateRouteEvent:()=>C,Node:()=>F,NumberConverter:()=>Me,PageSelectedEvent:()=>U,Pager:()=>ee,RangeValidation:()=>Fe,RegisterValidator:()=>re,RelaxError:()=>R,RequiredValidation:()=>$e,RouteError:()=>k,RouteGuardError:()=>P,RouteLink:()=>B,RouteTarget:()=>O,SSEClient:()=>Je,SSEDataEvent:()=>be,ServiceCollection:()=>ve,ServiceContainer:()=>Ee,SortChangeEvent:()=>W,TableRenderer:()=>le,TableSorter:()=>ue,applyPipes:()=>Ie,capitalizePipe:()=>Nt,clearPendingNavigations:()=>Xt,compileTemplate:()=>Ut,configure:()=>mr,container:()=>tn,createBluePrint:()=>tr,createConverterFromDataType:()=>ft,createConverterFromInputType:()=>gt,createPipeRegistry:()=>Bt,currencyPipe:()=>Mt,datePipe:()=>kt,daysAgoPipe:()=>Pt,defaultPipe:()=>It,defaultPipes:()=>N,defineRoutes:()=>Zt,del:()=>yr,findRouteByName:()=>ze,findRouteByUrl:()=>We,firstPipe:()=>$t,generateSequentialId:()=>rn,get:()=>fr,getDataConverter:()=>mt,getParentComponent:()=>ur,getValidator:()=>An,html:()=>Ot,internalRoutes:()=>_,joinPipe:()=>At,keysPipe:()=>Ht,lastPipe:()=>Ft,lowercasePipe:()=>Rt,mapFormToClass:()=>Mn,matchRoute:()=>ge,navigate:()=>J,onError:()=>hn,piecesPipe:()=>Lt,post:()=>gr,printRoutes:()=>he,put:()=>hr,readData:()=>kn,registerRouteTarget:()=>me,reportError:()=>v,request:()=>X,resolveValue:()=>vr,serviceCollection:()=>xe,setFetch:()=>dr,setFormData:()=>$n,shortenPipe:()=>St,startRouting:()=>Yt,ternaryPipe:()=>Dt,trimPipe:()=>Ct,unregisterRouteTarget:()=>fe,uppercasePipe:()=>wt});module.exports=pn(Er);var R=class extends Error{constructor(e,r){super(e);this.context=r}},Ce=null;function hn(n){Ce=n}function v(n,t){let e=new R(n,t);if(Ce){let r=!1;if(Ce(e,{suppress(){r=!0}}),r)return null}return e}var F=class{constructor(t,e){this.value=t;this.removeCallback=e;this.next=null;this.prev=null}remove(){this.prev.next=this.next,this.next.prev=this.prev,this.removeCallback()}},Q=class{constructor(){this._length=0}addFirst(t){let e=new F(t,()=>this._length--);this._first?(e.next=this._first,this._first.prev=e,this._first=e):(this._first=e,this._last=this._first),this._length++}addLast(t){let e=new F(t,()=>this._length--);this._first?(e.prev=this._last,this._last.next=e,this._last=e):(this._first=e,this._last=this._first),this._length++}removeFirst(){if(!this.first)throw new Error("The list is empty.");let t=this._first.value;return this._first=this._first.next,this._length--,t}removeLast(){if(!this.last)throw new Error("The list is empty.");let t=this._last.value;return this._last=this._last.prev,this._length--,t}get length(){return this._length}get first(){return this._first}get firstValue(){return this._first?.value}get last(){return this._last}get lastValue(){return this._last?.value}};var U=class extends Event{constructor(e){super("pageselected",{bubbles:!0,composed:!0});this.page=e}},ee=class{constructor(t,e,r){this.currentPage=1;this.container=t,this.totalCount=e,this.pageSize=r,this.render()}render(){this.container.innerHTML="";let t=Math.max(1,Math.ceil(this.totalCount/this.pageSize)),e=(r,o,s=!1)=>{let i=document.createElement("button");return i.textContent=r,i.disabled=s,i.addEventListener("click",()=>this.selectPage(o)),i};this.container.appendChild(e("Previous",this.currentPage-1,this.currentPage===1));for(let r=1;r<=t;r++){let o=e(r.toString(),r);r===this.currentPage&&o.classList.add("selected"),this.container.appendChild(o)}this.container.appendChild(e("Next",this.currentPage+1,this.currentPage===t))}selectPage(t){let e=Math.max(1,Math.ceil(this.totalCount/this.pageSize));t<1||t>e||t===this.currentPage||(this.currentPage=t,this.render(),this.container.dispatchEvent(new U(this.currentPage)))}update(t){this.totalCount=t;let e=Math.max(1,Math.ceil(this.totalCount/this.pageSize));this.currentPage>e&&(this.currentPage=e),this.render()}getCurrentPage(){return this.currentPage}};function yn(n){let t=n.getAttribute("id");if(t){let e=n.closest("form");if(e){let r=e.querySelector(`label[for="${t}"]`);if(r)return r.textContent?.trim()||null}}return null}var Re=class{constructor(t,e){this.form=t;this.options=e;if(!this.form)throw new Error("Form must be specified.");this.form.addEventListener("submit",r=>{(e?.preventDefault||this.options?.submitCallback!=null)&&r.preventDefault(),this.options?.customChecks&&this.options.customChecks(t),this.validateForm()?this.options?.submitCallback?.apply(this):e?.preventDefaultOnFailed!==!1&&r.preventDefault()}),e?.autoValidate&&t.addEventListener("input",()=>{this.validateForm()})}validateForm(){let t=Array.from(this.form.querySelectorAll("input,textarea,select")),e=!0;if(this.options?.useSummary!==!0)return this.form.checkValidity()?!0:(this.form.reportValidity(),this.focusFirstErrorElement(),!1);let r=[];return t.forEach(o=>{if(!o.checkValidity()){e=!1;let s=yn.call(this,o)||o.name||"Unnamed Field";r.push(`${s}: ${o.validationMessage}`)}}),e?this.clearErrorSummary():(this.displayErrorSummary(r),this.focusFirstErrorElement()),e}displayErrorSummary(t){this.clearErrorSummary(),this.errorSummary||this.createErrorSummary();let e=this.errorSummary.querySelector("ul");t.forEach(r=>{let o=document.createElement("li");o.textContent=r,e.appendChild(o)})}createErrorSummary(){let t=document.createElement("div");t.className="error-summary",t.style.color="red",t.setAttribute("role","alert"),t.setAttribute("aria-live","assertive"),t.setAttribute("aria-atomic","true"),this.errorSummary=t;let e=document.createElement("ul");this.errorSummary.appendChild(e),this.form.prepend(t)}addErrorToSummary(t,e){this.errorSummary||this.createErrorSummary();let r=this.errorSummary.querySelector("ul"),o=document.createElement("li");o.textContent=`${t}: ${e}`,r.appendChild(o)}clearErrorSummary(){this.errorSummary&&(this.errorSummary.querySelector("ul").innerHTML="")}focusFirstErrorElement(){let t=this.form.querySelector(":invalid");t instanceof HTMLElement&&document.activeElement!==t&&t.focus()}static FindForm(t){if(t.parentElement?.tagName=="FORM")return t.parentElement;for(let e=0;e<t.children.length;e++){let r=t.children[e];if(r.tagName=="FORM")return r}throw new Error("Parent or a direct child must be a FORM for class "+t.constructor.name)}};var Ne=new Map;function vn(n){return Ne.has(n)||Ne.set(n,new Intl.PluralRules(n)),Ne.get(n)}function ot(n){return n.replace(/[.*+?^${}()|[\]\\]/g,"\\$&")}function En(n,t,e="en"){return n.replace(/\{(\w+)(?:, (plural|select),((?:[^{}]*\{[^{}]*\})+))?\}/g,(r,o,s,i)=>{let a=t[o];if(s==="plural"){let c=new RegExp(`=${ot(String(a))}\\s*\\{([^{}]*)\\}`).exec(i);if(c)return c[1].replace(`{${o}}`,String(a)).replace("#",String(a));let p=vn(e).select(a),u=new RegExp(`${p}\\s*\\{([^{}]*)\\}`).exec(i)||new RegExp("other\\s*\\{([^{}]*)\\}").exec(i);return u?u[1].replace(`{${o}}`,String(a)).replace("#",String(a)):String(a)}if(s==="select"){let c=ot(String(a)),l=new RegExp(`\\b${c}\\s*\\{([^{}]*)\\}`).exec(i)||new RegExp("\\bother\\s*\\{([^{}]*)\\}").exec(i);return l?l[1]:String(a)}return a!==void 0?String(a):`{${o}}`})}var st=En;var Dr=tt({"./locales/en/r-common.json":()=>Promise.resolve().then(()=>$(it())),"./locales/en/r-pipes.json":()=>Promise.resolve().then(()=>$(at())),"./locales/en/r-validation.json":()=>Promise.resolve().then(()=>$(ct())),"./locales/sv/r-common.json":()=>Promise.resolve().then(()=>$(lt())),"./locales/sv/r-pipes.json":()=>Promise.resolve().then(()=>$(ut())),"./locales/sv/r-validation.json":()=>Promise.resolve().then(()=>$(pt()))});var Nn="en",Se=Nn;var Sn={},dt=null;function w(n,t){let[e,r]=n.includes(":")?n.split(":"):["r-common",n],o=Sn[e]?.[r];if(!o)return dt&&dt(r,e,Se),n;try{return st(o,t,Se)}catch{return n}}function z(){return Se}function Mn(n,t,e={}){let r=n.querySelectorAll("input, select, textarea");if(r.forEach(o=>{if(!o.hasAttribute("name")||te(o,"disabled"))return;let s=o.getAttribute("name");if(!(s in t)){if(e.throwOnMissingProperty)throw new Error(`Form field "${s}" has no matching property in class instance`);return}let i=Ln(o);i!==ht&&(t[s]=i)}),e.throwOnMissingField){let o=new Set;r.forEach(s=>{s.hasAttribute("name")&&o.add(s.getAttribute("name"))});for(let s in t)if(typeof t[s]!="function"&&Object.prototype.hasOwnProperty.call(t,s)&&!o.has(s))throw new Error(`Class property "${s}" has no matching form field`)}return t}function mt(n){let t=n.getAttribute("data-type");return t?ft(t):n instanceof HTMLInputElement?gt(n.type):"checked"in n&&typeof n.checked=="boolean"?ne:e=>e}function kn(n){let t={},e=new FormData(n),r=new Set;e.forEach((o,s)=>{if(r.has(s))return;r.add(s);let i=e.getAll(s),a=n.elements.namedItem(s),c=a?mt(a):l=>l;if(i.length===1){let l=i[0];t[s]=typeof l=="string"?c(l):l}else t[s]=i.map(l=>typeof l=="string"?c(l):l)});for(let o=0;o<n.elements.length;o++){let s=n.elements[o];s.type==="checkbox"&&s.name&&!r.has(s.name)&&(r.add(s.name),t[s.name]=!1)}return t}function ne(n){if(!n||n=="")return;let t=n.toLowerCase();if(t==="true"||t==="on"||Number(n)>0)return!0;if(t==="false"||t==="off"||Number(n)<=0)return!1;throw new Error("Could not convert value '"+n+"' to boolean.")}function Me(n){if(!n||n=="")return;let t=Number(n);if(!isNaN(t))return t;throw new Error("Could not convert value '"+n+"' to number.")}function Pn(n){return new Intl.DateTimeFormat(n).formatToParts(new Date(2024,0,15)).filter(e=>e.type==="day"||e.type==="month"||e.type==="year").map(e=>e.type)}function ke(n){if(!n||n==="")return;if(/^\d{4}-\d{2}-\d{2}(T|$)/.test(n)){let r=new Date(n);if(!isNaN(r.getTime()))return r}let t=n.split(/[\/.\-\s]/);if(t.length>=3&&t.every(r=>/^\d+$/.test(r))){let r=z(),o=Pn(r),s={};if(o.forEach((i,a)=>{s[i]=parseInt(t[a],10)}),s.year!==void 0&&s.month!==void 0&&s.day!==void 0){s.year<100&&(s.year+=2e3);let i=new Date(s.year,s.month-1,s.day);if(!isNaN(i.getTime()))return i}}let e=new Date(n);if(isNaN(e.getTime()))throw new Error("Invalid date format");return e}function ft(n){switch(n){case"boolean":return ne;case"number":return Me;case"Date":return ke;case"string":return t=>!t||t==""?void 0:t;default:throw new Error(`Unknown data-type "${n}".`)}}function gt(n){switch(n){case"checkbox":return ne;case"number":return Me;case"date":case"datetime-local":return ke;case"month":return t=>{let[e,r]=t.split("-").map(Number);return new Date(e,r-1)};case"week":return t=>{let[e,r]=t.split("-W").map(Number);return{year:e,week:r}};case"time":return t=>{let[e,r,o=0]=t.split(":").map(Number);return{hours:e,minutes:r,seconds:o}};default:return t=>!t||t==""?void 0:t}}function te(n,t){let e=n;if(t in e&&typeof e[t]=="boolean")return e[t];let r=n.getAttribute(t);return r===null?!1:r===""||r.toLowerCase()==="true"||r.toLowerCase()===t}var ht=Symbol("skip");function Ln(n){let t=n,e=t.type||n.getAttribute("type")||"";if(e==="checkbox")return te(n,"checked");if(e==="radio")return te(n,"checked")?t.value:ht;if(e==="number")return t.value?Number(t.value):null;if(e==="date")return t.value?new Date(t.value):null;if("selectedOptions"in t&&te(n,"multiple"))return Array.from(t.selectedOptions).map(r=>r.value);if("value"in t)return t.value}var xt=new Map;function re(n,t=[]){return function(e){xt.set(n,{validator:e,validInputTypes:t})}}function An(n){return xt.get(n)}var yt,Pe;yt=[re("required")];var H=class H{static create(t){return t==="required"?new H:null}validate(t,e){t.trim()===""&&e.addError(this.getMessage())}getMessage(){return w("r-validation:required")}};Pe=K(null),H=Y(Pe,0,"RequiredValidation",yt,H),Z(Pe,1,H);var $e=H,vt,Le;vt=[re("range",["number"])];var I=class I{constructor(t,e){this.min=void 0;this.max=void 0;this.min=t,this.max=e}static create(t){let e=t.match(/^range\((-?\d+(?:\.\d+)?)-(-?\d+(?:\.\d+)?)\)$/);if(e){let[,r,o]=e;return new I(parseFloat(r),parseFloat(o))}return null}validate(t,e){if(t.trim()==="")return;let r=parseFloat(t);!isNaN(r)&&r>=this.min&&r<=this.max||e.addError(this.getMessage(t))}getMessage(t){return w("r-validation:range",{min:this.min,max:this.max,actual:t})}};Le=K(null),I=Y(Le,0,"RangeValidation",vt,I),Z(Le,1,I);var Fe=I,Et,Ae;Et=[re("digits",["number"])];var D=class D{static create(t){return t==="digits"?new D:null}validate(t,e){/^\d+$/.test(t)||e.addError(this.getMessage())}getMessage(){return w("r-validation:digits")}};Ae=K(null),D=Y(Ae,0,"DigitsValidation",Et,D),Z(Ae,1,D);var He=D;function $n(n,t){n.querySelectorAll("[name]").forEach(r=>{let o=r.getAttribute("name");if(!o)return;if(o.endsWith("[]")){let i=o.slice(0,-2),a=Tt(t,i);if(Array.isArray(a)){let c=r,l=c.type||r.getAttribute("type")||"";if(l==="checkbox"||l==="radio")c.checked=a.includes(c.value);else if("options"in c&&bt(r,"multiple"))a.forEach(p=>{let u=Array.from(c.options).find(d=>d.value===String(p));u&&(u.selected=!0)});else if("value"in c){let p=n.querySelectorAll(`[name="${o}"]`),u=Array.from(p).indexOf(r);u>=0&&u<a.length&&(c.value=String(a[u]))}}return}let s=Tt(t,o);s!=null&&Fn(r,s)})}function Tt(n,t){let e=[],r="",o=!1;for(let s=0;s<t.length;s++){let i=t[s];i==="["&&!o?(r&&(e.push(r),r=""),o=!0,r+=i):i==="]"&&o?(r+=i,e.push(r),r="",o=!1):i==="."&&!o?r&&(e.push(r),r=""):r+=i}return r&&e.push(r),e.reduce((s,i)=>{if(!(!s||typeof s!="object")){if(i.startsWith("[")&&i.endsWith("]")){let a=i.slice(1,-1);return s[a]}return s[i]}},n)}function Fn(n,t){let e=n,r=e.type||n.getAttribute("type")||"";if(r==="checkbox")e.checked=!!t;else if(r==="radio")e.checked=e.value===String(t);else if(r==="date"&&t instanceof Date)e.value=t.toISOString().split("T")[0];else if(r==="datetime-local"&&t instanceof Date){let o=s=>String(s).padStart(2,"0");e.value=`${t.getFullYear()}-${o(t.getMonth()+1)}-${o(t.getDate())}T${o(t.getHours())}:${o(t.getMinutes())}`}else if("options"in e&&bt(n,"multiple")&&Array.isArray(t)){let o=Array.from(e.options),s=t.map(String);o.forEach(i=>{i.selected=s.includes(i.value)})}else"value"in e&&(e.value=String(t))}function bt(n,t){let e=n;if(t in e&&typeof e[t]=="boolean")return e[t];let r=n.getAttribute(t);return r===null?!1:r===""||r.toLowerCase()==="true"||r.toLowerCase()===t}function wt(n){return String(n).toUpperCase()}function Ct(n){return String(n).trimEnd().trimStart()}function Rt(n){return String(n).toLowerCase()}function Nt(n){let t=String(n);return t.charAt(0).toUpperCase()+t.slice(1)}function St(n,t){let e=String(n),r=parseInt(t,10);return e.length>r?e.substring(0,r-3)+"...":e}function Mt(n,t="USD"){let e=z();return new Intl.NumberFormat(e,{style:"currency",currency:t}).format(n)}function kt(n,t){let e=new Date(n),r=z();return t==="short"?e.toLocaleDateString(r):t==="long"?e.toLocaleDateString(r,{weekday:"long",year:"numeric",month:"long",day:"numeric"}):e.toISOString()}function Pt(n){if(!n)return"n/a";let t=new Date(n),e=new Date;t.setHours(0,0,0,0),e.setHours(0,0,0,0);let r=e.getTime()-t.getTime(),o=Math.round(r/(1e3*60*60*24));return o===0?w("r-pipes:today"):o===1?w("r-pipes:yesterday"):w("r-pipes:daysAgo",{count:o})}function Lt(n){if(n==null)return"n/a";let t=Number(n);return w("r-pipes:pieces",{count:t})}function At(n,t=","){return Array.isArray(n)?n.join(t):n}function $t(n){return!Array.isArray(n)||n.length===0?"":n[0]}function Ft(n){return!Array.isArray(n)||n.length===0?"":n[n.length-1]}function Ht(n){return typeof n!="object"||n===null?[]:Object.keys(n)}function It(n,t){return n||t}function Dt(n,t,e){return n?t:e}function Bt(){let n=new Map;return n.set("uppercase",wt),n.set("lowercase",Rt),n.set("capitalize",Nt),n.set("trim",Ct),n.set("shorten",St),n.set("currency",Mt),n.set("date",kt),n.set("daysAgo",Pt),n.set("pieces",Lt),n.set("join",At),n.set("first",$t),n.set("last",Ft),n.set("keys",Ht),n.set("default",It),n.set("ternary",Dt),{lookup(t){return n.get(t)},get(t){var e=n.get(t);if(!e)throw Error("Pipe '"+t+"' not found.");return e},has(t){return n.has(t)}}}var N=Bt();function Ie(n,t,e=N){return t.reduce((r,o)=>{let[s,...i]=o.split(":").map(a=>a.trim());if(!e.has(s))return`[Pipe ${s} not found]`;try{return e.get(s)(r,...i)}catch(a){return`[Pipe ${s}, value: ${n}, error: ${a}]`}},n)}var Hn=N;function Ot(n,...t){let e=document.createElement("template"),r=In(n);e.innerHTML=r;let o=[],s=document.createTreeWalker(e.content,NodeFilter.SHOW_ALL),i;for(;i=s.nextNode();)if(i.nodeType===Node.ELEMENT_NODE){let a=i;Dn(a,t,o),customElements.get(a.tagName.toLowerCase())&&customElements.upgrade(a)}else if(i.nodeType===Node.TEXT_NODE){let a=i,c=a.textContent,l=jt(c,t);if(l)if(/€€\d+€€/.test(c)){let u=null,d=null,m=[];o.push({originalValue:c,setter(f){var x=l(f);u||(u=document.createComment(""),d=document.createComment(""),a.parentNode?.replaceChild(d,a),d.parentNode?.insertBefore(u,d)),m.forEach(T=>T.parentNode?.removeChild(T)),m=[];let g=document.createElement("template");g.innerHTML=x;let b=Array.from(g.content.childNodes),h=d.parentNode;b.forEach(T=>{h.insertBefore(T,d),m.push(T)})}})}else o.push({originalValue:c,setter(u){var d=l(u);a.textContent=d}})}return function(c){return o.forEach(l=>{l.setter(c)}),{fragment:e.content,update(l){o.forEach(p=>{p.setter(l)})}}}}function In(n){return n.raw.map((t,e)=>e<n.raw.length-1?`${t}\u20AC\u20AC${e}\u20AC\u20AC`:t).join("")}function Dn(n,t,e){let r=[];for(let i of Array.from(n.attributes)){var o=i.value;if(o=="")continue;let a=/€€(\d+)€€/,c=o.match(a);if(c){let l=parseInt(c[1],10),p=t[l];if(typeof p=="function"){r.push({setter(u){let d=p.bind(u);n.removeAttribute(i.name),n[i.name]=d}});continue}}var s=jt(o,t);s!=null&&r.push({originalValue:o,setter(l){let p=s(l)??o;i.name in n?n[i.name]=p:i.value=p}})}r.length>0&&e.push({originalValue:n.tagName,setter(i){r.forEach(a=>a.setter(i))}})}function Bn(n,t){return n.split(",").map(e=>{if(e=e.trim(),e.startsWith('"')&&e.endsWith('"')||e.startsWith("'")&&e.endsWith("'"))return e.slice(1,-1);if(!isNaN(Number(e)))return Number(e);if(e.includes(".")){let r=e.split("."),o=t;for(let s of r){if(o==null)return;o=o[s]}return o}return t[e]})}function jt(n,t){let e=/€€(\d+)€€|{{\s*([^|]+?)(?:\|([\w|]+))?\s*}}/g,r=0,o,s=[];for(;(o=e.exec(n))!==null;){var i=n.slice(r,o.index);if(i.length>0&&s.push(c=>i),o[1]){let c=parseInt(o[1],10),l=t[c];if(!l)continue;if(typeof l=="function"){let p=l;s.push(u=>{var d=p.apply(u);return d})}else l&&l.length>0&&s.push(p=>l)}else if(o[2]){let c=o[2].trim(),l=o[3]?o[3].trim():null,p=o[4]?o[4].split("|").map(u=>u.trim()):[];s.push(u=>{var d=u[c];if(typeof d=="function")if(l){let m=Bn(l,u);d=d.apply(u,m)}else d=d.call(u);return p.forEach(m=>{d=Hn[m](d)}),d})}r=e.lastIndex}if(s.length==0)return null;var a=n.slice(r);return a.length>0&&s.push(c=>a),c=>{var l="";return s.forEach(p=>{var u=p(c);l+=u}),l}}function _t(n){let t=n.split("|").map(s=>s.trim()),e=t[0],r=t.slice(1),o=e.match(/^(\w+)\s*\((.*)\)$/);if(o){let[,s,i]=o,a=i?i.split(",").map(c=>c.trim()):[];return{type:"function",fnName:s,fnArgs:a,pipes:r}}return{type:"path",path:e,pipes:r}}function oe(n,t){let r=t.replace(/\[(\d+)\]/g,".$1").split("."),o=n;for(let s of r)if(o&&typeof o=="object"&&s in o)o=o[s];else return;return o}function S(n,t,e,r=!1){let o=`[template error] ${t} (at ${e})`;if(n.onError&&n.onError(o),n.strict||r)throw new Error(o)}function On(n){return function(e,r,o=""){try{let s=oe(e,r);return s===void 0?(S(n,`Cannot resolve "${r}"`,o),""):s===null?"":Array.isArray(s)?s.length>0?JSON.stringify(s):"":typeof s=="object"?JSON.stringify(s):s}catch(s){let i=s instanceof Error?s.message:String(s);return S(n,`Exception resolving "${r}": ${i}`,o,!0),""}}}function Vt(n,t,e,r,o){let s,i=r.pipeRegistry??N;if(n.type==="function"){let a=e?.[n.fnName];if(typeof a!="function")return S(r,`Function "${n.fnName}" not found`,o),"";let c=(n.fnArgs??[]).map(l=>l.startsWith('"')&&l.endsWith('"')||l.startsWith("'")&&l.endsWith("'")?l.slice(1,-1):isNaN(Number(l))?oe(t,l):Number(l));try{s=a(...c)}catch(l){let p=l instanceof Error?l.message:String(l);return S(r,`Error calling "${n.fnName}": ${p}`,o),""}}else{let a=oe(t,n.path);if(a===void 0)return S(r,`Cannot resolve "${n.path}"`,o),"";a===null?s="":typeof a=="object"?s=JSON.stringify(a):s=a}return n.pipes.length>0&&(s=Ie(s,n.pipes,i)),s}var De=new Map;function jn(n,t,e){if(n.nodeType!==Node.TEXT_NODE||!n.textContent?.includes("{{"))return;let r=n.textContent;if(!De.has(r)){let a=r.split(/(\{\{.*?\}\})/).map(c=>{if(c.startsWith("{{")){let l=c.slice(2,-2).trim();return{parsed:_t(l),literal:""}}else return{parsed:null,literal:c}});De.set(r,a)}let o=De.get(r),s=`TextNode: "${r}"`;return(i,a)=>{let c=o.map(({parsed:l,literal:p})=>l?String(Vt(l,i,a,e,s)):p).join("");n.textContent=c}}function _n(n,t,e){if(n.nodeType!==Node.ELEMENT_NODE)return;let r=n,o=[],s=Array.from(r.attributes);for(let i of s){let a=i.value.match(/\{\{(.+?)\}\}/);if(a){let c=a[1].trim(),l=_t(c),p=i.name,u=`Attribute: ${p} on <${r.tagName.toLowerCase()}>`;o.push((d,m)=>{let f=Vt(l,d,m,e,u);r.setAttribute(p,String(f))})}}if(o.length>0)return(i,a)=>o.forEach(c=>c(i,a))}function qt(n,t,e,r,o){if(n.nodeType!==Node.ELEMENT_NODE||!n.hasAttribute(r))return;let s=n,i=s.getAttribute(r),a=s.cloneNode(!0),c=document.createComment(`${r}: ${i}`),l=s.parentNode;l.insertBefore(c,s),s.remove();let p=null,u=null,d=null,m=null;return(f,x)=>{let g=t(f,i,`${r}="${i}"`),b=o(g);if(b&&!p){if(d&&m)p=d,u=m,d=null,m=null;else{let h=a.cloneNode(!0);h.removeAttribute(r),p=h,u=Be(h,e)}u(f,x),l.insertBefore(p,c.nextSibling)}else b&&u&&u(f,x);!b&&p&&(p.remove(),d=p,m=u,p=null,u=null)}}function Vn(n,t,e){return qt(n,t,e,"if",r=>!!r)}function qn(n,t,e){return qt(n,t,e,"unless",r=>!r)}function Un(n,t,e){if(n.nodeType!==Node.ELEMENT_NODE||!n.hasAttribute("loop"))return;let r=n,o=r.getAttribute("loop"),s=o.match(/(\w+)\s+in\s+(.+)/);if(!s){S(e,`Invalid loop syntax: "${o}"`,`Element: <${r.tagName.toLowerCase()}>`);return}let[,i,a]=s,c=r.cloneNode(!0);c.removeAttribute("loop");let l=r.parentNode,p=document.createComment(`loop: ${o}`);l.insertBefore(p,r),r.remove();let u=[];return(d,m)=>{let f=oe(d,a);if(f===void 0){S(e,`Cannot resolve "${a}"`,`Loop source: "${o}"`);return}if(!Array.isArray(f)){S(e,`"${a}" is not an array in loop: "${o}"`,`Element: <${c.tagName.toLowerCase()}>`);return}let x=Math.min(u.length,f.length);for(let g=0;g<x;g++)u[g].renderer({...d,[i]:f[g]},m);for(let g=u.length-1;g>=f.length;g--)u[g].element.remove();if(f.length>x){let g=document.createDocumentFragment(),b=[];for(let T=x;T<f.length;T++){let y=c.cloneNode(!0),L=Be(y,e);L({...d,[i]:f[T]},m),g.appendChild(y),b.push({element:y,renderer:L})}let h=x>0?u[x-1].element:p;l.insertBefore(g,h.nextSibling),u=u.slice(0,x).concat(b)}else u.length=f.length}}var zn=[Un,Vn,qn],Wn=[jn,_n];function Be(n,t){let e=[],r=On(t);function o(a){for(let c of zn){let l=c(a,r,t);if(l){e.push(l);return}}for(let c of Wn){let l=c(a,r,t);l&&e.push(l)}for(let c of Array.from(a.childNodes))o(c)}o(n);let s=null,i;return(a,c)=>{(s!==a||i!==c)&&(e.forEach(l=>l(a,c)),s=a,i=c)}}function Ut(n,t={strict:!1}){let o=new DOMParser().parseFromString(`<template><div>${n}</div></template>`,"text/html").querySelector("template").content.firstElementChild,s=Be(o,t);return{content:o,render:s}}function Gn(n,t={}){let{delimiter:e=".",escapeChar:r="\\"}=t;if(!n||typeof n!="string")throw new Error("Notation must be a non-empty string");let o=[],s="",i=0,a=!1,c="";for(;i<n.length;){let l=n[i],p=n.substring(i,e.length+i),u=n[i+1],d=n.substring(i+1,e.length+i+1);if(l===r&&(d===e||u==="["||u==="]"))a?c+=u:s+=u,i+=2;else if(l==="["&&!a)s&&(o.push({type:"property",key:s}),s=""),a=!0,c="",i++;else if(l==="]"&&a){if(!/^\d+$/.test(c.trim()))throw new Error(`Invalid array index: [${c}]. Only numeric indices are supported.`);o.push({type:"index",key:c.trim()}),a=!1,c="",i++}else p===e&&!a?(s&&(o.push({type:"property",key:s}),s=""),i+=e.length):a?(c+=l,i++):(s+=l,i++)}if(a)throw new Error("Unclosed bracket in notation");if(s&&o.push({type:"property",key:s}),o.length===0)throw new Error("Invalid notation: must contain at least one property or index");return o}function Jn(n){return t=>{let e=t;for(let r of n){if(e==null)return;if(r.type==="property"){if(typeof e!="object")return;e=e[r.key]}else if(r.type==="index"){if(!Array.isArray(e))return;let o=parseInt(r.key,10);if(o<0||o>=e.length)return;e=e[o]}}return e}}function se(n,t={}){let e=Gn(n,t);return Jn(e)}function Wt(n){let t=[],e=0;for(;e<n.length;){let r=n[e];if(/\s/.test(r)){e++;continue}if(r==="|"){for(e++;e<n.length&&/\s/.test(n[e]);)e++;let o="";for(;e<n.length&&!/[\s\(\)\[\]\{\}\|\+\-\*\/\=\;\,\.]/.test(n[e]);)o+=n[e],e++;t.push({type:3,value:o});continue}if(r==='"'||r==="'"){let o=r,s=o;for(e++;e<n.length&&n[e]!==o;)n[e]==="\\"&&e+1<n.length&&n[e+1]===o?(s+="\\"+o,e+=2):(s+=n[e],e++);e<n.length&&(s+=o,e++),t.push({type:0,value:s});continue}if(/[0-9]/.test(r)){let o="",s=!1;for(;e<n.length&&(/[0-9]/.test(n[e])||n[e]==="."&&!s);)n[e]==="."&&(s=!0),o+=n[e],e++;t.push({type:0,value:o});continue}if(/[a-zA-Z_$]/.test(r)){let o="",s=!1;for(;e<n.length;)if(/[a-zA-Z0-9_$.]/.test(n[e]))o+=n[e],e++;else if(n[e]==="["){let l=1;for(o+=n[e++];e<n.length&&l>0;)n[e]==="["&&l++,n[e]==="]"&&l--,o+=n[e++]}else break;let i=0;for(;e<n.length&&/\s/.test(n[e]);)i++,e++;if(e<n.length&&n[e]==="("){s=!0,o+="(",e++;let l=1;for(;e<n.length&&l>0;)n[e]==="("&&l++,n[e]===")"&&l--,o+=n[e++]}else e-=i;let a=t[t.length-1],c=n[e-o.length-1]==="."&&a?.type===0;t.push({type:s||c?1:2,value:o});continue}e++}return t}function ie(n){let t=[],e=n.indexOf("("),r=n.lastIndexOf(")");if(e===-1||r===-1||r<=e)throw new Error("Invalid function call syntax");let o=n.slice(e+1,r),s=0;for(;s<o.length;){let i=o[s];if(/\s/.test(i)){s++;continue}if(i==='"'||i==="'"){let a=i,c="";for(s++;s<o.length&&o[s]!==a;)o[s]==="\\"?(s++,s<o.length&&(c+=o[s])):c+=o[s],s++;if(s>=o.length)throw new Error("Unterminated string in arguments");s++,t.push({type:"string",value:c});continue}if(/[0-9]/.test(i)){let a="";for(;s<o.length&&/[0-9.]/.test(o[s]);)a+=o[s],s++;t.push({type:"number",value:parseFloat(a)});continue}if(/[a-zA-Z_]/.test(i)){let a="";for(;s<o.length&&/[a-zA-Z0-9_\.]/.test(o[s]);)a+=o[s],s++;t.push({type:"identifier",value:a});continue}if(i===","){s++;continue}throw new Error(`Unexpected character in arguments: ${i}`)}return t}function Gt(n){let t=[],e=0;for(;e<n.length;){let r=n.indexOf("{{",e);if(r===-1){t.push(zt(n.slice(e)));break}r>e&&t.push(zt(n.slice(e,r)));let{value:o,endIndex:s,balanced:i}=Kn(n,r);if(!i)throw new Error(`Unclosed mustache tag starting at index ${r}, template: ${n}`);t.push(Xn(o)),e=s}return t}function zt(n){return{type:"string",value:n}}function Xn(n){return{type:"mustache",value:n}}function Kn(n,t){let e="{{",r="}}",o=t+e.length,s=1;for(;o<n.length&&s>0;)n.slice(o,o+e.length)===e?(s++,o+=e.length):n.slice(o,o+r.length)===r?(s--,o+=r.length):o++;let i=s===0,a=i?o:n.length;return{value:n.slice(t,a),endIndex:a,balanced:i}}function Oe(n,t){let e=Gt(n).map(r=>r.type==="string"?(o,s)=>r.value:Zn(r,t));return(r,o)=>e.map(s=>s(r,o)).join("")}function Zn(n,t){let e=Wt(n.value),r=Yn(e,n.value,t?.pipeRegistry);return Qn(r)}function Yn(n,t,e){let r=null;e||(e=N);for(let o of n)switch(o.type){case 0:throw Error(`Constants not supported: ${o.value}`);case 2:{r={source:se(o.value),pipes:[]};break}case 1:{r={source:er(o.value),pipes:[]};break}case 3:{if(!r)throw Error(`Pipe '${o.value}' has no input expression in: ${t}`);if(!o.value||o.value==="")throw Error("Pipe symbol was provided, but no pipes. Template: "+t);let[s,...i]=o.value.split(":").map(c=>c.trim()),a=e.lookup(s);if(!a)throw Error(`Pipe not found: ${s}`);r.pipes.push(c=>a(c,i));break}}if(!r)throw Error(`Invalid expression: ${t}`);return r}function Qn(n){return(t,e)=>{let r=n.source(t,e),o=n.pipes.reduce((s,i)=>i(s),r);return o!=null?o.toString():""}}function er(n){let t=n.indexOf("(");if(t===-1)throw Error(`Invalid function: ${n}`);let r=ie(n).map(i=>{if(i.type==="number"||i.type==="string")return()=>i.value;if(i.type==="identifier")return a=>se(i.value)(a);throw Error(`Unsupported argument type: ${i.type}`)}),o=n.substring(0,t),s=se(o);return(i,a)=>{if(!a)throw Error(`Component context is required for calling '${o}'`);let c=s(a);if(typeof c!="function")throw Error(`Resolved '${o}' is not a function`);let l=r.map(p=>p(i));return c.apply(a,l)}}var ae=class{constructor(t,e,r,o){this.root=t;this.bindings=e;this.clickBindings=r;this.component=o}render(t){for(let e of this.bindings)e.type==="text"?e.func(t,e.node):e.func(t,e.element);for(let e of this.clickBindings){let r=this.getNodeAtPath(this.root,e.path),o=this.component?.[e.methodName];r instanceof HTMLElement&&typeof o=="function"&&(r.onclick=s=>{let i=e.argTokens.map(a=>{if(a.type==="number"||a.type==="string")return a.value;if(a.type==="identifier")return a.value==="event"?s:a.value.split(".").reduce((l,p)=>l?.[p],t)});o.apply(this.component,i)})}return this.root}getNodeAtPath(t,e){return e.reduce((r,o)=>r.childNodes[o],t)}};function tr(n){var t=new ce(n);return t}var ce=class{constructor(t){if(typeof t=="string"){let r=t.trim();if(r.startsWith("<template")){let o=document.createElement("div");o.innerHTML=r;let s=o.querySelector("template");if(!s)throw new Error("Could not find <template> in input string");this.template=s}else this.template=document.createElement("template"),this.template.innerHTML=r}else this.template=t;let e=this.getRootElement();this.bindings=this.collectBindings(e),this.clickBindings=this.collectClickBindings(e)}createInstance(t){let e=this.getRootElement().cloneNode(!0),r=this.bindings.map(o=>{let s=this.getNodeAtPath(e,o.path);return o.type==="text"?{type:"text",node:s,func:(i,a)=>o.func(i,t,a)}:{type:"attribute",element:s,name:o.name,func:(i,a)=>o.func(i,t,a)}});return new ae(e,r,this.clickBindings,t)}getRootElement(){let t=Array.from(this.template.content.childNodes).find(e=>e.nodeType===Node.ELEMENT_NODE);if(!(t instanceof HTMLElement))throw new Error("Template must contain a single root element");return t}collectBindings(t){let e=[],r=(o,s=[])=>{if(o.nodeType===Node.TEXT_NODE&&o.textContent&&o.textContent.match(/\{\{\s*(.*?)\s*\}\}/g)){let i=Oe(o.textContent);e.push({type:"text",path:[...s],func:(a,c,l)=>{l.textContent=i(a,c)}})}if(o.nodeType===Node.ELEMENT_NODE){let i=o;if(i.tagName==="TEMPLATE")return;for(let a=0;a<i.attributes.length;a++){let c=i.attributes[a];if(c.value.match(/\{\{\s*(.*?)\s*\}\}/g)){let l=Oe(c.value);e.push({type:"attribute",path:[...s],name:c.name,func:(p,u,d)=>{d.setAttribute(c.name,l(p,u))}})}}Array.from(o.childNodes).forEach((a,c)=>{r(a,[...s,c])})}};return r(t),e}collectClickBindings(t){let e=[],r=(o,s=[])=>{if(o.nodeType===Node.ELEMENT_NODE){let a=o.getAttribute("click");if(a?.trim()){let c=a.trim(),l=c.match(/^([a-zA-Z_$][\w$]*)\s*\((.*)\)$/);if(l){let p=l[1],u=ie(c);e.push({path:[...s],methodName:p,argTokens:u})}else e.push({path:[...s],methodName:c,argTokens:[]})}Array.from(o.childNodes).forEach((c,l)=>{r(c,[...s,l])})}};return r(t),e}getNodeAtPath(t,e){return e.reduce((r,o)=>r.childNodes[o],t)}};var le=class{constructor(t,e,r,o){this.dataMap=new Map;this.rowMap=new Map;this.table=t,this.template=e,this.IdColumn=r,this.component=o}render(t){this.clearRows();for(let e of t)this.renderRow(e)}clearRows(){this.table.tBodies[0].innerHTML="",this.dataMap.clear(),this.rowMap.clear()}renderRow(t){let e=t[this.IdColumn];if(e==null)throw new Error(`Missing IdColumn '${this.IdColumn}' in data`);let r=this.template.content.firstElementChild?.cloneNode(!0);if(!r)throw new Error("Template must have a <tr> as its first child");this.populateRow(r,t),this.attachEventHandlers(r,t),this.table.tBodies[0].appendChild(r),this.dataMap.set(e,t),this.rowMap.set(e,r)}populateRow(t,e){t.querySelectorAll("[data-field]").forEach(o=>{let s=o.dataset.field;s&&s in e&&(o.textContent=String(e[s]))})}attachEventHandlers(t,e){t.querySelectorAll("[onclick]").forEach(o=>{let s=o,i=s.getAttribute("onclick");if(!i)return;let a=i.match(/^(\w+)(\(([^)]*)\))?$/);if(!a)return;let[,c,,l]=a,p=l?l.split(",").map(u=>u.trim().replace(/^['"]|['"]$/g,"")):[];typeof this.component[c]=="function"&&(s.removeAttribute("onclick"),s.addEventListener("click",u=>{this.component[c](...p,e,u)}))})}update(t){let e=t[this.IdColumn];if(e==null)throw new Error(`Missing IdColumn '${this.IdColumn}' in update data`);let r=this.rowMap.get(e);r?(this.populateRow(r,t),this.attachEventHandlers(r,t),this.dataMap.set(e,t)):this.renderRow(t)}},W=class extends CustomEvent{constructor(t){super("sortchange",{detail:t,bubbles:!0,composed:!0})}},ue=class{constructor(t,e){this.sortColumns=[];this.table=t,this.component=e,this.setupListeners()}setupListeners(){this.table.tHead?.querySelectorAll("th[name]")?.forEach(e=>{e.addEventListener("click",()=>{let r=e.getAttribute("name");this.toggle(r),this.updateSortIndicators(),this.emit()})})}toggle(t){let e=this.sortColumns.findIndex(r=>r.column===t);e===-1?this.sortColumns.push({column:t,direction:"asc"}):this.sortColumns[e].direction==="asc"?this.sortColumns[e].direction="desc":this.sortColumns.splice(e,1)}emit(){let t=new W(this.sortColumns);this.component.dispatchEvent(t)}updateSortIndicators(){this.table.tHead?.querySelectorAll("th[name]")?.forEach(e=>{let r=e.querySelector(".sort-indicator");r&&e.removeChild(r);let o=e.getAttribute("name"),s=this.sortColumns.find(i=>i.column===o);if(s){let i=document.createElement("span");i.className="sort-indicator",i.textContent=s.direction==="asc"?"\u2191":"\u2193",i.style.float="right",i.style.marginLeft="5px",e.appendChild(i)}e.style.position||(e.style.position="relative")})}getSortColumns(){return[...this.sortColumns]}clear(){this.sortColumns=[],this.updateSortIndicators(),this.emit()}};var pe=(o=>(o[o.Allow=0]="Allow",o[o.Deny=1]="Deny",o[o.Continue=2]="Continue",o[o.Stop=3]="Stop",o))(pe||{}),k=class extends Error{},P=class extends k{};var C=class n extends Event{constructor(e,r,o,s,i){super(n.NAME,i);this.route=e;this.urlSegments=r;this.routeData=o;this.routeTarget=s}static{this.NAME="rlx.navigateRoute"}};var G=new Map,de=new Map;function me(n,t){if(je(),G.has(n)){let r=v("Duplicate route target",{target:n??"default"});if(r)throw r;return}G.set(n,t);let e=de.get(n);e&&(de.delete(n),t(e))}function fe(n){G.delete(n)}function Xt(){de.clear(),G.clear()}function nr(n){let t=G.get(n.routeTarget);t?t(n):de.set(n.routeTarget,n)}var Jt=!1;function je(){Jt||(Jt=!0,document.addEventListener(C.NAME,n=>{nr(n)}))}var _e=class{constructor(t){this.paramName=t}isMatch(t){return!!/^\d+$/.test(t)}getValue(t){if(/^\d+$/.test(t)===!1)throw new Error(`Path is not a number, parameter name '${this.paramName}', value: '${t}'.`);return parseInt(t)}},Ve=class{constructor(t){this.paramName=t}isMatch(t){return!0}getValue(t){return t}},qe=class{constructor(t){this.value=t}isMatch(t){return t==this.value}getValue(t){return this.value}},Ue=class{constructor(t,e){this.route=t;this.segments=e}match(t){if(t.length!=this.segments.length)return null;let e=[];var r={};for(let o=0;o<t.length;o++){let s=t[o],i=this.segments[o];if(!i.isMatch(s))return null;if(i.paramName){let a=i.getValue(s);r[i.paramName]=a,e.push(a.toString())}else e.push(s)}return{route:this.route,params:r,urlSegments:e}}buildUrl(t){let e=[];for(let o=0;o<this.segments.length;o++){let s=this.segments[o];if(s.paramName){var r=t[s.paramName];if(!r)throw new Error(`Route "${this.route.name}" did not get value for parameter "${s.paramName} from the provided routeData: "${JSON.stringify(t)}".`);e.push(r.toString())}else e.push(s.getValue("").toString())}return{route:this.route,params:t,urlSegments:e}}parseParameters(t){let e={};return this.segments.forEach(r=>{if(r.paramName){if(!r.isMatch(o))throw new Error(`Failed to convert parameter ${r.paramName}, or missing value: ${o}, route: ${this.route.name}.`);var o=t[r.paramName];if(!o)throw new Error(`Parameter ${r.paramName} was not provided, route: ${this.route.name}.`);var s=r.getValue(o);e[r.paramName]=s}}),e}};function ge(n,t,e){return t===""||t.indexOf("/")>=0?We(n,t||"/"):ze(n,t,e)}function ze(n,t,e){var r=n.find(i=>i.name===t);if(!r)return null;var o=Kt(r),s=o.buildUrl(e);return s}function We(n,t){let e=t.replace(/^\/|\/$/g,"").split("/"),r=rr(n);for(let o=0;o<r.length;o++){let i=r[o].match(e);if(i)return i}return null}function rr(n){let t=[];return n.forEach(e=>{var r=Kt(e);t.push(r)}),t}function Kt(n){var t=[];n.path.replace(/^\/|\/$/g,"").split("/").forEach(o=>{o.substring(0,1)==":"?t.push(new Ve(o.substring(1))):o.substring(0,1)===";"?t.push(new _e(o.substring(1))):o.substring(0,1)==="{"||t.push(new qe(o))});var r=new Ue(n,t);return r}var B=class extends HTMLElement{static get observedAttributes(){return["name","target","params"]}constructor(){super(),this.addEventListener("click",t=>this.handleClick(t))}handleClick(t){t.preventDefault();let e=this.getAttribute("name");if(!e)return;console.log("Calling printRoutes from RouteLink in relaxjs/components"),he();let r={};for(let a of Array.from(this.attributes))if(a.name.startsWith("param-")){let c=a.name.substring(6);r[c]=a.value}let o=this.getAttribute("params"),s;if(o)try{s=JSON.parse(o)}catch(a){let c=v("Failed to parse route params",{element:"r-link",params:o,cause:a});if(c)throw c}let i=this.getAttribute("target");s&&Object.assign(r,s);try{J(e,{params:r,target:i||void 0})}catch(a){if(a instanceof R)throw a;let c=v("Navigation failed",{element:"r-link",route:e,params:r,target:i,cause:a});if(c)throw c}}connectedCallback(){this.hasAttribute("tabindex")||this.setAttribute("tabindex","0"),this.style.cursor="pointer",this.role="link"}disconnectedCallback(){this.removeEventListener("click",this.handleClick)}};var O=class extends HTMLElement{constructor(){super(...arguments);this.name=void 0}connectedCallback(){this.name=this.getAttribute("name")??void 0,this.hasAttribute("dialog")&&(this.dialog=document.createElement("dialog"),this.dialog.addEventListener("close",()=>{this.dialog.replaceChildren()}),this.appendChild(this.dialog)),me(this.name,e=>this.onNavigate(e)),console.log("registered")}disconnectedCallback(){fe(this.name)}onNavigate(e){console.log("got nav",e),this.loadComponent(e).catch(r=>{r instanceof R||(r=v("Route navigation failed",{route:e.route.name,routeTarget:e.routeTarget,cause:r})),r&&console.error(r)})}async loadComponent(e){let r=e.route.componentTagName??customElements.getName(e.route.component);if(!r){let s=v("Failed to find component for route",{route:e.route.name,componentTagName:e.route.componentTagName,component:e.route.component?.name,routeData:e.routeData});if(s)throw s;return}await customElements.whenDefined(r);let o=document.createElement(r);await this.applyRouteData(o,e.routeData),this.dialog?(this.dialog.replaceChildren(o),this.dialog.open||this.dialog.showModal()):document.startViewTransition?document.startViewTransition(()=>this.replaceChildren(o)):this.replaceChildren(o)}close(){this.dialog?.close()}async applyRouteData(e,r){if("loadRoute"in e){let o=r??{error:"loadRoute function without mapped route data in the routes"};await e.loadRoute(o)}r&&(e.routeData=r)}};var j=or()??"default";function or(){let n=window.location.pathname;return n=="/index.html"?"default":n.endsWith(".html")?n.slice(1,-5):null}var _=[];function he(){console.log(_)}function Zt(n){console.log("defining routes1",n),je(),customElements.get("r-route-target")||customElements.define("r-route-target",O),customElements.get("r-link")||customElements.define("r-link",B),console.log("defining routes",n),_.length=0,_.push(...n);var t=[];if(n.forEach(e=>{e.componentTagName&&!customElements.get(e.componentTagName)&&t.push(`Component with tagName '${e.componentTagName}' is not defined in customElements.`),e.component&&!customElements.getName(e.component)&&t.push(`Component '${e.component.name}' is not defined in customElements. Used in route '${JSON.stringify(e)}'.`),e.layout===""&&(console.log("should not use empty string layout.",e),e.layout=void 0)}),t.length>0)throw new Error(t.join(`
2
+ `))}function Yt(){let n=!1;if(j==""){let i=window.location.pathname.match(/\/([^\/]+)\.html$/);i&&i[1]!==""?(console.log("setting current layut",i[1]),j=i[1],n=!0):(console.log("Setting default layout name"),j="default")}if(sr())return;let t=window.location.pathname.replace(/^\/|\/$/g,"")||"/",e=Qt(t,{}),r=new URLSearchParams(window.location.search);if(r.size>0&&(e.params??={},r.forEach((s,i)=>{e.params[i]=s})),en(e))return;history.replaceState(e.urlSegments,"","/"+e.urlSegments.join("/"));let o=new C(e.route,e.urlSegments,e.params,e.route.target);document.dispatchEvent(o)}function J(n,t){console.log("navigating to ",n,t);let e=Qt(n,t);if(en(e))return;let r=t?.target??e.route.target,o=e.urlSegments.join("/");window.location.pathname.replace(/^\/|\/$/g,"")!=o&&history.pushState(e.urlSegments,"","/"+e.urlSegments.join("/"));let i=new C(e.route,e.urlSegments,e.params,r);document.dispatchEvent(i)}function Qt(n,t){let e=t?.routes??_,r=t?.params,o=ge(e,n,r);if(!o){let s=ir(n,r,e);throw console.error(s),new k(s)}if(!ar(o))throw new P("Route guards stopped navigation for route "+n);return o}function en(n){n||console.error("Route result is null, cannot navigate to layout.");let t=(n.route.layout??"default").replace(/\.html?$/,"");if(t===j)return!1;if(console.log("Current layout: "+j,"Wanted layout: "+t),window.location.hash)throw Error('A redirect failed, does the requsted layout exist? "'+t+'"?');console.log(`requires layout switch from ${j} to ${t}`);let e={routeName:n.route.name,params:n.params||{}};sessionStorage.setItem("layoutNavigation",JSON.stringify(e));let r=t.indexOf(".htm")>-1?`/${t}#layout`:`/${t}.html#layout`;return console.log("redirecting to ",r),window.location.href=r,!0}function sr(){try{let n=sessionStorage.getItem("layoutNavigation");if(!n)return!1;let t=JSON.parse(n);return sessionStorage.removeItem("layoutNavigation"),console.log("session store navigation ",t),J(t.routeName,{params:t.params}),!0}catch(n){return sessionStorage.removeItem("layoutNavigation"),v("Failed to navigate from session storage",{cause:n}),!1}}function ir(n,t,e){var r="";t?r+=Object.entries(t).map(([s,i])=>`${s}=${i}`).join(", "):r=".";var o=e.map(s=>` * Name: '${s.name}', path: '${s.path}', target: ${s.target??"default"}
3
3
  `);return`No route matched '${n}${r}'. Available routes:
4
- ${o}`}function ar(n){if(!n||!n.route.guards||n.route.guards.length==0)return!0;for(let e=0;e<n.route.guards.length;e++){let r=n.route.guards[e];var t=r.check(n);if(t==0)return!0;if(t==3)return!1;if(t==1)throw new P(`Guard ${r.constructor.name} said 'Deny' for ${n.route.name}`)}return!0}function cr(n){return(t,e)=>{var r=tn.resolve(n);return function(){return r}}}function lr(n){return t=>{let e=n??{inject:[]};e.key?ve.register(t,e):ve.registerByType(t,e)}}var ge=class{constructor(t,e,r,o={},s,i){this.classConstructor=t;this.scope=e;this.inject=r;this.properties=o;this.key=s;this.instance=i}},he=class{constructor(){this.servicesByKey=new Map;this.servicesByClassName=new Map}register(t,e){this.validateRegistration(t,e);let r=new ge(t,e.scope??"global",e.inject,e.properties??{},e.key,e.instance);e.key&&this.servicesByKey.set(e.key,r),this.servicesByClassName.set(t.name,r)}registerByType(t,e){this.checkNameCollision(t),e&&this.validateRegistration(t,e);let r=new ge(t,e?.scope,e?.inject??[],e?.properties,e?.key,e?.instance);e?.key&&this.servicesByKey.set(e.key,r),this.servicesByClassName.set(t.name,r)}checkNameCollision(t){let e=this.servicesByClassName.get(t.name);if(e&&e.classConstructor!==t){let r=v("Service name collision: different class registered with same name",{service:t.name});if(r)throw r}}validateRegistration(t,e){if(this.checkNameCollision(t),e.key){let r=this.servicesByKey.get(e.key);if(r&&r.classConstructor!==t){let o=v("Service key already registered to a different class",{key:e.key,existingClass:r.classConstructor.name,newClass:t.name});if(o)throw o}}if(e.instance&&e.inject.length>0){let r=v("Service has both instance and inject (inject will be ignored)",{service:t.name});if(r)throw r}}tryGet(t){return typeof t=="string"?this.servicesByKey.get(t):this.servicesByClassName.get(t.name)}get(t){let e=this.tryGet(t);if(!e){let r=typeof t=="string"?t:t.name,o=v(`Failed to resolve service '${r}'`,{service:r,registeredTypes:Array.from(this.servicesByClassName.keys()),registeredKeys:Array.from(this.servicesByKey.keys())});if(o)throw o}return e}};var ye=class{constructor(t){this.serviceCollection=t;this.instances=new Map}resolve(t){let e=typeof t=="string"?t:t.name;if(this.instances.has(e))return this.instances.get(e);let r=this.serviceCollection.get(t);if(!r){let s=v(`Failed to resolve service '${e}'`,{service:e});if(s)throw s;return}if(r.instance){let s=r.instance;return this.injectFields(s,r),this.instances.set(e,s),s}let o=this.createInstance(r);return r.scope==="global"&&this.instances.set(e,o),this.injectFields(o,r),o}createInstance(t){let e=t.classConstructor,r=t.inject.map(o=>this.resolve(o));return new e(...r)}injectFields(t,e){for(let[r,o]of Object.entries(e.properties))t[r]=this.resolve(o)}},ve=new he,tn=new ye(ve);function ur(n,t){let e=n.parentElement;for(;e;){if(e instanceof t)return e;e=e.parentElement}return null}var pr=Math.floor(new Date("2025-01-01T00:00:00Z").getTime()/1e3),nn=0,Ee=0;function rn(n){if(n<0||n>1048575)throw new Error("baseId must be between 0 and 1048575");let t=Math.floor(Date.now()/1e3);if(t===nn){if(Ee++,Ee>255)throw new Error("Too many IDs generated in one second")}else nn=t,Ee=0;let e=t-pr;if(e>1073741823)throw new Error("Timestamp exceeds allowed range (beyond 2045-01-01)");let r=BigInt(e),o=BigInt(Ee),s=BigInt(n);return(r<<BigInt(28)|o<<BigInt(20)|s).toString(36).toLowerCase()}var We=class extends Error{constructor(t){super(t.statusReason),this.message=t.statusReason,this.response=t}},E={bearerTokenName:"jwt"},on=fetch;function dr(n){on=n??fetch}function mr(n){E={...E,...n},n.bearerTokenName===void 0&&(E.bearerTokenName="jwt")}async function J(n,t){if(E.bearerTokenName){let o=localStorage.getItem(E.bearerTokenName);if(o&&t){let s=t?.headers?new Headers(t.headers):new Headers;s.get("Authorization")||s.set("Authorization","Bearer "+o),t.headers=s}}E.timeout&&!t?.signal&&(t??={},t.signal=AbortSignal.timeout(E.timeout)),E.baseUrl&&(n[0]!=="/"&&E.baseUrl[E.baseUrl.length-1]!=="/"?n=`${E.baseUrl}/${n}`:n=E.baseUrl+n);let e=await on(n,t);if(!e.ok)return{statusCode:e.status,statusReason:e.statusText,success:!1,contentType:e.headers.get("content-type"),body:await e.text(),charset:e.headers.get("charset"),as(){throw new Error("No response received")}};let r=null;return e.status!==204&&(r=await e.json()),{success:!0,statusCode:e.status,statusReason:e.statusText,contentType:e.headers.get("content-type"),body:r,charset:e.headers.get("charset"),as(){return r}}}async function fr(n,t,e){if(e?e.method="GET":e={method:"GET",headers:{"content-type":E.contentType??"application/json"}},t){let r="&";n.indexOf("?")===-1&&(r="?");for(let o in t){let s=t[o];n+=`${r}${o}=${s}`,r="&"}}return J(n,e)}async function gr(n,t,e){return e?(e.method="POST",e.body=t):e={method:"POST",body:t,headers:{"content-type":E.contentType??"application/json"}},J(n,e)}async function hr(n,t,e){return e?(e.method="PUT",e.body=t):e={method:"PUT",body:t,headers:{"content-type":E.contentType??"application/json"}},J(n,e)}async function yr(n,t){return t?t.method="DELETE":t={method:"DELETE",headers:{"content-type":E.contentType??"application/json"}},J(n,t)}var xe=class extends Event{constructor(e,r,o){super(e,{bubbles:!0,...o});this.data=r}},Ge=class{constructor(t,e){this.url=t;this.options=e;this.target=this.resolveTarget(e?.target)}get connected(){return this.eventSource?.readyState===EventSource.OPEN}connect(){if(this.eventSource)return;let t=new EventSource(this.url,{withCredentials:this.options?.withCredentials??!1});if(this.eventSource=t,t.onopen=()=>{this.options?.onConnect?.(this)},t.onerror=e=>{this.options?.onError?.(this,e)},this.options?.eventTypes&&this.options.eventTypes.length>0)for(let e of this.options.eventTypes)t.addEventListener(e,r=>{this.dispatchEvent(e,r.data)});else t.onmessage=e=>{this.dispatchEvent("message",e.data)}}disconnect(){this.eventSource?.close(),this.eventSource=void 0}resolveTarget(t){if(!t)return document;if(typeof t=="string"){let e=document.querySelector(t);if(!e)throw new Error(`SSEClient: Target element not found: ${t}`);return e}return t}dispatchEvent(t,e){let r;if(e.length>0&&(e[0]==="{"||e[0]==="["||e[0]==='"'))try{r=JSON.parse(e)}catch{r=e}else r=e;let o=this.options?.eventFactory?this.options.eventFactory(t,r):new xe(t,r);this.target.dispatchEvent(o)}};function vr(n,t){let e=t;for(let r of n){if(e==null)return;e=e[r]}return e??void 0}var Te=class extends Event{constructor(e){super("pageselected",{bubbles:!0,composed:!0});this.page=e}},Je=class{constructor(t,e,r){this.currentPage=1;this.container=t,this.totalCount=e,this.pageSize=r,this.render()}render(){this.container.innerHTML="";let t=Math.max(1,Math.ceil(this.totalCount/this.pageSize)),e=(r,o,s=!1)=>{let i=document.createElement("button");return i.textContent=r,i.disabled=s,i.addEventListener("click",()=>this.selectPage(o)),i};this.container.appendChild(e("Previous",this.currentPage-1,this.currentPage===1));for(let r=1;r<=t;r++){let o=e(r.toString(),r);r===this.currentPage&&o.classList.add("selected"),this.container.appendChild(o)}this.container.appendChild(e("Next",this.currentPage+1,this.currentPage===t))}selectPage(t){let e=Math.max(1,Math.ceil(this.totalCount/this.pageSize));t<1||t>e||t===this.currentPage||(this.currentPage=t,this.render(),this.container.dispatchEvent(new Te(this.currentPage)))}update(t){this.totalCount=t;let e=Math.max(1,Math.ceil(this.totalCount/this.pageSize));this.currentPage>e&&(this.currentPage=e),this.render()}getCurrentPage(){return this.currentPage}};
4
+ ${o}`}function ar(n){if(!n||!n.route.guards||n.route.guards.length==0)return!0;for(let e=0;e<n.route.guards.length;e++){let r=n.route.guards[e];var t=r.check(n);if(t==0)return!0;if(t==3)return!1;if(t==1)throw new P(`Guard ${r.constructor.name} said 'Deny' for ${n.route.name}`)}return!0}function cr(n){return(t,e)=>{var r=tn.resolve(n);return function(){return r}}}function lr(n){return t=>{let e=n??{inject:[]};e.key?xe.register(t,e):xe.registerByType(t,e)}}var ye=class{constructor(t,e,r,o={},s,i){this.classConstructor=t;this.scope=e;this.inject=r;this.properties=o;this.key=s;this.instance=i}},ve=class{constructor(){this.servicesByKey=new Map;this.servicesByClassName=new Map}register(t,e){this.validateRegistration(t,e);let r=new ye(t,e.scope??"global",e.inject,e.properties??{},e.key,e.instance);e.key&&this.servicesByKey.set(e.key,r),this.servicesByClassName.set(t.name,r)}registerByType(t,e){this.checkNameCollision(t),e&&this.validateRegistration(t,e);let r=new ye(t,e?.scope,e?.inject??[],e?.properties,e?.key,e?.instance);e?.key&&this.servicesByKey.set(e.key,r),this.servicesByClassName.set(t.name,r)}checkNameCollision(t){let e=this.servicesByClassName.get(t.name);if(e&&e.classConstructor!==t){let r=v("Service name collision: different class registered with same name",{service:t.name});if(r)throw r}}validateRegistration(t,e){if(this.checkNameCollision(t),e.key){let r=this.servicesByKey.get(e.key);if(r&&r.classConstructor!==t){let o=v("Service key already registered to a different class",{key:e.key,existingClass:r.classConstructor.name,newClass:t.name});if(o)throw o}}if(e.instance&&e.inject.length>0){let r=v("Service has both instance and inject (inject will be ignored)",{service:t.name});if(r)throw r}}tryGet(t){return typeof t=="string"?this.servicesByKey.get(t):this.servicesByClassName.get(t.name)}get(t){let e=this.tryGet(t);if(!e){let r=typeof t=="string"?t:t.name,o=v(`Failed to resolve service '${r}'`,{service:r,registeredTypes:Array.from(this.servicesByClassName.keys()),registeredKeys:Array.from(this.servicesByKey.keys())});if(o)throw o}return e}};var Ee=class{constructor(t){this.serviceCollection=t;this.instances=new Map}resolve(t){let e=typeof t=="string"?t:t.name;if(this.instances.has(e))return this.instances.get(e);let r=this.serviceCollection.get(t);if(!r){let s=v(`Failed to resolve service '${e}'`,{service:e});if(s)throw s;return}if(r.instance){let s=r.instance;return this.injectFields(s,r),this.instances.set(e,s),s}let o=this.createInstance(r);return r.scope==="global"&&this.instances.set(e,o),this.injectFields(o,r),o}createInstance(t){let e=t.classConstructor,r=t.inject.map(o=>this.resolve(o));return new e(...r)}injectFields(t,e){for(let[r,o]of Object.entries(e.properties))t[r]=this.resolve(o)}},xe=new ve,tn=new Ee(xe);function ur(n,t){let e=n.parentElement;for(;e;){if(e instanceof t)return e;e=e.parentElement}return null}var pr=Math.floor(new Date("2025-01-01T00:00:00Z").getTime()/1e3),nn=0,Te=0;function rn(n){if(n<0||n>1048575)throw new Error("baseId must be between 0 and 1048575");let t=Math.floor(Date.now()/1e3);if(t===nn){if(Te++,Te>255)throw new Error("Too many IDs generated in one second")}else nn=t,Te=0;let e=t-pr;if(e>1073741823)throw new Error("Timestamp exceeds allowed range (beyond 2045-01-01)");let r=BigInt(e),o=BigInt(Te),s=BigInt(n);return(r<<BigInt(28)|o<<BigInt(20)|s).toString(36).toLowerCase()}var Ge=class extends Error{constructor(t){super(t.statusReason),this.message=t.statusReason,this.response=t}},E={bearerTokenName:"jwt"},on=fetch;function dr(n){on=n??fetch}function mr(n){E={...E,...n},n.bearerTokenName===void 0&&(E.bearerTokenName="jwt")}async function X(n,t){if(E.bearerTokenName){let o=localStorage.getItem(E.bearerTokenName);if(o&&t){let s=t?.headers?new Headers(t.headers):new Headers;s.get("Authorization")||s.set("Authorization","Bearer "+o),t.headers=s}}E.timeout&&!t?.signal&&(t??={},t.signal=AbortSignal.timeout(E.timeout)),E.baseUrl&&(n[0]!=="/"&&E.baseUrl[E.baseUrl.length-1]!=="/"?n=`${E.baseUrl}/${n}`:n=E.baseUrl+n);let e=await on(n,t);if(!e.ok)return{statusCode:e.status,statusReason:e.statusText,success:!1,contentType:e.headers.get("content-type"),body:await e.text(),charset:e.headers.get("charset"),as(){throw new Error("No response received")}};let r=null;return e.status!==204&&(r=await e.json()),{success:!0,statusCode:e.status,statusReason:e.statusText,contentType:e.headers.get("content-type"),body:r,charset:e.headers.get("charset"),as(){return r}}}async function fr(n,t,e){if(e?e.method="GET":e={method:"GET",headers:{"content-type":E.contentType??"application/json"}},t){let r="&";n.indexOf("?")===-1&&(r="?");for(let o in t){let s=t[o];n+=`${r}${o}=${s}`,r="&"}}return X(n,e)}async function gr(n,t,e){return e?(e.method="POST",e.body=t):e={method:"POST",body:t,headers:{"content-type":E.contentType??"application/json"}},X(n,e)}async function hr(n,t,e){return e?(e.method="PUT",e.body=t):e={method:"PUT",body:t,headers:{"content-type":E.contentType??"application/json"}},X(n,e)}async function yr(n,t){return t?t.method="DELETE":t={method:"DELETE",headers:{"content-type":E.contentType??"application/json"}},X(n,t)}var be=class extends Event{constructor(e,r,o){super(e,{bubbles:!0,...o});this.data=r}},Je=class{constructor(t,e){this.url=t;this.options=e;this.target=this.resolveTarget(e?.target)}get connected(){return this.eventSource?.readyState===EventSource.OPEN}connect(){if(this.eventSource)return;let t=new EventSource(this.url,{withCredentials:this.options?.withCredentials??!1});if(this.eventSource=t,t.onopen=()=>{this.options?.onConnect?.(this)},t.onerror=e=>{this.options?.onError?.(this,e)},this.options?.eventTypes&&this.options.eventTypes.length>0)for(let e of this.options.eventTypes)t.addEventListener(e,r=>{this.dispatchEvent(e,r.data)});else t.onmessage=e=>{this.dispatchEvent("message",e.data)}}disconnect(){this.eventSource?.close(),this.eventSource=void 0}resolveTarget(t){if(!t)return document;if(typeof t=="string"){let e=document.querySelector(t);if(!e)throw new Error(`SSEClient: Target element not found: ${t}`);return e}return t}dispatchEvent(t,e){let r;if(e.length>0&&(e[0]==="{"||e[0]==="["||e[0]==='"'))try{r=JSON.parse(e)}catch{r=e}else r=e;let o=this.options?.eventFactory?this.options.eventFactory(t,r):new be(t,r);this.target.dispatchEvent(o)}};function vr(n,t){let e=t;for(let r of n){if(e==null)return;e=e[r]}return e??void 0}
5
5
  //# sourceMappingURL=index.js.map