ngx-eiffage-material 0.0.22 → 0.0.23
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/fesm2022/ngx-eiffage-material.mjs +1373 -56
- package/fesm2022/ngx-eiffage-material.mjs.map +1 -1
- package/index.d.ts +252 -12
- package/package.json +1 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ngx-eiffage-material.mjs","sources":["../../../projects/ngx-eiffage-material/src/lib/components/ngx-loading-button/ngx-loading-button.component.ts","../../../projects/ngx-eiffage-material/src/lib/components/ngx-loading-button/ngx-loading-button.component.html","../../../projects/ngx-eiffage-material/src/lib/common/services/common-table.service.ts","../../../projects/ngx-eiffage-material/src/lib/common/components/common-table/common-table.component.ts","../../../projects/ngx-eiffage-material/src/lib/common/components/common-table/common-table.component.html","../../../projects/ngx-eiffage-material/src/lib/components/ngx-basic-table/ngx-basic-table.component.ts","../../../projects/ngx-eiffage-material/src/lib/components/ngx-basic-table/ngx-basic-table.component.html","../../../projects/ngx-eiffage-material/src/lib/components/ngx-paginated-table/ngx-paginated-table.component.ts","../../../projects/ngx-eiffage-material/src/lib/components/ngx-paginated-table/ngx-paginated-table.component.html","../../../projects/ngx-eiffage-material/src/lib/components/ngx-input-file/ngx-input-file.component.ts","../../../projects/ngx-eiffage-material/src/lib/components/ngx-input-file/ngx-input-file.component.html","../../../projects/ngx-eiffage-material/src/lib/utils/string-operations.ts","../../../projects/ngx-eiffage-material/src/lib/components/ngx-basic-select/ngx-basic-select.component.ts","../../../projects/ngx-eiffage-material/src/lib/components/ngx-basic-select/ngx-basic-select.component.html","../../../projects/ngx-eiffage-material/src/lib/common/components/paginated-select-bottom-sheet/paginated-select-bottom-sheet.component.ts","../../../projects/ngx-eiffage-material/src/lib/common/components/paginated-select-bottom-sheet/paginated-select-bottom-sheet.component.html","../../../projects/ngx-eiffage-material/src/lib/components/ngx-paginated-select/ngx-paginated-select.component.ts","../../../projects/ngx-eiffage-material/src/lib/components/ngx-paginated-select/ngx-paginated-select.component.html","../../../projects/ngx-eiffage-material/src/lib/models/dialog-config.ts","../../../projects/ngx-eiffage-material/src/lib/directives/dynamic-host.directive.ts","../../../projects/ngx-eiffage-material/src/lib/components/ngx-dialog/ngx-dialog.component.ts","../../../projects/ngx-eiffage-material/src/lib/components/ngx-dialog/ngx-dialog.component.html","../../../projects/ngx-eiffage-material/src/lib/services/ngx-dialog.service.ts","../../../projects/ngx-eiffage-material/src/public-api.ts","../../../projects/ngx-eiffage-material/src/ngx-eiffage-material.ts"],"sourcesContent":["import { CommonModule } from '@angular/common';\nimport {\n Component,\n input,\n output,\n} from '@angular/core';\nimport { MatButtonModule } from '@angular/material/button';\nimport { MatIconModule } from '@angular/material/icon';\nimport { MatProgressSpinnerModule } from '@angular/material/progress-spinner';\n\n@Component({\n selector: 'ngx-loading-button',\n imports: [\n MatButtonModule,\n MatProgressSpinnerModule,\n MatIconModule,\n ],\n templateUrl: './ngx-loading-button.component.html',\n styleUrl: './ngx-loading-button.component.scss',\n})\nexport class NgxLoadingButton {\n isLoading = input.required<boolean>(); //Indica si el botón está cargando\n label = input.required<string>(); //Texto del botón\n matButton = input<'text' | 'filled' | 'elevated' | 'outlined' | 'tonal'>('filled'); //Tipo de botón\n type = input<'button' | 'submit' | 'reset'>('button'); //Tipo de acción del botón\n disabled = input<boolean>(false); //Indica si el botón está deshabilitado\n spinnerDiameter = input<number>(24) //Diameter del spinner de carga\n spinnerStrokeWidth = input<number>(3) //StrokeWidth del spinner de carga\n //Por defecto es Primary\n color = input<'secondary' | 'tertiary' | undefined>(undefined); //Color del botón\n\n /*\n No es necesario hacer el onClick, si queremos obtener un evento click,\n puedes hacerlo sobre la llamada al selector, es decir, sobre 'app-loading-button'\n */\n //onClick = output();\n}\n","<button\r\n class=\"loadingButton\"\r\n [matButton]=\"matButton()\"\r\n [type]=\"type()\"\r\n [disabled]=\"disabled() || isLoading()\"\r\n [class.isLoading]=\"isLoading()\"\r\n [class]=\"color() ?? ''\"\r\n>\r\n {{ label() }}\r\n</button>\r\n\r\n@if (isLoading()) {\r\n <mat-spinner\r\n class=\"spinnerLoadingButton\"\r\n [diameter]=\"spinnerDiameter()\"\r\n [strokeWidth]=\"spinnerStrokeWidth()\"\r\n />\r\n}\r\n","import { Injectable } from '@angular/core';\r\nimport { PipeConfig, PipeType, TableColumn } from '../../models';\r\nimport { CurrencyPipe, DatePipe, DecimalPipe, LowerCasePipe, PercentPipe, SlicePipe, TitleCasePipe, UpperCasePipe } from '@angular/common';\r\n\r\n@Injectable({\r\n providedIn: 'root',\r\n})\r\nexport class CommonTableService<T> {\r\n /**\r\n * Métodos para botones customizables\r\n *\r\n */\r\n isButtonVisible(column: TableColumn, row: T): boolean {\r\n if (!column.buttonConfig) return false;\r\n\r\n const visible = column.buttonConfig.visible;\r\n if (typeof visible === 'function') {\r\n return visible(row);\r\n }\r\n return visible !== false; // Por defecto visible si no se especifica\r\n }\r\n\r\n isButtonDisabled(column: TableColumn, row: T): boolean {\r\n if (!column.buttonConfig) return false;\r\n\r\n const disabled = column.buttonConfig.disabled;\r\n if (typeof disabled === 'function') {\r\n return disabled(row);\r\n }\r\n return !!disabled;\r\n }\r\n\r\n onCustomButtonClick(column: TableColumn, row: T): void {\r\n if (column.buttonConfig?.onClick) {\r\n column.buttonConfig.onClick(row);\r\n }\r\n }\r\n\r\n /**\r\n * Métodos para enlaces\r\n *\r\n */\r\n isLinkVisible(column: TableColumn, row: T): boolean {\r\n if (!column.linkConfig) return false;\r\n\r\n const visible = column.linkConfig.visible;\r\n if (typeof visible === 'function') {\r\n return visible(row);\r\n }\r\n return visible !== false;\r\n }\r\n\r\n getLinkHref(column: TableColumn, row: T): string | null {\r\n if (!column.linkConfig?.href) return null;\r\n \r\n if (typeof column.linkConfig.href === 'function') {\r\n return column.linkConfig.href(row);\r\n }\r\n return column.linkConfig.href;\r\n }\r\n\r\n /**\r\n * Método para obtener el valor de la celda con pipes\r\n */\r\n getCellValue(column: TableColumn, row: T): any {\r\n const splittedKey = column.key.split('.');\r\n let value = row;\r\n if (splittedKey.length > 1) {\r\n value = this.getNestedKey(row, splittedKey);\r\n } else {\r\n value = (row as Record<string, any>)[column.key];\r\n }\r\n\r\n if(value === undefined || value === null || value === '') {\r\n return '-';\r\n }\r\n \r\n if(column.pipeConfig) {\r\n return this.applyPipe(value, column.pipeConfig);\r\n }\r\n\r\n return value;\r\n }\r\n\r\n private getNestedKey(row: T, splittedKey: string[]): any {\r\n let value: any = row;\r\n for (let i = 0; i < splittedKey.length; i++) {\r\n if (value == null) return undefined;\r\n value = (value as Record<string, any>)[splittedKey[i]];\r\n }\r\n return value;\r\n }\r\n\r\n private applyPipe(value: any, pipeConfig: PipeConfig): any {\r\n try {\r\n const args = pipeConfig.args || [];\r\n switch (pipeConfig.name) {\r\n case 'date':\r\n const datePipe = new DatePipe('en-US');\r\n return datePipe.transform(value, args[0] || 'medium', args[1], args[2]);\r\n\r\n case 'currency':\r\n const currencyPipe = new CurrencyPipe('en-US');\r\n return currencyPipe.transform(\r\n value,\r\n args[0] || 'USD',\r\n args[1] || 'symbol',\r\n args[2] || '1.2-2',\r\n args[3]\r\n );\r\n\r\n case 'percent':\r\n const percentPipe = new PercentPipe('en-US');\r\n return percentPipe.transform(value, args[0] || '1.2-2', args[1]);\r\n \r\n case 'decimal':\r\n const decimalPipe = new DecimalPipe('en-US');\r\n return decimalPipe.transform(value, args[0] || '1.2-2');\r\n\r\n case 'uppercase':\r\n const upperCasePipe = new UpperCasePipe();\r\n return upperCasePipe.transform(value);\r\n\r\n case 'lowercase':\r\n const lowerCasePipe = new LowerCasePipe();\r\n return lowerCasePipe.transform(value);\r\n\r\n case 'titlecase':\r\n const titleCasePipe = new TitleCasePipe();\r\n return titleCasePipe.transform(value);\r\n\r\n case 'slice':\r\n const slicePipe = new SlicePipe();\r\n return slicePipe.transform(value, args[0] || 0, args[1] || 50);\r\n\r\n case 'json':\r\n return JSON.stringify(value, null, args[0] || 2);\r\n \r\n case 'custom':\r\n if (pipeConfig.customPipe) {\r\n const customPipeInstance = pipeConfig.customPipe();\r\n return customPipeInstance.transform(value, args);\r\n }\r\n return value;\r\n\r\n default:\r\n console.warn(`Unknown pipe ${pipeConfig.name}`);\r\n return value;\r\n }\r\n\r\n } catch (error) {\r\n console.error(`Error aplying pipe ${pipeConfig.name} to value ${value}`, error);\r\n return value;\r\n }\r\n }\r\n}\r\n","import { Component, computed, effect, inject, input, output, viewChild } from '@angular/core';\r\nimport { MatButtonModule } from '@angular/material/button';\r\nimport { MatIconModule } from '@angular/material/icon';\r\nimport { MatSortModule } from '@angular/material/sort';\r\nimport { MatTableDataSource, MatTableModule } from '@angular/material/table';\r\nimport { MatTooltipModule } from '@angular/material/tooltip';\r\nimport { ActionKey, TableConfig } from '../../../models';\r\nimport { MatCardModule } from '@angular/material/card';\r\nimport { MatPaginator, MatPaginatorModule } from '@angular/material/paginator';\r\nimport { NgxSkeletonLoaderModule } from 'ngx-skeleton-loader';\r\nimport { CommonTableService } from '../../services/common-table.service';\r\n\r\n@Component({\r\n selector: 'common-table',\r\n imports: [\r\n MatCardModule,\r\n MatTableModule,\r\n MatSortModule,\r\n MatButtonModule,\r\n MatTooltipModule,\r\n MatIconModule,\r\n MatPaginatorModule,\r\n NgxSkeletonLoaderModule\r\n ],\r\n templateUrl: './common-table.component.html',\r\n styleUrl: './common-table.component.scss',\r\n})\r\nexport class CommonTableComponent<T> {\r\n //dependencies injection\r\n readonly _commonTableService = inject(CommonTableService<T>);\r\n\r\n //inputs\r\n readonly tableConfig = input.required<TableConfig>(); // Table configuration\r\n readonly tableData = input.required<T[]>(); // Table data\r\n readonly isLoading = input.required<boolean>(); // Table loading state\r\n\r\n //outputs\r\n create = output<void>();\r\n view = output<T>();\r\n download = output<T>();\r\n update = output<T>();\r\n delete = output<T>();\r\n\r\n //computed\r\n readonly displayedColumns = computed<string[]>(() => this.tableConfig().tableColumns.map(column => column.key));\r\n readonly datasource = computed<MatTableDataSource<T>>(() => new MatTableDataSource<T>());\r\n readonly paginator = viewChild<MatPaginator>(MatPaginator);\r\n\r\n\r\n constructor() {\r\n effect(() => {\r\n this.datasource().data = this.tableData();\r\n const paginatorInstance = this.paginator();\r\n if (paginatorInstance && !this.isLoading()) {\r\n this.datasource().paginator = paginatorInstance;\r\n }\r\n });\r\n }\r\n\r\n getAllColumns(): string[] {\r\n const columns = [...this.displayedColumns()];\r\n if (this.hasActions()) {\r\n columns.push('actions');\r\n }\r\n return columns;\r\n }\r\n\r\n hasActions(): boolean {\r\n return (\r\n ((this.tableConfig().actions?.canView ||\r\n this.tableConfig().actions?.canUpdate ||\r\n this.tableConfig().actions?.canDelete) as boolean) || false\r\n );\r\n }\r\n\r\n // Check if the action is a function or a boolean value to determine if it can be executed\r\n canDoAction(action: ActionKey, row?: T): boolean {\r\n const fnOrValue = this.tableConfig().actions?.[action];\r\n if (typeof fnOrValue === 'function') {\r\n return row !== undefined ? (fnOrValue as (row: T) => boolean)(row) : false;\r\n }\r\n return !!fnOrValue;\r\n }\r\n\r\n /**\r\n * Actions methods\r\n */\r\n onCreateClick(): void {\r\n this.create.emit(); \r\n }\r\n\r\n onViewClick(row: T): void {\r\n this.view.emit(row);\r\n }\r\n\r\n onDownloadClick(row: T): void {\r\n this.download.emit(row);\r\n }\r\n\r\n onUpdateClick(row: T): void {\r\n this.update.emit(row);\r\n }\r\n\r\n onDeleteClick(row: T): void {\r\n this.delete.emit(row);\r\n }\r\n}\r\n","<mat-card>\r\n <div class=\"tableContainer\">\r\n <div class=\"tableHeader\">\r\n <div class=\"tableHeader__title\">\r\n <span>{{ tableConfig().title }}</span>\r\n </div>\r\n <div class=\"tableHeader__buttons\">\r\n @if(canDoAction('canCreate')) {\r\n <button matMiniFab type=\"button\" (click)=\"onCreateClick()\">\r\n <mat-icon>add</mat-icon>\r\n </button>\r\n }\r\n </div>\r\n </div>\r\n @if(isLoading()) {\r\n <ngx-skeleton-loader [count]=\"tableConfig().skeletonConfig?.count || 5\" />\r\n } @else { \r\n <div class=\"overflowTable\">\r\n <table mat-table class=\"mat-elevation-z8\" [dataSource]=\"datasource()\" class=\"customTable\" matSort>\r\n @for(column of tableConfig().tableColumns; track column.key) {\r\n <!-- Dynamically generate columns -->\r\n <ng-container [matColumnDef]=\"column.key\">\r\n <!-- Header cell definition -->\r\n <th mat-header-cell *matHeaderCellDef>{{ column.displayName }}</th>\r\n \r\n <!-- Data cell definition -->\r\n <td mat-cell *matCellDef=\"let row\">\r\n @switch (column.type) {\r\n @case ('button') {\r\n @if(_commonTableService.isButtonVisible(column, row)) {\r\n <button\r\n [matButton]=\"column.buttonConfig?.variant || 'filled'\"\r\n [class]=\"column.buttonConfig?.color\"\r\n [disabled]=\"_commonTableService.isButtonDisabled(column, row)\"\r\n [matTooltip]=\"column.buttonConfig?.tooltip || ''\"\r\n (click)=\"_commonTableService.onCustomButtonClick(column, row)\"\r\n >\r\n @if(column.buttonConfig?.icon) {\r\n <mat-icon>{{ column.buttonConfig?.icon }}</mat-icon>\r\n }\r\n @if(column.buttonConfig?.text) {\r\n {{ column.buttonConfig?.text }}\r\n }\r\n </button>\r\n }\r\n }\r\n @case ('icon-button') {\r\n @if(_commonTableService.isButtonVisible(column, row)) {\r\n <button \r\n matIconButton\r\n [class]=\"column.buttonConfig?.color\"\r\n [disabled]=\"_commonTableService.isButtonDisabled(column, row)\"\r\n [matTooltip]=\"column.buttonConfig?.tooltip || ''\"\r\n (click)=\"_commonTableService.onCustomButtonClick(column, row)\"\r\n >\r\n @if(column.buttonConfig?.icon) {\r\n <mat-icon>{{ column.buttonConfig?.icon }}</mat-icon>\r\n }\r\n </button>\r\n }\r\n }\r\n @case ('link') {\r\n @if(_commonTableService.isLinkVisible(column, row)) {\r\n <!-- External link -->\r\n @if(_commonTableService.getLinkHref(column, row)) {\r\n <a\r\n [style]=\"{ display: 'flex', alignItems: 'center', gap: '2px' }\"\r\n [href]=\"_commonTableService.getLinkHref(column, row)\"\r\n [target]=\"column.linkConfig?.target || '_blank'\"\r\n [matTooltip]=\"column.linkConfig?.tooltip || ''\"\r\n [style.color]=\"column.linkConfig?.color || 'primary'\"\r\n [style.text-decoration]=\"column.linkConfig?.underline ? 'underline' : 'none'\"\r\n >\r\n @if(column.linkConfig?.icon) {\r\n <mat-icon>{{ column.linkConfig?.icon }}</mat-icon>\r\n }\r\n @if(column.linkConfig?.text) {\r\n {{ column.linkConfig?.text }}\r\n }\r\n </a>\r\n }\r\n }\r\n }\r\n <!-- Text is by default -->\r\n @default {\r\n {{ _commonTableService.getCellValue(column, row) }}\r\n }\r\n }\r\n </td>\r\n </ng-container>\r\n }\r\n \r\n <!-- Actions Column -->\r\n @if(hasActions()) {\r\n <ng-container matColumnDef=\"actions\">\r\n <th mat-header-cell *matHeaderCellDef></th>\r\n <td mat-cell *matCellDef=\"let row\">\r\n @if(canDoAction('canView', row)) {\r\n <button matIconButton (click)=\"onViewClick(row)\">\r\n <mat-icon>visibility</mat-icon>\r\n </button>\r\n }\r\n @if(canDoAction('canDownload', row)) {\r\n <button matIconButton (click)=\"onDownloadClick(row)\">\r\n <mat-icon>download</mat-icon>\r\n </button>\r\n }\r\n @if(canDoAction('canUpdate', row)) {\r\n <button matIconButton (click)=\"onUpdateClick(row)\">\r\n <mat-icon>edit</mat-icon>\r\n </button>\r\n }\r\n @if(canDoAction('canDelete', row)) {\r\n <button matIconButton (click)=\"onDeleteClick(row)\">\r\n <mat-icon>delete</mat-icon>\r\n </button>\r\n }\r\n </td>\r\n </ng-container>\r\n }\r\n \r\n <tr mat-header-row *matHeaderRowDef=\"getAllColumns()\"></tr>\r\n <tr mat-row *matRowDef=\"let row; columns: getAllColumns();\"></tr>\r\n <tr *matNoDataRow>No data available</tr>\r\n </table>\r\n <mat-paginator\r\n #paginator\r\n [length]=\"datasource().data.length\"\r\n [pageSize]=\"tableConfig().paginatorConfig?.pageSize || 5\"\r\n [pageSizeOptions]=\"tableConfig().paginatorConfig?.pageSizeOptions || [5, 10, 25, 100]\"\r\n [showFirstLastButtons]=\"tableConfig().paginatorConfig?.showFirstLastButtons || false\"\r\n />\r\n </div>\r\n }\r\n\r\n </div>\r\n</mat-card>","import { Component, computed, input, output } from '@angular/core';\r\nimport { MatCardModule } from '@angular/material/card';\r\nimport { CommonTableComponent } from '../../common/components/common-table/common-table.component';\r\nimport { TableConfig } from '../../models';\r\n\r\n@Component({\r\n selector: 'ngx-basic-table',\r\n imports: [MatCardModule, CommonTableComponent],\r\n templateUrl: './ngx-basic-table.component.html',\r\n styleUrl: './ngx-basic-table.component.scss'\r\n})\r\nexport class NgxBasicTable<T> {\r\n //inputs\r\n readonly tableConfig = input.required<TableConfig>();\r\n readonly tableData = input.required<T[]>();\r\n readonly isLoading = input.required<boolean>();\r\n\r\n //outputs\r\n create = output<void>();\r\n view = output<T>();\r\n download = output<T>();\r\n update = output<T>();\r\n delete = output<T>();\r\n\r\n /**\r\n * Actions methods\r\n */\r\n onCreateClick(): void {\r\n this.create.emit(); \r\n }\r\n\r\n onViewClick(row: T): void {\r\n this.view.emit(row);\r\n }\r\n\r\n onDownloadClick(row: T): void {\r\n this.download.emit(row);\r\n }\r\n\r\n onUpdateClick(row: T): void {\r\n this.update.emit(row);\r\n }\r\n\r\n onDeleteClick(row: T): void {\r\n this.delete.emit(row);\r\n }\r\n}\r\n","<common-table\r\n [tableConfig]=\"tableConfig()\"\r\n [tableData]=\"tableData()\"\r\n [isLoading]=\"isLoading()\"\r\n (create)=\"onCreateClick()\"\r\n (view)=\"onViewClick($event)\"\r\n (download)=\"onDownloadClick($event)\"\r\n (update)=\"onUpdateClick($event)\"\r\n (delete)=\"onDeleteClick($event)\"\r\n/>\r\n","import { Component } from '@angular/core';\r\n\r\n@Component({\r\n selector: 'ngx-paginated-table',\r\n imports: [],\r\n templateUrl: './ngx-paginated-table.component.html',\r\n styleUrl: './ngx-paginated-table.component.scss'\r\n})\r\nexport class NgxPaginatedTable {\r\n\r\n}\r\n","<p>ngx-paginated-table works!</p>\r\n","import {\n afterRenderEffect,\n ChangeDetectorRef,\n Component,\n effect,\n ElementRef,\n forwardRef,\n inject,\n input,\n OnInit,\n signal,\n untracked,\n viewChild,\n ViewEncapsulation,\n} from '@angular/core';\nimport {\n FormControl,\n NG_VALUE_ACCESSOR,\n ReactiveFormsModule,\n} from '@angular/forms';\nimport { CommonModule } from '@angular/common';\nimport { MatButtonModule } from '@angular/material/button';\nimport { MatChipsModule } from '@angular/material/chips';\nimport { MatFormFieldModule } from '@angular/material/form-field';\nimport { MatIconModule } from '@angular/material/icon';\nimport { MatProgressBarModule } from '@angular/material/progress-bar';\nimport { MatTooltipModule } from '@angular/material/tooltip';\nimport { MatInputModule } from '@angular/material/input';\n\n@Component({\n selector: 'ngx-input-file',\n imports: [\n CommonModule,\n MatButtonModule,\n MatIconModule,\n MatProgressBarModule,\n MatChipsModule,\n MatTooltipModule,\n MatFormFieldModule,\n ReactiveFormsModule,\n MatInputModule,\n ],\n templateUrl: './ngx-input-file.component.html',\n styleUrl: './ngx-input-file.component.scss',\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => NgxInputFile),\n multi: true,\n },\n ],\n})\nexport class NgxInputFile implements OnInit {\n // dependencies injection\n private _cdr = inject(ChangeDetectorRef);\n\n\n value = signal<File[]>([]);\n onChangeCb?: (files: File[]) => void;\n onTouchCb?: () => void;\n\n label = input<string>('Seleccionar archivo');\n control = input.required<FormControl<File[]>>();\n disabled = input<boolean>(false);\n placeholder = input<string>('Haz click o arrastra archivos aquí');\n class = input<string>('');\n accept = input<string[]>([]);\n multiple = input<boolean>(false);\n hint = input<string>('');\n error = input<string>('');\n\n isDropping = signal(false);\n\n inputFileRef = viewChild<ElementRef>('inputFileRef');\n\n internalControl = new FormControl<string[]>([]);\n\n constructor() {\n afterRenderEffect(() => {\n const disabled = this.disabled();\n \n if (disabled && this.control().enabled) {\n this.control().disable({ emitEvent: false });\n this.internalControl.disable({ emitEvent: false });\n } else if (!disabled && this.control().disabled) {\n this.control().enable({ emitEvent: false });\n this.internalControl.enable({ emitEvent: false });\n }\n }); \n }\n\n private checkErrors() {\n if (this.control().invalid) {\n this.internalControl.setErrors(this.control().errors);\n } else {\n this.internalControl.setErrors(null);\n }\n this._cdr.markForCheck();\n }\n\n controlEffect = effect(() => {\n const value = this.value();\n // Usar untracked para evitar ciclos y emitEvent: false para no disparar eventos\n untracked(() => {\n this.control().setValue(value, { emitEvent: false });\n \n // Actualizar el control interno con strings (nombres de archivo)\n const fileNames = value.map(f => f.name);\n this.internalControl.setValue(fileNames, { emitEvent: false });\n \n this.checkErrors();\n this._cdr.markForCheck();\n });\n });\n\n ngOnInit(): void {\n if(this.disabled()) {\n this.control().disable();\n this.internalControl.disable();\n }\n }\n\n onContainerClick() {\n if (!this.disabled()) {\n this.control().markAsTouched();\n this.internalControl.markAsTouched();\n this.checkErrors();\n this._cdr.markForCheck();\n this.onTouchCb?.();\n this.inputFileRef()?.nativeElement.click();\n }\n }\n\n onInputchange(event: any) {\n const target: HTMLInputElement = event.target;\n const files: FileList | null = target.files;\n this.attachFiles(files);\n target.value = '';\n }\n\n onDragOver(event: DragEvent) {\n event.preventDefault();\n this.isDropping.set(true);\n }\n\n onDragLeave(event: DragEvent) {\n event.preventDefault();\n this.isDropping.set(false);\n }\n\n onDrop(event: DragEvent) {\n event.preventDefault();\n this.isDropping.set(false);\n this.onTouchCb?.();\n if (!this.disabled()) {\n const files = event.dataTransfer?.files;\n // const validation = validateFiles(files, this.accept());\n\n this.attachFiles(files);\n }\n }\n\n attachFiles(files: FileList | null | undefined) {\n if (files && files.length > 0) {\n let newValue: File[];\n \n if (this.multiple()) {\n const currentFiles = this.value();\n const newFiles = Array.from(files);\n newValue = [...currentFiles, ...newFiles];\n } else {\n newValue = [files[0]];\n }\n \n this.value.set(newValue);\n this.onChangeCb?.(newValue);\n this.control().markAsTouched();\n this.internalControl.markAsTouched();\n this.control().markAsDirty();\n this.internalControl.markAsDirty();\n }\n }\n\n writeValue(files: File[] | undefined | null): void {\n this.value.set(files ?? []);\n }\n\n registerOnChange(fn: any): void {\n this.onChangeCb = fn;\n }\n\n registerOnTouched(fn: any): void {\n this.onTouchCb = fn;\n }\n\n onDeleteFileClick(file: File) {\n const newValue = this.value().filter((item) => item !== file);\n this.value.set(newValue);\n this.onChangeCb?.(newValue);\n this.control().markAsTouched();\n this.internalControl.markAsTouched();\n this.control().markAsDirty();\n this.internalControl.markAsDirty();\n }\n\n getAccept(): string {\n return this.accept().join();\n }\n\n bytesToMegaBytes(bytes: number): string {\n return (bytes / 1024 / 1024).toFixed(1);\n }\n}\n","<mat-form-field\r\n appearance=\"outline\"\r\n floatLabel=\"always\"\r\n (click)=\"onContainerClick()\"\r\n (dragover)=\"onDragOver($event)\"\r\n (dragleave)=\"onDragLeave($event)\"\r\n (drop)=\"onDrop($event)\"\r\n [class.dragover]=\"isDropping()\"\r\n>\r\n <mat-label>{{ label() }}</mat-label>\r\n <mat-chip-grid \r\n #chipGrid \r\n [formControl]=\"internalControl\"\r\n class=\"chips-grid\"\r\n >\r\n @for(file of value(); track file.name + $index) {\r\n <mat-chip-row\r\n (removed)=\"onDeleteFileClick(file)\"\r\n class=\"chip-item\"\r\n [title]=\"file.name\"\r\n >\r\n <div class=\"chip-content\">\r\n <span class=\"chip-label\">\r\n ({{ bytesToMegaBytes(file.size) }} MB) {{ file.name }}\r\n </span>\r\n </div>\r\n <button matChipRemove [attr.aria-label]=\"'Eliminar ' + file.name\">\r\n <mat-icon>cancel</mat-icon>\r\n </button>\r\n </mat-chip-row>\r\n }\r\n </mat-chip-grid>\r\n <input \r\n #inputFileRef\r\n type=\"file\"\r\n [accept]=\"getAccept()\" \r\n [multiple]=\"multiple()\" \r\n (change)=\"onInputchange($event)\"\r\n [matChipInputFor]=\"chipGrid\"\r\n style=\"display: none\"\r\n /> \r\n <mat-hint>{{ isDropping() ? 'Arrastrar archivos aquí' : hint() }}</mat-hint>\r\n <mat-error>{{ error() }}</mat-error>\r\n</mat-form-field>","export const includeNoSensible = (cadena: string, query: string): boolean => {\r\n const nomalizadoCadena = cadena\r\n .toLowerCase()\r\n .normalize('NFD')\r\n .replace(/[\\u0300-\\u036f]/g, '');\r\n const nomalizadoQuery = query\r\n .toLowerCase()\r\n .normalize('NFD')\r\n .replace(/[\\u0300-\\u036f]/g, '');\r\n return nomalizadoCadena.includes(nomalizadoQuery);\r\n};\r\n\r\nexport const base64ToUtf8 = (str: string): string => {\r\n return decodeURIComponent(\r\n atob(str)\r\n .split('')\r\n .map(function (c) {\r\n return '%' + ('00' + c.charCodeAt(0).toString(16)).slice(-2);\r\n })\r\n .join('')\r\n );\r\n};\r\n","import { afterRenderEffect, Component, effect, ElementRef, input, OnInit, output, signal, untracked, viewChild } from '@angular/core';\nimport { FormControl, ReactiveFormsModule } from '@angular/forms';\nimport { MatButtonModule } from '@angular/material/button';\nimport { MatFormFieldModule } from '@angular/material/form-field';\nimport { MatIconModule } from '@angular/material/icon';\nimport { MatInputModule } from '@angular/material/input';\nimport { MatProgressSpinnerModule } from '@angular/material/progress-spinner';\nimport { MatSelect, MatSelectChange, MatSelectModule } from '@angular/material/select';\nimport { BasicSelectConfig } from '../../models';\nimport { includeNoSensible } from '../../utils';\n\n@Component({\n selector: 'ngx-basic-select',\n imports: [\n MatInputModule,\n MatSelectModule,\n MatIconModule,\n MatButtonModule,\n MatFormFieldModule,\n ReactiveFormsModule,\n MatProgressSpinnerModule,\n],\n templateUrl: './ngx-basic-select.component.html',\n styleUrl: './ngx-basic-select.component.scss',\n})\nexport class NgxBasicSelect<T> {\n\n //inputs\n readonly label = input.required<string>();\n readonly options = input.required<T[]>();\n readonly basicSelectConfig = input.required<BasicSelectConfig<T>>();\n readonly control = input.required<FormControl>();\n readonly isLoading = input.required<boolean>();\n readonly placeholder = input<string>('');\n readonly appearance = input<'fill' | 'outline'>('fill');\n readonly multiple = input<boolean>(false);\n readonly disabled = input<boolean>(false);\n readonly clearable = input<boolean>(false);\n readonly error = input<string>('');\n readonly class = input<string>('');\n\n //outputs\n selectionChange = output<any>();\n\n //viewChilds\n readonly matSelect = viewChild.required<MatSelect>('matSelect');\n readonly searchInput = viewChild<ElementRef>('searchInput');\n\n constructor() {\n afterRenderEffect(() => {\n const disabled = this.disabled();\n const control = this.control();\n\n if (disabled && control.enabled) {\n control.disable({ emitEvent: false });\n } else if (!disabled && control.disabled) {\n control.enable({ emitEvent: false });\n }\n });\n }\n\n onOpenedChange(opened: boolean): void {\n if (opened) {\n this.onClearInputClick();\n setTimeout(() => {\n const panel = this.matSelect().panel?.nativeElement;\n if (panel) {\n panel.scrollTop = 0;\n }\n });\n }\n }\n\n includeInFilter(option: T, query: string): boolean {\n return includeNoSensible(String(this.basicSelectConfig().displayedLabel(option)), query);\n }\n\n onClearClick(): void {\n const newValue = this.multiple() ? [] : null;\n this.control().setValue(newValue, { emitEvent: true });\n this.control().markAsTouched();\n this.control().updateValueAndValidity();\n this.selectionChange.emit(newValue);\n }\n\n onSelectionChange(event: MatSelectChange): void {\n if(this.multiple()) {\n const values = event.value as T[];\n this.selectionChange.emit(values);\n } else {\n const value = event.value as T;\n this.selectionChange.emit(value);\n }\n }\n\n onClearInputClick(): void {\n const searchInputRef = this.searchInput();\n if (searchInputRef) {\n searchInputRef.nativeElement.value = '';\n searchInputRef.nativeElement.focus();\n }\n }\n}\n","\n<mat-form-field [appearance]=\"appearance()\" [className]=\"class()\">\n <mat-label>{{ label() }}</mat-label>\n <mat-select \n #matSelect\n [formControl]=\"control()\"\n (selectionChange)=\"onSelectionChange($event)\"\n [multiple]=\"multiple()\"\n [placeholder]=\"placeholder()\"\n (openedChange)=\"onOpenedChange($event)\"\n >\n @if(!isLoading()) {\n <div class=\"searchFilter\">\n <mat-icon class=\"searchIcon\">search</mat-icon>\n <input \n matInput\n #searchInput \n type=\"text\"\n (keydown)=\"$event.stopPropagation()\"\n />\n <button matIconButton (click)=\"onClearInputClick(); searchInput.value = ''\">\n <mat-icon>close</mat-icon>\n </button>\n </div>\n @for(option of options(); track option[basicSelectConfig().valueKey]) {\n <mat-option \n [value]=\"option[basicSelectConfig().valueKey]\" \n [disabled]=\"basicSelectConfig().disabled ? basicSelectConfig().disabled?.(option) : false\"\n [style]=\"{ display: includeInFilter(option, searchInput.value) ? 'flex' : 'none' }\"\n > \n {{ basicSelectConfig().displayedLabel(option) }}\n </mat-option>\n }\n }\n </mat-select>\n @if(isLoading()) {\n <mat-icon matSuffix><mat-spinner diameter=\"20\" /></mat-icon>\n } @else if(clearable() && (multiple() ? control().value?.length : control().value)) {\n <mat-icon matSuffix (click)=\"onClearClick(); $event.stopPropagation()\">close</mat-icon>\n }\n <mat-error>{{ error() }}</mat-error>\n</mat-form-field>","import { Component, computed, effect, inject, signal, TemplateRef, untracked, ViewEncapsulation, viewChild, WritableSignal } from '@angular/core';\nimport { MAT_BOTTOM_SHEET_DATA, MatBottomSheetRef } from '@angular/material/bottom-sheet';\nimport { PaginatedFilter, PaginatedSelectConfig } from '../../../models';\nimport { debounceTime, delay, distinctUntilChanged, Observable, Subject, takeUntil } from 'rxjs';\nimport { PaginatedItems } from '../../../models/paginated-items';\nimport { rxResource, toObservable, toSignal } from '@angular/core/rxjs-interop';\nimport { MatButtonModule } from '@angular/material/button';\nimport { CommonModule } from '@angular/common';\nimport { MatDividerModule } from '@angular/material/divider';\nimport { MatFormFieldModule } from '@angular/material/form-field';\nimport { MatIconModule } from '@angular/material/icon';\nimport { MatInputModule } from '@angular/material/input';\nimport { MatProgressBarModule } from '@angular/material/progress-bar';\nimport {MatListModule, MatSelectionList, MatSelectionListChange} from '@angular/material/list';\nimport { FormControl, ReactiveFormsModule } from '@angular/forms';\nimport { MatChipsModule } from '@angular/material/chips';\n\n@Component({\n selector: 'paginated-select-bottom-sheet',\n imports: [\n MatButtonModule, \n MatDividerModule, \n CommonModule, \n MatFormFieldModule,\n MatIconModule,\n MatInputModule,\n MatChipsModule,\n MatProgressBarModule,\n MatListModule,\n ReactiveFormsModule,\n ],\n templateUrl: './paginated-select-bottom-sheet.component.html',\n styleUrl: './paginated-select-bottom-sheet.component.scss',\n encapsulation: ViewEncapsulation.None,\n})\nexport class PaginatedSelectBottomSheetComponent<T, U extends PaginatedFilter> {\n // dependencies injection\n private _bottomSheetRef = inject(MatBottomSheetRef<PaginatedSelectBottomSheetComponent<T, U>>);\n readonly _data = inject<{\n label: string;\n title?: string;\n endpoint: (filters: U) => Observable<PaginatedItems<T>>;\n config: PaginatedSelectConfig<T>;\n selectedItems: T[];\n hideFilter: boolean;\n filters: WritableSignal<U>;\n filterPlaceholder: string;\n multiple: boolean;\n itemsLabel: string;\n multipleItemsLabel: string;\n resetLabel: string;\n confirmLabel: string;\n extraFiltersTemplate: TemplateRef<any>;\n optionTemplate: TemplateRef<any> | null;\n noResultsMessage: string;\n }>(MAT_BOTTOM_SHEET_DATA);\n\n //signals\n private accumulatedItems = signal<T[]>([]);\n public queryInput = signal<string>(this._data.filters().query ?? '');\n\n private cancel$ = new Subject<void>();\n readonly debouncedQuery = toSignal(\n toObservable(this.queryInput).pipe(\n debounceTime(500),\n distinctUntilChanged()\n ),\n { initialValue: this._data.filters().query ?? '' }\n );\n\n // Obtener valores iniciales seleccionados\n private getInitialSelectedValues(): T[keyof T][] {\n return this._data.selectedItems.map(item => item[this._data.config.valueKey as keyof T]);\n }\n\n public selectedsOptions = signal<T[]>(this._data.selectedItems);\n public selectedsOptionsValues = signal<T[keyof T][]>(this.getInitialSelectedValues());\n\n //viewChild\n readonly selectionList = viewChild<MatSelectionList>('selectionList');\n\n //resource\n optionsResource = rxResource({\n params: () => {\n const filters: U = {\n ...this._data.filters(),\n query: this.debouncedQuery(),\n };\n untracked(() => this.cancel$.next());\n return filters;\n },\n stream: ({ params }) => this._data.endpoint(params).pipe(\n takeUntil(this.cancel$),\n ),\n defaultValue: { items: [], total: 0 } as PaginatedItems<T>,\n });\n\n //computed\n readonly isLoading = computed<boolean>(() => this.optionsResource.isLoading());\n readonly options = computed<T[]>(() => this.accumulatedItems());\n readonly total = computed<number>(() => this.optionsResource.value().total);\n\n //effect\n filtersEffect = effect(() => {\n const resourceValue = this.optionsResource.value();\n const currentPage = this._data.filters().pageNumber;\n if (currentPage === 1) {\n this.accumulatedItems.set(resourceValue.items);\n } else {\n this.accumulatedItems.update((current) => [...current, ...resourceValue.items]);\n }\n });\n \n constructor() {\n // Resetear a la página 1 cuando se abre el componente\n this._data.filters.update((current) => ({\n ...current,\n pageNumber: 1\n }));\n // Limpiar items acumulados de sesiones anteriores\n this.accumulatedItems.set([]);\n }\n\n onScroll(div: HTMLDivElement): void {\n if(this.isLoading()) return;\n\n const scrollTop = div.scrollTop;\n const clientHeight = div.clientHeight;\n const scrollHeight = div.scrollHeight;\n const marginToBottom = 300;\n const isNearToBottom = scrollTop + clientHeight + marginToBottom >= scrollHeight;\n \n const optionsLength = this.options().length;\n const total = this.total();\n\n if(isNearToBottom && total > optionsLength) {\n this._data.filters.update((current) => ({\n ...current,\n pageNumber: current.pageNumber + 1\n }));\n }\n }\n\n onQueryChange(event: Event, div: HTMLDivElement): void {\n const query = (event.target as HTMLInputElement).value;\n this.queryInput.set(query);\n div.scrollTop = 0;\n\n if (this._data.filters().pageNumber !== 1) {\n this._data.filters.update((current) => ({\n ...current,\n pageNumber: 1\n }));\n }\n }\n\n onClearClick(input: HTMLInputElement): void {\n input.value = '';\n this.queryInput.set('');\n if (this._data.filters().pageNumber !== 1) {\n this._data.filters.update((current) => ({\n ...current,\n pageNumber: 1\n }));\n }\n }\n\n \n onSelectionChange(event: MatSelectionListChange): void {\n if (this._data.multiple) {\n const selectedsOptionsValues = event.source.selectedOptions.selected.map(option => option.value);\n const selectedsOptions = this.options().filter(option => selectedsOptionsValues.includes(option[this._data.config.valueKey]));\n this.selectedsOptions.update(() => {\n return selectedsOptions;\n });\n } else {\n const selectedOptionValue = event.options[0].value;\n const selectedOption = this.options().find(option => option[this._data.config.valueKey] == selectedOptionValue);\n this._bottomSheetRef.dismiss([selectedOption]);\n }\n }\n\n isSelected(optionValue: any): boolean {\n return this.selectedsOptionsValues().includes(optionValue);\n }\n\n onResetClick(): void {\n this.selectedsOptions.set([]);\n this.selectedsOptionsValues.set([]);\n const list = this.selectionList();\n if (list) {\n list.deselectAll();\n }\n }\n\n onConfirmMultiSelectionClick(): void {\n this._bottomSheetRef.dismiss(this.selectedsOptions());\n }\n}\n","<div class=\"bottomSheetContainer\">\n <div class=\"header\">\n @if(_data.title) {\n <div class=\"title\">\n {{ _data.title }}\n </div>\n }\n @if(!_data.hideFilter) {\n <mat-form-field subscriptSizing=\"dynamic\" appearance=\"outline\">\n <mat-icon matPrefix>search</mat-icon>\n <input matInput #searchInput [placeholder]=\"_data.filterPlaceholder\" [value]=\"queryInput()\" (input)=\"onQueryChange($event, optionsContainer); $event.stopPropagation()\" />\n @if(searchInput.value.length > 0) {\n <button matSuffix mat-icon-button (click)=\"onClearClick(searchInput); $event.stopPropagation()\">\n <mat-icon>close</mat-icon>\n </button>\n }\n </mat-form-field>\n \n <mat-chip-listbox [multiple]=\"false\">\n @for(filterKey of _data.config.filtersKeys; track filterKey.key) {\n <mat-chip-option [value]=\"filterKey.key\" [selected]=\"\">{{ filterKey.label() }}</mat-chip-option>\n }\n </mat-chip-listbox>\n }\n\n @if(_data.extraFiltersTemplate) {\n <br />\n <ng-container *ngTemplateOutlet=\"_data.extraFiltersTemplate;\"></ng-container>\n }\n </div>\n <div>\n @if(isLoading()) {\n <mat-progress-bar mode=\"indeterminate\" />\n }\n </div>\n <div #optionsContainer class=\"optionsContainer\" (scroll)=\"onScroll(optionsContainer)\">\n <mat-selection-list #selectionList [multiple]=\"_data.multiple\" (selectionChange)=\"onSelectionChange($event)\">\n @if(options().length === 0 && !isLoading()) {\n <div class=\"no-results\">\n <mat-icon>search_off</mat-icon>\n <p>{{ _data.noResultsMessage }}</p>\n </div>\n }\n @for(option of options(); track option[_data.config.valueKey]; let last = $last) {\n <mat-list-option \n [value]=\"option[_data.config.valueKey]\"\n [selected]=\"isSelected(option[_data.config.valueKey])\"\n [disabled]=\"_data.config.disabled ? _data.config.disabled(option) : false\"\n >\n @if(_data.optionTemplate) {\n <ng-container *ngTemplateOutlet=\"_data.optionTemplate; context: { $implicit: option }\"></ng-container>\n } @else {\n {{_data.config.displayedLabel(option)}}\n }\n </mat-list-option>\n @if(!last) {\n <mat-divider />\n }\n }\n </mat-selection-list>\n </div> \n\n\n <div class=\"footer\">\n @if(_data.multiple) {\n <div class=\"length\">\n {{ selectedsOptions().length }} / {{ total() }} {{ _data.multipleItemsLabel }}\n </div>\n <div class=\"actions\">\n @if(selectedsOptions().length > 0) {\n <button matButton (click)=\"onResetClick()\">{{ _data.resetLabel }}</button>\n }\n <button matButton=\"filled\" color=\"primary\" (click)=\"onConfirmMultiSelectionClick()\">{{ _data.confirmLabel }}</button>\n </div>\n } @else {\n <div class=\"length\">\n {{ total() }} {{ _data.itemsLabel }}\n </div>\n }\n </div>\n</div>","import { ChangeDetectorRef, Component, effect, inject, input, OnInit, output, signal, TemplateRef, viewChild, WritableSignal } from '@angular/core';\nimport { PaginatedFilter, PaginatedSelectConfig } from '../../models';\nimport { Observable } from 'rxjs';\nimport { PaginatedItems } from '../../models/paginated-items';\nimport { MatButtonModule } from '@angular/material/button';\nimport { MatBottomSheet, MatBottomSheetModule } from '@angular/material/bottom-sheet';\nimport { PaginatedSelectBottomSheetComponent } from '../../common/components/paginated-select-bottom-sheet/paginated-select-bottom-sheet.component';\nimport { FormControl, ReactiveFormsModule } from '@angular/forms';\nimport { CommonModule } from '@angular/common';\nimport { MatFormFieldModule } from '@angular/material/form-field';\nimport { MatInputModule } from '@angular/material/input';\nimport { MatIconModule } from '@angular/material/icon';\nimport { MatSelect, MatSelectModule } from '@angular/material/select';\nimport { MatChipsModule } from \"@angular/material/chips\";\n\n@Component({\n selector: 'ngx-paginated-select',\n imports: [\n MatButtonModule,\n MatBottomSheetModule,\n CommonModule,\n MatFormFieldModule,\n MatInputModule,\n MatIconModule,\n MatSelectModule,\n ReactiveFormsModule,\n MatChipsModule,\n MatSelectModule,\n],\n templateUrl: './ngx-paginated-select.component.html',\n styleUrl: './ngx-paginated-select.component.scss',\n})\nexport class NgxPaginatedSelect<T, U extends PaginatedFilter> implements OnInit {\n // dependencies injection\n private _bottomSheet = inject(MatBottomSheet);\n private _cdr = inject(ChangeDetectorRef);\n\n // inputs\n readonly label = input.required<string>();\n readonly title = input<string>('');\n readonly endpoint = input.required<(filters: U) => Observable<PaginatedItems<T>>>();\n readonly config = input.required<PaginatedSelectConfig<T>>();\n filters = input<WritableSignal<U>>(\n signal<U>(\n {\n pageNumber: 1,\n pageSize: 10,\n query: undefined,\n sortBy: undefined\n } as U\n )\n );\n readonly control = input.required<FormControl>();\n readonly selectedItems = input<T[]>([]);\n readonly hideFilter = input<boolean>(false);\n readonly filterPlaceholder = input<string>('Select an option');\n readonly multiple = input<boolean>(false);\n readonly disabled = input<boolean>(false);\n readonly clearable = input<boolean>(false);\n readonly itemsLabel = input<string>('items');\n readonly multipleItemsLabel = input<string>('items selected');\n readonly resetLabel = input<string>('Reset');\n readonly confirmLabel = input<string>('Confirm');\n readonly error = input<string>('');\n readonly class = input<string>('');\n readonly hideChips = input<boolean>(false);\n readonly optionTemplate = input<TemplateRef<any> | null>(null);\n readonly noResultsMessage = input<string>('No results found');\n\n //outputs\n readonly resetFilters = output<void>();\n\n //viewChild\n extraFiltersTemplate = viewChild.required<TemplateRef<any>>('extraFiltersTemplate');\n matSelect = viewChild<MatSelect>('matSelect');\n\n _selectedItems = signal<T[]>([]);\n _initialFilters = signal<U | null>(null);\n constructor() {\n effect(() => {\n this._selectedItems.set(this.selectedItems());\n });\n }\n\n ngOnInit(): void {\n this._initialFilters.set({ ...this.filters()() });\n\n if(this.disabled()) {\n this.control().disable();\n }\n }\n\n getSelectedItemsLabel(): string {\n return this._selectedItems()\n .map((item: T) => String(this.config().displayedLabel(item)))\n .join(', ') || '';\n }\n\n // effect\n controlEffect = effect(() => {\n const selectedItems = this._selectedItems();\n if(this.multiple()) {\n this.control().setValue(selectedItems.map((item: T) => item[this.config().valueKey as keyof T]));\n } else {\n this.control().setValue(selectedItems?.[0]?.[this.config().valueKey as keyof T]);\n }\n this._cdr.markForCheck();\n });\n\n onOpenBottomSheetClick(event: Event): void {\n event.preventDefault();\n event.stopPropagation();\n\n if(this.disabled()) {\n return;\n }\n\n (event.target as HTMLElement).blur();\n\n this.control().markAsTouched();\n this.control().updateValueAndValidity();\n this._cdr.detectChanges()\n \n this._bottomSheet.open(PaginatedSelectBottomSheetComponent, {\n data: {\n label: this.label(),\n title: this.title(),\n endpoint: this.endpoint(),\n config: this.config(),\n selectedItems: this._selectedItems(),\n hideFilter: this.hideFilter(),\n filters: this.filters(),\n filterPlaceholder: this.filterPlaceholder(),\n multiple: this.multiple(),\n itemsLabel: this.itemsLabel(),\n multipleItemsLabel: this.multipleItemsLabel(),\n resetLabel: this.resetLabel(),\n confirmLabel: this.confirmLabel(),\n extraFiltersTemplate: this.extraFiltersTemplate(),\n optionTemplate: this.optionTemplate(),\n noResultsMessage: this.noResultsMessage(),\n },\n }).afterDismissed().subscribe((selectedItems: T[] | undefined) => {\n if(selectedItems !== undefined) {\n this._selectedItems.set(selectedItems);\n }\n this.resetFilters.emit();\n });\n }\n\n preventOpening(isOpen: boolean): void {\n if (isOpen) {\n // Forzar el cierre inmediato\n if (this.matSelect()) {\n this.matSelect()?.close();\n }\n }\n }\n\n onChipRemoved(item: T): void {\n this._selectedItems.set(this._selectedItems().filter(i => i[this.config().valueKey as keyof T] !== item[this.config().valueKey as keyof T]));\n this.control().markAsTouched();\n this.control().updateValueAndValidity();\n this._cdr.detectChanges()\n }\n\n onResetClick(event: Event): void {\n event.stopPropagation();\n event.preventDefault();\n this._selectedItems.set([]);\n this.control().reset();\n this.control().markAsTouched();\n this.control().updateValueAndValidity();\n this._cdr.markForCheck();\n }\n}\n","@if(hideChips()) {\n <mat-form-field \n appearance=\"outline\" \n floatLabel=\"always\"\n (click)=\"onOpenBottomSheetClick($event)\"\n >\n <mat-label>{{ label() }}</mat-label>\n <mat-select \n #matSelect\n [formControl]=\"control()\"\n [multiple]=\"multiple()\"\n class=\"clickable-input\"\n (openedChange)=\"preventOpening($event)\"\n >\n @for(item of _selectedItems(); track item[config().valueKey]) {\n <mat-option [value]=\"item[config().valueKey]\">\n {{ config().displayedLabel(item) }}\n </mat-option>\n }\n </mat-select>\n <div matSuffix>\n @if(clearable() && control().value) {\n <button matIconButton matSuffix (click)=\"onResetClick($event);\">\n <mat-icon>close</mat-icon>\n </button>\n }\n <mat-icon matSuffix>arrow_drop_down</mat-icon>\n </div>\n <mat-error>{{ error() }}</mat-error>\n </mat-form-field>\n} @else {\n <mat-form-field \n appearance=\"outline\" \n floatLabel=\"always\"\n (click)=\"onOpenBottomSheetClick($event)\"\n >\n <mat-label>{{ label() }}</mat-label>\n <mat-chip-grid \n #chipGrid \n class=\"chips-grid\" \n [formControl]=\"control()\"\n >\n @for(item of _selectedItems(); track item[config().valueKey]) {\n <mat-chip-row\n (removed)=\"onChipRemoved(item)\"\n class=\"chip-item\"\n >\n {{ config().displayedLabel(item) }}\n <button matChipRemove>\n <mat-icon>cancel</mat-icon>\n </button>\n </mat-chip-row>\n }\n </mat-chip-grid>\n\n\n <input \n matInput\n [matChipInputFor]=\"chipGrid\"\n style=\"display: none\"\n />\n <mat-icon matSuffix>arrow_drop_down</mat-icon>\n <mat-error>{{ error() }}</mat-error>\n </mat-form-field>\n}\n\n<ng-template #extraFiltersTemplate>\n <ng-content select=\"[extra-filters]\" />\n</ng-template>","import { TemplateRef, Type } from \"@angular/core\";\r\n\r\nexport enum DialogBodyType {\r\n TEXT = 'text',\r\n HTML = 'html',\r\n COMPONENT = 'component',\r\n TEMPLATE = 'template'\r\n}\r\n\r\nexport interface DialogBodyConfig<T = any> {\r\n type: DialogBodyType;\r\n content: string | Type<T> | TemplateRef<any>;\r\n data?: T;\r\n}\r\n\r\nexport interface DialogConfig<T = any> {\r\n title: string;\r\n icon?: string;\r\n iconColor?: string;\r\n subtitle?: string;\r\n body: DialogBodyConfig<T>;\r\n showCancel?: boolean;\r\n showConfirm?: boolean;\r\n cancelText?: string;\r\n confirmText?: string;\r\n}","import { ComponentRef, Directive, effect, inject, input, signal, Type, ViewContainerRef } from \"@angular/core\";\r\n\r\n@Directive({\r\n selector: '[ngxDynamicHost]'\r\n})\r\nexport class DynamicHostDirective<T> {\r\n private _vcr = inject(ViewContainerRef);\r\n private _currentRef: ComponentRef<any> | null = null;\r\n\r\n component = input<Type<any>>();\r\n data = input<T>();\r\n\r\n constructor() {\r\n effect(() => {\r\n const componentType = this.component();\r\n \r\n // 1. Gestión de la creación/destrucción del componente\r\n if (!componentType) {\r\n this._vcr.clear();\r\n this._currentRef = null;\r\n return;\r\n }\r\n\r\n // Si el componente es diferente al que tenemos, lo recreamos\r\n if (this._currentRef?.componentType !== componentType) {\r\n this._vcr.clear();\r\n this._currentRef = this._vcr.createComponent(componentType);\r\n }\r\n \r\n // 2. Actualización de datos (siempre, tanto si es nuevo como si ya existía)\r\n const data = this.data();\r\n if (this._currentRef && data !== undefined) {\r\n // La forma correcta de setear un input en Angular moderno\r\n this._currentRef.setInput('data', data); \r\n }\r\n });\r\n }\r\n}","import { Component, inject } from '@angular/core';\r\nimport { MatButtonModule } from '@angular/material/button';\r\nimport { MAT_DIALOG_DATA, MatDialogActions, MatDialogContent, MatDialogRef, MatDialogTitle } from '@angular/material/dialog';\r\nimport { DialogBodyType, DialogConfig } from '../../models/dialog-config';\r\nimport { CommonModule } from '@angular/common';\r\nimport { DynamicHostDirective } from '../../directives';\r\nimport { MatIconModule } from '@angular/material/icon';\r\nimport { MatDividerModule } from '@angular/material/divider';\r\n\r\n@Component({\r\n selector: 'ngx-dialog',\r\n imports: [\r\n MatDialogTitle,\r\n MatDialogContent,\r\n MatDialogActions,\r\n MatDividerModule,\r\n MatButtonModule,\r\n MatIconModule,\r\n CommonModule,\r\n DynamicHostDirective \r\n ],\r\n templateUrl: './ngx-dialog.component.html',\r\n styleUrl: './ngx-dialog.component.scss',\r\n})\r\nexport class NgxDialog<T = any> { \r\n //dependencies injection\r\n private _dialogRef = inject(MatDialogRef<NgxDialog>);\r\n private _data = inject<DialogConfig<T>>(MAT_DIALOG_DATA);\r\n\r\n readonly title = this._data.title;\r\n readonly icon = this._data.icon;\r\n readonly iconColor = this._data.iconColor;\r\n readonly subtitle = this._data.subtitle;\r\n readonly body = this._data.body;\r\n readonly showCancel = this._data.showCancel ?? true;\r\n readonly showConfirm = this._data.showConfirm ?? true;\r\n readonly cancelText = this._data.cancelText ?? 'Cancelar';\r\n readonly confirmText = this._data.confirmText ?? 'Aceptar';\r\n\r\n DialogBodyType = DialogBodyType;\r\n\r\n onCancelClick(): void {\r\n this._dialogRef.close(false);\r\n }\r\n\r\n onConfirmClick(): void {\r\n this._dialogRef.close(true);\r\n }\r\n}\r\n","<h2 mat-dialog-title class=\"title\">\r\n {{ title }}\r\n @if(icon) {\r\n <mat-icon \r\n [style.color]=\"iconColor\"\r\n class=\"icon\"\r\n >\r\n {{ icon }}\r\n </mat-icon>\r\n }\r\n</h2>\r\n<mat-dialog-content>\r\n @if(subtitle) {\r\n <p class=\"subtitle\">{{ subtitle }}</p>\r\n <mat-divider />\r\n }\r\n\r\n <div class=\"content\">\r\n @switch (body.type) {\r\n @case (DialogBodyType.TEXT) {\r\n <p>{{ body.content }}</p>\r\n }\r\n @case (DialogBodyType.HTML) {\r\n <div [innerHTML]=\"body.content\"></div>\r\n }\r\n @case (DialogBodyType.COMPONENT) {\r\n <ng-container \r\n ngxDynamicHost \r\n [component]=\"$any(body.content)\"\r\n [data]=\"body.data\"\r\n />\r\n }\r\n @case (DialogBodyType.TEMPLATE) {\r\n <ng-container \r\n [ngTemplateOutlet]=\"$any(body.content)\"\r\n [ngTemplateOutletContext]=\"{ $implicit: body.data }\"\r\n />\r\n }\r\n }\r\n </div>\r\n\r\n</mat-dialog-content>\r\n<mat-dialog-actions align=\"end\" class=\"matDialogActionsCustomGap\">\r\n @if(showCancel) {\r\n <button matButton=\"outlined\" (click)=\"onCancelClick()\">\r\n {{ cancelText }}\r\n </button>\r\n }\r\n @if(showConfirm) {\r\n <button matButton=\"filled\" (click)=\"onConfirmClick()\">\r\n {{ confirmText }}\r\n </button>\r\n }\r\n</mat-dialog-actions>\r\n","import { inject, Injectable, TemplateRef, Type } from \"@angular/core\";\r\nimport { MatDialog, MatDialogConfig } from \"@angular/material/dialog\";\r\nimport { DialogBodyConfig, DialogBodyType } from \"../models/dialog-config\";\r\nimport { Observable } from \"rxjs\";\r\nimport { NgxDialog } from \"../components\";\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class NgxDialogService {\r\n // dependencies injection\r\n private readonly _dialog = inject(MatDialog);\r\n\r\n /**\r\n * \r\n * @param config\r\n * @param dialogConfig\r\n * @returns Observable<DialogResult>\r\n * \r\n * Opens a text dialog with the provided configuration.\r\n */\r\n openText(\r\n config: {\r\n title: string;\r\n content: string;\r\n subtitle?: string;\r\n cancelText?: string;\r\n confirmText?: string;\r\n icon?: string;\r\n iconColor?: string;\r\n showCancel?: boolean;\r\n showConfirm?: boolean;\r\n },\r\n dialogConfig?: MatDialogConfig\r\n ): Observable<boolean | undefined> {\r\n return this._dialog.open(NgxDialog, {\r\n ...dialogConfig,\r\n data: {\r\n ...config,\r\n body: {\r\n type: DialogBodyType.TEXT,\r\n content: config.content \r\n } satisfies DialogBodyConfig,\r\n },\r\n minWidth: dialogConfig?.minWidth ?? '400px',\r\n autoFocus: dialogConfig?.autoFocus ?? false\r\n }).afterClosed();\r\n }\r\n\r\n /**\r\n * \r\n * @param title \r\n * @param message \r\n * @param cancelText\r\n * @param confirmText \r\n * @param dialogConfig\r\n * @returns Observable<DialogResult>\r\n * \r\n * Opens a confirmation dialog with cancel and confirm buttons.\r\n */\r\n confirm(config: {\r\n title: string;\r\n message: string;\r\n subtitle?: string;\r\n icon?: string;\r\n iconColor?: string;\r\n cancelText?: string;\r\n confirmText?: string;\r\n }, dialogConfig?: MatDialogConfig\r\n ): Observable<boolean | undefined> {\r\n return this.openText({\r\n title: config.title,\r\n content: config.message,\r\n subtitle: config.subtitle,\r\n icon : config.icon,\r\n iconColor : config.iconColor,\r\n cancelText : config.cancelText ?? 'Cancelar',\r\n confirmText : config.confirmText ?? 'Confirmar'\r\n }, dialogConfig);\r\n }\r\n\r\n /**\r\n * \r\n * @param title \r\n * @param message \r\n * @param confirmText\r\n * @param dialogConfig\r\n * @returns Observable<DialogResult>\r\n * \r\n * Opens an informational dialog with a single confirm button. \r\n */\r\n info(\r\n config: {\r\n title: string;\r\n message: string;\r\n subtitle?: string;\r\n icon?: string;\r\n iconColor?: string;\r\n confirmText?: string;\r\n },\r\n dialogConfig?: MatDialogConfig\r\n ): Observable<boolean | undefined> {\r\n return this.openText({\r\n title: config.title,\r\n content: config.message,\r\n subtitle: config.subtitle,\r\n icon: config.icon,\r\n iconColor: config.iconColor,\r\n showCancel: false,\r\n confirmText: config.confirmText ?? 'Aceptar',\r\n }, dialogConfig);\r\n }\r\n\r\n /**\r\n * \r\n * @param config\r\n * @param dialogConfig\r\n * @returns Observable<DialogResult>\r\n * \r\n * Opens an HTML dialog with the provided configuration.\r\n */\r\n html(\r\n config: {\r\n title: string;\r\n subtitle?: string;\r\n icon?: string;\r\n iconColor?: string;\r\n html: string;\r\n cancelText?: string;\r\n confirmText?: string;\r\n showCancel?: boolean;\r\n showConfirm?: boolean;\r\n },\r\n dialogConfig?: MatDialogConfig\r\n ): Observable<boolean | undefined> {\r\n return this._dialog.open(NgxDialog, {\r\n ...dialogConfig,\r\n data: {\r\n ...config,\r\n body: {\r\n type: DialogBodyType.HTML,\r\n content: config.html\r\n } satisfies DialogBodyConfig,\r\n },\r\n minWidth: dialogConfig?.minWidth ?? '400px',\r\n autoFocus: dialogConfig?.autoFocus ?? false\r\n }).afterClosed();\r\n }\r\n\r\n /**\r\n * \r\n * @param config\r\n * @return Observable<DialogResult>\r\n * \r\n * Opens a component dialog with the provided configuration.\r\n */\r\n component<T = any>(\r\n config: {\r\n title: string;\r\n subtitle?: string;\r\n icon?: string;\r\n iconColor?: string;\r\n component: Type<any>;\r\n componentData?: T;\r\n cancelText?: string;\r\n confirmText?: string;\r\n showCancel?: boolean;\r\n showConfirm?: boolean;\r\n },\r\n dialogConfig?: MatDialogConfig\r\n ): Observable<boolean | undefined> {\r\n return this._dialog.open(NgxDialog<T>, {\r\n ...dialogConfig,\r\n data: {\r\n title: config.title,\r\n subtitle: config.subtitle,\r\n icon: config.icon,\r\n iconColor: config.iconColor,\r\n body: {\r\n type: DialogBodyType.COMPONENT,\r\n content: config.component,\r\n data: config.componentData\r\n } satisfies DialogBodyConfig<T>,\r\n cancelText: config.cancelText,\r\n confirmText: config.confirmText,\r\n showCancel: config.showCancel,\r\n showConfirm: config.showConfirm,\r\n },\r\n minWidth: dialogConfig?.minWidth ?? '400px',\r\n autoFocus: dialogConfig?.autoFocus ?? false\r\n }).afterClosed();\r\n }\r\n\r\n /**\r\n * \r\n * @param config\r\n * @param dialogConfig\r\n * @returns Observable<DialogResult>\r\n * \r\n * Opens a template dialog with the provided configuration.\r\n */\r\n template<T = any>(\r\n config: {\r\n title: string;\r\n subtitle?: string;\r\n icon?: string;\r\n iconColor?: string;\r\n template: TemplateRef<T>;\r\n templateData?: T;\r\n cancelText?: string;\r\n confirmText?: string;\r\n showCancel?: boolean;\r\n showConfirm?: boolean;\r\n },\r\n dialogConfig?: MatDialogConfig\r\n ): Observable<boolean | undefined> {\r\n return this._dialog.open(NgxDialog<T>, {\r\n ...dialogConfig,\r\n data: {\r\n ...config,\r\n body: {\r\n type: DialogBodyType.TEMPLATE,\r\n content: config.template,\r\n data: config.templateData\r\n } satisfies DialogBodyConfig<T>,\r\n },\r\n minWidth: dialogConfig?.minWidth ?? '400px',\r\n autoFocus: dialogConfig?.autoFocus ?? false\r\n }).afterClosed();\r\n }\r\n}","export * from './lib/components/index';\r\nexport * from './lib/models/index';\r\nexport * from './lib/services/index';\r\nexport * from './lib/directives/index';\r\n// export * from './lib/utils/index';","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i2","i6","i1","i3","i5","i7","i8"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"ngx-eiffage-material.mjs","sources":["../../../projects/ngx-eiffage-material/src/lib/components/ngx-loading-button/ngx-loading-button.component.ts","../../../projects/ngx-eiffage-material/src/lib/components/ngx-loading-button/ngx-loading-button.component.html","../../../projects/ngx-eiffage-material/src/lib/common/services/common-table.service.ts","../../../projects/ngx-eiffage-material/src/lib/common/components/common-table/common-table.component.ts","../../../projects/ngx-eiffage-material/src/lib/common/components/common-table/common-table.component.html","../../../projects/ngx-eiffage-material/src/lib/components/ngx-basic-table/ngx-basic-table.component.ts","../../../projects/ngx-eiffage-material/src/lib/components/ngx-basic-table/ngx-basic-table.component.html","../../../projects/ngx-eiffage-material/src/lib/components/ngx-input-file/ngx-input-file.component.ts","../../../projects/ngx-eiffage-material/src/lib/components/ngx-input-file/ngx-input-file.component.html","../../../projects/ngx-eiffage-material/src/lib/utils/string-operations.ts","../../../projects/ngx-eiffage-material/src/lib/components/ngx-basic-select/ngx-basic-select.component.ts","../../../projects/ngx-eiffage-material/src/lib/components/ngx-basic-select/ngx-basic-select.component.html","../../../projects/ngx-eiffage-material/src/lib/common/components/paginated-select-bottom-sheet/paginated-select-bottom-sheet.component.ts","../../../projects/ngx-eiffage-material/src/lib/common/components/paginated-select-bottom-sheet/paginated-select-bottom-sheet.component.html","../../../projects/ngx-eiffage-material/src/lib/components/ngx-paginated-select/ngx-paginated-select.component.ts","../../../projects/ngx-eiffage-material/src/lib/components/ngx-paginated-select/ngx-paginated-select.component.html","../../../projects/ngx-eiffage-material/src/lib/models/dialog-config.ts","../../../projects/ngx-eiffage-material/src/lib/directives/dynamic-host.directive.ts","../../../projects/ngx-eiffage-material/src/lib/components/ngx-dialog/ngx-dialog.component.ts","../../../projects/ngx-eiffage-material/src/lib/components/ngx-dialog/ngx-dialog.component.html","../../../projects/ngx-eiffage-material/src/lib/components/ngx-confirm-dialog/ngx-confirm-dialog.component.ts","../../../projects/ngx-eiffage-material/src/lib/components/ngx-confirm-dialog/ngx-confirm-dialog.component.html","../../../projects/ngx-eiffage-material/src/lib/directives/dynamic-cell-host.directive.ts","../../../projects/ngx-eiffage-material/src/lib/pipes/only-upper-first-character.pipe.ts","../../../projects/ngx-eiffage-material/src/lib/models/advanced-filter.ts","../../../projects/ngx-eiffage-material/src/lib/models/advanced-filter-utils.ts","../../../projects/ngx-eiffage-material/src/lib/models/user-id-factory.ts","../../../projects/ngx-eiffage-material/src/lib/services/advanced-filter.service.ts","../../../projects/ngx-eiffage-material/src/lib/services/column-config.service.ts","../../../projects/ngx-eiffage-material/src/lib/services/datos-pantalla.service.ts","../../../projects/ngx-eiffage-material/src/lib/common/components/configure-table-columns/configure-table-columns.component.ts","../../../projects/ngx-eiffage-material/src/lib/common/components/configure-table-columns/configure-table-columns.component.html","../../../projects/ngx-eiffage-material/src/lib/common/components/advanced-filter-rule/advanced-filter-rule.component.ts","../../../projects/ngx-eiffage-material/src/lib/common/components/advanced-filter-rule/advanced-filter-rule.component.html","../../../projects/ngx-eiffage-material/src/lib/common/components/advanced-filter-group/advanced-filter-group.component.ts","../../../projects/ngx-eiffage-material/src/lib/common/components/advanced-filter-group/advanced-filter-group.component.html","../../../projects/ngx-eiffage-material/src/lib/common/components/configure-advanced-filter/configure-advanced-filter.component.ts","../../../projects/ngx-eiffage-material/src/lib/common/components/configure-advanced-filter/configure-advanced-filter.component.html","../../../projects/ngx-eiffage-material/src/lib/components/ngx-paginated-table/ngx-paginated-table.component.ts","../../../projects/ngx-eiffage-material/src/lib/components/ngx-paginated-table/ngx-paginated-table.component.html","../../../projects/ngx-eiffage-material/src/lib/services/ngx-dialog.service.ts","../../../projects/ngx-eiffage-material/src/public-api.ts","../../../projects/ngx-eiffage-material/src/ngx-eiffage-material.ts"],"sourcesContent":["import { CommonModule } from '@angular/common';\nimport {\n Component,\n input,\n output,\n} from '@angular/core';\nimport { MatButtonModule } from '@angular/material/button';\nimport { MatIconModule } from '@angular/material/icon';\nimport { MatProgressSpinnerModule } from '@angular/material/progress-spinner';\n\n@Component({\n selector: 'ngx-loading-button',\n imports: [\n MatButtonModule,\n MatProgressSpinnerModule,\n MatIconModule,\n ],\n templateUrl: './ngx-loading-button.component.html',\n styleUrl: './ngx-loading-button.component.scss',\n})\nexport class NgxLoadingButton {\n isLoading = input.required<boolean>(); //Indica si el botón está cargando\n label = input.required<string>(); //Texto del botón\n matButton = input<'text' | 'filled' | 'elevated' | 'outlined' | 'tonal'>('filled'); //Tipo de botón\n type = input<'button' | 'submit' | 'reset'>('button'); //Tipo de acción del botón\n disabled = input<boolean>(false); //Indica si el botón está deshabilitado\n spinnerDiameter = input<number>(24) //Diameter del spinner de carga\n spinnerStrokeWidth = input<number>(3) //StrokeWidth del spinner de carga\n //Por defecto es Primary\n color = input<'secondary' | 'tertiary' | undefined>(undefined); //Color del botón\n\n /*\n No es necesario hacer el onClick, si queremos obtener un evento click,\n puedes hacerlo sobre la llamada al selector, es decir, sobre 'app-loading-button'\n */\n //onClick = output();\n}\n","<button\r\n class=\"loadingButton\"\r\n [matButton]=\"matButton()\"\r\n [type]=\"type()\"\r\n [disabled]=\"disabled() || isLoading()\"\r\n [class.isLoading]=\"isLoading()\"\r\n [class]=\"color() ?? ''\"\r\n>\r\n {{ label() }}\r\n</button>\r\n\r\n@if (isLoading()) {\r\n <mat-spinner\r\n class=\"spinnerLoadingButton\"\r\n [diameter]=\"spinnerDiameter()\"\r\n [strokeWidth]=\"spinnerStrokeWidth()\"\r\n />\r\n}\r\n","import { Injectable } from '@angular/core';\r\nimport { PipeConfig, PipeType, TableColumn } from '../../models';\r\nimport { CurrencyPipe, DatePipe, DecimalPipe, LowerCasePipe, PercentPipe, SlicePipe, TitleCasePipe, UpperCasePipe } from '@angular/common';\r\n\r\n@Injectable({\r\n providedIn: 'root',\r\n})\r\nexport class CommonTableService<T> {\r\n /**\r\n * Métodos para botones customizables\r\n *\r\n */\r\n isButtonVisible(column: TableColumn, row: T): boolean {\r\n if (!column.buttonConfig) return false;\r\n\r\n const visible = column.buttonConfig.visible;\r\n if (typeof visible === 'function') {\r\n return visible(row);\r\n }\r\n return visible !== false; // Por defecto visible si no se especifica\r\n }\r\n\r\n isButtonDisabled(column: TableColumn, row: T): boolean {\r\n if (!column.buttonConfig) return false;\r\n\r\n const disabled = column.buttonConfig.disabled;\r\n if (typeof disabled === 'function') {\r\n return disabled(row);\r\n }\r\n return !!disabled;\r\n }\r\n\r\n onCustomButtonClick(column: TableColumn, row: T): void {\r\n if (column.buttonConfig?.onClick) {\r\n column.buttonConfig.onClick(row);\r\n }\r\n }\r\n\r\n /**\r\n * Métodos para enlaces\r\n *\r\n */\r\n isLinkVisible(column: TableColumn, row: T): boolean {\r\n if (!column.linkConfig) return false;\r\n\r\n const visible = column.linkConfig.visible;\r\n if (typeof visible === 'function') {\r\n return visible(row);\r\n }\r\n return visible !== false;\r\n }\r\n\r\n getLinkHref(column: TableColumn, row: T): string | null {\r\n if (!column.linkConfig?.href) return null;\r\n \r\n if (typeof column.linkConfig.href === 'function') {\r\n return column.linkConfig.href(row);\r\n }\r\n return column.linkConfig.href;\r\n }\r\n\r\n /**\r\n * Método para obtener el valor de la celda con pipes\r\n */\r\n getCellValue(column: TableColumn, row: T): any {\r\n const splittedKey = column.key.split('.');\r\n let value = row;\r\n if (splittedKey.length > 1) {\r\n value = this.getNestedKey(row, splittedKey);\r\n } else {\r\n value = (row as Record<string, any>)[column.key];\r\n }\r\n\r\n if(value === undefined || value === null || value === '') {\r\n return '-';\r\n }\r\n \r\n if(column.pipeConfig) {\r\n return this.applyPipe(value, column.pipeConfig);\r\n }\r\n\r\n return value;\r\n }\r\n\r\n private getNestedKey(row: T, splittedKey: string[]): any {\r\n let value: any = row;\r\n for (let i = 0; i < splittedKey.length; i++) {\r\n if (value == null) return undefined;\r\n value = (value as Record<string, any>)[splittedKey[i]];\r\n }\r\n return value;\r\n }\r\n\r\n private applyPipe(value: any, pipeConfig: PipeConfig): any {\r\n try {\r\n const args = pipeConfig.args || [];\r\n switch (pipeConfig.name) {\r\n case 'date':\r\n const datePipe = new DatePipe('en-US');\r\n return datePipe.transform(value, args[0] || 'medium', args[1], args[2]);\r\n\r\n case 'currency':\r\n const currencyPipe = new CurrencyPipe('en-US');\r\n return currencyPipe.transform(\r\n value,\r\n args[0] || 'USD',\r\n args[1] || 'symbol',\r\n args[2] || '1.2-2',\r\n args[3]\r\n );\r\n\r\n case 'percent':\r\n const percentPipe = new PercentPipe('en-US');\r\n return percentPipe.transform(value, args[0] || '1.2-2', args[1]);\r\n \r\n case 'decimal':\r\n const decimalPipe = new DecimalPipe('en-US');\r\n return decimalPipe.transform(value, args[0] || '1.2-2');\r\n\r\n case 'uppercase':\r\n const upperCasePipe = new UpperCasePipe();\r\n return upperCasePipe.transform(value);\r\n\r\n case 'lowercase':\r\n const lowerCasePipe = new LowerCasePipe();\r\n return lowerCasePipe.transform(value);\r\n\r\n case 'titlecase':\r\n const titleCasePipe = new TitleCasePipe();\r\n return titleCasePipe.transform(value);\r\n\r\n case 'slice':\r\n const slicePipe = new SlicePipe();\r\n return slicePipe.transform(value, args[0] || 0, args[1] || 50);\r\n\r\n case 'json':\r\n return JSON.stringify(value, null, args[0] || 2);\r\n \r\n case 'custom':\r\n if (pipeConfig.customPipe) {\r\n const customPipeInstance = pipeConfig.customPipe();\r\n return customPipeInstance.transform(value, args);\r\n }\r\n return value;\r\n\r\n default:\r\n console.warn(`Unknown pipe ${pipeConfig.name}`);\r\n return value;\r\n }\r\n\r\n } catch (error) {\r\n console.error(`Error aplying pipe ${pipeConfig.name} to value ${value}`, error);\r\n return value;\r\n }\r\n }\r\n}\r\n","import { Component, computed, effect, inject, input, output, viewChild } from '@angular/core';\r\nimport { MatButtonModule } from '@angular/material/button';\r\nimport { MatIconModule } from '@angular/material/icon';\r\nimport { MatSortModule } from '@angular/material/sort';\r\nimport { MatTableDataSource, MatTableModule } from '@angular/material/table';\r\nimport { MatTooltipModule } from '@angular/material/tooltip';\r\nimport { ActionKey, TableConfig } from '../../../models';\r\nimport { MatCardModule } from '@angular/material/card';\r\nimport { MatPaginator, MatPaginatorModule } from '@angular/material/paginator';\r\nimport { NgxSkeletonLoaderModule } from 'ngx-skeleton-loader';\r\nimport { CommonTableService } from '../../services/common-table.service';\r\n\r\n@Component({\r\n selector: 'common-table',\r\n imports: [\r\n MatCardModule,\r\n MatTableModule,\r\n MatSortModule,\r\n MatButtonModule,\r\n MatTooltipModule,\r\n MatIconModule,\r\n MatPaginatorModule,\r\n NgxSkeletonLoaderModule\r\n ],\r\n templateUrl: './common-table.component.html',\r\n styleUrl: './common-table.component.scss',\r\n})\r\nexport class CommonTableComponent<T> {\r\n //dependencies injection\r\n readonly _commonTableService = inject(CommonTableService<T>);\r\n\r\n //inputs\r\n readonly tableConfig = input.required<TableConfig>(); // Table configuration\r\n readonly tableData = input.required<T[]>(); // Table data\r\n readonly isLoading = input.required<boolean>(); // Table loading state\r\n\r\n //outputs\r\n create = output<void>();\r\n view = output<T>();\r\n download = output<T>();\r\n update = output<T>();\r\n delete = output<T>();\r\n\r\n //computed\r\n readonly displayedColumns = computed<string[]>(() => this.tableConfig().tableColumns.map(column => column.key));\r\n readonly datasource = computed<MatTableDataSource<T>>(() => new MatTableDataSource<T>());\r\n readonly paginator = viewChild<MatPaginator>(MatPaginator);\r\n\r\n\r\n constructor() {\r\n effect(() => {\r\n this.datasource().data = this.tableData();\r\n const paginatorInstance = this.paginator();\r\n if (paginatorInstance && !this.isLoading()) {\r\n this.datasource().paginator = paginatorInstance;\r\n }\r\n });\r\n }\r\n\r\n getAllColumns(): string[] {\r\n const columns = [...this.displayedColumns()];\r\n if (this.hasActions()) {\r\n columns.push('actions');\r\n }\r\n return columns;\r\n }\r\n\r\n hasActions(): boolean {\r\n return (\r\n ((this.tableConfig().actions?.canView ||\r\n this.tableConfig().actions?.canUpdate ||\r\n this.tableConfig().actions?.canDelete) as boolean) || false\r\n );\r\n }\r\n\r\n // Check if the action is a function or a boolean value to determine if it can be executed\r\n canDoAction(action: ActionKey, row?: T): boolean {\r\n const fnOrValue = this.tableConfig().actions?.[action];\r\n if (typeof fnOrValue === 'function') {\r\n return row !== undefined ? (fnOrValue as (row: T) => boolean)(row) : false;\r\n }\r\n return !!fnOrValue;\r\n }\r\n\r\n /**\r\n * Actions methods\r\n */\r\n onCreateClick(): void {\r\n this.create.emit(); \r\n }\r\n\r\n onViewClick(row: T): void {\r\n this.view.emit(row);\r\n }\r\n\r\n onDownloadClick(row: T): void {\r\n this.download.emit(row);\r\n }\r\n\r\n onUpdateClick(row: T): void {\r\n this.update.emit(row);\r\n }\r\n\r\n onDeleteClick(row: T): void {\r\n this.delete.emit(row);\r\n }\r\n}\r\n","<mat-card>\r\n <div class=\"tableContainer\">\r\n <div class=\"tableHeader\">\r\n <div class=\"tableHeader__title\">\r\n <span>{{ tableConfig().title }}</span>\r\n </div>\r\n <div class=\"tableHeader__buttons\">\r\n @if(canDoAction('canCreate')) {\r\n <button matMiniFab type=\"button\" (click)=\"onCreateClick()\">\r\n <mat-icon>add</mat-icon>\r\n </button>\r\n }\r\n </div>\r\n </div>\r\n @if(isLoading()) {\r\n <ngx-skeleton-loader [count]=\"tableConfig().skeletonConfig?.count || 5\" />\r\n } @else { \r\n <div class=\"overflowTable\">\r\n <table mat-table class=\"mat-elevation-z8\" [dataSource]=\"datasource()\" class=\"customTable\" matSort>\r\n @for(column of tableConfig().tableColumns; track column.key) {\r\n <!-- Dynamically generate columns -->\r\n <ng-container [matColumnDef]=\"column.key\">\r\n <!-- Header cell definition -->\r\n <th mat-header-cell *matHeaderCellDef>{{ column.displayName }}</th>\r\n \r\n <!-- Data cell definition -->\r\n <td mat-cell *matCellDef=\"let row\">\r\n @switch (column.type) {\r\n @case ('button') {\r\n @if(_commonTableService.isButtonVisible(column, row)) {\r\n <button\r\n [matButton]=\"column.buttonConfig?.variant || 'filled'\"\r\n [class]=\"column.buttonConfig?.color\"\r\n [disabled]=\"_commonTableService.isButtonDisabled(column, row)\"\r\n [matTooltip]=\"column.buttonConfig?.tooltip || ''\"\r\n (click)=\"_commonTableService.onCustomButtonClick(column, row)\"\r\n >\r\n @if(column.buttonConfig?.icon) {\r\n <mat-icon>{{ column.buttonConfig?.icon }}</mat-icon>\r\n }\r\n @if(column.buttonConfig?.text) {\r\n {{ column.buttonConfig?.text }}\r\n }\r\n </button>\r\n }\r\n }\r\n @case ('icon-button') {\r\n @if(_commonTableService.isButtonVisible(column, row)) {\r\n <button \r\n matIconButton\r\n [class]=\"column.buttonConfig?.color\"\r\n [disabled]=\"_commonTableService.isButtonDisabled(column, row)\"\r\n [matTooltip]=\"column.buttonConfig?.tooltip || ''\"\r\n (click)=\"_commonTableService.onCustomButtonClick(column, row)\"\r\n >\r\n @if(column.buttonConfig?.icon) {\r\n <mat-icon>{{ column.buttonConfig?.icon }}</mat-icon>\r\n }\r\n </button>\r\n }\r\n }\r\n @case ('link') {\r\n @if(_commonTableService.isLinkVisible(column, row)) {\r\n <!-- External link -->\r\n @if(_commonTableService.getLinkHref(column, row)) {\r\n <a\r\n [style]=\"{ display: 'flex', alignItems: 'center', gap: '2px' }\"\r\n [href]=\"_commonTableService.getLinkHref(column, row)\"\r\n [target]=\"column.linkConfig?.target || '_blank'\"\r\n [matTooltip]=\"column.linkConfig?.tooltip || ''\"\r\n [style.color]=\"column.linkConfig?.color || 'primary'\"\r\n [style.text-decoration]=\"column.linkConfig?.underline ? 'underline' : 'none'\"\r\n >\r\n @if(column.linkConfig?.icon) {\r\n <mat-icon>{{ column.linkConfig?.icon }}</mat-icon>\r\n }\r\n @if(column.linkConfig?.text) {\r\n {{ column.linkConfig?.text }}\r\n }\r\n </a>\r\n }\r\n }\r\n }\r\n <!-- Text is by default -->\r\n @default {\r\n {{ _commonTableService.getCellValue(column, row) }}\r\n }\r\n }\r\n </td>\r\n </ng-container>\r\n }\r\n \r\n <!-- Actions Column -->\r\n @if(hasActions()) {\r\n <ng-container matColumnDef=\"actions\">\r\n <th mat-header-cell *matHeaderCellDef></th>\r\n <td mat-cell *matCellDef=\"let row\">\r\n @if(canDoAction('canView', row)) {\r\n <button matIconButton (click)=\"onViewClick(row)\">\r\n <mat-icon>visibility</mat-icon>\r\n </button>\r\n }\r\n @if(canDoAction('canDownload', row)) {\r\n <button matIconButton (click)=\"onDownloadClick(row)\">\r\n <mat-icon>download</mat-icon>\r\n </button>\r\n }\r\n @if(canDoAction('canUpdate', row)) {\r\n <button matIconButton (click)=\"onUpdateClick(row)\">\r\n <mat-icon>edit</mat-icon>\r\n </button>\r\n }\r\n @if(canDoAction('canDelete', row)) {\r\n <button matIconButton (click)=\"onDeleteClick(row)\">\r\n <mat-icon>delete</mat-icon>\r\n </button>\r\n }\r\n </td>\r\n </ng-container>\r\n }\r\n \r\n <tr mat-header-row *matHeaderRowDef=\"getAllColumns()\"></tr>\r\n <tr mat-row *matRowDef=\"let row; columns: getAllColumns();\"></tr>\r\n <tr *matNoDataRow>No data available</tr>\r\n </table>\r\n <mat-paginator\r\n #paginator\r\n [length]=\"datasource().data.length\"\r\n [pageSize]=\"tableConfig().paginatorConfig?.pageSize || 5\"\r\n [pageSizeOptions]=\"tableConfig().paginatorConfig?.pageSizeOptions || [5, 10, 25, 100]\"\r\n [showFirstLastButtons]=\"tableConfig().paginatorConfig?.showFirstLastButtons || false\"\r\n />\r\n </div>\r\n }\r\n\r\n </div>\r\n</mat-card>","import { Component, computed, input, output } from '@angular/core';\r\nimport { MatCardModule } from '@angular/material/card';\r\nimport { CommonTableComponent } from '../../common/components/common-table/common-table.component';\r\nimport { TableConfig } from '../../models';\r\n\r\n@Component({\r\n selector: 'ngx-basic-table',\r\n imports: [MatCardModule, CommonTableComponent],\r\n templateUrl: './ngx-basic-table.component.html',\r\n styleUrl: './ngx-basic-table.component.scss'\r\n})\r\nexport class NgxBasicTable<T> {\r\n //inputs\r\n readonly tableConfig = input.required<TableConfig>();\r\n readonly tableData = input.required<T[]>();\r\n readonly isLoading = input.required<boolean>();\r\n\r\n //outputs\r\n create = output<void>();\r\n view = output<T>();\r\n download = output<T>();\r\n update = output<T>();\r\n delete = output<T>();\r\n\r\n /**\r\n * Actions methods\r\n */\r\n onCreateClick(): void {\r\n this.create.emit(); \r\n }\r\n\r\n onViewClick(row: T): void {\r\n this.view.emit(row);\r\n }\r\n\r\n onDownloadClick(row: T): void {\r\n this.download.emit(row);\r\n }\r\n\r\n onUpdateClick(row: T): void {\r\n this.update.emit(row);\r\n }\r\n\r\n onDeleteClick(row: T): void {\r\n this.delete.emit(row);\r\n }\r\n}\r\n","<common-table\r\n [tableConfig]=\"tableConfig()\"\r\n [tableData]=\"tableData()\"\r\n [isLoading]=\"isLoading()\"\r\n (create)=\"onCreateClick()\"\r\n (view)=\"onViewClick($event)\"\r\n (download)=\"onDownloadClick($event)\"\r\n (update)=\"onUpdateClick($event)\"\r\n (delete)=\"onDeleteClick($event)\"\r\n/>\r\n","import {\n afterRenderEffect,\n ChangeDetectorRef,\n Component,\n effect,\n ElementRef,\n forwardRef,\n inject,\n input,\n OnInit,\n signal,\n untracked,\n viewChild,\n ViewEncapsulation,\n} from '@angular/core';\nimport {\n FormControl,\n NG_VALUE_ACCESSOR,\n ReactiveFormsModule,\n} from '@angular/forms';\nimport { CommonModule } from '@angular/common';\nimport { MatButtonModule } from '@angular/material/button';\nimport { MatChipsModule } from '@angular/material/chips';\nimport { MatFormFieldModule } from '@angular/material/form-field';\nimport { MatIconModule } from '@angular/material/icon';\nimport { MatProgressBarModule } from '@angular/material/progress-bar';\nimport { MatTooltipModule } from '@angular/material/tooltip';\nimport { MatInputModule } from '@angular/material/input';\n\n@Component({\n selector: 'ngx-input-file',\n imports: [\n CommonModule,\n MatButtonModule,\n MatIconModule,\n MatProgressBarModule,\n MatChipsModule,\n MatTooltipModule,\n MatFormFieldModule,\n ReactiveFormsModule,\n MatInputModule,\n ],\n templateUrl: './ngx-input-file.component.html',\n styleUrl: './ngx-input-file.component.scss',\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => NgxInputFile),\n multi: true,\n },\n ],\n})\nexport class NgxInputFile implements OnInit {\n // dependencies injection\n private _cdr = inject(ChangeDetectorRef);\n\n\n value = signal<File[]>([]);\n onChangeCb?: (files: File[]) => void;\n onTouchCb?: () => void;\n\n label = input<string>('Seleccionar archivo');\n control = input.required<FormControl<File[]>>();\n disabled = input<boolean>(false);\n placeholder = input<string>('Haz click o arrastra archivos aquí');\n class = input<string>('');\n accept = input<string[]>([]);\n multiple = input<boolean>(false);\n hint = input<string>('');\n error = input<string>('');\n\n isDropping = signal(false);\n\n inputFileRef = viewChild<ElementRef>('inputFileRef');\n\n internalControl = new FormControl<string[]>([]);\n\n constructor() {\n afterRenderEffect(() => {\n const disabled = this.disabled();\n \n if (disabled && this.control().enabled) {\n this.control().disable({ emitEvent: false });\n this.internalControl.disable({ emitEvent: false });\n } else if (!disabled && this.control().disabled) {\n this.control().enable({ emitEvent: false });\n this.internalControl.enable({ emitEvent: false });\n }\n }); \n }\n\n private checkErrors() {\n if (this.control().invalid) {\n this.internalControl.setErrors(this.control().errors);\n } else {\n this.internalControl.setErrors(null);\n }\n this._cdr.markForCheck();\n }\n\n controlEffect = effect(() => {\n const value = this.value();\n // Usar untracked para evitar ciclos y emitEvent: false para no disparar eventos\n untracked(() => {\n this.control().setValue(value, { emitEvent: false });\n \n // Actualizar el control interno con strings (nombres de archivo)\n const fileNames = value.map(f => f.name);\n this.internalControl.setValue(fileNames, { emitEvent: false });\n \n this.checkErrors();\n this._cdr.markForCheck();\n });\n });\n\n ngOnInit(): void {\n if(this.disabled()) {\n this.control().disable();\n this.internalControl.disable();\n }\n }\n\n onContainerClick() {\n if (!this.disabled()) {\n this.control().markAsTouched();\n this.internalControl.markAsTouched();\n this.checkErrors();\n this._cdr.markForCheck();\n this.onTouchCb?.();\n this.inputFileRef()?.nativeElement.click();\n }\n }\n\n onInputchange(event: any) {\n const target: HTMLInputElement = event.target;\n const files: FileList | null = target.files;\n this.attachFiles(files);\n target.value = '';\n }\n\n onDragOver(event: DragEvent) {\n event.preventDefault();\n this.isDropping.set(true);\n }\n\n onDragLeave(event: DragEvent) {\n event.preventDefault();\n this.isDropping.set(false);\n }\n\n onDrop(event: DragEvent) {\n event.preventDefault();\n this.isDropping.set(false);\n this.onTouchCb?.();\n if (!this.disabled()) {\n const files = event.dataTransfer?.files;\n // const validation = validateFiles(files, this.accept());\n\n this.attachFiles(files);\n }\n }\n\n attachFiles(files: FileList | null | undefined) {\n if (files && files.length > 0) {\n let newValue: File[];\n \n if (this.multiple()) {\n const currentFiles = this.value();\n const newFiles = Array.from(files);\n newValue = [...currentFiles, ...newFiles];\n } else {\n newValue = [files[0]];\n }\n \n this.value.set(newValue);\n this.onChangeCb?.(newValue);\n this.control().markAsTouched();\n this.internalControl.markAsTouched();\n this.control().markAsDirty();\n this.internalControl.markAsDirty();\n }\n }\n\n writeValue(files: File[] | undefined | null): void {\n this.value.set(files ?? []);\n }\n\n registerOnChange(fn: any): void {\n this.onChangeCb = fn;\n }\n\n registerOnTouched(fn: any): void {\n this.onTouchCb = fn;\n }\n\n onDeleteFileClick(file: File) {\n const newValue = this.value().filter((item) => item !== file);\n this.value.set(newValue);\n this.onChangeCb?.(newValue);\n this.control().markAsTouched();\n this.internalControl.markAsTouched();\n this.control().markAsDirty();\n this.internalControl.markAsDirty();\n }\n\n getAccept(): string {\n return this.accept().join();\n }\n\n bytesToMegaBytes(bytes: number): string {\n return (bytes / 1024 / 1024).toFixed(1);\n }\n}\n","<mat-form-field\r\n appearance=\"outline\"\r\n floatLabel=\"always\"\r\n (click)=\"onContainerClick()\"\r\n (dragover)=\"onDragOver($event)\"\r\n (dragleave)=\"onDragLeave($event)\"\r\n (drop)=\"onDrop($event)\"\r\n [class.dragover]=\"isDropping()\"\r\n>\r\n <mat-label>{{ label() }}</mat-label>\r\n <mat-chip-grid \r\n #chipGrid \r\n [formControl]=\"internalControl\"\r\n class=\"chips-grid\"\r\n >\r\n @for(file of value(); track file.name + $index) {\r\n <mat-chip-row\r\n (removed)=\"onDeleteFileClick(file)\"\r\n class=\"chip-item\"\r\n [title]=\"file.name\"\r\n >\r\n <div class=\"chip-content\">\r\n <span class=\"chip-label\">\r\n ({{ bytesToMegaBytes(file.size) }} MB) {{ file.name }}\r\n </span>\r\n </div>\r\n <button matChipRemove [attr.aria-label]=\"'Eliminar ' + file.name\">\r\n <mat-icon>cancel</mat-icon>\r\n </button>\r\n </mat-chip-row>\r\n }\r\n </mat-chip-grid>\r\n <input \r\n #inputFileRef\r\n type=\"file\"\r\n [accept]=\"getAccept()\" \r\n [multiple]=\"multiple()\" \r\n (change)=\"onInputchange($event)\"\r\n [matChipInputFor]=\"chipGrid\"\r\n style=\"display: none\"\r\n /> \r\n <mat-hint>{{ isDropping() ? 'Arrastrar archivos aquí' : hint() }}</mat-hint>\r\n <mat-error>{{ error() }}</mat-error>\r\n</mat-form-field>","export const includeNoSensible = (cadena: string, query: string): boolean => {\r\n const nomalizadoCadena = cadena\r\n .toLowerCase()\r\n .normalize('NFD')\r\n .replace(/[\\u0300-\\u036f]/g, '');\r\n const nomalizadoQuery = query\r\n .toLowerCase()\r\n .normalize('NFD')\r\n .replace(/[\\u0300-\\u036f]/g, '');\r\n return nomalizadoCadena.includes(nomalizadoQuery);\r\n};\r\n\r\nexport const base64ToUtf8 = (str: string): string => {\r\n return decodeURIComponent(\r\n atob(str)\r\n .split('')\r\n .map(function (c) {\r\n return '%' + ('00' + c.charCodeAt(0).toString(16)).slice(-2);\r\n })\r\n .join('')\r\n );\r\n};\r\n","import { afterRenderEffect, Component, effect, ElementRef, input, OnInit, output, signal, untracked, viewChild } from '@angular/core';\nimport { FormControl, ReactiveFormsModule } from '@angular/forms';\nimport { MatButtonModule } from '@angular/material/button';\nimport { MatFormFieldModule } from '@angular/material/form-field';\nimport { MatIconModule } from '@angular/material/icon';\nimport { MatInputModule } from '@angular/material/input';\nimport { MatProgressSpinnerModule } from '@angular/material/progress-spinner';\nimport { MatSelect, MatSelectChange, MatSelectModule } from '@angular/material/select';\nimport { BasicSelectConfig } from '../../models';\nimport { includeNoSensible } from '../../utils';\n\n@Component({\n selector: 'ngx-basic-select',\n imports: [\n MatInputModule,\n MatSelectModule,\n MatIconModule,\n MatButtonModule,\n MatFormFieldModule,\n ReactiveFormsModule,\n MatProgressSpinnerModule,\n],\n templateUrl: './ngx-basic-select.component.html',\n styleUrl: './ngx-basic-select.component.scss',\n})\nexport class NgxBasicSelect<T> {\n\n //inputs\n readonly label = input.required<string>();\n readonly options = input.required<T[]>();\n readonly basicSelectConfig = input.required<BasicSelectConfig<T>>();\n readonly control = input.required<FormControl>();\n readonly isLoading = input.required<boolean>();\n readonly placeholder = input<string>('');\n readonly appearance = input<'fill' | 'outline'>('fill');\n readonly multiple = input<boolean>(false);\n readonly disabled = input<boolean>(false);\n readonly clearable = input<boolean>(false);\n readonly error = input<string>('');\n readonly class = input<string>('');\n\n //outputs\n selectionChange = output<any>();\n\n //viewChilds\n readonly matSelect = viewChild.required<MatSelect>('matSelect');\n readonly searchInput = viewChild<ElementRef>('searchInput');\n\n constructor() {\n afterRenderEffect(() => {\n const disabled = this.disabled();\n const control = this.control();\n\n if (disabled && control.enabled) {\n control.disable({ emitEvent: false });\n } else if (!disabled && control.disabled) {\n control.enable({ emitEvent: false });\n }\n });\n }\n\n onOpenedChange(opened: boolean): void {\n if (opened) {\n this.onClearInputClick();\n setTimeout(() => {\n const panel = this.matSelect().panel?.nativeElement;\n if (panel) {\n panel.scrollTop = 0;\n }\n });\n }\n }\n\n includeInFilter(option: T, query: string): boolean {\n return includeNoSensible(String(this.basicSelectConfig().displayedLabel(option)), query);\n }\n\n onClearClick(): void {\n const newValue = this.multiple() ? [] : null;\n this.control().setValue(newValue, { emitEvent: true });\n this.control().markAsTouched();\n this.control().updateValueAndValidity();\n this.selectionChange.emit(newValue);\n }\n\n onSelectionChange(event: MatSelectChange): void {\n if(this.multiple()) {\n const values = event.value as T[];\n this.selectionChange.emit(values);\n } else {\n const value = event.value as T;\n this.selectionChange.emit(value);\n }\n }\n\n onClearInputClick(): void {\n const searchInputRef = this.searchInput();\n if (searchInputRef) {\n searchInputRef.nativeElement.value = '';\n searchInputRef.nativeElement.focus();\n }\n }\n}\n","\n<mat-form-field [appearance]=\"appearance()\" [className]=\"class()\">\n <mat-label>{{ label() }}</mat-label>\n <mat-select \n #matSelect\n [formControl]=\"control()\"\n (selectionChange)=\"onSelectionChange($event)\"\n [multiple]=\"multiple()\"\n [placeholder]=\"placeholder()\"\n (openedChange)=\"onOpenedChange($event)\"\n >\n @if(!isLoading()) {\n <div class=\"searchFilter\">\n <mat-icon class=\"searchIcon\">search</mat-icon>\n <input \n matInput\n #searchInput \n type=\"text\"\n (keydown)=\"$event.stopPropagation()\"\n />\n <button matIconButton (click)=\"onClearInputClick(); searchInput.value = ''\">\n <mat-icon>close</mat-icon>\n </button>\n </div>\n @for(option of options(); track option[basicSelectConfig().valueKey]) {\n <mat-option \n [value]=\"option[basicSelectConfig().valueKey]\" \n [disabled]=\"basicSelectConfig().disabled ? basicSelectConfig().disabled?.(option) : false\"\n [style]=\"{ display: includeInFilter(option, searchInput.value) ? 'flex' : 'none' }\"\n > \n {{ basicSelectConfig().displayedLabel(option) }}\n </mat-option>\n }\n }\n </mat-select>\n @if(isLoading()) {\n <mat-icon matSuffix><mat-spinner diameter=\"20\" /></mat-icon>\n } @else if(clearable() && (multiple() ? control().value?.length : control().value)) {\n <mat-icon matSuffix (click)=\"onClearClick(); $event.stopPropagation()\">close</mat-icon>\n }\n <mat-error>{{ error() }}</mat-error>\n</mat-form-field>","import { Component, computed, effect, inject, signal, TemplateRef, untracked, ViewEncapsulation, viewChild, WritableSignal } from '@angular/core';\r\nimport { MAT_BOTTOM_SHEET_DATA, MatBottomSheetRef } from '@angular/material/bottom-sheet';\r\nimport { PaginatedFilter, PaginatedSelectConfig } from '../../../models';\r\nimport { debounceTime, delay, distinctUntilChanged, Observable, Subject, takeUntil } from 'rxjs';\r\nimport { PaginatedItems } from '../../../models/paginated-items';\r\nimport { rxResource, toObservable, toSignal } from '@angular/core/rxjs-interop';\r\nimport { MatButtonModule } from '@angular/material/button';\r\nimport { CommonModule } from '@angular/common';\r\nimport { MatDividerModule } from '@angular/material/divider';\r\nimport { MatFormFieldModule } from '@angular/material/form-field';\r\nimport { MatIconModule } from '@angular/material/icon';\r\nimport { MatInputModule } from '@angular/material/input';\r\nimport { MatProgressBarModule } from '@angular/material/progress-bar';\r\nimport {MatListModule, MatSelectionList, MatSelectionListChange} from '@angular/material/list';\r\nimport { FormControl, ReactiveFormsModule } from '@angular/forms';\r\nimport { MatChipsModule } from '@angular/material/chips';\r\n\r\n@Component({\r\n selector: 'paginated-select-bottom-sheet',\r\n imports: [\r\n MatButtonModule, \r\n MatDividerModule, \r\n CommonModule, \r\n MatFormFieldModule,\r\n MatIconModule,\r\n MatInputModule,\r\n MatChipsModule,\r\n MatProgressBarModule,\r\n MatListModule,\r\n ReactiveFormsModule,\r\n ],\r\n templateUrl: './paginated-select-bottom-sheet.component.html',\r\n styleUrl: './paginated-select-bottom-sheet.component.scss',\r\n encapsulation: ViewEncapsulation.None,\r\n})\r\nexport class PaginatedSelectBottomSheetComponent<T, U extends PaginatedFilter<T>> {\r\n // dependencies injection\r\n private _bottomSheetRef = inject(MatBottomSheetRef<PaginatedSelectBottomSheetComponent<T, U>>);\r\n readonly _data = inject<{\r\n label: string;\r\n title?: string;\r\n endpoint: (filters: U) => Observable<PaginatedItems<T>>;\r\n config: PaginatedSelectConfig<T>;\r\n selectedItems: T[];\r\n hideFilter: boolean;\r\n filters: WritableSignal<U>;\r\n filterPlaceholder: string;\r\n multiple: boolean;\r\n itemsLabel: string;\r\n multipleItemsLabel: string;\r\n resetLabel: string;\r\n confirmLabel: string;\r\n extraFiltersTemplate: TemplateRef<any>;\r\n optionTemplate: TemplateRef<any> | null;\r\n noResultsMessage: string;\r\n }>(MAT_BOTTOM_SHEET_DATA);\r\n\r\n //signals\r\n private accumulatedItems = signal<T[]>([]);\r\n public queryInput = signal<string>(this._data.filters().query ?? '');\r\n\r\n private cancel$ = new Subject<void>();\r\n readonly debouncedQuery = toSignal(\r\n toObservable(this.queryInput).pipe(\r\n debounceTime(500),\r\n distinctUntilChanged()\r\n ),\r\n { initialValue: this._data.filters().query ?? '' }\r\n );\r\n\r\n // Obtener valores iniciales seleccionados\r\n private getInitialSelectedValues(): T[keyof T][] {\r\n return this._data.selectedItems.map(item => item[this._data.config.valueKey as keyof T]);\r\n }\r\n\r\n public selectedsOptions = signal<T[]>(this._data.selectedItems);\r\n public selectedsOptionsValues = signal<T[keyof T][]>(this.getInitialSelectedValues());\r\n\r\n //viewChild\r\n readonly selectionList = viewChild<MatSelectionList>('selectionList');\r\n\r\n //resource\r\n optionsResource = rxResource({\r\n params: () => {\r\n const filters: U = {\r\n ...this._data.filters(),\r\n query: this.debouncedQuery(),\r\n };\r\n untracked(() => this.cancel$.next());\r\n return filters;\r\n },\r\n stream: ({ params }) => this._data.endpoint(params).pipe(\r\n takeUntil(this.cancel$),\r\n ),\r\n defaultValue: { items: [], total: 0 } as PaginatedItems<T>,\r\n });\r\n\r\n //computed\r\n readonly isLoading = computed<boolean>(() => this.optionsResource.isLoading());\r\n readonly options = computed<T[]>(() => this.accumulatedItems());\r\n readonly total = computed<number>(() => this.optionsResource.value().total);\r\n\r\n //effect\r\n filtersEffect = effect(() => {\r\n const resourceValue = this.optionsResource.value();\r\n const currentPage = this._data.filters().pageNumber;\r\n if (currentPage === 1) {\r\n this.accumulatedItems.set(resourceValue.items);\r\n } else {\r\n this.accumulatedItems.update((current) => [...current, ...resourceValue.items]);\r\n }\r\n });\r\n \r\n constructor() {\r\n // Resetear a la página 1 cuando se abre el componente\r\n this._data.filters.update((current) => ({\r\n ...current,\r\n pageNumber: 1\r\n }));\r\n // Limpiar items acumulados de sesiones anteriores\r\n this.accumulatedItems.set([]);\r\n }\r\n\r\n onScroll(div: HTMLDivElement): void {\r\n if(this.isLoading()) return;\r\n\r\n const scrollTop = div.scrollTop;\r\n const clientHeight = div.clientHeight;\r\n const scrollHeight = div.scrollHeight;\r\n const marginToBottom = 300;\r\n const isNearToBottom = scrollTop + clientHeight + marginToBottom >= scrollHeight;\r\n \r\n const optionsLength = this.options().length;\r\n const total = this.total();\r\n\r\n if(isNearToBottom && total > optionsLength) {\r\n this._data.filters.update((current) => ({\r\n ...current,\r\n pageNumber: current.pageNumber + 1\r\n }));\r\n }\r\n }\r\n\r\n onQueryChange(event: Event, div: HTMLDivElement): void {\r\n const query = (event.target as HTMLInputElement).value;\r\n this.queryInput.set(query);\r\n div.scrollTop = 0;\r\n\r\n if (this._data.filters().pageNumber !== 1) {\r\n this._data.filters.update((current) => ({\r\n ...current,\r\n pageNumber: 1\r\n }));\r\n }\r\n }\r\n\r\n onClearClick(input: HTMLInputElement): void {\r\n input.value = '';\r\n this.queryInput.set('');\r\n if (this._data.filters().pageNumber !== 1) {\r\n this._data.filters.update((current) => ({\r\n ...current,\r\n pageNumber: 1\r\n }));\r\n }\r\n }\r\n\r\n \r\n onSelectionChange(event: MatSelectionListChange): void {\r\n if (this._data.multiple) {\r\n const selectedsOptionsValues = event.source.selectedOptions.selected.map(option => option.value);\r\n const selectedsOptions = this.options().filter(option => selectedsOptionsValues.includes(option[this._data.config.valueKey]));\r\n this.selectedsOptions.update(() => {\r\n return selectedsOptions;\r\n });\r\n } else {\r\n const selectedOptionValue = event.options[0].value;\r\n const selectedOption = this.options().find(option => option[this._data.config.valueKey] == selectedOptionValue);\r\n this._bottomSheetRef.dismiss([selectedOption]);\r\n }\r\n }\r\n\r\n isSelected(optionValue: any): boolean {\r\n return this.selectedsOptionsValues().includes(optionValue);\r\n }\r\n\r\n onResetClick(): void {\r\n this.selectedsOptions.set([]);\r\n this.selectedsOptionsValues.set([]);\r\n const list = this.selectionList();\r\n if (list) {\r\n list.deselectAll();\r\n }\r\n }\r\n\r\n onConfirmMultiSelectionClick(): void {\r\n this._bottomSheetRef.dismiss(this.selectedsOptions());\r\n }\r\n}\r\n","<div class=\"bottomSheetContainer\">\n <div class=\"header\">\n @if(_data.title) {\n <div class=\"title\">\n {{ _data.title }}\n </div>\n }\n @if(!_data.hideFilter) {\n <mat-form-field subscriptSizing=\"dynamic\" appearance=\"outline\">\n <mat-icon matPrefix>search</mat-icon>\n <input matInput #searchInput [placeholder]=\"_data.filterPlaceholder\" [value]=\"queryInput()\" (input)=\"onQueryChange($event, optionsContainer); $event.stopPropagation()\" />\n @if(searchInput.value.length > 0) {\n <button matSuffix mat-icon-button (click)=\"onClearClick(searchInput); $event.stopPropagation()\">\n <mat-icon>close</mat-icon>\n </button>\n }\n </mat-form-field>\n \n <mat-chip-listbox [multiple]=\"false\">\n @for(filterKey of _data.config.filtersKeys; track filterKey.key) {\n <mat-chip-option [value]=\"filterKey.key\" [selected]=\"\">{{ filterKey.label() }}</mat-chip-option>\n }\n </mat-chip-listbox>\n }\n\n @if(_data.extraFiltersTemplate) {\n <br />\n <ng-container *ngTemplateOutlet=\"_data.extraFiltersTemplate;\"></ng-container>\n }\n </div>\n <div>\n @if(isLoading()) {\n <mat-progress-bar mode=\"indeterminate\" />\n }\n </div>\n <div #optionsContainer class=\"optionsContainer\" (scroll)=\"onScroll(optionsContainer)\">\n <mat-selection-list #selectionList [multiple]=\"_data.multiple\" (selectionChange)=\"onSelectionChange($event)\">\n @if(options().length === 0 && !isLoading()) {\n <div class=\"no-results\">\n <mat-icon>search_off</mat-icon>\n <p>{{ _data.noResultsMessage }}</p>\n </div>\n }\n @for(option of options(); track option[_data.config.valueKey]; let last = $last) {\n <mat-list-option \n [value]=\"option[_data.config.valueKey]\"\n [selected]=\"isSelected(option[_data.config.valueKey])\"\n [disabled]=\"_data.config.disabled ? _data.config.disabled(option) : false\"\n >\n @if(_data.optionTemplate) {\n <ng-container *ngTemplateOutlet=\"_data.optionTemplate; context: { $implicit: option }\"></ng-container>\n } @else {\n {{_data.config.displayedLabel(option)}}\n }\n </mat-list-option>\n @if(!last) {\n <mat-divider />\n }\n }\n </mat-selection-list>\n </div> \n\n\n <div class=\"footer\">\n @if(_data.multiple) {\n <div class=\"length\">\n {{ selectedsOptions().length }} / {{ total() }} {{ _data.multipleItemsLabel }}\n </div>\n <div class=\"actions\">\n @if(selectedsOptions().length > 0) {\n <button matButton (click)=\"onResetClick()\">{{ _data.resetLabel }}</button>\n }\n <button matButton=\"filled\" color=\"primary\" (click)=\"onConfirmMultiSelectionClick()\">{{ _data.confirmLabel }}</button>\n </div>\n } @else {\n <div class=\"length\">\n {{ total() }} {{ _data.itemsLabel }}\n </div>\n }\n </div>\n</div>","import { ChangeDetectorRef, Component, effect, inject, input, OnInit, output, signal, TemplateRef, viewChild, WritableSignal } from '@angular/core';\r\nimport { PaginatedFilter, PaginatedSelectConfig } from '../../models';\r\nimport { Observable } from 'rxjs';\r\nimport { PaginatedItems } from '../../models/paginated-items';\r\nimport { MatButtonModule } from '@angular/material/button';\r\nimport { MatBottomSheet, MatBottomSheetModule } from '@angular/material/bottom-sheet';\r\nimport { PaginatedSelectBottomSheetComponent } from '../../common/components/paginated-select-bottom-sheet/paginated-select-bottom-sheet.component';\r\nimport { FormControl, ReactiveFormsModule } from '@angular/forms';\r\nimport { CommonModule } from '@angular/common';\r\nimport { MatFormFieldModule } from '@angular/material/form-field';\r\nimport { MatInputModule } from '@angular/material/input';\r\nimport { MatIconModule } from '@angular/material/icon';\r\nimport { MatSelect, MatSelectModule } from '@angular/material/select';\r\nimport { MatChipsModule } from \"@angular/material/chips\";\r\n\r\n@Component({\r\n selector: 'ngx-paginated-select',\r\n imports: [\r\n MatButtonModule,\r\n MatBottomSheetModule,\r\n CommonModule,\r\n MatFormFieldModule,\r\n MatInputModule,\r\n MatIconModule,\r\n MatSelectModule,\r\n ReactiveFormsModule,\r\n MatChipsModule,\r\n MatSelectModule,\r\n],\r\n templateUrl: './ngx-paginated-select.component.html',\r\n styleUrl: './ngx-paginated-select.component.scss',\r\n})\r\nexport class NgxPaginatedSelect<T, U extends PaginatedFilter<T>> implements OnInit {\r\n // dependencies injection\r\n private _bottomSheet = inject(MatBottomSheet);\r\n private _cdr = inject(ChangeDetectorRef);\r\n\r\n // inputs\r\n readonly label = input.required<string>();\r\n readonly title = input<string>('');\r\n readonly endpoint = input.required<(filters: U) => Observable<PaginatedItems<T>>>();\r\n readonly config = input.required<PaginatedSelectConfig<T>>();\r\n filters = input<WritableSignal<U>>(\r\n signal<U>(\r\n {\r\n pageNumber: 1,\r\n pageSize: 10,\r\n query: undefined,\r\n sortBy: undefined\r\n } as U\r\n )\r\n );\r\n readonly control = input.required<FormControl>();\r\n readonly selectedItems = input<T[]>([]);\r\n readonly hideFilter = input<boolean>(false);\r\n readonly filterPlaceholder = input<string>('Select an option');\r\n readonly multiple = input<boolean>(false);\r\n readonly disabled = input<boolean>(false);\r\n readonly clearable = input<boolean>(false);\r\n readonly itemsLabel = input<string>('items');\r\n readonly multipleItemsLabel = input<string>('items selected');\r\n readonly resetLabel = input<string>('Reset');\r\n readonly confirmLabel = input<string>('Confirm');\r\n readonly error = input<string>('');\r\n readonly class = input<string>('');\r\n readonly hideChips = input<boolean>(false);\r\n readonly optionTemplate = input<TemplateRef<any> | null>(null);\r\n readonly noResultsMessage = input<string>('No results found');\r\n\r\n //outputs\r\n readonly resetFilters = output<void>();\r\n\r\n //viewChild\r\n extraFiltersTemplate = viewChild.required<TemplateRef<any>>('extraFiltersTemplate');\r\n matSelect = viewChild<MatSelect>('matSelect');\r\n\r\n _selectedItems = signal<T[]>([]);\r\n _initialFilters = signal<U | null>(null);\r\n constructor() {\r\n effect(() => {\r\n this._selectedItems.set(this.selectedItems());\r\n });\r\n }\r\n\r\n ngOnInit(): void {\r\n this._initialFilters.set({ ...this.filters()() });\r\n\r\n if(this.disabled()) {\r\n this.control().disable();\r\n }\r\n }\r\n\r\n getSelectedItemsLabel(): string {\r\n return this._selectedItems()\r\n .map((item: T) => String(this.config().displayedLabel(item)))\r\n .join(', ') || '';\r\n }\r\n\r\n // effect\r\n controlEffect = effect(() => {\r\n const selectedItems = this._selectedItems();\r\n if(this.multiple()) {\r\n this.control().setValue(selectedItems.map((item: T) => item[this.config().valueKey as keyof T]));\r\n } else {\r\n this.control().setValue(selectedItems?.[0]?.[this.config().valueKey as keyof T]);\r\n }\r\n this._cdr.markForCheck();\r\n });\r\n\r\n onOpenBottomSheetClick(event: Event): void {\r\n event.preventDefault();\r\n event.stopPropagation();\r\n\r\n if(this.disabled()) {\r\n return;\r\n }\r\n\r\n (event.target as HTMLElement).blur();\r\n\r\n this.control().markAsTouched();\r\n this.control().updateValueAndValidity();\r\n this._cdr.detectChanges()\r\n \r\n this._bottomSheet.open(PaginatedSelectBottomSheetComponent, {\r\n data: {\r\n label: this.label(),\r\n title: this.title(),\r\n endpoint: this.endpoint(),\r\n config: this.config(),\r\n selectedItems: this._selectedItems(),\r\n hideFilter: this.hideFilter(),\r\n filters: this.filters(),\r\n filterPlaceholder: this.filterPlaceholder(),\r\n multiple: this.multiple(),\r\n itemsLabel: this.itemsLabel(),\r\n multipleItemsLabel: this.multipleItemsLabel(),\r\n resetLabel: this.resetLabel(),\r\n confirmLabel: this.confirmLabel(),\r\n extraFiltersTemplate: this.extraFiltersTemplate(),\r\n optionTemplate: this.optionTemplate(),\r\n noResultsMessage: this.noResultsMessage(),\r\n },\r\n }).afterDismissed().subscribe((selectedItems: T[] | undefined) => {\r\n if(selectedItems !== undefined) {\r\n this._selectedItems.set(selectedItems);\r\n }\r\n this.resetFilters.emit();\r\n });\r\n }\r\n\r\n preventOpening(isOpen: boolean): void {\r\n if (isOpen) {\r\n // Forzar el cierre inmediato\r\n if (this.matSelect()) {\r\n this.matSelect()?.close();\r\n }\r\n }\r\n }\r\n\r\n onChipRemoved(item: T): void {\r\n this._selectedItems.set(this._selectedItems().filter(i => i[this.config().valueKey as keyof T] !== item[this.config().valueKey as keyof T]));\r\n this.control().markAsTouched();\r\n this.control().updateValueAndValidity();\r\n this._cdr.detectChanges()\r\n }\r\n\r\n onResetClick(event: Event): void {\r\n event.stopPropagation();\r\n event.preventDefault();\r\n this._selectedItems.set([]);\r\n this.control().reset();\r\n this.control().markAsTouched();\r\n this.control().updateValueAndValidity();\r\n this._cdr.markForCheck();\r\n }\r\n}\r\n","@if(hideChips()) {\n <mat-form-field \n appearance=\"outline\" \n floatLabel=\"always\"\n (click)=\"onOpenBottomSheetClick($event)\"\n >\n <mat-label>{{ label() }}</mat-label>\n <mat-select \n #matSelect\n [formControl]=\"control()\"\n [multiple]=\"multiple()\"\n class=\"clickable-input\"\n (openedChange)=\"preventOpening($event)\"\n >\n @for(item of _selectedItems(); track item[config().valueKey]) {\n <mat-option [value]=\"item[config().valueKey]\">\n {{ config().displayedLabel(item) }}\n </mat-option>\n }\n </mat-select>\n <div matSuffix>\n @if(clearable() && control().value) {\n <button matIconButton matSuffix (click)=\"onResetClick($event);\">\n <mat-icon>close</mat-icon>\n </button>\n }\n <mat-icon matSuffix>arrow_drop_down</mat-icon>\n </div>\n <mat-error>{{ error() }}</mat-error>\n </mat-form-field>\n} @else {\n <mat-form-field \n appearance=\"outline\" \n floatLabel=\"always\"\n (click)=\"onOpenBottomSheetClick($event)\"\n >\n <mat-label>{{ label() }}</mat-label>\n <mat-chip-grid \n #chipGrid \n class=\"chips-grid\" \n [formControl]=\"control()\"\n >\n @for(item of _selectedItems(); track item[config().valueKey]) {\n <mat-chip-row\n (removed)=\"onChipRemoved(item)\"\n class=\"chip-item\"\n >\n {{ config().displayedLabel(item) }}\n <button matChipRemove>\n <mat-icon>cancel</mat-icon>\n </button>\n </mat-chip-row>\n }\n </mat-chip-grid>\n\n\n <input \n matInput\n [matChipInputFor]=\"chipGrid\"\n style=\"display: none\"\n />\n <mat-icon matSuffix>arrow_drop_down</mat-icon>\n <mat-error>{{ error() }}</mat-error>\n </mat-form-field>\n}\n\n<ng-template #extraFiltersTemplate>\n <ng-content select=\"[extra-filters]\" />\n</ng-template>","import { TemplateRef, Type } from \"@angular/core\";\r\n\r\nexport enum DialogBodyType {\r\n TEXT = 'text',\r\n HTML = 'html',\r\n COMPONENT = 'component',\r\n TEMPLATE = 'template'\r\n}\r\n\r\nexport interface DialogBodyConfig<T = any> {\r\n type: DialogBodyType;\r\n content: string | Type<T> | TemplateRef<any>;\r\n data?: T;\r\n}\r\n\r\nexport interface DialogConfig<T = any> {\r\n title: string;\r\n icon?: string;\r\n iconColor?: string;\r\n subtitle?: string;\r\n body: DialogBodyConfig<T>;\r\n showCancel?: boolean;\r\n showConfirm?: boolean;\r\n cancelText?: string;\r\n confirmText?: string;\r\n}","import { ComponentRef, Directive, effect, inject, input, signal, Type, ViewContainerRef } from \"@angular/core\";\r\n\r\n@Directive({\r\n selector: '[ngxDynamicHost]'\r\n})\r\nexport class DynamicHostDirective<T> {\r\n private _vcr = inject(ViewContainerRef);\r\n private _currentRef: ComponentRef<any> | null = null;\r\n\r\n component = input<Type<any>>();\r\n data = input<T>();\r\n\r\n constructor() {\r\n effect(() => {\r\n const componentType = this.component();\r\n \r\n // 1. Gestión de la creación/destrucción del componente\r\n if (!componentType) {\r\n this._vcr.clear();\r\n this._currentRef = null;\r\n return;\r\n }\r\n\r\n // Si el componente es diferente al que tenemos, lo recreamos\r\n if (this._currentRef?.componentType !== componentType) {\r\n this._vcr.clear();\r\n this._currentRef = this._vcr.createComponent(componentType);\r\n }\r\n \r\n // 2. Actualización de datos (siempre, tanto si es nuevo como si ya existía)\r\n const data = this.data();\r\n if (this._currentRef && data !== undefined) {\r\n // La forma correcta de setear un input en Angular moderno\r\n this._currentRef.setInput('data', data); \r\n }\r\n });\r\n }\r\n}","import { Component, inject } from '@angular/core';\r\nimport { MatButtonModule } from '@angular/material/button';\r\nimport { MAT_DIALOG_DATA, MatDialogActions, MatDialogContent, MatDialogRef, MatDialogTitle } from '@angular/material/dialog';\r\nimport { DialogBodyType, DialogConfig } from '../../models/dialog-config';\r\nimport { CommonModule } from '@angular/common';\r\nimport { DynamicHostDirective } from '../../directives';\r\nimport { MatIconModule } from '@angular/material/icon';\r\nimport { MatDividerModule } from '@angular/material/divider';\r\n\r\n@Component({\r\n selector: 'ngx-dialog',\r\n imports: [\r\n MatDialogTitle,\r\n MatDialogContent,\r\n MatDialogActions,\r\n MatDividerModule,\r\n MatButtonModule,\r\n MatIconModule,\r\n CommonModule,\r\n DynamicHostDirective \r\n ],\r\n templateUrl: './ngx-dialog.component.html',\r\n styleUrl: './ngx-dialog.component.scss',\r\n})\r\nexport class NgxDialog<T = any> { \r\n //dependencies injection\r\n private _dialogRef = inject(MatDialogRef<NgxDialog>);\r\n private _data = inject<DialogConfig<T>>(MAT_DIALOG_DATA);\r\n\r\n readonly title = this._data.title;\r\n readonly icon = this._data.icon;\r\n readonly iconColor = this._data.iconColor;\r\n readonly subtitle = this._data.subtitle;\r\n readonly body = this._data.body;\r\n readonly showCancel = this._data.showCancel ?? true;\r\n readonly showConfirm = this._data.showConfirm ?? true;\r\n readonly cancelText = this._data.cancelText ?? 'Cancelar';\r\n readonly confirmText = this._data.confirmText ?? 'Aceptar';\r\n\r\n DialogBodyType = DialogBodyType;\r\n\r\n onCancelClick(): void {\r\n this._dialogRef.close(false);\r\n }\r\n\r\n onConfirmClick(): void {\r\n this._dialogRef.close(true);\r\n }\r\n}\r\n","<h2 mat-dialog-title class=\"title\">\r\n {{ title }}\r\n @if(icon) {\r\n <mat-icon \r\n [style.color]=\"iconColor\"\r\n class=\"icon\"\r\n >\r\n {{ icon }}\r\n </mat-icon>\r\n }\r\n</h2>\r\n<mat-dialog-content>\r\n @if(subtitle) {\r\n <p class=\"subtitle\">{{ subtitle }}</p>\r\n <mat-divider />\r\n }\r\n\r\n <div class=\"content\">\r\n @switch (body.type) {\r\n @case (DialogBodyType.TEXT) {\r\n <p>{{ body.content }}</p>\r\n }\r\n @case (DialogBodyType.HTML) {\r\n <div [innerHTML]=\"body.content\"></div>\r\n }\r\n @case (DialogBodyType.COMPONENT) {\r\n <ng-container \r\n ngxDynamicHost \r\n [component]=\"$any(body.content)\"\r\n [data]=\"body.data\"\r\n />\r\n }\r\n @case (DialogBodyType.TEMPLATE) {\r\n <ng-container \r\n [ngTemplateOutlet]=\"$any(body.content)\"\r\n [ngTemplateOutletContext]=\"{ $implicit: body.data }\"\r\n />\r\n }\r\n }\r\n </div>\r\n\r\n</mat-dialog-content>\r\n<mat-dialog-actions align=\"end\" class=\"matDialogActionsCustomGap\">\r\n @if(showCancel) {\r\n <button matButton=\"outlined\" (click)=\"onCancelClick()\">\r\n {{ cancelText }}\r\n </button>\r\n }\r\n @if(showConfirm) {\r\n <button matButton=\"filled\" (click)=\"onConfirmClick()\">\r\n {{ confirmText }}\r\n </button>\r\n }\r\n</mat-dialog-actions>\r\n","import { Component, inject } from '@angular/core';\r\nimport { MatDialogRef, MAT_DIALOG_DATA, MatDialogActions, MatDialogClose, MatDialogContent, MatDialogTitle } from '@angular/material/dialog';\r\nimport { ConfirmDialogData } from '../../models/confirm-dialog-data';\r\nimport { CommonModule } from '@angular/common';\r\nimport { MatButtonModule } from '@angular/material/button';\r\n\r\n@Component({\r\n selector: 'ngx-confirm-dialog',\r\n imports: [\r\n MatButtonModule,\r\n MatDialogTitle,\r\n MatDialogContent,\r\n MatDialogActions,\r\n MatDialogClose,\r\n CommonModule\r\n ],\r\n templateUrl: './ngx-confirm-dialog.component.html',\r\n styleUrl: './ngx-confirm-dialog.component.scss'\r\n})\r\nexport class NgxConfirmDialogComponent {\r\n dialogRef = inject(MatDialogRef<NgxConfirmDialogComponent>);\r\n data = inject<ConfirmDialogData>(MAT_DIALOG_DATA);\r\n}\r\n","<h2 mat-dialog-title>{{data.title}}</h2>\r\n<mat-dialog-content>\r\n @if(data.body) {\r\n <p>{{data.body}}</p>\r\n }\r\n \r\n @if (data.template) {\r\n <ng-container *ngTemplateOutlet=\"data.template; context: { $implicit: data.row }\"></ng-container>\r\n }\r\n</mat-dialog-content>\r\n<mat-dialog-actions>\r\n <button matButton [mat-dialog-close]=\"false\">{{ data.denyButtonLabel ?? 'Cancelar' }}</button>\r\n <button matButton [mat-dialog-close]=\"true\">{{ data.confirmButtonLabel ?? 'Confirmar' }}</button>\r\n</mat-dialog-actions>","import { Directive, effect, inject, input, signal, Type, ViewContainerRef } from '@angular/core';\r\n\r\n@Directive({\r\n selector: '[ngxDynamicCellHost]',\r\n})\r\nexport class DynamicCellHostDirective<T> {\r\n vcr = inject(ViewContainerRef);\r\n\r\n component = input<Type<any>>();\r\n row = input<T>();\r\n key = input<keyof T>();\r\n\r\n effect = effect(() => {\r\n const component = this.component();\r\n const row = this.row();\r\n const key = this.key();\r\n\r\n if (component) {\r\n const compRef = this.vcr.createComponent(component);\r\n\r\n if (row && key) {\r\n compRef.instance.row = signal(row);\r\n compRef.instance.key = signal(key);\r\n }\r\n }\r\n });\r\n}\r\n","import { Pipe, type PipeTransform } from '@angular/core';\r\n\r\n@Pipe({\r\n name: 'ngxOnlyUpperFirstCharacter',\r\n})\r\nexport class OnlyUpperFirstCharacterPipe implements PipeTransform {\r\n\r\n transform(value: string): string {\r\n if (!value)\r\n return '';\r\n\r\n value = value.toLowerCase();\r\n return `${value.charAt(0).toUpperCase()}${value.slice(1)}`;\r\n }\r\n\r\n}\r\n","import { FilterOption, FilterType } from \"./paginated-table-config\";\r\nimport { ColumnValue } from \"../models/column-value\";\r\n\r\nexport type FilterConnector = 'AND' | 'OR';\r\n\r\nexport type FilterOperator = '=' | '<>' | '>' | '>=' | '<' | '<=' | 'LIKE';\r\n\r\nexport interface AdvancedFilter<T> {\r\n name: string;\r\n groups: FilterGroup<T>[];\r\n}\r\n\r\nexport interface FilterGroup<T> {\r\n id?: string;\r\n connector: FilterConnector;\r\n filters: (FilterRule<T> | FilterGroup<T>)[];\r\n}\r\n\r\nexport interface FilterRule<T> {\r\n id?: string;\r\n key?: keyof T;\r\n operator?: FilterOperator;\r\n value?: ColumnValue;\r\n}\r\n\r\nexport const FILTER_CONNECTOR_LABEL: Record<FilterConnector, string> = {\r\n 'AND': 'Y',\r\n 'OR': 'O'\r\n}\r\n\r\nexport const OPTIONS_FILTER_CONNECTOR: FilterOption[] = Object.entries(FILTER_CONNECTOR_LABEL).map(\r\n ([key, label]) => {\r\n return {\r\n value: key,\r\n label: label\r\n }\r\n }\r\n);\r\n\r\nexport const OPERATOR_BY_FILTER_TYPE: Record<FilterType, FilterOperator[]> = {\r\n number: ['=', '<>', '>', '>=', '<', '<='],\r\n text: ['=', 'LIKE', '<>'],\r\n option: ['=', '<>'],\r\n 'option-multiple': ['=', '<>'], //Actuara como un option\r\n date: ['=', '<>', '>', '>=', '<', '<='],\r\n 'date-range': ['=', '<>', '>', '>=', '<', '<='] //Actuara como un date normal\r\n}\r\n\r\nexport const FILTER_OPERATOR_LABEL: Record<FilterOperator, string> = {\r\n '=': 'Igual a',\r\n '<>': 'Distinto de',\r\n '>': 'Mayor que',\r\n '>=': 'Mayor o igual que',\r\n '<': 'Menor que',\r\n '<=': 'Menor o igual que',\r\n 'LIKE': 'Contiene'\r\n}","import { AbstractControl, FormArray, FormBuilder, FormGroup, Validators } from \"@angular/forms\";\r\nimport { ColumnValue } from \"./column-value\";\r\nimport { DatePipe } from \"@angular/common\";\r\nimport { v4 as uuidv4 } from 'uuid';\r\nimport { PaginatedTableColumn } from \"./paginated-table-config\";\r\nimport { DynamicFilter } from \"./dynamic-filter\";\r\nimport { AdvancedFilter, FilterGroup, FilterRule, FilterConnector, FILTER_CONNECTOR_LABEL, FILTER_OPERATOR_LABEL } from \"./advanced-filter\";\r\n\r\nexport class AdvancedFilterUtils {\r\n static createAdvancedFilter = <T>(fb: FormBuilder, advancedFilter: AdvancedFilter<T>): FormGroup => {\r\n return fb.group({\r\n name: [advancedFilter.name, Validators.required],\r\n groups: fb.array(advancedFilter.groups.map(g => this.createFilterGroup(fb, g)))\r\n });\r\n }\r\n\r\n static createFilterGroup = <T>(fb: FormBuilder, group: FilterGroup<T>): FormGroup => {\r\n return fb.group({\r\n id: [group.id ?? uuidv4()],\r\n connector: [group.connector, Validators.required],\r\n filters: fb.array(group.filters.map(f => {\r\n return this.isFilterGroup<T>(f)\r\n ? this.createFilterGroup(fb, f)\r\n : this.createFilterRule(fb, f);\r\n }), [Validators.required])\r\n });\r\n }\r\n\r\n static createFilterRule = <T>(fb: FormBuilder, rule: FilterRule<T>): FormGroup => {\r\n return fb.group({\r\n id: [rule.id ?? uuidv4()],\r\n key: [rule.key ?? null, Validators.required],\r\n operator: [rule.operator ?? null, Validators.required],\r\n value: [rule.value ?? null, Validators.required]\r\n });\r\n }\r\n\r\n static isFilterGroup = <T>(obj: any): obj is FilterGroup<T> => {\r\n return obj &&\r\n typeof obj === 'object' &&\r\n 'connector' in obj &&\r\n 'filters' in obj;\r\n }\r\n\r\n private static isFilterRule<T>(obj: any): obj is FilterRule<T> {\r\n return obj && typeof obj === 'object' && 'key' in obj;\r\n }\r\n\r\n static addGroupToGroup<T>(fb: FormBuilder, form: FormGroup, groupId: string, group: FilterGroup<T>) {\r\n const groupFound = this.findGroupFormById(form.get('groups') as FormArray, groupId);\r\n if (groupFound) {\r\n const filters = groupFound.get('filters') as FormArray;\r\n const formGroup = this.createFilterGroup(fb, group);\r\n filters.push(formGroup);\r\n }\r\n }\r\n\r\n static deleteGroup<T>(form: FormGroup, groupId: string): boolean {\r\n const groupsArray = form.get('groups') as FormArray;\r\n return this.deleteByIdRecursive(groupsArray, groupId);\r\n }\r\n\r\n static addRuleToGroup = <T>(fb: FormBuilder, form: FormGroup, groupId: string, rule: FilterRule<T>) => {\r\n const group = this.findGroupFormById(form.get('groups') as FormArray, groupId);\r\n if (group) {\r\n const filters = group.get('filters') as FormArray;\r\n const formRule = this.createFilterRule(fb, rule);\r\n filters.push(formRule);\r\n }\r\n }\r\n\r\n static deleteRule<T>(form: FormGroup, ruleId: string): boolean {\r\n const groupsArray = form.get('groups') as FormArray;\r\n return this.deleteByIdRecursive(groupsArray, ruleId);\r\n }\r\n\r\n private static deleteByIdRecursive(array: FormArray, id: string): boolean {\r\n for (let i = 0; i < array.length; i++) {\r\n const control = array.at(i) as FormGroup;\r\n\r\n // Si el id coincide, eliminar directamente (da igual si es rule o group)\r\n if (control.get('id')?.value === id) {\r\n array.removeAt(i);\r\n return true;\r\n }\r\n\r\n // Si es un grupo, seguir buscando dentro de sus filtros\r\n const filters = control.get('filters');\r\n if (filters instanceof FormArray) {\r\n const deleted = this.deleteByIdRecursive(filters, id);\r\n if (deleted) return true;\r\n }\r\n }\r\n\r\n return false;\r\n }\r\n\r\n\r\n static findGroupFormById(array: FormArray, id: string): FormGroup | null {\r\n for (const control of array.controls) {\r\n const group = control as FormGroup;\r\n if (group.get('id')?.value === id)\r\n return group;\r\n\r\n const filters = group.get('filters') as FormArray;\r\n if (filters) {\r\n const found = this.findGroupFormById(filters, id);\r\n if (found)\r\n return found;\r\n }\r\n }\r\n return null;\r\n }\r\n\r\n static isFilterGroupForm(group: AbstractControl): boolean {\r\n return (\r\n group instanceof FormGroup &&\r\n group.contains('connector') &&\r\n group.contains('filters')\r\n );\r\n }\r\n\r\n /*static isFilterRuleForm(group: AbstractControl): boolean {\r\n return (\r\n group instanceof FormGroup &&\r\n group.contains('key') &&\r\n group.contains('operator') &&\r\n group.contains('value') &&\r\n !group.contains('filters')\r\n );\r\n }*/\r\n\r\n static mapFormToAdvancedFilter<T>(form: FormGroup): AdvancedFilter<T> {\r\n return {\r\n name: form.get('name')?.value,\r\n groups: (form.get('groups') as FormArray).controls\r\n .map(g => this.mapFormGroupToFilterGroup<T>(g as FormGroup))\r\n .filter(g => this.isNonEmptyGroup(g))\r\n };\r\n }\r\n\r\n\r\n private static mapFormGroupToFilterGroup<T>(groupForm: FormGroup): FilterGroup<T> {\r\n const id = groupForm.get('id')?.value as string;\r\n const connector = groupForm.get('connector')?.value as FilterConnector;\r\n const filtersArray = groupForm.get('filters') as FormArray;\r\n\r\n const filters = filtersArray.controls\r\n .map(control => {\r\n const value = control.value;\r\n if ('filters' in value)\r\n return this.mapFormGroupToFilterGroup<T>(control as FormGroup);\r\n else\r\n return this.mapFormGroupToFilterRule<T>(control as FormGroup);\r\n })\r\n .filter(f => this.isNonEmptyFilter(f));\r\n\r\n return {\r\n id: id,\r\n connector: connector,\r\n filters: filters\r\n };\r\n }\r\n\r\n\r\n private static mapFormGroupToFilterRule<T>(ruleForm: FormGroup): FilterRule<T> {\r\n return {\r\n id: ruleForm.get('id')?.value,\r\n key: ruleForm.get('key')?.value,\r\n operator: ruleForm.get('operator')?.value,\r\n value: ruleForm.get('value')?.value\r\n };\r\n }\r\n\r\n private static isNonEmptyFilter<T>(filter: FilterRule<T> | FilterGroup<T>): boolean {\r\n if (this.isFilterGroup(filter))\r\n return this.isNonEmptyGroup(filter);\r\n\r\n return this.isNonEmptyRule(filter);\r\n }\r\n\r\n private static isNonEmptyGroup<T>(group: FilterGroup<T>): boolean {\r\n return Array.isArray(group.filters) && group.filters.some(f => this.isNonEmptyFilter(f));\r\n }\r\n\r\n private static isNonEmptyRule<T>(rule: FilterRule<T>): boolean {\r\n return !!(rule.key && rule.operator && rule.value !== undefined && rule.value !== null && rule.value !== '');\r\n }\r\n\r\n static groupsToReadableHtml<T>(groups: FilterGroup<T>[], columns: PaginatedTableColumn<T>[]): string {\r\n return this.groupToHtml(groups[0], columns);\r\n //return groups.map(g => this.groupToString(g)).join(' OR ');\r\n }\r\n\r\n private static groupToHtml<T>(group: FilterGroup<T>, columns: PaginatedTableColumn<T>[]): string {\r\n const connector = ` <strong>${FILTER_CONNECTOR_LABEL[group.connector]}</strong> `;\r\n\r\n const parts = group.filters.map(filter => {\r\n if (this.isFilterGroup<T>(filter))\r\n return `<strong>[ </strong>${this.groupToHtml(filter, columns)}<strong> ]</strong>`;\r\n else\r\n return this.ruleToHtml(filter, columns);\r\n });\r\n\r\n return parts.join(connector);\r\n }\r\n\r\n private static ruleToHtml<T>(rule: FilterRule<T>, columns: PaginatedTableColumn<T>[]): string {\r\n const column = columns.find(column => column.key == rule.key);\r\n\r\n if (!column)\r\n return \"\";\r\n\r\n const key = `<i>${column.label}</i>`;\r\n const operator = rule.operator ? FILTER_OPERATOR_LABEL[rule.operator].toLowerCase() : '';\r\n //const operator = rule.operator ?? '';\r\n const value = this.valueToHtml(rule.value, column);\r\n return `${key} ${operator} \"${value}\"`;\r\n }\r\n\r\n private static valueToHtml<T>(value: ColumnValue, column: PaginatedTableColumn<T>): string {\r\n switch (column.filterType) {\r\n case 'option':\r\n case 'option-multiple':\r\n const optionSelected = column.filterOptions?.find(option => option.value == value);\r\n return optionSelected?.label ?? '';\r\n case 'date':\r\n case 'date-range':\r\n const pipe = new DatePipe('es-ES');\r\n return pipe.transform(value as string, 'dd/MM/yyyy') ?? '';\r\n }\r\n\r\n return value as string;\r\n }\r\n\r\n static mapToDynamicFilter<T>(advancedFilter: AdvancedFilter<T>): DynamicFilter<T>[] {\r\n const result: DynamicFilter<T>[] = [];\r\n\r\n for (const group of advancedFilter.groups) {\r\n result.push(...this.mapGroupToDynamicFilters(group));\r\n }\r\n\r\n return result;\r\n }\r\n\r\n private static mapGroupToDynamicFilters<T>(group: FilterGroup<T>): DynamicFilter<T>[] {\r\n const filters: DynamicFilter<T>[] = [];\r\n\r\n for (const f of group.filters) {\r\n if (this.isFilterGroup<T>(f)) {\r\n filters.push(...this.mapGroupToDynamicFilters(f));\r\n } else if (this.isFilterRule<T>(f) && f.key && f.operator && f.value !== undefined && f.value !== null) {\r\n filters.push({\r\n campo: f.key,\r\n operador: f.operator,\r\n valor: f.value?.toString(),\r\n conector: group.connector,\r\n grupo: group.id ?? 'root'\r\n });\r\n }\r\n }\r\n\r\n return filters;\r\n }\r\n}\r\n","import { InjectionToken, Signal } from \"@angular/core\";\r\n\r\nexport const USER_ID_FACTORY = new InjectionToken<Signal<string | null | undefined>>('USER_ID_FACTORY');","import { computed, effect, inject, Injectable, signal } from '@angular/core';\r\nimport { USER_ID_FACTORY } from '../models';\r\nimport { AdvancedFilter } from '../models/advanced-filter';\r\nimport { AdvancedFilterUtils } from '../models/advanced-filter-utils';\r\nimport { DynamicFilter } from '../models/dynamic-filter';\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class AdvancedFilterService {\r\n private userIdFactory = inject(USER_ID_FACTORY);\r\n\r\n private readonly PARTIAL_KEY_STORAGE_ADVANCED_FILTER_CONFIG = 'advanced_filter';\r\n private fullKey = computed(() => {\r\n const userId = this.userIdFactory();\r\n\r\n if (!userId)\r\n return undefined;\r\n\r\n return `${this.PARTIAL_KEY_STORAGE_ADVANCED_FILTER_CONFIG}_${userId}`;\r\n });\r\n\r\n private _advancedFilters = signal<Record<string, AdvancedFilter<any>[]>>({});\r\n advancedFilters = this._advancedFilters.asReadonly();\r\n\r\n private setAdvancedFiltersEffect = effect(() => {\r\n this.setAdvancedFilter();\r\n });\r\n\r\n constructor() {\r\n this.setAdvancedFilter();\r\n }\r\n\r\n private setAdvancedFilter() {\r\n const localStorageKey = this.fullKey();\r\n if (!localStorageKey) {\r\n this._advancedFilters.set({});\r\n return;\r\n }\r\n\r\n const recordAdvancedFitler = localStorage.getItem(localStorageKey);\r\n\r\n if (!recordAdvancedFitler) {\r\n this._advancedFilters.set({});\r\n return;\r\n }\r\n\r\n const advancedFilters: Record<string, AdvancedFilter<any>[]> = JSON.parse(recordAdvancedFitler);\r\n\r\n this._advancedFilters.set(advancedFilters);\r\n }\r\n\r\n saveAdvancedFilter(tableId: string, advancedFilter: AdvancedFilter<any>): boolean {\r\n const localStorageKey = this.fullKey();\r\n if (!localStorageKey)\r\n return false;\r\n\r\n this._advancedFilters.update(currentValue => {\r\n const currentArray = currentValue[tableId] ?? [];\r\n\r\n const index = currentArray.findIndex(f => f.groups[0].id === advancedFilter.groups[0].id);\r\n let newArray: AdvancedFilter<any>[];\r\n if (index >= 0) { //Si existe, lo reemplazamos\r\n newArray = [...currentArray];\r\n newArray[index] = advancedFilter;\r\n } else { // Si no existe, lo añadimos\r\n newArray = [...currentArray, advancedFilter];\r\n }\r\n\r\n const newValue: Record<string, AdvancedFilter<any>[]> = {\r\n ...currentValue,\r\n [tableId]: newArray\r\n };\r\n localStorage.setItem(localStorageKey, JSON.stringify(newValue));\r\n return newValue;\r\n });\r\n\r\n return true;\r\n }\r\n\r\n deleteAdvancedFilter(tableId: string, advancedFilter: AdvancedFilter<any>): boolean {\r\n const localStorageKey = this.fullKey();\r\n if (!localStorageKey)\r\n return false;\r\n\r\n this._advancedFilters.update(currentValue => {\r\n const currentArray = currentValue[tableId] ?? [];\r\n\r\n const newArray = currentArray.filter(f => f.groups[0].id !== advancedFilter.groups[0].id);\r\n\r\n const newValue: Record<string, AdvancedFilter<any>[]> = {\r\n ...currentValue,\r\n [tableId]: newArray\r\n };\r\n localStorage.setItem(localStorageKey, JSON.stringify(newValue));\r\n\r\n return newValue;\r\n });\r\n\r\n return true;\r\n }\r\n\r\n getAdvancedFilterById(tableId: string, advancedFilterId: string): AdvancedFilter<any> | undefined {\r\n const allAdvancedFiltersByTable = this._advancedFilters()[tableId];\r\n\r\n if (!allAdvancedFiltersByTable)\r\n return undefined;\r\n\r\n return allAdvancedFiltersByTable.find(advancedFilter => {\r\n return advancedFilter.groups?.[0].id !== undefined && advancedFilter.groups[0].id == advancedFilterId;\r\n });\r\n }\r\n\r\n getDynamicFiltersById(tableId: string, advancedFilterId: string): DynamicFilter<any>[] {\r\n const advancedFilter = this.getAdvancedFilterById(tableId, advancedFilterId);\r\n\r\n if (!advancedFilter)\r\n return [];\r\n\r\n return AdvancedFilterUtils.mapToDynamicFilter(advancedFilter);\r\n }\r\n}\r\n","import { computed, effect, inject, Injectable, signal } from '@angular/core';\r\nimport { ColumnConfig } from '../models/configure-table-column-data';\r\nimport { USER_ID_FACTORY } from '../models';\r\n\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class ColumnConfigService {\r\n private userIdFactory = inject(USER_ID_FACTORY);\r\n\r\n private readonly PARTIAL_KEY_STORAGE_COLUMN_CONFIG = 'column_config';\r\n private fullKey = computed(() => {\r\n const userId = this.userIdFactory();\r\n\r\n if (!userId)\r\n return undefined;\r\n\r\n return `${this.PARTIAL_KEY_STORAGE_COLUMN_CONFIG}_${userId}`;\r\n });\r\n\r\n private _columnConfigs = signal<Record<string, ColumnConfig<any>[]>>({});\r\n columnConfigs = this._columnConfigs.asReadonly();\r\n\r\n private setColumnConfigEffect = effect(() => {\r\n const localStorageKey = this.fullKey();\r\n if (!localStorageKey) {\r\n this._columnConfigs.set({});\r\n return;\r\n }\r\n\r\n const recordColumnConfig = localStorage.getItem(localStorageKey);\r\n\r\n if (!recordColumnConfig) {\r\n this._columnConfigs.set({});\r\n return;\r\n }\r\n\r\n const columnConfigs: Record<string, ColumnConfig<any>[]> = JSON.parse(recordColumnConfig);\r\n\r\n this._columnConfigs.set(columnConfigs);\r\n });\r\n\r\n saveColumnConfig(tableId: string, columnConfig: ColumnConfig<any>[]): boolean {\r\n const localStorageKey = this.fullKey();\r\n if (!localStorageKey)\r\n return false;\r\n\r\n this._columnConfigs.update(currentValue => {\r\n const newValue = {\r\n ...currentValue,\r\n [tableId]: columnConfig\r\n };\r\n localStorage.setItem(localStorageKey, JSON.stringify(newValue));\r\n return newValue;\r\n });\r\n\r\n return true;\r\n }\r\n\r\n deleteColumnConfig(tableId: string): boolean {\r\n const localStorageKey = this.fullKey();\r\n if (!localStorageKey)\r\n return false;\r\n\r\n this._columnConfigs.update(currentValue => {\r\n const newValue: Record<string, ColumnConfig<any>[]> = { ...currentValue };\r\n delete newValue[tableId];\r\n localStorage.setItem(localStorageKey, JSON.stringify(newValue));\r\n return newValue;\r\n });\r\n\r\n return true;\r\n }\r\n}\r\n","import { Injectable, Signal } from '@angular/core';\r\nimport { fromEvent, map, startWith } from 'rxjs';\r\nimport { toSignal } from '@angular/core/rxjs-interop';\r\nimport { Pantalla } from '../models/pantalla';\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class DatosPantallaService {\r\n\r\n pantalla: Signal<Pantalla | undefined> = toSignal(\r\n fromEvent(window, 'resize').pipe(\r\n startWith(this.obtenerDatosPantalla()),\r\n map(() => this.obtenerDatosPantalla())\r\n )\r\n );\r\n\r\n private obtenerDatosPantalla(): Pantalla {\r\n let pantalla: Pantalla = {\r\n tipo: 'escritorio',\r\n ancho: window.innerWidth,\r\n alto: window.innerHeight\r\n }\r\n\r\n if (pantalla.ancho < 600) {\r\n pantalla.tipo = 'movil';\r\n return pantalla;\r\n }\r\n\r\n if (pantalla.ancho < 950) {\r\n pantalla.tipo = 'tablet';\r\n return pantalla;\r\n }\r\n\r\n return pantalla;\r\n }\r\n\r\n}\r\n","import { CdkDrag, CdkDragDrop, CdkDropList, moveItemInArray } from '@angular/cdk/drag-drop';\r\nimport { Component, computed, inject, signal } from '@angular/core';\r\nimport { DateRange } from '@angular/material/datepicker';\r\nimport { MatDialogRef, MAT_DIALOG_DATA, MatDialogActions, MatDialogClose, MatDialogContent, MatDialogTitle } from '@angular/material/dialog';\r\nimport moment from 'moment';\r\nimport { ConfigureTableColumnData, ColumnConfig } from '../../../models/configure-table-column-data';\r\nimport { ColumnConfigService } from '../../../services/column-config.service';\r\nimport { LowerCasePipe } from '@angular/common';\r\nimport { MatButtonModule } from '@angular/material/button';\r\nimport { MatIconModule } from '@angular/material/icon';\r\nimport { MatSlideToggleModule } from '@angular/material/slide-toggle';\r\nimport { MatTooltipModule } from '@angular/material/tooltip';\r\n\r\n@Component({\r\n selector: 'lib-configure-table-columns',\r\n imports: [\r\n MatButtonModule,\r\n MatDialogTitle,\r\n MatDialogContent,\r\n MatDialogActions,\r\n MatDialogClose,\r\n LowerCasePipe,\r\n MatIconModule,\r\n MatSlideToggleModule,\r\n CdkDropList,\r\n CdkDrag,\r\n MatTooltipModule\r\n ],\r\n templateUrl: './configure-table-columns.component.html',\r\n styleUrl: './configure-table-columns.component.scss',\r\n})\r\nexport class ConfigureTableColumnsComponent<T> {\r\n columnConfigService = inject(ColumnConfigService);\r\n dialogRef = inject(MatDialogRef<ConfigureTableColumnsComponent<T>>);\r\n data = inject<ConfigureTableColumnData<T>>(MAT_DIALOG_DATA);\r\n columns = signal(this.data.columns);\r\n isConfirmDisabled = computed(() => {\r\n const allDisabled = this.columns().every(column => !column.show);\r\n const someHasFilter = this.columns().some(column => this.hasFilterAndDisabled(column));\r\n return allDisabled || someHasFilter;\r\n });\r\n\r\n startAnimationTimeout?: number = undefined;\r\n endAnimationTimeout?: number = undefined;\r\n animationTime: number = 250;\r\n animationIndex = signal<number | undefined>(undefined);\r\n\r\n hasFilterAndDisabled(column: ColumnConfig<T>): boolean {\r\n const value = this.data.filtersValue[column.key];\r\n if (typeof value === 'string' || Array.isArray(value))\r\n return value.length > 0 && !column.show;\r\n\r\n if (value instanceof DateRange)\r\n return (value.start != null || value.end != null) && !column.show;\r\n\r\n if (moment.isMoment(value))\r\n return !column.show;\r\n\r\n return false;\r\n }\r\n\r\n onUpClick(index: number) {\r\n const cols = [...this.columns()];\r\n if (index > 0) {\r\n [cols[index - 1], cols[index]] = [cols[index], cols[index - 1]];\r\n this.columns.set(cols);\r\n }\r\n }\r\n\r\n onDownClick(index: number) {\r\n const cols = [...this.columns()];\r\n if (index < cols.length - 1) {\r\n [cols[index], cols[index + 1]] = [cols[index + 1], cols[index]];\r\n this.columns.set(cols);\r\n }\r\n }\r\n\r\n onDrop(event: CdkDragDrop<any, any, any>) {\r\n const cols = [...this.columns()];\r\n moveItemInArray(cols, event.previousIndex, event.currentIndex);\r\n this.columns.set(cols);\r\n }\r\n\r\n onToggleChange(columnClicked: ColumnConfig<T>) {\r\n this.columns.update(value => {\r\n return value.map(column => {\r\n if (column.key == columnClicked.key)\r\n return { ...column, show: !column.show };\r\n else\r\n return column;\r\n });\r\n });\r\n }\r\n\r\n onPinClick(columnConfig: ColumnConfig<T>, index: number) {\r\n const columns = [...this.columns()];\r\n const currentSticky = columns.find(c => c.isSticky);\r\n\r\n if (columnConfig.key == currentSticky?.key) {\r\n const newColumns = columns.map(c => {\r\n return {\r\n ...c,\r\n isSticky: false\r\n }\r\n });\r\n this.columns.set(newColumns);\r\n return;\r\n }\r\n\r\n clearTimeout(this.startAnimationTimeout);\r\n clearTimeout(this.endAnimationTimeout);\r\n this.animationIndex.set(undefined);\r\n\r\n this.animationIndex.set(index);\r\n\r\n this.startAnimationTimeout = setTimeout(() => {\r\n moveItemInArray(columns, index, 0);\r\n const newColumns = columns.map(c => {\r\n return {\r\n ...c,\r\n isSticky: c.key == columnConfig.key\r\n }\r\n });\r\n this.columns.set(newColumns);\r\n this.animationIndex.set(0);\r\n this.endAnimationTimeout = setTimeout(() => this.animationIndex.set(undefined), this.animationTime)\r\n }, this.animationTime);\r\n }\r\n\r\n onConfirmClick() {\r\n this.columnConfigService.saveColumnConfig(this.data.tableId, this.columns());\r\n this.dialogRef.close();\r\n }\r\n\r\n onResetClick() {\r\n this.columnConfigService.deleteColumnConfig(this.data.tableId);\r\n this.dialogRef.close();\r\n }\r\n}\r\n","<h2 mat-dialog-title>Ordenar y visualizar columnas de la tabla {{data.tableName| lowercase}}</h2>\r\n<mat-dialog-content>\r\n\r\n <div class=\"columnsList\" cdkDropList (cdkDropListDropped)=\"onDrop($event)\">\r\n @for (column of columns(); track $index; let first = $first; let last = $last;) {\r\n <div \r\n class=\"columnContainer\" \r\n cdkDrag \r\n [class.pinned]=\"$index == animationIndex()\"\r\n [style]=\"{ transition: `background-color ${animationTime}ms ease` }\">\r\n\r\n <div class=\"labelContainer\">\r\n <mat-icon>drag_indicator</mat-icon>\r\n <p class=\"label\">\r\n {{data.columnsLabels[column.key] ?? ''}}\r\n @if(hasFilterAndDisabled(column)) {\r\n <span> (hay filtros aplicados)</span>\r\n }\r\n </p>\r\n </div>\r\n\r\n <div class=\"actions\">\r\n <button \r\n matIconButton\r\n [matTooltip]=\"column.isSticky ? 'Desanclar' : 'Anclar columna'\"\r\n (click)=\"onPinClick(column, $index)\">\r\n <mat-icon>{{column.isSticky ? 'keep_off' : 'keep'}}</mat-icon>\r\n </button>\r\n\r\n <button matTooltip=\"Subir\" matIconButton [disabled]=\"$first\" (click)=\"onUpClick($index)\"><mat-icon>keyboard_arrow_up</mat-icon></button>\r\n <button matTooltip=\"Bajar\" matIconButton [disabled]=\"$last\" (click)=\"onDownClick($index)\"><mat-icon>keyboard_arrow_down</mat-icon></button>\r\n <mat-slide-toggle [checked]=\"column.show\" (toggleChange)=\"onToggleChange(column)\"></mat-slide-toggle>\r\n </div>\r\n </div>\r\n }\r\n </div>\r\n\r\n <p class=\"note\"><span>Nota:</span> Para ocultar una columna, primero debes quitar los filtros que tenga aplicados</p>\r\n \r\n</mat-dialog-content>\r\n<mat-dialog-actions>\r\n <button matButton [mat-dialog-close]=\"undefined\">Cerrar</button>\r\n <button matButton (click)=\"onResetClick()\">Reestablecer orden y visualización</button>\r\n <button matButton [disabled]=\"isConfirmDisabled()\" (click)=\"onConfirmClick()\">Confirmar</button>\r\n</mat-dialog-actions>","import { Component, computed, input, output } from '@angular/core';\r\nimport { FormGroup, FormControl, ReactiveFormsModule } from '@angular/forms';\r\nimport { MatSelectChange, MatSelectModule } from '@angular/material/select';\r\nimport { PaginatedTableConfig, OPERATOR_BY_FILTER_TYPE, FILTER_OPERATOR_LABEL, FilterOperator, FilterType, PaginatedTableColumn } from '../../../models';\r\nimport { MatButtonModule } from '@angular/material/button';\r\nimport { MatDatepickerModule } from '@angular/material/datepicker';\r\nimport { MatFormFieldModule } from '@angular/material/form-field';\r\nimport { MatIconModule } from '@angular/material/icon';\r\nimport { MatInputModule } from '@angular/material/input';\r\nimport { MatTooltipModule } from '@angular/material/tooltip';\r\n\r\n@Component({\r\n selector: 'lib-advanced-filter-rule',\r\n imports: [\r\n MatButtonModule,\r\n MatIconModule,\r\n ReactiveFormsModule,\r\n MatFormFieldModule,\r\n MatInputModule,\r\n MatSelectModule,\r\n MatDatepickerModule,\r\n MatTooltipModule\r\n ],\r\n templateUrl: './advanced-filter-rule.component.html',\r\n styleUrl: './advanced-filter-rule.component.scss',\r\n})\r\nexport class AdvancedFilterRuleComponent<T> {\r\n rule = input.required<FormGroup>();\r\n config = input.required<PaginatedTableConfig<T>>();\r\n deleteFilter = output<string>();\r\n\r\n columns = computed(() => this.config().columns.filter(column => column.filterType != undefined));\r\n operatorByFilterType = OPERATOR_BY_FILTER_TYPE;\r\n filterOperatorLabel = FILTER_OPERATOR_LABEL;\r\n\r\n getRuleId(): string {\r\n return (this.rule().get('id')! as FormControl).value;\r\n }\r\n\r\n getKey(): FormControl {\r\n return this.rule().get('key')! as FormControl\r\n }\r\n\r\n getOperator(): FormControl {\r\n return this.rule().get('operator')! as FormControl\r\n }\r\n\r\n getValue(): FormControl {\r\n return this.rule().get('value')! as FormControl\r\n }\r\n\r\n getColumnSelected(value: keyof T): PaginatedTableColumn<T> | undefined {\r\n return this.columns().find(column => column.key == value);\r\n }\r\n\r\n getOperatorsOption(value: keyof T): FilterOperator[] {\r\n const columnSelected = this.getColumnSelected(value);\r\n\r\n if (!columnSelected || !columnSelected.filterType)\r\n return [];\r\n\r\n return this.operatorByFilterType[columnSelected.filterType];\r\n }\r\n\r\n getFilterType(value: keyof T): FilterType | undefined {\r\n const columnSelected = this.getColumnSelected(value);\r\n return columnSelected?.filterType;\r\n }\r\n\r\n onKeyChange(event: MatSelectChange<any>) {\r\n this.getOperator().setValue(null);\r\n this.getValue().setValue(null);\r\n }\r\n}\r\n","<button \r\n matIconButton \r\n matTooltip=\"Eliminar filtro\" \r\n (click)=\"deleteFilter.emit(getRuleId())\"\r\n class=\"deleteButton\"\r\n type=\"button\">\r\n <mat-icon>delete</mat-icon>\r\n</button>\r\n\r\n<mat-form-field>\r\n <mat-label>Campo</mat-label>\r\n <mat-select \r\n [formControl]=\"getKey()\" \r\n placeholder=\"Selecciona una opción\" \r\n #keySelect\r\n (selectionChange)=\"onKeyChange($event)\">\r\n <mat-option>-- Quitar campo --</mat-option>\r\n @for (column of columns(); track $index;) {\r\n <mat-option [value]=\"column.key\">{{column.label}}</mat-option>\r\n }\r\n </mat-select>\r\n <mat-error>Obligatorio</mat-error>\r\n</mat-form-field>\r\n\r\n<mat-form-field>\r\n <mat-label>Condición</mat-label>\r\n <mat-select [formControl]=\"getOperator()\" placeholder=\"Selecciona una opción\">\r\n <mat-option>-- Quitar condición --</mat-option>\r\n @for (operator of getOperatorsOption(keySelect.value); track $index;) {\r\n <mat-option [value]=\"operator\">{{filterOperatorLabel[operator]}}</mat-option>\r\n }\r\n </mat-select>\r\n <mat-error>Obligatorio</mat-error>\r\n</mat-form-field>\r\n\r\n@if (getFilterType(keySelect.value) == 'text' || getFilterType(keySelect.value) == 'number') {\r\n <mat-form-field>\r\n <mat-label>Valor</mat-label>\r\n <input [formControl]=\"getValue()\" [type]=\"getFilterType(keySelect.value) ?? 'text'\" matInput>\r\n <mat-error>Obligatorio</mat-error>\r\n </mat-form-field>\r\n}\r\n\r\n@if (getFilterType(keySelect.value) == 'option' || getFilterType(keySelect.value) == 'option-multiple') {\r\n <mat-form-field>\r\n <mat-label>Valor</mat-label>\r\n <mat-select [formControl]=\"getValue()\">\r\n <mat-option>-- Quitar valor --</mat-option>\r\n @for (option of getColumnSelected(keySelect.value)?.filterOptions ?? []; track $index;) {\r\n <mat-option [value]=\"option.value\">{{option.label}}</mat-option>\r\n }\r\n </mat-select>\r\n <mat-error>Obligatorio</mat-error>\r\n </mat-form-field>\r\n}\r\n\r\n@if(getFilterType(keySelect.value) == 'date' || getFilterType(keySelect.value) == 'date-range') {\r\n <mat-form-field>\r\n <mat-label>Valor</mat-label>\r\n <input\r\n [formControl]=\"getValue()\"\r\n matInput \r\n [matDatepicker]=\"picker\">\r\n <mat-datepicker-toggle matIconSuffix [for]=\"picker\"></mat-datepicker-toggle>\r\n <mat-datepicker #picker></mat-datepicker>\r\n <mat-error>Obligatorio</mat-error>\r\n </mat-form-field>\r\n}\r\n\r\n\r\n","import { Component, computed, inject, input, output } from '@angular/core';\r\nimport { ReactiveFormsModule, FormGroup, AbstractControl, FormControl, FormArray } from '@angular/forms';\r\nimport { MatButtonModule } from '@angular/material/button';\r\nimport { MatButtonToggleModule } from '@angular/material/button-toggle';\r\nimport { MatDatepickerModule } from '@angular/material/datepicker';\r\nimport { MatFormFieldModule } from '@angular/material/form-field';\r\nimport { MatIconModule } from '@angular/material/icon';\r\nimport { MatInputModule } from '@angular/material/input';\r\nimport { MatSelectModule } from '@angular/material/select';\r\nimport { MatTooltipModule } from '@angular/material/tooltip';\r\nimport { PaginatedTableConfig, OPTIONS_FILTER_CONNECTOR } from '../../../models';\r\nimport { AdvancedFilterUtils } from '../../../models/advanced-filter-utils';\r\nimport { DatosPantallaService } from '../../../services/datos-pantalla.service';\r\nimport { AdvancedFilterRuleComponent } from '../advanced-filter-rule/advanced-filter-rule.component';\r\n\r\n@Component({\r\n selector: 'lib-advanced-filter-group',\r\n imports: [\r\n MatButtonModule,\r\n MatIconModule,\r\n ReactiveFormsModule,\r\n MatFormFieldModule,\r\n MatInputModule,\r\n MatSelectModule,\r\n MatDatepickerModule,\r\n AdvancedFilterRuleComponent,\r\n MatButtonToggleModule,\r\n MatTooltipModule\r\n ],\r\n templateUrl: './advanced-filter-group.component.html',\r\n styleUrl: './advanced-filter-group.component.scss',\r\n})\r\nexport class AdvancedFilterGroupComponent<T> {\r\n isRootNode = input.required<boolean>();\r\n group = input.required<FormGroup>();\r\n config = input.required<PaginatedTableConfig<T>>();\r\n addGroup = output<string>();\r\n addFilter = output<string>();\r\n deleteGroup = output<string>();\r\n deleteFilter = output<string>();\r\n\r\n optionsFilterConnector = OPTIONS_FILTER_CONNECTOR;\r\n\r\n private readonly datosPantallaService = inject(DatosPantallaService);\r\n isDesktop = computed<boolean>(() => this.datosPantallaService.pantalla()?.tipo == 'escritorio');\r\n\r\n isFilterGroupForm(group: AbstractControl): boolean {\r\n return AdvancedFilterUtils.isFilterGroupForm(group);\r\n }\r\n\r\n getConnector(): FormControl {\r\n return this.group().get('connector')! as FormControl\r\n }\r\n\r\n getGroupId(): string {\r\n return (this.group().get('id')! as FormControl).value;\r\n }\r\n\r\n getFilters(): FormGroup[] {\r\n return (this.group().get('filters') as FormArray).controls as FormGroup[];\r\n }\r\n}\r\n","<div class=\"grupo\" [formGroup]=\"group()\">\r\n \r\n <mat-button-toggle-group [formControl]=\"getConnector()\">\r\n @for (option of optionsFilterConnector; track $index) {\r\n <mat-button-toggle [value]=\"option.value\">{{option.label}}</mat-button-toggle>\r\n }\r\n </mat-button-toggle-group>\r\n\r\n @if (isDesktop()) {\r\n <button \r\n matButton=\"outlined\" \r\n (click)=\"addFilter.emit(getGroupId())\"\r\n class=\"addFilterButton\"\r\n type=\"button\">\r\n <mat-icon>add</mat-icon>\r\n Añadir filtro\r\n </button>\r\n\r\n <button \r\n matButton=\"outlined\"\r\n (click)=\"addGroup.emit(getGroupId())\"\r\n class=\"addGroupButton\"\r\n type=\"button\">\r\n <mat-icon>data_array</mat-icon>\r\n Añadir grupo\r\n </button>\r\n } @else {\r\n <button \r\n matIconButton \r\n matTooltip=\"Añadir filtro\" \r\n (click)=\"addFilter.emit(getGroupId())\"\r\n class=\"addFilterButton\"\r\n type=\"button\">\r\n <mat-icon>add</mat-icon>\r\n </button>\r\n\r\n <button \r\n matIconButton \r\n matTooltip=\"Añadir grupo\" \r\n (click)=\"addGroup.emit(getGroupId())\"\r\n class=\"addGroupButton\"\r\n type=\"button\">\r\n <mat-icon>data_array</mat-icon>\r\n </button>\r\n }\r\n \r\n\r\n @if(!isRootNode()) {\r\n <button \r\n matIconButton \r\n matTooltip=\"Eliminar grupo\" \r\n (click)=\"deleteGroup.emit(getGroupId())\"\r\n class=\"deleteGroupButton\"\r\n type=\"button\">\r\n <mat-icon>delete</mat-icon>\r\n </button>\r\n }\r\n\r\n @for (group of getFilters(); track $index) {\r\n @if(isFilterGroupForm(group)) {\r\n <lib-advanced-filter-group \r\n [group]=\"group\"\r\n [config]=\"config()\"\r\n [isRootNode]=\"false\"\r\n (addGroup)=\"addGroup.emit($event)\"\r\n (addFilter)=\"addFilter.emit($event)\"\r\n (deleteGroup)=\"deleteGroup.emit($event)\"\r\n (deleteFilter)=\"deleteFilter.emit($event)\"\r\n />\r\n } @else {\r\n <lib-advanced-filter-rule \r\n [rule]=\"group\"\r\n [config]=\"config()\"\r\n (deleteFilter)=\"deleteFilter.emit($event)\"\r\n />\r\n }\r\n }\r\n\r\n</div>","import { Component, effect, inject, signal } from '@angular/core';\r\nimport { toSignal } from '@angular/core/rxjs-interop';\r\nimport { FormBuilder, FormGroup, FormArray, ReactiveFormsModule } from '@angular/forms';\r\nimport { MatDialogRef, MAT_DIALOG_DATA, MatDialogActions, MatDialogClose, MatDialogContent, MatDialogTitle } from '@angular/material/dialog';\r\nimport { FilterGroup, FilterRule } from '../../../models';\r\nimport { AdvancedFilterUtils } from '../../../models/advanced-filter-utils';\r\nimport { ConfigureAdvancedFilterData } from '../../../models/configure-advanced-filter-data';\r\nimport { AdvancedFilterService } from '../../../services/advanced-filter.service';\r\nimport { v4 as uuidv4 } from 'uuid';\r\nimport { LowerCasePipe } from '@angular/common';\r\nimport { MatButtonModule } from '@angular/material/button';\r\nimport { MatFormFieldModule } from '@angular/material/form-field';\r\nimport { MatIconModule } from '@angular/material/icon';\r\nimport { MatInputModule } from '@angular/material/input';\r\nimport { SendType } from '../../../models/send-type';\r\nimport { AdvancedFilterGroupComponent } from '../advanced-filter-group/advanced-filter-group.component';\r\n\r\n@Component({\r\n selector: 'lib-configure-advanced-filter',\r\n imports: [\r\n MatDialogTitle,\r\n MatDialogContent,\r\n MatDialogActions,\r\n MatDialogClose,\r\n LowerCasePipe,\r\n MatButtonModule,\r\n MatIconModule,\r\n ReactiveFormsModule,\r\n MatFormFieldModule,\r\n MatInputModule,\r\n AdvancedFilterGroupComponent\r\n ],\r\n templateUrl: './configure-advanced-filter.component.html',\r\n styleUrl: './configure-advanced-filter.component.scss',\r\n})\r\nexport class ConfigureAdvancedFilterComponent<T> { \r\n private readonly fb = inject(FormBuilder);\r\n private readonly advancedFilterService = inject(AdvancedFilterService);\r\n dialogRef = inject(MatDialogRef<ConfigureAdvancedFilterComponent<T>>);\r\n data = inject<ConfigureAdvancedFilterData<T>>(MAT_DIALOG_DATA);\r\n\r\n query = signal('');\r\n\r\n form = AdvancedFilterUtils.createAdvancedFilter<T>(this.fb, this.data.advancedFilter);\r\n formChanges = toSignal(this.form.valueChanges);\r\n\r\n mapFormToAdvancedFilterEffect = effect(() => {\r\n const values = this.formChanges();\r\n\r\n if (this.form.invalid) {\r\n this.query.set('');\r\n return;\r\n }\r\n\r\n const advancedFilter = AdvancedFilterUtils.mapFormToAdvancedFilter<T>(this.form);\r\n const queryString = AdvancedFilterUtils.groupsToReadableHtml(advancedFilter.groups, this.data.config.columns);\r\n this.query.set(queryString);\r\n });\r\n\r\n getRootGroup(): FormGroup {\r\n return (this.form.get('groups') as FormArray).controls[0] as FormGroup;\r\n }\r\n\r\n addGroup(groupId: string) {\r\n const newGroup: FilterGroup<T> = {\r\n id: uuidv4(),\r\n connector: 'AND',\r\n filters: [\r\n { id: uuidv4() }\r\n ]\r\n };\r\n AdvancedFilterUtils.addGroupToGroup<T>(this.fb, this.form, groupId, newGroup);\r\n }\r\n\r\n addFilter(groupId: string) {\r\n const newRule: FilterRule<T> = { id: uuidv4() };\r\n AdvancedFilterUtils.addRuleToGroup<T>(this.fb, this.form, groupId, newRule);\r\n }\r\n\r\n deleteGroup(groupId: string) {\r\n AdvancedFilterUtils.deleteGroup<T>(this.form, groupId);\r\n }\r\n\r\n deleteFilter(ruleId: string) {\r\n AdvancedFilterUtils.deleteRule<T>(this.form, ruleId);\r\n }\r\n\r\n onSubmit(sendType: SendType) {\r\n const advancedFilter = AdvancedFilterUtils.mapFormToAdvancedFilter<T>(this.form);\r\n const tableId = this.data.config.tableId;\r\n this.advancedFilterService.saveAdvancedFilter(tableId, advancedFilter);\r\n switch (sendType) {\r\n case 'save':\r\n this.dialogRef.close();\r\n break;\r\n case 'save_and_apply':\r\n this.dialogRef.close(advancedFilter);\r\n break;\r\n }\r\n }\r\n}\r\n","<form [formGroup]=\"form\" (ngSubmit)=\"onSubmit('save_and_apply')\">\r\n\r\n <h2 mat-dialog-title>Filtros avanzados para la tabla {{data.config.title() | lowercase}}</h2>\r\n <mat-dialog-content>\r\n\r\n <p class=\"advancedFilterResult\" [innerHTML]=\"query()\" [style.visibility]=\"query() ? 'visible': 'hidden'\"></p>\r\n\r\n <mat-form-field>\r\n <mat-label>Nombre de la plantilla</mat-label>\r\n <input matInput formControlName=\"name\" [maxlength]=\"16\">\r\n <mat-hint>{{form.get('name')?.value.length ?? 0}}/16</mat-hint>\r\n <mat-error>El nombre es obligatorio</mat-error>\r\n </mat-form-field>\r\n\r\n <lib-advanced-filter-group \r\n [group]=\"getRootGroup()\"\r\n [config]=\"data.config\"\r\n [isRootNode]=\"true\"\r\n (addGroup)=\"addGroup($event)\"\r\n (addFilter)=\"addFilter($event)\"\r\n (deleteGroup)=\"deleteGroup($event)\"\r\n (deleteFilter)=\"deleteFilter($event)\"\r\n />\r\n\r\n <div class=\"helperContainer\">\r\n <p class=\"helperTitle\"><strong>Uso de filtros avanzados</strong></p>\r\n <p class=\"helper\">\r\n <strong>Grupo: </strong>Un conjunto de filtros que se evalúan juntos. Todos los filtros dentro de un grupo usan el mismo conector (“Y” u “O”). Cada rectangula representa un grupo y dentro de ellos puede haber filtros u otros grupos<br>\r\n <strong>Filtro: </strong>Una regla individual que compara un campo con un valor (por ejemplo: “Precio > 100”)\r\n </p>\r\n </div>\r\n \r\n </mat-dialog-content>\r\n <mat-dialog-actions>\r\n <button matButton [mat-dialog-close]=\"undefined\">Cerrar</button>\r\n <button matButton [disabled]=\"form.invalid\" type=\"button\" (click)=\"onSubmit('save')\">Guardar</button>\r\n <button matButton [disabled]=\"form.invalid\" type=\"button\" (click)=\"onSubmit('save_and_apply')\">Guardar y aplicar</button>\r\n </mat-dialog-actions>\r\n\r\n\r\n</form>","import { CommonModule } from '@angular/common';\r\nimport { Component, computed, HostListener, inject, input, OnDestroy, output, Signal, signal, TemplateRef, viewChild, ViewContainerRef, WritableSignal } from '@angular/core';\r\nimport { MatButtonModule } from '@angular/material/button';\r\nimport { MatCheckboxModule } from '@angular/material/checkbox';\r\nimport { DateRange, MatDatepickerModule } from '@angular/material/datepicker';\r\nimport { MatDividerModule } from '@angular/material/divider';\r\nimport { MatFormFieldModule } from '@angular/material/form-field';\r\nimport { MatIconModule } from '@angular/material/icon';\r\nimport { MatInputModule } from '@angular/material/input';\r\nimport { MatMenuModule, MatMenuTrigger } from '@angular/material/menu';\r\nimport { MatPaginatorModule, PageEvent } from '@angular/material/paginator';\r\nimport { MatProgressBarModule } from '@angular/material/progress-bar';\r\nimport { MatSelectChange, MatSelectModule } from '@angular/material/select';\r\nimport { MatSortModule, Sort } from '@angular/material/sort';\r\nimport { MatTableModule } from '@angular/material/table';\r\nimport { MatTooltipModule } from '@angular/material/tooltip';\r\nimport { DynamicCellHostDirective } from '../../directives/dynamic-cell-host.directive';\r\nimport { OnlyUpperFirstCharacterPipe } from '../../pipes/only-upper-first-character.pipe';\r\nimport { Observable } from 'rxjs';\r\nimport { ColumnPipe, PaginatedTableColumn, PaginatedTableConfig, RowSelectionAction, TableRowAction } from '../../models/paginated-table-config';\r\nimport moment from 'moment';\r\nimport { Overlay, OverlayContainer, OverlayRef } from '@angular/cdk/overlay';\r\nimport { TemplatePortal } from '@angular/cdk/portal';\r\nimport { rxResource } from '@angular/core/rxjs-interop';\r\nimport { MatDialog } from '@angular/material/dialog';\r\nimport jsPDF from 'jspdf';\r\nimport autoTable from 'jspdf-autotable';\r\nimport { utils, writeFileXLSX } from 'xlsx';\r\nimport { AdvancedFilter, PaginatedFilter, PaginatedItems } from '../../models';\r\nimport { AdvancedFilterUtils } from '../../models/advanced-filter-utils';\r\nimport { ColumnValue } from '../../models/column-value';\r\nimport { ColumnConfig, ConfigureTableColumnData } from '../../models/configure-table-column-data';\r\nimport { AdvancedFilterService } from '../../services/advanced-filter.service';\r\nimport { ColumnConfigService } from '../../services/column-config.service';\r\nimport { DatosPantallaService } from '../../services/datos-pantalla.service';\r\nimport { RowActionClickEvent } from '../../models/row-action-click-event';\r\nimport { SelectionActionEvent } from '../../models/selection-action-event';\r\nimport { v4 as uuidv4 } from 'uuid';\r\nimport { ConfirmDialogData } from '../../models/confirm-dialog-data';\r\nimport { NgxConfirmDialogComponent } from '../ngx-confirm-dialog/ngx-confirm-dialog.component';\r\nimport { ConfigureTableColumnsComponent } from '../../common/components/configure-table-columns/configure-table-columns.component';\r\nimport { ConfigureAdvancedFilterData } from '../../models/configure-advanced-filter-data';\r\nimport { ConfigureAdvancedFilterComponent } from '../../common/components/configure-advanced-filter/configure-advanced-filter.component';\r\n\r\n@Component({\r\n selector: 'ngx-paginated-table',\r\n imports: [\r\n MatTableModule,\r\n MatSortModule,\r\n MatPaginatorModule,\r\n MatIconModule,\r\n MatButtonModule,\r\n MatProgressBarModule,\r\n MatTooltipModule,\r\n MatFormFieldModule,\r\n MatInputModule,\r\n MatSelectModule,\r\n MatDatepickerModule,\r\n CommonModule,\r\n DynamicCellHostDirective,\r\n MatMenuModule,\r\n MatDividerModule,\r\n OnlyUpperFirstCharacterPipe,\r\n MatCheckboxModule\r\n ],\r\n templateUrl: './ngx-paginated-table.component.html',\r\n styleUrl: './ngx-paginated-table.component.scss',\r\n host: { class: 'contenedorDefecto' }\r\n})\r\nexport class NgxPaginatedTable<T, U extends PaginatedFilter<T>> implements OnDestroy {\r\n \r\n private readonly columnConfigService = inject(ColumnConfigService);\r\n private readonly advancedFilterService = inject(AdvancedFilterService);\r\n private readonly dialog = inject(MatDialog);\r\n private readonly datosPantallaService = inject(DatosPantallaService);\r\n protected isDesktop = computed<boolean>(() => this.datosPantallaService.pantalla()?.tipo == 'escritorio');\r\n\r\n endpoint = input.required<(filters: U) => Observable<PaginatedItems<T>>>();\r\n filters = input<WritableSignal<U>>(\r\n signal<U>(\r\n {\r\n pageNumber: 1,\r\n pageSize: 10,\r\n query: undefined,\r\n sortBy: undefined,\r\n columnsFiltersValue: undefined,\r\n advancedFilterId: undefined\r\n } as U\r\n )\r\n );\r\n\r\n config = input.required<WritableSignal<PaginatedTableConfig<T>>>();\r\n\r\n protected createClick = output<void>();\r\n protected updateClick = output<T>();\r\n protected deleteClick = output<T>();\r\n protected rowActionClick = output<RowActionClickEvent<T>>();\r\n protected expandedItemChange = output<T | null>();\r\n protected selectionActionEvent = output<SelectionActionEvent<T>>();\r\n\r\n\r\n protected readonly filterKeyPrefix = 'filter';\r\n protected readonly nameOfActionsColumn = 'actionsPerRow';\r\n protected readonly generalFooterKeyPrefix = 'footer';\r\n protected readonly nameOfRowSelectionColumn = 'rowSelectionColumn';\r\n protected readonly debounceTime = 300;\r\n dataResource = rxResource<PaginatedItems<T>, U>({\r\n params: () => this.filters()(),\r\n stream: ({ params }) => {\r\n const endpointPaginated = this.endpoint();\r\n return endpointPaginated(params);\r\n },\r\n defaultValue: { total: 0, items: [] }\r\n });\r\n protected data = computed(() => {\r\n if (this.dataResource.error())\r\n return [];\r\n\r\n const value = this.dataResource.value();\r\n return value.items;\r\n });\r\n protected total = computed(() => {\r\n if (this.dataResource.error())\r\n return 0;\r\n\r\n const value = this.dataResource.value();\r\n return value.total\r\n });\r\n\r\n protected columnConfig = computed(() => {\r\n const columnConfigs = this.columnConfigService.columnConfigs();\r\n const configValue = this.config()();\r\n const columnConfig: ColumnConfig<T>[] | undefined = columnConfigs[configValue.tableId];\r\n const defaultColumnConfig: ColumnConfig<T>[] = configValue.columns.map(column => {\r\n return {\r\n key: column.key,\r\n show: true,\r\n isSticky: configValue.defaultStickyColumn == column.key\r\n }\r\n });\r\n\r\n if (!columnConfig)\r\n return defaultColumnConfig;\r\n\r\n //Por si acaso se quitan columnas a posteriori, hay que filtrarlas para que no aparezcan\r\n const filteredColumns = columnConfig.filter(column => this.includeInColumnConfig(column, defaultColumnConfig));\r\n\r\n //Por si a posteriori se añaden nuevas columnas\r\n const columnsAdded = defaultColumnConfig.filter(defaultColumn => !this.includeInColumnConfig(defaultColumn, columnConfig));\r\n\r\n return [...filteredColumns, ...columnsAdded];\r\n });\r\n\r\n protected stickyColumnKey = computed(() => this.columnConfig().find(c => c.isSticky)?.key);\r\n\r\n protected keys = computed(() => {\r\n const configValue = this.config()();\r\n const columnConfig = this.columnConfig();\r\n\r\n let keys: (string | keyof T)[] = [...columnConfig]\r\n .filter(column => column.show)\r\n .map(column => column.key);\r\n\r\n if ((configValue.update && !configValue.clickOnRowForUpdate)\r\n || configValue.delete\r\n || (configValue.rowActions && configValue.rowActions.length > 0)\r\n || configValue.expandableDetail\r\n ) {\r\n keys = [...keys, this.nameOfActionsColumn];\r\n }\r\n\r\n if (configValue.enableRowSelection)\r\n keys = [this.nameOfRowSelectionColumn, ...keys];\r\n\r\n return keys;\r\n });\r\n protected keysWithFilter = computed(() => this.keys().map(key => `${this.filterKeyPrefix}${this.getKeyAsString(key)}`));\r\n protected keysWithGeneralFooter = computed(() => this.keys().map(key => `${this.generalFooterKeyPrefix}${this.getKeyAsString(key)}`));\r\n protected showFiltersRow = computed(() => {\r\n const configValue = this.config()();\r\n return [...configValue.columns].some(column => column.filterType) && !configValue.showAdvancedFilters;\r\n });\r\n protected showActionsColumn = computed(() => this.keys().includes(this.nameOfActionsColumn));\r\n protected showTotalPerPageFooter = computed(() => {\r\n const columns = this.config()().columns;\r\n const keys = this.keys();\r\n return keys.some(key => columns.find(column => key == column.key)?.showTotalPerPage);\r\n });\r\n protected showTotalGeneralFooter = computed(() => {\r\n const columns = this.config()().columns;\r\n const keys = this.keys();\r\n return keys.some(key => columns.find(column => key == column.key)?.showTotalGeneral);\r\n });\r\n\r\n protected queryTimeout: number | undefined = undefined;\r\n\r\n protected timeoutsByKey: Partial<Record<keyof T, number>> = {}\r\n\r\n protected advancedFilters: Signal<AdvancedFilter<T>[]> = computed(() => {\r\n const allTablesAdvancedFilters = this.advancedFilterService.advancedFilters();\r\n const tableId = this.config()().tableId;\r\n return allTablesAdvancedFilters[tableId];\r\n });\r\n\r\n protected readonly expandableColumnDef = 'expandedDetail';\r\n protected expandedItem = signal<T | null>(null);\r\n\r\n protected selection = signal<T[]>([]);\r\n\r\n protected isFullScreen = signal(false);\r\n private readonly overlay = inject(Overlay);\r\n private readonly overlayContainer = inject(OverlayContainer);\r\n private readonly viewContainerRef = inject(ViewContainerRef);\r\n tableContentTemplate = viewChild<TemplateRef<any>>('tableContent');\r\n private overlayRef?: OverlayRef;\r\n private portal?: TemplatePortal;\r\n\r\n @HostListener('document:keydown.escape')\r\n onEscape() {\r\n if (this.overlayRef && this.isMyOverlayOnTop())\r\n this.exitFullscreen();\r\n }\r\n\r\n ngOnDestroy(): void {\r\n //Limpiamos timeout de filtro query\r\n if (this.queryTimeout !== undefined)\r\n clearTimeout(this.queryTimeout);\r\n\r\n //Limpiamos todos los timeouts de filtros tipo texto de columnas\r\n Object.keys(this.timeoutsByKey).forEach((key) => {\r\n const timeout = this.timeoutsByKey[key as keyof T]\r\n clearTimeout(timeout);\r\n });\r\n }\r\n\r\n private includeInColumnConfig(searchedColumn: ColumnConfig<T>, allColumns: ColumnConfig<T>[]): boolean {\r\n return allColumns.some(column => searchedColumn.key == column.key);\r\n }\r\n\r\n protected getKeyAsString = (columnKey: keyof T | string): string => columnKey as string\r\n\r\n protected onPageChange(event: PageEvent) {\r\n this.filters().update(value => {\r\n return {\r\n ...value,\r\n pageNumber: value.pageSize == event.pageSize ? event.pageIndex + 1 : 1,\r\n pageSize: event.pageSize\r\n };\r\n });\r\n }\r\n\r\n protected onQueryChange(inputElement: HTMLInputElement) {\r\n const query = inputElement.value;\r\n\r\n if (this.queryTimeout !== undefined)\r\n clearTimeout(this.queryTimeout);\r\n\r\n this.queryTimeout = setTimeout(() => {\r\n this.filters().update((value: U) => {\r\n return { ...value, query: query, pageNumber: 1 };\r\n });\r\n }, this.debounceTime)\r\n }\r\n\r\n protected onQueryReset(inputElement: HTMLInputElement) {\r\n inputElement.value = '';\r\n this.onQueryChange(inputElement);\r\n }\r\n\r\n protected onSortChange(sort: Sort) {\r\n this.filters().update(value => {\r\n return {\r\n ...value,\r\n pageNumber: 1,\r\n sortBy: sort.direction ? { key: sort.active, direction: sort.direction } : undefined\r\n };\r\n });\r\n }\r\n\r\n protected onNewClick() {\r\n this.createClick.emit();\r\n }\r\n\r\n protected onUpdateClick(row: T, event: Event) {\r\n this.updateClick.emit(row);\r\n event.stopPropagation();\r\n }\r\n\r\n protected onRowClick(row: T) {\r\n if (this.isRowEnabled(row))\r\n this.updateClick.emit(row);\r\n }\r\n\r\n protected isRowEnabled(row: T): boolean | undefined {\r\n return this.config()().update\r\n && this.config()().clickOnRowForUpdate\r\n && (!this.config()().update?.show || this.config()().update?.show?.(row))\r\n && !this.config()().update?.disabled?.(row);\r\n }\r\n\r\n protected onDeleteClick(row: T, event: Event) {\r\n event.stopPropagation();\r\n\r\n const title = this.config()().deleteConfirm?.title?.(row) ?? 'Eliminar';\r\n const body = this.config()().deleteConfirm?.body?.(row) ?? 'Vas a eliminar el registro seleccionado. ¿Estas seguro?';\r\n const template = this.config()().deleteConfirm?.templateRef?.();\r\n const data: ConfirmDialogData = {\r\n title: title,\r\n body: !template ? body : undefined,\r\n template: template,\r\n row: row,\r\n confirmButtonLabel: 'Eliminar'\r\n };\r\n const dialogRef = this.dialog.open(NgxConfirmDialogComponent, { data: data });\r\n dialogRef.afterClosed().subscribe((confirm: boolean) => {\r\n if (confirm)\r\n this.deleteClick.emit(row);\r\n });\r\n }\r\n\r\n protected onRowActionClick(row: T, rowAction: TableRowAction<T>, event: Event) {\r\n this.rowActionClick.emit({ id: rowAction.id, row: row })\r\n event.stopPropagation();\r\n }\r\n\r\n protected onTextFilterColumnChange(column: PaginatedTableColumn<T>, event: Event) {\r\n const query = (event.target as HTMLInputElement).value;\r\n\r\n //Si existe, limpio el anterior\r\n if (column.key in this.timeoutsByKey)\r\n clearTimeout(this.timeoutsByKey[column.key]);\r\n\r\n this.timeoutsByKey[column.key] = setTimeout(() => {\r\n this.onColumnFilterChange(column.key, query);\r\n }, this.debounceTime);\r\n }\r\n\r\n protected onOptionFilterColumnChange(column: PaginatedTableColumn<T>, event: MatSelectChange<string | string[]>) {\r\n this.onColumnFilterChange(column.key, event.value);\r\n }\r\n\r\n protected onDateFilterChange(column: PaginatedTableColumn<T>, value: moment.Moment | null) {\r\n this.onColumnFilterChange(column.key, value);\r\n }\r\n\r\n protected onDateRangeFilterChange(column: PaginatedTableColumn<T>, value: DateRange<moment.Moment | null> | null) {\r\n this.onColumnFilterChange(column.key, value);\r\n }\r\n\r\n private onColumnFilterChange(columnKey: keyof T, value: ColumnValue) {\r\n this.filters().update(currentValue => {\r\n const columnsFiltersValue: Partial<Record<keyof T, ColumnValue>> = currentValue.columnsFiltersValue ?? {};\r\n columnsFiltersValue[columnKey] = value;\r\n return {\r\n ...currentValue,\r\n pageNumber: 1,\r\n columnsFiltersValue: columnsFiltersValue\r\n }\r\n });\r\n }\r\n\r\n protected getValueOfColumnFilter(key: keyof T): ColumnValue {\r\n return this.filters()().columnsFiltersValue?.[key];\r\n }\r\n\r\n protected getDateRangeValueOfColumnFilter(key: keyof T, type: 'start' | 'end'): moment.Moment | null {\r\n const value = this.getValueOfColumnFilter(key) as DateRange<moment.Moment | null>;\r\n\r\n if (!value)\r\n return null;\r\n\r\n return type == 'start' ? value.start : value.end\r\n }\r\n\r\n protected onEditColumns() {\r\n const config = this.config()();\r\n const filters = this.filters()();\r\n const columnConfig = this.columnConfig();\r\n\r\n const columnsLabel = Object.fromEntries(\r\n config.columns.map(column => [column.key, column.label])\r\n ) as Record<keyof T, string>;\r\n\r\n const data: ConfigureTableColumnData<T> = {\r\n tableId: config.tableId,\r\n tableName: config.title(),\r\n columns: columnConfig,\r\n filtersValue: filters.columnsFiltersValue ?? {},\r\n columnsLabels: columnsLabel\r\n };\r\n this.dialog.open(ConfigureTableColumnsComponent, { data: data });\r\n }\r\n\r\n protected applyColumnPipes(value: any, pipes?: ColumnPipe | ColumnPipe[]): any {\r\n if (!pipes)\r\n return value;\r\n\r\n const pipesArray = Array.isArray(pipes) ? pipes : [pipes];\r\n\r\n return pipesArray.reduce((v, p) => p.pipe.transform(v, ...(p.args || [])), value);\r\n }\r\n\r\n\r\n protected onNewAdvancedFiltersClick() {\r\n const data: ConfigureAdvancedFilterData<T> = {\r\n config: this.config()(),\r\n advancedFilter: {\r\n name: '',\r\n groups: [\r\n {\r\n id: uuidv4(),\r\n connector: 'AND',\r\n filters: [{ id: uuidv4() }]\r\n }\r\n ]\r\n }\r\n };\r\n const dialogRef = this.dialog.open(ConfigureAdvancedFilterComponent, { data: data });\r\n\r\n dialogRef.afterClosed().subscribe((advancedFilter?: AdvancedFilter<T>) => {\r\n if (advancedFilter)\r\n this.onApplyTemplateClick(advancedFilter);\r\n });\r\n }\r\n\r\n protected onApplyTemplateClick(advancedFilter?: AdvancedFilter<T>) {\r\n const advancedFilterId: string | undefined = advancedFilter?.groups?.[0].id;\r\n this.filters().update(currentValue => {\r\n return {\r\n ...currentValue,\r\n advancedFilterId: advancedFilterId,\r\n pageNumber: 1\r\n };\r\n });\r\n }\r\n\r\n protected onSelectedAdvancedFilterUpdate(event: Event) {\r\n const advancedFilterId = this.filters()().advancedFilterId;\r\n if (!advancedFilterId)\r\n return;\r\n\r\n const tableId = this.config()().tableId;\r\n const advancedFilter = this.advancedFilterService.getAdvancedFilterById(tableId, advancedFilterId);\r\n\r\n if (!advancedFilter)\r\n return;\r\n\r\n this.onAdvancedFilterUpdate(event, advancedFilter);\r\n }\r\n\r\n protected onAdvancedFilterUpdate(event: Event, advancedFilter: AdvancedFilter<T>, advancedFiltersMenuTrigger?: MatMenuTrigger) {\r\n event.stopPropagation();\r\n advancedFiltersMenuTrigger?.closeMenu();\r\n\r\n const data: ConfigureAdvancedFilterData<T> = {\r\n config: this.config()(),\r\n advancedFilter: advancedFilter\r\n };\r\n\r\n const dialogRef = this.dialog.open(ConfigureAdvancedFilterComponent, { data: data });\r\n\r\n dialogRef.afterClosed().subscribe((advancedFilter?: AdvancedFilter<T>) => {\r\n if (advancedFilter)\r\n this.onApplyTemplateClick(advancedFilter);\r\n });\r\n }\r\n\r\n protected onAdvancedFilterDelete(event: Event, advancedFiltersMenuTrigger: MatMenuTrigger, advancedFilter: AdvancedFilter<T>) {\r\n event.stopPropagation();\r\n advancedFiltersMenuTrigger.closeMenu();\r\n\r\n const data: ConfirmDialogData = {\r\n title: 'Eliminar plantilla de filtro avanzado',\r\n body: `Vas a eliminar la plantilla de filtro avanzado '${advancedFilter.name}'. ¿Estas seguro?`,\r\n confirmButtonLabel: 'Eliminar'\r\n };\r\n const dialogRef = this.dialog.open(NgxConfirmDialogComponent, { data: data });\r\n dialogRef.afterClosed().subscribe((confirm: boolean) => {\r\n if (confirm) {\r\n if (this.filters()().advancedFilterId == advancedFilter.groups[0].id)\r\n this.onApplyTemplateClick();\r\n\r\n this.advancedFilterService.deleteAdvancedFilter(this.config()().tableId, advancedFilter);\r\n }\r\n });\r\n }\r\n\r\n protected onQuitAdvancedFilter(event: Event) {\r\n event.stopPropagation();\r\n this.onApplyTemplateClick();\r\n }\r\n\r\n protected getAdvancedFilterLabel(): string {\r\n const advancedFilterId = this.filters()().advancedFilterId;\r\n if (!advancedFilterId)\r\n return '';\r\n\r\n const tableId = this.config()().tableId;\r\n const advancedFilter = this.advancedFilterService.getAdvancedFilterById(tableId, advancedFilterId);\r\n\r\n if (!advancedFilter)\r\n return '';\r\n\r\n return AdvancedFilterUtils.groupsToReadableHtml<T>(advancedFilter.groups, this.config()().columns);\r\n }\r\n\r\n protected rowIsExpanded(row: T): boolean {\r\n return this.expandedItem() == row;\r\n }\r\n\r\n protected expandableToggle(row: T) {\r\n this.expandedItem.update(currentValue => {\r\n const newValue = currentValue != row ? row : null;\r\n this.expandedItemChange.emit(newValue);\r\n return newValue;\r\n });\r\n }\r\n\r\n protected getTotalOfColum(columnKey: keyof T): number {\r\n const result = this.data().reduce((previous, item) => (previous + Number(item[columnKey])), 0);\r\n return result;\r\n }\r\n\r\n protected areEqualByKeys(record1: T, record2: T): boolean {\r\n const primaryKey = this.config()().primaryKey;\r\n\r\n if (Array.isArray(primaryKey))\r\n return primaryKey.every(key => record1[key] === record2[key]);\r\n else\r\n return record1[primaryKey] === record2[primaryKey];\r\n }\r\n\r\n protected isRowSelected(row: T): boolean {\r\n return this.selection().some(row2 => this.areEqualByKeys(row, row2));\r\n }\r\n\r\n protected toggleRowSelection(row: T) {\r\n if (this.isRowSelected(row)) {\r\n this.selection.update(recordsSelected => {\r\n return recordsSelected.filter(record => !this.areEqualByKeys(row, record));\r\n });\r\n } else {\r\n this.selection.update(recordsSelected => [...recordsSelected, row]);\r\n }\r\n }\r\n\r\n protected isAllPageRowSelected(): boolean {\r\n const records = this.data();\r\n return records.every(record => this.isRowSelected(record));\r\n }\r\n\r\n protected toggleAllPageRowSelection() {\r\n const records = this.data();\r\n\r\n if (this.isAllPageRowSelected()) {\r\n //Deseleccionar todas las filas de la página actual\r\n this.selection.update(recordsSelected => {\r\n return recordsSelected.filter(\r\n record => !records.some(row2 => this.areEqualByKeys(record, row2))\r\n );\r\n });\r\n } else {\r\n //Seleccionar todas las filas visibles que aún no estén seleccionadas\r\n const notSelected = records.filter(record => !this.isRowSelected(record));\r\n\r\n this.selection.update(recordsSelected => {\r\n // Evitar duplicados por si ya hay seleccionadas\r\n const nuevas = notSelected.filter(\r\n row => !recordsSelected.some(sel => this.areEqualByKeys(sel, row))\r\n );\r\n return [...recordsSelected, ...nuevas];\r\n });\r\n }\r\n }\r\n\r\n protected getRowSelectionAction(): RowSelectionAction<T>[] {\r\n return this.config()().rowSelectionAction ?? [];\r\n }\r\n\r\n protected uncheckAllSelection() {\r\n this.selection.set([]);\r\n }\r\n\r\n protected onRowSelectionActionClick(actionId: string) {\r\n this.selectionActionEvent.emit(\r\n {\r\n id: actionId,\r\n rows: this.selection()\r\n }\r\n );\r\n }\r\n\r\n private getDocumentHeaders(): string[] {\r\n const config = this.config()();\r\n return config.columns.map(c => c.label);\r\n }\r\n\r\n private getDocumentRows(): Partial<Record<keyof T, any>>[keyof T][][] {\r\n const config = this.config()();\r\n const columns = config.columns;\r\n\r\n const data = this.data();\r\n\r\n return data.map(row => {\r\n if (config.mapperForExportData) {\r\n const mapped = config.mapperForExportData(row);\r\n return columns.map(c => mapped[c.key]);\r\n }\r\n\r\n return columns.map(c => row[c.key] ?? '');\r\n });\r\n }\r\n\r\n protected exportToCsvCurrentPage() {\r\n const config = this.config()();\r\n\r\n const title = config.title();\r\n const fileName = config.exportFileName?.() ?? title;\r\n\r\n\r\n const headers = this.getDocumentHeaders();\r\n const rows = this.getDocumentRows();\r\n\r\n const aoaData = [headers, ...rows];\r\n\r\n //const workSheet = utils.json_to_sheet(data);\r\n\r\n const workSheet = utils.aoa_to_sheet(aoaData);\r\n const workBook = utils.book_new();\r\n utils.book_append_sheet(workBook, workSheet, title);\r\n writeFileXLSX(workBook, `${fileName}.xlsx`);\r\n }\r\n\r\n protected exportToPdfCurrentPage() {\r\n const config = this.config()();\r\n\r\n const title = config.title();\r\n const fileName = config.exportFileName?.() ?? title;\r\n\r\n const headers = this.getDocumentHeaders();\r\n const rows = this.getDocumentRows();\r\n\r\n const doc = config.pdfConfig ?? new jsPDF({\r\n orientation: 'landscape',\r\n unit: 'pt',\r\n format: 'A4'\r\n });\r\n\r\n doc.setFontSize(14);\r\n doc.text(title, 40, 40);\r\n\r\n autoTable(doc, {\r\n startY: 60,\r\n head: [headers],\r\n body: rows,\r\n styles: { fontSize: 9, cellPadding: 4 },\r\n headStyles: { fillColor: [192, 0, 28], textColor: 255 },\r\n alternateRowStyles: { fillColor: [245, 245, 245] },\r\n tableLineColor: [200, 200, 200],\r\n tableLineWidth: 0.1,\r\n });\r\n\r\n doc.save(`${fileName}.pdf`);\r\n }\r\n\r\n protected onToggleFullScreen() {\r\n if (this.isFullScreen())\r\n this.exitFullscreen()\r\n else\r\n this.enterFullscreen();\r\n }\r\n\r\n private enterFullscreen() {\r\n if (this.overlayRef)\r\n return;\r\n\r\n this.overlayRef = this.overlay.create({\r\n hasBackdrop: false,\r\n scrollStrategy: this.overlay.scrollStrategies.block(),\r\n positionStrategy: this.overlay.position().global().top('0').left('0').right('0').bottom('0'),\r\n });\r\n\r\n this.portal = new TemplatePortal(this.tableContentTemplate()!, this.viewContainerRef);\r\n this.overlayRef.attach(this.portal);\r\n\r\n this.isFullScreen.set(true);\r\n }\r\n\r\n private exitFullscreen() {\r\n if (!this.overlayRef)\r\n return;\r\n\r\n this.overlayRef.detach();\r\n this.overlayRef.dispose();\r\n this.overlayRef = undefined;\r\n this.portal = undefined;\r\n\r\n this.isFullScreen.set(false);\r\n }\r\n\r\n private isMyOverlayOnTop(): boolean {\r\n if (!this.overlayRef)\r\n return false;\r\n\r\n //Contenedor principal de overlays en el DOM\r\n const containerElement = this.overlayContainer.getContainerElement();\r\n // Los overlays se añaden como hijos dentro de este contenedor\r\n const overlays = Array.from(containerElement.children);\r\n // El último hijo es el overlay más \"arriba\"\r\n const topOverlay = overlays[overlays.length - 1] as HTMLElement | undefined;\r\n\r\n return topOverlay === this.overlayRef.hostElement;\r\n }\r\n \r\n}\r\n","@if(!isFullScreen()) {\r\n <ng-container *ngTemplateOutlet=\"tableContentTemplate()\"></ng-container>\r\n}\r\n\r\n<ng-template #tableContent>\r\n <div class=\"tableContainer\" [class.inFullScreenMode]=\"isFullScreen()\">\r\n <div class=\"headerContainer\">\r\n <div class=\"titleAndButtonContainer\">\r\n <p class=\"title\">{{ config()().title() }}</p>\r\n <div class=\"buttonContainer\">\r\n @if(config()().create && (!config()().create?.show || config()().create?.show())) {\r\n <button \r\n matIconButton \r\n [matTooltip]=\"config()().create?.tooltip?.() ?? 'Nuevo'\" \r\n [disabled]=\"config()().create?.disabled?.()\" \r\n class=\"newButtonIcon\"\r\n (click)=\"onNewClick()\">\r\n <mat-icon>add_circle</mat-icon>\r\n </button>\r\n }\r\n\r\n <button matIconButton matTooltip=\"Visualizar y ordernar columnas\" class=\"editColumnsButtonIcon\" (click)=\"onEditColumns()\">\r\n <mat-icon>table_edit</mat-icon>\r\n </button>\r\n\r\n @if(config()().showAdvancedFilters) {\r\n <button \r\n matIconButton \r\n matTooltip=\"Filtros avanzados\" \r\n [matMenuTriggerFor]=\"advancedFiltersMenu\" \r\n #advancedFiltersMenuTrigger=\"matMenuTrigger\">\r\n\r\n <mat-icon>filter_alt</mat-icon>\r\n </button>\r\n\r\n <mat-menu #advancedFiltersMenu=\"matMenu\" xPosition=\"before\" yPosition=\"below\">\r\n <button mat-menu-item (click)=\"onNewAdvancedFiltersClick()\">\r\n <mat-icon>filter_alt</mat-icon>\r\n <span>Nuevo filtro</span>\r\n </button>\r\n\r\n @for (advancedFilter of advancedFilters(); track $index; let first = $first) {\r\n @if (first) {\r\n <mat-divider />\r\n }\r\n\r\n <div mat-menu-item (click)=\"onApplyTemplateClick(advancedFilter)\">\r\n <div class=\"templateContainer\"> \r\n <span>{{advancedFilter.name | ngxOnlyUpperFirstCharacter}}</span>\r\n\r\n <div class=\"buttonTemplateContainer\">\r\n <button\r\n matIconButton \r\n [matTooltip]=\"`Editar '${advancedFilter.name | ngxOnlyUpperFirstCharacter}'`\"\r\n (click)=\"onAdvancedFilterUpdate($event, advancedFilter, advancedFiltersMenuTrigger)\">\r\n <mat-icon>edit</mat-icon>\r\n </button>\r\n\r\n <button\r\n matIconButton \r\n [matTooltip]=\"`Eliminar '${advancedFilter.name | ngxOnlyUpperFirstCharacter}'`\"\r\n (click)=\"onAdvancedFilterDelete($event, advancedFiltersMenuTrigger, advancedFilter)\">\r\n <mat-icon>delete</mat-icon>\r\n </button>\r\n </div>\r\n </div>\r\n </div>\r\n }\r\n </mat-menu>\r\n }\r\n\r\n @if(selection().length > 0) {\r\n @if(getRowSelectionAction().length > 0) {\r\n <button \r\n matIconButton \r\n matTooltip=\"Operaciones sobre los registros seleccionados\"\r\n [matMenuTriggerFor]=\"selectedRecordsMenu\">\r\n <mat-icon>event_list</mat-icon>\r\n </button>\r\n\r\n <mat-menu #selectedRecordsMenu=\"matMenu\" xPosition=\"before\" yPosition=\"below\">\r\n <button mat-menu-item (click)=\"uncheckAllSelection()\">\r\n <mat-icon>deselect</mat-icon>\r\n <span>Desmarcar todos los registros</span>\r\n </button>\r\n\r\n @for (action of getRowSelectionAction(); track $index) {\r\n <button mat-menu-item (click)=\"onRowSelectionActionClick(action.id)\">\r\n <mat-icon>{{action.icon}}</mat-icon>\r\n <span>{{action.label(selection(), selection().length)}}</span>\r\n </button>\r\n }\r\n </mat-menu>\r\n } @else {\r\n <button \r\n matIconButton \r\n matTooltip=\"Desmarcar todos los registros\"\r\n (click)=\"uncheckAllSelection()\">\r\n <mat-icon>deselect</mat-icon>\r\n </button>\r\n }\r\n }\r\n\r\n <button matIconButton matTooltip=\"Exportar datos\" [matMenuTriggerFor]=\"exportMenu\">\r\n <mat-icon>download</mat-icon>\r\n </button>\r\n <mat-menu #exportMenu=\"matMenu\" xPosition=\"before\" yPosition=\"below\">\r\n <button mat-menu-item (click)=\"exportToCsvCurrentPage()\">\r\n <mat-icon>csv</mat-icon>\r\n <span>Exportar a XLSX la página actual</span>\r\n </button>\r\n\r\n <button mat-menu-item (click)=\"exportToPdfCurrentPage()\">\r\n <mat-icon>picture_as_pdf</mat-icon>\r\n <span>Exportar a PDF la página actual</span>\r\n </button>\r\n </mat-menu>\r\n\r\n <button matIconButton [matTooltip]=\"isFullScreen() ? 'Salir del modo de pantalla completa': 'Pantalla completa'\" (click)=\"onToggleFullScreen()\">\r\n <mat-icon>{{isFullScreen() ? 'fullscreen_exit': 'fullscreen'}}</mat-icon>\r\n </button>\r\n\r\n <ng-content select=\"[icon-buttons]\"></ng-content>\r\n </div>\r\n </div>\r\n\r\n <div class=\"filterContainer\">\r\n <div class=\"moreFiltersContainer\">\r\n <ng-content select=\"[more-filters]\"></ng-content>\r\n </div>\r\n\r\n @if(config()().showQueryFilter) {\r\n <mat-form-field subscriptSizing=\"dynamic\">\r\n <mat-icon matPrefix>search</mat-icon>\r\n <input #queryElement matInput [placeholder]=\"config()().queryFilterPlaceholder ?? 'Buscar...'\" [value]=\"filters()().query ?? ''\" (input)=\"onQueryChange(queryElement)\">\r\n <button matIconButton matSuffix (click)=\"onQueryReset(queryElement)\" [style.visibility]=\"queryElement.value ? 'visible': 'hidden'\">\r\n <mat-icon>close</mat-icon>\r\n </button>\r\n </mat-form-field>\r\n }\r\n </div>\r\n\r\n <ng-content select=\"[extra-header-content]\"></ng-content>\r\n </div>\r\n\r\n @if(filters()().advancedFilterId) {\r\n <div class=\"advancedFiltersApplied\" (click)=\"onSelectedAdvancedFilterUpdate($event)\">\r\n <p [innerHTML]=\"getAdvancedFilterLabel()\"></p>\r\n <button matIconButton matTooltip=\"Quitar filtros avanzados\" class=\"\" (click)=\"onQuitAdvancedFilter($event)\">\r\n <mat-icon>close</mat-icon>\r\n </button>\r\n </div>\r\n }\r\n\r\n <mat-progress-bar mode=\"indeterminate\" [style.visibility]=\"dataResource.isLoading() ? 'visible': 'hidden'\"/>\r\n\r\n <div class=\"tableOverflow\" [style.max-height]=\"config()().maxHeight && !isFullScreen() ? config()().maxHeight : null\">\r\n <table\r\n mat-table \r\n matSort\r\n [multiTemplateDataRows]=\"config()().expandableDetail\"\r\n [dataSource]=\"data()\" \r\n [matSortActive]=\"filters()().sortBy?.key ?? ''\" \r\n [matSortDirection]=\"filters()().sortBy?.direction ?? ''\"\r\n (matSortChange)=\"onSortChange($event)\">\r\n\r\n @if(config()().enableRowSelection) {\r\n @if(showFiltersRow()) {\r\n <ng-container [matColumnDef]=\"`${filterKeyPrefix}${nameOfRowSelectionColumn}`\" [sticky]=\"isDesktop()\">\r\n <th mat-header-cell *matHeaderCellDef class=\"celdaSelection\"></th>\r\n </ng-container>\r\n } \r\n\r\n <ng-container [matColumnDef]=\"nameOfRowSelectionColumn\" [sticky]=\"isDesktop()\">\r\n <th mat-header-cell *matHeaderCellDef>\r\n <mat-checkbox \r\n class=\"headerCheckbox\"\r\n (change)=\"$event ? toggleAllPageRowSelection() : null\"\r\n [checked]=\"selection().length > 0 && isAllPageRowSelected()\"\r\n [indeterminate]=\"selection().length > 0 && !isAllPageRowSelected()\">\r\n </mat-checkbox>\r\n </th>\r\n <td mat-cell *matCellDef=\"let row\" (click)=\"$event.stopPropagation()\" class=\"celdaSelection\">\r\n <mat-checkbox\r\n (change)=\"$event ? toggleRowSelection(row) : null\"\r\n [checked]=\"isRowSelected(row)\">\r\n </mat-checkbox>\r\n </td>\r\n <td mat-footer-cell *matFooterCellDef></td>\r\n </ng-container>\r\n\r\n @if(showTotalGeneralFooter()) {\r\n <ng-container [matColumnDef]=\"`${generalFooterKeyPrefix}${nameOfRowSelectionColumn}`\" [sticky]=\"isDesktop()\">\r\n <td mat-footer-cell *matFooterCellDef></td>\r\n </ng-container>\r\n }\r\n }\r\n\r\n @for (column of config()().columns; track $index) {\r\n <ng-container \r\n [matColumnDef]=\"getKeyAsString(column.key)\" \r\n [sticky]=\"stickyColumnKey() == column.key && isDesktop()\">\r\n\r\n <th mat-header-cell *matHeaderCellDef mat-sort-header [disabled]=\"!column.isSortable\" class=\"columnLabel\">\r\n <p class=\"headerTitle\">\r\n @if(stickyColumnKey() == column.key && isDesktop()) {\r\n <mat-icon>keep</mat-icon>\r\n }\r\n {{ column.label }}\r\n </p>\r\n </th>\r\n\r\n <td \r\n mat-cell \r\n *matCellDef=\"let row\" \r\n [class.columnSticky]=\"stickyColumnKey() == column.key && isDesktop()\"\r\n [ngStyle]=\"column.style\"\r\n class=\"celdaDatos\">\r\n\r\n @if(column.component) {\r\n <ng-container \r\n ngxDynamicCellHost\r\n [component]=\"column.component\"\r\n [row]=\"row\"\r\n [key]=\"column.key\" />\r\n } @else if(column.templateRef) {\r\n <ng-container \r\n *ngTemplateOutlet=\"column.templateRef(); \r\n context: { $implicit: row }\" />\r\n } @else if(column.valueGetter) {\r\n {{ column.valueGetter(row) }}\r\n } @else {\r\n {{ applyColumnPipes(row[column.key], column.pipes) ?? '-' }}\r\n }\r\n </td>\r\n \r\n <td mat-footer-cell *matFooterCellDef [ngStyle]=\"column.style\">\r\n @if(column.showTotalPerPage) {\r\n @if(column.pipes) {\r\n {{ applyColumnPipes(getTotalOfColum(column.key), column.pipes) }}\r\n } @else if(column.totalFooterFormatter) {\r\n {{ column.totalFooterFormatter(getTotalOfColum(column.key)) }}\r\n } @else {\r\n {{ getTotalOfColum(column.key) }}\r\n }\r\n }\r\n </td>\r\n </ng-container>\r\n }\r\n\r\n @if(showTotalGeneralFooter()) {\r\n @for (column of config()().columns; track $index) {\r\n <ng-container [matColumnDef]=\"`${generalFooterKeyPrefix}${getKeyAsString(column.key)}`\">\r\n <td mat-footer-cell *matFooterCellDef [ngStyle]=\"column.style\">\r\n @if(column.showTotalGeneral && column.getTotalGeneral) {\r\n @if(column.pipes) {\r\n {{ applyColumnPipes(column.getTotalGeneral(), column.pipes) }}\r\n } @else if(column.totalFooterFormatter) {\r\n {{ column.totalFooterFormatter(column.getTotalGeneral()) }}\r\n } @else {\r\n {{ column.getTotalGeneral() }}\r\n }\r\n }\r\n </td>\r\n </ng-container>\r\n }\r\n }\r\n\r\n @if(showFiltersRow()) {\r\n @for (column of config()().columns; track $index) {\r\n <ng-container \r\n [matColumnDef]=\"`${filterKeyPrefix}${getKeyAsString(column.key)}`\" \r\n [sticky]=\"stickyColumnKey() == column.key && isDesktop()\">\r\n\r\n <th mat-header-cell *matHeaderCellDef>\r\n @if (column.filterType == 'text' || column.filterType == 'number') {\r\n <mat-form-field subscriptSizing=\"dynamic\" class=\"inputQueryColumn\">\r\n <input [type]=\"column.filterType\" matInput [placeholder]=\"column.label\" [value]=\"getValueOfColumnFilter(column.key) ?? ''\" (input)=\"onTextFilterColumnChange(column, $event)\">\r\n <mat-icon matSuffix>{{ column.filterType == 'text' ? 'search' : 'numbers'}}</mat-icon>\r\n </mat-form-field>\r\n }\r\n\r\n @if (column.filterType == 'option' || column.filterType == 'option-multiple') {\r\n <mat-form-field subscriptSizing=\"dynamic\" class=\"selectColumn\">\r\n <mat-select\r\n [placeholder]=\"column.label\" \r\n [multiple]=\"column.filterType == 'option-multiple'\"\r\n [value]=\"getValueOfColumnFilter(column.key)\"\r\n (selectionChange)=\"onOptionFilterColumnChange(column, $event)\">\r\n \r\n @if(column.filterType == 'option') {\r\n <mat-option>-- Quitar filtro --</mat-option>\r\n }\r\n @for (option of column.filterOptions; track $index;) {\r\n <mat-option [value]=\"option.value\">{{option.label}}</mat-option>\r\n }\r\n </mat-select>\r\n </mat-form-field>\r\n }\r\n \r\n @if(column.filterType == 'date') {\r\n <mat-form-field subscriptSizing=\"dynamic\" class=\"dateColumn\">\r\n <input \r\n matInput \r\n [matDatepicker]=\"picker\" \r\n [placeholder]=\"column.label\"\r\n [value]=\"getValueOfColumnFilter(column.key)\"\r\n (dateChange)=\"onDateFilterChange(column, $event.value)\">\r\n <mat-datepicker-toggle matIconSuffix [for]=\"picker\"></mat-datepicker-toggle>\r\n <mat-datepicker #picker></mat-datepicker>\r\n </mat-form-field>\r\n }\r\n\r\n @if(column.filterType == 'date-range') {\r\n <mat-form-field subscriptSizing=\"dynamic\" class=\"dateColumn\">\r\n <mat-date-range-input [rangePicker]=\"picker\" #dateRangeInput>\r\n <input \r\n matStartDate \r\n placeholder=\"Desde\"\r\n [value]=\"getDateRangeValueOfColumnFilter(column.key, 'start')\"\r\n (dateChange)=\"onDateRangeFilterChange(column, dateRangeInput.value)\">\r\n <input \r\n matEndDate \r\n placeholder=\"Hasta\"\r\n [value]=\"getDateRangeValueOfColumnFilter(column.key, 'end')\"\r\n (dateChange)=\"onDateRangeFilterChange(column, dateRangeInput.value)\">\r\n </mat-date-range-input>\r\n <mat-datepicker-toggle matIconSuffix [for]=\"picker\"></mat-datepicker-toggle>\r\n <mat-date-range-picker #picker></mat-date-range-picker>\r\n </mat-form-field>\r\n }\r\n </th>\r\n </ng-container>\r\n }\r\n }\r\n\r\n @if(showActionsColumn()) {\r\n @if(showFiltersRow()) {\r\n <ng-container [matColumnDef]=\"`${filterKeyPrefix}${nameOfActionsColumn}`\" [stickyEnd]=\"isDesktop()\">\r\n <th mat-header-cell *matHeaderCellDef class=\"celdaAcciones\"></th>\r\n </ng-container>\r\n } \r\n\r\n <ng-container [matColumnDef]=\"nameOfActionsColumn\" [stickyEnd]=\"isDesktop()\">\r\n <th mat-header-cell *matHeaderCellDef>Acciones</th>\r\n <td mat-cell *matCellDef=\"let row\" (click)=\"$event.stopPropagation()\" class=\"celdaAcciones\">\r\n <div class=\"contenedorCeldaAcciones\">\r\n @if(config()().expandableDetail) {\r\n <button \r\n matIconButton\r\n (click)=\"expandableToggle(row)\">\r\n <mat-icon>{{ rowIsExpanded(row) ? 'keyboard_arrow_up' : 'keyboard_arrow_down' }}</mat-icon>\r\n </button>\r\n }\r\n\r\n @if(config()().update && !config()().clickOnRowForUpdate && (!config()().update?.show || config()().update?.show(row))) {\r\n <button \r\n matIconButton\r\n [matTooltip]=\"config()().update?.tooltip?.(row) ?? 'Editar'\" \r\n [disabled]=\"config()().update?.disabled?.(row)\" \r\n class=\"editButtonIcon\"\r\n (click)=\"onUpdateClick(row, $event)\">\r\n <mat-icon>edit_square</mat-icon>\r\n </button>\r\n }\r\n \r\n @if(config()().delete && (!config()().delete?.show || config()().delete?.show(row))) {\r\n <button \r\n matIconButton \r\n [matTooltip]=\"config()().delete?.tooltip?.(row) ?? 'Elminar'\" \r\n [disabled]=\"config()().delete?.disabled?.(row)\" \r\n class=\"deleteButtonIcon\"\r\n (click)=\"onDeleteClick(row, $event)\">\r\n <mat-icon>delete</mat-icon>\r\n </button>\r\n }\r\n\r\n @for (rowAction of config()().rowActions; track $index) {\r\n @if(!rowAction.show || rowAction.show(row)) {\r\n <button \r\n matIconButton \r\n [matTooltip]=\"rowAction.tooltip(row)\" \r\n [disabled]=\"rowAction.disabled?.(row)\" \r\n [class]=\"rowAction.iconColor ? `rowActionIconColor${rowAction.iconColor}` : ''\"\r\n (click)=\"onRowActionClick(row, rowAction, $event)\">\r\n <mat-icon>{{rowAction.icon}}</mat-icon>\r\n </button>\r\n } \r\n }\r\n </div>\r\n </td>\r\n <td mat-footer-cell *matFooterCellDef></td>\r\n </ng-container>\r\n\r\n @if(showTotalGeneralFooter()) {\r\n <ng-container [matColumnDef]=\"`${generalFooterKeyPrefix}${nameOfActionsColumn}`\" [stickyEnd]=\"isDesktop()\">\r\n <td mat-footer-cell *matFooterCellDef></td>\r\n </ng-container>\r\n }\r\n }\r\n\r\n @if(config()().expandableDetail) {\r\n <ng-container [matColumnDef]=\"expandableColumnDef\">\r\n <td mat-cell *matCellDef=\"let row\" [attr.colspan]=\"keys().length\">\r\n <div \r\n class=\"detailWrapper\"\r\n [class.detailWrapperExpanded]=\"rowIsExpanded(row)\">\r\n <div class=\"columnDetail\">\r\n @if(config()().expandableDetailTemplateRef) {\r\n <ng-container \r\n *ngTemplateOutlet=\"config()().expandableDetailTemplateRef!(); \r\n context: { $implicit: row }\" />\r\n }\r\n </div>\r\n </div>\r\n </td>\r\n </ng-container>\r\n }\r\n \r\n <tr mat-header-row *matHeaderRowDef=\"keys(); sticky: true\" class=\"tableHeader\"></tr>\r\n \r\n @if(showFiltersRow()) {\r\n <tr mat-header-row *matHeaderRowDef=\"keysWithFilter(); sticky: true\" class=\"filtersByColumn\"></tr>\r\n }\r\n \r\n <tr mat-row *matRowDef=\"let row; columns: keys();\" \r\n (click)=\"onRowClick(row)\" \r\n [class.rowClickEnable]=\"isRowEnabled(row)\"\r\n [class.expandableRow]=\"config()().expandableDetail\">\r\n </tr>\r\n \r\n @if(config()().expandableDetail) {\r\n <tr mat-row *matRowDef=\"let row; columns: [expandableColumnDef]\" class=\"rowDetail\"></tr>\r\n }\r\n\r\n <tr mat-footer-row \r\n *matFooterRowDef=\"showTotalPerPageFooter() ? keys() : []\" \r\n class=\"totalPerPageFooter\"\r\n [class.hideFooter]=\"!showTotalPerPageFooter()\">\r\n </tr>\r\n\r\n <tr mat-footer-row \r\n *matFooterRowDef=\"showTotalGeneralFooter() ? keysWithGeneralFooter() : []\" \r\n class=\"totalFooter\"\r\n [class.hideFooter]=\"!showTotalGeneralFooter()\">\r\n </tr>\r\n\r\n <tr class=\"mat-row\" *matNoDataRow>\r\n <td class=\"noData\" [colSpan]=\"keys().length\">{{ dataResource.isLoading() ? 'Cargando...' : 'No se han encontrado resultados...' }}</td>\r\n </tr>\r\n </table>\r\n </div>\r\n\r\n <div class=\"paginatorContainer\">\r\n <div class=\"footerLegend\">\r\n @if(showTotalPerPageFooter()) {\r\n <div class=\"legendItem\">\r\n <div class=\"legendSquare\"></div>\r\n <p>Total parcial (por página)</p> \r\n </div>\r\n }\r\n\r\n @if(showTotalGeneralFooter()) {\r\n <div class=\"legendItem\">\r\n <div class=\"legendSquare totalGeneral\"></div>\r\n <p>Total (todos los registros)</p>\r\n </div>\r\n }\r\n </div>\r\n <mat-paginator [length]=\"total()\" [pageSize]=\"filters()().pageSize\" [pageIndex]=\"filters()().pageNumber - 1\" (page)=\"onPageChange($event)\"/>\r\n </div>\r\n\r\n <ng-content select=\"[end-container]\"></ng-content>\r\n </div>\r\n</ng-template>","import { inject, Injectable, TemplateRef, Type } from \"@angular/core\";\r\nimport { MatDialog, MatDialogConfig } from \"@angular/material/dialog\";\r\nimport { DialogBodyConfig, DialogBodyType } from \"../models/dialog-config\";\r\nimport { Observable } from \"rxjs\";\r\nimport { NgxDialog } from \"../components\";\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class NgxDialogService {\r\n // dependencies injection\r\n private readonly _dialog = inject(MatDialog);\r\n\r\n /**\r\n * \r\n * @param config\r\n * @param dialogConfig\r\n * @returns Observable<DialogResult>\r\n * \r\n * Opens a text dialog with the provided configuration.\r\n */\r\n openText(\r\n config: {\r\n title: string;\r\n content: string;\r\n subtitle?: string;\r\n cancelText?: string;\r\n confirmText?: string;\r\n icon?: string;\r\n iconColor?: string;\r\n showCancel?: boolean;\r\n showConfirm?: boolean;\r\n },\r\n dialogConfig?: MatDialogConfig\r\n ): Observable<boolean | undefined> {\r\n return this._dialog.open(NgxDialog, {\r\n ...dialogConfig,\r\n data: {\r\n ...config,\r\n body: {\r\n type: DialogBodyType.TEXT,\r\n content: config.content \r\n } satisfies DialogBodyConfig,\r\n },\r\n minWidth: dialogConfig?.minWidth ?? '400px',\r\n autoFocus: dialogConfig?.autoFocus ?? false\r\n }).afterClosed();\r\n }\r\n\r\n /**\r\n * \r\n * @param title \r\n * @param message \r\n * @param cancelText\r\n * @param confirmText \r\n * @param dialogConfig\r\n * @returns Observable<DialogResult>\r\n * \r\n * Opens a confirmation dialog with cancel and confirm buttons.\r\n */\r\n confirm(config: {\r\n title: string;\r\n message: string;\r\n subtitle?: string;\r\n icon?: string;\r\n iconColor?: string;\r\n cancelText?: string;\r\n confirmText?: string;\r\n }, dialogConfig?: MatDialogConfig\r\n ): Observable<boolean | undefined> {\r\n return this.openText({\r\n title: config.title,\r\n content: config.message,\r\n subtitle: config.subtitle,\r\n icon : config.icon,\r\n iconColor : config.iconColor,\r\n cancelText : config.cancelText ?? 'Cancelar',\r\n confirmText : config.confirmText ?? 'Confirmar'\r\n }, dialogConfig);\r\n }\r\n\r\n /**\r\n * \r\n * @param title \r\n * @param message \r\n * @param confirmText\r\n * @param dialogConfig\r\n * @returns Observable<DialogResult>\r\n * \r\n * Opens an informational dialog with a single confirm button. \r\n */\r\n info(\r\n config: {\r\n title: string;\r\n message: string;\r\n subtitle?: string;\r\n icon?: string;\r\n iconColor?: string;\r\n confirmText?: string;\r\n },\r\n dialogConfig?: MatDialogConfig\r\n ): Observable<boolean | undefined> {\r\n return this.openText({\r\n title: config.title,\r\n content: config.message,\r\n subtitle: config.subtitle,\r\n icon: config.icon,\r\n iconColor: config.iconColor,\r\n showCancel: false,\r\n confirmText: config.confirmText ?? 'Aceptar',\r\n }, dialogConfig);\r\n }\r\n\r\n /**\r\n * \r\n * @param config\r\n * @param dialogConfig\r\n * @returns Observable<DialogResult>\r\n * \r\n * Opens an HTML dialog with the provided configuration.\r\n */\r\n html(\r\n config: {\r\n title: string;\r\n subtitle?: string;\r\n icon?: string;\r\n iconColor?: string;\r\n html: string;\r\n cancelText?: string;\r\n confirmText?: string;\r\n showCancel?: boolean;\r\n showConfirm?: boolean;\r\n },\r\n dialogConfig?: MatDialogConfig\r\n ): Observable<boolean | undefined> {\r\n return this._dialog.open(NgxDialog, {\r\n ...dialogConfig,\r\n data: {\r\n ...config,\r\n body: {\r\n type: DialogBodyType.HTML,\r\n content: config.html\r\n } satisfies DialogBodyConfig,\r\n },\r\n minWidth: dialogConfig?.minWidth ?? '400px',\r\n autoFocus: dialogConfig?.autoFocus ?? false\r\n }).afterClosed();\r\n }\r\n\r\n /**\r\n * \r\n * @param config\r\n * @return Observable<DialogResult>\r\n * \r\n * Opens a component dialog with the provided configuration.\r\n */\r\n component<T = any>(\r\n config: {\r\n title: string;\r\n subtitle?: string;\r\n icon?: string;\r\n iconColor?: string;\r\n component: Type<any>;\r\n componentData?: T;\r\n cancelText?: string;\r\n confirmText?: string;\r\n showCancel?: boolean;\r\n showConfirm?: boolean;\r\n },\r\n dialogConfig?: MatDialogConfig\r\n ): Observable<boolean | undefined> {\r\n return this._dialog.open(NgxDialog<T>, {\r\n ...dialogConfig,\r\n data: {\r\n title: config.title,\r\n subtitle: config.subtitle,\r\n icon: config.icon,\r\n iconColor: config.iconColor,\r\n body: {\r\n type: DialogBodyType.COMPONENT,\r\n content: config.component,\r\n data: config.componentData\r\n } satisfies DialogBodyConfig<T>,\r\n cancelText: config.cancelText,\r\n confirmText: config.confirmText,\r\n showCancel: config.showCancel,\r\n showConfirm: config.showConfirm,\r\n },\r\n minWidth: dialogConfig?.minWidth ?? '400px',\r\n autoFocus: dialogConfig?.autoFocus ?? false\r\n }).afterClosed();\r\n }\r\n\r\n /**\r\n * \r\n * @param config\r\n * @param dialogConfig\r\n * @returns Observable<DialogResult>\r\n * \r\n * Opens a template dialog with the provided configuration.\r\n */\r\n template<T = any>(\r\n config: {\r\n title: string;\r\n subtitle?: string;\r\n icon?: string;\r\n iconColor?: string;\r\n template: TemplateRef<T>;\r\n templateData?: T;\r\n cancelText?: string;\r\n confirmText?: string;\r\n showCancel?: boolean;\r\n showConfirm?: boolean;\r\n },\r\n dialogConfig?: MatDialogConfig\r\n ): Observable<boolean | undefined> {\r\n return this._dialog.open(NgxDialog<T>, {\r\n ...dialogConfig,\r\n data: {\r\n ...config,\r\n body: {\r\n type: DialogBodyType.TEMPLATE,\r\n content: config.template,\r\n data: config.templateData\r\n } satisfies DialogBodyConfig<T>,\r\n },\r\n minWidth: dialogConfig?.minWidth ?? '400px',\r\n autoFocus: dialogConfig?.autoFocus ?? false\r\n }).afterClosed();\r\n }\r\n}","export * from './lib/components/index';\r\nexport * from './lib/models/index';\r\nexport * from './lib/services/index';\r\nexport * from './lib/directives/index';\r\n// export * from './lib/utils/index';","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i2","i3","i6","i1","i4","i5","i7","i8","uuidv4","i9","i10","i14"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;MAoBa,gBAAgB,CAAA;AAC3B,IAAA,SAAS,GAAG,KAAK,CAAC,QAAQ,CAAA,IAAA,SAAA,GAAA,CAAA,EAAA,SAAA,EAAA,WAAA,EAAA,CAAA,GAAA,EAAA,CAAA,CAAW,CAAC;AACtC,IAAA,KAAK,GAAG,KAAK,CAAC,QAAQ,CAAA,IAAA,SAAA,GAAA,CAAA,EAAA,SAAA,EAAA,OAAA,EAAA,CAAA,GAAA,EAAA,CAAA,CAAU,CAAC;AACjC,IAAA,SAAS,GAAG,KAAK,CAAwD,QAAQ,EAAA,IAAA,SAAA,GAAA,CAAA,EAAA,SAAA,EAAA,WAAA,EAAA,CAAA,GAAA,EAAA,CAAA,CAAC,CAAC;AACnF,IAAA,IAAI,GAAG,KAAK,CAAgC,QAAQ,EAAA,IAAA,SAAA,GAAA,CAAA,EAAA,SAAA,EAAA,MAAA,EAAA,CAAA,GAAA,EAAA,CAAA,CAAC,CAAC;AACtD,IAAA,QAAQ,GAAG,KAAK,CAAU,KAAK,EAAA,IAAA,SAAA,GAAA,CAAA,EAAA,SAAA,EAAA,UAAA,EAAA,CAAA,GAAA,EAAA,CAAA,CAAC,CAAC;AACjC,IAAA,eAAe,GAAG,KAAK,CAAS,EAAE,EAAA,IAAA,SAAA,GAAA,CAAA,EAAA,SAAA,EAAA,iBAAA,EAAA,CAAA,GAAA,EAAA,CAAA,CAAC,CAAA;AACnC,IAAA,kBAAkB,GAAG,KAAK,CAAS,CAAC,EAAA,IAAA,SAAA,GAAA,CAAA,EAAA,SAAA,EAAA,oBAAA,EAAA,CAAA,GAAA,EAAA,CAAA,CAAC,CAAA;;AAErC,IAAA,KAAK,GAAG,KAAK,CAAuC,SAAS,EAAA,IAAA,SAAA,GAAA,CAAA,EAAA,SAAA,EAAA,OAAA,EAAA,CAAA,GAAA,EAAA,CAAA,CAAC,CAAC;wGATpD,gBAAgB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAAhB,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,gBAAgB,2nCCpB7B,ibAkBA,EAAA,MAAA,EAAA,CAAA,4jEAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EDLI,eAAe,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,SAAA,EAAA,QAAA,EAAA,iOAAA,EAAA,MAAA,EAAA,CAAA,WAAA,CAAA,EAAA,QAAA,EAAA,CAAA,WAAA,EAAA,WAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EACf,wBAAwB,kOACxB,aAAa,EAAA,CAAA,EAAA,CAAA;;4FAKJ,gBAAgB,EAAA,UAAA,EAAA,CAAA;kBAV5B,SAAS;AACE,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,oBAAoB,EAAA,OAAA,EACrB;wBACP,eAAe;wBACf,wBAAwB;wBACxB,aAAa;AACd,qBAAA,EAAA,QAAA,EAAA,ibAAA,EAAA,MAAA,EAAA,CAAA,4jEAAA,CAAA,EAAA;;;METU,kBAAkB,CAAA;AAC7B;;;AAGG;IACH,eAAe,CAAC,MAAmB,EAAE,GAAM,EAAA;QACzC,IAAI,CAAC,MAAM,CAAC,YAAY;AAAE,YAAA,OAAO,KAAK;AAEtC,QAAA,MAAM,OAAO,GAAG,MAAM,CAAC,YAAY,CAAC,OAAO;AAC3C,QAAA,IAAI,OAAO,OAAO,KAAK,UAAU,EAAE;AACjC,YAAA,OAAO,OAAO,CAAC,GAAG,CAAC;QACrB;AACA,QAAA,OAAO,OAAO,KAAK,KAAK,CAAC;IAC3B;IAEA,gBAAgB,CAAC,MAAmB,EAAE,GAAM,EAAA;QAC1C,IAAI,CAAC,MAAM,CAAC,YAAY;AAAE,YAAA,OAAO,KAAK;AAEtC,QAAA,MAAM,QAAQ,GAAG,MAAM,CAAC,YAAY,CAAC,QAAQ;AAC7C,QAAA,IAAI,OAAO,QAAQ,KAAK,UAAU,EAAE;AAClC,YAAA,OAAO,QAAQ,CAAC,GAAG,CAAC;QACtB;QACA,OAAO,CAAC,CAAC,QAAQ;IACnB;IAEA,mBAAmB,CAAC,MAAmB,EAAE,GAAM,EAAA;AAC7C,QAAA,IAAI,MAAM,CAAC,YAAY,EAAE,OAAO,EAAE;AAChC,YAAA,MAAM,CAAC,YAAY,CAAC,OAAO,CAAC,GAAG,CAAC;QAClC;IACF;AAEA;;;AAGG;IACH,aAAa,CAAC,MAAmB,EAAE,GAAM,EAAA;QACvC,IAAI,CAAC,MAAM,CAAC,UAAU;AAAE,YAAA,OAAO,KAAK;AAEpC,QAAA,MAAM,OAAO,GAAG,MAAM,CAAC,UAAU,CAAC,OAAO;AACzC,QAAA,IAAI,OAAO,OAAO,KAAK,UAAU,EAAE;AACjC,YAAA,OAAO,OAAO,CAAC,GAAG,CAAC;QACrB;QACA,OAAO,OAAO,KAAK,KAAK;IAC1B;IAEA,WAAW,CAAC,MAAmB,EAAE,GAAM,EAAA;AACrC,QAAA,IAAI,CAAC,MAAM,CAAC,UAAU,EAAE,IAAI;AAAE,YAAA,OAAO,IAAI;QAEzC,IAAI,OAAO,MAAM,CAAC,UAAU,CAAC,IAAI,KAAK,UAAU,EAAE;YAChD,OAAO,MAAM,CAAC,UAAU,CAAC,IAAI,CAAC,GAAG,CAAC;QACpC;AACA,QAAA,OAAO,MAAM,CAAC,UAAU,CAAC,IAAI;IAC/B;AAEA;;AAEG;IACH,YAAY,CAAC,MAAmB,EAAE,GAAM,EAAA;QACtC,MAAM,WAAW,GAAG,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC;QACzC,IAAI,KAAK,GAAG,GAAG;AACf,QAAA,IAAI,WAAW,CAAC,MAAM,GAAG,CAAC,EAAE;YAC1B,KAAK,GAAG,IAAI,CAAC,YAAY,CAAC,GAAG,EAAE,WAAW,CAAC;QAC7C;aAAO;AACL,YAAA,KAAK,GAAI,GAA2B,CAAC,MAAM,CAAC,GAAG,CAAC;QAClD;AAEA,QAAA,IAAG,KAAK,KAAK,SAAS,IAAI,KAAK,KAAK,IAAI,IAAI,KAAK,KAAK,EAAE,EAAE;AACxD,YAAA,OAAO,GAAG;QACZ;AAEA,QAAA,IAAG,MAAM,CAAC,UAAU,EAAE;YACpB,OAAO,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,MAAM,CAAC,UAAU,CAAC;QACjD;AAEA,QAAA,OAAO,KAAK;IACd;IAEQ,YAAY,CAAC,GAAM,EAAE,WAAqB,EAAA;QAChD,IAAI,KAAK,GAAQ,GAAG;AACpB,QAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,WAAW,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;YAC3C,IAAI,KAAK,IAAI,IAAI;AAAE,gBAAA,OAAO,SAAS;YACnC,KAAK,GAAI,KAA6B,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC;QACxD;AACA,QAAA,OAAO,KAAK;IACd;IAEQ,SAAS,CAAC,KAAU,EAAE,UAAsB,EAAA;AAClD,QAAA,IAAI;AACF,YAAA,MAAM,IAAI,GAAG,UAAU,CAAC,IAAI,IAAI,EAAE;AAClC,YAAA,QAAQ,UAAU,CAAC,IAAI;AACrB,gBAAA,KAAK,MAAM;AACT,oBAAA,MAAM,QAAQ,GAAG,IAAI,QAAQ,CAAC,OAAO,CAAC;oBACtC,OAAO,QAAQ,CAAC,SAAS,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC,CAAC,IAAI,QAAQ,EAAE,IAAI,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC;AAEzE,gBAAA,KAAK,UAAU;AACb,oBAAA,MAAM,YAAY,GAAG,IAAI,YAAY,CAAC,OAAO,CAAC;AAC9C,oBAAA,OAAO,YAAY,CAAC,SAAS,CAC3B,KAAK,EACL,IAAI,CAAC,CAAC,CAAC,IAAI,KAAK,EAChB,IAAI,CAAC,CAAC,CAAC,IAAI,QAAQ,EACnB,IAAI,CAAC,CAAC,CAAC,IAAI,OAAO,EAClB,IAAI,CAAC,CAAC,CAAC,CACR;AAEH,gBAAA,KAAK,SAAS;AACZ,oBAAA,MAAM,WAAW,GAAG,IAAI,WAAW,CAAC,OAAO,CAAC;AAC5C,oBAAA,OAAO,WAAW,CAAC,SAAS,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC,CAAC,IAAI,OAAO,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC;AAElE,gBAAA,KAAK,SAAS;AACZ,oBAAA,MAAM,WAAW,GAAG,IAAI,WAAW,CAAC,OAAO,CAAC;AAC5C,oBAAA,OAAO,WAAW,CAAC,SAAS,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC,CAAC,IAAI,OAAO,CAAC;AAEzD,gBAAA,KAAK,WAAW;AACd,oBAAA,MAAM,aAAa,GAAG,IAAI,aAAa,EAAE;AACzC,oBAAA,OAAO,aAAa,CAAC,SAAS,CAAC,KAAK,CAAC;AAEvC,gBAAA,KAAK,WAAW;AACd,oBAAA,MAAM,aAAa,GAAG,IAAI,aAAa,EAAE;AACzC,oBAAA,OAAO,aAAa,CAAC,SAAS,CAAC,KAAK,CAAC;AAEvC,gBAAA,KAAK,WAAW;AACd,oBAAA,MAAM,aAAa,GAAG,IAAI,aAAa,EAAE;AACzC,oBAAA,OAAO,aAAa,CAAC,SAAS,CAAC,KAAK,CAAC;AAEvC,gBAAA,KAAK,OAAO;AACV,oBAAA,MAAM,SAAS,GAAG,IAAI,SAAS,EAAE;oBACjC,OAAO,SAAS,CAAC,SAAS,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;AAEhE,gBAAA,KAAK,MAAM;AACT,oBAAA,OAAO,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;AAElD,gBAAA,KAAK,QAAQ;AACX,oBAAA,IAAI,UAAU,CAAC,UAAU,EAAE;AACzB,wBAAA,MAAM,kBAAkB,GAAG,UAAU,CAAC,UAAU,EAAE;wBAClD,OAAO,kBAAkB,CAAC,SAAS,CAAC,KAAK,EAAE,IAAI,CAAC;oBAClD;AACA,oBAAA,OAAO,KAAK;AAEd,gBAAA;oBACE,OAAO,CAAC,IAAI,CAAC,CAAA,aAAA,EAAgB,UAAU,CAAC,IAAI,CAAA,CAAE,CAAC;AAC/C,oBAAA,OAAO,KAAK;;QAGlB;QAAE,OAAO,KAAK,EAAE;AACd,YAAA,OAAO,CAAC,KAAK,CAAC,CAAA,mBAAA,EAAsB,UAAU,CAAC,IAAI,CAAA,UAAA,EAAa,KAAK,CAAA,CAAE,EAAE,KAAK,CAAC;AAC/E,YAAA,OAAO,KAAK;QACd;IACF;wGAnJW,kBAAkB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA;AAAlB,IAAA,OAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,kBAAkB,cAFjB,MAAM,EAAA,CAAA;;4FAEP,kBAAkB,EAAA,UAAA,EAAA,CAAA;kBAH9B,UAAU;AAAC,YAAA,IAAA,EAAA,CAAA;AACV,oBAAA,UAAU,EAAE,MAAM;AACnB,iBAAA;;;MCqBY,oBAAoB,CAAA;;AAEtB,IAAA,mBAAmB,GAAG,MAAM,EAAC,kBAAqB,EAAC;;AAGnD,IAAA,WAAW,GAAG,KAAK,CAAC,QAAQ,CAAA,IAAA,SAAA,GAAA,CAAA,EAAA,SAAA,EAAA,aAAA,EAAA,CAAA,GAAA,EAAA,CAAA,CAAe,CAAC;AAC5C,IAAA,SAAS,GAAG,KAAK,CAAC,QAAQ,CAAA,IAAA,SAAA,GAAA,CAAA,EAAA,SAAA,EAAA,WAAA,EAAA,CAAA,GAAA,EAAA,CAAA,CAAO,CAAC;AAClC,IAAA,SAAS,GAAG,KAAK,CAAC,QAAQ,CAAA,IAAA,SAAA,GAAA,CAAA,EAAA,SAAA,EAAA,WAAA,EAAA,CAAA,GAAA,EAAA,CAAA,CAAW,CAAC;;IAG/C,MAAM,GAAG,MAAM,EAAQ;IACvB,IAAI,GAAG,MAAM,EAAK;IAClB,QAAQ,GAAG,MAAM,EAAK;IACtB,MAAM,GAAG,MAAM,EAAK;IACpB,MAAM,GAAG,MAAM,EAAK;;IAGX,gBAAgB,GAAG,QAAQ,CAAW,MAAM,IAAI,CAAC,WAAW,EAAE,CAAC,YAAY,CAAC,GAAG,CAAC,MAAM,IAAI,MAAM,CAAC,GAAG,CAAC,EAAA,IAAA,SAAA,GAAA,CAAA,EAAA,SAAA,EAAA,kBAAA,EAAA,CAAA,GAAA,EAAA,CAAA,CAAC;IACtG,UAAU,GAAG,QAAQ,CAAwB,MAAM,IAAI,kBAAkB,EAAK,EAAA,IAAA,SAAA,GAAA,CAAA,EAAA,SAAA,EAAA,YAAA,EAAA,CAAA,GAAA,EAAA,CAAA,CAAC;AAC/E,IAAA,SAAS,GAAG,SAAS,CAAe,YAAY,qDAAC;AAG1D,IAAA,WAAA,GAAA;QACE,MAAM,CAAC,MAAK;YACV,IAAI,CAAC,UAAU,EAAE,CAAC,IAAI,GAAG,IAAI,CAAC,SAAS,EAAE;AACxC,YAAA,MAAM,iBAAiB,GAAG,IAAI,CAAC,SAAS,EAAE;YAC1C,IAAI,iBAAiB,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,EAAE;AAC3C,gBAAA,IAAI,CAAC,UAAU,EAAE,CAAC,SAAS,GAAG,iBAAiB;YACjD;AACF,QAAA,CAAC,CAAC;IACJ;IAEA,aAAa,GAAA;QACX,MAAM,OAAO,GAAG,CAAC,GAAG,IAAI,CAAC,gBAAgB,EAAE,CAAC;AAC5C,QAAA,IAAI,IAAI,CAAC,UAAU,EAAE,EAAE;AACrB,YAAA,OAAO,CAAC,IAAI,CAAC,SAAS,CAAC;QACzB;AACA,QAAA,OAAO,OAAO;IAChB;IAEA,UAAU,GAAA;QACR,QACG,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC,OAAO,EAAE,OAAO;AACnC,YAAA,IAAI,CAAC,WAAW,EAAE,CAAC,OAAO,EAAE,SAAS;YACrC,IAAI,CAAC,WAAW,EAAE,CAAC,OAAO,EAAE,SAAS,KAAiB,KAAK;IAEjE;;IAGA,WAAW,CAAC,MAAiB,EAAE,GAAO,EAAA;AACpC,QAAA,MAAM,SAAS,GAAG,IAAI,CAAC,WAAW,EAAE,CAAC,OAAO,GAAG,MAAM,CAAC;AACtD,QAAA,IAAI,OAAO,SAAS,KAAK,UAAU,EAAE;AACnC,YAAA,OAAO,GAAG,KAAK,SAAS,GAAI,SAAiC,CAAC,GAAG,CAAC,GAAG,KAAK;QAC5E;QACA,OAAO,CAAC,CAAC,SAAS;IACpB;AAEA;;AAEG;IACH,aAAa,GAAA;AACX,QAAA,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE;IACpB;AAEA,IAAA,WAAW,CAAC,GAAM,EAAA;AAChB,QAAA,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC;IACrB;AAEA,IAAA,eAAe,CAAC,GAAM,EAAA;AACpB,QAAA,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC;IACzB;AAEA,IAAA,aAAa,CAAC,GAAM,EAAA;AAClB,QAAA,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC;IACvB;AAEA,IAAA,aAAa,CAAC,GAAM,EAAA;AAClB,QAAA,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC;IACvB;wGA9EW,oBAAoB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAApB,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,oBAAoB,qnBAmBc,YAAY,EAAA,WAAA,EAAA,IAAA,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EC9C3D,mgRAwIW,EAAA,MAAA,EAAA,CAAA,o+DAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EDzHP,aAAa,8IACb,cAAc,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,QAAA,EAAA,QAAA,EAAA,6BAAA,EAAA,QAAA,EAAA,CAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,gBAAA,EAAA,QAAA,EAAA,oBAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,eAAA,EAAA,QAAA,EAAA,mBAAA,EAAA,MAAA,EAAA,CAAA,iBAAA,EAAA,uBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,YAAA,EAAA,QAAA,EAAA,gBAAA,EAAA,MAAA,EAAA,CAAA,cAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,UAAA,EAAA,QAAA,EAAA,cAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,SAAA,EAAA,QAAA,EAAA,aAAA,EAAA,MAAA,EAAA,CAAA,kBAAA,EAAA,eAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,aAAA,EAAA,QAAA,EAAA,sCAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,OAAA,EAAA,QAAA,EAAA,wBAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,YAAA,EAAA,QAAA,EAAA,oCAAA,EAAA,QAAA,EAAA,CAAA,cAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,MAAA,EAAA,QAAA,EAAA,sBAAA,EAAA,QAAA,EAAA,CAAA,QAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,YAAA,EAAA,QAAA,EAAA,2BAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EACd,aAAa,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,IAAA,CAAA,OAAA,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,eAAA,EAAA,cAAA,EAAA,kBAAA,EAAA,qBAAA,EAAA,iBAAA,CAAA,EAAA,OAAA,EAAA,CAAA,eAAA,CAAA,EAAA,QAAA,EAAA,CAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EACb,eAAe,wtBACf,gBAAgB,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,UAAA,EAAA,QAAA,EAAA,cAAA,EAAA,MAAA,EAAA,CAAA,oBAAA,EAAA,4BAAA,EAAA,oBAAA,EAAA,qBAAA,EAAA,qBAAA,EAAA,yBAAA,EAAA,YAAA,EAAA,iBAAA,CAAA,EAAA,QAAA,EAAA,CAAA,YAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAChB,aAAa,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,IAAA,CAAA,OAAA,EAAA,QAAA,EAAA,UAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,SAAA,EAAA,SAAA,EAAA,UAAA,CAAA,EAAA,QAAA,EAAA,CAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EACb,kBAAkB,mSAClB,uBAAuB,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,0BAAA,EAAA,QAAA,EAAA,qBAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,aAAA,EAAA,YAAA,EAAA,WAAA,EAAA,WAAA,EAAA,OAAA,EAAA,MAAA,EAAA,aAAA,CAAA,EAAA,CAAA,EAAA,CAAA;;4FAKd,oBAAoB,EAAA,UAAA,EAAA,CAAA;kBAfhC,SAAS;AACE,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,cAAc,EAAA,OAAA,EACf;wBACP,aAAa;wBACb,cAAc;wBACd,aAAa;wBACb,eAAe;wBACf,gBAAgB;wBAChB,aAAa;wBACb,kBAAkB;wBAClB;AACD,qBAAA,EAAA,QAAA,EAAA,mgRAAA,EAAA,MAAA,EAAA,CAAA,o+DAAA,CAAA,EAAA;ipBAuB4C,YAAY,CAAA,EAAA,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,CAAA,EAAA,EAAA,CAAA;;MEnC9C,aAAa,CAAA;;AAEf,IAAA,WAAW,GAAG,KAAK,CAAC,QAAQ,sDAAe;AAC3C,IAAA,SAAS,GAAG,KAAK,CAAC,QAAQ,oDAAO;AACjC,IAAA,SAAS,GAAG,KAAK,CAAC,QAAQ,oDAAW;;IAG9C,MAAM,GAAG,MAAM,EAAQ;IACvB,IAAI,GAAG,MAAM,EAAK;IAClB,QAAQ,GAAG,MAAM,EAAK;IACtB,MAAM,GAAG,MAAM,EAAK;IACpB,MAAM,GAAG,MAAM,EAAK;AAEpB;;AAEG;IACH,aAAa,GAAA;AACX,QAAA,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE;IACpB;AAEA,IAAA,WAAW,CAAC,GAAM,EAAA;AAChB,QAAA,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC;IACrB;AAEA,IAAA,eAAe,CAAC,GAAM,EAAA;AACpB,QAAA,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC;IACzB;AAEA,IAAA,aAAa,CAAC,GAAM,EAAA;AAClB,QAAA,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC;IACvB;AAEA,IAAA,aAAa,CAAC,GAAM,EAAA;AAClB,QAAA,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC;IACvB;wGAlCW,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,SAAA,EAAA,IAAA,EAAA,aAAa,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,EAAA,WAAA,EAAA,EAAA,iBAAA,EAAA,aAAA,EAAA,UAAA,EAAA,aAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,SAAA,EAAA,EAAA,iBAAA,EAAA,WAAA,EAAA,UAAA,EAAA,WAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,SAAA,EAAA,EAAA,iBAAA,EAAA,WAAA,EAAA,UAAA,EAAA,WAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,OAAA,EAAA,EAAA,MAAA,EAAA,QAAA,EAAA,IAAA,EAAA,MAAA,EAAA,QAAA,EAAA,UAAA,EAAA,MAAA,EAAA,QAAA,EAAA,MAAA,EAAA,QAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,ECX1B,kUAUA,EAAA,MAAA,EAAA,CAAA,EAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EDHY,aAAa,+BAAE,oBAAoB,EAAA,QAAA,EAAA,cAAA,EAAA,MAAA,EAAA,CAAA,aAAA,EAAA,WAAA,EAAA,WAAA,CAAA,EAAA,OAAA,EAAA,CAAA,QAAA,EAAA,MAAA,EAAA,UAAA,EAAA,QAAA,EAAA,QAAA,CAAA,EAAA,CAAA,EAAA,CAAA;;4FAIlC,aAAa,EAAA,UAAA,EAAA,CAAA;kBANzB,SAAS;AACE,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,iBAAiB,EAAA,OAAA,EAClB,CAAC,aAAa,EAAE,oBAAoB,CAAC,EAAA,QAAA,EAAA,kUAAA,EAAA;;;ME6CnC,YAAY,CAAA;;AAEf,IAAA,IAAI,GAAG,MAAM,CAAC,iBAAiB,CAAC;AAGxC,IAAA,KAAK,GAAG,MAAM,CAAS,EAAE,iDAAC;AAC1B,IAAA,UAAU;AACV,IAAA,SAAS;AAET,IAAA,KAAK,GAAG,KAAK,CAAS,qBAAqB,iDAAC;AAC5C,IAAA,OAAO,GAAG,KAAK,CAAC,QAAQ,kDAAuB;AAC/C,IAAA,QAAQ,GAAG,KAAK,CAAU,KAAK,oDAAC;AAChC,IAAA,WAAW,GAAG,KAAK,CAAS,oCAAoC,uDAAC;AACjE,IAAA,KAAK,GAAG,KAAK,CAAS,EAAE,iDAAC;AACzB,IAAA,MAAM,GAAG,KAAK,CAAW,EAAE,kDAAC;AAC5B,IAAA,QAAQ,GAAG,KAAK,CAAU,KAAK,oDAAC;AAChC,IAAA,IAAI,GAAG,KAAK,CAAS,EAAE,gDAAC;AACxB,IAAA,KAAK,GAAG,KAAK,CAAS,EAAE,iDAAC;AAEzB,IAAA,UAAU,GAAG,MAAM,CAAC,KAAK,sDAAC;AAE1B,IAAA,YAAY,GAAG,SAAS,CAAa,cAAc,wDAAC;AAEpD,IAAA,eAAe,GAAG,IAAI,WAAW,CAAW,EAAE,CAAC;AAE/C,IAAA,WAAA,GAAA;QACE,iBAAiB,CAAC,MAAK;AACrB,YAAA,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,EAAE;YAEhC,IAAI,QAAQ,IAAI,IAAI,CAAC,OAAO,EAAE,CAAC,OAAO,EAAE;AACtC,gBAAA,IAAI,CAAC,OAAO,EAAE,CAAC,OAAO,CAAC,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC;gBAC5C,IAAI,CAAC,eAAe,CAAC,OAAO,CAAC,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC;YACpD;iBAAO,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC,OAAO,EAAE,CAAC,QAAQ,EAAE;AAC/C,gBAAA,IAAI,CAAC,OAAO,EAAE,CAAC,MAAM,CAAC,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC;gBAC3C,IAAI,CAAC,eAAe,CAAC,MAAM,CAAC,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC;YACnD;AACF,QAAA,CAAC,CAAC;IACJ;IAEQ,WAAW,GAAA;AACjB,QAAA,IAAI,IAAI,CAAC,OAAO,EAAE,CAAC,OAAO,EAAE;AAC1B,YAAA,IAAI,CAAC,eAAe,CAAC,SAAS,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC,MAAM,CAAC;QACvD;aAAO;AACL,YAAA,IAAI,CAAC,eAAe,CAAC,SAAS,CAAC,IAAI,CAAC;QACtC;AACA,QAAA,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE;IAC1B;AAEA,IAAA,aAAa,GAAG,MAAM,CAAC,MAAK;AAC1B,QAAA,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,EAAE;;QAE1B,SAAS,CAAC,MAAK;AACb,YAAA,IAAI,CAAC,OAAO,EAAE,CAAC,QAAQ,CAAC,KAAK,EAAE,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC;;AAGpD,YAAA,MAAM,SAAS,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC;AACxC,YAAA,IAAI,CAAC,eAAe,CAAC,QAAQ,CAAC,SAAS,EAAE,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC;YAE9D,IAAI,CAAC,WAAW,EAAE;AAClB,YAAA,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE;AAC1B,QAAA,CAAC,CAAC;AACJ,IAAA,CAAC,yDAAC;IAEF,QAAQ,GAAA;AACN,QAAA,IAAG,IAAI,CAAC,QAAQ,EAAE,EAAE;AAClB,YAAA,IAAI,CAAC,OAAO,EAAE,CAAC,OAAO,EAAE;AACxB,YAAA,IAAI,CAAC,eAAe,CAAC,OAAO,EAAE;QAChC;IACF;IAEA,gBAAgB,GAAA;AACd,QAAA,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,EAAE;AACpB,YAAA,IAAI,CAAC,OAAO,EAAE,CAAC,aAAa,EAAE;AAC9B,YAAA,IAAI,CAAC,eAAe,CAAC,aAAa,EAAE;YACpC,IAAI,CAAC,WAAW,EAAE;AAClB,YAAA,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE;AACxB,YAAA,IAAI,CAAC,SAAS,IAAI;YAClB,IAAI,CAAC,YAAY,EAAE,EAAE,aAAa,CAAC,KAAK,EAAE;QAC5C;IACF;AAEA,IAAA,aAAa,CAAC,KAAU,EAAA;AACtB,QAAA,MAAM,MAAM,GAAqB,KAAK,CAAC,MAAM;AAC7C,QAAA,MAAM,KAAK,GAAoB,MAAM,CAAC,KAAK;AAC3C,QAAA,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC;AACvB,QAAA,MAAM,CAAC,KAAK,GAAG,EAAE;IACnB;AAEA,IAAA,UAAU,CAAC,KAAgB,EAAA;QACzB,KAAK,CAAC,cAAc,EAAE;AACtB,QAAA,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC;IAC3B;AAEA,IAAA,WAAW,CAAC,KAAgB,EAAA;QAC1B,KAAK,CAAC,cAAc,EAAE;AACtB,QAAA,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,KAAK,CAAC;IAC5B;AAEA,IAAA,MAAM,CAAC,KAAgB,EAAA;QACrB,KAAK,CAAC,cAAc,EAAE;AACtB,QAAA,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,KAAK,CAAC;AAC1B,QAAA,IAAI,CAAC,SAAS,IAAI;AAClB,QAAA,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,EAAE;AACpB,YAAA,MAAM,KAAK,GAAG,KAAK,CAAC,YAAY,EAAE,KAAK;;AAGvC,YAAA,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC;QACzB;IACF;AAEA,IAAA,WAAW,CAAC,KAAkC,EAAA;QAC5C,IAAI,KAAK,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE;AAC7B,YAAA,IAAI,QAAgB;AAEpB,YAAA,IAAI,IAAI,CAAC,QAAQ,EAAE,EAAE;AACnB,gBAAA,MAAM,YAAY,GAAG,IAAI,CAAC,KAAK,EAAE;gBACjC,MAAM,QAAQ,GAAG,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC;gBAClC,QAAQ,GAAG,CAAC,GAAG,YAAY,EAAE,GAAG,QAAQ,CAAC;YAC3C;iBAAO;AACL,gBAAA,QAAQ,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;YACvB;AAEA,YAAA,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,QAAQ,CAAC;AACxB,YAAA,IAAI,CAAC,UAAU,GAAG,QAAQ,CAAC;AAC3B,YAAA,IAAI,CAAC,OAAO,EAAE,CAAC,aAAa,EAAE;AAC9B,YAAA,IAAI,CAAC,eAAe,CAAC,aAAa,EAAE;AACpC,YAAA,IAAI,CAAC,OAAO,EAAE,CAAC,WAAW,EAAE;AAC5B,YAAA,IAAI,CAAC,eAAe,CAAC,WAAW,EAAE;QACpC;IACF;AAEA,IAAA,UAAU,CAAC,KAAgC,EAAA;QACzC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,IAAI,EAAE,CAAC;IAC7B;AAEA,IAAA,gBAAgB,CAAC,EAAO,EAAA;AACtB,QAAA,IAAI,CAAC,UAAU,GAAG,EAAE;IACtB;AAEA,IAAA,iBAAiB,CAAC,EAAO,EAAA;AACvB,QAAA,IAAI,CAAC,SAAS,GAAG,EAAE;IACrB;AAEA,IAAA,iBAAiB,CAAC,IAAU,EAAA;AAC1B,QAAA,MAAM,QAAQ,GAAG,IAAI,CAAC,KAAK,EAAE,CAAC,MAAM,CAAC,CAAC,IAAI,KAAK,IAAI,KAAK,IAAI,CAAC;AAC7D,QAAA,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,QAAQ,CAAC;AACxB,QAAA,IAAI,CAAC,UAAU,GAAG,QAAQ,CAAC;AAC3B,QAAA,IAAI,CAAC,OAAO,EAAE,CAAC,aAAa,EAAE;AAC9B,QAAA,IAAI,CAAC,eAAe,CAAC,aAAa,EAAE;AACpC,QAAA,IAAI,CAAC,OAAO,EAAE,CAAC,WAAW,EAAE;AAC5B,QAAA,IAAI,CAAC,eAAe,CAAC,WAAW,EAAE;IACpC;IAEA,SAAS,GAAA;AACP,QAAA,OAAO,IAAI,CAAC,MAAM,EAAE,CAAC,IAAI,EAAE;IAC7B;AAEA,IAAA,gBAAgB,CAAC,KAAa,EAAA;AAC5B,QAAA,OAAO,CAAC,KAAK,GAAG,IAAI,GAAG,IAAI,EAAE,OAAO,CAAC,CAAC,CAAC;IACzC;wGA/JW,YAAY,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAAZ,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,YAAY,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,gBAAA,EAAA,MAAA,EAAA,EAAA,KAAA,EAAA,EAAA,iBAAA,EAAA,OAAA,EAAA,UAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,OAAA,EAAA,EAAA,iBAAA,EAAA,SAAA,EAAA,UAAA,EAAA,SAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,QAAA,EAAA,EAAA,iBAAA,EAAA,UAAA,EAAA,UAAA,EAAA,UAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,WAAA,EAAA,EAAA,iBAAA,EAAA,aAAA,EAAA,UAAA,EAAA,aAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,KAAA,EAAA,EAAA,iBAAA,EAAA,OAAA,EAAA,UAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,MAAA,EAAA,EAAA,iBAAA,EAAA,QAAA,EAAA,UAAA,EAAA,QAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,QAAA,EAAA,EAAA,iBAAA,EAAA,UAAA,EAAA,UAAA,EAAA,UAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,IAAA,EAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,UAAA,EAAA,MAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,KAAA,EAAA,EAAA,iBAAA,EAAA,OAAA,EAAA,UAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,SAAA,EARZ;AACT,YAAA;AACE,gBAAA,OAAO,EAAE,iBAAiB;AAC1B,gBAAA,WAAW,EAAE,UAAU,CAAC,MAAM,YAAY,CAAC;AAC3C,gBAAA,KAAK,EAAE,IAAI;AACZ,aAAA;AACF,SAAA,EAAA,WAAA,EAAA,CAAA,EAAA,YAAA,EAAA,cAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,CAAA,cAAA,CAAA,EAAA,WAAA,EAAA,IAAA,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EClDH,63CA2CiB,EAAA,MAAA,EAAA,CAAA,quDAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EDXb,YAAY,8BACZ,eAAe,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EACf,aAAa,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,IAAA,CAAA,OAAA,EAAA,QAAA,EAAA,UAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,SAAA,EAAA,SAAA,EAAA,UAAA,CAAA,EAAA,QAAA,EAAA,CAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EACb,oBAAoB,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EACpB,cAAc,myBACd,gBAAgB,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAChB,kBAAkB,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAF,IAAA,CAAA,YAAA,EAAA,QAAA,EAAA,gBAAA,EAAA,MAAA,EAAA,CAAA,oBAAA,EAAA,OAAA,EAAA,YAAA,EAAA,YAAA,EAAA,iBAAA,EAAA,WAAA,CAAA,EAAA,QAAA,EAAA,CAAA,cAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,QAAA,EAAA,QAAA,EAAA,WAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,OAAA,EAAA,QAAA,EAAA,UAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,IAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,QAAA,EAAA,QAAA,EAAA,uBAAA,EAAA,MAAA,EAAA,CAAA,IAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAClB,mBAAmB,yTACnB,cAAc,EAAA,CAAA,EAAA,CAAA;;4FAYL,YAAY,EAAA,UAAA,EAAA,CAAA;kBAvBxB,SAAS;AACE,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,gBAAgB,EAAA,OAAA,EACjB;wBACP,YAAY;wBACZ,eAAe;wBACf,aAAa;wBACb,oBAAoB;wBACpB,cAAc;wBACd,gBAAgB;wBAChB,kBAAkB;wBAClB,mBAAmB;wBACnB,cAAc;qBACf,EAAA,SAAA,EAGU;AACT,wBAAA;AACE,4BAAA,OAAO,EAAE,iBAAiB;AAC1B,4BAAA,WAAW,EAAE,UAAU,CAAC,kBAAkB,CAAC;AAC3C,4BAAA,KAAK,EAAE,IAAI;AACZ,yBAAA;AACF,qBAAA,EAAA,QAAA,EAAA,63CAAA,EAAA,MAAA,EAAA,CAAA,quDAAA,CAAA,EAAA;y6BAuBoC,cAAc,EAAA,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,CAAA,EAAA,EAAA,CAAA;;AEzE9C,MAAM,iBAAiB,GAAG,CAAC,MAAc,EAAE,KAAa,KAAa;IAC1E,MAAM,gBAAgB,GAAG;AACtB,SAAA,WAAW;SACX,SAAS,CAAC,KAAK;AACf,SAAA,OAAO,CAAC,kBAAkB,EAAE,EAAE,CAAC;IAClC,MAAM,eAAe,GAAG;AACrB,SAAA,WAAW;SACX,SAAS,CAAC,KAAK;AACf,SAAA,OAAO,CAAC,kBAAkB,EAAE,EAAE,CAAC;AAClC,IAAA,OAAO,gBAAgB,CAAC,QAAQ,CAAC,eAAe,CAAC;AACnD,CAAC;AAEM,MAAM,YAAY,GAAG,CAAC,GAAW,KAAY;AAClD,IAAA,OAAO,kBAAkB,CACvB,IAAI,CAAC,GAAG;SACL,KAAK,CAAC,EAAE;SACR,GAAG,CAAC,UAAU,CAAC,EAAA;QACd,OAAO,GAAG,GAAG,CAAC,IAAI,GAAG,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC;AAC9D,IAAA,CAAC;AACA,SAAA,IAAI,CAAC,EAAE,CAAC,CACZ;AACH,CAAC;;MCIY,cAAc,CAAA;;AAGhB,IAAA,KAAK,GAAG,KAAK,CAAC,QAAQ,gDAAU;AAChC,IAAA,OAAO,GAAG,KAAK,CAAC,QAAQ,kDAAO;AAC/B,IAAA,iBAAiB,GAAG,KAAK,CAAC,QAAQ,4DAAwB;AAC1D,IAAA,OAAO,GAAG,KAAK,CAAC,QAAQ,kDAAe;AACvC,IAAA,SAAS,GAAG,KAAK,CAAC,QAAQ,oDAAW;AACrC,IAAA,WAAW,GAAG,KAAK,CAAS,EAAE,uDAAC;AAC/B,IAAA,UAAU,GAAG,KAAK,CAAqB,MAAM,sDAAC;AAC9C,IAAA,QAAQ,GAAG,KAAK,CAAU,KAAK,oDAAC;AAChC,IAAA,QAAQ,GAAG,KAAK,CAAU,KAAK,oDAAC;AAChC,IAAA,SAAS,GAAG,KAAK,CAAU,KAAK,qDAAC;AACjC,IAAA,KAAK,GAAG,KAAK,CAAS,EAAE,iDAAC;AACzB,IAAA,KAAK,GAAG,KAAK,CAAS,EAAE,iDAAC;;IAGlC,eAAe,GAAG,MAAM,EAAO;;AAGtB,IAAA,SAAS,GAAG,SAAS,CAAC,QAAQ,CAAY,WAAW,CAAC;AACtD,IAAA,WAAW,GAAG,SAAS,CAAa,aAAa,uDAAC;AAE3D,IAAA,WAAA,GAAA;QACE,iBAAiB,CAAC,MAAK;AACrB,YAAA,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,EAAE;AAChC,YAAA,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,EAAE;AAE9B,YAAA,IAAI,QAAQ,IAAI,OAAO,CAAC,OAAO,EAAE;gBAC/B,OAAO,CAAC,OAAO,CAAC,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC;YACvC;AAAO,iBAAA,IAAI,CAAC,QAAQ,IAAI,OAAO,CAAC,QAAQ,EAAE;gBACxC,OAAO,CAAC,MAAM,CAAC,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC;YACtC;AACF,QAAA,CAAC,CAAC;IACJ;AAEA,IAAA,cAAc,CAAC,MAAe,EAAA;QAC5B,IAAI,MAAM,EAAE;YACV,IAAI,CAAC,iBAAiB,EAAE;YACxB,UAAU,CAAC,MAAK;gBACd,MAAM,KAAK,GAAG,IAAI,CAAC,SAAS,EAAE,CAAC,KAAK,EAAE,aAAa;gBACnD,IAAI,KAAK,EAAE;AACT,oBAAA,KAAK,CAAC,SAAS,GAAG,CAAC;gBACrB;AACF,YAAA,CAAC,CAAC;QACJ;IACF;IAEA,eAAe,CAAC,MAAS,EAAE,KAAa,EAAA;AACtC,QAAA,OAAO,iBAAiB,CAAC,MAAM,CAAC,IAAI,CAAC,iBAAiB,EAAE,CAAC,cAAc,CAAC,MAAM,CAAC,CAAC,EAAE,KAAK,CAAC;IAC1F;IAEA,YAAY,GAAA;AACV,QAAA,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,EAAE,GAAG,EAAE,GAAG,IAAI;AAC5C,QAAA,IAAI,CAAC,OAAO,EAAE,CAAC,QAAQ,CAAC,QAAQ,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC;AACtD,QAAA,IAAI,CAAC,OAAO,EAAE,CAAC,aAAa,EAAE;AAC9B,QAAA,IAAI,CAAC,OAAO,EAAE,CAAC,sBAAsB,EAAE;AACvC,QAAA,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,QAAQ,CAAC;IACrC;AAEA,IAAA,iBAAiB,CAAC,KAAsB,EAAA;AACtC,QAAA,IAAG,IAAI,CAAC,QAAQ,EAAE,EAAE;AAClB,YAAA,MAAM,MAAM,GAAG,KAAK,CAAC,KAAY;AACjC,YAAA,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,MAAM,CAAC;QACnC;aAAO;AACL,YAAA,MAAM,KAAK,GAAG,KAAK,CAAC,KAAU;AAC9B,YAAA,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,KAAK,CAAC;QAClC;IACF;IAEA,iBAAiB,GAAA;AACf,QAAA,MAAM,cAAc,GAAG,IAAI,CAAC,WAAW,EAAE;QACzC,IAAI,cAAc,EAAE;AAClB,YAAA,cAAc,CAAC,aAAa,CAAC,KAAK,GAAG,EAAE;AACvC,YAAA,cAAc,CAAC,aAAa,CAAC,KAAK,EAAE;QACtC;IACF;wGA5EW,cAAc,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAAd,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,cAAc,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,kBAAA,EAAA,MAAA,EAAA,EAAA,KAAA,EAAA,EAAA,iBAAA,EAAA,OAAA,EAAA,UAAA,EAAA,OAAA,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,IAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,iBAAA,EAAA,EAAA,iBAAA,EAAA,mBAAA,EAAA,UAAA,EAAA,mBAAA,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,IAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,SAAA,EAAA,EAAA,iBAAA,EAAA,WAAA,EAAA,UAAA,EAAA,WAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,WAAA,EAAA,EAAA,iBAAA,EAAA,aAAA,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,YAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,QAAA,EAAA,EAAA,iBAAA,EAAA,UAAA,EAAA,UAAA,EAAA,UAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,QAAA,EAAA,EAAA,iBAAA,EAAA,UAAA,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,WAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,KAAA,EAAA,EAAA,iBAAA,EAAA,OAAA,EAAA,UAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,KAAA,EAAA,EAAA,iBAAA,EAAA,OAAA,EAAA,UAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,OAAA,EAAA,EAAA,eAAA,EAAA,iBAAA,EAAA,EAAA,WAAA,EAAA,CAAA,EAAA,YAAA,EAAA,WAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,CAAA,WAAA,CAAA,EAAA,WAAA,EAAA,IAAA,EAAA,QAAA,EAAA,IAAA,EAAA,EAAA,EAAA,YAAA,EAAA,aAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,CAAA,aAAA,CAAA,EAAA,WAAA,EAAA,IAAA,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,ECzB3B,ozDAyCiB,EAAA,MAAA,EAAA,CAAA,ogBAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,ED3Bb,cAAc,q3BACd,eAAe,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,SAAA,EAAA,QAAA,EAAA,YAAA,EAAA,MAAA,EAAA,CAAA,kBAAA,EAAA,YAAA,EAAA,UAAA,EAAA,eAAA,EAAA,UAAA,EAAA,8BAAA,EAAA,aAAA,EAAA,UAAA,EAAA,UAAA,EAAA,wBAAA,EAAA,aAAA,EAAA,OAAA,EAAA,YAAA,EAAA,iBAAA,EAAA,mBAAA,EAAA,2BAAA,EAAA,gBAAA,EAAA,IAAA,EAAA,YAAA,EAAA,0BAAA,CAAA,EAAA,OAAA,EAAA,CAAA,cAAA,EAAA,QAAA,EAAA,QAAA,EAAA,iBAAA,EAAA,aAAA,CAAA,EAAA,QAAA,EAAA,CAAA,WAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,SAAA,EAAA,QAAA,EAAA,YAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,IAAA,EAAA,UAAA,CAAA,EAAA,OAAA,EAAA,CAAA,mBAAA,CAAA,EAAA,QAAA,EAAA,CAAA,WAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EACf,aAAa,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAG,IAAA,CAAA,OAAA,EAAA,QAAA,EAAA,UAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,SAAA,EAAA,SAAA,EAAA,UAAA,CAAA,EAAA,QAAA,EAAA,CAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EACb,eAAe,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,EAAA,CAAA,aAAA,EAAA,QAAA,EAAA,sFAAA,EAAA,QAAA,EAAA,CAAA,WAAA,EAAA,WAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EACf,kBAAkB,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAClB,mBAAmB,yTACnB,wBAAwB,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,EAAA,CAAA,kBAAA,EAAA,QAAA,EAAA,mCAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,MAAA,EAAA,OAAA,EAAA,UAAA,EAAA,aAAA,CAAA,EAAA,QAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,CAAA,EAAA,CAAA;;4FAKf,cAAc,EAAA,UAAA,EAAA,CAAA;kBAd1B,SAAS;AACE,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,kBAAkB,EAAA,OAAA,EACnB;wBACP,cAAc;wBACd,eAAe;wBACf,aAAa;wBACb,eAAe;wBACf,kBAAkB;wBAClB,mBAAmB;wBACnB,wBAAwB;AAC3B,qBAAA,EAAA,QAAA,EAAA,ozDAAA,EAAA,MAAA,EAAA,CAAA,ogBAAA,CAAA,EAAA;AAwBoD,SAAA,CAAA,EAAA,cAAA,EAAA,MAAA,EAAA,EAAA,cAAA,EAAA,EAAA,KAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,KAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,KAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,CAAA,EAAA,OAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,KAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,KAAA,EAAA,SAAA,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,CAAA,EAAA,iBAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,KAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,KAAA,EAAA,mBAAA,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,CAAA,EAAA,OAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,KAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,KAAA,EAAA,SAAA,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,CAAA,EAAA,SAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,KAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,KAAA,EAAA,WAAA,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,CAAA,EAAA,WAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,KAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,KAAA,EAAA,aAAA,EAAA,QAAA,EAAA,KAAA,EAAA,CAAA,EAAA,CAAA,EAAA,UAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,KAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,KAAA,EAAA,YAAA,EAAA,QAAA,EAAA,KAAA,EAAA,CAAA,EAAA,CAAA,EAAA,QAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,KAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,KAAA,EAAA,UAAA,EAAA,QAAA,EAAA,KAAA,EAAA,CAAA,EAAA,CAAA,EAAA,QAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,KAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,KAAA,EAAA,UAAA,EAAA,QAAA,EAAA,KAAA,EAAA,CAAA,EAAA,CAAA,EAAA,SAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,KAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,KAAA,EAAA,WAAA,EAAA,QAAA,EAAA,KAAA,EAAA,CAAA,EAAA,CAAA,EAAA,KAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,KAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,KAAA,EAAA,OAAA,EAAA,QAAA,EAAA,KAAA,EAAA,CAAA,EAAA,CAAA,EAAA,KAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,KAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,KAAA,EAAA,OAAA,EAAA,QAAA,EAAA,KAAA,EAAA,CAAA,EAAA,CAAA,EAAA,eAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,MAAA,EAAA,IAAA,EAAA,CAAA,iBAAA,CAAA,EAAA,CAAA,EAAA,SAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,SAAA,EAAA,IAAA,EAAA,CAAA,WAAW,qEACjB,aAAa,EAAA,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,CAAA,EAAA,EAAA,CAAA;;MEX/C,mCAAmC,CAAA;;AAEtC,IAAA,eAAe,GAAG,MAAM,EAAC,iBAA4D,EAAC;AACrF,IAAA,KAAK,GAAG,MAAM,CAiBpB,qBAAqB,CAAC;;AAGjB,IAAA,gBAAgB,GAAG,MAAM,CAAM,EAAE,4DAAC;AACnC,IAAA,UAAU,GAAG,MAAM,CAAS,IAAI,CAAC,KAAK,CAAC,OAAO,EAAE,CAAC,KAAK,IAAI,EAAE,sDAAC;AAE5D,IAAA,OAAO,GAAG,IAAI,OAAO,EAAQ;AAC5B,IAAA,cAAc,GAAG,QAAQ,CAChC,YAAY,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,IAAI,CAChC,YAAY,CAAC,GAAG,CAAC,EACjB,oBAAoB,EAAE,CACvB,EACD,EAAE,YAAY,EAAE,IAAI,CAAC,KAAK,CAAC,OAAO,EAAE,CAAC,KAAK,IAAI,EAAE,EAAE,CACnD;;IAGO,wBAAwB,GAAA;QAC9B,OAAO,IAAI,CAAC,KAAK,CAAC,aAAa,CAAC,GAAG,CAAC,IAAI,IAAI,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,QAAmB,CAAC,CAAC;IAC1F;IAEO,gBAAgB,GAAG,MAAM,CAAM,IAAI,CAAC,KAAK,CAAC,aAAa,EAAA,IAAA,SAAA,GAAA,CAAA,EAAA,SAAA,EAAA,kBAAA,EAAA,CAAA,GAAA,EAAA,CAAA,CAAC;IACxD,sBAAsB,GAAG,MAAM,CAAe,IAAI,CAAC,wBAAwB,EAAE,kEAAC;;AAG5E,IAAA,aAAa,GAAG,SAAS,CAAmB,eAAe,yDAAC;;IAGrE,eAAe,GAAG,UAAU,CAAC;QAC3B,MAAM,EAAE,MAAK;AACX,YAAA,MAAM,OAAO,GAAM;AACjB,gBAAA,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,EAAE;AACvB,gBAAA,KAAK,EAAE,IAAI,CAAC,cAAc,EAAE;aAC7B;YACD,SAAS,CAAC,MAAM,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC;AACpC,YAAA,OAAO,OAAO;QAChB,CAAC;QACD,MAAM,EAAE,CAAC,EAAE,MAAM,EAAE,KAAK,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,IAAI,CACtD,SAAS,CAAC,IAAI,CAAC,OAAO,CAAC,CACxB;QACD,YAAY,EAAE,EAAE,KAAK,EAAE,EAAE,EAAE,KAAK,EAAE,CAAC,EAAuB;AAC3D,KAAA,CAAC;;AAGO,IAAA,SAAS,GAAG,QAAQ,CAAU,MAAM,IAAI,CAAC,eAAe,CAAC,SAAS,EAAE,qDAAC;IACrE,OAAO,GAAG,QAAQ,CAAM,MAAM,IAAI,CAAC,gBAAgB,EAAE,EAAA,IAAA,SAAA,GAAA,CAAA,EAAA,SAAA,EAAA,SAAA,EAAA,CAAA,GAAA,EAAA,CAAA,CAAC;AACtD,IAAA,KAAK,GAAG,QAAQ,CAAS,MAAM,IAAI,CAAC,eAAe,CAAC,KAAK,EAAE,CAAC,KAAK,iDAAC;;AAG3E,IAAA,aAAa,GAAG,MAAM,CAAC,MAAK;QAC1B,MAAM,aAAa,GAAG,IAAI,CAAC,eAAe,CAAC,KAAK,EAAE;QAClD,MAAM,WAAW,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,EAAE,CAAC,UAAU;AACnD,QAAA,IAAI,WAAW,KAAK,CAAC,EAAE;YACrB,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,aAAa,CAAC,KAAK,CAAC;QAChD;aAAO;YACL,IAAI,CAAC,gBAAgB,CAAC,MAAM,CAAC,CAAC,OAAO,KAAK,CAAC,GAAG,OAAO,EAAE,GAAG,aAAa,CAAC,KAAK,CAAC,CAAC;QACjF;AACF,IAAA,CAAC,yDAAC;AAEF,IAAA,WAAA,GAAA;;AAEE,QAAA,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,OAAO,MAAM;AACtC,YAAA,GAAG,OAAO;AACV,YAAA,UAAU,EAAE;AACb,SAAA,CAAC,CAAC;;AAEH,QAAA,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,EAAE,CAAC;IAC/B;AAEA,IAAA,QAAQ,CAAC,GAAmB,EAAA;QAC1B,IAAG,IAAI,CAAC,SAAS,EAAE;YAAE;AAErB,QAAA,MAAM,SAAS,GAAG,GAAG,CAAC,SAAS;AAC/B,QAAA,MAAM,YAAY,GAAG,GAAG,CAAC,YAAY;AACrC,QAAA,MAAM,YAAY,GAAG,GAAG,CAAC,YAAY;QACrC,MAAM,cAAc,GAAG,GAAG;QAC1B,MAAM,cAAc,GAAG,SAAS,GAAG,YAAY,GAAG,cAAc,IAAI,YAAY;QAEhF,MAAM,aAAa,GAAG,IAAI,CAAC,OAAO,EAAE,CAAC,MAAM;AAC3C,QAAA,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,EAAE;AAE1B,QAAA,IAAG,cAAc,IAAI,KAAK,GAAG,aAAa,EAAE;AAC1C,YAAA,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,OAAO,MAAM;AACtC,gBAAA,GAAG,OAAO;AACV,gBAAA,UAAU,EAAE,OAAO,CAAC,UAAU,GAAG;AAClC,aAAA,CAAC,CAAC;QACL;IACF;IAEA,aAAa,CAAC,KAAY,EAAE,GAAmB,EAAA;AAC7C,QAAA,MAAM,KAAK,GAAI,KAAK,CAAC,MAA2B,CAAC,KAAK;AACtD,QAAA,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,KAAK,CAAC;AAC1B,QAAA,GAAG,CAAC,SAAS,GAAG,CAAC;QAEjB,IAAI,IAAI,CAAC,KAAK,CAAC,OAAO,EAAE,CAAC,UAAU,KAAK,CAAC,EAAE;AACzC,YAAA,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,OAAO,MAAM;AACtC,gBAAA,GAAG,OAAO;AACV,gBAAA,UAAU,EAAE;AACb,aAAA,CAAC,CAAC;QACL;IACF;AAEA,IAAA,YAAY,CAAC,KAAuB,EAAA;AAClC,QAAA,KAAK,CAAC,KAAK,GAAG,EAAE;AAChB,QAAA,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;QACvB,IAAI,IAAI,CAAC,KAAK,CAAC,OAAO,EAAE,CAAC,UAAU,KAAK,CAAC,EAAE;AACzC,YAAA,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,OAAO,MAAM;AACtC,gBAAA,GAAG,OAAO;AACV,gBAAA,UAAU,EAAE;AACb,aAAA,CAAC,CAAC;QACL;IACF;AAGA,IAAA,iBAAiB,CAAC,KAA6B,EAAA;AAC7C,QAAA,IAAI,IAAI,CAAC,KAAK,CAAC,QAAQ,EAAE;YACvB,MAAM,sBAAsB,GAAG,KAAK,CAAC,MAAM,CAAC,eAAe,CAAC,QAAQ,CAAC,GAAG,CAAC,MAAM,IAAI,MAAM,CAAC,KAAK,CAAC;AAChG,YAAA,MAAM,gBAAgB,GAAG,IAAI,CAAC,OAAO,EAAE,CAAC,MAAM,CAAC,MAAM,IAAI,sBAAsB,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC;AAC7H,YAAA,IAAI,CAAC,gBAAgB,CAAC,MAAM,CAAC,MAAK;AAChC,gBAAA,OAAO,gBAAgB;AACzB,YAAA,CAAC,CAAC;QACJ;aAAO;YACL,MAAM,mBAAmB,GAAG,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,KAAK;YAClD,MAAM,cAAc,GAAG,IAAI,CAAC,OAAO,EAAE,CAAC,IAAI,CAAC,MAAM,IAAI,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,mBAAmB,CAAC;YAC/G,IAAI,CAAC,eAAe,CAAC,OAAO,CAAC,CAAC,cAAc,CAAC,CAAC;QAChD;IACF;AAEA,IAAA,UAAU,CAAC,WAAgB,EAAA;QACzB,OAAO,IAAI,CAAC,sBAAsB,EAAE,CAAC,QAAQ,CAAC,WAAW,CAAC;IAC5D;IAEA,YAAY,GAAA;AACV,QAAA,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,EAAE,CAAC;AAC7B,QAAA,IAAI,CAAC,sBAAsB,CAAC,GAAG,CAAC,EAAE,CAAC;AACnC,QAAA,MAAM,IAAI,GAAG,IAAI,CAAC,aAAa,EAAE;QACjC,IAAI,IAAI,EAAE;YACR,IAAI,CAAC,WAAW,EAAE;QACpB;IACF;IAEA,4BAA4B,GAAA;QAC1B,IAAI,CAAC,eAAe,CAAC,OAAO,CAAC,IAAI,CAAC,gBAAgB,EAAE,CAAC;IACvD;wGAlKW,mCAAmC,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;4FAAnC,mCAAmC,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,+BAAA,EAAA,WAAA,EAAA,CAAA,EAAA,YAAA,EAAA,eAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,CAAA,eAAA,CAAA,EAAA,WAAA,EAAA,IAAA,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,ECnChD,4/GAgFM,EAAA,MAAA,EAAA,CAAA,gmDAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,ED5DF,eAAe,0iBACf,gBAAgB,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAN,IAAA,CAAA,UAAA,EAAA,QAAA,EAAA,aAAA,EAAA,MAAA,EAAA,CAAA,UAAA,EAAA,OAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAChB,YAAY,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,GAAA,CAAA,gBAAA,EAAA,QAAA,EAAA,oBAAA,EAAA,MAAA,EAAA,CAAA,yBAAA,EAAA,kBAAA,EAAA,0BAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EACZ,kBAAkB,ifAClB,aAAa,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAI,IAAA,CAAA,OAAA,EAAA,QAAA,EAAA,UAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,SAAA,EAAA,SAAA,EAAA,UAAA,CAAA,EAAA,QAAA,EAAA,CAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EACb,cAAc,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAH,IAAA,CAAA,QAAA,EAAA,QAAA,EAAA,yHAAA,EAAA,MAAA,EAAA,CAAA,UAAA,EAAA,IAAA,EAAA,aAAA,EAAA,MAAA,EAAA,UAAA,EAAA,MAAA,EAAA,mBAAA,EAAA,kBAAA,EAAA,OAAA,EAAA,UAAA,EAAA,qBAAA,CAAA,EAAA,QAAA,EAAA,CAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EACd,cAAc,kdACd,oBAAoB,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAK,IAAA,CAAA,cAAA,EAAA,QAAA,EAAA,kBAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,OAAA,EAAA,aAAA,EAAA,MAAA,CAAA,EAAA,OAAA,EAAA,CAAA,cAAA,CAAA,EAAA,QAAA,EAAA,CAAA,gBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EACpB,aAAa,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,gBAAA,EAAA,QAAA,EAAA,oBAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,aAAA,EAAA,UAAA,EAAA,8BAAA,EAAA,UAAA,CAAA,EAAA,OAAA,EAAA,CAAA,iBAAA,CAAA,EAAA,QAAA,EAAA,CAAA,kBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,aAAA,EAAA,QAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,CAAA,gBAAA,EAAA,kBAAA,EAAA,OAAA,EAAA,OAAA,EAAA,UAAA,CAAA,EAAA,OAAA,EAAA,CAAA,gBAAA,CAAA,EAAA,QAAA,EAAA,CAAA,eAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EACb,mBAAmB,EAAA,CAAA,EAAA,aAAA,EAAA,EAAA,CAAA,iBAAA,CAAA,IAAA,EAAA,CAAA;;4FAMV,mCAAmC,EAAA,UAAA,EAAA,CAAA;kBAlB/C,SAAS;AACE,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,+BAA+B,EAAA,OAAA,EAChC;wBACP,eAAe;wBACf,gBAAgB;wBAChB,YAAY;wBACZ,kBAAkB;wBAClB,aAAa;wBACb,cAAc;wBACd,cAAc;wBACd,oBAAoB;wBACpB,aAAa;wBACb,mBAAmB;qBACpB,EAAA,aAAA,EAGc,iBAAiB,CAAC,IAAI,EAAA,QAAA,EAAA,4/GAAA,EAAA,MAAA,EAAA,CAAA,gmDAAA,CAAA,EAAA;qGA8CgB,eAAe,EAAA,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,CAAA,EAAA,EAAA,CAAA;;ME/CzD,kBAAkB,CAAA;;AAErB,IAAA,YAAY,GAAG,MAAM,CAAC,cAAc,CAAC;AACrC,IAAA,IAAI,GAAG,MAAM,CAAC,iBAAiB,CAAC;;AAG/B,IAAA,KAAK,GAAG,KAAK,CAAC,QAAQ,gDAAU;AAChC,IAAA,KAAK,GAAG,KAAK,CAAS,EAAE,iDAAC;AACzB,IAAA,QAAQ,GAAG,KAAK,CAAC,QAAQ,mDAAiD;AAC1E,IAAA,MAAM,GAAG,KAAK,CAAC,QAAQ,iDAA4B;AAC5D,IAAA,OAAO,GAAG,KAAK,CACb,MAAM,CACJ;AACE,QAAA,UAAU,EAAE,CAAC;AACb,QAAA,QAAQ,EAAE,EAAE;AACZ,QAAA,KAAK,EAAE,SAAS;AAChB,QAAA,MAAM,EAAE;AACJ,KAAA,CACP,mDACF;AACQ,IAAA,OAAO,GAAG,KAAK,CAAC,QAAQ,kDAAe;AACvC,IAAA,aAAa,GAAG,KAAK,CAAM,EAAE,yDAAC;AAC9B,IAAA,UAAU,GAAG,KAAK,CAAU,KAAK,sDAAC;AAClC,IAAA,iBAAiB,GAAG,KAAK,CAAS,kBAAkB,6DAAC;AACrD,IAAA,QAAQ,GAAG,KAAK,CAAU,KAAK,oDAAC;AAChC,IAAA,QAAQ,GAAG,KAAK,CAAU,KAAK,oDAAC;AAChC,IAAA,SAAS,GAAG,KAAK,CAAU,KAAK,qDAAC;AACjC,IAAA,UAAU,GAAG,KAAK,CAAS,OAAO,sDAAC;AACnC,IAAA,kBAAkB,GAAG,KAAK,CAAS,gBAAgB,8DAAC;AACpD,IAAA,UAAU,GAAG,KAAK,CAAS,OAAO,sDAAC;AACnC,IAAA,YAAY,GAAG,KAAK,CAAS,SAAS,wDAAC;AACvC,IAAA,KAAK,GAAG,KAAK,CAAS,EAAE,iDAAC;AACzB,IAAA,KAAK,GAAG,KAAK,CAAS,EAAE,iDAAC;AACzB,IAAA,SAAS,GAAG,KAAK,CAAU,KAAK,qDAAC;AACjC,IAAA,cAAc,GAAG,KAAK,CAA0B,IAAI,0DAAC;AACrD,IAAA,gBAAgB,GAAG,KAAK,CAAS,kBAAkB,4DAAC;;IAGpD,YAAY,GAAG,MAAM,EAAQ;;AAGtC,IAAA,oBAAoB,GAAG,SAAS,CAAC,QAAQ,CAAmB,sBAAsB,CAAC;AACnF,IAAA,SAAS,GAAG,SAAS,CAAY,WAAW,qDAAC;AAE7C,IAAA,cAAc,GAAG,MAAM,CAAM,EAAE,0DAAC;AAChC,IAAA,eAAe,GAAG,MAAM,CAAW,IAAI,2DAAC;AACxC,IAAA,WAAA,GAAA;QACE,MAAM,CAAC,MAAK;YACV,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,IAAI,CAAC,aAAa,EAAE,CAAC;AAC/C,QAAA,CAAC,CAAC;IACJ;IAEA,QAAQ,GAAA;AACN,QAAA,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,EAAE,GAAG,IAAI,CAAC,OAAO,EAAE,EAAE,EAAE,CAAC;AAEjD,QAAA,IAAG,IAAI,CAAC,QAAQ,EAAE,EAAE;AAClB,YAAA,IAAI,CAAC,OAAO,EAAE,CAAC,OAAO,EAAE;QAC1B;IACF;IAEA,qBAAqB,GAAA;QACnB,OAAO,IAAI,CAAC,cAAc;AACvB,aAAA,GAAG,CAAC,CAAC,IAAO,KAAK,MAAM,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC;AAC3D,aAAA,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE;IACrB;;AAGA,IAAA,aAAa,GAAG,MAAM,CAAC,MAAK;AAC1B,QAAA,MAAM,aAAa,GAAG,IAAI,CAAC,cAAc,EAAE;AAC3C,QAAA,IAAG,IAAI,CAAC,QAAQ,EAAE,EAAE;YAClB,IAAI,CAAC,OAAO,EAAE,CAAC,QAAQ,CAAC,aAAa,CAAC,GAAG,CAAC,CAAC,IAAO,KAAK,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC,QAAmB,CAAC,CAAC,CAAC;QAClG;aAAO;YACL,IAAI,CAAC,OAAO,EAAE,CAAC,QAAQ,CAAC,aAAa,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,QAAmB,CAAC,CAAC;QAClF;AACA,QAAA,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE;AAC1B,IAAA,CAAC,yDAAC;AAEF,IAAA,sBAAsB,CAAC,KAAY,EAAA;QACjC,KAAK,CAAC,cAAc,EAAE;QACtB,KAAK,CAAC,eAAe,EAAE;AAEvB,QAAA,IAAG,IAAI,CAAC,QAAQ,EAAE,EAAE;YAClB;QACF;AAEC,QAAA,KAAK,CAAC,MAAsB,CAAC,IAAI,EAAE;AAEpC,QAAA,IAAI,CAAC,OAAO,EAAE,CAAC,aAAa,EAAE;AAC9B,QAAA,IAAI,CAAC,OAAO,EAAE,CAAC,sBAAsB,EAAE;AACvC,QAAA,IAAI,CAAC,IAAI,CAAC,aAAa,EAAE;AAEzB,QAAA,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,mCAAmC,EAAE;AAC1D,YAAA,IAAI,EAAE;AACJ,gBAAA,KAAK,EAAE,IAAI,CAAC,KAAK,EAAE;AACnB,gBAAA,KAAK,EAAE,IAAI,CAAC,KAAK,EAAE;AACnB,gBAAA,QAAQ,EAAE,IAAI,CAAC,QAAQ,EAAE;AACzB,gBAAA,MAAM,EAAE,IAAI,CAAC,MAAM,EAAE;AACrB,gBAAA,aAAa,EAAE,IAAI,CAAC,cAAc,EAAE;AACpC,gBAAA,UAAU,EAAE,IAAI,CAAC,UAAU,EAAE;AAC7B,gBAAA,OAAO,EAAE,IAAI,CAAC,OAAO,EAAE;AACvB,gBAAA,iBAAiB,EAAE,IAAI,CAAC,iBAAiB,EAAE;AAC3C,gBAAA,QAAQ,EAAE,IAAI,CAAC,QAAQ,EAAE;AACzB,gBAAA,UAAU,EAAE,IAAI,CAAC,UAAU,EAAE;AAC7B,gBAAA,kBAAkB,EAAE,IAAI,CAAC,kBAAkB,EAAE;AAC7C,gBAAA,UAAU,EAAE,IAAI,CAAC,UAAU,EAAE;AAC7B,gBAAA,YAAY,EAAE,IAAI,CAAC,YAAY,EAAE;AACjC,gBAAA,oBAAoB,EAAE,IAAI,CAAC,oBAAoB,EAAE;AACjD,gBAAA,cAAc,EAAE,IAAI,CAAC,cAAc,EAAE;AACrC,gBAAA,gBAAgB,EAAE,IAAI,CAAC,gBAAgB,EAAE;AAC1C,aAAA;SACF,CAAC,CAAC,cAAc,EAAE,CAAC,SAAS,CAAC,CAAC,aAA8B,KAAI;AAC7D,YAAA,IAAG,aAAa,KAAK,SAAS,EAAE;AAC9B,gBAAA,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,aAAa,CAAC;YACxC;AACA,YAAA,IAAI,CAAC,YAAY,CAAC,IAAI,EAAE;AAC5B,QAAA,CAAC,CAAC;IACJ;AAEA,IAAA,cAAc,CAAC,MAAe,EAAA;QAC5B,IAAI,MAAM,EAAE;;AAER,YAAA,IAAI,IAAI,CAAC,SAAS,EAAE,EAAE;AACpB,gBAAA,IAAI,CAAC,SAAS,EAAE,EAAE,KAAK,EAAE;YAC3B;QACJ;IACF;AAEA,IAAA,aAAa,CAAC,IAAO,EAAA;AACnB,QAAA,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,IAAI,CAAC,cAAc,EAAE,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC,QAAmB,CAAC,KAAK,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC,QAAmB,CAAC,CAAC,CAAC;AAC5I,QAAA,IAAI,CAAC,OAAO,EAAE,CAAC,aAAa,EAAE;AAC9B,QAAA,IAAI,CAAC,OAAO,EAAE,CAAC,sBAAsB,EAAE;AACvC,QAAA,IAAI,CAAC,IAAI,CAAC,aAAa,EAAE;IAC3B;AAEA,IAAA,YAAY,CAAC,KAAY,EAAA;QACvB,KAAK,CAAC,eAAe,EAAE;QACvB,KAAK,CAAC,cAAc,EAAE;AACtB,QAAA,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,EAAE,CAAC;AAC3B,QAAA,IAAI,CAAC,OAAO,EAAE,CAAC,KAAK,EAAE;AACtB,QAAA,IAAI,CAAC,OAAO,EAAE,CAAC,aAAa,EAAE;AAC9B,QAAA,IAAI,CAAC,OAAO,EAAE,CAAC,sBAAsB,EAAE;AACvC,QAAA,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE;IAC1B;wGA9IW,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,SAAA,EAAA,IAAA,EAAA,kBAAkB,qnGChC/B,qvEAoEc,EAAA,MAAA,EAAA,CAAA,8lBAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EDlDV,eAAe,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,aAAA,EAAA,QAAA,EAAA,sFAAA,EAAA,QAAA,EAAA,CAAA,WAAA,EAAA,WAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EACf,oBAAoB,8BACpB,YAAY,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EACZ,kBAAkB,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAP,IAAA,CAAA,YAAA,EAAA,QAAA,EAAA,gBAAA,EAAA,MAAA,EAAA,CAAA,oBAAA,EAAA,OAAA,EAAA,YAAA,EAAA,YAAA,EAAA,iBAAA,EAAA,WAAA,CAAA,EAAA,QAAA,EAAA,CAAA,cAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,QAAA,EAAA,QAAA,EAAA,WAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,QAAA,EAAA,QAAA,EAAA,uBAAA,EAAA,MAAA,EAAA,CAAA,IAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,SAAA,EAAA,QAAA,EAAA,+CAAA,EAAA,MAAA,EAAA,CAAA,eAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAClB,cAAc,mYACd,aAAa,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAI,IAAA,CAAA,OAAA,EAAA,QAAA,EAAA,UAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,SAAA,EAAA,SAAA,EAAA,UAAA,CAAA,EAAA,QAAA,EAAA,CAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EACb,eAAe,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,IAAA,CAAA,SAAA,EAAA,QAAA,EAAA,YAAA,EAAA,MAAA,EAAA,CAAA,kBAAA,EAAA,YAAA,EAAA,UAAA,EAAA,eAAA,EAAA,UAAA,EAAA,8BAAA,EAAA,aAAA,EAAA,UAAA,EAAA,UAAA,EAAA,wBAAA,EAAA,aAAA,EAAA,OAAA,EAAA,YAAA,EAAA,iBAAA,EAAA,mBAAA,EAAA,2BAAA,EAAA,gBAAA,EAAA,IAAA,EAAA,YAAA,EAAA,0BAAA,CAAA,EAAA,OAAA,EAAA,CAAA,cAAA,EAAA,QAAA,EAAA,QAAA,EAAA,iBAAA,EAAA,aAAA,CAAA,EAAA,QAAA,EAAA,CAAA,WAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,SAAA,EAAA,QAAA,EAAA,YAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,IAAA,EAAA,UAAA,CAAA,EAAA,OAAA,EAAA,CAAA,mBAAA,CAAA,EAAA,QAAA,EAAA,CAAA,WAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EACf,mBAAmB,yTACnB,cAAc,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,IAAA,CAAA,WAAA,EAAA,QAAA,EAAA,eAAA,EAAA,MAAA,EAAA,CAAA,UAAA,EAAA,aAAA,EAAA,UAAA,EAAA,OAAA,EAAA,mBAAA,CAAA,EAAA,OAAA,EAAA,CAAA,QAAA,EAAA,aAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,YAAA,EAAA,QAAA,EAAA,wBAAA,EAAA,MAAA,EAAA,CAAA,iBAAA,EAAA,uBAAA,EAAA,+BAAA,EAAA,aAAA,EAAA,IAAA,EAAA,UAAA,EAAA,UAAA,EAAA,iCAAA,CAAA,EAAA,OAAA,EAAA,CAAA,sBAAA,CAAA,EAAA,QAAA,EAAA,CAAA,cAAA,EAAA,iBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,aAAA,EAAA,QAAA,EAAA,iBAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,UAAA,EAAA,QAAA,EAAA,wEAAA,EAAA,MAAA,EAAA,CAAA,UAAA,CAAA,EAAA,OAAA,EAAA,CAAA,QAAA,CAAA,EAAA,CAAA,EAAA,CAAA;;4FAML,kBAAkB,EAAA,UAAA,EAAA,CAAA;kBAjB9B,SAAS;AACE,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,sBAAsB,EAAA,OAAA,EACvB;wBACP,eAAe;wBACf,oBAAoB;wBACpB,YAAY;wBACZ,kBAAkB;wBAClB,cAAc;wBACd,aAAa;wBACb,eAAe;wBACf,mBAAmB;wBACnB,cAAc;wBACd,eAAe;AAClB,qBAAA,EAAA,QAAA,EAAA,qvEAAA,EAAA,MAAA,EAAA,CAAA,8lBAAA,CAAA,EAAA;AA6C6D,SAAA,CAAA,EAAA,cAAA,EAAA,MAAA,EAAA,EAAA,cAAA,EAAA,EAAA,KAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,KAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,KAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,CAAA,EAAA,KAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,KAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,KAAA,EAAA,OAAA,EAAA,QAAA,EAAA,KAAA,EAAA,CAAA,EAAA,CAAA,EAAA,QAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,KAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,KAAA,EAAA,UAAA,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,CAAA,EAAA,MAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,KAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,KAAA,EAAA,QAAA,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,CAAA,EAAA,OAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,KAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,KAAA,EAAA,SAAA,EAAA,QAAA,EAAA,KAAA,EAAA,CAAA,EAAA,CAAA,EAAA,OAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,KAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,KAAA,EAAA,SAAA,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,CAAA,EAAA,aAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,KAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,KAAA,EAAA,eAAA,EAAA,QAAA,EAAA,KAAA,EAAA,CAAA,EAAA,CAAA,EAAA,UAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,KAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,KAAA,EAAA,YAAA,EAAA,QAAA,EAAA,KAAA,EAAA,CAAA,EAAA,CAAA,EAAA,iBAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,KAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,KAAA,EAAA,mBAAA,EAAA,QAAA,EAAA,KAAA,EAAA,CAAA,EAAA,CAAA,EAAA,QAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,KAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,KAAA,EAAA,UAAA,EAAA,QAAA,EAAA,KAAA,EAAA,CAAA,EAAA,CAAA,EAAA,QAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,KAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,KAAA,EAAA,UAAA,EAAA,QAAA,EAAA,KAAA,EAAA,CAAA,EAAA,CAAA,EAAA,SAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,KAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,KAAA,EAAA,WAAA,EAAA,QAAA,EAAA,KAAA,EAAA,CAAA,EAAA,CAAA,EAAA,UAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,KAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,KAAA,EAAA,YAAA,EAAA,QAAA,EAAA,KAAA,EAAA,CAAA,EAAA,CAAA,EAAA,kBAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,KAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,KAAA,EAAA,oBAAA,EAAA,QAAA,EAAA,KAAA,EAAA,CAAA,EAAA,CAAA,EAAA,UAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,KAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,KAAA,EAAA,YAAA,EAAA,QAAA,EAAA,KAAA,EAAA,CAAA,EAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,KAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,KAAA,EAAA,cAAA,EAAA,QAAA,EAAA,KAAA,EAAA,CAAA,EAAA,CAAA,EAAA,KAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,KAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,KAAA,EAAA,OAAA,EAAA,QAAA,EAAA,KAAA,EAAA,CAAA,EAAA,CAAA,EAAA,KAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,KAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,KAAA,EAAA,OAAA,EAAA,QAAA,EAAA,KAAA,EAAA,CAAA,EAAA,CAAA,EAAA,SAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,KAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,KAAA,EAAA,WAAA,EAAA,QAAA,EAAA,KAAA,EAAA,CAAA,EAAA,CAAA,EAAA,cAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,KAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,KAAA,EAAA,gBAAA,EAAA,QAAA,EAAA,KAAA,EAAA,CAAA,EAAA,CAAA,EAAA,gBAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,KAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,KAAA,EAAA,kBAAA,EAAA,QAAA,EAAA,KAAA,EAAA,CAAA,EAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,MAAA,EAAA,IAAA,EAAA,CAAA,cAAA,CAAA,EAAA,CAAA,EAAA,oBAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,SAAA,EAAA,IAAA,EAAA,CAAA,sBAAsB,mEACjD,WAAW,EAAA,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,CAAA,EAAA,EAAA,CAAA;;AExE9C,IAAY,cAKX;AALD,CAAA,UAAY,cAAc,EAAA;AACxB,IAAA,cAAA,CAAA,MAAA,CAAA,GAAA,MAAa;AACb,IAAA,cAAA,CAAA,MAAA,CAAA,GAAA,MAAa;AACb,IAAA,cAAA,CAAA,WAAA,CAAA,GAAA,WAAuB;AACvB,IAAA,cAAA,CAAA,UAAA,CAAA,GAAA,UAAqB;AACvB,CAAC,EALW,cAAc,KAAd,cAAc,GAAA,EAAA,CAAA,CAAA;;MCGb,oBAAoB,CAAA;AACrB,IAAA,IAAI,GAAG,MAAM,CAAC,gBAAgB,CAAC;IAC/B,WAAW,GAA6B,IAAI;IAEpD,SAAS,GAAG,KAAK,CAAA,IAAA,SAAA,GAAA,CAAA,SAAA,EAAA,EAAA,SAAA,EAAA,WAAA,EAAA,CAAA,GAAA,EAAA,CAAA,CAAa;IAC9B,IAAI,GAAG,KAAK,CAAA,IAAA,SAAA,GAAA,CAAA,SAAA,EAAA,EAAA,SAAA,EAAA,MAAA,EAAA,CAAA,GAAA,EAAA,CAAA,CAAK;AAEjB,IAAA,WAAA,GAAA;QACI,MAAM,CAAC,MAAK;AACR,YAAA,MAAM,aAAa,GAAG,IAAI,CAAC,SAAS,EAAE;;YAGtC,IAAI,CAAC,aAAa,EAAE;AAChB,gBAAA,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE;AACjB,gBAAA,IAAI,CAAC,WAAW,GAAG,IAAI;gBACvB;YACJ;;YAGA,IAAI,IAAI,CAAC,WAAW,EAAE,aAAa,KAAK,aAAa,EAAE;AACnD,gBAAA,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE;gBACjB,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,IAAI,CAAC,eAAe,CAAC,aAAa,CAAC;YAC/D;;AAGA,YAAA,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,EAAE;YACxB,IAAI,IAAI,CAAC,WAAW,IAAI,IAAI,KAAK,SAAS,EAAE;;gBAExC,IAAI,CAAC,WAAW,CAAC,QAAQ,CAAC,MAAM,EAAE,IAAI,CAAC;YAC3C;AACJ,QAAA,CAAC,CAAC;IACN;wGA/BS,oBAAoB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;4FAApB,oBAAoB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,kBAAA,EAAA,MAAA,EAAA,EAAA,SAAA,EAAA,EAAA,iBAAA,EAAA,WAAA,EAAA,UAAA,EAAA,WAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,IAAA,EAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,UAAA,EAAA,MAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA;;4FAApB,oBAAoB,EAAA,UAAA,EAAA,CAAA;kBAHhC,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACP,oBAAA,QAAQ,EAAE;AACb,iBAAA;;;MCoBY,SAAS,CAAA;;AAEZ,IAAA,UAAU,GAAG,MAAM,EAAC,YAAuB,EAAC;AAC5C,IAAA,KAAK,GAAG,MAAM,CAAkB,eAAe,CAAC;AAE/C,IAAA,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK;AACxB,IAAA,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI;AACtB,IAAA,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC,SAAS;AAChC,IAAA,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,QAAQ;AAC9B,IAAA,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI;IACtB,UAAU,GAAG,IAAI,CAAC,KAAK,CAAC,UAAU,IAAI,IAAI;IAC1C,WAAW,GAAG,IAAI,CAAC,KAAK,CAAC,WAAW,IAAI,IAAI;IAC5C,UAAU,GAAG,IAAI,CAAC,KAAK,CAAC,UAAU,IAAI,UAAU;IAChD,WAAW,GAAG,IAAI,CAAC,KAAK,CAAC,WAAW,IAAI,SAAS;IAE1D,cAAc,GAAG,cAAc;IAE/B,aAAa,GAAA;AACX,QAAA,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,KAAK,CAAC;IAC9B;IAEA,cAAc,GAAA;AACZ,QAAA,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,IAAI,CAAC;IAC7B;wGAvBW,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,SAAA,EAAA,IAAA,EAAA,SAAS,sECxBtB,ypDAsDA,EAAA,MAAA,EAAA,CAAA,sQAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,ED1CI,cAAc,EAAA,QAAA,EAAA,sCAAA,EAAA,MAAA,EAAA,CAAA,IAAA,CAAA,EAAA,QAAA,EAAA,CAAA,gBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACd,gBAAgB,EAAA,QAAA,EAAA,8DAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAChB,gBAAgB,EAAA,QAAA,EAAA,8DAAA,EAAA,MAAA,EAAA,CAAA,OAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAChB,gBAAgB,oIAChB,eAAe,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAN,EAAA,CAAA,SAAA,EAAA,QAAA,EAAA,iOAAA,EAAA,MAAA,EAAA,CAAA,WAAA,CAAA,EAAA,QAAA,EAAA,CAAA,WAAA,EAAA,WAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EACf,aAAa,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,IAAA,CAAA,OAAA,EAAA,QAAA,EAAA,UAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,SAAA,EAAA,SAAA,EAAA,UAAA,CAAA,EAAA,QAAA,EAAA,CAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EACb,YAAY,uMACZ,oBAAoB,EAAA,QAAA,EAAA,kBAAA,EAAA,MAAA,EAAA,CAAA,WAAA,EAAA,MAAA,CAAA,EAAA,CAAA,EAAA,CAAA;;4FAKX,SAAS,EAAA,UAAA,EAAA,CAAA;kBAfrB,SAAS;AACE,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,YAAY,EAAA,OAAA,EACb;wBACP,cAAc;wBACd,gBAAgB;wBAChB,gBAAgB;wBAChB,gBAAgB;wBAChB,eAAe;wBACf,aAAa;wBACb,YAAY;wBACZ;AACD,qBAAA,EAAA,QAAA,EAAA,ypDAAA,EAAA,MAAA,EAAA,CAAA,sQAAA,CAAA,EAAA;;;MEDU,yBAAyB,CAAA;AACpC,IAAA,SAAS,GAAG,MAAM,EAAC,YAAuC,EAAC;AAC3D,IAAA,IAAI,GAAG,MAAM,CAAoB,eAAe,CAAC;wGAFtC,yBAAyB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAAzB,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,yBAAyB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,oBAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,ECnBtC,6jBAaqB,EAAA,MAAA,EAAA,CAAA,wBAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EDJjB,eAAe,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,SAAA,EAAA,QAAA,EAAA,iOAAA,EAAA,MAAA,EAAA,CAAA,WAAA,CAAA,EAAA,QAAA,EAAA,CAAA,WAAA,EAAA,WAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACf,cAAc,EAAA,QAAA,EAAA,sCAAA,EAAA,MAAA,EAAA,CAAA,IAAA,CAAA,EAAA,QAAA,EAAA,CAAA,gBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACd,gBAAgB,EAAA,QAAA,EAAA,8DAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAChB,gBAAgB,EAAA,QAAA,EAAA,8DAAA,EAAA,MAAA,EAAA,CAAA,OAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAChB,cAAc,oLACd,YAAY,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAD,GAAA,CAAA,gBAAA,EAAA,QAAA,EAAA,oBAAA,EAAA,MAAA,EAAA,CAAA,yBAAA,EAAA,kBAAA,EAAA,0BAAA,CAAA,EAAA,CAAA,EAAA,CAAA;;4FAKH,yBAAyB,EAAA,UAAA,EAAA,CAAA;kBAbrC,SAAS;AACE,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,oBAAoB,EAAA,OAAA,EACrB;wBACP,eAAe;wBACf,cAAc;wBACd,gBAAgB;wBAChB,gBAAgB;wBAChB,cAAc;wBACd;AACD,qBAAA,EAAA,QAAA,EAAA,6jBAAA,EAAA,MAAA,EAAA,CAAA,wBAAA,CAAA,EAAA;;;MEVU,wBAAwB,CAAA;AACnC,IAAA,GAAG,GAAG,MAAM,CAAC,gBAAgB,CAAC;IAE9B,SAAS,GAAG,KAAK,CAAA,IAAA,SAAA,GAAA,CAAA,SAAA,EAAA,EAAA,SAAA,EAAA,WAAA,EAAA,CAAA,GAAA,EAAA,CAAA,CAAa;IAC9B,GAAG,GAAG,KAAK,CAAA,IAAA,SAAA,GAAA,CAAA,SAAA,EAAA,EAAA,SAAA,EAAA,KAAA,EAAA,CAAA,GAAA,EAAA,CAAA,CAAK;IAChB,GAAG,GAAG,KAAK,CAAA,IAAA,SAAA,GAAA,CAAA,SAAA,EAAA,EAAA,SAAA,EAAA,KAAA,EAAA,CAAA,GAAA,EAAA,CAAA,CAAW;AAEtB,IAAA,MAAM,GAAG,MAAM,CAAC,MAAK;AACnB,QAAA,MAAM,SAAS,GAAG,IAAI,CAAC,SAAS,EAAE;AAClC,QAAA,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE;AACtB,QAAA,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE;QAEtB,IAAI,SAAS,EAAE;YACb,MAAM,OAAO,GAAG,IAAI,CAAC,GAAG,CAAC,eAAe,CAAC,SAAS,CAAC;AAEnD,YAAA,IAAI,GAAG,IAAI,GAAG,EAAE;gBACd,OAAO,CAAC,QAAQ,CAAC,GAAG,GAAG,MAAM,CAAC,GAAG,CAAC;gBAClC,OAAO,CAAC,QAAQ,CAAC,GAAG,GAAG,MAAM,CAAC,GAAG,CAAC;YACpC;QACF;AACF,IAAA,CAAC,kDAAC;wGApBS,wBAAwB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;4FAAxB,wBAAwB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,sBAAA,EAAA,MAAA,EAAA,EAAA,SAAA,EAAA,EAAA,iBAAA,EAAA,WAAA,EAAA,UAAA,EAAA,WAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,GAAA,EAAA,EAAA,iBAAA,EAAA,KAAA,EAAA,UAAA,EAAA,KAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,GAAA,EAAA,EAAA,iBAAA,EAAA,KAAA,EAAA,UAAA,EAAA,KAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA;;4FAAxB,wBAAwB,EAAA,UAAA,EAAA,CAAA;kBAHpC,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACT,oBAAA,QAAQ,EAAE,sBAAsB;AACjC,iBAAA;;;MCCY,2BAA2B,CAAA;AAEtC,IAAA,SAAS,CAAC,KAAa,EAAA;AACrB,QAAA,IAAI,CAAC,KAAK;AACR,YAAA,OAAO,EAAE;AAEX,QAAA,KAAK,GAAG,KAAK,CAAC,WAAW,EAAE;AAC3B,QAAA,OAAO,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,CAAA,EAAG,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE;IAC5D;wGARW,2BAA2B,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,IAAA,EAAA,CAAA;sGAA3B,2BAA2B,EAAA,YAAA,EAAA,IAAA,EAAA,IAAA,EAAA,4BAAA,EAAA,CAAA;;4FAA3B,2BAA2B,EAAA,UAAA,EAAA,CAAA;kBAHvC,IAAI;AAAC,YAAA,IAAA,EAAA,CAAA;AACJ,oBAAA,IAAI,EAAE,4BAA4B;AACnC,iBAAA;;;ACqBM,MAAM,sBAAsB,GAAoC;AACnE,IAAA,KAAK,EAAE,GAAG;AACV,IAAA,IAAI,EAAE;;MAGG,wBAAwB,GAAmB,MAAM,CAAC,OAAO,CAAC,sBAAsB,CAAC,CAAC,GAAG,CAC9F,CAAC,CAAC,GAAG,EAAE,KAAK,CAAC,KAAI;IACb,OAAO;AACH,QAAA,KAAK,EAAE,GAAG;AACV,QAAA,KAAK,EAAE;KACV;AACL,CAAC;AAGE,MAAM,uBAAuB,GAAyC;AACzE,IAAA,MAAM,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,IAAI,CAAC;AACzC,IAAA,IAAI,EAAE,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,CAAC;AACzB,IAAA,MAAM,EAAE,CAAC,GAAG,EAAE,IAAI,CAAC;AACnB,IAAA,iBAAiB,EAAE,CAAC,GAAG,EAAE,IAAI,CAAC;AAC9B,IAAA,IAAI,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,IAAI,CAAC;AACvC,IAAA,YAAY,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,IAAI,CAAC;;AAG5C,MAAM,qBAAqB,GAAmC;AACjE,IAAA,GAAG,EAAE,SAAS;AACd,IAAA,IAAI,EAAE,aAAa;AACnB,IAAA,GAAG,EAAE,WAAW;AAChB,IAAA,IAAI,EAAE,mBAAmB;AACzB,IAAA,GAAG,EAAE,WAAW;AAChB,IAAA,IAAI,EAAE,mBAAmB;AACzB,IAAA,MAAM,EAAE;;;MC/CC,mBAAmB,CAAA;IAC9B,OAAO,oBAAoB,GAAG,CAAI,EAAe,EAAE,cAAiC,KAAe;QACjG,OAAO,EAAE,CAAC,KAAK,CAAC;YACd,IAAI,EAAE,CAAC,cAAc,CAAC,IAAI,EAAE,UAAU,CAAC,QAAQ,CAAC;YAChD,MAAM,EAAE,EAAE,CAAC,KAAK,CAAC,cAAc,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,IAAI,CAAC,iBAAiB,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC;AAC/E,SAAA,CAAC;AACJ,IAAA,CAAC;IAED,OAAO,iBAAiB,GAAG,CAAI,EAAe,EAAE,KAAqB,KAAe;QAClF,OAAO,EAAE,CAAC,KAAK,CAAC;YACd,EAAE,EAAE,CAAC,KAAK,CAAC,EAAE,IAAIQ,EAAM,EAAE,CAAC;YAC1B,SAAS,EAAE,CAAC,KAAK,CAAC,SAAS,EAAE,UAAU,CAAC,QAAQ,CAAC;AACjD,YAAA,OAAO,EAAE,EAAE,CAAC,KAAK,CAAC,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,IAAG;AACtC,gBAAA,OAAO,IAAI,CAAC,aAAa,CAAI,CAAC;sBAC1B,IAAI,CAAC,iBAAiB,CAAC,EAAE,EAAE,CAAC;sBAC5B,IAAI,CAAC,gBAAgB,CAAC,EAAE,EAAE,CAAC,CAAC;AAClC,YAAA,CAAC,CAAC,EAAE,CAAC,UAAU,CAAC,QAAQ,CAAC;AAC1B,SAAA,CAAC;AACJ,IAAA,CAAC;IAED,OAAO,gBAAgB,GAAG,CAAI,EAAe,EAAE,IAAmB,KAAe;QAC/E,OAAO,EAAE,CAAC,KAAK,CAAC;YACd,EAAE,EAAE,CAAC,IAAI,CAAC,EAAE,IAAIA,EAAM,EAAE,CAAC;YACzB,GAAG,EAAE,CAAC,IAAI,CAAC,GAAG,IAAI,IAAI,EAAE,UAAU,CAAC,QAAQ,CAAC;YAC5C,QAAQ,EAAE,CAAC,IAAI,CAAC,QAAQ,IAAI,IAAI,EAAE,UAAU,CAAC,QAAQ,CAAC;YACtD,KAAK,EAAE,CAAC,IAAI,CAAC,KAAK,IAAI,IAAI,EAAE,UAAU,CAAC,QAAQ;AAChD,SAAA,CAAC;AACJ,IAAA,CAAC;AAED,IAAA,OAAO,aAAa,GAAG,CAAI,GAAQ,KAA2B;AAC5D,QAAA,OAAO,GAAG;YACR,OAAO,GAAG,KAAK,QAAQ;AACvB,YAAA,WAAW,IAAI,GAAG;YAClB,SAAS,IAAI,GAAG;AACpB,IAAA,CAAC;IAEO,OAAO,YAAY,CAAI,GAAQ,EAAA;QACrC,OAAO,GAAG,IAAI,OAAO,GAAG,KAAK,QAAQ,IAAI,KAAK,IAAI,GAAG;IACvD;IAEA,OAAO,eAAe,CAAI,EAAe,EAAE,IAAe,EAAE,OAAe,EAAE,KAAqB,EAAA;AAChG,QAAA,MAAM,UAAU,GAAG,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAc,EAAE,OAAO,CAAC;QACnF,IAAI,UAAU,EAAE;YACd,MAAM,OAAO,GAAG,UAAU,CAAC,GAAG,CAAC,SAAS,CAAc;YACtD,MAAM,SAAS,GAAG,IAAI,CAAC,iBAAiB,CAAC,EAAE,EAAE,KAAK,CAAC;AACnD,YAAA,OAAO,CAAC,IAAI,CAAC,SAAS,CAAC;QACzB;IACF;AAEA,IAAA,OAAO,WAAW,CAAI,IAAe,EAAE,OAAe,EAAA;QACpD,MAAM,WAAW,GAAG,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAc;QACnD,OAAO,IAAI,CAAC,mBAAmB,CAAC,WAAW,EAAE,OAAO,CAAC;IACvD;AAEA,IAAA,OAAO,cAAc,GAAG,CAAI,EAAe,EAAE,IAAe,EAAE,OAAe,EAAE,IAAmB,KAAI;AACpG,QAAA,MAAM,KAAK,GAAG,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAc,EAAE,OAAO,CAAC;QAC9E,IAAI,KAAK,EAAE;YACT,MAAM,OAAO,GAAG,KAAK,CAAC,GAAG,CAAC,SAAS,CAAc;YACjD,MAAM,QAAQ,GAAG,IAAI,CAAC,gBAAgB,CAAC,EAAE,EAAE,IAAI,CAAC;AAChD,YAAA,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC;QACxB;AACF,IAAA,CAAC;AAED,IAAA,OAAO,UAAU,CAAI,IAAe,EAAE,MAAc,EAAA;QAClD,MAAM,WAAW,GAAG,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAc;QACnD,OAAO,IAAI,CAAC,mBAAmB,CAAC,WAAW,EAAE,MAAM,CAAC;IACtD;AAEQ,IAAA,OAAO,mBAAmB,CAAC,KAAgB,EAAE,EAAU,EAAA;AAC7D,QAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;YACrC,MAAM,OAAO,GAAG,KAAK,CAAC,EAAE,CAAC,CAAC,CAAc;;YAGxC,IAAI,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,KAAK,KAAK,EAAE,EAAE;AACnC,gBAAA,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC;AACjB,gBAAA,OAAO,IAAI;YACb;;YAGA,MAAM,OAAO,GAAG,OAAO,CAAC,GAAG,CAAC,SAAS,CAAC;AACtC,YAAA,IAAI,OAAO,YAAY,SAAS,EAAE;gBAChC,MAAM,OAAO,GAAG,IAAI,CAAC,mBAAmB,CAAC,OAAO,EAAE,EAAE,CAAC;AACrD,gBAAA,IAAI,OAAO;AAAE,oBAAA,OAAO,IAAI;YAC1B;QACF;AAEA,QAAA,OAAO,KAAK;IACd;AAGA,IAAA,OAAO,iBAAiB,CAAC,KAAgB,EAAE,EAAU,EAAA;AACnD,QAAA,KAAK,MAAM,OAAO,IAAI,KAAK,CAAC,QAAQ,EAAE;YACpC,MAAM,KAAK,GAAG,OAAoB;YAClC,IAAI,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,KAAK,KAAK,EAAE;AAC/B,gBAAA,OAAO,KAAK;YAEd,MAAM,OAAO,GAAG,KAAK,CAAC,GAAG,CAAC,SAAS,CAAc;YACjD,IAAI,OAAO,EAAE;gBACX,MAAM,KAAK,GAAG,IAAI,CAAC,iBAAiB,CAAC,OAAO,EAAE,EAAE,CAAC;AACjD,gBAAA,IAAI,KAAK;AACP,oBAAA,OAAO,KAAK;YAChB;QACF;AACA,QAAA,OAAO,IAAI;IACb;IAEA,OAAO,iBAAiB,CAAC,KAAsB,EAAA;QAC7C,QACE,KAAK,YAAY,SAAS;AAC1B,YAAA,KAAK,CAAC,QAAQ,CAAC,WAAW,CAAC;AAC3B,YAAA,KAAK,CAAC,QAAQ,CAAC,SAAS,CAAC;IAE7B;AAEA;;;;;;;;AAQG;IAEH,OAAO,uBAAuB,CAAI,IAAe,EAAA;QAC/C,OAAO;YACL,IAAI,EAAE,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,KAAK;YAC7B,MAAM,EAAG,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAe,CAAC;iBACvC,GAAG,CAAC,CAAC,IAAI,IAAI,CAAC,yBAAyB,CAAI,CAAc,CAAC;iBAC1D,MAAM,CAAC,CAAC,IAAI,IAAI,CAAC,eAAe,CAAC,CAAC,CAAC;SACvC;IACH;IAGQ,OAAO,yBAAyB,CAAI,SAAoB,EAAA;QAC9D,MAAM,EAAE,GAAG,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,KAAe;QAC/C,MAAM,SAAS,GAAG,SAAS,CAAC,GAAG,CAAC,WAAW,CAAC,EAAE,KAAwB;QACtE,MAAM,YAAY,GAAG,SAAS,CAAC,GAAG,CAAC,SAAS,CAAc;AAE1D,QAAA,MAAM,OAAO,GAAG,YAAY,CAAC;aAC1B,GAAG,CAAC,OAAO,IAAG;AACb,YAAA,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK;YAC3B,IAAI,SAAS,IAAI,KAAK;AACpB,gBAAA,OAAO,IAAI,CAAC,yBAAyB,CAAI,OAAoB,CAAC;;AAE9D,gBAAA,OAAO,IAAI,CAAC,wBAAwB,CAAI,OAAoB,CAAC;AACjE,QAAA,CAAC;AACA,aAAA,MAAM,CAAC,CAAC,IAAI,IAAI,CAAC,gBAAgB,CAAC,CAAC,CAAC,CAAC;QAExC,OAAO;AACL,YAAA,EAAE,EAAE,EAAE;AACN,YAAA,SAAS,EAAE,SAAS;AACpB,YAAA,OAAO,EAAE;SACV;IACH;IAGQ,OAAO,wBAAwB,CAAI,QAAmB,EAAA;QAC5D,OAAO;YACL,EAAE,EAAE,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,KAAK;YAC7B,GAAG,EAAE,QAAQ,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,KAAK;YAC/B,QAAQ,EAAE,QAAQ,CAAC,GAAG,CAAC,UAAU,CAAC,EAAE,KAAK;YACzC,KAAK,EAAE,QAAQ,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE;SAC/B;IACH;IAEQ,OAAO,gBAAgB,CAAI,MAAsC,EAAA;AACvE,QAAA,IAAI,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC;AAC5B,YAAA,OAAO,IAAI,CAAC,eAAe,CAAC,MAAM,CAAC;AAErC,QAAA,OAAO,IAAI,CAAC,cAAc,CAAC,MAAM,CAAC;IACpC;IAEQ,OAAO,eAAe,CAAI,KAAqB,EAAA;QACrD,OAAO,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,IAAI,IAAI,CAAC,gBAAgB,CAAC,CAAC,CAAC,CAAC;IAC1F;IAEQ,OAAO,cAAc,CAAI,IAAmB,EAAA;AAClD,QAAA,OAAO,CAAC,EAAE,IAAI,CAAC,GAAG,IAAI,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC,KAAK,KAAK,SAAS,IAAI,IAAI,CAAC,KAAK,KAAK,IAAI,IAAI,IAAI,CAAC,KAAK,KAAK,EAAE,CAAC;IAC9G;AAEA,IAAA,OAAO,oBAAoB,CAAI,MAAwB,EAAE,OAAkC,EAAA;QACzF,OAAO,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,OAAO,CAAC;;IAE7C;AAEQ,IAAA,OAAO,WAAW,CAAI,KAAqB,EAAE,OAAkC,EAAA;QACrF,MAAM,SAAS,GAAG,CAAA,SAAA,EAAY,sBAAsB,CAAC,KAAK,CAAC,SAAS,CAAC,CAAA,UAAA,CAAY;QAEjF,MAAM,KAAK,GAAG,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,MAAM,IAAG;AACvC,YAAA,IAAI,IAAI,CAAC,aAAa,CAAI,MAAM,CAAC;gBAC/B,OAAO,CAAA,mBAAA,EAAsB,IAAI,CAAC,WAAW,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA,mBAAA,CAAqB;;gBAEnF,OAAO,IAAI,CAAC,UAAU,CAAC,MAAM,EAAE,OAAO,CAAC;AAC3C,QAAA,CAAC,CAAC;AAEF,QAAA,OAAO,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC;IAC9B;AAEQ,IAAA,OAAO,UAAU,CAAI,IAAmB,EAAE,OAAkC,EAAA;AAClF,QAAA,MAAM,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,MAAM,IAAI,MAAM,CAAC,GAAG,IAAI,IAAI,CAAC,GAAG,CAAC;AAE7D,QAAA,IAAI,CAAC,MAAM;AACT,YAAA,OAAO,EAAE;AAEX,QAAA,MAAM,GAAG,GAAG,CAAA,GAAA,EAAM,MAAM,CAAC,KAAK,MAAM;QACpC,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,GAAG,qBAAqB,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,WAAW,EAAE,GAAG,EAAE;;AAExF,QAAA,MAAM,KAAK,GAAG,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,KAAK,EAAE,MAAM,CAAC;AAClD,QAAA,OAAO,GAAG,GAAG,CAAA,CAAA,EAAI,QAAQ,CAAA,EAAA,EAAK,KAAK,GAAG;IACxC;AAEQ,IAAA,OAAO,WAAW,CAAI,KAAkB,EAAE,MAA+B,EAAA;AAC/E,QAAA,QAAQ,MAAM,CAAC,UAAU;AACvB,YAAA,KAAK,QAAQ;AACb,YAAA,KAAK,iBAAiB;AACpB,gBAAA,MAAM,cAAc,GAAG,MAAM,CAAC,aAAa,EAAE,IAAI,CAAC,MAAM,IAAI,MAAM,CAAC,KAAK,IAAI,KAAK,CAAC;AAClF,gBAAA,OAAO,cAAc,EAAE,KAAK,IAAI,EAAE;AACpC,YAAA,KAAK,MAAM;AACX,YAAA,KAAK,YAAY;AACf,gBAAA,MAAM,IAAI,GAAG,IAAI,QAAQ,CAAC,OAAO,CAAC;gBAClC,OAAO,IAAI,CAAC,SAAS,CAAC,KAAe,EAAE,YAAY,CAAC,IAAI,EAAE;;AAG9D,QAAA,OAAO,KAAe;IACxB;IAEA,OAAO,kBAAkB,CAAI,cAAiC,EAAA;QAC5D,MAAM,MAAM,GAAuB,EAAE;AAErC,QAAA,KAAK,MAAM,KAAK,IAAI,cAAc,CAAC,MAAM,EAAE;YACzC,MAAM,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,wBAAwB,CAAC,KAAK,CAAC,CAAC;QACtD;AAEA,QAAA,OAAO,MAAM;IACf;IAEQ,OAAO,wBAAwB,CAAI,KAAqB,EAAA;QAC9D,MAAM,OAAO,GAAuB,EAAE;AAEtC,QAAA,KAAK,MAAM,CAAC,IAAI,KAAK,CAAC,OAAO,EAAE;AAC7B,YAAA,IAAI,IAAI,CAAC,aAAa,CAAI,CAAC,CAAC,EAAE;gBAC5B,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,wBAAwB,CAAC,CAAC,CAAC,CAAC;YACnD;iBAAO,IAAI,IAAI,CAAC,YAAY,CAAI,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,QAAQ,IAAI,CAAC,CAAC,KAAK,KAAK,SAAS,IAAI,CAAC,CAAC,KAAK,KAAK,IAAI,EAAE;gBACtG,OAAO,CAAC,IAAI,CAAC;oBACX,KAAK,EAAE,CAAC,CAAC,GAAG;oBACZ,QAAQ,EAAE,CAAC,CAAC,QAAQ;AACpB,oBAAA,KAAK,EAAE,CAAC,CAAC,KAAK,EAAE,QAAQ,EAAE;oBAC1B,QAAQ,EAAE,KAAK,CAAC,SAAS;AACzB,oBAAA,KAAK,EAAE,KAAK,CAAC,EAAE,IAAI;AACpB,iBAAA,CAAC;YACJ;QACF;AAEA,QAAA,OAAO,OAAO;IAChB;;;MCrQW,eAAe,GAAG,IAAI,cAAc,CAAoC,iBAAiB;;MCOzF,qBAAqB,CAAA;AACxB,IAAA,aAAa,GAAG,MAAM,CAAC,eAAe,CAAC;IAE9B,0CAA0C,GAAG,iBAAiB;AACvE,IAAA,OAAO,GAAG,QAAQ,CAAC,MAAK;AAC9B,QAAA,MAAM,MAAM,GAAG,IAAI,CAAC,aAAa,EAAE;AAEnC,QAAA,IAAI,CAAC,MAAM;AACT,YAAA,OAAO,SAAS;AAElB,QAAA,OAAO,GAAG,IAAI,CAAC,0CAA0C,CAAA,CAAA,EAAI,MAAM,EAAE;AACvE,IAAA,CAAC,mDAAC;AAEM,IAAA,gBAAgB,GAAG,MAAM,CAAwC,EAAE,4DAAC;AAC5E,IAAA,eAAe,GAAG,IAAI,CAAC,gBAAgB,CAAC,UAAU,EAAE;AAE5C,IAAA,wBAAwB,GAAG,MAAM,CAAC,MAAK;QAC7C,IAAI,CAAC,iBAAiB,EAAE;AAC1B,IAAA,CAAC,oEAAC;AAEF,IAAA,WAAA,GAAA;QACE,IAAI,CAAC,iBAAiB,EAAE;IAC1B;IAEQ,iBAAiB,GAAA;AACvB,QAAA,MAAM,eAAe,GAAG,IAAI,CAAC,OAAO,EAAE;QACtC,IAAI,CAAC,eAAe,EAAE;AACpB,YAAA,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,EAAE,CAAC;YAC7B;QACF;QAEA,MAAM,oBAAoB,GAAG,YAAY,CAAC,OAAO,CAAC,eAAe,CAAC;QAElE,IAAI,CAAC,oBAAoB,EAAE;AACzB,YAAA,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,EAAE,CAAC;YAC7B;QACF;QAEA,MAAM,eAAe,GAA0C,IAAI,CAAC,KAAK,CAAC,oBAAoB,CAAC;AAE/F,QAAA,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,eAAe,CAAC;IAC5C;IAEA,kBAAkB,CAAC,OAAe,EAAE,cAAmC,EAAA;AACrE,QAAA,MAAM,eAAe,GAAG,IAAI,CAAC,OAAO,EAAE;AACtC,QAAA,IAAI,CAAC,eAAe;AAClB,YAAA,OAAO,KAAK;AAEd,QAAA,IAAI,CAAC,gBAAgB,CAAC,MAAM,CAAC,YAAY,IAAG;YAC1C,MAAM,YAAY,GAAG,YAAY,CAAC,OAAO,CAAC,IAAI,EAAE;AAEhD,YAAA,MAAM,KAAK,GAAG,YAAY,CAAC,SAAS,CAAC,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,EAAE,KAAK,cAAc,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;AACzF,YAAA,IAAI,QAA+B;AACnC,YAAA,IAAI,KAAK,IAAI,CAAC,EAAE;AACd,gBAAA,QAAQ,GAAG,CAAC,GAAG,YAAY,CAAC;AAC5B,gBAAA,QAAQ,CAAC,KAAK,CAAC,GAAG,cAAc;YAClC;AAAO,iBAAA;AACL,gBAAA,QAAQ,GAAG,CAAC,GAAG,YAAY,EAAE,cAAc,CAAC;YAC9C;AAEA,YAAA,MAAM,QAAQ,GAA0C;AACtD,gBAAA,GAAG,YAAY;gBACf,CAAC,OAAO,GAAG;aACZ;AACD,YAAA,YAAY,CAAC,OAAO,CAAC,eAAe,EAAE,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC;AAC/D,YAAA,OAAO,QAAQ;AACjB,QAAA,CAAC,CAAC;AAEF,QAAA,OAAO,IAAI;IACb;IAEA,oBAAoB,CAAC,OAAe,EAAE,cAAmC,EAAA;AACvE,QAAA,MAAM,eAAe,GAAG,IAAI,CAAC,OAAO,EAAE;AACtC,QAAA,IAAI,CAAC,eAAe;AAClB,YAAA,OAAO,KAAK;AAEd,QAAA,IAAI,CAAC,gBAAgB,CAAC,MAAM,CAAC,YAAY,IAAG;YAC1C,MAAM,YAAY,GAAG,YAAY,CAAC,OAAO,CAAC,IAAI,EAAE;AAEhD,YAAA,MAAM,QAAQ,GAAG,YAAY,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,EAAE,KAAK,cAAc,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;AAEzF,YAAA,MAAM,QAAQ,GAA0C;AACtD,gBAAA,GAAG,YAAY;gBACf,CAAC,OAAO,GAAG;aACZ;AACD,YAAA,YAAY,CAAC,OAAO,CAAC,eAAe,EAAE,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC;AAE/D,YAAA,OAAO,QAAQ;AACjB,QAAA,CAAC,CAAC;AAEF,QAAA,OAAO,IAAI;IACb;IAEA,qBAAqB,CAAC,OAAe,EAAE,gBAAwB,EAAA;QAC7D,MAAM,yBAAyB,GAAG,IAAI,CAAC,gBAAgB,EAAE,CAAC,OAAO,CAAC;AAElE,QAAA,IAAI,CAAC,yBAAyB;AAC5B,YAAA,OAAO,SAAS;AAElB,QAAA,OAAO,yBAAyB,CAAC,IAAI,CAAC,cAAc,IAAG;YACrD,OAAO,cAAc,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,EAAE,KAAK,SAAS,IAAI,cAAc,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,EAAE,IAAI,gBAAgB;AACvG,QAAA,CAAC,CAAC;IACJ;IAEA,qBAAqB,CAAC,OAAe,EAAE,gBAAwB,EAAA;QAC7D,MAAM,cAAc,GAAG,IAAI,CAAC,qBAAqB,CAAC,OAAO,EAAE,gBAAgB,CAAC;AAE5E,QAAA,IAAI,CAAC,cAAc;AACjB,YAAA,OAAO,EAAE;AAEX,QAAA,OAAO,mBAAmB,CAAC,kBAAkB,CAAC,cAAc,CAAC;IAC/D;wGA/GW,qBAAqB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA;AAArB,IAAA,OAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,qBAAqB,cAFpB,MAAM,EAAA,CAAA;;4FAEP,qBAAqB,EAAA,UAAA,EAAA,CAAA;kBAHjC,UAAU;AAAC,YAAA,IAAA,EAAA,CAAA;AACV,oBAAA,UAAU,EAAE;AACb,iBAAA;;;MCAY,mBAAmB,CAAA;AACtB,IAAA,aAAa,GAAG,MAAM,CAAC,eAAe,CAAC;IAE9B,iCAAiC,GAAG,eAAe;AAC5D,IAAA,OAAO,GAAG,QAAQ,CAAC,MAAK;AAC9B,QAAA,MAAM,MAAM,GAAG,IAAI,CAAC,aAAa,EAAE;AAEnC,QAAA,IAAI,CAAC,MAAM;AACT,YAAA,OAAO,SAAS;AAElB,QAAA,OAAO,GAAG,IAAI,CAAC,iCAAiC,CAAA,CAAA,EAAI,MAAM,EAAE;AAC9D,IAAA,CAAC,mDAAC;AAEM,IAAA,cAAc,GAAG,MAAM,CAAsC,EAAE,0DAAC;AACxE,IAAA,aAAa,GAAG,IAAI,CAAC,cAAc,CAAC,UAAU,EAAE;AAExC,IAAA,qBAAqB,GAAG,MAAM,CAAC,MAAK;AAC1C,QAAA,MAAM,eAAe,GAAG,IAAI,CAAC,OAAO,EAAE;QACtC,IAAI,CAAC,eAAe,EAAE;AACpB,YAAA,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,EAAE,CAAC;YAC3B;QACF;QAEA,MAAM,kBAAkB,GAAG,YAAY,CAAC,OAAO,CAAC,eAAe,CAAC;QAEhE,IAAI,CAAC,kBAAkB,EAAE;AACvB,YAAA,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,EAAE,CAAC;YAC3B;QACF;QAEA,MAAM,aAAa,GAAwC,IAAI,CAAC,KAAK,CAAC,kBAAkB,CAAC;AAEzF,QAAA,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,aAAa,CAAC;AACxC,IAAA,CAAC,iEAAC;IAEF,gBAAgB,CAAC,OAAe,EAAE,YAAiC,EAAA;AACjE,QAAA,MAAM,eAAe,GAAG,IAAI,CAAC,OAAO,EAAE;AACtC,QAAA,IAAI,CAAC,eAAe;AAClB,YAAA,OAAO,KAAK;AAEd,QAAA,IAAI,CAAC,cAAc,CAAC,MAAM,CAAC,YAAY,IAAG;AACxC,YAAA,MAAM,QAAQ,GAAG;AACf,gBAAA,GAAG,YAAY;gBACf,CAAC,OAAO,GAAG;aACZ;AACD,YAAA,YAAY,CAAC,OAAO,CAAC,eAAe,EAAE,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC;AAC/D,YAAA,OAAO,QAAQ;AACjB,QAAA,CAAC,CAAC;AAEF,QAAA,OAAO,IAAI;IACb;AAEA,IAAA,kBAAkB,CAAC,OAAe,EAAA;AAChC,QAAA,MAAM,eAAe,GAAG,IAAI,CAAC,OAAO,EAAE;AACtC,QAAA,IAAI,CAAC,eAAe;AAClB,YAAA,OAAO,KAAK;AAEd,QAAA,IAAI,CAAC,cAAc,CAAC,MAAM,CAAC,YAAY,IAAG;AACxC,YAAA,MAAM,QAAQ,GAAwC,EAAE,GAAG,YAAY,EAAE;AACzE,YAAA,OAAO,QAAQ,CAAC,OAAO,CAAC;AACxB,YAAA,YAAY,CAAC,OAAO,CAAC,eAAe,EAAE,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC;AAC/D,YAAA,OAAO,QAAQ;AACjB,QAAA,CAAC,CAAC;AAEF,QAAA,OAAO,IAAI;IACb;wGAjEW,mBAAmB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA;AAAnB,IAAA,OAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,mBAAmB,cAFlB,MAAM,EAAA,CAAA;;4FAEP,mBAAmB,EAAA,UAAA,EAAA,CAAA;kBAH/B,UAAU;AAAC,YAAA,IAAA,EAAA,CAAA;AACV,oBAAA,UAAU,EAAE;AACb,iBAAA;;;MCCY,oBAAoB,CAAA;AAE/B,IAAA,QAAQ,GAAiC,QAAQ,CAC/C,SAAS,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC,IAAI,CAC9B,SAAS,CAAC,IAAI,CAAC,oBAAoB,EAAE,CAAC,EACtC,GAAG,CAAC,MAAM,IAAI,CAAC,oBAAoB,EAAE,CAAC,CACvC,CACF;IAEO,oBAAoB,GAAA;AAC1B,QAAA,IAAI,QAAQ,GAAa;AACvB,YAAA,IAAI,EAAE,YAAY;YAClB,KAAK,EAAE,MAAM,CAAC,UAAU;YACxB,IAAI,EAAE,MAAM,CAAC;SACd;AAED,QAAA,IAAI,QAAQ,CAAC,KAAK,GAAG,GAAG,EAAE;AACxB,YAAA,QAAQ,CAAC,IAAI,GAAG,OAAO;AACvB,YAAA,OAAO,QAAQ;QACjB;AAEA,QAAA,IAAI,QAAQ,CAAC,KAAK,GAAG,GAAG,EAAE;AACxB,YAAA,QAAQ,CAAC,IAAI,GAAG,QAAQ;AACxB,YAAA,OAAO,QAAQ;QACjB;AAEA,QAAA,OAAO,QAAQ;IACjB;wGA3BW,oBAAoB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA;AAApB,IAAA,OAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,oBAAoB,cAFnB,MAAM,EAAA,CAAA;;4FAEP,oBAAoB,EAAA,UAAA,EAAA,CAAA;kBAHhC,UAAU;AAAC,YAAA,IAAA,EAAA,CAAA;AACV,oBAAA,UAAU,EAAE;AACb,iBAAA;;;MCwBY,8BAA8B,CAAA;AACzC,IAAA,mBAAmB,GAAG,MAAM,CAAC,mBAAmB,CAAC;AACjD,IAAA,SAAS,GAAG,MAAM,EAAC,YAA+C,EAAC;AACnE,IAAA,IAAI,GAAG,MAAM,CAA8B,eAAe,CAAC;IAC3D,OAAO,GAAG,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,EAAA,IAAA,SAAA,GAAA,CAAA,EAAA,SAAA,EAAA,SAAA,EAAA,CAAA,GAAA,EAAA,CAAA,CAAC;AACnC,IAAA,iBAAiB,GAAG,QAAQ,CAAC,MAAK;AAChC,QAAA,MAAM,WAAW,GAAG,IAAI,CAAC,OAAO,EAAE,CAAC,KAAK,CAAC,MAAM,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC;QAChE,MAAM,aAAa,GAAG,IAAI,CAAC,OAAO,EAAE,CAAC,IAAI,CAAC,MAAM,IAAI,IAAI,CAAC,oBAAoB,CAAC,MAAM,CAAC,CAAC;QACtF,OAAO,WAAW,IAAI,aAAa;AACrC,IAAA,CAAC,6DAAC;IAEF,qBAAqB,GAAY,SAAS;IAC1C,mBAAmB,GAAY,SAAS;IACxC,aAAa,GAAW,GAAG;AAC3B,IAAA,cAAc,GAAG,MAAM,CAAqB,SAAS,0DAAC;AAEtD,IAAA,oBAAoB,CAAC,MAAuB,EAAA;AAC1C,QAAA,MAAM,KAAK,GAAG,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,GAAG,CAAC;QAChD,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC;YACnD,OAAO,KAAK,CAAC,MAAM,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI;QAEzC,IAAI,KAAK,YAAY,SAAS;AAC5B,YAAA,OAAO,CAAC,KAAK,CAAC,KAAK,IAAI,IAAI,IAAI,KAAK,CAAC,GAAG,IAAI,IAAI,KAAK,CAAC,MAAM,CAAC,IAAI;AAEnE,QAAA,IAAI,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC;AACxB,YAAA,OAAO,CAAC,MAAM,CAAC,IAAI;AAErB,QAAA,OAAO,KAAK;IACd;AAEA,IAAA,SAAS,CAAC,KAAa,EAAA;QACrB,MAAM,IAAI,GAAG,CAAC,GAAG,IAAI,CAAC,OAAO,EAAE,CAAC;AAChC,QAAA,IAAI,KAAK,GAAG,CAAC,EAAE;YACb,CAAC,IAAI,CAAC,KAAK,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,IAAI,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC;AAC/D,YAAA,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC;QACxB;IACF;AAEA,IAAA,WAAW,CAAC,KAAa,EAAA;QACvB,MAAM,IAAI,GAAG,CAAC,GAAG,IAAI,CAAC,OAAO,EAAE,CAAC;QAChC,IAAI,KAAK,GAAG,IAAI,CAAC,MAAM,GAAG,CAAC,EAAE;YAC3B,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,IAAI,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC;AAC/D,YAAA,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC;QACxB;IACF;AAEA,IAAA,MAAM,CAAC,KAAiC,EAAA;QACtC,MAAM,IAAI,GAAG,CAAC,GAAG,IAAI,CAAC,OAAO,EAAE,CAAC;QAChC,eAAe,CAAC,IAAI,EAAE,KAAK,CAAC,aAAa,EAAE,KAAK,CAAC,YAAY,CAAC;AAC9D,QAAA,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC;IACxB;AAEA,IAAA,cAAc,CAAC,aAA8B,EAAA;AAC3C,QAAA,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,IAAG;AAC1B,YAAA,OAAO,KAAK,CAAC,GAAG,CAAC,MAAM,IAAG;AACxB,gBAAA,IAAI,MAAM,CAAC,GAAG,IAAI,aAAa,CAAC,GAAG;oBACjC,OAAO,EAAE,GAAG,MAAM,EAAE,IAAI,EAAE,CAAC,MAAM,CAAC,IAAI,EAAE;;AAExC,oBAAA,OAAO,MAAM;AACjB,YAAA,CAAC,CAAC;AACJ,QAAA,CAAC,CAAC;IACJ;IAEA,UAAU,CAAC,YAA6B,EAAE,KAAa,EAAA;QACrD,MAAM,OAAO,GAAG,CAAC,GAAG,IAAI,CAAC,OAAO,EAAE,CAAC;AACnC,QAAA,MAAM,aAAa,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,QAAQ,CAAC;QAEnD,IAAI,YAAY,CAAC,GAAG,IAAI,aAAa,EAAE,GAAG,EAAE;YAC1C,MAAM,UAAU,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC,IAAG;gBACjC,OAAO;AACL,oBAAA,GAAG,CAAC;AACJ,oBAAA,QAAQ,EAAE;iBACX;AACH,YAAA,CAAC,CAAC;AACF,YAAA,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,UAAU,CAAC;YAC5B;QACF;AAEA,QAAA,YAAY,CAAC,IAAI,CAAC,qBAAqB,CAAC;AACxC,QAAA,YAAY,CAAC,IAAI,CAAC,mBAAmB,CAAC;AACtC,QAAA,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,SAAS,CAAC;AAElC,QAAA,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,KAAK,CAAC;AAE9B,QAAA,IAAI,CAAC,qBAAqB,GAAG,UAAU,CAAC,MAAK;AAC3C,YAAA,eAAe,CAAC,OAAO,EAAE,KAAK,EAAE,CAAC,CAAC;YAClC,MAAM,UAAU,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC,IAAG;gBACjC,OAAO;AACL,oBAAA,GAAG,CAAC;AACJ,oBAAA,QAAQ,EAAE,CAAC,CAAC,GAAG,IAAI,YAAY,CAAC;iBACjC;AACH,YAAA,CAAC,CAAC;AACF,YAAA,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,UAAU,CAAC;AAC5B,YAAA,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,CAAC,CAAC;YAC1B,IAAI,CAAC,mBAAmB,GAAG,UAAU,CAAC,MAAM,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,SAAS,CAAC,EAAE,IAAI,CAAC,aAAa,CAAC;AACrG,QAAA,CAAC,EAAE,IAAI,CAAC,aAAa,CAAC;IACxB;IAEA,cAAc,GAAA;AACZ,QAAA,IAAI,CAAC,mBAAmB,CAAC,gBAAgB,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,OAAO,EAAE,CAAC;AAC5E,QAAA,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE;IACxB;IAEA,YAAY,GAAA;QACV,IAAI,CAAC,mBAAmB,CAAC,kBAAkB,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC;AAC9D,QAAA,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE;IACxB;wGA1GW,8BAA8B,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;4FAA9B,8BAA8B,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,6BAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EC/B3C,k4EA4CqB,EAAA,MAAA,EAAA,CAAA,8hCAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,ED5BjB,eAAe,2iBACf,cAAc,EAAA,QAAA,EAAA,sCAAA,EAAA,MAAA,EAAA,CAAA,IAAA,CAAA,EAAA,QAAA,EAAA,CAAA,gBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACd,gBAAgB,EAAA,QAAA,EAAA,8DAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAChB,gBAAgB,EAAA,QAAA,EAAA,8DAAA,EAAA,MAAA,EAAA,CAAA,OAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAChB,cAAc,EAAA,QAAA,EAAA,sCAAA,EAAA,MAAA,EAAA,CAAA,YAAA,EAAA,MAAA,EAAA,kBAAA,EAAA,gBAAA,CAAA,EAAA,QAAA,EAAA,CAAA,gBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAEd,aAAa,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAR,IAAA,CAAA,OAAA,EAAA,QAAA,EAAA,UAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,SAAA,EAAA,SAAA,EAAA,UAAA,CAAA,EAAA,QAAA,EAAA,CAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EACb,oBAAoB,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,IAAA,CAAA,cAAA,EAAA,QAAA,EAAA,kBAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,IAAA,EAAA,eAAA,EAAA,YAAA,EAAA,iBAAA,EAAA,kBAAA,EAAA,UAAA,EAAA,OAAA,EAAA,UAAA,EAAA,eAAA,EAAA,UAAA,EAAA,SAAA,EAAA,UAAA,EAAA,qBAAA,CAAA,EAAA,OAAA,EAAA,CAAA,QAAA,EAAA,cAAA,CAAA,EAAA,QAAA,EAAA,CAAA,gBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACpB,WAAW,shBACX,OAAO,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,aAAA,EAAA,iBAAA,EAAA,oBAAA,EAAA,iBAAA,EAAA,mBAAA,EAAA,yBAAA,EAAA,iBAAA,EAAA,0BAAA,EAAA,qBAAA,EAAA,yBAAA,EAAA,cAAA,CAAA,EAAA,OAAA,EAAA,CAAA,gBAAA,EAAA,iBAAA,EAAA,cAAA,EAAA,gBAAA,EAAA,eAAA,EAAA,gBAAA,EAAA,cAAA,CAAA,EAAA,QAAA,EAAA,CAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EACP,gBAAgB,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAG,EAAA,CAAA,UAAA,EAAA,QAAA,EAAA,cAAA,EAAA,MAAA,EAAA,CAAA,oBAAA,EAAA,4BAAA,EAAA,oBAAA,EAAA,qBAAA,EAAA,qBAAA,EAAA,yBAAA,EAAA,YAAA,EAAA,iBAAA,CAAA,EAAA,QAAA,EAAA,CAAA,YAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EALhB,aAAa,EAAA,IAAA,EAAA,WAAA,EAAA,CAAA,EAAA,CAAA;;4FAUJ,8BAA8B,EAAA,UAAA,EAAA,CAAA;kBAlB1C,SAAS;AACE,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,6BAA6B,EAAA,OAAA,EAC9B;wBACP,eAAe;wBACf,cAAc;wBACd,gBAAgB;wBAChB,gBAAgB;wBAChB,cAAc;wBACd,aAAa;wBACb,aAAa;wBACb,oBAAoB;wBACpB,WAAW;wBACX,OAAO;wBACP;AACD,qBAAA,EAAA,QAAA,EAAA,k4EAAA,EAAA,MAAA,EAAA,CAAA,8hCAAA,CAAA,EAAA;;;MEDU,2BAA2B,CAAA;AACtC,IAAA,IAAI,GAAG,KAAK,CAAC,QAAQ,+CAAa;AAClC,IAAA,MAAM,GAAG,KAAK,CAAC,QAAQ,iDAA2B;IAClD,YAAY,GAAG,MAAM,EAAU;IAE/B,OAAO,GAAG,QAAQ,CAAC,MAAM,IAAI,CAAC,MAAM,EAAE,CAAC,OAAO,CAAC,MAAM,CAAC,MAAM,IAAI,MAAM,CAAC,UAAU,IAAI,SAAS,CAAC,EAAA,IAAA,SAAA,GAAA,CAAA,EAAA,SAAA,EAAA,SAAA,EAAA,CAAA,GAAA,EAAA,CAAA,CAAC;IAChG,oBAAoB,GAAG,uBAAuB;IAC9C,mBAAmB,GAAG,qBAAqB;IAE3C,SAAS,GAAA;QACP,OAAQ,IAAI,CAAC,IAAI,EAAE,CAAC,GAAG,CAAC,IAAI,CAAkB,CAAC,KAAK;IACtD;IAEA,MAAM,GAAA;QACJ,OAAO,IAAI,CAAC,IAAI,EAAE,CAAC,GAAG,CAAC,KAAK,CAAiB;IAC/C;IAEA,WAAW,GAAA;QACT,OAAO,IAAI,CAAC,IAAI,EAAE,CAAC,GAAG,CAAC,UAAU,CAAiB;IACpD;IAEA,QAAQ,GAAA;QACN,OAAO,IAAI,CAAC,IAAI,EAAE,CAAC,GAAG,CAAC,OAAO,CAAiB;IACjD;AAEA,IAAA,iBAAiB,CAAC,KAAc,EAAA;AAC9B,QAAA,OAAO,IAAI,CAAC,OAAO,EAAE,CAAC,IAAI,CAAC,MAAM,IAAI,MAAM,CAAC,GAAG,IAAI,KAAK,CAAC;IAC3D;AAEA,IAAA,kBAAkB,CAAC,KAAc,EAAA;QAC/B,MAAM,cAAc,GAAG,IAAI,CAAC,iBAAiB,CAAC,KAAK,CAAC;AAEpD,QAAA,IAAI,CAAC,cAAc,IAAI,CAAC,cAAc,CAAC,UAAU;AAC/C,YAAA,OAAO,EAAE;QAEX,OAAO,IAAI,CAAC,oBAAoB,CAAC,cAAc,CAAC,UAAU,CAAC;IAC7D;AAEA,IAAA,aAAa,CAAC,KAAc,EAAA;QAC1B,MAAM,cAAc,GAAG,IAAI,CAAC,iBAAiB,CAAC,KAAK,CAAC;QACpD,OAAO,cAAc,EAAE,UAAU;IACnC;AAEA,IAAA,WAAW,CAAC,KAA2B,EAAA;QACrC,IAAI,CAAC,WAAW,EAAE,CAAC,QAAQ,CAAC,IAAI,CAAC;QACjC,IAAI,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,IAAI,CAAC;IAChC;wGA9CW,2BAA2B,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAA3B,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,2BAA2B,yXC1BxC,srFAsEA,EAAA,MAAA,EAAA,CAAA,uNAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EDxDI,eAAe,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,aAAA,EAAA,QAAA,EAAA,sFAAA,EAAA,QAAA,EAAA,CAAA,WAAA,EAAA,WAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EACf,aAAa,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAJ,IAAA,CAAA,OAAA,EAAA,QAAA,EAAA,UAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,SAAA,EAAA,SAAA,EAAA,UAAA,CAAA,EAAA,QAAA,EAAA,CAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EACb,mBAAmB,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,oBAAA,EAAA,QAAA,EAAA,8MAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,eAAA,EAAA,QAAA,EAAA,2CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,oBAAA,EAAA,QAAA,EAAA,eAAA,EAAA,MAAA,EAAA,CAAA,aAAA,EAAA,UAAA,EAAA,SAAA,CAAA,EAAA,OAAA,EAAA,CAAA,eAAA,CAAA,EAAA,QAAA,EAAA,CAAA,QAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EACnB,kBAAkB,ghBAClB,cAAc,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAK,IAAA,CAAA,QAAA,EAAA,QAAA,EAAA,yHAAA,EAAA,MAAA,EAAA,CAAA,UAAA,EAAA,IAAA,EAAA,aAAA,EAAA,MAAA,EAAA,UAAA,EAAA,MAAA,EAAA,mBAAA,EAAA,kBAAA,EAAA,OAAA,EAAA,UAAA,EAAA,qBAAA,CAAA,EAAA,QAAA,EAAA,CAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EACd,eAAe,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAH,IAAA,CAAA,SAAA,EAAA,QAAA,EAAA,YAAA,EAAA,MAAA,EAAA,CAAA,kBAAA,EAAA,YAAA,EAAA,UAAA,EAAA,eAAA,EAAA,UAAA,EAAA,8BAAA,EAAA,aAAA,EAAA,UAAA,EAAA,UAAA,EAAA,wBAAA,EAAA,aAAA,EAAA,OAAA,EAAA,YAAA,EAAA,iBAAA,EAAA,mBAAA,EAAA,2BAAA,EAAA,gBAAA,EAAA,IAAA,EAAA,YAAA,EAAA,0BAAA,CAAA,EAAA,OAAA,EAAA,CAAA,cAAA,EAAA,QAAA,EAAA,QAAA,EAAA,iBAAA,EAAA,aAAA,CAAA,EAAA,QAAA,EAAA,CAAA,WAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,SAAA,EAAA,QAAA,EAAA,YAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,IAAA,EAAA,UAAA,CAAA,EAAA,OAAA,EAAA,CAAA,mBAAA,CAAA,EAAA,QAAA,EAAA,CAAA,WAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EACf,mBAAmB,ogBACnB,gBAAgB,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAK,EAAA,CAAA,UAAA,EAAA,QAAA,EAAA,cAAA,EAAA,MAAA,EAAA,CAAA,oBAAA,EAAA,4BAAA,EAAA,oBAAA,EAAA,qBAAA,EAAA,qBAAA,EAAA,yBAAA,EAAA,YAAA,EAAA,iBAAA,CAAA,EAAA,QAAA,EAAA,CAAA,YAAA,CAAA,EAAA,CAAA,EAAA,CAAA;;4FAKP,2BAA2B,EAAA,UAAA,EAAA,CAAA;kBAfvC,SAAS;AACE,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,0BAA0B,EAAA,OAAA,EAC3B;wBACP,eAAe;wBACf,aAAa;wBACb,mBAAmB;wBACnB,kBAAkB;wBAClB,cAAc;wBACd,eAAe;wBACf,mBAAmB;wBACnB;AACD,qBAAA,EAAA,QAAA,EAAA,srFAAA,EAAA,MAAA,EAAA,CAAA,uNAAA,CAAA,EAAA;;;MEUU,4BAA4B,CAAA;AACvC,IAAA,UAAU,GAAG,KAAK,CAAC,QAAQ,qDAAW;AACtC,IAAA,KAAK,GAAG,KAAK,CAAC,QAAQ,gDAAa;AACnC,IAAA,MAAM,GAAG,KAAK,CAAC,QAAQ,iDAA2B;IAClD,QAAQ,GAAG,MAAM,EAAU;IAC3B,SAAS,GAAG,MAAM,EAAU;IAC5B,WAAW,GAAG,MAAM,EAAU;IAC9B,YAAY,GAAG,MAAM,EAAU;IAE/B,sBAAsB,GAAG,wBAAwB;AAEhC,IAAA,oBAAoB,GAAG,MAAM,CAAC,oBAAoB,CAAC;AACpE,IAAA,SAAS,GAAG,QAAQ,CAAU,MAAM,IAAI,CAAC,oBAAoB,CAAC,QAAQ,EAAE,EAAE,IAAI,IAAI,YAAY,qDAAC;AAE/F,IAAA,iBAAiB,CAAC,KAAsB,EAAA;AACtC,QAAA,OAAO,mBAAmB,CAAC,iBAAiB,CAAC,KAAK,CAAC;IACrD;IAEA,YAAY,GAAA;QACV,OAAO,IAAI,CAAC,KAAK,EAAE,CAAC,GAAG,CAAC,WAAW,CAAiB;IACtD;IAEA,UAAU,GAAA;QACR,OAAQ,IAAI,CAAC,KAAK,EAAE,CAAC,GAAG,CAAC,IAAI,CAAkB,CAAC,KAAK;IACvD;IAEA,UAAU,GAAA;QACR,OAAQ,IAAI,CAAC,KAAK,EAAE,CAAC,GAAG,CAAC,SAAS,CAAe,CAAC,QAAuB;IAC3E;wGA5BW,4BAA4B,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;4FAA5B,4BAA4B,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,2BAAA,EAAA,MAAA,EAAA,EAAA,UAAA,EAAA,EAAA,iBAAA,EAAA,YAAA,EAAA,UAAA,EAAA,YAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,KAAA,EAAA,EAAA,iBAAA,EAAA,OAAA,EAAA,UAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,MAAA,EAAA,EAAA,iBAAA,EAAA,QAAA,EAAA,UAAA,EAAA,QAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,OAAA,EAAA,EAAA,QAAA,EAAA,UAAA,EAAA,SAAA,EAAA,WAAA,EAAA,WAAA,EAAA,aAAA,EAAA,YAAA,EAAA,cAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EChCzC,6mFA8EM,EAAA,MAAA,EAAA,CAAA,2oBAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,ED9CO,4BAA4B,mLAdrC,eAAe,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,SAAA,EAAA,QAAA,EAAA,iOAAA,EAAA,MAAA,EAAA,CAAA,WAAA,CAAA,EAAA,QAAA,EAAA,CAAA,WAAA,EAAA,WAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,aAAA,EAAA,QAAA,EAAA,sFAAA,EAAA,QAAA,EAAA,CAAA,WAAA,EAAA,WAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EACf,aAAa,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAP,IAAA,CAAA,OAAA,EAAA,QAAA,EAAA,UAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,SAAA,EAAA,SAAA,EAAA,UAAA,CAAA,EAAA,QAAA,EAAA,CAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EACb,mBAAmB,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,eAAA,EAAA,QAAA,EAAA,2CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,oBAAA,EAAA,QAAA,EAAA,0FAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,oBAAA,EAAA,QAAA,EAAA,eAAA,EAAA,MAAA,EAAA,CAAA,aAAA,EAAA,UAAA,EAAA,SAAA,CAAA,EAAA,OAAA,EAAA,CAAA,eAAA,CAAA,EAAA,QAAA,EAAA,CAAA,QAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,kBAAA,EAAA,QAAA,EAAA,aAAA,EAAA,MAAA,EAAA,CAAA,WAAA,CAAA,EAAA,OAAA,EAAA,CAAA,UAAA,CAAA,EAAA,QAAA,EAAA,CAAA,QAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EACnB,kBAAkB,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAClB,cAAc,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EACd,eAAe,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EACf,mBAAmB,+BACnB,2BAA2B,EAAA,QAAA,EAAA,0BAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,QAAA,CAAA,EAAA,OAAA,EAAA,CAAA,cAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAC3B,qBAAqB,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,oBAAA,EAAA,QAAA,EAAA,yBAAA,EAAA,MAAA,EAAA,CAAA,YAAA,EAAA,MAAA,EAAA,UAAA,EAAA,OAAA,EAAA,UAAA,EAAA,UAAA,EAAA,qBAAA,EAAA,8BAAA,EAAA,gCAAA,CAAA,EAAA,OAAA,EAAA,CAAA,aAAA,EAAA,QAAA,CAAA,EAAA,QAAA,EAAA,CAAA,sBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,eAAA,EAAA,QAAA,EAAA,mBAAA,EAAA,MAAA,EAAA,CAAA,YAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,MAAA,EAAA,OAAA,EAAA,UAAA,EAAA,eAAA,EAAA,YAAA,EAAA,SAAA,EAAA,UAAA,EAAA,qBAAA,CAAA,EAAA,OAAA,EAAA,CAAA,QAAA,CAAA,EAAA,QAAA,EAAA,CAAA,iBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EACrB,gBAAgB,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,UAAA,EAAA,QAAA,EAAA,cAAA,EAAA,MAAA,EAAA,CAAA,oBAAA,EAAA,4BAAA,EAAA,oBAAA,EAAA,qBAAA,EAAA,qBAAA,EAAA,yBAAA,EAAA,YAAA,EAAA,iBAAA,CAAA,EAAA,QAAA,EAAA,CAAA,YAAA,CAAA,EAAA,CAAA,EAAA,CAAA;;4FAKP,4BAA4B,EAAA,UAAA,EAAA,CAAA;kBAjBxC,SAAS;AACE,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,2BAA2B,EAAA,OAAA,EAC5B;wBACP,eAAe;wBACf,aAAa;wBACb,mBAAmB;wBACnB,kBAAkB;wBAClB,cAAc;wBACd,eAAe;wBACf,mBAAmB;wBACnB,2BAA2B;wBAC3B,qBAAqB;wBACrB;AACD,qBAAA,EAAA,QAAA,EAAA,6mFAAA,EAAA,MAAA,EAAA,CAAA,2oBAAA,CAAA,EAAA;;;MEOU,gCAAgC,CAAA;AAC1B,IAAA,EAAE,GAAG,MAAM,CAAC,WAAW,CAAC;AACxB,IAAA,qBAAqB,GAAG,MAAM,CAAC,qBAAqB,CAAC;AACtE,IAAA,SAAS,GAAG,MAAM,EAAC,YAAiD,EAAC;AACrE,IAAA,IAAI,GAAG,MAAM,CAAiC,eAAe,CAAC;AAE9D,IAAA,KAAK,GAAG,MAAM,CAAC,EAAE,iDAAC;AAElB,IAAA,IAAI,GAAG,mBAAmB,CAAC,oBAAoB,CAAI,IAAI,CAAC,EAAE,EAAE,IAAI,CAAC,IAAI,CAAC,cAAc,CAAC;IACrF,WAAW,GAAG,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC;AAE9C,IAAA,6BAA6B,GAAG,MAAM,CAAC,MAAK;AAC1C,QAAA,MAAM,MAAM,GAAG,IAAI,CAAC,WAAW,EAAE;AAEjC,QAAA,IAAI,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE;AACrB,YAAA,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC;YAClB;QACF;QAEA,MAAM,cAAc,GAAG,mBAAmB,CAAC,uBAAuB,CAAI,IAAI,CAAC,IAAI,CAAC;AAChF,QAAA,MAAM,WAAW,GAAG,mBAAmB,CAAC,oBAAoB,CAAC,cAAc,CAAC,MAAM,EAAE,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC;AAC7G,QAAA,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,WAAW,CAAC;AAC7B,IAAA,CAAC,yEAAC;IAEF,YAAY,GAAA;AACV,QAAA,OAAQ,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAe,CAAC,QAAQ,CAAC,CAAC,CAAc;IACxE;AAEA,IAAA,QAAQ,CAAC,OAAe,EAAA;AACtB,QAAA,MAAM,QAAQ,GAAmB;YAC/B,EAAE,EAAEQ,EAAM,EAAE;AACZ,YAAA,SAAS,EAAE,KAAK;AAChB,YAAA,OAAO,EAAE;AACP,gBAAA,EAAE,EAAE,EAAEA,EAAM,EAAE;AACf;SACF;AACD,QAAA,mBAAmB,CAAC,eAAe,CAAI,IAAI,CAAC,EAAE,EAAE,IAAI,CAAC,IAAI,EAAE,OAAO,EAAE,QAAQ,CAAC;IAC/E;AAEA,IAAA,SAAS,CAAC,OAAe,EAAA;QACvB,MAAM,OAAO,GAAkB,EAAE,EAAE,EAAEA,EAAM,EAAE,EAAE;AAC/C,QAAA,mBAAmB,CAAC,cAAc,CAAI,IAAI,CAAC,EAAE,EAAE,IAAI,CAAC,IAAI,EAAE,OAAO,EAAE,OAAO,CAAC;IAC7E;AAEA,IAAA,WAAW,CAAC,OAAe,EAAA;QACzB,mBAAmB,CAAC,WAAW,CAAI,IAAI,CAAC,IAAI,EAAE,OAAO,CAAC;IACxD;AAEA,IAAA,YAAY,CAAC,MAAc,EAAA;QACzB,mBAAmB,CAAC,UAAU,CAAI,IAAI,CAAC,IAAI,EAAE,MAAM,CAAC;IACtD;AAEA,IAAA,QAAQ,CAAC,QAAkB,EAAA;QACzB,MAAM,cAAc,GAAG,mBAAmB,CAAC,uBAAuB,CAAI,IAAI,CAAC,IAAI,CAAC;QAChF,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,OAAO;QACxC,IAAI,CAAC,qBAAqB,CAAC,kBAAkB,CAAC,OAAO,EAAE,cAAc,CAAC;QACtE,QAAQ,QAAQ;AACd,YAAA,KAAK,MAAM;AACT,gBAAA,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE;gBACtB;AACF,YAAA,KAAK,gBAAgB;AACnB,gBAAA,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,cAAc,CAAC;gBACpC;;IAEN;wGAhEW,gCAAgC,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;4FAAhC,gCAAgC,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,+BAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,ECnC7C,o/DAwCO,EAAA,MAAA,EAAA,CAAA,6ZAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EDpBH,cAAc,+HACd,gBAAgB,EAAA,QAAA,EAAA,8DAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAChB,gBAAgB,EAAA,QAAA,EAAA,8DAAA,EAAA,MAAA,EAAA,CAAA,OAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAChB,cAAc,EAAA,QAAA,EAAA,sCAAA,EAAA,MAAA,EAAA,CAAA,YAAA,EAAA,MAAA,EAAA,kBAAA,EAAA,gBAAA,CAAA,EAAA,QAAA,EAAA,CAAA,gBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAEd,eAAe,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,SAAA,EAAA,QAAA,EAAA,iOAAA,EAAA,MAAA,EAAA,CAAA,WAAA,CAAA,EAAA,QAAA,EAAA,CAAA,WAAA,EAAA,WAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EACf,aAAa,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EACb,mBAAmB,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAR,EAAA,CAAA,aAAA,EAAA,QAAA,EAAA,8CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,EAAA,CAAA,oBAAA,EAAA,QAAA,EAAA,8MAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,EAAA,CAAA,eAAA,EAAA,QAAA,EAAA,2CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,EAAA,CAAA,oBAAA,EAAA,QAAA,EAAA,0FAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,EAAA,CAAA,kBAAA,EAAA,QAAA,EAAA,4EAAA,EAAA,MAAA,EAAA,CAAA,WAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,EAAA,CAAA,kBAAA,EAAA,QAAA,EAAA,aAAA,EAAA,MAAA,EAAA,CAAA,WAAA,CAAA,EAAA,OAAA,EAAA,CAAA,UAAA,CAAA,EAAA,QAAA,EAAA,CAAA,QAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,EAAA,CAAA,eAAA,EAAA,QAAA,EAAA,mBAAA,EAAA,MAAA,EAAA,CAAA,iBAAA,EAAA,UAAA,EAAA,SAAA,CAAA,EAAA,OAAA,EAAA,CAAA,eAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EACnB,kBAAkB,ueAClB,cAAc,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAI,IAAA,CAAA,QAAA,EAAA,QAAA,EAAA,yHAAA,EAAA,MAAA,EAAA,CAAA,UAAA,EAAA,IAAA,EAAA,aAAA,EAAA,MAAA,EAAA,UAAA,EAAA,MAAA,EAAA,mBAAA,EAAA,kBAAA,EAAA,OAAA,EAAA,UAAA,EAAA,qBAAA,CAAA,EAAA,QAAA,EAAA,CAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACd,4BAA4B,EAAA,QAAA,EAAA,2BAAA,EAAA,MAAA,EAAA,CAAA,YAAA,EAAA,OAAA,EAAA,QAAA,CAAA,EAAA,OAAA,EAAA,CAAA,UAAA,EAAA,WAAA,EAAA,aAAA,EAAA,cAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAN5B,aAAa,EAAA,IAAA,EAAA,WAAA,EAAA,CAAA,EAAA,CAAA;;4FAWJ,gCAAgC,EAAA,UAAA,EAAA,CAAA;kBAlB5C,SAAS;AACE,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,+BAA+B,EAAA,OAAA,EAChC;wBACP,cAAc;wBACd,gBAAgB;wBAChB,gBAAgB;wBAChB,cAAc;wBACd,aAAa;wBACb,eAAe;wBACf,aAAa;wBACb,mBAAmB;wBACnB,kBAAkB;wBAClB,cAAc;wBACd;AACD,qBAAA,EAAA,QAAA,EAAA,o/DAAA,EAAA,MAAA,EAAA,CAAA,6ZAAA,CAAA,EAAA;;;MEsCU,iBAAiB,CAAA;AAEX,IAAA,mBAAmB,GAAG,MAAM,CAAC,mBAAmB,CAAC;AACjD,IAAA,qBAAqB,GAAG,MAAM,CAAC,qBAAqB,CAAC;AACrD,IAAA,MAAM,GAAG,MAAM,CAAC,SAAS,CAAC;AAC1B,IAAA,oBAAoB,GAAG,MAAM,CAAC,oBAAoB,CAAC;AAC1D,IAAA,SAAS,GAAG,QAAQ,CAAU,MAAM,IAAI,CAAC,oBAAoB,CAAC,QAAQ,EAAE,EAAE,IAAI,IAAI,YAAY,qDAAC;AAEzG,IAAA,QAAQ,GAAG,KAAK,CAAC,QAAQ,mDAAiD;AAC1E,IAAA,OAAO,GAAG,KAAK,CACb,MAAM,CACJ;AACE,QAAA,UAAU,EAAE,CAAC;AACb,QAAA,QAAQ,EAAE,EAAE;AACZ,QAAA,KAAK,EAAE,SAAS;AAChB,QAAA,MAAM,EAAE,SAAS;AACjB,QAAA,mBAAmB,EAAE,SAAS;AAC9B,QAAA,gBAAgB,EAAE;AACd,KAAA,CACP,mDACF;AAED,IAAA,MAAM,GAAG,KAAK,CAAC,QAAQ,iDAA2C;IAExD,WAAW,GAAG,MAAM,EAAQ;IAC5B,WAAW,GAAG,MAAM,EAAK;IACzB,WAAW,GAAG,MAAM,EAAK;IACzB,cAAc,GAAG,MAAM,EAA0B;IACjD,kBAAkB,GAAG,MAAM,EAAY;IACvC,oBAAoB,GAAG,MAAM,EAA2B;IAG/C,eAAe,GAAG,QAAQ;IAC1B,mBAAmB,GAAG,eAAe;IACrC,sBAAsB,GAAG,QAAQ;IACjC,wBAAwB,GAAG,oBAAoB;IAC/C,YAAY,GAAG,GAAG;IACrC,YAAY,GAAG,UAAU,CAAuB;QAC9C,MAAM,EAAE,MAAM,IAAI,CAAC,OAAO,EAAE,EAAE;AAC9B,QAAA,MAAM,EAAE,CAAC,EAAE,MAAM,EAAE,KAAI;AACrB,YAAA,MAAM,iBAAiB,GAAG,IAAI,CAAC,QAAQ,EAAE;AACzC,YAAA,OAAO,iBAAiB,CAAC,MAAM,CAAC;QAClC,CAAC;QACD,YAAY,EAAE,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE;AACpC,KAAA,CAAC;AACQ,IAAA,IAAI,GAAG,QAAQ,CAAC,MAAK;AAC7B,QAAA,IAAI,IAAI,CAAC,YAAY,CAAC,KAAK,EAAE;AAC3B,YAAA,OAAO,EAAE;QAEX,MAAM,KAAK,GAAG,IAAI,CAAC,YAAY,CAAC,KAAK,EAAE;QACvC,OAAO,KAAK,CAAC,KAAK;AACpB,IAAA,CAAC,gDAAC;AACQ,IAAA,KAAK,GAAG,QAAQ,CAAC,MAAK;AAC9B,QAAA,IAAI,IAAI,CAAC,YAAY,CAAC,KAAK,EAAE;AAC3B,YAAA,OAAO,CAAC;QAEV,MAAM,KAAK,GAAG,IAAI,CAAC,YAAY,CAAC,KAAK,EAAE;QACvC,OAAO,KAAK,CAAC,KAAK;AACpB,IAAA,CAAC,iDAAC;AAEQ,IAAA,YAAY,GAAG,QAAQ,CAAC,MAAK;QACrC,MAAM,aAAa,GAAG,IAAI,CAAC,mBAAmB,CAAC,aAAa,EAAE;AAC9D,QAAA,MAAM,WAAW,GAAG,IAAI,CAAC,MAAM,EAAE,EAAE;QACnC,MAAM,YAAY,GAAkC,aAAa,CAAC,WAAW,CAAC,OAAO,CAAC;QACtF,MAAM,mBAAmB,GAAsB,WAAW,CAAC,OAAO,CAAC,GAAG,CAAC,MAAM,IAAG;YAC9E,OAAO;gBACL,GAAG,EAAE,MAAM,CAAC,GAAG;AACf,gBAAA,IAAI,EAAE,IAAI;AACV,gBAAA,QAAQ,EAAE,WAAW,CAAC,mBAAmB,IAAI,MAAM,CAAC;aACrD;AACH,QAAA,CAAC,CAAC;AAEF,QAAA,IAAI,CAAC,YAAY;AACf,YAAA,OAAO,mBAAmB;;AAG5B,QAAA,MAAM,eAAe,GAAG,YAAY,CAAC,MAAM,CAAC,MAAM,IAAI,IAAI,CAAC,qBAAqB,CAAC,MAAM,EAAE,mBAAmB,CAAC,CAAC;;QAG9G,MAAM,YAAY,GAAG,mBAAmB,CAAC,MAAM,CAAC,aAAa,IAAI,CAAC,IAAI,CAAC,qBAAqB,CAAC,aAAa,EAAE,YAAY,CAAC,CAAC;AAE1H,QAAA,OAAO,CAAC,GAAG,eAAe,EAAE,GAAG,YAAY,CAAC;AAC9C,IAAA,CAAC,wDAAC;IAEQ,eAAe,GAAG,QAAQ,CAAC,MAAM,IAAI,CAAC,YAAY,EAAE,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,QAAQ,CAAC,EAAE,GAAG,EAAA,IAAA,SAAA,GAAA,CAAA,EAAA,SAAA,EAAA,iBAAA,EAAA,CAAA,GAAA,EAAA,CAAA,CAAC;AAEhF,IAAA,IAAI,GAAG,QAAQ,CAAC,MAAK;AAC7B,QAAA,MAAM,WAAW,GAAG,IAAI,CAAC,MAAM,EAAE,EAAE;AACnC,QAAA,MAAM,YAAY,GAAG,IAAI,CAAC,YAAY,EAAE;AAExC,QAAA,IAAI,IAAI,GAAyB,CAAC,GAAG,YAAY;aAC9C,MAAM,CAAC,MAAM,IAAI,MAAM,CAAC,IAAI;aAC5B,GAAG,CAAC,MAAM,IAAI,MAAM,CAAC,GAAG,CAAC;QAE5B,IAAI,CAAC,WAAW,CAAC,MAAM,IAAI,CAAC,WAAW,CAAC,mBAAmB;AACtD,eAAA,WAAW,CAAC;gBACX,WAAW,CAAC,UAAU,IAAI,WAAW,CAAC,UAAU,CAAC,MAAM,GAAG,CAAC;eAC5D,WAAW,CAAC,gBAAgB,EAC/B;YACA,IAAI,GAAG,CAAC,GAAG,IAAI,EAAE,IAAI,CAAC,mBAAmB,CAAC;QAC5C;QAEA,IAAI,WAAW,CAAC,kBAAkB;YAChC,IAAI,GAAG,CAAC,IAAI,CAAC,wBAAwB,EAAE,GAAG,IAAI,CAAC;AAEjD,QAAA,OAAO,IAAI;AACb,IAAA,CAAC,gDAAC;AACQ,IAAA,cAAc,GAAG,QAAQ,CAAC,MAAM,IAAI,CAAC,IAAI,EAAE,CAAC,GAAG,CAAC,GAAG,IAAI,CAAA,EAAG,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,CAAA,CAAE,CAAC,0DAAC;AAC7G,IAAA,qBAAqB,GAAG,QAAQ,CAAC,MAAM,IAAI,CAAC,IAAI,EAAE,CAAC,GAAG,CAAC,GAAG,IAAI,CAAA,EAAG,IAAI,CAAC,sBAAsB,GAAG,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,CAAA,CAAE,CAAC,iEAAC;AAC3H,IAAA,cAAc,GAAG,QAAQ,CAAC,MAAK;AACvC,QAAA,MAAM,WAAW,GAAG,IAAI,CAAC,MAAM,EAAE,EAAE;QACnC,OAAO,CAAC,GAAG,WAAW,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,MAAM,IAAI,MAAM,CAAC,UAAU,CAAC,IAAI,CAAC,WAAW,CAAC,mBAAmB;AACvG,IAAA,CAAC,0DAAC;AACQ,IAAA,iBAAiB,GAAG,QAAQ,CAAC,MAAM,IAAI,CAAC,IAAI,EAAE,CAAC,QAAQ,CAAC,IAAI,CAAC,mBAAmB,CAAC,6DAAC;AAClF,IAAA,sBAAsB,GAAG,QAAQ,CAAC,MAAK;QAC/C,MAAM,OAAO,GAAG,IAAI,CAAC,MAAM,EAAE,EAAE,CAAC,OAAO;AACvC,QAAA,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,EAAE;QACxB,OAAO,IAAI,CAAC,IAAI,CAAC,GAAG,IAAI,OAAO,CAAC,IAAI,CAAC,MAAM,IAAI,GAAG,IAAI,MAAM,CAAC,GAAG,CAAC,EAAE,gBAAgB,CAAC;AACtF,IAAA,CAAC,kEAAC;AACQ,IAAA,sBAAsB,GAAG,QAAQ,CAAC,MAAK;QAC/C,MAAM,OAAO,GAAG,IAAI,CAAC,MAAM,EAAE,EAAE,CAAC,OAAO;AACvC,QAAA,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,EAAE;QACxB,OAAO,IAAI,CAAC,IAAI,CAAC,GAAG,IAAI,OAAO,CAAC,IAAI,CAAC,MAAM,IAAI,GAAG,IAAI,MAAM,CAAC,GAAG,CAAC,EAAE,gBAAgB,CAAC;AACtF,IAAA,CAAC,kEAAC;IAEQ,YAAY,GAAuB,SAAS;IAE5C,aAAa,GAAqC,EAAE;AAEpD,IAAA,eAAe,GAAgC,QAAQ,CAAC,MAAK;QACrE,MAAM,wBAAwB,GAAG,IAAI,CAAC,qBAAqB,CAAC,eAAe,EAAE;QAC7E,MAAM,OAAO,GAAG,IAAI,CAAC,MAAM,EAAE,EAAE,CAAC,OAAO;AACvC,QAAA,OAAO,wBAAwB,CAAC,OAAO,CAAC;AAC1C,IAAA,CAAC,2DAAC;IAEiB,mBAAmB,GAAG,gBAAgB;AAC/C,IAAA,YAAY,GAAG,MAAM,CAAW,IAAI,wDAAC;AAErC,IAAA,SAAS,GAAG,MAAM,CAAM,EAAE,qDAAC;AAE3B,IAAA,YAAY,GAAG,MAAM,CAAC,KAAK,wDAAC;AACrB,IAAA,OAAO,GAAG,MAAM,CAAC,OAAO,CAAC;AACzB,IAAA,gBAAgB,GAAG,MAAM,CAAC,gBAAgB,CAAC;AAC3C,IAAA,gBAAgB,GAAG,MAAM,CAAC,gBAAgB,CAAC;AAC5D,IAAA,oBAAoB,GAAG,SAAS,CAAmB,cAAc,gEAAC;AAC1D,IAAA,UAAU;AACV,IAAA,MAAM;IAGd,QAAQ,GAAA;AACN,QAAA,IAAI,IAAI,CAAC,UAAU,IAAI,IAAI,CAAC,gBAAgB,EAAE;YAC5C,IAAI,CAAC,cAAc,EAAE;IACzB;IAEA,WAAW,GAAA;;AAET,QAAA,IAAI,IAAI,CAAC,YAAY,KAAK,SAAS;AACjC,YAAA,YAAY,CAAC,IAAI,CAAC,YAAY,CAAC;;AAGjC,QAAA,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC,OAAO,CAAC,CAAC,GAAG,KAAI;YAC9C,MAAM,OAAO,GAAG,IAAI,CAAC,aAAa,CAAC,GAAc,CAAC;YAClD,YAAY,CAAC,OAAO,CAAC;AACvB,QAAA,CAAC,CAAC;IACJ;IAEQ,qBAAqB,CAAC,cAA+B,EAAE,UAA6B,EAAA;AAC1F,QAAA,OAAO,UAAU,CAAC,IAAI,CAAC,MAAM,IAAI,cAAc,CAAC,GAAG,IAAI,MAAM,CAAC,GAAG,CAAC;IACpE;AAEU,IAAA,cAAc,GAAG,CAAC,SAA2B,KAAa,SAAmB;AAE7E,IAAA,YAAY,CAAC,KAAgB,EAAA;QACrC,IAAI,CAAC,OAAO,EAAE,CAAC,MAAM,CAAC,KAAK,IAAG;YAC5B,OAAO;AACL,gBAAA,GAAG,KAAK;AACR,gBAAA,UAAU,EAAE,KAAK,CAAC,QAAQ,IAAI,KAAK,CAAC,QAAQ,GAAG,KAAK,CAAC,SAAS,GAAG,CAAC,GAAG,CAAC;gBACtE,QAAQ,EAAE,KAAK,CAAC;aACjB;AACH,QAAA,CAAC,CAAC;IACJ;AAEU,IAAA,aAAa,CAAC,YAA8B,EAAA;AACpD,QAAA,MAAM,KAAK,GAAG,YAAY,CAAC,KAAK;AAEhC,QAAA,IAAI,IAAI,CAAC,YAAY,KAAK,SAAS;AACjC,YAAA,YAAY,CAAC,IAAI,CAAC,YAAY,CAAC;AAEjC,QAAA,IAAI,CAAC,YAAY,GAAG,UAAU,CAAC,MAAK;YAClC,IAAI,CAAC,OAAO,EAAE,CAAC,MAAM,CAAC,CAAC,KAAQ,KAAI;AACjC,gBAAA,OAAO,EAAE,GAAG,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,UAAU,EAAE,CAAC,EAAE;AAClD,YAAA,CAAC,CAAC;AACJ,QAAA,CAAC,EAAE,IAAI,CAAC,YAAY,CAAC;IACvB;AAEU,IAAA,YAAY,CAAC,YAA8B,EAAA;AACnD,QAAA,YAAY,CAAC,KAAK,GAAG,EAAE;AACvB,QAAA,IAAI,CAAC,aAAa,CAAC,YAAY,CAAC;IAClC;AAEU,IAAA,YAAY,CAAC,IAAU,EAAA;QAC/B,IAAI,CAAC,OAAO,EAAE,CAAC,MAAM,CAAC,KAAK,IAAG;YAC5B,OAAO;AACL,gBAAA,GAAG,KAAK;AACR,gBAAA,UAAU,EAAE,CAAC;gBACb,MAAM,EAAE,IAAI,CAAC,SAAS,GAAG,EAAE,GAAG,EAAE,IAAI,CAAC,MAAM,EAAE,SAAS,EAAE,IAAI,CAAC,SAAS,EAAE,GAAG;aAC5E;AACH,QAAA,CAAC,CAAC;IACJ;IAEU,UAAU,GAAA;AAClB,QAAA,IAAI,CAAC,WAAW,CAAC,IAAI,EAAE;IACzB;IAEU,aAAa,CAAC,GAAM,EAAE,KAAY,EAAA;AAC1C,QAAA,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,GAAG,CAAC;QAC1B,KAAK,CAAC,eAAe,EAAE;IACzB;AAEU,IAAA,UAAU,CAAC,GAAM,EAAA;AACzB,QAAA,IAAI,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC;AACxB,YAAA,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,GAAG,CAAC;IAC9B;AAEU,IAAA,YAAY,CAAC,GAAM,EAAA;AAC3B,QAAA,OAAO,IAAI,CAAC,MAAM,EAAE,EAAE,CAAC;AAClB,eAAA,IAAI,CAAC,MAAM,EAAE,EAAE,CAAC;gBACf,CAAC,IAAI,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,EAAE,IAAI,IAAI,IAAI,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,EAAE,IAAI,GAAG,GAAG,CAAC;AACrE,eAAA,CAAC,IAAI,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,EAAE,QAAQ,GAAG,GAAG,CAAC;IAC/C;IAEU,aAAa,CAAC,GAAM,EAAE,KAAY,EAAA;QAC1C,KAAK,CAAC,eAAe,EAAE;AAEvB,QAAA,MAAM,KAAK,GAAG,IAAI,CAAC,MAAM,EAAE,EAAE,CAAC,aAAa,EAAE,KAAK,GAAG,GAAG,CAAC,IAAI,UAAU;AACvE,QAAA,MAAM,IAAI,GAAG,IAAI,CAAC,MAAM,EAAE,EAAE,CAAC,aAAa,EAAE,IAAI,GAAG,GAAG,CAAC,IAAI,yDAAyD;AACpH,QAAA,MAAM,QAAQ,GAAG,IAAI,CAAC,MAAM,EAAE,EAAE,CAAC,aAAa,EAAE,WAAW,IAAI;AAC/D,QAAA,MAAM,IAAI,GAAsB;AAC9B,YAAA,KAAK,EAAE,KAAK;YACZ,IAAI,EAAE,CAAC,QAAQ,GAAG,IAAI,GAAG,SAAS;AAClC,YAAA,QAAQ,EAAE,QAAQ;AAClB,YAAA,GAAG,EAAE,GAAG;AACR,YAAA,kBAAkB,EAAE;SACrB;AACD,QAAA,MAAM,SAAS,GAAG,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,yBAAyB,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC;QAC7E,SAAS,CAAC,WAAW,EAAE,CAAC,SAAS,CAAC,CAAC,OAAgB,KAAI;AACrD,YAAA,IAAI,OAAO;AACT,gBAAA,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,GAAG,CAAC;AAC9B,QAAA,CAAC,CAAC;IACJ;AAEU,IAAA,gBAAgB,CAAC,GAAM,EAAE,SAA4B,EAAE,KAAY,EAAA;AAC3E,QAAA,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,EAAE,EAAE,EAAE,SAAS,CAAC,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC;QACxD,KAAK,CAAC,eAAe,EAAE;IACzB;IAEU,wBAAwB,CAAC,MAA+B,EAAE,KAAY,EAAA;AAC9E,QAAA,MAAM,KAAK,GAAI,KAAK,CAAC,MAA2B,CAAC,KAAK;;AAGtD,QAAA,IAAI,MAAM,CAAC,GAAG,IAAI,IAAI,CAAC,aAAa;YAClC,YAAY,CAAC,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;QAE9C,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,GAAG,CAAC,GAAG,UAAU,CAAC,MAAK;YAC/C,IAAI,CAAC,oBAAoB,CAAC,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC;AAC9C,QAAA,CAAC,EAAE,IAAI,CAAC,YAAY,CAAC;IACvB;IAEU,0BAA0B,CAAC,MAA+B,EAAE,KAAyC,EAAA;QAC7G,IAAI,CAAC,oBAAoB,CAAC,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,KAAK,CAAC;IACpD;IAEU,kBAAkB,CAAC,MAA+B,EAAE,KAA2B,EAAA;QACvF,IAAI,CAAC,oBAAoB,CAAC,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC;IAC9C;IAEU,uBAAuB,CAAC,MAA+B,EAAE,KAA6C,EAAA;QAC9G,IAAI,CAAC,oBAAoB,CAAC,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC;IAC9C;IAEQ,oBAAoB,CAAC,SAAkB,EAAE,KAAkB,EAAA;QACjE,IAAI,CAAC,OAAO,EAAE,CAAC,MAAM,CAAC,YAAY,IAAG;AACnC,YAAA,MAAM,mBAAmB,GAA0C,YAAY,CAAC,mBAAmB,IAAI,EAAE;AACzG,YAAA,mBAAmB,CAAC,SAAS,CAAC,GAAG,KAAK;YACtC,OAAO;AACL,gBAAA,GAAG,YAAY;AACf,gBAAA,UAAU,EAAE,CAAC;AACb,gBAAA,mBAAmB,EAAE;aACtB;AACH,QAAA,CAAC,CAAC;IACJ;AAEU,IAAA,sBAAsB,CAAC,GAAY,EAAA;QAC3C,OAAO,IAAI,CAAC,OAAO,EAAE,EAAE,CAAC,mBAAmB,GAAG,GAAG,CAAC;IACpD;IAEU,+BAA+B,CAAC,GAAY,EAAE,IAAqB,EAAA;QAC3E,MAAM,KAAK,GAAG,IAAI,CAAC,sBAAsB,CAAC,GAAG,CAAoC;AAEjF,QAAA,IAAI,CAAC,KAAK;AACR,YAAA,OAAO,IAAI;AAEb,QAAA,OAAO,IAAI,IAAI,OAAO,GAAG,KAAK,CAAC,KAAK,GAAG,KAAK,CAAC,GAAG;IAClD;IAEU,aAAa,GAAA;AACrB,QAAA,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,EAAE,EAAE;AAC9B,QAAA,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,EAAE,EAAE;AAChC,QAAA,MAAM,YAAY,GAAG,IAAI,CAAC,YAAY,EAAE;QAExC,MAAM,YAAY,GAAG,MAAM,CAAC,WAAW,CACrC,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,MAAM,IAAI,CAAC,MAAM,CAAC,GAAG,EAAE,MAAM,CAAC,KAAK,CAAC,CAAC,CAC9B;AAE5B,QAAA,MAAM,IAAI,GAAgC;YACxC,OAAO,EAAE,MAAM,CAAC,OAAO;AACvB,YAAA,SAAS,EAAE,MAAM,CAAC,KAAK,EAAE;AACzB,YAAA,OAAO,EAAE,YAAY;AACrB,YAAA,YAAY,EAAE,OAAO,CAAC,mBAAmB,IAAI,EAAE;AAC/C,YAAA,aAAa,EAAE;SAChB;AACD,QAAA,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,8BAA8B,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC;IAClE;IAEU,gBAAgB,CAAC,KAAU,EAAE,KAAiC,EAAA;AACtE,QAAA,IAAI,CAAC,KAAK;AACR,YAAA,OAAO,KAAK;AAEd,QAAA,MAAM,UAAU,GAAG,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,GAAG,KAAK,GAAG,CAAC,KAAK,CAAC;AAEzD,QAAA,OAAO,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,IAAI,IAAI,EAAE,CAAC,CAAC,EAAE,KAAK,CAAC;IACnF;IAGU,yBAAyB,GAAA;AACjC,QAAA,MAAM,IAAI,GAAmC;AAC3C,YAAA,MAAM,EAAE,IAAI,CAAC,MAAM,EAAE,EAAE;AACvB,YAAA,cAAc,EAAE;AACd,gBAAA,IAAI,EAAE,EAAE;AACR,gBAAA,MAAM,EAAE;AACN,oBAAA;wBACE,EAAE,EAAEI,EAAM,EAAE;AACZ,wBAAA,SAAS,EAAE,KAAK;wBAChB,OAAO,EAAE,CAAC,EAAE,EAAE,EAAEA,EAAM,EAAE,EAAE;AAC3B;AACF;AACF;SACF;AACD,QAAA,MAAM,SAAS,GAAG,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,gCAAgC,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC;QAEpF,SAAS,CAAC,WAAW,EAAE,CAAC,SAAS,CAAC,CAAC,cAAkC,KAAI;AACvE,YAAA,IAAI,cAAc;AAChB,gBAAA,IAAI,CAAC,oBAAoB,CAAC,cAAc,CAAC;AAC7C,QAAA,CAAC,CAAC;IACJ;AAEU,IAAA,oBAAoB,CAAC,cAAkC,EAAA;QAC/D,MAAM,gBAAgB,GAAuB,cAAc,EAAE,MAAM,GAAG,CAAC,CAAC,CAAC,EAAE;QAC3E,IAAI,CAAC,OAAO,EAAE,CAAC,MAAM,CAAC,YAAY,IAAG;YACnC,OAAO;AACL,gBAAA,GAAG,YAAY;AACf,gBAAA,gBAAgB,EAAE,gBAAgB;AAClC,gBAAA,UAAU,EAAE;aACb;AACH,QAAA,CAAC,CAAC;IACJ;AAEU,IAAA,8BAA8B,CAAC,KAAY,EAAA;QACnD,MAAM,gBAAgB,GAAG,IAAI,CAAC,OAAO,EAAE,EAAE,CAAC,gBAAgB;AAC1D,QAAA,IAAI,CAAC,gBAAgB;YACnB;QAEF,MAAM,OAAO,GAAG,IAAI,CAAC,MAAM,EAAE,EAAE,CAAC,OAAO;AACvC,QAAA,MAAM,cAAc,GAAG,IAAI,CAAC,qBAAqB,CAAC,qBAAqB,CAAC,OAAO,EAAE,gBAAgB,CAAC;AAElG,QAAA,IAAI,CAAC,cAAc;YACjB;AAEF,QAAA,IAAI,CAAC,sBAAsB,CAAC,KAAK,EAAE,cAAc,CAAC;IACpD;AAEU,IAAA,sBAAsB,CAAC,KAAY,EAAE,cAAiC,EAAE,0BAA2C,EAAA;QAC3H,KAAK,CAAC,eAAe,EAAE;QACvB,0BAA0B,EAAE,SAAS,EAAE;AAEvC,QAAA,MAAM,IAAI,GAAmC;AAC3C,YAAA,MAAM,EAAE,IAAI,CAAC,MAAM,EAAE,EAAE;AACvB,YAAA,cAAc,EAAE;SACjB;AAED,QAAA,MAAM,SAAS,GAAG,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,gCAAgC,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC;QAEpF,SAAS,CAAC,WAAW,EAAE,CAAC,SAAS,CAAC,CAAC,cAAkC,KAAI;AACvE,YAAA,IAAI,cAAc;AAChB,gBAAA,IAAI,CAAC,oBAAoB,CAAC,cAAc,CAAC;AAC7C,QAAA,CAAC,CAAC;IACJ;AAEU,IAAA,sBAAsB,CAAC,KAAY,EAAE,0BAA0C,EAAE,cAAiC,EAAA;QAC1H,KAAK,CAAC,eAAe,EAAE;QACvB,0BAA0B,CAAC,SAAS,EAAE;AAEtC,QAAA,MAAM,IAAI,GAAsB;AAC9B,YAAA,KAAK,EAAE,uCAAuC;AAC9C,YAAA,IAAI,EAAE,CAAA,gDAAA,EAAmD,cAAc,CAAC,IAAI,CAAA,iBAAA,CAAmB;AAC/F,YAAA,kBAAkB,EAAE;SACrB;AACD,QAAA,MAAM,SAAS,GAAG,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,yBAAyB,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC;QAC7E,SAAS,CAAC,WAAW,EAAE,CAAC,SAAS,CAAC,CAAC,OAAgB,KAAI;YACrD,IAAI,OAAO,EAAE;AACX,gBAAA,IAAI,IAAI,CAAC,OAAO,EAAE,EAAE,CAAC,gBAAgB,IAAI,cAAc,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,EAAE;oBAClE,IAAI,CAAC,oBAAoB,EAAE;AAE7B,gBAAA,IAAI,CAAC,qBAAqB,CAAC,oBAAoB,CAAC,IAAI,CAAC,MAAM,EAAE,EAAE,CAAC,OAAO,EAAE,cAAc,CAAC;YAC1F;AACF,QAAA,CAAC,CAAC;IACJ;AAEU,IAAA,oBAAoB,CAAC,KAAY,EAAA;QACzC,KAAK,CAAC,eAAe,EAAE;QACvB,IAAI,CAAC,oBAAoB,EAAE;IAC7B;IAEU,sBAAsB,GAAA;QAC9B,MAAM,gBAAgB,GAAG,IAAI,CAAC,OAAO,EAAE,EAAE,CAAC,gBAAgB;AAC1D,QAAA,IAAI,CAAC,gBAAgB;AACnB,YAAA,OAAO,EAAE;QAEX,MAAM,OAAO,GAAG,IAAI,CAAC,MAAM,EAAE,EAAE,CAAC,OAAO;AACvC,QAAA,MAAM,cAAc,GAAG,IAAI,CAAC,qBAAqB,CAAC,qBAAqB,CAAC,OAAO,EAAE,gBAAgB,CAAC;AAElG,QAAA,IAAI,CAAC,cAAc;AACjB,YAAA,OAAO,EAAE;AAEX,QAAA,OAAO,mBAAmB,CAAC,oBAAoB,CAAI,cAAc,CAAC,MAAM,EAAE,IAAI,CAAC,MAAM,EAAE,EAAE,CAAC,OAAO,CAAC;IACpG;AAEU,IAAA,aAAa,CAAC,GAAM,EAAA;AAC5B,QAAA,OAAO,IAAI,CAAC,YAAY,EAAE,IAAI,GAAG;IACnC;AAEU,IAAA,gBAAgB,CAAC,GAAM,EAAA;AAC/B,QAAA,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,YAAY,IAAG;AACtC,YAAA,MAAM,QAAQ,GAAG,YAAY,IAAI,GAAG,GAAG,GAAG,GAAG,IAAI;AACjD,YAAA,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,QAAQ,CAAC;AACtC,YAAA,OAAO,QAAQ;AACjB,QAAA,CAAC,CAAC;IACJ;AAEU,IAAA,eAAe,CAAC,SAAkB,EAAA;AAC1C,QAAA,MAAM,MAAM,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC,MAAM,CAAC,CAAC,QAAQ,EAAE,IAAI,MAAM,QAAQ,GAAG,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;AAC9F,QAAA,OAAO,MAAM;IACf;IAEU,cAAc,CAAC,OAAU,EAAE,OAAU,EAAA;QAC7C,MAAM,UAAU,GAAG,IAAI,CAAC,MAAM,EAAE,EAAE,CAAC,UAAU;AAE7C,QAAA,IAAI,KAAK,CAAC,OAAO,CAAC,UAAU,CAAC;AAC3B,YAAA,OAAO,UAAU,CAAC,KAAK,CAAC,GAAG,IAAI,OAAO,CAAC,GAAG,CAAC,KAAK,OAAO,CAAC,GAAG,CAAC,CAAC;;YAE7D,OAAO,OAAO,CAAC,UAAU,CAAC,KAAK,OAAO,CAAC,UAAU,CAAC;IACtD;AAEU,IAAA,aAAa,CAAC,GAAM,EAAA;QAC5B,OAAO,IAAI,CAAC,SAAS,EAAE,CAAC,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,cAAc,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC;IACtE;AAEU,IAAA,kBAAkB,CAAC,GAAM,EAAA;AACjC,QAAA,IAAI,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,EAAE;AAC3B,YAAA,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,eAAe,IAAG;AACtC,gBAAA,OAAO,eAAe,CAAC,MAAM,CAAC,MAAM,IAAI,CAAC,IAAI,CAAC,cAAc,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC;AAC5E,YAAA,CAAC,CAAC;QACJ;aAAO;AACL,YAAA,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,eAAe,IAAI,CAAC,GAAG,eAAe,EAAE,GAAG,CAAC,CAAC;QACrE;IACF;IAEU,oBAAoB,GAAA;AAC5B,QAAA,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,EAAE;AAC3B,QAAA,OAAO,OAAO,CAAC,KAAK,CAAC,MAAM,IAAI,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC;IAC5D;IAEU,yBAAyB,GAAA;AACjC,QAAA,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,EAAE;AAE3B,QAAA,IAAI,IAAI,CAAC,oBAAoB,EAAE,EAAE;;AAE/B,YAAA,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,eAAe,IAAG;gBACtC,OAAO,eAAe,CAAC,MAAM,CAC3B,MAAM,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,cAAc,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC,CACnE;AACH,YAAA,CAAC,CAAC;QACJ;aAAO;;AAEL,YAAA,MAAM,WAAW,GAAG,OAAO,CAAC,MAAM,CAAC,MAAM,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC;AAEzE,YAAA,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,eAAe,IAAG;;AAEtC,gBAAA,MAAM,MAAM,GAAG,WAAW,CAAC,MAAM,CAC/B,GAAG,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,GAAG,IAAI,IAAI,CAAC,cAAc,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC,CACnE;AACD,gBAAA,OAAO,CAAC,GAAG,eAAe,EAAE,GAAG,MAAM,CAAC;AACxC,YAAA,CAAC,CAAC;QACJ;IACF;IAEU,qBAAqB,GAAA;QAC7B,OAAO,IAAI,CAAC,MAAM,EAAE,EAAE,CAAC,kBAAkB,IAAI,EAAE;IACjD;IAEU,mBAAmB,GAAA;AAC3B,QAAA,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,EAAE,CAAC;IACxB;AAEU,IAAA,yBAAyB,CAAC,QAAgB,EAAA;AAClD,QAAA,IAAI,CAAC,oBAAoB,CAAC,IAAI,CAC5B;AACE,YAAA,EAAE,EAAE,QAAQ;AACZ,YAAA,IAAI,EAAE,IAAI,CAAC,SAAS;AACrB,SAAA,CACF;IACH;IAEQ,kBAAkB,GAAA;AACxB,QAAA,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,EAAE,EAAE;AAC9B,QAAA,OAAO,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC;IACzC;IAEQ,eAAe,GAAA;AACrB,QAAA,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,EAAE,EAAE;AAC9B,QAAA,MAAM,OAAO,GAAG,MAAM,CAAC,OAAO;AAE9B,QAAA,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,EAAE;AAExB,QAAA,OAAO,IAAI,CAAC,GAAG,CAAC,GAAG,IAAG;AACpB,YAAA,IAAI,MAAM,CAAC,mBAAmB,EAAE;gBAC9B,MAAM,MAAM,GAAG,MAAM,CAAC,mBAAmB,CAAC,GAAG,CAAC;AAC9C,gBAAA,OAAO,OAAO,CAAC,GAAG,CAAC,CAAC,IAAI,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;YACxC;AAEA,YAAA,OAAO,OAAO,CAAC,GAAG,CAAC,CAAC,IAAI,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC;AAC3C,QAAA,CAAC,CAAC;IACJ;IAEU,sBAAsB,GAAA;AAC9B,QAAA,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,EAAE,EAAE;AAE9B,QAAA,MAAM,KAAK,GAAG,MAAM,CAAC,KAAK,EAAE;QAC5B,MAAM,QAAQ,GAAG,MAAM,CAAC,cAAc,IAAI,IAAI,KAAK;AAGnD,QAAA,MAAM,OAAO,GAAG,IAAI,CAAC,kBAAkB,EAAE;AACzC,QAAA,MAAM,IAAI,GAAG,IAAI,CAAC,eAAe,EAAE;QAEnC,MAAM,OAAO,GAAG,CAAC,OAAO,EAAE,GAAG,IAAI,CAAC;;QAIlC,MAAM,SAAS,GAAG,KAAK,CAAC,YAAY,CAAC,OAAO,CAAC;AAC7C,QAAA,MAAM,QAAQ,GAAG,KAAK,CAAC,QAAQ,EAAE;QACjC,KAAK,CAAC,iBAAiB,CAAC,QAAQ,EAAE,SAAS,EAAE,KAAK,CAAC;AACnD,QAAA,aAAa,CAAC,QAAQ,EAAE,GAAG,QAAQ,CAAA,KAAA,CAAO,CAAC;IAC7C;IAEU,sBAAsB,GAAA;AAC9B,QAAA,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,EAAE,EAAE;AAE9B,QAAA,MAAM,KAAK,GAAG,MAAM,CAAC,KAAK,EAAE;QAC5B,MAAM,QAAQ,GAAG,MAAM,CAAC,cAAc,IAAI,IAAI,KAAK;AAEnD,QAAA,MAAM,OAAO,GAAG,IAAI,CAAC,kBAAkB,EAAE;AACzC,QAAA,MAAM,IAAI,GAAG,IAAI,CAAC,eAAe,EAAE;QAEnC,MAAM,GAAG,GAAG,MAAM,CAAC,SAAS,IAAI,IAAI,KAAK,CAAC;AACxC,YAAA,WAAW,EAAE,WAAW;AACxB,YAAA,IAAI,EAAE,IAAI;AACV,YAAA,MAAM,EAAE;AACT,SAAA,CAAC;AAEF,QAAA,GAAG,CAAC,WAAW,CAAC,EAAE,CAAC;QACnB,GAAG,CAAC,IAAI,CAAC,KAAK,EAAE,EAAE,EAAE,EAAE,CAAC;QAEvB,SAAS,CAAC,GAAG,EAAE;AACb,YAAA,MAAM,EAAE,EAAE;YACV,IAAI,EAAE,CAAC,OAAO,CAAC;AACf,YAAA,IAAI,EAAE,IAAI;YACV,MAAM,EAAE,EAAE,QAAQ,EAAE,CAAC,EAAE,WAAW,EAAE,CAAC,EAAE;AACvC,YAAA,UAAU,EAAE,EAAE,SAAS,EAAE,CAAC,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC,EAAE,SAAS,EAAE,GAAG,EAAE;YACvD,kBAAkB,EAAE,EAAE,SAAS,EAAE,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,EAAE;AAClD,YAAA,cAAc,EAAE,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC;AAC/B,YAAA,cAAc,EAAE,GAAG;AACpB,SAAA,CAAC;AAEF,QAAA,GAAG,CAAC,IAAI,CAAC,GAAG,QAAQ,CAAA,IAAA,CAAM,CAAC;IAC7B;IAEU,kBAAkB,GAAA;QAC1B,IAAI,IAAI,CAAC,YAAY,EAAE;YACrB,IAAI,CAAC,cAAc,EAAE;;YAErB,IAAI,CAAC,eAAe,EAAE;IAC1B;IAEQ,eAAe,GAAA;QACrB,IAAI,IAAI,CAAC,UAAU;YACjB;QAEF,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC;AACpC,YAAA,WAAW,EAAE,KAAK;YAClB,cAAc,EAAE,IAAI,CAAC,OAAO,CAAC,gBAAgB,CAAC,KAAK,EAAE;AACrD,YAAA,gBAAgB,EAAE,IAAI,CAAC,OAAO,CAAC,QAAQ,EAAE,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC;AAC7F,SAAA,CAAC;AAEF,QAAA,IAAI,CAAC,MAAM,GAAG,IAAI,cAAc,CAAC,IAAI,CAAC,oBAAoB,EAAG,EAAE,IAAI,CAAC,gBAAgB,CAAC;QACrF,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC;AAEnC,QAAA,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,IAAI,CAAC;IAC7B;IAEQ,cAAc,GAAA;QACpB,IAAI,CAAC,IAAI,CAAC,UAAU;YAClB;AAEF,QAAA,IAAI,CAAC,UAAU,CAAC,MAAM,EAAE;AACxB,QAAA,IAAI,CAAC,UAAU,CAAC,OAAO,EAAE;AACzB,QAAA,IAAI,CAAC,UAAU,GAAG,SAAS;AAC3B,QAAA,IAAI,CAAC,MAAM,GAAG,SAAS;AAEvB,QAAA,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,KAAK,CAAC;IAC9B;IAEQ,gBAAgB,GAAA;QACtB,IAAI,CAAC,IAAI,CAAC,UAAU;AAClB,YAAA,OAAO,KAAK;;QAGd,MAAM,gBAAgB,GAAG,IAAI,CAAC,gBAAgB,CAAC,mBAAmB,EAAE;;QAEpE,MAAM,QAAQ,GAAG,KAAK,CAAC,IAAI,CAAC,gBAAgB,CAAC,QAAQ,CAAC;;QAEtD,MAAM,UAAU,GAAG,QAAQ,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,CAA4B;AAE3E,QAAA,OAAO,UAAU,KAAK,IAAI,CAAC,UAAU,CAAC,WAAW;IACnD;wGAnoBW,iBAAiB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAAjB,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,iBAAiB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,qBAAA,EAAA,MAAA,EAAA,EAAA,QAAA,EAAA,EAAA,iBAAA,EAAA,UAAA,EAAA,UAAA,EAAA,UAAA,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,MAAA,EAAA,EAAA,iBAAA,EAAA,QAAA,EAAA,UAAA,EAAA,QAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,OAAA,EAAA,EAAA,WAAA,EAAA,aAAA,EAAA,WAAA,EAAA,aAAA,EAAA,WAAA,EAAA,aAAA,EAAA,cAAA,EAAA,gBAAA,EAAA,kBAAA,EAAA,oBAAA,EAAA,oBAAA,EAAA,sBAAA,EAAA,EAAA,IAAA,EAAA,EAAA,SAAA,EAAA,EAAA,yBAAA,EAAA,YAAA,EAAA,EAAA,cAAA,EAAA,mBAAA,EAAA,EAAA,WAAA,EAAA,CAAA,EAAA,YAAA,EAAA,sBAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,CAAA,cAAA,CAAA,EAAA,WAAA,EAAA,IAAA,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,ECrE9B,+33BA0dc,EAAA,MAAA,EAAA,CAAA,8iLAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,ED3aV,cAAc,4iDACd,aAAa,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAR,IAAA,CAAA,OAAA,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,eAAA,EAAA,cAAA,EAAA,kBAAA,EAAA,qBAAA,EAAA,iBAAA,CAAA,EAAA,OAAA,EAAA,CAAA,eAAA,CAAA,EAAA,QAAA,EAAA,CAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,aAAA,EAAA,QAAA,EAAA,mBAAA,EAAA,MAAA,EAAA,CAAA,iBAAA,EAAA,eAAA,EAAA,OAAA,EAAA,UAAA,EAAA,uBAAA,EAAA,cAAA,CAAA,EAAA,QAAA,EAAA,CAAA,eAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EACb,kBAAkB,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,EAAA,CAAA,YAAA,EAAA,QAAA,EAAA,eAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,WAAA,EAAA,QAAA,EAAA,UAAA,EAAA,iBAAA,EAAA,cAAA,EAAA,sBAAA,EAAA,cAAA,EAAA,UAAA,CAAA,EAAA,OAAA,EAAA,CAAA,MAAA,CAAA,EAAA,QAAA,EAAA,CAAA,cAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAClB,aAAa,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAG,IAAA,CAAA,OAAA,EAAA,QAAA,EAAA,UAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,SAAA,EAAA,SAAA,EAAA,UAAA,CAAA,EAAA,QAAA,EAAA,CAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EACb,eAAe,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,EAAA,CAAA,aAAA,EAAA,QAAA,EAAA,sFAAA,EAAA,QAAA,EAAA,CAAA,WAAA,EAAA,WAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EACf,oBAAoB,0NACpB,gBAAgB,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,EAAA,CAAA,UAAA,EAAA,QAAA,EAAA,cAAA,EAAA,MAAA,EAAA,CAAA,oBAAA,EAAA,4BAAA,EAAA,oBAAA,EAAA,qBAAA,EAAA,qBAAA,EAAA,yBAAA,EAAA,YAAA,EAAA,iBAAA,CAAA,EAAA,QAAA,EAAA,CAAA,YAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAChB,kBAAkB,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,IAAA,CAAA,YAAA,EAAA,QAAA,EAAA,gBAAA,EAAA,MAAA,EAAA,CAAA,oBAAA,EAAA,OAAA,EAAA,YAAA,EAAA,YAAA,EAAA,iBAAA,EAAA,WAAA,CAAA,EAAA,QAAA,EAAA,CAAA,cAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,SAAA,EAAA,QAAA,EAAA,+CAAA,EAAA,MAAA,EAAA,CAAA,eAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,SAAA,EAAA,QAAA,EAAA,+CAAA,EAAA,MAAA,EAAA,CAAA,eAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAClB,cAAc,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAE,IAAA,CAAA,QAAA,EAAA,QAAA,EAAA,yHAAA,EAAA,MAAA,EAAA,CAAA,UAAA,EAAA,IAAA,EAAA,aAAA,EAAA,MAAA,EAAA,UAAA,EAAA,MAAA,EAAA,mBAAA,EAAA,kBAAA,EAAA,OAAA,EAAA,UAAA,EAAA,qBAAA,CAAA,EAAA,QAAA,EAAA,CAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EACd,eAAe,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,IAAA,CAAA,SAAA,EAAA,QAAA,EAAA,YAAA,EAAA,MAAA,EAAA,CAAA,kBAAA,EAAA,YAAA,EAAA,UAAA,EAAA,eAAA,EAAA,UAAA,EAAA,8BAAA,EAAA,aAAA,EAAA,UAAA,EAAA,UAAA,EAAA,wBAAA,EAAA,aAAA,EAAA,OAAA,EAAA,YAAA,EAAA,iBAAA,EAAA,mBAAA,EAAA,2BAAA,EAAA,gBAAA,EAAA,IAAA,EAAA,YAAA,EAAA,0BAAA,CAAA,EAAA,OAAA,EAAA,CAAA,cAAA,EAAA,QAAA,EAAA,QAAA,EAAA,iBAAA,EAAA,aAAA,CAAA,EAAA,QAAA,EAAA,CAAA,WAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,SAAA,EAAA,QAAA,EAAA,YAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,IAAA,EAAA,UAAA,CAAA,EAAA,OAAA,EAAA,CAAA,mBAAA,CAAA,EAAA,QAAA,EAAA,CAAA,WAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EACf,mBAAmB,2lCACnB,YAAY,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,GAAA,CAAA,gBAAA,EAAA,QAAA,EAAA,oBAAA,EAAA,MAAA,EAAA,CAAA,yBAAA,EAAA,kBAAA,EAAA,0BAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,GAAA,CAAA,OAAA,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACZ,wBAAwB,EAAA,QAAA,EAAA,sBAAA,EAAA,MAAA,EAAA,CAAA,WAAA,EAAA,KAAA,EAAA,KAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EACxB,aAAa,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,GAAA,CAAA,OAAA,EAAA,QAAA,EAAA,UAAA,EAAA,MAAA,EAAA,CAAA,eAAA,EAAA,YAAA,EAAA,iBAAA,EAAA,kBAAA,EAAA,WAAA,EAAA,WAAA,EAAA,gBAAA,EAAA,aAAA,EAAA,OAAA,EAAA,WAAA,CAAA,EAAA,OAAA,EAAA,CAAA,QAAA,EAAA,OAAA,CAAA,EAAA,QAAA,EAAA,CAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,GAAA,CAAA,WAAA,EAAA,QAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,eAAA,CAAA,EAAA,QAAA,EAAA,CAAA,aAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,GAAA,CAAA,cAAA,EAAA,QAAA,EAAA,6CAAA,EAAA,MAAA,EAAA,CAAA,sBAAA,EAAA,mBAAA,EAAA,oBAAA,EAAA,4BAAA,CAAA,EAAA,OAAA,EAAA,CAAA,YAAA,EAAA,YAAA,EAAA,YAAA,EAAA,aAAA,CAAA,EAAA,QAAA,EAAA,CAAA,gBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EACb,gBAAgB,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,IAAA,CAAA,UAAA,EAAA,QAAA,EAAA,aAAA,EAAA,MAAA,EAAA,CAAA,UAAA,EAAA,OAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAEhB,iBAAiB,gbADjB,2BAA2B,EAAA,IAAA,EAAA,4BAAA,EAAA,CAAA,EAAA,CAAA;;4FAOlB,iBAAiB,EAAA,UAAA,EAAA,CAAA;kBAzB7B,SAAS;AACE,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,qBAAqB,EAAA,OAAA,EACtB;wBACP,cAAc;wBACd,aAAa;wBACb,kBAAkB;wBAClB,aAAa;wBACb,eAAe;wBACf,oBAAoB;wBACpB,gBAAgB;wBAChB,kBAAkB;wBAClB,cAAc;wBACd,eAAe;wBACf,mBAAmB;wBACnB,YAAY;wBACZ,wBAAwB;wBACxB,aAAa;wBACb,gBAAgB;wBAChB,2BAA2B;wBAC3B;AACD,qBAAA,EAAA,IAAA,EAGK,EAAE,KAAK,EAAE,mBAAmB,EAAE,EAAA,QAAA,EAAA,+33BAAA,EAAA,MAAA,EAAA,CAAA,8iLAAA,CAAA,EAAA;kvBAkJe,cAAc,EAAA,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,CAAA,EAAA,QAAA,EAAA,CAAA;sBAIhE,YAAY;uBAAC,yBAAyB;;;MEhN5B,gBAAgB,CAAA;;AAEV,IAAA,OAAO,GAAG,MAAM,CAAC,SAAS,CAAC;AAE1C;;;;;;;AAOG;IACH,QAAQ,CACJ,MAUC,EACD,YAA8B,EAAA;AAE9B,QAAA,OAAO,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,SAAS,EAAE;AAChC,YAAA,GAAG,YAAY;AACf,YAAA,IAAI,EAAE;AACF,gBAAA,GAAG,MAAM;AACT,gBAAA,IAAI,EAAE;oBACF,IAAI,EAAE,cAAc,CAAC,IAAI;oBACzB,OAAO,EAAE,MAAM,CAAC;AACQ,iBAAA;AAC/B,aAAA;AACD,YAAA,QAAQ,EAAE,YAAY,EAAE,QAAQ,IAAI,OAAO;AAC3C,YAAA,SAAS,EAAE,YAAY,EAAE,SAAS,IAAI;SACzC,CAAC,CAAC,WAAW,EAAE;IACpB;AAEA;;;;;;;;;;AAUG;IACH,OAAO,CAAC,MAQH,EAAE,YAA8B,EAAA;QAEjC,OAAO,IAAI,CAAC,QAAQ,CAAC;YACjB,KAAK,EAAE,MAAM,CAAC,KAAK;YACnB,OAAO,EAAE,MAAM,CAAC,OAAO;YACvB,QAAQ,EAAE,MAAM,CAAC,QAAQ;YACzB,IAAI,EAAG,MAAM,CAAC,IAAI;YAClB,SAAS,EAAG,MAAM,CAAC,SAAS;AAC5B,YAAA,UAAU,EAAG,MAAM,CAAC,UAAU,IAAI,UAAU;AAC5C,YAAA,WAAW,EAAG,MAAM,CAAC,WAAW,IAAI;SACvC,EAAE,YAAY,CAAC;IACpB;AAEF;;;;;;;;;AASG;IACD,IAAI,CACA,MAOC,EACD,YAA8B,EAAA;QAE9B,OAAO,IAAI,CAAC,QAAQ,CAAC;YACjB,KAAK,EAAE,MAAM,CAAC,KAAK;YACnB,OAAO,EAAE,MAAM,CAAC,OAAO;YACvB,QAAQ,EAAE,MAAM,CAAC,QAAQ;YACzB,IAAI,EAAE,MAAM,CAAC,IAAI;YACjB,SAAS,EAAE,MAAM,CAAC,SAAS;AAC3B,YAAA,UAAU,EAAE,KAAK;AACjB,YAAA,WAAW,EAAE,MAAM,CAAC,WAAW,IAAI,SAAS;SAC/C,EAAE,YAAY,CAAC;IACpB;AAEA;;;;;;;AAOG;IACH,IAAI,CACA,MAUC,EACD,YAA8B,EAAA;AAE9B,QAAA,OAAO,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,SAAS,EAAE;AAChC,YAAA,GAAG,YAAY;AACf,YAAA,IAAI,EAAE;AACF,gBAAA,GAAG,MAAM;AACT,gBAAA,IAAI,EAAE;oBACF,IAAI,EAAE,cAAc,CAAC,IAAI;oBACzB,OAAO,EAAE,MAAM,CAAC;AACQ,iBAAA;AAC/B,aAAA;AACD,YAAA,QAAQ,EAAE,YAAY,EAAE,QAAQ,IAAI,OAAO;AAC3C,YAAA,SAAS,EAAE,YAAY,EAAE,SAAS,IAAI;SACzC,CAAC,CAAC,WAAW,EAAE;IACpB;AAEA;;;;;;AAMG;IACH,SAAS,CACL,MAWC,EACD,YAA8B,EAAA;QAE9B,OAAO,IAAI,CAAC,OAAO,CAAC,IAAI,EAAC,SAAY,GAAE;AACnC,YAAA,GAAG,YAAY;AACf,YAAA,IAAI,EAAE;gBACF,KAAK,EAAE,MAAM,CAAC,KAAK;gBACnB,QAAQ,EAAE,MAAM,CAAC,QAAQ;gBACzB,IAAI,EAAE,MAAM,CAAC,IAAI;gBACjB,SAAS,EAAE,MAAM,CAAC,SAAS;AAC3B,gBAAA,IAAI,EAAE;oBACF,IAAI,EAAE,cAAc,CAAC,SAAS;oBAC9B,OAAO,EAAE,MAAM,CAAC,SAAS;oBACzB,IAAI,EAAE,MAAM,CAAC;AACc,iBAAA;gBAC/B,UAAU,EAAE,MAAM,CAAC,UAAU;gBAC7B,WAAW,EAAE,MAAM,CAAC,WAAW;gBAC/B,UAAU,EAAE,MAAM,CAAC,UAAU;gBAC7B,WAAW,EAAE,MAAM,CAAC,WAAW;AAClC,aAAA;AACD,YAAA,QAAQ,EAAE,YAAY,EAAE,QAAQ,IAAI,OAAO;AAC3C,YAAA,SAAS,EAAE,YAAY,EAAE,SAAS,IAAI;SACzC,CAAC,CAAC,WAAW,EAAE;IACpB;AAEA;;;;;;;AAOG;IACH,QAAQ,CACJ,MAWC,EACD,YAA8B,EAAA;QAE9B,OAAO,IAAI,CAAC,OAAO,CAAC,IAAI,EAAC,SAAY,GAAE;AACnC,YAAA,GAAG,YAAY;AACf,YAAA,IAAI,EAAE;AACF,gBAAA,GAAG,MAAM;AACT,gBAAA,IAAI,EAAE;oBACF,IAAI,EAAE,cAAc,CAAC,QAAQ;oBAC7B,OAAO,EAAE,MAAM,CAAC,QAAQ;oBACxB,IAAI,EAAE,MAAM,CAAC;AACc,iBAAA;AAClC,aAAA;AACD,YAAA,QAAQ,EAAE,YAAY,EAAE,QAAQ,IAAI,OAAO;AAC3C,YAAA,SAAS,EAAE,YAAY,EAAE,SAAS,IAAI;SACzC,CAAC,CAAC,WAAW,EAAE;IACpB;wGA5NS,gBAAgB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA;AAAhB,IAAA,OAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,gBAAgB,cAFf,MAAM,EAAA,CAAA;;4FAEP,gBAAgB,EAAA,UAAA,EAAA,CAAA;kBAH5B,UAAU;AAAC,YAAA,IAAA,EAAA,CAAA;AACV,oBAAA,UAAU,EAAE;AACb,iBAAA;;;ACJD;;ACJA;;AAEG;;;;"}
|