@eternalcodestudio/primeng-table 19.0.0 → 19.0.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (33) hide show
  1. package/README.md +7 -0
  2. package/fesm2022/eternalcodestudio-primeng-table.mjs +671 -424
  3. package/fesm2022/eternalcodestudio-primeng-table.mjs.map +1 -1
  4. package/lib/components/column-selector/column-selector.d.ts +3 -0
  5. package/lib/components/ecs-primeng-table/ecs-primeng-table.d.ts +37 -62
  6. package/lib/components/ecs-primeng-table/ecs-primeng-table.service.d.ts +3 -1
  7. package/lib/components/table-button/table-button.d.ts +1 -4
  8. package/lib/components/table-cell/table-cell.d.ts +7 -5
  9. package/lib/components/{table-predifined-filters/table-predifined-filters.d.ts → table-predefined-filters/table-predefined-filters.d.ts} +10 -5
  10. package/lib/components/views-management/views-management.d.ts +4 -3
  11. package/lib/enums/cell-overflow-behaviour.enum.d.ts +11 -1
  12. package/lib/enums/data-align-horizontal.enum.d.ts +9 -0
  13. package/lib/enums/data-align-vertical.enum.d.ts +9 -0
  14. package/lib/enums/data-type.enum.enum.d.ts +14 -1
  15. package/lib/enums/frozen-column-align.enum.d.ts +10 -0
  16. package/lib/enums/table-view-save-mode.enum.d.ts +15 -4
  17. package/lib/interfaces/columns-metadata.interface.d.ts +1 -1
  18. package/lib/interfaces/index.d.ts +2 -1
  19. package/lib/interfaces/predefined-filter.interface.d.ts +80 -0
  20. package/lib/interfaces/table-button.interface.d.ts +59 -12
  21. package/lib/interfaces/table-configuration.interface.d.ts +1 -0
  22. package/lib/interfaces/table-options.interface.d.ts +433 -0
  23. package/lib/interfaces/table-paged-response.interface.d.ts +0 -7
  24. package/lib/interfaces/table-query-request.interface.d.ts +0 -9
  25. package/lib/services/http.service.d.ts +27 -2
  26. package/lib/services/notification.service.d.ts +17 -1
  27. package/lib/utils/create-table-options.d.ts +5 -0
  28. package/lib/utils/index.d.ts +1 -0
  29. package/package.json +5 -4
  30. package/public-api.d.ts +1 -0
  31. package/fesm2022/ecs-primeng-table.mjs +0 -1745
  32. package/fesm2022/ecs-primeng-table.mjs.map +0 -1
  33. package/lib/interfaces/predifined-filter.interface.d.ts +0 -34
