ngx-st-tables 18.0.53 → 18.0.55

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.
@@ -21,7 +21,9 @@ export class MaterialTableFilterDialogComponent {
21
21
  }
22
22
  hasFilterValue(column) {
23
23
  const filter = this.filtersValue()[column.field];
24
- if (!filter?.value)
24
+ console.log(column.field);
25
+ console.log(filter?.value);
26
+ if (filter?.value === null || filter?.value === undefined || filter?.value === '')
25
27
  return false;
26
28
  if (column.filterType === 'date') {
27
29
  const dateValues = filter.value;
@@ -130,4 +132,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
130
132
  type: Component,
131
133
  args: [{ selector: 'st-material-table-filter-dialog', changeDetection: ChangeDetectionStrategy.OnPush, template: "<h3 mat-dialog-title class=\"filters-dialog-title\">\r\n {{ translations().filterTitle }}\r\n <div class=\"filters-show-hide\">\r\n @if (!allVisible()) {\r\n <button\r\n type=\"button\"\r\n mat-icon-button\r\n (click)=\"showAllFilters()\"\r\n [matTooltip]=\"translations().expandAllFilters\"\r\n >\r\n <mat-icon>unfold_more</mat-icon>\r\n </button>\r\n }\r\n @if (allVisible()) {\r\n <button\r\n type=\"button\"\r\n mat-icon-button\r\n (click)=\"hideAllFilters()\"\r\n [matTooltip]=\"translations().collapseAllFilters\"\r\n >\r\n <mat-icon>unfold_less</mat-icon>\r\n </button>\r\n }\r\n <button\r\n type=\"button\"\r\n mat-icon-button\r\n (click)=\"clearAllFilters()\"\r\n [matTooltip]=\"translations().clearAllFilters\"\r\n >\r\n <mat-icon>filter_alt_off</mat-icon>\r\n </button>\r\n </div>\r\n</h3>\r\n\r\n<mat-dialog-content>\r\n <hr />\r\n @for (column of filterColumns(); track column.field) {\r\n <div class=\"filter\">\r\n <div class=\"filter-title row justify-content-between\">\r\n <div class=\"row align-items-center\">\r\n <p>\r\n {{ column.header }}\r\n </p>\r\n @if (hasFilterValue(column)) {\r\n <mat-icon\r\n (click)=\"clearFilter(column)\"\r\n class=\"filter-value-clear\"\r\n [matTooltip]=\"translations().clearFilter\"\r\n >filter_alt_off</mat-icon\r\n >\r\n }\r\n </div>\r\n\r\n @if (column.expanded) {\r\n <mat-icon (click)=\"column.expanded = !column.expanded\"\r\n >keyboard_arrow_up</mat-icon\r\n >\r\n } @else {\r\n <mat-icon (click)=\"column.expanded = !column.expanded\"\r\n >keyboard_arrow_down</mat-icon\r\n >\r\n }\r\n </div>\r\n <div class=\"filter-content row\" [ngClass]=\"{ hide: !column.expanded }\">\r\n <ngx-st-material-table-filter\r\n [column]=\"column\"\r\n [filterValue]=\"filtersValue()[column.field]\"\r\n (filterValueChanged)=\"filterValueChanged(column, $event)\"\r\n />\r\n </div>\r\n </div>\r\n }\r\n</mat-dialog-content>\r\n<mat-dialog-actions>\r\n <div class=\"row justify-content-between dialog-actions-wrapper\">\r\n <button type=\"button\" mat-flat-button mat-dialog-close>\r\n {{ translations().cancel }}\r\n </button>\r\n <button\r\n type=\"button\"\r\n mat-flat-button\r\n color=\"accent\"\r\n (click)=\"saveFilters()\"\r\n >\r\n {{ translations().save }}\r\n </button>\r\n </div>\r\n</mat-dialog-actions>\r\n", styles: [".filters-dialog-title .filters-show-hide{position:absolute;top:6px;right:15px}.filter{width:100%;margin-bottom:1rem;padding-bottom:1rem;border-bottom:1px solid var(--surface-100, #e0e0e0)}.filter .filter-title{padding:.5rem 0;font-size:1rem;font-weight:500}.filter .filter-title p{margin:0;font-weight:500}.filter .filter-title mat-icon{cursor:pointer}.filter .filter-title .filter-value-clear{font-size:1.2rem;width:1.2rem;height:1.2rem;margin-top:-2px;margin-left:.5rem;color:red}.filter .filter-content{margin-top:.5rem;gap:.5rem}.filter .filter-content.hide{display:none}.filter .filter-content>div.col-auto,.filter .filter-content>div.col{padding:0!important}.filter .filter-content mat-form-field{width:100%}.dialog-actions-wrapper{width:100%}\n"] }]
132
134
  }] });
133
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWF0ZXJpYWwtdGFibGUtZmlsdGVyLWRpYWxvZy5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZ3gtc3QtdGFibGVzL3NyYy9saWIvY29tcG9uZW50cy9tYXRlcmlhbC10YWJsZS9tYXRlcmlhbC10YWJsZS1jYXB0aW9uL21hdGVyaWFsLXRhYmxlLWZpbHRlci1kaWFsb2cvbWF0ZXJpYWwtdGFibGUtZmlsdGVyLWRpYWxvZy5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZ3gtc3QtdGFibGVzL3NyYy9saWIvY29tcG9uZW50cy9tYXRlcmlhbC10YWJsZS9tYXRlcmlhbC10YWJsZS1jYXB0aW9uL21hdGVyaWFsLXRhYmxlLWZpbHRlci1kaWFsb2cvbWF0ZXJpYWwtdGFibGUtZmlsdGVyLWRpYWxvZy5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0wsdUJBQXVCLEVBQ3ZCLFNBQVMsRUFDVCxNQUFNLEVBRU4sTUFBTSxFQUNOLFFBQVEsR0FDVCxNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsZUFBZSxFQUFFLFlBQVksRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBRXpFLE9BQU8sRUFBRSwyQkFBMkIsRUFBRSxNQUFNLHFEQUFxRCxDQUFDOzs7Ozs7OztBQWFsRyxNQUFNLE9BQU8sa0NBQWtDO0lBTi9DO1FBT1MsZUFBVSxHQUFHLE1BQU0sQ0FHdkIsZUFBZSxDQUFDLENBQUM7UUFFYixjQUFTLEdBQUcsTUFBTSxDQUN2QixDQUFBLFlBR0MsQ0FBQSxDQUNGLENBQUM7UUFFTSx3QkFBbUIsR0FBRyxNQUFNLENBQUMsMkJBQTJCLENBQUMsQ0FBQztRQUVsRSx3Q0FBd0M7UUFDeEMsaUJBQVksR0FBRyxRQUFRLENBQUMsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLG1CQUFtQixDQUFD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TixPQUFPLFVBQVUsQ0FBQztRQUNwQixDQUFDO0lBQ0gsQ0FBQzsrR0E5SlUsa0NBQWtDO21HQUFsQyxrQ0FBa0MsdUVDdkIvQyx5ckZBd0ZBOzs0RkRqRWEsa0NBQWtDO2tCQU45QyxTQUFTOytCQUNFLGlDQUFpQyxtQkFHMUIsdUJBQXVCLENBQUMsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XHJcbiAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXHJcbiAgQ29tcG9uZW50LFxyXG4gIGluamVjdCxcclxuICBPbkluaXQsXHJcbiAgc2lnbmFsLFxyXG4gIGNvbXB1dGVkLFxyXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBNQVRfRElBTE9HX0RBVEEsIE1hdERpYWxvZ1JlZiB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2RpYWxvZyc7XHJcbmltcG9ydCB7IFZpZXdTdE1hdGVyaWFsVGFibGVDb2x1bW5Nb2RlbCB9IGZyb20gJy4uLy4uLy4uLy4uL21vZGVscy92aWV3L3ZpZXctc3QtbWF0ZXJpYWwtdGFibGUtY29sdW1uLm1vZGVsJztcclxuaW1wb3J0IHsgU3RUYWJsZXNUcmFuc2xhdGlvbnNTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vLi4vc2VydmljZXMvc3QtdGFibGVzLXRyYW5zbGF0aW9ucy5zZXJ2aWNlJztcclxuaW1wb3J0IHsgU3RNYXRlcmlhbENvbHVtbkZpbHRlclR5cGUgfSBmcm9tICcuLi8uLi8uLi8uLi9tb2RlbHMvc3QtbWF0ZXJpYWwtdGFibGUtY29sdW1uLm1vZGVsJztcclxuaW1wb3J0IHtcclxuICBTdE1hdGVyaWFsVGFibGVGaWx0ZXIsXHJcbiAgU3RNYXRlcmlhbFRhYmxlRmlsdGVyVmFsdWVUeXBlLFxyXG59IGZyb20gJy4uLy4uLy4uLy4uL21vZGVscy9tb2RlbHMnO1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6ICdzdC1tYXRlcmlhbC10YWJsZS1maWx0ZXItZGlhbG9nJyxcclxuICB0ZW1wbGF0ZVVybDogJy4vbWF0ZXJpYWwtdGFibGUtZmlsdGVyLWRpYWxvZy5jb21wb25lbnQuaHRtbCcsXHJcbiAgc3R5bGVVcmxzOiBbJy4vbWF0ZXJpYWwtdGFibGUtZmlsdGVyLWRpYWxvZy5jb21wb25lbnQuc2NzcyddLFxyXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxyXG59KVxyXG5leHBvcnQgY2xhc3MgTWF0ZXJpYWxUYWJsZUZpbHRlckRpYWxvZ0NvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCB7XHJcbiAgcHVibGljIGRpYWxvZ0RhdGEgPSBpbmplY3Q8e1xyXG4gICAgY29sdW1uczogVmlld1N0TWF0ZXJpYWxUYWJsZUNvbHVtbk1vZGVsW107XHJcbiAgICBpbml0RmlsdGVyczogeyBba2V5OiBzdHJpbmddOiBTdE1hdGVyaWFsVGFibGVGaWx0ZXIgfTtcclxuICB9PihNQVRfRElBTE9HX0RBVEEpO1xyXG5cclxuICBwdWJsaWMgZGlhbG9nUmVmID0gaW5qZWN0KFxyXG4gICAgTWF0RGlhbG9nUmVmPFxyXG4gICAgICBNYXRlcmlhbFRhYmxlRmlsdGVyRGlhbG9nQ29tcG9uZW50LFxyXG4gICAgICBNYXRlcmlhbFRhYmxlRmlsdGVyRGlhbG9nUmVzdWx0XHJcbiAgICA+XHJcbiAgKTtcclxuXHJcbiAgcHJpdmF0ZSBzdFRhYmxlVHJhbnNsYXRpb25zID0gaW5qZWN0KFN0VGFibGVzVHJhbnNsYXRpb25zU2VydmljZSk7XHJcblxyXG4gIC8vIENhY2hlIHRyYW5zbGF0aW9ucyBhcyBjb21wdXRlZCBzaWduYWxcclxuICB0cmFuc2xhdGlvbnMgPSBjb21wdXRlZCgoKSA9PiB0aGlzLnN0VGFibGVUcmFuc2xhdGlvbnMuZ2V0VHJhbnNsYXRpb25zKCkoKSk7XHJcblxyXG4gIGZpbHRlckNvbHVtbnMgPSBzaWduYWw8Vmlld1N0TWF0ZXJpYWxUYWJsZUNvbHVtbk1vZGVsW10+KFtdKTtcclxuICBhbGxWaXNpYmxlID0gc2lnbmFsKHRydWUpO1xyXG4gIGZpbHRlcnNWYWx1ZSA9IHNpZ25hbDx7IFtrZXk6IHN0cmluZ106IFN0TWF0ZXJpYWxUYWJsZUZpbHRlciB9Pih7fSk7XHJcblxyXG4gIGhhc0ZpbHRlclZhbHVlKGNvbHVtbjogVmlld1N0TWF0ZXJpYWxUYWJsZUNvbHVtbk1vZGVsKTogYm9vbGVhbiB7XHJcbiAgICBjb25zdCBmaWx0ZXIgPSB0aGlzLmZpbHRlcnNWYWx1ZSgpW2NvbHVtbi5maWVsZF07XHJcbiAgICBpZiAoIWZpbHRlcj8udmFsdWUpIHJldHVybiBmYWxzZTtcclxuXHJcbiAgICBpZiAoY29sdW1uLmZpbHRlclR5cGUgPT09ICdkYXRlJykge1xyXG4gICAgICBjb25zdCBkYXRlVmFsdWVzID0gZmlsdGVyLnZhbHVlIGFzIFtzdHJpbmcgfCBudWxsLCBzdHJpbmcgfCBudWxsXTtcclxuICAgICAgcmV0dXJuICEhKGRhdGVWYWx1ZXM/LlswXSB8fCBkYXRlVmFsdWVzPy5bMV0pO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiAhIWZpbHRlci52YWx1ZTtcclxuICB9XHJcblxyXG4gIG5nT25Jbml0KCkge1xyXG4gICAgLy8gSW5pdGlhbGl6ZSBmaWx0ZXJzIGZvciBhbGwgZmlsdGVyYWJsZSBjb2x1bW5zXHJcbiAgICBjb25zdCBpbml0aWFsRmlsdGVyczogeyBba2V5OiBzdHJpbmddOiBTdE1hdGVyaWFsVGFibGVGaWx0ZXIgfSA9IHt9O1xyXG5cclxuICAgIGNvbnN0IGNvbHVtbnMgPSB0aGlzLmRpYWxvZ0RhdGEuY29sdW1uc1xyXG4gICAgICAuZmlsdGVyKGNvbHVtbiA9PiBjb2x1bW4uZmlsdGVyKVxyXG4gICAgICAubWFwKGNvbCA9PiB7XHJcbiAgICAgICAgLy8gU2V0IGRlZmF1bHQgZmlsdGVyIHZhbHVlIGJhc2VkIG9uIHR5cGVcclxuICAgICAgICBpbml0aWFsRmlsdGVyc1tjb2wuZmllbGRdID0ge1xyXG4gICAgICAgICAgdmFsdWU6IHRoaXMuZ2V0RGVmYXVsdEZpbHRlclZhbHVlKGNvbC5maWx0ZXJUeXBlISksXHJcbiAgICAgICAgICBtYXRjaE1vZGU6IE1hdGVyaWFsVGFibGVGaWx0ZXJEaWFsb2dDb21wb25lbnQuZ2V0QmFzZU1hdGNoTW9kZUJ5VHlwZShcclxuICAgICAgICAgICAgY29sLmZpbHRlclR5cGUhXHJcbiAgICAgICAgICApLFxyXG4gICAgICAgIH07XHJcblxyXG4gICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAuLi5jb2wsXHJcbiAgICAgICAgICBleHBhbmRlZDogdHJ1ZSxcclxuICAgICAgICB9O1xyXG4gICAgICB9KTtcclxuXHJcbiAgICB0aGlzLmZpbHRlckNvbHVtbnMuc2V0KGNvbHVtbnMpO1xyXG5cclxuICAgIC8vIEFwcGx5IGluaXRpYWwgZmlsdGVyIHZhbHVlcyBpZiBwcm92aWRlZFxyXG4gICAgaWYgKHRoaXMuZGlhbG9nRGF0YS5pbml0RmlsdGVycykge1xyXG4gICAgICBPYmplY3QuZW50cmllcyh0aGlzLmRpYWxvZ0RhdGEuaW5pdEZpbHRlcnMpLmZvckVhY2goKFtrZXksIGZpbHRlcl0pID0+IHtcclxuICAgICAgICBpZiAoZmlsdGVyLnZhbHVlICE9PSBudWxsICYmIGZpbHRlci52YWx1ZSAhPT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgICBpbml0aWFsRmlsdGVyc1trZXldID0geyAuLi5maWx0ZXIgfTtcclxuICAgICAgICB9XHJcbiAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuZmlsdGVyc1ZhbHVlLnNldChpbml0aWFsRmlsdGVycyk7XHJcbiAgfVxyXG5cclxuICBjbGVhckZpbHRlcihjb2x1bW46IFZpZXdTdE1hdGVyaWFsVGFibGVDb2x1bW5Nb2RlbCkge1xyXG4gICAgdGhpcy5maWx0ZXJzVmFsdWUudXBkYXRlKGN1cnJlbnQgPT4gKHtcclxuICAgICAgLi4uY3VycmVudCxcclxuICAgICAgW2NvbHVtbi5maWVsZF06IHtcclxuICAgICAgICB2YWx1ZTogdGhpcy5nZXREZWZhdWx0RmlsdGVyVmFsdWUoY29sdW1uLmZpbHRlclR5cGUhKSxcclxuICAgICAgICBtYXRjaE1vZGU6IGN1cnJlbnRbY29sdW1uLmZpZWxkXS5tYXRjaE1vZGUsXHJcbiAgICAgIH0sXHJcbiAgICB9KSk7XHJcbiAgfVxyXG5cclxuICBjbGVhckFsbEZpbHRlcnMoKSB7XHJcbiAgICB0aGlzLmZpbHRlckNvbHVtbnMoKS5mb3JFYWNoKGNvbHVtbiA9PiB7XHJcbiAgICAgIHRoaXMuY2xlYXJGaWx0ZXIoY29sdW1uKTtcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgc2hvd0FsbEZpbHRlcnMoKSB7XHJcbiAgICB0aGlzLmZpbHRlckNvbHVtbnMudXBkYXRlKGNvbHVtbnMgPT5cclxuICAgICAgY29sdW1ucy5tYXAoY29sdW1uID0+ICh7IC4uLmNvbHVtbiwgZXhwYW5kZWQ6IHRydWUgfSkpXHJcbiAgICApO1xyXG4gICAgdGhpcy5hbGxWaXNpYmxlLnNldCh0cnVlKTtcclxuICB9XHJcblxyXG4gIGhpZGVBbGxGaWx0ZXJzKCkge1xyXG4gICAgdGhpcy5maWx0ZXJDb2x1bW5zLnVwZGF0ZShjb2x1bW5zID0+XHJcbiAgICAgIGNvbHVtbnMubWFwKGNvbHVtbiA9PiAoeyAuLi5jb2x1bW4sIGV4cGFuZGVkOiBmYWxzZSB9KSlcclxuICAgICk7XHJcbiAgICB0aGlzLmFsbFZpc2libGUuc2V0KGZhbHNlKTtcclxuICB9XHJcblxyXG4gIHNhdmVGaWx0ZXJzKCkge1xyXG4gICAgLy8gT25seSBpbmNsdWRlIGZpbHRlcnMgdGhhdCBoYXZlIHZhbHVlc1xyXG4gICAgY29uc3QgZmlsdGVyc1JlYWR5ID0gT2JqZWN0LmVudHJpZXModGhpcy5maWx0ZXJzVmFsdWUoKSkucmVkdWNlKFxyXG4gICAgICAoYWNjLCBba2V5LCBmaWx0ZXJdKSA9PiB7XHJcbiAgICAgICAgY29uc3QgaGFzVmFsdWUgPSBBcnJheS5pc0FycmF5KGZpbHRlci52YWx1ZSlcclxuICAgICAgICAgID8gZmlsdGVyLnZhbHVlLnNvbWUodiA9PiB2ICE9PSBudWxsICYmIHYgIT09IHVuZGVmaW5lZClcclxuICAgICAgICAgIDogZmlsdGVyLnZhbHVlICE9PSBudWxsICYmXHJcbiAgICAgICAgICAgIGZpbHRlci52YWx1ZSAhPT0gdW5kZWZpbmVkICYmXHJcbiAgICAgICAgICAgIGZpbHRlci52YWx1ZSAhPT0gJyc7XHJcblxyXG4gICAgICAgIGlmIChoYXNWYWx1ZSkge1xyXG4gICAgICAgICAgYWNjW2tleV0gPSBmaWx0ZXI7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBhY2M7XHJcbiAgICAgIH0sXHJcbiAgICAgIHt9IGFzIHsgW2tleTogc3RyaW5nXTogU3RNYXRlcmlhbFRhYmxlRmlsdGVyIH1cclxuICAgICk7XHJcblxyXG4gICAgdGhpcy5kaWFsb2dSZWYuY2xvc2UoeyBmaWx0ZXJzOiBmaWx0ZXJzUmVhZHkgfSk7XHJcbiAgfVxyXG5cclxuICBmaWx0ZXJWYWx1ZUNoYW5nZWQoXHJcbiAgICBjb2x1bW46IFZpZXdTdE1hdGVyaWFsVGFibGVDb2x1bW5Nb2RlbCxcclxuICAgIG5ld0ZpbHRlcjogU3RNYXRlcmlhbFRhYmxlRmlsdGVyXHJcbiAgKSB7XHJcbiAgICB0aGlzLmZpbHRlcnNWYWx1ZS51cGRhdGUoY3VycmVudCA9PiAoe1xyXG4gICAgICAuLi5jdXJyZW50LFxyXG4gICAgICBbY29sdW1uLmZpZWxkXTogbmV3RmlsdGVyLFxyXG4gICAgfSkpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBnZXREZWZhdWx0RmlsdGVyVmFsdWUoXHJcbiAgICBmaWx0ZXJUeXBlOiBTdE1hdGVyaWFsQ29sdW1uRmlsdGVyVHlwZVxyXG4gICk6IFN0TWF0ZXJpYWxUYWJsZUZpbHRlclZhbHVlVHlwZSB7XHJcbiAgICBzd2l0Y2ggKGZpbHRlclR5cGUpIHtcclxuICAgICAgY2FzZSAnZGF0ZSc6XHJcbiAgICAgICAgcmV0dXJuIFtudWxsLCBudWxsXTtcclxuICAgICAgY2FzZSAnYm9vbGVhbic6XHJcbiAgICAgIGNhc2UgJ251bWJlcic6XHJcbiAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgcmV0dXJuICcnO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgc3RhdGljIGdldEJhc2VNYXRjaE1vZGVCeVR5cGUoXHJcbiAgICBmaWx0ZXJUeXBlOiBTdE1hdGVyaWFsQ29sdW1uRmlsdGVyVHlwZVxyXG4gICk6ICdjb250YWlucycgfCAnZXF1YWwnIHwgJ2JldHdlZW4nIHtcclxuICAgIGlmIChmaWx0ZXJUeXBlID09PSAnZGF0ZScpIHtcclxuICAgICAgcmV0dXJuICdiZXR3ZWVuJztcclxuICAgIH0gZWxzZSBpZiAoXHJcbiAgICAgIGZpbHRlclR5cGUgPT09ICdudW1iZXInIHx8XHJcbiAgICAgIGZpbHRlclR5cGUgPT09ICdib29sZWFuJyB8fFxyXG4gICAgICBmaWx0ZXJUeXBlID09PSAnY3VzdG9tJ1xyXG4gICAgKSB7XHJcbiAgICAgIHJldHVybiAnZXF1YWwnO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgcmV0dXJuICdjb250YWlucyc7XHJcbiAgICB9XHJcbiAgfVxyXG59XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIE1hdGVyaWFsVGFibGVGaWx0ZXJEaWFsb2dSZXN1bHQge1xyXG4gIGZpbHRlcnM6IHsgW2tleTogc3RyaW5nXTogU3RNYXRlcmlhbFRhYmxlRmlsdGVyIH07XHJcbn1cclxuIiwiPGgzIG1hdC1kaWFsb2ctdGl0bGUgY2xhc3M9XCJmaWx0ZXJzLWRpYWxvZy10aXRsZVwiPlxyXG4gIHt7IHRyYW5zbGF0aW9ucygpLmZpbHRlclRpdGxlIH19XHJcbiAgPGRpdiBjbGFzcz1cImZpbHRlcnMtc2hvdy1oaWRlXCI+XHJcbiAgICBAaWYgKCFhbGxWaXNpYmxlKCkpIHtcclxuICAgICAgPGJ1dHRvblxyXG4gICAgICAgIHR5cGU9XCJidXR0b25cIlxyXG4gICAgICAgIG1hdC1pY29uLWJ1dHRvblxyXG4gICAgICAgIChjbGljayk9XCJzaG93QWxsRmlsdGVycygpXCJcclxuICAgICAgICBbbWF0VG9vbHRpcF09XCJ0cmFuc2xhdGlvbnMoKS5leHBhbmRBbGxGaWx0ZXJzXCJcclxuICAgICAgPlxyXG4gICAgICAgIDxtYXQtaWNvbj51bmZvbGRfbW9yZTwvbWF0LWljb24+XHJcbiAgICAgIDwvYnV0dG9uPlxyXG4gICAgfVxyXG4gICAgQGlmIChhbGxWaXNpYmxlKCkpIHtcclxuICAgICAgPGJ1dHRvblxyXG4gICAgICAgIHR5cGU9XCJidXR0b25cIlxyXG4gICAgICAgIG1hdC1pY29uLWJ1dHRvblxyXG4gICAgICAgIChjbGljayk9XCJoaWRlQWxsRmlsdGVycygpXCJcclxuICAgICAgICBbbWF0VG9vbHRpcF09XCJ0cmFuc2xhdGlvbnMoKS5jb2xsYXBzZUFsbEZpbHRlcnNcIlxyXG4gICAgICA+XHJcbiAgICAgICAgPG1hdC1pY29uPnVuZm9sZF9sZXNzPC9tYXQtaWNvbj5cclxuICAgICAgPC9idXR0b24+XHJcbiAgICB9XHJcbiAgICA8YnV0dG9uXHJcbiAgICAgIHR5cGU9XCJidXR0b25cIlxyXG4gICAgICBtYXQtaWNvbi1idXR0b25cclxuICAgICAgKGNsaWNrKT1cImNsZWFyQWxsRmlsdGVycygpXCJcclxuICAgICAgW21hdFRvb2x0aXBdPVwidHJhbnNsYXRpb25zKCkuY2xlYXJBbGxGaWx0ZXJzXCJcclxuICAgID5cclxuICAgICAgPG1hdC1pY29uPmZpbHRlcl9hbHRfb2ZmPC9tYXQtaWNvbj5cclxuICAgIDwvYnV0dG9uPlxyXG4gIDwvZGl2PlxyXG48L2gzPlxyXG5cclxuPG1hdC1kaWFsb2ctY29udGVudD5cclxuICA8aHIgLz5cclxuICBAZm9yIChjb2x1bW4gb2YgZmlsdGVyQ29sdW1ucygpOyB0cmFjayBjb2x1bW4uZmllbGQpIHtcclxuICAgIDxkaXYgY2xhc3M9XCJmaWx0ZXJcIj5cclxuICAgICAgPGRpdiBjbGFzcz1cImZpbHRlci10aXRsZSByb3cganVzdGlmeS1jb250ZW50LWJldHdlZW5cIj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwicm93IGFsaWduLWl0ZW1zLWNlbnRlclwiPlxyXG4gICAgICAgICAgPHA+XHJcbiAgICAgICAgICAgIHt7IGNvbHVtbi5oZWFkZXIgfX1cclxuICAgICAgICAgIDwvcD5cclxuICAgICAgICAgIEBpZiAoaGFzRmlsdGVyVmFsdWUoY29sdW1uKSkge1xyXG4gICAgICAgICAgICA8bWF0LWljb25cclxuICAgICAgICAgICAgICAoY2xpY2spPVwiY2xlYXJGaWx0ZXIoY29sdW1uKVwiXHJcbiAgICAgICAgICAgICAgY2xhc3M9XCJmaWx0ZXItdmFsdWUtY2xlYXJcIlxyXG4gICAgICAgICAgICAgIFttYXRUb29sdGlwXT1cInRyYW5zbGF0aW9ucygpLmNsZWFyRmlsdGVyXCJcclxuICAgICAgICAgICAgICA+ZmlsdGVyX2FsdF9vZmY8L21hdC1pY29uXHJcbiAgICAgICAgICAgID5cclxuICAgICAgICAgIH1cclxuICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgQGlmIChjb2x1bW4uZXhwYW5kZWQpIHtcclxuICAgICAgICAgIDxtYXQtaWNvbiAoY2xpY2spPVwiY29sdW1uLmV4cGFuZGVkID0gIWNvbHVtbi5leHBhbmRlZFwiXHJcbiAgICAgICAgICAgID5rZXlib2FyZF9hcnJvd191cDwvbWF0LWljb25cclxuICAgICAgICAgID5cclxuICAgICAgICB9IEBlbHNlIHtcclxuICAgICAgICAgIDxtYXQtaWNvbiAoY2xpY2spPVwiY29sdW1uLmV4cGFuZGVkID0gIWNvbHVtbi5leHBhbmRlZFwiXHJcbiAgICAgICAgICAgID5rZXlib2FyZF9hcnJvd19kb3duPC9tYXQtaWNvblxyXG4gICAgICAgICAgPlxyXG4gICAgICAgIH1cclxuICAgICAgPC9kaXY+XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJmaWx0ZXItY29udGVudCByb3dcIiBbbmdDbGFzc109XCJ7IGhpZGU6ICFjb2x1bW4uZXhwYW5kZWQgfVwiPlxyXG4gICAgICAgIDxuZ3gtc3QtbWF0ZXJpYWwtdGFibGUtZmlsdGVyXHJcbiAgICAgICAgICBbY29sdW1uXT1cImNvbHVtblwiXHJcbiAgICAgICAgICBbZmlsdGVyVmFsdWVdPVwiZmlsdGVyc1ZhbHVlKClbY29sdW1uLmZpZWxkXVwiXHJcbiAgICAgICAgICAoZmlsdGVyVmFsdWVDaGFuZ2VkKT1cImZpbHRlclZhbHVlQ2hhbmdlZChjb2x1bW4sICRldmVudClcIlxyXG4gICAgICAgIC8+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgPC9kaXY+XHJcbiAgfVxyXG48L21hdC1kaWFsb2ctY29udGVudD5cclxuPG1hdC1kaWFsb2ctYWN0aW9ucz5cclxuICA8ZGl2IGNsYXNzPVwicm93IGp1c3RpZnktY29udGVudC1iZXR3ZWVuIGRpYWxvZy1hY3Rpb25zLXdyYXBwZXJcIj5cclxuICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIG1hdC1mbGF0LWJ1dHRvbiBtYXQtZGlhbG9nLWNsb3NlPlxyXG4gICAgICB7eyB0cmFuc2xhdGlvbnMoKS5jYW5jZWwgfX1cclxuICAgIDwvYnV0dG9uPlxyXG4gICAgPGJ1dHRvblxyXG4gICAgICB0eXBlPVwiYnV0dG9uXCJcclxuICAgICAgbWF0LWZsYXQtYnV0dG9uXHJcbiAgICAgIGNvbG9yPVwiYWNjZW50XCJcclxuICAgICAgKGNsaWNrKT1cInNhdmVGaWx0ZXJzKClcIlxyXG4gICAgPlxyXG4gICAgICB7eyB0cmFuc2xhdGlvbnMoKS5zYXZlIH19XHJcbiAgICA8L2J1dHRvbj5cclxuICA8L2Rpdj5cclxuPC9tYXQtZGlhbG9nLWFjdGlvbnM+XHJcbiJdfQ==
135
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWF0ZXJpYWwtdGFibGUtZmlsdGVyLWRpYWxvZy5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZ3gtc3QtdGFibGVzL3NyYy9saWIvY29tcG9uZW50cy9tYXRlcmlhbC10YWJsZS9tYXRlcmlhbC10YWJsZS1jYXB0aW9uL21hdGVyaWFsLXRhYmxlLWZpbHRlci1kaWFsb2cvbWF0ZXJpYWwtdGFibGUtZmlsdGVyLWRpYWxvZy5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZ3gtc3QtdGFibGVzL3NyYy9saWIvY29tcG9uZW50cy9tYXRlcmlhbC10YWJsZS9tYXRlcmlhbC10YWJsZS1jYXB0aW9uL21hdGVyaWFsLXRhYmxlLWZpbHRlci1kaWFsb2cvbWF0ZXJpYWwtdGFibGUtZmlsdGVyLWRpYWxvZy5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0wsdUJBQXVCLEVBQ3ZCLFNBQVMsRUFDVCxNQUFNLEVBRU4sTUFBTSxFQUNOLFFBQVEsR0FDVCxNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsZUFBZSxFQUFFLFlBQVksRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBRXpFLE9BQU8sRUFBRSwyQkFBMkIsRUFBRSxNQUFNLHFEQUFxRCxDQUFDOzs7Ozs7OztBQWFsRyxNQUFNLE9BQU8sa0NBQWtDO0lBTi9DO1FBT1MsZUFBVSxHQUFHLE1BQU0sQ0FHdkIsZUFBZSxDQUFDLENBQUM7UUFFYixjQUFTLEdBQUcsTUFBTSxDQUN2QixDQUFBLFlBR0MsQ0FBQSxDQUNGLENBQUM7UUFFTSx3QkFBbUIsR0FBRyxNQUFNLENBQUMsMkJBQTJCLENBQUMsQ0FBQztRQUVsRSx3Q0FBd0M7UUFDeEMsaUJBQVksR0FBRyxRQUFRLENBQUMsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLG1CQUFtQixDQUFD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QU0sRUFBRSxDQUFDO1lBQzFCLE9BQU8sU0FBUyxDQUFDO1FBQ25CLENBQUM7YUFBTSxJQUNMLFVBQVUsS0FBSyxRQUFRO1lBQ3ZCLFVBQVUsS0FBSyxTQUFTO1lBQ3hCLFVBQVUsS0FBSyxRQUFRLEVBQ3ZCLENBQUM7WUFDRCxPQUFPLE9BQU8sQ0FBQztRQUNqQixDQUFDO2FBQU0sQ0FBQztZQUNOLE9BQU8sVUFBVSxDQUFDO1FBQ3BCLENBQUM7SUFDSCxDQUFDOytHQWhLVSxrQ0FBa0M7bUdBQWxDLGtDQUFrQyx1RUN2Qi9DLHlyRkF3RkE7OzRGRGpFYSxrQ0FBa0M7a0JBTjlDLFNBQVM7K0JBQ0UsaUNBQWlDLG1CQUcxQix1QkFBdUIsQ0FBQyxNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcclxuICBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSxcclxuICBDb21wb25lbnQsXHJcbiAgaW5qZWN0LFxyXG4gIE9uSW5pdCxcclxuICBzaWduYWwsXHJcbiAgY29tcHV0ZWQsXHJcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IE1BVF9ESUFMT0dfREFUQSwgTWF0RGlhbG9nUmVmIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvZGlhbG9nJztcclxuaW1wb3J0IHsgVmlld1N0TWF0ZXJpYWxUYWJsZUNvbHVtbk1vZGVsIH0gZnJvbSAnLi4vLi4vLi4vLi4vbW9kZWxzL3ZpZXcvdmlldy1zdC1tYXRlcmlhbC10YWJsZS1jb2x1bW4ubW9kZWwnO1xyXG5pbXBvcnQgeyBTdFRhYmxlc1RyYW5zbGF0aW9uc1NlcnZpY2UgfSBmcm9tICcuLi8uLi8uLi8uLi9zZXJ2aWNlcy9zdC10YWJsZXMtdHJhbnNsYXRpb25zLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBTdE1hdGVyaWFsQ29sdW1uRmlsdGVyVHlwZSB9IGZyb20gJy4uLy4uLy4uLy4uL21vZGVscy9zdC1tYXRlcmlhbC10YWJsZS1jb2x1bW4ubW9kZWwnO1xyXG5pbXBvcnQge1xyXG4gIFN0TWF0ZXJpYWxUYWJsZUZpbHRlcixcclxuICBTdE1hdGVyaWFsVGFibGVGaWx0ZXJWYWx1ZVR5cGUsXHJcbn0gZnJvbSAnLi4vLi4vLi4vLi4vbW9kZWxzL21vZGVscyc7XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogJ3N0LW1hdGVyaWFsLXRhYmxlLWZpbHRlci1kaWFsb2cnLFxyXG4gIHRlbXBsYXRlVXJsOiAnLi9tYXRlcmlhbC10YWJsZS1maWx0ZXItZGlhbG9nLmNvbXBvbmVudC5odG1sJyxcclxuICBzdHlsZVVybHM6IFsnLi9tYXRlcmlhbC10YWJsZS1maWx0ZXItZGlhbG9nLmNvbXBvbmVudC5zY3NzJ10sXHJcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBNYXRlcmlhbFRhYmxlRmlsdGVyRGlhbG9nQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0IHtcclxuICBwdWJsaWMgZGlhbG9nRGF0YSA9IGluamVjdDx7XHJcbiAgICBjb2x1bW5zOiBWaWV3U3RNYXRlcmlhbFRhYmxlQ29sdW1uTW9kZWxbXTtcclxuICAgIGluaXRGaWx0ZXJzOiB7IFtrZXk6IHN0cmluZ106IFN0TWF0ZXJpYWxUYWJsZUZpbHRlciB9O1xyXG4gIH0+KE1BVF9ESUFMT0dfREFUQSk7XHJcblxyXG4gIHB1YmxpYyBkaWFsb2dSZWYgPSBpbmplY3QoXHJcbiAgICBNYXREaWFsb2dSZWY8XHJcbiAgICAgIE1hdGVyaWFsVGFibGVGaWx0ZXJEaWFsb2dDb21wb25lbnQsXHJcbiAgICAgIE1hdGVyaWFsVGFibGVGaWx0ZXJEaWFsb2dSZXN1bHRcclxuICAgID5cclxuICApO1xyXG5cclxuICBwcml2YXRlIHN0VGFibGVUcmFuc2xhdGlvbnMgPSBpbmplY3QoU3RUYWJsZXNUcmFuc2xhdGlvbnNTZXJ2aWNlKTtcclxuXHJcbiAgLy8gQ2FjaGUgdHJhbnNsYXRpb25zIGFzIGNvbXB1dGVkIHNpZ25hbFxyXG4gIHRyYW5zbGF0aW9ucyA9IGNvbXB1dGVkKCgpID0+IHRoaXMuc3RUYWJsZVRyYW5zbGF0aW9ucy5nZXRUcmFuc2xhdGlvbnMoKSgpKTtcclxuXHJcbiAgZmlsdGVyQ29sdW1ucyA9IHNpZ25hbDxWaWV3U3RNYXRlcmlhbFRhYmxlQ29sdW1uTW9kZWxbXT4oW10pO1xyXG4gIGFsbFZpc2libGUgPSBzaWduYWwodHJ1ZSk7XHJcbiAgZmlsdGVyc1ZhbHVlID0gc2lnbmFsPHsgW2tleTogc3RyaW5nXTogU3RNYXRlcmlhbFRhYmxlRmlsdGVyIH0+KHt9KTtcclxuXHJcbiAgaGFzRmlsdGVyVmFsdWUoY29sdW1uOiBWaWV3U3RNYXRlcmlhbFRhYmxlQ29sdW1uTW9kZWwpOiBib29sZWFuIHtcclxuICAgIGNvbnN0IGZpbHRlciA9IHRoaXMuZmlsdGVyc1ZhbHVlKClbY29sdW1uLmZpZWxkXTtcclxuICAgIGNvbnNvbGUubG9nKGNvbHVtbi5maWVsZCk7XHJcbiAgICBjb25zb2xlLmxvZyhmaWx0ZXI/LnZhbHVlKTtcclxuICAgIGlmIChmaWx0ZXI/LnZhbHVlID09PSBudWxsIHx8IGZpbHRlcj8udmFsdWUgPT09IHVuZGVmaW5lZCB8fCBmaWx0ZXI/LnZhbHVlID09PSAnJykgcmV0dXJuIGZhbHNlO1xyXG5cclxuICAgIGlmIChjb2x1bW4uZmlsdGVyVHlwZSA9PT0gJ2RhdGUnKSB7XHJcbiAgICAgIGNvbnN0IGRhdGVWYWx1ZXMgPSBmaWx0ZXIudmFsdWUgYXMgW3N0cmluZyB8IG51bGwsIHN0cmluZyB8IG51bGxdO1xyXG4gICAgICByZXR1cm4gISEoZGF0ZVZhbHVlcz8uWzBdIHx8IGRhdGVWYWx1ZXM/LlsxXSk7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuICEhZmlsdGVyLnZhbHVlO1xyXG4gIH1cclxuXHJcbiAgbmdPbkluaXQoKSB7XHJcbiAgICAvLyBJbml0aWFsaXplIGZpbHRlcnMgZm9yIGFsbCBmaWx0ZXJhYmxlIGNvbHVtbnNcclxuICAgIGNvbnN0IGluaXRpYWxGaWx0ZXJzOiB7IFtrZXk6IHN0cmluZ106IFN0TWF0ZXJpYWxUYWJsZUZpbHRlciB9ID0ge307XHJcblxyXG4gICAgY29uc3QgY29sdW1ucyA9IHRoaXMuZGlhbG9nRGF0YS5jb2x1bW5zXHJcbiAgICAgIC5maWx0ZXIoY29sdW1uID0+IGNvbHVtbi5maWx0ZXIpXHJcbiAgICAgIC5tYXAoY29sID0+IHtcclxuICAgICAgICAvLyBTZXQgZGVmYXVsdCBmaWx0ZXIgdmFsdWUgYmFzZWQgb24gdHlwZVxyXG4gICAgICAgIGluaXRpYWxGaWx0ZXJzW2NvbC5maWVsZF0gPSB7XHJcbiAgICAgICAgICB2YWx1ZTogdGhpcy5nZXREZWZhdWx0RmlsdGVyVmFsdWUoY29sLmZpbHRlclR5cGUhKSxcclxuICAgICAgICAgIG1hdGNoTW9kZTogTWF0ZXJpYWxUYWJsZUZpbHRlckRpYWxvZ0NvbXBvbmVudC5nZXRCYXNlTWF0Y2hNb2RlQnlUeXBlKFxyXG4gICAgICAgICAgICBjb2wuZmlsdGVyVHlwZSFcclxuICAgICAgICAgICksXHJcbiAgICAgICAgfTtcclxuXHJcbiAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgIC4uLmNvbCxcclxuICAgICAgICAgIGV4cGFuZGVkOiB0cnVlLFxyXG4gICAgICAgIH07XHJcbiAgICAgIH0pO1xyXG5cclxuICAgIHRoaXMuZmlsdGVyQ29sdW1ucy5zZXQoY29sdW1ucyk7XHJcblxyXG4gICAgLy8gQXBwbHkgaW5pdGlhbCBmaWx0ZXIgdmFsdWVzIGlmIHByb3ZpZGVkXHJcbiAgICBpZiAodGhpcy5kaWFsb2dEYXRhLmluaXRGaWx0ZXJzKSB7XHJcbiAgICAgIE9iamVjdC5lbnRyaWVzKHRoaXMuZGlhbG9nRGF0YS5pbml0RmlsdGVycykuZm9yRWFjaCgoW2tleSwgZmlsdGVyXSkgPT4ge1xyXG4gICAgICAgIGlmIChmaWx0ZXIudmFsdWUgIT09IG51bGwgJiYgZmlsdGVyLnZhbHVlICE9PSB1bmRlZmluZWQpIHtcclxuICAgICAgICAgIGluaXRpYWxGaWx0ZXJzW2tleV0gPSB7IC4uLmZpbHRlciB9O1xyXG4gICAgICAgIH1cclxuICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5maWx0ZXJzVmFsdWUuc2V0KGluaXRpYWxGaWx0ZXJzKTtcclxuICB9XHJcblxyXG4gIGNsZWFyRmlsdGVyKGNvbHVtbjogVmlld1N0TWF0ZXJpYWxUYWJsZUNvbHVtbk1vZGVsKSB7XHJcbiAgICB0aGlzLmZpbHRlcnNWYWx1ZS51cGRhdGUoY3VycmVudCA9PiAoe1xyXG4gICAgICAuLi5jdXJyZW50LFxyXG4gICAgICBbY29sdW1uLmZpZWxkXToge1xyXG4gICAgICAgIHZhbHVlOiB0aGlzLmdldERlZmF1bHRGaWx0ZXJWYWx1ZShjb2x1bW4uZmlsdGVyVHlwZSEpLFxyXG4gICAgICAgIG1hdGNoTW9kZTogY3VycmVudFtjb2x1bW4uZmllbGRdLm1hdGNoTW9kZSxcclxuICAgICAgfSxcclxuICAgIH0pKTtcclxuICB9XHJcblxyXG4gIGNsZWFyQWxsRmlsdGVycygpIHtcclxuICAgIHRoaXMuZmlsdGVyQ29sdW1ucygpLmZvckVhY2goY29sdW1uID0+IHtcclxuICAgICAgdGhpcy5jbGVhckZpbHRlcihjb2x1bW4pO1xyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBzaG93QWxsRmlsdGVycygpIHtcclxuICAgIHRoaXMuZmlsdGVyQ29sdW1ucy51cGRhdGUoY29sdW1ucyA9PlxyXG4gICAgICBjb2x1bW5zLm1hcChjb2x1bW4gPT4gKHsgLi4uY29sdW1uLCBleHBhbmRlZDogdHJ1ZSB9KSlcclxuICAgICk7XHJcbiAgICB0aGlzLmFsbFZpc2libGUuc2V0KHRydWUpO1xyXG4gIH1cclxuXHJcbiAgaGlkZUFsbEZpbHRlcnMoKSB7XHJcbiAgICB0aGlzLmZpbHRlckNvbHVtbnMudXBkYXRlKGNvbHVtbnMgPT5cclxuICAgICAgY29sdW1ucy5tYXAoY29sdW1uID0+ICh7IC4uLmNvbHVtbiwgZXhwYW5kZWQ6IGZhbHNlIH0pKVxyXG4gICAgKTtcclxuICAgIHRoaXMuYWxsVmlzaWJsZS5zZXQoZmFsc2UpO1xyXG4gIH1cclxuXHJcbiAgc2F2ZUZpbHRlcnMoKSB7XHJcbiAgICAvLyBPbmx5IGluY2x1ZGUgZmlsdGVycyB0aGF0IGhhdmUgdmFsdWVzXHJcbiAgICBjb25zdCBmaWx0ZXJzUmVhZHkgPSBPYmplY3QuZW50cmllcyh0aGlzLmZpbHRlcnNWYWx1ZSgpKS5yZWR1Y2UoXHJcbiAgICAgIChhY2MsIFtrZXksIGZpbHRlcl0pID0+IHtcclxuICAgICAgICBjb25zdCBoYXNWYWx1ZSA9IEFycmF5LmlzQXJyYXkoZmlsdGVyLnZhbHVlKVxyXG4gICAgICAgICAgPyBmaWx0ZXIudmFsdWUuc29tZSh2ID0+IHYgIT09IG51bGwgJiYgdiAhPT0gdW5kZWZpbmVkKVxyXG4gICAgICAgICAgOiBmaWx0ZXIudmFsdWUgIT09IG51bGwgJiZcclxuICAgICAgICAgICAgZmlsdGVyLnZhbHVlICE9PSB1bmRlZmluZWQgJiZcclxuICAgICAgICAgICAgZmlsdGVyLnZhbHVlICE9PSAnJztcclxuXHJcbiAgICAgICAgaWYgKGhhc1ZhbHVlKSB7XHJcbiAgICAgICAgICBhY2Nba2V5XSA9IGZpbHRlcjtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIGFjYztcclxuICAgICAgfSxcclxuICAgICAge30gYXMgeyBba2V5OiBzdHJpbmddOiBTdE1hdGVyaWFsVGFibGVGaWx0ZXIgfVxyXG4gICAgKTtcclxuXHJcbiAgICB0aGlzLmRpYWxvZ1JlZi5jbG9zZSh7IGZpbHRlcnM6IGZpbHRlcnNSZWFkeSB9KTtcclxuICB9XHJcblxyXG4gIGZpbHRlclZhbHVlQ2hhbmdlZChcclxuICAgIGNvbHVtbjogVmlld1N0TWF0ZXJpYWxUYWJsZUNvbHVtbk1vZGVsLFxyXG4gICAgbmV3RmlsdGVyOiBTdE1hdGVyaWFsVGFibGVGaWx0ZXJcclxuICApIHtcclxuICAgIHRoaXMuZmlsdGVyc1ZhbHVlLnVwZGF0ZShjdXJyZW50ID0+ICh7XHJcbiAgICAgIC4uLmN1cnJlbnQsXHJcbiAgICAgIFtjb2x1bW4uZmllbGRdOiBuZXdGaWx0ZXIsXHJcbiAgICB9KSk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGdldERlZmF1bHRGaWx0ZXJWYWx1ZShcclxuICAgIGZpbHRlclR5cGU6IFN0TWF0ZXJpYWxDb2x1bW5GaWx0ZXJUeXBlXHJcbiAgKTogU3RNYXRlcmlhbFRhYmxlRmlsdGVyVmFsdWVUeXBlIHtcclxuICAgIHN3aXRjaCAoZmlsdGVyVHlwZSkge1xyXG4gICAgICBjYXNlICdkYXRlJzpcclxuICAgICAgICByZXR1cm4gW251bGwsIG51bGxdO1xyXG4gICAgICBjYXNlICdib29sZWFuJzpcclxuICAgICAgY2FzZSAnbnVtYmVyJzpcclxuICAgICAgICByZXR1cm4gbnVsbDtcclxuICAgICAgZGVmYXVsdDpcclxuICAgICAgICByZXR1cm4gJyc7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBzdGF0aWMgZ2V0QmFzZU1hdGNoTW9kZUJ5VHlwZShcclxuICAgIGZpbHRlclR5cGU6IFN0TWF0ZXJpYWxDb2x1bW5GaWx0ZXJUeXBlXHJcbiAgKTogJ2NvbnRhaW5zJyB8ICdlcXVhbCcgfCAnYmV0d2Vlbicge1xyXG4gICAgaWYgKGZpbHRlclR5cGUgPT09ICdkYXRlJykge1xyXG4gICAgICByZXR1cm4gJ2JldHdlZW4nO1xyXG4gICAgfSBlbHNlIGlmIChcclxuICAgICAgZmlsdGVyVHlwZSA9PT0gJ251bWJlcicgfHxcclxuICAgICAgZmlsdGVyVHlwZSA9PT0gJ2Jvb2xlYW4nIHx8XHJcbiAgICAgIGZpbHRlclR5cGUgPT09ICdjdXN0b20nXHJcbiAgICApIHtcclxuICAgICAgcmV0dXJuICdlcXVhbCc7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICByZXR1cm4gJ2NvbnRhaW5zJztcclxuICAgIH1cclxuICB9XHJcbn1cclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgTWF0ZXJpYWxUYWJsZUZpbHRlckRpYWxvZ1Jlc3VsdCB7XHJcbiAgZmlsdGVyczogeyBba2V5OiBzdHJpbmddOiBTdE1hdGVyaWFsVGFibGVGaWx0ZXIgfTtcclxufVxyXG4iLCI8aDMgbWF0LWRpYWxvZy10aXRsZSBjbGFzcz1cImZpbHRlcnMtZGlhbG9nLXRpdGxlXCI+XHJcbiAge3sgdHJhbnNsYXRpb25zKCkuZmlsdGVyVGl0bGUgfX1cclxuICA8ZGl2IGNsYXNzPVwiZmlsdGVycy1zaG93LWhpZGVcIj5cclxuICAgIEBpZiAoIWFsbFZpc2libGUoKSkge1xyXG4gICAgICA8YnV0dG9uXHJcbiAgICAgICAgdHlwZT1cImJ1dHRvblwiXHJcbiAgICAgICAgbWF0LWljb24tYnV0dG9uXHJcbiAgICAgICAgKGNsaWNrKT1cInNob3dBbGxGaWx0ZXJzKClcIlxyXG4gICAgICAgIFttYXRUb29sdGlwXT1cInRyYW5zbGF0aW9ucygpLmV4cGFuZEFsbEZpbHRlcnNcIlxyXG4gICAgICA+XHJcbiAgICAgICAgPG1hdC1pY29uPnVuZm9sZF9tb3JlPC9tYXQtaWNvbj5cclxuICAgICAgPC9idXR0b24+XHJcbiAgICB9XHJcbiAgICBAaWYgKGFsbFZpc2libGUoKSkge1xyXG4gICAgICA8YnV0dG9uXHJcbiAgICAgICAgdHlwZT1cImJ1dHRvblwiXHJcbiAgICAgICAgbWF0LWljb24tYnV0dG9uXHJcbiAgICAgICAgKGNsaWNrKT1cImhpZGVBbGxGaWx0ZXJzKClcIlxyXG4gICAgICAgIFttYXRUb29sdGlwXT1cInRyYW5zbGF0aW9ucygpLmNvbGxhcHNlQWxsRmlsdGVyc1wiXHJcbiAgICAgID5cclxuICAgICAgICA8bWF0LWljb24+dW5mb2xkX2xlc3M8L21hdC1pY29uPlxyXG4gICAgICA8L2J1dHRvbj5cclxuICAgIH1cclxuICAgIDxidXR0b25cclxuICAgICAgdHlwZT1cImJ1dHRvblwiXHJcbiAgICAgIG1hdC1pY29uLWJ1dHRvblxyXG4gICAgICAoY2xpY2spPVwiY2xlYXJBbGxGaWx0ZXJzKClcIlxyXG4gICAgICBbbWF0VG9vbHRpcF09XCJ0cmFuc2xhdGlvbnMoKS5jbGVhckFsbEZpbHRlcnNcIlxyXG4gICAgPlxyXG4gICAgICA8bWF0LWljb24+ZmlsdGVyX2FsdF9vZmY8L21hdC1pY29uPlxyXG4gICAgPC9idXR0b24+XHJcbiAgPC9kaXY+XHJcbjwvaDM+XHJcblxyXG48bWF0LWRpYWxvZy1jb250ZW50PlxyXG4gIDxociAvPlxyXG4gIEBmb3IgKGNvbHVtbiBvZiBmaWx0ZXJDb2x1bW5zKCk7IHRyYWNrIGNvbHVtbi5maWVsZCkge1xyXG4gICAgPGRpdiBjbGFzcz1cImZpbHRlclwiPlxyXG4gICAgICA8ZGl2IGNsYXNzPVwiZmlsdGVyLXRpdGxlIHJvdyBqdXN0aWZ5LWNvbnRlbnQtYmV0d2VlblwiPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJyb3cgYWxpZ24taXRlbXMtY2VudGVyXCI+XHJcbiAgICAgICAgICA8cD5cclxuICAgICAgICAgICAge3sgY29sdW1uLmhlYWRlciB9fVxyXG4gICAgICAgICAgPC9wPlxyXG4gICAgICAgICAgQGlmIChoYXNGaWx0ZXJWYWx1ZShjb2x1bW4pKSB7XHJcbiAgICAgICAgICAgIDxtYXQtaWNvblxyXG4gICAgICAgICAgICAgIChjbGljayk9XCJjbGVhckZpbHRlcihjb2x1bW4pXCJcclxuICAgICAgICAgICAgICBjbGFzcz1cImZpbHRlci12YWx1ZS1jbGVhclwiXHJcbiAgICAgICAgICAgICAgW21hdFRvb2x0aXBdPVwidHJhbnNsYXRpb25zKCkuY2xlYXJGaWx0ZXJcIlxyXG4gICAgICAgICAgICAgID5maWx0ZXJfYWx0X29mZjwvbWF0LWljb25cclxuICAgICAgICAgICAgPlxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICBAaWYgKGNvbHVtbi5leHBhbmRlZCkge1xyXG4gICAgICAgICAgPG1hdC1pY29uIChjbGljayk9XCJjb2x1bW4uZXhwYW5kZWQgPSAhY29sdW1uLmV4cGFuZGVkXCJcclxuICAgICAgICAgICAgPmtleWJvYXJkX2Fycm93X3VwPC9tYXQtaWNvblxyXG4gICAgICAgICAgPlxyXG4gICAgICAgIH0gQGVsc2Uge1xyXG4gICAgICAgICAgPG1hdC1pY29uIChjbGljayk9XCJjb2x1bW4uZXhwYW5kZWQgPSAhY29sdW1uLmV4cGFuZGVkXCJcclxuICAgICAgICAgICAgPmtleWJvYXJkX2Fycm93X2Rvd248L21hdC1pY29uXHJcbiAgICAgICAgICA+XHJcbiAgICAgICAgfVxyXG4gICAgICA8L2Rpdj5cclxuICAgICAgPGRpdiBjbGFzcz1cImZpbHRlci1jb250ZW50IHJvd1wiIFtuZ0NsYXNzXT1cInsgaGlkZTogIWNvbHVtbi5leHBhbmRlZCB9XCI+XHJcbiAgICAgICAgPG5neC1zdC1tYXRlcmlhbC10YWJsZS1maWx0ZXJcclxuICAgICAgICAgIFtjb2x1bW5dPVwiY29sdW1uXCJcclxuICAgICAgICAgIFtmaWx0ZXJWYWx1ZV09XCJmaWx0ZXJzVmFsdWUoKVtjb2x1bW4uZmllbGRdXCJcclxuICAgICAgICAgIChmaWx0ZXJWYWx1ZUNoYW5nZWQpPVwiZmlsdGVyVmFsdWVDaGFuZ2VkKGNvbHVtbiwgJGV2ZW50KVwiXHJcbiAgICAgICAgLz5cclxuICAgICAgPC9kaXY+XHJcbiAgICA8L2Rpdj5cclxuICB9XHJcbjwvbWF0LWRpYWxvZy1jb250ZW50PlxyXG48bWF0LWRpYWxvZy1hY3Rpb25zPlxyXG4gIDxkaXYgY2xhc3M9XCJyb3cganVzdGlmeS1jb250ZW50LWJldHdlZW4gZGlhbG9nLWFjdGlvbnMtd3JhcHBlclwiPlxyXG4gICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgbWF0LWZsYXQtYnV0dG9uIG1hdC1kaWFsb2ctY2xvc2U+XHJcbiAgICAgIHt7IHRyYW5zbGF0aW9ucygpLmNhbmNlbCB9fVxyXG4gICAgPC9idXR0b24+XHJcbiAgICA8YnV0dG9uXHJcbiAgICAgIHR5cGU9XCJidXR0b25cIlxyXG4gICAgICBtYXQtZmxhdC1idXR0b25cclxuICAgICAgY29sb3I9XCJhY2NlbnRcIlxyXG4gICAgICAoY2xpY2spPVwic2F2ZUZpbHRlcnMoKVwiXHJcbiAgICA+XHJcbiAgICAgIHt7IHRyYW5zbGF0aW9ucygpLnNhdmUgfX1cclxuICAgIDwvYnV0dG9uPlxyXG4gIDwvZGl2PlxyXG48L21hdC1kaWFsb2ctYWN0aW9ucz5cclxuIl19
@@ -512,7 +512,9 @@ class MaterialTableFilterDialogComponent {
512
512
  }
513
513
  hasFilterValue(column) {
514
514
  const filter = this.filtersValue()[column.field];
515
- if (!filter?.value)
515
+ console.log(column.field);
516
+ console.log(filter?.value);
517
+ if (filter?.value === null || filter?.value === undefined || filter?.value === '')
516
518
  return false;
517
519
  if (column.filterType === 'date') {
518
520
  const dateValues = filter.value;
@@ -1 +1 @@
1
- {"version":3,"file":"ngx-st-tables.mjs","sources":["../../../projects/ngx-st-tables/src/lib/constants/default-translations.ts","../../../projects/ngx-st-tables/src/lib/services/st-tables-translations.service.ts","../../../projects/ngx-st-tables/src/lib/components/select-table/select-table.component.ts","../../../projects/ngx-st-tables/src/lib/components/select-table/select-table.component.html","../../../projects/ngx-st-tables/src/lib/components/material-table/material-table-caption/material-table-filter-dialog/material-table-filter.component.ts","../../../projects/ngx-st-tables/src/lib/components/material-table/material-table-caption/material-table-filter-dialog/material-table-filter-dialog.component.ts","../../../projects/ngx-st-tables/src/lib/components/material-table/material-table-caption/material-table-filter-dialog/material-table-filter-dialog.component.html","../../../projects/ngx-st-tables/src/lib/components/material-table/material-table-caption/material-table-order-column-dialog/material-table-order-column-dialog.component.ts","../../../projects/ngx-st-tables/src/lib/components/material-table/material-table-caption/material-table-order-column-dialog/material-table-order-column-dialog.component.html","../../../projects/ngx-st-tables/src/lib/components/material-table/material-table-caption/material-table-caption.component.ts","../../../projects/ngx-st-tables/src/lib/components/material-table/material-table-caption/material-table-caption.component.html","../../../projects/ngx-st-tables/src/lib/components/material-table/material-table-selected-rows/material-table-selected-rows.component.ts","../../../projects/ngx-st-tables/src/lib/components/material-table/material-table-selected-rows/material-table-selected-rows.component.html","../../../projects/ngx-st-tables/src/lib/pipes/date-without-timezone-format.pipe.ts","../../../projects/ngx-st-tables/src/lib/components/material-table/material-table-row-cell/material-table-row-cell.component.ts","../../../projects/ngx-st-tables/src/lib/components/material-table/material-table-row-cell/material-table-row-cell.component.html","../../../projects/ngx-st-tables/src/lib/components/material-table/material-table.component.ts","../../../projects/ngx-st-tables/src/lib/components/material-table/material-table.component.html","../../../projects/ngx-st-tables/src/lib/constants/map-table-data-to-api.ts","../../../projects/ngx-st-tables/src/lib/ngx-st-tables.module.ts","../../../projects/ngx-st-tables/src/public-api.ts","../../../projects/ngx-st-tables/src/ngx-st-tables.ts"],"sourcesContent":["import { StTablesTranslationsModel } from '../models/st-tables-translations.model';\r\n\r\nexport const DEFAULT_TRANSLATIONS: StTablesTranslationsModel = {\r\n globalSearch: 'Search',\r\n cancel: 'Cancel',\r\n close: 'Close',\r\n save: 'Save',\r\n reorderColumnsTitle: 'Reorder Columns',\r\n reorderColumns: 'Reorder Columns',\r\n expandAllFilters: 'Expand all filters',\r\n collapseAllFilters: 'Collapse all filters',\r\n clearAllFilters: 'Clear All Filters',\r\n filterTitle: 'Filters',\r\n filter: 'Filter',\r\n searchFilter: 'Search',\r\n filterChooseDate: 'Choose a date',\r\n booleanPickValue: 'Pick Value',\r\n booleanNone: 'None',\r\n booleanYes: 'Yes',\r\n booleanNo: 'No',\r\n customPickValue: 'Pick Value',\r\n customNone: 'None',\r\n rowSelected: 'row selected',\r\n rowSelectColumnLabel: 'Row Select',\r\n rowActionsColumnLabel: 'Row Actions',\r\n rowExtendColumnLabel: 'Row Extend',\r\n matchMode: 'Match Mode',\r\n clearFilter: 'Clear Filter',\r\n dateFrom: 'Date From',\r\n dateTo: 'Date To',\r\n resetTableSettings: 'Reset Table Settings',\r\n};\r\n","import { Inject, Injectable, Optional, signal } from '@angular/core';\r\nimport { StTablesTranslationsModel } from '../models/st-tables-translations.model';\r\nimport { DEFAULT_TRANSLATIONS } from '../constants/default-translations';\r\n\r\n@Injectable({\r\n providedIn: 'root',\r\n})\r\nexport class StTablesTranslationsService {\r\n private readonly translations =\r\n signal<StTablesTranslationsModel>(DEFAULT_TRANSLATIONS);\r\n\r\n constructor(\r\n @Optional()\r\n @Inject('ST_TABLES_CONFIG')\r\n private config: { translations?: Partial<StTablesTranslationsModel> }\r\n ) {\r\n if (this.config?.translations) {\r\n this.setTranslations(this.config.translations);\r\n }\r\n }\r\n\r\n setTranslations(translations: Partial<StTablesTranslationsModel>) {\r\n this.translations.set({\r\n ...DEFAULT_TRANSLATIONS,\r\n ...translations,\r\n });\r\n }\r\n\r\n getTranslations() {\r\n return this.translations;\r\n }\r\n}\r\n","import {\r\n Component,\r\n EventEmitter,\r\n Input,\r\n OnInit,\r\n Output,\r\n ViewChild,\r\n} from '@angular/core';\r\nimport { MatPaginator } from '@angular/material/paginator';\r\nimport { MatTableDataSource } from '@angular/material/table';\r\nimport { UntypedFormControl } from '@angular/forms';\r\n\r\n@Component({\r\n selector: 'ngx-st-select-table',\r\n templateUrl: './select-table.component.html',\r\n styleUrls: [\r\n './select-table.component.scss',\r\n '../../../../assets/base-table.scss',\r\n ],\r\n})\r\nexport class SelectTableComponent implements OnInit {\r\n @ViewChild(MatPaginator) paginator: MatPaginator;\r\n\r\n @Input()\r\n title: string;\r\n\r\n @Input()\r\n required: boolean = false;\r\n\r\n @Input()\r\n multiple: boolean = false;\r\n\r\n @Input()\r\n initSelected: any;\r\n\r\n @Input()\r\n initSearchVal: any;\r\n\r\n @Input()\r\n searchLabel: string = 'Search';\r\n\r\n @Input()\r\n selectedLabel: string = 'Selected';\r\n\r\n @Input()\r\n set setInitColumns(col: { [col: string]: string }) {\r\n this.columns = ['active', ...Object.keys(col)];\r\n this.initColumns = col;\r\n }\r\n\r\n @Input()\r\n set tableData(data: any[]) {\r\n this.tableSource = new MatTableDataSource(data);\r\n this.tableSource.paginator = this.paginator;\r\n }\r\n\r\n @Input()\r\n set validError(error: boolean) {\r\n this._validError = error;\r\n }\r\n\r\n get validError(): boolean {\r\n return this._validError;\r\n }\r\n\r\n private _validError = false;\r\n\r\n @Output()\r\n returnRowSelected: EventEmitter<any[]> = new EventEmitter<any[]>();\r\n\r\n tableSource: MatTableDataSource<any>;\r\n columns: string[];\r\n initColumns: {\r\n [col: string]: string;\r\n };\r\n search: UntypedFormControl = new UntypedFormControl('');\r\n rowSelected: any[] = [];\r\n\r\n constructor() {}\r\n\r\n ngOnInit(): void {\r\n this.search.valueChanges.subscribe(res => {\r\n this.tableSource.filter = res.trim().toLowerCase();\r\n });\r\n setTimeout(() => {\r\n if (this.initSearchVal) {\r\n this.search.setValue(this.initSearchVal);\r\n this.rowClick(this.initSelected);\r\n }\r\n }, 1000);\r\n }\r\n\r\n clearSearch() {\r\n this.search.setValue('');\r\n }\r\n\r\n rowClick(row: any) {\r\n const found = this.rowSelected.find(tmpRow => tmpRow === row);\r\n if (found) {\r\n this.rowSelected = this.rowSelected.filter(tmpRow => tmpRow !== row);\r\n } else {\r\n if (this.multiple) {\r\n this.rowSelected.push(row);\r\n } else {\r\n this.rowSelected = [row];\r\n }\r\n }\r\n this.returnRowSelected.emit(this.rowSelected);\r\n }\r\n\r\n checkActiveRow(row: any) {\r\n return !!this.rowSelected.find(activeRow => activeRow === row);\r\n }\r\n}\r\n","<div class=\"shared-table-selector\">\r\n <p class=\"title\" [ngClass]=\"{ 'error-text': validError }\">\r\n {{ title }} {{ required ? '*' : '' }}\r\n </p>\r\n\r\n <div class=\"search-form row align-items-center\">\r\n <div class=\"col-sm-12 col-md row align-items-center\">\r\n <mat-form-field class=\"col\">\r\n <input\r\n matInput\r\n placeholder=\"{{ searchLabel }}\"\r\n [formControl]=\"search\"\r\n />\r\n </mat-form-field>\r\n <div class=\"clear col-auto\">\r\n <mat-icon (click)=\"clearSearch()\">clear</mat-icon>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <table mat-table [dataSource]=\"tableSource\">\r\n @for (col of columns; track col) {\r\n <ng-container [matColumnDef]=\"col\">\r\n <th mat-header-cell *matHeaderCellDef>\r\n {{ col === 'active' ? selectedLabel : initColumns[col] }}\r\n </th>\r\n <td mat-cell *matCellDef=\"let element\">\r\n @if (col === 'active') {\r\n @if (checkActiveRow(element)) {\r\n <mat-icon class=\"active-row\">done</mat-icon>\r\n }\r\n }\r\n @if (col !== 'active') {\r\n {{ element[col] }}\r\n }\r\n </td>\r\n </ng-container>\r\n }\r\n\r\n <tr mat-header-row *matHeaderRowDef=\"columns\"></tr>\r\n <tr\r\n mat-row\r\n *matRowDef=\"let row; columns: columns\"\r\n (click)=\"rowClick(row)\"\r\n [ngClass]=\"{ active: checkActiveRow(row) }\"\r\n ></tr>\r\n </table>\r\n <mat-paginator [pageSizeOptions]=\"[5]\"></mat-paginator>\r\n</div>\r\n","import {\r\n ChangeDetectionStrategy,\r\n Component,\r\n input,\r\n effect,\r\n output,\r\n computed,\r\n ChangeDetectorRef,\r\n} from '@angular/core';\r\nimport { StTablesTranslationsService } from '../../../../services/st-tables-translations.service';\r\nimport { ViewStMaterialTableColumnModel } from '../../../../models/view/view-st-material-table-column.model';\r\nimport { NonNullableFormBuilder } from '@angular/forms';\r\nimport {\r\n StMaterialTableFilter,\r\n StMaterialTableFilterMatchModeType,\r\n StMaterialTableFilterValueType,\r\n} from '../../../../models/models';\r\n\r\n@Component({\r\n selector: 'ngx-st-material-table-filter',\r\n template: `\r\n <form class=\"row\" [formGroup]=\"formGroup\">\r\n <div class=\"col-auto\">\r\n <mat-form-field appearance=\"outline\" class=\"match-mode-field\">\r\n <mat-label>{{ translations().matchMode }}</mat-label>\r\n <input matInput type=\"text\" formControlName=\"matchMode\" />\r\n </mat-form-field>\r\n </div>\r\n\r\n @if (\r\n column().filterType === 'string' || column().filterType === 'number'\r\n ) {\r\n <div class=\"col\">\r\n <mat-form-field appearance=\"outline\" class=\"full-width\">\r\n <mat-label>{{ translations().searchFilter }}</mat-label>\r\n <input\r\n matInput\r\n [type]=\"column().filterType === 'string' ? 'text' : 'number'\"\r\n formControlName=\"value\"\r\n />\r\n </mat-form-field>\r\n </div>\r\n }\r\n\r\n @if (column().filterType === 'date') {\r\n <div class=\"col\">\r\n <mat-form-field appearance=\"outline\" class=\"date-field\">\r\n <mat-label>{{ translations().dateFrom }}</mat-label>\r\n <input\r\n matInput\r\n [matDatepicker]=\"picker1\"\r\n formControlName=\"dateFrom\"\r\n />\r\n <mat-datepicker-toggle\r\n matIconSuffix\r\n [for]=\"picker1\"\r\n ></mat-datepicker-toggle>\r\n <mat-datepicker #picker1></mat-datepicker>\r\n </mat-form-field>\r\n </div>\r\n <div class=\"col\">\r\n <mat-form-field appearance=\"outline\" class=\"date-field\">\r\n <mat-label>{{ translations().dateTo }}</mat-label>\r\n <input\r\n matInput\r\n [matDatepicker]=\"picker2\"\r\n formControlName=\"dateTo\"\r\n />\r\n <mat-datepicker-toggle\r\n matIconSuffix\r\n [for]=\"picker2\"\r\n ></mat-datepicker-toggle>\r\n <mat-datepicker #picker2></mat-datepicker>\r\n </mat-form-field>\r\n </div>\r\n }\r\n\r\n @if (column().filterType === 'boolean') {\r\n <div class=\"col\">\r\n <mat-form-field appearance=\"outline\" class=\"full-width\">\r\n <mat-label>{{ translations().booleanPickValue }}</mat-label>\r\n <mat-select formControlName=\"value\">\r\n <mat-option value=\"\">{{ translations().booleanNone }}</mat-option>\r\n <mat-option [value]=\"true\">{{\r\n translations().booleanYes\r\n }}</mat-option>\r\n <mat-option [value]=\"false\">{{\r\n translations().booleanNo\r\n }}</mat-option>\r\n </mat-select>\r\n </mat-form-field>\r\n </div>\r\n }\r\n\r\n @if (column().filterType === 'custom') {\r\n <div class=\"col\">\r\n <mat-form-field appearance=\"outline\" class=\"full-width\">\r\n <mat-label>{{ translations().customPickValue }}</mat-label>\r\n <mat-select formControlName=\"value\">\r\n <mat-option value=\"\">{{ translations().customNone }}</mat-option>\r\n @for (\r\n option of column().customFilterOptions;\r\n track option.value\r\n ) {\r\n <mat-option [value]=\"option.value\">{{\r\n option.label\r\n }}</mat-option>\r\n }\r\n </mat-select>\r\n </mat-form-field>\r\n </div>\r\n }\r\n </form>\r\n `,\r\n styles: [\r\n `\r\n :host {\r\n width: 100%;\r\n }\r\n\r\n form.row {\r\n gap: 8px;\r\n width: 100%;\r\n\r\n & > .col-auto,\r\n & > .col {\r\n padding: 0;\r\n }\r\n }\r\n\r\n .match-mode-field {\r\n width: 120px;\r\n }\r\n\r\n .date-field {\r\n width: 170px;\r\n }\r\n\r\n .full-width {\r\n width: 100%;\r\n }\r\n `,\r\n ],\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n})\r\nexport class MaterialTableFilterComponent {\r\n column = input.required<ViewStMaterialTableColumnModel>();\r\n filterValue = input<StMaterialTableFilter>({} as StMaterialTableFilter);\r\n\r\n filterValueChanged = output<StMaterialTableFilter>();\r\n\r\n // Cache translations as computed signal\r\n translations = computed(() => this.stTableTranslations.getTranslations()());\r\n\r\n formGroup = this.fb.group({\r\n matchMode: {\r\n value: <StMaterialTableFilterMatchModeType>'contains',\r\n disabled: true,\r\n },\r\n value: <null | string | number>'',\r\n dateFrom: <null | Date>null,\r\n dateTo: <null | Date>null,\r\n });\r\n\r\n private isUpdatingFromOutside = false;\r\n\r\n constructor(\r\n private stTableTranslations: StTablesTranslationsService,\r\n private fb: NonNullableFormBuilder,\r\n private changeDetectorRef: ChangeDetectorRef\r\n ) {\r\n // React to filterValue changes\r\n effect(() => {\r\n const filter = this.filterValue();\r\n if (filter && Object.keys(filter).length > 0) {\r\n this.isUpdatingFromOutside = true;\r\n this.setFilterValue(filter);\r\n this.isUpdatingFromOutside = false;\r\n }\r\n }, {allowSignalWrites: true});\r\n\r\n // React to form value changes\r\n effect(() => {\r\n // Track form changes\r\n this.formGroup.valueChanges.subscribe(() => {\r\n if (!this.isUpdatingFromOutside) {\r\n this.updateAfterFormValueChanged();\r\n }\r\n });\r\n }, {allowSignalWrites: true});\r\n }\r\n\r\n private setFilterValue(newFilterValue: StMaterialTableFilter) {\r\n if (newFilterValue) {\r\n this.formGroup.controls.matchMode.setValue(newFilterValue.matchMode, {\r\n emitEvent: false,\r\n });\r\n\r\n if (this.column().filterType === 'date') {\r\n const tmpValue = newFilterValue.value as [string | null, string | null];\r\n this.formGroup.controls.dateFrom.setValue(\r\n tmpValue[0] ? new Date(tmpValue[0]!) : null,\r\n { emitEvent: false }\r\n );\r\n this.formGroup.controls.dateTo.setValue(\r\n tmpValue[1] ? new Date(tmpValue[1]) : null,\r\n { emitEvent: false }\r\n );\r\n } else if (\r\n this.column().filterType === 'boolean' ||\r\n this.column().filterType === 'number'\r\n ) {\r\n this.formGroup.controls.value.setValue(\r\n ((newFilterValue.value as string | number | boolean | null) ?? null) as any,\r\n { emitEvent: false }\r\n );\r\n } else {\r\n const value = newFilterValue.value as string | number | null;\r\n this.formGroup.controls.value.setValue(\r\n (value === null || value === undefined ? '' : value) as any,\r\n { emitEvent: false }\r\n );\r\n }\r\n\r\n this.changeDetectorRef.markForCheck();\r\n }\r\n }\r\n\r\n private updateAfterFormValueChanged() {\r\n let tmpValue: StMaterialTableFilterValueType = null;\r\n const controlValue = this.formGroup.controls.value.value;\r\n\r\n if (this.column().filterType === 'date') {\r\n tmpValue = [\r\n this.formatDateToString(this.formGroup.controls.dateFrom.value),\r\n this.formatDateToString(this.formGroup.controls.dateTo.value),\r\n ] as [string | null, string | null];\r\n }\r\n\r\n if (\r\n this.column().filterType === 'boolean' ||\r\n this.column().filterType === 'number'\r\n ) {\r\n tmpValue =\r\n (controlValue === null || controlValue === undefined\r\n ? null\r\n : (controlValue as StMaterialTableFilterValueType)) ?? null;\r\n } else if (this.column().filterType !== 'date') {\r\n tmpValue =\r\n controlValue === null || controlValue === undefined\r\n ? ('' as StMaterialTableFilterValueType)\r\n : (controlValue as StMaterialTableFilterValueType);\r\n }\r\n\r\n const newFilter: StMaterialTableFilter = {\r\n matchMode: this.formGroup.controls.matchMode.value,\r\n value: tmpValue,\r\n };\r\n\r\n this.filterValueChanged.emit(newFilter);\r\n }\r\n\r\n private formatDateToString(date: Date | null): string | null {\r\n if (!date) return null;\r\n\r\n const year = date.getFullYear();\r\n const month = (date.getMonth() + 1).toString().padStart(2, '0');\r\n const day = date.getDate().toString().padStart(2, '0');\r\n\r\n return `${year}-${month}-${day}`;\r\n }\r\n}\r\n","import {\r\n ChangeDetectionStrategy,\r\n Component,\r\n inject,\r\n OnInit,\r\n signal,\r\n computed,\r\n} from '@angular/core';\r\nimport { MAT_DIALOG_DATA, MatDialogRef } from '@angular/material/dialog';\r\nimport { ViewStMaterialTableColumnModel } from '../../../../models/view/view-st-material-table-column.model';\r\nimport { StTablesTranslationsService } from '../../../../services/st-tables-translations.service';\r\nimport { StMaterialColumnFilterType } from '../../../../models/st-material-table-column.model';\r\nimport {\r\n StMaterialTableFilter,\r\n StMaterialTableFilterValueType,\r\n} from '../../../../models/models';\r\n\r\n@Component({\r\n selector: 'st-material-table-filter-dialog',\r\n templateUrl: './material-table-filter-dialog.component.html',\r\n styleUrls: ['./material-table-filter-dialog.component.scss'],\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n})\r\nexport class MaterialTableFilterDialogComponent implements OnInit {\r\n public dialogData = inject<{\r\n columns: ViewStMaterialTableColumnModel[];\r\n initFilters: { [key: string]: StMaterialTableFilter };\r\n }>(MAT_DIALOG_DATA);\r\n\r\n public dialogRef = inject(\r\n MatDialogRef<\r\n MaterialTableFilterDialogComponent,\r\n MaterialTableFilterDialogResult\r\n >\r\n );\r\n\r\n private stTableTranslations = inject(StTablesTranslationsService);\r\n\r\n // Cache translations as computed signal\r\n translations = computed(() => this.stTableTranslations.getTranslations()());\r\n\r\n filterColumns = signal<ViewStMaterialTableColumnModel[]>([]);\r\n allVisible = signal(true);\r\n filtersValue = signal<{ [key: string]: StMaterialTableFilter }>({});\r\n\r\n hasFilterValue(column: ViewStMaterialTableColumnModel): boolean {\r\n const filter = this.filtersValue()[column.field];\r\n if (!filter?.value) return false;\r\n\r\n if (column.filterType === 'date') {\r\n const dateValues = filter.value as [string | null, string | null];\r\n return !!(dateValues?.[0] || dateValues?.[1]);\r\n }\r\n\r\n return !!filter.value;\r\n }\r\n\r\n ngOnInit() {\r\n // Initialize filters for all filterable columns\r\n const initialFilters: { [key: string]: StMaterialTableFilter } = {};\r\n\r\n const columns = this.dialogData.columns\r\n .filter(column => column.filter)\r\n .map(col => {\r\n // Set default filter value based on type\r\n initialFilters[col.field] = {\r\n value: this.getDefaultFilterValue(col.filterType!),\r\n matchMode: MaterialTableFilterDialogComponent.getBaseMatchModeByType(\r\n col.filterType!\r\n ),\r\n };\r\n\r\n return {\r\n ...col,\r\n expanded: true,\r\n };\r\n });\r\n\r\n this.filterColumns.set(columns);\r\n\r\n // Apply initial filter values if provided\r\n if (this.dialogData.initFilters) {\r\n Object.entries(this.dialogData.initFilters).forEach(([key, filter]) => {\r\n if (filter.value !== null && filter.value !== undefined) {\r\n initialFilters[key] = { ...filter };\r\n }\r\n });\r\n }\r\n\r\n this.filtersValue.set(initialFilters);\r\n }\r\n\r\n clearFilter(column: ViewStMaterialTableColumnModel) {\r\n this.filtersValue.update(current => ({\r\n ...current,\r\n [column.field]: {\r\n value: this.getDefaultFilterValue(column.filterType!),\r\n matchMode: current[column.field].matchMode,\r\n },\r\n }));\r\n }\r\n\r\n clearAllFilters() {\r\n this.filterColumns().forEach(column => {\r\n this.clearFilter(column);\r\n });\r\n }\r\n\r\n showAllFilters() {\r\n this.filterColumns.update(columns =>\r\n columns.map(column => ({ ...column, expanded: true }))\r\n );\r\n this.allVisible.set(true);\r\n }\r\n\r\n hideAllFilters() {\r\n this.filterColumns.update(columns =>\r\n columns.map(column => ({ ...column, expanded: false }))\r\n );\r\n this.allVisible.set(false);\r\n }\r\n\r\n saveFilters() {\r\n // Only include filters that have values\r\n const filtersReady = Object.entries(this.filtersValue()).reduce(\r\n (acc, [key, filter]) => {\r\n const hasValue = Array.isArray(filter.value)\r\n ? filter.value.some(v => v !== null && v !== undefined)\r\n : filter.value !== null &&\r\n filter.value !== undefined &&\r\n filter.value !== '';\r\n\r\n if (hasValue) {\r\n acc[key] = filter;\r\n }\r\n return acc;\r\n },\r\n {} as { [key: string]: StMaterialTableFilter }\r\n );\r\n\r\n this.dialogRef.close({ filters: filtersReady });\r\n }\r\n\r\n filterValueChanged(\r\n column: ViewStMaterialTableColumnModel,\r\n newFilter: StMaterialTableFilter\r\n ) {\r\n this.filtersValue.update(current => ({\r\n ...current,\r\n [column.field]: newFilter,\r\n }));\r\n }\r\n\r\n private getDefaultFilterValue(\r\n filterType: StMaterialColumnFilterType\r\n ): StMaterialTableFilterValueType {\r\n switch (filterType) {\r\n case 'date':\r\n return [null, null];\r\n case 'boolean':\r\n case 'number':\r\n return null;\r\n default:\r\n return '';\r\n }\r\n }\r\n\r\n static getBaseMatchModeByType(\r\n filterType: StMaterialColumnFilterType\r\n ): 'contains' | 'equal' | 'between' {\r\n if (filterType === 'date') {\r\n return 'between';\r\n } else if (\r\n filterType === 'number' ||\r\n filterType === 'boolean' ||\r\n filterType === 'custom'\r\n ) {\r\n return 'equal';\r\n } else {\r\n return 'contains';\r\n }\r\n }\r\n}\r\n\r\nexport interface MaterialTableFilterDialogResult {\r\n filters: { [key: string]: StMaterialTableFilter };\r\n}\r\n","<h3 mat-dialog-title class=\"filters-dialog-title\">\r\n {{ translations().filterTitle }}\r\n <div class=\"filters-show-hide\">\r\n @if (!allVisible()) {\r\n <button\r\n type=\"button\"\r\n mat-icon-button\r\n (click)=\"showAllFilters()\"\r\n [matTooltip]=\"translations().expandAllFilters\"\r\n >\r\n <mat-icon>unfold_more</mat-icon>\r\n </button>\r\n }\r\n @if (allVisible()) {\r\n <button\r\n type=\"button\"\r\n mat-icon-button\r\n (click)=\"hideAllFilters()\"\r\n [matTooltip]=\"translations().collapseAllFilters\"\r\n >\r\n <mat-icon>unfold_less</mat-icon>\r\n </button>\r\n }\r\n <button\r\n type=\"button\"\r\n mat-icon-button\r\n (click)=\"clearAllFilters()\"\r\n [matTooltip]=\"translations().clearAllFilters\"\r\n >\r\n <mat-icon>filter_alt_off</mat-icon>\r\n </button>\r\n </div>\r\n</h3>\r\n\r\n<mat-dialog-content>\r\n <hr />\r\n @for (column of filterColumns(); track column.field) {\r\n <div class=\"filter\">\r\n <div class=\"filter-title row justify-content-between\">\r\n <div class=\"row align-items-center\">\r\n <p>\r\n {{ column.header }}\r\n </p>\r\n @if (hasFilterValue(column)) {\r\n <mat-icon\r\n (click)=\"clearFilter(column)\"\r\n class=\"filter-value-clear\"\r\n [matTooltip]=\"translations().clearFilter\"\r\n >filter_alt_off</mat-icon\r\n >\r\n }\r\n </div>\r\n\r\n @if (column.expanded) {\r\n <mat-icon (click)=\"column.expanded = !column.expanded\"\r\n >keyboard_arrow_up</mat-icon\r\n >\r\n } @else {\r\n <mat-icon (click)=\"column.expanded = !column.expanded\"\r\n >keyboard_arrow_down</mat-icon\r\n >\r\n }\r\n </div>\r\n <div class=\"filter-content row\" [ngClass]=\"{ hide: !column.expanded }\">\r\n <ngx-st-material-table-filter\r\n [column]=\"column\"\r\n [filterValue]=\"filtersValue()[column.field]\"\r\n (filterValueChanged)=\"filterValueChanged(column, $event)\"\r\n />\r\n </div>\r\n </div>\r\n }\r\n</mat-dialog-content>\r\n<mat-dialog-actions>\r\n <div class=\"row justify-content-between dialog-actions-wrapper\">\r\n <button type=\"button\" mat-flat-button mat-dialog-close>\r\n {{ translations().cancel }}\r\n </button>\r\n <button\r\n type=\"button\"\r\n mat-flat-button\r\n color=\"accent\"\r\n (click)=\"saveFilters()\"\r\n >\r\n {{ translations().save }}\r\n </button>\r\n </div>\r\n</mat-dialog-actions>\r\n","import {\r\n ChangeDetectionStrategy,\r\n Component,\r\n inject,\r\n signal,\r\n} from '@angular/core';\r\nimport { MAT_DIALOG_DATA, MatDialogRef } from '@angular/material/dialog';\r\nimport { CdkDragDrop, moveItemInArray } from '@angular/cdk/drag-drop';\r\nimport { ViewStMaterialTableColumnModel } from '../../../../models/view/view-st-material-table-column.model';\r\nimport { StTablesTranslationsService } from '../../../../services/st-tables-translations.service';\r\n\r\n@Component({\r\n selector: 'st-material-table-order-column-dialog',\r\n templateUrl: './material-table-order-column-dialog.component.html',\r\n styleUrls: ['./material-table-order-column-dialog.component.scss'],\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n})\r\nexport class MaterialTableOrderColumnDialogComponent {\r\n public dialogData = inject<{\r\n columns: ViewStMaterialTableColumnModel[];\r\n }>(MAT_DIALOG_DATA);\r\n\r\n public dialogRef = inject(\r\n MatDialogRef<\r\n MaterialTableOrderColumnDialogComponent,\r\n MaterialTableOrderColumnDialogResult\r\n >\r\n );\r\n\r\n public stTablesTranslations = inject(StTablesTranslationsService);\r\n\r\n // Use signal for reactive columns array\r\n columns = signal<ViewStMaterialTableColumnModel[]>(\r\n this.dialogData.columns.map(column => ({ ...column }))\r\n );\r\n\r\n drop(event: CdkDragDrop<string[]>) {\r\n this.columns.update(cols => {\r\n const newCols = [...cols];\r\n moveItemInArray(newCols, event.previousIndex, event.currentIndex);\r\n return newCols;\r\n });\r\n }\r\n\r\n saveOrder() {\r\n this.dialogRef.close({\r\n columnsOrder: this.columns().map(column => column.field),\r\n });\r\n }\r\n}\r\n\r\nexport interface MaterialTableOrderColumnDialogResult {\r\n columnsOrder: string[];\r\n}\r\n","<h3 mat-dialog-title>\r\n {{ stTablesTranslations.getTranslations()().reorderColumns }}\r\n</h3>\r\n<mat-dialog-content>\r\n <div\r\n cdkDropList\r\n class=\"reorder-column-list\"\r\n (cdkDropListDropped)=\"drop($event)\"\r\n >\r\n @for (column of columns(); track column.field) {\r\n <div class=\"reorder-column-element\" cdkDrag>\r\n <div class=\"row\">\r\n <mat-icon>drag_indicator</mat-icon>\r\n <p>{{ column.selectColumnLabel || column.header }}</p>\r\n </div>\r\n @if (!column.visible) {\r\n <mat-icon class=\"column-hidden\">visibility_off</mat-icon>\r\n }\r\n </div>\r\n }\r\n </div>\r\n</mat-dialog-content>\r\n<mat-dialog-actions>\r\n <div class=\"row justify-content-between\" style=\"width: 100%\">\r\n <button type=\"button\" mat-flat-button mat-dialog-close>\r\n {{ stTablesTranslations.getTranslations()().close }}\r\n </button>\r\n <button type=\"button\" mat-flat-button color=\"accent\" (click)=\"saveOrder()\">\r\n {{ stTablesTranslations.getTranslations()().save }}\r\n </button>\r\n </div>\r\n</mat-dialog-actions>\r\n","import {\r\n ChangeDetectionStrategy,\r\n Component,\r\n OnInit,\r\n input,\r\n output,\r\n TemplateRef,\r\n signal,\r\n computed,\r\n inject,\r\n} from '@angular/core';\r\nimport { ViewStMaterialTableColumnModel } from '../../../models/view/view-st-material-table-column.model';\r\nimport { FormControl } from '@angular/forms';\r\nimport {\r\n StBaseService,\r\n StSubscribeDestroyComponent,\r\n} from 'ngx-st-base-functions';\r\nimport { debounceTime, filter, take, takeUntil } from 'rxjs/operators';\r\nimport { MatDialog } from '@angular/material/dialog';\r\nimport {\r\n MaterialTableFilterDialogComponent,\r\n MaterialTableFilterDialogResult,\r\n} from './material-table-filter-dialog/material-table-filter-dialog.component';\r\nimport { MaterialTableOrderColumnDialogComponent } from './material-table-order-column-dialog/material-table-order-column-dialog.component';\r\nimport { StTablesTranslationsService } from '../../../services/st-tables-translations.service';\r\nimport {\r\n ICaptionDataChanged,\r\n StMaterialTableFilter,\r\n} from '../../../models/models';\r\n\r\n@Component({\r\n selector: 'st-material-table-caption',\r\n templateUrl: './material-table-caption.component.html',\r\n styleUrls: ['./material-table-caption.component.scss'],\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n})\r\nexport class MaterialTableCaptionComponent\r\n extends StSubscribeDestroyComponent\r\n implements OnInit\r\n{\r\n public stTableTranslations = inject(StTablesTranslationsService);\r\n private dialog = inject(MatDialog);\r\n\r\n showGlobalSearch = input<boolean>();\r\n tableTitle = input('');\r\n allowPickColumns = input<boolean>(true);\r\n allowReorderColumns = input<boolean>(true);\r\n initGlobalSearch = input('');\r\n initFilters = input<{ [key: string]: StMaterialTableFilter }>({});\r\n showCreateButton = input<boolean>(false);\r\n createButtonLabel = input('Create');\r\n createButtonAction = input<(() => void) | undefined>();\r\n allowCreateRow = input<boolean>(false);\r\n disableCreateButton = input<boolean>(false);\r\n creatingRow = input<boolean>(false);\r\n extraCustomFilter = input<TemplateRef<any> | undefined>();\r\n columns = input([], {\r\n transform: (data: ViewStMaterialTableColumnModel[]) => {\r\n this._columns = data ? data : [];\r\n this.updateColumns();\r\n return this._columns;\r\n },\r\n });\r\n\r\n private _columns: ViewStMaterialTableColumnModel[] = [];\r\n\r\n captionDataChanged = output<ICaptionDataChanged>();\r\n resetTableSettings = output<boolean>();\r\n addNewRow = output<boolean>();\r\n\r\n showFilterButton = false;\r\n\r\n selectedColumns = new FormControl(<string[]>[]);\r\n globalSearch = new FormControl('');\r\n\r\n private filtersSignal = signal<{ [key: string]: StMaterialTableFilter }>({});\r\n\r\n // Computed property for active filters count - more efficient than recalculating every time\r\n activeFiltersCount = computed(() => {\r\n const filters = this.filtersSignal();\r\n return Object.keys(filters).filter(key => {\r\n const filterValue = filters[key]?.value;\r\n if (Array.isArray(filterValue)) {\r\n return filterValue.some(value => value !== null && value !== '');\r\n }\r\n return filterValue !== null && filterValue !== '';\r\n }).length;\r\n });\r\n\r\n private columnsOrder: string[] = [];\r\n private get filters() {\r\n return this.filtersSignal();\r\n }\r\n private set filters(value: { [key: string]: StMaterialTableFilter }) {\r\n this.filtersSignal.set(value);\r\n }\r\n\r\n ngOnInit(): void {\r\n this.globalSearch.setValue(this.initGlobalSearch() || '');\r\n this.filters = this.initFilters() || {};\r\n\r\n // Optimized: debounceTime already prevents rapid emissions, no need for distinctUntilChanged\r\n this.selectedColumns.valueChanges\r\n .pipe(takeUntil(this.ngDestroyed$), debounceTime(400))\r\n .subscribe(() => {\r\n this.emitCaptionDataChanged();\r\n });\r\n\r\n this.globalSearch.valueChanges\r\n .pipe(takeUntil(this.ngDestroyed$), debounceTime(400))\r\n .subscribe(() => {\r\n this.emitCaptionDataChanged();\r\n });\r\n }\r\n\r\n openFilterDialog() {\r\n this.dialog\r\n .open(MaterialTableFilterDialogComponent, {\r\n data: {\r\n initFilters: this.filters,\r\n columns: this.columns(),\r\n },\r\n maxWidth: '550px',\r\n width: '100%',\r\n autoFocus: false,\r\n })\r\n .afterClosed()\r\n .pipe(take(1), filter(StBaseService.notNull))\r\n .subscribe((res: MaterialTableFilterDialogResult) => {\r\n this.filters = res.filters;\r\n this.emitCaptionDataChanged();\r\n });\r\n }\r\n\r\n openReorderColumnsDialog() {\r\n this.dialog\r\n .open(MaterialTableOrderColumnDialogComponent, {\r\n data: {\r\n columns: this.columns(),\r\n },\r\n maxWidth: '450px',\r\n width: '100%',\r\n autoFocus: false,\r\n })\r\n .afterClosed()\r\n .pipe(take(1), filter(StBaseService.notNull))\r\n .subscribe((result: { columnsOrder: string[] }) => {\r\n this.columnsOrder = result.columnsOrder;\r\n this.emitCaptionDataChanged();\r\n });\r\n }\r\n\r\n resetTable() {\r\n this.resetTableSettings.emit(true);\r\n }\r\n\r\n createRowClicked() {\r\n if (this.allowCreateRow()) {\r\n this.addNewRow.emit(true);\r\n }\r\n }\r\n\r\n createButtonClicked() {\r\n const action = this.createButtonAction();\r\n if (action) {\r\n action();\r\n }\r\n }\r\n\r\n // clearAllFilters() {\r\n // const filtersKeys = Object.keys(this.filters);\r\n // filtersKeys.forEach(key => {\r\n // if (this.filters[key]) {\r\n // this.filters[key] = '';\r\n // }\r\n // });\r\n //\r\n // this.setActiveFiltersCount();\r\n // this.emitCaptionDataChanged();\r\n // }\r\n\r\n private emitCaptionDataChanged() {\r\n this.captionDataChanged.emit({\r\n selectedColumns: this.selectedColumns.value || [],\r\n globalSearch: this.globalSearch.value || '',\r\n columnsOrder: this.columnsOrder || [],\r\n filters: this.filters,\r\n });\r\n }\r\n\r\n private updateColumns() {\r\n const columnsFilters = this._columns.filter(column => column.filter);\r\n this.showFilterButton = columnsFilters.length > 0;\r\n this.selectedColumns.setValue(\r\n this._columns.filter(col => col.visible).map(col => col.field) || []\r\n );\r\n this.columnsOrder = this._columns.map(col => col.field) || [];\r\n }\r\n}\r\n","@if (\r\n allowPickColumns() ||\r\n tableTitle() ||\r\n allowReorderColumns() ||\r\n showGlobalSearch() ||\r\n showFilterButton ||\r\n showCreateButton()\r\n) {\r\n <div\r\n class=\"st-material-table-caption row align-items-center\"\r\n [ngClass]=\"{\r\n 'justify-content-between':\r\n (allowPickColumns() || tableTitle() || allowReorderColumns()) &&\r\n (showGlobalSearch() ||\r\n showFilterButton ||\r\n showCreateButton() ||\r\n extraCustomFilter()),\r\n 'justify-content-end':\r\n !allowPickColumns() && !tableTitle() && !allowReorderColumns()\r\n }\"\r\n >\r\n @if (allowPickColumns() || tableTitle() || allowReorderColumns()) {\r\n <div class=\"col-auto d-flex align-items-center\">\r\n @if (tableTitle()) {\r\n <p class=\"table-title\">{{ tableTitle() }}</p>\r\n }\r\n\r\n @if (allowPickColumns()) {\r\n <mat-form-field appearance=\"outline\" class=\"caption-select-columns\">\r\n <mat-select [formControl]=\"selectedColumns\" multiple>\r\n <mat-select-trigger>\r\n {{ selectedColumns.value ? selectedColumns.value!.length : 0 }}\r\n columns selected\r\n </mat-select-trigger>\r\n @for (column of columns(); track column.field) {\r\n <mat-option\r\n [value]=\"column.field\"\r\n [disabled]=\"column.type === 'actions'\"\r\n style=\"text-transform: capitalize\"\r\n >{{\r\n column.selectColumnLabel || column.header || column.field\r\n }}</mat-option\r\n >\r\n }\r\n </mat-select>\r\n </mat-form-field>\r\n }\r\n\r\n @if (allowPickColumns() || tableTitle()) {\r\n <button\r\n type=\"button\"\r\n mat-icon-button\r\n (click)=\"resetTable()\"\r\n [matTooltip]=\"\r\n stTableTranslations.getTranslations()().resetTableSettings\r\n \"\r\n >\r\n <mat-icon class=\"reorder-icon\">refresh</mat-icon>\r\n </button>\r\n }\r\n\r\n @if (allowReorderColumns()) {\r\n <button\r\n type=\"button\"\r\n mat-icon-button\r\n (click)=\"openReorderColumnsDialog()\"\r\n >\r\n <mat-icon class=\"reorder-icon\">low_priority</mat-icon>\r\n </button>\r\n }\r\n </div>\r\n }\r\n\r\n @if (\r\n showGlobalSearch() ||\r\n showFilterButton ||\r\n showCreateButton() ||\r\n extraCustomFilter()\r\n ) {\r\n <div class=\"col-auto d-flex align-items-center gap-1\">\r\n @if (extraCustomFilter()) {\r\n <ng-container\r\n [ngTemplateOutlet]=\"extraCustomFilter()!\"\r\n ></ng-container>\r\n }\r\n\r\n @if (showFilterButton) {\r\n <!-- @if (activeFiltersCount) {-->\r\n <!-- <button-->\r\n <!-- mat-icon-button-->\r\n <!-- (click)=\"clearAllFilters()\"-->\r\n <!-- [matTooltip]=\"'Clear Filters'\"-->\r\n <!-- >-->\r\n <!-- <mat-icon>filter_alt_off</mat-icon>-->\r\n <!-- </button>-->\r\n <!-- }-->\r\n\r\n <button type=\"button\" mat-icon-button (click)=\"openFilterDialog()\">\r\n <mat-icon\r\n [matBadge]=\"activeFiltersCount()\"\r\n [matBadgeHidden]=\"!activeFiltersCount()\"\r\n [matBadgeSize]=\"'small'\"\r\n matBadgePosition=\"before\"\r\n >filter_alt</mat-icon\r\n >\r\n </button>\r\n }\r\n\r\n @if (showGlobalSearch()) {\r\n <mat-form-field appearance=\"outline\" class=\"search-field\">\r\n <input\r\n matInput\r\n [formControl]=\"globalSearch\"\r\n [placeholder]=\"\r\n stTableTranslations.getTranslations()().globalSearch\r\n \"\r\n />\r\n <button\r\n type=\"button\"\r\n matSuffix\r\n mat-icon-button\r\n aria-label=\"Clear\"\r\n (click)=\"globalSearch.setValue('')\"\r\n >\r\n <mat-icon>close</mat-icon>\r\n </button>\r\n </mat-form-field>\r\n }\r\n\r\n @if (allowCreateRow()) {\r\n <button\r\n type=\"button\"\r\n color=\"primary\"\r\n mat-icon-button\r\n [disabled]=\"disableCreateButton() || creatingRow()\"\r\n (click)=\"createRowClicked()\"\r\n >\r\n <mat-icon>add</mat-icon>\r\n </button>\r\n }\r\n\r\n @if (showCreateButton()) {\r\n <button\r\n type=\"button\"\r\n color=\"primary\"\r\n mat-flat-button\r\n [disabled]=\"disableCreateButton() || creatingRow()\"\r\n (click)=\"createButtonClicked()\"\r\n >\r\n {{ createButtonLabel() }}\r\n </button>\r\n }\r\n </div>\r\n }\r\n </div>\r\n}\r\n","import {\r\n ChangeDetectionStrategy,\r\n Component,\r\n input,\r\n output,\r\n} from '@angular/core';\r\nimport { StTablesTranslationsService } from '../../../services/st-tables-translations.service';\r\n\r\n@Component({\r\n selector: 'st-material-table-selected-rows',\r\n templateUrl: './material-table-selected-rows.component.html',\r\n styleUrls: ['./material-table-selected-rows.component.scss'],\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n})\r\nexport class MaterialTableSelectedRowsComponent {\r\n allowSelectRow = input.required<boolean>();\r\n selectRowOnlyOne = input.required<boolean>();\r\n selectedRows = input.required<any[]>();\r\n selectionFieldLabel = input.required<string>();\r\n selectRowValueDisplay = input<(row: any) => string>();\r\n\r\n removeSelectedRow = output<any>();\r\n\r\n constructor(public stTableTranslations: StTablesTranslationsService) {}\r\n\r\n onRemoveSelectedRow(event: any, row: any): void {\r\n if (!this.selectRowOnlyOne() && this.selectedRows().length > 1) {\r\n event.stopPropagation();\r\n }\r\n\r\n this.removeSelectedRow.emit(row);\r\n }\r\n}\r\n","@if (allowSelectRow()) {\r\n <div class=\"st-material-table-selected-rows\">\r\n @if (!selectRowOnlyOne()) {\r\n <button type=\"button\" mat-stroked-button [matMenuTriggerFor]=\"menu\">\r\n {{ selectedRows().length }}\r\n {{ stTableTranslations.getTranslations()().rowSelected }}\r\n </button>\r\n <mat-menu #menu=\"matMenu\">\r\n @for (row of selectedRows(); track row.id) {\r\n <button\r\n type=\"button\"\r\n mat-menu-item\r\n [disabled]=\"selectedRows().length <= 0\"\r\n (click)=\"onRemoveSelectedRow($event, row)\"\r\n >\r\n <ng-container\r\n [ngTemplateOutlet]=\"selectedFieldLabel\"\r\n [ngTemplateOutletContext]=\"{ $implicit: row }\"\r\n />\r\n <mat-icon class=\"delete-icon\">delete</mat-icon>\r\n </button>\r\n }\r\n </mat-menu>\r\n } @else {\r\n @if (selectedRows().length > 0) {\r\n <mat-chip>\r\n <ng-container\r\n [ngTemplateOutlet]=\"selectedFieldLabel\"\r\n [ngTemplateOutletContext]=\"{ $implicit: selectedRows()[0] }\"\r\n />\r\n <button\r\n matChipRemove\r\n type=\"button\"\r\n aria-label=\"Remove selected item\"\r\n (click)=\"onRemoveSelectedRow($event, selectedRows()[0])\"\r\n >\r\n <mat-icon>cancel</mat-icon>\r\n </button>\r\n </mat-chip>\r\n }\r\n }\r\n </div>\r\n}\r\n\r\n<ng-template #selectedFieldLabel let-row>\r\n @if (selectRowValueDisplay()) {\r\n {{ selectRowValueDisplay()!(row) }}\r\n } @else {\r\n {{ row[selectionFieldLabel()] }}\r\n }\r\n</ng-template>\r\n","import { Pipe, PipeTransform } from '@angular/core';\r\n\r\n@Pipe({\r\n name: 'stDateWithoutTimezoneFormatPipe',\r\n})\r\nexport class DateWithoutTimezoneFormatPipe implements PipeTransform {\r\n constructor() {}\r\n\r\n transform(value: string | Date | undefined | null): string {\r\n if (value) {\r\n let day: number, month: number, year: number;\r\n\r\n if (value instanceof Date) {\r\n day = value.getDate();\r\n month = value.getMonth() + 1;\r\n year = value.getFullYear();\r\n } else {\r\n // Parse date string to extract date components (ignore timezone)\r\n const dateMatch = value.match(/^(\\d{4})-(\\d{2})-(\\d{2})/);\r\n if (dateMatch) {\r\n year = parseInt(dateMatch[1], 10);\r\n month = parseInt(dateMatch[2], 10);\r\n day = parseInt(dateMatch[3], 10);\r\n } else {\r\n // Fallback for other formats\r\n const date = new Date(value);\r\n day = date.getDate();\r\n month = date.getMonth() + 1;\r\n year = date.getFullYear();\r\n }\r\n }\r\n\r\n // Create local date with extracted components (no timezone conversion)\r\n const localDate = new Date(year, month - 1, day);\r\n return localDate.toLocaleDateString();\r\n } else {\r\n return '';\r\n }\r\n }\r\n}\r\n","import {\r\n ChangeDetectionStrategy,\r\n ChangeDetectorRef,\r\n Component,\r\n OnDestroy,\r\n input,\r\n output,\r\n signal,\r\n ViewChild,\r\n AfterViewInit,\r\n computed,\r\n effect,\r\n} from '@angular/core';\r\nimport { StMaterialTableColumnModel } from '../../../models/st-material-table-column.model';\r\nimport { MatInput } from '@angular/material/input';\r\nimport { MatSelect } from '@angular/material/select';\r\n\r\n@Component({\r\n selector: 'st-material-table-row-cell',\r\n templateUrl: './material-table-row-cell.component.html',\r\n styleUrls: ['./material-table-row-cell.component.scss'],\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n})\r\nexport class MaterialTableRowCellComponent implements AfterViewInit {\r\n @ViewChild(MatInput) matInput?: MatInput;\r\n @ViewChild(MatSelect) matSelect?: MatSelect;\r\n\r\n column = input.required<StMaterialTableColumnModel>();\r\n rowData = input.required<{ [prop: string]: any }>();\r\n rowIndex = input.required<number>();\r\n rowDataCopy = input<{ [prop: string]: any }>();\r\n canEditRowValidator = input<(row: any) => boolean>(() => true);\r\n canDeleteRowValidator = input<(row: any) => boolean>(() => true);\r\n selectRowOnlyOne = input<boolean>(false);\r\n isFirstEditableColumn = input<boolean>(false);\r\n autoSaveOnChange = input<boolean>(false);\r\n rowIsSelected = input<boolean>(false);\r\n rowIsExpanded = input<boolean>(false);\r\n rowEditing = input<boolean>(false);\r\n allowEditRow = input<boolean>(false);\r\n allowDeleteInEditRow = input<boolean>(true);\r\n allowEditInEditRow = input<boolean>(true);\r\n fieldError = input<string | undefined>(undefined);\r\n mobileView = input(false);\r\n\r\n saveEditRowEmitter = output<void>();\r\n cancelEditRowEmitter = output<void>();\r\n editRowEmitter = output<void>();\r\n deleteRowEmitter = output<void>();\r\n selectRowChange = output<boolean>();\r\n fieldValueChanged = output<{ field: string; value: any }>();\r\n\r\n // Computed for action icon colors\r\n actionIconColorDef: { [key: string]: 'primary' | 'warn' } = {\r\n edit: 'primary',\r\n delete: 'warn',\r\n };\r\n\r\n dynamicSelectOptions = signal<{ value: any; label: string }[]>([]);\r\n\r\n // Use computed to determine if dynamic select data needs to be loaded\r\n private needsDynamicSelect = computed(() => {\r\n const col = this.column();\r\n return (\r\n col?.allowEditColumn &&\r\n col?.rowEditType === 'custom-dynamic-select' &&\r\n !!col?.dynamicRowEditOptions\r\n );\r\n });\r\n\r\n private previousRowEditing = false;\r\n\r\n constructor(private changeDetectorRef: ChangeDetectorRef) {\r\n // Effect to handle rowEditing changes\r\n effect(() => {\r\n const isEditing = this.rowEditing();\r\n const wasNotEditing = !this.previousRowEditing;\r\n this.previousRowEditing = isEditing;\r\n\r\n if (isEditing) {\r\n this.getDynamicSelectData();\r\n\r\n // Focus first editable field when entering edit mode\r\n if (wasNotEditing && this.isFirstEditableColumn()) {\r\n this.focusFirstEditableField();\r\n }\r\n }\r\n }, {allowSignalWrites: true});\r\n }\r\n\r\n ngAfterViewInit() {\r\n // If row is already in edit mode on init (e.g., newly added row), focus the field\r\n if (this.rowEditing() && this.isFirstEditableColumn()) {\r\n this.focusFirstEditableField();\r\n }\r\n }\r\n\r\n private focusFirstEditableField() {\r\n // Use setTimeout to ensure the view is fully rendered\r\n setTimeout(() => {\r\n if (this.matInput) {\r\n // Focus MatInput\r\n this.matInput.focus();\r\n } else if (this.matSelect) {\r\n // Open MatSelect dropdown\r\n this.matSelect.focus();\r\n this.matSelect.open();\r\n }\r\n }, 150);\r\n }\r\n\r\n saveRow() {\r\n this.saveEditRowEmitter.emit();\r\n }\r\n\r\n cancelRow() {\r\n this.cancelEditRowEmitter.emit();\r\n }\r\n\r\n editRow() {\r\n this.editRowEmitter.emit();\r\n }\r\n\r\n deleteRow() {\r\n this.deleteRowEmitter.emit();\r\n }\r\n\r\n selectRow(event: { checked: boolean }) {\r\n if (event) {\r\n this.selectRowChange.emit(event.checked);\r\n }\r\n }\r\n\r\n onFieldChange(field: string, value: any) {\r\n if (this.autoSaveOnChange()) {\r\n this.fieldValueChanged.emit({ field, value });\r\n }\r\n }\r\n\r\n onNumberFieldChange(field: string, value: string) {\r\n const numValue = value === '' || value === null ? null : Number(value);\r\n const targetData = this.autoSaveOnChange()\r\n ? this.rowData()\r\n : this.rowDataCopy();\r\n\r\n if (targetData) {\r\n targetData[field] = numValue;\r\n }\r\n\r\n if (this.autoSaveOnChange()) {\r\n this.fieldValueChanged.emit({ field, value: numValue });\r\n }\r\n }\r\n\r\n // Getter method for ngModel binding - Angular 18 doesn't support ternary in two-way binding\r\n getFieldValue(field: string): any {\r\n return this.autoSaveOnChange()\r\n ? this.rowData()[field]\r\n : this.rowDataCopy()![field];\r\n }\r\n\r\n // Setter method for ngModel binding\r\n setFieldValue(field: string, value: any): void {\r\n const targetData = this.autoSaveOnChange()\r\n ? this.rowData()\r\n : this.rowDataCopy();\r\n\r\n if (targetData) {\r\n targetData[field] = value;\r\n }\r\n }\r\n\r\n private getDynamicSelectData() {\r\n if (this.needsDynamicSelect()) {\r\n this.dynamicSelectOptions.set(\r\n this.column().dynamicRowEditOptions!(this.rowData())\r\n );\r\n }\r\n }\r\n\r\n // Public method to manually trigger change detection\r\n public triggerChangeDetection(): void {\r\n this.changeDetectorRef.detectChanges();\r\n }\r\n}\r\n","@switch (column().type || 'string') {\r\n @case ('custom-template') {\r\n @if (rowEditing() && column().allowEditColumn) {\r\n <ng-container\r\n *ngTemplateOutlet=\"baseFieldCell; context: { $implicit: column() }\"\r\n ></ng-container>\r\n } @else {\r\n <ng-container\r\n [ngTemplateOutlet]=\"column().customTemplate!\"\r\n [ngTemplateOutletContext]=\"{ data: rowData(), rowIndex: rowIndex() }\"\r\n ></ng-container>\r\n }\r\n }\r\n\r\n @case ('actions') {\r\n @if (column().actions) {\r\n @if (\r\n (!column().actionsInMenu && !mobileView()) ||\r\n (mobileView() && column().actions!.length <= 1)\r\n ) {\r\n <div [ngStyle]=\"{ float: column().flexRight ? 'right' : 'none' }\">\r\n @for (action of column().actions; track action.iconName) {\r\n @if ((action.show && action.show(rowData())) || !action.show) {\r\n @if (!action.url && action.action) {\r\n <button\r\n class=\"action-icon-button\"\r\n type=\"button\"\r\n mat-icon-button\r\n [color]=\"\r\n actionIconColorDef[action.iconName]\r\n ? actionIconColorDef[action.iconName]\r\n : action.iconColor\r\n \"\r\n [matTooltip]=\"action.tooltipName || ''\"\r\n [matTooltipDisabled]=\"!action.tooltipName\"\r\n [disabled]=\"action.disabled ? action.disabled(rowData()) : false\"\r\n (click)=\"\r\n $event.stopPropagation();\r\n action.action!(rowData(), rowIndex())\r\n \"\r\n >\r\n <mat-icon>{{ action.iconName }}</mat-icon>\r\n </button>\r\n }\r\n @if (action.url) {\r\n <a [routerLink]=\"(action.disabled && action.disabled(rowData())) ? null : action.url\"\r\n [class.disabled-link]=\"action.disabled && action.disabled(rowData())\">\r\n <button\r\n class=\"action-icon-button\"\r\n type=\"button\"\r\n mat-icon-button\r\n [color]=\"\r\n actionIconColorDef[action.iconName]\r\n ? actionIconColorDef[action.iconName]\r\n : action.iconColor\r\n \"\r\n [matTooltip]=\"action.tooltipName || ''\"\r\n [matTooltipDisabled]=\"!action.tooltipName\"\r\n [disabled]=\"action.disabled ? action.disabled(rowData()) : false\"\r\n >\r\n <mat-icon>{{ action.iconName }}</mat-icon>\r\n </button>\r\n </a>\r\n }\r\n }\r\n }\r\n </div>\r\n }\r\n @if (\r\n column().actionsInMenu || (mobileView() && column().actions!.length > 1)\r\n ) {\r\n <button\r\n type=\"button\"\r\n mat-icon-button\r\n [matMenuTriggerFor]=\"menu\"\r\n (click)=\"$event.stopPropagation()\"\r\n >\r\n <mat-icon>more_vert</mat-icon>\r\n </button>\r\n <mat-menu #menu=\"matMenu\">\r\n @for (action of column().actions; track action.iconName) {\r\n @if ((action.show && action.show(rowData())) || !action.show) {\r\n @if (!action.url && action.action) {\r\n <button\r\n type=\"button\"\r\n mat-menu-item\r\n (click)=\"$event.stopPropagation(); action.action!(rowData())\"\r\n >\r\n {{ action.tooltipName }}\r\n </button>\r\n }\r\n @if (action.url) {\r\n <a [routerLink]=\"action.url\">\r\n <button type=\"button\" mat-menu-item>\r\n {{ action.tooltipName }}\r\n </button>\r\n </a>\r\n }\r\n }\r\n }\r\n </mat-menu>\r\n }\r\n }\r\n }\r\n\r\n @case ('string') {\r\n <ng-container\r\n *ngTemplateOutlet=\"baseFieldCell; context: { $implicit: column() }\"\r\n ></ng-container>\r\n }\r\n\r\n @case ('number') {\r\n <ng-container\r\n *ngTemplateOutlet=\"baseFieldCell; context: { $implicit: column() }\"\r\n ></ng-container>\r\n }\r\n\r\n @case ('boolean') {\r\n <ng-container\r\n *ngTemplateOutlet=\"baseFieldCell; context: { $implicit: column() }\"\r\n ></ng-container>\r\n }\r\n\r\n @case ('date') {\r\n @if (rowEditing() && column().allowEditColumn) {\r\n <ng-container\r\n *ngTemplateOutlet=\"baseFieldCell; context: { $implicit: column() }\"\r\n ></ng-container>\r\n } @else {\r\n {{ rowData()[column().field] | stDateFormatPipe }}\r\n }\r\n }\r\n\r\n @case ('date-without-timezone') {\r\n @if (rowEditing() && column().allowEditColumn) {\r\n <ng-container\r\n *ngTemplateOutlet=\"baseFieldCell; context: { $implicit: column() }\"\r\n ></ng-container>\r\n } @else {\r\n {{ rowData()[column().field] | stDateWithoutTimezoneFormatPipe }}\r\n }\r\n }\r\n\r\n @case ('actions-row-editing') {\r\n <div class=\"row justify-content-end\">\r\n @if (rowEditing()) {\r\n <button\r\n type=\"button\"\r\n mat-icon-button\r\n color=\"accent\"\r\n (click)=\"$event.stopPropagation(); saveRow()\"\r\n [matTooltip]=\"'Save row'\"\r\n >\r\n <mat-icon>done</mat-icon>\r\n </button>\r\n <button\r\n type=\"button\"\r\n mat-icon-button\r\n color=\"warn\"\r\n (click)=\"$event.stopPropagation(); cancelRow()\"\r\n [matTooltip]=\"'Cancel row'\"\r\n >\r\n <mat-icon>close</mat-icon>\r\n </button>\r\n } @else {\r\n\r\n @if (allowEditInEditRow()) {\r\n <button\r\n type=\"button\"\r\n mat-icon-button\r\n color=\"primary\"\r\n (click)=\"$event.stopPropagation(); editRow()\"\r\n [matTooltip]=\"'Edit row'\"\r\n [disabled]=\"\r\n canEditRowValidator() ? !canEditRowValidator()(rowData()) : false\r\n \"\r\n >\r\n <mat-icon>edit</mat-icon>\r\n </button>\r\n }\r\n\r\n @if (allowDeleteInEditRow()) {\r\n <button\r\n type=\"button\"\r\n mat-icon-button\r\n color=\"warn\"\r\n (click)=\"$event.stopPropagation(); deleteRow()\"\r\n [matTooltip]=\"'Delete row'\"\r\n [disabled]=\"\r\n canDeleteRowValidator()\r\n ? !canDeleteRowValidator()(rowData())\r\n : false\r\n \"\r\n >\r\n <mat-icon>delete</mat-icon>\r\n </button>\r\n }\r\n }\r\n </div>\r\n }\r\n\r\n @case ('actions-row-selecting') {\r\n <!-- @if (selectRowOnlyOne()) {-->\r\n <!-- <mat-radio-button-->\r\n <!-- color=\"primary\"-->\r\n <!-- (click)=\"$event.stopPropagation()\"-->\r\n <!-- (change)=\"selectRow({ checked: true })\"-->\r\n <!-- [checked]=\"rowIsSelected()\"-->\r\n <!-- ></mat-radio-button>-->\r\n <!-- } @else {-->\r\n <mat-checkbox\r\n color=\"primary\"\r\n (click)=\"$event.stopPropagation()\"\r\n (change)=\"selectRow($event)\"\r\n [checked]=\"rowIsSelected()\"\r\n ></mat-checkbox>\r\n <!-- }-->\r\n }\r\n\r\n @case ('actions-row-extending') {\r\n @if (rowIsExpanded()) {\r\n <mat-icon>keyboard_arrow_up</mat-icon>\r\n } @else {\r\n <mat-icon>keyboard_arrow_down</mat-icon>\r\n }\r\n }\r\n}\r\n\r\n<ng-template #baseFieldCell let-column>\r\n @if (allowEditRow() && (rowEditing() || autoSaveOnChange()) && column.allowEditColumn) {\r\n @if (column.rowEditType === 'string') {\r\n <mat-form-field\r\n appearance=\"outline\"\r\n [ngStyle]=\"{ width: column.width || 'auto' }\"\r\n [class.field-error]=\"fieldError()\"\r\n >\r\n <input\r\n matInput\r\n type=\"text\"\r\n [ngModel]=\"getFieldValue(column.field)\"\r\n (ngModelChange)=\"\r\n setFieldValue(column.field, $event);\r\n autoSaveOnChange() && onFieldChange(column.field, $event)\r\n \"\r\n (keydown.enter)=\"!autoSaveOnChange() && saveRow()\"\r\n [required]=\"column.editColumnRequired\"\r\n [disabled]=\"\r\n column.disableEdit ? column.disableEdit(rowData()) : false\r\n \"\r\n (click)=\"$event.stopPropagation()\"\r\n />\r\n </mat-form-field>\r\n }\r\n @if (column.rowEditType === 'number') {\r\n <mat-form-field\r\n appearance=\"outline\"\r\n [ngStyle]=\"{ width: column.width || 'auto' }\"\r\n [class.field-error]=\"fieldError()\"\r\n >\r\n <input\r\n matInput\r\n type=\"number\"\r\n [ngModel]=\"getFieldValue(column.field)\"\r\n (ngModelChange)=\"onNumberFieldChange(column.field, $event)\"\r\n (keydown.enter)=\"!autoSaveOnChange() && saveRow()\"\r\n [required]=\"column.editColumnRequired\"\r\n (click)=\"$event.stopPropagation()\"\r\n [disabled]=\"\r\n column.disableEdit ? column.disableEdit(rowData()) : false\r\n \"\r\n />\r\n </mat-form-field>\r\n }\r\n @if (column.rowEditType === 'date') {\r\n <mat-form-field\r\n appearance=\"outline\"\r\n [ngStyle]=\"{ width: column.width || 'auto' }\"\r\n [class.field-error]=\"fieldError()\"\r\n >\r\n <input\r\n matInput\r\n [matDatepicker]=\"picker1\"\r\n [ngModel]=\"getFieldValue(column.field)\"\r\n (ngModelChange)=\"\r\n setFieldValue(column.field, $event);\r\n autoSaveOnChange() && onFieldChange(column.field, $event)\r\n \"\r\n (keydown.enter)=\"!autoSaveOnChange() && saveRow()\"\r\n [required]=\"column.editColumnRequired\"\r\n (click)=\"$event.stopPropagation()\"\r\n [disabled]=\"\r\n column.disableEdit ? column.disableEdit(rowData()) : false\r\n \"\r\n />\r\n <mat-datepicker-toggle\r\n matIconSuffix\r\n [for]=\"picker1\"\r\n ></mat-datepicker-toggle>\r\n <mat-datepicker #picker1></mat-datepicker>\r\n </mat-form-field>\r\n }\r\n @if (column.rowEditType === 'boolean') {\r\n <mat-checkbox\r\n [ngModel]=\"getFieldValue(column.field)\"\r\n (ngModelChange)=\"\r\n setFieldValue(column.field, $event);\r\n autoSaveOnChange() && onFieldChange(column.field, $event)\r\n \"\r\n (click)=\"$event.stopPropagation()\"\r\n [disabled]=\"column.disableEdit ? column.disableEdit(rowData()) : false\"\r\n ></mat-checkbox>\r\n }\r\n\r\n @if (column.rowEditType === 'custom') {\r\n <mat-form-field\r\n appearance=\"outline\"\r\n [ngStyle]=\"{ width: column.width || 'auto' }\"\r\n [class.field-error]=\"fieldError()\"\r\n >\r\n <mat-select\r\n [ngModel]=\"getFieldValue(column.field)\"\r\n (ngModelChange)=\"\r\n setFieldValue(column.field, $event);\r\n autoSaveOnChange() && onFieldChange(column.field, $event)\r\n \"\r\n [required]=\"column.editColumnRequired\"\r\n (click)=\"$event.stopPropagation()\"\r\n [disabled]=\"\r\n column.disableEdit ? column.disableEdit(rowData()) : false\r\n \"\r\n >\r\n<!-- <mat-option value=\"\"></mat-option>-->\r\n @for (option of column.customRowEditOptions; track option) {\r\n <mat-option [value]=\"option.value\">\r\n {{ option.label }}\r\n </mat-option>\r\n }\r\n </mat-select>\r\n </mat-form-field>\r\n }\r\n\r\n @if (column.rowEditType === 'number-qty-input') {\r\n <ngx-st-qty-input\r\n appearance=\"outline\"\r\n [qtyModel]=\"getFieldValue(column.field)\"\r\n [error]=\"!!fieldError()\"\r\n (newValueEmitter)=\"setFieldValue(column.field, $event);\r\n autoSaveOnChange() && onFieldChange(column.field, $event)\"\r\n ></ngx-st-qty-input>\r\n }\r\n\r\n @if (column.rowEditType === 'custom-dynamic-select') {\r\n <mat-form-field\r\n appearance=\"outline\"\r\n [ngStyle]=\"{ width: column.width || 'auto' }\"\r\n [class.field-error]=\"fieldError()\"\r\n >\r\n <mat-select\r\n [ngModel]=\"getFieldValue(column.field)\"\r\n (ngModelChange)=\"\r\n setFieldValue(column.field, $event);\r\n autoSaveOnChange() && onFieldChange(column.field, $event)\r\n \"\r\n [required]=\"column.editColumnRequired\"\r\n (click)=\"$event.stopPropagation()\"\r\n [disabled]=\"\r\n column.disableEdit ? column.disableEdit(rowData()) : false\r\n \"\r\n >\r\n @if (!column.editColumnRequired) {\r\n <mat-option value=\"\"></mat-option>\r\n }\r\n\r\n @for (option of dynamicSelectOptions(); track option) {\r\n <mat-option [value]=\"option.value\">\r\n {{ option.label }}\r\n </mat-option>\r\n }\r\n </mat-select>\r\n </mat-form-field>\r\n }\r\n } @else {\r\n <div>\r\n @if (column.translateValue) {\r\n {{ column.translateValue![rowData()[column.field]] || '' }}\r\n }\r\n @if (column.customValueDisplay) {\r\n {{ column.customValueDisplay(rowData()[column.field]) }}\r\n }\r\n @if (!column.translateValue && !column.customValueDisplay) {\r\n {{ rowData()[column.field] }}\r\n }\r\n </div>\r\n }\r\n</ng-template>\r\n","import {\r\n AfterViewInit,\r\n ChangeDetectionStrategy,\r\n ChangeDetectorRef,\r\n Component,\r\n OnInit,\r\n ViewChild,\r\n ViewChildren,\r\n QueryList,\r\n ViewEncapsulation,\r\n input,\r\n output,\r\n TemplateRef,\r\n signal,\r\n computed,\r\n effect,\r\n OnDestroy,\r\n} from '@angular/core';\r\nimport { MatPaginator } from '@angular/material/paginator';\r\nimport { MatSort, SortDirection } from '@angular/material/sort';\r\nimport { MatTableDataSource } from '@angular/material/table';\r\nimport { StMaterialTableColumnModel } from '../../models/st-material-table-column.model';\r\nimport { ViewStMaterialTableColumnModel } from '../../models/view/view-st-material-table-column.model';\r\nimport { distinctUntilChanged, filter, takeUntil } from 'rxjs/operators';\r\nimport {\r\n StBaseService,\r\n StSubscribeDestroyComponent,\r\n} from 'ngx-st-base-functions';\r\nimport { StSnackBarService } from 'ngx-st-snack-bar';\r\nimport { StTablesTranslationsService } from '../../services/st-tables-translations.service';\r\nimport { MaterialTableFilterDialogComponent } from './material-table-caption/material-table-filter-dialog/material-table-filter-dialog.component';\r\nimport {\r\n ICaptionDataChanged,\r\n StMaterialTableFilter,\r\n StMaterialTableFilterValueType,\r\n} from '../../models/models';\r\nimport {\r\n animate,\r\n state,\r\n style,\r\n transition,\r\n trigger,\r\n} from '@angular/animations';\r\nimport { StDialogService } from 'ngx-st-dialog';\r\nimport { MaterialTableRowCellComponent } from './material-table-row-cell/material-table-row-cell.component';\r\n\r\n@Component({\r\n selector: 'ngx-st-material-table',\r\n templateUrl: './material-table.component.html',\r\n styleUrls: [\r\n './material-table.component.scss',\r\n '../../../../assets/base-table.scss',\r\n ],\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n encapsulation: ViewEncapsulation.None,\r\n animations: [\r\n trigger('detailExpand', [\r\n state(\r\n 'collapsed,void',\r\n style({ height: '0px', minHeight: '0', border: 'none' })\r\n ),\r\n state('expanded', style({ height: '*' })),\r\n transition(\r\n 'expanded <=> collapsed',\r\n animate('225ms cubic-bezier(0.4, 0.0, 0.2, 1)')\r\n ),\r\n ]),\r\n ],\r\n})\r\nexport class MaterialTableComponent\r\n extends StSubscribeDestroyComponent\r\n implements OnInit, AfterViewInit, OnDestroy\r\n{\r\n @ViewChild(MatPaginator) paginator: MatPaginator;\r\n @ViewChild(MatSort) sort: MatSort;\r\n @ViewChildren(MaterialTableRowCellComponent)\r\n rowCells!: QueryList<MaterialTableRowCellComponent>;\r\n\r\n showGlobalSearch = input(false);\r\n\r\n tableTitle = input('');\r\n\r\n pageSize = input<number>(10);\r\n\r\n dataLength = input<number>(0);\r\n\r\n allowPickColumns = input<boolean>(false);\r\n\r\n allowReorderColumns = input<boolean>(false);\r\n\r\n localStorageName = input<string>('');\r\n\r\n lazyLoading = input<boolean>(false);\r\n\r\n isLoading = input<boolean>(false);\r\n\r\n initColumns = input<StMaterialTableColumnModel[]>([]);\r\n\r\n rowClickAction = input<(row: any) => void>();\r\n\r\n allowEditRow = input<boolean>(false);\r\n\r\n allowDeleteInEditRow = input<boolean>(true);\r\n\r\n allowEditInEditRow = input<boolean>(true);\r\n\r\n showEditAllRows = input<boolean>(false);\r\n\r\n /**\r\n * When true, field changes are saved immediately without requiring save/cancel buttons.\r\n * Perfect for quantity inputs, toggles, or selection tables where instant updates are needed.\r\n */\r\n autoSaveOnChange = input<boolean>(false);\r\n\r\n canEditRowValidator = input<(row: any) => boolean>(() => true);\r\n\r\n canDeleteRowValidator = input<(row: any) => boolean>(() => true);\r\n\r\n allowSelectRow = input(false);\r\n\r\n selectionFieldLabel = input('');\r\n\r\n selectRowOnlyOne = input<boolean>(false);\r\n\r\n /**\r\n * Optional formatter used to derive the display value for a selected row.\r\n *\r\n * Use this when the simple field name provided by {@link selectionFieldLabel}\r\n * is not sufficient (for example, when you need to concatenate multiple fields\r\n * or apply custom formatting to the displayed value).\r\n *\r\n * If both {@link selectionFieldLabel} and `selectRowValueDisplay` are set,\r\n * this function takes precedence and is used to compute the visible text\r\n * representing the selected row.\r\n */\r\n selectRowValueDisplay = input<(row: any) => string>();\r\n\r\n showCreateButton = input<boolean>(false);\r\n\r\n createButtonLabel = input('Create');\r\n\r\n createButtonAction = input<() => void>(() => {});\r\n\r\n disableCreateButton = input<boolean>(false);\r\n\r\n allowCreateRow = input<boolean>(false);\r\n\r\n allowExtendRow = input<boolean>(false);\r\n\r\n extendedRowTemplate = input<TemplateRef<{ data: any; rowIndex: number }>>();\r\n\r\n initSelectedRow = input<any>();\r\n\r\n extraCustomFilter = input<TemplateRef<any>>();\r\n\r\n /**\r\n * Custom filter method applied to all rows in the table.\r\n * This method is called for each row and should return true to include the row, false to exclude it.\r\n * Applied automatically whenever table data changes.\r\n *\r\n * @param row - The data row to evaluate\r\n * @returns true to include the row in the table, false to exclude it\r\n *\r\n * @example\r\n * // Only show active users\r\n * [initFilterMethod]=\"(row) => row.isActive === true\"\r\n *\r\n * @example\r\n * // Show users with quantity greater than 10\r\n * [initFilterMethod]=\"(row) => row.quantity > 10\"\r\n */\r\n initFilterMethod = input<(row: any) => boolean>();\r\n\r\n /**\r\n * Immutable Data Pattern - Optimized version with ID cleanup\r\n */\r\n data = input<any[]>([]);\r\n\r\n setNewDataWithoutRefresh = input<boolean>(false);\r\n\r\n compactView = input<boolean>(false);\r\n\r\n loadData = output<StMaterialTableLoadData>();\r\n\r\n saveEditedRow = output<{ row: any; index: number }>();\r\n\r\n saveCreatedRow = output<any>();\r\n\r\n rowDeleted = output<{ row: any; index: number }>();\r\n\r\n selectRowChange = output<any[]>();\r\n\r\n /**\r\n * Emitted when a field value changes and autoSaveOnChange is enabled.\r\n * Parent should update their data immediately.\r\n */\r\n fieldValueChanged = output<{\r\n row: any;\r\n field: string;\r\n value: any;\r\n index: number;\r\n }>();\r\n\r\n private _data: any[] = [];\r\n\r\n initLocalColumns = signal<StMaterialTableColumnModel[]>([]);\r\n expandedRowIndex = signal<number | null>(null);\r\n\r\n creatingRow = computed(() => Object.keys(this.activeRowsCreating).length > 0);\r\n\r\n columns: ViewStMaterialTableColumnModel[] = [];\r\n selectedColumns: ViewStMaterialTableColumnModel[] = [];\r\n selectedColumnsString: string[] = [];\r\n\r\n tableSource: MatTableDataSource<any>;\r\n\r\n initFilters: { [key: string]: StMaterialTableFilter } = {};\r\n initGlobalSearch: string = '';\r\n\r\n showTable = true;\r\n\r\n activeRowsEditing: { [rowId: string]: { [prop: string]: any } } = {};\r\n activeRowsCreating: { [rowId: string]: { [prop: string]: any } } = {};\r\n selectedRows = signal<any[]>([]);\r\n\r\n // Track validation errors: { rowId: { fieldName: errorMessage } }\r\n validationErrors: { [rowId: string]: { [field: string]: string } } = {};\r\n\r\n mobileView = signal(false);\r\n\r\n private resizeObserver?: ResizeObserver;\r\n private localStorageData: StMaterialTableLocalStorage;\r\n\r\n constructor(\r\n private changeDetectorRef: ChangeDetectorRef,\r\n private snackbar: StSnackBarService,\r\n public stTableTranslations: StTablesTranslationsService,\r\n private stDialogService: StDialogService\r\n ) {\r\n super();\r\n\r\n this.resizeObserver = new ResizeObserver(() => {\r\n const isMobile = document.body.clientWidth <= 1100;\r\n if (this.mobileView() !== isMobile) {\r\n this.mobileView.set(isMobile);\r\n }\r\n });\r\n this.resizeObserver.observe(document.body);\r\n\r\n // Initialize mobile view state\r\n this.mobileView.set(document.body.clientWidth <= 1100);\r\n\r\n // Effect to handle data changes\r\n effect(() => {\r\n const inputData = this.data();\r\n this.handleDataChange(inputData);\r\n }, {allowSignalWrites: true});\r\n\r\n // Effect to reapply filter when initFilterMethod changes\r\n effect(() => {\r\n // Track the filter method to trigger effect on change\r\n this.initFilterMethod();\r\n if (this.tableSource && !this.lazyLoading()) {\r\n // Update the filter predicate to use the new filter method\r\n this.tableSource.filterPredicate =\r\n this.createCustomFilterForLocalTable();\r\n // Trigger filter reapplication by setting filter string again\r\n if (this.tableSource.filter) {\r\n const currentFilter = this.tableSource.filter;\r\n this.tableSource.filter = '';\r\n this.tableSource.filter = currentFilter;\r\n }\r\n this.changeDetectorRef.markForCheck();\r\n }\r\n }, {allowSignalWrites: true});\r\n }\r\n\r\n ngOnInit(): void {\r\n this.initializeColumns();\r\n this.loadLocalStorageData();\r\n this.validateAndUpdateFilters();\r\n this.setDisplayedColumns();\r\n }\r\n\r\n ngAfterViewInit() {\r\n this.setInitTable();\r\n this.setSortPageSubscription();\r\n }\r\n\r\n override ngOnDestroy() {\r\n this.resizeObserver?.disconnect();\r\n\r\n this.ngDestroyed$.next(true);\r\n this.ngDestroyed$.complete();\r\n }\r\n\r\n turnOnAllEditRows() {\r\n this.tableSource.data.forEach(row => {\r\n this.activeRowsEditing[row.id] = { ...row };\r\n });\r\n this.changeDetectorRef.markForCheck();\r\n }\r\n\r\n captionDataChanged(event: ICaptionDataChanged) {\r\n const loadLazyData =\r\n event.globalSearch !== this.localStorageData.globalSearch ||\r\n JSON.stringify(event.filters) !==\r\n JSON.stringify(this.localStorageData.filters);\r\n\r\n this.localStorageData = {\r\n ...event,\r\n pageSize: this.paginator.pageSize,\r\n pageIndex: loadLazyData ? 0 : this.paginator.pageIndex,\r\n sortField: this.sort.active,\r\n sortOrder: this.sort.direction,\r\n };\r\n\r\n this.setColumnsOrder();\r\n this.setColumnsVisible();\r\n this.setSelectedColumns();\r\n this.updateDataToLocalStorage();\r\n\r\n if (loadLazyData) {\r\n this.emitLazyLoading();\r\n this.paginator.pageIndex = 0;\r\n //@ts-ignore\r\n this.paginator._emitPageEvent(0);\r\n }\r\n\r\n this.changeDetectorRef.markForCheck();\r\n }\r\n\r\n resetTableSettings() {\r\n this.showTable = false;\r\n this.changeDetectorRef.markForCheck();\r\n\r\n this.setNewEmptyLocalStorageData();\r\n this.updateDataToLocalStorage();\r\n this.emitLazyLoading();\r\n this.initFilters = {};\r\n this.initGlobalSearch = '';\r\n this.sort.sort({ id: '', start: 'asc', disableClear: false });\r\n\r\n setTimeout(() => {\r\n this.showTable = true;\r\n this.setDisplayedColumns();\r\n this.setInitTable();\r\n this.changeDetectorRef.markForCheck();\r\n }, 100);\r\n }\r\n\r\n /**\r\n * Adds a new row to the local table copy only.\r\n * The row is tracked in activeRowsCreating until saved.\r\n * When saved, the parent receives the event through saveNewCreatedRow output.\r\n * The parent decides whether to accept and add to their data array.\r\n */\r\n addNewRow() {\r\n this.expandedRowIndex.set(null);\r\n // Create new row with generated ID and default values for each column\r\n const newRow: any = {\r\n id: StBaseService.generateGUID(),\r\n };\r\n\r\n // Initialize fields with null/default values\r\n this.columns\r\n .filter(col => col.allowEditColumn)\r\n .forEach(col => {\r\n newRow[col.field] = null;\r\n });\r\n\r\n // Add to local table copy only\r\n this.tableSource.data = [...this.tableSource.data, newRow];\r\n this.activeRowsCreating[newRow.id] = { ...newRow };\r\n\r\n // Navigate to last page to show the new row\r\n setTimeout(() => {\r\n this.paginator.lastPage();\r\n }, 100);\r\n\r\n this.changeDetectorRef.markForCheck();\r\n }\r\n\r\n editRow(row: any, column: ViewStMaterialTableColumnModel) {\r\n this.activeRowsEditing[row.id] = { ...row };\r\n }\r\n\r\n deleteRow(row: any, column: ViewStMaterialTableColumnModel, index: number) {\r\n const absoluteIndex = this.getAbsoluteIndex(index);\r\n this.stDialogService\r\n .showConfirmation('Are you sure you want to delete this row?')\r\n .pipe(filter(StBaseService.notNull))\r\n .subscribe(res => {\r\n this.tableSource.data = this.tableSource.data.filter(\r\n data => data.id !== row.id\r\n );\r\n this.rowDeleted.emit({ row, index: absoluteIndex });\r\n this.changeDetectorRef.markForCheck();\r\n });\r\n }\r\n\r\n /**\r\n * Validates and saves a row (either new or edited).\r\n * Emits the validated row to the parent through either:\r\n * - saveNewCreatedRow: for newly created rows\r\n * - saveNewRow: for edited existing rows\r\n *\r\n * The parent is responsible for:\r\n * - Persisting the change (e.g., API call)\r\n * - Updating their data array\r\n * - Handling errors/rejections\r\n *\r\n * The library updates its local copy optimistically.\r\n */\r\n saveEditRow(row: any, column: ViewStMaterialTableColumnModel, index: number) {\r\n const absoluteIndex = this.getAbsoluteIndex(index);\r\n const isCreatingThisRow = !!this.activeRowsCreating[row.id];\r\n const rowData = isCreatingThisRow\r\n ? this.activeRowsCreating[row.id]\r\n : this.activeRowsEditing[row.id];\r\n\r\n // Validate row\r\n if (!this.validateRow(rowData, row)) {\r\n return;\r\n }\r\n\r\n // Emit to parent\r\n if (isCreatingThisRow) {\r\n this.saveCreatedRow.emit({ ...rowData });\r\n delete this.activeRowsCreating[row.id];\r\n } else {\r\n this.saveEditedRow.emit({ row: { ...rowData }, index: absoluteIndex });\r\n delete this.activeRowsEditing[row.id];\r\n }\r\n\r\n // Update local table copy\r\n this.updateRowInDataSource(absoluteIndex, row, rowData);\r\n this.changeDetectorRef.markForCheck();\r\n }\r\n\r\n cancelEditRow(row: any, column: ViewStMaterialTableColumnModel) {\r\n // Check if this specific row is being created\r\n const isCreatingThisRow = !!this.activeRowsCreating[row.id];\r\n\r\n if (isCreatingThisRow) {\r\n // Remove from local table copy\r\n this.tableSource.data = this.tableSource.data.filter(\r\n data => data.id !== row.id\r\n );\r\n delete this.activeRowsCreating[row.id];\r\n } else {\r\n delete this.activeRowsEditing[row.id];\r\n }\r\n\r\n // Clear validation errors for this row\r\n if (this.validationErrors[row.id]) {\r\n delete this.validationErrors[row.id];\r\n }\r\n\r\n this.changeDetectorRef.markForCheck();\r\n }\r\n\r\n /**\r\n * Handles immediate field value changes for auto-save mode.\r\n * In auto-save mode, ngModel is bound directly to rowData, so we don't need to update it.\r\n * We only emit to parent so they can update their data copy.\r\n */\r\n onFieldValueChanged(\r\n row: any,\r\n column: ViewStMaterialTableColumnModel,\r\n value: any,\r\n index: number\r\n ) {\r\n const absoluteIndex = this.getAbsoluteIndex(index);\r\n this.tableSource.data[absoluteIndex][column.field] = value;\r\n\r\n // Validate the field if autoSaveOnChange is enabled\r\n if (this.autoSaveOnChange()) {\r\n // Use validateRow with single column to validate just this field\r\n this.validateRow(row, row, column);\r\n }\r\n\r\n // Emit to parent immediately\r\n // The row object is already updated by ngModel binding\r\n this.fieldValueChanged.emit({\r\n row: { ...row },\r\n field: column.field,\r\n value: value,\r\n index: absoluteIndex,\r\n });\r\n }\r\n\r\n private compareRows(a: any, b: any): number {\r\n const aId = a?.id ?? a;\r\n const bId = b?.id ?? b;\r\n return aId === bId ? 0 : 1;\r\n }\r\n\r\n isRowSelected(row: any): boolean {\r\n return this.selectedRows().some(r => this.compareRows(r, row) === 0);\r\n }\r\n\r\n isAllSelected() {\r\n const numSelected = this.selectedRows().length;\r\n if (this.tableSource) {\r\n const numRows = this.tableSource.data.length;\r\n return numSelected === numRows;\r\n } else {\r\n return false;\r\n }\r\n }\r\n\r\n toggleAllRows(event: boolean) {\r\n if (event) {\r\n this.selectedRows.set([...this.tableSource.data]);\r\n } else {\r\n this.selectedRows.set([]);\r\n }\r\n\r\n this.selectRowChange.emit(this.selectedRows());\r\n }\r\n\r\n removeSelectedRow(row: any) {\r\n this.selectedRows.update(selected =>\r\n selected.filter(r => this.compareRows(r, row) !== 0)\r\n );\r\n this.selectRowChange.emit(this.selectedRows());\r\n }\r\n\r\n onRemoveSelectedRow(row: any) {\r\n this.removeSelectedRow(row);\r\n }\r\n\r\n selectRowChanged(value: boolean, row: any) {\r\n if (value) {\r\n if (this.selectRowOnlyOne()) {\r\n this.selectedRows.set([row]);\r\n } else {\r\n this.selectedRows.update(selected => [...selected, row]);\r\n }\r\n } else {\r\n this.selectedRows.update(selected =>\r\n selected.filter(r => this.compareRows(r, row) !== 0)\r\n );\r\n }\r\n\r\n this.changeDetectorRef.markForCheck();\r\n this.selectRowChange.emit(this.selectedRows());\r\n }\r\n\r\n clickRowAction(row: any, index: number) {\r\n if (this.allowExtendRow()) {\r\n if (this.expandedRowIndex() === index) {\r\n this.expandedRowIndex.set(null);\r\n } else {\r\n this.expandedRowIndex.set(index);\r\n }\r\n } else if (this.allowSelectRow()) {\r\n const isSelected = this.isRowSelected(row);\r\n this.selectRowChanged(!isSelected, row);\r\n } else {\r\n if (this.rowClickAction()) {\r\n this.rowClickAction()!(row);\r\n }\r\n }\r\n }\r\n\r\n getAbsoluteIndex(index: number): number {\r\n if (this.lazyLoading()) {\r\n return index;\r\n } else {\r\n return this.paginator\r\n ? this.paginator.pageIndex * this.paginator.pageSize + index\r\n : index;\r\n }\r\n }\r\n\r\n private setColumnsFilterRowEditTypes() {\r\n this.initLocalColumns().forEach(column => {\r\n if (column.field === 'actions' && !column.type) {\r\n column.type = 'actions';\r\n }\r\n\r\n if (!column.filterType && column.filter) {\r\n if (column.type === 'string') {\r\n column.filterType = 'string';\r\n } else if (column.type === 'number') {\r\n column.filterType = 'number';\r\n } else if (column.type === 'date') {\r\n column.filterType = 'date';\r\n } else if (column.type === 'custom-template') {\r\n column.filterType = 'custom';\r\n } else if (column.type === 'boolean') {\r\n column.filterType = 'boolean';\r\n } else {\r\n column.filterType = 'string';\r\n }\r\n }\r\n\r\n if ((this.allowEditRow() || this.autoSaveOnChange()) && !column.rowEditType) {\r\n if (column.type === 'string') {\r\n column.rowEditType = 'string';\r\n } else if (column.type === 'number') {\r\n column.rowEditType = 'number';\r\n } else if (column.type === 'date') {\r\n column.rowEditType = 'date';\r\n } else if (column.type === 'custom-template') {\r\n column.rowEditType = 'custom';\r\n } else if (column.type === 'boolean') {\r\n column.rowEditType = 'boolean';\r\n } else {\r\n column.rowEditType = 'string';\r\n }\r\n }\r\n });\r\n }\r\n\r\n private createCustomFilterForLocalTable() {\r\n let filterFunction = (data: any, filter: string): boolean => {\r\n const searchTerms: {\r\n [column: string]: StMaterialTableFilter;\r\n // @ts-ignore\r\n stGlobalSearch: string;\r\n } = JSON.parse(filter);\r\n const searchTermsKeys = Object.keys(searchTerms);\r\n let searchOk = true;\r\n let searchOkGlobal = true;\r\n\r\n searchTermsKeys.forEach((key: string) => {\r\n if (\r\n key !== 'stGlobalSearch' &&\r\n this.selectedColumnsString.includes(key) &&\r\n searchTerms[key].value !== null &&\r\n searchTerms[key].value !== undefined\r\n ) {\r\n if (Array.isArray(searchTerms[key].value)) {\r\n const dateFrom: string | null = (\r\n searchTerms[key].value as [string | null, string | null]\r\n )[0];\r\n const dateTo: string | null = (\r\n searchTerms[key].value as [string | null, string | null]\r\n )[1];\r\n\r\n if (dateFrom || dateTo) {\r\n const tmpColumn = this.columns.find(col => col.field === key);\r\n\r\n if (tmpColumn && tmpColumn.type === 'date') {\r\n const dateFromValue = dateFrom ? new Date(dateFrom) : null;\r\n const dateToValue = dateTo\r\n ? new Date(\r\n new Date(dateTo).setDate(new Date(dateTo).getDate() + 1)\r\n )\r\n : null;\r\n const tableData = new Date(data[key]);\r\n\r\n if (dateFromValue && dateToValue) {\r\n searchOk =\r\n searchOk &&\r\n tableData >= dateFromValue &&\r\n tableData <= dateToValue;\r\n } else if (dateFromValue) {\r\n searchOk = searchOk && tableData >= dateFromValue;\r\n } else if (dateToValue) {\r\n searchOk = searchOk && tableData <= dateToValue;\r\n }\r\n }\r\n }\r\n } else {\r\n if (\r\n data[key] !== undefined &&\r\n data[key] !== null &&\r\n searchTerms[key].value !== undefined &&\r\n searchTerms[key].value !== null\r\n ) {\r\n searchOk =\r\n searchOk &&\r\n (searchTerms[key].matchMode === 'equal'\r\n ? data[key] === searchTerms[key].value\r\n : data[key]\r\n .toString()\r\n .toLowerCase()\r\n .indexOf(\r\n searchTerms[key].value!.toString().toLowerCase()\r\n ) !== -1);\r\n }\r\n }\r\n }\r\n });\r\n if (searchTerms.stGlobalSearch) {\r\n searchOkGlobal = false;\r\n this.selectedColumnsString.forEach(col => {\r\n if (data[col]) {\r\n searchOkGlobal =\r\n searchOkGlobal ||\r\n data[col]\r\n .toString()\r\n .toLowerCase()\r\n .indexOf(\r\n searchTerms.stGlobalSearch.toString().toLowerCase()\r\n ) !== -1;\r\n }\r\n });\r\n }\r\n\r\n // Apply custom filter method if provided\r\n let customFilterOk = true;\r\n if (this.initFilterMethod()) {\r\n customFilterOk = this.initFilterMethod()!(data);\r\n }\r\n\r\n return searchOk && searchOkGlobal && customFilterOk;\r\n };\r\n return filterFunction;\r\n }\r\n\r\n private emitLazyLoading() {\r\n if (this.lazyLoading()) {\r\n const loadDataRequest: StMaterialTableLoadData = {\r\n first: this.paginator.pageIndex * this.paginator.pageSize,\r\n rows: this.paginator.pageSize,\r\n globalFilterColumns: this.selectedColumnsString,\r\n globalFilter: this.localStorageData.globalSearch,\r\n sortField: this.localStorageData.sortField,\r\n sortOrder: this.localStorageData.sortOrder,\r\n filters: this.localStorageData.filters,\r\n };\r\n\r\n this.loadData.emit(loadDataRequest);\r\n } else {\r\n this.tableSource.filter = JSON.stringify({\r\n ...this.localStorageData.filters,\r\n stGlobalSearch: this.localStorageData.globalSearch,\r\n });\r\n }\r\n }\r\n\r\n private updateDataToLocalStorage() {\r\n if (this.localStorageName()) {\r\n localStorage.setItem(\r\n this.localStorageName()!,\r\n JSON.stringify(this.localStorageData)\r\n );\r\n }\r\n }\r\n\r\n private setInitTable() {\r\n this.tableSource = new MatTableDataSource(this._data);\r\n\r\n this.paginator.pageSize = this.localStorageData.pageSize;\r\n this.paginator.pageIndex = this.localStorageData.pageIndex;\r\n\r\n if (this.localStorageData.sortField && this.localStorageData.sortOrder) {\r\n const disableClear = false;\r\n this.sort.sort({ id: '', start: 'asc', disableClear });\r\n this.sort.sort({\r\n id: this.localStorageData.sortField,\r\n start: this.localStorageData.sortOrder,\r\n disableClear,\r\n });\r\n }\r\n\r\n if (!this.lazyLoading()!) {\r\n this.tableSource.paginator = this.paginator;\r\n this.tableSource.sort = this.sort;\r\n this.tableSource.filterPredicate = this.createCustomFilterForLocalTable();\r\n }\r\n\r\n this.emitLazyLoading();\r\n }\r\n\r\n private setSortPageSubscription() {\r\n this.sort.sortChange\r\n .pipe(\r\n takeUntil(this.ngDestroyed$),\r\n distinctUntilChanged(\r\n (prev, curr) => JSON.stringify(prev) === JSON.stringify(curr)\r\n )\r\n )\r\n .subscribe(res => {\r\n this.localStorageData = {\r\n ...this.localStorageData,\r\n sortField: res.active,\r\n sortOrder: res.direction,\r\n };\r\n this.updateDataToLocalStorage();\r\n this.emitLazyLoading();\r\n });\r\n\r\n this.paginator.page\r\n .pipe(\r\n takeUntil(this.ngDestroyed$),\r\n distinctUntilChanged(\r\n (prev, curr) => JSON.stringify(prev) === JSON.stringify(curr)\r\n )\r\n )\r\n .subscribe(res => {\r\n this.localStorageData = {\r\n ...this.localStorageData,\r\n pageIndex: this.paginator.pageIndex,\r\n pageSize: this.paginator.pageSize,\r\n };\r\n\r\n this.updateDataToLocalStorage();\r\n this.emitLazyLoading();\r\n });\r\n }\r\n\r\n private setDisplayedColumns() {\r\n this.columns = this.initLocalColumns().map(col => {\r\n return {\r\n ...col,\r\n type: col.type ? col.type : 'string',\r\n visible: true,\r\n expanded: true,\r\n isEditing: false,\r\n };\r\n });\r\n\r\n this.setColumnsOrder();\r\n this.setColumnsVisible();\r\n this.setSelectedColumns();\r\n this.changeDetectorRef.markForCheck();\r\n }\r\n\r\n private setColumnsOrder() {\r\n if (this.localStorageData?.columnsOrder) {\r\n this.columns = [\r\n ...this.localStorageData.columnsOrder\r\n .filter(column => this.columns.find(col => col.field === column))\r\n .map(column => this.columns.find(col => col.field === column)!),\r\n ...this.columns.filter(\r\n column => !this.localStorageData.columnsOrder.includes(column.field)\r\n ),\r\n ];\r\n }\r\n }\r\n\r\n private setColumnsVisible() {\r\n if (this.localStorageData?.selectedColumns) {\r\n this.columns = this.columns.map(col => {\r\n return {\r\n ...col,\r\n visible:\r\n this.localStorageData.selectedColumns.includes(col.field) ||\r\n !this.localStorageData.columnsOrder.includes(col.field),\r\n };\r\n });\r\n }\r\n }\r\n\r\n private setSelectedColumns() {\r\n this.selectedColumns = this.columns.filter(col => {\r\n return col.visible;\r\n });\r\n this.selectedColumnsString = this.selectedColumns.map(col => col.field);\r\n this.changeDetectorRef.markForCheck();\r\n }\r\n\r\n private loadLocalStorageData() {\r\n if (this.localStorageName()) {\r\n const localStorageData = localStorage.getItem(this.localStorageName()!);\r\n\r\n if (localStorageData) {\r\n this.localStorageData = JSON.parse(localStorageData);\r\n // const filters = this.validOldFiltersToNewFormat(\r\n // this.localStorageData.filters\r\n // );\r\n // this.localStorageData.filters = filters;\r\n this.initFilters = this.localStorageData.filters;\r\n\r\n this.initGlobalSearch = this.localStorageData.globalSearch;\r\n } else {\r\n this.setNewEmptyLocalStorageData();\r\n }\r\n } else {\r\n this.setNewEmptyLocalStorageData();\r\n }\r\n }\r\n\r\n private validOldFiltersToNewFormat(oldFilters: {\r\n [key: string]: StMaterialTableFilter | string;\r\n }): { [key: string]: StMaterialTableFilter } {\r\n const newFilters: { [key: string]: StMaterialTableFilter } = {};\r\n const keys = Object.keys(oldFilters);\r\n\r\n if (keys.length === 0) {\r\n return newFilters;\r\n }\r\n for (const key of keys) {\r\n if (typeof oldFilters[key] === 'object' && oldFilters[key] !== null) {\r\n newFilters[key] = oldFilters[key] as StMaterialTableFilter;\r\n }\r\n }\r\n\r\n return newFilters;\r\n }\r\n\r\n private setNewEmptyLocalStorageData() {\r\n this.localStorageData = {\r\n pageSize: this.pageSize(),\r\n pageIndex: 0,\r\n selectedColumns: this.initLocalColumns().map(col => col.field),\r\n globalSearch: '',\r\n columnsOrder: this.initLocalColumns().map(col => col.field),\r\n filters: {},\r\n sortField: '',\r\n sortOrder: 'asc',\r\n };\r\n }\r\n\r\n isFirstEditableColumn(column: ViewStMaterialTableColumnModel): boolean {\r\n // Get all editable columns in order\r\n const editableColumns = this.selectedColumns.filter(\r\n col => col.allowEditColumn && col.visible\r\n );\r\n\r\n // Return true if this is the first editable column\r\n return (\r\n editableColumns.length > 0 && editableColumns[0].field === column.field\r\n );\r\n }\r\n\r\n private validateRow(\r\n rowData: any,\r\n originalRow: any,\r\n singleColumn?: ViewStMaterialTableColumnModel\r\n ): boolean {\r\n const editableColumns = singleColumn\r\n ? [singleColumn]\r\n : this.columns.filter(col => col.allowEditColumn);\r\n const rowId = originalRow.id;\r\n\r\n // For single field validation, preserve existing errors for other fields\r\n let errors: { [field: string]: string } = singleColumn\r\n ? { ...this.validationErrors[rowId] }\r\n : {};\r\n\r\n // Clear all errors if validating entire row\r\n if (!singleColumn && this.validationErrors[rowId]) {\r\n errors = {};\r\n }\r\n\r\n let hasErrors = false;\r\n let firstErrorMessage = '';\r\n\r\n for (const col of editableColumns) {\r\n let fieldHasError = false;\r\n let errorMessage = '';\r\n\r\n if (col.customEditRowValidator) {\r\n const result = col.customEditRowValidator(\r\n rowData[col.field],\r\n originalRow[col.field],\r\n originalRow\r\n );\r\n if (!result.isValid) {\r\n errors[col.field] = result.errorMessage;\r\n fieldHasError = true;\r\n hasErrors = true;\r\n errorMessage = result.errorMessage;\r\n }\r\n }\r\n\r\n if (!fieldHasError && col.editColumnRequired) {\r\n const value = rowData[col.field];\r\n if (value === undefined || value === null || value === '') {\r\n errorMessage = `${col.header} is required`;\r\n errors[col.field] = errorMessage;\r\n fieldHasError = true;\r\n hasErrors = true;\r\n }\r\n }\r\n\r\n // Clear error for this field if validation passed\r\n if (!fieldHasError && singleColumn) {\r\n delete errors[col.field];\r\n }\r\n\r\n // Capture first error for snackbar (only when validating entire row)\r\n if (!singleColumn && fieldHasError && !firstErrorMessage) {\r\n firstErrorMessage = errorMessage;\r\n }\r\n }\r\n\r\n // Update validation errors\r\n if (Object.keys(errors).length > 0) {\r\n this.validationErrors[rowId] = errors;\r\n } else {\r\n delete this.validationErrors[rowId];\r\n }\r\n\r\n // Show snackbar only when validating entire row (on save)\r\n if (!singleColumn && hasErrors && firstErrorMessage) {\r\n this.snackbar.error(firstErrorMessage);\r\n }\r\n\r\n this.changeDetectorRef.markForCheck();\r\n return !hasErrors;\r\n }\r\n\r\n private updateRowInDataSource(index: number, row: any, rowData: any): void {\r\n if (index >= 0 && index < this.tableSource.data.length) {\r\n const updatedRow = { ...row };\r\n this.columns\r\n .filter(col => col.allowEditColumn)\r\n .forEach(col => {\r\n updatedRow[col.field] = rowData[col.field];\r\n });\r\n\r\n this.tableSource.data[index] = updatedRow;\r\n this.tableSource.data = [...this.tableSource.data];\r\n }\r\n }\r\n\r\n private initializeColumns(): void {\r\n this.initLocalColumns.set([...this.initColumns()]);\r\n\r\n // Add special columns\r\n this.addSelectColumnIfNeeded();\r\n this.addEditColumnIfNeeded();\r\n this.addExtendColumnIfNeeded();\r\n\r\n this.setColumnsFilterRowEditTypes();\r\n }\r\n\r\n private addSelectColumnIfNeeded(): void {\r\n if (!this.allowSelectRow()) {\r\n this.removeColumnByType('actions-row-selecting');\r\n return;\r\n }\r\n\r\n this.initLocalColumns().unshift({\r\n field: 'actions-row-selecting',\r\n header: '',\r\n type: 'actions-row-selecting',\r\n sort: false,\r\n filter: false,\r\n width: '40px',\r\n selectColumnLabel:\r\n this.stTableTranslations.getTranslations()().rowSelectColumnLabel,\r\n });\r\n\r\n if (this.initSelectedRow()) {\r\n this.selectedRows.set([...this.initSelectedRow()]);\r\n }\r\n }\r\n\r\n private addEditColumnIfNeeded(): void {\r\n if (!this.allowEditRow() || this.autoSaveOnChange()) {\r\n this.removeColumnByType('actions-row-editing');\r\n return;\r\n }\r\n\r\n const editingColumn: StMaterialTableColumnModel = {\r\n field: 'actions-row-editing',\r\n header: '',\r\n type: 'actions-row-editing',\r\n sort: false,\r\n filter: false,\r\n width: '110px',\r\n selectColumnLabel:\r\n this.stTableTranslations.getTranslations()().rowActionsColumnLabel,\r\n };\r\n\r\n this.initLocalColumns.update(columns => {\r\n const lastColumn = columns[columns.length - 1];\r\n if (lastColumn?.type !== 'actions') {\r\n return [...columns, editingColumn];\r\n }\r\n const newColumns = [...columns];\r\n newColumns.splice(newColumns.length - 1, 0, editingColumn);\r\n return newColumns;\r\n });\r\n }\r\n\r\n private addExtendColumnIfNeeded(): void {\r\n if (!this.allowExtendRow()) {\r\n this.removeColumnByType('actions-row-extending');\r\n return;\r\n }\r\n\r\n this.initLocalColumns().unshift({\r\n field: 'actions-row-extending',\r\n header: '',\r\n type: 'actions-row-extending',\r\n sort: false,\r\n filter: false,\r\n width: '30px',\r\n selectColumnLabel:\r\n this.stTableTranslations.getTranslations()().rowExtendColumnLabel,\r\n });\r\n }\r\n\r\n private removeColumnByType(type: string): void {\r\n this.initLocalColumns.update(columns =>\r\n columns.filter(column => column.field !== type)\r\n );\r\n }\r\n\r\n private validateAndUpdateFilters(): void {\r\n const filterKeys = Object.keys(this.initFilters);\r\n if (filterKeys.length === 0) return;\r\n\r\n const newFilters: { [key: string]: StMaterialTableFilter } = {};\r\n\r\n for (const key of filterKeys) {\r\n const col = this.initLocalColumns().find(column => column.field === key);\r\n if (!col) continue;\r\n\r\n newFilters[key] = {\r\n value: this.getDefaultFilterValue(col, this.initFilters[key]),\r\n matchMode: MaterialTableFilterDialogComponent.getBaseMatchModeByType(\r\n col.filterType!\r\n ),\r\n };\r\n }\r\n\r\n if (JSON.stringify(newFilters) !== JSON.stringify(this.initFilters)) {\r\n this.initFilters = newFilters;\r\n this.localStorageData.filters = newFilters;\r\n this.updateDataToLocalStorage();\r\n }\r\n }\r\n\r\n private getDefaultFilterValue(\r\n col: StMaterialTableColumnModel,\r\n filter: StMaterialTableFilter\r\n ): StMaterialTableFilterValueType {\r\n if (filter.matchMode === 'equal') {\r\n return (filter.value ?? null) as StMaterialTableFilterValueType;\r\n }\r\n\r\n if (filter.matchMode === 'between') {\r\n return filter.value && Array.isArray(filter.value)\r\n ? filter.value\r\n : [null, null];\r\n }\r\n\r\n return (filter.value ?? '') as StMaterialTableFilterValueType;\r\n }\r\n\r\n /**\r\n * Handles data changes from the input signal\r\n */\r\n private handleDataChange(data: any[]): void {\r\n if (!data || !Array.isArray(data)) {\r\n this._data = [];\r\n if (this.tableSource) {\r\n this.tableSource.data = [];\r\n }\r\n return;\r\n }\r\n\r\n if (\r\n data.length > 0 &&\r\n this._data.length === data.length &&\r\n this.setNewDataWithoutRefresh()\r\n ) {\r\n const objectKeys = Object.keys(data[0]).filter(key => key !== 'id');\r\n\r\n // Update existing objects in place to preserve references and avoid losing focus\r\n this.tableSource.data.forEach((existingRow, index) => {\r\n objectKeys.forEach(key => {\r\n existingRow[key] = data[index][key];\r\n });\r\n });\r\n\r\n // Force table to detect changes without recreating rows\r\n this.tableSource._updateChangeSubscription();\r\n\r\n // Trigger change detection on all child row cell components\r\n if (this.rowCells) {\r\n this.rowCells.forEach(cell => {\r\n cell.triggerChangeDetection();\r\n });\r\n }\r\n\r\n this.changeDetectorRef.detectChanges();\r\n } else {\r\n // Check if data is actually different (excluding IDs we might have added)\r\n // This prevents unnecessary updates when parent sends the same data\r\n if (this._data.length === data.length) {\r\n const dataWithoutIds = data.map(row => {\r\n const tmp = { ...row };\r\n delete tmp.id;\r\n return tmp;\r\n });\r\n const currentDataWithoutIds = this._data.map(row => {\r\n const tmp = { ...row };\r\n delete tmp.id;\r\n return tmp;\r\n });\r\n\r\n if (\r\n JSON.stringify(dataWithoutIds) ===\r\n JSON.stringify(currentDataWithoutIds)\r\n ) {\r\n return;\r\n }\r\n }\r\n\r\n // Create shallow copy to avoid mutating parent data\r\n let clonedData = data.map(row => ({ ...row }));\r\n\r\n // Add IDs if needed (only on the copy, only if row doesn't have an id)\r\n if (this.allowEditRow() || this.allowSelectRow() || this.autoSaveOnChange()) {\r\n clonedData = clonedData.map(row => {\r\n // Only add id if it doesn't exist - don't overwrite existing IDs\r\n if (!row.id) {\r\n return {\r\n ...row,\r\n id: StBaseService.generateGUID(),\r\n };\r\n }\r\n return row;\r\n });\r\n }\r\n\r\n this._data = clonedData;\r\n\r\n if (this.tableSource) {\r\n this.tableSource.data = clonedData;\r\n if (!this.lazyLoading() && this.localStorageData) {\r\n this.paginator.pageIndex = this.localStorageData.pageIndex;\r\n //@ts-ignore\r\n this.paginator._emitPageEvent(this.localStorageData.pageIndex);\r\n }\r\n\r\n this.changeDetectorRef.markForCheck();\r\n }\r\n }\r\n }\r\n}\r\n\r\nexport interface StMaterialTableLoadData {\r\n first: number;\r\n rows: number;\r\n globalFilter: string;\r\n globalFilterColumns: string[];\r\n sortField: string;\r\n sortOrder: SortDirection;\r\n filters: { [key: string]: StMaterialTableFilter };\r\n}\r\n\r\nexport interface StMaterialTableLocalStorage extends ICaptionDataChanged {\r\n pageSize: number;\r\n pageIndex: number;\r\n sortField: string;\r\n sortOrder: SortDirection;\r\n}\r\n","<div class=\"st-material-table\">\r\n @if (isLoading()) {\r\n <div class=\"loading-spinner\">\r\n <mat-spinner color=\"accent\"></mat-spinner>\r\n </div>\r\n }\r\n\r\n @if (showTable) {\r\n <st-material-table-caption\r\n [tableTitle]=\"tableTitle()\"\r\n [allowPickColumns]=\"allowPickColumns()\"\r\n [showGlobalSearch]=\"showGlobalSearch()\"\r\n [allowReorderColumns]=\"allowReorderColumns()\"\r\n [columns]=\"columns\"\r\n [initFilters]=\"initFilters\"\r\n [initGlobalSearch]=\"initGlobalSearch\"\r\n [showCreateButton]=\"showCreateButton()\"\r\n [createButtonLabel]=\"createButtonLabel()\"\r\n [createButtonAction]=\"createButtonAction()\"\r\n [allowCreateRow]=\"allowCreateRow()\"\r\n [disableCreateButton]=\"disableCreateButton()\"\r\n [extraCustomFilter]=\"extraCustomFilter()\"\r\n [creatingRow]=\"creatingRow()\"\r\n (captionDataChanged)=\"captionDataChanged($event)\"\r\n (resetTableSettings)=\"resetTableSettings()\"\r\n (addNewRow)=\"addNewRow()\"\r\n ></st-material-table-caption>\r\n }\r\n\r\n <table\r\n [ngClass]=\"{\r\n 'no-hover': !rowClickAction(),\r\n 'is-expended-table': allowExtendRow(),\r\n 'compact-view': compactView()\r\n }\"\r\n mat-table\r\n [dataSource]=\"tableSource\"\r\n matSort\r\n [multiTemplateDataRows]=\"allowExtendRow()\"\r\n >\r\n @for (column of selectedColumns; track column.field) {\r\n <ng-container [matColumnDef]=\"column.field\">\r\n <th\r\n mat-header-cell\r\n *matHeaderCellDef\r\n [style.width]=\"column.actionsInMenu || (column.actions && mobileView() && column.actions!.length > 1) ? '60px' : column.width\"\r\n mat-sort-header\r\n [disabled]=\"!column.sort\"\r\n >\r\n @if (column.type === 'actions-row-selecting' && !selectRowOnlyOne()) {\r\n <mat-checkbox\r\n color=\"primary\"\r\n (change)=\"toggleAllRows($event.checked)\"\r\n [checked]=\"selectedRows().length > 0 && isAllSelected()\"\r\n [indeterminate]=\"selectedRows().length > 0 && !isAllSelected()\"\r\n >\r\n </mat-checkbox>\r\n } @else if (\r\n column.type === 'actions-row-editing' && showEditAllRows()\r\n ) {\r\n <div class=\"row justify-content-end edit-all-rows-button\">\r\n <button\r\n mat-icon-button\r\n (click)=\"turnOnAllEditRows()\"\r\n matTooltip=\"Edit all rows\"\r\n >\r\n <mat-icon>edit_arrow_down</mat-icon>\r\n </button>\r\n </div>\r\n } @else {\r\n {{ column.header }}\r\n }\r\n </th>\r\n <td\r\n mat-cell\r\n *matCellDef=\"let element; let i = index; let j = dataIndex\"\r\n [style.width]=\"column.actionsInMenu || (column.actions && mobileView() && column.actions!.length > 1) ? '60px' : column.width\"\r\n >\r\n <st-material-table-row-cell\r\n [column]=\"column\"\r\n [rowData]=\"element\"\r\n [rowIndex]=\"getAbsoluteIndex(allowExtendRow() ? j : i)\"\r\n [rowDataCopy]=\"\r\n activeRowsEditing[element.id] || activeRowsCreating[element.id]\r\n \"\r\n [rowEditing]=\"\r\n !!activeRowsEditing[element.id] ||\r\n !!activeRowsCreating[element.id]\r\n \"\r\n [rowIsSelected]=\"isRowSelected(element)\"\r\n [rowIsExpanded]=\"expandedRowIndex() === (allowExtendRow() ? j : i)\"\r\n [canEditRowValidator]=\"canEditRowValidator()\"\r\n [canDeleteRowValidator]=\"canDeleteRowValidator()\"\r\n [selectRowOnlyOne]=\"selectRowOnlyOne()\"\r\n [isFirstEditableColumn]=\"isFirstEditableColumn(column)\"\r\n [autoSaveOnChange]=\"autoSaveOnChange()\"\r\n [allowEditRow]=\"allowEditRow()\"\r\n [allowEditInEditRow]=\"allowEditInEditRow()\"\r\n [allowDeleteInEditRow]=\"allowDeleteInEditRow()\"\r\n [fieldError]=\"validationErrors[element.id]?.[column.field]\"\r\n [mobileView]=\"mobileView()\"\r\n (editRowEmitter)=\"editRow(element, column)\"\r\n (deleteRowEmitter)=\"\r\n deleteRow(element, column, allowExtendRow() ? j : i)\r\n \"\r\n (saveEditRowEmitter)=\"\r\n saveEditRow(element, column, allowExtendRow() ? j : i)\r\n \"\r\n (cancelEditRowEmitter)=\"cancelEditRow(element, column)\"\r\n (selectRowChange)=\"selectRowChanged($event, element)\"\r\n (fieldValueChanged)=\"\r\n onFieldValueChanged(\r\n element,\r\n column,\r\n $event.value,\r\n allowExtendRow() ? j : i\r\n )\r\n \"\r\n ></st-material-table-row-cell>\r\n </td>\r\n </ng-container>\r\n }\r\n\r\n <ng-container matColumnDef=\"expandedDetail\">\r\n <td\r\n mat-cell\r\n *matCellDef=\"let element; let i = dataIndex\"\r\n [attr.colspan]=\"selectedColumnsString.length\"\r\n >\r\n <div\r\n class=\"expanded-element-detail-wrapper\"\r\n [@detailExpand]=\"expandedRowIndex() === i ? 'expanded' : 'collapsed'\"\r\n >\r\n <div class=\"expanded-element-detail\">\r\n <ng-container\r\n [ngTemplateOutlet]=\"extendedRowTemplate()!\"\r\n [ngTemplateOutletContext]=\"{ data: element, rowIndex: expandedRowIndex() }\"\r\n ></ng-container>\r\n </div>\r\n </div>\r\n </td>\r\n </ng-container>\r\n\r\n <tr mat-header-row *matHeaderRowDef=\"selectedColumnsString\"></tr>\r\n <tr\r\n mat-row\r\n *matRowDef=\"let row; columns: selectedColumnsString; let i = dataIndex\"\r\n [class.expanded-expanded-row]=\"expandedRowIndex() === i\"\r\n (click)=\"clickRowAction(row, i)\"\r\n ></tr>\r\n @if (allowExtendRow()) {\r\n <tr\r\n mat-row\r\n *matRowDef=\"let row; columns: ['expandedDetail']\"\r\n class=\"extended-detail-row\"\r\n ></tr>\r\n }\r\n </table>\r\n <mat-paginator\r\n [showFirstLastButtons]=\"true\"\r\n [pageSizeOptions]=\"[5, 10, 15, 20, 25]\"\r\n [length]=\"dataLength()\"\r\n ></mat-paginator>\r\n <st-material-table-selected-rows\r\n [allowSelectRow]=\"allowSelectRow()\"\r\n [selectRowOnlyOne]=\"selectRowOnlyOne()\"\r\n [selectedRows]=\"selectedRows()\"\r\n [selectionFieldLabel]=\"selectionFieldLabel()\"\r\n [selectRowValueDisplay]=\"selectRowValueDisplay()\"\r\n (removeSelectedRow)=\"onRemoveSelectedRow($event)\"\r\n ></st-material-table-selected-rows>\r\n</div>\r\n","import { StMaterialTableLoadData } from '../components/material-table/material-table.component';\r\nimport { StMaterialTableFilterMatchModeType } from '../models/models';\r\n\r\nexport function mapTableDataToApi(\r\n tableOptions: StMaterialTableLoadData\r\n): ApiTableRequestModel {\r\n const filtersKeys = Object.keys(tableOptions.filters || {});\r\n\r\n return {\r\n globalFilter: tableOptions.globalFilter || '',\r\n take: tableOptions.rows || 10,\r\n skip: tableOptions.first ? tableOptions.first : 0,\r\n sortColumn:\r\n tableOptions.sortOrder && tableOptions.sortField\r\n ? tableOptions.sortField || ''\r\n : '',\r\n sortDescending: tableOptions.sortOrder === 'desc',\r\n filters:\r\n filtersKeys?.map(filter => ({\r\n fieldName: filter,\r\n operator: getFilterType(tableOptions.filters[filter].matchMode),\r\n value: Array.isArray(tableOptions.filters[filter].value)\r\n ? (tableOptions.filters[filter].value as any)[0]\r\n : tableOptions.filters[filter].value,\r\n secondValue: Array.isArray(tableOptions.filters[filter].value)\r\n ? (tableOptions.filters[filter].value as any)[1]\r\n : undefined,\r\n })) || [],\r\n };\r\n}\r\n\r\nfunction getFilterType(\r\n filterType: StMaterialTableFilterMatchModeType\r\n): ApiTableFilterOperatorEnum {\r\n switch (filterType) {\r\n case 'contains':\r\n return ApiTableFilterOperatorEnum.Like;\r\n case 'equal':\r\n return ApiTableFilterOperatorEnum.Equal;\r\n case 'between':\r\n return ApiTableFilterOperatorEnum.Between;\r\n default:\r\n throw new Error(`Unknown filter type: ${filterType}`);\r\n }\r\n}\r\n\r\nexport interface ApiTableRequestModel {\r\n take: number;\r\n skip: number;\r\n sortColumn: string;\r\n sortDescending: boolean;\r\n filters: ApiTableFilterCriteriaModel[];\r\n globalFilter: string;\r\n}\r\n\r\nexport class ApiTableFilterCriteriaModel {\r\n fieldName: string;\r\n operator: ApiTableFilterOperatorEnum;\r\n value: string;\r\n secondValue: string;\r\n}\r\n\r\nexport enum ApiTableFilterOperatorEnum {\r\n Equal,\r\n Like,\r\n GreaterThan,\r\n GreaterThanOrEqual,\r\n LessThan,\r\n LessThanOrEqual,\r\n Between,\r\n In,\r\n}\r\n","import { ModuleWithProviders, NgModule } from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\nimport { MatButtonModule } from '@angular/material/button';\r\nimport { MatIconModule, MatIconRegistry } from '@angular/material/icon';\r\nimport { MatTableModule } from '@angular/material/table';\r\nimport { MatPaginatorModule } from '@angular/material/paginator';\r\nimport { MatFormFieldModule } from '@angular/material/form-field';\r\nimport { MatInputModule } from '@angular/material/input';\r\nimport { MatTooltipModule } from '@angular/material/tooltip';\r\nimport { FormsModule, ReactiveFormsModule } from '@angular/forms';\r\nimport { RouterModule } from '@angular/router';\r\nimport { MatSortModule } from '@angular/material/sort';\r\nimport { MatMenuModule } from '@angular/material/menu';\r\nimport { MatSelectModule } from '@angular/material/select';\r\nimport { MatCheckboxModule } from '@angular/material/checkbox';\r\nimport { StDateFormatModule } from 'ngx-st-date-format';\r\nimport { MaterialTableComponent } from './components/material-table/material-table.component';\r\nimport { MaterialTableCaptionComponent } from './components/material-table/material-table-caption/material-table-caption.component';\r\nimport { MatBadge } from '@angular/material/badge';\r\nimport { MatProgressSpinner } from '@angular/material/progress-spinner';\r\nimport { StBaseFunctionsModule } from 'ngx-st-base-functions';\r\nimport { MaterialTableOrderColumnDialogComponent } from './components/material-table/material-table-caption/material-table-order-column-dialog/material-table-order-column-dialog.component';\r\nimport { MaterialTableFilterDialogComponent } from './components/material-table/material-table-caption/material-table-filter-dialog/material-table-filter-dialog.component';\r\nimport { MatDialogModule } from '@angular/material/dialog';\r\nimport { MatExpansionModule } from '@angular/material/expansion';\r\nimport { CdkDrag, CdkDropList } from '@angular/cdk/drag-drop';\r\nimport { MaterialTableRowCellComponent } from './components/material-table/material-table-row-cell/material-table-row-cell.component';\r\nimport { MaterialTableSelectedRowsComponent } from './components/material-table/material-table-selected-rows/material-table-selected-rows.component';\r\nimport { StQtyInputModule } from 'ngx-st-qty-input';\r\nimport { MatDatepickerModule } from '@angular/material/datepicker';\r\nimport { MatSlideToggleModule } from '@angular/material/slide-toggle';\r\nimport { MatNativeDateModule } from '@angular/material/core';\r\nimport { StSnackBarModule } from 'ngx-st-snack-bar';\r\nimport { StTablesTranslationsModel } from './models/st-tables-translations.model';\r\nimport { SelectTableComponent } from './components/select-table/select-table.component';\r\nimport { MaterialTableFilterComponent } from './components/material-table/material-table-caption/material-table-filter-dialog/material-table-filter.component';\r\nimport { MatRadioButton } from '@angular/material/radio';\r\nimport { MatChip, MatChipRemove } from '@angular/material/chips';\r\nimport { DateWithoutTimezoneFormatPipe } from './pipes/date-without-timezone-format.pipe';\r\n\r\n@NgModule({\r\n declarations: [\r\n MaterialTableCaptionComponent,\r\n MaterialTableComponent,\r\n MaterialTableOrderColumnDialogComponent,\r\n MaterialTableFilterDialogComponent,\r\n MaterialTableRowCellComponent,\r\n MaterialTableSelectedRowsComponent,\r\n SelectTableComponent,\r\n MaterialTableFilterComponent,\r\n DateWithoutTimezoneFormatPipe,\r\n ],\r\n imports: [\r\n CommonModule,\r\n MatButtonModule,\r\n MatIconModule,\r\n MatTableModule,\r\n MatPaginatorModule,\r\n MatFormFieldModule,\r\n MatInputModule,\r\n MatTooltipModule,\r\n FormsModule,\r\n ReactiveFormsModule,\r\n RouterModule,\r\n StDateFormatModule,\r\n MatSortModule,\r\n MatMenuModule,\r\n MatSelectModule,\r\n MatCheckboxModule,\r\n MatBadge,\r\n MatProgressSpinner,\r\n StBaseFunctionsModule,\r\n MatDialogModule,\r\n MatExpansionModule,\r\n CdkDropList,\r\n CdkDrag,\r\n StQtyInputModule,\r\n MatDatepickerModule,\r\n MatSlideToggleModule,\r\n MatNativeDateModule,\r\n StSnackBarModule,\r\n MatRadioButton,\r\n MatChip,\r\n MatChipRemove,\r\n ],\r\n exports: [MaterialTableComponent, SelectTableComponent],\r\n providers: [MatDatepickerModule],\r\n})\r\nexport class StTablesModule {\r\n constructor(private matIconRegistry: MatIconRegistry) {\r\n this.matIconRegistry.setDefaultFontSetClass('material-symbols-outlined');\r\n }\r\n\r\n static forRoot(config?: {\r\n translations?: Partial<StTablesTranslationsModel>;\r\n }): ModuleWithProviders<StTablesModule> {\r\n return {\r\n ngModule: StTablesModule,\r\n providers: [\r\n {\r\n provide: 'ST_TABLES_CONFIG',\r\n useValue: config || {},\r\n },\r\n ],\r\n };\r\n }\r\n}\r\n","/*\r\n * Public API Surface of ngx-st-tables\r\n */\r\n\r\nexport * from './lib/services/st-tables-translations.service';\r\nexport * from './lib/components/select-table/select-table.component';\r\nexport * from './lib/components/material-table/material-table-caption/material-table-caption.component';\r\nexport * from './lib/components/material-table/material-table-selected-rows/material-table-selected-rows.component';\r\nexport * from './lib/components/material-table/material-table.component';\r\nexport * from './lib/pipes/date-without-timezone-format.pipe';\r\nexport * from './lib/models/st-material-table-column.model';\r\nexport * from './lib/models/st-tables-translations.model';\r\nexport * from './lib/constants/map-table-data-to-api';\r\nexport * from './lib/ngx-st-tables.module';\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i2","i3","i5","i6","i1.StTablesTranslationsService","i4","i7","i6.MaterialTableFilterComponent","i1","i9","i8","i10","i11","i14","i16.DateWithoutTimezoneFormatPipe","i2.StTablesTranslationsService","i12","i13.MaterialTableCaptionComponent","i14.MaterialTableRowCellComponent","i15.MaterialTableSelectedRowsComponent"],"mappings":"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"}
1
+ {"version":3,"file":"ngx-st-tables.mjs","sources":["../../../projects/ngx-st-tables/src/lib/constants/default-translations.ts","../../../projects/ngx-st-tables/src/lib/services/st-tables-translations.service.ts","../../../projects/ngx-st-tables/src/lib/components/select-table/select-table.component.ts","../../../projects/ngx-st-tables/src/lib/components/select-table/select-table.component.html","../../../projects/ngx-st-tables/src/lib/components/material-table/material-table-caption/material-table-filter-dialog/material-table-filter.component.ts","../../../projects/ngx-st-tables/src/lib/components/material-table/material-table-caption/material-table-filter-dialog/material-table-filter-dialog.component.ts","../../../projects/ngx-st-tables/src/lib/components/material-table/material-table-caption/material-table-filter-dialog/material-table-filter-dialog.component.html","../../../projects/ngx-st-tables/src/lib/components/material-table/material-table-caption/material-table-order-column-dialog/material-table-order-column-dialog.component.ts","../../../projects/ngx-st-tables/src/lib/components/material-table/material-table-caption/material-table-order-column-dialog/material-table-order-column-dialog.component.html","../../../projects/ngx-st-tables/src/lib/components/material-table/material-table-caption/material-table-caption.component.ts","../../../projects/ngx-st-tables/src/lib/components/material-table/material-table-caption/material-table-caption.component.html","../../../projects/ngx-st-tables/src/lib/components/material-table/material-table-selected-rows/material-table-selected-rows.component.ts","../../../projects/ngx-st-tables/src/lib/components/material-table/material-table-selected-rows/material-table-selected-rows.component.html","../../../projects/ngx-st-tables/src/lib/pipes/date-without-timezone-format.pipe.ts","../../../projects/ngx-st-tables/src/lib/components/material-table/material-table-row-cell/material-table-row-cell.component.ts","../../../projects/ngx-st-tables/src/lib/components/material-table/material-table-row-cell/material-table-row-cell.component.html","../../../projects/ngx-st-tables/src/lib/components/material-table/material-table.component.ts","../../../projects/ngx-st-tables/src/lib/components/material-table/material-table.component.html","../../../projects/ngx-st-tables/src/lib/constants/map-table-data-to-api.ts","../../../projects/ngx-st-tables/src/lib/ngx-st-tables.module.ts","../../../projects/ngx-st-tables/src/public-api.ts","../../../projects/ngx-st-tables/src/ngx-st-tables.ts"],"sourcesContent":["import { StTablesTranslationsModel } from '../models/st-tables-translations.model';\r\n\r\nexport const DEFAULT_TRANSLATIONS: StTablesTranslationsModel = {\r\n globalSearch: 'Search',\r\n cancel: 'Cancel',\r\n close: 'Close',\r\n save: 'Save',\r\n reorderColumnsTitle: 'Reorder Columns',\r\n reorderColumns: 'Reorder Columns',\r\n expandAllFilters: 'Expand all filters',\r\n collapseAllFilters: 'Collapse all filters',\r\n clearAllFilters: 'Clear All Filters',\r\n filterTitle: 'Filters',\r\n filter: 'Filter',\r\n searchFilter: 'Search',\r\n filterChooseDate: 'Choose a date',\r\n booleanPickValue: 'Pick Value',\r\n booleanNone: 'None',\r\n booleanYes: 'Yes',\r\n booleanNo: 'No',\r\n customPickValue: 'Pick Value',\r\n customNone: 'None',\r\n rowSelected: 'row selected',\r\n rowSelectColumnLabel: 'Row Select',\r\n rowActionsColumnLabel: 'Row Actions',\r\n rowExtendColumnLabel: 'Row Extend',\r\n matchMode: 'Match Mode',\r\n clearFilter: 'Clear Filter',\r\n dateFrom: 'Date From',\r\n dateTo: 'Date To',\r\n resetTableSettings: 'Reset Table Settings',\r\n};\r\n","import { Inject, Injectable, Optional, signal } from '@angular/core';\r\nimport { StTablesTranslationsModel } from '../models/st-tables-translations.model';\r\nimport { DEFAULT_TRANSLATIONS } from '../constants/default-translations';\r\n\r\n@Injectable({\r\n providedIn: 'root',\r\n})\r\nexport class StTablesTranslationsService {\r\n private readonly translations =\r\n signal<StTablesTranslationsModel>(DEFAULT_TRANSLATIONS);\r\n\r\n constructor(\r\n @Optional()\r\n @Inject('ST_TABLES_CONFIG')\r\n private config: { translations?: Partial<StTablesTranslationsModel> }\r\n ) {\r\n if (this.config?.translations) {\r\n this.setTranslations(this.config.translations);\r\n }\r\n }\r\n\r\n setTranslations(translations: Partial<StTablesTranslationsModel>) {\r\n this.translations.set({\r\n ...DEFAULT_TRANSLATIONS,\r\n ...translations,\r\n });\r\n }\r\n\r\n getTranslations() {\r\n return this.translations;\r\n }\r\n}\r\n","import {\r\n Component,\r\n EventEmitter,\r\n Input,\r\n OnInit,\r\n Output,\r\n ViewChild,\r\n} from '@angular/core';\r\nimport { MatPaginator } from '@angular/material/paginator';\r\nimport { MatTableDataSource } from '@angular/material/table';\r\nimport { UntypedFormControl } from '@angular/forms';\r\n\r\n@Component({\r\n selector: 'ngx-st-select-table',\r\n templateUrl: './select-table.component.html',\r\n styleUrls: [\r\n './select-table.component.scss',\r\n '../../../../assets/base-table.scss',\r\n ],\r\n})\r\nexport class SelectTableComponent implements OnInit {\r\n @ViewChild(MatPaginator) paginator: MatPaginator;\r\n\r\n @Input()\r\n title: string;\r\n\r\n @Input()\r\n required: boolean = false;\r\n\r\n @Input()\r\n multiple: boolean = false;\r\n\r\n @Input()\r\n initSelected: any;\r\n\r\n @Input()\r\n initSearchVal: any;\r\n\r\n @Input()\r\n searchLabel: string = 'Search';\r\n\r\n @Input()\r\n selectedLabel: string = 'Selected';\r\n\r\n @Input()\r\n set setInitColumns(col: { [col: string]: string }) {\r\n this.columns = ['active', ...Object.keys(col)];\r\n this.initColumns = col;\r\n }\r\n\r\n @Input()\r\n set tableData(data: any[]) {\r\n this.tableSource = new MatTableDataSource(data);\r\n this.tableSource.paginator = this.paginator;\r\n }\r\n\r\n @Input()\r\n set validError(error: boolean) {\r\n this._validError = error;\r\n }\r\n\r\n get validError(): boolean {\r\n return this._validError;\r\n }\r\n\r\n private _validError = false;\r\n\r\n @Output()\r\n returnRowSelected: EventEmitter<any[]> = new EventEmitter<any[]>();\r\n\r\n tableSource: MatTableDataSource<any>;\r\n columns: string[];\r\n initColumns: {\r\n [col: string]: string;\r\n };\r\n search: UntypedFormControl = new UntypedFormControl('');\r\n rowSelected: any[] = [];\r\n\r\n constructor() {}\r\n\r\n ngOnInit(): void {\r\n this.search.valueChanges.subscribe(res => {\r\n this.tableSource.filter = res.trim().toLowerCase();\r\n });\r\n setTimeout(() => {\r\n if (this.initSearchVal) {\r\n this.search.setValue(this.initSearchVal);\r\n this.rowClick(this.initSelected);\r\n }\r\n }, 1000);\r\n }\r\n\r\n clearSearch() {\r\n this.search.setValue('');\r\n }\r\n\r\n rowClick(row: any) {\r\n const found = this.rowSelected.find(tmpRow => tmpRow === row);\r\n if (found) {\r\n this.rowSelected = this.rowSelected.filter(tmpRow => tmpRow !== row);\r\n } else {\r\n if (this.multiple) {\r\n this.rowSelected.push(row);\r\n } else {\r\n this.rowSelected = [row];\r\n }\r\n }\r\n this.returnRowSelected.emit(this.rowSelected);\r\n }\r\n\r\n checkActiveRow(row: any) {\r\n return !!this.rowSelected.find(activeRow => activeRow === row);\r\n }\r\n}\r\n","<div class=\"shared-table-selector\">\r\n <p class=\"title\" [ngClass]=\"{ 'error-text': validError }\">\r\n {{ title }} {{ required ? '*' : '' }}\r\n </p>\r\n\r\n <div class=\"search-form row align-items-center\">\r\n <div class=\"col-sm-12 col-md row align-items-center\">\r\n <mat-form-field class=\"col\">\r\n <input\r\n matInput\r\n placeholder=\"{{ searchLabel }}\"\r\n [formControl]=\"search\"\r\n />\r\n </mat-form-field>\r\n <div class=\"clear col-auto\">\r\n <mat-icon (click)=\"clearSearch()\">clear</mat-icon>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <table mat-table [dataSource]=\"tableSource\">\r\n @for (col of columns; track col) {\r\n <ng-container [matColumnDef]=\"col\">\r\n <th mat-header-cell *matHeaderCellDef>\r\n {{ col === 'active' ? selectedLabel : initColumns[col] }}\r\n </th>\r\n <td mat-cell *matCellDef=\"let element\">\r\n @if (col === 'active') {\r\n @if (checkActiveRow(element)) {\r\n <mat-icon class=\"active-row\">done</mat-icon>\r\n }\r\n }\r\n @if (col !== 'active') {\r\n {{ element[col] }}\r\n }\r\n </td>\r\n </ng-container>\r\n }\r\n\r\n <tr mat-header-row *matHeaderRowDef=\"columns\"></tr>\r\n <tr\r\n mat-row\r\n *matRowDef=\"let row; columns: columns\"\r\n (click)=\"rowClick(row)\"\r\n [ngClass]=\"{ active: checkActiveRow(row) }\"\r\n ></tr>\r\n </table>\r\n <mat-paginator [pageSizeOptions]=\"[5]\"></mat-paginator>\r\n</div>\r\n","import {\r\n ChangeDetectionStrategy,\r\n Component,\r\n input,\r\n effect,\r\n output,\r\n computed,\r\n ChangeDetectorRef,\r\n} from '@angular/core';\r\nimport { StTablesTranslationsService } from '../../../../services/st-tables-translations.service';\r\nimport { ViewStMaterialTableColumnModel } from '../../../../models/view/view-st-material-table-column.model';\r\nimport { NonNullableFormBuilder } from '@angular/forms';\r\nimport {\r\n StMaterialTableFilter,\r\n StMaterialTableFilterMatchModeType,\r\n StMaterialTableFilterValueType,\r\n} from '../../../../models/models';\r\n\r\n@Component({\r\n selector: 'ngx-st-material-table-filter',\r\n template: `\r\n <form class=\"row\" [formGroup]=\"formGroup\">\r\n <div class=\"col-auto\">\r\n <mat-form-field appearance=\"outline\" class=\"match-mode-field\">\r\n <mat-label>{{ translations().matchMode }}</mat-label>\r\n <input matInput type=\"text\" formControlName=\"matchMode\" />\r\n </mat-form-field>\r\n </div>\r\n\r\n @if (\r\n column().filterType === 'string' || column().filterType === 'number'\r\n ) {\r\n <div class=\"col\">\r\n <mat-form-field appearance=\"outline\" class=\"full-width\">\r\n <mat-label>{{ translations().searchFilter }}</mat-label>\r\n <input\r\n matInput\r\n [type]=\"column().filterType === 'string' ? 'text' : 'number'\"\r\n formControlName=\"value\"\r\n />\r\n </mat-form-field>\r\n </div>\r\n }\r\n\r\n @if (column().filterType === 'date') {\r\n <div class=\"col\">\r\n <mat-form-field appearance=\"outline\" class=\"date-field\">\r\n <mat-label>{{ translations().dateFrom }}</mat-label>\r\n <input\r\n matInput\r\n [matDatepicker]=\"picker1\"\r\n formControlName=\"dateFrom\"\r\n />\r\n <mat-datepicker-toggle\r\n matIconSuffix\r\n [for]=\"picker1\"\r\n ></mat-datepicker-toggle>\r\n <mat-datepicker #picker1></mat-datepicker>\r\n </mat-form-field>\r\n </div>\r\n <div class=\"col\">\r\n <mat-form-field appearance=\"outline\" class=\"date-field\">\r\n <mat-label>{{ translations().dateTo }}</mat-label>\r\n <input\r\n matInput\r\n [matDatepicker]=\"picker2\"\r\n formControlName=\"dateTo\"\r\n />\r\n <mat-datepicker-toggle\r\n matIconSuffix\r\n [for]=\"picker2\"\r\n ></mat-datepicker-toggle>\r\n <mat-datepicker #picker2></mat-datepicker>\r\n </mat-form-field>\r\n </div>\r\n }\r\n\r\n @if (column().filterType === 'boolean') {\r\n <div class=\"col\">\r\n <mat-form-field appearance=\"outline\" class=\"full-width\">\r\n <mat-label>{{ translations().booleanPickValue }}</mat-label>\r\n <mat-select formControlName=\"value\">\r\n <mat-option value=\"\">{{ translations().booleanNone }}</mat-option>\r\n <mat-option [value]=\"true\">{{\r\n translations().booleanYes\r\n }}</mat-option>\r\n <mat-option [value]=\"false\">{{\r\n translations().booleanNo\r\n }}</mat-option>\r\n </mat-select>\r\n </mat-form-field>\r\n </div>\r\n }\r\n\r\n @if (column().filterType === 'custom') {\r\n <div class=\"col\">\r\n <mat-form-field appearance=\"outline\" class=\"full-width\">\r\n <mat-label>{{ translations().customPickValue }}</mat-label>\r\n <mat-select formControlName=\"value\">\r\n <mat-option value=\"\">{{ translations().customNone }}</mat-option>\r\n @for (\r\n option of column().customFilterOptions;\r\n track option.value\r\n ) {\r\n <mat-option [value]=\"option.value\">{{\r\n option.label\r\n }}</mat-option>\r\n }\r\n </mat-select>\r\n </mat-form-field>\r\n </div>\r\n }\r\n </form>\r\n `,\r\n styles: [\r\n `\r\n :host {\r\n width: 100%;\r\n }\r\n\r\n form.row {\r\n gap: 8px;\r\n width: 100%;\r\n\r\n & > .col-auto,\r\n & > .col {\r\n padding: 0;\r\n }\r\n }\r\n\r\n .match-mode-field {\r\n width: 120px;\r\n }\r\n\r\n .date-field {\r\n width: 170px;\r\n }\r\n\r\n .full-width {\r\n width: 100%;\r\n }\r\n `,\r\n ],\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n})\r\nexport class MaterialTableFilterComponent {\r\n column = input.required<ViewStMaterialTableColumnModel>();\r\n filterValue = input<StMaterialTableFilter>({} as StMaterialTableFilter);\r\n\r\n filterValueChanged = output<StMaterialTableFilter>();\r\n\r\n // Cache translations as computed signal\r\n translations = computed(() => this.stTableTranslations.getTranslations()());\r\n\r\n formGroup = this.fb.group({\r\n matchMode: {\r\n value: <StMaterialTableFilterMatchModeType>'contains',\r\n disabled: true,\r\n },\r\n value: <null | string | number>'',\r\n dateFrom: <null | Date>null,\r\n dateTo: <null | Date>null,\r\n });\r\n\r\n private isUpdatingFromOutside = false;\r\n\r\n constructor(\r\n private stTableTranslations: StTablesTranslationsService,\r\n private fb: NonNullableFormBuilder,\r\n private changeDetectorRef: ChangeDetectorRef\r\n ) {\r\n // React to filterValue changes\r\n effect(() => {\r\n const filter = this.filterValue();\r\n if (filter && Object.keys(filter).length > 0) {\r\n this.isUpdatingFromOutside = true;\r\n this.setFilterValue(filter);\r\n this.isUpdatingFromOutside = false;\r\n }\r\n }, {allowSignalWrites: true});\r\n\r\n // React to form value changes\r\n effect(() => {\r\n // Track form changes\r\n this.formGroup.valueChanges.subscribe(() => {\r\n if (!this.isUpdatingFromOutside) {\r\n this.updateAfterFormValueChanged();\r\n }\r\n });\r\n }, {allowSignalWrites: true});\r\n }\r\n\r\n private setFilterValue(newFilterValue: StMaterialTableFilter) {\r\n if (newFilterValue) {\r\n this.formGroup.controls.matchMode.setValue(newFilterValue.matchMode, {\r\n emitEvent: false,\r\n });\r\n\r\n if (this.column().filterType === 'date') {\r\n const tmpValue = newFilterValue.value as [string | null, string | null];\r\n this.formGroup.controls.dateFrom.setValue(\r\n tmpValue[0] ? new Date(tmpValue[0]!) : null,\r\n { emitEvent: false }\r\n );\r\n this.formGroup.controls.dateTo.setValue(\r\n tmpValue[1] ? new Date(tmpValue[1]) : null,\r\n { emitEvent: false }\r\n );\r\n } else if (\r\n this.column().filterType === 'boolean' ||\r\n this.column().filterType === 'number'\r\n ) {\r\n this.formGroup.controls.value.setValue(\r\n ((newFilterValue.value as string | number | boolean | null) ?? null) as any,\r\n { emitEvent: false }\r\n );\r\n } else {\r\n const value = newFilterValue.value as string | number | null;\r\n this.formGroup.controls.value.setValue(\r\n (value === null || value === undefined ? '' : value) as any,\r\n { emitEvent: false }\r\n );\r\n }\r\n\r\n this.changeDetectorRef.markForCheck();\r\n }\r\n }\r\n\r\n private updateAfterFormValueChanged() {\r\n let tmpValue: StMaterialTableFilterValueType = null;\r\n const controlValue = this.formGroup.controls.value.value;\r\n\r\n if (this.column().filterType === 'date') {\r\n tmpValue = [\r\n this.formatDateToString(this.formGroup.controls.dateFrom.value),\r\n this.formatDateToString(this.formGroup.controls.dateTo.value),\r\n ] as [string | null, string | null];\r\n }\r\n\r\n if (\r\n this.column().filterType === 'boolean' ||\r\n this.column().filterType === 'number'\r\n ) {\r\n tmpValue =\r\n (controlValue === null || controlValue === undefined\r\n ? null\r\n : (controlValue as StMaterialTableFilterValueType)) ?? null;\r\n } else if (this.column().filterType !== 'date') {\r\n tmpValue =\r\n controlValue === null || controlValue === undefined\r\n ? ('' as StMaterialTableFilterValueType)\r\n : (controlValue as StMaterialTableFilterValueType);\r\n }\r\n\r\n const newFilter: StMaterialTableFilter = {\r\n matchMode: this.formGroup.controls.matchMode.value,\r\n value: tmpValue,\r\n };\r\n\r\n this.filterValueChanged.emit(newFilter);\r\n }\r\n\r\n private formatDateToString(date: Date | null): string | null {\r\n if (!date) return null;\r\n\r\n const year = date.getFullYear();\r\n const month = (date.getMonth() + 1).toString().padStart(2, '0');\r\n const day = date.getDate().toString().padStart(2, '0');\r\n\r\n return `${year}-${month}-${day}`;\r\n }\r\n}\r\n","import {\r\n ChangeDetectionStrategy,\r\n Component,\r\n inject,\r\n OnInit,\r\n signal,\r\n computed,\r\n} from '@angular/core';\r\nimport { MAT_DIALOG_DATA, MatDialogRef } from '@angular/material/dialog';\r\nimport { ViewStMaterialTableColumnModel } from '../../../../models/view/view-st-material-table-column.model';\r\nimport { StTablesTranslationsService } from '../../../../services/st-tables-translations.service';\r\nimport { StMaterialColumnFilterType } from '../../../../models/st-material-table-column.model';\r\nimport {\r\n StMaterialTableFilter,\r\n StMaterialTableFilterValueType,\r\n} from '../../../../models/models';\r\n\r\n@Component({\r\n selector: 'st-material-table-filter-dialog',\r\n templateUrl: './material-table-filter-dialog.component.html',\r\n styleUrls: ['./material-table-filter-dialog.component.scss'],\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n})\r\nexport class MaterialTableFilterDialogComponent implements OnInit {\r\n public dialogData = inject<{\r\n columns: ViewStMaterialTableColumnModel[];\r\n initFilters: { [key: string]: StMaterialTableFilter };\r\n }>(MAT_DIALOG_DATA);\r\n\r\n public dialogRef = inject(\r\n MatDialogRef<\r\n MaterialTableFilterDialogComponent,\r\n MaterialTableFilterDialogResult\r\n >\r\n );\r\n\r\n private stTableTranslations = inject(StTablesTranslationsService);\r\n\r\n // Cache translations as computed signal\r\n translations = computed(() => this.stTableTranslations.getTranslations()());\r\n\r\n filterColumns = signal<ViewStMaterialTableColumnModel[]>([]);\r\n allVisible = signal(true);\r\n filtersValue = signal<{ [key: string]: StMaterialTableFilter }>({});\r\n\r\n hasFilterValue(column: ViewStMaterialTableColumnModel): boolean {\r\n const filter = this.filtersValue()[column.field];\r\n console.log(column.field);\r\n console.log(filter?.value);\r\n if (filter?.value === null || filter?.value === undefined || filter?.value === '') return false;\r\n\r\n if (column.filterType === 'date') {\r\n const dateValues = filter.value as [string | null, string | null];\r\n return !!(dateValues?.[0] || dateValues?.[1]);\r\n }\r\n\r\n return !!filter.value;\r\n }\r\n\r\n ngOnInit() {\r\n // Initialize filters for all filterable columns\r\n const initialFilters: { [key: string]: StMaterialTableFilter } = {};\r\n\r\n const columns = this.dialogData.columns\r\n .filter(column => column.filter)\r\n .map(col => {\r\n // Set default filter value based on type\r\n initialFilters[col.field] = {\r\n value: this.getDefaultFilterValue(col.filterType!),\r\n matchMode: MaterialTableFilterDialogComponent.getBaseMatchModeByType(\r\n col.filterType!\r\n ),\r\n };\r\n\r\n return {\r\n ...col,\r\n expanded: true,\r\n };\r\n });\r\n\r\n this.filterColumns.set(columns);\r\n\r\n // Apply initial filter values if provided\r\n if (this.dialogData.initFilters) {\r\n Object.entries(this.dialogData.initFilters).forEach(([key, filter]) => {\r\n if (filter.value !== null && filter.value !== undefined) {\r\n initialFilters[key] = { ...filter };\r\n }\r\n });\r\n }\r\n\r\n this.filtersValue.set(initialFilters);\r\n }\r\n\r\n clearFilter(column: ViewStMaterialTableColumnModel) {\r\n this.filtersValue.update(current => ({\r\n ...current,\r\n [column.field]: {\r\n value: this.getDefaultFilterValue(column.filterType!),\r\n matchMode: current[column.field].matchMode,\r\n },\r\n }));\r\n }\r\n\r\n clearAllFilters() {\r\n this.filterColumns().forEach(column => {\r\n this.clearFilter(column);\r\n });\r\n }\r\n\r\n showAllFilters() {\r\n this.filterColumns.update(columns =>\r\n columns.map(column => ({ ...column, expanded: true }))\r\n );\r\n this.allVisible.set(true);\r\n }\r\n\r\n hideAllFilters() {\r\n this.filterColumns.update(columns =>\r\n columns.map(column => ({ ...column, expanded: false }))\r\n );\r\n this.allVisible.set(false);\r\n }\r\n\r\n saveFilters() {\r\n // Only include filters that have values\r\n const filtersReady = Object.entries(this.filtersValue()).reduce(\r\n (acc, [key, filter]) => {\r\n const hasValue = Array.isArray(filter.value)\r\n ? filter.value.some(v => v !== null && v !== undefined)\r\n : filter.value !== null &&\r\n filter.value !== undefined &&\r\n filter.value !== '';\r\n\r\n if (hasValue) {\r\n acc[key] = filter;\r\n }\r\n return acc;\r\n },\r\n {} as { [key: string]: StMaterialTableFilter }\r\n );\r\n\r\n this.dialogRef.close({ filters: filtersReady });\r\n }\r\n\r\n filterValueChanged(\r\n column: ViewStMaterialTableColumnModel,\r\n newFilter: StMaterialTableFilter\r\n ) {\r\n this.filtersValue.update(current => ({\r\n ...current,\r\n [column.field]: newFilter,\r\n }));\r\n }\r\n\r\n private getDefaultFilterValue(\r\n filterType: StMaterialColumnFilterType\r\n ): StMaterialTableFilterValueType {\r\n switch (filterType) {\r\n case 'date':\r\n return [null, null];\r\n case 'boolean':\r\n case 'number':\r\n return null;\r\n default:\r\n return '';\r\n }\r\n }\r\n\r\n static getBaseMatchModeByType(\r\n filterType: StMaterialColumnFilterType\r\n ): 'contains' | 'equal' | 'between' {\r\n if (filterType === 'date') {\r\n return 'between';\r\n } else if (\r\n filterType === 'number' ||\r\n filterType === 'boolean' ||\r\n filterType === 'custom'\r\n ) {\r\n return 'equal';\r\n } else {\r\n return 'contains';\r\n }\r\n }\r\n}\r\n\r\nexport interface MaterialTableFilterDialogResult {\r\n filters: { [key: string]: StMaterialTableFilter };\r\n}\r\n","<h3 mat-dialog-title class=\"filters-dialog-title\">\r\n {{ translations().filterTitle }}\r\n <div class=\"filters-show-hide\">\r\n @if (!allVisible()) {\r\n <button\r\n type=\"button\"\r\n mat-icon-button\r\n (click)=\"showAllFilters()\"\r\n [matTooltip]=\"translations().expandAllFilters\"\r\n >\r\n <mat-icon>unfold_more</mat-icon>\r\n </button>\r\n }\r\n @if (allVisible()) {\r\n <button\r\n type=\"button\"\r\n mat-icon-button\r\n (click)=\"hideAllFilters()\"\r\n [matTooltip]=\"translations().collapseAllFilters\"\r\n >\r\n <mat-icon>unfold_less</mat-icon>\r\n </button>\r\n }\r\n <button\r\n type=\"button\"\r\n mat-icon-button\r\n (click)=\"clearAllFilters()\"\r\n [matTooltip]=\"translations().clearAllFilters\"\r\n >\r\n <mat-icon>filter_alt_off</mat-icon>\r\n </button>\r\n </div>\r\n</h3>\r\n\r\n<mat-dialog-content>\r\n <hr />\r\n @for (column of filterColumns(); track column.field) {\r\n <div class=\"filter\">\r\n <div class=\"filter-title row justify-content-between\">\r\n <div class=\"row align-items-center\">\r\n <p>\r\n {{ column.header }}\r\n </p>\r\n @if (hasFilterValue(column)) {\r\n <mat-icon\r\n (click)=\"clearFilter(column)\"\r\n class=\"filter-value-clear\"\r\n [matTooltip]=\"translations().clearFilter\"\r\n >filter_alt_off</mat-icon\r\n >\r\n }\r\n </div>\r\n\r\n @if (column.expanded) {\r\n <mat-icon (click)=\"column.expanded = !column.expanded\"\r\n >keyboard_arrow_up</mat-icon\r\n >\r\n } @else {\r\n <mat-icon (click)=\"column.expanded = !column.expanded\"\r\n >keyboard_arrow_down</mat-icon\r\n >\r\n }\r\n </div>\r\n <div class=\"filter-content row\" [ngClass]=\"{ hide: !column.expanded }\">\r\n <ngx-st-material-table-filter\r\n [column]=\"column\"\r\n [filterValue]=\"filtersValue()[column.field]\"\r\n (filterValueChanged)=\"filterValueChanged(column, $event)\"\r\n />\r\n </div>\r\n </div>\r\n }\r\n</mat-dialog-content>\r\n<mat-dialog-actions>\r\n <div class=\"row justify-content-between dialog-actions-wrapper\">\r\n <button type=\"button\" mat-flat-button mat-dialog-close>\r\n {{ translations().cancel }}\r\n </button>\r\n <button\r\n type=\"button\"\r\n mat-flat-button\r\n color=\"accent\"\r\n (click)=\"saveFilters()\"\r\n >\r\n {{ translations().save }}\r\n </button>\r\n </div>\r\n</mat-dialog-actions>\r\n","import {\r\n ChangeDetectionStrategy,\r\n Component,\r\n inject,\r\n signal,\r\n} from '@angular/core';\r\nimport { MAT_DIALOG_DATA, MatDialogRef } from '@angular/material/dialog';\r\nimport { CdkDragDrop, moveItemInArray } from '@angular/cdk/drag-drop';\r\nimport { ViewStMaterialTableColumnModel } from '../../../../models/view/view-st-material-table-column.model';\r\nimport { StTablesTranslationsService } from '../../../../services/st-tables-translations.service';\r\n\r\n@Component({\r\n selector: 'st-material-table-order-column-dialog',\r\n templateUrl: './material-table-order-column-dialog.component.html',\r\n styleUrls: ['./material-table-order-column-dialog.component.scss'],\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n})\r\nexport class MaterialTableOrderColumnDialogComponent {\r\n public dialogData = inject<{\r\n columns: ViewStMaterialTableColumnModel[];\r\n }>(MAT_DIALOG_DATA);\r\n\r\n public dialogRef = inject(\r\n MatDialogRef<\r\n MaterialTableOrderColumnDialogComponent,\r\n MaterialTableOrderColumnDialogResult\r\n >\r\n );\r\n\r\n public stTablesTranslations = inject(StTablesTranslationsService);\r\n\r\n // Use signal for reactive columns array\r\n columns = signal<ViewStMaterialTableColumnModel[]>(\r\n this.dialogData.columns.map(column => ({ ...column }))\r\n );\r\n\r\n drop(event: CdkDragDrop<string[]>) {\r\n this.columns.update(cols => {\r\n const newCols = [...cols];\r\n moveItemInArray(newCols, event.previousIndex, event.currentIndex);\r\n return newCols;\r\n });\r\n }\r\n\r\n saveOrder() {\r\n this.dialogRef.close({\r\n columnsOrder: this.columns().map(column => column.field),\r\n });\r\n }\r\n}\r\n\r\nexport interface MaterialTableOrderColumnDialogResult {\r\n columnsOrder: string[];\r\n}\r\n","<h3 mat-dialog-title>\r\n {{ stTablesTranslations.getTranslations()().reorderColumns }}\r\n</h3>\r\n<mat-dialog-content>\r\n <div\r\n cdkDropList\r\n class=\"reorder-column-list\"\r\n (cdkDropListDropped)=\"drop($event)\"\r\n >\r\n @for (column of columns(); track column.field) {\r\n <div class=\"reorder-column-element\" cdkDrag>\r\n <div class=\"row\">\r\n <mat-icon>drag_indicator</mat-icon>\r\n <p>{{ column.selectColumnLabel || column.header }}</p>\r\n </div>\r\n @if (!column.visible) {\r\n <mat-icon class=\"column-hidden\">visibility_off</mat-icon>\r\n }\r\n </div>\r\n }\r\n </div>\r\n</mat-dialog-content>\r\n<mat-dialog-actions>\r\n <div class=\"row justify-content-between\" style=\"width: 100%\">\r\n <button type=\"button\" mat-flat-button mat-dialog-close>\r\n {{ stTablesTranslations.getTranslations()().close }}\r\n </button>\r\n <button type=\"button\" mat-flat-button color=\"accent\" (click)=\"saveOrder()\">\r\n {{ stTablesTranslations.getTranslations()().save }}\r\n </button>\r\n </div>\r\n</mat-dialog-actions>\r\n","import {\r\n ChangeDetectionStrategy,\r\n Component,\r\n OnInit,\r\n input,\r\n output,\r\n TemplateRef,\r\n signal,\r\n computed,\r\n inject,\r\n} from '@angular/core';\r\nimport { ViewStMaterialTableColumnModel } from '../../../models/view/view-st-material-table-column.model';\r\nimport { FormControl } from '@angular/forms';\r\nimport {\r\n StBaseService,\r\n StSubscribeDestroyComponent,\r\n} from 'ngx-st-base-functions';\r\nimport { debounceTime, filter, take, takeUntil } from 'rxjs/operators';\r\nimport { MatDialog } from '@angular/material/dialog';\r\nimport {\r\n MaterialTableFilterDialogComponent,\r\n MaterialTableFilterDialogResult,\r\n} from './material-table-filter-dialog/material-table-filter-dialog.component';\r\nimport { MaterialTableOrderColumnDialogComponent } from './material-table-order-column-dialog/material-table-order-column-dialog.component';\r\nimport { StTablesTranslationsService } from '../../../services/st-tables-translations.service';\r\nimport {\r\n ICaptionDataChanged,\r\n StMaterialTableFilter,\r\n} from '../../../models/models';\r\n\r\n@Component({\r\n selector: 'st-material-table-caption',\r\n templateUrl: './material-table-caption.component.html',\r\n styleUrls: ['./material-table-caption.component.scss'],\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n})\r\nexport class MaterialTableCaptionComponent\r\n extends StSubscribeDestroyComponent\r\n implements OnInit\r\n{\r\n public stTableTranslations = inject(StTablesTranslationsService);\r\n private dialog = inject(MatDialog);\r\n\r\n showGlobalSearch = input<boolean>();\r\n tableTitle = input('');\r\n allowPickColumns = input<boolean>(true);\r\n allowReorderColumns = input<boolean>(true);\r\n initGlobalSearch = input('');\r\n initFilters = input<{ [key: string]: StMaterialTableFilter }>({});\r\n showCreateButton = input<boolean>(false);\r\n createButtonLabel = input('Create');\r\n createButtonAction = input<(() => void) | undefined>();\r\n allowCreateRow = input<boolean>(false);\r\n disableCreateButton = input<boolean>(false);\r\n creatingRow = input<boolean>(false);\r\n extraCustomFilter = input<TemplateRef<any> | undefined>();\r\n columns = input([], {\r\n transform: (data: ViewStMaterialTableColumnModel[]) => {\r\n this._columns = data ? data : [];\r\n this.updateColumns();\r\n return this._columns;\r\n },\r\n });\r\n\r\n private _columns: ViewStMaterialTableColumnModel[] = [];\r\n\r\n captionDataChanged = output<ICaptionDataChanged>();\r\n resetTableSettings = output<boolean>();\r\n addNewRow = output<boolean>();\r\n\r\n showFilterButton = false;\r\n\r\n selectedColumns = new FormControl(<string[]>[]);\r\n globalSearch = new FormControl('');\r\n\r\n private filtersSignal = signal<{ [key: string]: StMaterialTableFilter }>({});\r\n\r\n // Computed property for active filters count - more efficient than recalculating every time\r\n activeFiltersCount = computed(() => {\r\n const filters = this.filtersSignal();\r\n return Object.keys(filters).filter(key => {\r\n const filterValue = filters[key]?.value;\r\n if (Array.isArray(filterValue)) {\r\n return filterValue.some(value => value !== null && value !== '');\r\n }\r\n return filterValue !== null && filterValue !== '';\r\n }).length;\r\n });\r\n\r\n private columnsOrder: string[] = [];\r\n private get filters() {\r\n return this.filtersSignal();\r\n }\r\n private set filters(value: { [key: string]: StMaterialTableFilter }) {\r\n this.filtersSignal.set(value);\r\n }\r\n\r\n ngOnInit(): void {\r\n this.globalSearch.setValue(this.initGlobalSearch() || '');\r\n this.filters = this.initFilters() || {};\r\n\r\n // Optimized: debounceTime already prevents rapid emissions, no need for distinctUntilChanged\r\n this.selectedColumns.valueChanges\r\n .pipe(takeUntil(this.ngDestroyed$), debounceTime(400))\r\n .subscribe(() => {\r\n this.emitCaptionDataChanged();\r\n });\r\n\r\n this.globalSearch.valueChanges\r\n .pipe(takeUntil(this.ngDestroyed$), debounceTime(400))\r\n .subscribe(() => {\r\n this.emitCaptionDataChanged();\r\n });\r\n }\r\n\r\n openFilterDialog() {\r\n this.dialog\r\n .open(MaterialTableFilterDialogComponent, {\r\n data: {\r\n initFilters: this.filters,\r\n columns: this.columns(),\r\n },\r\n maxWidth: '550px',\r\n width: '100%',\r\n autoFocus: false,\r\n })\r\n .afterClosed()\r\n .pipe(take(1), filter(StBaseService.notNull))\r\n .subscribe((res: MaterialTableFilterDialogResult) => {\r\n this.filters = res.filters;\r\n this.emitCaptionDataChanged();\r\n });\r\n }\r\n\r\n openReorderColumnsDialog() {\r\n this.dialog\r\n .open(MaterialTableOrderColumnDialogComponent, {\r\n data: {\r\n columns: this.columns(),\r\n },\r\n maxWidth: '450px',\r\n width: '100%',\r\n autoFocus: false,\r\n })\r\n .afterClosed()\r\n .pipe(take(1), filter(StBaseService.notNull))\r\n .subscribe((result: { columnsOrder: string[] }) => {\r\n this.columnsOrder = result.columnsOrder;\r\n this.emitCaptionDataChanged();\r\n });\r\n }\r\n\r\n resetTable() {\r\n this.resetTableSettings.emit(true);\r\n }\r\n\r\n createRowClicked() {\r\n if (this.allowCreateRow()) {\r\n this.addNewRow.emit(true);\r\n }\r\n }\r\n\r\n createButtonClicked() {\r\n const action = this.createButtonAction();\r\n if (action) {\r\n action();\r\n }\r\n }\r\n\r\n // clearAllFilters() {\r\n // const filtersKeys = Object.keys(this.filters);\r\n // filtersKeys.forEach(key => {\r\n // if (this.filters[key]) {\r\n // this.filters[key] = '';\r\n // }\r\n // });\r\n //\r\n // this.setActiveFiltersCount();\r\n // this.emitCaptionDataChanged();\r\n // }\r\n\r\n private emitCaptionDataChanged() {\r\n this.captionDataChanged.emit({\r\n selectedColumns: this.selectedColumns.value || [],\r\n globalSearch: this.globalSearch.value || '',\r\n columnsOrder: this.columnsOrder || [],\r\n filters: this.filters,\r\n });\r\n }\r\n\r\n private updateColumns() {\r\n const columnsFilters = this._columns.filter(column => column.filter);\r\n this.showFilterButton = columnsFilters.length > 0;\r\n this.selectedColumns.setValue(\r\n this._columns.filter(col => col.visible).map(col => col.field) || []\r\n );\r\n this.columnsOrder = this._columns.map(col => col.field) || [];\r\n }\r\n}\r\n","@if (\r\n allowPickColumns() ||\r\n tableTitle() ||\r\n allowReorderColumns() ||\r\n showGlobalSearch() ||\r\n showFilterButton ||\r\n showCreateButton()\r\n) {\r\n <div\r\n class=\"st-material-table-caption row align-items-center\"\r\n [ngClass]=\"{\r\n 'justify-content-between':\r\n (allowPickColumns() || tableTitle() || allowReorderColumns()) &&\r\n (showGlobalSearch() ||\r\n showFilterButton ||\r\n showCreateButton() ||\r\n extraCustomFilter()),\r\n 'justify-content-end':\r\n !allowPickColumns() && !tableTitle() && !allowReorderColumns()\r\n }\"\r\n >\r\n @if (allowPickColumns() || tableTitle() || allowReorderColumns()) {\r\n <div class=\"col-auto d-flex align-items-center\">\r\n @if (tableTitle()) {\r\n <p class=\"table-title\">{{ tableTitle() }}</p>\r\n }\r\n\r\n @if (allowPickColumns()) {\r\n <mat-form-field appearance=\"outline\" class=\"caption-select-columns\">\r\n <mat-select [formControl]=\"selectedColumns\" multiple>\r\n <mat-select-trigger>\r\n {{ selectedColumns.value ? selectedColumns.value!.length : 0 }}\r\n columns selected\r\n </mat-select-trigger>\r\n @for (column of columns(); track column.field) {\r\n <mat-option\r\n [value]=\"column.field\"\r\n [disabled]=\"column.type === 'actions'\"\r\n style=\"text-transform: capitalize\"\r\n >{{\r\n column.selectColumnLabel || column.header || column.field\r\n }}</mat-option\r\n >\r\n }\r\n </mat-select>\r\n </mat-form-field>\r\n }\r\n\r\n @if (allowPickColumns() || tableTitle()) {\r\n <button\r\n type=\"button\"\r\n mat-icon-button\r\n (click)=\"resetTable()\"\r\n [matTooltip]=\"\r\n stTableTranslations.getTranslations()().resetTableSettings\r\n \"\r\n >\r\n <mat-icon class=\"reorder-icon\">refresh</mat-icon>\r\n </button>\r\n }\r\n\r\n @if (allowReorderColumns()) {\r\n <button\r\n type=\"button\"\r\n mat-icon-button\r\n (click)=\"openReorderColumnsDialog()\"\r\n >\r\n <mat-icon class=\"reorder-icon\">low_priority</mat-icon>\r\n </button>\r\n }\r\n </div>\r\n }\r\n\r\n @if (\r\n showGlobalSearch() ||\r\n showFilterButton ||\r\n showCreateButton() ||\r\n extraCustomFilter()\r\n ) {\r\n <div class=\"col-auto d-flex align-items-center gap-1\">\r\n @if (extraCustomFilter()) {\r\n <ng-container\r\n [ngTemplateOutlet]=\"extraCustomFilter()!\"\r\n ></ng-container>\r\n }\r\n\r\n @if (showFilterButton) {\r\n <!-- @if (activeFiltersCount) {-->\r\n <!-- <button-->\r\n <!-- mat-icon-button-->\r\n <!-- (click)=\"clearAllFilters()\"-->\r\n <!-- [matTooltip]=\"'Clear Filters'\"-->\r\n <!-- >-->\r\n <!-- <mat-icon>filter_alt_off</mat-icon>-->\r\n <!-- </button>-->\r\n <!-- }-->\r\n\r\n <button type=\"button\" mat-icon-button (click)=\"openFilterDialog()\">\r\n <mat-icon\r\n [matBadge]=\"activeFiltersCount()\"\r\n [matBadgeHidden]=\"!activeFiltersCount()\"\r\n [matBadgeSize]=\"'small'\"\r\n matBadgePosition=\"before\"\r\n >filter_alt</mat-icon\r\n >\r\n </button>\r\n }\r\n\r\n @if (showGlobalSearch()) {\r\n <mat-form-field appearance=\"outline\" class=\"search-field\">\r\n <input\r\n matInput\r\n [formControl]=\"globalSearch\"\r\n [placeholder]=\"\r\n stTableTranslations.getTranslations()().globalSearch\r\n \"\r\n />\r\n <button\r\n type=\"button\"\r\n matSuffix\r\n mat-icon-button\r\n aria-label=\"Clear\"\r\n (click)=\"globalSearch.setValue('')\"\r\n >\r\n <mat-icon>close</mat-icon>\r\n </button>\r\n </mat-form-field>\r\n }\r\n\r\n @if (allowCreateRow()) {\r\n <button\r\n type=\"button\"\r\n color=\"primary\"\r\n mat-icon-button\r\n [disabled]=\"disableCreateButton() || creatingRow()\"\r\n (click)=\"createRowClicked()\"\r\n >\r\n <mat-icon>add</mat-icon>\r\n </button>\r\n }\r\n\r\n @if (showCreateButton()) {\r\n <button\r\n type=\"button\"\r\n color=\"primary\"\r\n mat-flat-button\r\n [disabled]=\"disableCreateButton() || creatingRow()\"\r\n (click)=\"createButtonClicked()\"\r\n >\r\n {{ createButtonLabel() }}\r\n </button>\r\n }\r\n </div>\r\n }\r\n </div>\r\n}\r\n","import {\r\n ChangeDetectionStrategy,\r\n Component,\r\n input,\r\n output,\r\n} from '@angular/core';\r\nimport { StTablesTranslationsService } from '../../../services/st-tables-translations.service';\r\n\r\n@Component({\r\n selector: 'st-material-table-selected-rows',\r\n templateUrl: './material-table-selected-rows.component.html',\r\n styleUrls: ['./material-table-selected-rows.component.scss'],\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n})\r\nexport class MaterialTableSelectedRowsComponent {\r\n allowSelectRow = input.required<boolean>();\r\n selectRowOnlyOne = input.required<boolean>();\r\n selectedRows = input.required<any[]>();\r\n selectionFieldLabel = input.required<string>();\r\n selectRowValueDisplay = input<(row: any) => string>();\r\n\r\n removeSelectedRow = output<any>();\r\n\r\n constructor(public stTableTranslations: StTablesTranslationsService) {}\r\n\r\n onRemoveSelectedRow(event: any, row: any): void {\r\n if (!this.selectRowOnlyOne() && this.selectedRows().length > 1) {\r\n event.stopPropagation();\r\n }\r\n\r\n this.removeSelectedRow.emit(row);\r\n }\r\n}\r\n","@if (allowSelectRow()) {\r\n <div class=\"st-material-table-selected-rows\">\r\n @if (!selectRowOnlyOne()) {\r\n <button type=\"button\" mat-stroked-button [matMenuTriggerFor]=\"menu\">\r\n {{ selectedRows().length }}\r\n {{ stTableTranslations.getTranslations()().rowSelected }}\r\n </button>\r\n <mat-menu #menu=\"matMenu\">\r\n @for (row of selectedRows(); track row.id) {\r\n <button\r\n type=\"button\"\r\n mat-menu-item\r\n [disabled]=\"selectedRows().length <= 0\"\r\n (click)=\"onRemoveSelectedRow($event, row)\"\r\n >\r\n <ng-container\r\n [ngTemplateOutlet]=\"selectedFieldLabel\"\r\n [ngTemplateOutletContext]=\"{ $implicit: row }\"\r\n />\r\n <mat-icon class=\"delete-icon\">delete</mat-icon>\r\n </button>\r\n }\r\n </mat-menu>\r\n } @else {\r\n @if (selectedRows().length > 0) {\r\n <mat-chip>\r\n <ng-container\r\n [ngTemplateOutlet]=\"selectedFieldLabel\"\r\n [ngTemplateOutletContext]=\"{ $implicit: selectedRows()[0] }\"\r\n />\r\n <button\r\n matChipRemove\r\n type=\"button\"\r\n aria-label=\"Remove selected item\"\r\n (click)=\"onRemoveSelectedRow($event, selectedRows()[0])\"\r\n >\r\n <mat-icon>cancel</mat-icon>\r\n </button>\r\n </mat-chip>\r\n }\r\n }\r\n </div>\r\n}\r\n\r\n<ng-template #selectedFieldLabel let-row>\r\n @if (selectRowValueDisplay()) {\r\n {{ selectRowValueDisplay()!(row) }}\r\n } @else {\r\n {{ row[selectionFieldLabel()] }}\r\n }\r\n</ng-template>\r\n","import { Pipe, PipeTransform } from '@angular/core';\r\n\r\n@Pipe({\r\n name: 'stDateWithoutTimezoneFormatPipe',\r\n})\r\nexport class DateWithoutTimezoneFormatPipe implements PipeTransform {\r\n constructor() {}\r\n\r\n transform(value: string | Date | undefined | null): string {\r\n if (value) {\r\n let day: number, month: number, year: number;\r\n\r\n if (value instanceof Date) {\r\n day = value.getDate();\r\n month = value.getMonth() + 1;\r\n year = value.getFullYear();\r\n } else {\r\n // Parse date string to extract date components (ignore timezone)\r\n const dateMatch = value.match(/^(\\d{4})-(\\d{2})-(\\d{2})/);\r\n if (dateMatch) {\r\n year = parseInt(dateMatch[1], 10);\r\n month = parseInt(dateMatch[2], 10);\r\n day = parseInt(dateMatch[3], 10);\r\n } else {\r\n // Fallback for other formats\r\n const date = new Date(value);\r\n day = date.getDate();\r\n month = date.getMonth() + 1;\r\n year = date.getFullYear();\r\n }\r\n }\r\n\r\n // Create local date with extracted components (no timezone conversion)\r\n const localDate = new Date(year, month - 1, day);\r\n return localDate.toLocaleDateString();\r\n } else {\r\n return '';\r\n }\r\n }\r\n}\r\n","import {\r\n ChangeDetectionStrategy,\r\n ChangeDetectorRef,\r\n Component,\r\n OnDestroy,\r\n input,\r\n output,\r\n signal,\r\n ViewChild,\r\n AfterViewInit,\r\n computed,\r\n effect,\r\n} from '@angular/core';\r\nimport { StMaterialTableColumnModel } from '../../../models/st-material-table-column.model';\r\nimport { MatInput } from '@angular/material/input';\r\nimport { MatSelect } from '@angular/material/select';\r\n\r\n@Component({\r\n selector: 'st-material-table-row-cell',\r\n templateUrl: './material-table-row-cell.component.html',\r\n styleUrls: ['./material-table-row-cell.component.scss'],\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n})\r\nexport class MaterialTableRowCellComponent implements AfterViewInit {\r\n @ViewChild(MatInput) matInput?: MatInput;\r\n @ViewChild(MatSelect) matSelect?: MatSelect;\r\n\r\n column = input.required<StMaterialTableColumnModel>();\r\n rowData = input.required<{ [prop: string]: any }>();\r\n rowIndex = input.required<number>();\r\n rowDataCopy = input<{ [prop: string]: any }>();\r\n canEditRowValidator = input<(row: any) => boolean>(() => true);\r\n canDeleteRowValidator = input<(row: any) => boolean>(() => true);\r\n selectRowOnlyOne = input<boolean>(false);\r\n isFirstEditableColumn = input<boolean>(false);\r\n autoSaveOnChange = input<boolean>(false);\r\n rowIsSelected = input<boolean>(false);\r\n rowIsExpanded = input<boolean>(false);\r\n rowEditing = input<boolean>(false);\r\n allowEditRow = input<boolean>(false);\r\n allowDeleteInEditRow = input<boolean>(true);\r\n allowEditInEditRow = input<boolean>(true);\r\n fieldError = input<string | undefined>(undefined);\r\n mobileView = input(false);\r\n\r\n saveEditRowEmitter = output<void>();\r\n cancelEditRowEmitter = output<void>();\r\n editRowEmitter = output<void>();\r\n deleteRowEmitter = output<void>();\r\n selectRowChange = output<boolean>();\r\n fieldValueChanged = output<{ field: string; value: any }>();\r\n\r\n // Computed for action icon colors\r\n actionIconColorDef: { [key: string]: 'primary' | 'warn' } = {\r\n edit: 'primary',\r\n delete: 'warn',\r\n };\r\n\r\n dynamicSelectOptions = signal<{ value: any; label: string }[]>([]);\r\n\r\n // Use computed to determine if dynamic select data needs to be loaded\r\n private needsDynamicSelect = computed(() => {\r\n const col = this.column();\r\n return (\r\n col?.allowEditColumn &&\r\n col?.rowEditType === 'custom-dynamic-select' &&\r\n !!col?.dynamicRowEditOptions\r\n );\r\n });\r\n\r\n private previousRowEditing = false;\r\n\r\n constructor(private changeDetectorRef: ChangeDetectorRef) {\r\n // Effect to handle rowEditing changes\r\n effect(() => {\r\n const isEditing = this.rowEditing();\r\n const wasNotEditing = !this.previousRowEditing;\r\n this.previousRowEditing = isEditing;\r\n\r\n if (isEditing) {\r\n this.getDynamicSelectData();\r\n\r\n // Focus first editable field when entering edit mode\r\n if (wasNotEditing && this.isFirstEditableColumn()) {\r\n this.focusFirstEditableField();\r\n }\r\n }\r\n }, {allowSignalWrites: true});\r\n }\r\n\r\n ngAfterViewInit() {\r\n // If row is already in edit mode on init (e.g., newly added row), focus the field\r\n if (this.rowEditing() && this.isFirstEditableColumn()) {\r\n this.focusFirstEditableField();\r\n }\r\n }\r\n\r\n private focusFirstEditableField() {\r\n // Use setTimeout to ensure the view is fully rendered\r\n setTimeout(() => {\r\n if (this.matInput) {\r\n // Focus MatInput\r\n this.matInput.focus();\r\n } else if (this.matSelect) {\r\n // Open MatSelect dropdown\r\n this.matSelect.focus();\r\n this.matSelect.open();\r\n }\r\n }, 150);\r\n }\r\n\r\n saveRow() {\r\n this.saveEditRowEmitter.emit();\r\n }\r\n\r\n cancelRow() {\r\n this.cancelEditRowEmitter.emit();\r\n }\r\n\r\n editRow() {\r\n this.editRowEmitter.emit();\r\n }\r\n\r\n deleteRow() {\r\n this.deleteRowEmitter.emit();\r\n }\r\n\r\n selectRow(event: { checked: boolean }) {\r\n if (event) {\r\n this.selectRowChange.emit(event.checked);\r\n }\r\n }\r\n\r\n onFieldChange(field: string, value: any) {\r\n if (this.autoSaveOnChange()) {\r\n this.fieldValueChanged.emit({ field, value });\r\n }\r\n }\r\n\r\n onNumberFieldChange(field: string, value: string) {\r\n const numValue = value === '' || value === null ? null : Number(value);\r\n const targetData = this.autoSaveOnChange()\r\n ? this.rowData()\r\n : this.rowDataCopy();\r\n\r\n if (targetData) {\r\n targetData[field] = numValue;\r\n }\r\n\r\n if (this.autoSaveOnChange()) {\r\n this.fieldValueChanged.emit({ field, value: numValue });\r\n }\r\n }\r\n\r\n // Getter method for ngModel binding - Angular 18 doesn't support ternary in two-way binding\r\n getFieldValue(field: string): any {\r\n return this.autoSaveOnChange()\r\n ? this.rowData()[field]\r\n : this.rowDataCopy()![field];\r\n }\r\n\r\n // Setter method for ngModel binding\r\n setFieldValue(field: string, value: any): void {\r\n const targetData = this.autoSaveOnChange()\r\n ? this.rowData()\r\n : this.rowDataCopy();\r\n\r\n if (targetData) {\r\n targetData[field] = value;\r\n }\r\n }\r\n\r\n private getDynamicSelectData() {\r\n if (this.needsDynamicSelect()) {\r\n this.dynamicSelectOptions.set(\r\n this.column().dynamicRowEditOptions!(this.rowData())\r\n );\r\n }\r\n }\r\n\r\n // Public method to manually trigger change detection\r\n public triggerChangeDetection(): void {\r\n this.changeDetectorRef.detectChanges();\r\n }\r\n}\r\n","@switch (column().type || 'string') {\r\n @case ('custom-template') {\r\n @if (rowEditing() && column().allowEditColumn) {\r\n <ng-container\r\n *ngTemplateOutlet=\"baseFieldCell; context: { $implicit: column() }\"\r\n ></ng-container>\r\n } @else {\r\n <ng-container\r\n [ngTemplateOutlet]=\"column().customTemplate!\"\r\n [ngTemplateOutletContext]=\"{ data: rowData(), rowIndex: rowIndex() }\"\r\n ></ng-container>\r\n }\r\n }\r\n\r\n @case ('actions') {\r\n @if (column().actions) {\r\n @if (\r\n (!column().actionsInMenu && !mobileView()) ||\r\n (mobileView() && column().actions!.length <= 1)\r\n ) {\r\n <div [ngStyle]=\"{ float: column().flexRight ? 'right' : 'none' }\">\r\n @for (action of column().actions; track action.iconName) {\r\n @if ((action.show && action.show(rowData())) || !action.show) {\r\n @if (!action.url && action.action) {\r\n <button\r\n class=\"action-icon-button\"\r\n type=\"button\"\r\n mat-icon-button\r\n [color]=\"\r\n actionIconColorDef[action.iconName]\r\n ? actionIconColorDef[action.iconName]\r\n : action.iconColor\r\n \"\r\n [matTooltip]=\"action.tooltipName || ''\"\r\n [matTooltipDisabled]=\"!action.tooltipName\"\r\n [disabled]=\"action.disabled ? action.disabled(rowData()) : false\"\r\n (click)=\"\r\n $event.stopPropagation();\r\n action.action!(rowData(), rowIndex())\r\n \"\r\n >\r\n <mat-icon>{{ action.iconName }}</mat-icon>\r\n </button>\r\n }\r\n @if (action.url) {\r\n <a [routerLink]=\"(action.disabled && action.disabled(rowData())) ? null : action.url\"\r\n [class.disabled-link]=\"action.disabled && action.disabled(rowData())\">\r\n <button\r\n class=\"action-icon-button\"\r\n type=\"button\"\r\n mat-icon-button\r\n [color]=\"\r\n actionIconColorDef[action.iconName]\r\n ? actionIconColorDef[action.iconName]\r\n : action.iconColor\r\n \"\r\n [matTooltip]=\"action.tooltipName || ''\"\r\n [matTooltipDisabled]=\"!action.tooltipName\"\r\n [disabled]=\"action.disabled ? action.disabled(rowData()) : false\"\r\n >\r\n <mat-icon>{{ action.iconName }}</mat-icon>\r\n </button>\r\n </a>\r\n }\r\n }\r\n }\r\n </div>\r\n }\r\n @if (\r\n column().actionsInMenu || (mobileView() && column().actions!.length > 1)\r\n ) {\r\n <button\r\n type=\"button\"\r\n mat-icon-button\r\n [matMenuTriggerFor]=\"menu\"\r\n (click)=\"$event.stopPropagation()\"\r\n >\r\n <mat-icon>more_vert</mat-icon>\r\n </button>\r\n <mat-menu #menu=\"matMenu\">\r\n @for (action of column().actions; track action.iconName) {\r\n @if ((action.show && action.show(rowData())) || !action.show) {\r\n @if (!action.url && action.action) {\r\n <button\r\n type=\"button\"\r\n mat-menu-item\r\n (click)=\"$event.stopPropagation(); action.action!(rowData())\"\r\n >\r\n {{ action.tooltipName }}\r\n </button>\r\n }\r\n @if (action.url) {\r\n <a [routerLink]=\"action.url\">\r\n <button type=\"button\" mat-menu-item>\r\n {{ action.tooltipName }}\r\n </button>\r\n </a>\r\n }\r\n }\r\n }\r\n </mat-menu>\r\n }\r\n }\r\n }\r\n\r\n @case ('string') {\r\n <ng-container\r\n *ngTemplateOutlet=\"baseFieldCell; context: { $implicit: column() }\"\r\n ></ng-container>\r\n }\r\n\r\n @case ('number') {\r\n <ng-container\r\n *ngTemplateOutlet=\"baseFieldCell; context: { $implicit: column() }\"\r\n ></ng-container>\r\n }\r\n\r\n @case ('boolean') {\r\n <ng-container\r\n *ngTemplateOutlet=\"baseFieldCell; context: { $implicit: column() }\"\r\n ></ng-container>\r\n }\r\n\r\n @case ('date') {\r\n @if (rowEditing() && column().allowEditColumn) {\r\n <ng-container\r\n *ngTemplateOutlet=\"baseFieldCell; context: { $implicit: column() }\"\r\n ></ng-container>\r\n } @else {\r\n {{ rowData()[column().field] | stDateFormatPipe }}\r\n }\r\n }\r\n\r\n @case ('date-without-timezone') {\r\n @if (rowEditing() && column().allowEditColumn) {\r\n <ng-container\r\n *ngTemplateOutlet=\"baseFieldCell; context: { $implicit: column() }\"\r\n ></ng-container>\r\n } @else {\r\n {{ rowData()[column().field] | stDateWithoutTimezoneFormatPipe }}\r\n }\r\n }\r\n\r\n @case ('actions-row-editing') {\r\n <div class=\"row justify-content-end\">\r\n @if (rowEditing()) {\r\n <button\r\n type=\"button\"\r\n mat-icon-button\r\n color=\"accent\"\r\n (click)=\"$event.stopPropagation(); saveRow()\"\r\n [matTooltip]=\"'Save row'\"\r\n >\r\n <mat-icon>done</mat-icon>\r\n </button>\r\n <button\r\n type=\"button\"\r\n mat-icon-button\r\n color=\"warn\"\r\n (click)=\"$event.stopPropagation(); cancelRow()\"\r\n [matTooltip]=\"'Cancel row'\"\r\n >\r\n <mat-icon>close</mat-icon>\r\n </button>\r\n } @else {\r\n\r\n @if (allowEditInEditRow()) {\r\n <button\r\n type=\"button\"\r\n mat-icon-button\r\n color=\"primary\"\r\n (click)=\"$event.stopPropagation(); editRow()\"\r\n [matTooltip]=\"'Edit row'\"\r\n [disabled]=\"\r\n canEditRowValidator() ? !canEditRowValidator()(rowData()) : false\r\n \"\r\n >\r\n <mat-icon>edit</mat-icon>\r\n </button>\r\n }\r\n\r\n @if (allowDeleteInEditRow()) {\r\n <button\r\n type=\"button\"\r\n mat-icon-button\r\n color=\"warn\"\r\n (click)=\"$event.stopPropagation(); deleteRow()\"\r\n [matTooltip]=\"'Delete row'\"\r\n [disabled]=\"\r\n canDeleteRowValidator()\r\n ? !canDeleteRowValidator()(rowData())\r\n : false\r\n \"\r\n >\r\n <mat-icon>delete</mat-icon>\r\n </button>\r\n }\r\n }\r\n </div>\r\n }\r\n\r\n @case ('actions-row-selecting') {\r\n <!-- @if (selectRowOnlyOne()) {-->\r\n <!-- <mat-radio-button-->\r\n <!-- color=\"primary\"-->\r\n <!-- (click)=\"$event.stopPropagation()\"-->\r\n <!-- (change)=\"selectRow({ checked: true })\"-->\r\n <!-- [checked]=\"rowIsSelected()\"-->\r\n <!-- ></mat-radio-button>-->\r\n <!-- } @else {-->\r\n <mat-checkbox\r\n color=\"primary\"\r\n (click)=\"$event.stopPropagation()\"\r\n (change)=\"selectRow($event)\"\r\n [checked]=\"rowIsSelected()\"\r\n ></mat-checkbox>\r\n <!-- }-->\r\n }\r\n\r\n @case ('actions-row-extending') {\r\n @if (rowIsExpanded()) {\r\n <mat-icon>keyboard_arrow_up</mat-icon>\r\n } @else {\r\n <mat-icon>keyboard_arrow_down</mat-icon>\r\n }\r\n }\r\n}\r\n\r\n<ng-template #baseFieldCell let-column>\r\n @if (allowEditRow() && (rowEditing() || autoSaveOnChange()) && column.allowEditColumn) {\r\n @if (column.rowEditType === 'string') {\r\n <mat-form-field\r\n appearance=\"outline\"\r\n [ngStyle]=\"{ width: column.width || 'auto' }\"\r\n [class.field-error]=\"fieldError()\"\r\n >\r\n <input\r\n matInput\r\n type=\"text\"\r\n [ngModel]=\"getFieldValue(column.field)\"\r\n (ngModelChange)=\"\r\n setFieldValue(column.field, $event);\r\n autoSaveOnChange() && onFieldChange(column.field, $event)\r\n \"\r\n (keydown.enter)=\"!autoSaveOnChange() && saveRow()\"\r\n [required]=\"column.editColumnRequired\"\r\n [disabled]=\"\r\n column.disableEdit ? column.disableEdit(rowData()) : false\r\n \"\r\n (click)=\"$event.stopPropagation()\"\r\n />\r\n </mat-form-field>\r\n }\r\n @if (column.rowEditType === 'number') {\r\n <mat-form-field\r\n appearance=\"outline\"\r\n [ngStyle]=\"{ width: column.width || 'auto' }\"\r\n [class.field-error]=\"fieldError()\"\r\n >\r\n <input\r\n matInput\r\n type=\"number\"\r\n [ngModel]=\"getFieldValue(column.field)\"\r\n (ngModelChange)=\"onNumberFieldChange(column.field, $event)\"\r\n (keydown.enter)=\"!autoSaveOnChange() && saveRow()\"\r\n [required]=\"column.editColumnRequired\"\r\n (click)=\"$event.stopPropagation()\"\r\n [disabled]=\"\r\n column.disableEdit ? column.disableEdit(rowData()) : false\r\n \"\r\n />\r\n </mat-form-field>\r\n }\r\n @if (column.rowEditType === 'date') {\r\n <mat-form-field\r\n appearance=\"outline\"\r\n [ngStyle]=\"{ width: column.width || 'auto' }\"\r\n [class.field-error]=\"fieldError()\"\r\n >\r\n <input\r\n matInput\r\n [matDatepicker]=\"picker1\"\r\n [ngModel]=\"getFieldValue(column.field)\"\r\n (ngModelChange)=\"\r\n setFieldValue(column.field, $event);\r\n autoSaveOnChange() && onFieldChange(column.field, $event)\r\n \"\r\n (keydown.enter)=\"!autoSaveOnChange() && saveRow()\"\r\n [required]=\"column.editColumnRequired\"\r\n (click)=\"$event.stopPropagation()\"\r\n [disabled]=\"\r\n column.disableEdit ? column.disableEdit(rowData()) : false\r\n \"\r\n />\r\n <mat-datepicker-toggle\r\n matIconSuffix\r\n [for]=\"picker1\"\r\n ></mat-datepicker-toggle>\r\n <mat-datepicker #picker1></mat-datepicker>\r\n </mat-form-field>\r\n }\r\n @if (column.rowEditType === 'boolean') {\r\n <mat-checkbox\r\n [ngModel]=\"getFieldValue(column.field)\"\r\n (ngModelChange)=\"\r\n setFieldValue(column.field, $event);\r\n autoSaveOnChange() && onFieldChange(column.field, $event)\r\n \"\r\n (click)=\"$event.stopPropagation()\"\r\n [disabled]=\"column.disableEdit ? column.disableEdit(rowData()) : false\"\r\n ></mat-checkbox>\r\n }\r\n\r\n @if (column.rowEditType === 'custom') {\r\n <mat-form-field\r\n appearance=\"outline\"\r\n [ngStyle]=\"{ width: column.width || 'auto' }\"\r\n [class.field-error]=\"fieldError()\"\r\n >\r\n <mat-select\r\n [ngModel]=\"getFieldValue(column.field)\"\r\n (ngModelChange)=\"\r\n setFieldValue(column.field, $event);\r\n autoSaveOnChange() && onFieldChange(column.field, $event)\r\n \"\r\n [required]=\"column.editColumnRequired\"\r\n (click)=\"$event.stopPropagation()\"\r\n [disabled]=\"\r\n column.disableEdit ? column.disableEdit(rowData()) : false\r\n \"\r\n >\r\n<!-- <mat-option value=\"\"></mat-option>-->\r\n @for (option of column.customRowEditOptions; track option) {\r\n <mat-option [value]=\"option.value\">\r\n {{ option.label }}\r\n </mat-option>\r\n }\r\n </mat-select>\r\n </mat-form-field>\r\n }\r\n\r\n @if (column.rowEditType === 'number-qty-input') {\r\n <ngx-st-qty-input\r\n appearance=\"outline\"\r\n [qtyModel]=\"getFieldValue(column.field)\"\r\n [error]=\"!!fieldError()\"\r\n (newValueEmitter)=\"setFieldValue(column.field, $event);\r\n autoSaveOnChange() && onFieldChange(column.field, $event)\"\r\n ></ngx-st-qty-input>\r\n }\r\n\r\n @if (column.rowEditType === 'custom-dynamic-select') {\r\n <mat-form-field\r\n appearance=\"outline\"\r\n [ngStyle]=\"{ width: column.width || 'auto' }\"\r\n [class.field-error]=\"fieldError()\"\r\n >\r\n <mat-select\r\n [ngModel]=\"getFieldValue(column.field)\"\r\n (ngModelChange)=\"\r\n setFieldValue(column.field, $event);\r\n autoSaveOnChange() && onFieldChange(column.field, $event)\r\n \"\r\n [required]=\"column.editColumnRequired\"\r\n (click)=\"$event.stopPropagation()\"\r\n [disabled]=\"\r\n column.disableEdit ? column.disableEdit(rowData()) : false\r\n \"\r\n >\r\n @if (!column.editColumnRequired) {\r\n <mat-option value=\"\"></mat-option>\r\n }\r\n\r\n @for (option of dynamicSelectOptions(); track option) {\r\n <mat-option [value]=\"option.value\">\r\n {{ option.label }}\r\n </mat-option>\r\n }\r\n </mat-select>\r\n </mat-form-field>\r\n }\r\n } @else {\r\n <div>\r\n @if (column.translateValue) {\r\n {{ column.translateValue![rowData()[column.field]] || '' }}\r\n }\r\n @if (column.customValueDisplay) {\r\n {{ column.customValueDisplay(rowData()[column.field]) }}\r\n }\r\n @if (!column.translateValue && !column.customValueDisplay) {\r\n {{ rowData()[column.field] }}\r\n }\r\n </div>\r\n }\r\n</ng-template>\r\n","import {\r\n AfterViewInit,\r\n ChangeDetectionStrategy,\r\n ChangeDetectorRef,\r\n Component,\r\n OnInit,\r\n ViewChild,\r\n ViewChildren,\r\n QueryList,\r\n ViewEncapsulation,\r\n input,\r\n output,\r\n TemplateRef,\r\n signal,\r\n computed,\r\n effect,\r\n OnDestroy,\r\n} from '@angular/core';\r\nimport { MatPaginator } from '@angular/material/paginator';\r\nimport { MatSort, SortDirection } from '@angular/material/sort';\r\nimport { MatTableDataSource } from '@angular/material/table';\r\nimport { StMaterialTableColumnModel } from '../../models/st-material-table-column.model';\r\nimport { ViewStMaterialTableColumnModel } from '../../models/view/view-st-material-table-column.model';\r\nimport { distinctUntilChanged, filter, takeUntil } from 'rxjs/operators';\r\nimport {\r\n StBaseService,\r\n StSubscribeDestroyComponent,\r\n} from 'ngx-st-base-functions';\r\nimport { StSnackBarService } from 'ngx-st-snack-bar';\r\nimport { StTablesTranslationsService } from '../../services/st-tables-translations.service';\r\nimport { MaterialTableFilterDialogComponent } from './material-table-caption/material-table-filter-dialog/material-table-filter-dialog.component';\r\nimport {\r\n ICaptionDataChanged,\r\n StMaterialTableFilter,\r\n StMaterialTableFilterValueType,\r\n} from '../../models/models';\r\nimport {\r\n animate,\r\n state,\r\n style,\r\n transition,\r\n trigger,\r\n} from '@angular/animations';\r\nimport { StDialogService } from 'ngx-st-dialog';\r\nimport { MaterialTableRowCellComponent } from './material-table-row-cell/material-table-row-cell.component';\r\n\r\n@Component({\r\n selector: 'ngx-st-material-table',\r\n templateUrl: './material-table.component.html',\r\n styleUrls: [\r\n './material-table.component.scss',\r\n '../../../../assets/base-table.scss',\r\n ],\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n encapsulation: ViewEncapsulation.None,\r\n animations: [\r\n trigger('detailExpand', [\r\n state(\r\n 'collapsed,void',\r\n style({ height: '0px', minHeight: '0', border: 'none' })\r\n ),\r\n state('expanded', style({ height: '*' })),\r\n transition(\r\n 'expanded <=> collapsed',\r\n animate('225ms cubic-bezier(0.4, 0.0, 0.2, 1)')\r\n ),\r\n ]),\r\n ],\r\n})\r\nexport class MaterialTableComponent\r\n extends StSubscribeDestroyComponent\r\n implements OnInit, AfterViewInit, OnDestroy\r\n{\r\n @ViewChild(MatPaginator) paginator: MatPaginator;\r\n @ViewChild(MatSort) sort: MatSort;\r\n @ViewChildren(MaterialTableRowCellComponent)\r\n rowCells!: QueryList<MaterialTableRowCellComponent>;\r\n\r\n showGlobalSearch = input(false);\r\n\r\n tableTitle = input('');\r\n\r\n pageSize = input<number>(10);\r\n\r\n dataLength = input<number>(0);\r\n\r\n allowPickColumns = input<boolean>(false);\r\n\r\n allowReorderColumns = input<boolean>(false);\r\n\r\n localStorageName = input<string>('');\r\n\r\n lazyLoading = input<boolean>(false);\r\n\r\n isLoading = input<boolean>(false);\r\n\r\n initColumns = input<StMaterialTableColumnModel[]>([]);\r\n\r\n rowClickAction = input<(row: any) => void>();\r\n\r\n allowEditRow = input<boolean>(false);\r\n\r\n allowDeleteInEditRow = input<boolean>(true);\r\n\r\n allowEditInEditRow = input<boolean>(true);\r\n\r\n showEditAllRows = input<boolean>(false);\r\n\r\n /**\r\n * When true, field changes are saved immediately without requiring save/cancel buttons.\r\n * Perfect for quantity inputs, toggles, or selection tables where instant updates are needed.\r\n */\r\n autoSaveOnChange = input<boolean>(false);\r\n\r\n canEditRowValidator = input<(row: any) => boolean>(() => true);\r\n\r\n canDeleteRowValidator = input<(row: any) => boolean>(() => true);\r\n\r\n allowSelectRow = input(false);\r\n\r\n selectionFieldLabel = input('');\r\n\r\n selectRowOnlyOne = input<boolean>(false);\r\n\r\n /**\r\n * Optional formatter used to derive the display value for a selected row.\r\n *\r\n * Use this when the simple field name provided by {@link selectionFieldLabel}\r\n * is not sufficient (for example, when you need to concatenate multiple fields\r\n * or apply custom formatting to the displayed value).\r\n *\r\n * If both {@link selectionFieldLabel} and `selectRowValueDisplay` are set,\r\n * this function takes precedence and is used to compute the visible text\r\n * representing the selected row.\r\n */\r\n selectRowValueDisplay = input<(row: any) => string>();\r\n\r\n showCreateButton = input<boolean>(false);\r\n\r\n createButtonLabel = input('Create');\r\n\r\n createButtonAction = input<() => void>(() => {});\r\n\r\n disableCreateButton = input<boolean>(false);\r\n\r\n allowCreateRow = input<boolean>(false);\r\n\r\n allowExtendRow = input<boolean>(false);\r\n\r\n extendedRowTemplate = input<TemplateRef<{ data: any; rowIndex: number }>>();\r\n\r\n initSelectedRow = input<any>();\r\n\r\n extraCustomFilter = input<TemplateRef<any>>();\r\n\r\n /**\r\n * Custom filter method applied to all rows in the table.\r\n * This method is called for each row and should return true to include the row, false to exclude it.\r\n * Applied automatically whenever table data changes.\r\n *\r\n * @param row - The data row to evaluate\r\n * @returns true to include the row in the table, false to exclude it\r\n *\r\n * @example\r\n * // Only show active users\r\n * [initFilterMethod]=\"(row) => row.isActive === true\"\r\n *\r\n * @example\r\n * // Show users with quantity greater than 10\r\n * [initFilterMethod]=\"(row) => row.quantity > 10\"\r\n */\r\n initFilterMethod = input<(row: any) => boolean>();\r\n\r\n /**\r\n * Immutable Data Pattern - Optimized version with ID cleanup\r\n */\r\n data = input<any[]>([]);\r\n\r\n setNewDataWithoutRefresh = input<boolean>(false);\r\n\r\n compactView = input<boolean>(false);\r\n\r\n loadData = output<StMaterialTableLoadData>();\r\n\r\n saveEditedRow = output<{ row: any; index: number }>();\r\n\r\n saveCreatedRow = output<any>();\r\n\r\n rowDeleted = output<{ row: any; index: number }>();\r\n\r\n selectRowChange = output<any[]>();\r\n\r\n /**\r\n * Emitted when a field value changes and autoSaveOnChange is enabled.\r\n * Parent should update their data immediately.\r\n */\r\n fieldValueChanged = output<{\r\n row: any;\r\n field: string;\r\n value: any;\r\n index: number;\r\n }>();\r\n\r\n private _data: any[] = [];\r\n\r\n initLocalColumns = signal<StMaterialTableColumnModel[]>([]);\r\n expandedRowIndex = signal<number | null>(null);\r\n\r\n creatingRow = computed(() => Object.keys(this.activeRowsCreating).length > 0);\r\n\r\n columns: ViewStMaterialTableColumnModel[] = [];\r\n selectedColumns: ViewStMaterialTableColumnModel[] = [];\r\n selectedColumnsString: string[] = [];\r\n\r\n tableSource: MatTableDataSource<any>;\r\n\r\n initFilters: { [key: string]: StMaterialTableFilter } = {};\r\n initGlobalSearch: string = '';\r\n\r\n showTable = true;\r\n\r\n activeRowsEditing: { [rowId: string]: { [prop: string]: any } } = {};\r\n activeRowsCreating: { [rowId: string]: { [prop: string]: any } } = {};\r\n selectedRows = signal<any[]>([]);\r\n\r\n // Track validation errors: { rowId: { fieldName: errorMessage } }\r\n validationErrors: { [rowId: string]: { [field: string]: string } } = {};\r\n\r\n mobileView = signal(false);\r\n\r\n private resizeObserver?: ResizeObserver;\r\n private localStorageData: StMaterialTableLocalStorage;\r\n\r\n constructor(\r\n private changeDetectorRef: ChangeDetectorRef,\r\n private snackbar: StSnackBarService,\r\n public stTableTranslations: StTablesTranslationsService,\r\n private stDialogService: StDialogService\r\n ) {\r\n super();\r\n\r\n this.resizeObserver = new ResizeObserver(() => {\r\n const isMobile = document.body.clientWidth <= 1100;\r\n if (this.mobileView() !== isMobile) {\r\n this.mobileView.set(isMobile);\r\n }\r\n });\r\n this.resizeObserver.observe(document.body);\r\n\r\n // Initialize mobile view state\r\n this.mobileView.set(document.body.clientWidth <= 1100);\r\n\r\n // Effect to handle data changes\r\n effect(() => {\r\n const inputData = this.data();\r\n this.handleDataChange(inputData);\r\n }, {allowSignalWrites: true});\r\n\r\n // Effect to reapply filter when initFilterMethod changes\r\n effect(() => {\r\n // Track the filter method to trigger effect on change\r\n this.initFilterMethod();\r\n if (this.tableSource && !this.lazyLoading()) {\r\n // Update the filter predicate to use the new filter method\r\n this.tableSource.filterPredicate =\r\n this.createCustomFilterForLocalTable();\r\n // Trigger filter reapplication by setting filter string again\r\n if (this.tableSource.filter) {\r\n const currentFilter = this.tableSource.filter;\r\n this.tableSource.filter = '';\r\n this.tableSource.filter = currentFilter;\r\n }\r\n this.changeDetectorRef.markForCheck();\r\n }\r\n }, {allowSignalWrites: true});\r\n }\r\n\r\n ngOnInit(): void {\r\n this.initializeColumns();\r\n this.loadLocalStorageData();\r\n this.validateAndUpdateFilters();\r\n this.setDisplayedColumns();\r\n }\r\n\r\n ngAfterViewInit() {\r\n this.setInitTable();\r\n this.setSortPageSubscription();\r\n }\r\n\r\n override ngOnDestroy() {\r\n this.resizeObserver?.disconnect();\r\n\r\n this.ngDestroyed$.next(true);\r\n this.ngDestroyed$.complete();\r\n }\r\n\r\n turnOnAllEditRows() {\r\n this.tableSource.data.forEach(row => {\r\n this.activeRowsEditing[row.id] = { ...row };\r\n });\r\n this.changeDetectorRef.markForCheck();\r\n }\r\n\r\n captionDataChanged(event: ICaptionDataChanged) {\r\n const loadLazyData =\r\n event.globalSearch !== this.localStorageData.globalSearch ||\r\n JSON.stringify(event.filters) !==\r\n JSON.stringify(this.localStorageData.filters);\r\n\r\n this.localStorageData = {\r\n ...event,\r\n pageSize: this.paginator.pageSize,\r\n pageIndex: loadLazyData ? 0 : this.paginator.pageIndex,\r\n sortField: this.sort.active,\r\n sortOrder: this.sort.direction,\r\n };\r\n\r\n this.setColumnsOrder();\r\n this.setColumnsVisible();\r\n this.setSelectedColumns();\r\n this.updateDataToLocalStorage();\r\n\r\n if (loadLazyData) {\r\n this.emitLazyLoading();\r\n this.paginator.pageIndex = 0;\r\n //@ts-ignore\r\n this.paginator._emitPageEvent(0);\r\n }\r\n\r\n this.changeDetectorRef.markForCheck();\r\n }\r\n\r\n resetTableSettings() {\r\n this.showTable = false;\r\n this.changeDetectorRef.markForCheck();\r\n\r\n this.setNewEmptyLocalStorageData();\r\n this.updateDataToLocalStorage();\r\n this.emitLazyLoading();\r\n this.initFilters = {};\r\n this.initGlobalSearch = '';\r\n this.sort.sort({ id: '', start: 'asc', disableClear: false });\r\n\r\n setTimeout(() => {\r\n this.showTable = true;\r\n this.setDisplayedColumns();\r\n this.setInitTable();\r\n this.changeDetectorRef.markForCheck();\r\n }, 100);\r\n }\r\n\r\n /**\r\n * Adds a new row to the local table copy only.\r\n * The row is tracked in activeRowsCreating until saved.\r\n * When saved, the parent receives the event through saveNewCreatedRow output.\r\n * The parent decides whether to accept and add to their data array.\r\n */\r\n addNewRow() {\r\n this.expandedRowIndex.set(null);\r\n // Create new row with generated ID and default values for each column\r\n const newRow: any = {\r\n id: StBaseService.generateGUID(),\r\n };\r\n\r\n // Initialize fields with null/default values\r\n this.columns\r\n .filter(col => col.allowEditColumn)\r\n .forEach(col => {\r\n newRow[col.field] = null;\r\n });\r\n\r\n // Add to local table copy only\r\n this.tableSource.data = [...this.tableSource.data, newRow];\r\n this.activeRowsCreating[newRow.id] = { ...newRow };\r\n\r\n // Navigate to last page to show the new row\r\n setTimeout(() => {\r\n this.paginator.lastPage();\r\n }, 100);\r\n\r\n this.changeDetectorRef.markForCheck();\r\n }\r\n\r\n editRow(row: any, column: ViewStMaterialTableColumnModel) {\r\n this.activeRowsEditing[row.id] = { ...row };\r\n }\r\n\r\n deleteRow(row: any, column: ViewStMaterialTableColumnModel, index: number) {\r\n const absoluteIndex = this.getAbsoluteIndex(index);\r\n this.stDialogService\r\n .showConfirmation('Are you sure you want to delete this row?')\r\n .pipe(filter(StBaseService.notNull))\r\n .subscribe(res => {\r\n this.tableSource.data = this.tableSource.data.filter(\r\n data => data.id !== row.id\r\n );\r\n this.rowDeleted.emit({ row, index: absoluteIndex });\r\n this.changeDetectorRef.markForCheck();\r\n });\r\n }\r\n\r\n /**\r\n * Validates and saves a row (either new or edited).\r\n * Emits the validated row to the parent through either:\r\n * - saveNewCreatedRow: for newly created rows\r\n * - saveNewRow: for edited existing rows\r\n *\r\n * The parent is responsible for:\r\n * - Persisting the change (e.g., API call)\r\n * - Updating their data array\r\n * - Handling errors/rejections\r\n *\r\n * The library updates its local copy optimistically.\r\n */\r\n saveEditRow(row: any, column: ViewStMaterialTableColumnModel, index: number) {\r\n const absoluteIndex = this.getAbsoluteIndex(index);\r\n const isCreatingThisRow = !!this.activeRowsCreating[row.id];\r\n const rowData = isCreatingThisRow\r\n ? this.activeRowsCreating[row.id]\r\n : this.activeRowsEditing[row.id];\r\n\r\n // Validate row\r\n if (!this.validateRow(rowData, row)) {\r\n return;\r\n }\r\n\r\n // Emit to parent\r\n if (isCreatingThisRow) {\r\n this.saveCreatedRow.emit({ ...rowData });\r\n delete this.activeRowsCreating[row.id];\r\n } else {\r\n this.saveEditedRow.emit({ row: { ...rowData }, index: absoluteIndex });\r\n delete this.activeRowsEditing[row.id];\r\n }\r\n\r\n // Update local table copy\r\n this.updateRowInDataSource(absoluteIndex, row, rowData);\r\n this.changeDetectorRef.markForCheck();\r\n }\r\n\r\n cancelEditRow(row: any, column: ViewStMaterialTableColumnModel) {\r\n // Check if this specific row is being created\r\n const isCreatingThisRow = !!this.activeRowsCreating[row.id];\r\n\r\n if (isCreatingThisRow) {\r\n // Remove from local table copy\r\n this.tableSource.data = this.tableSource.data.filter(\r\n data => data.id !== row.id\r\n );\r\n delete this.activeRowsCreating[row.id];\r\n } else {\r\n delete this.activeRowsEditing[row.id];\r\n }\r\n\r\n // Clear validation errors for this row\r\n if (this.validationErrors[row.id]) {\r\n delete this.validationErrors[row.id];\r\n }\r\n\r\n this.changeDetectorRef.markForCheck();\r\n }\r\n\r\n /**\r\n * Handles immediate field value changes for auto-save mode.\r\n * In auto-save mode, ngModel is bound directly to rowData, so we don't need to update it.\r\n * We only emit to parent so they can update their data copy.\r\n */\r\n onFieldValueChanged(\r\n row: any,\r\n column: ViewStMaterialTableColumnModel,\r\n value: any,\r\n index: number\r\n ) {\r\n const absoluteIndex = this.getAbsoluteIndex(index);\r\n this.tableSource.data[absoluteIndex][column.field] = value;\r\n\r\n // Validate the field if autoSaveOnChange is enabled\r\n if (this.autoSaveOnChange()) {\r\n // Use validateRow with single column to validate just this field\r\n this.validateRow(row, row, column);\r\n }\r\n\r\n // Emit to parent immediately\r\n // The row object is already updated by ngModel binding\r\n this.fieldValueChanged.emit({\r\n row: { ...row },\r\n field: column.field,\r\n value: value,\r\n index: absoluteIndex,\r\n });\r\n }\r\n\r\n private compareRows(a: any, b: any): number {\r\n const aId = a?.id ?? a;\r\n const bId = b?.id ?? b;\r\n return aId === bId ? 0 : 1;\r\n }\r\n\r\n isRowSelected(row: any): boolean {\r\n return this.selectedRows().some(r => this.compareRows(r, row) === 0);\r\n }\r\n\r\n isAllSelected() {\r\n const numSelected = this.selectedRows().length;\r\n if (this.tableSource) {\r\n const numRows = this.tableSource.data.length;\r\n return numSelected === numRows;\r\n } else {\r\n return false;\r\n }\r\n }\r\n\r\n toggleAllRows(event: boolean) {\r\n if (event) {\r\n this.selectedRows.set([...this.tableSource.data]);\r\n } else {\r\n this.selectedRows.set([]);\r\n }\r\n\r\n this.selectRowChange.emit(this.selectedRows());\r\n }\r\n\r\n removeSelectedRow(row: any) {\r\n this.selectedRows.update(selected =>\r\n selected.filter(r => this.compareRows(r, row) !== 0)\r\n );\r\n this.selectRowChange.emit(this.selectedRows());\r\n }\r\n\r\n onRemoveSelectedRow(row: any) {\r\n this.removeSelectedRow(row);\r\n }\r\n\r\n selectRowChanged(value: boolean, row: any) {\r\n if (value) {\r\n if (this.selectRowOnlyOne()) {\r\n this.selectedRows.set([row]);\r\n } else {\r\n this.selectedRows.update(selected => [...selected, row]);\r\n }\r\n } else {\r\n this.selectedRows.update(selected =>\r\n selected.filter(r => this.compareRows(r, row) !== 0)\r\n );\r\n }\r\n\r\n this.changeDetectorRef.markForCheck();\r\n this.selectRowChange.emit(this.selectedRows());\r\n }\r\n\r\n clickRowAction(row: any, index: number) {\r\n if (this.allowExtendRow()) {\r\n if (this.expandedRowIndex() === index) {\r\n this.expandedRowIndex.set(null);\r\n } else {\r\n this.expandedRowIndex.set(index);\r\n }\r\n } else if (this.allowSelectRow()) {\r\n const isSelected = this.isRowSelected(row);\r\n this.selectRowChanged(!isSelected, row);\r\n } else {\r\n if (this.rowClickAction()) {\r\n this.rowClickAction()!(row);\r\n }\r\n }\r\n }\r\n\r\n getAbsoluteIndex(index: number): number {\r\n if (this.lazyLoading()) {\r\n return index;\r\n } else {\r\n return this.paginator\r\n ? this.paginator.pageIndex * this.paginator.pageSize + index\r\n : index;\r\n }\r\n }\r\n\r\n private setColumnsFilterRowEditTypes() {\r\n this.initLocalColumns().forEach(column => {\r\n if (column.field === 'actions' && !column.type) {\r\n column.type = 'actions';\r\n }\r\n\r\n if (!column.filterType && column.filter) {\r\n if (column.type === 'string') {\r\n column.filterType = 'string';\r\n } else if (column.type === 'number') {\r\n column.filterType = 'number';\r\n } else if (column.type === 'date') {\r\n column.filterType = 'date';\r\n } else if (column.type === 'custom-template') {\r\n column.filterType = 'custom';\r\n } else if (column.type === 'boolean') {\r\n column.filterType = 'boolean';\r\n } else {\r\n column.filterType = 'string';\r\n }\r\n }\r\n\r\n if ((this.allowEditRow() || this.autoSaveOnChange()) && !column.rowEditType) {\r\n if (column.type === 'string') {\r\n column.rowEditType = 'string';\r\n } else if (column.type === 'number') {\r\n column.rowEditType = 'number';\r\n } else if (column.type === 'date') {\r\n column.rowEditType = 'date';\r\n } else if (column.type === 'custom-template') {\r\n column.rowEditType = 'custom';\r\n } else if (column.type === 'boolean') {\r\n column.rowEditType = 'boolean';\r\n } else {\r\n column.rowEditType = 'string';\r\n }\r\n }\r\n });\r\n }\r\n\r\n private createCustomFilterForLocalTable() {\r\n let filterFunction = (data: any, filter: string): boolean => {\r\n const searchTerms: {\r\n [column: string]: StMaterialTableFilter;\r\n // @ts-ignore\r\n stGlobalSearch: string;\r\n } = JSON.parse(filter);\r\n const searchTermsKeys = Object.keys(searchTerms);\r\n let searchOk = true;\r\n let searchOkGlobal = true;\r\n\r\n searchTermsKeys.forEach((key: string) => {\r\n if (\r\n key !== 'stGlobalSearch' &&\r\n this.selectedColumnsString.includes(key) &&\r\n searchTerms[key].value !== null &&\r\n searchTerms[key].value !== undefined\r\n ) {\r\n if (Array.isArray(searchTerms[key].value)) {\r\n const dateFrom: string | null = (\r\n searchTerms[key].value as [string | null, string | null]\r\n )[0];\r\n const dateTo: string | null = (\r\n searchTerms[key].value as [string | null, string | null]\r\n )[1];\r\n\r\n if (dateFrom || dateTo) {\r\n const tmpColumn = this.columns.find(col => col.field === key);\r\n\r\n if (tmpColumn && tmpColumn.type === 'date') {\r\n const dateFromValue = dateFrom ? new Date(dateFrom) : null;\r\n const dateToValue = dateTo\r\n ? new Date(\r\n new Date(dateTo).setDate(new Date(dateTo).getDate() + 1)\r\n )\r\n : null;\r\n const tableData = new Date(data[key]);\r\n\r\n if (dateFromValue && dateToValue) {\r\n searchOk =\r\n searchOk &&\r\n tableData >= dateFromValue &&\r\n tableData <= dateToValue;\r\n } else if (dateFromValue) {\r\n searchOk = searchOk && tableData >= dateFromValue;\r\n } else if (dateToValue) {\r\n searchOk = searchOk && tableData <= dateToValue;\r\n }\r\n }\r\n }\r\n } else {\r\n if (\r\n data[key] !== undefined &&\r\n data[key] !== null &&\r\n searchTerms[key].value !== undefined &&\r\n searchTerms[key].value !== null\r\n ) {\r\n searchOk =\r\n searchOk &&\r\n (searchTerms[key].matchMode === 'equal'\r\n ? data[key] === searchTerms[key].value\r\n : data[key]\r\n .toString()\r\n .toLowerCase()\r\n .indexOf(\r\n searchTerms[key].value!.toString().toLowerCase()\r\n ) !== -1);\r\n }\r\n }\r\n }\r\n });\r\n if (searchTerms.stGlobalSearch) {\r\n searchOkGlobal = false;\r\n this.selectedColumnsString.forEach(col => {\r\n if (data[col]) {\r\n searchOkGlobal =\r\n searchOkGlobal ||\r\n data[col]\r\n .toString()\r\n .toLowerCase()\r\n .indexOf(\r\n searchTerms.stGlobalSearch.toString().toLowerCase()\r\n ) !== -1;\r\n }\r\n });\r\n }\r\n\r\n // Apply custom filter method if provided\r\n let customFilterOk = true;\r\n if (this.initFilterMethod()) {\r\n customFilterOk = this.initFilterMethod()!(data);\r\n }\r\n\r\n return searchOk && searchOkGlobal && customFilterOk;\r\n };\r\n return filterFunction;\r\n }\r\n\r\n private emitLazyLoading() {\r\n if (this.lazyLoading()) {\r\n const loadDataRequest: StMaterialTableLoadData = {\r\n first: this.paginator.pageIndex * this.paginator.pageSize,\r\n rows: this.paginator.pageSize,\r\n globalFilterColumns: this.selectedColumnsString,\r\n globalFilter: this.localStorageData.globalSearch,\r\n sortField: this.localStorageData.sortField,\r\n sortOrder: this.localStorageData.sortOrder,\r\n filters: this.localStorageData.filters,\r\n };\r\n\r\n this.loadData.emit(loadDataRequest);\r\n } else {\r\n this.tableSource.filter = JSON.stringify({\r\n ...this.localStorageData.filters,\r\n stGlobalSearch: this.localStorageData.globalSearch,\r\n });\r\n }\r\n }\r\n\r\n private updateDataToLocalStorage() {\r\n if (this.localStorageName()) {\r\n localStorage.setItem(\r\n this.localStorageName()!,\r\n JSON.stringify(this.localStorageData)\r\n );\r\n }\r\n }\r\n\r\n private setInitTable() {\r\n this.tableSource = new MatTableDataSource(this._data);\r\n\r\n this.paginator.pageSize = this.localStorageData.pageSize;\r\n this.paginator.pageIndex = this.localStorageData.pageIndex;\r\n\r\n if (this.localStorageData.sortField && this.localStorageData.sortOrder) {\r\n const disableClear = false;\r\n this.sort.sort({ id: '', start: 'asc', disableClear });\r\n this.sort.sort({\r\n id: this.localStorageData.sortField,\r\n start: this.localStorageData.sortOrder,\r\n disableClear,\r\n });\r\n }\r\n\r\n if (!this.lazyLoading()!) {\r\n this.tableSource.paginator = this.paginator;\r\n this.tableSource.sort = this.sort;\r\n this.tableSource.filterPredicate = this.createCustomFilterForLocalTable();\r\n }\r\n\r\n this.emitLazyLoading();\r\n }\r\n\r\n private setSortPageSubscription() {\r\n this.sort.sortChange\r\n .pipe(\r\n takeUntil(this.ngDestroyed$),\r\n distinctUntilChanged(\r\n (prev, curr) => JSON.stringify(prev) === JSON.stringify(curr)\r\n )\r\n )\r\n .subscribe(res => {\r\n this.localStorageData = {\r\n ...this.localStorageData,\r\n sortField: res.active,\r\n sortOrder: res.direction,\r\n };\r\n this.updateDataToLocalStorage();\r\n this.emitLazyLoading();\r\n });\r\n\r\n this.paginator.page\r\n .pipe(\r\n takeUntil(this.ngDestroyed$),\r\n distinctUntilChanged(\r\n (prev, curr) => JSON.stringify(prev) === JSON.stringify(curr)\r\n )\r\n )\r\n .subscribe(res => {\r\n this.localStorageData = {\r\n ...this.localStorageData,\r\n pageIndex: this.paginator.pageIndex,\r\n pageSize: this.paginator.pageSize,\r\n };\r\n\r\n this.updateDataToLocalStorage();\r\n this.emitLazyLoading();\r\n });\r\n }\r\n\r\n private setDisplayedColumns() {\r\n this.columns = this.initLocalColumns().map(col => {\r\n return {\r\n ...col,\r\n type: col.type ? col.type : 'string',\r\n visible: true,\r\n expanded: true,\r\n isEditing: false,\r\n };\r\n });\r\n\r\n this.setColumnsOrder();\r\n this.setColumnsVisible();\r\n this.setSelectedColumns();\r\n this.changeDetectorRef.markForCheck();\r\n }\r\n\r\n private setColumnsOrder() {\r\n if (this.localStorageData?.columnsOrder) {\r\n this.columns = [\r\n ...this.localStorageData.columnsOrder\r\n .filter(column => this.columns.find(col => col.field === column))\r\n .map(column => this.columns.find(col => col.field === column)!),\r\n ...this.columns.filter(\r\n column => !this.localStorageData.columnsOrder.includes(column.field)\r\n ),\r\n ];\r\n }\r\n }\r\n\r\n private setColumnsVisible() {\r\n if (this.localStorageData?.selectedColumns) {\r\n this.columns = this.columns.map(col => {\r\n return {\r\n ...col,\r\n visible:\r\n this.localStorageData.selectedColumns.includes(col.field) ||\r\n !this.localStorageData.columnsOrder.includes(col.field),\r\n };\r\n });\r\n }\r\n }\r\n\r\n private setSelectedColumns() {\r\n this.selectedColumns = this.columns.filter(col => {\r\n return col.visible;\r\n });\r\n this.selectedColumnsString = this.selectedColumns.map(col => col.field);\r\n this.changeDetectorRef.markForCheck();\r\n }\r\n\r\n private loadLocalStorageData() {\r\n if (this.localStorageName()) {\r\n const localStorageData = localStorage.getItem(this.localStorageName()!);\r\n\r\n if (localStorageData) {\r\n this.localStorageData = JSON.parse(localStorageData);\r\n // const filters = this.validOldFiltersToNewFormat(\r\n // this.localStorageData.filters\r\n // );\r\n // this.localStorageData.filters = filters;\r\n this.initFilters = this.localStorageData.filters;\r\n\r\n this.initGlobalSearch = this.localStorageData.globalSearch;\r\n } else {\r\n this.setNewEmptyLocalStorageData();\r\n }\r\n } else {\r\n this.setNewEmptyLocalStorageData();\r\n }\r\n }\r\n\r\n private validOldFiltersToNewFormat(oldFilters: {\r\n [key: string]: StMaterialTableFilter | string;\r\n }): { [key: string]: StMaterialTableFilter } {\r\n const newFilters: { [key: string]: StMaterialTableFilter } = {};\r\n const keys = Object.keys(oldFilters);\r\n\r\n if (keys.length === 0) {\r\n return newFilters;\r\n }\r\n for (const key of keys) {\r\n if (typeof oldFilters[key] === 'object' && oldFilters[key] !== null) {\r\n newFilters[key] = oldFilters[key] as StMaterialTableFilter;\r\n }\r\n }\r\n\r\n return newFilters;\r\n }\r\n\r\n private setNewEmptyLocalStorageData() {\r\n this.localStorageData = {\r\n pageSize: this.pageSize(),\r\n pageIndex: 0,\r\n selectedColumns: this.initLocalColumns().map(col => col.field),\r\n globalSearch: '',\r\n columnsOrder: this.initLocalColumns().map(col => col.field),\r\n filters: {},\r\n sortField: '',\r\n sortOrder: 'asc',\r\n };\r\n }\r\n\r\n isFirstEditableColumn(column: ViewStMaterialTableColumnModel): boolean {\r\n // Get all editable columns in order\r\n const editableColumns = this.selectedColumns.filter(\r\n col => col.allowEditColumn && col.visible\r\n );\r\n\r\n // Return true if this is the first editable column\r\n return (\r\n editableColumns.length > 0 && editableColumns[0].field === column.field\r\n );\r\n }\r\n\r\n private validateRow(\r\n rowData: any,\r\n originalRow: any,\r\n singleColumn?: ViewStMaterialTableColumnModel\r\n ): boolean {\r\n const editableColumns = singleColumn\r\n ? [singleColumn]\r\n : this.columns.filter(col => col.allowEditColumn);\r\n const rowId = originalRow.id;\r\n\r\n // For single field validation, preserve existing errors for other fields\r\n let errors: { [field: string]: string } = singleColumn\r\n ? { ...this.validationErrors[rowId] }\r\n : {};\r\n\r\n // Clear all errors if validating entire row\r\n if (!singleColumn && this.validationErrors[rowId]) {\r\n errors = {};\r\n }\r\n\r\n let hasErrors = false;\r\n let firstErrorMessage = '';\r\n\r\n for (const col of editableColumns) {\r\n let fieldHasError = false;\r\n let errorMessage = '';\r\n\r\n if (col.customEditRowValidator) {\r\n const result = col.customEditRowValidator(\r\n rowData[col.field],\r\n originalRow[col.field],\r\n originalRow\r\n );\r\n if (!result.isValid) {\r\n errors[col.field] = result.errorMessage;\r\n fieldHasError = true;\r\n hasErrors = true;\r\n errorMessage = result.errorMessage;\r\n }\r\n }\r\n\r\n if (!fieldHasError && col.editColumnRequired) {\r\n const value = rowData[col.field];\r\n if (value === undefined || value === null || value === '') {\r\n errorMessage = `${col.header} is required`;\r\n errors[col.field] = errorMessage;\r\n fieldHasError = true;\r\n hasErrors = true;\r\n }\r\n }\r\n\r\n // Clear error for this field if validation passed\r\n if (!fieldHasError && singleColumn) {\r\n delete errors[col.field];\r\n }\r\n\r\n // Capture first error for snackbar (only when validating entire row)\r\n if (!singleColumn && fieldHasError && !firstErrorMessage) {\r\n firstErrorMessage = errorMessage;\r\n }\r\n }\r\n\r\n // Update validation errors\r\n if (Object.keys(errors).length > 0) {\r\n this.validationErrors[rowId] = errors;\r\n } else {\r\n delete this.validationErrors[rowId];\r\n }\r\n\r\n // Show snackbar only when validating entire row (on save)\r\n if (!singleColumn && hasErrors && firstErrorMessage) {\r\n this.snackbar.error(firstErrorMessage);\r\n }\r\n\r\n this.changeDetectorRef.markForCheck();\r\n return !hasErrors;\r\n }\r\n\r\n private updateRowInDataSource(index: number, row: any, rowData: any): void {\r\n if (index >= 0 && index < this.tableSource.data.length) {\r\n const updatedRow = { ...row };\r\n this.columns\r\n .filter(col => col.allowEditColumn)\r\n .forEach(col => {\r\n updatedRow[col.field] = rowData[col.field];\r\n });\r\n\r\n this.tableSource.data[index] = updatedRow;\r\n this.tableSource.data = [...this.tableSource.data];\r\n }\r\n }\r\n\r\n private initializeColumns(): void {\r\n this.initLocalColumns.set([...this.initColumns()]);\r\n\r\n // Add special columns\r\n this.addSelectColumnIfNeeded();\r\n this.addEditColumnIfNeeded();\r\n this.addExtendColumnIfNeeded();\r\n\r\n this.setColumnsFilterRowEditTypes();\r\n }\r\n\r\n private addSelectColumnIfNeeded(): void {\r\n if (!this.allowSelectRow()) {\r\n this.removeColumnByType('actions-row-selecting');\r\n return;\r\n }\r\n\r\n this.initLocalColumns().unshift({\r\n field: 'actions-row-selecting',\r\n header: '',\r\n type: 'actions-row-selecting',\r\n sort: false,\r\n filter: false,\r\n width: '40px',\r\n selectColumnLabel:\r\n this.stTableTranslations.getTranslations()().rowSelectColumnLabel,\r\n });\r\n\r\n if (this.initSelectedRow()) {\r\n this.selectedRows.set([...this.initSelectedRow()]);\r\n }\r\n }\r\n\r\n private addEditColumnIfNeeded(): void {\r\n if (!this.allowEditRow() || this.autoSaveOnChange()) {\r\n this.removeColumnByType('actions-row-editing');\r\n return;\r\n }\r\n\r\n const editingColumn: StMaterialTableColumnModel = {\r\n field: 'actions-row-editing',\r\n header: '',\r\n type: 'actions-row-editing',\r\n sort: false,\r\n filter: false,\r\n width: '110px',\r\n selectColumnLabel:\r\n this.stTableTranslations.getTranslations()().rowActionsColumnLabel,\r\n };\r\n\r\n this.initLocalColumns.update(columns => {\r\n const lastColumn = columns[columns.length - 1];\r\n if (lastColumn?.type !== 'actions') {\r\n return [...columns, editingColumn];\r\n }\r\n const newColumns = [...columns];\r\n newColumns.splice(newColumns.length - 1, 0, editingColumn);\r\n return newColumns;\r\n });\r\n }\r\n\r\n private addExtendColumnIfNeeded(): void {\r\n if (!this.allowExtendRow()) {\r\n this.removeColumnByType('actions-row-extending');\r\n return;\r\n }\r\n\r\n this.initLocalColumns().unshift({\r\n field: 'actions-row-extending',\r\n header: '',\r\n type: 'actions-row-extending',\r\n sort: false,\r\n filter: false,\r\n width: '30px',\r\n selectColumnLabel:\r\n this.stTableTranslations.getTranslations()().rowExtendColumnLabel,\r\n });\r\n }\r\n\r\n private removeColumnByType(type: string): void {\r\n this.initLocalColumns.update(columns =>\r\n columns.filter(column => column.field !== type)\r\n );\r\n }\r\n\r\n private validateAndUpdateFilters(): void {\r\n const filterKeys = Object.keys(this.initFilters);\r\n if (filterKeys.length === 0) return;\r\n\r\n const newFilters: { [key: string]: StMaterialTableFilter } = {};\r\n\r\n for (const key of filterKeys) {\r\n const col = this.initLocalColumns().find(column => column.field === key);\r\n if (!col) continue;\r\n\r\n newFilters[key] = {\r\n value: this.getDefaultFilterValue(col, this.initFilters[key]),\r\n matchMode: MaterialTableFilterDialogComponent.getBaseMatchModeByType(\r\n col.filterType!\r\n ),\r\n };\r\n }\r\n\r\n if (JSON.stringify(newFilters) !== JSON.stringify(this.initFilters)) {\r\n this.initFilters = newFilters;\r\n this.localStorageData.filters = newFilters;\r\n this.updateDataToLocalStorage();\r\n }\r\n }\r\n\r\n private getDefaultFilterValue(\r\n col: StMaterialTableColumnModel,\r\n filter: StMaterialTableFilter\r\n ): StMaterialTableFilterValueType {\r\n if (filter.matchMode === 'equal') {\r\n return (filter.value ?? null) as StMaterialTableFilterValueType;\r\n }\r\n\r\n if (filter.matchMode === 'between') {\r\n return filter.value && Array.isArray(filter.value)\r\n ? filter.value\r\n : [null, null];\r\n }\r\n\r\n return (filter.value ?? '') as StMaterialTableFilterValueType;\r\n }\r\n\r\n /**\r\n * Handles data changes from the input signal\r\n */\r\n private handleDataChange(data: any[]): void {\r\n if (!data || !Array.isArray(data)) {\r\n this._data = [];\r\n if (this.tableSource) {\r\n this.tableSource.data = [];\r\n }\r\n return;\r\n }\r\n\r\n if (\r\n data.length > 0 &&\r\n this._data.length === data.length &&\r\n this.setNewDataWithoutRefresh()\r\n ) {\r\n const objectKeys = Object.keys(data[0]).filter(key => key !== 'id');\r\n\r\n // Update existing objects in place to preserve references and avoid losing focus\r\n this.tableSource.data.forEach((existingRow, index) => {\r\n objectKeys.forEach(key => {\r\n existingRow[key] = data[index][key];\r\n });\r\n });\r\n\r\n // Force table to detect changes without recreating rows\r\n this.tableSource._updateChangeSubscription();\r\n\r\n // Trigger change detection on all child row cell components\r\n if (this.rowCells) {\r\n this.rowCells.forEach(cell => {\r\n cell.triggerChangeDetection();\r\n });\r\n }\r\n\r\n this.changeDetectorRef.detectChanges();\r\n } else {\r\n // Check if data is actually different (excluding IDs we might have added)\r\n // This prevents unnecessary updates when parent sends the same data\r\n if (this._data.length === data.length) {\r\n const dataWithoutIds = data.map(row => {\r\n const tmp = { ...row };\r\n delete tmp.id;\r\n return tmp;\r\n });\r\n const currentDataWithoutIds = this._data.map(row => {\r\n const tmp = { ...row };\r\n delete tmp.id;\r\n return tmp;\r\n });\r\n\r\n if (\r\n JSON.stringify(dataWithoutIds) ===\r\n JSON.stringify(currentDataWithoutIds)\r\n ) {\r\n return;\r\n }\r\n }\r\n\r\n // Create shallow copy to avoid mutating parent data\r\n let clonedData = data.map(row => ({ ...row }));\r\n\r\n // Add IDs if needed (only on the copy, only if row doesn't have an id)\r\n if (this.allowEditRow() || this.allowSelectRow() || this.autoSaveOnChange()) {\r\n clonedData = clonedData.map(row => {\r\n // Only add id if it doesn't exist - don't overwrite existing IDs\r\n if (!row.id) {\r\n return {\r\n ...row,\r\n id: StBaseService.generateGUID(),\r\n };\r\n }\r\n return row;\r\n });\r\n }\r\n\r\n this._data = clonedData;\r\n\r\n if (this.tableSource) {\r\n this.tableSource.data = clonedData;\r\n if (!this.lazyLoading() && this.localStorageData) {\r\n this.paginator.pageIndex = this.localStorageData.pageIndex;\r\n //@ts-ignore\r\n this.paginator._emitPageEvent(this.localStorageData.pageIndex);\r\n }\r\n\r\n this.changeDetectorRef.markForCheck();\r\n }\r\n }\r\n }\r\n}\r\n\r\nexport interface StMaterialTableLoadData {\r\n first: number;\r\n rows: number;\r\n globalFilter: string;\r\n globalFilterColumns: string[];\r\n sortField: string;\r\n sortOrder: SortDirection;\r\n filters: { [key: string]: StMaterialTableFilter };\r\n}\r\n\r\nexport interface StMaterialTableLocalStorage extends ICaptionDataChanged {\r\n pageSize: number;\r\n pageIndex: number;\r\n sortField: string;\r\n sortOrder: SortDirection;\r\n}\r\n","<div class=\"st-material-table\">\r\n @if (isLoading()) {\r\n <div class=\"loading-spinner\">\r\n <mat-spinner color=\"accent\"></mat-spinner>\r\n </div>\r\n }\r\n\r\n @if (showTable) {\r\n <st-material-table-caption\r\n [tableTitle]=\"tableTitle()\"\r\n [allowPickColumns]=\"allowPickColumns()\"\r\n [showGlobalSearch]=\"showGlobalSearch()\"\r\n [allowReorderColumns]=\"allowReorderColumns()\"\r\n [columns]=\"columns\"\r\n [initFilters]=\"initFilters\"\r\n [initGlobalSearch]=\"initGlobalSearch\"\r\n [showCreateButton]=\"showCreateButton()\"\r\n [createButtonLabel]=\"createButtonLabel()\"\r\n [createButtonAction]=\"createButtonAction()\"\r\n [allowCreateRow]=\"allowCreateRow()\"\r\n [disableCreateButton]=\"disableCreateButton()\"\r\n [extraCustomFilter]=\"extraCustomFilter()\"\r\n [creatingRow]=\"creatingRow()\"\r\n (captionDataChanged)=\"captionDataChanged($event)\"\r\n (resetTableSettings)=\"resetTableSettings()\"\r\n (addNewRow)=\"addNewRow()\"\r\n ></st-material-table-caption>\r\n }\r\n\r\n <table\r\n [ngClass]=\"{\r\n 'no-hover': !rowClickAction(),\r\n 'is-expended-table': allowExtendRow(),\r\n 'compact-view': compactView()\r\n }\"\r\n mat-table\r\n [dataSource]=\"tableSource\"\r\n matSort\r\n [multiTemplateDataRows]=\"allowExtendRow()\"\r\n >\r\n @for (column of selectedColumns; track column.field) {\r\n <ng-container [matColumnDef]=\"column.field\">\r\n <th\r\n mat-header-cell\r\n *matHeaderCellDef\r\n [style.width]=\"column.actionsInMenu || (column.actions && mobileView() && column.actions!.length > 1) ? '60px' : column.width\"\r\n mat-sort-header\r\n [disabled]=\"!column.sort\"\r\n >\r\n @if (column.type === 'actions-row-selecting' && !selectRowOnlyOne()) {\r\n <mat-checkbox\r\n color=\"primary\"\r\n (change)=\"toggleAllRows($event.checked)\"\r\n [checked]=\"selectedRows().length > 0 && isAllSelected()\"\r\n [indeterminate]=\"selectedRows().length > 0 && !isAllSelected()\"\r\n >\r\n </mat-checkbox>\r\n } @else if (\r\n column.type === 'actions-row-editing' && showEditAllRows()\r\n ) {\r\n <div class=\"row justify-content-end edit-all-rows-button\">\r\n <button\r\n mat-icon-button\r\n (click)=\"turnOnAllEditRows()\"\r\n matTooltip=\"Edit all rows\"\r\n >\r\n <mat-icon>edit_arrow_down</mat-icon>\r\n </button>\r\n </div>\r\n } @else {\r\n {{ column.header }}\r\n }\r\n </th>\r\n <td\r\n mat-cell\r\n *matCellDef=\"let element; let i = index; let j = dataIndex\"\r\n [style.width]=\"column.actionsInMenu || (column.actions && mobileView() && column.actions!.length > 1) ? '60px' : column.width\"\r\n >\r\n <st-material-table-row-cell\r\n [column]=\"column\"\r\n [rowData]=\"element\"\r\n [rowIndex]=\"getAbsoluteIndex(allowExtendRow() ? j : i)\"\r\n [rowDataCopy]=\"\r\n activeRowsEditing[element.id] || activeRowsCreating[element.id]\r\n \"\r\n [rowEditing]=\"\r\n !!activeRowsEditing[element.id] ||\r\n !!activeRowsCreating[element.id]\r\n \"\r\n [rowIsSelected]=\"isRowSelected(element)\"\r\n [rowIsExpanded]=\"expandedRowIndex() === (allowExtendRow() ? j : i)\"\r\n [canEditRowValidator]=\"canEditRowValidator()\"\r\n [canDeleteRowValidator]=\"canDeleteRowValidator()\"\r\n [selectRowOnlyOne]=\"selectRowOnlyOne()\"\r\n [isFirstEditableColumn]=\"isFirstEditableColumn(column)\"\r\n [autoSaveOnChange]=\"autoSaveOnChange()\"\r\n [allowEditRow]=\"allowEditRow()\"\r\n [allowEditInEditRow]=\"allowEditInEditRow()\"\r\n [allowDeleteInEditRow]=\"allowDeleteInEditRow()\"\r\n [fieldError]=\"validationErrors[element.id]?.[column.field]\"\r\n [mobileView]=\"mobileView()\"\r\n (editRowEmitter)=\"editRow(element, column)\"\r\n (deleteRowEmitter)=\"\r\n deleteRow(element, column, allowExtendRow() ? j : i)\r\n \"\r\n (saveEditRowEmitter)=\"\r\n saveEditRow(element, column, allowExtendRow() ? j : i)\r\n \"\r\n (cancelEditRowEmitter)=\"cancelEditRow(element, column)\"\r\n (selectRowChange)=\"selectRowChanged($event, element)\"\r\n (fieldValueChanged)=\"\r\n onFieldValueChanged(\r\n element,\r\n column,\r\n $event.value,\r\n allowExtendRow() ? j : i\r\n )\r\n \"\r\n ></st-material-table-row-cell>\r\n </td>\r\n </ng-container>\r\n }\r\n\r\n <ng-container matColumnDef=\"expandedDetail\">\r\n <td\r\n mat-cell\r\n *matCellDef=\"let element; let i = dataIndex\"\r\n [attr.colspan]=\"selectedColumnsString.length\"\r\n >\r\n <div\r\n class=\"expanded-element-detail-wrapper\"\r\n [@detailExpand]=\"expandedRowIndex() === i ? 'expanded' : 'collapsed'\"\r\n >\r\n <div class=\"expanded-element-detail\">\r\n <ng-container\r\n [ngTemplateOutlet]=\"extendedRowTemplate()!\"\r\n [ngTemplateOutletContext]=\"{ data: element, rowIndex: expandedRowIndex() }\"\r\n ></ng-container>\r\n </div>\r\n </div>\r\n </td>\r\n </ng-container>\r\n\r\n <tr mat-header-row *matHeaderRowDef=\"selectedColumnsString\"></tr>\r\n <tr\r\n mat-row\r\n *matRowDef=\"let row; columns: selectedColumnsString; let i = dataIndex\"\r\n [class.expanded-expanded-row]=\"expandedRowIndex() === i\"\r\n (click)=\"clickRowAction(row, i)\"\r\n ></tr>\r\n @if (allowExtendRow()) {\r\n <tr\r\n mat-row\r\n *matRowDef=\"let row; columns: ['expandedDetail']\"\r\n class=\"extended-detail-row\"\r\n ></tr>\r\n }\r\n </table>\r\n <mat-paginator\r\n [showFirstLastButtons]=\"true\"\r\n [pageSizeOptions]=\"[5, 10, 15, 20, 25]\"\r\n [length]=\"dataLength()\"\r\n ></mat-paginator>\r\n <st-material-table-selected-rows\r\n [allowSelectRow]=\"allowSelectRow()\"\r\n [selectRowOnlyOne]=\"selectRowOnlyOne()\"\r\n [selectedRows]=\"selectedRows()\"\r\n [selectionFieldLabel]=\"selectionFieldLabel()\"\r\n [selectRowValueDisplay]=\"selectRowValueDisplay()\"\r\n (removeSelectedRow)=\"onRemoveSelectedRow($event)\"\r\n ></st-material-table-selected-rows>\r\n</div>\r\n","import { StMaterialTableLoadData } from '../components/material-table/material-table.component';\r\nimport { StMaterialTableFilterMatchModeType } from '../models/models';\r\n\r\nexport function mapTableDataToApi(\r\n tableOptions: StMaterialTableLoadData\r\n): ApiTableRequestModel {\r\n const filtersKeys = Object.keys(tableOptions.filters || {});\r\n\r\n return {\r\n globalFilter: tableOptions.globalFilter || '',\r\n take: tableOptions.rows || 10,\r\n skip: tableOptions.first ? tableOptions.first : 0,\r\n sortColumn:\r\n tableOptions.sortOrder && tableOptions.sortField\r\n ? tableOptions.sortField || ''\r\n : '',\r\n sortDescending: tableOptions.sortOrder === 'desc',\r\n filters:\r\n filtersKeys?.map(filter => ({\r\n fieldName: filter,\r\n operator: getFilterType(tableOptions.filters[filter].matchMode),\r\n value: Array.isArray(tableOptions.filters[filter].value)\r\n ? (tableOptions.filters[filter].value as any)[0]\r\n : tableOptions.filters[filter].value,\r\n secondValue: Array.isArray(tableOptions.filters[filter].value)\r\n ? (tableOptions.filters[filter].value as any)[1]\r\n : undefined,\r\n })) || [],\r\n };\r\n}\r\n\r\nfunction getFilterType(\r\n filterType: StMaterialTableFilterMatchModeType\r\n): ApiTableFilterOperatorEnum {\r\n switch (filterType) {\r\n case 'contains':\r\n return ApiTableFilterOperatorEnum.Like;\r\n case 'equal':\r\n return ApiTableFilterOperatorEnum.Equal;\r\n case 'between':\r\n return ApiTableFilterOperatorEnum.Between;\r\n default:\r\n throw new Error(`Unknown filter type: ${filterType}`);\r\n }\r\n}\r\n\r\nexport interface ApiTableRequestModel {\r\n take: number;\r\n skip: number;\r\n sortColumn: string;\r\n sortDescending: boolean;\r\n filters: ApiTableFilterCriteriaModel[];\r\n globalFilter: string;\r\n}\r\n\r\nexport class ApiTableFilterCriteriaModel {\r\n fieldName: string;\r\n operator: ApiTableFilterOperatorEnum;\r\n value: string;\r\n secondValue: string;\r\n}\r\n\r\nexport enum ApiTableFilterOperatorEnum {\r\n Equal,\r\n Like,\r\n GreaterThan,\r\n GreaterThanOrEqual,\r\n LessThan,\r\n LessThanOrEqual,\r\n Between,\r\n In,\r\n}\r\n","import { ModuleWithProviders, NgModule } from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\nimport { MatButtonModule } from '@angular/material/button';\r\nimport { MatIconModule, MatIconRegistry } from '@angular/material/icon';\r\nimport { MatTableModule } from '@angular/material/table';\r\nimport { MatPaginatorModule } from '@angular/material/paginator';\r\nimport { MatFormFieldModule } from '@angular/material/form-field';\r\nimport { MatInputModule } from '@angular/material/input';\r\nimport { MatTooltipModule } from '@angular/material/tooltip';\r\nimport { FormsModule, ReactiveFormsModule } from '@angular/forms';\r\nimport { RouterModule } from '@angular/router';\r\nimport { MatSortModule } from '@angular/material/sort';\r\nimport { MatMenuModule } from '@angular/material/menu';\r\nimport { MatSelectModule } from '@angular/material/select';\r\nimport { MatCheckboxModule } from '@angular/material/checkbox';\r\nimport { StDateFormatModule } from 'ngx-st-date-format';\r\nimport { MaterialTableComponent } from './components/material-table/material-table.component';\r\nimport { MaterialTableCaptionComponent } from './components/material-table/material-table-caption/material-table-caption.component';\r\nimport { MatBadge } from '@angular/material/badge';\r\nimport { MatProgressSpinner } from '@angular/material/progress-spinner';\r\nimport { StBaseFunctionsModule } from 'ngx-st-base-functions';\r\nimport { MaterialTableOrderColumnDialogComponent } from './components/material-table/material-table-caption/material-table-order-column-dialog/material-table-order-column-dialog.component';\r\nimport { MaterialTableFilterDialogComponent } from './components/material-table/material-table-caption/material-table-filter-dialog/material-table-filter-dialog.component';\r\nimport { MatDialogModule } from '@angular/material/dialog';\r\nimport { MatExpansionModule } from '@angular/material/expansion';\r\nimport { CdkDrag, CdkDropList } from '@angular/cdk/drag-drop';\r\nimport { MaterialTableRowCellComponent } from './components/material-table/material-table-row-cell/material-table-row-cell.component';\r\nimport { MaterialTableSelectedRowsComponent } from './components/material-table/material-table-selected-rows/material-table-selected-rows.component';\r\nimport { StQtyInputModule } from 'ngx-st-qty-input';\r\nimport { MatDatepickerModule } from '@angular/material/datepicker';\r\nimport { MatSlideToggleModule } from '@angular/material/slide-toggle';\r\nimport { MatNativeDateModule } from '@angular/material/core';\r\nimport { StSnackBarModule } from 'ngx-st-snack-bar';\r\nimport { StTablesTranslationsModel } from './models/st-tables-translations.model';\r\nimport { SelectTableComponent } from './components/select-table/select-table.component';\r\nimport { MaterialTableFilterComponent } from './components/material-table/material-table-caption/material-table-filter-dialog/material-table-filter.component';\r\nimport { MatRadioButton } from '@angular/material/radio';\r\nimport { MatChip, MatChipRemove } from '@angular/material/chips';\r\nimport { DateWithoutTimezoneFormatPipe } from './pipes/date-without-timezone-format.pipe';\r\n\r\n@NgModule({\r\n declarations: [\r\n MaterialTableCaptionComponent,\r\n MaterialTableComponent,\r\n MaterialTableOrderColumnDialogComponent,\r\n MaterialTableFilterDialogComponent,\r\n MaterialTableRowCellComponent,\r\n MaterialTableSelectedRowsComponent,\r\n SelectTableComponent,\r\n MaterialTableFilterComponent,\r\n DateWithoutTimezoneFormatPipe,\r\n ],\r\n imports: [\r\n CommonModule,\r\n MatButtonModule,\r\n MatIconModule,\r\n MatTableModule,\r\n MatPaginatorModule,\r\n MatFormFieldModule,\r\n MatInputModule,\r\n MatTooltipModule,\r\n FormsModule,\r\n ReactiveFormsModule,\r\n RouterModule,\r\n StDateFormatModule,\r\n MatSortModule,\r\n MatMenuModule,\r\n MatSelectModule,\r\n MatCheckboxModule,\r\n MatBadge,\r\n MatProgressSpinner,\r\n StBaseFunctionsModule,\r\n MatDialogModule,\r\n MatExpansionModule,\r\n CdkDropList,\r\n CdkDrag,\r\n StQtyInputModule,\r\n MatDatepickerModule,\r\n MatSlideToggleModule,\r\n MatNativeDateModule,\r\n StSnackBarModule,\r\n MatRadioButton,\r\n MatChip,\r\n MatChipRemove,\r\n ],\r\n exports: [MaterialTableComponent, SelectTableComponent],\r\n providers: [MatDatepickerModule],\r\n})\r\nexport class StTablesModule {\r\n constructor(private matIconRegistry: MatIconRegistry) {\r\n this.matIconRegistry.setDefaultFontSetClass('material-symbols-outlined');\r\n }\r\n\r\n static forRoot(config?: {\r\n translations?: Partial<StTablesTranslationsModel>;\r\n }): ModuleWithProviders<StTablesModule> {\r\n return {\r\n ngModule: StTablesModule,\r\n providers: [\r\n {\r\n provide: 'ST_TABLES_CONFIG',\r\n useValue: config || {},\r\n },\r\n ],\r\n };\r\n }\r\n}\r\n","/*\r\n * Public API Surface of ngx-st-tables\r\n */\r\n\r\nexport * from './lib/services/st-tables-translations.service';\r\nexport * from './lib/components/select-table/select-table.component';\r\nexport * from './lib/components/material-table/material-table-caption/material-table-caption.component';\r\nexport * from './lib/components/material-table/material-table-selected-rows/material-table-selected-rows.component';\r\nexport * from './lib/components/material-table/material-table.component';\r\nexport * from './lib/pipes/date-without-timezone-format.pipe';\r\nexport * from './lib/models/st-material-table-column.model';\r\nexport * from './lib/models/st-tables-translations.model';\r\nexport * from './lib/constants/map-table-data-to-api';\r\nexport * from './lib/ngx-st-tables.module';\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i2","i3","i5","i6","i1.StTablesTranslationsService","i4","i7","i6.MaterialTableFilterComponent","i1","i9","i8","i10","i11","i14","i16.DateWithoutTimezoneFormatPipe","i2.StTablesTranslationsService","i12","i13.MaterialTableCaptionComponent","i14.MaterialTableRowCellComponent","i15.MaterialTableSelectedRowsComponent"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAEO,MAAM,oBAAoB,GAA8B;AAC7D,IAAA,YAAY,EAAE,QAAQ;AACtB,IAAA,MAAM,EAAE,QAAQ;AAChB,IAAA,KAAK,EAAE,OAAO;AACd,IAAA,IAAI,EAAE,MAAM;AACZ,IAAA,mBAAmB,EAAE,iBAAiB;AACtC,IAAA,cAAc,EAAE,iBAAiB;AACjC,IAAA,gBAAgB,EAAE,oBAAoB;AACtC,IAAA,kBAAkB,EAAE,sBAAsB;AAC1C,IAAA,eAAe,EAAE,mBAAmB;AACpC,IAAA,WAAW,EAAE,SAAS;AACtB,IAAA,MAAM,EAAE,QAAQ;AAChB,IAAA,YAAY,EAAE,QAAQ;AACtB,IAAA,gBAAgB,EAAE,eAAe;AACjC,IAAA,gBAAgB,EAAE,YAAY;AAC9B,IAAA,WAAW,EAAE,MAAM;AACnB,IAAA,UAAU,EAAE,KAAK;AACjB,IAAA,SAAS,EAAE,IAAI;AACf,IAAA,eAAe,EAAE,YAAY;AAC7B,IAAA,UAAU,EAAE,MAAM;AAClB,IAAA,WAAW,EAAE,cAAc;AAC3B,IAAA,oBAAoB,EAAE,YAAY;AAClC,IAAA,qBAAqB,EAAE,aAAa;AACpC,IAAA,oBAAoB,EAAE,YAAY;AAClC,IAAA,SAAS,EAAE,YAAY;AACvB,IAAA,WAAW,EAAE,cAAc;AAC3B,IAAA,QAAQ,EAAE,WAAW;AACrB,IAAA,MAAM,EAAE,SAAS;AACjB,IAAA,kBAAkB,EAAE,sBAAsB;CAC3C;;MCxBY,2BAA2B,CAAA;AAItC,IAAA,WAAA,CAGU,MAA6D,EAAA;QAA7D,IAAM,CAAA,MAAA,GAAN,MAAM,CAAuD;AANtD,QAAA,IAAA,CAAA,YAAY,GAC3B,MAAM,CAA4B,oBAAoB,CAAC,CAAC;AAOxD,QAAA,IAAI,IAAI,CAAC,MAAM,EAAE,YAAY,EAAE;YAC7B,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC;SAChD;KACF;AAED,IAAA,eAAe,CAAC,YAAgD,EAAA;AAC9D,QAAA,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC;AACpB,YAAA,GAAG,oBAAoB;AACvB,YAAA,GAAG,YAAY;AAChB,SAAA,CAAC,CAAC;KACJ;IAED,eAAe,GAAA;QACb,OAAO,IAAI,CAAC,YAAY,CAAC;KAC1B;AAvBU,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,kBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,2BAA2B,kBAM5B,kBAAkB,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA,EAAA;AANjB,IAAA,SAAA,IAAA,CAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,2BAA2B,cAF1B,MAAM,EAAA,CAAA,CAAA,EAAA;;4FAEP,2BAA2B,EAAA,UAAA,EAAA,CAAA;kBAHvC,UAAU;AAAC,YAAA,IAAA,EAAA,CAAA;AACV,oBAAA,UAAU,EAAE,MAAM;AACnB,iBAAA,CAAA;;0BAMI,QAAQ;;0BACR,MAAM;2BAAC,kBAAkB,CAAA;;;MCOjB,oBAAoB,CAAA;IAwB/B,IACI,cAAc,CAAC,GAA8B,EAAA;AAC/C,QAAA,IAAI,CAAC,OAAO,GAAG,CAAC,QAAQ,EAAE,GAAG,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;AAC/C,QAAA,IAAI,CAAC,WAAW,GAAG,GAAG,CAAC;KACxB;IAED,IACI,SAAS,CAAC,IAAW,EAAA;QACvB,IAAI,CAAC,WAAW,GAAG,IAAI,kBAAkB,CAAC,IAAI,CAAC,CAAC;QAChD,IAAI,CAAC,WAAW,CAAC,SAAS,GAAG,IAAI,CAAC,SAAS,CAAC;KAC7C;IAED,IACI,UAAU,CAAC,KAAc,EAAA;AAC3B,QAAA,IAAI,CAAC,WAAW,GAAG,KAAK,CAAC;KAC1B;AAED,IAAA,IAAI,UAAU,GAAA;QACZ,OAAO,IAAI,CAAC,WAAW,CAAC;KACzB;AAeD,IAAA,WAAA,GAAA;QAnDA,IAAQ,CAAA,QAAA,GAAY,KAAK,CAAC;QAG1B,IAAQ,CAAA,QAAA,GAAY,KAAK,CAAC;QAS1B,IAAW,CAAA,WAAA,GAAW,QAAQ,CAAC;QAG/B,IAAa,CAAA,aAAA,GAAW,UAAU,CAAC;QAuB3B,IAAW,CAAA,WAAA,GAAG,KAAK,CAAC;AAG5B,QAAA,IAAA,CAAA,iBAAiB,GAAwB,IAAI,YAAY,EAAS,CAAC;AAOnE,QAAA,IAAA,CAAA,MAAM,GAAuB,IAAI,kBAAkB,CAAC,EAAE,CAAC,CAAC;QACxD,IAAW,CAAA,WAAA,GAAU,EAAE,CAAC;KAER;IAEhB,QAAQ,GAAA;QACN,IAAI,CAAC,MAAM,CAAC,YAAY,CAAC,SAAS,CAAC,GAAG,IAAG;AACvC,YAAA,IAAI,CAAC,WAAW,CAAC,MAAM,GAAG,GAAG,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;AACrD,SAAC,CAAC,CAAC;QACH,UAAU,CAAC,MAAK;AACd,YAAA,IAAI,IAAI,CAAC,aAAa,EAAE;gBACtB,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;AACzC,gBAAA,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;aAClC;SACF,EAAE,IAAI,CAAC,CAAC;KACV;IAED,WAAW,GAAA;AACT,QAAA,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;KAC1B;AAED,IAAA,QAAQ,CAAC,GAAQ,EAAA;AACf,QAAA,MAAM,KAAK,GAAG,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,MAAM,IAAI,MAAM,KAAK,GAAG,CAAC,CAAC;QAC9D,IAAI,KAAK,EAAE;AACT,YAAA,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,MAAM,IAAI,MAAM,KAAK,GAAG,CAAC,CAAC;SACtE;aAAM;AACL,YAAA,IAAI,IAAI,CAAC,QAAQ,EAAE;AACjB,gBAAA,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;aAC5B;iBAAM;AACL,gBAAA,IAAI,CAAC,WAAW,GAAG,CAAC,GAAG,CAAC,CAAC;aAC1B;SACF;QACD,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;KAC/C;AAED,IAAA,cAAc,CAAC,GAAQ,EAAA;AACrB,QAAA,OAAO,CAAC,CAAC,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,SAAS,IAAI,SAAS,KAAK,GAAG,CAAC,CAAC;KAChE;+GA5FU,oBAAoB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA,EAAA;mGAApB,oBAAoB,EAAA,QAAA,EAAA,qBAAA,EAAA,MAAA,EAAA,EAAA,KAAA,EAAA,OAAA,EAAA,QAAA,EAAA,UAAA,EAAA,QAAA,EAAA,UAAA,EAAA,YAAA,EAAA,cAAA,EAAA,aAAA,EAAA,eAAA,EAAA,WAAA,EAAA,aAAA,EAAA,aAAA,EAAA,eAAA,EAAA,cAAA,EAAA,gBAAA,EAAA,SAAA,EAAA,WAAA,EAAA,UAAA,EAAA,YAAA,EAAA,EAAA,OAAA,EAAA,EAAA,iBAAA,EAAA,mBAAA,EAAA,EAAA,WAAA,EAAA,CAAA,EAAA,YAAA,EAAA,WAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EACpB,YAAY,EAAA,WAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,ECrBzB,8lDAiDA,EAAA,MAAA,EAAA,CAAA,2FAAA,EAAA,6zQAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,UAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,SAAA,EAAA,SAAA,EAAA,UAAA,CAAA,EAAA,QAAA,EAAA,CAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,IAAA,CAAA,QAAA,EAAA,QAAA,EAAA,6BAAA,EAAA,QAAA,EAAA,CAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,gBAAA,EAAA,QAAA,EAAA,oBAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,eAAA,EAAA,QAAA,EAAA,mBAAA,EAAA,MAAA,EAAA,CAAA,iBAAA,EAAA,uBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,YAAA,EAAA,QAAA,EAAA,gBAAA,EAAA,MAAA,EAAA,CAAA,cAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,UAAA,EAAA,QAAA,EAAA,cAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,SAAA,EAAA,QAAA,EAAA,aAAA,EAAA,MAAA,EAAA,CAAA,kBAAA,EAAA,eAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,aAAA,EAAA,QAAA,EAAA,sCAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,OAAA,EAAA,QAAA,EAAA,wBAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,YAAA,EAAA,QAAA,EAAA,oCAAA,EAAA,QAAA,EAAA,CAAA,cAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,MAAA,EAAA,QAAA,EAAA,sBAAA,EAAA,QAAA,EAAA,CAAA,QAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,YAAA,EAAA,QAAA,EAAA,eAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,WAAA,EAAA,QAAA,EAAA,UAAA,EAAA,iBAAA,EAAA,cAAA,EAAA,sBAAA,EAAA,cAAA,EAAA,UAAA,CAAA,EAAA,OAAA,EAAA,CAAA,MAAA,CAAA,EAAA,QAAA,EAAA,CAAA,cAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,IAAA,CAAA,YAAA,EAAA,QAAA,EAAA,gBAAA,EAAA,MAAA,EAAA,CAAA,oBAAA,EAAA,OAAA,EAAA,YAAA,EAAA,YAAA,EAAA,iBAAA,EAAA,WAAA,CAAA,EAAA,QAAA,EAAA,CAAA,cAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,EAAA,CAAA,QAAA,EAAA,QAAA,EAAA,yHAAA,EAAA,MAAA,EAAA,CAAA,UAAA,EAAA,IAAA,EAAA,aAAA,EAAA,MAAA,EAAA,UAAA,EAAA,MAAA,EAAA,mBAAA,EAAA,kBAAA,EAAA,OAAA,EAAA,UAAA,CAAA,EAAA,QAAA,EAAA,CAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,oBAAA,EAAA,QAAA,EAAA,8MAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,eAAA,EAAA,QAAA,EAAA,2CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,oBAAA,EAAA,QAAA,EAAA,eAAA,EAAA,MAAA,EAAA,CAAA,aAAA,EAAA,UAAA,EAAA,SAAA,CAAA,EAAA,OAAA,EAAA,CAAA,eAAA,CAAA,EAAA,QAAA,EAAA,CAAA,QAAA,CAAA,EAAA,CAAA,EAAA,CAAA,CAAA,EAAA;;4FD7Ba,oBAAoB,EAAA,UAAA,EAAA,CAAA;kBARhC,SAAS;+BACE,qBAAqB,EAAA,QAAA,EAAA,8lDAAA,EAAA,MAAA,EAAA,CAAA,2FAAA,EAAA,6zQAAA,CAAA,EAAA,CAAA;wDAQN,SAAS,EAAA,CAAA;sBAAjC,SAAS;uBAAC,YAAY,CAAA;gBAGvB,KAAK,EAAA,CAAA;sBADJ,KAAK;gBAIN,QAAQ,EAAA,CAAA;sBADP,KAAK;gBAIN,QAAQ,EAAA,CAAA;sBADP,KAAK;gBAIN,YAAY,EAAA,CAAA;sBADX,KAAK;gBAIN,aAAa,EAAA,CAAA;sBADZ,KAAK;gBAIN,WAAW,EAAA,CAAA;sBADV,KAAK;gBAIN,aAAa,EAAA,CAAA;sBADZ,KAAK;gBAIF,cAAc,EAAA,CAAA;sBADjB,KAAK;gBAOF,SAAS,EAAA,CAAA;sBADZ,KAAK;gBAOF,UAAU,EAAA,CAAA;sBADb,KAAK;gBAYN,iBAAiB,EAAA,CAAA;sBADhB,MAAM;;;ME8EI,4BAA4B,CAAA;AAqBvC,IAAA,WAAA,CACU,mBAAgD,EAChD,EAA0B,EAC1B,iBAAoC,EAAA;QAFpC,IAAmB,CAAA,mBAAA,GAAnB,mBAAmB,CAA6B;QAChD,IAAE,CAAA,EAAA,GAAF,EAAE,CAAwB;QAC1B,IAAiB,CAAA,iBAAA,GAAjB,iBAAiB,CAAmB;AAvB9C,QAAA,IAAA,CAAA,MAAM,GAAG,KAAK,CAAC,QAAQ,EAAkC,CAAC;AAC1D,QAAA,IAAA,CAAA,WAAW,GAAG,KAAK,CAAwB,EAA2B,CAAC,CAAC;QAExE,IAAkB,CAAA,kBAAA,GAAG,MAAM,EAAyB,CAAC;;AAGrD,QAAA,IAAA,CAAA,YAAY,GAAG,QAAQ,CAAC,MAAM,IAAI,CAAC,mBAAmB,CAAC,eAAe,EAAE,EAAE,CAAC,CAAC;AAE5E,QAAA,IAAA,CAAA,SAAS,GAAG,IAAI,CAAC,EAAE,CAAC,KAAK,CAAC;AACxB,YAAA,SAAS,EAAE;AACT,gBAAA,KAAK,EAAsC,UAAU;AACrD,gBAAA,QAAQ,EAAE,IAAI;AACf,aAAA;AACD,YAAA,KAAK,EAA0B,EAAE;AACjC,YAAA,QAAQ,EAAe,IAAI;AAC3B,YAAA,MAAM,EAAe,IAAI;AAC1B,SAAA,CAAC,CAAC;QAEK,IAAqB,CAAA,qBAAA,GAAG,KAAK,CAAC;;QAQpC,MAAM,CAAC,MAAK;AACV,YAAA,MAAM,MAAM,GAAG,IAAI,CAAC,WAAW,EAAE,CAAC;AAClC,YAAA,IAAI,MAAM,IAAI,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,MAAM,GAAG,CAAC,EAAE;AAC5C,gBAAA,IAAI,CAAC,qBAAqB,GAAG,IAAI,CAAC;AAClC,gBAAA,IAAI,CAAC,cAAc,CAAC,MAAM,CAAC,CAAC;AAC5B,gBAAA,IAAI,CAAC,qBAAqB,GAAG,KAAK,CAAC;aACpC;AACH,SAAC,EAAE,EAAC,iBAAiB,EAAE,IAAI,EAAC,CAAC,CAAC;;QAG9B,MAAM,CAAC,MAAK;;YAEV,IAAI,CAAC,SAAS,CAAC,YAAY,CAAC,SAAS,CAAC,MAAK;AACzC,gBAAA,IAAI,CAAC,IAAI,CAAC,qBAAqB,EAAE;oBAC/B,IAAI,CAAC,2BAA2B,EAAE,CAAC;iBACpC;AACH,aAAC,CAAC,CAAC;AACL,SAAC,EAAE,EAAC,iBAAiB,EAAE,IAAI,EAAC,CAAC,CAAC;KAC/B;AAEO,IAAA,cAAc,CAAC,cAAqC,EAAA;QAC1D,IAAI,cAAc,EAAE;AAClB,YAAA,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,SAAS,CAAC,QAAQ,CAAC,cAAc,CAAC,SAAS,EAAE;AACnE,gBAAA,SAAS,EAAE,KAAK;AACjB,aAAA,CAAC,CAAC;YAEH,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC,UAAU,KAAK,MAAM,EAAE;AACvC,gBAAA,MAAM,QAAQ,GAAG,cAAc,CAAC,KAAuC,CAAC;AACxE,gBAAA,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,QAAQ,CAAC,QAAQ,CACvC,QAAQ,CAAC,CAAC,CAAC,GAAG,IAAI,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAE,CAAC,GAAG,IAAI,EAC3C,EAAE,SAAS,EAAE,KAAK,EAAE,CACrB,CAAC;AACF,gBAAA,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,MAAM,CAAC,QAAQ,CACrC,QAAQ,CAAC,CAAC,CAAC,GAAG,IAAI,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,GAAG,IAAI,EAC1C,EAAE,SAAS,EAAE,KAAK,EAAE,CACrB,CAAC;aACH;AAAM,iBAAA,IACL,IAAI,CAAC,MAAM,EAAE,CAAC,UAAU,KAAK,SAAS;gBACtC,IAAI,CAAC,MAAM,EAAE,CAAC,UAAU,KAAK,QAAQ,EACrC;gBACA,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,KAAK,CAAC,QAAQ,EAClC,cAAc,CAAC,KAA0C,IAAI,IAAI,GACnE,EAAE,SAAS,EAAE,KAAK,EAAE,CACrB,CAAC;aACH;iBAAM;AACL,gBAAA,MAAM,KAAK,GAAG,cAAc,CAAC,KAA+B,CAAC;AAC7D,gBAAA,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,KAAK,CAAC,QAAQ,EACnC,KAAK,KAAK,IAAI,IAAI,KAAK,KAAK,SAAS,GAAG,EAAE,GAAG,KAAK,GACnD,EAAE,SAAS,EAAE,KAAK,EAAE,CACrB,CAAC;aACH;AAED,YAAA,IAAI,CAAC,iBAAiB,CAAC,YAAY,EAAE,CAAC;SACvC;KACF;IAEO,2BAA2B,GAAA;QACjC,IAAI,QAAQ,GAAmC,IAAI,CAAC;QACpD,MAAM,YAAY,GAAG,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,KAAK,CAAC,KAAK,CAAC;QAEzD,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC,UAAU,KAAK,MAAM,EAAE;AACvC,YAAA,QAAQ,GAAG;AACT,gBAAA,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,QAAQ,CAAC,KAAK,CAAC;AAC/D,gBAAA,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,MAAM,CAAC,KAAK,CAAC;aAC5B,CAAC;SACrC;AAED,QAAA,IACE,IAAI,CAAC,MAAM,EAAE,CAAC,UAAU,KAAK,SAAS;YACtC,IAAI,CAAC,MAAM,EAAE,CAAC,UAAU,KAAK,QAAQ,EACrC;YACA,QAAQ;AACN,gBAAA,CAAC,YAAY,KAAK,IAAI,IAAI,YAAY,KAAK,SAAS;AAClD,sBAAE,IAAI;AACN,sBAAG,YAA+C,KAAK,IAAI,CAAC;SACjE;aAAM,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC,UAAU,KAAK,MAAM,EAAE;YAC9C,QAAQ;AACN,gBAAA,YAAY,KAAK,IAAI,IAAI,YAAY,KAAK,SAAS;AACjD,sBAAG,EAAqC;sBACrC,YAA+C,CAAC;SACxD;AAED,QAAA,MAAM,SAAS,GAA0B;YACvC,SAAS,EAAE,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,SAAS,CAAC,KAAK;AAClD,YAAA,KAAK,EAAE,QAAQ;SAChB,CAAC;AAEF,QAAA,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;KACzC;AAEO,IAAA,kBAAkB,CAAC,IAAiB,EAAA;AAC1C,QAAA,IAAI,CAAC,IAAI;AAAE,YAAA,OAAO,IAAI,CAAC;AAEvB,QAAA,MAAM,IAAI,GAAG,IAAI,CAAC,WAAW,EAAE,CAAC;QAChC,MAAM,KAAK,GAAG,CAAC,IAAI,CAAC,QAAQ,EAAE,GAAG,CAAC,EAAE,QAAQ,EAAE,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;AAChE,QAAA,MAAM,GAAG,GAAG,IAAI,CAAC,OAAO,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;AAEvD,QAAA,OAAO,GAAG,IAAI,CAAA,CAAA,EAAI,KAAK,CAAI,CAAA,EAAA,GAAG,EAAE,CAAC;KAClC;+GA7HU,4BAA4B,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAAC,2BAAA,EAAA,EAAA,EAAA,KAAA,EAAAJ,EAAA,CAAA,sBAAA,EAAA,EAAA,EAAA,KAAA,EAAA,EAAA,CAAA,iBAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA,EAAA;AAA5B,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,4BAA4B,EA7H7B,QAAA,EAAA,8BAAA,EAAA,MAAA,EAAA,EAAA,MAAA,EAAA,EAAA,iBAAA,EAAA,QAAA,EAAA,UAAA,EAAA,QAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,WAAA,EAAA,EAAA,iBAAA,EAAA,aAAA,EAAA,UAAA,EAAA,aAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,OAAA,EAAA,EAAA,kBAAA,EAAA,oBAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EAAA,CAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA6FT,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,MAAA,EAAA,CAAA,0JAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,IAAA,CAAA,YAAA,EAAA,QAAA,EAAA,gBAAA,EAAA,MAAA,EAAA,CAAA,oBAAA,EAAA,OAAA,EAAA,YAAA,EAAA,YAAA,EAAA,iBAAA,EAAA,WAAA,CAAA,EAAA,QAAA,EAAA,CAAA,cAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,QAAA,EAAA,QAAA,EAAA,WAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,SAAA,EAAA,QAAA,EAAA,+CAAA,EAAA,MAAA,EAAA,CAAA,eAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAI,EAAA,CAAA,QAAA,EAAA,QAAA,EAAA,yHAAA,EAAA,MAAA,EAAA,CAAA,UAAA,EAAA,IAAA,EAAA,aAAA,EAAA,MAAA,EAAA,UAAA,EAAA,MAAA,EAAA,mBAAA,EAAA,kBAAA,EAAA,OAAA,EAAA,UAAA,CAAA,EAAA,QAAA,EAAA,CAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAL,EAAA,CAAA,aAAA,EAAA,QAAA,EAAA,8CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,EAAA,CAAA,oBAAA,EAAA,QAAA,EAAA,8MAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,EAAA,CAAA,eAAA,EAAA,QAAA,EAAA,2CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,EAAA,CAAA,oBAAA,EAAA,QAAA,EAAA,0FAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,EAAA,CAAA,kBAAA,EAAA,QAAA,EAAA,aAAA,EAAA,MAAA,EAAA,CAAA,WAAA,CAAA,EAAA,OAAA,EAAA,CAAA,UAAA,CAAA,EAAA,QAAA,EAAA,CAAA,QAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,EAAA,CAAA,eAAA,EAAA,QAAA,EAAA,mBAAA,EAAA,MAAA,EAAA,CAAA,iBAAA,EAAA,UAAA,EAAA,SAAA,CAAA,EAAA,OAAA,EAAA,CAAA,eAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAE,EAAA,CAAA,SAAA,EAAA,QAAA,EAAA,YAAA,EAAA,MAAA,EAAA,CAAA,kBAAA,EAAA,YAAA,EAAA,UAAA,EAAA,eAAA,EAAA,UAAA,EAAA,8BAAA,EAAA,aAAA,EAAA,UAAA,EAAA,UAAA,EAAA,wBAAA,EAAA,aAAA,EAAA,OAAA,EAAA,YAAA,EAAA,iBAAA,EAAA,mBAAA,EAAA,2BAAA,EAAA,gBAAA,EAAA,IAAA,EAAA,YAAA,CAAA,EAAA,OAAA,EAAA,CAAA,cAAA,EAAA,QAAA,EAAA,QAAA,EAAA,iBAAA,EAAA,aAAA,CAAA,EAAA,QAAA,EAAA,CAAA,WAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,SAAA,EAAA,QAAA,EAAA,YAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,IAAA,EAAA,UAAA,CAAA,EAAA,OAAA,EAAA,CAAA,mBAAA,CAAA,EAAA,QAAA,EAAA,CAAA,WAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAI,IAAA,CAAA,aAAA,EAAA,QAAA,EAAA,gBAAA,EAAA,QAAA,EAAA,CAAA,eAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,kBAAA,EAAA,QAAA,EAAA,sBAAA,EAAA,MAAA,EAAA,CAAA,eAAA,EAAA,KAAA,EAAA,KAAA,EAAA,qBAAA,CAAA,EAAA,QAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,mBAAA,EAAA,QAAA,EAAA,uBAAA,EAAA,MAAA,EAAA,CAAA,KAAA,EAAA,UAAA,EAAA,YAAA,EAAA,UAAA,EAAA,eAAA,CAAA,EAAA,QAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA,CAAA,EAAA;;4FAgCU,4BAA4B,EAAA,UAAA,EAAA,CAAA;kBA/HxC,SAAS;AACE,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,8BAA8B,EAC9B,QAAA,EAAA,CAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA6FT,EA8BgB,eAAA,EAAA,uBAAuB,CAAC,MAAM,EAAA,MAAA,EAAA,CAAA,0JAAA,CAAA,EAAA,CAAA;;;MCxHpC,kCAAkC,CAAA;AAN/C,IAAA,WAAA,GAAA;AAOS,QAAA,IAAA,CAAA,UAAU,GAAG,MAAM,CAGvB,eAAe,CAAC,CAAC;AAEb,QAAA,IAAA,CAAA,SAAS,GAAG,MAAM,EACvB,YAGC,EACF,CAAC;AAEM,QAAA,IAAA,CAAA,mBAAmB,GAAG,MAAM,CAAC,2BAA2B,CAAC,CAAC;;AAGlE,QAAA,IAAA,CAAA,YAAY,GAAG,QAAQ,CAAC,MAAM,IAAI,CAAC,mBAAmB,CAAC,eAAe,EAAE,EAAE,CAAC,CAAC;AAE5E,QAAA,IAAA,CAAA,aAAa,GAAG,MAAM,CAAmC,EAAE,CAAC,CAAC;AAC7D,QAAA,IAAA,CAAA,UAAU,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC;AAC1B,QAAA,IAAA,CAAA,YAAY,GAAG,MAAM,CAA2C,EAAE,CAAC,CAAC;AA6IrE,KAAA;AA3IC,IAAA,cAAc,CAAC,MAAsC,EAAA;QACnD,MAAM,MAAM,GAAG,IAAI,CAAC,YAAY,EAAE,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;AACjD,QAAA,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;AAC1B,QAAA,OAAO,CAAC,GAAG,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;AAC3B,QAAA,IAAI,MAAM,EAAE,KAAK,KAAK,IAAI,IAAI,MAAM,EAAE,KAAK,KAAK,SAAS,IAAI,MAAM,EAAE,KAAK,KAAK,EAAE;AAAE,YAAA,OAAO,KAAK,CAAC;AAEhG,QAAA,IAAI,MAAM,CAAC,UAAU,KAAK,MAAM,EAAE;AAChC,YAAA,MAAM,UAAU,GAAG,MAAM,CAAC,KAAuC,CAAC;AAClE,YAAA,OAAO,CAAC,EAAE,UAAU,GAAG,CAAC,CAAC,IAAI,UAAU,GAAG,CAAC,CAAC,CAAC,CAAC;SAC/C;AAED,QAAA,OAAO,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC;KACvB;IAED,QAAQ,GAAA;;QAEN,MAAM,cAAc,GAA6C,EAAE,CAAC;AAEpE,QAAA,MAAM,OAAO,GAAG,IAAI,CAAC,UAAU,CAAC,OAAO;aACpC,MAAM,CAAC,MAAM,IAAI,MAAM,CAAC,MAAM,CAAC;aAC/B,GAAG,CAAC,GAAG,IAAG;;AAET,YAAA,cAAc,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG;gBAC1B,KAAK,EAAE,IAAI,CAAC,qBAAqB,CAAC,GAAG,CAAC,UAAW,CAAC;gBAClD,SAAS,EAAE,kCAAkC,CAAC,sBAAsB,CAClE,GAAG,CAAC,UAAW,CAChB;aACF,CAAC;YAEF,OAAO;AACL,gBAAA,GAAG,GAAG;AACN,gBAAA,QAAQ,EAAE,IAAI;aACf,CAAC;AACJ,SAAC,CAAC,CAAC;AAEL,QAAA,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;;AAGhC,QAAA,IAAI,IAAI,CAAC,UAAU,CAAC,WAAW,EAAE;AAC/B,YAAA,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,UAAU,CAAC,WAAW,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,EAAE,MAAM,CAAC,KAAI;AACpE,gBAAA,IAAI,MAAM,CAAC,KAAK,KAAK,IAAI,IAAI,MAAM,CAAC,KAAK,KAAK,SAAS,EAAE;oBACvD,cAAc,CAAC,GAAG,CAAC,GAAG,EAAE,GAAG,MAAM,EAAE,CAAC;iBACrC;AACH,aAAC,CAAC,CAAC;SACJ;AAED,QAAA,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,cAAc,CAAC,CAAC;KACvC;AAED,IAAA,WAAW,CAAC,MAAsC,EAAA;QAChD,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,OAAO,KAAK;AACnC,YAAA,GAAG,OAAO;AACV,YAAA,CAAC,MAAM,CAAC,KAAK,GAAG;gBACd,KAAK,EAAE,IAAI,CAAC,qBAAqB,CAAC,MAAM,CAAC,UAAW,CAAC;gBACrD,SAAS,EAAE,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,SAAS;AAC3C,aAAA;AACF,SAAA,CAAC,CAAC,CAAC;KACL;IAED,eAAe,GAAA;QACb,IAAI,CAAC,aAAa,EAAE,CAAC,OAAO,CAAC,MAAM,IAAG;AACpC,YAAA,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC;AAC3B,SAAC,CAAC,CAAC;KACJ;IAED,cAAc,GAAA;AACZ,QAAA,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,OAAO,IAC/B,OAAO,CAAC,GAAG,CAAC,MAAM,KAAK,EAAE,GAAG,MAAM,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC,CACvD,CAAC;AACF,QAAA,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;KAC3B;IAED,cAAc,GAAA;AACZ,QAAA,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,OAAO,IAC/B,OAAO,CAAC,GAAG,CAAC,MAAM,KAAK,EAAE,GAAG,MAAM,EAAE,QAAQ,EAAE,KAAK,EAAE,CAAC,CAAC,CACxD,CAAC;AACF,QAAA,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;KAC5B;IAED,WAAW,GAAA;;QAET,MAAM,YAAY,GAAG,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,YAAY,EAAE,CAAC,CAAC,MAAM,CAC7D,CAAC,GAAG,EAAE,CAAC,GAAG,EAAE,MAAM,CAAC,KAAI;YACrB,MAAM,QAAQ,GAAG,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC;AAC1C,kBAAE,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,KAAK,SAAS,CAAC;AACvD,kBAAE,MAAM,CAAC,KAAK,KAAK,IAAI;oBACrB,MAAM,CAAC,KAAK,KAAK,SAAS;AAC1B,oBAAA,MAAM,CAAC,KAAK,KAAK,EAAE,CAAC;YAExB,IAAI,QAAQ,EAAE;AACZ,gBAAA,GAAG,CAAC,GAAG,CAAC,GAAG,MAAM,CAAC;aACnB;AACD,YAAA,OAAO,GAAG,CAAC;SACZ,EACD,EAA8C,CAC/C,CAAC;QAEF,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,EAAE,OAAO,EAAE,YAAY,EAAE,CAAC,CAAC;KACjD;IAED,kBAAkB,CAChB,MAAsC,EACtC,SAAgC,EAAA;QAEhC,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,OAAO,KAAK;AACnC,YAAA,GAAG,OAAO;AACV,YAAA,CAAC,MAAM,CAAC,KAAK,GAAG,SAAS;AAC1B,SAAA,CAAC,CAAC,CAAC;KACL;AAEO,IAAA,qBAAqB,CAC3B,UAAsC,EAAA;QAEtC,QAAQ,UAAU;AAChB,YAAA,KAAK,MAAM;AACT,gBAAA,OAAO,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;AACtB,YAAA,KAAK,SAAS,CAAC;AACf,YAAA,KAAK,QAAQ;AACX,gBAAA,OAAO,IAAI,CAAC;AACd,YAAA;AACE,gBAAA,OAAO,EAAE,CAAC;SACb;KACF;IAED,OAAO,sBAAsB,CAC3B,UAAsC,EAAA;AAEtC,QAAA,IAAI,UAAU,KAAK,MAAM,EAAE;AACzB,YAAA,OAAO,SAAS,CAAC;SAClB;aAAM,IACL,UAAU,KAAK,QAAQ;AACvB,YAAA,UAAU,KAAK,SAAS;YACxB,UAAU,KAAK,QAAQ,EACvB;AACA,YAAA,OAAO,OAAO,CAAC;SAChB;aAAM;AACL,YAAA,OAAO,UAAU,CAAC;SACnB;KACF;+GAhKU,kCAAkC,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA,EAAA;AAAlC,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,kCAAkC,uECvB/C,yrFAwFA,EAAA,MAAA,EAAA,CAAA,ivBAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,SAAA,EAAA,QAAA,EAAA,6GAAA,EAAA,QAAA,EAAA,CAAA,WAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,aAAA,EAAA,QAAA,EAAA,yBAAA,EAAA,QAAA,EAAA,CAAA,WAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,UAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,SAAA,EAAA,SAAA,EAAA,UAAA,CAAA,EAAA,QAAA,EAAA,CAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAD,IAAA,CAAA,UAAA,EAAA,QAAA,EAAA,cAAA,EAAA,MAAA,EAAA,CAAA,oBAAA,EAAA,4BAAA,EAAA,oBAAA,EAAA,qBAAA,EAAA,qBAAA,EAAA,yBAAA,EAAA,YAAA,EAAA,iBAAA,CAAA,EAAA,QAAA,EAAA,CAAA,YAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAH,IAAA,CAAA,cAAA,EAAA,QAAA,EAAA,sCAAA,EAAA,MAAA,EAAA,CAAA,YAAA,EAAA,MAAA,EAAA,kBAAA,EAAA,gBAAA,CAAA,EAAA,QAAA,EAAA,CAAA,gBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,cAAA,EAAA,QAAA,EAAA,sCAAA,EAAA,MAAA,EAAA,CAAA,IAAA,CAAA,EAAA,QAAA,EAAA,CAAA,gBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,gBAAA,EAAA,QAAA,EAAA,8DAAA,EAAA,MAAA,EAAA,CAAA,OAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,gBAAA,EAAA,QAAA,EAAA,8DAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAK,4BAAA,EAAA,QAAA,EAAA,8BAAA,EAAA,MAAA,EAAA,CAAA,QAAA,EAAA,aAAA,CAAA,EAAA,OAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA,CAAA,EAAA;;4FDjEa,kCAAkC,EAAA,UAAA,EAAA,CAAA;kBAN9C,SAAS;+BACE,iCAAiC,EAAA,eAAA,EAG1B,uBAAuB,CAAC,MAAM,EAAA,QAAA,EAAA,yrFAAA,EAAA,MAAA,EAAA,CAAA,ivBAAA,CAAA,EAAA,CAAA;;;MEJpC,uCAAuC,CAAA;AANpD,IAAA,WAAA,GAAA;AAOS,QAAA,IAAA,CAAA,UAAU,GAAG,MAAM,CAEvB,eAAe,CAAC,CAAC;AAEb,QAAA,IAAA,CAAA,SAAS,GAAG,MAAM,EACvB,YAGC,EACF,CAAC;AAEK,QAAA,IAAA,CAAA,oBAAoB,GAAG,MAAM,CAAC,2BAA2B,CAAC,CAAC;;QAGlE,IAAO,CAAA,OAAA,GAAG,MAAM,CACd,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,GAAG,CAAC,MAAM,KAAK,EAAE,GAAG,MAAM,EAAE,CAAC,CAAC,CACvD,CAAC;AAeH,KAAA;AAbC,IAAA,IAAI,CAAC,KAA4B,EAAA;AAC/B,QAAA,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,IAAG;AACzB,YAAA,MAAM,OAAO,GAAG,CAAC,GAAG,IAAI,CAAC,CAAC;YAC1B,eAAe,CAAC,OAAO,EAAE,KAAK,CAAC,aAAa,EAAE,KAAK,CAAC,YAAY,CAAC,CAAC;AAClE,YAAA,OAAO,OAAO,CAAC;AACjB,SAAC,CAAC,CAAC;KACJ;IAED,SAAS,GAAA;AACP,QAAA,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC;AACnB,YAAA,YAAY,EAAE,IAAI,CAAC,OAAO,EAAE,CAAC,GAAG,CAAC,MAAM,IAAI,MAAM,CAAC,KAAK,CAAC;AACzD,SAAA,CAAC,CAAC;KACJ;+GA/BU,uCAAuC,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA,EAAA;AAAvC,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,uCAAuC,6ECjBpD,6nCAgCA,EAAA,MAAA,EAAA,CAAA,ujCAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,EAAA,CAAA,SAAA,EAAA,QAAA,EAAA,6GAAA,EAAA,QAAA,EAAA,CAAA,WAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAR,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,UAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,SAAA,EAAA,SAAA,EAAA,UAAA,CAAA,EAAA,QAAA,EAAA,CAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,IAAA,CAAA,cAAA,EAAA,QAAA,EAAA,sCAAA,EAAA,MAAA,EAAA,CAAA,YAAA,EAAA,MAAA,EAAA,kBAAA,EAAA,gBAAA,CAAA,EAAA,QAAA,EAAA,CAAA,gBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,cAAA,EAAA,QAAA,EAAA,sCAAA,EAAA,MAAA,EAAA,CAAA,IAAA,CAAA,EAAA,QAAA,EAAA,CAAA,gBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,gBAAA,EAAA,QAAA,EAAA,8DAAA,EAAA,MAAA,EAAA,CAAA,OAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,gBAAA,EAAA,QAAA,EAAA,8DAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAI,IAAA,CAAA,WAAA,EAAA,QAAA,EAAA,8BAAA,EAAA,MAAA,EAAA,CAAA,wBAAA,EAAA,iBAAA,EAAA,wBAAA,EAAA,IAAA,EAAA,qBAAA,EAAA,qBAAA,EAAA,4BAAA,EAAA,2BAAA,EAAA,0BAAA,EAAA,+BAAA,EAAA,2BAAA,EAAA,6BAAA,CAAA,EAAA,OAAA,EAAA,CAAA,oBAAA,EAAA,oBAAA,EAAA,mBAAA,EAAA,mBAAA,CAAA,EAAA,QAAA,EAAA,CAAA,aAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,OAAA,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,aAAA,EAAA,iBAAA,EAAA,oBAAA,EAAA,iBAAA,EAAA,mBAAA,EAAA,yBAAA,EAAA,iBAAA,EAAA,0BAAA,EAAA,qBAAA,EAAA,yBAAA,EAAA,cAAA,CAAA,EAAA,OAAA,EAAA,CAAA,gBAAA,EAAA,iBAAA,EAAA,cAAA,EAAA,gBAAA,EAAA,eAAA,EAAA,gBAAA,EAAA,cAAA,CAAA,EAAA,QAAA,EAAA,CAAA,SAAA,CAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA,CAAA,EAAA;;4FDfa,uCAAuC,EAAA,UAAA,EAAA,CAAA;kBANnD,SAAS;+BACE,uCAAuC,EAAA,eAAA,EAGhC,uBAAuB,CAAC,MAAM,EAAA,QAAA,EAAA,6nCAAA,EAAA,MAAA,EAAA,CAAA,ujCAAA,CAAA,EAAA,CAAA;;;AEqB3C,MAAO,6BACX,SAAQ,2BAA2B,CAAA;AAPrC,IAAA,WAAA,GAAA;;AAUS,QAAA,IAAA,CAAA,mBAAmB,GAAG,MAAM,CAAC,2BAA2B,CAAC,CAAC;AACzD,QAAA,IAAA,CAAA,MAAM,GAAG,MAAM,CAAC,SAAS,CAAC,CAAC;QAEnC,IAAgB,CAAA,gBAAA,GAAG,KAAK,EAAW,CAAC;AACpC,QAAA,IAAA,CAAA,UAAU,GAAG,KAAK,CAAC,EAAE,CAAC,CAAC;AACvB,QAAA,IAAA,CAAA,gBAAgB,GAAG,KAAK,CAAU,IAAI,CAAC,CAAC;AACxC,QAAA,IAAA,CAAA,mBAAmB,GAAG,KAAK,CAAU,IAAI,CAAC,CAAC;AAC3C,QAAA,IAAA,CAAA,gBAAgB,GAAG,KAAK,CAAC,EAAE,CAAC,CAAC;AAC7B,QAAA,IAAA,CAAA,WAAW,GAAG,KAAK,CAA2C,EAAE,CAAC,CAAC;AAClE,QAAA,IAAA,CAAA,gBAAgB,GAAG,KAAK,CAAU,KAAK,CAAC,CAAC;AACzC,QAAA,IAAA,CAAA,iBAAiB,GAAG,KAAK,CAAC,QAAQ,CAAC,CAAC;QACpC,IAAkB,CAAA,kBAAA,GAAG,KAAK,EAA4B,CAAC;AACvD,QAAA,IAAA,CAAA,cAAc,GAAG,KAAK,CAAU,KAAK,CAAC,CAAC;AACvC,QAAA,IAAA,CAAA,mBAAmB,GAAG,KAAK,CAAU,KAAK,CAAC,CAAC;AAC5C,QAAA,IAAA,CAAA,WAAW,GAAG,KAAK,CAAU,KAAK,CAAC,CAAC;QACpC,IAAiB,CAAA,iBAAA,GAAG,KAAK,EAAgC,CAAC;AAC1D,QAAA,IAAA,CAAA,OAAO,GAAG,KAAK,CAAC,EAAE,EAAE;AAClB,YAAA,SAAS,EAAE,CAAC,IAAsC,KAAI;AACpD,gBAAA,IAAI,CAAC,QAAQ,GAAG,IAAI,GAAG,IAAI,GAAG,EAAE,CAAC;gBACjC,IAAI,CAAC,aAAa,EAAE,CAAC;gBACrB,OAAO,IAAI,CAAC,QAAQ,CAAC;aACtB;AACF,SAAA,CAAC,CAAC;QAEK,IAAQ,CAAA,QAAA,GAAqC,EAAE,CAAC;QAExD,IAAkB,CAAA,kBAAA,GAAG,MAAM,EAAuB,CAAC;QACnD,IAAkB,CAAA,kBAAA,GAAG,MAAM,EAAW,CAAC;QACvC,IAAS,CAAA,SAAA,GAAG,MAAM,EAAW,CAAC;QAE9B,IAAgB,CAAA,gBAAA,GAAG,KAAK,CAAC;AAEzB,QAAA,IAAA,CAAA,eAAe,GAAG,IAAI,WAAW,CAAW,EAAE,CAAC,CAAC;AAChD,QAAA,IAAA,CAAA,YAAY,GAAG,IAAI,WAAW,CAAC,EAAE,CAAC,CAAC;AAE3B,QAAA,IAAA,CAAA,aAAa,GAAG,MAAM,CAA2C,EAAE,CAAC,CAAC;;AAG7E,QAAA,IAAA,CAAA,kBAAkB,GAAG,QAAQ,CAAC,MAAK;AACjC,YAAA,MAAM,OAAO,GAAG,IAAI,CAAC,aAAa,EAAE,CAAC;YACrC,OAAO,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,MAAM,CAAC,GAAG,IAAG;gBACvC,MAAM,WAAW,GAAG,OAAO,CAAC,GAAG,CAAC,EAAE,KAAK,CAAC;AACxC,gBAAA,IAAI,KAAK,CAAC,OAAO,CAAC,WAAW,CAAC,EAAE;AAC9B,oBAAA,OAAO,WAAW,CAAC,IAAI,CAAC,KAAK,IAAI,KAAK,KAAK,IAAI,IAAI,KAAK,KAAK,EAAE,CAAC,CAAC;iBAClE;AACD,gBAAA,OAAO,WAAW,KAAK,IAAI,IAAI,WAAW,KAAK,EAAE,CAAC;aACnD,CAAC,CAAC,MAAM,CAAC;AACZ,SAAC,CAAC,CAAC;QAEK,IAAY,CAAA,YAAA,GAAa,EAAE,CAAC;AA6GrC,KAAA;AA5GC,IAAA,IAAY,OAAO,GAAA;AACjB,QAAA,OAAO,IAAI,CAAC,aAAa,EAAE,CAAC;KAC7B;IACD,IAAY,OAAO,CAAC,KAA+C,EAAA;AACjE,QAAA,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;KAC/B;IAED,QAAQ,GAAA;AACN,QAAA,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,IAAI,CAAC,gBAAgB,EAAE,IAAI,EAAE,CAAC,CAAC;QAC1D,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,WAAW,EAAE,IAAI,EAAE,CAAC;;QAGxC,IAAI,CAAC,eAAe,CAAC,YAAY;AAC9B,aAAA,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,YAAY,CAAC,EAAE,YAAY,CAAC,GAAG,CAAC,CAAC;aACrD,SAAS,CAAC,MAAK;YACd,IAAI,CAAC,sBAAsB,EAAE,CAAC;AAChC,SAAC,CAAC,CAAC;QAEL,IAAI,CAAC,YAAY,CAAC,YAAY;AAC3B,aAAA,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,YAAY,CAAC,EAAE,YAAY,CAAC,GAAG,CAAC,CAAC;aACrD,SAAS,CAAC,MAAK;YACd,IAAI,CAAC,sBAAsB,EAAE,CAAC;AAChC,SAAC,CAAC,CAAC;KACN;IAED,gBAAgB,GAAA;AACd,QAAA,IAAI,CAAC,MAAM;aACR,IAAI,CAAC,kCAAkC,EAAE;AACxC,YAAA,IAAI,EAAE;gBACJ,WAAW,EAAE,IAAI,CAAC,OAAO;AACzB,gBAAA,OAAO,EAAE,IAAI,CAAC,OAAO,EAAE;AACxB,aAAA;AACD,YAAA,QAAQ,EAAE,OAAO;AACjB,YAAA,KAAK,EAAE,MAAM;AACb,YAAA,SAAS,EAAE,KAAK;SACjB,CAAC;AACD,aAAA,WAAW,EAAE;AACb,aAAA,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,MAAM,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC;AAC5C,aAAA,SAAS,CAAC,CAAC,GAAoC,KAAI;AAClD,YAAA,IAAI,CAAC,OAAO,GAAG,GAAG,CAAC,OAAO,CAAC;YAC3B,IAAI,CAAC,sBAAsB,EAAE,CAAC;AAChC,SAAC,CAAC,CAAC;KACN;IAED,wBAAwB,GAAA;AACtB,QAAA,IAAI,CAAC,MAAM;aACR,IAAI,CAAC,uCAAuC,EAAE;AAC7C,YAAA,IAAI,EAAE;AACJ,gBAAA,OAAO,EAAE,IAAI,CAAC,OAAO,EAAE;AACxB,aAAA;AACD,YAAA,QAAQ,EAAE,OAAO;AACjB,YAAA,KAAK,EAAE,MAAM;AACb,YAAA,SAAS,EAAE,KAAK;SACjB,CAAC;AACD,aAAA,WAAW,EAAE;AACb,aAAA,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,MAAM,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC;AAC5C,aAAA,SAAS,CAAC,CAAC,MAAkC,KAAI;AAChD,YAAA,IAAI,CAAC,YAAY,GAAG,MAAM,CAAC,YAAY,CAAC;YACxC,IAAI,CAAC,sBAAsB,EAAE,CAAC;AAChC,SAAC,CAAC,CAAC;KACN;IAED,UAAU,GAAA;AACR,QAAA,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;KACpC;IAED,gBAAgB,GAAA;AACd,QAAA,IAAI,IAAI,CAAC,cAAc,EAAE,EAAE;AACzB,YAAA,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;SAC3B;KACF;IAED,mBAAmB,GAAA;AACjB,QAAA,MAAM,MAAM,GAAG,IAAI,CAAC,kBAAkB,EAAE,CAAC;QACzC,IAAI,MAAM,EAAE;AACV,YAAA,MAAM,EAAE,CAAC;SACV;KACF;;;;;;;;;;;;IAcO,sBAAsB,GAAA;AAC5B,QAAA,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC;AAC3B,YAAA,eAAe,EAAE,IAAI,CAAC,eAAe,CAAC,KAAK,IAAI,EAAE;AACjD,YAAA,YAAY,EAAE,IAAI,CAAC,YAAY,CAAC,KAAK,IAAI,EAAE;AAC3C,YAAA,YAAY,EAAE,IAAI,CAAC,YAAY,IAAI,EAAE;YACrC,OAAO,EAAE,IAAI,CAAC,OAAO;AACtB,SAAA,CAAC,CAAC;KACJ;IAEO,aAAa,GAAA;AACnB,QAAA,MAAM,cAAc,GAAG,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,MAAM,IAAI,MAAM,CAAC,MAAM,CAAC,CAAC;QACrE,IAAI,CAAC,gBAAgB,GAAG,cAAc,CAAC,MAAM,GAAG,CAAC,CAAC;AAClD,QAAA,IAAI,CAAC,eAAe,CAAC,QAAQ,CAC3B,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,GAAG,IAAI,GAAG,CAAC,OAAO,CAAC,CAAC,GAAG,CAAC,GAAG,IAAI,GAAG,CAAC,KAAK,CAAC,IAAI,EAAE,CACrE,CAAC;AACF,QAAA,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,GAAG,IAAI,GAAG,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC;KAC/D;+GAjKU,6BAA6B,EAAA,IAAA,EAAA,IAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA,EAAA;AAA7B,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,6BAA6B,wwECpC1C,uqKA4JA,EAAA,MAAA,EAAA,CAAA,sXAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,gBAAA,EAAA,QAAA,EAAA,oBAAA,EAAA,MAAA,EAAA,CAAA,yBAAA,EAAA,kBAAA,EAAA,0BAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,SAAA,EAAA,QAAA,EAAA,6GAAA,EAAA,QAAA,EAAA,CAAA,WAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,aAAA,EAAA,QAAA,EAAA,yBAAA,EAAA,QAAA,EAAA,CAAA,WAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,UAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,SAAA,EAAA,SAAA,EAAA,UAAA,CAAA,EAAA,QAAA,EAAA,CAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,YAAA,EAAA,QAAA,EAAA,gBAAA,EAAA,MAAA,EAAA,CAAA,oBAAA,EAAA,OAAA,EAAA,YAAA,EAAA,YAAA,EAAA,iBAAA,EAAA,WAAA,CAAA,EAAA,QAAA,EAAA,CAAA,cAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,SAAA,EAAA,QAAA,EAAA,+CAAA,EAAA,MAAA,EAAA,CAAA,eAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,QAAA,EAAA,QAAA,EAAA,yHAAA,EAAA,MAAA,EAAA,CAAA,UAAA,EAAA,IAAA,EAAA,aAAA,EAAA,MAAA,EAAA,UAAA,EAAA,MAAA,EAAA,mBAAA,EAAA,kBAAA,EAAA,OAAA,EAAA,UAAA,CAAA,EAAA,QAAA,EAAA,CAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAF,IAAA,CAAA,UAAA,EAAA,QAAA,EAAA,cAAA,EAAA,MAAA,EAAA,CAAA,oBAAA,EAAA,4BAAA,EAAA,oBAAA,EAAA,qBAAA,EAAA,qBAAA,EAAA,yBAAA,EAAA,YAAA,EAAA,iBAAA,CAAA,EAAA,QAAA,EAAA,CAAA,YAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,oBAAA,EAAA,QAAA,EAAA,8MAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,eAAA,EAAA,QAAA,EAAA,2CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,oBAAA,EAAA,QAAA,EAAA,eAAA,EAAA,MAAA,EAAA,CAAA,aAAA,EAAA,UAAA,EAAA,SAAA,CAAA,EAAA,OAAA,EAAA,CAAA,eAAA,CAAA,EAAA,QAAA,EAAA,CAAA,QAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,SAAA,EAAA,QAAA,EAAA,YAAA,EAAA,MAAA,EAAA,CAAA,kBAAA,EAAA,YAAA,EAAA,UAAA,EAAA,eAAA,EAAA,UAAA,EAAA,8BAAA,EAAA,aAAA,EAAA,UAAA,EAAA,UAAA,EAAA,wBAAA,EAAA,aAAA,EAAA,OAAA,EAAA,YAAA,EAAA,iBAAA,EAAA,mBAAA,EAAA,2BAAA,EAAA,gBAAA,EAAA,IAAA,EAAA,YAAA,CAAA,EAAA,OAAA,EAAA,CAAA,cAAA,EAAA,QAAA,EAAA,QAAA,EAAA,iBAAA,EAAA,aAAA,CAAA,EAAA,QAAA,EAAA,CAAA,WAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,gBAAA,EAAA,QAAA,EAAA,oBAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAM,EAAA,CAAA,SAAA,EAAA,QAAA,EAAA,YAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,IAAA,EAAA,UAAA,CAAA,EAAA,OAAA,EAAA,CAAA,mBAAA,CAAA,EAAA,QAAA,EAAA,CAAA,WAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,GAAA,CAAA,QAAA,EAAA,QAAA,EAAA,YAAA,EAAA,MAAA,EAAA,CAAA,eAAA,EAAA,iBAAA,EAAA,kBAAA,EAAA,kBAAA,EAAA,UAAA,EAAA,qBAAA,EAAA,cAAA,EAAA,gBAAA,CAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA,CAAA,EAAA;;4FDxHa,6BAA6B,EAAA,UAAA,EAAA,CAAA;kBANzC,SAAS;+BACE,2BAA2B,EAAA,eAAA,EAGpB,uBAAuB,CAAC,MAAM,EAAA,QAAA,EAAA,uqKAAA,EAAA,MAAA,EAAA,CAAA,sXAAA,CAAA,EAAA,CAAA;;;MEpBpC,kCAAkC,CAAA;AAS7C,IAAA,WAAA,CAAmB,mBAAgD,EAAA;QAAhD,IAAmB,CAAA,mBAAA,GAAnB,mBAAmB,CAA6B;AARnE,QAAA,IAAA,CAAA,cAAc,GAAG,KAAK,CAAC,QAAQ,EAAW,CAAC;AAC3C,QAAA,IAAA,CAAA,gBAAgB,GAAG,KAAK,CAAC,QAAQ,EAAW,CAAC;AAC7C,QAAA,IAAA,CAAA,YAAY,GAAG,KAAK,CAAC,QAAQ,EAAS,CAAC;AACvC,QAAA,IAAA,CAAA,mBAAmB,GAAG,KAAK,CAAC,QAAQ,EAAU,CAAC;QAC/C,IAAqB,CAAA,qBAAA,GAAG,KAAK,EAAwB,CAAC;QAEtD,IAAiB,CAAA,iBAAA,GAAG,MAAM,EAAO,CAAC;KAEqC;IAEvE,mBAAmB,CAAC,KAAU,EAAE,GAAQ,EAAA;AACtC,QAAA,IAAI,CAAC,IAAI,CAAC,gBAAgB,EAAE,IAAI,IAAI,CAAC,YAAY,EAAE,CAAC,MAAM,GAAG,CAAC,EAAE;YAC9D,KAAK,CAAC,eAAe,EAAE,CAAC;SACzB;AAED,QAAA,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;KAClC;+GAjBU,kCAAkC,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAAL,2BAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA,EAAA;AAAlC,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,kCAAkC,u4BCd/C,gtDAmDA,EAAA,MAAA,EAAA,CAAA,0JAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAJ,EAAA,CAAA,gBAAA,EAAA,QAAA,EAAA,oBAAA,EAAA,MAAA,EAAA,CAAA,yBAAA,EAAA,kBAAA,EAAA,0BAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,EAAA,CAAA,SAAA,EAAA,QAAA,EAAA,6GAAA,EAAA,QAAA,EAAA,CAAA,WAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAI,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,UAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,SAAA,EAAA,SAAA,EAAA,UAAA,CAAA,EAAA,QAAA,EAAA,CAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAH,IAAA,CAAA,OAAA,EAAA,QAAA,EAAA,UAAA,EAAA,MAAA,EAAA,CAAA,eAAA,EAAA,YAAA,EAAA,iBAAA,EAAA,kBAAA,EAAA,WAAA,EAAA,WAAA,EAAA,gBAAA,EAAA,aAAA,EAAA,OAAA,EAAA,WAAA,CAAA,EAAA,OAAA,EAAA,CAAA,QAAA,EAAA,OAAA,CAAA,EAAA,QAAA,EAAA,CAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,WAAA,EAAA,QAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,eAAA,CAAA,EAAA,QAAA,EAAA,CAAA,aAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,cAAA,EAAA,QAAA,EAAA,6CAAA,EAAA,MAAA,EAAA,CAAA,sBAAA,EAAA,mBAAA,EAAA,oBAAA,EAAA,4BAAA,CAAA,EAAA,OAAA,EAAA,CAAA,YAAA,EAAA,YAAA,EAAA,YAAA,EAAA,aAAA,CAAA,EAAA,QAAA,EAAA,CAAA,gBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,IAAA,CAAA,OAAA,EAAA,QAAA,EAAA,wDAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,IAAA,EAAA,YAAA,EAAA,kBAAA,EAAA,OAAA,EAAA,OAAA,EAAA,WAAA,EAAA,aAAA,EAAA,eAAA,EAAA,UAAA,CAAA,EAAA,OAAA,EAAA,CAAA,SAAA,EAAA,WAAA,CAAA,EAAA,QAAA,EAAA,CAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,aAAA,EAAA,QAAA,EAAA,iBAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA,CAAA,EAAA;;4FDrCa,kCAAkC,EAAA,UAAA,EAAA,CAAA;kBAN9C,SAAS;+BACE,iCAAiC,EAAA,eAAA,EAG1B,uBAAuB,CAAC,MAAM,EAAA,QAAA,EAAA,gtDAAA,EAAA,MAAA,EAAA,CAAA,0JAAA,CAAA,EAAA,CAAA;;;MEPpC,6BAA6B,CAAA;AACxC,IAAA,WAAA,GAAA,GAAgB;AAEhB,IAAA,SAAS,CAAC,KAAuC,EAAA;QAC/C,IAAI,KAAK,EAAE;AACT,YAAA,IAAI,GAAW,EAAE,KAAa,EAAE,IAAY,CAAC;AAE7C,YAAA,IAAI,KAAK,YAAY,IAAI,EAAE;AACzB,gBAAA,GAAG,GAAG,KAAK,CAAC,OAAO,EAAE,CAAC;AACtB,gBAAA,KAAK,GAAG,KAAK,CAAC,QAAQ,EAAE,GAAG,CAAC,CAAC;AAC7B,gBAAA,IAAI,GAAG,KAAK,CAAC,WAAW,EAAE,CAAC;aAC5B;iBAAM;;gBAEL,MAAM,SAAS,GAAG,KAAK,CAAC,KAAK,CAAC,0BAA0B,CAAC,CAAC;gBAC1D,IAAI,SAAS,EAAE;oBACb,IAAI,GAAG,QAAQ,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;oBAClC,KAAK,GAAG,QAAQ,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;oBACnC,GAAG,GAAG,QAAQ,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;iBAClC;qBAAM;;AAEL,oBAAA,MAAM,IAAI,GAAG,IAAI,IAAI,CAAC,KAAK,CAAC,CAAC;AAC7B,oBAAA,GAAG,GAAG,IAAI,CAAC,OAAO,EAAE,CAAC;AACrB,oBAAA,KAAK,GAAG,IAAI,CAAC,QAAQ,EAAE,GAAG,CAAC,CAAC;AAC5B,oBAAA,IAAI,GAAG,IAAI,CAAC,WAAW,EAAE,CAAC;iBAC3B;aACF;;AAGD,YAAA,MAAM,SAAS,GAAG,IAAI,IAAI,CAAC,IAAI,EAAE,KAAK,GAAG,CAAC,EAAE,GAAG,CAAC,CAAC;AACjD,YAAA,OAAO,SAAS,CAAC,kBAAkB,EAAE,CAAC;SACvC;aAAM;AACL,YAAA,OAAO,EAAE,CAAC;SACX;KACF;+GAjCU,6BAA6B,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,IAAA,EAAA,CAAA,CAAA,EAAA;6GAA7B,6BAA6B,EAAA,IAAA,EAAA,iCAAA,EAAA,CAAA,CAAA,EAAA;;4FAA7B,6BAA6B,EAAA,UAAA,EAAA,CAAA;kBAHzC,IAAI;AAAC,YAAA,IAAA,EAAA,CAAA;AACJ,oBAAA,IAAI,EAAE,iCAAiC;AACxC,iBAAA,CAAA;;;MCmBY,6BAA6B,CAAA;AAiDxC,IAAA,WAAA,CAAoB,iBAAoC,EAAA;QAApC,IAAiB,CAAA,iBAAA,GAAjB,iBAAiB,CAAmB;AA7CxD,QAAA,IAAA,CAAA,MAAM,GAAG,KAAK,CAAC,QAAQ,EAA8B,CAAC;AACtD,QAAA,IAAA,CAAA,OAAO,GAAG,KAAK,CAAC,QAAQ,EAA2B,CAAC;AACpD,QAAA,IAAA,CAAA,QAAQ,GAAG,KAAK,CAAC,QAAQ,EAAU,CAAC;QACpC,IAAW,CAAA,WAAA,GAAG,KAAK,EAA2B,CAAC;QAC/C,IAAmB,CAAA,mBAAA,GAAG,KAAK,CAAwB,MAAM,IAAI,CAAC,CAAC;QAC/D,IAAqB,CAAA,qBAAA,GAAG,KAAK,CAAwB,MAAM,IAAI,CAAC,CAAC;AACjE,QAAA,IAAA,CAAA,gBAAgB,GAAG,KAAK,CAAU,KAAK,CAAC,CAAC;AACzC,QAAA,IAAA,CAAA,qBAAqB,GAAG,KAAK,CAAU,KAAK,CAAC,CAAC;AAC9C,QAAA,IAAA,CAAA,gBAAgB,GAAG,KAAK,CAAU,KAAK,CAAC,CAAC;AACzC,QAAA,IAAA,CAAA,aAAa,GAAG,KAAK,CAAU,KAAK,CAAC,CAAC;AACtC,QAAA,IAAA,CAAA,aAAa,GAAG,KAAK,CAAU,KAAK,CAAC,CAAC;AACtC,QAAA,IAAA,CAAA,UAAU,GAAG,KAAK,CAAU,KAAK,CAAC,CAAC;AACnC,QAAA,IAAA,CAAA,YAAY,GAAG,KAAK,CAAU,KAAK,CAAC,CAAC;AACrC,QAAA,IAAA,CAAA,oBAAoB,GAAG,KAAK,CAAU,IAAI,CAAC,CAAC;AAC5C,QAAA,IAAA,CAAA,kBAAkB,GAAG,KAAK,CAAU,IAAI,CAAC,CAAC;AAC1C,QAAA,IAAA,CAAA,UAAU,GAAG,KAAK,CAAqB,SAAS,CAAC,CAAC;AAClD,QAAA,IAAA,CAAA,UAAU,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC;QAE1B,IAAkB,CAAA,kBAAA,GAAG,MAAM,EAAQ,CAAC;QACpC,IAAoB,CAAA,oBAAA,GAAG,MAAM,EAAQ,CAAC;QACtC,IAAc,CAAA,cAAA,GAAG,MAAM,EAAQ,CAAC;QAChC,IAAgB,CAAA,gBAAA,GAAG,MAAM,EAAQ,CAAC;QAClC,IAAe,CAAA,eAAA,GAAG,MAAM,EAAW,CAAC;QACpC,IAAiB,CAAA,iBAAA,GAAG,MAAM,EAAiC,CAAC;;AAG5D,QAAA,IAAA,CAAA,kBAAkB,GAA0C;AAC1D,YAAA,IAAI,EAAE,SAAS;AACf,YAAA,MAAM,EAAE,MAAM;SACf,CAAC;AAEF,QAAA,IAAA,CAAA,oBAAoB,GAAG,MAAM,CAAkC,EAAE,CAAC,CAAC;;AAG3D,QAAA,IAAA,CAAA,kBAAkB,GAAG,QAAQ,CAAC,MAAK;AACzC,YAAA,MAAM,GAAG,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC;YAC1B,QACE,GAAG,EAAE,eAAe;gBACpB,GAAG,EAAE,WAAW,KAAK,uBAAuB;AAC5C,gBAAA,CAAC,CAAC,GAAG,EAAE,qBAAqB,EAC5B;AACJ,SAAC,CAAC,CAAC;QAEK,IAAkB,CAAA,kBAAA,GAAG,KAAK,CAAC;;QAIjC,MAAM,CAAC,MAAK;AACV,YAAA,MAAM,SAAS,GAAG,IAAI,CAAC,UAAU,EAAE,CAAC;AACpC,YAAA,MAAM,aAAa,GAAG,CAAC,IAAI,CAAC,kBAAkB,CAAC;AAC/C,YAAA,IAAI,CAAC,kBAAkB,GAAG,SAAS,CAAC;YAEpC,IAAI,SAAS,EAAE;gBACb,IAAI,CAAC,oBAAoB,EAAE,CAAC;;AAG5B,gBAAA,IAAI,aAAa,IAAI,IAAI,CAAC,qBAAqB,EAAE,EAAE;oBACjD,IAAI,CAAC,uBAAuB,EAAE,CAAC;iBAChC;aACF;AACH,SAAC,EAAE,EAAC,iBAAiB,EAAE,IAAI,EAAC,CAAC,CAAC;KAC/B;IAED,eAAe,GAAA;;QAEb,IAAI,IAAI,CAAC,UAAU,EAAE,IAAI,IAAI,CAAC,qBAAqB,EAAE,EAAE;YACrD,IAAI,CAAC,uBAAuB,EAAE,CAAC;SAChC;KACF;IAEO,uBAAuB,GAAA;;QAE7B,UAAU,CAAC,MAAK;AACd,YAAA,IAAI,IAAI,CAAC,QAAQ,EAAE;;AAEjB,gBAAA,IAAI,CAAC,QAAQ,CAAC,KAAK,EAAE,CAAC;aACvB;AAAM,iBAAA,IAAI,IAAI,CAAC,SAAS,EAAE;;AAEzB,gBAAA,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,CAAC;AACvB,gBAAA,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,CAAC;aACvB;SACF,EAAE,GAAG,CAAC,CAAC;KACT;IAED,OAAO,GAAA;AACL,QAAA,IAAI,CAAC,kBAAkB,CAAC,IAAI,EAAE,CAAC;KAChC;IAED,SAAS,GAAA;AACP,QAAA,IAAI,CAAC,oBAAoB,CAAC,IAAI,EAAE,CAAC;KAClC;IAED,OAAO,GAAA;AACL,QAAA,IAAI,CAAC,cAAc,CAAC,IAAI,EAAE,CAAC;KAC5B;IAED,SAAS,GAAA;AACP,QAAA,IAAI,CAAC,gBAAgB,CAAC,IAAI,EAAE,CAAC;KAC9B;AAED,IAAA,SAAS,CAAC,KAA2B,EAAA;QACnC,IAAI,KAAK,EAAE;YACT,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;SAC1C;KACF;IAED,aAAa,CAAC,KAAa,EAAE,KAAU,EAAA;AACrC,QAAA,IAAI,IAAI,CAAC,gBAAgB,EAAE,EAAE;YAC3B,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC,CAAC;SAC/C;KACF;IAED,mBAAmB,CAAC,KAAa,EAAE,KAAa,EAAA;QAC9C,MAAM,QAAQ,GAAG,KAAK,KAAK,EAAE,IAAI,KAAK,KAAK,IAAI,GAAG,IAAI,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC;AACvE,QAAA,MAAM,UAAU,GAAG,IAAI,CAAC,gBAAgB,EAAE;AACxC,cAAE,IAAI,CAAC,OAAO,EAAE;AAChB,cAAE,IAAI,CAAC,WAAW,EAAE,CAAC;QAEvB,IAAI,UAAU,EAAE;AACd,YAAA,UAAU,CAAC,KAAK,CAAC,GAAG,QAAQ,CAAC;SAC9B;AAED,QAAA,IAAI,IAAI,CAAC,gBAAgB,EAAE,EAAE;AAC3B,YAAA,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,QAAQ,EAAE,CAAC,CAAC;SACzD;KACF;;AAGD,IAAA,aAAa,CAAC,KAAa,EAAA;QACzB,OAAO,IAAI,CAAC,gBAAgB,EAAE;AAC5B,cAAE,IAAI,CAAC,OAAO,EAAE,CAAC,KAAK,CAAC;cACrB,IAAI,CAAC,WAAW,EAAG,CAAC,KAAK,CAAC,CAAC;KAChC;;IAGD,aAAa,CAAC,KAAa,EAAE,KAAU,EAAA;AACrC,QAAA,MAAM,UAAU,GAAG,IAAI,CAAC,gBAAgB,EAAE;AACxC,cAAE,IAAI,CAAC,OAAO,EAAE;AAChB,cAAE,IAAI,CAAC,WAAW,EAAE,CAAC;QAEvB,IAAI,UAAU,EAAE;AACd,YAAA,UAAU,CAAC,KAAK,CAAC,GAAG,KAAK,CAAC;SAC3B;KACF;IAEO,oBAAoB,GAAA;AAC1B,QAAA,IAAI,IAAI,CAAC,kBAAkB,EAAE,EAAE;AAC7B,YAAA,IAAI,CAAC,oBAAoB,CAAC,GAAG,CAC3B,IAAI,CAAC,MAAM,EAAE,CAAC,qBAAsB,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC,CACrD,CAAC;SACH;KACF;;IAGM,sBAAsB,GAAA;AAC3B,QAAA,IAAI,CAAC,iBAAiB,CAAC,aAAa,EAAE,CAAC;KACxC;+GAhKU,6BAA6B,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAA,EAAA,CAAA,iBAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA,EAAA;AAA7B,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,6BAA6B,EAC7B,QAAA,EAAA,4BAAA,EAAA,MAAA,EAAA,EAAA,MAAA,EAAA,EAAA,iBAAA,EAAA,QAAA,EAAA,UAAA,EAAA,QAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,OAAA,EAAA,EAAA,iBAAA,EAAA,SAAA,EAAA,UAAA,EAAA,SAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,QAAA,EAAA,EAAA,iBAAA,EAAA,UAAA,EAAA,UAAA,EAAA,UAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,WAAA,EAAA,EAAA,iBAAA,EAAA,aAAA,EAAA,UAAA,EAAA,aAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,mBAAA,EAAA,EAAA,iBAAA,EAAA,qBAAA,EAAA,UAAA,EAAA,qBAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,qBAAA,EAAA,EAAA,iBAAA,EAAA,uBAAA,EAAA,UAAA,EAAA,uBAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,gBAAA,EAAA,EAAA,iBAAA,EAAA,kBAAA,EAAA,UAAA,EAAA,kBAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,qBAAA,EAAA,EAAA,iBAAA,EAAA,uBAAA,EAAA,UAAA,EAAA,uBAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,gBAAA,EAAA,EAAA,iBAAA,EAAA,kBAAA,EAAA,UAAA,EAAA,kBAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,aAAA,EAAA,EAAA,iBAAA,EAAA,eAAA,EAAA,UAAA,EAAA,eAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,aAAA,EAAA,EAAA,iBAAA,EAAA,eAAA,EAAA,UAAA,EAAA,eAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,UAAA,EAAA,EAAA,iBAAA,EAAA,YAAA,EAAA,UAAA,EAAA,YAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,YAAA,EAAA,EAAA,iBAAA,EAAA,cAAA,EAAA,UAAA,EAAA,cAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,oBAAA,EAAA,EAAA,iBAAA,EAAA,sBAAA,EAAA,UAAA,EAAA,sBAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,kBAAA,EAAA,EAAA,iBAAA,EAAA,oBAAA,EAAA,UAAA,EAAA,oBAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,UAAA,EAAA,EAAA,iBAAA,EAAA,YAAA,EAAA,UAAA,EAAA,YAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,UAAA,EAAA,EAAA,iBAAA,EAAA,YAAA,EAAA,UAAA,EAAA,YAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,OAAA,EAAA,EAAA,kBAAA,EAAA,oBAAA,EAAA,oBAAA,EAAA,sBAAA,EAAA,cAAA,EAAA,gBAAA,EAAA,gBAAA,EAAA,kBAAA,EAAA,eAAA,EAAA,iBAAA,EAAA,iBAAA,EAAA,mBAAA,EAAA,EAAA,WAAA,EAAA,CAAA,EAAA,YAAA,EAAA,UAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,QAAQ,EACR,WAAA,EAAA,IAAA,EAAA,EAAA,EAAA,YAAA,EAAA,WAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,SAAS,gDCzBtB,60bA2YA,EAAA,MAAA,EAAA,CAAA,4oBAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,gBAAA,EAAA,QAAA,EAAA,oBAAA,EAAA,MAAA,EAAA,CAAA,yBAAA,EAAA,kBAAA,EAAA,0BAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,aAAA,EAAA,QAAA,EAAA,yBAAA,EAAA,QAAA,EAAA,CAAA,WAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,UAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,SAAA,EAAA,SAAA,EAAA,UAAA,CAAA,EAAA,QAAA,EAAA,CAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAE,IAAA,CAAA,YAAA,EAAA,QAAA,EAAA,gBAAA,EAAA,MAAA,EAAA,CAAA,oBAAA,EAAA,OAAA,EAAA,YAAA,EAAA,YAAA,EAAA,iBAAA,EAAA,WAAA,CAAA,EAAA,QAAA,EAAA,CAAA,cAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,SAAA,EAAA,QAAA,EAAA,+CAAA,EAAA,MAAA,EAAA,CAAA,eAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,QAAA,EAAA,QAAA,EAAA,yHAAA,EAAA,MAAA,EAAA,CAAA,UAAA,EAAA,IAAA,EAAA,aAAA,EAAA,MAAA,EAAA,UAAA,EAAA,MAAA,EAAA,mBAAA,EAAA,kBAAA,EAAA,OAAA,EAAA,UAAA,CAAA,EAAA,QAAA,EAAA,CAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAF,IAAA,CAAA,UAAA,EAAA,QAAA,EAAA,cAAA,EAAA,MAAA,EAAA,CAAA,oBAAA,EAAA,4BAAA,EAAA,oBAAA,EAAA,qBAAA,EAAA,qBAAA,EAAA,yBAAA,EAAA,YAAA,EAAA,iBAAA,CAAA,EAAA,QAAA,EAAA,CAAA,YAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,oBAAA,EAAA,QAAA,EAAA,8MAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,mBAAA,EAAA,QAAA,EAAA,iGAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,eAAA,EAAA,QAAA,EAAA,2CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,iBAAA,EAAA,QAAA,EAAA,wIAAA,EAAA,MAAA,EAAA,CAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,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,WAAA,EAAA,IAAA,EAAAO,IAAA,CAAA,UAAA,EAAA,QAAA,EAAA,cAAA,EAAA,MAAA,EAAA,CAAA,QAAA,EAAA,aAAA,EAAA,UAAA,EAAA,qBAAA,EAAA,OAAA,EAAA,MAAA,EAAA,YAAA,EAAA,kBAAA,EAAA,oBAAA,EAAA,YAAA,EAAA,YAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAD,IAAA,CAAA,OAAA,EAAA,QAAA,EAAA,UAAA,EAAA,MAAA,EAAA,CAAA,eAAA,EAAA,YAAA,EAAA,iBAAA,EAAA,kBAAA,EAAA,WAAA,EAAA,WAAA,EAAA,gBAAA,EAAA,aAAA,EAAA,OAAA,EAAA,WAAA,CAAA,EAAA,OAAA,EAAA,CAAA,QAAA,EAAA,OAAA,CAAA,EAAA,QAAA,EAAA,CAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,WAAA,EAAA,QAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,eAAA,CAAA,EAAA,QAAA,EAAA,CAAA,aAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,cAAA,EAAA,QAAA,EAAA,6CAAA,EAAA,MAAA,EAAA,CAAA,sBAAA,EAAA,mBAAA,EAAA,oBAAA,EAAA,4BAAA,CAAA,EAAA,OAAA,EAAA,CAAA,YAAA,EAAA,YAAA,EAAA,YAAA,EAAA,aAAA,CAAA,EAAA,QAAA,EAAA,CAAA,gBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAE,EAAA,CAAA,SAAA,EAAA,QAAA,EAAA,YAAA,EAAA,MAAA,EAAA,CAAA,kBAAA,EAAA,YAAA,EAAA,UAAA,EAAA,eAAA,EAAA,UAAA,EAAA,8BAAA,EAAA,aAAA,EAAA,UAAA,EAAA,UAAA,EAAA,wBAAA,EAAA,aAAA,EAAA,OAAA,EAAA,YAAA,EAAA,iBAAA,EAAA,mBAAA,EAAA,2BAAA,EAAA,gBAAA,EAAA,IAAA,EAAA,YAAA,CAAA,EAAA,OAAA,EAAA,CAAA,cAAA,EAAA,QAAA,EAAA,QAAA,EAAA,iBAAA,EAAA,aAAA,CAAA,EAAA,QAAA,EAAA,CAAA,WAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,EAAA,CAAA,SAAA,EAAA,QAAA,EAAA,YAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,IAAA,EAAA,UAAA,CAAA,EAAA,OAAA,EAAA,CAAA,mBAAA,CAAA,EAAA,QAAA,EAAA,CAAA,WAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,GAAA,CAAA,WAAA,EAAA,QAAA,EAAA,cAAA,EAAA,MAAA,EAAA,CAAA,YAAA,EAAA,iBAAA,EAAA,kBAAA,EAAA,IAAA,EAAA,UAAA,EAAA,eAAA,EAAA,MAAA,EAAA,OAAA,EAAA,eAAA,EAAA,UAAA,EAAA,OAAA,EAAA,qBAAA,EAAA,SAAA,EAAA,UAAA,EAAA,eAAA,CAAA,EAAA,OAAA,EAAA,CAAA,QAAA,EAAA,qBAAA,CAAA,EAAA,QAAA,EAAA,CAAA,aAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,GAAA,CAAA,iBAAA,EAAA,QAAA,EAAA,kBAAA,EAAA,MAAA,EAAA,CAAA,UAAA,EAAA,eAAA,EAAA,UAAA,EAAA,WAAA,EAAA,OAAA,EAAA,YAAA,EAAA,YAAA,CAAA,EAAA,OAAA,EAAA,CAAA,gBAAA,EAAA,iBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,IAAA,CAAA,aAAA,EAAA,QAAA,EAAA,gBAAA,EAAA,QAAA,EAAA,CAAA,eAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,kBAAA,EAAA,QAAA,EAAA,sBAAA,EAAA,MAAA,EAAA,CAAA,eAAA,EAAA,KAAA,EAAA,KAAA,EAAA,qBAAA,CAAA,EAAA,QAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,mBAAA,EAAA,QAAA,EAAA,uBAAA,EAAA,MAAA,EAAA,CAAA,KAAA,EAAA,UAAA,EAAA,YAAA,EAAA,UAAA,EAAA,eAAA,CAAA,EAAA,QAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAAA,GAAA,CAAA,cAAA,EAAA,IAAA,EAAA,kBAAA,EAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAAAC,6BAAA,EAAA,IAAA,EAAA,iCAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA,CAAA,EAAA;;4FDpXa,6BAA6B,EAAA,UAAA,EAAA,CAAA;kBANzC,SAAS;+BACE,4BAA4B,EAAA,eAAA,EAGrB,uBAAuB,CAAC,MAAM,EAAA,QAAA,EAAA,60bAAA,EAAA,MAAA,EAAA,CAAA,4oBAAA,CAAA,EAAA,CAAA;sFAG1B,QAAQ,EAAA,CAAA;sBAA5B,SAAS;uBAAC,QAAQ,CAAA;gBACG,SAAS,EAAA,CAAA;sBAA9B,SAAS;uBAAC,SAAS,CAAA;;;AE4ChB,MAAO,sBACX,SAAQ,2BAA2B,CAAA;AAmKnC,IAAA,WAAA,CACU,iBAAoC,EACpC,QAA2B,EAC5B,mBAAgD,EAC/C,eAAgC,EAAA;AAExC,QAAA,KAAK,EAAE,CAAC;QALA,IAAiB,CAAA,iBAAA,GAAjB,iBAAiB,CAAmB;QACpC,IAAQ,CAAA,QAAA,GAAR,QAAQ,CAAmB;QAC5B,IAAmB,CAAA,mBAAA,GAAnB,mBAAmB,CAA6B;QAC/C,IAAe,CAAA,eAAA,GAAf,eAAe,CAAiB;AA/J1C,QAAA,IAAA,CAAA,gBAAgB,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC;AAEhC,QAAA,IAAA,CAAA,UAAU,GAAG,KAAK,CAAC,EAAE,CAAC,CAAC;AAEvB,QAAA,IAAA,CAAA,QAAQ,GAAG,KAAK,CAAS,EAAE,CAAC,CAAC;AAE7B,QAAA,IAAA,CAAA,UAAU,GAAG,KAAK,CAAS,CAAC,CAAC,CAAC;AAE9B,QAAA,IAAA,CAAA,gBAAgB,GAAG,KAAK,CAAU,KAAK,CAAC,CAAC;AAEzC,QAAA,IAAA,CAAA,mBAAmB,GAAG,KAAK,CAAU,KAAK,CAAC,CAAC;AAE5C,QAAA,IAAA,CAAA,gBAAgB,GAAG,KAAK,CAAS,EAAE,CAAC,CAAC;AAErC,QAAA,IAAA,CAAA,WAAW,GAAG,KAAK,CAAU,KAAK,CAAC,CAAC;AAEpC,QAAA,IAAA,CAAA,SAAS,GAAG,KAAK,CAAU,KAAK,CAAC,CAAC;AAElC,QAAA,IAAA,CAAA,WAAW,GAAG,KAAK,CAA+B,EAAE,CAAC,CAAC;QAEtD,IAAc,CAAA,cAAA,GAAG,KAAK,EAAsB,CAAC;AAE7C,QAAA,IAAA,CAAA,YAAY,GAAG,KAAK,CAAU,KAAK,CAAC,CAAC;AAErC,QAAA,IAAA,CAAA,oBAAoB,GAAG,KAAK,CAAU,IAAI,CAAC,CAAC;AAE5C,QAAA,IAAA,CAAA,kBAAkB,GAAG,KAAK,CAAU,IAAI,CAAC,CAAC;AAE1C,QAAA,IAAA,CAAA,eAAe,GAAG,KAAK,CAAU,KAAK,CAAC,CAAC;AAExC;;;AAGG;AACH,QAAA,IAAA,CAAA,gBAAgB,GAAG,KAAK,CAAU,KAAK,CAAC,CAAC;QAEzC,IAAmB,CAAA,mBAAA,GAAG,KAAK,CAAwB,MAAM,IAAI,CAAC,CAAC;QAE/D,IAAqB,CAAA,qBAAA,GAAG,KAAK,CAAwB,MAAM,IAAI,CAAC,CAAC;AAEjE,QAAA,IAAA,CAAA,cAAc,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC;AAE9B,QAAA,IAAA,CAAA,mBAAmB,GAAG,KAAK,CAAC,EAAE,CAAC,CAAC;AAEhC,QAAA,IAAA,CAAA,gBAAgB,GAAG,KAAK,CAAU,KAAK,CAAC,CAAC;AAEzC;;;;;;;;;;AAUG;QACH,IAAqB,CAAA,qBAAA,GAAG,KAAK,EAAwB,CAAC;AAEtD,QAAA,IAAA,CAAA,gBAAgB,GAAG,KAAK,CAAU,KAAK,CAAC,CAAC;AAEzC,QAAA,IAAA,CAAA,iBAAiB,GAAG,KAAK,CAAC,QAAQ,CAAC,CAAC;QAEpC,IAAkB,CAAA,kBAAA,GAAG,KAAK,CAAa,MAAO,GAAC,CAAC,CAAC;AAEjD,QAAA,IAAA,CAAA,mBAAmB,GAAG,KAAK,CAAU,KAAK,CAAC,CAAC;AAE5C,QAAA,IAAA,CAAA,cAAc,GAAG,KAAK,CAAU,KAAK,CAAC,CAAC;AAEvC,QAAA,IAAA,CAAA,cAAc,GAAG,KAAK,CAAU,KAAK,CAAC,CAAC;QAEvC,IAAmB,CAAA,mBAAA,GAAG,KAAK,EAAgD,CAAC;QAE5E,IAAe,CAAA,eAAA,GAAG,KAAK,EAAO,CAAC;QAE/B,IAAiB,CAAA,iBAAA,GAAG,KAAK,EAAoB,CAAC;AAE9C;;;;;;;;;;;;;;;AAeG;QACH,IAAgB,CAAA,gBAAA,GAAG,KAAK,EAAyB,CAAC;AAElD;;AAEG;AACH,QAAA,IAAA,CAAA,IAAI,GAAG,KAAK,CAAQ,EAAE,CAAC,CAAC;AAExB,QAAA,IAAA,CAAA,wBAAwB,GAAG,KAAK,CAAU,KAAK,CAAC,CAAC;AAEjD,QAAA,IAAA,CAAA,WAAW,GAAG,KAAK,CAAU,KAAK,CAAC,CAAC;QAEpC,IAAQ,CAAA,QAAA,GAAG,MAAM,EAA2B,CAAC;QAE7C,IAAa,CAAA,aAAA,GAAG,MAAM,EAA+B,CAAC;QAEtD,IAAc,CAAA,cAAA,GAAG,MAAM,EAAO,CAAC;QAE/B,IAAU,CAAA,UAAA,GAAG,MAAM,EAA+B,CAAC;QAEnD,IAAe,CAAA,eAAA,GAAG,MAAM,EAAS,CAAC;AAElC;;;AAGG;QACH,IAAiB,CAAA,iBAAA,GAAG,MAAM,EAKtB,CAAC;QAEG,IAAK,CAAA,KAAA,GAAU,EAAE,CAAC;AAE1B,QAAA,IAAA,CAAA,gBAAgB,GAAG,MAAM,CAA+B,EAAE,CAAC,CAAC;AAC5D,QAAA,IAAA,CAAA,gBAAgB,GAAG,MAAM,CAAgB,IAAI,CAAC,CAAC;AAE/C,QAAA,IAAA,CAAA,WAAW,GAAG,QAAQ,CAAC,MAAM,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,kBAAkB,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;QAE9E,IAAO,CAAA,OAAA,GAAqC,EAAE,CAAC;QAC/C,IAAe,CAAA,eAAA,GAAqC,EAAE,CAAC;QACvD,IAAqB,CAAA,qBAAA,GAAa,EAAE,CAAC;QAIrC,IAAW,CAAA,WAAA,GAA6C,EAAE,CAAC;QAC3D,IAAgB,CAAA,gBAAA,GAAW,EAAE,CAAC;QAE9B,IAAS,CAAA,SAAA,GAAG,IAAI,CAAC;QAEjB,IAAiB,CAAA,iBAAA,GAAiD,EAAE,CAAC;QACrE,IAAkB,CAAA,kBAAA,GAAiD,EAAE,CAAC;AACtE,QAAA,IAAA,CAAA,YAAY,GAAG,MAAM,CAAQ,EAAE,CAAC,CAAC;;QAGjC,IAAgB,CAAA,gBAAA,GAAqD,EAAE,CAAC;AAExE,QAAA,IAAA,CAAA,UAAU,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC;AAazB,QAAA,IAAI,CAAC,cAAc,GAAG,IAAI,cAAc,CAAC,MAAK;YAC5C,MAAM,QAAQ,GAAG,QAAQ,CAAC,IAAI,CAAC,WAAW,IAAI,IAAI,CAAC;AACnD,YAAA,IAAI,IAAI,CAAC,UAAU,EAAE,KAAK,QAAQ,EAAE;AAClC,gBAAA,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;aAC/B;AACH,SAAC,CAAC,CAAC;QACH,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;;AAG3C,QAAA,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,QAAQ,CAAC,IAAI,CAAC,WAAW,IAAI,IAAI,CAAC,CAAC;;QAGvD,MAAM,CAAC,MAAK;AACV,YAAA,MAAM,SAAS,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;AAC9B,YAAA,IAAI,CAAC,gBAAgB,CAAC,SAAS,CAAC,CAAC;AACnC,SAAC,EAAE,EAAC,iBAAiB,EAAE,IAAI,EAAC,CAAC,CAAC;;QAG9B,MAAM,CAAC,MAAK;;YAEV,IAAI,CAAC,gBAAgB,EAAE,CAAC;YACxB,IAAI,IAAI,CAAC,WAAW,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,EAAE;;gBAE3C,IAAI,CAAC,WAAW,CAAC,eAAe;oBAC9B,IAAI,CAAC,+BAA+B,EAAE,CAAC;;AAEzC,gBAAA,IAAI,IAAI,CAAC,WAAW,CAAC,MAAM,EAAE;AAC3B,oBAAA,MAAM,aAAa,GAAG,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC;AAC9C,oBAAA,IAAI,CAAC,WAAW,CAAC,MAAM,GAAG,EAAE,CAAC;AAC7B,oBAAA,IAAI,CAAC,WAAW,CAAC,MAAM,GAAG,aAAa,CAAC;iBACzC;AACD,gBAAA,IAAI,CAAC,iBAAiB,CAAC,YAAY,EAAE,CAAC;aACvC;AACH,SAAC,EAAE,EAAC,iBAAiB,EAAE,IAAI,EAAC,CAAC,CAAC;KAC/B;IAED,QAAQ,GAAA;QACN,IAAI,CAAC,iBAAiB,EAAE,CAAC;QACzB,IAAI,CAAC,oBAAoB,EAAE,CAAC;QAC5B,IAAI,CAAC,wBAAwB,EAAE,CAAC;QAChC,IAAI,CAAC,mBAAmB,EAAE,CAAC;KAC5B;IAED,eAAe,GAAA;QACb,IAAI,CAAC,YAAY,EAAE,CAAC;QACpB,IAAI,CAAC,uBAAuB,EAAE,CAAC;KAChC;IAEQ,WAAW,GAAA;AAClB,QAAA,IAAI,CAAC,cAAc,EAAE,UAAU,EAAE,CAAC;AAElC,QAAA,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC7B,QAAA,IAAI,CAAC,YAAY,CAAC,QAAQ,EAAE,CAAC;KAC9B;IAED,iBAAiB,GAAA;QACf,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,IAAG;AAClC,YAAA,IAAI,CAAC,iBAAiB,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,EAAE,GAAG,GAAG,EAAE,CAAC;AAC9C,SAAC,CAAC,CAAC;AACH,QAAA,IAAI,CAAC,iBAAiB,CAAC,YAAY,EAAE,CAAC;KACvC;AAED,IAAA,kBAAkB,CAAC,KAA0B,EAAA;QAC3C,MAAM,YAAY,GAChB,KAAK,CAAC,YAAY,KAAK,IAAI,CAAC,gBAAgB,CAAC,YAAY;AACzD,YAAA,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,OAAO,CAAC;gBAC3B,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,gBAAgB,CAAC,OAAO,CAAC,CAAC;QAElD,IAAI,CAAC,gBAAgB,GAAG;AACtB,YAAA,GAAG,KAAK;AACR,YAAA,QAAQ,EAAE,IAAI,CAAC,SAAS,CAAC,QAAQ;AACjC,YAAA,SAAS,EAAE,YAAY,GAAG,CAAC,GAAG,IAAI,CAAC,SAAS,CAAC,SAAS;AACtD,YAAA,SAAS,EAAE,IAAI,CAAC,IAAI,CAAC,MAAM;AAC3B,YAAA,SAAS,EAAE,IAAI,CAAC,IAAI,CAAC,SAAS;SAC/B,CAAC;QAEF,IAAI,CAAC,eAAe,EAAE,CAAC;QACvB,IAAI,CAAC,iBAAiB,EAAE,CAAC;QACzB,IAAI,CAAC,kBAAkB,EAAE,CAAC;QAC1B,IAAI,CAAC,wBAAwB,EAAE,CAAC;QAEhC,IAAI,YAAY,EAAE;YAChB,IAAI,CAAC,eAAe,EAAE,CAAC;AACvB,YAAA,IAAI,CAAC,SAAS,CAAC,SAAS,GAAG,CAAC,CAAC;;AAE7B,YAAA,IAAI,CAAC,SAAS,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC;SAClC;AAED,QAAA,IAAI,CAAC,iBAAiB,CAAC,YAAY,EAAE,CAAC;KACvC;IAED,kBAAkB,GAAA;AAChB,QAAA,IAAI,CAAC,SAAS,GAAG,KAAK,CAAC;AACvB,QAAA,IAAI,CAAC,iBAAiB,CAAC,YAAY,EAAE,CAAC;QAEtC,IAAI,CAAC,2BAA2B,EAAE,CAAC;QACnC,IAAI,CAAC,wBAAwB,EAAE,CAAC;QAChC,IAAI,CAAC,eAAe,EAAE,CAAC;AACvB,QAAA,IAAI,CAAC,WAAW,GAAG,EAAE,CAAC;AACtB,QAAA,IAAI,CAAC,gBAAgB,GAAG,EAAE,CAAC;AAC3B,QAAA,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,YAAY,EAAE,KAAK,EAAE,CAAC,CAAC;QAE9D,UAAU,CAAC,MAAK;AACd,YAAA,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC;YACtB,IAAI,CAAC,mBAAmB,EAAE,CAAC;YAC3B,IAAI,CAAC,YAAY,EAAE,CAAC;AACpB,YAAA,IAAI,CAAC,iBAAiB,CAAC,YAAY,EAAE,CAAC;SACvC,EAAE,GAAG,CAAC,CAAC;KACT;AAED;;;;;AAKG;IACH,SAAS,GAAA;AACP,QAAA,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;;AAEhC,QAAA,MAAM,MAAM,GAAQ;AAClB,YAAA,EAAE,EAAE,aAAa,CAAC,YAAY,EAAE;SACjC,CAAC;;AAGF,QAAA,IAAI,CAAC,OAAO;aACT,MAAM,CAAC,GAAG,IAAI,GAAG,CAAC,eAAe,CAAC;aAClC,OAAO,CAAC,GAAG,IAAG;AACb,YAAA,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,IAAI,CAAC;AAC3B,SAAC,CAAC,CAAC;;AAGL,QAAA,IAAI,CAAC,WAAW,CAAC,IAAI,GAAG,CAAC,GAAG,IAAI,CAAC,WAAW,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;AAC3D,QAAA,IAAI,CAAC,kBAAkB,CAAC,MAAM,CAAC,EAAE,CAAC,GAAG,EAAE,GAAG,MAAM,EAAE,CAAC;;QAGnD,UAAU,CAAC,MAAK;AACd,YAAA,IAAI,CAAC,SAAS,CAAC,QAAQ,EAAE,CAAC;SAC3B,EAAE,GAAG,CAAC,CAAC;AAER,QAAA,IAAI,CAAC,iBAAiB,CAAC,YAAY,EAAE,CAAC;KACvC;IAED,OAAO,CAAC,GAAQ,EAAE,MAAsC,EAAA;AACtD,QAAA,IAAI,CAAC,iBAAiB,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,EAAE,GAAG,GAAG,EAAE,CAAC;KAC7C;AAED,IAAA,SAAS,CAAC,GAAQ,EAAE,MAAsC,EAAE,KAAa,EAAA;QACvE,MAAM,aAAa,GAAG,IAAI,CAAC,gBAAgB,CAAC,KAAK,CAAC,CAAC;AACnD,QAAA,IAAI,CAAC,eAAe;aACjB,gBAAgB,CAAC,2CAA2C,CAAC;AAC7D,aAAA,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC;aACnC,SAAS,CAAC,GAAG,IAAG;YACf,IAAI,CAAC,WAAW,CAAC,IAAI,GAAG,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,MAAM,CAClD,IAAI,IAAI,IAAI,CAAC,EAAE,KAAK,GAAG,CAAC,EAAE,CAC3B,CAAC;AACF,YAAA,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,GAAG,EAAE,KAAK,EAAE,aAAa,EAAE,CAAC,CAAC;AACpD,YAAA,IAAI,CAAC,iBAAiB,CAAC,YAAY,EAAE,CAAC;AACxC,SAAC,CAAC,CAAC;KACN;AAED;;;;;;;;;;;;AAYG;AACH,IAAA,WAAW,CAAC,GAAQ,EAAE,MAAsC,EAAE,KAAa,EAAA;QACzE,MAAM,aAAa,GAAG,IAAI,CAAC,gBAAgB,CAAC,KAAK,CAAC,CAAC;AACnD,QAAA,MAAM,iBAAiB,GAAG,CAAC,CAAC,IAAI,CAAC,kBAAkB,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QAC5D,MAAM,OAAO,GAAG,iBAAiB;cAC7B,IAAI,CAAC,kBAAkB,CAAC,GAAG,CAAC,EAAE,CAAC;cAC/B,IAAI,CAAC,iBAAiB,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;;QAGnC,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,OAAO,EAAE,GAAG,CAAC,EAAE;YACnC,OAAO;SACR;;QAGD,IAAI,iBAAiB,EAAE;YACrB,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,EAAE,GAAG,OAAO,EAAE,CAAC,CAAC;YACzC,OAAO,IAAI,CAAC,kBAAkB,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;SACxC;aAAM;AACL,YAAA,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,EAAE,GAAG,EAAE,EAAE,GAAG,OAAO,EAAE,EAAE,KAAK,EAAE,aAAa,EAAE,CAAC,CAAC;YACvE,OAAO,IAAI,CAAC,iBAAiB,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;SACvC;;QAGD,IAAI,CAAC,qBAAqB,CAAC,aAAa,EAAE,GAAG,EAAE,OAAO,CAAC,CAAC;AACxD,QAAA,IAAI,CAAC,iBAAiB,CAAC,YAAY,EAAE,CAAC;KACvC;IAED,aAAa,CAAC,GAAQ,EAAE,MAAsC,EAAA;;AAE5D,QAAA,MAAM,iBAAiB,GAAG,CAAC,CAAC,IAAI,CAAC,kBAAkB,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QAE5D,IAAI,iBAAiB,EAAE;;YAErB,IAAI,CAAC,WAAW,CAAC,IAAI,GAAG,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,MAAM,CAClD,IAAI,IAAI,IAAI,CAAC,EAAE,KAAK,GAAG,CAAC,EAAE,CAC3B,CAAC;YACF,OAAO,IAAI,CAAC,kBAAkB,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;SACxC;aAAM;YACL,OAAO,IAAI,CAAC,iBAAiB,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;SACvC;;QAGD,IAAI,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE;YACjC,OAAO,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;SACtC;AAED,QAAA,IAAI,CAAC,iBAAiB,CAAC,YAAY,EAAE,CAAC;KACvC;AAED;;;;AAIG;AACH,IAAA,mBAAmB,CACjB,GAAQ,EACR,MAAsC,EACtC,KAAU,EACV,KAAa,EAAA;QAEb,MAAM,aAAa,GAAG,IAAI,CAAC,gBAAgB,CAAC,KAAK,CAAC,CAAC;AACnD,QAAA,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,KAAK,CAAC;;AAG3D,QAAA,IAAI,IAAI,CAAC,gBAAgB,EAAE,EAAE;;YAE3B,IAAI,CAAC,WAAW,CAAC,GAAG,EAAE,GAAG,EAAE,MAAM,CAAC,CAAC;SACpC;;;AAID,QAAA,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC;AAC1B,YAAA,GAAG,EAAE,EAAE,GAAG,GAAG,EAAE;YACf,KAAK,EAAE,MAAM,CAAC,KAAK;AACnB,YAAA,KAAK,EAAE,KAAK;AACZ,YAAA,KAAK,EAAE,aAAa;AACrB,SAAA,CAAC,CAAC;KACJ;IAEO,WAAW,CAAC,CAAM,EAAE,CAAM,EAAA;AAChC,QAAA,MAAM,GAAG,GAAG,CAAC,EAAE,EAAE,IAAI,CAAC,CAAC;AACvB,QAAA,MAAM,GAAG,GAAG,CAAC,EAAE,EAAE,IAAI,CAAC,CAAC;QACvB,OAAO,GAAG,KAAK,GAAG,GAAG,CAAC,GAAG,CAAC,CAAC;KAC5B;AAED,IAAA,aAAa,CAAC,GAAQ,EAAA;QACpB,OAAO,IAAI,CAAC,YAAY,EAAE,CAAC,IAAI,CAAC,CAAC,IAAI,IAAI,CAAC,WAAW,CAAC,CAAC,EAAE,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC;KACtE;IAED,aAAa,GAAA;QACX,MAAM,WAAW,GAAG,IAAI,CAAC,YAAY,EAAE,CAAC,MAAM,CAAC;AAC/C,QAAA,IAAI,IAAI,CAAC,WAAW,EAAE;YACpB,MAAM,OAAO,GAAG,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,MAAM,CAAC;YAC7C,OAAO,WAAW,KAAK,OAAO,CAAC;SAChC;aAAM;AACL,YAAA,OAAO,KAAK,CAAC;SACd;KACF;AAED,IAAA,aAAa,CAAC,KAAc,EAAA;QAC1B,IAAI,KAAK,EAAE;AACT,YAAA,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,CAAC;SACnD;aAAM;AACL,YAAA,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;SAC3B;QAED,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE,CAAC,CAAC;KAChD;AAED,IAAA,iBAAiB,CAAC,GAAQ,EAAA;AACxB,QAAA,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,QAAQ,IAC/B,QAAQ,CAAC,MAAM,CAAC,CAAC,IAAI,IAAI,CAAC,WAAW,CAAC,CAAC,EAAE,GAAG,CAAC,KAAK,CAAC,CAAC,CACrD,CAAC;QACF,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE,CAAC,CAAC;KAChD;AAED,IAAA,mBAAmB,CAAC,GAAQ,EAAA;AAC1B,QAAA,IAAI,CAAC,iBAAiB,CAAC,GAAG,CAAC,CAAC;KAC7B;IAED,gBAAgB,CAAC,KAAc,EAAE,GAAQ,EAAA;QACvC,IAAI,KAAK,EAAE;AACT,YAAA,IAAI,IAAI,CAAC,gBAAgB,EAAE,EAAE;gBAC3B,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;aAC9B;iBAAM;AACL,gBAAA,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,QAAQ,IAAI,CAAC,GAAG,QAAQ,EAAE,GAAG,CAAC,CAAC,CAAC;aAC1D;SACF;aAAM;AACL,YAAA,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,QAAQ,IAC/B,QAAQ,CAAC,MAAM,CAAC,CAAC,IAAI,IAAI,CAAC,WAAW,CAAC,CAAC,EAAE,GAAG,CAAC,KAAK,CAAC,CAAC,CACrD,CAAC;SACH;AAED,QAAA,IAAI,CAAC,iBAAiB,CAAC,YAAY,EAAE,CAAC;QACtC,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE,CAAC,CAAC;KAChD;IAED,cAAc,CAAC,GAAQ,EAAE,KAAa,EAAA;AACpC,QAAA,IAAI,IAAI,CAAC,cAAc,EAAE,EAAE;AACzB,YAAA,IAAI,IAAI,CAAC,gBAAgB,EAAE,KAAK,KAAK,EAAE;AACrC,gBAAA,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;aACjC;iBAAM;AACL,gBAAA,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;aAClC;SACF;AAAM,aAAA,IAAI,IAAI,CAAC,cAAc,EAAE,EAAE;YAChC,MAAM,UAAU,GAAG,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,CAAC;YAC3C,IAAI,CAAC,gBAAgB,CAAC,CAAC,UAAU,EAAE,GAAG,CAAC,CAAC;SACzC;aAAM;AACL,YAAA,IAAI,IAAI,CAAC,cAAc,EAAE,EAAE;AACzB,gBAAA,IAAI,CAAC,cAAc,EAAG,CAAC,GAAG,CAAC,CAAC;aAC7B;SACF;KACF;AAED,IAAA,gBAAgB,CAAC,KAAa,EAAA;AAC5B,QAAA,IAAI,IAAI,CAAC,WAAW,EAAE,EAAE;AACtB,YAAA,OAAO,KAAK,CAAC;SACd;aAAM;YACL,OAAO,IAAI,CAAC,SAAS;AACnB,kBAAE,IAAI,CAAC,SAAS,CAAC,SAAS,GAAG,IAAI,CAAC,SAAS,CAAC,QAAQ,GAAG,KAAK;kBAC1D,KAAK,CAAC;SACX;KACF;IAEO,4BAA4B,GAAA;QAClC,IAAI,CAAC,gBAAgB,EAAE,CAAC,OAAO,CAAC,MAAM,IAAG;YACvC,IAAI,MAAM,CAAC,KAAK,KAAK,SAAS,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE;AAC9C,gBAAA,MAAM,CAAC,IAAI,GAAG,SAAS,CAAC;aACzB;YAED,IAAI,CAAC,MAAM,CAAC,UAAU,IAAI,MAAM,CAAC,MAAM,EAAE;AACvC,gBAAA,IAAI,MAAM,CAAC,IAAI,KAAK,QAAQ,EAAE;AAC5B,oBAAA,MAAM,CAAC,UAAU,GAAG,QAAQ,CAAC;iBAC9B;AAAM,qBAAA,IAAI,MAAM,CAAC,IAAI,KAAK,QAAQ,EAAE;AACnC,oBAAA,MAAM,CAAC,UAAU,GAAG,QAAQ,CAAC;iBAC9B;AAAM,qBAAA,IAAI,MAAM,CAAC,IAAI,KAAK,MAAM,EAAE;AACjC,oBAAA,MAAM,CAAC,UAAU,GAAG,MAAM,CAAC;iBAC5B;AAAM,qBAAA,IAAI,MAAM,CAAC,IAAI,KAAK,iBAAiB,EAAE;AAC5C,oBAAA,MAAM,CAAC,UAAU,GAAG,QAAQ,CAAC;iBAC9B;AAAM,qBAAA,IAAI,MAAM,CAAC,IAAI,KAAK,SAAS,EAAE;AACpC,oBAAA,MAAM,CAAC,UAAU,GAAG,SAAS,CAAC;iBAC/B;qBAAM;AACL,oBAAA,MAAM,CAAC,UAAU,GAAG,QAAQ,CAAC;iBAC9B;aACF;AAED,YAAA,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE,IAAI,IAAI,CAAC,gBAAgB,EAAE,KAAK,CAAC,MAAM,CAAC,WAAW,EAAE;AAC3E,gBAAA,IAAI,MAAM,CAAC,IAAI,KAAK,QAAQ,EAAE;AAC5B,oBAAA,MAAM,CAAC,WAAW,GAAG,QAAQ,CAAC;iBAC/B;AAAM,qBAAA,IAAI,MAAM,CAAC,IAAI,KAAK,QAAQ,EAAE;AACnC,oBAAA,MAAM,CAAC,WAAW,GAAG,QAAQ,CAAC;iBAC/B;AAAM,qBAAA,IAAI,MAAM,CAAC,IAAI,KAAK,MAAM,EAAE;AACjC,oBAAA,MAAM,CAAC,WAAW,GAAG,MAAM,CAAC;iBAC7B;AAAM,qBAAA,IAAI,MAAM,CAAC,IAAI,KAAK,iBAAiB,EAAE;AAC5C,oBAAA,MAAM,CAAC,WAAW,GAAG,QAAQ,CAAC;iBAC/B;AAAM,qBAAA,IAAI,MAAM,CAAC,IAAI,KAAK,SAAS,EAAE;AACpC,oBAAA,MAAM,CAAC,WAAW,GAAG,SAAS,CAAC;iBAChC;qBAAM;AACL,oBAAA,MAAM,CAAC,WAAW,GAAG,QAAQ,CAAC;iBAC/B;aACF;AACH,SAAC,CAAC,CAAC;KACJ;IAEO,+BAA+B,GAAA;AACrC,QAAA,IAAI,cAAc,GAAG,CAAC,IAAS,EAAE,MAAc,KAAa;YAC1D,MAAM,WAAW,GAIb,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;YACvB,MAAM,eAAe,GAAG,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;YACjD,IAAI,QAAQ,GAAG,IAAI,CAAC;YACpB,IAAI,cAAc,GAAG,IAAI,CAAC;AAE1B,YAAA,eAAe,CAAC,OAAO,CAAC,CAAC,GAAW,KAAI;gBACtC,IACE,GAAG,KAAK,gBAAgB;AACxB,oBAAA,IAAI,CAAC,qBAAqB,CAAC,QAAQ,CAAC,GAAG,CAAC;AACxC,oBAAA,WAAW,CAAC,GAAG,CAAC,CAAC,KAAK,KAAK,IAAI;oBAC/B,WAAW,CAAC,GAAG,CAAC,CAAC,KAAK,KAAK,SAAS,EACpC;AACA,oBAAA,IAAI,KAAK,CAAC,OAAO,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,EAAE;wBACzC,MAAM,QAAQ,GACZ,WAAW,CAAC,GAAG,CAAC,CAAC,KAClB,CAAC,CAAC,CAAC,CAAC;wBACL,MAAM,MAAM,GACV,WAAW,CAAC,GAAG,CAAC,CAAC,KAClB,CAAC,CAAC,CAAC,CAAC;AAEL,wBAAA,IAAI,QAAQ,IAAI,MAAM,EAAE;AACtB,4BAAA,MAAM,SAAS,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,GAAG,CAAC,KAAK,KAAK,GAAG,CAAC,CAAC;4BAE9D,IAAI,SAAS,IAAI,SAAS,CAAC,IAAI,KAAK,MAAM,EAAE;AAC1C,gCAAA,MAAM,aAAa,GAAG,QAAQ,GAAG,IAAI,IAAI,CAAC,QAAQ,CAAC,GAAG,IAAI,CAAC;gCAC3D,MAAM,WAAW,GAAG,MAAM;sCACtB,IAAI,IAAI,CACN,IAAI,IAAI,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,IAAI,IAAI,CAAC,MAAM,CAAC,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC,CACzD;sCACD,IAAI,CAAC;gCACT,MAAM,SAAS,GAAG,IAAI,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;AAEtC,gCAAA,IAAI,aAAa,IAAI,WAAW,EAAE;oCAChC,QAAQ;wCACN,QAAQ;AACR,4CAAA,SAAS,IAAI,aAAa;4CAC1B,SAAS,IAAI,WAAW,CAAC;iCAC5B;qCAAM,IAAI,aAAa,EAAE;AACxB,oCAAA,QAAQ,GAAG,QAAQ,IAAI,SAAS,IAAI,aAAa,CAAC;iCACnD;qCAAM,IAAI,WAAW,EAAE;AACtB,oCAAA,QAAQ,GAAG,QAAQ,IAAI,SAAS,IAAI,WAAW,CAAC;iCACjD;6BACF;yBACF;qBACF;yBAAM;AACL,wBAAA,IACE,IAAI,CAAC,GAAG,CAAC,KAAK,SAAS;AACvB,4BAAA,IAAI,CAAC,GAAG,CAAC,KAAK,IAAI;AAClB,4BAAA,WAAW,CAAC,GAAG,CAAC,CAAC,KAAK,KAAK,SAAS;4BACpC,WAAW,CAAC,GAAG,CAAC,CAAC,KAAK,KAAK,IAAI,EAC/B;4BACA,QAAQ;gCACN,QAAQ;AACR,qCAAC,WAAW,CAAC,GAAG,CAAC,CAAC,SAAS,KAAK,OAAO;0CACnC,IAAI,CAAC,GAAG,CAAC,KAAK,WAAW,CAAC,GAAG,CAAC,CAAC,KAAK;AACtC,0CAAE,IAAI,CAAC,GAAG,CAAC;AACN,6CAAA,QAAQ,EAAE;AACV,6CAAA,WAAW,EAAE;AACb,6CAAA,OAAO,CACN,WAAW,CAAC,GAAG,CAAC,CAAC,KAAM,CAAC,QAAQ,EAAE,CAAC,WAAW,EAAE,CACjD,KAAK,CAAC,CAAC,CAAC,CAAC;yBACnB;qBACF;iBACF;AACH,aAAC,CAAC,CAAC;AACH,YAAA,IAAI,WAAW,CAAC,cAAc,EAAE;gBAC9B,cAAc,GAAG,KAAK,CAAC;AACvB,gBAAA,IAAI,CAAC,qBAAqB,CAAC,OAAO,CAAC,GAAG,IAAG;AACvC,oBAAA,IAAI,IAAI,CAAC,GAAG,CAAC,EAAE;wBACb,cAAc;4BACZ,cAAc;gCACd,IAAI,CAAC,GAAG,CAAC;AACN,qCAAA,QAAQ,EAAE;AACV,qCAAA,WAAW,EAAE;AACb,qCAAA,OAAO,CACN,WAAW,CAAC,cAAc,CAAC,QAAQ,EAAE,CAAC,WAAW,EAAE,CACpD,KAAK,CAAC,CAAC,CAAC;qBACd;AACH,iBAAC,CAAC,CAAC;aACJ;;YAGD,IAAI,cAAc,GAAG,IAAI,CAAC;AAC1B,YAAA,IAAI,IAAI,CAAC,gBAAgB,EAAE,EAAE;gBAC3B,cAAc,GAAG,IAAI,CAAC,gBAAgB,EAAG,CAAC,IAAI,CAAC,CAAC;aACjD;AAED,YAAA,OAAO,QAAQ,IAAI,cAAc,IAAI,cAAc,CAAC;AACtD,SAAC,CAAC;AACF,QAAA,OAAO,cAAc,CAAC;KACvB;IAEO,eAAe,GAAA;AACrB,QAAA,IAAI,IAAI,CAAC,WAAW,EAAE,EAAE;AACtB,YAAA,MAAM,eAAe,GAA4B;gBAC/C,KAAK,EAAE,IAAI,CAAC,SAAS,CAAC,SAAS,GAAG,IAAI,CAAC,SAAS,CAAC,QAAQ;AACzD,gBAAA,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,QAAQ;gBAC7B,mBAAmB,EAAE,IAAI,CAAC,qBAAqB;AAC/C,gBAAA,YAAY,EAAE,IAAI,CAAC,gBAAgB,CAAC,YAAY;AAChD,gBAAA,SAAS,EAAE,IAAI,CAAC,gBAAgB,CAAC,SAAS;AAC1C,gBAAA,SAAS,EAAE,IAAI,CAAC,gBAAgB,CAAC,SAAS;AAC1C,gBAAA,OAAO,EAAE,IAAI,CAAC,gBAAgB,CAAC,OAAO;aACvC,CAAC;AAEF,YAAA,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC;SACrC;aAAM;YACL,IAAI,CAAC,WAAW,CAAC,MAAM,GAAG,IAAI,CAAC,SAAS,CAAC;AACvC,gBAAA,GAAG,IAAI,CAAC,gBAAgB,CAAC,OAAO;AAChC,gBAAA,cAAc,EAAE,IAAI,CAAC,gBAAgB,CAAC,YAAY;AACnD,aAAA,CAAC,CAAC;SACJ;KACF;IAEO,wBAAwB,GAAA;AAC9B,QAAA,IAAI,IAAI,CAAC,gBAAgB,EAAE,EAAE;AAC3B,YAAA,YAAY,CAAC,OAAO,CAClB,IAAI,CAAC,gBAAgB,EAAG,EACxB,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,gBAAgB,CAAC,CACtC,CAAC;SACH;KACF;IAEO,YAAY,GAAA;QAClB,IAAI,CAAC,WAAW,GAAG,IAAI,kBAAkB,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QAEtD,IAAI,CAAC,SAAS,CAAC,QAAQ,GAAG,IAAI,CAAC,gBAAgB,CAAC,QAAQ,CAAC;QACzD,IAAI,CAAC,SAAS,CAAC,SAAS,GAAG,IAAI,CAAC,gBAAgB,CAAC,SAAS,CAAC;AAE3D,QAAA,IAAI,IAAI,CAAC,gBAAgB,CAAC,SAAS,IAAI,IAAI,CAAC,gBAAgB,CAAC,SAAS,EAAE;YACtE,MAAM,YAAY,GAAG,KAAK,CAAC;AAC3B,YAAA,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,YAAY,EAAE,CAAC,CAAC;AACvD,YAAA,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC;AACb,gBAAA,EAAE,EAAE,IAAI,CAAC,gBAAgB,CAAC,SAAS;AACnC,gBAAA,KAAK,EAAE,IAAI,CAAC,gBAAgB,CAAC,SAAS;gBACtC,YAAY;AACb,aAAA,CAAC,CAAC;SACJ;AAED,QAAA,IAAI,CAAC,IAAI,CAAC,WAAW,EAAG,EAAE;YACxB,IAAI,CAAC,WAAW,CAAC,SAAS,GAAG,IAAI,CAAC,SAAS,CAAC;YAC5C,IAAI,CAAC,WAAW,CAAC,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC;YAClC,IAAI,CAAC,WAAW,CAAC,eAAe,GAAG,IAAI,CAAC,+BAA+B,EAAE,CAAC;SAC3E;QAED,IAAI,CAAC,eAAe,EAAE,CAAC;KACxB;IAEO,uBAAuB,GAAA;QAC7B,IAAI,CAAC,IAAI,CAAC,UAAU;AACjB,aAAA,IAAI,CACH,SAAS,CAAC,IAAI,CAAC,YAAY,CAAC,EAC5B,oBAAoB,CAClB,CAAC,IAAI,EAAE,IAAI,KAAK,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,KAAK,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAC9D,CACF;aACA,SAAS,CAAC,GAAG,IAAG;YACf,IAAI,CAAC,gBAAgB,GAAG;gBACtB,GAAG,IAAI,CAAC,gBAAgB;gBACxB,SAAS,EAAE,GAAG,CAAC,MAAM;gBACrB,SAAS,EAAE,GAAG,CAAC,SAAS;aACzB,CAAC;YACF,IAAI,CAAC,wBAAwB,EAAE,CAAC;YAChC,IAAI,CAAC,eAAe,EAAE,CAAC;AACzB,SAAC,CAAC,CAAC;QAEL,IAAI,CAAC,SAAS,CAAC,IAAI;AAChB,aAAA,IAAI,CACH,SAAS,CAAC,IAAI,CAAC,YAAY,CAAC,EAC5B,oBAAoB,CAClB,CAAC,IAAI,EAAE,IAAI,KAAK,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,KAAK,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAC9D,CACF;aACA,SAAS,CAAC,GAAG,IAAG;YACf,IAAI,CAAC,gBAAgB,GAAG;gBACtB,GAAG,IAAI,CAAC,gBAAgB;AACxB,gBAAA,SAAS,EAAE,IAAI,CAAC,SAAS,CAAC,SAAS;AACnC,gBAAA,QAAQ,EAAE,IAAI,CAAC,SAAS,CAAC,QAAQ;aAClC,CAAC;YAEF,IAAI,CAAC,wBAAwB,EAAE,CAAC;YAChC,IAAI,CAAC,eAAe,EAAE,CAAC;AACzB,SAAC,CAAC,CAAC;KACN;IAEO,mBAAmB,GAAA;AACzB,QAAA,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,gBAAgB,EAAE,CAAC,GAAG,CAAC,GAAG,IAAG;YAC/C,OAAO;AACL,gBAAA,GAAG,GAAG;AACN,gBAAA,IAAI,EAAE,GAAG,CAAC,IAAI,GAAG,GAAG,CAAC,IAAI,GAAG,QAAQ;AACpC,gBAAA,OAAO,EAAE,IAAI;AACb,gBAAA,QAAQ,EAAE,IAAI;AACd,gBAAA,SAAS,EAAE,KAAK;aACjB,CAAC;AACJ,SAAC,CAAC,CAAC;QAEH,IAAI,CAAC,eAAe,EAAE,CAAC;QACvB,IAAI,CAAC,iBAAiB,EAAE,CAAC;QACzB,IAAI,CAAC,kBAAkB,EAAE,CAAC;AAC1B,QAAA,IAAI,CAAC,iBAAiB,CAAC,YAAY,EAAE,CAAC;KACvC;IAEO,eAAe,GAAA;AACrB,QAAA,IAAI,IAAI,CAAC,gBAAgB,EAAE,YAAY,EAAE;YACvC,IAAI,CAAC,OAAO,GAAG;AACb,gBAAA,GAAG,IAAI,CAAC,gBAAgB,CAAC,YAAY;qBAClC,MAAM,CAAC,MAAM,IAAI,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,GAAG,CAAC,KAAK,KAAK,MAAM,CAAC,CAAC;qBAChE,GAAG,CAAC,MAAM,IAAI,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,GAAG,CAAC,KAAK,KAAK,MAAM,CAAE,CAAC;gBACjE,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,CACpB,MAAM,IAAI,CAAC,IAAI,CAAC,gBAAgB,CAAC,YAAY,CAAC,QAAQ,CAAC,MAAM,CAAC,KAAK,CAAC,CACrE;aACF,CAAC;SACH;KACF;IAEO,iBAAiB,GAAA;AACvB,QAAA,IAAI,IAAI,CAAC,gBAAgB,EAAE,eAAe,EAAE;YAC1C,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,IAAG;gBACpC,OAAO;AACL,oBAAA,GAAG,GAAG;AACN,oBAAA,OAAO,EACL,IAAI,CAAC,gBAAgB,CAAC,eAAe,CAAC,QAAQ,CAAC,GAAG,CAAC,KAAK,CAAC;wBACzD,CAAC,IAAI,CAAC,gBAAgB,CAAC,YAAY,CAAC,QAAQ,CAAC,GAAG,CAAC,KAAK,CAAC;iBAC1D,CAAC;AACJ,aAAC,CAAC,CAAC;SACJ;KACF;IAEO,kBAAkB,GAAA;QACxB,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,GAAG,IAAG;YAC/C,OAAO,GAAG,CAAC,OAAO,CAAC;AACrB,SAAC,CAAC,CAAC;AACH,QAAA,IAAI,CAAC,qBAAqB,GAAG,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,GAAG,IAAI,GAAG,CAAC,KAAK,CAAC,CAAC;AACxE,QAAA,IAAI,CAAC,iBAAiB,CAAC,YAAY,EAAE,CAAC;KACvC;IAEO,oBAAoB,GAAA;AAC1B,QAAA,IAAI,IAAI,CAAC,gBAAgB,EAAE,EAAE;YAC3B,MAAM,gBAAgB,GAAG,YAAY,CAAC,OAAO,CAAC,IAAI,CAAC,gBAAgB,EAAG,CAAC,CAAC;YAExE,IAAI,gBAAgB,EAAE;gBACpB,IAAI,CAAC,gBAAgB,GAAG,IAAI,CAAC,KAAK,CAAC,gBAAgB,CAAC,CAAC;;;;;gBAKrD,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,gBAAgB,CAAC,OAAO,CAAC;gBAEjD,IAAI,CAAC,gBAAgB,GAAG,IAAI,CAAC,gBAAgB,CAAC,YAAY,CAAC;aAC5D;iBAAM;gBACL,IAAI,CAAC,2BAA2B,EAAE,CAAC;aACpC;SACF;aAAM;YACL,IAAI,CAAC,2BAA2B,EAAE,CAAC;SACpC;KACF;AAEO,IAAA,0BAA0B,CAAC,UAElC,EAAA;QACC,MAAM,UAAU,GAA6C,EAAE,CAAC;QAChE,MAAM,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;AAErC,QAAA,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC,EAAE;AACrB,YAAA,OAAO,UAAU,CAAC;SACnB;AACD,QAAA,KAAK,MAAM,GAAG,IAAI,IAAI,EAAE;AACtB,YAAA,IAAI,OAAO,UAAU,CAAC,GAAG,CAAC,KAAK,QAAQ,IAAI,UAAU,CAAC,GAAG,CAAC,KAAK,IAAI,EAAE;gBACnE,UAAU,CAAC,GAAG,CAAC,GAAG,UAAU,CAAC,GAAG,CAA0B,CAAC;aAC5D;SACF;AAED,QAAA,OAAO,UAAU,CAAC;KACnB;IAEO,2BAA2B,GAAA;QACjC,IAAI,CAAC,gBAAgB,GAAG;AACtB,YAAA,QAAQ,EAAE,IAAI,CAAC,QAAQ,EAAE;AACzB,YAAA,SAAS,EAAE,CAAC;AACZ,YAAA,eAAe,EAAE,IAAI,CAAC,gBAAgB,EAAE,CAAC,GAAG,CAAC,GAAG,IAAI,GAAG,CAAC,KAAK,CAAC;AAC9D,YAAA,YAAY,EAAE,EAAE;AAChB,YAAA,YAAY,EAAE,IAAI,CAAC,gBAAgB,EAAE,CAAC,GAAG,CAAC,GAAG,IAAI,GAAG,CAAC,KAAK,CAAC;AAC3D,YAAA,OAAO,EAAE,EAAE;AACX,YAAA,SAAS,EAAE,EAAE;AACb,YAAA,SAAS,EAAE,KAAK;SACjB,CAAC;KACH;AAED,IAAA,qBAAqB,CAAC,MAAsC,EAAA;;QAE1D,MAAM,eAAe,GAAG,IAAI,CAAC,eAAe,CAAC,MAAM,CACjD,GAAG,IAAI,GAAG,CAAC,eAAe,IAAI,GAAG,CAAC,OAAO,CAC1C,CAAC;;AAGF,QAAA,QACE,eAAe,CAAC,MAAM,GAAG,CAAC,IAAI,eAAe,CAAC,CAAC,CAAC,CAAC,KAAK,KAAK,MAAM,CAAC,KAAK,EACvE;KACH;AAEO,IAAA,WAAW,CACjB,OAAY,EACZ,WAAgB,EAChB,YAA6C,EAAA;QAE7C,MAAM,eAAe,GAAG,YAAY;cAChC,CAAC,YAAY,CAAC;AAChB,cAAE,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,GAAG,IAAI,GAAG,CAAC,eAAe,CAAC,CAAC;AACpD,QAAA,MAAM,KAAK,GAAG,WAAW,CAAC,EAAE,CAAC;;QAG7B,IAAI,MAAM,GAAgC,YAAY;cAClD,EAAE,GAAG,IAAI,CAAC,gBAAgB,CAAC,KAAK,CAAC,EAAE;cACnC,EAAE,CAAC;;QAGP,IAAI,CAAC,YAAY,IAAI,IAAI,CAAC,gBAAgB,CAAC,KAAK,CAAC,EAAE;YACjD,MAAM,GAAG,EAAE,CAAC;SACb;QAED,IAAI,SAAS,GAAG,KAAK,CAAC;QACtB,IAAI,iBAAiB,GAAG,EAAE,CAAC;AAE3B,QAAA,KAAK,MAAM,GAAG,IAAI,eAAe,EAAE;YACjC,IAAI,aAAa,GAAG,KAAK,CAAC;YAC1B,IAAI,YAAY,GAAG,EAAE,CAAC;AAEtB,YAAA,IAAI,GAAG,CAAC,sBAAsB,EAAE;gBAC9B,MAAM,MAAM,GAAG,GAAG,CAAC,sBAAsB,CACvC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,EAClB,WAAW,CAAC,GAAG,CAAC,KAAK,CAAC,EACtB,WAAW,CACZ,CAAC;AACF,gBAAA,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE;oBACnB,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,MAAM,CAAC,YAAY,CAAC;oBACxC,aAAa,GAAG,IAAI,CAAC;oBACrB,SAAS,GAAG,IAAI,CAAC;AACjB,oBAAA,YAAY,GAAG,MAAM,CAAC,YAAY,CAAC;iBACpC;aACF;AAED,YAAA,IAAI,CAAC,aAAa,IAAI,GAAG,CAAC,kBAAkB,EAAE;gBAC5C,MAAM,KAAK,GAAG,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;AACjC,gBAAA,IAAI,KAAK,KAAK,SAAS,IAAI,KAAK,KAAK,IAAI,IAAI,KAAK,KAAK,EAAE,EAAE;AACzD,oBAAA,YAAY,GAAG,CAAG,EAAA,GAAG,CAAC,MAAM,cAAc,CAAC;AAC3C,oBAAA,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,YAAY,CAAC;oBACjC,aAAa,GAAG,IAAI,CAAC;oBACrB,SAAS,GAAG,IAAI,CAAC;iBAClB;aACF;;AAGD,YAAA,IAAI,CAAC,aAAa,IAAI,YAAY,EAAE;AAClC,gBAAA,OAAO,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;aAC1B;;YAGD,IAAI,CAAC,YAAY,IAAI,aAAa,IAAI,CAAC,iBAAiB,EAAE;gBACxD,iBAAiB,GAAG,YAAY,CAAC;aAClC;SACF;;QAGD,IAAI,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,MAAM,GAAG,CAAC,EAAE;AAClC,YAAA,IAAI,CAAC,gBAAgB,CAAC,KAAK,CAAC,GAAG,MAAM,CAAC;SACvC;aAAM;AACL,YAAA,OAAO,IAAI,CAAC,gBAAgB,CAAC,KAAK,CAAC,CAAC;SACrC;;AAGD,QAAA,IAAI,CAAC,YAAY,IAAI,SAAS,IAAI,iBAAiB,EAAE;AACnD,YAAA,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,iBAAiB,CAAC,CAAC;SACxC;AAED,QAAA,IAAI,CAAC,iBAAiB,CAAC,YAAY,EAAE,CAAC;QACtC,OAAO,CAAC,SAAS,CAAC;KACnB;AAEO,IAAA,qBAAqB,CAAC,KAAa,EAAE,GAAQ,EAAE,OAAY,EAAA;AACjE,QAAA,IAAI,KAAK,IAAI,CAAC,IAAI,KAAK,GAAG,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,MAAM,EAAE;AACtD,YAAA,MAAM,UAAU,GAAG,EAAE,GAAG,GAAG,EAAE,CAAC;AAC9B,YAAA,IAAI,CAAC,OAAO;iBACT,MAAM,CAAC,GAAG,IAAI,GAAG,CAAC,eAAe,CAAC;iBAClC,OAAO,CAAC,GAAG,IAAG;AACb,gBAAA,UAAU,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;AAC7C,aAAC,CAAC,CAAC;YAEL,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,UAAU,CAAC;AAC1C,YAAA,IAAI,CAAC,WAAW,CAAC,IAAI,GAAG,CAAC,GAAG,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC;SACpD;KACF;IAEO,iBAAiB,GAAA;AACvB,QAAA,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC;;QAGnD,IAAI,CAAC,uBAAuB,EAAE,CAAC;QAC/B,IAAI,CAAC,qBAAqB,EAAE,CAAC;QAC7B,IAAI,CAAC,uBAAuB,EAAE,CAAC;QAE/B,IAAI,CAAC,4BAA4B,EAAE,CAAC;KACrC;IAEO,uBAAuB,GAAA;AAC7B,QAAA,IAAI,CAAC,IAAI,CAAC,cAAc,EAAE,EAAE;AAC1B,YAAA,IAAI,CAAC,kBAAkB,CAAC,uBAAuB,CAAC,CAAC;YACjD,OAAO;SACR;AAED,QAAA,IAAI,CAAC,gBAAgB,EAAE,CAAC,OAAO,CAAC;AAC9B,YAAA,KAAK,EAAE,uBAAuB;AAC9B,YAAA,MAAM,EAAE,EAAE;AACV,YAAA,IAAI,EAAE,uBAAuB;AAC7B,YAAA,IAAI,EAAE,KAAK;AACX,YAAA,MAAM,EAAE,KAAK;AACb,YAAA,KAAK,EAAE,MAAM;YACb,iBAAiB,EACf,IAAI,CAAC,mBAAmB,CAAC,eAAe,EAAE,EAAE,CAAC,oBAAoB;AACpE,SAAA,CAAC,CAAC;AAEH,QAAA,IAAI,IAAI,CAAC,eAAe,EAAE,EAAE;AAC1B,YAAA,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC,eAAe,EAAE,CAAC,CAAC,CAAC;SACpD;KACF;IAEO,qBAAqB,GAAA;QAC3B,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE,IAAI,IAAI,CAAC,gBAAgB,EAAE,EAAE;AACnD,YAAA,IAAI,CAAC,kBAAkB,CAAC,qBAAqB,CAAC,CAAC;YAC/C,OAAO;SACR;AAED,QAAA,MAAM,aAAa,GAA+B;AAChD,YAAA,KAAK,EAAE,qBAAqB;AAC5B,YAAA,MAAM,EAAE,EAAE;AACV,YAAA,IAAI,EAAE,qBAAqB;AAC3B,YAAA,IAAI,EAAE,KAAK;AACX,YAAA,MAAM,EAAE,KAAK;AACb,YAAA,KAAK,EAAE,OAAO;YACd,iBAAiB,EACf,IAAI,CAAC,mBAAmB,CAAC,eAAe,EAAE,EAAE,CAAC,qBAAqB;SACrE,CAAC;AAEF,QAAA,IAAI,CAAC,gBAAgB,CAAC,MAAM,CAAC,OAAO,IAAG;YACrC,MAAM,UAAU,GAAG,OAAO,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;AAC/C,YAAA,IAAI,UAAU,EAAE,IAAI,KAAK,SAAS,EAAE;AAClC,gBAAA,OAAO,CAAC,GAAG,OAAO,EAAE,aAAa,CAAC,CAAC;aACpC;AACD,YAAA,MAAM,UAAU,GAAG,CAAC,GAAG,OAAO,CAAC,CAAC;AAChC,YAAA,UAAU,CAAC,MAAM,CAAC,UAAU,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC,EAAE,aAAa,CAAC,CAAC;AAC3D,YAAA,OAAO,UAAU,CAAC;AACpB,SAAC,CAAC,CAAC;KACJ;IAEO,uBAAuB,GAAA;AAC7B,QAAA,IAAI,CAAC,IAAI,CAAC,cAAc,EAAE,EAAE;AAC1B,YAAA,IAAI,CAAC,kBAAkB,CAAC,uBAAuB,CAAC,CAAC;YACjD,OAAO;SACR;AAED,QAAA,IAAI,CAAC,gBAAgB,EAAE,CAAC,OAAO,CAAC;AAC9B,YAAA,KAAK,EAAE,uBAAuB;AAC9B,YAAA,MAAM,EAAE,EAAE;AACV,YAAA,IAAI,EAAE,uBAAuB;AAC7B,YAAA,IAAI,EAAE,KAAK;AACX,YAAA,MAAM,EAAE,KAAK;AACb,YAAA,KAAK,EAAE,MAAM;YACb,iBAAiB,EACf,IAAI,CAAC,mBAAmB,CAAC,eAAe,EAAE,EAAE,CAAC,oBAAoB;AACpE,SAAA,CAAC,CAAC;KACJ;AAEO,IAAA,kBAAkB,CAAC,IAAY,EAAA;QACrC,IAAI,CAAC,gBAAgB,CAAC,MAAM,CAAC,OAAO,IAClC,OAAO,CAAC,MAAM,CAAC,MAAM,IAAI,MAAM,CAAC,KAAK,KAAK,IAAI,CAAC,CAChD,CAAC;KACH;IAEO,wBAAwB,GAAA;QAC9B,MAAM,UAAU,GAAG,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;AACjD,QAAA,IAAI,UAAU,CAAC,MAAM,KAAK,CAAC;YAAE,OAAO;QAEpC,MAAM,UAAU,GAA6C,EAAE,CAAC;AAEhE,QAAA,KAAK,MAAM,GAAG,IAAI,UAAU,EAAE;AAC5B,YAAA,MAAM,GAAG,GAAG,IAAI,CAAC,gBAAgB,EAAE,CAAC,IAAI,CAAC,MAAM,IAAI,MAAM,CAAC,KAAK,KAAK,GAAG,CAAC,CAAC;AACzE,YAAA,IAAI,CAAC,GAAG;gBAAE,SAAS;YAEnB,UAAU,CAAC,GAAG,CAAC,GAAG;AAChB,gBAAA,KAAK,EAAE,IAAI,CAAC,qBAAqB,CAAC,GAAG,EAAE,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC;gBAC7D,SAAS,EAAE,kCAAkC,CAAC,sBAAsB,CAClE,GAAG,CAAC,UAAW,CAChB;aACF,CAAC;SACH;AAED,QAAA,IAAI,IAAI,CAAC,SAAS,CAAC,UAAU,CAAC,KAAK,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,WAAW,CAAC,EAAE;AACnE,YAAA,IAAI,CAAC,WAAW,GAAG,UAAU,CAAC;AAC9B,YAAA,IAAI,CAAC,gBAAgB,CAAC,OAAO,GAAG,UAAU,CAAC;YAC3C,IAAI,CAAC,wBAAwB,EAAE,CAAC;SACjC;KACF;IAEO,qBAAqB,CAC3B,GAA+B,EAC/B,MAA6B,EAAA;AAE7B,QAAA,IAAI,MAAM,CAAC,SAAS,KAAK,OAAO,EAAE;AAChC,YAAA,QAAQ,MAAM,CAAC,KAAK,IAAI,IAAI,EAAoC;SACjE;AAED,QAAA,IAAI,MAAM,CAAC,SAAS,KAAK,SAAS,EAAE;YAClC,OAAO,MAAM,CAAC,KAAK,IAAI,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC;kBAC9C,MAAM,CAAC,KAAK;AACd,kBAAE,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;SAClB;AAED,QAAA,QAAQ,MAAM,CAAC,KAAK,IAAI,EAAE,EAAoC;KAC/D;AAED;;AAEG;AACK,IAAA,gBAAgB,CAAC,IAAW,EAAA;QAClC,IAAI,CAAC,IAAI,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE;AACjC,YAAA,IAAI,CAAC,KAAK,GAAG,EAAE,CAAC;AAChB,YAAA,IAAI,IAAI,CAAC,WAAW,EAAE;AACpB,gBAAA,IAAI,CAAC,WAAW,CAAC,IAAI,GAAG,EAAE,CAAC;aAC5B;YACD,OAAO;SACR;AAED,QAAA,IACE,IAAI,CAAC,MAAM,GAAG,CAAC;AACf,YAAA,IAAI,CAAC,KAAK,CAAC,MAAM,KAAK,IAAI,CAAC,MAAM;AACjC,YAAA,IAAI,CAAC,wBAAwB,EAAE,EAC/B;YACA,MAAM,UAAU,GAAG,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,IAAI,GAAG,KAAK,IAAI,CAAC,CAAC;;AAGpE,YAAA,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,WAAW,EAAE,KAAK,KAAI;AACnD,gBAAA,UAAU,CAAC,OAAO,CAAC,GAAG,IAAG;oBACvB,WAAW,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC;AACtC,iBAAC,CAAC,CAAC;AACL,aAAC,CAAC,CAAC;;AAGH,YAAA,IAAI,CAAC,WAAW,CAAC,yBAAyB,EAAE,CAAC;;AAG7C,YAAA,IAAI,IAAI,CAAC,QAAQ,EAAE;AACjB,gBAAA,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI,IAAG;oBAC3B,IAAI,CAAC,sBAAsB,EAAE,CAAC;AAChC,iBAAC,CAAC,CAAC;aACJ;AAED,YAAA,IAAI,CAAC,iBAAiB,CAAC,aAAa,EAAE,CAAC;SACxC;aAAM;;;YAGL,IAAI,IAAI,CAAC,KAAK,CAAC,MAAM,KAAK,IAAI,CAAC,MAAM,EAAE;gBACrC,MAAM,cAAc,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,IAAG;AACpC,oBAAA,MAAM,GAAG,GAAG,EAAE,GAAG,GAAG,EAAE,CAAC;oBACvB,OAAO,GAAG,CAAC,EAAE,CAAC;AACd,oBAAA,OAAO,GAAG,CAAC;AACb,iBAAC,CAAC,CAAC;gBACH,MAAM,qBAAqB,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,IAAG;AACjD,oBAAA,MAAM,GAAG,GAAG,EAAE,GAAG,GAAG,EAAE,CAAC;oBACvB,OAAO,GAAG,CAAC,EAAE,CAAC;AACd,oBAAA,OAAO,GAAG,CAAC;AACb,iBAAC,CAAC,CAAC;AAEH,gBAAA,IACE,IAAI,CAAC,SAAS,CAAC,cAAc,CAAC;AAC9B,oBAAA,IAAI,CAAC,SAAS,CAAC,qBAAqB,CAAC,EACrC;oBACA,OAAO;iBACR;aACF;;AAGD,YAAA,IAAI,UAAU,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,KAAK,EAAE,GAAG,GAAG,EAAE,CAAC,CAAC,CAAC;;AAG/C,YAAA,IAAI,IAAI,CAAC,YAAY,EAAE,IAAI,IAAI,CAAC,cAAc,EAAE,IAAI,IAAI,CAAC,gBAAgB,EAAE,EAAE;AAC3E,gBAAA,UAAU,GAAG,UAAU,CAAC,GAAG,CAAC,GAAG,IAAG;;AAEhC,oBAAA,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE;wBACX,OAAO;AACL,4BAAA,GAAG,GAAG;AACN,4BAAA,EAAE,EAAE,aAAa,CAAC,YAAY,EAAE;yBACjC,CAAC;qBACH;AACD,oBAAA,OAAO,GAAG,CAAC;AACb,iBAAC,CAAC,CAAC;aACJ;AAED,YAAA,IAAI,CAAC,KAAK,GAAG,UAAU,CAAC;AAExB,YAAA,IAAI,IAAI,CAAC,WAAW,EAAE;AACpB,gBAAA,IAAI,CAAC,WAAW,CAAC,IAAI,GAAG,UAAU,CAAC;gBACnC,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,IAAI,IAAI,CAAC,gBAAgB,EAAE;oBAChD,IAAI,CAAC,SAAS,CAAC,SAAS,GAAG,IAAI,CAAC,gBAAgB,CAAC,SAAS,CAAC;;oBAE3D,IAAI,CAAC,SAAS,CAAC,cAAc,CAAC,IAAI,CAAC,gBAAgB,CAAC,SAAS,CAAC,CAAC;iBAChE;AAED,gBAAA,IAAI,CAAC,iBAAiB,CAAC,YAAY,EAAE,CAAC;aACvC;SACF;KACF;+GA1oCU,sBAAsB,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAA,EAAA,CAAA,iBAAA,EAAA,EAAA,EAAA,KAAA,EAAAN,IAAA,CAAA,iBAAA,EAAA,EAAA,EAAA,KAAA,EAAAO,2BAAA,EAAA,EAAA,EAAA,KAAA,EAAAd,IAAA,CAAA,eAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA,EAAA;mGAAtB,sBAAsB,EAAA,QAAA,EAAA,uBAAA,EAAA,MAAA,EAAA,EAAA,gBAAA,EAAA,EAAA,iBAAA,EAAA,kBAAA,EAAA,UAAA,EAAA,kBAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,UAAA,EAAA,EAAA,iBAAA,EAAA,YAAA,EAAA,UAAA,EAAA,YAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,QAAA,EAAA,EAAA,iBAAA,EAAA,UAAA,EAAA,UAAA,EAAA,UAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,UAAA,EAAA,EAAA,iBAAA,EAAA,YAAA,EAAA,UAAA,EAAA,YAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,gBAAA,EAAA,EAAA,iBAAA,EAAA,kBAAA,EAAA,UAAA,EAAA,kBAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,mBAAA,EAAA,EAAA,iBAAA,EAAA,qBAAA,EAAA,UAAA,EAAA,qBAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,gBAAA,EAAA,EAAA,iBAAA,EAAA,kBAAA,EAAA,UAAA,EAAA,kBAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,WAAA,EAAA,EAAA,iBAAA,EAAA,aAAA,EAAA,UAAA,EAAA,aAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,SAAA,EAAA,EAAA,iBAAA,EAAA,WAAA,EAAA,UAAA,EAAA,WAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,WAAA,EAAA,EAAA,iBAAA,EAAA,aAAA,EAAA,UAAA,EAAA,aAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,cAAA,EAAA,EAAA,iBAAA,EAAA,gBAAA,EAAA,UAAA,EAAA,gBAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,YAAA,EAAA,EAAA,iBAAA,EAAA,cAAA,EAAA,UAAA,EAAA,cAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,oBAAA,EAAA,EAAA,iBAAA,EAAA,sBAAA,EAAA,UAAA,EAAA,sBAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,kBAAA,EAAA,EAAA,iBAAA,EAAA,oBAAA,EAAA,UAAA,EAAA,oBAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,eAAA,EAAA,EAAA,iBAAA,EAAA,iBAAA,EAAA,UAAA,EAAA,iBAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,gBAAA,EAAA,EAAA,iBAAA,EAAA,kBAAA,EAAA,UAAA,EAAA,kBAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,mBAAA,EAAA,EAAA,iBAAA,EAAA,qBAAA,EAAA,UAAA,EAAA,qBAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,qBAAA,EAAA,EAAA,iBAAA,EAAA,uBAAA,EAAA,UAAA,EAAA,uBAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,cAAA,EAAA,EAAA,iBAAA,EAAA,gBAAA,EAAA,UAAA,EAAA,gBAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,mBAAA,EAAA,EAAA,iBAAA,EAAA,qBAAA,EAAA,UAAA,EAAA,qBAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,gBAAA,EAAA,EAAA,iBAAA,EAAA,kBAAA,EAAA,UAAA,EAAA,kBAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,qBAAA,EAAA,EAAA,iBAAA,EAAA,uBAAA,EAAA,UAAA,EAAA,uBAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,gBAAA,EAAA,EAAA,iBAAA,EAAA,kBAAA,EAAA,UAAA,EAAA,kBAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,iBAAA,EAAA,EAAA,iBAAA,EAAA,mBAAA,EAAA,UAAA,EAAA,mBAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,kBAAA,EAAA,EAAA,iBAAA,EAAA,oBAAA,EAAA,UAAA,EAAA,oBAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,mBAAA,EAAA,EAAA,iBAAA,EAAA,qBAAA,EAAA,UAAA,EAAA,qBAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,cAAA,EAAA,EAAA,iBAAA,EAAA,gBAAA,EAAA,UAAA,EAAA,gBAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,cAAA,EAAA,EAAA,iBAAA,EAAA,gBAAA,EAAA,UAAA,EAAA,gBAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,mBAAA,EAAA,EAAA,iBAAA,EAAA,qBAAA,EAAA,UAAA,EAAA,qBAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,eAAA,EAAA,EAAA,iBAAA,EAAA,iBAAA,EAAA,UAAA,EAAA,iBAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,iBAAA,EAAA,EAAA,iBAAA,EAAA,mBAAA,EAAA,UAAA,EAAA,mBAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,gBAAA,EAAA,EAAA,iBAAA,EAAA,kBAAA,EAAA,UAAA,EAAA,kBAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,IAAA,EAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,UAAA,EAAA,MAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,wBAAA,EAAA,EAAA,iBAAA,EAAA,0BAAA,EAAA,UAAA,EAAA,0BAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,WAAA,EAAA,EAAA,iBAAA,EAAA,aAAA,EAAA,UAAA,EAAA,aAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,OAAA,EAAA,EAAA,QAAA,EAAA,UAAA,EAAA,aAAA,EAAA,eAAA,EAAA,cAAA,EAAA,gBAAA,EAAA,UAAA,EAAA,YAAA,EAAA,eAAA,EAAA,iBAAA,EAAA,iBAAA,EAAA,mBAAA,EAAA,EAAA,WAAA,EAAA,CAAA,EAAA,YAAA,EAAA,WAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAItB,YAAY,EACZ,WAAA,EAAA,IAAA,EAAA,EAAA,EAAA,YAAA,EAAA,MAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,OAAO,8DACJ,6BAA6B,EAAA,WAAA,EAAA,IAAA,EAAA,CAAA,EAAA,eAAA,EAAA,IAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EC3E7C,0wNA4KA,EDrHc,MAAA,EAAA,CAAA,0TAAA,EAAA,6zQAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAI,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,EAAA,CAAA,gBAAA,EAAA,QAAA,EAAA,oBAAA,EAAA,MAAA,EAAA,CAAA,yBAAA,EAAA,kBAAA,EAAA,0BAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAH,EAAA,CAAA,aAAA,EAAA,QAAA,EAAA,yBAAA,EAAA,QAAA,EAAA,CAAA,WAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,UAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,SAAA,EAAA,SAAA,EAAA,UAAA,CAAA,EAAA,QAAA,EAAA,CAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAG,IAAA,CAAA,QAAA,EAAA,QAAA,EAAA,6BAAA,EAAA,QAAA,EAAA,CAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,gBAAA,EAAA,QAAA,EAAA,oBAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,eAAA,EAAA,QAAA,EAAA,mBAAA,EAAA,MAAA,EAAA,CAAA,iBAAA,EAAA,uBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,YAAA,EAAA,QAAA,EAAA,gBAAA,EAAA,MAAA,EAAA,CAAA,cAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,UAAA,EAAA,QAAA,EAAA,cAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,SAAA,EAAA,QAAA,EAAA,aAAA,EAAA,MAAA,EAAA,CAAA,kBAAA,EAAA,eAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,aAAA,EAAA,QAAA,EAAA,sCAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,OAAA,EAAA,QAAA,EAAA,wBAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,YAAA,EAAA,QAAA,EAAA,oCAAA,EAAA,QAAA,EAAA,CAAA,cAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,MAAA,EAAA,QAAA,EAAA,sBAAA,EAAA,QAAA,EAAA,CAAA,QAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAI,EAAA,CAAA,YAAA,EAAA,QAAA,EAAA,eAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,WAAA,EAAA,QAAA,EAAA,UAAA,EAAA,iBAAA,EAAA,cAAA,EAAA,sBAAA,EAAA,cAAA,EAAA,UAAA,CAAA,EAAA,OAAA,EAAA,CAAA,MAAA,CAAA,EAAA,QAAA,EAAA,CAAA,cAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAD,IAAA,CAAA,UAAA,EAAA,QAAA,EAAA,cAAA,EAAA,MAAA,EAAA,CAAA,oBAAA,EAAA,4BAAA,EAAA,oBAAA,EAAA,qBAAA,EAAA,qBAAA,EAAA,yBAAA,EAAA,YAAA,EAAA,iBAAA,CAAA,EAAA,QAAA,EAAA,CAAA,YAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAE,KAAA,CAAA,OAAA,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,eAAA,EAAA,cAAA,EAAA,kBAAA,EAAA,qBAAA,EAAA,iBAAA,CAAA,EAAA,OAAA,EAAA,CAAA,eAAA,CAAA,EAAA,QAAA,EAAA,CAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,KAAA,CAAA,aAAA,EAAA,QAAA,EAAA,mBAAA,EAAA,MAAA,EAAA,CAAA,iBAAA,EAAA,eAAA,EAAA,OAAA,EAAA,UAAA,EAAA,uBAAA,EAAA,cAAA,CAAA,EAAA,QAAA,EAAA,CAAA,eAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,GAAA,CAAA,WAAA,EAAA,QAAA,EAAA,cAAA,EAAA,MAAA,EAAA,CAAA,YAAA,EAAA,iBAAA,EAAA,kBAAA,EAAA,IAAA,EAAA,UAAA,EAAA,eAAA,EAAA,MAAA,EAAA,OAAA,EAAA,eAAA,EAAA,UAAA,EAAA,OAAA,EAAA,qBAAA,EAAA,SAAA,EAAA,UAAA,EAAA,eAAA,CAAA,EAAA,OAAA,EAAA,CAAA,QAAA,EAAA,qBAAA,CAAA,EAAA,QAAA,EAAA,CAAA,aAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAI,KAAA,CAAA,kBAAA,EAAA,QAAA,EAAA,mCAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,MAAA,EAAA,OAAA,EAAA,UAAA,EAAA,aAAA,CAAA,EAAA,QAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,6BAAA,EAAA,QAAA,EAAA,2BAAA,EAAA,MAAA,EAAA,CAAA,kBAAA,EAAA,YAAA,EAAA,kBAAA,EAAA,qBAAA,EAAA,kBAAA,EAAA,aAAA,EAAA,kBAAA,EAAA,mBAAA,EAAA,oBAAA,EAAA,gBAAA,EAAA,qBAAA,EAAA,aAAA,EAAA,mBAAA,EAAA,SAAA,CAAA,EAAA,OAAA,EAAA,CAAA,oBAAA,EAAA,oBAAA,EAAA,WAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,6BAAA,EAAA,QAAA,EAAA,4BAAA,EAAA,MAAA,EAAA,CAAA,QAAA,EAAA,SAAA,EAAA,UAAA,EAAA,aAAA,EAAA,qBAAA,EAAA,uBAAA,EAAA,kBAAA,EAAA,uBAAA,EAAA,kBAAA,EAAA,eAAA,EAAA,eAAA,EAAA,YAAA,EAAA,cAAA,EAAA,sBAAA,EAAA,oBAAA,EAAA,YAAA,EAAA,YAAA,CAAA,EAAA,OAAA,EAAA,CAAA,oBAAA,EAAA,sBAAA,EAAA,gBAAA,EAAA,kBAAA,EAAA,iBAAA,EAAA,mBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,kCAAA,EAAA,QAAA,EAAA,iCAAA,EAAA,MAAA,EAAA,CAAA,gBAAA,EAAA,kBAAA,EAAA,cAAA,EAAA,qBAAA,EAAA,uBAAA,CAAA,EAAA,OAAA,EAAA,CAAA,mBAAA,CAAA,EAAA,CAAA,EAAA,UAAA,EAAA;YACV,OAAO,CAAC,cAAc,EAAE;AACtB,gBAAA,KAAK,CACH,gBAAgB,EAChB,KAAK,CAAC,EAAE,MAAM,EAAE,KAAK,EAAE,SAAS,EAAE,GAAG,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC,CACzD;gBACD,KAAK,CAAC,UAAU,EAAE,KAAK,CAAC,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC,CAAC;AACzC,gBAAA,UAAU,CACR,wBAAwB,EACxB,OAAO,CAAC,sCAAsC,CAAC,CAChD;aACF,CAAC;AACH,SAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,aAAA,EAAA,EAAA,CAAA,iBAAA,CAAA,IAAA,EAAA,CAAA,CAAA,EAAA;;4FAEU,sBAAsB,EAAA,UAAA,EAAA,CAAA;kBAvBlC,SAAS;+BACE,uBAAuB,EAAA,eAAA,EAMhB,uBAAuB,CAAC,MAAM,iBAChC,iBAAiB,CAAC,IAAI,EACzB,UAAA,EAAA;wBACV,OAAO,CAAC,cAAc,EAAE;AACtB,4BAAA,KAAK,CACH,gBAAgB,EAChB,KAAK,CAAC,EAAE,MAAM,EAAE,KAAK,EAAE,SAAS,EAAE,GAAG,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC,CACzD;4BACD,KAAK,CAAC,UAAU,EAAE,KAAK,CAAC,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC,CAAC;AACzC,4BAAA,UAAU,CACR,wBAAwB,EACxB,OAAO,CAAC,sCAAsC,CAAC,CAChD;yBACF,CAAC;AACH,qBAAA,EAAA,QAAA,EAAA,0wNAAA,EAAA,MAAA,EAAA,CAAA,0TAAA,EAAA,6zQAAA,CAAA,EAAA,CAAA;+LAMwB,SAAS,EAAA,CAAA;sBAAjC,SAAS;uBAAC,YAAY,CAAA;gBACH,IAAI,EAAA,CAAA;sBAAvB,SAAS;uBAAC,OAAO,CAAA;gBAElB,QAAQ,EAAA,CAAA;sBADP,YAAY;uBAAC,6BAA6B,CAAA;;;AExEvC,SAAU,iBAAiB,CAC/B,YAAqC,EAAA;AAErC,IAAA,MAAM,WAAW,GAAG,MAAM,CAAC,IAAI,CAAC,YAAY,CAAC,OAAO,IAAI,EAAE,CAAC,CAAC;IAE5D,OAAO;AACL,QAAA,YAAY,EAAE,YAAY,CAAC,YAAY,IAAI,EAAE;AAC7C,QAAA,IAAI,EAAE,YAAY,CAAC,IAAI,IAAI,EAAE;AAC7B,QAAA,IAAI,EAAE,YAAY,CAAC,KAAK,GAAG,YAAY,CAAC,KAAK,GAAG,CAAC;AACjD,QAAA,UAAU,EACR,YAAY,CAAC,SAAS,IAAI,YAAY,CAAC,SAAS;AAC9C,cAAE,YAAY,CAAC,SAAS,IAAI,EAAE;AAC9B,cAAE,EAAE;AACR,QAAA,cAAc,EAAE,YAAY,CAAC,SAAS,KAAK,MAAM;QACjD,OAAO,EACL,WAAW,EAAE,GAAG,CAAC,MAAM,KAAK;AAC1B,YAAA,SAAS,EAAE,MAAM;YACjB,QAAQ,EAAE,aAAa,CAAC,YAAY,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,SAAS,CAAC;AAC/D,YAAA,KAAK,EAAE,KAAK,CAAC,OAAO,CAAC,YAAY,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,KAAK,CAAC;kBACnD,YAAY,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,KAAa,CAAC,CAAC,CAAC;kBAC9C,YAAY,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,KAAK;AACtC,YAAA,WAAW,EAAE,KAAK,CAAC,OAAO,CAAC,YAAY,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,KAAK,CAAC;kBACzD,YAAY,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,KAAa,CAAC,CAAC,CAAC;AAChD,kBAAE,SAAS;SACd,CAAC,CAAC,IAAI,EAAE;KACZ,CAAC;AACJ,CAAC;AAED,SAAS,aAAa,CACpB,UAA8C,EAAA;IAE9C,QAAQ,UAAU;AAChB,QAAA,KAAK,UAAU;YACb,OAAO,0BAA0B,CAAC,IAAI,CAAC;AACzC,QAAA,KAAK,OAAO;YACV,OAAO,0BAA0B,CAAC,KAAK,CAAC;AAC1C,QAAA,KAAK,SAAS;YACZ,OAAO,0BAA0B,CAAC,OAAO,CAAC;AAC5C,QAAA;AACE,YAAA,MAAM,IAAI,KAAK,CAAC,wBAAwB,UAAU,CAAA,CAAE,CAAC,CAAC;KACzD;AACH,CAAC;MAWY,2BAA2B,CAAA;AAKvC,CAAA;IAEW,2BASX;AATD,CAAA,UAAY,0BAA0B,EAAA;AACpC,IAAA,0BAAA,CAAA,0BAAA,CAAA,OAAA,CAAA,GAAA,CAAA,CAAA,GAAA,OAAK,CAAA;AACL,IAAA,0BAAA,CAAA,0BAAA,CAAA,MAAA,CAAA,GAAA,CAAA,CAAA,GAAA,MAAI,CAAA;AACJ,IAAA,0BAAA,CAAA,0BAAA,CAAA,aAAA,CAAA,GAAA,CAAA,CAAA,GAAA,aAAW,CAAA;AACX,IAAA,0BAAA,CAAA,0BAAA,CAAA,oBAAA,CAAA,GAAA,CAAA,CAAA,GAAA,oBAAkB,CAAA;AAClB,IAAA,0BAAA,CAAA,0BAAA,CAAA,UAAA,CAAA,GAAA,CAAA,CAAA,GAAA,UAAQ,CAAA;AACR,IAAA,0BAAA,CAAA,0BAAA,CAAA,iBAAA,CAAA,GAAA,CAAA,CAAA,GAAA,iBAAe,CAAA;AACf,IAAA,0BAAA,CAAA,0BAAA,CAAA,SAAA,CAAA,GAAA,CAAA,CAAA,GAAA,SAAO,CAAA;AACP,IAAA,0BAAA,CAAA,0BAAA,CAAA,IAAA,CAAA,GAAA,CAAA,CAAA,GAAA,IAAE,CAAA;AACJ,CAAC,EATW,0BAA0B,KAA1B,0BAA0B,GASrC,EAAA,CAAA,CAAA;;MCiBY,cAAc,CAAA;AACzB,IAAA,WAAA,CAAoB,eAAgC,EAAA;QAAhC,IAAe,CAAA,eAAA,GAAf,eAAe,CAAiB;AAClD,QAAA,IAAI,CAAC,eAAe,CAAC,sBAAsB,CAAC,2BAA2B,CAAC,CAAC;KAC1E;IAED,OAAO,OAAO,CAAC,MAEd,EAAA;QACC,OAAO;AACL,YAAA,QAAQ,EAAE,cAAc;AACxB,YAAA,SAAS,EAAE;AACT,gBAAA;AACE,oBAAA,OAAO,EAAE,kBAAkB;oBAC3B,QAAQ,EAAE,MAAM,IAAI,EAAE;AACvB,iBAAA;AACF,aAAA;SACF,CAAC;KACH;+GAjBU,cAAc,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAAX,EAAA,CAAA,eAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,QAAA,EAAA,CAAA,CAAA,EAAA;AAAd,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,mBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,cAAc,iBA9CvB,6BAA6B;YAC7B,sBAAsB;YACtB,uCAAuC;YACvC,kCAAkC;YAClC,6BAA6B;YAC7B,kCAAkC;YAClC,oBAAoB;YACpB,4BAA4B;AAC5B,YAAA,6BAA6B,aAG7B,YAAY;YACZ,eAAe;YACf,aAAa;YACb,cAAc;YACd,kBAAkB;YAClB,kBAAkB;YAClB,cAAc;YACd,gBAAgB;YAChB,WAAW;YACX,mBAAmB;YACnB,YAAY;YACZ,kBAAkB;YAClB,aAAa;YACb,aAAa;YACb,eAAe;YACf,iBAAiB;YACjB,QAAQ;YACR,kBAAkB;YAClB,qBAAqB;YACrB,eAAe;YACf,kBAAkB;YAClB,WAAW;YACX,OAAO;YACP,gBAAgB;YAChB,mBAAmB;YACnB,oBAAoB;YACpB,mBAAmB;YACnB,gBAAgB;YAChB,cAAc;YACd,OAAO;YACP,aAAa,CAAA,EAAA,OAAA,EAAA,CAEL,sBAAsB,EAAE,oBAAoB,CAAA,EAAA,CAAA,CAAA,EAAA;AAG3C,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,mBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,cAAc,EAFd,SAAA,EAAA,CAAC,mBAAmB,CAAC,YAjC9B,YAAY;YACZ,eAAe;YACf,aAAa;YACb,cAAc;YACd,kBAAkB;YAClB,kBAAkB;YAClB,cAAc;YACd,gBAAgB;YAChB,WAAW;YACX,mBAAmB;YACnB,YAAY;YACZ,kBAAkB;YAClB,aAAa;YACb,aAAa;YACb,eAAe;YACf,iBAAiB;YAEjB,kBAAkB;YAClB,qBAAqB;YACrB,eAAe;YACf,kBAAkB;YAGlB,gBAAgB;YAChB,mBAAmB;YACnB,oBAAoB;YACpB,mBAAmB;YACnB,gBAAgB;YAChB,cAAc;YACd,OAAO,CAAA,EAAA,CAAA,CAAA,EAAA;;4FAME,cAAc,EAAA,UAAA,EAAA,CAAA;kBAhD1B,QAAQ;AAAC,YAAA,IAAA,EAAA,CAAA;AACR,oBAAA,YAAY,EAAE;wBACZ,6BAA6B;wBAC7B,sBAAsB;wBACtB,uCAAuC;wBACvC,kCAAkC;wBAClC,6BAA6B;wBAC7B,kCAAkC;wBAClC,oBAAoB;wBACpB,4BAA4B;wBAC5B,6BAA6B;AAC9B,qBAAA;AACD,oBAAA,OAAO,EAAE;wBACP,YAAY;wBACZ,eAAe;wBACf,aAAa;wBACb,cAAc;wBACd,kBAAkB;wBAClB,kBAAkB;wBAClB,cAAc;wBACd,gBAAgB;wBAChB,WAAW;wBACX,mBAAmB;wBACnB,YAAY;wBACZ,kBAAkB;wBAClB,aAAa;wBACb,aAAa;wBACb,eAAe;wBACf,iBAAiB;wBACjB,QAAQ;wBACR,kBAAkB;wBAClB,qBAAqB;wBACrB,eAAe;wBACf,kBAAkB;wBAClB,WAAW;wBACX,OAAO;wBACP,gBAAgB;wBAChB,mBAAmB;wBACnB,oBAAoB;wBACpB,mBAAmB;wBACnB,gBAAgB;wBAChB,cAAc;wBACd,OAAO;wBACP,aAAa;AACd,qBAAA;AACD,oBAAA,OAAO,EAAE,CAAC,sBAAsB,EAAE,oBAAoB,CAAC;oBACvD,SAAS,EAAE,CAAC,mBAAmB,CAAC;AACjC,iBAAA,CAAA;;;ACvFD;;AAEG;;ACFH;;AAEG;;;;"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "ngx-st-tables",
3
- "version": "18.0.53",
3
+ "version": "18.0.55",
4
4
  "peerDependencies": {
5
5
  "@angular/common": "^18.0.0",
6
6
  "@angular/core": "^18.0.0",