UNPKG

@pascalhonegger/ng-datatable

Version:
1 lines 25.9 kB
{"version":3,"file":"pascalhonegger-ng-datatable.mjs","sources":["../../../projects/ng-datatable/src/lib/DataTable.ts","../../../projects/ng-datatable/src/lib/Paginator.ts","../../../projects/ng-datatable/src/lib/BootstrapPaginator.ts","../../../projects/ng-datatable/src/lib/DefaultSorter.ts","../../../projects/ng-datatable/src/lib/DataTableModule.ts","../../../projects/ng-datatable/src/public-api.ts","../../../projects/ng-datatable/src/pascalhonegger-ng-datatable.ts"],"sourcesContent":["import { Directive, input, model, effect, untracked, computed } from '@angular/core';\nimport { Subject } from 'rxjs';\n\nexport type SortOrder = 'asc' | 'desc';\nexport type SortByFunction<T = any> = (data: T) => any;\nexport type SortBy<T = any> = string | SortByFunction<T> | (string | SortByFunction<T>)[];\n\nexport interface SortEvent {\n sortBy: SortBy;\n sortOrder: string;\n}\n\nexport interface PageEvent {\n activePage: number;\n rowsOnPage: number;\n dataLength: number;\n}\n\nexport interface DataEvent {\n length: number;\n}\n\n@Directive({\n selector: 'table[mfData]',\n exportAs: 'mfDataTable',\n})\nexport class DataTable<T = any> {\n /** Array of data to display in table */\n readonly inputData = input.required<readonly T[], readonly T[] | null | undefined>({\n alias: 'mfData',\n transform: (i) => i ?? [],\n });\n\n /** Sort by parameter */\n readonly sortBy = model<SortBy<T>>('', { alias: 'mfSortBy' });\n /** Sort order parameter (either `asc` or `desc`, default: `asc`) */\n readonly sortOrder = model<SortOrder>('asc', { alias: 'mfSortOrder' });\n\n /** Number of rows should be displayed on page (default: `1000`) */\n readonly rowsOnPage = model(1000, { alias: 'mfRowsOnPage' });\n /** Page number (default: `1`) */\n readonly activePage = model(1, { alias: 'mfActivePage' });\n\n readonly inputDataLength = computed(() => this.inputData().length);\n\n readonly data = computed<readonly T[]>(() => {\n const offset = (this.activePage() - 1) * this.rowsOnPage();\n\n return [...this.inputData()]\n .sort(this.sorter(this.sortBy(), this.sortOrder()))\n .slice(offset, offset + this.rowsOnPage());\n });\n\n readonly onSortChange = new Subject<SortEvent>();\n readonly onPageChange = new Subject<PageEvent>();\n\n constructor() {\n // Events which were published based on the old API, could probably be deleted at some point\n effect(() => {\n const sortBy = this.sortBy();\n const sortOrder = this.sortOrder();\n if (sortBy) {\n this.onSortChange.next({ sortBy: sortBy, sortOrder: sortOrder });\n }\n });\n\n effect(() => {\n this.setPage(untracked(this.activePage), this.rowsOnPage());\n });\n effect(() => {\n const inputDataLength = this.inputDataLength();\n const rowsOnPage = this.rowsOnPage();\n const activePage = untracked(this.activePage);\n const lastPage = Math.ceil(inputDataLength / rowsOnPage);\n const newActivePage = (lastPage < activePage ? lastPage : activePage) || 1;\n this.activePage.set(newActivePage);\n });\n effect(() => {\n this.onPageChange.next({\n activePage: this.activePage(),\n rowsOnPage: this.rowsOnPage(),\n dataLength: this.inputDataLength(),\n });\n });\n }\n\n getSort(): SortEvent {\n return { sortBy: this.sortBy(), sortOrder: this.sortOrder() };\n }\n\n setSort(sortBy: SortBy<T>, sortOrder: SortOrder): void {\n this.sortBy.set(sortBy);\n this.sortOrder.set(['asc', 'desc'].includes(sortOrder) ? sortOrder : 'asc');\n }\n\n getPage(): PageEvent {\n return {\n activePage: this.activePage(),\n rowsOnPage: this.rowsOnPage(),\n dataLength: this.inputDataLength(),\n };\n }\n\n setPage(activePage: number, rowsOnPage: number): void {\n if (this.rowsOnPage() !== rowsOnPage || this.activePage() !== activePage) {\n this.rowsOnPage.set(rowsOnPage);\n this.activePage.set(\n this.activePage() !== activePage\n ? activePage\n : this.calculateNewActivePage(this.rowsOnPage(), rowsOnPage),\n );\n }\n }\n\n private calculateNewActivePage(previousRowsOnPage: number, currentRowsOnPage: number): number {\n const firstRowOnPage = (this.activePage() - 1) * previousRowsOnPage + 1;\n const newActivePage = Math.ceil(firstRowOnPage / currentRowsOnPage);\n return newActivePage;\n }\n\n private caseInsensitiveIteratee(sortBy: string | SortByFunction) {\n return (row: any): any => {\n let value = row;\n if (typeof sortBy === 'string' || sortBy instanceof String) {\n for (const sortByProperty of sortBy.split('.')) {\n if (value) {\n value = value[sortByProperty];\n }\n }\n } else if (typeof sortBy === 'function') {\n value = sortBy(value);\n }\n\n if ((value && typeof value === 'string') || value instanceof String) {\n return value.toLowerCase();\n }\n\n return value;\n };\n }\n\n private compare(left: any, right: any): number {\n if (left === right) {\n return 0;\n }\n if (left == null && right != null) {\n return -1;\n }\n if (right == null) {\n return 1;\n }\n return left > right ? 1 : -1;\n }\n\n private sorter<T>(sortBy: SortBy<T>, sortOrder: SortOrder): (left: T, right: T) => number {\n const order = sortOrder === 'desc' ? -1 : 1;\n if (Array.isArray(sortBy)) {\n const iteratees = sortBy.map((entry) => this.caseInsensitiveIteratee(entry));\n return (left, right) => {\n for (const iteratee of iteratees) {\n const comparison = this.compare(iteratee(left), iteratee(right)) * order;\n if (comparison !== 0) {\n return comparison;\n }\n }\n return 0;\n };\n } else {\n const iteratee = this.caseInsensitiveIteratee(sortBy);\n return (left, right) => this.compare(iteratee(left), iteratee(right)) * order;\n }\n }\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n DestroyRef,\n computed,\n effect,\n inject,\n input,\n signal,\n} from '@angular/core';\nimport { DataTable, PageEvent } from './DataTable';\nimport { Subscription } from 'rxjs';\n\n@Component({\n selector: 'mfPaginator',\n template: `<ng-content />`,\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class Paginator {\n private injectMfTable = inject(DataTable, { optional: true })!;\n\n /** explicitly specify reference data table, by default the parent `mfData` is injected */\n readonly inputMfTable = input<DataTable>(undefined, { alias: 'mfTable' });\n private readonly mfTable = computed<DataTable>(() => this.inputMfTable() ?? this.injectMfTable);\n\n readonly activePage = signal<number>(0);\n readonly rowsOnPage = signal<number>(0);\n readonly dataLength = signal<number>(0);\n readonly lastPage = computed<number>(() => {\n const rowsOnPage = this.rowsOnPage();\n const dataLength = this.dataLength();\n return rowsOnPage === 0 ? 0 : Math.ceil(dataLength / rowsOnPage);\n });\n\n constructor() {\n let currentSubscription: Subscription | undefined = undefined;\n effect(() => {\n const currentTable = this.mfTable();\n this.onPageChangeSubscriber(currentTable.getPage());\n currentSubscription?.unsubscribe();\n currentSubscription = currentTable.onPageChange.subscribe(this.onPageChangeSubscriber);\n });\n inject(DestroyRef).onDestroy(() => {\n currentSubscription?.unsubscribe();\n });\n }\n\n setPage(pageNumber: number): void {\n this.mfTable().setPage(pageNumber, this.rowsOnPage());\n }\n\n setRowsOnPage(rowsOnPage: number): void {\n this.mfTable().setPage(this.activePage(), rowsOnPage);\n }\n\n private onPageChangeSubscriber = (event: PageEvent) => {\n this.activePage.set(event.activePage);\n this.rowsOnPage.set(event.rowsOnPage);\n this.dataLength.set(event.dataLength);\n };\n}\n","import { ChangeDetectionStrategy, Component, computed, input } from '@angular/core';\nimport { DataTable } from './DataTable';\nimport { Paginator } from './Paginator';\n\n@Component({\n selector: 'mfBootstrapPaginator',\n template: `\n <mfPaginator #p [mfTable]=\"mfTable()\">\n @if (p.dataLength() > p.rowsOnPage()) {\n <ul class=\"pagination float-start\">\n <li class=\"page-item\" [class.disabled]=\"p.activePage() <= 1\" (click)=\"p.setPage(1)\">\n <a class=\"page-link\" aria-label=\"Previous\"><span aria-hidden=\"true\">&laquo;</span></a>\n </li>\n @if (p.activePage() > 4 && p.activePage() + 1 > p.lastPage()) {\n <li class=\"page-item\" (click)=\"p.setPage(p.activePage() - 4)\">\n <a class=\"page-link\">{{ p.activePage() - 4 }}</a>\n </li>\n }\n @if (p.activePage() > 3 && p.activePage() + 2 > p.lastPage()) {\n <li class=\"page-item\" (click)=\"p.setPage(p.activePage() - 3)\">\n <a class=\"page-link\">{{ p.activePage() - 3 }}</a>\n </li>\n }\n @if (p.activePage() > 2) {\n <li class=\"page-item\" (click)=\"p.setPage(p.activePage() - 2)\">\n <a class=\"page-link\">{{ p.activePage() - 2 }}</a>\n </li>\n }\n @if (p.activePage() > 1) {\n <li class=\"page-item\" (click)=\"p.setPage(p.activePage() - 1)\">\n <a class=\"page-link\">{{ p.activePage() - 1 }}</a>\n </li>\n }\n <li class=\"page-item active\">\n <a class=\"page-link\">{{ p.activePage() }}</a>\n </li>\n @if (p.activePage() + 1 <= p.lastPage()) {\n <li class=\"page-item\" (click)=\"p.setPage(p.activePage() + 1)\">\n <a class=\"page-link\">{{ p.activePage() + 1 }}</a>\n </li>\n }\n @if (p.activePage() + 2 <= p.lastPage()) {\n <li class=\"page-item\" (click)=\"p.setPage(p.activePage() + 2)\">\n <a class=\"page-link\">{{ p.activePage() + 2 }}</a>\n </li>\n }\n @if (p.activePage() + 3 <= p.lastPage() && p.activePage() < 3) {\n <li class=\"page-item\" (click)=\"p.setPage(p.activePage() + 3)\">\n <a class=\"page-link\">{{ p.activePage() + 3 }}</a>\n </li>\n }\n @if (p.activePage() + 4 <= p.lastPage() && p.activePage() < 2) {\n <li class=\"page-item\" (click)=\"p.setPage(p.activePage() + 4)\">\n <a class=\"page-link\">{{ p.activePage() + 4 }}</a>\n </li>\n }\n <li\n class=\"page-item\"\n [class.disabled]=\"p.activePage() >= p.lastPage()\"\n (click)=\"p.setPage(p.lastPage())\"\n >\n <a class=\"page-link\" aria-label=\"Next\"><span aria-hidden=\"true\">&raquo;</span></a>\n </li>\n </ul>\n }\n @if (p.dataLength() > minRowsOnPage()) {\n <ul class=\"pagination float-end\">\n @for (rows of rowsOnPageSet(); track rows) {\n <li\n class=\"page-item\"\n [class.active]=\"p.rowsOnPage() === rows\"\n (click)=\"p.setRowsOnPage(rows)\"\n >\n <a class=\"page-link\">{{ rows }}</a>\n </li>\n }\n </ul>\n }\n </mfPaginator>\n `,\n styles: ['.page-link { cursor: pointer; }'],\n imports: [Paginator],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class BootstrapPaginator {\n /** Specify values for buttons to change number of diplayed rows, e.g. [5, 10, 15] */\n rowsOnPageSet = input.required<readonly number[]>();\n /** explicitly specify reference data table, by default the parent `mfData` is injected */\n mfTable = input<DataTable>();\n\n minRowsOnPage = computed<number>(() =>\n this.rowsOnPageSet().reduce(\n (previous, current) => (current < previous ? current : previous),\n 0,\n ),\n );\n}\n","import { ChangeDetectionStrategy, Component, computed, inject, input } from '@angular/core';\nimport { DataTable, SortBy } from './DataTable';\n\n@Component({\n selector: 'mfDefaultSorter',\n template: ` <a\n (click)=\"sort()\"\n (keydown.enter)=\"sort()\"\n (keydown.space)=\"sort()\"\n class=\"text-nowrap text-decoration-none\"\n tabindex=\"0\"\n >\n <ng-content />\n @if (isSortedByMeAsc()) {\n <span aria-hidden=\"true\" aria-label=\"asc\">▲</span>\n } @else if (isSortedByMeDesc()) {\n <span aria-hidden=\"true\" aria-label=\"desc\">▼</span>\n }\n </a>`,\n styles: ['a { cursor: pointer; }'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class DefaultSorter<T = any> {\n private readonly mfTable = inject(DataTable<T>);\n\n /** Specify how to sort data (argument for lodash function [\\_.sortBy ](https://lodash.com/docs#sortBy)) */\n readonly sortBy = input.required<SortBy<T>>({ alias: 'by' });\n\n readonly isSortedByMeAsc = computed<boolean>(() => {\n const tableSortBy = this.mfTable.sortBy();\n const tableSortOrder = this.mfTable.sortOrder();\n const mySort = this.sortBy();\n return tableSortBy == mySort && tableSortOrder === 'asc';\n });\n readonly isSortedByMeDesc = computed<boolean>(() => {\n const tableSortBy = this.mfTable.sortBy();\n const tableSortOrder = this.mfTable.sortOrder();\n const mySort = this.sortBy();\n return tableSortBy == mySort && tableSortOrder === 'desc';\n });\n\n sort() {\n if (this.isSortedByMeAsc()) {\n this.mfTable.setSort(this.sortBy(), 'desc');\n } else {\n this.mfTable.setSort(this.sortBy(), 'asc');\n }\n return false;\n }\n}\n","import { NgModule } from '@angular/core';\n\nimport { DataTable } from './DataTable';\nimport { DefaultSorter } from './DefaultSorter';\nimport { Paginator } from './Paginator';\nimport { BootstrapPaginator } from './BootstrapPaginator';\n\n/**\n * Optional module which exports all components\n * @deprecated Should be replaced with component imports (DataTable, DefaultSorter, Paginator, BootstrapPaginator)\n */\n@NgModule({\n imports: [DataTable, DefaultSorter, Paginator, BootstrapPaginator],\n exports: [DataTable, DefaultSorter, Paginator, BootstrapPaginator],\n})\nexport class DataTableModule {}\n","/*\n * Public API Surface of ng-datatable\n */\n\nexport * from './lib/BootstrapPaginator';\nexport * from './lib/Paginator';\nexport * from './lib/DefaultSorter';\nexport * from './lib/DataTable';\nexport * from './lib/DataTableModule';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":";;;;MA0Ba,SAAS,CAAA;;AAEX,IAAA,SAAS,GAAG,KAAK,CAAC,QAAQ,CAAA,EAAA,IAAA,SAAA,GAAA,EAAA,SAAA,EAAA,WAAA,EAAA,GAAA,EAAA,CAAA,EACjC,KAAK,EAAE,QAAQ;QACf,SAAS,EAAE,CAAC,CAAC,KAAK,CAAC,IAAI,EAAE,EAAA,CACzB;;IAGO,MAAM,GAAG,KAAK,CAAY,EAAE,mDAAI,KAAK,EAAE,UAAU,EAAA,CAAG;;IAEpD,SAAS,GAAG,KAAK,CAAY,KAAK,sDAAI,KAAK,EAAE,aAAa,EAAA,CAAG;;IAG7D,UAAU,GAAG,KAAK,CAAC,IAAI,uDAAI,KAAK,EAAE,cAAc,EAAA,CAAG;;IAEnD,UAAU,GAAG,KAAK,CAAC,CAAC,uDAAI,KAAK,EAAE,cAAc,EAAA,CAAG;AAEhD,IAAA,eAAe,GAAG,QAAQ,CAAC,MAAM,IAAI,CAAC,SAAS,EAAE,CAAC,MAAM,2DAAC;AAEzD,IAAA,IAAI,GAAG,QAAQ,CAAe,MAAK;AAC1C,QAAA,MAAM,MAAM,GAAG,CAAC,IAAI,CAAC,UAAU,EAAE,GAAG,CAAC,IAAI,IAAI,CAAC,UAAU,EAAE;AAE1D,QAAA,OAAO,CAAC,GAAG,IAAI,CAAC,SAAS,EAAE;AACxB,aAAA,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,EAAE,EAAE,IAAI,CAAC,SAAS,EAAE,CAAC;aACjD,KAAK,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC,UAAU,EAAE,CAAC;AAC9C,IAAA,CAAC,gDAAC;AAEO,IAAA,YAAY,GAAG,IAAI,OAAO,EAAa;AACvC,IAAA,YAAY,GAAG,IAAI,OAAO,EAAa;AAEhD,IAAA,WAAA,GAAA;;QAEE,MAAM,CAAC,MAAK;AACV,YAAA,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,EAAE;AAC5B,YAAA,MAAM,SAAS,GAAG,IAAI,CAAC,SAAS,EAAE;YAClC,IAAI,MAAM,EAAE;AACV,gBAAA,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,MAAM,EAAE,SAAS,EAAE,SAAS,EAAE,CAAC;YAClE;AACF,QAAA,CAAC,CAAC;QAEF,MAAM,CAAC,MAAK;AACV,YAAA,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,IAAI,CAAC,UAAU,CAAC,EAAE,IAAI,CAAC,UAAU,EAAE,CAAC;AAC7D,QAAA,CAAC,CAAC;QACF,MAAM,CAAC,MAAK;AACV,YAAA,MAAM,eAAe,GAAG,IAAI,CAAC,eAAe,EAAE;AAC9C,YAAA,MAAM,UAAU,GAAG,IAAI,CAAC,UAAU,EAAE;YACpC,MAAM,UAAU,GAAG,SAAS,CAAC,IAAI,CAAC,UAAU,CAAC;YAC7C,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,eAAe,GAAG,UAAU,CAAC;AACxD,YAAA,MAAM,aAAa,GAAG,CAAC,QAAQ,GAAG,UAAU,GAAG,QAAQ,GAAG,UAAU,KAAK,CAAC;AAC1E,YAAA,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,aAAa,CAAC;AACpC,QAAA,CAAC,CAAC;QACF,MAAM,CAAC,MAAK;AACV,YAAA,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC;AACrB,gBAAA,UAAU,EAAE,IAAI,CAAC,UAAU,EAAE;AAC7B,gBAAA,UAAU,EAAE,IAAI,CAAC,UAAU,EAAE;AAC7B,gBAAA,UAAU,EAAE,IAAI,CAAC,eAAe,EAAE;AACnC,aAAA,CAAC;AACJ,QAAA,CAAC,CAAC;IACJ;IAEA,OAAO,GAAA;AACL,QAAA,OAAO,EAAE,MAAM,EAAE,IAAI,CAAC,MAAM,EAAE,EAAE,SAAS,EAAE,IAAI,CAAC,SAAS,EAAE,EAAE;IAC/D;IAEA,OAAO,CAAC,MAAiB,EAAE,SAAoB,EAAA;AAC7C,QAAA,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC;QACvB,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC,QAAQ,CAAC,SAAS,CAAC,GAAG,SAAS,GAAG,KAAK,CAAC;IAC7E;IAEA,OAAO,GAAA;QACL,OAAO;AACL,YAAA,UAAU,EAAE,IAAI,CAAC,UAAU,EAAE;AAC7B,YAAA,UAAU,EAAE,IAAI,CAAC,UAAU,EAAE;AAC7B,YAAA,UAAU,EAAE,IAAI,CAAC,eAAe,EAAE;SACnC;IACH;IAEA,OAAO,CAAC,UAAkB,EAAE,UAAkB,EAAA;AAC5C,QAAA,IAAI,IAAI,CAAC,UAAU,EAAE,KAAK,UAAU,IAAI,IAAI,CAAC,UAAU,EAAE,KAAK,UAAU,EAAE;AACxE,YAAA,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,UAAU,CAAC;YAC/B,IAAI,CAAC,UAAU,CAAC,GAAG,CACjB,IAAI,CAAC,UAAU,EAAE,KAAK;AACpB,kBAAE;AACF,kBAAE,IAAI,CAAC,sBAAsB,CAAC,IAAI,CAAC,UAAU,EAAE,EAAE,UAAU,CAAC,CAC/D;QACH;IACF;IAEQ,sBAAsB,CAAC,kBAA0B,EAAE,iBAAyB,EAAA;AAClF,QAAA,MAAM,cAAc,GAAG,CAAC,IAAI,CAAC,UAAU,EAAE,GAAG,CAAC,IAAI,kBAAkB,GAAG,CAAC;QACvE,MAAM,aAAa,GAAG,IAAI,CAAC,IAAI,CAAC,cAAc,GAAG,iBAAiB,CAAC;AACnE,QAAA,OAAO,aAAa;IACtB;AAEQ,IAAA,uBAAuB,CAAC,MAA+B,EAAA;QAC7D,OAAO,CAAC,GAAQ,KAAS;YACvB,IAAI,KAAK,GAAG,GAAG;YACf,IAAI,OAAO,MAAM,KAAK,QAAQ,IAAI,MAAM,YAAY,MAAM,EAAE;gBAC1D,KAAK,MAAM,cAAc,IAAI,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE;oBAC9C,IAAI,KAAK,EAAE;AACT,wBAAA,KAAK,GAAG,KAAK,CAAC,cAAc,CAAC;oBAC/B;gBACF;YACF;AAAO,iBAAA,IAAI,OAAO,MAAM,KAAK,UAAU,EAAE;AACvC,gBAAA,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC;YACvB;AAEA,YAAA,IAAI,CAAC,KAAK,IAAI,OAAO,KAAK,KAAK,QAAQ,KAAK,KAAK,YAAY,MAAM,EAAE;AACnE,gBAAA,OAAO,KAAK,CAAC,WAAW,EAAE;YAC5B;AAEA,YAAA,OAAO,KAAK;AACd,QAAA,CAAC;IACH;IAEQ,OAAO,CAAC,IAAS,EAAE,KAAU,EAAA;AACnC,QAAA,IAAI,IAAI,KAAK,KAAK,EAAE;AAClB,YAAA,OAAO,CAAC;QACV;QACA,IAAI,IAAI,IAAI,IAAI,IAAI,KAAK,IAAI,IAAI,EAAE;YACjC,OAAO,CAAC,CAAC;QACX;AACA,QAAA,IAAI,KAAK,IAAI,IAAI,EAAE;AACjB,YAAA,OAAO,CAAC;QACV;AACA,QAAA,OAAO,IAAI,GAAG,KAAK,GAAG,CAAC,GAAG,CAAC,CAAC;IAC9B;IAEQ,MAAM,CAAI,MAAiB,EAAE,SAAoB,EAAA;AACvD,QAAA,MAAM,KAAK,GAAG,SAAS,KAAK,MAAM,GAAG,CAAC,CAAC,GAAG,CAAC;AAC3C,QAAA,IAAI,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE;AACzB,YAAA,MAAM,SAAS,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC,KAAK,KAAK,IAAI,CAAC,uBAAuB,CAAC,KAAK,CAAC,CAAC;AAC5E,YAAA,OAAO,CAAC,IAAI,EAAE,KAAK,KAAI;AACrB,gBAAA,KAAK,MAAM,QAAQ,IAAI,SAAS,EAAE;AAChC,oBAAA,MAAM,UAAU,GAAG,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,QAAQ,CAAC,KAAK,CAAC,CAAC,GAAG,KAAK;AACxE,oBAAA,IAAI,UAAU,KAAK,CAAC,EAAE;AACpB,wBAAA,OAAO,UAAU;oBACnB;gBACF;AACA,gBAAA,OAAO,CAAC;AACV,YAAA,CAAC;QACH;aAAO;YACL,MAAM,QAAQ,GAAG,IAAI,CAAC,uBAAuB,CAAC,MAAM,CAAC;YACrD,OAAO,CAAC,IAAI,EAAE,KAAK,KAAK,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,QAAQ,CAAC,KAAK,CAAC,CAAC,GAAG,KAAK;QAC/E;IACF;uGAjJW,SAAS,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;2FAAT,SAAS,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,eAAA,EAAA,MAAA,EAAA,EAAA,SAAA,EAAA,EAAA,iBAAA,EAAA,WAAA,EAAA,UAAA,EAAA,QAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,MAAA,EAAA,EAAA,iBAAA,EAAA,QAAA,EAAA,UAAA,EAAA,UAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,SAAA,EAAA,EAAA,iBAAA,EAAA,WAAA,EAAA,UAAA,EAAA,aAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,UAAA,EAAA,EAAA,iBAAA,EAAA,YAAA,EAAA,UAAA,EAAA,cAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,UAAA,EAAA,EAAA,iBAAA,EAAA,YAAA,EAAA,UAAA,EAAA,cAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,OAAA,EAAA,EAAA,MAAA,EAAA,gBAAA,EAAA,SAAA,EAAA,mBAAA,EAAA,UAAA,EAAA,oBAAA,EAAA,UAAA,EAAA,oBAAA,EAAA,EAAA,QAAA,EAAA,CAAA,aAAA,CAAA,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA;;2FAAT,SAAS,EAAA,UAAA,EAAA,CAAA;kBAJrB,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACT,oBAAA,QAAQ,EAAE,eAAe;AACzB,oBAAA,QAAQ,EAAE,aAAa;AACxB,iBAAA;;;MCPY,SAAS,CAAA;IACZ,aAAa,GAAG,MAAM,CAAC,SAAS,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAE;;IAGrD,YAAY,GAAG,KAAK,CAAY,SAAS,yDAAI,KAAK,EAAE,SAAS,EAAA,CAAG;AACxD,IAAA,OAAO,GAAG,QAAQ,CAAY,MAAM,IAAI,CAAC,YAAY,EAAE,IAAI,IAAI,CAAC,aAAa,mDAAC;AAEtF,IAAA,UAAU,GAAG,MAAM,CAAS,CAAC,sDAAC;AAC9B,IAAA,UAAU,GAAG,MAAM,CAAS,CAAC,sDAAC;AAC9B,IAAA,UAAU,GAAG,MAAM,CAAS,CAAC,sDAAC;AAC9B,IAAA,QAAQ,GAAG,QAAQ,CAAS,MAAK;AACxC,QAAA,MAAM,UAAU,GAAG,IAAI,CAAC,UAAU,EAAE;AACpC,QAAA,MAAM,UAAU,GAAG,IAAI,CAAC,UAAU,EAAE;AACpC,QAAA,OAAO,UAAU,KAAK,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC,UAAU,GAAG,UAAU,CAAC;AAClE,IAAA,CAAC,oDAAC;AAEF,IAAA,WAAA,GAAA;QACE,IAAI,mBAAmB,GAA6B,SAAS;QAC7D,MAAM,CAAC,MAAK;AACV,YAAA,MAAM,YAAY,GAAG,IAAI,CAAC,OAAO,EAAE;YACnC,IAAI,CAAC,sBAAsB,CAAC,YAAY,CAAC,OAAO,EAAE,CAAC;YACnD,mBAAmB,EAAE,WAAW,EAAE;YAClC,mBAAmB,GAAG,YAAY,CAAC,YAAY,CAAC,SAAS,CAAC,IAAI,CAAC,sBAAsB,CAAC;AACxF,QAAA,CAAC,CAAC;AACF,QAAA,MAAM,CAAC,UAAU,CAAC,CAAC,SAAS,CAAC,MAAK;YAChC,mBAAmB,EAAE,WAAW,EAAE;AACpC,QAAA,CAAC,CAAC;IACJ;AAEA,IAAA,OAAO,CAAC,UAAkB,EAAA;AACxB,QAAA,IAAI,CAAC,OAAO,EAAE,CAAC,OAAO,CAAC,UAAU,EAAE,IAAI,CAAC,UAAU,EAAE,CAAC;IACvD;AAEA,IAAA,aAAa,CAAC,UAAkB,EAAA;AAC9B,QAAA,IAAI,CAAC,OAAO,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,UAAU,EAAE,EAAE,UAAU,CAAC;IACvD;AAEQ,IAAA,sBAAsB,GAAG,CAAC,KAAgB,KAAI;QACpD,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,KAAK,CAAC,UAAU,CAAC;QACrC,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,KAAK,CAAC,UAAU,CAAC;QACrC,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,KAAK,CAAC,UAAU,CAAC;AACvC,IAAA,CAAC;uGAzCU,SAAS,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAAT,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,SAAS,2NAHV,CAAA,cAAA,CAAgB,EAAA,QAAA,EAAA,IAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA;;2FAGf,SAAS,EAAA,UAAA,EAAA,CAAA;kBALrB,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACT,oBAAA,QAAQ,EAAE,aAAa;AACvB,oBAAA,QAAQ,EAAE,CAAA,cAAA,CAAgB;oBAC1B,eAAe,EAAE,uBAAuB,CAAC,MAAM;AAChD,iBAAA;;;MCmEY,kBAAkB,CAAA;;AAE7B,IAAA,aAAa,GAAG,KAAK,CAAC,QAAQ,wDAAqB;;IAEnD,OAAO,GAAG,KAAK,CAAA,IAAA,SAAA,GAAA,CAAA,SAAA,EAAA,EAAA,SAAA,EAAA,SAAA,EAAA,CAAA,GAAA,EAAA,CAAA,CAAa;AAE5B,IAAA,aAAa,GAAG,QAAQ,CAAS,MAC/B,IAAI,CAAC,aAAa,EAAE,CAAC,MAAM,CACzB,CAAC,QAAQ,EAAE,OAAO,MAAM,OAAO,GAAG,QAAQ,GAAG,OAAO,GAAG,QAAQ,CAAC,EAChE,CAAC,CACF,yDACF;uGAXU,kBAAkB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAAlB,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,kBAAkB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,sBAAA,EAAA,MAAA,EAAA,EAAA,aAAA,EAAA,EAAA,iBAAA,EAAA,eAAA,EAAA,UAAA,EAAA,eAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,OAAA,EAAA,EAAA,iBAAA,EAAA,SAAA,EAAA,UAAA,EAAA,SAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EA9EnB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAyET,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,MAAA,EAAA,CAAA,8BAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAES,SAAS,EAAA,QAAA,EAAA,aAAA,EAAA,MAAA,EAAA,CAAA,SAAA,CAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA;;2FAGR,kBAAkB,EAAA,UAAA,EAAA,CAAA;kBAhF9B,SAAS;AACE,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,sBAAsB,EAAA,QAAA,EACtB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAyET,EAAA,CAAA,EAAA,OAAA,EAEQ,CAAC,SAAS,CAAC,EAAA,eAAA,EACH,uBAAuB,CAAC,MAAM,EAAA,MAAA,EAAA,CAAA,8BAAA,CAAA,EAAA;;;MC5DpC,aAAa,CAAA;AACP,IAAA,OAAO,GAAG,MAAM,EAAC,SAAY,EAAC;;IAGtC,MAAM,GAAG,KAAK,CAAC,QAAQ,kDAAc,KAAK,EAAE,IAAI,EAAA,CAAG;AAEnD,IAAA,eAAe,GAAG,QAAQ,CAAU,MAAK;QAChD,MAAM,WAAW,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE;QACzC,MAAM,cAAc,GAAG,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE;AAC/C,QAAA,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,EAAE;AAC5B,QAAA,OAAO,WAAW,IAAI,MAAM,IAAI,cAAc,KAAK,KAAK;AAC1D,IAAA,CAAC,2DAAC;AACO,IAAA,gBAAgB,GAAG,QAAQ,CAAU,MAAK;QACjD,MAAM,WAAW,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE;QACzC,MAAM,cAAc,GAAG,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE;AAC/C,QAAA,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,EAAE;AAC5B,QAAA,OAAO,WAAW,IAAI,MAAM,IAAI,cAAc,KAAK,MAAM;AAC3D,IAAA,CAAC,4DAAC;IAEF,IAAI,GAAA;AACF,QAAA,IAAI,IAAI,CAAC,eAAe,EAAE,EAAE;AAC1B,YAAA,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,MAAM,EAAE,EAAE,MAAM,CAAC;QAC7C;aAAO;AACL,YAAA,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,MAAM,EAAE,EAAE,KAAK,CAAC;QAC5C;AACA,QAAA,OAAO,KAAK;IACd;uGA1BW,aAAa,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAAb,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,aAAa,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,EAAA,MAAA,EAAA,EAAA,iBAAA,EAAA,QAAA,EAAA,UAAA,EAAA,IAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EAjBd,CAAA;;;;;;;;;;;;;AAaL,MAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,MAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA;;2FAIM,aAAa,EAAA,UAAA,EAAA,CAAA;kBAnBzB,SAAS;AACE,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,iBAAiB,EAAA,QAAA,EACjB,CAAA;;;;;;;;;;;;;OAaL,EAAA,eAAA,EAEY,uBAAuB,CAAC,MAAM,EAAA,MAAA,EAAA,CAAA,qBAAA,CAAA,EAAA;;;ACbjD;;;AAGG;MAKU,eAAe,CAAA;uGAAf,eAAe,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,QAAA,EAAA,CAAA;AAAf,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,mBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,eAAe,EAAA,OAAA,EAAA,CAHhB,SAAS,EAAE,aAAa,EAAE,SAAS,EAAE,kBAAkB,CAAA,EAAA,OAAA,EAAA,CACvD,SAAS,EAAE,aAAa,EAAE,SAAS,EAAE,kBAAkB,CAAA,EAAA,CAAA;wGAEtD,eAAe,EAAA,CAAA;;2FAAf,eAAe,EAAA,UAAA,EAAA,CAAA;kBAJ3B,QAAQ;AAAC,YAAA,IAAA,EAAA,CAAA;oBACR,OAAO,EAAE,CAAC,SAAS,EAAE,aAAa,EAAE,SAAS,EAAE,kBAAkB,CAAC;oBAClE,OAAO,EAAE,CAAC,SAAS,EAAE,aAAa,EAAE,SAAS,EAAE,kBAAkB,CAAC;AACnE,iBAAA;;;ACdD;;AAEG;;ACFH;;AAEG;;;;"}