@@ -1 +0,0 @@
1
- {"version":3,"file":"ecs-primeng-table.mjs","sources":["../../../projects/ecs-primeng-table/src/lib/enums/cell-overflow-behaviour.enum.ts","../../../projects/ecs-primeng-table/src/lib/enums/data-align-horizontal.enum.ts","../../../projects/ecs-primeng-table/src/lib/enums/data-align-vertical.enum.ts","../../../projects/ecs-primeng-table/src/lib/enums/data-type.enum.enum.ts","../../../projects/ecs-primeng-table/src/lib/enums/frozen-column-align.enum.ts","../../../projects/ecs-primeng-table/src/lib/enums/table-view-save-mode.enum.ts","../../../projects/ecs-primeng-table/src/lib/utils/data-align-horizontal-as-text.ts","../../../projects/ecs-primeng-table/src/lib/utils/data-align-vertical-as-text.ts","../../../projects/ecs-primeng-table/src/lib/utils/data-type-as-text.ts","../../../projects/ecs-primeng-table/src/lib/utils/frozen-column-align-as-text.ts","../../../projects/ecs-primeng-table/src/lib/utils/highlight-text.ts","../../../projects/ecs-primeng-table/src/lib/components/table-predifined-filters/table-predifined-filters.ts","../../../projects/ecs-primeng-table/src/lib/components/table-predifined-filters/table-predifined-filters.html","../../../projects/ecs-primeng-table/src/lib/components/table-cell/table-cell.ts","../../../projects/ecs-primeng-table/src/lib/components/table-cell/table-cell.html","../../../projects/ecs-primeng-table/src/lib/services/http.service.ts","../../../projects/ecs-primeng-table/src/lib/services/notification.service.ts","../../../projects/ecs-primeng-table/src/lib/components/ecs-primeng-table/ecs-primeng-table.service.ts","../../../projects/ecs-primeng-table/src/lib/components/table-button/table-button.ts","../../../projects/ecs-primeng-table/src/lib/components/table-button/table-button.html","../../../projects/ecs-primeng-table/src/lib/components/column-selector/column-selector.ts","../../../projects/ecs-primeng-table/src/lib/components/column-selector/column-selector.html","../../../projects/ecs-primeng-table/src/lib/components/export-excel/export-excel.service.ts","../../../projects/ecs-primeng-table/src/lib/components/export-excel/export-excel.ts","../../../projects/ecs-primeng-table/src/lib/components/export-excel/export-excel.html","../../../projects/ecs-primeng-table/src/lib/components/views-management/views-management.ts","../../../projects/ecs-primeng-table/src/lib/components/views-management/views-management.html","../../../projects/ecs-primeng-table/src/lib/components/ecs-primeng-table/ecs-primeng-table.ts","../../../projects/ecs-primeng-table/src/lib/components/ecs-primeng-table/ecs-primeng-table.html","../../../projects/ecs-primeng-table/src/public-api.ts","../../../projects/ecs-primeng-table/src/ecs-primeng-table.ts"],"sourcesContent":["export enum CellOverflowBehaviour {\r\n Hidden,\r\n Wrap/*,\r\n Ellipsis*/\r\n}","export enum DataAlignHorizontal {\r\n Left,\r\n Center,\r\n Right\r\n}","export enum DataAlignVertical {\r\n Top,\r\n Middle,\r\n Bottom\r\n}","export enum DataType {\r\n Text,\r\n Numeric,\r\n Boolean,\r\n Date\r\n}","export enum FrozenColumnAlign {\r\n Noone,\r\n Left,\r\n Right\r\n}","export enum TableViewSaveMode {\r\n noone,\r\n sessionStorage,\r\n localStorage,\r\n databaseStorage\r\n}","import { DataAlignHorizontal } from \"../enums\";\r\n\r\nexport function dataAlignHorizontalAsText(dataAlignHorizontal: DataAlignHorizontal): string {\r\n switch (dataAlignHorizontal) {\r\n case DataAlignHorizontal.Left:\r\n return 'left';\r\n case DataAlignHorizontal.Center:\r\n return 'center';\r\n case DataAlignHorizontal.Right:\r\n return 'right';\r\n default:\r\n return 'center';\r\n }\r\n}","import { DataAlignVertical } from \"../enums\";\r\n\r\nexport function dataAlignVerticalAsText(dataAlignVertical: DataAlignVertical): string {\r\n switch (dataAlignVertical) {\r\n case DataAlignVertical.Top:\r\n return 'top';\r\n case DataAlignVertical.Middle:\r\n return 'middle';\r\n case DataAlignVertical.Bottom:\r\n return 'bottom';\r\n default:\r\n return 'middle';\r\n }\r\n}","import { DataType } from \"../enums\";\r\n\r\nexport function dataTypeAsText(dataType: DataType): string {\r\n switch (dataType) {\r\n case DataType.Text:\r\n return 'text';\r\n case DataType.Numeric:\r\n return 'numeric';\r\n case DataType.Boolean:\r\n return 'boolean';\r\n case DataType.Date:\r\n return 'date';\r\n default:\r\n return 'text';\r\n }\r\n}","import { FrozenColumnAlign } from \"../enums\";\r\n\r\nexport function frozenColumnAlignAsText(frozenColumnAlign: FrozenColumnAlign): string {\r\n switch (frozenColumnAlign) {\r\n case FrozenColumnAlign.Left:\r\n return 'left';\r\n case FrozenColumnAlign.Right:\r\n return 'right';\r\n default:\r\n return 'left';\r\n }\r\n }","import { SafeHtml } from \"@angular/platform-browser\";\r\nimport { IColumnMetadata } from \"../interfaces\";\r\nimport { DataType } from \"../enums\";\r\n\r\n/**\r\n * Generates SafeHtml with highlighted text based on global search criteria.\r\n *\r\n * @param {any} cellValue - The value of the cell to be highlighted.\r\n * @param {IprimengColumnsMetadata} colMetadata - The column configuration for the cell.\r\n * @param {string | null} globalSearchText - The global search text to highlight within the cell value.\r\n * @returns {SafeHtml} - HTML content with highlighted text if it matches the global search criteria.\r\n * \r\n * @example\r\n * // Define column configuration\r\n * const colMetadata: IprimengColumnsMetadata = { dataType: 'string', canBeGlobalFiltered: true, etc... };\r\n * \r\n * // Cell value to be highlighted\r\n * const cellValue: string = 'Example text';\r\n * \r\n * // Global search text\r\n * const globalSearchText: string = 'text';\r\n * \r\n * // Use highlightText to get SafeHtml with highlighted text\r\n * const highlightedHtml: SafeHtml = highlightText(cellValue, colMetadata, globalSearchText);\r\n */\r\nexport function highlightText(cellValue: any, colMetadata: IColumnMetadata, globalSearchText: string | null): SafeHtml {\r\nif (colMetadata.dataType !== DataType.Boolean && globalSearchText !== null) { // Check if the column data type is not boolean and global search text is not null\r\n const valueToUse = String(cellValue); // Convert cell value to string\r\n if (colMetadata.canBeGlobalFiltered) { // Check if the column can be globally filtered\r\n const searchLowerCase = globalSearchText.toUpperCase(); // Convert global search text to uppercase for case-insensitive comparison\r\n const cellValueLowerCase = valueToUse.toUpperCase(); // Convert cell value to uppercase for case-insensitive comparison\r\n if (cellValueLowerCase.includes(searchLowerCase)) { // Check if the cell value contains the search text\r\n // Determine the start and end indices of the search text within the cell value\r\n const startIndex = cellValueLowerCase.indexOf(searchLowerCase);\r\n const endIndex = startIndex + globalSearchText.length;\r\n // Extract the prefix, highlight, and suffix of the cell value\r\n const prefix = valueToUse.substring(0, startIndex);\r\n const highlight = valueToUse.substring(startIndex, endIndex);\r\n const suffix = valueToUse.substring(endIndex);\r\n return `${prefix}<span class=\"highlighted-text\">${highlight}</span>${suffix}`; // Construct SafeHtml with highlighted text using the <mark> element\r\n }\r\n }\r\n}\r\nreturn cellValue; // Return the original cell value if it doesn't meet the highlighting conditions\r\n}","import { CommonModule } from '@angular/common';\r\nimport { Component, Input } from '@angular/core';\r\nimport { DomSanitizer, SafeUrl } from '@angular/platform-browser';\r\nimport { SkeletonModule } from 'primeng/skeleton';\r\nimport { TagModule } from 'primeng/tag';\r\n\r\n@Component({\r\n selector: 'ecs-table-predifined-filters',\r\n imports: [\r\n CommonModule,\r\n SkeletonModule,\r\n TagModule\r\n ],\r\n standalone: true,\r\n templateUrl: './table-predifined-filters.html'\r\n})\r\nexport class TablePredifinedFilters {\r\n constructor(\r\n private sanitizer: DomSanitizer\r\n ) {}\r\n \r\n @Input() option: any;\r\n @Input() col: any;\r\n\r\n /**\r\n * Converts a blob from the database to a safe URL that can be used to display an image.\r\n *\r\n * This function takes a `Blob` object, converts it to a base64 encoded string, and returns a `SafeUrl` \r\n * that can be used in an HTML template to display the image securely. The `SafeUrl` ensures that \r\n * Angular's security mechanisms are bypassed correctly, preventing potential security risks.\r\n *\r\n * @param {Blob} blob - The blob object representing the image data from the database.\r\n * @returns {SafeUrl} A safe URL that can be used to display the image in an HTML template.\r\n * \r\n * @example\r\n * // Example usage in a component\r\n * const imageBlob = new Blob([binaryData], { type: 'image/jpeg' });\r\n * const imageUrl = this.getBlobIconAsUrl(imageBlob);\r\n * \r\n * // In your HTML template\r\n * <img [src]=\"imageUrl\" alt=\"Image\">\r\n */\r\n getBlobIconAsUrl(blob: Blob): SafeUrl {\r\n let objectURL = `data:image/jpeg;base64,${blob}`; // Create a base64 encoded string from the blob data\r\n return this.sanitizer.bypassSecurityTrustUrl(objectURL); // Bypass Angular's security mechanisms to create a SafeUrl\r\n }\r\n getIconStyles(option: any) {\r\n return {\r\n 'vertical-align': 'middle',\r\n 'margin-right': '0.5rem',\r\n 'color': option.iconColor || '',\r\n ...option.iconStyle\r\n };\r\n}\r\n}","@if (option?.icon) {\r\n <i [class]=\"option.icon\" [ngStyle]=\"getIconStyles(option)\"></i>\r\n}\r\n@if (!option?.iconBlob && option?.iconBlobSourceEndpoint) {\r\n <p-skeleton size=\"28px\" [ngStyle]=\"{\r\n 'vertical-align': 'middle',\r\n 'margin-right': '0.5rem'\r\n }\"/>\r\n}\r\n@if (option?.iconBlob) {\r\n <img alt=\"iconBlob\"\r\n [src]=\"getBlobIconAsUrl(option.iconBlob)\"\r\n height=\"28\"\r\n style=\"vertical-align: middle; margin-right: 0.5rem;\"/>\r\n}\r\n@if (option?.iconURL) {\r\n <img alt=\"iconFromURL\"\r\n [src]=\"option.iconURL\"\r\n height=\"28\"\r\n style=\"vertical-align: middle; margin-right: 0.5rem;\"/>\r\n}\r\n@if (option?.displayTag === true) {\r\n <p-tag [style]=\"option.tagStyle\"\r\n [ngStyle]=\"{\r\n 'vertical-align': 'middle',\r\n 'margin-right': '0.5rem'\r\n }\">\r\n {{ option.name }}\r\n </p-tag>\r\n}\r\n@if (option?.displayName === true) {\r\n <span style=\"margin-left: 0.25rem; margin-top: 0.25rem;\">{{ option.name }}</span>\r\n}","import { Component, Input } from '@angular/core';\r\nimport { DataAlignHorizontal, DataAlignVertical, DataType } from '../../enums';\r\nimport { CommonModule, DatePipe } from '@angular/common';\r\nimport { TooltipModule } from 'primeng/tooltip';\r\nimport { dataAlignHorizontalAsText, dataAlignVerticalAsText, highlightText } from '../../utils';\r\nimport { IColumnMetadata, IPredifinedFilter } from '../../interfaces';\r\nimport { SafeHtml } from '@angular/platform-browser';\r\nimport { TablePredifinedFilters } from \"../table-predifined-filters/table-predifined-filters\";\r\n@Component({\r\n selector: 'ecs-table-cell',\r\n imports: [\r\n CommonModule,\r\n TooltipModule,\r\n TablePredifinedFilters\r\n],\r\n standalone: true,\r\n templateUrl: './table-cell.html'\r\n})\r\nexport class TableCell {\r\n constructor(\r\n private datePipe: DatePipe\r\n ) {}\r\n @Input() col: any;\r\n @Input() rowData: any;\r\n @Input() globalSearchText: string | null = null;\r\n @Input() predifinedFiltersCollection: { [key: string]: IPredifinedFilter[] } = {}; // Contains a collection of the values that need to be shown for predifined column filters\r\n @Input() dateFormat: string = \"dd-MMM-yyyy HH:mm:ss zzzz\";\r\n @Input() dateTimezone: string = \"+00:00\";\r\n @Input() dateCulture: string = \"en-US\";\r\n\r\n DataType = DataType;\r\n\r\n get value() {\r\n return this.rowData[this.col.field];\r\n }\r\n\r\n get tooltipText() {\r\n if (this.col.dataTooltipCustomColumnSource && this.col.dataTooltipCustomColumnSource.length > 0) {\r\n return this.rowData[this.col.dataTooltipCustomColumnSource];\r\n }\r\n return this.value;\r\n }\r\n\r\n getDataAlignHorizontalAsText(dataAlignHorizontal: DataAlignHorizontal){\r\n dataAlignHorizontalAsText(dataAlignHorizontal);\r\n }\r\n getDataAlignVerticalAsText(dataAlignVertical: DataAlignVertical){\r\n dataAlignVerticalAsText(dataAlignVertical);\r\n }\r\n \r\n\r\n /**\r\n * Formats a date value to a specific string format. Provided date will be assumed to be in UTC\r\n *\r\n * @param {any} value - The date value to be formatted.\r\n * @returns {string} - The formatted date string in 'dd-MMM-yyyy HH:mm:ss' format followed by the timezone, or empty string if the provided value is invalid or undefined.\r\n * \r\n * @example\r\n * // Example date value\r\n * const dateValue: Date = new Date();\r\n * \r\n * // Use formatDate to get the formatted date string\r\n * const formattedDate: string = formatDate(dateValue);\r\n * \r\n * // Output might be: '18-Jun-2024 14:30:00 GMT+0000'\r\n */\r\n formatDate(value: any): string{\r\n let formattedDate = undefined; // By default, formattedDate will be undefined\r\n if(value){ // If value is not undefined\r\n formattedDate = this.datePipe.transform(value, this.dateFormat, this.dateTimezone, this.dateCulture); // Perform the date masking\r\n }\r\n return formattedDate ?? ''; // Returns the date formatted, or as empty string if an issue was found (or value was undefined).\r\n }\r\n\r\n /**\r\n * Checks if the provided column metadata matches a specific style of the predefined filters \r\n * that need to be applied to an item on a row.\r\n *\r\n * @param {IprimengColumnsMetadata} colMetadata - The metadata of the column being checked.\r\n * @param {any} value - The value to be matched against the predefined filter values.\r\n * @returns {any} The matching predefined filter value if found, otherwise null.\r\n */\r\n getPredfinedFilterMatch(colMetadata: IColumnMetadata, value: any): any {\r\n if (colMetadata.filterPredifinedValuesName && colMetadata.filterPredifinedValuesName.length > 0) { // Check if the column uses predefined filter values\r\n const options = this.getPredifinedFilterValues(colMetadata.filterPredifinedValuesName); // Get the predefined filter values based on the name\r\n return options.find(option => option.value === value); // Return the matching option if found\r\n }\r\n return null; // Return null if the column does not use predefined filter values\r\n }\r\n getPredifinedFilterValues(columnKeyName: string): IPredifinedFilter[] {\r\n return this.predifinedFiltersCollection[columnKeyName] || []; // Return the predefined filter values or an empty array if the option name does not exist\r\n }\r\n\r\n highlightText(cellValue: any, colMetadata: IColumnMetadata, globalSearchText: string | null): SafeHtml {\r\n return highlightText(cellValue, colMetadata, globalSearchText);\r\n }\r\n}","<!--\r\n[ngStyle]=\"{\r\n 'display': 'flex',\r\n 'justify-content': getDataAlignHorizontalAsText(col.dataAlignHorizontal),\r\n 'align-items': getDataAlignVerticalAsText(col.dataAlignVertical)\r\n }\">\r\n-->\r\n@if (value !== null) {\r\n @if (col.filterPredifinedValuesName && col.filterPredifinedValuesName.length > 0) {\r\n <div [ngStyle]=\"{\r\n 'justify-content': getDataAlignHorizontalAsText(col.dataAlignHorizontal),\r\n 'align-items': getDataAlignVerticalAsText(col.dataAlignVertical)\r\n }\">\r\n @if (getPredfinedFilterMatch(col, value); as option) {\r\n <div \r\n [pTooltip]=\"tooltipText\"\r\n [tooltipDisabled]=\"!col.dataTooltipShow\"\r\n [showDelay]=\"700\"\r\n tooltipPosition=\"top\">\r\n <ecs-table-predifined-filters [option]=\"option\" [col]=\"col\"/>\r\n </div>\r\n }\r\n </div>\r\n } @else {\r\n @switch (col.dataType) {\r\n @case (DataType.Boolean) {\r\n <i class=\"pi\"\r\n [pTooltip]=\"tooltipText\"\r\n [tooltipDisabled]=\"!col.dataTooltipShow\"\r\n [showDelay]=\"700\"\r\n tooltipPosition=\"top\"\r\n [style.color]=\"value ? 'green' : 'red'\"\r\n [ngClass]=\"{ 'pi-check-circle': value, 'pi-times-circle': !value }\">\r\n </i>\r\n }\r\n @case (DataType.Date) {\r\n <div \r\n [innerHtml]=\"highlightText(formatDate(value), col, globalSearchText)\"\r\n [pTooltip]=\"tooltipText\"\r\n [tooltipDisabled]=\"!col.dataTooltipShow\"\r\n [showDelay]=\"700\"\r\n tooltipPosition=\"top\">\r\n {{ formatDate(value) }}\r\n </div>\r\n }\r\n @default {\r\n <div\r\n [innerHtml]=\"highlightText(value, col, globalSearchText)\"\r\n [pTooltip]=\"tooltipText\"\r\n [tooltipDisabled]=\"!col.dataTooltipShow\"\r\n [showDelay]=\"700\"\r\n tooltipPosition=\"top\">\r\n {{ value }}\r\n </div>\r\n }\r\n }\r\n }\r\n}","import { Injectable } from '@angular/core';\r\nimport { HttpHeaders, HttpResponse } from '@angular/common/http';\r\nimport { Observable } from 'rxjs';\r\n\r\n@Injectable({ providedIn: 'root' })\r\nexport abstract class ECSPrimengTableHttpService {\r\n\r\n abstract handleHttpGetRequest<T>(\r\n servicePoint: string,\r\n httpOptions?: HttpHeaders | null,\r\n showSpinner?: boolean,\r\n customErrorHandler?: ((error: any) => Observable<any>) | null,\r\n showAPIError?: boolean,\r\n responseType?: 'json' | 'blob'\r\n ): Observable<HttpResponse<T>>;\r\n\r\n abstract handleHttpPostRequest<T>(\r\n servicePoint: string,\r\n data: any,\r\n httpOptions?: HttpHeaders | null,\r\n showSpinner?: boolean,\r\n customErrorHandler?: ((error: any) => Observable<any>) | null,\r\n showAPIError?: boolean,\r\n responseType?: 'json' | 'blob'\r\n ): Observable<HttpResponse<T>>;\r\n}","import { Injectable } from '@angular/core';\r\n\r\n@Injectable({ providedIn: 'root' })\r\nexport abstract class ECSPrimengTableNotificationService {\r\n abstract showToast(\r\n severity: string,\r\n title: string,\r\n message: string,\r\n duration?: number,\r\n keepToast?: boolean,\r\n closable?: boolean,\r\n clearPrevious?: boolean\r\n ): void;\r\n \r\n abstract clearToasts(): void;\r\n}","import { Injectable } from '@angular/core';\r\nimport { Observable } from 'rxjs';\r\nimport { HttpHeaders, HttpResponse } from '@angular/common/http';\r\nimport { ECSPrimengTableHttpService, ECSPrimengTableNotificationService } from '../../services';\r\nimport { IColumnMetadata, IExcelExportRequest, ITableConfiguration, ITablePagedResponse, ITableView, ITableViewData } from '../../interfaces';\r\nimport { CellOverflowBehaviour, FrozenColumnAlign, TableViewSaveMode } from '../../enums';\r\nimport { ITableQueryRequest } from '../../interfaces/table-query-request.interface';\r\nimport { MenuItem } from 'primeng/api';\r\nimport { Table } from 'primeng/table';\r\nimport { DomHandler } from 'primeng/dom';\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class ECSPrimengTableService {\r\n constructor(\r\n private http: ECSPrimengTableHttpService,\r\n private notification: ECSPrimengTableNotificationService\r\n ) {}\r\n \r\n fetchTableConfiguration(url: string): Observable<HttpResponse<ITableConfiguration>>{\r\n return this.http.handleHttpGetRequest<ITableConfiguration>(url);\r\n }\r\n fetchTableData(url: string, postData: ITableQueryRequest): Observable<HttpResponse<ITablePagedResponse>>{\r\n return this.http.handleHttpPostRequest<ITablePagedResponse>(url, postData);\r\n }\r\n fetchExcelReport(url: string, postData: IExcelExportRequest): Observable<HttpResponse<Blob>>{\r\n let httpOptions = new HttpHeaders({\r\n 'accept': 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet',\r\n 'Content-Type': 'application/json'\r\n });\r\n return this.http.handleHttpPostRequest<Blob>(url, postData, httpOptions, true, null, true, 'blob');\r\n }\r\n\r\n downloadFile(data: Blob, fileName: string, contentType: string) {\r\n const blob = new Blob([data], { type: contentType });\r\n const url = window.URL.createObjectURL(blob);\r\n const link = document.createElement('a');\r\n link.href = url;\r\n link.download = fileName;\r\n link.click();\r\n window.URL.revokeObjectURL(url);\r\n }\r\n handleTableError(\r\n error: any,\r\n customTitle: string = 'Data Loading Error'\r\n ): void {\r\n const message = error.message || 'Unknown error occurred';\r\n this.notification.showToast('error', customTitle, message);\r\n }\r\n\r\n orderColumnsWithFrozens(colsToOrder: IColumnMetadata[]): IColumnMetadata[]{\r\n const frozenLeftColumns = colsToOrder.filter(col => col.frozenColumnAlign === FrozenColumnAlign.Left);\r\n const frozenRightColumns = colsToOrder.filter(col => col.frozenColumnAlign === FrozenColumnAlign.Right);\r\n const nonFrozenColumns = colsToOrder.filter(col => col.frozenColumnAlign === FrozenColumnAlign.Noone);\r\n return [...frozenLeftColumns, ...nonFrozenColumns, ...frozenRightColumns];\r\n }\r\n\r\n /**\r\n * Handles click events on action buttons in a row of data.\r\n * \r\n * @param {function} action - The action function to be executed when the button is clicked. It should accept one parameter, which is the row data.\r\n * @param {any} [rowData=null] - The data of the row corresponding to the clicked button. Defaults to null.\r\n * \r\n * @returns {void}\r\n * \r\n * @example\r\n * // Define an action for a button\r\n * const deleteAction = (rowData) => {\r\n * console.log(`Delete row with id: ${rowData.rowID}`);\r\n * };\r\n * \r\n * // Use handleButtonsClick with row data\r\n * handleButtonsClick(deleteAction, { rowID: 1, name: 'John Doe' });\r\n */\r\n handleButtonsClick(action: (rowData: any) => void, rowData: any = null): void {\r\n if (action) { // If the button has an assigned action\r\n action(rowData); // Perform the action\r\n }\r\n }\r\n\r\n getColumnStyle(col: any, headerCols: boolean = false): Record<string, string> {\r\n let styles: Record<string, string> = {};\r\n if(!headerCols){\r\n styles = {\r\n 'white-space': col.cellOverflowBehaviour === CellOverflowBehaviour.Wrap ? 'normal' : 'nowrap',\r\n 'word-wrap': col.cellOverflowBehaviour === CellOverflowBehaviour.Wrap ? 'break-word' : 'normal',\r\n 'word-break': col.cellOverflowBehaviour === CellOverflowBehaviour.Wrap ? 'break-all' : 'normal'\r\n };\r\n }\r\n if (col.initialWidth > 0) {\r\n styles['max-width'] = col.initialWidth + 'px';\r\n styles['min-width'] = col.initialWidth + 'px';\r\n styles['width'] = col.initialWidth + 'px';\r\n }\r\n return styles;\r\n }\r\n\r\n fetchTableViews(tableViewSaveAs: TableViewSaveMode, recoverListEndpoint: string, tableViewSaveKey: string): ITableView[] | Observable<HttpResponse<ITableView[]>>{\r\n let tableViewList: ITableView[] = [];\r\n let tableViewNotParsed: string | null = null;\r\n if(tableViewSaveKey !== \"\" && tableViewSaveKey !== ''){\r\n switch(tableViewSaveAs){\r\n case TableViewSaveMode.noone:\r\n tableViewNotParsed = null;\r\n break;\r\n case TableViewSaveMode.sessionStorage:\r\n tableViewNotParsed = sessionStorage.getItem(tableViewSaveKey);\r\n break;\r\n case TableViewSaveMode.localStorage:\r\n tableViewNotParsed = localStorage.getItem(tableViewSaveKey);\r\n break;\r\n case TableViewSaveMode.databaseStorage:\r\n const postData: any = {\r\n tableViewSaveKey: tableViewSaveKey\r\n };\r\n return this.http.handleHttpPostRequest<ITableView[]>(recoverListEndpoint,postData);\r\n default:\r\n this.notification.showToast(\"error\",\"SAVE VIEW TYPE DOES NOT EXIST\", \"This type of save view does not exist.\");\r\n }\r\n }\r\n tableViewList = tableViewNotParsed ? JSON.parse(tableViewNotParsed) : [];\r\n this.sortViews(tableViewList);\r\n return tableViewList;\r\n }\r\n sortViews(tableSaveViewList: ITableView[]): void{\r\n tableSaveViewList.sort((a, b) => \r\n a.viewAlias.toLowerCase().localeCompare(b.viewAlias.toLowerCase())\r\n );\r\n }\r\n updateViewsMenuItems(tableSaveViewList: ITableView[]): MenuItem[]{\r\n return tableSaveViewList.map(item => ({\r\n label: item.viewAlias\r\n }));\r\n }\r\n viewsSaveToDatabase(tableSaveViewList: ITableView[], setListEndpoint: string, tableViewSaveKey: string): Observable<HttpResponse<any>>{\r\n const serializedSaveViews = tableSaveViewList.map(view => ({\r\n viewAlias: view.viewAlias,\r\n viewData: JSON.stringify(view.viewData),\r\n lastActive: view.lastActive\r\n }));\r\n const postData: any = {\r\n tableViewSaveKey: tableViewSaveKey,\r\n views: serializedSaveViews\r\n };\r\n return this.http.handleHttpPostRequest<any>(setListEndpoint,postData);\r\n }\r\n viewGenerateData(dt: Table, globalSearchText: string | null, currentPage: number, currentRowsPerPage: number, modifyFiltersFn: (filters: any) => any): ITableViewData{\r\n let colsWidth = this.computeColumnWidths(dt);\r\n let tableWidth = this.computeTableWidth(dt);\r\n const filtersWithoutGlobalAndSelectedRows = {...modifyFiltersFn(JSON.parse(JSON.stringify(dt.filters)))};\r\n if (filtersWithoutGlobalAndSelectedRows['rowID']) {\r\n filtersWithoutGlobalAndSelectedRows['rowID'][0].value = null;\r\n }\r\n if (filtersWithoutGlobalAndSelectedRows['selector']) {\r\n filtersWithoutGlobalAndSelectedRows['selector'][0].value = null;\r\n }\r\n const tableView: ITableViewData = {\r\n columnsShown: [...dt.columns!],\r\n multiSortMeta: dt.multiSortMeta,\r\n filters: {...filtersWithoutGlobalAndSelectedRows},\r\n globalSearchText: globalSearchText,\r\n currentPage: currentPage,\r\n currentRowsPerPage: currentRowsPerPage,\r\n tableWidth: tableWidth,\r\n columnsWidth: colsWidth\r\n }\r\n return tableView;\r\n }\r\n\r\n computeColumnWidths(dt: Table): any {\r\n let widths: number[] = [];\r\n const headers = dt.el.nativeElement.querySelectorAll('.p-datatable-thead > tr > th');\r\n headers.forEach((header: HTMLElement) => widths.push(DomHandler.getOuterWidth(header)));\r\n return widths.join(',');\r\n }\r\n\r\n computeTableWidth(dt: Table): any {\r\n let tableWidth = 0;\r\n if (dt.columnResizeMode === 'expand') {\r\n tableWidth = DomHandler.getOuterWidth(dt.tableViewChild?.nativeElement);\r\n }\r\n return tableWidth;\r\n }\r\n}","import { CommonModule } from '@angular/common';\r\nimport { Component, EventEmitter, Input, Output, ViewEncapsulation } from '@angular/core';\r\nimport { ButtonModule } from 'primeng/button';\r\nimport { TooltipModule } from 'primeng/tooltip';\r\nimport { ECSPrimengTableService } from '../ecs-primeng-table/ecs-primeng-table.service';\r\n\r\n@Component({\r\n selector: 'ecs-table-button',\r\n imports: [\r\n CommonModule,\r\n ButtonModule,\r\n TooltipModule\r\n ],\r\n standalone: true,\r\n templateUrl: './table-button.html',\r\n styleUrl: './table-button.scss'\r\n})\r\nexport class TableButton {\r\n constructor(\r\n private tableService: ECSPrimengTableService\r\n ) {}\r\n @Input() button: any;\r\n @Input() rowData: any;\r\n @Input() isActionButton: boolean = false;\r\n @Input() isLastActionButton: boolean = false;\r\n\r\n @Output() clicked = new EventEmitter<any>();\r\n\r\n isDisabled(): boolean {\r\n return this.button.condition ? !this.button.condition(this.rowData) : false;\r\n }\r\n\r\n handleClick() {\r\n if (this.button.action) {\r\n this.tableService.handleButtonsClick(this.button.action, this.rowData);\r\n }\r\n }\r\n}\r\n","<p-button\r\n [disabled]=\"isDisabled()\"\r\n [pTooltip]=\"button.tooltip || ''\"\r\n [tooltipDisabled]=\"!button.tooltip || button.tooltip.length === 0\"\r\n [showDelay]=\"700\"\r\n tooltipPosition=\"top\"\r\n [styleClass]=\"(button.color || 'p-button-outlined') + (isActionButton ? ' custom-small-btn' : '')\"\r\n [icon]=\"button.icon || ''\"\r\n [label]=\"button.label || ''\"\r\n [size]=\"isActionButton ? 'small': undefined\"\r\n [ngStyle]=\"isActionButton && !isLastActionButton ? {'margin-right':'10px'} : {}\"\r\n (onClick)=\"handleClick()\"/>","import { Component, EventEmitter, Input, Output, ViewChild } from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\nimport { FormsModule } from '@angular/forms';\r\nimport { DialogModule } from 'primeng/dialog';\r\nimport { Table, TableModule } from 'primeng/table';\r\nimport { CheckboxModule } from 'primeng/checkbox';\r\nimport { ButtonModule } from 'primeng/button';\r\nimport { SelectButtonModule } from 'primeng/selectbutton';\r\nimport { CellOverflowBehaviour, DataAlignHorizontal, DataAlignVertical } from '../../enums';\r\nimport { InputIconModule } from 'primeng/inputicon';\r\nimport { IconFieldModule } from 'primeng/iconfield';\r\nimport { InputTextModule } from 'primeng/inputtext';\r\nimport { IColumnMetadata } from '../../interfaces';\r\n\r\n\r\n@Component({\r\n selector: 'ecs-column-selector',\r\n imports: [\r\n DialogModule,\r\n TableModule,\r\n CheckboxModule,\r\n ButtonModule,\r\n SelectButtonModule,\r\n CommonModule,\r\n FormsModule,\r\n InputIconModule,\r\n IconFieldModule,\r\n InputTextModule\r\n ],\r\n standalone: true,\r\n templateUrl: './column-selector.html'\r\n})\r\nexport class ColumnSelector {\r\n @ViewChild('dt_columnDialog') dt_columnDialog!: Table;\r\n \r\n @Input() visible: boolean = false;\r\n @Input() columnModalData: any[] = [];\r\n @Input() filteredColumnData: any[] = [];\r\n\r\n @Output() visibleChange = new EventEmitter<boolean>();\r\n @Output() applyChanges = new EventEmitter<IColumnMetadata[]>(); \r\n\r\n cellOverflowBehaviourOptions = [\r\n {icon: 'pi pi-minus', val: CellOverflowBehaviour.Hidden},\r\n {icon: 'pi pi-equals', val: CellOverflowBehaviour.Wrap}/*,\r\n {icon: 'pi pi-ellipsis-h', val: CellOverflowBehaviour.Ellipsis}*/\r\n ];\r\n dataAlignHorizontalOptions = [\r\n {icon: 'pi pi-align-left', val: DataAlignHorizontal.Left},\r\n {icon: 'pi pi-align-center', val: DataAlignHorizontal.Center},\r\n {icon: 'pi pi-align-right', val: DataAlignHorizontal.Right}\r\n ];\r\n dataAlignVerticalOptions = [\r\n {icon: 'pi pi-angle-up', val: DataAlignVertical.Top},\r\n {icon: 'pi pi-align-justify', val: DataAlignVertical.Middle},\r\n {icon: 'pi pi-angle-down', val: DataAlignVertical.Bottom}\r\n ];\r\n\r\n globalSearchText: string | null = null; // The text used by the global search\r\n globalSearchMaxLength: number = 50;\r\n onColumnModalFilter(event: any) {\r\n const filterValue = event.filters && event.filters.global \r\n ? event.filters.global.value.toLowerCase() \r\n : ''; \r\n this.filteredColumnData = this.columnModalData.filter(column => \r\n column.header.toLowerCase().includes(filterValue)\r\n );\r\n }\r\n\r\n allColumnsCheckboxActive(): boolean{\r\n return this.columnModalData.every(column => column.selected);\r\n }\r\n\r\n allColumnsCheckboxClick(event: any): void{\r\n if(event.checked){\r\n this.columnModalData.forEach(column => {column.selected = true;});\r\n } else {\r\n this.columnModalData.forEach(column => {\r\n if (!column.selectDisabled) {\r\n column.selected = false;\r\n }\r\n });\r\n }\r\n }\r\n\r\n filterColumnModal(event: any) {\r\n let filterValue = event.target.value;\r\n this.dt_columnDialog.filterGlobal(filterValue, 'contains');\r\n }\r\n\r\n applyColumnModalChanges(){\r\n const selected = this.columnModalData.filter(c => c.selected && !c.selectDisabled);\r\n this.applyChanges.emit(selected);\r\n this.closeModal();\r\n }\r\n clearGlobalFilter(dt: Table){\r\n this.globalSearchText=null;\r\n dt.filterGlobal('','');\r\n }\r\n closeModal(){\r\n this.globalSearchText=null;\r\n this.visibleChange.emit(false);\r\n }\r\n}\r\n","<!--COLUMN MODAL DIALOG-->\r\n<p-dialog [(visible)]=\"visible\" [modal]=\"true\" [draggable]=\"false\" [resizable]=\"false\" [closeOnEscape]=\"false\" [closable]=\"false\" [maximizable]=\"false\" [style]=\"{'min-width': '65vw', 'max-width': '65vw'}\">\r\n <ng-template pTemplate=\"header\">\r\n <span class=\"white-space-nowrap\"><b>MODIFY COLUMNS</b></span>\r\n </ng-template>\r\n <div style=\"padding: 20px;\">\r\n <p-table #dt_columnDialog [value]=\"columnModalData\" [scrollable]=\"true\" size=\"small\" showGridlines stripedRows \r\n [globalFilterFields]=\"['header']\" scrollHeight=\"400px\" [tableStyle]=\"{'min-width': '25rem'}\" (onFilter)=\"onColumnModalFilter($event)\">\r\n <ng-template #caption>\r\n <div style=\"display: flex; justify-content: space-between; align-items: center;\">\r\n <div style=\"display: flex; align-items: center; gap: 10px\">\r\n <p-checkbox inputId=\"selectAll\" [binary]=\"true\" [ngModel]=\"allColumnsCheckboxActive()\" (onChange)=\"allColumnsCheckboxClick($event)\"></p-checkbox>\r\n <label for=\"selectAll\">Select all columns</label>\r\n </div>\r\n <div style=\"display: flex; align-items: center;\">\r\n <p-iconField iconPosition=\"left\" [ngClass]=\"{'p-input-icon-right': globalSearchText}\">\r\n <p-inputIcon>\r\n <i class=\"pi pi-search\"></i>\r\n </p-inputIcon>\r\n <input pInputText type=\"text\" \r\n (input)=\"filterColumnModal($event)\" autocomplete=\"off\" \r\n [maxlength]=\"globalSearchMaxLength\" placeholder=\"Search column name\" [(ngModel)]=\"globalSearchText\"\r\n style=\"width: 220px;\"/>\r\n <!-- Right icon (only if there is text) -->\r\n @if (globalSearchText) {\r\n <p-inputIcon position=\"right\">\r\n <i class=\"pi pi-times\" style=\"cursor: pointer;\" (click)=\"clearGlobalFilter(dt_columnDialog); $event.stopPropagation()\"></i>\r\n </p-inputIcon>\r\n }\r\n </p-iconField>\r\n </div>\r\n </div>\r\n </ng-template>\r\n <ng-template #header>\r\n <tr>\r\n <th pFrozenColumn style=\"max-width: 100px; min-width: 100px; width: 100px; text-align: center;\">Show column</th>\r\n <th pFrozenColumn style=\"max-width: 250px; min-width: 250px; width: 250px; text-align: center;\">Column name</th>\r\n <th style=\"max-width: 150px; min-width: 150px; width: 150px; text-align: center;\">Cell overflow behaviour</th>\r\n <th style=\"max-width: 160px; min-width: 160px; width: 160px; text-align: center;\">Horizontal aligment</th>\r\n <th style=\"max-width: 150px; min-width: 150px; width: 150px; text-align: center;\">Vertical aligment</th>\r\n </tr>\r\n </ng-template>\r\n <ng-template #body let-rowData>\r\n <tr>\r\n <td pFrozenColumn style=\"max-width: 100px; min-width: 100px; width: 100px; text-align: center;\">\r\n <p-checkbox \r\n [(ngModel)]=\"rowData.selected\" \r\n [binary]=\"true\"\r\n [disabled]=\"rowData.selectDisabled\"/>\r\n </td>\r\n <td pFrozenColumn style=\"max-width: 250px; min-width: 250px; width: 250px;\">{{rowData.header}}</td>\r\n <td style=\"max-width: 150px; min-width: 150px; width: 150px; text-align: center;\">\r\n <p-selectButton [(ngModel)]=\"rowData.cellOverflowBehaviour\" [options]=\"cellOverflowBehaviourOptions\" optionValue=\"val\" optionLabel=\"icon\" [disabled]=\"rowData.cellOverflowBehaviourDisabled\" allowEmpty=\"false\">\r\n <ng-template #item let-item>\r\n <i [class]=\"item.icon\" style=\"margin: -20px;\"></i>\r\n </ng-template>\r\n </p-selectButton>\r\n </td>\r\n <td style=\"max-width: 160px; min-width: 160px; width: 160px; text-align: center;\">\r\n <p-selectButton [(ngModel)]=\"rowData.dataAlignHorizontal\" [options]=\"dataAlignHorizontalOptions\" optionValue=\"val\" optionLabel=\"icon\" [disabled]=\"rowData.dataAlignHorizontalDisabled\" allowEmpty=\"false\">\r\n <ng-template #item let-item>\r\n <i [class]=\"item.icon\" style=\"margin: -20px;\"></i>\r\n </ng-template>\r\n </p-selectButton>\r\n </td>\r\n <td style=\"max-width: 150px; min-width: 150px; width: 150px; text-align: center;\">\r\n <p-selectButton [(ngModel)]=\"rowData.dataAlignVertical\" [options]=\"dataAlignVerticalOptions\" optionValue=\"val\" optionLabel=\"icon\" [disabled]=\"rowData.dataAlignVerticalDisabled\" allowEmpty=\"false\">\r\n <ng-template #item let-item>\r\n <i [class]=\"item.icon\" style=\"margin: -20px;\"></i>\r\n </ng-template>\r\n </p-selectButton>\r\n </td>\r\n </tr>\r\n </ng-template>\r\n <ng-template #emptymessage>\r\n <tr>\r\n <td colspan=\"999\">There are no columns</td>\r\n </tr>\r\n </ng-template>\r\n </p-table>\r\n <div style=\"display: flex; flex-direction: row; justify-content: space-between; align-items: center; margin-top: 10px;\">\r\n Showing {{filteredColumnData ? filteredColumnData.length : 0}} columns of {{columnModalData ? columnModalData.length : 0}} available columns\r\n </div>\r\n </div>\r\n <ng-template pTemplate=\"footer\" style=\"display: flex; justify-content: space-between; align-items: center;\">\r\n <p-button (click)=\"closeModal()\" label=\"Cancel changes\" severity=\"danger\" [style]=\"{'margin-top': '10px'}\"></p-button>\r\n <p-button (click)=\"applyColumnModalChanges()\" label=\"Save changes\" severity=\"success\" [style]=\"{'margin-top': '10px'}\"></p-button>\r\n </ng-template>\r\n</p-dialog>","import { Injectable } from \"@angular/core\";\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class ExportExcelService {\r\n getCurrentTimeString(): string {\r\n const now = new Date();\r\n const year = now.getUTCFullYear();\r\n const month = String(now.getUTCMonth() + 1).padStart(2, '0');\r\n const day = String(now.getUTCDate()).padStart(2, '0');\r\n const hours = String(now.getUTCHours()).padStart(2, '0');\r\n const minutes = String(now.getUTCMinutes()).padStart(2, '0');\r\n const seconds = String(now.getUTCSeconds()).padStart(2, '0');\r\n return `_${year}${month}${day}_${hours}${minutes}${seconds}_UTC`;\r\n }\r\n}","import { Component, EventEmitter, Input, OnChanges, Output, SimpleChanges } from '@angular/core';\r\nimport { FormsModule } from '@angular/forms';\r\nimport { ButtonModule } from 'primeng/button';\r\nimport { DialogModule } from 'primeng/dialog';\r\nimport { SelectButton, SelectButtonChangeEvent } from 'primeng/selectbutton';\r\nimport { ECSPrimengTableNotificationService } from '../../services';\r\nimport { ExportExcelService } from './export-excel.service';\r\nimport { InputTextModule } from 'primeng/inputtext';\r\nimport { TooltipModule } from 'primeng/tooltip';\r\nimport { CheckboxModule } from 'primeng/checkbox';\r\n\r\n@Component({\r\n selector: 'ecs-export-excel',\r\n imports: [\r\n DialogModule,\r\n FormsModule,\r\n ButtonModule,\r\n SelectButton,\r\n InputTextModule,\r\n TooltipModule,\r\n CheckboxModule\r\n ],\r\n standalone: true,\r\n templateUrl: './export-excel.html'\r\n})\r\nexport class ExportExcel implements OnChanges {\r\n @Input() visible: boolean = false;\r\n @Input() rowCheckboxSelectorActive: boolean = false;\r\n @Input() excelReportTitle: string = \"\";\r\n includeTimeInTitle: boolean = true;\r\n @Input() allowTitleUserEdit: boolean = false;\r\n @Output() exportToExcel = new EventEmitter<{\r\n allColumns: boolean,\r\n applyFilters: boolean,\r\n applySorts: boolean,\r\n selectedRows: number,\r\n filename: string\r\n }>();\r\n @Output() visibleChange = new EventEmitter<boolean>();\r\n\r\n constructor(\r\n private notificationSerivce: ECSPrimengTableNotificationService,\r\n private exportExcelService: ExportExcelService\r\n ) {}\r\n\r\n option_exportColumns_selected: boolean = false;\r\n option_exportColumns: any[] = [\r\n { label: 'Only visible', value: false },\r\n { label: 'All columns', value: true }\r\n ];\r\n\r\n option_applyCurrentFilters_selected: boolean = false;\r\n option_applyCurrentFilters: any[] = [\r\n { label: 'No filters', value: false },\r\n { label: 'Apply current filters', value: true }\r\n ];\r\n\r\n option_applyCurrentSorts_selected: boolean = false;\r\n option_applyCurrentSorts: any[] = [\r\n { label: 'No sorts', value: false },\r\n { label: 'Apply current sorts', value: true }\r\n ];\r\n\r\n option_selectedRowsExport_selected: number = 0;\r\n option_selectedRowsExport: any[] = [\r\n { label: 'All rows', value: 0 },\r\n { label: 'Selected rows', value: 1 },\r\n { label: 'Not selected rows', value: 2 }\r\n ];\r\n \r\n ngOnChanges(changes: SimpleChanges) {\r\n // If visible changes from false to true, reset values\r\n if (changes['visible'] && changes['visible'].currentValue === true && changes['visible'].previousValue === false) {\r\n this.resetValues();\r\n }\r\n }\r\n\r\n private resetValues() {\r\n this.includeTimeInTitle = true;\r\n this.option_exportColumns_selected = false;\r\n this.option_applyCurrentFilters_selected = false;\r\n this.option_applyCurrentSorts_selected = false;\r\n this.option_selectedRowsExport_selected = 0;\r\n }\r\n \r\n getExcelReport(){\r\n let excelReportFinalTitle: string = \"\";\r\n this.excelReportTitle=this.excelReportTitle?.trim();\r\n if (!this.excelReportTitle || this.excelReportTitle.length <= 0) {\r\n this.notificationSerivce.clearToasts();\r\n this.notificationSerivce.showToast(\"error\", \"REPORT NAME NOT VALID\", \"The report name is not valid\");\r\n return; \r\n }\r\n const allowedPattern = /^[A-Za-z0-9 _-]*$/;\r\n if (!allowedPattern.test(this.excelReportTitle)) {\r\n this.notificationSerivce.clearToasts();\r\n this.notificationSerivce.showToast(\"error\", \"INVALID CHARACTERS IN REPORT NAME\", \"The report name contains invalid characters.\");\r\n return;\r\n }\r\n if(this.includeTimeInTitle){\r\n excelReportFinalTitle = this.excelReportTitle + this.exportExcelService.getCurrentTimeString() + \".xlsx\";\r\n } else {\r\n excelReportFinalTitle = this.excelReportTitle + \".xlsx\";\r\n }\r\n this.exportToExcel.emit({\r\n allColumns: this.option_exportColumns_selected,\r\n applyFilters: this.option_applyCurrentFilters_selected,\r\n applySorts: this.option_applyCurrentSorts_selected,\r\n selectedRows: this.option_selectedRowsExport_selected,\r\n filename: excelReportFinalTitle\r\n });\r\n }\r\n\r\n filterSelectorDisabled(): boolean{\r\n return this.option_selectedRowsExport_selected >= 1;\r\n }\r\n\r\n onChangeExportRows(event: SelectButtonChangeEvent): void{\r\n if(event.value>=1){\r\n this.option_applyCurrentFilters_selected=true;\r\n }\r\n }\r\n\r\n closeModal(){\r\n this.visibleChange.emit(false);\r\n }\r\n}","<p-dialog [(visible)]=\"visible\" [modal]=\"true\" [draggable]=\"false\" [resizable]=\"false\"\r\n [closable]=\"false\" [closeOnEscape]=\"false\" [maximizable]=\"false\" [style]=\"{'min-width': '70vw', 'max-width': '70vw'}\">\r\n <ng-template pTemplate=\"header\">\r\n <div>\r\n <span class=\"p-dialog-title\">Export data to Excel</span>\r\n </div>\r\n </ng-template>\r\n <div style=\"display: grid; grid-template-columns: 4fr 8fr; gap: 1rem; align-items: center;\">\r\n <div style=\"justify-self: end;\">\r\n Report filename\r\n </div>\r\n <div style=\"justify-self: stretch; width: 100%;\">\r\n <input pInputText id=\"reportTitle\" [(ngModel)]=\"excelReportTitle\" autocomplete=\"off\" style=\"width: 100%;\" [disabled]=\"!allowTitleUserEdit\" maxlength=\"100\"/>\r\n </div>\r\n\r\n <div style=\"justify-self: end;\">\r\n <i pTooltip=\"Activating this option will add the current '_{year}{month}{day}_{hours}{minutes}{seconds}_UTC' at the end of your filename\" tooltipPosition=\"top\" class=\"pi pi-info-circle\"></i>\r\n Include time in report filename\r\n </div>\r\n <div style=\"justify-self: stretch; width: 100%;\">\r\n <p-checkbox [binary]=\"true\" [(ngModel)]=\"includeTimeInTitle\"/>\r\n </div>\r\n \r\n <div style=\"justify-self: end;\">\r\n Export columns\r\n </div>\r\n <div style=\"justify-self: start;\">\r\n <p-selectButton [(ngModel)]=\"option_exportColumns_selected\" [options]=\"option_exportColumns\" optionLabel=\"label\" optionValue=\"value\" allowEmpty=\"false\"/>\r\n </div>\r\n\r\n <div style=\"justify-self: end;\">\r\n @if(filterSelectorDisabled()){\r\n <i pTooltip=\"Sorts are active because you want to export selected rows following a filter criteria\" tooltipPosition=\"top\" class=\"pi pi-info-circle\"></i>\r\n }\r\n Filters to apply\r\n </div>\r\n <div style=\"justify-self: start;\">\r\n <p-selectButton [(ngModel)]=\"option_applyCurrentFilters_selected\" [options]=\"option_applyCurrentFilters\" optionLabel=\"label\" optionValue=\"value\" allowEmpty=\"false\" [disabled]=\"filterSelectorDisabled()\"/>\r\n </div>\r\n\r\n <div style=\"justify-self: end;\">\r\n Sorts to apply\r\n </div>\r\n <div style=\"justify-self: start;\">\r\n <p-selectButton [(ngModel)]=\"option_applyCurrentSorts_selected\" [options]=\"option_applyCurrentSorts\" optionLabel=\"label\" optionValue=\"value\" allowEmpty=\"false\"/>\r\n </div>\r\n\r\n @if(rowCheckboxSelectorActive){\r\n <div style=\"justify-self: end;\">\r\n Selected rows\r\n </div>\r\n <div style=\"justify-self: start;\">\r\n <p-selectButton [(ngModel)]=\"option_selectedRowsExport_selected\" [options]=\"option_selectedRowsExport\" optionLabel=\"label\" optionValue=\"value\" allowEmpty=\"false\" (onChange)=\"onChangeExportRows($event)\"/>\r\n </div>\r\n }\r\n </div>\r\n <ng-template pTemplate=\"footer\" style=\"display: flex; justify-content: space-between; align-items: center;\">\r\n <p-button (click)=\"closeModal()\" label=\"Cancel export\" severity=\"danger\" [style]=\"{'margin-top': '20px'}\"/>\r\n <p-button (click)=\"getExcelReport()\" label=\"Export\" severity=\"success\" [style]=\"{'margin-top': '20px'}\"/>\r\n </ng-template>\r\n</p-dialog>","import { CommonModule } from '@angular/common';\r\nimport { Component, EventEmitter, Input, Output } from '@angular/core';\r\nimport { FormsModule } from '@angular/forms';\r\nimport { MenuItem } from 'primeng/api';\r\nimport { ButtonModule } from 'primeng/button';\r\nimport { DialogModule } from 'primeng/dialog';\r\nimport { InputTextModule } from 'primeng/inputtext';\r\nimport { TableModule } from 'primeng/table';\r\nimport { TooltipModule } from 'primeng/tooltip';\r\nimport { ECSPrimengTableNotificationService } from '../../services';\r\n@Component({\r\n selector: 'ecs-views-management',\r\n imports: [\r\n DialogModule,\r\n TableModule,\r\n ButtonModule,\r\n CommonModule,\r\n FormsModule,\r\n TooltipModule,\r\n InputTextModule\r\n ],\r\n standalone: true,\r\n templateUrl: './views-management.html'\r\n})\r\nexport class ViewsManagement {\r\n constructor(\r\n private notification: ECSPrimengTableNotificationService\r\n ) {}\r\n @Input() visible: boolean = false;\r\n @Input() tableViews_menuItems: MenuItem[] = [];\r\n @Output() onViewSelect = new EventEmitter<string>();\r\n @Output() onViewDelete = new EventEmitter<string>();\r\n @Output() onViewUpdateData = new EventEmitter<string>();\r\n @Output() onViewEditAlias = new EventEmitter<{ viewAliasOld: string; viewAliasNew: string }>();\r\n @Output() onViewCreate = new EventEmitter<string>();\r\n @Output() visibleChange = new EventEmitter<boolean>();\r\n viewEditorShow: boolean = false;\r\n editingViewAlias: string = '';\r\n newViewAlias: string = '';\r\n loadView(viewAlias: string) {\r\n this.onViewSelect.emit(viewAlias);\r\n }\r\n deleteView(viewAlias: string){\r\n this.onViewDelete.emit(viewAlias);\r\n }\r\n updateView(viewAlias: string){\r\n this.onViewUpdateData.emit(viewAlias);\r\n }\r\n createView(viewAlias: string){\r\n const exists = this.tableViews_menuItems.some(item => item.label === viewAlias);\r\n if (exists) {\r\n this.notification.showToast(\"error\",\"DUPLICATE VIEW NAME\",`A view with alias \"${viewAlias}\" already exists`);\r\n return;\r\n }\r\n this.onViewCreate.emit(viewAlias);\r\n }\r\n editViewAlias(viewAliasOld: string, viewAliasNew: string) {\r\n this.onViewEditAlias.emit({\r\n viewAliasOld: viewAliasOld,\r\n viewAliasNew: viewAliasNew\r\n });\r\n }\r\n \r\n showViewEditor(editingViewAlias: string = ''){\r\n this.editingViewAlias = editingViewAlias;\r\n this.newViewAlias = this.editingViewAlias;\r\n this.viewEditorShow=true;\r\n }\r\n\r\n closeModal(){\r\n this.visibleChange.emit(false);\r\n }\r\n\r\n createOrUpdateTableView(){\r\n this.viewEditorShow=false;\r\n if(this.editingViewAlias !== ''){\r\n this.editViewAlias(this.editingViewAlias, this.newViewAlias);\r\n } else {\r\n this.createView(this.newViewAlias);\r\n }\r\n }\r\n}","<p-dialog [(visible)]=\"visible\" [modal]=\"true\" [draggable]=\"false\" [resizable]=\"false\"\r\n [closable]=\"true\" [closeOnEscape]=\"false\" [maximizable]=\"false\" [style]=\"{'min-width': '70vw', 'max-width': '70vw'}\" (onHide)=\"closeModal()\">\r\n <ng-template pTemplate=\"header\">\r\n <div>\r\n <span class=\"p-dialog-title\">Table views</span>\r\n </div>\r\n </ng-template>\r\n <div class=\"p-4 pt-0\">\r\n <p-table #dt_viewsDialog [value]=\"tableViews_menuItems\" [scrollable]=\"true\" size=\"small\" showGridlines stripedRows scrollHeight=\"400px\" [tableStyle]=\"{'min-width': '25rem'}\">\r\n <ng-template #caption>\r\n <div style=\"display: flex; justify-content: flex-end; align-items: center; width: 100%;\">\r\n <p-button icon=\"pi pi-plus\" label=\"New view\" severity=\"success\" (click)=\"showViewEditor()\" pTooltip=\"New view\" tooltipPosition=\"top\" [showDelay]=\"700\"/>\r\n </div>\r\n </ng-template>\r\n <ng-template #header>\r\n <tr>\r\n <th style=\"text-align: center;\">View name</th>\r\n <th style=\"text-align: center; max-width: 300px; min-width: 300px; width: 300px;\">Actions</th>\r\n </tr>\r\n </ng-template>\r\n <ng-template #body let-rowData>\r\n <tr>\r\n <td>\r\n {{rowData.label}}\r\n </td>\r\n <td style=\"max-width: 300px; min-width: 300px; width: 300px; display: flex; justify-content: center; align-items: center; height: 100%;\">\r\n <button pButton icon=\"pi pi-upload\" (click)=\"loadView(rowData.label);\" [showDelay]=\"700\" pTooltip=\"Restore\" tooltipPosition=\"top\" size=\"small\" class=\"p-button-sm\" style=\"height: 28px; margin-right: 10px;\"></button>\r\n <button pButton icon=\"pi pi-save\" (click)=\"updateView(rowData.label);\" [showDelay]=\"700\" pTooltip=\"Save\" tooltipPosition=\"top\" size=\"small\" class=\"p-button-sm\" style=\"height: 28px; margin-right: 10px;\"></button>\r\n <button pButton icon=\"pi pi-pencil\" (click)=\"showViewEditor(rowData.label);\" [showDelay]=\"700\" pTooltip=\"Edit\" tooltipPosition=\"top\" size=\"small\" class=\"p-button-sm\" style=\"height: 28px; margin-right: 10px;\"></button>\r\n <button pButton icon=\"pi pi-trash\" (click)=\"deleteView(rowData.label);\" [showDelay]=\"700\" pTooltip=\"Delete\" tooltipPosition=\"top\" size=\"small\" class=\"p-button-sm\" style=\"height: 28px;\"></button>\r\n </td>\r\n </tr>\r\n </ng-template>\r\n <ng-template #emptymessage>\r\n <tr>\r\n <td colspan=\"999\">There are no views</td>\r\n </tr>\r\n </ng-template>\r\n </p-table>\r\n <div style=\"display: flex; flex-direction: row; justify-content: space-between; align-items: center; margin-top: 10px;\">\r\n Showing {{tableViews_menuItems ? tableViews_menuItems.length : 0}} views\r\n </div>\r\n </div>\r\n</p-dialog>\r\n\r\n<!--TABLE VIEW SAVE-->\r\n<p-dialog [(visible)]=\"viewEditorShow\" [modal]=\"true\" [draggable]=\"false\" [resizable]=\"false\" [closeOnEscape]=\"false\" [closable]=\"false\" [maximizable]=\"false\" [style]=\"{'max-width': '60vw'}\">\r\n <ng-template pTemplate=\"header\">\r\n <div class=\"inline-flex align-items-center justify-content-center gap-2\">\r\n <span class=\"white-space-nowrap\"><b>{{ editingViewAlias !== '' ? 'UPDATE VIEW' : 'CREATE NEW VIEW' }}</b></span>\r\n </div>\r\n </ng-template>\r\n <div style=\"display: flex; flex-direction: column; gap: 8px;\">\r\n <label for=\"newtableviewname\"><strong>View alias<span style=\"color: red;\">*</span></strong></label>\r\n <input \r\n pInputText \r\n id=\"newtableviewname\" \r\n aria-describedby=\"newtableviewname-help\" \r\n style=\"width: 400px;\"\r\n maxlength=\"30\"\r\n [(ngModel)]=\"newViewAlias\"/>\r\n </div>\r\n <ng-template pTemplate=\"footer\" style=\"display: flex; justify-content: space-between; align-items: center;\">\r\n <p-button (click)=\"viewEditorShow = false\" label=\"Cancel\" severity=\"danger\" [style]=\"{'margin-top': '20px'}\"></p-button>\r\n <p-button (click)=\"createOrUpdateTableView()\" [label]=\"editingViewAlias !== '' ? 'Update' : 'Create'\" severity=\"success\" [style]=\"{'margin-top': '20px'}\"></p-button>\r\n </ng-template>\r\n</p-dialog>","import { AfterViewInit, Component, ElementRef, EventEmitter, Input, OnDestroy, OnInit, Output, ViewChild, ViewEncapsulation } from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\nimport { FormsModule } from '@angular/forms';\r\nimport { HttpResponse } from '@angular/common/http';\r\n\r\n// PrimeNG imports\r\nimport { Table, TableLazyLoadEvent, TableModule, TablePageEvent, TableRowSelectEvent, TableRowUnSelectEvent } from 'primeng/table';\r\nimport { ButtonModule } from 'primeng/button';\r\nimport { TooltipModule } from 'primeng/tooltip';\r\nimport { InputTextModule } from 'primeng/inputtext';\r\nimport { IconFieldModule } from 'primeng/iconfield';\r\nimport { InputIconModule } from 'primeng/inputicon';\r\nimport { MultiSelectModule } from 'primeng/multiselect';\r\nimport { CheckboxModule } from 'primeng/checkbox';\r\nimport { PaginatorModule } from 'primeng/paginator';\r\nimport { FilterMetadata, MenuItem } from 'primeng/api';\r\nimport { ButtonGroupModule } from 'primeng/buttongroup';\r\n\r\nimport { ECSPrimengTableService } from './ecs-primeng-table.service';\r\nimport { CellOverflowBehaviour, DataAlignHorizontal, DataAlignVertical, DataType, FrozenColumnAlign, TableViewSaveMode } from '../../enums';\r\nimport { ITableButton, IColumnMetadata, IPredifinedFilter, ITableConfiguration, ITablePagedResponse, ITableQueryRequest, IExcelExportRequest, ITableView, ITableViewData } from '../../interfaces';\r\nimport { dataAlignHorizontalAsText, dataAlignVerticalAsText, dataTypeAsText, frozenColumnAlignAsText } from '../../utils';\r\nimport { ECSPrimengTableNotificationService } from '../../services';\r\nimport { TableCell } from '../table-cell/table-cell';\r\nimport { TablePredifinedFilters } from '../table-predifined-filters/table-predifined-filters';\r\nimport { TableButton } from '../table-button/table-button';\r\nimport { ColumnSelector } from \"../column-selector/column-selector\";\r\nimport { ExportExcel } from '../export-excel/export-excel';\r\nimport { Observable } from 'rxjs';\r\nimport { ViewsManagement } from \"../views-management/views-management\";\r\n\r\n@Component({\r\n selector: 'ecs-primeng-table',\r\n imports: [\r\n CommonModule,\r\n FormsModule,\r\n TableModule,\r\n ButtonModule,\r\n TooltipModule,\r\n InputTextModule,\r\n IconFieldModule,\r\n InputIconModule,\r\n MultiSelectModule,\r\n CheckboxModule,\r\n PaginatorModule,\r\n TableCell,\r\n TablePredifinedFilters,\r\n TableButton,\r\n ColumnSelector,\r\n ExportExcel,\r\n ButtonGroupModule,\r\n ViewsManagement\r\n],\r\n standalone: true,\r\n templateUrl: './ecs-primeng-table.html',\r\n styleUrl: './ecs-primeng-table.scss',\r\n encapsulation: ViewEncapsulation.None\r\n})\r\nexport class ECSPrimengTable implements OnInit, AfterViewInit, OnDestroy {\r\n private resizeObserver!: ResizeObserver;\r\n constructor(\r\n private tableService: ECSPrimengTableService,\r\n private notification: ECSPrimengTableNotificationService\r\n ) {}\r\n @Input() isActive: boolean = true;\r\n @Input() data: any[] = []; // The array of data to be displayed\r\n @Input() columnsToShow: IColumnMetadata[] = []; // The combination of the non-selectable columns + selected columns that must be shown\r\n @Input() computeScrollHeight: boolean = true; // If true, the table will try not to grow more than the total height of the window vertically\r\n @Input() globalSearchEnabled: boolean = true; // Used to enable or disable the global search (by default enabled)\r\n @Input() globalSearchMaxLength: number = 50; // The maximun number of characters that can be input in the global filter\r\n @Input() globalSearchPlaceholder: string = \"Search keyword\"; // The placeholder text to show if global search is enabled\r\n @Input() columnEditorEnabled: boolean = true; // If the user can modify the columns thorugh the column editor\r\n @Input() urlColumnsSource!: string; // The source URL to get data from columns\r\n @Input() urlDataSource!:string; // The URL to fetch data from\r\n @Input() urlExcelReport: string | null = null;\r\n @Input() predifinedFiltersCollection: { [key: string]: IPredifinedFilter[] } = {}; // Contains a collection of the values that need to be shown for predifined column filters\r\n @Input() predifinedFiltersNoSelectionPlaceholder: string = \"Any value\"; // A text to be displayed in the dropdown if no value has been selected in a column that uses predifined filters\r\n @Input() predifinedFiltersCollectionSelectedValuesText: string = \"items selected\"; // A text to display in the predifined filters dropdown footer indicating the number of items that have been selected\r\n @Input() rowActionButtons: ITableButton[] = []; // A list that contains all buttons that will appear in the actions column\r\n @Input() headerActionButtons: ITableButton[] = []; // A list that contains all buttons that will appear in the right side of the header of the table\r\n @Input() copyCellDataToClipboardTimeSecs: number = 0.5; // The amount of time since mouse down in a cell for its content to be copied to the clipboard. If you want to disable this functionality, put it to a value less than or equal to 0.\r\n @Input() actionsColumnAligmentRight: boolean = true; // If actions column is put at the right end of the table (or false if its at the left)\r\n @Input() actionsColumnWidth: number = 150; // The amount in pixels for the size of the actions column\r\n @Input() actionsColumnFrozen: boolean = true; // If the actions column should be frozen\r\n @Input() rowSelectorColumnActive: boolean = false; // By default false. If true, a column will be shown to the user that includes a checkbox per row. This selection and filtering that the user can do is all managed by the table component. You can fetch the selected rows through the output selectedRowsCheckbox.\r\n @Input() rowSelectorColumName: string = \"Selected\"; // The title of the row selection column. By default is \"Selected\"\r\n @Input() rowSelectorColumnAligmentRight: boolean = true; // By default true. If true, the row selector column is put at the right end of the table (or false if its at the left).\r\n @Input() rowSelectorColumnWidth: number = 150; // The amount in pixels for the size of the selector column\r\n @Input() rowSelectorColumnFrozen: boolean = true; // By default true. If true, the row selector column will be frozen.\r\n @Input() actionsColumnResizable: boolean = false; // If the action column can be resized by the user\r\n @Input() actionColumnName: string = \"Actions\" // The column name were the action buttons will appear\r\n @Input() rowselectorColumnResizable: boolean = false;\r\n @Input() noDataFoundText: string = \"No data found for the current filter criteria.\"; // The text to be shown when no data has been returned\r\n @Input() showClearSortAndFilters: boolean = true;\r\n @Input() excelReportTitleDefault: string = \"Report\";\r\n @Input() excelReportTitleAllowUserEdit: boolean = false;\r\n @Input() tableViewSaveAs: TableViewSaveMode = TableViewSaveMode.noone; // How the table view will be saved\r\n @Input() tableViewSaveKey: string = \"\"; // The key used to save the table views\r\n @Input() viewsGetSourceURL: string = \"\";\r\n @Input() viewsSaveSourceURL: string = \"\";\r\n @Input() maxTableViews: number = 10; // The maximun number of views that can be saved\r\n @Output() onRowCheckboxChange = new EventEmitter<{\r\n rowID: any,\r\n selected: boolean\r\n }>(); // Emitter that returns the column selected and if it was selected or unselected\r\n @Output() onRowSelect = new EventEmitter<{\r\n rowID: any,\r\n rowData: any\r\n }>\r\n @Output() onRowUnselect = new EventEmitter<{\r\n rowID: any,\r\n rowData: any\r\n }>\r\n viewsModalShow:boolean = false;\r\n tableViewCurrentSelectedAlias: string | null = null;\r\n tableViewsFirstFetchDone: boolean = false;\r\n excelReportTitle: string = \"\";\r\n showExportModal: boolean = false;\r\n showColumnSelector: boolean = false;\r\n selectedRowsCheckbox: any[] = []; // An array to keep all the selected rows\r\n @ViewChild('dt') dt!: Table; // Get the reference to the object table\r\n showRefreshData=true;\r\n scrollHeight: string = \"0px\"; // Used to get the table height\r\n globalSearchText: string | null = null; // The text used by the global search\r\n tableViewsList: ITableView[] = [];\r\n tableViews_menuItems: MenuItem[] = [];\r\n\r\n DataType = DataType;\r\n CellOverflowBehaviour = CellOverflowBehaviour;\r\n DataAlignHorizontal = DataAlignHorizontal;\r\n DataAlignVertical = DataAlignVertical;\r\n FrozenColumnAlign = FrozenColumnAlign;\r\n TableViewSaveMode = TableViewSaveMode;\r\n\r\n rowSelection: any;\r\n currentPage: number = 0; // The current page we are at\r\n currentRowsPerPage: number = 0; // The current rows per page selected\r\n allowedRowsPerPage: number[] = []; // The different values of rows per page allowed\r\n totalRecords: number = 0; // The number of total records that are available (taking into account the filters)\r\n totalRecordsNotFiltered: number = 0; // The total number of records available if no filters were applied\r\n\r\n dateFormat: string = \"dd-MMM-yyyy HH:mm:ss zzzz\";\r\n dateTimezone: string = \"+00:00\";\r\n dateCulture: string = \"en-US\";\r\n\r\n columns: IColumnMetadata[] = [];\r\n columnsCantBeHidden: IColumnMetadata[] = [];\r\n columnsSelected: IColumnMetadata[] = [];\r\n columnModalData: any[] = []; \r\n filteredColumnData: any[] = []; \r\n predifinedFiltersSelectedValuesCollection: { [key: string]: any[] } = {}; // Contains a collection of the predifined column filters selection (possible values come from 'predifinedFiltersCollection')\r\n private copyCellDataTimer: any; // A timer that handles the amount of time left to copy the cell data to the clipboard\r\n tableLazyLoadEventInformation: TableLazyLoadEvent = {}; // Data of the last lazy load event of the table\r\n private initialConfigurationFetched: boolean = false;\r\n ngOnInit(): void {\r\n this.fetchTableConfiguration();\r\n }\r\n @ViewChild('tableContainer', { static: false }) tableContainer!: ElementRef;\r\n @ViewChild('headerContainer', { static: false }) headerContainer!: ElementRef;\r\n @ViewChild('paginatorContainer', { static: false }) paginatorContainer!: ElementRef;\r\n ngAfterViewInit() {\r\n if (this.computeScrollHeight) {\r\n this.resizeObserver = new ResizeObserver(() => {\r\n this.calculateScrollHeight();\r\n });\r\n this.resizeObserver.observe(this.tableContainer.nativeElement);\r\n window.addEventListener('resize', this.onWindowResize);\r\n this.calculateScrollHeight();\r\n }\r\n }\r\nonWindowResize = () => {\r\n clearTimeout((this as any)._resizeTimeout);\r\n (this as any)._resizeTimeout = setTimeout(() => {\r\n this.calculateScrollHeight();\r\n }, 100);\r\n};\r\n calculateScrollHeight(){\r\n if (this.tableContainer && this.paginatorContainer && this.headerContainer) {\r\n const containerRect = this.tableContainer.nativeElement.getBoundingClientRect();\r\n const paginatorHeight = this.paginatorContainer.nativeElement.offsetHeight;\r\n const headerHeight = this.headerContainer.nativeElement.offsetHeight;\r\n const viewportHeight = window.innerHeight;\r\n const topOffset = containerRect.top + window.scrollY;\r\n this.scrollHeight = `${(viewportHeight - topOffset - paginatorHeight - headerHeight) - 45}px`;\r\n //const containerHeight = this.tableContainer.nativeElement.offsetHeight;\r\n //const headerHeight = this.headerContainer.nativeElement.offsetHeight;\r\n //const paginatorHeight = this.paginatorContainer.nativeElement.offsetHeight || 50; // fallback\r\n\r\n //this.scrollHeight = `${containerHeight - headerHeight - paginatorHeight}px`;\r\n //console.log(this.scrollHeight)\r\n }\r\n }\r\n\r\n ngOnDestroy() {\r\n this.resizeObserver?.disconnect();\r\n window.removeEventListener('resize', this.onWindowResize);\r\n }\r\n\r\n /**\r\n * Used to update the data of a table externally outside the component. Use this method instead of 'updateData' to force the data updata of a table\r\n *\r\n * @param {(optionalData?: any) => void} [continueAction] - Optional action to execute after data retrieval if it succeeded.\r\n * @param {boolean} [uponContinueActionEndModalHttp=false] - Optional flag to set the loading indicator to inactive after data retrieval.\r\n */\r\n updateData(continueAction?: (optionalData?: any) => void, uponContinueActionEndModalHttp: boolean = false): void {\r\n this.isActive = true; // Indicate that the table is now enabled to perform actions\r\n if (!this.initialConfigurationFetched) {\r\n this.fetchTableConfiguration();\r\n } else {\r\n this.fetchTableData(this.tableLazyLoadEventInformation);\r\n }\r\n }\r\n\r\n fetchTableConfiguration(): void {\r\n if(!this.isActive){\r\n return;\r\n }\r\n this.tableService.fetchTableConfiguration(this.urlColumnsSource).subscribe({\r\n next: (response: HttpResponse<ITableConfiguration>) => {\r\n this.handleTableConfigurationResponse(response.body!);\r\n this.fetchTableViews();\r\n },\r\n error: (err) => this.tableService.handleTableError(err, 'Columns Error')\r\n });\r\n }\r\n\r\n private handleTableConfigurationResponse(body: ITableConfiguration): void {\r\n this.allowedRowsPerPage = body.allowedItemsPerPage; // Update the number of rows allowed per page\r\n this.currentRowsPerPage = Math.min(...this.allowedRowsPerPage); // Update the current rows per page to use the minimum value of allowed rows per page by default\r\n this.columns = body.columnsInfo; // Update columns with fetched data\r\n this.columnsCantBeHidden = this.columns.filter((col: any) => !col.canBeHidden); // Filter columns that cannot be hidden\r\n this.columnsSelected = this.columns.filter((col: any) => !col.startHidden && col.canBeHidden); // Selected columns that are not hidden by default\r\n this.columnsToShow = this.tableService.orderColumnsWithFrozens(this.columnsCantBeHidden.concat(this.columnsSelected));\r\n this.dateFormat = body.dateFormat;\r\n this.dateTimezone = body.dateTimezone;\r\n this.dateCulture = body.dateCulture;\r\n this.currentPage = 0;\r\n this.initialConfigurationFetched = true;\r\n }\r\n\r\n refreshData(event: any){\r\n this.fetchTableData(this.tableLazyLoadEventInformation);\r\n }\r\n\r\n tableViewsEnabled(): boolean {\r\n return (\r\n this.tableViewSaveAs !== TableViewSaveMode.noone &&\r\n this.tableViewSaveKey !== ''\r\n );\r\n }\r\n \r\n fetchTableViews(): void {\r\n if(!this.tableViewsEnabled()){\r\n this.fetchTableData(this.tableLazyLoadEventInformation);\r\n return;\r\n }\r\n const tableViews = this.tableService.fetchTableViews(this.tableViewSaveAs, this.viewsGetSourceURL, this.tableViewSaveKey);\r\n if (tableViews instanceof Observable) {\r\n tableViews.subscribe({\r\n next: (response: HttpResponse<ITableView[]>) => {\r\n let parsedResult = response.body!.map((item: any) => ({\r\n viewAlias: item.viewAlias,\r\n viewData: JSON.parse(item.viewData),\r\n lastActive: item.lastActive\r\n }));\r\n this.tableViewListProcess(parsedResult);\r\n },\r\n error: (err) => this.tableService.handleTableError(err, 'Views get error')\r\n });\r\n } else {\r\n this.tableViewListProcess(tableViews);\r\n }\r\n }\r\n\r\n private tableViewListProcess(tableViews: ITableView[]){\r\n this.tableViewsList = [...tableViews];\r\n if(this.tableViewsList.length > 0){\r\n this.tableService.sortViews(this.tableViewsList);\r\n }\r\n this.tableViews_menuItems=[...this.tableService.updateViewsMenuItems(this.tableViewsList)];\r\n const viewToStartup: ITableView | undefined = this.tableViewsList.find(v => v.lastActive);\r\n if (viewToStartup) { // If there is a view that needs to be loaded on startup\r\n this.viewLoad(viewToStartup.viewAlias);\r\n } else {\r\n this.fetchTableData(this.tableLazyLoadEventInformation);\r\n }\r\n }\r\n\r\n viewLoad(tableViewAlias: string): void {\r\n const viewToLoad: ITableView | undefined = this.tableViewsList.find(v => v.viewAlias === tableViewAlias);\r\n if(!viewToLoad){\r\n this.notification.showToast(\"error\",\"VIEW TO LOAD DOESN'T EXIST\",\"The view to load doesn't exist\");\r\n return;\r\n }\r\n let viewData: ITableViewData = viewToLoad.viewData;\r\n this.columnsSelected = viewData.columnsShown\r\n .map(data => this.columns.find((col: any) => col.field === data.field))\r\n .filter((col): col is IColumnMetadata => col !== undefined)\r\n .filter(col => !this.columnsCantBeHidden.includes(col));\r\n this.columnsToShow = this.tableService.orderColumnsWithFrozens(this.columnsCantBeHidden.concat(this.columnsSelected));\r\n this.currentPage = viewData.currentPage;\r\n this.currentRowsPerPage = viewData.currentRowsPerPage;\r\n this.globalSearchText = viewData.globalSearchText;\r\n this.tableLazyLoadEventInformation.multiSortMeta = [...(viewData.multiSortMeta ?? [])];\r\n this.dt.multiSortMeta = [...(viewData.multiSortMeta ?? [])];\r\n this.isActive = false;\r\n this.dt.sortMultiple();\r\n this.isActive = true;\r\n this.tableLazyLoadEventInformation.filters = {...viewData.filters};\r\n this.dt.filters = {...viewData.filters};\r\n this.dt.tableWidthState = viewData.tableWidth;\r\n this.dt.columnWidthsState = viewData.columnsWidth;\r\n this.tableViewCurrentSelectedAlias = tableViewAlias;\r\n this.notification.showToast(\"info\",\"TABLE VIEW RESTORED\",`The table view '${this.tableViewCurrentSelectedAlias}' has been restored.`);\r\n this.viewsModalShow = false;\r\n this.fetchTableData(this.tableLazyLoadEventInformation);\r\n }\r\n\r\n viewCreate(viewAlias: string){\r\n let viewData: ITableViewData = this.tableService.viewGenerateData(this.dt, this.globalSearchText, this.currentPage, this.currentRowsPerPage, this.modifyFiltersWithoutGlobalAndSelectedRows.bind(this))\r\n let newView: ITableView = {\r\n lastActive: false,\r\n viewAlias: viewAlias,\r\n viewData: viewData\r\n }\r\n this.tableViewsList.push(newView);\r\n this.tableService.sortViews(this.tableViewsList);\r\n this.tableViews_menuItems=[...this.tableService.updateViewsMenuItems(this.tableViewsList)];\r\n this.viewsSave(0);\r\n }\r\n\r\n viewDelete(viewAlias: string){\r\n const index = this.tableViewsList.findIndex(v => v.viewAlias === viewAlias);\r\n if (index === -1) {\r\n this.notification.showToast(\"error\",\"Table view delete failed\", `The table view could not be deleted since it was not found.`);\r\n }\r\n this.tableViewsList.splice(index, 1);\r\n this.tableViews_menuItems=[...this.tableService.updateViewsMenuItems(this.tableViewsList)];\r\n this.viewsSave(3);\r\n }\r\n\r\n viewEditAlias(event: { viewAliasOld: string; viewAliasNew: string }){\r\n const index = this.tableViewsList.findIndex(v => v.viewAlias === event.viewAliasOld);\r\n if (index === -1) {\r\n this.notification.showToast(\"error\",\"Table view alias change failed\", `The table view alias could not be changed since it was not found.`);\r\n }\r\n this.tableViewsList[index].viewAlias = event.viewAliasNew;\r\n this.tableService.sortViews(this.tableViewsList);\r\n this.tableViews_menuItems=[...this.tableService.updateViewsMenuItems(this.tableViewsList)];\r\n this.viewsSave(2);\r\n }\r\n\r\n viewUpdateData(viewAlias: string){\r\n const index = this.tableViewsList.findIndex(v => v.viewAlias === viewAlias);\r\n if (index === -1) {\r\n this.notification.showToast(\"error\",\"Table view not found\", `The table view to update data from was not found.`);\r\n }\r\n let viewData: ITableViewData = this.tableService.viewGenerateData(this.dt, this.globalSearchText, this.currentPage, this.currentRowsPerPage, this.modifyFiltersWithoutGlobalAndSelectedRows.bind(this))\r\n this.tableViewsList[index].viewData = viewData;\r\n this.viewsSave(1);\r\n }\r\n\r\n viewsSave(endMessage: number): void{\r\n let tableView: string = JSON.stringify(this.tableViewsList);\r\n switch(this.tableViewSaveAs){\r\n case TableViewSaveMode.sessionStorage:\r\n sessionStorage.setItem(this.tableViewSaveKey, tableView);\r\n break;\r\n case TableViewSaveMode.localStorage:\r\n localStorage.setItem(this.tableViewSaveKey, tableView);\r\n break;\r\n case TableViewSaveMode.databaseStorage:\r\n const saveObsv = this.tableService.viewsSaveToDatabase(this.tableViewsList, this.viewsSaveSourceURL, this.tableViewSaveKey);\r\n saveObsv.subscribe({\r\n next: (response: HttpResponse<any>) => {\r\n this.viewsSaveEnd(endMessage);\r\n },\r\n error: (err) => this.tableService.handleTableError(err, 'Views save error')\r\n });\r\n return;\r\n default:\r\n this.notification.showToast(\"error\",\"NOT IMPLEMENTED\", \"This type os save view has not been implemented yet.\");\r\n return;\r\n }\r\n this.viewsSaveEnd(endMessage);\r\n }\r\n viewsSaveEnd(endMessage: number){\r\n switch(endMessage){\r\n case 0: // NEW VIEW\r\n this.notification.showToast(\"info\",\"Table view created\", `New table view has been created.`);\r\n this.viewsModalShow = false;\r\n break;\r\n case 1: // UPDATE VIEW\r\n this.notification.showToast(\"info\",\"Table view data updated\", `The table view data was updated.`);\r\n break;\r\n case 2: // UPDATE ALIAS\r\n this.notification.showToast(\"info\",\"Table view name updated\", `The table view alias was updated.`);\r\n break;\r\n case 3: // DELETE VIEW\r\n this.notification.showToast(\"info\",\"Table view delete\", `The table view was deleted.`);\r\n break;\r\n }\r\n }\r\n\r\n fetchTableData(event: TableLazyLoadEvent): void {\r\n if(!this.isActive){\r\n return;\r\n }\r\n if (!this.initialConfigurationFetched) {\r\n return;\r\n }\r\n this.tableLazyLoadEventInformation = event; // Store the event information for later use\r\n if (event.rows != null && event.rows !== undefined) {\r\n this.currentRowsPerPage = event.rows;\r\n }\r\n if (event.first != null && event.first !== undefined && event.rows != null && event.rows !== undefined) {\r\n this.currentPage = event.first / event.rows;\r\n }\r\n let filtersWithoutGlobalAndSelectedRows = this.modifyFiltersWithoutGlobalAndSelectedRows(this.tableLazyLoadEventInformation.filters); // Create filters excluding the global filter\r\n filtersWithoutGlobalAndSelectedRows=this.revertDateTimeZoneFilters(filtersWithoutGlobalAndSelectedRows);\r\n const requestData: ITableQueryRequest = {\r\n page: this.currentPage, // Set the current page number\r\n pageSize: this.currentRowsPerPage, // Set the number of rows per page\r\n sort: this.tableLazyLoadEventInformation.multiSortMeta, // Set the sorting information\r\n filter: filtersWithoutGlobalAndSelectedRows, // Set the filters excluding the global filter\r\n globalFilter: this.globalSearchText, // Set the global filter text\r\n columns: this.columnsToShow.map(col => col.field), // Set the columns to show\r\n dateFormat: this.dateFormat,\r\n dateTimezone: this.dateTimezone,\r\n dateCulture: this.dateCulture\r\n };\r\n this.tableService.fetchTableData(this.urlDataSource, requestData).subscribe({\r\n next: (response: HttpResponse<ITablePagedResponse>) => this.handleTableDataResponse(response.body!),\r\n error: (err) => this.tableService.handleTableError(err, 'Columns Error')\r\n });\r\n }\r\n\r\n private modifyFiltersWithoutGlobalAndSelectedRows(filters: any, overrideOption: number = -1): any {\r\n if (this.globalSearchText === \"\") { // If the global search text is an empty string\r\n this.globalSearchText = null; // Set it to null\r\n }\r\n let filtersWithoutGlobalAndSelectedRows = { ...filters }; // Create a copy of filters to delete the global.\r\n if (filtersWithoutGlobalAndSelectedRows.hasOwnProperty('global')) { // If there is an entry with the global filter\r\n delete filtersWithoutGlobalAndSelectedRows['global']; // Remove the global filter\r\n }\r\n this.selectorRowFilterBuilder(filtersWithoutGlobalAndSelectedRows, overrideOption);\r\n return filtersWithoutGlobalAndSelectedRows; // Return the filters without global array\r\n }\r\n\r\n private selectorRowFilterBuilder(filtersWithoutGlobalAndSelectedRows: any, overrideOption: number = -1){\r\n if (filtersWithoutGlobalAndSelectedRows.hasOwnProperty('selector')) {\r\n const selectorFilter = filtersWithoutGlobalAndSelectedRows['selector'][0];\r\n let filterType: boolean | null = null;\r\n if(overrideOption<0 || overrideOption>2){\r\n filterType = selectorFilter.value;\r\n } else {\r\n switch (overrideOption){\r\n case 0: // All\r\n filterType = null;\r\n break;\r\n case 1: // Only selected rows\r\n filterType = true;\r\n break;\r\n case 2: // Only NOT selected\r\n filterType = false;\r\n break;\r\n }\r\n }\r\n if (!filtersWithoutGlobalAndSelectedRows.hasOwnProperty('rowID')) {\r\n filtersWithoutGlobalAndSelectedRows['rowID'] = [\r\n {\r\n \"value\": null,\r\n \"matchMode\": \"in\",\r\n \"operator\": \"or\"\r\n }\r\n ];\r\n }\r\n const idFilter = filtersWithoutGlobalAndSelectedRows['rowID'][0];\r\n if (filterType === true) {\r\n idFilter.matchMode = \"in\";\r\n idFilter.value = this.selectedRowsCheckbox;\r\n } else if (filterType === false) {\r\n idFilter.operator = \"and\"\r\n idFilter.matchMode = \"notIn\";\r\n idFilter.value = this.selectedRowsCheckbox;\r\n } else if (filterType === null) {\r\n idFilter.value = null;\r\n idFilter.matchMode = \"in\";\r\n }\r\n }\r\n }\r\n\r\n revertDateTimeZoneFilters(inputFilter: any){\r\n this.columnsToShow.forEach((column) => {\r\n if (column.dataType === DataType.Date) { // If its date type\r\n if (inputFilter.hasOwnProperty(column.field)) {\r\n const originalDate = inputFilter[column.field][0].value;\r\n if(originalDate !== null && originalDate instanceof Date){\r\n const utcDate = new Date(Date.UTC(originalDate.getFullYear(), originalDate.getMonth(), originalDate.getDate()))\r\n inputFilter[column.field][0].value=utcDate;\r\n }\r\n }\r\n }\r\n });\r\n return inputFilter;\r\n }\r\n\r\n handleTableDataResponse(body: ITablePagedResponse): void{\r\n this.data = body.data; // Update the table data\r\n this.totalRecords = body.totalRecords; // Update the total number of records\r\n this.totalRecordsNotFiltered = body.totalRecordsNotFiltered; // Update the total records not filtered\r\n this.currentPage = body.page; // Update the current page\r\n }\r\n\r\n clearFilters(dt: Table, force: boolean = false, onlyGlobalFilter: boolean = false): void{\r\n let hasToClear = this.hasToClearFilters(dt, this.globalSearchText, force);\r\n if(hasToClear){\r\n if(!onlyGlobalFilter){\r\n this.predifinedFiltersSelectedValuesCollection = {};\r\n for (const key in dt.filters) {\r\n if (dt.filters.hasOwnProperty(key)) {\r\n const filters = dt.filters[key];\r\n if (Array.isArray(filters)) {\r\n filters.forEach(filter => {\r\n filter.value = null; // Establecer el valor a null\r\n });\r\n } else {\r\n filters.value = null; // Establecer el valor a null\r\n }\r\n }\r\n }\r\n let filters = {...this.dt.filters};\r\n dt.columns?.forEach(\r\n element => {\r\n dt.filter(null, element.field, element.matchMode)\r\n }\r\n );\r\n this.dt.filters = filters;\r\n }\r\n this.globalSearchText = null;\r\n dt.filterGlobal('','');\r\n }\r\n }\r\n\r\n clearSorts(dt: Table, force: boolean = false): void{\r\n let hasToClear = this.hasToClearSorts(dt, force);\r\n if(hasToClear){\r\n dt.multiSortMeta = [];\r\n dt.sortMultiple();\r\n }\r\n }\r\n hasToClearSorts(dt: Table, force: boolean = false): boolean{\r\n let hasToClear: boolean = false;\r\n const hasSorts = (dt.multiSortMeta && dt.multiSortMeta.length > 0);\r\n if(force || hasSorts){\r\n hasToClear = true;\r\n }\r\n return hasToClear;\r\n }\r\n hasToClearFilters(dt: Table, globalSearchText: string|null, force:boolean = false): boolean{\r\n let hasToClear: boolean = false;\r\n const filtersWithoutGlobalAndSelectedRows = this.modifyFiltersWithoutGlobalAndSelectedRows(dt.filters)\r\n const hasFilters = this.hasFilters(filtersWithoutGlobalAndSelectedRows);\r\n const hasGlobalFilter = (globalSearchText && globalSearchText.trim() !== \"\");\r\n if(force || hasFilters || hasGlobalFilter){\r\n hasToClear = true;\r\n }\r\n return hasToClear;\r\n }\r\n\r\n /**\r\n * Determines whether there are active filters based on the provided filter rules.\r\n *\r\n * @param {any} filterRules An object representing filter rules for each column.\r\n * The keys are column names, and the values are arrays of filter rules.\r\n * Each filter rule has the following properties:\r\n * - `field`: The field or property name of the column.\r\n * - `value`: The filter value entered by the user.\r\n * - Other properties depending on the type of filter (e.g., `matchMode` for string filters).\r\n * @returns {boolean} `true` if at least one active filter is found, otherwise `false`.\r\n */\r\n private hasFilters(filterRules: any): boolean {\r\n for (const columnName of Object.keys(filterRules)) { // Iterate over each column name in the filter rules\r\n const columnFilters = filterRules[columnName]; // Get the filter rules for the current column\r\n for (const filterRule of columnFilters) { // Iterate over each filter rule for the current column\r\n if (filterRule.value !== null && filterRule.value !== \"\") { // Check if the filter value is not null or an empty string\r\n return true; // At least one active filter found\r\n }\r\n }\r\n }\r\n return false; // No active filters found\r\n }\r\n\r\n getColumnStyle(col: any, headerCols: boolean = false): Record<string, string> {\r\n return this.tableService.getColumnStyle(col, headerCols);\r\n }\r\n\r\n getPredifinedFilterValues(columnKeyName: string): IPredifinedFilter[] {\r\n return this.predifinedFiltersCollection[columnKeyName] || []; // Return the predefined filter values or an empty array if the option name does not exist\r\n }\r\n\r\n getFrozenColumnAlignAsText(frozenColumnAlign: FrozenColumnAlign): string {\r\n return frozenColumnAlignAsText(frozenColumnAlign);\r\n }\r\n\r\n getDataTypeAsText(dataType: DataType): string {\r\n return dataTypeAsText(dataType);\r\n }\r\n\r\n /**\r\n * Updates the filters of a PrimeNG data table based on predefined filter changes.\r\n *\r\n * @param {string} filterName - The name of the filter to be updated.\r\n * @param {IPrimengPredifinedFilter[]} selectedValues - An array of selected predefined filter values.\r\n */\r\n onPredifinedFilterChange(filterName: string, selectedValues: IPredifinedFilter[]): void {\r\n const filters = { ...this.dt.filters }; // Create a shallow copy of the current filters to avoid mutating the original filters directly\r\n if (Array.isArray(filters[filterName])) { // Check if the filter for the given filterName is an array\r\n (filters[filterName] as FilterMetadata[]).forEach(criteria => { // If it is an array, iterate over each filter criteria\r\n criteria.value = selectedValues.map(value => value.value); // Update the value of each criteria with the values from selectedValues\r\n });\r\n } else if (filters[filterName]) { // Check if the filter for the given filterName exists and is not an array\r\n const criteria = filters[filterName] as FilterMetadata; // Cast the filter criteria to FilterMetadata\r\n criteria.value = selectedValues.map(value => value.value); // Update the value of the criteria with the values from selectedValues\r\n }\r\n this.dt.filters = filters; // Update the data table's filters with the modified filters object\r\n this.dt._filter(); // Trigger the filtering operation on the data table to apply the new filters\r\n }\r\n\r\n /**\r\n * Retrieves the number of values selected for a predefined filter.\r\n *\r\n * This function checks the collection of selected values for a specified column key name and returns a string\r\n * indicating the number of selected items along with a predefined text.\r\n *\r\n * @param {string} columnKeyName - The key name of the column for which to retrieve the number of selected values.\r\n * @returns {string} A string indicating the number of selected values for the specified column.\r\n */\r\n predifinedFiltersSelectedValuesText(columnKeyName: string): string {\r\n let numbItemsSelected = 0; // Initialize the count of selected items to zero\r\n if (this.predifinedFiltersSelectedValuesCollection[columnKeyName]) { // Check if there are selected values for the specified column key\r\n numbItemsSelected = this.predifinedFiltersSelectedValuesCollection[columnKeyName].length; // Get the number of selected items\r\n }\r\n return `${numbItemsSelected} ${this.predifinedFiltersCollectionSelectedValuesText}`; // Return the number of selected items concatenated with the predefined text\r\n }\r\n\r\n handleButtonsClick(action: (rowData: any) => void, rowData: any = null): void {\r\n this.tableService.handleButtonsClick(action, rowData);\r\n }\r\n\r\n /**\r\n * Checks if the provided column metadata matches a specific style of the predefined filters \r\n * that need to be applied to an item on a row.\r\n *\r\n * @param {IprimengColumnsMetadata} colMetadata - The metadata of the column being checked.\r\n * @param {any} value - The value to be matched against the predefined filter values.\r\n * @returns {any} The matching predefined filter value if found, otherwise null.\r\n */\r\n getPredfinedFilterMatch(colMetadata: IColumnMetadata, value: any): any {\r\n if (colMetadata.filterPredifinedValuesName && colMetadata.filterPredifinedValuesName.length > 0) { // Check if the column uses predefined filter values\r\n const options = this.getPredifinedFilterValues(colMetadata.filterPredifinedValuesName); // Get the predefined filter values based on the name\r\n return options.find(option => option.value === value); // Return the matching option if found\r\n }\r\n return null; // Return null if the column does not use predefined filter values\r\n }\r\n\r\n copyToClipboardStart(event: MouseEvent) {\r\n if(this.copyCellDataToClipboardTimeSecs>0) {\r\n const cellContent = (event.target as HTMLElement).innerText;\r\n this.copyCellDataTimer = setTimeout(() => {\r\n navigator.clipboard.writeText(cellContent).then(() => {\r\n this.notification.clearToasts();\r\n this.notification.showToast(\"info\", \"CELL CONTENT COPIED\", \"The cell content has been copied to your clipboard.\");\r\n }).catch(err => {\r\n this.notification.clearToasts();\r\n this.notification.showToast(\"error\", \"CELL CONTENT COPIED\", `The cell content failed to copy to your clipboard with error: ${err}`);\r\n });\r\n }, this.copyCellDataToClipboardTimeSecs*1000 );\r\n }\r\n }\r\n\r\n copyToClipboardCancel(){\r\n if(this.copyCellDataToClipboardTimeSecs>0) {\r\n clearTimeout(this.copyCellDataTimer);\r\n }\r\n }\r\n\r\n getDataAlignHorizontalAsText(dataAlignHorizontal: DataAlignHorizontal){\r\n return dataAlignHorizontalAsText(dataAlignHorizontal);\r\n }\r\n getDataAlignVerticalAsText(dataAlignVertical: DataAlignVertical){\r\n return dataAlignVerticalAsText(dataAlignVertical);\r\n }\r\n\r\n isRowCheckboxSelected(rowID: any): boolean {\r\n return this.selectedRowsCheckbox.includes(rowID);\r\n }\r\n\r\n onRowChekboxChange(event: any, rowID: any): void {\r\n if (event.checked) { // Add the selected item\r\n this.selectedRowsCheckbox.push(rowID);\r\n } else { // Remove the selected item\r\n this.selectedRowsCheckbox = this.selectedRowsCheckbox.filter(selectedId => selectedId !== rowID);\r\n }\r\n this.onRowCheckboxChange.emit({\r\n rowID: rowID,\r\n selected: event.checked\r\n });\r\n }\r\n rowSelect(event: TableRowSelectEvent<any>): void{\r\n this.onRowSelect.emit({\r\n rowID: event.data.rowID,\r\n rowData: event.data\r\n });\r\n }\r\n rowUnselect(event: TableRowUnSelectEvent<any>): void{\r\n this.onRowUnselect.emit({\r\n rowID: event.data.rowID,\r\n rowData: event.data\r\n });\r\n }\r\n pageChange(event: TablePageEvent): void {\r\n this.currentPage = event.rows ? event.first / event.rows : 0;\r\n this.currentRowsPerPage = event.rows ? event.rows : 0;\r\n }\r\n\r\n columnSelectorShow(){\r\n let tempData = this.columns.map(column => {\r\n const isSelected = this.columnsSelected.some(selectedColumn => selectedColumn.field === column.field) || this.columnsCantBeHidden.some(selectedColumn => selectedColumn.field === column.field);\r\n const isSelectDisabled = this.columnsCantBeHidden.some(selectedColumn => selectedColumn.field === column.field);\r\n return {\r\n field: column.field,\r\n header: column.header,\r\n selected: isSelected,\r\n selectDisabled: isSelectDisabled,\r\n cellOverflowBehaviour: column.cellOverflowBehaviour,\r\n cellOverflowBehaviourDisabled: !column.cellOverflowBehaviourAllowUserEdit,\r\n dataAlignHorizontal: column.dataAlignHorizontal,\r\n dataAlignHorizontalDisabled: !column.dataAlignHorizontalAllowUserEdit,\r\n dataAlignVertical: column.dataAlignVertical,\r\n dataAlignVerticalDisabled: !column.dataAlignVerticalAllowUserEdit\r\n };\r\n });\r\n tempData.slice().sort((a: any, b: any) => { // Sort selectable columns by header\r\n const fieldA = a.header.toUpperCase();\r\n const fieldB = b.header.toUpperCase();\r\n return fieldA.localeCompare(fieldB);\r\n });\r\n this.columnModalData = [...tempData];\r\n this.filteredColumnData = this.columnModalData;\r\n this.showColumnSelector=true;\r\n }\r\n\r\n applyColumnModalChanges(selectedColumns: IColumnMetadata[]) {\r\n const existingColumns = this.dt.columns!;\r\n const columnsToKeep = new Set<string>();\r\n\r\n this.columnsCantBeHidden.forEach(col => columnsToKeep.add(col.field));\r\n selectedColumns.forEach(col => columnsToKeep.add(col.field));\r\n\r\n const finalColumns: IColumnMetadata[] = [];\r\n existingColumns.forEach(col => {\r\n if (columnsToKeep.has(col.field)) {\r\n finalColumns.push(col);\r\n }\r\n });\r\n\r\n selectedColumns.forEach(col => {\r\n const matchingColumn = this.columns.find(c => c.field === col.field);\r\n if (matchingColumn && !finalColumns.find(c => c.field === matchingColumn.field)) {\r\n finalColumns.push(matchingColumn);\r\n }\r\n });\r\n\r\n let prevColsToShow = this.columnsToShow;\r\n this.columnsToShow = this.tableService.orderColumnsWithFrozens(finalColumns);\r\n\r\n let sameColumnsAsBefore =\r\n prevColsToShow.length === this.columnsToShow.length &&\r\n prevColsToShow.every((prevCol, index) => prevCol.field === this.columnsToShow[index].field);\r\n\r\n this.columnsSelected = this.columnsToShow.filter(\r\n column => !this.columnsCantBeHidden.some(nonSelectable => nonSelectable.field === column.field)\r\n );\r\n\r\n this.updateColumnsSpecialProperties(this.columnModalData);\r\n\r\n if (!sameColumnsAsBefore) {\r\n this.isActive = false;\r\n this.clearSorts(this.dt, true);\r\n setTimeout(() => {\r\n this.isActive = true;\r\n this.clearSorts(this.dt, true);\r\n }, 1);\r\n }\r\n }\r\n\r\n private updateColumnsSpecialProperties(columnsSource: any[]){\r\n const allColumns = [this.columns, this.columnsToShow, this.columnsSelected, this.columnsCantBeHidden];\r\n const columnModalDataMap = new Map(columnsSource.map((item: any) => [item.field, { \r\n cellOverflowBehaviour: item.cellOverflowBehaviour, \r\n dataAlignHorizontal: item.dataAlignHorizontal,\r\n dataAlignVertical: item.dataAlignVertical,\r\n width: item.width\r\n }]));\r\n const updatedFields = new Set(); // To track updated fields\r\n allColumns.forEach((columnList) => {\r\n columnList.forEach((col: any) => {\r\n if (columnModalDataMap.has(col.field) && !updatedFields.has(col.field)) {\r\n const columnData = columnModalDataMap.get(col.field);\r\n if (columnData) {\r\n col.cellOverflowBehaviour = columnData.cellOverflowBehaviour;\r\n col.dataAlignHorizontal = columnData.dataAlignHorizontal;\r\n col.dataAlignVertical = columnData.dataAlignVertical;\r\n col.width = columnData.width;\r\n updatedFields.add(col.field);\r\n }\r\n }\r\n });\r\n });\r\n }\r\n\r\n openExcelExport(){\r\n this.excelReportTitle = \r\n (!this.excelReportTitleDefault || this.excelReportTitleDefault.trim().length === 0) && !this.excelReportTitleAllowUserEdit \r\n ? 'Report' \r\n : this.excelReportTitleDefault!;\r\n this.showExportModal=true;\r\n }\r\n generateExcelReport(event: any){\r\n let filtersWithoutGlobalAndSelectedRows = this.modifyFiltersWithoutGlobalAndSelectedRows(this.tableLazyLoadEventInformation.filters, event.selectedRows); // Create filters excluding the global filter\r\n filtersWithoutGlobalAndSelectedRows=this.revertDateTimeZoneFilters(filtersWithoutGlobalAndSelectedRows);\r\n const filtersMustBeApplied: boolean = (event.selectedRows === 1 || event.selectedRows === 2) \r\n ? true \r\n : event.applyFilters;\r\n const requestData: IExcelExportRequest = {\r\n page: this.currentPage, // Set the current page number\r\n pageSize: this.currentRowsPerPage, // Set the number of rows per page\r\n sort: this.tableLazyLoadEventInformation.multiSortMeta, // Set the sorting information\r\n filter: filtersWithoutGlobalAndSelectedRows, // Set the filters excluding the global filter\r\n globalFilter: this.globalSearchText, // Set the global filter text\r\n columns: this.columnsToShow.map(col => col.field), // Set the columns to show\r\n dateFormat: this.dateFormat,\r\n dateTimezone: this.dateTimezone,\r\n dateCulture: this.dateCulture,\r\n allColumns: event.allColumns,\r\n applyFilters: filtersMustBeApplied,\r\n applySorts: event.applySorts,\r\n filename: event.filename\r\n };\r\n this.tableService.fetchExcelReport(this.urlExcelReport!, requestData).subscribe({\r\n next: (response: HttpResponse<Blob>) => {\r\n this.tableService.downloadFile(response.body!, event.filename, 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet');\r\n this.showExportModal=false;\r\n },\r\n error: (err) => this.tableService.handleTableError(err, 'Excel export error')\r\n });\r\n }\r\n}","<div #tableContainer>\r\n <p-table #dt\r\n size=\"small\" showGridlines stripedRows \r\n sortMode=\"multiple\"\r\n [resizableColumns]=\"true\" columnResizeMode=\"expand\"\r\n [reorderableColumns]=\"true\"\r\n [scrollable]=\"true\" [scrollHeight]=\"computeScrollHeight ? scrollHeight : ''\"\r\n [columns]=\"columnsToShow\" [value]=\"data\" dataKey=\"rowID\" \r\n [paginator]=\"true\" [first]=\"currentPage * currentRowsPerPage\" [rows]=\"currentRowsPerPage\" [totalRecords]=\"totalRecords\"\r\n [rowsPerPageOptions]=\"allowedRowsPerPage\" [showCurrentPageReport]=\"false\" (onPage)=\"pageChange($event)\"\r\n [metaKeySelection]=\"true\" selectionMode=\"single\" [(selection)]=\"rowSelection\" (onRowSelect)=\"rowSelect($event)\" (onRowUnselect)=\"rowUnselect($event)\"\r\n [lazy]=\"true\" (onLazyLoad)=\"fetchTableData($event)\">\r\n\r\n <!--TEMPLATE FOR THE ACTIONS HEADER COLUMN-->\r\n <ng-template #actionColumnHeaderTemplate>\r\n @if (rowActionButtons.length > 0) {\r\n <th [ngStyle]=\"{'max-width': actionsColumnWidth + 'px','min-width': actionsColumnWidth + 'px','width': actionsColumnWidth + 'px'}\"\r\n pResizableColumn [pResizableColumnDisabled]=\"!actionsColumnResizable\" pFrozenColumn [frozen]=\"actionsColumnFrozen\"\r\n [alignFrozen]=\"getFrozenColumnAlignAsText(actionsColumnAligmentRight ? FrozenColumnAlign.Right : FrozenColumnAlign.Left)\" id=\"actions-header\"\r\n [attr.scope]=\"'col'\" style=\"text-align: center;\">\r\n {{ actionColumnName }}\r\n </th>\r\n }\r\n </ng-template>\r\n\r\n <!--TEMPLATE FOR THE ACTIONS ROW COLUMN-->\r\n <ng-template #actionColumnTemplate let-rowData=\"rowData\">\r\n @if (rowActionButtons.length > 0) {\r\n <td \r\n [ngStyle]=\"{'max-width': actionsColumnWidth + 'px','min-width': actionsColumnWidth + 'px','width': actionsColumnWidth + 'px'}\"\r\n style=\"text-align: center; vertical-align: middle;\" pFrozenColumn [frozen]=\"actionsColumnFrozen\"\r\n [alignFrozen]=\"getFrozenColumnAlignAsText(actionsColumnAligmentRight ? FrozenColumnAlign.Right : FrozenColumnAlign.Left)\">\r\n @for (button of rowActionButtons; track button; let last = $last) {\r\n <ecs-table-button [button]=\"button\" [rowData]=\"rowData\" [isActionButton]=\"true\" [isLastActionButton]=\"last\" (clicked)=\"handleButtonsClick($event, rowData)\"/>\r\n }\r\n </td>\r\n }\r\n </ng-template>\r\n\r\n <!-- TEMPLATE FOR THE ROW CHECKBOX SELECTOR HEADER COLUMN -->\r\n <ng-template #rowSelectorColumnHeaderTemplate>\r\n <th \r\n [ngStyle]=\"{'max-width': rowSelectorColumnWidth + 'px','min-width': rowSelectorColumnWidth + 'px','width': rowSelectorColumnWidth + 'px'}\"\r\n id=\"rowSelector-header\" [attr.scope]=\"'col'\" pResizableColumn [pResizableColumnDisabled]=\"!rowselectorColumnResizable\" pFrozenColumn \r\n [frozen]=\"rowSelectorColumnFrozen\" [alignFrozen]=\"getFrozenColumnAlignAsText(rowSelectorColumnAligmentRight ? FrozenColumnAlign.Right : FrozenColumnAlign.Left)\"\r\n style=\"text-align: center; vertical-align: middle;\">\r\n <div style=\"display: flex; justify-content: space-between; align-items: center;\">\r\n {{ rowSelectorColumName }}\r\n <p-columnFilter type=\"boolean\" field=\"selector\" display=\"menu\" [showButtons]=\"false\"/>\r\n </div>\r\n </th>\r\n </ng-template>\r\n\r\n <!--TEMPLATE FOR THE ROW CHECKBOX SELECTOR COLUMN-->\r\n <ng-template #rowSelectorColumnTemplate let-rowData=\"rowData\">\r\n <td \r\n [ngStyle]=\"{\r\n 'max-width': rowSelectorColumnWidth + 'px', \r\n 'min-width': rowSelectorColumnWidth + 'px', \r\n 'width': rowSelectorColumnWidth + 'px'\r\n }\"\r\n style=\"text-align: center; vertical-align: middle;\" pFrozenColumn [frozen]=\"rowSelectorColumnFrozen\" \r\n [alignFrozen]=\"getFrozenColumnAlignAsText(rowSelectorColumnAligmentRight ? FrozenColumnAlign.Right : FrozenColumnAlign.Left)\">\r\n <p-checkbox \r\n [binary]=\"true\"\r\n [ngModel]=\"isRowCheckboxSelected(rowData.rowID)\"\r\n (onChange)=\"onRowChekboxChange($event, rowData.rowID)\"/>\r\n </td>\r\n </ng-template>\r\n\r\n\r\n <!-- LOGIC FOR DRAWING TABLE ACTIONS ABOVE THE HEADER -->\r\n <ng-template #caption>\r\n <div #headerContainer style=\"display: flex; justify-content: space-between; align-items: center;\">\r\n <div style=\"display: flex; align-items: center; gap: 10px;\">\r\n <!--CHOOSE COLUMNS TO SHOW-->\r\n @if (columnEditorEnabled) {\r\n <p-button icon=\"pi pi-info\" (onClick)=\"columnSelectorShow()\" pTooltip=\"Modify columns\"\r\n [showDelay]=\"700\" tooltipPosition=\"top\" styleClass=\"p-button-icon-only\"/>\r\n }\r\n <!--CLEAR SORTS AND FILTERS-->\r\n @if (showClearSortAndFilters) {\r\n <p-button icon=\"pi pi-sort-alt-slash\" (onClick)=\"clearSorts(dt)\" [disabled]=\"!hasToClearSorts(dt)\"\r\n pTooltip=\"Clear sorts\" [showDelay]=\"700\" tooltipPosition=\"top\" styleClass=\"p-button-icon-only\"/>\r\n <p-button\r\n icon=\"pi pi-filter-slash\" (onClick)=\"clearFilters(dt)\" [disabled]=\"!hasToClearFilters(dt, globalSearchText)\"\r\n pTooltip=\"Clear filters\" [showDelay]=\"700\" tooltipPosition=\"top\" styleClass=\"p-button-icon-only\"/>\r\n }\r\n </div>\r\n\r\n <!--TABLE VIEWS-->\r\n @if(tableViewsEnabled()){\r\n <div style=\"display: flex; align-items: center; gap: 10px;\">\r\n <p-buttongroup>\r\n <p-button (click)=\"viewsModalShow=true;\" [label]=\"tableViewCurrentSelectedAlias ? tableViewCurrentSelectedAlias : '--- Select a view ---'\" class=\"viewButton\"/>\r\n <p-button icon=\"pi pi-refresh\" (click)=\"viewLoad(tableViewCurrentSelectedAlias!)\" [disabled]=\"!tableViewCurrentSelectedAlias\" pTooltip=\"Apply view again\" [showDelay]=\"700\" tooltipPosition=\"top\"/>\r\n <p-button icon=\"pi pi-eraser\" [disabled]=\"!tableViewCurrentSelectedAlias\" pTooltip=\"Reset table view\" [showDelay]=\"700\" tooltipPosition=\"top\"/><!--resetTableView()-->\r\n </p-buttongroup>\r\n </div>\r\n }\r\n\r\n <div style=\"display: flex; align-items: center; gap: 10px;\">\r\n <!--GLOBAL FILTER-->\r\n @if (globalSearchEnabled) {\r\n <p-iconField iconPosition=\"left\" class=\"ml-auto\" [ngClass]=\"{'p-input-icon-right': globalSearchText}\">\r\n <p-inputIcon>\r\n <i class=\"pi pi-search\"></i>\r\n </p-inputIcon>\r\n <input pInputText type=\"text\" \r\n (input)=\"dt.filterGlobal($any($event.target).value, 'contains')\" autocomplete=\"off\" \r\n [maxlength]=\"globalSearchMaxLength\" [placeholder]=\"globalSearchPlaceholder\" [(ngModel)]=\"globalSearchText\"\r\n style=\"width: 220px;\"/>\r\n <!-- Right icon (only if there is text) -->\r\n @if (globalSearchText) {\r\n <p-inputIcon position=\"right\">\r\n <i class=\"pi pi-times\" style=\"cursor: pointer;\" (click)=\"clearFilters(dt, true, true); $event.stopPropagation()\"></i>\r\n </p-inputIcon>\r\n }\r\n </p-iconField>\r\n }\r\n\r\n <!--EXPORT DATA-->\r\n @if (urlExcelReport && urlExcelReport.trim().length > 0) {\r\n <p-button icon=\"pi pi-file-excel\" (onClick)=\"openExcelExport()\"\r\n pTooltip=\"Export to Excel\" [showDelay]=\"700\" tooltipPosition=\"top\" styleClass=\"p-button-icon-only\"/>\r\n }\r\n\r\n <!--REFRESH DATA-->\r\n @if (showRefreshData) {\r\n <p-button icon=\"pi pi-refresh\" (onClick)=\"refreshData($event)\" pTooltip=\"Refresh data\" [showDelay]=\"700\"\r\n tooltipPosition=\"top\" styleClass=\"p-button-icon-only\"/>\r\n }\r\n \r\n <!-- HEADER ACTION BUTTONS -->\r\n @if (headerActionButtons.length > 0) {\r\n <td style=\"display: flex; justify-content: center; align-items: center;\">\r\n @for (button of headerActionButtons; track $index) {\r\n <ecs-table-button [button]=\"button\" [rowData]=\"null\" (clicked)=\"handleButtonsClick($event, null)\"/>\r\n }\r\n </td>\r\n }\r\n </div>\r\n </div>\r\n </ng-template>\r\n\r\n <!-- LOGIC FOR DRAWING TABLE HEADERS -->\r\n <ng-template #header let-columns>\r\n <tr>\r\n @if (!actionsColumnAligmentRight) {\r\n <ng-container *ngTemplateOutlet=\"actionColumnHeaderTemplate\"></ng-container>\r\n }\r\n @if (rowSelectorColumnActive && !rowSelectorColumnAligmentRight) {\r\n <ng-container [ngTemplateOutlet]=\"rowSelectorColumnHeaderTemplate\"></ng-container>\r\n }\r\n @for (col of columns; track col.header) {\r\n <th [ngStyle]=\"getColumnStyle(col, true)\"\r\n pResizableColumn [pResizableColumnDisabled]=\"!col.canBeResized ? true : false\"\r\n pReorderableColumn [pReorderableColumnDisabled]=\"!col.canBeReordered ? true : false\"\r\n pFrozenColumn [frozen]=\"col.frozenColumnAlign === FrozenColumnAlign.Left || col.frozenColumnAlign === FrozenColumnAlign.Right\" [alignFrozen]=\"getFrozenColumnAlignAsText(col.frozenColumnAlign)\"\r\n [pSortableColumn]=\"col.field\" [pSortableColumnDisabled]=\"!col.canBeSorted ? true : false\"\r\n style=\"text-align: center;\"\r\n [id]=\"col.field + '-header'\" [attr.scope]=\"'col'\">\r\n <div style=\"display: flex; justify-content: space-between; align-items: center; width: 100%;\">\r\n <div style=\"margin-right: 15px;\">\r\n <span>{{ col.header }}</span>\r\n </div>\r\n <div style=\"display: flex; align-items: center; gap: 5px;\">\r\n @if (col.canBeSorted) {\r\n <p-sortIcon [field]=\"col.field\"></p-sortIcon>\r\n }\r\n @if(col.canBeFiltered){\r\n @if (!col.filterPredifinedValuesName || col.filterPredifinedValuesName.length === 0) {\r\n <p-columnFilter [type]=\"getDataTypeAsText(col.dataType)\" [field]=\"col.field\" display=\"menu\" [showButtons]=\"false\"/>\r\n } @else {\r\n <p-columnFilter\r\n type=\"{{getDataTypeAsText(col.dataType)}}\" field=\"{{col.field}}\" display=\"menu\"\r\n [showButtons]=\"false\" matchMode=\"in\" operator=\"or\" [showMatchModes]=\"false\"\r\n [showOperator]=\"false\" [showAddButton]=\"false\" [showClearButton]=\"false\" [showApplyButton]=\"false\">\r\n <ng-template #filter>\r\n <p-multiSelect\r\n [style]=\"{ minWidth: '400px' }\" [(ngModel)]=\"predifinedFiltersSelectedValuesCollection[col.filterPredifinedValuesName]\"\r\n [options]=\"getPredifinedFilterValues(col.filterPredifinedValuesName)\" [placeholder]=\"predifinedFiltersNoSelectionPlaceholder\"\r\n (onChange)=\"onPredifinedFilterChange(col.field, $event.value)\" optionLabel=\"name\">\r\n <ng-template #selectedItems>\r\n @if (predifinedFiltersSelectedValuesCollection[col.filterPredifinedValuesName].length > 0) {\r\n <div style=\"display: flex; align-items: center; gap: 0.5rem;\">\r\n <div>\r\n {{predifinedFiltersSelectedValuesText(col.filterPredifinedValuesName)}}\r\n </div>\r\n </div>\r\n } @else {\r\n <div>{{ predifinedFiltersNoSelectionPlaceholder }}</div>\r\n }\r\n </ng-template>\r\n <ng-template let-option pTemplate=\"item\">\r\n <div style=\"display: inline-block; vertical-align: middle;\">\r\n <ecs-table-predifined-filters [option]=\"option\" [col]=\"col\"/>\r\n </div>\r\n </ng-template>\r\n </p-multiSelect>\r\n </ng-template>\r\n </p-columnFilter>\r\n }\r\n }\r\n @if (col.columnDescription && col.columnDescription.length > 0) {\r\n <i [pTooltip]=\"col.columnDescription\" tooltipPosition=\"top\" class=\"pi pi-info-circle\"></i>\r\n }\r\n </div>\r\n </div>\r\n </th>\r\n }\r\n @if (rowSelectorColumnActive && rowSelectorColumnAligmentRight) {\r\n <ng-container [ngTemplateOutlet]=\"rowSelectorColumnHeaderTemplate\"></ng-container>\r\n }\r\n @if (actionsColumnAligmentRight) {\r\n <ng-container *ngTemplateOutlet=\"actionColumnHeaderTemplate\"></ng-container>\r\n }\r\n </tr>\r\n </ng-template>\r\n\r\n <!-- LOGIC FOR DRAWING TABLE DATA WHEN THERE IS CONTENTS -->\r\n <ng-template #body let-rowData let-columns=\"columns\"> \r\n <tr [pSelectableRow]=\"rowData\">\r\n @if (!actionsColumnAligmentRight) {\r\n <ng-container *ngTemplateOutlet=\"actionColumnTemplate; context: { rowData: rowData }\"></ng-container>\r\n }\r\n @if (rowSelectorColumnActive && !rowSelectorColumnAligmentRight) {\r\n <ng-container [ngTemplateOutlet]=\"rowSelectorColumnTemplate\" [ngTemplateOutletContext]=\"{ rowData: rowData }\"></ng-container>\r\n }\r\n @for (col of columns; track col.field) {\r\n <td (mousedown)=\"col.dataType !== DataType.Boolean && copyToClipboardStart($event)\" (mouseup)=\"copyToClipboardCancel()\"\r\n [ngStyle]=\"getColumnStyle(col)\" pFrozenColumn [frozen]=\"col.frozenColumnAlign === FrozenColumnAlign.Left || col.frozenColumnAlign === FrozenColumnAlign.Right\" \r\n [alignFrozen]=\"getFrozenColumnAlignAsText(col.frozenColumnAlign)\" [style.text-align]=\"getDataAlignHorizontalAsText(col.dataAlignHorizontal)\" [style.vertical-align]=\"getDataAlignVerticalAsText(col.dataAlignVertical)\">\r\n <ecs-table-cell [col]=\"col\" [rowData]=\"rowData\" [globalSearchText]=\"globalSearchText\" \r\n [dateFormat]=\"dateFormat\" [dateTimezone]=\"dateTimezone\" [dateCulture]=\"dateCulture\"\r\n [predifinedFiltersCollection]=\"predifinedFiltersCollection\"/>\r\n </td>\r\n }\r\n @if (rowSelectorColumnActive && rowSelectorColumnAligmentRight) {\r\n <ng-container [ngTemplateOutlet]=\"rowSelectorColumnTemplate\" [ngTemplateOutletContext]=\"{ rowData: rowData }\"></ng-container>\r\n }\r\n @if (actionsColumnAligmentRight) {\r\n <ng-container *ngTemplateOutlet=\"actionColumnTemplate; context: { rowData: rowData }\"></ng-container>\r\n }\r\n </tr>\r\n </ng-template>\r\n\r\n <!-- LOGIC FOR DRAWING TABLE DATA WHEN THERE IS NO CONTENTS -->\r\n <ng-template #emptymessage>\r\n <tr>\r\n <td colspan=\"999\">{{noDataFoundText}}</td>\r\n </tr>\r\n </ng-template>\r\n\r\n <!-- SHOW CUSTOM RECORDS REPORT -->\r\n <ng-template #paginatorleft>\r\n <div #paginatorContainer>\r\n Showing {{totalRecords}} records of {{totalRecordsNotFiltered}} available records\r\n </div>\r\n </ng-template>\r\n </p-table>\r\n</div>\r\n<ecs-column-selector [visible]=\"showColumnSelector\" [columnModalData]=\"columnModalData\" [filteredColumnData]=\"filteredColumnData\" (visibleChange)=\"showColumnSelector=false\" (applyChanges)=\"applyColumnModalChanges($event)\"/>\r\n<ecs-export-excel [visible]=\"showExportModal\" [rowCheckboxSelectorActive]=\"rowSelectorColumnActive\" [excelReportTitle]=\"excelReportTitle\" [allowTitleUserEdit]=\"excelReportTitleAllowUserEdit\" (visibleChange)=\"showExportModal=false\" (exportToExcel)=\"generateExcelReport($event)\"/>\r\n<ecs-views-management [visible]=\"viewsModalShow\" [tableViews_menuItems]=\"tableViews_menuItems\" \r\n (onViewSelect)=\"viewLoad($event)\" (onViewCreate)=\"viewCreate($event)\" (onViewDelete)=\"viewDelete($event)\" (onViewEditAlias)=\"viewEditAlias($event)\" (onViewUpdateData)=\"viewUpdateData($event)\"\r\n (visibleChange)=\"viewsModalShow=false\"/>","/*\r\n * Public API Surface of ecs-primeng-table\r\n */\r\n// COMPONENTS AND DEPENDENCIES\r\nexport * from './lib/components/ecs-primeng-table/ecs-primeng-table';\r\nexport * from './lib/components/ecs-primeng-table/ecs-primeng-table.service';\r\n\r\n// ENUMS (GLOBAL)\r\nexport * from './lib/enums';\r\n\r\n// INTERFACES (GLOBAL)\r\nexport * from './lib/interfaces';\r\n\r\n// SERVICES (GLOBAL)\r\nexport * from './lib/services';","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i2","i1","i1.ECSPrimengTableHttpService","i1.ECSPrimengTableNotificationService","i1.ECSPrimengTableService","i4","i3","i7","i2.ExportExcelService","i5","i6","i9","i8","i2.ECSPrimengTableNotificationService","i11","i13"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;IAAY;AAAZ,CAAA,UAAY,qBAAqB,EAAA;AAC7B,IAAA,qBAAA,CAAA,qBAAA,CAAA,QAAA,CAAA,GAAA,CAAA,CAAA,GAAA,QAAM;AACN,IAAA,qBAAA,CAAA,qBAAA,CAAA,MAAA,CAAA,GAAA,CAAA,CAAA,GAAA,MAAI,CAAA;AACM;AACd,CAAC,EAJW,qBAAqB,KAArB,qBAAqB,GAIhC,EAAA,CAAA,CAAA;;ICJW;AAAZ,CAAA,UAAY,mBAAmB,EAAA;AAC3B,IAAA,mBAAA,CAAA,mBAAA,CAAA,MAAA,CAAA,GAAA,CAAA,CAAA,GAAA,MAAI;AACJ,IAAA,mBAAA,CAAA,mBAAA,CAAA,QAAA,CAAA,GAAA,CAAA,CAAA,GAAA,QAAM;AACN,IAAA,mBAAA,CAAA,mBAAA,CAAA,OAAA,CAAA,GAAA,CAAA,CAAA,GAAA,OAAK;AACT,CAAC,EAJW,mBAAmB,KAAnB,mBAAmB,GAI9B,EAAA,CAAA,CAAA;;ICJW;AAAZ,CAAA,UAAY,iBAAiB,EAAA;AACzB,IAAA,iBAAA,CAAA,iBAAA,CAAA,KAAA,CAAA,GAAA,CAAA,CAAA,GAAA,KAAG;AACH,IAAA,iBAAA,CAAA,iBAAA,CAAA,QAAA,CAAA,GAAA,CAAA,CAAA,GAAA,QAAM;AACN,IAAA,iBAAA,CAAA,iBAAA,CAAA,QAAA,CAAA,GAAA,CAAA,CAAA,GAAA,QAAM;AACV,CAAC,EAJW,iBAAiB,KAAjB,iBAAiB,GAI5B,EAAA,CAAA,CAAA;;ICJW;AAAZ,CAAA,UAAY,QAAQ,EAAA;AAChB,IAAA,QAAA,CAAA,QAAA,CAAA,MAAA,CAAA,GAAA,CAAA,CAAA,GAAA,MAAI;AACJ,IAAA,QAAA,CAAA,QAAA,CAAA,SAAA,CAAA,GAAA,CAAA,CAAA,GAAA,SAAO;AACP,IAAA,QAAA,CAAA,QAAA,CAAA,SAAA,CAAA,GAAA,CAAA,CAAA,GAAA,SAAO;AACP,IAAA,QAAA,CAAA,QAAA,CAAA,MAAA,CAAA,GAAA,CAAA,CAAA,GAAA,MAAI;AACR,CAAC,EALW,QAAQ,KAAR,QAAQ,GAKnB,EAAA,CAAA,CAAA;;ICLW;AAAZ,CAAA,UAAY,iBAAiB,EAAA;AACzB,IAAA,iBAAA,CAAA,iBAAA,CAAA,OAAA,CAAA,GAAA,CAAA,CAAA,GAAA,OAAK;AACL,IAAA,iBAAA,CAAA,iBAAA,CAAA,MAAA,CAAA,GAAA,CAAA,CAAA,GAAA,MAAI;AACJ,IAAA,iBAAA,CAAA,iBAAA,CAAA,OAAA,CAAA,GAAA,CAAA,CAAA,GAAA,OAAK;AACT,CAAC,EAJW,iBAAiB,KAAjB,iBAAiB,GAI5B,EAAA,CAAA,CAAA;;ICJW;AAAZ,CAAA,UAAY,iBAAiB,EAAA;AAC3B,IAAA,iBAAA,CAAA,iBAAA,CAAA,OAAA,CAAA,GAAA,CAAA,CAAA,GAAA,OAAK;AACL,IAAA,iBAAA,CAAA,iBAAA,CAAA,gBAAA,CAAA,GAAA,CAAA,CAAA,GAAA,gBAAc;AACd,IAAA,iBAAA,CAAA,iBAAA,CAAA,cAAA,CAAA,GAAA,CAAA,CAAA,GAAA,cAAY;AACZ,IAAA,iBAAA,CAAA,iBAAA,CAAA,iBAAA,CAAA,GAAA,CAAA,CAAA,GAAA,iBAAe;AACjB,CAAC,EALW,iBAAiB,KAAjB,iBAAiB,GAK5B,EAAA,CAAA,CAAA;;ACHK,SAAU,yBAAyB,CAAC,mBAAwC,EAAA;IAC9E,QAAQ,mBAAmB;QACvB,KAAK,mBAAmB,CAAC,IAAI;AACzB,YAAA,OAAO,MAAM;QACjB,KAAK,mBAAmB,CAAC,MAAM;AAC3B,YAAA,OAAO,QAAQ;QACnB,KAAK,mBAAmB,CAAC,KAAK;AAC1B,YAAA,OAAO,OAAO;AAClB,QAAA;AACI,YAAA,OAAO,QAAQ;;AAE3B;;ACXM,SAAU,uBAAuB,CAAC,iBAAoC,EAAA;IACxE,QAAQ,iBAAiB;QACrB,KAAK,iBAAiB,CAAC,GAAG;AACtB,YAAA,OAAO,KAAK;QAChB,KAAK,iBAAiB,CAAC,MAAM;AACzB,YAAA,OAAO,QAAQ;QACnB,KAAK,iBAAiB,CAAC,MAAM;AACzB,YAAA,OAAO,QAAQ;AACnB,QAAA;AACI,YAAA,OAAO,QAAQ;;AAE3B;;ACXM,SAAU,cAAc,CAAC,QAAkB,EAAA;IAC7C,QAAQ,QAAQ;QACZ,KAAK,QAAQ,CAAC,IAAI;AACd,YAAA,OAAO,MAAM;QACjB,KAAK,QAAQ,CAAC,OAAO;AACjB,YAAA,OAAO,SAAS;QACpB,KAAK,QAAQ,CAAC,OAAO;AACjB,YAAA,OAAO,SAAS;QACpB,KAAK,QAAQ,CAAC,IAAI;AACd,YAAA,OAAO,MAAM;AACjB,QAAA;AACI,YAAA,OAAO,MAAM;;AAEzB;;ACbM,SAAU,uBAAuB,CAAC,iBAAoC,EAAA;IACxE,QAAQ,iBAAiB;QACvB,KAAK,iBAAiB,CAAC,IAAI;AACzB,YAAA,OAAO,MAAM;QACf,KAAK,iBAAiB,CAAC,KAAK;AAC1B,YAAA,OAAO,OAAO;AAChB,QAAA;AACE,YAAA,OAAO,MAAM;;AAEnB;;ACPF;;;;;;;;;;;;;;;;;;;;AAoBG;SACa,aAAa,CAAC,SAAc,EAAE,WAA4B,EAAE,gBAA+B,EAAA;AAC3G,IAAA,IAAI,WAAW,CAAC,QAAQ,KAAK,QAAQ,CAAC,OAAO,IAAI,gBAAgB,KAAK,IAAI,EAAE;QACxE,MAAM,UAAU,GAAG,MAAM,CAAC,SAAS,CAAC,CAAC;AACrC,QAAA,IAAI,WAAW,CAAC,mBAAmB,EAAE;YACrC,MAAM,eAAe,GAAG,gBAAgB,CAAC,WAAW,EAAE,CAAC;YACvD,MAAM,kBAAkB,GAAG,UAAU,CAAC,WAAW,EAAE,CAAC;YACpD,IAAI,kBAAkB,CAAC,QAAQ,CAAC,eAAe,CAAC,EAAE;;gBAE9C,MAAM,UAAU,GAAG,kBAAkB,CAAC,OAAO,CAAC,eAAe,CAAC;AAC9D,gBAAA,MAAM,QAAQ,GAAG,UAAU,GAAG,gBAAgB,CAAC,MAAM;;gBAErD,MAAM,MAAM,GAAG,UAAU,CAAC,SAAS,CAAC,CAAC,EAAE,UAAU,CAAC;gBAClD,MAAM,SAAS,GAAG,UAAU,CAAC,SAAS,CAAC,UAAU,EAAE,QAAQ,CAAC;gBAC5D,MAAM,MAAM,GAAG,UAAU,CAAC,SAAS,CAAC,QAAQ,CAAC;gBAC7C,OAAO,CAAA,EAAG,MAAM,CAAkC,+BAAA,EAAA,SAAS,UAAU,MAAM,CAAA,CAAE,CAAC;;;;IAItF,OAAO,SAAS,CAAC;AACjB;;MC5Ba,sBAAsB,CAAA;AAEvB,IAAA,SAAA;AADV,IAAA,WAAA,CACU,SAAuB,EAAA;QAAvB,IAAS,CAAA,SAAA,GAAT,SAAS;;AAGV,IAAA,MAAM;AACN,IAAA,GAAG;AAEZ;;;;;;;;;;;;;;;;;AAiBG;AACH,IAAA,gBAAgB,CAAC,IAAU,EAAA;AACzB,QAAA,IAAI,SAAS,GAAG,CAAA,uBAAA,EAA0B,IAAI,CAAE,CAAA,CAAC;QACjD,OAAO,IAAI,CAAC,SAAS,CAAC,sBAAsB,CAAC,SAAS,CAAC,CAAC;;AAE1D,IAAA,aAAa,CAAC,MAAW,EAAA;QACzB,OAAO;AACL,YAAA,gBAAgB,EAAE,QAAQ;AAC1B,YAAA,cAAc,EAAE,QAAQ;AACxB,YAAA,OAAO,EAAE,MAAM,CAAC,SAAS,IAAI,EAAE;YAC/B,GAAG,MAAM,CAAC;SACX;;wGApCU,sBAAsB,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAA,EAAA,CAAA,YAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAAtB,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,sBAAsB,kIChBnC,8iCAgCC,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EDvBG,YAAY,EACZ,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,OAAA,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,cAAc,kMACd,SAAS,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,GAAA,EAAA,QAAA,EAAA,OAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,YAAA,EAAA,UAAA,EAAA,OAAA,EAAA,MAAA,EAAA,SAAA,CAAA,EAAA,CAAA,EAAA,CAAA;;4FAKA,sBAAsB,EAAA,UAAA,EAAA,CAAA;kBAVlC,SAAS;AACE,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,8BAA8B,EAC/B,OAAA,EAAA;wBACP,YAAY;wBACZ,cAAc;wBACd;AACD,qBAAA,EAAA,UAAA,EACW,IAAI,EAAA,QAAA,EAAA,8iCAAA,EAAA;iFAQP,MAAM,EAAA,CAAA;sBAAd;gBACQ,GAAG,EAAA,CAAA;sBAAX;;;MEJU,SAAS,CAAA;AAEV,IAAA,QAAA;AADV,IAAA,WAAA,CACU,QAAkB,EAAA;QAAlB,IAAQ,CAAA,QAAA,GAAR,QAAQ;;AAET,IAAA,GAAG;AACH,IAAA,OAAO;IACP,gBAAgB,GAAkB,IAAI;AACtC,IAAA,2BAA2B,GAA2C,EAAE,CAAC;IACzE,UAAU,GAAW,2BAA2B;IAChD,YAAY,GAAW,QAAQ;IAC/B,WAAW,GAAW,OAAO;IAEtC,QAAQ,GAAG,QAAQ;AAEnB,IAAA,IAAI,KAAK,GAAA;QACP,OAAO,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC;;AAGrC,IAAA,IAAI,WAAW,GAAA;AACb,QAAA,IAAI,IAAI,CAAC,GAAG,CAAC,6BAA6B,IAAI,IAAI,CAAC,GAAG,CAAC,6BAA6B,CAAC,MAAM,GAAG,CAAC,EAAE;YAC/F,OAAO,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,6BAA6B,CAAC;;QAE7D,OAAO,IAAI,CAAC,KAAK;;AAGnB,IAAA,4BAA4B,CAAC,mBAAwC,EAAA;QACjE,yBAAyB,CAAC,mBAAmB,CAAC;;AAElD,IAAA,0BAA0B,CAAC,iBAAoC,EAAA;QAC3D,uBAAuB,CAAC,iBAAiB,CAAC;;AAI9C;;;;;;;;;;;;;;AAcG;AACH,IAAA,UAAU,CAAC,KAAU,EAAA;AACnB,QAAA,IAAI,aAAa,GAAG,SAAS,CAAC;AAC9B,QAAA,IAAG,KAAK,EAAC;YACP,aAAa,GAAG,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,KAAK,EAAE,IAAI,CAAC,UAAU,EAAE,IAAI,CAAC,YAAY,EAAE,IAAI,CAAC,WAAW,CAAC,CAAC;;AAEvG,QAAA,OAAO,aAAa,IAAI,EAAE,CAAC;;AAG7B;;;;;;;AAOG;IACH,uBAAuB,CAAC,WAA4B,EAAE,KAAU,EAAA;AAC9D,QAAA,IAAI,WAAW,CAAC,0BAA0B,IAAI,WAAW,CAAC,0BAA0B,CAAC,MAAM,GAAG,CAAC,EAAE;AAC7F,YAAA,MAAM,OAAO,GAAG,IAAI,CAAC,yBAAyB,CAAC,WAAW,CAAC,0BAA0B,CAAC,CAAC;AACvF,YAAA,OAAO,OAAO,CAAC,IAAI,CAAC,MAAM,IAAI,MAAM,CAAC,KAAK,KAAK,KAAK,CAAC,CAAC;;QAE1D,OAAO,IAAI,CAAC;;AAEd,IAAA,yBAAyB,CAAC,aAAqB,EAAA;QAC7C,OAAO,IAAI,CAAC,2BAA2B,CAAC,aAAa,CAAC,IAAI,EAAE,CAAC;;AAG7D,IAAA,aAAa,CAAC,SAAc,EAAE,WAA4B,EAAE,gBAA+B,EAAA;QACvF,OAAO,aAAa,CAAC,SAAS,EAAE,WAAW,EAAE,gBAAgB,CAAC;;wGA5EzD,SAAS,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAAC,IAAA,CAAA,QAAA,EAAA,CAAA,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,4SClBtB,0jEAyDC,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,ED9CG,YAAY,EACZ,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,OAAA,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,OAAA,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,aAAa,sXACb,sBAAsB,EAAA,QAAA,EAAA,8BAAA,EAAA,MAAA,EAAA,CAAA,QAAA,EAAA,KAAA,CAAA,EAAA,CAAA,EAAA,CAAA;;4FAKb,SAAS,EAAA,UAAA,EAAA,CAAA;kBAVrB,SAAS;AACE,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,gBAAgB,EACjB,OAAA,EAAA;wBACP,YAAY;wBACZ,aAAa;wBACb;AACH,qBAAA,EAAA,UAAA,EACa,IAAI,EAAA,QAAA,EAAA,0jEAAA,EAAA;+EAOP,GAAG,EAAA,CAAA;sBAAX;gBACQ,OAAO,EAAA,CAAA;sBAAf;gBACQ,gBAAgB,EAAA,CAAA;sBAAxB;gBACQ,2BAA2B,EAAA,CAAA;sBAAnC;gBACQ,UAAU,EAAA,CAAA;sBAAlB;gBACQ,YAAY,EAAA,CAAA;sBAApB;gBACQ,WAAW,EAAA,CAAA;sBAAnB;;;MEvBmB,0BAA0B,CAAA;wGAA1B,0BAA0B,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA;AAA1B,IAAA,OAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,0BAA0B,cADtB,MAAM,EAAA,CAAA;;4FACV,0BAA0B,EAAA,UAAA,EAAA,CAAA;kBAD/C,UAAU;mBAAC,EAAE,UAAU,EAAE,MAAM,EAAE;;;MCDZ,kCAAkC,CAAA;wGAAlC,kCAAkC,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA;AAAlC,IAAA,OAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,kCAAkC,cAD9B,MAAM,EAAA,CAAA;;4FACV,kCAAkC,EAAA,UAAA,EAAA,CAAA;kBADvD,UAAU;mBAAC,EAAE,UAAU,EAAE,MAAM,EAAE;;;MCYrB,sBAAsB,CAAA;AAEvB,IAAA,IAAA;AACA,IAAA,YAAA;IAFV,WACU,CAAA,IAAgC,EAChC,YAAgD,EAAA;QADhD,IAAI,CAAA,IAAA,GAAJ,IAAI;QACJ,IAAY,CAAA,YAAA,GAAZ,YAAY;;AAGtB,IAAA,uBAAuB,CAAC,GAAW,EAAA;QAC/B,OAAO,IAAI,CAAC,IAAI,CAAC,oBAAoB,CAAsB,GAAG,CAAC;;IAEnE,cAAc,CAAC,GAAW,EAAE,QAA4B,EAAA;QACpD,OAAO,IAAI,CAAC,IAAI,CAAC,qBAAqB,CAAsB,GAAG,EAAE,QAAQ,CAAC;;IAE9E,gBAAgB,CAAC,GAAW,EAAE,QAA6B,EAAA;AACzD,QAAA,IAAI,WAAW,GAAG,IAAI,WAAW,CAAC;AAChC,YAAA,QAAQ,EAAE,mEAAmE;AAC7E,YAAA,cAAc,EAAE;AACjB,SAAA,CAAC;QACF,OAAO,IAAI,CAAC,IAAI,CAAC,qBAAqB,CAAO,GAAG,EAAE,QAAQ,EAAE,WAAW,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,CAAC;;AAGpG,IAAA,YAAY,CAAC,IAAU,EAAE,QAAgB,EAAE,WAAmB,EAAA;AAC5D,QAAA,MAAM,IAAI,GAAG,IAAI,IAAI,CAAC,CAAC,IAAI,CAAC,EAAE,EAAE,IAAI,EAAE,WAAW,EAAE,CAAC;QACpD,MAAM,GAAG,GAAG,MAAM,CAAC,GAAG,CAAC,eAAe,CAAC,IAAI,CAAC;QAC5C,MAAM,IAAI,GAAG,QAAQ,CAAC,aAAa,CAAC,GAAG,CAAC;AACxC,QAAA,IAAI,CAAC,IAAI,GAAG,GAAG;AACf,QAAA,IAAI,CAAC,QAAQ,GAAG,QAAQ;QACxB,IAAI,CAAC,KAAK,EAAE;AACZ,QAAA,MAAM,CAAC,GAAG,CAAC,eAAe,CAAC,GAAG,CAAC;;AAEjC,IAAA,gBAAgB,CACd,KAAU,EACV,WAAA,GAAsB,oBAAoB,EAAA;AAE1C,QAAA,MAAM,OAAO,GAAG,KAAK,CAAC,OAAO,IAAI,wBAAwB;QACzD,IAAI,CAAC,YAAY,CAAC,SAAS,CAAC,OAAO,EAAE,WAAW,EAAE,OAAO,CAAC;;AAG5D,IAAA,uBAAuB,CAAC,WAA8B,EAAA;AACpD,QAAA,MAAM,iBAAiB,GAAG,WAAW,CAAC,MAAM,CAAC,GAAG,IAAI,GAAG,CAAC,iBAAiB,KAAK,iBAAiB,CAAC,IAAI,CAAC;AACrG,QAAA,MAAM,kBAAkB,GAAG,WAAW,CAAC,MAAM,CAAC,GAAG,IAAI,GAAG,CAAC,iBAAiB,KAAK,iBAAiB,CAAC,KAAK,CAAC;AACvG,QAAA,MAAM,gBAAgB,GAAG,WAAW,CAAC,MAAM,CAAC,GAAG,IAAI,GAAG,CAAC,iBAAiB,KAAK,iBAAiB,CAAC,KAAK,CAAC;QACrG,OAAO,CAAC,GAAG,iBAAiB,EAAE,GAAG,gBAAgB,EAAE,GAAG,kBAAkB,CAAC;;AAG3E;;;;;;;;;;;;;;;;AAgBG;AACH,IAAA,kBAAkB,CAAC,MAA8B,EAAE,OAAA,GAAe,IAAI,EAAA;AACpE,QAAA,IAAI,MAAM,EAAE;AACV,YAAA,MAAM,CAAC,OAAO,CAAC,CAAC;;;AAIpB,IAAA,cAAc,CAAC,GAAQ,EAAE,UAAA,GAAsB,KAAK,EAAA;QAClD,IAAI,MAAM,GAA2B,EAAE;QACvC,IAAG,CAAC,UAAU,EAAC;AACb,YAAA,MAAM,GAAG;AACL,gBAAA,aAAa,EAAE,GAAG,CAAC,qBAAqB,KAAK,qBAAqB,CAAC,IAAI,GAAG,QAAQ,GAAG,QAAQ;AAC7F,gBAAA,WAAW,EAAE,GAAG,CAAC,qBAAqB,KAAK,qBAAqB,CAAC,IAAI,GAAG,YAAY,GAAG,QAAQ;AAC/F,gBAAA,YAAY,EAAE,GAAG,CAAC,qBAAqB,KAAK,qBAAqB,CAAC,IAAI,GAAG,WAAW,GAAG;aAC1F;;AAEH,QAAA,IAAI,GAAG,CAAC,YAAY,GAAG,CAAC,EAAE;YACtB,MAAM,CAAC,WAAW,CAAC,GAAG,GAAG,CAAC,YAAY,GAAG,IAAI;YAC7C,MAAM,CAAC,WAAW,CAAC,GAAG,GAAG,CAAC,YAAY,GAAG,IAAI;YAC7C,MAAM,CAAC,OAAO,CAAC,GAAG,GAAG,CAAC,YAAY,GAAG,IAAI;;AAE7C,QAAA,OAAO,MAAM;;AAGf,IAAA,eAAe,CAAC,eAAkC,EAAE,mBAA2B,EAAE,gBAAwB,EAAA;QACvG,IAAI,aAAa,GAAiB,EAAE;QACpC,IAAI,kBAAkB,GAAkB,IAAI;QAC5C,IAAG,gBAAgB,KAAK,EAAE,IAAI,gBAAgB,KAAK,EAAE,EAAC;YAClD,QAAO,eAAe;gBAClB,KAAK,iBAAiB,CAAC,KAAK;oBACxB,kBAAkB,GAAG,IAAI;oBAC7B;gBACA,KAAK,iBAAiB,CAAC,cAAc;AACjC,oBAAA,kBAAkB,GAAG,cAAc,CAAC,OAAO,CAAC,gBAAgB,CAAC;oBACjE;gBACA,KAAK,iBAAiB,CAAC,YAAY;AAC/B,oBAAA,kBAAkB,GAAG,YAAY,CAAC,OAAO,CAAC,gBAAgB,CAAC;oBAC/D;gBACA,KAAK,iBAAiB,CAAC,eAAe;AAClC,oBAAA,MAAM,QAAQ,GAAQ;AAClB,wBAAA,gBAAgB,EAAE;qBACrB;oBACD,OAAO,IAAI,CAAC,IAAI,CAAC,qBAAqB,CAAe,mBAAmB,EAAC,QAAQ,CAAC;AACtF,gBAAA;oBACI,IAAI,CAAC,YAAY,CAAC,SAAS,CAAC,OAAO,EAAC,+BAA+B,EAAE,wCAAwC,CAAC;;;AAG1H,QAAA,aAAa,GAAG,kBAAkB,GAAG,IAAI,CAAC,KAAK,CAAC,kBAAkB,CAAC,GAAG,EAAE;AACxE,QAAA,IAAI,CAAC,SAAS,CAAC,aAAa,CAAC;AAC7B,QAAA,OAAO,aAAa;;AAEtB,IAAA,SAAS,CAAC,iBAA+B,EAAA;QACrC,iBAAiB,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,KACxB,CAAC,CAAC,SAAS,CAAC,WAAW,EAAE,CAAC,aAAa,CAAC,CAAC,CAAC,SAAS,CAAC,WAAW,EAAE,CAAC,CACrE;;AAEL,IAAA,oBAAoB,CAAC,iBAA+B,EAAA;QAC9C,OAAO,iBAAiB,CAAC,GAAG,CAAC,IAAI,KAAK;YAClC,KAAK,EAAE,IAAI,CAAC;AACf,SAAA,CAAC,CAAC;;AAET,IAAA,mBAAmB,CAAC,iBAA+B,EAAE,eAAuB,EAAE,gBAAwB,EAAA;QAChG,MAAM,mBAAmB,GAAG,iBAAiB,CAAC,GAAG,CAAC,IAAI,KAAK;YACvD,SAAS,EAAE,IAAI,CAAC,SAAS;YACzB,QAAQ,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC;YACvC,UAAU,EAAE,IAAI,CAAC;AACpB,SAAA,CAAC,CAAC;AACH,QAAA,MAAM,QAAQ,GAAQ;AAClB,YAAA,gBAAgB,EAAE,gBAAgB;AAClC,YAAA,KAAK,EAAE;SACV;QACD,OAAO,IAAI,CAAC,IAAI,CAAC,qBAAqB,CAAM,eAAe,EAAC,QAAQ,CAAC;;IAE3E,gBAAgB,CAAC,EAAS,EAAE,gBAA+B,EAAE,WAAmB,EAAE,kBAA0B,EAAE,eAAsC,EAAA;QAC9I,IAAI,SAAS,GAAG,IAAI,CAAC,mBAAmB,CAAC,EAAE,CAAC;QAC5C,IAAI,UAAU,GAAG,IAAI,CAAC,iBAAiB,CAAC,EAAE,CAAC;QAC3C,MAAM,mCAAmC,GAAG,EAAC,GAAG,eAAe,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC,EAAC;AACxG,QAAA,IAAI,mCAAmC,CAAC,OAAO,CAAC,EAAE;YAC9C,mCAAmC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,GAAG,IAAI;;AAEhE,QAAA,IAAI,mCAAmC,CAAC,UAAU,CAAC,EAAE;YACjD,mCAAmC,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,GAAG,IAAI;;AAEnE,QAAA,MAAM,SAAS,GAAmB;AAChC,YAAA,YAAY,EAAE,CAAC,GAAG,EAAE,CAAC,OAAQ,CAAC;YAC9B,aAAa,EAAE,EAAE,CAAC,aAAa;AAC/B,YAAA,OAAO,EAAE,EAAC,GAAG,mCAAmC,EAAC;AACjD,YAAA,gBAAgB,EAAE,gBAAgB;AAClC,YAAA,WAAW,EAAE,WAAW;AACxB,YAAA,kBAAkB,EAAE,kBAAkB;AACtC,YAAA,UAAU,EAAE,UAAU;AACtB,YAAA,YAAY,EAAE;SACf;AACD,QAAA,OAAO,SAAS;;AAGpB,IAAA,mBAAmB,CAAC,EAAS,EAAA;QAC3B,IAAI,MAAM,GAAa,EAAE;AACzB,QAAA,MAAM,OAAO,GAAG,EAAE,CAAC,EAAE,CAAC,aAAa,CAAC,gBAAgB,CAAC,8BAA8B,CAAC;QACpF,OAAO,CAAC,OAAO,CAAC,CAAC,MAAmB,KAAK,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC,CAAC;AACvF,QAAA,OAAO,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC;;AAGzB,IAAA,iBAAiB,CAAC,EAAS,EAAA;QACvB,IAAI,UAAU,GAAG,CAAC;AAClB,QAAA,IAAI,EAAE,CAAC,gBAAgB,KAAK,QAAQ,EAAE;YAClC,UAAU,GAAG,UAAU,CAAC,aAAa,CAAC,EAAE,CAAC,cAAc,EAAE,aAAa,CAAC;;AAE3E,QAAA,OAAO,UAAU;;wGAxKZ,sBAAsB,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAAC,0BAAA,EAAA,EAAA,EAAA,KAAA,EAAAC,kCAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA;AAAtB,IAAA,OAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,sBAAsB,cAFrB,MAAM,EAAA,CAAA;;4FAEP,sBAAsB,EAAA,UAAA,EAAA,CAAA;kBAHlC,UAAU;AAAC,YAAA,IAAA,EAAA,CAAA;AACV,oBAAA,UAAU,EAAE;AACb,iBAAA;;;MCIY,WAAW,CAAA;AAEZ,IAAA,YAAA;AADV,IAAA,WAAA,CACU,YAAoC,EAAA;QAApC,IAAY,CAAA,YAAA,GAAZ,YAAY;;AAEb,IAAA,MAAM;AACN,IAAA,OAAO;IACP,cAAc,GAAY,KAAK;IAC/B,kBAAkB,GAAY,KAAK;AAElC,IAAA,OAAO,GAAG,IAAI,YAAY,EAAO;IAE3C,UAAU,GAAA;QACR,OAAO,IAAI,CAAC,MAAM,CAAC,SAAS,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,KAAK;;IAG7E,WAAW,GAAA;AACT,QAAA,IAAI,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE;AACtB,YAAA,IAAI,CAAC,YAAY,CAAC,kBAAkB,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,IAAI,CAAC,OAAO,CAAC;;;wGAjB/D,WAAW,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAAC,sBAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAAX,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,WAAW,2OCjBxB,ojBAW6B,EAAA,MAAA,EAAA,CAAA,qHAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EDFzB,YAAY,EACZ,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAJ,IAAA,CAAA,OAAA,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,YAAY,ibACZ,aAAa,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAK,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,YAAA,EAAA,MAAA,EAAA,CAAA,iBAAA,EAAA,cAAA,EAAA,UAAA,EAAA,eAAA,EAAA,mBAAA,EAAA,eAAA,EAAA,QAAA,EAAA,WAAA,EAAA,WAAA,EAAA,MAAA,EAAA,aAAA,EAAA,cAAA,EAAA,UAAA,EAAA,YAAA,EAAA,cAAA,EAAA,UAAA,EAAA,iBAAA,EAAA,gBAAA,CAAA,EAAA,CAAA,EAAA,CAAA;;4FAMJ,WAAW,EAAA,UAAA,EAAA,CAAA;kBAXvB,SAAS;AACE,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,kBAAkB,EACnB,OAAA,EAAA;wBACP,YAAY;wBACZ,YAAY;wBACZ;AACD,qBAAA,EAAA,UAAA,EACW,IAAI,EAAA,QAAA,EAAA,ojBAAA,EAAA,MAAA,EAAA,CAAA,qHAAA,CAAA,EAAA;wFAQP,MAAM,EAAA,CAAA;sBAAd;gBACQ,OAAO,EAAA,CAAA;sBAAf;gBACQ,cAAc,EAAA,CAAA;sBAAtB;gBACQ,kBAAkB,EAAA,CAAA;sBAA1B;gBAES,OAAO,EAAA,CAAA;sBAAhB;;;MEMU,cAAc,CAAA;AACK,IAAA,eAAe;IAEpC,OAAO,GAAY,KAAK;IACxB,eAAe,GAAU,EAAE;IAC3B,kBAAkB,GAAU,EAAE;AAE7B,IAAA,aAAa,GAAG,IAAI,YAAY,EAAW;AAC3C,IAAA,YAAY,GAAG,IAAI,YAAY,EAAqB;AAE9D,IAAA,4BAA4B,GAAG;QAC7B,EAAC,IAAI,EAAE,aAAa,EAAE,GAAG,EAAE,qBAAqB,CAAC,MAAM,EAAC;QACxD,EAAC,IAAI,EAAE,cAAc,EAAE,GAAG,EAAE,qBAAqB,CAAC,IAAI,EAAC;AACU;KAClE;AACD,IAAA,0BAA0B,GAAG;QAC3B,EAAC,IAAI,EAAE,kBAAkB,EAAE,GAAG,EAAE,mBAAmB,CAAC,IAAI,EAAC;QACzD,EAAC,IAAI,EAAE,oBAAoB,EAAE,GAAG,EAAE,mBAAmB,CAAC,MAAM,EAAC;QAC7D,EAAC,IAAI,EAAE,mBAAmB,EAAE,GAAG,EAAE,mBAAmB,CAAC,KAAK;KAC3D;AACD,IAAA,wBAAwB,GAAG;QACzB,EAAC,IAAI,EAAE,gBAAgB,EAAE,GAAG,EAAE,iBAAiB,CAAC,GAAG,EAAC;QACpD,EAAC,IAAI,EAAE,qBAAqB,EAAE,GAAG,EAAE,iBAAiB,CAAC,MAAM,EAAC;QAC5D,EAAC,IAAI,EAAE,kBAAkB,EAAE,GAAG,EAAE,iBAAiB,CAAC,MAAM;KACzD;AAED,IAAA,gBAAgB,GAAkB,IAAI,CAAC;IACvC,qBAAqB,GAAW,EAAE;AAClC,IAAA,mBAAmB,CAAC,KAAU,EAAA;QAC5B,MAAM,WAAW,GAAG,KAAK,CAAC,OAAO,IAAI,KAAK,CAAC,OAAO,CAAC;cAC7C,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,WAAW;cACtC,EAAE;QACR,IAAI,CAAC,kBAAkB,GAAG,IAAI,CAAC,eAAe,CAAC,MAAM,CAAC,MAAM,IACxD,MAAM,CAAC,MAAM,CAAC,WAAW,EAAE,CAAC,QAAQ,CAAC,WAAW,CAAC,CACpD;;IAGH,wBAAwB,GAAA;AACtB,QAAA,OAAO,IAAI,CAAC,eAAe,CAAC,KAAK,CAAC,MAAM,IAAI,MAAM,CAAC,QAAQ,CAAC;;AAG9D,IAAA,uBAAuB,CAAC,KAAU,EAAA;AAChC,QAAA,IAAG,KAAK,CAAC,OAAO,EAAC;AACf,YAAA,IAAI,CAAC,eAAe,CAAC,OAAO,CAAC,MAAM,IAAG,EAAE,MAAM,CAAC,QAAQ,GAAG,IAAI,CAAC,EAAC,CAAC;;aAC5D;AACL,YAAA,IAAI,CAAC,eAAe,CAAC,OAAO,CAAC,MAAM,IAAG;AACpC,gBAAA,IAAI,CAAC,MAAM,CAAC,cAAc,EAAE;AAC1B,oBAAA,MAAM,CAAC,QAAQ,GAAG,KAAK;;AAE3B,aAAC,CAAC;;;AAIN,IAAA,iBAAiB,CAAC,KAAU,EAAA;AAC1B,QAAA,IAAI,WAAW,GAAG,KAAK,CAAC,MAAM,CAAC,KAAK;QACpC,IAAI,CAAC,eAAe,CAAC,YAAY,CAAC,WAAW,EAAE,UAAU,CAAC;;IAG5D,uBAAuB,GAAA;QACrB,MAAM,QAAQ,GAAG,IAAI,CAAC,eAAe,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC,QAAQ,IAAI,CAAC,CAAC,CAAC,cAAc,CAAC;AAClF,QAAA,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,QAAQ,CAAC;QAChC,IAAI,CAAC,UAAU,EAAE;;AAEnB,IAAA,iBAAiB,CAAC,EAAS,EAAA;AACzB,QAAA,IAAI,CAAC,gBAAgB,GAAC,IAAI;AAC1B,QAAA,EAAE,CAAC,YAAY,CAAC,EAAE,EAAC,EAAE,CAAC;;IAExB,UAAU,GAAA;AACR,QAAA,IAAI,CAAC,gBAAgB,GAAC,IAAI;AAC1B,QAAA,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,KAAK,CAAC;;wGArErB,cAAc,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;4FAAd,cAAc,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,qBAAA,EAAA,MAAA,EAAA,EAAA,OAAA,EAAA,SAAA,EAAA,eAAA,EAAA,iBAAA,EAAA,kBAAA,EAAA,oBAAA,EAAA,EAAA,OAAA,EAAA,EAAA,aAAA,EAAA,eAAA,EAAA,YAAA,EAAA,cAAA,EAAA,EAAA,WAAA,EAAA,CAAA,EAAA,YAAA,EAAA,iBAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,CAAA,iBAAA,CAAA,EAAA,WAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EChC3B,4nNAwFW,EDtEP,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,YAAY,4gCACZ,WAAW,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,IAAA,CAAA,KAAA,EAAA,QAAA,EAAA,SAAA,EAAA,MAAA,EAAA,CAAA,eAAA,EAAA,aAAA,EAAA,OAAA,EAAA,YAAA,EAAA,YAAA,EAAA,iBAAA,EAAA,WAAA,EAAA,WAAA,EAAA,oBAAA,EAAA,qBAAA,EAAA,mBAAA,EAAA,qBAAA,EAAA,2BAAA,EAAA,+BAAA,EAAA,2BAAA,EAAA,uBAAA,EAAA,wBAAA,EAAA,qBAAA,EAAA,mBAAA,EAAA,eAAA,EAAA,kBAAA,EAAA,UAAA,EAAA,iBAAA,EAAA,eAAA,EAAA,mBAAA,EAAA,sBAAA,EAAA,0BAAA,EAAA,SAAA,EAAA,kBAAA,EAAA,eAAA,EAAA,YAAA,EAAA,MAAA,EAAA,gBAAA,EAAA,oBAAA,EAAA,cAAA,EAAA,gBAAA,EAAA,SAAA,EAAA,oBAAA,EAAA,aAAA,EAAA,cAAA,EAAA,iBAAA,EAAA,gBAAA,EAAA,eAAA,EAAA,YAAA,EAAA,iBAAA,EAAA,cAAA,EAAA,cAAA,EAAA,eAAA,EAAA,uBAAA,EAAA,sBAAA,EAAA,oBAAA,EAAA,aAAA,EAAA,YAAA,EAAA,aAAA,EAAA,kBAAA,EAAA,kBAAA,EAAA,oBAAA,EAAA,SAAA,EAAA,aAAA,EAAA,YAAA,EAAA,UAAA,EAAA,YAAA,EAAA,sBAAA,EAAA,YAAA,EAAA,gBAAA,EAAA,cAAA,EAAA,UAAA,EAAA,cAAA,EAAA,UAAA,EAAA,aAAA,EAAA,MAAA,EAAA,eAAA,EAAA,aAAA,EAAA,kBAAA,EAAA,kBAAA,EAAA,YAAA,EAAA,iBAAA,EAAA,OAAA,EAAA,SAAA,EAAA,OAAA,EAAA,MAAA,EAAA,cAAA,EAAA,WAAA,EAAA,WAAA,EAAA,eAAA,EAAA,WAAA,EAAA,kBAAA,EAAA,WAAA,CAAA,EAAA,OAAA,EAAA,CAAA,4BAAA,EAAA,iBAAA,EAAA,iBAAA,EAAA,aAAA,EAAA,eAAA,EAAA,QAAA,EAAA,QAAA,EAAA,UAAA,EAAA,YAAA,EAAA,aAAA,EAAA,eAAA,EAAA,qBAAA,EAAA,aAAA,EAAA,cAAA,EAAA,cAAA,EAAA,YAAA,EAAA,gBAAA,EAAA,cAAA,EAAA,wBAAA,EAAA,cAAA,EAAA,aAAA,EAAA,YAAA,EAAA,aAAA,EAAA,gBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,YAAA,EAAA,QAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,CAAA,QAAA,EAAA,aAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EACX,cAAc,EACd,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAD,IAAA,CAAA,QAAA,EAAA,QAAA,EAAA,qCAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,MAAA,EAAA,UAAA,EAAA,QAAA,EAAA,gBAAA,EAAA,WAAA,EAAA,UAAA,EAAA,SAAA,EAAA,OAAA,EAAA,YAAA,EAAA,YAAA,EAAA,YAAA,EAAA,eAAA,EAAA,MAAA,EAAA,aAAA,EAAA,cAAA,EAAA,UAAA,EAAA,UAAA,EAAA,WAAA,EAAA,WAAA,EAAA,YAAA,EAAA,SAAA,CAAA,EAAA,OAAA,EAAA,CAAA,UAAA,EAAA,SAAA,EAAA,QAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,YAAY,ibACZ,kBAAkB,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,YAAA,EAAA,QAAA,EAAA,iDAAA,EAAA,MAAA,EAAA,CAAA,SAAA,EAAA,aAAA,EAAA,aAAA,EAAA,gBAAA,EAAA,cAAA,EAAA,UAAA,EAAA,UAAA,EAAA,YAAA,EAAA,OAAA,EAAA,YAAA,EAAA,gBAAA,EAAA,MAAA,EAAA,UAAA,EAAA,SAAA,EAAA,WAAA,CAAA,EAAA,OAAA,EAAA,CAAA,eAAA,EAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAClB,YAAY,EACZ,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAE,IAAA,CAAA,OAAA,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,WAAW,yxBACX,eAAe,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,SAAA,EAAA,QAAA,EAAA,0BAAA,EAAA,MAAA,EAAA,CAAA,YAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EACf,eAAe,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,GAAA,CAAA,SAAA,EAAA,QAAA,EAAA,wCAAA,EAAA,MAAA,EAAA,CAAA,cAAA,EAAA,YAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EACf,eAAe,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,GAAA,CAAA,SAAA,EAAA,QAAA,EAAA,cAAA,EAAA,MAAA,EAAA,CAAA,SAAA,EAAA,OAAA,EAAA,OAAA,CAAA,EAAA,CAAA,EAAA,CAAA;;4FAKN,cAAc,EAAA,UAAA,EAAA,CAAA;kBAjB1B,SAAS;AACE,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,qBAAqB,EACtB,OAAA,EAAA;wBACP,YAAY;wBACZ,WAAW;wBACX,cAAc;wBACd,YAAY;wBACZ,kBAAkB;wBAClB,YAAY;wBACZ,WAAW;wBACX,eAAe;wBACf,eAAe;wBACf;AACD,qBAAA,EAAA,UAAA,EACW,IAAI,EAAA,QAAA,EAAA,4nNAAA,EAAA;8BAIc,eAAe,EAAA,CAAA;sBAA5C,SAAS;uBAAC,iBAAiB;gBAEnB,OAAO,EAAA,CAAA;sBAAf;gBACQ,eAAe,EAAA,CAAA;sBAAvB;gBACQ,kBAAkB,EAAA,CAAA;sBAA1B;gBAES,aAAa,EAAA,CAAA;sBAAtB;gBACS,YAAY,EAAA,CAAA;sBAArB;;;MEnCU,kBAAkB,CAAA;IAC3B,oBAAoB,GAAA;AAChB,QAAA,MAAM,GAAG,GAAG,IAAI,IAAI,EAAE;AACtB,QAAA,MAAM,IAAI,GAAG,GAAG,CAAC,cAAc,EAAE;AACjC,QAAA,MAAM,KAAK,GAAG,MAAM,CAAC,GAAG,CAAC,WAAW,EAAE,GAAG,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC;AAC5D,QAAA,MAAM,GAAG,GAAG,MAAM,CAAC,GAAG,CAAC,UAAU,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC;AACrD,QAAA,MAAM,KAAK,GAAG,MAAM,CAAC,GAAG,CAAC,WAAW,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC;AACxD,QAAA,MAAM,OAAO,GAAG,MAAM,CAAC,GAAG,CAAC,aAAa,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC;AAC5D,QAAA,MAAM,OAAO,GAAG,MAAM,CAAC,GAAG,CAAC,aAAa,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC;AAC5D,QAAA,OAAO,CAAI,CAAA,EAAA,IAAI,CAAG,EAAA,KAAK,CAAG,EAAA,GAAG,CAAI,CAAA,EAAA,KAAK,CAAG,EAAA,OAAO,CAAG,EAAA,OAAO,MAAM;;wGAT3D,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;AACb,iBAAA;;;MCqBY,WAAW,CAAA;AAgBZ,IAAA,mBAAA;AACA,IAAA,kBAAA;IAhBD,OAAO,GAAY,KAAK;IACxB,yBAAyB,GAAY,KAAK;IAC1C,gBAAgB,GAAW,EAAE;IACtC,kBAAkB,GAAY,IAAI;IACzB,kBAAkB,GAAY,KAAK;AAClC,IAAA,aAAa,GAAG,IAAI,YAAY,EAMtC;AACM,IAAA,aAAa,GAAG,IAAI,YAAY,EAAW;IAErD,WACU,CAAA,mBAAuD,EACvD,kBAAsC,EAAA;QADtC,IAAmB,CAAA,mBAAA,GAAnB,mBAAmB;QACnB,IAAkB,CAAA,kBAAA,GAAlB,kBAAkB;;IAG5B,6BAA6B,GAAY,KAAK;AAC9C,IAAA,oBAAoB,GAAU;AAC5B,QAAA,EAAE,KAAK,EAAE,cAAc,EAAE,KAAK,EAAE,KAAK,EAAE;AACvC,QAAA,EAAE,KAAK,EAAE,aAAa,EAAE,KAAK,EAAE,IAAI;KACpC;IAED,mCAAmC,GAAY,KAAK;AACpD,IAAA,0BAA0B,GAAU;AAClC,QAAA,EAAE,KAAK,EAAE,YAAY,EAAE,KAAK,EAAE,KAAK,EAAE;AACrC,QAAA,EAAE,KAAK,EAAE,uBAAuB,EAAE,KAAK,EAAE,IAAI;KAC9C;IAED,iCAAiC,GAAY,KAAK;AAClD,IAAA,wBAAwB,GAAU;AAChC,QAAA,EAAE,KAAK,EAAE,UAAU,EAAE,KAAK,EAAE,KAAK,EAAE;AACnC,QAAA,EAAE,KAAK,EAAE,qBAAqB,EAAE,KAAK,EAAE,IAAI;KAC5C;IAED,kCAAkC,GAAW,CAAC;AAC9C,IAAA,yBAAyB,GAAU;AACjC,QAAA,EAAE,KAAK,EAAE,UAAU,EAAE,KAAK,EAAE,CAAC,EAAE;AAC/B,QAAA,EAAE,KAAK,EAAE,eAAe,EAAE,KAAK,EAAE,CAAC,EAAE;AACpC,QAAA,EAAE,KAAK,EAAE,mBAAmB,EAAE,KAAK,EAAE,CAAC;KACvC;AAED,IAAA,WAAW,CAAC,OAAsB,EAAA;;QAEhC,IAAI,OAAO,CAAC,SAAS,CAAC,IAAI,OAAO,CAAC,SAAS,CAAC,CAAC,YAAY,KAAK,IAAI,IAAI,OAAO,CAAC,SAAS,CAAC,CAAC,aAAa,KAAK,KAAK,EAAE;YAChH,IAAI,CAAC,WAAW,EAAE;;;IAId,WAAW,GAAA;AACjB,QAAA,IAAI,CAAC,kBAAkB,GAAG,IAAI;AAC9B,QAAA,IAAI,CAAC,6BAA6B,GAAG,KAAK;AAC1C,QAAA,IAAI,CAAC,mCAAmC,GAAG,KAAK;AAChD,QAAA,IAAI,CAAC,iCAAiC,GAAG,KAAK;AAC9C,QAAA,IAAI,CAAC,kCAAkC,GAAG,CAAC;;IAG7C,cAAc,GAAA;QACZ,IAAI,qBAAqB,GAAW,EAAE;QACtC,IAAI,CAAC,gBAAgB,GAAC,IAAI,CAAC,gBAAgB,EAAE,IAAI,EAAE;AACnD,QAAA,IAAI,CAAC,IAAI,CAAC,gBAAgB,IAAI,IAAI,CAAC,gBAAgB,CAAC,MAAM,IAAI,CAAC,EAAE;AAC/D,YAAA,IAAI,CAAC,mBAAmB,CAAC,WAAW,EAAE;YACtC,IAAI,CAAC,mBAAmB,CAAC,SAAS,CAAC,OAAO,EAAE,uBAAuB,EAAE,8BAA8B,CAAC;YACpG;;QAEF,MAAM,cAAc,GAAG,mBAAmB;QAC1C,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC,gBAAgB,CAAC,EAAE;AAC/C,YAAA,IAAI,CAAC,mBAAmB,CAAC,WAAW,EAAE;YACtC,IAAI,CAAC,mBAAmB,CAAC,SAAS,CAAC,OAAO,EAAE,mCAAmC,EAAE,8CAA8C,CAAC;YAChI;;AAEF,QAAA,IAAG,IAAI,CAAC,kBAAkB,EAAC;AACzB,YAAA,qBAAqB,GAAG,IAAI,CAAC,gBAAgB,GAAG,IAAI,CAAC,kBAAkB,CAAC,oBAAoB,EAAE,GAAG,OAAO;;aACnG;AACL,YAAA,qBAAqB,GAAG,IAAI,CAAC,gBAAgB,GAAG,OAAO;;AAEzD,QAAA,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC;YACtB,UAAU,EAAE,IAAI,CAAC,6BAA6B;YAC9C,YAAY,EAAE,IAAI,CAAC,mCAAmC;YACtD,UAAU,EAAE,IAAI,CAAC,iCAAiC;YAClD,YAAY,EAAE,IAAI,CAAC,kCAAkC;AACrD,YAAA,QAAQ,EAAE;AACX,SAAA,CAAC;;IAGJ,sBAAsB,GAAA;AACpB,QAAA,OAAO,IAAI,CAAC,kCAAkC,IAAI,CAAC;;AAGrD,IAAA,kBAAkB,CAAC,KAA8B,EAAA;AAC/C,QAAA,IAAG,KAAK,CAAC,KAAK,IAAE,CAAC,EAAC;AAChB,YAAA,IAAI,CAAC,mCAAmC,GAAC,IAAI;;;IAIjD,UAAU,GAAA;AACR,QAAA,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,KAAK,CAAC;;wGAnGrB,WAAW,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAAJ,kCAAA,EAAA,EAAA,EAAA,KAAA,EAAAK,kBAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAAX,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,WAAW,ECzBxB,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,kBAAA,EAAA,MAAA,EAAA,EAAA,OAAA,EAAA,SAAA,EAAA,yBAAA,EAAA,2BAAA,EAAA,gBAAA,EAAA,kBAAA,EAAA,kBAAA,EAAA,oBAAA,EAAA,EAAA,OAAA,EAAA,EAAA,aAAA,EAAA,eAAA,EAAA,aAAA,EAAA,eAAA,EAAA,EAAA,aAAA,EAAA,IAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EAAA,wgHA4DW,ED9CP,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,YAAY,4gCACZ,WAAW,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,IAAA,CAAA,oBAAA,EAAA,QAAA,EAAA,8MAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,eAAA,EAAA,QAAA,EAAA,2CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,kBAAA,EAAA,QAAA,EAAA,4EAAA,EAAA,MAAA,EAAA,CAAA,WAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,OAAA,EAAA,QAAA,EAAA,qDAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,SAAA,EAAA,gBAAA,CAAA,EAAA,OAAA,EAAA,CAAA,eAAA,CAAA,EAAA,QAAA,EAAA,CAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EACX,YAAY,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,EAAA,CAAA,MAAA,EAAA,QAAA,EAAA,UAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,SAAA,EAAA,MAAA,EAAA,OAAA,EAAA,OAAA,EAAA,UAAA,EAAA,SAAA,EAAA,aAAA,EAAA,QAAA,EAAA,SAAA,EAAA,MAAA,EAAA,OAAA,EAAA,UAAA,EAAA,UAAA,EAAA,MAAA,EAAA,UAAA,EAAA,MAAA,EAAA,SAAA,EAAA,OAAA,EAAA,YAAA,EAAA,YAAA,EAAA,eAAA,EAAA,WAAA,EAAA,WAAA,EAAA,OAAA,EAAA,aAAA,CAAA,EAAA,OAAA,EAAA,CAAA,SAAA,EAAA,SAAA,EAAA,QAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACZ,YAAY,EACZ,QAAA,EAAA,iDAAA,EAAA,MAAA,EAAA,CAAA,SAAA,EAAA,aAAA,EAAA,aAAA,EAAA,gBAAA,EAAA,cAAA,EAAA,UAAA,EAAA,UAAA,EAAA,YAAA,EAAA,OAAA,EAAA,YAAA,EAAA,gBAAA,EAAA,MAAA,EAAA,UAAA,EAAA,SAAA,EAAA,WAAA,CAAA,EAAA,OAAA,EAAA,CAAA,eAAA,EAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,eAAe,EACf,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAH,GAAA,CAAA,SAAA,EAAA,QAAA,EAAA,cAAA,EAAA,MAAA,EAAA,CAAA,SAAA,EAAA,OAAA,EAAA,OAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,aAAa,qXACb,cAAc,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAI,IAAA,CAAA,QAAA,EAAA,QAAA,EAAA,qCAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,MAAA,EAAA,UAAA,EAAA,QAAA,EAAA,gBAAA,EAAA,WAAA,EAAA,UAAA,EAAA,SAAA,EAAA,OAAA,EAAA,YAAA,EAAA,YAAA,EAAA,YAAA,EAAA,eAAA,EAAA,MAAA,EAAA,aAAA,EAAA,cAAA,EAAA,UAAA,EAAA,UAAA,EAAA,WAAA,EAAA,WAAA,EAAA,YAAA,EAAA,SAAA,CAAA,EAAA,OAAA,EAAA,CAAA,UAAA,EAAA,SAAA,EAAA,QAAA,CAAA,EAAA,CAAA,EAAA,CAAA;;4FAKL,WAAW,EAAA,UAAA,EAAA,CAAA;kBAdvB,SAAS;AACE,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,kBAAkB,EACnB,OAAA,EAAA;wBACP,YAAY;wBACZ,WAAW;wBACX,YAAY;wBACZ,YAAY;wBACZ,eAAe;wBACf,aAAa;wBACb;AACD,qBAAA,EAAA,UAAA,EACW,IAAI,EAAA,QAAA,EAAA,wgHAAA,EAAA;kIAIP,OAAO,EAAA,CAAA;sBAAf;gBACQ,yBAAyB,EAAA,CAAA;sBAAjC;gBACQ,gBAAgB,EAAA,CAAA;sBAAxB;gBAEQ,kBAAkB,EAAA,CAAA;sBAA1B;gBACS,aAAa,EAAA,CAAA;sBAAtB;gBAOS,aAAa,EAAA,CAAA;sBAAtB;;;MEdU,eAAe,CAAA;AAEhB,IAAA,YAAA;AADV,IAAA,WAAA,CACU,YAAgD,EAAA;QAAhD,IAAY,CAAA,YAAA,GAAZ,YAAY;;IAEb,OAAO,GAAY,KAAK;IACxB,oBAAoB,GAAe,EAAE;AACpC,IAAA,YAAY,GAAG,IAAI,YAAY,EAAU;AACzC,IAAA,YAAY,GAAG,IAAI,YAAY,EAAU;AACzC,IAAA,gBAAgB,GAAG,IAAI,YAAY,EAAU;AAC7C,IAAA,eAAe,GAAG,IAAI,YAAY,EAAkD;AACpF,IAAA,YAAY,GAAG,IAAI,YAAY,EAAU;AACzC,IAAA,aAAa,GAAG,IAAI,YAAY,EAAW;IACrD,cAAc,GAAY,KAAK;IAC/B,gBAAgB,GAAW,EAAE;IAC7B,YAAY,GAAW,EAAE;AACzB,IAAA,QAAQ,CAAC,SAAiB,EAAA;AACxB,QAAA,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,SAAS,CAAC;;AAEnC,IAAA,UAAU,CAAC,SAAiB,EAAA;AAC1B,QAAA,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,SAAS,CAAC;;AAEnC,IAAA,UAAU,CAAC,SAAiB,EAAA;AAC1B,QAAA,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,SAAS,CAAC;;AAEvC,IAAA,UAAU,CAAC,SAAiB,EAAA;AAC1B,QAAA,MAAM,MAAM,GAAG,IAAI,CAAC,oBAAoB,CAAC,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,KAAK,KAAK,SAAS,CAAC;QAC/E,IAAI,MAAM,EAAE;AACV,YAAA,IAAI,CAAC,YAAY,CAAC,SAAS,CAAC,OAAO,EAAC,qBAAqB,EAAC,CAAA,mBAAA,EAAsB,SAAS,CAAA,gBAAA,CAAkB,CAAC;YAC5G;;AAEF,QAAA,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,SAAS,CAAC;;IAEnC,aAAa,CAAC,YAAoB,EAAE,YAAoB,EAAA;AACxD,QAAA,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC;AACtB,YAAA,YAAY,EAAE,YAAY;AAC1B,YAAA,YAAY,EAAE;AACf,SAAA,CAAC;;IAGJ,cAAc,CAAC,mBAA2B,EAAE,EAAA;AAC1C,QAAA,IAAI,CAAC,gBAAgB,GAAG,gBAAgB;AACxC,QAAA,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,gBAAgB;AACzC,QAAA,IAAI,CAAC,cAAc,GAAC,IAAI;;IAG1B,UAAU,GAAA;AACR,QAAA,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,KAAK,CAAC;;IAGhC,uBAAuB,GAAA;AACrB,QAAA,IAAI,CAAC,cAAc,GAAC,KAAK;AACzB,QAAA,IAAG,IAAI,CAAC,gBAAgB,KAAK,EAAE,EAAC;YAC9B,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,gBAAgB,EAAE,IAAI,CAAC,YAAY,CAAC;;aACvD;AACL,YAAA,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,YAAY,CAAC;;;wGAtD3B,eAAe,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAAR,kCAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAAf,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,eAAe,ECxB5B,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,sBAAA,EAAA,MAAA,EAAA,EAAA,OAAA,EAAA,SAAA,EAAA,oBAAA,EAAA,sBAAA,EAAA,EAAA,OAAA,EAAA,EAAA,YAAA,EAAA,cAAA,EAAA,YAAA,EAAA,cAAA,EAAA,gBAAA,EAAA,kBAAA,EAAA,eAAA,EAAA,iBAAA,EAAA,YAAA,EAAA,cAAA,EAAA,aAAA,EAAA,eAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EAAA,2oJAkEW,EDrDP,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,YAAY,4gCACZ,WAAW,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAE,IAAA,CAAA,KAAA,EAAA,QAAA,EAAA,SAAA,EAAA,MAAA,EAAA,CAAA,eAAA,EAAA,aAAA,EAAA,OAAA,EAAA,YAAA,EAAA,YAAA,EAAA,iBAAA,EAAA,WAAA,EAAA,WAAA,EAAA,oBAAA,EAAA,qBAAA,EAAA,mBAAA,EAAA,qBAAA,EAAA,2BAAA,EAAA,+BAAA,EAAA,2BAAA,EAAA,uBAAA,EAAA,wBAAA,EAAA,qBAAA,EAAA,mBAAA,EAAA,eAAA,EAAA,kBAAA,EAAA,UAAA,EAAA,iBAAA,EAAA,eAAA,EAAA,mBAAA,EAAA,sBAAA,EAAA,0BAAA,EAAA,SAAA,EAAA,kBAAA,EAAA,eAAA,EAAA,YAAA,EAAA,MAAA,EAAA,gBAAA,EAAA,oBAAA,EAAA,cAAA,EAAA,gBAAA,EAAA,SAAA,EAAA,oBAAA,EAAA,aAAA,EAAA,cAAA,EAAA,iBAAA,EAAA,gBAAA,EAAA,eAAA,EAAA,YAAA,EAAA,iBAAA,EAAA,cAAA,EAAA,cAAA,EAAA,eAAA,EAAA,uBAAA,EAAA,sBAAA,EAAA,oBAAA,EAAA,aAAA,EAAA,YAAA,EAAA,aAAA,EAAA,kBAAA,EAAA,kBAAA,EAAA,oBAAA,EAAA,SAAA,EAAA,aAAA,EAAA,YAAA,EAAA,UAAA,EAAA,YAAA,EAAA,sBAAA,EAAA,YAAA,EAAA,gBAAA,EAAA,cAAA,EAAA,UAAA,EAAA,cAAA,EAAA,UAAA,EAAA,aAAA,EAAA,MAAA,EAAA,eAAA,EAAA,aAAA,EAAA,kBAAA,EAAA,kBAAA,EAAA,YAAA,EAAA,iBAAA,EAAA,OAAA,EAAA,SAAA,EAAA,OAAA,EAAA,MAAA,EAAA,cAAA,EAAA,WAAA,EAAA,WAAA,EAAA,eAAA,EAAA,WAAA,EAAA,kBAAA,EAAA,WAAA,CAAA,EAAA,OAAA,EAAA,CAAA,4BAAA,EAAA,iBAAA,EAAA,iBAAA,EAAA,aAAA,EAAA,eAAA,EAAA,QAAA,EAAA,QAAA,EAAA,UAAA,EAAA,YAAA,EAAA,aAAA,EAAA,eAAA,EAAA,qBAAA,EAAA,aAAA,EAAA,cAAA,EAAA,cAAA,EAAA,YAAA,EAAA,gBAAA,EAAA,cAAA,EAAA,wBAAA,EAAA,cAAA,EAAA,aAAA,EAAA,YAAA,EAAA,aAAA,EAAA,gBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EACX,YAAY,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,eAAA,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,SAAA,EAAA,aAAA,EAAA,SAAA,EAAA,UAAA,EAAA,QAAA,EAAA,SAAA,EAAA,MAAA,EAAA,UAAA,EAAA,MAAA,EAAA,OAAA,EAAA,OAAA,EAAA,OAAA,EAAA,MAAA,EAAA,aAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,MAAA,EAAA,QAAA,EAAA,UAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,SAAA,EAAA,MAAA,EAAA,OAAA,EAAA,OAAA,EAAA,UAAA,EAAA,SAAA,EAAA,aAAA,EAAA,QAAA,EAAA,SAAA,EAAA,MAAA,EAAA,OAAA,EAAA,UAAA,EAAA,UAAA,EAAA,MAAA,EAAA,UAAA,EAAA,MAAA,EAAA,SAAA,EAAA,OAAA,EAAA,YAAA,EAAA,YAAA,EAAA,eAAA,EAAA,WAAA,EAAA,WAAA,EAAA,OAAA,EAAA,aAAA,CAAA,EAAA,OAAA,EAAA,CAAA,SAAA,EAAA,SAAA,EAAA,QAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EACZ,YAAY,EACZ,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,WAAW,EACX,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAK,IAAA,CAAA,oBAAA,EAAA,QAAA,EAAA,8MAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,eAAA,EAAA,QAAA,EAAA,2CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,kBAAA,EAAA,QAAA,EAAA,4EAAA,EAAA,MAAA,EAAA,CAAA,WAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,OAAA,EAAA,QAAA,EAAA,qDAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,SAAA,EAAA,gBAAA,CAAA,EAAA,OAAA,EAAA,CAAA,eAAA,CAAA,EAAA,QAAA,EAAA,CAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,aAAa,qXACb,eAAe,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAE,GAAA,CAAA,SAAA,EAAA,QAAA,EAAA,cAAA,EAAA,MAAA,EAAA,CAAA,SAAA,EAAA,OAAA,EAAA,OAAA,CAAA,EAAA,CAAA,EAAA,CAAA;;4FAKN,eAAe,EAAA,UAAA,EAAA,CAAA;kBAd3B,SAAS;AACE,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,sBAAsB,EACvB,OAAA,EAAA;wBACP,YAAY;wBACZ,WAAW;wBACX,YAAY;wBACZ,YAAY;wBACZ,WAAW;wBACX,aAAa;wBACb;AACD,qBAAA,EAAA,UAAA,EACW,IAAI,EAAA,QAAA,EAAA,2oJAAA,EAAA;oGAOP,OAAO,EAAA,CAAA;sBAAf;gBACQ,oBAAoB,EAAA,CAAA;sBAA5B;gBACS,YAAY,EAAA,CAAA;sBAArB;gBACS,YAAY,EAAA,CAAA;sBAArB;gBACS,gBAAgB,EAAA,CAAA;sBAAzB;gBACS,eAAe,EAAA,CAAA;sBAAxB;gBACS,YAAY,EAAA,CAAA;sBAArB;gBACS,aAAa,EAAA,CAAA;sBAAtB;;;MEuBU,eAAe,CAAA;AAGhB,IAAA,YAAA;AACA,IAAA,YAAA;AAHF,IAAA,cAAc;IACtB,WACU,CAAA,YAAoC,EACpC,YAAgD,EAAA;QADhD,IAAY,CAAA,YAAA,GAAZ,YAAY;QACZ,IAAY,CAAA,YAAA,GAAZ,YAAY;;IAEb,QAAQ,GAAY,IAAI;AACxB,IAAA,IAAI,GAAU,EAAE,CAAC;AACjB,IAAA,aAAa,GAAsB,EAAE,CAAC;AACtC,IAAA,mBAAmB,GAAY,IAAI,CAAC;AACpC,IAAA,mBAAmB,GAAY,IAAI,CAAC;AACpC,IAAA,qBAAqB,GAAW,EAAE,CAAC;AACnC,IAAA,uBAAuB,GAAW,gBAAgB,CAAC;AACnD,IAAA,mBAAmB,GAAY,IAAI,CAAC;IACpC,gBAAgB,CAAU;IAC1B,aAAa,CAAS;IACtB,cAAc,GAAkB,IAAI;AACpC,IAAA,2BAA2B,GAA2C,EAAE,CAAC;AACzE,IAAA,uCAAuC,GAAW,WAAW,CAAC;AAC9D,IAAA,6CAA6C,GAAW,gBAAgB,CAAC;AACzE,IAAA,gBAAgB,GAAmB,EAAE,CAAC;AACtC,IAAA,mBAAmB,GAAmB,EAAE,CAAC;AACzC,IAAA,+BAA+B,GAAW,GAAG,CAAC;AAC9C,IAAA,0BAA0B,GAAY,IAAI,CAAC;AAC3C,IAAA,kBAAkB,GAAW,GAAG,CAAC;AACjC,IAAA,mBAAmB,GAAY,IAAI,CAAC;AACpC,IAAA,uBAAuB,GAAY,KAAK,CAAC;AACzC,IAAA,oBAAoB,GAAW,UAAU,CAAC;AAC1C,IAAA,8BAA8B,GAAY,IAAI,CAAC;AAC/C,IAAA,sBAAsB,GAAW,GAAG,CAAC;AACrC,IAAA,uBAAuB,GAAY,IAAI,CAAC;AACxC,IAAA,sBAAsB,GAAY,KAAK,CAAC;AACxC,IAAA,gBAAgB,GAAW,SAAS,CAAA;IACpC,0BAA0B,GAAY,KAAK;AAC3C,IAAA,eAAe,GAAW,gDAAgD,CAAC;IAC3E,uBAAuB,GAAY,IAAI;IACvC,uBAAuB,GAAW,QAAQ;IAC1C,6BAA6B,GAAY,KAAK;AAC9C,IAAA,eAAe,GAAsB,iBAAiB,CAAC,KAAK,CAAC;AAC7D,IAAA,gBAAgB,GAAW,EAAE,CAAC;IAC9B,iBAAiB,GAAW,EAAE;IAC9B,kBAAkB,GAAW,EAAE;AAC/B,IAAA,aAAa,GAAW,EAAE,CAAC;AAC1B,IAAA,mBAAmB,GAAG,IAAI,YAAY,EAG5C,CAAC;IACK,WAAW,GAAG,IAAI,YAG1B;IACQ,aAAa,GAAG,IAAI,YAG5B;IACF,cAAc,GAAW,KAAK;IAC9B,6BAA6B,GAAkB,IAAI;IACnD,wBAAwB,GAAY,KAAK;IACzC,gBAAgB,GAAW,EAAE;IAC7B,eAAe,GAAY,KAAK;IAChC,kBAAkB,GAAY,KAAK;AACnC,IAAA,oBAAoB,GAAU,EAAE,CAAC;IAChB,EAAE,CAAS;IAC5B,eAAe,GAAC,IAAI;AACpB,IAAA,YAAY,GAAW,KAAK,CAAC;AAC7B,IAAA,gBAAgB,GAAkB,IAAI,CAAC;IACvC,cAAc,GAAiB,EAAE;IACjC,oBAAoB,GAAe,EAAE;IAErC,QAAQ,GAAG,QAAQ;IACnB,qBAAqB,GAAG,qBAAqB;IAC7C,mBAAmB,GAAG,mBAAmB;IACzC,iBAAiB,GAAG,iBAAiB;IACrC,iBAAiB,GAAG,iBAAiB;IACrC,iBAAiB,GAAG,iBAAiB;AAErC,IAAA,YAAY;AACZ,IAAA,WAAW,GAAW,CAAC,CAAC;AACxB,IAAA,kBAAkB,GAAW,CAAC,CAAC;AAC/B,IAAA,kBAAkB,GAAa,EAAE,CAAC;AAClC,IAAA,YAAY,GAAW,CAAC,CAAC;AACzB,IAAA,uBAAuB,GAAW,CAAC,CAAC;IAEpC,UAAU,GAAW,2BAA2B;IAChD,YAAY,GAAW,QAAQ;IAC/B,WAAW,GAAW,OAAO;IAE7B,OAAO,GAAsB,EAAE;IAC/B,mBAAmB,GAAsB,EAAE;IAC3C,eAAe,GAAsB,EAAE;IACvC,eAAe,GAAU,EAAE;IAC3B,kBAAkB,GAAU,EAAE;AAC9B,IAAA,yCAAyC,GAA6B,EAAE,CAAC;IACjE,iBAAiB,CAAM;AAC/B,IAAA,6BAA6B,GAAuB,EAAE,CAAC;IAC/C,2BAA2B,GAAY,KAAK;IACpD,QAAQ,GAAA;QACN,IAAI,CAAC,uBAAuB,EAAE;;AAEgB,IAAA,cAAc;AACb,IAAA,eAAe;AACZ,IAAA,kBAAkB;IACtE,eAAe,GAAA;AACb,QAAA,IAAI,IAAI,CAAC,mBAAmB,EAAE;AAC5B,YAAA,IAAI,CAAC,cAAc,GAAG,IAAI,cAAc,CAAC,MAAK;gBAC5C,IAAI,CAAC,qBAAqB,EAAE;AAC9B,aAAC,CAAC;YACF,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC,IAAI,CAAC,cAAc,CAAC,aAAa,CAAC;YAC9D,MAAM,CAAC,gBAAgB,CAAC,QAAQ,EAAE,IAAI,CAAC,cAAc,CAAC;YACtD,IAAI,CAAC,qBAAqB,EAAE;;;IAGlC,cAAc,GAAG,MAAK;AACpB,QAAA,YAAY,CAAE,IAAY,CAAC,cAAc,CAAC;AACzC,QAAA,IAAY,CAAC,cAAc,GAAG,UAAU,CAAC,MAAK;YAC7C,IAAI,CAAC,qBAAqB,EAAE;SAC7B,EAAE,GAAG,CAAC;AACT,KAAC;IACC,qBAAqB,GAAA;AACnB,QAAA,IAAI,IAAI,CAAC,cAAc,IAAI,IAAI,CAAC,kBAAkB,IAAI,IAAI,CAAC,eAAe,EAAE;YAC1E,MAAM,aAAa,GAAG,IAAI,CAAC,cAAc,CAAC,aAAa,CAAC,qBAAqB,EAAE;YAC/E,MAAM,eAAe,GAAG,IAAI,CAAC,kBAAkB,CAAC,aAAa,CAAC,YAAY;YAC1E,MAAM,YAAY,GAAG,IAAI,CAAC,eAAe,CAAC,aAAa,CAAC,YAAY;AACpE,YAAA,MAAM,cAAc,GAAG,MAAM,CAAC,WAAW;YACzC,MAAM,SAAS,GAAG,aAAa,CAAC,GAAG,GAAG,MAAM,CAAC,OAAO;AACpD,YAAA,IAAI,CAAC,YAAY,GAAG,CAAG,EAAA,CAAC,cAAc,GAAG,SAAS,GAAG,eAAe,GAAG,YAAY,IAAI,EAAE,IAAI;;;;;;;;IAUjG,WAAW,GAAA;AACT,QAAA,IAAI,CAAC,cAAc,EAAE,UAAU,EAAE;QACjC,MAAM,CAAC,mBAAmB,CAAC,QAAQ,EAAE,IAAI,CAAC,cAAc,CAAC;;AAG3D;;;;;AAKG;AACH,IAAA,UAAU,CAAC,cAA6C,EAAE,8BAAA,GAA0C,KAAK,EAAA;AACvG,QAAA,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC;AACrB,QAAA,IAAI,CAAC,IAAI,CAAC,2BAA2B,EAAE;YACrC,IAAI,CAAC,uBAAuB,EAAE;;aACzB;AACL,YAAA,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,6BAA6B,CAAC;;;IAI3D,uBAAuB,GAAA;AACrB,QAAA,IAAG,CAAC,IAAI,CAAC,QAAQ,EAAC;YAChB;;QAEF,IAAI,CAAC,YAAY,CAAC,uBAAuB,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC,SAAS,CAAC;AACzE,YAAA,IAAI,EAAE,CAAC,QAA2C,KAAI;AACpD,gBAAA,IAAI,CAAC,gCAAgC,CAAC,QAAQ,CAAC,IAAK,CAAC;gBACrD,IAAI,CAAC,eAAe,EAAE;aACvB;AACD,YAAA,KAAK,EAAE,CAAC,GAAG,KAAK,IAAI,CAAC,YAAY,CAAC,gBAAgB,CAAC,GAAG,EAAE,eAAe;AACxE,SAAA,CAAC;;AAGI,IAAA,gCAAgC,CAAC,IAAyB,EAAA;QAChE,IAAI,CAAC,kBAAkB,GAAG,IAAI,CAAC,mBAAmB,CAAC;AACnD,QAAA,IAAI,CAAC,kBAAkB,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,kBAAkB,CAAC,CAAC;QAC/D,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,WAAW,CAAC;QAChC,IAAI,CAAC,mBAAmB,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,GAAQ,KAAK,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC;QAC/E,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,GAAQ,KAAK,CAAC,GAAG,CAAC,WAAW,IAAI,GAAG,CAAC,WAAW,CAAC,CAAC;QAC9F,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC,YAAY,CAAC,uBAAuB,CAAC,IAAI,CAAC,mBAAmB,CAAC,MAAM,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC;AACrH,QAAA,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,UAAU;AACjC,QAAA,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,YAAY;AACrC,QAAA,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,WAAW;AACnC,QAAA,IAAI,CAAC,WAAW,GAAG,CAAC;AACpB,QAAA,IAAI,CAAC,2BAA2B,GAAG,IAAI;;AAGzC,IAAA,WAAW,CAAC,KAAU,EAAA;AACpB,QAAA,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,6BAA6B,CAAC;;IAGzD,iBAAiB,GAAA;AACf,QAAA,QACE,IAAI,CAAC,eAAe,KAAK,iBAAiB,CAAC,KAAK;AAChD,YAAA,IAAI,CAAC,gBAAgB,KAAK,EAAE;;IAIhC,eAAe,GAAA;AACb,QAAA,IAAG,CAAC,IAAI,CAAC,iBAAiB,EAAE,EAAC;AAC3B,YAAA,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,6BAA6B,CAAC;YACvD;;QAEF,MAAM,UAAU,GAAG,IAAI,CAAC,YAAY,CAAC,eAAe,CAAC,IAAI,CAAC,eAAe,EAAE,IAAI,CAAC,iBAAiB,EAAE,IAAI,CAAC,gBAAgB,CAAC;AACzH,QAAA,IAAI,UAAU,YAAY,UAAU,EAAE;YACpC,UAAU,CAAC,SAAS,CAAC;AACnB,gBAAA,IAAI,EAAE,CAAC,QAAoC,KAAI;AAC5C,oBAAA,IAAI,YAAY,GAAG,QAAQ,CAAC,IAAK,CAAC,GAAG,CAAC,CAAC,IAAS,MAAM;wBACrD,SAAS,EAAE,IAAI,CAAC,SAAS;wBACzB,QAAQ,EAAE,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC;wBACnC,UAAU,EAAE,IAAI,CAAC;AAClB,qBAAA,CAAC,CAAC;AACH,oBAAA,IAAI,CAAC,oBAAoB,CAAC,YAAY,CAAC;iBACxC;AACD,gBAAA,KAAK,EAAE,CAAC,GAAG,KAAK,IAAI,CAAC,YAAY,CAAC,gBAAgB,CAAC,GAAG,EAAE,iBAAiB;AAC1E,aAAA,CAAC;;aACG;AACH,YAAA,IAAI,CAAC,oBAAoB,CAAC,UAAU,CAAC;;;AAInC,IAAA,oBAAoB,CAAC,UAAwB,EAAA;AACnD,QAAA,IAAI,CAAC,cAAc,GAAG,CAAC,GAAG,UAAU,CAAC;QACrC,IAAG,IAAI,CAAC,cAAc,CAAC,MAAM,GAAG,CAAC,EAAC;YAChC,IAAI,CAAC,YAAY,CAAC,SAAS,CAAC,IAAI,CAAC,cAAc,CAAC;;AAElD,QAAA,IAAI,CAAC,oBAAoB,GAAC,CAAC,GAAG,IAAI,CAAC,YAAY,CAAC,oBAAoB,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;AAC1F,QAAA,MAAM,aAAa,GAA2B,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,UAAU,CAAC;AACzF,QAAA,IAAI,aAAa,EAAE;AACjB,YAAA,IAAI,CAAC,QAAQ,CAAC,aAAa,CAAC,SAAS,CAAC;;aACjC;AACL,YAAA,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,6BAA6B,CAAC;;;AAI3D,IAAA,QAAQ,CAAC,cAAsB,EAAA;AAC7B,QAAA,MAAM,UAAU,GAA2B,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,SAAS,KAAK,cAAc,CAAC;QACxG,IAAG,CAAC,UAAU,EAAC;YACb,IAAI,CAAC,YAAY,CAAC,SAAS,CAAC,OAAO,EAAC,4BAA4B,EAAC,gCAAgC,CAAC;YAClG;;AAEF,QAAA,IAAI,QAAQ,GAAmB,UAAU,CAAC,QAAQ;AAClD,QAAA,IAAI,CAAC,eAAe,GAAG,QAAQ,CAAC;aAC3B,GAAG,CAAC,IAAI,IAAI,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,GAAQ,KAAK,GAAG,CAAC,KAAK,KAAK,IAAI,CAAC,KAAK,CAAC;aACrE,MAAM,CAAC,CAAC,GAAG,KAA6B,GAAG,KAAK,SAAS;AACzD,aAAA,MAAM,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC,mBAAmB,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC;QAC3D,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC,YAAY,CAAC,uBAAuB,CAAC,IAAI,CAAC,mBAAmB,CAAC,MAAM,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC;AACrH,QAAA,IAAI,CAAC,WAAW,GAAG,QAAQ,CAAC,WAAW;AACvC,QAAA,IAAI,CAAC,kBAAkB,GAAG,QAAQ,CAAC,kBAAkB;AACrD,QAAA,IAAI,CAAC,gBAAgB,GAAG,QAAQ,CAAC,gBAAgB;AACjD,QAAA,IAAI,CAAC,6BAA6B,CAAC,aAAa,GAAG,CAAC,IAAI,QAAQ,CAAC,aAAa,IAAI,EAAE,CAAC,CAAC;AACtF,QAAA,IAAI,CAAC,EAAE,CAAC,aAAa,GAAG,CAAC,IAAI,QAAQ,CAAC,aAAa,IAAI,EAAE,CAAC,CAAC;AAC3D,QAAA,IAAI,CAAC,QAAQ,GAAG,KAAK;AACrB,QAAA,IAAI,CAAC,EAAE,CAAC,YAAY,EAAE;AACtB,QAAA,IAAI,CAAC,QAAQ,GAAG,IAAI;QACpB,IAAI,CAAC,6BAA6B,CAAC,OAAO,GAAG,EAAC,GAAG,QAAQ,CAAC,OAAO,EAAC;QAClE,IAAI,CAAC,EAAE,CAAC,OAAO,GAAG,EAAC,GAAG,QAAQ,CAAC,OAAO,EAAC;QACvC,IAAI,CAAC,EAAE,CAAC,eAAe,GAAG,QAAQ,CAAC,UAAU;QAC7C,IAAI,CAAC,EAAE,CAAC,iBAAiB,GAAG,QAAQ,CAAC,YAAY;AACjD,QAAA,IAAI,CAAC,6BAA6B,GAAG,cAAc;AACnD,QAAA,IAAI,CAAC,YAAY,CAAC,SAAS,CAAC,MAAM,EAAC,qBAAqB,EAAC,mBAAmB,IAAI,CAAC,6BAA6B,CAAA,oBAAA,CAAsB,CAAC;AACrI,QAAA,IAAI,CAAC,cAAc,GAAG,KAAK;AAC3B,QAAA,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,6BAA6B,CAAC;;AAGzD,IAAA,UAAU,CAAC,SAAiB,EAAA;AAC1B,QAAA,IAAI,QAAQ,GAAmB,IAAI,CAAC,YAAY,CAAC,gBAAgB,CAAC,IAAI,CAAC,EAAE,EAAE,IAAI,CAAC,gBAAgB,EAAE,IAAI,CAAC,WAAW,EAAE,IAAI,CAAC,kBAAkB,EAAE,IAAI,CAAC,yCAAyC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AACvM,QAAA,IAAI,OAAO,GAAe;AACxB,YAAA,UAAU,EAAE,KAAK;AACjB,YAAA,SAAS,EAAE,SAAS;AACpB,YAAA,QAAQ,EAAE;SACX;AACD,QAAA,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,OAAO,CAAC;QACjC,IAAI,CAAC,YAAY,CAAC,SAAS,CAAC,IAAI,CAAC,cAAc,CAAC;AAChD,QAAA,IAAI,CAAC,oBAAoB,GAAC,CAAC,GAAG,IAAI,CAAC,YAAY,CAAC,oBAAoB,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;AAC1F,QAAA,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC;;AAGnB,IAAA,UAAU,CAAC,SAAiB,EAAA;AAC1B,QAAA,MAAM,KAAK,GAAG,IAAI,CAAC,cAAc,CAAC,SAAS,CAAC,CAAC,IAAI,CAAC,CAAC,SAAS,KAAK,SAAS,CAAC;AAC3E,QAAA,IAAI,KAAK,KAAK,CAAC,CAAC,EAAE;YAChB,IAAI,CAAC,YAAY,CAAC,SAAS,CAAC,OAAO,EAAC,0BAA0B,EAAE,CAA6D,2DAAA,CAAA,CAAC;;QAEhI,IAAI,CAAC,cAAc,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC;AACpC,QAAA,IAAI,CAAC,oBAAoB,GAAC,CAAC,GAAG,IAAI,CAAC,YAAY,CAAC,oBAAoB,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;AAC1F,QAAA,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC;;AAGnB,IAAA,aAAa,CAAC,KAAqD,EAAA;QACjE,MAAM,KAAK,GAAG,IAAI,CAAC,cAAc,CAAC,SAAS,CAAC,CAAC,IAAI,CAAC,CAAC,SAAS,KAAK,KAAK,CAAC,YAAY,CAAC;AACpF,QAAA,IAAI,KAAK,KAAK,CAAC,CAAC,EAAE;YAChB,IAAI,CAAC,YAAY,CAAC,SAAS,CAAC,OAAO,EAAC,gCAAgC,EAAE,CAAmE,iEAAA,CAAA,CAAC;;QAE5I,IAAI,CAAC,cAAc,CAAC,KAAK,CAAC,CAAC,SAAS,GAAG,KAAK,CAAC,YAAY;QACzD,IAAI,CAAC,YAAY,CAAC,SAAS,CAAC,IAAI,CAAC,cAAc,CAAC;AAChD,QAAA,IAAI,CAAC,oBAAoB,GAAC,CAAC,GAAG,IAAI,CAAC,YAAY,CAAC,oBAAoB,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;AAC1F,QAAA,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC;;AAGnB,IAAA,cAAc,CAAC,SAAiB,EAAA;AAC9B,QAAA,MAAM,KAAK,GAAG,IAAI,CAAC,cAAc,CAAC,SAAS,CAAC,CAAC,IAAI,CAAC,CAAC,SAAS,KAAK,SAAS,CAAC;AAC3E,QAAA,IAAI,KAAK,KAAK,CAAC,CAAC,EAAE;YAChB,IAAI,CAAC,YAAY,CAAC,SAAS,CAAC,OAAO,EAAC,sBAAsB,EAAE,CAAmD,iDAAA,CAAA,CAAC;;AAElH,QAAA,IAAI,QAAQ,GAAmB,IAAI,CAAC,YAAY,CAAC,gBAAgB,CAAC,IAAI,CAAC,EAAE,EAAE,IAAI,CAAC,gBAAgB,EAAE,IAAI,CAAC,WAAW,EAAE,IAAI,CAAC,kBAAkB,EAAE,IAAI,CAAC,yCAAyC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACvM,IAAI,CAAC,cAAc,CAAC,KAAK,CAAC,CAAC,QAAQ,GAAG,QAAQ;AAC9C,QAAA,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC;;AAGnB,IAAA,SAAS,CAAC,UAAkB,EAAA;QAC1B,IAAI,SAAS,GAAW,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,cAAc,CAAC;AAC3D,QAAA,QAAO,IAAI,CAAC,eAAe;YACzB,KAAK,iBAAiB,CAAC,cAAc;gBACnC,cAAc,CAAC,OAAO,CAAC,IAAI,CAAC,gBAAgB,EAAE,SAAS,CAAC;gBAC1D;YACA,KAAK,iBAAiB,CAAC,YAAY;gBACjC,YAAY,CAAC,OAAO,CAAC,IAAI,CAAC,gBAAgB,EAAE,SAAS,CAAC;gBACxD;YACA,KAAK,iBAAiB,CAAC,eAAe;gBACpC,MAAM,QAAQ,GAAG,IAAI,CAAC,YAAY,CAAC,mBAAmB,CAAC,IAAI,CAAC,cAAc,EAAE,IAAI,CAAC,kBAAkB,EAAE,IAAI,CAAC,gBAAgB,CAAC;gBAC3H,QAAQ,CAAC,SAAS,CAAC;AACjB,oBAAA,IAAI,EAAE,CAAC,QAA2B,KAAI;AACpC,wBAAA,IAAI,CAAC,YAAY,CAAC,UAAU,CAAC;qBAC9B;AACD,oBAAA,KAAK,EAAE,CAAC,GAAG,KAAK,IAAI,CAAC,YAAY,CAAC,gBAAgB,CAAC,GAAG,EAAE,kBAAkB;AAC3E,iBAAA,CAAC;gBACJ;AACA,YAAA;gBACE,IAAI,CAAC,YAAY,CAAC,SAAS,CAAC,OAAO,EAAC,iBAAiB,EAAE,sDAAsD,CAAC;gBAC9G;;AAEJ,QAAA,IAAI,CAAC,YAAY,CAAC,UAAU,CAAC;;AAE/B,IAAA,YAAY,CAAC,UAAkB,EAAA;QAC7B,QAAO,UAAU;YACf,KAAK,CAAC;gBACJ,IAAI,CAAC,YAAY,CAAC,SAAS,CAAC,MAAM,EAAC,oBAAoB,EAAE,CAAkC,gCAAA,CAAA,CAAC;AAC5F,gBAAA,IAAI,CAAC,cAAc,GAAG,KAAK;gBAC3B;YACF,KAAK,CAAC;gBACJ,IAAI,CAAC,YAAY,CAAC,SAAS,CAAC,MAAM,EAAC,yBAAyB,EAAE,CAAkC,gCAAA,CAAA,CAAC;gBACjG;YACF,KAAK,CAAC;gBACJ,IAAI,CAAC,YAAY,CAAC,SAAS,CAAC,MAAM,EAAC,yBAAyB,EAAE,CAAmC,iCAAA,CAAA,CAAC;gBAClG;YACF,KAAK,CAAC;gBACJ,IAAI,CAAC,YAAY,CAAC,SAAS,CAAC,MAAM,EAAC,mBAAmB,EAAE,CAA6B,2BAAA,CAAA,CAAC;gBACtF;;;AAIN,IAAA,cAAc,CAAC,KAAyB,EAAA;AACtC,QAAA,IAAG,CAAC,IAAI,CAAC,QAAQ,EAAC;YAChB;;AAEF,QAAA,IAAI,CAAC,IAAI,CAAC,2BAA2B,EAAE;YACrC;;AAEF,QAAA,IAAI,CAAC,6BAA6B,GAAG,KAAK,CAAC;AAC3C,QAAA,IAAI,KAAK,CAAC,IAAI,IAAI,IAAI,IAAI,KAAK,CAAC,IAAI,KAAK,SAAS,EAAE;AAClD,YAAA,IAAI,CAAC,kBAAkB,GAAG,KAAK,CAAC,IAAI;;QAEtC,IAAI,KAAK,CAAC,KAAK,IAAI,IAAI,IAAI,KAAK,CAAC,KAAK,KAAK,SAAS,IAAI,KAAK,CAAC,IAAI,IAAI,IAAI,IAAI,KAAK,CAAC,IAAI,KAAK,SAAS,EAAE;YACtG,IAAI,CAAC,WAAW,GAAG,KAAK,CAAC,KAAK,GAAG,KAAK,CAAC,IAAI;;AAE7C,QAAA,IAAI,mCAAmC,GAAG,IAAI,CAAC,yCAAyC,CAAC,IAAI,CAAC,6BAA6B,CAAC,OAAO,CAAC,CAAC;AACrI,QAAA,mCAAmC,GAAC,IAAI,CAAC,yBAAyB,CAAC,mCAAmC,CAAC;AACvG,QAAA,MAAM,WAAW,GAAuB;AACtC,YAAA,IAAI,EAAE,IAAI,CAAC,WAAW;AACtB,YAAA,QAAQ,EAAE,IAAI,CAAC,kBAAkB;AACjC,YAAA,IAAI,EAAE,IAAI,CAAC,6BAA6B,CAAC,aAAa;YACtD,MAAM,EAAE,mCAAmC;AAC3C,YAAA,YAAY,EAAE,IAAI,CAAC,gBAAgB;AACnC,YAAA,OAAO,EAAE,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,GAAG,IAAI,GAAG,CAAC,KAAK,CAAC;YACjD,UAAU,EAAE,IAAI,CAAC,UAAU;YAC3B,YAAY,EAAE,IAAI,CAAC,YAAY;YAC/B,WAAW,EAAE,IAAI,CAAC;SACnB;AACD,QAAA,IAAI,CAAC,YAAY,CAAC,cAAc,CAAC,IAAI,CAAC,aAAa,EAAE,WAAW,CAAC,CAAC,SAAS,CAAC;AAC1E,YAAA,IAAI,EAAE,CAAC,QAA2C,KAAK,IAAI,CAAC,uBAAuB,CAAC,QAAQ,CAAC,IAAK,CAAC;AACnG,YAAA,KAAK,EAAE,CAAC,GAAG,KAAK,IAAI,CAAC,YAAY,CAAC,gBAAgB,CAAC,GAAG,EAAE,eAAe;AACxE,SAAA,CAAC;;AAGI,IAAA,yCAAyC,CAAC,OAAY,EAAE,cAAA,GAAyB,CAAC,CAAC,EAAA;QACzF,IAAI,IAAI,CAAC,gBAAgB,KAAK,EAAE,EAAE;AAChC,YAAA,IAAI,CAAC,gBAAgB,GAAG,IAAI,CAAC;;QAE/B,IAAI,mCAAmC,GAAG,EAAE,GAAG,OAAO,EAAE,CAAC;QACzD,IAAI,mCAAmC,CAAC,cAAc,CAAC,QAAQ,CAAC,EAAE;AAChE,YAAA,OAAO,mCAAmC,CAAC,QAAQ,CAAC,CAAC;;AAEvD,QAAA,IAAI,CAAC,wBAAwB,CAAC,mCAAmC,EAAE,cAAc,CAAC;QAClF,OAAO,mCAAmC,CAAC;;AAGrC,IAAA,wBAAwB,CAAC,mCAAwC,EAAE,cAAA,GAAyB,CAAC,CAAC,EAAA;AACpG,QAAA,IAAI,mCAAmC,CAAC,cAAc,CAAC,UAAU,CAAC,EAAE;YAClE,MAAM,cAAc,GAAG,mCAAmC,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC;YACzE,IAAI,UAAU,GAAmB,IAAI;YACrC,IAAG,cAAc,GAAC,CAAC,IAAI,cAAc,GAAC,CAAC,EAAC;AACtC,gBAAA,UAAU,GAAG,cAAc,CAAC,KAAK;;iBAC5B;gBACL,QAAQ,cAAc;oBACpB,KAAK,CAAC;wBACJ,UAAU,GAAG,IAAI;wBACjB;oBACF,KAAK,CAAC;wBACJ,UAAU,GAAG,IAAI;wBACjB;oBACF,KAAK,CAAC;wBACJ,UAAU,GAAG,KAAK;wBAClB;;;YAGN,IAAI,CAAC,mCAAmC,CAAC,cAAc,CAAC,OAAO,CAAC,EAAE;gBAC9D,mCAAmC,CAAC,OAAO,CAAC,GAAG;AAC3C,oBAAA;AACI,wBAAA,OAAO,EAAE,IAAI;AACb,wBAAA,WAAW,EAAE,IAAI;AACjB,wBAAA,UAAU,EAAE;AACf;iBACJ;;YAEL,MAAM,QAAQ,GAAG,mCAAmC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;AAChE,YAAA,IAAI,UAAU,KAAK,IAAI,EAAE;AACrB,gBAAA,QAAQ,CAAC,SAAS,GAAG,IAAI;AACzB,gBAAA,QAAQ,CAAC,KAAK,GAAG,IAAI,CAAC,oBAAoB;;AACvC,iBAAA,IAAI,UAAU,KAAK,KAAK,EAAE;AAC7B,gBAAA,QAAQ,CAAC,QAAQ,GAAG,KAAK;AACzB,gBAAA,QAAQ,CAAC,SAAS,GAAG,OAAO;AAC5B,gBAAA,QAAQ,CAAC,KAAK,GAAG,IAAI,CAAC,oBAAoB;;AACvC,iBAAA,IAAI,UAAU,KAAK,IAAI,EAAE;AAC5B,gBAAA,QAAQ,CAAC,KAAK,GAAG,IAAI;AACrB,gBAAA,QAAQ,CAAC,SAAS,GAAG,IAAI;;;;AAKjC,IAAA,yBAAyB,CAAC,WAAgB,EAAA;QACxC,IAAI,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC,MAAM,KAAI;YACpC,IAAI,MAAM,CAAC,QAAQ,KAAK,QAAQ,CAAC,IAAI,EAAE;gBACrC,IAAI,WAAW,CAAC,cAAc,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE;AAC5C,oBAAA,MAAM,YAAY,GAAG,WAAW,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK;oBACvD,IAAG,YAAY,KAAK,IAAI,IAAI,YAAY,YAAY,IAAI,EAAC;wBACvD,MAAM,OAAO,GAAG,IAAI,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,YAAY,CAAC,WAAW,EAAE,EAAE,YAAY,CAAC,QAAQ,EAAE,EAAE,YAAY,CAAC,OAAO,EAAE,CAAC,CAAC;AAC/G,wBAAA,WAAW,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,GAAC,OAAO;;;;AAIlD,SAAC,CAAC;AACF,QAAA,OAAO,WAAW;;AAGpB,IAAA,uBAAuB,CAAC,IAAyB,EAAA;QAC/C,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC;QACtB,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,YAAY,CAAC;QACtC,IAAI,CAAC,uBAAuB,GAAG,IAAI,CAAC,uBAAuB,CAAC;QAC5D,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,IAAI,CAAC;;AAG/B,IAAA,YAAY,CAAC,EAAS,EAAE,QAAiB,KAAK,EAAE,mBAA4B,KAAK,EAAA;AAC/E,QAAA,IAAI,UAAU,GAAG,IAAI,CAAC,iBAAiB,CAAC,EAAE,EAAE,IAAI,CAAC,gBAAgB,EAAE,KAAK,CAAC;QACzE,IAAG,UAAU,EAAC;YACZ,IAAG,CAAC,gBAAgB,EAAC;AACnB,gBAAA,IAAI,CAAC,yCAAyC,GAAG,EAAE;AACnD,gBAAA,KAAK,MAAM,GAAG,IAAI,EAAE,CAAC,OAAO,EAAE;oBAC5B,IAAI,EAAE,CAAC,OAAO,CAAC,cAAc,CAAC,GAAG,CAAC,EAAE;wBAClC,MAAM,OAAO,GAAG,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC;AAC/B,wBAAA,IAAI,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE;AAC1B,4BAAA,OAAO,CAAC,OAAO,CAAC,MAAM,IAAG;AACvB,gCAAA,MAAM,CAAC,KAAK,GAAG,IAAI,CAAC;AACtB,6BAAC,CAAC;;6BACG;AACL,4BAAA,OAAO,CAAC,KAAK,GAAG,IAAI,CAAC;;;;gBAI3B,IAAI,OAAO,GAAG,EAAC,GAAG,IAAI,CAAC,EAAE,CAAC,OAAO,EAAC;AAClC,gBAAA,EAAE,CAAC,OAAO,EAAE,OAAO,CACjB,OAAO,IAAG;AACR,oBAAA,EAAE,CAAC,MAAM,CAAC,IAAI,EAAE,OAAO,CAAC,KAAK,EAAE,OAAO,CAAC,SAAS,CAAC;AACnD,iBAAC,CACF;AACD,gBAAA,IAAI,CAAC,EAAE,CAAC,OAAO,GAAG,OAAO;;AAE3B,YAAA,IAAI,CAAC,gBAAgB,GAAG,IAAI;AAC5B,YAAA,EAAE,CAAC,YAAY,CAAC,EAAE,EAAC,EAAE,CAAC;;;AAI1B,IAAA,UAAU,CAAC,EAAS,EAAE,KAAA,GAAiB,KAAK,EAAA;QAC1C,IAAI,UAAU,GAAG,IAAI,CAAC,eAAe,CAAC,EAAE,EAAE,KAAK,CAAC;QAChD,IAAG,UAAU,EAAC;AACZ,YAAA,EAAE,CAAC,aAAa,GAAG,EAAE;YACrB,EAAE,CAAC,YAAY,EAAE;;;AAGrB,IAAA,eAAe,CAAC,EAAS,EAAE,KAAA,GAAiB,KAAK,EAAA;QAC/C,IAAI,UAAU,GAAY,KAAK;AAC/B,QAAA,MAAM,QAAQ,IAAI,EAAE,CAAC,aAAa,IAAI,EAAE,CAAC,aAAa,CAAC,MAAM,GAAG,CAAC,CAAC;AAClE,QAAA,IAAG,KAAK,IAAI,QAAQ,EAAC;YACnB,UAAU,GAAG,IAAI;;AAEnB,QAAA,OAAO,UAAU;;AAEnB,IAAA,iBAAiB,CAAC,EAAS,EAAE,gBAA6B,EAAE,QAAgB,KAAK,EAAA;QAC/E,IAAI,UAAU,GAAY,KAAK;QAC/B,MAAM,mCAAmC,GAAG,IAAI,CAAC,yCAAyC,CAAC,EAAE,CAAC,OAAO,CAAC;QACtG,MAAM,UAAU,GAAG,IAAI,CAAC,UAAU,CAAC,mCAAmC,CAAC;AACvE,QAAA,MAAM,eAAe,IAAI,gBAAgB,IAAI,gBAAgB,CAAC,IAAI,EAAE,KAAK,EAAE,CAAC;AAC5E,QAAA,IAAG,KAAK,IAAI,UAAU,IAAI,eAAe,EAAC;YACxC,UAAU,GAAG,IAAI;;AAEnB,QAAA,OAAO,UAAU;;AAGnB;;;;;;;;;;AAUG;AACK,IAAA,UAAU,CAAC,WAAgB,EAAA;AACjC,QAAA,KAAK,MAAM,UAAU,IAAI,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC,EAAE;YAC/C,MAAM,aAAa,GAAG,WAAW,CAAC,UAAU,CAAC,CAAC;AAC9C,YAAA,KAAK,MAAM,UAAU,IAAI,aAAa,EAAE;AACpC,gBAAA,IAAI,UAAU,CAAC,KAAK,KAAK,IAAI,IAAI,UAAU,CAAC,KAAK,KAAK,EAAE,EAAE;oBACtD,OAAO,IAAI,CAAC;;;;QAIxB,OAAO,KAAK,CAAC;;AAGf,IAAA,cAAc,CAAC,GAAQ,EAAE,UAAA,GAAsB,KAAK,EAAA;QAClD,OAAO,IAAI,CAAC,YAAY,CAAC,cAAc,CAAC,GAAG,EAAE,UAAU,CAAC;;AAG1D,IAAA,yBAAyB,CAAC,aAAqB,EAAA;QAC7C,OAAO,IAAI,CAAC,2BAA2B,CAAC,aAAa,CAAC,IAAI,EAAE,CAAC;;AAG/D,IAAA,0BAA0B,CAAC,iBAAoC,EAAA;AAC7D,QAAA,OAAO,uBAAuB,CAAC,iBAAiB,CAAC;;AAGnD,IAAA,iBAAiB,CAAC,QAAkB,EAAA;AAClC,QAAA,OAAO,cAAc,CAAC,QAAQ,CAAC;;AAGjC;;;;;AAKG;IACH,wBAAwB,CAAC,UAAkB,EAAE,cAAmC,EAAA;AAC9E,QAAA,MAAM,OAAO,GAAG,EAAE,GAAG,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC;AACvC,QAAA,IAAI,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC,EAAE;YACnC,OAAO,CAAC,UAAU,CAAsB,CAAC,OAAO,CAAC,QAAQ,IAAG;AACzD,gBAAA,QAAQ,CAAC,KAAK,GAAG,cAAc,CAAC,GAAG,CAAC,KAAK,IAAI,KAAK,CAAC,KAAK,CAAC,CAAC;AAC9D,aAAC,CAAC;;AACC,aAAA,IAAI,OAAO,CAAC,UAAU,CAAC,EAAE;YAC5B,MAAM,QAAQ,GAAG,OAAO,CAAC,UAAU,CAAmB,CAAC;AACvD,YAAA,QAAQ,CAAC,KAAK,GAAG,cAAc,CAAC,GAAG,CAAC,KAAK,IAAI,KAAK,CAAC,KAAK,CAAC,CAAC;;QAE9D,IAAI,CAAC,EAAE,CAAC,OAAO,GAAG,OAAO,CAAC;AAC1B,QAAA,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC;;AAGpB;;;;;;;;AAQG;AACH,IAAA,mCAAmC,CAAC,aAAqB,EAAA;AACvD,QAAA,IAAI,iBAAiB,GAAG,CAAC,CAAC;QAC1B,IAAI,IAAI,CAAC,yCAAyC,CAAC,aAAa,CAAC,EAAE;YAC/D,iBAAiB,GAAG,IAAI,CAAC,yCAAyC,CAAC,aAAa,CAAC,CAAC,MAAM,CAAC;;QAE7F,OAAO,CAAA,EAAG,iBAAiB,CAAI,CAAA,EAAA,IAAI,CAAC,6CAA6C,CAAA,CAAE,CAAC;;AAGtF,IAAA,kBAAkB,CAAC,MAA8B,EAAE,OAAA,GAAe,IAAI,EAAA;QACpE,IAAI,CAAC,YAAY,CAAC,kBAAkB,CAAC,MAAM,EAAE,OAAO,CAAC;;AAGvD;;;;;;;AAOG;IACH,uBAAuB,CAAC,WAA4B,EAAE,KAAU,EAAA;AAC9D,QAAA,IAAI,WAAW,CAAC,0BAA0B,IAAI,WAAW,CAAC,0BAA0B,CAAC,MAAM,GAAG,CAAC,EAAE;AAC7F,YAAA,MAAM,OAAO,GAAG,IAAI,CAAC,yBAAyB,CAAC,WAAW,CAAC,0BAA0B,CAAC,CAAC;AACvF,YAAA,OAAO,OAAO,CAAC,IAAI,CAAC,MAAM,IAAI,MAAM,CAAC,KAAK,KAAK,KAAK,CAAC,CAAC;;QAE1D,OAAO,IAAI,CAAC;;AAGd,IAAA,oBAAoB,CAAC,KAAiB,EAAA;AACpC,QAAA,IAAG,IAAI,CAAC,+BAA+B,GAAC,CAAC,EAAE;AACzC,YAAA,MAAM,WAAW,GAAI,KAAK,CAAC,MAAsB,CAAC,SAAS;AAC3D,YAAA,IAAI,CAAC,iBAAiB,GAAG,UAAU,CAAC,MAAK;gBACvC,SAAS,CAAC,SAAS,CAAC,SAAS,CAAC,WAAW,CAAC,CAAC,IAAI,CAAC,MAAK;AACnD,oBAAA,IAAI,CAAC,YAAY,CAAC,WAAW,EAAE;oBAC/B,IAAI,CAAC,YAAY,CAAC,SAAS,CAAC,MAAM,EAAE,qBAAqB,EAAE,qDAAqD,CAAC;AACnH,iBAAC,CAAC,CAAC,KAAK,CAAC,GAAG,IAAG;AACb,oBAAA,IAAI,CAAC,YAAY,CAAC,WAAW,EAAE;AAC/B,oBAAA,IAAI,CAAC,YAAY,CAAC,SAAS,CAAC,OAAO,EAAE,qBAAqB,EAAE,CAAA,8DAAA,EAAiE,GAAG,CAAA,CAAE,CAAC;AACrI,iBAAC,CAAC;AACJ,aAAC,EAAE,IAAI,CAAC,+BAA+B,GAAC,IAAI,CAAE;;;IAIlD,qBAAqB,GAAA;AACnB,QAAA,IAAG,IAAI,CAAC,+BAA+B,GAAC,CAAC,EAAE;AACzC,YAAA,YAAY,CAAC,IAAI,CAAC,iBAAiB,CAAC;;;AAIxC,IAAA,4BAA4B,CAAC,mBAAwC,EAAA;AACnE,QAAA,OAAO,yBAAyB,CAAC,mBAAmB,CAAC;;AAEvD,IAAA,0BAA0B,CAAC,iBAAoC,EAAA;AAC7D,QAAA,OAAO,uBAAuB,CAAC,iBAAiB,CAAC;;AAGnD,IAAA,qBAAqB,CAAC,KAAU,EAAA;QAC9B,OAAO,IAAI,CAAC,oBAAoB,CAAC,QAAQ,CAAC,KAAK,CAAC;;IAGlD,kBAAkB,CAAC,KAAU,EAAE,KAAU,EAAA;AACvC,QAAA,IAAI,KAAK,CAAC,OAAO,EAAE;AACf,YAAA,IAAI,CAAC,oBAAoB,CAAC,IAAI,CAAC,KAAK,CAAC;;AAClC,aAAA;AACH,YAAA,IAAI,CAAC,oBAAoB,GAAG,IAAI,CAAC,oBAAoB,CAAC,MAAM,CAAC,UAAU,IAAI,UAAU,KAAK,KAAK,CAAC;;AAEpG,QAAA,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAAC;AAC5B,YAAA,KAAK,EAAE,KAAK;YACZ,QAAQ,EAAE,KAAK,CAAC;AACjB,SAAA,CAAC;;AAEJ,IAAA,SAAS,CAAC,KAA+B,EAAA;AACvC,QAAA,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC;AACpB,YAAA,KAAK,EAAE,KAAK,CAAC,IAAI,CAAC,KAAK;YACvB,OAAO,EAAE,KAAK,CAAC;AAChB,SAAA,CAAC;;AAEJ,IAAA,WAAW,CAAC,KAAiC,EAAA;AAC3C,QAAA,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC;AACtB,YAAA,KAAK,EAAE,KAAK,CAAC,IAAI,CAAC,KAAK;YACvB,OAAO,EAAE,KAAK,CAAC;AAChB,SAAA,CAAC;;AAEJ,IAAA,UAAU,CAAC,KAAqB,EAAA;QAC9B,IAAI,CAAC,WAAW,GAAG,KAAK,CAAC,IAAI,GAAG,KAAK,CAAC,KAAK,GAAG,KAAK,CAAC,IAAI,GAAG,CAAC;AAC5D,QAAA,IAAI,CAAC,kBAAkB,GAAG,KAAK,CAAC,IAAI,GAAG,KAAK,CAAC,IAAI,GAAG,CAAC;;IAGvD,kBAAkB,GAAA;QAChB,IAAI,QAAQ,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,MAAM,IAAG;AACvC,YAAA,MAAM,UAAU,GAAG,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,cAAc,IAAI,cAAc,CAAC,KAAK,KAAK,MAAM,CAAC,KAAK,CAAC,IAAI,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAAC,cAAc,IAAI,cAAc,CAAC,KAAK,KAAK,MAAM,CAAC,KAAK,CAAC;YAC/L,MAAM,gBAAgB,GAAI,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAAC,cAAc,IAAI,cAAc,CAAC,KAAK,KAAK,MAAM,CAAC,KAAK,CAAC;YAChH,OAAO;gBACL,KAAK,EAAE,MAAM,CAAC,KAAK;gBACnB,MAAM,EAAE,MAAM,CAAC,MAAM;AACrB,gBAAA,QAAQ,EAAE,UAAU;AACpB,gBAAA,cAAc,EAAE,gBAAgB;gBAChC,qBAAqB,EAAE,MAAM,CAAC,qBAAqB;AACnD,gBAAA,6BAA6B,EAAE,CAAC,MAAM,CAAC,kCAAkC;gBACzE,mBAAmB,EAAE,MAAM,CAAC,mBAAmB;AAC/C,gBAAA,2BAA2B,EAAE,CAAC,MAAM,CAAC,gCAAgC;gBACrE,iBAAiB,EAAE,MAAM,CAAC,iBAAiB;AAC3C,gBAAA,yBAAyB,EAAE,CAAC,MAAM,CAAC;aACpC;AACH,SAAC,CAAC;QACF,QAAQ,CAAC,KAAK,EAAE,CAAC,IAAI,CAAC,CAAC,CAAM,EAAE,CAAM,KAAI;YACvC,MAAM,MAAM,GAAG,CAAC,CAAC,MAAM,CAAC,WAAW,EAAE;YACrC,MAAM,MAAM,GAAG,CAAC,CAAC,MAAM,CAAC,WAAW,EAAE;AACrC,YAAA,OAAO,MAAM,CAAC,aAAa,CAAC,MAAM,CAAC;AACrC,SAAC,CAAC;AACF,QAAA,IAAI,CAAC,eAAe,GAAG,CAAC,GAAG,QAAQ,CAAC;AACpC,QAAA,IAAI,CAAC,kBAAkB,GAAG,IAAI,CAAC,eAAe;AAC9C,QAAA,IAAI,CAAC,kBAAkB,GAAC,IAAI;;AAG9B,IAAA,uBAAuB,CAAC,eAAkC,EAAA;AACxD,QAAA,MAAM,eAAe,GAAG,IAAI,CAAC,EAAE,CAAC,OAAQ;AACxC,QAAA,MAAM,aAAa,GAAG,IAAI,GAAG,EAAU;AAEvC,QAAA,IAAI,CAAC,mBAAmB,CAAC,OAAO,CAAC,GAAG,IAAI,aAAa,CAAC,GAAG,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;AACrE,QAAA,eAAe,CAAC,OAAO,CAAC,GAAG,IAAI,aAAa,CAAC,GAAG,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;QAE5D,MAAM,YAAY,GAAsB,EAAE;AAC1C,QAAA,eAAe,CAAC,OAAO,CAAC,GAAG,IAAG;YAC5B,IAAI,aAAa,CAAC,GAAG,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE;AAChC,gBAAA,YAAY,CAAC,IAAI,CAAC,GAAG,CAAC;;AAE1B,SAAC,CAAC;AAEF,QAAA,eAAe,CAAC,OAAO,CAAC,GAAG,IAAG;YAC5B,MAAM,cAAc,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,KAAK,KAAK,GAAG,CAAC,KAAK,CAAC;YACpE,IAAI,cAAc,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,KAAK,KAAK,cAAc,CAAC,KAAK,CAAC,EAAE;AAC/E,gBAAA,YAAY,CAAC,IAAI,CAAC,cAAc,CAAC;;AAErC,SAAC,CAAC;AAEF,QAAA,IAAI,cAAc,GAAG,IAAI,CAAC,aAAa;QACvC,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC,YAAY,CAAC,uBAAuB,CAAC,YAAY,CAAC;QAE5E,IAAI,mBAAmB,GACrB,cAAc,CAAC,MAAM,KAAK,IAAI,CAAC,aAAa,CAAC,MAAM;YACnD,cAAc,CAAC,KAAK,CAAC,CAAC,OAAO,EAAE,KAAK,KAAK,OAAO,CAAC,KAAK,KAAK,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC;AAE7F,QAAA,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC,aAAa,CAAC,MAAM,CAC9C,MAAM,IAAI,CAAC,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAAC,aAAa,IAAI,aAAa,CAAC,KAAK,KAAK,MAAM,CAAC,KAAK,CAAC,CAChG;AAED,QAAA,IAAI,CAAC,8BAA8B,CAAC,IAAI,CAAC,eAAe,CAAC;QAEzD,IAAI,CAAC,mBAAmB,EAAE;AACxB,YAAA,IAAI,CAAC,QAAQ,GAAG,KAAK;YACrB,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,EAAE,IAAI,CAAC;YAC9B,UAAU,CAAC,MAAK;AACd,gBAAA,IAAI,CAAC,QAAQ,GAAG,IAAI;gBACpB,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,EAAE,IAAI,CAAC;aAC/B,EAAE,CAAC,CAAC;;;AAID,IAAA,8BAA8B,CAAC,aAAoB,EAAA;AACzD,QAAA,MAAM,UAAU,GAAG,CAAC,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,aAAa,EAAE,IAAI,CAAC,eAAe,EAAE,IAAI,CAAC,mBAAmB,CAAC;AACrG,QAAA,MAAM,kBAAkB,GAAG,IAAI,GAAG,CAAC,aAAa,CAAC,GAAG,CAAC,CAAC,IAAS,KAAK,CAAC,IAAI,CAAC,KAAK,EAAE;gBAC7E,qBAAqB,EAAE,IAAI,CAAC,qBAAqB;gBACjD,mBAAmB,EAAE,IAAI,CAAC,mBAAmB;gBAC7C,iBAAiB,EAAE,IAAI,CAAC,iBAAiB;gBACzC,KAAK,EAAE,IAAI,CAAC;aACf,CAAC,CAAC,CAAC;AACJ,QAAA,MAAM,aAAa,GAAG,IAAI,GAAG,EAAE,CAAC;AAChC,QAAA,UAAU,CAAC,OAAO,CAAC,CAAC,UAAU,KAAI;AAC9B,YAAA,UAAU,CAAC,OAAO,CAAC,CAAC,GAAQ,KAAI;AAC5B,gBAAA,IAAI,kBAAkB,CAAC,GAAG,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE;oBACpE,MAAM,UAAU,GAAG,kBAAkB,CAAC,GAAG,CAAC,GAAG,CAAC,KAAK,CAAC;oBACpD,IAAI,UAAU,EAAE;AACZ,wBAAA,GAAG,CAAC,qBAAqB,GAAG,UAAU,CAAC,qBAAqB;AAC5D,wBAAA,GAAG,CAAC,mBAAmB,GAAG,UAAU,CAAC,mBAAmB;AACxD,wBAAA,GAAG,CAAC,iBAAiB,GAAG,UAAU,CAAC,iBAAiB;AACpD,wBAAA,GAAG,CAAC,KAAK,GAAG,UAAU,CAAC,KAAK;AAC5B,wBAAA,aAAa,CAAC,GAAG,CAAC,GAAG,CAAC,KAAK,CAAC;;;AAGxC,aAAC,CAAC;AACN,SAAC,CAAC;;IAGJ,eAAe,GAAA;AACb,QAAA,IAAI,CAAC,gBAAgB;YACnB,CAAC,CAAC,IAAI,CAAC,uBAAuB,IAAI,IAAI,CAAC,uBAAuB,CAAC,IAAI,EAAE,CAAC,MAAM,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC;AAC3F,kBAAE;AACF,kBAAE,IAAI,CAAC,uBAAwB;AACnC,QAAA,IAAI,CAAC,eAAe,GAAC,IAAI;;AAE3B,IAAA,mBAAmB,CAAC,KAAU,EAAA;AAC5B,QAAA,IAAI,mCAAmC,GAAG,IAAI,CAAC,yCAAyC,CAAC,IAAI,CAAC,6BAA6B,CAAC,OAAO,EAAE,KAAK,CAAC,YAAY,CAAC,CAAC;AACzJ,QAAA,mCAAmC,GAAC,IAAI,CAAC,yBAAyB,CAAC,mCAAmC,CAAC;AACvG,QAAA,MAAM,oBAAoB,GAAY,CAAC,KAAK,CAAC,YAAY,KAAK,CAAC,IAAI,KAAK,CAAC,YAAY,KAAK,CAAC;AAC3F,cAAE;AACF,cAAE,KAAK,CAAC,YAAY;AACpB,QAAA,MAAM,WAAW,GAAwB;AACvC,YAAA,IAAI,EAAE,IAAI,CAAC,WAAW;AACtB,YAAA,QAAQ,EAAE,IAAI,CAAC,kBAAkB;AACjC,YAAA,IAAI,EAAE,IAAI,CAAC,6BAA6B,CAAC,aAAa;YACtD,MAAM,EAAE,mCAAmC;AAC3C,YAAA,YAAY,EAAE,IAAI,CAAC,gBAAgB;AACnC,YAAA,OAAO,EAAE,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,GAAG,IAAI,GAAG,CAAC,KAAK,CAAC;YACjD,UAAU,EAAE,IAAI,CAAC,UAAU;YAC3B,YAAY,EAAE,IAAI,CAAC,YAAY;YAC/B,WAAW,EAAE,IAAI,CAAC,WAAW;YAC7B,UAAU,EAAE,KAAK,CAAC,UAAU;AAC5B,YAAA,YAAY,EAAE,oBAAoB;YAClC,UAAU,EAAE,KAAK,CAAC,UAAU;YAC5B,QAAQ,EAAE,KAAK,CAAC;SACjB;AACD,QAAA,IAAI,CAAC,YAAY,CAAC,gBAAgB,CAAC,IAAI,CAAC,cAAe,EAAE,WAAW,CAAC,CAAC,SAAS,CAAC;AAC9E,YAAA,IAAI,EAAE,CAAC,QAA4B,KAAI;AACrC,gBAAA,IAAI,CAAC,YAAY,CAAC,YAAY,CAAC,QAAQ,CAAC,IAAK,EAAE,KAAK,CAAC,QAAQ,EAAE,mEAAmE,CAAC;AACnI,gBAAA,IAAI,CAAC,eAAe,GAAC,KAAK;aAC3B;AACD,YAAA,KAAK,EAAE,CAAC,GAAG,KAAK,IAAI,CAAC,YAAY,CAAC,gBAAgB,CAAC,GAAG,EAAE,oBAAoB;AAC7E,SAAA,CAAC;;wGA9xBO,eAAe,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAAR,sBAAA,EAAA,EAAA,EAAA,KAAA,EAAAS,kCAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAAf,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,eAAe,yyEC1D5B,sqmBA0Q4C,EAAA,MAAA,EAAA,CAAA,sdAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EDxOxC,YAAY,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAP,IAAA,CAAA,OAAA,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,gBAAA,EAAA,QAAA,EAAA,oBAAA,EAAA,MAAA,EAAA,CAAA,yBAAA,EAAA,kBAAA,EAAA,0BAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,OAAA,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EACZ,WAAW,EACX,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAD,IAAA,CAAA,oBAAA,EAAA,QAAA,EAAA,8MAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,eAAA,EAAA,QAAA,EAAA,2CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,kBAAA,EAAA,QAAA,EAAA,4EAAA,EAAA,MAAA,EAAA,CAAA,WAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,OAAA,EAAA,QAAA,EAAA,qDAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,SAAA,EAAA,gBAAA,CAAA,EAAA,OAAA,EAAA,CAAA,eAAA,CAAA,EAAA,QAAA,EAAA,CAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,WAAW,EACX,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAI,IAAA,CAAA,KAAA,EAAA,QAAA,EAAA,SAAA,EAAA,MAAA,EAAA,CAAA,eAAA,EAAA,aAAA,EAAA,OAAA,EAAA,YAAA,EAAA,YAAA,EAAA,iBAAA,EAAA,WAAA,EAAA,WAAA,EAAA,oBAAA,EAAA,qBAAA,EAAA,mBAAA,EAAA,qBAAA,EAAA,2BAAA,EAAA,+BAAA,EAAA,2BAAA,EAAA,uBAAA,EAAA,wBAAA,EAAA,qBAAA,EAAA,mBAAA,EAAA,eAAA,EAAA,kBAAA,EAAA,UAAA,EAAA,iBAAA,EAAA,eAAA,EAAA,mBAAA,EAAA,sBAAA,EAAA,0BAAA,EAAA,SAAA,EAAA,kBAAA,EAAA,eAAA,EAAA,YAAA,EAAA,MAAA,EAAA,gBAAA,EAAA,oBAAA,EAAA,cAAA,EAAA,gBAAA,EAAA,SAAA,EAAA,oBAAA,EAAA,aAAA,EAAA,cAAA,EAAA,iBAAA,EAAA,gBAAA,EAAA,eAAA,EAAA,YAAA,EAAA,iBAAA,EAAA,cAAA,EAAA,cAAA,EAAA,eAAA,EAAA,uBAAA,EAAA,sBAAA,EAAA,oBAAA,EAAA,aAAA,EAAA,YAAA,EAAA,aAAA,EAAA,kBAAA,EAAA,kBAAA,EAAA,oBAAA,EAAA,SAAA,EAAA,aAAA,EAAA,YAAA,EAAA,UAAA,EAAA,YAAA,EAAA,sBAAA,EAAA,YAAA,EAAA,gBAAA,EAAA,cAAA,EAAA,UAAA,EAAA,cAAA,EAAA,UAAA,EAAA,aAAA,EAAA,MAAA,EAAA,eAAA,EAAA,aAAA,EAAA,kBAAA,EAAA,kBAAA,EAAA,YAAA,EAAA,iBAAA,EAAA,OAAA,EAAA,SAAA,EAAA,OAAA,EAAA,MAAA,EAAA,cAAA,EAAA,WAAA,EAAA,WAAA,EAAA,eAAA,EAAA,WAAA,EAAA,kBAAA,EAAA,WAAA,CAAA,EAAA,OAAA,EAAA,CAAA,4BAAA,EAAA,iBAAA,EAAA,iBAAA,EAAA,aAAA,EAAA,eAAA,EAAA,QAAA,EAAA,QAAA,EAAA,UAAA,EAAA,YAAA,EAAA,aAAA,EAAA,eAAA,EAAA,qBAAA,EAAA,aAAA,EAAA,cAAA,EAAA,cAAA,EAAA,YAAA,EAAA,gBAAA,EAAA,cAAA,EAAA,wBAAA,EAAA,cAAA,EAAA,aAAA,EAAA,YAAA,EAAA,aAAA,EAAA,gBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,EAAA,CAAA,aAAA,EAAA,QAAA,EAAA,aAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,WAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAD,IAAA,CAAA,cAAA,EAAA,QAAA,EAAA,mBAAA,EAAA,MAAA,EAAA,CAAA,iBAAA,EAAA,yBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,YAAA,EAAA,QAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,CAAA,QAAA,EAAA,aAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,aAAA,EAAA,QAAA,EAAA,kBAAA,EAAA,MAAA,EAAA,CAAA,gBAAA,EAAA,qBAAA,EAAA,wBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,eAAA,EAAA,QAAA,EAAA,oBAAA,EAAA,MAAA,EAAA,CAAA,0BAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,iBAAA,EAAA,QAAA,EAAA,sBAAA,EAAA,MAAA,EAAA,CAAA,4BAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,QAAA,EAAA,QAAA,EAAA,YAAA,EAAA,MAAA,EAAA,CAAA,OAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,YAAA,EAAA,QAAA,EAAA,gBAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,MAAA,EAAA,SAAA,EAAA,UAAA,EAAA,WAAA,EAAA,UAAA,EAAA,cAAA,EAAA,iBAAA,EAAA,iBAAA,EAAA,gBAAA,EAAA,eAAA,EAAA,aAAA,EAAA,aAAA,EAAA,kBAAA,EAAA,gBAAA,EAAA,mBAAA,EAAA,mBAAA,EAAA,QAAA,EAAA,QAAA,EAAA,QAAA,EAAA,eAAA,EAAA,UAAA,EAAA,iBAAA,EAAA,aAAA,EAAA,aAAA,EAAA,WAAA,EAAA,mBAAA,CAAA,EAAA,OAAA,EAAA,CAAA,QAAA,EAAA,QAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,YAAY,ibACZ,aAAa,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,YAAA,EAAA,MAAA,EAAA,CAAA,iBAAA,EAAA,cAAA,EAAA,UAAA,EAAA,eAAA,EAAA,mBAAA,EAAA,eAAA,EAAA,QAAA,EAAA,WAAA,EAAA,WAAA,EAAA,MAAA,EAAA,aAAA,EAAA,cAAA,EAAA,UAAA,EAAA,YAAA,EAAA,cAAA,EAAA,UAAA,EAAA,iBAAA,EAAA,gBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EACb,eAAe,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAE,GAAA,CAAA,SAAA,EAAA,QAAA,EAAA,cAAA,EAAA,MAAA,EAAA,CAAA,SAAA,EAAA,OAAA,EAAA,OAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EACf,eAAe,EACf,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,GAAA,CAAA,SAAA,EAAA,QAAA,EAAA,wCAAA,EAAA,MAAA,EAAA,CAAA,cAAA,EAAA,YAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,eAAe,EACf,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAG,EAAA,CAAA,SAAA,EAAA,QAAA,EAAA,0BAAA,EAAA,MAAA,EAAA,CAAA,YAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,iBAAiB,s6CACjB,cAAc,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,IAAA,CAAA,QAAA,EAAA,QAAA,EAAA,qCAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,MAAA,EAAA,UAAA,EAAA,QAAA,EAAA,gBAAA,EAAA,WAAA,EAAA,UAAA,EAAA,SAAA,EAAA,OAAA,EAAA,YAAA,EAAA,YAAA,EAAA,YAAA,EAAA,eAAA,EAAA,MAAA,EAAA,aAAA,EAAA,cAAA,EAAA,UAAA,EAAA,UAAA,EAAA,WAAA,EAAA,WAAA,EAAA,YAAA,EAAA,SAAA,CAAA,EAAA,OAAA,EAAA,CAAA,UAAA,EAAA,SAAA,EAAA,QAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EACd,eAAe,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACf,SAAS,EACT,QAAA,EAAA,gBAAA,EAAA,MAAA,EAAA,CAAA,KAAA,EAAA,SAAA,EAAA,kBAAA,EAAA,6BAAA,EAAA,YAAA,EAAA,cAAA,EAAA,aAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,sBAAsB,EACtB,QAAA,EAAA,8BAAA,EAAA,MAAA,EAAA,CAAA,QAAA,EAAA,KAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,WAAW,0JACX,cAAc,EAAA,QAAA,EAAA,qBAAA,EAAA,MAAA,EAAA,CAAA,SAAA,EAAA,iBAAA,EAAA,oBAAA,CAAA,EAAA,OAAA,EAAA,CAAA,eAAA,EAAA,cAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACd,WAAW,EACX,QAAA,EAAA,kBAAA,EAAA,MAAA,EAAA,CAAA,SAAA,EAAA,2BAAA,EAAA,kBAAA,EAAA,oBAAA,CAAA,EAAA,OAAA,EAAA,CAAA,eAAA,EAAA,eAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,iBAAiB,uIACjB,eAAe,EAAA,QAAA,EAAA,sBAAA,EAAA,MAAA,EAAA,CAAA,SAAA,EAAA,sBAAA,CAAA,EAAA,OAAA,EAAA,CAAA,cAAA,EAAA,cAAA,EAAA,kBAAA,EAAA,iBAAA,EAAA,cAAA,EAAA,eAAA,CAAA,EAAA,CAAA,EAAA,aAAA,EAAA,EAAA,CAAA,iBAAA,CAAA,IAAA,EAAA,CAAA;;4FAON,eAAe,EAAA,UAAA,EAAA,CAAA;kBA3B3B,SAAS;AACE,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,mBAAmB,EACpB,OAAA,EAAA;wBACP,YAAY;wBACZ,WAAW;wBACX,WAAW;wBACX,YAAY;wBACZ,aAAa;wBACb,eAAe;wBACf,eAAe;wBACf,eAAe;wBACf,iBAAiB;wBACjB,cAAc;wBACd,eAAe;wBACf,SAAS;wBACT,sBAAsB;wBACtB,WAAW;wBACX,cAAc;wBACd,WAAW;wBACX,iBAAiB;wBACjB;AACH,qBAAA,EAAA,UAAA,EACa,IAAI,EAAA,aAAA,EAGD,iBAAiB,CAAC,IAAI,EAAA,QAAA,EAAA,sqmBAAA,EAAA,MAAA,EAAA,CAAA,sdAAA,CAAA,EAAA;sIAQ5B,QAAQ,EAAA,CAAA;sBAAhB;gBACQ,IAAI,EAAA,CAAA;sBAAZ;gBACQ,aAAa,EAAA,CAAA;sBAArB;gBACQ,mBAAmB,EAAA,CAAA;sBAA3B;gBACQ,mBAAmB,EAAA,CAAA;sBAA3B;gBACQ,qBAAqB,EAAA,CAAA;sBAA7B;gBACQ,uBAAuB,EAAA,CAAA;sBAA/B;gBACQ,mBAAmB,EAAA,CAAA;sBAA3B;gBACQ,gBAAgB,EAAA,CAAA;sBAAxB;gBACQ,aAAa,EAAA,CAAA;sBAArB;gBACQ,cAAc,EAAA,CAAA;sBAAtB;gBACQ,2BAA2B,EAAA,CAAA;sBAAnC;gBACQ,uCAAuC,EAAA,CAAA;sBAA/C;gBACQ,6CAA6C,EAAA,CAAA;sBAArD;gBACQ,gBAAgB,EAAA,CAAA;sBAAxB;gBACQ,mBAAmB,EAAA,CAAA;sBAA3B;gBACQ,+BAA+B,EAAA,CAAA;sBAAvC;gBACQ,0BAA0B,EAAA,CAAA;sBAAlC;gBACQ,kBAAkB,EAAA,CAAA;sBAA1B;gBACQ,mBAAmB,EAAA,CAAA;sBAA3B;gBACQ,uBAAuB,EAAA,CAAA;sBAA/B;gBACQ,oBAAoB,EAAA,CAAA;sBAA5B;gBACQ,8BAA8B,EAAA,CAAA;sBAAtC;gBACQ,sBAAsB,EAAA,CAAA;sBAA9B;gBACQ,uBAAuB,EAAA,CAAA;sBAA/B;gBACQ,sBAAsB,EAAA,CAAA;sBAA9B;gBACQ,gBAAgB,EAAA,CAAA;sBAAxB;gBACQ,0BAA0B,EAAA,CAAA;sBAAlC;gBACQ,eAAe,EAAA,CAAA;sBAAvB;gBACQ,uBAAuB,EAAA,CAAA;sBAA/B;gBACQ,uBAAuB,EAAA,CAAA;sBAA/B;gBACQ,6BAA6B,EAAA,CAAA;sBAArC;gBACQ,eAAe,EAAA,CAAA;sBAAvB;gBACQ,gBAAgB,EAAA,CAAA;sBAAxB;gBACQ,iBAAiB,EAAA,CAAA;sBAAzB;gBACQ,kBAAkB,EAAA,CAAA;sBAA1B;gBACQ,aAAa,EAAA,CAAA;sBAArB;gBACS,mBAAmB,EAAA,CAAA;sBAA5B;gBAIS,WAAW,EAAA,CAAA;sBAApB;gBAIS,aAAa,EAAA,CAAA;sBAAtB;gBAWgB,EAAE,EAAA,CAAA;sBAAlB,SAAS;uBAAC,IAAI;gBAqCiC,cAAc,EAAA,CAAA;sBAA7D,SAAS;AAAC,gBAAA,IAAA,EAAA,CAAA,gBAAgB,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE;gBACG,eAAe,EAAA,CAAA;sBAA/D,SAAS;AAAC,gBAAA,IAAA,EAAA,CAAA,iBAAiB,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE;gBACK,kBAAkB,EAAA,CAAA;sBAArE,SAAS;AAAC,gBAAA,IAAA,EAAA,CAAA,oBAAoB,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE;;;AE/JpD;;AAEG;AACH;;ACHA;;AAEG;;;;"}
@@ -1,34 +0,0 @@
1
- export interface IPredifinedFilter {
2
- /**
3
- * The value of the PrimeNG icon.
4
- */
5
- icon?: string;
6
- iconURL?: string;
7
- iconBlobSourceEndpoint?: string;
8
- iconBlobSourceEndpointResponseError?: boolean;
9
- /**
10
- * The icon as a blob.
11
- */
12
- iconBlob?: Blob;
13
- /**
14
- * A string representing the name to be shown in the UI.
15
- */
16
- name?: string;
17
- /**
18
- * If the name needs to be shown in the UI
19
- */
20
- displayName?: boolean;
21
- /**
22
- * The underlying value of the option. The value can be of any type and represents the data managed behind the scenes.
23
- */
24
- value: any;
25
- /**
26
- * If the value needs to be displayed with a tag
27
- */
28
- displayTag?: boolean;
29
- tagStyle?: {
30
- [key: string]: string;
31
- };
32
- iconColor?: string;
33
- iconStyle?: string;
34
- }